UNPKG

@graphql-tools/executor

Version:

Fork of GraphQL.js' execute function

35 lines (34 loc) • 2.23 kB
import { FieldNode, FragmentDefinitionNode, GraphQLObjectType, GraphQLSchema, SelectionSetNode } from 'graphql'; import { type VariableValues } from '@graphql-tools/utils'; /** * graphql-js 17 DeferUsage: a @defer selection and its parent chain. * Overlapping fields keep one FieldDetails without deferUsage so they execute * in the parent group instead of again in the deferred patch. */ export interface DeferUsage { label: string | undefined; parentDeferUsage: DeferUsage | undefined; } export interface FieldDetails { node: FieldNode; deferUsage?: DeferUsage; } export type FieldDetailsList = ReadonlyArray<FieldDetails>; export type GroupedFieldSet = ReadonlyMap<string, FieldDetailsList>; export type DeferUsageSet = ReadonlySet<DeferUsage>; export interface ExecutionPlan { groupedFieldSet: GroupedFieldSet; newGroupedFieldSets: Map<DeferUsageSet, GroupedFieldSet>; } export declare function collectIncrementalFields<TVariables = any>(schema: GraphQLSchema, fragments: Record<string, FragmentDefinitionNode>, variableValues: VariableValues<TVariables>, runtimeType: GraphQLObjectType, selectionSet: SelectionSetNode, parentDeferUsage?: DeferUsage): { groupedFieldSet: GroupedFieldSet; newDeferUsages: ReadonlyArray<DeferUsage>; }; export declare function collectIncrementalSubfields<TVariables = any>(schema: GraphQLSchema, fragments: Record<string, FragmentDefinitionNode>, variableValues: VariableValues<TVariables>, returnType: GraphQLObjectType, fieldNodes: ReadonlyArray<FieldNode>, parentDeferUsage?: DeferUsage, deferUsageByFieldNode?: WeakMap<FieldNode, DeferUsage | undefined>): { groupedFieldSet: GroupedFieldSet; newDeferUsages: ReadonlyArray<DeferUsage>; }; export declare function buildExecutionPlan(originalGroupedFieldSet: GroupedFieldSet, parentDeferUsages?: DeferUsageSet): ExecutionPlan; export declare function groupedFieldSetToFieldMap(groupedFieldSet: GroupedFieldSet, deferUsageByFieldNode?: WeakMap<FieldNode, DeferUsage | undefined>): Map<string, Array<FieldNode>>; export declare function rootDeferUsage(deferUsageSet: DeferUsageSet): DeferUsage | undefined; export declare function labelForDeferUsageSet(deferUsageSet: DeferUsageSet): string | undefined;