@push.rocks/smartstream
Version:
A library to simplify the creation and manipulation of Node.js streams, providing utilities for handling transform, duplex, and readable/writable streams effectively in TypeScript.
89 lines • 6.67 kB
JavaScript
import * as plugins from './plugins.js';
export class WebDuplexStream extends TransformStream {
constructor(optionsArg) {
super({
async start(controller) {
// Optionally initialize any state here
},
async transform(chunk, controller) {
if (optionsArg?.writeFunction) {
const tools = {
truncate: () => controller.terminate(),
push: (pushArg) => controller.enqueue(pushArg),
};
try {
const writeReturnChunk = await optionsArg.writeFunction(chunk, tools);
if (writeReturnChunk !== undefined && writeReturnChunk !== null) {
controller.enqueue(writeReturnChunk);
}
}
catch (err) {
controller.error(err);
}
}
else {
// If no writeFunction is provided, pass the chunk through
controller.enqueue(chunk);
}
},
async flush(controller) {
if (optionsArg?.finalFunction) {
const tools = {
truncate: () => controller.terminate(),
push: (pushArg) => controller.enqueue(pushArg),
};
try {
const finalChunk = await optionsArg.finalFunction(tools);
if (finalChunk) {
controller.enqueue(finalChunk);
}
}
catch (err) {
controller.error(err);
}
finally {
controller.terminate();
}
}
else {
controller.terminate();
}
},
});
this.options = optionsArg;
// Start producing data if readFunction is provided
if (this.options.readFunction) {
this._startReading();
}
}
async _startReading() {
const writable = this.writable;
const writer = writable.getWriter();
const tools = {
done: () => writer.close(),
write: async (writeArg) => await writer.write(writeArg),
};
try {
await this.options.readFunction(tools);
}
catch (err) {
writer.abort(err);
}
finally {
writer.releaseLock();
}
}
// Static method example (adjust as needed)
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;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy53ZWJkdXBsZXhzdHJlYW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c193ZWIvY2xhc3Nlcy53ZWJkdXBsZXhzdHJlYW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUEwQ3hDLE1BQU0sT0FBTyxlQUE2QyxTQUFRLGVBQWdDO0lBSWhHLFlBQVksVUFBbUQ7UUFDN0QsS0FBSyxDQUFDO1lBQ0osS0FBSyxDQUFDLEtBQUssQ0FBQyxVQUFVO2dCQUNwQix1Q0FBdUM7WUFDekMsQ0FBQztZQUNELEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLFVBQVU7Z0JBQy9CLElBQUksVUFBVSxFQUFFLGFBQWEsRUFBRSxDQUFDO29CQUM5QixNQUFNLEtBQUssR0FBdUM7d0JBQ2hELFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFO3dCQUN0QyxJQUFJLEVBQUUsQ0FBQyxPQUFnQixFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztxQkFDeEQsQ0FBQztvQkFFRixJQUFJLENBQUM7d0JBQ0gsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLFVBQVUsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO3dCQUN0RSxJQUFJLGdCQUFnQixLQUFLLFNBQVMsSUFBSSxnQkFBZ0IsS0FBSyxJQUFJLEVBQUUsQ0FBQzs0QkFDaEUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO3dCQUN2QyxDQUFDO29CQUNILENBQUM7b0JBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQzt3QkFDYixVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUN4QixDQUFDO2dCQUNILENBQUM7cUJBQU0sQ0FBQztvQkFDTiwwREFBMEQ7b0JBQzFELFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBMkIsQ0FBQyxDQUFDO2dCQUNsRCxDQUFDO1lBQ0gsQ0FBQztZQUNELEtBQUssQ0FBQyxLQUFLLENBQUMsVUFBVTtnQkFDcEIsSUFBSSxVQUFVLEVBQUUsYUFBYSxFQUFFLENBQUM7b0JBQzlCLE1BQU0sS0FBSyxHQUF1Qzt3QkFDaEQsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUU7d0JBQ3RDLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7cUJBQy9DLENBQUM7b0JBRUYsSUFBSSxDQUFDO3dCQUNILE1BQU0sVUFBVSxHQUFHLE1BQU0sVUFBVSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDekQsSUFBSSxVQUFVLEVBQUUsQ0FBQzs0QkFDZixVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO3dCQUNqQyxDQUFDO29CQUNILENBQUM7b0JBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQzt3QkFDYixVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUN4QixDQUFDOzRCQUFTLENBQUM7d0JBQ1QsVUFBVSxDQUFDLFNBQVMsRUFBRSxDQUFDO29CQUN6QixDQUFDO2dCQUNILENBQUM7cUJBQU0sQ0FBQztvQkFDTixVQUFVLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ3pCLENBQUM7WUFDSCxDQUFDO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUM7UUFFMUIsbURBQW1EO1FBQ25ELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdkIsQ0FBQztJQUNILENBQUM7SUFFTyxLQUFLLENBQUMsYUFBYTtRQUN6QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQy9CLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVwQyxNQUFNLEtBQUssR0FBc0M7WUFDL0MsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7WUFDMUIsS0FBSyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLE1BQU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7U0FDeEQsQ0FBQztRQUVGLElBQUksQ0FBQztZQUNILE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekMsQ0FBQztRQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDYixNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLENBQUM7Z0JBQVMsQ0FBQztZQUNULE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN2QixDQUFDO0lBQ0gsQ0FBQztJQUVELDJDQUEyQztJQUMzQyxNQUFNLENBQUMsY0FBYyxDQUFDLFVBQXNCO1FBQzFDLE1BQU0sTUFBTSxHQUFHLElBQUksZUFBZSxDQUF5QjtZQUN6RCxhQUFhLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUU7Z0JBQ3ZDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGdDQUFnQztnQkFDN0MsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUMzQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUVwRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0NBQ0YifQ==