grafserv 0.0.1-0.2 → 0.0.1-0.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/CHANGELOG.md +220 -0
  2. package/README.md +248 -3
  3. package/dist/accept.d.ts +8 -0
  4. package/dist/accept.d.ts.map +1 -0
  5. package/dist/accept.js +419 -0
  6. package/dist/accept.js.map +1 -0
  7. package/dist/core/base.d.ts +38 -0
  8. package/dist/core/base.d.ts.map +1 -0
  9. package/dist/core/base.js +440 -0
  10. package/dist/core/base.js.map +1 -0
  11. package/dist/index.d.ts +2 -2
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +3 -3
  14. package/dist/index.js.map +1 -1
  15. package/dist/interfaces.d.ts +176 -23
  16. package/dist/interfaces.d.ts.map +1 -1
  17. package/dist/interfaces.js +2 -0
  18. package/dist/interfaces.js.map +1 -1
  19. package/dist/mapIterator.d.ts +2 -0
  20. package/dist/mapIterator.d.ts.map +1 -0
  21. package/dist/mapIterator.js +65 -0
  22. package/dist/mapIterator.js.map +1 -0
  23. package/dist/middleware/graphiql.d.ts +3 -3
  24. package/dist/middleware/graphiql.d.ts.map +1 -1
  25. package/dist/middleware/graphiql.js +14 -4
  26. package/dist/middleware/graphiql.js.map +1 -1
  27. package/dist/middleware/graphql.d.ts +8 -3
  28. package/dist/middleware/graphql.d.ts.map +1 -1
  29. package/dist/middleware/graphql.js +325 -23
  30. package/dist/middleware/graphql.js.map +1 -1
  31. package/dist/options.d.ts +23 -0
  32. package/dist/options.d.ts.map +1 -0
  33. package/dist/options.js +114 -0
  34. package/dist/options.js.map +1 -0
  35. package/dist/servers/express/v4/index.d.ts +24 -0
  36. package/dist/servers/express/v4/index.d.ts.map +1 -0
  37. package/dist/servers/express/v4/index.js +62 -0
  38. package/dist/servers/express/v4/index.js.map +1 -0
  39. package/dist/servers/fastify/v4/index.d.ts +21 -0
  40. package/dist/servers/fastify/v4/index.d.ts.map +1 -0
  41. package/dist/servers/fastify/v4/index.js +198 -0
  42. package/dist/servers/fastify/v4/index.js.map +1 -0
  43. package/dist/servers/koa/v2/index.d.ts +25 -0
  44. package/dist/servers/koa/v2/index.d.ts.map +1 -0
  45. package/dist/servers/koa/v2/index.js +137 -0
  46. package/dist/servers/koa/v2/index.js.map +1 -0
  47. package/dist/servers/node/index.d.ts +32 -0
  48. package/dist/servers/node/index.d.ts.map +1 -0
  49. package/dist/servers/node/index.js +269 -0
  50. package/dist/servers/node/index.js.map +1 -0
  51. package/dist/utils.d.ts +19 -0
  52. package/dist/utils.d.ts.map +1 -0
  53. package/dist/utils.js +145 -0
  54. package/dist/utils.js.map +1 -0
  55. package/package.json +42 -8
  56. package/dist/middleware/index.d.ts +0 -12
  57. package/dist/middleware/index.d.ts.map +0 -1
  58. package/dist/middleware/index.js +0 -431
  59. package/dist/middleware/index.js.map +0 -1
  60. package/dist/middleware/interfaces.d.ts +0 -40
  61. package/dist/middleware/interfaces.d.ts.map +0 -1
  62. package/dist/middleware/interfaces.js +0 -3
  63. package/dist/middleware/interfaces.js.map +0 -1
