UNPKG

@evan/wasm

Version:
79 lines (78 loc) 2.54 kB
var __defProp = Object.defineProperty; var __markAsModule = (target) => __defProp(target, "__esModule", { value: true }); var __export = (target, all) => { __markAsModule(target); for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; __export(exports, { compress: () => compress, compress_raw: () => compress_raw, decompress: () => decompress, decompress_raw: () => decompress_raw, decompress_raw_with: () => decompress_raw_with, decompress_with: () => decompress_with }); let wasm; { const module2 = new WebAssembly.Module(require('fs').readFileSync(require('path').join(__dirname, '../../src/lz4/lz4.wasm'))); const instance = new WebAssembly.Instance(module2); wasm = instance.exports; } class mem { static length() { return wasm.wlen(); } static alloc(size) { return wasm.walloc(size); } static free(ptr, size) { return wasm.wfree(ptr, size); } static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); } static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); } static copy_and_free(ptr, size) { let slice = mem.u8(ptr, size).slice(); return wasm.wfree(ptr, size), slice; } } function decompress(buffer) { return decompress_with(buffer, (x) => x.slice()); } function decompress_raw(size, buffer) { return decompress_raw_with(size, buffer, (x) => x.slice()); } function compress(buffer) { const ptr = mem.alloc(buffer.length); mem.u8(ptr, buffer.length).set(buffer); return mem.copy_and_free(wasm.compress(ptr, buffer.length), mem.length()); } function compress_raw(buffer) { const ptr = mem.alloc(buffer.length); mem.u8(ptr, buffer.length).set(buffer); return mem.copy_and_free(wasm.compress_raw(ptr, buffer.length), mem.length()); } function decompress_with(buffer, transform) { const ptr = mem.alloc(buffer.length); mem.u8(ptr, buffer.length).set(buffer); const x = wasm.decompress(ptr, buffer.length); if (x === 0) throw new Error("lz4: failed to decompress"); const u8 = mem.u8(x, mem.length()); const value = transform(u8); return mem.free(x, u8.length), value; } function decompress_raw_with(size, buffer, transform) { const ptr = mem.alloc(buffer.length); mem.u8(ptr, buffer.length).set(buffer); const x = wasm.decompress_raw(size, ptr, buffer.length); if (x === 0) throw new Error("lz4: failed to decompress (raw)"); const u8 = mem.u8(x, mem.length()); const value = transform(u8); return mem.free(x, u8.length), value; }