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