graphile-build-pg 4.12.0 → 4.12.3

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 (89) hide show
  1. package/README.md +10 -3
  2. package/node8plus/GraphQLJSON.js.map +1 -1
  3. package/node8plus/QueryBuilder.js +3 -4
  4. package/node8plus/QueryBuilder.js.map +1 -1
  5. package/node8plus/index.d.ts +2 -6
  6. package/node8plus/index.js +84 -83
  7. package/node8plus/index.js.map +1 -1
  8. package/node8plus/inflections.js +1 -1
  9. package/node8plus/inflections.js.flow +1 -3
  10. package/node8plus/inflections.js.map +1 -1
  11. package/node8plus/omit.js +2 -2
  12. package/node8plus/omit.js.flow +1 -1
  13. package/node8plus/omit.js.map +1 -1
  14. package/node8plus/plugins/PgAllRows.js.flow +2 -3
  15. package/node8plus/plugins/PgAllRows.js.map +1 -1
  16. package/node8plus/plugins/PgBackwardRelationPlugin.js +2 -2
  17. package/node8plus/plugins/PgBackwardRelationPlugin.js.flow +22 -18
  18. package/node8plus/plugins/PgBackwardRelationPlugin.js.map +1 -1
  19. package/node8plus/plugins/PgBasicsPlugin.js +3 -3
  20. package/node8plus/plugins/PgBasicsPlugin.js.flow +120 -120
  21. package/node8plus/plugins/PgBasicsPlugin.js.map +1 -1
  22. package/node8plus/plugins/PgColumnsPlugin.js +1 -1
  23. package/node8plus/plugins/PgColumnsPlugin.js.flow +5 -2
  24. package/node8plus/plugins/PgColumnsPlugin.js.map +1 -1
  25. package/node8plus/plugins/PgComputedColumnsPlugin.js +4 -4
  26. package/node8plus/plugins/PgComputedColumnsPlugin.js.flow +1 -1
  27. package/node8plus/plugins/PgComputedColumnsPlugin.js.map +1 -1
  28. package/node8plus/plugins/PgConnectionArgCondition.js.flow +4 -4
  29. package/node8plus/plugins/PgConnectionArgCondition.js.map +1 -1
  30. package/node8plus/plugins/PgConnectionArgOrderBy.js +1 -1
  31. package/node8plus/plugins/PgConnectionArgOrderBy.js.flow +1 -1
  32. package/node8plus/plugins/PgConnectionArgOrderBy.js.map +1 -1
  33. package/node8plus/plugins/PgConnectionArgOrderByDefaultValue.js +2 -1
  34. package/node8plus/plugins/PgConnectionArgOrderByDefaultValue.js.flow +2 -1
  35. package/node8plus/plugins/PgConnectionArgOrderByDefaultValue.js.map +1 -1
  36. package/node8plus/plugins/PgForwardRelationPlugin.js.flow +9 -8
  37. package/node8plus/plugins/PgForwardRelationPlugin.js.map +1 -1
  38. package/node8plus/plugins/PgIntrospectionPlugin.js +5 -5
  39. package/node8plus/plugins/PgIntrospectionPlugin.js.flow +13 -12
  40. package/node8plus/plugins/PgIntrospectionPlugin.js.map +1 -1
  41. package/node8plus/plugins/PgJWTPlugin.js.flow +2 -3
  42. package/node8plus/plugins/PgJWTPlugin.js.map +1 -1
  43. package/node8plus/plugins/PgMutationCreatePlugin.js.flow +2 -3
  44. package/node8plus/plugins/PgMutationCreatePlugin.js.map +1 -1
  45. package/node8plus/plugins/PgMutationPayloadEdgePlugin.js +2 -1
  46. package/node8plus/plugins/PgMutationPayloadEdgePlugin.js.flow +2 -1
  47. package/node8plus/plugins/PgMutationPayloadEdgePlugin.js.map +1 -1
  48. package/node8plus/plugins/PgMutationUpdateDeletePlugin.js +4 -4
  49. package/node8plus/plugins/PgMutationUpdateDeletePlugin.js.flow +14 -19
  50. package/node8plus/plugins/PgMutationUpdateDeletePlugin.js.map +1 -1
  51. package/node8plus/plugins/PgOrderByPrimaryKeyPlugin.js +4 -3
  52. package/node8plus/plugins/PgOrderByPrimaryKeyPlugin.js.flow +3 -3
  53. package/node8plus/plugins/PgOrderByPrimaryKeyPlugin.js.map +1 -1
  54. package/node8plus/plugins/PgOrderComputedColumnsPlugin.js.flow +3 -5
  55. package/node8plus/plugins/PgOrderComputedColumnsPlugin.js.map +1 -1
  56. package/node8plus/plugins/PgQueryProceduresPlugin.js +2 -2
  57. package/node8plus/plugins/PgQueryProceduresPlugin.js.map +1 -1
  58. package/node8plus/plugins/PgRecordFunctionConnectionPlugin.js.flow +4 -6
  59. package/node8plus/plugins/PgRecordFunctionConnectionPlugin.js.map +1 -1
  60. package/node8plus/plugins/PgRecordReturnTypesPlugin.js +3 -3
  61. package/node8plus/plugins/PgRecordReturnTypesPlugin.js.flow +5 -5
  62. package/node8plus/plugins/PgRecordReturnTypesPlugin.js.map +1 -1
  63. package/node8plus/plugins/PgRowByUniqueConstraint.js.flow +2 -3
  64. package/node8plus/plugins/PgRowByUniqueConstraint.js.map +1 -1
  65. package/node8plus/plugins/PgRowNode.js.flow +9 -11
  66. package/node8plus/plugins/PgRowNode.js.map +1 -1
  67. package/node8plus/plugins/PgTablesPlugin.js +13 -13
  68. package/node8plus/plugins/PgTablesPlugin.js.flow +8 -13
  69. package/node8plus/plugins/PgTablesPlugin.js.map +1 -1
  70. package/node8plus/plugins/PgTypesPlugin.js +7 -7
  71. package/node8plus/plugins/PgTypesPlugin.js.flow +28 -34
  72. package/node8plus/plugins/PgTypesPlugin.js.map +1 -1
  73. package/node8plus/plugins/debugSql.js +1 -1
  74. package/node8plus/plugins/introspectionQuery.js.map +1 -1
  75. package/node8plus/plugins/makeProcField.js +5 -5
  76. package/node8plus/plugins/makeProcField.js.flow +2 -6
  77. package/node8plus/plugins/makeProcField.js.map +1 -1
  78. package/node8plus/plugins/pgField.js.flow +2 -4
  79. package/node8plus/plugins/pgField.js.map +1 -1
  80. package/node8plus/plugins/viaTemporaryTable.js +2 -2
  81. package/node8plus/plugins/viaTemporaryTable.js.map +1 -1
  82. package/node8plus/queryFromResolveDataFactory.js +3 -4
  83. package/node8plus/queryFromResolveDataFactory.js.flow +474 -464
  84. package/node8plus/queryFromResolveDataFactory.js.map +1 -1
  85. package/node8plus/utils.js +1 -1
  86. package/node8plus/utils.js.flow +1 -1
  87. package/node8plus/utils.js.map +1 -1
  88. package/node8plus/withPgClient.js +1 -1
  89. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/plugins/PgOrderComputedColumnsPlugin.js"],"names":["PgOrderComputedColumnsPlugin","builder","hook","values","build","context","extend","inflection","pgOmit","omit","describePgEntity","pgIntrospectionResultsByKind","introspectionResultsByKind","pgSql","sql","scope","isPgRowSortEnum","pgIntrospection","table","kind","compatibleComputedColumns","procedure","reduce","memo","proc","tags","sortable","computedColumnDetails","pseudoColumnName","nonOptionalArgumentsCount","inputArgsCount","argDefaultsNum","returnsSet","returnType","typeById","returnTypeId","isPgArray","returnTypeTable","classById","classId","isRecordLike","id","isVoid","String","push","ascFieldName","orderByComputedColumnEnum","descFieldName","unique","isUnique","functionCall","queryBuilder","fragment","identifier","namespaceName","name","getTableAlias","value","alias","toLowerCase","specs"],"mappings":"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","sourcesContent":["// @flow\nimport type { Plugin } from \"graphile-build\";\nimport { getComputedColumnDetails } from \"./PgComputedColumnsPlugin\";\n\nexport default (function PgOrderComputedColumnsPlugin(builder) {\n builder.hook(\n \"GraphQLEnumType:values\",\n (values, build, context) => {\n const {\n extend,\n inflection,\n pgOmit: omit,\n describePgEntity,\n pgIntrospectionResultsByKind: introspectionResultsByKind,\n pgSql: sql,\n } = build;\n const {\n scope: { isPgRowSortEnum, pgIntrospection: table },\n } = context;\n if (!isPgRowSortEnum || !table || table.kind !== \"class\") {\n return values;\n }\n\n const compatibleComputedColumns = introspectionResultsByKind.procedure.reduce(\n (memo, proc) => {\n /* ALSO SEE PgConditionComputedColumnPlugin */\n // Must be marked @sortable\n if (!proc.tags.sortable) return memo;\n\n // Must not be omitted\n if (omit(proc, \"execute\")) return memo;\n\n // Must be a computed column\n const computedColumnDetails = getComputedColumnDetails(\n build,\n table,\n proc\n );\n if (!computedColumnDetails) return memo;\n const { pseudoColumnName } = computedColumnDetails;\n\n // Must have only one required argument\n const nonOptionalArgumentsCount =\n proc.inputArgsCount - proc.argDefaultsNum;\n if (nonOptionalArgumentsCount > 1) {\n return memo;\n }\n\n // Must return a scalar\n if (proc.returnsSet) return memo;\n const returnType =\n introspectionResultsByKind.typeById[proc.returnTypeId];\n if (returnType.isPgArray) return memo;\n const returnTypeTable =\n introspectionResultsByKind.classById[returnType.classId];\n if (returnTypeTable) return memo;\n const isRecordLike = returnType.id === \"2249\";\n if (isRecordLike) return memo;\n const isVoid = String(returnType.id) === \"2278\";\n if (isVoid) return memo;\n\n // Looks good\n memo.push({ proc, pseudoColumnName });\n return memo;\n },\n []\n );\n return extend(\n values,\n compatibleComputedColumns.reduce((memo, { proc, pseudoColumnName }) => {\n const ascFieldName = inflection.orderByComputedColumnEnum(\n pseudoColumnName,\n proc,\n table,\n true\n );\n const descFieldName = inflection.orderByComputedColumnEnum(\n pseudoColumnName,\n proc,\n table,\n false\n );\n\n const unique = !!proc.tags.isUnique;\n\n const functionCall = ({ queryBuilder }) =>\n sql.fragment`(${sql.identifier(\n proc.namespaceName,\n proc.name\n )}(${queryBuilder.getTableAlias()}))`;\n\n memo = extend(\n memo,\n {\n [ascFieldName]: {\n value: {\n alias: ascFieldName.toLowerCase(),\n specs: [[functionCall, true]],\n unique,\n },\n },\n },\n `Adding ascending orderBy enum value for ${describePgEntity(\n proc\n )}. You can rename this field by removing the '@sortable' smart comment from the function.`\n );\n memo = extend(\n memo,\n {\n [descFieldName]: {\n value: {\n alias: descFieldName.toLowerCase(),\n specs: [[functionCall, false]],\n unique,\n },\n },\n },\n `Adding descending orderBy enum value for ${describePgEntity(\n proc\n )}. You can rename this field by removing the '@sortable' smart comment from the function.`\n );\n return memo;\n }, {}),\n `Adding order values from table '${table.name}'`\n );\n },\n [\"PgOrderComputedColumns\"]\n );\n}: Plugin);\n"],"file":"PgOrderComputedColumnsPlugin.js"}
