@k0lyan/typegraphql-prisma-nestjs 0.28.20 → 0.28.22

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.
Files changed (88) hide show
  1. package/lib/cli/dev.d.ts +1 -0
  2. package/lib/cli/dev.js +5 -0
  3. package/lib/cli/dev.js.map +1 -0
  4. package/lib/cli/generator.d.ts +1 -0
  5. package/lib/cli/generator.js +13 -0
  6. package/lib/cli/generator.js.map +1 -0
  7. package/lib/cli/helpers.d.ts +4 -0
  8. package/lib/cli/helpers.js +52 -0
  9. package/lib/cli/helpers.js.map +1 -0
  10. package/lib/cli/prisma-generator.d.ts +2 -0
  11. package/lib/cli/prisma-generator.js +79 -0
  12. package/lib/cli/prisma-generator.js.map +1 -0
  13. package/lib/generator/args-class.d.ts +4 -0
  14. package/lib/generator/args-class.js +56 -0
  15. package/lib/generator/args-class.js.map +1 -0
  16. package/lib/generator/config.d.ts +22 -0
  17. package/lib/generator/config.js +39 -0
  18. package/lib/generator/config.js.map +1 -0
  19. package/lib/generator/dmmf/dmmf-document.d.ts +19 -0
  20. package/lib/generator/dmmf/dmmf-document.js +60 -0
  21. package/lib/generator/dmmf/dmmf-document.js.map +1 -0
  22. package/lib/generator/dmmf/helpers.d.ts +5 -0
  23. package/lib/generator/dmmf/helpers.js +42 -0
  24. package/lib/generator/dmmf/helpers.js.map +1 -0
  25. package/lib/generator/dmmf/transform.d.ts +11 -0
  26. package/lib/generator/dmmf/transform.js +456 -0
  27. package/lib/generator/dmmf/transform.js.map +1 -0
  28. package/lib/generator/dmmf/types.d.ts +230 -0
  29. package/lib/generator/dmmf/types.js +28 -0
  30. package/lib/generator/dmmf/types.js.map +1 -0
  31. package/lib/generator/emit-block.d.ts +4 -0
  32. package/lib/generator/emit-block.js +35 -0
  33. package/lib/generator/emit-block.js.map +1 -0
  34. package/lib/generator/enum.d.ts +4 -0
  35. package/lib/generator/enum.js +39 -0
  36. package/lib/generator/enum.js.map +1 -0
  37. package/lib/generator/generate-code.d.ts +3 -0
  38. package/lib/generator/generate-code.js +229 -0
  39. package/lib/generator/generate-code.js.map +1 -0
  40. package/lib/generator/generate-enhance.d.ts +5 -0
  41. package/lib/generator/generate-enhance.js +492 -0
  42. package/lib/generator/generate-enhance.js.map +1 -0
  43. package/lib/generator/generate-helpers.d.ts +3 -0
  44. package/lib/generator/generate-helpers.js +113 -0
  45. package/lib/generator/generate-helpers.js.map +1 -0
  46. package/lib/generator/generate-scalars.d.ts +3 -0
  47. package/lib/generator/generate-scalars.js +27 -0
  48. package/lib/generator/generate-scalars.js.map +1 -0
  49. package/lib/generator/helpers.d.ts +14 -0
  50. package/lib/generator/helpers.js +226 -0
  51. package/lib/generator/helpers.js.map +1 -0
  52. package/lib/generator/imports.d.ts +28 -0
  53. package/lib/generator/imports.js +311 -0
  54. package/lib/generator/imports.js.map +1 -0
  55. package/lib/generator/model-type-class.d.ts +4 -0
  56. package/lib/generator/model-type-class.js +152 -0
  57. package/lib/generator/model-type-class.js.map +1 -0
  58. package/lib/generator/options.d.ts +40 -0
  59. package/lib/generator/options.js +3 -0
  60. package/lib/generator/options.js.map +1 -0
  61. package/lib/generator/resolvers/full-crud.d.ts +5 -0
  62. package/lib/generator/resolvers/full-crud.js +45 -0
  63. package/lib/generator/resolvers/full-crud.js.map +1 -0
  64. package/lib/generator/resolvers/helpers.d.ts +5 -0
  65. package/lib/generator/resolvers/helpers.js +81 -0
  66. package/lib/generator/resolvers/helpers.js.map +1 -0
  67. package/lib/generator/resolvers/relations.d.ts +5 -0
  68. package/lib/generator/resolvers/relations.js +254 -0
  69. package/lib/generator/resolvers/relations.js.map +1 -0
  70. package/lib/generator/resolvers/separate-action.d.ts +5 -0
  71. package/lib/generator/resolvers/separate-action.js +33 -0
  72. package/lib/generator/resolvers/separate-action.js.map +1 -0
  73. package/lib/generator/type-class.d.ts +12 -0
  74. package/lib/generator/type-class.js +340 -0
  75. package/lib/generator/type-class.js.map +1 -0
  76. package/lib/generator/types.d.ts +5 -0
  77. package/lib/generator/types.js +3 -0
  78. package/lib/generator/types.js.map +1 -0
  79. package/lib/generator.d.ts +2 -0
  80. package/lib/generator.js +5 -0
  81. package/lib/generator.js.map +1 -0
  82. package/lib/utils/prisma-version.d.ts +1 -0
  83. package/lib/utils/prisma-version.js +34 -0
  84. package/lib/utils/prisma-version.js.map +1 -0
  85. package/lib/utils/removeDir.d.ts +1 -0
  86. package/lib/utils/removeDir.js +19 -0
  87. package/lib/utils/removeDir.js.map +1 -0
  88. package/package.json +5 -5
