@ccheever/exact-ibex-runtime 0.1.0
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/package.json +63 -0
- package/src/abort/AbortController.ts +23 -0
- package/src/abort/AbortSignal.ts +152 -0
- package/src/abort/index.ts +2 -0
- package/src/accessibility.ts +12 -0
- package/src/arraybuffer-detach.ts +109 -0
- package/src/base64/base64.ts +168 -0
- package/src/base64/index.ts +1 -0
- package/src/blob/Blob.ts +259 -0
- package/src/blob/File.ts +59 -0
- package/src/blob/FormData.ts +323 -0
- package/src/blob/index.ts +3 -0
- package/src/bootstrap.ts +1946 -0
- package/src/broadcast/BroadcastChannel.ts +280 -0
- package/src/broadcast/index.ts +5 -0
- package/src/cache/Cache.ts +349 -0
- package/src/cache/CacheStorage.ts +89 -0
- package/src/cache/index.ts +27 -0
- package/src/camera/index.ts +6202 -0
- package/src/camera/processor.worker.ts +194 -0
- package/src/camera/scene.ts +195 -0
- package/src/clipboard/Clipboard.ts +129 -0
- package/src/clipboard/ClipboardItem.ts +97 -0
- package/src/clipboard/index.ts +6 -0
- package/src/clone/index.ts +1 -0
- package/src/clone/structuredClone.ts +389 -0
- package/src/clone/transferableSymbols.ts +2 -0
- package/src/compression/CompressionStream.ts +146 -0
- package/src/compression/DecompressionStream.ts +342 -0
- package/src/compression/index.ts +4 -0
- package/src/console/Console.ts +341 -0
- package/src/console/index.ts +2 -0
- package/src/core/accessibility-state.ts +263 -0
- package/src/core/accessibility.ts +184 -0
- package/src/core/agent-state.ts +37 -0
- package/src/core/diagnostics-logs.ts +144 -0
- package/src/core/host-call-bridge.ts +16 -0
- package/src/core/i18n-helpers.ts +189 -0
- package/src/core/locale-state.ts +253 -0
- package/src/core/locale.ts +95 -0
- package/src/crypto/Crypto.ts +2743 -0
- package/src/crypto/index.ts +1 -0
- package/src/diagnostics/logs.ts +7 -0
- package/src/encoding/TextDecoder.ts +1181 -0
- package/src/encoding/TextDecoderStream.ts +58 -0
- package/src/encoding/TextEncoder.ts +180 -0
- package/src/encoding/TextEncoderStream.ts +39 -0
- package/src/encoding/index.ts +8 -0
- package/src/events/CloseEvent.ts +91 -0
- package/src/events/DOMException.ts +409 -0
- package/src/events/ErrorEvent.ts +39 -0
- package/src/events/Event.ts +151 -0
- package/src/events/EventTarget.ts +280 -0
- package/src/events/FocusEvent.ts +27 -0
- package/src/events/KeyboardEvent.ts +46 -0
- package/src/events/MessageEvent.ts +61 -0
- package/src/events/ProgressEvent.ts +33 -0
- package/src/events/PromiseRejectionEvent.ts +31 -0
- package/src/events/index.ts +52 -0
- package/src/eventsource/EventSource.ts +371 -0
- package/src/eventsource/index.ts +2 -0
- package/src/fetch/Headers.ts +642 -0
- package/src/fetch/Request.ts +760 -0
- package/src/fetch/Response.ts +543 -0
- package/src/fetch/body.ts +1256 -0
- package/src/fetch/cookie-jar.ts +566 -0
- package/src/fetch/demo.ts +207 -0
- package/src/fetch/errors.ts +101 -0
- package/src/fetch/fetch.ts +2610 -0
- package/src/fetch/index.ts +101 -0
- package/src/fetch/native-bridge.ts +65 -0
- package/src/fetch/types.ts +258 -0
- package/src/filereader/FileReader.ts +236 -0
- package/src/filereader/index.ts +1 -0
- package/src/fs/Dirent.ts +39 -0
- package/src/fs/ExactFile.ts +450 -0
- package/src/fs/Stats.ts +80 -0
- package/src/fs/index.ts +944 -0
- package/src/fs/promises.ts +386 -0
- package/src/fs/shared.ts +328 -0
- package/src/http-server/index.js +697 -0
- package/src/http-server/index.ts +27 -0
- package/src/identity.generated.ts +14 -0
- package/src/index.ts +283 -0
- package/src/indexeddb/IDBCursor.ts +188 -0
- package/src/indexeddb/IDBDatabase.ts +343 -0
- package/src/indexeddb/IDBFactory.ts +269 -0
- package/src/indexeddb/IDBIndex.ts +194 -0
- package/src/indexeddb/IDBKeyRange.ts +109 -0
- package/src/indexeddb/IDBObjectStore.ts +468 -0
- package/src/indexeddb/IDBRequest.ts +163 -0
- package/src/indexeddb/IDBTransaction.ts +207 -0
- package/src/indexeddb/index.ts +34 -0
- package/src/indexeddb/utils.ts +52 -0
- package/src/inspect/index.ts +1 -0
- package/src/inspect/inspect.ts +465 -0
- package/src/internal/detect.ts +104 -0
- package/src/locale.ts +10 -0
- package/src/location/index.ts +1059 -0
- package/src/locks/LockManager.ts +460 -0
- package/src/locks/index.ts +12 -0
- package/src/media/VideoFrame.ts +58 -0
- package/src/messaging/MessageChannel.ts +31 -0
- package/src/messaging/MessagePort.ts +180 -0
- package/src/messaging/index.ts +2 -0
- package/src/messaging.ts +247 -0
- package/src/native/NativeModules.ts +354 -0
- package/src/native/index.ts +1 -0
- package/src/navigator/Navigator.ts +351 -0
- package/src/navigator/index.ts +1 -0
- package/src/node/Buffer.ts +1786 -0
- package/src/node/index.ts +4 -0
- package/src/node/path.ts +495 -0
- package/src/node/process.ts +2528 -0
- package/src/performance/Performance.ts +532 -0
- package/src/performance/index.ts +21 -0
- package/src/polyfills/array.ts +236 -0
- package/src/polyfills/arraybuffer.ts +172 -0
- package/src/polyfills/groupby.ts +85 -0
- package/src/polyfills/index.ts +85 -0
- package/src/polyfills/intl.ts +1956 -0
- package/src/polyfills/iterator.ts +479 -0
- package/src/polyfills/promise.ts +37 -0
- package/src/polyfills/set.ts +245 -0
- package/src/polyfills/string.ts +85 -0
- package/src/polyfills/typedarray.ts +110 -0
- package/src/promise-rejection-tracking.ts +464 -0
- package/src/react-native/index.ts +388 -0
- package/src/runtime-entry.ts +55 -0
- package/src/scheduling/AnimationFrame.ts +105 -0
- package/src/scheduling/IdleCallback.ts +167 -0
- package/src/scheduling/index.ts +13 -0
- package/src/security/Capabilities.ts +1146 -0
- package/src/security/Permissions.ts +392 -0
- package/src/security/capability-bits.generated.ts +63 -0
- package/src/security/index.ts +16 -0
- package/src/sqlite/Database.ts +456 -0
- package/src/sqlite/Statement.ts +206 -0
- package/src/sqlite/constants.ts +79 -0
- package/src/sqlite/errors.ts +25 -0
- package/src/sqlite/index.ts +34 -0
- package/src/sqlite/module.js +438 -0
- package/src/storage/Storage.ts +291 -0
- package/src/storage/StorageManager.ts +91 -0
- package/src/storage/index.ts +3 -0
- package/src/stream-compat.ts +47 -0
- package/src/streams/ReadableStream.ts +4131 -0
- package/src/streams/TransformStream.ts +375 -0
- package/src/streams/WritableStream.ts +866 -0
- package/src/streams/index.ts +41 -0
- package/src/timers/Timers.ts +296 -0
- package/src/timers/index.ts +11 -0
- package/src/url/URL.ts +656 -0
- package/src/url/URLPattern.ts +850 -0
- package/src/url/URLSearchParams.ts +244 -0
- package/src/url/index.ts +9 -0
- package/src/websocket/WebSocket.ts +770 -0
- package/src/websocket/WebSocketError.ts +52 -0
- package/src/websocket/WebSocketStream.ts +628 -0
- package/src/websocket/index.ts +7 -0
- package/src/window/index.ts +872 -0
|
@@ -0,0 +1,375 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
/**
|
|
3
|
+
* TransformStream - WHATWG Streams API Implementation
|
|
4
|
+
*
|
|
5
|
+
* @see https://streams.spec.whatwg.org/#ts-class
|
|
6
|
+
*
|
|
7
|
+
* This implementation supports:
|
|
8
|
+
* - Transformer with start/transform/flush
|
|
9
|
+
* - TransformStreamDefaultController with enqueue/error/terminate
|
|
10
|
+
* - Readable and writable sides
|
|
11
|
+
* - Backpressure propagation
|
|
12
|
+
* - Symbol.toStringTag
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import {
|
|
16
|
+
ReadableStream,
|
|
17
|
+
ReadableStreamDefaultController,
|
|
18
|
+
} from './ReadableStream';
|
|
19
|
+
import {
|
|
20
|
+
WritableStream,
|
|
21
|
+
WritableStreamDefaultController,
|
|
22
|
+
} from './WritableStream';
|
|
23
|
+
import type { QueuingStrategy } from './WritableStream';
|
|
24
|
+
|
|
25
|
+
// Capture Promise methods at module load time to be immune to monkey-patching
|
|
26
|
+
const originalPromiseThen = Promise.prototype.then;
|
|
27
|
+
const originalPromiseResolve = Promise.resolve.bind(Promise);
|
|
28
|
+
const originalPromiseReject = Promise.reject.bind(Promise);
|
|
29
|
+
|
|
30
|
+
function promiseThen<T, TResult1 = T, TResult2 = never>(
|
|
31
|
+
promise: PromiseLike<T>,
|
|
32
|
+
onFulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null,
|
|
33
|
+
onRejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null
|
|
34
|
+
): Promise<TResult1 | TResult2> {
|
|
35
|
+
return originalPromiseThen.call(promise, onFulfilled, onRejected);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// ============================================================================
|
|
39
|
+
// Types
|
|
40
|
+
// ============================================================================
|
|
41
|
+
|
|
42
|
+
export interface Transformer<I = any, O = any> {
|
|
43
|
+
start?: (controller: TransformStreamDefaultController<O>) => void | Promise<void>;
|
|
44
|
+
transform?: (chunk: I, controller: TransformStreamDefaultController<O>) => void | Promise<void>;
|
|
45
|
+
cancel?: (reason: any) => void | Promise<void>;
|
|
46
|
+
flush?: (controller: TransformStreamDefaultController<O>) => void | Promise<void>;
|
|
47
|
+
readableType?: undefined;
|
|
48
|
+
writableType?: undefined;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// ============================================================================
|
|
52
|
+
// TransformStreamDefaultController
|
|
53
|
+
// ============================================================================
|
|
54
|
+
|
|
55
|
+
export class TransformStreamDefaultController<O = any> {
|
|
56
|
+
/** @internal */
|
|
57
|
+
_stream: TransformStream<any, O>;
|
|
58
|
+
/** @internal */
|
|
59
|
+
_transformAlgorithm: ((chunk: any) => Promise<void>) | undefined;
|
|
60
|
+
/** @internal */
|
|
61
|
+
_flushAlgorithm: (() => Promise<void>) | undefined;
|
|
62
|
+
|
|
63
|
+
/** @internal */
|
|
64
|
+
constructor(stream: TransformStream<any, O>) {
|
|
65
|
+
this._stream = stream;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
get desiredSize(): number | null {
|
|
69
|
+
const readableController = this._stream._readable._controller;
|
|
70
|
+
if (readableController === undefined) return null;
|
|
71
|
+
return readableController.desiredSize;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
enqueue(chunk: O): void {
|
|
75
|
+
const readableController = this._stream._readable._controller;
|
|
76
|
+
if (readableController === undefined) {
|
|
77
|
+
throw new TypeError('Readable side has no controller');
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
try {
|
|
81
|
+
readableController.enqueue(chunk);
|
|
82
|
+
} catch (e) {
|
|
83
|
+
// If enqueue throws (e.g., stream is not readable), propagate error
|
|
84
|
+
const writable = this._stream._writable;
|
|
85
|
+
if (writable === undefined) {
|
|
86
|
+
this._stream._pendingWritableError = e;
|
|
87
|
+
} else {
|
|
88
|
+
writable._errorStream(e);
|
|
89
|
+
}
|
|
90
|
+
throw this._stream._readable._storedError ?? e;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// Update backpressure based on readable side
|
|
94
|
+
const backpressure = readableController.desiredSize !== null &&
|
|
95
|
+
readableController.desiredSize <= 0;
|
|
96
|
+
if (backpressure !== this._stream._backpressure) {
|
|
97
|
+
this._stream._updateBackpressure(backpressure);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
error(reason?: any): void {
|
|
102
|
+
const readable = this._stream._readable;
|
|
103
|
+
const writable = this._stream._writable;
|
|
104
|
+
|
|
105
|
+
// Error the readable side
|
|
106
|
+
if (readable._controller) {
|
|
107
|
+
readable._controller._error(reason);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// Error the writable side
|
|
111
|
+
if (writable === undefined) {
|
|
112
|
+
this._stream._pendingWritableError = reason;
|
|
113
|
+
} else {
|
|
114
|
+
writable._errorStream(reason);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// Update backpressure flag
|
|
118
|
+
if (this._stream._backpressure) {
|
|
119
|
+
this._stream._updateBackpressure(false);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
terminate(): void {
|
|
124
|
+
if (this._stream._isTerminated) {
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
this._stream._isTerminated = true;
|
|
128
|
+
|
|
129
|
+
const readable = this._stream._readable;
|
|
130
|
+
const writable = this._stream._writable;
|
|
131
|
+
|
|
132
|
+
// Close the readable side
|
|
133
|
+
if (readable._state === 'readable' && readable._controller) {
|
|
134
|
+
readable._controller.close();
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
// Error the writable side with a TypeError
|
|
138
|
+
const error = new TypeError('TransformStream terminated');
|
|
139
|
+
if (writable === undefined) {
|
|
140
|
+
this._stream._pendingWritableError = error;
|
|
141
|
+
} else {
|
|
142
|
+
writable._errorStream(error);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
// Update backpressure flag
|
|
146
|
+
if (this._stream._backpressure) {
|
|
147
|
+
this._stream._updateBackpressure(false);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
get [Symbol.toStringTag](): string {
|
|
152
|
+
return 'TransformStreamDefaultController';
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
// ============================================================================
|
|
157
|
+
// TransformStream
|
|
158
|
+
// ============================================================================
|
|
159
|
+
|
|
160
|
+
export class TransformStream<I = any, O = any> {
|
|
161
|
+
/** @internal */
|
|
162
|
+
_readable: ReadableStream<O>;
|
|
163
|
+
/** @internal */
|
|
164
|
+
_writable: WritableStream<I>;
|
|
165
|
+
/** @internal */
|
|
166
|
+
_controller: TransformStreamDefaultController<O>;
|
|
167
|
+
/** @internal */
|
|
168
|
+
_backpressure: boolean = false;
|
|
169
|
+
/** @internal */
|
|
170
|
+
_backpressureResolve: ((value?: any) => void) | undefined;
|
|
171
|
+
/** @internal */
|
|
172
|
+
_pendingWritableError: any = undefined;
|
|
173
|
+
/** @internal */
|
|
174
|
+
_isTerminated: boolean = false;
|
|
175
|
+
|
|
176
|
+
get readable(): ReadableStream<O> {
|
|
177
|
+
return this._readable;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
get writable(): WritableStream<I> {
|
|
181
|
+
return this._writable;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
constructor(
|
|
185
|
+
transformer?: Transformer<I, O>,
|
|
186
|
+
writableStrategy?: QueuingStrategy<I>,
|
|
187
|
+
readableStrategy?: QueuingStrategy<O>
|
|
188
|
+
) {
|
|
189
|
+
const trans = transformer ?? {};
|
|
190
|
+
const transformAsAny = trans as any;
|
|
191
|
+
let pendingCancel: Promise<void> | undefined;
|
|
192
|
+
const cancelAlgorithm = (reason: any) => {
|
|
193
|
+
if (pendingCancel !== undefined) {
|
|
194
|
+
return pendingCancel;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
if (transformAsAny.cancel === undefined) {
|
|
198
|
+
pendingCancel = originalPromiseResolve();
|
|
199
|
+
return pendingCancel;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
try {
|
|
203
|
+
pendingCancel = originalPromiseResolve(transformAsAny.cancel(reason));
|
|
204
|
+
} catch (e) {
|
|
205
|
+
pendingCancel = originalPromiseReject(e);
|
|
206
|
+
}
|
|
207
|
+
return pendingCancel;
|
|
208
|
+
};
|
|
209
|
+
|
|
210
|
+
// Validate types
|
|
211
|
+
if (trans.readableType !== undefined) {
|
|
212
|
+
throw new RangeError('readableType not supported');
|
|
213
|
+
}
|
|
214
|
+
if (trans.writableType !== undefined) {
|
|
215
|
+
throw new RangeError('writableType not supported');
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
this._controller = new TransformStreamDefaultController(this);
|
|
219
|
+
|
|
220
|
+
// Build transform algorithm
|
|
221
|
+
const controller = this._controller;
|
|
222
|
+
const transformAlgorithm = trans.transform
|
|
223
|
+
? function (chunk: I): Promise<void> {
|
|
224
|
+
try {
|
|
225
|
+
return originalPromiseResolve(transformAsAny.transform(chunk, controller));
|
|
226
|
+
} catch (e) {
|
|
227
|
+
return originalPromiseReject(e);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
: function (chunk: I): Promise<void> {
|
|
231
|
+
// Default: pass-through
|
|
232
|
+
try {
|
|
233
|
+
controller.enqueue(chunk as unknown as O);
|
|
234
|
+
} catch (e) {
|
|
235
|
+
return originalPromiseReject(e);
|
|
236
|
+
}
|
|
237
|
+
return originalPromiseResolve();
|
|
238
|
+
};
|
|
239
|
+
|
|
240
|
+
// Build flush algorithm
|
|
241
|
+
const flushAlgorithm = trans.flush
|
|
242
|
+
? function (): Promise<void> {
|
|
243
|
+
try {
|
|
244
|
+
return originalPromiseResolve(transformAsAny.flush(controller));
|
|
245
|
+
} catch (e) {
|
|
246
|
+
return originalPromiseReject(e);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
: function (): Promise<void> {
|
|
250
|
+
return originalPromiseResolve();
|
|
251
|
+
};
|
|
252
|
+
|
|
253
|
+
controller._transformAlgorithm = transformAlgorithm;
|
|
254
|
+
controller._flushAlgorithm = flushAlgorithm;
|
|
255
|
+
|
|
256
|
+
// Create readable side
|
|
257
|
+
// The readable's pull should resolve backpressure
|
|
258
|
+
// Per spec, TransformStream readable side defaults to HWM 0 (not 1 like
|
|
259
|
+
// a standalone ReadableStream). This ensures pull is only triggered by
|
|
260
|
+
// actual read requests, not by available queue space, which is critical
|
|
261
|
+
// for correct backpressure propagation.
|
|
262
|
+
const self = this;
|
|
263
|
+
const effectiveReadableStrategy = readableStrategy ?? { highWaterMark: 0 };
|
|
264
|
+
this._readable = new ReadableStream<O>(
|
|
265
|
+
{
|
|
266
|
+
pull: function () {
|
|
267
|
+
// When the readable side pulls, that means the consumer wants data.
|
|
268
|
+
// Resolve backpressure so the writable side can proceed.
|
|
269
|
+
if (self._backpressure) {
|
|
270
|
+
self._updateBackpressure(false);
|
|
271
|
+
}
|
|
272
|
+
return originalPromiseResolve();
|
|
273
|
+
},
|
|
274
|
+
cancel: function (reason: any) {
|
|
275
|
+
// When readable is cancelled, error the writable
|
|
276
|
+
return promiseThen(cancelAlgorithm(reason), function () {
|
|
277
|
+
self._writable._errorStream(reason);
|
|
278
|
+
}, function (e) {
|
|
279
|
+
self._writable._errorStream(e);
|
|
280
|
+
throw e;
|
|
281
|
+
});
|
|
282
|
+
},
|
|
283
|
+
},
|
|
284
|
+
effectiveReadableStrategy
|
|
285
|
+
);
|
|
286
|
+
|
|
287
|
+
// Create writable side
|
|
288
|
+
this._writable = new WritableStream<I>(
|
|
289
|
+
{
|
|
290
|
+
start: function (ctrl: WritableStreamDefaultController) {
|
|
291
|
+
// Run the transformer's start algorithm
|
|
292
|
+
if (transformAsAny.start) {
|
|
293
|
+
return transformAsAny.start(controller);
|
|
294
|
+
}
|
|
295
|
+
return undefined;
|
|
296
|
+
},
|
|
297
|
+
write: function (chunk: I) {
|
|
298
|
+
// If there's backpressure, wait for it to be resolved
|
|
299
|
+
if (self._backpressure) {
|
|
300
|
+
return promiseThen(new Promise(function (resolve) {
|
|
301
|
+
const prevResolve = self._backpressureResolve;
|
|
302
|
+
self._backpressureResolve = function (value) {
|
|
303
|
+
if (prevResolve) prevResolve(value);
|
|
304
|
+
resolve(undefined);
|
|
305
|
+
};
|
|
306
|
+
}), function () {
|
|
307
|
+
return transformAlgorithm(chunk);
|
|
308
|
+
});
|
|
309
|
+
}
|
|
310
|
+
return transformAlgorithm(chunk);
|
|
311
|
+
},
|
|
312
|
+
close: function () {
|
|
313
|
+
// Run the flush algorithm then close the readable side
|
|
314
|
+
return promiseThen(flushAlgorithm(), function () {
|
|
315
|
+
const readableController = self._readable._controller;
|
|
316
|
+
if (readableController) {
|
|
317
|
+
// Only close if still readable
|
|
318
|
+
if (self._readable._state === 'readable') {
|
|
319
|
+
readableController.close();
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
}, function (e) {
|
|
323
|
+
// Error both sides
|
|
324
|
+
if (self._readable._controller) {
|
|
325
|
+
self._readable._controller._error(e);
|
|
326
|
+
}
|
|
327
|
+
throw e;
|
|
328
|
+
});
|
|
329
|
+
},
|
|
330
|
+
abort: function (reason: any) {
|
|
331
|
+
return promiseThen(cancelAlgorithm(reason), function () {
|
|
332
|
+
if (self._readable._controller) {
|
|
333
|
+
self._readable._controller._error(reason);
|
|
334
|
+
}
|
|
335
|
+
}, function (e) {
|
|
336
|
+
if (self._readable._controller) {
|
|
337
|
+
self._readable._controller._error(e);
|
|
338
|
+
}
|
|
339
|
+
throw e;
|
|
340
|
+
});
|
|
341
|
+
},
|
|
342
|
+
},
|
|
343
|
+
writableStrategy
|
|
344
|
+
);
|
|
345
|
+
if (this._pendingWritableError !== undefined) {
|
|
346
|
+
const pendingError = this._pendingWritableError;
|
|
347
|
+
this._pendingWritableError = undefined;
|
|
348
|
+
this._writable._errorStream(pendingError);
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
// Per spec, TransformStream starts with backpressure true. This ensures
|
|
352
|
+
// writes to the writable side wait until the readable side is being consumed.
|
|
353
|
+
this._updateBackpressure(true);
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
/** @internal */
|
|
357
|
+
_updateBackpressure(backpressure: boolean): void {
|
|
358
|
+
if (this._backpressure !== backpressure) {
|
|
359
|
+
const wasBackpressured = this._backpressure;
|
|
360
|
+
this._backpressure = backpressure;
|
|
361
|
+
|
|
362
|
+
// If backpressure was just relieved, notify anyone waiting
|
|
363
|
+
if (wasBackpressured && !backpressure) {
|
|
364
|
+
if (this._backpressureResolve) {
|
|
365
|
+
this._backpressureResolve(undefined);
|
|
366
|
+
this._backpressureResolve = undefined;
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
get [Symbol.toStringTag](): string {
|
|
373
|
+
return 'TransformStream';
|
|
374
|
+
}
|
|
375
|
+
}
|