UNPKG

7.57 kBTypeScriptView Raw
1import { GraphQLSchema, GraphQLOutputType, SelectionSetNode, FieldNode, GraphQLResolveInfo, GraphQLFieldResolver, FragmentDefinitionNode, GraphQLObjectType, VariableDefinitionNode, OperationTypeNode, GraphQLError } from 'graphql';
2import DataLoader from 'dataloader';
3import { ExecutionRequest, ExecutionResult, Executor } from '@graphql-tools/utils';
4import { Subschema } from './Subschema';
5import { OBJECT_SUBSCHEMA_SYMBOL, FIELD_SUBSCHEMA_MAP_SYMBOL, UNPATHED_ERRORS_SYMBOL } from './symbols';
6import { TypeMap } from 'graphql/type/schema';
7export declare type SchemaTransform<TContext = Record<any, string>> = (originalWrappingSchema: GraphQLSchema, subschemaConfig: SubschemaConfig<any, any, any, TContext>, transformedSchema?: GraphQLSchema) => GraphQLSchema;
8export declare type RequestTransform<T = Record<string, any>> = (originalRequest: ExecutionRequest, delegationContext: DelegationContext, transformationContext: T) => ExecutionRequest;
9export declare type ResultTransform<T = Record<string, any>> = (originalResult: ExecutionResult, delegationContext: DelegationContext, transformationContext: T) => ExecutionResult;
10export interface Transform<T = any, TContext = Record<string, any>> {
11 transformSchema?: SchemaTransform<TContext>;
12 transformRequest?: RequestTransform<T>;
13 transformResult?: ResultTransform<T>;
14}
15export interface DelegationContext<TContext = Record<string, any>> {
16 subschema: GraphQLSchema | SubschemaConfig<any, any, any, TContext>;
17 subschemaConfig?: SubschemaConfig<any, any, any, TContext>;
18 targetSchema: GraphQLSchema;
19 operation: OperationTypeNode;
20 fieldName: string;
21 args?: Record<string, any>;
22 context?: TContext;
23 info?: GraphQLResolveInfo;
24 returnType: GraphQLOutputType;
25 onLocatedError?: (originalError: GraphQLError) => GraphQLError;
26 rootValue?: any;
27 transforms: Array<Transform<any, TContext>>;
28 transformedSchema: GraphQLSchema;
29 skipTypeMerging: boolean;
30}
31export interface IDelegateToSchemaOptions<TContext = Record<string, any>, TArgs = Record<string, any>> {
32 schema: GraphQLSchema | SubschemaConfig<any, any, any, TContext>;
33 operationName?: string;
34 operation?: OperationTypeNode;
35 fieldName?: string;
36 returnType?: GraphQLOutputType;
37 onLocatedError?: (originalError: GraphQLError) => GraphQLError;
38 args?: TArgs;
39 selectionSet?: SelectionSetNode;
40 fieldNodes?: ReadonlyArray<FieldNode>;
41 context?: TContext;
42 info: GraphQLResolveInfo;
43 rootValue?: any;
44 transforms?: Array<Transform<any, TContext>>;
45 transformedSchema?: GraphQLSchema;
46 validateRequest?: boolean;
47 skipTypeMerging?: boolean;
48}
49export interface IDelegateRequestOptions<TContext = Record<string, any>, TArgs = Record<string, any>> extends IDelegateToSchemaOptions<TContext, TArgs> {
50 request: ExecutionRequest;
51}
52export interface ICreateRequestFromInfo {
53 info: GraphQLResolveInfo;
54 rootValue?: any;
55 operationName?: string;
56 operation?: OperationTypeNode;
57 fieldName?: string;
58 selectionSet?: SelectionSetNode;
59 fieldNodes?: ReadonlyArray<FieldNode>;
60 context?: any;
61}
62export interface ICreateRequest {
63 sourceSchema?: GraphQLSchema;
64 sourceParentType?: GraphQLObjectType;
65 sourceFieldName?: string;
66 fragments?: Record<string, FragmentDefinitionNode>;
67 variableDefinitions?: ReadonlyArray<VariableDefinitionNode>;
68 variableValues?: Record<string, any>;
69 targetOperation: OperationTypeNode;
70 targetRootValue?: any;
71 targetOperationName?: string;
72 targetFieldName: string;
73 selectionSet?: SelectionSetNode;
74 fieldNodes?: ReadonlyArray<FieldNode>;
75 context?: any;
76 info?: GraphQLResolveInfo;
77}
78export interface MergedTypeInfo<TContext = Record<string, any>> {
79 typeName: string;
80 selectionSet?: SelectionSetNode;
81 targetSubschemas: Map<Subschema<any, any, any, TContext>, Array<Subschema<any, any, any, TContext>>>;
82 uniqueFields: Record<string, Subschema<any, any, any, TContext>>;
83 nonUniqueFields: Record<string, Array<Subschema<any, any, any, TContext>>>;
84 typeMaps: Map<GraphQLSchema | SubschemaConfig<any, any, any, TContext>, TypeMap>;
85 selectionSets: Map<Subschema<any, any, any, TContext>, SelectionSetNode>;
86 fieldSelectionSets: Map<Subschema<any, any, any, TContext>, Record<string, SelectionSetNode>>;
87 resolvers: Map<Subschema<any, any, any, TContext>, MergedTypeResolver<TContext>>;
88}
89export interface ICreateProxyingResolverOptions<TContext = Record<string, any>> {
90 subschemaConfig: SubschemaConfig<any, any, any, TContext>;
91 transformedSchema?: GraphQLSchema;
92 operation?: OperationTypeNode;
93 fieldName?: string;
94}
95export declare type CreateProxyingResolverFn<TContext = Record<string, any>> = (options: ICreateProxyingResolverOptions<TContext>) => GraphQLFieldResolver<any, TContext>;
96export interface BatchingOptions<K = any, V = any, C = K> {
97 extensionsReducer?: (mergedExtensions: Record<string, any>, request: ExecutionRequest) => Record<string, any>;
98 dataLoaderOptions?: DataLoader.Options<K, V, C>;
99}
100export interface SubschemaConfig<K = any, V = any, C = K, TContext = Record<string, any>> {
101 schema: GraphQLSchema;
102 createProxyingResolver?: CreateProxyingResolverFn<TContext>;
103 rootValue?: any;
104 transforms?: Array<Transform<any, TContext>>;
105 merge?: Record<string, MergedTypeConfig<any, any, TContext>>;
106 executor?: Executor<TContext>;
107 batch?: boolean;
108 batchingOptions?: BatchingOptions<K, V, C>;
109}
110export interface MergedTypeConfig<K = any, V = any, TContext = Record<string, any>> extends MergedTypeEntryPoint<K, V, TContext> {
111 entryPoints?: Array<MergedTypeEntryPoint>;
112 fields?: Record<string, MergedFieldConfig>;
113 computedFields?: Record<string, {
114 selectionSet?: string;
115 }>;
116 canonical?: boolean;
117}
118export interface MergedTypeEntryPoint<K = any, V = any, TContext = Record<string, any>> extends MergedTypeResolverOptions<K, V> {
119 selectionSet?: string;
120 key?: (originalResult: any) => K;
121 resolve?: MergedTypeResolver<TContext>;
122}
123export interface MergedTypeResolverOptions<K = any, V = any> {
124 fieldName?: string;
125 args?: (originalResult: any) => Record<string, any>;
126 argsFromKeys?: (keys: ReadonlyArray<K>) => Record<string, any>;
127 valuesFromResults?: (results: any, keys: ReadonlyArray<K>) => Array<V>;
128}
129export interface MergedFieldConfig {
130 selectionSet?: string;
131 computed?: boolean;
132 canonical?: boolean;
133}
134export declare type MergedTypeResolver<TContext = Record<string, any>> = (originalResult: any, context: TContext, info: GraphQLResolveInfo, subschema: GraphQLSchema | SubschemaConfig<any, any, any, TContext>, selectionSet: SelectionSetNode, key?: any) => any;
135export interface StitchingInfo<TContext = Record<string, any>> {
136 subschemaMap: Map<GraphQLSchema | SubschemaConfig<any, any, any, TContext>, Subschema<any, any, any, TContext>>;
137 fieldNodesByType: Record<string, Array<FieldNode>>;
138 fieldNodesByField: Record<string, Record<string, Array<FieldNode>>>;
139 dynamicSelectionSetsByField: Record<string, Record<string, Array<(node: FieldNode) => SelectionSetNode>>>;
140 mergedTypes: Record<string, MergedTypeInfo<TContext>>;
141}
142export interface ExternalObject<TContext = Record<string, any>> {
143 __typename: string;
144 key: any;
145 [OBJECT_SUBSCHEMA_SYMBOL]: GraphQLSchema | SubschemaConfig<any, any, any, TContext>;
146 [FIELD_SUBSCHEMA_MAP_SYMBOL]: Record<string, GraphQLSchema | SubschemaConfig<any, any, any, TContext>>;
147 [UNPATHED_ERRORS_SYMBOL]: Array<GraphQLError>;
148}