@@ -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":";;AAuBA,mDAoKC;;AA3LD,uCAMkB;AAClB,wDAAwB;AAExB,uCAQmB;AACnB,qCAA4C;AAG5C,uCAA4C;AAE5C,SAAwB,gCAAgC,CACtD,OAAgB,EAChB,WAAmB,EACnB,KAAiB,EACjB,eAAgC,EAChC,YAA0B;IAE1B,MAAM,OAAO,GAAG,cAAI,CAAC,OAAO,CAAC,WAAW,EAAE,yBAAgB,CAAC,CAAC;IAC5D,MAAM,QAAQ,GAAG,cAAI,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,QAAQ,KAAK,CAAC,CAAC;IAC/D,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,sCAA4B,EAAC,UAAU,CAAC,CAAC;IACzC,IAAA,uCAA6B,EAAC,UAAU,EAAE,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACnE,IAAA,qCAA2B,EAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IAC3C,IAAA,+BAAqB,EACnB,UAAU,EACV,KAAK,CAAC,MAAM;SACT,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,mBAAmB,CAAC;SACvD,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC;SAC1C,GAAG,CAAC,KAAK,CAAC,EAAE,CACX,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC;QAClC,CAAC,CAAC,YAAY,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAE;QAC5C,CAAC,CAAC,KAAK,CAAC,IAAI,CACf,CACJ,CAAC;IACF,IAAA,8BAAoB,EAClB,UAAU,EACV,KAAK,CAAC,MAAM;SACT,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,WAAW,CAAC;SAC/C,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAC5B,CAAC;IAEF,MAAM,UAAU,GAAG,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;IAC3E,MAAM,oBAAoB,GACxB,UAAU,KAAK,SAAS;QACxB,YAAY,CAAC,mBAAmB,CAAC,eAAe,CAAC,CAAC;IACpD,IAAI,oBAAoB,EAAE,CAAC;QACzB,IAAA,yCAA+B,EAAC,UAAU,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC;IAC5E,CAAC;IAED,UAAU,CAAC,QAAQ,CAAC;QAClB,IAAI,EAAE,KAAK,CAAC,QAAQ;QACpB,UAAU,EAAE,IAAI;QAChB,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM;YAChC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC;gBACE;oBACE,IAAI,EAAE,YAAY;oBAClB,SAAS,EAAE;wBACT,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,gBAAgB,EAAE,KAAK,CAAC,QAAQ,CAAC;6BACxD,MAAM,CAAC,OAAO,CAAC;6BACf,IAAI,CAAC,EAAE,CAAC,GAAG;wBACd,kBAAO,CAAC,MAAM,CAAC;4BACb,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,cAAc,IAAI;gCACzC,UAAU,EAAE,MAAM;6BACnB,CAAC;4BACF,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,WAAW,EAAE,IAAI,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC;4BACrD,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,eAAe,IAAI;gCAC1C,eAAe,EAAE,MAAM;6BACxB,CAAC;yBACH,CAAC;qBACH;iBACF;aACF;QACL,UAAU,EAAE;YACV,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAA6C,KAAK,CAAC,EAAE;gBACtE,MAAM,UAAU,GACd,CAAC,CAAC,KAAK,CAAC,YAAY;oBACpB,KAAK,CAAC,SAAS,CAAC,MAAM;oBACtB,CAAC,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC;gBAE5D,OAAO;oBACL,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,IAAI,EAAE,KAAK,CAAC,WAAW;oBACvB,mBAAmB,EAAE,CAAC,UAAU;oBAChC,gBAAgB,EAAE,UAAU;oBAC5B,cAAc,EAAE,MAAM;oBACtB,UAAU,EAAE;wBACV,GAAG,CAAC,KAAK,CAAC,YAAY;4BACtB,KAAK,CAAC,cAAc;4BACpB,KAAK,CAAC,SAAS,CAAC,MAAM;4BACpB,CAAC,CAAC,EAAE;4BACJ,CAAC,CAAC;gCACE;oCACE,IAAI,EAAE,OAAO;oCACb,SAAS,EAAE;wCACT,YAAY,KAAK,CAAC,eAAe,EAAE;wCACnC,kBAAO,CAAC,MAAM,CAAC;4CACb,QAAQ,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,IAAI,UAAU,EAAE;4CACtD,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,WAAW,EAAE,IAAI,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC;yCACtD,CAAC;qCACH;iCACF;6BACF,CAAC;qBACP;oBACD,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI;wBAChB,IAAI,EAAE,CAAC,EAAE,WAAW,EAAE,KAAK,IAAA,yBAAe,EAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;qBAC5D,CAAC;iBACH,CAAC;YACJ,CAAC,CAAC;YACF,GAAG,CAAC,oBAAoB;gBACtB,CAAC,CAAC;oBACE;wBACE,IAAI,EAAE,UAAU,CAAC,IAAI;wBACrB,IAAI,EAAE,UAAU,CAAC,WAAW;wBAC5B,mBAAmB,EAAE,UAAU,CAAC,UAAU;wBAC1C,gBAAgB,EAAE,CAAC,UAAU,CAAC,UAAU;wBACxC,cAAc,EAAE,MAAM;wBACtB,UAAU,EAAE;4BACV;gCACE,IAAI,EAAE,OAAO;gCACb,SAAS,EAAE;oCACT,YAAY,UAAU,CAAC,eAAe,EAAE;oCACxC,kBAAO,CAAC,MAAM,CAAC;wCACb,QAAQ,EAAE,GAAG,CAAC,UAAU,CAAC,UAAU,EAAE;qCACtC,CAAC;iCACH;6BACF;yBACF;qBACF;iBACF;gBACH,CAAC,CAAC,EAAE,CAAC;SACR;QACD,YAAY,EAAE,KAAK,CAAC,MAAM;aACvB,MAAM,CACL,KAAK,CAAC,EAAE,CACN,KAAK,CAAC,cAAc;YACpB,CAAC,KAAK,CAAC,YAAY;YACnB,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAC1B;aACA,GAAG,CAAgD,KAAK,CAAC,EAAE;YAC1D,OAAO;gBACL,IAAI,EAAE,KAAK,CAAC,cAAe;gBAC3B,UAAU,EAAE,KAAK,CAAC,WAAW;gBAC7B,cAAc,EAAE,MAAM;gBACtB,UAAU,EAAE;oBACV;wBACE,IAAI,EAAE,OAAO;wBACb,SAAS,EAAE;4BACT,YAAY,KAAK,CAAC,eAAe,EAAE;4BACnC,kBAAO,CAAC,MAAM,CAAC;gCACb,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE;gCAChC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,WAAW,EAAE,IAAI,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC;6BACtD,CAAC;yBACH;qBACF;iBACF;gBACD,UAAU,EAAE;oBACV,KAAK,CAAC,UAAU;wBACd,CAAC,CAAC,eAAe,KAAK,CAAC,IAAI,GAAG;wBAC9B,CAAC,CAAC,eAAe,KAAK,CAAC,IAAI,WAAW;iBACzC;gBACD,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI;oBAChB,IAAI,EAAE,CAAC,EAAE,WAAW,EAAE,KAAK,IAAA,yBAAe,EAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;iBAC5D,CAAC;aACH,CAAC;QACJ,CAAC,CAAC;QACJ,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI;YAChB,IAAI,EAAE,CAAC,EAAE,WAAW,EAAE,KAAK,IAAA,yBAAe,EAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;SAC5D,CAAC;KACH,CAAC,CAAC;AACL,CAAC"}
@@ -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,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=options.js.map
@@ -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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"}