@thewtex/zstddec
v0.2.1
Published
ZSTD (Zstandard) decoder for Web and Node.js, using WebAssembly
Downloads
4,560
Readme
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/build/single_file_libs, with the following steps:
./create_single_file_decoder.sh
Note The current build is based on zstd v1.5.0. The binary sized increased following this version.
emcc zstddeclib.c -s EXPORTED_FUNCTIONS="['_ZSTD_decompress', '_ZSTD_findDecompressedSize', '_ZSTD_isError', '_malloc', '_free']" -Wl,--no-entry -s WASM=1 -Oz -g0 -flto -s ALLOW_MEMORY_GROWTH=1 -s FILESYSTEM=0 -s STANDALONE_WASM=1 -DNDEBUG=1 -s PURE_WASI=0 -o zstddec.wasm
base64 -w 0 zstddec.wasm > zstddec.txt
Note The
-w 0
argument is only for thebase64
shipped on Linux systems -- on macOS this should be omitted.
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.