UNPKG

@bitblit/ratchet-common

Version:

Common tools for general use

70 lines 2.38 kB
import { ErrorRatchet } from './error-ratchet.js'; import { StringRatchet } from './string-ratchet.js'; import { Uint8ArrayRatchet } from './uint-8-array-ratchet.js'; import { Logger } from '../logger/logger.js'; export class WebStreamRatchet { constructor() { } static async webReadableStreamToUint8Array(stream) { const out = []; const writer = new WritableStream({ async write(chunk, _controller) { if (typeof chunk === 'string') { out.push(StringRatchet.stringToUint8Array(chunk)); } else { out.push(chunk); } return null; }, abort(reason) { ErrorRatchet.throwFormattedErr('StringWebWritableStream failure : %s', reason); }, }, { highWaterMark: 3, size: () => 1, }); try { Logger.debug('Starting pipe'); await stream.pipeTo(writer, { preventAbort: true, preventCancel: true, preventClose: true }); Logger.debug('Completed pipe'); return Uint8ArrayRatchet.mergeArrays(out); } catch (err) { Logger.error('Caught error while trying to convert to array : %s', err, err); throw err; } } static async webReadableStreamToString(stream) { const buf = await WebStreamRatchet.webReadableStreamToUint8Array(stream); return new TextDecoder().decode(buf); } static stringToWebReadableStream(input) { const rval = new ReadableStream({ start(controller) { if (input) { controller.enqueue(input); } controller.close(); return null; }, }, { highWaterMark: input ? input.length : null, }); return rval; } static uint8ArrayToWebReadableStream(input) { const rval = new ReadableStream({ start(controller) { if (input) { controller.enqueue(input); } controller.close(); return null; }, }, { highWaterMark: input ? input.length : null, }); return rval; } } //# sourceMappingURL=web-stream-ratchet.js.map