1
+ {"version":3,"sources":["../../src/plugins/PgOrderComputedColumnsPlugin.js"],"names":["PgOrderComputedColumnsPlugin","builder","hook","values","build","context","extend","inflection","pgOmit","omit","describePgEntity","pgIntrospectionResultsByKind","introspectionResultsByKind","pgSql","sql","scope","isPgRowSortEnum","pgIntrospection","table","kind","compatibleComputedColumns","procedure","reduce","memo","proc","tags","sortable","computedColumnDetails","pseudoColumnName","nonOptionalArgumentsCount","inputArgsCount","argDefaultsNum","returnsSet","returnType","typeById","returnTypeId","isPgArray","returnTypeTable","classById","classId","isRecordLike","id","isVoid","String","push","ascFieldName","orderByComputedColumnEnum","descFieldName","unique","isUnique","functionCall","queryBuilder","fragment","identifier","namespaceName","name","getTableAlias","value","alias","toLowerCase","specs"],"mappings":"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","sourcesContent":["// @flow\nimport type { Plugin } from \"graphile-build\";\nimport { getComputedColumnDetails } from \"./PgComputedColumnsPlugin\";\n\nexport default (function PgOrderComputedColumnsPlugin(builder) {\n builder.hook(\n \"GraphQLEnumType:values\",\n (values, build, context) => {\n const {\n extend,\n inflection,\n pgOmit: omit,\n describePgEntity,\n pgIntrospectionResultsByKind: introspectionResultsByKind,\n pgSql: sql,\n } = build;\n const {\n scope: { isPgRowSortEnum, pgIntrospection: table },\n } = context;\n if (!isPgRowSortEnum || !table || table.kind !== \"class\") {\n return values;\n }\n\n const compatibleComputedColumns =\n introspectionResultsByKind.procedure.reduce((memo, proc) => {\n /* ALSO SEE PgConditionComputedColumnPlugin */\n // Must be marked @sortable\n if (!proc.tags.sortable) return memo;\n\n // Must not be omitted\n if (omit(proc, \"execute\")) return memo;\n\n // Must be a computed column\n const computedColumnDetails = getComputedColumnDetails(\n build,\n table,\n proc\n );\n if (!computedColumnDetails) return memo;\n const { pseudoColumnName } = computedColumnDetails;\n\n // Must have only one required argument\n const nonOptionalArgumentsCount =\n proc.inputArgsCount - proc.argDefaultsNum;\n if (nonOptionalArgumentsCount > 1) {\n return memo;\n }\n\n // Must return a scalar\n if (proc.returnsSet) return memo;\n const returnType =\n introspectionResultsByKind.typeById[proc.returnTypeId];\n if (returnType.isPgArray) return memo;\n const returnTypeTable =\n introspectionResultsByKind.classById[returnType.classId];\n if (returnTypeTable) return memo;\n const isRecordLike = returnType.id === \"2249\";\n if (isRecordLike) return memo;\n const isVoid = String(returnType.id) === \"2278\";\n if (isVoid) return memo;\n\n // Looks good\n memo.push({ proc, pseudoColumnName });\n return memo;\n }, []);\n return extend(\n values,\n compatibleComputedColumns.reduce((memo, { proc, pseudoColumnName }) => {\n const ascFieldName = inflection.orderByComputedColumnEnum(\n pseudoColumnName,\n proc,\n table,\n true\n );\n const descFieldName = inflection.orderByComputedColumnEnum(\n pseudoColumnName,\n proc,\n table,\n false\n );\n\n const unique = !!proc.tags.isUnique;\n\n const functionCall = ({ queryBuilder }) =>\n sql.fragment`(${sql.identifier(\n proc.namespaceName,\n proc.name\n )}(${queryBuilder.getTableAlias()}))`;\n\n memo = extend(\n memo,\n {\n [ascFieldName]: {\n value: {\n alias: ascFieldName.toLowerCase(),\n specs: [[functionCall, true]],\n unique,\n },\n },\n },\n `Adding ascending orderBy enum value for ${describePgEntity(\n proc\n )}. You can rename this field by removing the '@sortable' smart comment from the function.`\n );\n memo = extend(\n memo,\n {\n [descFieldName]: {\n value: {\n alias: descFieldName.toLowerCase(),\n specs: [[functionCall, false]],\n unique,\n },\n },\n },\n `Adding descending orderBy enum value for ${describePgEntity(\n proc\n )}. You can rename this field by removing the '@sortable' smart comment from the function.`\n );\n return memo;\n }, {}),\n `Adding order values from table '${table.name}'`\n );\n },\n [\"PgOrderComputedColumns\"]\n );\n}: Plugin);\n"],"file":"PgOrderComputedColumnsPlugin.js"}
@@ -41,8 +41,8 @@ var PgQueryProceduresPlugin = function PgQueryProceduresPlugin(builder, {
41
41
  proc.argModes[idx] === "i" || // this arg is `in`
42
42
  proc.argModes[idx] === "b" // this arg is `inout`
43
43
  ) {
44
- prev.push(introspectionResultsByKind.typeById[typeId]);
45
- }
44
+ prev.push(introspectionResultsByKind.typeById[typeId]);
45
+ }
46
46
 
47
47
  return prev;
48
48
  }, []);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/plugins/PgQueryProceduresPlugin.js"],"names":["PgQueryProceduresPlugin","builder","pgSimpleCollections","disableIssue641Fix","hook","fields","build","context","extend","inflection","pgIntrospectionResultsByKind","introspectionResultsByKind","pgMakeProcField","makeProcField","pgOmit","omit","describePgEntity","sqlCommentByAddingTags","swallowError","scope","isRootQuery","fieldWithHooks","procedure","reduce","memo","proc","isStable","namespace","argTypes","argTypeIds","prev","typeId","idx","argModes","length","push","typeById","some","type","class","isSelectable","firstArgType","namespaceId","name","startsWith","makeField","forceList","fieldName","functionQueryNameList","functionQueryName","e","simpleCollections","tags","hasConnections","hasSimpleCollections","returnsSet"],"mappings":"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","sourcesContent":["// @flow\nimport type { Plugin } from \"graphile-build\";\n\nexport default (function PgQueryProceduresPlugin(\n builder,\n { pgSimpleCollections, disableIssue641Fix = false }\n) {\n builder.hook(\n \"GraphQLObjectType:fields\",\n (fields, build, context) => {\n const {\n extend,\n inflection,\n pgIntrospectionResultsByKind: introspectionResultsByKind,\n pgMakeProcField: makeProcField,\n pgOmit: omit,\n describePgEntity,\n sqlCommentByAddingTags,\n swallowError,\n } = build;\n const {\n scope: { isRootQuery },\n fieldWithHooks,\n } = context;\n\n if (!isRootQuery) {\n return fields;\n }\n\n return extend(\n fields,\n introspectionResultsByKind.procedure.reduce((memo, proc) => {\n // PERFORMANCE: These used to be .filter(...) calls\n if (!proc.isStable) return memo;\n if (!proc.namespace) return memo;\n if (omit(proc, \"execute\")) return memo;\n\n const argTypes = proc.argTypeIds.reduce((prev, typeId, idx) => {\n if (\n proc.argModes.length === 0 || // all args are `in`\n proc.argModes[idx] === \"i\" || // this arg is `in`\n proc.argModes[idx] === \"b\" // this arg is `inout`\n ) {\n prev.push(introspectionResultsByKind.typeById[typeId]);\n }\n return prev;\n }, []);\n if (\n argTypes.some(\n type => type.type === \"c\" && type.class && type.class.isSelectable\n )\n ) {\n // Selects a table, ignore!\n return memo;\n }\n const firstArgType = argTypes[0];\n if (\n firstArgType &&\n firstArgType.type === \"c\" &&\n firstArgType.class &&\n firstArgType.namespaceId === proc.namespaceId &&\n proc.name.startsWith(`${firstArgType.name}_`)\n ) {\n // It's a computed field, skip\n return memo;\n }\n\n function makeField(forceList) {\n const fieldName = forceList\n ? inflection.functionQueryNameList(proc)\n : inflection.functionQueryName(proc);\n try {\n memo = extend(\n memo,\n {\n [fieldName]: makeProcField(fieldName, proc, build, {\n fieldWithHooks,\n forceList,\n isRootQuery: !disableIssue641Fix,\n }),\n },\n `Adding query field for ${describePgEntity(\n proc\n )}. You can rename this field with a 'Smart Comment':\\n\\n ${sqlCommentByAddingTags(\n proc,\n {\n name: \"newNameHere\",\n }\n )}`\n );\n } catch (e) {\n swallowError(e);\n }\n }\n const simpleCollections =\n proc.tags.simpleCollections || pgSimpleCollections;\n const hasConnections = simpleCollections !== \"only\";\n const hasSimpleCollections =\n simpleCollections === \"only\" || simpleCollections === \"both\";\n if (!proc.returnsSet || hasConnections) {\n makeField(false);\n }\n if (proc.returnsSet && hasSimpleCollections) {\n makeField(true);\n }\n return memo;\n }, {}),\n `Adding query procedures to root Query type`\n );\n },\n [\"PgQueryProcedures\"]\n );\n}: Plugin);\n"],"file":"PgQueryProceduresPlugin.js"}
1
+ {"version":3,"sources":["../../src/plugins/PgQueryProceduresPlugin.js"],"names":["PgQueryProceduresPlugin","builder","pgSimpleCollections","disableIssue641Fix","hook","fields","build","context","extend","inflection","pgIntrospectionResultsByKind","introspectionResultsByKind","pgMakeProcField","makeProcField","pgOmit","omit","describePgEntity","sqlCommentByAddingTags","swallowError","scope","isRootQuery","fieldWithHooks","procedure","reduce","memo","proc","isStable","namespace","argTypes","argTypeIds","prev","typeId","idx","argModes","length","push","typeById","some","type","class","isSelectable","firstArgType","namespaceId","name","startsWith","makeField","forceList","fieldName","functionQueryNameList","functionQueryName","e","simpleCollections","tags","hasConnections","hasSimpleCollections","returnsSet"],"mappings":"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","sourcesContent":["// @flow\nimport type { Plugin } from \"graphile-build\";\n\nexport default (function PgQueryProceduresPlugin(\n builder,\n { pgSimpleCollections, disableIssue641Fix = false }\n) {\n builder.hook(\n \"GraphQLObjectType:fields\",\n (fields, build, context) => {\n const {\n extend,\n inflection,\n pgIntrospectionResultsByKind: introspectionResultsByKind,\n pgMakeProcField: makeProcField,\n pgOmit: omit,\n describePgEntity,\n sqlCommentByAddingTags,\n swallowError,\n } = build;\n const {\n scope: { isRootQuery },\n fieldWithHooks,\n } = context;\n\n if (!isRootQuery) {\n return fields;\n }\n\n return extend(\n fields,\n introspectionResultsByKind.procedure.reduce((memo, proc) => {\n // PERFORMANCE: These used to be .filter(...) calls\n if (!proc.isStable) return memo;\n if (!proc.namespace) return memo;\n if (omit(proc, \"execute\")) return memo;\n\n const argTypes = proc.argTypeIds.reduce((prev, typeId, idx) => {\n if (\n proc.argModes.length === 0 || // all args are `in`\n proc.argModes[idx] === \"i\" || // this arg is `in`\n proc.argModes[idx] === \"b\" // this arg is `inout`\n ) {\n prev.push(introspectionResultsByKind.typeById[typeId]);\n }\n return prev;\n }, []);\n if (\n argTypes.some(\n type => type.type === \"c\" && type.class && type.class.isSelectable\n )\n ) {\n // Selects a table, ignore!\n return memo;\n }\n const firstArgType = argTypes[0];\n if (\n firstArgType &&\n firstArgType.type === \"c\" &&\n firstArgType.class &&\n firstArgType.namespaceId === proc.namespaceId &&\n proc.name.startsWith(`${firstArgType.name}_`)\n ) {\n // It's a computed field, skip\n return memo;\n }\n\n function makeField(forceList) {\n const fieldName = forceList\n ? inflection.functionQueryNameList(proc)\n : inflection.functionQueryName(proc);\n try {\n memo = extend(\n memo,\n {\n [fieldName]: makeProcField(fieldName, proc, build, {\n fieldWithHooks,\n forceList,\n isRootQuery: !disableIssue641Fix,\n }),\n },\n `Adding query field for ${describePgEntity(\n proc\n )}. You can rename this field with a 'Smart Comment':\\n\\n ${sqlCommentByAddingTags(\n proc,\n {\n name: \"newNameHere\",\n }\n )}`\n );\n } catch (e) {\n swallowError(e);\n }\n }\n const simpleCollections =\n proc.tags.simpleCollections || pgSimpleCollections;\n const hasConnections = simpleCollections !== \"only\";\n const hasSimpleCollections =\n simpleCollections === \"only\" || simpleCollections === \"both\";\n if (!proc.returnsSet || hasConnections) {\n makeField(false);\n }\n if (proc.returnsSet && hasSimpleCollections) {\n makeField(true);\n }\n return memo;\n }, {}),\n `Adding query procedures to root Query type`\n );\n },\n [\"PgQueryProcedures\"]\n );\n}: Plugin);\n"],"file":"PgQueryProceduresPlugin.js"}
@@ -96,9 +96,8 @@ export default (function PgRecordFunctionConnectionPlugin(
96
96
  NodeType
97
97
  ),
98
98
  resolve(data, _args, _context, resolveInfo) {
99
- const safeAlias = getSafeAliasFromResolveInfo(
100
- resolveInfo
101
- );
99
+ const safeAlias =
100
+ getSafeAliasFromResolveInfo(resolveInfo);
102
101
  return data[safeAlias];
103
102
  },
104
103
  },
