@pothos/plugin-prisma 3.43.0 → 3.45.0
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/CHANGELOG.md +14 -0
- package/README.md +25 -4
- package/dts/connection-helpers.d.ts +1 -1
- package/dts/connection-helpers.d.ts.map +1 -1
- package/dts/global-types.d.ts +4 -4
- package/dts/global-types.d.ts.map +1 -1
- package/dts/index.d.ts +2 -1
- package/dts/index.d.ts.map +1 -1
- package/dts/prisma-field-builder.d.ts +7 -7
- package/dts/prisma-field-builder.d.ts.map +1 -1
- package/dts/types.d.ts +10 -7
- package/dts/types.d.ts.map +1 -1
- package/dts/util/datamodel.d.ts +2 -2
- package/dts/util/datamodel.d.ts.map +1 -1
- package/dts/util/get-client.d.ts +4 -0
- package/dts/util/get-client.d.ts.map +1 -1
- package/esm/connection-helpers.d.ts +1 -1
- package/esm/connection-helpers.d.ts.map +1 -1
- package/esm/generator.js +18 -7
- package/esm/generator.js.map +1 -1
- package/esm/global-types.d.ts +4 -4
- package/esm/global-types.d.ts.map +1 -1
- package/esm/global-types.js.map +1 -1
- package/esm/index.d.ts +2 -1
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +2 -1
- package/esm/index.js.map +1 -1
- package/esm/model-loader.js +19 -1
- package/esm/model-loader.js.map +1 -1
- package/esm/object-ref.js +18 -0
- package/esm/object-ref.js.map +1 -1
- package/esm/prisma-field-builder.d.ts +7 -7
- package/esm/prisma-field-builder.d.ts.map +1 -1
- package/esm/prisma-field-builder.js +35 -19
- package/esm/prisma-field-builder.js.map +1 -1
- package/esm/types.d.ts +10 -7
- package/esm/types.d.ts.map +1 -1
- package/esm/util/datamodel.d.ts +2 -2
- package/esm/util/datamodel.d.ts.map +1 -1
- package/esm/util/get-client.d.ts +4 -0
- package/esm/util/get-client.d.ts.map +1 -1
- package/esm/util/get-client.js.map +1 -1
- package/lib/generator.js +18 -7
- package/lib/generator.js.map +1 -1
- package/lib/index.js +3 -0
- package/lib/index.js.map +1 -1
- package/lib/model-loader.js +18 -1
- package/lib/model-loader.js.map +1 -1
- package/lib/object-ref.js +17 -0
- package/lib/object-ref.js.map +1 -1
- package/lib/prisma-field-builder.js +33 -18
- package/lib/prisma-field-builder.js.map +1 -1
- package/lib/util/get-client.js.map +1 -1
- package/package.json +8 -8
- package/src/connection-helpers.ts +1 -1
- package/src/generator.ts +42 -13
- package/src/global-types.ts +7 -2
- package/src/index.ts +2 -1
- package/src/prisma-field-builder.ts +2 -1
- package/src/types.ts +31 -9
- package/src/util/get-client.ts +4 -0
|
@@ -11,6 +11,19 @@ const _modelLoader = require("./model-loader");
|
|
|
11
11
|
const _cursors = require("./util/cursors");
|
|
12
12
|
const _datamodel = require("./util/datamodel");
|
|
13
13
|
const _description = require("./util/description");
|
|
14
|
+
function _defineProperty(obj, key, value) {
|
|
15
|
+
if (key in obj) {
|
|
16
|
+
Object.defineProperty(obj, key, {
|
|
17
|
+
value: value,
|
|
18
|
+
enumerable: true,
|
|
19
|
+
configurable: true,
|
|
20
|
+
writable: true
|
|
21
|
+
});
|
|
22
|
+
} else {
|
|
23
|
+
obj[key] = value;
|
|
24
|
+
}
|
|
25
|
+
return obj;
|
|
26
|
+
}
|
|
14
27
|
// Workaround for FieldKind not being extended on Builder classes
|
|
15
28
|
const RootBuilder = _core.RootFieldBuilder;
|
|
16
29
|
class PrismaObjectFieldBuilder extends RootBuilder {
|
|
@@ -126,28 +139,30 @@ class PrismaObjectFieldBuilder extends RootBuilder {
|
|
|
126
139
|
}
|
|
127
140
|
constructor(name, builder, model, fieldMap){
|
|
128
141
|
super(name, builder, 'PrismaObject', 'Object');
|
|
129
|
-
this
|
|
130
|
-
this
|
|
131
|
-
this
|
|
132
|
-
this
|
|
133
|
-
this
|
|
134
|
-
this
|
|
142
|
+
_defineProperty(this, "model", void 0);
|
|
143
|
+
_defineProperty(this, "prismaFieldMap", void 0);
|
|
144
|
+
_defineProperty(this, "exposeBoolean", this.createExpose('Boolean'));
|
|
145
|
+
_defineProperty(this, "exposeFloat", this.createExpose('Float'));
|
|
146
|
+
_defineProperty(this, "exposeInt", this.createExpose('Int'));
|
|
147
|
+
_defineProperty(this, "exposeID", this.createExpose('ID'));
|
|
148
|
+
_defineProperty(this, "exposeString", this.createExpose('String'));
|
|
149
|
+
_defineProperty(this, "exposeBooleanList", this.createExpose([
|
|
135
150
|
'Boolean'
|
|
136
|
-
]);
|
|
137
|
-
this
|
|
151
|
+
]));
|
|
152
|
+
_defineProperty(this, "exposeFloatList", this.createExpose([
|
|
138
153
|
'Float'
|
|
139
|
-
]);
|
|
140
|
-
this
|
|
154
|
+
]));
|
|
155
|
+
_defineProperty(this, "exposeIntList", this.createExpose([
|
|
141
156
|
'Int'
|
|
142
|
-
]);
|
|
143
|
-
this
|
|
157
|
+
]));
|
|
158
|
+
_defineProperty(this, "exposeIDList", this.createExpose([
|
|
144
159
|
'ID'
|
|
145
|
-
]);
|
|
146
|
-
this
|
|
160
|
+
]));
|
|
161
|
+
_defineProperty(this, "exposeStringList", this.createExpose([
|
|
147
162
|
'String'
|
|
148
|
-
]);
|
|
149
|
-
this
|
|
150
|
-
this
|
|
163
|
+
]));
|
|
164
|
+
_defineProperty(this, "withAuth", withAuth);
|
|
165
|
+
_defineProperty(this, "relatedConnection", function relatedConnection(name, { maxSize , defaultSize , cursor , query , resolve , extensions , totalCount , description , ...options }, connectionOptions = {}, edgeOptions = {}) {
|
|
151
166
|
const relationField = (0, _datamodel.getRelation)(this.model, this.builder, name);
|
|
152
167
|
var _options_type;
|
|
153
168
|
const ref = (_options_type = options.type) !== null && _options_type !== void 0 ? _options_type : (0, _datamodel.getRefFromModel)(relationField.type, this.builder);
|
|
@@ -239,7 +254,7 @@ class PrismaObjectFieldBuilder extends RootBuilder {
|
|
|
239
254
|
} : connectionOptions.fields
|
|
240
255
|
}, edgeOptions);
|
|
241
256
|
return fieldRef;
|
|
242
|
-
};
|
|
257
|
+
});
|
|
243
258
|
this.model = model;
|
|
244
259
|
this.prismaFieldMap = fieldMap;
|
|
245
260
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/prisma-field-builder.ts"],"names":["PrismaObjectFieldBuilder","RootBuilder","RootFieldBuilder","relation","name","allArgs","description","options","relationField","getRelation","model","builder","ref","type","getRefFromModel","query","resolve","extensions","rest","relationSelect","args","context","nestedQuery","select","field","isList","getFieldDescription","pothosPrismaSelect","pothosPrismaLoaded","value","undefined","pothosPrismaFallback","q","parent","info","relationCount","where","countSelect","_count","nullable","variant","isNull","selfSelect","parentIsNull","isThenable","then","resolved","expose","typeConfig","configStore","getTypeConfig","typename","usingSelect","exposeField","pothosPrismaVariant","createExpose","constructor","fieldMap","exposeBoolean","exposeFloat","exposeInt","exposeID","exposeString","exposeBooleanList","exposeFloatList","exposeIntList","exposeIDList","exposeStringList","withAuth","relatedConnection","maxSize","defaultSize","cursor","totalCount","connectionOptions","edgeOptions","typeName","formatCursor","getCursorFormatter","parseCursor","getCursorParser","getQuery","ctx","prismaCursorConnectionQuery","cursorSelection","ModelLoader","getCursorSelection","getSelection","nested","getType","path","hasTotalCount","prisma","filterConnectionTotalCount","fieldRef","connection","Promise","result","wrapConnectionResult","take","connectionQuery","ObjectRef","fields","t","int","
|
|
1
|
+
{"version":3,"sources":["../src/prisma-field-builder.ts"],"names":["PrismaObjectFieldBuilder","RootBuilder","RootFieldBuilder","relation","name","allArgs","description","options","relationField","getRelation","model","builder","ref","type","getRefFromModel","query","resolve","extensions","rest","relationSelect","args","context","nestedQuery","select","field","isList","getFieldDescription","pothosPrismaSelect","pothosPrismaLoaded","value","undefined","pothosPrismaFallback","q","parent","info","relationCount","where","countSelect","_count","nullable","variant","isNull","selfSelect","parentIsNull","isThenable","then","resolved","expose","typeConfig","configStore","getTypeConfig","typename","usingSelect","exposeField","pothosPrismaVariant","createExpose","constructor","fieldMap","prismaFieldMap","exposeBoolean","exposeFloat","exposeInt","exposeID","exposeString","exposeBooleanList","exposeFloatList","exposeIntList","exposeIDList","exposeStringList","withAuth","relatedConnection","maxSize","defaultSize","cursor","totalCount","connectionOptions","edgeOptions","typeName","formatCursor","getCursorFormatter","parseCursor","getCursorParser","getQuery","ctx","prismaCursorConnectionQuery","cursorSelection","ModelLoader","getCursorSelection","getSelection","nested","getType","path","hasTotalCount","prisma","filterConnectionTotalCount","fieldRef","connection","Promise","result","wrapConnectionResult","take","connectionQuery","ObjectRef","fields","t","int","addScopes","scopes","originalCreateField","createField","call","authScopes"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/util/get-client.ts"],"names":["getClient","getDMMF","prismaClientCache","createContextCache","builder","context","options","prisma","client","dmmf","_baseDmmf","_dmmf"],"mappings":"AAAA,uCAAuC;;;;;;;;;;;
|
|
1
|
+
{"version":3,"sources":["../../src/util/get-client.ts"],"names":["getClient","getDMMF","prismaClientCache","createContextCache","builder","context","options","prisma","client","dmmf","_baseDmmf","_dmmf"],"mappings":"AAAA,uCAAuC;;;;;;;;;;;IAwCvBA,SAAS,MAATA;IAWAC,OAAO,MAAPA;;sBAlDgC;AA8BhD,MAAMC,oBAAoBC,IAAAA,wBAAkB,EAC1C,CAA4BC,UAC1BD,IAAAA,wBAAkB,EAAC,CAACE,UAClB,OAAOD,QAAQE,OAAO,CAACC,MAAM,CAACC,MAAM,KAAK,aACrCJ,QAAQE,OAAO,CAACC,MAAM,CAACC,MAAM,CAACH,WAC9BD,QAAQE,OAAO,CAACC,MAAM,CAACC,MAAM;AAIhC,SAASR,UACdI,OAA+C,EAC/CC,OAAyB,EACX;IACd,IAAI,OAAOD,QAAQE,OAAO,CAACC,MAAM,CAACC,MAAM,KAAK,YAAY;QACvD,OAAON,kBAAkBE,SAASC;IACpC,CAAC;IAED,OAAOD,QAAQE,OAAO,CAACC,MAAM,CAACC,MAAM;AACtC;AAEO,SAASP,QACdG,OAA+C,EACzC;IACN,IAAI,UAAUA,QAAQE,OAAO,CAACC,MAAM,IAAIH,QAAQE,OAAO,CAACC,MAAM,CAACE,IAAI,EAAE;QACnE,OAAOL,QAAQE,OAAO,CAACC,MAAM,CAACE,IAAI;IACpC,CAAC;IAED,MAAMD,SAASJ,QAAQE,OAAO,CAACC,MAAM,CAACC,MAAM;QAKrCA;IAAP,OAAOA,CAAAA,oBAAAA,OAAOE,SAAS,cAAhBF,+BAAAA,oBAAoBA,OAAOG,KAAK;AACzC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pothos/plugin-prisma",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.45.0",
|
|
4
4
|
"description": "A Pothos plugin for more efficient integration with prisma",
|
|
5
5
|
"main": "./lib/index.js",
|
|
6
6
|
"types": "./dts/index.d.ts",
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
"access": "public"
|
|
51
51
|
},
|
|
52
52
|
"dependencies": {
|
|
53
|
-
"@prisma/generator-helper": "^4.
|
|
53
|
+
"@prisma/generator-helper": "^4.11.0"
|
|
54
54
|
},
|
|
55
55
|
"prisma": {
|
|
56
56
|
"seed": "node prisma/seed.mjs"
|
|
@@ -62,17 +62,17 @@
|
|
|
62
62
|
"typescript": ">=4.7.2"
|
|
63
63
|
},
|
|
64
64
|
"devDependencies": {
|
|
65
|
-
"@prisma/client": "^4.9.0",
|
|
66
|
-
"graphql": "16.6.0",
|
|
67
|
-
"graphql-scalars": "^1.20.1",
|
|
68
|
-
"graphql-tag": "^2.12.6",
|
|
69
|
-
"prisma": "^4.9.0",
|
|
70
65
|
"@pothos/core": "3.28.0",
|
|
71
66
|
"@pothos/plugin-complexity": "3.12.0",
|
|
72
67
|
"@pothos/plugin-errors": "3.11.0",
|
|
73
68
|
"@pothos/plugin-relay": "3.38.0",
|
|
74
69
|
"@pothos/plugin-simple-objects": "3.6.7",
|
|
75
|
-
"@pothos/test-utils": "1.4.7"
|
|
70
|
+
"@pothos/test-utils": "1.4.7",
|
|
71
|
+
"@prisma/client": "^4.11.0",
|
|
72
|
+
"graphql": "16.6.0",
|
|
73
|
+
"graphql-scalars": "^1.20.4",
|
|
74
|
+
"graphql-tag": "^2.12.6",
|
|
75
|
+
"prisma": "^4.11.0"
|
|
76
76
|
},
|
|
77
77
|
"scripts": {
|
|
78
78
|
"generate": "prisma generate",
|
|
@@ -25,7 +25,7 @@ export function prismaConnectionHelpers<
|
|
|
25
25
|
Shape = RefOrType extends PrismaObjectRef<PrismaModelTypes, infer T> ? T : Model['Shape'],
|
|
26
26
|
EdgeShape = Model['Include'] extends Select
|
|
27
27
|
? Shape
|
|
28
|
-
: ShapeFromSelection<Model, { select: Select }>,
|
|
28
|
+
: ShapeFromSelection<Types, Model, { select: Select }>,
|
|
29
29
|
NodeShape = EdgeShape,
|
|
30
30
|
>(
|
|
31
31
|
builder: PothosSchemaTypes.SchemaBuilder<Types>,
|
package/src/generator.ts
CHANGED
|
@@ -9,11 +9,12 @@ import { DMMF, generatorHandler } from '@prisma/generator-helper';
|
|
|
9
9
|
|
|
10
10
|
const MIN_TS_VERSION = [4, 5, 2];
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
const versionParts = version.split(/[.-]/g).map((part) => Number.parseInt(part, 10));
|
|
13
|
+
const modifiersArg = (versionParts[0] >= 5 ? [] : [[]]) as [];
|
|
14
14
|
|
|
15
|
+
function checkTSVersion() {
|
|
15
16
|
for (let i = 0; i < 3; i += 1) {
|
|
16
|
-
const part =
|
|
17
|
+
const part = versionParts[i];
|
|
17
18
|
if (part < MIN_TS_VERSION[i]) {
|
|
18
19
|
throw new Error(
|
|
19
20
|
`@pothos/plugin-prisma requires typescript version >${MIN_TS_VERSION.join('.')}`,
|
|
@@ -36,14 +37,14 @@ generatorHandler({
|
|
|
36
37
|
}),
|
|
37
38
|
onGenerate: async (options) => {
|
|
38
39
|
checkTSVersion();
|
|
39
|
-
const config = options.generator.config as { clientOutput?: string };
|
|
40
|
+
const config = options.generator.config as { clientOutput?: string; prismaUtils?: string };
|
|
40
41
|
const prismaLocation =
|
|
41
42
|
config.clientOutput ??
|
|
42
43
|
options.otherGenerators.find((gen) => gen.provider.value === 'prisma-client-js')!.output!
|
|
43
44
|
.value!;
|
|
44
45
|
|
|
45
46
|
const outputLocation = options.generator.output?.value ?? defaultOutput;
|
|
46
|
-
const prismaTypes = buildTypes(options.dmmf);
|
|
47
|
+
const prismaTypes = buildTypes(options.dmmf, config);
|
|
47
48
|
|
|
48
49
|
await generateOutput(options.dmmf, prismaTypes, prismaLocation, outputLocation);
|
|
49
50
|
|
|
@@ -65,7 +66,7 @@ async function generateOutput(
|
|
|
65
66
|
outputLocation: string,
|
|
66
67
|
) {
|
|
67
68
|
const importStatement = ts.factory.createImportDeclaration(
|
|
68
|
-
|
|
69
|
+
...modifiersArg,
|
|
69
70
|
[],
|
|
70
71
|
ts.factory.createImportClause(
|
|
71
72
|
true,
|
|
@@ -119,7 +120,7 @@ async function generateOutput(
|
|
|
119
120
|
});
|
|
120
121
|
}
|
|
121
122
|
|
|
122
|
-
function buildTypes(dmmf: DMMF.Document) {
|
|
123
|
+
function buildTypes(dmmf: DMMF.Document, config: { prismaUtils?: string }) {
|
|
123
124
|
function getOrderByTypeName(type: string) {
|
|
124
125
|
const possibleTypes = [
|
|
125
126
|
`${type}OrderByWithRelationInput`,
|
|
@@ -137,6 +138,8 @@ function buildTypes(dmmf: DMMF.Document) {
|
|
|
137
138
|
return orderBy.name;
|
|
138
139
|
}
|
|
139
140
|
|
|
141
|
+
const prismaUtils = config.prismaUtils === 'true';
|
|
142
|
+
|
|
140
143
|
const modelTypes = dmmf.datamodel.models.map((model) => {
|
|
141
144
|
const relations = model.fields.filter((field) => !!field.relationName);
|
|
142
145
|
const listRelations = model.fields.filter((field) => !!field.relationName && field.isList);
|
|
@@ -191,6 +194,35 @@ function buildTypes(dmmf: DMMF.Document) {
|
|
|
191
194
|
undefined,
|
|
192
195
|
ts.factory.createTypeReferenceNode(`Prisma.${model.name}WhereInput`),
|
|
193
196
|
),
|
|
197
|
+
...(prismaUtils
|
|
198
|
+
? [
|
|
199
|
+
ts.factory.createPropertySignature(
|
|
200
|
+
[],
|
|
201
|
+
'Create',
|
|
202
|
+
undefined,
|
|
203
|
+
ts.factory.createTypeReferenceNode(`Prisma.${model.name}CreateInput`),
|
|
204
|
+
),
|
|
205
|
+
ts.factory.createPropertySignature(
|
|
206
|
+
[],
|
|
207
|
+
'Update',
|
|
208
|
+
undefined,
|
|
209
|
+
ts.factory.createTypeReferenceNode(`Prisma.${model.name}UpdateInput`),
|
|
210
|
+
),
|
|
211
|
+
]
|
|
212
|
+
: [
|
|
213
|
+
ts.factory.createPropertySignature(
|
|
214
|
+
[],
|
|
215
|
+
'Create',
|
|
216
|
+
undefined,
|
|
217
|
+
ts.factory.createTypeLiteralNode([]),
|
|
218
|
+
),
|
|
219
|
+
ts.factory.createPropertySignature(
|
|
220
|
+
[],
|
|
221
|
+
'Update',
|
|
222
|
+
undefined,
|
|
223
|
+
ts.factory.createTypeLiteralNode([]),
|
|
224
|
+
),
|
|
225
|
+
]),
|
|
194
226
|
ts.factory.createPropertySignature(
|
|
195
227
|
[],
|
|
196
228
|
'RelationName',
|
|
@@ -243,12 +275,9 @@ function buildTypes(dmmf: DMMF.Document) {
|
|
|
243
275
|
),
|
|
244
276
|
ts.factory.createPropertySignature(
|
|
245
277
|
[],
|
|
246
|
-
'
|
|
278
|
+
'Name',
|
|
247
279
|
undefined,
|
|
248
|
-
ts.factory.
|
|
249
|
-
ts.factory.createTypeReferenceNode('PrismaTypes'),
|
|
250
|
-
ts.factory.createLiteralTypeNode(ts.factory.createStringLiteral(typeName)),
|
|
251
|
-
),
|
|
280
|
+
ts.factory.createLiteralTypeNode(ts.factory.createStringLiteral(typeName)),
|
|
252
281
|
),
|
|
253
282
|
]),
|
|
254
283
|
);
|
|
@@ -260,7 +289,7 @@ function buildTypes(dmmf: DMMF.Document) {
|
|
|
260
289
|
});
|
|
261
290
|
|
|
262
291
|
return ts.factory.createInterfaceDeclaration(
|
|
263
|
-
|
|
292
|
+
...modifiersArg,
|
|
264
293
|
[
|
|
265
294
|
ts.factory.createModifier(SyntaxKind.ExportKeyword),
|
|
266
295
|
ts.factory.createModifier(SyntaxKind.DefaultKeyword),
|
package/src/global-types.ts
CHANGED
|
@@ -114,9 +114,12 @@ declare global {
|
|
|
114
114
|
FindUnique,
|
|
115
115
|
Include,
|
|
116
116
|
Select,
|
|
117
|
-
ShapeFromSelection<Model, { select: Select; include: Include }>
|
|
117
|
+
ShapeFromSelection<Types, Model, { select: Select; include: Include }>
|
|
118
118
|
>,
|
|
119
|
-
) => PrismaObjectRef<
|
|
119
|
+
) => PrismaObjectRef<
|
|
120
|
+
Model,
|
|
121
|
+
ShapeFromSelection<Types, Model, { select: Select; include: Include }>
|
|
122
|
+
>;
|
|
120
123
|
|
|
121
124
|
prismaObjectField: <
|
|
122
125
|
Type extends PrismaObjectRef<PrismaModelTypes, {}> | keyof Types['PrismaTypes'],
|
|
@@ -165,6 +168,7 @@ declare global {
|
|
|
165
168
|
Include,
|
|
166
169
|
Select,
|
|
167
170
|
ShapeFromSelection<
|
|
171
|
+
Types,
|
|
168
172
|
PrismaModelTypes & Types['PrismaTypes'][Name],
|
|
169
173
|
{ select: Select; include: Include }
|
|
170
174
|
>,
|
|
@@ -173,6 +177,7 @@ declare global {
|
|
|
173
177
|
) => PrismaNodeRef<
|
|
174
178
|
Types['PrismaTypes'][Name] & PrismaModelTypes,
|
|
175
179
|
ShapeFromSelection<
|
|
180
|
+
Types,
|
|
176
181
|
PrismaModelTypes & Types['PrismaTypes'][Name],
|
|
177
182
|
{ select: Select; include: Include }
|
|
178
183
|
>
|
package/src/index.ts
CHANGED
|
@@ -11,6 +11,7 @@ import { PrismaObjectFieldBuilder as InternalPrismaObjectFieldBuilder } from './
|
|
|
11
11
|
import { ModelLoader } from './model-loader';
|
|
12
12
|
import { PrismaModelTypes } from './types';
|
|
13
13
|
import { formatPrismaCursor, parsePrismaCursor } from './util/cursors';
|
|
14
|
+
import { getModel, getRefFromModel } from './util/datamodel';
|
|
14
15
|
import { getLoaderMapping, setLoaderMappings } from './util/loader-map';
|
|
15
16
|
import { queryFromInfo, selectionStateFromInfo } from './util/map-query';
|
|
16
17
|
|
|
@@ -23,7 +24,7 @@ const pluginName = 'prisma' as const;
|
|
|
23
24
|
|
|
24
25
|
export default pluginName;
|
|
25
26
|
|
|
26
|
-
export { formatPrismaCursor, parsePrismaCursor, queryFromInfo };
|
|
27
|
+
export { formatPrismaCursor, getModel, getRefFromModel, parsePrismaCursor, queryFromInfo };
|
|
27
28
|
|
|
28
29
|
export type PrismaObjectFieldBuilder<
|
|
29
30
|
Types extends SchemaTypes,
|
|
@@ -26,6 +26,7 @@ import {
|
|
|
26
26
|
RelationCountOptions,
|
|
27
27
|
SelectionMap,
|
|
28
28
|
ShapeFromConnection,
|
|
29
|
+
TypesForRelation,
|
|
29
30
|
VariantFieldOptions,
|
|
30
31
|
} from './types';
|
|
31
32
|
import {
|
|
@@ -385,7 +386,7 @@ export class PrismaObjectFieldBuilder<
|
|
|
385
386
|
Types,
|
|
386
387
|
Shape,
|
|
387
388
|
NeedsResolve,
|
|
388
|
-
Model
|
|
389
|
+
TypesForRelation<Types, Model, Field>['Where']
|
|
389
390
|
>,
|
|
390
391
|
]
|
|
391
392
|
>
|
package/src/types.ts
CHANGED
|
@@ -43,13 +43,16 @@ export interface PrismaModelTypes {
|
|
|
43
43
|
OrderBy: unknown;
|
|
44
44
|
Where: {};
|
|
45
45
|
WhereUnique: {};
|
|
46
|
+
Create: {};
|
|
47
|
+
Update: {};
|
|
46
48
|
ListRelations: string;
|
|
47
49
|
RelationName: string;
|
|
48
50
|
Relations: Record<
|
|
49
51
|
string,
|
|
50
52
|
{
|
|
51
53
|
Shape: unknown;
|
|
52
|
-
|
|
54
|
+
Name: string;
|
|
55
|
+
// Types: PrismaModelTypes;
|
|
53
56
|
}
|
|
54
57
|
>;
|
|
55
58
|
}
|
|
@@ -78,6 +81,7 @@ export type PrismaObjectFieldOptions<
|
|
|
78
81
|
? ParentShape
|
|
79
82
|
: ParentShape &
|
|
80
83
|
ShapeFromSelection<
|
|
84
|
+
Types,
|
|
81
85
|
ExtractModel<Types, ParentShape>,
|
|
82
86
|
{ select: Select extends (...args: any[]) => infer S ? S : Select }
|
|
83
87
|
>,
|
|
@@ -123,12 +127,16 @@ interface BaseSelection {
|
|
|
123
127
|
|
|
124
128
|
export type SelectedKeys<T> = { [K in keyof T]: T[K] extends false ? never : K }[keyof T];
|
|
125
129
|
|
|
126
|
-
export type ShapeFromSelection<
|
|
130
|
+
export type ShapeFromSelection<
|
|
131
|
+
Types extends SchemaTypes,
|
|
132
|
+
Model extends PrismaModelTypes,
|
|
133
|
+
Selection,
|
|
134
|
+
> = Normalize<
|
|
127
135
|
Selection extends BaseSelection
|
|
128
136
|
? unknown extends Selection['select']
|
|
129
|
-
? Model['Shape'] & RelationShapeFromInclude<Model, Selection['include']>
|
|
137
|
+
? Model['Shape'] & RelationShapeFromInclude<Types, Model, Selection['include']>
|
|
130
138
|
: Pick<Model['Shape'], SelectedKeys<Selection['select']>> &
|
|
131
|
-
RelationShapeFromInclude<Model, Selection['select']> &
|
|
139
|
+
RelationShapeFromInclude<Types, Model, Selection['select']> &
|
|
132
140
|
('_count' extends keyof Selection['select']
|
|
133
141
|
? ShapeFromCount<Selection['select']['_count']>
|
|
134
142
|
: {})
|
|
@@ -141,13 +149,27 @@ export type ShapeFromCount<Selection> = Selection extends true
|
|
|
141
149
|
? { _count: { [K in keyof Counts]: number } }
|
|
142
150
|
: never;
|
|
143
151
|
|
|
144
|
-
type
|
|
152
|
+
export type TypesForRelation<
|
|
153
|
+
Types extends SchemaTypes,
|
|
154
|
+
Model extends PrismaModelTypes,
|
|
155
|
+
Relation extends keyof Model['Relations'],
|
|
156
|
+
> = Model['Relations'][Relation]['Name'] extends infer Name
|
|
157
|
+
? Name extends keyof Types['PrismaTypes']
|
|
158
|
+
? Types['PrismaTypes'][Name] & PrismaModelTypes
|
|
159
|
+
: never
|
|
160
|
+
: never;
|
|
161
|
+
|
|
162
|
+
type RelationShapeFromInclude<
|
|
163
|
+
Types extends SchemaTypes,
|
|
164
|
+
Model extends PrismaModelTypes,
|
|
165
|
+
Include,
|
|
166
|
+
> = Normalize<{
|
|
145
167
|
[K in SelectedKeys<Include> as K extends Model['RelationName']
|
|
146
168
|
? K
|
|
147
169
|
: never]: K extends keyof Model['Relations']
|
|
148
170
|
? Model['Relations'][K]['Shape'] extends unknown[]
|
|
149
|
-
? ShapeFromSelection<
|
|
150
|
-
: ShapeFromSelection<
|
|
171
|
+
? ShapeFromSelection<Types, TypesForRelation<Types, Model, K>, Include[K]>[]
|
|
172
|
+
: ShapeFromSelection<Types, TypesForRelation<Types, Model, K>, Include[K]>
|
|
151
173
|
: unknown;
|
|
152
174
|
}>;
|
|
153
175
|
|
|
@@ -372,7 +394,7 @@ export type RelatedFieldOptions<
|
|
|
372
394
|
>;
|
|
373
395
|
}) & {
|
|
374
396
|
description?: string | false;
|
|
375
|
-
type?: PrismaObjectRef<Model
|
|
397
|
+
type?: PrismaObjectRef<TypesForRelation<Types, Model, Field>>;
|
|
376
398
|
query?: QueryForField<Types, Args, Model['Include'][Field & keyof Model['Include']]>;
|
|
377
399
|
};
|
|
378
400
|
|
|
@@ -643,7 +665,7 @@ export type RelatedConnectionOptions<
|
|
|
643
665
|
? {
|
|
644
666
|
description?: string | false;
|
|
645
667
|
query?: QueryForField<Types, Args, Model['Include'][Field & keyof Model['Include']]>;
|
|
646
|
-
type?: PrismaObjectRef<Model
|
|
668
|
+
type?: PrismaObjectRef<TypesForRelation<Types, Model, Field>>;
|
|
647
669
|
cursor: CursorFromRelation<Model, Field>;
|
|
648
670
|
defaultSize?: number | ((args: ConnectionArgs, ctx: Types['Context']) => number);
|
|
649
671
|
maxSize?: number | ((args: ConnectionArgs, ctx: Types['Context']) => number);
|
package/src/util/get-client.ts
CHANGED
|
@@ -8,9 +8,13 @@ export interface DMMFField {
|
|
|
8
8
|
name: string;
|
|
9
9
|
isRequired: boolean;
|
|
10
10
|
isList: boolean;
|
|
11
|
+
hasDefaultValue: boolean;
|
|
11
12
|
isUnique: boolean;
|
|
12
13
|
isId: boolean;
|
|
13
14
|
documentation?: string;
|
|
15
|
+
relationName?: string;
|
|
16
|
+
relationFromFields?: string[];
|
|
17
|
+
isUpdatedAt?: boolean;
|
|
14
18
|
}
|
|
15
19
|
|
|
16
20
|
interface DMMF {
|