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