graphile-build-pg 4.9.1 → 4.11.2

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 (76) hide show
  1. package/README.md +1 -0
  2. package/node8plus/plugins/PageInfoStartEndCursor.js +2 -2
  3. package/node8plus/plugins/PageInfoStartEndCursor.js.flow +6 -2
  4. package/node8plus/plugins/PageInfoStartEndCursor.js.map +1 -1
  5. package/node8plus/plugins/PgAllRows.js +1 -1
  6. package/node8plus/plugins/PgAllRows.js.flow +6 -3
  7. package/node8plus/plugins/PgAllRows.js.map +1 -1
  8. package/node8plus/plugins/PgBackwardRelationPlugin.js +2 -2
  9. package/node8plus/plugins/PgBackwardRelationPlugin.js.flow +8 -2
  10. package/node8plus/plugins/PgBackwardRelationPlugin.js.map +1 -1
  11. package/node8plus/plugins/PgBasicsPlugin.js +1 -1
  12. package/node8plus/plugins/PgBasicsPlugin.js.flow +1 -1
  13. package/node8plus/plugins/PgBasicsPlugin.js.map +1 -1
  14. package/node8plus/plugins/PgConditionComputedColumnPlugin.js +1 -1
  15. package/node8plus/plugins/PgConditionComputedColumnPlugin.js.flow +4 -1
  16. package/node8plus/plugins/PgConditionComputedColumnPlugin.js.map +1 -1
  17. package/node8plus/plugins/PgConnectionArgCondition.js +3 -3
  18. package/node8plus/plugins/PgConnectionArgCondition.js.flow +11 -3
  19. package/node8plus/plugins/PgConnectionArgCondition.js.map +1 -1
  20. package/node8plus/plugins/PgConnectionArgFirstLastBeforeAfter.js +5 -5
  21. package/node8plus/plugins/PgConnectionArgFirstLastBeforeAfter.js.flow +20 -7
  22. package/node8plus/plugins/PgConnectionArgFirstLastBeforeAfter.js.map +1 -1
  23. package/node8plus/plugins/PgConnectionArgOrderBy.js +2 -2
  24. package/node8plus/plugins/PgConnectionArgOrderBy.js.flow +8 -2
  25. package/node8plus/plugins/PgConnectionArgOrderBy.js.map +1 -1
  26. package/node8plus/plugins/PgConnectionTotalCount.js +1 -1
  27. package/node8plus/plugins/PgConnectionTotalCount.js.flow +4 -1
  28. package/node8plus/plugins/PgConnectionTotalCount.js.map +1 -1
  29. package/node8plus/plugins/PgForwardRelationPlugin.js +1 -1
  30. package/node8plus/plugins/PgForwardRelationPlugin.js.flow +4 -1
  31. package/node8plus/plugins/PgForwardRelationPlugin.js.map +1 -1
  32. package/node8plus/plugins/PgIntrospectionPlugin.d.ts +1 -0
  33. package/node8plus/plugins/PgIntrospectionPlugin.js +182 -159
  34. package/node8plus/plugins/PgIntrospectionPlugin.js.flow +218 -198
  35. package/node8plus/plugins/PgIntrospectionPlugin.js.map +1 -1
  36. package/node8plus/plugins/PgJWTPlugin.js +1 -1
  37. package/node8plus/plugins/PgJWTPlugin.js.flow +3 -1
  38. package/node8plus/plugins/PgJWTPlugin.js.map +1 -1
  39. package/node8plus/plugins/PgMutationCreatePlugin.js +7 -7
  40. package/node8plus/plugins/PgMutationCreatePlugin.js.flow +26 -7
  41. package/node8plus/plugins/PgMutationCreatePlugin.js.map +1 -1
  42. package/node8plus/plugins/PgMutationPayloadEdgePlugin.js +2 -2
  43. package/node8plus/plugins/PgMutationPayloadEdgePlugin.js.flow +8 -2
  44. package/node8plus/plugins/PgMutationPayloadEdgePlugin.js.map +1 -1
  45. package/node8plus/plugins/PgMutationUpdateDeletePlugin.js +11 -11
  46. package/node8plus/plugins/PgMutationUpdateDeletePlugin.js.flow +40 -11
  47. package/node8plus/plugins/PgMutationUpdateDeletePlugin.js.map +1 -1
  48. package/node8plus/plugins/PgRecordFunctionConnectionPlugin.js +6 -6
  49. package/node8plus/plugins/PgRecordFunctionConnectionPlugin.js.flow +24 -6
  50. package/node8plus/plugins/PgRecordFunctionConnectionPlugin.js.map +1 -1
  51. package/node8plus/plugins/PgRecordReturnTypesPlugin.js +1 -1
  52. package/node8plus/plugins/PgRecordReturnTypesPlugin.js.flow +6 -3
  53. package/node8plus/plugins/PgRecordReturnTypesPlugin.js.map +1 -1
  54. package/node8plus/plugins/PgRowNode.js +2 -2
  55. package/node8plus/plugins/PgRowNode.js.flow +8 -2
  56. package/node8plus/plugins/PgRowNode.js.map +1 -1
  57. package/node8plus/plugins/PgScalarFunctionConnectionPlugin.js +6 -6
  58. package/node8plus/plugins/PgScalarFunctionConnectionPlugin.js.flow +24 -6
  59. package/node8plus/plugins/PgScalarFunctionConnectionPlugin.js.map +1 -1
  60. package/node8plus/plugins/PgTablesPlugin.js +13 -13
  61. package/node8plus/plugins/PgTablesPlugin.js.flow +56 -20
  62. package/node8plus/plugins/PgTablesPlugin.js.map +1 -1
  63. package/node8plus/plugins/PgTypesPlugin.js +62 -78
  64. package/node8plus/plugins/PgTypesPlugin.js.flow +193 -76
  65. package/node8plus/plugins/PgTypesPlugin.js.map +1 -1
  66. package/node8plus/plugins/makeProcField.js +3 -3
  67. package/node8plus/plugins/makeProcField.js.flow +16 -7
  68. package/node8plus/plugins/makeProcField.js.map +1 -1
  69. package/node8plus/plugins/viaTemporaryTable.js +1 -1
  70. package/node8plus/plugins/viaTemporaryTable.js.flow +8 -4
  71. package/node8plus/plugins/viaTemporaryTable.js.map +1 -1
  72. package/node8plus/postgresInterval.js +12 -33
  73. package/node8plus/postgresInterval.js.flow +22 -51
  74. package/node8plus/postgresInterval.js.map +1 -1
  75. package/package.json +9 -9
  76. package/res/watch-fixtures.sql +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/plugins/PgMutationUpdateDeletePlugin.js"],"names":["debug","PgMutationUpdateDeletePlugin","builder","pgDisableDefaultMutations","hook","fields","build","context","newWithHooks","getNodeIdForTypeAndIdentifiers","getTypeAndIdentifiersFromNodeId","nodeIdFieldName","fieldDataGeneratorsByType","extend","parseResolveInfo","getTypeByName","gql2pg","pgGetGqlTypeByTypeIdAndModifier","pgGetGqlInputTypeByTypeIdAndModifier","pgIntrospectionResultsByKind","introspectionResultsByKind","pgSql","sql","graphql","GraphQLNonNull","GraphQLInputObjectType","GraphQLString","GraphQLObjectType","GraphQLID","pgColumnFilter","inflection","pgQueryFromResolveData","queryFromResolveData","pgOmit","omit","pgViaTemporaryTable","viaTemporaryTable","describePgEntity","sqlCommentByAddingTags","pgField","scope","isRootMutation","fieldWithHooks","reduce","outerMemo","mode","class","memo","table","namespace","canUpdate","isUpdatable","attributes","find","attr","canDelete","isDeletable","TableType","type","id","commonCodeRenameMe","pgClient","resolveInfo","getDataFromParsedResolveInfoFragment","PayloadType","args","condition","resolveContext","input","parsedResolveInfoFragment","resolveData","sqlTypeIdentifier","identifier","name","sqlMutationQuery","sqlColumns","sqlValues","inputData","patchField","tableFieldName","forEach","fieldName","column","val","push","typeModifier","length","query","join","map","col","i","fragment","modifiedRowAlias","Symbol","rootValue","row","rows","e","Error","pluralize","_singularizedTableName","clientMutationId","data","uniqueConstraints","constraints","filter","con","Table","tableTypeName","TablePatch","patchType","description","tableName","deletedNodeIdFieldName","deletedNodeId","Object","assign","addDataGenerator","fieldDataGeneratorsByTableType","get","gens","gen","resolve","__identifiers","isPgMutationPayloadDeletedNodeIdField","__origin","isMutationPayload","isPgUpdatePayloadType","isPgDeletePayloadType","pgIntrospection","primaryKeyConstraint","primaryKeys","keyAttributes","InputType","isPgUpdateInputType","isPgUpdateNodeInputType","isPgDeleteInputType","isPgDeleteNodeInputType","pgInflection","isMutationInput","parent","nodeId","Type","identifiers","key","idx","isPgNodeMutation","pgFieldIntrospection","constraint","keys","every","_","some","typeId","isPgUpdateByKeysInputType","isPgDeleteByKeysInputType","pgKeys","pgFieldConstraint"],"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 (async function PgMutationUpdateDeletePlugin(\n builder,\n { pgDisableDefaultMutations }\n) {\n if (pgDisableDefaultMutations) {\n return;\n }\n\n builder.hook(\n \"GraphQLObjectType:fields\",\n (fields, build, context) => {\n const {\n newWithHooks,\n getNodeIdForTypeAndIdentifiers,\n getTypeAndIdentifiersFromNodeId,\n nodeIdFieldName,\n fieldDataGeneratorsByType,\n extend,\n parseResolveInfo,\n getTypeByName,\n gql2pg,\n pgGetGqlTypeByTypeIdAndModifier,\n pgGetGqlInputTypeByTypeIdAndModifier,\n pgIntrospectionResultsByKind: introspectionResultsByKind,\n pgSql: sql,\n graphql: {\n GraphQLNonNull,\n GraphQLInputObjectType,\n GraphQLString,\n GraphQLObjectType,\n GraphQLID,\n },\n pgColumnFilter,\n inflection,\n pgQueryFromResolveData: queryFromResolveData,\n pgOmit: omit,\n pgViaTemporaryTable: viaTemporaryTable,\n describePgEntity,\n sqlCommentByAddingTags,\n pgField,\n } = build;\n const {\n scope: { isRootMutation },\n fieldWithHooks,\n } = context;\n\n if (!isRootMutation) {\n return fields;\n }\n\n return extend(\n fields,\n [\"update\", \"delete\"].reduce(\n (outerMemo, mode) =>\n introspectionResultsByKind.class.reduce((memo, table) => {\n // PERFORMANCE: These used to be .filter(...) calls\n if (!table.namespace) return memo;\n const canUpdate =\n mode === \"update\" &&\n table.isUpdatable &&\n !omit(table, \"update\") &&\n // Check at least one attribute is updatable\n table.attributes.find(attr => !omit(attr, \"update\"));\n const canDelete =\n mode === \"delete\" &&\n table.isDeletable &&\n !omit(table, \"delete\");\n if (!canUpdate && !canDelete) return memo;\n\n const TableType = pgGetGqlTypeByTypeIdAndModifier(\n table.type.id,\n null\n );\n if (!TableType) {\n return memo;\n }\n async function commonCodeRenameMe(\n pgClient,\n resolveInfo,\n getDataFromParsedResolveInfoFragment,\n PayloadType,\n args,\n condition,\n context,\n resolveContext\n ) {\n const { input } = args;\n const parsedResolveInfoFragment = parseResolveInfo(resolveInfo);\n parsedResolveInfoFragment.args = args; // Allow overriding via makeWrapResolversPlugin\n const resolveData = getDataFromParsedResolveInfoFragment(\n parsedResolveInfoFragment,\n PayloadType\n );\n\n const sqlTypeIdentifier = sql.identifier(\n table.namespace.name,\n table.name\n );\n\n let sqlMutationQuery;\n if (mode === \"update\") {\n const sqlColumns = [];\n const sqlValues = [];\n const inputData =\n input[\n inflection.patchField(inflection.tableFieldName(table))\n ];\n table.attributes.forEach(attr => {\n // PERFORMANCE: These used to be .filter(...) calls\n if (!pgColumnFilter(attr, build, context)) return;\n if (omit(attr, \"update\")) return;\n\n const fieldName = inflection.column(attr);\n if (\n fieldName in inputData /* Because we care about null! */\n ) {\n const val = inputData[fieldName];\n sqlColumns.push(sql.identifier(attr.name));\n sqlValues.push(gql2pg(val, attr.type, attr.typeModifier));\n }\n });\n if (sqlColumns.length === 0) {\n return null;\n }\n sqlMutationQuery = sql.query`\\\nupdate ${sql.identifier(table.namespace.name, table.name)} set ${sql.join(\n sqlColumns.map(\n (col, i) => sql.fragment`${col} = ${sqlValues[i]}`\n ),\n \", \"\n )}\nwhere ${condition}\nreturning *`;\n } else {\n sqlMutationQuery = sql.query`\\\ndelete from ${sql.identifier(table.namespace.name, table.name)}\nwhere ${condition}\nreturning *`;\n }\n\n const modifiedRowAlias = sql.identifier(Symbol());\n const query = queryFromResolveData(\n modifiedRowAlias,\n modifiedRowAlias,\n resolveData,\n {},\n null,\n resolveContext,\n resolveInfo.rootValue\n );\n let row;\n try {\n await pgClient.query(\"SAVEPOINT graphql_mutation\");\n const rows = await viaTemporaryTable(\n pgClient,\n sqlTypeIdentifier,\n sqlMutationQuery,\n modifiedRowAlias,\n query\n );\n row = rows[0];\n await pgClient.query(\"RELEASE SAVEPOINT graphql_mutation\");\n } catch (e) {\n await pgClient.query(\n \"ROLLBACK TO SAVEPOINT graphql_mutation\"\n );\n throw e;\n }\n if (!row) {\n throw new Error(\n `No values were ${mode}d in collection '${inflection.pluralize(\n inflection._singularizedTableName(table)\n )}' because no values you can ${mode} were found matching these criteria.`\n );\n }\n return {\n clientMutationId: input.clientMutationId,\n data: row,\n };\n }\n if (TableType) {\n const uniqueConstraints = table.constraints.filter(\n con => con.type === \"u\" || con.type === \"p\"\n );\n const Table = pgGetGqlTypeByTypeIdAndModifier(\n table.type.id,\n null\n );\n const tableTypeName = Table.name;\n const TablePatch = getTypeByName(\n inflection.patchType(Table.name)\n );\n const PayloadType = newWithHooks(\n GraphQLObjectType,\n {\n name: inflection[\n mode === \"delete\"\n ? \"deletePayloadType\"\n : \"updatePayloadType\"\n ](table),\n description: `The output of our ${mode} \\`${tableTypeName}\\` mutation.`,\n fields: ({ fieldWithHooks }) => {\n const tableName = inflection.tableFieldName(table);\n // This should really be `-node-id` but for compatibility with PostGraphQL v3 we haven't made that change.\n const deletedNodeIdFieldName = inflection.deletedNodeId(\n table\n );\n return Object.assign(\n {\n clientMutationId: {\n description:\n \"The exact same `clientMutationId` that was provided in the mutation input, unchanged and unused. May be used by a client to track mutations.\",\n type: GraphQLString,\n },\n [tableName]: pgField(\n build,\n fieldWithHooks,\n tableName,\n {\n description: `The \\`${tableTypeName}\\` that was ${mode}d by this mutation.`,\n type: Table,\n },\n {},\n false\n ),\n },\n mode === \"delete\"\n ? {\n [deletedNodeIdFieldName]: fieldWithHooks(\n deletedNodeIdFieldName,\n ({ addDataGenerator }) => {\n const fieldDataGeneratorsByTableType = fieldDataGeneratorsByType.get(\n TableType\n );\n\n const gens =\n fieldDataGeneratorsByTableType &&\n fieldDataGeneratorsByTableType[\n nodeIdFieldName\n ];\n if (gens) {\n gens.forEach(gen => addDataGenerator(gen));\n }\n return {\n type: GraphQLID,\n resolve(data) {\n return (\n data.data.__identifiers &&\n getNodeIdForTypeAndIdentifiers(\n Table,\n ...data.data.__identifiers\n )\n );\n },\n };\n },\n {\n isPgMutationPayloadDeletedNodeIdField: true,\n }\n ),\n }\n : null\n );\n },\n },\n {\n __origin: `Adding table ${mode} mutation payload type for ${describePgEntity(\n table\n )}. You can rename the table's GraphQL type via a 'Smart Comment':\\n\\n ${sqlCommentByAddingTags(\n table,\n {\n name: \"newNameHere\",\n }\n )}`,\n isMutationPayload: true,\n isPgUpdatePayloadType: mode === \"update\",\n isPgDeletePayloadType: mode === \"delete\",\n pgIntrospection: table,\n }\n );\n\n // NodeId\n const primaryKeyConstraint = table.primaryKeyConstraint;\n if (nodeIdFieldName && primaryKeyConstraint) {\n const primaryKeys =\n primaryKeyConstraint && primaryKeyConstraint.keyAttributes;\n const fieldName = inflection[\n mode === \"update\" ? \"updateNode\" : \"deleteNode\"\n ](table);\n const InputType = newWithHooks(\n GraphQLInputObjectType,\n {\n description: `All input for the \\`${fieldName}\\` mutation.`,\n name: inflection[\n mode === \"update\"\n ? \"updateNodeInputType\"\n : \"deleteNodeInputType\"\n ](table),\n fields: Object.assign(\n {\n clientMutationId: {\n description:\n \"An arbitrary string value with no semantic meaning. Will be included in the payload verbatim. May be used to track mutations by the client.\",\n type: GraphQLString,\n },\n [nodeIdFieldName]: {\n description: `The globally unique \\`ID\\` which will identify a single \\`${tableTypeName}\\` to be ${mode}d.`,\n type: new GraphQLNonNull(GraphQLID),\n },\n },\n mode === \"update\"\n ? {\n [inflection.patchField(\n inflection.tableFieldName(table)\n )]: {\n description: `An object where the defined keys will be set on the \\`${tableTypeName}\\` being ${mode}d.`,\n type: new GraphQLNonNull(TablePatch),\n },\n }\n : null\n ),\n },\n {\n __origin: `Adding table ${mode} (by node ID) mutation input type for ${describePgEntity(\n table\n )}. You can rename the table's GraphQL type via a 'Smart Comment':\\n\\n ${sqlCommentByAddingTags(\n table,\n {\n name: \"newNameHere\",\n }\n )}`,\n isPgUpdateInputType: mode === \"update\",\n isPgUpdateNodeInputType: mode === \"update\",\n isPgDeleteInputType: mode === \"delete\",\n isPgDeleteNodeInputType: mode === \"delete\",\n pgInflection: table, // TODO:v5: remove - TYPO!\n pgIntrospection: table,\n isMutationInput: true,\n }\n );\n\n memo = extend(\n memo,\n {\n [fieldName]: fieldWithHooks(\n fieldName,\n context => {\n const {\n getDataFromParsedResolveInfoFragment,\n } = context;\n return {\n description:\n mode === \"update\"\n ? `Updates a single \\`${tableTypeName}\\` using its globally unique id and a patch.`\n : `Deletes a single \\`${tableTypeName}\\` using its globally unique id.`,\n type: PayloadType,\n args: {\n input: {\n type: new GraphQLNonNull(InputType),\n },\n },\n async resolve(\n parent,\n args,\n resolveContext,\n resolveInfo\n ) {\n const { input } = args;\n const { pgClient } = resolveContext;\n const nodeId = input[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 return commonCodeRenameMe(\n pgClient,\n resolveInfo,\n getDataFromParsedResolveInfoFragment,\n PayloadType,\n args,\n sql.fragment`(${sql.join(\n primaryKeys.map(\n (key, idx) =>\n sql.fragment`${sql.identifier(\n key.name\n )} = ${gql2pg(\n identifiers[idx],\n key.type,\n key.typeModifier\n )}`\n ),\n \") and (\"\n )})`,\n context,\n resolveContext\n );\n } catch (e) {\n debug(e);\n return null;\n }\n },\n };\n },\n {\n isPgNodeMutation: true,\n pgFieldIntrospection: table,\n [mode === \"update\"\n ? \"isPgUpdateMutationField\"\n : \"isPgDeleteMutationField\"]: true,\n }\n ),\n },\n \"Adding ${mode} mutation for ${describePgEntity(table)}\"\n );\n }\n\n // Unique\n uniqueConstraints.forEach(constraint => {\n if (omit(constraint, mode)) {\n return;\n }\n const keys = constraint.keyAttributes;\n if (!keys.every(_ => _)) {\n throw new Error(\n `Consistency error: could not find an attribute in the constraint when building the ${mode} mutation for ${describePgEntity(\n table\n )}!`\n );\n }\n if (keys.some(key => omit(key, \"read\"))) {\n return;\n }\n const fieldName = inflection[\n mode === \"update\" ? \"updateByKeys\" : \"deleteByKeys\"\n ](keys, table, constraint);\n const InputType = newWithHooks(\n GraphQLInputObjectType,\n {\n description: `All input for the \\`${fieldName}\\` mutation.`,\n name: inflection[\n mode === \"update\"\n ? \"updateByKeysInputType\"\n : \"deleteByKeysInputType\"\n ](keys, table, constraint),\n fields: Object.assign(\n {\n clientMutationId: {\n type: GraphQLString,\n },\n },\n mode === \"update\"\n ? {\n [inflection.patchField(\n inflection.tableFieldName(table)\n )]: {\n description: `An object where the defined keys will be set on the \\`${tableTypeName}\\` being ${mode}d.`,\n type: new GraphQLNonNull(TablePatch),\n },\n }\n : null,\n keys.reduce((memo, key) => {\n memo[inflection.column(key)] = {\n description: key.description,\n type: new GraphQLNonNull(\n pgGetGqlInputTypeByTypeIdAndModifier(\n key.typeId,\n key.typeModifier\n )\n ),\n };\n return memo;\n }, {})\n ),\n },\n {\n __origin: `Adding table ${mode} mutation input type for ${describePgEntity(\n constraint\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 isPgUpdateInputType: mode === \"update\",\n isPgUpdateByKeysInputType: mode === \"update\",\n isPgDeleteInputType: mode === \"delete\",\n isPgDeleteByKeysInputType: mode === \"delete\",\n pgInflection: table, // TODO:v5: remove - TYPO!\n pgIntrospection: table,\n pgKeys: keys,\n isMutationInput: true,\n }\n );\n\n memo = extend(\n memo,\n {\n [fieldName]: fieldWithHooks(\n fieldName,\n context => {\n const {\n getDataFromParsedResolveInfoFragment,\n } = context;\n return {\n description:\n mode === \"update\"\n ? `Updates a single \\`${tableTypeName}\\` using a unique key and a patch.`\n : `Deletes a single \\`${tableTypeName}\\` using a unique key.`,\n type: PayloadType,\n args: {\n input: {\n type: new GraphQLNonNull(InputType),\n },\n },\n async resolve(\n parent,\n args,\n resolveContext,\n resolveInfo\n ) {\n const { input } = args;\n const { pgClient } = resolveContext;\n return commonCodeRenameMe(\n pgClient,\n resolveInfo,\n getDataFromParsedResolveInfoFragment,\n PayloadType,\n args,\n sql.fragment`(${sql.join(\n keys.map(\n key =>\n sql.fragment`${sql.identifier(\n key.name\n )} = ${gql2pg(\n input[inflection.column(key)],\n key.type,\n key.typeModifier\n )}`\n ),\n \") and (\"\n )})`,\n context,\n resolveContext\n );\n },\n };\n },\n {\n isPgNodeMutation: false,\n pgFieldIntrospection: table,\n pgFieldConstraint: constraint,\n [mode === \"update\"\n ? \"isPgUpdateMutationField\"\n : \"isPgDeleteMutationField\"]: true,\n }\n ),\n },\n `Adding ${mode} mutation for ${describePgEntity(\n constraint\n )}`\n );\n });\n }\n return memo;\n }, outerMemo),\n {}\n ),\n `Adding default update/delete mutations to root Mutation type`\n );\n },\n [\"PgMutationUpdateDelete\"]\n );\n}: Plugin);\n"],"file":"PgMutationUpdateDeletePlugin.js"}
1
+ {"version":3,"sources":["../../src/plugins/PgMutationUpdateDeletePlugin.js"],"names":["debug","PgMutationUpdateDeletePlugin","builder","pgDisableDefaultMutations","hook","fields","build","context","newWithHooks","getNodeIdForTypeAndIdentifiers","getTypeAndIdentifiersFromNodeId","nodeIdFieldName","fieldDataGeneratorsByType","extend","parseResolveInfo","getTypeByName","gql2pg","pgGetGqlTypeByTypeIdAndModifier","pgGetGqlInputTypeByTypeIdAndModifier","pgIntrospectionResultsByKind","introspectionResultsByKind","pgSql","sql","graphql","GraphQLNonNull","GraphQLInputObjectType","GraphQLString","GraphQLObjectType","GraphQLID","pgColumnFilter","inflection","pgQueryFromResolveData","queryFromResolveData","pgOmit","omit","pgViaTemporaryTable","viaTemporaryTable","describePgEntity","sqlCommentByAddingTags","pgField","scope","isRootMutation","fieldWithHooks","reduce","outerMemo","mode","class","memo","table","namespace","canUpdate","isUpdatable","attributes","find","attr","canDelete","isDeletable","TableType","type","id","commonCodeRenameMe","pgClient","resolveInfo","getDataFromParsedResolveInfoFragment","PayloadType","args","condition","resolveContext","input","parsedResolveInfoFragment","resolveData","sqlTypeIdentifier","identifier","name","sqlMutationQuery","sqlColumns","sqlValues","inputData","patchField","tableFieldName","forEach","fieldName","column","val","push","typeModifier","length","query","join","map","col","i","fragment","modifiedRowAlias","Symbol","rootValue","row","rows","e","Error","pluralize","_singularizedTableName","clientMutationId","data","uniqueConstraints","constraints","filter","con","Table","tableTypeName","TablePatch","patchType","description","wrapDescription","tableName","deletedNodeIdFieldName","deletedNodeId","Object","assign","addDataGenerator","fieldDataGeneratorsByTableType","get","gens","gen","resolve","__identifiers","isPgMutationPayloadDeletedNodeIdField","__origin","isMutationPayload","isPgUpdatePayloadType","isPgDeletePayloadType","pgIntrospection","primaryKeyConstraint","primaryKeys","keyAttributes","InputType","isPgUpdateInputType","isPgUpdateNodeInputType","isPgDeleteInputType","isPgDeleteNodeInputType","pgInflection","isMutationInput","parent","nodeId","Type","identifiers","key","idx","isPgNodeMutation","pgFieldIntrospection","constraint","keys","every","_","some","typeId","isPgUpdateByKeysInputType","isPgDeleteByKeysInputType","pgKeys","pgFieldConstraint"],"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 (async function PgMutationUpdateDeletePlugin(\n builder,\n { pgDisableDefaultMutations }\n) {\n if (pgDisableDefaultMutations) {\n return;\n }\n\n builder.hook(\n \"GraphQLObjectType:fields\",\n (fields, build, context) => {\n const {\n newWithHooks,\n getNodeIdForTypeAndIdentifiers,\n getTypeAndIdentifiersFromNodeId,\n nodeIdFieldName,\n fieldDataGeneratorsByType,\n extend,\n parseResolveInfo,\n getTypeByName,\n gql2pg,\n pgGetGqlTypeByTypeIdAndModifier,\n pgGetGqlInputTypeByTypeIdAndModifier,\n pgIntrospectionResultsByKind: introspectionResultsByKind,\n pgSql: sql,\n graphql: {\n GraphQLNonNull,\n GraphQLInputObjectType,\n GraphQLString,\n GraphQLObjectType,\n GraphQLID,\n },\n pgColumnFilter,\n inflection,\n pgQueryFromResolveData: queryFromResolveData,\n pgOmit: omit,\n pgViaTemporaryTable: viaTemporaryTable,\n describePgEntity,\n sqlCommentByAddingTags,\n pgField,\n } = build;\n const {\n scope: { isRootMutation },\n fieldWithHooks,\n } = context;\n\n if (!isRootMutation) {\n return fields;\n }\n\n return extend(\n fields,\n [\"update\", \"delete\"].reduce(\n (outerMemo, mode) =>\n introspectionResultsByKind.class.reduce((memo, table) => {\n // PERFORMANCE: These used to be .filter(...) calls\n if (!table.namespace) return memo;\n const canUpdate =\n mode === \"update\" &&\n table.isUpdatable &&\n !omit(table, \"update\") &&\n // Check at least one attribute is updatable\n table.attributes.find(attr => !omit(attr, \"update\"));\n const canDelete =\n mode === \"delete\" &&\n table.isDeletable &&\n !omit(table, \"delete\");\n if (!canUpdate && !canDelete) return memo;\n\n const TableType = pgGetGqlTypeByTypeIdAndModifier(\n table.type.id,\n null\n );\n if (!TableType) {\n return memo;\n }\n async function commonCodeRenameMe(\n pgClient,\n resolveInfo,\n getDataFromParsedResolveInfoFragment,\n PayloadType,\n args,\n condition,\n context,\n resolveContext\n ) {\n const { input } = args;\n const parsedResolveInfoFragment = parseResolveInfo(resolveInfo);\n parsedResolveInfoFragment.args = args; // Allow overriding via makeWrapResolversPlugin\n const resolveData = getDataFromParsedResolveInfoFragment(\n parsedResolveInfoFragment,\n PayloadType\n );\n\n const sqlTypeIdentifier = sql.identifier(\n table.namespace.name,\n table.name\n );\n\n let sqlMutationQuery;\n if (mode === \"update\") {\n const sqlColumns = [];\n const sqlValues = [];\n const inputData =\n input[\n inflection.patchField(inflection.tableFieldName(table))\n ];\n table.attributes.forEach(attr => {\n // PERFORMANCE: These used to be .filter(...) calls\n if (!pgColumnFilter(attr, build, context)) return;\n if (omit(attr, \"update\")) return;\n\n const fieldName = inflection.column(attr);\n if (\n fieldName in inputData /* Because we care about null! */\n ) {\n const val = inputData[fieldName];\n sqlColumns.push(sql.identifier(attr.name));\n sqlValues.push(gql2pg(val, attr.type, attr.typeModifier));\n }\n });\n if (sqlColumns.length === 0) {\n return null;\n }\n sqlMutationQuery = sql.query`\\\nupdate ${sql.identifier(table.namespace.name, table.name)} set ${sql.join(\n sqlColumns.map(\n (col, i) => sql.fragment`${col} = ${sqlValues[i]}`\n ),\n \", \"\n )}\nwhere ${condition}\nreturning *`;\n } else {\n sqlMutationQuery = sql.query`\\\ndelete from ${sql.identifier(table.namespace.name, table.name)}\nwhere ${condition}\nreturning *`;\n }\n\n const modifiedRowAlias = sql.identifier(Symbol());\n const query = queryFromResolveData(\n modifiedRowAlias,\n modifiedRowAlias,\n resolveData,\n {},\n null,\n resolveContext,\n resolveInfo.rootValue\n );\n let row;\n try {\n await pgClient.query(\"SAVEPOINT graphql_mutation\");\n const rows = await viaTemporaryTable(\n pgClient,\n sqlTypeIdentifier,\n sqlMutationQuery,\n modifiedRowAlias,\n query\n );\n row = rows[0];\n await pgClient.query(\"RELEASE SAVEPOINT graphql_mutation\");\n } catch (e) {\n await pgClient.query(\n \"ROLLBACK TO SAVEPOINT graphql_mutation\"\n );\n throw e;\n }\n if (!row) {\n throw new Error(\n `No values were ${mode}d in collection '${inflection.pluralize(\n inflection._singularizedTableName(table)\n )}' because no values you can ${mode} were found matching these criteria.`\n );\n }\n return {\n clientMutationId: input.clientMutationId,\n data: row,\n };\n }\n if (TableType) {\n const uniqueConstraints = table.constraints.filter(\n con => con.type === \"u\" || con.type === \"p\"\n );\n const Table = pgGetGqlTypeByTypeIdAndModifier(\n table.type.id,\n null\n );\n const tableTypeName = Table.name;\n const TablePatch = getTypeByName(\n inflection.patchType(Table.name)\n );\n const PayloadType = newWithHooks(\n GraphQLObjectType,\n {\n name: inflection[\n mode === \"delete\"\n ? \"deletePayloadType\"\n : \"updatePayloadType\"\n ](table),\n description: build.wrapDescription(\n `The output of our ${mode} \\`${tableTypeName}\\` mutation.`,\n \"type\"\n ),\n fields: ({ fieldWithHooks }) => {\n const tableName = inflection.tableFieldName(table);\n // This should really be `-node-id` but for compatibility with PostGraphQL v3 we haven't made that change.\n const deletedNodeIdFieldName = inflection.deletedNodeId(\n table\n );\n return Object.assign(\n {\n clientMutationId: {\n description: build.wrapDescription(\n \"The exact same `clientMutationId` that was provided in the mutation input, unchanged and unused. May be used by a client to track mutations.\",\n \"field\"\n ),\n type: GraphQLString,\n },\n [tableName]: pgField(\n build,\n fieldWithHooks,\n tableName,\n {\n description: build.wrapDescription(\n `The \\`${tableTypeName}\\` that was ${mode}d by this mutation.`,\n \"field\"\n ),\n type: Table,\n },\n {},\n false\n ),\n },\n mode === \"delete\"\n ? {\n [deletedNodeIdFieldName]: fieldWithHooks(\n deletedNodeIdFieldName,\n ({ addDataGenerator }) => {\n const fieldDataGeneratorsByTableType = fieldDataGeneratorsByType.get(\n TableType\n );\n\n const gens =\n fieldDataGeneratorsByTableType &&\n fieldDataGeneratorsByTableType[\n nodeIdFieldName\n ];\n if (gens) {\n gens.forEach(gen => addDataGenerator(gen));\n }\n return {\n type: GraphQLID,\n resolve(data) {\n return (\n data.data.__identifiers &&\n getNodeIdForTypeAndIdentifiers(\n Table,\n ...data.data.__identifiers\n )\n );\n },\n };\n },\n {\n isPgMutationPayloadDeletedNodeIdField: true,\n }\n ),\n }\n : null\n );\n },\n },\n {\n __origin: `Adding table ${mode} mutation payload type for ${describePgEntity(\n table\n )}. You can rename the table's GraphQL type via a 'Smart Comment':\\n\\n ${sqlCommentByAddingTags(\n table,\n {\n name: \"newNameHere\",\n }\n )}`,\n isMutationPayload: true,\n isPgUpdatePayloadType: mode === \"update\",\n isPgDeletePayloadType: mode === \"delete\",\n pgIntrospection: table,\n }\n );\n\n // NodeId\n const primaryKeyConstraint = table.primaryKeyConstraint;\n if (nodeIdFieldName && primaryKeyConstraint) {\n const primaryKeys =\n primaryKeyConstraint && primaryKeyConstraint.keyAttributes;\n const fieldName = inflection[\n mode === \"update\" ? \"updateNode\" : \"deleteNode\"\n ](table);\n const InputType = newWithHooks(\n GraphQLInputObjectType,\n {\n description: build.wrapDescription(\n `All input for the \\`${fieldName}\\` mutation.`,\n \"type\"\n ),\n name: inflection[\n mode === \"update\"\n ? \"updateNodeInputType\"\n : \"deleteNodeInputType\"\n ](table),\n fields: Object.assign(\n {\n clientMutationId: {\n description: build.wrapDescription(\n \"An arbitrary string value with no semantic meaning. Will be included in the payload verbatim. May be used to track mutations by the client.\",\n \"field\"\n ),\n type: GraphQLString,\n },\n [nodeIdFieldName]: {\n description: build.wrapDescription(\n `The globally unique \\`ID\\` which will identify a single \\`${tableTypeName}\\` to be ${mode}d.`,\n \"field\"\n ),\n type: new GraphQLNonNull(GraphQLID),\n },\n },\n mode === \"update\"\n ? {\n [inflection.patchField(\n inflection.tableFieldName(table)\n )]: {\n description: build.wrapDescription(\n `An object where the defined keys will be set on the \\`${tableTypeName}\\` being ${mode}d.`,\n \"field\"\n ),\n type: new GraphQLNonNull(TablePatch),\n },\n }\n : null\n ),\n },\n {\n __origin: `Adding table ${mode} (by node ID) mutation input type for ${describePgEntity(\n table\n )}. You can rename the table's GraphQL type via a 'Smart Comment':\\n\\n ${sqlCommentByAddingTags(\n table,\n {\n name: \"newNameHere\",\n }\n )}`,\n isPgUpdateInputType: mode === \"update\",\n isPgUpdateNodeInputType: mode === \"update\",\n isPgDeleteInputType: mode === \"delete\",\n isPgDeleteNodeInputType: mode === \"delete\",\n pgInflection: table, // TODO:v5: remove - TYPO!\n pgIntrospection: table,\n isMutationInput: true,\n }\n );\n\n memo = extend(\n memo,\n {\n [fieldName]: fieldWithHooks(\n fieldName,\n context => {\n const {\n getDataFromParsedResolveInfoFragment,\n } = context;\n return {\n description: build.wrapDescription(\n mode === \"update\"\n ? `Updates a single \\`${tableTypeName}\\` using its globally unique id and a patch.`\n : `Deletes a single \\`${tableTypeName}\\` using its globally unique id.`,\n \"field\"\n ),\n type: PayloadType,\n args: {\n input: {\n type: new GraphQLNonNull(InputType),\n },\n },\n async resolve(\n parent,\n args,\n resolveContext,\n resolveInfo\n ) {\n const { input } = args;\n const { pgClient } = resolveContext;\n const nodeId = input[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 return commonCodeRenameMe(\n pgClient,\n resolveInfo,\n getDataFromParsedResolveInfoFragment,\n PayloadType,\n args,\n sql.fragment`(${sql.join(\n primaryKeys.map(\n (key, idx) =>\n sql.fragment`${sql.identifier(\n key.name\n )} = ${gql2pg(\n identifiers[idx],\n key.type,\n key.typeModifier\n )}`\n ),\n \") and (\"\n )})`,\n context,\n resolveContext\n );\n } catch (e) {\n debug(e);\n return null;\n }\n },\n };\n },\n {\n isPgNodeMutation: true,\n pgFieldIntrospection: table,\n [mode === \"update\"\n ? \"isPgUpdateMutationField\"\n : \"isPgDeleteMutationField\"]: true,\n }\n ),\n },\n \"Adding ${mode} mutation for ${describePgEntity(table)}\"\n );\n }\n\n // Unique\n uniqueConstraints.forEach(constraint => {\n if (omit(constraint, mode)) {\n return;\n }\n const keys = constraint.keyAttributes;\n if (!keys.every(_ => _)) {\n throw new Error(\n `Consistency error: could not find an attribute in the constraint when building the ${mode} mutation for ${describePgEntity(\n table\n )}!`\n );\n }\n if (keys.some(key => omit(key, \"read\"))) {\n return;\n }\n const fieldName = inflection[\n mode === \"update\" ? \"updateByKeys\" : \"deleteByKeys\"\n ](keys, table, constraint);\n const InputType = newWithHooks(\n GraphQLInputObjectType,\n {\n description: build.wrapDescription(\n `All input for the \\`${fieldName}\\` mutation.`,\n \"type\"\n ),\n name: inflection[\n mode === \"update\"\n ? \"updateByKeysInputType\"\n : \"deleteByKeysInputType\"\n ](keys, table, constraint),\n fields: Object.assign(\n {\n clientMutationId: {\n type: GraphQLString,\n },\n },\n mode === \"update\"\n ? {\n [inflection.patchField(\n inflection.tableFieldName(table)\n )]: {\n description: build.wrapDescription(\n `An object where the defined keys will be set on the \\`${tableTypeName}\\` being ${mode}d.`,\n \"field\"\n ),\n type: new GraphQLNonNull(TablePatch),\n },\n }\n : null,\n keys.reduce((memo, key) => {\n memo[inflection.column(key)] = {\n description: key.description,\n type: new GraphQLNonNull(\n pgGetGqlInputTypeByTypeIdAndModifier(\n key.typeId,\n key.typeModifier\n )\n ),\n };\n return memo;\n }, {})\n ),\n },\n {\n __origin: `Adding table ${mode} mutation input type for ${describePgEntity(\n constraint\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 isPgUpdateInputType: mode === \"update\",\n isPgUpdateByKeysInputType: mode === \"update\",\n isPgDeleteInputType: mode === \"delete\",\n isPgDeleteByKeysInputType: mode === \"delete\",\n pgInflection: table, // TODO:v5: remove - TYPO!\n pgIntrospection: table,\n pgKeys: keys,\n isMutationInput: true,\n }\n );\n\n memo = extend(\n memo,\n {\n [fieldName]: fieldWithHooks(\n fieldName,\n context => {\n const {\n getDataFromParsedResolveInfoFragment,\n } = context;\n return {\n description: build.wrapDescription(\n mode === \"update\"\n ? `Updates a single \\`${tableTypeName}\\` using a unique key and a patch.`\n : `Deletes a single \\`${tableTypeName}\\` using a unique key.`,\n \"field\"\n ),\n type: PayloadType,\n args: {\n input: {\n type: new GraphQLNonNull(InputType),\n },\n },\n async resolve(\n parent,\n args,\n resolveContext,\n resolveInfo\n ) {\n const { input } = args;\n const { pgClient } = resolveContext;\n return commonCodeRenameMe(\n pgClient,\n resolveInfo,\n getDataFromParsedResolveInfoFragment,\n PayloadType,\n args,\n sql.fragment`(${sql.join(\n keys.map(\n key =>\n sql.fragment`${sql.identifier(\n key.name\n )} = ${gql2pg(\n input[inflection.column(key)],\n key.type,\n key.typeModifier\n )}`\n ),\n \") and (\"\n )})`,\n context,\n resolveContext\n );\n },\n };\n },\n {\n isPgNodeMutation: false,\n pgFieldIntrospection: table,\n pgFieldConstraint: constraint,\n [mode === \"update\"\n ? \"isPgUpdateMutationField\"\n : \"isPgDeleteMutationField\"]: true,\n }\n ),\n },\n `Adding ${mode} mutation for ${describePgEntity(\n constraint\n )}`\n );\n });\n }\n return memo;\n }, outerMemo),\n {}\n ),\n `Adding default update/delete mutations to root Mutation type`\n );\n },\n [\"PgMutationUpdateDelete\"]\n );\n}: Plugin);\n"],"file":"PgMutationUpdateDeletePlugin.js"}
@@ -54,7 +54,7 @@ var PgRecordFunctionConnectionPlugin = function PgRecordFunctionConnectionPlugin
54
54
 