@@ -0,0 +1,269 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.attachWebsocketsToServer = exports.grafserv = exports.NodeGrafserv = exports.NodeGrafservBase = void 0;
4
+ const graphql_ws_1 = require("graphql-ws");
5
+ const node_querystring_1 = require("node:querystring");
6
+ const base_js_1 = require("../../core/base.js");
7
+ const utils_js_1 = require("../../utils.js");
8
+ class NodeGrafservBase extends base_js_1.GrafservBase {
9
+ constructor(config) {
10
+ super(config);
11
+ }
12
+ getDigest(dynamicOptions, req, res, isHTTPS) {
13
+ const reqUrl = req.url;
14
+ const qi = reqUrl.indexOf("?");
15
+ const path = qi >= 0 ? reqUrl.substring(0, qi) : reqUrl;
16
+ const search = qi >= 0 ? reqUrl.substring(qi + 1) : null;
17
+ return {
18
+ httpVersionMajor: req.httpVersionMajor,
19
+ httpVersionMinor: req.httpVersionMinor,
20
+ isSecure: isHTTPS,
21
+ method: req.method,
22
+ path,
23
+ headers: (0, utils_js_1.processHeaders)(req.headers),
24
+ getQueryParams() {
25
+ const queryParams = search
26
+ ? (0, node_querystring_1.parse)(search)
27
+ : Object.create(null);
28
+ return queryParams;
29
+ },
30
+ getBody() {
31
+ return (0, utils_js_1.getBodyFromRequest)(req, dynamicOptions.maxRequestLength);
32
+ },
33
+ requestContext: {
34
+ node: {
35
+ req,
36
+ res,
37
+ },
38
+ },
39
+ };
40
+ }
41
+ /**
42
+ * @deprecated Please user serv.addTo instead, so that websockets can be automatically supported
43
+ */
44
+ createHandler(isHTTPS = false) {
45
+ return this._createHandler(isHTTPS);
46
+ }
47
+ _createHandler(isHTTPS = false) {
48
+ const dynamicOptions = this.dynamicOptions;
49
+ return async (req, res, next) => {
50
+ try {
51
+ const request = this.getDigest(dynamicOptions, req, res, isHTTPS);
52
+ const result = await this.processRequest(request);
53
+ if (result === null) {
54
+ if (typeof next === "function") {
55
+ return next();
56
+ }
57
+ else {
58
+ const payload = Buffer.from(`Could not process ${req.method} request to ${req.url} ─ please POST requests to ${dynamicOptions.graphqlPath}`, "utf8");
59
+ res.writeHead(404, {
60
+ "Content-Type": "text/plain; charset=utf-8",
61
+ "Content-Length": payload.length,
62
+ });
63
+ res.end(payload);
64
+ return;
65
+ }
66
+ }
67
+ switch (result.type) {
68
+ case "error": {
69
+ if (result.error.safeMessage && result.error.statusCode) {
70
+ const payload = Buffer.from(result.error.message, "utf8");
71
+ res.writeHead(result.statusCode, {
72
+ "Content-Type": "text/plain; charset=utf-8",
73
+ "Content-Length": payload.length,
74
+ });
75
+ res.end(payload);
76
+ return;
77
+ }
78
+ else if (typeof next === "function") {
79
+ return next(result.error);
80
+ }
81
+ else {
82
+ // TODO: catch all the code paths that lead here!
83
+ const payload = Buffer.from("An error occurred", "utf8");
84
+ res.writeHead(result.statusCode, {
85
+ "Content-Type": "text/plain; charset=utf-8",
86
+ "Content-Length": payload.length,
87
+ });
88
+ res.end(payload);
89
+ return;
90
+ }
91
+ }
92
+ case "buffer": {
93
+ const { statusCode, headers, buffer } = result;
94
+ res.writeHead(statusCode, headers);
95
+ res.end(buffer);
96
+ return;
97
+ }
98
+ case "json": {
99
+ const { statusCode, headers, json } = result;
100
+ const buffer = Buffer.from(JSON.stringify(json), "utf8");
101
+ headers["Content-Length"] = String(buffer.length);
102
+ res.writeHead(statusCode, headers);
103
+ res.end(buffer);
104
+ return;
105
+ }
106
+ case "noContent": {
107
+ const { statusCode, headers } = result;
108
+ res.writeHead(statusCode, headers);
109
+ res.end();
110
+ return;
111
+ }
112
+ case "bufferStream": {
113
+ const { statusCode, headers, lowLatency, bufferIterator } = result;
114
+ if (lowLatency) {
115
+ req.socket.setTimeout(0);
116
+ req.socket.setNoDelay(true);
117
+ req.socket.setKeepAlive(true);
118
+ }
119
+ res.writeHead(statusCode, headers);
120
+ // Clean up when connection closes.
121
+ const cleanup = () => {
122
+ try {
123
+ bufferIterator.return?.();
124
+ }
125
+ catch {
126
+ /* nom nom nom */
127
+ }
128
+ req.removeListener("close", cleanup);
129
+ req.removeListener("finish", cleanup);
130
+ req.removeListener("error", cleanup);
131
+ };
132
+ req.on("close", cleanup);
133
+ req.on("finish", cleanup);
134
+ req.on("error", cleanup);
135
+ // https://github.com/expressjs/compression#server-sent-events
136
+ const flush = lowLatency
137
+ ? typeof res.flush === "function"
138
+ ? res.flush.bind(res)
139
+ : typeof res.flushHeaders === "function"
140
+ ? res.flushHeaders.bind(res)
141
+ : null
142
+ : null;
143
+ try {
144
+ for await (const buffer of bufferIterator) {
145
+ const bufferIsBelowWatermark = res.write(buffer);
146
+ if (flush) {
147
+ flush();
148
+ }
149
+ if (!bufferIsBelowWatermark) {
150
+ // Wait for drain before pumping more data through
151
+ await new Promise((resolve) => res.once("drain", resolve));
152
+ }
153
+ }
154
+ }
155
+ catch (e) {
156
+ console.error(`Error occurred during stream; swallowing error.`, e);
157
+ }
158
+ finally {
159
+ res.end();
160
+ }
161
+ return;
162
+ }
163
+ default: {
164
+ const never = result;
165
+ console.log("Unhandled:");
166
+ console.dir(never);
167
+ const payload = Buffer.from("Server hasn't implemented this yet", "utf8");
168
+ res.writeHead(503, { "Content-Length": payload.length });
169
+ res.end(payload);
170
+ return;
171
+ }
172
+ }
173
+ }
174
+ catch (e) {
175
+ console.error("Unexpected error occurred:");
176
+ console.error(e);
177
+ if (typeof next === "function") {
178
+ next(e);
179
+ }
180
+ else {
181
+ const text = "Unknown error occurred";
182
+ res.writeHead(500, {
183
+ "Content-Type": "text/plain",
184
+ "Content-Length": text.length,
185
+ });
186
+ res.end(text);
187
+ }
188
+ }
189
+ };
190
+ }
191
+ }
192
+ exports.NodeGrafservBase = NodeGrafservBase;
193
+ class NodeGrafserv extends NodeGrafservBase {
194
+ async addTo(server) {
195
+ const handler = this._createHandler();
196
+ server.on("request", handler);
197
+ this.onRelease(() => {
198
+ server.off("request", handler);
199
+ });
200
+ if (this.resolvedPreset.grafserv?.websockets) {
201
+ attachWebsocketsToServer(this, server);
202
+ }
203
+ }
204
+ }
205
+ exports.NodeGrafserv = NodeGrafserv;
206
+ function grafserv(config) {
207
+ return new NodeGrafserv(config);
208
+ }
209
+ exports.grafserv = grafserv;
210
+ async function attachWebsocketsToServer(instance, server) {
211
+ const graphqlPath = instance.dynamicOptions.graphqlPath;
212
+ const ws = await import("ws");
213
+ const { WebSocketServer } = ws;
214
+ const onUpgrade = (req, socket, head) => wsServer.handleUpgrade(req, socket, head, function done(ws) {
215
+ wsServer.emit("connection", ws, req);
216
+ });
217
+ const onConnection = (socket, request) => {
218
+ const fullUrl = request.url;
219
+ if (!fullUrl) {
220
+ return;
221
+ }
222
+ const q = fullUrl.indexOf("?");
223
+ const url = q >= 0 ? fullUrl.substring(0, q) : fullUrl;
224
+ if (url === graphqlPath) {
225
+ // a new socket opened, let graphql-ws take over
226
+ const closed = graphqlWsServer.opened({
227
+ protocol: socket.protocol,
228
+ send: (data) => new Promise((resolve, reject) => {
229
+ socket.send(data, (err) => (err ? reject(err) : resolve()));
230
+ }),
231
+ close: (code, reason) => socket.close(code, reason),
232
+ onMessage: (cb) => socket.on("message", async (event) => {
233
+ try {
234
+ // wait for the the operation to complete
235
+ // - if init message, waits for connect
236
+ // - if query/mutation, waits for result
237
+ // - if subscription, waits for complete
238
+ await cb(event.toString());
239
+ }
240
+ catch (err) {
241
+ try {
242
+ // all errors that could be thrown during the
243
+ // execution of operations will be caught here
244
+ socket.close(graphql_ws_1.CloseCode.InternalServerError, err.message);
245
+ }
246
+ catch {
247
+ /*noop*/
248
+ }
249
+ }
250
+ }),
251
+ },
252
+ // pass values to the `extra` field in the context
253
+ { socket, request });
254
+ // notify server that the socket closed
255
+ socket.once("close", closed);
256
+ }
257
+ };
258
+ const graphqlWsServer = (0, graphql_ws_1.makeServer)((0, utils_js_1.makeGraphQLWSConfig)(instance));
259
+ const wsServer = new WebSocketServer({ noServer: true });
260
+ server.on("upgrade", onUpgrade);
261
+ wsServer.on("connection", onConnection);
262
+ instance.onRelease(() => {
263
+ wsServer.off("connection", onConnection);
264
+ server.off("upgrade", onUpgrade);
265
+ wsServer.close();
266
+ });
267
+ }
268
+ exports.attachWebsocketsToServer = attachWebsocketsToServer;
269
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/servers/node/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /// <reference types="node" />
2
+ import type { AsyncExecutionResult, ExecutionResult } from "graphql";
3
+ import type { ServerOptions } from "graphql-ws";
4
+ import type { Readable } from "node:stream";
5
+ import type { GrafservBase } from "./index.js";
6
+ import type { GrafservBody, NormalizedRequestDigest, RequestDigest } from "./interfaces.js";
7
+ export declare function handleErrors(payload: ExecutionResult | AsyncExecutionResult): void;
8
+ type IncomingHttpHeaders = Record<string, string | string[] | undefined>;
9
+ export declare function processHeaders(headers: IncomingHttpHeaders): Record<string, string>;
10
+ export declare function getBodyFromRequest(req: Readable, maxLength: number): Promise<GrafservBody>;
11
+ export declare function getBodyFromFrameworkBody(body: unknown): GrafservBody;
12
+ export declare function memo<T>(fn: () => T): () => T;
13
+ export declare function normalizeRequest(request: RequestDigest | NormalizedRequestDigest): NormalizedRequestDigest;
14
+ export declare function httpError(statusCode: number, message: string): Error & {
15
+ statusCode: number;
16
+ };
17
+ export declare function makeGraphQLWSConfig(instance: GrafservBase): ServerOptions;
18
+ export {};
19
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";AACA,OAAO,KAAK,EACV,oBAAoB,EAEpB,eAAe,EAChB,MAAM,SAAS,CAAC;AAEjB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,KAAK,EACV,YAAY,EAEZ,uBAAuB,EACvB,aAAa,EACd,MAAM,iBAAiB,CAAC;AAGzB,wBAAgB,YAAY,CAC1B,OAAO,EAAE,eAAe,GAAG,oBAAoB,GAC9C,IAAI,CAaN;AAGD,KAAK,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC;AAEzE,wBAAgB,cAAc,CAC5B,OAAO,EAAE,mBAAmB,GAC3B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAcxB;AAED,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,QAAQ,EACb,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,YAAY,CAAC,CAqBvB;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,OAAO,GAAG,YAAY,CAqBpE;AAED,wBAAgB,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,CAY5C;AAED,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,aAAa,GAAG,uBAAuB,GAC/C,uBAAuB,CAoBzB;AAED,wBAAgB,SAAS,CACvB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,GACd,KAAK,GAAG;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,CAEhC;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,YAAY,GAAG,aAAa,CA6BzE"}
package/dist/utils.js ADDED
@@ -0,0 +1,145 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.makeGraphQLWSConfig = exports.httpError = exports.normalizeRequest = exports.memo = exports.getBodyFromFrameworkBody = exports.getBodyFromRequest = exports.processHeaders = exports.handleErrors = void 0;
4
+ const grafast_1 = require("grafast");
5
+ const graphql_1 = require("graphql");
6
+ const interfaces_js_1 = require("./interfaces.js");
7
+ function handleErrors(payload) {
8
+ if ("errors" in payload && payload.errors) {
9
+ payload.errors = payload.errors.map((e) => {
10
+ const obj = e instanceof graphql_1.GraphQLError
11
+ ? e.toJSON()
12
+ : { message: e.message, ...e };
13
+ return Object.assign(obj, {
14
+ message: (0, grafast_1.stripAnsi)(obj.message),
15
+ extensions: { stack: (0, grafast_1.stripAnsi)(e.stack ?? "").split("\n") },
16
+ });
17
+ });
18
+ }
19
+ }
20
+ exports.handleErrors = handleErrors;
21
+ function processHeaders(headers) {
22
+ const headerDigest = Object.create(null);
23
+ for (const key in headers) {
24
+ const val = headers[key];
25
+ if (val == null) {
26
+ continue;
27
+ }
28
+ if (typeof val === "string") {
29
+ headerDigest[key] = val;
30
+ }
31
+ else {
32
+ headerDigest[key] = val.join("\n");
33
+ }
34
+ }
35
+ return headerDigest;
36
+ }
37
+ exports.processHeaders = processHeaders;
38
+ function getBodyFromRequest(req /* IncomingMessage */, maxLength) {
39
+ return new Promise((resolve, reject) => {
40
+ const chunks = [];
41
+ let len = 0;
42
+ const handleData = (chunk) => {
43
+ chunks.push(chunk);
44
+ len += chunk.length;
45
+ if (len > maxLength) {
46
+ req.off("end", done);
47
+ req.off("error", reject);
48
+ req.off("data", handleData);
49
+ reject(httpError(413, "Too much data"));
50
+ }
51
+ };
52
+ const done = () => {
53
+ resolve({ type: "buffer", buffer: Buffer.concat(chunks) });
54
+ };
55
+ req.on("end", done);
56
+ req.on("error", reject);
57
+ req.on("data", handleData);
58
+ });
59
+ }
60
+ exports.getBodyFromRequest = getBodyFromRequest;
61
+ function getBodyFromFrameworkBody(body) {
62
+ if (typeof body === "string") {
63
+ return {
64
+ type: "text",
65
+ text: body,
66
+ };
67
+ }
68
+ else if (Buffer.isBuffer(body)) {
69
+ return {
70
+ type: "buffer",
71
+ buffer: body,
72
+ };
73
+ }
74
+ else if (typeof body === "object" && body != null) {
75
+ return {
76
+ type: "json",
77
+ json: body,
78
+ };
79
+ }
80
+ else {
81
+ throw new Error(`Grafserv Express adaptor doesn't know how to interpret this request body`);
82
+ }
83
+ }
84
+ exports.getBodyFromFrameworkBody = getBodyFromFrameworkBody;
85
+ function memo(fn) {
86
+ let cache;
87
+ let called = false;
88
+ return function memoized() {
89
+ if (called) {
90
+ return cache;
91
+ }
92
+ else {
93
+ called = true;
94
+ cache = fn.call(this);
95
+ return cache;
96
+ }
97
+ };
98
+ }
99
+ exports.memo = memo;
100
+ function normalizeRequest(request) {
101
+ if (!request[interfaces_js_1.$$normalizedHeaders]) {
102
+ const r = request;
103
+ const normalized = Object.create(null);
104
+ for (const key in r.headers) {
105
+ normalized[key.toLowerCase()] = r.headers[key];
106
+ }
107
+ r[interfaces_js_1.$$normalizedHeaders] = normalized;
108
+ r.preferJSON = Boolean(r.preferJSON);
109
+ r.getHeader = (key) => normalized[key.toLowerCase()];
110
+ r.getBody = memo(r.getBody);
111
+ r.getQueryParams = memo(r.getQueryParams);
112
+ if (r.method === "HEAD") {
113
+ // Pretend that 'HEAD' requests are actually 'GET' requests; Node will
114
+ // take care of stripping the response body for us.
115
+ r.method = "GET";
116
+ }
117
+ }
118
+ return request;
119
+ }
120
+ exports.normalizeRequest = normalizeRequest;
121
+ function httpError(statusCode, message) {
122
+ return Object.assign(new Error(message), { statusCode, safeMessage: true });
123
+ }
124
+ exports.httpError = httpError;
125
+ function makeGraphQLWSConfig(instance) {
126
+ const { resolvedPreset, dynamicOptions: { maskExecutionResult }, } = instance;
127
+ return {
128
+ schema: async () => instance.getSchema(),
129
+ // PERF: we can remove the async/await and only use when context is async
130
+ execute: async (args) => {
131
+ await (0, grafast_1.hookArgs)(args, {
132
+ // TODO: we need to pass through some request context here
133
+ }, instance.resolvedPreset);
134
+ return maskExecutionResult(await (0, grafast_1.execute)(args, resolvedPreset));
135
+ },
136
+ subscribe: async (args) => {
137
+ await (0, grafast_1.hookArgs)(args, {
138
+ // TODO: we need to pass through some request context here
139
+ }, instance.resolvedPreset);
140
+ return maskExecutionResult(await (0, grafast_1.subscribe)(args, resolvedPreset));
141
+ },
142
+ };
143
+ }
144
+ exports.makeGraphQLWSConfig = makeGraphQLWSConfig;
145
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "grafserv",
3
- "version": "0.0.1-0.2",
3
+ "version": "0.0.1-0.21",
4
4
  "description": "A highly optimized server for GraphQL, powered by Grafast",
