@pothos/plugin-prisma 3.9.0 → 3.12.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 +18 -0
- package/README.md +40 -101
- package/dts/global-types.d.ts +2 -2
- package/dts/global-types.d.ts.map +1 -1
- package/dts/model-loader.d.ts +13 -2
- package/dts/model-loader.d.ts.map +1 -1
- package/dts/types.d.ts +13 -6
- package/dts/types.d.ts.map +1 -1
- package/dts/util/cursors.d.ts +5 -1
- package/dts/util/cursors.d.ts.map +1 -1
- package/dts/util/datamodel.d.ts +5 -1
- package/dts/util/datamodel.d.ts.map +1 -1
- package/dts/util/get-client.d.ts +5 -1
- package/dts/util/get-client.d.ts.map +1 -1
- package/esm/global-types.js.map +1 -1
- package/esm/model-loader.js +88 -3
- package/esm/model-loader.js.map +1 -1
- package/esm/schema-builder.js +23 -14
- package/esm/schema-builder.js.map +1 -1
- package/esm/util/cursors.js +95 -2
- package/esm/util/cursors.js.map +1 -1
- package/esm/util/get-client.js +6 -1
- package/esm/util/get-client.js.map +1 -1
- package/lib/model-loader.js +82 -2
- package/lib/model-loader.js.map +1 -1
- package/lib/schema-builder.js +23 -14
- package/lib/schema-builder.js.map +1 -1
- package/lib/util/cursors.js +98 -2
- package/lib/util/cursors.js.map +1 -1
- package/lib/util/get-client.js +6 -1
- package/lib/util/get-client.js.map +1 -1
- package/package.json +3 -3
- package/src/global-types.ts +3 -1
- package/src/model-loader.ts +144 -3
- package/src/schema-builder.ts +25 -20
- package/src/types.ts +25 -7
- package/src/util/cursors.ts +117 -1
- package/src/util/get-client.ts +12 -8
- package/tsconfig.type.tsbuildinfo +1 -1
package/lib/schema-builder.js
CHANGED
|
@@ -4,6 +4,7 @@ var _core = _interopRequireWildcard(require("@pothos/core"));
|
|
|
4
4
|
var _fieldBuilder = require("./field-builder");
|
|
5
5
|
var _modelLoader = require("./model-loader");
|
|
6
6
|
var _nodeRef = _interopRequireDefault(require("./node-ref"));
|
|
7
|
+
var _cursors = require("./util/cursors");
|
|
7
8
|
var _datamodel = require("./util/datamodel");
|
|
8
9
|
var _getClient = require("./util/get-client");
|
|
9
10
|
var _mapQuery = require("./util/map-query");
|
|
@@ -53,52 +54,60 @@ function _interopRequireWildcard(obj) {
|
|
|
53
54
|
return newObj;
|
|
54
55
|
}
|
|
55
56
|
const schemaBuilderProto = _core.default.prototype;
|
|
56
|
-
schemaBuilderProto.prismaObject = function prismaObject(type, { fields , findUnique , ...options }) {
|
|
57
|
+
schemaBuilderProto.prismaObject = function prismaObject(type, { fields , findUnique , select , include , ...options }) {
|
|
57
58
|
const ref = options.variant ? this.objectRef(options.variant) : (0, _datamodel).getRefFromModel(type, this);
|
|
58
59
|
var _variant, ref1;
|
|
59
60
|
const name = (ref1 = (_variant = options.variant) !== null && _variant !== void 0 ? _variant : options.name) !== null && ref1 !== void 0 ? ref1 : type;
|
|
60
61
|
const fieldMap = (0, _relationMap).getRelationMap((0, _getClient).getDMMF(this)).get(type);
|
|
62
|
+
const idSelection = _modelLoader.ModelLoader.getDefaultIDSelection(ref, type, this);
|
|
61
63
|
ref.name = name;
|
|
62
64
|
this.objectType(ref, {
|
|
63
65
|
...options,
|
|
64
66
|
extensions: {
|
|
65
67
|
...options.extensions,
|
|
66
|
-
pothosPrismaInclude:
|
|
68
|
+
pothosPrismaInclude: include,
|
|
67
69
|
pothosPrismaModel: type,
|
|
68
70
|
pothosPrismaFieldMap: fieldMap,
|
|
69
|
-
pothosPrismaSelect:
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
}
|
|
71
|
+
pothosPrismaSelect: select && {
|
|
72
|
+
...idSelection,
|
|
73
|
+
...select
|
|
74
|
+
},
|
|
75
|
+
pothosPrismaLoader: _modelLoader.ModelLoader.forRef(ref, type, findUnique, this)
|
|
73
76
|
},
|
|
74
77
|
name,
|
|
75
78
|
fields: fields ? ()=>fields(new _fieldBuilder.PrismaObjectFieldBuilder(name, this, type, (0, _relationMap).getRelationMap((0, _getClient).getDMMF(this)).get(type))) : undefined
|
|
76
79
|
});
|
|
77
80
|
return ref;
|
|
78
81
|
};
|
|
79
|
-
schemaBuilderProto.prismaNode = function prismaNode(type, { findUnique , name , variant , ...options }) {
|
|
82
|
+
schemaBuilderProto.prismaNode = function prismaNode(type, { id: { field , resolve: rawResolve , ...idOptions } , findUnique: rawFindUnique , name , variant , ...options }) {
|
|
80
83
|
var _obj, ref;
|
|
84
|
+
const fieldName = field;
|
|
81
85
|
const interfaceRef = (ref = (_obj = this).nodeInterfaceRef) === null || ref === void 0 ? void 0 : ref.call(_obj);
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
}
|
|
86
|
+
const resolve = rawResolve !== null && rawResolve !== void 0 ? rawResolve : (0, _cursors).getDefaultIDSerializer(type, fieldName, this);
|
|
87
|
+
const idParser = fieldName ? (0, _cursors).getDefaultIDParser(type, fieldName, this) : undefined;
|
|
85
88
|
var ref2;
|
|
86
89
|
const typeName = (ref2 = variant !== null && variant !== void 0 ? variant : name) !== null && ref2 !== void 0 ? ref2 : type;
|
|
87
90
|
const nodeRef = new _nodeRef.default(typeName);
|
|
91
|
+
const findUnique = rawFindUnique ? (parent, context)=>rawFindUnique(resolve(parent, context), context) : _modelLoader.ModelLoader.getFindUniqueForField(nodeRef, type, fieldName, this);
|
|
92
|
+
if (!interfaceRef) {
|
|
93
|
+
throw new TypeError('builder.prismaNode requires @pothos/plugin-relay to be installed');
|
|
94
|
+
}
|
|
88
95
|
const extendedOptions = {
|
|
89
96
|
...options,
|
|
90
97
|
variant,
|
|
91
98
|
interfaces: [
|
|
92
99
|
interfaceRef
|
|
93
100
|
],
|
|
94
|
-
findUnique
|
|
101
|
+
findUnique,
|
|
95
102
|
loadWithoutCache: async (id, context, info)=>{
|
|
96
103
|
const query = (0, _mapQuery).queryFromInfo(context, info, typeName);
|
|
97
104
|
const delegate = (0, _datamodel).getDelegateFromModel((0, _getClient).getClient(this, context), type);
|
|
98
105
|
const record = await delegate.findUnique({
|
|
99
106
|
...query,
|
|
100
107
|
rejectOnNotFound: true,
|
|
101
|
-
where:
|
|
108
|
+
where: rawFindUnique ? rawFindUnique(id, context) : {
|
|
109
|
+
[fieldName]: idParser(id)
|
|
110
|
+
}
|
|
102
111
|
});
|
|
103
112
|
(0, _core).brandWithType(record, typeName);
|
|
104
113
|
return record;
|
|
@@ -110,12 +119,12 @@ schemaBuilderProto.prismaNode = function prismaNode(type, { findUnique , name ,
|
|
|
110
119
|
}
|
|
111
120
|
this.configStore.onTypeConfig(ref3, (nodeConfig)=>{
|
|
112
121
|
this.objectField(ref3, 'id', (t)=>t.globalID({
|
|
113
|
-
...
|
|
122
|
+
...idOptions,
|
|
114
123
|
nullable: false,
|
|
115
124
|
args: {},
|
|
116
125
|
resolve: async (parent, args, context, info)=>({
|
|
117
126
|
type: nodeConfig.name,
|
|
118
|
-
id: await
|
|
127
|
+
id: await resolve(parent, context)
|
|
119
128
|
})
|
|
120
129
|
}));
|
|
121
130
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/schema-builder.ts"],"names":["schemaBuilderProto","SchemaBuilder","prototype","prismaObject","type","fields","findUnique","options","ref","variant","objectRef","getRefFromModel","name","fieldMap","getRelationMap","getDMMF","get","objectType","extensions","pothosPrismaInclude","
|
|
1
|
+
{"version":3,"sources":["../src/schema-builder.ts"],"names":["schemaBuilderProto","SchemaBuilder","prototype","prismaObject","type","fields","findUnique","select","include","options","ref","variant","objectRef","getRefFromModel","name","fieldMap","getRelationMap","getDMMF","get","idSelection","ModelLoader","getDefaultIDSelection","objectType","extensions","pothosPrismaInclude","pothosPrismaModel","pothosPrismaFieldMap","pothosPrismaSelect","pothosPrismaLoader","forRef","PrismaObjectFieldBuilder","undefined","prismaNode","id","field","resolve","rawResolve","idOptions","rawFindUnique","fieldName","interfaceRef","nodeInterfaceRef","getDefaultIDSerializer","idParser","getDefaultIDParser","typeName","nodeRef","PrismaNodeRef","parent","context","getFindUniqueForField","TypeError","extendedOptions","interfaces","loadWithoutCache","info","query","queryFromInfo","delegate","getDelegateFromModel","getClient","record","rejectOnNotFound","where","brandWithType","configStore","addInterfaces","onTypeConfig","nodeConfig","objectField","t","globalID","nullable","args","associateRefWithName"],"mappings":"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"}
|
package/lib/util/cursors.js
CHANGED
|
@@ -5,10 +5,15 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
exports.formatCursorChunk = formatCursorChunk;
|
|
6
6
|
exports.formatCursor = formatCursor;
|
|
7
7
|
exports.parseRawCursor = parseRawCursor;
|
|
8
|
+
exports.parseID = parseID;
|
|
9
|
+
exports.getDefaultIDSerializer = getDefaultIDSerializer;
|
|
10
|
+
exports.getDefaultIDParser = getDefaultIDParser;
|
|
11
|
+
exports.serializeID = serializeID;
|
|
8
12
|
exports.parseCompositeCursor = parseCompositeCursor;
|
|
9
13
|
exports.prismaCursorConnectionQuery = prismaCursorConnectionQuery;
|
|
10
14
|
exports.wrapConnectionResult = wrapConnectionResult;
|
|
11
15
|
exports.resolvePrismaCursorConnection = resolvePrismaCursorConnection;
|
|
16
|
+
var _datamodel = require("./datamodel");
|
|
12
17
|
const DEFAULT_MAX_SIZE = 100;
|
|
13
18
|
const DEFAULT_SIZE = 20;
|
|
14
19
|
function formatCursorChunk(value) {
|
|
@@ -55,6 +60,97 @@ function parseRawCursor(cursor) {
|
|
|
55
60
|
throw new Error(`Invalid cursor: ${cursor}`);
|
|
56
61
|
}
|
|
57
62
|
}
|
|
63
|
+
function parseID(id, dataType) {
|
|
64
|
+
if (!id) {
|
|
65
|
+
return id;
|
|
66
|
+
}
|
|
67
|
+
switch(dataType){
|
|
68
|
+
case 'String':
|
|
69
|
+
return id;
|
|
70
|
+
case 'Int':
|
|
71
|
+
return Number.parseInt(id, 10);
|
|
72
|
+
case 'BigInt':
|
|
73
|
+
// eslint-disable-next-line node/no-unsupported-features/es-builtins
|
|
74
|
+
return BigInt(id);
|
|
75
|
+
case 'Boolean':
|
|
76
|
+
return id !== 'false';
|
|
77
|
+
case 'Float':
|
|
78
|
+
case 'Decimal':
|
|
79
|
+
return Number.parseFloat(id);
|
|
80
|
+
case 'DateTime':
|
|
81
|
+
return new Date(id);
|
|
82
|
+
case 'Json':
|
|
83
|
+
return JSON.parse(id);
|
|
84
|
+
case 'Byte':
|
|
85
|
+
return Buffer.from(id, 'base64');
|
|
86
|
+
default:
|
|
87
|
+
return id;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
function getDefaultIDSerializer(modelName, fieldName, builder) {
|
|
91
|
+
var ref, ref1;
|
|
92
|
+
const model = (0, _datamodel).getModel(modelName, builder);
|
|
93
|
+
const field = model.fields.find((f)=>f.name === fieldName);
|
|
94
|
+
if (field) {
|
|
95
|
+
return (parent)=>serializeID(parent[fieldName], field.type);
|
|
96
|
+
}
|
|
97
|
+
var ref2;
|
|
98
|
+
if (((ref2 = (ref = model.primaryKey) === null || ref === void 0 ? void 0 : ref.name) !== null && ref2 !== void 0 ? ref2 : (ref1 = model.primaryKey) === null || ref1 === void 0 ? void 0 : ref1.fields.join('_')) === fieldName) {
|
|
99
|
+
const fields = model.primaryKey.fields.map((n)=>model.fields.find((f)=>f.name === n));
|
|
100
|
+
return (parent)=>JSON.stringify(fields.map((f)=>serializeID(parent[f.name], f.kind)));
|
|
101
|
+
}
|
|
102
|
+
var _name;
|
|
103
|
+
const index = model.uniqueIndexes.find((idx)=>((_name = idx.name) !== null && _name !== void 0 ? _name : idx.fields.join('_')) === fieldName);
|
|
104
|
+
if (index) {
|
|
105
|
+
const fields = index.fields.map((n)=>model.fields.find((f)=>f.name === n));
|
|
106
|
+
return (parent)=>JSON.stringify(fields.map((f)=>serializeID(parent[f.name], f.kind)));
|
|
107
|
+
}
|
|
108
|
+
throw new Error(`Unable to find ${fieldName} for model ${modelName}`);
|
|
109
|
+
}
|
|
110
|
+
function getDefaultIDParser(modelName, fieldName, builder) {
|
|
111
|
+
var ref, ref3;
|
|
112
|
+
if (!fieldName) {
|
|
113
|
+
throw new Error('Missing field name');
|
|
114
|
+
}
|
|
115
|
+
const model = (0, _datamodel).getModel(modelName, builder);
|
|
116
|
+
const field = model.fields.find((f)=>f.name === fieldName);
|
|
117
|
+
if (field) {
|
|
118
|
+
return (id)=>parseID(id, field.type);
|
|
119
|
+
}
|
|
120
|
+
var _name;
|
|
121
|
+
const index = model.uniqueIndexes.find((idx)=>((_name = idx.name) !== null && _name !== void 0 ? _name : idx.fields.join('_')) === fieldName);
|
|
122
|
+
let fields;
|
|
123
|
+
var ref4;
|
|
124
|
+
if (((ref4 = (ref = model.primaryKey) === null || ref === void 0 ? void 0 : ref.name) !== null && ref4 !== void 0 ? ref4 : (ref3 = model.primaryKey) === null || ref3 === void 0 ? void 0 : ref3.fields.join('_')) === fieldName) {
|
|
125
|
+
fields = model.primaryKey.fields.map((n)=>model.fields.find((f)=>f.name === n));
|
|
126
|
+
} else if (index) {
|
|
127
|
+
fields = index.fields.map((n)=>model.fields.find((f)=>f.name === n));
|
|
128
|
+
}
|
|
129
|
+
if (!fields) {
|
|
130
|
+
throw new Error(`Unable to find ${fieldName} for model ${modelName}`);
|
|
131
|
+
}
|
|
132
|
+
return (id)=>{
|
|
133
|
+
const parts = JSON.parse(id);
|
|
134
|
+
if (!Array.isArray(parts)) {
|
|
135
|
+
throw new TypeError(`Invalid id received for ${fieldName} of ${modelName}`);
|
|
136
|
+
}
|
|
137
|
+
const result = {};
|
|
138
|
+
for(let i = 0; i < fields.length; i += 1){
|
|
139
|
+
result[fields[i].name] = parseID(parts[i], fields[i].type);
|
|
140
|
+
}
|
|
141
|
+
return result;
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
function serializeID(id, dataType) {
|
|
145
|
+
switch(dataType){
|
|
146
|
+
case 'Json':
|
|
147
|
+
return JSON.stringify(id);
|
|
148
|
+
case 'Byte':
|
|
149
|
+
return id.toString('base64');
|
|
150
|
+
default:
|
|
151
|
+
return String(id);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
58
154
|
function parseCompositeCursor(fields) {
|
|
59
155
|
return (cursor)=>{
|
|
60
156
|
const parsed = parseRawCursor(cursor);
|
|
@@ -103,7 +199,7 @@ function prismaCursorConnectionQuery({ args: { before , after , first , last }
|
|
|
103
199
|
};
|
|
104
200
|
}
|
|
105
201
|
function wrapConnectionResult(results, args, take, cursor, totalCount) {
|
|
106
|
-
var ref,
|
|
202
|
+
var ref, ref5;
|
|
107
203
|
const gotFullResults = results.length === Math.abs(take);
|
|
108
204
|
const hasNextPage = args.before ? true : gotFullResults;
|
|
109
205
|
const hasPreviousPage = args.after ? true : args.before ? gotFullResults : false;
|
|
@@ -117,7 +213,7 @@ function wrapConnectionResult(results, args, take, cursor, totalCount) {
|
|
|
117
213
|
edges,
|
|
118
214
|
pageInfo: {
|
|
119
215
|
startCursor: (ref = edges[0]) === null || ref === void 0 ? void 0 : ref.cursor,
|
|
120
|
-
endCursor: (
|
|
216
|
+
endCursor: (ref5 = edges[edges.length - 1]) === null || ref5 === void 0 ? void 0 : ref5.cursor,
|
|
121
217
|
hasPreviousPage,
|
|
122
218
|
hasNextPage
|
|
123
219
|
}
|
package/lib/util/cursors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/util/cursors.ts"],"names":["formatCursorChunk","formatCursor","parseRawCursor","parseCompositeCursor","prismaCursorConnectionQuery","wrapConnectionResult","resolvePrismaCursorConnection","DEFAULT_MAX_SIZE","DEFAULT_SIZE","value","Date","String","Number","TypeError","fields","Buffer","from","toString","JSON","stringify","map","name","cursor","decoded","type","match","parseInt","parse","Error","parsed","Array","isArray","record","forEach","field","i","args","before","after","first","last","maxSize","defaultSize","parseCursor","take","Math","min","skip","results","totalCount","edges","gotFullResults","length","abs","hasNextPage","hasPreviousPage","nodes","slice","index","node","pageInfo","startCursor","endCursor","options","resolve","query"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/util/cursors.ts"],"names":["formatCursorChunk","formatCursor","parseRawCursor","parseID","getDefaultIDSerializer","getDefaultIDParser","serializeID","parseCompositeCursor","prismaCursorConnectionQuery","wrapConnectionResult","resolvePrismaCursorConnection","DEFAULT_MAX_SIZE","DEFAULT_SIZE","value","Date","String","Number","TypeError","fields","Buffer","from","toString","JSON","stringify","map","name","cursor","decoded","type","match","parseInt","parse","Error","id","dataType","BigInt","parseFloat","modelName","fieldName","builder","model","getModel","field","find","f","parent","primaryKey","join","n","kind","idx","index","uniqueIndexes","parts","Array","isArray","result","i","length","parsed","record","forEach","args","before","after","first","last","maxSize","defaultSize","parseCursor","take","Math","min","skip","results","totalCount","edges","gotFullResults","abs","hasNextPage","hasPreviousPage","nodes","slice","node","pageInfo","startCursor","endCursor","options","resolve","query"],"mappings":"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"}
|
package/lib/util/get-client.js
CHANGED
|
@@ -13,7 +13,12 @@ function getClient(builder, context) {
|
|
|
13
13
|
return builder.options.prisma.client;
|
|
14
14
|
}
|
|
15
15
|
function getDMMF(builder) {
|
|
16
|
-
|
|
16
|
+
if ('dmmf' in builder.options.prisma && builder.options.prisma.dmmf) {
|
|
17
|
+
return builder.options.prisma.dmmf;
|
|
18
|
+
}
|
|
19
|
+
const client = builder.options.prisma.client;
|
|
20
|
+
var __baseDmmf;
|
|
21
|
+
return (__baseDmmf = client._baseDmmf) !== null && __baseDmmf !== void 0 ? __baseDmmf : client._dmmf;
|
|
17
22
|
}
|
|
18
23
|
|
|
19
24
|
//# sourceMappingURL=get-client.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/util/get-client.ts"],"names":["getClient","getDMMF","prismaClientCache","createContextCache","builder","context","options","prisma","client","dmmf","_dmmf"],"mappings":"AACA;;;;
|
|
1
|
+
{"version":3,"sources":["../../src/util/get-client.ts"],"names":["getClient","getDMMF","prismaClientCache","createContextCache","builder","context","options","prisma","client","dmmf","_baseDmmf","_dmmf"],"mappings":"AACA;;;;QAoCgBA,SAAS,GAATA,SAAS;QAWTC,OAAO,GAAPA,OAAO;AA/CyB,IAAA,KAAc,WAAd,cAAc,CAAA;AA2B9D,MAAMC,iBAAiB,GAAGC,CAAAA,GAAAA,KAAkB,AAO3C,CAAA,mBAP2C,CAC1C,CAA4BC,OAA+C,GACzED,CAAAA,GAAAA,KAAkB,AAIjB,CAAA,mBAJiB,CAAC,CAACE,OAAe,GACjC,OAAOD,OAAO,CAACE,OAAO,CAACC,MAAM,CAACC,MAAM,KAAK,UAAU,GAC/CJ,OAAO,CAACE,OAAO,CAACC,MAAM,CAACC,MAAM,CAACH,OAAO,CAAC,GACtCD,OAAO,CAACE,OAAO,CAACC,MAAM,CAACC,MAAM,CAClC,CACJ,AAAC;AAEK,SAASR,SAAS,CACvBI,OAA+C,EAC/CC,OAAyB,EACX;IACd,IAAI,OAAOD,OAAO,CAACE,OAAO,CAACC,MAAM,CAACC,MAAM,KAAK,UAAU,EAAE;QACvD,OAAON,iBAAiB,CAACE,OAAO,CAAC,CAACC,OAAO,CAAC,CAAC;KAC5C;IAED,OAAOD,OAAO,CAACE,OAAO,CAACC,MAAM,CAACC,MAAM,CAAC;CACtC;AAEM,SAASP,OAAO,CACrBG,OAA+C,EACzC;IACN,IAAI,MAAM,IAAIA,OAAO,CAACE,OAAO,CAACC,MAAM,IAAIH,OAAO,CAACE,OAAO,CAACC,MAAM,CAACE,IAAI,EAAE;QACnE,OAAOL,OAAO,CAACE,OAAO,CAACC,MAAM,CAACE,IAAI,CAAS;KAC5C;IAED,MAAMD,MAAM,GAAGJ,OAAO,CAACE,OAAO,CAACC,MAAM,CAACC,MAAM,AAG3C,AAAC;QAEKA,UAAgB;IAAvB,OAAOA,CAAAA,UAAgB,GAAhBA,MAAM,CAACE,SAAS,cAAhBF,UAAgB,cAAhBA,UAAgB,GAAIA,MAAM,CAACG,KAAK,CAAC;CACzC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pothos/plugin-prisma",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.12.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",
|
|
@@ -49,9 +49,9 @@
|
|
|
49
49
|
"typescript": ">=4.7.2"
|
|
50
50
|
},
|
|
51
51
|
"devDependencies": {
|
|
52
|
-
"@pothos/core": "3.
|
|
52
|
+
"@pothos/core": "3.12.0",
|
|
53
53
|
"@pothos/plugin-errors": "3.4.2",
|
|
54
|
-
"@pothos/plugin-relay": "3.
|
|
54
|
+
"@pothos/plugin-relay": "3.13.0",
|
|
55
55
|
"@pothos/plugin-scope-auth": "3.9.1",
|
|
56
56
|
"@pothos/test-utils": "1.2.2",
|
|
57
57
|
"@prisma/client": "^3.14.0",
|
package/src/global-types.ts
CHANGED
|
@@ -106,6 +106,7 @@ declare global {
|
|
|
106
106
|
Interfaces extends InterfaceParam<Types>[] = [],
|
|
107
107
|
Include = unknown,
|
|
108
108
|
Select = unknown,
|
|
109
|
+
UniqueField = unknown,
|
|
109
110
|
>(
|
|
110
111
|
name: Name,
|
|
111
112
|
options: PrismaNodeOptions<
|
|
@@ -117,7 +118,8 @@ declare global {
|
|
|
117
118
|
ShapeFromSelection<
|
|
118
119
|
PrismaModelTypes & Types['PrismaTypes'][Name],
|
|
119
120
|
{ select: Select; include: Include }
|
|
120
|
-
|
|
121
|
+
>,
|
|
122
|
+
UniqueField
|
|
121
123
|
>,
|
|
122
124
|
) => PrismaNodeRef<
|
|
123
125
|
Types['PrismaTypes'][Name] & PrismaModelTypes,
|
package/src/model-loader.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { createContextCache, SchemaTypes } from '@pothos/core';
|
|
2
|
-
import { getDelegateFromModel } from './util/datamodel';
|
|
1
|
+
import { createContextCache, ObjectRef, SchemaTypes } from '@pothos/core';
|
|
2
|
+
import { getDelegateFromModel, getModel } from './util/datamodel';
|
|
3
3
|
import { getClient } from './util/get-client';
|
|
4
4
|
import {
|
|
5
5
|
mergeSelection,
|
|
@@ -32,15 +32,156 @@ export class ModelLoader {
|
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
static forRef<Types extends SchemaTypes>(
|
|
35
|
+
ref: ObjectRef<unknown>,
|
|
35
36
|
modelName: string,
|
|
36
37
|
findUnique: (args: unknown, ctx: {}) => unknown,
|
|
37
38
|
builder: PothosSchemaTypes.SchemaBuilder<Types>,
|
|
38
39
|
) {
|
|
39
40
|
return createContextCache(
|
|
40
|
-
(model) =>
|
|
41
|
+
(model) =>
|
|
42
|
+
new ModelLoader(
|
|
43
|
+
model,
|
|
44
|
+
builder as never,
|
|
45
|
+
modelName,
|
|
46
|
+
findUnique === null
|
|
47
|
+
? () => {
|
|
48
|
+
throw new Error(`Missing findUnique for ${ref.name}`);
|
|
49
|
+
}
|
|
50
|
+
: findUnique ?? this.getDefaultFindUnique(ref, modelName, builder),
|
|
51
|
+
),
|
|
41
52
|
);
|
|
42
53
|
}
|
|
43
54
|
|
|
55
|
+
static getFindUnique(
|
|
56
|
+
findBy:
|
|
57
|
+
| {
|
|
58
|
+
name: string | null;
|
|
59
|
+
fields: string[];
|
|
60
|
+
}
|
|
61
|
+
| string,
|
|
62
|
+
): (model: Record<string, unknown>) => {} {
|
|
63
|
+
if (typeof findBy === 'string') {
|
|
64
|
+
return (parent) => ({ [findBy]: parent[findBy] });
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
const { fields, name: primaryKeyName } = findBy;
|
|
68
|
+
|
|
69
|
+
return (parent) => {
|
|
70
|
+
const primaryKey: Record<string, unknown> = {};
|
|
71
|
+
|
|
72
|
+
for (const key of fields) {
|
|
73
|
+
primaryKey[key] = parent[key];
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
return { [primaryKeyName ?? fields.join('_')]: primaryKey };
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
static getDefaultFindBy<Types extends SchemaTypes>(
|
|
81
|
+
ref: ObjectRef<unknown>,
|
|
82
|
+
modelName: string,
|
|
83
|
+
builder: PothosSchemaTypes.SchemaBuilder<Types>,
|
|
84
|
+
) {
|
|
85
|
+
const model = getModel(modelName, builder);
|
|
86
|
+
const idField = model.fields.find((field) => field.isId);
|
|
87
|
+
const uniqueField = model.fields.find((field) => field.isRequired && field.isUnique);
|
|
88
|
+
const uniqueIndex = model.uniqueIndexes.find((idx) =>
|
|
89
|
+
idx.fields.every((field) => model.fields.find((f) => f.name === field)?.isRequired),
|
|
90
|
+
);
|
|
91
|
+
|
|
92
|
+
let findBy:
|
|
93
|
+
| {
|
|
94
|
+
name: string | null;
|
|
95
|
+
fields: string[];
|
|
96
|
+
}
|
|
97
|
+
| string
|
|
98
|
+
| undefined;
|
|
99
|
+
|
|
100
|
+
if (model.primaryKey) {
|
|
101
|
+
findBy = model.primaryKey;
|
|
102
|
+
} else if (idField) {
|
|
103
|
+
findBy = idField.name;
|
|
104
|
+
} else if (uniqueField) {
|
|
105
|
+
findBy = uniqueField.name;
|
|
106
|
+
} else if (uniqueIndex) {
|
|
107
|
+
findBy = uniqueIndex;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
if (!findBy) {
|
|
111
|
+
throw new Error(`Missing findUnique for ${ref.name}`);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
return findBy;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
static getDefaultFindUnique<Types extends SchemaTypes>(
|
|
118
|
+
ref: ObjectRef<unknown>,
|
|
119
|
+
modelName: string,
|
|
120
|
+
builder: PothosSchemaTypes.SchemaBuilder<Types>,
|
|
121
|
+
): (model: Record<string, unknown>) => {} {
|
|
122
|
+
const findBy = this.getDefaultFindBy(ref, modelName, builder);
|
|
123
|
+
|
|
124
|
+
return this.getFindUnique(findBy);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
static getDefaultIDSelection<Types extends SchemaTypes>(
|
|
128
|
+
ref: ObjectRef<unknown>,
|
|
129
|
+
modelName: string,
|
|
130
|
+
builder: PothosSchemaTypes.SchemaBuilder<Types>,
|
|
131
|
+
): Record<string, boolean> {
|
|
132
|
+
const findBy = this.getDefaultFindBy(ref, modelName, builder);
|
|
133
|
+
|
|
134
|
+
if (typeof findBy === 'string') {
|
|
135
|
+
return { [findBy]: true };
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
const result: Record<string, boolean> = {};
|
|
139
|
+
|
|
140
|
+
for (const field of findBy.fields) {
|
|
141
|
+
result[field] = true;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
return result;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
static getFindUniqueForField<Types extends SchemaTypes>(
|
|
148
|
+
ref: ObjectRef<unknown>,
|
|
149
|
+
modelName: string,
|
|
150
|
+
fieldName: string,
|
|
151
|
+
builder: PothosSchemaTypes.SchemaBuilder<Types>,
|
|
152
|
+
): (model: Record<string, unknown>) => {} {
|
|
153
|
+
const model = getModel(modelName, builder);
|
|
154
|
+
|
|
155
|
+
const uniqueIndex = model.uniqueIndexes.find(
|
|
156
|
+
(idx) => (idx.name ?? idx.fields.join('_')) === fieldName,
|
|
157
|
+
);
|
|
158
|
+
|
|
159
|
+
let findBy:
|
|
160
|
+
| {
|
|
161
|
+
name: string | null;
|
|
162
|
+
fields: string[];
|
|
163
|
+
}
|
|
164
|
+
| string
|
|
165
|
+
| undefined;
|
|
166
|
+
|
|
167
|
+
if (model.fields.some((field) => field.name === fieldName)) {
|
|
168
|
+
findBy = fieldName;
|
|
169
|
+
} else if (
|
|
170
|
+
model.primaryKey &&
|
|
171
|
+
(model.primaryKey?.name ?? model.primaryKey?.fields.join('_')) === fieldName
|
|
172
|
+
) {
|
|
173
|
+
findBy = model.primaryKey;
|
|
174
|
+
} else if (uniqueIndex) {
|
|
175
|
+
findBy = uniqueIndex;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
if (!findBy) {
|
|
179
|
+
throw new Error(`Unable to find field or index for ${fieldName} of ${ref.name}`);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
return this.getFindUnique(findBy);
|
|
183
|
+
}
|
|
184
|
+
|
|
44
185
|
async loadSelection(selection: SelectionState, context: object) {
|
|
45
186
|
const query = selectionToQuery(selection);
|
|
46
187
|
|
package/src/schema-builder.ts
CHANGED
|
@@ -11,6 +11,7 @@ import { PrismaObjectFieldBuilder } from './field-builder';
|
|
|
11
11
|
import { ModelLoader } from './model-loader';
|
|
12
12
|
import PrismaNodeRef from './node-ref';
|
|
13
13
|
import { PrismaModelTypes, PrismaNodeOptions } from './types';
|
|
14
|
+
import { getDefaultIDParser, getDefaultIDSerializer } from './util/cursors';
|
|
14
15
|
import { getDelegateFromModel, getRefFromModel } from './util/datamodel';
|
|
15
16
|
import { getClient, getDMMF } from './util/get-client';
|
|
16
17
|
import { queryFromInfo } from './util/map-query';
|
|
@@ -18,10 +19,14 @@ import { getRelationMap } from './util/relation-map';
|
|
|
18
19
|
|
|
19
20
|
const schemaBuilderProto = SchemaBuilder.prototype as PothosSchemaTypes.SchemaBuilder<SchemaTypes>;
|
|
20
21
|
|
|
21
|
-
schemaBuilderProto.prismaObject = function prismaObject(
|
|
22
|
+
schemaBuilderProto.prismaObject = function prismaObject(
|
|
23
|
+
type,
|
|
24
|
+
{ fields, findUnique, select, include, ...options },
|
|
25
|
+
) {
|
|
22
26
|
const ref = options.variant ? this.objectRef(options.variant) : getRefFromModel(type, this);
|
|
23
27
|
const name = options.variant ?? options.name ?? type;
|
|
24
28
|
const fieldMap = getRelationMap(getDMMF(this)).get(type)!;
|
|
29
|
+
const idSelection = ModelLoader.getDefaultIDSelection(ref, type, this);
|
|
25
30
|
|
|
26
31
|
ref.name = name;
|
|
27
32
|
|
|
@@ -29,18 +34,11 @@ schemaBuilderProto.prismaObject = function prismaObject(type, { fields, findUniq
|
|
|
29
34
|
...(options as {}),
|
|
30
35
|
extensions: {
|
|
31
36
|
...options.extensions,
|
|
32
|
-
pothosPrismaInclude:
|
|
37
|
+
pothosPrismaInclude: include,
|
|
33
38
|
pothosPrismaModel: type,
|
|
34
39
|
pothosPrismaFieldMap: fieldMap,
|
|
35
|
-
pothosPrismaSelect:
|
|
36
|
-
pothosPrismaLoader: ModelLoader.forRef(
|
|
37
|
-
type,
|
|
38
|
-
(findUnique as never) ||
|
|
39
|
-
(() => {
|
|
40
|
-
throw new Error(`Missing findUnique for ${ref.name}`);
|
|
41
|
-
}),
|
|
42
|
-
this,
|
|
43
|
-
),
|
|
40
|
+
pothosPrismaSelect: select && { ...idSelection, ...(select as {}) },
|
|
41
|
+
pothosPrismaLoader: ModelLoader.forRef(ref, type, findUnique as never, this),
|
|
44
42
|
},
|
|
45
43
|
name,
|
|
46
44
|
fields: fields
|
|
@@ -65,26 +63,33 @@ schemaBuilderProto.prismaNode = function prismaNode(
|
|
|
65
63
|
},
|
|
66
64
|
type: keyof SchemaTypes['PrismaTypes'],
|
|
67
65
|
{
|
|
68
|
-
|
|
66
|
+
id: { field, resolve: rawResolve, ...idOptions },
|
|
67
|
+
findUnique: rawFindUnique,
|
|
69
68
|
name,
|
|
70
69
|
variant,
|
|
71
70
|
...options
|
|
72
|
-
}: PrismaNodeOptions<SchemaTypes, PrismaModelTypes, [], never, {}, {}>,
|
|
71
|
+
}: PrismaNodeOptions<SchemaTypes, PrismaModelTypes, [], never, {}, {}, undefined>,
|
|
73
72
|
) {
|
|
73
|
+
const fieldName = field as unknown as string;
|
|
74
74
|
const interfaceRef = this.nodeInterfaceRef?.();
|
|
75
|
+
const resolve = rawResolve ?? getDefaultIDSerializer(type, fieldName, this);
|
|
76
|
+
const idParser = fieldName ? getDefaultIDParser(type, fieldName, this) : undefined;
|
|
77
|
+
const typeName = variant ?? name ?? type;
|
|
78
|
+
const nodeRef = new PrismaNodeRef(typeName);
|
|
79
|
+
const findUnique = rawFindUnique
|
|
80
|
+
? (parent: unknown, context: {}) =>
|
|
81
|
+
rawFindUnique(resolve(parent as never, context) as string, context)
|
|
82
|
+
: ModelLoader.getFindUniqueForField(nodeRef, type, fieldName, this);
|
|
75
83
|
|
|
76
84
|
if (!interfaceRef) {
|
|
77
85
|
throw new TypeError('builder.prismaNode requires @pothos/plugin-relay to be installed');
|
|
78
86
|
}
|
|
79
87
|
|
|
80
|
-
const typeName = variant ?? name ?? type;
|
|
81
|
-
const nodeRef = new PrismaNodeRef(typeName);
|
|
82
88
|
const extendedOptions = {
|
|
83
89
|
...options,
|
|
84
90
|
variant,
|
|
85
91
|
interfaces: [interfaceRef],
|
|
86
|
-
findUnique
|
|
87
|
-
findUnique(options.id.resolve(parent as never, context) as string, context),
|
|
92
|
+
findUnique,
|
|
88
93
|
loadWithoutCache: async (
|
|
89
94
|
id: string,
|
|
90
95
|
context: SchemaTypes['Context'],
|
|
@@ -95,7 +100,7 @@ schemaBuilderProto.prismaNode = function prismaNode(
|
|
|
95
100
|
const record = await delegate.findUnique({
|
|
96
101
|
...query,
|
|
97
102
|
rejectOnNotFound: true,
|
|
98
|
-
where:
|
|
103
|
+
where: rawFindUnique ? rawFindUnique(id, context) : { [fieldName]: idParser!(id) },
|
|
99
104
|
} as never);
|
|
100
105
|
|
|
101
106
|
brandWithType(record, typeName as OutputType<SchemaTypes>);
|
|
@@ -117,7 +122,7 @@ schemaBuilderProto.prismaNode = function prismaNode(
|
|
|
117
122
|
globalID: (options: Record<string, unknown>) => FieldRef<unknown>;
|
|
118
123
|
}
|
|
119
124
|
).globalID({
|
|
120
|
-
...
|
|
125
|
+
...idOptions,
|
|
121
126
|
nullable: false,
|
|
122
127
|
args: {},
|
|
123
128
|
resolve: async (
|
|
@@ -127,7 +132,7 @@ schemaBuilderProto.prismaNode = function prismaNode(
|
|
|
127
132
|
info: GraphQLResolveInfo,
|
|
128
133
|
) => ({
|
|
129
134
|
type: nodeConfig.name,
|
|
130
|
-
id: await
|
|
135
|
+
id: await resolve(parent, context),
|
|
131
136
|
}),
|
|
132
137
|
}),
|
|
133
138
|
);
|