@graphql-tools/executor
Version:
Fork of GraphQL.js' execute function
35 lines (34 loc) • 2.23 kB
text/typescript
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;