graphile-build-pg 4.13.0 → 4.14.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. package/README.md +4 -13
  2. package/node8plus/GraphQLJSON.js +0 -11
  3. package/node8plus/GraphQLJSON.js.map +1 -1
  4. package/node8plus/PgLiveProvider.js +4 -11
  5. package/node8plus/PgLiveProvider.js.map +1 -1
  6. package/node8plus/QueryBuilder.js +42 -176
  7. package/node8plus/QueryBuilder.js.map +1 -1
  8. package/node8plus/index.js +8 -47
  9. package/node8plus/index.js.map +1 -1
  10. package/node8plus/inflections.js +9 -61
  11. package/node8plus/inflections.js.map +1 -1
  12. package/node8plus/omit.js +7 -22
  13. package/node8plus/omit.js.map +1 -1
  14. package/node8plus/parseIdentifier.js +0 -1
  15. package/node8plus/parseIdentifier.js.map +1 -1
  16. package/node8plus/pgPrepareAndRun.js +2 -14
  17. package/node8plus/pgPrepareAndRun.js.map +1 -1
  18. package/node8plus/plugins/PageInfoStartEndCursor.js +0 -4
  19. package/node8plus/plugins/PageInfoStartEndCursor.js.map +1 -1
  20. package/node8plus/plugins/PgAllRows.js +0 -29
  21. package/node8plus/plugins/PgAllRows.js.map +1 -1
  22. package/node8plus/plugins/PgBackwardRelationPlugin.js +2 -41
  23. package/node8plus/plugins/PgBackwardRelationPlugin.js.map +1 -1
  24. package/node8plus/plugins/PgBasicsPlugin.js +20 -147
  25. package/node8plus/plugins/PgBasicsPlugin.js.map +1 -1
  26. package/node8plus/plugins/PgColumnDeprecationPlugin.js +2 -5
  27. package/node8plus/plugins/PgColumnDeprecationPlugin.js.map +1 -1
  28. package/node8plus/plugins/PgColumnsPlugin.js +4 -17
  29. package/node8plus/plugins/PgColumnsPlugin.js.map +1 -1
  30. package/node8plus/plugins/PgComputedColumnsPlugin.js +4 -19
  31. package/node8plus/plugins/PgComputedColumnsPlugin.js.map +1 -1
  32. package/node8plus/plugins/PgConditionComputedColumnPlugin.js +12 -23
  33. package/node8plus/plugins/PgConditionComputedColumnPlugin.js.map +1 -1
  34. package/node8plus/plugins/PgConnectionArgCondition.js +1 -9
  35. package/node8plus/plugins/PgConnectionArgCondition.js.map +1 -1
  36. package/node8plus/plugins/PgConnectionArgFirstLastBeforeAfter.js +0 -12
  37. package/node8plus/plugins/PgConnectionArgFirstLastBeforeAfter.js.map +1 -1
  38. package/node8plus/plugins/PgConnectionArgOrderBy.js +2 -19
  39. package/node8plus/plugins/PgConnectionArgOrderBy.js.map +1 -1
  40. package/node8plus/plugins/PgConnectionArgOrderByDefaultValue.js +0 -6
  41. package/node8plus/plugins/PgConnectionArgOrderByDefaultValue.js.map +1 -1
  42. package/node8plus/plugins/PgConnectionTotalCount.js +0 -8
  43. package/node8plus/plugins/PgConnectionTotalCount.js.map +1 -1
  44. package/node8plus/plugins/PgForwardRelationPlugin.js +2 -25
  45. package/node8plus/plugins/PgForwardRelationPlugin.js.map +1 -1
  46. package/node8plus/plugins/PgIntrospectionPlugin.js +91 -180
  47. package/node8plus/plugins/PgIntrospectionPlugin.js.flow +30 -2
  48. package/node8plus/plugins/PgIntrospectionPlugin.js.map +1 -1
  49. package/node8plus/plugins/PgJWTPlugin.js +2 -18
  50. package/node8plus/plugins/PgJWTPlugin.js.map +1 -1
  51. package/node8plus/plugins/PgMutationCreatePlugin.js +0 -18
  52. package/node8plus/plugins/PgMutationCreatePlugin.js.map +1 -1
  53. package/node8plus/plugins/PgMutationPayloadEdgePlugin.js +4 -25
  54. package/node8plus/plugins/PgMutationPayloadEdgePlugin.js.map +1 -1
  55. package/node8plus/plugins/PgMutationProceduresPlugin.js +0 -6
  56. package/node8plus/plugins/PgMutationProceduresPlugin.js.map +1 -1
  57. package/node8plus/plugins/PgMutationUpdateDeletePlugin.js +14 -49
  58. package/node8plus/plugins/PgMutationUpdateDeletePlugin.js.flow +5 -2
  59. package/node8plus/plugins/PgMutationUpdateDeletePlugin.js.map +1 -1
  60. package/node8plus/plugins/PgNodeAliasPostGraphile.js +0 -6
  61. package/node8plus/plugins/PgNodeAliasPostGraphile.js.map +1 -1
  62. package/node8plus/plugins/PgOrderAllColumnsPlugin.js +0 -4
  63. package/node8plus/plugins/PgOrderAllColumnsPlugin.js.map +1 -1
  64. package/node8plus/plugins/PgOrderByPrimaryKeyPlugin.js +0 -6
  65. package/node8plus/plugins/PgOrderByPrimaryKeyPlugin.js.map +1 -1
  66. package/node8plus/plugins/PgOrderComputedColumnsPlugin.js +10 -14
  67. package/node8plus/plugins/PgOrderComputedColumnsPlugin.js.map +1 -1
  68. package/node8plus/plugins/PgQueryProceduresPlugin.js +4 -16
  69. package/node8plus/plugins/PgQueryProceduresPlugin.js.map +1 -1
  70. package/node8plus/plugins/PgRecordFunctionConnectionPlugin.js +3 -20
  71. package/node8plus/plugins/PgRecordFunctionConnectionPlugin.js.map +1 -1
  72. package/node8plus/plugins/PgRecordReturnTypesPlugin.js +11 -16
  73. package/node8plus/plugins/PgRecordReturnTypesPlugin.js.map +1 -1
  74. package/node8plus/plugins/PgRowByUniqueConstraint.js +4 -25
  75. package/node8plus/plugins/PgRowByUniqueConstraint.js.map +1 -1
  76. package/node8plus/plugins/PgRowNode.js +0 -32
  77. package/node8plus/plugins/PgRowNode.js.map +1 -1
  78. package/node8plus/plugins/PgScalarFunctionConnectionPlugin.js +3 -17
  79. package/node8plus/plugins/PgScalarFunctionConnectionPlugin.js.map +1 -1
  80. package/node8plus/plugins/PgTablesPlugin.js +7 -59
  81. package/node8plus/plugins/PgTablesPlugin.js.map +1 -1
  82. package/node8plus/plugins/PgTypesPlugin.js +140 -240
  83. package/node8plus/plugins/PgTypesPlugin.js.flow +76 -23
  84. package/node8plus/plugins/PgTypesPlugin.js.map +1 -1
  85. package/node8plus/plugins/addStartEndCursor.js +2 -5
  86. package/node8plus/plugins/addStartEndCursor.js.map +1 -1
  87. package/node8plus/plugins/debugSql.js +1 -16
  88. package/node8plus/plugins/debugSql.js.map +1 -1
  89. package/node8plus/plugins/introspectionQuery.js +3 -4
  90. package/node8plus/plugins/introspectionQuery.js.flow +11 -3
  91. package/node8plus/plugins/introspectionQuery.js.map +1 -1
  92. package/node8plus/plugins/makeProcField.js +40 -90
  93. package/node8plus/plugins/makeProcField.js.map +1 -1
  94. package/node8plus/plugins/pgField.js +2 -7
  95. package/node8plus/plugins/pgField.js.map +1 -1
  96. package/node8plus/plugins/viaTemporaryTable.js +6 -12
  97. package/node8plus/plugins/viaTemporaryTable.js.map +1 -1
  98. package/node8plus/postgresInterval.js +4 -4
  99. package/node8plus/postgresInterval.js.map +1 -1
  100. package/node8plus/queryFromResolveDataFactory.js +33 -77
  101. package/node8plus/queryFromResolveDataFactory.js.map +1 -1
  102. package/node8plus/utils.js +8 -9
  103. package/node8plus/utils.js.map +1 -1
  104. package/node8plus/withPgClient.js +4 -26
  105. package/node8plus/withPgClient.js.map +1 -1
  106. package/package.json +4 -4
