@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.
Files changed (163) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/README.md +403 -308
  3. package/esm/field-builder.js +11 -13
  4. package/esm/field-builder.js.map +1 -1
  5. package/esm/generator.js +4 -0
  6. package/esm/generator.js.map +1 -1
  7. package/esm/global-types.d.ts +23 -5
  8. package/esm/global-types.d.ts.map +1 -1
  9. package/esm/index.d.ts +4 -1
  10. package/esm/index.d.ts.map +1 -1
  11. package/esm/index.js +46 -1
  12. package/esm/index.js.map +1 -1
  13. package/esm/model-loader.d.ts +5 -6
  14. package/esm/model-loader.d.ts.map +1 -1
  15. package/esm/model-loader.js +18 -78
  16. package/esm/model-loader.js.map +1 -1
  17. package/esm/prisma-field-builder.d.ts +25 -6
  18. package/esm/prisma-field-builder.d.ts.map +1 -1
  19. package/esm/prisma-field-builder.js +88 -119
  20. package/esm/prisma-field-builder.js.map +1 -1
  21. package/esm/schema-builder.js +15 -4
  22. package/esm/schema-builder.js.map +1 -1
  23. package/esm/types.d.ts +73 -77
  24. package/esm/types.d.ts.map +1 -1
  25. package/esm/types.js +1 -0
  26. package/esm/types.js.map +1 -1
  27. package/esm/{cursors.d.ts → util/cursors.d.ts} +10 -8
  28. package/esm/util/cursors.d.ts.map +1 -0
  29. package/esm/{cursors.js → util/cursors.js} +34 -13
  30. package/esm/util/cursors.js.map +1 -0
  31. package/{lib/refs.d.ts → esm/util/datamodel.d.ts} +9 -8
  32. package/esm/util/datamodel.d.ts.map +1 -0
  33. package/esm/{refs.js → util/datamodel.js} +27 -30
  34. package/esm/util/datamodel.js.map +1 -0
  35. package/esm/util/deep-equal.d.ts +2 -0
  36. package/esm/util/deep-equal.d.ts.map +1 -0
  37. package/esm/util/deep-equal.js +39 -0
  38. package/esm/util/deep-equal.js.map +1 -0
  39. package/esm/util/loader-map.d.ts +6 -0
  40. package/esm/util/loader-map.d.ts.map +1 -0
  41. package/esm/{loader-map.js → util/loader-map.js} +10 -12
  42. package/esm/util/loader-map.js.map +1 -0
  43. package/esm/util/map-query.d.ts +6 -0
  44. package/esm/util/map-query.d.ts.map +1 -0
  45. package/esm/util/map-query.js +169 -0
  46. package/esm/util/map-query.js.map +1 -0
  47. package/esm/util/relation-map.d.ts +9 -0
  48. package/esm/util/relation-map.d.ts.map +1 -0
  49. package/esm/util/relation-map.js +20 -0
  50. package/esm/util/relation-map.js.map +1 -0
  51. package/esm/util/selections.d.ts +20 -0
  52. package/esm/util/selections.d.ts.map +1 -0
  53. package/esm/util/selections.js +139 -0
  54. package/esm/util/selections.js.map +1 -0
  55. package/lib/field-builder.js +20 -18
  56. package/lib/field-builder.js.map +1 -1
  57. package/lib/generator.js +9 -1
  58. package/lib/generator.js.map +1 -1
  59. package/lib/global-types.d.ts +23 -5
  60. package/lib/global-types.d.ts.map +1 -1
  61. package/lib/index.d.ts +4 -1
  62. package/lib/index.d.ts.map +1 -1
  63. package/lib/index.js +50 -1
  64. package/lib/index.js.map +1 -1
  65. package/lib/model-loader.d.ts +5 -6
  66. package/lib/model-loader.d.ts.map +1 -1
  67. package/lib/model-loader.js +19 -79
  68. package/lib/model-loader.js.map +1 -1
  69. package/lib/prisma-field-builder.d.ts +25 -6
  70. package/lib/prisma-field-builder.d.ts.map +1 -1
  71. package/lib/prisma-field-builder.js +92 -123
  72. package/lib/prisma-field-builder.js.map +1 -1
  73. package/lib/schema-builder.js +23 -8
  74. package/lib/schema-builder.js.map +1 -1
  75. package/lib/types.d.ts +73 -77
  76. package/lib/types.d.ts.map +1 -1
  77. package/lib/types.js +2 -0
  78. package/lib/types.js.map +1 -1
  79. package/lib/{cursors.d.ts → util/cursors.d.ts} +10 -8
  80. package/lib/util/cursors.d.ts.map +1 -0
  81. package/lib/{cursors.js → util/cursors.js} +39 -14
  82. package/lib/util/cursors.js.map +1 -0
  83. package/{esm/refs.d.ts → lib/util/datamodel.d.ts} +9 -8
  84. package/lib/util/datamodel.d.ts.map +1 -0
  85. package/lib/{refs.js → util/datamodel.js} +32 -35
  86. package/lib/util/datamodel.js.map +1 -0
  87. package/lib/util/deep-equal.d.ts +2 -0
  88. package/lib/util/deep-equal.d.ts.map +1 -0
  89. package/lib/util/deep-equal.js +43 -0
  90. package/lib/util/deep-equal.js.map +1 -0
  91. package/lib/util/loader-map.d.ts +6 -0
  92. package/lib/util/loader-map.d.ts.map +1 -0
  93. package/lib/{loader-map.js → util/loader-map.js} +10 -12
  94. package/lib/util/loader-map.js.map +1 -0
  95. package/lib/util/map-query.d.ts +6 -0
  96. package/lib/util/map-query.d.ts.map +1 -0
  97. package/lib/util/map-query.js +175 -0
  98. package/lib/util/map-query.js.map +1 -0
  99. package/lib/util/relation-map.d.ts +9 -0
  100. package/lib/util/relation-map.d.ts.map +1 -0
  101. package/lib/util/relation-map.js +24 -0
  102. package/lib/util/relation-map.js.map +1 -0
  103. package/lib/util/selections.d.ts +20 -0
  104. package/lib/util/selections.d.ts.map +1 -0
  105. package/lib/util/selections.js +148 -0
  106. package/lib/util/selections.js.map +1 -0
  107. package/package.json +8 -8
  108. package/src/field-builder.ts +12 -12
  109. package/src/generator.ts +18 -0
  110. package/src/global-types.ts +59 -12
  111. package/src/index.ts +75 -1
  112. package/src/model-loader.ts +27 -106
  113. package/src/prisma-field-builder.ts +199 -147
  114. package/src/schema-builder.ts +29 -7
  115. package/src/types.ts +149 -102
  116. package/src/{cursors.ts → util/cursors.ts} +45 -20
  117. package/src/{refs.ts → util/datamodel.ts} +36 -40
  118. package/src/util/deep-equal.ts +51 -0
  119. package/src/{loader-map.ts → util/loader-map.ts} +13 -13
  120. package/src/util/map-query.ts +327 -0
  121. package/src/util/relation-map.ts +36 -0
  122. package/src/util/selections.ts +192 -0
  123. package/esm/cursors.d.ts.map +0 -1
  124. package/esm/cursors.js.map +0 -1
  125. package/esm/loader-map.d.ts +0 -6
  126. package/esm/loader-map.d.ts.map +0 -1
  127. package/esm/loader-map.js.map +0 -1
  128. package/esm/refs.d.ts.map +0 -1
  129. package/esm/refs.js.map +0 -1
  130. package/esm/util/index.d.ts +0 -5
  131. package/esm/util/index.d.ts.map +0 -1
  132. package/esm/util/index.js +0 -16
  133. package/esm/util/index.js.map +0 -1
  134. package/esm/util/map-includes.d.ts +0 -6
  135. package/esm/util/map-includes.d.ts.map +0 -1
  136. package/esm/util/map-includes.js +0 -184
  137. package/esm/util/map-includes.js.map +0 -1
  138. package/esm/util/merge-includes.d.ts +0 -3
  139. package/esm/util/merge-includes.d.ts.map +0 -1
  140. package/esm/util/merge-includes.js +0 -91
  141. package/esm/util/merge-includes.js.map +0 -1
  142. package/lib/cursors.d.ts.map +0 -1
  143. package/lib/cursors.js.map +0 -1
  144. package/lib/loader-map.d.ts +0 -6
  145. package/lib/loader-map.d.ts.map +0 -1
  146. package/lib/loader-map.js.map +0 -1
  147. package/lib/refs.d.ts.map +0 -1
  148. package/lib/refs.js.map +0 -1
  149. package/lib/util/index.d.ts +0 -5
  150. package/lib/util/index.d.ts.map +0 -1
  151. package/lib/util/index.js +0 -30
  152. package/lib/util/index.js.map +0 -1
  153. package/lib/util/map-includes.d.ts +0 -6
  154. package/lib/util/map-includes.d.ts.map +0 -1
  155. package/lib/util/map-includes.js +0 -189
  156. package/lib/util/map-includes.js.map +0 -1
  157. package/lib/util/merge-includes.d.ts +0 -3
  158. package/lib/util/merge-includes.d.ts.map +0 -1
  159. package/lib/util/merge-includes.js +0 -96
  160. package/lib/util/merge-includes.js.map +0 -1
  161. package/src/util/index.ts +0 -26
  162. package/src/util/map-includes.ts +0 -328
  163. 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, path, value) {
22
+ function setLoaderMappings(ctx, info, value, type) {
22
23
  Object.keys(value).forEach((field) => {
23
- var _a;
24
24
  const map = cache(ctx);
25
- for (const mapping of value[field]) {
26
- const selectionName = (_a = mapping.alias) !== null && _a !== void 0 ? _a : mapping.field;
27
- const subPath = [...mapping.indirectPath, selectionName];
28
- const key = cacheKey(path, subPath);
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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"}