forked from mercurius-js/mercurius
-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.d.ts
155 lines (148 loc) · 4.52 KB
/
index.d.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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
import fastify, {
FastifyError,
FastifyReply,
FastifyRequest,
RegisterOptions
} from "fastify"
import { IResolvers } from "graphql-tools";
import { Server, IncomingMessage, ServerResponse } from "http";
import { Http2Server, Http2ServerRequest, Http2ServerResponse } from 'http2';
import graphql, { GraphQLSchema, GraphQLError, Source, DocumentNode, ExecutionResult } from 'graphql';
declare namespace FastifyGQL {
export interface Plugin<HttpResponse> {
/**
* Extend existing schema
* @param schema graphql schema
*/
extendSchema(schema: string | Source | DocumentNode): void;
/**
* Define additional resolvers
* @param resolvers object with resolver functions
*/
defineResolvers(resolvers: IResolvers): void;
/**
* Define data loaders
* @param loaders object with data loader functions
*/
defineLoaders(loaders: {
[key: string]: {
[key: string]: (
queries: Array<{
obj: any,
params: any
}>,
context: {
reply: FastifyReply<HttpResponse>
}) => any
}
}): void;
}
export interface Options<
HttpServer extends (Server | Http2Server),
HttpRequest extends (IncomingMessage | Http2ServerRequest),
HttpResponse extends (ServerResponse | Http2ServerResponse)
> extends RegisterOptions<HttpServer, HttpRequest, HttpResponse> {
/**
* The GraphQL schema. String schema will be parsed
*/
schema: GraphQLSchema | string,
/**
* Object with resolver functions
*/
resolvers: IResolvers,
/**
* Object with data loader functions
*/
loaders?: {
[key: string]: {
[key: string]: (
queries: Array<{
obj: any,
params: any
}>,
context: {
reply: FastifyReply<HttpResponse>
}) => any
}
},
/**
* Serve GraphiQL on /graphiql if true or 'graphiql', or GraphQL IDE on /playground if 'playground' if routes is true
*/
graphiql?: boolean | string,
/**
* The minimum number of execution a query needs to be executed before being jit'ed.
* @default true
*/
jit?: number,
/**
* A graphql endpoint is exposed at /graphql when true
* @default true
*/
routes?: boolean,
/**
* Change the route prefix of the graphql endpoint if set
*/
prefix?: string,
/**
* Add the empty Mutation definition if schema is not defined
* @default false
*/
defineMutation?: boolean,
/**
* Change the default error handler (Default: true).
* If a custom error handler is defined, it should return the standardized response format according to [GraphQL spec](https://graphql.org/learn/serving-over-http/#response).
* @default true
*/
errorHandler?: boolean | ((
error: FastifyError,
request: FastifyRequest<HttpRequest>,
reply: FastifyReply<HttpResponse>
) => ExecutionResult),
/**
* The maximum depth allowed for a single query.
*/
queryDepth?: number,
context?: (request: FastifyRequest<HttpRequest>, reply: FastifyReply<HttpResponse>) => Promise<any>,
/**
* Enable subscription support when options are provided. [`emitter`](https://github.com/mcollina/mqemitter) property is required when subscriptions is an object. (Default false)
*/
subscription?: boolean | {
emitter?: object,
verifyClient?: (
info: object,
next: (result: boolean) => void
) => void
}
}
}
declare module "fastify" {
interface FastifyInstance<HttpServer, HttpRequest, HttpResponse> {
/**
* GraphQL plugin
*/
graphql: FastifyGQL.Plugin<HttpResponse>;
}
interface FastifyReply<HttpResponse> {
/**
* @param source GraphQL query string
* @param context request context
* @param variables request variables which will get passed to the executor
* @param operationName specify which operation will be run
*/
graphql(
source: string,
context?: any,
variables?: { [key: string]: any },
operationName?: string
): FastifyReply<HttpResponse>;
}
}
declare function fastifyGQL<
HttpServer extends (Server | Http2Server),
HttpRequest extends (IncomingMessage | Http2ServerRequest),
HttpResponse extends (ServerResponse | Http2ServerResponse),
Options = FastifyGQL.Options<HttpServer, HttpRequest, HttpResponse>
>(
fastify: fastify.FastifyInstance<HttpServer, HttpRequest, HttpResponse>,
opts: Options): void;
export = fastifyGQL;