WARNING: This library is highly experimental, and may introduce breaking changes.
This is a 7z archive decompressor, written in Rust. The code is designed to be portable:
- Run natively as a binary
- Run as WebAssembly in a web browser or Node.js
Supported decompression algorithms:
- LZMA
- LZMA2
Features of 7z that are not supported:
- Archive compression
- CRC validation
- Other decompression algorithms
The library is called "shoeset" because that's approximately how you pronounce "7z" in Norwegian.
Installation:
npm install @eirslett/shoeset
From Node.js:
import * as shoeset from '@eirslett/shoeset';
import fs from 'fs';
const archive = fs.readFileSync('foobar.7z');
const decompressed = shoeset.default.decompress(archive);
for (const file of decompressed.files) {
console.log('name', file.name);
console.log('data', file.data);
// If the file is UTF-8 encoded, we can log it as a string:
console.log(new TextDecoder().decode(file.data));
}
From the browser:
const js = import(`./node_modules/@eirslett/shoeset/shoeset.js`);
fetch('/foobar.7z').then(async response => {
const data = await response.arrayBuffer();
const mod = await js;
const result = mod.decompress(new Uint8Array(data));
for (const file of result.files) {
console.log('name', file.name);
console.log('data', file.data);
// If the file is UTF-8 encoded, we can log it as a string:
console.log(new TextDecoder().decode(file.data));
}
});
- Setup rust on your development machine, for example with rustup.
- git clone this repository
- Run
cargo buildto build the native binary, or./build-npm.shto build the npm package - Run
cargo testto run the unit tests, or./test.shto test the npm package
./build-npm.shcd pkgnpm publish --access public
- Run
./build-npm.sh cd pkgnpm linkcd ../sitenpm link @eirslett/shoesetnode test-nodejs.mjsto check if the code is working
Just send me a pull request. I cannot guarantee that I have time to review it, if there are many PRs.