import { GraphQLSchema, GraphQLOutputType, SelectionSetNode, FieldNode, DocumentNode, GraphQLResolveInfo, GraphQLFieldResolver, FragmentDefinitionNode, GraphQLObjectType, VariableDefinitionNode, OperationTypeNode, GraphQLError } from 'graphql'; import DataLoader from 'dataloader'; import { Request, TypeMap, ExecutionResult } from '@graphql-tools/utils'; import { Subschema } from './Subschema'; import { OBJECT_SUBSCHEMA_SYMBOL, FIELD_SUBSCHEMA_MAP_SYMBOL, UNPATHED_ERRORS_SYMBOL } from './symbols'; export declare type SchemaTransform = (originalWrappingSchema: GraphQLSchema, subschemaConfig: SubschemaConfig, transformedSchema?: GraphQLSchema) => GraphQLSchema; export declare type RequestTransform> = (originalRequest: Request, delegationContext: DelegationContext, transformationContext: T) => Request; 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; targetSchema: GraphQLSchema; operation: OperationTypeNode; fieldName: string; args: Record; context: Record; info: GraphQLResolveInfo; returnType: GraphQLOutputType; onLocatedError?: (originalError: GraphQLError) => GraphQLError; transforms: Array; transformedSchema: GraphQLSchema; skipTypeMerging: boolean; } export declare type DelegationBinding = (delegationContext: DelegationContext) => Array; 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?: Record; transforms?: Array; transformedSchema?: GraphQLSchema; skipValidation?: boolean; skipTypeMerging?: boolean; binding?: DelegationBinding; } export interface IDelegateRequestOptions extends Omit { request: Request; info?: GraphQLResolveInfo; } export interface ICreateRequestFromInfo { info: GraphQLResolveInfo; operationName?: string; operation: OperationTypeNode; fieldName: string; selectionSet?: SelectionSetNode; fieldNodes?: ReadonlyArray; } export interface ICreateRequest { sourceSchema?: GraphQLSchema; sourceParentType?: GraphQLObjectType; sourceFieldName?: string; fragments?: Record; variableDefinitions?: ReadonlyArray; variableValues?: Record; targetOperation: OperationTypeNode; targetOperationName?: string; targetFieldName: string; selectionSet?: SelectionSetNode; fieldNodes?: ReadonlyArray; } export interface MergedTypeInfo { typeName: string; selectionSet?: SelectionSetNode; targetSubschemas: Map>; uniqueFields: Record; nonUniqueFields: Record>; typeMaps: Map; selectionSets: Map; fieldSelectionSets: Map>; resolvers: Map; } export interface ExecutionParams, TContext = any> { document: DocumentNode; variables?: TArgs; extensions?: Record; context?: TContext; info?: GraphQLResolveInfo; } export declare type AsyncExecutor = , TArgs = Record, TContext = Record>(params: ExecutionParams) => Promise>; export declare type SyncExecutor = , TArgs = Record, TContext = Record>(params: ExecutionParams) => ExecutionResult; export declare type Executor = , TArgs = Record, TContext = Record>(params: ExecutionParams) => ExecutionResult | Promise>; export declare type Subscriber = , TArgs = Record, TContext = Record>(params: ExecutionParams) => Promise> | ExecutionResult>; export interface ICreateProxyingResolverOptions { subschemaConfig: SubschemaConfig; transformedSchema?: GraphQLSchema; operation?: OperationTypeNode; fieldName?: string; } export declare type CreateProxyingResolverFn = (options: ICreateProxyingResolverOptions) => GraphQLFieldResolver; export interface BatchingOptions { extensionsReducer?: (mergedExtensions: Record, executionParams: ExecutionParams) => Record; dataLoaderOptions?: DataLoader.Options; } export interface SubschemaConfig { schema: GraphQLSchema; createProxyingResolver?: CreateProxyingResolverFn; transforms?: Array; merge?: Record; rootValue?: Record; executor?: Executor; subscriber?: Subscriber; batch?: boolean; batchingOptions?: BatchingOptions; } export interface MergedTypeConfig extends MergedTypeResolverOptions { selectionSet?: string; fields?: Record; computedFields?: Record; 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; } export declare type MergedTypeResolver = (originalResult: any, context: Record, info: GraphQLResolveInfo, subschema: GraphQLSchema | SubschemaConfig, selectionSet: SelectionSetNode, key?: any) => any; export interface StitchingInfo { subschemaMap: Map; selectionSetsByField: Record>; dynamicSelectionSetsByField: Record SelectionSetNode>>>; mergedTypes: Record; } export interface ExternalObject { key: any; [OBJECT_SUBSCHEMA_SYMBOL]: GraphQLSchema | SubschemaConfig; [FIELD_SUBSCHEMA_MAP_SYMBOL]: Record; [UNPATHED_ERRORS_SYMBOL]: Array; }