Skip to content

Commit 166c0ba

Browse files
authored
Merge pull request #140 from mk668a/develop
v 1.0.4
2 parents 7c74e07 + 76d7bcf commit 166c0ba

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+366
-67
lines changed

packages/generator/src/generator/generateArgs.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ export const generateArgs = (dmmfDocument: DmmfDocument, project: Project, outpu
3939
fields
4040
.filter((field) => !field.typeName)
4141
.map((field) => field.selectedInputType)
42-
.filter((argType) => argType.location === 'enumTypes')
42+
.filter((argType) => argType.location === 'enumTypes' && argType.namespace === 'model')
4343
.map((argType) => argType.type as string),
4444
),
4545
].sort()) {

packages/generator/src/generator/generateCommonEnums.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,11 @@ export const generateCommonEnums = (dmmfDocument: DmmfDocument, project: Project
1212
sourceFile.addImportDeclaration({ moduleSpecifier: '@nestjs/graphql', namespaceImport: 'NestJsGraphQL' })
1313

1414
const datamodelEnumNames = dmmfDocument.datamodel.enums.map((enumDef) => enumDef.typeName)
15+
datamodelEnumNames.forEach((enumDef) => {
16+
sourceFile.addStatements([
17+
`export * from "../enums/${enumDef}.enum";`
18+
])
19+
})
1520
dmmfDocument.schema.enums
1621
// skip enums from datamodel
1722
.filter((enumDef) => !datamodelEnumNames.includes(enumDef.typeName))

packages/generator/src/generator/generateCommonInput.ts

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,19 +17,34 @@ export const generateCommonInput = (dmmfDocument: DmmfDocument, project: Project
1717
// imports
1818
sourceFile.addImportDeclaration({ moduleSpecifier: '@nestjs/graphql', namespaceImport: 'NestJsGraphQL' })
1919
// import enums
20-
const enums: string[] = []
20+
const enumsPrisma: string[] = []
21+
const enumsModel: string[] = []
2122
dmmfDocument.schema.inputTypes.forEach((inputType) => {
22-
enums.push(
23+
enumsPrisma.push(
2324
...inputType.fields
2425
.map((field) => field.selectedInputType)
25-
.filter((fieldType) => fieldType.location === 'enumTypes')
26+
.filter((fieldType) => fieldType.location === 'enumTypes' && fieldType.namespace === 'prisma')
27+
.map((fieldType) => fieldType.type as string),
28+
)
29+
enumsModel.push(
30+
...inputType.fields
31+
.map((field) => field.selectedInputType)
32+
.filter((fieldType) => fieldType.location === 'enumTypes' && fieldType.namespace === 'model')
2633
.map((fieldType) => fieldType.type as string),
2734
)
2835
})
29-
if (enums.length) {
36+
if (enumsPrisma.length) {
3037
sourceFile.addImportDeclaration({
31-
moduleSpecifier: '../enums',
32-
namedImports: [...new Set(enums)],
38+
moduleSpecifier: '../../common/enums',
39+
namedImports: [...new Set(enumsPrisma)],
40+
})
41+
}
42+
if (enumsModel.length) {
43+
enumsModel.forEach((name) => {
44+
sourceFile.addImportDeclaration({
45+
moduleSpecifier: `../../enums/${name}.enum`,
46+
namedImports: [name],
47+
})
3348
})
3449
}
3550

packages/generator/src/generator/generateCommonOutput.ts

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -22,23 +22,35 @@ export const generateCommonOutput = (dmmfDocument: DmmfDocument, project: Projec
2222
// imports
2323
sourceFile.addImportDeclaration({ moduleSpecifier: '@nestjs/graphql', namespaceImport: 'NestJsGraphQL' })
2424
outputTypesToGenerate.forEach((type) => {
25-
// import args
26-
const fieldArgsTypeNames = type.fields.filter((it) => it.argsTypeName).map((it) => it.argsTypeName!)
27-
for (const item of [...new Set(fieldArgsTypeNames)].sort()) {
28-
sourceFile.addImportDeclaration({ moduleSpecifier: path.posix.join('./args', `${camelCase(item)}.args`), namedImports: [item] })
29-
}
3025
// import outputs
3126
const outputs = type.fields.filter((field) => field.outputType.location === 'outputObjectTypes').map((field) => field.outputType.type)
3227
for (const item of [...new Set(outputs)].sort()) {
33-
sourceFile.addImportDeclaration({ moduleSpecifier: path.posix.join('../outputs', `${camelCase(item)}.args`), namedImports: [item] })
28+
sourceFile.addImportDeclaration({ moduleSpecifier: path.posix.join('../outputs', `${camelCase(item)}.output`), namedImports: [item] })
29+
}
30+
if (outputs.length) {
31+
for (const item of [...new Set(outputs)].sort()) {
32+
sourceFile.addImportDeclaration({ moduleSpecifier: `./${item}.output`, namedImports: [item] })
33+
}
3434
}
3535
// import enums
36-
const enums = type.fields
36+
const enumsPrisma = type.fields
37+
.map((field) => field.outputType)
38+
.filter((fieldType) => fieldType.location === 'enumTypes' && fieldType.namespace === 'prisma')
39+
.map((fieldType) => fieldType.type)
40+
const enumsModel = type.fields
3741
.map((field) => field.outputType)
38-
.filter((fieldType) => fieldType.location === 'enumTypes')
42+
.filter((fieldType) => fieldType.location === 'enumTypes' && fieldType.namespace === 'model')
3943
.map((fieldType) => fieldType.type)
40-
for (const item of [...new Set(enums)].sort()) {
41-
sourceFile.addImportDeclaration({ moduleSpecifier: path.posix.join('../enums', `${camelCase(item)}.args`), namedImports: [item] })
44+
45+
if (enumsPrisma.length) {
46+
for (const item of [...new Set(enumsPrisma)].sort()) {
47+
sourceFile.addImportDeclaration({ moduleSpecifier: path.posix.join(`../enums`), namedImports: [item] })
48+
}
49+
}
50+
if (enumsModel.length) {
51+
for (const item of [...new Set(enumsPrisma)].sort()) {
52+
sourceFile.addImportDeclaration({ moduleSpecifier: path.posix.join(`../../enums/${item}.enum`), namedImports: [item] })
53+
}
4254
}
4355
})
4456

packages/generator/src/generator/generateInput.ts

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,19 +35,35 @@ export const generateInput = (dmmfDocument: DmmfDocument, project: Project, outp
3535
})
3636
})
3737
// import enums
38-
const enums: string[] = []
38+
const enumsPrisma: string[] = []
39+
const enumsModel: string[] = []
3940
dmmfDocument.schema.inputTypes.forEach((_inputType) => {
40-
enums.push(
41+
enumsPrisma.push(
4142
..._inputType.fields
4243
.map((field) => field.selectedInputType)
43-
.filter((fieldType) => fieldType.location === 'enumTypes')
44+
.filter((fieldType) => fieldType.location === 'enumTypes' && fieldType.namespace === 'prisma')
45+
.map((fieldType) => fieldType.type as string),
46+
)
47+
enumsModel.push(
48+
..._inputType.fields
49+
.map((field) => field.selectedInputType)
50+
.filter((fieldType) => fieldType.location === 'enumTypes' && fieldType.namespace === 'model')
4451
.map((fieldType) => fieldType.type as string),
4552
)
4653
})
47-
if (enums.length) {
54+
55+
if (enumsPrisma.length) {
4856
sourceFile.addImportDeclaration({
4957
moduleSpecifier: '../../common/enums',
50-
namedImports: [...new Set(enums)],
58+
namedImports: [...new Set(enumsPrisma)],
59+
})
60+
}
61+
if (enumsModel.length) {
62+
enumsModel.forEach((name) => {
63+
sourceFile.addImportDeclaration({
64+
moduleSpecifier: `../../enums/${name}.enum`,
65+
namedImports: [name],
66+
})
5167
})
5268
}
5369

packages/generator/src/generator/generateOutput.ts

Lines changed: 34 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -21,34 +21,40 @@ export const generateOutput = (dmmfDocument: DmmfDocument, project: Project, out
2121
const args: string[] = []
2222
const outputs: string[] = []
2323
const enums: string[] = []
24-
outputTypesToGenerate
25-
.filter((type) => type.modelName !== model.name)
26-
.forEach((type) => {
27-
// import args
28-
for (const item of [...new Set(type.fields.filter((it) => it.argsTypeName).map((it) => it.argsTypeName!))].sort()) {
29-
if (!args.includes(item)) args.push(item)
30-
}
31-
// import outputs
32-
for (const item of [
33-
...new Set(type.fields.filter((field) => field.outputType.location === 'outputObjectTypes').map((field) => field.outputType.type)),
34-
].sort()) {
35-
if (!outputs.includes(item)) outputs.push(item)
36-
}
37-
// import enums
38-
for (const item of [
39-
...new Set(
40-
type.fields
41-
.map((field) => field.outputType)
42-
.filter((fieldType) => fieldType.location === 'enumTypes')
43-
.map((fieldType) => fieldType.type),
44-
),
45-
].sort()) {
46-
if (!enums.includes(item)) enums.push(item)
47-
}
48-
})
49-
if (args.length) sourceFile.addImportDeclaration({ moduleSpecifier: path.posix.join('.', `${modelName}.args`), namedImports: args })
50-
if (outputs.length) sourceFile.addImportDeclaration({ moduleSpecifier: path.posix.join('.', `${modelName}.output`), namedImports: outputs })
51-
if (enums.length) sourceFile.addImportDeclaration({ moduleSpecifier: path.posix.join('.', `${modelName}.enum`), namedImports: enums })
24+
outputTypesToGenerate.forEach((type) => {
25+
// import args
26+
for (const item of [...new Set(type.fields.filter((it) => it.argsTypeName).map((it) => it.argsTypeName!))].sort()) {
27+
if (!args.includes(item)) args.push(item)
28+
}
29+
// import outputs
30+
for (const item of [
31+
...new Set(type.fields.filter((field) => field.outputType.location === 'outputObjectTypes').map((field) => field.outputType.type)),
32+
].sort()) {
33+
if (!outputs.includes(item)) outputs.push(item)
34+
}
35+
// import enums
36+
for (const item of [
37+
...new Set(
38+
type.fields
39+
.map((field) => field.outputType)
40+
.filter((fieldType) => fieldType.location === 'enumTypes' && fieldType.namespace === 'model')
41+
.map((fieldType) => fieldType.type),
42+
),
43+
].sort()) {
44+
if (!enums.includes(item)) enums.push(item)
45+
}
46+
})
47+
if (args.length) sourceFile.addImportDeclaration({ moduleSpecifier: path.posix.join('..', `${modelName}.args`), namedImports: args })
48+
if (outputs.length) {
49+
for (const item of [...new Set(outputs)].sort()) {
50+
sourceFile.addImportDeclaration({ moduleSpecifier: `./${item}.output`, namedImports: [item] })
51+
}
52+
}
53+
if (enums.length) {
54+
for (const item of [...new Set(enums)].sort()) {
55+
sourceFile.addImportDeclaration({ moduleSpecifier: path.posix.join(`../../enums/${item}.enum`), namedImports: [item] })
56+
}
57+
}
5258

5359
sourceFile.addClass({
5460
name: type.typeName,

packages/generator/src/generator/generateService.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ export const generateService = (project: Project, outputDir: string, model: DMMF
88
const filePath = path.resolve(outputDir, `${modelName}/${modelName}.service.ts`)
99
const sourceFile = project.createSourceFile(filePath, undefined, { overwrite: true })
1010

11-
sourceFile.addStatements(`import { Injectable } from '@nestjs/common'
12-
import { PrismaService } from '../../prisma.service'
13-
import { Prisma } from '@prisma/client'
11+
sourceFile.addStatements(`import { Injectable } from '@nestjs/common';
12+
import { PrismaService } from '../../prisma.service';
13+
import { Prisma } from '@prisma/client';
1414
1515
@Injectable()
1616
export class ${model.name}Service {

usage/generated/common/enums.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ export enum UsersScalarFieldEnum {
77
email = "email",
88
gender = "gender",
99
created_at = "created_at",
10-
updated_at = "updated_at"
10+
updated_at = "updated_at",
11+
role = "role"
1112
}
1213
NestJsGraphQL.registerEnumType(UsersScalarFieldEnum, {
1314
name: "UsersScalarFieldEnum",
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import * as NestJsGraphQL from "@nestjs/graphql";
2+
import { UserRole } from "../../enums/UserRole.enum";
3+
4+
@NestJsGraphQL.InputType('EnumUserRoleFieldUpdateOperationsInput', { isAbstract: true })
5+
export class EnumUserRoleFieldUpdateOperationsInput {
6+
@NestJsGraphQL.Field(() => UserRole, { nullable: true })
7+
set?: "ADMIN" | "AUTHOR" | undefined;
8+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import * as NestJsGraphQL from "@nestjs/graphql";
2+
import { UserRole } from "../../enums/UserRole.enum";
3+
import { NestedEnumUserRoleFilter } from "./NestedEnumUserRoleFilter.input";
4+
5+
@NestJsGraphQL.InputType('EnumUserRoleFilter', { isAbstract: true })
6+
export class EnumUserRoleFilter {
7+
@NestJsGraphQL.Field(() => UserRole, { nullable: true })
8+
equals?: "ADMIN" | "AUTHOR" | undefined;
9+
10+
@NestJsGraphQL.Field(() => [UserRole], { nullable: true })
11+
in?: Array<"ADMIN" | "AUTHOR"> | undefined;
12+
13+
@NestJsGraphQL.Field(() => [UserRole], { nullable: true })
14+
notIn?: Array<"ADMIN" | "AUTHOR"> | undefined;
15+
16+
@NestJsGraphQL.Field(() => NestedEnumUserRoleFilter, { nullable: true })
17+
not?: NestedEnumUserRoleFilter | undefined;
18+
}

0 commit comments

Comments
 (0)