selectionSet.selections.forEach(selection => { if (!shouldInclude(selection, variables)) { // Skip this entirely return; } if (isField(selection)) { const fieldResult = handleMissing( this.executeField(object, typename, selection, execContext), ); if (typeof fieldResult !== 'undefined') { objectsToMerge.push({ [resultKeyNameFromField(selection)]: fieldResult, }); } } else { let fragment: InlineFragmentNode | FragmentDefinitionNode; if (isInlineFragment(selection)) { fragment = selection; } else { // This is a named fragment fragment = fragmentMap[selection.name.value]; if (!fragment) { throw new InvariantError(`No fragment named ${selection.name.value}`); } } const typeCondition = fragment.typeCondition.name.value; const match = execContext.fragmentMatcher(rootValue, typeCondition, contextValue); if (match) { let fragmentExecResult = this.executeSelectionSet({ selectionSet: fragment.selectionSet, rootValue, execContext, }); if (match === 'heuristic' && fragmentExecResult.missing) { fragmentExecResult = { ...fragmentExecResult, missing: fragmentExecResult.missing.map(info => { return { ...info, tolerable: true }; }), }; } objectsToMerge.push(handleMissing(fragmentExecResult)); } } });
const execute = async selection => { if (!shouldInclude(selection, variables)) { // Skip this entirely return; } if (isField(selection)) { const fieldResult = await executeField(selection, rootValue, execContext); const resultFieldKey = resultKeyNameFromField(selection); if (fieldResult !== undefined) { if (result[resultFieldKey] === undefined) { result[resultFieldKey] = fieldResult; } else { merge(result[resultFieldKey], fieldResult); } } return; } let fragment: InlineFragmentNode | FragmentDefinitionNode; if (isInlineFragment(selection)) { fragment = selection; } else { // This is a named fragment fragment = fragmentMap[selection.name.value]; if (!fragment) { throw new Error(`No fragment named ${selection.name.value}`); } } const typeCondition = fragment.typeCondition.name.value; if (execContext.fragmentMatcher(rootValue, typeCondition, contextValue)) { const fragmentResult = await executeSelectionSet( fragment.selectionSet, rootValue, execContext, ); merge(result, fragmentResult); } };
selectionSet.selections.forEach(selection => { if (variables && !shouldInclude(selection, variables)) { // Skip selection sets which we're able to determine should not be run return; } if (isField(selection)) { const fieldResult = executeField(selection, rootValue, execContext); const resultFieldKey = resultKeyNameFromField(selection); if (fieldResult !== undefined) { if (result[resultFieldKey] === undefined) { result[resultFieldKey] = fieldResult; } else { merge(result[resultFieldKey], fieldResult); } } } else { let fragment: InlineFragmentNode | FragmentDefinitionNode; if (isInlineFragment(selection)) { fragment = selection; } else { // This is a named fragment fragment = fragmentMap[selection.name.value]; if (!fragment) { throw new Error(`No fragment named ${selection.name.value}`); } } const typeCondition = fragment.typeCondition.name.value; if (execContext.fragmentMatcher(rootValue, typeCondition, contextValue)) { const fragmentResult = executeSelectionSet( fragment.selectionSet, rootValue, execContext, ); merge(result, fragmentResult); } } });
const execute = async (selection: SelectionNode): Promise<void> => { if (!shouldInclude(selection, variables)) { // Skip this entirely. return; } if (isField(selection)) { return this.resolveField(selection, rootValue, execContext).then( fieldResult => { if (typeof fieldResult !== 'undefined') { resultsToMerge.push({ [resultKeyNameFromField(selection)]: fieldResult, } as TData); } }, ); } let fragment: InlineFragmentNode | FragmentDefinitionNode; if (isInlineFragment(selection)) { fragment = selection; } else { // This is a named fragment. fragment = fragmentMap[selection.name.value]; invariant(fragment, `No fragment named ${selection.name.value}`); } if (fragment && fragment.typeCondition) { const typeCondition = fragment.typeCondition.name.value; if (execContext.fragmentMatcher(rootValue, typeCondition, context)) { return this.resolveSelectionSet( fragment.selectionSet, rootValue, execContext, ).then(fragmentResult => { resultsToMerge.push(fragmentResult); }); } } };