-
Notifications
You must be signed in to change notification settings - Fork 2k
/
graphqlOptions.ts
87 lines (82 loc) · 3.04 KB
/
graphqlOptions.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
import {
GraphQLSchema,
ValidationContext,
GraphQLFieldResolver,
DocumentNode,
GraphQLError,
GraphQLFormattedError,
} from 'graphql';
import { GraphQLExtension } from 'graphql-extensions';
import { CacheControlExtensionOptions } from 'apollo-cache-control';
import { KeyValueCache, InMemoryLRUCache } from 'apollo-server-caching';
import { DataSource } from 'apollo-datasource';
import { ApolloServerPlugin } from 'apollo-server-plugin-base';
import { GraphQLParseOptions } from 'graphql-tools';
import {
GraphQLExecutor,
ValueOrPromise,
GraphQLResponse,
GraphQLRequestContext,
} from 'apollo-server-types';
/*
* GraphQLServerOptions
*
* - schema: an executable GraphQL schema used to fulfill requests.
* - (optional) formatError: Formatting function applied to all errors before response is sent
* - (optional) rootValue: rootValue passed to GraphQL execution, or a function to resolving the rootValue from the DocumentNode
* - (optional) context: the context passed to GraphQL execution
* - (optional) validationRules: extra validation rules applied to requests
* - (optional) formatResponse: a function applied to each graphQL execution result
* - (optional) fieldResolver: a custom default field resolver
* - (optional) debug: a boolean that will print additional debug logging if execution errors occur
* - (optional) extensions: an array of functions which create GraphQLExtensions (each GraphQLExtension object is used for one request)
* - (optional) parseOptions: options to pass when parsing schemas and queries
* - (optional) reporting: set if we are directly reporting to Engine
*
*/
export interface GraphQLServerOptions<
TContext = Record<string, any>,
TRootValue = any
> {
schema: GraphQLSchema;
formatError?: (error: GraphQLError) => GraphQLFormattedError;
rootValue?: ((parsedQuery: DocumentNode) => TRootValue) | TRootValue;
context?: TContext | (() => never);
validationRules?: Array<(context: ValidationContext) => any>;
executor?: GraphQLExecutor;
formatResponse?: (
response: GraphQLResponse | null,
requestContext: GraphQLRequestContext<TContext>,
) => GraphQLResponse
fieldResolver?: GraphQLFieldResolver<any, TContext>;
debug?: boolean;
tracing?: boolean;
cacheControl?: CacheControlExtensionOptions;
extensions?: Array<() => GraphQLExtension>;
dataSources?: () => DataSources<TContext>;
cache?: KeyValueCache;
persistedQueries?: PersistedQueryOptions;
plugins?: ApolloServerPlugin[];
documentStore?: InMemoryLRUCache<DocumentNode>;
parseOptions?: GraphQLParseOptions;
reporting?: boolean;
}
export type DataSources<TContext> = {
[name: string]: DataSource<TContext>;
};
export interface PersistedQueryOptions {
cache: KeyValueCache;
}
export default GraphQLServerOptions;
export async function resolveGraphqlOptions(
options:
| GraphQLServerOptions
| ((...args: Array<any>) => ValueOrPromise<GraphQLServerOptions>),
...args: Array<any>
): Promise<GraphQLServerOptions> {
if (typeof options === 'function') {
return await options(...args);
} else {
return options;
}
}