UNPKG

7.18 kBTypeScriptView Raw
1import { GraphQLSchema, GraphQLOutputType, SelectionSetNode, FieldNode, GraphQLResolveInfo, GraphQLFieldResolver, FragmentDefinitionNode, GraphQLObjectType, VariableDefinitionNode, OperationTypeNode, GraphQLError } from 'graphql';
2import DataLoader from 'dataloader';
3import { ExecutionParams, ExecutionResult, Executor, Request, Subscriber, TypeMap } from '@graphql-tools/utils';
4import { Subschema } from './Subschema';
5import { OBJECT_SUBSCHEMA_SYMBOL, FIELD_SUBSCHEMA_MAP_SYMBOL, UNPATHED_ERRORS_SYMBOL } from './symbols';
6export declare type SchemaTransform = (originalWrappingSchema: GraphQLSchema, subschemaConfig: SubschemaConfig, transformedSchema?: GraphQLSchema) => GraphQLSchema;
7export declare type RequestTransform<T = Record<string, any>> = (originalRequest: Request, delegationContext: DelegationContext, transformationContext: T) => Request;
8export declare type ResultTransform<T = Record<string, any>> = (originalResult: ExecutionResult, delegationContext: DelegationContext, transformationContext: T) => ExecutionResult;
9export interface Transform<T = Record<string, any>> {
10 transformSchema?: SchemaTransform;
11 transformRequest?: RequestTransform<T>;
12 transformResult?: ResultTransform<T>;
13}
14export 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}
28export declare type DelegationBinding = (delegationContext: DelegationContext) => Array<Transform>;
29export 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}
48export interface IDelegateRequestOptions<TContext = Record<string, any>, TArgs = Record<string, any>> extends Omit<IDelegateToSchemaOptions<TContext, TArgs>, 'info'> {
49 request: Request;
50 info?: GraphQLResolveInfo;
51}
52export interface ICreateRequestFromInfo {
53 info: GraphQLResolveInfo;
54 operationName?: string;
55 operation: OperationTypeNode;
56 fieldName: string;
57 selectionSet?: SelectionSetNode;
58 fieldNodes?: ReadonlyArray<FieldNode>;
59}
60export 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}
73export 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}
84export interface ICreateProxyingResolverOptions<TContext = Record<string, any>> {
85 subschemaConfig: SubschemaConfig<any, any, any, TContext>;
86 transformedSchema?: GraphQLSchema;
87 operation?: OperationTypeNode;
88 fieldName?: string;
89}
90export declare type CreateProxyingResolverFn<TContext = Record<string, any>> = (options: ICreateProxyingResolverOptions<TContext>) => GraphQLFieldResolver<any, TContext>;
91export 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}
95export 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}
106export 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}
114export 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}
119export 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}
125export interface MergedFieldConfig {
126 selectionSet?: string;
127 computed?: boolean;
128 canonical?: boolean;
129}
130export 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;
131export 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}
138export 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}