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/PgColumnsPlugin.js"],"names":["nullableIf","GraphQLNonNull","condition","Type","PgColumnsPlugin","builder","hook","build","pgSql","sql","pgTweakFragmentForTypeAndModifier","pgQueryFromResolveData","queryFromResolveData","getSelectValueForFieldAndTypeAndModifier","ReturnType","fieldScope","parsedResolveInfoFragment","sqlFullName","type","typeModifier","getDataFromParsedResolveInfoFragment","isPgArray","ident","identifier","Symbol","fragment","arrayItemType","resolveData","isDefinitelyNotATable","class","isSelectable","jsonBuildObject","onlyJsonField","addNullCase","addNotDistinctFromNullCase","extend","pgGetSelectValueForFieldAndTypeAndModifier","fields","context","pgGetGqlTypeByTypeIdAndModifier","pg2gqlForType","graphql","GraphQLString","pgColumnFilter","inflection","pgOmit","omit","describePgEntity","sqlCommentByAddingTags","scope","isPgRowType","isPgCompoundType","pgIntrospection","table","fieldWithHooks","kind","attributes","reduce","memo","attr","fieldName","column","Error","namespaceName","name","fieldContext","sqlColumn","addDataGenerator","typeId","pgQuery","queryBuilder","select","getTableAlias","convertFromPg","description","isNotNull","domainIsNotNull","tags","notNull","resolve","data","_args","_context","_resolveInfo","pgFieldIntrospection","pgGetGqlInputTypeByTypeIdAndModifier","isPgPatch","isPgBaseInput","pgAddSubfield","action","identity","domainHasDefault","hasDefault"],"mappings":"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","sourcesContent":["// @flow\nimport type { Plugin } from \"graphile-build\";\n\nconst nullableIf = (GraphQLNonNull, condition, Type) =>\n condition ? Type : new GraphQLNonNull(Type);\n\nexport default (function PgColumnsPlugin(builder) {\n builder.hook(\n \"build\",\n build => {\n const {\n pgSql: sql,\n pgTweakFragmentForTypeAndModifier,\n pgQueryFromResolveData: queryFromResolveData,\n } = build;\n const getSelectValueForFieldAndTypeAndModifier = (\n ReturnType,\n fieldScope,\n parsedResolveInfoFragment,\n sqlFullName,\n type,\n typeModifier\n ) => {\n const { getDataFromParsedResolveInfoFragment } = fieldScope;\n if (type.isPgArray) {\n const ident = sql.identifier(Symbol());\n return sql.fragment`(\\\ncase\nwhen ${sqlFullName} is null then null\nwhen coalesce(array_length(${sqlFullName}, 1), 0) = 0 then '[]'::json\nelse (\n select json_agg(${getSelectValueForFieldAndTypeAndModifier(\n ReturnType,\n fieldScope,\n parsedResolveInfoFragment,\n ident,\n type.arrayItemType,\n typeModifier\n )}) from unnest(${sqlFullName}) as ${ident}\n)\nend\n)`;\n } else {\n const resolveData = getDataFromParsedResolveInfoFragment(\n parsedResolveInfoFragment,\n ReturnType\n );\n if (type.type === \"c\") {\n const isDefinitelyNotATable =\n type.class && !type.class.isSelectable;\n const jsonBuildObject = queryFromResolveData(\n sql.identifier(Symbol()), // Ignore!\n sqlFullName,\n resolveData,\n {\n onlyJsonField: true,\n addNullCase: !isDefinitelyNotATable,\n addNotDistinctFromNullCase: isDefinitelyNotATable,\n }\n );\n return jsonBuildObject;\n } else {\n return pgTweakFragmentForTypeAndModifier(\n sqlFullName,\n type,\n typeModifier,\n resolveData\n );\n }\n }\n };\n return build.extend(build, {\n pgGetSelectValueForFieldAndTypeAndModifier: getSelectValueForFieldAndTypeAndModifier,\n });\n },\n [\"PgColumns\"],\n [],\n [\"PgTypes\"]\n );\n\n builder.hook(\n \"GraphQLObjectType:fields\",\n (fields, build, context) => {\n const {\n extend,\n pgGetGqlTypeByTypeIdAndModifier,\n pgSql: sql,\n pg2gqlForType,\n graphql: { GraphQLString, GraphQLNonNull },\n pgColumnFilter,\n inflection,\n pgOmit: omit,\n pgGetSelectValueForFieldAndTypeAndModifier: getSelectValueForFieldAndTypeAndModifier,\n describePgEntity,\n sqlCommentByAddingTags,\n } = build;\n const {\n scope: { isPgRowType, isPgCompoundType, pgIntrospection: table },\n fieldWithHooks,\n } = context;\n\n if (\n !(isPgRowType || isPgCompoundType) ||\n !table ||\n table.kind !== \"class\"\n ) {\n return fields;\n }\n\n return extend(\n fields,\n table.attributes.reduce((memo, attr) => {\n // PERFORMANCE: These used to be .filter(...) calls\n if (!pgColumnFilter(attr, build, context)) return memo;\n if (omit(attr, \"read\")) return memo;\n\n const fieldName = inflection.column(attr);\n if (memo[fieldName]) {\n throw new Error(\n `Two columns produce the same GraphQL field name '${fieldName}' on class '${table.namespaceName}.${table.name}'; one of them is '${attr.name}'`\n );\n }\n memo = extend(\n memo,\n {\n [fieldName]: fieldWithHooks(\n fieldName,\n fieldContext => {\n const { type, typeModifier } = attr;\n const sqlColumn = sql.identifier(attr.name);\n const { addDataGenerator } = fieldContext;\n const ReturnType =\n pgGetGqlTypeByTypeIdAndModifier(\n attr.typeId,\n attr.typeModifier\n ) || GraphQLString;\n addDataGenerator(parsedResolveInfoFragment => {\n return {\n pgQuery: queryBuilder => {\n queryBuilder.select(\n getSelectValueForFieldAndTypeAndModifier(\n ReturnType,\n fieldContext,\n parsedResolveInfoFragment,\n sql.fragment`(${queryBuilder.getTableAlias()}.${sqlColumn})`, // The brackets are necessary to stop the parser getting confused, ref: https://www.postgresql.org/docs/9.6/static/rowtypes.html#ROWTYPES-ACCESSING\n type,\n typeModifier\n ),\n fieldName\n );\n },\n };\n });\n const convertFromPg = pg2gqlForType(type);\n return {\n description: attr.description,\n type: nullableIf(\n GraphQLNonNull,\n !attr.isNotNull &&\n !attr.type.domainIsNotNull &&\n !attr.tags.notNull,\n ReturnType\n ),\n resolve: (data, _args, _context, _resolveInfo) => {\n return convertFromPg(data[fieldName]);\n },\n };\n },\n { pgFieldIntrospection: attr }\n ),\n },\n `Adding field for ${describePgEntity(\n attr\n )}. You can rename this field with a 'Smart Comment':\\n\\n ${sqlCommentByAddingTags(\n attr,\n {\n name: \"newNameHere\",\n }\n )}`\n );\n return memo;\n }, {}),\n `Adding columns to '${describePgEntity(table)}'`\n );\n },\n [\"PgColumns\"]\n );\n builder.hook(\n \"GraphQLInputObjectType:fields\",\n (fields, build, context) => {\n const {\n extend,\n pgGetGqlInputTypeByTypeIdAndModifier,\n graphql: { GraphQLString, GraphQLNonNull },\n pgColumnFilter,\n inflection,\n pgOmit: omit,\n describePgEntity,\n sqlCommentByAddingTags,\n } = build;\n const {\n scope: {\n isPgRowType,\n isPgCompoundType,\n isPgPatch,\n isPgBaseInput,\n pgIntrospection: table,\n pgAddSubfield,\n },\n fieldWithHooks,\n } = context;\n if (\n !(isPgRowType || isPgCompoundType) ||\n !table ||\n table.kind !== \"class\"\n ) {\n return fields;\n }\n return extend(\n fields,\n table.attributes.reduce((memo, attr) => {\n // PERFORMANCE: These used to be .filter(...) calls\n if (!pgColumnFilter(attr, build, context)) return memo;\n const action = isPgBaseInput\n ? \"base\"\n : isPgPatch\n ? \"update\"\n : \"create\";\n if (omit(attr, action)) return memo;\n if (attr.identity === \"a\") return memo;\n\n const fieldName = inflection.column(attr);\n if (memo[fieldName]) {\n throw new Error(\n `Two columns produce the same GraphQL field name '${fieldName}' on input class '${table.namespaceName}.${table.name}'; one of them is '${attr.name}'`\n );\n }\n memo = extend(\n memo,\n {\n [fieldName]: fieldWithHooks(\n fieldName,\n pgAddSubfield(\n fieldName,\n attr.name,\n attr.type,\n {\n description: attr.description,\n type: nullableIf(\n GraphQLNonNull,\n isPgBaseInput ||\n isPgPatch ||\n (!attr.isNotNull &&\n (!attr.type.domainIsNotNull ||\n attr.type.domainHasDefault) &&\n !attr.tags.notNull) ||\n attr.hasDefault ||\n attr.identity === \"d\",\n pgGetGqlInputTypeByTypeIdAndModifier(\n attr.typeId,\n attr.typeModifier\n ) || GraphQLString\n ),\n },\n attr.typeModifier\n ),\n { pgFieldIntrospection: attr }\n ),\n },\n `Adding input object field for ${describePgEntity(\n attr\n )}. You can rename this field with a 'Smart Comment':\\n\\n ${sqlCommentByAddingTags(\n attr,\n {\n name: \"newNameHere\",\n }\n )}`\n );\n return memo;\n }, {}),\n `Adding columns to input object for ${describePgEntity(table)}`\n );\n },\n [\"PgColumns\"]\n );\n}: Plugin);\n"],"file":"PgColumnsPlugin.js"}
1
+ {"version":3,"sources":["../../src/plugins/PgColumnsPlugin.js"],"names":["nullableIf","GraphQLNonNull","condition","Type","PgColumnsPlugin","builder","hook","build","pgSql","sql","pgTweakFragmentForTypeAndModifier","pgQueryFromResolveData","queryFromResolveData","getSelectValueForFieldAndTypeAndModifier","ReturnType","fieldScope","parsedResolveInfoFragment","sqlFullName","type","typeModifier","getDataFromParsedResolveInfoFragment","isPgArray","ident","identifier","Symbol","fragment","arrayItemType","resolveData","isDefinitelyNotATable","class","isSelectable","jsonBuildObject","onlyJsonField","addNullCase","addNotDistinctFromNullCase","extend","pgGetSelectValueForFieldAndTypeAndModifier","fields","context","pgGetGqlTypeByTypeIdAndModifier","pg2gqlForType","graphql","GraphQLString","pgColumnFilter","inflection","pgOmit","omit","describePgEntity","sqlCommentByAddingTags","scope","isPgRowType","isPgCompoundType","pgIntrospection","table","fieldWithHooks","kind","attributes","reduce","memo","attr","fieldName","column","Error","namespaceName","name","fieldContext","sqlColumn","addDataGenerator","typeId","pgQuery","queryBuilder","select","getTableAlias","convertFromPg","description","isNotNull","domainIsNotNull","tags","notNull","resolve","data","_args","_context","_resolveInfo","pgFieldIntrospection","pgGetGqlInputTypeByTypeIdAndModifier","isPgPatch","isPgBaseInput","pgAddSubfield","action","identity","domainHasDefault","hasDefault"],"mappings":"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","sourcesContent":["// @flow\nimport type { Plugin } from \"graphile-build\";\n\nconst nullableIf = (GraphQLNonNull, condition, Type) =>\n condition ? Type : new GraphQLNonNull(Type);\n\nexport default (function PgColumnsPlugin(builder) {\n builder.hook(\n \"build\",\n build => {\n const {\n pgSql: sql,\n pgTweakFragmentForTypeAndModifier,\n pgQueryFromResolveData: queryFromResolveData,\n } = build;\n const getSelectValueForFieldAndTypeAndModifier = (\n ReturnType,\n fieldScope,\n parsedResolveInfoFragment,\n sqlFullName,\n type,\n typeModifier\n ) => {\n const { getDataFromParsedResolveInfoFragment } = fieldScope;\n if (type.isPgArray) {\n const ident = sql.identifier(Symbol());\n return sql.fragment`(\\\ncase\nwhen ${sqlFullName} is null then null\nwhen coalesce(array_length(${sqlFullName}, 1), 0) = 0 then '[]'::json\nelse (\n select json_agg(${getSelectValueForFieldAndTypeAndModifier(\n ReturnType,\n fieldScope,\n parsedResolveInfoFragment,\n ident,\n type.arrayItemType,\n typeModifier\n )}) from unnest(${sqlFullName}) as ${ident}\n)\nend\n)`;\n } else {\n const resolveData = getDataFromParsedResolveInfoFragment(\n parsedResolveInfoFragment,\n ReturnType\n );\n if (type.type === \"c\") {\n const isDefinitelyNotATable =\n type.class && !type.class.isSelectable;\n const jsonBuildObject = queryFromResolveData(\n sql.identifier(Symbol()), // Ignore!\n sqlFullName,\n resolveData,\n {\n onlyJsonField: true,\n addNullCase: !isDefinitelyNotATable,\n addNotDistinctFromNullCase: isDefinitelyNotATable,\n }\n );\n return jsonBuildObject;\n } else {\n return pgTweakFragmentForTypeAndModifier(\n sqlFullName,\n type,\n typeModifier,\n resolveData\n );\n }\n }\n };\n return build.extend(build, {\n pgGetSelectValueForFieldAndTypeAndModifier:\n getSelectValueForFieldAndTypeAndModifier,\n });\n },\n [\"PgColumns\"],\n [],\n [\"PgTypes\"]\n );\n\n builder.hook(\n \"GraphQLObjectType:fields\",\n (fields, build, context) => {\n const {\n extend,\n pgGetGqlTypeByTypeIdAndModifier,\n pgSql: sql,\n pg2gqlForType,\n graphql: { GraphQLString, GraphQLNonNull },\n pgColumnFilter,\n inflection,\n pgOmit: omit,\n pgGetSelectValueForFieldAndTypeAndModifier:\n getSelectValueForFieldAndTypeAndModifier,\n describePgEntity,\n sqlCommentByAddingTags,\n } = build;\n const {\n scope: { isPgRowType, isPgCompoundType, pgIntrospection: table },\n fieldWithHooks,\n } = context;\n\n if (\n !(isPgRowType || isPgCompoundType) ||\n !table ||\n table.kind !== \"class\"\n ) {\n return fields;\n }\n\n return extend(\n fields,\n table.attributes.reduce((memo, attr) => {\n // PERFORMANCE: These used to be .filter(...) calls\n if (!pgColumnFilter(attr, build, context)) return memo;\n if (omit(attr, \"read\")) return memo;\n\n const fieldName = inflection.column(attr);\n if (memo[fieldName]) {\n throw new Error(\n `Two columns produce the same GraphQL field name '${fieldName}' on class '${table.namespaceName}.${table.name}'; one of them is '${attr.name}'`\n );\n }\n memo = extend(\n memo,\n {\n [fieldName]: fieldWithHooks(\n fieldName,\n fieldContext => {\n const { type, typeModifier } = attr;\n const sqlColumn = sql.identifier(attr.name);\n const { addDataGenerator } = fieldContext;\n const ReturnType =\n pgGetGqlTypeByTypeIdAndModifier(\n attr.typeId,\n attr.typeModifier\n ) || GraphQLString;\n addDataGenerator(parsedResolveInfoFragment => {\n return {\n pgQuery: queryBuilder => {\n queryBuilder.select(\n getSelectValueForFieldAndTypeAndModifier(\n ReturnType,\n fieldContext,\n parsedResolveInfoFragment,\n sql.fragment`(${queryBuilder.getTableAlias()}.${sqlColumn})`, // The brackets are necessary to stop the parser getting confused, ref: https://www.postgresql.org/docs/9.6/static/rowtypes.html#ROWTYPES-ACCESSING\n type,\n typeModifier\n ),\n fieldName\n );\n },\n };\n });\n const convertFromPg = pg2gqlForType(type);\n return {\n description: attr.description,\n type: nullableIf(\n GraphQLNonNull,\n !attr.isNotNull &&\n !attr.type.domainIsNotNull &&\n !attr.tags.notNull,\n ReturnType\n ),\n resolve: (data, _args, _context, _resolveInfo) => {\n return convertFromPg(data[fieldName]);\n },\n };\n },\n { pgFieldIntrospection: attr }\n ),\n },\n `Adding field for ${describePgEntity(\n attr\n )}. You can rename this field with a 'Smart Comment':\\n\\n ${sqlCommentByAddingTags(\n attr,\n {\n name: \"newNameHere\",\n }\n )}`\n );\n return memo;\n }, {}),\n `Adding columns to '${describePgEntity(table)}'`\n );\n },\n [\"PgColumns\"]\n );\n builder.hook(\n \"GraphQLInputObjectType:fields\",\n (fields, build, context) => {\n const {\n extend,\n pgGetGqlInputTypeByTypeIdAndModifier,\n graphql: { GraphQLString, GraphQLNonNull },\n pgColumnFilter,\n inflection,\n pgOmit: omit,\n describePgEntity,\n sqlCommentByAddingTags,\n } = build;\n const {\n scope: {\n isPgRowType,\n isPgCompoundType,\n isPgPatch,\n isPgBaseInput,\n pgIntrospection: table,\n pgAddSubfield,\n },\n fieldWithHooks,\n } = context;\n if (\n !(isPgRowType || isPgCompoundType) ||\n !table ||\n table.kind !== \"class\"\n ) {\n return fields;\n }\n return extend(\n fields,\n table.attributes.reduce((memo, attr) => {\n // PERFORMANCE: These used to be .filter(...) calls\n if (!pgColumnFilter(attr, build, context)) return memo;\n const action = isPgBaseInput\n ? \"base\"\n : isPgPatch\n ? \"update\"\n : \"create\";\n if (omit(attr, action)) return memo;\n if (attr.identity === \"a\") return memo;\n\n const fieldName = inflection.column(attr);\n if (memo[fieldName]) {\n throw new Error(\n `Two columns produce the same GraphQL field name '${fieldName}' on input class '${table.namespaceName}.${table.name}'; one of them is '${attr.name}'`\n );\n }\n memo = extend(\n memo,\n {\n [fieldName]: fieldWithHooks(\n fieldName,\n pgAddSubfield(\n fieldName,\n attr.name,\n attr.type,\n {\n description: attr.description,\n type: nullableIf(\n GraphQLNonNull,\n isPgBaseInput ||\n isPgPatch ||\n (!attr.isNotNull &&\n (!attr.type.domainIsNotNull ||\n attr.type.domainHasDefault) &&\n !attr.tags.notNull) ||\n attr.hasDefault ||\n attr.tags.hasDefault ||\n attr.identity === \"d\",\n pgGetGqlInputTypeByTypeIdAndModifier(\n attr.typeId,\n attr.typeModifier\n ) || GraphQLString\n ),\n },\n attr.typeModifier\n ),\n { pgFieldIntrospection: attr }\n ),\n },\n `Adding input object field for ${describePgEntity(\n attr\n )}. You can rename this field with a 'Smart Comment':\\n\\n ${sqlCommentByAddingTags(\n attr,\n {\n name: \"newNameHere\",\n }\n )}`\n );\n return memo;\n }, {}),\n `Adding columns to input object for ${describePgEntity(table)}`\n );\n },\n [\"PgColumns\"]\n );\n}: Plugin);\n"],"file":"PgColumnsPlugin.js"}
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.default = exports.getComputedColumnDetails = void 0;
6
+ exports.getComputedColumnDetails = exports.default = void 0;
7
7
 
