@pothos/plugin-drizzle 0.18.0 → 0.19.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 (167) hide show
  1. package/CHANGELOG.md +351 -0
  2. package/README.md +784 -221
  3. package/dts/connection-helpers.d.ts +18 -8
  4. package/dts/connection-helpers.d.ts.map +1 -1
  5. package/dts/drizzle-field-builder.d.ts +4 -11
  6. package/dts/drizzle-field-builder.d.ts.map +1 -1
  7. package/dts/global-types.d.ts.map +1 -1
  8. package/dts/index.d.ts.map +1 -1
  9. package/dts/model-loader.d.ts +18 -17
  10. package/dts/model-loader.d.ts.map +1 -1
  11. package/dts/types.d.ts +81 -20
  12. package/dts/types.d.ts.map +1 -1
  13. package/dts/utils/adapter.d.ts +39 -0
  14. package/dts/utils/adapter.d.ts.map +1 -0
  15. package/dts/utils/await-selections.d.ts +12 -0
  16. package/dts/utils/await-selections.d.ts.map +1 -0
  17. package/dts/utils/config.d.ts +23 -3
  18. package/dts/utils/config.d.ts.map +1 -1
  19. package/dts/utils/cursors.d.ts +6 -6
  20. package/dts/utils/cursors.d.ts.map +1 -1
  21. package/dts/utils/map-query.d.ts +22 -21
  22. package/dts/utils/map-query.d.ts.map +1 -1
  23. package/dts/utils/path-info.d.ts +13 -0
  24. package/dts/utils/path-info.d.ts.map +1 -0
  25. package/dts/utils/relation-filter.d.ts +48 -0
  26. package/dts/utils/relation-filter.d.ts.map +1 -0
  27. package/dts/utils/selections.d.ts +2 -21
  28. package/dts/utils/selections.d.ts.map +1 -1
  29. package/esm/connection-helpers.d.ts +18 -8
  30. package/esm/connection-helpers.d.ts.map +1 -1
  31. package/esm/connection-helpers.js +52 -19
  32. package/esm/connection-helpers.js.map +1 -1
  33. package/esm/drizzle-field-builder.d.ts +4 -11
  34. package/esm/drizzle-field-builder.d.ts.map +1 -1
  35. package/esm/drizzle-field-builder.js +138 -96
  36. package/esm/drizzle-field-builder.js.map +1 -1
  37. package/esm/field-builder.js +61 -47
  38. package/esm/field-builder.js.map +1 -1
  39. package/esm/global-types.d.ts.map +1 -1
  40. package/esm/index.d.ts.map +1 -1
  41. package/esm/index.js +37 -61
  42. package/esm/index.js.map +1 -1
  43. package/esm/model-loader.d.ts +18 -17
  44. package/esm/model-loader.d.ts.map +1 -1
  45. package/esm/model-loader.js +76 -45
  46. package/esm/model-loader.js.map +1 -1
  47. package/esm/schema-builder.js +40 -149
  48. package/esm/schema-builder.js.map +1 -1
  49. package/esm/types.d.ts +81 -20
  50. package/esm/types.d.ts.map +1 -1
  51. package/esm/types.js +1 -0
  52. package/esm/types.js.map +1 -1
  53. package/esm/utils/adapter.d.ts +39 -0
  54. package/esm/utils/adapter.d.ts.map +1 -0
  55. package/esm/utils/adapter.js +137 -0
  56. package/esm/utils/adapter.js.map +1 -0
  57. package/esm/utils/await-selections.d.ts +12 -0
  58. package/esm/utils/await-selections.d.ts.map +1 -0
  59. package/esm/utils/await-selections.js +19 -0
  60. package/esm/utils/await-selections.js.map +1 -0
  61. package/esm/utils/config.d.ts +23 -3
  62. package/esm/utils/config.d.ts.map +1 -1
  63. package/esm/utils/config.js +1 -4
  64. package/esm/utils/config.js.map +1 -1
  65. package/esm/utils/cursors.d.ts +6 -6
  66. package/esm/utils/cursors.d.ts.map +1 -1
  67. package/esm/utils/cursors.js +55 -90
  68. package/esm/utils/cursors.js.map +1 -1
  69. package/esm/utils/map-query.d.ts +22 -21
  70. package/esm/utils/map-query.d.ts.map +1 -1
  71. package/esm/utils/map-query.js +40 -336
  72. package/esm/utils/map-query.js.map +1 -1
  73. package/esm/utils/path-info.d.ts +13 -0
  74. package/esm/utils/path-info.d.ts.map +1 -0
  75. package/esm/utils/path-info.js +37 -0
  76. package/esm/utils/path-info.js.map +1 -0
  77. package/esm/utils/relation-filter.d.ts +48 -0
  78. package/esm/utils/relation-filter.d.ts.map +1 -0
  79. package/esm/utils/relation-filter.js +92 -0
  80. package/esm/utils/relation-filter.js.map +1 -0
  81. package/esm/utils/selections.d.ts +2 -21
  82. package/esm/utils/selections.d.ts.map +1 -1
  83. package/esm/utils/selections.js +1 -133
  84. package/esm/utils/selections.js.map +1 -1
  85. package/lib/connection-helpers.js +51 -18
  86. package/lib/connection-helpers.js.map +1 -1
  87. package/lib/drizzle-field-builder.js +136 -94
  88. package/lib/drizzle-field-builder.js.map +1 -1
  89. package/lib/field-builder.js +58 -44
  90. package/lib/field-builder.js.map +1 -1
  91. package/lib/index.js +36 -60
  92. package/lib/index.js.map +1 -1
  93. package/lib/model-loader.js +76 -45
  94. package/lib/model-loader.js.map +1 -1
  95. package/lib/schema-builder.js +40 -149
  96. package/lib/schema-builder.js.map +1 -1
  97. package/lib/types.js +4 -0
  98. package/lib/types.js.map +1 -1
  99. package/lib/utils/adapter.js +147 -0
  100. package/lib/utils/adapter.js.map +1 -0
  101. package/lib/utils/await-selections.js +20 -0
  102. package/lib/utils/await-selections.js.map +1 -0
  103. package/lib/utils/config.js +1 -4
  104. package/lib/utils/config.js.map +1 -1
  105. package/lib/utils/cursors.js +47 -88
  106. package/lib/utils/cursors.js.map +1 -1
  107. package/lib/utils/map-query.js +28 -341
  108. package/lib/utils/map-query.js.map +1 -1
  109. package/lib/utils/path-info.js +39 -0
  110. package/lib/utils/path-info.js.map +1 -0
  111. package/lib/utils/relation-filter.js +91 -0
  112. package/lib/utils/relation-filter.js.map +1 -0
  113. package/lib/utils/selections.js +3 -158
  114. package/lib/utils/selections.js.map +1 -1
  115. package/package.json +8 -6
  116. package/src/connection-helpers.ts +167 -53
  117. package/src/drizzle-field-builder.ts +296 -176
  118. package/src/field-builder.ts +110 -77
  119. package/src/global-types.ts +0 -32
  120. package/src/index.ts +42 -68
  121. package/src/model-loader.ts +110 -71
  122. package/src/schema-builder.ts +76 -169
  123. package/src/types.ts +176 -44
  124. package/src/utils/adapter.ts +197 -0
  125. package/src/utils/await-selections.ts +31 -0
  126. package/src/utils/config.ts +1 -5
  127. package/src/utils/cursors.ts +53 -81
  128. package/src/utils/map-query.ts +51 -708
  129. package/src/utils/path-info.ts +40 -0
  130. package/src/utils/relation-filter.ts +185 -0
  131. package/src/utils/selections.ts +2 -207
  132. package/dts/utils/deep-equal.d.ts +0 -2
  133. package/dts/utils/deep-equal.d.ts.map +0 -1
  134. package/dts/utils/drizzle-graphql.d.ts +0 -2
  135. package/dts/utils/drizzle-graphql.d.ts.map +0 -1
  136. package/dts/utils/loader-map.d.ts +0 -11
  137. package/dts/utils/loader-map.d.ts.map +0 -1
  138. package/dts/utils/usage.d.ts +0 -5
  139. package/dts/utils/usage.d.ts.map +0 -1
  140. package/esm/utils/deep-equal.d.ts +0 -2
  141. package/esm/utils/deep-equal.d.ts.map +0 -1
  142. package/esm/utils/deep-equal.js +0 -45
  143. package/esm/utils/deep-equal.js.map +0 -1
  144. package/esm/utils/drizzle-graphql.d.ts +0 -2
  145. package/esm/utils/drizzle-graphql.d.ts.map +0 -1
  146. package/esm/utils/drizzle-graphql.js +0 -232
  147. package/esm/utils/drizzle-graphql.js.map +0 -1
  148. package/esm/utils/loader-map.d.ts +0 -11
  149. package/esm/utils/loader-map.d.ts.map +0 -1
  150. package/esm/utils/loader-map.js +0 -35
  151. package/esm/utils/loader-map.js.map +0 -1
  152. package/esm/utils/usage.d.ts +0 -5
  153. package/esm/utils/usage.d.ts.map +0 -1
  154. package/esm/utils/usage.js +0 -59
  155. package/esm/utils/usage.js.map +0 -1
  156. package/lib/utils/deep-equal.js +0 -55
  157. package/lib/utils/deep-equal.js.map +0 -1
  158. package/lib/utils/drizzle-graphql.js +0 -236
  159. package/lib/utils/drizzle-graphql.js.map +0 -1
  160. package/lib/utils/loader-map.js +0 -56
  161. package/lib/utils/loader-map.js.map +0 -1
  162. package/lib/utils/usage.js +0 -83
  163. package/lib/utils/usage.js.map +0 -1
  164. package/src/utils/deep-equal.ts +0 -57
  165. package/src/utils/drizzle-graphql.ts +0 -274
  166. package/src/utils/loader-map.ts +0 -49
  167. package/src/utils/usage.ts +0 -62
