Baseline Widely available
Note: This feature is available in Web Workers.
The TransformStreamDefaultController
interface of the Streams API provides methods to manipulate the associated ReadableStream
and WritableStream
.
When constructing a TransformStream
, the TransformStreamDefaultController
is created. It therefore has no constructor. The way to get an instance of TransformStreamDefaultController
is via the callback methods of TransformStream()
.
TransformStreamDefaultController.desiredSize
Read only
Returns the desired size to fill the readable side of the stream's internal queue.
TransformStreamDefaultController.enqueue()
Enqueues a chunk (single piece of data) in the readable side of the stream.
TransformStreamDefaultController.error()
Errors both the readable and writable side of the transform stream.
TransformStreamDefaultController.terminate()
Closes the readable side and errors the writable side of the stream.
In the following example, a transform stream passes through all chunks it receives as Uint8Array
values, using the error()
and enqueue()
methods.
const transformContent = {
start() {}, // required.
async transform(chunk, controller) {
chunk = await chunk;
switch (typeof chunk) {
case "object":
// just say the stream is done I guess
if (chunk === null) {
controller.terminate();
} else if (ArrayBuffer.isView(chunk)) {
controller.enqueue(
new Uint8Array(chunk.buffer, chunk.byteOffset, chunk.byteLength),
);
} else if (
Array.isArray(chunk) &&
chunk.every((value) => typeof value === "number")
) {
controller.enqueue(new Uint8Array(chunk));
} else if (
typeof chunk.valueOf === "function" &&
chunk.valueOf() !== chunk
) {
this.transform(chunk.valueOf(), controller); // hack
} else if ("toJSON" in chunk) {
this.transform(JSON.stringify(chunk), controller);
}
break;
case "symbol":
controller.error("Cannot send a symbol as a chunk part");
break;
case "undefined":
controller.error("Cannot send undefined as a chunk part");
break;
default:
controller.enqueue(this.textencoder.encode(String(chunk)));
break;
}
},
flush() {
/* do any destructor work here */
},
};
class AnyToU8Stream extends TransformStream {
constructor() {
super({ ...transformContent, textencoder: new TextEncoder() });
}
}
Specifications Browser compatibility
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4