# WASM ZIP STREAM
A stream style zip compressor running in browser.
## build
wasm-pack build --release --target web
## Usage
This library allows users to compress a lot of files into a very big zip file and download it locally. An another library, `StreamSaver.js`,
is required as the runtime dependency of this library, it is because `StreamSaver.js` can produce the required `WritableStreamDefaultWriter`
that will be used when creating the file writer.
`StreamSaver.js` can be found on `https://github.com/jimmywarting/StreamSaver.js`.
The presence of `StreamSaver.js` also means that you will need a HTTPS environment.
### initialize_context() and Handles
The exported function `initialize_context()` will return a `Handles` object, which has some methods you can use:
- `scan` accepts an array of `FileSystemEntry`s, which you can get from the `dataTransfer` property in `DargEvent`.
- `compress` accepts a file name and a compression level, this method will create a writer, compress scanned files into a zip file stream,
and use that writer to write the stream to user's file system.
- `register_scan_progress` accepts a callback like `(number_of_scanned_entries: number) => {}` for each encountered file.
- `register_compress_progress` accepts a callback like `(number_of_compressed_files: number, number_of_all_files: number) => {}`.
- `register_average_speed` accepts a callback like `(total_bytes_written: number, total_time_elapsed: number) => {}`.
- `register_current_speed` accepts a callback like `(delta_bytes_written: number, delta_time_elapsed: number) => {}`.
- `register_current_file` accepts a callback like `(path: string) => {}`.
For detailed description please refer to docs.rs.
## Example
A working example could be found [here](https://wasm-zip-stream-example.saya.pw), you can inspect files using devtool or find files under the `example` folder in github repo.