TransformStream

TransformStream representa uma implementação concreta do conceito de pipe chain transform.

TransformStream pode ser passado para o método ReadableStream.pipeThrough() para transformar os dados da stream de um formato para outro. Por exemplo, pode ser usado para decodificar ou codificar frames de vídeos, descompactar dados ou converter a stream de XML para JSON.

Um algoritmo de transformação pode ser informado como um argumento opcional para o objeto construtor. Se não informado, os dados não serão modificados.

TransformStream é um objeto transferível.

Construtor

TransformStream() Cria e retorna um objeto transform stream, especificando opcionalmente um transformation object e ordenando estratégias para as streams.

Propriedades

TransformStream.readable A ponta que possibilita ser realizada a leitura de um TransformStream.

TransformStream.writable A ponta que possibilita ser realizada a escrita de um TransformStream.

Exemplos

Anything-to-uint8array stream

No exemplo a seguir, um transform stream passa por todos os blocos recebidos como valores Uint8Array.

const transformContent = {
start() {}, // obrigatório
async transform(chunk, controller) {
chunk = await chunk;
switch (typeof chunk) {
case 'object':
// informa que a stream finalizou
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() {}
}
class AnyToU8Stream extends TransformStream {
constructor() {
super({...transformContent, textencoder: new TextEncoder()})
}
}

Para mais informações sobre TransformStream visite MDN Web Docs.



Contribuidores