Streaming ZIP extraction helper and CLI powered by fflate.
Default extraction uses a streaming path, so large ZIP files do not need to be expanded in memory first. The package also ships with a small CLI progress renderer via progress-light.js.
- Stream-first extraction for lower memory usage
- Legacy memory mode for compatibility
- CLI with verbose logging or single-line progress output
- Callback-based API for entry-level progress reporting
- CommonJS package with bundled type definitions
npm i @jeffy-g/unzipIf you want to use the CLI globally:
npm i -g @jeffy-g/unzipThe command name is ffunzip.
ffunzip [-v] [-p|-progress] [-d <dir>] [-m|-mode <stream|memory>] <zip-file> [more.zip ...]| Option | Description |
|---|---|
-d <dir> |
Extraction target directory. Default: ./output |
-v |
Print verbose entry logs |
-p, -progress |
Show the bundled single-line progress renderer. Implies verbose logging |
-m, -mode <stream|memory> |
Extraction mode. Default: stream |
-h, -help |
Print help |
- Long options use a single dash because the CLI is parsed by
tin-args streamis the default and recommended modememoryuses the previous all-at-once extraction path
ffunzip archive.zip
ffunzip -d ./output bundle.zip
ffunzip -p -mode memory huge.zip
ffunzip -v first.zip second.zip third.zipconst unzipWithCallback = require("@jeffy-g/unzip");
/** @type {TUnzipCallback} */
const withCallback = (entry) => {
if (typeof entry === "string") {
console.log(`done: ${entry}`);
return;
}
if (entry.state === "info") {
console.log(`scan [${entry.type === "File" ? "f" : "d"}]: ${entry.path}`.gray(14));
return;
}
if (entry.state === "ignore" || entry.type === "Folder") {
return;
}
const color = entry.state === "pending" ? "cyan" : "green";
console.log(`${entry.state} - ${
entry.path[color]
}${entry.state !== "write" ? `, size: ${entry.size?.toLocaleString().blue}` : ""}`);
};
unzipWithCallback("archive.zip", "./output", withCallback);
// same as unzipWithCallback.stream(...)
unzipWithCallback.memory("archive.zip", "./output", withCallback);
unzipWithCallback.legacy("archive.zip", "./output", withCallback);| State | Meaning |
|---|---|
info |
Entry discovered while scanning the ZIP |
pending |
File extraction is about to start |
write |
File extraction finished |
ignore |
Directory entry was handled without file output |
unzipWithCallback(...)unzipWithCallback.stream(...)unzipWithCallback.memory(...)unzipWithCallback.legacy(...)unzipWithCallback.version
fflatecolors.tstin-args
MIT