@@ -162,9 +161,8 @@ export default (function PgRecordFunctionConnectionPlugin(
162
161
  new GraphQLList(new GraphQLNonNull(EdgeType))
163
162
  ),
164
163
  resolve(data, _args, _context, resolveInfo) {
165
- const safeAlias = getSafeAliasFromResolveInfo(
166
- resolveInfo
167
- );
164
+ const safeAlias =
165
+ getSafeAliasFromResolveInfo(resolveInfo);
168
166
  return data.data.map(entry => ({
169
167
  __cursor: entry.__cursor,
170
168
  ...entry[safeAlias],
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/plugins/PgRecordFunctionConnectionPlugin.js"],"names":["base64","str","Buffer","from","String","toString","PgRecordFunctionConnectionPlugin","builder","pgForbidSetofFunctionsToReturnNull","hook","_","build","newWithHooks","getSafeAliasFromResolveInfo","pgIntrospectionResultsByKind","introspectionResultsByKind","getTypeByName","graphql","GraphQLObjectType","GraphQLNonNull","GraphQLList","inflection","pgOmit","omit","describePgEntity","sqlCommentByAddingTags","pgField","nullableIf","condition","Type","Cursor","procedure","forEach","proc","returnsSet","namespace","returnTypeId","NodeType","recordFunctionReturnType","Error","name","EdgeType","recordFunctionEdge","description","wrapDescription","fields","fieldWithHooks","cursor","addDataGenerator","usesCursor","type","resolve","data","JSON","stringify","__cursor","isCursorField","node","_args","_context","resolveInfo","safeAlias","__origin","isEdgeType","nodeType","pgIntrospection","recordFunctionConnection","nodes","map","entry","edges","hoistCursor","isConnectionType","isPgRowConnectionType","edgeType"],"mappings":"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","sourcesContent":["// @flow\nimport type { Plugin } from \"graphile-build\";\n\nconst base64 = str => Buffer.from(String(str)).toString(\"base64\");\n\nexport default (function PgRecordFunctionConnectionPlugin(\n builder,\n { pgForbidSetofFunctionsToReturnNull = false }\n) {\n builder.hook(\n \"init\",\n (_, build) => {\n const {\n newWithHooks,\n getSafeAliasFromResolveInfo,\n pgIntrospectionResultsByKind: introspectionResultsByKind,\n getTypeByName,\n graphql: { GraphQLObjectType, GraphQLNonNull, GraphQLList },\n inflection,\n pgOmit: omit,\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.procedure.forEach(proc => {\n // PERFORMANCE: These used to be .filter(...) calls\n if (!proc.returnsSet) return;\n if (!proc.namespace) return;\n if (omit(proc, \"execute\")) return;\n\n if (proc.returnTypeId !== \"2249\") {\n // Does not return a record type; defer handling to\n // PgTablesPlugin and PgScalarFunctionConnectionPlugin\n return;\n }\n // TODO: PG10 doesn't support the equivalent of pg_attribute.atttypemod\n // on function arguments and return types, however maybe a later\n // version of PG will?\n const NodeType = getTypeByName(\n inflection.recordFunctionReturnType(proc)\n );\n if (!NodeType) {\n throw new Error(\n `Do not have a node type '${inflection.recordFunctionReturnType(\n proc\n )}' for '${proc.name}' so cannot create connection type`\n );\n }\n const EdgeType = newWithHooks(\n GraphQLObjectType,\n {\n name: inflection.recordFunctionEdge(proc),\n description: build.wrapDescription(\n `A \\`${NodeType.name}\\` edge in the connection.`,\n \"type\"\n ),\n fields: ({ fieldWithHooks }) => {\n return {\n cursor: fieldWithHooks(\n \"cursor\",\n ({ addDataGenerator }) => {\n addDataGenerator(() => ({\n usesCursor: [true],\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 base64(JSON.stringify(data.__cursor));\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 \\`${NodeType.name}\\` at the end of the edge.`,\n \"field\"\n ),\n type: nullableIf(\n !pgForbidSetofFunctionsToReturnNull,\n NodeType\n ),\n resolve(data, _args, _context, resolveInfo) {\n const safeAlias = getSafeAliasFromResolveInfo(\n resolveInfo\n );\n return data[safeAlias];\n },\n },\n {},\n false\n ),\n };\n },\n },\n {\n __origin: `Adding function result edge type for ${describePgEntity(\n proc\n )}. You can rename the function's GraphQL field (and its dependent types) via a 'Smart Comment':\\n\\n ${sqlCommentByAddingTags(\n proc,\n {\n name: \"newNameHere\",\n }\n )}`,\n isEdgeType: true,\n nodeType: NodeType,\n pgIntrospection: proc,\n }\n );\n\n /*const ConnectionType = */\n newWithHooks(\n GraphQLObjectType,\n {\n name: inflection.recordFunctionConnection(proc),\n description: build.wrapDescription(\n `A connection to a list of \\`${NodeType.name}\\` values.`,\n \"type\"\n ),\n fields: ({ fieldWithHooks }) => {\n return {\n nodes: pgField(build, fieldWithHooks, \"nodes\", {\n description: build.wrapDescription(\n `A list of \\`${NodeType.name}\\` objects.`,\n \"field\"\n ),\n type: new GraphQLNonNull(\n new GraphQLList(\n nullableIf(!pgForbidSetofFunctionsToReturnNull, NodeType)\n )\n ),\n resolve(data, _args, _context, resolveInfo) {\n const safeAlias = getSafeAliasFromResolveInfo(resolveInfo);\n return data.data.map(entry => entry[safeAlias]);\n },\n }),\n edges: pgField(\n build,\n fieldWithHooks,\n \"edges\",\n {\n description: build.wrapDescription(\n `A list of edges which contains the \\`${NodeType.name}\\` 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 = getSafeAliasFromResolveInfo(\n resolveInfo\n );\n return data.data.map(entry => ({\n __cursor: entry.__cursor,\n ...entry[safeAlias],\n }));\n },\n },\n {},\n false,\n {\n hoistCursor: true,\n }\n ),\n };\n },\n },\n {\n __origin: `Adding function connection type for ${describePgEntity(\n proc\n )}. You can rename the function's GraphQL field (and its dependent types) via a 'Smart Comment':\\n\\n ${sqlCommentByAddingTags(\n proc,\n {\n name: \"newNameHere\",\n }\n )}`,\n isConnectionType: true,\n isPgRowConnectionType: true,\n edgeType: EdgeType,\n nodeType: NodeType,\n pgIntrospection: proc,\n }\n );\n });\n return _;\n },\n [\"PgRecordFunctionConnection\"]\n );\n}: Plugin);\n"],"file":"PgRecordFunctionConnectionPlugin.js"}
1
+ {"version":3,"sources":["../../src/plugins/PgRecordFunctionConnectionPlugin.js"],"names":["base64","str","Buffer","from","String","toString","PgRecordFunctionConnectionPlugin","builder","pgForbidSetofFunctionsToReturnNull","hook","_","build","newWithHooks","getSafeAliasFromResolveInfo","pgIntrospectionResultsByKind","introspectionResultsByKind","getTypeByName","graphql","GraphQLObjectType","GraphQLNonNull","GraphQLList","inflection","pgOmit","omit","describePgEntity","sqlCommentByAddingTags","pgField","nullableIf","condition","Type","Cursor","procedure","forEach","proc","returnsSet","namespace","returnTypeId","NodeType","recordFunctionReturnType","Error","name","EdgeType","recordFunctionEdge","description","wrapDescription","fields","fieldWithHooks","cursor","addDataGenerator","usesCursor","type","resolve","data","JSON","stringify","__cursor","isCursorField","node","_args","_context","resolveInfo","safeAlias","__origin","isEdgeType","nodeType","pgIntrospection","recordFunctionConnection","nodes","map","entry","edges","hoistCursor","isConnectionType","isPgRowConnectionType","edgeType"],"mappings":";;;;;;;AAGA,MAAMA,MAAM,GAAGC,GAAG,IAAIC,MAAM,CAACC,IAAP,CAAYC,MAAM,CAACH,GAAD,CAAlB,EAAyBI,QAAzB,CAAkC,QAAlC,CAAtB;;IAEyBC,gC,GAAT,SAASA,gCAAT,CACdC,OADc,EAEd;AAAEC,EAAAA,kCAAkC,GAAG;AAAvC,CAFc,EAGd;AACAD,EAAAA,OAAO,CAACE,IAAR,CACE,MADF,EAEE,CAACC,CAAD,EAAIC,KAAJ,KAAc;AACZ,UAAM;AACJC,MAAAA,YADI;AAEJC,MAAAA,2BAFI;AAGJC,MAAAA,4BAA4B,EAAEC,0BAH1B;AAIJC,MAAAA,aAJI;AAKJC,MAAAA,OAAO,EAAE;AAAEC,QAAAA,iBAAF;AAAqBC,QAAAA,cAArB;AAAqCC,QAAAA;AAArC,OALL;AAMJC,MAAAA,UANI;AAOJC,MAAAA,MAAM,EAAEC,IAPJ;AAQJC,MAAAA,gBARI;AASJC,MAAAA,sBATI;AAUJC,MAAAA;AAVI,QAWFf,KAXJ;;AAaA,UAAMgB,UAAU,GAAG,CAACC,SAAD,EAAYC,IAAZ,KACjBD,SAAS,GAAGC,IAAH,GAAU,IAAIV,cAAJ,CAAmBU,IAAnB,CADrB;;AAEA,UAAMC,MAAM,GAAGd,aAAa,CAAC,QAAD,CAA5B;AAEAD,IAAAA,0BAA0B,CAACgB,SAA3B,CAAqCC,OAArC,CAA6CC,IAAI,IAAI;AACnD;AACA,UAAI,CAACA,IAAI,CAACC,UAAV,EAAsB;AACtB,UAAI,CAACD,IAAI,CAACE,SAAV,EAAqB;AACrB,UAAIZ,IAAI,CAACU,IAAD,EAAO,SAAP,CAAR,EAA2B;;AAE3B,UAAIA,IAAI,CAACG,YAAL,KAAsB,MAA1B,EAAkC;AAChC;AACA;AACA;AACD,OAVkD,CAWnD;AACA;AACA;;;AACA,YAAMC,QAAQ,GAAGrB,aAAa,CAC5BK,UAAU,CAACiB,wBAAX,CAAoCL,IAApC,CAD4B,CAA9B;;AAGA,UAAI,CAACI,QAAL,EAAe;AACb,cAAM,IAAIE,KAAJ,CACH,4BAA2BlB,UAAU,CAACiB,wBAAX,CAC1BL,IAD0B,CAE1B,UAASA,IAAI,CAACO,IAAK,oCAHjB,CAAN;AAKD;;AACD,YAAMC,QAAQ,GAAG7B,YAAY,CAC3BM,iBAD2B,EAE3B;AACEsB,QAAAA,IAAI,EAAEnB,UAAU,CAACqB,kBAAX,CAA8BT,IAA9B,CADR;AAEEU,QAAAA,WAAW,EAAEhC,KAAK,CAACiC,eAAN,CACV,OAAMP,QAAQ,CAACG,IAAK,4BADV,EAEX,MAFW,CAFf;AAMEK,QAAAA,MAAM,EAAE,CAAC;AAAEC,UAAAA;AAAF,SAAD,KAAwB;AAC9B,iBAAO;AACLC,YAAAA,MAAM,EAAED,cAAc,CACpB,QADoB,EAEpB,CAAC;AAAEE,cAAAA;AAAF,aAAD,KAA0B;AACxBA,cAAAA,gBAAgB,CAAC,OAAO;AACtBC,gBAAAA,UAAU,EAAE,CAAC,IAAD;AADU,eAAP,CAAD,CAAhB;AAGA,qBAAO;AACLN,gBAAAA,WAAW,EAAEhC,KAAK,CAACiC,eAAN,CACX,iCADW,EAEX,OAFW,CADR;AAKLM,gBAAAA,IAAI,EAAEpB,MALD;;AAMLqB,gBAAAA,OAAO,CAACC,IAAD,EAAO;AACZ,yBAAOpD,MAAM,CAACqD,IAAI,CAACC,SAAL,CAAeF,IAAI,CAACG,QAApB,CAAD,CAAb;AACD;;AARI,eAAP;AAUD,aAhBmB,EAiBpB;AACEC,cAAAA,aAAa,EAAE;AADjB,aAjBoB,CADjB;AAsBLC,YAAAA,IAAI,EAAE/B,OAAO,CACXf,KADW,EAEXmC,cAFW,EAGX,MAHW,EAIX;AACEH,cAAAA,WAAW,EAAEhC,KAAK,CAACiC,eAAN,CACV,SAAQP,QAAQ,CAACG,IAAK,4BADZ,EAEX,OAFW,CADf;AAKEU,cAAAA,IAAI,EAAEvB,UAAU,CACd,CAACnB,kCADa,EAEd6B,QAFc,CALlB;;AASEc,cAAAA,OAAO,CAACC,IAAD,EAAOM,KAAP,EAAcC,QAAd,EAAwBC,WAAxB,EAAqC;AAC1C,sBAAMC,SAAS,GACbhD,2BAA2B,CAAC+C,WAAD,CAD7B;AAEA,uBAAOR,IAAI,CAACS,SAAD,CAAX;AACD;;AAbH,aAJW,EAmBX,EAnBW,EAoBX,KApBW;AAtBR,WAAP;AA6CD;AApDH,OAF2B,EAwD3B;AACEC,QAAAA,QAAQ,EAAG,wCAAuCtC,gBAAgB,CAChES,IADgE,CAEhE,uGAAsGR,sBAAsB,CAC5HQ,IAD4H,EAE5H;AACEO,UAAAA,IAAI,EAAE;AADR,SAF4H,CAK5H,EARJ;AASEuB,QAAAA,UAAU,EAAE,IATd;AAUEC,QAAAA,QAAQ,EAAE3B,QAVZ;AAWE4B,QAAAA,eAAe,EAAEhC;AAXnB,OAxD2B,CAA7B;AAuEA;;AACArB,MAAAA,YAAY,CACVM,iBADU,EAEV;AACEsB,QAAAA,IAAI,EAAEnB,UAAU,CAAC6C,wBAAX,CAAoCjC,IAApC,CADR;AAEEU,QAAAA,WAAW,EAAEhC,KAAK,CAACiC,eAAN,CACV,+BAA8BP,QAAQ,CAACG,IAAK,YADlC,EAEX,MAFW,CAFf;AAMEK,QAAAA,MAAM,EAAE,CAAC;AAAEC,UAAAA;AAAF,SAAD,KAAwB;AAC9B,iBAAO;AACLqB,YAAAA,KAAK,EAAEzC,OAAO,CAACf,KAAD,EAAQmC,cAAR,EAAwB,OAAxB,EAAiC;AAC7CH,cAAAA,WAAW,EAAEhC,KAAK,CAACiC,eAAN,CACV,eAAcP,QAAQ,CAACG,IAAK,aADlB,EAEX,OAFW,CADgC;AAK7CU,cAAAA,IAAI,EAAE,IAAI/B,cAAJ,CACJ,IAAIC,WAAJ,CACEO,UAAU,CAAC,CAACnB,kCAAF,EAAsC6B,QAAtC,CADZ,CADI,CALuC;;AAU7Cc,cAAAA,OAAO,CAACC,IAAD,EAAOM,KAAP,EAAcC,QAAd,EAAwBC,WAAxB,EAAqC;AAC1C,sBAAMC,SAAS,GAAGhD,2BAA2B,CAAC+C,WAAD,CAA7C;AACA,uBAAOR,IAAI,CAACA,IAAL,CAAUgB,GAAV,CAAcC,KAAK,IAAIA,KAAK,CAACR,SAAD,CAA5B,CAAP;AACD;;AAb4C,aAAjC,CADT;AAgBLS,YAAAA,KAAK,EAAE5C,OAAO,CACZf,KADY,EAEZmC,cAFY,EAGZ,OAHY,EAIZ;AACEH,cAAAA,WAAW,EAAEhC,KAAK,CAACiC,eAAN,CACV,wCAAuCP,QAAQ,CAACG,IAAK,qCAD3C,EAEX,OAFW,CADf;AAKEU,cAAAA,IAAI,EAAE,IAAI/B,cAAJ,CACJ,IAAIC,WAAJ,CAAgB,IAAID,cAAJ,CAAmBsB,QAAnB,CAAhB,CADI,CALR;;AAQEU,cAAAA,OAAO,CAACC,IAAD,EAAOM,KAAP,EAAcC,QAAd,EAAwBC,WAAxB,EAAqC;AAC1C,sBAAMC,SAAS,GACbhD,2BAA2B,CAAC+C,WAAD,CAD7B;AAEA,uBAAOR,IAAI,CAACA,IAAL,CAAUgB,GAAV,CAAcC,KAAK,KAAK;AAC7Bd,kBAAAA,QAAQ,EAAEc,KAAK,CAACd,QADa;AAE7B,qBAAGc,KAAK,CAACR,SAAD;AAFqB,iBAAL,CAAnB,CAAP;AAID;;AAfH,aAJY,EAqBZ,EArBY,EAsBZ,KAtBY,EAuBZ;AACEU,cAAAA,WAAW,EAAE;AADf,aAvBY;AAhBT,WAAP;AA4CD;AAnDH,OAFU,EAuDV;AACET,QAAAA,QAAQ,EAAG,uCAAsCtC,gBAAgB,CAC/DS,IAD+D,CAE/D,uGAAsGR,sBAAsB,CAC5HQ,IAD4H,EAE5H;AACEO,UAAAA,IAAI,EAAE;AADR,SAF4H,CAK5H,EARJ;AASEgC,QAAAA,gBAAgB,EAAE,IATpB;AAUEC,QAAAA,qBAAqB,EAAE,IAVzB;AAWEC,QAAAA,QAAQ,EAAEjC,QAXZ;AAYEuB,QAAAA,QAAQ,EAAE3B,QAZZ;AAaE4B,QAAAA,eAAe,EAAEhC;AAbnB,OAvDU,CAAZ;AAuED,KAvKD;AAwKA,WAAOvB,CAAP;AACD,GA7LH,EA8LE,CAAC,4BAAD,CA9LF;AAgMD,C","sourcesContent":["// @flow\nimport type { Plugin } from \"graphile-build\";\n\nconst base64 = str => Buffer.from(String(str)).toString(\"base64\");\n\nexport default (function PgRecordFunctionConnectionPlugin(\n builder,\n { pgForbidSetofFunctionsToReturnNull = false }\n) {\n builder.hook(\n \"init\",\n (_, build) => {\n const {\n newWithHooks,\n getSafeAliasFromResolveInfo,\n pgIntrospectionResultsByKind: introspectionResultsByKind,\n getTypeByName,\n graphql: { GraphQLObjectType, GraphQLNonNull, GraphQLList },\n inflection,\n pgOmit: omit,\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.procedure.forEach(proc => {\n // PERFORMANCE: These used to be .filter(...) calls\n if (!proc.returnsSet) return;\n if (!proc.namespace) return;\n if (omit(proc, \"execute\")) return;\n\n if (proc.returnTypeId !== \"2249\") {\n // Does not return a record type; defer handling to\n // PgTablesPlugin and PgScalarFunctionConnectionPlugin\n return;\n }\n // TODO: PG10 doesn't support the equivalent of pg_attribute.atttypemod\n // on function arguments and return types, however maybe a later\n // version of PG will?\n const NodeType = getTypeByName(\n inflection.recordFunctionReturnType(proc)\n );\n if (!NodeType) {\n throw new Error(\n `Do not have a node type '${inflection.recordFunctionReturnType(\n proc\n )}' for '${proc.name}' so cannot create connection type`\n );\n }\n const EdgeType = newWithHooks(\n GraphQLObjectType,\n {\n name: inflection.recordFunctionEdge(proc),\n description: build.wrapDescription(\n `A \\`${NodeType.name}\\` edge in the connection.`,\n \"type\"\n ),\n fields: ({ fieldWithHooks }) => {\n return {\n cursor: fieldWithHooks(\n \"cursor\",\n ({ addDataGenerator }) => {\n addDataGenerator(() => ({\n usesCursor: [true],\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 base64(JSON.stringify(data.__cursor));\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 \\`${NodeType.name}\\` at the end of the edge.`,\n \"field\"\n ),\n type: nullableIf(\n !pgForbidSetofFunctionsToReturnNull,\n NodeType\n ),\n resolve(data, _args, _context, resolveInfo) {\n const safeAlias =\n getSafeAliasFromResolveInfo(resolveInfo);\n return data[safeAlias];\n },\n },\n {},\n false\n ),\n };\n },\n },\n {\n __origin: `Adding function result edge type for ${describePgEntity(\n proc\n )}. You can rename the function's GraphQL field (and its dependent types) via a 'Smart Comment':\\n\\n ${sqlCommentByAddingTags(\n proc,\n {\n name: \"newNameHere\",\n }\n )}`,\n isEdgeType: true,\n nodeType: NodeType,\n pgIntrospection: proc,\n }\n );\n\n /*const ConnectionType = */\n newWithHooks(\n GraphQLObjectType,\n {\n name: inflection.recordFunctionConnection(proc),\n description: build.wrapDescription(\n `A connection to a list of \\`${NodeType.name}\\` values.`,\n \"type\"\n ),\n fields: ({ fieldWithHooks }) => {\n return {\n nodes: pgField(build, fieldWithHooks, \"nodes\", {\n description: build.wrapDescription(\n `A list of \\`${NodeType.name}\\` objects.`,\n \"field\"\n ),\n type: new GraphQLNonNull(\n new GraphQLList(\n nullableIf(!pgForbidSetofFunctionsToReturnNull, NodeType)\n )\n ),\n resolve(data, _args, _context, resolveInfo) {\n const safeAlias = getSafeAliasFromResolveInfo(resolveInfo);\n return data.data.map(entry => entry[safeAlias]);\n },\n }),\n edges: pgField(\n build,\n fieldWithHooks,\n \"edges\",\n {\n description: build.wrapDescription(\n `A list of edges which contains the \\`${NodeType.name}\\` 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 __cursor: entry.__cursor,\n ...entry[safeAlias],\n }));\n },\n },\n {},\n false,\n {\n hoistCursor: true,\n }\n ),\n };\n },\n },\n {\n __origin: `Adding function connection type for ${describePgEntity(\n proc\n )}. You can rename the function's GraphQL field (and its dependent types) via a 'Smart Comment':\\n\\n ${sqlCommentByAddingTags(\n proc,\n {\n name: \"newNameHere\",\n }\n )}`,\n isConnectionType: true,\n isPgRowConnectionType: true,\n edgeType: EdgeType,\n nodeType: NodeType,\n pgIntrospection: proc,\n }\n );\n });\n return _;\n },\n [\"PgRecordFunctionConnection\"]\n );\n}: Plugin);\n"],"file":"PgRecordFunctionConnectionPlugin.js"}
@@ -39,8 +39,8 @@ var PgRecordReturnTypesPlugin = function PgRecordReturnTypesPlugin(builder) {
39
39
  proc.argModes[idx] === "i" || // this arg is `in`
40
40
  proc.argModes[idx] === "b" // this arg is `inout`
41
41
  ) {
42
- prev.push(introspectionResultsByKind.typeById[typeId]);
43
- }
42
+ prev.push(introspectionResultsByKind.typeById[typeId]);
43
+ }
44
44
 
45
45
  return prev;
46
46
  }, []);
@@ -65,7 +65,7 @@ var PgRecordReturnTypesPlugin = function PgRecordReturnTypesPlugin(builder) {
65
65
  const isMutation = !proc.isStable;
66
66
  const firstArgType = argTypes[0];
67
67
  const computed = firstArgType && firstArgType.type === "c" && firstArgType.class && firstArgType.namespaceId === proc.namespaceId && proc.name.startsWith(`${firstArgType.name}_`);
68
- const procFieldName = isMutation ? inflection.functionMutationName(proc) : computed ? inflection.computedColumn(proc.name.substr(firstArgType.name.length + 1), proc) : inflection.functionQueryName(proc);
68
+ const procFieldName = isMutation ? inflection.functionMutationName(proc) : computed ? inflection.computedColumn(proc.name.slice(firstArgType.name.length + 1), proc) : inflection.functionQueryName(proc);
69
69
  newWithHooks(GraphQLObjectType, {
70
70
  name: inflection.recordFunctionReturnType(proc),
71
71
  description: build.wrapDescription(`The return type of our \`${procFieldName}\` ${isMutation ? "mutation" : "query"}.`, "type"),
@@ -15,7 +15,8 @@ export default (function PgRecordReturnTypesPlugin(builder) {
15
15
  describePgEntity,
16
16
  sqlCommentByAddingTags,
17
17
  pgSql: sql,
18
- pgGetSelectValueForFieldAndTypeAndModifier: getSelectValueForFieldAndTypeAndModifier,
18
+ pgGetSelectValueForFieldAndTypeAndModifier:
19
+ getSelectValueForFieldAndTypeAndModifier,
19
20
  getSafeAliasFromResolveInfo,
20
21
  getSafeAliasFromAlias,
21
22
  pg2gqlForType,
@@ -70,7 +71,7 @@ export default (function PgRecordReturnTypesPlugin(builder) {
70
71
  ? inflection.functionMutationName(proc)
71
72
  : computed
72
73
  ? inflection.computedColumn(
73
- proc.name.substr(firstArgType.name.length + 1),
74
+ proc.name.slice(firstArgType.name.length + 1),
74
75
  proc
75
76
  )
76
77
  : inflection.functionQueryName(proc);
@@ -137,9 +138,8 @@ export default (function PgRecordReturnTypesPlugin(builder) {
137
138
  return {
138
139
  type: fieldType,
139
140
  resolve(data, _args, _context, resolveInfo) {
140
- const safeAlias = getSafeAliasFromResolveInfo(
141
- resolveInfo
142
- );
141
+ const safeAlias =
142
+ getSafeAliasFromResolveInfo(resolveInfo);
143
143
  return convertFromPg(data[safeAlias]);
144
144
  },
145
145
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/plugins/PgRecordReturnTypesPlugin.js"],"names":["PgRecordReturnTypesPlugin","builder","hook","_","build","newWithHooks","pgIntrospectionResultsByKind","introspectionResultsByKind","pgGetGqlTypeByTypeIdAndModifier","graphql","GraphQLObjectType","inflection","pgOmit","omit","describePgEntity","sqlCommentByAddingTags","pgSql","sql","pgGetSelectValueForFieldAndTypeAndModifier","getSelectValueForFieldAndTypeAndModifier","getSafeAliasFromResolveInfo","getSafeAliasFromAlias","pg2gqlForType","procedure","forEach","proc","namespace","returnType","typeById","returnTypeId","id","argTypes","argTypeIds","reduce","prev","typeId","idx","argModes","length","push","argModesWithOutput","outputArgNames","includes","argNames","outputArgTypes","isMutation","isStable","firstArgType","computed","type","class","namespaceId","name","startsWith","procFieldName","functionMutationName","computedColumn","substr","functionQueryName","recordFunctionReturnType","description","wrapDescription","fields","fieldWithHooks","memo","outputArgName","fieldName","functionOutputFieldName","fieldType","Error","fieldContext","addDataGenerator","parsedResolveInfoFragment","safeAlias","alias","pgQuery","queryBuilder","select","fragment","getTableAlias","identifier","convertFromPg","resolve","data","_args","_context","resolveInfo","__origin","resultTypeName","isRecordReturnType","pgIntrospection"],"mappings":"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","sourcesContent":["// @flow\nimport type { Plugin } from \"graphile-build\";\n\nexport default (function PgRecordReturnTypesPlugin(builder) {\n builder.hook(\n \"init\",\n (_, build) => {\n const {\n newWithHooks,\n pgIntrospectionResultsByKind: introspectionResultsByKind,\n pgGetGqlTypeByTypeIdAndModifier,\n graphql: { GraphQLObjectType },\n inflection,\n pgOmit: omit,\n describePgEntity,\n sqlCommentByAddingTags,\n pgSql: sql,\n pgGetSelectValueForFieldAndTypeAndModifier: getSelectValueForFieldAndTypeAndModifier,\n getSafeAliasFromResolveInfo,\n getSafeAliasFromAlias,\n pg2gqlForType,\n } = build;\n\n introspectionResultsByKind.procedure.forEach(proc => {\n // PERFORMANCE: These used to be .filter(...) calls\n if (!proc.namespace) return;\n if (omit(proc, \"execute\")) return;\n\n const returnType =\n introspectionResultsByKind.typeById[proc.returnTypeId];\n if (returnType.id !== \"2249\") {\n return;\n }\n const argTypes = proc.argTypeIds.reduce((prev, typeId, idx) => {\n if (\n proc.argModes.length === 0 || // all args are `in`\n proc.argModes[idx] === \"i\" || // this arg is `in`\n proc.argModes[idx] === \"b\" // this arg is `inout`\n ) {\n prev.push(introspectionResultsByKind.typeById[typeId]);\n }\n return prev;\n }, []);\n const argModesWithOutput = [\n \"o\", // OUT,\n \"b\", // INOUT\n \"t\", // TABLE\n ];\n const outputArgNames = proc.argTypeIds.reduce((prev, _, idx) => {\n if (argModesWithOutput.includes(proc.argModes[idx])) {\n prev.push(proc.argNames[idx] || \"\");\n }\n return prev;\n }, []);\n const outputArgTypes = proc.argTypeIds.reduce((prev, typeId, idx) => {\n if (argModesWithOutput.includes(proc.argModes[idx])) {\n prev.push(introspectionResultsByKind.typeById[typeId]);\n }\n return prev;\n }, []);\n const isMutation = !proc.isStable;\n const firstArgType = argTypes[0];\n const computed =\n firstArgType &&\n firstArgType.type === \"c\" &&\n firstArgType.class &&\n firstArgType.namespaceId === proc.namespaceId &&\n proc.name.startsWith(`${firstArgType.name}_`);\n const procFieldName = isMutation\n ? inflection.functionMutationName(proc)\n : computed\n ? inflection.computedColumn(\n proc.name.substr(firstArgType.name.length + 1),\n proc\n )\n : inflection.functionQueryName(proc);\n newWithHooks(\n GraphQLObjectType,\n {\n name: inflection.recordFunctionReturnType(proc),\n description: build.wrapDescription(\n `The return type of our \\`${procFieldName}\\` ${\n isMutation ? \"mutation\" : \"query\"\n }.`,\n \"type\"\n ),\n fields: ({ fieldWithHooks }) => {\n return outputArgNames.reduce((memo, outputArgName, idx) => {\n const fieldName = inflection.functionOutputFieldName(\n proc,\n outputArgName,\n idx + 1\n );\n const fieldType = pgGetGqlTypeByTypeIdAndModifier(\n outputArgTypes[idx].id,\n null\n );\n if (memo[fieldName]) {\n throw new Error(\n `Tried to register field name '${fieldName}' twice in '${describePgEntity(\n proc\n )}'; the argument names are too similar.`\n );\n }\n memo[fieldName] = fieldWithHooks(\n fieldName,\n fieldContext => {\n const { addDataGenerator } = fieldContext;\n addDataGenerator(parsedResolveInfoFragment => {\n const safeAlias = getSafeAliasFromAlias(\n parsedResolveInfoFragment.alias\n );\n return {\n pgQuery: queryBuilder => {\n queryBuilder.select(\n getSelectValueForFieldAndTypeAndModifier(\n fieldType,\n fieldContext,\n parsedResolveInfoFragment,\n sql.fragment`(${queryBuilder.getTableAlias()}.${sql.identifier(\n // According to https://www.postgresql.org/docs/10/static/sql-createfunction.html,\n // \"If you omit the name for an output argument, the system will choose a default column name.\"\n // In PG 9.x and 10, the column names appear to be assigned with a `column` prefix.\n outputArgName !== \"\"\n ? outputArgName\n : `column${idx + 1}`\n )})`,\n outputArgTypes[idx],\n null\n ),\n safeAlias\n );\n },\n };\n });\n const convertFromPg = pg2gqlForType(outputArgTypes[idx]);\n return {\n type: fieldType,\n resolve(data, _args, _context, resolveInfo) {\n const safeAlias = getSafeAliasFromResolveInfo(\n resolveInfo\n );\n return convertFromPg(data[safeAlias]);\n },\n };\n },\n {}\n );\n return memo;\n }, {});\n },\n },\n {\n __origin: `Adding record return type for ${describePgEntity(\n proc\n )}. You can rename the function's GraphQL field (and its dependent types) via a 'Smart Comment':\\n\\n ${sqlCommentByAddingTags(\n proc,\n {\n name: \"newNameHere\",\n }\n )}\\n\\nYou can rename just the function's GraphQL result type via a 'Smart Comment':\\n\\n ${sqlCommentByAddingTags(\n proc,\n {\n resultTypeName: \"newNameHere\",\n }\n )}`,\n isRecordReturnType: true,\n pgIntrospection: proc,\n }\n );\n });\n return _;\n },\n [\"PgRecordReturnTypes\"]\n );\n}: Plugin);\n"],"file":"PgRecordReturnTypesPlugin.js"}
1
+ {"version":3,"sources":["../../src/plugins/PgRecordReturnTypesPlugin.js"],"names":["PgRecordReturnTypesPlugin","builder","hook","_","build","newWithHooks","pgIntrospectionResultsByKind","introspectionResultsByKind","pgGetGqlTypeByTypeIdAndModifier","graphql","GraphQLObjectType","inflection","pgOmit","omit","describePgEntity","sqlCommentByAddingTags","pgSql","sql","pgGetSelectValueForFieldAndTypeAndModifier","getSelectValueForFieldAndTypeAndModifier","getSafeAliasFromResolveInfo","getSafeAliasFromAlias","pg2gqlForType","procedure","forEach","proc","namespace","returnType","typeById","returnTypeId","id","argTypes","argTypeIds","reduce","prev","typeId","idx","argModes","length","push","argModesWithOutput","outputArgNames","includes","argNames","outputArgTypes","isMutation","isStable","firstArgType","computed","type","class","namespaceId","name","startsWith","procFieldName","functionMutationName","computedColumn","slice","functionQueryName","recordFunctionReturnType","description","wrapDescription","fields","fieldWithHooks","memo","outputArgName","fieldName","functionOutputFieldName","fieldType","Error","fieldContext","addDataGenerator","parsedResolveInfoFragment","safeAlias","alias","pgQuery","queryBuilder","select","fragment","getTableAlias","identifier","convertFromPg","resolve","data","_args","_context","resolveInfo","__origin","resultTypeName","isRecordReturnType","pgIntrospection"],"mappings":"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","sourcesContent":["// @flow\nimport type { Plugin } from \"graphile-build\";\n\nexport default (function PgRecordReturnTypesPlugin(builder) {\n builder.hook(\n \"init\",\n (_, build) => {\n const {\n newWithHooks,\n pgIntrospectionResultsByKind: introspectionResultsByKind,\n pgGetGqlTypeByTypeIdAndModifier,\n graphql: { GraphQLObjectType },\n inflection,\n pgOmit: omit,\n describePgEntity,\n sqlCommentByAddingTags,\n pgSql: sql,\n pgGetSelectValueForFieldAndTypeAndModifier:\n getSelectValueForFieldAndTypeAndModifier,\n getSafeAliasFromResolveInfo,\n getSafeAliasFromAlias,\n pg2gqlForType,\n } = build;\n\n introspectionResultsByKind.procedure.forEach(proc => {\n // PERFORMANCE: These used to be .filter(...) calls\n if (!proc.namespace) return;\n if (omit(proc, \"execute\")) return;\n\n const returnType =\n introspectionResultsByKind.typeById[proc.returnTypeId];\n if (returnType.id !== \"2249\") {\n return;\n }\n const argTypes = proc.argTypeIds.reduce((prev, typeId, idx) => {\n if (\n proc.argModes.length === 0 || // all args are `in`\n proc.argModes[idx] === \"i\" || // this arg is `in`\n proc.argModes[idx] === \"b\" // this arg is `inout`\n ) {\n prev.push(introspectionResultsByKind.typeById[typeId]);\n }\n return prev;\n }, []);\n const argModesWithOutput = [\n \"o\", // OUT,\n \"b\", // INOUT\n \"t\", // TABLE\n ];\n const outputArgNames = proc.argTypeIds.reduce((prev, _, idx) => {\n if (argModesWithOutput.includes(proc.argModes[idx])) {\n prev.push(proc.argNames[idx] || \"\");\n }\n return prev;\n }, []);\n const outputArgTypes = proc.argTypeIds.reduce((prev, typeId, idx) => {\n if (argModesWithOutput.includes(proc.argModes[idx])) {\n prev.push(introspectionResultsByKind.typeById[typeId]);\n }\n return prev;\n }, []);\n const isMutation = !proc.isStable;\n const firstArgType = argTypes[0];\n const computed =\n firstArgType &&\n firstArgType.type === \"c\" &&\n firstArgType.class &&\n firstArgType.namespaceId === proc.namespaceId &&\n proc.name.startsWith(`${firstArgType.name}_`);\n const procFieldName = isMutation\n ? inflection.functionMutationName(proc)\n : computed\n ? inflection.computedColumn(\n proc.name.slice(firstArgType.name.length + 1),\n proc\n )\n : inflection.functionQueryName(proc);\n newWithHooks(\n GraphQLObjectType,\n {\n name: inflection.recordFunctionReturnType(proc),\n description: build.wrapDescription(\n `The return type of our \\`${procFieldName}\\` ${\n isMutation ? \"mutation\" : \"query\"\n }.`,\n \"type\"\n ),\n fields: ({ fieldWithHooks }) => {\n return outputArgNames.reduce((memo, outputArgName, idx) => {\n const fieldName = inflection.functionOutputFieldName(\n proc,\n outputArgName,\n idx + 1\n );\n const fieldType = pgGetGqlTypeByTypeIdAndModifier(\n outputArgTypes[idx].id,\n null\n );\n if (memo[fieldName]) {\n throw new Error(\n `Tried to register field name '${fieldName}' twice in '${describePgEntity(\n proc\n )}'; the argument names are too similar.`\n );\n }\n memo[fieldName] = fieldWithHooks(\n fieldName,\n fieldContext => {\n const { addDataGenerator } = fieldContext;\n addDataGenerator(parsedResolveInfoFragment => {\n const safeAlias = getSafeAliasFromAlias(\n parsedResolveInfoFragment.alias\n );\n return {\n pgQuery: queryBuilder => {\n queryBuilder.select(\n getSelectValueForFieldAndTypeAndModifier(\n fieldType,\n fieldContext,\n parsedResolveInfoFragment,\n sql.fragment`(${queryBuilder.getTableAlias()}.${sql.identifier(\n // According to https://www.postgresql.org/docs/10/static/sql-createfunction.html,\n // \"If you omit the name for an output argument, the system will choose a default column name.\"\n // In PG 9.x and 10, the column names appear to be assigned with a `column` prefix.\n outputArgName !== \"\"\n ? outputArgName\n : `column${idx + 1}`\n )})`,\n outputArgTypes[idx],\n null\n ),\n safeAlias\n );\n },\n };\n });\n const convertFromPg = pg2gqlForType(outputArgTypes[idx]);\n return {\n type: fieldType,\n resolve(data, _args, _context, resolveInfo) {\n const safeAlias =\n getSafeAliasFromResolveInfo(resolveInfo);\n return convertFromPg(data[safeAlias]);\n },\n };\n },\n {}\n );\n return memo;\n }, {});\n },\n },\n {\n __origin: `Adding record return type for ${describePgEntity(\n proc\n )}. You can rename the function's GraphQL field (and its dependent types) via a 'Smart Comment':\\n\\n ${sqlCommentByAddingTags(\n proc,\n {\n name: \"newNameHere\",\n }\n )}\\n\\nYou can rename just the function's GraphQL result type via a 'Smart Comment':\\n\\n ${sqlCommentByAddingTags(\n proc,\n {\n resultTypeName: \"newNameHere\",\n }\n )}`,\n isRecordReturnType: true,\n pgIntrospection: proc,\n }\n );\n });\n return _;\n },\n [\"PgRecordReturnTypes\"]\n );\n}: Plugin);\n"],"file":"PgRecordReturnTypesPlugin.js"}
@@ -124,9 +124,8 @@ export default (async function PgRowByUniqueConstraint(
124
124
  const liveRecord =
125
125
  resolveInfo.rootValue &&
126
126
  resolveInfo.rootValue.liveRecord;
127
- const parsedResolveInfoFragment = parseResolveInfo(
128
- resolveInfo
129
- );
127
+ const parsedResolveInfoFragment =
128
+ parseResolveInfo(resolveInfo);
130
129
  parsedResolveInfoFragment.args = args; // Allow overriding via makeWrapResolversPlugin
131
130
  const resolveData = getDataFromParsedResolveInfoFragment(
132
131
  parsedResolveInfoFragment,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/plugins/PgRowByUniqueConstraint.js"],"names":["PgRowByUniqueConstraint","builder","subscriptions","hook","fields","build","context","extend","parseResolveInfo","pgGetGqlTypeByTypeIdAndModifier","pgGetGqlInputTypeByTypeIdAndModifier","gql2pg","pgIntrospectionResultsByKind","introspectionResultsByKind","pgSql","sql","graphql","GraphQLNonNull","inflection","pgQueryFromResolveData","queryFromResolveData","pgOmit","omit","pgPrepareAndRun","scope","isRootQuery","fieldWithHooks","class","reduce","memo","table","namespace","TableType","type","id","sqlFullTableName","identifier","name","uniqueConstraints","constraints","filter","con","forEach","constraint","keys","keyAttributes","some","key","every","_","Error","fieldName","rowByUniqueKeys","keysIncludingMeta","map","sqlIdentifier","columnName","column","queryFromResolveDataOptions","useAsterisk","queryFromResolveDataCallback","queryBuilder","args","primaryKeyConstraint","selectIdentifiers","sqlTableAlias","getTableAlias","typeModifier","where","fragment","getDataFromParsedResolveInfoFragment","typeId","InputType","resolve","parent","resolveContext","resolveInfo","pgClient","liveRecord","rootValue","parsedResolveInfoFragment","resolveData","query","undefined","text","values","compile","debugSql","enabled","rows","row","__identifiers","isPgRowByUniqueConstraintField","pgFieldIntrospection"],"mappings":"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","sourcesContent":["// @flow\nimport type { Plugin } from \"graphile-build\";\nimport debugSql from \"./debugSql\";\n\nexport default (async function PgRowByUniqueConstraint(\n builder,\n { subscriptions }\n) {\n builder.hook(\n \"GraphQLObjectType:fields\",\n (fields, build, context) => {\n const {\n extend,\n parseResolveInfo,\n pgGetGqlTypeByTypeIdAndModifier,\n pgGetGqlInputTypeByTypeIdAndModifier,\n gql2pg,\n pgIntrospectionResultsByKind: introspectionResultsByKind,\n pgSql: sql,\n graphql: { GraphQLNonNull },\n inflection,\n pgQueryFromResolveData: queryFromResolveData,\n pgOmit: omit,\n pgPrepareAndRun,\n } = build;\n const {\n scope: { isRootQuery },\n fieldWithHooks,\n } = context;\n\n if (!isRootQuery) {\n return fields;\n }\n\n return extend(\n fields,\n introspectionResultsByKind.class.reduce((memo, table) => {\n // PERFORMANCE: These used to be .filter(...) calls\n if (!table.namespace) return memo;\n if (omit(table, \"read\")) return memo;\n\n const TableType = pgGetGqlTypeByTypeIdAndModifier(\n table.type.id,\n null\n );\n const sqlFullTableName = sql.identifier(\n table.namespace.name,\n table.name\n );\n if (TableType) {\n const uniqueConstraints = table.constraints.filter(\n con => con.type === \"u\" || con.type === \"p\"\n );\n uniqueConstraints.forEach(constraint => {\n if (omit(constraint, \"read\")) {\n return;\n }\n const keys = constraint.keyAttributes;\n if (keys.some(key => omit(key, \"read\"))) {\n return;\n }\n if (!keys.every(_ => _)) {\n throw new Error(\n \"Consistency error: could not find an attribute!\"\n );\n }\n const fieldName = inflection.rowByUniqueKeys(\n keys,\n table,\n constraint\n );\n const keysIncludingMeta = keys.map(key => ({\n ...key,\n sqlIdentifier: sql.identifier(key.name),\n columnName: inflection.column(key),\n }));\n // Precomputation for performance\n const queryFromResolveDataOptions = {\n useAsterisk: false, // Because it's only a single relation, no need\n };\n const queryFromResolveDataCallback = (queryBuilder, args) => {\n if (subscriptions && table.primaryKeyConstraint) {\n queryBuilder.selectIdentifiers(table);\n }\n const sqlTableAlias = queryBuilder.getTableAlias();\n keysIncludingMeta.forEach(\n ({ sqlIdentifier, columnName, type, typeModifier }) => {\n queryBuilder.where(\n sql.fragment`${sqlTableAlias}.${sqlIdentifier} = ${gql2pg(\n args[columnName],\n type,\n typeModifier\n )}`\n );\n }\n );\n };\n\n memo[fieldName] = fieldWithHooks(\n fieldName,\n ({ getDataFromParsedResolveInfoFragment }) => {\n return {\n type: TableType,\n args: keysIncludingMeta.reduce(\n (memo, { typeId, typeModifier, columnName, name }) => {\n const InputType = pgGetGqlInputTypeByTypeIdAndModifier(\n typeId,\n typeModifier\n );\n if (!InputType) {\n throw new Error(\n `Could not find input type for key '${name}' on type '${TableType.name}'`\n );\n }\n memo[columnName] = {\n type: new GraphQLNonNull(InputType),\n };\n return memo;\n },\n {}\n ),\n async resolve(parent, args, resolveContext, resolveInfo) {\n const { pgClient } = resolveContext;\n const liveRecord =\n resolveInfo.rootValue &&\n resolveInfo.rootValue.liveRecord;\n const parsedResolveInfoFragment = parseResolveInfo(\n resolveInfo\n );\n parsedResolveInfoFragment.args = args; // Allow overriding via makeWrapResolversPlugin\n const resolveData = getDataFromParsedResolveInfoFragment(\n parsedResolveInfoFragment,\n TableType\n );\n const query = queryFromResolveData(\n sqlFullTableName,\n undefined,\n resolveData,\n queryFromResolveDataOptions,\n queryBuilder =>\n queryFromResolveDataCallback(queryBuilder, args),\n resolveContext,\n resolveInfo.rootValue\n );\n const { text, values } = sql.compile(query);\n if (debugSql.enabled) debugSql(text);\n const {\n rows: [row],\n } = await pgPrepareAndRun(pgClient, text, values);\n if (subscriptions && liveRecord && row) {\n liveRecord(\"pg\", table, row.__identifiers);\n }\n return row;\n },\n };\n },\n {\n isPgRowByUniqueConstraintField: true,\n pgFieldIntrospection: constraint,\n }\n );\n });\n }\n return memo;\n }, {}),\n `Adding \"row by unique constraint\" fields to root Query type`\n );\n },\n [\"PgRowByUniqueConstraint\"]\n );\n}: Plugin);\n"],"file":"PgRowByUniqueConstraint.js"}
1
+ {"version":3,"sources":["../../src/plugins/PgRowByUniqueConstraint.js"],"names":["PgRowByUniqueConstraint","builder","subscriptions","hook","fields","build","context","extend","parseResolveInfo","pgGetGqlTypeByTypeIdAndModifier","pgGetGqlInputTypeByTypeIdAndModifier","gql2pg","pgIntrospectionResultsByKind","introspectionResultsByKind","pgSql","sql","graphql","GraphQLNonNull","inflection","pgQueryFromResolveData","queryFromResolveData","pgOmit","omit","pgPrepareAndRun","scope","isRootQuery","fieldWithHooks","class","reduce","memo","table","namespace","TableType","type","id","sqlFullTableName","identifier","name","uniqueConstraints","constraints","filter","con","forEach","constraint","keys","keyAttributes","some","key","every","_","Error","fieldName","rowByUniqueKeys","keysIncludingMeta","map","sqlIdentifier","columnName","column","queryFromResolveDataOptions","useAsterisk","queryFromResolveDataCallback","queryBuilder","args","primaryKeyConstraint","selectIdentifiers","sqlTableAlias","getTableAlias","typeModifier","where","fragment","getDataFromParsedResolveInfoFragment","typeId","InputType","resolve","parent","resolveContext","resolveInfo","pgClient","liveRecord","rootValue","parsedResolveInfoFragment","resolveData","query","undefined","text","values","compile","debugSql","enabled","rows","row","__identifiers","isPgRowByUniqueConstraintField","pgFieldIntrospection"],"mappings":"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","sourcesContent":["// @flow\nimport type { Plugin } from \"graphile-build\";\nimport debugSql from \"./debugSql\";\n\nexport default (async function PgRowByUniqueConstraint(\n builder,\n { subscriptions }\n) {\n builder.hook(\n \"GraphQLObjectType:fields\",\n (fields, build, context) => {\n const {\n extend,\n parseResolveInfo,\n pgGetGqlTypeByTypeIdAndModifier,\n pgGetGqlInputTypeByTypeIdAndModifier,\n gql2pg,\n pgIntrospectionResultsByKind: introspectionResultsByKind,\n pgSql: sql,\n graphql: { GraphQLNonNull },\n inflection,\n pgQueryFromResolveData: queryFromResolveData,\n pgOmit: omit,\n pgPrepareAndRun,\n } = build;\n const {\n scope: { isRootQuery },\n fieldWithHooks,\n } = context;\n\n if (!isRootQuery) {\n return fields;\n }\n\n return extend(\n fields,\n introspectionResultsByKind.class.reduce((memo, table) => {\n // PERFORMANCE: These used to be .filter(...) calls\n if (!table.namespace) return memo;\n if (omit(table, \"read\")) return memo;\n\n const TableType = pgGetGqlTypeByTypeIdAndModifier(\n table.type.id,\n null\n );\n const sqlFullTableName = sql.identifier(\n table.namespace.name,\n table.name\n );\n if (TableType) {\n const uniqueConstraints = table.constraints.filter(\n con => con.type === \"u\" || con.type === \"p\"\n );\n uniqueConstraints.forEach(constraint => {\n if (omit(constraint, \"read\")) {\n return;\n }\n const keys = constraint.keyAttributes;\n if (keys.some(key => omit(key, \"read\"))) {\n return;\n }\n if (!keys.every(_ => _)) {\n throw new Error(\n \"Consistency error: could not find an attribute!\"\n );\n }\n const fieldName = inflection.rowByUniqueKeys(\n keys,\n table,\n constraint\n );\n const keysIncludingMeta = keys.map(key => ({\n ...key,\n sqlIdentifier: sql.identifier(key.name),\n columnName: inflection.column(key),\n }));\n // Precomputation for performance\n const queryFromResolveDataOptions = {\n useAsterisk: false, // Because it's only a single relation, no need\n };\n const queryFromResolveDataCallback = (queryBuilder, args) => {\n if (subscriptions && table.primaryKeyConstraint) {\n queryBuilder.selectIdentifiers(table);\n }\n const sqlTableAlias = queryBuilder.getTableAlias();\n keysIncludingMeta.forEach(\n ({ sqlIdentifier, columnName, type, typeModifier }) => {\n queryBuilder.where(\n sql.fragment`${sqlTableAlias}.${sqlIdentifier} = ${gql2pg(\n args[columnName],\n type,\n typeModifier\n )}`\n );\n }\n );\n };\n\n memo[fieldName] = fieldWithHooks(\n fieldName,\n ({ getDataFromParsedResolveInfoFragment }) => {\n return {\n type: TableType,\n args: keysIncludingMeta.reduce(\n (memo, { typeId, typeModifier, columnName, name }) => {\n const InputType = pgGetGqlInputTypeByTypeIdAndModifier(\n typeId,\n typeModifier\n );\n if (!InputType) {\n throw new Error(\n `Could not find input type for key '${name}' on type '${TableType.name}'`\n );\n }\n memo[columnName] = {\n type: new GraphQLNonNull(InputType),\n };\n return memo;\n },\n {}\n ),\n async resolve(parent, args, resolveContext, resolveInfo) {\n const { pgClient } = resolveContext;\n const liveRecord =\n resolveInfo.rootValue &&\n resolveInfo.rootValue.liveRecord;\n const parsedResolveInfoFragment =\n parseResolveInfo(resolveInfo);\n parsedResolveInfoFragment.args = args; // Allow overriding via makeWrapResolversPlugin\n const resolveData = getDataFromParsedResolveInfoFragment(\n parsedResolveInfoFragment,\n TableType\n );\n const query = queryFromResolveData(\n sqlFullTableName,\n undefined,\n resolveData,\n queryFromResolveDataOptions,\n queryBuilder =>\n queryFromResolveDataCallback(queryBuilder, args),\n resolveContext,\n resolveInfo.rootValue\n );\n const { text, values } = sql.compile(query);\n if (debugSql.enabled) debugSql(text);\n const {\n rows: [row],\n } = await pgPrepareAndRun(pgClient, text, values);\n if (subscriptions && liveRecord && row) {\n liveRecord(\"pg\", table, row.__identifiers);\n }\n return row;\n },\n };\n },\n {\n isPgRowByUniqueConstraintField: true,\n pgFieldIntrospection: constraint,\n }\n );\n });\n }\n return memo;\n }, {}),\n `Adding \"row by unique constraint\" fields to root Query type`\n );\n },\n [\"PgRowByUniqueConstraint\"]\n );\n}: Plugin);\n"],"file":"PgRowByUniqueConstraint.js"}
@@ -174,10 +174,8 @@ export default (async function PgRowNode(builder, { subscriptions }) {
174
174
  resolveInfo.rootValue.liveRecord;
175
175
  const nodeId = args[nodeIdFieldName];
176
176
  try {
177
- const {
178
- Type,
179
- identifiers,
180
- } = getTypeAndIdentifiersFromNodeId(nodeId);
177
+ const { Type, identifiers } =
178
+ getTypeAndIdentifiersFromNodeId(nodeId);
181
179
  if (Type !== TableType) {
182
180
  throw new Error("Mismatched type");
183
181
  }
@@ -185,14 +183,14 @@ export default (async function PgRowNode(builder, { subscriptions }) {
185
183
  throw new Error("Invalid ID");
186
184
  }
187
185
 
188
- const parsedResolveInfoFragment = parseResolveInfo(
189
- resolveInfo
190
- );
186
+ const parsedResolveInfoFragment =
187
+ parseResolveInfo(resolveInfo);
191
188
  parsedResolveInfoFragment.args = args; // Allow overriding via makeWrapResolversPlugin
192
- const resolveData = getDataFromParsedResolveInfoFragment(
193
- parsedResolveInfoFragment,
194
- TableType
195
- );
189
+ const resolveData =
190
+ getDataFromParsedResolveInfoFragment(
191
+ parsedResolveInfoFragment,
192
+ TableType
193
+ );
196
194
  const query = queryFromResolveData(
197
195
  sqlFullTableName,
198
196
  undefined,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/plugins/PgRowNode.js"],"names":["PgRowNode","builder","subscriptions","hook","object","build","context","addNodeFetcherForTypeName","pgSql","sql","gql2pg","pgQueryFromResolveData","queryFromResolveData","pgOmit","omit","pgPrepareAndRun","scope","isPgRowType","pgIntrospection","table","namespace","sqlFullTableName","identifier","name","primaryKeyConstraint","primaryKeys","keyAttributes","data","identifiers","resolveContext","parsedResolveInfoFragment","ReturnType","resolveData","resolveInfo","pgClient","liveRecord","rootValue","length","Error","query","undefined","useAsterisk","queryBuilder","selectIdentifiers","forEach","key","idx","where","fragment","getTableAlias","type","typeModifier","text","values","compile","debugSql","enabled","rows","row","__identifiers","fields","nodeIdFieldName","getTypeAndIdentifiersFromNodeId","extend","parseResolveInfo","pgGetGqlTypeByTypeIdAndModifier","pgIntrospectionResultsByKind","introspectionResultsByKind","graphql","GraphQLNonNull","GraphQLID","inflection","describePgEntity","sqlCommentByAddingTags","isRootQuery","fieldWithHooks","class","reduce","memo","TableType","id","fieldName","tableNode","getDataFromParsedResolveInfoFragment","description","wrapDescription","args","resolve","parent","nodeId","Type","e","isPgNodeQuery","pgFieldIntrospection"],"mappings":"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","sourcesContent":["// @flow\nimport type { Plugin } from \"graphile-build\";\nimport debugSql from \"./debugSql\";\n\nexport default (async function PgRowNode(builder, { subscriptions }) {\n builder.hook(\n \"GraphQLObjectType\",\n (object, build, context) => {\n const {\n addNodeFetcherForTypeName,\n pgSql: sql,\n gql2pg,\n pgQueryFromResolveData: queryFromResolveData,\n pgOmit: omit,\n pgPrepareAndRun,\n } = build;\n const {\n scope: { isPgRowType, pgIntrospection: table },\n } = context;\n\n if (!addNodeFetcherForTypeName) {\n // Node plugin must be disabled.\n return object;\n }\n if (!isPgRowType || !table.namespace || omit(table, \"read\")) {\n return object;\n }\n const sqlFullTableName = sql.identifier(table.namespace.name, table.name);\n const primaryKeyConstraint = table.primaryKeyConstraint;\n if (!primaryKeyConstraint) {\n return object;\n }\n const primaryKeys =\n primaryKeyConstraint && primaryKeyConstraint.keyAttributes;\n\n addNodeFetcherForTypeName(\n object.name,\n async (\n data,\n identifiers,\n resolveContext,\n parsedResolveInfoFragment,\n ReturnType,\n resolveData,\n resolveInfo\n ) => {\n const { pgClient } = resolveContext;\n const liveRecord =\n resolveInfo &&\n resolveInfo.rootValue &&\n resolveInfo.rootValue.liveRecord;\n if (identifiers.length !== primaryKeys.length) {\n throw new Error(\"Invalid ID\");\n }\n const query = queryFromResolveData(\n sqlFullTableName,\n undefined,\n resolveData,\n {\n useAsterisk: false, // Because it's only a single relation, no need\n },\n queryBuilder => {\n if (subscriptions && table.primaryKeyConstraint) {\n queryBuilder.selectIdentifiers(table);\n }\n primaryKeys.forEach((key, idx) => {\n queryBuilder.where(\n sql.fragment`${queryBuilder.getTableAlias()}.${sql.identifier(\n key.name\n )} = ${gql2pg(\n identifiers[idx],\n primaryKeys[idx].type,\n primaryKeys[idx].typeModifier\n )}`\n );\n });\n },\n resolveContext,\n resolveInfo && resolveInfo.rootValue\n );\n const { text, values } = sql.compile(query);\n if (debugSql.enabled) debugSql(text);\n const {\n rows: [row],\n } = await pgPrepareAndRun(pgClient, text, values);\n if (subscriptions && liveRecord && row) {\n liveRecord(\"pg\", table, row.__identifiers);\n }\n return row;\n }\n );\n return object;\n },\n [\"PgRowNode\"]\n );\n\n builder.hook(\n \"GraphQLObjectType:fields\",\n (fields, build, context) => {\n const {\n nodeIdFieldName,\n getTypeAndIdentifiersFromNodeId,\n extend,\n parseResolveInfo,\n pgGetGqlTypeByTypeIdAndModifier,\n pgIntrospectionResultsByKind: introspectionResultsByKind,\n pgSql: sql,\n gql2pg,\n graphql: { GraphQLNonNull, GraphQLID },\n inflection,\n pgQueryFromResolveData: queryFromResolveData,\n pgOmit: omit,\n describePgEntity,\n sqlCommentByAddingTags,\n pgPrepareAndRun,\n } = build;\n const {\n scope: { isRootQuery },\n fieldWithHooks,\n } = context;\n\n if (!isRootQuery || !nodeIdFieldName) {\n return fields;\n }\n\n return extend(\n fields,\n introspectionResultsByKind.class.reduce((memo, table) => {\n // PERFORMANCE: These used to be .filter(...) calls\n if (!table.namespace) return memo;\n if (omit(table, \"read\")) return memo;\n\n const TableType = pgGetGqlTypeByTypeIdAndModifier(\n table.type.id,\n null\n );\n const sqlFullTableName = sql.identifier(\n table.namespace.name,\n table.name\n );\n if (TableType) {\n const primaryKeyConstraint = table.primaryKeyConstraint;\n if (!primaryKeyConstraint) {\n return memo;\n }\n const primaryKeys =\n primaryKeyConstraint && primaryKeyConstraint.keyAttributes;\n const fieldName = inflection.tableNode(table);\n memo = extend(\n memo,\n {\n [fieldName]: fieldWithHooks(\n fieldName,\n ({ getDataFromParsedResolveInfoFragment }) => {\n return {\n description: build.wrapDescription(\n `Reads a single \\`${TableType.name}\\` using its globally unique \\`ID\\`.`,\n \"field\"\n ),\n type: TableType,\n args: {\n [nodeIdFieldName]: {\n description: build.wrapDescription(\n `The globally unique \\`ID\\` to be used in selecting a single \\`${TableType.name}\\`.`,\n \"arg\"\n ),\n type: new GraphQLNonNull(GraphQLID),\n },\n },\n async resolve(parent, args, resolveContext, resolveInfo) {\n const { pgClient } = resolveContext;\n const liveRecord =\n resolveInfo.rootValue &&\n resolveInfo.rootValue.liveRecord;\n const nodeId = args[nodeIdFieldName];\n try {\n const {\n Type,\n identifiers,\n } = getTypeAndIdentifiersFromNodeId(nodeId);\n if (Type !== TableType) {\n throw new Error(\"Mismatched type\");\n }\n if (identifiers.length !== primaryKeys.length) {\n throw new Error(\"Invalid ID\");\n }\n\n const parsedResolveInfoFragment = parseResolveInfo(\n resolveInfo\n );\n parsedResolveInfoFragment.args = args; // Allow overriding via makeWrapResolversPlugin\n const resolveData = getDataFromParsedResolveInfoFragment(\n parsedResolveInfoFragment,\n TableType\n );\n const query = queryFromResolveData(\n sqlFullTableName,\n undefined,\n resolveData,\n {\n useAsterisk: false, // Because it's only a single relation, no need\n },\n queryBuilder => {\n if (subscriptions && table.primaryKeyConstraint) {\n queryBuilder.selectIdentifiers(table);\n }\n primaryKeys.forEach((key, idx) => {\n queryBuilder.where(\n sql.fragment`${queryBuilder.getTableAlias()}.${sql.identifier(\n key.name\n )} = ${gql2pg(\n identifiers[idx],\n primaryKeys[idx].type,\n primaryKeys[idx].typeModifier\n )}`\n );\n });\n },\n resolveContext,\n resolveInfo.rootValue\n );\n const { text, values } = sql.compile(query);\n if (debugSql.enabled) debugSql(text);\n const {\n rows: [row],\n } = await pgPrepareAndRun(pgClient, text, values);\n if (liveRecord && row) {\n liveRecord(\"pg\", table, row.__identifiers);\n }\n return row;\n } catch (e) {\n return null;\n }\n },\n };\n },\n {\n isPgNodeQuery: true,\n pgFieldIntrospection: table,\n }\n ),\n },\n `Adding row by globally unique identifier field for ${describePgEntity(\n table\n )}. You can rename this table via a 'Smart Comment':\\n\\n ${sqlCommentByAddingTags(\n table,\n { name: \"newNameHere\" }\n )}`\n );\n }\n return memo;\n }, {}),\n `Adding \"row by node ID\" fields to root Query type`\n );\n },\n [\"PgRowNode\"]\n );\n}: Plugin);\n"],"file":"PgRowNode.js"}
1
+ {"version":3,"sources":["../../src/plugins/PgRowNode.js"],"names":["PgRowNode","builder","subscriptions","hook","object","build","context","addNodeFetcherForTypeName","pgSql","sql","gql2pg","pgQueryFromResolveData","queryFromResolveData","pgOmit","omit","pgPrepareAndRun","scope","isPgRowType","pgIntrospection","table","namespace","sqlFullTableName","identifier","name","primaryKeyConstraint","primaryKeys","keyAttributes","data","identifiers","resolveContext","parsedResolveInfoFragment","ReturnType","resolveData","resolveInfo","pgClient","liveRecord","rootValue","length","Error","query","undefined","useAsterisk","queryBuilder","selectIdentifiers","forEach","key","idx","where","fragment","getTableAlias","type","typeModifier","text","values","compile","debugSql","enabled","rows","row","__identifiers","fields","nodeIdFieldName","getTypeAndIdentifiersFromNodeId","extend","parseResolveInfo","pgGetGqlTypeByTypeIdAndModifier","pgIntrospectionResultsByKind","introspectionResultsByKind","graphql","GraphQLNonNull","GraphQLID","inflection","describePgEntity","sqlCommentByAddingTags","isRootQuery","fieldWithHooks","class","reduce","memo","TableType","id","fieldName","tableNode","getDataFromParsedResolveInfoFragment","description","wrapDescription","args","resolve","parent","nodeId","Type","e","isPgNodeQuery","pgFieldIntrospection"],"mappings":"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","sourcesContent":["// @flow\nimport type { Plugin } from \"graphile-build\";\nimport debugSql from \"./debugSql\";\n\nexport default (async function PgRowNode(builder, { subscriptions }) {\n builder.hook(\n \"GraphQLObjectType\",\n (object, build, context) => {\n const {\n addNodeFetcherForTypeName,\n pgSql: sql,\n gql2pg,\n pgQueryFromResolveData: queryFromResolveData,\n pgOmit: omit,\n pgPrepareAndRun,\n } = build;\n const {\n scope: { isPgRowType, pgIntrospection: table },\n } = context;\n\n if (!addNodeFetcherForTypeName) {\n // Node plugin must be disabled.\n return object;\n }\n if (!isPgRowType || !table.namespace || omit(table, \"read\")) {\n return object;\n }\n const sqlFullTableName = sql.identifier(table.namespace.name, table.name);\n const primaryKeyConstraint = table.primaryKeyConstraint;\n if (!primaryKeyConstraint) {\n return object;\n }\n const primaryKeys =\n primaryKeyConstraint && primaryKeyConstraint.keyAttributes;\n\n addNodeFetcherForTypeName(\n object.name,\n async (\n data,\n identifiers,\n resolveContext,\n parsedResolveInfoFragment,\n ReturnType,\n resolveData,\n resolveInfo\n ) => {\n const { pgClient } = resolveContext;\n const liveRecord =\n resolveInfo &&\n resolveInfo.rootValue &&\n resolveInfo.rootValue.liveRecord;\n if (identifiers.length !== primaryKeys.length) {\n throw new Error(\"Invalid ID\");\n }\n const query = queryFromResolveData(\n sqlFullTableName,\n undefined,\n resolveData,\n {\n useAsterisk: false, // Because it's only a single relation, no need\n },\n queryBuilder => {\n if (subscriptions && table.primaryKeyConstraint) {\n queryBuilder.selectIdentifiers(table);\n }\n primaryKeys.forEach((key, idx) => {\n queryBuilder.where(\n sql.fragment`${queryBuilder.getTableAlias()}.${sql.identifier(\n key.name\n )} = ${gql2pg(\n identifiers[idx],\n primaryKeys[idx].type,\n primaryKeys[idx].typeModifier\n )}`\n );\n });\n },\n resolveContext,\n resolveInfo && resolveInfo.rootValue\n );\n const { text, values } = sql.compile(query);\n if (debugSql.enabled) debugSql(text);\n const {\n rows: [row],\n } = await pgPrepareAndRun(pgClient, text, values);\n if (subscriptions && liveRecord && row) {\n liveRecord(\"pg\", table, row.__identifiers);\n }\n return row;\n }\n );\n return object;\n },\n [\"PgRowNode\"]\n );\n\n builder.hook(\n \"GraphQLObjectType:fields\",\n (fields, build, context) => {\n const {\n nodeIdFieldName,\n getTypeAndIdentifiersFromNodeId,\n extend,\n parseResolveInfo,\n pgGetGqlTypeByTypeIdAndModifier,\n pgIntrospectionResultsByKind: introspectionResultsByKind,\n pgSql: sql,\n gql2pg,\n graphql: { GraphQLNonNull, GraphQLID },\n inflection,\n pgQueryFromResolveData: queryFromResolveData,\n pgOmit: omit,\n describePgEntity,\n sqlCommentByAddingTags,\n pgPrepareAndRun,\n } = build;\n const {\n scope: { isRootQuery },\n fieldWithHooks,\n } = context;\n\n if (!isRootQuery || !nodeIdFieldName) {\n return fields;\n }\n\n return extend(\n fields,\n introspectionResultsByKind.class.reduce((memo, table) => {\n // PERFORMANCE: These used to be .filter(...) calls\n if (!table.namespace) return memo;\n if (omit(table, \"read\")) return memo;\n\n const TableType = pgGetGqlTypeByTypeIdAndModifier(\n table.type.id,\n null\n );\n const sqlFullTableName = sql.identifier(\n table.namespace.name,\n table.name\n );\n if (TableType) {\n const primaryKeyConstraint = table.primaryKeyConstraint;\n if (!primaryKeyConstraint) {\n return memo;\n }\n const primaryKeys =\n primaryKeyConstraint && primaryKeyConstraint.keyAttributes;\n const fieldName = inflection.tableNode(table);\n memo = extend(\n memo,\n {\n [fieldName]: fieldWithHooks(\n fieldName,\n ({ getDataFromParsedResolveInfoFragment }) => {\n return {\n description: build.wrapDescription(\n `Reads a single \\`${TableType.name}\\` using its globally unique \\`ID\\`.`,\n \"field\"\n ),\n type: TableType,\n args: {\n [nodeIdFieldName]: {\n description: build.wrapDescription(\n `The globally unique \\`ID\\` to be used in selecting a single \\`${TableType.name}\\`.`,\n \"arg\"\n ),\n type: new GraphQLNonNull(GraphQLID),\n },\n },\n async resolve(parent, args, resolveContext, resolveInfo) {\n const { pgClient } = resolveContext;\n const liveRecord =\n resolveInfo.rootValue &&\n resolveInfo.rootValue.liveRecord;\n const nodeId = args[nodeIdFieldName];\n try {\n const { Type, identifiers } =\n getTypeAndIdentifiersFromNodeId(nodeId);\n if (Type !== TableType) {\n throw new Error(\"Mismatched type\");\n }\n if (identifiers.length !== primaryKeys.length) {\n throw new Error(\"Invalid ID\");\n }\n\n const parsedResolveInfoFragment =\n parseResolveInfo(resolveInfo);\n parsedResolveInfoFragment.args = args; // Allow overriding via makeWrapResolversPlugin\n const resolveData =\n getDataFromParsedResolveInfoFragment(\n parsedResolveInfoFragment,\n TableType\n );\n const query = queryFromResolveData(\n sqlFullTableName,\n undefined,\n resolveData,\n {\n useAsterisk: false, // Because it's only a single relation, no need\n },\n queryBuilder => {\n if (subscriptions && table.primaryKeyConstraint) {\n queryBuilder.selectIdentifiers(table);\n }\n primaryKeys.forEach((key, idx) => {\n queryBuilder.where(\n sql.fragment`${queryBuilder.getTableAlias()}.${sql.identifier(\n key.name\n )} = ${gql2pg(\n identifiers[idx],\n primaryKeys[idx].type,\n primaryKeys[idx].typeModifier\n )}`\n );\n });\n },\n resolveContext,\n resolveInfo.rootValue\n );\n const { text, values } = sql.compile(query);\n if (debugSql.enabled) debugSql(text);\n const {\n rows: [row],\n } = await pgPrepareAndRun(pgClient, text, values);\n if (liveRecord && row) {\n liveRecord(\"pg\", table, row.__identifiers);\n }\n return row;\n } catch (e) {\n return null;\n }\n },\n };\n },\n {\n isPgNodeQuery: true,\n pgFieldIntrospection: table,\n }\n ),\n },\n `Adding row by globally unique identifier field for ${describePgEntity(\n table\n )}. You can rename this table via a 'Smart Comment':\\n\\n ${sqlCommentByAddingTags(\n table,\n { name: \"newNameHere\" }\n )}`\n );\n }\n return memo;\n }, {}),\n `Adding \"row by node ID\" fields to root Query type`\n );\n },\n [\"PgRowNode\"]\n );\n}: Plugin);\n"],"file":"PgRowNode.js"}
@@ -144,20 +144,20 @@ var PgTablesPlugin = function PgTablesPlugin(builder, {
144
144
  if (type.id === "20"
145
145
  /* bigint */
146
146
  ) {
147
- /*
148
- * When migrating from 'int' to 'bigint' we want
149
- * to maintain nodeIDs in the safe range before
150
- * moving to strings for larger numbers. Since we
151
- * can represent ints up to MAX_SAFE_INTEGER
152
- * (2^53 - 1) fine, we're using that as the
153
- * boundary.
154
- */
155
- const int = parseInt(identifier, 10);
156
-
157
- if (int >= -Number.MAX_SAFE_INTEGER && int <= Number.MAX_SAFE_INTEGER) {
158
- return int;
159
- }
147
+ /*
148
+ * When migrating from 'int' to 'bigint' we want
149
+ * to maintain nodeIDs in the safe range before
150
+ * moving to strings for larger numbers. Since we
151
+ * can represent ints up to MAX_SAFE_INTEGER
152
+ * (2^53 - 1) fine, we're using that as the
153
+ * boundary.
154
+ */
155
+ const int = parseInt(identifier, 10);
156
+
157
+ if (int >= -Number.MAX_SAFE_INTEGER && int <= Number.MAX_SAFE_INTEGER) {
158
+ return int;
160
159
  }
160
+ }
161
161
 
162
162
  return identifier;
163
163
  });
@@ -411,9 +411,8 @@ export default (function PgTablesPlugin(
411
411
  TableType
412
412
  ),
413
413
  resolve(data, _args, resolveContext, resolveInfo) {
414
- const safeAlias = getSafeAliasFromResolveInfo(
415
- resolveInfo
416
- );
414
+ const safeAlias =
415
+ getSafeAliasFromResolveInfo(resolveInfo);
417
416
  const record = handleNullRow(
418
417
  data[safeAlias],
419
418
  data.__identifiers
@@ -492,9 +491,8 @@ export default (function PgTablesPlugin(
492
491
  )
493
492
  ),
494
493
  resolve(data, _args, resolveContext, resolveInfo) {
495
- const safeAlias = getSafeAliasFromResolveInfo(
496
- resolveInfo
497
- );
494
+ const safeAlias =
495
+ getSafeAliasFromResolveInfo(resolveInfo);
498
496
  const liveRecord =
499
497
  resolveInfo.rootValue &&
500
498
  resolveInfo.rootValue.liveRecord;
@@ -543,9 +541,8 @@ export default (function PgTablesPlugin(
543
541
  new GraphQLList(new GraphQLNonNull(EdgeType))
544
542
  ),
545
543
  resolve(data, _args, _context, resolveInfo) {
546
- const safeAlias = getSafeAliasFromResolveInfo(
547
- resolveInfo
548
- );
544
+ const safeAlias =
545
+ getSafeAliasFromResolveInfo(resolveInfo);
549
546
  return data.data.map(entry => ({
550
547
  ...entry,
551
548
  ...entry[safeAlias],
@@ -637,10 +634,8 @@ export default (function PgTablesPlugin(
637
634
  pgRegisterGqlInputTypeByTypeId(
638
635
  arrayTablePgType.id,
639
636
  (_set, modifier) => {
640
- const RelevantTableInputType = pgGetGqlInputTypeByTypeIdAndModifier(
641
- tablePgType.id,
642
- modifier
643
- );
637
+ const RelevantTableInputType =
638
+ pgGetGqlInputTypeByTypeIdAndModifier(tablePgType.id, modifier);
644
639
  if (RelevantTableInputType) {
645
640
  return new GraphQLList(RelevantTableInputType);
646
641
  }