5
5
  "type": "commonjs",
6
6
  "main": "dist/index.js",
@@ -9,10 +9,27 @@
9
9
  ".": {
10
10
  "types": "./dist/index.d.ts",
11
11
  "default": "./dist/index.js"
12
+ },
13
+ "./node": {
14
+ "types": "./dist/servers/node/index.d.ts",
15
+ "default": "./dist/servers/node/index.js"
16
+ },
17
+ "./express/v4": {
18
+ "types": "./dist/servers/express/v4/index.d.ts",
19
+ "default": "./dist/servers/express/v4/index.js"
20
+ },
21
+ "./koa/v2": {
22
+ "types": "./dist/servers/koa/v2/index.d.ts",
23
+ "default": "./dist/servers/koa/v2/index.js"
24
+ },
25
+ "./fastify/v4": {
26
+ "types": "./dist/servers/fastify/v4/index.d.ts",
27
+ "default": "./dist/servers/fastify/v4/index.js"
12
28
  }
13
29
  },
14
30
  "scripts": {
15
- "prepack": "tsc -b"
31
+ "prepack": "tsc -b",
32
+ "test": "jest"
16
33
  },
17
34
  "repository": {
18
35
  "type": "git",
@@ -36,23 +53,40 @@
36
53
  "@graphile/lru": "^5.0.0-0.1",
37
54
  "debug": "^4.1.1",
38
55
  "eventemitter3": "^4.0.7",
39
- "graphile-config": "^0.0.1-0.0",
40
- "ruru": "^2.0.0-0.1",
56
+ "graphile-config": "^0.0.1-0.5",
57
+ "graphql-ws": "^5.11.3",
58
+ "ruru": "^2.0.0-0.10",
41
59
  "tslib": "^2.4.0"
42
60
  },
