Awesome
zstddec
ZSTD (Zstandard) decoder for Web and Node.js, using WebAssembly.
Installation
npm install --save zstddec
API
import { ZSTDDecoder } from 'zstddec';
const decoder = new ZSTDDecoder();
await decoder.init();
const decompressedArray = decoder.decode( compressedArray, uncompressedSize );
Limitations: The decoder may fail with the error
wasm function signature contains illegal type
when theuncompressedSize
is not known in advance and given to thedecode()
method. This is presumably a bug in the WASM bindings, which I am not yet sure how to fix.
Contributing
To build the project locally, run:
npm install
npm run dist
To test changes:
npm test
Building from source
Compiled from https://github.com/facebook/zstd/tree/dev/contrib/single_file_libs, with the following steps:
./combine.sh -r ../../lib -o zstddeclib.c zstddeclib-in.c
emcc zstddeclib.c -Oz -s EXPORTED_FUNCTIONS="['_ZSTD_decompress', '_ZSTD_findDecompressedSize', '_ZSTD_isError', '_malloc', '_free']" -s ALLOW_MEMORY_GROWTH=1 -s MALLOC=emmalloc -o zstddec.wasm
base64 zstddec.wasm > zstddec.txt
The base64 string written to zstddec.txt
is embedded as the wasm
variable at the bottom
of the source file. The rest of the file is written by hand, in order to avoid an additional JS
wrapper generated by Emscripten.
License
JavaScript wrapper is provided under the MIT License, and the WASM ZSTD decoder is provided by Facebook under the BSD 3-Clause License.