From aaa3be8aaf45aa4215efacaa39c27a6fb42dae4d Mon Sep 17 00:00:00 2001 From: Yuki Ito Date: Thu, 5 Oct 2023 17:45:58 +0900 Subject: [PATCH] Add --immutable-types flag to strapi-generate-types and add .npmignore --- .npmignore | 2 ++ generate-types.ts | 12 +++++++----- package.json | 12 ++++++------ 3 files changed, 15 insertions(+), 11 deletions(-) create mode 100644 .npmignore diff --git a/.npmignore b/.npmignore new file mode 100644 index 0000000..55277dc --- /dev/null +++ b/.npmignore @@ -0,0 +1,2 @@ +*.tgz +*.tsbuildinfo diff --git a/generate-types.ts b/generate-types.ts index 2247c65..80a67c6 100644 --- a/generate-types.ts +++ b/generate-types.ts @@ -4,6 +4,8 @@ import { pascalCase } from 'change-case'; import { models, components, AttributesSetting } from './strapi-settings.js'; import { destroy } from './strapi.js'; +const isReadonly = process.argv.includes('--immutable-types'); + const project = new ts.Project(); const sf = project.createSourceFile('models.ts', '', { overwrite: true }); @@ -16,7 +18,7 @@ for (const [name, modelSetting] of Object.entries(models)) { { name: modelSetting.primaryKey, type: 'number', - isReadonly: true, + isReadonly, }, ...interfacePropertiesFromAttributesSetting(modelSetting.attributes), ], @@ -31,7 +33,7 @@ sf.addTypeAlias({ sf.addInterface({ isExported: true, - properties: Object.entries(models).map(([name]) => ({ name: `'${name}'`, type: modelInterfaceName(name), isReadonly: true })), + properties: Object.entries(models).map(([name]) => ({ name: `'${name}'`, type: modelInterfaceName(name), isReadonly })), name: 'ModelByName', }); @@ -71,7 +73,7 @@ function interfacePropertiesFromAttributesSetting(attributes: AttributesSetting) const base = { name, hasQuestionToken: isOptional, - isReadonly: true, + isReadonly, } as const; const optionalTypeSuffix = isOptional ? ' | null' : ''; if ('type' in attr) { @@ -100,7 +102,7 @@ function interfacePropertiesFromAttributesSetting(attributes: AttributesSetting) return [{ ...base, hasQuestionToken: attr.repeatable ? false : isOptional, // For repeatable component field, at least empty array is necessary. - type: attr.repeatable ? `readonly ${componentInterfaceName(attr.component)}[]` : (componentInterfaceName(attr.component) + optionalTypeSuffix), + type: attr.repeatable ? `${isReadonly ? 'readonly ' : ''}${componentInterfaceName(attr.component)}[]` : (componentInterfaceName(attr.component) + optionalTypeSuffix), }]; case 'decimal': return [{ ...base, type: 'number' + optionalTypeSuffix }]; @@ -114,7 +116,7 @@ function interfacePropertiesFromAttributesSetting(attributes: AttributesSetting) } if ('collection' in attr) { // return [{ ...base, type: attr.collection === '*' ? 'any' : modelInterfaceName(attr.collection) + optionalTypeSuffix }]; - return [{ ...base, type: 'readonly number[]' + optionalTypeSuffix }]; + return [{ ...base, type: `${isReadonly ? 'readonly ' : ''}number[]` + optionalTypeSuffix }]; } throw new Error(`Unknown attribute type: ${JSON.stringify(attr)}`); }) diff --git a/package.json b/package.json index f0202e0..8f63c7f 100644 --- a/package.json +++ b/package.json @@ -1,12 +1,12 @@ { - "name": "strapi-data-migrator", - "version": "0.0.1", + "name": "@acomagu/strapi-data-migrator", + "version": "0.0.2", "type": "module", "bin": { - "strapi-generate-types": "./generate-types.js", - "strapi-dump-data": "./dump-data.js", - "strapi-import-data": "./import-data.js", - "strapi-generate-transformer": "./generate-transformer.js" + "strapi-generate-types": "generate-types.js", + "strapi-dump-data": "dump-data.js", + "strapi-import-data": "import-data.js", + "strapi-generate-transformer": "generate-transformer.js" }, "dependencies": { "chalk": "^5.3.0",