@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.
Files changed (90) hide show
  1. package/LICENSE +21 -0
  2. package/Readme.md +137 -0
  3. package/lib/cli/dev.d.ts +1 -0
  4. package/lib/cli/dev.js +5 -0
  5. package/lib/cli/dev.js.map +1 -0
  6. package/lib/cli/generator.d.ts +1 -0
  7. package/lib/cli/generator.js +13 -0
  8. package/lib/cli/generator.js.map +1 -0
  9. package/lib/cli/helpers.d.ts +4 -0
  10. package/lib/cli/helpers.js +52 -0
  11. package/lib/cli/helpers.js.map +1 -0
  12. package/lib/cli/prisma-generator.d.ts +2 -0
  13. package/lib/cli/prisma-generator.js +79 -0
  14. package/lib/cli/prisma-generator.js.map +1 -0
  15. package/lib/generator/args-class.d.ts +4 -0
  16. package/lib/generator/args-class.js +56 -0
  17. package/lib/generator/args-class.js.map +1 -0
  18. package/lib/generator/config.d.ts +22 -0
  19. package/lib/generator/config.js +39 -0
  20. package/lib/generator/config.js.map +1 -0
  21. package/lib/generator/dmmf/dmmf-document.d.ts +19 -0
  22. package/lib/generator/dmmf/dmmf-document.js +60 -0
  23. package/lib/generator/dmmf/dmmf-document.js.map +1 -0
  24. package/lib/generator/dmmf/helpers.d.ts +5 -0
  25. package/lib/generator/dmmf/helpers.js +42 -0
  26. package/lib/generator/dmmf/helpers.js.map +1 -0
  27. package/lib/generator/dmmf/transform.d.ts +11 -0
  28. package/lib/generator/dmmf/transform.js +456 -0
  29. package/lib/generator/dmmf/transform.js.map +1 -0
  30. package/lib/generator/dmmf/types.d.ts +230 -0
  31. package/lib/generator/dmmf/types.js +28 -0
  32. package/lib/generator/dmmf/types.js.map +1 -0
  33. package/lib/generator/emit-block.d.ts +4 -0
  34. package/lib/generator/emit-block.js +35 -0
  35. package/lib/generator/emit-block.js.map +1 -0
  36. package/lib/generator/enum.d.ts +4 -0
  37. package/lib/generator/enum.js +39 -0
  38. package/lib/generator/enum.js.map +1 -0
  39. package/lib/generator/generate-code.d.ts +3 -0
  40. package/lib/generator/generate-code.js +229 -0
  41. package/lib/generator/generate-code.js.map +1 -0
  42. package/lib/generator/generate-enhance.d.ts +5 -0
  43. package/lib/generator/generate-enhance.js +492 -0
  44. package/lib/generator/generate-enhance.js.map +1 -0
  45. package/lib/generator/generate-helpers.d.ts +3 -0
  46. package/lib/generator/generate-helpers.js +113 -0
  47. package/lib/generator/generate-helpers.js.map +1 -0
  48. package/lib/generator/generate-scalars.d.ts +3 -0
  49. package/lib/generator/generate-scalars.js +27 -0
  50. package/lib/generator/generate-scalars.js.map +1 -0
  51. package/lib/generator/helpers.d.ts +14 -0
  52. package/lib/generator/helpers.js +226 -0
  53. package/lib/generator/helpers.js.map +1 -0
  54. package/lib/generator/imports.d.ts +28 -0
  55. package/lib/generator/imports.js +311 -0
  56. package/lib/generator/imports.js.map +1 -0
  57. package/lib/generator/model-type-class.d.ts +4 -0
  58. package/lib/generator/model-type-class.js +152 -0
  59. package/lib/generator/model-type-class.js.map +1 -0
  60. package/lib/generator/options.d.ts +40 -0
  61. package/lib/generator/options.js +3 -0
  62. package/lib/generator/options.js.map +1 -0
  63. package/lib/generator/resolvers/full-crud.d.ts +5 -0
  64. package/lib/generator/resolvers/full-crud.js +45 -0
  65. package/lib/generator/resolvers/full-crud.js.map +1 -0
  66. package/lib/generator/resolvers/helpers.d.ts +5 -0
  67. package/lib/generator/resolvers/helpers.js +81 -0
  68. package/lib/generator/resolvers/helpers.js.map +1 -0
  69. package/lib/generator/resolvers/relations.d.ts +5 -0
  70. package/lib/generator/resolvers/relations.js +254 -0
  71. package/lib/generator/resolvers/relations.js.map +1 -0
  72. package/lib/generator/resolvers/separate-action.d.ts +5 -0
  73. package/lib/generator/resolvers/separate-action.js +33 -0
  74. package/lib/generator/resolvers/separate-action.js.map +1 -0
  75. package/lib/generator/type-class.d.ts +12 -0
  76. package/lib/generator/type-class.js +340 -0
  77. package/lib/generator/type-class.js.map +1 -0
  78. package/lib/generator/types.d.ts +5 -0
  79. package/lib/generator/types.js +3 -0
  80. package/lib/generator/types.js.map +1 -0
  81. package/lib/generator.d.ts +2 -0
  82. package/lib/generator.js +5 -0
  83. package/lib/generator.js.map +1 -0
  84. package/lib/utils/prisma-version.d.ts +1 -0
  85. package/lib/utils/prisma-version.js +34 -0
  86. package/lib/utils/prisma-version.js.map +1 -0
  87. package/lib/utils/removeDir.d.ts +1 -0
  88. package/lib/utils/removeDir.js +19 -0
  89. package/lib/utils/removeDir.js.map +1 -0
  90. package/package.json +109 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2019-2023 Michał Lytek
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/Readme.md ADDED
@@ -0,0 +1,137 @@
1
+ # Fork of [typegraphql-prisma](https://www.npmjs.com/package/typegraphql-prisma)
2
+
3
+ This project is a fork of another with minor changes, created for personal use.
4
+
5
+ Long term support is not guaranteed, use of this copy is at your own risk.
6
+
7
+ ## Installation
8
+
9
+ ```
10
+ npm install typegraphql-prisma-nestjs --save-dev
11
+ ```
12
+
13
+ ## Differences from the original project:
14
+
15
+ ### Functions and classes used in generated files from scheme of [prisma](https://github.com/prisma/prisma), imports from [nestjs](https://nestjs.com)
16
+
17
+ Original:
18
+
19
+ ```typescript
20
+ import { Ctx, Query, Resolver } from "type-graphql";
21
+ ```
22
+
23
+ In fork:
24
+
25
+ ```typescript
26
+ import { Context, Query, Resolver } from "@nestjs/graphql";
27
+ ```
28
+
29
+ ### Append transformArgsIntoPrismaArgs and setTransformArgsIntoPrismaArgs for modify args before send it to prisma
30
+
31
+ PR: https://github.com/MichalLytek/typegraphql-prisma/pull/399
32
+
33
+ Sample fork with this integrations: https://github.com/EndyKaufman/typegraphql-prisma-nestjs/commit/f80d055a9aad227502d023c673ba9eed28d5cc9b
34
+
35
+ Sample application with this feature: https://github.com/EndyKaufman/typegraphql-prisma-nestjs-example/commit/c43118e952bee58e2620f159fcc62c2595a9189b
36
+
37
+ ![image](https://github.com/MichalLytek/typegraphql-prisma/assets/4127109/edbba60a-ad6b-40b9-8f53-5ff34a1e8a6c)
38
+
39
+ ### Add support mark part of fields as optional
40
+
41
+ ```
42
+ @TypeGraphQL.optional(input: ["create", "update"])
43
+ ```
44
+
45
+ ### Add support call some async events after request to Prisma
46
+
47
+ ```ts
48
+ setTransformArgsIntoPrismaArgs(async function <
49
+ TArgs = Record<string, any>,
50
+ TContext = any,
51
+ >(
52
+ info: GraphQLResolveInfo,
53
+ args: TArgs,
54
+ ctx: TContext,
55
+ modelName?: string,
56
+ collectionName?: string,
57
+ prismaMethod?: string,
58
+ afterProcessEvents?: ((result: any) => Promise<any>)[],
59
+ ): Promise<TArgs> {
60
+ // ...some logic before request to prisma
61
+ afterProcessEvents?.push(async function (result) {
62
+ // ...some logic after request to prisma, variable result store output data
63
+ });
64
+ return args;
65
+ });
66
+ ```
67
+
68
+ ### Add options for skip generate methods and fields resolvers
69
+
70
+ ```
71
+ emitActions: 'findUnique, findUniqueOrThrow, findFirst, findFirstOrThrow, findMany, createOne, createMany, createManyAndReturn, updateOne, updateMany, deleteOne, deleteMany, upsertOne, aggregate, groupBy'
72
+
73
+ emitPropertyMethods: 'create, connectOrCreate, upsert, set, disconnect, delete, connect, update, updateMany, deleteMany'
74
+ ```
75
+
76
+ ### Add option to enable using Dataloader when retrieving nested objects
77
+
78
+ ```
79
+ useDataloaderForResolveFields: 'true' // use dataloader for entities
80
+ useDataloaderForAllResolveFields: 'true' // use dataloader for array of entities
81
+ useDataloaderMaxBatchSize: undefined // default `Infinity`. Limits the number of items that get passed in to the `batchLoadFn`. May be set to `1` to disable batching.
82
+ useDataloaderBatchScheduleFnDelay: 100 // the delay is needed to solve the problem with nextTick (https://github.com/graphql/dataloader/issues/285#issuecomment-2613792744), if the number of parallel requests is very large, then you need to increase this delay
83
+ useDataloaderCache: false // caching value with equal keys
84
+ ```
85
+
86
+ ## Example use NestJS + Prisma2 + Typegraphql
87
+
88
+ https://github.com/EndyKaufman/typegraphql-prisma-nestjs-example
89
+
90
+ ---
91
+
92
+ ![integration logo](https://raw.githubusercontent.com/EndyKaufman/typegraphql-prisma-nestjs/prisma/img/integration.png)
93
+
94
+ [![discord](https://img.shields.io/discord/1195751245386875040?logo=discord&color=%237289da)](https://discord.gg/cWnBAQcbg2)
95
+ [![npm](https://img.shields.io/npm/v/typegraphql-prisma?logo=npm&color=%23CC3534)](https://www.npmjs.com/package/typegraphql-prisma)
96
+
97
+ # TypeGraphQL & Prisma integration
98
+
99
+ Prisma generator to emit TypeGraphQL types and CRUD resolvers from your Prisma schema.
100
+
101
+ [**https://prisma.typegraphql.com**](https://prisma.typegraphql.com)
102
+
103
+ ## Documentation
104
+
105
+ The documentation, installation guide, detailed description of the API and all of its features is [available on the website](https://prisma.typegraphql.com).
106
+
107
+ ## Examples
108
+
109
+ You can check out some usage examples on this repo:
110
+
111
+ https://github.com/EndyKaufman/typegraphql-prisma-nestjs-example
112
+
113
+ ## Feedback
114
+
115
+ Currently released version `0.x` is just a preview of the upcoming integration. For now it lacks some customization option - picking models or fields of object types to expose in the schema, hiding input fields as well as picking exposed args fields. However, the base functionality is working well, so I strongly encourage you to give it a try and play with it.
116
+
117
+ Any feedback about the developers experience or ideas about new features or enhancements are very welcome - please feel free to put your two cents by using the [GitHub Discussions feature](https://github.com/MichalLytek/typegraphql-prisma/discussions/new):
118
+
119
+ <img src="https://raw.githubusercontent.com/MichalLytek/typegraphql-prisma/main/img/feedback.png" width="327"/>
120
+
121
+ ## Security contact information
122
+
123
+ To report a security vulnerability, please use the
124
+ [Tidelift security contact](https://tidelift.com/security).
125
+ Tidelift will coordinate the fix and disclosure.
126
+
127
+ ## Future of this project
128
+
129
+ This project is not sponsored by Prisma anymore, so there will be provided only bug fixes and Prisma compatibility upgrades.
130
+ You can read more about this in the GitHub issue [#385](https://github.com/MichalLytek/typegraphql-prisma/issues/385).
131
+
132
+ Let's keep `typegraphql-prisma` alive together! 💪
133
+
134
+ ## Community
135
+
136
+ - Visit the [Official Website](https://prisma.typegraphql.com)
137
+ - Chat on [Discord](https://discord.gg/cWnBAQcbg2)
@@ -0,0 +1 @@
1
+ #!/usr/bin/env node
package/lib/cli/dev.js ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ require("ts-node/register/transpile-only");
4
+ require("./generator");
5
+ //# sourceMappingURL=dev.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/cli/dev.ts"],"names":[],"mappings":";;AACA,OAAO,CAAC,iCAAiC,CAAC,CAAC;AAC3C,OAAO,CAAC,aAAa,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const generator_helper_1 = require("@prisma/generator-helper");
4
+ const prisma_generator_1 = require("./prisma-generator");
5
+ (0, generator_helper_1.generatorHandler)({
6
+ onManifest: () => ({
7
+ defaultOutput: "node_modules/@generated/type-graphql-nestjs",
8
+ prettyName: "TypeGraphQL + NestJS integration",
9
+ // requiresGenerators: ["prisma-client-js"],
10
+ }),
11
+ onGenerate: prisma_generator_1.generate,
12
+ });
13
+ //# sourceMappingURL=generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/cli/generator.ts"],"names":[],"mappings":";;AAAA,+DAA4D;AAE5D,yDAA8C;AAE9C,IAAA,mCAAgB,EAAC;IACf,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;QACjB,aAAa,EAAE,6CAA6C;QAC5D,UAAU,EAAE,kCAAkC;QAC9C,4CAA4C;KAC7C,CAAC;IACF,UAAU,EAAE,2BAAQ;CACrB,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare function parseStringBoolean(stringBoolean: string | string[] | undefined): boolean | undefined;
2
+ export declare function parseString(value: string | string[] | undefined, optionPropertyName: string): string | undefined;
3
+ export declare function parseStringArray<TAllowedValue extends string>(stringArray: string | string[] | undefined, optionPropertyName: string, allowedValues?: readonly TAllowedValue[]): TAllowedValue[] | undefined;
4
+ export declare function parseStringEnum<TAllowedValue extends string>(stringEnum: string | string[] | undefined, optionPropertyName: string, allowedValues: readonly TAllowedValue[]): TAllowedValue | undefined;
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseStringBoolean = parseStringBoolean;
4
+ exports.parseString = parseString;
5
+ exports.parseStringArray = parseStringArray;
6
+ exports.parseStringEnum = parseStringEnum;
7
+ function parseStringBoolean(stringBoolean) {
8
+ return stringBoolean === "true"
9
+ ? true
10
+ : stringBoolean === "false"
11
+ ? false
12
+ : undefined;
13
+ }
14
+ function parseString(value, optionPropertyName) {
15
+ if (Array.isArray(value)) {
16
+ throw new Error(`Invalid "${optionPropertyName}" option value "${value}" provided for TypeGraphQL generator.`);
17
+ }
18
+ return value;
19
+ }
20
+ function parseStringArray(stringArray, optionPropertyName, allowedValues) {
21
+ if (!stringArray) {
22
+ return undefined;
23
+ }
24
+ let parsedArray;
25
+ if (typeof stringArray === "string") {
26
+ if (!stringArray.includes(",")) {
27
+ throw new Error(`Invalid "${optionPropertyName}" value "${stringArray}" provided for TypeGraphQL generator.`);
28
+ }
29
+ parsedArray = stringArray.split(",").map(it => it.trim());
30
+ }
31
+ else {
32
+ parsedArray = stringArray;
33
+ }
34
+ if (allowedValues) {
35
+ for (const option of parsedArray) {
36
+ if (!allowedValues.includes(option)) {
37
+ throw new Error(`Invalid "${optionPropertyName}" option value "${option}" provided for TypeGraphQL generator.`);
38
+ }
39
+ }
40
+ }
41
+ return parsedArray;
42
+ }
43
+ function parseStringEnum(stringEnum, optionPropertyName, allowedValues) {
44
+ if (!stringEnum) {
45
+ return undefined;
46
+ }
47
+ if (!allowedValues.includes(stringEnum)) {
48
+ throw new Error(`Invalid "${optionPropertyName}" option value "${stringEnum}" provided for TypeGraphQL generator.`);
49
+ }
50
+ return stringEnum;
51
+ }
52
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/cli/helpers.ts"],"names":[],"mappings":";;AAAA,gDAQC;AAED,kCAUC;AAED,4CAgCC;AAED,0CAcC;AAtED,SAAgB,kBAAkB,CAChC,aAA4C;IAE5C,OAAO,aAAa,KAAK,MAAM;QAC7B,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,aAAa,KAAK,OAAO;YACzB,CAAC,CAAC,KAAK;YACP,CAAC,CAAC,SAAS,CAAC;AAClB,CAAC;AAED,SAAgB,WAAW,CACzB,KAAoC,EACpC,kBAA0B;IAE1B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACb,YAAY,kBAAkB,mBAAmB,KAAK,uCAAuC,CAC9F,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAgB,gBAAgB,CAC9B,WAA0C,EAC1C,kBAA0B,EAC1B,aAAwC;IAExC,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,WAAqB,CAAC;IAC1B,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;QACpC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CACb,YAAY,kBAAkB,YAAY,WAAW,uCAAuC,CAC7F,CAAC;QACJ,CAAC;QACD,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5D,CAAC;SAAM,CAAC;QACN,WAAW,GAAG,WAAW,CAAC;IAC5B,CAAC;IAED,IAAI,aAAa,EAAE,CAAC;QAClB,KAAK,MAAM,MAAM,IAAI,WAAW,EAAE,CAAC;YACjC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAa,CAAC,EAAE,CAAC;gBAC3C,MAAM,IAAI,KAAK,CACb,YAAY,kBAAkB,mBAAmB,MAAM,uCAAuC,CAC/F,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,WAA8B,CAAC;AACxC,CAAC;AAED,SAAgB,eAAe,CAC7B,UAAyC,EACzC,kBAA0B,EAC1B,aAAuC;IAEvC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,UAAiB,CAAC,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CACb,YAAY,kBAAkB,mBAAmB,UAAU,uCAAuC,CACnG,CAAC;IACJ,CAAC;IACD,OAAO,UAA2B,CAAC;AACrC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { GeneratorOptions } from "@prisma/generator-helper";
2
+ export declare function generate(options: GeneratorOptions): Promise<string>;
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generate = generate;
4
+ const tslib_1 = require("tslib");
5
+ const internals_1 = require("@prisma/internals");
6
+ const fs_1 = require("fs");
7
+ const path_1 = tslib_1.__importDefault(require("path"));
8
+ const generate_code_1 = tslib_1.__importDefault(require("../generator/generate-code"));
9
+ const removeDir_1 = tslib_1.__importDefault(require("../utils/removeDir"));
10
+ const emit_block_1 = require("../generator/emit-block");
11
+ const helpers_1 = require("./helpers");
12
+ async function generate(options) {
13
+ const outputDir = (0, internals_1.parseEnvValue)(options.generator.output);
14
+ await fs_1.promises.mkdir(outputDir, { recursive: true });
15
+ await (0, removeDir_1.default)(outputDir, true);
16
+ const prismaClientProvider = options.otherGenerators.find(it => (0, internals_1.parseEnvValue)(it.provider) === "prisma-client-js") ||
17
+ options.otherGenerators.find(it => (0, internals_1.parseEnvValue)(it.provider) === "prisma-client");
18
+ const prismaClientPath = (0, internals_1.parseEnvValue)(prismaClientProvider.output);
19
+ const prismaClientDmmf = await (0, internals_1.getDMMF)({
20
+ datamodel: options.datamodel,
21
+ previewFeatures: prismaClientProvider.previewFeatures,
22
+ });
23
+ const generatorConfig = options.generator.config;
24
+ // TODO: make this type `?-` and `| undefined`
25
+ const externalConfig = {
26
+ emitDMMF: (0, helpers_1.parseStringBoolean)(generatorConfig.emitDMMF),
27
+ emitTranspiledCode: (0, helpers_1.parseStringBoolean)(generatorConfig.emitTranspiledCode),
28
+ simpleResolvers: (0, helpers_1.parseStringBoolean)(generatorConfig.simpleResolvers),
29
+ useOriginalMapping: (0, helpers_1.parseStringBoolean)(generatorConfig.useOriginalMapping),
30
+ useUncheckedScalarInputs: (0, helpers_1.parseStringBoolean)(generatorConfig.useUncheckedScalarInputs),
31
+ emitIdAsIDType: (0, helpers_1.parseStringBoolean)(generatorConfig.emitIdAsIDType),
32
+ emitOnly: (0, helpers_1.parseStringArray)(generatorConfig.emitOnly, "emitOnly", emit_block_1.ALL_EMIT_BLOCK_KINDS),
33
+ useSimpleInputs: (0, helpers_1.parseStringBoolean)(generatorConfig.useSimpleInputs),
34
+ emitRedundantTypesInfo: (0, helpers_1.parseStringBoolean)(generatorConfig.emitRedundantTypesInfo),
35
+ customPrismaImportPath: (0, helpers_1.parseString)(generatorConfig.customPrismaImportPath, "customPrismaImportPath"),
36
+ customPrismaImportPathIgnoreLevels: (0, helpers_1.parseStringBoolean)(generatorConfig.customPrismaImportPathIgnoreLevels),
37
+ useDataloaderForResolveFields: (0, helpers_1.parseStringBoolean)(generatorConfig.useDataloaderForResolveFields) ??
38
+ false,
39
+ useDataloaderForAllResolveFields: (0, helpers_1.parseStringBoolean)(generatorConfig.useDataloaderForAllResolveFields) ??
40
+ false,
41
+ useDataloaderMaxBatchSize: generatorConfig.useDataloaderForResolveFields === undefined ||
42
+ isNaN(+generatorConfig.useDataloaderForResolveFields)
43
+ ? undefined
44
+ : +generatorConfig.useDataloaderForResolveFields,
45
+ useDataloaderBatchScheduleFnDelay: generatorConfig.useDataloaderForResolveFields === undefined ||
46
+ isNaN(+generatorConfig.useDataloaderForResolveFields)
47
+ ? 100
48
+ : +generatorConfig.useDataloaderForResolveFields,
49
+ useDataloaderCache: (0, helpers_1.parseStringBoolean)(generatorConfig.useDataloaderCache) ?? false,
50
+ contextPrismaKey: (0, helpers_1.parseString)(generatorConfig.contextPrismaKey, "contextPrismaKey"),
51
+ omitInputFieldsByDefault: (0, helpers_1.parseStringArray)(generatorConfig.omitInputFieldsByDefault, "omitInputFieldsByDefault"),
52
+ omitOutputFieldsByDefault: (0, helpers_1.parseStringArray)(generatorConfig.omitOutputFieldsByDefault, "omitOutputFieldsByDefault"),
53
+ formatGeneratedCode: (0, helpers_1.parseStringBoolean)(generatorConfig.formatGeneratedCode) ??
54
+ (0, helpers_1.parseStringEnum)(generatorConfig.formatGeneratedCode, "formatGeneratedCode", ["prettier", "tsc"]),
55
+ emitIsAbstract: (0, helpers_1.parseStringBoolean)(generatorConfig.emitIsAbstract) ?? false,
56
+ objectTypePrefix: (0, helpers_1.parseString)(generatorConfig.objectTypePrefix, "objectTypePrefix"),
57
+ inputTypePrefix: (0, helpers_1.parseString)(generatorConfig.objectTypePrefix, "inputTypePrefix"),
58
+ enumTypePrefix: (0, helpers_1.parseString)(generatorConfig.enumTypePrefix, "enumTypePrefix"),
59
+ emitActions: (0, helpers_1.parseStringArray)(generatorConfig.emitActions, "emitActions"),
60
+ emitPropertyMethods: (0, helpers_1.parseStringArray)(generatorConfig.emitPropertyMethods, "emitPropertyMethods"),
61
+ };
62
+ const internalConfig = {
63
+ outputDirPath: outputDir,
64
+ prismaClientPath,
65
+ };
66
+ if (externalConfig.emitDMMF) {
67
+ await Promise.all([
68
+ fs_1.promises.writeFile(path_1.default.resolve(outputDir, "./dmmf.json"), JSON.stringify(options.dmmf, null, 2)),
69
+ fs_1.promises.writeFile(path_1.default.resolve(outputDir, "./prisma-client-dmmf.json"), JSON.stringify(prismaClientDmmf, null, 2)),
70
+ ]);
71
+ }
72
+ // TODO: replace with `options.dmmf` when the spec match prisma client output
73
+ await (0, generate_code_1.default)(prismaClientDmmf, {
74
+ ...externalConfig,
75
+ ...internalConfig,
76
+ });
77
+ return "";
78
+ }
79
+ //# sourceMappingURL=prisma-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prisma-generator.js","sourceRoot":"","sources":["../../src/cli/prisma-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { Project } from "ts-morph";
2
+ import { DmmfDocument } from "./dmmf/dmmf-document";
3
+ import { DMMF } from "./dmmf/types";
4
+ export default function generateArgsTypeClassFromArgs(project: Project, generateDirPath: string, fields: readonly DMMF.SchemaArg[], argsTypeName: string, dmmfDocument: DmmfDocument, inputImportsLevel?: number): void;
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = generateArgsTypeClassFromArgs;
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 config_1 = require("./config");
8
+ const imports_1 = require("./imports");
9
+ function generateArgsTypeClassFromArgs(project, generateDirPath, fields, argsTypeName, dmmfDocument, inputImportsLevel = 3) {
10
+ const dirPath = path_1.default.resolve(generateDirPath, config_1.argsFolderName);
11
+ const filePath = path_1.default.resolve(dirPath, `${argsTypeName}.ts`);
12
+ const sourceFile = project.createSourceFile(filePath, undefined, {
13
+ overwrite: true,
14
+ });
15
+ (0, imports_1.generateTypeGraphQLImport)(sourceFile);
16
+ (0, imports_1.generateGraphQLScalarsImport)(sourceFile);
17
+ (0, imports_1.generateInputsImports)(sourceFile, fields
18
+ .map(arg => arg.selectedInputType)
19
+ .filter(argInputType => argInputType.location === "inputObjectTypes")
20
+ .map(argInputType => argInputType.type), inputImportsLevel);
21
+ (0, imports_1.generateEnumsImports)(sourceFile, fields
22
+ .map(field => field.selectedInputType)
23
+ .filter(argType => argType.location === "enumTypes")
24
+ .map(argType => argType.type), 4);
25
+ sourceFile.addClass({
26
+ name: argsTypeName,
27
+ isExported: true,
28
+ decorators: [
29
+ {
30
+ name: "ArgsType",
31
+ arguments: [],
32
+ },
33
+ ],
34
+ properties: fields.map(arg => {
35
+ return {
36
+ name: arg.typeName,
37
+ type: arg.fieldTSType,
38
+ hasExclamationToken: arg.isRequired,
39
+ hasQuestionToken: !arg.isRequired,
40
+ trailingTrivia: "\r\n",
41
+ decorators: [
42
+ {
43
+ name: "Field",
44
+ arguments: [
45
+ `_type => ${arg.typeGraphQLType}`,
46
+ ts_morph_1.Writers.object({
47
+ nullable: `${!arg.isRequired}`,
48
+ }),
49
+ ],
50
+ },
51
+ ],
52
+ };
53
+ }),
54
+ });
55
+ }
56
+ //# sourceMappingURL=args-class.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"args-class.js","sourceRoot":"","sources":["../../src/generator/args-class.ts"],"names":[],"mappings":";;AAkBA,gDA+DC;;AAjFD,uCAKkB;AAClB,wDAAwB;AAExB,qCAA0C;AAC1C,uCAKmB;AAInB,SAAwB,6BAA6B,CACnD,OAAgB,EAChB,eAAuB,EACvB,MAAiC,EACjC,YAAoB,EACpB,YAA0B,EAC1B,iBAAiB,GAAG,CAAC;IAErB,MAAM,OAAO,GAAG,cAAI,CAAC,OAAO,CAAC,eAAe,EAAE,uBAAc,CAAC,CAAC;IAC9D,MAAM,QAAQ,GAAG,cAAI,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC;IAC7D,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,+BAAqB,EACnB,UAAU,EACV,MAAM;SACH,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,iBAAiB,CAAC;SACjC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,KAAK,kBAAkB,CAAC;SACpE,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,EACzC,iBAAiB,CAClB,CAAC;IACF,IAAA,8BAAoB,EAClB,UAAU,EACV,MAAM;SACH,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC;SACrC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,KAAK,WAAW,CAAC;SACnD,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAc,CAAC,EACzC,CAAC,CACF,CAAC;IAEF,UAAU,CAAC,QAAQ,CAAC;QAClB,IAAI,EAAE,YAAY;QAClB,UAAU,EAAE,IAAI;QAChB,UAAU,EAAE;YACV;gBACE,IAAI,EAAE,UAAU;gBAChB,SAAS,EAAE,EAAE;aACd;SACF;QACD,UAAU,EAAE,MAAM,CAAC,GAAG,CAA6C,GAAG,CAAC,EAAE;YACvE,OAAO;gBACL,IAAI,EAAE,GAAG,CAAC,QAAQ;gBAClB,IAAI,EAAE,GAAG,CAAC,WAAW;gBACrB,mBAAmB,EAAE,GAAG,CAAC,UAAU;gBACnC,gBAAgB,EAAE,CAAC,GAAG,CAAC,UAAU;gBACjC,cAAc,EAAE,MAAM;gBACtB,UAAU,EAAE;oBACV;wBACE,IAAI,EAAE,OAAO;wBACb,SAAS,EAAE;4BACT,YAAY,GAAG,CAAC,eAAe,EAAE;4BACjC,kBAAO,CAAC,MAAM,CAAC;gCACb,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE;6BAC/B,CAAC;yBACH;qBACF;iBACF;aACF,CAAC;QACJ,CAAC,CAAC;KACH,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { DMMF } from "./dmmf/types";
2
+ export type BaseKeys = keyof Pick<DMMF.ModelMapping, "modelName">;
3
+ export declare const baseKeys: BaseKeys[];
4
+ export type ModelKeys = keyof Exclude<DMMF.ModelMapping, BaseKeys>;
5
+ export declare const supportedQueryActions: ("findUnique" | "findUniqueOrThrow" | "findFirst" | "findFirstOrThrow" | "findMany" | "groupBy" | "aggregate")[];
6
+ export type SupportedQueries = (typeof supportedQueryActions)[number];
7
+ export declare const supportedMutationActions: ("createOne" | "createMany" | "createManyAndReturn" | "updateOne" | "updateMany" | "upsertOne" | "deleteOne" | "deleteMany")[];
8
+ export type SupportedMutations = (typeof supportedMutationActions)[number];
9
+ export declare const modelsFolderName = "models";
10
+ export declare const enumsFolderName = "enums";
11
+ export declare const inputsFolderName = "inputs";
12
+ export declare const outputsFolderName = "outputs";
13
+ export declare const resolversFolderName = "resolvers";
14
+ export declare const argsFolderName = "args";
15
+ export declare const relationsResolversFolderName = "relations";
16
+ export declare const crudResolversFolderName = "crud";
17
+ export declare enum InputOmitSetting {
18
+ Create = "create",
19
+ Update = "update",
20
+ Where = "where",
21
+ OrderBy = "orderBy"
22
+ }
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.InputOmitSetting = exports.crudResolversFolderName = exports.relationsResolversFolderName = exports.argsFolderName = exports.resolversFolderName = exports.outputsFolderName = exports.inputsFolderName = exports.enumsFolderName = exports.modelsFolderName = exports.supportedMutationActions = exports.supportedQueryActions = exports.baseKeys = void 0;
4
+ exports.baseKeys = ["modelName"];
5
+ exports.supportedQueryActions = [
6
+ "findUnique",
7
+ "findUniqueOrThrow",
8
+ "findFirst",
9
+ "findFirstOrThrow",
10
+ "findMany",
11
+ "aggregate",
12
+ "groupBy",
13
+ ];
14
+ exports.supportedMutationActions = [
15
+ "createOne",
16
+ "createMany",
17
+ "createManyAndReturn",
18
+ "deleteOne",
19
+ "updateOne",
20
+ "deleteMany",
21
+ "updateMany",
22
+ "upsertOne",
23
+ ];
24
+ exports.modelsFolderName = "models";
25
+ exports.enumsFolderName = "enums";
26
+ exports.inputsFolderName = "inputs";
27
+ exports.outputsFolderName = "outputs";
28
+ exports.resolversFolderName = "resolvers";
29
+ exports.argsFolderName = "args";
30
+ exports.relationsResolversFolderName = "relations";
31
+ exports.crudResolversFolderName = "crud";
32
+ var InputOmitSetting;
33
+ (function (InputOmitSetting) {
34
+ InputOmitSetting["Create"] = "create";
35
+ InputOmitSetting["Update"] = "update";
36
+ InputOmitSetting["Where"] = "where";
37
+ InputOmitSetting["OrderBy"] = "orderBy";
38
+ })(InputOmitSetting || (exports.InputOmitSetting = InputOmitSetting = {}));
39
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/generator/config.ts"],"names":[],"mappings":";;;AAKa,QAAA,QAAQ,GAAe,CAAC,WAAW,CAAC,CAAC;AAIrC,QAAA,qBAAqB,GAAG;IACnC,YAAY;IACZ,mBAAmB;IACnB,WAAW;IACX,kBAAkB;IAClB,UAAU;IACV,WAAW;IACX,SAAS;CACkC,CAAC;AAGjC,QAAA,wBAAwB,GAAG;IACtC,WAAW;IACX,YAAY;IACZ,qBAAqB;IACrB,WAAW;IACX,WAAW;IACX,YAAY;IACZ,YAAY;IACZ,WAAW;CACgC,CAAC;AAGjC,QAAA,gBAAgB,GAAG,QAAQ,CAAC;AAC5B,QAAA,eAAe,GAAG,OAAO,CAAC;AAC1B,QAAA,gBAAgB,GAAG,QAAQ,CAAC;AAC5B,QAAA,iBAAiB,GAAG,SAAS,CAAC;AAC9B,QAAA,mBAAmB,GAAG,WAAW,CAAC;AAClC,QAAA,cAAc,GAAG,MAAM,CAAC;AACxB,QAAA,4BAA4B,GAAG,WAAW,CAAC;AAC3C,QAAA,uBAAuB,GAAG,MAAM,CAAC;AAE9C,IAAY,gBAKX;AALD,WAAY,gBAAgB;IAC1B,qCAAiB,CAAA;IACjB,qCAAiB,CAAA;IACjB,mCAAe,CAAA;IACf,uCAAmB,CAAA;AACrB,CAAC,EALW,gBAAgB,gCAAhB,gBAAgB,QAK3B"}
@@ -0,0 +1,19 @@
1
+ import type { DMMF as PrismaDMMF } from "@prisma/generator-helper";
2
+ import { DMMF } from "./types";
3
+ import { GeneratorOptions } from "../options";
4
+ import { EmitBlockKind } from "../emit-block";
5
+ export declare class DmmfDocument implements DMMF.Document {
6
+ options: GeneratorOptions;
7
+ private models;
8
+ datamodel: DMMF.Datamodel;
9
+ schema: DMMF.Schema;
10
+ enums: DMMF.Enum[];
11
+ modelMappings: DMMF.ModelMapping[];
12
+ relationModels: DMMF.RelationModel[];
13
+ constructor({ datamodel, schema, mappings }: PrismaDMMF.Document, options: GeneratorOptions);
14
+ getModelTypeName(modelName: string): string | undefined;
15
+ isModelName(typeName: string): boolean;
16
+ isModelTypeName(typeName: string): boolean;
17
+ getModelFieldAlias(modelName: string, fieldName: string): string | undefined;
18
+ shouldGenerateBlock(block: EmitBlockKind): boolean;
19
+ }
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DmmfDocument = void 0;
4
+ const transform_1 = require("./transform");
5
+ class DmmfDocument {
6
+ constructor({ datamodel, schema, mappings }, options) {
7
+ this.options = options;
8
+ const enumTypes = [
9
+ ...(schema.enumTypes.prisma ?? []),
10
+ ...(schema.enumTypes.model ?? []),
11
+ ];
12
+ const models = [...datamodel.models, ...datamodel.types];
13
+ // transform bare model without fields
14
+ this.models = models.map(transform_1.transformBareModel);
15
+ // transform enums before model fields to map enum types to enum values string union
16
+ this.enums = enumTypes.map((0, transform_1.transformEnums)(this));
17
+ // then transform once again to map the fields (it requires mapped model type names)
18
+ this.models = models.map((0, transform_1.transformModelWithFields)(this));
19
+ // transform enums again to map renamed fields
20
+ this.enums = enumTypes.map((0, transform_1.transformEnums)(this));
21
+ this.datamodel = {
22
+ models: this.models,
23
+ enums: datamodel.enums.map((0, transform_1.transformEnums)(this)),
24
+ types: [], // TODO: parse `datamodel.types`
25
+ };
26
+ this.schema = {
27
+ ...(0, transform_1.transformSchema)(schema, this),
28
+ enums: this.enums,
29
+ };
30
+ this.modelMappings = (0, transform_1.transformMappings)(mappings.modelOperations, this, options);
31
+ this.relationModels = this.models
32
+ .filter(model => model.fields.some(field => field.relationName !== undefined && !field.isOmitted.output))
33
+ .filter(model => {
34
+ const outputType = this.schema.outputTypes.find(type => type.name === model.name);
35
+ return (outputType &&
36
+ outputType.fields.some(outputTypeField => model.fields.some(modelField => modelField.name === outputTypeField.name &&
37
+ modelField.relationName !== undefined &&
38
+ !modelField.isOmitted.output)));
39
+ })
40
+ .map((0, transform_1.generateRelationModel)(this));
41
+ }
42
+ getModelTypeName(modelName) {
43
+ return this.models.find(it => it.name.toLocaleLowerCase() === modelName.toLocaleLowerCase())?.typeName;
44
+ }
45
+ isModelName(typeName) {
46
+ return this.models.some(it => it.name === typeName);
47
+ }
48
+ isModelTypeName(typeName) {
49
+ return this.models.some(it => it.typeName === typeName);
50
+ }
51
+ getModelFieldAlias(modelName, fieldName) {
52
+ const model = this.models.find(it => it.name === modelName);
53
+ return model?.fields.find(it => it.name === fieldName)?.typeFieldAlias;
54
+ }
55
+ shouldGenerateBlock(block) {
56
+ return this.options.blocksToEmit.includes(block);
57
+ }
58
+ }
59
+ exports.DmmfDocument = DmmfDocument;
60
+ //# sourceMappingURL=dmmf-document.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dmmf-document.js","sourceRoot":"","sources":["../../../src/generator/dmmf/dmmf-document.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare const modelAttributeRegex: RegExp;
2
+ export declare const fieldAttributeRegex: RegExp;
3
+ export declare const attributeNameRegex: RegExp;
4
+ export declare const attributeArgsRegex: RegExp;
5
+ export declare function parseDocumentationAttributes<TData extends object = object>(documentation: string | undefined, expectedAttributeName: string, expectedAttributeKind: "model" | "field"): Partial<TData>;
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.attributeArgsRegex = exports.attributeNameRegex = exports.fieldAttributeRegex = exports.modelAttributeRegex = void 0;
4
+ exports.parseDocumentationAttributes = parseDocumentationAttributes;
5
+ exports.modelAttributeRegex = /(@@TypeGraphQL\.)+([A-z])+(\()+(.+)+(\))+/g;
6
+ exports.fieldAttributeRegex = /(@TypeGraphQL\.)+([A-z])+(\()+(.+)+(\))+/g;
7
+ exports.attributeNameRegex = /(?:\.)+([A-Za-z])+(?:\()+/;
8
+ exports.attributeArgsRegex = /(?:\()+([A-Za-z])+\:+(.+)+(?:\))+/;
9
+ function parseDocumentationAttributes(documentation, expectedAttributeName, expectedAttributeKind) {
10
+ const attributeRegex = expectedAttributeKind === "model"
11
+ ? exports.modelAttributeRegex
12
+ : exports.fieldAttributeRegex;
13
+ const matchResults = documentation?.matchAll(attributeRegex) ?? [];
14
+ for (const [attribute] of matchResults) {
15
+ const attributeName = attribute
16
+ ?.match(exports.attributeNameRegex)?.[0]
17
+ ?.slice(1, -1);
18
+ if (attributeName !== expectedAttributeName) {
19
+ continue;
20
+ }
21
+ const rawAttributeArgs = attribute
22
+ ?.match(exports.attributeArgsRegex)?.[0]
23
+ ?.slice(1, -1);
24
+ const parsedAttributeArgs = {};
25
+ if (rawAttributeArgs) {
26
+ const rawAttributeArgsParts = rawAttributeArgs
27
+ .split(":")
28
+ .map(it => it.trim())
29
+ .map(part => (part.startsWith("[") ? part : part.split(",")))
30
+ .flat()
31
+ .map(it => it.trim());
32
+ for (let i = 0; i < rawAttributeArgsParts.length; i += 2) {
33
+ const key = rawAttributeArgsParts[i];
34
+ const value = rawAttributeArgsParts[i + 1];
35
+ parsedAttributeArgs[key] = JSON.parse(value);
36
+ }
37
+ }
38
+ return parsedAttributeArgs;
39
+ }
40
+ return {};
41
+ }
42
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/generator/dmmf/helpers.ts"],"names":[],"mappings":";;;AAKA,oEAwCC;AA7CY,QAAA,mBAAmB,GAAG,4CAA4C,CAAC;AACnE,QAAA,mBAAmB,GAAG,2CAA2C,CAAC;AAClE,QAAA,kBAAkB,GAAG,2BAA2B,CAAC;AACjD,QAAA,kBAAkB,GAAG,mCAAmC,CAAC;AAEtE,SAAgB,4BAA4B,CAC1C,aAAiC,EACjC,qBAA6B,EAC7B,qBAAwC;IAExC,MAAM,cAAc,GAClB,qBAAqB,KAAK,OAAO;QAC/B,CAAC,CAAC,2BAAmB;QACrB,CAAC,CAAC,2BAAmB,CAAC;IAC1B,MAAM,YAAY,GAAG,aAAa,EAAE,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;IAEnE,KAAK,MAAM,CAAC,SAAS,CAAC,IAAI,YAAY,EAAE,CAAC;QACvC,MAAM,aAAa,GAAG,SAAS;YAC7B,EAAE,KAAK,CAAC,0BAAkB,CAAC,EAAE,CAAC,CAAC,CAAC;YAChC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACjB,IAAI,aAAa,KAAK,qBAAqB,EAAE,CAAC;YAC5C,SAAS;QACX,CAAC;QACD,MAAM,gBAAgB,GAAG,SAAS;YAChC,EAAE,KAAK,CAAC,0BAAkB,CAAC,EAAE,CAAC,CAAC,CAAC;YAChC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACjB,MAAM,mBAAmB,GAA4B,EAAE,CAAC;QACxD,IAAI,gBAAgB,EAAE,CAAC;YACrB,MAAM,qBAAqB,GAAG,gBAAgB;iBAC3C,KAAK,CAAC,GAAG,CAAC;iBACV,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;iBACpB,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;iBAC5D,IAAI,EAAE;iBACN,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;YAExB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,qBAAqB,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzD,MAAM,GAAG,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAC;gBACrC,MAAM,KAAK,GAAG,qBAAqB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC3C,mBAAmB,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;QACD,OAAO,mBAAqC,CAAC;IAC/C,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC"}