8
8
  const getComputedColumnDetails = (build, table, proc) => {
9
9
  if (!proc.isStable) return null;
@@ -16,8 +16,8 @@ const getComputedColumnDetails = (build, table, proc) => {
16
16
  proc.argModes[idx] === "i" || // this arg is `in`
17
17
  proc.argModes[idx] === "b" // this arg is `inout`
18
18
  ) {
19
- prev.push(build.pgIntrospectionResultsByKind.typeById[typeId]);
20
- }
19
+ prev.push(build.pgIntrospectionResultsByKind.typeById[typeId]);
20
+ }
21
21
 
22
22
  return prev;
23
23
  }, []);
@@ -27,7 +27,7 @@ const getComputedColumnDetails = (build, table, proc) => {
27
27
  return null;
28
28
  }
29
29
 
30
- const pseudoColumnName = proc.name.substr(table.name.length + 1);
30
+ const pseudoColumnName = proc.name.slice(table.name.length + 1);
31
31
  return {
32
32
  argTypes,
33
33
  pseudoColumnName
@@ -32,7 +32,7 @@ export const getComputedColumnDetails = (
32
32
  return null;
33
33
  }
34
34
 
35
- const pseudoColumnName = proc.name.substr(table.name.length + 1);
35
+ const pseudoColumnName = proc.name.slice(table.name.length + 1);
36
36
  return { argTypes, pseudoColumnName };
37
37
  };
