@trpc/server 10.0.0-alpha.5 → 10.0.0-alpha.9
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.
- package/adapters/express/dist/trpc-server-adapters-express.cjs.dev.js +2 -1
- package/adapters/express/dist/trpc-server-adapters-express.cjs.prod.js +2 -1
- package/adapters/express/dist/trpc-server-adapters-express.esm.js +2 -1
- package/adapters/fastify/dist/trpc-server-adapters-fastify.cjs.d.ts +1 -0
- package/adapters/fastify/dist/trpc-server-adapters-fastify.cjs.dev.js +102 -0
- package/adapters/fastify/dist/trpc-server-adapters-fastify.cjs.js +7 -0
- package/adapters/fastify/dist/trpc-server-adapters-fastify.cjs.prod.js +102 -0
- package/adapters/fastify/dist/trpc-server-adapters-fastify.esm.js +97 -0
- package/adapters/fastify/index.d.ts +1 -0
- package/adapters/fastify/index.js +1 -0
- package/adapters/next/dist/trpc-server-adapters-next.cjs.dev.js +2 -1
- package/adapters/next/dist/trpc-server-adapters-next.cjs.prod.js +2 -1
- package/adapters/next/dist/trpc-server-adapters-next.esm.js +2 -1
- package/adapters/node-http/dist/trpc-server-adapters-node-http.cjs.dev.js +2 -1
- package/adapters/node-http/dist/trpc-server-adapters-node-http.cjs.prod.js +2 -1
- package/adapters/node-http/dist/trpc-server-adapters-node-http.esm.js +2 -1
- package/adapters/standalone/dist/trpc-server-adapters-standalone.cjs.dev.js +2 -1
- package/adapters/standalone/dist/trpc-server-adapters-standalone.cjs.prod.js +2 -1
- package/adapters/standalone/dist/trpc-server-adapters-standalone.esm.js +2 -1
- package/dist/adapters/express.js +3 -2
- package/dist/adapters/express.mjs +3 -2
- package/dist/adapters/fastify/fastifyRequestHandler.d.ts +13 -0
- package/dist/adapters/fastify/fastifyRequestHandler.d.ts.map +1 -0
- package/dist/adapters/fastify/fastifyTRPCPlugin.d.ts +12 -0
- package/dist/adapters/fastify/fastifyTRPCPlugin.d.ts.map +1 -0
- package/dist/adapters/fastify/index.d.ts +3 -0
- package/dist/adapters/fastify/index.d.ts.map +1 -0
- package/dist/adapters/fastify/index.js +102 -0
- package/dist/adapters/fastify/index.mjs +97 -0
- package/dist/adapters/fastify/index.ts.js +1 -0
- package/dist/adapters/next.js +2 -1
- package/dist/adapters/next.mjs +2 -1
- package/dist/adapters/node-http/index.js +2 -1
- package/dist/adapters/node-http/index.mjs +2 -1
- package/dist/adapters/standalone.js +3 -2
- package/dist/adapters/standalone.mjs +3 -2
- package/dist/index.js +9 -8
- package/dist/index.mjs +4 -3
- package/dist/nodeHTTPRequestHandler-17a5e0dd.mjs +106 -0
- package/dist/nodeHTTPRequestHandler-17b64c0e.js +108 -0
- package/dist/{nodeHTTPRequestHandler-d7c307d3.js → resolveHTTPResponse-087ce86a.js} +0 -103
- package/dist/{nodeHTTPRequestHandler-10e6d2f9.mjs → resolveHTTPResponse-9604d47d.mjs} +1 -103
- package/package.json +12 -3
- package/src/adapters/express.ts +1 -1
- package/src/adapters/fastify/fastifyRequestHandler.ts +79 -0
- package/src/adapters/fastify/fastifyTRPCPlugin.ts +48 -0
- package/src/adapters/fastify/index.ts +2 -0
- package/src/adapters/standalone.ts +1 -1
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { URLSearchParams } from 'url';
|
|
2
1
|
import { T as TRPCError, c as callProcedure, g as getErrorFromUnknown, t as transformTRPCResponse } from './transformTRPCResponse-76e0c91e.mjs';
|
|
3
2
|
import { i as invert, T as TRPC_ERROR_CODES_BY_KEY } from './codes-7a3d4f65.mjs';
|
|
4
3
|
|
|
@@ -290,105 +289,4 @@ async function resolveHTTPResponse(opts) {
|
|
|
290
289
|
}
|
|
291
290
|
}
|
|
292
291
|
|
|
293
|
-
|
|
294
|
-
req,
|
|
295
|
-
maxBodySize
|
|
296
|
-
}) {
|
|
297
|
-
return new Promise(resolve => {
|
|
298
|
-
if ('body' in req) {
|
|
299
|
-
resolve({
|
|
300
|
-
ok: true,
|
|
301
|
-
data: req.body
|
|
302
|
-
});
|
|
303
|
-
return;
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
let body = '';
|
|
307
|
-
let hasBody = false;
|
|
308
|
-
req.on('data', function (data) {
|
|
309
|
-
body += data;
|
|
310
|
-
hasBody = true;
|
|
311
|
-
|
|
312
|
-
if (typeof maxBodySize === 'number' && body.length > maxBodySize) {
|
|
313
|
-
resolve({
|
|
314
|
-
ok: false,
|
|
315
|
-
error: new TRPCError({
|
|
316
|
-
code: 'PAYLOAD_TOO_LARGE'
|
|
317
|
-
})
|
|
318
|
-
});
|
|
319
|
-
req.socket.destroy();
|
|
320
|
-
}
|
|
321
|
-
});
|
|
322
|
-
req.on('end', () => {
|
|
323
|
-
resolve({
|
|
324
|
-
ok: true,
|
|
325
|
-
data: hasBody ? body : undefined
|
|
326
|
-
});
|
|
327
|
-
});
|
|
328
|
-
});
|
|
329
|
-
}
|
|
330
|
-
|
|
331
|
-
/* eslint-disable @typescript-eslint/no-non-null-assertion */
|
|
332
|
-
assertNotBrowser();
|
|
333
|
-
async function nodeHTTPRequestHandler(opts) {
|
|
334
|
-
var _opts$teardown;
|
|
335
|
-
|
|
336
|
-
const createContext = async function _createContext() {
|
|
337
|
-
var _opts$createContext;
|
|
338
|
-
|
|
339
|
-
return await ((_opts$createContext = opts.createContext) === null || _opts$createContext === void 0 ? void 0 : _opts$createContext.call(opts, opts));
|
|
340
|
-
};
|
|
341
|
-
|
|
342
|
-
const {
|
|
343
|
-
path,
|
|
344
|
-
router
|
|
345
|
-
} = opts;
|
|
346
|
-
const bodyResult = await getPostBody(opts);
|
|
347
|
-
const query = opts.req.query ? new URLSearchParams(opts.req.query) : new URLSearchParams(opts.req.url.split('?')[1]);
|
|
348
|
-
const req = {
|
|
349
|
-
method: opts.req.method,
|
|
350
|
-
headers: opts.req.headers,
|
|
351
|
-
query,
|
|
352
|
-
body: bodyResult.ok ? bodyResult.data : undefined
|
|
353
|
-
};
|
|
354
|
-
const result = await resolveHTTPResponse({
|
|
355
|
-
batching: opts.batching,
|
|
356
|
-
responseMeta: opts.responseMeta,
|
|
357
|
-
path,
|
|
358
|
-
createContext,
|
|
359
|
-
router,
|
|
360
|
-
req,
|
|
361
|
-
error: bodyResult.ok ? null : bodyResult.error,
|
|
362
|
-
|
|
363
|
-
onError(o) {
|
|
364
|
-
var _opts$onError;
|
|
365
|
-
|
|
366
|
-
opts === null || opts === void 0 ? void 0 : (_opts$onError = opts.onError) === null || _opts$onError === void 0 ? void 0 : _opts$onError.call(opts, { ...o,
|
|
367
|
-
req: opts.req
|
|
368
|
-
});
|
|
369
|
-
}
|
|
370
|
-
|
|
371
|
-
});
|
|
372
|
-
const {
|
|
373
|
-
res
|
|
374
|
-
} = opts;
|
|
375
|
-
|
|
376
|
-
if ('status' in result && (!res.statusCode || res.statusCode === 200)) {
|
|
377
|
-
res.statusCode = result.status;
|
|
378
|
-
}
|
|
379
|
-
|
|
380
|
-
for (const [key, value] of Object.entries((_result$headers = result.headers) !== null && _result$headers !== void 0 ? _result$headers : {})) {
|
|
381
|
-
var _result$headers;
|
|
382
|
-
|
|
383
|
-
if (typeof value === 'undefined') {
|
|
384
|
-
continue;
|
|
385
|
-
}
|
|
386
|
-
|
|
387
|
-
res.setHeader(key, value);
|
|
388
|
-
}
|
|
389
|
-
|
|
390
|
-
res.end(result.body);
|
|
391
|
-
await ((_opts$teardown = opts.teardown) === null || _opts$teardown === void 0 ? void 0 : _opts$teardown.call(opts));
|
|
392
|
-
}
|
|
393
|
-
|
|
394
|
-
export { assertNotBrowser as a, getHTTPStatusCodeFromError as g, nodeHTTPRequestHandler as n, resolveHTTPResponse as r };
|
|
292
|
+
export { assertNotBrowser as a, getHTTPStatusCodeFromError as g, resolveHTTPResponse as r };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@trpc/server",
|
|
3
|
-
"version": "10.0.0-alpha.
|
|
3
|
+
"version": "10.0.0-alpha.9",
|
|
4
4
|
"description": "tRPC Server",
|
|
5
5
|
"author": "KATT",
|
|
6
6
|
"license": "MIT",
|
|
@@ -48,6 +48,11 @@
|
|
|
48
48
|
"require": "./dist/adapters/standalone.js",
|
|
49
49
|
"default": "./dist/adapters/standalone.js"
|
|
50
50
|
},
|
|
51
|
+
"./adapters/fastify": {
|
|
52
|
+
"import": "./dist/adapters/fastify/index.mjs",
|
|
53
|
+
"require": "./dist/adapters/fastify/index.js",
|
|
54
|
+
"default": "./dist/adapters/fastify/index.js"
|
|
55
|
+
},
|
|
51
56
|
"./adapters/ws": {
|
|
52
57
|
"import": "./dist/adapters/ws.mjs",
|
|
53
58
|
"require": "./dist/adapters/ws.js",
|
|
@@ -82,21 +87,25 @@
|
|
|
82
87
|
"@types/express": "^4.17.12",
|
|
83
88
|
"@types/hash-sum": "^1.0.0",
|
|
84
89
|
"@types/ws": "^8.2.0",
|
|
90
|
+
"abort-controller": "^3.0.0",
|
|
85
91
|
"devalue": "^2.0.1",
|
|
86
92
|
"express": "^4.17.1",
|
|
87
|
-
"fastify": "^3.
|
|
93
|
+
"fastify": "^3.27.1",
|
|
94
|
+
"fastify-plugin": "^3.0.1",
|
|
95
|
+
"fastify-websocket": "^4.0.0",
|
|
88
96
|
"hash-sum": "^2.0.0",
|
|
89
97
|
"jest": "^27.1.0",
|
|
90
98
|
"konn": "^0.7.0",
|
|
91
99
|
"myzod": "^1.3.1",
|
|
92
100
|
"next": "^12.0.1",
|
|
101
|
+
"node-fetch": "^2.6.1",
|
|
93
102
|
"superstruct": "^0.15.2",
|
|
94
103
|
"typescript": "4.4.4",
|
|
95
104
|
"ws": "^8.0.0",
|
|
96
105
|
"yup": "^0.32.8",
|
|
97
106
|
"zod": "^3.0.0"
|
|
98
107
|
},
|
|
99
|
-
"gitHead": "
|
|
108
|
+
"gitHead": "4d4ac63ab25a2b684ac61e905f9067aa201f8b0c",
|
|
100
109
|
"dependencies": {
|
|
101
110
|
"tslib": "^2.1.0"
|
|
102
111
|
}
|
package/src/adapters/express.ts
CHANGED
|
@@ -16,7 +16,7 @@ export function createExpressMiddleware<TRouter extends AnyRouter>(
|
|
|
16
16
|
opts: NodeHTTPHandlerOptions<TRouter, express.Request, express.Response>,
|
|
17
17
|
): express.Handler {
|
|
18
18
|
return (req, res) => {
|
|
19
|
-
const endpoint = req.path.
|
|
19
|
+
const endpoint = req.path.slice(1);
|
|
20
20
|
|
|
21
21
|
nodeHTTPRequestHandler({
|
|
22
22
|
...opts,
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { URLSearchParams } from 'url';
|
|
2
|
+
import { FastifyReply, FastifyRequest } from 'fastify';
|
|
3
|
+
import { assertNotBrowser } from '../../assertNotBrowser';
|
|
4
|
+
import { NodeHTTPCreateContextOption } from '../node-http';
|
|
5
|
+
import { AnyRouter, inferRouterContext } from '../../router';
|
|
6
|
+
import { resolveHTTPResponse } from '../../http/resolveHTTPResponse';
|
|
7
|
+
import {
|
|
8
|
+
HTTPBaseHandlerOptions,
|
|
9
|
+
HTTPRequest,
|
|
10
|
+
} from '../../http/internals/types';
|
|
11
|
+
|
|
12
|
+
assertNotBrowser();
|
|
13
|
+
|
|
14
|
+
export type FastifyHandlerOptions<
|
|
15
|
+
TRouter extends AnyRouter,
|
|
16
|
+
TRequest extends FastifyRequest,
|
|
17
|
+
TResponse extends FastifyReply,
|
|
18
|
+
> = HTTPBaseHandlerOptions<TRouter, TRequest> &
|
|
19
|
+
NodeHTTPCreateContextOption<TRouter, TRequest, TResponse>;
|
|
20
|
+
|
|
21
|
+
type FastifyRequestHandlerOptions<
|
|
22
|
+
TRouter extends AnyRouter,
|
|
23
|
+
TRequest extends FastifyRequest,
|
|
24
|
+
TResponse extends FastifyReply,
|
|
25
|
+
> = {
|
|
26
|
+
req: TRequest;
|
|
27
|
+
res: TResponse;
|
|
28
|
+
path: string;
|
|
29
|
+
} & FastifyHandlerOptions<TRouter, TRequest, TResponse>;
|
|
30
|
+
|
|
31
|
+
export async function fastifyRequestHandler<
|
|
32
|
+
TRouter extends AnyRouter,
|
|
33
|
+
TRequest extends FastifyRequest,
|
|
34
|
+
TResponse extends FastifyReply,
|
|
35
|
+
>(opts: FastifyRequestHandlerOptions<TRouter, TRequest, TResponse>) {
|
|
36
|
+
const createContext = async function _createContext(): Promise<
|
|
37
|
+
inferRouterContext<TRouter>
|
|
38
|
+
> {
|
|
39
|
+
return opts.createContext?.(opts);
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
const query = opts.req.query
|
|
43
|
+
? new URLSearchParams(opts.req.query as any)
|
|
44
|
+
: new URLSearchParams(opts.req.url.split('?')[1]);
|
|
45
|
+
|
|
46
|
+
const req: HTTPRequest = {
|
|
47
|
+
query,
|
|
48
|
+
method: opts.req.method,
|
|
49
|
+
headers: opts.req.headers,
|
|
50
|
+
body: opts.req.body ?? 'null',
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
const result = await resolveHTTPResponse({
|
|
54
|
+
req,
|
|
55
|
+
createContext,
|
|
56
|
+
path: opts.path,
|
|
57
|
+
router: opts.router,
|
|
58
|
+
batching: opts.batching,
|
|
59
|
+
responseMeta: opts.responseMeta,
|
|
60
|
+
onError(o) {
|
|
61
|
+
opts?.onError?.({ ...o, req: opts.req });
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
const { res } = opts;
|
|
66
|
+
|
|
67
|
+
if ('status' in result && (!res.statusCode || res.statusCode === 200)) {
|
|
68
|
+
res.statusCode = result.status;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
for (const [key, value] of Object.entries(result.headers ?? {})) {
|
|
72
|
+
if (typeof value === 'undefined') {
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
res.header(key, value);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
res.send(result.body);
|
|
79
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/// <reference types="fastify-websocket" />
|
|
2
|
+
import { FastifyInstance, FastifyReply, FastifyRequest } from 'fastify';
|
|
3
|
+
import { fastifyRequestHandler } from './fastifyRequestHandler';
|
|
4
|
+
import { NodeHTTPCreateContextFnOptions } from '../node-http';
|
|
5
|
+
import { applyWSSHandler, WSSHandlerOptions } from '../ws';
|
|
6
|
+
import { FastifyHandlerOptions } from '.';
|
|
7
|
+
import { AnyRouter } from '../..';
|
|
8
|
+
|
|
9
|
+
export interface FastifyTRPCPluginOptions<TRouter extends AnyRouter> {
|
|
10
|
+
prefix?: string;
|
|
11
|
+
useWSS?: boolean;
|
|
12
|
+
trpcOptions: FastifyHandlerOptions<TRouter, FastifyRequest, FastifyReply>;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export type CreateFastifyContextOptions = NodeHTTPCreateContextFnOptions<
|
|
16
|
+
FastifyRequest,
|
|
17
|
+
FastifyReply
|
|
18
|
+
>;
|
|
19
|
+
|
|
20
|
+
export function fastifyTRPCPlugin<TRouter extends AnyRouter>(
|
|
21
|
+
fastify: FastifyInstance,
|
|
22
|
+
opts: FastifyTRPCPluginOptions<TRouter>,
|
|
23
|
+
done: (err?: Error) => void,
|
|
24
|
+
) {
|
|
25
|
+
fastify.addContentTypeParser(
|
|
26
|
+
'application/json',
|
|
27
|
+
{ parseAs: 'string' },
|
|
28
|
+
function (_, body, _done) {
|
|
29
|
+
_done(null, body);
|
|
30
|
+
},
|
|
31
|
+
);
|
|
32
|
+
|
|
33
|
+
fastify.all(`${opts.prefix ?? ''}/:path`, (req, res) => {
|
|
34
|
+
const path = (req.params as any).path;
|
|
35
|
+
fastifyRequestHandler({ ...opts.trpcOptions, req, res, path });
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
if (opts.useWSS) {
|
|
39
|
+
applyWSSHandler<TRouter>({
|
|
40
|
+
...(opts.trpcOptions as WSSHandlerOptions<TRouter>),
|
|
41
|
+
wss: fastify.websocketServer,
|
|
42
|
+
});
|
|
43
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
44
|
+
fastify.get(opts.prefix ?? '/', { websocket: true }, () => {});
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
done();
|
|
48
|
+
}
|
|
@@ -21,7 +21,7 @@ export function createHTTPHandler<TRouter extends AnyRouter>(
|
|
|
21
21
|
opts: CreateHTTPHandlerOptions<TRouter>,
|
|
22
22
|
) {
|
|
23
23
|
return async (req: http.IncomingMessage, res: http.ServerResponse) => {
|
|
24
|
-
const endpoint = url.parse(req.url!).pathname!.
|
|
24
|
+
const endpoint = url.parse(req.url!).pathname!.slice(1);
|
|
25
25
|
await nodeHTTPRequestHandler({
|
|
26
26
|
...opts,
|
|
27
27
|
req,
|