package/lib/index.js CHANGED
@@ -32,7 +32,7 @@ require("./global-types.js");
32
32
  require("./field-builder.js");
33
33
  require("./schema-builder.js");
34
34
  const _core = /*#__PURE__*/ _interop_require_wildcard(require("@pothos/core"));
35
- const _loadermap = require("./utils/loader-map.js");
35
+ const _selectionmapper = require("@pothos/selection-mapper");
36
36
  const _connectionhelpers = require("./connection-helpers.js");
37
37
  const _drizzlefieldbuilder = require("./drizzle-field-builder.js");
38
38
  const _types = _export_star(require("./types.js"), exports);
@@ -94,88 +94,49 @@ function _interop_require_wildcard(obj, nodeInterop) {
94
94
  const pluginName = 'drizzle';
95
95
  const _default = pluginName;
96
96
  class PothosDrizzlePlugin extends _core.BasePlugin {
97
- // private mappingCache = new Map<
98
- // string,
99
- // InputTypeFieldsMapping<Types, DrizzleGraphQLInputExtensions>
100
- // >();
101
97
  onTypeConfig(typeConfig) {
102
- var _typeConfig_extensions;
98
+ var _typeConfig_extensions, _typeConfig_extensions1;
103
99
  if (typeConfig.kind !== 'Object' && typeConfig.kind !== 'Interface') {
104
100
  return typeConfig;
105
101
  }
106
102
  let model = (_typeConfig_extensions = typeConfig.extensions) === null || _typeConfig_extensions === void 0 ? void 0 : _typeConfig_extensions.pothosDrizzleModel;
103
+ let table = (_typeConfig_extensions1 = typeConfig.extensions) === null || _typeConfig_extensions1 === void 0 ? void 0 : _typeConfig_extensions1.pothosDrizzleTable;
107
104
  for (const iface of typeConfig.interfaces){
108
- var _this_buildCache_getTypeConfig_extensions;
109
- const interfaceModel = (_this_buildCache_getTypeConfig_extensions = this.buildCache.getTypeConfig(iface, 'Interface').extensions) === null || _this_buildCache_getTypeConfig_extensions === void 0 ? void 0 : _this_buildCache_getTypeConfig_extensions.pothosDrizzleModel;
105
+ var _interfaceConfig_extensions;
106
+ const interfaceConfig = this.buildCache.getTypeConfig(iface, 'Interface');
107
+ const interfaceModel = (_interfaceConfig_extensions = interfaceConfig.extensions) === null || _interfaceConfig_extensions === void 0 ? void 0 : _interfaceConfig_extensions.pothosDrizzleModel;
110
108
  if (interfaceModel) {
109
+ var _interfaceConfig_extensions1;
111
110
  if (model && model !== interfaceModel) {
112
- throw new _core.PothosSchemaError(`DrizzleObjects must be based on the same prisma model as any DrizzleInterfaces they extend. ${typeConfig.name} uses ${model} and ${iface.name} uses ${interfaceModel}`);
111
+ throw new _core.PothosSchemaError(`DrizzleObjects must be based on the same drizzle table as any DrizzleInterfaces they extend. ${typeConfig.name} uses ${model} and ${iface.name} uses ${interfaceModel}`);
113
112
  }
114
113
  model = interfaceModel;
114
+ // A plain object type implementing a drizzle interface is walked with the interface's
115
+ // table, so fragments on it plan the relations it inherits.
116
+ table !== null && table !== void 0 ? table : table = (_interfaceConfig_extensions1 = interfaceConfig.extensions) === null || _interfaceConfig_extensions1 === void 0 ? void 0 : _interfaceConfig_extensions1.pothosDrizzleTable;
115
117
  }
116
118
  }
117
119
  return {
118
120
  ...typeConfig,
119
121
  extensions: {
120
122
  ...typeConfig.extensions,
121
- pothosDrizzleModel: model
123
+ pothosDrizzleModel: model,
124
+ pothosDrizzleTable: table
122
125
  }
123
126
  };
124
127
  }
125
128
  onOutputFieldConfig(fieldConfig) {
126
129
  var _fieldConfig_extensions;
127
- // const argMappings = mapInputFields<Types, DrizzleGraphQLInputExtensions>(
128
- // fieldConfig.args,
129
- // this.buildCache,
130
- // (inputField) => {
131
- // if (inputField.type.kind === 'InputObject') {
132
- // const config = this.buildCache.getTypeConfig(inputField.type.ref);
133
- // return (config.extensions?.drizzleGraphQL as DrizzleGraphQLInputExtensions) ?? null;
134
- // }
135
- // return null;
136
- // },
137
- // this.mappingCache,
138
- // );
139
- // const argMapper = argMappings
140
- // ? createInputValueMapper(argMappings, (input, mappings) => {
141
- // if (!mappings.value) {
142
- // return input;
143
- // }
144
- // const { table, tableConfig, inputType } = mappings.value;
145
- // switch (inputType) {
146
- // case 'orderBy':
147
- // return extractOrderBy(tableConfig, input as never);
148
- // case 'filters':
149
- // return extractFilters(tableConfig, table, input as never);
150
- // case 'insert':
151
- // return remapFromGraphQLSingleInput(input as never, tableConfig);
152
- // case 'update':
153
- // return remapFromGraphQLSingleInput(input as never, tableConfig);
154
- // default:
155
- // throw new Error(`Unknown drizzle input type: ${inputType}`);
156
- // }
157
- // })
158
- // : null;
159
- // const argMappers: typeof fieldConfig.argMappers = argMapper
160
- // ? [...(fieldConfig.argMappers ?? []), (args) => argMapper(args, undefined)]
161
- // : fieldConfig.argMappers;
162
130
  if (fieldConfig.kind === 'DrizzleObject' && fieldConfig.pothosOptions.select && !((_fieldConfig_extensions = fieldConfig.extensions) === null || _fieldConfig_extensions === void 0 ? void 0 : _fieldConfig_extensions.pothosDrizzleSelect)) {
163
131
  const { select } = fieldConfig.pothosOptions;
164
132
  return {
165
133
  ...fieldConfig,
166
- // argMappers,
167
134
  extensions: {
168
135
  ...fieldConfig.extensions,
169
136
  pothosDrizzleSelect: typeof select === 'function' ? (args, ctx, nestedQuery, _resolveSelection, pathInfo)=>{
170
- // Attach PathInfo properties to nestedQuery for t.field select callbacks
171
- const nestedQueryWithPath = Object.assign(nestedQuery, {
172
- path: pathInfo.path,
173
- segments: pathInfo.segments
174
- });
175
- return {
176
- columns: {},
177
- ...select(args, ctx, nestedQueryWithPath)
178
- };
137
+ // A field's select also reads its metadata from the nested selection function.
138
+ const nestedQueryWithPath = Object.assign(nestedQuery, pathInfo);
139
+ return (0, _core.completeValue)(select(args, ctx, nestedQueryWithPath), wrapSelect);
179
140
  } : {
180
141
  columns: {},
181
142
  ...select
@@ -188,11 +149,15 @@ class PothosDrizzlePlugin extends _core.BasePlugin {
188
149
  };
189
150
  }
190
151
  wrapResolve(resolver, fieldConfig) {
191
- var _fieldConfig_extensions, _parentConfig_extensions;
152
+ var _fieldConfig_extensions, _fieldConfig_extensions1, _parentConfig_extensions;
192
153
  if (fieldConfig.kind !== 'DrizzleObject' || !((_fieldConfig_extensions = fieldConfig.extensions) === null || _fieldConfig_extensions === void 0 ? void 0 : _fieldConfig_extensions.pothosDrizzleSelect)) {
193
154
  return resolver;
194
155
  }
195
156
  const parentConfig = this.buildCache.getTypeConfig(fieldConfig.parentType);
157
+ // A field can declare how to tell whether its data is already on the parent row. When the
158
+ // row was not loaded from the planned query (a resolver returned a row it fetched itself),
159
+ // the mapping alone is not proof, and the field falls back to the model loader.
160
+ const loadedCheck = (_fieldConfig_extensions1 = fieldConfig.extensions) === null || _fieldConfig_extensions1 === void 0 ? void 0 : _fieldConfig_extensions1.pothosDrizzleLoaded;
196
161
  const parentTypes = new Set([
197
162
  fieldConfig.parentType
198
163
  ]);
@@ -210,23 +175,34 @@ class PothosDrizzlePlugin extends _core.BasePlugin {
210
175
  throw new Error(`ModelLoader not found for type ${parentConfig.name}`);
211
176
  }
212
177
  return (parent, args, context, info)=>{
213
- let mapping = (0, _loadermap.getLoaderMapping)(context, info.path, info.parentType.name);
178
+ // Asked of the row: a mapping recorded for this row wins over the plan's, which answers
179
+ // for the rows the planned query loaded.
180
+ let mapping = (0, _selectionmapper.getLoaderMapping)(context, info.path, info.parentType.name, parent);
214
181
  if (!mapping) {
215
182
  for (const parentType of parentTypes){
216
- mapping = (0, _loadermap.getLoaderMapping)(context, info.path, parentType);
183
+ mapping = (0, _selectionmapper.getLoaderMapping)(context, info.path, parentType, parent);
217
184
  if (mapping) {
218
185
  break;
219
186
  }
220
187
  }
221
188
  }
222
- if (mapping) {
223
- (0, _loadermap.setLoaderMappings)(context, info, mapping);
189
+ if ((!loadedCheck || loadedCheck(parent, info, context)) && mapping) {
190
+ // Recorded under the field's own parent type as well, so its resolver finds the pathInfo
191
+ // it was planned with, whichever same-model type the plan was made for. Against the row
192
+ // it resolves with: a sibling row of the same list may have been loaded by another plan.
193
+ (0, _selectionmapper.setFieldMapping)(context, info, mapping, parent);
224
194
  return resolver(parent, args, context, info);
225
195
  }
226
196
  return modelLoader(context).loadSelection(info, parent).then((result)=>resolver(result, args, context, info));
227
197
  };
228
198
  }
229
199
  }
200
+ /** A falsy selection means the field selects nothing from the parent row. */ function wrapSelect(selected) {
201
+ return selected ? {
202
+ columns: {},
203
+ ...selected
204
+ } : null;
205
+ }
230
206
  _core.default.registerPlugin(pluginName, PothosDrizzlePlugin, {});
231
207
 
232
208
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":["DrizzleObjectFieldBuilder","PothosDrizzlePlugin","drizzleClientCache","drizzleConnectionHelpers","drizzleTableName","pluginName","BasePlugin","onTypeConfig","typeConfig","kind","model","extensions","pothosDrizzleModel","iface","interfaces","interfaceModel","buildCache","getTypeConfig","PothosSchemaError","name","onOutputFieldConfig","fieldConfig","pothosOptions","select","pothosDrizzleSelect","args","ctx","nestedQuery","_resolveSelection","pathInfo","nestedQueryWithPath","Object","assign","path","segments","columns","wrapResolve","resolver","parentConfig","parentType","parentTypes","Set","interfaceConfig","add","modelLoader","pothosDrizzleLoader","Error","parent","context","info","mapping","getLoaderMapping","setLoaderMappings","loadSelection","then","result","SchemaBuilder","registerPlugin"],"mappings":"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"}
1
+ {"version":3,"sources":["../src/index.ts"],"names":["DrizzleObjectFieldBuilder","PothosDrizzlePlugin","drizzleClientCache","drizzleConnectionHelpers","drizzleTableName","pluginName","BasePlugin","onTypeConfig","typeConfig","kind","model","extensions","pothosDrizzleModel","table","pothosDrizzleTable","iface","interfaces","interfaceConfig","buildCache","getTypeConfig","interfaceModel","PothosSchemaError","name","onOutputFieldConfig","fieldConfig","pothosOptions","select","pothosDrizzleSelect","args","ctx","nestedQuery","_resolveSelection","pathInfo","nestedQueryWithPath","Object","assign","completeValue","wrapSelect","columns","wrapResolve","resolver","parentConfig","parentType","loadedCheck","pothosDrizzleLoaded","parentTypes","Set","add","modelLoader","pothosDrizzleLoader","Error","parent","context","info","mapping","getLoaderMapping","path","setFieldMapping","loadSelection","then","result","selected","SchemaBuilder","registerPlugin"],"mappings":";;;;;;;;;;;QAkBSA;eAAAA,8CAAyB;;QASrBC;eAAAA;;QAFb;eAAA;;QAJSC;eAAAA,0BAAkB;;QAJlBC;eAAAA,2CAAwB;;QAGxBC;eAAAA,uBAAgB;;;QApBlB;QACA;QACA;8DAQA;iCAC2C;mCAMT;qCACC;oCAC5B;wBAEqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEnC,MAAMC,aAAa;MAEnB,WAAeA;AAER,MAAMJ,4BAAuDK,gBAAU;IACnEC,aAAaC,UAA4B,EAAoB;YAKxDA,wBACAA;QALZ,IAAIA,WAAWC,IAAI,KAAK,YAAYD,WAAWC,IAAI,KAAK,aAAa;YACnE,OAAOD;QACT;QAEA,IAAIE,SAAQF,yBAAAA,WAAWG,UAAU,cAArBH,6CAAAA,uBAAuBI,kBAAkB;QACrD,IAAIC,SAAQL,0BAAAA,WAAWG,UAAU,cAArBH,8CAAAA,wBAAuBM,kBAAkB;QAErD,KAAK,MAAMC,SAASP,WAAWQ,UAAU,CAAE;gBAElBC;YADvB,MAAMA,kBAAkB,IAAI,CAACC,UAAU,CAACC,aAAa,CAACJ,OAAO;YAC7D,MAAMK,kBAAiBH,8BAAAA,gBAAgBN,UAAU,cAA1BM,kDAAAA,4BAA4BL,kBAAkB;YAErE,IAAIQ,gBAAgB;oBAURH;gBATV,IAAIP,SAASA,UAAUU,gBAAgB;oBACrC,MAAM,IAAIC,uBAAiB,CACzB,CAAC,6FAA6F,EAAEb,WAAWc,IAAI,CAAC,MAAM,EAAEZ,MAAM,KAAK,EAAEK,MAAMO,IAAI,CAAC,MAAM,EAAEF,gBAAgB;gBAE5K;gBAEAV,QAAQU;gBACR,sFAAsF;gBACtF,4DAA4D;gBAC5DP,kBAAAA,mBAAAA,QAAAA,SAAUI,+BAAAA,gBAAgBN,UAAU,cAA1BM,mDAAAA,6BAA4BH,kBAAkB;YAG1D;QACF;QAEA,OAAO;YACL,GAAGN,UAAU;YACbG,YAAY;gBACV,GAAGH,WAAWG,UAAU;gBACxBC,oBAAoBF;gBACpBI,oBAAoBD;YACtB;QACF;IACF;IAESU,oBACPC,WAA2C,EACJ;YAIpCA;QAHH,IACEA,YAAYf,IAAI,KAAK,mBACrBe,YAAYC,aAAa,CAACC,MAAM,IAChC,GAACF,0BAAAA,YAAYb,UAAU,cAAtBa,8CAAAA,wBAAwBG,mBAAmB,GAC5C;YACA,MAAM,EAAED,MAAM,EAAE,GAAGF,YAAYC,aAAa;YAC5C,OAAO;gBACL,GAAGD,WAAW;gBACdb,YAAY;oBACV,GAAGa,YAAYb,UAAU;oBACzBgB,qBACE,OAAOD,WAAW,aACd,CACEE,MACAC,KACAC,aACAC,mBACAC;wBAEA,+EAA+E;wBAC/E,MAAMC,sBAAsBC,OAAOC,MAAM,CAACL,aAAaE;wBACvD,OAAOI,IAAAA,mBAAa,EAClB,AAACV,OACCE,MACAC,KACAI,sBAEFI;oBAEJ,IACA;wBACEC,SAAS,CAAC;wBACV,GAAGZ,MAAM;oBACX;gBACR;YACF;QACF;QAEA,OAAO;YACL,GAAGF,WAAW;QAChB;IACF;IAESe,YACPC,QAA0E,EAC1EhB,WAA2C,EACc;YACZA,yBAQzBA,0BAeAiB;QAvBpB,IAAIjB,YAAYf,IAAI,KAAK,mBAAmB,GAACe,0BAAAA,YAAYb,UAAU,cAAtBa,8CAAAA,wBAAwBG,mBAAmB,GAAE;YACxF,OAAOa;QACT;QAEA,MAAMC,eAAe,IAAI,CAACvB,UAAU,CAACC,aAAa,CAACK,YAAYkB,UAAU;QACzE,0FAA0F;QAC1F,2FAA2F;QAC3F,gFAAgF;QAChF,MAAMC,eAAcnB,2BAAAA,YAAYb,UAAU,cAAtBa,+CAAAA,yBAAwBoB,mBAAmB;QAI/D,MAAMC,cAAc,IAAIC,IAAI;YAACtB,YAAYkB,UAAU;SAAC;QAEpD,IAAID,aAAahC,IAAI,KAAK,eAAegC,aAAahC,IAAI,KAAK,UAAU;YACvE,KAAK,MAAMM,SAAS0B,aAAazB,UAAU,CAAE;oBAEvCC;gBADJ,MAAMA,kBAAkB,IAAI,CAACC,UAAU,CAACC,aAAa,CAACJ,OAAO;gBAC7D,KAAIE,8BAAAA,gBAAgBN,UAAU,cAA1BM,kDAAAA,4BAA4BL,kBAAkB,EAAE;oBAClDiC,YAAYE,GAAG,CAAC9B,gBAAgBK,IAAI;gBACtC;YACF;QACF;QAEA,MAAM0B,eAAcP,2BAAAA,aAAa9B,UAAU,cAAvB8B,+CAAAA,yBAAyBQ,mBAAmB;QAIhE,IAAI,CAACD,aAAa;YAChB,MAAM,IAAIE,MAAM,CAAC,+BAA+B,EAAET,aAAanB,IAAI,EAAE;QACvE;QAEA,OAAO,CAAC6B,QAAQvB,MAAMwB,SAASC;YAC7B,wFAAwF;YACxF,yCAAyC;YACzC,IAAIC,UAAUC,IAAAA,iCAAgB,EAACH,SAASC,KAAKG,IAAI,EAAEH,KAAKX,UAAU,CAACpB,IAAI,EAAE6B;YAEzE,IAAI,CAACG,SAAS;gBACZ,KAAK,MAAMZ,cAAcG,YAAa;oBACpCS,UAAUC,IAAAA,iCAAgB,EAACH,SAASC,KAAKG,IAAI,EAAEd,YAAYS;oBAC3D,IAAIG,SAAS;wBACX;oBACF;gBACF;YACF;YAEA,IAAI,AAAC,CAAA,CAACX,eAAeA,YAAYQ,QAAQE,MAAMD,QAAO,KAAME,SAAS;gBACnE,yFAAyF;gBACzF,wFAAwF;gBACxF,yFAAyF;gBACzFG,IAAAA,gCAAe,EAACL,SAASC,MAAMC,SAASH;gBAExC,OAAOX,SAASW,QAAQvB,MAAMwB,SAASC;YACzC;YAEA,OAAOL,YAAYI,SAChBM,aAAa,CAACL,MAAMF,QACpBQ,IAAI,CAAC,CAACC,SAAWpB,SAASoB,QAAQhC,MAAMwB,SAASC;QACtD;IACF;AACF;AAEA,2EAA2E,GAC3E,SAAShB,WAAWwB,QAAmB;IACrC,OAAOA,WAAW;QAAEvB,SAAS,CAAC;QAAG,GAAGuB,QAAQ;IAAC,IAAI;AACnD;AAEAC,aAAa,CAACC,cAAc,CAAC1D,YAAYJ,qBAAqB,CAAC"}
@@ -9,11 +9,11 @@ Object.defineProperty(exports, "ModelLoader", {
9
9
  }
10
10
  });
11
11
  const _core = require("@pothos/core");
12
+ const _selectionmapper = require("@pothos/selection-mapper");
12
13
  const _drizzleorm = require("drizzle-orm");
14
+ const _adapter = require("./utils/adapter.js");
13
15
  const _config = require("./utils/config.js");
14
- const _loadermap = require("./utils/loader-map.js");
15
16
  const _mapquery = require("./utils/map-query.js");
16
- const _selections = require("./utils/selections.js");
17
17
  function _define_property(obj, key, value) {
18
18
  if (key in obj) {
19
19
  Object.defineProperty(obj, key, {
@@ -42,67 +42,82 @@ class ModelLoader {
42
42
  return this.columns.length > 1 ? values : values[0];
43
43
  }
44
44
  getSelection(info) {
45
- const key = (0, _loadermap.cacheKey)(info.parentType.name, info.path);
46
- if (!this.queryCache.has(key)) {
47
- const selection = (0, _mapquery.selectionStateFromInfo)(this.config, this.context, info);
48
- this.queryCache.set(key, {
49
- selection,
50
- query: (0, _selections.selectionToQuery)(this.config, selection)
51
- });
45
+ const key = (0, _selectionmapper.cacheKey)(info.parentType.name, info.path);
46
+ if (!this.rowCache.has(key)) {
47
+ this.rowCache.set(key, _selectionmapper.Plan.forParentRow((0, _adapter.drizzleAdapter)(this.config), this.context, info));
52
48
  }
53
- return this.queryCache.get(key);
49
+ return this.rowCache.get(key);
54
50
  }
55
51
  getSelectionForField(info, typeName) {
56
- const key = (0, _loadermap.cacheKey)(typeName, info.path);
57
- if (!this.queryCache.has(key)) {
58
- const selection = (0, _mapquery.stateFromInfo)({
52
+ const key = (0, _selectionmapper.cacheKey)(typeName, info.path);
53
+ if (!this.planCache.has(key)) {
54
+ this.planCache.set(key, // Walked without paths, so there is always a plan.
55
+ (0, _mapquery.planFromInfo)({
59
56
  config: this.config,
60
57
  context: this.context,
61
58
  info,
62
59
  typeName
63
- });
64
- this.queryCache.set(key, {
65
- selection,
66
- query: (0, _selections.selectionToQuery)(this.config, selection)
67
- });
60
+ }));
68
61
  }
69
- return this.queryCache.get(key);
62
+ return this.planCache.get(key);
70
63
  }
71
- async loadSelection(info, model) {
72
- const { selection, query } = this.getSelection(info);
73
- const result = await this.stageQuery(selection, query, model);
74
- if (result) {
75
- const mappings = selection.mappings[info.path.key];
76
- if (mappings) {
77
- (0, _loadermap.setLoaderMappings)(this.context, info, mappings.mappings);
64
+ /**
65
+ * `model` reloaded with the selection of the field `info` resolves. A synchronous selection
66
+ * stages synchronously, so every row resolved in a tick joins the same batch; only a selection
67
+ * with an async select beneath the field waits for it.
68
+ */ loadSelection(info, model) {
69
+ const selection = this.getSelection(info);
70
+ return (0, _core.isThenable)(selection) ? selection.then((settled)=>this.loadWith(settled, info, model)) : this.loadWith(selection, info, model);
71
+ }
72
+ loadWith(played, info, model) {
73
+ return this.stageQuery(played, model).then((result)=>{
74
+ if (result) {
75
+ const mapping = played.mappings[`${info.parentType.name}@${info.path.key}`];
76
+ if (mapping) {
77
+ // Recorded for the field itself too, so its resolver finds the pathInfo it was planned
78
+ // with, along with the mappings of the fields beneath it. Against `result` alone: this
79
+ // load fetched one row, so the field's own mapping is not the whole field's to claim.
80
+ // A sibling row that falls back on a later tick would otherwise read it as proof of
81
+ // having been loaded and resolve against a row that never carried the data.
82
+ (0, _selectionmapper.setRowFieldMapping)(this.context, info, mapping, result);
83
+ }
78
84
  }
79
- }
80
- return result;
85
+ return result;
86
+ });
81
87
  }
82
- async loadSelectionForField(info, model, returnType) {
83
- const { selection, query } = this.getSelectionForField(info, returnType);
84
- const result = await this.stageQuery(selection, query, model);
85
- if (result) {
86
- (0, _loadermap.setLoaderMappings)(this.context, info, selection.mappings);
87
- }
88
- return result;
88
+ /** A node loaded by id with the selection beneath the field `info` resolves, as `returnType`. */ loadSelectionForField(info, model, returnType) {
89
+ const selection = this.getSelectionForField(info, returnType);
90
+ return (0, _core.isThenable)(selection) ? selection.then((settled)=>this.loadFieldWith(settled.play(), info, model)) : this.loadFieldWith(selection.play(), info, model);
91
+ }
92
+ loadFieldWith(played, info, model) {
93
+ return this.stageQuery(played, model).then((result)=>{
94
+ if (result) {
95
+ // Relay nodes of different types share this field path. Each node plan contributes
96
+ // its type-qualified mappings, as a queryFromInfo plan would.
97
+ (0, _selectionmapper.setLoaderMappings)(this.context, info, played.mappings);
98
+ }
99
+ return result;
100
+ });
89
101
  }
90
- stageQuery(selection, query, model) {
102
+ stageQuery(played, model) {
91
103
  for (const entry of this.staged){
92
- if ((0, _selections.selectionCompatible)(entry.state, query)) {
93
- (0, _selections.mergeSelection)(this.config, entry.state, query);
104
+ // Node to node: the batch takes the field's play whole, never through a query.
105
+ if (this.adapter.canMergeNode(entry.root, played.root)) {
106
+ this.adapter.mergeNode(entry.root, played.root);
94
107
  if (!entry.models.has(model)) {
95
108
  entry.models.set(model, createResolvablePromise());
96
109
  }
97
110
  return entry.models.get(model).promise;
98
111
  }
99
112
  }
100
- return this.initLoad(selection, model);
113
+ return this.initLoad(played, model);
101
114
  }
102
- initLoad(selection, model) {
115
+ initLoad(played, model) {
103
116
  const promise = createResolvablePromise();
117
+ const root = this.adapter.createNode(played.root.model);
118
+ this.adapter.mergeNode(root, played.root);
104
119
  const entry = {
105
- state: selection,
120
+ root,
106
121
  models: new Map([
107
122
  [
108
123
  model,
@@ -117,7 +132,7 @@ class ModelLoader {
117
132
  this.staged.delete(entry);
118
133
  const api = client.query[this.modelName];
119
134
  const query = api.findMany({
120
- ...(0, _selections.selectionToQuery)(this.config, selection),
135
+ ...this.adapter.toQuery(entry.root),
121
136
  where: {
122
137
  RAW: (table)=>(0, _drizzleorm.inArray)(this.selectSQL(table), [
123
138
  ...entry.models.keys()
@@ -126,9 +141,17 @@ class ModelLoader {
126
141
  });
127
142
  query.then((results)=>{
128
143
  for (const [model, promise] of entry.models.entries()){
129
- const result = results.find((row)=>this.primaryKey.every((key)=>row[this.config.columnToTsName(key)] === model[this.config.columnToTsName(key)]));
144
+ // Matched on the columns the batch was keyed by, which are the columns a row of
145
+ // `entry.models` carries: a node loaded by a column other than the primary key
146
+ // has only that one.
147
+ const result = results.find((row)=>this.columns.every((key)=>{
148
+ const name = this.config.columnToTsName(key);
149
+ const actual = row[name];
150
+ const expected = model[name];
151
+ return actual === expected || actual instanceof Date && expected instanceof Date && actual.getTime() === expected.getTime();
152
+ }));
130
153
  if (result) {
131
- promise.resolve(result !== null && result !== void 0 ? result : null);
154
+ promise.resolve(result);
132
155
  } else {
133
156
  promise.reject(new Error(`Model ${this.modelName}(${this.sqlForModel(model)}) not found`));
134
157
  }
@@ -150,9 +173,16 @@ class ModelLoader {
150
173
  _define_property(this, "context", void 0);
151
174
  _define_property(this, "builder", void 0);
152
175
  _define_property(this, "modelName", void 0);
153
- _define_property(this, "queryCache", new Map());
176
+ // One plan per `Type@path`, a promise while a select beneath the field is async. A parent-row
177
+ // plan is played where it is made, since it is never played behind another selection; a field's
178
+ // plan is played per load, so no two loads share a node.
179
+ _define_property(this, "rowCache", new Map());
180
+ _define_property(this, "planCache", new Map());
181
+ // Each batch owns the node it accumulates into, so nothing a cached plan or play holds is
182
+ // changed by a row joining the batch.
154
183
  _define_property(this, "staged", new Set());
155
184
  _define_property(this, "config", void 0);
185
+ _define_property(this, "adapter", void 0);
156
186
  _define_property(this, "table", void 0);
157
187
  _define_property(this, "columns", void 0);
158
188
  _define_property(this, "primaryKey", void 0);
@@ -161,6 +191,7 @@ class ModelLoader {
161
191
  this.builder = builder;
162
192
  this.modelName = modelName;
163
193
  this.config = (0, _config.getSchemaConfig)(builder);
194
+ this.adapter = (0, _adapter.drizzleAdapter)(this.config);
164
195
  this.table = this.config.relations[modelName];
165
196
  this.primaryKey = this.config.getPrimaryKey(modelName);
166
197
  this.columns = columns !== null && columns !== void 0 ? columns : this.primaryKey;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/model-loader.ts"],"names":["ModelLoader","forModel","modelName","builder","columns","createContextCache","model","sqlForModel","values","map","key","columnName","config","columnToTsName","Error","length","getSelection","info","cacheKey","parentType","name","path","queryCache","has","selection","selectionStateFromInfo","context","set","query","selectionToQuery","get","getSelectionForField","typeName","stateFromInfo","loadSelection","result","stageQuery","mappings","setLoaderMappings","loadSelectionForField","returnType","entry","staged","selectionCompatible","state","mergeSelection","models","createResolvablePromise","promise","initLoad","Map","add","nextTick","client","getClient","then","delete","api","findMany","where","RAW","table","inArray","selectSQL","keys","results","entries","find","row","primaryKey","every","resolve","reject","err","catch","setTimeout","Set","getSchemaConfig","relations","getPrimaryKey","column","Object","getColumns","tblColumn","sql","join","getSQL","resolveFn","rejectFn","Promise"],"mappings":"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"}
1
+ {"version":3,"sources":["../src/model-loader.ts"],"names":["ModelLoader","forModel","modelName","builder","columns","createContextCache","model","sqlForModel","values","map","key","columnName","config","columnToTsName","Error","length","getSelection","info","cacheKey","parentType","name","path","rowCache","has","set","Plan","forParentRow","drizzleAdapter","context","get","getSelectionForField","typeName","planCache","planFromInfo","loadSelection","selection","isThenable","then","settled","loadWith","played","stageQuery","result","mapping","mappings","setRowFieldMapping","loadSelectionForField","returnType","loadFieldWith","play","setLoaderMappings","entry","staged","adapter","canMergeNode","root","mergeNode","models","createResolvablePromise","promise","initLoad","createNode","Map","add","nextTick","client","getClient","delete","api","query","findMany","toQuery","where","RAW","table","inArray","selectSQL","keys","results","entries","find","row","every","actual","expected","Date","getTime","resolve","reject","err","catch","setTimeout","Set","primaryKey","getSchemaConfig","relations","getPrimaryKey","column","Object","getColumns","tblColumn","sql","join","getSQL","resolveFn","rejectFn","Promise"],"mappings":"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"}