{
  "version": 3,
  "sources": ["../../src/compilerTransforms/emitApolloClientConnectionTransform.ts"],
  "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"],
  "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;",
  "names": []
}
