@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 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 Fri, 06 Mar 2026 20:26:38 GMT and should not be manually modified. -->
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:26:38 GMT
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
- if (argv.transformConnectionDirective) {
148
- wrapTransform(
149
- "connectionTransform",
150
- import_relay_compiler2.IRTransforms.commonTransforms,
151
- import_emitApolloClientConnectionTransform.emitApolloClientConnectionTransform
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 if (argv.transformConnectionDirective) {\n wrapTransform(\n \"connectionTransform\",\n IRTransforms.commonTransforms,\n emitApolloClientConnectionTransform,\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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",
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
- if (argv.transformConnectionDirective) {
127
- wrapTransform(
128
- "connectionTransform",
129
- IRTransforms.commonTransforms,
130
- emitApolloClientConnectionTransform
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 if (argv.transformConnectionDirective) {\n wrapTransform(\n \"connectionTransform\",\n IRTransforms.commonTransforms,\n emitApolloClientConnectionTransform,\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": ";;;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,MAAI,KAAK,8BAA8B;AACrC;AAAA,MACE;AAAA,MACA,aAAa;AAAA,MACb;AAAA,IACF;AAAA,EACF;AAEA,QAAM,iCAAiC,MAAM,cAAc,IAAI;AAE/D,SAAO,cAAc;AAAA,IACnB,GAAG;AAAA,IACH,UAAU;AAAA,IACV,YAAY,CAAC,MAAM,KAAK;AAAA;AAAA,IACxB,SAAS,KAAK,WAAW,CAAC,IAAI;AAAA,IAC9B,SAAS;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MAEA;AAAA,MACA,GAAI,KAAK,WAAW,CAAC;AAAA,IACvB;AAAA,IACA,oBAAoB;AAAA,IACpB,eAAe,CAAC;AAAA,EAClB,CAAC;AACH;AAEA,KAAK,EAAE,MAAM,CAAC,UAAU;AACtB,UAAQ,MAAM,KAAK;AACnB,UAAQ,KAAK,CAAC;AAChB,CAAC;",
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(wrappedConnectionTransform: IRTransform): IRTransform;
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,CACjD,0BAA0B,EAAE,WAAW,GACtC,WAAW,CA6Eb"}
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(wrappedConnectionTransform) {
27
- const connectionTransformWrapper = (context) => {
28
- const schema = context.getSchema();
29
- let nextContext = wrappedConnectionTransform(context);
30
- nextContext.forEachDocument((document) => {
31
- const nextDocument = (0, import_IRVisitor.visit)(document, {
32
- LinkedField(linkedFieldNode) {
33
- var _a, _b;
34
- const connectionHandle = (_a = linkedFieldNode.handles) == null ? void 0 : _a.find(
35
- (handle) => handle.name === "connection"
36
- );
37
- if (connectionHandle) {
38
- const args = [
39
- {
40
- kind: "Argument",
41
- name: "key",
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: "Directive",
84
- name: "connection",
85
- args,
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
- return nextLinkedFieldNode;
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
- nextContext = nextContext.replace(nextDocument);
96
- });
97
- return nextContext;
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 wrappedConnectionTransform: IRTransform,\n): 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: \"filter\",\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"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,uBAAsB;AAGtB,MAAM,cAAc,QAAQ,qCAAqC;AAW1D,SAAS,oCACd,4BACa;AACb,QAAM,6BAA0C,CAAC,YAAY;AAC3D,UAAM,SAAS,QAAQ,UAAU;AACjC,QAAI,cAAc,2BAA2B,OAAO;AAIpD,gBAAY,gBAAgB,CAAC,aAAa;AACxC,YAAM,mBAAe,wBAAM,UAAU;AAAA,QACnC,YAAY,iBAAiB;AA5BrC;AA6BU,gBAAM,oBAAmB,qBAAgB,YAAhB,mBAAyB;AAAA,YAChD,CAAC,WAAW,OAAO,SAAS;AAAA;AAE9B,cAAI,kBAAkB;AACpB,kBAAM,OAAmB;AAAA,cACvB;AAAA,gBACE,MAAM;AAAA,gBACN,MAAM;AAAA,gBACN,MAAM,YAAY,sBAAsB,MAAM;AAAA,gBAC9C,OAAO;AAAA,kBACL,MAAM;AAAA,kBACN,OAAO,iBAAiB;AAAA,kBACxB,KAAK,EAAE,MAAM,YAAY;AAAA,gBAC3B;AAAA,gBACA,KAAK,EAAE,MAAM,YAAY;AAAA,gBACzB,UAAU;AAAA,cACZ;AAAA,YACF;AACA,gBAAI,iBAAiB,SAAS;AAC5B,mBAAK,KAAK;AAAA,gBACR,MAAM;AAAA,gBACN,MAAM;AAAA,gBACN,MAAM,OAAO;AAAA,kBACX,OAAO,qBAAqB,WAAW;AAAA,gBACzC;AAAA,gBACA,OAAO;AAAA,kBACL,MAAM;AAAA,kBACN,OAAO,iBAAiB,QAAQ;AAAA,oBAC9B,CAAC,YAAY;AAAA,sBACX,MAAM;AAAA,sBACN,OAAO;AAAA,sBACP,KAAK,EAAE,MAAM,YAAY;AAAA,oBAC3B;AAAA,kBACF;AAAA,kBACA,KAAK,EAAE,MAAM,YAAY;AAAA,kBACzB,UAAU;AAAA,gBACZ;AAAA,gBACA,KAAK,EAAE,MAAM,YAAY;AAAA,gBACzB,UAAU;AAAA,cACZ,CAAC;AAAA,YACH;AACA,kBAAM,sBAAmC;AAAA,cACvC,GAAG;AAAA,cACH,UAAS,qBAAgB,YAAhB,mBAAyB;AAAA,gBAChC,CAAC,WAAW,OAAO,SAAS;AAAA;AAAA,cAE9B,YAAY;AAAA,gBACV,GAAG,gBAAgB;AAAA,gBACnB;AAAA,kBACE,MAAM;AAAA,kBACN,MAAM;AAAA,kBACN;AAAA,kBACA,KAAK,EAAE,MAAM,YAAY;AAAA,kBACzB,UAAU;AAAA,gBACZ;AAAA,cACF;AAAA,YACF;AACA,mBAAO;AAAA,UACT;AAAA,QACF;AAAA,MACF,CAAC;AACD,oBAAc,YAAY,QAAQ,YAAY;AAAA,IAChD,CAAC;AAED,WAAO;AAAA,EACT;AACA,SAAO;AACT;",
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(wrappedConnectionTransform) {
13
- const connectionTransformWrapper = (context) => {
14
- const schema = context.getSchema();
15
- let nextContext = wrappedConnectionTransform(context);
16
- nextContext.forEachDocument((document) => {
17
- const nextDocument = visit(document, {
18
- LinkedField(linkedFieldNode) {
19
- var _a, _b;
20
- const connectionHandle = (_a = linkedFieldNode.handles) == null ? void 0 : _a.find(
21
- (handle) => handle.name === "connection"
22
- );
23
- if (connectionHandle) {
24
- const args = [
25
- {
26
- kind: "Argument",
27
- name: "key",
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: "Directive",
70
- name: "connection",
71
- args,
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
- return nextLinkedFieldNode;
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
- nextContext = nextContext.replace(nextDocument);
82
- });
83
- return nextContext;
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 wrappedConnectionTransform: IRTransform,\n): 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: \"filter\",\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"],
5
- "mappings": ";;;;;;;;;AAGA,SAAS,aAAa;AAGtB,IAAM,cAAc,UAAQ,qCAAqC;AAW1D,SAAS,oCACd,4BACa;AACb,QAAM,6BAA0C,CAAC,YAAY;AAC3D,UAAM,SAAS,QAAQ,UAAU;AACjC,QAAI,cAAc,2BAA2B,OAAO;AAIpD,gBAAY,gBAAgB,CAAC,aAAa;AACxC,YAAM,eAAe,MAAM,UAAU;AAAA,QACnC,YAAY,iBAAiB;AA5BrC;AA6BU,gBAAM,oBAAmB,qBAAgB,YAAhB,mBAAyB;AAAA,YAChD,CAAC,WAAW,OAAO,SAAS;AAAA;AAE9B,cAAI,kBAAkB;AACpB,kBAAM,OAAmB;AAAA,cACvB;AAAA,gBACE,MAAM;AAAA,gBACN,MAAM;AAAA,gBACN,MAAM,YAAY,sBAAsB,MAAM;AAAA,gBAC9C,OAAO;AAAA,kBACL,MAAM;AAAA,kBACN,OAAO,iBAAiB;AAAA,kBACxB,KAAK,EAAE,MAAM,YAAY;AAAA,gBAC3B;AAAA,gBACA,KAAK,EAAE,MAAM,YAAY;AAAA,gBACzB,UAAU;AAAA,cACZ;AAAA,YACF;AACA,gBAAI,iBAAiB,SAAS;AAC5B,mBAAK,KAAK;AAAA,gBACR,MAAM;AAAA,gBACN,MAAM;AAAA,gBACN,MAAM,OAAO;AAAA,kBACX,OAAO,qBAAqB,WAAW;AAAA,gBACzC;AAAA,gBACA,OAAO;AAAA,kBACL,MAAM;AAAA,kBACN,OAAO,iBAAiB,QAAQ;AAAA,oBAC9B,CAAC,YAAY;AAAA,sBACX,MAAM;AAAA,sBACN,OAAO;AAAA,sBACP,KAAK,EAAE,MAAM,YAAY;AAAA,oBAC3B;AAAA,kBACF;AAAA,kBACA,KAAK,EAAE,MAAM,YAAY;AAAA,kBACzB,UAAU;AAAA,gBACZ;AAAA,gBACA,KAAK,EAAE,MAAM,YAAY;AAAA,gBACzB,UAAU;AAAA,cACZ,CAAC;AAAA,YACH;AACA,kBAAM,sBAAmC;AAAA,cACvC,GAAG;AAAA,cACH,UAAS,qBAAgB,YAAhB,mBAAyB;AAAA,gBAChC,CAAC,WAAW,OAAO,SAAS;AAAA;AAAA,cAE9B,YAAY;AAAA,gBACV,GAAG,gBAAgB;AAAA,gBACnB;AAAA,kBACE,MAAM;AAAA,kBACN,MAAM;AAAA,kBACN;AAAA,kBACA,KAAK,EAAE,MAAM,YAAY;AAAA,kBACzB,UAAU;AAAA,gBACZ;AAAA,cACF;AAAA,YACF;AACA,mBAAO;AAAA,UACT;AAAA,QACF;AAAA,MACF,CAAC;AACD,oBAAc,YAAY,QAAQ,YAAY;AAAA,IAChD,CAAC;AAED,WAAO;AAAA,EACT;AACA,SAAO;AACT;",
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 [, filters] = connectionDirective.arguments;
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.name.value === "filter" && filters.value.kind === "ListValue",
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 [, filters] = connectionDirective.arguments;\n if (filters) {\n invariant(\n filters.name.value === \"filter\" && 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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",
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 [, filters] = connectionDirective.arguments;
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.name.value === "filter" && filters.value.kind === "ListValue",
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 [, filters] = connectionDirective.arguments;\n if (filters) {\n invariant(\n filters.name.value === \"filter\" && 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,CAAC,EAAE,OAAO,IAAI,oBAAoB;AACxC,MAAI,SAAS;AACX;AAAA,MACE,QAAQ,KAAK,UAAU,YAAY,QAAQ,MAAM,SAAS;AAAA,MAC1D;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;",
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": []
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.0",
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.14.2",
45
+ "@graphitation/supermassive": "^3.15.0",
46
46
  "typescript": "^5.5.3"
47
47
  },
48
48
  "publishConfig": {