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