@bitblit/ratchet-common
Version:
Common tools for general use
70 lines • 2.38 kB
JavaScript
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