38
38
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/plugins/PgComputedColumnsPlugin.js"],"names":["getComputedColumnDetails","build","table","proc","isStable","namespaceId","name","startsWith","argTypeIds","length","type","id","argTypes","reduce","prev","typeId","idx","argModes","push","pgIntrospectionResultsByKind","typeById","slice","some","class","isSelectable","pseudoColumnName","substr","PgComputedColumnsPlugin","builder","pgSimpleCollections","hook","fields","context","scope","isPgRowType","isPgCompoundType","isInputType","pgIntrospection","fieldWithHooks","Self","kind","namespace","extend","introspectionResultsByKind","inflection","pgOmit","omit","pgMakeProcField","makeProcField","swallowError","describePgEntity","sqlCommentByAddingTags","tableType","Error","procedure","memo","computedColumnDetails","makeField","forceList","fieldName","computedColumnList","computedColumn","computed","e","simpleCollections","tags","hasConnections","hasSimpleCollections","returnsSet"],"mappings":";;;;;;;AAIO,MAAMA,wBAAwB,GAAG,CACtCC,KADsC,EAEtCC,KAFsC,EAGtCC,IAHsC,KAInC;AACH,MAAI,CAACA,IAAI,CAACC,QAAV,EAAoB,OAAO,IAAP;AACpB,MAAID,IAAI,CAACE,WAAL,KAAqBH,KAAK,CAACG,WAA/B,EAA4C,OAAO,IAAP;AAC5C,MAAI,CAACF,IAAI,CAACG,IAAL,CAAUC,UAAV,CAAsB,GAAEL,KAAK,CAACI,IAAK,GAAnC,CAAL,EAA6C,OAAO,IAAP;AAC7C,MAAIH,IAAI,CAACK,UAAL,CAAgBC,MAAhB,GAAyB,CAA7B,EAAgC,OAAO,IAAP;AAChC,MAAIN,IAAI,CAACK,UAAL,CAAgB,CAAhB,MAAuBN,KAAK,CAACQ,IAAN,CAAWC,EAAtC,EAA0C,OAAO,IAAP;AAE1C,QAAMC,QAAQ,GAAGT,IAAI,CAACK,UAAL,CAAgBK,MAAhB,CAAuB,CAACC,IAAD,EAAOC,MAAP,EAAeC,GAAf,KAAuB;AAC7D,QACEb,IAAI,CAACc,QAAL,CAAcR,MAAd,KAAyB,CAAzB,IAA8B;AAC9BN,IAAAA,IAAI,CAACc,QAAL,CAAcD,GAAd,MAAuB,GADvB,IAC8B;AAC9Bb,IAAAA,IAAI,CAACc,QAAL,CAAcD,GAAd,MAAuB,GAHzB,CAG6B;AAH7B,MAIE;AACAF,QAAAA,IAAI,CAACI,IAAL,CAAUjB,KAAK,CAACkB,4BAAN,CAAmCC,QAAnC,CAA4CL,MAA5C,CAAV;AACD;;AACD,WAAOD,IAAP;AACD,GATgB,EASd,EATc,CAAjB;;AAUA,MACEF,QAAQ,CACLS,KADH,CACS,CADT,EAEGC,IAFH,CAEQZ,IAAI,IAAIA,IAAI,CAACA,IAAL,KAAc,GAAd,IAAqBA,IAAI,CAACa,KAA1B,IAAmCb,IAAI,CAACa,KAAL,CAAWC,YAF9D,CADF,EAIE;AACA;AACA,WAAO,IAAP;AACD;;AAED,QAAMC,gBAAgB,GAAGtB,IAAI,CAACG,IAAL,CAAUoB,MAAV,CAAiBxB,KAAK,CAACI,IAAN,CAAWG,MAAX,GAAoB,CAArC,CAAzB;AACA,SAAO;AAAEG,IAAAA,QAAF;AAAYa,IAAAA;AAAZ,GAAP;AACD,CAhCM;;;;IAkCkBE,uB,GAAT,SAASA,uBAAT,CACdC,OADc,EAEd;AAAEC,EAAAA;AAAF,CAFc,EAGd;AACAD,EAAAA,OAAO,CAACE,IAAR,CACE,0BADF,EAEE,CAACC,MAAD,EAAS9B,KAAT,EAAgB+B,OAAhB,KAA4B;AAC1B,UAAM;AACJC,MAAAA,KAAK,EAAE;AACLC,QAAAA,WADK;AAELC,QAAAA,gBAFK;AAGLC,QAAAA,WAHK;AAILC,QAAAA,eAAe,EAAEnC;AAJZ,OADH;AAOJoC,MAAAA,cAPI;AAQJC,MAAAA;AARI,QASFP,OATJ;;AAWA,QACEI,WAAW,IACX,EAAEF,WAAW,IAAIC,gBAAjB,CADA,IAEA,CAACjC,KAFD,IAGAA,KAAK,CAACsC,IAAN,KAAe,OAHf,IAIA,CAACtC,KAAK,CAACuC,SALT,EAME;AACA,aAAOV,MAAP;AACD;;AAED,UAAM;AACJW,MAAAA,MADI;AAEJvB,MAAAA,4BAA4B,EAAEwB,0BAF1B;AAGJC,MAAAA,UAHI;AAIJC,MAAAA,MAAM,EAAEC,IAJJ;AAKJC,MAAAA,eAAe,EAAEC,aALb;AAMJC,MAAAA,YANI;AAOJC,MAAAA,gBAPI;AAQJC,MAAAA;AARI,QASFlD,KATJ;AAUA,UAAMmD,SAAS,GAAGlD,KAAK,CAACQ,IAAxB;;AACA,QAAI,CAAC0C,SAAL,EAAgB;AACd,YAAM,IAAIC,KAAJ,CAAU,6CAAV,CAAN;AACD;;AACD,WAAOX,MAAM,CACXX,MADW,EAEXY,0BAA0B,CAACW,SAA3B,CAAqCzC,MAArC,CAA4C,CAAC0C,IAAD,EAAOpD,IAAP,KAAgB;AAC1D,UAAI2C,IAAI,CAAC3C,IAAD,EAAO,SAAP,CAAR,EAA2B,OAAOoD,IAAP;AAC3B,YAAMC,qBAAqB,GAAGxD,wBAAwB,CACpDC,KADoD,EAEpDC,KAFoD,EAGpDC,IAHoD,CAAtD;AAKA,UAAI,CAACqD,qBAAL,EAA4B,OAAOD,IAAP;AAC5B,YAAM;AAAE9B,QAAAA;AAAF,UAAuB+B,qBAA7B;;AACA,eAASC,SAAT,CAAmBC,SAAnB,EAA8B;AAC5B,cAAMC,SAAS,GAAGD,SAAS,GACvBd,UAAU,CAACgB,kBAAX,CAA8BnC,gBAA9B,EAAgDtB,IAAhD,EAAsDD,KAAtD,CADuB,GAEvB0C,UAAU,CAACiB,cAAX,CAA0BpC,gBAA1B,EAA4CtB,IAA5C,EAAkDD,KAAlD,CAFJ;;AAGA,YAAI;AACFqD,UAAAA,IAAI,GAAGb,MAAM,CACXa,IADW,EAEX;AACE,aAACI,SAAD,GAAaX,aAAa,CAACW,SAAD,EAAYxD,IAAZ,EAAkBF,KAAlB,EAAyB;AACjDqC,cAAAA,cADiD;AAEjDwB,cAAAA,QAAQ,EAAE,IAFuC;AAGjDJ,cAAAA;AAHiD,aAAzB;AAD5B,WAFW,EASV,8BAA6BR,gBAAgB,CAC5C/C,IAD4C,CAE5C,4DAA2DgD,sBAAsB,CACjFhD,IADiF,EAEjF;AACEwD,YAAAA,SAAS,EAAE;AADb,WAFiF,CAKjF,EAhBS,CAAb;AAkBD,SAnBD,CAmBE,OAAOI,CAAP,EAAU;AACVd,UAAAA,YAAY,CAACc,CAAD,CAAZ;AACD;AACF;;AACD,YAAMC,iBAAiB,GACrB7D,IAAI,CAAC8D,IAAL,CAAUD,iBAAV,IAA+BnC,mBADjC;AAEA,YAAMqC,cAAc,GAAGF,iBAAiB,KAAK,MAA7C;AACA,YAAMG,oBAAoB,GACxBH,iBAAiB,KAAK,MAAtB,IAAgCA,iBAAiB,KAAK,MADxD;;AAEA,UAAI,CAAC7D,IAAI,CAACiE,UAAN,IAAoBF,cAAxB,EAAwC;AACtCT,QAAAA,SAAS,CAAC,KAAD,CAAT;AACD;;AACD,UAAItD,IAAI,CAACiE,UAAL,IAAmBD,oBAAvB,EAA6C;AAC3CV,QAAAA,SAAS,CAAC,IAAD,CAAT;AACD;;AACD,aAAOF,IAAP;AACD,KAhDD,EAgDG,EAhDH,CAFW,EAmDV,8BAA6BhB,IAAI,CAACjC,IAAK,GAnD7B,CAAb;AAqDD,GA3FH,EA4FE,CAAC,mBAAD,CA5FF;AA8FD,C","sourcesContent":["// @flow\nimport type { Plugin, Build } from \"graphile-build\";\nimport type { PgClass, PgProc } from \"./PgIntrospectionPlugin\";\n\nexport const getComputedColumnDetails = (\n build: Build,\n table: PgClass,\n proc: PgProc\n) => {\n if (!proc.isStable) return null;\n if (proc.namespaceId !== table.namespaceId) return null;\n if (!proc.name.startsWith(`${table.name}_`)) return null;\n if (proc.argTypeIds.length < 1) return null;\n if (proc.argTypeIds[0] !== table.type.id) return null;\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(build.pgIntrospectionResultsByKind.typeById[typeId]);\n }\n return prev;\n }, []);\n if (\n argTypes\n .slice(1)\n .some(type => type.type === \"c\" && type.class && type.class.isSelectable)\n ) {\n // Accepts two input tables? Skip.\n return null;\n }\n\n const pseudoColumnName = proc.name.substr(table.name.length + 1);\n return { argTypes, pseudoColumnName };\n};\n\nexport default (function PgComputedColumnsPlugin(\n builder,\n { pgSimpleCollections }\n) {\n builder.hook(\n \"GraphQLObjectType:fields\",\n (fields, build, context) => {\n const {\n scope: {\n isPgRowType,\n isPgCompoundType,\n isInputType,\n pgIntrospection: table,\n },\n fieldWithHooks,\n Self,\n } = context;\n\n if (\n isInputType ||\n !(isPgRowType || isPgCompoundType) ||\n !table ||\n table.kind !== \"class\" ||\n !table.namespace\n ) {\n return fields;\n }\n\n const {\n extend,\n pgIntrospectionResultsByKind: introspectionResultsByKind,\n inflection,\n pgOmit: omit,\n pgMakeProcField: makeProcField,\n swallowError,\n describePgEntity,\n sqlCommentByAddingTags,\n } = build;\n const tableType = table.type;\n if (!tableType) {\n throw new Error(\"Could not determine the type for this table\");\n }\n return extend(\n fields,\n introspectionResultsByKind.procedure.reduce((memo, proc) => {\n if (omit(proc, \"execute\")) return memo;\n const computedColumnDetails = getComputedColumnDetails(\n build,\n table,\n proc\n );\n if (!computedColumnDetails) return memo;\n const { pseudoColumnName } = computedColumnDetails;\n function makeField(forceList) {\n const fieldName = forceList\n ? inflection.computedColumnList(pseudoColumnName, proc, table)\n : inflection.computedColumn(pseudoColumnName, proc, table);\n try {\n memo = extend(\n memo,\n {\n [fieldName]: makeProcField(fieldName, proc, build, {\n fieldWithHooks,\n computed: true,\n forceList,\n }),\n },\n `Adding computed column for ${describePgEntity(\n proc\n )}. You can rename this field with a 'Smart Comment':\\n\\n ${sqlCommentByAddingTags(\n proc,\n {\n fieldName: \"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 computed column to '${Self.name}'`\n );\n },\n [\"PgComputedColumns\"]\n );\n}: Plugin);\n"],"file":"PgComputedColumnsPlugin.js"}
1
+ {"version":3,"sources":["../../src/plugins/PgComputedColumnsPlugin.js"],"names":["getComputedColumnDetails","build","table","proc","isStable","namespaceId","name","startsWith","argTypeIds","length","type","id","argTypes","reduce","prev","typeId","idx","argModes","push","pgIntrospectionResultsByKind","typeById","slice","some","class","isSelectable","pseudoColumnName","PgComputedColumnsPlugin","builder","pgSimpleCollections","hook","fields","context","scope","isPgRowType","isPgCompoundType","isInputType","pgIntrospection","fieldWithHooks","Self","kind","namespace","extend","introspectionResultsByKind","inflection","pgOmit","omit","pgMakeProcField","makeProcField","swallowError","describePgEntity","sqlCommentByAddingTags","tableType","Error","procedure","memo","computedColumnDetails","makeField","forceList","fieldName","computedColumnList","computedColumn","computed","e","simpleCollections","tags","hasConnections","hasSimpleCollections","returnsSet"],"mappings":"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","sourcesContent":["// @flow\nimport type { Plugin, Build } from \"graphile-build\";\nimport type { PgClass, PgProc } from \"./PgIntrospectionPlugin\";\n\nexport const getComputedColumnDetails = (\n build: Build,\n table: PgClass,\n proc: PgProc\n) => {\n if (!proc.isStable) return null;\n if (proc.namespaceId !== table.namespaceId) return null;\n if (!proc.name.startsWith(`${table.name}_`)) return null;\n if (proc.argTypeIds.length < 1) return null;\n if (proc.argTypeIds[0] !== table.type.id) return null;\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(build.pgIntrospectionResultsByKind.typeById[typeId]);\n }\n return prev;\n }, []);\n if (\n argTypes\n .slice(1)\n .some(type => type.type === \"c\" && type.class && type.class.isSelectable)\n ) {\n // Accepts two input tables? Skip.\n return null;\n }\n\n const pseudoColumnName = proc.name.slice(table.name.length + 1);\n return { argTypes, pseudoColumnName };\n};\n\nexport default (function PgComputedColumnsPlugin(\n builder,\n { pgSimpleCollections }\n) {\n builder.hook(\n \"GraphQLObjectType:fields\",\n (fields, build, context) => {\n const {\n scope: {\n isPgRowType,\n isPgCompoundType,\n isInputType,\n pgIntrospection: table,\n },\n fieldWithHooks,\n Self,\n } = context;\n\n if (\n isInputType ||\n !(isPgRowType || isPgCompoundType) ||\n !table ||\n table.kind !== \"class\" ||\n !table.namespace\n ) {\n return fields;\n }\n\n const {\n extend,\n pgIntrospectionResultsByKind: introspectionResultsByKind,\n inflection,\n pgOmit: omit,\n pgMakeProcField: makeProcField,\n swallowError,\n describePgEntity,\n sqlCommentByAddingTags,\n } = build;\n const tableType = table.type;\n if (!tableType) {\n throw new Error(\"Could not determine the type for this table\");\n }\n return extend(\n fields,\n introspectionResultsByKind.procedure.reduce((memo, proc) => {\n if (omit(proc, \"execute\")) return memo;\n const computedColumnDetails = getComputedColumnDetails(\n build,\n table,\n proc\n );\n if (!computedColumnDetails) return memo;\n const { pseudoColumnName } = computedColumnDetails;\n function makeField(forceList) {\n const fieldName = forceList\n ? inflection.computedColumnList(pseudoColumnName, proc, table)\n : inflection.computedColumn(pseudoColumnName, proc, table);\n try {\n memo = extend(\n memo,\n {\n [fieldName]: makeProcField(fieldName, proc, build, {\n fieldWithHooks,\n computed: true,\n forceList,\n }),\n },\n `Adding computed column for ${describePgEntity(\n proc\n )}. You can rename this field with a 'Smart Comment':\\n\\n ${sqlCommentByAddingTags(\n proc,\n {\n fieldName: \"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 computed column to '${Self.name}'`\n );\n },\n [\"PgComputedColumns\"]\n );\n}: Plugin);\n"],"file":"PgComputedColumnsPlugin.js"}
@@ -159,8 +159,8 @@ export default (function PgConnectionArgCondition(builder) {
159
159
  const fieldName = inflection.column(attr);
160
160
  const val = condition[fieldName];
161
161
  if (val != null) {
162
- queryBuilder.addLiveCondition(() => record =>
163
- record[attr.name] === val
162
+ queryBuilder.addLiveCondition(
163
+ () => record => record[attr.name] === val
164
164
  );
165
165
  queryBuilder.where(
166
166
  sql.fragment`${queryBuilder.getTableAlias()}.${sql.identifier(
@@ -168,8 +168,8 @@ export default (function PgConnectionArgCondition(builder) {
168
168
  )} = ${gql2pg(val, attr.type, attr.typeModifier)}`
169
169
  );
170
170
  } else if (val === null) {
171
- queryBuilder.addLiveCondition(() => record =>
172
- record[attr.name] == null
171
+ queryBuilder.addLiveCondition(
172
+ () => record => record[attr.name] == null
173
173
  );
174
174
  queryBuilder.where(
175
175
  sql.fragment`${queryBuilder.getTableAlias()}.${sql.identifier(
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/plugins/PgConnectionArgCondition.js"],"names":["PgConnectionArgCondition","builder","hook","_","build","newWithHooks","pgIntrospectionResultsByKind","introspectionResultsByKind","pgGetGqlInputTypeByTypeIdAndModifier","graphql","GraphQLInputObjectType","GraphQLString","pgColumnFilter","inflection","pgOmit","omit","describePgEntity","sqlCommentByAddingTags","class","forEach","table","isSelectable","namespace","tableTypeName","tableType","description","wrapDescription","name","conditionType","fields","context","fieldWithHooks","attributes","reduce","memo","attr","fieldName","column","extend","type","typeId","typeModifier","isPgConnectionConditionInputField","__origin","pgIntrospection","isPgCondition","args","pgSql","sql","gql2pg","getTypeByName","pgGetGqlTypeByTypeIdAndModifier","scope","isPgFieldConnection","isPgFieldSimpleCollection","pgFieldIntrospection","pgFieldIntrospectionTable","addArgDataGenerator","Self","shouldAddCondition","proc","kind","tags","filterable","TableType","id","TableConditionType","relevantAttributes","filter","connectionCondition","condition","pgQuery","queryBuilder","val","addLiveCondition","record","where","fragment","getTableAlias","identifier"],"mappings":"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","sourcesContent":["// @flow\nimport type { Plugin } from \"graphile-build\";\n\nexport default (function PgConnectionArgCondition(builder) {\n builder.hook(\n \"init\",\n (_, build) => {\n const {\n newWithHooks,\n pgIntrospectionResultsByKind: introspectionResultsByKind,\n pgGetGqlInputTypeByTypeIdAndModifier,\n graphql: { GraphQLInputObjectType, GraphQLString },\n pgColumnFilter,\n inflection,\n pgOmit: omit,\n describePgEntity,\n sqlCommentByAddingTags,\n } = build;\n introspectionResultsByKind.class.forEach(table => {\n // PERFORMANCE: These used to be .filter(...) calls\n if (!table.isSelectable || omit(table, \"filter\")) return;\n if (!table.namespace) return;\n\n const tableTypeName = inflection.tableType(table);\n /* const TableConditionType = */\n newWithHooks(\n GraphQLInputObjectType,\n {\n description: build.wrapDescription(\n `A condition to be used against \\`${tableTypeName}\\` object types. All fields are tested for equality and combined with a logical ‘and.’`,\n \"type\"\n ),\n name: inflection.conditionType(inflection.tableType(table)),\n fields: context => {\n const { fieldWithHooks } = context;\n return table.attributes.reduce((memo, attr) => {\n // PERFORMANCE: These used to be .filter(...) calls\n if (!pgColumnFilter(attr, build, context)) return memo;\n if (omit(attr, \"filter\")) return memo;\n\n const fieldName = inflection.column(attr);\n memo = build.extend(\n memo,\n {\n [fieldName]: fieldWithHooks(\n fieldName,\n {\n description: build.wrapDescription(\n `Checks for equality with the object’s \\`${fieldName}\\` field.`,\n \"field\"\n ),\n type:\n pgGetGqlInputTypeByTypeIdAndModifier(\n attr.typeId,\n attr.typeModifier\n ) || GraphQLString,\n },\n {\n isPgConnectionConditionInputField: true,\n }\n ),\n },\n `Adding condition argument for ${describePgEntity(attr)}`\n );\n return memo;\n }, {});\n },\n },\n {\n __origin: `Adding condition type for ${describePgEntity(\n table\n )}. You can rename the table's GraphQL type via a 'Smart Comment':\\n\\n ${sqlCommentByAddingTags(\n table,\n {\n name: \"newNameHere\",\n }\n )}`,\n pgIntrospection: table,\n isPgCondition: true,\n },\n true // Conditions might all be filtered\n );\n });\n return _;\n },\n [\"PgConnectionArgCondition\"],\n [],\n [\"PgTypes\"]\n );\n\n builder.hook(\n \"GraphQLObjectType:fields:field:args\",\n (args, build, context) => {\n const {\n pgSql: sql,\n gql2pg,\n extend,\n getTypeByName,\n pgGetGqlTypeByTypeIdAndModifier,\n pgColumnFilter,\n inflection,\n pgOmit: omit,\n } = build;\n const {\n scope: {\n fieldName,\n isPgFieldConnection,\n isPgFieldSimpleCollection,\n pgFieldIntrospection,\n pgFieldIntrospectionTable,\n },\n addArgDataGenerator,\n Self,\n } = context;\n\n const shouldAddCondition =\n isPgFieldConnection || isPgFieldSimpleCollection;\n if (!shouldAddCondition) return args;\n\n const proc =\n pgFieldIntrospection.kind === \"procedure\" ? pgFieldIntrospection : null;\n const table =\n pgFieldIntrospection.kind === \"class\"\n ? pgFieldIntrospection\n : proc\n ? pgFieldIntrospectionTable\n : null;\n if (\n !table ||\n table.kind !== \"class\" ||\n !table.namespace ||\n omit(table, \"filter\")\n ) {\n return args;\n }\n if (proc) {\n if (!proc.tags.filterable) {\n return args;\n }\n }\n\n const TableType = pgGetGqlTypeByTypeIdAndModifier(table.type.id, null);\n const TableConditionType = getTypeByName(\n inflection.conditionType(TableType.name)\n );\n if (!TableConditionType) {\n return args;\n }\n\n const relevantAttributes = table.attributes.filter(\n attr => pgColumnFilter(attr, build, context) && !omit(attr, \"filter\")\n );\n\n addArgDataGenerator(function connectionCondition({ condition }) {\n return {\n pgQuery: queryBuilder => {\n if (condition != null) {\n relevantAttributes.forEach(attr => {\n const fieldName = inflection.column(attr);\n const val = condition[fieldName];\n if (val != null) {\n queryBuilder.addLiveCondition(() => record =>\n record[attr.name] === val\n );\n queryBuilder.where(\n sql.fragment`${queryBuilder.getTableAlias()}.${sql.identifier(\n attr.name\n )} = ${gql2pg(val, attr.type, attr.typeModifier)}`\n );\n } else if (val === null) {\n queryBuilder.addLiveCondition(() => record =>\n record[attr.name] == null\n );\n queryBuilder.where(\n sql.fragment`${queryBuilder.getTableAlias()}.${sql.identifier(\n attr.name\n )} IS NULL`\n );\n }\n });\n }\n },\n };\n });\n\n return extend(\n args,\n {\n condition: {\n description: build.wrapDescription(\n \"A condition to be used in determining which values should be returned by the collection.\",\n \"arg\"\n ),\n type: TableConditionType,\n },\n },\n `Adding condition to connection field '${fieldName}' of '${Self.name}'`\n );\n },\n [\"PgConnectionArgCondition\"]\n );\n}: Plugin);\n"],"file":"PgConnectionArgCondition.js"}
1
+ {"version":3,"sources":["../../src/plugins/PgConnectionArgCondition.js"],"names":["PgConnectionArgCondition","builder","hook","_","build","newWithHooks","pgIntrospectionResultsByKind","introspectionResultsByKind","pgGetGqlInputTypeByTypeIdAndModifier","graphql","GraphQLInputObjectType","GraphQLString","pgColumnFilter","inflection","pgOmit","omit","describePgEntity","sqlCommentByAddingTags","class","forEach","table","isSelectable","namespace","tableTypeName","tableType","description","wrapDescription","name","conditionType","fields","context","fieldWithHooks","attributes","reduce","memo","attr","fieldName","column","extend","type","typeId","typeModifier","isPgConnectionConditionInputField","__origin","pgIntrospection","isPgCondition","args","pgSql","sql","gql2pg","getTypeByName","pgGetGqlTypeByTypeIdAndModifier","scope","isPgFieldConnection","isPgFieldSimpleCollection","pgFieldIntrospection","pgFieldIntrospectionTable","addArgDataGenerator","Self","shouldAddCondition","proc","kind","tags","filterable","TableType","id","TableConditionType","relevantAttributes","filter","connectionCondition","condition","pgQuery","queryBuilder","val","addLiveCondition","record","where","fragment","getTableAlias","identifier"],"mappings":";;;;;;;IAGyBA,wB,GAAT,SAASA,wBAAT,CAAkCC,OAAlC,EAA2C;AACzDA,EAAAA,OAAO,CAACC,IAAR,CACE,MADF,EAEE,CAACC,CAAD,EAAIC,KAAJ,KAAc;AACZ,UAAM;AACJC,MAAAA,YADI;AAEJC,MAAAA,4BAA4B,EAAEC,0BAF1B;AAGJC,MAAAA,oCAHI;AAIJC,MAAAA,OAAO,EAAE;AAAEC,QAAAA,sBAAF;AAA0BC,QAAAA;AAA1B,OAJL;AAKJC,MAAAA,cALI;AAMJC,MAAAA,UANI;AAOJC,MAAAA,MAAM,EAAEC,IAPJ;AAQJC,MAAAA,gBARI;AASJC,MAAAA;AATI,QAUFb,KAVJ;AAWAG,IAAAA,0BAA0B,CAACW,KAA3B,CAAiCC,OAAjC,CAAyCC,KAAK,IAAI;AAChD;AACA,UAAI,CAACA,KAAK,CAACC,YAAP,IAAuBN,IAAI,CAACK,KAAD,EAAQ,QAAR,CAA/B,EAAkD;AAClD,UAAI,CAACA,KAAK,CAACE,SAAX,EAAsB;AAEtB,YAAMC,aAAa,GAAGV,UAAU,CAACW,SAAX,CAAqBJ,KAArB,CAAtB;AACA;;AACAf,MAAAA,YAAY,CACVK,sBADU,EAEV;AACEe,QAAAA,WAAW,EAAErB,KAAK,CAACsB,eAAN,CACV,oCAAmCH,aAAc,wFADvC,EAEX,MAFW,CADf;AAKEI,QAAAA,IAAI,EAAEd,UAAU,CAACe,aAAX,CAAyBf,UAAU,CAACW,SAAX,CAAqBJ,KAArB,CAAzB,CALR;AAMES,QAAAA,MAAM,EAAEC,OAAO,IAAI;AACjB,gBAAM;AAAEC,YAAAA;AAAF,cAAqBD,OAA3B;AACA,iBAAOV,KAAK,CAACY,UAAN,CAAiBC,MAAjB,CAAwB,CAACC,IAAD,EAAOC,IAAP,KAAgB;AAC7C;AACA,gBAAI,CAACvB,cAAc,CAACuB,IAAD,EAAO/B,KAAP,EAAc0B,OAAd,CAAnB,EAA2C,OAAOI,IAAP;AAC3C,gBAAInB,IAAI,CAACoB,IAAD,EAAO,QAAP,CAAR,EAA0B,OAAOD,IAAP;AAE1B,kBAAME,SAAS,GAAGvB,UAAU,CAACwB,MAAX,CAAkBF,IAAlB,CAAlB;AACAD,YAAAA,IAAI,GAAG9B,KAAK,CAACkC,MAAN,CACLJ,IADK,EAEL;AACE,eAACE,SAAD,GAAaL,cAAc,CACzBK,SADyB,EAEzB;AACEX,gBAAAA,WAAW,EAAErB,KAAK,CAACsB,eAAN,CACV,2CAA0CU,SAAU,WAD1C,EAEX,OAFW,CADf;AAKEG,gBAAAA,IAAI,EACF/B,oCAAoC,CAClC2B,IAAI,CAACK,MAD6B,EAElCL,IAAI,CAACM,YAF6B,CAApC,IAGK9B;AATT,eAFyB,EAazB;AACE+B,gBAAAA,iCAAiC,EAAE;AADrC,eAbyB;AAD7B,aAFK,EAqBJ,iCAAgC1B,gBAAgB,CAACmB,IAAD,CAAO,EArBnD,CAAP;AAuBA,mBAAOD,IAAP;AACD,WA9BM,EA8BJ,EA9BI,CAAP;AA+BD;AAvCH,OAFU,EA2CV;AACES,QAAAA,QAAQ,EAAG,6BAA4B3B,gBAAgB,CACrDI,KADqD,CAErD,yEAAwEH,sBAAsB,CAC9FG,KAD8F,EAE9F;AACEO,UAAAA,IAAI,EAAE;AADR,SAF8F,CAK9F,EARJ;AASEiB,QAAAA,eAAe,EAAExB,KATnB;AAUEyB,QAAAA,aAAa,EAAE;AAVjB,OA3CU,EAuDV,IAvDU,CAuDL;AAvDK,OAAZ;AAyDD,KAhED;AAiEA,WAAO1C,CAAP;AACD,GAhFH,EAiFE,CAAC,0BAAD,CAjFF,EAkFE,EAlFF,EAmFE,CAAC,SAAD,CAnFF;AAsFAF,EAAAA,OAAO,CAACC,IAAR,CACE,qCADF,EAEE,CAAC4C,IAAD,EAAO1C,KAAP,EAAc0B,OAAd,KAA0B;AACxB,UAAM;AACJiB,MAAAA,KAAK,EAAEC,GADH;AAEJC,MAAAA,MAFI;AAGJX,MAAAA,MAHI;AAIJY,MAAAA,aAJI;AAKJC,MAAAA,+BALI;AAMJvC,MAAAA,cANI;AAOJC,MAAAA,UAPI;AAQJC,MAAAA,MAAM,EAAEC;AARJ,QASFX,KATJ;AAUA,UAAM;AACJgD,MAAAA,KAAK,EAAE;AACLhB,QAAAA,SADK;AAELiB,QAAAA,mBAFK;AAGLC,QAAAA,yBAHK;AAILC,QAAAA,oBAJK;AAKLC,QAAAA;AALK,OADH;AAQJC,MAAAA,mBARI;AASJC,MAAAA;AATI,QAUF5B,OAVJ;AAYA,UAAM6B,kBAAkB,GACtBN,mBAAmB,IAAIC,yBADzB;AAEA,QAAI,CAACK,kBAAL,EAAyB,OAAOb,IAAP;AAEzB,UAAMc,IAAI,GACRL,oBAAoB,CAACM,IAArB,KAA8B,WAA9B,GAA4CN,oBAA5C,GAAmE,IADrE;AAEA,UAAMnC,KAAK,GACTmC,oBAAoB,CAACM,IAArB,KAA8B,OAA9B,GACIN,oBADJ,GAEIK,IAAI,GACJJ,yBADI,GAEJ,IALN;;AAMA,QACE,CAACpC,KAAD,IACAA,KAAK,CAACyC,IAAN,KAAe,OADf,IAEA,CAACzC,KAAK,CAACE,SAFP,IAGAP,IAAI,CAACK,KAAD,EAAQ,QAAR,CAJN,EAKE;AACA,aAAO0B,IAAP;AACD;;AACD,QAAIc,IAAJ,EAAU;AACR,UAAI,CAACA,IAAI,CAACE,IAAL,CAAUC,UAAf,EAA2B;AACzB,eAAOjB,IAAP;AACD;AACF;;AAED,UAAMkB,SAAS,GAAGb,+BAA+B,CAAC/B,KAAK,CAACmB,IAAN,CAAW0B,EAAZ,EAAgB,IAAhB,CAAjD;AACA,UAAMC,kBAAkB,GAAGhB,aAAa,CACtCrC,UAAU,CAACe,aAAX,CAAyBoC,SAAS,CAACrC,IAAnC,CADsC,CAAxC;;AAGA,QAAI,CAACuC,kBAAL,EAAyB;AACvB,aAAOpB,IAAP;AACD;;AAED,UAAMqB,kBAAkB,GAAG/C,KAAK,CAACY,UAAN,CAAiBoC,MAAjB,CACzBjC,IAAI,IAAIvB,cAAc,CAACuB,IAAD,EAAO/B,KAAP,EAAc0B,OAAd,CAAd,IAAwC,CAACf,IAAI,CAACoB,IAAD,EAAO,QAAP,CAD5B,CAA3B;AAIAsB,IAAAA,mBAAmB,CAAC,SAASY,mBAAT,CAA6B;AAAEC,MAAAA;AAAF,KAA7B,EAA4C;AAC9D,aAAO;AACLC,QAAAA,OAAO,EAAEC,YAAY,IAAI;AACvB,cAAIF,SAAS,IAAI,IAAjB,EAAuB;AACrBH,YAAAA,kBAAkB,CAAChD,OAAnB,CAA2BgB,IAAI,IAAI;AACjC,oBAAMC,SAAS,GAAGvB,UAAU,CAACwB,MAAX,CAAkBF,IAAlB,CAAlB;AACA,oBAAMsC,GAAG,GAAGH,SAAS,CAAClC,SAAD,CAArB;;AACA,kBAAIqC,GAAG,IAAI,IAAX,EAAiB;AACfD,gBAAAA,YAAY,CAACE,gBAAb,CACE,MAAMC,MAAM,IAAIA,MAAM,CAACxC,IAAI,CAACR,IAAN,CAAN,KAAsB8C,GADxC;AAGAD,gBAAAA,YAAY,CAACI,KAAb,CACE5B,GAAG,CAAC6B,QAAS,GAAEL,YAAY,CAACM,aAAb,EAA6B,IAAG9B,GAAG,CAAC+B,UAAJ,CAC7C5C,IAAI,CAACR,IADwC,CAE7C,MAAKsB,MAAM,CAACwB,GAAD,EAAMtC,IAAI,CAACI,IAAX,EAAiBJ,IAAI,CAACM,YAAtB,CAAoC,EAHnD;AAKD,eATD,MASO,IAAIgC,GAAG,KAAK,IAAZ,EAAkB;AACvBD,gBAAAA,YAAY,CAACE,gBAAb,CACE,MAAMC,MAAM,IAAIA,MAAM,CAACxC,IAAI,CAACR,IAAN,CAAN,IAAqB,IADvC;AAGA6C,gBAAAA,YAAY,CAACI,KAAb,CACE5B,GAAG,CAAC6B,QAAS,GAAEL,YAAY,CAACM,aAAb,EAA6B,IAAG9B,GAAG,CAAC+B,UAAJ,CAC7C5C,IAAI,CAACR,IADwC,CAE7C,UAHJ;AAKD;AACF,aAtBD;AAuBD;AACF;AA3BI,OAAP;AA6BD,KA9BkB,CAAnB;AAgCA,WAAOW,MAAM,CACXQ,IADW,EAEX;AACEwB,MAAAA,SAAS,EAAE;AACT7C,QAAAA,WAAW,EAAErB,KAAK,CAACsB,eAAN,CACX,0FADW,EAEX,KAFW,CADJ;AAKTa,QAAAA,IAAI,EAAE2B;AALG;AADb,KAFW,EAWV,yCAAwC9B,SAAU,SAAQsB,IAAI,CAAC/B,IAAK,GAX1D,CAAb;AAaD,GA5GH,EA6GE,CAAC,0BAAD,CA7GF;AA+GD,C","sourcesContent":["// @flow\nimport type { Plugin } from \"graphile-build\";\n\nexport default (function PgConnectionArgCondition(builder) {\n builder.hook(\n \"init\",\n (_, build) => {\n const {\n newWithHooks,\n pgIntrospectionResultsByKind: introspectionResultsByKind,\n pgGetGqlInputTypeByTypeIdAndModifier,\n graphql: { GraphQLInputObjectType, GraphQLString },\n pgColumnFilter,\n inflection,\n pgOmit: omit,\n describePgEntity,\n sqlCommentByAddingTags,\n } = build;\n introspectionResultsByKind.class.forEach(table => {\n // PERFORMANCE: These used to be .filter(...) calls\n if (!table.isSelectable || omit(table, \"filter\")) return;\n if (!table.namespace) return;\n\n const tableTypeName = inflection.tableType(table);\n /* const TableConditionType = */\n newWithHooks(\n GraphQLInputObjectType,\n {\n description: build.wrapDescription(\n `A condition to be used against \\`${tableTypeName}\\` object types. All fields are tested for equality and combined with a logical ‘and.’`,\n \"type\"\n ),\n name: inflection.conditionType(inflection.tableType(table)),\n fields: context => {\n const { fieldWithHooks } = context;\n return table.attributes.reduce((memo, attr) => {\n // PERFORMANCE: These used to be .filter(...) calls\n if (!pgColumnFilter(attr, build, context)) return memo;\n if (omit(attr, \"filter\")) return memo;\n\n const fieldName = inflection.column(attr);\n memo = build.extend(\n memo,\n {\n [fieldName]: fieldWithHooks(\n fieldName,\n {\n description: build.wrapDescription(\n `Checks for equality with the object’s \\`${fieldName}\\` field.`,\n \"field\"\n ),\n type:\n pgGetGqlInputTypeByTypeIdAndModifier(\n attr.typeId,\n attr.typeModifier\n ) || GraphQLString,\n },\n {\n isPgConnectionConditionInputField: true,\n }\n ),\n },\n `Adding condition argument for ${describePgEntity(attr)}`\n );\n return memo;\n }, {});\n },\n },\n {\n __origin: `Adding condition type for ${describePgEntity(\n table\n )}. You can rename the table's GraphQL type via a 'Smart Comment':\\n\\n ${sqlCommentByAddingTags(\n table,\n {\n name: \"newNameHere\",\n }\n )}`,\n pgIntrospection: table,\n isPgCondition: true,\n },\n true // Conditions might all be filtered\n );\n });\n return _;\n },\n [\"PgConnectionArgCondition\"],\n [],\n [\"PgTypes\"]\n );\n\n builder.hook(\n \"GraphQLObjectType:fields:field:args\",\n (args, build, context) => {\n const {\n pgSql: sql,\n gql2pg,\n extend,\n getTypeByName,\n pgGetGqlTypeByTypeIdAndModifier,\n pgColumnFilter,\n inflection,\n pgOmit: omit,\n } = build;\n const {\n scope: {\n fieldName,\n isPgFieldConnection,\n isPgFieldSimpleCollection,\n pgFieldIntrospection,\n pgFieldIntrospectionTable,\n },\n addArgDataGenerator,\n Self,\n } = context;\n\n const shouldAddCondition =\n isPgFieldConnection || isPgFieldSimpleCollection;\n if (!shouldAddCondition) return args;\n\n const proc =\n pgFieldIntrospection.kind === \"procedure\" ? pgFieldIntrospection : null;\n const table =\n pgFieldIntrospection.kind === \"class\"\n ? pgFieldIntrospection\n : proc\n ? pgFieldIntrospectionTable\n : null;\n if (\n !table ||\n table.kind !== \"class\" ||\n !table.namespace ||\n omit(table, \"filter\")\n ) {\n return args;\n }\n if (proc) {\n if (!proc.tags.filterable) {\n return args;\n }\n }\n\n const TableType = pgGetGqlTypeByTypeIdAndModifier(table.type.id, null);\n const TableConditionType = getTypeByName(\n inflection.conditionType(TableType.name)\n );\n if (!TableConditionType) {\n return args;\n }\n\n const relevantAttributes = table.attributes.filter(\n attr => pgColumnFilter(attr, build, context) && !omit(attr, \"filter\")\n );\n\n addArgDataGenerator(function connectionCondition({ condition }) {\n return {\n pgQuery: queryBuilder => {\n if (condition != null) {\n relevantAttributes.forEach(attr => {\n const fieldName = inflection.column(attr);\n const val = condition[fieldName];\n if (val != null) {\n queryBuilder.addLiveCondition(\n () => record => record[attr.name] === val\n );\n queryBuilder.where(\n sql.fragment`${queryBuilder.getTableAlias()}.${sql.identifier(\n attr.name\n )} = ${gql2pg(val, attr.type, attr.typeModifier)}`\n );\n } else if (val === null) {\n queryBuilder.addLiveCondition(\n () => record => record[attr.name] == null\n );\n queryBuilder.where(\n sql.fragment`${queryBuilder.getTableAlias()}.${sql.identifier(\n attr.name\n )} IS NULL`\n );\n }\n });\n }\n },\n };\n });\n\n return extend(\n args,\n {\n condition: {\n description: build.wrapDescription(\n \"A condition to be used in determining which values should be returned by the collection.\",\n \"arg\"\n ),\n type: TableConditionType,\n },\n },\n `Adding condition to connection field '${fieldName}' of '${Self.name}'`\n );\n },\n [\"PgConnectionArgCondition\"]\n );\n}: Plugin);\n"],"file":"PgConnectionArgCondition.js"}
@@ -35,7 +35,7 @@ var PgConnectionArgOrderBy = function PgConnectionArgOrderBy(builder, {
35
35
  name: inflection.orderByType(tableTypeName),
36
36
  description: build.wrapDescription(`Methods to use when ordering \`${tableTypeName}\`.`, "type"),
37
37
  values: {
38
- NATURAL: {
38
+ [inflection.builtin("NATURAL")]: {
39
39
  value: {
40
40
  alias: null,
41
41
  specs: []
@@ -31,7 +31,7 @@ export default (function PgConnectionArgOrderBy(builder, { orderByNullsLast }) {
31
31
  "type"
32
32
  ),
33
33
  values: {
34
- NATURAL: {
34
+ [inflection.builtin("NATURAL")]: {
35
35
  value: {
36
36
  alias: null,
37
37
  specs: [],
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/plugins/PgConnectionArgOrderBy.js"],"names":["PgConnectionArgOrderBy","builder","orderByNullsLast","hook","_","build","newWithHooks","pgIntrospectionResultsByKind","introspectionResultsByKind","graphql","GraphQLEnumType","inflection","pgOmit","omit","sqlCommentByAddingTags","describePgEntity","class","forEach","table","isSelectable","namespace","tableTypeName","tableType","name","orderByType","description","wrapDescription","values","NATURAL","value","alias","specs","__origin","pgIntrospection","isPgRowSortEnum","args","context","extend","getTypeByName","pgGetGqlTypeByTypeIdAndModifier","pgSql","sql","GraphQLList","GraphQLNonNull","scope","fieldName","isPgFieldConnection","isPgFieldSimpleCollection","pgFieldIntrospection","pgFieldIntrospectionTable","addArgDataGenerator","Self","proc","kind","tags","sortable","TableType","type","id","TableOrderByType","cursorPrefixFromOrderBy","orderBy","cursorPrefixes","itemIndex","itemCount","length","item","push","literal","connectionOrderBy","rawOrderBy","Array","isArray","pgCursorPrefix","pgQuery","queryBuilder","unique","orders","col","ascending","specNullsFirst","expr","fragment","getTableAlias","identifier","nullsFirst","undefined","setOrderIsUnique"],"mappings":"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","sourcesContent":["// @flow\nimport isString from \"lodash/isString\";\nimport type { Plugin } from \"graphile-build\";\n\nexport default (function PgConnectionArgOrderBy(builder, { orderByNullsLast }) {\n builder.hook(\n \"init\",\n (_, build) => {\n const {\n newWithHooks,\n pgIntrospectionResultsByKind: introspectionResultsByKind,\n graphql: { GraphQLEnumType },\n inflection,\n pgOmit: omit,\n sqlCommentByAddingTags,\n describePgEntity,\n } = build;\n introspectionResultsByKind.class.forEach(table => {\n // PERFORMANCE: These used to be .filter(...) calls\n if (!table.isSelectable || omit(table, \"order\")) return;\n if (!table.namespace) return;\n\n const tableTypeName = inflection.tableType(table);\n /* const TableOrderByType = */\n newWithHooks(\n GraphQLEnumType,\n {\n name: inflection.orderByType(tableTypeName),\n description: build.wrapDescription(\n `Methods to use when ordering \\`${tableTypeName}\\`.`,\n \"type\"\n ),\n values: {\n NATURAL: {\n value: {\n alias: null,\n specs: [],\n },\n },\n },\n },\n {\n __origin: `Adding connection \"orderBy\" argument for ${describePgEntity(\n table\n )}. You can rename the table's GraphQL type via a 'Smart Comment':\\n\\n ${sqlCommentByAddingTags(\n table,\n {\n name: \"newNameHere\",\n }\n )}`,\n pgIntrospection: table,\n isPgRowSortEnum: true,\n }\n );\n });\n return _;\n },\n [\"PgConnectionArgOrderBy\"]\n );\n\n builder.hook(\n \"GraphQLObjectType:fields:field:args\",\n (args, build, context) => {\n const {\n extend,\n getTypeByName,\n pgGetGqlTypeByTypeIdAndModifier,\n pgSql: sql,\n graphql: { GraphQLList, GraphQLNonNull },\n inflection,\n pgOmit: omit,\n } = build;\n const {\n scope: {\n fieldName,\n isPgFieldConnection,\n isPgFieldSimpleCollection,\n pgFieldIntrospection,\n pgFieldIntrospectionTable,\n },\n addArgDataGenerator,\n Self,\n } = context;\n\n if (!isPgFieldConnection && !isPgFieldSimpleCollection) {\n return args;\n }\n\n const proc =\n pgFieldIntrospection.kind === \"procedure\" ? pgFieldIntrospection : null;\n const table =\n pgFieldIntrospection.kind === \"class\"\n ? pgFieldIntrospection\n : proc\n ? pgFieldIntrospectionTable\n : null;\n if (\n !table ||\n !table.namespace ||\n !table.isSelectable ||\n omit(table, \"order\")\n ) {\n return args;\n }\n if (proc) {\n if (!proc.tags.sortable) {\n return args;\n }\n }\n const TableType = pgGetGqlTypeByTypeIdAndModifier(table.type.id, null);\n const tableTypeName = TableType.name;\n const TableOrderByType = getTypeByName(\n inflection.orderByType(tableTypeName)\n );\n const cursorPrefixFromOrderBy = orderBy => {\n if (orderBy) {\n const cursorPrefixes = [];\n for (\n let itemIndex = 0, itemCount = orderBy.length;\n itemIndex < itemCount;\n itemIndex++\n ) {\n const item = orderBy[itemIndex];\n if (item.alias) {\n cursorPrefixes.push(sql.literal(item.alias));\n }\n }\n if (cursorPrefixes.length > 0) {\n return cursorPrefixes;\n }\n }\n return null;\n };\n\n addArgDataGenerator(function connectionOrderBy({ orderBy: rawOrderBy }) {\n const orderBy = rawOrderBy\n ? Array.isArray(rawOrderBy)\n ? rawOrderBy\n : [rawOrderBy]\n : null;\n return {\n pgCursorPrefix: cursorPrefixFromOrderBy(orderBy),\n pgQuery: queryBuilder => {\n if (orderBy != null) {\n orderBy.forEach(item => {\n const { specs, unique } = item;\n const orders =\n Array.isArray(specs[0]) || specs.length === 0\n ? specs\n : [specs];\n orders.forEach(([col, ascending, specNullsFirst]) => {\n const expr = isString(col)\n ? sql.fragment`${queryBuilder.getTableAlias()}.${sql.identifier(\n col\n )}`\n : col;\n // If the enum specifies null ordering, use that\n // Otherwise, use the orderByNullsLast option if present\n const nullsFirst =\n specNullsFirst != null\n ? specNullsFirst\n : orderByNullsLast != null\n ? !orderByNullsLast\n : undefined;\n queryBuilder.orderBy(expr, ascending, nullsFirst);\n });\n if (unique) {\n queryBuilder.setOrderIsUnique();\n }\n });\n }\n },\n };\n });\n\n return extend(\n args,\n {\n orderBy: {\n description: build.wrapDescription(\n `The method to use when ordering \\`${tableTypeName}\\`.`,\n \"arg\"\n ),\n type: new GraphQLList(new GraphQLNonNull(TableOrderByType)),\n },\n },\n `Adding 'orderBy' argument to field '${fieldName}' of '${Self.name}'`\n );\n },\n [\"PgConnectionArgOrderBy\"]\n );\n}: Plugin);\n"],"file":"PgConnectionArgOrderBy.js"}
1
+ {"version":3,"sources":["../../src/plugins/PgConnectionArgOrderBy.js"],"names":["PgConnectionArgOrderBy","builder","orderByNullsLast","hook","_","build","newWithHooks","pgIntrospectionResultsByKind","introspectionResultsByKind","graphql","GraphQLEnumType","inflection","pgOmit","omit","sqlCommentByAddingTags","describePgEntity","class","forEach","table","isSelectable","namespace","tableTypeName","tableType","name","orderByType","description","wrapDescription","values","builtin","value","alias","specs","__origin","pgIntrospection","isPgRowSortEnum","args","context","extend","getTypeByName","pgGetGqlTypeByTypeIdAndModifier","pgSql","sql","GraphQLList","GraphQLNonNull","scope","fieldName","isPgFieldConnection","isPgFieldSimpleCollection","pgFieldIntrospection","pgFieldIntrospectionTable","addArgDataGenerator","Self","proc","kind","tags","sortable","TableType","type","id","TableOrderByType","cursorPrefixFromOrderBy","orderBy","cursorPrefixes","itemIndex","itemCount","length","item","push","literal","connectionOrderBy","rawOrderBy","Array","isArray","pgCursorPrefix","pgQuery","queryBuilder","unique","orders","col","ascending","specNullsFirst","expr","fragment","getTableAlias","identifier","nullsFirst","undefined","setOrderIsUnique"],"mappings":"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","sourcesContent":["// @flow\nimport isString from \"lodash/isString\";\nimport type { Plugin } from \"graphile-build\";\n\nexport default (function PgConnectionArgOrderBy(builder, { orderByNullsLast }) {\n builder.hook(\n \"init\",\n (_, build) => {\n const {\n newWithHooks,\n pgIntrospectionResultsByKind: introspectionResultsByKind,\n graphql: { GraphQLEnumType },\n inflection,\n pgOmit: omit,\n sqlCommentByAddingTags,\n describePgEntity,\n } = build;\n introspectionResultsByKind.class.forEach(table => {\n // PERFORMANCE: These used to be .filter(...) calls\n if (!table.isSelectable || omit(table, \"order\")) return;\n if (!table.namespace) return;\n\n const tableTypeName = inflection.tableType(table);\n /* const TableOrderByType = */\n newWithHooks(\n GraphQLEnumType,\n {\n name: inflection.orderByType(tableTypeName),\n description: build.wrapDescription(\n `Methods to use when ordering \\`${tableTypeName}\\`.`,\n \"type\"\n ),\n values: {\n [inflection.builtin(\"NATURAL\")]: {\n value: {\n alias: null,\n specs: [],\n },\n },\n },\n },\n {\n __origin: `Adding connection \"orderBy\" argument for ${describePgEntity(\n table\n )}. You can rename the table's GraphQL type via a 'Smart Comment':\\n\\n ${sqlCommentByAddingTags(\n table,\n {\n name: \"newNameHere\",\n }\n )}`,\n pgIntrospection: table,\n isPgRowSortEnum: true,\n }\n );\n });\n return _;\n },\n [\"PgConnectionArgOrderBy\"]\n );\n\n builder.hook(\n \"GraphQLObjectType:fields:field:args\",\n (args, build, context) => {\n const {\n extend,\n getTypeByName,\n pgGetGqlTypeByTypeIdAndModifier,\n pgSql: sql,\n graphql: { GraphQLList, GraphQLNonNull },\n inflection,\n pgOmit: omit,\n } = build;\n const {\n scope: {\n fieldName,\n isPgFieldConnection,\n isPgFieldSimpleCollection,\n pgFieldIntrospection,\n pgFieldIntrospectionTable,\n },\n addArgDataGenerator,\n Self,\n } = context;\n\n if (!isPgFieldConnection && !isPgFieldSimpleCollection) {\n return args;\n }\n\n const proc =\n pgFieldIntrospection.kind === \"procedure\" ? pgFieldIntrospection : null;\n const table =\n pgFieldIntrospection.kind === \"class\"\n ? pgFieldIntrospection\n : proc\n ? pgFieldIntrospectionTable\n : null;\n if (\n !table ||\n !table.namespace ||\n !table.isSelectable ||\n omit(table, \"order\")\n ) {\n return args;\n }\n if (proc) {\n if (!proc.tags.sortable) {\n return args;\n }\n }\n const TableType = pgGetGqlTypeByTypeIdAndModifier(table.type.id, null);\n const tableTypeName = TableType.name;\n const TableOrderByType = getTypeByName(\n inflection.orderByType(tableTypeName)\n );\n const cursorPrefixFromOrderBy = orderBy => {\n if (orderBy) {\n const cursorPrefixes = [];\n for (\n let itemIndex = 0, itemCount = orderBy.length;\n itemIndex < itemCount;\n itemIndex++\n ) {\n const item = orderBy[itemIndex];\n if (item.alias) {\n cursorPrefixes.push(sql.literal(item.alias));\n }\n }\n if (cursorPrefixes.length > 0) {\n return cursorPrefixes;\n }\n }\n return null;\n };\n\n addArgDataGenerator(function connectionOrderBy({ orderBy: rawOrderBy }) {\n const orderBy = rawOrderBy\n ? Array.isArray(rawOrderBy)\n ? rawOrderBy\n : [rawOrderBy]\n : null;\n return {\n pgCursorPrefix: cursorPrefixFromOrderBy(orderBy),\n pgQuery: queryBuilder => {\n if (orderBy != null) {\n orderBy.forEach(item => {\n const { specs, unique } = item;\n const orders =\n Array.isArray(specs[0]) || specs.length === 0\n ? specs\n : [specs];\n orders.forEach(([col, ascending, specNullsFirst]) => {\n const expr = isString(col)\n ? sql.fragment`${queryBuilder.getTableAlias()}.${sql.identifier(\n col\n )}`\n : col;\n // If the enum specifies null ordering, use that\n // Otherwise, use the orderByNullsLast option if present\n const nullsFirst =\n specNullsFirst != null\n ? specNullsFirst\n : orderByNullsLast != null\n ? !orderByNullsLast\n : undefined;\n queryBuilder.orderBy(expr, ascending, nullsFirst);\n });\n if (unique) {\n queryBuilder.setOrderIsUnique();\n }\n });\n }\n },\n };\n });\n\n return extend(\n args,\n {\n orderBy: {\n description: build.wrapDescription(\n `The method to use when ordering \\`${tableTypeName}\\`.`,\n \"arg\"\n ),\n type: new GraphQLList(new GraphQLNonNull(TableOrderByType)),\n },\n },\n `Adding 'orderBy' argument to field '${fieldName}' of '${Self.name}'`\n );\n },\n [\"PgConnectionArgOrderBy\"]\n );\n}: Plugin);\n"],"file":"PgConnectionArgOrderBy.js"}
@@ -34,7 +34,8 @@ var PgConnectionArgOrderByDefaultValue = function PgConnectionArgOrderByDefaultV
34
34
  return args;
35
35
  }
36
36
 
37
- const defaultValueEnum = TableOrderByType.getValues().find(v => v.name === "PRIMARY_KEY_ASC") || TableOrderByType.getValues()[0];
37
+ const primaryKeyAsc = inflection.builtin("PRIMARY_KEY_ASC");
38
+ const defaultValueEnum = TableOrderByType.getValues().find(v => v.name === primaryKeyAsc) || TableOrderByType.getValues()[0];
38
39
  return extend(args, {
39
40
  orderBy: extend(args.orderBy, {
40
41
  defaultValue: defaultValueEnum && [defaultValueEnum.value]
@@ -35,8 +35,9 @@ export default (function PgConnectionArgOrderByDefaultValue(builder) {
35
35
  return args;
36
36
  }
37
37
 
38
+ const primaryKeyAsc = inflection.builtin("PRIMARY_KEY_ASC");
38
39
  const defaultValueEnum =
39
- TableOrderByType.getValues().find(v => v.name === "PRIMARY_KEY_ASC") ||
40
+ TableOrderByType.getValues().find(v => v.name === primaryKeyAsc) ||
40
41
  TableOrderByType.getValues()[0];
41
42
 
42
43
  return extend(args, {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/plugins/PgConnectionArgOrderByDefaultValue.js"],"names":["PgConnectionArgOrderByDefaultValue","builder","hook","args","build","context","extend","getTypeByName","pgGetGqlTypeByTypeIdAndModifier","inflection","scope","fieldName","isPgFieldConnection","pgFieldIntrospection","table","Self","kind","namespace","isSelectable","orderBy","TableType","type","id","tableTypeName","name","TableOrderByType","orderByType","defaultValueEnum","getValues","find","v","defaultValue","value"],"mappings":";;;;;;;IAGyBA,kC,GAAT,SAASA,kCAAT,CAA4CC,OAA5C,EAAqD;AACnEA,EAAAA,OAAO,CAACC,IAAR,CACE,qCADF,EAEE,CAACC,IAAD,EAAOC,KAAP,EAAcC,OAAd,KAA0B;AACxB,UAAM;AACJC,MAAAA,MADI;AAEJC,MAAAA,aAFI;AAGJC,MAAAA,+BAHI;AAIJC,MAAAA;AAJI,QAKFL,KALJ;AAMA,UAAM;AACJM,MAAAA,KAAK,EAAE;AAAEC,QAAAA,SAAF;AAAaC,QAAAA,mBAAb;AAAkCC,QAAAA,oBAAoB,EAAEC;AAAxD,OADH;AAEJC,MAAAA;AAFI,QAGFV,OAHJ;;AAKA,QACE,CAACO,mBAAD,IACA,CAACE,KADD,IAEAA,KAAK,CAACE,IAAN,KAAe,OAFf,IAGA,CAACF,KAAK,CAACG,SAHP,IAIA,CAACH,KAAK,CAACI,YAJP,IAKA,CAACf,IAAI,CAACgB,OANR,EAOE;AACA,aAAOhB,IAAP;AACD;;AACD,UAAMiB,SAAS,GAAGZ,+BAA+B,CAACM,KAAK,CAACO,IAAN,CAAWC,EAAZ,EAAgB,IAAhB,CAAjD;AACA,UAAMC,aAAa,GAAGH,SAAS,CAACI,IAAhC;AACA,UAAMC,gBAAgB,GAAGlB,aAAa,CACpCE,UAAU,CAACiB,WAAX,CAAuBH,aAAvB,CADoC,CAAtC;;AAGA,QAAI,CAACE,gBAAL,EAAuB;AACrB,aAAOtB,IAAP;AACD;;AAED,UAAMwB,gBAAgB,GACpBF,gBAAgB,CAACG,SAAjB,GAA6BC,IAA7B,CAAkCC,CAAC,IAAIA,CAAC,CAACN,IAAF,KAAW,iBAAlD,KACAC,gBAAgB,CAACG,SAAjB,GAA6B,CAA7B,CAFF;AAIA,WAAOtB,MAAM,CAACH,IAAD,EAAO;AAClBgB,MAAAA,OAAO,EAAEb,MAAM,CACbH,IAAI,CAACgB,OADQ,EAEb;AACEY,QAAAA,YAAY,EAAEJ,gBAAgB,IAAI,CAACA,gBAAgB,CAACK,KAAlB;AADpC,OAFa,EAKZ,6CAA4CrB,SAAU,SAAQI,IAAI,CAACS,IAAK,GAL5D;AADG,KAAP,CAAb;AASD,GA9CH,EA+CE,CAAC,oCAAD,CA/CF;AAiDD,C","sourcesContent":["// @flow\nimport type { Plugin } from \"graphile-build\";\n\nexport default (function PgConnectionArgOrderByDefaultValue(builder) {\n builder.hook(\n \"GraphQLObjectType:fields:field:args\",\n (args, build, context) => {\n const {\n extend,\n getTypeByName,\n pgGetGqlTypeByTypeIdAndModifier,\n inflection,\n } = build;\n const {\n scope: { fieldName, isPgFieldConnection, pgFieldIntrospection: table },\n Self,\n } = context;\n\n if (\n !isPgFieldConnection ||\n !table ||\n table.kind !== \"class\" ||\n !table.namespace ||\n !table.isSelectable ||\n !args.orderBy\n ) {\n return args;\n }\n const TableType = pgGetGqlTypeByTypeIdAndModifier(table.type.id, null);\n const tableTypeName = TableType.name;\n const TableOrderByType = getTypeByName(\n inflection.orderByType(tableTypeName)\n );\n if (!TableOrderByType) {\n return args;\n }\n\n const defaultValueEnum =\n TableOrderByType.getValues().find(v => v.name === \"PRIMARY_KEY_ASC\") ||\n TableOrderByType.getValues()[0];\n\n return extend(args, {\n orderBy: extend(\n args.orderBy,\n {\n defaultValue: defaultValueEnum && [defaultValueEnum.value],\n },\n `Adding defaultValue to orderBy for field '${fieldName}' of '${Self.name}'`\n ),\n });\n },\n [\"PgConnectionArgOrderByDefaultValue\"]\n );\n}: Plugin);\n"],"file":"PgConnectionArgOrderByDefaultValue.js"}
1
+ {"version":3,"sources":["../../src/plugins/PgConnectionArgOrderByDefaultValue.js"],"names":["PgConnectionArgOrderByDefaultValue","builder","hook","args","build","context","extend","getTypeByName","pgGetGqlTypeByTypeIdAndModifier","inflection","scope","fieldName","isPgFieldConnection","pgFieldIntrospection","table","Self","kind","namespace","isSelectable","orderBy","TableType","type","id","tableTypeName","name","TableOrderByType","orderByType","primaryKeyAsc","builtin","defaultValueEnum","getValues","find","v","defaultValue","value"],"mappings":";;;;;;;IAGyBA,kC,GAAT,SAASA,kCAAT,CAA4CC,OAA5C,EAAqD;AACnEA,EAAAA,OAAO,CAACC,IAAR,CACE,qCADF,EAEE,CAACC,IAAD,EAAOC,KAAP,EAAcC,OAAd,KAA0B;AACxB,UAAM;AACJC,MAAAA,MADI;AAEJC,MAAAA,aAFI;AAGJC,MAAAA,+BAHI;AAIJC,MAAAA;AAJI,QAKFL,KALJ;AAMA,UAAM;AACJM,MAAAA,KAAK,EAAE;AAAEC,QAAAA,SAAF;AAAaC,QAAAA,mBAAb;AAAkCC,QAAAA,oBAAoB,EAAEC;AAAxD,OADH;AAEJC,MAAAA;AAFI,QAGFV,OAHJ;;AAKA,QACE,CAACO,mBAAD,IACA,CAACE,KADD,IAEAA,KAAK,CAACE,IAAN,KAAe,OAFf,IAGA,CAACF,KAAK,CAACG,SAHP,IAIA,CAACH,KAAK,CAACI,YAJP,IAKA,CAACf,IAAI,CAACgB,OANR,EAOE;AACA,aAAOhB,IAAP;AACD;;AACD,UAAMiB,SAAS,GAAGZ,+BAA+B,CAACM,KAAK,CAACO,IAAN,CAAWC,EAAZ,EAAgB,IAAhB,CAAjD;AACA,UAAMC,aAAa,GAAGH,SAAS,CAACI,IAAhC;AACA,UAAMC,gBAAgB,GAAGlB,aAAa,CACpCE,UAAU,CAACiB,WAAX,CAAuBH,aAAvB,CADoC,CAAtC;;AAGA,QAAI,CAACE,gBAAL,EAAuB;AACrB,aAAOtB,IAAP;AACD;;AAED,UAAMwB,aAAa,GAAGlB,UAAU,CAACmB,OAAX,CAAmB,iBAAnB,CAAtB;AACA,UAAMC,gBAAgB,GACpBJ,gBAAgB,CAACK,SAAjB,GAA6BC,IAA7B,CAAkCC,CAAC,IAAIA,CAAC,CAACR,IAAF,KAAWG,aAAlD,KACAF,gBAAgB,CAACK,SAAjB,GAA6B,CAA7B,CAFF;AAIA,WAAOxB,MAAM,CAACH,IAAD,EAAO;AAClBgB,MAAAA,OAAO,EAAEb,MAAM,CACbH,IAAI,CAACgB,OADQ,EAEb;AACEc,QAAAA,YAAY,EAAEJ,gBAAgB,IAAI,CAACA,gBAAgB,CAACK,KAAlB;AADpC,OAFa,EAKZ,6CAA4CvB,SAAU,SAAQI,IAAI,CAACS,IAAK,GAL5D;AADG,KAAP,CAAb;AASD,GA/CH,EAgDE,CAAC,oCAAD,CAhDF;AAkDD,C","sourcesContent":["// @flow\nimport type { Plugin } from \"graphile-build\";\n\nexport default (function PgConnectionArgOrderByDefaultValue(builder) {\n builder.hook(\n \"GraphQLObjectType:fields:field:args\",\n (args, build, context) => {\n const {\n extend,\n getTypeByName,\n pgGetGqlTypeByTypeIdAndModifier,\n inflection,\n } = build;\n const {\n scope: { fieldName, isPgFieldConnection, pgFieldIntrospection: table },\n Self,\n } = context;\n\n if (\n !isPgFieldConnection ||\n !table ||\n table.kind !== \"class\" ||\n !table.namespace ||\n !table.isSelectable ||\n !args.orderBy\n ) {\n return args;\n }\n const TableType = pgGetGqlTypeByTypeIdAndModifier(table.type.id, null);\n const tableTypeName = TableType.name;\n const TableOrderByType = getTypeByName(\n inflection.orderByType(tableTypeName)\n );\n if (!TableOrderByType) {\n return args;\n }\n\n const primaryKeyAsc = inflection.builtin(\"PRIMARY_KEY_ASC\");\n const defaultValueEnum =\n TableOrderByType.getValues().find(v => v.name === primaryKeyAsc) ||\n TableOrderByType.getValues()[0];\n\n return extend(args, {\n orderBy: extend(\n args.orderBy,\n {\n defaultValue: defaultValueEnum && [defaultValueEnum.value],\n },\n `Adding defaultValue to orderBy for field '${fieldName}' of '${Self.name}'`\n ),\n });\n },\n [\"PgConnectionArgOrderByDefaultValue\"]\n );\n}: Plugin);\n"],"file":"PgConnectionArgOrderByDefaultValue.js"}
@@ -128,10 +128,11 @@ export default (function PgForwardRelationPlugin(builder, { subscriptions }) {
128
128
  return {
129
129
  pgQuery: queryBuilder => {
130
130
  queryBuilder.select(() => {
131
- const resolveData = getDataFromParsedResolveInfoFragment(
132
- parsedResolveInfoFragment,
133
- gqlForeignTableType
134
- );
131
+ const resolveData =
132
+ getDataFromParsedResolveInfoFragment(
133
+ parsedResolveInfoFragment,
134
+ gqlForeignTableType
135
+ );
135
136
  const foreignTableAlias = sql.identifier(Symbol());
136
137
  const query = queryFromResolveData(
137
138
  sql.identifier(
@@ -145,7 +146,8 @@ export default (function PgForwardRelationPlugin(builder, { subscriptions }) {
145
146
  asJson: true,
146
147
  },
147
148
  innerQueryBuilder => {
148
- innerQueryBuilder.parentQueryBuilder = queryBuilder;
149
+ innerQueryBuilder.parentQueryBuilder =
150
+ queryBuilder;
149
151
  if (subscriptions && table.primaryKeyConstraint) {
150
152
  queryBuilder.selectIdentifiers(table);
151
153
  }
@@ -186,9 +188,8 @@ export default (function PgForwardRelationPlugin(builder, { subscriptions }) {
186
188
  resolve: (rawData, _args, resolveContext, resolveInfo) => {
187
189
  const data = isMutationPayload ? rawData.data : rawData;
188
190
  if (!data) return null;
189
- const safeAlias = getSafeAliasFromResolveInfo(
190
- resolveInfo
191
- );
191
+ const safeAlias =
192
+ getSafeAliasFromResolveInfo(resolveInfo);
192
193
  const record = data[safeAlias];
193
194
  const liveRecord =
194
195
  resolveInfo.rootValue &&
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/plugins/PgForwardRelationPlugin.js"],"names":["debug","PgForwardRelationPlugin","builder","subscriptions","hook","fields","build","context","extend","getSafeAliasFromResolveInfo","getSafeAliasFromAlias","pgGetGqlTypeByTypeIdAndModifier","pgIntrospectionResultsByKind","introspectionResultsByKind","pgSql","sql","inflection","pgQueryFromResolveData","queryFromResolveData","pgOmit","omit","sqlCommentByAddingTags","describePgEntity","scope","isPgRowType","isPgCompositeType","isMutationPayload","pgIntrospection","pgIntrospectionTable","fieldWithHooks","Self","table","kind","namespace","returnTypeId","typeId","returnsSet","foreignKeyConstraints","constraints","filter","con","type","reduce","memo","constraint","gqlTableType","id","tableTypeName","name","classId","foreignTable","classById","foreignClassId","gqlForeignTableType","foreignTableTypeName","Error","foreignSchema","keys","keyAttributes","foreignKeys","foreignKeyAttributes","every","_","some","key","fieldName","singleRelationByKeys","getDataFromParsedResolveInfoFragment","addDataGenerator","parsedResolveInfoFragment","pgQuery","queryBuilder","select","resolveData","foreignTableAlias","identifier","Symbol","query","useAsterisk","asJson","innerQueryBuilder","parentQueryBuilder","primaryKeyConstraint","selectIdentifiers","forEach","i","where","fragment","getTableAlias","rootValue","alias","description","tags","forwardDescription","wrapDescription","resolve","rawData","_args","resolveContext","resolveInfo","data","safeAlias","record","liveRecord","__identifiers","pgFieldIntrospection","isPgForwardRelationField"],"mappings":"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","sourcesContent":["// @flow\nimport type { Plugin } from \"graphile-build\";\nimport debugFactory from \"debug\";\n\nconst debug = debugFactory(\"graphile-build-pg\");\n\nexport default (function PgForwardRelationPlugin(builder, { subscriptions }) {\n builder.hook(\n \"GraphQLObjectType:fields\",\n (fields, build, context) => {\n const {\n extend,\n getSafeAliasFromResolveInfo,\n getSafeAliasFromAlias,\n pgGetGqlTypeByTypeIdAndModifier,\n pgIntrospectionResultsByKind: introspectionResultsByKind,\n pgSql: sql,\n inflection,\n pgQueryFromResolveData: queryFromResolveData,\n pgOmit: omit,\n sqlCommentByAddingTags,\n describePgEntity,\n } = build;\n const {\n scope: {\n isPgRowType,\n isPgCompositeType,\n isMutationPayload,\n pgIntrospection,\n pgIntrospectionTable,\n },\n fieldWithHooks,\n Self,\n } = context;\n\n const table = pgIntrospectionTable || pgIntrospection;\n if (\n !(isPgRowType || isMutationPayload || isPgCompositeType) ||\n !table ||\n table.kind !== \"class\" ||\n !table.namespace\n ) {\n return fields;\n }\n if (\n isMutationPayload &&\n pgIntrospection.kind === \"procedure\" &&\n (pgIntrospection.returnTypeId !== table.typeId ||\n pgIntrospection.returnsSet)\n ) {\n return fields;\n }\n // This is a relation in which we (table) are local, and there's a foreign table\n\n const foreignKeyConstraints = table.constraints.filter(\n con => con.type === \"f\"\n );\n\n return extend(\n fields,\n foreignKeyConstraints.reduce((memo, constraint) => {\n if (omit(constraint, \"read\")) {\n return memo;\n }\n const gqlTableType = pgGetGqlTypeByTypeIdAndModifier(\n table.type.id,\n null\n );\n const tableTypeName = gqlTableType.name;\n if (!gqlTableType) {\n debug(\n `Could not determine type for table with id ${constraint.classId}`\n );\n return memo;\n }\n const foreignTable =\n introspectionResultsByKind.classById[constraint.foreignClassId];\n const gqlForeignTableType = pgGetGqlTypeByTypeIdAndModifier(\n foreignTable.type.id,\n null\n );\n const foreignTableTypeName = gqlForeignTableType.name;\n if (!gqlForeignTableType) {\n debug(\n `Could not determine type for foreign table with id ${constraint.foreignClassId}`\n );\n return memo;\n }\n if (!foreignTable) {\n throw new Error(\n `Could not find the foreign table (constraint: ${constraint.name})`\n );\n }\n if (omit(foreignTable, \"read\")) {\n return memo;\n }\n const foreignSchema = foreignTable.namespace;\n\n const keys = constraint.keyAttributes;\n const foreignKeys = constraint.foreignKeyAttributes;\n if (!keys.every(_ => _) || !foreignKeys.every(_ => _)) {\n throw new Error(\"Could not find key columns!\");\n }\n if (keys.some(key => omit(key, \"read\"))) {\n return memo;\n }\n if (foreignKeys.some(key => omit(key, \"read\"))) {\n return memo;\n }\n\n const fieldName = inflection.singleRelationByKeys(\n keys,\n foreignTable,\n table,\n constraint\n );\n\n memo = extend(\n memo,\n {\n [fieldName]: fieldWithHooks(\n fieldName,\n ({\n getDataFromParsedResolveInfoFragment,\n addDataGenerator,\n }) => {\n addDataGenerator(parsedResolveInfoFragment => {\n return {\n pgQuery: queryBuilder => {\n queryBuilder.select(() => {\n const resolveData = getDataFromParsedResolveInfoFragment(\n parsedResolveInfoFragment,\n gqlForeignTableType\n );\n const foreignTableAlias = sql.identifier(Symbol());\n const query = queryFromResolveData(\n sql.identifier(\n foreignSchema.name,\n foreignTable.name\n ),\n foreignTableAlias,\n resolveData,\n {\n useAsterisk: false, // Because it's only a single relation, no need\n asJson: true,\n },\n innerQueryBuilder => {\n innerQueryBuilder.parentQueryBuilder = queryBuilder;\n if (subscriptions && table.primaryKeyConstraint) {\n queryBuilder.selectIdentifiers(table);\n }\n if (\n subscriptions &&\n foreignTable.primaryKeyConstraint\n ) {\n innerQueryBuilder.selectIdentifiers(\n foreignTable\n );\n }\n keys.forEach((key, i) => {\n innerQueryBuilder.where(\n sql.fragment`${queryBuilder.getTableAlias()}.${sql.identifier(\n key.name\n )} = ${foreignTableAlias}.${sql.identifier(\n foreignKeys[i].name\n )}`\n );\n });\n },\n queryBuilder.context,\n queryBuilder.rootValue\n );\n return sql.fragment`(${query})`;\n }, getSafeAliasFromAlias(parsedResolveInfoFragment.alias));\n },\n };\n });\n return {\n description:\n constraint.tags.forwardDescription ||\n build.wrapDescription(\n `Reads a single \\`${foreignTableTypeName}\\` that is related to this \\`${tableTypeName}\\`.`,\n \"field\"\n ),\n type: gqlForeignTableType, // Nullable since RLS may forbid fetching\n resolve: (rawData, _args, resolveContext, resolveInfo) => {\n const data = isMutationPayload ? rawData.data : rawData;\n if (!data) return null;\n const safeAlias = getSafeAliasFromResolveInfo(\n resolveInfo\n );\n const record = data[safeAlias];\n const liveRecord =\n resolveInfo.rootValue &&\n resolveInfo.rootValue.liveRecord;\n if (record && liveRecord) {\n liveRecord(\"pg\", foreignTable, record.__identifiers);\n }\n return record;\n },\n };\n },\n {\n pgFieldIntrospection: constraint,\n isPgForwardRelationField: true,\n }\n ),\n },\n `Forward relation for ${describePgEntity(\n constraint\n )}. To rename this relation with a 'Smart Comment':\\n\\n ${sqlCommentByAddingTags(\n constraint,\n {\n fieldName: \"newNameHere\",\n }\n )}`\n );\n return memo;\n }, {}),\n `Adding forward relations to '${Self.name}'`\n );\n },\n [\"PgForwardRelation\"]\n );\n}: Plugin);\n"],"file":"PgForwardRelationPlugin.js"}
1
+ {"version":3,"sources":["../../src/plugins/PgForwardRelationPlugin.js"],"names":["debug","PgForwardRelationPlugin","builder","subscriptions","hook","fields","build","context","extend","getSafeAliasFromResolveInfo","getSafeAliasFromAlias","pgGetGqlTypeByTypeIdAndModifier","pgIntrospectionResultsByKind","introspectionResultsByKind","pgSql","sql","inflection","pgQueryFromResolveData","queryFromResolveData","pgOmit","omit","sqlCommentByAddingTags","describePgEntity","scope","isPgRowType","isPgCompositeType","isMutationPayload","pgIntrospection","pgIntrospectionTable","fieldWithHooks","Self","table","kind","namespace","returnTypeId","typeId","returnsSet","foreignKeyConstraints","constraints","filter","con","type","reduce","memo","constraint","gqlTableType","id","tableTypeName","name","classId","foreignTable","classById","foreignClassId","gqlForeignTableType","foreignTableTypeName","Error","foreignSchema","keys","keyAttributes","foreignKeys","foreignKeyAttributes","every","_","some","key","fieldName","singleRelationByKeys","getDataFromParsedResolveInfoFragment","addDataGenerator","parsedResolveInfoFragment","pgQuery","queryBuilder","select","resolveData","foreignTableAlias","identifier","Symbol","query","useAsterisk","asJson","innerQueryBuilder","parentQueryBuilder","primaryKeyConstraint","selectIdentifiers","forEach","i","where","fragment","getTableAlias","rootValue","alias","description","tags","forwardDescription","wrapDescription","resolve","rawData","_args","resolveContext","resolveInfo","data","safeAlias","record","liveRecord","__identifiers","pgFieldIntrospection","isPgForwardRelationField"],"mappings":";;;;;;;AAEA;;;;AAEA,MAAMA,KAAK,GAAG,oBAAa,mBAAb,CAAd;;IAEyBC,uB,GAAT,SAASA,uBAAT,CAAiCC,OAAjC,EAA0C;AAAEC,EAAAA;AAAF,CAA1C,EAA6D;AAC3ED,EAAAA,OAAO,CAACE,IAAR,CACE,0BADF,EAEE,CAACC,MAAD,EAASC,KAAT,EAAgBC,OAAhB,KAA4B;AAC1B,UAAM;AACJC,MAAAA,MADI;AAEJC,MAAAA,2BAFI;AAGJC,MAAAA,qBAHI;AAIJC,MAAAA,+BAJI;AAKJC,MAAAA,4BAA4B,EAAEC,0BAL1B;AAMJC,MAAAA,KAAK,EAAEC,GANH;AAOJC,MAAAA,UAPI;AAQJC,MAAAA,sBAAsB,EAAEC,oBARpB;AASJC,MAAAA,MAAM,EAAEC,IATJ;AAUJC,MAAAA,sBAVI;AAWJC,MAAAA;AAXI,QAYFhB,KAZJ;AAaA,UAAM;AACJiB,MAAAA,KAAK,EAAE;AACLC,QAAAA,WADK;AAELC,QAAAA,iBAFK;AAGLC,QAAAA,iBAHK;AAILC,QAAAA,eAJK;AAKLC,QAAAA;AALK,OADH;AAQJC,MAAAA,cARI;AASJC,MAAAA;AATI,QAUFvB,OAVJ;AAYA,UAAMwB,KAAK,GAAGH,oBAAoB,IAAID,eAAtC;;AACA,QACE,EAAEH,WAAW,IAAIE,iBAAf,IAAoCD,iBAAtC,KACA,CAACM,KADD,IAEAA,KAAK,CAACC,IAAN,KAAe,OAFf,IAGA,CAACD,KAAK,CAACE,SAJT,EAKE;AACA,aAAO5B,MAAP;AACD;;AACD,QACEqB,iBAAiB,IACjBC,eAAe,CAACK,IAAhB,KAAyB,WADzB,KAECL,eAAe,CAACO,YAAhB,KAAiCH,KAAK,CAACI,MAAvC,IACCR,eAAe,CAACS,UAHlB,CADF,EAKE;AACA,aAAO/B,MAAP;AACD,KA1CyB,CA2C1B;;;AAEA,UAAMgC,qBAAqB,GAAGN,KAAK,CAACO,WAAN,CAAkBC,MAAlB,CAC5BC,GAAG,IAAIA,GAAG,CAACC,IAAJ,KAAa,GADQ,CAA9B;AAIA,WAAOjC,MAAM,CACXH,MADW,EAEXgC,qBAAqB,CAACK,MAAtB,CAA6B,CAACC,IAAD,EAAOC,UAAP,KAAsB;AACjD,UAAIxB,IAAI,CAACwB,UAAD,EAAa,MAAb,CAAR,EAA8B;AAC5B,eAAOD,IAAP;AACD;;AACD,YAAME,YAAY,GAAGlC,+BAA+B,CAClDoB,KAAK,CAACU,IAAN,CAAWK,EADuC,EAElD,IAFkD,CAApD;AAIA,YAAMC,aAAa,GAAGF,YAAY,CAACG,IAAnC;;AACA,UAAI,CAACH,YAAL,EAAmB;AACjB7C,QAAAA,KAAK,CACF,8CAA6C4C,UAAU,CAACK,OAAQ,EAD9D,CAAL;AAGA,eAAON,IAAP;AACD;;AACD,YAAMO,YAAY,GAChBrC,0BAA0B,CAACsC,SAA3B,CAAqCP,UAAU,CAACQ,cAAhD,CADF;AAEA,YAAMC,mBAAmB,GAAG1C,+BAA+B,CACzDuC,YAAY,CAACT,IAAb,CAAkBK,EADuC,EAEzD,IAFyD,CAA3D;AAIA,YAAMQ,oBAAoB,GAAGD,mBAAmB,CAACL,IAAjD;;AACA,UAAI,CAACK,mBAAL,EAA0B;AACxBrD,QAAAA,KAAK,CACF,sDAAqD4C,UAAU,CAACQ,cAAe,EAD7E,CAAL;AAGA,eAAOT,IAAP;AACD;;AACD,UAAI,CAACO,YAAL,EAAmB;AACjB,cAAM,IAAIK,KAAJ,CACH,iDAAgDX,UAAU,CAACI,IAAK,GAD7D,CAAN;AAGD;;AACD,UAAI5B,IAAI,CAAC8B,YAAD,EAAe,MAAf,CAAR,EAAgC;AAC9B,eAAOP,IAAP;AACD;;AACD,YAAMa,aAAa,GAAGN,YAAY,CAACjB,SAAnC;AAEA,YAAMwB,IAAI,GAAGb,UAAU,CAACc,aAAxB;AACA,YAAMC,WAAW,GAAGf,UAAU,CAACgB,oBAA/B;;AACA,UAAI,CAACH,IAAI,CAACI,KAAL,CAAWC,CAAC,IAAIA,CAAhB,CAAD,IAAuB,CAACH,WAAW,CAACE,KAAZ,CAAkBC,CAAC,IAAIA,CAAvB,CAA5B,EAAuD;AACrD,cAAM,IAAIP,KAAJ,CAAU,6BAAV,CAAN;AACD;;AACD,UAAIE,IAAI,CAACM,IAAL,CAAUC,GAAG,IAAI5C,IAAI,CAAC4C,GAAD,EAAM,MAAN,CAArB,CAAJ,EAAyC;AACvC,eAAOrB,IAAP;AACD;;AACD,UAAIgB,WAAW,CAACI,IAAZ,CAAiBC,GAAG,IAAI5C,IAAI,CAAC4C,GAAD,EAAM,MAAN,CAA5B,CAAJ,EAAgD;AAC9C,eAAOrB,IAAP;AACD;;AAED,YAAMsB,SAAS,GAAGjD,UAAU,CAACkD,oBAAX,CAChBT,IADgB,EAEhBP,YAFgB,EAGhBnB,KAHgB,EAIhBa,UAJgB,CAAlB;AAOAD,MAAAA,IAAI,GAAGnC,MAAM,CACXmC,IADW,EAEX;AACE,SAACsB,SAAD,GAAapC,cAAc,CACzBoC,SADyB,EAEzB,CAAC;AACCE,UAAAA,oCADD;AAECC,UAAAA;AAFD,SAAD,KAGM;AACJA,UAAAA,gBAAgB,CAACC,yBAAyB,IAAI;AAC5C,mBAAO;AACLC,cAAAA,OAAO,EAAEC,YAAY,IAAI;AACvBA,gBAAAA,YAAY,CAACC,MAAb,CAAoB,MAAM;AACxB,wBAAMC,WAAW,GACfN,oCAAoC,CAClCE,yBADkC,EAElChB,mBAFkC,CADtC;AAKA,wBAAMqB,iBAAiB,GAAG3D,GAAG,CAAC4D,UAAJ,CAAeC,MAAM,EAArB,CAA1B;AACA,wBAAMC,KAAK,GAAG3D,oBAAoB,CAChCH,GAAG,CAAC4D,UAAJ,CACEnB,aAAa,CAACR,IADhB,EAEEE,YAAY,CAACF,IAFf,CADgC,EAKhC0B,iBALgC,EAMhCD,WANgC,EAOhC;AACEK,oBAAAA,WAAW,EAAE,KADf;AACsB;AACpBC,oBAAAA,MAAM,EAAE;AAFV,mBAPgC,EAWhCC,iBAAiB,IAAI;AACnBA,oBAAAA,iBAAiB,CAACC,kBAAlB,GACEV,YADF;;AAEA,wBAAIpE,aAAa,IAAI4B,KAAK,CAACmD,oBAA3B,EAAiD;AAC/CX,sBAAAA,YAAY,CAACY,iBAAb,CAA+BpD,KAA/B;AACD;;AACD,wBACE5B,aAAa,IACb+C,YAAY,CAACgC,oBAFf,EAGE;AACAF,sBAAAA,iBAAiB,CAACG,iBAAlB,CACEjC,YADF;AAGD;;AACDO,oBAAAA,IAAI,CAAC2B,OAAL,CAAa,CAACpB,GAAD,EAAMqB,CAAN,KAAY;AACvBL,sBAAAA,iBAAiB,CAACM,KAAlB,CACEvE,GAAG,CAACwE,QAAS,GAAEhB,YAAY,CAACiB,aAAb,EAA6B,IAAGzE,GAAG,CAAC4D,UAAJ,CAC7CX,GAAG,CAAChB,IADyC,CAE7C,MAAK0B,iBAAkB,IAAG3D,GAAG,CAAC4D,UAAJ,CAC1BhB,WAAW,CAAC0B,CAAD,CAAX,CAAerC,IADW,CAE1B,EALJ;AAOD,qBARD;AASD,mBAlC+B,EAmChCuB,YAAY,CAAChE,OAnCmB,EAoChCgE,YAAY,CAACkB,SApCmB,CAAlC;AAsCA,yBAAO1E,GAAG,CAACwE,QAAS,IAAGV,KAAM,GAA7B;AACD,iBA9CD,EA8CGnE,qBAAqB,CAAC2D,yBAAyB,CAACqB,KAA3B,CA9CxB;AA+CD;AAjDI,aAAP;AAmDD,WApDe,CAAhB;AAqDA,iBAAO;AACLC,YAAAA,WAAW,EACT/C,UAAU,CAACgD,IAAX,CAAgBC,kBAAhB,IACAvF,KAAK,CAACwF,eAAN,CACG,oBAAmBxC,oBAAqB,gCAA+BP,aAAc,KADxF,EAEE,OAFF,CAHG;AAOLN,YAAAA,IAAI,EAAEY,mBAPD;AAOsB;AAC3B0C,YAAAA,OAAO,EAAE,CAACC,OAAD,EAAUC,KAAV,EAAiBC,cAAjB,EAAiCC,WAAjC,KAAiD;AACxD,oBAAMC,IAAI,GAAG1E,iBAAiB,GAAGsE,OAAO,CAACI,IAAX,GAAkBJ,OAAhD;AACA,kBAAI,CAACI,IAAL,EAAW,OAAO,IAAP;AACX,oBAAMC,SAAS,GACb5F,2BAA2B,CAAC0F,WAAD,CAD7B;AAEA,oBAAMG,MAAM,GAAGF,IAAI,CAACC,SAAD,CAAnB;AACA,oBAAME,UAAU,GACdJ,WAAW,CAACV,SAAZ,IACAU,WAAW,CAACV,SAAZ,CAAsBc,UAFxB;;AAGA,kBAAID,MAAM,IAAIC,UAAd,EAA0B;AACxBA,gBAAAA,UAAU,CAAC,IAAD,EAAOrD,YAAP,EAAqBoD,MAAM,CAACE,aAA5B,CAAV;AACD;;AACD,qBAAOF,MAAP;AACD;AArBI,WAAP;AAuBD,SAlFwB,EAmFzB;AACEG,UAAAA,oBAAoB,EAAE7D,UADxB;AAEE8D,UAAAA,wBAAwB,EAAE;AAF5B,SAnFyB;AAD7B,OAFW,EA4FV,wBAAuBpF,gBAAgB,CACtCsB,UADsC,CAEtC,0DAAyDvB,sBAAsB,CAC/EuB,UAD+E,EAE/E;AACEqB,QAAAA,SAAS,EAAE;AADb,OAF+E,CAK/E,EAnGS,CAAb;AAqGA,aAAOtB,IAAP;AACD,KA/JD,EA+JG,EA/JH,CAFW,EAkKV,gCAA+Bb,IAAI,CAACkB,IAAK,GAlK/B,CAAb;AAoKD,GAvNH,EAwNE,CAAC,mBAAD,CAxNF;AA0ND,C","sourcesContent":["// @flow\nimport type { Plugin } from \"graphile-build\";\nimport debugFactory from \"debug\";\n\nconst debug = debugFactory(\"graphile-build-pg\");\n\nexport default (function PgForwardRelationPlugin(builder, { subscriptions }) {\n builder.hook(\n \"GraphQLObjectType:fields\",\n (fields, build, context) => {\n const {\n extend,\n getSafeAliasFromResolveInfo,\n getSafeAliasFromAlias,\n pgGetGqlTypeByTypeIdAndModifier,\n pgIntrospectionResultsByKind: introspectionResultsByKind,\n pgSql: sql,\n inflection,\n pgQueryFromResolveData: queryFromResolveData,\n pgOmit: omit,\n sqlCommentByAddingTags,\n describePgEntity,\n } = build;\n const {\n scope: {\n isPgRowType,\n isPgCompositeType,\n isMutationPayload,\n pgIntrospection,\n pgIntrospectionTable,\n },\n fieldWithHooks,\n Self,\n } = context;\n\n const table = pgIntrospectionTable || pgIntrospection;\n if (\n !(isPgRowType || isMutationPayload || isPgCompositeType) ||\n !table ||\n table.kind !== \"class\" ||\n !table.namespace\n ) {\n return fields;\n }\n if (\n isMutationPayload &&\n pgIntrospection.kind === \"procedure\" &&\n (pgIntrospection.returnTypeId !== table.typeId ||\n pgIntrospection.returnsSet)\n ) {\n return fields;\n }\n // This is a relation in which we (table) are local, and there's a foreign table\n\n const foreignKeyConstraints = table.constraints.filter(\n con => con.type === \"f\"\n );\n\n return extend(\n fields,\n foreignKeyConstraints.reduce((memo, constraint) => {\n if (omit(constraint, \"read\")) {\n return memo;\n }\n const gqlTableType = pgGetGqlTypeByTypeIdAndModifier(\n table.type.id,\n null\n );\n const tableTypeName = gqlTableType.name;\n if (!gqlTableType) {\n debug(\n `Could not determine type for table with id ${constraint.classId}`\n );\n return memo;\n }\n const foreignTable =\n introspectionResultsByKind.classById[constraint.foreignClassId];\n const gqlForeignTableType = pgGetGqlTypeByTypeIdAndModifier(\n foreignTable.type.id,\n null\n );\n const foreignTableTypeName = gqlForeignTableType.name;\n if (!gqlForeignTableType) {\n debug(\n `Could not determine type for foreign table with id ${constraint.foreignClassId}`\n );\n return memo;\n }\n if (!foreignTable) {\n throw new Error(\n `Could not find the foreign table (constraint: ${constraint.name})`\n );\n }\n if (omit(foreignTable, \"read\")) {\n return memo;\n }\n const foreignSchema = foreignTable.namespace;\n\n const keys = constraint.keyAttributes;\n const foreignKeys = constraint.foreignKeyAttributes;\n if (!keys.every(_ => _) || !foreignKeys.every(_ => _)) {\n throw new Error(\"Could not find key columns!\");\n }\n if (keys.some(key => omit(key, \"read\"))) {\n return memo;\n }\n if (foreignKeys.some(key => omit(key, \"read\"))) {\n return memo;\n }\n\n const fieldName = inflection.singleRelationByKeys(\n keys,\n foreignTable,\n table,\n constraint\n );\n\n memo = extend(\n memo,\n {\n [fieldName]: fieldWithHooks(\n fieldName,\n ({\n getDataFromParsedResolveInfoFragment,\n addDataGenerator,\n }) => {\n addDataGenerator(parsedResolveInfoFragment => {\n return {\n pgQuery: queryBuilder => {\n queryBuilder.select(() => {\n const resolveData =\n getDataFromParsedResolveInfoFragment(\n parsedResolveInfoFragment,\n gqlForeignTableType\n );\n const foreignTableAlias = sql.identifier(Symbol());\n const query = queryFromResolveData(\n sql.identifier(\n foreignSchema.name,\n foreignTable.name\n ),\n foreignTableAlias,\n resolveData,\n {\n useAsterisk: false, // Because it's only a single relation, no need\n asJson: true,\n },\n innerQueryBuilder => {\n innerQueryBuilder.parentQueryBuilder =\n queryBuilder;\n if (subscriptions && table.primaryKeyConstraint) {\n queryBuilder.selectIdentifiers(table);\n }\n if (\n subscriptions &&\n foreignTable.primaryKeyConstraint\n ) {\n innerQueryBuilder.selectIdentifiers(\n foreignTable\n );\n }\n keys.forEach((key, i) => {\n innerQueryBuilder.where(\n sql.fragment`${queryBuilder.getTableAlias()}.${sql.identifier(\n key.name\n )} = ${foreignTableAlias}.${sql.identifier(\n foreignKeys[i].name\n )}`\n );\n });\n },\n queryBuilder.context,\n queryBuilder.rootValue\n );\n return sql.fragment`(${query})`;\n }, getSafeAliasFromAlias(parsedResolveInfoFragment.alias));\n },\n };\n });\n return {\n description:\n constraint.tags.forwardDescription ||\n build.wrapDescription(\n `Reads a single \\`${foreignTableTypeName}\\` that is related to this \\`${tableTypeName}\\`.`,\n \"field\"\n ),\n type: gqlForeignTableType, // Nullable since RLS may forbid fetching\n resolve: (rawData, _args, resolveContext, resolveInfo) => {\n const data = isMutationPayload ? rawData.data : rawData;\n if (!data) return null;\n const safeAlias =\n getSafeAliasFromResolveInfo(resolveInfo);\n const record = data[safeAlias];\n const liveRecord =\n resolveInfo.rootValue &&\n resolveInfo.rootValue.liveRecord;\n if (record && liveRecord) {\n liveRecord(\"pg\", foreignTable, record.__identifiers);\n }\n return record;\n },\n };\n },\n {\n pgFieldIntrospection: constraint,\n isPgForwardRelationField: true,\n }\n ),\n },\n `Forward relation for ${describePgEntity(\n constraint\n )}. To rename this relation with a 'Smart Comment':\\n\\n ${sqlCommentByAddingTags(\n constraint,\n {\n fieldName: \"newNameHere\",\n }\n )}`\n );\n return memo;\n }, {}),\n `Adding forward relations to '${Self.name}'`\n );\n },\n [\"PgForwardRelation\"]\n );\n}: Plugin);\n"],"file":"PgForwardRelationPlugin.js"}
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.PgEntityKind = exports.default = void 0;
6
+ exports.default = exports.PgEntityKind = void 0;
7
7
 
8
8
  var _withPgClient = _interopRequireWildcard(require("../withPgClient"));
9
9
 
@@ -29,9 +29,9 @@ var _queryFromResolveDataFactory = _interopRequireDefault(require("../queryFromR
29
29
 
30
30
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
31
31
 
32
- function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
32
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
33
33
 
34
- function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
34
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
35
35
 
36
36
  const debug = (0, _debug.default)("graphile-build-pg");
37
37
  const WATCH_FIXTURES_PATH = `${__dirname}/../../res/watch-fixtures.sql`; // Ref: https://github.com/graphile/postgraphile/tree/master/src/postgres/introspection/object
@@ -52,7 +52,7 @@ const removeQuotes = str => {
52
52
  throw new Error(`We failed to parse a quoted identifier '${str}'. Please avoid putting quotes or commas in smart comment identifiers (or file a PR to fix the parser).`);
53
53
  }
54
54
 
55
- return trimmed.substr(1, trimmed.length - 2);
55
+ return trimmed.slice(1, -1);
56
56
  } else {
57
57
  // PostgreSQL lower-cases unquoted columns, so we should too.
58
58
  return trimmed.toLowerCase();
@@ -318,7 +318,7 @@ function enumTables(introspectionResults) {
318
318
  const data = allData.filter(row => row[col.name] != null);
319
319
 
320
320
  if (data.length < 1) {
321
- throw new Error(`Enum table "${klass.namespaceName}"."${klass.name}" contains no entries for enum constraint '${constraint.name}'.`);
321
+ throw new Error(`Enum table "${klass.namespaceName}"."${klass.name}" contains no visible entries for enum constraint '${constraint.name}'. Check that the table contains at least one row and that the rows are not hidden by row-level security policies.`);
322
322
  } // Create fake enum type
323
323
 
324
324