@toneb/cszip
v0.2.2
Published
Tiny zip64 (de)compression library for browser, nodejs and deno.
Downloads
74
Maintainers
Readme
cszip
Cszip is tiny, fast, async, and streaming zip library for browser, node.js and deno, designed to handle large zip files.
Features
- Streaming by default. Generate large files on the fly without pre-allocating memory. Based around Web Streams API and Compression Streams API.
- Handles archives larger than 4GB (zip64).
- Async and non-blocking. Compression is done in the background, not blocking the main thread.
- No-dependencies. Runs on any platform supporting web streams (browser, node.js, deno).
- ISO/IEC 21320-1 compatible. Generate and cunsume Office Open XML, OpenDocument Format, EPUB compatible files.
- Tiny.
Usage
Install cszip
:
npm i cszip
Create zip files:
import { ZipWriter } from "@toneb/cszip";
// create output stream (browser)
const fileHandle = await window.showSaveFilePicker();
// create zip file
const zip = new ZipWriter(fileHandle.createWritable());
// stream large file into zip
const entry1 = zip.addEntry("largefile.bin");
const largeFile = await fetch("/largeFile");
await largeFile.pipeTo(entry1);
// add text file via stream writer
const entry2 = zip.addEntry("README");
const entry2writer = entry2.getWriter();
await entry2writer.write(new TextEncoder().encode("Hello, World!"));
await entry2writer.close();
// finalize zip file
await test.close();
API
/**
* The zip file writer.
*/
class ZipWriter {
/**
* Creates new instance of zip writer.
* @param stream The output stream where data will be written.
*/
constructor(stream: WritableStream<BufferSource>);
/**
* Adds new entry to zip file. Returns WritableStream which should be used to write entry data.
* @param name File name.
* @param options Additional options.
*/
async addEntry(name: string, options?: { noCompression?: boolean, dateModified?: Date }): Promise<WritableStream<BufferSource>>;
/**
* Finalizes the file (writes entries) and closes input stream.
*/
async close(): Promise<void>;
}