import { GraphQLSchema, GraphQLOutputType, SelectionSetNode, FieldNode, GraphQLResolveInfo, GraphQLFieldResolver, FragmentDefinitionNode, GraphQLObjectType, VariableDefinitionNode, OperationTypeNode, GraphQLError } from 'graphql'; import DataLoader from 'dataloader'; import { ExecutionRequest, ExecutionResult, Executor } from '@graphql-tools/utils'; import { Subschema } from './Subschema'; import { OBJECT_SUBSCHEMA_SYMBOL, FIELD_SUBSCHEMA_MAP_SYMBOL, UNPATHED_ERRORS_SYMBOL } from './symbols'; import { TypeMap } from 'graphql/type/schema'; export declare type SchemaTransform> = (originalWrappingSchema: GraphQLSchema, subschemaConfig: SubschemaConfig, transformedSchema?: GraphQLSchema) => GraphQLSchema; export declare type RequestTransform> = (originalRequest: ExecutionRequest, delegationContext: DelegationContext, transformationContext: T) => ExecutionRequest; export declare type ResultTransform> = (originalResult: ExecutionResult, delegationContext: DelegationContext, transformationContext: T) => ExecutionResult; export interface Transform> { transformSchema?: SchemaTransform; transformRequest?: RequestTransform; transformResult?: ResultTransform; } export interface DelegationContext> { subschema: GraphQLSchema | SubschemaConfig; subschemaConfig?: SubschemaConfig; targetSchema: GraphQLSchema; operation: OperationTypeNode; fieldName: string; args?: Record; context?: TContext; info?: GraphQLResolveInfo; returnType: GraphQLOutputType; onLocatedError?: (originalError: GraphQLError) => GraphQLError; rootValue?: any; transforms: Array>; transformedSchema: GraphQLSchema; skipTypeMerging: boolean; } export interface IDelegateToSchemaOptions, TArgs = Record> { schema: GraphQLSchema | SubschemaConfig; operationName?: string; operation?: OperationTypeNode; fieldName?: string; returnType?: GraphQLOutputType; onLocatedError?: (originalError: GraphQLError) => GraphQLError; args?: TArgs; selectionSet?: SelectionSetNode; fieldNodes?: ReadonlyArray; context?: TContext; info: GraphQLResolveInfo; rootValue?: any; transforms?: Array>; transformedSchema?: GraphQLSchema; validateRequest?: boolean; skipTypeMerging?: boolean; } export interface IDelegateRequestOptions, TArgs = Record> extends IDelegateToSchemaOptions { request: ExecutionRequest; } export interface ICreateRequestFromInfo { info: GraphQLResolveInfo; rootValue?: any; operationName?: string; operation?: OperationTypeNode; fieldName?: string; selectionSet?: SelectionSetNode; fieldNodes?: ReadonlyArray; context?: any; } export interface ICreateRequest { sourceSchema?: GraphQLSchema; sourceParentType?: GraphQLObjectType; sourceFieldName?: string; fragments?: Record; variableDefinitions?: ReadonlyArray; variableValues?: Record; targetOperation: OperationTypeNode; targetRootValue?: any; targetOperationName?: string; targetFieldName: string; selectionSet?: SelectionSetNode; fieldNodes?: ReadonlyArray; context?: any; info?: GraphQLResolveInfo; } export interface MergedTypeInfo> { typeName: string; selectionSet?: SelectionSetNode; targetSubschemas: Map, Array>>; uniqueFields: Record>; nonUniqueFields: Record>>; typeMaps: Map, TypeMap>; selectionSets: Map, SelectionSetNode>; fieldSelectionSets: Map, Record>; resolvers: Map, MergedTypeResolver>; } export interface ICreateProxyingResolverOptions> { subschemaConfig: SubschemaConfig; transformedSchema?: GraphQLSchema; operation?: OperationTypeNode; fieldName?: string; } export declare type CreateProxyingResolverFn> = (options: ICreateProxyingResolverOptions) => GraphQLFieldResolver; export interface BatchingOptions { extensionsReducer?: (mergedExtensions: Record, request: ExecutionRequest) => Record; dataLoaderOptions?: DataLoader.Options; } export interface SubschemaConfig> { schema: GraphQLSchema; createProxyingResolver?: CreateProxyingResolverFn; rootValue?: any; transforms?: Array>; merge?: Record>; executor?: Executor; batch?: boolean; batchingOptions?: BatchingOptions; } export interface MergedTypeConfig> extends MergedTypeEntryPoint { entryPoints?: Array; fields?: Record; computedFields?: Record; canonical?: boolean; } export interface MergedTypeEntryPoint> extends MergedTypeResolverOptions { selectionSet?: string; key?: (originalResult: any) => K; resolve?: MergedTypeResolver; } export interface MergedTypeResolverOptions { fieldName?: string; args?: (originalResult: any) => Record; argsFromKeys?: (keys: ReadonlyArray) => Record; valuesFromResults?: (results: any, keys: ReadonlyArray) => Array; } export interface MergedFieldConfig { selectionSet?: string; computed?: boolean; canonical?: boolean; } export declare type MergedTypeResolver> = (originalResult: any, context: TContext, info: GraphQLResolveInfo, subschema: GraphQLSchema | SubschemaConfig, selectionSet: SelectionSetNode, key?: any) => any; export interface StitchingInfo> { subschemaMap: Map, Subschema>; fieldNodesByType: Record>; fieldNodesByField: Record>>; dynamicSelectionSetsByField: Record SelectionSetNode>>>; mergedTypes: Record>; } export interface ExternalObject> { __typename: string; key: any; [OBJECT_SUBSCHEMA_SYMBOL]: GraphQLSchema | SubschemaConfig; [FIELD_SUBSCHEMA_MAP_SYMBOL]: Record>; [UNPATHED_ERRORS_SYMBOL]: Array; }