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/simd.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;
}
