0.2.2 • Published 2 years ago

@toneb/cszip v0.2.2

Weekly downloads
-
License
MIT
Repository
github
Last release
2 years ago

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>;
}

Attributions