43
61
  "engines": {
44
62
  "node": ">=16.10"
45
63
  },
46
64
  "peerDependencies": {
47
- "grafast": "^0.0.1-0.2"
65
+ "grafast": "^0.0.1-0.19",
66
+ "graphql": "^16.1.0-experimental-stream-defer.6",
67
+ "ws": "^8.12.1"
68
+ },
69
+ "peerDependenciesMeta": {
70
+ "ws": {
71
+ "optional": true
72
+ }
48
73
  },
49
74
  "devDependencies": {
50
- "grafast": "^0.0.1-0.2",
75
+ "@types/express": "^4",
76
+ "@types/koa": "^2",
77
+ "@types/koa-bodyparser": "^4",
78
+ "@whatwg-node/fetch": "^0.8.1",
79
+ "express": "^4.18.2",
80
+ "fastify": "^4.12.0",
81
+ "grafast": "^0.0.1-0.19",
82
+ "graphql-http": "^1.16.0",
51
83
  "jest": "^28.1.0",
52
- "jest-serializer-graphql-schema": "^5.0.0-0.1",
84
+ "jest-serializer-graphql-schema": "^5.0.0-0.3",
85
+ "koa": "^2.14.1",
86
+ "koa-bodyparser": "^4.3.0",
53
87
  "nodemon": "^2.0.15",
54
88
  "ts-node": "^10.9.1",
55
- "typescript": "^4.8.1-rc"
89
+ "typescript": "^5.0.0-beta"
56
90
  },
