@pothos/plugin-prisma 0.17.2 → 3.0.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 +22 -0
- package/README.md +403 -308
- package/esm/field-builder.js +11 -13
- package/esm/field-builder.js.map +1 -1
- package/esm/generator.js +4 -0
- package/esm/generator.js.map +1 -1
- package/esm/global-types.d.ts +23 -5
- package/esm/global-types.d.ts.map +1 -1
- package/esm/index.d.ts +4 -1
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +46 -1
- package/esm/index.js.map +1 -1
- package/esm/model-loader.d.ts +5 -6
- package/esm/model-loader.d.ts.map +1 -1
- package/esm/model-loader.js +18 -78
- package/esm/model-loader.js.map +1 -1
- package/esm/prisma-field-builder.d.ts +25 -6
- package/esm/prisma-field-builder.d.ts.map +1 -1
- package/esm/prisma-field-builder.js +88 -119
- package/esm/prisma-field-builder.js.map +1 -1
- package/esm/schema-builder.js +15 -4
- package/esm/schema-builder.js.map +1 -1
- package/esm/types.d.ts +73 -77
- package/esm/types.d.ts.map +1 -1
- package/esm/types.js +1 -0
- package/esm/types.js.map +1 -1
- package/esm/{cursors.d.ts → util/cursors.d.ts} +10 -8
- package/esm/util/cursors.d.ts.map +1 -0
- package/esm/{cursors.js → util/cursors.js} +34 -13
- package/esm/util/cursors.js.map +1 -0
- package/{lib/refs.d.ts → esm/util/datamodel.d.ts} +9 -8
- package/esm/util/datamodel.d.ts.map +1 -0
- package/esm/{refs.js → util/datamodel.js} +27 -30
- package/esm/util/datamodel.js.map +1 -0
- package/esm/util/deep-equal.d.ts +2 -0
- package/esm/util/deep-equal.d.ts.map +1 -0
- package/esm/util/deep-equal.js +39 -0
- package/esm/util/deep-equal.js.map +1 -0
- package/esm/util/loader-map.d.ts +6 -0
- package/esm/util/loader-map.d.ts.map +1 -0
- package/esm/{loader-map.js → util/loader-map.js} +10 -12
- package/esm/util/loader-map.js.map +1 -0
- package/esm/util/map-query.d.ts +6 -0
- package/esm/util/map-query.d.ts.map +1 -0
- package/esm/util/map-query.js +169 -0
- package/esm/util/map-query.js.map +1 -0
- package/esm/util/relation-map.d.ts +9 -0
- package/esm/util/relation-map.d.ts.map +1 -0
- package/esm/util/relation-map.js +20 -0
- package/esm/util/relation-map.js.map +1 -0
- package/esm/util/selections.d.ts +20 -0
- package/esm/util/selections.d.ts.map +1 -0
- package/esm/util/selections.js +139 -0
- package/esm/util/selections.js.map +1 -0
- package/lib/field-builder.js +20 -18
- package/lib/field-builder.js.map +1 -1
- package/lib/generator.js +9 -1
- package/lib/generator.js.map +1 -1
- package/lib/global-types.d.ts +23 -5
- package/lib/global-types.d.ts.map +1 -1
- package/lib/index.d.ts +4 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +50 -1
- package/lib/index.js.map +1 -1
- package/lib/model-loader.d.ts +5 -6
- package/lib/model-loader.d.ts.map +1 -1
- package/lib/model-loader.js +19 -79
- package/lib/model-loader.js.map +1 -1
- package/lib/prisma-field-builder.d.ts +25 -6
- package/lib/prisma-field-builder.d.ts.map +1 -1
- package/lib/prisma-field-builder.js +92 -123
- package/lib/prisma-field-builder.js.map +1 -1
- package/lib/schema-builder.js +23 -8
- package/lib/schema-builder.js.map +1 -1
- package/lib/types.d.ts +73 -77
- package/lib/types.d.ts.map +1 -1
- package/lib/types.js +2 -0
- package/lib/types.js.map +1 -1
- package/lib/{cursors.d.ts → util/cursors.d.ts} +10 -8
- package/lib/util/cursors.d.ts.map +1 -0
- package/lib/{cursors.js → util/cursors.js} +39 -14
- package/lib/util/cursors.js.map +1 -0
- package/{esm/refs.d.ts → lib/util/datamodel.d.ts} +9 -8
- package/lib/util/datamodel.d.ts.map +1 -0
- package/lib/{refs.js → util/datamodel.js} +32 -35
- package/lib/util/datamodel.js.map +1 -0
- package/lib/util/deep-equal.d.ts +2 -0
- package/lib/util/deep-equal.d.ts.map +1 -0
- package/lib/util/deep-equal.js +43 -0
- package/lib/util/deep-equal.js.map +1 -0
- package/lib/util/loader-map.d.ts +6 -0
- package/lib/util/loader-map.d.ts.map +1 -0
- package/lib/{loader-map.js → util/loader-map.js} +10 -12
- package/lib/util/loader-map.js.map +1 -0
- package/lib/util/map-query.d.ts +6 -0
- package/lib/util/map-query.d.ts.map +1 -0
- package/lib/util/map-query.js +175 -0
- package/lib/util/map-query.js.map +1 -0
- package/lib/util/relation-map.d.ts +9 -0
- package/lib/util/relation-map.d.ts.map +1 -0
- package/lib/util/relation-map.js +24 -0
- package/lib/util/relation-map.js.map +1 -0
- package/lib/util/selections.d.ts +20 -0
- package/lib/util/selections.d.ts.map +1 -0
- package/lib/util/selections.js +148 -0
- package/lib/util/selections.js.map +1 -0
- package/package.json +8 -8
- package/src/field-builder.ts +12 -12
- package/src/generator.ts +18 -0
- package/src/global-types.ts +59 -12
- package/src/index.ts +75 -1
- package/src/model-loader.ts +27 -106
- package/src/prisma-field-builder.ts +199 -147
- package/src/schema-builder.ts +29 -7
- package/src/types.ts +149 -102
- package/src/{cursors.ts → util/cursors.ts} +45 -20
- package/src/{refs.ts → util/datamodel.ts} +36 -40
- package/src/util/deep-equal.ts +51 -0
- package/src/{loader-map.ts → util/loader-map.ts} +13 -13
- package/src/util/map-query.ts +327 -0
- package/src/util/relation-map.ts +36 -0
- package/src/util/selections.ts +192 -0
- package/esm/cursors.d.ts.map +0 -1
- package/esm/cursors.js.map +0 -1
- package/esm/loader-map.d.ts +0 -6
- package/esm/loader-map.d.ts.map +0 -1
- package/esm/loader-map.js.map +0 -1
- package/esm/refs.d.ts.map +0 -1
- package/esm/refs.js.map +0 -1
- package/esm/util/index.d.ts +0 -5
- package/esm/util/index.d.ts.map +0 -1
- package/esm/util/index.js +0 -16
- package/esm/util/index.js.map +0 -1
- package/esm/util/map-includes.d.ts +0 -6
- package/esm/util/map-includes.d.ts.map +0 -1
- package/esm/util/map-includes.js +0 -184
- package/esm/util/map-includes.js.map +0 -1
- package/esm/util/merge-includes.d.ts +0 -3
- package/esm/util/merge-includes.d.ts.map +0 -1
- package/esm/util/merge-includes.js +0 -91
- package/esm/util/merge-includes.js.map +0 -1
- package/lib/cursors.d.ts.map +0 -1
- package/lib/cursors.js.map +0 -1
- package/lib/loader-map.d.ts +0 -6
- package/lib/loader-map.d.ts.map +0 -1
- package/lib/loader-map.js.map +0 -1
- package/lib/refs.d.ts.map +0 -1
- package/lib/refs.js.map +0 -1
- package/lib/util/index.d.ts +0 -5
- package/lib/util/index.d.ts.map +0 -1
- package/lib/util/index.js +0 -30
- package/lib/util/index.js.map +0 -1
- package/lib/util/map-includes.d.ts +0 -6
- package/lib/util/map-includes.d.ts.map +0 -1
- package/lib/util/map-includes.js +0 -189
- package/lib/util/map-includes.js.map +0 -1
- package/lib/util/merge-includes.d.ts +0 -3
- package/lib/util/merge-includes.d.ts.map +0 -1
- package/lib/util/merge-includes.js +0 -96
- package/lib/util/merge-includes.js.map +0 -1
- package/src/util/index.ts +0 -26
- package/src/util/map-includes.ts +0 -328
- package/src/util/merge-includes.ts +0 -121
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.deepEqual = void 0;
|
|
4
|
+
/* eslint-disable no-continue */
|
|
5
|
+
function deepEqual(left, right, ignore) {
|
|
6
|
+
if (left === right) {
|
|
7
|
+
return true;
|
|
8
|
+
}
|
|
9
|
+
if (left && right && typeof left === 'object' && typeof right === 'object') {
|
|
10
|
+
if (Array.isArray(left)) {
|
|
11
|
+
if (!Array.isArray(right)) {
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
const { length } = left;
|
|
15
|
+
if (right.length !== length) {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
for (let i = 0; i < length; i += 1) {
|
|
19
|
+
if (!deepEqual(left[i], right[i])) {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
const keys = Object.keys(left);
|
|
26
|
+
const keyLength = keys.length;
|
|
27
|
+
if (keyLength !== Object.keys(right).length) {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
for (const key of keys) {
|
|
31
|
+
if (ignore === null || ignore === void 0 ? void 0 : ignore.has(key)) {
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
if (!deepEqual(left[key], right[key])) {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
exports.deepEqual = deepEqual;
|
|
43
|
+
//# sourceMappingURL=deep-equal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deep-equal.js","sourceRoot":"","sources":["../../src/util/deep-equal.ts"],"names":[],"mappings":";;;AAAA,gCAAgC;AAChC,SAAgB,SAAS,CAAC,IAAa,EAAE,KAAc,EAAE,MAAoB;IAC3E,IAAI,IAAI,KAAK,KAAK,EAAE;QAClB,OAAO,IAAI,CAAC;KACb;IAED,IAAI,IAAI,IAAI,KAAK,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC1E,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACvB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBACzB,OAAO,KAAK,CAAC;aACd;YAED,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;YAExB,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE;gBAC3B,OAAO,KAAK,CAAC;aACd;YAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;gBAClC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;oBACjC,OAAO,KAAK,CAAC;iBACd;aACF;YAED,OAAO,IAAI,CAAC;SACb;QAED,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC;QAE9B,IAAI,SAAS,KAAK,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE;YAC3C,OAAO,KAAK,CAAC;SACd;QAED,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;YACtB,IAAI,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,GAAG,CAAC,GAAG,CAAC,EAAE;gBACpB,SAAS;aACV;YAED,IACE,CAAC,SAAS,CAAE,IAAgC,CAAC,GAAG,CAAC,EAAG,KAAiC,CAAC,GAAG,CAAC,CAAC,EAC3F;gBACA,OAAO,KAAK,CAAC;aACd;SACF;QAED,OAAO,IAAI,CAAC;KACb;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAjDD,8BAiDC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { GraphQLNamedType, GraphQLResolveInfo } from 'graphql';
|
|
2
|
+
import { LoaderMappings } from '../types';
|
|
3
|
+
export declare function cacheKey(type: string, path: GraphQLResolveInfo['path'], subPath: string[]): string;
|
|
4
|
+
export declare function setLoaderMappings(ctx: object, info: GraphQLResolveInfo, value: LoaderMappings, type: GraphQLNamedType): void;
|
|
5
|
+
export declare function getLoaderMapping(ctx: object, path: GraphQLResolveInfo['path'], type: string): LoaderMappings | null;
|
|
6
|
+
//# sourceMappingURL=loader-map.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader-map.d.ts","sourceRoot":"","sources":["../../src/util/loader-map.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAE/D,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAK1C,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,UAgBzF;AAED,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,kBAAkB,EACxB,KAAK,EAAE,cAAc,EACrB,IAAI,EAAE,gBAAgB,QAWvB;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,yBAK3F"}
|
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getLoaderMapping = exports.setLoaderMappings = exports.cacheKey = void 0;
|
|
4
4
|
const core_1 = require("@pothos/core");
|
|
5
|
+
const map_query_1 = require("./map-query");
|
|
5
6
|
const cache = (0, core_1.createContextCache)((ctx) => new Map());
|
|
6
|
-
function cacheKey(path, subPath) {
|
|
7
|
+
function cacheKey(type, path, subPath) {
|
|
7
8
|
let key = '';
|
|
8
9
|
let current = path;
|
|
9
10
|
while (current) {
|
|
@@ -15,26 +16,23 @@ function cacheKey(path, subPath) {
|
|
|
15
16
|
for (const entry of subPath) {
|
|
16
17
|
key = `${key}.${entry}`;
|
|
17
18
|
}
|
|
18
|
-
return key
|
|
19
|
+
return `${type}@${key}`;
|
|
19
20
|
}
|
|
20
21
|
exports.cacheKey = cacheKey;
|
|
21
|
-
function setLoaderMappings(ctx,
|
|
22
|
+
function setLoaderMappings(ctx, info, value, type) {
|
|
22
23
|
Object.keys(value).forEach((field) => {
|
|
23
|
-
var _a;
|
|
24
24
|
const map = cache(ctx);
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
map.set(key, mapping.mappings);
|
|
30
|
-
}
|
|
25
|
+
const mapping = value[field];
|
|
26
|
+
const subPath = [...mapping.indirectPath, field];
|
|
27
|
+
const key = cacheKey((0, map_query_1.getIndirectType)(type, info).name, info.path, subPath);
|
|
28
|
+
map.set(key, mapping.mappings);
|
|
31
29
|
});
|
|
32
30
|
}
|
|
33
31
|
exports.setLoaderMappings = setLoaderMappings;
|
|
34
|
-
function getLoaderMapping(ctx, path) {
|
|
32
|
+
function getLoaderMapping(ctx, path, type) {
|
|
35
33
|
var _a;
|
|
36
34
|
const map = cache(ctx);
|
|
37
|
-
const key = cacheKey(path, []);
|
|
35
|
+
const key = cacheKey(type, path, []);
|
|
38
36
|
return (_a = map.get(key)) !== null && _a !== void 0 ? _a : null;
|
|
39
37
|
}
|
|
40
38
|
exports.getLoaderMapping = getLoaderMapping;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader-map.js","sourceRoot":"","sources":["../../src/util/loader-map.ts"],"names":[],"mappings":";;;AACA,uCAAkD;AAElD,2CAA8C;AAE9C,MAAM,KAAK,GAAG,IAAA,yBAAkB,EAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EAA0B,CAAC,CAAC;AAE7E,SAAgB,QAAQ,CAAC,IAAY,EAAE,IAAgC,EAAE,OAAiB;IACxF,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,OAAO,GAA2C,IAAI,CAAC;IAE3D,OAAO,OAAO,EAAE;QACd,IAAI,OAAO,OAAO,CAAC,GAAG,KAAK,QAAQ,EAAE;YACnC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;SACnD;QACD,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;KACxB;IAED,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;QAC3B,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;KACzB;IAED,OAAO,GAAG,IAAI,IAAI,GAAG,EAAE,CAAC;AAC1B,CAAC;AAhBD,4BAgBC;AAED,SAAgB,iBAAiB,CAC/B,GAAW,EACX,IAAwB,EACxB,KAAqB,EACrB,IAAsB;IAEtB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QACnC,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QAEvB,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QAC7B,MAAM,OAAO,GAAG,CAAC,GAAG,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QACjD,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAA,2BAAe,EAAC,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAE3E,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;AACL,CAAC;AAfD,8CAeC;AAED,SAAgB,gBAAgB,CAAC,GAAW,EAAE,IAAgC,EAAE,IAAY;;IAC1F,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;IACvB,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IAErC,OAAO,MAAA,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,mCAAI,IAAI,CAAC;AAC9B,CAAC;AALD,4CAKC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { GraphQLNamedType, GraphQLResolveInfo } from 'graphql';
|
|
2
|
+
import { SelectionState } from './selections';
|
|
3
|
+
export declare function queryFromInfo(context: object, info: GraphQLResolveInfo, typeName?: string): {};
|
|
4
|
+
export declare function selectionStateFromInfo(context: object, info: GraphQLResolveInfo, typeName?: string): SelectionState;
|
|
5
|
+
export declare function getIndirectType(type: GraphQLNamedType, info: GraphQLResolveInfo): GraphQLNamedType;
|
|
6
|
+
//# sourceMappingURL=map-query.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"map-query.d.ts","sourceRoot":"","sources":["../../src/util/map-query.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,gBAAgB,EAEhB,kBAAkB,EAKnB,MAAM,SAAS,CAAC;AAIjB,OAAO,EAIL,cAAc,EAEf,MAAM,cAAc,CAAC;AAwPtB,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,EAAE,CAS9F;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,kBAAkB,EACxB,QAAQ,CAAC,EAAE,MAAM,kBAalB;AAkBD,wBAAgB,eAAe,CAAC,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,kBAAkB,oBAU/E"}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getIndirectType = exports.selectionStateFromInfo = exports.queryFromInfo = void 0;
|
|
4
|
+
/* eslint-disable no-param-reassign */
|
|
5
|
+
/* eslint-disable no-continue */
|
|
6
|
+
const graphql_1 = require("graphql");
|
|
7
|
+
const values_1 = require("graphql/execution/values");
|
|
8
|
+
const loader_map_1 = require("./loader-map");
|
|
9
|
+
const selections_1 = require("./selections");
|
|
10
|
+
function addTypeSelectionsForField(type, context, info, state, selection, indirectPath) {
|
|
11
|
+
var _a;
|
|
12
|
+
if (selection.name.value.startsWith('__')) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
const { pothosPrismaInclude, pothosPrismaSelect, pothosPrismaIndirectInclude, pothosPrismaModel, } = ((_a = type.extensions) !== null && _a !== void 0 ? _a : {});
|
|
16
|
+
if (pothosPrismaIndirectInclude) {
|
|
17
|
+
resolveIndirectInclude(type, info, selection, pothosPrismaIndirectInclude.path, indirectPath, (resolvedType, field, path) => {
|
|
18
|
+
addTypeSelectionsForField(resolvedType, context, info, state, field, path);
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
if (!(0, graphql_1.isObjectType)(type)) {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
if (pothosPrismaModel && !pothosPrismaSelect) {
|
|
25
|
+
state.mode = 'include';
|
|
26
|
+
}
|
|
27
|
+
if (pothosPrismaInclude || pothosPrismaSelect) {
|
|
28
|
+
(0, selections_1.mergeSelection)(state, {
|
|
29
|
+
select: pothosPrismaSelect ? { ...pothosPrismaSelect } : undefined,
|
|
30
|
+
include: pothosPrismaInclude ? { ...pothosPrismaInclude } : undefined,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
if (selection.selectionSet) {
|
|
34
|
+
addNestedSelections(type, context, info, state, selection.selectionSet, indirectPath);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
function resolveIndirectInclude(type, info, selection, includePath, path, resolve) {
|
|
38
|
+
var _a, _b, _c, _d;
|
|
39
|
+
const [include, ...rest] = includePath;
|
|
40
|
+
if (!selection.selectionSet || !include) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
for (const sel of selection.selectionSet.selections) {
|
|
44
|
+
switch (sel.kind) {
|
|
45
|
+
case graphql_1.Kind.FIELD:
|
|
46
|
+
if (sel.name.value === include.name && (0, graphql_1.isObjectType)(type)) {
|
|
47
|
+
const returnType = (0, graphql_1.getNamedType)(type.getFields()[sel.name.value].type);
|
|
48
|
+
if (rest.length === 0) {
|
|
49
|
+
resolve(returnType, sel, [...path, (_b = (_a = sel.alias) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : sel.name.value]);
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
resolveIndirectInclude(returnType, info, sel, rest, [...path, (_d = (_c = sel.alias) === null || _c === void 0 ? void 0 : _c.value) !== null && _d !== void 0 ? _d : sel.name.value], resolve);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
continue;
|
|
56
|
+
case graphql_1.Kind.FRAGMENT_SPREAD:
|
|
57
|
+
if (info.fragments[sel.name.value].typeCondition.name.value === include.type) {
|
|
58
|
+
resolveIndirectInclude(info.schema.getType(include.type), info, info.fragments[sel.name.value], includePath, path, resolve);
|
|
59
|
+
}
|
|
60
|
+
continue;
|
|
61
|
+
case graphql_1.Kind.INLINE_FRAGMENT:
|
|
62
|
+
if (!sel.typeCondition || sel.typeCondition.name.value === include.type) {
|
|
63
|
+
resolveIndirectInclude(sel.typeCondition ? info.schema.getType(sel.typeCondition.name.value) : type, info, sel, includePath, path, resolve);
|
|
64
|
+
}
|
|
65
|
+
continue;
|
|
66
|
+
default:
|
|
67
|
+
throw new Error(`Unsupported selection kind ${selection.kind}`);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
function addNestedSelections(type, context, info, state, selections, indirectPath) {
|
|
72
|
+
for (const selection of selections.selections) {
|
|
73
|
+
switch (selection.kind) {
|
|
74
|
+
case graphql_1.Kind.FIELD:
|
|
75
|
+
addFieldSelection(type, context, info, state, selection, indirectPath);
|
|
76
|
+
continue;
|
|
77
|
+
case graphql_1.Kind.FRAGMENT_SPREAD:
|
|
78
|
+
if (info.fragments[selection.name.value].typeCondition.name.value !== type.name) {
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
addNestedSelections(type, context, info, state, info.fragments[selection.name.value].selectionSet, indirectPath);
|
|
82
|
+
continue;
|
|
83
|
+
case graphql_1.Kind.INLINE_FRAGMENT:
|
|
84
|
+
if (selection.typeCondition && selection.typeCondition.name.value !== type.name) {
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
addNestedSelections(type, context, info, state, selection.selectionSet, indirectPath);
|
|
88
|
+
continue;
|
|
89
|
+
default:
|
|
90
|
+
throw new Error(`Unsupported selection kind ${selection.kind}`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
function addFieldSelection(type, context, info, state, selection, indirectPath) {
|
|
95
|
+
var _a, _b, _c, _d, _e, _f;
|
|
96
|
+
if (selection.name.value.startsWith('__')) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
const field = type.getFields()[selection.name.value];
|
|
100
|
+
if (!field) {
|
|
101
|
+
throw new Error(`Unknown field ${selection.name.value} on ${type.name}`);
|
|
102
|
+
}
|
|
103
|
+
const fieldSelect = (_a = field.extensions) === null || _a === void 0 ? void 0 : _a.pothosPrismaSelect;
|
|
104
|
+
let fieldSelectionMap;
|
|
105
|
+
const fieldParentSelect = (_b = field.extensions) === null || _b === void 0 ? void 0 : _b.pothosPrismaParentSelect;
|
|
106
|
+
let mappings = {};
|
|
107
|
+
if (typeof fieldSelect === 'function') {
|
|
108
|
+
const args = (0, values_1.getArgumentValues)(field, selection, info.variableValues);
|
|
109
|
+
fieldSelectionMap = fieldSelect(args, context, (rawQuery) => {
|
|
110
|
+
const returnType = (0, graphql_1.getNamedType)(field.type);
|
|
111
|
+
const query = typeof rawQuery === 'function' ? rawQuery(args, context) : rawQuery;
|
|
112
|
+
const fieldState = createStateForType(returnType, info, state);
|
|
113
|
+
if (typeof query === 'object' && Object.keys(query).length > 0) {
|
|
114
|
+
(0, selections_1.mergeSelection)(fieldState, { select: {}, ...query });
|
|
115
|
+
}
|
|
116
|
+
addTypeSelectionsForField(returnType, context, info, fieldState, selection, []);
|
|
117
|
+
// eslint-disable-next-line prefer-destructuring
|
|
118
|
+
mappings = fieldState.mappings;
|
|
119
|
+
return (0, selections_1.selectionToQuery)(fieldState);
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
fieldSelectionMap = { select: fieldSelect };
|
|
124
|
+
}
|
|
125
|
+
if (fieldSelect && (0, selections_1.selectionCompatible)(state, fieldSelectionMap, true)) {
|
|
126
|
+
(0, selections_1.mergeSelection)(state, fieldSelectionMap);
|
|
127
|
+
state.mappings[(_d = (_c = selection.alias) === null || _c === void 0 ? void 0 : _c.value) !== null && _d !== void 0 ? _d : selection.name.value] = {
|
|
128
|
+
field: selection.name.value,
|
|
129
|
+
mappings,
|
|
130
|
+
indirectPath,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
else if (fieldParentSelect &&
|
|
134
|
+
state.parent &&
|
|
135
|
+
(0, selections_1.selectionCompatible)(state.parent, { select: fieldParentSelect }, true)) {
|
|
136
|
+
(0, selections_1.mergeSelection)(state.parent, { select: fieldParentSelect });
|
|
137
|
+
state.mappings[(_f = (_e = selection.alias) === null || _e === void 0 ? void 0 : _e.value) !== null && _f !== void 0 ? _f : selection.name.value] = {
|
|
138
|
+
field: selection.name.value,
|
|
139
|
+
mappings,
|
|
140
|
+
indirectPath,
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
function queryFromInfo(context, info, typeName) {
|
|
145
|
+
const type = typeName ? info.schema.getTypeMap()[typeName] : (0, graphql_1.getNamedType)(info.returnType);
|
|
146
|
+
const state = createStateForType(type, info);
|
|
147
|
+
addTypeSelectionsForField(type, context, info, state, info.fieldNodes[0], []);
|
|
148
|
+
(0, loader_map_1.setLoaderMappings)(context, info, state.mappings, type);
|
|
149
|
+
return (0, selections_1.selectionToQuery)(state);
|
|
150
|
+
}
|
|
151
|
+
exports.queryFromInfo = queryFromInfo;
|
|
152
|
+
function selectionStateFromInfo(context, info, typeName) {
|
|
153
|
+
const type = typeName ? info.schema.getTypeMap()[typeName] : info.parentType;
|
|
154
|
+
const state = createStateForType(type, info);
|
|
155
|
+
if (!(0, graphql_1.isObjectType)(type)) {
|
|
156
|
+
throw new Error('Prisma plugin can only resolve includes for object types');
|
|
157
|
+
}
|
|
158
|
+
addFieldSelection(type, context, info, state, info.fieldNodes[0], []);
|
|
159
|
+
return state;
|
|
160
|
+
}
|
|
161
|
+
exports.selectionStateFromInfo = selectionStateFromInfo;
|
|
162
|
+
function createStateForType(type, info, parent) {
|
|
163
|
+
const targetType = getIndirectType(type, info);
|
|
164
|
+
const fieldMap = targetType.extensions.pothosPrismaFieldMap;
|
|
165
|
+
return (0, selections_1.createState)(fieldMap, targetType.extensions.pothosPrismaSelect ? 'select' : 'include', parent);
|
|
166
|
+
}
|
|
167
|
+
function getIndirectType(type, info) {
|
|
168
|
+
let targetType = type;
|
|
169
|
+
while (targetType.extensions.pothosPrismaIndirectInclude) {
|
|
170
|
+
targetType = info.schema.getType(targetType.extensions.pothosPrismaIndirectInclude.getType());
|
|
171
|
+
}
|
|
172
|
+
return targetType;
|
|
173
|
+
}
|
|
174
|
+
exports.getIndirectType = getIndirectType;
|
|
175
|
+
//# sourceMappingURL=map-query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"map-query.js","sourceRoot":"","sources":["../../src/util/map-query.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { DMMF } from '@prisma/generator-helper';
|
|
2
|
+
export interface FieldMap {
|
|
3
|
+
model: string;
|
|
4
|
+
relations: Map<string, FieldMap>;
|
|
5
|
+
}
|
|
6
|
+
export declare type RelationMap = Map<string, FieldMap>;
|
|
7
|
+
export declare const getRelationMap: import("@pothos/core").ContextCache<RelationMap, object, []>;
|
|
8
|
+
export declare function createRelationMap({ models }: DMMF.Datamodel): RelationMap;
|
|
9
|
+
//# sourceMappingURL=relation-map.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relation-map.d.ts","sourceRoot":"","sources":["../../src/util/relation-map.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAEhD,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;CAClC;AAED,oBAAY,WAAW,GAAG,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAEhD,eAAO,MAAM,cAAc,8DAK1B,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,SAAS,eAkB3D"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createRelationMap = exports.getRelationMap = void 0;
|
|
4
|
+
const core_1 = require("@pothos/core");
|
|
5
|
+
exports.getRelationMap = (0, core_1.createContextCache)((client) => createRelationMap(
|
|
6
|
+
// eslint-disable-next-line no-underscore-dangle
|
|
7
|
+
client._dmmf.datamodel));
|
|
8
|
+
function createRelationMap({ models }) {
|
|
9
|
+
const relationMap = new Map();
|
|
10
|
+
models.forEach((model) => {
|
|
11
|
+
relationMap.set(model.name, { model: model.name, relations: new Map() });
|
|
12
|
+
});
|
|
13
|
+
models.forEach((model) => {
|
|
14
|
+
const map = relationMap.get(model.name).relations;
|
|
15
|
+
model.fields.forEach((field) => {
|
|
16
|
+
if (field.kind === 'object' && relationMap.has(field.type)) {
|
|
17
|
+
map.set(field.name, relationMap.get(field.type));
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
return relationMap;
|
|
22
|
+
}
|
|
23
|
+
exports.createRelationMap = createRelationMap;
|
|
24
|
+
//# sourceMappingURL=relation-map.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relation-map.js","sourceRoot":"","sources":["../../src/util/relation-map.ts"],"names":[],"mappings":";;;AAAA,uCAAkD;AAUrC,QAAA,cAAc,GAAG,IAAA,yBAAkB,EAAC,CAAC,MAAc,EAAE,EAAE,CAClE,iBAAiB;AACf,gDAAgD;AAC/C,MAA8D,CAAC,KAAK,CAAC,SAAS,CAChF,CACF,CAAC;AAEF,SAAgB,iBAAiB,CAAC,EAAE,MAAM,EAAkB;IAC1D,MAAM,WAAW,GAAgB,IAAI,GAAG,EAAE,CAAC;IAE3C,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QACvB,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QACvB,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAE,CAAC,SAAS,CAAC;QAEnD,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YAC7B,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;gBAC1D,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAE,CAAC,CAAC;aACnD;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,WAAW,CAAC;AACrB,CAAC;AAlBD,8CAkBC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { FieldMap } from './relation-map';
|
|
2
|
+
import { LoaderMappings, SelectionMap } from '..';
|
|
3
|
+
export declare type SelectionMode = 'select' | 'include';
|
|
4
|
+
export interface SelectionState {
|
|
5
|
+
fieldMap: FieldMap;
|
|
6
|
+
query: object;
|
|
7
|
+
mode: SelectionMode;
|
|
8
|
+
fields: Set<string>;
|
|
9
|
+
counts: Set<string>;
|
|
10
|
+
relations: Map<string, SelectionState>;
|
|
11
|
+
mappings: LoaderMappings;
|
|
12
|
+
parent?: SelectionState;
|
|
13
|
+
}
|
|
14
|
+
export declare function selectionCompatible(state: SelectionState, selectionMap: SelectionMap | boolean, ignoreQuery?: boolean): boolean;
|
|
15
|
+
export declare function stateCompatible(state: SelectionState, newState: SelectionState, ignoreQuery?: boolean): boolean;
|
|
16
|
+
export declare function mergeState(state: SelectionState, newState: SelectionState): void;
|
|
17
|
+
export declare function createState(fieldMap: FieldMap, mode: SelectionMode, parent?: SelectionState): SelectionState;
|
|
18
|
+
export declare function mergeSelection(state: SelectionState, { select, include, ...query }: SelectionMap): void;
|
|
19
|
+
export declare function selectionToQuery(state: SelectionState): SelectionMap;
|
|
20
|
+
//# sourceMappingURL=selections.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selections.d.ts","sourceRoot":"","sources":["../../src/util/selections.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAElD,oBAAY,aAAa,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEjD,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,QAAQ,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACpB,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACpB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACvC,QAAQ,EAAE,cAAc,CAAC;IACzB,MAAM,CAAC,EAAE,cAAc,CAAC;CACzB;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,cAAc,EACrB,YAAY,EAAE,YAAY,GAAG,OAAO,EACpC,WAAW,UAAQ,GAClB,OAAO,CAyBT;AAED,wBAAgB,eAAe,CAC7B,KAAK,EAAE,cAAc,EACrB,QAAQ,EAAE,cAAc,EACxB,WAAW,UAAQ,GAClB,OAAO,CAQT;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,cAAc,QAczE;AAED,wBAAgB,WAAW,CACzB,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,aAAa,EACnB,MAAM,CAAC,EAAE,cAAc,GACtB,cAAc,CAWhB;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,cAAc,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,EAAE,YAAY,QAkDhG;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,cAAc,GAAG,YAAY,CAyCpE"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.selectionToQuery = exports.mergeSelection = exports.createState = exports.mergeState = exports.stateCompatible = exports.selectionCompatible = void 0;
|
|
4
|
+
/* eslint-disable no-param-reassign */
|
|
5
|
+
/* eslint-disable no-underscore-dangle */
|
|
6
|
+
const deep_equal_1 = require("./deep-equal");
|
|
7
|
+
function selectionCompatible(state, selectionMap, ignoreQuery = false) {
|
|
8
|
+
if (typeof selectionMap === 'boolean') {
|
|
9
|
+
return ignoreQuery || !selectionMap || Object.keys(state.query).length === 0;
|
|
10
|
+
}
|
|
11
|
+
const { select, include, ...query } = selectionMap;
|
|
12
|
+
if (select && Object.keys(select).some((key) => compare(key, select[key]))) {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
if (include && Object.keys(include).some((key) => compare(key, include[key]))) {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
return ignoreQuery || (0, deep_equal_1.deepEqual)(state.query, query);
|
|
19
|
+
function compare(key, value) {
|
|
20
|
+
return (value &&
|
|
21
|
+
state.fieldMap.relations.has(key) &&
|
|
22
|
+
state.relations.has(key) &&
|
|
23
|
+
!selectionCompatible(state.relations.get(key), value));
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
exports.selectionCompatible = selectionCompatible;
|
|
27
|
+
function stateCompatible(state, newState, ignoreQuery = false) {
|
|
28
|
+
for (const [name, relationState] of newState.relations) {
|
|
29
|
+
if (state.relations.has(name) && !stateCompatible(state.relations.get(name), relationState)) {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return ignoreQuery || (0, deep_equal_1.deepEqual)(state.query, newState.query);
|
|
34
|
+
}
|
|
35
|
+
exports.stateCompatible = stateCompatible;
|
|
36
|
+
function mergeState(state, newState) {
|
|
37
|
+
for (const [name, relationState] of newState.relations) {
|
|
38
|
+
if (state.relations.has(name)) {
|
|
39
|
+
mergeState(state.relations.get(name), relationState);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
if (newState.mode === 'include') {
|
|
43
|
+
state.mode = 'include';
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
for (const name of newState.fields) {
|
|
47
|
+
state.fields.add(name);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
exports.mergeState = mergeState;
|
|
52
|
+
function createState(fieldMap, mode, parent) {
|
|
53
|
+
return {
|
|
54
|
+
parent,
|
|
55
|
+
mode,
|
|
56
|
+
fieldMap,
|
|
57
|
+
query: {},
|
|
58
|
+
fields: new Set(),
|
|
59
|
+
counts: new Set(),
|
|
60
|
+
relations: new Map(),
|
|
61
|
+
mappings: {},
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
exports.createState = createState;
|
|
65
|
+
function mergeSelection(state, { select, include, ...query }) {
|
|
66
|
+
if (state.mode === 'select' && !select) {
|
|
67
|
+
state.mode = 'include';
|
|
68
|
+
}
|
|
69
|
+
if (include) {
|
|
70
|
+
Object.keys(include).forEach((key) => {
|
|
71
|
+
merge(key, include[key]);
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
if (select) {
|
|
75
|
+
Object.keys(select).forEach((key) => {
|
|
76
|
+
merge(key, select[key]);
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
if (Object.keys(query).length > 0) {
|
|
80
|
+
state.query = query;
|
|
81
|
+
}
|
|
82
|
+
function merge(key, value) {
|
|
83
|
+
var _a;
|
|
84
|
+
if (!value) {
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
if (key === '_count') {
|
|
88
|
+
const counts = (_a = value.select) !== null && _a !== void 0 ? _a : {};
|
|
89
|
+
Object.keys(counts).forEach((count) => {
|
|
90
|
+
state.counts.add(count);
|
|
91
|
+
});
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
const selection = value === true ? { include: {} } : value;
|
|
95
|
+
const childMap = state.fieldMap.relations.get(key);
|
|
96
|
+
if (childMap) {
|
|
97
|
+
if (state.relations.has(key)) {
|
|
98
|
+
mergeSelection(state.relations.get(key), selection);
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
const relatedState = createState(childMap, 'select');
|
|
102
|
+
mergeSelection(relatedState, selection);
|
|
103
|
+
state.relations.set(key, relatedState);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
state.fields.add(key);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
exports.mergeSelection = mergeSelection;
|
|
112
|
+
function selectionToQuery(state) {
|
|
113
|
+
const nestedIncludes = {};
|
|
114
|
+
const counts = {};
|
|
115
|
+
let hasSelection = false;
|
|
116
|
+
state.relations.forEach((sel, relation) => {
|
|
117
|
+
hasSelection = true;
|
|
118
|
+
const nested = selectionToQuery(sel);
|
|
119
|
+
nestedIncludes[relation] = Object.keys(nested).length > 0 ? nested : true;
|
|
120
|
+
});
|
|
121
|
+
if (state.counts.size > 0) {
|
|
122
|
+
hasSelection = true;
|
|
123
|
+
for (const count of state.counts) {
|
|
124
|
+
counts[count] = true;
|
|
125
|
+
}
|
|
126
|
+
nestedIncludes._count = {
|
|
127
|
+
select: counts,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
if (state.mode === 'select') {
|
|
131
|
+
state.fields.forEach((field) => {
|
|
132
|
+
hasSelection = true;
|
|
133
|
+
nestedIncludes[field] = true;
|
|
134
|
+
});
|
|
135
|
+
return {
|
|
136
|
+
...state.query,
|
|
137
|
+
select: nestedIncludes,
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
return hasSelection
|
|
141
|
+
? {
|
|
142
|
+
...state.query,
|
|
143
|
+
include: nestedIncludes,
|
|
144
|
+
}
|
|
145
|
+
: state.query;
|
|
146
|
+
}
|
|
147
|
+
exports.selectionToQuery = selectionToQuery;
|
|
148
|
+
//# sourceMappingURL=selections.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selections.js","sourceRoot":"","sources":["../../src/util/selections.ts"],"names":[],"mappings":"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"}
|