55
55
  const EdgeType = newWithHooks(GraphQLObjectType, {
56
56
  name: inflection.recordFunctionEdge(proc),
57
- description: `A \`${NodeType.name}\` edge in the connection.`,
57
+ description: build.wrapDescription(`A \`${NodeType.name}\` edge in the connection.`, "type"),
58
58
  fields: ({
59
59
  fieldWithHooks
60
60
  }) => {
@@ -66,7 +66,7 @@ var PgRecordFunctionConnectionPlugin = function PgRecordFunctionConnectionPlugin
66
66
  usesCursor: [true]
67
67
  }));
68
68
  return {
69
- description: "A cursor for use in pagination.",
69
+ description: build.wrapDescription("A cursor for use in pagination.", "field"),
70
70
  type: Cursor,
71
71
 
72
72
  resolve(data) {
@@ -78,7 +78,7 @@ var PgRecordFunctionConnectionPlugin = function PgRecordFunctionConnectionPlugin
78
78
  isCursorField: true
79
79
  }),
80
80
  node: pgField(build, fieldWithHooks, "node", {
81
- description: `The \`${NodeType.name}\` at the end of the edge.`,
81
+ description: build.wrapDescription(`The \`${NodeType.name}\` at the end of the edge.`, "field"),
82
82
  type: nullableIf(!pgForbidSetofFunctionsToReturnNull, NodeType),
83
83
 
84
84
  resolve(data, _args, _context, resolveInfo) {
@@ -101,13 +101,13 @@ var PgRecordFunctionConnectionPlugin = function PgRecordFunctionConnectionPlugin
101
101
 
102
102
  newWithHooks(GraphQLObjectType, {
103
103
  name: inflection.recordFunctionConnection(proc),
104
- description: `A connection to a list of \`${NodeType.name}\` values.`,
104
+ description: build.wrapDescription(`A connection to a list of \`${NodeType.name}\` values.`, "type"),
105
105
  fields: ({
106
106
  fieldWithHooks
107
107
  }) => {
108
108
  return {
109
109
  nodes: pgField(build, fieldWithHooks, "nodes", {
110
- description: `A list of \`${NodeType.name}\` objects.`,
110
+ description: build.wrapDescription(`A list of \`${NodeType.name}\` objects.`, "field"),
111
111
  type: new GraphQLNonNull(new GraphQLList(nullableIf(!pgForbidSetofFunctionsToReturnNull, NodeType))),
112
112
 
113
113
  resolve(data, _args, _context, resolveInfo) {
@@ -117,7 +117,7 @@ var PgRecordFunctionConnectionPlugin = function PgRecordFunctionConnectionPlugin
117
117
 
118
118
  }),
119
119
  edges: pgField(build, fieldWithHooks, "edges", {
120
- description: `A list of edges which contains the \`${NodeType.name}\` and cursor to aid in pagination.`,
120
+ description: build.wrapDescription(`A list of edges which contains the \`${NodeType.name}\` and cursor to aid in pagination.`, "field"),
121
121
  type: new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(EdgeType))),
122
122
 
123
123
  resolve(data, _args, _context, resolveInfo) {
@@ -55,7 +55,10 @@ export default (function PgRecordFunctionConnectionPlugin(
55
55
  GraphQLObjectType,
56
56
  {
57
57
  name: inflection.recordFunctionEdge(proc),
58
- description: `A \`${NodeType.name}\` edge in the connection.`,
58
+ description: build.wrapDescription(
59
+ `A \`${NodeType.name}\` edge in the connection.`,
60
+ "type"
61
+ ),
59
62
  fields: ({ fieldWithHooks }) => {
60
63
  return {
61
64
  cursor: fieldWithHooks(
@@ -65,7 +68,10 @@ export default (function PgRecordFunctionConnectionPlugin(
65
68
  usesCursor: [true],
66
69
  }));
67
70
  return {
68
- description: "A cursor for use in pagination.",
71
+ description: build.wrapDescription(
72
+ "A cursor for use in pagination.",
73
+ "field"
74
+ ),
69
75
  type: Cursor,
70
76
  resolve(data) {
71
77
  return base64(JSON.stringify(data.__cursor));
@@ -81,7 +87,10 @@ export default (function PgRecordFunctionConnectionPlugin(
81
87
  fieldWithHooks,
82
88
  "node",
83
89
  {
84
- description: `The \`${NodeType.name}\` at the end of the edge.`,
90
+ description: build.wrapDescription(
91
+ `The \`${NodeType.name}\` at the end of the edge.`,
92
+ "field"
93
+ ),
85
94
  type: nullableIf(
86
95
  !pgForbidSetofFunctionsToReturnNull,
87
96
  NodeType
@@ -119,11 +128,17 @@ export default (function PgRecordFunctionConnectionPlugin(
119
128
  GraphQLObjectType,
120
129
  {
121
130
  name: inflection.recordFunctionConnection(proc),
122
- description: `A connection to a list of \`${NodeType.name}\` values.`,
131
+ description: build.wrapDescription(
132
+ `A connection to a list of \`${NodeType.name}\` values.`,
133
+ "type"
134
+ ),
123
135
  fields: ({ fieldWithHooks }) => {
124
136
  return {
125
137
  nodes: pgField(build, fieldWithHooks, "nodes", {
126
- description: `A list of \`${NodeType.name}\` objects.`,
138
+ description: build.wrapDescription(
139
+ `A list of \`${NodeType.name}\` objects.`,
140
+ "field"
141
+ ),
127
142
  type: new GraphQLNonNull(
128
143
  new GraphQLList(
129
144
  nullableIf(!pgForbidSetofFunctionsToReturnNull, NodeType)
@@ -139,7 +154,10 @@ export default (function PgRecordFunctionConnectionPlugin(
139
154
  fieldWithHooks,
140
155
  "edges",
141
156
  {
142
- description: `A list of edges which contains the \`${NodeType.name}\` and cursor to aid in pagination.`,
157
+ description: build.wrapDescription(
158
+ `A list of edges which contains the \`${NodeType.name}\` and cursor to aid in pagination.`,
159
+ "field"
160
+ ),
143
161
  type: new GraphQLNonNull(
144
162
  new GraphQLList(new GraphQLNonNull(EdgeType))
145
163
  ),
@@ -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","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,EAAG,OAAMN,QAAQ,CAACG,IAAK,4BAFpC;AAGEI,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;AACLL,gBAAAA,WAAW,EAAE,iCADR;AAELM,gBAAAA,IAAI,EAAEnB,MAFD;;AAGLoB,gBAAAA,OAAO,CAACC,IAAD,EAAO;AACZ,yBAAOnD,MAAM,CAACoD,IAAI,CAACC,SAAL,CAAeF,IAAI,CAACG,QAApB,CAAD,CAAb;AACD;;AALI,eAAP;AAOD,aAbmB,EAcpB;AACEC,cAAAA,aAAa,EAAE;AADjB,aAdoB,CADjB;AAmBLC,YAAAA,IAAI,EAAE9B,OAAO,CACXf,KADW,EAEXkC,cAFW,EAGX,MAHW,EAIX;AACEF,cAAAA,WAAW,EAAG,SAAQN,QAAQ,CAACG,IAAK,4BADtC;AAEES,cAAAA,IAAI,EAAEtB,UAAU,CACd,CAACnB,kCADa,EAEd6B,QAFc,CAFlB;;AAMEa,cAAAA,OAAO,CAACC,IAAD,EAAOM,KAAP,EAAcC,QAAd,EAAwBC,WAAxB,EAAqC;AAC1C,sBAAMC,SAAS,GAAG/C,2BAA2B,CAC3C8C,WAD2C,CAA7C;AAGA,uBAAOR,IAAI,CAACS,SAAD,CAAX;AACD;;AAXH,aAJW,EAiBX,EAjBW,EAkBX,KAlBW;AAnBR,WAAP;AAwCD;AA5CH,OAF2B,EAgD3B;AACEC,QAAAA,QAAQ,EAAG,wCAAuCrC,gBAAgB,CAChES,IADgE,CAEhE,uGAAsGR,sBAAsB,CAC5HQ,IAD4H,EAE5H;AACEO,UAAAA,IAAI,EAAE;AADR,SAF4H,CAK5H,EARJ;AASEsB,QAAAA,UAAU,EAAE,IATd;AAUEC,QAAAA,QAAQ,EAAE1B,QAVZ;AAWE2B,QAAAA,eAAe,EAAE/B;AAXnB,OAhD2B,CAA7B;AA+DA;;AACArB,MAAAA,YAAY,CACVM,iBADU,EAEV;AACEsB,QAAAA,IAAI,EAAEnB,UAAU,CAAC4C,wBAAX,CAAoChC,IAApC,CADR;AAEEU,QAAAA,WAAW,EAAG,+BAA8BN,QAAQ,CAACG,IAAK,YAF5D;AAGEI,QAAAA,MAAM,EAAE,CAAC;AAAEC,UAAAA;AAAF,SAAD,KAAwB;AAC9B,iBAAO;AACLqB,YAAAA,KAAK,EAAExC,OAAO,CAACf,KAAD,EAAQkC,cAAR,EAAwB,OAAxB,EAAiC;AAC7CF,cAAAA,WAAW,EAAG,eAAcN,QAAQ,CAACG,IAAK,aADG;AAE7CS,cAAAA,IAAI,EAAE,IAAI9B,cAAJ,CACJ,IAAIC,WAAJ,CACEO,UAAU,CAAC,CAACnB,kCAAF,EAAsC6B,QAAtC,CADZ,CADI,CAFuC;;AAO7Ca,cAAAA,OAAO,CAACC,IAAD,EAAOM,KAAP,EAAcC,QAAd,EAAwBC,WAAxB,EAAqC;AAC1C,sBAAMC,SAAS,GAAG/C,2BAA2B,CAAC8C,WAAD,CAA7C;AACA,uBAAOR,IAAI,CAACA,IAAL,CAAUgB,GAAV,CAAcC,KAAK,IAAIA,KAAK,CAACR,SAAD,CAA5B,CAAP;AACD;;AAV4C,aAAjC,CADT;AAaLS,YAAAA,KAAK,EAAE3C,OAAO,CACZf,KADY,EAEZkC,cAFY,EAGZ,OAHY,EAIZ;AACEF,cAAAA,WAAW,EAAG,wCAAuCN,QAAQ,CAACG,IAAK,qCADrE;AAEES,cAAAA,IAAI,EAAE,IAAI9B,cAAJ,CACJ,IAAIC,WAAJ,CAAgB,IAAID,cAAJ,CAAmBsB,QAAnB,CAAhB,CADI,CAFR;;AAKES,cAAAA,OAAO,CAACC,IAAD,EAAOM,KAAP,EAAcC,QAAd,EAAwBC,WAAxB,EAAqC;AAC1C,sBAAMC,SAAS,GAAG/C,2BAA2B,CAC3C8C,WAD2C,CAA7C;AAGA,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;;AAbH,aAJY,EAmBZ,EAnBY,EAoBZ,KApBY,EAqBZ;AACEU,cAAAA,WAAW,EAAE;AADf,aArBY;AAbT,WAAP;AAuCD;AA3CH,OAFU,EA+CV;AACET,QAAAA,QAAQ,EAAG,uCAAsCrC,gBAAgB,CAC/DS,IAD+D,CAE/D,uGAAsGR,sBAAsB,CAC5HQ,IAD4H,EAE5H;AACEO,UAAAA,IAAI,EAAE;AADR,SAF4H,CAK5H,EARJ;AASE+B,QAAAA,gBAAgB,EAAE,IATpB;AAUEC,QAAAA,qBAAqB,EAAE,IAVzB;AAWEC,QAAAA,QAAQ,EAAEhC,QAXZ;AAYEsB,QAAAA,QAAQ,EAAE1B,QAZZ;AAaE2B,QAAAA,eAAe,EAAE/B;AAbnB,OA/CU,CAAZ;AA+DD,KAvJD;AAwJA,WAAOvB,CAAP;AACD,GA7KH,EA8KE,CAAC,4BAAD,CA9KF;AAgLD,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: `A \\`${NodeType.name}\\` edge in the connection.`,\n fields: ({ fieldWithHooks }) => {\n return {\n cursor: fieldWithHooks(\n \"cursor\",\n ({ addDataGenerator }) => {\n addDataGenerator(() => ({\n usesCursor: [true],\n }));\n return {\n description: \"A cursor for use in pagination.\",\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: `The \\`${NodeType.name}\\` at the end of the edge.`,\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: `A connection to a list of \\`${NodeType.name}\\` values.`,\n fields: ({ fieldWithHooks }) => {\n return {\n nodes: pgField(build, fieldWithHooks, \"nodes\", {\n description: `A list of \\`${NodeType.name}\\` objects.`,\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: `A list of edges which contains the \\`${NodeType.name}\\` and cursor to aid in pagination.`,\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":"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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"}
@@ -68,7 +68,7 @@ var PgRecordReturnTypesPlugin = function PgRecordReturnTypesPlugin(builder) {
68
68
  const procFieldName = isMutation ? inflection.functionMutationName(proc) : computed ? inflection.computedColumn(proc.name.substr(firstArgType.name.length + 1), proc) : inflection.functionQueryName(proc);
69
69
  newWithHooks(GraphQLObjectType, {
70
70
  name: inflection.recordFunctionReturnType(proc),
71
- description: `The return type of our \`${procFieldName}\` ${isMutation ? "mutation" : "query"}.`,
71
+ description: build.wrapDescription(`The return type of our \`${procFieldName}\` ${isMutation ? "mutation" : "query"}.`, "type"),
72
72
  fields: ({
73
73
  fieldWithHooks
74
74
  }) => {
@@ -78,9 +78,12 @@ export default (function PgRecordReturnTypesPlugin(builder) {
78
78
  GraphQLObjectType,
79
79
  {
80
80
  name: inflection.recordFunctionReturnType(proc),
81
- description: `The return type of our \`${procFieldName}\` ${
82
- isMutation ? "mutation" : "query"
83
- }.`,
81
+ description: build.wrapDescription(
82
+ `The return type of our \`${procFieldName}\` ${
83
+ isMutation ? "mutation" : "query"
84
+ }.`,
85
+ "type"
86
+ ),
84
87
  fields: ({ fieldWithHooks }) => {
85
88
  return outputArgNames.reduce((memo, outputArgName, idx) => {
86
89
  const fieldName = inflection.functionOutputFieldName(
@@ -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","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: `The return type of our \\`${procFieldName}\\` ${\n isMutation ? \"mutation\" : \"query\"\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","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"}
@@ -137,11 +137,11 @@ var PgRowNode = async function PgRowNode(builder, {
137
137
  getDataFromParsedResolveInfoFragment
138
138
  }) => {
139
139
  return {
140
- description: `Reads a single \`${TableType.name}\` using its globally unique \`ID\`.`,
140
+ description: build.wrapDescription(`Reads a single \`${TableType.name}\` using its globally unique \`ID\`.`, "field"),
141
141
  type: TableType,
142
142
  args: {
143
143
  [nodeIdFieldName]: {
144
- description: `The globally unique \`ID\` to be used in selecting a single \`${TableType.name}\`.`,
144
+ description: build.wrapDescription(`The globally unique \`ID\` to be used in selecting a single \`${TableType.name}\`.`, "arg"),
145
145
  type: new GraphQLNonNull(GraphQLID)
146
146
  }
147
147
  },
@@ -153,11 +153,17 @@ export default (async function PgRowNode(builder, { subscriptions }) {
153
153
  fieldName,
154
154
  ({ getDataFromParsedResolveInfoFragment }) => {
155
155
  return {
156
- description: `Reads a single \`${TableType.name}\` using its globally unique \`ID\`.`,
156
+ description: build.wrapDescription(
157
+ `Reads a single \`${TableType.name}\` using its globally unique \`ID\`.`,
158
+ "field"
159
+ ),
157
160
  type: TableType,
158
161
  args: {
159
162
  [nodeIdFieldName]: {
160
- description: `The globally unique \`ID\` to be used in selecting a single \`${TableType.name}\`.`,
163
+ description: build.wrapDescription(
164
+ `The globally unique \`ID\` to be used in selecting a single \`${TableType.name}\`.`,
165
+ "arg"
166
+ ),
161
167
  type: new GraphQLNonNull(GraphQLID),
162
168
  },
163
169
  },