UNPKG

2.44 kBJavaScriptView Raw
1"use strict";
2var __importDefault = (this && this.__importDefault) || function (mod) {
3 return (mod && mod.__esModule) ? mod : { "default": mod };
4};
5Object.defineProperty(exports, "__esModule", { value: true });
6exports.getFragmentDependenciesForAST = exports.getFragmentDependencies = void 0;
7const graphql_1 = require("graphql");
8const nullthrows_1 = __importDefault(require("nullthrows"));
9const getFragmentDependencies = (operationString, fragmentDefinitions) => {
10 if (!fragmentDefinitions) {
11 return [];
12 }
13 let parsedOperation;
14 try {
15 parsedOperation = graphql_1.parse(operationString, {
16 allowLegacySDLImplementsInterfaces: true,
17 allowLegacySDLEmptyFields: true,
18 });
19 }
20 catch (error) {
21 return [];
22 }
23 return exports.getFragmentDependenciesForAST(parsedOperation, fragmentDefinitions);
24};
25exports.getFragmentDependencies = getFragmentDependencies;
26const getFragmentDependenciesForAST = (parsedOperation, fragmentDefinitions) => {
27 if (!fragmentDefinitions) {
28 return [];
29 }
30 const existingFrags = new Map();
31 const referencedFragNames = new Set();
32 graphql_1.visit(parsedOperation, {
33 FragmentDefinition(node) {
34 existingFrags.set(node.name.value, true);
35 },
36 FragmentSpread(node) {
37 if (!referencedFragNames.has(node.name.value)) {
38 referencedFragNames.add(node.name.value);
39 }
40 },
41 });
42 const asts = new Set();
43 referencedFragNames.forEach(name => {
44 if (!existingFrags.has(name) && fragmentDefinitions.has(name)) {
45 asts.add(nullthrows_1.default(fragmentDefinitions.get(name)));
46 }
47 });
48 const referencedFragments = [];
49 asts.forEach(ast => {
50 graphql_1.visit(ast, {
51 FragmentSpread(node) {
52 if (!referencedFragNames.has(node.name.value) &&
53 fragmentDefinitions.get(node.name.value)) {
54 asts.add(nullthrows_1.default(fragmentDefinitions.get(node.name.value)));
55 referencedFragNames.add(node.name.value);
56 }
57 },
58 });
59 if (!existingFrags.has(ast.name.value)) {
60 referencedFragments.push(ast);
61 }
62 });
63 return referencedFragments;
64};
65exports.getFragmentDependenciesForAST = getFragmentDependenciesForAST;
66//# sourceMappingURL=fragmentDependencies.js.map
\No newline at end of file