diff options
author | Minteck <contact@minteck.org> | 2023-01-10 14:54:04 +0100 |
---|---|---|
committer | Minteck <contact@minteck.org> | 2023-01-10 14:54:04 +0100 |
commit | 99c1d9af689e5325f3cf535c4007b3aeb8325229 (patch) | |
tree | e663b3c2ebdbd67c818ac0c5147f0ce1d2463cda /school/node_modules/graphql/utilities/separateOperations.js | |
parent | 9871b03912fc28ad38b4037ebf26a78aa937baba (diff) | |
download | pluralconnect-99c1d9af689e5325f3cf535c4007b3aeb8325229.tar.gz pluralconnect-99c1d9af689e5325f3cf535c4007b3aeb8325229.tar.bz2 pluralconnect-99c1d9af689e5325f3cf535c4007b3aeb8325229.zip |
Update - This is an automated commit
Diffstat (limited to 'school/node_modules/graphql/utilities/separateOperations.js')
-rw-r--r-- | school/node_modules/graphql/utilities/separateOperations.js | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/school/node_modules/graphql/utilities/separateOperations.js b/school/node_modules/graphql/utilities/separateOperations.js new file mode 100644 index 0000000..de00bd7 --- /dev/null +++ b/school/node_modules/graphql/utilities/separateOperations.js @@ -0,0 +1,92 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.separateOperations = separateOperations; + +var _kinds = require("../language/kinds.js"); + +var _visitor = require("../language/visitor.js"); + +/** + * separateOperations accepts a single AST document which may contain many + * operations and fragments and returns a collection of AST documents each of + * which contains a single operation as well the fragment definitions it + * refers to. + */ +function separateOperations(documentAST) { + var operations = []; + var depGraph = Object.create(null); // Populate metadata and build a dependency graph. + + for (var _i2 = 0, _documentAST$definiti2 = documentAST.definitions; _i2 < _documentAST$definiti2.length; _i2++) { + var definitionNode = _documentAST$definiti2[_i2]; + + switch (definitionNode.kind) { + case _kinds.Kind.OPERATION_DEFINITION: + operations.push(definitionNode); + break; + + case _kinds.Kind.FRAGMENT_DEFINITION: + depGraph[definitionNode.name.value] = collectDependencies(definitionNode.selectionSet); + break; + } + } // For each operation, produce a new synthesized AST which includes only what + // is necessary for completing that operation. + + + var separatedDocumentASTs = Object.create(null); + + var _loop = function _loop(_i4) { + var operation = operations[_i4]; + var dependencies = new Set(); + + for (var _i6 = 0, _collectDependencies2 = collectDependencies(operation.selectionSet); _i6 < _collectDependencies2.length; _i6++) { + var fragmentName = _collectDependencies2[_i6]; + collectTransitiveDependencies(dependencies, depGraph, fragmentName); + } // Provides the empty string for anonymous operations. + + + var operationName = operation.name ? operation.name.value : ''; // The list of definition nodes to be included for this operation, sorted + // to retain the same order as the original document. + + separatedDocumentASTs[operationName] = { + kind: _kinds.Kind.DOCUMENT, + definitions: documentAST.definitions.filter(function (node) { + return node === operation || node.kind === _kinds.Kind.FRAGMENT_DEFINITION && dependencies.has(node.name.value); + }) + }; + }; + + for (var _i4 = 0; _i4 < operations.length; _i4++) { + _loop(_i4); + } + + return separatedDocumentASTs; +} + +// From a dependency graph, collects a list of transitive dependencies by +// recursing through a dependency graph. +function collectTransitiveDependencies(collected, depGraph, fromName) { + if (!collected.has(fromName)) { + collected.add(fromName); + var immediateDeps = depGraph[fromName]; + + if (immediateDeps !== undefined) { + for (var _i8 = 0; _i8 < immediateDeps.length; _i8++) { + var toName = immediateDeps[_i8]; + collectTransitiveDependencies(collected, depGraph, toName); + } + } + } +} + +function collectDependencies(selectionSet) { + var dependencies = []; + (0, _visitor.visit)(selectionSet, { + FragmentSpread: function FragmentSpread(node) { + dependencies.push(node.name.value); + } + }); + return dependencies; +} |