@gjsify/web-streams 0.3.13 → 0.3.14
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/lib/esm/index.js +22 -87
- package/lib/esm/queuing-strategies.js +47 -55
- package/lib/esm/readable-stream.js +836 -989
- package/lib/esm/register/queuing.js +7 -3
- package/lib/esm/register/readable.js +12 -8
- package/lib/esm/register/text-streams.js +7 -3
- package/lib/esm/register/transform.js +12 -8
- package/lib/esm/register/writable.js +12 -8
- package/lib/esm/text-decoder-stream.js +133 -118
- package/lib/esm/text-encoder-stream.js +58 -44
- package/lib/esm/transform-stream.js +242 -298
- package/lib/esm/util.js +106 -129
- package/lib/esm/writable-stream.js +588 -588
- package/package.json +4 -4
|
@@ -1,336 +1,280 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
get desiredSize() {
|
|
88
|
-
if (!isTransformStreamDefaultController(this)) throw new TypeError("Invalid this");
|
|
89
|
-
const { stream } = this[kState];
|
|
90
|
-
const { readable } = stream[kState];
|
|
91
|
-
const readableController = readable[kState].controller;
|
|
92
|
-
return readableStreamDefaultControllerGetDesiredSize(readableController);
|
|
93
|
-
}
|
|
94
|
-
enqueue(chunk) {
|
|
95
|
-
if (!isTransformStreamDefaultController(this)) throw new TypeError("Invalid this");
|
|
96
|
-
transformStreamDefaultControllerEnqueue(this, chunk);
|
|
97
|
-
}
|
|
98
|
-
error(reason) {
|
|
99
|
-
if (!isTransformStreamDefaultController(this)) throw new TypeError("Invalid this");
|
|
100
|
-
transformStreamDefaultControllerError(this, reason);
|
|
101
|
-
}
|
|
102
|
-
terminate() {
|
|
103
|
-
if (!isTransformStreamDefaultController(this)) throw new TypeError("Invalid this");
|
|
104
|
-
transformStreamDefaultControllerTerminate(this);
|
|
105
|
-
}
|
|
106
|
-
get [Symbol.toStringTag]() {
|
|
107
|
-
return "TransformStreamDefaultController";
|
|
108
|
-
}
|
|
109
|
-
}
|
|
1
|
+
import { createPromiseCallback, extractHighWaterMark, extractSizeAlgorithm, isBrandCheck, kState, kType, nonOpCancel, nonOpFlush } from "./util.js";
|
|
2
|
+
import { createWritableStream, writableStreamDefaultControllerErrorIfNeeded } from "./writable-stream.js";
|
|
3
|
+
import { createReadableStream, readableStreamDefaultControllerCanCloseOrEnqueue, readableStreamDefaultControllerClose, readableStreamDefaultControllerEnqueue, readableStreamDefaultControllerError, readableStreamDefaultControllerGetDesiredSize, readableStreamDefaultControllerHasBackpressure } from "./readable-stream.js";
|
|
4
|
+
|
|
5
|
+
//#region src/transform-stream.ts
|
|
6
|
+
const kSkipThrow = Symbol("kSkipThrow");
|
|
7
|
+
var TransformStream = class {
|
|
8
|
+
[kType] = "TransformStream";
|
|
9
|
+
[kState];
|
|
10
|
+
constructor(transformer = {}, writableStrategy = {}, readableStrategy = {}) {
|
|
11
|
+
if (transformer != null && typeof transformer !== "object") {
|
|
12
|
+
throw new TypeError("transformer must be an object");
|
|
13
|
+
}
|
|
14
|
+
if (writableStrategy != null && typeof writableStrategy !== "object") {
|
|
15
|
+
throw new TypeError("writableStrategy must be an object");
|
|
16
|
+
}
|
|
17
|
+
if (readableStrategy != null && typeof readableStrategy !== "object") {
|
|
18
|
+
throw new TypeError("readableStrategy must be an object");
|
|
19
|
+
}
|
|
20
|
+
const readableType = transformer?.readableType;
|
|
21
|
+
const writableType = transformer?.writableType;
|
|
22
|
+
const start = transformer?.start;
|
|
23
|
+
if (readableType !== undefined) {
|
|
24
|
+
throw new RangeError(`Invalid readableType: ${readableType}`);
|
|
25
|
+
}
|
|
26
|
+
if (writableType !== undefined) {
|
|
27
|
+
throw new RangeError(`Invalid writableType: ${writableType}`);
|
|
28
|
+
}
|
|
29
|
+
const readableHighWaterMark = extractHighWaterMark(readableStrategy?.highWaterMark, 0);
|
|
30
|
+
const readableSize = extractSizeAlgorithm(readableStrategy?.size);
|
|
31
|
+
const writableHighWaterMark = extractHighWaterMark(writableStrategy?.highWaterMark, 1);
|
|
32
|
+
const writableSize = extractSizeAlgorithm(writableStrategy?.size);
|
|
33
|
+
const startPromise = Promise.withResolvers();
|
|
34
|
+
initializeTransformStream(this, startPromise, writableHighWaterMark, writableSize, readableHighWaterMark, readableSize);
|
|
35
|
+
setupTransformStreamDefaultControllerFromTransformer(this, transformer);
|
|
36
|
+
if (start !== undefined) {
|
|
37
|
+
startPromise.resolve(start.call(transformer, this[kState].controller));
|
|
38
|
+
} else {
|
|
39
|
+
startPromise.resolve();
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
get readable() {
|
|
43
|
+
if (!isTransformStream(this)) throw new TypeError("Invalid this");
|
|
44
|
+
return this[kState].readable;
|
|
45
|
+
}
|
|
46
|
+
get writable() {
|
|
47
|
+
if (!isTransformStream(this)) throw new TypeError("Invalid this");
|
|
48
|
+
return this[kState].writable;
|
|
49
|
+
}
|
|
50
|
+
get [Symbol.toStringTag]() {
|
|
51
|
+
return "TransformStream";
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
var TransformStreamDefaultController = class {
|
|
55
|
+
[kType] = "TransformStreamDefaultController";
|
|
56
|
+
[kState];
|
|
57
|
+
constructor(skipThrowSymbol) {
|
|
58
|
+
if (skipThrowSymbol !== kSkipThrow) {
|
|
59
|
+
throw new TypeError("Illegal constructor");
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
get desiredSize() {
|
|
63
|
+
if (!isTransformStreamDefaultController(this)) throw new TypeError("Invalid this");
|
|
64
|
+
const { stream } = this[kState];
|
|
65
|
+
const { readable } = stream[kState];
|
|
66
|
+
const readableController = readable[kState].controller;
|
|
67
|
+
return readableStreamDefaultControllerGetDesiredSize(readableController);
|
|
68
|
+
}
|
|
69
|
+
enqueue(chunk) {
|
|
70
|
+
if (!isTransformStreamDefaultController(this)) throw new TypeError("Invalid this");
|
|
71
|
+
transformStreamDefaultControllerEnqueue(this, chunk);
|
|
72
|
+
}
|
|
73
|
+
error(reason) {
|
|
74
|
+
if (!isTransformStreamDefaultController(this)) throw new TypeError("Invalid this");
|
|
75
|
+
transformStreamDefaultControllerError(this, reason);
|
|
76
|
+
}
|
|
77
|
+
terminate() {
|
|
78
|
+
if (!isTransformStreamDefaultController(this)) throw new TypeError("Invalid this");
|
|
79
|
+
transformStreamDefaultControllerTerminate(this);
|
|
80
|
+
}
|
|
81
|
+
get [Symbol.toStringTag]() {
|
|
82
|
+
return "TransformStreamDefaultController";
|
|
83
|
+
}
|
|
84
|
+
};
|
|
110
85
|
const isTransformStream = isBrandCheck("TransformStream");
|
|
111
86
|
const isTransformStreamDefaultController = isBrandCheck("TransformStreamDefaultController");
|
|
112
87
|
async function defaultTransformAlgorithm(chunk, controller) {
|
|
113
|
-
|
|
88
|
+
transformStreamDefaultControllerEnqueue(controller, chunk);
|
|
114
89
|
}
|
|
115
90
|
function initializeTransformStream(stream, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm) {
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
);
|
|
132
|
-
stream[kState] = {
|
|
133
|
-
readable,
|
|
134
|
-
writable,
|
|
135
|
-
controller: void 0,
|
|
136
|
-
backpressure: void 0,
|
|
137
|
-
backpressureChange: {
|
|
138
|
-
promise: void 0,
|
|
139
|
-
resolve: void 0,
|
|
140
|
-
reject: void 0
|
|
141
|
-
}
|
|
142
|
-
};
|
|
143
|
-
transformStreamSetBackpressure(stream, true);
|
|
91
|
+
const startAlgorithm = () => startPromise.promise;
|
|
92
|
+
const writable = createWritableStream(startAlgorithm, (chunk) => transformStreamDefaultSinkWriteAlgorithm(stream, chunk), () => transformStreamDefaultSinkCloseAlgorithm(stream), (reason) => transformStreamDefaultSinkAbortAlgorithm(stream, reason), writableHighWaterMark, writableSizeAlgorithm);
|
|
93
|
+
const readable = createReadableStream(startAlgorithm, () => transformStreamDefaultSourcePullAlgorithm(stream), (reason) => transformStreamDefaultSourceCancelAlgorithm(stream, reason), readableHighWaterMark, readableSizeAlgorithm);
|
|
94
|
+
stream[kState] = {
|
|
95
|
+
readable,
|
|
96
|
+
writable,
|
|
97
|
+
controller: undefined,
|
|
98
|
+
backpressure: undefined,
|
|
99
|
+
backpressureChange: {
|
|
100
|
+
promise: undefined,
|
|
101
|
+
resolve: undefined,
|
|
102
|
+
reject: undefined
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
transformStreamSetBackpressure(stream, true);
|
|
144
106
|
}
|
|
145
107
|
function transformStreamError(stream, error) {
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
108
|
+
const { readable } = stream[kState];
|
|
109
|
+
readableStreamDefaultControllerError(readable[kState].controller, error);
|
|
110
|
+
transformStreamErrorWritableAndUnblockWrite(stream, error);
|
|
149
111
|
}
|
|
150
112
|
function transformStreamErrorWritableAndUnblockWrite(stream, error) {
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
113
|
+
const { controller, writable } = stream[kState];
|
|
114
|
+
transformStreamDefaultControllerClearAlgorithms(controller);
|
|
115
|
+
writableStreamDefaultControllerErrorIfNeeded(writable[kState].controller, error);
|
|
116
|
+
transformStreamUnblockWrite(stream);
|
|
155
117
|
}
|
|
156
118
|
function transformStreamUnblockWrite(stream) {
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
119
|
+
if (stream[kState].backpressure) {
|
|
120
|
+
transformStreamSetBackpressure(stream, false);
|
|
121
|
+
}
|
|
160
122
|
}
|
|
161
123
|
function transformStreamSetBackpressure(stream, backpressure) {
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
124
|
+
if (stream[kState].backpressureChange.promise !== undefined) {
|
|
125
|
+
stream[kState].backpressureChange.resolve?.();
|
|
126
|
+
}
|
|
127
|
+
stream[kState].backpressureChange = Promise.withResolvers();
|
|
128
|
+
stream[kState].backpressure = backpressure;
|
|
167
129
|
}
|
|
168
130
|
function setupTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm, cancelAlgorithm) {
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
131
|
+
controller[kState] = {
|
|
132
|
+
stream,
|
|
133
|
+
transformAlgorithm,
|
|
134
|
+
flushAlgorithm,
|
|
135
|
+
cancelAlgorithm,
|
|
136
|
+
finishPromise: undefined
|
|
137
|
+
};
|
|
138
|
+
stream[kState].controller = controller;
|
|
177
139
|
}
|
|
178
140
|
function setupTransformStreamDefaultControllerFromTransformer(stream, transformer) {
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
stream,
|
|
188
|
-
controller,
|
|
189
|
-
transformAlgorithm,
|
|
190
|
-
flushAlgorithm,
|
|
191
|
-
cancelAlgorithm
|
|
192
|
-
);
|
|
141
|
+
const controller = new TransformStreamDefaultController(kSkipThrow);
|
|
142
|
+
const transform = transformer?.transform;
|
|
143
|
+
const flush = transformer?.flush;
|
|
144
|
+
const cancel = transformer?.cancel;
|
|
145
|
+
const transformAlgorithm = transform ? createPromiseCallback("transformer.transform", transform, transformer) : defaultTransformAlgorithm;
|
|
146
|
+
const flushAlgorithm = flush ? createPromiseCallback("transformer.flush", flush, transformer) : nonOpFlush;
|
|
147
|
+
const cancelAlgorithm = cancel ? createPromiseCallback("transformer.cancel", cancel, transformer) : nonOpCancel;
|
|
148
|
+
setupTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm, cancelAlgorithm);
|
|
193
149
|
}
|
|
194
150
|
function transformStreamDefaultControllerClearAlgorithms(controller) {
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
151
|
+
controller[kState].transformAlgorithm = undefined;
|
|
152
|
+
controller[kState].flushAlgorithm = undefined;
|
|
153
|
+
controller[kState].cancelAlgorithm = undefined;
|
|
198
154
|
}
|
|
199
155
|
function transformStreamDefaultControllerEnqueue(controller, chunk) {
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
156
|
+
const { stream } = controller[kState];
|
|
157
|
+
const { readable } = stream[kState];
|
|
158
|
+
const readableController = readable[kState].controller;
|
|
159
|
+
if (!readableStreamDefaultControllerCanCloseOrEnqueue(readableController)) {
|
|
160
|
+
throw new TypeError("Unable to enqueue");
|
|
161
|
+
}
|
|
162
|
+
try {
|
|
163
|
+
readableStreamDefaultControllerEnqueue(readableController, chunk);
|
|
164
|
+
} catch (error) {
|
|
165
|
+
transformStreamErrorWritableAndUnblockWrite(stream, error);
|
|
166
|
+
throw readable[kState].storedError;
|
|
167
|
+
}
|
|
168
|
+
const backpressure = readableStreamDefaultControllerHasBackpressure(readableController);
|
|
169
|
+
if (backpressure !== stream[kState].backpressure) {
|
|
170
|
+
transformStreamSetBackpressure(stream, true);
|
|
171
|
+
}
|
|
216
172
|
}
|
|
217
173
|
function transformStreamDefaultControllerError(controller, error) {
|
|
218
|
-
|
|
174
|
+
transformStreamError(controller[kState].stream, error);
|
|
219
175
|
}
|
|
220
176
|
async function transformStreamDefaultControllerPerformTransform(controller, chunk) {
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
177
|
+
try {
|
|
178
|
+
const transformAlgorithm = controller[kState].transformAlgorithm;
|
|
179
|
+
if (transformAlgorithm === undefined) return;
|
|
180
|
+
return await transformAlgorithm(chunk, controller);
|
|
181
|
+
} catch (error) {
|
|
182
|
+
transformStreamError(controller[kState].stream, error);
|
|
183
|
+
throw error;
|
|
184
|
+
}
|
|
229
185
|
}
|
|
230
186
|
function transformStreamDefaultControllerTerminate(controller) {
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
187
|
+
const { stream } = controller[kState];
|
|
188
|
+
const { readable } = stream[kState];
|
|
189
|
+
readableStreamDefaultControllerClose(readable[kState].controller);
|
|
190
|
+
transformStreamErrorWritableAndUnblockWrite(stream, new TypeError("TransformStream has been terminated"));
|
|
235
191
|
}
|
|
236
192
|
function transformStreamDefaultSinkWriteAlgorithm(stream, chunk) {
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
193
|
+
const { controller } = stream[kState];
|
|
194
|
+
if (stream[kState].backpressure) {
|
|
195
|
+
const backpressureChange = stream[kState].backpressureChange.promise;
|
|
196
|
+
return backpressureChange.then(() => {
|
|
197
|
+
const { writable } = stream[kState];
|
|
198
|
+
if (writable[kState].state === "erroring") {
|
|
199
|
+
throw writable[kState].storedError;
|
|
200
|
+
}
|
|
201
|
+
return transformStreamDefaultControllerPerformTransform(controller, chunk);
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
return transformStreamDefaultControllerPerformTransform(controller, chunk);
|
|
249
205
|
}
|
|
250
206
|
async function transformStreamDefaultSinkAbortAlgorithm(stream, reason) {
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
}
|
|
272
|
-
);
|
|
273
|
-
return controller[kState].finishPromise;
|
|
207
|
+
const { controller, readable } = stream[kState];
|
|
208
|
+
if (controller[kState].finishPromise !== undefined) {
|
|
209
|
+
return controller[kState].finishPromise;
|
|
210
|
+
}
|
|
211
|
+
const { promise, resolve, reject } = Promise.withResolvers();
|
|
212
|
+
controller[kState].finishPromise = promise;
|
|
213
|
+
const cancelPromise = controller[kState].cancelAlgorithm(reason);
|
|
214
|
+
transformStreamDefaultControllerClearAlgorithms(controller);
|
|
215
|
+
cancelPromise.then(() => {
|
|
216
|
+
if (readable[kState].state === "errored") {
|
|
217
|
+
reject(readable[kState].storedError);
|
|
218
|
+
} else {
|
|
219
|
+
readableStreamDefaultControllerError(readable[kState].controller, reason);
|
|
220
|
+
resolve();
|
|
221
|
+
}
|
|
222
|
+
}, (error) => {
|
|
223
|
+
readableStreamDefaultControllerError(readable[kState].controller, error);
|
|
224
|
+
reject(error);
|
|
225
|
+
});
|
|
226
|
+
return controller[kState].finishPromise;
|
|
274
227
|
}
|
|
275
228
|
function transformStreamDefaultSinkCloseAlgorithm(stream) {
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
}
|
|
297
|
-
);
|
|
298
|
-
return controller[kState].finishPromise;
|
|
229
|
+
const { readable, controller } = stream[kState];
|
|
230
|
+
if (controller[kState].finishPromise !== undefined) {
|
|
231
|
+
return controller[kState].finishPromise;
|
|
232
|
+
}
|
|
233
|
+
const { promise, resolve, reject } = Promise.withResolvers();
|
|
234
|
+
controller[kState].finishPromise = promise;
|
|
235
|
+
const flushPromise = controller[kState].flushAlgorithm(controller);
|
|
236
|
+
transformStreamDefaultControllerClearAlgorithms(controller);
|
|
237
|
+
flushPromise.then(() => {
|
|
238
|
+
if (readable[kState].state === "errored") {
|
|
239
|
+
reject(readable[kState].storedError);
|
|
240
|
+
} else {
|
|
241
|
+
readableStreamDefaultControllerClose(readable[kState].controller);
|
|
242
|
+
resolve();
|
|
243
|
+
}
|
|
244
|
+
}, (error) => {
|
|
245
|
+
readableStreamDefaultControllerError(readable[kState].controller, error);
|
|
246
|
+
reject(error);
|
|
247
|
+
});
|
|
248
|
+
return controller[kState].finishPromise;
|
|
299
249
|
}
|
|
300
250
|
function transformStreamDefaultSourcePullAlgorithm(stream) {
|
|
301
|
-
|
|
302
|
-
|
|
251
|
+
transformStreamSetBackpressure(stream, false);
|
|
252
|
+
return stream[kState].backpressureChange.promise;
|
|
303
253
|
}
|
|
304
254
|
function transformStreamDefaultSourceCancelAlgorithm(stream, reason) {
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
}
|
|
328
|
-
);
|
|
329
|
-
return controller[kState].finishPromise;
|
|
255
|
+
const { controller, writable } = stream[kState];
|
|
256
|
+
if (controller[kState].finishPromise !== undefined) {
|
|
257
|
+
return controller[kState].finishPromise;
|
|
258
|
+
}
|
|
259
|
+
const { promise, resolve, reject } = Promise.withResolvers();
|
|
260
|
+
controller[kState].finishPromise = promise;
|
|
261
|
+
const cancelPromise = controller[kState].cancelAlgorithm(reason);
|
|
262
|
+
transformStreamDefaultControllerClearAlgorithms(controller);
|
|
263
|
+
cancelPromise.then(() => {
|
|
264
|
+
if (writable[kState].state === "errored") {
|
|
265
|
+
reject(writable[kState].storedError);
|
|
266
|
+
} else {
|
|
267
|
+
writableStreamDefaultControllerErrorIfNeeded(writable[kState].controller, reason);
|
|
268
|
+
transformStreamUnblockWrite(stream);
|
|
269
|
+
resolve();
|
|
270
|
+
}
|
|
271
|
+
}, (error) => {
|
|
272
|
+
writableStreamDefaultControllerErrorIfNeeded(writable[kState].controller, error);
|
|
273
|
+
transformStreamUnblockWrite(stream);
|
|
274
|
+
reject(error);
|
|
275
|
+
});
|
|
276
|
+
return controller[kState].finishPromise;
|
|
330
277
|
}
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
isTransformStream,
|
|
335
|
-
isTransformStreamDefaultController
|
|
336
|
-
};
|
|
278
|
+
|
|
279
|
+
//#endregion
|
|
280
|
+
export { TransformStream, TransformStreamDefaultController, isTransformStream, isTransformStreamDefaultController };
|