From 4cbb46a0d1b1824185829e38fd436420f5c638be Mon Sep 17 00:00:00 2001 From: xencodes Date: Mon, 6 Mar 2023 11:47:45 +0530 Subject: [PATCH] feat: add support for class prefix and postfix --- README.md | 4 ++++ prisma/postgresql.prisma | 2 ++ src/components/class.component.ts | 7 ++++++- src/convertor.ts | 10 +++++++++- src/generator.ts | 13 ++++++++++++- 5 files changed, 33 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index e57f76e..84ca799 100755 --- a/README.md +++ b/README.md @@ -258,6 +258,10 @@ export class ProductDto extends IntersectionType( - makes index file, default value is **true** - _separateRelationFields_ - Puts relational fields into different file for each model. This way the class will match the object returned by a Prisma query, default value is **false** +- _classPrefix_ + - Prefix for generated classes, default value is **''** +- _classPostfix_ + - Postfix for generated classes, default value is **''** ### **How it works?** diff --git a/prisma/postgresql.prisma b/prisma/postgresql.prisma index f4ba899..adf8cd4 100755 --- a/prisma/postgresql.prisma +++ b/prisma/postgresql.prisma @@ -13,6 +13,8 @@ generator prismaClassGenerator { output = "../src/_gen/prisma-class" dryRun = "false" separateRelationFields = "false" + classPrefix = "" + classPostfix = "" } enum ProductType { diff --git a/src/components/class.component.ts b/src/components/class.component.ts index 9b100ac..07ee848 100755 --- a/src/components/class.component.ts +++ b/src/components/class.component.ts @@ -12,14 +12,19 @@ export class ClassComponent extends BaseComponent implements Echoable { relationTypes?: string[] enumTypes?: string[] = [] extra?: string = '' + classPrefix?: string + classPostfix?: string echo = () => { const fieldContent = this.fields.map((_field) => _field.echo()) + + const classPrefix = this.classPrefix ?? '' + const classPostfix = this.classPostfix ?? '' let str = CLASS_TEMPLATE.replace( '#!{DECORATORS}', this.echoDecorators(), ) - .replace('#!{NAME}', `${this.name}`) + .replace('#!{NAME}', `${classPrefix}${this.name}${classPostfix}`) .replace('#!{FIELDS}', fieldContent.join('\r\n')) .replace('#!{EXTRA}', this.extra) diff --git a/src/convertor.ts b/src/convertor.ts index 472f451..52dba39 100755 --- a/src/convertor.ts +++ b/src/convertor.ts @@ -206,8 +206,15 @@ export class PrismaConvertor { if (postfix) { className += postfix } - const classComponent = new ClassComponent({ name: className }) + const classPrefix = this._config.classPrefix + const classPostfix = this._config.classPostfix + const classComponent = new ClassComponent({ + name: className, + classPrefix, + classPostfix, + }) + /** relation & enums */ const relationTypes = uniquify( model.fields @@ -229,6 +236,7 @@ export class PrismaConvertor { return true }) .map((field) => this.convertField(field)) + classComponent.relationTypes = extractRelationFields === false ? [] : relationTypes diff --git a/src/generator.ts b/src/generator.ts index 7d91e9a..27d4f55 100755 --- a/src/generator.ts +++ b/src/generator.ts @@ -42,6 +42,14 @@ export const PrismaClassGeneratorOptions = { desc: 'use undefined default', defaultValue: false, }, + classPrefix: { + desc: 'set class prefix', + defaultValue: '', + }, + classPostfix: { + desc: 'set class postfix', + defaultValue: '', + }, } as const export type PrismaClassGeneratorOptionsKeys = @@ -152,12 +160,15 @@ export class PrismaClassGenerator { fileRow.write(config.dryRun) }) if (config.makeIndexFile) { + const classPrefix = config.classPrefix ?? '' + const classPostfix = config.classPostfix ?? '' + const indexFilePath = path.resolve(output, 'index.ts') const imports = files.map( (fileRow) => new ImportComponent( getRelativeTSPath(indexFilePath, fileRow.getPath()), - fileRow.prismaClass.name, + `${classPrefix}${fileRow.prismaClass.name}${classPostfix}`, ), )