@trpc/server 11.0.0-alpha-tmp-subscription-connection-state.489 → 11.0.0-alpha-tmp-12-06-react.665
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/dist/@trpc/server/http.d.ts +1 -1
- package/dist/@trpc/server/http.d.ts.map +1 -1
- package/dist/@trpc/server/index.d.ts +1 -1
- package/dist/@trpc/server/index.d.ts.map +1 -1
- package/dist/adapters/aws-lambda/getPlanner.d.ts.map +1 -1
- package/dist/adapters/aws-lambda/getPlanner.js +2 -2
- package/dist/adapters/aws-lambda/getPlanner.mjs +2 -2
- package/dist/adapters/aws-lambda/index.d.ts.map +1 -1
- package/dist/adapters/aws-lambda/index.js +2 -0
- package/dist/adapters/aws-lambda/index.mjs +2 -0
- package/dist/adapters/express.d.ts.map +1 -1
- package/dist/adapters/express.js +27 -7
- package/dist/adapters/express.mjs +27 -7
- package/dist/adapters/fastify/fastifyRequestHandler.js +3 -1
- package/dist/adapters/fastify/fastifyRequestHandler.mjs +3 -1
- package/dist/adapters/fastify/fastifyTRPCPlugin.d.ts.map +1 -1
- package/dist/adapters/fastify/fastifyTRPCPlugin.js +9 -2
- package/dist/adapters/fastify/fastifyTRPCPlugin.mjs +10 -3
- package/dist/adapters/fetch/fetchRequestHandler.js +9 -8
- package/dist/adapters/fetch/fetchRequestHandler.mjs +9 -8
- package/dist/adapters/next-app-dir/nextAppDirCaller.d.ts.map +1 -1
- package/dist/adapters/next-app-dir/nextAppDirCaller.js +10 -5
- package/dist/adapters/next-app-dir/nextAppDirCaller.mjs +10 -5
- package/dist/adapters/next-app-dir/notFound.js +2 -0
- package/dist/adapters/next-app-dir/notFound.mjs +2 -0
- package/dist/adapters/next-app-dir/redirect.js +16 -1
- package/dist/adapters/next-app-dir/redirect.mjs +16 -1
- package/dist/adapters/next-app-dir/rethrowNextErrors.d.ts.map +1 -1
- package/dist/adapters/next-app-dir/rethrowNextErrors.js +4 -3
- package/dist/adapters/next-app-dir/rethrowNextErrors.mjs +4 -3
- package/dist/adapters/next.d.ts.map +1 -1
- package/dist/adapters/next.js +23 -30
- package/dist/adapters/next.mjs +24 -31
- package/dist/adapters/node-http/incomingMessageToRequest.d.ts +2 -1
- package/dist/adapters/node-http/incomingMessageToRequest.d.ts.map +1 -1
- package/dist/adapters/node-http/incomingMessageToRequest.js +83 -40
- package/dist/adapters/node-http/incomingMessageToRequest.mjs +83 -41
- package/dist/adapters/node-http/index.js +2 -0
- package/dist/adapters/node-http/index.mjs +2 -2
- package/dist/adapters/node-http/nodeHTTPRequestHandler.d.ts +7 -0
- package/dist/adapters/node-http/nodeHTTPRequestHandler.d.ts.map +1 -1
- package/dist/adapters/node-http/nodeHTTPRequestHandler.js +70 -58
- package/dist/adapters/node-http/nodeHTTPRequestHandler.mjs +70 -59
- package/dist/adapters/node-http/writeResponse.d.ts +18 -0
- package/dist/adapters/node-http/writeResponse.d.ts.map +1 -0
- package/dist/adapters/node-http/writeResponse.js +82 -0
- package/dist/adapters/node-http/writeResponse.mjs +79 -0
- package/dist/adapters/standalone.d.ts +5 -2
- package/dist/adapters/standalone.d.ts.map +1 -1
- package/dist/adapters/standalone.js +25 -13
- package/dist/adapters/standalone.mjs +26 -14
- package/dist/adapters/ws.d.ts +14 -4
- package/dist/adapters/ws.d.ts.map +1 -1
- package/dist/adapters/ws.js +217 -101
- package/dist/adapters/ws.mjs +217 -102
- package/dist/bundle-analysis.json +412 -310
- package/dist/http.js +2 -4
- package/dist/http.mjs +2 -2
- package/dist/index.js +3 -0
- package/dist/index.mjs +3 -1
- package/dist/node_modules/.pnpm/@rollup_plugin-typescript@12.1.1_rollup@4.27.4_tslib@2.8.1_typescript@5.7.2/node_modules/tslib/tslib.es6.js +73 -0
- package/dist/observable/behaviorSubject.d.ts +15 -0
- package/dist/observable/behaviorSubject.d.ts.map +1 -0
- package/dist/observable/behaviorSubject.js +40 -0
- package/dist/observable/behaviorSubject.mjs +38 -0
- package/dist/observable/index.d.ts +3 -3
- package/dist/observable/index.d.ts.map +1 -1
- package/dist/observable/index.js +5 -0
- package/dist/observable/index.mjs +3 -2
- package/dist/observable/observable.d.ts +2 -1
- package/dist/observable/observable.d.ts.map +1 -1
- package/dist/observable/observable.js +31 -8
- package/dist/observable/observable.mjs +31 -8
- package/dist/observable/operators.d.ts +2 -0
- package/dist/observable/operators.d.ts.map +1 -1
- package/dist/observable/operators.js +35 -0
- package/dist/observable/operators.mjs +34 -1
- package/dist/rpc.js +2 -0
- package/dist/rpc.mjs +2 -0
- package/dist/shared.js +2 -0
- package/dist/shared.mjs +2 -0
- package/dist/unstable-core-do-not-import/clientish/inference.d.ts.map +1 -1
- package/dist/unstable-core-do-not-import/clientish/inferrable.d.ts.map +1 -1
- package/dist/unstable-core-do-not-import/clientish/serialize.d.ts +2 -2
- package/dist/unstable-core-do-not-import/clientish/serialize.d.ts.map +1 -1
- package/dist/unstable-core-do-not-import/createProxy.js +1 -1
- package/dist/unstable-core-do-not-import/createProxy.mjs +1 -1
- package/dist/unstable-core-do-not-import/error/TRPCError.d.ts +1 -1
- package/dist/unstable-core-do-not-import/error/TRPCError.js +16 -1
- package/dist/unstable-core-do-not-import/error/TRPCError.mjs +16 -1
- package/dist/unstable-core-do-not-import/error/formatter.js +1 -1
- package/dist/unstable-core-do-not-import/error/formatter.mjs +1 -1
- package/dist/unstable-core-do-not-import/error/getErrorShape.js +2 -2
- package/dist/unstable-core-do-not-import/error/getErrorShape.mjs +2 -2
- package/dist/unstable-core-do-not-import/http/contentType.js +3 -3
- package/dist/unstable-core-do-not-import/http/contentType.mjs +3 -3
- package/dist/unstable-core-do-not-import/http/getHTTPStatusCode.d.ts +6 -1
- package/dist/unstable-core-do-not-import/http/getHTTPStatusCode.d.ts.map +1 -1
- package/dist/unstable-core-do-not-import/http/getHTTPStatusCode.js +28 -0
- package/dist/unstable-core-do-not-import/http/getHTTPStatusCode.mjs +25 -1
- package/dist/unstable-core-do-not-import/http/isAbortError.d.ts +4 -0
- package/dist/unstable-core-do-not-import/http/isAbortError.d.ts.map +1 -0
- package/dist/unstable-core-do-not-import/http/isAbortError.js +9 -0
- package/dist/unstable-core-do-not-import/http/isAbortError.mjs +7 -0
- package/dist/unstable-core-do-not-import/http/resolveResponse.d.ts.map +1 -1
- package/dist/unstable-core-do-not-import/http/resolveResponse.js +180 -96
- package/dist/unstable-core-do-not-import/http/resolveResponse.mjs +182 -98
- package/dist/unstable-core-do-not-import/http/types.d.ts +1 -1
- package/dist/unstable-core-do-not-import/initTRPC.d.ts +11 -11
- package/dist/unstable-core-do-not-import/initTRPC.d.ts.map +1 -1
- package/dist/unstable-core-do-not-import/initTRPC.js +11 -11
- package/dist/unstable-core-do-not-import/initTRPC.mjs +11 -11
- package/dist/unstable-core-do-not-import/middleware.d.ts +2 -1
- package/dist/unstable-core-do-not-import/middleware.d.ts.map +1 -1
- package/dist/unstable-core-do-not-import/middleware.js +2 -2
- package/dist/unstable-core-do-not-import/middleware.mjs +2 -2
- package/dist/unstable-core-do-not-import/parser.d.ts +5 -1
- package/dist/unstable-core-do-not-import/parser.d.ts.map +1 -1
- package/dist/unstable-core-do-not-import/parser.js +4 -0
- package/dist/unstable-core-do-not-import/parser.mjs +4 -0
- package/dist/unstable-core-do-not-import/procedure.d.ts +8 -2
- package/dist/unstable-core-do-not-import/procedure.d.ts.map +1 -1
- package/dist/unstable-core-do-not-import/procedureBuilder.d.ts +31 -12
- package/dist/unstable-core-do-not-import/procedureBuilder.d.ts.map +1 -1
- package/dist/unstable-core-do-not-import/procedureBuilder.js +33 -39
- package/dist/unstable-core-do-not-import/procedureBuilder.mjs +33 -39
- package/dist/unstable-core-do-not-import/rootConfig.d.ts +17 -17
- package/dist/unstable-core-do-not-import/rootConfig.d.ts.map +1 -1
- package/dist/unstable-core-do-not-import/router.d.ts +4 -3
- package/dist/unstable-core-do-not-import/router.d.ts.map +1 -1
- package/dist/unstable-core-do-not-import/router.js +6 -5
- package/dist/unstable-core-do-not-import/router.mjs +6 -5
- package/dist/unstable-core-do-not-import/rpc/codes.d.ts +2 -9
- package/dist/unstable-core-do-not-import/rpc/codes.d.ts.map +1 -1
- package/dist/unstable-core-do-not-import/rpc/envelopes.d.ts +7 -10
- package/dist/unstable-core-do-not-import/rpc/envelopes.d.ts.map +1 -1
- package/dist/unstable-core-do-not-import/rpc/parseTRPCMessage.js +2 -2
- package/dist/unstable-core-do-not-import/rpc/parseTRPCMessage.mjs +2 -2
- package/dist/unstable-core-do-not-import/stream/jsonl.d.ts +25 -14
- package/dist/unstable-core-do-not-import/stream/jsonl.d.ts.map +1 -1
- package/dist/unstable-core-do-not-import/stream/jsonl.js +439 -318
- package/dist/unstable-core-do-not-import/stream/jsonl.mjs +439 -318
- package/dist/unstable-core-do-not-import/stream/sse.d.ts +58 -18
- package/dist/unstable-core-do-not-import/stream/sse.d.ts.map +1 -1
- package/dist/unstable-core-do-not-import/stream/sse.js +297 -122
- package/dist/unstable-core-do-not-import/stream/sse.mjs +298 -123
- package/dist/unstable-core-do-not-import/stream/sse.types.d.ts +31 -0
- package/dist/unstable-core-do-not-import/stream/sse.types.d.ts.map +1 -0
- package/dist/unstable-core-do-not-import/stream/tracked.d.ts +2 -2
- package/dist/unstable-core-do-not-import/stream/tracked.d.ts.map +1 -1
- package/dist/unstable-core-do-not-import/stream/tracked.js +1 -1
- package/dist/unstable-core-do-not-import/stream/tracked.mjs +1 -1
- package/dist/unstable-core-do-not-import/stream/utils/asyncIterable.d.ts +17 -0
- package/dist/unstable-core-do-not-import/stream/utils/asyncIterable.d.ts.map +1 -0
- package/dist/unstable-core-do-not-import/stream/utils/asyncIterable.js +171 -0
- package/dist/unstable-core-do-not-import/stream/utils/asyncIterable.mjs +167 -0
- package/dist/unstable-core-do-not-import/stream/utils/createDeferred.d.ts +0 -11
- package/dist/unstable-core-do-not-import/stream/utils/createDeferred.d.ts.map +1 -1
- package/dist/unstable-core-do-not-import/stream/utils/createDeferred.js +0 -29
- package/dist/unstable-core-do-not-import/stream/utils/createDeferred.mjs +1 -29
- package/dist/unstable-core-do-not-import/stream/utils/disposable.d.ts +17 -0
- package/dist/unstable-core-do-not-import/stream/utils/disposable.d.ts.map +1 -0
- package/dist/unstable-core-do-not-import/stream/utils/disposable.js +44 -0
- package/dist/unstable-core-do-not-import/stream/utils/disposable.mjs +41 -0
- package/dist/unstable-core-do-not-import/stream/utils/readableStreamFrom.d.ts +8 -0
- package/dist/unstable-core-do-not-import/stream/utils/readableStreamFrom.d.ts.map +1 -0
- package/dist/unstable-core-do-not-import/stream/utils/readableStreamFrom.js +25 -0
- package/dist/unstable-core-do-not-import/stream/utils/readableStreamFrom.mjs +23 -0
- package/dist/unstable-core-do-not-import/stream/utils/timerResource.d.ts +5 -0
- package/dist/unstable-core-do-not-import/stream/utils/timerResource.d.ts.map +1 -0
- package/dist/unstable-core-do-not-import/stream/utils/timerResource.js +26 -0
- package/dist/unstable-core-do-not-import/stream/utils/timerResource.mjs +23 -0
- package/dist/unstable-core-do-not-import/stream/utils/withPing.d.ts +7 -0
- package/dist/unstable-core-do-not-import/stream/utils/withPing.d.ts.map +1 -0
- package/dist/unstable-core-do-not-import/stream/utils/withPing.js +130 -0
- package/dist/unstable-core-do-not-import/stream/utils/withPing.mjs +127 -0
- package/dist/unstable-core-do-not-import/transformer.d.ts +2 -5
- package/dist/unstable-core-do-not-import/transformer.d.ts.map +1 -1
- package/dist/unstable-core-do-not-import/transformer.js +1 -1
- package/dist/unstable-core-do-not-import/transformer.mjs +1 -1
- package/dist/unstable-core-do-not-import/types.d.ts +26 -3
- package/dist/unstable-core-do-not-import/types.d.ts.map +1 -1
- package/dist/unstable-core-do-not-import/utils.d.ts +15 -0
- package/dist/unstable-core-do-not-import/utils.d.ts.map +1 -1
- package/dist/unstable-core-do-not-import/utils.js +49 -1
- package/dist/unstable-core-do-not-import/utils.mjs +45 -2
- package/dist/unstable-core-do-not-import.d.ts +3 -2
- package/dist/unstable-core-do-not-import.d.ts.map +1 -1
- package/dist/unstable-core-do-not-import.js +14 -7
- package/dist/unstable-core-do-not-import.mjs +5 -6
- package/dist/vendor/unpromise/index.d.ts +3 -0
- package/dist/vendor/unpromise/index.d.ts.map +1 -0
- package/dist/vendor/unpromise/types.d.ts +28 -0
- package/dist/vendor/unpromise/types.d.ts.map +1 -0
- package/dist/vendor/unpromise/unpromise.d.ts +121 -0
- package/dist/vendor/unpromise/unpromise.d.ts.map +1 -0
- package/dist/vendor/unpromise/unpromise.js +292 -0
- package/dist/vendor/unpromise/unpromise.mjs +289 -0
- package/package.json +20 -17
- package/src/@trpc/server/http.ts +0 -2
- package/src/@trpc/server/index.ts +2 -0
- package/src/adapters/aws-lambda/getPlanner.ts +2 -2
- package/src/adapters/aws-lambda/index.ts +5 -6
- package/src/adapters/express.ts +21 -9
- package/src/adapters/fastify/fastifyRequestHandler.ts +1 -1
- package/src/adapters/fastify/fastifyTRPCPlugin.ts +16 -5
- package/src/adapters/fetch/fetchRequestHandler.ts +2 -2
- package/src/adapters/next-app-dir/nextAppDirCaller.ts +3 -0
- package/src/adapters/next-app-dir/rethrowNextErrors.ts +3 -2
- package/src/adapters/next.ts +29 -34
- package/src/adapters/node-http/incomingMessageToRequest.ts +110 -40
- package/src/adapters/node-http/nodeHTTPRequestHandler.ts +85 -63
- package/src/adapters/node-http/writeResponse.ts +94 -0
- package/src/adapters/standalone.ts +35 -18
- package/src/adapters/ws.ts +111 -57
- package/src/observable/behaviorSubject.ts +55 -0
- package/src/observable/index.ts +22 -3
- package/src/observable/observable.ts +32 -14
- package/src/observable/operators.ts +47 -0
- package/src/unstable-core-do-not-import/clientish/inference.ts +4 -4
- package/src/unstable-core-do-not-import/clientish/inferrable.ts +6 -6
- package/src/unstable-core-do-not-import/clientish/serialize.ts +5 -5
- package/src/unstable-core-do-not-import/http/getHTTPStatusCode.ts +37 -4
- package/src/unstable-core-do-not-import/http/isAbortError.ts +7 -0
- package/src/unstable-core-do-not-import/http/resolveResponse.ts +185 -90
- package/src/unstable-core-do-not-import/http/types.ts +1 -1
- package/src/unstable-core-do-not-import/initTRPC.ts +14 -20
- package/src/unstable-core-do-not-import/middleware.ts +5 -4
- package/src/unstable-core-do-not-import/parser.ts +17 -6
- package/src/unstable-core-do-not-import/procedure.ts +17 -2
- package/src/unstable-core-do-not-import/procedureBuilder.ts +137 -122
- package/src/unstable-core-do-not-import/rootConfig.ts +20 -20
- package/src/unstable-core-do-not-import/router.ts +15 -16
- package/src/unstable-core-do-not-import/rpc/codes.ts +2 -10
- package/src/unstable-core-do-not-import/rpc/envelopes.ts +7 -12
- package/src/unstable-core-do-not-import/stream/jsonl.ts +287 -296
- package/src/unstable-core-do-not-import/stream/sse.ts +338 -171
- package/src/unstable-core-do-not-import/stream/sse.types.ts +44 -0
- package/src/unstable-core-do-not-import/stream/tracked.ts +5 -11
- package/src/unstable-core-do-not-import/stream/utils/asyncIterable.ts +89 -0
- package/src/unstable-core-do-not-import/stream/utils/createDeferred.ts +0 -36
- package/src/unstable-core-do-not-import/stream/utils/disposable.ts +52 -0
- package/src/unstable-core-do-not-import/stream/utils/readableStreamFrom.ts +28 -0
- package/src/unstable-core-do-not-import/stream/utils/timerResource.ts +29 -0
- package/src/unstable-core-do-not-import/stream/utils/withPing.ts +47 -0
- package/src/unstable-core-do-not-import/transformer.ts +1 -1
- package/src/unstable-core-do-not-import/types.ts +35 -10
- package/src/unstable-core-do-not-import/utils.ts +56 -1
- package/src/unstable-core-do-not-import.ts +3 -2
- package/src/vendor/unpromise/ATTRIBUTION.txt +1 -0
- package/src/vendor/unpromise/LICENSE +20 -0
- package/src/vendor/unpromise/index.ts +7 -0
- package/src/vendor/unpromise/types.ts +55 -0
- package/src/vendor/unpromise/unpromise.ts +380 -0
- package/dist/unstable-core-do-not-import/http/batchStreamFormatter.d.ts +0 -24
- package/dist/unstable-core-do-not-import/http/batchStreamFormatter.d.ts.map +0 -1
- package/dist/unstable-core-do-not-import/http/batchStreamFormatter.js +0 -32
- package/dist/unstable-core-do-not-import/http/batchStreamFormatter.mjs +0 -30
- package/dist/unstable-core-do-not-import/http/toURL.d.ts +0 -2
- package/dist/unstable-core-do-not-import/http/toURL.d.ts.map +0 -1
- package/dist/unstable-core-do-not-import/http/toURL.js +0 -8
- package/dist/unstable-core-do-not-import/http/toURL.mjs +0 -6
- package/dist/unstable-core-do-not-import/stream/utils/createReadableStream.d.ts +0 -10
- package/dist/unstable-core-do-not-import/stream/utils/createReadableStream.d.ts.map +0 -1
- package/dist/unstable-core-do-not-import/stream/utils/createReadableStream.js +0 -31
- package/dist/unstable-core-do-not-import/stream/utils/createReadableStream.mjs +0 -29
- package/dist/unstable-core-do-not-import/stream/utils/createServer.d.ts +0 -7
- package/dist/unstable-core-do-not-import/stream/utils/createServer.d.ts.map +0 -1
- package/dist/unstable-core-do-not-import/types.js +0 -11
- package/dist/unstable-core-do-not-import/types.mjs +0 -9
- package/src/unstable-core-do-not-import/http/batchStreamFormatter.ts +0 -29
- package/src/unstable-core-do-not-import/http/toURL.ts +0 -7
- package/src/unstable-core-do-not-import/stream/utils/createReadableStream.ts +0 -31
- package/src/unstable-core-do-not-import/stream/utils/createServer.ts +0 -44
|
@@ -10,6 +10,11 @@ var utils = require('../utils.js');
|
|
|
10
10
|
var contentType = require('./contentType.js');
|
|
11
11
|
var getHTTPStatusCode = require('./getHTTPStatusCode.js');
|
|
12
12
|
|
|
13
|
+
function errorToAsyncIterable(err) {
|
|
14
|
+
return utils.run(async function*() {
|
|
15
|
+
throw err;
|
|
16
|
+
});
|
|
17
|
+
}
|
|
13
18
|
const TYPE_ACCEPTED_METHOD_MAP = {
|
|
14
19
|
mutation: [
|
|
15
20
|
'POST'
|
|
@@ -36,7 +41,7 @@ const TYPE_ACCEPTED_METHOD_MAP_WITH_METHOD_OVERRIDE = {
|
|
|
36
41
|
]
|
|
37
42
|
};
|
|
38
43
|
function initResponse(initOpts) {
|
|
39
|
-
const { ctx
|
|
44
|
+
const { ctx, info, responseMeta, untransformedJSON, errors = [], headers } = initOpts;
|
|
40
45
|
let status = untransformedJSON ? getHTTPStatusCode.getHTTPStatusCode(untransformedJSON) : 200;
|
|
41
46
|
const eagerGeneration = !untransformedJSON;
|
|
42
47
|
const data = eagerGeneration ? [] : Array.isArray(untransformedJSON) ? untransformedJSON : [
|
|
@@ -59,13 +64,13 @@ function initResponse(initOpts) {
|
|
|
59
64
|
} else {
|
|
60
65
|
/**
|
|
61
66
|
* @deprecated, delete in v12
|
|
62
|
-
*/ for (const [
|
|
63
|
-
if (Array.isArray(
|
|
64
|
-
for (const v of
|
|
65
|
-
headers.append(
|
|
67
|
+
*/ for (const [key, value] of Object.entries(meta.headers)){
|
|
68
|
+
if (Array.isArray(value)) {
|
|
69
|
+
for (const v of value){
|
|
70
|
+
headers.append(key, v);
|
|
66
71
|
}
|
|
67
|
-
} else if (typeof
|
|
68
|
-
headers.set(
|
|
72
|
+
} else if (typeof value === 'string') {
|
|
73
|
+
headers.set(key, value);
|
|
69
74
|
}
|
|
70
75
|
}
|
|
71
76
|
}
|
|
@@ -78,7 +83,7 @@ function initResponse(initOpts) {
|
|
|
78
83
|
};
|
|
79
84
|
}
|
|
80
85
|
function caughtErrorToData(cause, errorOpts) {
|
|
81
|
-
const { router
|
|
86
|
+
const { router, req, onError } = errorOpts.opts;
|
|
82
87
|
const error = TRPCError.getTRPCErrorFromUnknown(cause);
|
|
83
88
|
onError?.({
|
|
84
89
|
error,
|
|
@@ -120,7 +125,7 @@ function caughtErrorToData(cause, errorOpts) {
|
|
|
120
125
|
return Object.values(v).some(jsonl.isPromise) || Object.values(v).some(utils.isAsyncIterable);
|
|
121
126
|
}
|
|
122
127
|
async function resolveResponse(opts) {
|
|
123
|
-
const { router
|
|
128
|
+
const { router, req } = opts;
|
|
124
129
|
const headers = new Headers([
|
|
125
130
|
[
|
|
126
131
|
'vary',
|
|
@@ -137,28 +142,72 @@ async function resolveResponse(opts) {
|
|
|
137
142
|
}
|
|
138
143
|
const allowBatching = opts.allowBatching ?? opts.batching?.enabled ?? true;
|
|
139
144
|
const allowMethodOverride = (opts.allowMethodOverride ?? false) && req.method === 'POST';
|
|
140
|
-
|
|
141
|
-
|
|
145
|
+
const infoTuple = utils.run(()=>{
|
|
146
|
+
try {
|
|
147
|
+
return [
|
|
148
|
+
undefined,
|
|
149
|
+
contentType.getRequestInfo({
|
|
150
|
+
req,
|
|
151
|
+
path: decodeURIComponent(opts.path),
|
|
152
|
+
router,
|
|
153
|
+
searchParams: url.searchParams,
|
|
154
|
+
headers: opts.req.headers
|
|
155
|
+
})
|
|
156
|
+
];
|
|
157
|
+
} catch (cause) {
|
|
158
|
+
return [
|
|
159
|
+
TRPCError.getTRPCErrorFromUnknown(cause),
|
|
160
|
+
undefined
|
|
161
|
+
];
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
const ctxManager = utils.run(()=>{
|
|
165
|
+
let result = undefined;
|
|
166
|
+
return {
|
|
167
|
+
valueOrUndefined: ()=>{
|
|
168
|
+
if (!result) {
|
|
169
|
+
return undefined;
|
|
170
|
+
}
|
|
171
|
+
return result[1];
|
|
172
|
+
},
|
|
173
|
+
value: ()=>{
|
|
174
|
+
const [err, ctx] = result;
|
|
175
|
+
if (err) {
|
|
176
|
+
throw err;
|
|
177
|
+
}
|
|
178
|
+
return ctx;
|
|
179
|
+
},
|
|
180
|
+
create: async (info)=>{
|
|
181
|
+
if (result) {
|
|
182
|
+
throw new Error('This should only be called once - report a bug in tRPC');
|
|
183
|
+
}
|
|
184
|
+
try {
|
|
185
|
+
const ctx = await opts.createContext({
|
|
186
|
+
info
|
|
187
|
+
});
|
|
188
|
+
result = [
|
|
189
|
+
undefined,
|
|
190
|
+
ctx
|
|
191
|
+
];
|
|
192
|
+
} catch (cause) {
|
|
193
|
+
result = [
|
|
194
|
+
TRPCError.getTRPCErrorFromUnknown(cause),
|
|
195
|
+
undefined
|
|
196
|
+
];
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
};
|
|
200
|
+
});
|
|
142
201
|
const methodMapper = allowMethodOverride ? TYPE_ACCEPTED_METHOD_MAP_WITH_METHOD_OVERRIDE : TYPE_ACCEPTED_METHOD_MAP;
|
|
143
202
|
/**
|
|
144
203
|
* @deprecated
|
|
145
204
|
*/ const isStreamCall = req.headers.get('trpc-accept') === 'application/jsonl';
|
|
146
|
-
const experimentalIterablesAndDeferreds =
|
|
147
|
-
const experimentalSSE =
|
|
205
|
+
const experimentalIterablesAndDeferreds = config.iterablesAndDeferreds ?? true;
|
|
206
|
+
const experimentalSSE = config.sse?.enabled ?? true;
|
|
148
207
|
try {
|
|
149
|
-
info =
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
router,
|
|
153
|
-
searchParams: url.searchParams,
|
|
154
|
-
headers: opts.req.headers
|
|
155
|
-
});
|
|
156
|
-
// we create context early so that error handlers may access context information
|
|
157
|
-
ctx = await opts.createContext({
|
|
158
|
-
info
|
|
159
|
-
});
|
|
160
|
-
if (opts.error) {
|
|
161
|
-
throw opts.error;
|
|
208
|
+
const [infoError, info] = infoTuple;
|
|
209
|
+
if (infoError) {
|
|
210
|
+
throw infoError;
|
|
162
211
|
}
|
|
163
212
|
if (info.isBatchCall && !allowBatching) {
|
|
164
213
|
throw new TRPCError.TRPCError({
|
|
@@ -172,9 +221,13 @@ async function resolveResponse(opts) {
|
|
|
172
221
|
code: 'BAD_REQUEST'
|
|
173
222
|
});
|
|
174
223
|
}
|
|
224
|
+
await ctxManager.create(info);
|
|
175
225
|
const rpcCalls = info.calls.map(async (call)=>{
|
|
176
226
|
const proc = call.procedure;
|
|
177
227
|
try {
|
|
228
|
+
if (opts.error) {
|
|
229
|
+
throw opts.error;
|
|
230
|
+
}
|
|
178
231
|
if (!proc) {
|
|
179
232
|
throw new TRPCError.TRPCError({
|
|
180
233
|
code: 'NOT_FOUND',
|
|
@@ -187,20 +240,26 @@ async function resolveResponse(opts) {
|
|
|
187
240
|
message: `Unsupported ${req.method}-request to ${proc._def.type} procedure at path "${call.path}"`
|
|
188
241
|
});
|
|
189
242
|
}
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
243
|
+
if (proc._def.type === 'subscription') {
|
|
244
|
+
/* istanbul ignore if -- @preserve */ if (info.isBatchCall) {
|
|
245
|
+
throw new TRPCError.TRPCError({
|
|
246
|
+
code: 'BAD_REQUEST',
|
|
247
|
+
message: `Cannot batch subscription calls`
|
|
248
|
+
});
|
|
249
|
+
}
|
|
195
250
|
}
|
|
196
251
|
const data = await proc({
|
|
197
252
|
path: call.path,
|
|
198
253
|
getRawInput: call.getRawInput,
|
|
199
|
-
ctx,
|
|
200
|
-
type: proc._def.type
|
|
254
|
+
ctx: ctxManager.value(),
|
|
255
|
+
type: proc._def.type,
|
|
256
|
+
signal: opts.req.signal
|
|
201
257
|
});
|
|
202
258
|
return [
|
|
203
|
-
|
|
259
|
+
undefined,
|
|
260
|
+
{
|
|
261
|
+
data
|
|
262
|
+
}
|
|
204
263
|
];
|
|
205
264
|
} catch (cause) {
|
|
206
265
|
const error = TRPCError.getTRPCErrorFromUnknown(cause);
|
|
@@ -209,20 +268,20 @@ async function resolveResponse(opts) {
|
|
|
209
268
|
error,
|
|
210
269
|
path: call.path,
|
|
211
270
|
input,
|
|
212
|
-
ctx,
|
|
271
|
+
ctx: ctxManager.valueOrUndefined(),
|
|
213
272
|
type: call.procedure?._def.type ?? 'unknown',
|
|
214
273
|
req: opts.req
|
|
215
274
|
});
|
|
216
275
|
return [
|
|
217
|
-
|
|
218
|
-
|
|
276
|
+
error,
|
|
277
|
+
undefined
|
|
219
278
|
];
|
|
220
279
|
}
|
|
221
280
|
});
|
|
222
281
|
// ----------- response handlers -----------
|
|
223
282
|
if (!info.isBatchCall) {
|
|
224
283
|
const [call] = info.calls;
|
|
225
|
-
const [
|
|
284
|
+
const [error, result] = await rpcCalls[0];
|
|
226
285
|
switch(info.type){
|
|
227
286
|
case 'unknown':
|
|
228
287
|
case 'mutation':
|
|
@@ -230,7 +289,7 @@ async function resolveResponse(opts) {
|
|
|
230
289
|
{
|
|
231
290
|
// httpLink
|
|
232
291
|
headers.set('content-type', 'application/json');
|
|
233
|
-
if (isDataStream(data)) {
|
|
292
|
+
if (isDataStream(result?.data)) {
|
|
234
293
|
throw new TRPCError.TRPCError({
|
|
235
294
|
code: 'UNSUPPORTED_MEDIA_TYPE',
|
|
236
295
|
message: 'Cannot use stream-like response in non-streaming request - use httpBatchStreamLink'
|
|
@@ -239,7 +298,7 @@ async function resolveResponse(opts) {
|
|
|
239
298
|
const res = error ? {
|
|
240
299
|
error: getErrorShape.getErrorShape({
|
|
241
300
|
config,
|
|
242
|
-
ctx,
|
|
301
|
+
ctx: ctxManager.valueOrUndefined(),
|
|
243
302
|
error,
|
|
244
303
|
input: call.result(),
|
|
245
304
|
path: call.path,
|
|
@@ -247,11 +306,11 @@ async function resolveResponse(opts) {
|
|
|
247
306
|
})
|
|
248
307
|
} : {
|
|
249
308
|
result: {
|
|
250
|
-
data
|
|
309
|
+
data: result.data
|
|
251
310
|
}
|
|
252
311
|
};
|
|
253
312
|
const headResponse = initResponse({
|
|
254
|
-
ctx,
|
|
313
|
+
ctx: ctxManager.valueOrUndefined(),
|
|
255
314
|
info,
|
|
256
315
|
responseMeta: opts.responseMeta,
|
|
257
316
|
errors: error ? [
|
|
@@ -270,31 +329,49 @@ async function resolveResponse(opts) {
|
|
|
270
329
|
case 'subscription':
|
|
271
330
|
{
|
|
272
331
|
// httpSubscriptionLink
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
332
|
+
const iterable = utils.run(()=>{
|
|
333
|
+
if (error) {
|
|
334
|
+
return errorToAsyncIterable(error);
|
|
335
|
+
}
|
|
336
|
+
if (!experimentalSSE) {
|
|
337
|
+
return errorToAsyncIterable(new TRPCError.TRPCError({
|
|
338
|
+
code: 'METHOD_NOT_SUPPORTED',
|
|
339
|
+
message: 'Missing experimental flag "sseSubscriptions"'
|
|
340
|
+
}));
|
|
341
|
+
}
|
|
342
|
+
if (!observable.isObservable(result.data) && !utils.isAsyncIterable(result.data)) {
|
|
343
|
+
return errorToAsyncIterable(new TRPCError.TRPCError({
|
|
344
|
+
message: `Subscription ${call.path} did not return an observable or a AsyncGenerator`,
|
|
345
|
+
code: 'INTERNAL_SERVER_ERROR'
|
|
346
|
+
}));
|
|
347
|
+
}
|
|
348
|
+
const dataAsIterable = observable.isObservable(result.data) ? observable.observableToAsyncIterable(result.data, opts.req.signal) : result.data;
|
|
349
|
+
return dataAsIterable;
|
|
350
|
+
});
|
|
286
351
|
const stream = sse.sseStreamProducer({
|
|
287
|
-
...config.
|
|
288
|
-
data:
|
|
352
|
+
...config.sse,
|
|
353
|
+
data: iterable,
|
|
289
354
|
serialize: (v)=>config.transformer.output.serialize(v),
|
|
290
355
|
formatError (errorOpts) {
|
|
356
|
+
const error = TRPCError.getTRPCErrorFromUnknown(errorOpts.error);
|
|
357
|
+
const input = call?.result();
|
|
358
|
+
const path = call?.path;
|
|
359
|
+
const type = call?.procedure?._def.type ?? 'unknown';
|
|
360
|
+
opts.onError?.({
|
|
361
|
+
error,
|
|
362
|
+
path,
|
|
363
|
+
input,
|
|
364
|
+
ctx: ctxManager.valueOrUndefined(),
|
|
365
|
+
req: opts.req,
|
|
366
|
+
type
|
|
367
|
+
});
|
|
291
368
|
const shape = getErrorShape.getErrorShape({
|
|
292
369
|
config,
|
|
293
|
-
ctx,
|
|
294
|
-
error
|
|
295
|
-
input
|
|
296
|
-
path
|
|
297
|
-
type
|
|
370
|
+
ctx: ctxManager.valueOrUndefined(),
|
|
371
|
+
error,
|
|
372
|
+
input,
|
|
373
|
+
path,
|
|
374
|
+
type
|
|
298
375
|
});
|
|
299
376
|
return shape;
|
|
300
377
|
}
|
|
@@ -302,8 +379,8 @@ async function resolveResponse(opts) {
|
|
|
302
379
|
for (const [key, value] of Object.entries(sse.sseHeaders)){
|
|
303
380
|
headers.set(key, value);
|
|
304
381
|
}
|
|
305
|
-
const
|
|
306
|
-
ctx,
|
|
382
|
+
const headResponse = initResponse({
|
|
383
|
+
ctx: ctxManager.valueOrUndefined(),
|
|
307
384
|
info,
|
|
308
385
|
responseMeta: opts.responseMeta,
|
|
309
386
|
errors: [],
|
|
@@ -312,7 +389,7 @@ async function resolveResponse(opts) {
|
|
|
312
389
|
});
|
|
313
390
|
return new Response(stream, {
|
|
314
391
|
headers,
|
|
315
|
-
status:
|
|
392
|
+
status: headResponse.status
|
|
316
393
|
});
|
|
317
394
|
}
|
|
318
395
|
}
|
|
@@ -322,15 +399,15 @@ async function resolveResponse(opts) {
|
|
|
322
399
|
// httpBatchStreamLink
|
|
323
400
|
headers.set('content-type', 'application/json');
|
|
324
401
|
headers.set('transfer-encoding', 'chunked');
|
|
325
|
-
const
|
|
326
|
-
ctx,
|
|
402
|
+
const headResponse = initResponse({
|
|
403
|
+
ctx: ctxManager.valueOrUndefined(),
|
|
327
404
|
info,
|
|
328
405
|
responseMeta: opts.responseMeta,
|
|
329
406
|
errors: [],
|
|
330
407
|
headers,
|
|
331
408
|
untransformedJSON: null
|
|
332
409
|
});
|
|
333
|
-
const
|
|
410
|
+
const stream = jsonl.jsonlStreamProducer({
|
|
334
411
|
/**
|
|
335
412
|
* Example structure for `maxDepth: 4`:
|
|
336
413
|
* {
|
|
@@ -345,13 +422,13 @@ async function resolveResponse(opts) {
|
|
|
345
422
|
* }
|
|
346
423
|
*/ maxDepth: experimentalIterablesAndDeferreds ? 4 : 3,
|
|
347
424
|
data: rpcCalls.map(async (res)=>{
|
|
348
|
-
const [
|
|
425
|
+
const [error, result] = await res;
|
|
349
426
|
const call = info.calls[0];
|
|
350
427
|
if (error) {
|
|
351
428
|
return {
|
|
352
429
|
error: getErrorShape.getErrorShape({
|
|
353
430
|
config,
|
|
354
|
-
ctx,
|
|
431
|
+
ctx: ctxManager.valueOrUndefined(),
|
|
355
432
|
error,
|
|
356
433
|
input: call.result(),
|
|
357
434
|
path: call.path,
|
|
@@ -362,10 +439,10 @@ async function resolveResponse(opts) {
|
|
|
362
439
|
/**
|
|
363
440
|
* Not very pretty, but we need to wrap nested data in promises
|
|
364
441
|
* Our stream producer will only resolve top-level async values or async values that are directly nested in another async value
|
|
365
|
-
*/ const
|
|
442
|
+
*/ const iterable = observable.isObservable(result.data) ? observable.observableToAsyncIterable(result.data, opts.req.signal) : Promise.resolve(result.data);
|
|
366
443
|
return {
|
|
367
444
|
result: Promise.resolve({
|
|
368
|
-
data
|
|
445
|
+
data: iterable
|
|
369
446
|
})
|
|
370
447
|
};
|
|
371
448
|
}),
|
|
@@ -375,27 +452,32 @@ async function resolveResponse(opts) {
|
|
|
375
452
|
error: TRPCError.getTRPCErrorFromUnknown(cause),
|
|
376
453
|
path: undefined,
|
|
377
454
|
input: undefined,
|
|
378
|
-
ctx,
|
|
455
|
+
ctx: ctxManager.valueOrUndefined(),
|
|
379
456
|
req: opts.req,
|
|
380
457
|
type: info?.type ?? 'unknown'
|
|
381
458
|
});
|
|
382
459
|
},
|
|
383
460
|
formatError (errorOpts) {
|
|
384
461
|
const call = info?.calls[errorOpts.path[0]];
|
|
462
|
+
const error = TRPCError.getTRPCErrorFromUnknown(errorOpts.error);
|
|
463
|
+
const input = call?.result();
|
|
464
|
+
const path = call?.path;
|
|
465
|
+
const type = call?.procedure?._def.type ?? 'unknown';
|
|
466
|
+
// no need to call `onError` here as it will be propagated through the stream itself
|
|
385
467
|
const shape = getErrorShape.getErrorShape({
|
|
386
468
|
config,
|
|
387
|
-
ctx,
|
|
388
|
-
error
|
|
389
|
-
input
|
|
390
|
-
path
|
|
391
|
-
type
|
|
469
|
+
ctx: ctxManager.valueOrUndefined(),
|
|
470
|
+
error,
|
|
471
|
+
input,
|
|
472
|
+
path,
|
|
473
|
+
type
|
|
392
474
|
});
|
|
393
475
|
return shape;
|
|
394
476
|
}
|
|
395
477
|
});
|
|
396
|
-
return new Response(
|
|
478
|
+
return new Response(stream, {
|
|
397
479
|
headers,
|
|
398
|
-
status:
|
|
480
|
+
status: headResponse.status
|
|
399
481
|
});
|
|
400
482
|
}
|
|
401
483
|
// httpBatchLink
|
|
@@ -406,28 +488,28 @@ async function resolveResponse(opts) {
|
|
|
406
488
|
* - return a complete HTTPResponse
|
|
407
489
|
*/ headers.set('content-type', 'application/json');
|
|
408
490
|
const results = (await Promise.all(rpcCalls)).map((res)=>{
|
|
409
|
-
const [
|
|
491
|
+
const [error, result] = res;
|
|
410
492
|
if (error) {
|
|
411
493
|
return res;
|
|
412
494
|
}
|
|
413
|
-
if (isDataStream(data)) {
|
|
495
|
+
if (isDataStream(result.data)) {
|
|
414
496
|
return [
|
|
415
|
-
null,
|
|
416
497
|
new TRPCError.TRPCError({
|
|
417
498
|
code: 'UNSUPPORTED_MEDIA_TYPE',
|
|
418
499
|
message: 'Cannot use stream-like response in non-streaming request - use httpBatchStreamLink'
|
|
419
|
-
})
|
|
500
|
+
}),
|
|
501
|
+
undefined
|
|
420
502
|
];
|
|
421
503
|
}
|
|
422
504
|
return res;
|
|
423
505
|
});
|
|
424
|
-
const resultAsRPCResponse = results.map(([
|
|
506
|
+
const resultAsRPCResponse = results.map(([error, result], index)=>{
|
|
425
507
|
const call = info.calls[index];
|
|
426
508
|
if (error) {
|
|
427
509
|
return {
|
|
428
510
|
error: getErrorShape.getErrorShape({
|
|
429
511
|
config,
|
|
430
|
-
ctx,
|
|
512
|
+
ctx: ctxManager.valueOrUndefined(),
|
|
431
513
|
error,
|
|
432
514
|
input: call.result(),
|
|
433
515
|
path: call.path,
|
|
@@ -437,13 +519,13 @@ async function resolveResponse(opts) {
|
|
|
437
519
|
}
|
|
438
520
|
return {
|
|
439
521
|
result: {
|
|
440
|
-
data
|
|
522
|
+
data: result.data
|
|
441
523
|
}
|
|
442
524
|
};
|
|
443
525
|
});
|
|
444
|
-
const errors = results.map(([
|
|
445
|
-
const
|
|
446
|
-
ctx,
|
|
526
|
+
const errors = results.map(([error])=>error).filter(Boolean);
|
|
527
|
+
const headResponse = initResponse({
|
|
528
|
+
ctx: ctxManager.valueOrUndefined(),
|
|
447
529
|
info,
|
|
448
530
|
responseMeta: opts.responseMeta,
|
|
449
531
|
untransformedJSON: resultAsRPCResponse,
|
|
@@ -451,10 +533,12 @@ async function resolveResponse(opts) {
|
|
|
451
533
|
headers
|
|
452
534
|
});
|
|
453
535
|
return new Response(JSON.stringify(transformer.transformTRPCResponse(config, resultAsRPCResponse)), {
|
|
454
|
-
status:
|
|
536
|
+
status: headResponse.status,
|
|
455
537
|
headers
|
|
456
538
|
});
|
|
457
539
|
} catch (cause) {
|
|
540
|
+
const [_infoError, info] = infoTuple;
|
|
541
|
+
const ctx = ctxManager.valueOrUndefined();
|
|
458
542
|
// we get here if
|
|
459
543
|
// - batching is called when it's not enabled
|
|
460
544
|
// - `createContext()` throws
|
|
@@ -462,23 +546,23 @@ async function resolveResponse(opts) {
|
|
|
462
546
|
// - post body is too large
|
|
463
547
|
// - input deserialization fails
|
|
464
548
|
// - `errorFormatter` return value is malformed
|
|
465
|
-
const { error
|
|
549
|
+
const { error, untransformedJSON, body } = caughtErrorToData(cause, {
|
|
466
550
|
opts,
|
|
467
|
-
ctx,
|
|
551
|
+
ctx: ctxManager.valueOrUndefined(),
|
|
468
552
|
type: info?.type ?? 'unknown'
|
|
469
553
|
});
|
|
470
|
-
const
|
|
554
|
+
const headResponse = initResponse({
|
|
471
555
|
ctx,
|
|
472
556
|
info,
|
|
473
557
|
responseMeta: opts.responseMeta,
|
|
474
558
|
untransformedJSON,
|
|
475
559
|
errors: [
|
|
476
|
-
|
|
560
|
+
error
|
|
477
561
|
],
|
|
478
562
|
headers
|
|
479
563
|
});
|
|
480
564
|
return new Response(body, {
|
|
481
|
-
status:
|
|
565
|
+
status: headResponse.status,
|
|
482
566
|
headers
|
|
483
567
|
});
|
|
484
568
|
}
|