@trpc/server 11.0.0-alpha-tmp-subscription-connection-state.488 → 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 +5 -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 +236 -90
- package/dist/adapters/ws.mjs +237 -92
- package/dist/bundle-analysis.json +411 -294
- package/dist/http.js +2 -4
- package/dist/http.mjs +2 -2
- package/dist/index.js +6 -2
- 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 +187 -92
- package/dist/unstable-core-do-not-import/http/resolveResponse.mjs +189 -94
- 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 +32 -13
- 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 +11 -6
- package/dist/unstable-core-do-not-import/rpc/envelopes.d.ts.map +1 -1
- package/dist/unstable-core-do-not-import/rpc/parseTRPCMessage.d.ts.map +1 -1
- package/dist/unstable-core-do-not-import/rpc/parseTRPCMessage.js +7 -3
- package/dist/unstable-core-do-not-import/rpc/parseTRPCMessage.mjs +7 -3
- package/dist/unstable-core-do-not-import/stream/jsonl.d.ts +31 -16
- package/dist/unstable-core-do-not-import/stream/jsonl.d.ts.map +1 -1
- package/dist/unstable-core-do-not-import/stream/jsonl.js +440 -318
- package/dist/unstable-core-do-not-import/stream/jsonl.mjs +440 -318
- package/dist/unstable-core-do-not-import/stream/sse.d.ts +63 -41
- package/dist/unstable-core-do-not-import/stream/sse.d.ts.map +1 -1
- package/dist/unstable-core-do-not-import/stream/sse.js +300 -119
- package/dist/unstable-core-do-not-import/stream/sse.mjs +302 -119
- 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 +31 -0
- package/dist/unstable-core-do-not-import/stream/tracked.d.ts.map +1 -0
- package/dist/unstable-core-do-not-import/stream/tracked.js +29 -0
- package/dist/unstable-core-do-not-import/stream/tracked.mjs +25 -0
- 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 -4
- 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 +4 -2
- package/dist/unstable-core-do-not-import.d.ts.map +1 -1
- package/dist/unstable-core-do-not-import.js +18 -9
- package/dist/unstable-core-do-not-import.mjs +7 -7
- 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 +6 -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 +152 -62
- 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 +192 -85
- 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 +138 -123
- package/src/unstable-core-do-not-import/rootConfig.ts +20 -17
- 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 +18 -7
- package/src/unstable-core-do-not-import/rpc/parseTRPCMessage.ts +5 -1
- package/src/unstable-core-do-not-import/stream/jsonl.ts +293 -294
- package/src/unstable-core-do-not-import/stream/sse.ts +349 -191
- package/src/unstable-core-do-not-import/stream/sse.types.ts +44 -0
- package/src/unstable-core-do-not-import/stream/tracked.ts +49 -0
- 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 +4 -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,230 +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
|
-
const
|
|
12
|
-
const
|
|
92
|
+
const ASYNC_ITERABLE_STATUS_RETURN = 0;
|
|
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
|
-
|
|
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;
|
|
119
217
|
}
|
|
120
|
-
stream.controller.enqueue([
|
|
121
|
-
idx,
|
|
122
|
-
ASYNC_ITERABLE_STATUS_VALUE,
|
|
123
|
-
dehydrate(next.value, path)
|
|
124
|
-
]);
|
|
125
|
-
}
|
|
126
|
-
pending.delete(idx);
|
|
127
|
-
maybeClose();
|
|
128
|
-
}).catch((cause)=>{
|
|
129
|
-
// this shouldn't happen, but node crashes if we don't catch it
|
|
130
|
-
opts.onError?.({
|
|
131
|
-
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
|
|
132
|
-
// @ts-ignore https://github.com/tc39/proposal-error-cause
|
|
133
|
-
{
|
|
134
|
-
cause
|
|
135
|
-
}),
|
|
136
|
-
path
|
|
137
218
|
});
|
|
138
|
-
});
|
|
139
|
-
return idx;
|
|
140
|
-
}
|
|
141
|
-
function checkMaxDepth(path) {
|
|
142
|
-
if (opts.maxDepth && path.length > opts.maxDepth) {
|
|
143
|
-
return new MaxDepthError(path);
|
|
144
219
|
}
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
return
|
|
150
|
-
CHUNK_VALUE_TYPE_PROMISE,
|
|
151
|
-
dehydratePromise(value, path)
|
|
152
|
-
];
|
|
220
|
+
function checkMaxDepth(path) {
|
|
221
|
+
if (opts.maxDepth && path.length > opts.maxDepth) {
|
|
222
|
+
return new MaxDepthError(path);
|
|
223
|
+
}
|
|
224
|
+
return null;
|
|
153
225
|
}
|
|
154
|
-
|
|
155
|
-
if (
|
|
156
|
-
|
|
226
|
+
function encodeAsync(value, path) {
|
|
227
|
+
if (isPromise(value)) {
|
|
228
|
+
return [
|
|
229
|
+
CHUNK_VALUE_TYPE_PROMISE,
|
|
230
|
+
encodePromise(value, path)
|
|
231
|
+
];
|
|
157
232
|
}
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
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;
|
|
162
243
|
}
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
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
|
+
}
|
|
168
286
|
return [
|
|
169
287
|
[
|
|
170
|
-
|
|
288
|
+
newObj
|
|
171
289
|
],
|
|
172
|
-
|
|
173
|
-
null,
|
|
174
|
-
...reg
|
|
175
|
-
]
|
|
290
|
+
...asyncValues
|
|
176
291
|
];
|
|
177
292
|
}
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
value
|
|
182
|
-
]
|
|
183
|
-
];
|
|
184
|
-
}
|
|
185
|
-
const newObj = {};
|
|
186
|
-
const asyncValues = [];
|
|
187
|
-
for (const [key, item] of Object.entries(value)){
|
|
188
|
-
const transformed = dehydrateChunk(item, [
|
|
189
|
-
...path,
|
|
293
|
+
const newHead = {};
|
|
294
|
+
for (const [key, item] of Object.entries(data)){
|
|
295
|
+
newHead[key] = encode(item, [
|
|
190
296
|
key
|
|
191
297
|
]);
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
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);
|
|
195
313
|
}
|
|
196
|
-
newObj[key] = placeholder;
|
|
197
|
-
asyncValues.push([
|
|
198
|
-
key,
|
|
199
|
-
...transformed
|
|
200
|
-
]);
|
|
201
314
|
}
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
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;
|
|
208
321
|
}
|
|
209
|
-
const newHead = {};
|
|
210
|
-
for (const [key, item] of Object.entries(data)){
|
|
211
|
-
newHead[key] = dehydrate(item, [
|
|
212
|
-
key
|
|
213
|
-
]);
|
|
214
|
-
}
|
|
215
|
-
return [
|
|
216
|
-
newHead,
|
|
217
|
-
stream.readable
|
|
218
|
-
];
|
|
219
322
|
}
|
|
220
323
|
/**
|
|
221
324
|
* JSON Lines stream producer
|
|
222
325
|
* @see https://jsonlines.org/
|
|
223
326
|
*/ function jsonlStreamProducer(opts) {
|
|
224
|
-
let
|
|
225
|
-
const { serialize
|
|
327
|
+
let stream = readableStreamFrom(createBatchStreamProducer(opts));
|
|
328
|
+
const { serialize } = opts;
|
|
226
329
|
if (serialize) {
|
|
227
|
-
head = serialize(head);
|
|
228
330
|
stream = stream.pipeThrough(new TransformStream({
|
|
229
331
|
transform (chunk, controller) {
|
|
230
332
|
controller.enqueue(serialize(chunk));
|
|
@@ -232,9 +334,6 @@ function createBatchStreamProducer(opts) {
|
|
|
232
334
|
}));
|
|
233
335
|
}
|
|
234
336
|
return stream.pipeThrough(new TransformStream({
|
|
235
|
-
start (controller) {
|
|
236
|
-
controller.enqueue(JSON.stringify(head) + '\n');
|
|
237
|
-
},
|
|
238
337
|
transform (chunk, controller) {
|
|
239
338
|
controller.enqueue(JSON.stringify(chunk) + '\n');
|
|
240
339
|
}
|
|
@@ -251,24 +350,26 @@ class StreamInterruptedError extends Error {
|
|
|
251
350
|
}
|
|
252
351
|
class AsyncError extends Error {
|
|
253
352
|
constructor(data){
|
|
254
|
-
super('Received error from server');
|
|
255
|
-
this.data = data;
|
|
353
|
+
super('Received error from server'), _define_property(this, "data", void 0), this.data = data;
|
|
256
354
|
}
|
|
257
355
|
}
|
|
258
356
|
const nodeJsStreamToReaderEsque = (source)=>{
|
|
259
357
|
return {
|
|
260
358
|
getReader () {
|
|
261
|
-
const
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
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
|
+
}
|
|
270
371
|
});
|
|
271
|
-
return
|
|
372
|
+
return stream.getReader();
|
|
272
373
|
}
|
|
273
374
|
};
|
|
274
375
|
};
|
|
@@ -277,7 +378,7 @@ function createLineAccumulator(from) {
|
|
|
277
378
|
let lineAggregate = '';
|
|
278
379
|
return new ReadableStream({
|
|
279
380
|
async pull (controller) {
|
|
280
|
-
const { done
|
|
381
|
+
const { done, value } = await reader.read();
|
|
281
382
|
if (done) {
|
|
282
383
|
controller.close();
|
|
283
384
|
} else {
|
|
@@ -314,11 +415,84 @@ function createConsumerStream(from) {
|
|
|
314
415
|
}
|
|
315
416
|
}));
|
|
316
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
|
+
}
|
|
317
491
|
/**
|
|
318
492
|
* JSON Lines stream consumer
|
|
319
493
|
* @see https://jsonlines.org/
|
|
320
494
|
*/ async function jsonlStreamConsumer(opts) {
|
|
321
|
-
const { deserialize =(v)=>v
|
|
495
|
+
const { deserialize = (v)=>v } = opts;
|
|
322
496
|
let source = createConsumerStream(opts.from);
|
|
323
497
|
if (deserialize) {
|
|
324
498
|
source = source.pipeThrough(new TransformStream({
|
|
@@ -328,149 +502,105 @@ function createConsumerStream(from) {
|
|
|
328
502
|
}));
|
|
329
503
|
}
|
|
330
504
|
let headDeferred = createDeferred();
|
|
331
|
-
const
|
|
332
|
-
|
|
333
|
-
const maybeAbort = ()=>{
|
|
334
|
-
if (chunkDeferred.size === 0 && Array.from(controllers.values()).every((it)=>it.returned)) {
|
|
335
|
-
// nothing is listening to the stream anymore
|
|
336
|
-
opts.abortController?.abort();
|
|
337
|
-
}
|
|
338
|
-
};
|
|
339
|
-
function hydrateChunkDefinition(value) {
|
|
505
|
+
const streamManager = createStreamsManager(opts.abortController);
|
|
506
|
+
function decodeChunkDefinition(value) {
|
|
340
507
|
const [_path, type, chunkId] = value;
|
|
341
|
-
const
|
|
342
|
-
const wrapper = {
|
|
343
|
-
controller,
|
|
344
|
-
returned: false
|
|
345
|
-
};
|
|
346
|
-
controllers.set(chunkId, wrapper);
|
|
347
|
-
// resolve chunk deferred if it exists
|
|
348
|
-
const deferred = chunkDeferred.get(chunkId);
|
|
349
|
-
if (deferred) {
|
|
350
|
-
deferred.resolve(wrapper);
|
|
351
|
-
chunkDeferred.delete(chunkId);
|
|
352
|
-
}
|
|
508
|
+
const controller = streamManager.getOrCreate(chunkId);
|
|
353
509
|
switch(type){
|
|
354
510
|
case CHUNK_VALUE_TYPE_PROMISE:
|
|
355
511
|
{
|
|
356
|
-
return
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
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;
|
|
367
524
|
}
|
|
368
|
-
const value = it.value;
|
|
369
525
|
const [_chunkId, status, data] = value;
|
|
370
526
|
switch(status){
|
|
371
527
|
case PROMISE_STATUS_FULFILLED:
|
|
372
|
-
|
|
373
|
-
break;
|
|
528
|
+
return decode(data);
|
|
374
529
|
case PROMISE_STATUS_REJECTED:
|
|
375
|
-
|
|
530
|
+
throw opts.formatError?.({
|
|
376
531
|
error: data
|
|
377
|
-
}) ?? new AsyncError(data)
|
|
378
|
-
break;
|
|
532
|
+
}) ?? new AsyncError(data);
|
|
379
533
|
}
|
|
380
|
-
}
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
534
|
+
} catch (e) {
|
|
535
|
+
env.error = e;
|
|
536
|
+
env.hasError = true;
|
|
537
|
+
} finally{
|
|
538
|
+
_ts_dispose_resources(env);
|
|
539
|
+
}
|
|
385
540
|
});
|
|
386
541
|
}
|
|
387
542
|
case CHUNK_VALUE_TYPE_ASYNC_ITERABLE:
|
|
388
543
|
{
|
|
389
|
-
return {
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
done: true,
|
|
403
|
-
value: undefined
|
|
404
|
-
};
|
|
405
|
-
}
|
|
406
|
-
const [_chunkId, status, data] = value;
|
|
407
|
-
switch(status){
|
|
408
|
-
case ASYNC_ITERABLE_STATUS_VALUE:
|
|
409
|
-
return {
|
|
410
|
-
done: false,
|
|
411
|
-
value: hydrate(data)
|
|
412
|
-
};
|
|
413
|
-
case ASYNC_ITERABLE_STATUS_DONE:
|
|
414
|
-
controllers.delete(chunkId);
|
|
415
|
-
maybeAbort();
|
|
416
|
-
return {
|
|
417
|
-
done: true,
|
|
418
|
-
value: undefined
|
|
419
|
-
};
|
|
420
|
-
case ASYNC_ITERABLE_STATUS_ERROR:
|
|
421
|
-
controllers.delete(chunkId);
|
|
422
|
-
maybeAbort();
|
|
423
|
-
throw opts.formatError?.({
|
|
424
|
-
error: data
|
|
425
|
-
}) ?? new AsyncError(data);
|
|
426
|
-
}
|
|
427
|
-
},
|
|
428
|
-
return: async ()=>{
|
|
429
|
-
wrapper.returned = true;
|
|
430
|
-
maybeAbort();
|
|
431
|
-
return {
|
|
432
|
-
done: true,
|
|
433
|
-
value: undefined
|
|
434
|
-
};
|
|
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;
|
|
435
557
|
}
|
|
436
|
-
|
|
437
|
-
|
|
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);
|
|
438
576
|
}
|
|
439
|
-
};
|
|
577
|
+
});
|
|
440
578
|
}
|
|
441
579
|
}
|
|
442
580
|
}
|
|
443
|
-
function
|
|
581
|
+
function decode(value) {
|
|
444
582
|
const [[data], ...asyncProps] = value;
|
|
445
|
-
for (const
|
|
446
|
-
const [key] =
|
|
447
|
-
const
|
|
583
|
+
for (const value of asyncProps){
|
|
584
|
+
const [key] = value;
|
|
585
|
+
const decoded = decodeChunkDefinition(value);
|
|
448
586
|
if (key === null) {
|
|
449
|
-
return
|
|
587
|
+
return decoded;
|
|
450
588
|
}
|
|
451
|
-
data[key] =
|
|
589
|
+
data[key] = decoded;
|
|
452
590
|
}
|
|
453
591
|
return data;
|
|
454
592
|
}
|
|
455
593
|
const closeOrAbort = (reason)=>{
|
|
456
594
|
const error = new StreamInterruptedError(reason);
|
|
457
595
|
headDeferred?.reject(error);
|
|
458
|
-
|
|
459
|
-
deferred.reject(error);
|
|
460
|
-
}
|
|
461
|
-
chunkDeferred.clear();
|
|
462
|
-
for (const { controller } of controllers.values()){
|
|
463
|
-
controller.enqueue(error);
|
|
464
|
-
controller.close();
|
|
465
|
-
}
|
|
466
|
-
controllers.clear();
|
|
596
|
+
streamManager.cancelAll(error);
|
|
467
597
|
};
|
|
468
598
|
source.pipeTo(new WritableStream({
|
|
469
|
-
|
|
599
|
+
write (chunkOrHead) {
|
|
470
600
|
if (headDeferred) {
|
|
471
601
|
const head = chunkOrHead;
|
|
472
602
|
for (const [key, value] of Object.entries(chunkOrHead)){
|
|
473
|
-
const parsed =
|
|
603
|
+
const parsed = decode(value);
|
|
474
604
|
head[key] = parsed;
|
|
475
605
|
}
|
|
476
606
|
headDeferred.resolve(head);
|
|
@@ -479,20 +609,14 @@ function createConsumerStream(from) {
|
|
|
479
609
|
}
|
|
480
610
|
const chunk = chunkOrHead;
|
|
481
611
|
const [idx] = chunk;
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
let deferred = chunkDeferred.get(idx);
|
|
485
|
-
if (!deferred) {
|
|
486
|
-
deferred = createDeferred();
|
|
487
|
-
chunkDeferred.set(idx, deferred);
|
|
488
|
-
}
|
|
489
|
-
wrapper = await deferred.promise;
|
|
490
|
-
}
|
|
491
|
-
wrapper.controller.enqueue(chunk);
|
|
612
|
+
const controller = streamManager.getOrCreate(idx);
|
|
613
|
+
controller.enqueue(chunk);
|
|
492
614
|
},
|
|
493
615
|
close: closeOrAbort,
|
|
494
616
|
abort: closeOrAbort
|
|
495
|
-
})
|
|
617
|
+
}), {
|
|
618
|
+
signal: opts.abortController.signal
|
|
619
|
+
}).catch((error)=>{
|
|
496
620
|
opts.onError?.({
|
|
497
621
|
error
|
|
498
622
|
});
|
|
@@ -500,9 +624,7 @@ function createConsumerStream(from) {
|
|
|
500
624
|
});
|
|
501
625
|
return [
|
|
502
626
|
await headDeferred.promise,
|
|
503
|
-
|
|
504
|
-
controllers
|
|
505
|
-
}
|
|
627
|
+
streamManager
|
|
506
628
|
];
|
|
507
629
|
}
|
|
508
630
|
|