graphile-build-pg 4.9.1 → 4.11.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/README.md +1 -0
  2. package/node8plus/plugins/PageInfoStartEndCursor.js +2 -2
  3. package/node8plus/plugins/PageInfoStartEndCursor.js.flow +6 -2
  4. package/node8plus/plugins/PageInfoStartEndCursor.js.map +1 -1
  5. package/node8plus/plugins/PgAllRows.js +1 -1
  6. package/node8plus/plugins/PgAllRows.js.flow +6 -3
  7. package/node8plus/plugins/PgAllRows.js.map +1 -1
  8. package/node8plus/plugins/PgBackwardRelationPlugin.js +2 -2
  9. package/node8plus/plugins/PgBackwardRelationPlugin.js.flow +8 -2
  10. package/node8plus/plugins/PgBackwardRelationPlugin.js.map +1 -1
  11. package/node8plus/plugins/PgBasicsPlugin.js +1 -1
  12. package/node8plus/plugins/PgBasicsPlugin.js.flow +1 -1
  13. package/node8plus/plugins/PgBasicsPlugin.js.map +1 -1
  14. package/node8plus/plugins/PgConditionComputedColumnPlugin.js +1 -1
  15. package/node8plus/plugins/PgConditionComputedColumnPlugin.js.flow +4 -1
  16. package/node8plus/plugins/PgConditionComputedColumnPlugin.js.map +1 -1
  17. package/node8plus/plugins/PgConnectionArgCondition.js +3 -3
  18. package/node8plus/plugins/PgConnectionArgCondition.js.flow +11 -3
  19. package/node8plus/plugins/PgConnectionArgCondition.js.map +1 -1
  20. package/node8plus/plugins/PgConnectionArgFirstLastBeforeAfter.js +5 -5
  21. package/node8plus/plugins/PgConnectionArgFirstLastBeforeAfter.js.flow +20 -7
  22. package/node8plus/plugins/PgConnectionArgFirstLastBeforeAfter.js.map +1 -1
  23. package/node8plus/plugins/PgConnectionArgOrderBy.js +2 -2
  24. package/node8plus/plugins/PgConnectionArgOrderBy.js.flow +8 -2
  25. package/node8plus/plugins/PgConnectionArgOrderBy.js.map +1 -1
  26. package/node8plus/plugins/PgConnectionTotalCount.js +1 -1
  27. package/node8plus/plugins/PgConnectionTotalCount.js.flow +4 -1
  28. package/node8plus/plugins/PgConnectionTotalCount.js.map +1 -1
  29. package/node8plus/plugins/PgForwardRelationPlugin.js +1 -1
  30. package/node8plus/plugins/PgForwardRelationPlugin.js.flow +4 -1
  31. package/node8plus/plugins/PgForwardRelationPlugin.js.map +1 -1
  32. package/node8plus/plugins/PgIntrospectionPlugin.d.ts +1 -0
  33. package/node8plus/plugins/PgIntrospectionPlugin.js +182 -159
  34. package/node8plus/plugins/PgIntrospectionPlugin.js.flow +218 -198
  35. package/node8plus/plugins/PgIntrospectionPlugin.js.map +1 -1
  36. package/node8plus/plugins/PgJWTPlugin.js +1 -1
  37. package/node8plus/plugins/PgJWTPlugin.js.flow +3 -1
  38. package/node8plus/plugins/PgJWTPlugin.js.map +1 -1
  39. package/node8plus/plugins/PgMutationCreatePlugin.js +7 -7
  40. package/node8plus/plugins/PgMutationCreatePlugin.js.flow +26 -7
  41. package/node8plus/plugins/PgMutationCreatePlugin.js.map +1 -1
  42. package/node8plus/plugins/PgMutationPayloadEdgePlugin.js +2 -2
  43. package/node8plus/plugins/PgMutationPayloadEdgePlugin.js.flow +8 -2
  44. package/node8plus/plugins/PgMutationPayloadEdgePlugin.js.map +1 -1
  45. package/node8plus/plugins/PgMutationUpdateDeletePlugin.js +11 -11
  46. package/node8plus/plugins/PgMutationUpdateDeletePlugin.js.flow +40 -11
  47. package/node8plus/plugins/PgMutationUpdateDeletePlugin.js.map +1 -1
  48. package/node8plus/plugins/PgRecordFunctionConnectionPlugin.js +6 -6
  49. package/node8plus/plugins/PgRecordFunctionConnectionPlugin.js.flow +24 -6
  50. package/node8plus/plugins/PgRecordFunctionConnectionPlugin.js.map +1 -1
  51. package/node8plus/plugins/PgRecordReturnTypesPlugin.js +1 -1
  52. package/node8plus/plugins/PgRecordReturnTypesPlugin.js.flow +6 -3
  53. package/node8plus/plugins/PgRecordReturnTypesPlugin.js.map +1 -1
  54. package/node8plus/plugins/PgRowNode.js +2 -2
  55. package/node8plus/plugins/PgRowNode.js.flow +8 -2
  56. package/node8plus/plugins/PgRowNode.js.map +1 -1
  57. package/node8plus/plugins/PgScalarFunctionConnectionPlugin.js +6 -6
  58. package/node8plus/plugins/PgScalarFunctionConnectionPlugin.js.flow +24 -6
  59. package/node8plus/plugins/PgScalarFunctionConnectionPlugin.js.map +1 -1
  60. package/node8plus/plugins/PgTablesPlugin.js +13 -13
  61. package/node8plus/plugins/PgTablesPlugin.js.flow +56 -20
  62. package/node8plus/plugins/PgTablesPlugin.js.map +1 -1
  63. package/node8plus/plugins/PgTypesPlugin.js +62 -78
  64. package/node8plus/plugins/PgTypesPlugin.js.flow +193 -76
  65. package/node8plus/plugins/PgTypesPlugin.js.map +1 -1
  66. package/node8plus/plugins/makeProcField.js +3 -3
  67. package/node8plus/plugins/makeProcField.js.flow +16 -7
  68. package/node8plus/plugins/makeProcField.js.map +1 -1
  69. package/node8plus/plugins/viaTemporaryTable.js +1 -1
  70. package/node8plus/plugins/viaTemporaryTable.js.flow +8 -4
  71. package/node8plus/plugins/viaTemporaryTable.js.map +1 -1
  72. package/node8plus/postgresInterval.js +12 -33
  73. package/node8plus/postgresInterval.js.flow +22 -51
  74. package/node8plus/postgresInterval.js.map +1 -1
  75. package/package.json +9 -9
  76. package/res/watch-fixtures.sql +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/plugins/PgConnectionArgFirstLastBeforeAfter.js"],"names":["base64Decode","str","Buffer","from","String","toString","PgConnectionArgs","builder","hook","args","build","context","extend","getTypeByName","graphql","GraphQLInt","scope","fieldName","isPgFieldConnection","isPgFieldSimpleCollection","pgFieldIntrospection","source","addArgDataGenerator","Self","kind","Cursor","connectionFirstLastBeforeAfter","first","offset","last","after","before","pgQuery","queryBuilder","addCursorConstraint","Error","cursor","isAfter","cursorValues","JSON","parse","addCursorCondition","e","description","type","name"],"mappings":"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","sourcesContent":["// @flow\nimport type { Plugin } from \"graphile-build\";\n\nconst base64Decode = str => Buffer.from(String(str), \"base64\").toString(\"utf8\");\n\nexport default (function PgConnectionArgs(builder) {\n builder.hook(\n \"GraphQLObjectType:fields:field:args\",\n (args, build, context) => {\n const {\n extend,\n getTypeByName,\n graphql: { GraphQLInt },\n } = build;\n const {\n scope: {\n fieldName,\n isPgFieldConnection,\n isPgFieldSimpleCollection,\n pgFieldIntrospection: source,\n },\n addArgDataGenerator,\n Self,\n } = context;\n\n if (\n !(isPgFieldConnection || isPgFieldSimpleCollection) ||\n !source ||\n (source.kind !== \"class\" && source.kind !== \"procedure\")\n ) {\n return args;\n }\n const Cursor = getTypeByName(\"Cursor\");\n\n addArgDataGenerator(function connectionFirstLastBeforeAfter({\n first,\n offset,\n last,\n after,\n before,\n }) {\n return {\n pgQuery: queryBuilder => {\n if (first != null) {\n queryBuilder.first(first);\n }\n if (offset != null) {\n queryBuilder.offset(offset);\n }\n if (isPgFieldConnection) {\n if (after != null) {\n addCursorConstraint(after, true);\n }\n if (before != null) {\n addCursorConstraint(before, false);\n }\n if (last != null) {\n if (first != null) {\n throw new Error(\n \"We don't support setting both first and last\"\n );\n }\n if (offset != null) {\n throw new Error(\n \"We don't support setting both offset and last\"\n );\n }\n queryBuilder.last(last);\n }\n }\n\n function addCursorConstraint(cursor, isAfter) {\n try {\n const cursorValues = JSON.parse(base64Decode(cursor));\n return queryBuilder.addCursorCondition(cursorValues, isAfter);\n } catch (e) {\n throw new Error(\n \"Invalid cursor, please enter a cursor from a previous request, or null.\"\n );\n }\n }\n },\n };\n });\n\n return extend(\n args,\n {\n first: {\n description: \"Only read the first `n` values of the set.\",\n type: GraphQLInt,\n },\n ...(isPgFieldConnection\n ? {\n last: {\n description: \"Only read the last `n` values of the set.\",\n type: GraphQLInt,\n },\n }\n : null),\n offset: {\n description: isPgFieldConnection\n ? \"Skip the first `n` values from our `after` cursor, an alternative to cursor based pagination. May not be used with `last`.\"\n : \"Skip the first `n` values.\",\n type: GraphQLInt,\n },\n ...(isPgFieldConnection\n ? {\n before: {\n description:\n \"Read all values in the set before (above) this cursor.\",\n type: Cursor,\n },\n after: {\n description:\n \"Read all values in the set after (below) this cursor.\",\n type: Cursor,\n },\n }\n : null),\n },\n isPgFieldConnection\n ? `Adding connection pagination args to field '${fieldName}' of '${Self.name}'`\n : `Adding simple collection args to field '${fieldName}' of '${Self.name}'`\n );\n },\n [\"PgConnectionArgFirstLastBeforeAfter\"]\n );\n}: Plugin);\n"],"file":"PgConnectionArgFirstLastBeforeAfter.js"}
