UNPKG

@graphql-tools/executor

Version:

Fork of GraphQL.js' execute function

77 lines (76 loc) 3.34 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.buildBranchingExecutionPlan = exports.buildExecutionPlan = void 0; const AccumulatorMap_js_1 = require("./AccumulatorMap.js"); const getBySet_js_1 = require("./getBySet.js"); const isSameSet_js_1 = require("./isSameSet.js"); function buildExecutionPlan(originalGroupedFieldSet, parentDeferUsages = new Set()) { const groupedFieldSet = new Map(); const newGroupedFieldSets = new Map(); for (const [responseKey, fieldGroup] of originalGroupedFieldSet) { const filteredDeferUsageSet = getFilteredDeferUsageSet(fieldGroup); if ((0, isSameSet_js_1.isSameSet)(filteredDeferUsageSet, parentDeferUsages)) { groupedFieldSet.set(responseKey, fieldGroup); continue; } let newGroupedFieldSet = (0, getBySet_js_1.getBySet)(newGroupedFieldSets, filteredDeferUsageSet); if (newGroupedFieldSet === undefined) { newGroupedFieldSet = new Map(); newGroupedFieldSets.set(filteredDeferUsageSet, newGroupedFieldSet); } newGroupedFieldSet.set(responseKey, fieldGroup); } return { groupedFieldSet, newGroupedFieldSets, }; } exports.buildExecutionPlan = buildExecutionPlan; function getFilteredDeferUsageSet(fieldGroup) { const filteredDeferUsageSet = new Set(); for (const fieldDetails of fieldGroup) { const deferUsage = fieldDetails.deferUsage; if (deferUsage === undefined) { filteredDeferUsageSet.clear(); return filteredDeferUsageSet; } filteredDeferUsageSet.add(deferUsage); } for (const deferUsage of filteredDeferUsageSet) { let parentDeferUsage = deferUsage.parentDeferUsage; while (parentDeferUsage !== undefined) { if (filteredDeferUsageSet.has(parentDeferUsage)) { filteredDeferUsageSet.delete(deferUsage); break; } parentDeferUsage = parentDeferUsage.parentDeferUsage; } } return filteredDeferUsageSet; } function buildBranchingExecutionPlan(originalGroupedFieldSet, parentDeferUsages = new Set()) { const groupedFieldSet = new AccumulatorMap_js_1.AccumulatorMap(); const newGroupedFieldSets = new Map(); for (const [responseKey, fieldGroup] of originalGroupedFieldSet) { for (const fieldDetails of fieldGroup) { const deferUsage = fieldDetails.deferUsage; const deferUsageSet = deferUsage === undefined ? new Set() : new Set([deferUsage]); if ((0, isSameSet_js_1.isSameSet)(parentDeferUsages, deferUsageSet)) { groupedFieldSet.add(responseKey, fieldDetails); } else { let newGroupedFieldSet = (0, getBySet_js_1.getBySet)(newGroupedFieldSets, deferUsageSet); if (newGroupedFieldSet === undefined) { newGroupedFieldSet = new AccumulatorMap_js_1.AccumulatorMap(); newGroupedFieldSets.set(deferUsageSet, newGroupedFieldSet); } newGroupedFieldSet.add(responseKey, fieldDetails); } } } return { groupedFieldSet, newGroupedFieldSets, }; } exports.buildBranchingExecutionPlan = buildBranchingExecutionPlan;