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,11 +4,8 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
-
8
7
  var _isString = _interopRequireDefault(require("lodash/isString"));
9
-
10
8
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
-
12
9
  var PgConnectionArgOrderBy = function PgConnectionArgOrderBy(builder, {
13
10
  orderByNullsLast
14
11
  }) {
@@ -30,7 +27,6 @@ var PgConnectionArgOrderBy = function PgConnectionArgOrderBy(builder, {
30
27
  if (!table.namespace) return;
31
28
  const tableTypeName = inflection.tableType(table);
32
29
  /* const TableOrderByType = */
33
-
34
30
  newWithHooks(GraphQLEnumType, {
35
31
  name: inflection.orderByType(tableTypeName),
36
32
  description: build.wrapDescription(`Methods to use when ordering \`${tableTypeName}\`.`, "type"),
@@ -76,48 +72,37 @@ var PgConnectionArgOrderBy = function PgConnectionArgOrderBy(builder, {
76
72
  addArgDataGenerator,
77
73
  Self
78
74
  } = context;
79
-
80
75
  if (!isPgFieldConnection && !isPgFieldSimpleCollection) {
81
76
  return args;
82
77
  }
83
-
84
78
  const proc = pgFieldIntrospection.kind === "procedure" ? pgFieldIntrospection : null;
85
79
  const table = pgFieldIntrospection.kind === "class" ? pgFieldIntrospection : proc ? pgFieldIntrospectionTable : null;
86
-
87
80
  if (!table || !table.namespace || !table.isSelectable || omit(table, "order")) {
88
81
  return args;
89
82
  }
90
-
91
83
  if (proc) {
92
84
  if (!proc.tags.sortable) {
93
85
  return args;
94
86
  }
95
87
  }
96
-
97
88
  const TableType = pgGetGqlTypeByTypeIdAndModifier(table.type.id, null);
98
89
  const tableTypeName = TableType.name;
99
90
  const TableOrderByType = getTypeByName(inflection.orderByType(tableTypeName));
100
-
101
91
  const cursorPrefixFromOrderBy = orderBy => {
102
92
  if (orderBy) {
103
93
  const cursorPrefixes = [];
104
-
105
94
  for (let itemIndex = 0, itemCount = orderBy.length; itemIndex < itemCount; itemIndex++) {
106
95
  const item = orderBy[itemIndex];
107
-
108
96
  if (item.alias) {
109
97
  cursorPrefixes.push(sql.literal(item.alias));
110
98
  }
111
99
  }
112
-
113
100
  if (cursorPrefixes.length > 0) {
114
101
  return cursorPrefixes;
115
102
  }
116
103
  }
117
-
118
104
  return null;
119
105
  };
120
-
121
106
  addArgDataGenerator(function connectionOrderBy({
122
107
  orderBy: rawOrderBy
123
108
  }) {
@@ -133,13 +118,12 @@ var PgConnectionArgOrderBy = function PgConnectionArgOrderBy(builder, {
133
118
  } = item;
134
119
  const orders = Array.isArray(specs[0]) || specs.length === 0 ? specs : [specs];
135
120
  orders.forEach(([col, ascending, specNullsFirst]) => {
136
- const expr = (0, _isString.default)(col) ? sql.fragment`${queryBuilder.getTableAlias()}.${sql.identifier(col)}` : col; // If the enum specifies null ordering, use that
121
+ const expr = (0, _isString.default)(col) ? sql.fragment`${queryBuilder.getTableAlias()}.${sql.identifier(col)}` : col;
122
+ // If the enum specifies null ordering, use that
137
123
  // Otherwise, use the orderByNullsLast option if present
138
-
139
124
  const nullsFirst = specNullsFirst != null ? specNullsFirst : orderByNullsLast != null ? !orderByNullsLast : undefined;
140
125
  queryBuilder.orderBy(expr, ascending, nullsFirst);
141
126
  });
142
-
143
127
  if (unique) {
144
128
  queryBuilder.setOrderIsUnique();
145
129
  }
@@ -156,6 +140,5 @@ var PgConnectionArgOrderBy = function PgConnectionArgOrderBy(builder, {
156
140
  }, `Adding 'orderBy' argument to field '${fieldName}' of '${Self.name}'`);
157
141
  }, ["PgConnectionArgOrderBy"]);
158
142
  };
159
-
160
143
  exports.default = PgConnectionArgOrderBy;
161
144
  //# sourceMappingURL=PgConnectionArgOrderBy.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/plugins/PgConnectionArgOrderBy.js"],"names":["PgConnectionArgOrderBy","builder","orderByNullsLast","hook","_","build","newWithHooks","pgIntrospectionResultsByKind","introspectionResultsByKind","graphql","GraphQLEnumType","inflection","pgOmit","omit","sqlCommentByAddingTags","describePgEntity","class","forEach","table","isSelectable","namespace","tableTypeName","tableType","name","orderByType","description","wrapDescription","values","builtin","value","alias","specs","__origin","pgIntrospection","isPgRowSortEnum","args","context","extend","getTypeByName","pgGetGqlTypeByTypeIdAndModifier","pgSql","sql","GraphQLList","GraphQLNonNull","scope","fieldName","isPgFieldConnection","isPgFieldSimpleCollection","pgFieldIntrospection","pgFieldIntrospectionTable","addArgDataGenerator","Self","proc","kind","tags","sortable","TableType","type","id","TableOrderByType","cursorPrefixFromOrderBy","orderBy","cursorPrefixes","itemIndex","itemCount","length","item","push","literal","connectionOrderBy","rawOrderBy","Array","isArray","pgCursorPrefix","pgQuery","queryBuilder","unique","orders","col","ascending","specNullsFirst","expr","fragment","getTableAlias","identifier","nullsFirst","undefined","setOrderIsUnique"],"mappings":"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","sourcesContent":["// @flow\nimport isString from \"lodash/isString\";\nimport type { Plugin } from \"graphile-build\";\n\nexport default (function PgConnectionArgOrderBy(builder, { orderByNullsLast }) {\n builder.hook(\n \"init\",\n (_, build) => {\n const {\n newWithHooks,\n pgIntrospectionResultsByKind: introspectionResultsByKind,\n graphql: { GraphQLEnumType },\n inflection,\n pgOmit: omit,\n sqlCommentByAddingTags,\n describePgEntity,\n } = build;\n introspectionResultsByKind.class.forEach(table => {\n // PERFORMANCE: These used to be .filter(...) calls\n if (!table.isSelectable || omit(table, \"order\")) return;\n if (!table.namespace) return;\n\n const tableTypeName = inflection.tableType(table);\n /* const TableOrderByType = */\n newWithHooks(\n GraphQLEnumType,\n {\n name: inflection.orderByType(tableTypeName),\n description: build.wrapDescription(\n `Methods to use when ordering \\`${tableTypeName}\\`.`,\n \"type\"\n ),\n values: {\n [inflection.builtin(\"NATURAL\")]: {\n value: {\n alias: null,\n specs: [],\n },\n },\n },\n },\n {\n __origin: `Adding connection \"orderBy\" argument 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 isPgRowSortEnum: true,\n }\n );\n });\n return _;\n },\n [\"PgConnectionArgOrderBy\"]\n );\n\n builder.hook(\n \"GraphQLObjectType:fields:field:args\",\n (args, build, context) => {\n const {\n extend,\n getTypeByName,\n pgGetGqlTypeByTypeIdAndModifier,\n pgSql: sql,\n graphql: { GraphQLList, GraphQLNonNull },\n inflection,\n pgOmit: omit,\n } = build;\n const {\n scope: {\n fieldName,\n isPgFieldConnection,\n isPgFieldSimpleCollection,\n pgFieldIntrospection,\n pgFieldIntrospectionTable,\n },\n addArgDataGenerator,\n Self,\n } = context;\n\n if (!isPgFieldConnection && !isPgFieldSimpleCollection) {\n return args;\n }\n\n const proc =\n pgFieldIntrospection.kind === \"procedure\" ? pgFieldIntrospection : null;\n const table =\n pgFieldIntrospection.kind === \"class\"\n ? pgFieldIntrospection\n : proc\n ? pgFieldIntrospectionTable\n : null;\n if (\n !table ||\n !table.namespace ||\n !table.isSelectable ||\n omit(table, \"order\")\n ) {\n return args;\n }\n if (proc) {\n if (!proc.tags.sortable) {\n return args;\n }\n }\n const TableType = pgGetGqlTypeByTypeIdAndModifier(table.type.id, null);\n const tableTypeName = TableType.name;\n const TableOrderByType = getTypeByName(\n inflection.orderByType(tableTypeName)\n );\n const cursorPrefixFromOrderBy = orderBy => {\n if (orderBy) {\n const cursorPrefixes = [];\n for (\n let itemIndex = 0, itemCount = orderBy.length;\n itemIndex < itemCount;\n itemIndex++\n ) {\n const item = orderBy[itemIndex];\n if (item.alias) {\n cursorPrefixes.push(sql.literal(item.alias));\n }\n }\n if (cursorPrefixes.length > 0) {\n return cursorPrefixes;\n }\n }\n return null;\n };\n\n addArgDataGenerator(function connectionOrderBy({ orderBy: rawOrderBy }) {\n const orderBy = rawOrderBy\n ? Array.isArray(rawOrderBy)\n ? rawOrderBy\n : [rawOrderBy]\n : null;\n return {\n pgCursorPrefix: cursorPrefixFromOrderBy(orderBy),\n pgQuery: queryBuilder => {\n if (orderBy != null) {\n orderBy.forEach(item => {\n const { specs, unique } = item;\n const orders =\n Array.isArray(specs[0]) || specs.length === 0\n ? specs\n : [specs];\n orders.forEach(([col, ascending, specNullsFirst]) => {\n const expr = isString(col)\n ? sql.fragment`${queryBuilder.getTableAlias()}.${sql.identifier(\n col\n )}`\n : col;\n // If the enum specifies null ordering, use that\n // Otherwise, use the orderByNullsLast option if present\n const nullsFirst =\n specNullsFirst != null\n ? specNullsFirst\n : orderByNullsLast != null\n ? !orderByNullsLast\n : undefined;\n queryBuilder.orderBy(expr, ascending, nullsFirst);\n });\n if (unique) {\n queryBuilder.setOrderIsUnique();\n }\n });\n }\n },\n };\n });\n\n return extend(\n args,\n {\n orderBy: {\n description: build.wrapDescription(\n `The method to use when ordering \\`${tableTypeName}\\`.`,\n \"arg\"\n ),\n type: new GraphQLList(new GraphQLNonNull(TableOrderByType)),\n },\n },\n `Adding 'orderBy' argument to field '${fieldName}' of '${Self.name}'`\n );\n },\n [\"PgConnectionArgOrderBy\"]\n );\n}: Plugin);\n"],"file":"PgConnectionArgOrderBy.js"}
1
+ {"version":3,"file":"PgConnectionArgOrderBy.js","names":["_isString","_interopRequireDefault","require","obj","__esModule","default","PgConnectionArgOrderBy","builder","orderByNullsLast","hook","_","build","newWithHooks","pgIntrospectionResultsByKind","introspectionResultsByKind","graphql","GraphQLEnumType","inflection","pgOmit","omit","sqlCommentByAddingTags","describePgEntity","class","forEach","table","isSelectable","namespace","tableTypeName","tableType","name","orderByType","description","wrapDescription","values","builtin","value","alias","specs","__origin","pgIntrospection","isPgRowSortEnum","args","context","extend","getTypeByName","pgGetGqlTypeByTypeIdAndModifier","pgSql","sql","GraphQLList","GraphQLNonNull","scope","fieldName","isPgFieldConnection","isPgFieldSimpleCollection","pgFieldIntrospection","pgFieldIntrospectionTable","addArgDataGenerator","Self","proc","kind","tags","sortable","TableType","type","id","TableOrderByType","cursorPrefixFromOrderBy","orderBy","cursorPrefixes","itemIndex","itemCount","length","item","push","literal","connectionOrderBy","rawOrderBy","Array","isArray","pgCursorPrefix","pgQuery","queryBuilder","unique","orders","col","ascending","specNullsFirst","expr","isString","fragment","getTableAlias","identifier","nullsFirst","undefined","setOrderIsUnique","exports"],"sources":["../../src/plugins/PgConnectionArgOrderBy.js"],"sourcesContent":["// @flow\nimport isString from \"lodash/isString\";\nimport type { Plugin } from \"graphile-build\";\n\nexport default (function PgConnectionArgOrderBy(builder, { orderByNullsLast }) {\n builder.hook(\n \"init\",\n (_, build) => {\n const {\n newWithHooks,\n pgIntrospectionResultsByKind: introspectionResultsByKind,\n graphql: { GraphQLEnumType },\n inflection,\n pgOmit: omit,\n sqlCommentByAddingTags,\n describePgEntity,\n } = build;\n introspectionResultsByKind.class.forEach(table => {\n // PERFORMANCE: These used to be .filter(...) calls\n if (!table.isSelectable || omit(table, \"order\")) return;\n if (!table.namespace) return;\n\n const tableTypeName = inflection.tableType(table);\n /* const TableOrderByType = */\n newWithHooks(\n GraphQLEnumType,\n {\n name: inflection.orderByType(tableTypeName),\n description: build.wrapDescription(\n `Methods to use when ordering \\`${tableTypeName}\\`.`,\n \"type\"\n ),\n values: {\n [inflection.builtin(\"NATURAL\")]: {\n value: {\n alias: null,\n specs: [],\n },\n },\n },\n },\n {\n __origin: `Adding connection \"orderBy\" argument 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 isPgRowSortEnum: true,\n }\n );\n });\n return _;\n },\n [\"PgConnectionArgOrderBy\"]\n );\n\n builder.hook(\n \"GraphQLObjectType:fields:field:args\",\n (args, build, context) => {\n const {\n extend,\n getTypeByName,\n pgGetGqlTypeByTypeIdAndModifier,\n pgSql: sql,\n graphql: { GraphQLList, GraphQLNonNull },\n inflection,\n pgOmit: omit,\n } = build;\n const {\n scope: {\n fieldName,\n isPgFieldConnection,\n isPgFieldSimpleCollection,\n pgFieldIntrospection,\n pgFieldIntrospectionTable,\n },\n addArgDataGenerator,\n Self,\n } = context;\n\n if (!isPgFieldConnection && !isPgFieldSimpleCollection) {\n return args;\n }\n\n const proc =\n pgFieldIntrospection.kind === \"procedure\" ? pgFieldIntrospection : null;\n const table =\n pgFieldIntrospection.kind === \"class\"\n ? pgFieldIntrospection\n : proc\n ? pgFieldIntrospectionTable\n : null;\n if (\n !table ||\n !table.namespace ||\n !table.isSelectable ||\n omit(table, \"order\")\n ) {\n return args;\n }\n if (proc) {\n if (!proc.tags.sortable) {\n return args;\n }\n }\n const TableType = pgGetGqlTypeByTypeIdAndModifier(table.type.id, null);\n const tableTypeName = TableType.name;\n const TableOrderByType = getTypeByName(\n inflection.orderByType(tableTypeName)\n );\n const cursorPrefixFromOrderBy = orderBy => {\n if (orderBy) {\n const cursorPrefixes = [];\n for (\n let itemIndex = 0, itemCount = orderBy.length;\n itemIndex < itemCount;\n itemIndex++\n ) {\n const item = orderBy[itemIndex];\n if (item.alias) {\n cursorPrefixes.push(sql.literal(item.alias));\n }\n }\n if (cursorPrefixes.length > 0) {\n return cursorPrefixes;\n }\n }\n return null;\n };\n\n addArgDataGenerator(function connectionOrderBy({ orderBy: rawOrderBy }) {\n const orderBy = rawOrderBy\n ? Array.isArray(rawOrderBy)\n ? rawOrderBy\n : [rawOrderBy]\n : null;\n return {\n pgCursorPrefix: cursorPrefixFromOrderBy(orderBy),\n pgQuery: queryBuilder => {\n if (orderBy != null) {\n orderBy.forEach(item => {\n const { specs, unique } = item;\n const orders =\n Array.isArray(specs[0]) || specs.length === 0\n ? specs\n : [specs];\n orders.forEach(([col, ascending, specNullsFirst]) => {\n const expr = isString(col)\n ? sql.fragment`${queryBuilder.getTableAlias()}.${sql.identifier(\n col\n )}`\n : col;\n // If the enum specifies null ordering, use that\n // Otherwise, use the orderByNullsLast option if present\n const nullsFirst =\n specNullsFirst != null\n ? specNullsFirst\n : orderByNullsLast != null\n ? !orderByNullsLast\n : undefined;\n queryBuilder.orderBy(expr, ascending, nullsFirst);\n });\n if (unique) {\n queryBuilder.setOrderIsUnique();\n }\n });\n }\n },\n };\n });\n\n return extend(\n args,\n {\n orderBy: {\n description: build.wrapDescription(\n `The method to use when ordering \\`${tableTypeName}\\`.`,\n \"arg\"\n ),\n type: new GraphQLList(new GraphQLNonNull(TableOrderByType)),\n },\n },\n `Adding 'orderBy' argument to field '${fieldName}' of '${Self.name}'`\n );\n },\n [\"PgConnectionArgOrderBy\"]\n );\n}: Plugin);\n"],"mappings":"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"}
@@ -4,7 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
-
8
7
  var PgConnectionArgOrderByDefaultValue = function PgConnectionArgOrderByDefaultValue(builder) {
9
8
  builder.hook("GraphQLObjectType:fields:field:args", (args, build, context) => {
10
9
  const {
@@ -21,19 +20,15 @@ var PgConnectionArgOrderByDefaultValue = function PgConnectionArgOrderByDefaultV
21
20
  },
22
21
  Self
23
22
  } = context;
24
-
25
23
  if (!isPgFieldConnection || !table || table.kind !== "class" || !table.namespace || !table.isSelectable || !args.orderBy) {
26
24
  return args;
27
25
  }
28
-
29
26
  const TableType = pgGetGqlTypeByTypeIdAndModifier(table.type.id, null);
30
27
  const tableTypeName = TableType.name;
31
28
  const TableOrderByType = getTypeByName(inflection.orderByType(tableTypeName));
32
-
33
29
  if (!TableOrderByType) {
34
30
  return args;
35
31
  }
36
-
37
32
  const primaryKeyAsc = inflection.builtin("PRIMARY_KEY_ASC");
38
33
  const defaultValueEnum = TableOrderByType.getValues().find(v => v.name === primaryKeyAsc) || TableOrderByType.getValues()[0];
39
34
  return extend(args, {
@@ -43,6 +38,5 @@ var PgConnectionArgOrderByDefaultValue = function PgConnectionArgOrderByDefaultV
43
38
  });
44
39
  }, ["PgConnectionArgOrderByDefaultValue"]);
45
40
  };
46
-
47
41
  exports.default = PgConnectionArgOrderByDefaultValue;
48
42
  //# sourceMappingURL=PgConnectionArgOrderByDefaultValue.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/plugins/PgConnectionArgOrderByDefaultValue.js"],"names":["PgConnectionArgOrderByDefaultValue","builder","hook","args","build","context","extend","getTypeByName","pgGetGqlTypeByTypeIdAndModifier","inflection","scope","fieldName","isPgFieldConnection","pgFieldIntrospection","table","Self","kind","namespace","isSelectable","orderBy","TableType","type","id","tableTypeName","name","TableOrderByType","orderByType","primaryKeyAsc","builtin","defaultValueEnum","getValues","find","v","defaultValue","value"],"mappings":";;;;;;;IAGyBA,kC,GAAT,SAASA,kCAAT,CAA4CC,OAA5C,EAAqD;AACnEA,EAAAA,OAAO,CAACC,IAAR,CACE,qCADF,EAEE,CAACC,IAAD,EAAOC,KAAP,EAAcC,OAAd,KAA0B;AACxB,UAAM;AACJC,MAAAA,MADI;AAEJC,MAAAA,aAFI;AAGJC,MAAAA,+BAHI;AAIJC,MAAAA;AAJI,QAKFL,KALJ;AAMA,UAAM;AACJM,MAAAA,KAAK,EAAE;AAAEC,QAAAA,SAAF;AAAaC,QAAAA,mBAAb;AAAkCC,QAAAA,oBAAoB,EAAEC;AAAxD,OADH;AAEJC,MAAAA;AAFI,QAGFV,OAHJ;;AAKA,QACE,CAACO,mBAAD,IACA,CAACE,KADD,IAEAA,KAAK,CAACE,IAAN,KAAe,OAFf,IAGA,CAACF,KAAK,CAACG,SAHP,IAIA,CAACH,KAAK,CAACI,YAJP,IAKA,CAACf,IAAI,CAACgB,OANR,EAOE;AACA,aAAOhB,IAAP;AACD;;AACD,UAAMiB,SAAS,GAAGZ,+BAA+B,CAACM,KAAK,CAACO,IAAN,CAAWC,EAAZ,EAAgB,IAAhB,CAAjD;AACA,UAAMC,aAAa,GAAGH,SAAS,CAACI,IAAhC;AACA,UAAMC,gBAAgB,GAAGlB,aAAa,CACpCE,UAAU,CAACiB,WAAX,CAAuBH,aAAvB,CADoC,CAAtC;;AAGA,QAAI,CAACE,gBAAL,EAAuB;AACrB,aAAOtB,IAAP;AACD;;AAED,UAAMwB,aAAa,GAAGlB,UAAU,CAACmB,OAAX,CAAmB,iBAAnB,CAAtB;AACA,UAAMC,gBAAgB,GACpBJ,gBAAgB,CAACK,SAAjB,GAA6BC,IAA7B,CAAkCC,CAAC,IAAIA,CAAC,CAACR,IAAF,KAAWG,aAAlD,KACAF,gBAAgB,CAACK,SAAjB,GAA6B,CAA7B,CAFF;AAIA,WAAOxB,MAAM,CAACH,IAAD,EAAO;AAClBgB,MAAAA,OAAO,EAAEb,MAAM,CACbH,IAAI,CAACgB,OADQ,EAEb;AACEc,QAAAA,YAAY,EAAEJ,gBAAgB,IAAI,CAACA,gBAAgB,CAACK,KAAlB;AADpC,OAFa,EAKZ,6CAA4CvB,SAAU,SAAQI,IAAI,CAACS,IAAK,GAL5D;AADG,KAAP,CAAb;AASD,GA/CH,EAgDE,CAAC,oCAAD,CAhDF;AAkDD,C","sourcesContent":["// @flow\nimport type { Plugin } from \"graphile-build\";\n\nexport default (function PgConnectionArgOrderByDefaultValue(builder) {\n builder.hook(\n \"GraphQLObjectType:fields:field:args\",\n (args, build, context) => {\n const {\n extend,\n getTypeByName,\n pgGetGqlTypeByTypeIdAndModifier,\n inflection,\n } = build;\n const {\n scope: { fieldName, isPgFieldConnection, pgFieldIntrospection: table },\n Self,\n } = context;\n\n if (\n !isPgFieldConnection ||\n !table ||\n table.kind !== \"class\" ||\n !table.namespace ||\n !table.isSelectable ||\n !args.orderBy\n ) {\n return args;\n }\n const TableType = pgGetGqlTypeByTypeIdAndModifier(table.type.id, null);\n const tableTypeName = TableType.name;\n const TableOrderByType = getTypeByName(\n inflection.orderByType(tableTypeName)\n );\n if (!TableOrderByType) {\n return args;\n }\n\n const primaryKeyAsc = inflection.builtin(\"PRIMARY_KEY_ASC\");\n const defaultValueEnum =\n TableOrderByType.getValues().find(v => v.name === primaryKeyAsc) ||\n TableOrderByType.getValues()[0];\n\n return extend(args, {\n orderBy: extend(\n args.orderBy,\n {\n defaultValue: defaultValueEnum && [defaultValueEnum.value],\n },\n `Adding defaultValue to orderBy for field '${fieldName}' of '${Self.name}'`\n ),\n });\n },\n [\"PgConnectionArgOrderByDefaultValue\"]\n );\n}: Plugin);\n"],"file":"PgConnectionArgOrderByDefaultValue.js"}
1
+ {"version":3,"file":"PgConnectionArgOrderByDefaultValue.js","names":["PgConnectionArgOrderByDefaultValue","builder","hook","args","build","context","extend","getTypeByName","pgGetGqlTypeByTypeIdAndModifier","inflection","scope","fieldName","isPgFieldConnection","pgFieldIntrospection","table","Self","kind","namespace","isSelectable","orderBy","TableType","type","id","tableTypeName","name","TableOrderByType","orderByType","primaryKeyAsc","builtin","defaultValueEnum","getValues","find","v","defaultValue","value","exports","default"],"sources":["../../src/plugins/PgConnectionArgOrderByDefaultValue.js"],"sourcesContent":["// @flow\nimport type { Plugin } from \"graphile-build\";\n\nexport default (function PgConnectionArgOrderByDefaultValue(builder) {\n builder.hook(\n \"GraphQLObjectType:fields:field:args\",\n (args, build, context) => {\n const {\n extend,\n getTypeByName,\n pgGetGqlTypeByTypeIdAndModifier,\n inflection,\n } = build;\n const {\n scope: { fieldName, isPgFieldConnection, pgFieldIntrospection: table },\n Self,\n } = context;\n\n if (\n !isPgFieldConnection ||\n !table ||\n table.kind !== \"class\" ||\n !table.namespace ||\n !table.isSelectable ||\n !args.orderBy\n ) {\n return args;\n }\n const TableType = pgGetGqlTypeByTypeIdAndModifier(table.type.id, null);\n const tableTypeName = TableType.name;\n const TableOrderByType = getTypeByName(\n inflection.orderByType(tableTypeName)\n );\n if (!TableOrderByType) {\n return args;\n }\n\n const primaryKeyAsc = inflection.builtin(\"PRIMARY_KEY_ASC\");\n const defaultValueEnum =\n TableOrderByType.getValues().find(v => v.name === primaryKeyAsc) ||\n TableOrderByType.getValues()[0];\n\n return extend(args, {\n orderBy: extend(\n args.orderBy,\n {\n defaultValue: defaultValueEnum && [defaultValueEnum.value],\n },\n `Adding defaultValue to orderBy for field '${fieldName}' of '${Self.name}'`\n ),\n });\n },\n [\"PgConnectionArgOrderByDefaultValue\"]\n );\n}: Plugin);\n"],"mappings":";;;;;;IAGyBA,kCAAkC,GAA3C,SAASA,kCAAkCA,CAACC,OAAO,EAAE;EACnEA,OAAO,CAACC,IAAI,CACV,qCAAqC,EACrC,CAACC,IAAI,EAAEC,KAAK,EAAEC,OAAO,KAAK;IACxB,MAAM;MACJC,MAAM;MACNC,aAAa;MACbC,+BAA+B;MAC/BC;IACF,CAAC,GAAGL,KAAK;IACT,MAAM;MACJM,KAAK,EAAE;QAAEC,SAAS;QAAEC,mBAAmB;QAAEC,oBAAoB,EAAEC;MAAM,CAAC;MACtEC;IACF,CAAC,GAAGV,OAAO;IAEX,IACE,CAACO,mBAAmB,IACpB,CAACE,KAAK,IACNA,KAAK,CAACE,IAAI,KAAK,OAAO,IACtB,CAACF,KAAK,CAACG,SAAS,IAChB,CAACH,KAAK,CAACI,YAAY,IACnB,CAACf,IAAI,CAACgB,OAAO,EACb;MACA,OAAOhB,IAAI;IACb;IACA,MAAMiB,SAAS,GAAGZ,+BAA+B,CAACM,KAAK,CAACO,IAAI,CAACC,EAAE,EAAE,IAAI,CAAC;IACtE,MAAMC,aAAa,GAAGH,SAAS,CAACI,IAAI;IACpC,MAAMC,gBAAgB,GAAGlB,aAAa,CACpCE,UAAU,CAACiB,WAAW,CAACH,aAAa,CACtC,CAAC;IACD,IAAI,CAACE,gBAAgB,EAAE;MACrB,OAAOtB,IAAI;IACb;IAEA,MAAMwB,aAAa,GAAGlB,UAAU,CAACmB,OAAO,CAAC,iBAAiB,CAAC;IAC3D,MAAMC,gBAAgB,GACpBJ,gBAAgB,CAACK,SAAS,CAAC,CAAC,CAACC,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACR,IAAI,KAAKG,aAAa,CAAC,IAChEF,gBAAgB,CAACK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAEjC,OAAOxB,MAAM,CAACH,IAAI,EAAE;MAClBgB,OAAO,EAAEb,MAAM,CACbH,IAAI,CAACgB,OAAO,EACZ;QACEc,YAAY,EAAEJ,gBAAgB,IAAI,CAACA,gBAAgB,CAACK,KAAK;MAC3D,CAAC,EACA,6CAA4CvB,SAAU,SAAQI,IAAI,CAACS,IAAK,GAC3E;IACF,CAAC,CAAC;EACJ,CAAC,EACD,CAAC,oCAAoC,CACvC,CAAC;AACH,CAAC;AAAAW,OAAA,CAAAC,OAAA,GAAApC,kCAAA"}
@@ -4,7 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
-
8
7
  var PgConnectionTotalCount = function PgConnectionTotalCount(builder) {
9
8
  builder.hook("GraphQLObjectType:fields", (fields, build, context) => {
10
9
  const {
@@ -25,17 +24,13 @@ var PgConnectionTotalCount = function PgConnectionTotalCount(builder) {
25
24
  fieldWithHooks,
26
25
  Self
27
26
  } = context;
28
-
29
27
  if (!isPgRowConnectionType) {
30
28
  return fields;
31
29
  }
32
-
33
30
  const nodeTypeName = nodeType && nodeType.name ? nodeType.name : table && table.kind === "class" ? inflection.tableType(table) : null;
34
-
35
31
  if (!nodeTypeName) {
36
32
  return fields;
37
33
  }
38
-
39
34
  return extend(fields, {
40
35
  totalCount: fieldWithHooks("totalCount", ({
41
36
  addDataGenerator
@@ -50,11 +45,9 @@ var PgConnectionTotalCount = function PgConnectionTotalCount(builder) {
50
45
  return {
51
46
  description: build.wrapDescription(`The count of *all* \`${nodeTypeName}\` you could get from the connection.`, "field"),
52
47
  type: new GraphQLNonNull(GraphQLInt),
53
-
54
48
  resolve(parent) {
55
49
  return parent.aggregates && parent.aggregates.totalCount || 0;
56
50
  }
57
-
58
51
  };
59
52
  }, {
60
53
  isPgConnectionTotalCountField: true
@@ -62,6 +55,5 @@ var PgConnectionTotalCount = function PgConnectionTotalCount(builder) {
62
55
  }, `Adding totalCount to connection '${Self.name}'`);
63
56
  }, ["PgConnectionTotalCount"]);
64
57
  };
65
-
66
58
  exports.default = PgConnectionTotalCount;
67
59
  //# sourceMappingURL=PgConnectionTotalCount.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/plugins/PgConnectionTotalCount.js"],"names":["PgConnectionTotalCount","builder","hook","fields","build","context","extend","inflection","graphql","GraphQLInt","GraphQLNonNull","pgSql","sql","scope","isPgRowConnectionType","pgIntrospection","table","nodeType","fieldWithHooks","Self","nodeTypeName","name","kind","tableType","totalCount","addDataGenerator","pgAggregateQuery","aggregateQueryBuilder","select","fragment","description","wrapDescription","type","resolve","parent","aggregates","isPgConnectionTotalCountField"],"mappings":";;;;;;;IAGyBA,sB,GAAT,SAASA,sBAAT,CAAgCC,OAAhC,EAAyC;AACvDA,EAAAA,OAAO,CAACC,IAAR,CACE,0BADF,EAEE,CAACC,MAAD,EAASC,KAAT,EAAgBC,OAAhB,KAA4B;AAC1B,UAAM;AACJC,MAAAA,MADI;AAEJC,MAAAA,UAFI;AAGJC,MAAAA,OAAO,EAAE;AAAEC,QAAAA,UAAF;AAAcC,QAAAA;AAAd,OAHL;AAIJC,MAAAA,KAAK,EAAEC;AAJH,QAKFR,KALJ;AAMA,UAAM;AACJS,MAAAA,KAAK,EAAE;AAAEC,QAAAA,qBAAF;AAAyBC,QAAAA,eAAe,EAAEC,KAA1C;AAAiDC,QAAAA;AAAjD,OADH;AAEJC,MAAAA,cAFI;AAGJC,MAAAA;AAHI,QAIFd,OAJJ;;AAMA,QAAI,CAACS,qBAAL,EAA4B;AAC1B,aAAOX,MAAP;AACD;;AAED,UAAMiB,YAAY,GAChBH,QAAQ,IAAIA,QAAQ,CAACI,IAArB,GACIJ,QAAQ,CAACI,IADb,GAEIL,KAAK,IAAIA,KAAK,CAACM,IAAN,KAAe,OAAxB,GACAf,UAAU,CAACgB,SAAX,CAAqBP,KAArB,CADA,GAEA,IALN;;AAMA,QAAI,CAACI,YAAL,EAAmB;AACjB,aAAOjB,MAAP;AACD;;AAED,WAAOG,MAAM,CACXH,MADW,EAEX;AACEqB,MAAAA,UAAU,EAAEN,cAAc,CACxB,YADwB,EAExB,CAAC;AAAEO,QAAAA;AAAF,OAAD,KAA0B;AACxBA,QAAAA,gBAAgB,CAAC,MAAM;AACrB,iBAAO;AACLC,YAAAA,gBAAgB,EAAEC,qBAAqB,IAAI;AACzCA,cAAAA,qBAAqB,CAACC,MAAtB,CACEhB,GAAG,CAACiB,QAAS,UADf,EAEE,YAFF;AAID;AANI,WAAP;AAQD,SATe,CAAhB;AAUA,eAAO;AACLC,UAAAA,WAAW,EAAE1B,KAAK,CAAC2B,eAAN,CACV,wBAAuBX,YAAa,uCAD1B,EAEX,OAFW,CADR;AAKLY,UAAAA,IAAI,EAAE,IAAItB,cAAJ,CAAmBD,UAAnB,CALD;;AAMLwB,UAAAA,OAAO,CAACC,MAAD,EAAS;AACd,mBACGA,MAAM,CAACC,UAAP,IAAqBD,MAAM,CAACC,UAAP,CAAkBX,UAAxC,IAAuD,CADzD;AAGD;;AAVI,SAAP;AAYD,OAzBuB,EA0BxB;AACEY,QAAAA,6BAA6B,EAAE;AADjC,OA1BwB;AAD5B,KAFW,EAkCV,oCAAmCjB,IAAI,CAACE,IAAK,GAlCnC,CAAb;AAoCD,GAjEH,EAkEE,CAAC,wBAAD,CAlEF;AAoED,C","sourcesContent":["// @flow\nimport type { Plugin } from \"graphile-build\";\n\nexport default (function PgConnectionTotalCount(builder) {\n builder.hook(\n \"GraphQLObjectType:fields\",\n (fields, build, context) => {\n const {\n extend,\n inflection,\n graphql: { GraphQLInt, GraphQLNonNull },\n pgSql: sql,\n } = build;\n const {\n scope: { isPgRowConnectionType, pgIntrospection: table, nodeType },\n fieldWithHooks,\n Self,\n } = context;\n\n if (!isPgRowConnectionType) {\n return fields;\n }\n\n const nodeTypeName =\n nodeType && nodeType.name\n ? nodeType.name\n : table && table.kind === \"class\"\n ? inflection.tableType(table)\n : null;\n if (!nodeTypeName) {\n return fields;\n }\n\n return extend(\n fields,\n {\n totalCount: fieldWithHooks(\n \"totalCount\",\n ({ addDataGenerator }) => {\n addDataGenerator(() => {\n return {\n pgAggregateQuery: aggregateQueryBuilder => {\n aggregateQueryBuilder.select(\n sql.fragment`count(1)`,\n \"totalCount\"\n );\n },\n };\n });\n return {\n description: build.wrapDescription(\n `The count of *all* \\`${nodeTypeName}\\` you could get from the connection.`,\n \"field\"\n ),\n type: new GraphQLNonNull(GraphQLInt),\n resolve(parent) {\n return (\n (parent.aggregates && parent.aggregates.totalCount) || 0\n );\n },\n };\n },\n {\n isPgConnectionTotalCountField: true,\n }\n ),\n },\n `Adding totalCount to connection '${Self.name}'`\n );\n },\n [\"PgConnectionTotalCount\"]\n );\n}: Plugin);\n"],"file":"PgConnectionTotalCount.js"}
1
+ {"version":3,"file":"PgConnectionTotalCount.js","names":["PgConnectionTotalCount","builder","hook","fields","build","context","extend","inflection","graphql","GraphQLInt","GraphQLNonNull","pgSql","sql","scope","isPgRowConnectionType","pgIntrospection","table","nodeType","fieldWithHooks","Self","nodeTypeName","name","kind","tableType","totalCount","addDataGenerator","pgAggregateQuery","aggregateQueryBuilder","select","fragment","description","wrapDescription","type","resolve","parent","aggregates","isPgConnectionTotalCountField","exports","default"],"sources":["../../src/plugins/PgConnectionTotalCount.js"],"sourcesContent":["// @flow\nimport type { Plugin } from \"graphile-build\";\n\nexport default (function PgConnectionTotalCount(builder) {\n builder.hook(\n \"GraphQLObjectType:fields\",\n (fields, build, context) => {\n const {\n extend,\n inflection,\n graphql: { GraphQLInt, GraphQLNonNull },\n pgSql: sql,\n } = build;\n const {\n scope: { isPgRowConnectionType, pgIntrospection: table, nodeType },\n fieldWithHooks,\n Self,\n } = context;\n\n if (!isPgRowConnectionType) {\n return fields;\n }\n\n const nodeTypeName =\n nodeType && nodeType.name\n ? nodeType.name\n : table && table.kind === \"class\"\n ? inflection.tableType(table)\n : null;\n if (!nodeTypeName) {\n return fields;\n }\n\n return extend(\n fields,\n {\n totalCount: fieldWithHooks(\n \"totalCount\",\n ({ addDataGenerator }) => {\n addDataGenerator(() => {\n return {\n pgAggregateQuery: aggregateQueryBuilder => {\n aggregateQueryBuilder.select(\n sql.fragment`count(1)`,\n \"totalCount\"\n );\n },\n };\n });\n return {\n description: build.wrapDescription(\n `The count of *all* \\`${nodeTypeName}\\` you could get from the connection.`,\n \"field\"\n ),\n type: new GraphQLNonNull(GraphQLInt),\n resolve(parent) {\n return (\n (parent.aggregates && parent.aggregates.totalCount) || 0\n );\n },\n };\n },\n {\n isPgConnectionTotalCountField: true,\n }\n ),\n },\n `Adding totalCount to connection '${Self.name}'`\n );\n },\n [\"PgConnectionTotalCount\"]\n );\n}: Plugin);\n"],"mappings":";;;;;;IAGyBA,sBAAsB,GAA/B,SAASA,sBAAsBA,CAACC,OAAO,EAAE;EACvDA,OAAO,CAACC,IAAI,CACV,0BAA0B,EAC1B,CAACC,MAAM,EAAEC,KAAK,EAAEC,OAAO,KAAK;IAC1B,MAAM;MACJC,MAAM;MACNC,UAAU;MACVC,OAAO,EAAE;QAAEC,UAAU;QAAEC;MAAe,CAAC;MACvCC,KAAK,EAAEC;IACT,CAAC,GAAGR,KAAK;IACT,MAAM;MACJS,KAAK,EAAE;QAAEC,qBAAqB;QAAEC,eAAe,EAAEC,KAAK;QAAEC;MAAS,CAAC;MAClEC,cAAc;MACdC;IACF,CAAC,GAAGd,OAAO;IAEX,IAAI,CAACS,qBAAqB,EAAE;MAC1B,OAAOX,MAAM;IACf;IAEA,MAAMiB,YAAY,GAChBH,QAAQ,IAAIA,QAAQ,CAACI,IAAI,GACrBJ,QAAQ,CAACI,IAAI,GACbL,KAAK,IAAIA,KAAK,CAACM,IAAI,KAAK,OAAO,GAC/Bf,UAAU,CAACgB,SAAS,CAACP,KAAK,CAAC,GAC3B,IAAI;IACV,IAAI,CAACI,YAAY,EAAE;MACjB,OAAOjB,MAAM;IACf;IAEA,OAAOG,MAAM,CACXH,MAAM,EACN;MACEqB,UAAU,EAAEN,cAAc,CACxB,YAAY,EACZ,CAAC;QAAEO;MAAiB,CAAC,KAAK;QACxBA,gBAAgB,CAAC,MAAM;UACrB,OAAO;YACLC,gBAAgB,EAAEC,qBAAqB,IAAI;cACzCA,qBAAqB,CAACC,MAAM,CAC1BhB,GAAG,CAACiB,QAAS,UAAS,EACtB,YACF,CAAC;YACH;UACF,CAAC;QACH,CAAC,CAAC;QACF,OAAO;UACLC,WAAW,EAAE1B,KAAK,CAAC2B,eAAe,CAC/B,wBAAuBX,YAAa,uCAAsC,EAC3E,OACF,CAAC;UACDY,IAAI,EAAE,IAAItB,cAAc,CAACD,UAAU,CAAC;UACpCwB,OAAOA,CAACC,MAAM,EAAE;YACd,OACGA,MAAM,CAACC,UAAU,IAAID,MAAM,CAACC,UAAU,CAACX,UAAU,IAAK,CAAC;UAE5D;QACF,CAAC;MACH,CAAC,EACD;QACEY,6BAA6B,EAAE;MACjC,CACF;IACF,CAAC,EACA,oCAAmCjB,IAAI,CAACE,IAAK,GAChD,CAAC;EACH,CAAC,EACD,CAAC,wBAAwB,CAC3B,CAAC;AACH,CAAC;AAAAgB,OAAA,CAAAC,OAAA,GAAAtC,sBAAA"}
@@ -4,13 +4,9 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
-
8
7
  var _debug = _interopRequireDefault(require("debug"));
9
-
10
8
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
-
12
9
  const debug = (0, _debug.default)("graphile-build-pg");
13
-
14
10
  var PgForwardRelationPlugin = function PgForwardRelationPlugin(builder, {
15
11
  subscriptions
16
12
  }) {
@@ -40,63 +36,50 @@ var PgForwardRelationPlugin = function PgForwardRelationPlugin(builder, {
40
36
  Self
41
37
  } = context;
42
38
  const table = pgIntrospectionTable || pgIntrospection;
43
-
44
39
  if (!(isPgRowType || isMutationPayload || isPgCompositeType) || !table || table.kind !== "class" || !table.namespace) {
45
40
  return fields;
46
41
  }
47
-
48
42
  if (isMutationPayload && pgIntrospection.kind === "procedure" && (pgIntrospection.returnTypeId !== table.typeId || pgIntrospection.returnsSet)) {
49
43
  return fields;
50
- } // This is a relation in which we (table) are local, and there's a foreign table
51
-
44
+ }
45
+ // This is a relation in which we (table) are local, and there's a foreign table
52
46
 
53
47
  const foreignKeyConstraints = table.constraints.filter(con => con.type === "f");
54
48
  return extend(fields, foreignKeyConstraints.reduce((memo, constraint) => {
55
49
  if (omit(constraint, "read")) {
56
50
  return memo;
57
51
  }
58
-
59
52
  const gqlTableType = pgGetGqlTypeByTypeIdAndModifier(table.type.id, null);
60
53
  const tableTypeName = gqlTableType.name;
61
-
62
54
  if (!gqlTableType) {
63
55
  debug(`Could not determine type for table with id ${constraint.classId}`);
64
56
  return memo;
65
57
  }
66
-
67
58
  const foreignTable = introspectionResultsByKind.classById[constraint.foreignClassId];
68
59
  const gqlForeignTableType = pgGetGqlTypeByTypeIdAndModifier(foreignTable.type.id, null);
69
60
  const foreignTableTypeName = gqlForeignTableType.name;
70
-
71
61
  if (!gqlForeignTableType) {
72
62
  debug(`Could not determine type for foreign table with id ${constraint.foreignClassId}`);
73
63
  return memo;
74
64
  }
75
-
76
65
  if (!foreignTable) {
77
66
  throw new Error(`Could not find the foreign table (constraint: ${constraint.name})`);
78
67
  }
79
-
80
68
  if (omit(foreignTable, "read")) {
81
69
  return memo;
82
70
  }
83
-
84
71
  const foreignSchema = foreignTable.namespace;
85
72
  const keys = constraint.keyAttributes;
86
73
  const foreignKeys = constraint.foreignKeyAttributes;
87
-
88
74
  if (!keys.every(_ => _) || !foreignKeys.every(_ => _)) {
89
75
  throw new Error("Could not find key columns!");
90
76
  }
91
-
92
77
  if (keys.some(key => omit(key, "read"))) {
93
78
  return memo;
94
79
  }
95
-
96
80
  if (foreignKeys.some(key => omit(key, "read"))) {
97
81
  return memo;
98
82
  }
99
-
100
83
  const fieldName = inflection.singleRelationByKeys(keys, foreignTable, table, constraint);
101
84
  memo = extend(memo, {
102
85
  [fieldName]: fieldWithHooks(fieldName, ({
@@ -115,15 +98,12 @@ var PgForwardRelationPlugin = function PgForwardRelationPlugin(builder, {
115
98
  asJson: true
116
99
  }, innerQueryBuilder => {
117
100
  innerQueryBuilder.parentQueryBuilder = queryBuilder;
118
-
119
101
  if (subscriptions && table.primaryKeyConstraint) {
120
102
  queryBuilder.selectIdentifiers(table);
121
103
  }
122
-
123
104
  if (subscriptions && foreignTable.primaryKeyConstraint) {
124
105
  innerQueryBuilder.selectIdentifiers(foreignTable);
125
106
  }
126
-
127
107
  keys.forEach((key, i) => {
128
108
  innerQueryBuilder.where(sql.fragment`${queryBuilder.getTableAlias()}.${sql.identifier(key.name)} = ${foreignTableAlias}.${sql.identifier(foreignKeys[i].name)}`);
129
109
  });
@@ -143,11 +123,9 @@ var PgForwardRelationPlugin = function PgForwardRelationPlugin(builder, {
143
123
  const safeAlias = getSafeAliasFromResolveInfo(resolveInfo);
144
124
  const record = data[safeAlias];
145
125
  const liveRecord = resolveInfo.rootValue && resolveInfo.rootValue.liveRecord;
146
-
147
126
  if (record && liveRecord) {
148
127
  liveRecord("pg", foreignTable, record.__identifiers);
149
128
  }
150
-
151
129
  return record;
152
130
  }
153
131
  };
@@ -162,6 +140,5 @@ var PgForwardRelationPlugin = function PgForwardRelationPlugin(builder, {
162
140
  }, {}), `Adding forward relations to '${Self.name}'`);
163
141
  }, ["PgForwardRelation"]);
164
142
  };
165
-
166
143
  exports.default = PgForwardRelationPlugin;
167
144
  //# sourceMappingURL=PgForwardRelationPlugin.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/plugins/PgForwardRelationPlugin.js"],"names":["debug","PgForwardRelationPlugin","builder","subscriptions","hook","fields","build","context","extend","getSafeAliasFromResolveInfo","getSafeAliasFromAlias","pgGetGqlTypeByTypeIdAndModifier","pgIntrospectionResultsByKind","introspectionResultsByKind","pgSql","sql","inflection","pgQueryFromResolveData","queryFromResolveData","pgOmit","omit","sqlCommentByAddingTags","describePgEntity","scope","isPgRowType","isPgCompositeType","isMutationPayload","pgIntrospection","pgIntrospectionTable","fieldWithHooks","Self","table","kind","namespace","returnTypeId","typeId","returnsSet","foreignKeyConstraints","constraints","filter","con","type","reduce","memo","constraint","gqlTableType","id","tableTypeName","name","classId","foreignTable","classById","foreignClassId","gqlForeignTableType","foreignTableTypeName","Error","foreignSchema","keys","keyAttributes","foreignKeys","foreignKeyAttributes","every","_","some","key","fieldName","singleRelationByKeys","getDataFromParsedResolveInfoFragment","addDataGenerator","parsedResolveInfoFragment","pgQuery","queryBuilder","select","resolveData","foreignTableAlias","identifier","Symbol","query","useAsterisk","asJson","innerQueryBuilder","parentQueryBuilder","primaryKeyConstraint","selectIdentifiers","forEach","i","where","fragment","getTableAlias","rootValue","alias","description","tags","forwardDescription","wrapDescription","resolve","rawData","_args","resolveContext","resolveInfo","data","safeAlias","record","liveRecord","__identifiers","pgFieldIntrospection","isPgForwardRelationField"],"mappings":"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","sourcesContent":["// @flow\nimport type { Plugin } from \"graphile-build\";\nimport debugFactory from \"debug\";\n\nconst debug = debugFactory(\"graphile-build-pg\");\n\nexport default (function PgForwardRelationPlugin(builder, { subscriptions }) {\n builder.hook(\n \"GraphQLObjectType:fields\",\n (fields, build, context) => {\n const {\n extend,\n getSafeAliasFromResolveInfo,\n getSafeAliasFromAlias,\n pgGetGqlTypeByTypeIdAndModifier,\n pgIntrospectionResultsByKind: introspectionResultsByKind,\n pgSql: sql,\n inflection,\n pgQueryFromResolveData: queryFromResolveData,\n pgOmit: omit,\n sqlCommentByAddingTags,\n describePgEntity,\n } = build;\n const {\n scope: {\n isPgRowType,\n isPgCompositeType,\n isMutationPayload,\n pgIntrospection,\n pgIntrospectionTable,\n },\n fieldWithHooks,\n Self,\n } = context;\n\n const table = pgIntrospectionTable || pgIntrospection;\n if (\n !(isPgRowType || isMutationPayload || isPgCompositeType) ||\n !table ||\n table.kind !== \"class\" ||\n !table.namespace\n ) {\n return fields;\n }\n if (\n isMutationPayload &&\n pgIntrospection.kind === \"procedure\" &&\n (pgIntrospection.returnTypeId !== table.typeId ||\n pgIntrospection.returnsSet)\n ) {\n return fields;\n }\n // This is a relation in which we (table) are local, and there's a foreign table\n\n const foreignKeyConstraints = table.constraints.filter(\n con => con.type === \"f\"\n );\n\n return extend(\n fields,\n foreignKeyConstraints.reduce((memo, constraint) => {\n if (omit(constraint, \"read\")) {\n return memo;\n }\n const gqlTableType = pgGetGqlTypeByTypeIdAndModifier(\n table.type.id,\n null\n );\n const tableTypeName = gqlTableType.name;\n if (!gqlTableType) {\n debug(\n `Could not determine type for table with id ${constraint.classId}`\n );\n return memo;\n }\n const foreignTable =\n introspectionResultsByKind.classById[constraint.foreignClassId];\n const gqlForeignTableType = pgGetGqlTypeByTypeIdAndModifier(\n foreignTable.type.id,\n null\n );\n const foreignTableTypeName = gqlForeignTableType.name;\n if (!gqlForeignTableType) {\n debug(\n `Could not determine type for foreign table with id ${constraint.foreignClassId}`\n );\n return memo;\n }\n if (!foreignTable) {\n throw new Error(\n `Could not find the foreign table (constraint: ${constraint.name})`\n );\n }\n if (omit(foreignTable, \"read\")) {\n return memo;\n }\n const foreignSchema = foreignTable.namespace;\n\n const keys = constraint.keyAttributes;\n const foreignKeys = constraint.foreignKeyAttributes;\n if (!keys.every(_ => _) || !foreignKeys.every(_ => _)) {\n throw new Error(\"Could not find key columns!\");\n }\n if (keys.some(key => omit(key, \"read\"))) {\n return memo;\n }\n if (foreignKeys.some(key => omit(key, \"read\"))) {\n return memo;\n }\n\n const fieldName = inflection.singleRelationByKeys(\n keys,\n foreignTable,\n table,\n constraint\n );\n\n memo = extend(\n memo,\n {\n [fieldName]: fieldWithHooks(\n fieldName,\n ({\n getDataFromParsedResolveInfoFragment,\n addDataGenerator,\n }) => {\n addDataGenerator(parsedResolveInfoFragment => {\n return {\n pgQuery: queryBuilder => {\n queryBuilder.select(() => {\n const resolveData =\n getDataFromParsedResolveInfoFragment(\n parsedResolveInfoFragment,\n gqlForeignTableType\n );\n const foreignTableAlias = sql.identifier(Symbol());\n const query = queryFromResolveData(\n sql.identifier(\n foreignSchema.name,\n foreignTable.name\n ),\n foreignTableAlias,\n resolveData,\n {\n useAsterisk: false, // Because it's only a single relation, no need\n asJson: true,\n },\n innerQueryBuilder => {\n innerQueryBuilder.parentQueryBuilder =\n queryBuilder;\n if (subscriptions && table.primaryKeyConstraint) {\n queryBuilder.selectIdentifiers(table);\n }\n if (\n subscriptions &&\n foreignTable.primaryKeyConstraint\n ) {\n innerQueryBuilder.selectIdentifiers(\n foreignTable\n );\n }\n keys.forEach((key, i) => {\n innerQueryBuilder.where(\n sql.fragment`${queryBuilder.getTableAlias()}.${sql.identifier(\n key.name\n )} = ${foreignTableAlias}.${sql.identifier(\n foreignKeys[i].name\n )}`\n );\n });\n },\n queryBuilder.context,\n queryBuilder.rootValue\n );\n return sql.fragment`(${query})`;\n }, getSafeAliasFromAlias(parsedResolveInfoFragment.alias));\n },\n };\n });\n return {\n description:\n constraint.tags.forwardDescription ||\n build.wrapDescription(\n `Reads a single \\`${foreignTableTypeName}\\` that is related to this \\`${tableTypeName}\\`.`,\n \"field\"\n ),\n type: gqlForeignTableType, // Nullable since RLS may forbid fetching\n resolve: (rawData, _args, resolveContext, resolveInfo) => {\n const data = isMutationPayload ? rawData.data : rawData;\n if (!data) return null;\n const safeAlias =\n getSafeAliasFromResolveInfo(resolveInfo);\n const record = data[safeAlias];\n const liveRecord =\n resolveInfo.rootValue &&\n resolveInfo.rootValue.liveRecord;\n if (record && liveRecord) {\n liveRecord(\"pg\", foreignTable, record.__identifiers);\n }\n return record;\n },\n };\n },\n {\n pgFieldIntrospection: constraint,\n isPgForwardRelationField: true,\n }\n ),\n },\n `Forward relation for ${describePgEntity(\n constraint\n )}. To rename this relation with a 'Smart Comment':\\n\\n ${sqlCommentByAddingTags(\n constraint,\n {\n fieldName: \"newNameHere\",\n }\n )}`\n );\n return memo;\n }, {}),\n `Adding forward relations to '${Self.name}'`\n );\n },\n [\"PgForwardRelation\"]\n );\n}: Plugin);\n"],"file":"PgForwardRelationPlugin.js"}
1
+ {"version":3,"file":"PgForwardRelationPlugin.js","names":["_debug","_interopRequireDefault","require","obj","__esModule","default","debug","debugFactory","PgForwardRelationPlugin","builder","subscriptions","hook","fields","build","context","extend","getSafeAliasFromResolveInfo","getSafeAliasFromAlias","pgGetGqlTypeByTypeIdAndModifier","pgIntrospectionResultsByKind","introspectionResultsByKind","pgSql","sql","inflection","pgQueryFromResolveData","queryFromResolveData","pgOmit","omit","sqlCommentByAddingTags","describePgEntity","scope","isPgRowType","isPgCompositeType","isMutationPayload","pgIntrospection","pgIntrospectionTable","fieldWithHooks","Self","table","kind","namespace","returnTypeId","typeId","returnsSet","foreignKeyConstraints","constraints","filter","con","type","reduce","memo","constraint","gqlTableType","id","tableTypeName","name","classId","foreignTable","classById","foreignClassId","gqlForeignTableType","foreignTableTypeName","Error","foreignSchema","keys","keyAttributes","foreignKeys","foreignKeyAttributes","every","_","some","key","fieldName","singleRelationByKeys","getDataFromParsedResolveInfoFragment","addDataGenerator","parsedResolveInfoFragment","pgQuery","queryBuilder","select","resolveData","foreignTableAlias","identifier","Symbol","query","useAsterisk","asJson","innerQueryBuilder","parentQueryBuilder","primaryKeyConstraint","selectIdentifiers","forEach","i","where","fragment","getTableAlias","rootValue","alias","description","tags","forwardDescription","wrapDescription","resolve","rawData","_args","resolveContext","resolveInfo","data","safeAlias","record","liveRecord","__identifiers","pgFieldIntrospection","isPgForwardRelationField","exports"],"sources":["../../src/plugins/PgForwardRelationPlugin.js"],"sourcesContent":["// @flow\nimport type { Plugin } from \"graphile-build\";\nimport debugFactory from \"debug\";\n\nconst debug = debugFactory(\"graphile-build-pg\");\n\nexport default (function PgForwardRelationPlugin(builder, { subscriptions }) {\n builder.hook(\n \"GraphQLObjectType:fields\",\n (fields, build, context) => {\n const {\n extend,\n getSafeAliasFromResolveInfo,\n getSafeAliasFromAlias,\n pgGetGqlTypeByTypeIdAndModifier,\n pgIntrospectionResultsByKind: introspectionResultsByKind,\n pgSql: sql,\n inflection,\n pgQueryFromResolveData: queryFromResolveData,\n pgOmit: omit,\n sqlCommentByAddingTags,\n describePgEntity,\n } = build;\n const {\n scope: {\n isPgRowType,\n isPgCompositeType,\n isMutationPayload,\n pgIntrospection,\n pgIntrospectionTable,\n },\n fieldWithHooks,\n Self,\n } = context;\n\n const table = pgIntrospectionTable || pgIntrospection;\n if (\n !(isPgRowType || isMutationPayload || isPgCompositeType) ||\n !table ||\n table.kind !== \"class\" ||\n !table.namespace\n ) {\n return fields;\n }\n if (\n isMutationPayload &&\n pgIntrospection.kind === \"procedure\" &&\n (pgIntrospection.returnTypeId !== table.typeId ||\n pgIntrospection.returnsSet)\n ) {\n return fields;\n }\n // This is a relation in which we (table) are local, and there's a foreign table\n\n const foreignKeyConstraints = table.constraints.filter(\n con => con.type === \"f\"\n );\n\n return extend(\n fields,\n foreignKeyConstraints.reduce((memo, constraint) => {\n if (omit(constraint, \"read\")) {\n return memo;\n }\n const gqlTableType = pgGetGqlTypeByTypeIdAndModifier(\n table.type.id,\n null\n );\n const tableTypeName = gqlTableType.name;\n if (!gqlTableType) {\n debug(\n `Could not determine type for table with id ${constraint.classId}`\n );\n return memo;\n }\n const foreignTable =\n introspectionResultsByKind.classById[constraint.foreignClassId];\n const gqlForeignTableType = pgGetGqlTypeByTypeIdAndModifier(\n foreignTable.type.id,\n null\n );\n const foreignTableTypeName = gqlForeignTableType.name;\n if (!gqlForeignTableType) {\n debug(\n `Could not determine type for foreign table with id ${constraint.foreignClassId}`\n );\n return memo;\n }\n if (!foreignTable) {\n throw new Error(\n `Could not find the foreign table (constraint: ${constraint.name})`\n );\n }\n if (omit(foreignTable, \"read\")) {\n return memo;\n }\n const foreignSchema = foreignTable.namespace;\n\n const keys = constraint.keyAttributes;\n const foreignKeys = constraint.foreignKeyAttributes;\n if (!keys.every(_ => _) || !foreignKeys.every(_ => _)) {\n throw new Error(\"Could not find key columns!\");\n }\n if (keys.some(key => omit(key, \"read\"))) {\n return memo;\n }\n if (foreignKeys.some(key => omit(key, \"read\"))) {\n return memo;\n }\n\n const fieldName = inflection.singleRelationByKeys(\n keys,\n foreignTable,\n table,\n constraint\n );\n\n memo = extend(\n memo,\n {\n [fieldName]: fieldWithHooks(\n fieldName,\n ({\n getDataFromParsedResolveInfoFragment,\n addDataGenerator,\n }) => {\n addDataGenerator(parsedResolveInfoFragment => {\n return {\n pgQuery: queryBuilder => {\n queryBuilder.select(() => {\n const resolveData =\n getDataFromParsedResolveInfoFragment(\n parsedResolveInfoFragment,\n gqlForeignTableType\n );\n const foreignTableAlias = sql.identifier(Symbol());\n const query = queryFromResolveData(\n sql.identifier(\n foreignSchema.name,\n foreignTable.name\n ),\n foreignTableAlias,\n resolveData,\n {\n useAsterisk: false, // Because it's only a single relation, no need\n asJson: true,\n },\n innerQueryBuilder => {\n innerQueryBuilder.parentQueryBuilder =\n queryBuilder;\n if (subscriptions && table.primaryKeyConstraint) {\n queryBuilder.selectIdentifiers(table);\n }\n if (\n subscriptions &&\n foreignTable.primaryKeyConstraint\n ) {\n innerQueryBuilder.selectIdentifiers(\n foreignTable\n );\n }\n keys.forEach((key, i) => {\n innerQueryBuilder.where(\n sql.fragment`${queryBuilder.getTableAlias()}.${sql.identifier(\n key.name\n )} = ${foreignTableAlias}.${sql.identifier(\n foreignKeys[i].name\n )}`\n );\n });\n },\n queryBuilder.context,\n queryBuilder.rootValue\n );\n return sql.fragment`(${query})`;\n }, getSafeAliasFromAlias(parsedResolveInfoFragment.alias));\n },\n };\n });\n return {\n description:\n constraint.tags.forwardDescription ||\n build.wrapDescription(\n `Reads a single \\`${foreignTableTypeName}\\` that is related to this \\`${tableTypeName}\\`.`,\n \"field\"\n ),\n type: gqlForeignTableType, // Nullable since RLS may forbid fetching\n resolve: (rawData, _args, resolveContext, resolveInfo) => {\n const data = isMutationPayload ? rawData.data : rawData;\n if (!data) return null;\n const safeAlias =\n getSafeAliasFromResolveInfo(resolveInfo);\n const record = data[safeAlias];\n const liveRecord =\n resolveInfo.rootValue &&\n resolveInfo.rootValue.liveRecord;\n if (record && liveRecord) {\n liveRecord(\"pg\", foreignTable, record.__identifiers);\n }\n return record;\n },\n };\n },\n {\n pgFieldIntrospection: constraint,\n isPgForwardRelationField: true,\n }\n ),\n },\n `Forward relation for ${describePgEntity(\n constraint\n )}. To rename this relation with a 'Smart Comment':\\n\\n ${sqlCommentByAddingTags(\n constraint,\n {\n fieldName: \"newNameHere\",\n }\n )}`\n );\n return memo;\n }, {}),\n `Adding forward relations to '${Self.name}'`\n );\n },\n [\"PgForwardRelation\"]\n );\n}: Plugin);\n"],"mappings":"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"}