UNPKG

@push.rocks/webstream

Version:

A cross-platform streaming package designed for node and web environments.

102 lines 8.56 kB
import * as plugins from './plugins.js'; export class WebDuplexStream extends TransformStream { static fromUInt8Array(uint8Array) { const stream = new WebDuplexStream({ writeFunction: async (chunk, { push }) => { push(chunk); // Directly push the chunk as is return null; } }); const writer = stream.writable.getWriter(); writer.write(uint8Array).then(() => writer.close()); return stream; } constructor(optionsArg) { super({ async transform(chunk, controller) { // Transformation logic remains unchanged if (optionsArg?.writeFunction) { const tools = { truncate: () => controller.terminate(), push: (pushArg) => controller.enqueue(pushArg), }; optionsArg.writeFunction(chunk, tools) .then(writeReturnChunk => { // the write return chunk is optional // just in case the write function returns something other than void. if (writeReturnChunk) { controller.enqueue(writeReturnChunk); } }) .catch(err => controller.error(err)); } else { controller.error(new Error('No write function provided')); } }, async flush(controller) { // Flush logic remains unchanged if (optionsArg?.finalFunction) { const tools = { truncate: () => controller.terminate(), push: (pipeObject) => controller.enqueue(pipeObject), }; optionsArg.finalFunction(tools) .then(finalChunk => { if (finalChunk) { controller.enqueue(finalChunk); } }) .catch(err => controller.error(err)) .finally(() => controller.terminate()); } else { controller.terminate(); } } }); this.options = optionsArg; } // Method to create a custom readable stream that integrates the readFunction // readFunction is executed whenever the stream is being read from and nothing is enqueued getCustomReadableStream() { const readableStream = this.readable; const options = this.options; const customReadable = new ReadableStream({ async pull(controller) { const reader = readableStream.getReader(); // Check the current state of the original stream const { value, done } = await reader.read(); reader.releaseLock(); if (done) { // If the original stream is done, close the custom readable stream controller.close(); } else { if (value) { // If there is data in the original stream, enqueue it and do not execute the readFunction controller.enqueue(value); } else if (options.readFunction) { // If the original stream is empty, execute the readFunction and read again await options.readFunction({ done: () => controller.close(), write: (writeArg) => controller.enqueue(writeArg), }); const newReader = readableStream.getReader(); const { value: newValue, done: newDone } = await newReader.read(); newReader.releaseLock(); if (newDone) { controller.close(); } else { controller.enqueue(newValue); } } } } }); return customReadable; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy53ZWJkdXBsZXhzdHJlYW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9jbGFzc2VzLndlYmR1cGxleHN0cmVhbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQThDeEMsTUFBTSxPQUFPLGVBQTZDLFNBQVEsZUFBZ0M7SUFDaEcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxVQUFzQjtRQUMxQyxNQUFNLE1BQU0sR0FBRyxJQUFJLGVBQWUsQ0FBeUI7WUFDekQsYUFBYSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFO2dCQUN2QyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxnQ0FBZ0M7Z0JBQzdDLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztTQUNGLENBQUMsQ0FBQztRQUVILE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDM0MsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFFcEQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUtELFlBQVksVUFBbUQ7UUFDN0QsS0FBSyxDQUFDO1lBQ0osS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsVUFBVTtnQkFDL0IseUNBQXlDO2dCQUN6QyxJQUFJLFVBQVUsRUFBRSxhQUFhLEVBQUUsQ0FBQztvQkFDOUIsTUFBTSxLQUFLLEdBQXVDO3dCQUNoRCxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRTt3QkFDdEMsSUFBSSxFQUFFLENBQUMsT0FBZ0IsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7cUJBQ3hELENBQUM7b0JBRUYsVUFB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