@graphitation/apollo-react-relay-duct-tape-compiler 1.9.0 → 1.9.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/CHANGELOG.md +18 -2
- package/lib/cli.js +7 -7
- package/lib/cli.js.map +2 -2
- package/lib/cli.mjs +7 -7
- package/lib/cli.mjs.map +2 -2
- package/lib/compilerTransforms/emitApolloClientConnectionTransform.d.ts +5 -1
- package/lib/compilerTransforms/emitApolloClientConnectionTransform.d.ts.map +1 -1
- package/lib/compilerTransforms/emitApolloClientConnectionTransform.js +71 -67
- package/lib/compilerTransforms/emitApolloClientConnectionTransform.js.map +2 -2
- package/lib/compilerTransforms/emitApolloClientConnectionTransform.mjs +71 -67
- package/lib/compilerTransforms/emitApolloClientConnectionTransform.mjs.map +2 -2
- package/lib/formatModuleTransforms/extractMetadataTransform.js +4 -2
- package/lib/formatModuleTransforms/extractMetadataTransform.js.map +2 -2
- package/lib/formatModuleTransforms/extractMetadataTransform.mjs +4 -2
- package/lib/formatModuleTransforms/extractMetadataTransform.mjs.map +2 -2
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,12 +1,28 @@
|
|
|
1
1
|
# Change Log - @graphitation/apollo-react-relay-duct-tape-compiler
|
|
2
2
|
|
|
3
|
-
<!-- This log was last generated on
|
|
3
|
+
<!-- This log was last generated on Tue, 10 Mar 2026 19:17:46 GMT and should not be manually modified. -->
|
|
4
4
|
|
|
5
5
|
<!-- Start content -->
|
|
6
6
|
|
|
7
|
+
## 1.9.2
|
|
8
|
+
|
|
9
|
+
Tue, 10 Mar 2026 19:17:46 GMT
|
|
10
|
+
|
|
11
|
+
### Patches
|
|
12
|
+
|
|
13
|
+
- fix(apollo-react-relay-duct-tape-compiler): connection directive works with both "filters" and "filter" argument variants (vrazuvaev@microsoft.com_msteamsmdb)
|
|
14
|
+
|
|
15
|
+
## 1.9.1
|
|
16
|
+
|
|
17
|
+
Mon, 09 Mar 2026 15:22:57 GMT
|
|
18
|
+
|
|
19
|
+
### Patches
|
|
20
|
+
|
|
21
|
+
- Bump @graphitation/supermassive to v3.15.0
|
|
22
|
+
|
|
7
23
|
## 1.9.0
|
|
8
24
|
|
|
9
|
-
Fri, 06 Mar 2026 20:
|
|
25
|
+
Fri, 06 Mar 2026 20:27:05 GMT
|
|
10
26
|
|
|
11
27
|
### Minor changes
|
|
12
28
|
|
package/lib/cli.js
CHANGED
|
@@ -144,13 +144,13 @@ async function main() {
|
|
|
144
144
|
import_relay_compiler2.IRTransforms.printTransforms.push(import_annotateFragmentReferenceTransform.annotateFragmentReferenceTransform);
|
|
145
145
|
import_relay_compiler2.IRTransforms.commonTransforms.unshift(import_enableNodeWatchQueryTransform.enableNodeWatchQueryTransform);
|
|
146
146
|
}
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
)
|
|
153
|
-
|
|
147
|
+
wrapTransform(
|
|
148
|
+
"connectionTransform",
|
|
149
|
+
import_relay_compiler2.IRTransforms.commonTransforms,
|
|
150
|
+
(0, import_emitApolloClientConnectionTransform.emitApolloClientConnectionTransform)({
|
|
151
|
+
renameFiltersArgument: argv.transformConnectionDirective
|
|
152
|
+
})
|
|
153
|
+
);
|
|
154
154
|
const ductTapeCompilerLanguagePlugin = await (0, import_relayCompilerLanguagePlugin.pluginFactory)(argv);
|
|
155
155
|
return (0, import_relay_compiler.relayCompiler)({
|
|
156
156
|
...argv,
|
package/lib/cli.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/cli.ts"],
|
|
4
|
-
"sourcesContent": ["#!/usr/bin/env node\n\n/* istanbul ignore file */\n\nimport * as yargs from \"yargs\";\nimport { relayCompiler } from \"relay-compiler\";\nimport { pluginFactory } from \"./relayCompilerLanguagePlugin\";\n\n// TODO: This needs to be done here to ensure we get to mutate the transforms lists that get used.\nimport { IRTransforms } from \"relay-compiler\";\nimport { IRTransform } from \"relay-compiler/lib/core/CompilerContext\";\nimport { enableNodeWatchQueryTransform } from \"./compilerTransforms/enableNodeWatchQueryTransform\";\nimport { annotateFragmentReferenceTransform } from \"./compilerTransforms/annotateFragmentReferenceTransform\";\nimport { emitApolloClientConnectionTransform } from \"./compilerTransforms/emitApolloClientConnectionTransform\";\nimport { retainConnectionDirectiveTransform } from \"./compilerTransforms/retainConnectionDirectiveTransform\";\n\nfunction wrapTransform(\n transformName: string,\n transforms: IRTransform[],\n wrapperTransform: (wrappedTransform: IRTransform) => IRTransform,\n) {\n const transformIndex = transforms.findIndex(\n (transform) => transform.name === transformName,\n );\n const wrappedTransform = transforms[transformIndex];\n transforms[transformIndex] = wrapperTransform(wrappedTransform);\n}\n\nwrapTransform(\n \"filterDirectivesTransform\",\n IRTransforms.printTransforms,\n retainConnectionDirectiveTransform,\n);\n\nasync function main() {\n const argv = await yargs\n .scriptName(\"duct-tape-compiler\")\n .options({\n src: {\n demandOption: false,\n default: \".\",\n type: \"string\",\n },\n exclude: {\n demandOption: false,\n type: \"string\",\n array: true,\n },\n include: {\n demandOption: false,\n type: \"string\",\n array: true,\n },\n schema: {\n demandOption: true,\n type: \"string\",\n },\n validate: {\n demandOption: false,\n default: false,\n type: \"boolean\",\n },\n verbose: {\n demandOption: false,\n default: false,\n type: \"boolean\",\n },\n watch: {\n demandOption: false,\n default: false,\n type: \"boolean\",\n },\n watchman: {\n demandOption: false,\n default: true,\n type: \"boolean\",\n },\n quiet: {\n demandOption: false,\n default: false,\n type: \"boolean\",\n },\n emitDocuments: {\n demandOption: false,\n default: true,\n type: \"boolean\",\n },\n emitNarrowObservables: {\n demandOption: false,\n default: true,\n type: \"boolean\",\n },\n emitQueryDebugComments: {\n demandOption: false,\n default: false,\n type: \"boolean\",\n },\n emitSupermassiveDocuments: {\n demandOption: false,\n default: false,\n type: \"boolean\",\n },\n supermassiveDocumentNodeOutputType: {\n demandOption: false,\n default: \"V2\",\n type: \"string\",\n coerce: (value) => {\n switch (value) {\n case \"V2\":\n return \"V2\";\n case \"V3\":\n return \"V3\";\n case \"BOTH\":\n return \"BOTH\";\n default:\n return \"V2\";\n }\n },\n },\n unstable_emitExecutionDocumentText: {\n demandOption: false,\n default: false,\n type: \"boolean\",\n },\n transformConnectionDirective: {\n demandOption: false,\n default: true,\n type: \"boolean\",\n },\n })\n .help().argv;\n\n if (!argv.emitDocuments) {\n argv.emitNarrowObservables = false;\n argv.emitQueryDebugComments = false;\n }\n\n if (argv.emitNarrowObservables) {\n // TODO: Moving this up in the list might potentially optimize the query further\n IRTransforms.printTransforms.push(annotateFragmentReferenceTransform);\n IRTransforms.commonTransforms.unshift(enableNodeWatchQueryTransform);\n }\n
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAIA,YAAuB;AACvB,4BAA8B;AAC9B,yCAA8B;AAG9B,IAAAA,yBAA6B;AAE7B,2CAA8C;AAC9C,gDAAmD;AACnD,iDAAoD;AACpD,gDAAmD;AAEnD,SAAS,cACP,eACA,YACA,kBACA;AACA,QAAM,iBAAiB,WAAW;AAAA,IAChC,CAAC,cAAc,UAAU,SAAS;AAAA,EACpC;AACA,QAAM,mBAAmB,WAAW,cAAc;AAClD,aAAW,cAAc,IAAI,iBAAiB,gBAAgB;AAChE;AAEA;AAAA,EACE;AAAA,EACA,oCAAa;AAAA,EACb;AACF;AAEA,eAAe,OAAO;AACpB,QAAM,OAAO,MAAM,MAChB,WAAW,oBAAoB,EAC/B,QAAQ;AAAA,IACP,KAAK;AAAA,MACH,cAAc;AAAA,MACd,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AAAA,IACA,SAAS;AAAA,MACP,cAAc;AAAA,MACd,MAAM;AAAA,MACN,OAAO;AAAA,IACT;AAAA,IACA,SAAS;AAAA,MACP,cAAc;AAAA,MACd,MAAM;AAAA,MACN,OAAO;AAAA,IACT;AAAA,IACA,QAAQ;AAAA,MACN,cAAc;AAAA,MACd,MAAM;AAAA,IACR;AAAA,IACA,UAAU;AAAA,MACR,cAAc;AAAA,MACd,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AAAA,IACA,SAAS;AAAA,MACP,cAAc;AAAA,MACd,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AAAA,IACA,OAAO;AAAA,MACL,cAAc;AAAA,MACd,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AAAA,IACA,UAAU;AAAA,MACR,cAAc;AAAA,MACd,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AAAA,IACA,OAAO;AAAA,MACL,cAAc;AAAA,MACd,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AAAA,IACA,eAAe;AAAA,MACb,cAAc;AAAA,MACd,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AAAA,IACA,uBAAuB;AAAA,MACrB,cAAc;AAAA,MACd,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AAAA,IACA,wBAAwB;AAAA,MACtB,cAAc;AAAA,MACd,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AAAA,IACA,2BAA2B;AAAA,MACzB,cAAc;AAAA,MACd,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AAAA,IACA,oCAAoC;AAAA,MAClC,cAAc;AAAA,MACd,SAAS;AAAA,MACT,MAAM;AAAA,MACN,QAAQ,CAAC,UAAU;AACjB,gBAAQ,OAAO;AAAA,UACb,KAAK;AACH,mBAAO;AAAA,UACT,KAAK;AACH,mBAAO;AAAA,UACT,KAAK;AACH,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,QACX;AAAA,MACF;AAAA,IACF;AAAA,IACA,oCAAoC;AAAA,MAClC,cAAc;AAAA,MACd,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AAAA,IACA,8BAA8B;AAAA,MAC5B,cAAc;AAAA,MACd,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AAAA,EACF,CAAC,EACA,KAAK,EAAE;AAEV,MAAI,CAAC,KAAK,eAAe;AACvB,SAAK,wBAAwB;AAC7B,SAAK,yBAAyB;AAAA,EAChC;AAEA,MAAI,KAAK,uBAAuB;AAE9B,wCAAa,gBAAgB,KAAK,4EAAkC;AACpE,wCAAa,iBAAiB,QAAQ,kEAA6B;AAAA,EACrE;AACA
|
|
4
|
+
"sourcesContent": ["#!/usr/bin/env node\n\n/* istanbul ignore file */\n\nimport * as yargs from \"yargs\";\nimport { relayCompiler } from \"relay-compiler\";\nimport { pluginFactory } from \"./relayCompilerLanguagePlugin\";\n\n// TODO: This needs to be done here to ensure we get to mutate the transforms lists that get used.\nimport { IRTransforms } from \"relay-compiler\";\nimport { IRTransform } from \"relay-compiler/lib/core/CompilerContext\";\nimport { enableNodeWatchQueryTransform } from \"./compilerTransforms/enableNodeWatchQueryTransform\";\nimport { annotateFragmentReferenceTransform } from \"./compilerTransforms/annotateFragmentReferenceTransform\";\nimport { emitApolloClientConnectionTransform } from \"./compilerTransforms/emitApolloClientConnectionTransform\";\nimport { retainConnectionDirectiveTransform } from \"./compilerTransforms/retainConnectionDirectiveTransform\";\n\nfunction wrapTransform(\n transformName: string,\n transforms: IRTransform[],\n wrapperTransform: (wrappedTransform: IRTransform) => IRTransform,\n) {\n const transformIndex = transforms.findIndex(\n (transform) => transform.name === transformName,\n );\n const wrappedTransform = transforms[transformIndex];\n transforms[transformIndex] = wrapperTransform(wrappedTransform);\n}\n\nwrapTransform(\n \"filterDirectivesTransform\",\n IRTransforms.printTransforms,\n retainConnectionDirectiveTransform,\n);\n\nasync function main() {\n const argv = await yargs\n .scriptName(\"duct-tape-compiler\")\n .options({\n src: {\n demandOption: false,\n default: \".\",\n type: \"string\",\n },\n exclude: {\n demandOption: false,\n type: \"string\",\n array: true,\n },\n include: {\n demandOption: false,\n type: \"string\",\n array: true,\n },\n schema: {\n demandOption: true,\n type: \"string\",\n },\n validate: {\n demandOption: false,\n default: false,\n type: \"boolean\",\n },\n verbose: {\n demandOption: false,\n default: false,\n type: \"boolean\",\n },\n watch: {\n demandOption: false,\n default: false,\n type: \"boolean\",\n },\n watchman: {\n demandOption: false,\n default: true,\n type: \"boolean\",\n },\n quiet: {\n demandOption: false,\n default: false,\n type: \"boolean\",\n },\n emitDocuments: {\n demandOption: false,\n default: true,\n type: \"boolean\",\n },\n emitNarrowObservables: {\n demandOption: false,\n default: true,\n type: \"boolean\",\n },\n emitQueryDebugComments: {\n demandOption: false,\n default: false,\n type: \"boolean\",\n },\n emitSupermassiveDocuments: {\n demandOption: false,\n default: false,\n type: \"boolean\",\n },\n supermassiveDocumentNodeOutputType: {\n demandOption: false,\n default: \"V2\",\n type: \"string\",\n coerce: (value) => {\n switch (value) {\n case \"V2\":\n return \"V2\";\n case \"V3\":\n return \"V3\";\n case \"BOTH\":\n return \"BOTH\";\n default:\n return \"V2\";\n }\n },\n },\n unstable_emitExecutionDocumentText: {\n demandOption: false,\n default: false,\n type: \"boolean\",\n },\n transformConnectionDirective: {\n demandOption: false,\n default: true,\n type: \"boolean\",\n },\n })\n .help().argv;\n\n if (!argv.emitDocuments) {\n argv.emitNarrowObservables = false;\n argv.emitQueryDebugComments = false;\n }\n\n if (argv.emitNarrowObservables) {\n // TODO: Moving this up in the list might potentially optimize the query further\n IRTransforms.printTransforms.push(annotateFragmentReferenceTransform);\n IRTransforms.commonTransforms.unshift(enableNodeWatchQueryTransform);\n }\n wrapTransform(\n \"connectionTransform\",\n IRTransforms.commonTransforms,\n emitApolloClientConnectionTransform({\n renameFiltersArgument: argv.transformConnectionDirective,\n }),\n );\n\n const ductTapeCompilerLanguagePlugin = await pluginFactory(argv);\n\n return relayCompiler({\n ...argv,\n language: ductTapeCompilerLanguagePlugin,\n extensions: [\"ts\", \"tsx\"], // FIXME: Why is this not taken from the language plugin?\n include: argv.include || [\"**\"],\n exclude: [\n \"**/node_modules/**\",\n \"**/__mocks__/**\",\n \"**/__generated__/**\",\n // relay-compiler will treat these as client-side schema extensions\n \"**/*.graphql\",\n ...(argv.exclude || []),\n ],\n noFutureProofEnums: true,\n customScalars: {},\n });\n}\n\nmain().catch((error) => {\n console.error(error);\n process.exit(1);\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["import_relay_compiler"]
|
|
7
7
|
}
|
package/lib/cli.mjs
CHANGED
|
@@ -123,13 +123,13 @@ async function main() {
|
|
|
123
123
|
IRTransforms.printTransforms.push(annotateFragmentReferenceTransform);
|
|
124
124
|
IRTransforms.commonTransforms.unshift(enableNodeWatchQueryTransform);
|
|
125
125
|
}
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
)
|
|
132
|
-
|
|
126
|
+
wrapTransform(
|
|
127
|
+
"connectionTransform",
|
|
128
|
+
IRTransforms.commonTransforms,
|
|
129
|
+
emitApolloClientConnectionTransform({
|
|
130
|
+
renameFiltersArgument: argv.transformConnectionDirective
|
|
131
|
+
})
|
|
132
|
+
);
|
|
133
133
|
const ductTapeCompilerLanguagePlugin = await pluginFactory(argv);
|
|
134
134
|
return relayCompiler({
|
|
135
135
|
...argv,
|
package/lib/cli.mjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/cli.ts"],
|
|
4
|
-
"sourcesContent": ["#!/usr/bin/env node\n\n/* istanbul ignore file */\n\nimport * as yargs from \"yargs\";\nimport { relayCompiler } from \"relay-compiler\";\nimport { pluginFactory } from \"./relayCompilerLanguagePlugin\";\n\n// TODO: This needs to be done here to ensure we get to mutate the transforms lists that get used.\nimport { IRTransforms } from \"relay-compiler\";\nimport { IRTransform } from \"relay-compiler/lib/core/CompilerContext\";\nimport { enableNodeWatchQueryTransform } from \"./compilerTransforms/enableNodeWatchQueryTransform\";\nimport { annotateFragmentReferenceTransform } from \"./compilerTransforms/annotateFragmentReferenceTransform\";\nimport { emitApolloClientConnectionTransform } from \"./compilerTransforms/emitApolloClientConnectionTransform\";\nimport { retainConnectionDirectiveTransform } from \"./compilerTransforms/retainConnectionDirectiveTransform\";\n\nfunction wrapTransform(\n transformName: string,\n transforms: IRTransform[],\n wrapperTransform: (wrappedTransform: IRTransform) => IRTransform,\n) {\n const transformIndex = transforms.findIndex(\n (transform) => transform.name === transformName,\n );\n const wrappedTransform = transforms[transformIndex];\n transforms[transformIndex] = wrapperTransform(wrappedTransform);\n}\n\nwrapTransform(\n \"filterDirectivesTransform\",\n IRTransforms.printTransforms,\n retainConnectionDirectiveTransform,\n);\n\nasync function main() {\n const argv = await yargs\n .scriptName(\"duct-tape-compiler\")\n .options({\n src: {\n demandOption: false,\n default: \".\",\n type: \"string\",\n },\n exclude: {\n demandOption: false,\n type: \"string\",\n array: true,\n },\n include: {\n demandOption: false,\n type: \"string\",\n array: true,\n },\n schema: {\n demandOption: true,\n type: \"string\",\n },\n validate: {\n demandOption: false,\n default: false,\n type: \"boolean\",\n },\n verbose: {\n demandOption: false,\n default: false,\n type: \"boolean\",\n },\n watch: {\n demandOption: false,\n default: false,\n type: \"boolean\",\n },\n watchman: {\n demandOption: false,\n default: true,\n type: \"boolean\",\n },\n quiet: {\n demandOption: false,\n default: false,\n type: \"boolean\",\n },\n emitDocuments: {\n demandOption: false,\n default: true,\n type: \"boolean\",\n },\n emitNarrowObservables: {\n demandOption: false,\n default: true,\n type: \"boolean\",\n },\n emitQueryDebugComments: {\n demandOption: false,\n default: false,\n type: \"boolean\",\n },\n emitSupermassiveDocuments: {\n demandOption: false,\n default: false,\n type: \"boolean\",\n },\n supermassiveDocumentNodeOutputType: {\n demandOption: false,\n default: \"V2\",\n type: \"string\",\n coerce: (value) => {\n switch (value) {\n case \"V2\":\n return \"V2\";\n case \"V3\":\n return \"V3\";\n case \"BOTH\":\n return \"BOTH\";\n default:\n return \"V2\";\n }\n },\n },\n unstable_emitExecutionDocumentText: {\n demandOption: false,\n default: false,\n type: \"boolean\",\n },\n transformConnectionDirective: {\n demandOption: false,\n default: true,\n type: \"boolean\",\n },\n })\n .help().argv;\n\n if (!argv.emitDocuments) {\n argv.emitNarrowObservables = false;\n argv.emitQueryDebugComments = false;\n }\n\n if (argv.emitNarrowObservables) {\n // TODO: Moving this up in the list might potentially optimize the query further\n IRTransforms.printTransforms.push(annotateFragmentReferenceTransform);\n IRTransforms.commonTransforms.unshift(enableNodeWatchQueryTransform);\n }\n
|
|
5
|
-
"mappings": ";;;AAIA,YAAY,WAAW;AACvB,SAAS,qBAAqB;AAC9B,SAAS,qBAAqB;AAG9B,SAAS,oBAAoB;AAE7B,SAAS,qCAAqC;AAC9C,SAAS,0CAA0C;AACnD,SAAS,2CAA2C;AACpD,SAAS,0CAA0C;AAEnD,SAAS,cACP,eACA,YACA,kBACA;AACA,QAAM,iBAAiB,WAAW;AAAA,IAChC,CAAC,cAAc,UAAU,SAAS;AAAA,EACpC;AACA,QAAM,mBAAmB,WAAW,cAAc;AAClD,aAAW,cAAc,IAAI,iBAAiB,gBAAgB;AAChE;AAEA;AAAA,EACE;AAAA,EACA,aAAa;AAAA,EACb;AACF;AAEA,eAAe,OAAO;AACpB,QAAM,OAAO,MACV,iBAAW,oBAAoB,EAC/B,QAAQ;AAAA,IACP,KAAK;AAAA,MACH,cAAc;AAAA,MACd,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AAAA,IACA,SAAS;AAAA,MACP,cAAc;AAAA,MACd,MAAM;AAAA,MACN,OAAO;AAAA,IACT;AAAA,IACA,SAAS;AAAA,MACP,cAAc;AAAA,MACd,MAAM;AAAA,MACN,OAAO;AAAA,IACT;AAAA,IACA,QAAQ;AAAA,MACN,cAAc;AAAA,MACd,MAAM;AAAA,IACR;AAAA,IACA,UAAU;AAAA,MACR,cAAc;AAAA,MACd,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AAAA,IACA,SAAS;AAAA,MACP,cAAc;AAAA,MACd,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AAAA,IACA,OAAO;AAAA,MACL,cAAc;AAAA,MACd,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AAAA,IACA,UAAU;AAAA,MACR,cAAc;AAAA,MACd,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AAAA,IACA,OAAO;AAAA,MACL,cAAc;AAAA,MACd,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AAAA,IACA,eAAe;AAAA,MACb,cAAc;AAAA,MACd,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AAAA,IACA,uBAAuB;AAAA,MACrB,cAAc;AAAA,MACd,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AAAA,IACA,wBAAwB;AAAA,MACtB,cAAc;AAAA,MACd,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AAAA,IACA,2BAA2B;AAAA,MACzB,cAAc;AAAA,MACd,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AAAA,IACA,oCAAoC;AAAA,MAClC,cAAc;AAAA,MACd,SAAS;AAAA,MACT,MAAM;AAAA,MACN,QAAQ,CAAC,UAAU;AACjB,gBAAQ,OAAO;AAAA,UACb,KAAK;AACH,mBAAO;AAAA,UACT,KAAK;AACH,mBAAO;AAAA,UACT,KAAK;AACH,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,QACX;AAAA,MACF;AAAA,IACF;AAAA,IACA,oCAAoC;AAAA,MAClC,cAAc;AAAA,MACd,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AAAA,IACA,8BAA8B;AAAA,MAC5B,cAAc;AAAA,MACd,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AAAA,EACF,CAAC,EACA,KAAK,EAAE;AAEV,MAAI,CAAC,KAAK,eAAe;AACvB,SAAK,wBAAwB;AAC7B,SAAK,yBAAyB;AAAA,EAChC;AAEA,MAAI,KAAK,uBAAuB;AAE9B,iBAAa,gBAAgB,KAAK,kCAAkC;AACpE,iBAAa,iBAAiB,QAAQ,6BAA6B;AAAA,EACrE;AACA
|
|
4
|
+
"sourcesContent": ["#!/usr/bin/env node\n\n/* istanbul ignore file */\n\nimport * as yargs from \"yargs\";\nimport { relayCompiler } from \"relay-compiler\";\nimport { pluginFactory } from \"./relayCompilerLanguagePlugin\";\n\n// TODO: This needs to be done here to ensure we get to mutate the transforms lists that get used.\nimport { IRTransforms } from \"relay-compiler\";\nimport { IRTransform } from \"relay-compiler/lib/core/CompilerContext\";\nimport { enableNodeWatchQueryTransform } from \"./compilerTransforms/enableNodeWatchQueryTransform\";\nimport { annotateFragmentReferenceTransform } from \"./compilerTransforms/annotateFragmentReferenceTransform\";\nimport { emitApolloClientConnectionTransform } from \"./compilerTransforms/emitApolloClientConnectionTransform\";\nimport { retainConnectionDirectiveTransform } from \"./compilerTransforms/retainConnectionDirectiveTransform\";\n\nfunction wrapTransform(\n transformName: string,\n transforms: IRTransform[],\n wrapperTransform: (wrappedTransform: IRTransform) => IRTransform,\n) {\n const transformIndex = transforms.findIndex(\n (transform) => transform.name === transformName,\n );\n const wrappedTransform = transforms[transformIndex];\n transforms[transformIndex] = wrapperTransform(wrappedTransform);\n}\n\nwrapTransform(\n \"filterDirectivesTransform\",\n IRTransforms.printTransforms,\n retainConnectionDirectiveTransform,\n);\n\nasync function main() {\n const argv = await yargs\n .scriptName(\"duct-tape-compiler\")\n .options({\n src: {\n demandOption: false,\n default: \".\",\n type: \"string\",\n },\n exclude: {\n demandOption: false,\n type: \"string\",\n array: true,\n },\n include: {\n demandOption: false,\n type: \"string\",\n array: true,\n },\n schema: {\n demandOption: true,\n type: \"string\",\n },\n validate: {\n demandOption: false,\n default: false,\n type: \"boolean\",\n },\n verbose: {\n demandOption: false,\n default: false,\n type: \"boolean\",\n },\n watch: {\n demandOption: false,\n default: false,\n type: \"boolean\",\n },\n watchman: {\n demandOption: false,\n default: true,\n type: \"boolean\",\n },\n quiet: {\n demandOption: false,\n default: false,\n type: \"boolean\",\n },\n emitDocuments: {\n demandOption: false,\n default: true,\n type: \"boolean\",\n },\n emitNarrowObservables: {\n demandOption: false,\n default: true,\n type: \"boolean\",\n },\n emitQueryDebugComments: {\n demandOption: false,\n default: false,\n type: \"boolean\",\n },\n emitSupermassiveDocuments: {\n demandOption: false,\n default: false,\n type: \"boolean\",\n },\n supermassiveDocumentNodeOutputType: {\n demandOption: false,\n default: \"V2\",\n type: \"string\",\n coerce: (value) => {\n switch (value) {\n case \"V2\":\n return \"V2\";\n case \"V3\":\n return \"V3\";\n case \"BOTH\":\n return \"BOTH\";\n default:\n return \"V2\";\n }\n },\n },\n unstable_emitExecutionDocumentText: {\n demandOption: false,\n default: false,\n type: \"boolean\",\n },\n transformConnectionDirective: {\n demandOption: false,\n default: true,\n type: \"boolean\",\n },\n })\n .help().argv;\n\n if (!argv.emitDocuments) {\n argv.emitNarrowObservables = false;\n argv.emitQueryDebugComments = false;\n }\n\n if (argv.emitNarrowObservables) {\n // TODO: Moving this up in the list might potentially optimize the query further\n IRTransforms.printTransforms.push(annotateFragmentReferenceTransform);\n IRTransforms.commonTransforms.unshift(enableNodeWatchQueryTransform);\n }\n wrapTransform(\n \"connectionTransform\",\n IRTransforms.commonTransforms,\n emitApolloClientConnectionTransform({\n renameFiltersArgument: argv.transformConnectionDirective,\n }),\n );\n\n const ductTapeCompilerLanguagePlugin = await pluginFactory(argv);\n\n return relayCompiler({\n ...argv,\n language: ductTapeCompilerLanguagePlugin,\n extensions: [\"ts\", \"tsx\"], // FIXME: Why is this not taken from the language plugin?\n include: argv.include || [\"**\"],\n exclude: [\n \"**/node_modules/**\",\n \"**/__mocks__/**\",\n \"**/__generated__/**\",\n // relay-compiler will treat these as client-side schema extensions\n \"**/*.graphql\",\n ...(argv.exclude || []),\n ],\n noFutureProofEnums: true,\n customScalars: {},\n });\n}\n\nmain().catch((error) => {\n console.error(error);\n process.exit(1);\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import { IRTransform } from "relay-compiler/lib/core/CompilerContext";
|
|
2
|
+
type Args = {
|
|
3
|
+
renameFiltersArgument: boolean;
|
|
4
|
+
};
|
|
2
5
|
/**
|
|
3
6
|
* Finds connection client-handles that relay-compiler emits and replaces
|
|
4
7
|
* them with a version of the `@connection` directive that Apollo Client uses;
|
|
@@ -8,5 +11,6 @@ import { IRTransform } from "relay-compiler/lib/core/CompilerContext";
|
|
|
8
11
|
* @param wrappedConnectionTransform
|
|
9
12
|
* relay-compiler's connection client-handle transform
|
|
10
13
|
*/
|
|
11
|
-
export declare function emitApolloClientConnectionTransform(
|
|
14
|
+
export declare function emitApolloClientConnectionTransform({ renameFiltersArgument, }: Args): (wrapped: IRTransform) => IRTransform;
|
|
15
|
+
export {};
|
|
12
16
|
//# sourceMappingURL=emitApolloClientConnectionTransform.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emitApolloClientConnectionTransform.d.ts","sourceRoot":"","sources":["../../src/compilerTransforms/emitApolloClientConnectionTransform.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAC;AAMtE;;;;;;;;GAQG;AACH,wBAAgB,mCAAmC,
|
|
1
|
+
{"version":3,"file":"emitApolloClientConnectionTransform.d.ts","sourceRoot":"","sources":["../../src/compilerTransforms/emitApolloClientConnectionTransform.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAC;AAMtE,KAAK,IAAI,GAAG;IACV,qBAAqB,EAAE,OAAO,CAAC;CAChC,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,mCAAmC,CAAC,EAClD,qBAAqB,GACtB,EAAE,IAAI,GAAG,CAAC,OAAO,EAAE,WAAW,KAAK,WAAW,CA+E9C"}
|
|
@@ -23,78 +23,82 @@ __export(emitApolloClientConnectionTransform_exports, {
|
|
|
23
23
|
module.exports = __toCommonJS(emitApolloClientConnectionTransform_exports);
|
|
24
24
|
var import_IRVisitor = require("relay-compiler/lib/core/IRVisitor");
|
|
25
25
|
const SchemaUtils = require("relay-compiler/lib/core/SchemaUtils");
|
|
26
|
-
function emitApolloClientConnectionTransform(
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
const
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
type: SchemaUtils.getNonNullStringInput(schema),
|
|
43
|
-
value: {
|
|
44
|
-
kind: "Literal",
|
|
45
|
-
value: connectionHandle.key,
|
|
46
|
-
loc: { kind: "Generated" }
|
|
47
|
-
},
|
|
48
|
-
loc: { kind: "Generated" },
|
|
49
|
-
metadata: void 0
|
|
50
|
-
}
|
|
51
|
-
];
|
|
52
|
-
if (connectionHandle.filters) {
|
|
53
|
-
args.push({
|
|
54
|
-
kind: "Argument",
|
|
55
|
-
name: "filter",
|
|
56
|
-
type: schema.assertInputType(
|
|
57
|
-
schema.expectTypeFromString("[String!]")
|
|
58
|
-
),
|
|
59
|
-
value: {
|
|
60
|
-
kind: "ListValue",
|
|
61
|
-
items: connectionHandle.filters.map(
|
|
62
|
-
(filter) => ({
|
|
63
|
-
kind: "Literal",
|
|
64
|
-
value: filter,
|
|
65
|
-
loc: { kind: "Generated" }
|
|
66
|
-
})
|
|
67
|
-
),
|
|
68
|
-
loc: { kind: "Generated" },
|
|
69
|
-
metadata: void 0
|
|
70
|
-
},
|
|
71
|
-
loc: { kind: "Generated" },
|
|
72
|
-
metadata: void 0
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
const nextLinkedFieldNode = {
|
|
76
|
-
...linkedFieldNode,
|
|
77
|
-
handles: (_b = linkedFieldNode.handles) == null ? void 0 : _b.filter(
|
|
78
|
-
(handle) => handle.name !== "connection"
|
|
79
|
-
),
|
|
80
|
-
directives: [
|
|
81
|
-
...linkedFieldNode.directives,
|
|
26
|
+
function emitApolloClientConnectionTransform({
|
|
27
|
+
renameFiltersArgument
|
|
28
|
+
}) {
|
|
29
|
+
return (wrappedConnectionTransform) => {
|
|
30
|
+
const connectionTransformWrapper = (context) => {
|
|
31
|
+
const schema = context.getSchema();
|
|
32
|
+
let nextContext = wrappedConnectionTransform(context);
|
|
33
|
+
nextContext.forEachDocument((document) => {
|
|
34
|
+
const nextDocument = (0, import_IRVisitor.visit)(document, {
|
|
35
|
+
LinkedField(linkedFieldNode) {
|
|
36
|
+
var _a, _b;
|
|
37
|
+
const connectionHandle = (_a = linkedFieldNode.handles) == null ? void 0 : _a.find(
|
|
38
|
+
(handle) => handle.name === "connection"
|
|
39
|
+
);
|
|
40
|
+
if (connectionHandle) {
|
|
41
|
+
const args = [
|
|
82
42
|
{
|
|
83
|
-
kind: "
|
|
84
|
-
name: "
|
|
85
|
-
|
|
43
|
+
kind: "Argument",
|
|
44
|
+
name: "key",
|
|
45
|
+
type: SchemaUtils.getNonNullStringInput(schema),
|
|
46
|
+
value: {
|
|
47
|
+
kind: "Literal",
|
|
48
|
+
value: connectionHandle.key,
|
|
49
|
+
loc: { kind: "Generated" }
|
|
50
|
+
},
|
|
86
51
|
loc: { kind: "Generated" },
|
|
87
52
|
metadata: void 0
|
|
88
53
|
}
|
|
89
|
-
]
|
|
90
|
-
|
|
91
|
-
|
|
54
|
+
];
|
|
55
|
+
if (connectionHandle.filters) {
|
|
56
|
+
args.push({
|
|
57
|
+
kind: "Argument",
|
|
58
|
+
name: renameFiltersArgument ? "filter" : "filters",
|
|
59
|
+
type: schema.assertInputType(
|
|
60
|
+
schema.expectTypeFromString("[String!]")
|
|
61
|
+
),
|
|
62
|
+
value: {
|
|
63
|
+
kind: "ListValue",
|
|
64
|
+
items: connectionHandle.filters.map(
|
|
65
|
+
(filter) => ({
|
|
66
|
+
kind: "Literal",
|
|
67
|
+
value: filter,
|
|
68
|
+
loc: { kind: "Generated" }
|
|
69
|
+
})
|
|
70
|
+
),
|
|
71
|
+
loc: { kind: "Generated" },
|
|
72
|
+
metadata: void 0
|
|
73
|
+
},
|
|
74
|
+
loc: { kind: "Generated" },
|
|
75
|
+
metadata: void 0
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
const nextLinkedFieldNode = {
|
|
79
|
+
...linkedFieldNode,
|
|
80
|
+
handles: (_b = linkedFieldNode.handles) == null ? void 0 : _b.filter(
|
|
81
|
+
(handle) => handle.name !== "connection"
|
|
82
|
+
),
|
|
83
|
+
directives: [
|
|
84
|
+
...linkedFieldNode.directives,
|
|
85
|
+
{
|
|
86
|
+
kind: "Directive",
|
|
87
|
+
name: "connection",
|
|
88
|
+
args,
|
|
89
|
+
loc: { kind: "Generated" },
|
|
90
|
+
metadata: void 0
|
|
91
|
+
}
|
|
92
|
+
]
|
|
93
|
+
};
|
|
94
|
+
return nextLinkedFieldNode;
|
|
95
|
+
}
|
|
92
96
|
}
|
|
93
|
-
}
|
|
97
|
+
});
|
|
98
|
+
nextContext = nextContext.replace(nextDocument);
|
|
94
99
|
});
|
|
95
|
-
|
|
96
|
-
}
|
|
97
|
-
return
|
|
100
|
+
return nextContext;
|
|
101
|
+
};
|
|
102
|
+
return connectionTransformWrapper;
|
|
98
103
|
};
|
|
99
|
-
return connectionTransformWrapper;
|
|
100
104
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/compilerTransforms/emitApolloClientConnectionTransform.ts"],
|
|
4
|
-
"sourcesContent": ["import invariant from \"invariant\";\nimport { Argument, ArgumentValue, LinkedField } from \"relay-compiler\";\nimport { IRTransform } from \"relay-compiler/lib/core/CompilerContext\";\nimport { visit } from \"relay-compiler/lib/core/IRVisitor\";\n\n// TODO: Add typings for this\nconst SchemaUtils = require(\"relay-compiler/lib/core/SchemaUtils\");\n\n/**\n * Finds connection client-handles that relay-compiler emits and replaces\n * them with a version of the `@connection` directive that Apollo Client uses;\n * which is identical to relay's version, except the `filters` parameter is\n * named `filter` (singular).\n *\n * @param wrappedConnectionTransform\n * relay-compiler's connection client-handle transform\n */\nexport function emitApolloClientConnectionTransform(\n
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,uBAAsB;AAGtB,MAAM,cAAc,QAAQ,qCAAqC;
|
|
4
|
+
"sourcesContent": ["import invariant from \"invariant\";\nimport { Argument, ArgumentValue, LinkedField } from \"relay-compiler\";\nimport { IRTransform } from \"relay-compiler/lib/core/CompilerContext\";\nimport { visit } from \"relay-compiler/lib/core/IRVisitor\";\n\n// TODO: Add typings for this\nconst SchemaUtils = require(\"relay-compiler/lib/core/SchemaUtils\");\n\ntype Args = {\n renameFiltersArgument: boolean;\n};\n\n/**\n * Finds connection client-handles that relay-compiler emits and replaces\n * them with a version of the `@connection` directive that Apollo Client uses;\n * which is identical to relay's version, except the `filters` parameter is\n * named `filter` (singular).\n *\n * @param wrappedConnectionTransform\n * relay-compiler's connection client-handle transform\n */\nexport function emitApolloClientConnectionTransform({\n renameFiltersArgument,\n}: Args): (wrapped: IRTransform) => IRTransform {\n return (wrappedConnectionTransform: IRTransform) => {\n const connectionTransformWrapper: IRTransform = (context) => {\n const schema = context.getSchema();\n let nextContext = wrappedConnectionTransform(context);\n\n // Replaces the field handle created by the wrapped connection transform\n // with the @connection directive that Apollo Client expects\n nextContext.forEachDocument((document) => {\n const nextDocument = visit(document, {\n LinkedField(linkedFieldNode) {\n const connectionHandle = linkedFieldNode.handles?.find(\n (handle) => handle.name === \"connection\",\n );\n if (connectionHandle) {\n const args: Argument[] = [\n {\n kind: \"Argument\",\n name: \"key\",\n type: SchemaUtils.getNonNullStringInput(schema),\n value: {\n kind: \"Literal\",\n value: connectionHandle.key,\n loc: { kind: \"Generated\" },\n },\n loc: { kind: \"Generated\" },\n metadata: undefined,\n },\n ];\n if (connectionHandle.filters) {\n args.push({\n kind: \"Argument\",\n name: renameFiltersArgument ? \"filter\" : \"filters\",\n type: schema.assertInputType(\n schema.expectTypeFromString(\"[String!]\"),\n ),\n value: {\n kind: \"ListValue\",\n items: connectionHandle.filters.map<ArgumentValue>(\n (filter) => ({\n kind: \"Literal\",\n value: filter,\n loc: { kind: \"Generated\" },\n }),\n ),\n loc: { kind: \"Generated\" },\n metadata: undefined,\n },\n loc: { kind: \"Generated\" },\n metadata: undefined,\n });\n }\n const nextLinkedFieldNode: LinkedField = {\n ...linkedFieldNode,\n handles: linkedFieldNode.handles?.filter(\n (handle) => handle.name !== \"connection\",\n ),\n directives: [\n ...linkedFieldNode.directives,\n {\n kind: \"Directive\",\n name: \"connection\",\n args,\n loc: { kind: \"Generated\" },\n metadata: undefined,\n },\n ],\n };\n return nextLinkedFieldNode;\n }\n },\n });\n nextContext = nextContext.replace(nextDocument);\n });\n\n return nextContext;\n };\n return connectionTransformWrapper;\n };\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,uBAAsB;AAGtB,MAAM,cAAc,QAAQ,qCAAqC;AAe1D,SAAS,oCAAoC;AAAA,EAClD;AACF,GAAgD;AAC9C,SAAO,CAAC,+BAA4C;AAClD,UAAM,6BAA0C,CAAC,YAAY;AAC3D,YAAM,SAAS,QAAQ,UAAU;AACjC,UAAI,cAAc,2BAA2B,OAAO;AAIpD,kBAAY,gBAAgB,CAAC,aAAa;AACxC,cAAM,mBAAe,wBAAM,UAAU;AAAA,UACnC,YAAY,iBAAiB;AAjCvC;AAkCY,kBAAM,oBAAmB,qBAAgB,YAAhB,mBAAyB;AAAA,cAChD,CAAC,WAAW,OAAO,SAAS;AAAA;AAE9B,gBAAI,kBAAkB;AACpB,oBAAM,OAAmB;AAAA,gBACvB;AAAA,kBACE,MAAM;AAAA,kBACN,MAAM;AAAA,kBACN,MAAM,YAAY,sBAAsB,MAAM;AAAA,kBAC9C,OAAO;AAAA,oBACL,MAAM;AAAA,oBACN,OAAO,iBAAiB;AAAA,oBACxB,KAAK,EAAE,MAAM,YAAY;AAAA,kBAC3B;AAAA,kBACA,KAAK,EAAE,MAAM,YAAY;AAAA,kBACzB,UAAU;AAAA,gBACZ;AAAA,cACF;AACA,kBAAI,iBAAiB,SAAS;AAC5B,qBAAK,KAAK;AAAA,kBACR,MAAM;AAAA,kBACN,MAAM,wBAAwB,WAAW;AAAA,kBACzC,MAAM,OAAO;AAAA,oBACX,OAAO,qBAAqB,WAAW;AAAA,kBACzC;AAAA,kBACA,OAAO;AAAA,oBACL,MAAM;AAAA,oBACN,OAAO,iBAAiB,QAAQ;AAAA,sBAC9B,CAAC,YAAY;AAAA,wBACX,MAAM;AAAA,wBACN,OAAO;AAAA,wBACP,KAAK,EAAE,MAAM,YAAY;AAAA,sBAC3B;AAAA,oBACF;AAAA,oBACA,KAAK,EAAE,MAAM,YAAY;AAAA,oBACzB,UAAU;AAAA,kBACZ;AAAA,kBACA,KAAK,EAAE,MAAM,YAAY;AAAA,kBACzB,UAAU;AAAA,gBACZ,CAAC;AAAA,cACH;AACA,oBAAM,sBAAmC;AAAA,gBACvC,GAAG;AAAA,gBACH,UAAS,qBAAgB,YAAhB,mBAAyB;AAAA,kBAChC,CAAC,WAAW,OAAO,SAAS;AAAA;AAAA,gBAE9B,YAAY;AAAA,kBACV,GAAG,gBAAgB;AAAA,kBACnB;AAAA,oBACE,MAAM;AAAA,oBACN,MAAM;AAAA,oBACN;AAAA,oBACA,KAAK,EAAE,MAAM,YAAY;AAAA,oBACzB,UAAU;AAAA,kBACZ;AAAA,gBACF;AAAA,cACF;AACA,qBAAO;AAAA,YACT;AAAA,UACF;AAAA,QACF,CAAC;AACD,sBAAc,YAAY,QAAQ,YAAY;AAAA,MAChD,CAAC;AAED,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -9,80 +9,84 @@ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require
|
|
|
9
9
|
// src/compilerTransforms/emitApolloClientConnectionTransform.ts
|
|
10
10
|
import { visit } from "relay-compiler/lib/core/IRVisitor";
|
|
11
11
|
var SchemaUtils = __require("relay-compiler/lib/core/SchemaUtils");
|
|
12
|
-
function emitApolloClientConnectionTransform(
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
type: SchemaUtils.getNonNullStringInput(schema),
|
|
29
|
-
value: {
|
|
30
|
-
kind: "Literal",
|
|
31
|
-
value: connectionHandle.key,
|
|
32
|
-
loc: { kind: "Generated" }
|
|
33
|
-
},
|
|
34
|
-
loc: { kind: "Generated" },
|
|
35
|
-
metadata: void 0
|
|
36
|
-
}
|
|
37
|
-
];
|
|
38
|
-
if (connectionHandle.filters) {
|
|
39
|
-
args.push({
|
|
40
|
-
kind: "Argument",
|
|
41
|
-
name: "filter",
|
|
42
|
-
type: schema.assertInputType(
|
|
43
|
-
schema.expectTypeFromString("[String!]")
|
|
44
|
-
),
|
|
45
|
-
value: {
|
|
46
|
-
kind: "ListValue",
|
|
47
|
-
items: connectionHandle.filters.map(
|
|
48
|
-
(filter) => ({
|
|
49
|
-
kind: "Literal",
|
|
50
|
-
value: filter,
|
|
51
|
-
loc: { kind: "Generated" }
|
|
52
|
-
})
|
|
53
|
-
),
|
|
54
|
-
loc: { kind: "Generated" },
|
|
55
|
-
metadata: void 0
|
|
56
|
-
},
|
|
57
|
-
loc: { kind: "Generated" },
|
|
58
|
-
metadata: void 0
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
const nextLinkedFieldNode = {
|
|
62
|
-
...linkedFieldNode,
|
|
63
|
-
handles: (_b = linkedFieldNode.handles) == null ? void 0 : _b.filter(
|
|
64
|
-
(handle) => handle.name !== "connection"
|
|
65
|
-
),
|
|
66
|
-
directives: [
|
|
67
|
-
...linkedFieldNode.directives,
|
|
12
|
+
function emitApolloClientConnectionTransform({
|
|
13
|
+
renameFiltersArgument
|
|
14
|
+
}) {
|
|
15
|
+
return (wrappedConnectionTransform) => {
|
|
16
|
+
const connectionTransformWrapper = (context) => {
|
|
17
|
+
const schema = context.getSchema();
|
|
18
|
+
let nextContext = wrappedConnectionTransform(context);
|
|
19
|
+
nextContext.forEachDocument((document) => {
|
|
20
|
+
const nextDocument = visit(document, {
|
|
21
|
+
LinkedField(linkedFieldNode) {
|
|
22
|
+
var _a, _b;
|
|
23
|
+
const connectionHandle = (_a = linkedFieldNode.handles) == null ? void 0 : _a.find(
|
|
24
|
+
(handle) => handle.name === "connection"
|
|
25
|
+
);
|
|
26
|
+
if (connectionHandle) {
|
|
27
|
+
const args = [
|
|
68
28
|
{
|
|
69
|
-
kind: "
|
|
70
|
-
name: "
|
|
71
|
-
|
|
29
|
+
kind: "Argument",
|
|
30
|
+
name: "key",
|
|
31
|
+
type: SchemaUtils.getNonNullStringInput(schema),
|
|
32
|
+
value: {
|
|
33
|
+
kind: "Literal",
|
|
34
|
+
value: connectionHandle.key,
|
|
35
|
+
loc: { kind: "Generated" }
|
|
36
|
+
},
|
|
72
37
|
loc: { kind: "Generated" },
|
|
73
38
|
metadata: void 0
|
|
74
39
|
}
|
|
75
|
-
]
|
|
76
|
-
|
|
77
|
-
|
|
40
|
+
];
|
|
41
|
+
if (connectionHandle.filters) {
|
|
42
|
+
args.push({
|
|
43
|
+
kind: "Argument",
|
|
44
|
+
name: renameFiltersArgument ? "filter" : "filters",
|
|
45
|
+
type: schema.assertInputType(
|
|
46
|
+
schema.expectTypeFromString("[String!]")
|
|
47
|
+
),
|
|
48
|
+
value: {
|
|
49
|
+
kind: "ListValue",
|
|
50
|
+
items: connectionHandle.filters.map(
|
|
51
|
+
(filter) => ({
|
|
52
|
+
kind: "Literal",
|
|
53
|
+
value: filter,
|
|
54
|
+
loc: { kind: "Generated" }
|
|
55
|
+
})
|
|
56
|
+
),
|
|
57
|
+
loc: { kind: "Generated" },
|
|
58
|
+
metadata: void 0
|
|
59
|
+
},
|
|
60
|
+
loc: { kind: "Generated" },
|
|
61
|
+
metadata: void 0
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
const nextLinkedFieldNode = {
|
|
65
|
+
...linkedFieldNode,
|
|
66
|
+
handles: (_b = linkedFieldNode.handles) == null ? void 0 : _b.filter(
|
|
67
|
+
(handle) => handle.name !== "connection"
|
|
68
|
+
),
|
|
69
|
+
directives: [
|
|
70
|
+
...linkedFieldNode.directives,
|
|
71
|
+
{
|
|
72
|
+
kind: "Directive",
|
|
73
|
+
name: "connection",
|
|
74
|
+
args,
|
|
75
|
+
loc: { kind: "Generated" },
|
|
76
|
+
metadata: void 0
|
|
77
|
+
}
|
|
78
|
+
]
|
|
79
|
+
};
|
|
80
|
+
return nextLinkedFieldNode;
|
|
81
|
+
}
|
|
78
82
|
}
|
|
79
|
-
}
|
|
83
|
+
});
|
|
84
|
+
nextContext = nextContext.replace(nextDocument);
|
|
80
85
|
});
|
|
81
|
-
|
|
82
|
-
}
|
|
83
|
-
return
|
|
86
|
+
return nextContext;
|
|
87
|
+
};
|
|
88
|
+
return connectionTransformWrapper;
|
|
84
89
|
};
|
|
85
|
-
return connectionTransformWrapper;
|
|
86
90
|
}
|
|
87
91
|
export {
|
|
88
92
|
emitApolloClientConnectionTransform
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/compilerTransforms/emitApolloClientConnectionTransform.ts"],
|
|
4
|
-
"sourcesContent": ["import invariant from \"invariant\";\nimport { Argument, ArgumentValue, LinkedField } from \"relay-compiler\";\nimport { IRTransform } from \"relay-compiler/lib/core/CompilerContext\";\nimport { visit } from \"relay-compiler/lib/core/IRVisitor\";\n\n// TODO: Add typings for this\nconst SchemaUtils = require(\"relay-compiler/lib/core/SchemaUtils\");\n\n/**\n * Finds connection client-handles that relay-compiler emits and replaces\n * them with a version of the `@connection` directive that Apollo Client uses;\n * which is identical to relay's version, except the `filters` parameter is\n * named `filter` (singular).\n *\n * @param wrappedConnectionTransform\n * relay-compiler's connection client-handle transform\n */\nexport function emitApolloClientConnectionTransform(\n
|
|
5
|
-
"mappings": ";;;;;;;;;AAGA,SAAS,aAAa;AAGtB,IAAM,cAAc,UAAQ,qCAAqC;
|
|
4
|
+
"sourcesContent": ["import invariant from \"invariant\";\nimport { Argument, ArgumentValue, LinkedField } from \"relay-compiler\";\nimport { IRTransform } from \"relay-compiler/lib/core/CompilerContext\";\nimport { visit } from \"relay-compiler/lib/core/IRVisitor\";\n\n// TODO: Add typings for this\nconst SchemaUtils = require(\"relay-compiler/lib/core/SchemaUtils\");\n\ntype Args = {\n renameFiltersArgument: boolean;\n};\n\n/**\n * Finds connection client-handles that relay-compiler emits and replaces\n * them with a version of the `@connection` directive that Apollo Client uses;\n * which is identical to relay's version, except the `filters` parameter is\n * named `filter` (singular).\n *\n * @param wrappedConnectionTransform\n * relay-compiler's connection client-handle transform\n */\nexport function emitApolloClientConnectionTransform({\n renameFiltersArgument,\n}: Args): (wrapped: IRTransform) => IRTransform {\n return (wrappedConnectionTransform: IRTransform) => {\n const connectionTransformWrapper: IRTransform = (context) => {\n const schema = context.getSchema();\n let nextContext = wrappedConnectionTransform(context);\n\n // Replaces the field handle created by the wrapped connection transform\n // with the @connection directive that Apollo Client expects\n nextContext.forEachDocument((document) => {\n const nextDocument = visit(document, {\n LinkedField(linkedFieldNode) {\n const connectionHandle = linkedFieldNode.handles?.find(\n (handle) => handle.name === \"connection\",\n );\n if (connectionHandle) {\n const args: Argument[] = [\n {\n kind: \"Argument\",\n name: \"key\",\n type: SchemaUtils.getNonNullStringInput(schema),\n value: {\n kind: \"Literal\",\n value: connectionHandle.key,\n loc: { kind: \"Generated\" },\n },\n loc: { kind: \"Generated\" },\n metadata: undefined,\n },\n ];\n if (connectionHandle.filters) {\n args.push({\n kind: \"Argument\",\n name: renameFiltersArgument ? \"filter\" : \"filters\",\n type: schema.assertInputType(\n schema.expectTypeFromString(\"[String!]\"),\n ),\n value: {\n kind: \"ListValue\",\n items: connectionHandle.filters.map<ArgumentValue>(\n (filter) => ({\n kind: \"Literal\",\n value: filter,\n loc: { kind: \"Generated\" },\n }),\n ),\n loc: { kind: \"Generated\" },\n metadata: undefined,\n },\n loc: { kind: \"Generated\" },\n metadata: undefined,\n });\n }\n const nextLinkedFieldNode: LinkedField = {\n ...linkedFieldNode,\n handles: linkedFieldNode.handles?.filter(\n (handle) => handle.name !== \"connection\",\n ),\n directives: [\n ...linkedFieldNode.directives,\n {\n kind: \"Directive\",\n name: \"connection\",\n args,\n loc: { kind: \"Generated\" },\n metadata: undefined,\n },\n ],\n };\n return nextLinkedFieldNode;\n }\n },\n });\n nextContext = nextContext.replace(nextDocument);\n });\n\n return nextContext;\n };\n return connectionTransformWrapper;\n };\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;AAGA,SAAS,aAAa;AAGtB,IAAM,cAAc,UAAQ,qCAAqC;AAe1D,SAAS,oCAAoC;AAAA,EAClD;AACF,GAAgD;AAC9C,SAAO,CAAC,+BAA4C;AAClD,UAAM,6BAA0C,CAAC,YAAY;AAC3D,YAAM,SAAS,QAAQ,UAAU;AACjC,UAAI,cAAc,2BAA2B,OAAO;AAIpD,kBAAY,gBAAgB,CAAC,aAAa;AACxC,cAAM,eAAe,MAAM,UAAU;AAAA,UACnC,YAAY,iBAAiB;AAjCvC;AAkCY,kBAAM,oBAAmB,qBAAgB,YAAhB,mBAAyB;AAAA,cAChD,CAAC,WAAW,OAAO,SAAS;AAAA;AAE9B,gBAAI,kBAAkB;AACpB,oBAAM,OAAmB;AAAA,gBACvB;AAAA,kBACE,MAAM;AAAA,kBACN,MAAM;AAAA,kBACN,MAAM,YAAY,sBAAsB,MAAM;AAAA,kBAC9C,OAAO;AAAA,oBACL,MAAM;AAAA,oBACN,OAAO,iBAAiB;AAAA,oBACxB,KAAK,EAAE,MAAM,YAAY;AAAA,kBAC3B;AAAA,kBACA,KAAK,EAAE,MAAM,YAAY;AAAA,kBACzB,UAAU;AAAA,gBACZ;AAAA,cACF;AACA,kBAAI,iBAAiB,SAAS;AAC5B,qBAAK,KAAK;AAAA,kBACR,MAAM;AAAA,kBACN,MAAM,wBAAwB,WAAW;AAAA,kBACzC,MAAM,OAAO;AAAA,oBACX,OAAO,qBAAqB,WAAW;AAAA,kBACzC;AAAA,kBACA,OAAO;AAAA,oBACL,MAAM;AAAA,oBACN,OAAO,iBAAiB,QAAQ;AAAA,sBAC9B,CAAC,YAAY;AAAA,wBACX,MAAM;AAAA,wBACN,OAAO;AAAA,wBACP,KAAK,EAAE,MAAM,YAAY;AAAA,sBAC3B;AAAA,oBACF;AAAA,oBACA,KAAK,EAAE,MAAM,YAAY;AAAA,oBACzB,UAAU;AAAA,kBACZ;AAAA,kBACA,KAAK,EAAE,MAAM,YAAY;AAAA,kBACzB,UAAU;AAAA,gBACZ,CAAC;AAAA,cACH;AACA,oBAAM,sBAAmC;AAAA,gBACvC,GAAG;AAAA,gBACH,UAAS,qBAAgB,YAAhB,mBAAyB;AAAA,kBAChC,CAAC,WAAW,OAAO,SAAS;AAAA;AAAA,gBAE9B,YAAY;AAAA,kBACV,GAAG,gBAAgB;AAAA,kBACnB;AAAA,oBACE,MAAM;AAAA,oBACN,MAAM;AAAA,oBACN;AAAA,oBACA,KAAK,EAAE,MAAM,YAAY;AAAA,oBACzB,UAAU;AAAA,kBACZ;AAAA,gBACF;AAAA,cACF;AACA,qBAAO;AAAA,YACT;AAAA,UACF;AAAA,QACF,CAAC;AACD,sBAAc,YAAY,QAAQ,YAAY;AAAA,MAChD,CAAC;AAED,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -173,10 +173,12 @@ function extractFilterVariableDefaults(connectionDirective, fieldArguments, vari
|
|
|
173
173
|
"Expected connection directive to have arguments"
|
|
174
174
|
);
|
|
175
175
|
const filterVariableDefaults = /* @__PURE__ */ new Map();
|
|
176
|
-
const
|
|
176
|
+
const filters = connectionDirective.arguments.find(
|
|
177
|
+
(arg) => arg.name.value === "filter" || arg.name.value === "filters"
|
|
178
|
+
);
|
|
177
179
|
if (filters) {
|
|
178
180
|
(0, import_invariant.default)(
|
|
179
|
-
filters.
|
|
181
|
+
filters.value.kind === "ListValue",
|
|
180
182
|
"Expected filters argument to be a list of field arguments"
|
|
181
183
|
);
|
|
182
184
|
const fieldArgumentNames = filters.value.values.map((value) => {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/formatModuleTransforms/extractMetadataTransform.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n ArgumentNode,\n DocumentNode,\n FieldNode,\n FragmentDefinitionNode,\n FragmentSpreadNode,\n OperationDefinitionNode,\n ValueNode,\n parseValue,\n visit,\n valueFromAST,\n valueFromASTUntyped,\n DirectiveNode,\n} from \"graphql\";\nimport invariant from \"invariant\";\n\ninterface ConnectionMetadata {\n forwardCountVariable?: string;\n forwardCursorVariable?: string;\n backwardCountVariable?: string;\n backwardCursorVariable?: string;\n filterVariableDefaults?: Record<string, any>;\n selectionPath: string[];\n}\nexport interface Metadata {\n rootSelection?: string;\n mainFragment?: {\n name: string;\n typeCondition: string;\n };\n connection?: ConnectionMetadata;\n}\n\n/**\n * This transform extracts metadata needed at runtime for the `use*Fragment`\n * hooks to do their work efficiently. This includes:\n *\n * - Whether or not the observed data starts at the root of the operation or at\n * the `node` root-field.\n * - The name and type-condition of the fragment.\n * - Connection metadata such as location of the connection inside the fragment\n * and the names of the various connection variables.\n *\n * @param document The watch query document\n * @returns The metadata needed at runtime\n */\nexport function extractMetadataTransform(\n document: DocumentNode,\n): Metadata | undefined {\n const metadata: Metadata = {};\n const nodeFieldSelection = extractNodeFieldSelection(document);\n if (nodeFieldSelection) {\n metadata.rootSelection = \"node\";\n }\n const mainFragment = getMainFragmentMetadata(\n document,\n nodeFieldSelection?.name.value,\n );\n if (mainFragment) {\n metadata.mainFragment = mainFragment;\n }\n const connectionMetadata = extractConnectionMetadataTransform(document);\n if (connectionMetadata) {\n metadata.connection = connectionMetadata;\n }\n return Object.keys(metadata).length > 0 ? metadata : undefined;\n}\n\nfunction getMainFragmentMetadata(\n document: DocumentNode,\n rootSelection: string | undefined,\n):\n | {\n name: string;\n typeCondition: string;\n }\n | undefined {\n const [operationDefinition, ...fragmentDefinitions] =\n document.definitions as [\n OperationDefinitionNode,\n ...FragmentDefinitionNode[],\n ];\n invariant(\n operationDefinition.kind === \"OperationDefinition\" &&\n fragmentDefinitions.every((node) => node.kind === \"FragmentDefinition\"),\n \"Expected definition nodes in specific order\",\n );\n if (fragmentDefinitions.length === 0) {\n return undefined;\n }\n let selectionSet = operationDefinition.selectionSet;\n if (rootSelection) {\n const field = selectionSet.selections.find(\n (selection) =>\n selection.kind === \"Field\" && selection.name.value === rootSelection,\n ) as FieldNode | undefined;\n invariant(\n field?.selectionSet,\n \"Expected root selection to exist in document\",\n );\n selectionSet = field.selectionSet;\n }\n const mainFragmentSpread = selectionSet.selections.find(\n (selection) => selection.kind === \"FragmentSpread\",\n ) as FragmentSpreadNode | undefined;\n if (!mainFragmentSpread) {\n return undefined;\n }\n const mainFragment = fragmentDefinitions.find(\n (fragment) => fragment.name.value === mainFragmentSpread.name.value,\n );\n invariant(mainFragment, \"Expected a main fragment\");\n return {\n name: mainFragment.name.value,\n typeCondition: mainFragment.typeCondition.name.value,\n };\n}\n\nfunction extractNodeFieldSelection(document: DocumentNode) {\n const operationDefinition = document.definitions.find(\n (def) => def.kind === \"OperationDefinition\",\n ) as OperationDefinitionNode | undefined;\n invariant(operationDefinition, \"Expected an operation\");\n const nodeFieldSelection = operationDefinition.selectionSet.selections.find(\n (selection) =>\n selection.kind === \"Field\" && selection.name.value === \"node\",\n ) as FieldNode | undefined;\n return nodeFieldSelection;\n}\n\nfunction extractConnectionMetadataTransform(\n document: DocumentNode,\n): ConnectionMetadata | undefined {\n let foundConnection = false;\n const metadata: ConnectionMetadata = { selectionPath: [] };\n const variableDefaults = new Map<string, ValueNode | undefined>();\n visit(document, {\n VariableDefinition: {\n enter(variableNode) {\n variableDefaults.set(\n variableNode.variable.name.value,\n variableNode.defaultValue,\n );\n },\n },\n Field: {\n enter(fieldNode) {\n if (!foundConnection) {\n metadata.selectionPath.push(fieldNode.name.value);\n }\n const connectionDirective = fieldNode.directives?.find(\n (directive) => directive.name.value === \"connection\",\n );\n if (connectionDirective) {\n invariant(\n !foundConnection,\n \"Expected to find a single connection in one document\",\n );\n foundConnection = true;\n\n const fieldArguments = new Map(\n fieldNode.arguments?.map((arg) => [arg.name.value, arg]),\n );\n\n metadata.forwardCountVariable = getVariableValue(\n fieldArguments.get(\"first\"),\n );\n metadata.forwardCursorVariable = getVariableValue(\n fieldArguments.get(\"after\"),\n );\n metadata.backwardCountVariable = getVariableValue(\n fieldArguments.get(\"last\"),\n );\n metadata.backwardCursorVariable = getVariableValue(\n fieldArguments.get(\"before\"),\n );\n\n metadata.filterVariableDefaults = extractFilterVariableDefaults(\n connectionDirective,\n fieldArguments,\n variableDefaults,\n );\n }\n },\n leave() {\n if (!foundConnection) {\n metadata.selectionPath.pop();\n }\n },\n },\n });\n if (foundConnection) {\n invariant(\n (metadata.forwardCountVariable && metadata.forwardCursorVariable) ||\n (metadata.backwardCountVariable && metadata.backwardCursorVariable),\n \"Expected correct count and cursor variables combinations\",\n );\n return metadata;\n } else {\n return undefined;\n }\n}\n\nfunction getVariableValue(arg: ArgumentNode | undefined) {\n return arg && arg.value.kind === \"Variable\"\n ? arg.value.name.value\n : undefined;\n}\n\nfunction extractFilterVariableDefaults(\n connectionDirective: DirectiveNode,\n fieldArguments: Map<string, ArgumentNode>,\n variableDefaults: Map<string, ValueNode | undefined>,\n) {\n invariant(\n connectionDirective.arguments !== undefined,\n \"Expected connection directive to have arguments\",\n );\n const filterVariableDefaults = new Map<string, any>();\n const
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["import {\n ArgumentNode,\n DocumentNode,\n FieldNode,\n FragmentDefinitionNode,\n FragmentSpreadNode,\n OperationDefinitionNode,\n ValueNode,\n parseValue,\n visit,\n valueFromAST,\n valueFromASTUntyped,\n DirectiveNode,\n} from \"graphql\";\nimport invariant from \"invariant\";\n\ninterface ConnectionMetadata {\n forwardCountVariable?: string;\n forwardCursorVariable?: string;\n backwardCountVariable?: string;\n backwardCursorVariable?: string;\n filterVariableDefaults?: Record<string, any>;\n selectionPath: string[];\n}\nexport interface Metadata {\n rootSelection?: string;\n mainFragment?: {\n name: string;\n typeCondition: string;\n };\n connection?: ConnectionMetadata;\n}\n\n/**\n * This transform extracts metadata needed at runtime for the `use*Fragment`\n * hooks to do their work efficiently. This includes:\n *\n * - Whether or not the observed data starts at the root of the operation or at\n * the `node` root-field.\n * - The name and type-condition of the fragment.\n * - Connection metadata such as location of the connection inside the fragment\n * and the names of the various connection variables.\n *\n * @param document The watch query document\n * @returns The metadata needed at runtime\n */\nexport function extractMetadataTransform(\n document: DocumentNode,\n): Metadata | undefined {\n const metadata: Metadata = {};\n const nodeFieldSelection = extractNodeFieldSelection(document);\n if (nodeFieldSelection) {\n metadata.rootSelection = \"node\";\n }\n const mainFragment = getMainFragmentMetadata(\n document,\n nodeFieldSelection?.name.value,\n );\n if (mainFragment) {\n metadata.mainFragment = mainFragment;\n }\n const connectionMetadata = extractConnectionMetadataTransform(document);\n if (connectionMetadata) {\n metadata.connection = connectionMetadata;\n }\n return Object.keys(metadata).length > 0 ? metadata : undefined;\n}\n\nfunction getMainFragmentMetadata(\n document: DocumentNode,\n rootSelection: string | undefined,\n):\n | {\n name: string;\n typeCondition: string;\n }\n | undefined {\n const [operationDefinition, ...fragmentDefinitions] =\n document.definitions as [\n OperationDefinitionNode,\n ...FragmentDefinitionNode[],\n ];\n invariant(\n operationDefinition.kind === \"OperationDefinition\" &&\n fragmentDefinitions.every((node) => node.kind === \"FragmentDefinition\"),\n \"Expected definition nodes in specific order\",\n );\n if (fragmentDefinitions.length === 0) {\n return undefined;\n }\n let selectionSet = operationDefinition.selectionSet;\n if (rootSelection) {\n const field = selectionSet.selections.find(\n (selection) =>\n selection.kind === \"Field\" && selection.name.value === rootSelection,\n ) as FieldNode | undefined;\n invariant(\n field?.selectionSet,\n \"Expected root selection to exist in document\",\n );\n selectionSet = field.selectionSet;\n }\n const mainFragmentSpread = selectionSet.selections.find(\n (selection) => selection.kind === \"FragmentSpread\",\n ) as FragmentSpreadNode | undefined;\n if (!mainFragmentSpread) {\n return undefined;\n }\n const mainFragment = fragmentDefinitions.find(\n (fragment) => fragment.name.value === mainFragmentSpread.name.value,\n );\n invariant(mainFragment, \"Expected a main fragment\");\n return {\n name: mainFragment.name.value,\n typeCondition: mainFragment.typeCondition.name.value,\n };\n}\n\nfunction extractNodeFieldSelection(document: DocumentNode) {\n const operationDefinition = document.definitions.find(\n (def) => def.kind === \"OperationDefinition\",\n ) as OperationDefinitionNode | undefined;\n invariant(operationDefinition, \"Expected an operation\");\n const nodeFieldSelection = operationDefinition.selectionSet.selections.find(\n (selection) =>\n selection.kind === \"Field\" && selection.name.value === \"node\",\n ) as FieldNode | undefined;\n return nodeFieldSelection;\n}\n\nfunction extractConnectionMetadataTransform(\n document: DocumentNode,\n): ConnectionMetadata | undefined {\n let foundConnection = false;\n const metadata: ConnectionMetadata = { selectionPath: [] };\n const variableDefaults = new Map<string, ValueNode | undefined>();\n visit(document, {\n VariableDefinition: {\n enter(variableNode) {\n variableDefaults.set(\n variableNode.variable.name.value,\n variableNode.defaultValue,\n );\n },\n },\n Field: {\n enter(fieldNode) {\n if (!foundConnection) {\n metadata.selectionPath.push(fieldNode.name.value);\n }\n const connectionDirective = fieldNode.directives?.find(\n (directive) => directive.name.value === \"connection\",\n );\n if (connectionDirective) {\n invariant(\n !foundConnection,\n \"Expected to find a single connection in one document\",\n );\n foundConnection = true;\n\n const fieldArguments = new Map(\n fieldNode.arguments?.map((arg) => [arg.name.value, arg]),\n );\n\n metadata.forwardCountVariable = getVariableValue(\n fieldArguments.get(\"first\"),\n );\n metadata.forwardCursorVariable = getVariableValue(\n fieldArguments.get(\"after\"),\n );\n metadata.backwardCountVariable = getVariableValue(\n fieldArguments.get(\"last\"),\n );\n metadata.backwardCursorVariable = getVariableValue(\n fieldArguments.get(\"before\"),\n );\n\n metadata.filterVariableDefaults = extractFilterVariableDefaults(\n connectionDirective,\n fieldArguments,\n variableDefaults,\n );\n }\n },\n leave() {\n if (!foundConnection) {\n metadata.selectionPath.pop();\n }\n },\n },\n });\n if (foundConnection) {\n invariant(\n (metadata.forwardCountVariable && metadata.forwardCursorVariable) ||\n (metadata.backwardCountVariable && metadata.backwardCursorVariable),\n \"Expected correct count and cursor variables combinations\",\n );\n return metadata;\n } else {\n return undefined;\n }\n}\n\nfunction getVariableValue(arg: ArgumentNode | undefined) {\n return arg && arg.value.kind === \"Variable\"\n ? arg.value.name.value\n : undefined;\n}\n\nfunction extractFilterVariableDefaults(\n connectionDirective: DirectiveNode,\n fieldArguments: Map<string, ArgumentNode>,\n variableDefaults: Map<string, ValueNode | undefined>,\n) {\n invariant(\n connectionDirective.arguments !== undefined,\n \"Expected connection directive to have arguments\",\n );\n const filterVariableDefaults = new Map<string, any>();\n const filters = connectionDirective.arguments.find(\n (arg) => arg.name.value === \"filter\" || arg.name.value === \"filters\",\n );\n if (filters) {\n invariant(\n filters.value.kind === \"ListValue\",\n \"Expected filters argument to be a list of field arguments\",\n );\n const fieldArgumentNames = filters.value.values.map((value) => {\n invariant(\n value.kind === \"StringValue\",\n \"Expected field argument to be a string\",\n );\n return value.value;\n });\n fieldArgumentNames.forEach((name) => {\n const arg = fieldArguments.get(name);\n invariant(\n arg !== undefined,\n \"Expected filter name to refer to a field argument\",\n );\n const variable = getVariableValue(arg);\n if (variable) {\n const defaultValue = variableDefaults.get(variable);\n if (defaultValue) {\n filterVariableDefaults.set(variable, {\n ...valueFromASTUntyped(defaultValue),\n });\n }\n }\n });\n }\n return filterVariableDefaults.size > 0\n ? Object.fromEntries(filterVariableDefaults)\n : undefined;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["invariant"]
|
|
7
7
|
}
|
|
@@ -144,10 +144,12 @@ function extractFilterVariableDefaults(connectionDirective, fieldArguments, vari
|
|
|
144
144
|
"Expected connection directive to have arguments"
|
|
145
145
|
);
|
|
146
146
|
const filterVariableDefaults = /* @__PURE__ */ new Map();
|
|
147
|
-
const
|
|
147
|
+
const filters = connectionDirective.arguments.find(
|
|
148
|
+
(arg) => arg.name.value === "filter" || arg.name.value === "filters"
|
|
149
|
+
);
|
|
148
150
|
if (filters) {
|
|
149
151
|
invariant(
|
|
150
|
-
filters.
|
|
152
|
+
filters.value.kind === "ListValue",
|
|
151
153
|
"Expected filters argument to be a list of field arguments"
|
|
152
154
|
);
|
|
153
155
|
const fieldArgumentNames = filters.value.values.map((value) => {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/formatModuleTransforms/extractMetadataTransform.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n ArgumentNode,\n DocumentNode,\n FieldNode,\n FragmentDefinitionNode,\n FragmentSpreadNode,\n OperationDefinitionNode,\n ValueNode,\n parseValue,\n visit,\n valueFromAST,\n valueFromASTUntyped,\n DirectiveNode,\n} from \"graphql\";\nimport invariant from \"invariant\";\n\ninterface ConnectionMetadata {\n forwardCountVariable?: string;\n forwardCursorVariable?: string;\n backwardCountVariable?: string;\n backwardCursorVariable?: string;\n filterVariableDefaults?: Record<string, any>;\n selectionPath: string[];\n}\nexport interface Metadata {\n rootSelection?: string;\n mainFragment?: {\n name: string;\n typeCondition: string;\n };\n connection?: ConnectionMetadata;\n}\n\n/**\n * This transform extracts metadata needed at runtime for the `use*Fragment`\n * hooks to do their work efficiently. This includes:\n *\n * - Whether or not the observed data starts at the root of the operation or at\n * the `node` root-field.\n * - The name and type-condition of the fragment.\n * - Connection metadata such as location of the connection inside the fragment\n * and the names of the various connection variables.\n *\n * @param document The watch query document\n * @returns The metadata needed at runtime\n */\nexport function extractMetadataTransform(\n document: DocumentNode,\n): Metadata | undefined {\n const metadata: Metadata = {};\n const nodeFieldSelection = extractNodeFieldSelection(document);\n if (nodeFieldSelection) {\n metadata.rootSelection = \"node\";\n }\n const mainFragment = getMainFragmentMetadata(\n document,\n nodeFieldSelection?.name.value,\n );\n if (mainFragment) {\n metadata.mainFragment = mainFragment;\n }\n const connectionMetadata = extractConnectionMetadataTransform(document);\n if (connectionMetadata) {\n metadata.connection = connectionMetadata;\n }\n return Object.keys(metadata).length > 0 ? metadata : undefined;\n}\n\nfunction getMainFragmentMetadata(\n document: DocumentNode,\n rootSelection: string | undefined,\n):\n | {\n name: string;\n typeCondition: string;\n }\n | undefined {\n const [operationDefinition, ...fragmentDefinitions] =\n document.definitions as [\n OperationDefinitionNode,\n ...FragmentDefinitionNode[],\n ];\n invariant(\n operationDefinition.kind === \"OperationDefinition\" &&\n fragmentDefinitions.every((node) => node.kind === \"FragmentDefinition\"),\n \"Expected definition nodes in specific order\",\n );\n if (fragmentDefinitions.length === 0) {\n return undefined;\n }\n let selectionSet = operationDefinition.selectionSet;\n if (rootSelection) {\n const field = selectionSet.selections.find(\n (selection) =>\n selection.kind === \"Field\" && selection.name.value === rootSelection,\n ) as FieldNode | undefined;\n invariant(\n field?.selectionSet,\n \"Expected root selection to exist in document\",\n );\n selectionSet = field.selectionSet;\n }\n const mainFragmentSpread = selectionSet.selections.find(\n (selection) => selection.kind === \"FragmentSpread\",\n ) as FragmentSpreadNode | undefined;\n if (!mainFragmentSpread) {\n return undefined;\n }\n const mainFragment = fragmentDefinitions.find(\n (fragment) => fragment.name.value === mainFragmentSpread.name.value,\n );\n invariant(mainFragment, \"Expected a main fragment\");\n return {\n name: mainFragment.name.value,\n typeCondition: mainFragment.typeCondition.name.value,\n };\n}\n\nfunction extractNodeFieldSelection(document: DocumentNode) {\n const operationDefinition = document.definitions.find(\n (def) => def.kind === \"OperationDefinition\",\n ) as OperationDefinitionNode | undefined;\n invariant(operationDefinition, \"Expected an operation\");\n const nodeFieldSelection = operationDefinition.selectionSet.selections.find(\n (selection) =>\n selection.kind === \"Field\" && selection.name.value === \"node\",\n ) as FieldNode | undefined;\n return nodeFieldSelection;\n}\n\nfunction extractConnectionMetadataTransform(\n document: DocumentNode,\n): ConnectionMetadata | undefined {\n let foundConnection = false;\n const metadata: ConnectionMetadata = { selectionPath: [] };\n const variableDefaults = new Map<string, ValueNode | undefined>();\n visit(document, {\n VariableDefinition: {\n enter(variableNode) {\n variableDefaults.set(\n variableNode.variable.name.value,\n variableNode.defaultValue,\n );\n },\n },\n Field: {\n enter(fieldNode) {\n if (!foundConnection) {\n metadata.selectionPath.push(fieldNode.name.value);\n }\n const connectionDirective = fieldNode.directives?.find(\n (directive) => directive.name.value === \"connection\",\n );\n if (connectionDirective) {\n invariant(\n !foundConnection,\n \"Expected to find a single connection in one document\",\n );\n foundConnection = true;\n\n const fieldArguments = new Map(\n fieldNode.arguments?.map((arg) => [arg.name.value, arg]),\n );\n\n metadata.forwardCountVariable = getVariableValue(\n fieldArguments.get(\"first\"),\n );\n metadata.forwardCursorVariable = getVariableValue(\n fieldArguments.get(\"after\"),\n );\n metadata.backwardCountVariable = getVariableValue(\n fieldArguments.get(\"last\"),\n );\n metadata.backwardCursorVariable = getVariableValue(\n fieldArguments.get(\"before\"),\n );\n\n metadata.filterVariableDefaults = extractFilterVariableDefaults(\n connectionDirective,\n fieldArguments,\n variableDefaults,\n );\n }\n },\n leave() {\n if (!foundConnection) {\n metadata.selectionPath.pop();\n }\n },\n },\n });\n if (foundConnection) {\n invariant(\n (metadata.forwardCountVariable && metadata.forwardCursorVariable) ||\n (metadata.backwardCountVariable && metadata.backwardCursorVariable),\n \"Expected correct count and cursor variables combinations\",\n );\n return metadata;\n } else {\n return undefined;\n }\n}\n\nfunction getVariableValue(arg: ArgumentNode | undefined) {\n return arg && arg.value.kind === \"Variable\"\n ? arg.value.name.value\n : undefined;\n}\n\nfunction extractFilterVariableDefaults(\n connectionDirective: DirectiveNode,\n fieldArguments: Map<string, ArgumentNode>,\n variableDefaults: Map<string, ValueNode | undefined>,\n) {\n invariant(\n connectionDirective.arguments !== undefined,\n \"Expected connection directive to have arguments\",\n );\n const filterVariableDefaults = new Map<string, any>();\n const
|
|
5
|
-
"mappings": ";AAAA;AAAA,EASE;AAAA,EAEA;AAAA,OAEK;AACP,OAAO,eAAe;AAgCf,SAAS,yBACd,UACsB;AACtB,QAAM,WAAqB,CAAC;AAC5B,QAAM,qBAAqB,0BAA0B,QAAQ;AAC7D,MAAI,oBAAoB;AACtB,aAAS,gBAAgB;AAAA,EAC3B;AACA,QAAM,eAAe;AAAA,IACnB;AAAA,IACA,yDAAoB,KAAK;AAAA,EAC3B;AACA,MAAI,cAAc;AAChB,aAAS,eAAe;AAAA,EAC1B;AACA,QAAM,qBAAqB,mCAAmC,QAAQ;AACtE,MAAI,oBAAoB;AACtB,aAAS,aAAa;AAAA,EACxB;AACA,SAAO,OAAO,KAAK,QAAQ,EAAE,SAAS,IAAI,WAAW;AACvD;AAEA,SAAS,wBACP,UACA,eAMY;AACZ,QAAM,CAAC,qBAAqB,GAAG,mBAAmB,IAChD,SAAS;AAIX;AAAA,IACE,oBAAoB,SAAS,yBAC3B,oBAAoB,MAAM,CAAC,SAAS,KAAK,SAAS,oBAAoB;AAAA,IACxE;AAAA,EACF;AACA,MAAI,oBAAoB,WAAW,GAAG;AACpC,WAAO;AAAA,EACT;AACA,MAAI,eAAe,oBAAoB;AACvC,MAAI,eAAe;AACjB,UAAM,QAAQ,aAAa,WAAW;AAAA,MACpC,CAAC,cACC,UAAU,SAAS,WAAW,UAAU,KAAK,UAAU;AAAA,IAC3D;AACA;AAAA,MACE,+BAAO;AAAA,MACP;AAAA,IACF;AACA,mBAAe,MAAM;AAAA,EACvB;AACA,QAAM,qBAAqB,aAAa,WAAW;AAAA,IACjD,CAAC,cAAc,UAAU,SAAS;AAAA,EACpC;AACA,MAAI,CAAC,oBAAoB;AACvB,WAAO;AAAA,EACT;AACA,QAAM,eAAe,oBAAoB;AAAA,IACvC,CAAC,aAAa,SAAS,KAAK,UAAU,mBAAmB,KAAK;AAAA,EAChE;AACA,YAAU,cAAc,0BAA0B;AAClD,SAAO;AAAA,IACL,MAAM,aAAa,KAAK;AAAA,IACxB,eAAe,aAAa,cAAc,KAAK;AAAA,EACjD;AACF;AAEA,SAAS,0BAA0B,UAAwB;AACzD,QAAM,sBAAsB,SAAS,YAAY;AAAA,IAC/C,CAAC,QAAQ,IAAI,SAAS;AAAA,EACxB;AACA,YAAU,qBAAqB,uBAAuB;AACtD,QAAM,qBAAqB,oBAAoB,aAAa,WAAW;AAAA,IACrE,CAAC,cACC,UAAU,SAAS,WAAW,UAAU,KAAK,UAAU;AAAA,EAC3D;AACA,SAAO;AACT;AAEA,SAAS,mCACP,UACgC;AAChC,MAAI,kBAAkB;AACtB,QAAM,WAA+B,EAAE,eAAe,CAAC,EAAE;AACzD,QAAM,mBAAmB,oBAAI,IAAmC;AAChE,QAAM,UAAU;AAAA,IACd,oBAAoB;AAAA,MAClB,MAAM,cAAc;AAClB,yBAAiB;AAAA,UACf,aAAa,SAAS,KAAK;AAAA,UAC3B,aAAa;AAAA,QACf;AAAA,MACF;AAAA,IACF;AAAA,IACA,OAAO;AAAA,MACL,MAAM,WAAW;AAlJvB;AAmJQ,YAAI,CAAC,iBAAiB;AACpB,mBAAS,cAAc,KAAK,UAAU,KAAK,KAAK;AAAA,QAClD;AACA,cAAM,uBAAsB,eAAU,eAAV,mBAAsB;AAAA,UAChD,CAAC,cAAc,UAAU,KAAK,UAAU;AAAA;AAE1C,YAAI,qBAAqB;AACvB;AAAA,YACE,CAAC;AAAA,YACD;AAAA,UACF;AACA,4BAAkB;AAElB,gBAAM,iBAAiB,IAAI;AAAA,aACzB,eAAU,cAAV,mBAAqB,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,OAAO,GAAG;AAAA,UACxD;AAEA,mBAAS,uBAAuB;AAAA,YAC9B,eAAe,IAAI,OAAO;AAAA,UAC5B;AACA,mBAAS,wBAAwB;AAAA,YAC/B,eAAe,IAAI,OAAO;AAAA,UAC5B;AACA,mBAAS,wBAAwB;AAAA,YAC/B,eAAe,IAAI,MAAM;AAAA,UAC3B;AACA,mBAAS,yBAAyB;AAAA,YAChC,eAAe,IAAI,QAAQ;AAAA,UAC7B;AAEA,mBAAS,yBAAyB;AAAA,YAChC;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MACA,QAAQ;AACN,YAAI,CAAC,iBAAiB;AACpB,mBAAS,cAAc,IAAI;AAAA,QAC7B;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AACD,MAAI,iBAAiB;AACnB;AAAA,MACG,SAAS,wBAAwB,SAAS,yBACxC,SAAS,yBAAyB,SAAS;AAAA,MAC9C;AAAA,IACF;AACA,WAAO;AAAA,EACT,OAAO;AACL,WAAO;AAAA,EACT;AACF;AAEA,SAAS,iBAAiB,KAA+B;AACvD,SAAO,OAAO,IAAI,MAAM,SAAS,aAC7B,IAAI,MAAM,KAAK,QACf;AACN;AAEA,SAAS,8BACP,qBACA,gBACA,kBACA;AACA;AAAA,IACE,oBAAoB,cAAc;AAAA,IAClC;AAAA,EACF;AACA,QAAM,yBAAyB,oBAAI,IAAiB;AACpD,QAAM,CAAC,
|
|
4
|
+
"sourcesContent": ["import {\n ArgumentNode,\n DocumentNode,\n FieldNode,\n FragmentDefinitionNode,\n FragmentSpreadNode,\n OperationDefinitionNode,\n ValueNode,\n parseValue,\n visit,\n valueFromAST,\n valueFromASTUntyped,\n DirectiveNode,\n} from \"graphql\";\nimport invariant from \"invariant\";\n\ninterface ConnectionMetadata {\n forwardCountVariable?: string;\n forwardCursorVariable?: string;\n backwardCountVariable?: string;\n backwardCursorVariable?: string;\n filterVariableDefaults?: Record<string, any>;\n selectionPath: string[];\n}\nexport interface Metadata {\n rootSelection?: string;\n mainFragment?: {\n name: string;\n typeCondition: string;\n };\n connection?: ConnectionMetadata;\n}\n\n/**\n * This transform extracts metadata needed at runtime for the `use*Fragment`\n * hooks to do their work efficiently. This includes:\n *\n * - Whether or not the observed data starts at the root of the operation or at\n * the `node` root-field.\n * - The name and type-condition of the fragment.\n * - Connection metadata such as location of the connection inside the fragment\n * and the names of the various connection variables.\n *\n * @param document The watch query document\n * @returns The metadata needed at runtime\n */\nexport function extractMetadataTransform(\n document: DocumentNode,\n): Metadata | undefined {\n const metadata: Metadata = {};\n const nodeFieldSelection = extractNodeFieldSelection(document);\n if (nodeFieldSelection) {\n metadata.rootSelection = \"node\";\n }\n const mainFragment = getMainFragmentMetadata(\n document,\n nodeFieldSelection?.name.value,\n );\n if (mainFragment) {\n metadata.mainFragment = mainFragment;\n }\n const connectionMetadata = extractConnectionMetadataTransform(document);\n if (connectionMetadata) {\n metadata.connection = connectionMetadata;\n }\n return Object.keys(metadata).length > 0 ? metadata : undefined;\n}\n\nfunction getMainFragmentMetadata(\n document: DocumentNode,\n rootSelection: string | undefined,\n):\n | {\n name: string;\n typeCondition: string;\n }\n | undefined {\n const [operationDefinition, ...fragmentDefinitions] =\n document.definitions as [\n OperationDefinitionNode,\n ...FragmentDefinitionNode[],\n ];\n invariant(\n operationDefinition.kind === \"OperationDefinition\" &&\n fragmentDefinitions.every((node) => node.kind === \"FragmentDefinition\"),\n \"Expected definition nodes in specific order\",\n );\n if (fragmentDefinitions.length === 0) {\n return undefined;\n }\n let selectionSet = operationDefinition.selectionSet;\n if (rootSelection) {\n const field = selectionSet.selections.find(\n (selection) =>\n selection.kind === \"Field\" && selection.name.value === rootSelection,\n ) as FieldNode | undefined;\n invariant(\n field?.selectionSet,\n \"Expected root selection to exist in document\",\n );\n selectionSet = field.selectionSet;\n }\n const mainFragmentSpread = selectionSet.selections.find(\n (selection) => selection.kind === \"FragmentSpread\",\n ) as FragmentSpreadNode | undefined;\n if (!mainFragmentSpread) {\n return undefined;\n }\n const mainFragment = fragmentDefinitions.find(\n (fragment) => fragment.name.value === mainFragmentSpread.name.value,\n );\n invariant(mainFragment, \"Expected a main fragment\");\n return {\n name: mainFragment.name.value,\n typeCondition: mainFragment.typeCondition.name.value,\n };\n}\n\nfunction extractNodeFieldSelection(document: DocumentNode) {\n const operationDefinition = document.definitions.find(\n (def) => def.kind === \"OperationDefinition\",\n ) as OperationDefinitionNode | undefined;\n invariant(operationDefinition, \"Expected an operation\");\n const nodeFieldSelection = operationDefinition.selectionSet.selections.find(\n (selection) =>\n selection.kind === \"Field\" && selection.name.value === \"node\",\n ) as FieldNode | undefined;\n return nodeFieldSelection;\n}\n\nfunction extractConnectionMetadataTransform(\n document: DocumentNode,\n): ConnectionMetadata | undefined {\n let foundConnection = false;\n const metadata: ConnectionMetadata = { selectionPath: [] };\n const variableDefaults = new Map<string, ValueNode | undefined>();\n visit(document, {\n VariableDefinition: {\n enter(variableNode) {\n variableDefaults.set(\n variableNode.variable.name.value,\n variableNode.defaultValue,\n );\n },\n },\n Field: {\n enter(fieldNode) {\n if (!foundConnection) {\n metadata.selectionPath.push(fieldNode.name.value);\n }\n const connectionDirective = fieldNode.directives?.find(\n (directive) => directive.name.value === \"connection\",\n );\n if (connectionDirective) {\n invariant(\n !foundConnection,\n \"Expected to find a single connection in one document\",\n );\n foundConnection = true;\n\n const fieldArguments = new Map(\n fieldNode.arguments?.map((arg) => [arg.name.value, arg]),\n );\n\n metadata.forwardCountVariable = getVariableValue(\n fieldArguments.get(\"first\"),\n );\n metadata.forwardCursorVariable = getVariableValue(\n fieldArguments.get(\"after\"),\n );\n metadata.backwardCountVariable = getVariableValue(\n fieldArguments.get(\"last\"),\n );\n metadata.backwardCursorVariable = getVariableValue(\n fieldArguments.get(\"before\"),\n );\n\n metadata.filterVariableDefaults = extractFilterVariableDefaults(\n connectionDirective,\n fieldArguments,\n variableDefaults,\n );\n }\n },\n leave() {\n if (!foundConnection) {\n metadata.selectionPath.pop();\n }\n },\n },\n });\n if (foundConnection) {\n invariant(\n (metadata.forwardCountVariable && metadata.forwardCursorVariable) ||\n (metadata.backwardCountVariable && metadata.backwardCursorVariable),\n \"Expected correct count and cursor variables combinations\",\n );\n return metadata;\n } else {\n return undefined;\n }\n}\n\nfunction getVariableValue(arg: ArgumentNode | undefined) {\n return arg && arg.value.kind === \"Variable\"\n ? arg.value.name.value\n : undefined;\n}\n\nfunction extractFilterVariableDefaults(\n connectionDirective: DirectiveNode,\n fieldArguments: Map<string, ArgumentNode>,\n variableDefaults: Map<string, ValueNode | undefined>,\n) {\n invariant(\n connectionDirective.arguments !== undefined,\n \"Expected connection directive to have arguments\",\n );\n const filterVariableDefaults = new Map<string, any>();\n const filters = connectionDirective.arguments.find(\n (arg) => arg.name.value === \"filter\" || arg.name.value === \"filters\",\n );\n if (filters) {\n invariant(\n filters.value.kind === \"ListValue\",\n \"Expected filters argument to be a list of field arguments\",\n );\n const fieldArgumentNames = filters.value.values.map((value) => {\n invariant(\n value.kind === \"StringValue\",\n \"Expected field argument to be a string\",\n );\n return value.value;\n });\n fieldArgumentNames.forEach((name) => {\n const arg = fieldArguments.get(name);\n invariant(\n arg !== undefined,\n \"Expected filter name to refer to a field argument\",\n );\n const variable = getVariableValue(arg);\n if (variable) {\n const defaultValue = variableDefaults.get(variable);\n if (defaultValue) {\n filterVariableDefaults.set(variable, {\n ...valueFromASTUntyped(defaultValue),\n });\n }\n }\n });\n }\n return filterVariableDefaults.size > 0\n ? Object.fromEntries(filterVariableDefaults)\n : undefined;\n}\n"],
|
|
5
|
+
"mappings": ";AAAA;AAAA,EASE;AAAA,EAEA;AAAA,OAEK;AACP,OAAO,eAAe;AAgCf,SAAS,yBACd,UACsB;AACtB,QAAM,WAAqB,CAAC;AAC5B,QAAM,qBAAqB,0BAA0B,QAAQ;AAC7D,MAAI,oBAAoB;AACtB,aAAS,gBAAgB;AAAA,EAC3B;AACA,QAAM,eAAe;AAAA,IACnB;AAAA,IACA,yDAAoB,KAAK;AAAA,EAC3B;AACA,MAAI,cAAc;AAChB,aAAS,eAAe;AAAA,EAC1B;AACA,QAAM,qBAAqB,mCAAmC,QAAQ;AACtE,MAAI,oBAAoB;AACtB,aAAS,aAAa;AAAA,EACxB;AACA,SAAO,OAAO,KAAK,QAAQ,EAAE,SAAS,IAAI,WAAW;AACvD;AAEA,SAAS,wBACP,UACA,eAMY;AACZ,QAAM,CAAC,qBAAqB,GAAG,mBAAmB,IAChD,SAAS;AAIX;AAAA,IACE,oBAAoB,SAAS,yBAC3B,oBAAoB,MAAM,CAAC,SAAS,KAAK,SAAS,oBAAoB;AAAA,IACxE;AAAA,EACF;AACA,MAAI,oBAAoB,WAAW,GAAG;AACpC,WAAO;AAAA,EACT;AACA,MAAI,eAAe,oBAAoB;AACvC,MAAI,eAAe;AACjB,UAAM,QAAQ,aAAa,WAAW;AAAA,MACpC,CAAC,cACC,UAAU,SAAS,WAAW,UAAU,KAAK,UAAU;AAAA,IAC3D;AACA;AAAA,MACE,+BAAO;AAAA,MACP;AAAA,IACF;AACA,mBAAe,MAAM;AAAA,EACvB;AACA,QAAM,qBAAqB,aAAa,WAAW;AAAA,IACjD,CAAC,cAAc,UAAU,SAAS;AAAA,EACpC;AACA,MAAI,CAAC,oBAAoB;AACvB,WAAO;AAAA,EACT;AACA,QAAM,eAAe,oBAAoB;AAAA,IACvC,CAAC,aAAa,SAAS,KAAK,UAAU,mBAAmB,KAAK;AAAA,EAChE;AACA,YAAU,cAAc,0BAA0B;AAClD,SAAO;AAAA,IACL,MAAM,aAAa,KAAK;AAAA,IACxB,eAAe,aAAa,cAAc,KAAK;AAAA,EACjD;AACF;AAEA,SAAS,0BAA0B,UAAwB;AACzD,QAAM,sBAAsB,SAAS,YAAY;AAAA,IAC/C,CAAC,QAAQ,IAAI,SAAS;AAAA,EACxB;AACA,YAAU,qBAAqB,uBAAuB;AACtD,QAAM,qBAAqB,oBAAoB,aAAa,WAAW;AAAA,IACrE,CAAC,cACC,UAAU,SAAS,WAAW,UAAU,KAAK,UAAU;AAAA,EAC3D;AACA,SAAO;AACT;AAEA,SAAS,mCACP,UACgC;AAChC,MAAI,kBAAkB;AACtB,QAAM,WAA+B,EAAE,eAAe,CAAC,EAAE;AACzD,QAAM,mBAAmB,oBAAI,IAAmC;AAChE,QAAM,UAAU;AAAA,IACd,oBAAoB;AAAA,MAClB,MAAM,cAAc;AAClB,yBAAiB;AAAA,UACf,aAAa,SAAS,KAAK;AAAA,UAC3B,aAAa;AAAA,QACf;AAAA,MACF;AAAA,IACF;AAAA,IACA,OAAO;AAAA,MACL,MAAM,WAAW;AAlJvB;AAmJQ,YAAI,CAAC,iBAAiB;AACpB,mBAAS,cAAc,KAAK,UAAU,KAAK,KAAK;AAAA,QAClD;AACA,cAAM,uBAAsB,eAAU,eAAV,mBAAsB;AAAA,UAChD,CAAC,cAAc,UAAU,KAAK,UAAU;AAAA;AAE1C,YAAI,qBAAqB;AACvB;AAAA,YACE,CAAC;AAAA,YACD;AAAA,UACF;AACA,4BAAkB;AAElB,gBAAM,iBAAiB,IAAI;AAAA,aACzB,eAAU,cAAV,mBAAqB,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,OAAO,GAAG;AAAA,UACxD;AAEA,mBAAS,uBAAuB;AAAA,YAC9B,eAAe,IAAI,OAAO;AAAA,UAC5B;AACA,mBAAS,wBAAwB;AAAA,YAC/B,eAAe,IAAI,OAAO;AAAA,UAC5B;AACA,mBAAS,wBAAwB;AAAA,YAC/B,eAAe,IAAI,MAAM;AAAA,UAC3B;AACA,mBAAS,yBAAyB;AAAA,YAChC,eAAe,IAAI,QAAQ;AAAA,UAC7B;AAEA,mBAAS,yBAAyB;AAAA,YAChC;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MACA,QAAQ;AACN,YAAI,CAAC,iBAAiB;AACpB,mBAAS,cAAc,IAAI;AAAA,QAC7B;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AACD,MAAI,iBAAiB;AACnB;AAAA,MACG,SAAS,wBAAwB,SAAS,yBACxC,SAAS,yBAAyB,SAAS;AAAA,MAC9C;AAAA,IACF;AACA,WAAO;AAAA,EACT,OAAO;AACL,WAAO;AAAA,EACT;AACF;AAEA,SAAS,iBAAiB,KAA+B;AACvD,SAAO,OAAO,IAAI,MAAM,SAAS,aAC7B,IAAI,MAAM,KAAK,QACf;AACN;AAEA,SAAS,8BACP,qBACA,gBACA,kBACA;AACA;AAAA,IACE,oBAAoB,cAAc;AAAA,IAClC;AAAA,EACF;AACA,QAAM,yBAAyB,oBAAI,IAAiB;AACpD,QAAM,UAAU,oBAAoB,UAAU;AAAA,IAC5C,CAAC,QAAQ,IAAI,KAAK,UAAU,YAAY,IAAI,KAAK,UAAU;AAAA,EAC7D;AACA,MAAI,SAAS;AACX;AAAA,MACE,QAAQ,MAAM,SAAS;AAAA,MACvB;AAAA,IACF;AACA,UAAM,qBAAqB,QAAQ,MAAM,OAAO,IAAI,CAAC,UAAU;AAC7D;AAAA,QACE,MAAM,SAAS;AAAA,QACf;AAAA,MACF;AACA,aAAO,MAAM;AAAA,IACf,CAAC;AACD,uBAAmB,QAAQ,CAAC,SAAS;AACnC,YAAM,MAAM,eAAe,IAAI,IAAI;AACnC;AAAA,QACE,QAAQ;AAAA,QACR;AAAA,MACF;AACA,YAAM,WAAW,iBAAiB,GAAG;AACrC,UAAI,UAAU;AACZ,cAAM,eAAe,iBAAiB,IAAI,QAAQ;AAClD,YAAI,cAAc;AAChB,iCAAuB,IAAI,UAAU;AAAA,YACnC,GAAG,oBAAoB,YAAY;AAAA,UACrC,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AACA,SAAO,uBAAuB,OAAO,IACjC,OAAO,YAAY,sBAAsB,IACzC;AACN;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@graphitation/apollo-react-relay-duct-tape-compiler",
|
|
3
3
|
"description": "The build tools to cater to @graphitation/apollo-react-relay-duct-tape's needs.",
|
|
4
4
|
"license": "MIT",
|
|
5
|
-
"version": "1.9.
|
|
5
|
+
"version": "1.9.2",
|
|
6
6
|
"main": "./lib/index.js",
|
|
7
7
|
"bin": {
|
|
8
8
|
"duct-tape-compiler": "./lib/cli.js"
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
},
|
|
43
43
|
"peerDependencies": {
|
|
44
44
|
"graphql": "^15.0.0",
|
|
45
|
-
"@graphitation/supermassive": "^3.
|
|
45
|
+
"@graphitation/supermassive": "^3.15.0",
|
|
46
46
|
"typescript": "^5.5.3"
|
|
47
47
|
},
|
|
48
48
|
"publishConfig": {
|