From f8a03de9b2c83f9d6ceb77893bcea4e28b7b4d1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=8E=E7=A6=8F=E6=B6=9B?= <306784578@qq.com> Date: Sun, 24 Apr 2022 15:38:00 +0800 Subject: [PATCH 1/4] m --- bin/sequelize-auto | 10 ++++++++++ package.json | 2 +- src/auto-generator.ts | 4 +++- src/auto-writer.ts | 8 +++++--- src/types.ts | 7 +++++-- 5 files changed, 24 insertions(+), 7 deletions(-) diff --git a/bin/sequelize-auto b/bin/sequelize-auto index aaaaaa25..62a2f240 100755 --- a/bin/sequelize-auto +++ b/bin/sequelize-auto @@ -86,6 +86,14 @@ const argv = require('yargs') description: 'Set case of model names: c|l|o|p|u \n c = camelCase \n l = lower_case \n o = original (default) \n p = PascalCase \n u = UPPER_CASE', alias: 'cm' }) + .option('caseModelPrefix', { + description: 'Set prefix of model names', + alias: 'cmp' + }) + .option('caseModelSuffix', { + description: 'Set suffix of model names', + alias: 'cmf' + }) .option('caseProp', { description: 'Set case of property names: c|l|o|p|u', alias: 'cp' @@ -208,6 +216,8 @@ async function readPassword() { configFile.schema = argv.schema || configFile.schema; configFile.lang = argv.lang || configFile.lang || 'es5'; configFile.caseModel = argv.caseModel || configFile.caseModel || 'o'; + configFile.caseModelPrefix = argv.caseModelPrefix || configFile.caseModelPrefix || ''; + configFile.caseModelSuffix = argv.caseModelSuffix || configFile.caseModelSuffix || ''; configFile.caseFile = argv.caseFile || configFile.caseFile || 'o'; configFile.caseProp = argv.caseProp || configFile.caseProp || 'o'; configFile.noAlias = argv.noAlias || configFile.noAlias || false; diff --git a/package.json b/package.json index 18906f8a..b1e0e499 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "sequelize-auto", - "version": "0.8.7", + "version": "0.8.7-1", "publishConfig": { "tag": "latest" }, diff --git a/src/auto-generator.ts b/src/auto-generator.ts index 9d3b4252..35ea28cc 100644 --- a/src/auto-generator.ts +++ b/src/auto-generator.ts @@ -17,6 +17,8 @@ export class AutoGenerator { spaces?: boolean; lang?: LangOption; caseModel?: CaseOption; + caseModelPrefix?: string; + caseModelSuffix?: string; caseProp?: CaseOption; caseFile?: CaseFileOption; skipFields?: string[]; @@ -85,7 +87,7 @@ export class AutoGenerator { tableNames.forEach(table => { let str = header; const [schemaName, tableNameOrig] = qNameSplit(table); - const tableName = makeTableName(this.options.caseModel, tableNameOrig, this.options.singularize, this.options.lang); + const tableName = makeTableName(this.options.caseModel, this.options.caseModelPrefix, this.options.caseModelSuffix, tableNameOrig, this.options.singularize, this.options.lang); if (this.options.lang === 'ts') { const associations = this.addTypeScriptAssociationMixins(table); diff --git a/src/auto-writer.ts b/src/auto-writer.ts index 07f279ad..3c055f0e 100644 --- a/src/auto-writer.ts +++ b/src/auto-writer.ts @@ -15,6 +15,8 @@ export class AutoWriter { options: { caseFile?: CaseFileOption; caseModel?: CaseOption; + caseModelPrefix?: CaseOption; + caseModelSuffix?: CaseOption; caseProp?: CaseOption; directory: string; lang?: LangOption; @@ -131,7 +133,7 @@ export class AutoWriter { // import statements tables.forEach(t => { const fileName = recase(this.options.caseFile, t, this.options.singularize); - const modelName = makeTableName(this.options.caseModel, t, this.options.singularize, this.options.lang); + const modelName = makeTableName(this.options.caseModel,this.options.caseModelPrefix,this.options.caseModelSuffix, t, this.options.singularize, this.options.lang); modelNames.push(modelName); str += `import { ${modelName} as _${modelName} } from "./${fileName}";\n`; str += `import type { ${modelName}Attributes, ${modelName}CreationAttributes } from "./${fileName}";\n`; @@ -179,7 +181,7 @@ export class AutoWriter { // import statements tables.forEach(t => { const fileName = recase(this.options.caseFile, t, this.options.singularize); - const modelName = makeTableName(this.options.caseModel, t, this.options.singularize, this.options.lang); + const modelName = makeTableName(this.options.caseModel,this.options.caseModelPrefix,this.options.caseModelSuffix, t, this.options.singularize, this.options.lang); modelNames.push(modelName); str += `${vardef} _${modelName} = require("./${fileName}");\n`; }); @@ -215,7 +217,7 @@ export class AutoWriter { // import statements tables.forEach(t => { const fileName = recase(this.options.caseFile, t, this.options.singularize); - const modelName = makeTableName(this.options.caseModel, t, this.options.singularize, this.options.lang); + const modelName = makeTableName(this.options.caseModel, this.options.caseModelPrefix,this.options.caseModelSuffix, t, this.options.singularize, this.options.lang); modelNames.push(modelName); str += `import _${modelName} from "./${fileName}.js";\n`; }); diff --git a/src/types.ts b/src/types.ts index cb3d52a0..747418f5 100644 --- a/src/types.ts +++ b/src/types.ts @@ -231,12 +231,15 @@ export function recase(opt: CaseOption | CaseFileOption | undefined, val: string } const tsNames = ["DataTypes", "Model", "Optional", "Sequelize"]; -export function makeTableName(opt: CaseOption | undefined, tableNameOrig: string | null, singular = false, lang = "es5") { +export function makeTableName(opt: CaseOption | undefined, caseModelPrefix:string|undefined, caseModelSuffix:string|undefined, tableNameOrig: string | null, singular = false, lang = "es5") { + if(!caseModelPrefix) caseModelPrefix = '' + if(!caseModelSuffix) caseModelSuffix = '' let name = recase(opt, tableNameOrig, singular); + if (isReserved(name) || (lang == "ts" && tsNames.includes(name))) { name += "_"; } - return name; + return caseModelPrefix + name + caseModelSuffix; } /** build the array of indentation strings */ From 045eb35753f68e7d83929d73f8e57f7d8c2a4a65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=8E=E7=A6=8F=E6=B6=9B?= <306784578@qq.com> Date: Fri, 29 Apr 2022 13:24:02 +0800 Subject: [PATCH 2/4] Set Retain Sequelize standard fields --- bin/sequelize-auto | 4 ++++ src/auto-generator.ts | 4 +++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/bin/sequelize-auto b/bin/sequelize-auto index 62a2f240..f4b696c0 100755 --- a/bin/sequelize-auto +++ b/bin/sequelize-auto @@ -94,6 +94,10 @@ const argv = require('yargs') description: 'Set suffix of model names', alias: 'cmf' }) + .option('retainStandardFields', { + description: 'Set Retain Sequelize standard fields', + alias: 'rsf' + }) .option('caseProp', { description: 'Set case of property names: c|l|o|p|u', alias: 'cp' diff --git a/src/auto-generator.ts b/src/auto-generator.ts index 35ea28cc..c72ffaf2 100644 --- a/src/auto-generator.ts +++ b/src/auto-generator.ts @@ -19,6 +19,8 @@ export class AutoGenerator { caseModel?: CaseOption; caseModelPrefix?: string; caseModelSuffix?: string; + // retain Sequelize standard fields + retainStandardFields?: boolean; caseProp?: CaseOption; caseFile?: CaseFileOption; skipFields?: string[]; @@ -239,7 +241,7 @@ export class AutoGenerator { // ignore Sequelize standard fields const additional = this.options.additional; - if (additional && (additional.timestamps !== false) && (this.isTimestampField(field) || this.isParanoidField(field))) { + if (this.options.retainStandardFields && additional && (additional.timestamps !== false) && (this.isTimestampField(field) || this.isParanoidField(field))) { return ''; } From c65cafe2504f31a4c1415ad23a3c782893ad7e94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=8E=E7=A6=8F=E6=B6=9B?= <306784578@qq.com> Date: Fri, 29 Apr 2022 21:26:53 +0800 Subject: [PATCH 3/4] m --- bin/sequelize-auto | 1 + 1 file changed, 1 insertion(+) diff --git a/bin/sequelize-auto b/bin/sequelize-auto index f4b696c0..ec09f962 100755 --- a/bin/sequelize-auto +++ b/bin/sequelize-auto @@ -222,6 +222,7 @@ async function readPassword() { configFile.caseModel = argv.caseModel || configFile.caseModel || 'o'; configFile.caseModelPrefix = argv.caseModelPrefix || configFile.caseModelPrefix || ''; configFile.caseModelSuffix = argv.caseModelSuffix || configFile.caseModelSuffix || ''; + configFile.retainStandardFields = argv.retainStandardFields || configFile.retainStandardFields || ''; configFile.caseFile = argv.caseFile || configFile.caseFile || 'o'; configFile.caseProp = argv.caseProp || configFile.caseProp || 'o'; configFile.noAlias = argv.noAlias || configFile.noAlias || false; From 583fcee712d0e01130b5f19eded18a19de4362ca Mon Sep 17 00:00:00 2001 From: langfutao <306784578@qq.com> Date: Sat, 30 Apr 2022 20:45:11 +0800 Subject: [PATCH 4/4] m --- bin/sequelize-auto | 3 ++- src/auto-generator.ts | 4 ++-- src/auto-writer.ts | 6 +++--- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/bin/sequelize-auto b/bin/sequelize-auto index ec09f962..d72ba115 100755 --- a/bin/sequelize-auto +++ b/bin/sequelize-auto @@ -96,7 +96,8 @@ const argv = require('yargs') }) .option('retainStandardFields', { description: 'Set Retain Sequelize standard fields', - alias: 'rsf' + alias: 'rsf', + type: 'boolean' }) .option('caseProp', { description: 'Set case of property names: c|l|o|p|u', diff --git a/src/auto-generator.ts b/src/auto-generator.ts index c72ffaf2..857bd2f5 100644 --- a/src/auto-generator.ts +++ b/src/auto-generator.ts @@ -97,7 +97,7 @@ export class AutoGenerator { needed.forEach(fkTable => { const set = associations.needed[fkTable]; const [fkSchema, fkTableName] = qNameSplit(fkTable); - const filename = recase(this.options.caseFile, fkTableName, this.options.singularize); + const filename = this.options.caseModelPrefix + recase(this.options.caseFile, fkTableName, this.options.singularize) + this.options.caseModelSuffix; str += 'import type { '; str += Array.from(set.values()).sort().join(', '); str += ` } from './${filename}';\n`; @@ -241,7 +241,7 @@ export class AutoGenerator { // ignore Sequelize standard fields const additional = this.options.additional; - if (this.options.retainStandardFields && additional && (additional.timestamps !== false) && (this.isTimestampField(field) || this.isParanoidField(field))) { + if (this.options.retainStandardFields !== true && additional && (additional.timestamps !== false) && (this.isTimestampField(field) || this.isParanoidField(field))) { return ''; } diff --git a/src/auto-writer.ts b/src/auto-writer.ts index 3c055f0e..092df250 100644 --- a/src/auto-writer.ts +++ b/src/auto-writer.ts @@ -89,7 +89,7 @@ export class AutoWriter { // is up to the developer to pick the right schema, and potentially chose different output // folders for each different schema. const [schemaName, tableName] = qNameSplit(table); - const fileName = recase(this.options.caseFile, tableName, this.options.singularize); + const fileName = this.options.caseModelPrefix + recase(this.options.caseFile, tableName, this.options.singularize) + this.options.caseModelSuffix; const filePath = path.join(this.options.directory, fileName + (this.options.lang === 'ts' ? '.ts' : '.js')); const writeFile = util.promisify(fs.writeFile); @@ -132,7 +132,7 @@ export class AutoWriter { const modelNames: string[] = []; // import statements tables.forEach(t => { - const fileName = recase(this.options.caseFile, t, this.options.singularize); + const fileName = this.options.caseModelPrefix + recase(this.options.caseFile, t, this.options.singularize) + this.options.caseModelSuffix; const modelName = makeTableName(this.options.caseModel,this.options.caseModelPrefix,this.options.caseModelSuffix, t, this.options.singularize, this.options.lang); modelNames.push(modelName); str += `import { ${modelName} as _${modelName} } from "./${fileName}";\n`; @@ -180,7 +180,7 @@ export class AutoWriter { const modelNames: string[] = []; // import statements tables.forEach(t => { - const fileName = recase(this.options.caseFile, t, this.options.singularize); + const fileName = this.options.caseModelPrefix + recase(this.options.caseFile, t, this.options.singularize) + this.options.caseModelSuffix; const modelName = makeTableName(this.options.caseModel,this.options.caseModelPrefix,this.options.caseModelSuffix, t, this.options.singularize, this.options.lang); modelNames.push(modelName); str += `${vardef} _${modelName} = require("./${fileName}");\n`;