@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.
@@ -1,11 +1 @@
1
- import { ByteLengthQueuingStrategy as _ByteLengthQueuingStrategy, CountQueuingStrategy as _CountQueuingStrategy } from "../index.js";
2
-
3
- //#region src/register/queuing.ts
4
- if (typeof globalThis.ByteLengthQueuingStrategy === "undefined") {
5
- globalThis.ByteLengthQueuingStrategy = _ByteLengthQueuingStrategy;
6
- }
7
- if (typeof globalThis.CountQueuingStrategy === "undefined") {
8
- globalThis.CountQueuingStrategy = _CountQueuingStrategy;
9
- }
10
-
11
- //#endregion
1
+ import{ByteLengthQueuingStrategy as e,CountQueuingStrategy as t}from"../index.js";globalThis.ByteLengthQueuingStrategy===void 0&&(globalThis.ByteLengthQueuingStrategy=e),globalThis.CountQueuingStrategy===void 0&&(globalThis.CountQueuingStrategy=t);
@@ -1,16 +1 @@
1
- import { ReadableStream as _ReadableStream } from "../index.js";
2
-
3
- //#region src/register/readable.ts
4
- function isNativeStreamUsable(Ctor, method) {
5
- try {
6
- if (typeof Ctor !== "function") return false;
7
- return typeof Ctor.prototype[method] === "function";
8
- } catch {
9
- return false;
10
- }
11
- }
12
- if (!isNativeStreamUsable(globalThis.ReadableStream, "getReader")) {
13
- globalThis.ReadableStream = _ReadableStream;
14
- }
15
-
16
- //#endregion
1
+ import{ReadableStream as e}from"../index.js";function t(e,t){try{return typeof e==`function`?typeof e.prototype[t]==`function`:!1}catch{return!1}}t(globalThis.ReadableStream,`getReader`)||(globalThis.ReadableStream=e);
@@ -1,11 +1 @@
1
- import { TextDecoderStream as _TextDecoderStream, TextEncoderStream as _TextEncoderStream } from "../index.js";
2
-
3
- //#region src/register/text-streams.ts
4
- if (typeof globalThis.TextEncoderStream === "undefined") {
5
- globalThis.TextEncoderStream = _TextEncoderStream;
6
- }
7
- if (typeof globalThis.TextDecoderStream === "undefined") {
8
- globalThis.TextDecoderStream = _TextDecoderStream;
9
- }
10
-
11
- //#endregion
1
+ import{TextDecoderStream as e,TextEncoderStream as t}from"../index.js";globalThis.TextEncoderStream===void 0&&(globalThis.TextEncoderStream=t),globalThis.TextDecoderStream===void 0&&(globalThis.TextDecoderStream=e);
@@ -1,16 +1 @@
1
- import { TransformStream as _TransformStream } from "../index.js";
2
-
3
- //#region src/register/transform.ts
4
- function isNativeStreamUsable(Ctor, method) {
5
- try {
6
- if (typeof Ctor !== "function") return false;
7
- return typeof Ctor.prototype[method] === "function";
8
- } catch {
9
- return false;
10
- }
11
- }
12
- if (!isNativeStreamUsable(globalThis.TransformStream, "readable")) {
13
- globalThis.TransformStream = _TransformStream;
14
- }
15
-
16
- //#endregion
1
+ import{TransformStream as e}from"../index.js";function t(e,t){try{return typeof e==`function`?typeof e.prototype[t]==`function`:!1}catch{return!1}}t(globalThis.TransformStream,`readable`)||(globalThis.TransformStream=e);
@@ -1,16 +1 @@
1
- import { WritableStream as _WritableStream } from "../index.js";
2
-
3
- //#region src/register/writable.ts
4
- function isNativeStreamUsable(Ctor, method) {
5
- try {
6
- if (typeof Ctor !== "function") return false;
7
- return typeof Ctor.prototype[method] === "function";
8
- } catch {
9
- return false;
10
- }
11
- }
12
- if (!isNativeStreamUsable(globalThis.WritableStream, "getWriter")) {
13
- globalThis.WritableStream = _WritableStream;
14
- }
15
-
16
- //#endregion
1
+ import{WritableStream as e}from"../index.js";function t(e,t){try{return typeof e==`function`?typeof e.prototype[t]==`function`:!1}catch{return!1}}t(globalThis.WritableStream,`getWriter`)||(globalThis.WritableStream=e);
@@ -1,5 +1 @@
1
- import "./register/readable.js";
2
- import "./register/writable.js";
3
- import "./register/transform.js";
4
- import "./register/text-streams.js";
5
- import "./register/queuing.js";
1
+ import"./register/readable.js";import"./register/writable.js";import"./register/transform.js";import"./register/text-streams.js";import"./register/queuing.js";
@@ -1,141 +1 @@
1
- import { TransformStream } from "./transform-stream.js";
2
-
3
- //#region src/text-decoder-stream.ts
4
- /** Check if TextDecoder supports the `stream` option */
5
- function hasStreamingSupport() {
6
- try {
7
- const td = new TextDecoder();
8
- td.decode(new Uint8Array([195]), { stream: true });
9
- return true;
10
- } catch {
11
- return false;
12
- }
13
- }
14
- const supportsStreaming = hasStreamingSupport();
15
- /**
16
- * For UTF-8 without streaming TextDecoder support:
17
- * Determine how many bytes at the end of `buf` form an incomplete
18
- * multi-byte sequence. Returns 0 if the buffer ends on a complete character.
19
- */
20
- function incompleteUtf8Tail(buf) {
21
- const len = buf.length;
22
- if (len === 0) return 0;
23
- for (let i = 1; i <= Math.min(3, len); i++) {
24
- const b = buf[len - i];
25
- if ((b & 128) === 0) {
26
- return 0;
27
- }
28
- if ((b & 192) !== 128) {
29
- let expectedLen;
30
- if ((b & 224) === 192) expectedLen = 2;
31
- else if ((b & 240) === 224) expectedLen = 3;
32
- else if ((b & 248) === 240) expectedLen = 4;
33
- else return 0;
34
- if (i < expectedLen) {
35
- return i;
36
- }
37
- return 0;
38
- }
39
- }
40
- return 0;
41
- }
42
- /**
43
- * TextDecoderStream decodes a stream of bytes into strings.
44
- *
45
- * Uses TextDecoder with `stream: true` when available (Node.js, browsers).
46
- * On GJS where `stream` option is not supported, manually buffers incomplete
47
- * multi-byte UTF-8 sequences across chunks.
48
- */
49
- var TextDecoderStream = class {
50
- #decoder;
51
- #transform;
52
- constructor(label, options) {
53
- this.#decoder = new TextDecoder(label, options);
54
- if (supportsStreaming) {
55
- this.#transform = new TransformStream({
56
- transform: (chunk, controller) => {
57
- const bytes = toUint8Array(chunk);
58
- const decoded = this.#decoder.decode(bytes, { stream: true });
59
- if (decoded) {
60
- controller.enqueue(decoded);
61
- }
62
- },
63
- flush: (controller) => {
64
- const final = this.#decoder.decode();
65
- if (final) {
66
- controller.enqueue(final);
67
- }
68
- },
69
- cancel: () => {
70
- this.#decoder.decode();
71
- }
72
- });
73
- } else {
74
- let pendingBytes = new Uint8Array(0);
75
- this.#transform = new TransformStream({
76
- transform: (chunk, controller) => {
77
- const incoming = toUint8Array(chunk);
78
- let combined;
79
- if (pendingBytes.length > 0) {
80
- combined = new Uint8Array(pendingBytes.length + incoming.length);
81
- combined.set(pendingBytes, 0);
82
- combined.set(incoming, pendingBytes.length);
83
- } else {
84
- combined = incoming;
85
- }
86
- const tail = incompleteUtf8Tail(combined);
87
- let decodable;
88
- if (tail > 0) {
89
- decodable = combined.slice(0, combined.length - tail);
90
- pendingBytes = combined.slice(combined.length - tail);
91
- } else {
92
- decodable = combined;
93
- pendingBytes = new Uint8Array(0);
94
- }
95
- if (decodable.length > 0) {
96
- const decoded = this.#decoder.decode(decodable);
97
- if (decoded) {
98
- controller.enqueue(decoded);
99
- }
100
- }
101
- },
102
- flush: (controller) => {
103
- if (pendingBytes.length > 0) {
104
- const decoded = this.#decoder.decode(pendingBytes);
105
- if (decoded) {
106
- controller.enqueue(decoded);
107
- }
108
- pendingBytes = new Uint8Array(0);
109
- }
110
- },
111
- cancel: () => {
112
- pendingBytes = new Uint8Array(0);
113
- }
114
- });
115
- }
116
- }
117
- get encoding() {
118
- return this.#decoder.encoding;
119
- }
120
- get fatal() {
121
- return this.#decoder.fatal;
122
- }
123
- get ignoreBOM() {
124
- return this.#decoder.ignoreBOM;
125
- }
126
- get readable() {
127
- return this.#transform.readable;
128
- }
129
- get writable() {
130
- return this.#transform.writable;
131
- }
132
- };
133
- function toUint8Array(chunk) {
134
- if (chunk instanceof Uint8Array) return chunk;
135
- if (chunk instanceof ArrayBuffer) return new Uint8Array(chunk);
136
- if (ArrayBuffer.isView(chunk)) return new Uint8Array(chunk.buffer, chunk.byteOffset, chunk.byteLength);
137
- throw new TypeError("chunk must be a BufferSource");
138
- }
139
-
140
- //#endregion
141
- export { TextDecoderStream };
1
+ import{TransformStream as e}from"./transform-stream.js";function t(){try{return new TextDecoder().decode(new Uint8Array([195]),{stream:!0}),!0}catch{return!1}}const n=t();function r(e){let t=e.length;if(t===0)return 0;for(let n=1;n<=Math.min(3,t);n++){let r=e[t-n];if(!(r&128))return 0;if((r&192)!=128){let e;if((r&224)==192)e=2;else if((r&240)==224)e=3;else if((r&248)==240)e=4;else return 0;return n<e?n:0}}return 0}var i=class{#e;#t;constructor(t,i){if(this.#e=new TextDecoder(t,i),n)this.#t=new e({transform:(e,t)=>{let n=a(e),r=this.#e.decode(n,{stream:!0});r&&t.enqueue(r)},flush:e=>{let t=this.#e.decode();t&&e.enqueue(t)},cancel:()=>{this.#e.decode()}});else{let t=new Uint8Array;this.#t=new e({transform:(e,n)=>{let i=a(e),o;t.length>0?(o=new Uint8Array(t.length+i.length),o.set(t,0),o.set(i,t.length)):o=i;let s=r(o),c;if(s>0?(c=o.slice(0,o.length-s),t=o.slice(o.length-s)):(c=o,t=new Uint8Array),c.length>0){let e=this.#e.decode(c);e&&n.enqueue(e)}},flush:e=>{if(t.length>0){let n=this.#e.decode(t);n&&e.enqueue(n),t=new Uint8Array}},cancel:()=>{t=new Uint8Array}})}}get encoding(){return this.#e.encoding}get fatal(){return this.#e.fatal}get ignoreBOM(){return this.#e.ignoreBOM}get readable(){return this.#t.readable}get writable(){return this.#t.writable}};function a(e){if(e instanceof Uint8Array)return e;if(e instanceof ArrayBuffer)return new Uint8Array(e);if(ArrayBuffer.isView(e))return new Uint8Array(e.buffer,e.byteOffset,e.byteLength);throw TypeError(`chunk must be a BufferSource`)}export{i as TextDecoderStream};
@@ -1,60 +1 @@
1
- import { TransformStream } from "./transform-stream.js";
2
-
3
- //#region src/text-encoder-stream.ts
4
- /**
5
- * TextEncoderStream encodes a stream of strings into UTF-8 encoded bytes.
6
- *
7
- * Handles surrogate pairs split across chunks: if the last code unit of a
8
- * chunk is a high surrogate (0xD800–0xDBFF), it is held until the next chunk.
9
- * If the stream ends with a pending high surrogate, U+FFFD replacement bytes
10
- * are emitted.
11
- */
12
- var TextEncoderStream = class {
13
- #pendingHighSurrogate = null;
14
- #encoder = new TextEncoder();
15
- #transform;
16
- constructor() {
17
- this.#transform = new TransformStream({
18
- transform: (chunk, controller) => {
19
- chunk = String(chunk);
20
- if (chunk === "") {
21
- return;
22
- }
23
- if (this.#pendingHighSurrogate !== null) {
24
- chunk = this.#pendingHighSurrogate + chunk;
25
- }
26
- const lastCodeUnit = chunk.charCodeAt(chunk.length - 1);
27
- if (55296 <= lastCodeUnit && lastCodeUnit <= 56319) {
28
- this.#pendingHighSurrogate = chunk.slice(-1);
29
- chunk = chunk.slice(0, -1);
30
- } else {
31
- this.#pendingHighSurrogate = null;
32
- }
33
- if (chunk) {
34
- controller.enqueue(this.#encoder.encode(chunk));
35
- }
36
- },
37
- flush: (controller) => {
38
- if (this.#pendingHighSurrogate !== null) {
39
- controller.enqueue(new Uint8Array([
40
- 239,
41
- 191,
42
- 189
43
- ]));
44
- }
45
- }
46
- });
47
- }
48
- get encoding() {
49
- return "utf-8";
50
- }
51
- get readable() {
52
- return this.#transform.readable;
53
- }
54
- get writable() {
55
- return this.#transform.writable;
56
- }
57
- };
58
-
59
- //#endregion
60
- export { TextEncoderStream };
1
+ import{TransformStream as e}from"./transform-stream.js";var t=class{#e=null;#t=new TextEncoder;#n;constructor(){this.#n=new e({transform:(e,t)=>{if(e=String(e),e===``)return;this.#e!==null&&(e=this.#e+e);let n=e.charCodeAt(e.length-1);55296<=n&&n<=56319?(this.#e=e.slice(-1),e=e.slice(0,-1)):this.#e=null,e&&t.enqueue(this.#t.encode(e))},flush:e=>{this.#e!==null&&e.enqueue(new Uint8Array([239,191,189]))}})}get encoding(){return`utf-8`}get readable(){return this.#n.readable}get writable(){return this.#n.writable}};export{t as TextEncoderStream};
@@ -1,280 +1 @@
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
- };
85
- const isTransformStream = isBrandCheck("TransformStream");
86
- const isTransformStreamDefaultController = isBrandCheck("TransformStreamDefaultController");
87
- async function defaultTransformAlgorithm(chunk, controller) {
88
- transformStreamDefaultControllerEnqueue(controller, chunk);
89
- }
90
- function initializeTransformStream(stream, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm) {
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);
106
- }
107
- function transformStreamError(stream, error) {
108
- const { readable } = stream[kState];
109
- readableStreamDefaultControllerError(readable[kState].controller, error);
110
- transformStreamErrorWritableAndUnblockWrite(stream, error);
111
- }
112
- function transformStreamErrorWritableAndUnblockWrite(stream, error) {
113
- const { controller, writable } = stream[kState];
114
- transformStreamDefaultControllerClearAlgorithms(controller);
115
- writableStreamDefaultControllerErrorIfNeeded(writable[kState].controller, error);
116
- transformStreamUnblockWrite(stream);
117
- }
118
- function transformStreamUnblockWrite(stream) {
119
- if (stream[kState].backpressure) {
120
- transformStreamSetBackpressure(stream, false);
121
- }
122
- }
123
- function transformStreamSetBackpressure(stream, backpressure) {
124
- if (stream[kState].backpressureChange.promise !== undefined) {
125
- stream[kState].backpressureChange.resolve?.();
126
- }
127
- stream[kState].backpressureChange = Promise.withResolvers();
128
- stream[kState].backpressure = backpressure;
129
- }
130
- function setupTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm, cancelAlgorithm) {
131
- controller[kState] = {
132
- stream,
133
- transformAlgorithm,
134
- flushAlgorithm,
135
- cancelAlgorithm,
136
- finishPromise: undefined
137
- };
138
- stream[kState].controller = controller;
139
- }
140
- function setupTransformStreamDefaultControllerFromTransformer(stream, transformer) {
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);
149
- }
150
- function transformStreamDefaultControllerClearAlgorithms(controller) {
151
- controller[kState].transformAlgorithm = undefined;
152
- controller[kState].flushAlgorithm = undefined;
153
- controller[kState].cancelAlgorithm = undefined;
154
- }
155
- function transformStreamDefaultControllerEnqueue(controller, chunk) {
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
- }
172
- }
173
- function transformStreamDefaultControllerError(controller, error) {
174
- transformStreamError(controller[kState].stream, error);
175
- }
176
- async function transformStreamDefaultControllerPerformTransform(controller, chunk) {
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
- }
185
- }
186
- function transformStreamDefaultControllerTerminate(controller) {
187
- const { stream } = controller[kState];
188
- const { readable } = stream[kState];
189
- readableStreamDefaultControllerClose(readable[kState].controller);
190
- transformStreamErrorWritableAndUnblockWrite(stream, new TypeError("TransformStream has been terminated"));
191
- }
192
- function transformStreamDefaultSinkWriteAlgorithm(stream, chunk) {
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);
205
- }
206
- async function transformStreamDefaultSinkAbortAlgorithm(stream, reason) {
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;
227
- }
228
- function transformStreamDefaultSinkCloseAlgorithm(stream) {
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;
249
- }
250
- function transformStreamDefaultSourcePullAlgorithm(stream) {
251
- transformStreamSetBackpressure(stream, false);
252
- return stream[kState].backpressureChange.promise;
253
- }
254
- function transformStreamDefaultSourceCancelAlgorithm(stream, reason) {
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;
277
- }
278
-
279
- //#endregion
280
- export { TransformStream, TransformStreamDefaultController, isTransformStream, isTransformStreamDefaultController };
1
+ import{createPromiseCallback as e,extractHighWaterMark as t,extractSizeAlgorithm as n,isBrandCheck as r,kState as i,kType as a,nonOpCancel as o,nonOpFlush as s}from"./util.js";import{createWritableStream as c,writableStreamDefaultControllerErrorIfNeeded as l}from"./writable-stream.js";import{createReadableStream as u,readableStreamDefaultControllerCanCloseOrEnqueue as d,readableStreamDefaultControllerClose as f,readableStreamDefaultControllerEnqueue as p,readableStreamDefaultControllerError as m,readableStreamDefaultControllerGetDesiredSize as h,readableStreamDefaultControllerHasBackpressure as g}from"./readable-stream.js";const _=Symbol(`kSkipThrow`);var v=class{[a]=`TransformStream`;[i];constructor(e={},r={},a={}){if(e!=null&&typeof e!=`object`)throw TypeError(`transformer must be an object`);if(r!=null&&typeof r!=`object`)throw TypeError(`writableStrategy must be an object`);if(a!=null&&typeof a!=`object`)throw TypeError(`readableStrategy must be an object`);let o=e?.readableType,s=e?.writableType,c=e?.start;if(o!==void 0)throw RangeError(`Invalid readableType: ${o}`);if(s!==void 0)throw RangeError(`Invalid writableType: ${s}`);let l=t(a?.highWaterMark,0),u=n(a?.size),d=t(r?.highWaterMark,1),f=n(r?.size),p=Promise.withResolvers();C(this,p,d,f,l,u),k(this,e),c===void 0?p.resolve():p.resolve(c.call(e,this[i].controller))}get readable(){if(!b(this))throw TypeError(`Invalid this`);return this[i].readable}get writable(){if(!b(this))throw TypeError(`Invalid this`);return this[i].writable}get[Symbol.toStringTag](){return`TransformStream`}},y=class{[a]=`TransformStreamDefaultController`;[i];constructor(e){if(e!==_)throw TypeError(`Illegal constructor`)}get desiredSize(){if(!x(this))throw TypeError(`Invalid this`);let{stream:e}=this[i],{readable:t}=e[i],n=t[i].controller;return h(n)}enqueue(e){if(!x(this))throw TypeError(`Invalid this`);j(this,e)}error(e){if(!x(this))throw TypeError(`Invalid this`);M(this,e)}terminate(){if(!x(this))throw TypeError(`Invalid this`);P(this)}get[Symbol.toStringTag](){return`TransformStreamDefaultController`}};const b=r(`TransformStream`),x=r(`TransformStreamDefaultController`);async function S(e,t){j(t,e)}function C(e,t,n,r,a,o){let s=()=>t.promise,l=c(s,t=>F(e,t),()=>L(e),t=>I(e,t),n,r);e[i]={readable:u(s,()=>R(e),t=>z(e,t),a,o),writable:l,controller:void 0,backpressure:void 0,backpressureChange:{promise:void 0,resolve:void 0,reject:void 0}},D(e,!0)}function w(e,t){let{readable:n}=e[i];m(n[i].controller,t),T(e,t)}function T(e,t){let{controller:n,writable:r}=e[i];A(n),l(r[i].controller,t),E(e)}function E(e){e[i].backpressure&&D(e,!1)}function D(e,t){e[i].backpressureChange.promise!==void 0&&e[i].backpressureChange.resolve?.(),e[i].backpressureChange=Promise.withResolvers(),e[i].backpressure=t}function O(e,t,n,r,a){t[i]={stream:e,transformAlgorithm:n,flushAlgorithm:r,cancelAlgorithm:a,finishPromise:void 0},e[i].controller=t}function k(t,n){let r=new y(_),i=n?.transform,a=n?.flush,c=n?.cancel;O(t,r,i?e(`transformer.transform`,i,n):S,a?e(`transformer.flush`,a,n):s,c?e(`transformer.cancel`,c,n):o)}function A(e){e[i].transformAlgorithm=void 0,e[i].flushAlgorithm=void 0,e[i].cancelAlgorithm=void 0}function j(e,t){let{stream:n}=e[i],{readable:r}=n[i],a=r[i].controller;if(!d(a))throw TypeError(`Unable to enqueue`);try{p(a,t)}catch(e){throw T(n,e),r[i].storedError}g(a)!==n[i].backpressure&&D(n,!0)}function M(e,t){w(e[i].stream,t)}async function N(e,t){try{let n=e[i].transformAlgorithm;return n===void 0?void 0:await n(t,e)}catch(t){throw w(e[i].stream,t),t}}function P(e){let{stream:t}=e[i],{readable:n}=t[i];f(n[i].controller),T(t,TypeError(`TransformStream has been terminated`))}function F(e,t){let{controller:n}=e[i];return e[i].backpressure?e[i].backpressureChange.promise.then(()=>{let{writable:r}=e[i];if(r[i].state===`erroring`)throw r[i].storedError;return N(n,t)}):N(n,t)}async function I(e,t){let{controller:n,readable:r}=e[i];if(n[i].finishPromise!==void 0)return n[i].finishPromise;let{promise:a,resolve:o,reject:s}=Promise.withResolvers();n[i].finishPromise=a;let c=n[i].cancelAlgorithm(t);return A(n),c.then(()=>{r[i].state===`errored`?s(r[i].storedError):(m(r[i].controller,t),o())},e=>{m(r[i].controller,e),s(e)}),n[i].finishPromise}function L(e){let{readable:t,controller:n}=e[i];if(n[i].finishPromise!==void 0)return n[i].finishPromise;let{promise:r,resolve:a,reject:o}=Promise.withResolvers();n[i].finishPromise=r;let s=n[i].flushAlgorithm(n);return A(n),s.then(()=>{t[i].state===`errored`?o(t[i].storedError):(f(t[i].controller),a())},e=>{m(t[i].controller,e),o(e)}),n[i].finishPromise}function R(e){return D(e,!1),e[i].backpressureChange.promise}function z(e,t){let{controller:n,writable:r}=e[i];if(n[i].finishPromise!==void 0)return n[i].finishPromise;let{promise:a,resolve:o,reject:s}=Promise.withResolvers();n[i].finishPromise=a;let c=n[i].cancelAlgorithm(t);return A(n),c.then(()=>{r[i].state===`errored`?s(r[i].storedError):(l(r[i].controller,t),E(e),o())},t=>{l(r[i].controller,t),E(e),s(t)}),n[i].finishPromise}export{v as TransformStream,y as TransformStreamDefaultController,b as isTransformStream,x as isTransformStreamDefaultController};