orchid-graphql 1.9.0 → 2.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/dist/index.js DELETED
@@ -1,481 +0,0 @@
1
- // ../base/src/utils/is-plain-object.ts
2
- function isPlainObject(obj) {
3
- return typeof obj === "object" && !Array.isArray(obj);
4
- }
5
-
6
- // ../base/src/filter/filter.ts
7
- function filterQuery(orm2, query, filter, options) {
8
- const { context, modifiers } = options ?? {};
9
- if (!filter) {
10
- return query;
11
- }
12
- if (!isPlainObject(filter)) {
13
- throw new Error(`Invalid filter: ${filter}, must be plain object.`);
14
- }
15
- for (const [field, value] of Object.entries(filter)) {
16
- if (value === void 0) {
17
- continue;
18
- }
19
- if (modifiers?.[field]) {
20
- query = modifiers[field](query, value, context);
21
- } else {
22
- const [table_field, op0] = field.split("__");
23
- const op = op0?.toLowerCase();
24
- query = orm2.where(query, table_field, op, value);
25
- }
26
- }
27
- return query;
28
- }
29
-
30
- // ../base/src/paginators/cursor.ts
31
- import { Buffer } from "buffer";
32
- function defineCursorPaginator(options = {}) {
33
- return new CursorPaginator(options);
34
- }
35
- var CursorPaginator = class {
36
- path = ["nodes"];
37
- pageSize;
38
- fields;
39
- constructor(options = {}) {
40
- this.pageSize = options.take ?? 10;
41
- this.fields = options.fields?.map((field) => {
42
- if (field.startsWith("-")) {
43
- return { name: field.slice(1), desc: true };
44
- } else {
45
- return { name: field, desc: false };
46
- }
47
- });
48
- }
49
- paginate(query, context) {
50
- const { orm: orm2 } = context.graph;
51
- const { args } = context.tree;
52
- const pageSize = args.take ?? this.pageSize;
53
- const cursor = args.cursor;
54
- const table = orm2.get_query_table(query);
55
- const orderFields = (this.fields ? this.fields.map((f) => ({
56
- field: f.name,
57
- dir: f.desc ? "DESC" : "ASC"
58
- })) : orm2.get_query_order(query)).map((o) => ({ ...o, alias: "_order_" + o.field }));
59
- if (this.fields) {
60
- query = orm2.reset_query_order(query);
61
- for (const { alias, dir } of orderFields) {
62
- query = orm2.add_query_order(query, { field: alias, dir });
63
- }
64
- }
65
- if (!orderFields.length) {
66
- throw new Error("Query must be ordered.");
67
- }
68
- for (const { field, alias } of orderFields) {
69
- query = orm2.select_field(query, { field, as: alias });
70
- }
71
- if (cursor) {
72
- const parsedCursor = parseCursor(cursor);
73
- const left = [];
74
- const right = [];
75
- for (let i = 0; i < orderFields.length; ++i) {
76
- const { field, alias, dir } = orderFields[i];
77
- const [expressions, placeholders] = dir === "ASC" ? [left, right] : [right, left];
78
- expressions.push(`"${table}"."${field}"`);
79
- placeholders.push("$" + alias);
80
- }
81
- const sqlExpr = `(${left.join(",")}) > (${right.join(",")})`;
82
- const bindings = Object.fromEntries(
83
- orderFields.map(({ alias }, i) => [alias, parsedCursor[i]])
84
- );
85
- query = orm2.where_raw(query, sqlExpr, bindings);
86
- }
87
- query = orm2.set_query_limit(query, pageSize + 1);
88
- function createNodeCursor(node) {
89
- return createCursor(
90
- orderFields.map(({ field, alias }) => {
91
- const value = node[alias];
92
- if (value === void 0) {
93
- throw new Error(
94
- `Unable to create cursor: undefined field ${field} (${alias})`
95
- );
96
- }
97
- return String(value);
98
- })
99
- );
100
- }
101
- return orm2.set_query_page_result(query, (nodes) => {
102
- let cursor2;
103
- if (nodes.length > pageSize) {
104
- cursor2 = createNodeCursor(nodes[pageSize - 1]);
105
- nodes = nodes.slice(0, pageSize);
106
- }
107
- return { nodes, cursor: cursor2 };
108
- });
109
- }
110
- };
111
- function createCursor(parts) {
112
- return Buffer.from(parts.map(String).join(String.fromCharCode(0))).toString(
113
- "base64url"
114
- );
115
- }
116
- function parseCursor(cursor) {
117
- return Buffer.from(cursor, "base64url").toString().split(String.fromCharCode(0));
118
- }
119
-
120
- // ../base/src/utils/run-after.ts
121
- function run_after_query(orm2, query, transform) {
122
- return orm2.run_after_query(query, async (result) => {
123
- if (Array.isArray(result)) {
124
- const result1 = await Promise.all(result.map(transform));
125
- return result1.filter(Boolean);
126
- } else if (result) {
127
- return transform(result);
128
- } else {
129
- return result;
130
- }
131
- });
132
- }
133
-
134
- // ../base/src/resolvers/field.ts
135
- function parse_field_options(options) {
136
- const { tableField, modelField } = options;
137
- if (tableField && modelField) {
138
- throw new Error(
139
- `Both tableField and modelField are defined. Use only one of them.`
140
- );
141
- }
142
- return { ...options, tableField: tableField || modelField };
143
- }
144
- function defineFieldResolver(options = {}) {
145
- const { tableField, modify, transform } = parse_field_options(options);
146
- return function resolve(query, context) {
147
- const { field } = context;
148
- if (modify) {
149
- query = modify(query, context);
150
- } else {
151
- query = context.graph.orm.select_field(query, {
152
- field: tableField || field,
153
- as: field
154
- });
155
- }
156
- if (transform) {
157
- query = run_after_query(context.graph.orm, query, async (instance) => {
158
- instance[field] = await transform(instance[field], instance, context);
159
- return instance;
160
- });
161
- }
162
- return query;
163
- };
164
- }
165
-
166
- // ../base/src/resolvers/graph.ts
167
- import { parseResolveInfo } from "graphql-parse-resolve-info";
168
- var GraphResolver = class {
169
- constructor(orm2, type_resolvers, options = {}) {
170
- this.orm = orm2;
171
- this.type_resolvers = type_resolvers;
172
- this.options = options;
173
- }
174
- resolve(query, { info, ...context }) {
175
- const tree = this._get_resolve_tree(info);
176
- return this._resolve_type(query, { ...context, tree });
177
- }
178
- resolvePage(query, paginator, { info, ...context }) {
179
- const tree = this._get_resolve_tree(info);
180
- return this._resolve_page(query, paginator, { ...context, tree });
181
- }
182
- _get_resolve_tree(info) {
183
- return parseResolveInfo(info);
184
- }
185
- _resolve_type(query, context) {
186
- let { tree } = context;
187
- if (context.path) {
188
- for (const field of context.path) {
189
- const type2 = Object.keys(tree.fieldsByTypeName)[0];
190
- tree = tree.fieldsByTypeName[type2][field];
191
- if (!tree) {
192
- return Promise.resolve();
193
- }
194
- }
195
- }
196
- const type = Object.keys(tree.fieldsByTypeName)[0];
197
- const type_resolver = this.type_resolvers[type];
198
- if (!type_resolver) {
199
- throw new Error(`Resolver not found for type ${type}.`);
200
- }
201
- return type_resolver.resolve(query, {
202
- ...context,
203
- graph: this,
204
- tree,
205
- type,
206
- path: void 0
207
- });
208
- }
209
- _resolve_page(query, paginator, context) {
210
- if (context.path) {
211
- throw new Error("Paginating under non-root path not yet supported.");
212
- }
213
- query = this._resolve_type(query, { ...context, path: paginator.path });
214
- return paginator.paginate(query, {
215
- ...context,
216
- graph: this
217
- });
218
- }
219
- };
220
-
221
- // ../base/src/resolvers/page.ts
222
- function definePageResolver(paginator, options = {}) {
223
- const { tableField, modify } = parse_field_options(options);
224
- return function resolve(query, context) {
225
- const { graph, field } = context;
226
- const pagination_context = {};
227
- query = graph.orm.select_relation(query, {
228
- relation: tableField || field,
229
- as: field,
230
- modify(subquery) {
231
- subquery = modify ? modify(subquery, context) : subquery;
232
- subquery = graph._resolve_page(subquery, paginator, context);
233
- subquery = graph.orm.modify_subquery_pagination(
234
- subquery,
235
- pagination_context
236
- );
237
- return subquery;
238
- }
239
- });
240
- query = graph.orm.finish_query_pagination(query, field, pagination_context);
241
- return query;
242
- };
243
- }
244
-
245
- // ../base/src/resolvers/relation.ts
246
- function defineRelationResolver(options = {}) {
247
- const { tableField, filters, modify } = parse_field_options(options);
248
- return function resolve(query, context) {
249
- const { graph, field } = context;
250
- return graph.orm.select_relation(query, {
251
- relation: tableField || field,
252
- as: field,
253
- modify(subquery) {
254
- subquery = graph._resolve_type(subquery, { ...context, filters });
255
- return modify ? modify(subquery, context) : subquery;
256
- }
257
- });
258
- };
259
- }
260
-
261
- // ../base/src/resolvers/table.ts
262
- var TableResolver = class {
263
- constructor(orm2, table, options = {}) {
264
- this.orm = orm2;
265
- this.table = table;
266
- this.options = options;
267
- this.relations = new Set(orm2.get_table_relations(table));
268
- this.virtual_fields = new Set(orm2.get_table_virtual_fields(table));
269
- this.modifiers = { ...orm2.get_table_modifiers(table), ...options.modifiers };
270
- const { fields } = options;
271
- if (fields) {
272
- this.table_field_resolvers = Object.keys(fields).reduce((resolvers, field) => {
273
- const r0 = fields[field];
274
- const r = typeof r0 === "function" ? r0 : r0 === true ? this._get_default_field_resolver(field) : typeof r0 === "string" ? this._get_default_field_resolver(field, r0) : void 0;
275
- if (r === void 0) {
276
- throw new Error(
277
- `Field resolver must be a function, string, or true; found ${typeof r0}.`
278
- );
279
- }
280
- resolvers[field] = r;
281
- return resolvers;
282
- }, {});
283
- }
284
- }
285
- // Introspection results
286
- relations;
287
- virtual_fields;
288
- modifiers;
289
- table_field_resolvers;
290
- /** Modify query to select fields/relations and filter the result set. */
291
- resolve(query, context) {
292
- const { modify, transform } = this.options;
293
- const { graph, tree, type, filters } = context;
294
- const query_table = this.orm.get_query_table(query);
295
- const table_table = this.orm.get_table_table(this.table);
296
- if (query_table !== table_table) {
297
- throw new Error(
298
- `Mismatching query table for type ${type}: expected ${table_table}, received ${query_table}.`
299
- );
300
- }
301
- const allow_all_fields = this.options.allowAllFields ?? graph.options.allowAllFields ?? !this.options.fields;
302
- if (!allow_all_fields && !this.table_field_resolvers) {
303
- throw new Error(
304
- `Resolver for type ${type} must either allow all fields or specify options.fields.`
305
- );
306
- }
307
- if (modify) {
308
- query = modify(query, context);
309
- }
310
- for (const subtree of Object.values(tree.fieldsByTypeName[type])) {
311
- const field = subtree.name;
312
- const r = this.table_field_resolvers?.[field] || (allow_all_fields ? this._get_default_field_resolver(field) : void 0);
313
- if (!r) {
314
- throw new Error(`No field resolver defined for field ${type}.${field}.`);
315
- }
316
- if (r) {
317
- query = r(query, { ...context, tree: subtree, field });
318
- }
319
- }
320
- const filter = context.tree.args?.filter;
321
- if (filter) {
322
- const allowAllFilters = this.options.allowAllFilters ?? graph.options.allowAllFilters;
323
- const filterConfig = allowAllFilters ? true : filters;
324
- if (filterConfig) {
325
- query = filterQuery(context.graph.orm, query, filter, {
326
- modifiers: this.modifiers,
327
- context
328
- });
329
- }
330
- }
331
- if (transform) {
332
- query = run_after_query(this.orm, query, (instance) => {
333
- return transform(instance, context);
334
- });
335
- }
336
- query = this.orm.prevent_select_all(query);
337
- return query;
338
- }
339
- /**
340
- * Create field resolver which will modify query to resolve GraphQL field.
341
- */
342
- _get_default_field_resolver(field, tableField) {
343
- const table_field_lookup = tableField || field;
344
- if (this.options.modifiers?.[table_field_lookup] || this.virtual_fields.has(table_field_lookup)) {
345
- return (query) => query;
346
- } else if (this.relations.has(table_field_lookup)) {
347
- return defineRelationResolver({ tableField });
348
- } else {
349
- return defineFieldResolver({ tableField });
350
- }
351
- }
352
- };
353
-
354
- // src/orm/orm.ts
355
- import { raw } from "orchid-orm";
356
- var orm = {
357
- Table: void 0,
358
- Query: void 0,
359
- QueryTransform: void 0,
360
- // Reflection
361
- get_table_table(table) {
362
- return table.table;
363
- },
364
- get_table_relations(table) {
365
- return Object.keys(table.relations);
366
- },
367
- get_table_virtual_fields() {
368
- return [];
369
- },
370
- get_table_modifiers() {
371
- return void 0;
372
- },
373
- get_query_table(query) {
374
- if (!query.table) {
375
- throw new Error("Query must have table.");
376
- }
377
- return query.table;
378
- },
379
- // Select
380
- select_field(query, { field, as }) {
381
- return query.select({ [as]: field });
382
- },
383
- select_relation(query, { relation, as, modify }) {
384
- return query.select({
385
- [as]: (q) => modify(q[relation])
386
- });
387
- },
388
- // Find
389
- where(query, field, op, value) {
390
- return query.where({ [field]: op ? { [op]: value } : value });
391
- },
392
- where_raw(query, expression, bindings) {
393
- return query.where(raw({ raw: expression, values: bindings }));
394
- },
395
- // Order & Limit
396
- reset_query_order(query) {
397
- return query.clear("order");
398
- },
399
- add_query_order(query, { field, dir }) {
400
- return query.order({ [field]: dir });
401
- },
402
- get_query_order(query) {
403
- return query.q.order?.flatMap((orderItem) => {
404
- if (typeof orderItem === "string") {
405
- return { field: "orderItem", dir: "ASC" };
406
- } else if (typeof orderItem === "object") {
407
- return Object.entries(orderItem).map(([field, order]) => {
408
- const [dir] = order.split(" ", 1);
409
- if (dir === "ASC" || dir === "DESC") {
410
- return { field, dir };
411
- } else {
412
- throw new Error("Unsupported order: " + order);
413
- }
414
- });
415
- } else {
416
- throw new TypeError("Unsupported order type: " + orderItem);
417
- }
418
- }) || [];
419
- },
420
- set_query_limit(query, limit) {
421
- return query.limit(limit);
422
- },
423
- // Pagination helpers
424
- set_query_page_result(query, get_page) {
425
- return query.transform((nodes) => get_page(nodes));
426
- },
427
- modify_subquery_pagination(subquery) {
428
- return subquery;
429
- },
430
- finish_query_pagination(query) {
431
- return query;
432
- },
433
- // Misc
434
- run_after_query(query, fn) {
435
- return query.afterQuery((data) => fn(data));
436
- },
437
- prevent_select_all(query) {
438
- return query;
439
- }
440
- };
441
-
442
- // src/filter.ts
443
- function filterQuery2(query, filter, options) {
444
- return filterQuery(orm, query, filter, options);
445
- }
446
-
447
- // src/resolvers/graph.ts
448
- function createGraphResolver(types, options) {
449
- return new OrchidGraphResolver(types, options);
450
- }
451
- var OrchidGraphResolver = class extends GraphResolver {
452
- constructor(types, options = {}) {
453
- super(orm, types, options);
454
- this.types = types;
455
- this.options = options;
456
- }
457
- resolve(query, options) {
458
- return super.resolve(query, options);
459
- }
460
- };
461
-
462
- // src/resolvers/table.ts
463
- function defineTableResolver(table, options = {}) {
464
- return new TableResolver(orm, table, options);
465
- }
466
- export {
467
- createGraphResolver,
468
- defineCursorPaginator as cursor,
469
- defineCursorPaginator,
470
- defineFieldResolver,
471
- definePageResolver,
472
- defineRelationResolver,
473
- defineTableResolver,
474
- defineFieldResolver as field,
475
- filterQuery2 as filterQuery,
476
- createGraphResolver as graph,
477
- definePageResolver as page,
478
- defineRelationResolver as relation,
479
- defineTableResolver as table
480
- };
481
- //# sourceMappingURL=index.js.map
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../base/src/utils/is-plain-object.ts","../../base/src/filter/filter.ts","../../base/src/paginators/cursor.ts","../../base/src/utils/run-after.ts","../../base/src/resolvers/field.ts","../../base/src/resolvers/graph.ts","../../base/src/resolvers/page.ts","../../base/src/resolvers/relation.ts","../../base/src/resolvers/table.ts","../src/orm/orm.ts","../src/filter.ts","../src/resolvers/graph.ts","../src/resolvers/table.ts"],"sourcesContent":["export function isPlainObject(obj: any): obj is Record<string, any> {\n\treturn typeof obj === \"object\" && !Array.isArray(obj)\n}\n","import type { OrmAdapter } from \"../orm/orm\"\nimport { isPlainObject } from \"../utils/is-plain-object\"\n\n// TODO: per-field definitions\nexport type FilterConfig = boolean\n\nexport type FieldFilterScalarValue = null | string | number | boolean\nexport type FieldFilterValue = FieldFilterScalarValue | Exclude<FieldFilterScalarValue, null>[]\nexport type FilterValue = { [property: string]: FieldFilterValue }\n\nexport type FilterQueryOptions<Orm extends OrmAdapter, Context = unknown> = {\n\tmodifiers?: FilterModifiers<Orm, Context>\n} & (Context extends undefined ? {\n\tcontext?: Context\n} : {\n\tcontext: Context\n})\n\nexport type FilterModifier<Orm extends OrmAdapter, Context> = (\n\tquery: Orm[\"Query\"],\n\tvalue: any,\n\tcontext: Context,\n) => Orm[\"Query\"]\n\nexport type FilterModifiers<Orm extends OrmAdapter, Context> = Record<string, FilterModifier<Orm, Context>>\n\nexport function filterQuery<Orm extends OrmAdapter, Context>(\n\torm: Orm,\n\tquery: Orm[\"Query\"],\n\tfilter: FilterValue,\n\toptions?: FilterQueryOptions<Orm, Context>,\n): Orm[\"Query\"] {\n\tconst { context, modifiers } = options ?? {}\n\n\tif (!filter) {\n\t\treturn query\n\t}\n\tif (!isPlainObject(filter)) {\n\t\tthrow new Error(`Invalid filter: ${filter}, must be plain object.`)\n\t}\n\tfor (const [field, value] of Object.entries(filter)) {\n\t\tif (value === undefined) {\n\t\t\t// Support optional GraphQL arguments in filter\n\t\t\tcontinue\n\t\t}\n\t\tif (modifiers?.[field]) {\n\t\t\tquery = modifiers[field](query, value, context!) // TODO improve types, get rid of !\n\t\t} else {\n\t\t\tconst [table_field, op0] = field.split(\"__\")\n\t\t\tconst op = op0?.toLowerCase()\n\t\t\t// TODO: validate op\n\t\t\tquery = orm.where(query, table_field, op, value)\n\t\t}\n\t}\n\treturn query\n}\n","import { Buffer } from \"node:buffer\"\n\nimport type { OrmAdapter, SortOrder } from \"../orm/orm\"\n\nimport type { PaginateContext, Paginator } from \"./base\"\n\nexport function defineCursorPaginator(\n\toptions: Partial<CursorPaginatorOptions> = {},\n) {\n\treturn new CursorPaginator(options)\n}\n\nexport interface CursorPaginatorOptions {\n\tfields?: string[]\n\ttake?: number\n}\n\nexport interface CursorPaginatorArgs {\n\tcursor?: string\n\ttake?: number\n}\n\nexport interface CursorPaginatorPage<M> {\n\tnodes: M[]\n\tcursor?: string\n}\n\nclass CursorPaginator<Orm extends OrmAdapter, Context>\nimplements Paginator<Orm, Context> {\n\treadonly path = [\"nodes\"]\n\n\treadonly pageSize: number\n\n\treadonly fields?: Array<{\n\t\tname: string\n\t\tdesc: boolean\n\t}>\n\n\tconstructor(options: CursorPaginatorOptions = {}) {\n\t\tthis.pageSize = options.take ?? 10\n\t\tthis.fields = options.fields?.map((field) => {\n\t\t\tif (field.startsWith(\"-\")) {\n\t\t\t\treturn { name: field.slice(1), desc: true }\n\t\t\t} else {\n\t\t\t\treturn { name: field, desc: false }\n\t\t\t}\n\t\t})\n\t}\n\n\tpaginate(query: Orm[\"Query\"], context: PaginateContext<Orm, Context>) {\n\t\tconst { orm } = context.graph\n\t\tconst { args } = context.tree\n\n\t\tconst pageSize = (args.take as number | undefined) ?? this.pageSize\n\t\tconst cursor = args.cursor as string | undefined\n\n\t\tconst table = orm.get_query_table(query)\n\n\t\tconst orderFields = (\n\t\t\tthis.fields\n\t\t\t\t? this.fields.map<SortOrder>(f => ({\n\t\t\t\t\t\tfield: f.name,\n\t\t\t\t\t\tdir: f.desc ? \"DESC\" : \"ASC\",\n\t\t\t\t\t}))\n\t\t\t\t: orm.get_query_order(query)\n\t\t).map(o => ({ ...o, alias: \"_order_\" + o.field }))\n\n\t\tif (this.fields) {\n\t\t\tquery = orm.reset_query_order(query)\n\t\t\tfor (const { alias, dir } of orderFields) {\n\t\t\t\tquery = orm.add_query_order(query, { field: alias, dir })\n\t\t\t}\n\t\t}\n\n\t\tif (!orderFields.length) {\n\t\t\tthrow new Error(\"Query must be ordered.\")\n\t\t}\n\n\t\tfor (const { field, alias } of orderFields) {\n\t\t\tquery = orm.select_field(query, { field, as: alias })\n\t\t}\n\n\t\tif (cursor) {\n\t\t\tconst parsedCursor = parseCursor(cursor)\n\t\t\t// Prepare raw SQL.\n\t\t\t// For example, for (amount asc, id asc) order, that would be:\n\t\t\t// (amount, $id) >= ($amount, id)\n\t\t\tconst left: string[] = []\n\t\t\tconst right: string[] = []\n\t\t\tfor (let i = 0; i < orderFields.length; ++i) {\n\t\t\t\tconst { field, alias, dir } = orderFields[i]\n\t\t\t\tconst [expressions, placeholders]\n\t\t\t\t\t= dir === \"ASC\" ? [left, right] : [right, left]\n\t\t\t\texpressions.push(`\"${table}\".\"${field}\"`)\n\t\t\t\tplaceholders.push(\"$\" + alias)\n\t\t\t}\n\t\t\tconst sqlExpr = `(${left.join(\",\")}) > (${right.join(\",\")})`\n\t\t\tconst bindings = Object.fromEntries(\n\t\t\t\torderFields.map(({ alias }, i) => [alias, parsedCursor[i]]),\n\t\t\t)\n\t\t\tquery = orm.where_raw(query, sqlExpr, bindings)\n\t\t}\n\t\tquery = orm.set_query_limit(query, pageSize + 1)\n\n\t\t// TODO add support for reverse cursor, borrow implementation from orchid-pagination.\n\t\tfunction createNodeCursor(node: any) {\n\t\t\treturn createCursor(\n\t\t\t\torderFields.map(({ field, alias }) => {\n\t\t\t\t\tconst value = node[alias]\n\t\t\t\t\t// TODO add support for custom serializer(s).\n\t\t\t\t\tif (value === undefined) {\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t`Unable to create cursor: undefined field ${field} (${alias})`,\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t\treturn String(value)\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\n\t\treturn orm.set_query_page_result(query, (nodes) => {\n\t\t\tlet cursor: string | undefined\n\t\t\tif (nodes.length > pageSize) {\n\t\t\t\tcursor = createNodeCursor(nodes[pageSize - 1])\n\t\t\t\tnodes = nodes.slice(0, pageSize)\n\t\t\t}\n\t\t\treturn { nodes, cursor }\n\t\t})\n\t}\n}\n\nfunction createCursor(parts: string[]) {\n\treturn Buffer.from(parts.map(String).join(String.fromCharCode(0))).toString(\n\t\t\"base64url\",\n\t)\n}\n\nfunction parseCursor(cursor: string): string[] {\n\treturn Buffer.from(cursor, \"base64url\")\n\t\t.toString()\n\t\t.split(String.fromCharCode(0))\n}\n","import type { OrmAdapter } from \"../orm/orm\"\n\nexport function run_after_query<Orm extends OrmAdapter>(\n\torm: Orm,\n\tquery: Orm[\"Query\"],\n\ttransform: (instance: any) => any,\n): Orm[\"Query\"] {\n\treturn orm.run_after_query(query, async (result) => {\n\t\t// FIXME: returning result is ignored in orchid (unlike objection). Add some hacks instead.\n\t\tif (Array.isArray(result)) {\n\t\t\tconst result1 = await Promise.all(result.map(transform))\n\t\t\treturn result1.filter(Boolean) // Skip empty objects\n\t\t} else if (result) {\n\t\t\treturn transform(result)\n\t\t} else {\n\t\t\t// Supposedly, single query returning NULL\n\t\t\treturn result\n\t\t}\n\t})\n}\n","import type { OrmAdapter } from \"../orm/orm\"\nimport { run_after_query } from \"../utils/run-after\"\n\nimport type { TableResolveContext } from \"./table\"\n\nexport interface FieldResolverOptions<Orm extends OrmAdapter, Context> {\n\t/** Table field (if different from GraphQL field) */\n\ttableField?: string\n\t/** Legacy alias for `tableField`. */\n\tmodelField?: string\n\t/** Custom query modifier (if different than simply selecting a field). */\n\tmodify?: FieldResolveModifier<Orm, Context>\n\t/** Post-process selected value. Return a new value or a promise. */\n\ttransform?(\n\t\tvalue: any,\n\t\tinstance: any,\n\t\tcontext: FieldResolveContext<Orm, Context>,\n\t): any\n}\n\nexport type FieldResolveModifier<Orm extends OrmAdapter, Context> = (\n\tquery: Orm[\"Query\"],\n\tcontext: FieldResolveContext<Orm, Context>,\n) => Orm[\"Query\"]\n\nexport interface FieldResolveContext<Orm extends OrmAdapter, Context>\n\textends TableResolveContext<Orm, Context> {\n\t/** GraphQL field */\n\tfield: string\n}\n\n// That is a coincidence for now.\nexport type FieldResolver<\n\tOrm extends OrmAdapter,\n\tContext,\n> = FieldResolveModifier<Orm, Context>\n\nexport function parse_field_options<\n\tO extends Pick<FieldResolverOptions<any, any>, \"modelField\" | \"tableField\">,\n>(options: O): Omit<O, \"modelField\"> {\n\tconst { tableField, modelField } = options\n\tif (tableField && modelField) {\n\t\tthrow new Error(\n\t\t\t`Both tableField and modelField are defined. Use only one of them.`,\n\t\t)\n\t}\n\treturn { ...options, tableField: tableField || modelField }\n}\n\nexport function defineFieldResolver<Orm extends OrmAdapter, Context>(\n\toptions: FieldResolverOptions<Orm, Context> = {},\n): FieldResolver<Orm, Context> {\n\tconst { tableField, modify, transform } = parse_field_options(options)\n\n\treturn function resolve(query, context) {\n\t\tconst { field } = context\n\t\tif (modify) {\n\t\t\tquery = modify(query, context)\n\t\t} else {\n\t\t\tquery = context.graph.orm.select_field(query, {\n\t\t\t\tfield: tableField || field,\n\t\t\t\tas: field,\n\t\t\t})\n\t\t}\n\t\tif (transform) {\n\t\t\tquery = run_after_query(context.graph.orm, query, async (instance) => {\n\t\t\t\tinstance[field] = await transform(instance[field], instance, context)\n\t\t\t\treturn instance\n\t\t\t})\n\t\t}\n\t\treturn query\n\t}\n}\n","import type { GraphQLResolveInfo } from \"graphql\"\nimport type { ResolveTree } from \"graphql-parse-resolve-info\"\nimport { parseResolveInfo } from \"graphql-parse-resolve-info\"\n\nimport type { FilterConfig } from \"../filter\"\nimport type { OrmAdapter } from \"../orm/orm\"\nimport type { Paginator } from \"../paginators/base\"\n\nimport type { TableResolver, TableResolverOptions } from \"./table\"\n\nexport type GraphResolverOptions<Orm extends OrmAdapter, Context> = Pick<\n\tTableResolverOptions<Orm, Context>,\n\t\"allowAllFields\" | \"allowAllFilters\"\n>\n\nexport interface GraphResolveOptions<Context> {\n\tinfo: GraphQLResolveInfo\n\tcontext: Context\n\tfilters?: FilterConfig\n\t/** Subfield path if not resolving root query, e.g.: ['user'] */\n\tpath?: string[]\n}\n\nexport type GraphResolveContext<Context> = Omit<\n\tGraphResolveOptions<Context>,\n\t\"info\"\n> & {\n\ttree: ResolveTree\n}\n\nexport class GraphResolver<Orm extends OrmAdapter, Context> {\n\tconstructor(\n\t\treadonly orm: Orm,\n\t\treadonly type_resolvers: Record<string, TableResolver<Orm, Context>>,\n\t\treadonly options: GraphResolverOptions<Orm, Context> = {},\n\t) {}\n\n\tresolve<T>(\n\t\tquery: Orm[\"Query\"],\n\t\t{ info, ...context }: GraphResolveOptions<Context>,\n\t): Promise<T> {\n\t\tconst tree = this._get_resolve_tree(info)\n\t\treturn this._resolve_type(query, { ...context, tree })\n\t}\n\n\tresolvePage(\n\t\tquery: Orm[\"Query\"],\n\t\tpaginator: Paginator<Orm, Context>,\n\t\t{ info, ...context }: GraphResolveOptions<Context>,\n\t) {\n\t\tconst tree = this._get_resolve_tree(info)\n\t\treturn this._resolve_page(query, paginator, { ...context, tree })\n\t}\n\n\t_get_resolve_tree(info: GraphQLResolveInfo) {\n\t\treturn parseResolveInfo(info) as ResolveTree\n\t}\n\n\t_resolve_type(\n\t\tquery: Orm[\"Query\"],\n\t\tcontext: GraphResolveContext<Context>,\n\t): Orm[\"Query\"] {\n\t\tlet { tree } = context\n\t\t// Dive into subtree if requested.\n\t\tif (context.path) {\n\t\t\tfor (const field of context.path) {\n\t\t\t\tconst type = Object.keys(tree.fieldsByTypeName)[0]\n\t\t\t\ttree = tree.fieldsByTypeName[type][field]\n\t\t\t\tif (!tree) {\n\t\t\t\t\t// This graphql field was never requested, ignore.\n\t\t\t\t\t// This happens when a user resolves a graph for a root subfield which was not requested by the client (and is thus not present in the tree).\n\t\t\t\t\t//\n\t\t\t\t\t// FIXME: this break typings contract. We are supposed to return a query.\n\t\t\t\t\treturn Promise.resolve()\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconst type = Object.keys(tree.fieldsByTypeName)[0]\n\t\tconst type_resolver = this.type_resolvers[type]\n\t\tif (!type_resolver) {\n\t\t\tthrow new Error(`Resolver not found for type ${type}.`)\n\t\t}\n\t\treturn type_resolver.resolve(query, {\n\t\t\t...context,\n\t\t\tgraph: this,\n\t\t\ttree,\n\t\t\ttype,\n\t\t\tpath: undefined,\n\t\t})\n\t}\n\n\t_resolve_page(\n\t\tquery: Orm[\"Query\"],\n\t\tpaginator: Paginator<Orm, Context>,\n\t\tcontext: GraphResolveContext<Context>,\n\t) {\n\t\tif (context.path) {\n\t\t\t// TODO: handle non-empty context.path\n\t\t\tthrow new Error(\"Paginating under non-root path not yet supported.\")\n\t\t}\n\t\tquery = this._resolve_type(query, { ...context, path: paginator.path })\n\t\treturn paginator.paginate(query, {\n\t\t\t...context,\n\t\t\tgraph: this,\n\t\t})\n\t}\n}\n","import type { OrmAdapter } from \"../orm/orm\"\nimport type { Paginator } from \"../paginators/base\"\n\nimport type { FieldResolver } from \"./field\"\nimport { parse_field_options } from \"./field\"\nimport type { RelationResolverOptions } from \"./relation\"\n\nexport function definePageResolver<Orm extends OrmAdapter, Context>(\n\tpaginator: Paginator<Orm, Context>,\n\toptions: RelationResolverOptions<Orm, Context> = {},\n): FieldResolver<Orm, Context> {\n\tconst { tableField, modify } = parse_field_options(options)\n\n\treturn function resolve(query, context) {\n\t\tconst { graph, field } = context\n\t\t// Objection.js requires a workaround to handle paginated content,\n\t\t// it must be saved into context and re-injected later.\n\t\t// The modify + finish is a no-op in Orchid.\n\t\tconst pagination_context = {}\n\t\tquery = graph.orm.select_relation(query, {\n\t\t\trelation: tableField || field,\n\t\t\tas: field,\n\t\t\tmodify(subquery) {\n\t\t\t\tsubquery = modify ? modify(subquery, context) : subquery\n\t\t\t\tsubquery = graph._resolve_page(subquery, paginator, context)\n\t\t\t\tsubquery = graph.orm.modify_subquery_pagination(\n\t\t\t\t\tsubquery,\n\t\t\t\t\tpagination_context,\n\t\t\t\t)\n\t\t\t\treturn subquery\n\t\t\t},\n\t\t})\n\t\tquery = graph.orm.finish_query_pagination(query, field, pagination_context)\n\t\treturn query\n\t}\n}\n","import type { FilterConfig } from \"../filter\"\nimport type { OrmAdapter } from \"../orm/orm\"\n\nimport type {\n\tFieldResolver,\n\tFieldResolverOptions,\n} from \"./field\"\nimport { parse_field_options } from \"./field\"\nimport type { TableResolveModifier } from \"./table\"\n\nexport interface RelationResolverOptions<Orm extends OrmAdapter, Context>\n\textends Omit<FieldResolverOptions<Orm, Context>, \"modify\"> {\n\tfilters?: FilterConfig\n\tmodify?: TableResolveModifier<Orm, Context>\n}\n\nexport function defineRelationResolver<Orm extends OrmAdapter, Context>(\n\toptions: RelationResolverOptions<Orm, Context> = {},\n): FieldResolver<Orm, Context> {\n\tconst { tableField, filters, modify } = parse_field_options(options)\n\n\treturn function resolve(query, context) {\n\t\tconst { graph, field } = context\n\t\treturn graph.orm.select_relation(query, {\n\t\t\trelation: tableField || field,\n\t\t\tas: field,\n\t\t\tmodify(subquery) {\n\t\t\t\tsubquery = graph._resolve_type(subquery, { ...context, filters })\n\t\t\t\treturn modify ? modify(subquery, context) : subquery\n\t\t\t},\n\t\t})\n\t}\n}\n","import type { FilterModifier, FilterValue } from \"../filter\"\nimport { filterQuery } from \"../filter\"\nimport type { OrmAdapter } from \"../orm/orm\"\nimport { run_after_query } from \"../utils/run-after\"\n\nimport type { FieldResolver } from \"./field\"\nimport { defineFieldResolver } from \"./field\"\nimport type { GraphResolveContext, GraphResolver } from \"./graph\"\nimport { defineRelationResolver } from \"./relation\"\n\nexport interface TableResolverOptions<Orm extends OrmAdapter, Context> {\n\t/** allow to resolve all table fields without explicitly listing them */\n\tallowAllFields?: boolean\n\t/** allow to filter all table fields without explicitly listing them */\n\tallowAllFilters?: boolean\n\tfields?: Record<string, SimpleFieldResolver<Orm, Context>>\n\tmodifiers?: Record<string, TableFilterModifier<Orm, Context>>\n\tmodify?: TableResolveModifier<Orm, Context>\n\ttransform?(instance: any, context: any): void | PromiseLike<void>\n}\n\nexport type SimpleFieldResolver<Orm extends OrmAdapter, Context>\n\t= | true\n\t\t| string\n\t\t| FieldResolver<Orm, Context>\n\nexport type TableResolveModifier<Orm extends OrmAdapter, Context> = (\n\tquery: Orm[\"Query\"],\n\tcontext: TableResolveContext<Orm, Context>,\n) => Orm[\"Query\"]\n\nexport interface TableResolveContext<Orm extends OrmAdapter, Context>\n\textends GraphResolveContext<Context> {\n\tgraph: GraphResolver<Orm, Context>\n\t/** GraphQL type */\n\ttype: string\n}\n\nexport type TableFilterModifier<Orm extends OrmAdapter, Context> = FilterModifier<Orm, TableResolveContext<Orm, Context>>\n\nexport class TableResolver<Orm extends OrmAdapter, Context> {\n\t// Introspection results\n\treadonly relations: Set<string>\n\treadonly virtual_fields: Set<string>\n\treadonly modifiers?: Record<string, TableFilterModifier<Orm, Context>>\n\n\treadonly table_field_resolvers?: Record<string, FieldResolver<Orm, Context>>\n\n\tconstructor(\n\t\treadonly orm: Orm,\n\t\treadonly table: Orm[\"Table\"],\n\t\treadonly options: TableResolverOptions<Orm, Context> = {},\n\t) {\n\t\tthis.relations = new Set(orm.get_table_relations(table))\n\t\tthis.virtual_fields = new Set(orm.get_table_virtual_fields(table))\n\t\tthis.modifiers = { ...orm.get_table_modifiers(table), ...options.modifiers }\n\n\t\t// Pre-create field resolvers\n\t\tconst { fields } = options\n\t\tif (fields) {\n\t\t\tthis.table_field_resolvers = Object.keys(fields).reduce<\n\t\t\t\tRecord<string, FieldResolver<Orm, Context>>\n\t\t\t>((resolvers, field) => {\n\t\t\t\tconst r0 = fields[field]\n\t\t\t\tconst r: FieldResolver<Orm, Context> | undefined\n\t\t\t\t\t= typeof r0 === \"function\"\n\t\t\t\t\t\t? r0\n\t\t\t\t\t\t: r0 === true\n\t\t\t\t\t\t\t? this._get_default_field_resolver(field)\n\t\t\t\t\t\t\t: typeof r0 === \"string\"\n\t\t\t\t\t\t\t\t? this._get_default_field_resolver(field, r0)\n\t\t\t\t\t\t\t\t: undefined\n\t\t\t\tif (r === undefined) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`Field resolver must be a function, string, or true; found ${typeof r0}.`,\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\tresolvers[field] = r\n\t\t\t\treturn resolvers\n\t\t\t}, {})\n\t\t}\n\t}\n\n\t/** Modify query to select fields/relations and filter the result set. */\n\tresolve(query: Orm[\"Query\"], context: TableResolveContext<Orm, Context>) {\n\t\tconst { modify, transform } = this.options\n\t\tconst { graph, tree, type, filters } = context\n\n\t\tconst query_table = this.orm.get_query_table(query)\n\t\tconst table_table = this.orm.get_table_table(this.table)\n\n\t\tif (query_table !== table_table) {\n\t\t\tthrow new Error(\n\t\t\t\t`Mismatching query table for type ${type}: expected ${table_table}, received ${query_table}.`,\n\t\t\t)\n\t\t}\n\n\t\tconst allow_all_fields\n\t\t\t= this.options.allowAllFields\n\t\t\t\t?? graph.options.allowAllFields\n\t\t\t\t?? !this.options.fields\n\n\t\tif (!allow_all_fields && !this.table_field_resolvers) {\n\t\t\tthrow new Error(\n\t\t\t\t`Resolver for type ${type} must either allow all fields or specify options.fields.`,\n\t\t\t)\n\t\t}\n\n\t\tif (modify) {\n\t\t\tquery = modify(query, context)\n\t\t}\n\n\t\tfor (const subtree of Object.values(tree.fieldsByTypeName[type])) {\n\t\t\tconst field = subtree.name\n\t\t\tconst r: FieldResolver<Orm, Context> | undefined\n\t\t\t\t= this.table_field_resolvers?.[field]\n\t\t\t\t\t|| (allow_all_fields ? this._get_default_field_resolver(field) : undefined)\n\t\t\tif (!r) {\n\t\t\t\tthrow new Error(`No field resolver defined for field ${type}.${field}.`)\n\t\t\t}\n\t\t\tif (r) {\n\t\t\t\tquery = r(query, { ...context, tree: subtree, field })\n\t\t\t}\n\t\t}\n\n\t\tconst filter = context.tree.args?.filter\n\t\tif (filter) {\n\t\t\tconst allowAllFilters = this.options.allowAllFilters ?? graph.options.allowAllFilters\n\t\t\tconst filterConfig = allowAllFilters ? true : filters\n\n\t\t\tif (filterConfig) {\n\t\t\t\tquery = filterQuery<Orm, TableResolveContext<Orm, Context>>(context.graph.orm, query, filter as FilterValue, {\n\t\t\t\t\tmodifiers: this.modifiers,\n\t\t\t\t\tcontext,\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\tif (transform) {\n\t\t\tquery = run_after_query(this.orm, query, (instance) => {\n\t\t\t\treturn transform(instance, context)\n\t\t\t})\n\t\t}\n\n\t\tquery = this.orm.prevent_select_all(query)\n\n\t\treturn query\n\t}\n\n\t/**\n\t * Create field resolver which will modify query to resolve GraphQL field.\n\t */\n\t_get_default_field_resolver(\n\t\tfield: string,\n\t\ttableField?: string,\n\t): FieldResolver<Orm, Context> {\n\t\tconst table_field_lookup = tableField || field\n\t\tif (\n\t\t\tthis.options.modifiers?.[table_field_lookup]\n\t\t\t|| this.virtual_fields.has(table_field_lookup)\n\t\t) {\n\t\t\t// Keep query as is.\n\t\t\treturn query => query\n\t\t} else if (this.relations.has(table_field_lookup)) {\n\t\t\t// TODO: pre-create and cache\n\t\t\treturn defineRelationResolver({ tableField })\n\t\t} else {\n\t\t\t// TODO: create simplified resolver?\n\t\t\treturn defineFieldResolver({ tableField })\n\t\t}\n\t}\n}\n","import type { OrmAdapter, SortOrder } from \"graphql-orm\"\nimport type { Query, SelectQueryData, Table } from \"orchid-orm\"\nimport { raw } from \"orchid-orm\"\n\nexport type OrchidOrm = OrmAdapter<\n\tTable,\n\tQuery,\n\t// TODO: Type as QueryTransform once it's published.\n\tPick<Promise<any>, \"then\" | \"catch\">\n>\n\nexport const orm: OrchidOrm = {\n\tTable: undefined as unknown as OrchidOrm[\"Table\"],\n\tQuery: undefined as unknown as OrchidOrm[\"Query\"],\n\tQueryTransform: undefined as unknown as OrchidOrm[\"QueryTransform\"],\n\n\t// Reflection\n\n\tget_table_table(table) {\n\t\treturn table.table!\n\t},\n\n\tget_table_relations(table) {\n\t\treturn Object.keys(table.relations)\n\t},\n\n\tget_table_virtual_fields() {\n\t\t// Not supported by Orchid.\n\t\treturn []\n\t},\n\n\tget_table_modifiers() {\n\t\treturn undefined\n\t},\n\n\tget_query_table(query) {\n\t\tif (!query.table) {\n\t\t\tthrow new Error(\"Query must have table.\")\n\t\t}\n\t\treturn query.table\n\t},\n\n\t// Select\n\n\tselect_field(query, { field, as }) {\n\t\treturn query.select({ [as]: field })\n\t},\n\n\tselect_relation(query, { relation, as, modify }) {\n\t\t// as any casts needed in orchid-orm 1.31+\n\t\treturn query.select({\n\t\t\t[as]: (q: any) => modify(q[relation]),\n\t\t} as any)\n\t},\n\n\t// Find\n\n\twhere(query, field, op, value) {\n\t\treturn query.where({ [field]: op ? { [op]: value } : value })\n\t},\n\n\twhere_raw(query, expression, bindings) {\n\t\treturn query.where(raw({ raw: expression, values: bindings }))\n\t},\n\n\t// Order & Limit\n\n\treset_query_order(query) {\n\t\treturn query.clear(\"order\")\n\t},\n\n\tadd_query_order(query, { field, dir }) {\n\t\treturn query.order({ [field]: dir })\n\t},\n\n\tget_query_order(query) {\n\t\treturn (\n\t\t\t(query.q as SelectQueryData).order?.flatMap<SortOrder>((orderItem) => {\n\t\t\t\tif (typeof orderItem === \"string\") {\n\t\t\t\t\treturn { field: \"orderItem\", dir: \"ASC\" }\n\t\t\t\t} else if (typeof orderItem === \"object\") {\n\t\t\t\t\treturn Object.entries(orderItem).map<SortOrder>(([field, order]) => {\n\t\t\t\t\t\tconst [dir] = order.split(\" \", 1)\n\t\t\t\t\t\tif (dir === \"ASC\" || dir === \"DESC\") {\n\t\t\t\t\t\t\treturn { field, dir }\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthrow new Error(\"Unsupported order: \" + order)\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\tthrow new TypeError(\"Unsupported order type: \" + orderItem)\n\t\t\t\t}\n\t\t\t}) || []\n\t\t)\n\t},\n\n\tset_query_limit(query, limit) {\n\t\treturn query.limit(limit)\n\t},\n\n\t// Pagination helpers\n\n\tset_query_page_result(query, get_page) {\n\t\treturn query.transform(nodes => get_page(nodes as any))\n\t},\n\n\tmodify_subquery_pagination(subquery) {\n\t\treturn subquery\n\t},\n\n\tfinish_query_pagination(query) {\n\t\treturn query\n\t},\n\n\t// Misc\n\n\trun_after_query(query, fn) {\n\t\treturn query.afterQuery(data => fn(data))\n\t},\n\n\tprevent_select_all(query) {\n\t\t// Not needed in Orchid\n\t\treturn query\n\t},\n}\n","import type {\n\tFilterModifier as _FilterModifier,\n\tFilterModifiers as _FilterModifiers,\n\tFilterQueryOptions as _FilterQueryOptions,\n\tFilterValue,\n} from \"graphql-orm\"\nimport { filterQuery as _filterQuery } from \"graphql-orm\"\nimport type { Query } from \"orchid-orm\"\n\nimport { orm } from \"./orm/orm\"\nimport type { OrchidOrm } from \"./orm/orm\"\n\nexport { FilterValue }\n\nexport type FilterQueryOptions<Context = undefined> = _FilterQueryOptions<OrchidOrm, Context>\n\nexport type FilterModifier<Context = undefined> = _FilterModifier<OrchidOrm, Context>\nexport type FilterModifiers<Context = undefined> = _FilterModifiers<OrchidOrm, Context>\n\nexport function filterQuery<Q extends Query, Context = undefined>(\n\tquery: Q,\n\tfilter: FilterValue,\n\toptions?: FilterQueryOptions<Context>,\n): Q {\n\treturn _filterQuery(orm, query, filter, options) as Q\n}\n","import type {\n\tGraphResolveOptions,\n\tGraphResolverOptions,\n\tTableResolver,\n} from \"graphql-orm\"\nimport { GraphResolver } from \"graphql-orm\"\nimport type { Query } from \"orchid-orm\"\n\nimport type { OrchidOrm } from \"../orm/orm\"\nimport { orm } from \"../orm/orm\"\n\nexport function createGraphResolver<Context = unknown>(\n\ttypes: Record<string, TableResolver<OrchidOrm, Context>>,\n\toptions?: GraphResolverOptions<OrchidOrm, Context>,\n) {\n\treturn new OrchidGraphResolver<Context>(types, options)\n}\n\nclass OrchidGraphResolver<Context> extends GraphResolver<OrchidOrm, Context> {\n\tconstructor(\n\t\tpublic readonly types: Record<string, TableResolver<OrchidOrm, Context>>,\n\t\tpublic readonly options: GraphResolverOptions<OrchidOrm, Context> = {},\n\t) {\n\t\tsuper(orm, types, options)\n\t}\n\n\tresolve<T>(\n\t\tquery: Query & {\n\t\t\treturnType: unknown extends T\n\t\t\t\t? any\n\t\t\t\t: T extends unknown[]\n\t\t\t\t\t? undefined | \"all\"\n\t\t\t\t\t: T extends undefined\n\t\t\t\t\t\t? \"one\"\n\t\t\t\t\t\t: \"oneOrThrow\"\n\t\t},\n\t\toptions: GraphResolveOptions<Context>,\n\t): Promise<T> {\n\t\treturn super.resolve(query, options)\n\t}\n}\n","import type { TableResolverOptions } from \"graphql-orm\"\nimport { TableResolver } from \"graphql-orm\"\nimport type { Table } from \"orchid-orm\"\n\nimport type { OrchidOrm } from \"../orm/orm\"\nimport { orm } from \"../orm/orm\"\n\nexport function defineTableResolver<Context = unknown>(\n\ttable: Table,\n\toptions: TableResolverOptions<OrchidOrm, Context> = {},\n) {\n\treturn new TableResolver(orm, table as any, options)\n}\n"],"mappings":"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","names":["orm","orm","cursor","orm","orm","type","orm","filterQuery"]}