@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
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
|
+

|
|
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
|
+

|
|
93
|
+
|
|
94
|
+
[](https://discord.gg/cWnBAQcbg2)
|
|
95
|
+
[](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)
|
package/lib/cli/dev.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
package/lib/cli/dev.js
ADDED
|
@@ -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,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"}
|