From bba4804021a5cacb7865633c0704598b7559c874 Mon Sep 17 00:00:00 2001 From: Tuvshinbayar Tuvshinzul Date: Fri, 10 Mar 2023 20:24:43 +0800 Subject: [PATCH 1/6] feat: clientImportPath config added --- prisma/mongodb.prisma | 15 +++++++++++---- prisma/mysql.prisma | 1 + prisma/postgresql.prisma | 1 + src/components/file.component.ts | 6 +++++- src/generator.ts | 4 ++++ 5 files changed, 22 insertions(+), 5 deletions(-) diff --git a/prisma/mongodb.prisma b/prisma/mongodb.prisma index 1cd9788..a8a8bb2 100755 --- a/prisma/mongodb.prisma +++ b/prisma/mongodb.prisma @@ -14,15 +14,22 @@ generator prismaClassGenerator { dryRun = "false" separateRelationFields = "false" useUndefinedDefault = "false" + clientImportPath = "@prisma/client" +} + +enum DealerType { + Pro + Basic } model Dealer { - id String @id @default(auto()) @map("_id") @db.ObjectId - createdAt DateTime? @default(now()) - modifiedAt DateTime @updatedAt + id String @id @default(auto()) @map("_id") @db.ObjectId + createdAt DateTime? @default(now()) + modifiedAt DateTime @updatedAt name String - slug String @unique + slug String @unique address Address + dealerType DealerType @default(Basic) @@map("dealers") } diff --git a/prisma/mysql.prisma b/prisma/mysql.prisma index 9c05108..cec8173 100755 --- a/prisma/mysql.prisma +++ b/prisma/mysql.prisma @@ -14,6 +14,7 @@ generator prismaClassGenerator { dryRun = "false" separateRelationFields = "false" useUndefinedDefault = "true" + clientImportPath = "@prisma/client" } enum ProductType { diff --git a/prisma/postgresql.prisma b/prisma/postgresql.prisma index f4ba899..7184a63 100755 --- a/prisma/postgresql.prisma +++ b/prisma/postgresql.prisma @@ -13,6 +13,7 @@ generator prismaClassGenerator { output = "../src/_gen/prisma-class" dryRun = "false" separateRelationFields = "false" + clientImportPath = "@prisma/client" } enum ProductType { diff --git a/src/components/file.component.ts b/src/components/file.component.ts index 10f1d4b..686bdf1 100755 --- a/src/components/file.component.ts +++ b/src/components/file.component.ts @@ -81,6 +81,7 @@ export class FileComponent implements Echoable { resolveImports() { const generator = PrismaClassGenerator.getInstance() + const customClientImportPath = generator.getConfig().clientImportPath this.prismaClass.relationTypes.forEach((relationClassName) => { this.registerImport( `${pascalCase(relationClassName)}`, @@ -88,7 +89,10 @@ export class FileComponent implements Echoable { ) }) this.prismaClass.enumTypes.forEach((enumName) => { - this.registerImport(enumName, generator.getClientImportPath()) + this.registerImport( + enumName, + customClientImportPath ?? generator.getClientImportPath(), + ) }) this.prismaClass.decorators.forEach((decorator) => { diff --git a/src/generator.ts b/src/generator.ts index 7d91e9a..3fa9a7a 100755 --- a/src/generator.ts +++ b/src/generator.ts @@ -42,6 +42,10 @@ export const PrismaClassGeneratorOptions = { desc: 'use undefined default', defaultValue: false, }, + clientImportPath: { + desc: 'custom client import path', + defaultValue: undefined, + }, } as const export type PrismaClassGeneratorOptionsKeys = From 54a53ba5b83962929bc2aabb9434deae4a60e448 Mon Sep 17 00:00:00 2001 From: Tuvshinbayar Tuvshinzul Date: Fri, 10 Mar 2023 23:09:11 +0800 Subject: [PATCH 2/6] feat: independent publishable package --- package.json | 14 ++++++++------ src/convertor.ts | 2 +- src/generator.ts | 2 +- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index 349147b..b1bd451 100755 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { - "name": "prisma-class-generator", - "version": "0.2.5", + "name": "@tuvshinb4y4r/prisma-class-generator", + "version": "0.2.8", "description": "Class generator from Prisma schema", "main": "dist/index.js", "license": "MIT", @@ -10,14 +10,16 @@ "typescript", "generator" ], - "homepage": "https://github.com/kimjbstar/prisma-class-generator", + "homepage": "https://github.com/tuvshinbay4r/prisma-class-generator", "repository": { "type": "git", - "url": "git://github.com/kimjbstar/prisma-class-generator.git" + "url": "git://github.com/tuvshinbay4r/prisma-class-generator.git" }, "scripts": { "format": "prettier --write \"src/**/*.ts\"", "dev": "node -r ts-node/register src/index.ts", + "build": "npx tsc", + "prepack": "yarn build", "generate:postgresql": "prisma generate --schema prisma/postgresql.prisma", "generate:mysql": "prisma generate --schema prisma/mysql.prisma", "generate:mongodb": "prisma generate --schema prisma/mongodb.prisma" @@ -29,8 +31,8 @@ "node": ">=14" }, "author": { - "name": "kimjbstar", - "email": "kimjbstar@gmail.com" + "name": "tuvshinbayar", + "email": "givadesu@gmail.com" }, "dependencies": { "@prisma/client": "^4.7.1", diff --git a/src/convertor.ts b/src/convertor.ts index 472f451..b18a526 100755 --- a/src/convertor.ts +++ b/src/convertor.ts @@ -245,7 +245,7 @@ export class PrismaConvertor { deco.params.push( JSON.stringify({ description: - 'generated by [prisma-class-generator](https://github.com/kimjbstar/prisma-class-generator)', + 'generated by [prisma-class-generator](https://github.com/tuvshinbay4r/prisma-class-generator)', }), ) classComponent.decorators.push(deco) diff --git a/src/generator.ts b/src/generator.ts index 3fa9a7a..a854d2c 100755 --- a/src/generator.ts +++ b/src/generator.ts @@ -15,7 +15,7 @@ import { ImportComponent } from './components/import.component' import * as prettier from 'prettier' import { FileComponent } from './components/file.component' -export const GENERATOR_NAME = 'Prisma Class Generator' +export const GENERATOR_NAME = 'prisma-class-generator' export const PrismaClassGeneratorOptions = { makeIndexFile: { From 4fc5dd9ced268b8af2c61c1309fe3d74f8de8404 Mon Sep 17 00:00:00 2001 From: Tuvshinbayar Tuvshinzul Date: Sun, 12 Mar 2023 16:00:28 +0800 Subject: [PATCH 3/6] fix: importing object fields' path --- prisma/mongodb.prisma | 16 +++++++++++----- src/components/class.component.ts | 1 + src/components/file.component.ts | 7 +++++++ src/convertor.ts | 6 ++++++ 4 files changed, 25 insertions(+), 5 deletions(-) diff --git a/prisma/mongodb.prisma b/prisma/mongodb.prisma index a8a8bb2..26de4e3 100755 --- a/prisma/mongodb.prisma +++ b/prisma/mongodb.prisma @@ -22,14 +22,20 @@ enum DealerType { Basic } +type DealerProfile { + nickname String + bio String +} + model Dealer { - id String @id @default(auto()) @map("_id") @db.ObjectId - createdAt DateTime? @default(now()) - modifiedAt DateTime @updatedAt + id String @id @default(auto()) @map("_id") @db.ObjectId + createdAt DateTime? @default(now()) + modifiedAt DateTime @updatedAt name String - slug String @unique + slug String @unique address Address - dealerType DealerType @default(Basic) + dealerType DealerType @default(Basic) + profiles DealerProfile[] @@map("dealers") } diff --git a/src/components/class.component.ts b/src/components/class.component.ts index 9b100ac..357e5f0 100755 --- a/src/components/class.component.ts +++ b/src/components/class.component.ts @@ -11,6 +11,7 @@ export class ClassComponent extends BaseComponent implements Echoable { fields?: FieldComponent[] relationTypes?: string[] enumTypes?: string[] = [] + objectTypes?: string[] = [] extra?: string = '' echo = () => { diff --git a/src/components/file.component.ts b/src/components/file.component.ts index 686bdf1..4f1b6db 100755 --- a/src/components/file.component.ts +++ b/src/components/file.component.ts @@ -95,6 +95,13 @@ export class FileComponent implements Echoable { ) }) + this.prismaClass.objectTypes.forEach((objectName) => { + this.registerImport( + objectName, + customClientImportPath ?? generator.getClientImportPath(), + ) + }) + this.prismaClass.decorators.forEach((decorator) => { this.registerImport(decorator.name, decorator.importFrom) }) diff --git a/src/convertor.ts b/src/convertor.ts index b18a526..df9d136 100755 --- a/src/convertor.ts +++ b/src/convertor.ts @@ -217,6 +217,7 @@ export class PrismaConvertor { .map((v) => v.type), ) const enums = model.fields.filter((field) => field.kind === 'enum') + const objects = model.fields.filter((field) => field.kind === 'object') classComponent.fields = model.fields .filter((field) => { @@ -237,6 +238,11 @@ export class PrismaConvertor { ? [] : enums.map((field) => field.type.toString()) + classComponent.objectTypes = + extractRelationFields === true + ? [] + : objects.map((field) => field.type.toString()) + if (useGraphQL) { const deco = new DecoratorComponent({ name: 'ObjectType', From 23187d85b382a582ae889bff03717d27c6ffe31d Mon Sep 17 00:00:00 2001 From: Tuvshinbayar Tuvshinzul Date: Sun, 12 Mar 2023 16:18:54 +0800 Subject: [PATCH 4/6] fix: prepublish hook added --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index b1bd451..6bed875 100755 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@tuvshinb4y4r/prisma-class-generator", - "version": "0.2.8", + "version": "0.2.10", "description": "Class generator from Prisma schema", "main": "dist/index.js", "license": "MIT", @@ -22,7 +22,8 @@ "prepack": "yarn build", "generate:postgresql": "prisma generate --schema prisma/postgresql.prisma", "generate:mysql": "prisma generate --schema prisma/mysql.prisma", - "generate:mongodb": "prisma generate --schema prisma/mongodb.prisma" + "generate:mongodb": "prisma generate --schema prisma/mongodb.prisma", + "prepublish": "yarn build" }, "bin": { "prisma-class-generator": "dist/bin.js" From e164188596d22ec0249291a8fa25aa4800b621e2 Mon Sep 17 00:00:00 2001 From: Tuvshinbayar Tuvshinzul Date: Sun, 12 Mar 2023 16:27:10 +0800 Subject: [PATCH 5/6] fix: type importing --- prisma/mongodb.prisma | 9 +++++++++ src/components/class.component.ts | 2 +- src/components/file.component.ts | 4 ++-- src/convertor.ts | 9 ++++++--- 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/prisma/mongodb.prisma b/prisma/mongodb.prisma index 26de4e3..46daff4 100755 --- a/prisma/mongodb.prisma +++ b/prisma/mongodb.prisma @@ -27,6 +27,14 @@ type DealerProfile { bio String } +model Deals { + id String @id @default(auto()) @map("_id") @db.ObjectId + amount Int + dealer Dealer @relation(fields: [dealerId], references: [id]) + dealerId String @db.ObjectId + createdAt DateTime @default(now()) +} + model Dealer { id String @id @default(auto()) @map("_id") @db.ObjectId createdAt DateTime? @default(now()) @@ -36,6 +44,7 @@ model Dealer { address Address dealerType DealerType @default(Basic) profiles DealerProfile[] + deals Deals[] @@map("dealers") } diff --git a/src/components/class.component.ts b/src/components/class.component.ts index 357e5f0..2d0ff9e 100755 --- a/src/components/class.component.ts +++ b/src/components/class.component.ts @@ -11,7 +11,7 @@ export class ClassComponent extends BaseComponent implements Echoable { fields?: FieldComponent[] relationTypes?: string[] enumTypes?: string[] = [] - objectTypes?: string[] = [] + typeTypes?: string[] = [] extra?: string = '' echo = () => { diff --git a/src/components/file.component.ts b/src/components/file.component.ts index 4f1b6db..98355a9 100755 --- a/src/components/file.component.ts +++ b/src/components/file.component.ts @@ -95,9 +95,9 @@ export class FileComponent implements Echoable { ) }) - this.prismaClass.objectTypes.forEach((objectName) => { + this.prismaClass.typeTypes.forEach((typeName) => { this.registerImport( - objectName, + typeName, customClientImportPath ?? generator.getClientImportPath(), ) }) diff --git a/src/convertor.ts b/src/convertor.ts index df9d136..66b1f24 100755 --- a/src/convertor.ts +++ b/src/convertor.ts @@ -217,7 +217,10 @@ export class PrismaConvertor { .map((v) => v.type), ) const enums = model.fields.filter((field) => field.kind === 'enum') - const objects = model.fields.filter((field) => field.kind === 'object') + const types = model.fields.filter( + (field) => + field.kind === 'object' && field.relationName === undefined, + ) classComponent.fields = model.fields .filter((field) => { @@ -238,10 +241,10 @@ export class PrismaConvertor { ? [] : enums.map((field) => field.type.toString()) - classComponent.objectTypes = + classComponent.typeTypes = extractRelationFields === true ? [] - : objects.map((field) => field.type.toString()) + : types.map((field) => field.type.toString()) if (useGraphQL) { const deco = new DecoratorComponent({ From dd6e67b0aceb217e3ea9d40c793402670f54b70f Mon Sep 17 00:00:00 2001 From: Tuvshinbayar Tuvshinzul Date: Sun, 12 Mar 2023 16:30:09 +0800 Subject: [PATCH 6/6] build: 0.2.11 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 6bed875..4340b12 100755 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@tuvshinb4y4r/prisma-class-generator", - "version": "0.2.10", + "version": "0.2.11", "description": "Class generator from Prisma schema", "main": "dist/index.js", "license": "MIT",