UNPKG

igir

Version:

🕹 A zero-setup ROM collection manager that sorts, filters, extracts or archives, patches, and reports on collections of any size on any OS.

83 lines (82 loc) • 1.96 kB
import stream from "node:stream"; import zlib from "../../zlib-1.1.3/index.js"; class ZlibCompressTransform extends stream.Transform { deflater = new zlib.Deflater(9); deflaterEnded = false; constructor() { super(); this.on("error", () => { this.cleanup(); }); this.on("close", () => { this.cleanup(); }); } /** * Deflate the chunk and emit the result. */ _transform(chunk, _encoding, callback) { try { if (this.deflaterEnded) { callback(new Error("cannot compress after the deflater has been ended")); return; } const compressedChunk = this.deflater.compressChunk(chunk); if (compressedChunk.length > 0) { this.push(compressedChunk); } callback(); } catch (error) { this.cleanup(); callback(error instanceof Error ? error : new Error(String(error))); } } /** * Close the zlib deflater when the stream ends. */ _flush(callback) { try { this.finalizeDeflater(); callback(); } catch (error) { callback(error instanceof Error ? error : new Error(String(error))); } } /** * Clean up resources when stream.destroy() is called. */ _destroy(err, callback) { try { this.cleanup(); callback(err); } catch (cleanupError) { callback(cleanupError instanceof Error ? cleanupError : new Error(String(cleanupError))); } } /** * Clean up method to be called when the stream ends. */ cleanup() { try { this.finalizeDeflater(); } catch { } } /** * Finalize the deflater and emit the final output. */ finalizeDeflater() { if (this.deflaterEnded) { return; } this.deflaterEnded = true; const finalChunk = this.deflater.end(); if (finalChunk.length > 0) { this.push(finalChunk); } } } export { ZlibCompressTransform as default }; //# sourceMappingURL=zlibDeflateTransform.js.map