@trpc/server 11.0.0-alpha-tmp-subscription-connection-state.489 → 11.0.0-alpha-tmp-12-06-react.667
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 +415 -313
- 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
|
@@ -1,231 +1,332 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Unpromise } from '../../vendor/unpromise/unpromise.mjs';
|
|
2
2
|
import { isObject, isFunction, isAsyncIterable, run } from '../utils.mjs';
|
|
3
|
+
import { iteratorResource } from './utils/asyncIterable.mjs';
|
|
3
4
|
import { createDeferred } from './utils/createDeferred.mjs';
|
|
4
|
-
import {
|
|
5
|
+
import { makeAsyncResource, makeResource } from './utils/disposable.mjs';
|
|
6
|
+
import { readableStreamFrom } from './utils/readableStreamFrom.mjs';
|
|
5
7
|
|
|
8
|
+
function _define_property(obj, key, value) {
|
|
9
|
+
if (key in obj) {
|
|
10
|
+
Object.defineProperty(obj, key, {
|
|
11
|
+
value: value,
|
|
12
|
+
enumerable: true,
|
|
13
|
+
configurable: true,
|
|
14
|
+
writable: true
|
|
15
|
+
});
|
|
16
|
+
} else {
|
|
17
|
+
obj[key] = value;
|
|
18
|
+
}
|
|
19
|
+
return obj;
|
|
20
|
+
}
|
|
21
|
+
function _ts_add_disposable_resource(env, value, async) {
|
|
22
|
+
if (value !== null && value !== void 0) {
|
|
23
|
+
if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
|
|
24
|
+
var dispose, inner;
|
|
25
|
+
if (async) {
|
|
26
|
+
if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
|
|
27
|
+
dispose = value[Symbol.asyncDispose];
|
|
28
|
+
}
|
|
29
|
+
if (dispose === void 0) {
|
|
30
|
+
if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
|
|
31
|
+
dispose = value[Symbol.dispose];
|
|
32
|
+
if (async) inner = dispose;
|
|
33
|
+
}
|
|
34
|
+
if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
|
|
35
|
+
if (inner) dispose = function() {
|
|
36
|
+
try {
|
|
37
|
+
inner.call(this);
|
|
38
|
+
} catch (e) {
|
|
39
|
+
return Promise.reject(e);
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
env.stack.push({
|
|
43
|
+
value: value,
|
|
44
|
+
dispose: dispose,
|
|
45
|
+
async: async
|
|
46
|
+
});
|
|
47
|
+
} else if (async) {
|
|
48
|
+
env.stack.push({
|
|
49
|
+
async: true
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
return value;
|
|
53
|
+
}
|
|
54
|
+
function _ts_dispose_resources(env) {
|
|
55
|
+
var _SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function(error, suppressed, message) {
|
|
56
|
+
var e = new Error(message);
|
|
57
|
+
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
58
|
+
};
|
|
59
|
+
return (_ts_dispose_resources = function _ts_dispose_resources(env) {
|
|
60
|
+
function fail(e) {
|
|
61
|
+
env.error = env.hasError ? new _SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
|
|
62
|
+
env.hasError = true;
|
|
63
|
+
}
|
|
64
|
+
var r, s = 0;
|
|
65
|
+
function next() {
|
|
66
|
+
while(r = env.stack.pop()){
|
|
67
|
+
try {
|
|
68
|
+
if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);
|
|
69
|
+
if (r.dispose) {
|
|
70
|
+
var result = r.dispose.call(r.value);
|
|
71
|
+
if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) {
|
|
72
|
+
fail(e);
|
|
73
|
+
return next();
|
|
74
|
+
});
|
|
75
|
+
} else s |= 1;
|
|
76
|
+
} catch (e) {
|
|
77
|
+
fail(e);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();
|
|
81
|
+
if (env.hasError) throw env.error;
|
|
82
|
+
}
|
|
83
|
+
return next();
|
|
84
|
+
})(env);
|
|
85
|
+
}
|
|
86
|
+
// ---------- types
|
|
6
87
|
// ---------- types
|
|
7
88
|
const CHUNK_VALUE_TYPE_PROMISE = 0;
|
|
8
89
|
const CHUNK_VALUE_TYPE_ASYNC_ITERABLE = 1;
|
|
9
90
|
const PROMISE_STATUS_FULFILLED = 0;
|
|
10
91
|
const PROMISE_STATUS_REJECTED = 1;
|
|
11
92
|
const ASYNC_ITERABLE_STATUS_RETURN = 0;
|
|
12
|
-
const
|
|
93
|
+
const ASYNC_ITERABLE_STATUS_YIELD = 1;
|
|
13
94
|
const ASYNC_ITERABLE_STATUS_ERROR = 2;
|
|
14
95
|
function isPromise(value) {
|
|
15
96
|
return (isObject(value) || isFunction(value)) && typeof value?.['then'] === 'function' && typeof value?.['catch'] === 'function';
|
|
16
97
|
}
|
|
17
98
|
class MaxDepthError extends Error {
|
|
18
99
|
constructor(path){
|
|
19
|
-
super('Max depth reached at path: ' + path.join('.'));
|
|
20
|
-
this.path = path;
|
|
100
|
+
super('Max depth reached at path: ' + path.join('.')), _define_property(this, "path", void 0), this.path = path;
|
|
21
101
|
}
|
|
22
102
|
}
|
|
23
|
-
function createBatchStreamProducer(opts) {
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
103
|
+
async function* createBatchStreamProducer(opts) {
|
|
104
|
+
const env = {
|
|
105
|
+
stack: [],
|
|
106
|
+
error: void 0,
|
|
107
|
+
hasError: false
|
|
108
|
+
};
|
|
109
|
+
try {
|
|
110
|
+
const { data } = opts;
|
|
111
|
+
let counter = 0;
|
|
112
|
+
const placeholder = 0;
|
|
113
|
+
const queue = _ts_add_disposable_resource(env, makeAsyncResource(new Set(), async ()=>{
|
|
114
|
+
await Promise.all(Array.from(queue).map((it)=>it.iterator.return?.()));
|
|
115
|
+
}), true);
|
|
116
|
+
;
|
|
117
|
+
function registerAsync(callback) {
|
|
118
|
+
const idx = counter++;
|
|
119
|
+
const iterator = callback(idx)[Symbol.asyncIterator]();
|
|
120
|
+
const nextPromise = iterator.next();
|
|
121
|
+
nextPromise.catch(()=>{
|
|
122
|
+
// prevent unhandled promise rejection
|
|
40
123
|
});
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
pending.add(idx);
|
|
45
|
-
Promise.race([
|
|
46
|
-
promise,
|
|
47
|
-
stream.cancelledPromise
|
|
48
|
-
]).then((it)=>{
|
|
49
|
-
if (it === null) {
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
stream.controller.enqueue([
|
|
53
|
-
idx,
|
|
54
|
-
PROMISE_STATUS_FULFILLED,
|
|
55
|
-
dehydrate(it, path)
|
|
56
|
-
]);
|
|
57
|
-
}).catch((cause)=>{
|
|
58
|
-
opts.onError?.({
|
|
59
|
-
error: cause,
|
|
60
|
-
path
|
|
124
|
+
queue.add({
|
|
125
|
+
iterator,
|
|
126
|
+
nextPromise
|
|
61
127
|
});
|
|
62
|
-
|
|
63
|
-
idx,
|
|
64
|
-
PROMISE_STATUS_REJECTED,
|
|
65
|
-
opts.formatError?.({
|
|
66
|
-
error: cause,
|
|
67
|
-
path
|
|
68
|
-
})
|
|
69
|
-
]);
|
|
70
|
-
}).finally(()=>{
|
|
71
|
-
pending.delete(idx);
|
|
72
|
-
maybeClose();
|
|
73
|
-
});
|
|
74
|
-
return idx;
|
|
75
|
-
}
|
|
76
|
-
function dehydrateAsyncIterable(iterable, path) {
|
|
77
|
-
const error = checkMaxDepth(path);
|
|
78
|
-
if (error) {
|
|
79
|
-
iterable = {
|
|
80
|
-
[Symbol.asyncIterator] () {
|
|
81
|
-
throw error;
|
|
82
|
-
}
|
|
83
|
-
};
|
|
128
|
+
return idx;
|
|
84
129
|
}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
130
|
+
function encodePromise(promise, path) {
|
|
131
|
+
return registerAsync(async function*(idx) {
|
|
132
|
+
const error = checkMaxDepth(path);
|
|
133
|
+
if (error) {
|
|
134
|
+
// Catch any errors from the original promise to ensure they're reported
|
|
135
|
+
promise.catch((cause)=>{
|
|
136
|
+
opts.onError?.({
|
|
137
|
+
error: cause,
|
|
138
|
+
path
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
// Replace the promise with a rejected one containing the max depth error
|
|
142
|
+
promise = Promise.reject(error);
|
|
143
|
+
}
|
|
144
|
+
try {
|
|
145
|
+
const next = await promise;
|
|
146
|
+
return [
|
|
147
|
+
idx,
|
|
148
|
+
PROMISE_STATUS_FULFILLED,
|
|
149
|
+
encode(next, path)
|
|
150
|
+
];
|
|
151
|
+
} catch (cause) {
|
|
95
152
|
opts.onError?.({
|
|
96
|
-
error:
|
|
153
|
+
error: cause,
|
|
97
154
|
path
|
|
98
155
|
});
|
|
99
|
-
|
|
156
|
+
return [
|
|
100
157
|
idx,
|
|
101
|
-
|
|
158
|
+
PROMISE_STATUS_REJECTED,
|
|
102
159
|
opts.formatError?.({
|
|
103
|
-
error:
|
|
160
|
+
error: cause,
|
|
104
161
|
path
|
|
105
162
|
})
|
|
106
|
-
]
|
|
107
|
-
return;
|
|
163
|
+
];
|
|
108
164
|
}
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
function encodeAsyncIterable(iterable, path) {
|
|
168
|
+
return registerAsync(async function*(idx) {
|
|
169
|
+
const env = {
|
|
170
|
+
stack: [],
|
|
171
|
+
error: void 0,
|
|
172
|
+
hasError: false
|
|
173
|
+
};
|
|
174
|
+
try {
|
|
175
|
+
const error = checkMaxDepth(path);
|
|
176
|
+
if (error) {
|
|
177
|
+
throw error;
|
|
178
|
+
}
|
|
179
|
+
const iterator = _ts_add_disposable_resource(env, iteratorResource(iterable), true);
|
|
180
|
+
;
|
|
181
|
+
try {
|
|
182
|
+
while(true){
|
|
183
|
+
const next = await iterator.next();
|
|
184
|
+
if (next.done) {
|
|
185
|
+
return [
|
|
186
|
+
idx,
|
|
187
|
+
ASYNC_ITERABLE_STATUS_RETURN,
|
|
188
|
+
encode(next.value, path)
|
|
189
|
+
];
|
|
190
|
+
}
|
|
191
|
+
yield [
|
|
192
|
+
idx,
|
|
193
|
+
ASYNC_ITERABLE_STATUS_YIELD,
|
|
194
|
+
encode(next.value, path)
|
|
195
|
+
];
|
|
196
|
+
}
|
|
197
|
+
} catch (cause) {
|
|
198
|
+
opts.onError?.({
|
|
199
|
+
error: cause,
|
|
200
|
+
path
|
|
201
|
+
});
|
|
202
|
+
return [
|
|
203
|
+
idx,
|
|
204
|
+
ASYNC_ITERABLE_STATUS_ERROR,
|
|
205
|
+
opts.formatError?.({
|
|
206
|
+
error: cause,
|
|
207
|
+
path
|
|
208
|
+
})
|
|
209
|
+
];
|
|
210
|
+
}
|
|
211
|
+
} catch (e) {
|
|
212
|
+
env.error = e;
|
|
213
|
+
env.hasError = true;
|
|
214
|
+
} finally{
|
|
215
|
+
const result = _ts_dispose_resources(env);
|
|
216
|
+
if (result) await result;
|
|
120
217
|
}
|
|
121
|
-
stream.controller.enqueue([
|
|
122
|
-
idx,
|
|
123
|
-
ASYNC_ITERABLE_STATUS_VALUE,
|
|
124
|
-
dehydrate(next.value, path)
|
|
125
|
-
]);
|
|
126
|
-
}
|
|
127
|
-
pending.delete(idx);
|
|
128
|
-
maybeClose();
|
|
129
|
-
}).catch((cause)=>{
|
|
130
|
-
// this shouldn't happen, but node crashes if we don't catch it
|
|
131
|
-
opts.onError?.({
|
|
132
|
-
error: new Error('You found a bug - please report it on https://github.com/trpc/trpc', // eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
133
|
-
// @ts-ignore https://github.com/tc39/proposal-error-cause
|
|
134
|
-
{
|
|
135
|
-
cause
|
|
136
|
-
}),
|
|
137
|
-
path
|
|
138
218
|
});
|
|
139
|
-
});
|
|
140
|
-
return idx;
|
|
141
|
-
}
|
|
142
|
-
function checkMaxDepth(path) {
|
|
143
|
-
if (opts.maxDepth && path.length > opts.maxDepth) {
|
|
144
|
-
return new MaxDepthError(path);
|
|
145
219
|
}
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
return
|
|
151
|
-
CHUNK_VALUE_TYPE_PROMISE,
|
|
152
|
-
dehydratePromise(value, path)
|
|
153
|
-
];
|
|
220
|
+
function checkMaxDepth(path) {
|
|
221
|
+
if (opts.maxDepth && path.length > opts.maxDepth) {
|
|
222
|
+
return new MaxDepthError(path);
|
|
223
|
+
}
|
|
224
|
+
return null;
|
|
154
225
|
}
|
|
155
|
-
|
|
156
|
-
if (
|
|
157
|
-
|
|
226
|
+
function encodeAsync(value, path) {
|
|
227
|
+
if (isPromise(value)) {
|
|
228
|
+
return [
|
|
229
|
+
CHUNK_VALUE_TYPE_PROMISE,
|
|
230
|
+
encodePromise(value, path)
|
|
231
|
+
];
|
|
158
232
|
}
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
233
|
+
if (isAsyncIterable(value)) {
|
|
234
|
+
if (opts.maxDepth && path.length >= opts.maxDepth) {
|
|
235
|
+
throw new Error('Max depth reached');
|
|
236
|
+
}
|
|
237
|
+
return [
|
|
238
|
+
CHUNK_VALUE_TYPE_ASYNC_ITERABLE,
|
|
239
|
+
encodeAsyncIterable(value, path)
|
|
240
|
+
];
|
|
241
|
+
}
|
|
242
|
+
return null;
|
|
163
243
|
}
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
244
|
+
function encode(value, path) {
|
|
245
|
+
if (value === undefined) {
|
|
246
|
+
return [
|
|
247
|
+
[]
|
|
248
|
+
];
|
|
249
|
+
}
|
|
250
|
+
if (!isObject(value)) {
|
|
251
|
+
return [
|
|
252
|
+
[
|
|
253
|
+
value
|
|
254
|
+
]
|
|
255
|
+
];
|
|
256
|
+
}
|
|
257
|
+
const reg = encodeAsync(value, path);
|
|
258
|
+
if (reg) {
|
|
259
|
+
return [
|
|
260
|
+
[
|
|
261
|
+
placeholder
|
|
262
|
+
],
|
|
263
|
+
[
|
|
264
|
+
null,
|
|
265
|
+
...reg
|
|
266
|
+
]
|
|
267
|
+
];
|
|
268
|
+
}
|
|
269
|
+
const newObj = {};
|
|
270
|
+
const asyncValues = [];
|
|
271
|
+
for (const [key, item] of Object.entries(value)){
|
|
272
|
+
const transformed = encodeAsync(item, [
|
|
273
|
+
...path,
|
|
274
|
+
key
|
|
275
|
+
]);
|
|
276
|
+
if (!transformed) {
|
|
277
|
+
newObj[key] = item;
|
|
278
|
+
continue;
|
|
279
|
+
}
|
|
280
|
+
newObj[key] = placeholder;
|
|
281
|
+
asyncValues.push([
|
|
282
|
+
key,
|
|
283
|
+
...transformed
|
|
284
|
+
]);
|
|
285
|
+
}
|
|
169
286
|
return [
|
|
170
287
|
[
|
|
171
|
-
|
|
288
|
+
newObj
|
|
172
289
|
],
|
|
173
|
-
|
|
174
|
-
null,
|
|
175
|
-
...reg
|
|
176
|
-
]
|
|
290
|
+
...asyncValues
|
|
177
291
|
];
|
|
178
292
|
}
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
value
|
|
183
|
-
]
|
|
184
|
-
];
|
|
185
|
-
}
|
|
186
|
-
const newObj = {};
|
|
187
|
-
const asyncValues = [];
|
|
188
|
-
for (const [key, item] of Object.entries(value)){
|
|
189
|
-
const transformed = dehydrateChunk(item, [
|
|
190
|
-
...path,
|
|
293
|
+
const newHead = {};
|
|
294
|
+
for (const [key, item] of Object.entries(data)){
|
|
295
|
+
newHead[key] = encode(item, [
|
|
191
296
|
key
|
|
192
297
|
]);
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
298
|
+
}
|
|
299
|
+
yield newHead;
|
|
300
|
+
// Process all async iterables in parallel by racing their next values
|
|
301
|
+
while(queue.size > 0){
|
|
302
|
+
// Race all iterators to get the next value from any of them
|
|
303
|
+
const [entry, res] = await Unpromise.race(Array.from(queue).map(async (it)=>[
|
|
304
|
+
it,
|
|
305
|
+
await it.nextPromise
|
|
306
|
+
]));
|
|
307
|
+
yield res.value;
|
|
308
|
+
// Remove current iterator and re-add if not done
|
|
309
|
+
queue.delete(entry);
|
|
310
|
+
if (!res.done) {
|
|
311
|
+
entry.nextPromise = entry.iterator.next();
|
|
312
|
+
queue.add(entry);
|
|
196
313
|
}
|
|
197
|
-
newObj[key] = placeholder;
|
|
198
|
-
asyncValues.push([
|
|
199
|
-
key,
|
|
200
|
-
...transformed
|
|
201
|
-
]);
|
|
202
314
|
}
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
315
|
+
} catch (e) {
|
|
316
|
+
env.error = e;
|
|
317
|
+
env.hasError = true;
|
|
318
|
+
} finally{
|
|
319
|
+
const result = _ts_dispose_resources(env);
|
|
320
|
+
if (result) await result;
|
|
209
321
|
}
|
|
210
|
-
const newHead = {};
|
|
211
|
-
for (const [key, item] of Object.entries(data)){
|
|
212
|
-
newHead[key] = dehydrate(item, [
|
|
213
|
-
key
|
|
214
|
-
]);
|
|
215
|
-
}
|
|
216
|
-
return [
|
|
217
|
-
newHead,
|
|
218
|
-
stream.readable
|
|
219
|
-
];
|
|
220
322
|
}
|
|
221
323
|
/**
|
|
222
324
|
* JSON Lines stream producer
|
|
223
325
|
* @see https://jsonlines.org/
|
|
224
326
|
*/ function jsonlStreamProducer(opts) {
|
|
225
|
-
let
|
|
226
|
-
const { serialize
|
|
327
|
+
let stream = readableStreamFrom(createBatchStreamProducer(opts));
|
|
328
|
+
const { serialize } = opts;
|
|
227
329
|
if (serialize) {
|
|
228
|
-
head = serialize(head);
|
|
229
330
|
stream = stream.pipeThrough(new TransformStream({
|
|
230
331
|
transform (chunk, controller) {
|
|
231
332
|
controller.enqueue(serialize(chunk));
|
|
@@ -233,9 +334,6 @@ function createBatchStreamProducer(opts) {
|
|
|
233
334
|
}));
|
|
234
335
|
}
|
|
235
336
|
return stream.pipeThrough(new TransformStream({
|
|
236
|
-
start (controller) {
|
|
237
|
-
controller.enqueue(JSON.stringify(head) + '\n');
|
|
238
|
-
},
|
|
239
337
|
transform (chunk, controller) {
|
|
240
338
|
controller.enqueue(JSON.stringify(chunk) + '\n');
|
|
241
339
|
}
|
|
@@ -252,24 +350,26 @@ class StreamInterruptedError extends Error {
|
|
|
252
350
|
}
|
|
253
351
|
class AsyncError extends Error {
|
|
254
352
|
constructor(data){
|
|
255
|
-
super('Received error from server');
|
|
256
|
-
this.data = data;
|
|
353
|
+
super('Received error from server'), _define_property(this, "data", void 0), this.data = data;
|
|
257
354
|
}
|
|
258
355
|
}
|
|
259
356
|
const nodeJsStreamToReaderEsque = (source)=>{
|
|
260
357
|
return {
|
|
261
358
|
getReader () {
|
|
262
|
-
const
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
359
|
+
const stream = new ReadableStream({
|
|
360
|
+
start (controller) {
|
|
361
|
+
source.on('data', (chunk)=>{
|
|
362
|
+
controller.enqueue(chunk);
|
|
363
|
+
});
|
|
364
|
+
source.on('end', ()=>{
|
|
365
|
+
controller.close();
|
|
366
|
+
});
|
|
367
|
+
source.on('error', (error)=>{
|
|
368
|
+
controller.error(error);
|
|
369
|
+
});
|
|
370
|
+
}
|
|
271
371
|
});
|
|
272
|
-
return
|
|
372
|
+
return stream.getReader();
|
|
273
373
|
}
|
|
274
374
|
};
|
|
275
375
|
};
|
|
@@ -278,7 +378,7 @@ function createLineAccumulator(from) {
|
|
|
278
378
|
let lineAggregate = '';
|
|
279
379
|
return new ReadableStream({
|
|
280
380
|
async pull (controller) {
|
|
281
|
-
const { done
|
|
381
|
+
const { done, value } = await reader.read();
|
|
282
382
|
if (done) {
|
|
283
383
|
controller.close();
|
|
284
384
|
} else {
|
|
@@ -315,11 +415,84 @@ function createConsumerStream(from) {
|
|
|
315
415
|
}
|
|
316
416
|
}));
|
|
317
417
|
}
|
|
418
|
+
/**
|
|
419
|
+
* Creates a handler for managing stream controllers and their lifecycle
|
|
420
|
+
*/ function createStreamsManager(abortController) {
|
|
421
|
+
const controllerMap = new Map();
|
|
422
|
+
/**
|
|
423
|
+
* Checks if there are no pending controllers or deferred promises
|
|
424
|
+
*/ function isEmpty() {
|
|
425
|
+
return Array.from(controllerMap.values()).every((c)=>c.closed);
|
|
426
|
+
}
|
|
427
|
+
/**
|
|
428
|
+
* Creates a stream controller
|
|
429
|
+
*/ function createStreamController() {
|
|
430
|
+
let originalController;
|
|
431
|
+
const stream = new ReadableStream({
|
|
432
|
+
start (controller) {
|
|
433
|
+
originalController = controller;
|
|
434
|
+
}
|
|
435
|
+
});
|
|
436
|
+
const streamController = {
|
|
437
|
+
enqueue: (v)=>originalController.enqueue(v),
|
|
438
|
+
close: ()=>{
|
|
439
|
+
originalController.close();
|
|
440
|
+
// mark as closed and remove methods
|
|
441
|
+
Object.assign(streamController, {
|
|
442
|
+
closed: true,
|
|
443
|
+
close: ()=>{
|
|
444
|
+
// noop
|
|
445
|
+
},
|
|
446
|
+
enqueue: ()=>{
|
|
447
|
+
// noop
|
|
448
|
+
},
|
|
449
|
+
getReaderResource: null
|
|
450
|
+
});
|
|
451
|
+
if (isEmpty()) {
|
|
452
|
+
abortController.abort();
|
|
453
|
+
}
|
|
454
|
+
},
|
|
455
|
+
closed: false,
|
|
456
|
+
getReaderResource: ()=>{
|
|
457
|
+
const reader = stream.getReader();
|
|
458
|
+
return makeResource(reader, ()=>{
|
|
459
|
+
reader.releaseLock();
|
|
460
|
+
streamController.close();
|
|
461
|
+
});
|
|
462
|
+
}
|
|
463
|
+
};
|
|
464
|
+
return streamController;
|
|
465
|
+
}
|
|
466
|
+
/**
|
|
467
|
+
* Gets or creates a stream controller
|
|
468
|
+
*/ function getOrCreate(chunkId) {
|
|
469
|
+
let c = controllerMap.get(chunkId);
|
|
470
|
+
if (!c) {
|
|
471
|
+
c = createStreamController();
|
|
472
|
+
controllerMap.set(chunkId, c);
|
|
473
|
+
}
|
|
474
|
+
return c;
|
|
475
|
+
}
|
|
476
|
+
/**
|
|
477
|
+
* Cancels all pending controllers and rejects deferred promises
|
|
478
|
+
*/ function cancelAll(reason) {
|
|
479
|
+
const error = new StreamInterruptedError(reason);
|
|
480
|
+
for (const controller of controllerMap.values()){
|
|
481
|
+
controller.enqueue(error);
|
|
482
|
+
controller.close();
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
return {
|
|
486
|
+
getOrCreate,
|
|
487
|
+
isEmpty,
|
|
488
|
+
cancelAll
|
|
489
|
+
};
|
|
490
|
+
}
|
|
318
491
|
/**
|
|
319
492
|
* JSON Lines stream consumer
|
|
320
493
|
* @see https://jsonlines.org/
|
|
321
494
|
*/ async function jsonlStreamConsumer(opts) {
|
|
322
|
-
const { deserialize =(v)=>v
|
|
495
|
+
const { deserialize = (v)=>v } = opts;
|
|
323
496
|
let source = createConsumerStream(opts.from);
|
|
324
497
|
if (deserialize) {
|
|
325
498
|
source = source.pipeThrough(new TransformStream({
|
|
@@ -329,149 +502,105 @@ function createConsumerStream(from) {
|
|
|
329
502
|
}));
|
|
330
503
|
}
|
|
331
504
|
let headDeferred = createDeferred();
|
|
332
|
-
const
|
|
333
|
-
|
|
334
|
-
const maybeAbort = ()=>{
|
|
335
|
-
if (chunkDeferred.size === 0 && Array.from(controllers.values()).every((it)=>it.returned)) {
|
|
336
|
-
// nothing is listening to the stream anymore
|
|
337
|
-
opts.abortController?.abort();
|
|
338
|
-
}
|
|
339
|
-
};
|
|
340
|
-
function hydrateChunkDefinition(value) {
|
|
505
|
+
const streamManager = createStreamsManager(opts.abortController);
|
|
506
|
+
function decodeChunkDefinition(value) {
|
|
341
507
|
const [_path, type, chunkId] = value;
|
|
342
|
-
const
|
|
343
|
-
const wrapper = {
|
|
344
|
-
controller,
|
|
345
|
-
returned: false
|
|
346
|
-
};
|
|
347
|
-
controllers.set(chunkId, wrapper);
|
|
348
|
-
// resolve chunk deferred if it exists
|
|
349
|
-
const deferred = chunkDeferred.get(chunkId);
|
|
350
|
-
if (deferred) {
|
|
351
|
-
deferred.resolve(wrapper);
|
|
352
|
-
chunkDeferred.delete(chunkId);
|
|
353
|
-
}
|
|
508
|
+
const controller = streamManager.getOrCreate(chunkId);
|
|
354
509
|
switch(type){
|
|
355
510
|
case CHUNK_VALUE_TYPE_PROMISE:
|
|
356
511
|
{
|
|
357
|
-
return
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
512
|
+
return run(async ()=>{
|
|
513
|
+
const env = {
|
|
514
|
+
stack: [],
|
|
515
|
+
error: void 0,
|
|
516
|
+
hasError: false
|
|
517
|
+
};
|
|
518
|
+
try {
|
|
519
|
+
const reader = _ts_add_disposable_resource(env, controller.getReaderResource(), false);
|
|
520
|
+
;
|
|
521
|
+
const { value } = await reader.read();
|
|
522
|
+
if (value instanceof StreamInterruptedError) {
|
|
523
|
+
throw value;
|
|
368
524
|
}
|
|
369
|
-
const value = it.value;
|
|
370
525
|
const [_chunkId, status, data] = value;
|
|
371
526
|
switch(status){
|
|
372
527
|
case PROMISE_STATUS_FULFILLED:
|
|
373
|
-
|
|
374
|
-
break;
|
|
528
|
+
return decode(data);
|
|
375
529
|
case PROMISE_STATUS_REJECTED:
|
|
376
|
-
|
|
530
|
+
throw opts.formatError?.({
|
|
377
531
|
error: data
|
|
378
|
-
}) ?? new AsyncError(data)
|
|
379
|
-
break;
|
|
532
|
+
}) ?? new AsyncError(data);
|
|
380
533
|
}
|
|
381
|
-
}
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
534
|
+
} catch (e) {
|
|
535
|
+
env.error = e;
|
|
536
|
+
env.hasError = true;
|
|
537
|
+
} finally{
|
|
538
|
+
_ts_dispose_resources(env);
|
|
539
|
+
}
|
|
386
540
|
});
|
|
387
541
|
}
|
|
388
542
|
case CHUNK_VALUE_TYPE_ASYNC_ITERABLE:
|
|
389
543
|
{
|
|
390
|
-
return {
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
done: true,
|
|
404
|
-
value: undefined
|
|
405
|
-
};
|
|
406
|
-
}
|
|
407
|
-
const [_chunkId, status, data] = value;
|
|
408
|
-
switch(status){
|
|
409
|
-
case ASYNC_ITERABLE_STATUS_VALUE:
|
|
410
|
-
return {
|
|
411
|
-
done: false,
|
|
412
|
-
value: hydrate(data)
|
|
413
|
-
};
|
|
414
|
-
case ASYNC_ITERABLE_STATUS_RETURN:
|
|
415
|
-
controllers.delete(chunkId);
|
|
416
|
-
maybeAbort();
|
|
417
|
-
return {
|
|
418
|
-
done: true,
|
|
419
|
-
value: hydrate(data)
|
|
420
|
-
};
|
|
421
|
-
case ASYNC_ITERABLE_STATUS_ERROR:
|
|
422
|
-
controllers.delete(chunkId);
|
|
423
|
-
maybeAbort();
|
|
424
|
-
throw opts.formatError?.({
|
|
425
|
-
error: data
|
|
426
|
-
}) ?? new AsyncError(data);
|
|
427
|
-
}
|
|
428
|
-
},
|
|
429
|
-
return: async ()=>{
|
|
430
|
-
wrapper.returned = true;
|
|
431
|
-
maybeAbort();
|
|
432
|
-
return {
|
|
433
|
-
done: true,
|
|
434
|
-
value: undefined
|
|
435
|
-
};
|
|
544
|
+
return run(async function*() {
|
|
545
|
+
const env = {
|
|
546
|
+
stack: [],
|
|
547
|
+
error: void 0,
|
|
548
|
+
hasError: false
|
|
549
|
+
};
|
|
550
|
+
try {
|
|
551
|
+
const reader = _ts_add_disposable_resource(env, controller.getReaderResource(), false);
|
|
552
|
+
;
|
|
553
|
+
while(true){
|
|
554
|
+
const { value } = await reader.read();
|
|
555
|
+
if (value instanceof StreamInterruptedError) {
|
|
556
|
+
throw value;
|
|
436
557
|
}
|
|
437
|
-
|
|
438
|
-
|
|
558
|
+
const [_chunkId, status, data] = value;
|
|
559
|
+
switch(status){
|
|
560
|
+
case ASYNC_ITERABLE_STATUS_YIELD:
|
|
561
|
+
yield decode(data);
|
|
562
|
+
break;
|
|
563
|
+
case ASYNC_ITERABLE_STATUS_RETURN:
|
|
564
|
+
return decode(data);
|
|
565
|
+
case ASYNC_ITERABLE_STATUS_ERROR:
|
|
566
|
+
throw opts.formatError?.({
|
|
567
|
+
error: data
|
|
568
|
+
}) ?? new AsyncError(data);
|
|
569
|
+
}
|
|
570
|
+
}
|
|
571
|
+
} catch (e) {
|
|
572
|
+
env.error = e;
|
|
573
|
+
env.hasError = true;
|
|
574
|
+
} finally{
|
|
575
|
+
_ts_dispose_resources(env);
|
|
439
576
|
}
|
|
440
|
-
};
|
|
577
|
+
});
|
|
441
578
|
}
|
|
442
579
|
}
|
|
443
580
|
}
|
|
444
|
-
function
|
|
581
|
+
function decode(value) {
|
|
445
582
|
const [[data], ...asyncProps] = value;
|
|
446
|
-
for (const
|
|
447
|
-
const [key] =
|
|
448
|
-
const
|
|
583
|
+
for (const value of asyncProps){
|
|
584
|
+
const [key] = value;
|
|
585
|
+
const decoded = decodeChunkDefinition(value);
|
|
449
586
|
if (key === null) {
|
|
450
|
-
return
|
|
587
|
+
return decoded;
|
|
451
588
|
}
|
|
452
|
-
data[key] =
|
|
589
|
+
data[key] = decoded;
|
|
453
590
|
}
|
|
454
591
|
return data;
|
|
455
592
|
}
|
|
456
593
|
const closeOrAbort = (reason)=>{
|
|
457
594
|
const error = new StreamInterruptedError(reason);
|
|
458
595
|
headDeferred?.reject(error);
|
|
459
|
-
|
|
460
|
-
deferred.reject(error);
|
|
461
|
-
}
|
|
462
|
-
chunkDeferred.clear();
|
|
463
|
-
for (const { controller } of controllers.values()){
|
|
464
|
-
controller.enqueue(error);
|
|
465
|
-
controller.close();
|
|
466
|
-
}
|
|
467
|
-
controllers.clear();
|
|
596
|
+
streamManager.cancelAll(error);
|
|
468
597
|
};
|
|
469
598
|
source.pipeTo(new WritableStream({
|
|
470
|
-
|
|
599
|
+
write (chunkOrHead) {
|
|
471
600
|
if (headDeferred) {
|
|
472
601
|
const head = chunkOrHead;
|
|
473
602
|
for (const [key, value] of Object.entries(chunkOrHead)){
|
|
474
|
-
const parsed =
|
|
603
|
+
const parsed = decode(value);
|
|
475
604
|
head[key] = parsed;
|
|
476
605
|
}
|
|
477
606
|
headDeferred.resolve(head);
|
|
@@ -480,20 +609,14 @@ function createConsumerStream(from) {
|
|
|
480
609
|
}
|
|
481
610
|
const chunk = chunkOrHead;
|
|
482
611
|
const [idx] = chunk;
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
let deferred = chunkDeferred.get(idx);
|
|
486
|
-
if (!deferred) {
|
|
487
|
-
deferred = createDeferred();
|
|
488
|
-
chunkDeferred.set(idx, deferred);
|
|
489
|
-
}
|
|
490
|
-
wrapper = await deferred.promise;
|
|
491
|
-
}
|
|
492
|
-
wrapper.controller.enqueue(chunk);
|
|
612
|
+
const controller = streamManager.getOrCreate(idx);
|
|
613
|
+
controller.enqueue(chunk);
|
|
493
614
|
},
|
|
494
615
|
close: closeOrAbort,
|
|
495
616
|
abort: closeOrAbort
|
|
496
|
-
})
|
|
617
|
+
}), {
|
|
618
|
+
signal: opts.abortController.signal
|
|
619
|
+
}).catch((error)=>{
|
|
497
620
|
opts.onError?.({
|
|
498
621
|
error
|
|
499
622
|
});
|
|
@@ -501,9 +624,7 @@ function createConsumerStream(from) {
|
|
|
501
624
|
});
|
|
502
625
|
return [
|
|
503
626
|
await headDeferred.promise,
|
|
504
|
-
|
|
505
|
-
controllers
|
|
506
|
-
}
|
|
627
|
+
streamManager
|
|
507
628
|
];
|
|
508
629
|
}
|
|
509
630
|
|