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