@@ -4,14 +4,11 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
-
8
7
  const base64 = str => Buffer.from(String(str)).toString("base64");
9
-
10
8
  const hasNonNullKey = row => {
11
9
  if (Array.isArray(row.__identifiers) && row.__identifiers.every(i => i != null)) {
12
10
  return true;
13
11
  }
14
-
15
12
  for (const k in row) {
16
13
  if (Object.prototype.hasOwnProperty.call(row, k)) {
17
14
  if ((k[0] !== "_" || k[1] !== "_") && row[k] !== null) {
@@ -19,10 +16,8 @@ const hasNonNullKey = row => {
19
16
  }
20
17
  }
21
18
  }
22
-
23
19
  return false;
24
20
  };
25
-
26
21
  var PgTablesPlugin = function PgTablesPlugin(builder, {
27
22
  pgForbidSetofFunctionsToReturnNull = false,
28
23
  subscriptions = false
@@ -61,21 +56,16 @@ var PgTablesPlugin = function PgTablesPlugin(builder, {
61
56
  sqlCommentByAddingTags,
62
57
  pgField
63
58
  } = build;
64
-
65
59
  const nullableIf = (condition, Type) => condition ? Type : new GraphQLNonNull(Type);
66
-
67
60
  const Cursor = getTypeByName("Cursor");
68
61
  introspectionResultsByKind.class.forEach(table => {
69
62
  if (table.tags.enum) {
70
63
  return;
71
64
  }
72
-
73
65
  const tablePgType = table.type;
74
-
75
66
  if (!tablePgType) {
76
67
  throw new Error("Could not determine the type for this table");
77
68
  }
78
-
79
69
  const arrayTablePgType = tablePgType.arrayType;
80
70
  const primaryKeyConstraint = table.primaryKeyConstraint;
81
71
  const primaryKeys = primaryKeyConstraint && primaryKeyConstraint.keyAttributes;
@@ -89,12 +79,10 @@ var PgTablesPlugin = function PgTablesPlugin(builder, {
89
79
  if (TableType) {
90
80
  return TableType;
91
81
  }
92
-
93
82
  if (pg2GqlMapper[tablePgType.id]) {
94
83
  // Already handled
95
84
  throw new Error(`Register was called but there's already a mapper in place for '${tablePgType.id}'!`);
96
85
  }
97
-
98
86
  TableType = newWithHooks(GraphQLObjectType, {
99
87
  description: table.description || tablePgType.description,
100
88
  name: tableTypeName,
@@ -110,7 +98,6 @@ var PgTablesPlugin = function PgTablesPlugin(builder, {
110
98
  Self
111
99
  }) => {
112
100
  const fields = {};
113
-
114
101
  if (shouldHaveNodeId) {
115
102
  // Enable nodeId interface
116
103
  addDataGeneratorForField(nodeIdFieldName, () => {
@@ -123,10 +110,8 @@ var PgTablesPlugin = function PgTablesPlugin(builder, {
123
110
  fields[nodeIdFieldName] = {
124
111
  description: build.wrapDescription("A globally unique identifier. Can be used in various places throughout the system to identify this single value.", "field"),
125
112
  type: new GraphQLNonNull(GraphQLID),
126
-
127
113
  resolve(data) {
128
114
  const identifiers = data.__identifiers;
129
-
130
115
  if (!identifiers) {
131
116
  return null;
132
117
  }
@@ -135,15 +120,10 @@ var PgTablesPlugin = function PgTablesPlugin(builder, {
135
120
  * to the limits of int, and only to be strings after
136
121
  * that point.
137
122
  */
138
-
139
-
140
123
  const finalIdentifiers = identifiers.map((identifier, idx) => {
141
124
  const key = primaryKeys[idx];
142
125
  const type = key.type.domainBaseType || key.type;
143
-
144
- if (type.id === "20"
145
- /* bigint */
146
- ) {
126
+ if (type.id === "20" /* bigint */) {
147
127
  /*
148
128
  * When migrating from 'int' to 'bigint' we want
149
129
  * to maintain nodeIDs in the safe range before
@@ -153,20 +133,16 @@ var PgTablesPlugin = function PgTablesPlugin(builder, {
153
133
  * boundary.
154
134
  */
155
135
  const int = parseInt(identifier, 10);
156
-
157
136
  if (int >= -Number.MAX_SAFE_INTEGER && int <= Number.MAX_SAFE_INTEGER) {
158
137
  return int;
159
138
  }
160
139
  }
161
-
162
140
  return identifier;
163
141
  });
164
142
  return getNodeIdForTypeAndIdentifiers(Self, ...finalIdentifiers);
165
143
  }
166
-
167
144
  };
168
145
  }
169
-
170
146
  return fields;
171
147
  }
172
148
  }, {
@@ -194,7 +170,6 @@ var PgTablesPlugin = function PgTablesPlugin(builder, {
194
170
  isInputType: true,
195
171
  isPgRowType: table.isSelectable,
196
172
  isPgCompoundType: !table.isSelectable,
197
-
198
173
  pgAddSubfield(fieldName, attrName, pgType, spec, typeModifier) {
199
174
  pgCreateInputFields[fieldName] = {
200
175
  name: attrName,
@@ -203,7 +178,6 @@ var PgTablesPlugin = function PgTablesPlugin(builder, {
203
178
  };
204
179
  return spec;
205
180
  }
206
-
207
181
  }, true // If no fields, skip type automatically
208
182
  );
209
183
 
@@ -224,7 +198,6 @@ var PgTablesPlugin = function PgTablesPlugin(builder, {
224
198
  isPgRowType: table.isSelectable,
225
199
  isPgCompoundType: !table.isSelectable,
226
200
  isPgPatch: true,
227
-
228
201
  pgAddSubfield(fieldName, attrName, pgType, spec, typeModifier) {
229
202
  pgPatchInputFields[fieldName] = {
230
203
  name: attrName,
@@ -233,9 +206,9 @@ var PgTablesPlugin = function PgTablesPlugin(builder, {
233
206
  };
234
207
  return spec;
235
208
  }
236
-
237
209
  }, true // Safe to skip this if no fields support updating
238
210
  );
211
+
239
212
  TableBaseInputType = newWithHooks(GraphQLInputObjectType, {
240
213
  description: build.wrapDescription(`An input representation of \`${tableTypeName}\` with nullable fields.`, "type"),
241
214
  name: inflection.baseInputType(TableType)
@@ -247,7 +220,6 @@ var PgTablesPlugin = function PgTablesPlugin(builder, {
247
220
  isPgRowType: table.isSelectable,
248
221
  isPgCompoundType: !table.isSelectable,
249
222
  isPgBaseInput: true,
250
-
251
223
  pgAddSubfield(fieldName, attrName, pgType, spec, typeModifier) {
252
224
  pgBaseInputFields[fieldName] = {
253
225
  name: attrName,
@@ -256,15 +228,12 @@ var PgTablesPlugin = function PgTablesPlugin(builder, {
256
228
  };
257
229
  return spec;
258
230
  }
259
-
260
231
  });
261
232
  }
262
-
263
233
  pg2GqlMapper[tablePgType.id] = {
264
234
  map: _ => _,
265
235
  unmap: (obj, modifier) => {
266
236
  let fieldLookup;
267
-
268
237
  if (modifier === "patch") {
269
238
  fieldLookup = pgPatchInputFields;
270
239
  } else if (modifier === "base") {
@@ -272,13 +241,11 @@ var PgTablesPlugin = function PgTablesPlugin(builder, {
272
241
  } else {
273
242
  fieldLookup = pgCreateInputFields;
274
243
  }
275
-
276
244
  const attr2sql = attr => {
277
245
  // TODO: this should use `fieldInput[*].name` to find the attribute
278
246
  const fieldName = inflection.column(attr);
279
247
  const inputField = fieldLookup[fieldName];
280
248
  const v = obj[fieldName];
281
-
282
249
  if (inputField && v != null) {
283
250
  const {
284
251
  type,
@@ -314,11 +281,9 @@ var PgTablesPlugin = function PgTablesPlugin(builder, {
314
281
  return {
315
282
  description: build.wrapDescription("A cursor for use in pagination.", "field"),
316
283
  type: Cursor,
317
-
318
284
  resolve(data) {
319
285
  return data.__cursor && base64(JSON.stringify(data.__cursor));
320
286
  }
321
-
322
287
  };
323
288
  }, {
324
289
  isCursorField: true
@@ -326,19 +291,15 @@ var PgTablesPlugin = function PgTablesPlugin(builder, {
326
291
  node: pgField(build, fieldWithHooks, "node", {
327
292
  description: build.wrapDescription(`The \`${tableTypeName}\` at the end of the edge.`, "field"),
328
293
  type: nullableIf(!pgForbidSetofFunctionsToReturnNull, TableType),
329
-
330
294
  resolve(data, _args, resolveContext, resolveInfo) {
331
295
  const safeAlias = getSafeAliasFromResolveInfo(resolveInfo);
332
296
  const record = handleNullRow(data[safeAlias], data.__identifiers);
333
297
  const liveRecord = resolveInfo.rootValue && resolveInfo.rootValue.liveRecord;
334
-
335
298
  if (record && primaryKeys && liveRecord && data.__identifiers) {
336
299
  liveRecord("pg", table, data.__identifiers);
337
300
  }
338
-
339
301
  return record;
340
302
  }
341
-
342
303
  }, {}, false, {
343
304
  withQueryBuilder: queryBuilder => {
344
305
  if (subscriptions) {
@@ -358,8 +319,8 @@ var PgTablesPlugin = function PgTablesPlugin(builder, {
358
319
  pgIntrospection: table
359
320
  });
360
321
  const PageInfo = getTypeByName(inflection.builtin("PageInfo"));
361
- /*const ConnectionType = */
362
322
 
323
+ /*const ConnectionType = */
363
324
  newWithHooks(GraphQLObjectType, {
364
325
  description: build.wrapDescription(`A connection to a list of \`${tableTypeName}\` values.`, "type"),
365
326
  name: inflection.connection(TableType.name),
@@ -372,21 +333,17 @@ var PgTablesPlugin = function PgTablesPlugin(builder, {
372
333
  nodes: pgField(build, fieldWithHooks, "nodes", {
373
334
  description: build.wrapDescription(`A list of \`${tableTypeName}\` objects.`, "field"),
374
335
  type: new GraphQLNonNull(new GraphQLList(nullableIf(!pgForbidSetofFunctionsToReturnNull, TableType))),
375
-
376
336
  resolve(data, _args, resolveContext, resolveInfo) {
377
337
  const safeAlias = getSafeAliasFromResolveInfo(resolveInfo);
378
338
  const liveRecord = resolveInfo.rootValue && resolveInfo.rootValue.liveRecord;
379
339
  return data.data.map(entry => {
380
340
  const record = handleNullRow(entry[safeAlias], entry[safeAlias].__identifiers);
381
-
382
341
  if (record && liveRecord && primaryKeys && entry[safeAlias].__identifiers) {
383
342
  liveRecord("pg", table, entry[safeAlias].__identifiers);
384
343
  }
385
-
386
344
  return record;
387
345
  });
388
346
  }
389
-
390
347
  }, {}, false, {
391
348
  withQueryBuilder: queryBuilder => {
392
349
  if (subscriptions) {
@@ -397,25 +354,22 @@ var PgTablesPlugin = function PgTablesPlugin(builder, {
397
354
  edges: pgField(build, fieldWithHooks, "edges", {
398
355
  description: build.wrapDescription(`A list of edges which contains the \`${tableTypeName}\` and cursor to aid in pagination.`, "field"),
399
356
  type: new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(EdgeType))),
400
-
401
357
  resolve(data, _args, _context, resolveInfo) {
402
358
  const safeAlias = getSafeAliasFromResolveInfo(resolveInfo);
403
- return data.data.map(entry => ({ ...entry,
359
+ return data.data.map(entry => ({
360
+ ...entry,
404
361
  ...entry[safeAlias]
405
362
  }));
406
363
  }
407
-
408
364
  }, {}, false, {
409
365
  hoistCursor: true
410
366
  }),
411
367
  pageInfo: PageInfo && {
412
368
  description: build.wrapDescription("Information to aid in pagination.", "field"),
413
369
  type: new GraphQLNonNull(PageInfo),
414
-
415
370
  resolve(data) {
416
371
  return data;
417
372
  }
418
-
419
373
  }
420
374
  };
421
375
  }
@@ -432,25 +386,21 @@ var PgTablesPlugin = function PgTablesPlugin(builder, {
432
386
  }, true);
433
387
  pgRegisterGqlInputTypeByTypeId(tablePgType.id, (_set, modifier) => {
434
388
  // This must come first, it triggers creation of all the types
435
- const TableType = pgGetGqlTypeByTypeIdAndModifier(tablePgType.id, null); // This must come after the pgGetGqlTypeByTypeIdAndModifier call
436
-
389
+ const TableType = pgGetGqlTypeByTypeIdAndModifier(tablePgType.id, null);
390
+ // This must come after the pgGetGqlTypeByTypeIdAndModifier call
437
391
  if (modifier === "patch") {
438
392
  // TODO: v5: move the definition from above down here
439
393
  return TablePatchType;
440
394
  }
441
-
442
395
  if (modifier === "base") {
443
396
  // TODO: v5: move the definition from above down here
444
397
  return TableBaseInputType;
445
398
  }
446
-
447
399
  if (TableType) {
448
400
  return getTypeByName(inflection.inputType(TableType));
449
401
  }
450
-
451
402
  return null;
452
403
  }, true);
453
-
454
404
  if (arrayTablePgType) {
455
405
  // Note: these do not return
456
406
  //
@@ -465,7 +415,6 @@ var PgTablesPlugin = function PgTablesPlugin(builder, {
465
415
  }, true);
466
416
  pgRegisterGqlInputTypeByTypeId(arrayTablePgType.id, (_set, modifier) => {
467
417
  const RelevantTableInputType = pgGetGqlInputTypeByTypeIdAndModifier(tablePgType.id, modifier);
468
-
469
418
  if (RelevantTableInputType) {
470
419
  return new GraphQLList(RelevantTableInputType);
471
420
  }
@@ -475,6 +424,5 @@ var PgTablesPlugin = function PgTablesPlugin(builder, {
475
424
  return _;
476
425
  }, ["PgTables"], [], ["PgTypes"]);
477
426
  };
478
-
479
427
  exports.default = PgTablesPlugin;
480
428
  //# sourceMappingURL=PgTablesPlugin.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/plugins/PgTablesPlugin.js"],"names":["base64","str","Buffer","from","String","toString","hasNonNullKey","row","Array","isArray","__identifiers","every","i","k","Object","prototype","hasOwnProperty","call","PgTablesPlugin","builder","pgForbidSetofFunctionsToReturnNull","subscriptions","handleNullRow","_identifiers","identifiers","hook","_","build","getNodeIdForTypeAndIdentifiers","nodeIdFieldName","newWithHooks","getSafeAliasFromResolveInfo","pgSql","sql","pgIntrospectionResultsByKind","introspectionResultsByKind","getTypeByName","pgGetGqlTypeByTypeIdAndModifier","pgGetGqlInputTypeByTypeIdAndModifier","pgRegisterGqlTypeByTypeId","pgRegisterGqlInputTypeByTypeId","pg2GqlMapper","gql2pg","graphql","GraphQLObjectType","GraphQLNonNull","GraphQLID","GraphQLList","GraphQLInputObjectType","inflection","describePgEntity","sqlCommentByAddingTags","pgField","nullableIf","condition","Type","Cursor","class","forEach","table","tags","enum","tablePgType","type","Error","arrayTablePgType","arrayType","primaryKeyConstraint","primaryKeys","keyAttributes","attributes","tableTypeName","tableType","shouldHaveNodeId","isSelectable","namespace","length","TableType","TablePatchType","TableBaseInputType","id","cb","description","name","interfaces","builtin","fields","addDataGeneratorForField","Self","pgQuery","queryBuilder","selectIdentifiers","wrapDescription","resolve","data","finalIdentifiers","map","identifier","idx","key","domainBaseType","int","parseInt","Number","MAX_SAFE_INTEGER","__origin","pgIntrospection","isPgRowType","isPgCompoundType","isPgCompositeType","pgCreateInputFields","pgPatchInputFields","pgBaseInputFields","inputType","isInputType","pgAddSubfield","fieldName","attrName","pgType","spec","typeModifier","patchType","isPgPatch","baseInputType","isPgBaseInput","unmap","obj","modifier","fieldLookup","attr2sql","attr","column","inputField","v","fragment","isFake","namespaceName","null","join","EdgeType","edge","fieldWithHooks","cursor","addDataGenerator","usesCursor","__cursor","JSON","stringify","isCursorField","node","_args","resolveContext","resolveInfo","safeAlias","record","liveRecord","rootValue","withQueryBuilder","isEdgeType","isPgRowEdgeType","nodeType","PageInfo","connection","recurseDataGeneratorsForField","nodes","entry","edges","_context","hoistCursor","pageInfo","isConnectionType","isPgRowConnectionType","edgeType","_set","RelevantTableInputType"],"mappings":"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","sourcesContent":["// @flow\nimport type { Plugin } from \"graphile-build\";\nconst base64 = str => Buffer.from(String(str)).toString(\"base64\");\n\nconst hasNonNullKey = row => {\n if (\n Array.isArray(row.__identifiers) &&\n row.__identifiers.every(i => i != null)\n ) {\n return true;\n }\n for (const k in row) {\n if (Object.prototype.hasOwnProperty.call(row, k)) {\n if ((k[0] !== \"_\" || k[1] !== \"_\") && row[k] !== null) {\n return true;\n }\n }\n }\n return false;\n};\n\nexport default (function PgTablesPlugin(\n builder,\n { pgForbidSetofFunctionsToReturnNull = false, subscriptions = false }\n) {\n const handleNullRow = pgForbidSetofFunctionsToReturnNull\n ? (row, _identifiers) => row\n : (row, identifiers) => {\n if ((identifiers && hasNonNullKey(identifiers)) || hasNonNullKey(row)) {\n return row;\n } else {\n return null;\n }\n };\n\n builder.hook(\n \"init\",\n (_, build) => {\n const {\n getNodeIdForTypeAndIdentifiers,\n nodeIdFieldName,\n newWithHooks,\n getSafeAliasFromResolveInfo,\n pgSql: sql,\n pgIntrospectionResultsByKind: introspectionResultsByKind,\n getTypeByName,\n pgGetGqlTypeByTypeIdAndModifier,\n pgGetGqlInputTypeByTypeIdAndModifier,\n pgRegisterGqlTypeByTypeId,\n pgRegisterGqlInputTypeByTypeId,\n pg2GqlMapper,\n gql2pg,\n graphql: {\n GraphQLObjectType,\n GraphQLNonNull,\n GraphQLID,\n GraphQLList,\n GraphQLInputObjectType,\n },\n inflection,\n describePgEntity,\n sqlCommentByAddingTags,\n pgField,\n } = build;\n\n const nullableIf = (condition, Type) =>\n condition ? Type : new GraphQLNonNull(Type);\n const Cursor = getTypeByName(\"Cursor\");\n\n introspectionResultsByKind.class.forEach(table => {\n if (table.tags.enum) {\n return;\n }\n const tablePgType = table.type;\n if (!tablePgType) {\n throw new Error(\"Could not determine the type for this table\");\n }\n const arrayTablePgType = tablePgType.arrayType;\n const primaryKeyConstraint = table.primaryKeyConstraint;\n const primaryKeys =\n primaryKeyConstraint && primaryKeyConstraint.keyAttributes;\n const attributes = table.attributes;\n const tableTypeName = inflection.tableType(table);\n const shouldHaveNodeId: boolean =\n nodeIdFieldName &&\n table.isSelectable &&\n table.namespace &&\n primaryKeys &&\n primaryKeys.length\n ? true\n : false;\n let TableType;\n let TablePatchType;\n let TableBaseInputType;\n pgRegisterGqlTypeByTypeId(\n tablePgType.id,\n cb => {\n if (TableType) {\n return TableType;\n }\n if (pg2GqlMapper[tablePgType.id]) {\n // Already handled\n throw new Error(\n `Register was called but there's already a mapper in place for '${tablePgType.id}'!`\n );\n }\n TableType = newWithHooks(\n GraphQLObjectType,\n {\n description: table.description || tablePgType.description,\n name: tableTypeName,\n interfaces: () => {\n if (shouldHaveNodeId) {\n return [getTypeByName(inflection.builtin(\"Node\"))];\n } else {\n return [];\n }\n },\n fields: ({ addDataGeneratorForField, Self }) => {\n const fields = {};\n if (shouldHaveNodeId) {\n // Enable nodeId interface\n addDataGeneratorForField(nodeIdFieldName, () => {\n return {\n pgQuery: queryBuilder => {\n queryBuilder.selectIdentifiers(table);\n },\n };\n });\n fields[nodeIdFieldName] = {\n description: build.wrapDescription(\n \"A globally unique identifier. Can be used in various places throughout the system to identify this single value.\",\n \"field\"\n ),\n type: new GraphQLNonNull(GraphQLID),\n resolve(data) {\n const identifiers = data.__identifiers;\n if (!identifiers) {\n return null;\n }\n /*\n * For bigint we want NodeIDs to be the same as int up\n * to the limits of int, and only to be strings after\n * that point.\n */\n const finalIdentifiers = identifiers.map(\n (identifier, idx) => {\n const key = primaryKeys[idx];\n const type = key.type.domainBaseType || key.type;\n if (type.id === \"20\" /* bigint */) {\n /*\n * When migrating from 'int' to 'bigint' we want\n * to maintain nodeIDs in the safe range before\n * moving to strings for larger numbers. Since we\n * can represent ints up to MAX_SAFE_INTEGER\n * (2^53 - 1) fine, we're using that as the\n * boundary.\n */\n const int = parseInt(identifier, 10);\n if (\n int >= -Number.MAX_SAFE_INTEGER &&\n int <= Number.MAX_SAFE_INTEGER\n ) {\n return int;\n }\n }\n return identifier;\n }\n );\n return getNodeIdForTypeAndIdentifiers(\n Self,\n ...finalIdentifiers\n );\n },\n };\n }\n return fields;\n },\n },\n {\n __origin: `Adding table type for ${describePgEntity(\n table\n )}. You can rename the table's GraphQL type via a 'Smart Comment':\\n\\n ${sqlCommentByAddingTags(\n table,\n {\n name: \"newNameHere\",\n }\n )}`,\n pgIntrospection: table,\n isPgRowType: table.isSelectable,\n isPgCompoundType: !table.isSelectable, // TODO:v5: remove - typo\n isPgCompositeType: !table.isSelectable,\n }\n );\n cb(TableType);\n const pgCreateInputFields = {};\n const pgPatchInputFields = {};\n const pgBaseInputFields = {};\n newWithHooks(\n GraphQLInputObjectType,\n {\n description: build.wrapDescription(\n `An input for mutations affecting \\`${tableTypeName}\\``,\n \"type\"\n ),\n name: inflection.inputType(TableType),\n },\n {\n __origin: `Adding table input type for ${describePgEntity(\n table\n )}. You can rename the table's GraphQL type via a 'Smart Comment':\\n\\n ${sqlCommentByAddingTags(\n table,\n {\n name: \"newNameHere\",\n }\n )}`,\n pgIntrospection: table,\n isInputType: true,\n isPgRowType: table.isSelectable,\n isPgCompoundType: !table.isSelectable,\n pgAddSubfield(fieldName, attrName, pgType, spec, typeModifier) {\n pgCreateInputFields[fieldName] = {\n name: attrName,\n type: pgType,\n typeModifier,\n };\n return spec;\n },\n },\n true // If no fields, skip type automatically\n );\n\n if (table.isSelectable) {\n // XXX: these don't belong here; but we have to keep them here\n // because third-party code depends on `getTypeByName` to find\n // them; so we have to register them ahead of time. A better\n // approach is to use the modifier to specify the type you need,\n // 'patch' or 'base', so they can be registered just in time.\n TablePatchType = newWithHooks(\n GraphQLInputObjectType,\n {\n description: build.wrapDescription(\n `Represents an update to a \\`${tableTypeName}\\`. Fields that are set will be updated.`,\n \"type\"\n ),\n name: inflection.patchType(TableType),\n },\n {\n __origin: `Adding table patch type for ${describePgEntity(\n table\n )}. You can rename the table's GraphQL type via a 'Smart Comment':\\n\\n ${sqlCommentByAddingTags(\n table,\n {\n name: \"newNameHere\",\n }\n )}`,\n pgIntrospection: table,\n isPgRowType: table.isSelectable,\n isPgCompoundType: !table.isSelectable,\n isPgPatch: true,\n pgAddSubfield(\n fieldName,\n attrName,\n pgType,\n spec,\n typeModifier\n ) {\n pgPatchInputFields[fieldName] = {\n name: attrName,\n type: pgType,\n typeModifier,\n };\n return spec;\n },\n },\n true // Safe to skip this if no fields support updating\n );\n TableBaseInputType = newWithHooks(\n GraphQLInputObjectType,\n {\n description: build.wrapDescription(\n `An input representation of \\`${tableTypeName}\\` with nullable fields.`,\n \"type\"\n ),\n name: inflection.baseInputType(TableType),\n },\n {\n __origin: `Adding table base input type for ${describePgEntity(\n table\n )}. You can rename the table's GraphQL type via a 'Smart Comment':\\n\\n ${sqlCommentByAddingTags(\n table,\n {\n name: \"newNameHere\",\n }\n )}`,\n pgIntrospection: table,\n isPgRowType: table.isSelectable,\n isPgCompoundType: !table.isSelectable,\n isPgBaseInput: true,\n pgAddSubfield(\n fieldName,\n attrName,\n pgType,\n spec,\n typeModifier\n ) {\n pgBaseInputFields[fieldName] = {\n name: attrName,\n type: pgType,\n typeModifier,\n };\n return spec;\n },\n }\n );\n }\n\n pg2GqlMapper[tablePgType.id] = {\n map: _ => _,\n unmap: (obj, modifier) => {\n let fieldLookup;\n if (modifier === \"patch\") {\n fieldLookup = pgPatchInputFields;\n } else if (modifier === \"base\") {\n fieldLookup = pgBaseInputFields;\n } else {\n fieldLookup = pgCreateInputFields;\n }\n\n const attr2sql = attr => {\n // TODO: this should use `fieldInput[*].name` to find the attribute\n const fieldName = inflection.column(attr);\n const inputField = fieldLookup[fieldName];\n const v = obj[fieldName];\n if (inputField && v != null) {\n const { type, typeModifier } = inputField;\n return sql.fragment`${gql2pg(v, type, typeModifier)}::${\n type.isFake\n ? sql.identifier(\"unknown\")\n : sql.identifier(type.namespaceName, type.name)\n }`;\n } else {\n return sql.null; // TODO: return default instead.\n }\n };\n\n return sql.fragment`row(${sql.join(\n attributes.map(attr2sql),\n \",\"\n )})::${\n tablePgType.isFake\n ? sql.identifier(\"unknown\")\n : sql.identifier(\n tablePgType.namespaceName,\n tablePgType.name\n )\n }`;\n },\n };\n\n const EdgeType = newWithHooks(\n GraphQLObjectType,\n {\n description: build.wrapDescription(\n `A \\`${tableTypeName}\\` edge in the connection.`,\n \"type\"\n ),\n name: inflection.edge(TableType.name),\n fields: ({ fieldWithHooks }) => {\n return {\n cursor: fieldWithHooks(\n \"cursor\",\n ({ addDataGenerator }) => {\n addDataGenerator(() => ({\n usesCursor: [true],\n pgQuery: queryBuilder => {\n if (primaryKeys) {\n queryBuilder.selectIdentifiers(table);\n }\n },\n }));\n return {\n description: build.wrapDescription(\n \"A cursor for use in pagination.\",\n \"field\"\n ),\n type: Cursor,\n resolve(data) {\n return (\n data.__cursor &&\n base64(JSON.stringify(data.__cursor))\n );\n },\n };\n },\n {\n isCursorField: true,\n }\n ),\n node: pgField(\n build,\n fieldWithHooks,\n \"node\",\n {\n description: build.wrapDescription(\n `The \\`${tableTypeName}\\` at the end of the edge.`,\n \"field\"\n ),\n type: nullableIf(\n !pgForbidSetofFunctionsToReturnNull,\n TableType\n ),\n resolve(data, _args, resolveContext, resolveInfo) {\n const safeAlias =\n getSafeAliasFromResolveInfo(resolveInfo);\n const record = handleNullRow(\n data[safeAlias],\n data.__identifiers\n );\n const liveRecord =\n resolveInfo.rootValue &&\n resolveInfo.rootValue.liveRecord;\n if (\n record &&\n primaryKeys &&\n liveRecord &&\n data.__identifiers\n ) {\n liveRecord(\"pg\", table, data.__identifiers);\n }\n return record;\n },\n },\n {},\n false,\n {\n withQueryBuilder: queryBuilder => {\n if (subscriptions) {\n queryBuilder.selectIdentifiers(table);\n }\n },\n }\n ),\n };\n },\n },\n {\n __origin: `Adding table edge type for ${describePgEntity(\n table\n )}. You can rename the table's GraphQL type via a 'Smart Comment':\\n\\n ${sqlCommentByAddingTags(\n table,\n {\n name: \"newNameHere\",\n }\n )}`,\n isEdgeType: true,\n isPgRowEdgeType: true,\n nodeType: TableType,\n pgIntrospection: table,\n }\n );\n const PageInfo = getTypeByName(inflection.builtin(\"PageInfo\"));\n\n /*const ConnectionType = */\n newWithHooks(\n GraphQLObjectType,\n {\n description: build.wrapDescription(\n `A connection to a list of \\`${tableTypeName}\\` values.`,\n \"type\"\n ),\n name: inflection.connection(TableType.name),\n fields: ({ recurseDataGeneratorsForField, fieldWithHooks }) => {\n recurseDataGeneratorsForField(\"pageInfo\", true);\n return {\n nodes: pgField(\n build,\n fieldWithHooks,\n \"nodes\",\n {\n description: build.wrapDescription(\n `A list of \\`${tableTypeName}\\` objects.`,\n \"field\"\n ),\n type: new GraphQLNonNull(\n new GraphQLList(\n nullableIf(\n !pgForbidSetofFunctionsToReturnNull,\n TableType\n )\n )\n ),\n resolve(data, _args, resolveContext, resolveInfo) {\n const safeAlias =\n getSafeAliasFromResolveInfo(resolveInfo);\n const liveRecord =\n resolveInfo.rootValue &&\n resolveInfo.rootValue.liveRecord;\n return data.data.map(entry => {\n const record = handleNullRow(\n entry[safeAlias],\n entry[safeAlias].__identifiers\n );\n if (\n record &&\n liveRecord &&\n primaryKeys &&\n entry[safeAlias].__identifiers\n ) {\n liveRecord(\n \"pg\",\n table,\n entry[safeAlias].__identifiers\n );\n }\n\n return record;\n });\n },\n },\n {},\n false,\n {\n withQueryBuilder: queryBuilder => {\n if (subscriptions) {\n queryBuilder.selectIdentifiers(table);\n }\n },\n }\n ),\n edges: pgField(\n build,\n fieldWithHooks,\n \"edges\",\n {\n description: build.wrapDescription(\n `A list of edges which contains the \\`${tableTypeName}\\` and cursor to aid in pagination.`,\n \"field\"\n ),\n type: new GraphQLNonNull(\n new GraphQLList(new GraphQLNonNull(EdgeType))\n ),\n resolve(data, _args, _context, resolveInfo) {\n const safeAlias =\n getSafeAliasFromResolveInfo(resolveInfo);\n return data.data.map(entry => ({\n ...entry,\n ...entry[safeAlias],\n }));\n },\n },\n {},\n false,\n {\n hoistCursor: true,\n }\n ),\n pageInfo: PageInfo && {\n description: build.wrapDescription(\n \"Information to aid in pagination.\",\n \"field\"\n ),\n type: new GraphQLNonNull(PageInfo),\n resolve(data) {\n return data;\n },\n },\n };\n },\n },\n {\n __origin: `Adding table connection type for ${describePgEntity(\n table\n )}. You can rename the table's GraphQL type via a 'Smart Comment':\\n\\n ${sqlCommentByAddingTags(\n table,\n {\n name: \"newNameHere\",\n }\n )}`,\n isConnectionType: true,\n isPgRowConnectionType: true,\n edgeType: EdgeType,\n nodeType: TableType,\n pgIntrospection: table,\n }\n );\n },\n true\n );\n pgRegisterGqlInputTypeByTypeId(\n tablePgType.id,\n (_set, modifier) => {\n // This must come first, it triggers creation of all the types\n const TableType = pgGetGqlTypeByTypeIdAndModifier(\n tablePgType.id,\n null\n );\n // This must come after the pgGetGqlTypeByTypeIdAndModifier call\n if (modifier === \"patch\") {\n // TODO: v5: move the definition from above down here\n return TablePatchType;\n }\n if (modifier === \"base\") {\n // TODO: v5: move the definition from above down here\n return TableBaseInputType;\n }\n if (TableType) {\n return getTypeByName(inflection.inputType(TableType));\n }\n return null;\n },\n true\n );\n\n if (arrayTablePgType) {\n // Note: these do not return\n //\n // `new GraphQLList(new GraphQLNonNull(...))`\n //\n // because it's possible to return null entries from postgresql\n // functions. We should probably add a flag to instead export\n // the non-null version as that's more typical.\n pgRegisterGqlTypeByTypeId(\n arrayTablePgType.id,\n () => {\n const TableType = pgGetGqlTypeByTypeIdAndModifier(\n tablePgType.id,\n null\n );\n return new GraphQLList(TableType);\n },\n true\n );\n pgRegisterGqlInputTypeByTypeId(\n arrayTablePgType.id,\n (_set, modifier) => {\n const RelevantTableInputType =\n pgGetGqlInputTypeByTypeIdAndModifier(tablePgType.id, modifier);\n if (RelevantTableInputType) {\n return new GraphQLList(RelevantTableInputType);\n }\n },\n true\n );\n }\n });\n return _;\n },\n [\"PgTables\"],\n [],\n [\"PgTypes\"]\n );\n}: Plugin);\n"],"file":"PgTablesPlugin.js"}
1
+ {"version":3,"file":"PgTablesPlugin.js","names":["base64","str","Buffer","from","String","toString","hasNonNullKey","row","Array","isArray","__identifiers","every","i","k","Object","prototype","hasOwnProperty","call","PgTablesPlugin","builder","pgForbidSetofFunctionsToReturnNull","subscriptions","handleNullRow","_identifiers","identifiers","hook","_","build","getNodeIdForTypeAndIdentifiers","nodeIdFieldName","newWithHooks","getSafeAliasFromResolveInfo","pgSql","sql","pgIntrospectionResultsByKind","introspectionResultsByKind","getTypeByName","pgGetGqlTypeByTypeIdAndModifier","pgGetGqlInputTypeByTypeIdAndModifier","pgRegisterGqlTypeByTypeId","pgRegisterGqlInputTypeByTypeId","pg2GqlMapper","gql2pg","graphql","GraphQLObjectType","GraphQLNonNull","GraphQLID","GraphQLList","GraphQLInputObjectType","inflection","describePgEntity","sqlCommentByAddingTags","pgField","nullableIf","condition","Type","Cursor","class","forEach","table","tags","enum","tablePgType","type","Error","arrayTablePgType","arrayType","primaryKeyConstraint","primaryKeys","keyAttributes","attributes","tableTypeName","tableType","shouldHaveNodeId","isSelectable","namespace","length","TableType","TablePatchType","TableBaseInputType","id","cb","description","name","interfaces","builtin","fields","addDataGeneratorForField","Self","pgQuery","queryBuilder","selectIdentifiers","wrapDescription","resolve","data","finalIdentifiers","map","identifier","idx","key","domainBaseType","int","parseInt","Number","MAX_SAFE_INTEGER","__origin","pgIntrospection","isPgRowType","isPgCompoundType","isPgCompositeType","pgCreateInputFields","pgPatchInputFields","pgBaseInputFields","inputType","isInputType","pgAddSubfield","fieldName","attrName","pgType","spec","typeModifier","patchType","isPgPatch","baseInputType","isPgBaseInput","unmap","obj","modifier","fieldLookup","attr2sql","attr","column","inputField","v","fragment","isFake","namespaceName","null","join","EdgeType","edge","fieldWithHooks","cursor","addDataGenerator","usesCursor","__cursor","JSON","stringify","isCursorField","node","_args","resolveContext","resolveInfo","safeAlias","record","liveRecord","rootValue","withQueryBuilder","isEdgeType","isPgRowEdgeType","nodeType","PageInfo","connection","recurseDataGeneratorsForField","nodes","entry","edges","_context","hoistCursor","pageInfo","isConnectionType","isPgRowConnectionType","edgeType","_set","RelevantTableInputType","exports","default"],"sources":["../../src/plugins/PgTablesPlugin.js"],"sourcesContent":["// @flow\nimport type { Plugin } from \"graphile-build\";\nconst base64 = str => Buffer.from(String(str)).toString(\"base64\");\n\nconst hasNonNullKey = row => {\n if (\n Array.isArray(row.__identifiers) &&\n row.__identifiers.every(i => i != null)\n ) {\n return true;\n }\n for (const k in row) {\n if (Object.prototype.hasOwnProperty.call(row, k)) {\n if ((k[0] !== \"_\" || k[1] !== \"_\") && row[k] !== null) {\n return true;\n }\n }\n }\n return false;\n};\n\nexport default (function PgTablesPlugin(\n builder,\n { pgForbidSetofFunctionsToReturnNull = false, subscriptions = false }\n) {\n const handleNullRow = pgForbidSetofFunctionsToReturnNull\n ? (row, _identifiers) => row\n : (row, identifiers) => {\n if ((identifiers && hasNonNullKey(identifiers)) || hasNonNullKey(row)) {\n return row;\n } else {\n return null;\n }\n };\n\n builder.hook(\n \"init\",\n (_, build) => {\n const {\n getNodeIdForTypeAndIdentifiers,\n nodeIdFieldName,\n newWithHooks,\n getSafeAliasFromResolveInfo,\n pgSql: sql,\n pgIntrospectionResultsByKind: introspectionResultsByKind,\n getTypeByName,\n pgGetGqlTypeByTypeIdAndModifier,\n pgGetGqlInputTypeByTypeIdAndModifier,\n pgRegisterGqlTypeByTypeId,\n pgRegisterGqlInputTypeByTypeId,\n pg2GqlMapper,\n gql2pg,\n graphql: {\n GraphQLObjectType,\n GraphQLNonNull,\n GraphQLID,\n GraphQLList,\n GraphQLInputObjectType,\n },\n inflection,\n describePgEntity,\n sqlCommentByAddingTags,\n pgField,\n } = build;\n\n const nullableIf = (condition, Type) =>\n condition ? Type : new GraphQLNonNull(Type);\n const Cursor = getTypeByName(\"Cursor\");\n\n introspectionResultsByKind.class.forEach(table => {\n if (table.tags.enum) {\n return;\n }\n const tablePgType = table.type;\n if (!tablePgType) {\n throw new Error(\"Could not determine the type for this table\");\n }\n const arrayTablePgType = tablePgType.arrayType;\n const primaryKeyConstraint = table.primaryKeyConstraint;\n const primaryKeys =\n primaryKeyConstraint && primaryKeyConstraint.keyAttributes;\n const attributes = table.attributes;\n const tableTypeName = inflection.tableType(table);\n const shouldHaveNodeId: boolean =\n nodeIdFieldName &&\n table.isSelectable &&\n table.namespace &&\n primaryKeys &&\n primaryKeys.length\n ? true\n : false;\n let TableType;\n let TablePatchType;\n let TableBaseInputType;\n pgRegisterGqlTypeByTypeId(\n tablePgType.id,\n cb => {\n if (TableType) {\n return TableType;\n }\n if (pg2GqlMapper[tablePgType.id]) {\n // Already handled\n throw new Error(\n `Register was called but there's already a mapper in place for '${tablePgType.id}'!`\n );\n }\n TableType = newWithHooks(\n GraphQLObjectType,\n {\n description: table.description || tablePgType.description,\n name: tableTypeName,\n interfaces: () => {\n if (shouldHaveNodeId) {\n return [getTypeByName(inflection.builtin(\"Node\"))];\n } else {\n return [];\n }\n },\n fields: ({ addDataGeneratorForField, Self }) => {\n const fields = {};\n if (shouldHaveNodeId) {\n // Enable nodeId interface\n addDataGeneratorForField(nodeIdFieldName, () => {\n return {\n pgQuery: queryBuilder => {\n queryBuilder.selectIdentifiers(table);\n },\n };\n });\n fields[nodeIdFieldName] = {\n description: build.wrapDescription(\n \"A globally unique identifier. Can be used in various places throughout the system to identify this single value.\",\n \"field\"\n ),\n type: new GraphQLNonNull(GraphQLID),\n resolve(data) {\n const identifiers = data.__identifiers;\n if (!identifiers) {\n return null;\n }\n /*\n * For bigint we want NodeIDs to be the same as int up\n * to the limits of int, and only to be strings after\n * that point.\n */\n const finalIdentifiers = identifiers.map(\n (identifier, idx) => {\n const key = primaryKeys[idx];\n const type = key.type.domainBaseType || key.type;\n if (type.id === \"20\" /* bigint */) {\n /*\n * When migrating from 'int' to 'bigint' we want\n * to maintain nodeIDs in the safe range before\n * moving to strings for larger numbers. Since we\n * can represent ints up to MAX_SAFE_INTEGER\n * (2^53 - 1) fine, we're using that as the\n * boundary.\n */\n const int = parseInt(identifier, 10);\n if (\n int >= -Number.MAX_SAFE_INTEGER &&\n int <= Number.MAX_SAFE_INTEGER\n ) {\n return int;\n }\n }\n return identifier;\n }\n );\n return getNodeIdForTypeAndIdentifiers(\n Self,\n ...finalIdentifiers\n );\n },\n };\n }\n return fields;\n },\n },\n {\n __origin: `Adding table type for ${describePgEntity(\n table\n )}. You can rename the table's GraphQL type via a 'Smart Comment':\\n\\n ${sqlCommentByAddingTags(\n table,\n {\n name: \"newNameHere\",\n }\n )}`,\n pgIntrospection: table,\n isPgRowType: table.isSelectable,\n isPgCompoundType: !table.isSelectable, // TODO:v5: remove - typo\n isPgCompositeType: !table.isSelectable,\n }\n );\n cb(TableType);\n const pgCreateInputFields = {};\n const pgPatchInputFields = {};\n const pgBaseInputFields = {};\n newWithHooks(\n GraphQLInputObjectType,\n {\n description: build.wrapDescription(\n `An input for mutations affecting \\`${tableTypeName}\\``,\n \"type\"\n ),\n name: inflection.inputType(TableType),\n },\n {\n __origin: `Adding table input type for ${describePgEntity(\n table\n )}. You can rename the table's GraphQL type via a 'Smart Comment':\\n\\n ${sqlCommentByAddingTags(\n table,\n {\n name: \"newNameHere\",\n }\n )}`,\n pgIntrospection: table,\n isInputType: true,\n isPgRowType: table.isSelectable,\n isPgCompoundType: !table.isSelectable,\n pgAddSubfield(fieldName, attrName, pgType, spec, typeModifier) {\n pgCreateInputFields[fieldName] = {\n name: attrName,\n type: pgType,\n typeModifier,\n };\n return spec;\n },\n },\n true // If no fields, skip type automatically\n );\n\n if (table.isSelectable) {\n // XXX: these don't belong here; but we have to keep them here\n // because third-party code depends on `getTypeByName` to find\n // them; so we have to register them ahead of time. A better\n // approach is to use the modifier to specify the type you need,\n // 'patch' or 'base', so they can be registered just in time.\n TablePatchType = newWithHooks(\n GraphQLInputObjectType,\n {\n description: build.wrapDescription(\n `Represents an update to a \\`${tableTypeName}\\`. Fields that are set will be updated.`,\n \"type\"\n ),\n name: inflection.patchType(TableType),\n },\n {\n __origin: `Adding table patch type for ${describePgEntity(\n table\n )}. You can rename the table's GraphQL type via a 'Smart Comment':\\n\\n ${sqlCommentByAddingTags(\n table,\n {\n name: \"newNameHere\",\n }\n )}`,\n pgIntrospection: table,\n isPgRowType: table.isSelectable,\n isPgCompoundType: !table.isSelectable,\n isPgPatch: true,\n pgAddSubfield(\n fieldName,\n attrName,\n pgType,\n spec,\n typeModifier\n ) {\n pgPatchInputFields[fieldName] = {\n name: attrName,\n type: pgType,\n typeModifier,\n };\n return spec;\n },\n },\n true // Safe to skip this if no fields support updating\n );\n TableBaseInputType = newWithHooks(\n GraphQLInputObjectType,\n {\n description: build.wrapDescription(\n `An input representation of \\`${tableTypeName}\\` with nullable fields.`,\n \"type\"\n ),\n name: inflection.baseInputType(TableType),\n },\n {\n __origin: `Adding table base input type for ${describePgEntity(\n table\n )}. You can rename the table's GraphQL type via a 'Smart Comment':\\n\\n ${sqlCommentByAddingTags(\n table,\n {\n name: \"newNameHere\",\n }\n )}`,\n pgIntrospection: table,\n isPgRowType: table.isSelectable,\n isPgCompoundType: !table.isSelectable,\n isPgBaseInput: true,\n pgAddSubfield(\n fieldName,\n attrName,\n pgType,\n spec,\n typeModifier\n ) {\n pgBaseInputFields[fieldName] = {\n name: attrName,\n type: pgType,\n typeModifier,\n };\n return spec;\n },\n }\n );\n }\n\n pg2GqlMapper[tablePgType.id] = {\n map: _ => _,\n unmap: (obj, modifier) => {\n let fieldLookup;\n if (modifier === \"patch\") {\n fieldLookup = pgPatchInputFields;\n } else if (modifier === \"base\") {\n fieldLookup = pgBaseInputFields;\n } else {\n fieldLookup = pgCreateInputFields;\n }\n\n const attr2sql = attr => {\n // TODO: this should use `fieldInput[*].name` to find the attribute\n const fieldName = inflection.column(attr);\n const inputField = fieldLookup[fieldName];\n const v = obj[fieldName];\n if (inputField && v != null) {\n const { type, typeModifier } = inputField;\n return sql.fragment`${gql2pg(v, type, typeModifier)}::${\n type.isFake\n ? sql.identifier(\"unknown\")\n : sql.identifier(type.namespaceName, type.name)\n }`;\n } else {\n return sql.null; // TODO: return default instead.\n }\n };\n\n return sql.fragment`row(${sql.join(\n attributes.map(attr2sql),\n \",\"\n )})::${\n tablePgType.isFake\n ? sql.identifier(\"unknown\")\n : sql.identifier(\n tablePgType.namespaceName,\n tablePgType.name\n )\n }`;\n },\n };\n\n const EdgeType = newWithHooks(\n GraphQLObjectType,\n {\n description: build.wrapDescription(\n `A \\`${tableTypeName}\\` edge in the connection.`,\n \"type\"\n ),\n name: inflection.edge(TableType.name),\n fields: ({ fieldWithHooks }) => {\n return {\n cursor: fieldWithHooks(\n \"cursor\",\n ({ addDataGenerator }) => {\n addDataGenerator(() => ({\n usesCursor: [true],\n pgQuery: queryBuilder => {\n if (primaryKeys) {\n queryBuilder.selectIdentifiers(table);\n }\n },\n }));\n return {\n description: build.wrapDescription(\n \"A cursor for use in pagination.\",\n \"field\"\n ),\n type: Cursor,\n resolve(data) {\n return (\n data.__cursor &&\n base64(JSON.stringify(data.__cursor))\n );\n },\n };\n },\n {\n isCursorField: true,\n }\n ),\n node: pgField(\n build,\n fieldWithHooks,\n \"node\",\n {\n description: build.wrapDescription(\n `The \\`${tableTypeName}\\` at the end of the edge.`,\n \"field\"\n ),\n type: nullableIf(\n !pgForbidSetofFunctionsToReturnNull,\n TableType\n ),\n resolve(data, _args, resolveContext, resolveInfo) {\n const safeAlias =\n getSafeAliasFromResolveInfo(resolveInfo);\n const record = handleNullRow(\n data[safeAlias],\n data.__identifiers\n );\n const liveRecord =\n resolveInfo.rootValue &&\n resolveInfo.rootValue.liveRecord;\n if (\n record &&\n primaryKeys &&\n liveRecord &&\n data.__identifiers\n ) {\n liveRecord(\"pg\", table, data.__identifiers);\n }\n return record;\n },\n },\n {},\n false,\n {\n withQueryBuilder: queryBuilder => {\n if (subscriptions) {\n queryBuilder.selectIdentifiers(table);\n }\n },\n }\n ),\n };\n },\n },\n {\n __origin: `Adding table edge type for ${describePgEntity(\n table\n )}. You can rename the table's GraphQL type via a 'Smart Comment':\\n\\n ${sqlCommentByAddingTags(\n table,\n {\n name: \"newNameHere\",\n }\n )}`,\n isEdgeType: true,\n isPgRowEdgeType: true,\n nodeType: TableType,\n pgIntrospection: table,\n }\n );\n const PageInfo = getTypeByName(inflection.builtin(\"PageInfo\"));\n\n /*const ConnectionType = */\n newWithHooks(\n GraphQLObjectType,\n {\n description: build.wrapDescription(\n `A connection to a list of \\`${tableTypeName}\\` values.`,\n \"type\"\n ),\n name: inflection.connection(TableType.name),\n fields: ({ recurseDataGeneratorsForField, fieldWithHooks }) => {\n recurseDataGeneratorsForField(\"pageInfo\", true);\n return {\n nodes: pgField(\n build,\n fieldWithHooks,\n \"nodes\",\n {\n description: build.wrapDescription(\n `A list of \\`${tableTypeName}\\` objects.`,\n \"field\"\n ),\n type: new GraphQLNonNull(\n new GraphQLList(\n nullableIf(\n !pgForbidSetofFunctionsToReturnNull,\n TableType\n )\n )\n ),\n resolve(data, _args, resolveContext, resolveInfo) {\n const safeAlias =\n getSafeAliasFromResolveInfo(resolveInfo);\n const liveRecord =\n resolveInfo.rootValue &&\n resolveInfo.rootValue.liveRecord;\n return data.data.map(entry => {\n const record = handleNullRow(\n entry[safeAlias],\n entry[safeAlias].__identifiers\n );\n if (\n record &&\n liveRecord &&\n primaryKeys &&\n entry[safeAlias].__identifiers\n ) {\n liveRecord(\n \"pg\",\n table,\n entry[safeAlias].__identifiers\n );\n }\n\n return record;\n });\n },\n },\n {},\n false,\n {\n withQueryBuilder: queryBuilder => {\n if (subscriptions) {\n queryBuilder.selectIdentifiers(table);\n }\n },\n }\n ),\n edges: pgField(\n build,\n fieldWithHooks,\n \"edges\",\n {\n description: build.wrapDescription(\n `A list of edges which contains the \\`${tableTypeName}\\` and cursor to aid in pagination.`,\n \"field\"\n ),\n type: new GraphQLNonNull(\n new GraphQLList(new GraphQLNonNull(EdgeType))\n ),\n resolve(data, _args, _context, resolveInfo) {\n const safeAlias =\n getSafeAliasFromResolveInfo(resolveInfo);\n return data.data.map(entry => ({\n ...entry,\n ...entry[safeAlias],\n }));\n },\n },\n {},\n false,\n {\n hoistCursor: true,\n }\n ),\n pageInfo: PageInfo && {\n description: build.wrapDescription(\n \"Information to aid in pagination.\",\n \"field\"\n ),\n type: new GraphQLNonNull(PageInfo),\n resolve(data) {\n return data;\n },\n },\n };\n },\n },\n {\n __origin: `Adding table connection type for ${describePgEntity(\n table\n )}. You can rename the table's GraphQL type via a 'Smart Comment':\\n\\n ${sqlCommentByAddingTags(\n table,\n {\n name: \"newNameHere\",\n }\n )}`,\n isConnectionType: true,\n isPgRowConnectionType: true,\n edgeType: EdgeType,\n nodeType: TableType,\n pgIntrospection: table,\n }\n );\n },\n true\n );\n pgRegisterGqlInputTypeByTypeId(\n tablePgType.id,\n (_set, modifier) => {\n // This must come first, it triggers creation of all the types\n const TableType = pgGetGqlTypeByTypeIdAndModifier(\n tablePgType.id,\n null\n );\n // This must come after the pgGetGqlTypeByTypeIdAndModifier call\n if (modifier === \"patch\") {\n // TODO: v5: move the definition from above down here\n return TablePatchType;\n }\n if (modifier === \"base\") {\n // TODO: v5: move the definition from above down here\n return TableBaseInputType;\n }\n if (TableType) {\n return getTypeByName(inflection.inputType(TableType));\n }\n return null;\n },\n true\n );\n\n if (arrayTablePgType) {\n // Note: these do not return\n //\n // `new GraphQLList(new GraphQLNonNull(...))`\n //\n // because it's possible to return null entries from postgresql\n // functions. We should probably add a flag to instead export\n // the non-null version as that's more typical.\n pgRegisterGqlTypeByTypeId(\n arrayTablePgType.id,\n () => {\n const TableType = pgGetGqlTypeByTypeIdAndModifier(\n tablePgType.id,\n null\n );\n return new GraphQLList(TableType);\n },\n true\n );\n pgRegisterGqlInputTypeByTypeId(\n arrayTablePgType.id,\n (_set, modifier) => {\n const RelevantTableInputType =\n pgGetGqlInputTypeByTypeIdAndModifier(tablePgType.id, modifier);\n if (RelevantTableInputType) {\n return new GraphQLList(RelevantTableInputType);\n }\n },\n true\n );\n }\n });\n return _;\n },\n [\"PgTables\"],\n [],\n [\"PgTypes\"]\n );\n}: Plugin);\n"],"mappings":"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"}