1 | import { GraphQLSchema, GraphQLOutputType, SelectionSetNode, FieldNode, GraphQLResolveInfo, GraphQLFieldResolver, FragmentDefinitionNode, GraphQLObjectType, VariableDefinitionNode, OperationTypeNode, GraphQLError } from 'graphql';
|
2 | import DataLoader from 'dataloader';
|
3 | import { ExecutionRequest, ExecutionResult, Executor } from '@graphql-tools/utils';
|
4 | import { Subschema } from './Subschema';
|
5 | import { OBJECT_SUBSCHEMA_SYMBOL, FIELD_SUBSCHEMA_MAP_SYMBOL, UNPATHED_ERRORS_SYMBOL } from './symbols';
|
6 | import { TypeMap } from 'graphql/type/schema';
|
7 | export declare type SchemaTransform<TContext = Record<any, string>> = (originalWrappingSchema: GraphQLSchema, subschemaConfig: SubschemaConfig<any, any, any, TContext>, transformedSchema?: GraphQLSchema) => GraphQLSchema;
|
8 | export declare type RequestTransform<T = Record<string, any>> = (originalRequest: ExecutionRequest, delegationContext: DelegationContext, transformationContext: T) => ExecutionRequest;
|
9 | export declare type ResultTransform<T = Record<string, any>> = (originalResult: ExecutionResult, delegationContext: DelegationContext, transformationContext: T) => ExecutionResult;
|
10 | export interface Transform<T = any, TContext = Record<string, any>> {
|
11 | transformSchema?: SchemaTransform<TContext>;
|
12 | transformRequest?: RequestTransform<T>;
|
13 | transformResult?: ResultTransform<T>;
|
14 | }
|
15 | export 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 | }
|
31 | export 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 | }
|
49 | export interface IDelegateRequestOptions<TContext = Record<string, any>, TArgs = Record<string, any>> extends IDelegateToSchemaOptions<TContext, TArgs> {
|
50 | request: ExecutionRequest;
|
51 | }
|
52 | export 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 | }
|
62 | export 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 | }
|
78 | export 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 | }
|
89 | export interface ICreateProxyingResolverOptions<TContext = Record<string, any>> {
|
90 | subschemaConfig: SubschemaConfig<any, any, any, TContext>;
|
91 | transformedSchema?: GraphQLSchema;
|
92 | operation?: OperationTypeNode;
|
93 | fieldName?: string;
|
94 | }
|
95 | export declare type CreateProxyingResolverFn<TContext = Record<string, any>> = (options: ICreateProxyingResolverOptions<TContext>) => GraphQLFieldResolver<any, TContext>;
|
96 | export 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 | }
|
100 | export 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 | }
|
110 | export 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 | }
|
118 | export 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 | }
|
123 | export 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 | }
|
129 | export interface MergedFieldConfig {
|
130 | selectionSet?: string;
|
131 | computed?: boolean;
|
132 | canonical?: boolean;
|
133 | }
|
134 | export 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;
|
135 | export 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 | }
|
142 | export 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 | }
|