Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 10 additions & 7 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "prisma-class-generator",
"version": "0.2.5",
"name": "@tuvshinb4y4r/prisma-class-generator",
"version": "0.2.11",
"description": "Class generator from Prisma schema",
"main": "dist/index.js",
"license": "MIT",
Expand All @@ -10,17 +10,20 @@
"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"
"generate:mongodb": "prisma generate --schema prisma/mongodb.prisma",
"prepublish": "yarn build"
},
"bin": {
"prisma-class-generator": "dist/bin.js"
Expand All @@ -29,8 +32,8 @@
"node": ">=14"
},
"author": {
"name": "kimjbstar",
"email": "kimjbstar@gmail.com"
"name": "tuvshinbayar",
"email": "givadesu@gmail.com"
},
"dependencies": {
"@prisma/client": "^4.7.1",
Expand Down
30 changes: 26 additions & 4 deletions prisma/mongodb.prisma
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,37 @@ generator prismaClassGenerator {
dryRun = "false"
separateRelationFields = "false"
useUndefinedDefault = "false"
clientImportPath = "@prisma/client"
}

enum DealerType {
Pro
Basic
}

type DealerProfile {
nickname String
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())
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)
profiles DealerProfile[]
deals Deals[]

@@map("dealers")
}
Expand Down
1 change: 1 addition & 0 deletions prisma/mysql.prisma
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ generator prismaClassGenerator {
dryRun = "false"
separateRelationFields = "false"
useUndefinedDefault = "true"
clientImportPath = "@prisma/client"
}

enum ProductType {
Expand Down
1 change: 1 addition & 0 deletions prisma/postgresql.prisma
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ generator prismaClassGenerator {
output = "../src/_gen/prisma-class"
dryRun = "false"
separateRelationFields = "false"
clientImportPath = "@prisma/client"
}

enum ProductType {
Expand Down
1 change: 1 addition & 0 deletions src/components/class.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ export class ClassComponent extends BaseComponent implements Echoable {
fields?: FieldComponent[]
relationTypes?: string[]
enumTypes?: string[] = []
typeTypes?: string[] = []
extra?: string = ''

echo = () => {
Expand Down
13 changes: 12 additions & 1 deletion src/components/file.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -81,14 +81,25 @@ export class FileComponent implements Echoable {

resolveImports() {
const generator = PrismaClassGenerator.getInstance()
const customClientImportPath = generator.getConfig().clientImportPath
this.prismaClass.relationTypes.forEach((relationClassName) => {
this.registerImport(
`${pascalCase(relationClassName)}`,
FileComponent.TEMP_PREFIX + relationClassName,
)
})
this.prismaClass.enumTypes.forEach((enumName) => {
this.registerImport(enumName, generator.getClientImportPath())
this.registerImport(
enumName,
customClientImportPath ?? generator.getClientImportPath(),
)
})

this.prismaClass.typeTypes.forEach((typeName) => {
this.registerImport(
typeName,
customClientImportPath ?? generator.getClientImportPath(),
)
})

this.prismaClass.decorators.forEach((decorator) => {
Expand Down
11 changes: 10 additions & 1 deletion src/convertor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -217,6 +217,10 @@ export class PrismaConvertor {
.map((v) => v.type),
)
const enums = model.fields.filter((field) => field.kind === 'enum')
const types = model.fields.filter(
(field) =>
field.kind === 'object' && field.relationName === undefined,
)

classComponent.fields = model.fields
.filter((field) => {
Expand All @@ -237,6 +241,11 @@ export class PrismaConvertor {
? []
: enums.map((field) => field.type.toString())

classComponent.typeTypes =
extractRelationFields === true
? []
: types.map((field) => field.type.toString())

if (useGraphQL) {
const deco = new DecoratorComponent({
name: 'ObjectType',
Expand All @@ -245,7 +254,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)
Expand Down
6 changes: 5 additions & 1 deletion src/generator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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: {
Expand All @@ -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 =
Expand Down