drizzle-graphql-plus 0.8.7 → 0.8.8

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/index.js DELETED
@@ -1,2012 +0,0 @@
1
- // src/index.ts
2
- import { is as is6 } from "drizzle-orm";
3
- import { MySqlDatabase as MySqlDatabase2 } from "drizzle-orm/mysql-core";
4
- import { PgDatabase as PgDatabase2 } from "drizzle-orm/pg-core";
5
- import { BaseSQLiteDatabase as BaseSQLiteDatabase2 } from "drizzle-orm/sqlite-core";
6
- import {
7
- GraphQLObjectType as GraphQLObjectType6,
8
- GraphQLSchema
9
- } from "graphql";
10
-
11
- // src/util/builders/mysql.ts
12
- import { createTableRelationsHelpers, is as is3, Relations } from "drizzle-orm";
13
- import { MySqlTable } from "drizzle-orm/mysql-core";
14
- import {
15
- GraphQLBoolean as GraphQLBoolean3,
16
- GraphQLError as GraphQLError3,
17
- GraphQLInt as GraphQLInt3,
18
- GraphQLList as GraphQLList3,
19
- GraphQLNonNull as GraphQLNonNull3,
20
- GraphQLObjectType as GraphQLObjectType3
21
- } from "graphql";
22
-
23
- // src/util/builders/common.ts
24
- import {
25
- and,
26
- asc,
27
- desc,
28
- eq,
29
- getTableColumns as getTableColumns2,
30
- gt,
31
- gte,
32
- ilike,
33
- inArray,
34
- is as is2,
35
- isNotNull,
36
- isNull,
37
- like,
38
- lt,
39
- lte,
40
- ne,
41
- notIlike,
42
- notInArray,
43
- notLike,
44
- One,
45
- or
46
- } from "drizzle-orm";
47
- import {
48
- GraphQLBoolean as GraphQLBoolean2,
49
- GraphQLEnumType as GraphQLEnumType2,
50
- GraphQLError as GraphQLError2,
51
- GraphQLInputObjectType as GraphQLInputObjectType2,
52
- GraphQLInt as GraphQLInt2,
53
- GraphQLList as GraphQLList2,
54
- GraphQLNonNull as GraphQLNonNull2,
55
- GraphQLObjectType as GraphQLObjectType2,
56
- GraphQLString as GraphQLString2,
57
- GraphQLInterfaceType
58
- } from "graphql";
59
-
60
- // src/util/case-ops/index.ts
61
- var uncapitalize = (input) => input.length ? `${input[0].toLocaleLowerCase()}${input.length > 1 ? input.slice(1, input.length) : ""}` : input;
62
- var capitalize = (input) => input.length ? `${input[0].toLocaleUpperCase()}${input.length > 1 ? input.slice(1, input.length) : ""}` : input;
63
-
64
- // src/util/data-mappers/index.ts
65
- import { getTableColumns } from "drizzle-orm";
66
- import { GraphQLError } from "graphql";
67
- var remapToGraphQLCore = (key, value, tableName, column, relationMap) => {
68
- if (value instanceof Date)
69
- return value.toISOString();
70
- if (value instanceof Buffer)
71
- return Array.from(value);
72
- if (typeof value === "bigint")
73
- return value.toString();
74
- if (Array.isArray(value)) {
75
- const relations = relationMap?.[tableName];
76
- if (relations?.[key]) {
77
- return remapToGraphQLArrayOutput(
78
- value,
79
- relations[key].targetTableName,
80
- relations[key].relation.referencedTable,
81
- relationMap
82
- );
83
- }
84
- if (column.columnType === "PgGeometry" || column.columnType === "PgVector")
85
- return value;
86
- return value.map((arrVal) => remapToGraphQLCore(key, arrVal, tableName, column, relationMap));
87
- }
88
- if (typeof value === "object") {
89
- const relations = relationMap?.[tableName];
90
- if (relations?.[key]) {
91
- return remapToGraphQLSingleOutput(
92
- value,
93
- relations[key].targetTableName,
94
- relations[key].relation.referencedTable,
95
- relationMap
96
- );
97
- }
98
- if (column.columnType === "PgGeometryObject")
99
- return value;
100
- return JSON.stringify(value);
101
- }
102
- return value;
103
- };
104
- var remapToGraphQLSingleOutput = (queryOutput, tableName, table, relationMap) => {
105
- for (const [key, value] of Object.entries(queryOutput)) {
106
- if (value === void 0 || value === null) {
107
- delete queryOutput[key];
108
- } else {
109
- queryOutput[key] = remapToGraphQLCore(key, value, tableName, table[key], relationMap);
110
- }
111
- }
112
- return queryOutput;
113
- };
114
- var remapToGraphQLArrayOutput = (queryOutput, tableName, table, relationMap) => {
115
- for (const entry of queryOutput) {
116
- remapToGraphQLSingleOutput(entry, tableName, table, relationMap);
117
- }
118
- return queryOutput;
119
- };
120
- var remapFromGraphQLCore = (value, column, columnName) => {
121
- switch (column.dataType) {
122
- case "date": {
123
- const formatted = new Date(value);
124
- if (Number.isNaN(formatted.getTime()))
125
- throw new GraphQLError(`Field '${columnName}' is not a valid date!`);
126
- return formatted;
127
- }
128
- case "buffer": {
129
- if (!Array.isArray(value)) {
130
- throw new GraphQLError(`Field '${columnName}' is not an array!`);
131
- }
132
- return Buffer.from(value);
133
- }
134
- case "json": {
135
- if (column.columnType === "PgGeometryObject")
136
- return value;
137
- try {
138
- return JSON.parse(value);
139
- } catch (e) {
140
- throw new GraphQLError(
141
- `Invalid JSON in field '${columnName}':
142
- ${e instanceof Error ? e.message : "Unknown error"}`
143
- );
144
- }
145
- }
146
- case "array": {
147
- if (!Array.isArray(value)) {
148
- throw new GraphQLError(`Field '${columnName}' is not an array!`);
149
- }
150
- if (column.columnType === "PgGeometry" && value.length !== 2) {
151
- throw new GraphQLError(
152
- `Invalid float tuple in field '${columnName}': expected array with length of 2, received ${value.length}`
153
- );
154
- }
155
- return value;
156
- }
157
- case "bigint": {
158
- try {
159
- return BigInt(value);
160
- } catch (error) {
161
- throw new GraphQLError(`Field '${columnName}' is not a BigInt!`);
162
- }
163
- }
164
- default: {
165
- return value;
166
- }
167
- }
168
- };
169
- var remapFromGraphQLSingleInput = (queryInput, table) => {
170
- for (const [key, value] of Object.entries(queryInput)) {
171
- if (value === void 0) {
172
- delete queryInput[key];
173
- } else {
174
- const column = getTableColumns(table)[key];
175
- if (!column)
176
- throw new GraphQLError(`Unknown column: ${key}`);
177
- if (value === null && column.notNull) {
178
- delete queryInput[key];
179
- continue;
180
- }
181
- queryInput[key] = remapFromGraphQLCore(value, column, key);
182
- }
183
- }
184
- return queryInput;
185
- };
186
- var remapFromGraphQLArrayInput = (queryInput, table) => {
187
- for (const entry of queryInput)
188
- remapFromGraphQLSingleInput(entry, table);
189
- return queryInput;
190
- };
191
-
192
- // src/util/type-converter/index.ts
193
- import { is } from "drizzle-orm";
194
- import { MySqlInt, MySqlSerial } from "drizzle-orm/mysql-core";
195
- import { PgInteger, PgSerial } from "drizzle-orm/pg-core";
196
- import { SQLiteInteger } from "drizzle-orm/sqlite-core";
197
- import {
198
- GraphQLBoolean,
199
- GraphQLEnumType,
200
- GraphQLFloat,
201
- GraphQLInputObjectType,
202
- GraphQLInt,
203
- GraphQLList,
204
- GraphQLNonNull,
205
- GraphQLObjectType,
206
- GraphQLString
207
- } from "graphql";
208
- var allowedNameChars = /^[a-zA-Z0-9_]+$/;
209
- var enumMap = /* @__PURE__ */ new WeakMap();
210
- var generateEnumCached = (column, columnName, tableName) => {
211
- if (enumMap.has(column))
212
- return enumMap.get(column);
213
- const gqlEnum = new GraphQLEnumType({
214
- name: `${capitalize(tableName)}${capitalize(columnName)}Enum`,
215
- values: Object.fromEntries(column.enumValues.map((e, index) => [allowedNameChars.test(e) ? e : `Option${index}`, {
216
- value: e,
217
- description: `Value: ${e}`
218
- }]))
219
- });
220
- enumMap.set(column, gqlEnum);
221
- return gqlEnum;
222
- };
223
- var geoXyType = new GraphQLObjectType({
224
- name: "PgGeometryObject",
225
- fields: {
226
- x: { type: GraphQLFloat },
227
- y: { type: GraphQLFloat }
228
- }
229
- });
230
- var geoXyInputType = new GraphQLInputObjectType({
231
- name: "PgGeometryObjectInput",
232
- fields: {
233
- x: { type: GraphQLFloat },
234
- y: { type: GraphQLFloat }
235
- }
236
- });
237
- var columnToGraphQLCore = (column, columnName, tableName, isInput) => {
238
- switch (column.dataType) {
239
- case "boolean":
240
- return { type: GraphQLBoolean, description: "Boolean" };
241
- case "json":
242
- return column.columnType === "PgGeometryObject" ? {
243
- type: isInput ? geoXyInputType : geoXyType,
244
- description: "Geometry points XY"
245
- } : { type: GraphQLString, description: "JSON" };
246
- case "date":
247
- return { type: GraphQLString, description: "Date" };
248
- case "string":
249
- if (column.enumValues?.length)
250
- return { type: generateEnumCached(column, columnName, tableName) };
251
- return { type: GraphQLString, description: "String" };
252
- case "bigint":
253
- return { type: GraphQLString, description: "BigInt" };
254
- case "number":
255
- return is(column, PgInteger) || is(column, PgSerial) || is(column, MySqlInt) || is(column, MySqlSerial) || is(column, SQLiteInteger) ? { type: GraphQLInt, description: "Integer" } : { type: GraphQLFloat, description: "Float" };
256
- case "buffer":
257
- return { type: new GraphQLList(new GraphQLNonNull(GraphQLInt)), description: "Buffer" };
258
- case "array": {
259
- if (column.columnType === "PgVector") {
260
- return {
261
- type: new GraphQLList(new GraphQLNonNull(GraphQLFloat)),
262
- description: "Array<Float>"
263
- };
264
- }
265
- if (column.columnType === "PgGeometry") {
266
- return {
267
- type: new GraphQLList(new GraphQLNonNull(GraphQLFloat)),
268
- description: "Tuple<[Float, Float]>"
269
- };
270
- }
271
- const innerType = columnToGraphQLCore(
272
- column.baseColumn,
273
- columnName,
274
- tableName,
275
- isInput
276
- );
277
- return {
278
- type: new GraphQLList(new GraphQLNonNull(innerType.type)),
279
- description: `Array<${innerType.description}>`
280
- };
281
- }
282
- case "custom":
283
- default:
284
- throw new Error(`Drizzle-GraphQL Error: Type ${column.dataType} is not implemented!`);
285
- }
286
- };
287
- var drizzleColumnToGraphQLType = (column, columnName, tableName, forceNullable = false, defaultIsNullable = false, isInput = false) => {
288
- const typeDesc = columnToGraphQLCore(column, columnName, tableName, isInput);
289
- const noDesc = ["string", "boolean", "number"];
290
- if (noDesc.find((e) => e === column.dataType))
291
- delete typeDesc.description;
292
- if (forceNullable)
293
- return typeDesc;
294
- if (column.notNull && !(defaultIsNullable && (column.hasDefault || column.defaultFn))) {
295
- return {
296
- type: new GraphQLNonNull(typeDesc.type),
297
- description: typeDesc.description
298
- };
299
- }
300
- return typeDesc;
301
- };
302
-
303
- // src/util/builders/common.ts
304
- var rqbCrashTypes = ["SQLiteBigInt", "SQLiteBlobJson", "SQLiteBlobBuffer"];
305
- var extractSelectedColumnsFromTree = (tree, table) => {
306
- const tableColumns = getTableColumns2(table);
307
- const treeEntries = Object.entries(tree);
308
- const selectedColumns = [];
309
- for (const [fieldName, fieldData] of treeEntries) {
310
- if (!tableColumns[fieldData.name])
311
- continue;
312
- selectedColumns.push([fieldData.name, true]);
313
- }
314
- if (!selectedColumns.length) {
315
- const columnKeys = Object.entries(tableColumns);
316
- const columnName = columnKeys.find(
317
- (e) => rqbCrashTypes.find((haram) => e[1].columnType !== haram)
318
- )?.[0] ?? columnKeys[0][0];
319
- selectedColumns.push([columnName, true]);
320
- }
321
- return Object.fromEntries(selectedColumns);
322
- };
323
- var extractSelectedColumnsFromTreeSQLFormat = (tree, table) => {
324
- const tableColumns = getTableColumns2(table);
325
- const treeEntries = Object.entries(tree);
326
- const selectedColumns = [];
327
- for (const [fieldName, fieldData] of treeEntries) {
328
- if (!tableColumns[fieldData.name])
329
- continue;
330
- selectedColumns.push([fieldData.name, tableColumns[fieldData.name]]);
331
- }
332
- if (!selectedColumns.length) {
333
- const columnKeys = Object.entries(tableColumns);
334
- const columnName = columnKeys.find(
335
- (e) => rqbCrashTypes.find((haram) => e[1].columnType !== haram)
336
- )?.[0] ?? columnKeys[0][0];
337
- selectedColumns.push([columnName, tableColumns[columnName]]);
338
- }
339
- return Object.fromEntries(selectedColumns);
340
- };
341
- var innerOrder = new GraphQLInputObjectType2({
342
- name: "InnerOrder",
343
- fields: {
344
- direction: {
345
- type: new GraphQLNonNull2(
346
- new GraphQLEnumType2({
347
- name: "OrderDirection",
348
- description: "Order by direction",
349
- values: {
350
- asc: {
351
- value: "asc",
352
- description: "Ascending order"
353
- },
354
- desc: {
355
- value: "desc",
356
- description: "Descending order"
357
- }
358
- }
359
- })
360
- )
361
- },
362
- priority: {
363
- type: new GraphQLNonNull2(GraphQLInt2),
364
- description: "Priority of current field"
365
- }
366
- }
367
- });
368
- var generateColumnFilterValues = (column, tableName, columnName) => {
369
- const columnGraphQLType = drizzleColumnToGraphQLType(
370
- column,
371
- columnName,
372
- tableName,
373
- true,
374
- false,
375
- true
376
- );
377
- const columnArr = new GraphQLList2(new GraphQLNonNull2(columnGraphQLType.type));
378
- const baseFields = {
379
- eq: {
380
- type: columnGraphQLType.type,
381
- description: columnGraphQLType.description
382
- },
383
- ne: {
384
- type: columnGraphQLType.type,
385
- description: columnGraphQLType.description
386
- },
387
- lt: {
388
- type: columnGraphQLType.type,
389
- description: columnGraphQLType.description
390
- },
391
- lte: {
392
- type: columnGraphQLType.type,
393
- description: columnGraphQLType.description
394
- },
395
- gt: {
396
- type: columnGraphQLType.type,
397
- description: columnGraphQLType.description
398
- },
399
- gte: {
400
- type: columnGraphQLType.type,
401
- description: columnGraphQLType.description
402
- },
403
- like: { type: GraphQLString2 },
404
- notLike: { type: GraphQLString2 },
405
- ilike: { type: GraphQLString2 },
406
- notIlike: { type: GraphQLString2 },
407
- inArray: {
408
- type: columnArr,
409
- description: `Array<${columnGraphQLType.description}>`
410
- },
411
- notInArray: {
412
- type: columnArr,
413
- description: `Array<${columnGraphQLType.description}>`
414
- },
415
- isNull: { type: GraphQLBoolean2 },
416
- isNotNull: { type: GraphQLBoolean2 }
417
- };
418
- const type = new GraphQLInputObjectType2({
419
- name: `${capitalize(tableName)}${capitalize(columnName)}Filters`,
420
- fields: {
421
- ...baseFields,
422
- OR: {
423
- type: new GraphQLList2(
424
- new GraphQLNonNull2(
425
- new GraphQLInputObjectType2({
426
- name: `${capitalize(tableName)}${capitalize(
427
- columnName
428
- )}filtersOr`,
429
- fields: {
430
- ...baseFields
431
- }
432
- })
433
- )
434
- )
435
- }
436
- }
437
- });
438
- return type;
439
- };
440
- var orderMap = /* @__PURE__ */ new WeakMap();
441
- var generateTableOrderCached = (table) => {
442
- if (orderMap.has(table))
443
- return orderMap.get(table);
444
- const columns = getTableColumns2(table);
445
- const columnEntries = Object.entries(columns);
446
- const remapped = Object.fromEntries(
447
- columnEntries.map(([columnName, columnDescription]) => [
448
- columnName,
449
- { type: innerOrder }
450
- ])
451
- );
452
- orderMap.set(table, remapped);
453
- return remapped;
454
- };
455
- var filterMap = /* @__PURE__ */ new WeakMap();
456
- var generateTableFilterValuesCached = (table, tableName) => {
457
- if (filterMap.has(table))
458
- return filterMap.get(table);
459
- const columns = getTableColumns2(table);
460
- const columnEntries = Object.entries(columns);
461
- const remapped = Object.fromEntries(
462
- columnEntries.map(([columnName, columnDescription]) => [
463
- columnName,
464
- {
465
- type: generateColumnFilterValues(
466
- columnDescription,
467
- tableName,
468
- columnName
469
- )
470
- }
471
- ])
472
- );
473
- filterMap.set(table, remapped);
474
- return remapped;
475
- };
476
- var fieldMap = /* @__PURE__ */ new WeakMap();
477
- var generateTableSelectTypeFieldsCached = (table, tableName) => {
478
- if (fieldMap.has(table))
479
- return fieldMap.get(table);
480
- const columns = getTableColumns2(table);
481
- const columnEntries = Object.entries(columns);
482
- const remapped = Object.fromEntries(
483
- columnEntries.map(([columnName, columnDescription]) => [
484
- columnName,
485
- drizzleColumnToGraphQLType(columnDescription, columnName, tableName)
486
- ])
487
- );
488
- fieldMap.set(table, remapped);
489
- return remapped;
490
- };
491
- var orderTypeMap = /* @__PURE__ */ new WeakMap();
492
- var generateTableOrderTypeCached = (table, tableName) => {
493
- if (orderTypeMap.has(table))
494
- return orderTypeMap.get(table);
495
- const orderColumns = generateTableOrderCached(table);
496
- const order = new GraphQLInputObjectType2({
497
- name: `${capitalize(tableName)}OrderBy`,
498
- fields: orderColumns
499
- });
500
- orderTypeMap.set(table, order);
501
- return order;
502
- };
503
- var filterTypeMap = /* @__PURE__ */ new WeakMap();
504
- var generateTableFilterTypeCached = (table, tableName) => {
505
- if (filterTypeMap.has(table))
506
- return filterTypeMap.get(table);
507
- const filterColumns = generateTableFilterValuesCached(table, tableName);
508
- const filters = new GraphQLInputObjectType2({
509
- name: `${capitalize(tableName)}Filters`,
510
- fields: {
511
- ...filterColumns,
512
- OR: {
513
- type: new GraphQLList2(
514
- new GraphQLNonNull2(
515
- new GraphQLInputObjectType2({
516
- name: `${capitalize(tableName)}FiltersOr`,
517
- fields: filterColumns
518
- })
519
- )
520
- )
521
- }
522
- }
523
- });
524
- filterTypeMap.set(table, filters);
525
- return filters;
526
- };
527
- var generateSelectFields = (tables, tableName, relationMap, typeName, withOrder, relationsDepthLimit, currentDepth = 0, usedTables = /* @__PURE__ */ new Set()) => {
528
- const relations = relationMap[tableName];
529
- const relationEntries = relations ? Object.entries(relations) : [];
530
- const table = tables[tableName];
531
- const order = withOrder ? generateTableOrderTypeCached(table, tableName) : void 0;
532
- const filters = generateTableFilterTypeCached(table, tableName);
533
- const tableFields = generateTableSelectTypeFieldsCached(table, tableName);
534
- if (usedTables.has(tableName) || typeof relationsDepthLimit === "number" && currentDepth >= relationsDepthLimit || !relationEntries.length) {
535
- return {
536
- order,
537
- filters,
538
- tableFields,
539
- relationFields: {}
540
- };
541
- }
542
- const rawRelationFields = [];
543
- const updatedUsedTables = new Set(usedTables).add(tableName);
544
- const newDepth = currentDepth + 1;
545
- for (const [relationName, { targetTableName, relation }] of relationEntries) {
546
- const relTypeName = `${typeName}${capitalize(relationName)}Relation`;
547
- const isOne = is2(relation, One);
548
- const relData = generateSelectFields(
549
- tables,
550
- targetTableName,
551
- relationMap,
552
- relTypeName,
553
- !isOne,
554
- relationsDepthLimit,
555
- newDepth,
556
- updatedUsedTables
557
- );
558
- const relType = new GraphQLObjectType2({
559
- name: relTypeName,
560
- fields: { ...relData.tableFields, ...relData.relationFields }
561
- });
562
- if (isOne) {
563
- rawRelationFields.push([
564
- relationName,
565
- {
566
- type: relType,
567
- args: {
568
- where: { type: relData.filters }
569
- }
570
- }
571
- ]);
572
- continue;
573
- }
574
- rawRelationFields.push([
575
- relationName,
576
- {
577
- type: new GraphQLNonNull2(new GraphQLList2(new GraphQLNonNull2(relType))),
578
- args: {
579
- where: { type: relData.filters },
580
- orderBy: { type: relData.order },
581
- offset: { type: GraphQLInt2 },
582
- limit: { type: GraphQLInt2 }
583
- }
584
- }
585
- ]);
586
- }
587
- const relationFields = Object.fromEntries(rawRelationFields);
588
- return {
589
- order,
590
- filters,
591
- tableFields,
592
- relationFields
593
- };
594
- };
595
- var generateTableTypes = (tableName, tables, relationMap, withReturning, relationsDepthLimit) => {
596
- const stylizedName = capitalize(tableName);
597
- const { tableFields, relationFields, filters, order } = generateSelectFields(
598
- tables,
599
- tableName,
600
- relationMap,
601
- stylizedName,
602
- true,
603
- relationsDepthLimit
604
- );
605
- const table = tables[tableName];
606
- const columns = getTableColumns2(table);
607
- const columnEntries = Object.entries(columns);
608
- const insertFields = Object.fromEntries(
609
- columnEntries.map(([columnName, columnDescription]) => [
610
- columnName,
611
- drizzleColumnToGraphQLType(
612
- columnDescription,
613
- columnName,
614
- tableName,
615
- false,
616
- true,
617
- true
618
- )
619
- ])
620
- );
621
- const updateFields = Object.fromEntries(
622
- columnEntries.map(([columnName, columnDescription]) => [
623
- columnName,
624
- drizzleColumnToGraphQLType(
625
- columnDescription,
626
- columnName,
627
- tableName,
628
- true,
629
- false,
630
- true
631
- )
632
- ])
633
- );
634
- const insertInput = new GraphQLInputObjectType2({
635
- name: `${stylizedName}InsertInput`,
636
- fields: insertFields
637
- });
638
- const tableFieldsInterface = new GraphQLInterfaceType({
639
- name: `${stylizedName}Fields`,
640
- fields: tableFields
641
- });
642
- const selectSingleOutput = new GraphQLObjectType2({
643
- name: `${stylizedName}SelectItem`,
644
- fields: { ...tableFields, ...relationFields },
645
- interfaces: [tableFieldsInterface]
646
- });
647
- const selectArrOutput = new GraphQLNonNull2(
648
- new GraphQLList2(new GraphQLNonNull2(selectSingleOutput))
649
- );
650
- const singleTableItemOutput = withReturning ? new GraphQLObjectType2({
651
- name: `${stylizedName}Item`,
652
- fields: tableFields,
653
- interfaces: [tableFieldsInterface]
654
- }) : void 0;
655
- const arrTableItemOutput = withReturning ? new GraphQLNonNull2(
656
- new GraphQLList2(new GraphQLNonNull2(singleTableItemOutput))
657
- ) : void 0;
658
- const updateInput = new GraphQLInputObjectType2({
659
- name: `${stylizedName}UpdateInput`,
660
- fields: updateFields
661
- });
662
- const inputs = {
663
- insertInput,
664
- updateInput,
665
- tableOrder: order,
666
- tableFilters: filters
667
- };
668
- const outputs = withReturning ? {
669
- selectSingleOutput,
670
- selectArrOutput,
671
- singleTableItemOutput,
672
- arrTableItemOutput
673
- } : {
674
- selectSingleOutput,
675
- selectArrOutput
676
- };
677
- return {
678
- inputs,
679
- outputs
680
- };
681
- };
682
- var extractOrderBy = (table, orderArgs) => {
683
- const res = [];
684
- for (const [column, config] of Object.entries(orderArgs).sort(
685
- (a, b) => (b[1]?.priority ?? 0) - (a[1]?.priority ?? 0)
686
- )) {
687
- if (!config)
688
- continue;
689
- const { direction } = config;
690
- res.push(
691
- direction === "asc" ? asc(getTableColumns2(table)[column]) : desc(getTableColumns2(table)[column])
692
- );
693
- }
694
- return res;
695
- };
696
- var extractFiltersColumn = (column, columnName, operators) => {
697
- if (!operators.OR?.length)
698
- delete operators.OR;
699
- const entries = Object.entries(
700
- operators
701
- );
702
- if (operators.OR) {
703
- if (entries.length > 1) {
704
- throw new GraphQLError2(
705
- `WHERE ${columnName}: Cannot specify both fields and 'OR' in column operators!`
706
- );
707
- }
708
- const variants2 = [];
709
- for (const variant of operators.OR) {
710
- const extracted = extractFiltersColumn(column, columnName, variant);
711
- if (extracted)
712
- variants2.push(extracted);
713
- }
714
- return variants2.length ? variants2.length > 1 ? or(...variants2) : variants2[0] : void 0;
715
- }
716
- const variants = [];
717
- for (const [operatorName, operatorValue] of entries) {
718
- if (operatorValue === null || operatorValue === false)
719
- continue;
720
- let operator;
721
- switch (operatorName) {
722
- case "eq":
723
- operator = operator ?? eq;
724
- case "ne":
725
- operator = operator ?? ne;
726
- case "gt":
727
- operator = operator ?? gt;
728
- case "gte":
729
- operator = operator ?? gte;
730
- case "lt":
731
- operator = operator ?? lt;
732
- case "lte":
733
- operator = operator ?? lte;
734
- const singleValue = remapFromGraphQLCore(
735
- operatorValue,
736
- column,
737
- columnName
738
- );
739
- variants.push(operator(column, singleValue));
740
- break;
741
- case "like":
742
- operator = operator ?? like;
743
- case "notLike":
744
- operator = operator ?? notLike;
745
- case "ilike":
746
- operator = operator ?? ilike;
747
- case "notIlike":
748
- operator = operator ?? notIlike;
749
- variants.push(operator(column, operatorValue));
750
- break;
751
- case "inArray":
752
- operator = operator ?? inArray;
753
- case "notInArray":
754
- operator = operator ?? notInArray;
755
- if (!operatorValue.length) {
756
- throw new GraphQLError2(
757
- `WHERE ${columnName}: Unable to use operator ${operatorName} with an empty array!`
758
- );
759
- }
760
- const arrayValue = operatorValue.map(
761
- (val) => remapFromGraphQLCore(val, column, columnName)
762
- );
763
- variants.push(operator(column, arrayValue));
764
- break;
765
- case "isNull":
766
- operator = operator ?? isNull;
767
- case "isNotNull":
768
- operator = operator ?? isNotNull;
769
- variants.push(operator(column));
770
- }
771
- }
772
- return variants.length ? variants.length > 1 ? and(...variants) : variants[0] : void 0;
773
- };
774
- var extractFilters = (table, tableName, filters) => {
775
- if (!filters.OR?.length)
776
- delete filters.OR;
777
- const entries = Object.entries(filters);
778
- if (!entries.length)
779
- return;
780
- if (filters.OR) {
781
- if (entries.length > 1) {
782
- throw new GraphQLError2(
783
- `WHERE ${tableName}: Cannot specify both fields and 'OR' in table filters!`
784
- );
785
- }
786
- const variants2 = [];
787
- for (const variant of filters.OR) {
788
- const extracted = extractFilters(table, tableName, variant);
789
- if (extracted)
790
- variants2.push(extracted);
791
- }
792
- return variants2.length ? variants2.length > 1 ? or(...variants2) : variants2[0] : void 0;
793
- }
794
- const variants = [];
795
- for (const [columnName, operators] of entries) {
796
- if (operators === null)
797
- continue;
798
- const column = getTableColumns2(table)[columnName];
799
- variants.push(extractFiltersColumn(column, columnName, operators));
800
- }
801
- return variants.length ? variants.length > 1 ? and(...variants) : variants[0] : void 0;
802
- };
803
- var extractRelationsParamsInner = (relationMap, tables, tableName, typeName, originField, isInitial = false) => {
804
- const relations = relationMap[tableName];
805
- if (!relations)
806
- return void 0;
807
- const baseField = Object.entries(originField.fieldsByTypeName).find(
808
- ([key, value]) => key === typeName
809
- )?.[1];
810
- if (!baseField)
811
- return void 0;
812
- const args = {};
813
- for (const [relName, { targetTableName, relation }] of Object.entries(
814
- relations
815
- )) {
816
- const relTypeName = `${isInitial ? capitalize(tableName) : typeName}${capitalize(relName)}Relation`;
817
- const relFieldSelection = Object.values(baseField).find(
818
- (field) => field.name === relName
819
- )?.fieldsByTypeName[relTypeName];
820
- if (!relFieldSelection)
821
- continue;
822
- const columns = extractSelectedColumnsFromTree(
823
- relFieldSelection,
824
- tables[targetTableName]
825
- );
826
- const thisRecord = {};
827
- thisRecord.columns = columns;
828
- const relationField = Object.values(baseField).find(
829
- (e) => e.name === relName
830
- );
831
- const relationArgs = relationField?.args;
832
- const orderBy = relationArgs?.orderBy ? extractOrderBy(tables[targetTableName], relationArgs.orderBy) : void 0;
833
- const where = relationArgs?.where ? extractFilters(tables[targetTableName], relName, relationArgs?.where) : void 0;
834
- const offset = relationArgs?.offset ?? void 0;
835
- const limit = relationArgs?.limit ?? void 0;
836
- thisRecord.orderBy = orderBy;
837
- thisRecord.where = where;
838
- thisRecord.offset = offset;
839
- thisRecord.limit = limit;
840
- const relWith = relationField ? extractRelationsParamsInner(
841
- relationMap,
842
- tables,
843
- targetTableName,
844
- relTypeName,
845
- relationField
846
- ) : void 0;
847
- thisRecord.with = relWith;
848
- args[relName] = thisRecord;
849
- }
850
- return args;
851
- };
852
- var extractRelationsParams = (relationMap, tables, tableName, info, typeName) => {
853
- if (!info)
854
- return void 0;
855
- return extractRelationsParamsInner(
856
- relationMap,
857
- tables,
858
- tableName,
859
- typeName,
860
- info,
861
- true
862
- );
863
- };
864
-
865
- // src/util/builders/mysql.ts
866
- import { parseResolveInfo } from "graphql-parse-resolve-info";
867
- var generateSelectArray = (db, tableName, tables, relationMap, orderArgs, filterArgs) => {
868
- const queryName = `${uncapitalize(tableName)}`;
869
- const queryBase = db.query[tableName];
870
- if (!queryBase) {
871
- throw new Error(
872
- `Drizzle-GraphQL Error: Table ${tableName} not found in drizzle instance. Did you forget to pass schema to drizzle constructor?`
873
- );
874
- }
875
- const queryArgs = {
876
- offset: {
877
- type: GraphQLInt3
878
- },
879
- limit: {
880
- type: GraphQLInt3
881
- },
882
- orderBy: {
883
- type: orderArgs
884
- },
885
- where: {
886
- type: filterArgs
887
- }
888
- };
889
- const typeName = `${capitalize(tableName)}SelectItem`;
890
- const table = tables[tableName];
891
- return {
892
- name: queryName,
893
- resolver: async (source, args, context, info) => {
894
- try {
895
- const { offset, limit, orderBy, where } = args;
896
- const parsedInfo = parseResolveInfo(info, {
897
- deep: true
898
- });
899
- const query = queryBase.findMany({
900
- columns: extractSelectedColumnsFromTree(
901
- parsedInfo.fieldsByTypeName[typeName],
902
- table
903
- ),
904
- offset,
905
- limit,
906
- orderBy: orderBy ? extractOrderBy(table, orderBy) : void 0,
907
- where: where ? extractFilters(table, tableName, where) : void 0,
908
- with: relationMap[tableName] ? extractRelationsParams(relationMap, tables, tableName, parsedInfo, typeName) : void 0
909
- });
910
- const result = await query;
911
- return remapToGraphQLArrayOutput(result, tableName, table, relationMap);
912
- } catch (e) {
913
- if (typeof e === "object" && typeof e.message === "string") {
914
- throw new GraphQLError3(e.message);
915
- }
916
- throw e;
917
- }
918
- },
919
- args: queryArgs
920
- };
921
- };
922
- var generateSelectSingle = (db, tableName, tables, relationMap, orderArgs, filterArgs) => {
923
- const queryName = `${uncapitalize(tableName)}Single`;
924
- const queryBase = db.query[tableName];
925
- if (!queryBase) {
926
- throw new Error(
927
- `Drizzle-GraphQL Error: Table ${tableName} not found in drizzle instance. Did you forget to pass schema to drizzle constructor?`
928
- );
929
- }
930
- const queryArgs = {
931
- offset: {
932
- type: GraphQLInt3
933
- },
934
- orderBy: {
935
- type: orderArgs
936
- },
937
- where: {
938
- type: filterArgs
939
- }
940
- };
941
- const typeName = `${capitalize(tableName)}SelectItem`;
942
- const table = tables[tableName];
943
- return {
944
- name: queryName,
945
- resolver: async (source, args, context, info) => {
946
- try {
947
- const { offset, orderBy, where } = args;
948
- const parsedInfo = parseResolveInfo(info, {
949
- deep: true
950
- });
951
- const query = queryBase.findFirst({
952
- columns: extractSelectedColumnsFromTree(
953
- parsedInfo.fieldsByTypeName[typeName],
954
- table
955
- ),
956
- offset,
957
- orderBy: orderBy ? extractOrderBy(table, orderBy) : void 0,
958
- where: where ? extractFilters(table, tableName, where) : void 0,
959
- with: relationMap[tableName] ? extractRelationsParams(relationMap, tables, tableName, parsedInfo, typeName) : void 0
960
- });
961
- const result = await query;
962
- if (!result)
963
- return void 0;
964
- return remapToGraphQLSingleOutput(result, tableName, table, relationMap);
965
- } catch (e) {
966
- if (typeof e === "object" && typeof e.message === "string") {
967
- throw new GraphQLError3(e.message);
968
- }
969
- throw e;
970
- }
971
- },
972
- args: queryArgs
973
- };
974
- };
975
- var generateInsertArray = (db, tableName, table, baseType) => {
976
- const queryName = `insertInto${capitalize(tableName)}`;
977
- const queryArgs = {
978
- values: {
979
- type: new GraphQLNonNull3(new GraphQLList3(new GraphQLNonNull3(baseType)))
980
- }
981
- };
982
- return {
983
- name: queryName,
984
- resolver: async (source, args, context, info) => {
985
- try {
986
- const input = remapFromGraphQLArrayInput(args.values, table);
987
- if (!input.length)
988
- throw new GraphQLError3("No values were provided!");
989
- await db.insert(table).values(input);
990
- return { isSuccess: true };
991
- } catch (e) {
992
- if (typeof e === "object" && typeof e.message === "string") {
993
- throw new GraphQLError3(e.message);
994
- }
995
- throw e;
996
- }
997
- },
998
- args: queryArgs
999
- };
1000
- };
1001
- var generateInsertSingle = (db, tableName, table, baseType) => {
1002
- const queryName = `insertInto${capitalize(tableName)}Single`;
1003
- const queryArgs = {
1004
- values: {
1005
- type: new GraphQLNonNull3(baseType)
1006
- }
1007
- };
1008
- return {
1009
- name: queryName,
1010
- resolver: async (source, args, context, info) => {
1011
- try {
1012
- const input = remapFromGraphQLSingleInput(args.values, table);
1013
- await db.insert(table).values(input);
1014
- return { isSuccess: true };
1015
- } catch (e) {
1016
- if (typeof e === "object" && typeof e.message === "string") {
1017
- throw new GraphQLError3(e.message);
1018
- }
1019
- throw e;
1020
- }
1021
- },
1022
- args: queryArgs
1023
- };
1024
- };
1025
- var generateUpdate = (db, tableName, table, setArgs, filterArgs) => {
1026
- const queryName = `update${capitalize(tableName)}`;
1027
- const queryArgs = {
1028
- set: {
1029
- type: new GraphQLNonNull3(setArgs)
1030
- },
1031
- where: {
1032
- type: filterArgs
1033
- }
1034
- };
1035
- return {
1036
- name: queryName,
1037
- resolver: async (source, args, context, info) => {
1038
- try {
1039
- const { where, set } = args;
1040
- const input = remapFromGraphQLSingleInput(set, table);
1041
- if (!Object.keys(input).length)
1042
- throw new GraphQLError3("Unable to update with no values specified!");
1043
- let query = db.update(table).set(input);
1044
- if (where) {
1045
- const filters = extractFilters(table, tableName, where);
1046
- query = query.where(filters);
1047
- }
1048
- await query;
1049
- return { isSuccess: true };
1050
- } catch (e) {
1051
- if (typeof e === "object" && typeof e.message === "string") {
1052
- throw new GraphQLError3(e.message);
1053
- }
1054
- throw e;
1055
- }
1056
- },
1057
- args: queryArgs
1058
- };
1059
- };
1060
- var generateDelete = (db, tableName, table, filterArgs) => {
1061
- const queryName = `deleteFrom${tableName}`;
1062
- const queryArgs = {
1063
- where: {
1064
- type: filterArgs
1065
- }
1066
- };
1067
- return {
1068
- name: queryName,
1069
- resolver: async (source, args, context, info) => {
1070
- try {
1071
- const { where } = args;
1072
- let query = db.delete(table);
1073
- if (where) {
1074
- const filters = extractFilters(table, tableName, where);
1075
- query = query.where(filters);
1076
- }
1077
- await query;
1078
- return { isSuccess: true };
1079
- } catch (e) {
1080
- if (typeof e === "object" && typeof e.message === "string") {
1081
- throw new GraphQLError3(e.message);
1082
- }
1083
- throw e;
1084
- }
1085
- },
1086
- args: queryArgs
1087
- };
1088
- };
1089
- var generateSchemaData = (db, schema, relationsDepthLimit) => {
1090
- const rawSchema = schema;
1091
- const schemaEntries = Object.entries(rawSchema);
1092
- const tableEntries = schemaEntries.filter(([key, value]) => is3(value, MySqlTable));
1093
- const tables = Object.fromEntries(tableEntries);
1094
- if (!tableEntries.length) {
1095
- throw new Error(
1096
- "Drizzle-GraphQL Error: No tables detected in Drizzle-ORM's database instance. Did you forget to pass schema to drizzle constructor?"
1097
- );
1098
- }
1099
- const rawRelations = schemaEntries.filter(([key, value]) => is3(value, Relations)).map(([key, value]) => [
1100
- tableEntries.find(
1101
- ([tableName, tableValue]) => tableValue === value.table
1102
- )[0],
1103
- value
1104
- ]).map(([tableName, relValue]) => [
1105
- tableName,
1106
- relValue.config(createTableRelationsHelpers(tables[tableName]))
1107
- ]);
1108
- const namedRelations = Object.fromEntries(
1109
- rawRelations.map(([relName, config]) => {
1110
- const namedConfig = Object.fromEntries(
1111
- Object.entries(config).map(([innerRelName, innerRelValue]) => [innerRelName, {
1112
- relation: innerRelValue,
1113
- targetTableName: tableEntries.find(
1114
- ([tableName, tableValue]) => tableValue === innerRelValue.referencedTable
1115
- )[0]
1116
- }])
1117
- );
1118
- return [
1119
- relName,
1120
- namedConfig
1121
- ];
1122
- })
1123
- );
1124
- const queries = {};
1125
- const mutations = {};
1126
- const gqlSchemaTypes = Object.fromEntries(
1127
- Object.entries(tables).map(([tableName, table]) => [
1128
- tableName,
1129
- generateTableTypes(tableName, tables, namedRelations, false, relationsDepthLimit)
1130
- ])
1131
- );
1132
- const mutationReturnType = new GraphQLObjectType3({
1133
- name: `MutationReturn`,
1134
- fields: {
1135
- isSuccess: {
1136
- type: new GraphQLNonNull3(GraphQLBoolean3)
1137
- }
1138
- }
1139
- });
1140
- const inputs = {};
1141
- const outputs = {
1142
- MutationReturn: mutationReturnType
1143
- };
1144
- for (const [tableName, tableTypes] of Object.entries(gqlSchemaTypes)) {
1145
- const { insertInput, updateInput, tableFilters, tableOrder } = tableTypes.inputs;
1146
- const { selectSingleOutput, selectArrOutput } = tableTypes.outputs;
1147
- const selectArrGenerated = generateSelectArray(
1148
- db,
1149
- tableName,
1150
- tables,
1151
- namedRelations,
1152
- tableOrder,
1153
- tableFilters
1154
- );
1155
- const selectSingleGenerated = generateSelectSingle(
1156
- db,
1157
- tableName,
1158
- tables,
1159
- namedRelations,
1160
- tableOrder,
1161
- tableFilters
1162
- );
1163
- const insertArrGenerated = generateInsertArray(db, tableName, schema[tableName], insertInput);
1164
- const insertSingleGenerated = generateInsertSingle(db, tableName, schema[tableName], insertInput);
1165
- const updateGenerated = generateUpdate(
1166
- db,
1167
- tableName,
1168
- schema[tableName],
1169
- updateInput,
1170
- tableFilters
1171
- );
1172
- const deleteGenerated = generateDelete(db, tableName, schema[tableName], tableFilters);
1173
- queries[selectArrGenerated.name] = {
1174
- type: selectArrOutput,
1175
- args: selectArrGenerated.args,
1176
- resolve: selectArrGenerated.resolver
1177
- };
1178
- queries[selectSingleGenerated.name] = {
1179
- type: selectSingleOutput,
1180
- args: selectSingleGenerated.args,
1181
- resolve: selectSingleGenerated.resolver
1182
- };
1183
- mutations[insertArrGenerated.name] = {
1184
- type: mutationReturnType,
1185
- args: insertArrGenerated.args,
1186
- resolve: insertArrGenerated.resolver
1187
- };
1188
- mutations[insertSingleGenerated.name] = {
1189
- type: mutationReturnType,
1190
- args: insertSingleGenerated.args,
1191
- resolve: insertSingleGenerated.resolver
1192
- };
1193
- mutations[updateGenerated.name] = {
1194
- type: mutationReturnType,
1195
- args: updateGenerated.args,
1196
- resolve: updateGenerated.resolver
1197
- };
1198
- mutations[deleteGenerated.name] = {
1199
- type: mutationReturnType,
1200
- args: deleteGenerated.args,
1201
- resolve: deleteGenerated.resolver
1202
- };
1203
- [insertInput, updateInput, tableFilters, tableOrder].forEach((e) => inputs[e.name] = e);
1204
- outputs[selectSingleOutput.name] = selectSingleOutput;
1205
- }
1206
- return { queries, mutations, inputs, types: outputs };
1207
- };
1208
-
1209
- // src/util/builders/pg.ts
1210
- import { createTableRelationsHelpers as createTableRelationsHelpers2, is as is4, Relations as Relations2 } from "drizzle-orm";
1211
- import { PgTable } from "drizzle-orm/pg-core";
1212
- import {
1213
- GraphQLError as GraphQLError4,
1214
- GraphQLInt as GraphQLInt4,
1215
- GraphQLList as GraphQLList4,
1216
- GraphQLNonNull as GraphQLNonNull4
1217
- } from "graphql";
1218
- import { parseResolveInfo as parseResolveInfo2 } from "graphql-parse-resolve-info";
1219
- var generateSelectArray2 = (db, tableName, tables, relationMap, orderArgs, filterArgs) => {
1220
- const queryName = `${uncapitalize(tableName)}`;
1221
- const queryBase = db.query[tableName];
1222
- if (!queryBase) {
1223
- throw new Error(
1224
- `Drizzle-GraphQL Error: Table ${tableName} not found in drizzle instance. Did you forget to pass schema to drizzle constructor?`
1225
- );
1226
- }
1227
- const queryArgs = {
1228
- offset: {
1229
- type: GraphQLInt4
1230
- },
1231
- limit: {
1232
- type: GraphQLInt4
1233
- },
1234
- orderBy: {
1235
- type: orderArgs
1236
- },
1237
- where: {
1238
- type: filterArgs
1239
- }
1240
- };
1241
- const typeName = `${capitalize(tableName)}SelectItem`;
1242
- const table = tables[tableName];
1243
- return {
1244
- name: queryName,
1245
- resolver: async (source, args, context, info) => {
1246
- try {
1247
- const { offset, limit, orderBy, where } = args;
1248
- const parsedInfo = parseResolveInfo2(info, {
1249
- deep: true
1250
- });
1251
- const query = queryBase.findMany({
1252
- columns: extractSelectedColumnsFromTree(
1253
- parsedInfo.fieldsByTypeName[typeName],
1254
- table
1255
- ),
1256
- /*extractSelectedColumnsFromNode(tableSelection, info.fragments, table) */
1257
- offset,
1258
- limit,
1259
- orderBy: orderBy ? extractOrderBy(table, orderBy) : void 0,
1260
- where: where ? extractFilters(table, tableName, where) : void 0,
1261
- with: relationMap[tableName] ? extractRelationsParams(relationMap, tables, tableName, parsedInfo, typeName) : void 0
1262
- });
1263
- const result = await query;
1264
- return remapToGraphQLArrayOutput(result, tableName, table, relationMap);
1265
- } catch (e) {
1266
- if (typeof e === "object" && typeof e.message === "string") {
1267
- throw new GraphQLError4(e.message);
1268
- }
1269
- throw e;
1270
- }
1271
- },
1272
- args: queryArgs
1273
- };
1274
- };
1275
- var generateSelectSingle2 = (db, tableName, tables, relationMap, orderArgs, filterArgs) => {
1276
- const queryName = `${uncapitalize(tableName)}Single`;
1277
- const queryBase = db.query[tableName];
1278
- if (!queryBase) {
1279
- throw new Error(
1280
- `Drizzle-GraphQL Error: Table ${tableName} not found in drizzle instance. Did you forget to pass schema to drizzle constructor?`
1281
- );
1282
- }
1283
- const queryArgs = {
1284
- offset: {
1285
- type: GraphQLInt4
1286
- },
1287
- orderBy: {
1288
- type: orderArgs
1289
- },
1290
- where: {
1291
- type: filterArgs
1292
- }
1293
- };
1294
- const typeName = `${capitalize(tableName)}SelectItem`;
1295
- const table = tables[tableName];
1296
- return {
1297
- name: queryName,
1298
- resolver: async (source, args, context, info) => {
1299
- try {
1300
- const { offset, orderBy, where } = args;
1301
- const parsedInfo = parseResolveInfo2(info, {
1302
- deep: true
1303
- });
1304
- const query = queryBase.findFirst({
1305
- columns: extractSelectedColumnsFromTree(
1306
- parsedInfo.fieldsByTypeName[typeName],
1307
- table
1308
- ),
1309
- offset,
1310
- orderBy: orderBy ? extractOrderBy(table, orderBy) : void 0,
1311
- where: where ? extractFilters(table, tableName, where) : void 0,
1312
- with: relationMap[tableName] ? extractRelationsParams(relationMap, tables, tableName, parsedInfo, typeName) : void 0
1313
- });
1314
- const result = await query;
1315
- if (!result)
1316
- return void 0;
1317
- return remapToGraphQLSingleOutput(result, tableName, table, relationMap);
1318
- } catch (e) {
1319
- if (typeof e === "object" && typeof e.message === "string") {
1320
- throw new GraphQLError4(e.message);
1321
- }
1322
- throw e;
1323
- }
1324
- },
1325
- args: queryArgs
1326
- };
1327
- };
1328
- var generateInsertArray2 = (db, tableName, table, baseType) => {
1329
- const queryName = `insertInto${capitalize(tableName)}`;
1330
- const typeName = `${capitalize(tableName)}Item`;
1331
- const queryArgs = {
1332
- values: {
1333
- type: new GraphQLNonNull4(new GraphQLList4(new GraphQLNonNull4(baseType)))
1334
- }
1335
- };
1336
- return {
1337
- name: queryName,
1338
- resolver: async (source, args, context, info) => {
1339
- try {
1340
- const input = remapFromGraphQLArrayInput(args.values, table);
1341
- if (!input.length)
1342
- throw new GraphQLError4("No values were provided!");
1343
- const parsedInfo = parseResolveInfo2(info, {
1344
- deep: true
1345
- });
1346
- const columns = extractSelectedColumnsFromTreeSQLFormat(
1347
- parsedInfo.fieldsByTypeName[typeName],
1348
- table
1349
- );
1350
- const result = await db.insert(table).values(input).returning(columns).onConflictDoNothing();
1351
- return remapToGraphQLArrayOutput(result, tableName, table);
1352
- } catch (e) {
1353
- if (typeof e === "object" && typeof e.message === "string") {
1354
- throw new GraphQLError4(e.message);
1355
- }
1356
- throw e;
1357
- }
1358
- },
1359
- args: queryArgs
1360
- };
1361
- };
1362
- var generateInsertSingle2 = (db, tableName, table, baseType) => {
1363
- const queryName = `insertInto${capitalize(tableName)}Single`;
1364
- const typeName = `${capitalize(tableName)}Item`;
1365
- const queryArgs = {
1366
- values: {
1367
- type: new GraphQLNonNull4(baseType)
1368
- }
1369
- };
1370
- return {
1371
- name: queryName,
1372
- resolver: async (source, args, context, info) => {
1373
- try {
1374
- const input = remapFromGraphQLSingleInput(args.values, table);
1375
- const parsedInfo = parseResolveInfo2(info, {
1376
- deep: true
1377
- });
1378
- const columns = extractSelectedColumnsFromTreeSQLFormat(
1379
- parsedInfo.fieldsByTypeName[typeName],
1380
- table
1381
- );
1382
- const result = await db.insert(table).values(input).returning(columns).onConflictDoNothing();
1383
- if (!result[0])
1384
- return void 0;
1385
- return remapToGraphQLSingleOutput(result[0], tableName, table);
1386
- } catch (e) {
1387
- if (typeof e === "object" && typeof e.message === "string") {
1388
- throw new GraphQLError4(e.message);
1389
- }
1390
- throw e;
1391
- }
1392
- },
1393
- args: queryArgs
1394
- };
1395
- };
1396
- var generateUpdate2 = (db, tableName, table, setArgs, filterArgs) => {
1397
- const queryName = `update${capitalize(tableName)}`;
1398
- const typeName = `${capitalize(tableName)}Item`;
1399
- const queryArgs = {
1400
- set: {
1401
- type: new GraphQLNonNull4(setArgs)
1402
- },
1403
- where: {
1404
- type: filterArgs
1405
- }
1406
- };
1407
- return {
1408
- name: queryName,
1409
- resolver: async (source, args, context, info) => {
1410
- try {
1411
- const { where, set } = args;
1412
- const parsedInfo = parseResolveInfo2(info, {
1413
- deep: true
1414
- });
1415
- const columns = extractSelectedColumnsFromTreeSQLFormat(
1416
- parsedInfo.fieldsByTypeName[typeName],
1417
- table
1418
- );
1419
- const input = remapFromGraphQLSingleInput(set, table);
1420
- if (!Object.keys(input).length)
1421
- throw new GraphQLError4("Unable to update with no values specified!");
1422
- let query = db.update(table).set(input);
1423
- if (where) {
1424
- const filters = extractFilters(table, tableName, where);
1425
- query = query.where(filters);
1426
- }
1427
- query = query.returning(columns);
1428
- const result = await query;
1429
- return remapToGraphQLArrayOutput(result, tableName, table);
1430
- } catch (e) {
1431
- if (typeof e === "object" && typeof e.message === "string") {
1432
- throw new GraphQLError4(e.message);
1433
- }
1434
- throw e;
1435
- }
1436
- },
1437
- args: queryArgs
1438
- };
1439
- };
1440
- var generateDelete2 = (db, tableName, table, filterArgs) => {
1441
- const queryName = `deleteFrom${capitalize(tableName)}`;
1442
- const typeName = `${capitalize(tableName)}Item`;
1443
- const queryArgs = {
1444
- where: {
1445
- type: filterArgs
1446
- }
1447
- };
1448
- return {
1449
- name: queryName,
1450
- resolver: async (source, args, context, info) => {
1451
- try {
1452
- const { where } = args;
1453
- const parsedInfo = parseResolveInfo2(info, {
1454
- deep: true
1455
- });
1456
- const columns = extractSelectedColumnsFromTreeSQLFormat(
1457
- parsedInfo.fieldsByTypeName[typeName],
1458
- table
1459
- );
1460
- let query = db.delete(table);
1461
- if (where) {
1462
- const filters = extractFilters(table, tableName, where);
1463
- query = query.where(filters);
1464
- }
1465
- query = query.returning(columns);
1466
- const result = await query;
1467
- return remapToGraphQLArrayOutput(result, tableName, table);
1468
- } catch (e) {
1469
- if (typeof e === "object" && typeof e.message === "string") {
1470
- throw new GraphQLError4(e.message);
1471
- }
1472
- throw e;
1473
- }
1474
- },
1475
- args: queryArgs
1476
- };
1477
- };
1478
- var generateSchemaData2 = (db, schema, relationsDepthLimit) => {
1479
- const rawSchema = schema;
1480
- const schemaEntries = Object.entries(rawSchema);
1481
- const tableEntries = schemaEntries.filter(([key, value]) => is4(value, PgTable));
1482
- const tables = Object.fromEntries(tableEntries);
1483
- if (!tableEntries.length) {
1484
- throw new Error(
1485
- "Drizzle-GraphQL Error: No tables detected in Drizzle-ORM's database instance. Did you forget to pass schema to drizzle constructor?"
1486
- );
1487
- }
1488
- const rawRelations = schemaEntries.filter(([key, value]) => is4(value, Relations2)).map(([key, value]) => [
1489
- tableEntries.find(
1490
- ([tableName, tableValue]) => tableValue === value.table
1491
- )[0],
1492
- value
1493
- ]).map(([tableName, relValue]) => [
1494
- tableName,
1495
- relValue.config(createTableRelationsHelpers2(tables[tableName]))
1496
- ]);
1497
- const namedRelations = Object.fromEntries(
1498
- rawRelations.map(([relName, config]) => {
1499
- const namedConfig = Object.fromEntries(
1500
- Object.entries(config).map(([innerRelName, innerRelValue]) => [innerRelName, {
1501
- relation: innerRelValue,
1502
- targetTableName: tableEntries.find(
1503
- ([tableName, tableValue]) => tableValue === innerRelValue.referencedTable
1504
- )[0]
1505
- }])
1506
- );
1507
- return [
1508
- relName,
1509
- namedConfig
1510
- ];
1511
- })
1512
- );
1513
- const queries = {};
1514
- const mutations = {};
1515
- const gqlSchemaTypes = Object.fromEntries(
1516
- Object.entries(tables).map(([tableName, table]) => [
1517
- tableName,
1518
- generateTableTypes(tableName, tables, namedRelations, true, relationsDepthLimit)
1519
- ])
1520
- );
1521
- const inputs = {};
1522
- const outputs = {};
1523
- for (const [tableName, tableTypes] of Object.entries(gqlSchemaTypes)) {
1524
- const { insertInput, updateInput, tableFilters, tableOrder } = tableTypes.inputs;
1525
- const { selectSingleOutput, selectArrOutput, singleTableItemOutput, arrTableItemOutput } = tableTypes.outputs;
1526
- const selectArrGenerated = generateSelectArray2(
1527
- db,
1528
- tableName,
1529
- tables,
1530
- namedRelations,
1531
- tableOrder,
1532
- tableFilters
1533
- );
1534
- const selectSingleGenerated = generateSelectSingle2(
1535
- db,
1536
- tableName,
1537
- tables,
1538
- namedRelations,
1539
- tableOrder,
1540
- tableFilters
1541
- );
1542
- const insertArrGenerated = generateInsertArray2(db, tableName, schema[tableName], insertInput);
1543
- const insertSingleGenerated = generateInsertSingle2(db, tableName, schema[tableName], insertInput);
1544
- const updateGenerated = generateUpdate2(db, tableName, schema[tableName], updateInput, tableFilters);
1545
- const deleteGenerated = generateDelete2(db, tableName, schema[tableName], tableFilters);
1546
- queries[selectArrGenerated.name] = {
1547
- type: selectArrOutput,
1548
- args: selectArrGenerated.args,
1549
- resolve: selectArrGenerated.resolver
1550
- };
1551
- queries[selectSingleGenerated.name] = {
1552
- type: selectSingleOutput,
1553
- args: selectSingleGenerated.args,
1554
- resolve: selectSingleGenerated.resolver
1555
- };
1556
- mutations[insertArrGenerated.name] = {
1557
- type: arrTableItemOutput,
1558
- args: insertArrGenerated.args,
1559
- resolve: insertArrGenerated.resolver
1560
- };
1561
- mutations[insertSingleGenerated.name] = {
1562
- type: singleTableItemOutput,
1563
- args: insertSingleGenerated.args,
1564
- resolve: insertSingleGenerated.resolver
1565
- };
1566
- mutations[updateGenerated.name] = {
1567
- type: arrTableItemOutput,
1568
- args: updateGenerated.args,
1569
- resolve: updateGenerated.resolver
1570
- };
1571
- mutations[deleteGenerated.name] = {
1572
- type: arrTableItemOutput,
1573
- args: deleteGenerated.args,
1574
- resolve: deleteGenerated.resolver
1575
- };
1576
- [insertInput, updateInput, tableFilters, tableOrder].forEach((e) => inputs[e.name] = e);
1577
- outputs[selectSingleOutput.name] = selectSingleOutput;
1578
- outputs[singleTableItemOutput.name] = singleTableItemOutput;
1579
- }
1580
- return { queries, mutations, inputs, types: outputs };
1581
- };
1582
-
1583
- // src/util/builders/sqlite.ts
1584
- import { createTableRelationsHelpers as createTableRelationsHelpers3, is as is5, Relations as Relations3 } from "drizzle-orm";
1585
- import { SQLiteTable } from "drizzle-orm/sqlite-core";
1586
- import {
1587
- GraphQLError as GraphQLError5,
1588
- GraphQLInt as GraphQLInt5,
1589
- GraphQLList as GraphQLList5,
1590
- GraphQLNonNull as GraphQLNonNull5
1591
- } from "graphql";
1592
- import { parseResolveInfo as parseResolveInfo3 } from "graphql-parse-resolve-info";
1593
- var generateSelectArray3 = (db, tableName, tables, relationMap, orderArgs, filterArgs) => {
1594
- const queryName = `${uncapitalize(tableName)}`;
1595
- const queryBase = db.query[tableName];
1596
- if (!queryBase) {
1597
- throw new Error(
1598
- `Drizzle-GraphQL Error: Table ${tableName} not found in drizzle instance. Did you forget to pass schema to drizzle constructor?`
1599
- );
1600
- }
1601
- const queryArgs = {
1602
- offset: {
1603
- type: GraphQLInt5
1604
- },
1605
- limit: {
1606
- type: GraphQLInt5
1607
- },
1608
- orderBy: {
1609
- type: orderArgs
1610
- },
1611
- where: {
1612
- type: filterArgs
1613
- }
1614
- };
1615
- const typeName = `${capitalize(tableName)}SelectItem`;
1616
- const table = tables[tableName];
1617
- return {
1618
- name: queryName,
1619
- resolver: async (source, args, context, info) => {
1620
- try {
1621
- const { offset, limit, orderBy, where } = args;
1622
- const parsedInfo = parseResolveInfo3(info, {
1623
- deep: true
1624
- });
1625
- const query = queryBase.findMany({
1626
- columns: extractSelectedColumnsFromTree(
1627
- parsedInfo.fieldsByTypeName[typeName],
1628
- table
1629
- ),
1630
- offset,
1631
- limit,
1632
- orderBy: orderBy ? extractOrderBy(table, orderBy) : void 0,
1633
- where: where ? extractFilters(table, tableName, where) : void 0,
1634
- with: relationMap[tableName] ? extractRelationsParams(relationMap, tables, tableName, parsedInfo, typeName) : void 0
1635
- });
1636
- const result = await query;
1637
- return remapToGraphQLArrayOutput(result, tableName, table, relationMap);
1638
- } catch (e) {
1639
- if (typeof e === "object" && typeof e.message === "string") {
1640
- throw new GraphQLError5(e.message);
1641
- }
1642
- throw e;
1643
- }
1644
- },
1645
- args: queryArgs
1646
- };
1647
- };
1648
- var generateSelectSingle3 = (db, tableName, tables, relationMap, orderArgs, filterArgs) => {
1649
- const queryName = `${uncapitalize(tableName)}Single`;
1650
- const queryBase = db.query[tableName];
1651
- if (!queryBase) {
1652
- throw new Error(
1653
- `Drizzle-GraphQL Error: Table ${tableName} not found in drizzle instance. Did you forget to pass schema to drizzle constructor?`
1654
- );
1655
- }
1656
- const queryArgs = {
1657
- offset: {
1658
- type: GraphQLInt5
1659
- },
1660
- orderBy: {
1661
- type: orderArgs
1662
- },
1663
- where: {
1664
- type: filterArgs
1665
- }
1666
- };
1667
- const typeName = `${capitalize(tableName)}SelectItem`;
1668
- const table = tables[tableName];
1669
- return {
1670
- name: queryName,
1671
- resolver: async (source, args, context, info) => {
1672
- try {
1673
- const { offset, orderBy, where } = args;
1674
- const parsedInfo = parseResolveInfo3(info, {
1675
- deep: true
1676
- });
1677
- const query = queryBase.findFirst({
1678
- columns: extractSelectedColumnsFromTree(
1679
- parsedInfo.fieldsByTypeName[typeName],
1680
- table
1681
- ),
1682
- offset,
1683
- orderBy: orderBy ? extractOrderBy(table, orderBy) : void 0,
1684
- where: where ? extractFilters(table, tableName, where) : void 0,
1685
- with: relationMap[tableName] ? extractRelationsParams(relationMap, tables, tableName, parsedInfo, typeName) : void 0
1686
- });
1687
- const result = await query;
1688
- if (!result)
1689
- return void 0;
1690
- return remapToGraphQLSingleOutput(result, tableName, table, relationMap);
1691
- } catch (e) {
1692
- if (typeof e === "object" && typeof e.message === "string") {
1693
- throw new GraphQLError5(e.message);
1694
- }
1695
- throw e;
1696
- }
1697
- },
1698
- args: queryArgs
1699
- };
1700
- };
1701
- var generateInsertArray3 = (db, tableName, table, baseType) => {
1702
- const queryName = `insertInto${capitalize(tableName)}`;
1703
- const typeName = `${capitalize(tableName)}Item`;
1704
- const queryArgs = {
1705
- values: {
1706
- type: new GraphQLNonNull5(new GraphQLList5(new GraphQLNonNull5(baseType)))
1707
- }
1708
- };
1709
- return {
1710
- name: queryName,
1711
- resolver: async (source, args, context, info) => {
1712
- try {
1713
- const input = remapFromGraphQLArrayInput(args.values, table);
1714
- if (!input.length)
1715
- throw new GraphQLError5("No values were provided!");
1716
- const parsedInfo = parseResolveInfo3(info, {
1717
- deep: true
1718
- });
1719
- const columns = extractSelectedColumnsFromTreeSQLFormat(
1720
- parsedInfo.fieldsByTypeName[typeName],
1721
- table
1722
- );
1723
- const result = await db.insert(table).values(input).returning(columns).onConflictDoNothing();
1724
- return remapToGraphQLArrayOutput(result, tableName, table);
1725
- } catch (e) {
1726
- if (typeof e === "object" && typeof e.message === "string") {
1727
- throw new GraphQLError5(e.message);
1728
- }
1729
- throw e;
1730
- }
1731
- },
1732
- args: queryArgs
1733
- };
1734
- };
1735
- var generateInsertSingle3 = (db, tableName, table, baseType) => {
1736
- const queryName = `insertInto${capitalize(tableName)}Single`;
1737
- const typeName = `${capitalize(tableName)}Item`;
1738
- const queryArgs = {
1739
- values: {
1740
- type: new GraphQLNonNull5(baseType)
1741
- }
1742
- };
1743
- return {
1744
- name: queryName,
1745
- resolver: async (source, args, context, info) => {
1746
- try {
1747
- const input = remapFromGraphQLSingleInput(args.values, table);
1748
- const parsedInfo = parseResolveInfo3(info, {
1749
- deep: true
1750
- });
1751
- const columns = extractSelectedColumnsFromTreeSQLFormat(
1752
- parsedInfo.fieldsByTypeName[typeName],
1753
- table
1754
- );
1755
- const result = await db.insert(table).values(input).returning(columns).onConflictDoNothing();
1756
- if (!result[0])
1757
- return void 0;
1758
- return remapToGraphQLSingleOutput(result[0], tableName, table);
1759
- } catch (e) {
1760
- if (typeof e === "object" && typeof e.message === "string") {
1761
- throw new GraphQLError5(e.message);
1762
- }
1763
- throw e;
1764
- }
1765
- },
1766
- args: queryArgs
1767
- };
1768
- };
1769
- var generateUpdate3 = (db, tableName, table, setArgs, filterArgs) => {
1770
- const queryName = `update${capitalize(tableName)}`;
1771
- const typeName = `${capitalize(tableName)}Item`;
1772
- const queryArgs = {
1773
- set: {
1774
- type: new GraphQLNonNull5(setArgs)
1775
- },
1776
- where: {
1777
- type: filterArgs
1778
- }
1779
- };
1780
- return {
1781
- name: queryName,
1782
- resolver: async (source, args, context, info) => {
1783
- try {
1784
- const { where, set } = args;
1785
- const parsedInfo = parseResolveInfo3(info, {
1786
- deep: true
1787
- });
1788
- const columns = extractSelectedColumnsFromTreeSQLFormat(
1789
- parsedInfo.fieldsByTypeName[typeName],
1790
- table
1791
- );
1792
- const input = remapFromGraphQLSingleInput(set, table);
1793
- if (!Object.keys(input).length)
1794
- throw new GraphQLError5("Unable to update with no values specified!");
1795
- let query = db.update(table).set(input);
1796
- if (where) {
1797
- const filters = extractFilters(table, tableName, where);
1798
- query = query.where(filters);
1799
- }
1800
- query = query.returning(columns);
1801
- const result = await query;
1802
- return remapToGraphQLArrayOutput(result, tableName, table);
1803
- } catch (e) {
1804
- if (typeof e === "object" && typeof e.message === "string") {
1805
- throw new GraphQLError5(e.message);
1806
- }
1807
- throw e;
1808
- }
1809
- },
1810
- args: queryArgs
1811
- };
1812
- };
1813
- var generateDelete3 = (db, tableName, table, filterArgs) => {
1814
- const queryName = `deleteFrom${capitalize(tableName)}`;
1815
- const typeName = `${capitalize(tableName)}Item`;
1816
- const queryArgs = {
1817
- where: {
1818
- type: filterArgs
1819
- }
1820
- };
1821
- return {
1822
- name: queryName,
1823
- resolver: async (source, args, context, info) => {
1824
- try {
1825
- const { where } = args;
1826
- const parsedInfo = parseResolveInfo3(info, {
1827
- deep: true
1828
- });
1829
- const columns = extractSelectedColumnsFromTreeSQLFormat(
1830
- parsedInfo.fieldsByTypeName[typeName],
1831
- table
1832
- );
1833
- let query = db.delete(table);
1834
- if (where) {
1835
- const filters = extractFilters(table, tableName, where);
1836
- query = query.where(filters);
1837
- }
1838
- query = query.returning(columns);
1839
- const result = await query;
1840
- return remapToGraphQLArrayOutput(result, tableName, table);
1841
- } catch (e) {
1842
- if (typeof e === "object" && typeof e.message === "string") {
1843
- throw new GraphQLError5(e.message);
1844
- }
1845
- throw e;
1846
- }
1847
- },
1848
- args: queryArgs
1849
- };
1850
- };
1851
- var generateSchemaData3 = (db, schema, relationsDepthLimit) => {
1852
- const rawSchema = schema;
1853
- const schemaEntries = Object.entries(rawSchema);
1854
- const tableEntries = schemaEntries.filter(([key, value]) => is5(value, SQLiteTable));
1855
- const tables = Object.fromEntries(tableEntries);
1856
- if (!tableEntries.length) {
1857
- throw new Error(
1858
- "Drizzle-GraphQL Error: No tables detected in Drizzle-ORM's database instance. Did you forget to pass schema to drizzle constructor?"
1859
- );
1860
- }
1861
- const rawRelations = schemaEntries.filter(([key, value]) => is5(value, Relations3)).map(([key, value]) => [
1862
- tableEntries.find(
1863
- ([tableName, tableValue]) => tableValue === value.table
1864
- )[0],
1865
- value
1866
- ]).map(([tableName, relValue]) => [
1867
- tableName,
1868
- relValue.config(createTableRelationsHelpers3(tables[tableName]))
1869
- ]);
1870
- const namedRelations = Object.fromEntries(
1871
- rawRelations.map(([relName, config]) => {
1872
- const namedConfig = Object.fromEntries(
1873
- Object.entries(config).map(([innerRelName, innerRelValue]) => [innerRelName, {
1874
- relation: innerRelValue,
1875
- targetTableName: tableEntries.find(
1876
- ([tableName, tableValue]) => tableValue === innerRelValue.referencedTable
1877
- )[0]
1878
- }])
1879
- );
1880
- return [
1881
- relName,
1882
- namedConfig
1883
- ];
1884
- })
1885
- );
1886
- const queries = {};
1887
- const mutations = {};
1888
- const gqlSchemaTypes = Object.fromEntries(
1889
- Object.entries(tables).map(([tableName, table]) => [
1890
- tableName,
1891
- generateTableTypes(tableName, tables, namedRelations, true, relationsDepthLimit)
1892
- ])
1893
- );
1894
- const inputs = {};
1895
- const outputs = {};
1896
- for (const [tableName, tableTypes] of Object.entries(gqlSchemaTypes)) {
1897
- const { insertInput, updateInput, tableFilters, tableOrder } = tableTypes.inputs;
1898
- const { selectSingleOutput, selectArrOutput, singleTableItemOutput, arrTableItemOutput } = tableTypes.outputs;
1899
- const selectArrGenerated = generateSelectArray3(
1900
- db,
1901
- tableName,
1902
- tables,
1903
- namedRelations,
1904
- tableOrder,
1905
- tableFilters
1906
- );
1907
- const selectSingleGenerated = generateSelectSingle3(
1908
- db,
1909
- tableName,
1910
- tables,
1911
- namedRelations,
1912
- tableOrder,
1913
- tableFilters
1914
- );
1915
- const insertArrGenerated = generateInsertArray3(db, tableName, schema[tableName], insertInput);
1916
- const insertSingleGenerated = generateInsertSingle3(db, tableName, schema[tableName], insertInput);
1917
- const updateGenerated = generateUpdate3(
1918
- db,
1919
- tableName,
1920
- schema[tableName],
1921
- updateInput,
1922
- tableFilters
1923
- );
1924
- const deleteGenerated = generateDelete3(db, tableName, schema[tableName], tableFilters);
1925
- queries[selectArrGenerated.name] = {
1926
- type: selectArrOutput,
1927
- args: selectArrGenerated.args,
1928
- resolve: selectArrGenerated.resolver
1929
- };
1930
- queries[selectSingleGenerated.name] = {
1931
- type: selectSingleOutput,
1932
- args: selectSingleGenerated.args,
1933
- resolve: selectSingleGenerated.resolver
1934
- };
1935
- mutations[insertArrGenerated.name] = {
1936
- type: arrTableItemOutput,
1937
- args: insertArrGenerated.args,
1938
- resolve: insertArrGenerated.resolver
1939
- };
1940
- mutations[insertSingleGenerated.name] = {
1941
- type: singleTableItemOutput,
1942
- args: insertSingleGenerated.args,
1943
- resolve: insertSingleGenerated.resolver
1944
- };
1945
- mutations[updateGenerated.name] = {
1946
- type: arrTableItemOutput,
1947
- args: updateGenerated.args,
1948
- resolve: updateGenerated.resolver
1949
- };
1950
- mutations[deleteGenerated.name] = {
1951
- type: arrTableItemOutput,
1952
- args: deleteGenerated.args,
1953
- resolve: deleteGenerated.resolver
1954
- };
1955
- [insertInput, updateInput, tableFilters, tableOrder].forEach((e) => inputs[e.name] = e);
1956
- outputs[selectSingleOutput.name] = selectSingleOutput;
1957
- outputs[singleTableItemOutput.name] = singleTableItemOutput;
1958
- }
1959
- return { queries, mutations, inputs, types: outputs };
1960
- };
1961
-
1962
- // src/index.ts
1963
- var buildSchema = (db, config) => {
1964
- const schema = db._.fullSchema;
1965
- if (!schema) {
1966
- throw new Error(
1967
- "Drizzle-GraphQL Error: Schema not found in drizzle instance. Make sure you're using drizzle-orm v0.30.9 or above and schema is passed to drizzle constructor!"
1968
- );
1969
- }
1970
- if (typeof config?.relationsDepthLimit === "number") {
1971
- if (config.relationsDepthLimit < 0) {
1972
- throw new Error(
1973
- "Drizzle-GraphQL Error: config.relationsDepthLimit is supposed to be nonnegative integer or undefined!"
1974
- );
1975
- }
1976
- if (config.relationsDepthLimit !== ~~config.relationsDepthLimit) {
1977
- throw new Error(
1978
- "Drizzle-GraphQL Error: config.relationsDepthLimit is supposed to be nonnegative integer or undefined!"
1979
- );
1980
- }
1981
- }
1982
- let generatorOutput;
1983
- if (is6(db, MySqlDatabase2)) {
1984
- generatorOutput = generateSchemaData(db, schema, config?.relationsDepthLimit);
1985
- } else if (is6(db, PgDatabase2)) {
1986
- generatorOutput = generateSchemaData2(db, schema, config?.relationsDepthLimit);
1987
- } else if (is6(db, BaseSQLiteDatabase2)) {
1988
- generatorOutput = generateSchemaData3(db, schema, config?.relationsDepthLimit);
1989
- } else
1990
- throw new Error("Drizzle-GraphQL Error: Unknown database instance type");
1991
- const { queries, mutations, inputs, types } = generatorOutput;
1992
- const graphQLSchemaConfig = {
1993
- types: [...Object.values(inputs), ...Object.values(types)],
1994
- query: new GraphQLObjectType6({
1995
- name: "Query",
1996
- fields: queries
1997
- })
1998
- };
1999
- if (config?.mutations !== false) {
2000
- const mutation = new GraphQLObjectType6({
2001
- name: "Mutation",
2002
- fields: mutations
2003
- });
2004
- graphQLSchemaConfig.mutation = mutation;
2005
- }
2006
- const outputSchema = new GraphQLSchema(graphQLSchemaConfig);
2007
- return { schema: outputSchema, entities: generatorOutput };
2008
- };
2009
- export {
2010
- buildSchema
2011
- };
2012
- //# sourceMappingURL=index.js.map