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.
- package/README.md +1 -0
- package/node8plus/plugins/PageInfoStartEndCursor.js +2 -2
- package/node8plus/plugins/PageInfoStartEndCursor.js.flow +6 -2
- package/node8plus/plugins/PageInfoStartEndCursor.js.map +1 -1
- package/node8plus/plugins/PgAllRows.js +1 -1
- package/node8plus/plugins/PgAllRows.js.flow +6 -3
- package/node8plus/plugins/PgAllRows.js.map +1 -1
- package/node8plus/plugins/PgBackwardRelationPlugin.js +2 -2
- package/node8plus/plugins/PgBackwardRelationPlugin.js.flow +8 -2
- package/node8plus/plugins/PgBackwardRelationPlugin.js.map +1 -1
- package/node8plus/plugins/PgBasicsPlugin.js +1 -1
- package/node8plus/plugins/PgBasicsPlugin.js.flow +1 -1
- package/node8plus/plugins/PgBasicsPlugin.js.map +1 -1
- package/node8plus/plugins/PgConditionComputedColumnPlugin.js +1 -1
- package/node8plus/plugins/PgConditionComputedColumnPlugin.js.flow +4 -1
- package/node8plus/plugins/PgConditionComputedColumnPlugin.js.map +1 -1
- package/node8plus/plugins/PgConnectionArgCondition.js +3 -3
- package/node8plus/plugins/PgConnectionArgCondition.js.flow +11 -3
- package/node8plus/plugins/PgConnectionArgCondition.js.map +1 -1
- package/node8plus/plugins/PgConnectionArgFirstLastBeforeAfter.js +5 -5
- package/node8plus/plugins/PgConnectionArgFirstLastBeforeAfter.js.flow +20 -7
- package/node8plus/plugins/PgConnectionArgFirstLastBeforeAfter.js.map +1 -1
- package/node8plus/plugins/PgConnectionArgOrderBy.js +2 -2
- package/node8plus/plugins/PgConnectionArgOrderBy.js.flow +8 -2
- package/node8plus/plugins/PgConnectionArgOrderBy.js.map +1 -1
- package/node8plus/plugins/PgConnectionTotalCount.js +1 -1
- package/node8plus/plugins/PgConnectionTotalCount.js.flow +4 -1
- package/node8plus/plugins/PgConnectionTotalCount.js.map +1 -1
- package/node8plus/plugins/PgForwardRelationPlugin.js +1 -1
- package/node8plus/plugins/PgForwardRelationPlugin.js.flow +4 -1
- package/node8plus/plugins/PgForwardRelationPlugin.js.map +1 -1
- package/node8plus/plugins/PgIntrospectionPlugin.d.ts +1 -0
- package/node8plus/plugins/PgIntrospectionPlugin.js +182 -159
- package/node8plus/plugins/PgIntrospectionPlugin.js.flow +218 -198
- package/node8plus/plugins/PgIntrospectionPlugin.js.map +1 -1
- package/node8plus/plugins/PgJWTPlugin.js +1 -1
- package/node8plus/plugins/PgJWTPlugin.js.flow +3 -1
- package/node8plus/plugins/PgJWTPlugin.js.map +1 -1
- package/node8plus/plugins/PgMutationCreatePlugin.js +7 -7
- package/node8plus/plugins/PgMutationCreatePlugin.js.flow +26 -7
- package/node8plus/plugins/PgMutationCreatePlugin.js.map +1 -1
- package/node8plus/plugins/PgMutationPayloadEdgePlugin.js +2 -2
- package/node8plus/plugins/PgMutationPayloadEdgePlugin.js.flow +8 -2
- package/node8plus/plugins/PgMutationPayloadEdgePlugin.js.map +1 -1
- package/node8plus/plugins/PgMutationUpdateDeletePlugin.js +11 -11
- package/node8plus/plugins/PgMutationUpdateDeletePlugin.js.flow +40 -11
- package/node8plus/plugins/PgMutationUpdateDeletePlugin.js.map +1 -1
- package/node8plus/plugins/PgRecordFunctionConnectionPlugin.js +6 -6
- package/node8plus/plugins/PgRecordFunctionConnectionPlugin.js.flow +24 -6
- package/node8plus/plugins/PgRecordFunctionConnectionPlugin.js.map +1 -1
- package/node8plus/plugins/PgRecordReturnTypesPlugin.js +1 -1
- package/node8plus/plugins/PgRecordReturnTypesPlugin.js.flow +6 -3
- package/node8plus/plugins/PgRecordReturnTypesPlugin.js.map +1 -1
- package/node8plus/plugins/PgRowNode.js +2 -2
- package/node8plus/plugins/PgRowNode.js.flow +8 -2
- package/node8plus/plugins/PgRowNode.js.map +1 -1
- package/node8plus/plugins/PgScalarFunctionConnectionPlugin.js +6 -6
- package/node8plus/plugins/PgScalarFunctionConnectionPlugin.js.flow +24 -6
- package/node8plus/plugins/PgScalarFunctionConnectionPlugin.js.map +1 -1
- package/node8plus/plugins/PgTablesPlugin.js +13 -13
- package/node8plus/plugins/PgTablesPlugin.js.flow +56 -20
- package/node8plus/plugins/PgTablesPlugin.js.map +1 -1
- package/node8plus/plugins/PgTypesPlugin.js +62 -78
- package/node8plus/plugins/PgTypesPlugin.js.flow +193 -76
- package/node8plus/plugins/PgTypesPlugin.js.map +1 -1
- package/node8plus/plugins/makeProcField.js +3 -3
- package/node8plus/plugins/makeProcField.js.flow +16 -7
- package/node8plus/plugins/makeProcField.js.map +1 -1
- package/node8plus/plugins/viaTemporaryTable.js +1 -1
- package/node8plus/plugins/viaTemporaryTable.js.flow +8 -4
- package/node8plus/plugins/viaTemporaryTable.js.map +1 -1
- package/node8plus/postgresInterval.js +12 -33
- package/node8plus/postgresInterval.js.flow +22 -51
- package/node8plus/postgresInterval.js.map +1 -1
- package/package.json +9 -9
- 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":";;;;;;;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,
|
|
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":"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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: 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:
|
|
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:
|
|
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:
|
|
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,
|
|
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
|
-
|
|
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"}
|