🏡 index : cold-air-networks/mirror-jetstream.git

// zlib-based  utility for use in shells where CompressionStream and
// DecompressionStream are not available.

function module() {
  "use strict";

  let zlibPromise = null;
  let zlibModule = null;

  async function initialize() {
    if (zlibPromise) {
      zlibModule = await zlibPromise;
      return zlibModule;
    }
    load('wasm/zlib/build/zlib.js');
    zlibPromise = setupModule({
      wasmBinary: new Int8Array(read('wasm/zlib/build/zlib.wasm', "binary")),
    });
    zlibModule = await zlibPromise;
    return zlibModule;
  }

  function decompress(bytes) {
    zlibModule.FS.writeFile('in', bytes);
    const inputzStr = zlibModule.stringToNewUTF8('in');
    const inputzoutStr = zlibModule.stringToNewUTF8('out');
    if (zlibModule._decompressFile(inputzStr, inputzoutStr) !== 0) {
      throw new Error();
    }
    const output = zlibModule.FS.readFile('out');
    zlibModule._free(inputzStr);
    zlibModule._free(inputzoutStr);
    return output;
  }

  return {
    initialize: initialize,
    decompress: decompress,
  };
}

globalThis.zlib = module();