@gjsify/web-streams 0.3.16 → 0.3.18
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 +1 -35
- package/lib/esm/queuing-strategies.js +1 -48
- package/lib/esm/readable-stream.js +1 -911
- package/lib/esm/register/queuing.js +1 -11
- package/lib/esm/register/readable.js +1 -16
- package/lib/esm/register/text-streams.js +1 -11
- package/lib/esm/register/transform.js +1 -16
- package/lib/esm/register/writable.js +1 -16
- package/lib/esm/register.js +1 -5
- package/lib/esm/text-decoder-stream.js +1 -141
- package/lib/esm/text-encoder-stream.js +1 -60
- package/lib/esm/transform-stream.js +1 -280
- package/lib/esm/util.js +1 -138
- package/lib/esm/writable-stream.js +1 -676
- package/package.json +5 -5
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -1,676 +1 @@
|
|
|
1
|
-
import { createPromiseCallback, dequeueValue, enqueueValueWithSize, extractHighWaterMark, extractSizeAlgorithm, isBrandCheck, kState, kType, nonOpCancel, nonOpStart, nonOpWrite, peekQueueValue, resetQueue, setPromiseHandled } from "./util.js";
|
|
2
|
-
|
|
3
|
-
//#region src/writable-stream.ts
|
|
4
|
-
const _AbortController = typeof globalThis.AbortController === "function" ? globalThis.AbortController : class AbortControllerShim {
|
|
5
|
-
signal = {
|
|
6
|
-
aborted: false,
|
|
7
|
-
reason: undefined,
|
|
8
|
-
addEventListener() {},
|
|
9
|
-
removeEventListener() {}
|
|
10
|
-
};
|
|
11
|
-
abort(reason) {
|
|
12
|
-
this.signal.aborted = true;
|
|
13
|
-
this.signal.reason = reason;
|
|
14
|
-
}
|
|
15
|
-
};
|
|
16
|
-
const kAbort = Symbol("kAbort");
|
|
17
|
-
const kCloseSentinel = Symbol("kCloseSentinel");
|
|
18
|
-
const kError = Symbol("kError");
|
|
19
|
-
const kSkipThrow = Symbol("kSkipThrow");
|
|
20
|
-
var WritableStream = class {
|
|
21
|
-
[kType] = "WritableStream";
|
|
22
|
-
[kState];
|
|
23
|
-
constructor(sink = {}, strategy = {}) {
|
|
24
|
-
if (sink != null && typeof sink !== "object") {
|
|
25
|
-
throw new TypeError("sink must be an object");
|
|
26
|
-
}
|
|
27
|
-
if (strategy != null && typeof strategy !== "object") {
|
|
28
|
-
throw new TypeError("strategy must be an object");
|
|
29
|
-
}
|
|
30
|
-
const type = sink?.type;
|
|
31
|
-
if (type !== undefined) {
|
|
32
|
-
throw new RangeError(`Invalid type: ${type}`);
|
|
33
|
-
}
|
|
34
|
-
this[kState] = createWritableStreamState();
|
|
35
|
-
const size = extractSizeAlgorithm(strategy?.size);
|
|
36
|
-
const highWaterMark = extractHighWaterMark(strategy?.highWaterMark, 1);
|
|
37
|
-
setupWritableStreamDefaultControllerFromSink(this, sink, highWaterMark, size);
|
|
38
|
-
}
|
|
39
|
-
get locked() {
|
|
40
|
-
if (!isWritableStream(this)) throw new TypeError("Invalid this");
|
|
41
|
-
return isWritableStreamLocked(this);
|
|
42
|
-
}
|
|
43
|
-
abort(reason) {
|
|
44
|
-
if (!isWritableStream(this)) return Promise.reject(new TypeError("Invalid this"));
|
|
45
|
-
if (isWritableStreamLocked(this)) {
|
|
46
|
-
return Promise.reject(new TypeError("WritableStream is locked"));
|
|
47
|
-
}
|
|
48
|
-
return writableStreamAbort(this, reason);
|
|
49
|
-
}
|
|
50
|
-
close() {
|
|
51
|
-
if (!isWritableStream(this)) return Promise.reject(new TypeError("Invalid this"));
|
|
52
|
-
if (isWritableStreamLocked(this)) {
|
|
53
|
-
return Promise.reject(new TypeError("WritableStream is locked"));
|
|
54
|
-
}
|
|
55
|
-
if (writableStreamCloseQueuedOrInFlight(this)) {
|
|
56
|
-
return Promise.reject(new TypeError("Failure closing WritableStream"));
|
|
57
|
-
}
|
|
58
|
-
return writableStreamClose(this);
|
|
59
|
-
}
|
|
60
|
-
getWriter() {
|
|
61
|
-
if (!isWritableStream(this)) throw new TypeError("Invalid this");
|
|
62
|
-
return new WritableStreamDefaultWriter(this);
|
|
63
|
-
}
|
|
64
|
-
get [Symbol.toStringTag]() {
|
|
65
|
-
return "WritableStream";
|
|
66
|
-
}
|
|
67
|
-
};
|
|
68
|
-
var WritableStreamDefaultWriter = class {
|
|
69
|
-
[kType] = "WritableStreamDefaultWriter";
|
|
70
|
-
[kState];
|
|
71
|
-
constructor(stream) {
|
|
72
|
-
if (!isWritableStream(stream)) {
|
|
73
|
-
throw new TypeError("Expected a WritableStream");
|
|
74
|
-
}
|
|
75
|
-
this[kState] = {
|
|
76
|
-
stream: undefined,
|
|
77
|
-
close: {
|
|
78
|
-
promise: undefined,
|
|
79
|
-
resolve: undefined,
|
|
80
|
-
reject: undefined
|
|
81
|
-
},
|
|
82
|
-
ready: {
|
|
83
|
-
promise: undefined,
|
|
84
|
-
resolve: undefined,
|
|
85
|
-
reject: undefined
|
|
86
|
-
}
|
|
87
|
-
};
|
|
88
|
-
setupWritableStreamDefaultWriter(this, stream);
|
|
89
|
-
}
|
|
90
|
-
get closed() {
|
|
91
|
-
if (!isWritableStreamDefaultWriter(this)) return Promise.reject(new TypeError("Invalid this"));
|
|
92
|
-
return this[kState].close.promise;
|
|
93
|
-
}
|
|
94
|
-
get desiredSize() {
|
|
95
|
-
if (!isWritableStreamDefaultWriter(this)) throw new TypeError("Invalid this");
|
|
96
|
-
if (this[kState].stream === undefined) {
|
|
97
|
-
throw new TypeError("Writer is not bound to a WritableStream");
|
|
98
|
-
}
|
|
99
|
-
return writableStreamDefaultWriterGetDesiredSize(this);
|
|
100
|
-
}
|
|
101
|
-
get ready() {
|
|
102
|
-
if (!isWritableStreamDefaultWriter(this)) return Promise.reject(new TypeError("Invalid this"));
|
|
103
|
-
return this[kState].ready.promise;
|
|
104
|
-
}
|
|
105
|
-
abort(reason) {
|
|
106
|
-
if (!isWritableStreamDefaultWriter(this)) return Promise.reject(new TypeError("Invalid this"));
|
|
107
|
-
if (this[kState].stream === undefined) {
|
|
108
|
-
return Promise.reject(new TypeError("Writer is not bound to a WritableStream"));
|
|
109
|
-
}
|
|
110
|
-
return writableStreamDefaultWriterAbort(this, reason);
|
|
111
|
-
}
|
|
112
|
-
close() {
|
|
113
|
-
if (!isWritableStreamDefaultWriter(this)) return Promise.reject(new TypeError("Invalid this"));
|
|
114
|
-
const { stream } = this[kState];
|
|
115
|
-
if (stream === undefined) {
|
|
116
|
-
return Promise.reject(new TypeError("Writer is not bound to a WritableStream"));
|
|
117
|
-
}
|
|
118
|
-
if (writableStreamCloseQueuedOrInFlight(stream)) {
|
|
119
|
-
return Promise.reject(new TypeError("Failure to close WritableStream"));
|
|
120
|
-
}
|
|
121
|
-
return writableStreamDefaultWriterClose(this);
|
|
122
|
-
}
|
|
123
|
-
releaseLock() {
|
|
124
|
-
if (!isWritableStreamDefaultWriter(this)) throw new TypeError("Invalid this");
|
|
125
|
-
const { stream } = this[kState];
|
|
126
|
-
if (stream === undefined) return;
|
|
127
|
-
writableStreamDefaultWriterRelease(this);
|
|
128
|
-
}
|
|
129
|
-
write(chunk) {
|
|
130
|
-
if (!isWritableStreamDefaultWriter(this)) return Promise.reject(new TypeError("Invalid this"));
|
|
131
|
-
if (this[kState].stream === undefined) {
|
|
132
|
-
return Promise.reject(new TypeError("Writer is not bound to a WritableStream"));
|
|
133
|
-
}
|
|
134
|
-
return writableStreamDefaultWriterWrite(this, chunk);
|
|
135
|
-
}
|
|
136
|
-
get [Symbol.toStringTag]() {
|
|
137
|
-
return "WritableStreamDefaultWriter";
|
|
138
|
-
}
|
|
139
|
-
};
|
|
140
|
-
var WritableStreamDefaultController = class {
|
|
141
|
-
[kType] = "WritableStreamDefaultController";
|
|
142
|
-
[kState];
|
|
143
|
-
constructor(skipThrowSymbol) {
|
|
144
|
-
if (skipThrowSymbol !== kSkipThrow) {
|
|
145
|
-
throw new TypeError("Illegal constructor");
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
[kAbort](reason) {
|
|
149
|
-
const result = this[kState].abortAlgorithm(reason);
|
|
150
|
-
writableStreamDefaultControllerClearAlgorithms(this);
|
|
151
|
-
return result;
|
|
152
|
-
}
|
|
153
|
-
[kError]() {
|
|
154
|
-
resetQueue(this);
|
|
155
|
-
}
|
|
156
|
-
get signal() {
|
|
157
|
-
if (!isWritableStreamDefaultController(this)) throw new TypeError("Invalid this");
|
|
158
|
-
return this[kState].abortController.signal;
|
|
159
|
-
}
|
|
160
|
-
error(error) {
|
|
161
|
-
if (!isWritableStreamDefaultController(this)) throw new TypeError("Invalid this");
|
|
162
|
-
if (this[kState].stream[kState].state !== "writable") return;
|
|
163
|
-
writableStreamDefaultControllerError(this, error);
|
|
164
|
-
}
|
|
165
|
-
get [Symbol.toStringTag]() {
|
|
166
|
-
return "WritableStreamDefaultController";
|
|
167
|
-
}
|
|
168
|
-
};
|
|
169
|
-
const isWritableStream = isBrandCheck("WritableStream");
|
|
170
|
-
const isWritableStreamDefaultWriter = isBrandCheck("WritableStreamDefaultWriter");
|
|
171
|
-
const isWritableStreamDefaultController = isBrandCheck("WritableStreamDefaultController");
|
|
172
|
-
function createEmptyPromiseRecord() {
|
|
173
|
-
return {
|
|
174
|
-
promise: undefined,
|
|
175
|
-
resolve: undefined,
|
|
176
|
-
reject: undefined
|
|
177
|
-
};
|
|
178
|
-
}
|
|
179
|
-
function createWritableStreamState() {
|
|
180
|
-
return {
|
|
181
|
-
close: Promise.withResolvers(),
|
|
182
|
-
closeRequest: createEmptyPromiseRecord(),
|
|
183
|
-
inFlightWriteRequest: createEmptyPromiseRecord(),
|
|
184
|
-
inFlightCloseRequest: createEmptyPromiseRecord(),
|
|
185
|
-
pendingAbortRequest: {
|
|
186
|
-
abort: createEmptyPromiseRecord(),
|
|
187
|
-
reason: undefined,
|
|
188
|
-
wasAlreadyErroring: false
|
|
189
|
-
},
|
|
190
|
-
backpressure: false,
|
|
191
|
-
controller: undefined,
|
|
192
|
-
state: "writable",
|
|
193
|
-
storedError: undefined,
|
|
194
|
-
writeRequests: [],
|
|
195
|
-
writer: undefined
|
|
196
|
-
};
|
|
197
|
-
}
|
|
198
|
-
function isWritableStreamLocked(stream) {
|
|
199
|
-
return stream[kState].writer !== undefined;
|
|
200
|
-
}
|
|
201
|
-
function setupWritableStreamDefaultWriter(writer, stream) {
|
|
202
|
-
if (isWritableStreamLocked(stream)) {
|
|
203
|
-
throw new TypeError("WritableStream is locked");
|
|
204
|
-
}
|
|
205
|
-
writer[kState].stream = stream;
|
|
206
|
-
stream[kState].writer = writer;
|
|
207
|
-
switch (stream[kState].state) {
|
|
208
|
-
case "writable":
|
|
209
|
-
if (!writableStreamCloseQueuedOrInFlight(stream) && stream[kState].backpressure) {
|
|
210
|
-
writer[kState].ready = Promise.withResolvers();
|
|
211
|
-
} else {
|
|
212
|
-
writer[kState].ready = {
|
|
213
|
-
promise: Promise.resolve(),
|
|
214
|
-
resolve: undefined,
|
|
215
|
-
reject: undefined
|
|
216
|
-
};
|
|
217
|
-
}
|
|
218
|
-
writer[kState].close = Promise.withResolvers();
|
|
219
|
-
break;
|
|
220
|
-
case "erroring":
|
|
221
|
-
writer[kState].ready = {
|
|
222
|
-
promise: Promise.reject(stream[kState].storedError),
|
|
223
|
-
resolve: undefined,
|
|
224
|
-
reject: undefined
|
|
225
|
-
};
|
|
226
|
-
setPromiseHandled(writer[kState].ready.promise);
|
|
227
|
-
writer[kState].close = Promise.withResolvers();
|
|
228
|
-
break;
|
|
229
|
-
case "closed":
|
|
230
|
-
writer[kState].ready = {
|
|
231
|
-
promise: Promise.resolve(),
|
|
232
|
-
resolve: undefined,
|
|
233
|
-
reject: undefined
|
|
234
|
-
};
|
|
235
|
-
writer[kState].close = {
|
|
236
|
-
promise: Promise.resolve(),
|
|
237
|
-
resolve: undefined,
|
|
238
|
-
reject: undefined
|
|
239
|
-
};
|
|
240
|
-
break;
|
|
241
|
-
default:
|
|
242
|
-
writer[kState].ready = {
|
|
243
|
-
promise: Promise.reject(stream[kState].storedError),
|
|
244
|
-
resolve: undefined,
|
|
245
|
-
reject: undefined
|
|
246
|
-
};
|
|
247
|
-
writer[kState].close = {
|
|
248
|
-
promise: Promise.reject(stream[kState].storedError),
|
|
249
|
-
resolve: undefined,
|
|
250
|
-
reject: undefined
|
|
251
|
-
};
|
|
252
|
-
setPromiseHandled(writer[kState].ready.promise);
|
|
253
|
-
setPromiseHandled(writer[kState].close.promise);
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
function writableStreamAbort(stream, reason) {
|
|
257
|
-
const { state, controller } = stream[kState];
|
|
258
|
-
if (state === "closed" || state === "errored") return Promise.resolve();
|
|
259
|
-
controller[kState].abortController.abort(reason);
|
|
260
|
-
if (stream[kState].pendingAbortRequest.abort.promise !== undefined) {
|
|
261
|
-
return stream[kState].pendingAbortRequest.abort.promise;
|
|
262
|
-
}
|
|
263
|
-
let wasAlreadyErroring = false;
|
|
264
|
-
if (state === "erroring") {
|
|
265
|
-
wasAlreadyErroring = true;
|
|
266
|
-
reason = undefined;
|
|
267
|
-
}
|
|
268
|
-
const abort = Promise.withResolvers();
|
|
269
|
-
stream[kState].pendingAbortRequest = {
|
|
270
|
-
abort,
|
|
271
|
-
reason,
|
|
272
|
-
wasAlreadyErroring
|
|
273
|
-
};
|
|
274
|
-
if (!wasAlreadyErroring) writableStreamStartErroring(stream, reason);
|
|
275
|
-
return abort.promise;
|
|
276
|
-
}
|
|
277
|
-
function writableStreamClose(stream) {
|
|
278
|
-
const { state, writer, backpressure, controller } = stream[kState];
|
|
279
|
-
if (state === "closed" || state === "errored") {
|
|
280
|
-
return Promise.reject(new TypeError("WritableStream is closed"));
|
|
281
|
-
}
|
|
282
|
-
stream[kState].closeRequest = Promise.withResolvers();
|
|
283
|
-
const { promise } = stream[kState].closeRequest;
|
|
284
|
-
if (writer !== undefined && backpressure && state === "writable") {
|
|
285
|
-
writer[kState].ready.resolve?.();
|
|
286
|
-
}
|
|
287
|
-
writableStreamDefaultControllerClose(controller);
|
|
288
|
-
return promise;
|
|
289
|
-
}
|
|
290
|
-
function writableStreamUpdateBackpressure(stream, backpressure) {
|
|
291
|
-
const { writer } = stream[kState];
|
|
292
|
-
if (writer !== undefined && stream[kState].backpressure !== backpressure) {
|
|
293
|
-
if (backpressure) {
|
|
294
|
-
writer[kState].ready = Promise.withResolvers();
|
|
295
|
-
} else {
|
|
296
|
-
writer[kState].ready.resolve?.();
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
stream[kState].backpressure = backpressure;
|
|
300
|
-
}
|
|
301
|
-
function writableStreamStartErroring(stream, reason) {
|
|
302
|
-
const { controller, writer } = stream[kState];
|
|
303
|
-
stream[kState].state = "erroring";
|
|
304
|
-
stream[kState].storedError = reason;
|
|
305
|
-
if (writer !== undefined) {
|
|
306
|
-
writableStreamDefaultWriterEnsureReadyPromiseRejected(writer, reason);
|
|
307
|
-
}
|
|
308
|
-
if (!writableStreamHasOperationMarkedInFlight(stream) && controller[kState].started) {
|
|
309
|
-
writableStreamFinishErroring(stream);
|
|
310
|
-
}
|
|
311
|
-
}
|
|
312
|
-
function writableStreamRejectCloseAndClosedPromiseIfNeeded(stream) {
|
|
313
|
-
if (stream[kState].closeRequest.promise !== undefined) {
|
|
314
|
-
stream[kState].closeRequest.reject?.(stream[kState].storedError);
|
|
315
|
-
stream[kState].closeRequest = {
|
|
316
|
-
promise: undefined,
|
|
317
|
-
resolve: undefined,
|
|
318
|
-
reject: undefined
|
|
319
|
-
};
|
|
320
|
-
}
|
|
321
|
-
setPromiseHandled(stream[kState].close.promise);
|
|
322
|
-
stream[kState].close.reject?.(stream[kState].storedError);
|
|
323
|
-
const { writer } = stream[kState];
|
|
324
|
-
if (writer !== undefined) {
|
|
325
|
-
setPromiseHandled(writer[kState].close.promise);
|
|
326
|
-
writer[kState].close.reject?.(stream[kState].storedError);
|
|
327
|
-
}
|
|
328
|
-
}
|
|
329
|
-
function writableStreamMarkFirstWriteRequestInFlight(stream) {
|
|
330
|
-
const writeRequest = stream[kState].writeRequests.shift();
|
|
331
|
-
stream[kState].inFlightWriteRequest = writeRequest;
|
|
332
|
-
}
|
|
333
|
-
function writableStreamMarkCloseRequestInFlight(stream) {
|
|
334
|
-
stream[kState].inFlightCloseRequest = stream[kState].closeRequest;
|
|
335
|
-
stream[kState].closeRequest = {
|
|
336
|
-
promise: undefined,
|
|
337
|
-
resolve: undefined,
|
|
338
|
-
reject: undefined
|
|
339
|
-
};
|
|
340
|
-
}
|
|
341
|
-
function writableStreamHasOperationMarkedInFlight(stream) {
|
|
342
|
-
return stream[kState].inFlightWriteRequest.promise !== undefined || stream[kState].inFlightCloseRequest.promise !== undefined;
|
|
343
|
-
}
|
|
344
|
-
function writableStreamFinishInFlightWriteWithError(stream, error) {
|
|
345
|
-
stream[kState].inFlightWriteRequest.reject?.(error);
|
|
346
|
-
stream[kState].inFlightWriteRequest = {
|
|
347
|
-
promise: undefined,
|
|
348
|
-
resolve: undefined,
|
|
349
|
-
reject: undefined
|
|
350
|
-
};
|
|
351
|
-
writableStreamDealWithRejection(stream, error);
|
|
352
|
-
}
|
|
353
|
-
function writableStreamFinishInFlightWrite(stream) {
|
|
354
|
-
stream[kState].inFlightWriteRequest.resolve?.();
|
|
355
|
-
stream[kState].inFlightWriteRequest = {
|
|
356
|
-
promise: undefined,
|
|
357
|
-
resolve: undefined,
|
|
358
|
-
reject: undefined
|
|
359
|
-
};
|
|
360
|
-
}
|
|
361
|
-
function writableStreamFinishInFlightCloseWithError(stream, error) {
|
|
362
|
-
stream[kState].inFlightCloseRequest.reject?.(error);
|
|
363
|
-
stream[kState].inFlightCloseRequest = {
|
|
364
|
-
promise: undefined,
|
|
365
|
-
resolve: undefined,
|
|
366
|
-
reject: undefined
|
|
367
|
-
};
|
|
368
|
-
if (stream[kState].pendingAbortRequest.abort.promise !== undefined) {
|
|
369
|
-
stream[kState].pendingAbortRequest.abort.reject?.(error);
|
|
370
|
-
stream[kState].pendingAbortRequest = {
|
|
371
|
-
abort: {
|
|
372
|
-
promise: undefined,
|
|
373
|
-
resolve: undefined,
|
|
374
|
-
reject: undefined
|
|
375
|
-
},
|
|
376
|
-
reason: undefined,
|
|
377
|
-
wasAlreadyErroring: false
|
|
378
|
-
};
|
|
379
|
-
}
|
|
380
|
-
writableStreamDealWithRejection(stream, error);
|
|
381
|
-
}
|
|
382
|
-
function writableStreamFinishInFlightClose(stream) {
|
|
383
|
-
stream[kState].inFlightCloseRequest.resolve?.();
|
|
384
|
-
stream[kState].inFlightCloseRequest = {
|
|
385
|
-
promise: undefined,
|
|
386
|
-
resolve: undefined,
|
|
387
|
-
reject: undefined
|
|
388
|
-
};
|
|
389
|
-
if (stream[kState].state === "erroring") {
|
|
390
|
-
stream[kState].storedError = undefined;
|
|
391
|
-
if (stream[kState].pendingAbortRequest.abort.promise !== undefined) {
|
|
392
|
-
stream[kState].pendingAbortRequest.abort.resolve?.();
|
|
393
|
-
stream[kState].pendingAbortRequest = {
|
|
394
|
-
abort: {
|
|
395
|
-
promise: undefined,
|
|
396
|
-
resolve: undefined,
|
|
397
|
-
reject: undefined
|
|
398
|
-
},
|
|
399
|
-
reason: undefined,
|
|
400
|
-
wasAlreadyErroring: false
|
|
401
|
-
};
|
|
402
|
-
}
|
|
403
|
-
}
|
|
404
|
-
stream[kState].state = "closed";
|
|
405
|
-
if (stream[kState].writer !== undefined) {
|
|
406
|
-
stream[kState].writer[kState].close.resolve?.();
|
|
407
|
-
}
|
|
408
|
-
stream[kState].close.resolve?.();
|
|
409
|
-
}
|
|
410
|
-
function writableStreamFinishErroring(stream) {
|
|
411
|
-
stream[kState].state = "errored";
|
|
412
|
-
stream[kState].controller[kError]();
|
|
413
|
-
const storedError = stream[kState].storedError;
|
|
414
|
-
for (const req of stream[kState].writeRequests) {
|
|
415
|
-
req.reject?.(storedError);
|
|
416
|
-
}
|
|
417
|
-
stream[kState].writeRequests = [];
|
|
418
|
-
if (stream[kState].pendingAbortRequest.abort.promise === undefined) {
|
|
419
|
-
writableStreamRejectCloseAndClosedPromiseIfNeeded(stream);
|
|
420
|
-
return;
|
|
421
|
-
}
|
|
422
|
-
const abortRequest = stream[kState].pendingAbortRequest;
|
|
423
|
-
stream[kState].pendingAbortRequest = {
|
|
424
|
-
abort: {
|
|
425
|
-
promise: undefined,
|
|
426
|
-
resolve: undefined,
|
|
427
|
-
reject: undefined
|
|
428
|
-
},
|
|
429
|
-
reason: undefined,
|
|
430
|
-
wasAlreadyErroring: false
|
|
431
|
-
};
|
|
432
|
-
if (abortRequest.wasAlreadyErroring) {
|
|
433
|
-
abortRequest.abort.reject?.(storedError);
|
|
434
|
-
writableStreamRejectCloseAndClosedPromiseIfNeeded(stream);
|
|
435
|
-
return;
|
|
436
|
-
}
|
|
437
|
-
stream[kState].controller[kAbort](abortRequest.reason).then(() => {
|
|
438
|
-
abortRequest.abort.resolve?.();
|
|
439
|
-
writableStreamRejectCloseAndClosedPromiseIfNeeded(stream);
|
|
440
|
-
}, (error) => {
|
|
441
|
-
abortRequest.abort.reject?.(error);
|
|
442
|
-
writableStreamRejectCloseAndClosedPromiseIfNeeded(stream);
|
|
443
|
-
});
|
|
444
|
-
}
|
|
445
|
-
function writableStreamDealWithRejection(stream, error) {
|
|
446
|
-
if (stream[kState].state === "writable") {
|
|
447
|
-
writableStreamStartErroring(stream, error);
|
|
448
|
-
return;
|
|
449
|
-
}
|
|
450
|
-
writableStreamFinishErroring(stream);
|
|
451
|
-
}
|
|
452
|
-
function writableStreamCloseQueuedOrInFlight(stream) {
|
|
453
|
-
return stream[kState].closeRequest.promise !== undefined || stream[kState].inFlightCloseRequest.promise !== undefined;
|
|
454
|
-
}
|
|
455
|
-
function writableStreamAddWriteRequest(stream) {
|
|
456
|
-
const { promise, resolve, reject } = Promise.withResolvers();
|
|
457
|
-
stream[kState].writeRequests.push({
|
|
458
|
-
promise,
|
|
459
|
-
resolve,
|
|
460
|
-
reject
|
|
461
|
-
});
|
|
462
|
-
return promise;
|
|
463
|
-
}
|
|
464
|
-
function writableStreamDefaultWriterWrite(writer, chunk) {
|
|
465
|
-
const { stream } = writer[kState];
|
|
466
|
-
const { controller } = stream[kState];
|
|
467
|
-
const chunkSize = writableStreamDefaultControllerGetChunkSize(controller, chunk);
|
|
468
|
-
if (stream !== writer[kState].stream) {
|
|
469
|
-
return Promise.reject(new TypeError("Mismatched WritableStreams"));
|
|
470
|
-
}
|
|
471
|
-
const { state } = stream[kState];
|
|
472
|
-
if (state === "errored") return Promise.reject(stream[kState].storedError);
|
|
473
|
-
if (writableStreamCloseQueuedOrInFlight(stream) || state === "closed") {
|
|
474
|
-
return Promise.reject(new TypeError("WritableStream is closed"));
|
|
475
|
-
}
|
|
476
|
-
if (state === "erroring") return Promise.reject(stream[kState].storedError);
|
|
477
|
-
const promise = writableStreamAddWriteRequest(stream);
|
|
478
|
-
writableStreamDefaultControllerWrite(controller, chunk, chunkSize);
|
|
479
|
-
return promise;
|
|
480
|
-
}
|
|
481
|
-
function writableStreamDefaultWriterRelease(writer) {
|
|
482
|
-
const { stream } = writer[kState];
|
|
483
|
-
const releasedError = new TypeError("Writer has been released");
|
|
484
|
-
writableStreamDefaultWriterEnsureReadyPromiseRejected(writer, releasedError);
|
|
485
|
-
writableStreamDefaultWriterEnsureClosedPromiseRejected(writer, releasedError);
|
|
486
|
-
stream[kState].writer = undefined;
|
|
487
|
-
writer[kState].stream = undefined;
|
|
488
|
-
}
|
|
489
|
-
function writableStreamDefaultWriterGetDesiredSize(writer) {
|
|
490
|
-
const { stream } = writer[kState];
|
|
491
|
-
switch (stream[kState].state) {
|
|
492
|
-
case "errored":
|
|
493
|
-
case "erroring": return null;
|
|
494
|
-
case "closed": return 0;
|
|
495
|
-
}
|
|
496
|
-
return writableStreamDefaultControllerGetDesiredSize(stream[kState].controller);
|
|
497
|
-
}
|
|
498
|
-
function writableStreamDefaultWriterEnsureReadyPromiseRejected(writer, error) {
|
|
499
|
-
if (writer[kState].ready.reject) {
|
|
500
|
-
writer[kState].ready.reject(error);
|
|
501
|
-
writer[kState].ready.resolve = undefined;
|
|
502
|
-
writer[kState].ready.reject = undefined;
|
|
503
|
-
} else {
|
|
504
|
-
writer[kState].ready = {
|
|
505
|
-
promise: Promise.reject(error),
|
|
506
|
-
resolve: undefined,
|
|
507
|
-
reject: undefined
|
|
508
|
-
};
|
|
509
|
-
}
|
|
510
|
-
setPromiseHandled(writer[kState].ready.promise);
|
|
511
|
-
}
|
|
512
|
-
function writableStreamDefaultWriterEnsureClosedPromiseRejected(writer, error) {
|
|
513
|
-
if (writer[kState].close.reject) {
|
|
514
|
-
writer[kState].close.reject(error);
|
|
515
|
-
writer[kState].close.resolve = undefined;
|
|
516
|
-
writer[kState].close.reject = undefined;
|
|
517
|
-
} else {
|
|
518
|
-
writer[kState].close = {
|
|
519
|
-
promise: Promise.reject(error),
|
|
520
|
-
resolve: undefined,
|
|
521
|
-
reject: undefined
|
|
522
|
-
};
|
|
523
|
-
}
|
|
524
|
-
setPromiseHandled(writer[kState].close.promise);
|
|
525
|
-
}
|
|
526
|
-
function writableStreamDefaultWriterCloseWithErrorPropagation(writer) {
|
|
527
|
-
const { stream } = writer[kState];
|
|
528
|
-
const { state } = stream[kState];
|
|
529
|
-
if (writableStreamCloseQueuedOrInFlight(stream) || state === "closed") {
|
|
530
|
-
return Promise.resolve();
|
|
531
|
-
}
|
|
532
|
-
if (state === "errored") return Promise.reject(stream[kState].storedError);
|
|
533
|
-
return writableStreamDefaultWriterClose(writer);
|
|
534
|
-
}
|
|
535
|
-
function writableStreamDefaultWriterClose(writer) {
|
|
536
|
-
return writableStreamClose(writer[kState].stream);
|
|
537
|
-
}
|
|
538
|
-
function writableStreamDefaultWriterAbort(writer, reason) {
|
|
539
|
-
return writableStreamAbort(writer[kState].stream, reason);
|
|
540
|
-
}
|
|
541
|
-
function writableStreamDefaultControllerWrite(controller, chunk, chunkSize) {
|
|
542
|
-
try {
|
|
543
|
-
enqueueValueWithSize(controller, chunk, chunkSize);
|
|
544
|
-
} catch (error) {
|
|
545
|
-
writableStreamDefaultControllerErrorIfNeeded(controller, error);
|
|
546
|
-
return;
|
|
547
|
-
}
|
|
548
|
-
const { stream } = controller[kState];
|
|
549
|
-
if (!writableStreamCloseQueuedOrInFlight(stream) && stream[kState].state === "writable") {
|
|
550
|
-
writableStreamUpdateBackpressure(stream, writableStreamDefaultControllerGetBackpressure(controller));
|
|
551
|
-
}
|
|
552
|
-
writableStreamDefaultControllerAdvanceQueueIfNeeded(controller);
|
|
553
|
-
}
|
|
554
|
-
function writableStreamDefaultControllerProcessWrite(controller, chunk) {
|
|
555
|
-
const { stream, writeAlgorithm } = controller[kState];
|
|
556
|
-
writableStreamMarkFirstWriteRequestInFlight(stream);
|
|
557
|
-
writeAlgorithm(chunk, controller).then(() => {
|
|
558
|
-
writableStreamFinishInFlightWrite(stream);
|
|
559
|
-
const { state } = stream[kState];
|
|
560
|
-
dequeueValue(controller);
|
|
561
|
-
if (!writableStreamCloseQueuedOrInFlight(stream) && state === "writable") {
|
|
562
|
-
writableStreamUpdateBackpressure(stream, writableStreamDefaultControllerGetBackpressure(controller));
|
|
563
|
-
}
|
|
564
|
-
writableStreamDefaultControllerAdvanceQueueIfNeeded(controller);
|
|
565
|
-
}, (error) => {
|
|
566
|
-
if (stream[kState].state === "writable") {
|
|
567
|
-
writableStreamDefaultControllerClearAlgorithms(controller);
|
|
568
|
-
}
|
|
569
|
-
writableStreamFinishInFlightWriteWithError(stream, error);
|
|
570
|
-
});
|
|
571
|
-
}
|
|
572
|
-
function writableStreamDefaultControllerProcessClose(controller) {
|
|
573
|
-
const { closeAlgorithm, queue, stream } = controller[kState];
|
|
574
|
-
writableStreamMarkCloseRequestInFlight(stream);
|
|
575
|
-
dequeueValue(controller);
|
|
576
|
-
const sinkClosePromise = closeAlgorithm();
|
|
577
|
-
writableStreamDefaultControllerClearAlgorithms(controller);
|
|
578
|
-
sinkClosePromise.then(() => writableStreamFinishInFlightClose(stream), (error) => writableStreamFinishInFlightCloseWithError(stream, error));
|
|
579
|
-
}
|
|
580
|
-
function writableStreamDefaultControllerGetDesiredSize(controller) {
|
|
581
|
-
return controller[kState].highWaterMark - controller[kState].queueTotalSize;
|
|
582
|
-
}
|
|
583
|
-
function writableStreamDefaultControllerGetChunkSize(controller, chunk) {
|
|
584
|
-
const { stream, sizeAlgorithm } = controller[kState];
|
|
585
|
-
if (sizeAlgorithm === undefined) return 1;
|
|
586
|
-
try {
|
|
587
|
-
return sizeAlgorithm(chunk);
|
|
588
|
-
} catch (error) {
|
|
589
|
-
writableStreamDefaultControllerErrorIfNeeded(controller, error);
|
|
590
|
-
return 1;
|
|
591
|
-
}
|
|
592
|
-
}
|
|
593
|
-
function writableStreamDefaultControllerErrorIfNeeded(controller, error) {
|
|
594
|
-
if (controller[kState].stream[kState].state === "writable") {
|
|
595
|
-
writableStreamDefaultControllerError(controller, error);
|
|
596
|
-
}
|
|
597
|
-
}
|
|
598
|
-
function writableStreamDefaultControllerError(controller, error) {
|
|
599
|
-
writableStreamDefaultControllerClearAlgorithms(controller);
|
|
600
|
-
writableStreamStartErroring(controller[kState].stream, error);
|
|
601
|
-
}
|
|
602
|
-
function writableStreamDefaultControllerClose(controller) {
|
|
603
|
-
enqueueValueWithSize(controller, kCloseSentinel, 0);
|
|
604
|
-
writableStreamDefaultControllerAdvanceQueueIfNeeded(controller);
|
|
605
|
-
}
|
|
606
|
-
function writableStreamDefaultControllerClearAlgorithms(controller) {
|
|
607
|
-
controller[kState].writeAlgorithm = undefined;
|
|
608
|
-
controller[kState].closeAlgorithm = undefined;
|
|
609
|
-
controller[kState].abortAlgorithm = undefined;
|
|
610
|
-
controller[kState].sizeAlgorithm = undefined;
|
|
611
|
-
}
|
|
612
|
-
function writableStreamDefaultControllerGetBackpressure(controller) {
|
|
613
|
-
return writableStreamDefaultControllerGetDesiredSize(controller) <= 0;
|
|
614
|
-
}
|
|
615
|
-
function writableStreamDefaultControllerAdvanceQueueIfNeeded(controller) {
|
|
616
|
-
const { queue, started, stream } = controller[kState];
|
|
617
|
-
if (!started || stream[kState].inFlightWriteRequest.promise !== undefined) return;
|
|
618
|
-
if (stream[kState].state === "erroring") {
|
|
619
|
-
writableStreamFinishErroring(stream);
|
|
620
|
-
return;
|
|
621
|
-
}
|
|
622
|
-
if (!queue.length) return;
|
|
623
|
-
const value = peekQueueValue(controller);
|
|
624
|
-
if (value === kCloseSentinel) {
|
|
625
|
-
writableStreamDefaultControllerProcessClose(controller);
|
|
626
|
-
} else {
|
|
627
|
-
writableStreamDefaultControllerProcessWrite(controller, value);
|
|
628
|
-
}
|
|
629
|
-
}
|
|
630
|
-
function setupWritableStreamDefaultControllerFromSink(stream, sink, highWaterMark, sizeAlgorithm) {
|
|
631
|
-
const controller = new WritableStreamDefaultController(kSkipThrow);
|
|
632
|
-
const start = sink?.start;
|
|
633
|
-
const write = sink?.write;
|
|
634
|
-
const close = sink?.close;
|
|
635
|
-
const abort = sink?.abort;
|
|
636
|
-
const startAlgorithm = start ? start.bind(sink, controller) : nonOpStart;
|
|
637
|
-
const writeAlgorithm = write ? createPromiseCallback("sink.write", write, sink) : nonOpWrite;
|
|
638
|
-
const closeAlgorithm = close ? createPromiseCallback("sink.close", close, sink) : nonOpCancel;
|
|
639
|
-
const abortAlgorithm = abort ? createPromiseCallback("sink.abort", abort, sink) : nonOpCancel;
|
|
640
|
-
setupWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm);
|
|
641
|
-
}
|
|
642
|
-
function setupWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm) {
|
|
643
|
-
controller[kState] = {
|
|
644
|
-
abortAlgorithm,
|
|
645
|
-
closeAlgorithm,
|
|
646
|
-
highWaterMark,
|
|
647
|
-
queue: [],
|
|
648
|
-
queueTotalSize: 0,
|
|
649
|
-
abortController: new _AbortController(),
|
|
650
|
-
sizeAlgorithm,
|
|
651
|
-
started: false,
|
|
652
|
-
stream,
|
|
653
|
-
writeAlgorithm
|
|
654
|
-
};
|
|
655
|
-
stream[kState].controller = controller;
|
|
656
|
-
writableStreamUpdateBackpressure(stream, writableStreamDefaultControllerGetBackpressure(controller));
|
|
657
|
-
const startResult = startAlgorithm();
|
|
658
|
-
new Promise((r) => r(startResult)).then(() => {
|
|
659
|
-
controller[kState].started = true;
|
|
660
|
-
writableStreamDefaultControllerAdvanceQueueIfNeeded(controller);
|
|
661
|
-
}, (error) => {
|
|
662
|
-
controller[kState].started = true;
|
|
663
|
-
writableStreamDealWithRejection(stream, error);
|
|
664
|
-
});
|
|
665
|
-
}
|
|
666
|
-
function createWritableStream(start, write, close, abort, highWaterMark = 1, size = () => 1) {
|
|
667
|
-
const stream = Object.create(WritableStream.prototype);
|
|
668
|
-
stream[kType] = "WritableStream";
|
|
669
|
-
stream[kState] = createWritableStreamState();
|
|
670
|
-
const controller = new WritableStreamDefaultController(kSkipThrow);
|
|
671
|
-
setupWritableStreamDefaultController(stream, controller, start, write, close, abort, highWaterMark, size);
|
|
672
|
-
return stream;
|
|
673
|
-
}
|
|
674
|
-
|
|
675
|
-
//#endregion
|
|
676
|
-
export { WritableStream, WritableStreamDefaultController, WritableStreamDefaultWriter, createWritableStream, isWritableStream, isWritableStreamDefaultController, isWritableStreamDefaultWriter, isWritableStreamLocked, writableStreamAbort, writableStreamClose, writableStreamCloseQueuedOrInFlight, writableStreamDefaultControllerErrorIfNeeded, writableStreamDefaultWriterCloseWithErrorPropagation, writableStreamDefaultWriterRelease, writableStreamDefaultWriterWrite };
|
|
1
|
+
import{createPromiseCallback as e,dequeueValue as t,enqueueValueWithSize as n,extractHighWaterMark as r,extractSizeAlgorithm as i,isBrandCheck as a,kState as o,kType as s,nonOpCancel as c,nonOpStart as l,nonOpWrite as ee,peekQueueValue as u,resetQueue as d,setPromiseHandled as f}from"./util.js";const te=typeof globalThis.AbortController==`function`?globalThis.AbortController:class{signal={aborted:!1,reason:void 0,addEventListener(){},removeEventListener(){}};abort(e){this.signal.aborted=!0,this.signal.reason=e}},p=Symbol(`kAbort`),m=Symbol(`kCloseSentinel`),h=Symbol(`kError`),g=Symbol(`kSkipThrow`);var _=class{[s]=`WritableStream`;[o];constructor(e={},t={}){if(e!=null&&typeof e!=`object`)throw TypeError(`sink must be an object`);if(t!=null&&typeof t!=`object`)throw TypeError(`strategy must be an object`);let n=e?.type;if(n!==void 0)throw RangeError(`Invalid type: ${n}`);this[o]=w();let a=i(t?.size),s=r(t?.highWaterMark,1);de(this,e,s,a)}get locked(){if(!b(this))throw TypeError(`Invalid this`);return T(this)}abort(e){return b(this)?T(this)?Promise.reject(TypeError(`WritableStream is locked`)):E(this,e):Promise.reject(TypeError(`Invalid this`))}close(){return b(this)?T(this)?Promise.reject(TypeError(`WritableStream is locked`)):I(this)?Promise.reject(TypeError(`Failure closing WritableStream`)):D(this):Promise.reject(TypeError(`Invalid this`))}getWriter(){if(!b(this))throw TypeError(`Invalid this`);return new v(this)}get[Symbol.toStringTag](){return`WritableStream`}},v=class{[s]=`WritableStreamDefaultWriter`;[o];constructor(e){if(!b(e))throw TypeError(`Expected a WritableStream`);this[o]={stream:void 0,close:{promise:void 0,resolve:void 0,reject:void 0},ready:{promise:void 0,resolve:void 0,reject:void 0}},ne(this,e)}get closed(){return x(this)?this[o].close.promise:Promise.reject(TypeError(`Invalid this`))}get desiredSize(){if(!x(this))throw TypeError(`Invalid this`);if(this[o].stream===void 0)throw TypeError(`Writer is not bound to a WritableStream`);return z(this)}get ready(){return x(this)?this[o].ready.promise:Promise.reject(TypeError(`Invalid this`))}abort(e){return x(this)?this[o].stream===void 0?Promise.reject(TypeError(`Writer is not bound to a WritableStream`)):W(this,e):Promise.reject(TypeError(`Invalid this`))}close(){if(!x(this))return Promise.reject(TypeError(`Invalid this`));let{stream:e}=this[o];return e===void 0?Promise.reject(TypeError(`Writer is not bound to a WritableStream`)):I(e)?Promise.reject(TypeError(`Failure to close WritableStream`)):U(this)}releaseLock(){if(!x(this))throw TypeError(`Invalid this`);let{stream:e}=this[o];e!==void 0&&R(this)}write(e){return x(this)?this[o].stream===void 0?Promise.reject(TypeError(`Writer is not bound to a WritableStream`)):L(this,e):Promise.reject(TypeError(`Invalid this`))}get[Symbol.toStringTag](){return`WritableStreamDefaultWriter`}},y=class{[s]=`WritableStreamDefaultController`;[o];constructor(e){if(e!==g)throw TypeError(`Illegal constructor`)}[p](e){let t=this[o].abortAlgorithm(e);return X(this),t}[h](){d(this)}get signal(){if(!S(this))throw TypeError(`Invalid this`);return this[o].abortController.signal}error(e){if(!S(this))throw TypeError(`Invalid this`);this[o].stream[o].state===`writable`&&J(this,e)}get[Symbol.toStringTag](){return`WritableStreamDefaultController`}};const b=a(`WritableStream`),x=a(`WritableStreamDefaultWriter`),S=a(`WritableStreamDefaultController`);function C(){return{promise:void 0,resolve:void 0,reject:void 0}}function w(){return{close:Promise.withResolvers(),closeRequest:C(),inFlightWriteRequest:C(),inFlightCloseRequest:C(),pendingAbortRequest:{abort:C(),reason:void 0,wasAlreadyErroring:!1},backpressure:!1,controller:void 0,state:`writable`,storedError:void 0,writeRequests:[],writer:void 0}}function T(e){return e[o].writer!==void 0}function ne(e,t){if(T(t))throw TypeError(`WritableStream is locked`);switch(e[o].stream=t,t[o].writer=e,t[o].state){case`writable`:!I(t)&&t[o].backpressure?e[o].ready=Promise.withResolvers():e[o].ready={promise:Promise.resolve(),resolve:void 0,reject:void 0},e[o].close=Promise.withResolvers();break;case`erroring`:e[o].ready={promise:Promise.reject(t[o].storedError),resolve:void 0,reject:void 0},f(e[o].ready.promise),e[o].close=Promise.withResolvers();break;case`closed`:e[o].ready={promise:Promise.resolve(),resolve:void 0,reject:void 0},e[o].close={promise:Promise.resolve(),resolve:void 0,reject:void 0};break;default:e[o].ready={promise:Promise.reject(t[o].storedError),resolve:void 0,reject:void 0},e[o].close={promise:Promise.reject(t[o].storedError),resolve:void 0,reject:void 0},f(e[o].ready.promise),f(e[o].close.promise)}}function E(e,t){let{state:n,controller:r}=e[o];if(n===`closed`||n===`errored`)return Promise.resolve();if(r[o].abortController.abort(t),e[o].pendingAbortRequest.abort.promise!==void 0)return e[o].pendingAbortRequest.abort.promise;let i=!1;n===`erroring`&&(i=!0,t=void 0);let a=Promise.withResolvers();return e[o].pendingAbortRequest={abort:a,reason:t,wasAlreadyErroring:i},i||k(e,t),a.promise}function D(e){let{state:t,writer:n,backpressure:r,controller:i}=e[o];if(t===`closed`||t===`errored`)return Promise.reject(TypeError(`WritableStream is closed`));e[o].closeRequest=Promise.withResolvers();let{promise:a}=e[o].closeRequest;return n!==void 0&&r&&t===`writable`&&n[o].ready.resolve?.(),Y(i),a}function O(e,t){let{writer:n}=e[o];n!==void 0&&e[o].backpressure!==t&&(t?n[o].ready=Promise.withResolvers():n[o].ready.resolve?.()),e[o].backpressure=t}function k(e,t){let{controller:n,writer:r}=e[o];e[o].state=`erroring`,e[o].storedError=t,r!==void 0&&B(r,t),!ae(e)&&n[o].started&&P(e)}function A(e){e[o].closeRequest.promise!==void 0&&(e[o].closeRequest.reject?.(e[o].storedError),e[o].closeRequest={promise:void 0,resolve:void 0,reject:void 0}),f(e[o].close.promise),e[o].close.reject?.(e[o].storedError);let{writer:t}=e[o];t!==void 0&&(f(t[o].close.promise),t[o].close.reject?.(e[o].storedError))}function re(e){let t=e[o].writeRequests.shift();e[o].inFlightWriteRequest=t}function ie(e){e[o].inFlightCloseRequest=e[o].closeRequest,e[o].closeRequest={promise:void 0,resolve:void 0,reject:void 0}}function ae(e){return e[o].inFlightWriteRequest.promise!==void 0||e[o].inFlightCloseRequest.promise!==void 0}function oe(e,t){e[o].inFlightWriteRequest.reject?.(t),e[o].inFlightWriteRequest={promise:void 0,resolve:void 0,reject:void 0},F(e,t)}function j(e){e[o].inFlightWriteRequest.resolve?.(),e[o].inFlightWriteRequest={promise:void 0,resolve:void 0,reject:void 0}}function M(e,t){e[o].inFlightCloseRequest.reject?.(t),e[o].inFlightCloseRequest={promise:void 0,resolve:void 0,reject:void 0},e[o].pendingAbortRequest.abort.promise!==void 0&&(e[o].pendingAbortRequest.abort.reject?.(t),e[o].pendingAbortRequest={abort:{promise:void 0,resolve:void 0,reject:void 0},reason:void 0,wasAlreadyErroring:!1}),F(e,t)}function N(e){e[o].inFlightCloseRequest.resolve?.(),e[o].inFlightCloseRequest={promise:void 0,resolve:void 0,reject:void 0},e[o].state===`erroring`&&(e[o].storedError=void 0,e[o].pendingAbortRequest.abort.promise!==void 0&&(e[o].pendingAbortRequest.abort.resolve?.(),e[o].pendingAbortRequest={abort:{promise:void 0,resolve:void 0,reject:void 0},reason:void 0,wasAlreadyErroring:!1})),e[o].state=`closed`,e[o].writer!==void 0&&e[o].writer[o].close.resolve?.(),e[o].close.resolve?.()}function P(e){e[o].state=`errored`,e[o].controller[h]();let t=e[o].storedError;for(let n of e[o].writeRequests)n.reject?.(t);if(e[o].writeRequests=[],e[o].pendingAbortRequest.abort.promise===void 0){A(e);return}let n=e[o].pendingAbortRequest;if(e[o].pendingAbortRequest={abort:{promise:void 0,resolve:void 0,reject:void 0},reason:void 0,wasAlreadyErroring:!1},n.wasAlreadyErroring){n.abort.reject?.(t),A(e);return}e[o].controller[p](n.reason).then(()=>{n.abort.resolve?.(),A(e)},t=>{n.abort.reject?.(t),A(e)})}function F(e,t){if(e[o].state===`writable`){k(e,t);return}P(e)}function I(e){return e[o].closeRequest.promise!==void 0||e[o].inFlightCloseRequest.promise!==void 0}function se(e){let{promise:t,resolve:n,reject:r}=Promise.withResolvers();return e[o].writeRequests.push({promise:t,resolve:n,reject:r}),t}function L(e,t){let{stream:n}=e[o],{controller:r}=n[o],i=ue(r,t);if(n!==e[o].stream)return Promise.reject(TypeError(`Mismatched WritableStreams`));let{state:a}=n[o];if(a===`errored`)return Promise.reject(n[o].storedError);if(I(n)||a===`closed`)return Promise.reject(TypeError(`WritableStream is closed`));if(a===`erroring`)return Promise.reject(n[o].storedError);let s=se(n);return G(r,t,i),s}function R(e){let{stream:t}=e[o],n=TypeError(`Writer has been released`);B(e,n),V(e,n),t[o].writer=void 0,e[o].stream=void 0}function z(e){let{stream:t}=e[o];switch(t[o].state){case`errored`:case`erroring`:return null;case`closed`:return 0}return K(t[o].controller)}function B(e,t){e[o].ready.reject?(e[o].ready.reject(t),e[o].ready.resolve=void 0,e[o].ready.reject=void 0):e[o].ready={promise:Promise.reject(t),resolve:void 0,reject:void 0},f(e[o].ready.promise)}function V(e,t){e[o].close.reject?(e[o].close.reject(t),e[o].close.resolve=void 0,e[o].close.reject=void 0):e[o].close={promise:Promise.reject(t),resolve:void 0,reject:void 0},f(e[o].close.promise)}function H(e){let{stream:t}=e[o],{state:n}=t[o];return I(t)||n===`closed`?Promise.resolve():n===`errored`?Promise.reject(t[o].storedError):U(e)}function U(e){return D(e[o].stream)}function W(e,t){return E(e[o].stream,t)}function G(e,t,r){try{n(e,t,r)}catch(t){q(e,t);return}let{stream:i}=e[o];!I(i)&&i[o].state===`writable`&&O(i,Z(e)),Q(e)}function ce(e,n){let{stream:r,writeAlgorithm:i}=e[o];re(r),i(n,e).then(()=>{j(r);let{state:n}=r[o];t(e),!I(r)&&n===`writable`&&O(r,Z(e)),Q(e)},t=>{r[o].state===`writable`&&X(e),oe(r,t)})}function le(e){let{closeAlgorithm:n,queue:r,stream:i}=e[o];ie(i),t(e);let a=n();X(e),a.then(()=>N(i),e=>M(i,e))}function K(e){return e[o].highWaterMark-e[o].queueTotalSize}function ue(e,t){let{stream:n,sizeAlgorithm:r}=e[o];if(r===void 0)return 1;try{return r(t)}catch(t){return q(e,t),1}}function q(e,t){e[o].stream[o].state===`writable`&&J(e,t)}function J(e,t){X(e),k(e[o].stream,t)}function Y(e){n(e,m,0),Q(e)}function X(e){e[o].writeAlgorithm=void 0,e[o].closeAlgorithm=void 0,e[o].abortAlgorithm=void 0,e[o].sizeAlgorithm=void 0}function Z(e){return K(e)<=0}function Q(e){let{queue:t,started:n,stream:r}=e[o];if(!n||r[o].inFlightWriteRequest.promise!==void 0)return;if(r[o].state===`erroring`){P(r);return}if(!t.length)return;let i=u(e);i===m?le(e):ce(e,i)}function de(t,n,r,i){let a=new y(g),o=n?.start,s=n?.write,u=n?.close,d=n?.abort;$(t,a,o?o.bind(n,a):l,s?e(`sink.write`,s,n):ee,u?e(`sink.close`,u,n):c,d?e(`sink.abort`,d,n):c,r,i)}function $(e,t,n,r,i,a,s,c){t[o]={abortAlgorithm:a,closeAlgorithm:i,highWaterMark:s,queue:[],queueTotalSize:0,abortController:new te,sizeAlgorithm:c,started:!1,stream:e,writeAlgorithm:r},e[o].controller=t,O(e,Z(t));let l=n();new Promise(e=>e(l)).then(()=>{t[o].started=!0,Q(t)},n=>{t[o].started=!0,F(e,n)})}function fe(e,t,n,r,i=1,a=()=>1){let c=Object.create(_.prototype);return c[s]=`WritableStream`,c[o]=w(),$(c,new y(g),e,t,n,r,i,a),c}export{_ as WritableStream,y as WritableStreamDefaultController,v as WritableStreamDefaultWriter,fe as createWritableStream,b as isWritableStream,S as isWritableStreamDefaultController,x as isWritableStreamDefaultWriter,T as isWritableStreamLocked,E as writableStreamAbort,D as writableStreamClose,I as writableStreamCloseQueuedOrInFlight,q as writableStreamDefaultControllerErrorIfNeeded,H as writableStreamDefaultWriterCloseWithErrorPropagation,R as writableStreamDefaultWriterRelease,L as writableStreamDefaultWriterWrite};
|