/
graphql.ts
79 lines (65 loc) 路 2.6 KB
/
graphql.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
import type { Trace } from '@apollo/usage-reporting-protobuf';
import type {
DocumentNode,
FormattedExecutionResult,
GraphQLError,
GraphQLSchema,
OperationDefinitionNode,
} from 'graphql';
import type { CachePolicy } from '@apollo/cache-control-types';
import type { BaseContext } from './context';
import type { HTTPGraphQLHead, HTTPGraphQLRequest } from './http';
import type { ApolloServer } from '../ApolloServer';
export interface GraphQLRequest {
query?: string;
operationName?: string;
variables?: VariableValues;
extensions?: Record<string, any>;
http?: HTTPGraphQLRequest;
}
export type VariableValues = { [name: string]: any };
export interface GraphQLResponse {
// TODO(AS4): for incremental delivery, maybe we'll have an iterator here
// instead of a single result?
result: FormattedExecutionResult;
http: HTTPGraphQLHead;
}
export interface GraphQLRequestMetrics {
// It would be more accurate to call this fieldLevelInstrumentation (it is
// true if the hook of that name returns truthy) but for backwards
// compatibility we keep this name (this field is read by `@apollo/gateway` to
// decide whether or not to send the apollo-federation-include-trace header).
captureTraces?: boolean;
persistedQueryHit?: boolean;
persistedQueryRegister?: boolean;
responseCacheHit?: boolean;
forbiddenOperation?: boolean;
registeredOperation?: boolean;
startHrTime?: [number, number];
queryPlanTrace?: Trace.QueryPlanNode;
}
export interface GraphQLRequestContext<TContext extends BaseContext> {
readonly server: ApolloServer<TContext>;
readonly request: GraphQLRequest;
readonly response: GraphQLResponse;
readonly schema: GraphQLSchema;
readonly contextValue: TContext;
readonly queryHash?: string;
readonly document?: DocumentNode;
readonly source?: string;
// `operationName` is set based on the operation AST, so it is defined even if
// no `request.operationName` was passed in. It will be set to `null` for an
// anonymous operation, or if `requestName.operationName` was passed in but
// doesn't resolve to an operation in the document.
readonly operationName?: string | null;
readonly operation?: OperationDefinitionNode;
/**
* Unformatted errors which have occurred during the request. Note that these
* are present earlier in the request pipeline and differ from **formatted**
* errors which are the result of running the user-configurable `formatError`
* transformation function over specific errors.
*/
readonly errors?: ReadonlyArray<GraphQLError>;
readonly metrics: GraphQLRequestMetrics;
readonly overallCachePolicy: CachePolicy;
}