@trpc/server 11.0.0-rc.643 → 11.0.0-rc.648
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/adapters/aws-lambda/index.js +1 -1
- package/dist/adapters/aws-lambda/index.mjs +1 -1
- package/dist/adapters/express.js +1 -1
- package/dist/adapters/express.mjs +1 -1
- package/dist/adapters/fastify/fastifyRequestHandler.js +1 -1
- package/dist/adapters/fastify/fastifyRequestHandler.mjs +1 -1
- package/dist/adapters/fetch/fetchRequestHandler.js +1 -1
- package/dist/adapters/fetch/fetchRequestHandler.mjs +1 -1
- package/dist/adapters/next-app-dir/nextAppDirCaller.js +1 -1
- package/dist/adapters/next-app-dir/nextAppDirCaller.mjs +1 -1
- package/dist/adapters/next-app-dir/notFound.js +1 -1
- package/dist/adapters/next-app-dir/notFound.mjs +1 -1
- package/dist/adapters/next-app-dir/redirect.js +15 -3
- package/dist/adapters/next-app-dir/redirect.mjs +14 -2
- package/dist/adapters/next.js +1 -1
- package/dist/adapters/next.mjs +1 -1
- package/dist/adapters/node-http/incomingMessageToRequest.js +1 -1
- package/dist/adapters/node-http/incomingMessageToRequest.mjs +1 -1
- package/dist/adapters/node-http/nodeHTTPRequestHandler.js +1 -1
- package/dist/adapters/node-http/nodeHTTPRequestHandler.mjs +1 -1
- package/dist/adapters/node-http/writeResponse.d.ts.map +1 -1
- package/dist/adapters/node-http/writeResponse.js +3 -1
- package/dist/adapters/node-http/writeResponse.mjs +3 -1
- package/dist/adapters/standalone.js +1 -1
- package/dist/adapters/standalone.mjs +1 -1
- package/dist/adapters/ws.d.ts.map +1 -1
- package/dist/adapters/ws.js +145 -66
- package/dist/adapters/ws.mjs +145 -66
- package/dist/bundle-analysis.json +194 -201
- package/dist/http.js +1 -1
- package/dist/http.mjs +1 -1
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/dist/node_modules/.pnpm/@rollup_plugin-typescript@12.1.1_rollup@4.27.4_tslib@2.8.1_typescript@5.6.2/node_modules/tslib/tslib.es6.js +73 -0
- package/dist/observable/observable.d.ts +1 -1
- package/dist/observable/observable.d.ts.map +1 -1
- package/dist/observable/observable.js +16 -4
- package/dist/observable/observable.mjs +16 -4
- package/dist/rpc.js +1 -1
- package/dist/rpc.mjs +1 -1
- package/dist/shared.js +1 -1
- package/dist/shared.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 +14 -2
- package/dist/unstable-core-do-not-import/error/TRPCError.mjs +13 -1
- package/dist/unstable-core-do-not-import/http/resolveResponse.d.ts.map +1 -1
- package/dist/unstable-core-do-not-import/http/resolveResponse.js +7 -18
- package/dist/unstable-core-do-not-import/http/resolveResponse.mjs +8 -19
- package/dist/unstable-core-do-not-import/stream/jsonl.d.ts +15 -4
- package/dist/unstable-core-do-not-import/stream/jsonl.d.ts.map +1 -1
- package/dist/unstable-core-do-not-import/stream/jsonl.js +430 -291
- package/dist/unstable-core-do-not-import/stream/jsonl.mjs +428 -289
- package/dist/unstable-core-do-not-import/stream/sse.d.ts +1 -1
- package/dist/unstable-core-do-not-import/stream/sse.d.ts.map +1 -1
- package/dist/unstable-core-do-not-import/stream/sse.js +183 -122
- package/dist/unstable-core-do-not-import/stream/sse.mjs +183 -122
- package/dist/unstable-core-do-not-import/stream/utils/asyncIterable.d.ts +1 -0
- package/dist/unstable-core-do-not-import/stream/utils/asyncIterable.d.ts.map +1 -1
- package/dist/unstable-core-do-not-import/stream/utils/asyncIterable.js +103 -10
- package/dist/unstable-core-do-not-import/stream/utils/asyncIterable.mjs +104 -12
- 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 +1 -2
- package/dist/unstable-core-do-not-import/stream/utils/timerResource.d.ts.map +1 -1
- package/dist/unstable-core-do-not-import/stream/utils/timerResource.js +8 -10
- package/dist/unstable-core-do-not-import/stream/utils/timerResource.mjs +8 -10
- package/dist/unstable-core-do-not-import/stream/utils/withPing.d.ts.map +1 -1
- package/dist/unstable-core-do-not-import/stream/utils/withPing.js +113 -24
- package/dist/unstable-core-do-not-import/stream/utils/withPing.mjs +114 -25
- package/dist/unstable-core-do-not-import/transformer.d.ts +1 -1
- package/dist/unstable-core-do-not-import.d.ts +1 -0
- package/dist/unstable-core-do-not-import.d.ts.map +1 -1
- package/dist/unstable-core-do-not-import.js +3 -0
- package/dist/unstable-core-do-not-import.mjs +1 -0
- package/dist/vendor/unpromise/unpromise.js +17 -6
- package/dist/vendor/unpromise/unpromise.mjs +13 -2
- package/package.json +2 -3
- package/src/adapters/node-http/writeResponse.ts +3 -0
- package/src/adapters/ws.ts +8 -9
- package/src/observable/observable.ts +17 -2
- package/src/unstable-core-do-not-import/http/resolveResponse.ts +8 -21
- package/src/unstable-core-do-not-import/stream/jsonl.ts +236 -216
- package/src/unstable-core-do-not-import/stream/sse.ts +112 -132
- package/src/unstable-core-do-not-import/stream/utils/asyncIterable.ts +50 -48
- 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 +17 -15
- package/src/unstable-core-do-not-import/stream/utils/withPing.ts +18 -19
- package/src/unstable-core-do-not-import.ts +1 -0
- package/dist/node_modules/.pnpm/@swc_helpers@0.5.13/node_modules/@swc/helpers/esm/_define_property.js +0 -11
- package/dist/node_modules/.pnpm/@swc_helpers@0.5.13/node_modules/@swc/helpers/esm/_define_property.mjs +0 -9
- package/dist/unstable-core-do-not-import/stream/utils/createReadableStream.d.ts +0 -9
- 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 -25
- package/dist/unstable-core-do-not-import/stream/utils/createReadableStream.mjs +0 -23
- package/dist/unstable-core-do-not-import/stream/utils/withRefCount.d.ts +0 -17
- package/dist/unstable-core-do-not-import/stream/utils/withRefCount.d.ts.map +0 -1
- package/dist/unstable-core-do-not-import/stream/utils/withRefCount.js +0 -59
- package/dist/unstable-core-do-not-import/stream/utils/withRefCount.mjs +0 -57
- package/src/unstable-core-do-not-import/stream/utils/createReadableStream.ts +0 -25
- package/src/unstable-core-do-not-import/stream/utils/withRefCount.ts +0 -93
|
@@ -56,7 +56,7 @@ export interface SSEStreamProducerOptions<TValue = unknown> {
|
|
|
56
56
|
*/
|
|
57
57
|
export declare function sseStreamProducer<TValue = unknown>(opts: SSEStreamProducerOptions<TValue>): ReadableStream<string>;
|
|
58
58
|
interface ConsumerStreamResultBase<TConfig extends ConsumerConfig> {
|
|
59
|
-
eventSource: InstanceType<TConfig['EventSource']
|
|
59
|
+
eventSource: InstanceType<TConfig['EventSource']> | null;
|
|
60
60
|
}
|
|
61
61
|
interface ConsumerStreamResultData<TConfig extends ConsumerConfig> extends ConsumerStreamResultBase<TConfig> {
|
|
62
62
|
type: 'data';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sse.d.ts","sourceRoot":"","sources":["../../../src/unstable-core-do-not-import/stream/sse.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"sse.d.ts","sourceRoot":"","sources":["../../../src/unstable-core-do-not-import/stream/sse.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,9 +6,76 @@ var isAbortError = require('../http/isAbortError.js');
|
|
|
6
6
|
var utils = require('../utils.js');
|
|
7
7
|
var tracked = require('./tracked.js');
|
|
8
8
|
var asyncIterable = require('./utils/asyncIterable.js');
|
|
9
|
-
var
|
|
9
|
+
var disposable = require('./utils/disposable.js');
|
|
10
|
+
var readableStreamFrom = require('./utils/readableStreamFrom.js');
|
|
11
|
+
var timerResource = require('./utils/timerResource.js');
|
|
10
12
|
var withPing = require('./utils/withPing.js');
|
|
11
13
|
|
|
14
|
+
function _ts_add_disposable_resource(env, value, async) {
|
|
15
|
+
if (value !== null && value !== void 0) {
|
|
16
|
+
if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
|
|
17
|
+
var dispose, inner;
|
|
18
|
+
if (async) {
|
|
19
|
+
if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
|
|
20
|
+
dispose = value[Symbol.asyncDispose];
|
|
21
|
+
}
|
|
22
|
+
if (dispose === void 0) {
|
|
23
|
+
if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
|
|
24
|
+
dispose = value[Symbol.dispose];
|
|
25
|
+
if (async) inner = dispose;
|
|
26
|
+
}
|
|
27
|
+
if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
|
|
28
|
+
if (inner) dispose = function() {
|
|
29
|
+
try {
|
|
30
|
+
inner.call(this);
|
|
31
|
+
} catch (e) {
|
|
32
|
+
return Promise.reject(e);
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
env.stack.push({
|
|
36
|
+
value: value,
|
|
37
|
+
dispose: dispose,
|
|
38
|
+
async: async
|
|
39
|
+
});
|
|
40
|
+
} else if (async) {
|
|
41
|
+
env.stack.push({
|
|
42
|
+
async: true
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
return value;
|
|
46
|
+
}
|
|
47
|
+
function _ts_dispose_resources(env) {
|
|
48
|
+
var _SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function(error, suppressed, message) {
|
|
49
|
+
var e = new Error(message);
|
|
50
|
+
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
51
|
+
};
|
|
52
|
+
return (_ts_dispose_resources = function _ts_dispose_resources(env) {
|
|
53
|
+
function fail(e) {
|
|
54
|
+
env.error = env.hasError ? new _SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
|
|
55
|
+
env.hasError = true;
|
|
56
|
+
}
|
|
57
|
+
var r, s = 0;
|
|
58
|
+
function next() {
|
|
59
|
+
while(r = env.stack.pop()){
|
|
60
|
+
try {
|
|
61
|
+
if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);
|
|
62
|
+
if (r.dispose) {
|
|
63
|
+
var result = r.dispose.call(r.value);
|
|
64
|
+
if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) {
|
|
65
|
+
fail(e);
|
|
66
|
+
return next();
|
|
67
|
+
});
|
|
68
|
+
} else s |= 1;
|
|
69
|
+
} catch (e) {
|
|
70
|
+
fail(e);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();
|
|
74
|
+
if (env.hasError) throw env.error;
|
|
75
|
+
}
|
|
76
|
+
return next();
|
|
77
|
+
})(env);
|
|
78
|
+
}
|
|
12
79
|
const PING_EVENT = 'ping';
|
|
13
80
|
const SERIALIZED_ERROR_EVENT = 'serialized-error';
|
|
14
81
|
const CONNECTED_EVENT = 'connected';
|
|
@@ -16,21 +83,20 @@ const CONNECTED_EVENT = 'connected';
|
|
|
16
83
|
*
|
|
17
84
|
* @see https://html.spec.whatwg.org/multipage/server-sent-events.html
|
|
18
85
|
*/ function sseStreamProducer(opts) {
|
|
19
|
-
const stream = createReadableStream.createReadableStream();
|
|
20
86
|
const { serialize = utils.identity } = opts;
|
|
21
87
|
const ping = {
|
|
22
88
|
enabled: opts.ping?.enabled ?? false,
|
|
23
89
|
intervalMs: opts.ping?.intervalMs ?? 1000
|
|
24
90
|
};
|
|
25
91
|
const client = opts.client ?? {};
|
|
26
|
-
stream.controller.enqueue({
|
|
27
|
-
event: CONNECTED_EVENT,
|
|
28
|
-
data: JSON.stringify(client)
|
|
29
|
-
});
|
|
30
92
|
if (ping.enabled && client.reconnectAfterInactivityMs && ping.intervalMs > client.reconnectAfterInactivityMs) {
|
|
31
93
|
throw new Error(`Ping interval must be less than client reconnect interval to prevent unnecessary reconnection - ping.intervalMs: ${ping.intervalMs} client.reconnectAfterInactivityMs: ${client.reconnectAfterInactivityMs}`);
|
|
32
94
|
}
|
|
33
|
-
|
|
95
|
+
async function* generator() {
|
|
96
|
+
yield {
|
|
97
|
+
event: CONNECTED_EVENT,
|
|
98
|
+
data: JSON.stringify(client)
|
|
99
|
+
};
|
|
34
100
|
let iterable = opts.data;
|
|
35
101
|
if (opts.emitAndEndImmediately) {
|
|
36
102
|
iterable = asyncIterable.takeWithGrace(iterable, {
|
|
@@ -46,60 +112,53 @@ const CONNECTED_EVENT = 'connected';
|
|
|
46
112
|
if (ping.enabled && ping.intervalMs !== Infinity && ping.intervalMs > 0) {
|
|
47
113
|
iterable = withPing.withPing(iterable, ping.intervalMs);
|
|
48
114
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
data: ''
|
|
59
|
-
});
|
|
60
|
-
continue;
|
|
61
|
-
}
|
|
62
|
-
chunk = tracked.isTrackedEnvelope(value) ? {
|
|
63
|
-
id: value[0],
|
|
64
|
-
data: value[1]
|
|
65
|
-
} : {
|
|
66
|
-
data: value
|
|
115
|
+
// We need those declarations outside the loop for garbage collection reasons. If they were
|
|
116
|
+
// declared inside, they would not be freed until the next value is present.
|
|
117
|
+
let value;
|
|
118
|
+
let chunk;
|
|
119
|
+
for await (value of iterable){
|
|
120
|
+
if (value === withPing.PING_SYM) {
|
|
121
|
+
yield {
|
|
122
|
+
event: PING_EVENT,
|
|
123
|
+
data: ''
|
|
67
124
|
};
|
|
68
|
-
|
|
69
|
-
chunk.data = JSON.stringify(serialize(chunk.data));
|
|
70
|
-
}
|
|
71
|
-
stream.controller.enqueue(chunk);
|
|
72
|
-
// free up references for garbage collection
|
|
73
|
-
value = null;
|
|
74
|
-
chunk = null;
|
|
125
|
+
continue;
|
|
75
126
|
}
|
|
76
|
-
|
|
77
|
-
|
|
127
|
+
chunk = tracked.isTrackedEnvelope(value) ? {
|
|
128
|
+
id: value[0],
|
|
129
|
+
data: value[1]
|
|
130
|
+
} : {
|
|
131
|
+
data: value
|
|
132
|
+
};
|
|
133
|
+
chunk.data = JSON.stringify(serialize(chunk.data));
|
|
134
|
+
yield chunk;
|
|
135
|
+
// free up references for garbage collection
|
|
136
|
+
value = null;
|
|
137
|
+
chunk = null;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
async function* generatorWithErrorHandling() {
|
|
141
|
+
try {
|
|
142
|
+
yield* generator();
|
|
143
|
+
} catch (cause) {
|
|
144
|
+
if (isAbortError.isAbortError(cause)) {
|
|
78
145
|
// ignore abort errors, send any other errors
|
|
79
146
|
return;
|
|
80
147
|
}
|
|
81
148
|
// `err` must be caused by `opts.data`, `JSON.stringify` or `serialize`.
|
|
82
149
|
// So, a user error in any case.
|
|
83
|
-
const error = TRPCError.getTRPCErrorFromUnknown(
|
|
150
|
+
const error = TRPCError.getTRPCErrorFromUnknown(cause);
|
|
84
151
|
const data = opts.formatError?.({
|
|
85
152
|
error
|
|
86
153
|
}) ?? null;
|
|
87
|
-
|
|
154
|
+
yield {
|
|
88
155
|
event: SERIALIZED_ERROR_EVENT,
|
|
89
156
|
data: JSON.stringify(serialize(data))
|
|
90
|
-
}
|
|
91
|
-
} finally{
|
|
92
|
-
try {
|
|
93
|
-
stream.controller.close();
|
|
94
|
-
} catch {
|
|
95
|
-
// ignore
|
|
96
|
-
}
|
|
157
|
+
};
|
|
97
158
|
}
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
});
|
|
102
|
-
return stream.readable.pipeThrough(new TransformStream({
|
|
159
|
+
}
|
|
160
|
+
const stream = readableStreamFrom.readableStreamFrom(generatorWithErrorHandling());
|
|
161
|
+
return stream.pipeThrough(new TransformStream({
|
|
103
162
|
transform (chunk, controller) {
|
|
104
163
|
if ('event' in chunk) {
|
|
105
164
|
controller.enqueue(`event: ${chunk.event}\n`);
|
|
@@ -118,26 +177,28 @@ const CONNECTED_EVENT = 'connected';
|
|
|
118
177
|
}));
|
|
119
178
|
}
|
|
120
179
|
async function withTimeout(opts) {
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
});
|
|
127
|
-
let res;
|
|
180
|
+
const env = {
|
|
181
|
+
stack: [],
|
|
182
|
+
error: void 0,
|
|
183
|
+
hasError: false
|
|
184
|
+
};
|
|
128
185
|
try {
|
|
129
|
-
|
|
186
|
+
const timeoutPromise = _ts_add_disposable_resource(env, timerResource.timerResource(opts.timeoutMs), false);
|
|
187
|
+
;
|
|
188
|
+
const res = await unpromise.Unpromise.race([
|
|
130
189
|
opts.promise,
|
|
131
|
-
timeoutPromise
|
|
190
|
+
timeoutPromise.start()
|
|
132
191
|
]);
|
|
192
|
+
if (res === timerResource.disposablePromiseTimerResult) {
|
|
193
|
+
return await opts.onTimeout();
|
|
194
|
+
}
|
|
195
|
+
return res;
|
|
196
|
+
} catch (e) {
|
|
197
|
+
env.error = e;
|
|
198
|
+
env.hasError = true;
|
|
133
199
|
} finally{
|
|
134
|
-
|
|
135
|
-
clearTimeout(timeoutId);
|
|
200
|
+
_ts_dispose_resources(env);
|
|
136
201
|
}
|
|
137
|
-
if (res === null) {
|
|
138
|
-
return await opts.onTimeout();
|
|
139
|
-
}
|
|
140
|
-
return res;
|
|
141
202
|
}
|
|
142
203
|
/**
|
|
143
204
|
* @see https://html.spec.whatwg.org/multipage/server-sent-events.html
|
|
@@ -222,69 +283,69 @@ async function withTimeout(opts) {
|
|
|
222
283
|
_es?.close();
|
|
223
284
|
}
|
|
224
285
|
});
|
|
225
|
-
const
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
reader
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
286
|
+
const getStreamResource = ()=>{
|
|
287
|
+
let stream = createStream();
|
|
288
|
+
let reader = stream.getReader();
|
|
289
|
+
async function dispose() {
|
|
290
|
+
await reader.cancel();
|
|
291
|
+
_es = null;
|
|
292
|
+
}
|
|
293
|
+
return disposable.makeAsyncResource({
|
|
294
|
+
read () {
|
|
295
|
+
return reader.read();
|
|
296
|
+
},
|
|
297
|
+
async recreate () {
|
|
298
|
+
await dispose();
|
|
299
|
+
stream = createStream();
|
|
300
|
+
reader = stream.getReader();
|
|
233
301
|
}
|
|
234
|
-
};
|
|
302
|
+
}, dispose);
|
|
235
303
|
};
|
|
236
|
-
return {
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
if (result.done) {
|
|
267
|
-
return {
|
|
268
|
-
value: result.value,
|
|
269
|
-
done: true
|
|
270
|
-
};
|
|
271
|
-
}
|
|
272
|
-
return {
|
|
273
|
-
value: result.value,
|
|
274
|
-
done: false
|
|
275
|
-
};
|
|
276
|
-
},
|
|
277
|
-
async return () {
|
|
278
|
-
await stream.cancel();
|
|
279
|
-
return {
|
|
280
|
-
value: undefined,
|
|
281
|
-
done: true
|
|
282
|
-
};
|
|
304
|
+
return utils.run(async function*() {
|
|
305
|
+
const env = {
|
|
306
|
+
stack: [],
|
|
307
|
+
error: void 0,
|
|
308
|
+
hasError: false
|
|
309
|
+
};
|
|
310
|
+
try {
|
|
311
|
+
const stream = _ts_add_disposable_resource(env, getStreamResource(), true);
|
|
312
|
+
;
|
|
313
|
+
while(true){
|
|
314
|
+
let promise = stream.read();
|
|
315
|
+
const timeoutMs = clientOptions.reconnectAfterInactivityMs;
|
|
316
|
+
if (timeoutMs) {
|
|
317
|
+
promise = withTimeout({
|
|
318
|
+
promise,
|
|
319
|
+
timeoutMs,
|
|
320
|
+
onTimeout: async ()=>{
|
|
321
|
+
const res = {
|
|
322
|
+
value: {
|
|
323
|
+
type: 'timeout',
|
|
324
|
+
ms: timeoutMs,
|
|
325
|
+
eventSource: _es
|
|
326
|
+
},
|
|
327
|
+
done: false
|
|
328
|
+
};
|
|
329
|
+
// Close and release old reader
|
|
330
|
+
await stream.recreate();
|
|
331
|
+
return res;
|
|
332
|
+
}
|
|
333
|
+
});
|
|
283
334
|
}
|
|
284
|
-
|
|
285
|
-
|
|
335
|
+
const result = await promise;
|
|
336
|
+
if (result.done) {
|
|
337
|
+
return result.value;
|
|
338
|
+
}
|
|
339
|
+
yield result.value;
|
|
340
|
+
}
|
|
341
|
+
} catch (e) {
|
|
342
|
+
env.error = e;
|
|
343
|
+
env.hasError = true;
|
|
344
|
+
} finally{
|
|
345
|
+
const result = _ts_dispose_resources(env);
|
|
346
|
+
if (result) await result;
|
|
286
347
|
}
|
|
287
|
-
};
|
|
348
|
+
});
|
|
288
349
|
}
|
|
289
350
|
const sseHeaders = {
|
|
290
351
|
'Content-Type': 'text/event-stream',
|