@k0lyan/typegraphql-prisma-nestjs 0.2800.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/Readme.md +137 -0
- package/lib/cli/dev.d.ts +1 -0
- package/lib/cli/dev.js +5 -0
- package/lib/cli/dev.js.map +1 -0
- package/lib/cli/generator.d.ts +1 -0
- package/lib/cli/generator.js +13 -0
- package/lib/cli/generator.js.map +1 -0
- package/lib/cli/helpers.d.ts +4 -0
- package/lib/cli/helpers.js +52 -0
- package/lib/cli/helpers.js.map +1 -0
- package/lib/cli/prisma-generator.d.ts +2 -0
- package/lib/cli/prisma-generator.js +79 -0
- package/lib/cli/prisma-generator.js.map +1 -0
- package/lib/generator/args-class.d.ts +4 -0
- package/lib/generator/args-class.js +56 -0
- package/lib/generator/args-class.js.map +1 -0
- package/lib/generator/config.d.ts +22 -0
- package/lib/generator/config.js +39 -0
- package/lib/generator/config.js.map +1 -0
- package/lib/generator/dmmf/dmmf-document.d.ts +19 -0
- package/lib/generator/dmmf/dmmf-document.js +60 -0
- package/lib/generator/dmmf/dmmf-document.js.map +1 -0
- package/lib/generator/dmmf/helpers.d.ts +5 -0
- package/lib/generator/dmmf/helpers.js +42 -0
- package/lib/generator/dmmf/helpers.js.map +1 -0
- package/lib/generator/dmmf/transform.d.ts +11 -0
- package/lib/generator/dmmf/transform.js +456 -0
- package/lib/generator/dmmf/transform.js.map +1 -0
- package/lib/generator/dmmf/types.d.ts +230 -0
- package/lib/generator/dmmf/types.js +28 -0
- package/lib/generator/dmmf/types.js.map +1 -0
- package/lib/generator/emit-block.d.ts +4 -0
- package/lib/generator/emit-block.js +35 -0
- package/lib/generator/emit-block.js.map +1 -0
- package/lib/generator/enum.d.ts +4 -0
- package/lib/generator/enum.js +39 -0
- package/lib/generator/enum.js.map +1 -0
- package/lib/generator/generate-code.d.ts +3 -0
- package/lib/generator/generate-code.js +229 -0
- package/lib/generator/generate-code.js.map +1 -0
- package/lib/generator/generate-enhance.d.ts +5 -0
- package/lib/generator/generate-enhance.js +492 -0
- package/lib/generator/generate-enhance.js.map +1 -0
- package/lib/generator/generate-helpers.d.ts +3 -0
- package/lib/generator/generate-helpers.js +113 -0
- package/lib/generator/generate-helpers.js.map +1 -0
- package/lib/generator/generate-scalars.d.ts +3 -0
- package/lib/generator/generate-scalars.js +27 -0
- package/lib/generator/generate-scalars.js.map +1 -0
- package/lib/generator/helpers.d.ts +14 -0
- package/lib/generator/helpers.js +226 -0
- package/lib/generator/helpers.js.map +1 -0
- package/lib/generator/imports.d.ts +28 -0
- package/lib/generator/imports.js +311 -0
- package/lib/generator/imports.js.map +1 -0
- package/lib/generator/model-type-class.d.ts +4 -0
- package/lib/generator/model-type-class.js +152 -0
- package/lib/generator/model-type-class.js.map +1 -0
- package/lib/generator/options.d.ts +40 -0
- package/lib/generator/options.js +3 -0
- package/lib/generator/options.js.map +1 -0
- package/lib/generator/resolvers/full-crud.d.ts +5 -0
- package/lib/generator/resolvers/full-crud.js +45 -0
- package/lib/generator/resolvers/full-crud.js.map +1 -0
- package/lib/generator/resolvers/helpers.d.ts +5 -0
- package/lib/generator/resolvers/helpers.js +81 -0
- package/lib/generator/resolvers/helpers.js.map +1 -0
- package/lib/generator/resolvers/relations.d.ts +5 -0
- package/lib/generator/resolvers/relations.js +254 -0
- package/lib/generator/resolvers/relations.js.map +1 -0
- package/lib/generator/resolvers/separate-action.d.ts +5 -0
- package/lib/generator/resolvers/separate-action.js +33 -0
- package/lib/generator/resolvers/separate-action.js.map +1 -0
- package/lib/generator/type-class.d.ts +12 -0
- package/lib/generator/type-class.js +340 -0
- package/lib/generator/type-class.js.map +1 -0
- package/lib/generator/types.d.ts +5 -0
- package/lib/generator/types.js +3 -0
- package/lib/generator/types.js.map +1 -0
- package/lib/generator.d.ts +2 -0
- package/lib/generator.js +5 -0
- package/lib/generator.js.map +1 -0
- package/lib/utils/prisma-version.d.ts +1 -0
- package/lib/utils/prisma-version.js +34 -0
- package/lib/utils/prisma-version.js.map +1 -0
- package/lib/utils/removeDir.d.ts +1 -0
- package/lib/utils/removeDir.js +19 -0
- package/lib/utils/removeDir.js.map +1 -0
- package/package.json +109 -0
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = generateObjectTypeClassFromModel;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const ts_morph_1 = require("ts-morph");
|
|
6
|
+
const path_1 = tslib_1.__importDefault(require("path"));
|
|
7
|
+
const imports_1 = require("./imports");
|
|
8
|
+
const config_1 = require("./config");
|
|
9
|
+
const helpers_1 = require("./helpers");
|
|
10
|
+
function generateObjectTypeClassFromModel(project, baseDirPath, model, modelOutputType, dmmfDocument) {
|
|
11
|
+
const dirPath = path_1.default.resolve(baseDirPath, config_1.modelsFolderName);
|
|
12
|
+
const filePath = path_1.default.resolve(dirPath, `${model.typeName}.ts`);
|
|
13
|
+
const sourceFile = project.createSourceFile(filePath, undefined, {
|
|
14
|
+
overwrite: true,
|
|
15
|
+
});
|
|
16
|
+
(0, imports_1.generateTypeGraphQLImport)(sourceFile);
|
|
17
|
+
(0, imports_1.generateGraphQLScalarsImport)(sourceFile);
|
|
18
|
+
(0, imports_1.generatePrismaNamespaceImport)(sourceFile, dmmfDocument.options, 1);
|
|
19
|
+
(0, imports_1.generateCustomScalarsImport)(sourceFile, 1);
|
|
20
|
+
(0, imports_1.generateModelsImports)(sourceFile, model.fields
|
|
21
|
+
.filter(field => field.location === "outputObjectTypes")
|
|
22
|
+
.filter(field => field.type !== model.name)
|
|
23
|
+
.map(field => dmmfDocument.isModelName(field.type)
|
|
24
|
+
? dmmfDocument.getModelTypeName(field.type)
|
|
25
|
+
: field.type));
|
|
26
|
+
(0, imports_1.generateEnumsImports)(sourceFile, model.fields
|
|
27
|
+
.filter(field => field.location === "enumTypes")
|
|
28
|
+
.map(field => field.type));
|
|
29
|
+
const countField = modelOutputType.fields.find(it => it.name === "_count");
|
|
30
|
+
const shouldEmitCountField = countField !== undefined &&
|
|
31
|
+
dmmfDocument.shouldGenerateBlock("crudResolvers");
|
|
32
|
+
if (shouldEmitCountField) {
|
|
33
|
+
(0, imports_1.generateResolversOutputsImports)(sourceFile, [countField.typeGraphQLType]);
|
|
34
|
+
}
|
|
35
|
+
sourceFile.addClass({
|
|
36
|
+
name: model.typeName,
|
|
37
|
+
isExported: true,
|
|
38
|
+
decorators: model.isOmitted.output
|
|
39
|
+
? []
|
|
40
|
+
: [
|
|
41
|
+
{
|
|
42
|
+
name: "ObjectType",
|
|
43
|
+
arguments: [
|
|
44
|
+
`"${[dmmfDocument.options.objectTypePrefix, model.typeName]
|
|
45
|
+
.filter(Boolean)
|
|
46
|
+
.join("")}"`,
|
|
47
|
+
ts_morph_1.Writers.object({
|
|
48
|
+
...(dmmfDocument.options.emitIsAbstract && {
|
|
49
|
+
isAbstract: "true",
|
|
50
|
+
}),
|
|
51
|
+
...(model.docs && { description: `"${model.docs}"` }),
|
|
52
|
+
...(dmmfDocument.options.simpleResolvers && {
|
|
53
|
+
simpleResolvers: "true",
|
|
54
|
+
}),
|
|
55
|
+
}),
|
|
56
|
+
],
|
|
57
|
+
},
|
|
58
|
+
],
|
|
59
|
+
properties: [
|
|
60
|
+
...model.fields.map(field => {
|
|
61
|
+
const isOptional = !!field.relationName ||
|
|
62
|
+
field.isOmitted.output ||
|
|
63
|
+
(!field.isRequired && field.typeFieldAlias === undefined);
|
|
64
|
+
return {
|
|
65
|
+
name: field.name,
|
|
66
|
+
type: field.fieldTSType,
|
|
67
|
+
hasExclamationToken: !isOptional,
|
|
68
|
+
hasQuestionToken: isOptional,
|
|
69
|
+
trailingTrivia: "\r\n",
|
|
70
|
+
decorators: [
|
|
71
|
+
...(field.relationName ||
|
|
72
|
+
field.typeFieldAlias ||
|
|
73
|
+
field.isOmitted.output
|
|
74
|
+
? []
|
|
75
|
+
: [
|
|
76
|
+
{
|
|
77
|
+
name: "Field",
|
|
78
|
+
arguments: [
|
|
79
|
+
`_type => ${field.typeGraphQLType}`,
|
|
80
|
+
ts_morph_1.Writers.object({
|
|
81
|
+
nullable: `${!!field.isOptional.output || isOptional}`,
|
|
82
|
+
...(field.docs && { description: `"${field.docs}"` }),
|
|
83
|
+
}),
|
|
84
|
+
],
|
|
85
|
+
},
|
|
86
|
+
]),
|
|
87
|
+
],
|
|
88
|
+
...(field.docs && {
|
|
89
|
+
docs: [{ description: `\n${(0, helpers_1.convertNewLines)(field.docs)}` }],
|
|
90
|
+
}),
|
|
91
|
+
};
|
|
92
|
+
}),
|
|
93
|
+
...(shouldEmitCountField
|
|
94
|
+
? [
|
|
95
|
+
{
|
|
96
|
+
name: countField.name,
|
|
97
|
+
type: countField.fieldTSType,
|
|
98
|
+
hasExclamationToken: countField.isRequired,
|
|
99
|
+
hasQuestionToken: !countField.isRequired,
|
|
100
|
+
trailingTrivia: "\r\n",
|
|
101
|
+
decorators: [
|
|
102
|
+
{
|
|
103
|
+
name: "Field",
|
|
104
|
+
arguments: [
|
|
105
|
+
`_type => ${countField.typeGraphQLType}`,
|
|
106
|
+
ts_morph_1.Writers.object({
|
|
107
|
+
nullable: `${!countField.isRequired}`,
|
|
108
|
+
}),
|
|
109
|
+
],
|
|
110
|
+
},
|
|
111
|
+
],
|
|
112
|
+
},
|
|
113
|
+
]
|
|
114
|
+
: []),
|
|
115
|
+
],
|
|
116
|
+
getAccessors: model.fields
|
|
117
|
+
.filter(field => field.typeFieldAlias &&
|
|
118
|
+
!field.relationName &&
|
|
119
|
+
!field.isOmitted.output)
|
|
120
|
+
.map(field => {
|
|
121
|
+
return {
|
|
122
|
+
name: field.typeFieldAlias,
|
|
123
|
+
returnType: field.fieldTSType,
|
|
124
|
+
trailingTrivia: "\r\n",
|
|
125
|
+
decorators: [
|
|
126
|
+
{
|
|
127
|
+
name: "Field",
|
|
128
|
+
arguments: [
|
|
129
|
+
`_type => ${field.typeGraphQLType}`,
|
|
130
|
+
ts_morph_1.Writers.object({
|
|
131
|
+
nullable: `${!field.isRequired}`,
|
|
132
|
+
...(field.docs && { description: `"${field.docs}"` }),
|
|
133
|
+
}),
|
|
134
|
+
],
|
|
135
|
+
},
|
|
136
|
+
],
|
|
137
|
+
statements: [
|
|
138
|
+
field.isRequired
|
|
139
|
+
? `return this.${field.name};`
|
|
140
|
+
: `return this.${field.name} ?? null;`,
|
|
141
|
+
],
|
|
142
|
+
...(field.docs && {
|
|
143
|
+
docs: [{ description: `\n${(0, helpers_1.convertNewLines)(field.docs)}` }],
|
|
144
|
+
}),
|
|
145
|
+
};
|
|
146
|
+
}),
|
|
147
|
+
...(model.docs && {
|
|
148
|
+
docs: [{ description: `\n${(0, helpers_1.convertNewLines)(model.docs)}` }],
|
|
149
|
+
}),
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=model-type-class.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-type-class.js","sourceRoot":"","sources":["../../src/generator/model-type-class.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { EmitBlockKind } from "./emit-block";
|
|
2
|
+
export interface ExternalGeneratorOptions {
|
|
3
|
+
emitDMMF?: boolean;
|
|
4
|
+
emitTranspiledCode?: boolean;
|
|
5
|
+
simpleResolvers?: boolean;
|
|
6
|
+
useOriginalMapping?: boolean;
|
|
7
|
+
useUncheckedScalarInputs?: boolean;
|
|
8
|
+
emitIdAsIDType?: boolean;
|
|
9
|
+
emitOnly?: EmitBlockKind[];
|
|
10
|
+
emitRedundantTypesInfo?: boolean;
|
|
11
|
+
customPrismaImportPath?: string;
|
|
12
|
+
customPrismaImportPathIgnoreLevels?: boolean;
|
|
13
|
+
useDataloaderForResolveFields?: boolean;
|
|
14
|
+
useDataloaderForAllResolveFields?: boolean;
|
|
15
|
+
useDataloaderMaxBatchSize?: number;
|
|
16
|
+
useDataloaderBatchScheduleFnDelay?: number;
|
|
17
|
+
useDataloaderCache?: boolean;
|
|
18
|
+
contextPrismaKey?: string;
|
|
19
|
+
useSimpleInputs?: boolean;
|
|
20
|
+
optionalInputFieldsByDefault?: string[];
|
|
21
|
+
omitInputFieldsByDefault?: string[];
|
|
22
|
+
omitOutputFieldsByDefault?: string[];
|
|
23
|
+
formatGeneratedCode?: boolean | "prettier" | "tsc";
|
|
24
|
+
emitIsAbstract?: boolean;
|
|
25
|
+
objectTypePrefix?: string;
|
|
26
|
+
inputTypePrefix?: string;
|
|
27
|
+
enumTypePrefix?: string;
|
|
28
|
+
emitActions?: string[];
|
|
29
|
+
emitPropertyMethods?: string[];
|
|
30
|
+
}
|
|
31
|
+
export interface InternalGeneratorOptions {
|
|
32
|
+
outputDirPath: string;
|
|
33
|
+
prismaClientPath: string;
|
|
34
|
+
}
|
|
35
|
+
export interface GeneratorOptions extends Omit<ExternalGeneratorOptions, "emitOnly" | "contextPrismaKey">, InternalGeneratorOptions {
|
|
36
|
+
blocksToEmit: EmitBlockKind[];
|
|
37
|
+
contextPrismaKey: string;
|
|
38
|
+
relativePrismaOutputPath: string;
|
|
39
|
+
absolutePrismaOutputPath: string | undefined;
|
|
40
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/generator/options.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Project } from "ts-morph";
|
|
2
|
+
import { DmmfDocument } from "../dmmf/dmmf-document";
|
|
3
|
+
import { DMMF } from "../dmmf/types";
|
|
4
|
+
import { GeneratorOptions } from "../options";
|
|
5
|
+
export default function generateCrudResolverClassFromMapping(project: Project, baseDirPath: string, mapping: DMMF.ModelMapping, model: DMMF.Model, dmmfDocument: DmmfDocument, generatorOptions: GeneratorOptions): void;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = generateCrudResolverClassFromMapping;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const path_1 = tslib_1.__importDefault(require("path"));
|
|
6
|
+
const config_1 = require("../config");
|
|
7
|
+
const imports_1 = require("../imports");
|
|
8
|
+
const helpers_1 = require("./helpers");
|
|
9
|
+
function generateCrudResolverClassFromMapping(project, baseDirPath, mapping, model, dmmfDocument, generatorOptions) {
|
|
10
|
+
const resolverDirPath = path_1.default.resolve(baseDirPath, config_1.resolversFolderName, config_1.crudResolversFolderName, model.typeName);
|
|
11
|
+
const filePath = path_1.default.resolve(resolverDirPath, `${mapping.resolverName}.ts`);
|
|
12
|
+
const sourceFile = project.createSourceFile(filePath, undefined, {
|
|
13
|
+
overwrite: true,
|
|
14
|
+
});
|
|
15
|
+
(0, imports_1.generateTypeGraphQLImport)(sourceFile);
|
|
16
|
+
(0, imports_1.generateGraphQLInfoImport)(sourceFile);
|
|
17
|
+
(0, imports_1.generateArgsImports)(sourceFile, mapping.actions
|
|
18
|
+
.filter(a => !generatorOptions.emitActions?.includes(a.prismaMethod))
|
|
19
|
+
.filter(it => it.argsTypeName !== undefined)
|
|
20
|
+
.map(it => it.argsTypeName), 0);
|
|
21
|
+
(0, imports_1.generateHelpersFileImport)(sourceFile, 3);
|
|
22
|
+
const distinctOutputTypesNames = [
|
|
23
|
+
...new Set(mapping.actions
|
|
24
|
+
.filter(a => !generatorOptions.emitActions?.includes(a.prismaMethod))
|
|
25
|
+
.map(it => it.outputTypeName)),
|
|
26
|
+
];
|
|
27
|
+
const modelOutputTypeNames = distinctOutputTypesNames.filter(typeName => dmmfDocument.isModelTypeName(typeName));
|
|
28
|
+
const otherOutputTypeNames = distinctOutputTypesNames.filter(typeName => !dmmfDocument.isModelTypeName(typeName));
|
|
29
|
+
(0, imports_1.generateModelsImports)(sourceFile, modelOutputTypeNames, 3);
|
|
30
|
+
(0, imports_1.generateOutputsImports)(sourceFile, otherOutputTypeNames, 2);
|
|
31
|
+
sourceFile.addClass({
|
|
32
|
+
name: mapping.resolverName,
|
|
33
|
+
isExported: true,
|
|
34
|
+
decorators: [
|
|
35
|
+
{
|
|
36
|
+
name: "Resolver",
|
|
37
|
+
arguments: [`_of => ${model.typeName}`],
|
|
38
|
+
},
|
|
39
|
+
],
|
|
40
|
+
methods: mapping.actions
|
|
41
|
+
.filter(a => !generatorOptions.emitActions?.includes(a.prismaMethod))
|
|
42
|
+
.map(action => (0, helpers_1.generateCrudResolverClassMethodDeclaration)(action, mapping, dmmfDocument, generatorOptions)),
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=full-crud.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"full-crud.js","sourceRoot":"","sources":["../../../src/generator/resolvers/full-crud.ts"],"names":[],"mappings":";;AAiBA,uDA8DC;;AA/ED,wDAAwB;AAGxB,sCAAyE;AAGzE,wCAOoB;AAEpB,uCAAuE;AAEvE,SAAwB,oCAAoC,CAC1D,OAAgB,EAChB,WAAmB,EACnB,OAA0B,EAC1B,KAAiB,EACjB,YAA0B,EAC1B,gBAAkC;IAElC,MAAM,eAAe,GAAG,cAAI,CAAC,OAAO,CAClC,WAAW,EACX,4BAAmB,EACnB,gCAAuB,EACvB,KAAK,CAAC,QAAQ,CACf,CAAC;IACF,MAAM,QAAQ,GAAG,cAAI,CAAC,OAAO,CAAC,eAAe,EAAE,GAAG,OAAO,CAAC,YAAY,KAAK,CAAC,CAAC;IAC7E,MAAM,UAAU,GAAG,OAAO,CAAC,gBAAgB,CAAC,QAAQ,EAAE,SAAS,EAAE;QAC/D,SAAS,EAAE,IAAI;KAChB,CAAC,CAAC;IAEH,IAAA,mCAAyB,EAAC,UAAU,CAAC,CAAC;IACtC,IAAA,mCAAyB,EAAC,UAAU,CAAC,CAAC;IACtC,IAAA,6BAAmB,EACjB,UAAU,EACV,OAAO,CAAC,OAAO;SACZ,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,gBAAgB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;SACpE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,YAAY,KAAK,SAAS,CAAC;SAC3C,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,YAAa,CAAC,EAC9B,CAAC,CACF,CAAC;IACF,IAAA,mCAAyB,EAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IAEzC,MAAM,wBAAwB,GAAG;QAC/B,GAAG,IAAI,GAAG,CACR,OAAO,CAAC,OAAO;aACZ,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,gBAAgB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;aACpE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,cAAc,CAAC,CAChC;KACF,CAAC;IACF,MAAM,oBAAoB,GAAG,wBAAwB,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CACtE,YAAY,CAAC,eAAe,CAAC,QAAQ,CAAC,CACvC,CAAC;IACF,MAAM,oBAAoB,GAAG,wBAAwB,CAAC,MAAM,CAC1D,QAAQ,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,eAAe,CAAC,QAAQ,CAAC,CACpD,CAAC;IACF,IAAA,+BAAqB,EAAC,UAAU,EAAE,oBAAoB,EAAE,CAAC,CAAC,CAAC;IAC3D,IAAA,gCAAsB,EAAC,UAAU,EAAE,oBAAoB,EAAE,CAAC,CAAC,CAAC;IAE5D,UAAU,CAAC,QAAQ,CAAC;QAClB,IAAI,EAAE,OAAO,CAAC,YAAY;QAC1B,UAAU,EAAE,IAAI;QAChB,UAAU,EAAE;YACV;gBACE,IAAI,EAAE,UAAU;gBAChB,SAAS,EAAE,CAAC,UAAU,KAAK,CAAC,QAAQ,EAAE,CAAC;aACxC;SACF;QACD,OAAO,EAAE,OAAO,CAAC,OAAO;aACrB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,gBAAgB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;aACpE,GAAG,CAEF,MAAM,CAAC,EAAE,CAAC,IAAA,oDAA0C,EAAC,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,gBAAgB,CAAC,CAAC;KAC3G,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { OptionalKind, MethodDeclarationStructure } from "ts-morph";
|
|
2
|
+
import { DmmfDocument } from "../dmmf/dmmf-document";
|
|
3
|
+
import { DMMF } from "../dmmf/types";
|
|
4
|
+
import { GeneratorOptions } from "../options";
|
|
5
|
+
export declare function generateCrudResolverClassMethodDeclaration(action: DMMF.Action, mapping: DMMF.ModelMapping, dmmfDocument: DmmfDocument, generatorOptions: GeneratorOptions): OptionalKind<MethodDeclarationStructure>;
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateCrudResolverClassMethodDeclaration = generateCrudResolverClassMethodDeclaration;
|
|
4
|
+
const ts_morph_1 = require("ts-morph");
|
|
5
|
+
const types_1 = require("../dmmf/types");
|
|
6
|
+
function generateCrudResolverClassMethodDeclaration(action, mapping, dmmfDocument, generatorOptions) {
|
|
7
|
+
return {
|
|
8
|
+
name: action.name,
|
|
9
|
+
isAsync: true,
|
|
10
|
+
returnType: `Promise<${action.returnTSType}>`,
|
|
11
|
+
decorators: [
|
|
12
|
+
{
|
|
13
|
+
name: `${action.operation}`,
|
|
14
|
+
arguments: [
|
|
15
|
+
`_returns => ${action.typeGraphQLType}`,
|
|
16
|
+
ts_morph_1.Writers.object({
|
|
17
|
+
nullable: `${!action.method.isRequired}`,
|
|
18
|
+
}),
|
|
19
|
+
],
|
|
20
|
+
},
|
|
21
|
+
],
|
|
22
|
+
parameters: [
|
|
23
|
+
{
|
|
24
|
+
name: "ctx",
|
|
25
|
+
// TODO: import custom `ContextType`
|
|
26
|
+
type: "any",
|
|
27
|
+
decorators: [{ name: "Context", arguments: [] }],
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
name: "info",
|
|
31
|
+
type: "GraphQLResolveInfo",
|
|
32
|
+
decorators: [{ name: "Info", arguments: [] }],
|
|
33
|
+
},
|
|
34
|
+
...(!action.argsTypeName
|
|
35
|
+
? []
|
|
36
|
+
: [
|
|
37
|
+
{
|
|
38
|
+
name: "args",
|
|
39
|
+
type: action.argsTypeName,
|
|
40
|
+
decorators: [
|
|
41
|
+
{
|
|
42
|
+
name: "Args",
|
|
43
|
+
arguments: generatorOptions.emitRedundantTypesInfo
|
|
44
|
+
? [`_type => ${action.argsTypeName}`]
|
|
45
|
+
: [],
|
|
46
|
+
},
|
|
47
|
+
],
|
|
48
|
+
},
|
|
49
|
+
]),
|
|
50
|
+
],
|
|
51
|
+
statements: action.kind === types_1.DMMF.ModelAction.aggregate
|
|
52
|
+
? [
|
|
53
|
+
/* ts */ `const afterProcessEvents: ((result:any) => Promise<any>)[] = [];`,
|
|
54
|
+
/* ts */ `const transformedArgsIntoPrismaArgs = await transformArgsIntoPrismaArgs(info, args, ctx, '${mapping.modelName}', '${mapping.collectionName}', '${action.prismaMethod}', afterProcessEvents);`,
|
|
55
|
+
/* ts */ `const transformedInfoIntoPrismaArgs = transformInfoIntoPrismaArgs(info, '${mapping.modelName}', '${mapping.collectionName}', '${action.prismaMethod}');`,
|
|
56
|
+
/* ts */ `const result = await getPrismaFromContext(ctx).${mapping.collectionName}.${action.prismaMethod}({ ...transformedArgsIntoPrismaArgs, ...transformedInfoIntoPrismaArgs, });`,
|
|
57
|
+
/* ts */ `for (const afterProcessEvent of afterProcessEvents){ await afterProcessEvent(result); }`,
|
|
58
|
+
/* ts */ `return result;`,
|
|
59
|
+
]
|
|
60
|
+
: action.kind === types_1.DMMF.ModelAction.groupBy
|
|
61
|
+
? [
|
|
62
|
+
/* ts */ `const afterProcessEvents: ((result:any) => Promise<any>)[] = [];`,
|
|
63
|
+
/* ts */ `const { _count, _avg, _sum, _min, _max } = transformInfoIntoPrismaArgs(info, '${mapping.modelName}', '${mapping.collectionName}', '${action.prismaMethod}');`,
|
|
64
|
+
/* ts */ `const transformedArgsIntoPrismaArgs = await transformArgsIntoPrismaArgs(info, args, ctx, '${mapping.modelName}', '${mapping.collectionName}', '${action.prismaMethod}', afterProcessEvents);`,
|
|
65
|
+
/* ts */ `const groupByArgs = Object.fromEntries( Object.entries({ _count, _avg, _sum, _min, _max }).filter(([_, v]) => v != null));`,
|
|
66
|
+
/* ts */ `const result = await getPrismaFromContext(ctx).${mapping.collectionName}.${action.prismaMethod}({ ...transformedArgsIntoPrismaArgs, ...groupByArgs,});`,
|
|
67
|
+
/* ts */ `for (const afterProcessEvent of afterProcessEvents){ await afterProcessEvent(result); }`,
|
|
68
|
+
/* ts */ `return result;`,
|
|
69
|
+
]
|
|
70
|
+
: [
|
|
71
|
+
/* ts */ ` const afterProcessEvents: ((result:any) => Promise<any>)[] = [];`,
|
|
72
|
+
/* ts */ ` const { _count } = transformInfoIntoPrismaArgs(info, '${mapping.modelName}', '${mapping.collectionName}', '${action.prismaMethod}');`,
|
|
73
|
+
/* ts */ ` const transformedArgsIntoPrismaArgs = await transformArgsIntoPrismaArgs(info, args, ctx, '${mapping.modelName}', '${mapping.collectionName}', '${action.prismaMethod}', afterProcessEvents);`,
|
|
74
|
+
/* ts */ ` const otherArgs = _count && transformCountFieldIntoSelectRelationsCount(_count, '${mapping.modelName}', '${mapping.collectionName}', '${action.prismaMethod}');`,
|
|
75
|
+
/* ts */ ` const result = await getPrismaFromContext(ctx).${mapping.collectionName}.${action.prismaMethod}({ ...transformedArgsIntoPrismaArgs, ...otherArgs, });`,
|
|
76
|
+
/* ts */ ` for (const afterProcessEvent of afterProcessEvents){ await afterProcessEvent(result); }`,
|
|
77
|
+
/* ts */ `return result;`,
|
|
78
|
+
],
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/generator/resolvers/helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Project } from "ts-morph";
|
|
2
|
+
import { DmmfDocument } from "../dmmf/dmmf-document";
|
|
3
|
+
import { DMMF } from "../dmmf/types";
|
|
4
|
+
import { GeneratorOptions } from "../options";
|
|
5
|
+
export default function generateRelationsResolverClassesFromModel(project: Project, baseDirPath: string, dmmfDocument: DmmfDocument, { model, relationFields, resolverName }: DMMF.RelationModel, generatorOptions: GeneratorOptions): void;
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = generateRelationsResolverClassesFromModel;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const ts_morph_1 = require("ts-morph");
|
|
6
|
+
const path_1 = tslib_1.__importDefault(require("path"));
|
|
7
|
+
const helpers_1 = require("../helpers");
|
|
8
|
+
const config_1 = require("../config");
|
|
9
|
+
const imports_1 = require("../imports");
|
|
10
|
+
function generateRelationsResolverClassesFromModel(project, baseDirPath, dmmfDocument, { model, relationFields, resolverName }, generatorOptions) {
|
|
11
|
+
const rootArgName = (0, helpers_1.camelCase)(model.typeName);
|
|
12
|
+
const singleIdField = model.fields.find(field => field.isId);
|
|
13
|
+
const singleUniqueField = model.fields.find(field => field.isUnique);
|
|
14
|
+
const singleFilterField = singleIdField ?? singleUniqueField;
|
|
15
|
+
const compositeIdFields = model.primaryKey?.fields.map(idField => model.fields.find(field => idField === field.name)) ?? [];
|
|
16
|
+
const compositeUniqueFields = model.uniqueIndexes[0]
|
|
17
|
+
? model.uniqueIndexes[0].fields.map(uniqueField => model.fields.find(field => uniqueField === field.name))
|
|
18
|
+
: [];
|
|
19
|
+
const compositeFilterFields = compositeIdFields.length > 0 ? compositeIdFields : compositeUniqueFields;
|
|
20
|
+
const resolverDirPath = path_1.default.resolve(baseDirPath, config_1.resolversFolderName, config_1.relationsResolversFolderName, model.typeName);
|
|
21
|
+
const filePath = path_1.default.resolve(resolverDirPath, `${resolverName}.ts`);
|
|
22
|
+
const sourceFile = project.createSourceFile(filePath, undefined, {
|
|
23
|
+
overwrite: true,
|
|
24
|
+
});
|
|
25
|
+
(0, imports_1.generateTypeGraphQLImport)(sourceFile);
|
|
26
|
+
(0, imports_1.generateGraphQLInfoImport)(sourceFile);
|
|
27
|
+
(0, imports_1.generateModelsImports)(sourceFile, [...relationFields.map(field => field.type), model.typeName], 3);
|
|
28
|
+
const argTypeNames = relationFields
|
|
29
|
+
.filter(it => it.argsTypeName !== undefined)
|
|
30
|
+
.map(it => it.argsTypeName);
|
|
31
|
+
(0, imports_1.generateArgsImports)(sourceFile, argTypeNames, 0);
|
|
32
|
+
(0, imports_1.generateHelpersFileImport)(sourceFile, 3);
|
|
33
|
+
sourceFile.addImportDeclaration({
|
|
34
|
+
moduleSpecifier: "dataloader",
|
|
35
|
+
namespaceImport: "DataLoader",
|
|
36
|
+
});
|
|
37
|
+
sourceFile.addClass({
|
|
38
|
+
name: resolverName,
|
|
39
|
+
isExported: true,
|
|
40
|
+
decorators: [
|
|
41
|
+
{
|
|
42
|
+
name: "Resolver",
|
|
43
|
+
arguments: [`_of => ${model.typeName}`],
|
|
44
|
+
},
|
|
45
|
+
],
|
|
46
|
+
methods: relationFields.map(field => {
|
|
47
|
+
let whereConditionString = "";
|
|
48
|
+
// TODO: refactor to AST
|
|
49
|
+
if (singleFilterField) {
|
|
50
|
+
whereConditionString = `
|
|
51
|
+
${singleFilterField.name}: ${rootArgName}.${singleFilterField.name},
|
|
52
|
+
`;
|
|
53
|
+
}
|
|
54
|
+
else if (compositeFilterFields.length > 0) {
|
|
55
|
+
const filterKeyName = model.primaryKey?.name ??
|
|
56
|
+
model.uniqueIndexes[0]?.name ??
|
|
57
|
+
compositeFilterFields.map(it => it.name).join("_");
|
|
58
|
+
whereConditionString = `
|
|
59
|
+
${filterKeyName}: {
|
|
60
|
+
${compositeFilterFields
|
|
61
|
+
.map(idField => `${idField.name}: ${rootArgName}.${idField.name},`)
|
|
62
|
+
.join("\n")}
|
|
63
|
+
},
|
|
64
|
+
`;
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
throw new Error(`Unexpected error happened on generating 'whereConditionString' for ${model.typeName} relation resolver`);
|
|
68
|
+
}
|
|
69
|
+
const relationFromField = dmmfDocument.relationModels
|
|
70
|
+
.find(m => m.model.name === field.name)
|
|
71
|
+
?.model?.fields?.find(f => f?.name === model?.name)
|
|
72
|
+
?.relationFromFields?.[0];
|
|
73
|
+
const relationFromFieldType = dmmfDocument.relationModels
|
|
74
|
+
.find(m => m.model.name === field.name)
|
|
75
|
+
?.model?.fields?.find(f => f?.isId)?.fieldTSType;
|
|
76
|
+
if (generatorOptions.useDataloaderForAllResolveFields ||
|
|
77
|
+
(generatorOptions.useDataloaderForResolveFields &&
|
|
78
|
+
!field.argsTypeName)) {
|
|
79
|
+
const datamapperOptions = [
|
|
80
|
+
generatorOptions.useDataloaderMaxBatchSize !== undefined
|
|
81
|
+
? `maxBatchSize: ${generatorOptions.useDataloaderMaxBatchSize}`
|
|
82
|
+
: undefined,
|
|
83
|
+
generatorOptions.useDataloaderCache !== undefined
|
|
84
|
+
? `cache: ${generatorOptions.useDataloaderCache}`
|
|
85
|
+
: undefined,
|
|
86
|
+
generatorOptions.useDataloaderBatchScheduleFnDelay !== undefined
|
|
87
|
+
? `batchScheduleFn: (cb) => setTimeout(() => process.nextTick(cb), ${generatorOptions.useDataloaderBatchScheduleFnDelay})`
|
|
88
|
+
: undefined,
|
|
89
|
+
].filter(Boolean);
|
|
90
|
+
const datamapperOptionsText = datamapperOptions.length
|
|
91
|
+
? `, {${datamapperOptions.join(",")}}`
|
|
92
|
+
: "";
|
|
93
|
+
return {
|
|
94
|
+
name: field.typeFieldAlias ?? field.name,
|
|
95
|
+
isAsync: true,
|
|
96
|
+
returnType: `Promise<${field.fieldTSType}>`,
|
|
97
|
+
decorators: [
|
|
98
|
+
{
|
|
99
|
+
name: "ResolveField",
|
|
100
|
+
arguments: [
|
|
101
|
+
`_type => ${field.typeGraphQLType}`,
|
|
102
|
+
ts_morph_1.Writers.object({
|
|
103
|
+
nullable: `true`,
|
|
104
|
+
...(field.docs && { description: `"${field.docs}"` }),
|
|
105
|
+
}),
|
|
106
|
+
],
|
|
107
|
+
},
|
|
108
|
+
],
|
|
109
|
+
parameters: [
|
|
110
|
+
{
|
|
111
|
+
name: rootArgName,
|
|
112
|
+
type: model.typeName,
|
|
113
|
+
decorators: [{ name: "Parent", arguments: [] }],
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
name: "ctx",
|
|
117
|
+
// TODO: import custom `ContextType`
|
|
118
|
+
type: "any",
|
|
119
|
+
decorators: [{ name: "Context", arguments: [] }],
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
name: "info",
|
|
123
|
+
type: "GraphQLResolveInfo",
|
|
124
|
+
decorators: [{ name: "Info", arguments: [] }],
|
|
125
|
+
},
|
|
126
|
+
...(!field.argsTypeName
|
|
127
|
+
? []
|
|
128
|
+
: [
|
|
129
|
+
{
|
|
130
|
+
name: "args",
|
|
131
|
+
type: field.argsTypeName,
|
|
132
|
+
decorators: [
|
|
133
|
+
{
|
|
134
|
+
name: "Args",
|
|
135
|
+
arguments: generatorOptions.emitRedundantTypesInfo
|
|
136
|
+
? [`_type => ${field.argsTypeName}`]
|
|
137
|
+
: [],
|
|
138
|
+
},
|
|
139
|
+
],
|
|
140
|
+
},
|
|
141
|
+
]),
|
|
142
|
+
{
|
|
143
|
+
name: "dataloader",
|
|
144
|
+
type: `DataLoader<${relationFromFieldType || "string"}, ${field.typeFieldAlias ?? field.type}${field.isList ? "[]" : ""}>`,
|
|
145
|
+
decorators: [
|
|
146
|
+
{
|
|
147
|
+
name: "InlineLoader",
|
|
148
|
+
arguments: [
|
|
149
|
+
`<ID,Type>(context)=>{
|
|
150
|
+
const graphqlExecutionContext = GqlExecutionContext.create(context);
|
|
151
|
+
const ctx = graphqlExecutionContext.getContext();
|
|
152
|
+
const loader = new DataLoader<ID,Type>(
|
|
153
|
+
async (ids) => {
|
|
154
|
+
const context = (loader as any).context;
|
|
155
|
+
const info = (loader as any).info;
|
|
156
|
+
const args = (loader as any).args;
|
|
157
|
+
const { _count } = transformInfoIntoPrismaArgs(info, '${model.name}', '${(0, helpers_1.camelCase)(model.name)}', 'findMany', true);
|
|
158
|
+
const transformedArgsIntoPrismaArgs = await transformArgsIntoPrismaArgs(info, args, context, '${model.name}', '${(0, helpers_1.camelCase)(model.name)}', 'findMany', [], true);
|
|
159
|
+
const otherArgs = _count && transformCountFieldIntoSelectRelationsCount(_count, '${model.name}', '${(0, helpers_1.camelCase)(model.name)}', 'findMany', true);
|
|
160
|
+
const allArgs = { ...transformedArgsIntoPrismaArgs, ...otherArgs, };
|
|
161
|
+
const result:${field.type}[] = await getPrismaFromContext(ctx).${(0, helpers_1.camelCase)(field.type)}.findMany({
|
|
162
|
+
...allArgs,
|
|
163
|
+
where: {
|
|
164
|
+
...(allArgs.where || {}),
|
|
165
|
+
${relationFromField || field.relationToFields?.[0] || "id"}: { in: ids },
|
|
166
|
+
},
|
|
167
|
+
});
|
|
168
|
+
return ids.map(id=>result.${field.isList ? "filter" : "find"}(r=>r.${relationFromField || field.relationToFields?.[0] || "id"}===id)||${field.isList ? "[]" : "null"}) as Type[]
|
|
169
|
+
}${datamapperOptionsText}
|
|
170
|
+
);
|
|
171
|
+
return loader;
|
|
172
|
+
}`,
|
|
173
|
+
],
|
|
174
|
+
},
|
|
175
|
+
],
|
|
176
|
+
},
|
|
177
|
+
],
|
|
178
|
+
// TODO: refactor to AST
|
|
179
|
+
statements: [
|
|
180
|
+
"(dataloader as any).info = info;",
|
|
181
|
+
"(dataloader as any).context = ctx;",
|
|
182
|
+
!field.argsTypeName
|
|
183
|
+
? "(dataloader as any).args = {};"
|
|
184
|
+
: "(dataloader as any).args = args;",
|
|
185
|
+
field.isRequired
|
|
186
|
+
? ` return await dataloader.load(${rootArgName}.${field.relationFromFields?.[0] || "id"});`
|
|
187
|
+
: /* ts */ ` return !${rootArgName}.${field.relationFromFields?.[0] || "id"}?${field.isList ? "[]" : "null"}:await dataloader.load(${rootArgName}.${field.relationFromFields?.[0] || "id"});`,
|
|
188
|
+
],
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
return {
|
|
192
|
+
name: field.typeFieldAlias ?? field.name,
|
|
193
|
+
isAsync: true,
|
|
194
|
+
returnType: `Promise<${field.fieldTSType}>`,
|
|
195
|
+
decorators: [
|
|
196
|
+
{
|
|
197
|
+
name: "ResolveField",
|
|
198
|
+
arguments: [
|
|
199
|
+
`_type => ${field.typeGraphQLType}`,
|
|
200
|
+
ts_morph_1.Writers.object({
|
|
201
|
+
nullable: `${!field.isRequired}`,
|
|
202
|
+
...(field.docs && { description: `"${field.docs}"` }),
|
|
203
|
+
}),
|
|
204
|
+
],
|
|
205
|
+
},
|
|
206
|
+
],
|
|
207
|
+
parameters: [
|
|
208
|
+
{
|
|
209
|
+
name: rootArgName,
|
|
210
|
+
type: model.typeName,
|
|
211
|
+
decorators: [{ name: "Parent", arguments: [] }],
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
name: "ctx",
|
|
215
|
+
// TODO: import custom `ContextType`
|
|
216
|
+
type: "any",
|
|
217
|
+
decorators: [{ name: "Context", arguments: [] }],
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
name: "info",
|
|
221
|
+
type: "GraphQLResolveInfo",
|
|
222
|
+
decorators: [{ name: "Info", arguments: [] }],
|
|
223
|
+
},
|
|
224
|
+
...(!field.argsTypeName
|
|
225
|
+
? []
|
|
226
|
+
: [
|
|
227
|
+
{
|
|
228
|
+
name: "args",
|
|
229
|
+
type: field.argsTypeName,
|
|
230
|
+
decorators: [
|
|
231
|
+
{
|
|
232
|
+
name: "Args",
|
|
233
|
+
arguments: generatorOptions.emitRedundantTypesInfo
|
|
234
|
+
? [`_type => ${field.argsTypeName}`]
|
|
235
|
+
: [],
|
|
236
|
+
},
|
|
237
|
+
],
|
|
238
|
+
},
|
|
239
|
+
]),
|
|
240
|
+
],
|
|
241
|
+
// TODO: refactor to AST
|
|
242
|
+
statements: [
|
|
243
|
+
/* ts */ ` const { _count } = transformInfoIntoPrismaArgs(info, '${model.name}', '', '');
|
|
244
|
+
return getPrismaFromContext(ctx).${(0, helpers_1.camelCase)(model.name)}.findUniqueOrThrow({
|
|
245
|
+
where: {${whereConditionString}},
|
|
246
|
+
}).${field.name}({ ${field.argsTypeName ? "\n...args," : ""}
|
|
247
|
+
...(_count && transformCountFieldIntoSelectRelationsCount(_count, '${model.name}', '', '')),
|
|
248
|
+
});`,
|
|
249
|
+
],
|
|
250
|
+
};
|
|
251
|
+
}),
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
//# sourceMappingURL=relations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relations.js","sourceRoot":"","sources":["../../../src/generator/resolvers/relations.ts"],"names":[],"mappings":"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"}
|