@trpc/server 9.18.0 → 9.20.1
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 +3 -2
- package/adapters/express/dist/trpc-server-adapters-express.cjs.prod.js +3 -2
- package/adapters/express/dist/trpc-server-adapters-express.esm.js +3 -2
- 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/package.json +4 -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 +3 -2
- package/adapters/standalone/dist/trpc-server-adapters-standalone.cjs.prod.js +3 -2
- package/adapters/standalone/dist/trpc-server-adapters-standalone.esm.js +3 -2
- package/adapters/ws/dist/trpc-server-adapters-ws.cjs.dev.js +2 -1
- package/adapters/ws/dist/trpc-server-adapters-ws.cjs.prod.js +2 -1
- package/adapters/ws/dist/trpc-server-adapters-ws.esm.js +2 -1
- package/dist/declarations/src/adapters/fastify/fastifyRequestHandler.d.ts +13 -0
- package/dist/declarations/src/adapters/fastify/fastifyRequestHandler.d.ts.map +1 -0
- package/dist/declarations/src/adapters/fastify/fastifyTRPCPlugin.d.ts +12 -0
- package/dist/declarations/src/adapters/fastify/fastifyTRPCPlugin.d.ts.map +1 -0
- package/dist/declarations/src/adapters/fastify/index.d.ts +3 -0
- package/dist/declarations/src/adapters/fastify/index.d.ts.map +1 -0
- package/dist/declarations/src/adapters/ws.d.ts.map +1 -1
- package/dist/nodeHTTPRequestHandler-2cc444d8.cjs.dev.js +108 -0
- package/dist/nodeHTTPRequestHandler-8ddacc19.cjs.prod.js +108 -0
- package/dist/nodeHTTPRequestHandler-d00c1126.esm.js +106 -0
- package/dist/{nodeHTTPRequestHandler-b7ff366e.cjs.dev.js → resolveHTTPResponse-3867844c.cjs.dev.js} +0 -103
- package/dist/{nodeHTTPRequestHandler-7325b53f.cjs.prod.js → resolveHTTPResponse-562c3d62.cjs.prod.js} +0 -103
- package/dist/{nodeHTTPRequestHandler-2e6cc2d7.esm.js → resolveHTTPResponse-85f3f5df.esm.js} +1 -103
- package/dist/trpc-server.cjs.dev.js +9 -8
- package/dist/trpc-server.cjs.prod.js +9 -8
- package/dist/trpc-server.esm.js +4 -3
- package/package.json +8 -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
- package/src/adapters/ws.ts +4 -1
|
@@ -2,16 +2,17 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var
|
|
5
|
+
var resolveHTTPResponse = require('./resolveHTTPResponse-3867844c.cjs.dev.js');
|
|
6
6
|
var subscription = require('./subscription-b8831081.cjs.dev.js');
|
|
7
7
|
var transformTRPCResponse = require('./transformTRPCResponse-8248515e.cjs.dev.js');
|
|
8
8
|
var adapters_standalone_dist_trpcServerAdaptersStandalone = require('../adapters/standalone/dist/trpc-server-adapters-standalone.cjs.dev.js');
|
|
9
|
+
var nodeHTTPRequestHandler = require('./nodeHTTPRequestHandler-2cc444d8.cjs.dev.js');
|
|
9
10
|
var codes = require('./codes-33cef953.cjs.dev.js');
|
|
10
|
-
require('url');
|
|
11
11
|
require('events');
|
|
12
12
|
require('http');
|
|
13
|
+
require('url');
|
|
13
14
|
|
|
14
|
-
|
|
15
|
+
resolveHTTPResponse.assertNotBrowser();
|
|
15
16
|
|
|
16
17
|
// this has been moved to separate package
|
|
17
18
|
|
|
@@ -58,7 +59,7 @@ async function wrapCallSafe(fn) {
|
|
|
58
59
|
}
|
|
59
60
|
|
|
60
61
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
61
|
-
|
|
62
|
+
resolveHTTPResponse.assertNotBrowser();
|
|
62
63
|
|
|
63
64
|
function getParseFn(inputParser) {
|
|
64
65
|
const parser = inputParser;
|
|
@@ -214,7 +215,7 @@ function createProcedure(opts) {
|
|
|
214
215
|
}
|
|
215
216
|
|
|
216
217
|
/* eslint-disable @typescript-eslint/ban-types */
|
|
217
|
-
|
|
218
|
+
resolveHTTPResponse.assertNotBrowser();
|
|
218
219
|
/**
|
|
219
220
|
* @public
|
|
220
221
|
*/
|
|
@@ -462,7 +463,7 @@ class Router {
|
|
|
462
463
|
code: codes.TRPC_ERROR_CODES_BY_KEY[code],
|
|
463
464
|
data: {
|
|
464
465
|
code,
|
|
465
|
-
httpStatus:
|
|
466
|
+
httpStatus: resolveHTTPResponse.getHTTPStatusCodeFromError(error)
|
|
466
467
|
}
|
|
467
468
|
};
|
|
468
469
|
|
|
@@ -519,8 +520,8 @@ function router() {
|
|
|
519
520
|
return new Router();
|
|
520
521
|
}
|
|
521
522
|
|
|
522
|
-
exports.assertNotBrowser =
|
|
523
|
-
exports.resolveHTTPResponse =
|
|
523
|
+
exports.assertNotBrowser = resolveHTTPResponse.assertNotBrowser;
|
|
524
|
+
exports.resolveHTTPResponse = resolveHTTPResponse.resolveHTTPResponse;
|
|
524
525
|
exports.Subscription = subscription.Subscription;
|
|
525
526
|
exports.subscriptionPullFactory = subscription.subscriptionPullFactory;
|
|
526
527
|
exports.TRPCError = transformTRPCResponse.TRPCError;
|
|
@@ -2,16 +2,17 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var
|
|
5
|
+
var resolveHTTPResponse = require('./resolveHTTPResponse-562c3d62.cjs.prod.js');
|
|
6
6
|
var subscription = require('./subscription-c2e0bfbc.cjs.prod.js');
|
|
7
7
|
var transformTRPCResponse = require('./transformTRPCResponse-dcbf66c5.cjs.prod.js');
|
|
8
8
|
var adapters_standalone_dist_trpcServerAdaptersStandalone = require('../adapters/standalone/dist/trpc-server-adapters-standalone.cjs.prod.js');
|
|
9
|
+
var nodeHTTPRequestHandler = require('./nodeHTTPRequestHandler-8ddacc19.cjs.prod.js');
|
|
9
10
|
var codes = require('./codes-e0df67c4.cjs.prod.js');
|
|
10
|
-
require('url');
|
|
11
11
|
require('events');
|
|
12
12
|
require('http');
|
|
13
|
+
require('url');
|
|
13
14
|
|
|
14
|
-
|
|
15
|
+
resolveHTTPResponse.assertNotBrowser();
|
|
15
16
|
|
|
16
17
|
// this has been moved to separate package
|
|
17
18
|
|
|
@@ -58,7 +59,7 @@ async function wrapCallSafe(fn) {
|
|
|
58
59
|
}
|
|
59
60
|
|
|
60
61
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
61
|
-
|
|
62
|
+
resolveHTTPResponse.assertNotBrowser();
|
|
62
63
|
|
|
63
64
|
function getParseFn(inputParser) {
|
|
64
65
|
const parser = inputParser;
|
|
@@ -214,7 +215,7 @@ function createProcedure(opts) {
|
|
|
214
215
|
}
|
|
215
216
|
|
|
216
217
|
/* eslint-disable @typescript-eslint/ban-types */
|
|
217
|
-
|
|
218
|
+
resolveHTTPResponse.assertNotBrowser();
|
|
218
219
|
/**
|
|
219
220
|
* @public
|
|
220
221
|
*/
|
|
@@ -462,7 +463,7 @@ class Router {
|
|
|
462
463
|
code: codes.TRPC_ERROR_CODES_BY_KEY[code],
|
|
463
464
|
data: {
|
|
464
465
|
code,
|
|
465
|
-
httpStatus:
|
|
466
|
+
httpStatus: resolveHTTPResponse.getHTTPStatusCodeFromError(error)
|
|
466
467
|
}
|
|
467
468
|
};
|
|
468
469
|
|
|
@@ -515,8 +516,8 @@ function router() {
|
|
|
515
516
|
return new Router();
|
|
516
517
|
}
|
|
517
518
|
|
|
518
|
-
exports.assertNotBrowser =
|
|
519
|
-
exports.resolveHTTPResponse =
|
|
519
|
+
exports.assertNotBrowser = resolveHTTPResponse.assertNotBrowser;
|
|
520
|
+
exports.resolveHTTPResponse = resolveHTTPResponse.resolveHTTPResponse;
|
|
520
521
|
exports.Subscription = subscription.Subscription;
|
|
521
522
|
exports.subscriptionPullFactory = subscription.subscriptionPullFactory;
|
|
522
523
|
exports.TRPCError = transformTRPCResponse.TRPCError;
|
package/dist/trpc-server.esm.js
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
import { a as assertNotBrowser,
|
|
2
|
-
export { a as assertNotBrowser, r as resolveHTTPResponse } from './
|
|
1
|
+
import { a as assertNotBrowser, g as getHTTPStatusCodeFromError } from './resolveHTTPResponse-85f3f5df.esm.js';
|
|
2
|
+
export { a as assertNotBrowser, r as resolveHTTPResponse } from './resolveHTTPResponse-85f3f5df.esm.js';
|
|
3
3
|
export { S as Subscription, s as subscriptionPullFactory } from './subscription-fbda2888.esm.js';
|
|
4
4
|
import { T as TRPCError, g as getErrorFromUnknown } from './transformTRPCResponse-f73dc4a2.esm.js';
|
|
5
5
|
export { T as TRPCError } from './transformTRPCResponse-f73dc4a2.esm.js';
|
|
6
6
|
import { createHTTPServer, createHTTPHandler } from '../adapters/standalone/dist/trpc-server-adapters-standalone.esm.js';
|
|
7
|
+
import { n as nodeHTTPRequestHandler } from './nodeHTTPRequestHandler-d00c1126.esm.js';
|
|
7
8
|
import { T as TRPC_ERROR_CODES_BY_KEY } from './codes-fe07bf82.esm.js';
|
|
8
|
-
import 'url';
|
|
9
9
|
import 'events';
|
|
10
10
|
import 'http';
|
|
11
|
+
import 'url';
|
|
11
12
|
|
|
12
13
|
assertNotBrowser();
|
|
13
14
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@trpc/server",
|
|
3
|
-
"version": "9.
|
|
3
|
+
"version": "9.20.1",
|
|
4
4
|
"description": "tRPC Server",
|
|
5
5
|
"author": "KATT",
|
|
6
6
|
"license": "MIT",
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
"entrypoints": [
|
|
20
20
|
"index.ts",
|
|
21
21
|
"adapters/express.ts",
|
|
22
|
+
"adapters/fastify/index.ts",
|
|
22
23
|
"adapters/next.ts",
|
|
23
24
|
"adapters/node-http/index.ts",
|
|
24
25
|
"adapters/standalone.ts",
|
|
@@ -51,21 +52,25 @@
|
|
|
51
52
|
"@types/express": "^4.17.12",
|
|
52
53
|
"@types/hash-sum": "^1.0.0",
|
|
53
54
|
"@types/ws": "^8.2.0",
|
|
55
|
+
"abort-controller": "^3.0.0",
|
|
54
56
|
"devalue": "^2.0.1",
|
|
55
57
|
"express": "^4.17.1",
|
|
56
|
-
"fastify": "^3.
|
|
58
|
+
"fastify": "^3.27.1",
|
|
59
|
+
"fastify-plugin": "^3.0.1",
|
|
60
|
+
"fastify-websocket": "^4.0.0",
|
|
57
61
|
"hash-sum": "^2.0.0",
|
|
58
62
|
"jest": "^27.1.0",
|
|
59
63
|
"konn": "^0.7.0",
|
|
60
64
|
"myzod": "^1.3.1",
|
|
61
65
|
"next": "^12.0.1",
|
|
66
|
+
"node-fetch": "^2.6.1",
|
|
62
67
|
"superstruct": "^0.15.2",
|
|
63
68
|
"typescript": "4.4.4",
|
|
64
69
|
"ws": "^8.0.0",
|
|
65
70
|
"yup": "^0.32.8",
|
|
66
71
|
"zod": "^3.0.0"
|
|
67
72
|
},
|
|
68
|
-
"gitHead": "
|
|
73
|
+
"gitHead": "fcacb235651d8ba9640af6b9752a981c520957ba",
|
|
69
74
|
"dependencies": {
|
|
70
75
|
"tslib": "^2.1.0"
|
|
71
76
|
}
|
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,
|
package/src/adapters/ws.ts
CHANGED
|
@@ -225,7 +225,10 @@ export function applyWSSHandler<TRouter extends AnyRouter>(
|
|
|
225
225
|
try {
|
|
226
226
|
const msgJSON: unknown = JSON.parse(message.toString());
|
|
227
227
|
const msgs: unknown[] = Array.isArray(msgJSON) ? msgJSON : [msgJSON];
|
|
228
|
-
|
|
228
|
+
const promises = msgs
|
|
229
|
+
.map((raw) => parseMessage(raw, transformer))
|
|
230
|
+
.map(handleRequest);
|
|
231
|
+
await Promise.all(promises);
|
|
229
232
|
} catch (cause) {
|
|
230
233
|
const error = new TRPCError({
|
|
231
234
|
code: 'PARSE_ERROR',
|