1
+ {"version":3,"sources":["../../src/plugins/PgConnectionArgFirstLastBeforeAfter.js"],"names":["base64Decode","str","Buffer","from","String","toString","PgConnectionArgs","builder","hook","args","build","context","extend","getTypeByName","graphql","GraphQLInt","scope","fieldName","isPgFieldConnection","isPgFieldSimpleCollection","pgFieldIntrospection","source","addArgDataGenerator","Self","kind","Cursor","connectionFirstLastBeforeAfter","first","offset","last","after","before","pgQuery","queryBuilder","addCursorConstraint","Error","cursor","isAfter","cursorValues","JSON","parse","addCursorCondition","e","description","wrapDescription","type","name"],"mappings":";;;;;;;AAGA,MAAMA,YAAY,GAAGC,GAAG,IAAIC,MAAM,CAACC,IAAP,CAAYC,MAAM,CAACH,GAAD,CAAlB,EAAyB,QAAzB,EAAmCI,QAAnC,CAA4C,MAA5C,CAA5B;;IAEyBC,gB,GAAT,SAASA,gBAAT,CAA0BC,OAA1B,EAAmC;AACjDA,EAAAA,OAAO,CAACC,IAAR,CACE,qCADF,EAEE,CAACC,IAAD,EAAOC,KAAP,EAAcC,OAAd,KAA0B;AACxB,UAAM;AACJC,MAAAA,MADI;AAEJC,MAAAA,aAFI;AAGJC,MAAAA,OAAO,EAAE;AAAEC,QAAAA;AAAF;AAHL,QAIFL,KAJJ;AAKA,UAAM;AACJM,MAAAA,KAAK,EAAE;AACLC,QAAAA,SADK;AAELC,QAAAA,mBAFK;AAGLC,QAAAA,yBAHK;AAILC,QAAAA,oBAAoB,EAAEC;AAJjB,OADH;AAOJC,MAAAA,mBAPI;AAQJC,MAAAA;AARI,QASFZ,OATJ;;AAWA,QACE,EAAEO,mBAAmB,IAAIC,yBAAzB,KACA,CAACE,MADD,IAECA,MAAM,CAACG,IAAP,KAAgB,OAAhB,IAA2BH,MAAM,CAACG,IAAP,KAAgB,WAH9C,EAIE;AACA,aAAOf,IAAP;AACD;;AACD,UAAMgB,MAAM,GAAGZ,aAAa,CAAC,QAAD,CAA5B;AAEAS,IAAAA,mBAAmB,CAAC,SAASI,8BAAT,CAAwC;AAC1DC,MAAAA,KAD0D;AAE1DC,MAAAA,MAF0D;AAG1DC,MAAAA,IAH0D;AAI1DC,MAAAA,KAJ0D;AAK1DC,MAAAA;AAL0D,KAAxC,EAMjB;AACD,aAAO;AACLC,QAAAA,OAAO,EAAEC,YAAY,IAAI;AACvB,cAAIN,KAAK,IAAI,IAAb,EAAmB;AACjBM,YAAAA,YAAY,CAACN,KAAb,CAAmBA,KAAnB;AACD;;AACD,cAAIC,MAAM,IAAI,IAAd,EAAoB;AAClBK,YAAAA,YAAY,CAACL,MAAb,CAAoBA,MAApB;AACD;;AACD,cAAIV,mBAAJ,EAAyB;AACvB,gBAAIY,KAAK,IAAI,IAAb,EAAmB;AACjBI,cAAAA,mBAAmB,CAACJ,KAAD,EAAQ,IAAR,CAAnB;AACD;;AACD,gBAAIC,MAAM,IAAI,IAAd,EAAoB;AAClBG,cAAAA,mBAAmB,CAACH,MAAD,EAAS,KAAT,CAAnB;AACD;;AACD,gBAAIF,IAAI,IAAI,IAAZ,EAAkB;AAChB,kBAAIF,KAAK,IAAI,IAAb,EAAmB;AACjB,sBAAM,IAAIQ,KAAJ,CACJ,8CADI,CAAN;AAGD;;AACD,kBAAIP,MAAM,IAAI,IAAd,EAAoB;AAClB,sBAAM,IAAIO,KAAJ,CACJ,+CADI,CAAN;AAGD;;AACDF,cAAAA,YAAY,CAACJ,IAAb,CAAkBA,IAAlB;AACD;AACF;;AAED,mBAASK,mBAAT,CAA6BE,MAA7B,EAAqCC,OAArC,EAA8C;AAC5C,gBAAI;AACF,oBAAMC,YAAY,GAAGC,IAAI,CAACC,KAAL,CAAWxC,YAAY,CAACoC,MAAD,CAAvB,CAArB;AACA,qBAAOH,YAAY,CAACQ,kBAAb,CAAgCH,YAAhC,EAA8CD,OAA9C,CAAP;AACD,aAHD,CAGE,OAAOK,CAAP,EAAU;AACV,oBAAM,IAAIP,KAAJ,CACJ,yEADI,CAAN;AAGD;AACF;AACF;AAxCI,OAAP;AA0CD,KAjDkB,CAAnB;AAmDA,WAAOvB,MAAM,CACXH,IADW,EAEX;AACEkB,MAAAA,KAAK,EAAE;AACLgB,QAAAA,WAAW,EAAEjC,KAAK,CAACkC,eAAN,CACX,4CADW,EAEX,KAFW,CADR;AAKLC,QAAAA,IAAI,EAAE9B;AALD,OADT;AAQE,UAAIG,mBAAmB,GACnB;AACEW,QAAAA,IAAI,EAAE;AACJc,UAAAA,WAAW,EAAEjC,KAAK,CAACkC,eAAN,CACX,2CADW,EAEX,KAFW,CADT;AAKJC,UAAAA,IAAI,EAAE9B;AALF;AADR,OADmB,GAUnB,IAVJ,CARF;AAmBEa,MAAAA,MAAM,EAAE;AACNe,QAAAA,WAAW,EAAEjC,KAAK,CAACkC,eAAN,CACX1B,mBAAmB,GACf,4HADe,GAEf,4BAHO,EAIX,KAJW,CADP;AAON2B,QAAAA,IAAI,EAAE9B;AAPA,OAnBV;AA4BE,UAAIG,mBAAmB,GACnB;AACEa,QAAAA,MAAM,EAAE;AACNY,UAAAA,WAAW,EAAEjC,KAAK,CAACkC,eAAN,CACX,wDADW,EAEX,KAFW,CADP;AAKNC,UAAAA,IAAI,EAAEpB;AALA,SADV;AAQEK,QAAAA,KAAK,EAAE;AACLa,UAAAA,WAAW,EAAEjC,KAAK,CAACkC,eAAN,CACX,uDADW,EAEX,KAFW,CADR;AAKLC,UAAAA,IAAI,EAAEpB;AALD;AART,OADmB,GAiBnB,IAjBJ;AA5BF,KAFW,EAiDXP,mBAAmB,GACd,+CAA8CD,SAAU,SAAQM,IAAI,CAACuB,IAAK,GAD5D,GAEd,2CAA0C7B,SAAU,SAAQM,IAAI,CAACuB,IAAK,GAnDhE,CAAb;AAqDD,GApIH,EAqIE,CAAC,qCAAD,CArIF;AAuID,C","sourcesContent":["// @flow\nimport type { Plugin } from \"graphile-build\";\n\nconst base64Decode = str => Buffer.from(String(str), \"base64\").toString(\"utf8\");\n\nexport default (function PgConnectionArgs(builder) {\n builder.hook(\n \"GraphQLObjectType:fields:field:args\",\n (args, build, context) => {\n const {\n extend,\n getTypeByName,\n graphql: { GraphQLInt },\n } = build;\n const {\n scope: {\n fieldName,\n isPgFieldConnection,\n isPgFieldSimpleCollection,\n pgFieldIntrospection: source,\n },\n addArgDataGenerator,\n Self,\n } = context;\n\n if (\n !(isPgFieldConnection || isPgFieldSimpleCollection) ||\n !source ||\n (source.kind !== \"class\" && source.kind !== \"procedure\")\n ) {\n return args;\n }\n const Cursor = getTypeByName(\"Cursor\");\n\n addArgDataGenerator(function connectionFirstLastBeforeAfter({\n first,\n offset,\n last,\n after,\n before,\n }) {\n return {\n pgQuery: queryBuilder => {\n if (first != null) {\n queryBuilder.first(first);\n }\n if (offset != null) {\n queryBuilder.offset(offset);\n }\n if (isPgFieldConnection) {\n if (after != null) {\n addCursorConstraint(after, true);\n }\n if (before != null) {\n addCursorConstraint(before, false);\n }\n if (last != null) {\n if (first != null) {\n throw new Error(\n \"We don't support setting both first and last\"\n );\n }\n if (offset != null) {\n throw new Error(\n \"We don't support setting both offset and last\"\n );\n }\n queryBuilder.last(last);\n }\n }\n\n function addCursorConstraint(cursor, isAfter) {\n try {\n const cursorValues = JSON.parse(base64Decode(cursor));\n return queryBuilder.addCursorCondition(cursorValues, isAfter);\n } catch (e) {\n throw new Error(\n \"Invalid cursor, please enter a cursor from a previous request, or null.\"\n );\n }\n }\n },\n };\n });\n\n return extend(\n args,\n {\n first: {\n description: build.wrapDescription(\n \"Only read the first `n` values of the set.\",\n \"arg\"\n ),\n type: GraphQLInt,\n },\n ...(isPgFieldConnection\n ? {\n last: {\n description: build.wrapDescription(\n \"Only read the last `n` values of the set.\",\n \"arg\"\n ),\n type: GraphQLInt,\n },\n }\n : null),\n offset: {\n description: build.wrapDescription(\n isPgFieldConnection\n ? \"Skip the first `n` values from our `after` cursor, an alternative to cursor based pagination. May not be used with `last`.\"\n : \"Skip the first `n` values.\",\n \"arg\"\n ),\n type: GraphQLInt,\n },\n ...(isPgFieldConnection\n ? {\n before: {\n description: build.wrapDescription(\n \"Read all values in the set before (above) this cursor.\",\n \"arg\"\n ),\n type: Cursor,\n },\n after: {\n description: build.wrapDescription(\n \"Read all values in the set after (below) this cursor.\",\n \"arg\"\n ),\n type: Cursor,\n },\n }\n : null),\n },\n isPgFieldConnection\n ? `Adding connection pagination args to field '${fieldName}' of '${Self.name}'`\n : `Adding simple collection args to field '${fieldName}' of '${Self.name}'`\n );\n },\n [\"PgConnectionArgFirstLastBeforeAfter\"]\n );\n}: Plugin);\n"],"file":"PgConnectionArgFirstLastBeforeAfter.js"}
@@ -33,7 +33,7 @@ var PgConnectionArgOrderBy = function PgConnectionArgOrderBy(builder, {
33
33
 
34
34
  newWithHooks(GraphQLEnumType, {
35
35
  name: inflection.orderByType(tableTypeName),
36
- description: `Methods to use when ordering \`${tableTypeName}\`.`,
36
+ description: build.wrapDescription(`Methods to use when ordering \`${tableTypeName}\`.`, "type"),
37
37
  values: {
38
38
  NATURAL: {
39
39
  value: {
@@ -150,7 +150,7 @@ var PgConnectionArgOrderBy = function PgConnectionArgOrderBy(builder, {
150
150
  });
151
151
  return extend(args, {
152
152
  orderBy: {
153
- description: `The method to use when ordering \`${tableTypeName}\`.`,
153
+ description: build.wrapDescription(`The method to use when ordering \`${tableTypeName}\`.`, "arg"),
154
154
  type: new GraphQLList(new GraphQLNonNull(TableOrderByType))
155
155
  }
156
156
  }, `Adding 'orderBy' argument to field '${fieldName}' of '${Self.name}'`);
@@ -26,7 +26,10 @@ export default (function PgConnectionArgOrderBy(builder, { orderByNullsLast }) {
26
26
  GraphQLEnumType,
27
27
  {
28
28
  name: inflection.orderByType(tableTypeName),
29
- description: `Methods to use when ordering \`${tableTypeName}\`.`,
29
+ description: build.wrapDescription(
30
+ `Methods to use when ordering \`${tableTypeName}\`.`,
31
+ "type"
32
+ ),
30
33
  values: {
31
34
  NATURAL: {
32
35
  value: {
@@ -174,7 +177,10 @@ export default (function PgConnectionArgOrderBy(builder, { orderByNullsLast }) {
174
177
  args,
175
178
  {
176
179
  orderBy: {
177
- description: `The method to use when ordering \`${tableTypeName}\`.`,
180
+ description: build.wrapDescription(
181
+ `The method to use when ordering \`${tableTypeName}\`.`,
182
+ "arg"
183
+ ),
178
184
  type: new GraphQLList(new GraphQLNonNull(TableOrderByType)),
179
185
  },
180
186
  },
@@ -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","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: `Methods to use when ordering \\`${tableTypeName}\\`.`,\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: `The method to use when ordering \\`${tableTypeName}\\`.`,\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","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"}
@@ -48,7 +48,7 @@ var PgConnectionTotalCount = function PgConnectionTotalCount(builder) {
48
48
  };
49
49
  });
50
50
  return {
51
- description: `The count of *all* \`${nodeTypeName}\` you could get from the connection.`,
51
+ description: build.wrapDescription(`The count of *all* \`${nodeTypeName}\` you could get from the connection.`, "field"),
52
52
  type: new GraphQLNonNull(GraphQLInt),
53
53
 
54
54
  resolve(parent) {
@@ -48,7 +48,10 @@ export default (function PgConnectionTotalCount(builder) {
48
48
  };
49
49
  });
50
50
  return {
51
- description: `The count of *all* \`${nodeTypeName}\` you could get from the connection.`,
51
+ description: build.wrapDescription(
52
+ `The count of *all* \`${nodeTypeName}\` you could get from the connection.`,
53
+ "field"
54
+ ),
52
55
  type: new GraphQLNonNull(GraphQLInt),
53
56
  resolve(parent) {
54
57
  return (
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/plugins/PgConnectionTotalCount.js"],"names":["PgConnectionTotalCount","builder","hook","fields","build","context","extend","inflection","graphql","GraphQLInt","GraphQLNonNull","pgSql","sql","scope","isPgRowConnectionType","pgIntrospection","table","nodeType","fieldWithHooks","Self","nodeTypeName","name","kind","tableType","totalCount","addDataGenerator","pgAggregateQuery","aggregateQueryBuilder","select","fragment","description","type","resolve","parent","aggregates","isPgConnectionTotalCountField"],"mappings":";;;;;;;IAGyBA,sB,GAAT,SAASA,sBAAT,CAAgCC,OAAhC,EAAyC;AACvDA,EAAAA,OAAO,CAACC,IAAR,CACE,0BADF,EAEE,CAACC,MAAD,EAASC,KAAT,EAAgBC,OAAhB,KAA4B;AAC1B,UAAM;AACJC,MAAAA,MADI;AAEJC,MAAAA,UAFI;AAGJC,MAAAA,OAAO,EAAE;AAAEC,QAAAA,UAAF;AAAcC,QAAAA;AAAd,OAHL;AAIJC,MAAAA,KAAK,EAAEC;AAJH,QAKFR,KALJ;AAMA,UAAM;AACJS,MAAAA,KAAK,EAAE;AAAEC,QAAAA,qBAAF;AAAyBC,QAAAA,eAAe,EAAEC,KAA1C;AAAiDC,QAAAA;AAAjD,OADH;AAEJC,MAAAA,cAFI;AAGJC,MAAAA;AAHI,QAIFd,OAJJ;;AAMA,QAAI,CAACS,qBAAL,EAA4B;AAC1B,aAAOX,MAAP;AACD;;AAED,UAAMiB,YAAY,GAChBH,QAAQ,IAAIA,QAAQ,CAACI,IAArB,GACIJ,QAAQ,CAACI,IADb,GAEIL,KAAK,IAAIA,KAAK,CAACM,IAAN,KAAe,OAAxB,GACAf,UAAU,CAACgB,SAAX,CAAqBP,KAArB,CADA,GAEA,IALN;;AAMA,QAAI,CAACI,YAAL,EAAmB;AACjB,aAAOjB,MAAP;AACD;;AAED,WAAOG,MAAM,CACXH,MADW,EAEX;AACEqB,MAAAA,UAAU,EAAEN,cAAc,CACxB,YADwB,EAExB,CAAC;AAAEO,QAAAA;AAAF,OAAD,KAA0B;AACxBA,QAAAA,gBAAgB,CAAC,MAAM;AACrB,iBAAO;AACLC,YAAAA,gBAAgB,EAAEC,qBAAqB,IAAI;AACzCA,cAAAA,qBAAqB,CAACC,MAAtB,CACEhB,GAAG,CAACiB,QAAS,UADf,EAEE,YAFF;AAID;AANI,WAAP;AAQD,SATe,CAAhB;AAUA,eAAO;AACLC,UAAAA,WAAW,EAAG,wBAAuBV,YAAa,uCAD7C;AAELW,UAAAA,IAAI,EAAE,IAAIrB,cAAJ,CAAmBD,UAAnB,CAFD;;AAGLuB,UAAAA,OAAO,CAACC,MAAD,EAAS;AACd,mBACGA,MAAM,CAACC,UAAP,IAAqBD,MAAM,CAACC,UAAP,CAAkBV,UAAxC,IAAuD,CADzD;AAGD;;AAPI,SAAP;AASD,OAtBuB,EAuBxB;AACEW,QAAAA,6BAA6B,EAAE;AADjC,OAvBwB;AAD5B,KAFW,EA+BV,oCAAmChB,IAAI,CAACE,IAAK,GA/BnC,CAAb;AAiCD,GA9DH,EA+DE,CAAC,wBAAD,CA/DF;AAiED,C","sourcesContent":["// @flow\nimport type { Plugin } from \"graphile-build\";\n\nexport default (function PgConnectionTotalCount(builder) {\n builder.hook(\n \"GraphQLObjectType:fields\",\n (fields, build, context) => {\n const {\n extend,\n inflection,\n graphql: { GraphQLInt, GraphQLNonNull },\n pgSql: sql,\n } = build;\n const {\n scope: { isPgRowConnectionType, pgIntrospection: table, nodeType },\n fieldWithHooks,\n Self,\n } = context;\n\n if (!isPgRowConnectionType) {\n return fields;\n }\n\n const nodeTypeName =\n nodeType && nodeType.name\n ? nodeType.name\n : table && table.kind === \"class\"\n ? inflection.tableType(table)\n : null;\n if (!nodeTypeName) {\n return fields;\n }\n\n return extend(\n fields,\n {\n totalCount: fieldWithHooks(\n \"totalCount\",\n ({ addDataGenerator }) => {\n addDataGenerator(() => {\n return {\n pgAggregateQuery: aggregateQueryBuilder => {\n aggregateQueryBuilder.select(\n sql.fragment`count(1)`,\n \"totalCount\"\n );\n },\n };\n });\n return {\n description: `The count of *all* \\`${nodeTypeName}\\` you could get from the connection.`,\n type: new GraphQLNonNull(GraphQLInt),\n resolve(parent) {\n return (\n (parent.aggregates && parent.aggregates.totalCount) || 0\n );\n },\n };\n },\n {\n isPgConnectionTotalCountField: true,\n }\n ),\n },\n `Adding totalCount to connection '${Self.name}'`\n );\n },\n [\"PgConnectionTotalCount\"]\n );\n}: Plugin);\n"],"file":"PgConnectionTotalCount.js"}
1
+ {"version":3,"sources":["../../src/plugins/PgConnectionTotalCount.js"],"names":["PgConnectionTotalCount","builder","hook","fields","build","context","extend","inflection","graphql","GraphQLInt","GraphQLNonNull","pgSql","sql","scope","isPgRowConnectionType","pgIntrospection","table","nodeType","fieldWithHooks","Self","nodeTypeName","name","kind","tableType","totalCount","addDataGenerator","pgAggregateQuery","aggregateQueryBuilder","select","fragment","description","wrapDescription","type","resolve","parent","aggregates","isPgConnectionTotalCountField"],"mappings":";;;;;;;IAGyBA,sB,GAAT,SAASA,sBAAT,CAAgCC,OAAhC,EAAyC;AACvDA,EAAAA,OAAO,CAACC,IAAR,CACE,0BADF,EAEE,CAACC,MAAD,EAASC,KAAT,EAAgBC,OAAhB,KAA4B;AAC1B,UAAM;AACJC,MAAAA,MADI;AAEJC,MAAAA,UAFI;AAGJC,MAAAA,OAAO,EAAE;AAAEC,QAAAA,UAAF;AAAcC,QAAAA;AAAd,OAHL;AAIJC,MAAAA,KAAK,EAAEC;AAJH,QAKFR,KALJ;AAMA,UAAM;AACJS,MAAAA,KAAK,EAAE;AAAEC,QAAAA,qBAAF;AAAyBC,QAAAA,eAAe,EAAEC,KAA1C;AAAiDC,QAAAA;AAAjD,OADH;AAEJC,MAAAA,cAFI;AAGJC,MAAAA;AAHI,QAIFd,OAJJ;;AAMA,QAAI,CAACS,qBAAL,EAA4B;AAC1B,aAAOX,MAAP;AACD;;AAED,UAAMiB,YAAY,GAChBH,QAAQ,IAAIA,QAAQ,CAACI,IAArB,GACIJ,QAAQ,CAACI,IADb,GAEIL,KAAK,IAAIA,KAAK,CAACM,IAAN,KAAe,OAAxB,GACAf,UAAU,CAACgB,SAAX,CAAqBP,KAArB,CADA,GAEA,IALN;;AAMA,QAAI,CAACI,YAAL,EAAmB;AACjB,aAAOjB,MAAP;AACD;;AAED,WAAOG,MAAM,CACXH,MADW,EAEX;AACEqB,MAAAA,UAAU,EAAEN,cAAc,CACxB,YADwB,EAExB,CAAC;AAAEO,QAAAA;AAAF,OAAD,KAA0B;AACxBA,QAAAA,gBAAgB,CAAC,MAAM;AACrB,iBAAO;AACLC,YAAAA,gBAAgB,EAAEC,qBAAqB,IAAI;AACzCA,cAAAA,qBAAqB,CAACC,MAAtB,CACEhB,GAAG,CAACiB,QAAS,UADf,EAEE,YAFF;AAID;AANI,WAAP;AAQD,SATe,CAAhB;AAUA,eAAO;AACLC,UAAAA,WAAW,EAAE1B,KAAK,CAAC2B,eAAN,CACV,wBAAuBX,YAAa,uCAD1B,EAEX,OAFW,CADR;AAKLY,UAAAA,IAAI,EAAE,IAAItB,cAAJ,CAAmBD,UAAnB,CALD;;AAMLwB,UAAAA,OAAO,CAACC,MAAD,EAAS;AACd,mBACGA,MAAM,CAACC,UAAP,IAAqBD,MAAM,CAACC,UAAP,CAAkBX,UAAxC,IAAuD,CADzD;AAGD;;AAVI,SAAP;AAYD,OAzBuB,EA0BxB;AACEY,QAAAA,6BAA6B,EAAE;AADjC,OA1BwB;AAD5B,KAFW,EAkCV,oCAAmCjB,IAAI,CAACE,IAAK,GAlCnC,CAAb;AAoCD,GAjEH,EAkEE,CAAC,wBAAD,CAlEF;AAoED,C","sourcesContent":["// @flow\nimport type { Plugin } from \"graphile-build\";\n\nexport default (function PgConnectionTotalCount(builder) {\n builder.hook(\n \"GraphQLObjectType:fields\",\n (fields, build, context) => {\n const {\n extend,\n inflection,\n graphql: { GraphQLInt, GraphQLNonNull },\n pgSql: sql,\n } = build;\n const {\n scope: { isPgRowConnectionType, pgIntrospection: table, nodeType },\n fieldWithHooks,\n Self,\n } = context;\n\n if (!isPgRowConnectionType) {\n return fields;\n }\n\n const nodeTypeName =\n nodeType && nodeType.name\n ? nodeType.name\n : table && table.kind === \"class\"\n ? inflection.tableType(table)\n : null;\n if (!nodeTypeName) {\n return fields;\n }\n\n return extend(\n fields,\n {\n totalCount: fieldWithHooks(\n \"totalCount\",\n ({ addDataGenerator }) => {\n addDataGenerator(() => {\n return {\n pgAggregateQuery: aggregateQueryBuilder => {\n aggregateQueryBuilder.select(\n sql.fragment`count(1)`,\n \"totalCount\"\n );\n },\n };\n });\n return {\n description: build.wrapDescription(\n `The count of *all* \\`${nodeTypeName}\\` you could get from the connection.`,\n \"field\"\n ),\n type: new GraphQLNonNull(GraphQLInt),\n resolve(parent) {\n return (\n (parent.aggregates && parent.aggregates.totalCount) || 0\n );\n },\n };\n },\n {\n isPgConnectionTotalCountField: true,\n }\n ),\n },\n `Adding totalCount to connection '${Self.name}'`\n );\n },\n [\"PgConnectionTotalCount\"]\n );\n}: Plugin);\n"],"file":"PgConnectionTotalCount.js"}
@@ -134,7 +134,7 @@ var PgForwardRelationPlugin = function PgForwardRelationPlugin(builder, {
134
134
  };
135
135
  });
136
136
  return {
137
- description: constraint.tags.forwardDescription || `Reads a single \`${foreignTableTypeName}\` that is related to this \`${tableTypeName}\`.`,
137
+ description: constraint.tags.forwardDescription || build.wrapDescription(`Reads a single \`${foreignTableTypeName}\` that is related to this \`${tableTypeName}\`.`, "field"),
138
138
  type: gqlForeignTableType,
139
139
  // Nullable since RLS may forbid fetching
140
140
  resolve: (rawData, _args, resolveContext, resolveInfo) => {
@@ -178,7 +178,10 @@ export default (function PgForwardRelationPlugin(builder, { subscriptions }) {
178
178
  return {
179
179
  description:
180
180
  constraint.tags.forwardDescription ||
181
- `Reads a single \`${foreignTableTypeName}\` that is related to this \`${tableTypeName}\`.`,
181
+ build.wrapDescription(
182
+ `Reads a single \`${foreignTableTypeName}\` that is related to this \`${tableTypeName}\`.`,
183
+ "field"
184
+ ),
182
185
  type: gqlForeignTableType, // Nullable since RLS may forbid fetching
183
186
  resolve: (rawData, _args, resolveContext, resolveInfo) => {
184
187
  const data = isMutationPayload ? rawData.data : rawData;
@@ -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","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 `Reads a single \\`${foreignTableTypeName}\\` that is related to this \\`${tableTypeName}\\`.`,\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":"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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"}
@@ -98,6 +98,7 @@ export interface PgType {
98
98
  enumDescriptions: string[] | void;
99
99
  rangeSubTypeId: string | void;
100
100
  tags: { [tag: string]: true | string | Array<string> };
101
+ isFake?: boolean;
101
102
  }
102
103
 
103
104
  export interface PgAttribute {