57
91
  "files": [
58
92
  "dist",
@@ -1,12 +0,0 @@
1
- /// <reference types="node" />
2
- import type { PromiseOrDirect } from "grafast";
3
- import type { RequestListener } from "http";
4
- import type { ServerParams } from "../interfaces.js";
5
- export interface Grafserv {
6
- handler: RequestListener;
7
- release(): Promise<void>;
8
- onRelease(cb: () => PromiseOrDirect<void>): void;
9
- setParams(result: ServerParams): void;
10
- }
11
- export declare function grafserv(preset: GraphileConfig.Preset, initialParams?: PromiseOrDirect<ServerParams>): Grafserv;
12
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/middleware/index.ts"],"names":[],"mappings":";AACA,OAAO,KAAK,EAAY,eAAe,EAAqB,MAAM,SAAS,CAAC;AAS5E,OAAO,KAAK,EAAmB,eAAe,EAAkB,MAAM,MAAM,CAAC;AAE7E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAmErD,MAAM,WAAW,QAAQ;IAEvB,OAAO,EAAE,eAAe,CAAC;IACzB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,SAAS,CAAC,EAAE,EAAE,MAAM,eAAe,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACjD,SAAS,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC;CACvC;AAED,wBAAgB,QAAQ,CACtB,MAAM,EAAE,cAAc,CAAC,MAAM,EAC7B,aAAa,CAAC,EAAE,eAAe,CAAC,YAAY,CAAC,GAC5C,QAAQ,CAibV"}