{
  "version": 3,
  "sources": ["../src/rewriteGraphitationDirectives.ts"],
  "sourcesContent": ["import {\n  DirectiveNode,\n  parse,\n  print,\n  visit,\n  ASTNode,\n  FragmentDefinitionNode,\n} from \"graphql\";\nimport invariant from \"invariant\";\n\ndeclare global {\n  interface ArrayConstructor {\n    isArray(arg: ReadonlyArray<any> | any): arg is ReadonlyArray<any>;\n  }\n}\n\n/**\n * This rewrites graphitation specific directives to relay ones. Currently it does the following:\n *\n * - `@graphitation_test_operation` is rewritten to `@raw_response_type`.\n *   In the future this should probably also add `@relay_test_operation`.\n *\n * @param document A single GraphQL document\n */\nexport function rewriteGraphitationDirectives(document: string) {\n  const documentNode = parse(document);\n  const rewrittenDocumentNode = visit(documentNode, {\n    Directive(\n      directiveNode,\n      _key,\n      _parent,\n      _path,\n      ancestors,\n    ): DirectiveNode | undefined {\n      switch (directiveNode.name.value) {\n        case \"watchNode\": {\n          const fragmentDefinitionNode = ancestors[ancestors.length - 1];\n          invariant(\n            !Array.isArray(fragmentDefinitionNode) &&\n              fragmentDefinitionNode.kind === \"FragmentDefinition\",\n            \"Expected @watchNode to be used on a fragment\",\n          );\n          return emitRefetchableDirective(fragmentDefinitionNode);\n        }\n        case \"graphitation_test_operation\": {\n          return {\n            ...directiveNode,\n            name: {\n              kind: \"Name\",\n              value: \"raw_response_type\",\n            },\n          };\n        }\n        default: {\n          return undefined;\n        }\n      }\n    },\n  });\n  return print(rewrittenDocumentNode);\n}\n\nfunction emitRefetchableDirective(\n  fragmentDefinitionNode: FragmentDefinitionNode,\n): DirectiveNode {\n  const fragmentName = fragmentDefinitionNode.name.value;\n  const fragmentBaseName = fragmentName.replace(/Fragment$/, \"\");\n  return {\n    kind: \"Directive\",\n    name: {\n      kind: \"Name\",\n      value: \"refetchable\",\n    },\n    arguments: [\n      {\n        kind: \"Argument\",\n        name: {\n          kind: \"Name\",\n          value: \"queryName\",\n        },\n        value: {\n          kind: \"StringValue\",\n          value: `${fragmentBaseName}WatchNodeQuery`,\n        },\n      },\n    ],\n  };\n}\n"],
  "mappings": ";AAAA;AAAA,EAEE;AAAA,EACA;AAAA,EACA;AAAA,OAGK;AACP,OAAO,eAAe;AAgBf,SAAS,8BAA8B,UAAkB;AAC9D,QAAM,eAAe,MAAM,QAAQ;AACnC,QAAM,wBAAwB,MAAM,cAAc;AAAA,IAChD,UACE,eACA,MACA,SACA,OACA,WAC2B;AAC3B,cAAQ,cAAc,KAAK,OAAO;AAAA,QAChC,KAAK,aAAa;AAChB,gBAAM,yBAAyB,UAAU,UAAU,SAAS,CAAC;AAC7D;AAAA,YACE,CAAC,MAAM,QAAQ,sBAAsB,KACnC,uBAAuB,SAAS;AAAA,YAClC;AAAA,UACF;AACA,iBAAO,yBAAyB,sBAAsB;AAAA,QACxD;AAAA,QACA,KAAK,+BAA+B;AAClC,iBAAO;AAAA,YACL,GAAG;AAAA,YACH,MAAM;AAAA,cACJ,MAAM;AAAA,cACN,OAAO;AAAA,YACT;AAAA,UACF;AAAA,QACF;AAAA,QACA,SAAS;AACP,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AACD,SAAO,MAAM,qBAAqB;AACpC;AAEA,SAAS,yBACP,wBACe;AACf,QAAM,eAAe,uBAAuB,KAAK;AACjD,QAAM,mBAAmB,aAAa,QAAQ,aAAa,EAAE;AAC7D,SAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,OAAO;AAAA,IACT;AAAA,IACA,WAAW;AAAA,MACT;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,UACJ,MAAM;AAAA,UACN,OAAO;AAAA,QACT;AAAA,QACA,OAAO;AAAA,UACL,MAAM;AAAA,UACN,OAAO,GAAG;AAAA,QACZ;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;",
  "names": []
}
