| import { inflateInit, inflate, inflateReset } from "../vendor/pako/lib/zlib/inflate.js"; |
| import ZStream from "../vendor/pako/lib/zlib/zstream.js"; |
| |
| export default class Inflate { |
| constructor() { |
| this.strm = new ZStream(); |
| this.chunkSize = 1024 * 10 * 10; |
| this.strm.output = new Uint8Array(this.chunkSize); |
| this.windowBits = 5; |
| |
| inflateInit(this.strm, this.windowBits); |
| } |
| |
| inflate(data, flush, expected) { |
| this.strm.input = data; |
| this.strm.avail_in = this.strm.input.length; |
| this.strm.next_in = 0; |
| this.strm.next_out = 0; |
| |
| // resize our output buffer if it's too small |
| // (we could just use multiple chunks, but that would cause an extra |
| // allocation each time to flatten the chunks) |
| if (expected > this.chunkSize) { |
| this.chunkSize = expected; |
| this.strm.output = new Uint8Array(this.chunkSize); |
| } |
| |
| this.strm.avail_out = this.chunkSize; |
| |
| inflate(this.strm, flush); |
| |
| return new Uint8Array(this.strm.output.buffer, 0, this.strm.next_out); |
| } |
| |
| reset() { |
| inflateReset(this.strm); |
| } |
| } |