mirror of https://github.com/kurisufriend/0x40-web
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
1.8 KiB
64 lines
1.8 KiB
/// wrapper for pako (https://github.com/nodeca/pako)
|
|
|
|
/* globals pako */
|
|
(function(global) {
|
|
"use strict";
|
|
|
|
function Codec(isDeflater, options) {
|
|
var newOptions = { raw: true, chunkSize: 1024 * 1024 };
|
|
if (options && typeof options.level === 'number')
|
|
newOptions.level = options.level;
|
|
this._backEnd = isDeflater?
|
|
new pako.Deflate(newOptions) :
|
|
new pako.Inflate(newOptions);
|
|
this._chunks = [];
|
|
this._dataLength = 0;
|
|
this._backEnd.onData = this._onData.bind(this);
|
|
}
|
|
Codec.prototype._onData = function _onData(chunk) {
|
|
this._chunks.push(chunk);
|
|
this._dataLength += chunk.length;
|
|
};
|
|
Codec.prototype._fetchData = function _fetchData() {
|
|
var be = this._backEnd;
|
|
if (be.err !== 0)
|
|
throw new Error(be.msg);
|
|
var chunks = this._chunks;
|
|
var data;
|
|
if (chunks.length === 1)
|
|
data = chunks[0];
|
|
else if (chunks.length > 1) {
|
|
data = new Uint8Array(this._dataLength);
|
|
for (var i = 0, n = chunks.length, off = 0; i < n; i++) {
|
|
var chunk = chunks[i];
|
|
data.set(chunk, off);
|
|
off += chunk.length;
|
|
}
|
|
}
|
|
chunks.length = 0;
|
|
this._dataLength = 0;
|
|
return data;
|
|
};
|
|
Codec.prototype.append = function append(bytes, onprogress) {
|
|
this._backEnd.push(bytes, false);
|
|
return this._fetchData();
|
|
};
|
|
Codec.prototype.flush = function flush() {
|
|
this._backEnd.push(new Uint8Array(0), true);
|
|
return this._fetchData();
|
|
};
|
|
|
|
function Deflater(options) {
|
|
Codec.call(this, true, options);
|
|
}
|
|
Deflater.prototype = Object.create(Codec.prototype);
|
|
function Inflater() {
|
|
Codec.call(this, false);
|
|
}
|
|
Inflater.prototype = Object.create(Codec.prototype);
|
|
|
|
// 'zip' may not be defined in z-worker and some tests
|
|
var env = global.zip || global;
|
|
env.Deflater = env._pako_Deflater = Deflater;
|
|
env.Inflater = env._pako_Inflater = Inflater;
|
|
})(this); |