UNPKG

react-native-fast-io

Version:

Modern IO for React Native, built on top of Nitro and Web standards

73 lines (72 loc) 1.96 kB
"use strict"; import { ReadableStream, TransformStream, WritableStream } from 'web-streams-polyfill'; import { CompressorFactory, DuplexStream } from "../native/streams.nitro.js"; export const toReadableStream = inputStream => { const stream = new ReadableStream({ start() { inputStream.open(); }, async pull(controller) { const buffer = await inputStream.read(); if (buffer.byteLength == 0) { controller.close(); return; } const chunk = new Uint8Array(buffer); controller.enqueue(chunk); }, cancel() { inputStream.close(); } }); return stream; }; export const toWritableStream = outputStream => { return new WritableStream({ start() { outputStream.open(); }, async write(chunk) { if (chunk.byteLength === 0) { return; } await outputStream.write(chunk.buffer); }, close() { outputStream.close(); }, abort() { outputStream.close(); } }); }; export const fromReadableStream = stream => { const duplexStream = new DuplexStream(); const writableStream = toWritableStream(duplexStream.outputStream); stream.pipeTo(writableStream); return duplexStream.inputStream; }; export class CompressionStream { constructor(format) { const compressor = CompressorFactory.create(format); const { readable, writable } = new TransformStream({ transform(chunk, controller) { const compressedData = compressor.compress(chunk.buffer); controller.enqueue(new Uint8Array(compressedData)); }, flush(controller) { const finalData = compressor.finalize(); if (finalData.byteLength > 0) { controller.enqueue(new Uint8Array(finalData)); } } }); this.readable = readable; this.writable = writable; } } export { ReadableStream, TransformStream, WritableStream }; //# sourceMappingURL=streams.js.map