diff --git a/public/scripts/jszip.js b/public/scripts/jszip.js deleted file mode 100644 index 7c7977b..0000000 --- a/public/scripts/jszip.js +++ /dev/null @@ -1,12901 +0,0 @@ -/*! - -JSZip v3.10.1 - A JavaScript class for generating and reading zip files -<http://stuartk.com/jszip> - -(c) 2009-2016 Stuart Knightley <stuart [at] stuartk.com> -Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/main/LICENSE.markdown. - -JSZip uses the library pako released under the MIT license : -https://github.com/nodeca/pako/blob/main/LICENSE -*/ - -(function (f) { - if (typeof exports === "object" && typeof module !== "undefined") { - module.exports = f(); - } else if (typeof define === "function" && define.amd) { - define([], f); - } else { - var g; - if (typeof window !== "undefined") { - g = window; - } else if (typeof global !== "undefined") { - g = global; - } else if (typeof self !== "undefined") { - g = self; - } else { - g = this; - } - g.JSZip = f(); - } -})(function () { - var define, module, exports; - return (function e(t, n, r) { - function s(o, u) { - if (!n[o]) { - if (!t[o]) { - var a = typeof require == "function" && require; - if (!u && a) return a(o, !0); - if (i) return i(o, !0); - var f = new Error("Cannot find module '" + o + "'"); - throw ((f.code = "MODULE_NOT_FOUND"), f); - } - var l = (n[o] = { exports: {} }); - t[o][0].call( - l.exports, - function (e) { - var n = t[o][1][e]; - return s(n ? n : e); - }, - l, - l.exports, - e, - t, - n, - r, - ); - } - return n[o].exports; - } - var i = typeof require == "function" && require; - for (var o = 0; o < r.length; o++) s(r[o]); - return s; - })( - { - 1: [ - function (require, module, exports) { - "use strict"; - var utils = require("./utils"); - var support = require("./support"); - // private property - var _keyStr = - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; - - // public method for encoding - exports.encode = function (input) { - var output = []; - var chr1, chr2, chr3, enc1, enc2, enc3, enc4; - var i = 0, - len = input.length, - remainingBytes = len; - - var isArray = utils.getTypeOf(input) !== "string"; - while (i < input.length) { - remainingBytes = len - i; - - if (!isArray) { - chr1 = input.charCodeAt(i++); - chr2 = i < len ? input.charCodeAt(i++) : 0; - chr3 = i < len ? input.charCodeAt(i++) : 0; - } else { - chr1 = input[i++]; - chr2 = i < len ? input[i++] : 0; - chr3 = i < len ? input[i++] : 0; - } - - enc1 = chr1 >> 2; - enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); - enc3 = remainingBytes > 1 ? ((chr2 & 15) << 2) | (chr3 >> 6) : 64; - enc4 = remainingBytes > 2 ? chr3 & 63 : 64; - - output.push( - _keyStr.charAt(enc1) + - _keyStr.charAt(enc2) + - _keyStr.charAt(enc3) + - _keyStr.charAt(enc4), - ); - } - - return output.join(""); - }; - - // public method for decoding - exports.decode = function (input) { - var chr1, chr2, chr3; - var enc1, enc2, enc3, enc4; - var i = 0, - resultIndex = 0; - - var dataUrlPrefix = "data:"; - - if (input.substr(0, dataUrlPrefix.length) === dataUrlPrefix) { - // This is a common error: people give a data url - // (data:image/png;base64,iVBOR...) with a {base64: true} and - // wonders why things don't work. - // We can detect that the string input looks like a data url but we - // *can't* be sure it is one: removing everything up to the comma would - // be too dangerous. - throw new Error( - "Invalid base64 input, it looks like a data url.", - ); - } - - input = input.replace(/[^A-Za-z0-9+/=]/g, ""); - - var totalLength = (input.length * 3) / 4; - if (input.charAt(input.length - 1) === _keyStr.charAt(64)) { - totalLength--; - } - if (input.charAt(input.length - 2) === _keyStr.charAt(64)) { - totalLength--; - } - if (totalLength % 1 !== 0) { - // totalLength is not an integer, the length does not match a valid - // base64 content. That can happen if: - // - the input is not a base64 content - // - the input is *almost* a base64 content, with a extra chars at the - // beginning or at the end - // - the input uses a base64 variant (base64url for example) - throw new Error("Invalid base64 input, bad content length."); - } - var output; - if (support.uint8array) { - output = new Uint8Array(totalLength | 0); - } else { - output = new Array(totalLength | 0); - } - - while (i < input.length) { - enc1 = _keyStr.indexOf(input.charAt(i++)); - enc2 = _keyStr.indexOf(input.charAt(i++)); - enc3 = _keyStr.indexOf(input.charAt(i++)); - enc4 = _keyStr.indexOf(input.charAt(i++)); - - chr1 = (enc1 << 2) | (enc2 >> 4); - chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); - chr3 = ((enc3 & 3) << 6) | enc4; - - output[resultIndex++] = chr1; - - if (enc3 !== 64) { - output[resultIndex++] = chr2; - } - if (enc4 !== 64) { - output[resultIndex++] = chr3; - } - } - - return output; - }; - }, - { "./support": 30, "./utils": 32 }, - ], - 2: [ - function (require, module, exports) { - "use strict"; - - var external = require("./external"); - var DataWorker = require("./stream/DataWorker"); - var Crc32Probe = require("./stream/Crc32Probe"); - var DataLengthProbe = require("./stream/DataLengthProbe"); - - /** - * Represent a compressed object, with everything needed to decompress it. - * @constructor - * @param {number} compressedSize the size of the data compressed. - * @param {number} uncompressedSize the size of the data after decompression. - * @param {number} crc32 the crc32 of the decompressed file. - * @param {object} compression the type of compression, see lib/compressions.js. - * @param {String|ArrayBuffer|Uint8Array|Buffer} data the compressed data. - */ - function CompressedObject( - compressedSize, - uncompressedSize, - crc32, - compression, - data, - ) { - this.compressedSize = compressedSize; - this.uncompressedSize = uncompressedSize; - this.crc32 = crc32; - this.compression = compression; - this.compressedContent = data; - } - - CompressedObject.prototype = { - /** - * Create a worker to get the uncompressed content. - * @return {GenericWorker} the worker. - */ - getContentWorker: function () { - var worker = new DataWorker( - external.Promise.resolve(this.compressedContent), - ) - .pipe(this.compression.uncompressWorker()) - .pipe(new DataLengthProbe("data_length")); - - var that = this; - worker.on("end", function () { - if (this.streamInfo["data_length"] !== that.uncompressedSize) { - throw new Error("Bug : uncompressed data size mismatch"); - } - }); - return worker; - }, - /** - * Create a worker to get the compressed content. - * @return {GenericWorker} the worker. - */ - getCompressedWorker: function () { - return new DataWorker( - external.Promise.resolve(this.compressedContent), - ) - .withStreamInfo("compressedSize", this.compressedSize) - .withStreamInfo("uncompressedSize", this.uncompressedSize) - .withStreamInfo("crc32", this.crc32) - .withStreamInfo("compression", this.compression); - }, - }; - - /** - * Chain the given worker with other workers to compress the content with the - * given compression. - * @param {GenericWorker} uncompressedWorker the worker to pipe. - * @param {Object} compression the compression object. - * @param {Object} compressionOptions the options to use when compressing. - * @return {GenericWorker} the new worker compressing the content. - */ - CompressedObject.createWorkerFrom = function ( - uncompressedWorker, - compression, - compressionOptions, - ) { - return uncompressedWorker - .pipe(new Crc32Probe()) - .pipe(new DataLengthProbe("uncompressedSize")) - .pipe(compression.compressWorker(compressionOptions)) - .pipe(new DataLengthProbe("compressedSize")) - .withStreamInfo("compression", compression); - }; - - module.exports = CompressedObject; - }, - { - "./external": 6, - "./stream/Crc32Probe": 25, - "./stream/DataLengthProbe": 26, - "./stream/DataWorker": 27, - }, - ], - 3: [ - function (require, module, exports) { - "use strict"; - - var GenericWorker = require("./stream/GenericWorker"); - - exports.STORE = { - magic: "\x00\x00", - compressWorker: function () { - return new GenericWorker("STORE compression"); - }, - uncompressWorker: function () { - return new GenericWorker("STORE decompression"); - }, - }; - exports.DEFLATE = require("./flate"); - }, - { "./flate": 7, "./stream/GenericWorker": 28 }, - ], - 4: [ - function (require, module, exports) { - "use strict"; - - var utils = require("./utils"); - - /** - * The following functions come from pako, from pako/lib/zlib/crc32.js - * released under the MIT license, see pako https://github.com/nodeca/pako/ - */ - - // Use ordinary array, since untyped makes no boost here - function makeTable() { - var c, - table = []; - - for (var n = 0; n < 256; n++) { - c = n; - for (var k = 0; k < 8; k++) { - c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1; - } - table[n] = c; - } - - return table; - } - - // Create table on load. Just 255 signed longs. Not a problem. - var crcTable = makeTable(); - - function crc32(crc, buf, len, pos) { - var t = crcTable, - end = pos + len; - - crc = crc ^ -1; - - for (var i = pos; i < end; i++) { - crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xff]; - } - - return crc ^ -1; // >>> 0; - } - - // That's all for the pako functions. - - /** - * Compute the crc32 of a string. - * This is almost the same as the function crc32, but for strings. Using the - * same function for the two use cases leads to horrible performances. - * @param {Number} crc the starting value of the crc. - * @param {String} str the string to use. - * @param {Number} len the length of the string. - * @param {Number} pos the starting position for the crc32 computation. - * @return {Number} the computed crc32. - */ - function crc32str(crc, str, len, pos) { - var t = crcTable, - end = pos + len; - - crc = crc ^ -1; - - for (var i = pos; i < end; i++) { - crc = (crc >>> 8) ^ t[(crc ^ str.charCodeAt(i)) & 0xff]; - } - - return crc ^ -1; // >>> 0; - } - - module.exports = function crc32wrapper(input, crc) { - if (typeof input === "undefined" || !input.length) { - return 0; - } - - var isArray = utils.getTypeOf(input) !== "string"; - - if (isArray) { - return crc32(crc | 0, input, input.length, 0); - } else { - return crc32str(crc | 0, input, input.length, 0); - } - }; - }, - { "./utils": 32 }, - ], - 5: [ - function (require, module, exports) { - "use strict"; - exports.base64 = false; - exports.binary = false; - exports.dir = false; - exports.createFolders = true; - exports.date = null; - exports.compression = null; - exports.compressionOptions = null; - exports.comment = null; - exports.unixPermissions = null; - exports.dosPermissions = null; - }, - {}, - ], - 6: [ - function (require, module, exports) { - "use strict"; - - // load the global object first: - // - it should be better integrated in the system (unhandledRejection in node) - // - the environment may have a custom Promise implementation (see zone.js) - var ES6Promise = null; - if (typeof Promise !== "undefined") { - ES6Promise = Promise; - } else { - ES6Promise = require("lie"); - } - - /** - * Let the user use/change some implementations. - */ - module.exports = { - Promise: ES6Promise, - }; - }, - { lie: 37 }, - ], - 7: [ - function (require, module, exports) { - "use strict"; - var USE_TYPEDARRAY = - typeof Uint8Array !== "undefined" && - typeof Uint16Array !== "undefined" && - typeof Uint32Array !== "undefined"; - - var pako = require("pako"); - var utils = require("./utils"); - var GenericWorker = require("./stream/GenericWorker"); - - var ARRAY_TYPE = USE_TYPEDARRAY ? "uint8array" : "array"; - - exports.magic = "\x08\x00"; - - /** - * Create a worker that uses pako to inflate/deflate. - * @constructor - * @param {String} action the name of the pako function to call : either "Deflate" or "Inflate". - * @param {Object} options the options to use when (de)compressing. - */ - function FlateWorker(action, options) { - GenericWorker.call(this, "FlateWorker/" + action); - - this._pako = null; - this._pakoAction = action; - this._pakoOptions = options; - // the `meta` object from the last chunk received - // this allow this worker to pass around metadata - this.meta = {}; - } - - utils.inherits(FlateWorker, GenericWorker); - - /** - * @see GenericWorker.processChunk - */ - FlateWorker.prototype.processChunk = function (chunk) { - this.meta = chunk.meta; - if (this._pako === null) { - this._createPako(); - } - this._pako.push(utils.transformTo(ARRAY_TYPE, chunk.data), false); - }; - - /** - * @see GenericWorker.flush - */ - FlateWorker.prototype.flush = function () { - GenericWorker.prototype.flush.call(this); - if (this._pako === null) { - this._createPako(); - } - this._pako.push([], true); - }; - /** - * @see GenericWorker.cleanUp - */ - FlateWorker.prototype.cleanUp = function () { - GenericWorker.prototype.cleanUp.call(this); - this._pako = null; - }; - - /** - * Create the _pako object. - * TODO: lazy-loading this object isn't the best solution but it's the - * quickest. The best solution is to lazy-load the worker list. See also the - * issue #446. - */ - FlateWorker.prototype._createPako = function () { - this._pako = new pako[this._pakoAction]({ - raw: true, - level: this._pakoOptions.level || -1, // default compression - }); - var self = this; - this._pako.onData = function (data) { - self.push({ - data: data, - meta: self.meta, - }); - }; - }; - - exports.compressWorker = function (compressionOptions) { - return new FlateWorker("Deflate", compressionOptions); - }; - exports.uncompressWorker = function () { - return new FlateWorker("Inflate", {}); - }; - }, - { "./stream/GenericWorker": 28, "./utils": 32, pako: 38 }, - ], - 8: [ - function (require, module, exports) { - "use strict"; - - var utils = require("../utils"); - var GenericWorker = require("../stream/GenericWorker"); - var utf8 = require("../utf8"); - var crc32 = require("../crc32"); - var signature = require("../signature"); - - /** - * Transform an integer into a string in hexadecimal. - * @private - * @param {number} dec the number to convert. - * @param {number} bytes the number of bytes to generate. - * @returns {string} the result. - */ - var decToHex = function (dec, bytes) { - var hex = "", - i; - for (i = 0; i < bytes; i++) { - hex += String.fromCharCode(dec & 0xff); - dec = dec >>> 8; - } - return hex; - }; - - /** - * Generate the UNIX part of the external file attributes. - * @param {Object} unixPermissions the unix permissions or null. - * @param {Boolean} isDir true if the entry is a directory, false otherwise. - * @return {Number} a 32 bit integer. - * - * adapted from http://unix.stackexchange.com/questions/14705/the-zip-formats-external-file-attribute : - * - * TTTTsstrwxrwxrwx0000000000ADVSHR - * ^^^^____________________________ file type, see zipinfo.c (UNX_*) - * ^^^_________________________ setuid, setgid, sticky - * ^^^^^^^^^________________ permissions - * ^^^^^^^^^^______ not used ? - * ^^^^^^ DOS attribute bits : Archive, Directory, Volume label, System file, Hidden, Read only - */ - var generateUnixExternalFileAttr = function (unixPermissions, isDir) { - var result = unixPermissions; - if (!unixPermissions) { - // I can't use octal values in strict mode, hence the hexa. - // 040775 => 0x41fd - // 0100664 => 0x81b4 - result = isDir ? 0x41fd : 0x81b4; - } - return (result & 0xffff) << 16; - }; - - /** - * Generate the DOS part of the external file attributes. - * @param {Object} dosPermissions the dos permissions or null. - * @param {Boolean} isDir true if the entry is a directory, false otherwise. - * @return {Number} a 32 bit integer. - * - * Bit 0 Read-Only - * Bit 1 Hidden - * Bit 2 System - * Bit 3 Volume Label - * Bit 4 Directory - * Bit 5 Archive - */ - var generateDosExternalFileAttr = function (dosPermissions) { - // the dir flag is already set for compatibility - return (dosPermissions || 0) & 0x3f; - }; - - /** - * Generate the various parts used in the construction of the final zip file. - * @param {Object} streamInfo the hash with information about the compressed file. - * @param {Boolean} streamedContent is the content streamed ? - * @param {Boolean} streamingEnded is the stream finished ? - * @param {number} offset the current offset from the start of the zip file. - * @param {String} platform let's pretend we are this platform (change platform dependents fields) - * @param {Function} encodeFileName the function to encode the file name / comment. - * @return {Object} the zip parts. - */ - var generateZipParts = function ( - streamInfo, - streamedContent, - streamingEnded, - offset, - platform, - encodeFileName, - ) { - var file = streamInfo["file"], - compression = streamInfo["compression"], - useCustomEncoding = encodeFileName !== utf8.utf8encode, - encodedFileName = utils.transformTo( - "string", - encodeFileName(file.name), - ), - utfEncodedFileName = utils.transformTo( - "string", - utf8.utf8encode(file.name), - ), - comment = file.comment, - encodedComment = utils.transformTo( - "string", - encodeFileName(comment), - ), - utfEncodedComment = utils.transformTo( - "string", - utf8.utf8encode(comment), - ), - useUTF8ForFileName = - utfEncodedFileName.length !== file.name.length, - useUTF8ForComment = utfEncodedComment.length !== comment.length, - dosTime, - dosDate, - extraFields = "", - unicodePathExtraField = "", - unicodeCommentExtraField = "", - dir = file.dir, - date = file.date; - - var dataInfo = { - crc32: 0, - compressedSize: 0, - uncompressedSize: 0, - }; - - // if the content is streamed, the sizes/crc32 are only available AFTER - // the end of the stream. - if (!streamedContent || streamingEnded) { - dataInfo.crc32 = streamInfo["crc32"]; - dataInfo.compressedSize = streamInfo["compressedSize"]; - dataInfo.uncompressedSize = streamInfo["uncompressedSize"]; - } - - var bitflag = 0; - if (streamedContent) { - // Bit 3: the sizes/crc32 are set to zero in the local header. - // The correct values are put in the data descriptor immediately - // following the compressed data. - bitflag |= 0x0008; - } - if ( - !useCustomEncoding && - (useUTF8ForFileName || useUTF8ForComment) - ) { - // Bit 11: Language encoding flag (EFS). - bitflag |= 0x0800; - } - - var extFileAttr = 0; - var versionMadeBy = 0; - if (dir) { - // dos or unix, we set the dos dir flag - extFileAttr |= 0x00010; - } - if (platform === "UNIX") { - versionMadeBy = 0x031e; // UNIX, version 3.0 - extFileAttr |= generateUnixExternalFileAttr( - file.unixPermissions, - dir, - ); - } else { - // DOS or other, fallback to DOS - versionMadeBy = 0x0014; // DOS, version 2.0 - extFileAttr |= generateDosExternalFileAttr( - file.dosPermissions, - dir, - ); - } - - // date - // @see http://www.delorie.com/djgpp/doc/rbinter/it/52/13.html - // @see http://www.delorie.com/djgpp/doc/rbinter/it/65/16.html - // @see http://www.delorie.com/djgpp/doc/rbinter/it/66/16.html - - dosTime = date.getUTCHours(); - dosTime = dosTime << 6; - dosTime = dosTime | date.getUTCMinutes(); - dosTime = dosTime << 5; - dosTime = dosTime | (date.getUTCSeconds() / 2); - - dosDate = date.getUTCFullYear() - 1980; - dosDate = dosDate << 4; - dosDate = dosDate | (date.getUTCMonth() + 1); - dosDate = dosDate << 5; - dosDate = dosDate | date.getUTCDate(); - - if (useUTF8ForFileName) { - // set the unicode path extra field. unzip needs at least one extra - // field to correctly handle unicode path, so using the path is as good - // as any other information. This could improve the situation with - // other archive managers too. - // This field is usually used without the utf8 flag, with a non - // unicode path in the header (winrar, winzip). This helps (a bit) - // with the messy Windows' default compressed folders feature but - // breaks on p7zip which doesn't seek the unicode path extra field. - // So for now, UTF-8 everywhere ! - unicodePathExtraField = - // Version - decToHex(1, 1) + - // NameCRC32 - decToHex(crc32(encodedFileName), 4) + - // UnicodeName - utfEncodedFileName; - - extraFields += - // Info-ZIP Unicode Path Extra Field - "\x75\x70" + - // size - decToHex(unicodePathExtraField.length, 2) + - // content - unicodePathExtraField; - } - - if (useUTF8ForComment) { - unicodeCommentExtraField = - // Version - decToHex(1, 1) + - // CommentCRC32 - decToHex(crc32(encodedComment), 4) + - // UnicodeName - utfEncodedComment; - - extraFields += - // Info-ZIP Unicode Path Extra Field - "\x75\x63" + - // size - decToHex(unicodeCommentExtraField.length, 2) + - // content - unicodeCommentExtraField; - } - - var header = ""; - - // version needed to extract - header += "\x0A\x00"; - // general purpose bit flag - header += decToHex(bitflag, 2); - // compression method - header += compression.magic; - // last mod file time - header += decToHex(dosTime, 2); - // last mod file date - header += decToHex(dosDate, 2); - // crc-32 - header += decToHex(dataInfo.crc32, 4); - // compressed size - header += decToHex(dataInfo.compressedSize, 4); - // uncompressed size - header += decToHex(dataInfo.uncompressedSize, 4); - // file name length - header += decToHex(encodedFileName.length, 2); - // extra field length - header += decToHex(extraFields.length, 2); - - var fileRecord = - signature.LOCAL_FILE_HEADER + - header + - encodedFileName + - extraFields; - - var dirRecord = - signature.CENTRAL_FILE_HEADER + - // version made by (00: DOS) - decToHex(versionMadeBy, 2) + - // file header (common to file and central directory) - header + - // file comment length - decToHex(encodedComment.length, 2) + - // disk number start - "\x00\x00" + - // internal file attributes TODO - "\x00\x00" + - // external file attributes - decToHex(extFileAttr, 4) + - // relative offset of local header - decToHex(offset, 4) + - // file name - encodedFileName + - // extra field - extraFields + - // file comment - encodedComment; - - return { - fileRecord: fileRecord, - dirRecord: dirRecord, - }; - }; - - /** - * Generate the EOCD record. - * @param {Number} entriesCount the number of entries in the zip file. - * @param {Number} centralDirLength the length (in bytes) of the central dir. - * @param {Number} localDirLength the length (in bytes) of the local dir. - * @param {String} comment the zip file comment as a binary string. - * @param {Function} encodeFileName the function to encode the comment. - * @return {String} the EOCD record. - */ - var generateCentralDirectoryEnd = function ( - entriesCount, - centralDirLength, - localDirLength, - comment, - encodeFileName, - ) { - var dirEnd = ""; - var encodedComment = utils.transformTo( - "string", - encodeFileName(comment), - ); - - // end of central dir signature - dirEnd = - signature.CENTRAL_DIRECTORY_END + - // number of this disk - "\x00\x00" + - // number of the disk with the start of the central directory - "\x00\x00" + - // total number of entries in the central directory on this disk - decToHex(entriesCount, 2) + - // total number of entries in the central directory - decToHex(entriesCount, 2) + - // size of the central directory 4 bytes - decToHex(centralDirLength, 4) + - // offset of start of central directory with respect to the starting disk number - decToHex(localDirLength, 4) + - // .ZIP file comment length - decToHex(encodedComment.length, 2) + - // .ZIP file comment - encodedComment; - - return dirEnd; - }; - - /** - * Generate data descriptors for a file entry. - * @param {Object} streamInfo the hash generated by a worker, containing information - * on the file entry. - * @return {String} the data descriptors. - */ - var generateDataDescriptors = function (streamInfo) { - var descriptor = ""; - descriptor = - signature.DATA_DESCRIPTOR + - // crc-32 4 bytes - decToHex(streamInfo["crc32"], 4) + - // compressed size 4 bytes - decToHex(streamInfo["compressedSize"], 4) + - // uncompressed size 4 bytes - decToHex(streamInfo["uncompressedSize"], 4); - - return descriptor; - }; - - /** - * A worker to concatenate other workers to create a zip file. - * @param {Boolean} streamFiles `true` to stream the content of the files, - * `false` to accumulate it. - * @param {String} comment the comment to use. - * @param {String} platform the platform to use, "UNIX" or "DOS". - * @param {Function} encodeFileName the function to encode file names and comments. - */ - function ZipFileWorker( - streamFiles, - comment, - platform, - encodeFileName, - ) { - GenericWorker.call(this, "ZipFileWorker"); - // The number of bytes written so far. This doesn't count accumulated chunks. - this.bytesWritten = 0; - // The comment of the zip file - this.zipComment = comment; - // The platform "generating" the zip file. - this.zipPlatform = platform; - // the function to encode file names and comments. - this.encodeFileName = encodeFileName; - // Should we stream the content of the files ? - this.streamFiles = streamFiles; - // If `streamFiles` is false, we will need to accumulate the content of the - // files to calculate sizes / crc32 (and write them *before* the content). - // This boolean indicates if we are accumulating chunks (it will change a lot - // during the lifetime of this worker). - this.accumulate = false; - // The buffer receiving chunks when accumulating content. - this.contentBuffer = []; - // The list of generated directory records. - this.dirRecords = []; - // The offset (in bytes) from the beginning of the zip file for the current source. - this.currentSourceOffset = 0; - // The total number of entries in this zip file. - this.entriesCount = 0; - // the name of the file currently being added, null when handling the end of the zip file. - // Used for the emitted metadata. - this.currentFile = null; - - this._sources = []; - } - utils.inherits(ZipFileWorker, GenericWorker); - - /** - * @see GenericWorker.push - */ - ZipFileWorker.prototype.push = function (chunk) { - var currentFilePercent = chunk.meta.percent || 0; - var entriesCount = this.entriesCount; - var remainingFiles = this._sources.length; - - if (this.accumulate) { - this.contentBuffer.push(chunk); - } else { - this.bytesWritten += chunk.data.length; - - GenericWorker.prototype.push.call(this, { - data: chunk.data, - meta: { - currentFile: this.currentFile, - percent: entriesCount - ? (currentFilePercent + - 100 * (entriesCount - remainingFiles - 1)) / - entriesCount - : 100, - }, - }); - } - }; - - /** - * The worker started a new source (an other worker). - * @param {Object} streamInfo the streamInfo object from the new source. - */ - ZipFileWorker.prototype.openedSource = function (streamInfo) { - this.currentSourceOffset = this.bytesWritten; - this.currentFile = streamInfo["file"].name; - - var streamedContent = this.streamFiles && !streamInfo["file"].dir; - - // don't stream folders (because they don't have any content) - if (streamedContent) { - var record = generateZipParts( - streamInfo, - streamedContent, - false, - this.currentSourceOffset, - this.zipPlatform, - this.encodeFileName, - ); - this.push({ - data: record.fileRecord, - meta: { percent: 0 }, - }); - } else { - // we need to wait for the whole file before pushing anything - this.accumulate = true; - } - }; - - /** - * The worker finished a source (an other worker). - * @param {Object} streamInfo the streamInfo object from the finished source. - */ - ZipFileWorker.prototype.closedSource = function (streamInfo) { - this.accumulate = false; - var streamedContent = this.streamFiles && !streamInfo["file"].dir; - var record = generateZipParts( - streamInfo, - streamedContent, - true, - this.currentSourceOffset, - this.zipPlatform, - this.encodeFileName, - ); - - this.dirRecords.push(record.dirRecord); - if (streamedContent) { - // after the streamed file, we put data descriptors - this.push({ - data: generateDataDescriptors(streamInfo), - meta: { percent: 100 }, - }); - } else { - // the content wasn't streamed, we need to push everything now - // first the file record, then the content - this.push({ - data: record.fileRecord, - meta: { percent: 0 }, - }); - while (this.contentBuffer.length) { - this.push(this.contentBuffer.shift()); - } - } - this.currentFile = null; - }; - - /** - * @see GenericWorker.flush - */ - ZipFileWorker.prototype.flush = function () { - var localDirLength = this.bytesWritten; - for (var i = 0; i < this.dirRecords.length; i++) { - this.push({ - data: this.dirRecords[i], - meta: { percent: 100 }, - }); - } - var centralDirLength = this.bytesWritten - localDirLength; - - var dirEnd = generateCentralDirectoryEnd( - this.dirRecords.length, - centralDirLength, - localDirLength, - this.zipComment, - this.encodeFileName, - ); - - this.push({ - data: dirEnd, - meta: { percent: 100 }, - }); - }; - - /** - * Prepare the next source to be read. - */ - ZipFileWorker.prototype.prepareNextSource = function () { - this.previous = this._sources.shift(); - this.openedSource(this.previous.streamInfo); - if (this.isPaused) { - this.previous.pause(); - } else { - this.previous.resume(); - } - }; - - /** - * @see GenericWorker.registerPrevious - */ - ZipFileWorker.prototype.registerPrevious = function (previous) { - this._sources.push(previous); - var self = this; - - previous.on("data", function (chunk) { - self.processChunk(chunk); - }); - previous.on("end", function () { - self.closedSource(self.previous.streamInfo); - if (self._sources.length) { - self.prepareNextSource(); - } else { - self.end(); - } - }); - previous.on("error", function (e) { - self.error(e); - }); - return this; - }; - - /** - * @see GenericWorker.resume - */ - ZipFileWorker.prototype.resume = function () { - if (!GenericWorker.prototype.resume.call(this)) { - return false; - } - - if (!this.previous && this._sources.length) { - this.prepareNextSource(); - return true; - } - if ( - !this.previous && - !this._sources.length && - !this.generatedError - ) { - this.end(); - return true; - } - }; - - /** - * @see GenericWorker.error - */ - ZipFileWorker.prototype.error = function (e) { - var sources = this._sources; - if (!GenericWorker.prototype.error.call(this, e)) { - return false; - } - for (var i = 0; i < sources.length; i++) { - try { - sources[i].error(e); - } catch (e) { - // the `error` exploded, nothing to do - } - } - return true; - }; - - /** - * @see GenericWorker.lock - */ - ZipFileWorker.prototype.lock = function () { - GenericWorker.prototype.lock.call(this); - var sources = this._sources; - for (var i = 0; i < sources.length; i++) { - sources[i].lock(); - } - }; - - module.exports = ZipFileWorker; - }, - { - "../crc32": 4, - "../signature": 23, - "../stream/GenericWorker": 28, - "../utf8": 31, - "../utils": 32, - }, - ], - 9: [ - function (require, module, exports) { - "use strict"; - - var compressions = require("../compressions"); - var ZipFileWorker = require("./ZipFileWorker"); - - /** - * Find the compression to use. - * @param {String} fileCompression the compression defined at the file level, if any. - * @param {String} zipCompression the compression defined at the load() level. - * @return {Object} the compression object to use. - */ - var getCompression = function (fileCompression, zipCompression) { - var compressionName = fileCompression || zipCompression; - var compression = compressions[compressionName]; - if (!compression) { - throw new Error( - compressionName + " is not a valid compression method !", - ); - } - return compression; - }; - - /** - * Create a worker to generate a zip file. - * @param {JSZip} zip the JSZip instance at the right root level. - * @param {Object} options to generate the zip file. - * @param {String} comment the comment to use. - */ - exports.generateWorker = function (zip, options, comment) { - var zipFileWorker = new ZipFileWorker( - options.streamFiles, - comment, - options.platform, - options.encodeFileName, - ); - var entriesCount = 0; - try { - zip.forEach(function (relativePath, file) { - entriesCount++; - var compression = getCompression( - file.options.compression, - options.compression, - ); - var compressionOptions = - file.options.compressionOptions || - options.compressionOptions || - {}; - var dir = file.dir, - date = file.date; - - file - ._compressWorker(compression, compressionOptions) - .withStreamInfo("file", { - name: relativePath, - dir: dir, - date: date, - comment: file.comment || "", - unixPermissions: file.unixPermissions, - dosPermissions: file.dosPermissions, - }) - .pipe(zipFileWorker); - }); - zipFileWorker.entriesCount = entriesCount; - } catch (e) { - zipFileWorker.error(e); - } - - return zipFileWorker; - }; - }, - { "../compressions": 3, "./ZipFileWorker": 8 }, - ], - 10: [ - function (require, module, exports) { - "use strict"; - - /** - * Representation a of zip file in js - * @constructor - */ - function JSZip() { - // if this constructor is used without `new`, it adds `new` before itself: - if (!(this instanceof JSZip)) { - return new JSZip(); - } - - if (arguments.length) { - throw new Error( - "The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide.", - ); - } - - // object containing the files : - // { - // "folder/" : {...}, - // "folder/data.txt" : {...} - // } - // NOTE: we use a null prototype because we do not - // want filenames like "toString" coming from a zip file - // to overwrite methods and attributes in a normal Object. - this.files = Object.create(null); - - this.comment = null; - - // Where we are in the hierarchy - this.root = ""; - this.clone = function () { - var newObj = new JSZip(); - for (var i in this) { - if (typeof this[i] !== "function") { - newObj[i] = this[i]; - } - } - return newObj; - }; - } - JSZip.prototype = require("./object"); - JSZip.prototype.loadAsync = require("./load"); - JSZip.support = require("./support"); - JSZip.defaults = require("./defaults"); - - // TODO find a better way to handle this version, - // a require('package.json').version doesn't work with webpack, see #327 - JSZip.version = "3.10.1"; - - JSZip.loadAsync = function (content, options) { - return new JSZip().loadAsync(content, options); - }; - - JSZip.external = require("./external"); - module.exports = JSZip; - }, - { - "./defaults": 5, - "./external": 6, - "./load": 11, - "./object": 15, - "./support": 30, - }, - ], - 11: [ - function (require, module, exports) { - "use strict"; - var utils = require("./utils"); - var external = require("./external"); - var utf8 = require("./utf8"); - var ZipEntries = require("./zipEntries"); - var Crc32Probe = require("./stream/Crc32Probe"); - var nodejsUtils = require("./nodejsUtils"); - - /** - * Check the CRC32 of an entry. - * @param {ZipEntry} zipEntry the zip entry to check. - * @return {Promise} the result. - */ - function checkEntryCRC32(zipEntry) { - return new external.Promise(function (resolve, reject) { - var worker = zipEntry.decompressed - .getContentWorker() - .pipe(new Crc32Probe()); - worker - .on("error", function (e) { - reject(e); - }) - .on("end", function () { - if (worker.streamInfo.crc32 !== zipEntry.decompressed.crc32) { - reject(new Error("Corrupted zip : CRC32 mismatch")); - } else { - resolve(); - } - }) - .resume(); - }); - } - - module.exports = function (data, options) { - var zip = this; - options = utils.extend(options || {}, { - base64: false, - checkCRC32: false, - optimizedBinaryString: false, - createFolders: false, - decodeFileName: utf8.utf8decode, - }); - - if (nodejsUtils.isNode && nodejsUtils.isStream(data)) { - return external.Promise.reject( - new Error( - "JSZip can't accept a stream when loading a zip file.", - ), - ); - } - - return utils - .prepareContent( - "the loaded zip file", - data, - true, - options.optimizedBinaryString, - options.base64, - ) - .then(function (data) { - var zipEntries = new ZipEntries(options); - zipEntries.load(data); - return zipEntries; - }) - .then(function checkCRC32(zipEntries) { - var promises = [external.Promise.resolve(zipEntries)]; - var files = zipEntries.files; - if (options.checkCRC32) { - for (var i = 0; i < files.length; i++) { - promises.push(checkEntryCRC32(files[i])); - } - } - return external.Promise.all(promises); - }) - .then(function addFiles(results) { - var zipEntries = results.shift(); - var files = zipEntries.files; - for (var i = 0; i < files.length; i++) { - var input = files[i]; - - var unsafeName = input.fileNameStr; - var safeName = utils.resolve(input.fileNameStr); - - zip.file(safeName, input.decompressed, { - binary: true, - optimizedBinaryString: true, - date: input.date, - dir: input.dir, - comment: input.fileCommentStr.length - ? input.fileCommentStr - : null, - unixPermissions: input.unixPermissions, - dosPermissions: input.dosPermissions, - createFolders: options.createFolders, - }); - if (!input.dir) { - zip.file(safeName).unsafeOriginalName = unsafeName; - } - } - if (zipEntries.zipComment.length) { - zip.comment = zipEntries.zipComment; - } - - return zip; - }); - }; - }, - { - "./external": 6, - "./nodejsUtils": 14, - "./stream/Crc32Probe": 25, - "./utf8": 31, - "./utils": 32, - "./zipEntries": 33, - }, - ], - 12: [ - function (require, module, exports) { - "use strict"; - - var utils = require("../utils"); - var GenericWorker = require("../stream/GenericWorker"); - - /** - * A worker that use a nodejs stream as source. - * @constructor - * @param {String} filename the name of the file entry for this stream. - * @param {Readable} stream the nodejs stream. - */ - function NodejsStreamInputAdapter(filename, stream) { - GenericWorker.call( - this, - "Nodejs stream input adapter for " + filename, - ); - this._upstreamEnded = false; - this._bindStream(stream); - } - - utils.inherits(NodejsStreamInputAdapter, GenericWorker); - - /** - * Prepare the stream and bind the callbacks on it. - * Do this ASAP on node 0.10 ! A lazy binding doesn't always work. - * @param {Stream} stream the nodejs stream to use. - */ - NodejsStreamInputAdapter.prototype._bindStream = function (stream) { - var self = this; - this._stream = stream; - stream.pause(); - stream - .on("data", function (chunk) { - self.push({ - data: chunk, - meta: { - percent: 0, - }, - }); - }) - .on("error", function (e) { - if (self.isPaused) { - this.generatedError = e; - } else { - self.error(e); - } - }) - .on("end", function () { - if (self.isPaused) { - self._upstreamEnded = true; - } else { - self.end(); - } - }); - }; - NodejsStreamInputAdapter.prototype.pause = function () { - if (!GenericWorker.prototype.pause.call(this)) { - return false; - } - this._stream.pause(); - return true; - }; - NodejsStreamInputAdapter.prototype.resume = function () { - if (!GenericWorker.prototype.resume.call(this)) { - return false; - } - - if (this._upstreamEnded) { - this.end(); - } else { - this._stream.resume(); - } - - return true; - }; - - module.exports = NodejsStreamInputAdapter; - }, - { "../stream/GenericWorker": 28, "../utils": 32 }, - ], - 13: [ - function (require, module, exports) { - "use strict"; - - var Readable = require("readable-stream").Readable; - - var utils = require("../utils"); - utils.inherits(NodejsStreamOutputAdapter, Readable); - - /** - * A nodejs stream using a worker as source. - * @see the SourceWrapper in http://nodejs.org/api/stream.html - * @constructor - * @param {StreamHelper} helper the helper wrapping the worker - * @param {Object} options the nodejs stream options - * @param {Function} updateCb the update callback. - */ - function NodejsStreamOutputAdapter(helper, options, updateCb) { - Readable.call(this, options); - this._helper = helper; - - var self = this; - helper - .on("data", function (data, meta) { - if (!self.push(data)) { - self._helper.pause(); - } - if (updateCb) { - updateCb(meta); - } - }) - .on("error", function (e) { - self.emit("error", e); - }) - .on("end", function () { - self.push(null); - }); - } - - NodejsStreamOutputAdapter.prototype._read = function () { - this._helper.resume(); - }; - - module.exports = NodejsStreamOutputAdapter; - }, - { "../utils": 32, "readable-stream": 16 }, - ], - 14: [ - function (require, module, exports) { - "use strict"; - - module.exports = { - /** - * True if this is running in Nodejs, will be undefined in a browser. - * In a browser, browserify won't include this file and the whole module - * will be resolved an empty object. - */ - isNode: typeof Buffer !== "undefined", - /** - * Create a new nodejs Buffer from an existing content. - * @param {Object} data the data to pass to the constructor. - * @param {String} encoding the encoding to use. - * @return {Buffer} a new Buffer. - */ - newBufferFrom: function (data, encoding) { - if (Buffer.from && Buffer.from !== Uint8Array.from) { - return Buffer.from(data, encoding); - } else { - if (typeof data === "number") { - // Safeguard for old Node.js versions. On newer versions, - // Buffer.from(number) / Buffer(number, encoding) already throw. - throw new Error('The "data" argument must not be a number'); - } - return new Buffer(data, encoding); - } - }, - /** - * Create a new nodejs Buffer with the specified size. - * @param {Integer} size the size of the buffer. - * @return {Buffer} a new Buffer. - */ - allocBuffer: function (size) { - if (Buffer.alloc) { - return Buffer.alloc(size); - } else { - var buf = new Buffer(size); - buf.fill(0); - return buf; - } - }, - /** - * Find out if an object is a Buffer. - * @param {Object} b the object to test. - * @return {Boolean} true if the object is a Buffer, false otherwise. - */ - isBuffer: function (b) { - return Buffer.isBuffer(b); - }, - - isStream: function (obj) { - return ( - obj && - typeof obj.on === "function" && - typeof obj.pause === "function" && - typeof obj.resume === "function" - ); - }, - }; - }, - {}, - ], - 15: [ - function (require, module, exports) { - "use strict"; - var utf8 = require("./utf8"); - var utils = require("./utils"); - var GenericWorker = require("./stream/GenericWorker"); - var StreamHelper = require("./stream/StreamHelper"); - var defaults = require("./defaults"); - var CompressedObject = require("./compressedObject"); - var ZipObject = require("./zipObject"); - var generate = require("./generate"); - var nodejsUtils = require("./nodejsUtils"); - var NodejsStreamInputAdapter = require("./nodejs/NodejsStreamInputAdapter"); - - /** - * Add a file in the current folder. - * @private - * @param {string} name the name of the file - * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data of the file - * @param {Object} originalOptions the options of the file - * @return {Object} the new file. - */ - var fileAdd = function (name, data, originalOptions) { - // be sure sub folders exist - var dataType = utils.getTypeOf(data), - parent; - - /* - * Correct options. - */ - - var o = utils.extend(originalOptions || {}, defaults); - o.date = o.date || new Date(); - if (o.compression !== null) { - o.compression = o.compression.toUpperCase(); - } - - if (typeof o.unixPermissions === "string") { - o.unixPermissions = parseInt(o.unixPermissions, 8); - } - - // UNX_IFDIR 0040000 see zipinfo.c - if (o.unixPermissions && o.unixPermissions & 0x4000) { - o.dir = true; - } - // Bit 4 Directory - if (o.dosPermissions && o.dosPermissions & 0x0010) { - o.dir = true; - } - - if (o.dir) { - name = forceTrailingSlash(name); - } - if (o.createFolders && (parent = parentFolder(name))) { - folderAdd.call(this, parent, true); - } - - var isUnicodeString = - dataType === "string" && o.binary === false && o.base64 === false; - if ( - !originalOptions || - typeof originalOptions.binary === "undefined" - ) { - o.binary = !isUnicodeString; - } - - var isCompressedEmpty = - data instanceof CompressedObject && data.uncompressedSize === 0; - - if (isCompressedEmpty || o.dir || !data || data.length === 0) { - o.base64 = false; - o.binary = true; - data = ""; - o.compression = "STORE"; - dataType = "string"; - } - - /* - * Convert content to fit. - */ - - var zipObjectContent = null; - if ( - data instanceof CompressedObject || - data instanceof GenericWorker - ) { - zipObjectContent = data; - } else if (nodejsUtils.isNode && nodejsUtils.isStream(data)) { - zipObjectContent = new NodejsStreamInputAdapter(name, data); - } else { - zipObjectContent = utils.prepareContent( - name, - data, - o.binary, - o.optimizedBinaryString, - o.base64, - ); - } - - var object = new ZipObject(name, zipObjectContent, o); - this.files[name] = object; - /* - TODO: we can't throw an exception because we have async promises - (we can have a promise of a Date() for example) but returning a - promise is useless because file(name, data) returns the JSZip - object for chaining. Should we break that to allow the user - to catch the error ? - - return external.Promise.resolve(zipObjectContent) - .then(function () { - return object; - }); - */ - }; - - /** - * Find the parent folder of the path. - * @private - * @param {string} path the path to use - * @return {string} the parent folder, or "" - */ - var parentFolder = function (path) { - if (path.slice(-1) === "/") { - path = path.substring(0, path.length - 1); - } - var lastSlash = path.lastIndexOf("/"); - return lastSlash > 0 ? path.substring(0, lastSlash) : ""; - }; - - /** - * Returns the path with a slash at the end. - * @private - * @param {String} path the path to check. - * @return {String} the path with a trailing slash. - */ - var forceTrailingSlash = function (path) { - // Check the name ends with a / - if (path.slice(-1) !== "/") { - path += "/"; // IE doesn't like substr(-1) - } - return path; - }; - - /** - * Add a (sub) folder in the current folder. - * @private - * @param {string} name the folder's name - * @param {boolean=} [createFolders] If true, automatically create sub - * folders. Defaults to false. - * @return {Object} the new folder. - */ - var folderAdd = function (name, createFolders) { - createFolders = - typeof createFolders !== "undefined" - ? createFolders - : defaults.createFolders; - - name = forceTrailingSlash(name); - - // Does this folder already exist? - if (!this.files[name]) { - fileAdd.call(this, name, null, { - dir: true, - createFolders: createFolders, - }); - } - return this.files[name]; - }; - - /** - * Cross-window, cross-Node-context regular expression detection - * @param {Object} object Anything - * @return {Boolean} true if the object is a regular expression, - * false otherwise - */ - function isRegExp(object) { - return Object.prototype.toString.call(object) === "[object RegExp]"; - } - - // return the actual prototype of JSZip - var out = { - /** - * @see loadAsync - */ - load: function () { - throw new Error( - "This method has been removed in JSZip 3.0, please check the upgrade guide.", - ); - }, - - /** - * Call a callback function for each entry at this folder level. - * @param {Function} cb the callback function: - * function (relativePath, file) {...} - * It takes 2 arguments : the relative path and the file. - */ - forEach: function (cb) { - var filename, relativePath, file; - // ignore warning about unwanted properties because this.files is a null prototype object - /* eslint-disable-next-line guard-for-in */ - for (filename in this.files) { - file = this.files[filename]; - relativePath = filename.slice( - this.root.length, - filename.length, - ); - if ( - relativePath && - filename.slice(0, this.root.length) === this.root - ) { - // the file is in the current root - cb(relativePath, file); // TODO reverse the parameters ? need to be clean AND consistent with the filter search fn... - } - } - }, - - /** - * Filter nested files/folders with the specified function. - * @param {Function} search the predicate to use : - * function (relativePath, file) {...} - * It takes 2 arguments : the relative path and the file. - * @return {Array} An array of matching elements. - */ - filter: function (search) { - var result = []; - this.forEach(function (relativePath, entry) { - if (search(relativePath, entry)) { - // the file matches the function - result.push(entry); - } - }); - return result; - }, - - /** - * Add a file to the zip file, or search a file. - * @param {string|RegExp} name The name of the file to add (if data is defined), - * the name of the file to find (if no data) or a regex to match files. - * @param {String|ArrayBuffer|Uint8Array|Buffer} data The file data, either raw or base64 encoded - * @param {Object} o File options - * @return {JSZip|Object|Array} this JSZip object (when adding a file), - * a file (when searching by string) or an array of files (when searching by regex). - */ - file: function (name, data, o) { - if (arguments.length === 1) { - if (isRegExp(name)) { - var regexp = name; - return this.filter(function (relativePath, file) { - return !file.dir && regexp.test(relativePath); - }); - } else { - // text - var obj = this.files[this.root + name]; - if (obj && !obj.dir) { - return obj; - } else { - return null; - } - } - } else { - // more than one argument : we have data ! - name = this.root + name; - fileAdd.call(this, name, data, o); - } - return this; - }, - - /** - * Add a directory to the zip file, or search. - * @param {String|RegExp} arg The name of the directory to add, or a regex to search folders. - * @return {JSZip} an object with the new directory as the root, or an array containing matching folders. - */ - folder: function (arg) { - if (!arg) { - return this; - } - - if (isRegExp(arg)) { - return this.filter(function (relativePath, file) { - return file.dir && arg.test(relativePath); - }); - } - - // else, name is a new folder - var name = this.root + arg; - var newFolder = folderAdd.call(this, name); - - // Allow chaining by returning a new object with this folder as the root - var ret = this.clone(); - ret.root = newFolder.name; - return ret; - }, - - /** - * Delete a file, or a directory and all sub-files, from the zip - * @param {string} name the name of the file to delete - * @return {JSZip} this JSZip object - */ - remove: function (name) { - name = this.root + name; - var file = this.files[name]; - if (!file) { - // Look for any folders - if (name.slice(-1) !== "/") { - name += "/"; - } - file = this.files[name]; - } - - if (file && !file.dir) { - // file - delete this.files[name]; - } else { - // maybe a folder, delete recursively - var kids = this.filter(function (relativePath, file) { - return file.name.slice(0, name.length) === name; - }); - for (var i = 0; i < kids.length; i++) { - delete this.files[kids[i].name]; - } - } - - return this; - }, - - /** - * @deprecated This method has been removed in JSZip 3.0, please check the upgrade guide. - */ - generate: function () { - throw new Error( - "This method has been removed in JSZip 3.0, please check the upgrade guide.", - ); - }, - - /** - * Generate the complete zip file as an internal stream. - * @param {Object} options the options to generate the zip file : - * - compression, "STORE" by default. - * - type, "base64" by default. Values are : string, base64, uint8array, arraybuffer, blob. - * @return {StreamHelper} the streamed zip file. - */ - generateInternalStream: function (options) { - var worker, - opts = {}; - try { - opts = utils.extend(options || {}, { - streamFiles: false, - compression: "STORE", - compressionOptions: null, - type: "", - platform: "DOS", - comment: null, - mimeType: "application/zip", - encodeFileName: utf8.utf8encode, - }); - - opts.type = opts.type.toLowerCase(); - opts.compression = opts.compression.toUpperCase(); - - // "binarystring" is preferred but the internals use "string". - if (opts.type === "binarystring") { - opts.type = "string"; - } - - if (!opts.type) { - throw new Error("No output type specified."); - } - - utils.checkSupport(opts.type); - - // accept nodejs `process.platform` - if ( - opts.platform === "darwin" || - opts.platform === "freebsd" || - opts.platform === "linux" || - opts.platform === "sunos" - ) { - opts.platform = "UNIX"; - } - if (opts.platform === "win32") { - opts.platform = "DOS"; - } - - var comment = opts.comment || this.comment || ""; - worker = generate.generateWorker(this, opts, comment); - } catch (e) { - worker = new GenericWorker("error"); - worker.error(e); - } - return new StreamHelper( - worker, - opts.type || "string", - opts.mimeType, - ); - }, - /** - * Generate the complete zip file asynchronously. - * @see generateInternalStream - */ - generateAsync: function (options, onUpdate) { - return this.generateInternalStream(options).accumulate(onUpdate); - }, - /** - * Generate the complete zip file asynchronously. - * @see generateInternalStream - */ - generateNodeStream: function (options, onUpdate) { - options = options || {}; - if (!options.type) { - options.type = "nodebuffer"; - } - return this.generateInternalStream(options).toNodejsStream( - onUpdate, - ); - }, - }; - module.exports = out; - }, - { - "./compressedObject": 2, - "./defaults": 5, - "./generate": 9, - "./nodejs/NodejsStreamInputAdapter": 12, - "./nodejsUtils": 14, - "./stream/GenericWorker": 28, - "./stream/StreamHelper": 29, - "./utf8": 31, - "./utils": 32, - "./zipObject": 35, - }, - ], - 16: [ - function (require, module, exports) { - "use strict"; - /* - * This file is used by module bundlers (browserify/webpack/etc) when - * including a stream implementation. We use "readable-stream" to get a - * consistent behavior between nodejs versions but bundlers often have a shim - * for "stream". Using this shim greatly improve the compatibility and greatly - * reduce the final size of the bundle (only one stream implementation, not - * two). - */ - module.exports = require("stream"); - }, - { stream: undefined }, - ], - 17: [ - function (require, module, exports) { - "use strict"; - var DataReader = require("./DataReader"); - var utils = require("../utils"); - - function ArrayReader(data) { - DataReader.call(this, data); - for (var i = 0; i < this.data.length; i++) { - data[i] = data[i] & 0xff; - } - } - utils.inherits(ArrayReader, DataReader); - /** - * @see DataReader.byteAt - */ - ArrayReader.prototype.byteAt = function (i) { - return this.data[this.zero + i]; - }; - /** - * @see DataReader.lastIndexOfSignature - */ - ArrayReader.prototype.lastIndexOfSignature = function (sig) { - var sig0 = sig.charCodeAt(0), - sig1 = sig.charCodeAt(1), - sig2 = sig.charCodeAt(2), - sig3 = sig.charCodeAt(3); - for (var i = this.length - 4; i >= 0; --i) { - if ( - this.data[i] === sig0 && - this.data[i + 1] === sig1 && - this.data[i + 2] === sig2 && - this.data[i + 3] === sig3 - ) { - return i - this.zero; - } - } - - return -1; - }; - /** - * @see DataReader.readAndCheckSignature - */ - ArrayReader.prototype.readAndCheckSignature = function (sig) { - var sig0 = sig.charCodeAt(0), - sig1 = sig.charCodeAt(1), - sig2 = sig.charCodeAt(2), - sig3 = sig.charCodeAt(3), - data = this.readData(4); - return ( - sig0 === data[0] && - sig1 === data[1] && - sig2 === data[2] && - sig3 === data[3] - ); - }; - /** - * @see DataReader.readData - */ - ArrayReader.prototype.readData = function (size) { - this.checkOffset(size); - if (size === 0) { - return []; - } - var result = this.data.slice( - this.zero + this.index, - this.zero + this.index + size, - ); - this.index += size; - return result; - }; - module.exports = ArrayReader; - }, - { "../utils": 32, "./DataReader": 18 }, - ], - 18: [ - function (require, module, exports) { - "use strict"; - var utils = require("../utils"); - - function DataReader(data) { - this.data = data; // type : see implementation - this.length = data.length; - this.index = 0; - this.zero = 0; - } - DataReader.prototype = { - /** - * Check that the offset will not go too far. - * @param {string} offset the additional offset to check. - * @throws {Error} an Error if the offset is out of bounds. - */ - checkOffset: function (offset) { - this.checkIndex(this.index + offset); - }, - /** - * Check that the specified index will not be too far. - * @param {string} newIndex the index to check. - * @throws {Error} an Error if the index is out of bounds. - */ - checkIndex: function (newIndex) { - if (this.length < this.zero + newIndex || newIndex < 0) { - throw new Error( - "End of data reached (data length = " + - this.length + - ", asked index = " + - newIndex + - "). Corrupted zip ?", - ); - } - }, - /** - * Change the index. - * @param {number} newIndex The new index. - * @throws {Error} if the new index is out of the data. - */ - setIndex: function (newIndex) { - this.checkIndex(newIndex); - this.index = newIndex; - }, - /** - * Skip the next n bytes. - * @param {number} n the number of bytes to skip. - * @throws {Error} if the new index is out of the data. - */ - skip: function (n) { - this.setIndex(this.index + n); - }, - /** - * Get the byte at the specified index. - * @param {number} i the index to use. - * @return {number} a byte. - */ - byteAt: function () { - // see implementations - }, - /** - * Get the next number with a given byte size. - * @param {number} size the number of bytes to read. - * @return {number} the corresponding number. - */ - readInt: function (size) { - var result = 0, - i; - this.checkOffset(size); - for (i = this.index + size - 1; i >= this.index; i--) { - result = (result << 8) + this.byteAt(i); - } - this.index += size; - return result; - }, - /** - * Get the next string with a given byte size. - * @param {number} size the number of bytes to read. - * @return {string} the corresponding string. - */ - readString: function (size) { - return utils.transformTo("string", this.readData(size)); - }, - /** - * Get raw data without conversion, <size> bytes. - * @param {number} size the number of bytes to read. - * @return {Object} the raw data, implementation specific. - */ - readData: function () { - // see implementations - }, - /** - * Find the last occurrence of a zip signature (4 bytes). - * @param {string} sig the signature to find. - * @return {number} the index of the last occurrence, -1 if not found. - */ - lastIndexOfSignature: function () { - // see implementations - }, - /** - * Read the signature (4 bytes) at the current position and compare it with sig. - * @param {string} sig the expected signature - * @return {boolean} true if the signature matches, false otherwise. - */ - readAndCheckSignature: function () { - // see implementations - }, - /** - * Get the next date. - * @return {Date} the date. - */ - readDate: function () { - var dostime = this.readInt(4); - return new Date( - Date.UTC( - ((dostime >> 25) & 0x7f) + 1980, // year - ((dostime >> 21) & 0x0f) - 1, // month - (dostime >> 16) & 0x1f, // day - (dostime >> 11) & 0x1f, // hour - (dostime >> 5) & 0x3f, // minute - (dostime & 0x1f) << 1, - ), - ); // second - }, - }; - module.exports = DataReader; - }, - { "../utils": 32 }, - ], - 19: [ - function (require, module, exports) { - "use strict"; - var Uint8ArrayReader = require("./Uint8ArrayReader"); - var utils = require("../utils"); - - function NodeBufferReader(data) { - Uint8ArrayReader.call(this, data); - } - utils.inherits(NodeBufferReader, Uint8ArrayReader); - - /** - * @see DataReader.readData - */ - NodeBufferReader.prototype.readData = function (size) { - this.checkOffset(size); - var result = this.data.slice( - this.zero + this.index, - this.zero + this.index + size, - ); - this.index += size; - return result; - }; - module.exports = NodeBufferReader; - }, - { "../utils": 32, "./Uint8ArrayReader": 21 }, - ], - 20: [ - function (require, module, exports) { - "use strict"; - var DataReader = require("./DataReader"); - var utils = require("../utils"); - - function StringReader(data) { - DataReader.call(this, data); - } - utils.inherits(StringReader, DataReader); - /** - * @see DataReader.byteAt - */ - StringReader.prototype.byteAt = function (i) { - return this.data.charCodeAt(this.zero + i); - }; - /** - * @see DataReader.lastIndexOfSignature - */ - StringReader.prototype.lastIndexOfSignature = function (sig) { - return this.data.lastIndexOf(sig) - this.zero; - }; - /** - * @see DataReader.readAndCheckSignature - */ - StringReader.prototype.readAndCheckSignature = function (sig) { - var data = this.readData(4); - return sig === data; - }; - /** - * @see DataReader.readData - */ - StringReader.prototype.readData = function (size) { - this.checkOffset(size); - // this will work because the constructor applied the "& 0xff" mask. - var result = this.data.slice( - this.zero + this.index, - this.zero + this.index + size, - ); - this.index += size; - return result; - }; - module.exports = StringReader; - }, - { "../utils": 32, "./DataReader": 18 }, - ], - 21: [ - function (require, module, exports) { - "use strict"; - var ArrayReader = require("./ArrayReader"); - var utils = require("../utils"); - - function Uint8ArrayReader(data) { - ArrayReader.call(this, data); - } - utils.inherits(Uint8ArrayReader, ArrayReader); - /** - * @see DataReader.readData - */ - Uint8ArrayReader.prototype.readData = function (size) { - this.checkOffset(size); - if (size === 0) { - // in IE10, when using subarray(idx, idx), we get the array [0x00] instead of []. - return new Uint8Array(0); - } - var result = this.data.subarray( - this.zero + this.index, - this.zero + this.index + size, - ); - this.index += size; - return result; - }; - module.exports = Uint8ArrayReader; - }, - { "../utils": 32, "./ArrayReader": 17 }, - ], - 22: [ - function (require, module, exports) { - "use strict"; - - var utils = require("../utils"); - var support = require("../support"); - var ArrayReader = require("./ArrayReader"); - var StringReader = require("./StringReader"); - var NodeBufferReader = require("./NodeBufferReader"); - var Uint8ArrayReader = require("./Uint8ArrayReader"); - - /** - * Create a reader adapted to the data. - * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data to read. - * @return {DataReader} the data reader. - */ - module.exports = function (data) { - var type = utils.getTypeOf(data); - utils.checkSupport(type); - if (type === "string" && !support.uint8array) { - return new StringReader(data); - } - if (type === "nodebuffer") { - return new NodeBufferReader(data); - } - if (support.uint8array) { - return new Uint8ArrayReader( - utils.transformTo("uint8array", data), - ); - } - return new ArrayReader(utils.transformTo("array", data)); - }; - }, - { - "../support": 30, - "../utils": 32, - "./ArrayReader": 17, - "./NodeBufferReader": 19, - "./StringReader": 20, - "./Uint8ArrayReader": 21, - }, - ], - 23: [ - function (require, module, exports) { - "use strict"; - exports.LOCAL_FILE_HEADER = "PK\x03\x04"; - exports.CENTRAL_FILE_HEADER = "PK\x01\x02"; - exports.CENTRAL_DIRECTORY_END = "PK\x05\x06"; - exports.ZIP64_CENTRAL_DIRECTORY_LOCATOR = "PK\x06\x07"; - exports.ZIP64_CENTRAL_DIRECTORY_END = "PK\x06\x06"; - exports.DATA_DESCRIPTOR = "PK\x07\x08"; - }, - {}, - ], - 24: [ - function (require, module, exports) { - "use strict"; - - var GenericWorker = require("./GenericWorker"); - var utils = require("../utils"); - - /** - * A worker which convert chunks to a specified type. - * @constructor - * @param {String} destType the destination type. - */ - function ConvertWorker(destType) { - GenericWorker.call(this, "ConvertWorker to " + destType); - this.destType = destType; - } - utils.inherits(ConvertWorker, GenericWorker); - - /** - * @see GenericWorker.processChunk - */ - ConvertWorker.prototype.processChunk = function (chunk) { - this.push({ - data: utils.transformTo(this.destType, chunk.data), - meta: chunk.meta, - }); - }; - module.exports = ConvertWorker; - }, - { "../utils": 32, "./GenericWorker": 28 }, - ], - 25: [ - function (require, module, exports) { - "use strict"; - - var GenericWorker = require("./GenericWorker"); - var crc32 = require("../crc32"); - var utils = require("../utils"); - - /** - * A worker which calculate the crc32 of the data flowing through. - * @constructor - */ - function Crc32Probe() { - GenericWorker.call(this, "Crc32Probe"); - this.withStreamInfo("crc32", 0); - } - utils.inherits(Crc32Probe, GenericWorker); - - /** - * @see GenericWorker.processChunk - */ - Crc32Probe.prototype.processChunk = function (chunk) { - this.streamInfo.crc32 = crc32( - chunk.data, - this.streamInfo.crc32 || 0, - ); - this.push(chunk); - }; - module.exports = Crc32Probe; - }, - { "../crc32": 4, "../utils": 32, "./GenericWorker": 28 }, - ], - 26: [ - function (require, module, exports) { - "use strict"; - - var utils = require("../utils"); - var GenericWorker = require("./GenericWorker"); - - /** - * A worker which calculate the total length of the data flowing through. - * @constructor - * @param {String} propName the name used to expose the length - */ - function DataLengthProbe(propName) { - GenericWorker.call(this, "DataLengthProbe for " + propName); - this.propName = propName; - this.withStreamInfo(propName, 0); - } - utils.inherits(DataLengthProbe, GenericWorker); - - /** - * @see GenericWorker.processChunk - */ - DataLengthProbe.prototype.processChunk = function (chunk) { - if (chunk) { - var length = this.streamInfo[this.propName] || 0; - this.streamInfo[this.propName] = length + chunk.data.length; - } - GenericWorker.prototype.processChunk.call(this, chunk); - }; - module.exports = DataLengthProbe; - }, - { "../utils": 32, "./GenericWorker": 28 }, - ], - 27: [ - function (require, module, exports) { - "use strict"; - - var utils = require("../utils"); - var GenericWorker = require("./GenericWorker"); - - // the size of the generated chunks - // TODO expose this as a public variable - var DEFAULT_BLOCK_SIZE = 16 * 1024; - - /** - * A worker that reads a content and emits chunks. - * @constructor - * @param {Promise} dataP the promise of the data to split - */ - function DataWorker(dataP) { - GenericWorker.call(this, "DataWorker"); - var self = this; - this.dataIsReady = false; - this.index = 0; - this.max = 0; - this.data = null; - this.type = ""; - - this._tickScheduled = false; - - dataP.then( - function (data) { - self.dataIsReady = true; - self.data = data; - self.max = (data && data.length) || 0; - self.type = utils.getTypeOf(data); - if (!self.isPaused) { - self._tickAndRepeat(); - } - }, - function (e) { - self.error(e); - }, - ); - } - - utils.inherits(DataWorker, GenericWorker); - - /** - * @see GenericWorker.cleanUp - */ - DataWorker.prototype.cleanUp = function () { - GenericWorker.prototype.cleanUp.call(this); - this.data = null; - }; - - /** - * @see GenericWorker.resume - */ - DataWorker.prototype.resume = function () { - if (!GenericWorker.prototype.resume.call(this)) { - return false; - } - - if (!this._tickScheduled && this.dataIsReady) { - this._tickScheduled = true; - utils.delay(this._tickAndRepeat, [], this); - } - return true; - }; - - /** - * Trigger a tick a schedule an other call to this function. - */ - DataWorker.prototype._tickAndRepeat = function () { - this._tickScheduled = false; - if (this.isPaused || this.isFinished) { - return; - } - this._tick(); - if (!this.isFinished) { - utils.delay(this._tickAndRepeat, [], this); - this._tickScheduled = true; - } - }; - - /** - * Read and push a chunk. - */ - DataWorker.prototype._tick = function () { - if (this.isPaused || this.isFinished) { - return false; - } - - var size = DEFAULT_BLOCK_SIZE; - var data = null, - nextIndex = Math.min(this.max, this.index + size); - if (this.index >= this.max) { - // EOF - return this.end(); - } else { - switch (this.type) { - case "string": - data = this.data.substring(this.index, nextIndex); - break; - case "uint8array": - data = this.data.subarray(this.index, nextIndex); - break; - case "array": - case "nodebuffer": - data = this.data.slice(this.index, nextIndex); - break; - } - this.index = nextIndex; - return this.push({ - data: data, - meta: { - percent: this.max ? (this.index / this.max) * 100 : 0, - }, - }); - } - }; - - module.exports = DataWorker; - }, - { "../utils": 32, "./GenericWorker": 28 }, - ], - 28: [ - function (require, module, exports) { - "use strict"; - - /** - * A worker that does nothing but passing chunks to the next one. This is like - * a nodejs stream but with some differences. On the good side : - * - it works on IE 6-9 without any issue / polyfill - * - it weights less than the full dependencies bundled with browserify - * - it forwards errors (no need to declare an error handler EVERYWHERE) - * - * A chunk is an object with 2 attributes : `meta` and `data`. The former is an - * object containing anything (`percent` for example), see each worker for more - * details. The latter is the real data (String, Uint8Array, etc). - * - * @constructor - * @param {String} name the name of the stream (mainly used for debugging purposes) - */ - function GenericWorker(name) { - // the name of the worker - this.name = name || "default"; - // an object containing metadata about the workers chain - this.streamInfo = {}; - // an error which happened when the worker was paused - this.generatedError = null; - // an object containing metadata to be merged by this worker into the general metadata - this.extraStreamInfo = {}; - // true if the stream is paused (and should not do anything), false otherwise - this.isPaused = true; - // true if the stream is finished (and should not do anything), false otherwise - this.isFinished = false; - // true if the stream is locked to prevent further structure updates (pipe), false otherwise - this.isLocked = false; - // the event listeners - this._listeners = { - data: [], - end: [], - error: [], - }; - // the previous worker, if any - this.previous = null; - } - - GenericWorker.prototype = { - /** - * Push a chunk to the next workers. - * @param {Object} chunk the chunk to push - */ - push: function (chunk) { - this.emit("data", chunk); - }, - /** - * End the stream. - * @return {Boolean} true if this call ended the worker, false otherwise. - */ - end: function () { - if (this.isFinished) { - return false; - } - - this.flush(); - try { - this.emit("end"); - this.cleanUp(); - this.isFinished = true; - } catch (e) { - this.emit("error", e); - } - return true; - }, - /** - * End the stream with an error. - * @param {Error} e the error which caused the premature end. - * @return {Boolean} true if this call ended the worker with an error, false otherwise. - */ - error: function (e) { - if (this.isFinished) { - return false; - } - - if (this.isPaused) { - this.generatedError = e; - } else { - this.isFinished = true; - - this.emit("error", e); - - // in the workers chain exploded in the middle of the chain, - // the error event will go downward but we also need to notify - // workers upward that there has been an error. - if (this.previous) { - this.previous.error(e); - } - - this.cleanUp(); - } - return true; - }, - /** - * Add a callback on an event. - * @param {String} name the name of the event (data, end, error) - * @param {Function} listener the function to call when the event is triggered - * @return {GenericWorker} the current object for chainability - */ - on: function (name, listener) { - this._listeners[name].push(listener); - return this; - }, - /** - * Clean any references when a worker is ending. - */ - cleanUp: function () { - this.streamInfo = - this.generatedError = - this.extraStreamInfo = - null; - this._listeners = []; - }, - /** - * Trigger an event. This will call registered callback with the provided arg. - * @param {String} name the name of the event (data, end, error) - * @param {Object} arg the argument to call the callback with. - */ - emit: function (name, arg) { - if (this._listeners[name]) { - for (var i = 0; i < this._listeners[name].length; i++) { - this._listeners[name][i].call(this, arg); - } - } - }, - /** - * Chain a worker with an other. - * @param {Worker} next the worker receiving events from the current one. - * @return {worker} the next worker for chainability - */ - pipe: function (next) { - return next.registerPrevious(this); - }, - /** - * Same as `pipe` in the other direction. - * Using an API with `pipe(next)` is very easy. - * Implementing the API with the point of view of the next one registering - * a source is easier, see the ZipFileWorker. - * @param {Worker} previous the previous worker, sending events to this one - * @return {Worker} the current worker for chainability - */ - registerPrevious: function (previous) { - if (this.isLocked) { - throw new Error( - "The stream '" + this + "' has already been used.", - ); - } - - // sharing the streamInfo... - this.streamInfo = previous.streamInfo; - // ... and adding our own bits - this.mergeStreamInfo(); - this.previous = previous; - var self = this; - previous.on("data", function (chunk) { - self.processChunk(chunk); - }); - previous.on("end", function () { - self.end(); - }); - previous.on("error", function (e) { - self.error(e); - }); - return this; - }, - /** - * Pause the stream so it doesn't send events anymore. - * @return {Boolean} true if this call paused the worker, false otherwise. - */ - pause: function () { - if (this.isPaused || this.isFinished) { - return false; - } - this.isPaused = true; - - if (this.previous) { - this.previous.pause(); - } - return true; - }, - /** - * Resume a paused stream. - * @return {Boolean} true if this call resumed the worker, false otherwise. - */ - resume: function () { - if (!this.isPaused || this.isFinished) { - return false; - } - this.isPaused = false; - - // if true, the worker tried to resume but failed - var withError = false; - if (this.generatedError) { - this.error(this.generatedError); - withError = true; - } - if (this.previous) { - this.previous.resume(); - } - - return !withError; - }, - /** - * Flush any remaining bytes as the stream is ending. - */ - flush: function () {}, - /** - * Process a chunk. This is usually the method overridden. - * @param {Object} chunk the chunk to process. - */ - processChunk: function (chunk) { - this.push(chunk); - }, - /** - * Add a key/value to be added in the workers chain streamInfo once activated. - * @param {String} key the key to use - * @param {Object} value the associated value - * @return {Worker} the current worker for chainability - */ - withStreamInfo: function (key, value) { - this.extraStreamInfo[key] = value; - this.mergeStreamInfo(); - return this; - }, - /** - * Merge this worker's streamInfo into the chain's streamInfo. - */ - mergeStreamInfo: function () { - for (var key in this.extraStreamInfo) { - if ( - !Object.prototype.hasOwnProperty.call( - this.extraStreamInfo, - key, - ) - ) { - continue; - } - this.streamInfo[key] = this.extraStreamInfo[key]; - } - }, - - /** - * Lock the stream to prevent further updates on the workers chain. - * After calling this method, all calls to pipe will fail. - */ - lock: function () { - if (this.isLocked) { - throw new Error( - "The stream '" + this + "' has already been used.", - ); - } - this.isLocked = true; - if (this.previous) { - this.previous.lock(); - } - }, - - /** - * - * Pretty print the workers chain. - */ - toString: function () { - var me = "Worker " + this.name; - if (this.previous) { - return this.previous + " -> " + me; - } else { - return me; - } - }, - }; - - module.exports = GenericWorker; - }, - {}, - ], - 29: [ - function (require, module, exports) { - "use strict"; - - var utils = require("../utils"); - var ConvertWorker = require("./ConvertWorker"); - var GenericWorker = require("./GenericWorker"); - var base64 = require("../base64"); - var support = require("../support"); - var external = require("../external"); - - var NodejsStreamOutputAdapter = null; - if (support.nodestream) { - try { - NodejsStreamOutputAdapter = require("../nodejs/NodejsStreamOutputAdapter"); - } catch (e) { - // ignore - } - } - - /** - * Apply the final transformation of the data. If the user wants a Blob for - * example, it's easier to work with an U8intArray and finally do the - * ArrayBuffer/Blob conversion. - * @param {String} type the name of the final type - * @param {String|Uint8Array|Buffer} content the content to transform - * @param {String} mimeType the mime type of the content, if applicable. - * @return {String|Uint8Array|ArrayBuffer|Buffer|Blob} the content in the right format. - */ - function transformZipOutput(type, content, mimeType) { - switch (type) { - case "blob": - return utils.newBlob( - utils.transformTo("arraybuffer", content), - mimeType, - ); - case "base64": - return base64.encode(content); - default: - return utils.transformTo(type, content); - } - } - - /** - * Concatenate an array of data of the given type. - * @param {String} type the type of the data in the given array. - * @param {Array} dataArray the array containing the data chunks to concatenate - * @return {String|Uint8Array|Buffer} the concatenated data - * @throws Error if the asked type is unsupported - */ - function concat(type, dataArray) { - var i, - index = 0, - res = null, - totalLength = 0; - for (i = 0; i < dataArray.length; i++) { - totalLength += dataArray[i].length; - } - switch (type) { - case "string": - return dataArray.join(""); - case "array": - return Array.prototype.concat.apply([], dataArray); - case "uint8array": - res = new Uint8Array(totalLength); - for (i = 0; i < dataArray.length; i++) { - res.set(dataArray[i], index); - index += dataArray[i].length; - } - return res; - case "nodebuffer": - return Buffer.concat(dataArray); - default: - throw new Error("concat : unsupported type '" + type + "'"); - } - } - - /** - * Listen a StreamHelper, accumulate its content and concatenate it into a - * complete block. - * @param {StreamHelper} helper the helper to use. - * @param {Function} updateCallback a callback called on each update. Called - * with one arg : - * - the metadata linked to the update received. - * @return Promise the promise for the accumulation. - */ - function accumulate(helper, updateCallback) { - return new external.Promise(function (resolve, reject) { - var dataArray = []; - var chunkType = helper._internalType, - resultType = helper._outputType, - mimeType = helper._mimeType; - helper - .on("data", function (data, meta) { - dataArray.push(data); - if (updateCallback) { - updateCallback(meta); - } - }) - .on("error", function (err) { - dataArray = []; - reject(err); - }) - .on("end", function () { - try { - var result = transformZipOutput( - resultType, - concat(chunkType, dataArray), - mimeType, - ); - resolve(result); - } catch (e) { - reject(e); - } - dataArray = []; - }) - .resume(); - }); - } - - /** - * An helper to easily use workers outside of JSZip. - * @constructor - * @param {Worker} worker the worker to wrap - * @param {String} outputType the type of data expected by the use - * @param {String} mimeType the mime type of the content, if applicable. - */ - function StreamHelper(worker, outputType, mimeType) { - var internalType = outputType; - switch (outputType) { - case "blob": - case "arraybuffer": - internalType = "uint8array"; - break; - case "base64": - internalType = "string"; - break; - } - - try { - // the type used internally - this._internalType = internalType; - // the type used to output results - this._outputType = outputType; - // the mime type - this._mimeType = mimeType; - utils.checkSupport(internalType); - this._worker = worker.pipe(new ConvertWorker(internalType)); - // the last workers can be rewired without issues but we need to - // prevent any updates on previous workers. - worker.lock(); - } catch (e) { - this._worker = new GenericWorker("error"); - this._worker.error(e); - } - } - - StreamHelper.prototype = { - /** - * Listen a StreamHelper, accumulate its content and concatenate it into a - * complete block. - * @param {Function} updateCb the update callback. - * @return Promise the promise for the accumulation. - */ - accumulate: function (updateCb) { - return accumulate(this, updateCb); - }, - /** - * Add a listener on an event triggered on a stream. - * @param {String} evt the name of the event - * @param {Function} fn the listener - * @return {StreamHelper} the current helper. - */ - on: function (evt, fn) { - var self = this; - - if (evt === "data") { - this._worker.on(evt, function (chunk) { - fn.call(self, chunk.data, chunk.meta); - }); - } else { - this._worker.on(evt, function () { - utils.delay(fn, arguments, self); - }); - } - return this; - }, - /** - * Resume the flow of chunks. - * @return {StreamHelper} the current helper. - */ - resume: function () { - utils.delay(this._worker.resume, [], this._worker); - return this; - }, - /** - * Pause the flow of chunks. - * @return {StreamHelper} the current helper. - */ - pause: function () { - this._worker.pause(); - return this; - }, - /** - * Return a nodejs stream for this helper. - * @param {Function} updateCb the update callback. - * @return {NodejsStreamOutputAdapter} the nodejs stream. - */ - toNodejsStream: function (updateCb) { - utils.checkSupport("nodestream"); - if (this._outputType !== "nodebuffer") { - // an object stream containing blob/arraybuffer/uint8array/string - // is strange and I don't know if it would be useful. - // I you find this comment and have a good usecase, please open a - // bug report ! - throw new Error( - this._outputType + " is not supported by this method", - ); - } - - return new NodejsStreamOutputAdapter( - this, - { - objectMode: this._outputType !== "nodebuffer", - }, - updateCb, - ); - }, - }; - - module.exports = StreamHelper; - }, - { - "../base64": 1, - "../external": 6, - "../nodejs/NodejsStreamOutputAdapter": 13, - "../support": 30, - "../utils": 32, - "./ConvertWorker": 24, - "./GenericWorker": 28, - }, - ], - 30: [ - function (require, module, exports) { - "use strict"; - - exports.base64 = true; - exports.array = true; - exports.string = true; - exports.arraybuffer = - typeof ArrayBuffer !== "undefined" && - typeof Uint8Array !== "undefined"; - exports.nodebuffer = typeof Buffer !== "undefined"; - // contains true if JSZip can read/generate Uint8Array, false otherwise. - exports.uint8array = typeof Uint8Array !== "undefined"; - - if (typeof ArrayBuffer === "undefined") { - exports.blob = false; - } else { - var buffer = new ArrayBuffer(0); - try { - exports.blob = - new Blob([buffer], { - type: "application/zip", - }).size === 0; - } catch (e) { - try { - var Builder = - self.BlobBuilder || - self.WebKitBlobBuilder || - self.MozBlobBuilder || - self.MSBlobBuilder; - var builder = new Builder(); - builder.append(buffer); - exports.blob = builder.getBlob("application/zip").size === 0; - } catch (e) { - exports.blob = false; - } - } - } - - try { - exports.nodestream = !!require("readable-stream").Readable; - } catch (e) { - exports.nodestream = false; - } - }, - { "readable-stream": 16 }, - ], - 31: [ - function (require, module, exports) { - "use strict"; - - var utils = require("./utils"); - var support = require("./support"); - var nodejsUtils = require("./nodejsUtils"); - var GenericWorker = require("./stream/GenericWorker"); - - /** - * The following functions come from pako, from pako/lib/utils/strings - * released under the MIT license, see pako https://github.com/nodeca/pako/ - */ - - // Table with utf8 lengths (calculated by first byte of sequence) - // Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS, - // because max possible codepoint is 0x10ffff - var _utf8len = new Array(256); - for (var i = 0; i < 256; i++) { - _utf8len[i] = - i >= 252 - ? 6 - : i >= 248 - ? 5 - : i >= 240 - ? 4 - : i >= 224 - ? 3 - : i >= 192 - ? 2 - : 1; - } - _utf8len[254] = _utf8len[254] = 1; // Invalid sequence start - - // convert string to array (typed, when possible) - var string2buf = function (str) { - var buf, - c, - c2, - m_pos, - i, - str_len = str.length, - buf_len = 0; - - // count binary size - for (m_pos = 0; m_pos < str_len; m_pos++) { - c = str.charCodeAt(m_pos); - if ((c & 0xfc00) === 0xd800 && m_pos + 1 < str_len) { - c2 = str.charCodeAt(m_pos + 1); - if ((c2 & 0xfc00) === 0xdc00) { - c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00); - m_pos++; - } - } - buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4; - } - - // allocate buffer - if (support.uint8array) { - buf = new Uint8Array(buf_len); - } else { - buf = new Array(buf_len); - } - - // convert - for (i = 0, m_pos = 0; i < buf_len; m_pos++) { - c = str.charCodeAt(m_pos); - if ((c & 0xfc00) === 0xd800 && m_pos + 1 < str_len) { - c2 = str.charCodeAt(m_pos + 1); - if ((c2 & 0xfc00) === 0xdc00) { - c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00); - m_pos++; - } - } - if (c < 0x80) { - /* one byte */ - buf[i++] = c; - } else if (c < 0x800) { - /* two bytes */ - buf[i++] = 0xc0 | (c >>> 6); - buf[i++] = 0x80 | (c & 0x3f); - } else if (c < 0x10000) { - /* three bytes */ - buf[i++] = 0xe0 | (c >>> 12); - buf[i++] = 0x80 | ((c >>> 6) & 0x3f); - buf[i++] = 0x80 | (c & 0x3f); - } else { - /* four bytes */ - buf[i++] = 0xf0 | (c >>> 18); - buf[i++] = 0x80 | ((c >>> 12) & 0x3f); - buf[i++] = 0x80 | ((c >>> 6) & 0x3f); - buf[i++] = 0x80 | (c & 0x3f); - } - } - - return buf; - }; - - // Calculate max possible position in utf8 buffer, - // that will not break sequence. If that's not possible - // - (very small limits) return max size as is. - // - // buf[] - utf8 bytes array - // max - length limit (mandatory); - var utf8border = function (buf, max) { - var pos; - - max = max || buf.length; - if (max > buf.length) { - max = buf.length; - } - - // go back from last position, until start of sequence found - pos = max - 1; - while (pos >= 0 && (buf[pos] & 0xc0) === 0x80) { - pos--; - } - - // Fuckup - very small and broken sequence, - // return max, because we should return something anyway. - if (pos < 0) { - return max; - } - - // If we came to start of buffer - that means vuffer is too small, - // return max too. - if (pos === 0) { - return max; - } - - return pos + _utf8len[buf[pos]] > max ? pos : max; - }; - - // convert array to string - var buf2string = function (buf) { - var i, out, c, c_len; - var len = buf.length; - - // Reserve max possible length (2 words per char) - // NB: by unknown reasons, Array is significantly faster for - // String.fromCharCode.apply than Uint16Array. - var utf16buf = new Array(len * 2); - - for (out = 0, i = 0; i < len; ) { - c = buf[i++]; - // quick process ascii - if (c < 0x80) { - utf16buf[out++] = c; - continue; - } - - c_len = _utf8len[c]; - // skip 5 & 6 byte codes - if (c_len > 4) { - utf16buf[out++] = 0xfffd; - i += c_len - 1; - continue; - } - - // apply mask on first byte - c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07; - // join the rest - while (c_len > 1 && i < len) { - c = (c << 6) | (buf[i++] & 0x3f); - c_len--; - } - - // terminated by end of string? - if (c_len > 1) { - utf16buf[out++] = 0xfffd; - continue; - } - - if (c < 0x10000) { - utf16buf[out++] = c; - } else { - c -= 0x10000; - utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff); - utf16buf[out++] = 0xdc00 | (c & 0x3ff); - } - } - - // shrinkBuf(utf16buf, out) - if (utf16buf.length !== out) { - if (utf16buf.subarray) { - utf16buf = utf16buf.subarray(0, out); - } else { - utf16buf.length = out; - } - } - - // return String.fromCharCode.apply(null, utf16buf); - return utils.applyFromCharCode(utf16buf); - }; - - // That's all for the pako functions. - - /** - * Transform a javascript string into an array (typed if possible) of bytes, - * UTF-8 encoded. - * @param {String} str the string to encode - * @return {Array|Uint8Array|Buffer} the UTF-8 encoded string. - */ - exports.utf8encode = function utf8encode(str) { - if (support.nodebuffer) { - return nodejsUtils.newBufferFrom(str, "utf-8"); - } - - return string2buf(str); - }; - - /** - * Transform a bytes array (or a representation) representing an UTF-8 encoded - * string into a javascript string. - * @param {Array|Uint8Array|Buffer} buf the data de decode - * @return {String} the decoded string. - */ - exports.utf8decode = function utf8decode(buf) { - if (support.nodebuffer) { - return utils.transformTo("nodebuffer", buf).toString("utf-8"); - } - - buf = utils.transformTo( - support.uint8array ? "uint8array" : "array", - buf, - ); - - return buf2string(buf); - }; - - /** - * A worker to decode utf8 encoded binary chunks into string chunks. - * @constructor - */ - function Utf8DecodeWorker() { - GenericWorker.call(this, "utf-8 decode"); - // the last bytes if a chunk didn't end with a complete codepoint. - this.leftOver = null; - } - utils.inherits(Utf8DecodeWorker, GenericWorker); - - /** - * @see GenericWorker.processChunk - */ - Utf8DecodeWorker.prototype.processChunk = function (chunk) { - var data = utils.transformTo( - support.uint8array ? "uint8array" : "array", - chunk.data, - ); - - // 1st step, re-use what's left of the previous chunk - if (this.leftOver && this.leftOver.length) { - if (support.uint8array) { - var previousData = data; - data = new Uint8Array( - previousData.length + this.leftOver.length, - ); - data.set(this.leftOver, 0); - data.set(previousData, this.leftOver.length); - } else { - data = this.leftOver.concat(data); - } - this.leftOver = null; - } - - var nextBoundary = utf8border(data); - var usableData = data; - if (nextBoundary !== data.length) { - if (support.uint8array) { - usableData = data.subarray(0, nextBoundary); - this.leftOver = data.subarray(nextBoundary, data.length); - } else { - usableData = data.slice(0, nextBoundary); - this.leftOver = data.slice(nextBoundary, data.length); - } - } - - this.push({ - data: exports.utf8decode(usableData), - meta: chunk.meta, - }); - }; - - /** - * @see GenericWorker.flush - */ - Utf8DecodeWorker.prototype.flush = function () { - if (this.leftOver && this.leftOver.length) { - this.push({ - data: exports.utf8decode(this.leftOver), - meta: {}, - }); - this.leftOver = null; - } - }; - exports.Utf8DecodeWorker = Utf8DecodeWorker; - - /** - * A worker to endcode string chunks into utf8 encoded binary chunks. - * @constructor - */ - function Utf8EncodeWorker() { - GenericWorker.call(this, "utf-8 encode"); - } - utils.inherits(Utf8EncodeWorker, GenericWorker); - - /** - * @see GenericWorker.processChunk - */ - Utf8EncodeWorker.prototype.processChunk = function (chunk) { - this.push({ - data: exports.utf8encode(chunk.data), - meta: chunk.meta, - }); - }; - exports.Utf8EncodeWorker = Utf8EncodeWorker; - }, - { - "./nodejsUtils": 14, - "./stream/GenericWorker": 28, - "./support": 30, - "./utils": 32, - }, - ], - 32: [ - function (require, module, exports) { - "use strict"; - - var support = require("./support"); - var base64 = require("./base64"); - var nodejsUtils = require("./nodejsUtils"); - var external = require("./external"); - require("setimmediate"); - - /** - * Convert a string that pass as a "binary string": it should represent a byte - * array but may have > 255 char codes. Be sure to take only the first byte - * and returns the byte array. - * @param {String} str the string to transform. - * @return {Array|Uint8Array} the string in a binary format. - */ - function string2binary(str) { - var result = null; - if (support.uint8array) { - result = new Uint8Array(str.length); - } else { - result = new Array(str.length); - } - return stringToArrayLike(str, result); - } - - /** - * Create a new blob with the given content and the given type. - * @param {String|ArrayBuffer} part the content to put in the blob. DO NOT use - * an Uint8Array because the stock browser of android 4 won't accept it (it - * will be silently converted to a string, "[object Uint8Array]"). - * - * Use only ONE part to build the blob to avoid a memory leak in IE11 / Edge: - * when a large amount of Array is used to create the Blob, the amount of - * memory consumed is nearly 100 times the original data amount. - * - * @param {String} type the mime type of the blob. - * @return {Blob} the created blob. - */ - exports.newBlob = function (part, type) { - exports.checkSupport("blob"); - - try { - // Blob constructor - return new Blob([part], { - type: type, - }); - } catch (e) { - try { - // deprecated, browser only, old way - var Builder = - self.BlobBuilder || - self.WebKitBlobBuilder || - self.MozBlobBuilder || - self.MSBlobBuilder; - var builder = new Builder(); - builder.append(part); - return builder.getBlob(type); - } catch (e) { - // well, fuck ?! - throw new Error("Bug : can't construct the Blob."); - } - } - }; - /** - * The identity function. - * @param {Object} input the input. - * @return {Object} the same input. - */ - function identity(input) { - return input; - } - - /** - * Fill in an array with a string. - * @param {String} str the string to use. - * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to fill in (will be mutated). - * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated array. - */ - function stringToArrayLike(str, array) { - for (var i = 0; i < str.length; ++i) { - array[i] = str.charCodeAt(i) & 0xff; - } - return array; - } - - /** - * An helper for the function arrayLikeToString. - * This contains static information and functions that - * can be optimized by the browser JIT compiler. - */ - var arrayToStringHelper = { - /** - * Transform an array of int into a string, chunk by chunk. - * See the performances notes on arrayLikeToString. - * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform. - * @param {String} type the type of the array. - * @param {Integer} chunk the chunk size. - * @return {String} the resulting string. - * @throws Error if the chunk is too big for the stack. - */ - stringifyByChunk: function (array, type, chunk) { - var result = [], - k = 0, - len = array.length; - // shortcut - if (len <= chunk) { - return String.fromCharCode.apply(null, array); - } - while (k < len) { - if (type === "array" || type === "nodebuffer") { - result.push( - String.fromCharCode.apply( - null, - array.slice(k, Math.min(k + chunk, len)), - ), - ); - } else { - result.push( - String.fromCharCode.apply( - null, - array.subarray(k, Math.min(k + chunk, len)), - ), - ); - } - k += chunk; - } - return result.join(""); - }, - /** - * Call String.fromCharCode on every item in the array. - * This is the naive implementation, which generate A LOT of intermediate string. - * This should be used when everything else fail. - * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform. - * @return {String} the result. - */ - stringifyByChar: function (array) { - var resultStr = ""; - for (var i = 0; i < array.length; i++) { - resultStr += String.fromCharCode(array[i]); - } - return resultStr; - }, - applyCanBeUsed: { - /** - * true if the browser accepts to use String.fromCharCode on Uint8Array - */ - uint8array: (function () { - try { - return ( - support.uint8array && - String.fromCharCode.apply(null, new Uint8Array(1)) - .length === 1 - ); - } catch (e) { - return false; - } - })(), - /** - * true if the browser accepts to use String.fromCharCode on nodejs Buffer. - */ - nodebuffer: (function () { - try { - return ( - support.nodebuffer && - String.fromCharCode.apply(null, nodejsUtils.allocBuffer(1)) - .length === 1 - ); - } catch (e) { - return false; - } - })(), - }, - }; - - /** - * Transform an array-like object to a string. - * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform. - * @return {String} the result. - */ - function arrayLikeToString(array) { - // Performances notes : - // -------------------- - // String.fromCharCode.apply(null, array) is the fastest, see - // see http://jsperf.com/converting-a-uint8array-to-a-string/2 - // but the stack is limited (and we can get huge arrays !). - // - // result += String.fromCharCode(array[i]); generate too many strings ! - // - // This code is inspired by http://jsperf.com/arraybuffer-to-string-apply-performance/2 - // TODO : we now have workers that split the work. Do we still need that ? - var chunk = 65536, - type = exports.getTypeOf(array), - canUseApply = true; - if (type === "uint8array") { - canUseApply = arrayToStringHelper.applyCanBeUsed.uint8array; - } else if (type === "nodebuffer") { - canUseApply = arrayToStringHelper.applyCanBeUsed.nodebuffer; - } - - if (canUseApply) { - while (chunk > 1) { - try { - return arrayToStringHelper.stringifyByChunk( - array, - type, - chunk, - ); - } catch (e) { - chunk = Math.floor(chunk / 2); - } - } - } - - // no apply or chunk error : slow and painful algorithm - // default browser on android 4.* - return arrayToStringHelper.stringifyByChar(array); - } - - exports.applyFromCharCode = arrayLikeToString; - - /** - * Copy the data from an array-like to an other array-like. - * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayFrom the origin array. - * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayTo the destination array which will be mutated. - * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated destination array. - */ - function arrayLikeToArrayLike(arrayFrom, arrayTo) { - for (var i = 0; i < arrayFrom.length; i++) { - arrayTo[i] = arrayFrom[i]; - } - return arrayTo; - } - - // a matrix containing functions to transform everything into everything. - var transform = {}; - - // string to ? - transform["string"] = { - string: identity, - array: function (input) { - return stringToArrayLike(input, new Array(input.length)); - }, - arraybuffer: function (input) { - return transform["string"]["uint8array"](input).buffer; - }, - uint8array: function (input) { - return stringToArrayLike(input, new Uint8Array(input.length)); - }, - nodebuffer: function (input) { - return stringToArrayLike( - input, - nodejsUtils.allocBuffer(input.length), - ); - }, - }; - - // array to ? - transform["array"] = { - string: arrayLikeToString, - array: identity, - arraybuffer: function (input) { - return new Uint8Array(input).buffer; - }, - uint8array: function (input) { - return new Uint8Array(input); - }, - nodebuffer: function (input) { - return nodejsUtils.newBufferFrom(input); - }, - }; - - // arraybuffer to ? - transform["arraybuffer"] = { - string: function (input) { - return arrayLikeToString(new Uint8Array(input)); - }, - array: function (input) { - return arrayLikeToArrayLike( - new Uint8Array(input), - new Array(input.byteLength), - ); - }, - arraybuffer: identity, - uint8array: function (input) { - return new Uint8Array(input); - }, - nodebuffer: function (input) { - return nodejsUtils.newBufferFrom(new Uint8Array(input)); - }, - }; - - // uint8array to ? - transform["uint8array"] = { - string: arrayLikeToString, - array: function (input) { - return arrayLikeToArrayLike(input, new Array(input.length)); - }, - arraybuffer: function (input) { - return input.buffer; - }, - uint8array: identity, - nodebuffer: function (input) { - return nodejsUtils.newBufferFrom(input); - }, - }; - - // nodebuffer to ? - transform["nodebuffer"] = { - string: arrayLikeToString, - array: function (input) { - return arrayLikeToArrayLike(input, new Array(input.length)); - }, - arraybuffer: function (input) { - return transform["nodebuffer"]["uint8array"](input).buffer; - }, - uint8array: function (input) { - return arrayLikeToArrayLike(input, new Uint8Array(input.length)); - }, - nodebuffer: identity, - }; - - /** - * Transform an input into any type. - * The supported output type are : string, array, uint8array, arraybuffer, nodebuffer. - * If no output type is specified, the unmodified input will be returned. - * @param {String} outputType the output type. - * @param {String|Array|ArrayBuffer|Uint8Array|Buffer} input the input to convert. - * @throws {Error} an Error if the browser doesn't support the requested output type. - */ - exports.transformTo = function (outputType, input) { - if (!input) { - // undefined, null, etc - // an empty string won't harm. - input = ""; - } - if (!outputType) { - return input; - } - exports.checkSupport(outputType); - var inputType = exports.getTypeOf(input); - var result = transform[inputType][outputType](input); - return result; - }; - - /** - * Resolve all relative path components, "." and "..", in a path. If these relative components - * traverse above the root then the resulting path will only contain the final path component. - * - * All empty components, e.g. "//", are removed. - * @param {string} path A path with / or \ separators - * @returns {string} The path with all relative path components resolved. - */ - exports.resolve = function (path) { - var parts = path.split("/"); - var result = []; - for (var index = 0; index < parts.length; index++) { - var part = parts[index]; - // Allow the first and last component to be empty for trailing slashes. - if ( - part === "." || - (part === "" && index !== 0 && index !== parts.length - 1) - ) { - continue; - } else if (part === "..") { - result.pop(); - } else { - result.push(part); - } - } - return result.join("/"); - }; - - /** - * Return the type of the input. - * The type will be in a format valid for JSZip.utils.transformTo : string, array, uint8array, arraybuffer. - * @param {Object} input the input to identify. - * @return {String} the (lowercase) type of the input. - */ - exports.getTypeOf = function (input) { - if (typeof input === "string") { - return "string"; - } - if (Object.prototype.toString.call(input) === "[object Array]") { - return "array"; - } - if (support.nodebuffer && nodejsUtils.isBuffer(input)) { - return "nodebuffer"; - } - if (support.uint8array && input instanceof Uint8Array) { - return "uint8array"; - } - if (support.arraybuffer && input instanceof ArrayBuffer) { - return "arraybuffer"; - } - }; - - /** - * Throw an exception if the type is not supported. - * @param {String} type the type to check. - * @throws {Error} an Error if the browser doesn't support the requested type. - */ - exports.checkSupport = function (type) { - var supported = support[type.toLowerCase()]; - if (!supported) { - throw new Error(type + " is not supported by this platform"); - } - }; - - exports.MAX_VALUE_16BITS = 65535; - exports.MAX_VALUE_32BITS = -1; // well, "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" is parsed as -1 - - /** - * Prettify a string read as binary. - * @param {string} str the string to prettify. - * @return {string} a pretty string. - */ - exports.pretty = function (str) { - var res = "", - code, - i; - for (i = 0; i < (str || "").length; i++) { - code = str.charCodeAt(i); - res += - "\\x" + - (code < 16 ? "0" : "") + - code.toString(16).toUpperCase(); - } - return res; - }; - - /** - * Defer the call of a function. - * @param {Function} callback the function to call asynchronously. - * @param {Array} args the arguments to give to the callback. - */ - exports.delay = function (callback, args, self) { - setImmediate(function () { - callback.apply(self || null, args || []); - }); - }; - - /** - * Extends a prototype with an other, without calling a constructor with - * side effects. Inspired by nodejs' `utils.inherits` - * @param {Function} ctor the constructor to augment - * @param {Function} superCtor the parent constructor to use - */ - exports.inherits = function (ctor, superCtor) { - var Obj = function () {}; - Obj.prototype = superCtor.prototype; - ctor.prototype = new Obj(); - }; - - /** - * Merge the objects passed as parameters into a new one. - * @private - * @param {...Object} var_args All objects to merge. - * @return {Object} a new object with the data of the others. - */ - exports.extend = function () { - var result = {}, - i, - attr; - for (i = 0; i < arguments.length; i++) { - // arguments is not enumerable in some browsers - for (attr in arguments[i]) { - if ( - Object.prototype.hasOwnProperty.call(arguments[i], attr) && - typeof result[attr] === "undefined" - ) { - result[attr] = arguments[i][attr]; - } - } - } - return result; - }; - - /** - * Transform arbitrary content into a Promise. - * @param {String} name a name for the content being processed. - * @param {Object} inputData the content to process. - * @param {Boolean} isBinary true if the content is not an unicode string - * @param {Boolean} isOptimizedBinaryString true if the string content only has one byte per character. - * @param {Boolean} isBase64 true if the string content is encoded with base64. - * @return {Promise} a promise in a format usable by JSZip. - */ - exports.prepareContent = function ( - name, - inputData, - isBinary, - isOptimizedBinaryString, - isBase64, - ) { - // if inputData is already a promise, this flatten it. - var promise = external.Promise.resolve(inputData).then( - function (data) { - var isBlob = - support.blob && - (data instanceof Blob || - ["[object File]", "[object Blob]"].indexOf( - Object.prototype.toString.call(data), - ) !== -1); - - if (isBlob && typeof FileReader !== "undefined") { - return new external.Promise(function (resolve, reject) { - var reader = new FileReader(); - - reader.onload = function (e) { - resolve(e.target.result); - }; - reader.onerror = function (e) { - reject(e.target.error); - }; - reader.readAsArrayBuffer(data); - }); - } else { - return data; - } - }, - ); - - return promise.then(function (data) { - var dataType = exports.getTypeOf(data); - - if (!dataType) { - return external.Promise.reject( - new Error( - "Can't read the data of '" + - name + - "'. Is it " + - "in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?", - ), - ); - } - // special case : it's way easier to work with Uint8Array than with ArrayBuffer - if (dataType === "arraybuffer") { - data = exports.transformTo("uint8array", data); - } else if (dataType === "string") { - if (isBase64) { - data = base64.decode(data); - } else if (isBinary) { - // optimizedBinaryString === true means that the file has already been filtered with a 0xFF mask - if (isOptimizedBinaryString !== true) { - // this is a string, not in a base64 format. - // Be sure that this is a correct "binary string" - data = string2binary(data); - } - } - } - return data; - }); - }; - }, - { - "./base64": 1, - "./external": 6, - "./nodejsUtils": 14, - "./support": 30, - setimmediate: 54, - }, - ], - 33: [ - function (require, module, exports) { - "use strict"; - var readerFor = require("./reader/readerFor"); - var utils = require("./utils"); - var sig = require("./signature"); - var ZipEntry = require("./zipEntry"); - var support = require("./support"); - // class ZipEntries {{{ - /** - * All the entries in the zip file. - * @constructor - * @param {Object} loadOptions Options for loading the stream. - */ - function ZipEntries(loadOptions) { - this.files = []; - this.loadOptions = loadOptions; - } - ZipEntries.prototype = { - /** - * Check that the reader is on the specified signature. - * @param {string} expectedSignature the expected signature. - * @throws {Error} if it is an other signature. - */ - checkSignature: function (expectedSignature) { - if (!this.reader.readAndCheckSignature(expectedSignature)) { - this.reader.index -= 4; - var signature = this.reader.readString(4); - throw new Error( - "Corrupted zip or bug: unexpected signature " + - "(" + - utils.pretty(signature) + - ", expected " + - utils.pretty(expectedSignature) + - ")", - ); - } - }, - /** - * Check if the given signature is at the given index. - * @param {number} askedIndex the index to check. - * @param {string} expectedSignature the signature to expect. - * @return {boolean} true if the signature is here, false otherwise. - */ - isSignature: function (askedIndex, expectedSignature) { - var currentIndex = this.reader.index; - this.reader.setIndex(askedIndex); - var signature = this.reader.readString(4); - var result = signature === expectedSignature; - this.reader.setIndex(currentIndex); - return result; - }, - /** - * Read the end of the central directory. - */ - readBlockEndOfCentral: function () { - this.diskNumber = this.reader.readInt(2); - this.diskWithCentralDirStart = this.reader.readInt(2); - this.centralDirRecordsOnThisDisk = this.reader.readInt(2); - this.centralDirRecords = this.reader.readInt(2); - this.centralDirSize = this.reader.readInt(4); - this.centralDirOffset = this.reader.readInt(4); - - this.zipCommentLength = this.reader.readInt(2); - // warning : the encoding depends of the system locale - // On a linux machine with LANG=en_US.utf8, this field is utf8 encoded. - // On a windows machine, this field is encoded with the localized windows code page. - var zipComment = this.reader.readData(this.zipCommentLength); - var decodeParamType = support.uint8array ? "uint8array" : "array"; - // To get consistent behavior with the generation part, we will assume that - // this is utf8 encoded unless specified otherwise. - var decodeContent = utils.transformTo( - decodeParamType, - zipComment, - ); - this.zipComment = this.loadOptions.decodeFileName(decodeContent); - }, - /** - * Read the end of the Zip 64 central directory. - * Not merged with the method readEndOfCentral : - * The end of central can coexist with its Zip64 brother, - * I don't want to read the wrong number of bytes ! - */ - readBlockZip64EndOfCentral: function () { - this.zip64EndOfCentralSize = this.reader.readInt(8); - this.reader.skip(4); - // this.versionMadeBy = this.reader.readString(2); - // this.versionNeeded = this.reader.readInt(2); - this.diskNumber = this.reader.readInt(4); - this.diskWithCentralDirStart = this.reader.readInt(4); - this.centralDirRecordsOnThisDisk = this.reader.readInt(8); - this.centralDirRecords = this.reader.readInt(8); - this.centralDirSize = this.reader.readInt(8); - this.centralDirOffset = this.reader.readInt(8); - - this.zip64ExtensibleData = {}; - var extraDataSize = this.zip64EndOfCentralSize - 44, - index = 0, - extraFieldId, - extraFieldLength, - extraFieldValue; - while (index < extraDataSize) { - extraFieldId = this.reader.readInt(2); - extraFieldLength = this.reader.readInt(4); - extraFieldValue = this.reader.readData(extraFieldLength); - this.zip64ExtensibleData[extraFieldId] = { - id: extraFieldId, - length: extraFieldLength, - value: extraFieldValue, - }; - } - }, - /** - * Read the end of the Zip 64 central directory locator. - */ - readBlockZip64EndOfCentralLocator: function () { - this.diskWithZip64CentralDirStart = this.reader.readInt(4); - this.relativeOffsetEndOfZip64CentralDir = this.reader.readInt(8); - this.disksCount = this.reader.readInt(4); - if (this.disksCount > 1) { - throw new Error("Multi-volumes zip are not supported"); - } - }, - /** - * Read the local files, based on the offset read in the central part. - */ - readLocalFiles: function () { - var i, file; - for (i = 0; i < this.files.length; i++) { - file = this.files[i]; - this.reader.setIndex(file.localHeaderOffset); - this.checkSignature(sig.LOCAL_FILE_HEADER); - file.readLocalPart(this.reader); - file.handleUTF8(); - file.processAttributes(); - } - }, - /** - * Read the central directory. - */ - readCentralDir: function () { - var file; - - this.reader.setIndex(this.centralDirOffset); - while ( - this.reader.readAndCheckSignature(sig.CENTRAL_FILE_HEADER) - ) { - file = new ZipEntry( - { - zip64: this.zip64, - }, - this.loadOptions, - ); - file.readCentralPart(this.reader); - this.files.push(file); - } - - if (this.centralDirRecords !== this.files.length) { - if (this.centralDirRecords !== 0 && this.files.length === 0) { - // We expected some records but couldn't find ANY. - // This is really suspicious, as if something went wrong. - throw new Error( - "Corrupted zip or bug: expected " + - this.centralDirRecords + - " records in central dir, got " + - this.files.length, - ); - } else { - // We found some records but not all. - // Something is wrong but we got something for the user: no error here. - // console.warn("expected", this.centralDirRecords, "records in central dir, got", this.files.length); - } - } - }, - /** - * Read the end of central directory. - */ - readEndOfCentral: function () { - var offset = this.reader.lastIndexOfSignature( - sig.CENTRAL_DIRECTORY_END, - ); - if (offset < 0) { - // Check if the content is a truncated zip or complete garbage. - // A "LOCAL_FILE_HEADER" is not required at the beginning (auto - // extractible zip for example) but it can give a good hint. - // If an ajax request was used without responseType, we will also - // get unreadable data. - var isGarbage = !this.isSignature(0, sig.LOCAL_FILE_HEADER); - - if (isGarbage) { - throw new Error( - "Can't find end of central directory : is this a zip file ? " + - "If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html", - ); - } else { - throw new Error( - "Corrupted zip: can't find end of central directory", - ); - } - } - this.reader.setIndex(offset); - var endOfCentralDirOffset = offset; - this.checkSignature(sig.CENTRAL_DIRECTORY_END); - this.readBlockEndOfCentral(); - - /* extract from the zip spec : - 4) If one of the fields in the end of central directory - record is too small to hold required data, the field - should be set to -1 (0xFFFF or 0xFFFFFFFF) and the - ZIP64 format record should be created. - 5) The end of central directory record and the - Zip64 end of central directory locator record must - reside on the same disk when splitting or spanning - an archive. - */ - if ( - this.diskNumber === utils.MAX_VALUE_16BITS || - this.diskWithCentralDirStart === utils.MAX_VALUE_16BITS || - this.centralDirRecordsOnThisDisk === utils.MAX_VALUE_16BITS || - this.centralDirRecords === utils.MAX_VALUE_16BITS || - this.centralDirSize === utils.MAX_VALUE_32BITS || - this.centralDirOffset === utils.MAX_VALUE_32BITS - ) { - this.zip64 = true; - - /* - Warning : the zip64 extension is supported, but ONLY if the 64bits integer read from - the zip file can fit into a 32bits integer. This cannot be solved : JavaScript represents - all numbers as 64-bit double precision IEEE 754 floating point numbers. - So, we have 53bits for integers and bitwise operations treat everything as 32bits. - see https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Bitwise_Operators - and http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf section 8.5 - */ - - // should look for a zip64 EOCD locator - offset = this.reader.lastIndexOfSignature( - sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR, - ); - if (offset < 0) { - throw new Error( - "Corrupted zip: can't find the ZIP64 end of central directory locator", - ); - } - this.reader.setIndex(offset); - this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR); - this.readBlockZip64EndOfCentralLocator(); - - // now the zip64 EOCD record - if ( - !this.isSignature( - this.relativeOffsetEndOfZip64CentralDir, - sig.ZIP64_CENTRAL_DIRECTORY_END, - ) - ) { - // console.warn("ZIP64 end of central directory not where expected."); - this.relativeOffsetEndOfZip64CentralDir = - this.reader.lastIndexOfSignature( - sig.ZIP64_CENTRAL_DIRECTORY_END, - ); - if (this.relativeOffsetEndOfZip64CentralDir < 0) { - throw new Error( - "Corrupted zip: can't find the ZIP64 end of central directory", - ); - } - } - this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir); - this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_END); - this.readBlockZip64EndOfCentral(); - } - - var expectedEndOfCentralDirOffset = - this.centralDirOffset + this.centralDirSize; - if (this.zip64) { - expectedEndOfCentralDirOffset += 20; // end of central dir 64 locator - expectedEndOfCentralDirOffset += - 12 /* should not include the leading 12 bytes */ + - this.zip64EndOfCentralSize; - } - - var extraBytes = - endOfCentralDirOffset - expectedEndOfCentralDirOffset; - - if (extraBytes > 0) { - // console.warn(extraBytes, "extra bytes at beginning or within zipfile"); - if ( - this.isSignature( - endOfCentralDirOffset, - sig.CENTRAL_FILE_HEADER, - ) - ) { - // The offsets seem wrong, but we have something at the specified offset. - // So… we keep it. - } else { - // the offset is wrong, update the "zero" of the reader - // this happens if data has been prepended (crx files for example) - this.reader.zero = extraBytes; - } - } else if (extraBytes < 0) { - throw new Error( - "Corrupted zip: missing " + Math.abs(extraBytes) + " bytes.", - ); - } - }, - prepareReader: function (data) { - this.reader = readerFor(data); - }, - /** - * Read a zip file and create ZipEntries. - * @param {String|ArrayBuffer|Uint8Array|Buffer} data the binary string representing a zip file. - */ - load: function (data) { - this.prepareReader(data); - this.readEndOfCentral(); - this.readCentralDir(); - this.readLocalFiles(); - }, - }; - // }}} end of ZipEntries - module.exports = ZipEntries; - }, - { - "./reader/readerFor": 22, - "./signature": 23, - "./support": 30, - "./utils": 32, - "./zipEntry": 34, - }, - ], - 34: [ - function (require, module, exports) { - "use strict"; - var readerFor = require("./reader/readerFor"); - var utils = require("./utils"); - var CompressedObject = require("./compressedObject"); - var crc32fn = require("./crc32"); - var utf8 = require("./utf8"); - var compressions = require("./compressions"); - var support = require("./support"); - - var MADE_BY_DOS = 0x00; - var MADE_BY_UNIX = 0x03; - - /** - * Find a compression registered in JSZip. - * @param {string} compressionMethod the method magic to find. - * @return {Object|null} the JSZip compression object, null if none found. - */ - var findCompression = function (compressionMethod) { - for (var method in compressions) { - if (!Object.prototype.hasOwnProperty.call(compressions, method)) { - continue; - } - if (compressions[method].magic === compressionMethod) { - return compressions[method]; - } - } - return null; - }; - - // class ZipEntry {{{ - /** - * An entry in the zip file. - * @constructor - * @param {Object} options Options of the current file. - * @param {Object} loadOptions Options for loading the stream. - */ - function ZipEntry(options, loadOptions) { - this.options = options; - this.loadOptions = loadOptions; - } - ZipEntry.prototype = { - /** - * say if the file is encrypted. - * @return {boolean} true if the file is encrypted, false otherwise. - */ - isEncrypted: function () { - // bit 1 is set - return (this.bitFlag & 0x0001) === 0x0001; - }, - /** - * say if the file has utf-8 filename/comment. - * @return {boolean} true if the filename/comment is in utf-8, false otherwise. - */ - useUTF8: function () { - // bit 11 is set - return (this.bitFlag & 0x0800) === 0x0800; - }, - /** - * Read the local part of a zip file and add the info in this object. - * @param {DataReader} reader the reader to use. - */ - readLocalPart: function (reader) { - var compression, localExtraFieldsLength; - - // we already know everything from the central dir ! - // If the central dir data are false, we are doomed. - // On the bright side, the local part is scary : zip64, data descriptors, both, etc. - // The less data we get here, the more reliable this should be. - // Let's skip the whole header and dash to the data ! - reader.skip(22); - // in some zip created on windows, the filename stored in the central dir contains \ instead of /. - // Strangely, the filename here is OK. - // I would love to treat these zip files as corrupted (see http://www.info-zip.org/FAQ.html#backslashes - // or APPNOTE#4.4.17.1, "All slashes MUST be forward slashes '/'") but there are a lot of bad zip generators... - // Search "unzip mismatching "local" filename continuing with "central" filename version" on - // the internet. - // - // I think I see the logic here : the central directory is used to display - // content and the local directory is used to extract the files. Mixing / and \ - // may be used to display \ to windows users and use / when extracting the files. - // Unfortunately, this lead also to some issues : http://seclists.org/fulldisclosure/2009/Sep/394 - this.fileNameLength = reader.readInt(2); - localExtraFieldsLength = reader.readInt(2); // can't be sure this will be the same as the central dir - // the fileName is stored as binary data, the handleUTF8 method will take care of the encoding. - this.fileName = reader.readData(this.fileNameLength); - reader.skip(localExtraFieldsLength); - - if (this.compressedSize === -1 || this.uncompressedSize === -1) { - throw new Error( - "Bug or corrupted zip : didn't get enough information from the central directory " + - "(compressedSize === -1 || uncompressedSize === -1)", - ); - } - - compression = findCompression(this.compressionMethod); - if (compression === null) { - // no compression found - throw new Error( - "Corrupted zip : compression " + - utils.pretty(this.compressionMethod) + - " unknown (inner file : " + - utils.transformTo("string", this.fileName) + - ")", - ); - } - this.decompressed = new CompressedObject( - this.compressedSize, - this.uncompressedSize, - this.crc32, - compression, - reader.readData(this.compressedSize), - ); - }, - - /** - * Read the central part of a zip file and add the info in this object. - * @param {DataReader} reader the reader to use. - */ - readCentralPart: function (reader) { - this.versionMadeBy = reader.readInt(2); - reader.skip(2); - // this.versionNeeded = reader.readInt(2); - this.bitFlag = reader.readInt(2); - this.compressionMethod = reader.readString(2); - this.date = reader.readDate(); - this.crc32 = reader.readInt(4); - this.compressedSize = reader.readInt(4); - this.uncompressedSize = reader.readInt(4); - var fileNameLength = reader.readInt(2); - this.extraFieldsLength = reader.readInt(2); - this.fileCommentLength = reader.readInt(2); - this.diskNumberStart = reader.readInt(2); - this.internalFileAttributes = reader.readInt(2); - this.externalFileAttributes = reader.readInt(4); - this.localHeaderOffset = reader.readInt(4); - - if (this.isEncrypted()) { - throw new Error("Encrypted zip are not supported"); - } - - // will be read in the local part, see the comments there - reader.skip(fileNameLength); - this.readExtraFields(reader); - this.parseZIP64ExtraField(reader); - this.fileComment = reader.readData(this.fileCommentLength); - }, - - /** - * Parse the external file attributes and get the unix/dos permissions. - */ - processAttributes: function () { - this.unixPermissions = null; - this.dosPermissions = null; - var madeBy = this.versionMadeBy >> 8; - - // Check if we have the DOS directory flag set. - // We look for it in the DOS and UNIX permissions - // but some unknown platform could set it as a compatibility flag. - this.dir = this.externalFileAttributes & 0x0010 ? true : false; - - if (madeBy === MADE_BY_DOS) { - // first 6 bits (0 to 5) - this.dosPermissions = this.externalFileAttributes & 0x3f; - } - - if (madeBy === MADE_BY_UNIX) { - this.unixPermissions = - (this.externalFileAttributes >> 16) & 0xffff; - // the octal permissions are in (this.unixPermissions & 0x01FF).toString(8); - } - - // fail safe : if the name ends with a / it probably means a folder - if (!this.dir && this.fileNameStr.slice(-1) === "/") { - this.dir = true; - } - }, - - /** - * Parse the ZIP64 extra field and merge the info in the current ZipEntry. - * @param {DataReader} reader the reader to use. - */ - parseZIP64ExtraField: function () { - if (!this.extraFields[0x0001]) { - return; - } - - // should be something, preparing the extra reader - var extraReader = readerFor(this.extraFields[0x0001].value); - - // I really hope that these 64bits integer can fit in 32 bits integer, because js - // won't let us have more. - if (this.uncompressedSize === utils.MAX_VALUE_32BITS) { - this.uncompressedSize = extraReader.readInt(8); - } - if (this.compressedSize === utils.MAX_VALUE_32BITS) { - this.compressedSize = extraReader.readInt(8); - } - if (this.localHeaderOffset === utils.MAX_VALUE_32BITS) { - this.localHeaderOffset = extraReader.readInt(8); - } - if (this.diskNumberStart === utils.MAX_VALUE_32BITS) { - this.diskNumberStart = extraReader.readInt(4); - } - }, - /** - * Read the central part of a zip file and add the info in this object. - * @param {DataReader} reader the reader to use. - */ - readExtraFields: function (reader) { - var end = reader.index + this.extraFieldsLength, - extraFieldId, - extraFieldLength, - extraFieldValue; - - if (!this.extraFields) { - this.extraFields = {}; - } - - while (reader.index + 4 < end) { - extraFieldId = reader.readInt(2); - extraFieldLength = reader.readInt(2); - extraFieldValue = reader.readData(extraFieldLength); - - this.extraFields[extraFieldId] = { - id: extraFieldId, - length: extraFieldLength, - value: extraFieldValue, - }; - } - - reader.setIndex(end); - }, - /** - * Apply an UTF8 transformation if needed. - */ - handleUTF8: function () { - var decodeParamType = support.uint8array ? "uint8array" : "array"; - if (this.useUTF8()) { - this.fileNameStr = utf8.utf8decode(this.fileName); - this.fileCommentStr = utf8.utf8decode(this.fileComment); - } else { - var upath = this.findExtraFieldUnicodePath(); - if (upath !== null) { - this.fileNameStr = upath; - } else { - // ASCII text or unsupported code page - var fileNameByteArray = utils.transformTo( - decodeParamType, - this.fileName, - ); - this.fileNameStr = - this.loadOptions.decodeFileName(fileNameByteArray); - } - - var ucomment = this.findExtraFieldUnicodeComment(); - if (ucomment !== null) { - this.fileCommentStr = ucomment; - } else { - // ASCII text or unsupported code page - var commentByteArray = utils.transformTo( - decodeParamType, - this.fileComment, - ); - this.fileCommentStr = - this.loadOptions.decodeFileName(commentByteArray); - } - } - }, - - /** - * Find the unicode path declared in the extra field, if any. - * @return {String} the unicode path, null otherwise. - */ - findExtraFieldUnicodePath: function () { - var upathField = this.extraFields[0x7075]; - if (upathField) { - var extraReader = readerFor(upathField.value); - - // wrong version - if (extraReader.readInt(1) !== 1) { - return null; - } - - // the crc of the filename changed, this field is out of date. - if (crc32fn(this.fileName) !== extraReader.readInt(4)) { - return null; - } - - return utf8.utf8decode( - extraReader.readData(upathField.length - 5), - ); - } - return null; - }, - - /** - * Find the unicode comment declared in the extra field, if any. - * @return {String} the unicode comment, null otherwise. - */ - findExtraFieldUnicodeComment: function () { - var ucommentField = this.extraFields[0x6375]; - if (ucommentField) { - var extraReader = readerFor(ucommentField.value); - - // wrong version - if (extraReader.readInt(1) !== 1) { - return null; - } - - // the crc of the comment changed, this field is out of date. - if (crc32fn(this.fileComment) !== extraReader.readInt(4)) { - return null; - } - - return utf8.utf8decode( - extraReader.readData(ucommentField.length - 5), - ); - } - return null; - }, - }; - module.exports = ZipEntry; - }, - { - "./compressedObject": 2, - "./compressions": 3, - "./crc32": 4, - "./reader/readerFor": 22, - "./support": 30, - "./utf8": 31, - "./utils": 32, - }, - ], - 35: [ - function (require, module, exports) { - "use strict"; - - var StreamHelper = require("./stream/StreamHelper"); - var DataWorker = require("./stream/DataWorker"); - var utf8 = require("./utf8"); - var CompressedObject = require("./compressedObject"); - var GenericWorker = require("./stream/GenericWorker"); - - /** - * A simple object representing a file in the zip file. - * @constructor - * @param {string} name the name of the file - * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data - * @param {Object} options the options of the file - */ - var ZipObject = function (name, data, options) { - this.name = name; - this.dir = options.dir; - this.date = options.date; - this.comment = options.comment; - this.unixPermissions = options.unixPermissions; - this.dosPermissions = options.dosPermissions; - - this._data = data; - this._dataBinary = options.binary; - // keep only the compression - this.options = { - compression: options.compression, - compressionOptions: options.compressionOptions, - }; - }; - - ZipObject.prototype = { - /** - * Create an internal stream for the content of this object. - * @param {String} type the type of each chunk. - * @return StreamHelper the stream. - */ - internalStream: function (type) { - var result = null, - outputType = "string"; - try { - if (!type) { - throw new Error("No output type specified."); - } - outputType = type.toLowerCase(); - var askUnicodeString = - outputType === "string" || outputType === "text"; - if (outputType === "binarystring" || outputType === "text") { - outputType = "string"; - } - result = this._decompressWorker(); - - var isUnicodeString = !this._dataBinary; - - if (isUnicodeString && !askUnicodeString) { - result = result.pipe(new utf8.Utf8EncodeWorker()); - } - if (!isUnicodeString && askUnicodeString) { - result = result.pipe(new utf8.Utf8DecodeWorker()); - } - } catch (e) { - result = new GenericWorker("error"); - result.error(e); - } - - return new StreamHelper(result, outputType, ""); - }, - - /** - * Prepare the content in the asked type. - * @param {String} type the type of the result. - * @param {Function} onUpdate a function to call on each internal update. - * @return Promise the promise of the result. - */ - async: function (type, onUpdate) { - return this.internalStream(type).accumulate(onUpdate); - }, - - /** - * Prepare the content as a nodejs stream. - * @param {String} type the type of each chunk. - * @param {Function} onUpdate a function to call on each internal update. - * @return Stream the stream. - */ - nodeStream: function (type, onUpdate) { - return this.internalStream(type || "nodebuffer").toNodejsStream( - onUpdate, - ); - }, - - /** - * Return a worker for the compressed content. - * @private - * @param {Object} compression the compression object to use. - * @param {Object} compressionOptions the options to use when compressing. - * @return Worker the worker. - */ - _compressWorker: function (compression, compressionOptions) { - if ( - this._data instanceof CompressedObject && - this._data.compression.magic === compression.magic - ) { - return this._data.getCompressedWorker(); - } else { - var result = this._decompressWorker(); - if (!this._dataBinary) { - result = result.pipe(new utf8.Utf8EncodeWorker()); - } - return CompressedObject.createWorkerFrom( - result, - compression, - compressionOptions, - ); - } - }, - /** - * Return a worker for the decompressed content. - * @private - * @return Worker the worker. - */ - _decompressWorker: function () { - if (this._data instanceof CompressedObject) { - return this._data.getContentWorker(); - } else if (this._data instanceof GenericWorker) { - return this._data; - } else { - return new DataWorker(this._data); - } - }, - }; - - var removedMethods = [ - "asText", - "asBinary", - "asNodeBuffer", - "asUint8Array", - "asArrayBuffer", - ]; - var removedFn = function () { - throw new Error( - "This method has been removed in JSZip 3.0, please check the upgrade guide.", - ); - }; - - for (var i = 0; i < removedMethods.length; i++) { - ZipObject.prototype[removedMethods[i]] = removedFn; - } - module.exports = ZipObject; - }, - { - "./compressedObject": 2, - "./stream/DataWorker": 27, - "./stream/GenericWorker": 28, - "./stream/StreamHelper": 29, - "./utf8": 31, - }, - ], - 36: [ - function (require, module, exports) { - (function (global) { - "use strict"; - var Mutation = - global.MutationObserver || global.WebKitMutationObserver; - - var scheduleDrain; - - { - if (Mutation) { - var called = 0; - var observer = new Mutation(nextTick); - var element = global.document.createTextNode(""); - observer.observe(element, { - characterData: true, - }); - scheduleDrain = function () { - element.data = called = ++called % 2; - }; - } else if ( - !global.setImmediate && - typeof global.MessageChannel !== "undefined" - ) { - var channel = new global.MessageChannel(); - channel.port1.onmessage = nextTick; - scheduleDrain = function () { - channel.port2.postMessage(0); - }; - } else if ( - "document" in global && - "onreadystatechange" in global.document.createElement("script") - ) { - scheduleDrain = function () { - // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted - // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called. - var scriptEl = global.document.createElement("script"); - scriptEl.onreadystatechange = function () { - nextTick(); - - scriptEl.onreadystatechange = null; - scriptEl.parentNode.removeChild(scriptEl); - scriptEl = null; - }; - global.document.documentElement.appendChild(scriptEl); - }; - } else { - scheduleDrain = function () { - setTimeout(nextTick, 0); - }; - } - } - - var draining; - var queue = []; - //named nextTick for less confusing stack traces - function nextTick() { - draining = true; - var i, oldQueue; - var len = queue.length; - while (len) { - oldQueue = queue; - queue = []; - i = -1; - while (++i < len) { - oldQueue[i](); - } - len = queue.length; - } - draining = false; - } - - module.exports = immediate; - function immediate(task) { - if (queue.push(task) === 1 && !draining) { - scheduleDrain(); - } - } - }).call( - this, - typeof global !== "undefined" - ? global - : typeof self !== "undefined" - ? self - : typeof window !== "undefined" - ? window - : {}, - ); - }, - {}, - ], - 37: [ - function (require, module, exports) { - "use strict"; - var immediate = require("immediate"); - - /* istanbul ignore next */ - function INTERNAL() {} - - var handlers = {}; - - var REJECTED = ["REJECTED"]; - var FULFILLED = ["FULFILLED"]; - var PENDING = ["PENDING"]; - - module.exports = Promise; - - function Promise(resolver) { - if (typeof resolver !== "function") { - throw new TypeError("resolver must be a function"); - } - this.state = PENDING; - this.queue = []; - this.outcome = void 0; - if (resolver !== INTERNAL) { - safelyResolveThenable(this, resolver); - } - } - - Promise.prototype["finally"] = function (callback) { - if (typeof callback !== "function") { - return this; - } - var p = this.constructor; - return this.then(resolve, reject); - - function resolve(value) { - function yes() { - return value; - } - return p.resolve(callback()).then(yes); - } - function reject(reason) { - function no() { - throw reason; - } - return p.resolve(callback()).then(no); - } - }; - Promise.prototype["catch"] = function (onRejected) { - return this.then(null, onRejected); - }; - Promise.prototype.then = function (onFulfilled, onRejected) { - if ( - (typeof onFulfilled !== "function" && this.state === FULFILLED) || - (typeof onRejected !== "function" && this.state === REJECTED) - ) { - return this; - } - var promise = new this.constructor(INTERNAL); - if (this.state !== PENDING) { - var resolver = - this.state === FULFILLED ? onFulfilled : onRejected; - unwrap(promise, resolver, this.outcome); - } else { - this.queue.push(new QueueItem(promise, onFulfilled, onRejected)); - } - - return promise; - }; - function QueueItem(promise, onFulfilled, onRejected) { - this.promise = promise; - if (typeof onFulfilled === "function") { - this.onFulfilled = onFulfilled; - this.callFulfilled = this.otherCallFulfilled; - } - if (typeof onRejected === "function") { - this.onRejected = onRejected; - this.callRejected = this.otherCallRejected; - } - } - QueueItem.prototype.callFulfilled = function (value) { - handlers.resolve(this.promise, value); - }; - QueueItem.prototype.otherCallFulfilled = function (value) { - unwrap(this.promise, this.onFulfilled, value); - }; - QueueItem.prototype.callRejected = function (value) { - handlers.reject(this.promise, value); - }; - QueueItem.prototype.otherCallRejected = function (value) { - unwrap(this.promise, this.onRejected, value); - }; - - function unwrap(promise, func, value) { - immediate(function () { - var returnValue; - try { - returnValue = func(value); - } catch (e) { - return handlers.reject(promise, e); - } - if (returnValue === promise) { - handlers.reject( - promise, - new TypeError("Cannot resolve promise with itself"), - ); - } else { - handlers.resolve(promise, returnValue); - } - }); - } - - handlers.resolve = function (self, value) { - var result = tryCatch(getThen, value); - if (result.status === "error") { - return handlers.reject(self, result.value); - } - var thenable = result.value; - - if (thenable) { - safelyResolveThenable(self, thenable); - } else { - self.state = FULFILLED; - self.outcome = value; - var i = -1; - var len = self.queue.length; - while (++i < len) { - self.queue[i].callFulfilled(value); - } - } - return self; - }; - handlers.reject = function (self, error) { - self.state = REJECTED; - self.outcome = error; - var i = -1; - var len = self.queue.length; - while (++i < len) { - self.queue[i].callRejected(error); - } - return self; - }; - - function getThen(obj) { - // Make sure we only access the accessor once as required by the spec - var then = obj && obj.then; - if ( - obj && - (typeof obj === "object" || typeof obj === "function") && - typeof then === "function" - ) { - return function appyThen() { - then.apply(obj, arguments); - }; - } - } - - function safelyResolveThenable(self, thenable) { - // Either fulfill, reject or reject with error - var called = false; - function onError(value) { - if (called) { - return; - } - called = true; - handlers.reject(self, value); - } - - function onSuccess(value) { - if (called) { - return; - } - called = true; - handlers.resolve(self, value); - } - - function tryToUnwrap() { - thenable(onSuccess, onError); - } - - var result = tryCatch(tryToUnwrap); - if (result.status === "error") { - onError(result.value); - } - } - - function tryCatch(func, value) { - var out = {}; - try { - out.value = func(value); - out.status = "success"; - } catch (e) { - out.status = "error"; - out.value = e; - } - return out; - } - - Promise.resolve = resolve; - function resolve(value) { - if (value instanceof this) { - return value; - } - return handlers.resolve(new this(INTERNAL), value); - } - - Promise.reject = reject; - function reject(reason) { - var promise = new this(INTERNAL); - return handlers.reject(promise, reason); - } - - Promise.all = all; - function all(iterable) { - var self = this; - if (Object.prototype.toString.call(iterable) !== "[object Array]") { - return this.reject(new TypeError("must be an array")); - } - - var len = iterable.length; - var called = false; - if (!len) { - return this.resolve([]); - } - - var values = new Array(len); - var resolved = 0; - var i = -1; - var promise = new this(INTERNAL); - - while (++i < len) { - allResolver(iterable[i], i); - } - return promise; - function allResolver(value, i) { - self.resolve(value).then(resolveFromAll, function (error) { - if (!called) { - called = true; - handlers.reject(promise, error); - } - }); - function resolveFromAll(outValue) { - values[i] = outValue; - if (++resolved === len && !called) { - called = true; - handlers.resolve(promise, values); - } - } - } - } - - Promise.race = race; - function race(iterable) { - var self = this; - if (Object.prototype.toString.call(iterable) !== "[object Array]") { - return this.reject(new TypeError("must be an array")); - } - - var len = iterable.length; - var called = false; - if (!len) { - return this.resolve([]); - } - - var i = -1; - var promise = new this(INTERNAL); - - while (++i < len) { - resolver(iterable[i]); - } - return promise; - function resolver(value) { - self.resolve(value).then( - function (response) { - if (!called) { - called = true; - handlers.resolve(promise, response); - } - }, - function (error) { - if (!called) { - called = true; - handlers.reject(promise, error); - } - }, - ); - } - } - }, - { immediate: 36 }, - ], - 38: [ - function (require, module, exports) { - // Top level file is just a mixin of submodules & constants - "use strict"; - - var assign = require("./lib/utils/common").assign; - - var deflate = require("./lib/deflate"); - var inflate = require("./lib/inflate"); - var constants = require("./lib/zlib/constants"); - - var pako = {}; - - assign(pako, deflate, inflate, constants); - - module.exports = pako; - }, - { - "./lib/deflate": 39, - "./lib/inflate": 40, - "./lib/utils/common": 41, - "./lib/zlib/constants": 44, - }, - ], - 39: [ - function (require, module, exports) { - "use strict"; - - var zlib_deflate = require("./zlib/deflate"); - var utils = require("./utils/common"); - var strings = require("./utils/strings"); - var msg = require("./zlib/messages"); - var ZStream = require("./zlib/zstream"); - - var toString = Object.prototype.toString; - - /* Public constants ==========================================================*/ - /* ===========================================================================*/ - - var Z_NO_FLUSH = 0; - var Z_FINISH = 4; - - var Z_OK = 0; - var Z_STREAM_END = 1; - var Z_SYNC_FLUSH = 2; - - var Z_DEFAULT_COMPRESSION = -1; - - var Z_DEFAULT_STRATEGY = 0; - - var Z_DEFLATED = 8; - - /* ===========================================================================*/ - - /** - * class Deflate - * - * Generic JS-style wrapper for zlib calls. If you don't need - * streaming behaviour - use more simple functions: [[deflate]], - * [[deflateRaw]] and [[gzip]]. - **/ - - /* internal - * Deflate.chunks -> Array - * - * Chunks of output data, if [[Deflate#onData]] not overriden. - **/ - - /** - * Deflate.result -> Uint8Array|Array - * - * Compressed result, generated by default [[Deflate#onData]] - * and [[Deflate#onEnd]] handlers. Filled after you push last chunk - * (call [[Deflate#push]] with `Z_FINISH` / `true` param) or if you - * push a chunk with explicit flush (call [[Deflate#push]] with - * `Z_SYNC_FLUSH` param). - **/ - - /** - * Deflate.err -> Number - * - * Error code after deflate finished. 0 (Z_OK) on success. - * You will not need it in real life, because deflate errors - * are possible only on wrong options or bad `onData` / `onEnd` - * custom handlers. - **/ - - /** - * Deflate.msg -> String - * - * Error message, if [[Deflate.err]] != 0 - **/ - - /** - * new Deflate(options) - * - options (Object): zlib deflate options. - * - * Creates new deflator instance with specified params. Throws exception - * on bad params. Supported options: - * - * - `level` - * - `windowBits` - * - `memLevel` - * - `strategy` - * - `dictionary` - * - * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced) - * for more information on these. - * - * Additional options, for internal needs: - * - * - `chunkSize` - size of generated data chunks (16K by default) - * - `raw` (Boolean) - do raw deflate - * - `gzip` (Boolean) - create gzip wrapper - * - `to` (String) - if equal to 'string', then result will be "binary string" - * (each char code [0..255]) - * - `header` (Object) - custom header for gzip - * - `text` (Boolean) - true if compressed data believed to be text - * - `time` (Number) - modification time, unix timestamp - * - `os` (Number) - operation system code - * - `extra` (Array) - array of bytes with extra data (max 65536) - * - `name` (String) - file name (binary string) - * - `comment` (String) - comment (binary string) - * - `hcrc` (Boolean) - true if header crc should be added - * - * ##### Example: - * - * ```javascript - * var pako = require('pako') - * , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9]) - * , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]); - * - * var deflate = new pako.Deflate({ level: 3}); - * - * deflate.push(chunk1, false); - * deflate.push(chunk2, true); // true -> last chunk - * - * if (deflate.err) { throw new Error(deflate.err); } - * - * console.log(deflate.result); - * ``` - **/ - function Deflate(options) { - if (!(this instanceof Deflate)) return new Deflate(options); - - this.options = utils.assign( - { - level: Z_DEFAULT_COMPRESSION, - method: Z_DEFLATED, - chunkSize: 16384, - windowBits: 15, - memLevel: 8, - strategy: Z_DEFAULT_STRATEGY, - to: "", - }, - options || {}, - ); - - var opt = this.options; - - if (opt.raw && opt.windowBits > 0) { - opt.windowBits = -opt.windowBits; - } else if (opt.gzip && opt.windowBits > 0 && opt.windowBits < 16) { - opt.windowBits += 16; - } - - this.err = 0; // error code, if happens (0 = Z_OK) - this.msg = ""; // error message - this.ended = false; // used to avoid multiple onEnd() calls - this.chunks = []; // chunks of compressed data - - this.strm = new ZStream(); - this.strm.avail_out = 0; - - var status = zlib_deflate.deflateInit2( - this.strm, - opt.level, - opt.method, - opt.windowBits, - opt.memLevel, - opt.strategy, - ); - - if (status !== Z_OK) { - throw new Error(msg[status]); - } - - if (opt.header) { - zlib_deflate.deflateSetHeader(this.strm, opt.header); - } - - if (opt.dictionary) { - var dict; - // Convert data if needed - if (typeof opt.dictionary === "string") { - // If we need to compress text, change encoding to utf8. - dict = strings.string2buf(opt.dictionary); - } else if ( - toString.call(opt.dictionary) === "[object ArrayBuffer]" - ) { - dict = new Uint8Array(opt.dictionary); - } else { - dict = opt.dictionary; - } - - status = zlib_deflate.deflateSetDictionary(this.strm, dict); - - if (status !== Z_OK) { - throw new Error(msg[status]); - } - - this._dict_set = true; - } - } - - /** - * Deflate#push(data[, mode]) -> Boolean - * - data (Uint8Array|Array|ArrayBuffer|String): input data. Strings will be - * converted to utf8 byte sequence. - * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes. - * See constants. Skipped or `false` means Z_NO_FLUSH, `true` meansh Z_FINISH. - * - * Sends input data to deflate pipe, generating [[Deflate#onData]] calls with - * new compressed chunks. Returns `true` on success. The last data block must have - * mode Z_FINISH (or `true`). That will flush internal pending buffers and call - * [[Deflate#onEnd]]. For interim explicit flushes (without ending the stream) you - * can use mode Z_SYNC_FLUSH, keeping the compression context. - * - * On fail call [[Deflate#onEnd]] with error code and return false. - * - * We strongly recommend to use `Uint8Array` on input for best speed (output - * array format is detected automatically). Also, don't skip last param and always - * use the same type in your code (boolean or number). That will improve JS speed. - * - * For regular `Array`-s make sure all elements are [0..255]. - * - * ##### Example - * - * ```javascript - * push(chunk, false); // push one of data chunks - * ... - * push(chunk, true); // push last chunk - * ``` - **/ - Deflate.prototype.push = function (data, mode) { - var strm = this.strm; - var chunkSize = this.options.chunkSize; - var status, _mode; - - if (this.ended) { - return false; - } - - _mode = - mode === ~~mode ? mode : mode === true ? Z_FINISH : Z_NO_FLUSH; - - // Convert data if needed - if (typeof data === "string") { - // If we need to compress text, change encoding to utf8. - strm.input = strings.string2buf(data); - } else if (toString.call(data) === "[object ArrayBuffer]") { - strm.input = new Uint8Array(data); - } else { - strm.input = data; - } - - strm.next_in = 0; - strm.avail_in = strm.input.length; - - do { - if (strm.avail_out === 0) { - strm.output = new utils.Buf8(chunkSize); - strm.next_out = 0; - strm.avail_out = chunkSize; - } - status = zlib_deflate.deflate( - strm, - _mode, - ); /* no bad return value */ - - if (status !== Z_STREAM_END && status !== Z_OK) { - this.onEnd(status); - this.ended = true; - return false; - } - if ( - strm.avail_out === 0 || - (strm.avail_in === 0 && - (_mode === Z_FINISH || _mode === Z_SYNC_FLUSH)) - ) { - if (this.options.to === "string") { - this.onData( - strings.buf2binstring( - utils.shrinkBuf(strm.output, strm.next_out), - ), - ); - } else { - this.onData(utils.shrinkBuf(strm.output, strm.next_out)); - } - } - } while ( - (strm.avail_in > 0 || strm.avail_out === 0) && - status !== Z_STREAM_END - ); - - // Finalize on the last chunk. - if (_mode === Z_FINISH) { - status = zlib_deflate.deflateEnd(this.strm); - this.onEnd(status); - this.ended = true; - return status === Z_OK; - } - - // callback interim results if Z_SYNC_FLUSH. - if (_mode === Z_SYNC_FLUSH) { - this.onEnd(Z_OK); - strm.avail_out = 0; - return true; - } - - return true; - }; - - /** - * Deflate#onData(chunk) -> Void - * - chunk (Uint8Array|Array|String): ouput data. Type of array depends - * on js engine support. When string output requested, each chunk - * will be string. - * - * By default, stores data blocks in `chunks[]` property and glue - * those in `onEnd`. Override this handler, if you need another behaviour. - **/ - Deflate.prototype.onData = function (chunk) { - this.chunks.push(chunk); - }; - - /** - * Deflate#onEnd(status) -> Void - * - status (Number): deflate status. 0 (Z_OK) on success, - * other if not. - * - * Called once after you tell deflate that the input stream is - * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH) - * or if an error happened. By default - join collected chunks, - * free memory and fill `results` / `err` properties. - **/ - Deflate.prototype.onEnd = function (status) { - // On success - join - if (status === Z_OK) { - if (this.options.to === "string") { - this.result = this.chunks.join(""); - } else { - this.result = utils.flattenChunks(this.chunks); - } - } - this.chunks = []; - this.err = status; - this.msg = this.strm.msg; - }; - - /** - * deflate(data[, options]) -> Uint8Array|Array|String - * - data (Uint8Array|Array|String): input data to compress. - * - options (Object): zlib deflate options. - * - * Compress `data` with deflate algorithm and `options`. - * - * Supported options are: - * - * - level - * - windowBits - * - memLevel - * - strategy - * - dictionary - * - * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced) - * for more information on these. - * - * Sugar (options): - * - * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify - * negative windowBits implicitly. - * - `to` (String) - if equal to 'string', then result will be "binary string" - * (each char code [0..255]) - * - * ##### Example: - * - * ```javascript - * var pako = require('pako') - * , data = Uint8Array([1,2,3,4,5,6,7,8,9]); - * - * console.log(pako.deflate(data)); - * ``` - **/ - function deflate(input, options) { - var deflator = new Deflate(options); - - deflator.push(input, true); - - // That will never happens, if you don't cheat with options :) - if (deflator.err) { - throw deflator.msg || msg[deflator.err]; - } - - return deflator.result; - } - - /** - * deflateRaw(data[, options]) -> Uint8Array|Array|String - * - data (Uint8Array|Array|String): input data to compress. - * - options (Object): zlib deflate options. - * - * The same as [[deflate]], but creates raw data, without wrapper - * (header and adler32 crc). - **/ - function deflateRaw(input, options) { - options = options || {}; - options.raw = true; - return deflate(input, options); - } - - /** - * gzip(data[, options]) -> Uint8Array|Array|String - * - data (Uint8Array|Array|String): input data to compress. - * - options (Object): zlib deflate options. - * - * The same as [[deflate]], but create gzip wrapper instead of - * deflate one. - **/ - function gzip(input, options) { - options = options || {}; - options.gzip = true; - return deflate(input, options); - } - - exports.Deflate = Deflate; - exports.deflate = deflate; - exports.deflateRaw = deflateRaw; - exports.gzip = gzip; - }, - { - "./utils/common": 41, - "./utils/strings": 42, - "./zlib/deflate": 46, - "./zlib/messages": 51, - "./zlib/zstream": 53, - }, - ], - 40: [ - function (require, module, exports) { - "use strict"; - - var zlib_inflate = require("./zlib/inflate"); - var utils = require("./utils/common"); - var strings = require("./utils/strings"); - var c = require("./zlib/constants"); - var msg = require("./zlib/messages"); - var ZStream = require("./zlib/zstream"); - var GZheader = require("./zlib/gzheader"); - - var toString = Object.prototype.toString; - - /** - * class Inflate - * - * Generic JS-style wrapper for zlib calls. If you don't need - * streaming behaviour - use more simple functions: [[inflate]] - * and [[inflateRaw]]. - **/ - - /* internal - * inflate.chunks -> Array - * - * Chunks of output data, if [[Inflate#onData]] not overriden. - **/ - - /** - * Inflate.result -> Uint8Array|Array|String - * - * Uncompressed result, generated by default [[Inflate#onData]] - * and [[Inflate#onEnd]] handlers. Filled after you push last chunk - * (call [[Inflate#push]] with `Z_FINISH` / `true` param) or if you - * push a chunk with explicit flush (call [[Inflate#push]] with - * `Z_SYNC_FLUSH` param). - **/ - - /** - * Inflate.err -> Number - * - * Error code after inflate finished. 0 (Z_OK) on success. - * Should be checked if broken data possible. - **/ - - /** - * Inflate.msg -> String - * - * Error message, if [[Inflate.err]] != 0 - **/ - - /** - * new Inflate(options) - * - options (Object): zlib inflate options. - * - * Creates new inflator instance with specified params. Throws exception - * on bad params. Supported options: - * - * - `windowBits` - * - `dictionary` - * - * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced) - * for more information on these. - * - * Additional options, for internal needs: - * - * - `chunkSize` - size of generated data chunks (16K by default) - * - `raw` (Boolean) - do raw inflate - * - `to` (String) - if equal to 'string', then result will be converted - * from utf8 to utf16 (javascript) string. When string output requested, - * chunk length can differ from `chunkSize`, depending on content. - * - * By default, when no options set, autodetect deflate/gzip data format via - * wrapper header. - * - * ##### Example: - * - * ```javascript - * var pako = require('pako') - * , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9]) - * , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]); - * - * var inflate = new pako.Inflate({ level: 3}); - * - * inflate.push(chunk1, false); - * inflate.push(chunk2, true); // true -> last chunk - * - * if (inflate.err) { throw new Error(inflate.err); } - * - * console.log(inflate.result); - * ``` - **/ - function Inflate(options) { - if (!(this instanceof Inflate)) return new Inflate(options); - - this.options = utils.assign( - { - chunkSize: 16384, - windowBits: 0, - to: "", - }, - options || {}, - ); - - var opt = this.options; - - // Force window size for `raw` data, if not set directly, - // because we have no header for autodetect. - if (opt.raw && opt.windowBits >= 0 && opt.windowBits < 16) { - opt.windowBits = -opt.windowBits; - if (opt.windowBits === 0) { - opt.windowBits = -15; - } - } - - // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate - if ( - opt.windowBits >= 0 && - opt.windowBits < 16 && - !(options && options.windowBits) - ) { - opt.windowBits += 32; - } - - // Gzip header has no info about windows size, we can do autodetect only - // for deflate. So, if window size not set, force it to max when gzip possible - if (opt.windowBits > 15 && opt.windowBits < 48) { - // bit 3 (16) -> gzipped data - // bit 4 (32) -> autodetect gzip/deflate - if ((opt.windowBits & 15) === 0) { - opt.windowBits |= 15; - } - } - - this.err = 0; // error code, if happens (0 = Z_OK) - this.msg = ""; // error message - this.ended = false; // used to avoid multiple onEnd() calls - this.chunks = []; // chunks of compressed data - - this.strm = new ZStream(); - this.strm.avail_out = 0; - - var status = zlib_inflate.inflateInit2(this.strm, opt.windowBits); - - if (status !== c.Z_OK) { - throw new Error(msg[status]); - } - - this.header = new GZheader(); - - zlib_inflate.inflateGetHeader(this.strm, this.header); - } - - /** - * Inflate#push(data[, mode]) -> Boolean - * - data (Uint8Array|Array|ArrayBuffer|String): input data - * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes. - * See constants. Skipped or `false` means Z_NO_FLUSH, `true` meansh Z_FINISH. - * - * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with - * new output chunks. Returns `true` on success. The last data block must have - * mode Z_FINISH (or `true`). That will flush internal pending buffers and call - * [[Inflate#onEnd]]. For interim explicit flushes (without ending the stream) you - * can use mode Z_SYNC_FLUSH, keeping the decompression context. - * - * On fail call [[Inflate#onEnd]] with error code and return false. - * - * We strongly recommend to use `Uint8Array` on input for best speed (output - * format is detected automatically). Also, don't skip last param and always - * use the same type in your code (boolean or number). That will improve JS speed. - * - * For regular `Array`-s make sure all elements are [0..255]. - * - * ##### Example - * - * ```javascript - * push(chunk, false); // push one of data chunks - * ... - * push(chunk, true); // push last chunk - * ``` - **/ - Inflate.prototype.push = function (data, mode) { - var strm = this.strm; - var chunkSize = this.options.chunkSize; - var dictionary = this.options.dictionary; - var status, _mode; - var next_out_utf8, tail, utf8str; - var dict; - - // Flag to properly process Z_BUF_ERROR on testing inflate call - // when we check that all output data was flushed. - var allowBufError = false; - - if (this.ended) { - return false; - } - _mode = - mode === ~~mode - ? mode - : mode === true - ? c.Z_FINISH - : c.Z_NO_FLUSH; - - // Convert data if needed - if (typeof data === "string") { - // Only binary strings can be decompressed on practice - strm.input = strings.binstring2buf(data); - } else if (toString.call(data) === "[object ArrayBuffer]") { - strm.input = new Uint8Array(data); - } else { - strm.input = data; - } - - strm.next_in = 0; - strm.avail_in = strm.input.length; - - do { - if (strm.avail_out === 0) { - strm.output = new utils.Buf8(chunkSize); - strm.next_out = 0; - strm.avail_out = chunkSize; - } - - status = zlib_inflate.inflate( - strm, - c.Z_NO_FLUSH, - ); /* no bad return value */ - - if (status === c.Z_NEED_DICT && dictionary) { - // Convert data if needed - if (typeof dictionary === "string") { - dict = strings.string2buf(dictionary); - } else if ( - toString.call(dictionary) === "[object ArrayBuffer]" - ) { - dict = new Uint8Array(dictionary); - } else { - dict = dictionary; - } - - status = zlib_inflate.inflateSetDictionary(this.strm, dict); - } - - if (status === c.Z_BUF_ERROR && allowBufError === true) { - status = c.Z_OK; - allowBufError = false; - } - - if (status !== c.Z_STREAM_END && status !== c.Z_OK) { - this.onEnd(status); - this.ended = true; - return false; - } - - if (strm.next_out) { - if ( - strm.avail_out === 0 || - status === c.Z_STREAM_END || - (strm.avail_in === 0 && - (_mode === c.Z_FINISH || _mode === c.Z_SYNC_FLUSH)) - ) { - if (this.options.to === "string") { - next_out_utf8 = strings.utf8border( - strm.output, - strm.next_out, - ); - - tail = strm.next_out - next_out_utf8; - utf8str = strings.buf2string(strm.output, next_out_utf8); - - // move tail - strm.next_out = tail; - strm.avail_out = chunkSize - tail; - if (tail) { - utils.arraySet( - strm.output, - strm.output, - next_out_utf8, - tail, - 0, - ); - } - - this.onData(utf8str); - } else { - this.onData(utils.shrinkBuf(strm.output, strm.next_out)); - } - } - } - - // When no more input data, we should check that internal inflate buffers - // are flushed. The only way to do it when avail_out = 0 - run one more - // inflate pass. But if output data not exists, inflate return Z_BUF_ERROR. - // Here we set flag to process this error properly. - // - // NOTE. Deflate does not return error in this case and does not needs such - // logic. - if (strm.avail_in === 0 && strm.avail_out === 0) { - allowBufError = true; - } - } while ( - (strm.avail_in > 0 || strm.avail_out === 0) && - status !== c.Z_STREAM_END - ); - - if (status === c.Z_STREAM_END) { - _mode = c.Z_FINISH; - } - - // Finalize on the last chunk. - if (_mode === c.Z_FINISH) { - status = zlib_inflate.inflateEnd(this.strm); - this.onEnd(status); - this.ended = true; - return status === c.Z_OK; - } - - // callback interim results if Z_SYNC_FLUSH. - if (_mode === c.Z_SYNC_FLUSH) { - this.onEnd(c.Z_OK); - strm.avail_out = 0; - return true; - } - - return true; - }; - - /** - * Inflate#onData(chunk) -> Void - * - chunk (Uint8Array|Array|String): ouput data. Type of array depends - * on js engine support. When string output requested, each chunk - * will be string. - * - * By default, stores data blocks in `chunks[]` property and glue - * those in `onEnd`. Override this handler, if you need another behaviour. - **/ - Inflate.prototype.onData = function (chunk) { - this.chunks.push(chunk); - }; - - /** - * Inflate#onEnd(status) -> Void - * - status (Number): inflate status. 0 (Z_OK) on success, - * other if not. - * - * Called either after you tell inflate that the input stream is - * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH) - * or if an error happened. By default - join collected chunks, - * free memory and fill `results` / `err` properties. - **/ - Inflate.prototype.onEnd = function (status) { - // On success - join - if (status === c.Z_OK) { - if (this.options.to === "string") { - // Glue & convert here, until we teach pako to send - // utf8 alligned strings to onData - this.result = this.chunks.join(""); - } else { - this.result = utils.flattenChunks(this.chunks); - } - } - this.chunks = []; - this.err = status; - this.msg = this.strm.msg; - }; - - /** - * inflate(data[, options]) -> Uint8Array|Array|String - * - data (Uint8Array|Array|String): input data to decompress. - * - options (Object): zlib inflate options. - * - * Decompress `data` with inflate/ungzip and `options`. Autodetect - * format via wrapper header by default. That's why we don't provide - * separate `ungzip` method. - * - * Supported options are: - * - * - windowBits - * - * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced) - * for more information. - * - * Sugar (options): - * - * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify - * negative windowBits implicitly. - * - `to` (String) - if equal to 'string', then result will be converted - * from utf8 to utf16 (javascript) string. When string output requested, - * chunk length can differ from `chunkSize`, depending on content. - * - * - * ##### Example: - * - * ```javascript - * var pako = require('pako') - * , input = pako.deflate([1,2,3,4,5,6,7,8,9]) - * , output; - * - * try { - * output = pako.inflate(input); - * } catch (err) - * console.log(err); - * } - * ``` - **/ - function inflate(input, options) { - var inflator = new Inflate(options); - - inflator.push(input, true); - - // That will never happens, if you don't cheat with options :) - if (inflator.err) { - throw inflator.msg || msg[inflator.err]; - } - - return inflator.result; - } - - /** - * inflateRaw(data[, options]) -> Uint8Array|Array|String - * - data (Uint8Array|Array|String): input data to decompress. - * - options (Object): zlib inflate options. - * - * The same as [[inflate]], but creates raw data, without wrapper - * (header and adler32 crc). - **/ - function inflateRaw(input, options) { - options = options || {}; - options.raw = true; - return inflate(input, options); - } - - /** - * ungzip(data[, options]) -> Uint8Array|Array|String - * - data (Uint8Array|Array|String): input data to decompress. - * - options (Object): zlib inflate options. - * - * Just shortcut to [[inflate]], because it autodetects format - * by header.content. Done for convenience. - **/ - - exports.Inflate = Inflate; - exports.inflate = inflate; - exports.inflateRaw = inflateRaw; - exports.ungzip = inflate; - }, - { - "./utils/common": 41, - "./utils/strings": 42, - "./zlib/constants": 44, - "./zlib/gzheader": 47, - "./zlib/inflate": 49, - "./zlib/messages": 51, - "./zlib/zstream": 53, - }, - ], - 41: [ - function (require, module, exports) { - "use strict"; - - var TYPED_OK = - typeof Uint8Array !== "undefined" && - typeof Uint16Array !== "undefined" && - typeof Int32Array !== "undefined"; - - exports.assign = function (obj /*from1, from2, from3, ...*/) { - var sources = Array.prototype.slice.call(arguments, 1); - while (sources.length) { - var source = sources.shift(); - if (!source) { - continue; - } - - if (typeof source !== "object") { - throw new TypeError(source + "must be non-object"); - } - - for (var p in source) { - if (source.hasOwnProperty(p)) { - obj[p] = source[p]; - } - } - } - - return obj; - }; - - // reduce buffer size, avoiding mem copy - exports.shrinkBuf = function (buf, size) { - if (buf.length === size) { - return buf; - } - if (buf.subarray) { - return buf.subarray(0, size); - } - buf.length = size; - return buf; - }; - - var fnTyped = { - arraySet: function (dest, src, src_offs, len, dest_offs) { - if (src.subarray && dest.subarray) { - dest.set(src.subarray(src_offs, src_offs + len), dest_offs); - return; - } - // Fallback to ordinary array - for (var i = 0; i < len; i++) { - dest[dest_offs + i] = src[src_offs + i]; - } - }, - // Join array of chunks to single array. - flattenChunks: function (chunks) { - var i, l, len, pos, chunk, result; - - // calculate data length - len = 0; - for (i = 0, l = chunks.length; i < l; i++) { - len += chunks[i].length; - } - - // join chunks - result = new Uint8Array(len); - pos = 0; - for (i = 0, l = chunks.length; i < l; i++) { - chunk = chunks[i]; - result.set(chunk, pos); - pos += chunk.length; - } - - return result; - }, - }; - - var fnUntyped = { - arraySet: function (dest, src, src_offs, len, dest_offs) { - for (var i = 0; i < len; i++) { - dest[dest_offs + i] = src[src_offs + i]; - } - }, - // Join array of chunks to single array. - flattenChunks: function (chunks) { - return [].concat.apply([], chunks); - }, - }; - - // Enable/Disable typed arrays use, for testing - // - exports.setTyped = function (on) { - if (on) { - exports.Buf8 = Uint8Array; - exports.Buf16 = Uint16Array; - exports.Buf32 = Int32Array; - exports.assign(exports, fnTyped); - } else { - exports.Buf8 = Array; - exports.Buf16 = Array; - exports.Buf32 = Array; - exports.assign(exports, fnUntyped); - } - }; - - exports.setTyped(TYPED_OK); - }, - {}, - ], - 42: [ - function (require, module, exports) { - // String encode/decode helpers - "use strict"; - - var utils = require("./common"); - - // Quick check if we can use fast array to bin string conversion - // - // - apply(Array) can fail on Android 2.2 - // - apply(Uint8Array) can fail on iOS 5.1 Safary - // - var STR_APPLY_OK = true; - var STR_APPLY_UIA_OK = true; - - try { - String.fromCharCode.apply(null, [0]); - } catch (__) { - STR_APPLY_OK = false; - } - try { - String.fromCharCode.apply(null, new Uint8Array(1)); - } catch (__) { - STR_APPLY_UIA_OK = false; - } - - // Table with utf8 lengths (calculated by first byte of sequence) - // Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS, - // because max possible codepoint is 0x10ffff - var _utf8len = new utils.Buf8(256); - for (var q = 0; q < 256; q++) { - _utf8len[q] = - q >= 252 - ? 6 - : q >= 248 - ? 5 - : q >= 240 - ? 4 - : q >= 224 - ? 3 - : q >= 192 - ? 2 - : 1; - } - _utf8len[254] = _utf8len[254] = 1; // Invalid sequence start - - // convert string to array (typed, when possible) - exports.string2buf = function (str) { - var buf, - c, - c2, - m_pos, - i, - str_len = str.length, - buf_len = 0; - - // count binary size - for (m_pos = 0; m_pos < str_len; m_pos++) { - c = str.charCodeAt(m_pos); - if ((c & 0xfc00) === 0xd800 && m_pos + 1 < str_len) { - c2 = str.charCodeAt(m_pos + 1); - if ((c2 & 0xfc00) === 0xdc00) { - c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00); - m_pos++; - } - } - buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4; - } - - // allocate buffer - buf = new utils.Buf8(buf_len); - - // convert - for (i = 0, m_pos = 0; i < buf_len; m_pos++) { - c = str.charCodeAt(m_pos); - if ((c & 0xfc00) === 0xd800 && m_pos + 1 < str_len) { - c2 = str.charCodeAt(m_pos + 1); - if ((c2 & 0xfc00) === 0xdc00) { - c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00); - m_pos++; - } - } - if (c < 0x80) { - /* one byte */ - buf[i++] = c; - } else if (c < 0x800) { - /* two bytes */ - buf[i++] = 0xc0 | (c >>> 6); - buf[i++] = 0x80 | (c & 0x3f); - } else if (c < 0x10000) { - /* three bytes */ - buf[i++] = 0xe0 | (c >>> 12); - buf[i++] = 0x80 | ((c >>> 6) & 0x3f); - buf[i++] = 0x80 | (c & 0x3f); - } else { - /* four bytes */ - buf[i++] = 0xf0 | (c >>> 18); - buf[i++] = 0x80 | ((c >>> 12) & 0x3f); - buf[i++] = 0x80 | ((c >>> 6) & 0x3f); - buf[i++] = 0x80 | (c & 0x3f); - } - } - - return buf; - }; - - // Helper (used in 2 places) - function buf2binstring(buf, len) { - // use fallback for big arrays to avoid stack overflow - if (len < 65537) { - if ( - (buf.subarray && STR_APPLY_UIA_OK) || - (!buf.subarray && STR_APPLY_OK) - ) { - return String.fromCharCode.apply( - null, - utils.shrinkBuf(buf, len), - ); - } - } - - var result = ""; - for (var i = 0; i < len; i++) { - result += String.fromCharCode(buf[i]); - } - return result; - } - - // Convert byte array to binary string - exports.buf2binstring = function (buf) { - return buf2binstring(buf, buf.length); - }; - - // Convert binary string (typed, when possible) - exports.binstring2buf = function (str) { - var buf = new utils.Buf8(str.length); - for (var i = 0, len = buf.length; i < len; i++) { - buf[i] = str.charCodeAt(i); - } - return buf; - }; - - // convert array to string - exports.buf2string = function (buf, max) { - var i, out, c, c_len; - var len = max || buf.length; - - // Reserve max possible length (2 words per char) - // NB: by unknown reasons, Array is significantly faster for - // String.fromCharCode.apply than Uint16Array. - var utf16buf = new Array(len * 2); - - for (out = 0, i = 0; i < len; ) { - c = buf[i++]; - // quick process ascii - if (c < 0x80) { - utf16buf[out++] = c; - continue; - } - - c_len = _utf8len[c]; - // skip 5 & 6 byte codes - if (c_len > 4) { - utf16buf[out++] = 0xfffd; - i += c_len - 1; - continue; - } - - // apply mask on first byte - c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07; - // join the rest - while (c_len > 1 && i < len) { - c = (c << 6) | (buf[i++] & 0x3f); - c_len--; - } - - // terminated by end of string? - if (c_len > 1) { - utf16buf[out++] = 0xfffd; - continue; - } - - if (c < 0x10000) { - utf16buf[out++] = c; - } else { - c -= 0x10000; - utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff); - utf16buf[out++] = 0xdc00 | (c & 0x3ff); - } - } - - return buf2binstring(utf16buf, out); - }; - - // Calculate max possible position in utf8 buffer, - // that will not break sequence. If that's not possible - // - (very small limits) return max size as is. - // - // buf[] - utf8 bytes array - // max - length limit (mandatory); - exports.utf8border = function (buf, max) { - var pos; - - max = max || buf.length; - if (max > buf.length) { - max = buf.length; - } - - // go back from last position, until start of sequence found - pos = max - 1; - while (pos >= 0 && (buf[pos] & 0xc0) === 0x80) { - pos--; - } - - // Fuckup - very small and broken sequence, - // return max, because we should return something anyway. - if (pos < 0) { - return max; - } - - // If we came to start of buffer - that means vuffer is too small, - // return max too. - if (pos === 0) { - return max; - } - - return pos + _utf8len[buf[pos]] > max ? pos : max; - }; - }, - { "./common": 41 }, - ], - 43: [ - function (require, module, exports) { - "use strict"; - - // Note: adler32 takes 12% for level 0 and 2% for level 6. - // It doesn't worth to make additional optimizationa as in original. - // Small size is preferable. - - // (C) 1995-2013 Jean-loup Gailly and Mark Adler - // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin - // - // This software is provided 'as-is', without any express or implied - // warranty. In no event will the authors be held liable for any damages - // arising from the use of this software. - // - // Permission is granted to anyone to use this software for any purpose, - // including commercial applications, and to alter it and redistribute it - // freely, subject to the following restrictions: - // - // 1. The origin of this software must not be misrepresented; you must not - // claim that you wrote the original software. If you use this software - // in a product, an acknowledgment in the product documentation would be - // appreciated but is not required. - // 2. Altered source versions must be plainly marked as such, and must not be - // misrepresented as being the original software. - // 3. This notice may not be removed or altered from any source distribution. - - function adler32(adler, buf, len, pos) { - var s1 = (adler & 0xffff) | 0, - s2 = ((adler >>> 16) & 0xffff) | 0, - n = 0; - - while (len !== 0) { - // Set limit ~ twice less than 5552, to keep - // s2 in 31-bits, because we force signed ints. - // in other case %= will fail. - n = len > 2000 ? 2000 : len; - len -= n; - - do { - s1 = (s1 + buf[pos++]) | 0; - s2 = (s2 + s1) | 0; - } while (--n); - - s1 %= 65521; - s2 %= 65521; - } - - return s1 | (s2 << 16) | 0; - } - - module.exports = adler32; - }, - {}, - ], - 44: [ - function (require, module, exports) { - "use strict"; - - // (C) 1995-2013 Jean-loup Gailly and Mark Adler - // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin - // - // This software is provided 'as-is', without any express or implied - // warranty. In no event will the authors be held liable for any damages - // arising from the use of this software. - // - // Permission is granted to anyone to use this software for any purpose, - // including commercial applications, and to alter it and redistribute it - // freely, subject to the following restrictions: - // - // 1. The origin of this software must not be misrepresented; you must not - // claim that you wrote the original software. If you use this software - // in a product, an acknowledgment in the product documentation would be - // appreciated but is not required. - // 2. Altered source versions must be plainly marked as such, and must not be - // misrepresented as being the original software. - // 3. This notice may not be removed or altered from any source distribution. - - module.exports = { - /* Allowed flush values; see deflate() and inflate() below for details */ - Z_NO_FLUSH: 0, - Z_PARTIAL_FLUSH: 1, - Z_SYNC_FLUSH: 2, - Z_FULL_FLUSH: 3, - Z_FINISH: 4, - Z_BLOCK: 5, - Z_TREES: 6, - - /* Return codes for the compression/decompression functions. Negative values - * are errors, positive values are used for special but normal events. - */ - Z_OK: 0, - Z_STREAM_END: 1, - Z_NEED_DICT: 2, - Z_ERRNO: -1, - Z_STREAM_ERROR: -2, - Z_DATA_ERROR: -3, - //Z_MEM_ERROR: -4, - Z_BUF_ERROR: -5, - //Z_VERSION_ERROR: -6, - - /* compression levels */ - Z_NO_COMPRESSION: 0, - Z_BEST_SPEED: 1, - Z_BEST_COMPRESSION: 9, - Z_DEFAULT_COMPRESSION: -1, - - Z_FILTERED: 1, - Z_HUFFMAN_ONLY: 2, - Z_RLE: 3, - Z_FIXED: 4, - Z_DEFAULT_STRATEGY: 0, - - /* Possible values of the data_type field (though see inflate()) */ - Z_BINARY: 0, - Z_TEXT: 1, - //Z_ASCII: 1, // = Z_TEXT (deprecated) - Z_UNKNOWN: 2, - - /* The deflate compression method */ - Z_DEFLATED: 8, - //Z_NULL: null // Use -1 or null inline, depending on var type - }; - }, - {}, - ], - 45: [ - function (require, module, exports) { - "use strict"; - - // Note: we can't get significant speed boost here. - // So write code to minimize size - no pregenerated tables - // and array tools dependencies. - - // (C) 1995-2013 Jean-loup Gailly and Mark Adler - // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin - // - // This software is provided 'as-is', without any express or implied - // warranty. In no event will the authors be held liable for any damages - // arising from the use of this software. - // - // Permission is granted to anyone to use this software for any purpose, - // including commercial applications, and to alter it and redistribute it - // freely, subject to the following restrictions: - // - // 1. The origin of this software must not be misrepresented; you must not - // claim that you wrote the original software. If you use this software - // in a product, an acknowledgment in the product documentation would be - // appreciated but is not required. - // 2. Altered source versions must be plainly marked as such, and must not be - // misrepresented as being the original software. - // 3. This notice may not be removed or altered from any source distribution. - - // Use ordinary array, since untyped makes no boost here - function makeTable() { - var c, - table = []; - - for (var n = 0; n < 256; n++) { - c = n; - for (var k = 0; k < 8; k++) { - c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1; - } - table[n] = c; - } - - return table; - } - - // Create table on load. Just 255 signed longs. Not a problem. - var crcTable = makeTable(); - - function crc32(crc, buf, len, pos) { - var t = crcTable, - end = pos + len; - - crc ^= -1; - - for (var i = pos; i < end; i++) { - crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xff]; - } - - return crc ^ -1; // >>> 0; - } - - module.exports = crc32; - }, - {}, - ], - 46: [ - function (require, module, exports) { - "use strict"; - - // (C) 1995-2013 Jean-loup Gailly and Mark Adler - // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin - // - // This software is provided 'as-is', without any express or implied - // warranty. In no event will the authors be held liable for any damages - // arising from the use of this software. - // - // Permission is granted to anyone to use this software for any purpose, - // including commercial applications, and to alter it and redistribute it - // freely, subject to the following restrictions: - // - // 1. The origin of this software must not be misrepresented; you must not - // claim that you wrote the original software. If you use this software - // in a product, an acknowledgment in the product documentation would be - // appreciated but is not required. - // 2. Altered source versions must be plainly marked as such, and must not be - // misrepresented as being the original software. - // 3. This notice may not be removed or altered from any source distribution. - - var utils = require("../utils/common"); - var trees = require("./trees"); - var adler32 = require("./adler32"); - var crc32 = require("./crc32"); - var msg = require("./messages"); - - /* Public constants ==========================================================*/ - /* ===========================================================================*/ - - /* Allowed flush values; see deflate() and inflate() below for details */ - var Z_NO_FLUSH = 0; - var Z_PARTIAL_FLUSH = 1; - //var Z_SYNC_FLUSH = 2; - var Z_FULL_FLUSH = 3; - var Z_FINISH = 4; - var Z_BLOCK = 5; - //var Z_TREES = 6; - - /* Return codes for the compression/decompression functions. Negative values - * are errors, positive values are used for special but normal events. - */ - var Z_OK = 0; - var Z_STREAM_END = 1; - //var Z_NEED_DICT = 2; - //var Z_ERRNO = -1; - var Z_STREAM_ERROR = -2; - var Z_DATA_ERROR = -3; - //var Z_MEM_ERROR = -4; - var Z_BUF_ERROR = -5; - //var Z_VERSION_ERROR = -6; - - /* compression levels */ - //var Z_NO_COMPRESSION = 0; - //var Z_BEST_SPEED = 1; - //var Z_BEST_COMPRESSION = 9; - var Z_DEFAULT_COMPRESSION = -1; - - var Z_FILTERED = 1; - var Z_HUFFMAN_ONLY = 2; - var Z_RLE = 3; - var Z_FIXED = 4; - var Z_DEFAULT_STRATEGY = 0; - - /* Possible values of the data_type field (though see inflate()) */ - //var Z_BINARY = 0; - //var Z_TEXT = 1; - //var Z_ASCII = 1; // = Z_TEXT - var Z_UNKNOWN = 2; - - /* The deflate compression method */ - var Z_DEFLATED = 8; - - /*============================================================================*/ - - var MAX_MEM_LEVEL = 9; - /* Maximum value for memLevel in deflateInit2 */ - var MAX_WBITS = 15; - /* 32K LZ77 window */ - var DEF_MEM_LEVEL = 8; - - var LENGTH_CODES = 29; - /* number of length codes, not counting the special END_BLOCK code */ - var LITERALS = 256; - /* number of literal bytes 0..255 */ - var L_CODES = LITERALS + 1 + LENGTH_CODES; - /* number of Literal or Length codes, including the END_BLOCK code */ - var D_CODES = 30; - /* number of distance codes */ - var BL_CODES = 19; - /* number of codes used to transfer the bit lengths */ - var HEAP_SIZE = 2 * L_CODES + 1; - /* maximum heap size */ - var MAX_BITS = 15; - /* All codes must not exceed MAX_BITS bits */ - - var MIN_MATCH = 3; - var MAX_MATCH = 258; - var MIN_LOOKAHEAD = MAX_MATCH + MIN_MATCH + 1; - - var PRESET_DICT = 0x20; - - var INIT_STATE = 42; - var EXTRA_STATE = 69; - var NAME_STATE = 73; - var COMMENT_STATE = 91; - var HCRC_STATE = 103; - var BUSY_STATE = 113; - var FINISH_STATE = 666; - - var BS_NEED_MORE = 1; /* block not completed, need more input or more output */ - var BS_BLOCK_DONE = 2; /* block flush performed */ - var BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */ - var BS_FINISH_DONE = 4; /* finish done, accept no more input or output */ - - var OS_CODE = 0x03; // Unix :) . Don't detect, use this default. - - function err(strm, errorCode) { - strm.msg = msg[errorCode]; - return errorCode; - } - - function rank(f) { - return (f << 1) - (f > 4 ? 9 : 0); - } - - function zero(buf) { - var len = buf.length; - while (--len >= 0) { - buf[len] = 0; - } - } - - /* ========================================================================= - * Flush as much pending output as possible. All deflate() output goes - * through this function so some applications may wish to modify it - * to avoid allocating a large strm->output buffer and copying into it. - * (See also read_buf()). - */ - function flush_pending(strm) { - var s = strm.state; - - //_tr_flush_bits(s); - var len = s.pending; - if (len > strm.avail_out) { - len = strm.avail_out; - } - if (len === 0) { - return; - } - - utils.arraySet( - strm.output, - s.pending_buf, - s.pending_out, - len, - strm.next_out, - ); - strm.next_out += len; - s.pending_out += len; - strm.total_out += len; - strm.avail_out -= len; - s.pending -= len; - if (s.pending === 0) { - s.pending_out = 0; - } - } - - function flush_block_only(s, last) { - trees._tr_flush_block( - s, - s.block_start >= 0 ? s.block_start : -1, - s.strstart - s.block_start, - last, - ); - s.block_start = s.strstart; - flush_pending(s.strm); - } - - function put_byte(s, b) { - s.pending_buf[s.pending++] = b; - } - - /* ========================================================================= - * Put a short in the pending buffer. The 16-bit value is put in MSB order. - * IN assertion: the stream state is correct and there is enough room in - * pending_buf. - */ - function putShortMSB(s, b) { - // put_byte(s, (Byte)(b >> 8)); - // put_byte(s, (Byte)(b & 0xff)); - s.pending_buf[s.pending++] = (b >>> 8) & 0xff; - s.pending_buf[s.pending++] = b & 0xff; - } - - /* =========================================================================== - * Read a new buffer from the current input stream, update the adler32 - * and total number of bytes read. All deflate() input goes through - * this function so some applications may wish to modify it to avoid - * allocating a large strm->input buffer and copying from it. - * (See also flush_pending()). - */ - function read_buf(strm, buf, start, size) { - var len = strm.avail_in; - - if (len > size) { - len = size; - } - if (len === 0) { - return 0; - } - - strm.avail_in -= len; - - // zmemcpy(buf, strm->next_in, len); - utils.arraySet(buf, strm.input, strm.next_in, len, start); - if (strm.state.wrap === 1) { - strm.adler = adler32(strm.adler, buf, len, start); - } else if (strm.state.wrap === 2) { - strm.adler = crc32(strm.adler, buf, len, start); - } - - strm.next_in += len; - strm.total_in += len; - - return len; - } - - /* =========================================================================== - * Set match_start to the longest match starting at the given string and - * return its length. Matches shorter or equal to prev_length are discarded, - * in which case the result is equal to prev_length and match_start is - * garbage. - * IN assertions: cur_match is the head of the hash chain for the current - * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1 - * OUT assertion: the match length is not greater than s->lookahead. - */ - function longest_match(s, cur_match) { - var chain_length = s.max_chain_length; /* max hash chain length */ - var scan = s.strstart; /* current string */ - var match; /* matched string */ - var len; /* length of current match */ - var best_len = s.prev_length; /* best match length so far */ - var nice_match = s.nice_match; /* stop if match long enough */ - var limit = - s.strstart > s.w_size - MIN_LOOKAHEAD - ? s.strstart - (s.w_size - MIN_LOOKAHEAD) - : 0; /*NIL*/ - - var _win = s.window; // shortcut - - var wmask = s.w_mask; - var prev = s.prev; - - /* Stop when cur_match becomes <= limit. To simplify the code, - * we prevent matches with the string of window index 0. - */ - - var strend = s.strstart + MAX_MATCH; - var scan_end1 = _win[scan + best_len - 1]; - var scan_end = _win[scan + best_len]; - - /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16. - * It is easy to get rid of this optimization if necessary. - */ - // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever"); - - /* Do not waste too much time if we already have a good match: */ - if (s.prev_length >= s.good_match) { - chain_length >>= 2; - } - /* Do not look for matches beyond the end of the input. This is necessary - * to make deflate deterministic. - */ - if (nice_match > s.lookahead) { - nice_match = s.lookahead; - } - - // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead"); - - do { - // Assert(cur_match < s->strstart, "no future"); - match = cur_match; - - /* Skip to next match if the match length cannot increase - * or if the match length is less than 2. Note that the checks below - * for insufficient lookahead only occur occasionally for performance - * reasons. Therefore uninitialized memory will be accessed, and - * conditional jumps will be made that depend on those values. - * However the length of the match is limited to the lookahead, so - * the output of deflate is not affected by the uninitialized values. - */ - - if ( - _win[match + best_len] !== scan_end || - _win[match + best_len - 1] !== scan_end1 || - _win[match] !== _win[scan] || - _win[++match] !== _win[scan + 1] - ) { - continue; - } - - /* The check at best_len-1 can be removed because it will be made - * again later. (This heuristic is not always a win.) - * It is not necessary to compare scan[2] and match[2] since they - * are always equal when the other bytes match, given that - * the hash keys are equal and that HASH_BITS >= 8. - */ - scan += 2; - match++; - // Assert(*scan == *match, "match[2]?"); - - /* We check for insufficient lookahead only every 8th comparison; - * the 256th check will be made at strstart+258. - */ - do { - /*jshint noempty:false*/ - } while ( - _win[++scan] === _win[++match] && - _win[++scan] === _win[++match] && - _win[++scan] === _win[++match] && - _win[++scan] === _win[++match] && - _win[++scan] === _win[++match] && - _win[++scan] === _win[++match] && - _win[++scan] === _win[++match] && - _win[++scan] === _win[++match] && - scan < strend - ); - - // Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); - - len = MAX_MATCH - (strend - scan); - scan = strend - MAX_MATCH; - - if (len > best_len) { - s.match_start = cur_match; - best_len = len; - if (len >= nice_match) { - break; - } - scan_end1 = _win[scan + best_len - 1]; - scan_end = _win[scan + best_len]; - } - } while ( - (cur_match = prev[cur_match & wmask]) > limit && - --chain_length !== 0 - ); - - if (best_len <= s.lookahead) { - return best_len; - } - return s.lookahead; - } - - /* =========================================================================== - * Fill the window when the lookahead becomes insufficient. - * Updates strstart and lookahead. - * - * IN assertion: lookahead < MIN_LOOKAHEAD - * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD - * At least one byte has been read, or avail_in == 0; reads are - * performed for at least two bytes (required for the zip translate_eol - * option -- not supported here). - */ - function fill_window(s) { - var _w_size = s.w_size; - var p, n, m, more, str; - - //Assert(s->lookahead < MIN_LOOKAHEAD, "already enough lookahead"); - - do { - more = s.window_size - s.lookahead - s.strstart; - - // JS ints have 32 bit, block below not needed - /* Deal with !@#$% 64K limit: */ - //if (sizeof(int) <= 2) { - // if (more == 0 && s->strstart == 0 && s->lookahead == 0) { - // more = wsize; - // - // } else if (more == (unsigned)(-1)) { - // /* Very unlikely, but possible on 16 bit machine if - // * strstart == 0 && lookahead == 1 (input done a byte at time) - // */ - // more--; - // } - //} - - /* If the window is almost full and there is insufficient lookahead, - * move the upper half to the lower one to make room in the upper half. - */ - if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) { - utils.arraySet(s.window, s.window, _w_size, _w_size, 0); - s.match_start -= _w_size; - s.strstart -= _w_size; - /* we now have strstart >= MAX_DIST */ - s.block_start -= _w_size; - - /* Slide the hash table (could be avoided with 32 bit values - at the expense of memory usage). We slide even when level == 0 - to keep the hash table consistent if we switch back to level > 0 - later. (Using level 0 permanently is not an optimal usage of - zlib, so we don't care about this pathological case.) - */ - - n = s.hash_size; - p = n; - do { - m = s.head[--p]; - s.head[p] = m >= _w_size ? m - _w_size : 0; - } while (--n); - - n = _w_size; - p = n; - do { - m = s.prev[--p]; - s.prev[p] = m >= _w_size ? m - _w_size : 0; - /* If n is not on any hash chain, prev[n] is garbage but - * its value will never be used. - */ - } while (--n); - - more += _w_size; - } - if (s.strm.avail_in === 0) { - break; - } - - /* If there was no sliding: - * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 && - * more == window_size - lookahead - strstart - * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1) - * => more >= window_size - 2*WSIZE + 2 - * In the BIG_MEM or MMAP case (not yet supported), - * window_size == input_size + MIN_LOOKAHEAD && - * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD. - * Otherwise, window_size == 2*WSIZE so more >= 2. - * If there was sliding, more >= WSIZE. So in all cases, more >= 2. - */ - //Assert(more >= 2, "more < 2"); - n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more); - s.lookahead += n; - - /* Initialize the hash value now that we have some input: */ - if (s.lookahead + s.insert >= MIN_MATCH) { - str = s.strstart - s.insert; - s.ins_h = s.window[str]; - - /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */ - s.ins_h = - ((s.ins_h << s.hash_shift) ^ s.window[str + 1]) & s.hash_mask; - //#if MIN_MATCH != 3 - // Call update_hash() MIN_MATCH-3 more times - //#endif - while (s.insert) { - /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */ - s.ins_h = - ((s.ins_h << s.hash_shift) ^ - s.window[str + MIN_MATCH - 1]) & - s.hash_mask; - - s.prev[str & s.w_mask] = s.head[s.ins_h]; - s.head[s.ins_h] = str; - str++; - s.insert--; - if (s.lookahead + s.insert < MIN_MATCH) { - break; - } - } - } - /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage, - * but this is not important since only literal bytes will be emitted. - */ - } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0); - - /* If the WIN_INIT bytes after the end of the current data have never been - * written, then zero those bytes in order to avoid memory check reports of - * the use of uninitialized (or uninitialised as Julian writes) bytes by - * the longest match routines. Update the high water mark for the next - * time through here. WIN_INIT is set to MAX_MATCH since the longest match - * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead. - */ - // if (s.high_water < s.window_size) { - // var curr = s.strstart + s.lookahead; - // var init = 0; - // - // if (s.high_water < curr) { - // /* Previous high water mark below current data -- zero WIN_INIT - // * bytes or up to end of window, whichever is less. - // */ - // init = s.window_size - curr; - // if (init > WIN_INIT) - // init = WIN_INIT; - // zmemzero(s->window + curr, (unsigned)init); - // s->high_water = curr + init; - // } - // else if (s->high_water < (ulg)curr + WIN_INIT) { - // /* High water mark at or above current data, but below current data - // * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up - // * to end of window, whichever is less. - // */ - // init = (ulg)curr + WIN_INIT - s->high_water; - // if (init > s->window_size - s->high_water) - // init = s->window_size - s->high_water; - // zmemzero(s->window + s->high_water, (unsigned)init); - // s->high_water += init; - // } - // } - // - // Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD, - // "not enough room for search"); - } - - /* =========================================================================== - * Copy without compression as much as possible from the input stream, return - * the current block state. - * This function does not insert new strings in the dictionary since - * uncompressible data is probably not useful. This function is used - * only for the level=0 compression option. - * NOTE: this function should be optimized to avoid extra copying from - * window to pending_buf. - */ - function deflate_stored(s, flush) { - /* Stored blocks are limited to 0xffff bytes, pending_buf is limited - * to pending_buf_size, and each stored block has a 5 byte header: - */ - var max_block_size = 0xffff; - - if (max_block_size > s.pending_buf_size - 5) { - max_block_size = s.pending_buf_size - 5; - } - - /* Copy as much as possible from input to output: */ - for (;;) { - /* Fill the window as much as possible: */ - if (s.lookahead <= 1) { - //Assert(s->strstart < s->w_size+MAX_DIST(s) || - // s->block_start >= (long)s->w_size, "slide too late"); - // if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) || - // s.block_start >= s.w_size)) { - // throw new Error("slide too late"); - // } - - fill_window(s); - if (s.lookahead === 0 && flush === Z_NO_FLUSH) { - return BS_NEED_MORE; - } - - if (s.lookahead === 0) { - break; - } - /* flush the current block */ - } - //Assert(s->block_start >= 0L, "block gone"); - // if (s.block_start < 0) throw new Error("block gone"); - - s.strstart += s.lookahead; - s.lookahead = 0; - - /* Emit a stored block if pending_buf will be full: */ - var max_start = s.block_start + max_block_size; - - if (s.strstart === 0 || s.strstart >= max_start) { - /* strstart == 0 is possible when wraparound on 16-bit machine */ - s.lookahead = s.strstart - max_start; - s.strstart = max_start; - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - /* Flush if we may have to slide, otherwise block_start may become - * negative and the data will be gone: - */ - if (s.strstart - s.block_start >= s.w_size - MIN_LOOKAHEAD) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - } - - s.insert = 0; - - if (flush === Z_FINISH) { - /*** FLUSH_BLOCK(s, 1); ***/ - flush_block_only(s, true); - if (s.strm.avail_out === 0) { - return BS_FINISH_STARTED; - } - /***/ - return BS_FINISH_DONE; - } - - if (s.strstart > s.block_start) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - - return BS_NEED_MORE; - } - - /* =========================================================================== - * Compress as much as possible from the input stream, return the current - * block state. - * This function does not perform lazy evaluation of matches and inserts - * new strings in the dictionary only for unmatched strings or for short - * matches. It is used only for the fast compression options. - */ - function deflate_fast(s, flush) { - var hash_head; /* head of the hash chain */ - var bflush; /* set if current block must be flushed */ - - for (;;) { - /* Make sure that we always have enough lookahead, except - * at the end of the input file. We need MAX_MATCH bytes - * for the next match, plus MIN_MATCH bytes to insert the - * string following the next match. - */ - if (s.lookahead < MIN_LOOKAHEAD) { - fill_window(s); - if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) { - return BS_NEED_MORE; - } - if (s.lookahead === 0) { - break; /* flush the current block */ - } - } - - /* Insert the string window[strstart .. strstart+2] in the - * dictionary, and set hash_head to the head of the hash chain: - */ - hash_head = 0 /*NIL*/; - if (s.lookahead >= MIN_MATCH) { - /*** INSERT_STRING(s, s.strstart, hash_head); ***/ - s.ins_h = - ((s.ins_h << s.hash_shift) ^ - s.window[s.strstart + MIN_MATCH - 1]) & - s.hash_mask; - hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; - s.head[s.ins_h] = s.strstart; - /***/ - } - - /* Find the longest match, discarding those <= prev_length. - * At this point we have always match_length < MIN_MATCH - */ - if ( - hash_head !== 0 /*NIL*/ && - s.strstart - hash_head <= s.w_size - MIN_LOOKAHEAD - ) { - /* To simplify the code, we prevent matches with the string - * of window index 0 (in particular we have to avoid a match - * of the string with itself at the start of the input file). - */ - s.match_length = longest_match(s, hash_head); - /* longest_match() sets match_start */ - } - if (s.match_length >= MIN_MATCH) { - // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only - - /*** _tr_tally_dist(s, s.strstart - s.match_start, - s.match_length - MIN_MATCH, bflush); ***/ - bflush = trees._tr_tally( - s, - s.strstart - s.match_start, - s.match_length - MIN_MATCH, - ); - - s.lookahead -= s.match_length; - - /* Insert new strings in the hash table only if the match length - * is not too large. This saves time but degrades compression. - */ - if ( - s.match_length <= s.max_lazy_match /*max_insert_length*/ && - s.lookahead >= MIN_MATCH - ) { - s.match_length--; /* string at strstart already in table */ - do { - s.strstart++; - /*** INSERT_STRING(s, s.strstart, hash_head); ***/ - s.ins_h = - ((s.ins_h << s.hash_shift) ^ - s.window[s.strstart + MIN_MATCH - 1]) & - s.hash_mask; - hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; - s.head[s.ins_h] = s.strstart; - /***/ - /* strstart never exceeds WSIZE-MAX_MATCH, so there are - * always MIN_MATCH bytes ahead. - */ - } while (--s.match_length !== 0); - s.strstart++; - } else { - s.strstart += s.match_length; - s.match_length = 0; - s.ins_h = s.window[s.strstart]; - /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */ - s.ins_h = - ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + 1]) & - s.hash_mask; - - //#if MIN_MATCH != 3 - // Call UPDATE_HASH() MIN_MATCH-3 more times - //#endif - /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not - * matter since it will be recomputed at next deflate call. - */ - } - } else { - /* No match, output a literal byte */ - //Tracevv((stderr,"%c", s.window[s.strstart])); - /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/ - bflush = trees._tr_tally(s, 0, s.window[s.strstart]); - - s.lookahead--; - s.strstart++; - } - if (bflush) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - } - s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1; - if (flush === Z_FINISH) { - /*** FLUSH_BLOCK(s, 1); ***/ - flush_block_only(s, true); - if (s.strm.avail_out === 0) { - return BS_FINISH_STARTED; - } - /***/ - return BS_FINISH_DONE; - } - if (s.last_lit) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - return BS_BLOCK_DONE; - } - - /* =========================================================================== - * Same as above, but achieves better compression. We use a lazy - * evaluation for matches: a match is finally adopted only if there is - * no better match at the next window position. - */ - function deflate_slow(s, flush) { - var hash_head; /* head of hash chain */ - var bflush; /* set if current block must be flushed */ - - var max_insert; - - /* Process the input block. */ - for (;;) { - /* Make sure that we always have enough lookahead, except - * at the end of the input file. We need MAX_MATCH bytes - * for the next match, plus MIN_MATCH bytes to insert the - * string following the next match. - */ - if (s.lookahead < MIN_LOOKAHEAD) { - fill_window(s); - if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) { - return BS_NEED_MORE; - } - if (s.lookahead === 0) { - break; - } /* flush the current block */ - } - - /* Insert the string window[strstart .. strstart+2] in the - * dictionary, and set hash_head to the head of the hash chain: - */ - hash_head = 0 /*NIL*/; - if (s.lookahead >= MIN_MATCH) { - /*** INSERT_STRING(s, s.strstart, hash_head); ***/ - s.ins_h = - ((s.ins_h << s.hash_shift) ^ - s.window[s.strstart + MIN_MATCH - 1]) & - s.hash_mask; - hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; - s.head[s.ins_h] = s.strstart; - /***/ - } - - /* Find the longest match, discarding those <= prev_length. - */ - s.prev_length = s.match_length; - s.prev_match = s.match_start; - s.match_length = MIN_MATCH - 1; - - if ( - hash_head !== 0 /*NIL*/ && - s.prev_length < s.max_lazy_match && - s.strstart - hash_head <= - s.w_size - MIN_LOOKAHEAD /*MAX_DIST(s)*/ - ) { - /* To simplify the code, we prevent matches with the string - * of window index 0 (in particular we have to avoid a match - * of the string with itself at the start of the input file). - */ - s.match_length = longest_match(s, hash_head); - /* longest_match() sets match_start */ - - if ( - s.match_length <= 5 && - (s.strategy === Z_FILTERED || - (s.match_length === MIN_MATCH && - s.strstart - s.match_start > 4096)) /*TOO_FAR*/ - ) { - /* If prev_match is also MIN_MATCH, match_start is garbage - * but we will ignore the current match anyway. - */ - s.match_length = MIN_MATCH - 1; - } - } - /* If there was a match at the previous step and the current - * match is not better, output the previous match: - */ - if ( - s.prev_length >= MIN_MATCH && - s.match_length <= s.prev_length - ) { - max_insert = s.strstart + s.lookahead - MIN_MATCH; - /* Do not insert strings in hash table beyond this. */ - - //check_match(s, s.strstart-1, s.prev_match, s.prev_length); - - /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match, - s.prev_length - MIN_MATCH, bflush);***/ - bflush = trees._tr_tally( - s, - s.strstart - 1 - s.prev_match, - s.prev_length - MIN_MATCH, - ); - /* Insert in hash table all strings up to the end of the match. - * strstart-1 and strstart are already inserted. If there is not - * enough lookahead, the last two strings are not inserted in - * the hash table. - */ - s.lookahead -= s.prev_length - 1; - s.prev_length -= 2; - do { - if (++s.strstart <= max_insert) { - /*** INSERT_STRING(s, s.strstart, hash_head); ***/ - s.ins_h = - ((s.ins_h << s.hash_shift) ^ - s.window[s.strstart + MIN_MATCH - 1]) & - s.hash_mask; - hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; - s.head[s.ins_h] = s.strstart; - /***/ - } - } while (--s.prev_length !== 0); - s.match_available = 0; - s.match_length = MIN_MATCH - 1; - s.strstart++; - - if (bflush) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - } else if (s.match_available) { - /* If there was no match at the previous position, output a - * single literal. If there was a match but the current match - * is longer, truncate the previous match to a single literal. - */ - //Tracevv((stderr,"%c", s->window[s->strstart-1])); - /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/ - bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]); - - if (bflush) { - /*** FLUSH_BLOCK_ONLY(s, 0) ***/ - flush_block_only(s, false); - /***/ - } - s.strstart++; - s.lookahead--; - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - } else { - /* There is no previous match to compare with, wait for - * the next step to decide. - */ - s.match_available = 1; - s.strstart++; - s.lookahead--; - } - } - //Assert (flush != Z_NO_FLUSH, "no flush?"); - if (s.match_available) { - //Tracevv((stderr,"%c", s->window[s->strstart-1])); - /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/ - bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]); - - s.match_available = 0; - } - s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1; - if (flush === Z_FINISH) { - /*** FLUSH_BLOCK(s, 1); ***/ - flush_block_only(s, true); - if (s.strm.avail_out === 0) { - return BS_FINISH_STARTED; - } - /***/ - return BS_FINISH_DONE; - } - if (s.last_lit) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - - return BS_BLOCK_DONE; - } - - /* =========================================================================== - * For Z_RLE, simply look for runs of bytes, generate matches only of distance - * one. Do not maintain a hash table. (It will be regenerated if this run of - * deflate switches away from Z_RLE.) - */ - function deflate_rle(s, flush) { - var bflush; /* set if current block must be flushed */ - var prev; /* byte at distance one to match */ - var scan, strend; /* scan goes up to strend for length of run */ - - var _win = s.window; - - for (;;) { - /* Make sure that we always have enough lookahead, except - * at the end of the input file. We need MAX_MATCH bytes - * for the longest run, plus one for the unrolled loop. - */ - if (s.lookahead <= MAX_MATCH) { - fill_window(s); - if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) { - return BS_NEED_MORE; - } - if (s.lookahead === 0) { - break; - } /* flush the current block */ - } - - /* See how many times the previous byte repeats */ - s.match_length = 0; - if (s.lookahead >= MIN_MATCH && s.strstart > 0) { - scan = s.strstart - 1; - prev = _win[scan]; - if ( - prev === _win[++scan] && - prev === _win[++scan] && - prev === _win[++scan] - ) { - strend = s.strstart + MAX_MATCH; - do { - /*jshint noempty:false*/ - } while ( - prev === _win[++scan] && - prev === _win[++scan] && - prev === _win[++scan] && - prev === _win[++scan] && - prev === _win[++scan] && - prev === _win[++scan] && - prev === _win[++scan] && - prev === _win[++scan] && - scan < strend - ); - s.match_length = MAX_MATCH - (strend - scan); - if (s.match_length > s.lookahead) { - s.match_length = s.lookahead; - } - } - //Assert(scan <= s->window+(uInt)(s->window_size-1), "wild scan"); - } - - /* Emit match if have run of MIN_MATCH or longer, else emit literal */ - if (s.match_length >= MIN_MATCH) { - //check_match(s, s.strstart, s.strstart - 1, s.match_length); - - /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/ - bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH); - - s.lookahead -= s.match_length; - s.strstart += s.match_length; - s.match_length = 0; - } else { - /* No match, output a literal byte */ - //Tracevv((stderr,"%c", s->window[s->strstart])); - /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/ - bflush = trees._tr_tally(s, 0, s.window[s.strstart]); - - s.lookahead--; - s.strstart++; - } - if (bflush) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - } - s.insert = 0; - if (flush === Z_FINISH) { - /*** FLUSH_BLOCK(s, 1); ***/ - flush_block_only(s, true); - if (s.strm.avail_out === 0) { - return BS_FINISH_STARTED; - } - /***/ - return BS_FINISH_DONE; - } - if (s.last_lit) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - return BS_BLOCK_DONE; - } - - /* =========================================================================== - * For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table. - * (It will be regenerated if this run of deflate switches away from Huffman.) - */ - function deflate_huff(s, flush) { - var bflush; /* set if current block must be flushed */ - - for (;;) { - /* Make sure that we have a literal to write. */ - if (s.lookahead === 0) { - fill_window(s); - if (s.lookahead === 0) { - if (flush === Z_NO_FLUSH) { - return BS_NEED_MORE; - } - break; /* flush the current block */ - } - } - - /* Output a literal byte */ - s.match_length = 0; - //Tracevv((stderr,"%c", s->window[s->strstart])); - /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/ - bflush = trees._tr_tally(s, 0, s.window[s.strstart]); - s.lookahead--; - s.strstart++; - if (bflush) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - } - s.insert = 0; - if (flush === Z_FINISH) { - /*** FLUSH_BLOCK(s, 1); ***/ - flush_block_only(s, true); - if (s.strm.avail_out === 0) { - return BS_FINISH_STARTED; - } - /***/ - return BS_FINISH_DONE; - } - if (s.last_lit) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - return BS_BLOCK_DONE; - } - - /* Values for max_lazy_match, good_match and max_chain_length, depending on - * the desired pack level (0..9). The values given below have been tuned to - * exclude worst case performance for pathological files. Better values may be - * found for specific files. - */ - function Config(good_length, max_lazy, nice_length, max_chain, func) { - this.good_length = good_length; - this.max_lazy = max_lazy; - this.nice_length = nice_length; - this.max_chain = max_chain; - this.func = func; - } - - var configuration_table; - - configuration_table = [ - /* good lazy nice chain */ - new Config(0, 0, 0, 0, deflate_stored) /* 0 store only */, - new Config( - 4, - 4, - 8, - 4, - deflate_fast, - ) /* 1 max speed, no lazy matches */, - new Config(4, 5, 16, 8, deflate_fast) /* 2 */, - new Config(4, 6, 32, 32, deflate_fast) /* 3 */, - - new Config(4, 4, 16, 16, deflate_slow) /* 4 lazy matches */, - new Config(8, 16, 32, 32, deflate_slow) /* 5 */, - new Config(8, 16, 128, 128, deflate_slow) /* 6 */, - new Config(8, 32, 128, 256, deflate_slow) /* 7 */, - new Config(32, 128, 258, 1024, deflate_slow) /* 8 */, - new Config( - 32, - 258, - 258, - 4096, - deflate_slow, - ) /* 9 max compression */, - ]; - - /* =========================================================================== - * Initialize the "longest match" routines for a new zlib stream - */ - function lm_init(s) { - s.window_size = 2 * s.w_size; - - /*** CLEAR_HASH(s); ***/ - zero(s.head); // Fill with NIL (= 0); - - /* Set the default configuration parameters: - */ - s.max_lazy_match = configuration_table[s.level].max_lazy; - s.good_match = configuration_table[s.level].good_length; - s.nice_match = configuration_table[s.level].nice_length; - s.max_chain_length = configuration_table[s.level].max_chain; - - s.strstart = 0; - s.block_start = 0; - s.lookahead = 0; - s.insert = 0; - s.match_length = s.prev_length = MIN_MATCH - 1; - s.match_available = 0; - s.ins_h = 0; - } - - function DeflateState() { - this.strm = null; /* pointer back to this zlib stream */ - this.status = 0; /* as the name implies */ - this.pending_buf = null; /* output still pending */ - this.pending_buf_size = 0; /* size of pending_buf */ - this.pending_out = 0; /* next pending byte to output to the stream */ - this.pending = 0; /* nb of bytes in the pending buffer */ - this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */ - this.gzhead = null; /* gzip header information to write */ - this.gzindex = 0; /* where in extra, name, or comment */ - this.method = Z_DEFLATED; /* can only be DEFLATED */ - this.last_flush = - -1; /* value of flush param for previous deflate call */ - - this.w_size = 0; /* LZ77 window size (32K by default) */ - this.w_bits = 0; /* log2(w_size) (8..16) */ - this.w_mask = 0; /* w_size - 1 */ - - this.window = null; - /* Sliding window. Input bytes are read into the second half of the window, - * and move to the first half later to keep a dictionary of at least wSize - * bytes. With this organization, matches are limited to a distance of - * wSize-MAX_MATCH bytes, but this ensures that IO is always - * performed with a length multiple of the block size. - */ - - this.window_size = 0; - /* Actual size of window: 2*wSize, except when the user input buffer - * is directly used as sliding window. - */ - - this.prev = null; - /* Link to older string with same hash index. To limit the size of this - * array to 64K, this link is maintained only for the last 32K strings. - * An index in this array is thus a window index modulo 32K. - */ - - this.head = null; /* Heads of the hash chains or NIL. */ - - this.ins_h = 0; /* hash index of string to be inserted */ - this.hash_size = 0; /* number of elements in hash table */ - this.hash_bits = 0; /* log2(hash_size) */ - this.hash_mask = 0; /* hash_size-1 */ - - this.hash_shift = 0; - /* Number of bits by which ins_h must be shifted at each input - * step. It must be such that after MIN_MATCH steps, the oldest - * byte no longer takes part in the hash key, that is: - * hash_shift * MIN_MATCH >= hash_bits - */ - - this.block_start = 0; - /* Window position at the beginning of the current output block. Gets - * negative when the window is moved backwards. - */ - - this.match_length = 0; /* length of best match */ - this.prev_match = 0; /* previous match */ - this.match_available = 0; /* set if previous match exists */ - this.strstart = 0; /* start of string to insert */ - this.match_start = 0; /* start of matching string */ - this.lookahead = 0; /* number of valid bytes ahead in window */ - - this.prev_length = 0; - /* Length of the best match at previous step. Matches not greater than this - * are discarded. This is used in the lazy match evaluation. - */ - - this.max_chain_length = 0; - /* To speed up deflation, hash chains are never searched beyond this - * length. A higher limit improves compression ratio but degrades the - * speed. - */ - - this.max_lazy_match = 0; - /* Attempt to find a better match only when the current match is strictly - * smaller than this value. This mechanism is used only for compression - * levels >= 4. - */ - // That's alias to max_lazy_match, don't use directly - //this.max_insert_length = 0; - /* Insert new strings in the hash table only if the match length is not - * greater than this length. This saves time but degrades compression. - * max_insert_length is used only for compression levels <= 3. - */ - - this.level = 0; /* compression level (1..9) */ - this.strategy = 0; /* favor or force Huffman coding*/ - - this.good_match = 0; - /* Use a faster search when the previous match is longer than this */ - - this.nice_match = 0; /* Stop searching when current match exceeds this */ - - /* used by trees.c: */ - - /* Didn't use ct_data typedef below to suppress compiler warning */ - - // struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */ - // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */ - // struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */ - - // Use flat array of DOUBLE size, with interleaved fata, - // because JS does not support effective - this.dyn_ltree = new utils.Buf16(HEAP_SIZE * 2); - this.dyn_dtree = new utils.Buf16((2 * D_CODES + 1) * 2); - this.bl_tree = new utils.Buf16((2 * BL_CODES + 1) * 2); - zero(this.dyn_ltree); - zero(this.dyn_dtree); - zero(this.bl_tree); - - this.l_desc = null; /* desc. for literal tree */ - this.d_desc = null; /* desc. for distance tree */ - this.bl_desc = null; /* desc. for bit length tree */ - - //ush bl_count[MAX_BITS+1]; - this.bl_count = new utils.Buf16(MAX_BITS + 1); - /* number of codes at each bit length for an optimal tree */ - - //int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */ - this.heap = new utils.Buf16( - 2 * L_CODES + 1, - ); /* heap used to build the Huffman trees */ - zero(this.heap); - - this.heap_len = 0; /* number of elements in the heap */ - this.heap_max = 0; /* element of largest frequency */ - /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used. - * The same heap array is used to build all trees. - */ - - this.depth = new utils.Buf16(2 * L_CODES + 1); //uch depth[2*L_CODES+1]; - zero(this.depth); - /* Depth of each subtree used as tie breaker for trees of equal frequency - */ - - this.l_buf = 0; /* buffer index for literals or lengths */ - - this.lit_bufsize = 0; - /* Size of match buffer for literals/lengths. There are 4 reasons for - * limiting lit_bufsize to 64K: - * - frequencies can be kept in 16 bit counters - * - if compression is not successful for the first block, all input - * data is still in the window so we can still emit a stored block even - * when input comes from standard input. (This can also be done for - * all blocks if lit_bufsize is not greater than 32K.) - * - if compression is not successful for a file smaller than 64K, we can - * even emit a stored file instead of a stored block (saving 5 bytes). - * This is applicable only for zip (not gzip or zlib). - * - creating new Huffman trees less frequently may not provide fast - * adaptation to changes in the input data statistics. (Take for - * example a binary file with poorly compressible code followed by - * a highly compressible string table.) Smaller buffer sizes give - * fast adaptation but have of course the overhead of transmitting - * trees more frequently. - * - I can't count above 4 - */ - - this.last_lit = 0; /* running index in l_buf */ - - this.d_buf = 0; - /* Buffer index for distances. To simplify the code, d_buf and l_buf have - * the same number of elements. To use different lengths, an extra flag - * array would be necessary. - */ - - this.opt_len = 0; /* bit length of current block with optimal trees */ - this.static_len = 0; /* bit length of current block with static trees */ - this.matches = 0; /* number of string matches in current block */ - this.insert = 0; /* bytes at end of window left to insert */ - - this.bi_buf = 0; - /* Output buffer. bits are inserted starting at the bottom (least - * significant bits). - */ - this.bi_valid = 0; - /* Number of valid bits in bi_buf. All bits above the last valid bit - * are always zero. - */ - - // Used for window memory init. We safely ignore it for JS. That makes - // sense only for pointers and memory check tools. - //this.high_water = 0; - /* High water mark offset in window for initialized bytes -- bytes above - * this are set to zero in order to avoid memory check warnings when - * longest match routines access bytes past the input. This is then - * updated to the new high water mark. - */ - } - - function deflateResetKeep(strm) { - var s; - - if (!strm || !strm.state) { - return err(strm, Z_STREAM_ERROR); - } - - strm.total_in = strm.total_out = 0; - strm.data_type = Z_UNKNOWN; - - s = strm.state; - s.pending = 0; - s.pending_out = 0; - - if (s.wrap < 0) { - s.wrap = -s.wrap; - /* was made negative by deflate(..., Z_FINISH); */ - } - s.status = s.wrap ? INIT_STATE : BUSY_STATE; - strm.adler = - s.wrap === 2 - ? 0 // crc32(0, Z_NULL, 0) - : 1; // adler32(0, Z_NULL, 0) - s.last_flush = Z_NO_FLUSH; - trees._tr_init(s); - return Z_OK; - } - - function deflateReset(strm) { - var ret = deflateResetKeep(strm); - if (ret === Z_OK) { - lm_init(strm.state); - } - return ret; - } - - function deflateSetHeader(strm, head) { - if (!strm || !strm.state) { - return Z_STREAM_ERROR; - } - if (strm.state.wrap !== 2) { - return Z_STREAM_ERROR; - } - strm.state.gzhead = head; - return Z_OK; - } - - function deflateInit2( - strm, - level, - method, - windowBits, - memLevel, - strategy, - ) { - if (!strm) { - // === Z_NULL - return Z_STREAM_ERROR; - } - var wrap = 1; - - if (level === Z_DEFAULT_COMPRESSION) { - level = 6; - } - - if (windowBits < 0) { - /* suppress zlib wrapper */ - wrap = 0; - windowBits = -windowBits; - } else if (windowBits > 15) { - wrap = 2; /* write gzip wrapper instead */ - windowBits -= 16; - } - - if ( - memLevel < 1 || - memLevel > MAX_MEM_LEVEL || - method !== Z_DEFLATED || - windowBits < 8 || - windowBits > 15 || - level < 0 || - level > 9 || - strategy < 0 || - strategy > Z_FIXED - ) { - return err(strm, Z_STREAM_ERROR); - } - - if (windowBits === 8) { - windowBits = 9; - } - /* until 256-byte window bug fixed */ - - var s = new DeflateState(); - - strm.state = s; - s.strm = strm; - - s.wrap = wrap; - s.gzhead = null; - s.w_bits = windowBits; - s.w_size = 1 << s.w_bits; - s.w_mask = s.w_size - 1; - - s.hash_bits = memLevel + 7; - s.hash_size = 1 << s.hash_bits; - s.hash_mask = s.hash_size - 1; - s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH); - - s.window = new utils.Buf8(s.w_size * 2); - s.head = new utils.Buf16(s.hash_size); - s.prev = new utils.Buf16(s.w_size); - - // Don't need mem init magic for JS. - //s.high_water = 0; /* nothing written to s->window yet */ - - s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */ - - s.pending_buf_size = s.lit_bufsize * 4; - - //overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2); - //s->pending_buf = (uchf *) overlay; - s.pending_buf = new utils.Buf8(s.pending_buf_size); - - // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`) - //s->d_buf = overlay + s->lit_bufsize/sizeof(ush); - s.d_buf = 1 * s.lit_bufsize; - - //s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize; - s.l_buf = (1 + 2) * s.lit_bufsize; - - s.level = level; - s.strategy = strategy; - s.method = method; - - return deflateReset(strm); - } - - function deflateInit(strm, level) { - return deflateInit2( - strm, - level, - Z_DEFLATED, - MAX_WBITS, - DEF_MEM_LEVEL, - Z_DEFAULT_STRATEGY, - ); - } - - function deflate(strm, flush) { - var old_flush, s; - var beg, val; // for gzip header write only - - if (!strm || !strm.state || flush > Z_BLOCK || flush < 0) { - return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR; - } - - s = strm.state; - - if ( - !strm.output || - (!strm.input && strm.avail_in !== 0) || - (s.status === FINISH_STATE && flush !== Z_FINISH) - ) { - return err( - strm, - strm.avail_out === 0 ? Z_BUF_ERROR : Z_STREAM_ERROR, - ); - } - - s.strm = strm; /* just in case */ - old_flush = s.last_flush; - s.last_flush = flush; - - /* Write the header */ - if (s.status === INIT_STATE) { - if (s.wrap === 2) { - // GZIP header - strm.adler = 0; //crc32(0L, Z_NULL, 0); - put_byte(s, 31); - put_byte(s, 139); - put_byte(s, 8); - if (!s.gzhead) { - // s->gzhead == Z_NULL - put_byte(s, 0); - put_byte(s, 0); - put_byte(s, 0); - put_byte(s, 0); - put_byte(s, 0); - put_byte( - s, - s.level === 9 - ? 2 - : s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 - ? 4 - : 0, - ); - put_byte(s, OS_CODE); - s.status = BUSY_STATE; - } else { - put_byte( - s, - (s.gzhead.text ? 1 : 0) + - (s.gzhead.hcrc ? 2 : 0) + - (!s.gzhead.extra ? 0 : 4) + - (!s.gzhead.name ? 0 : 8) + - (!s.gzhead.comment ? 0 : 16), - ); - put_byte(s, s.gzhead.time & 0xff); - put_byte(s, (s.gzhead.time >> 8) & 0xff); - put_byte(s, (s.gzhead.time >> 16) & 0xff); - put_byte(s, (s.gzhead.time >> 24) & 0xff); - put_byte( - s, - s.level === 9 - ? 2 - : s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 - ? 4 - : 0, - ); - put_byte(s, s.gzhead.os & 0xff); - if (s.gzhead.extra && s.gzhead.extra.length) { - put_byte(s, s.gzhead.extra.length & 0xff); - put_byte(s, (s.gzhead.extra.length >> 8) & 0xff); - } - if (s.gzhead.hcrc) { - strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0); - } - s.gzindex = 0; - s.status = EXTRA_STATE; - } - } // DEFLATE header - else { - var header = (Z_DEFLATED + ((s.w_bits - 8) << 4)) << 8; - var level_flags = -1; - - if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) { - level_flags = 0; - } else if (s.level < 6) { - level_flags = 1; - } else if (s.level === 6) { - level_flags = 2; - } else { - level_flags = 3; - } - header |= level_flags << 6; - if (s.strstart !== 0) { - header |= PRESET_DICT; - } - header += 31 - (header % 31); - - s.status = BUSY_STATE; - putShortMSB(s, header); - - /* Save the adler32 of the preset dictionary: */ - if (s.strstart !== 0) { - putShortMSB(s, strm.adler >>> 16); - putShortMSB(s, strm.adler & 0xffff); - } - strm.adler = 1; // adler32(0L, Z_NULL, 0); - } - } - - //#ifdef GZIP - if (s.status === EXTRA_STATE) { - if (s.gzhead.extra /* != Z_NULL*/) { - beg = s.pending; /* start of bytes to update crc */ - - while (s.gzindex < (s.gzhead.extra.length & 0xffff)) { - if (s.pending === s.pending_buf_size) { - if (s.gzhead.hcrc && s.pending > beg) { - strm.adler = crc32( - strm.adler, - s.pending_buf, - s.pending - beg, - beg, - ); - } - flush_pending(strm); - beg = s.pending; - if (s.pending === s.pending_buf_size) { - break; - } - } - put_byte(s, s.gzhead.extra[s.gzindex] & 0xff); - s.gzindex++; - } - if (s.gzhead.hcrc && s.pending > beg) { - strm.adler = crc32( - strm.adler, - s.pending_buf, - s.pending - beg, - beg, - ); - } - if (s.gzindex === s.gzhead.extra.length) { - s.gzindex = 0; - s.status = NAME_STATE; - } - } else { - s.status = NAME_STATE; - } - } - if (s.status === NAME_STATE) { - if (s.gzhead.name /* != Z_NULL*/) { - beg = s.pending; /* start of bytes to update crc */ - //int val; - - do { - if (s.pending === s.pending_buf_size) { - if (s.gzhead.hcrc && s.pending > beg) { - strm.adler = crc32( - strm.adler, - s.pending_buf, - s.pending - beg, - beg, - ); - } - flush_pending(strm); - beg = s.pending; - if (s.pending === s.pending_buf_size) { - val = 1; - break; - } - } - // JS specific: little magic to add zero terminator to end of string - if (s.gzindex < s.gzhead.name.length) { - val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff; - } else { - val = 0; - } - put_byte(s, val); - } while (val !== 0); - - if (s.gzhead.hcrc && s.pending > beg) { - strm.adler = crc32( - strm.adler, - s.pending_buf, - s.pending - beg, - beg, - ); - } - if (val === 0) { - s.gzindex = 0; - s.status = COMMENT_STATE; - } - } else { - s.status = COMMENT_STATE; - } - } - if (s.status === COMMENT_STATE) { - if (s.gzhead.comment /* != Z_NULL*/) { - beg = s.pending; /* start of bytes to update crc */ - //int val; - - do { - if (s.pending === s.pending_buf_size) { - if (s.gzhead.hcrc && s.pending > beg) { - strm.adler = crc32( - strm.adler, - s.pending_buf, - s.pending - beg, - beg, - ); - } - flush_pending(strm); - beg = s.pending; - if (s.pending === s.pending_buf_size) { - val = 1; - break; - } - } - // JS specific: little magic to add zero terminator to end of string - if (s.gzindex < s.gzhead.comment.length) { - val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff; - } else { - val = 0; - } - put_byte(s, val); - } while (val !== 0); - - if (s.gzhead.hcrc && s.pending > beg) { - strm.adler = crc32( - strm.adler, - s.pending_buf, - s.pending - beg, - beg, - ); - } - if (val === 0) { - s.status = HCRC_STATE; - } - } else { - s.status = HCRC_STATE; - } - } - if (s.status === HCRC_STATE) { - if (s.gzhead.hcrc) { - if (s.pending + 2 > s.pending_buf_size) { - flush_pending(strm); - } - if (s.pending + 2 <= s.pending_buf_size) { - put_byte(s, strm.adler & 0xff); - put_byte(s, (strm.adler >> 8) & 0xff); - strm.adler = 0; //crc32(0L, Z_NULL, 0); - s.status = BUSY_STATE; - } - } else { - s.status = BUSY_STATE; - } - } - //#endif - - /* Flush as much pending output as possible */ - if (s.pending !== 0) { - flush_pending(strm); - if (strm.avail_out === 0) { - /* Since avail_out is 0, deflate will be called again with - * more output space, but possibly with both pending and - * avail_in equal to zero. There won't be anything to do, - * but this is not an error situation so make sure we - * return OK instead of BUF_ERROR at next call of deflate: - */ - s.last_flush = -1; - return Z_OK; - } - - /* Make sure there is something to do and avoid duplicate consecutive - * flushes. For repeated and useless calls with Z_FINISH, we keep - * returning Z_STREAM_END instead of Z_BUF_ERROR. - */ - } else if ( - strm.avail_in === 0 && - rank(flush) <= rank(old_flush) && - flush !== Z_FINISH - ) { - return err(strm, Z_BUF_ERROR); - } - - /* User must not provide more input after the first FINISH: */ - if (s.status === FINISH_STATE && strm.avail_in !== 0) { - return err(strm, Z_BUF_ERROR); - } - - /* Start a new block or continue the current one. - */ - if ( - strm.avail_in !== 0 || - s.lookahead !== 0 || - (flush !== Z_NO_FLUSH && s.status !== FINISH_STATE) - ) { - var bstate = - s.strategy === Z_HUFFMAN_ONLY - ? deflate_huff(s, flush) - : s.strategy === Z_RLE - ? deflate_rle(s, flush) - : configuration_table[s.level].func(s, flush); - - if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) { - s.status = FINISH_STATE; - } - if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) { - if (strm.avail_out === 0) { - s.last_flush = -1; - /* avoid BUF_ERROR next call, see above */ - } - return Z_OK; - /* If flush != Z_NO_FLUSH && avail_out == 0, the next call - * of deflate should use the same flush parameter to make sure - * that the flush is complete. So we don't have to output an - * empty block here, this will be done at next call. This also - * ensures that for a very small output buffer, we emit at most - * one empty block. - */ - } - if (bstate === BS_BLOCK_DONE) { - if (flush === Z_PARTIAL_FLUSH) { - trees._tr_align(s); - } else if (flush !== Z_BLOCK) { - /* FULL_FLUSH or SYNC_FLUSH */ - - trees._tr_stored_block(s, 0, 0, false); - /* For a full flush, this empty block will be recognized - * as a special marker by inflate_sync(). - */ - if (flush === Z_FULL_FLUSH) { - /*** CLEAR_HASH(s); ***/ /* forget history */ - zero(s.head); // Fill with NIL (= 0); - - if (s.lookahead === 0) { - s.strstart = 0; - s.block_start = 0; - s.insert = 0; - } - } - } - flush_pending(strm); - if (strm.avail_out === 0) { - s.last_flush = - -1; /* avoid BUF_ERROR at next call, see above */ - return Z_OK; - } - } - } - //Assert(strm->avail_out > 0, "bug2"); - //if (strm.avail_out <= 0) { throw new Error("bug2");} - - if (flush !== Z_FINISH) { - return Z_OK; - } - if (s.wrap <= 0) { - return Z_STREAM_END; - } - - /* Write the trailer */ - if (s.wrap === 2) { - put_byte(s, strm.adler & 0xff); - put_byte(s, (strm.adler >> 8) & 0xff); - put_byte(s, (strm.adler >> 16) & 0xff); - put_byte(s, (strm.adler >> 24) & 0xff); - put_byte(s, strm.total_in & 0xff); - put_byte(s, (strm.total_in >> 8) & 0xff); - put_byte(s, (strm.total_in >> 16) & 0xff); - put_byte(s, (strm.total_in >> 24) & 0xff); - } else { - putShortMSB(s, strm.adler >>> 16); - putShortMSB(s, strm.adler & 0xffff); - } - - flush_pending(strm); - /* If avail_out is zero, the application will call deflate again - * to flush the rest. - */ - if (s.wrap > 0) { - s.wrap = -s.wrap; - } - /* write the trailer only once! */ - return s.pending !== 0 ? Z_OK : Z_STREAM_END; - } - - function deflateEnd(strm) { - var status; - - if (!strm /*== Z_NULL*/ || !strm.state /*== Z_NULL*/) { - return Z_STREAM_ERROR; - } - - status = strm.state.status; - if ( - status !== INIT_STATE && - status !== EXTRA_STATE && - status !== NAME_STATE && - status !== COMMENT_STATE && - status !== HCRC_STATE && - status !== BUSY_STATE && - status !== FINISH_STATE - ) { - return err(strm, Z_STREAM_ERROR); - } - - strm.state = null; - - return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK; - } - - /* ========================================================================= - * Initializes the compression dictionary from the given byte - * sequence without producing any compressed output. - */ - function deflateSetDictionary(strm, dictionary) { - var dictLength = dictionary.length; - - var s; - var str, n; - var wrap; - var avail; - var next; - var input; - var tmpDict; - - if (!strm /*== Z_NULL*/ || !strm.state /*== Z_NULL*/) { - return Z_STREAM_ERROR; - } - - s = strm.state; - wrap = s.wrap; - - if ( - wrap === 2 || - (wrap === 1 && s.status !== INIT_STATE) || - s.lookahead - ) { - return Z_STREAM_ERROR; - } - - /* when using zlib wrappers, compute Adler-32 for provided dictionary */ - if (wrap === 1) { - /* adler32(strm->adler, dictionary, dictLength); */ - strm.adler = adler32(strm.adler, dictionary, dictLength, 0); - } - - s.wrap = 0; /* avoid computing Adler-32 in read_buf */ - - /* if dictionary would fill window, just replace the history */ - if (dictLength >= s.w_size) { - if (wrap === 0) { - /* already empty otherwise */ - /*** CLEAR_HASH(s); ***/ - zero(s.head); // Fill with NIL (= 0); - s.strstart = 0; - s.block_start = 0; - s.insert = 0; - } - /* use the tail */ - // dictionary = dictionary.slice(dictLength - s.w_size); - tmpDict = new utils.Buf8(s.w_size); - utils.arraySet( - tmpDict, - dictionary, - dictLength - s.w_size, - s.w_size, - 0, - ); - dictionary = tmpDict; - dictLength = s.w_size; - } - /* insert dictionary into window and hash */ - avail = strm.avail_in; - next = strm.next_in; - input = strm.input; - strm.avail_in = dictLength; - strm.next_in = 0; - strm.input = dictionary; - fill_window(s); - while (s.lookahead >= MIN_MATCH) { - str = s.strstart; - n = s.lookahead - (MIN_MATCH - 1); - do { - /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */ - s.ins_h = - ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & - s.hash_mask; - - s.prev[str & s.w_mask] = s.head[s.ins_h]; - - s.head[s.ins_h] = str; - str++; - } while (--n); - s.strstart = str; - s.lookahead = MIN_MATCH - 1; - fill_window(s); - } - s.strstart += s.lookahead; - s.block_start = s.strstart; - s.insert = s.lookahead; - s.lookahead = 0; - s.match_length = s.prev_length = MIN_MATCH - 1; - s.match_available = 0; - strm.next_in = next; - strm.input = input; - strm.avail_in = avail; - s.wrap = wrap; - return Z_OK; - } - - exports.deflateInit = deflateInit; - exports.deflateInit2 = deflateInit2; - exports.deflateReset = deflateReset; - exports.deflateResetKeep = deflateResetKeep; - exports.deflateSetHeader = deflateSetHeader; - exports.deflate = deflate; - exports.deflateEnd = deflateEnd; - exports.deflateSetDictionary = deflateSetDictionary; - exports.deflateInfo = "pako deflate (from Nodeca project)"; - - /* Not implemented -exports.deflateBound = deflateBound; -exports.deflateCopy = deflateCopy; -exports.deflateParams = deflateParams; -exports.deflatePending = deflatePending; -exports.deflatePrime = deflatePrime; -exports.deflateTune = deflateTune; -*/ - }, - { - "../utils/common": 41, - "./adler32": 43, - "./crc32": 45, - "./messages": 51, - "./trees": 52, - }, - ], - 47: [ - function (require, module, exports) { - "use strict"; - - // (C) 1995-2013 Jean-loup Gailly and Mark Adler - // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin - // - // This software is provided 'as-is', without any express or implied - // warranty. In no event will the authors be held liable for any damages - // arising from the use of this software. - // - // Permission is granted to anyone to use this software for any purpose, - // including commercial applications, and to alter it and redistribute it - // freely, subject to the following restrictions: - // - // 1. The origin of this software must not be misrepresented; you must not - // claim that you wrote the original software. If you use this software - // in a product, an acknowledgment in the product documentation would be - // appreciated but is not required. - // 2. Altered source versions must be plainly marked as such, and must not be - // misrepresented as being the original software. - // 3. This notice may not be removed or altered from any source distribution. - - function GZheader() { - /* true if compressed data believed to be text */ - this.text = 0; - /* modification time */ - this.time = 0; - /* extra flags (not used when writing a gzip file) */ - this.xflags = 0; - /* operating system */ - this.os = 0; - /* pointer to extra field or Z_NULL if none */ - this.extra = null; - /* extra field length (valid if extra != Z_NULL) */ - this.extra_len = 0; // Actually, we don't need it in JS, - // but leave for few code modifications - - // - // Setup limits is not necessary because in js we should not preallocate memory - // for inflate use constant limit in 65536 bytes - // - - /* space at extra (only when reading header) */ - // this.extra_max = 0; - /* pointer to zero-terminated file name or Z_NULL */ - this.name = ""; - /* space at name (only when reading header) */ - // this.name_max = 0; - /* pointer to zero-terminated comment or Z_NULL */ - this.comment = ""; - /* space at comment (only when reading header) */ - // this.comm_max = 0; - /* true if there was or will be a header crc */ - this.hcrc = 0; - /* true when done reading gzip header (not used when writing a gzip file) */ - this.done = false; - } - - module.exports = GZheader; - }, - {}, - ], - 48: [ - function (require, module, exports) { - "use strict"; - - // (C) 1995-2013 Jean-loup Gailly and Mark Adler - // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin - // - // This software is provided 'as-is', without any express or implied - // warranty. In no event will the authors be held liable for any damages - // arising from the use of this software. - // - // Permission is granted to anyone to use this software for any purpose, - // including commercial applications, and to alter it and redistribute it - // freely, subject to the following restrictions: - // - // 1. The origin of this software must not be misrepresented; you must not - // claim that you wrote the original software. If you use this software - // in a product, an acknowledgment in the product documentation would be - // appreciated but is not required. - // 2. Altered source versions must be plainly marked as such, and must not be - // misrepresented as being the original software. - // 3. This notice may not be removed or altered from any source distribution. - - // See state defs from inflate.js - var BAD = 30; /* got a data error -- remain here until reset */ - var TYPE = 12; /* i: waiting for type bits, including last-flag bit */ - - /* - Decode literal, length, and distance codes and write out the resulting - literal and match bytes until either not enough input or output is - available, an end-of-block is encountered, or a data error is encountered. - When large enough input and output buffers are supplied to inflate(), for - example, a 16K input buffer and a 64K output buffer, more than 95% of the - inflate execution time is spent in this routine. - - Entry assumptions: - - state.mode === LEN - strm.avail_in >= 6 - strm.avail_out >= 258 - start >= strm.avail_out - state.bits < 8 - - On return, state.mode is one of: - - LEN -- ran out of enough output space or enough available input - TYPE -- reached end of block code, inflate() to interpret next block - BAD -- error in block data - - Notes: - - - The maximum input bits used by a length/distance pair is 15 bits for the - length code, 5 bits for the length extra, 15 bits for the distance code, - and 13 bits for the distance extra. This totals 48 bits, or six bytes. - Therefore if strm.avail_in >= 6, then there is enough input to avoid - checking for available input while decoding. - - - The maximum bytes that a single length/distance pair can output is 258 - bytes, which is the maximum length that can be coded. inflate_fast() - requires strm.avail_out >= 258 for each loop to avoid checking for - output space. - */ - module.exports = function inflate_fast(strm, start) { - var state; - var _in; /* local strm.input */ - var last; /* have enough input while in < last */ - var _out; /* local strm.output */ - var beg; /* inflate()'s initial strm.output */ - var end; /* while out < end, enough space available */ - //#ifdef INFLATE_STRICT - var dmax; /* maximum distance from zlib header */ - //#endif - var wsize; /* window size or zero if not using window */ - var whave; /* valid bytes in the window */ - var wnext; /* window write index */ - // Use `s_window` instead `window`, avoid conflict with instrumentation tools - var s_window; /* allocated sliding window, if wsize != 0 */ - var hold; /* local strm.hold */ - var bits; /* local strm.bits */ - var lcode; /* local strm.lencode */ - var dcode; /* local strm.distcode */ - var lmask; /* mask for first level of length codes */ - var dmask; /* mask for first level of distance codes */ - var here; /* retrieved table entry */ - var op; /* code bits, operation, extra bits, or */ - /* window position, window bytes to copy */ - var len; /* match length, unused bytes */ - var dist; /* match distance */ - var from; /* where to copy match from */ - var from_source; - - var input, output; // JS specific, because we have no pointers - - /* copy state to local variables */ - state = strm.state; - //here = state.here; - _in = strm.next_in; - input = strm.input; - last = _in + (strm.avail_in - 5); - _out = strm.next_out; - output = strm.output; - beg = _out - (start - strm.avail_out); - end = _out + (strm.avail_out - 257); - //#ifdef INFLATE_STRICT - dmax = state.dmax; - //#endif - wsize = state.wsize; - whave = state.whave; - wnext = state.wnext; - s_window = state.window; - hold = state.hold; - bits = state.bits; - lcode = state.lencode; - dcode = state.distcode; - lmask = (1 << state.lenbits) - 1; - dmask = (1 << state.distbits) - 1; - - /* decode literals and length/distances until end-of-block or not enough - input data or output space */ - - top: do { - if (bits < 15) { - hold += input[_in++] << bits; - bits += 8; - hold += input[_in++] << bits; - bits += 8; - } - - here = lcode[hold & lmask]; - - dolen: for (;;) { - // Goto emulation - op = here >>> 24 /*here.bits*/; - hold >>>= op; - bits -= op; - op = (here >>> 16) & 0xff /*here.op*/; - if (op === 0) { - /* literal */ - //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? - // "inflate: literal '%c'\n" : - // "inflate: literal 0x%02x\n", here.val)); - output[_out++] = here & 0xffff /*here.val*/; - } else if (op & 16) { - /* length base */ - len = here & 0xffff /*here.val*/; - op &= 15; /* number of extra bits */ - if (op) { - if (bits < op) { - hold += input[_in++] << bits; - bits += 8; - } - len += hold & ((1 << op) - 1); - hold >>>= op; - bits -= op; - } - //Tracevv((stderr, "inflate: length %u\n", len)); - if (bits < 15) { - hold += input[_in++] << bits; - bits += 8; - hold += input[_in++] << bits; - bits += 8; - } - here = dcode[hold & dmask]; - - dodist: for (;;) { - // goto emulation - op = here >>> 24 /*here.bits*/; - hold >>>= op; - bits -= op; - op = (here >>> 16) & 0xff /*here.op*/; - - if (op & 16) { - /* distance base */ - dist = here & 0xffff /*here.val*/; - op &= 15; /* number of extra bits */ - if (bits < op) { - hold += input[_in++] << bits; - bits += 8; - if (bits < op) { - hold += input[_in++] << bits; - bits += 8; - } - } - dist += hold & ((1 << op) - 1); - //#ifdef INFLATE_STRICT - if (dist > dmax) { - strm.msg = "invalid distance too far back"; - state.mode = BAD; - break top; - } - //#endif - hold >>>= op; - bits -= op; - //Tracevv((stderr, "inflate: distance %u\n", dist)); - op = _out - beg; /* max distance in output */ - if (dist > op) { - /* see if copy from window */ - op = dist - op; /* distance back in window */ - if (op > whave) { - if (state.sane) { - strm.msg = "invalid distance too far back"; - state.mode = BAD; - break top; - } - - // (!) This block is disabled in zlib defailts, - // don't enable it for binary compatibility - //#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR - // if (len <= op - whave) { - // do { - // output[_out++] = 0; - // } while (--len); - // continue top; - // } - // len -= op - whave; - // do { - // output[_out++] = 0; - // } while (--op > whave); - // if (op === 0) { - // from = _out - dist; - // do { - // output[_out++] = output[from++]; - // } while (--len); - // continue top; - // } - //#endif - } - from = 0; // window index - from_source = s_window; - if (wnext === 0) { - /* very common case */ - from += wsize - op; - if (op < len) { - /* some from window */ - len -= op; - do { - output[_out++] = s_window[from++]; - } while (--op); - from = _out - dist; /* rest from output */ - from_source = output; - } - } else if (wnext < op) { - /* wrap around window */ - from += wsize + wnext - op; - op -= wnext; - if (op < len) { - /* some from end of window */ - len -= op; - do { - output[_out++] = s_window[from++]; - } while (--op); - from = 0; - if (wnext < len) { - /* some from start of window */ - op = wnext; - len -= op; - do { - output[_out++] = s_window[from++]; - } while (--op); - from = _out - dist; /* rest from output */ - from_source = output; - } - } - } else { - /* contiguous in window */ - from += wnext - op; - if (op < len) { - /* some from window */ - len -= op; - do { - output[_out++] = s_window[from++]; - } while (--op); - from = _out - dist; /* rest from output */ - from_source = output; - } - } - while (len > 2) { - output[_out++] = from_source[from++]; - output[_out++] = from_source[from++]; - output[_out++] = from_source[from++]; - len -= 3; - } - if (len) { - output[_out++] = from_source[from++]; - if (len > 1) { - output[_out++] = from_source[from++]; - } - } - } else { - from = _out - dist; /* copy direct from output */ - do { - /* minimum length is three */ - output[_out++] = output[from++]; - output[_out++] = output[from++]; - output[_out++] = output[from++]; - len -= 3; - } while (len > 2); - if (len) { - output[_out++] = output[from++]; - if (len > 1) { - output[_out++] = output[from++]; - } - } - } - } else if ((op & 64) === 0) { - /* 2nd level distance code */ - here = - dcode[ - (here & 0xffff) /*here.val*/ + - (hold & ((1 << op) - 1)) - ]; - continue dodist; - } else { - strm.msg = "invalid distance code"; - state.mode = BAD; - break top; - } - - break; // need to emulate goto via "continue" - } - } else if ((op & 64) === 0) { - /* 2nd level length code */ - here = - lcode[ - (here & 0xffff) /*here.val*/ + (hold & ((1 << op) - 1)) - ]; - continue dolen; - } else if (op & 32) { - /* end-of-block */ - //Tracevv((stderr, "inflate: end of block\n")); - state.mode = TYPE; - break top; - } else { - strm.msg = "invalid literal/length code"; - state.mode = BAD; - break top; - } - - break; // need to emulate goto via "continue" - } - } while (_in < last && _out < end); - - /* return unused bytes (on entry, bits < 8, so in won't go too far back) */ - len = bits >> 3; - _in -= len; - bits -= len << 3; - hold &= (1 << bits) - 1; - - /* update state and return */ - strm.next_in = _in; - strm.next_out = _out; - strm.avail_in = _in < last ? 5 + (last - _in) : 5 - (_in - last); - strm.avail_out = - _out < end ? 257 + (end - _out) : 257 - (_out - end); - state.hold = hold; - state.bits = bits; - return; - }; - }, - {}, - ], - 49: [ - function (require, module, exports) { - "use strict"; - - // (C) 1995-2013 Jean-loup Gailly and Mark Adler - // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin - // - // This software is provided 'as-is', without any express or implied - // warranty. In no event will the authors be held liable for any damages - // arising from the use of this software. - // - // Permission is granted to anyone to use this software for any purpose, - // including commercial applications, and to alter it and redistribute it - // freely, subject to the following restrictions: - // - // 1. The origin of this software must not be misrepresented; you must not - // claim that you wrote the original software. If you use this software - // in a product, an acknowledgment in the product documentation would be - // appreciated but is not required. - // 2. Altered source versions must be plainly marked as such, and must not be - // misrepresented as being the original software. - // 3. This notice may not be removed or altered from any source distribution. - - var utils = require("../utils/common"); - var adler32 = require("./adler32"); - var crc32 = require("./crc32"); - var inflate_fast = require("./inffast"); - var inflate_table = require("./inftrees"); - - var CODES = 0; - var LENS = 1; - var DISTS = 2; - - /* Public constants ==========================================================*/ - /* ===========================================================================*/ - - /* Allowed flush values; see deflate() and inflate() below for details */ - //var Z_NO_FLUSH = 0; - //var Z_PARTIAL_FLUSH = 1; - //var Z_SYNC_FLUSH = 2; - //var Z_FULL_FLUSH = 3; - var Z_FINISH = 4; - var Z_BLOCK = 5; - var Z_TREES = 6; - - /* Return codes for the compression/decompression functions. Negative values - * are errors, positive values are used for special but normal events. - */ - var Z_OK = 0; - var Z_STREAM_END = 1; - var Z_NEED_DICT = 2; - //var Z_ERRNO = -1; - var Z_STREAM_ERROR = -2; - var Z_DATA_ERROR = -3; - var Z_MEM_ERROR = -4; - var Z_BUF_ERROR = -5; - //var Z_VERSION_ERROR = -6; - - /* The deflate compression method */ - var Z_DEFLATED = 8; - - /* STATES ====================================================================*/ - /* ===========================================================================*/ - - var HEAD = 1; /* i: waiting for magic header */ - var FLAGS = 2; /* i: waiting for method and flags (gzip) */ - var TIME = 3; /* i: waiting for modification time (gzip) */ - var OS = 4; /* i: waiting for extra flags and operating system (gzip) */ - var EXLEN = 5; /* i: waiting for extra length (gzip) */ - var EXTRA = 6; /* i: waiting for extra bytes (gzip) */ - var NAME = 7; /* i: waiting for end of file name (gzip) */ - var COMMENT = 8; /* i: waiting for end of comment (gzip) */ - var HCRC = 9; /* i: waiting for header crc (gzip) */ - var DICTID = 10; /* i: waiting for dictionary check value */ - var DICT = 11; /* waiting for inflateSetDictionary() call */ - var TYPE = 12; /* i: waiting for type bits, including last-flag bit */ - var TYPEDO = 13; /* i: same, but skip check to exit inflate on new block */ - var STORED = 14; /* i: waiting for stored size (length and complement) */ - var COPY_ = 15; /* i/o: same as COPY below, but only first time in */ - var COPY = 16; /* i/o: waiting for input or output to copy stored block */ - var TABLE = 17; /* i: waiting for dynamic block table lengths */ - var LENLENS = 18; /* i: waiting for code length code lengths */ - var CODELENS = 19; /* i: waiting for length/lit and distance code lengths */ - var LEN_ = 20; /* i: same as LEN below, but only first time in */ - var LEN = 21; /* i: waiting for length/lit/eob code */ - var LENEXT = 22; /* i: waiting for length extra bits */ - var DIST = 23; /* i: waiting for distance code */ - var DISTEXT = 24; /* i: waiting for distance extra bits */ - var MATCH = 25; /* o: waiting for output space to copy string */ - var LIT = 26; /* o: waiting for output space to write literal */ - var CHECK = 27; /* i: waiting for 32-bit check value */ - var LENGTH = 28; /* i: waiting for 32-bit length (gzip) */ - var DONE = 29; /* finished check, done -- remain here until reset */ - var BAD = 30; /* got a data error -- remain here until reset */ - var MEM = 31; /* got an inflate() memory error -- remain here until reset */ - var SYNC = 32; /* looking for synchronization bytes to restart inflate() */ - - /* ===========================================================================*/ - - var ENOUGH_LENS = 852; - var ENOUGH_DISTS = 592; - //var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS); - - var MAX_WBITS = 15; - /* 32K LZ77 window */ - var DEF_WBITS = MAX_WBITS; - - function zswap32(q) { - return ( - ((q >>> 24) & 0xff) + - ((q >>> 8) & 0xff00) + - ((q & 0xff00) << 8) + - ((q & 0xff) << 24) - ); - } - - function InflateState() { - this.mode = 0; /* current inflate mode */ - this.last = false; /* true if processing last block */ - this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */ - this.havedict = false; /* true if dictionary provided */ - this.flags = 0; /* gzip header method and flags (0 if zlib) */ - this.dmax = 0; /* zlib header max distance (INFLATE_STRICT) */ - this.check = 0; /* protected copy of check value */ - this.total = 0; /* protected copy of output count */ - // TODO: may be {} - this.head = null; /* where to save gzip header information */ - - /* sliding window */ - this.wbits = 0; /* log base 2 of requested window size */ - this.wsize = 0; /* window size or zero if not using window */ - this.whave = 0; /* valid bytes in the window */ - this.wnext = 0; /* window write index */ - this.window = null; /* allocated sliding window, if needed */ - - /* bit accumulator */ - this.hold = 0; /* input bit accumulator */ - this.bits = 0; /* number of bits in "in" */ - - /* for string and stored block copying */ - this.length = 0; /* literal or length of data to copy */ - this.offset = 0; /* distance back to copy string from */ - - /* for table and code decoding */ - this.extra = 0; /* extra bits needed */ - - /* fixed and dynamic code tables */ - this.lencode = null; /* starting table for length/literal codes */ - this.distcode = null; /* starting table for distance codes */ - this.lenbits = 0; /* index bits for lencode */ - this.distbits = 0; /* index bits for distcode */ - - /* dynamic table building */ - this.ncode = 0; /* number of code length code lengths */ - this.nlen = 0; /* number of length code lengths */ - this.ndist = 0; /* number of distance code lengths */ - this.have = 0; /* number of code lengths in lens[] */ - this.next = null; /* next available space in codes[] */ - - this.lens = new utils.Buf16( - 320, - ); /* temporary storage for code lengths */ - this.work = new utils.Buf16( - 288, - ); /* work area for code table building */ - - /* - because we don't have pointers in js, we use lencode and distcode directly - as buffers so we don't need codes - */ - //this.codes = new utils.Buf32(ENOUGH); /* space for code tables */ - this.lendyn = - null; /* dynamic table for length/literal codes (JS specific) */ - this.distdyn = - null; /* dynamic table for distance codes (JS specific) */ - this.sane = 0; /* if false, allow invalid distance too far */ - this.back = 0; /* bits back of last unprocessed length/lit */ - this.was = 0; /* initial length of match */ - } - - function inflateResetKeep(strm) { - var state; - - if (!strm || !strm.state) { - return Z_STREAM_ERROR; - } - state = strm.state; - strm.total_in = strm.total_out = state.total = 0; - strm.msg = ""; /*Z_NULL*/ - if (state.wrap) { - /* to support ill-conceived Java test suite */ - strm.adler = state.wrap & 1; - } - state.mode = HEAD; - state.last = 0; - state.havedict = 0; - state.dmax = 32768; - state.head = null /*Z_NULL*/; - state.hold = 0; - state.bits = 0; - //state.lencode = state.distcode = state.next = state.codes; - state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS); - state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS); - - state.sane = 1; - state.back = -1; - //Tracev((stderr, "inflate: reset\n")); - return Z_OK; - } - - function inflateReset(strm) { - var state; - - if (!strm || !strm.state) { - return Z_STREAM_ERROR; - } - state = strm.state; - state.wsize = 0; - state.whave = 0; - state.wnext = 0; - return inflateResetKeep(strm); - } - - function inflateReset2(strm, windowBits) { - var wrap; - var state; - - /* get the state */ - if (!strm || !strm.state) { - return Z_STREAM_ERROR; - } - state = strm.state; - - /* extract wrap request from windowBits parameter */ - if (windowBits < 0) { - wrap = 0; - windowBits = -windowBits; - } else { - wrap = (windowBits >> 4) + 1; - if (windowBits < 48) { - windowBits &= 15; - } - } - - /* set number of window bits, free window if different */ - if (windowBits && (windowBits < 8 || windowBits > 15)) { - return Z_STREAM_ERROR; - } - if (state.window !== null && state.wbits !== windowBits) { - state.window = null; - } - - /* update state and reset the rest of it */ - state.wrap = wrap; - state.wbits = windowBits; - return inflateReset(strm); - } - - function inflateInit2(strm, windowBits) { - var ret; - var state; - - if (!strm) { - return Z_STREAM_ERROR; - } - //strm.msg = Z_NULL; /* in case we return an error */ - - state = new InflateState(); - - //if (state === Z_NULL) return Z_MEM_ERROR; - //Tracev((stderr, "inflate: allocated\n")); - strm.state = state; - state.window = null /*Z_NULL*/; - ret = inflateReset2(strm, windowBits); - if (ret !== Z_OK) { - strm.state = null /*Z_NULL*/; - } - return ret; - } - - function inflateInit(strm) { - return inflateInit2(strm, DEF_WBITS); - } - - /* - Return state with length and distance decoding tables and index sizes set to - fixed code decoding. Normally this returns fixed tables from inffixed.h. - If BUILDFIXED is defined, then instead this routine builds the tables the - first time it's called, and returns those tables the first time and - thereafter. This reduces the size of the code by about 2K bytes, in - exchange for a little execution time. However, BUILDFIXED should not be - used for threaded applications, since the rewriting of the tables and virgin - may not be thread-safe. - */ - var virgin = true; - - var lenfix, distfix; // We have no pointers in JS, so keep tables separate - - function fixedtables(state) { - /* build fixed huffman tables if first call (may not be thread safe) */ - if (virgin) { - var sym; - - lenfix = new utils.Buf32(512); - distfix = new utils.Buf32(32); - - /* literal/length table */ - sym = 0; - while (sym < 144) { - state.lens[sym++] = 8; - } - while (sym < 256) { - state.lens[sym++] = 9; - } - while (sym < 280) { - state.lens[sym++] = 7; - } - while (sym < 288) { - state.lens[sym++] = 8; - } - - inflate_table(LENS, state.lens, 0, 288, lenfix, 0, state.work, { - bits: 9, - }); - - /* distance table */ - sym = 0; - while (sym < 32) { - state.lens[sym++] = 5; - } - - inflate_table(DISTS, state.lens, 0, 32, distfix, 0, state.work, { - bits: 5, - }); - - /* do this just once */ - virgin = false; - } - - state.lencode = lenfix; - state.lenbits = 9; - state.distcode = distfix; - state.distbits = 5; - } - - /* - Update the window with the last wsize (normally 32K) bytes written before - returning. If window does not exist yet, create it. This is only called - when a window is already in use, or when output has been written during this - inflate call, but the end of the deflate stream has not been reached yet. - It is also called to create a window for dictionary data when a dictionary - is loaded. - - Providing output buffers larger than 32K to inflate() should provide a speed - advantage, since only the last 32K of output is copied to the sliding window - upon return from inflate(), and since all distances after the first 32K of - output will fall in the output data, making match copies simpler and faster. - The advantage may be dependent on the size of the processor's data caches. - */ - function updatewindow(strm, src, end, copy) { - var dist; - var state = strm.state; - - /* if it hasn't been done already, allocate space for the window */ - if (state.window === null) { - state.wsize = 1 << state.wbits; - state.wnext = 0; - state.whave = 0; - - state.window = new utils.Buf8(state.wsize); - } - - /* copy state->wsize or less output bytes into the circular window */ - if (copy >= state.wsize) { - utils.arraySet( - state.window, - src, - end - state.wsize, - state.wsize, - 0, - ); - state.wnext = 0; - state.whave = state.wsize; - } else { - dist = state.wsize - state.wnext; - if (dist > copy) { - dist = copy; - } - //zmemcpy(state->window + state->wnext, end - copy, dist); - utils.arraySet(state.window, src, end - copy, dist, state.wnext); - copy -= dist; - if (copy) { - //zmemcpy(state->window, end - copy, copy); - utils.arraySet(state.window, src, end - copy, copy, 0); - state.wnext = copy; - state.whave = state.wsize; - } else { - state.wnext += dist; - if (state.wnext === state.wsize) { - state.wnext = 0; - } - if (state.whave < state.wsize) { - state.whave += dist; - } - } - } - return 0; - } - - function inflate(strm, flush) { - var state; - var input, output; // input/output buffers - var next; /* next input INDEX */ - var put; /* next output INDEX */ - var have, left; /* available input and output */ - var hold; /* bit buffer */ - var bits; /* bits in bit buffer */ - var _in, _out; /* save starting available input and output */ - var copy; /* number of stored or match bytes to copy */ - var from; /* where to copy match bytes from */ - var from_source; - var here = 0; /* current decoding table entry */ - var here_bits, here_op, here_val; // paked "here" denormalized (JS specific) - //var last; /* parent table entry */ - var last_bits, last_op, last_val; // paked "last" denormalized (JS specific) - var len; /* length to copy for repeats, bits to drop */ - var ret; /* return code */ - var hbuf = new utils.Buf8( - 4, - ); /* buffer for gzip header crc calculation */ - var opts; - - var n; // temporary var for NEED_BITS - - var order = - /* permutation of code lengths */ - [ - 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, - 15, - ]; - - if ( - !strm || - !strm.state || - !strm.output || - (!strm.input && strm.avail_in !== 0) - ) { - return Z_STREAM_ERROR; - } - - state = strm.state; - if (state.mode === TYPE) { - state.mode = TYPEDO; - } /* skip check */ - - //--- LOAD() --- - put = strm.next_out; - output = strm.output; - left = strm.avail_out; - next = strm.next_in; - input = strm.input; - have = strm.avail_in; - hold = state.hold; - bits = state.bits; - //--- - - _in = have; - _out = left; - ret = Z_OK; - - // goto emulation - inf_leave: for (;;) { - switch (state.mode) { - case HEAD: - if (state.wrap === 0) { - state.mode = TYPEDO; - break; - } - //=== NEEDBITS(16); - while (bits < 16) { - if (have === 0) { - break inf_leave; - } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - if (state.wrap & 2 && hold === 0x8b1f) { - /* gzip header */ - state.check = 0 /*crc32(0L, Z_NULL, 0)*/; - //=== CRC2(state.check, hold); - hbuf[0] = hold & 0xff; - hbuf[1] = (hold >>> 8) & 0xff; - state.check = crc32(state.check, hbuf, 2, 0); - //===// - - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - state.mode = FLAGS; - break; - } - state.flags = 0; /* expect zlib header */ - if (state.head) { - state.head.done = false; - } - if ( - !(state.wrap & 1) /* check if zlib header allowed */ || - (((hold & 0xff) /*BITS(8)*/ << 8) + (hold >> 8)) % 31 - ) { - strm.msg = "incorrect header check"; - state.mode = BAD; - break; - } - if ((hold & 0x0f) /*BITS(4)*/ !== Z_DEFLATED) { - strm.msg = "unknown compression method"; - state.mode = BAD; - break; - } - //--- DROPBITS(4) ---// - hold >>>= 4; - bits -= 4; - //---// - len = (hold & 0x0f) /*BITS(4)*/ + 8; - if (state.wbits === 0) { - state.wbits = len; - } else if (len > state.wbits) { - strm.msg = "invalid window size"; - state.mode = BAD; - break; - } - state.dmax = 1 << len; - //Tracev((stderr, "inflate: zlib header ok\n")); - strm.adler = state.check = 1 /*adler32(0L, Z_NULL, 0)*/; - state.mode = hold & 0x200 ? DICTID : TYPE; - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - break; - case FLAGS: - //=== NEEDBITS(16); */ - while (bits < 16) { - if (have === 0) { - break inf_leave; - } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - state.flags = hold; - if ((state.flags & 0xff) !== Z_DEFLATED) { - strm.msg = "unknown compression method"; - state.mode = BAD; - break; - } - if (state.flags & 0xe000) { - strm.msg = "unknown header flags set"; - state.mode = BAD; - break; - } - if (state.head) { - state.head.text = (hold >> 8) & 1; - } - if (state.flags & 0x0200) { - //=== CRC2(state.check, hold); - hbuf[0] = hold & 0xff; - hbuf[1] = (hold >>> 8) & 0xff; - state.check = crc32(state.check, hbuf, 2, 0); - //===// - } - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - state.mode = TIME; - /* falls through */ - case TIME: - //=== NEEDBITS(32); */ - while (bits < 32) { - if (have === 0) { - break inf_leave; - } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - if (state.head) { - state.head.time = hold; - } - if (state.flags & 0x0200) { - //=== CRC4(state.check, hold) - hbuf[0] = hold & 0xff; - hbuf[1] = (hold >>> 8) & 0xff; - hbuf[2] = (hold >>> 16) & 0xff; - hbuf[3] = (hold >>> 24) & 0xff; - state.check = crc32(state.check, hbuf, 4, 0); - //=== - } - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - state.mode = OS; - /* falls through */ - case OS: - //=== NEEDBITS(16); */ - while (bits < 16) { - if (have === 0) { - break inf_leave; - } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - if (state.head) { - state.head.xflags = hold & 0xff; - state.head.os = hold >> 8; - } - if (state.flags & 0x0200) { - //=== CRC2(state.check, hold); - hbuf[0] = hold & 0xff; - hbuf[1] = (hold >>> 8) & 0xff; - state.check = crc32(state.check, hbuf, 2, 0); - //===// - } - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - state.mode = EXLEN; - /* falls through */ - case EXLEN: - if (state.flags & 0x0400) { - //=== NEEDBITS(16); */ - while (bits < 16) { - if (have === 0) { - break inf_leave; - } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - state.length = hold; - if (state.head) { - state.head.extra_len = hold; - } - if (state.flags & 0x0200) { - //=== CRC2(state.check, hold); - hbuf[0] = hold & 0xff; - hbuf[1] = (hold >>> 8) & 0xff; - state.check = crc32(state.check, hbuf, 2, 0); - //===// - } - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - } else if (state.head) { - state.head.extra = null /*Z_NULL*/; - } - state.mode = EXTRA; - /* falls through */ - case EXTRA: - if (state.flags & 0x0400) { - copy = state.length; - if (copy > have) { - copy = have; - } - if (copy) { - if (state.head) { - len = state.head.extra_len - state.length; - if (!state.head.extra) { - // Use untyped array for more conveniend processing later - state.head.extra = new Array(state.head.extra_len); - } - utils.arraySet( - state.head.extra, - input, - next, - // extra field is limited to 65536 bytes - // - no need for additional size check - copy, - /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/ - len, - ); - //zmemcpy(state.head.extra + len, next, - // len + copy > state.head.extra_max ? - // state.head.extra_max - len : copy); - } - if (state.flags & 0x0200) { - state.check = crc32(state.check, input, copy, next); - } - have -= copy; - next += copy; - state.length -= copy; - } - if (state.length) { - break inf_leave; - } - } - state.length = 0; - state.mode = NAME; - /* falls through */ - case NAME: - if (state.flags & 0x0800) { - if (have === 0) { - break inf_leave; - } - copy = 0; - do { - // TODO: 2 or 1 bytes? - len = input[next + copy++]; - /* use constant limit because in js we should not preallocate memory */ - if ( - state.head && - len && - state.length < 65536 /*state.head.name_max*/ - ) { - state.head.name += String.fromCharCode(len); - } - } while (len && copy < have); - - if (state.flags & 0x0200) { - state.check = crc32(state.check, input, copy, next); - } - have -= copy; - next += copy; - if (len) { - break inf_leave; - } - } else if (state.head) { - state.head.name = null; - } - state.length = 0; - state.mode = COMMENT; - /* falls through */ - case COMMENT: - if (state.flags & 0x1000) { - if (have === 0) { - break inf_leave; - } - copy = 0; - do { - len = input[next + copy++]; - /* use constant limit because in js we should not preallocate memory */ - if ( - state.head && - len && - state.length < 65536 /*state.head.comm_max*/ - ) { - state.head.comment += String.fromCharCode(len); - } - } while (len && copy < have); - if (state.flags & 0x0200) { - state.check = crc32(state.check, input, copy, next); - } - have -= copy; - next += copy; - if (len) { - break inf_leave; - } - } else if (state.head) { - state.head.comment = null; - } - state.mode = HCRC; - /* falls through */ - case HCRC: - if (state.flags & 0x0200) { - //=== NEEDBITS(16); */ - while (bits < 16) { - if (have === 0) { - break inf_leave; - } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - if (hold !== (state.check & 0xffff)) { - strm.msg = "header crc mismatch"; - state.mode = BAD; - break; - } - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - } - if (state.head) { - state.head.hcrc = (state.flags >> 9) & 1; - state.head.done = true; - } - strm.adler = state.check = 0; - state.mode = TYPE; - break; - case DICTID: - //=== NEEDBITS(32); */ - while (bits < 32) { - if (have === 0) { - break inf_leave; - } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - strm.adler = state.check = zswap32(hold); - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - state.mode = DICT; - /* falls through */ - case DICT: - if (state.havedict === 0) { - //--- RESTORE() --- - strm.next_out = put; - strm.avail_out = left; - strm.next_in = next; - strm.avail_in = have; - state.hold = hold; - state.bits = bits; - //--- - return Z_NEED_DICT; - } - strm.adler = state.check = 1 /*adler32(0L, Z_NULL, 0)*/; - state.mode = TYPE; - /* falls through */ - case TYPE: - if (flush === Z_BLOCK || flush === Z_TREES) { - break inf_leave; - } - /* falls through */ - case TYPEDO: - if (state.last) { - //--- BYTEBITS() ---// - hold >>>= bits & 7; - bits -= bits & 7; - //---// - state.mode = CHECK; - break; - } - //=== NEEDBITS(3); */ - while (bits < 3) { - if (have === 0) { - break inf_leave; - } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - state.last = hold & 0x01 /*BITS(1)*/; - //--- DROPBITS(1) ---// - hold >>>= 1; - bits -= 1; - //---// - - switch (hold & 0x03 /*BITS(2)*/) { - case 0 /* stored block */: - //Tracev((stderr, "inflate: stored block%s\n", - // state.last ? " (last)" : "")); - state.mode = STORED; - break; - case 1 /* fixed block */: - fixedtables(state); - //Tracev((stderr, "inflate: fixed codes block%s\n", - // state.last ? " (last)" : "")); - state.mode = LEN_; /* decode codes */ - if (flush === Z_TREES) { - //--- DROPBITS(2) ---// - hold >>>= 2; - bits -= 2; - //---// - break inf_leave; - } - break; - case 2 /* dynamic block */: - //Tracev((stderr, "inflate: dynamic codes block%s\n", - // state.last ? " (last)" : "")); - state.mode = TABLE; - break; - case 3: - strm.msg = "invalid block type"; - state.mode = BAD; - } - //--- DROPBITS(2) ---// - hold >>>= 2; - bits -= 2; - //---// - break; - case STORED: - //--- BYTEBITS() ---// /* go to byte boundary */ - hold >>>= bits & 7; - bits -= bits & 7; - //---// - //=== NEEDBITS(32); */ - while (bits < 32) { - if (have === 0) { - break inf_leave; - } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) { - strm.msg = "invalid stored block lengths"; - state.mode = BAD; - break; - } - state.length = hold & 0xffff; - //Tracev((stderr, "inflate: stored length %u\n", - // state.length)); - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - state.mode = COPY_; - if (flush === Z_TREES) { - break inf_leave; - } - /* falls through */ - case COPY_: - state.mode = COPY; - /* falls through */ - case COPY: - copy = state.length; - if (copy) { - if (copy > have) { - copy = have; - } - if (copy > left) { - copy = left; - } - if (copy === 0) { - break inf_leave; - } - //--- zmemcpy(put, next, copy); --- - utils.arraySet(output, input, next, copy, put); - //---// - have -= copy; - next += copy; - left -= copy; - put += copy; - state.length -= copy; - break; - } - //Tracev((stderr, "inflate: stored end\n")); - state.mode = TYPE; - break; - case TABLE: - //=== NEEDBITS(14); */ - while (bits < 14) { - if (have === 0) { - break inf_leave; - } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - state.nlen = (hold & 0x1f) /*BITS(5)*/ + 257; - //--- DROPBITS(5) ---// - hold >>>= 5; - bits -= 5; - //---// - state.ndist = (hold & 0x1f) /*BITS(5)*/ + 1; - //--- DROPBITS(5) ---// - hold >>>= 5; - bits -= 5; - //---// - state.ncode = (hold & 0x0f) /*BITS(4)*/ + 4; - //--- DROPBITS(4) ---// - hold >>>= 4; - bits -= 4; - //---// - //#ifndef PKZIP_BUG_WORKAROUND - if (state.nlen > 286 || state.ndist > 30) { - strm.msg = "too many length or distance symbols"; - state.mode = BAD; - break; - } - //#endif - //Tracev((stderr, "inflate: table sizes ok\n")); - state.have = 0; - state.mode = LENLENS; - /* falls through */ - case LENLENS: - while (state.have < state.ncode) { - //=== NEEDBITS(3); - while (bits < 3) { - if (have === 0) { - break inf_leave; - } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - state.lens[order[state.have++]] = hold & 0x07; //BITS(3); - //--- DROPBITS(3) ---// - hold >>>= 3; - bits -= 3; - //---// - } - while (state.have < 19) { - state.lens[order[state.have++]] = 0; - } - // We have separate tables & no pointers. 2 commented lines below not needed. - //state.next = state.codes; - //state.lencode = state.next; - // Switch to use dynamic table - state.lencode = state.lendyn; - state.lenbits = 7; - - opts = { bits: state.lenbits }; - ret = inflate_table( - CODES, - state.lens, - 0, - 19, - state.lencode, - 0, - state.work, - opts, - ); - state.lenbits = opts.bits; - - if (ret) { - strm.msg = "invalid code lengths set"; - state.mode = BAD; - break; - } - //Tracev((stderr, "inflate: code lengths ok\n")); - state.have = 0; - state.mode = CODELENS; - /* falls through */ - case CODELENS: - while (state.have < state.nlen + state.ndist) { - for (;;) { - here = - state.lencode[ - hold & ((1 << state.lenbits) - 1) - ]; /*BITS(state.lenbits)*/ - here_bits = here >>> 24; - here_op = (here >>> 16) & 0xff; - here_val = here & 0xffff; - - if (here_bits <= bits) { - break; - } - //--- PULLBYTE() ---// - if (have === 0) { - break inf_leave; - } - have--; - hold += input[next++] << bits; - bits += 8; - //---// - } - if (here_val < 16) { - //--- DROPBITS(here.bits) ---// - hold >>>= here_bits; - bits -= here_bits; - //---// - state.lens[state.have++] = here_val; - } else { - if (here_val === 16) { - //=== NEEDBITS(here.bits + 2); - n = here_bits + 2; - while (bits < n) { - if (have === 0) { - break inf_leave; - } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - //--- DROPBITS(here.bits) ---// - hold >>>= here_bits; - bits -= here_bits; - //---// - if (state.have === 0) { - strm.msg = "invalid bit length repeat"; - state.mode = BAD; - break; - } - len = state.lens[state.have - 1]; - copy = 3 + (hold & 0x03); //BITS(2); - //--- DROPBITS(2) ---// - hold >>>= 2; - bits -= 2; - //---// - } else if (here_val === 17) { - //=== NEEDBITS(here.bits + 3); - n = here_bits + 3; - while (bits < n) { - if (have === 0) { - break inf_leave; - } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - //--- DROPBITS(here.bits) ---// - hold >>>= here_bits; - bits -= here_bits; - //---// - len = 0; - copy = 3 + (hold & 0x07); //BITS(3); - //--- DROPBITS(3) ---// - hold >>>= 3; - bits -= 3; - //---// - } else { - //=== NEEDBITS(here.bits + 7); - n = here_bits + 7; - while (bits < n) { - if (have === 0) { - break inf_leave; - } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - //--- DROPBITS(here.bits) ---// - hold >>>= here_bits; - bits -= here_bits; - //---// - len = 0; - copy = 11 + (hold & 0x7f); //BITS(7); - //--- DROPBITS(7) ---// - hold >>>= 7; - bits -= 7; - //---// - } - if (state.have + copy > state.nlen + state.ndist) { - strm.msg = "invalid bit length repeat"; - state.mode = BAD; - break; - } - while (copy--) { - state.lens[state.have++] = len; - } - } - } - - /* handle error breaks in while */ - if (state.mode === BAD) { - break; - } - - /* check for end-of-block code (better have one) */ - if (state.lens[256] === 0) { - strm.msg = "invalid code -- missing end-of-block"; - state.mode = BAD; - break; - } - - /* build code tables -- note: do not change the lenbits or distbits - values here (9 and 6) without reading the comments in inftrees.h - concerning the ENOUGH constants, which depend on those values */ - state.lenbits = 9; - - opts = { bits: state.lenbits }; - ret = inflate_table( - LENS, - state.lens, - 0, - state.nlen, - state.lencode, - 0, - state.work, - opts, - ); - // We have separate tables & no pointers. 2 commented lines below not needed. - // state.next_index = opts.table_index; - state.lenbits = opts.bits; - // state.lencode = state.next; - - if (ret) { - strm.msg = "invalid literal/lengths set"; - state.mode = BAD; - break; - } - - state.distbits = 6; - //state.distcode.copy(state.codes); - // Switch to use dynamic table - state.distcode = state.distdyn; - opts = { bits: state.distbits }; - ret = inflate_table( - DISTS, - state.lens, - state.nlen, - state.ndist, - state.distcode, - 0, - state.work, - opts, - ); - // We have separate tables & no pointers. 2 commented lines below not needed. - // state.next_index = opts.table_index; - state.distbits = opts.bits; - // state.distcode = state.next; - - if (ret) { - strm.msg = "invalid distances set"; - state.mode = BAD; - break; - } - //Tracev((stderr, 'inflate: codes ok\n')); - state.mode = LEN_; - if (flush === Z_TREES) { - break inf_leave; - } - /* falls through */ - case LEN_: - state.mode = LEN; - /* falls through */ - case LEN: - if (have >= 6 && left >= 258) { - //--- RESTORE() --- - strm.next_out = put; - strm.avail_out = left; - strm.next_in = next; - strm.avail_in = have; - state.hold = hold; - state.bits = bits; - //--- - inflate_fast(strm, _out); - //--- LOAD() --- - put = strm.next_out; - output = strm.output; - left = strm.avail_out; - next = strm.next_in; - input = strm.input; - have = strm.avail_in; - hold = state.hold; - bits = state.bits; - //--- - - if (state.mode === TYPE) { - state.back = -1; - } - break; - } - state.back = 0; - for (;;) { - here = - state.lencode[ - hold & ((1 << state.lenbits) - 1) - ]; /*BITS(state.lenbits)*/ - here_bits = here >>> 24; - here_op = (here >>> 16) & 0xff; - here_val = here & 0xffff; - - if (here_bits <= bits) { - break; - } - //--- PULLBYTE() ---// - if (have === 0) { - break inf_leave; - } - have--; - hold += input[next++] << bits; - bits += 8; - //---// - } - if (here_op && (here_op & 0xf0) === 0) { - last_bits = here_bits; - last_op = here_op; - last_val = here_val; - for (;;) { - here = - state.lencode[ - last_val + - ((hold & - ((1 << (last_bits + last_op)) - - 1)) /*BITS(last.bits + last.op)*/ >> - last_bits) - ]; - here_bits = here >>> 24; - here_op = (here >>> 16) & 0xff; - here_val = here & 0xffff; - - if (last_bits + here_bits <= bits) { - break; - } - //--- PULLBYTE() ---// - if (have === 0) { - break inf_leave; - } - have--; - hold += input[next++] << bits; - bits += 8; - //---// - } - //--- DROPBITS(last.bits) ---// - hold >>>= last_bits; - bits -= last_bits; - //---// - state.back += last_bits; - } - //--- DROPBITS(here.bits) ---// - hold >>>= here_bits; - bits -= here_bits; - //---// - state.back += here_bits; - state.length = here_val; - if (here_op === 0) { - //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? - // "inflate: literal '%c'\n" : - // "inflate: literal 0x%02x\n", here.val)); - state.mode = LIT; - break; - } - if (here_op & 32) { - //Tracevv((stderr, "inflate: end of block\n")); - state.back = -1; - state.mode = TYPE; - break; - } - if (here_op & 64) { - strm.msg = "invalid literal/length code"; - state.mode = BAD; - break; - } - state.extra = here_op & 15; - state.mode = LENEXT; - /* falls through */ - case LENEXT: - if (state.extra) { - //=== NEEDBITS(state.extra); - n = state.extra; - while (bits < n) { - if (have === 0) { - break inf_leave; - } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - state.length += - hold & ((1 << state.extra) - 1) /*BITS(state.extra)*/; - //--- DROPBITS(state.extra) ---// - hold >>>= state.extra; - bits -= state.extra; - //---// - state.back += state.extra; - } - //Tracevv((stderr, "inflate: length %u\n", state.length)); - state.was = state.length; - state.mode = DIST; - /* falls through */ - case DIST: - for (;;) { - here = - state.distcode[ - hold & ((1 << state.distbits) - 1) - ]; /*BITS(state.distbits)*/ - here_bits = here >>> 24; - here_op = (here >>> 16) & 0xff; - here_val = here & 0xffff; - - if (here_bits <= bits) { - break; - } - //--- PULLBYTE() ---// - if (have === 0) { - break inf_leave; - } - have--; - hold += input[next++] << bits; - bits += 8; - //---// - } - if ((here_op & 0xf0) === 0) { - last_bits = here_bits; - last_op = here_op; - last_val = here_val; - for (;;) { - here = - state.distcode[ - last_val + - ((hold & - ((1 << (last_bits + last_op)) - - 1)) /*BITS(last.bits + last.op)*/ >> - last_bits) - ]; - here_bits = here >>> 24; - here_op = (here >>> 16) & 0xff; - here_val = here & 0xffff; - - if (last_bits + here_bits <= bits) { - break; - } - //--- PULLBYTE() ---// - if (have === 0) { - break inf_leave; - } - have--; - hold += input[next++] << bits; - bits += 8; - //---// - } - //--- DROPBITS(last.bits) ---// - hold >>>= last_bits; - bits -= last_bits; - //---// - state.back += last_bits; - } - //--- DROPBITS(here.bits) ---// - hold >>>= here_bits; - bits -= here_bits; - //---// - state.back += here_bits; - if (here_op & 64) { - strm.msg = "invalid distance code"; - state.mode = BAD; - break; - } - state.offset = here_val; - state.extra = here_op & 15; - state.mode = DISTEXT; - /* falls through */ - case DISTEXT: - if (state.extra) { - //=== NEEDBITS(state.extra); - n = state.extra; - while (bits < n) { - if (have === 0) { - break inf_leave; - } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - state.offset += - hold & ((1 << state.extra) - 1) /*BITS(state.extra)*/; - //--- DROPBITS(state.extra) ---// - hold >>>= state.extra; - bits -= state.extra; - //---// - state.back += state.extra; - } - //#ifdef INFLATE_STRICT - if (state.offset > state.dmax) { - strm.msg = "invalid distance too far back"; - state.mode = BAD; - break; - } - //#endif - //Tracevv((stderr, "inflate: distance %u\n", state.offset)); - state.mode = MATCH; - /* falls through */ - case MATCH: - if (left === 0) { - break inf_leave; - } - copy = _out - left; - if (state.offset > copy) { - /* copy from window */ - copy = state.offset - copy; - if (copy > state.whave) { - if (state.sane) { - strm.msg = "invalid distance too far back"; - state.mode = BAD; - break; - } - // (!) This block is disabled in zlib defailts, - // don't enable it for binary compatibility - //#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR - // Trace((stderr, "inflate.c too far\n")); - // copy -= state.whave; - // if (copy > state.length) { copy = state.length; } - // if (copy > left) { copy = left; } - // left -= copy; - // state.length -= copy; - // do { - // output[put++] = 0; - // } while (--copy); - // if (state.length === 0) { state.mode = LEN; } - // break; - //#endif - } - if (copy > state.wnext) { - copy -= state.wnext; - from = state.wsize - copy; - } else { - from = state.wnext - copy; - } - if (copy > state.length) { - copy = state.length; - } - from_source = state.window; - } else { - /* copy from output */ - from_source = output; - from = put - state.offset; - copy = state.length; - } - if (copy > left) { - copy = left; - } - left -= copy; - state.length -= copy; - do { - output[put++] = from_source[from++]; - } while (--copy); - if (state.length === 0) { - state.mode = LEN; - } - break; - case LIT: - if (left === 0) { - break inf_leave; - } - output[put++] = state.length; - left--; - state.mode = LEN; - break; - case CHECK: - if (state.wrap) { - //=== NEEDBITS(32); - while (bits < 32) { - if (have === 0) { - break inf_leave; - } - have--; - // Use '|' insdead of '+' to make sure that result is signed - hold |= input[next++] << bits; - bits += 8; - } - //===// - _out -= left; - strm.total_out += _out; - state.total += _out; - if (_out) { - strm.adler = state.check = - /*UPDATE(state.check, put - _out, _out);*/ - state.flags - ? crc32(state.check, output, _out, put - _out) - : adler32(state.check, output, _out, put - _out); - } - _out = left; - // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too - if ((state.flags ? hold : zswap32(hold)) !== state.check) { - strm.msg = "incorrect data check"; - state.mode = BAD; - break; - } - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - //Tracev((stderr, "inflate: check matches trailer\n")); - } - state.mode = LENGTH; - /* falls through */ - case LENGTH: - if (state.wrap && state.flags) { - //=== NEEDBITS(32); - while (bits < 32) { - if (have === 0) { - break inf_leave; - } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - if (hold !== (state.total & 0xffffffff)) { - strm.msg = "incorrect length check"; - state.mode = BAD; - break; - } - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - //Tracev((stderr, "inflate: length matches trailer\n")); - } - state.mode = DONE; - /* falls through */ - case DONE: - ret = Z_STREAM_END; - break inf_leave; - case BAD: - ret = Z_DATA_ERROR; - break inf_leave; - case MEM: - return Z_MEM_ERROR; - case SYNC: - /* falls through */ - default: - return Z_STREAM_ERROR; - } - } - - // inf_leave <- here is real place for "goto inf_leave", emulated via "break inf_leave" - - /* - Return from inflate(), updating the total counts and the check value. - If there was no progress during the inflate() call, return a buffer - error. Call updatewindow() to create and/or update the window state. - Note: a memory error from inflate() is non-recoverable. - */ - - //--- RESTORE() --- - strm.next_out = put; - strm.avail_out = left; - strm.next_in = next; - strm.avail_in = have; - state.hold = hold; - state.bits = bits; - //--- - - if ( - state.wsize || - (_out !== strm.avail_out && - state.mode < BAD && - (state.mode < CHECK || flush !== Z_FINISH)) - ) { - if ( - updatewindow( - strm, - strm.output, - strm.next_out, - _out - strm.avail_out, - ) - ) { - state.mode = MEM; - return Z_MEM_ERROR; - } - } - _in -= strm.avail_in; - _out -= strm.avail_out; - strm.total_in += _in; - strm.total_out += _out; - state.total += _out; - if (state.wrap && _out) { - strm.adler = state.check = - /*UPDATE(state.check, strm.next_out - _out, _out);*/ - state.flags - ? crc32(state.check, output, _out, strm.next_out - _out) - : adler32(state.check, output, _out, strm.next_out - _out); - } - strm.data_type = - state.bits + - (state.last ? 64 : 0) + - (state.mode === TYPE ? 128 : 0) + - (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0); - if ( - ((_in === 0 && _out === 0) || flush === Z_FINISH) && - ret === Z_OK - ) { - ret = Z_BUF_ERROR; - } - return ret; - } - - function inflateEnd(strm) { - if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) { - return Z_STREAM_ERROR; - } - - var state = strm.state; - if (state.window) { - state.window = null; - } - strm.state = null; - return Z_OK; - } - - function inflateGetHeader(strm, head) { - var state; - - /* check state */ - if (!strm || !strm.state) { - return Z_STREAM_ERROR; - } - state = strm.state; - if ((state.wrap & 2) === 0) { - return Z_STREAM_ERROR; - } - - /* save header structure */ - state.head = head; - head.done = false; - return Z_OK; - } - - function inflateSetDictionary(strm, dictionary) { - var dictLength = dictionary.length; - - var state; - var dictid; - var ret; - - /* check state */ - if (!strm /* == Z_NULL */ || !strm.state /* == Z_NULL */) { - return Z_STREAM_ERROR; - } - state = strm.state; - - if (state.wrap !== 0 && state.mode !== DICT) { - return Z_STREAM_ERROR; - } - - /* check for correct dictionary identifier */ - if (state.mode === DICT) { - dictid = 1; /* adler32(0, null, 0)*/ - /* dictid = adler32(dictid, dictionary, dictLength); */ - dictid = adler32(dictid, dictionary, dictLength, 0); - if (dictid !== state.check) { - return Z_DATA_ERROR; - } - } - /* copy dictionary to window using updatewindow(), which will amend the - existing dictionary if appropriate */ - ret = updatewindow(strm, dictionary, dictLength, dictLength); - if (ret) { - state.mode = MEM; - return Z_MEM_ERROR; - } - state.havedict = 1; - // Tracev((stderr, "inflate: dictionary set\n")); - return Z_OK; - } - - exports.inflateReset = inflateReset; - exports.inflateReset2 = inflateReset2; - exports.inflateResetKeep = inflateResetKeep; - exports.inflateInit = inflateInit; - exports.inflateInit2 = inflateInit2; - exports.inflate = inflate; - exports.inflateEnd = inflateEnd; - exports.inflateGetHeader = inflateGetHeader; - exports.inflateSetDictionary = inflateSetDictionary; - exports.inflateInfo = "pako inflate (from Nodeca project)"; - - /* Not implemented -exports.inflateCopy = inflateCopy; -exports.inflateGetDictionary = inflateGetDictionary; -exports.inflateMark = inflateMark; -exports.inflatePrime = inflatePrime; -exports.inflateSync = inflateSync; -exports.inflateSyncPoint = inflateSyncPoint; -exports.inflateUndermine = inflateUndermine; -*/ - }, - { - "../utils/common": 41, - "./adler32": 43, - "./crc32": 45, - "./inffast": 48, - "./inftrees": 50, - }, - ], - 50: [ - function (require, module, exports) { - "use strict"; - - // (C) 1995-2013 Jean-loup Gailly and Mark Adler - // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin - // - // This software is provided 'as-is', without any express or implied - // warranty. In no event will the authors be held liable for any damages - // arising from the use of this software. - // - // Permission is granted to anyone to use this software for any purpose, - // including commercial applications, and to alter it and redistribute it - // freely, subject to the following restrictions: - // - // 1. The origin of this software must not be misrepresented; you must not - // claim that you wrote the original software. If you use this software - // in a product, an acknowledgment in the product documentation would be - // appreciated but is not required. - // 2. Altered source versions must be plainly marked as such, and must not be - // misrepresented as being the original software. - // 3. This notice may not be removed or altered from any source distribution. - - var utils = require("../utils/common"); - - var MAXBITS = 15; - var ENOUGH_LENS = 852; - var ENOUGH_DISTS = 592; - //var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS); - - var CODES = 0; - var LENS = 1; - var DISTS = 2; - - var lbase = [ - /* Length codes 257..285 base */ 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, - 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, - 195, 227, 258, 0, 0, - ]; - - var lext = [ - /* Length codes 257..285 extra */ 16, 16, 16, 16, 16, 16, 16, 16, - 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19, 20, 20, 20, 20, 21, - 21, 21, 21, 16, 72, 78, - ]; - - var dbase = [ - /* Distance codes 0..29 base */ 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, - 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, - 4097, 6145, 8193, 12289, 16385, 24577, 0, 0, - ]; - - var dext = [ - /* Distance codes 0..29 extra */ 16, 16, 16, 16, 17, 17, 18, 18, 19, - 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, - 28, 28, 29, 29, 64, 64, - ]; - - module.exports = function inflate_table( - type, - lens, - lens_index, - codes, - table, - table_index, - work, - opts, - ) { - var bits = opts.bits; - //here = opts.here; /* table entry for duplication */ - - var len = 0; /* a code's length in bits */ - var sym = 0; /* index of code symbols */ - var min = 0, - max = 0; /* minimum and maximum code lengths */ - var root = 0; /* number of index bits for root table */ - var curr = 0; /* number of index bits for current table */ - var drop = 0; /* code bits to drop for sub-table */ - var left = 0; /* number of prefix codes available */ - var used = 0; /* code entries in table used */ - var huff = 0; /* Huffman code */ - var incr; /* for incrementing code, index */ - var fill; /* index for replicating entries */ - var low; /* low bits for current root entry */ - var mask; /* mask for low root bits */ - var next; /* next available space in table */ - var base = null; /* base value table to use */ - var base_index = 0; - // var shoextra; /* extra bits table to use */ - var end; /* use base and extra for symbol > end */ - var count = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1]; /* number of codes of each length */ - var offs = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1]; /* offsets in table for each length */ - var extra = null; - var extra_index = 0; - - var here_bits, here_op, here_val; - - /* - Process a set of code lengths to create a canonical Huffman code. The - code lengths are lens[0..codes-1]. Each length corresponds to the - symbols 0..codes-1. The Huffman code is generated by first sorting the - symbols by length from short to long, and retaining the symbol order - for codes with equal lengths. Then the code starts with all zero bits - for the first code of the shortest length, and the codes are integer - increments for the same length, and zeros are appended as the length - increases. For the deflate format, these bits are stored backwards - from their more natural integer increment ordering, and so when the - decoding tables are built in the large loop below, the integer codes - are incremented backwards. - - This routine assumes, but does not check, that all of the entries in - lens[] are in the range 0..MAXBITS. The caller must assure this. - 1..MAXBITS is interpreted as that code length. zero means that that - symbol does not occur in this code. - - The codes are sorted by computing a count of codes for each length, - creating from that a table of starting indices for each length in the - sorted table, and then entering the symbols in order in the sorted - table. The sorted table is work[], with that space being provided by - the caller. - - The length counts are used for other purposes as well, i.e. finding - the minimum and maximum length codes, determining if there are any - codes at all, checking for a valid set of lengths, and looking ahead - at length counts to determine sub-table sizes when building the - decoding tables. - */ - - /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */ - for (len = 0; len <= MAXBITS; len++) { - count[len] = 0; - } - for (sym = 0; sym < codes; sym++) { - count[lens[lens_index + sym]]++; - } - - /* bound code lengths, force root to be within code lengths */ - root = bits; - for (max = MAXBITS; max >= 1; max--) { - if (count[max] !== 0) { - break; - } - } - if (root > max) { - root = max; - } - if (max === 0) { - /* no symbols to code at all */ - //table.op[opts.table_index] = 64; //here.op = (var char)64; /* invalid code marker */ - //table.bits[opts.table_index] = 1; //here.bits = (var char)1; - //table.val[opts.table_index++] = 0; //here.val = (var short)0; - table[table_index++] = (1 << 24) | (64 << 16) | 0; - - //table.op[opts.table_index] = 64; - //table.bits[opts.table_index] = 1; - //table.val[opts.table_index++] = 0; - table[table_index++] = (1 << 24) | (64 << 16) | 0; - - opts.bits = 1; - return 0; /* no symbols, but wait for decoding to report error */ - } - for (min = 1; min < max; min++) { - if (count[min] !== 0) { - break; - } - } - if (root < min) { - root = min; - } - - /* check for an over-subscribed or incomplete set of lengths */ - left = 1; - for (len = 1; len <= MAXBITS; len++) { - left <<= 1; - left -= count[len]; - if (left < 0) { - return -1; - } /* over-subscribed */ - } - if (left > 0 && (type === CODES || max !== 1)) { - return -1; /* incomplete set */ - } - - /* generate offsets into symbol table for each length for sorting */ - offs[1] = 0; - for (len = 1; len < MAXBITS; len++) { - offs[len + 1] = offs[len] + count[len]; - } - - /* sort symbols by length, by symbol order within each length */ - for (sym = 0; sym < codes; sym++) { - if (lens[lens_index + sym] !== 0) { - work[offs[lens[lens_index + sym]]++] = sym; - } - } - - /* - Create and fill in decoding tables. In this loop, the table being - filled is at next and has curr index bits. The code being used is huff - with length len. That code is converted to an index by dropping drop - bits off of the bottom. For codes where len is less than drop + curr, - those top drop + curr - len bits are incremented through all values to - fill the table with replicated entries. - - root is the number of index bits for the root table. When len exceeds - root, sub-tables are created pointed to by the root entry with an index - of the low root bits of huff. This is saved in low to check for when a - new sub-table should be started. drop is zero when the root table is - being filled, and drop is root when sub-tables are being filled. - - When a new sub-table is needed, it is necessary to look ahead in the - code lengths to determine what size sub-table is needed. The length - counts are used for this, and so count[] is decremented as codes are - entered in the tables. - - used keeps track of how many table entries have been allocated from the - provided *table space. It is checked for LENS and DIST tables against - the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in - the initial root table size constants. See the comments in inftrees.h - for more information. - - sym increments through all symbols, and the loop terminates when - all codes of length max, i.e. all codes, have been processed. This - routine permits incomplete codes, so another loop after this one fills - in the rest of the decoding tables with invalid code markers. - */ - - /* set up for code type */ - // poor man optimization - use if-else instead of switch, - // to avoid deopts in old v8 - if (type === CODES) { - base = extra = work; /* dummy value--not used */ - end = 19; - } else if (type === LENS) { - base = lbase; - base_index -= 257; - extra = lext; - extra_index -= 257; - end = 256; - } else { - /* DISTS */ - base = dbase; - extra = dext; - end = -1; - } - - /* initialize opts for loop */ - huff = 0; /* starting code */ - sym = 0; /* starting code symbol */ - len = min; /* starting code length */ - next = table_index; /* current table to fill in */ - curr = root; /* current table index bits */ - drop = 0; /* current bits to drop from code for index */ - low = -1; /* trigger new sub-table when len > root */ - used = 1 << root; /* use root table entries */ - mask = used - 1; /* mask for comparing low */ - - /* check available table space */ - if ( - (type === LENS && used > ENOUGH_LENS) || - (type === DISTS && used > ENOUGH_DISTS) - ) { - return 1; - } - - /* process all codes and make table entries */ - for (;;) { - /* create table entry */ - here_bits = len - drop; - if (work[sym] < end) { - here_op = 0; - here_val = work[sym]; - } else if (work[sym] > end) { - here_op = extra[extra_index + work[sym]]; - here_val = base[base_index + work[sym]]; - } else { - here_op = 32 + 64; /* end of block */ - here_val = 0; - } - - /* replicate for those indices with low len bits equal to huff */ - incr = 1 << (len - drop); - fill = 1 << curr; - min = fill; /* save offset to next table */ - do { - fill -= incr; - table[next + (huff >> drop) + fill] = - (here_bits << 24) | (here_op << 16) | here_val | 0; - } while (fill !== 0); - - /* backwards increment the len-bit code huff */ - incr = 1 << (len - 1); - while (huff & incr) { - incr >>= 1; - } - if (incr !== 0) { - huff &= incr - 1; - huff += incr; - } else { - huff = 0; - } - - /* go to next symbol, update count, len */ - sym++; - if (--count[len] === 0) { - if (len === max) { - break; - } - len = lens[lens_index + work[sym]]; - } - - /* create new sub-table if needed */ - if (len > root && (huff & mask) !== low) { - /* if first time, transition to sub-tables */ - if (drop === 0) { - drop = root; - } - - /* increment past last table */ - next += min; /* here min is 1 << curr */ - - /* determine length of next table */ - curr = len - drop; - left = 1 << curr; - while (curr + drop < max) { - left -= count[curr + drop]; - if (left <= 0) { - break; - } - curr++; - left <<= 1; - } - - /* check for enough space */ - used += 1 << curr; - if ( - (type === LENS && used > ENOUGH_LENS) || - (type === DISTS && used > ENOUGH_DISTS) - ) { - return 1; - } - - /* point entry in root table to sub-table */ - low = huff & mask; - /*table.op[low] = curr; - table.bits[low] = root; - table.val[low] = next - opts.table_index;*/ - table[low] = - (root << 24) | (curr << 16) | (next - table_index) | 0; - } - } - - /* fill in remaining table entry if code is incomplete (guaranteed to have - at most one remaining entry, since if the code is incomplete, the - maximum code length that was allowed to get this far is one bit) */ - if (huff !== 0) { - //table.op[next + huff] = 64; /* invalid code marker */ - //table.bits[next + huff] = len - drop; - //table.val[next + huff] = 0; - table[next + huff] = ((len - drop) << 24) | (64 << 16) | 0; - } - - /* set return parameters */ - //opts.table_index += used; - opts.bits = root; - return 0; - }; - }, - { "../utils/common": 41 }, - ], - 51: [ - function (require, module, exports) { - "use strict"; - - // (C) 1995-2013 Jean-loup Gailly and Mark Adler - // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin - // - // This software is provided 'as-is', without any express or implied - // warranty. In no event will the authors be held liable for any damages - // arising from the use of this software. - // - // Permission is granted to anyone to use this software for any purpose, - // including commercial applications, and to alter it and redistribute it - // freely, subject to the following restrictions: - // - // 1. The origin of this software must not be misrepresented; you must not - // claim that you wrote the original software. If you use this software - // in a product, an acknowledgment in the product documentation would be - // appreciated but is not required. - // 2. Altered source versions must be plainly marked as such, and must not be - // misrepresented as being the original software. - // 3. This notice may not be removed or altered from any source distribution. - - module.exports = { - 2: "need dictionary" /* Z_NEED_DICT 2 */, - 1: "stream end" /* Z_STREAM_END 1 */, - 0: "" /* Z_OK 0 */, - "-1": "file error" /* Z_ERRNO (-1) */, - "-2": "stream error" /* Z_STREAM_ERROR (-2) */, - "-3": "data error" /* Z_DATA_ERROR (-3) */, - "-4": "insufficient memory" /* Z_MEM_ERROR (-4) */, - "-5": "buffer error" /* Z_BUF_ERROR (-5) */, - "-6": "incompatible version" /* Z_VERSION_ERROR (-6) */, - }; - }, - {}, - ], - 52: [ - function (require, module, exports) { - "use strict"; - - // (C) 1995-2013 Jean-loup Gailly and Mark Adler - // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin - // - // This software is provided 'as-is', without any express or implied - // warranty. In no event will the authors be held liable for any damages - // arising from the use of this software. - // - // Permission is granted to anyone to use this software for any purpose, - // including commercial applications, and to alter it and redistribute it - // freely, subject to the following restrictions: - // - // 1. The origin of this software must not be misrepresented; you must not - // claim that you wrote the original software. If you use this software - // in a product, an acknowledgment in the product documentation would be - // appreciated but is not required. - // 2. Altered source versions must be plainly marked as such, and must not be - // misrepresented as being the original software. - // 3. This notice may not be removed or altered from any source distribution. - - var utils = require("../utils/common"); - - /* Public constants ==========================================================*/ - /* ===========================================================================*/ - - //var Z_FILTERED = 1; - //var Z_HUFFMAN_ONLY = 2; - //var Z_RLE = 3; - var Z_FIXED = 4; - //var Z_DEFAULT_STRATEGY = 0; - - /* Possible values of the data_type field (though see inflate()) */ - var Z_BINARY = 0; - var Z_TEXT = 1; - //var Z_ASCII = 1; // = Z_TEXT - var Z_UNKNOWN = 2; - - /*============================================================================*/ - - function zero(buf) { - var len = buf.length; - while (--len >= 0) { - buf[len] = 0; - } - } - - // From zutil.h - - var STORED_BLOCK = 0; - var STATIC_TREES = 1; - var DYN_TREES = 2; - /* The three kinds of block type */ - - var MIN_MATCH = 3; - var MAX_MATCH = 258; - /* The minimum and maximum match lengths */ - - // From deflate.h - /* =========================================================================== - * Internal compression state. - */ - - var LENGTH_CODES = 29; - /* number of length codes, not counting the special END_BLOCK code */ - - var LITERALS = 256; - /* number of literal bytes 0..255 */ - - var L_CODES = LITERALS + 1 + LENGTH_CODES; - /* number of Literal or Length codes, including the END_BLOCK code */ - - var D_CODES = 30; - /* number of distance codes */ - - var BL_CODES = 19; - /* number of codes used to transfer the bit lengths */ - - var HEAP_SIZE = 2 * L_CODES + 1; - /* maximum heap size */ - - var MAX_BITS = 15; - /* All codes must not exceed MAX_BITS bits */ - - var Buf_size = 16; - /* size of bit buffer in bi_buf */ - - /* =========================================================================== - * Constants - */ - - var MAX_BL_BITS = 7; - /* Bit length codes must not exceed MAX_BL_BITS bits */ - - var END_BLOCK = 256; - /* end of block literal code */ - - var REP_3_6 = 16; - /* repeat previous bit length 3-6 times (2 bits of repeat count) */ - - var REPZ_3_10 = 17; - /* repeat a zero length 3-10 times (3 bits of repeat count) */ - - var REPZ_11_138 = 18; - /* repeat a zero length 11-138 times (7 bits of repeat count) */ - - /* eslint-disable comma-spacing,array-bracket-spacing */ - var extra_lbits = - /* extra bits for each length code */ - [ - 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, - 4, 4, 5, 5, 5, 5, 0, - ]; - - var extra_dbits = - /* extra bits for each distance code */ - [ - 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, - 10, 10, 11, 11, 12, 12, 13, 13, - ]; - - var extra_blbits = - /* extra bits for each bit length code */ - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 7]; - - var bl_order = [ - 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15, - ]; - /* eslint-enable comma-spacing,array-bracket-spacing */ - - /* The lengths of the bit length codes are sent in order of decreasing - * probability, to avoid transmitting the lengths for unused bit length codes. - */ - - /* =========================================================================== - * Local data. These are initialized only once. - */ - - // We pre-fill arrays with 0 to avoid uninitialized gaps - - var DIST_CODE_LEN = 512; /* see definition of array dist_code below */ - - // !!!! Use flat array insdead of structure, Freq = i*2, Len = i*2+1 - var static_ltree = new Array((L_CODES + 2) * 2); - zero(static_ltree); - /* The static literal tree. Since the bit lengths are imposed, there is no - * need for the L_CODES extra codes used during heap construction. However - * The codes 286 and 287 are needed to build a canonical tree (see _tr_init - * below). - */ - - var static_dtree = new Array(D_CODES * 2); - zero(static_dtree); - /* The static distance tree. (Actually a trivial tree since all codes use - * 5 bits.) - */ - - var _dist_code = new Array(DIST_CODE_LEN); - zero(_dist_code); - /* Distance codes. The first 256 values correspond to the distances - * 3 .. 258, the last 256 values correspond to the top 8 bits of - * the 15 bit distances. - */ - - var _length_code = new Array(MAX_MATCH - MIN_MATCH + 1); - zero(_length_code); - /* length code for each normalized match length (0 == MIN_MATCH) */ - - var base_length = new Array(LENGTH_CODES); - zero(base_length); - /* First normalized length for each code (0 = MIN_MATCH) */ - - var base_dist = new Array(D_CODES); - zero(base_dist); - /* First normalized distance for each code (0 = distance of 1) */ - - function StaticTreeDesc( - static_tree, - extra_bits, - extra_base, - elems, - max_length, - ) { - this.static_tree = static_tree; /* static tree or NULL */ - this.extra_bits = extra_bits; /* extra bits for each code or NULL */ - this.extra_base = extra_base; /* base index for extra_bits */ - this.elems = elems; /* max number of elements in the tree */ - this.max_length = max_length; /* max bit length for the codes */ - - // show if `static_tree` has data or dummy - needed for monomorphic objects - this.has_stree = static_tree && static_tree.length; - } - - var static_l_desc; - var static_d_desc; - var static_bl_desc; - - function TreeDesc(dyn_tree, stat_desc) { - this.dyn_tree = dyn_tree; /* the dynamic tree */ - this.max_code = 0; /* largest code with non zero frequency */ - this.stat_desc = stat_desc; /* the corresponding static tree */ - } - - function d_code(dist) { - return dist < 256 - ? _dist_code[dist] - : _dist_code[256 + (dist >>> 7)]; - } - - /* =========================================================================== - * Output a short LSB first on the stream. - * IN assertion: there is enough room in pendingBuf. - */ - function put_short(s, w) { - // put_byte(s, (uch)((w) & 0xff)); - // put_byte(s, (uch)((ush)(w) >> 8)); - s.pending_buf[s.pending++] = w & 0xff; - s.pending_buf[s.pending++] = (w >>> 8) & 0xff; - } - - /* =========================================================================== - * Send a value on a given number of bits. - * IN assertion: length <= 16 and value fits in length bits. - */ - function send_bits(s, value, length) { - if (s.bi_valid > Buf_size - length) { - s.bi_buf |= (value << s.bi_valid) & 0xffff; - put_short(s, s.bi_buf); - s.bi_buf = value >> (Buf_size - s.bi_valid); - s.bi_valid += length - Buf_size; - } else { - s.bi_buf |= (value << s.bi_valid) & 0xffff; - s.bi_valid += length; - } - } - - function send_code(s, c, tree) { - send_bits(s, tree[c * 2] /*.Code*/, tree[c * 2 + 1] /*.Len*/); - } - - /* =========================================================================== - * Reverse the first len bits of a code, using straightforward code (a faster - * method would use a table) - * IN assertion: 1 <= len <= 15 - */ - function bi_reverse(code, len) { - var res = 0; - do { - res |= code & 1; - code >>>= 1; - res <<= 1; - } while (--len > 0); - return res >>> 1; - } - - /* =========================================================================== - * Flush the bit buffer, keeping at most 7 bits in it. - */ - function bi_flush(s) { - if (s.bi_valid === 16) { - put_short(s, s.bi_buf); - s.bi_buf = 0; - s.bi_valid = 0; - } else if (s.bi_valid >= 8) { - s.pending_buf[s.pending++] = s.bi_buf & 0xff; - s.bi_buf >>= 8; - s.bi_valid -= 8; - } - } - - /* =========================================================================== - * Compute the optimal bit lengths for a tree and update the total bit length - * for the current block. - * IN assertion: the fields freq and dad are set, heap[heap_max] and - * above are the tree nodes sorted by increasing frequency. - * OUT assertions: the field len is set to the optimal bit length, the - * array bl_count contains the frequencies for each bit length. - * The length opt_len is updated; static_len is also updated if stree is - * not null. - */ - function gen_bitlen(s, desc) { - // deflate_state *s; - // tree_desc *desc; /* the tree descriptor */ - var tree = desc.dyn_tree; - var max_code = desc.max_code; - var stree = desc.stat_desc.static_tree; - var has_stree = desc.stat_desc.has_stree; - var extra = desc.stat_desc.extra_bits; - var base = desc.stat_desc.extra_base; - var max_length = desc.stat_desc.max_length; - var h; /* heap index */ - var n, m; /* iterate over the tree elements */ - var bits; /* bit length */ - var xbits; /* extra bits */ - var f; /* frequency */ - var overflow = 0; /* number of elements with bit length too large */ - - for (bits = 0; bits <= MAX_BITS; bits++) { - s.bl_count[bits] = 0; - } - - /* In a first pass, compute the optimal bit lengths (which may - * overflow in the case of the bit length tree). - */ - tree[ - s.heap[s.heap_max] * 2 + 1 - ] /*.Len*/ = 0; /* root of the heap */ - - for (h = s.heap_max + 1; h < HEAP_SIZE; h++) { - n = s.heap[h]; - bits = tree[tree[n * 2 + 1] /*.Dad*/ * 2 + 1] /*.Len*/ + 1; - if (bits > max_length) { - bits = max_length; - overflow++; - } - tree[n * 2 + 1] /*.Len*/ = bits; - /* We overwrite tree[n].Dad which is no longer needed */ - - if (n > max_code) { - continue; - } /* not a leaf node */ - - s.bl_count[bits]++; - xbits = 0; - if (n >= base) { - xbits = extra[n - base]; - } - f = tree[n * 2] /*.Freq*/; - s.opt_len += f * (bits + xbits); - if (has_stree) { - s.static_len += f * (stree[n * 2 + 1] /*.Len*/ + xbits); - } - } - if (overflow === 0) { - return; - } - - // Trace((stderr,"\nbit length overflow\n")); - /* This happens for example on obj2 and pic of the Calgary corpus */ - - /* Find the first bit length which could increase: */ - do { - bits = max_length - 1; - while (s.bl_count[bits] === 0) { - bits--; - } - s.bl_count[bits]--; /* move one leaf down the tree */ - s.bl_count[ - bits + 1 - ] += 2; /* move one overflow item as its brother */ - s.bl_count[max_length]--; - /* The brother of the overflow item also moves one step up, - * but this does not affect bl_count[max_length] - */ - overflow -= 2; - } while (overflow > 0); - - /* Now recompute all bit lengths, scanning in increasing frequency. - * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all - * lengths instead of fixing only the wrong ones. This idea is taken - * from 'ar' written by Haruhiko Okumura.) - */ - for (bits = max_length; bits !== 0; bits--) { - n = s.bl_count[bits]; - while (n !== 0) { - m = s.heap[--h]; - if (m > max_code) { - continue; - } - if (tree[m * 2 + 1] /*.Len*/ !== bits) { - // Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits)); - s.opt_len += - (bits - tree[m * 2 + 1]) /*.Len*/ * tree[m * 2] /*.Freq*/; - tree[m * 2 + 1] /*.Len*/ = bits; - } - n--; - } - } - } - - /* =========================================================================== - * Generate the codes for a given tree and bit counts (which need not be - * optimal). - * IN assertion: the array bl_count contains the bit length statistics for - * the given tree and the field len is set for all tree elements. - * OUT assertion: the field code is set for all tree elements of non - * zero code length. - */ - function gen_codes(tree, max_code, bl_count) { - // ct_data *tree; /* the tree to decorate */ - // int max_code; /* largest code with non zero frequency */ - // ushf *bl_count; /* number of codes at each bit length */ - var next_code = new Array( - MAX_BITS + 1, - ); /* next code value for each bit length */ - var code = 0; /* running code value */ - var bits; /* bit index */ - var n; /* code index */ - - /* The distribution counts are first used to generate the code values - * without bit reversal. - */ - for (bits = 1; bits <= MAX_BITS; bits++) { - next_code[bits] = code = (code + bl_count[bits - 1]) << 1; - } - /* Check that the bit counts in bl_count are consistent. The last code - * must be all ones. - */ - //Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1, - // "inconsistent bit counts"); - //Tracev((stderr,"\ngen_codes: max_code %d ", max_code)); - - for (n = 0; n <= max_code; n++) { - var len = tree[n * 2 + 1]; /*.Len*/ - if (len === 0) { - continue; - } - /* Now reverse the bits */ - tree[n * 2] /*.Code*/ = bi_reverse(next_code[len]++, len); - - //Tracecv(tree != static_ltree, (stderr,"\nn %3d %c l %2d c %4x (%x) ", - // n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1)); - } - } - - /* =========================================================================== - * Initialize the various 'constant' tables. - */ - function tr_static_init() { - var n; /* iterates over tree elements */ - var bits; /* bit counter */ - var length; /* length value */ - var code; /* code value */ - var dist; /* distance index */ - var bl_count = new Array(MAX_BITS + 1); - /* number of codes at each bit length for an optimal tree */ - - // do check in _tr_init() - //if (static_init_done) return; - - /* For some embedded targets, global variables are not initialized: */ - /*#ifdef NO_INIT_GLOBAL_POINTERS - static_l_desc.static_tree = static_ltree; - static_l_desc.extra_bits = extra_lbits; - static_d_desc.static_tree = static_dtree; - static_d_desc.extra_bits = extra_dbits; - static_bl_desc.extra_bits = extra_blbits; -#endif*/ - - /* Initialize the mapping length (0..255) -> length code (0..28) */ - length = 0; - for (code = 0; code < LENGTH_CODES - 1; code++) { - base_length[code] = length; - for (n = 0; n < 1 << extra_lbits[code]; n++) { - _length_code[length++] = code; - } - } - //Assert (length == 256, "tr_static_init: length != 256"); - /* Note that the length 255 (match length 258) can be represented - * in two different ways: code 284 + 5 bits or code 285, so we - * overwrite length_code[255] to use the best encoding: - */ - _length_code[length - 1] = code; - - /* Initialize the mapping dist (0..32K) -> dist code (0..29) */ - dist = 0; - for (code = 0; code < 16; code++) { - base_dist[code] = dist; - for (n = 0; n < 1 << extra_dbits[code]; n++) { - _dist_code[dist++] = code; - } - } - //Assert (dist == 256, "tr_static_init: dist != 256"); - dist >>= 7; /* from now on, all distances are divided by 128 */ - for (; code < D_CODES; code++) { - base_dist[code] = dist << 7; - for (n = 0; n < 1 << (extra_dbits[code] - 7); n++) { - _dist_code[256 + dist++] = code; - } - } - //Assert (dist == 256, "tr_static_init: 256+dist != 512"); - - /* Construct the codes of the static literal tree */ - for (bits = 0; bits <= MAX_BITS; bits++) { - bl_count[bits] = 0; - } - - n = 0; - while (n <= 143) { - static_ltree[n * 2 + 1] /*.Len*/ = 8; - n++; - bl_count[8]++; - } - while (n <= 255) { - static_ltree[n * 2 + 1] /*.Len*/ = 9; - n++; - bl_count[9]++; - } - while (n <= 279) { - static_ltree[n * 2 + 1] /*.Len*/ = 7; - n++; - bl_count[7]++; - } - while (n <= 287) { - static_ltree[n * 2 + 1] /*.Len*/ = 8; - n++; - bl_count[8]++; - } - /* Codes 286 and 287 do not exist, but we must include them in the - * tree construction to get a canonical Huffman tree (longest code - * all ones) - */ - gen_codes(static_ltree, L_CODES + 1, bl_count); - - /* The static distance tree is trivial: */ - for (n = 0; n < D_CODES; n++) { - static_dtree[n * 2 + 1] /*.Len*/ = 5; - static_dtree[n * 2] /*.Code*/ = bi_reverse(n, 5); - } - - // Now data ready and we can init static trees - static_l_desc = new StaticTreeDesc( - static_ltree, - extra_lbits, - LITERALS + 1, - L_CODES, - MAX_BITS, - ); - static_d_desc = new StaticTreeDesc( - static_dtree, - extra_dbits, - 0, - D_CODES, - MAX_BITS, - ); - static_bl_desc = new StaticTreeDesc( - new Array(0), - extra_blbits, - 0, - BL_CODES, - MAX_BL_BITS, - ); - - //static_init_done = true; - } - - /* =========================================================================== - * Initialize a new block. - */ - function init_block(s) { - var n; /* iterates over tree elements */ - - /* Initialize the trees. */ - for (n = 0; n < L_CODES; n++) { - s.dyn_ltree[n * 2] /*.Freq*/ = 0; - } - for (n = 0; n < D_CODES; n++) { - s.dyn_dtree[n * 2] /*.Freq*/ = 0; - } - for (n = 0; n < BL_CODES; n++) { - s.bl_tree[n * 2] /*.Freq*/ = 0; - } - - s.dyn_ltree[END_BLOCK * 2] /*.Freq*/ = 1; - s.opt_len = s.static_len = 0; - s.last_lit = s.matches = 0; - } - - /* =========================================================================== - * Flush the bit buffer and align the output on a byte boundary - */ - function bi_windup(s) { - if (s.bi_valid > 8) { - put_short(s, s.bi_buf); - } else if (s.bi_valid > 0) { - //put_byte(s, (Byte)s->bi_buf); - s.pending_buf[s.pending++] = s.bi_buf; - } - s.bi_buf = 0; - s.bi_valid = 0; - } - - /* =========================================================================== - * Copy a stored block, storing first the length and its - * one's complement if requested. - */ - function copy_block(s, buf, len, header) { - //DeflateState *s; - //charf *buf; /* the input data */ - //unsigned len; /* its length */ - //int header; /* true if block header must be written */ - bi_windup(s); /* align on byte boundary */ - - if (header) { - put_short(s, len); - put_short(s, ~len); - } - // while (len--) { - // put_byte(s, *buf++); - // } - utils.arraySet(s.pending_buf, s.window, buf, len, s.pending); - s.pending += len; - } - - /* =========================================================================== - * Compares to subtrees, using the tree depth as tie breaker when - * the subtrees have equal frequency. This minimizes the worst case length. - */ - function smaller(tree, n, m, depth) { - var _n2 = n * 2; - var _m2 = m * 2; - return ( - tree[_n2] /*.Freq*/ < tree[_m2] /*.Freq*/ || - (tree[_n2] /*.Freq*/ === tree[_m2] /*.Freq*/ && - depth[n] <= depth[m]) - ); - } - - /* =========================================================================== - * Restore the heap property by moving down the tree starting at node k, - * exchanging a node with the smallest of its two sons if necessary, stopping - * when the heap property is re-established (each father smaller than its - * two sons). - */ - function pqdownheap(s, tree, k) { - // deflate_state *s; - // ct_data *tree; /* the tree to restore */ - // int k; /* node to move down */ - var v = s.heap[k]; - var j = k << 1; /* left son of k */ - while (j <= s.heap_len) { - /* Set j to the smallest of the two sons: */ - if ( - j < s.heap_len && - smaller(tree, s.heap[j + 1], s.heap[j], s.depth) - ) { - j++; - } - /* Exit if v is smaller than both sons */ - if (smaller(tree, v, s.heap[j], s.depth)) { - break; - } - - /* Exchange v with the smallest son */ - s.heap[k] = s.heap[j]; - k = j; - - /* And continue down the tree, setting j to the left son of k */ - j <<= 1; - } - s.heap[k] = v; - } - - // inlined manually - // var SMALLEST = 1; - - /* =========================================================================== - * Send the block data compressed using the given Huffman trees - */ - function compress_block(s, ltree, dtree) { - // deflate_state *s; - // const ct_data *ltree; /* literal tree */ - // const ct_data *dtree; /* distance tree */ - var dist; /* distance of matched string */ - var lc; /* match length or unmatched char (if dist == 0) */ - var lx = 0; /* running index in l_buf */ - var code; /* the code to send */ - var extra; /* number of extra bits to send */ - - if (s.last_lit !== 0) { - do { - dist = - (s.pending_buf[s.d_buf + lx * 2] << 8) | - s.pending_buf[s.d_buf + lx * 2 + 1]; - lc = s.pending_buf[s.l_buf + lx]; - lx++; - - if (dist === 0) { - send_code(s, lc, ltree); /* send a literal byte */ - //Tracecv(isgraph(lc), (stderr," '%c' ", lc)); - } else { - /* Here, lc is the match length - MIN_MATCH */ - code = _length_code[lc]; - send_code( - s, - code + LITERALS + 1, - ltree, - ); /* send the length code */ - extra = extra_lbits[code]; - if (extra !== 0) { - lc -= base_length[code]; - send_bits(s, lc, extra); /* send the extra length bits */ - } - dist--; /* dist is now the match distance - 1 */ - code = d_code(dist); - //Assert (code < D_CODES, "bad d_code"); - - send_code(s, code, dtree); /* send the distance code */ - extra = extra_dbits[code]; - if (extra !== 0) { - dist -= base_dist[code]; - send_bits( - s, - dist, - extra, - ); /* send the extra distance bits */ - } - } /* literal or match pair ? */ - - /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */ - //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx, - // "pendingBuf overflow"); - } while (lx < s.last_lit); - } - - send_code(s, END_BLOCK, ltree); - } - - /* =========================================================================== - * Construct one Huffman tree and assigns the code bit strings and lengths. - * Update the total bit length for the current block. - * IN assertion: the field freq is set for all tree elements. - * OUT assertions: the fields len and code are set to the optimal bit length - * and corresponding code. The length opt_len is updated; static_len is - * also updated if stree is not null. The field max_code is set. - */ - function build_tree(s, desc) { - // deflate_state *s; - // tree_desc *desc; /* the tree descriptor */ - var tree = desc.dyn_tree; - var stree = desc.stat_desc.static_tree; - var has_stree = desc.stat_desc.has_stree; - var elems = desc.stat_desc.elems; - var n, m; /* iterate over heap elements */ - var max_code = -1; /* largest code with non zero frequency */ - var node; /* new node being created */ - - /* Construct the initial heap, with least frequent element in - * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1]. - * heap[0] is not used. - */ - s.heap_len = 0; - s.heap_max = HEAP_SIZE; - - for (n = 0; n < elems; n++) { - if (tree[n * 2] /*.Freq*/ !== 0) { - s.heap[++s.heap_len] = max_code = n; - s.depth[n] = 0; - } else { - tree[n * 2 + 1] /*.Len*/ = 0; - } - } - - /* The pkzip format requires that at least one distance code exists, - * and that at least one bit should be sent even if there is only one - * possible code. So to avoid special checks later on we force at least - * two codes of non zero frequency. - */ - while (s.heap_len < 2) { - node = s.heap[++s.heap_len] = max_code < 2 ? ++max_code : 0; - tree[node * 2] /*.Freq*/ = 1; - s.depth[node] = 0; - s.opt_len--; - - if (has_stree) { - s.static_len -= stree[node * 2 + 1] /*.Len*/; - } - /* node is 0 or 1 so it does not have extra bits */ - } - desc.max_code = max_code; - - /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree, - * establish sub-heaps of increasing lengths: - */ - for (n = s.heap_len >> 1 /*int /2*/; n >= 1; n--) { - pqdownheap(s, tree, n); - } - - /* Construct the Huffman tree by repeatedly combining the least two - * frequent nodes. - */ - node = elems; /* next internal node of the tree */ - do { - //pqremove(s, tree, n); /* n = node of least frequency */ - /*** pqremove ***/ - n = s.heap[1 /*SMALLEST*/]; - s.heap[1 /*SMALLEST*/] = s.heap[s.heap_len--]; - pqdownheap(s, tree, 1 /*SMALLEST*/); - /***/ - - m = s.heap[1 /*SMALLEST*/]; /* m = node of next least frequency */ - - s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */ - s.heap[--s.heap_max] = m; - - /* Create a new node father of n and m */ - tree[node * 2] /*.Freq*/ = - tree[n * 2] /*.Freq*/ + tree[m * 2] /*.Freq*/; - s.depth[node] = - (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1; - tree[n * 2 + 1] /*.Dad*/ = tree[m * 2 + 1] /*.Dad*/ = node; - - /* and insert the new node in the heap */ - s.heap[1 /*SMALLEST*/] = node++; - pqdownheap(s, tree, 1 /*SMALLEST*/); - } while (s.heap_len >= 2); - - s.heap[--s.heap_max] = s.heap[1 /*SMALLEST*/]; - - /* At this point, the fields freq and dad are set. We can now - * generate the bit lengths. - */ - gen_bitlen(s, desc); - - /* The field len is now set, we can generate the bit codes */ - gen_codes(tree, max_code, s.bl_count); - } - - /* =========================================================================== - * Scan a literal or distance tree to determine the frequencies of the codes - * in the bit length tree. - */ - function scan_tree(s, tree, max_code) { - // deflate_state *s; - // ct_data *tree; /* the tree to be scanned */ - // int max_code; /* and its largest code of non zero frequency */ - var n; /* iterates over all tree elements */ - var prevlen = -1; /* last emitted length */ - var curlen; /* length of current code */ - - var nextlen = tree[0 * 2 + 1]; /*.Len*/ /* length of next code */ - - var count = 0; /* repeat count of the current code */ - var max_count = 7; /* max repeat count */ - var min_count = 4; /* min repeat count */ - - if (nextlen === 0) { - max_count = 138; - min_count = 3; - } - tree[(max_code + 1) * 2 + 1] /*.Len*/ = 0xffff; /* guard */ - - for (n = 0; n <= max_code; n++) { - curlen = nextlen; - nextlen = tree[(n + 1) * 2 + 1] /*.Len*/; - - if (++count < max_count && curlen === nextlen) { - continue; - } else if (count < min_count) { - s.bl_tree[curlen * 2] /*.Freq*/ += count; - } else if (curlen !== 0) { - if (curlen !== prevlen) { - s.bl_tree[curlen * 2] /*.Freq*/++; - } - s.bl_tree[REP_3_6 * 2] /*.Freq*/++; - } else if (count <= 10) { - s.bl_tree[REPZ_3_10 * 2] /*.Freq*/++; - } else { - s.bl_tree[REPZ_11_138 * 2] /*.Freq*/++; - } - - count = 0; - prevlen = curlen; - - if (nextlen === 0) { - max_count = 138; - min_count = 3; - } else if (curlen === nextlen) { - max_count = 6; - min_count = 3; - } else { - max_count = 7; - min_count = 4; - } - } - } - - /* =========================================================================== - * Send a literal or distance tree in compressed form, using the codes in - * bl_tree. - */ - function send_tree(s, tree, max_code) { - // deflate_state *s; - // ct_data *tree; /* the tree to be scanned */ - // int max_code; /* and its largest code of non zero frequency */ - var n; /* iterates over all tree elements */ - var prevlen = -1; /* last emitted length */ - var curlen; /* length of current code */ - - var nextlen = tree[0 * 2 + 1]; /*.Len*/ /* length of next code */ - - var count = 0; /* repeat count of the current code */ - var max_count = 7; /* max repeat count */ - var min_count = 4; /* min repeat count */ - - /* tree[max_code+1].Len = -1; */ /* guard already set */ - if (nextlen === 0) { - max_count = 138; - min_count = 3; - } - - for (n = 0; n <= max_code; n++) { - curlen = nextlen; - nextlen = tree[(n + 1) * 2 + 1] /*.Len*/; - - if (++count < max_count && curlen === nextlen) { - continue; - } else if (count < min_count) { - do { - send_code(s, curlen, s.bl_tree); - } while (--count !== 0); - } else if (curlen !== 0) { - if (curlen !== prevlen) { - send_code(s, curlen, s.bl_tree); - count--; - } - //Assert(count >= 3 && count <= 6, " 3_6?"); - send_code(s, REP_3_6, s.bl_tree); - send_bits(s, count - 3, 2); - } else if (count <= 10) { - send_code(s, REPZ_3_10, s.bl_tree); - send_bits(s, count - 3, 3); - } else { - send_code(s, REPZ_11_138, s.bl_tree); - send_bits(s, count - 11, 7); - } - - count = 0; - prevlen = curlen; - if (nextlen === 0) { - max_count = 138; - min_count = 3; - } else if (curlen === nextlen) { - max_count = 6; - min_count = 3; - } else { - max_count = 7; - min_count = 4; - } - } - } - - /* =========================================================================== - * Construct the Huffman tree for the bit lengths and return the index in - * bl_order of the last bit length code to send. - */ - function build_bl_tree(s) { - var max_blindex; /* index of last bit length code of non zero freq */ - - /* Determine the bit length frequencies for literal and distance trees */ - scan_tree(s, s.dyn_ltree, s.l_desc.max_code); - scan_tree(s, s.dyn_dtree, s.d_desc.max_code); - - /* Build the bit length tree: */ - build_tree(s, s.bl_desc); - /* opt_len now includes the length of the tree representations, except - * the lengths of the bit lengths codes and the 5+5+4 bits for the counts. - */ - - /* Determine the number of bit length codes to send. The pkzip format - * requires that at least 4 bit length codes be sent. (appnote.txt says - * 3 but the actual value used is 4.) - */ - for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) { - if (s.bl_tree[bl_order[max_blindex] * 2 + 1] /*.Len*/ !== 0) { - break; - } - } - /* Update opt_len to include the bit length tree and counts */ - s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4; - //Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld", - // s->opt_len, s->static_len)); - - return max_blindex; - } - - /* =========================================================================== - * Send the header for a block using dynamic Huffman trees: the counts, the - * lengths of the bit length codes, the literal tree and the distance tree. - * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4. - */ - function send_all_trees(s, lcodes, dcodes, blcodes) { - // deflate_state *s; - // int lcodes, dcodes, blcodes; /* number of codes for each tree */ - var rank; /* index in bl_order */ - - //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes"); - //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES, - // "too many codes"); - //Tracev((stderr, "\nbl counts: ")); - send_bits( - s, - lcodes - 257, - 5, - ); /* not +255 as stated in appnote.txt */ - send_bits(s, dcodes - 1, 5); - send_bits(s, blcodes - 4, 4); /* not -3 as stated in appnote.txt */ - for (rank = 0; rank < blcodes; rank++) { - //Tracev((stderr, "\nbl code %2d ", bl_order[rank])); - send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1] /*.Len*/, 3); - } - //Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent)); - - send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */ - //Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent)); - - send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */ - //Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent)); - } - - /* =========================================================================== - * Check if the data type is TEXT or BINARY, using the following algorithm: - * - TEXT if the two conditions below are satisfied: - * a) There are no non-portable control characters belonging to the - * "black list" (0..6, 14..25, 28..31). - * b) There is at least one printable character belonging to the - * "white list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255). - * - BINARY otherwise. - * - The following partially-portable control characters form a - * "gray list" that is ignored in this detection algorithm: - * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}). - * IN assertion: the fields Freq of dyn_ltree are set. - */ - function detect_data_type(s) { - /* black_mask is the bit mask of black-listed bytes - * set bits 0..6, 14..25, and 28..31 - * 0xf3ffc07f = binary 11110011111111111100000001111111 - */ - var black_mask = 0xf3ffc07f; - var n; - - /* Check for non-textual ("black-listed") bytes. */ - for (n = 0; n <= 31; n++, black_mask >>>= 1) { - if (black_mask & 1 && s.dyn_ltree[n * 2] /*.Freq*/ !== 0) { - return Z_BINARY; - } - } - - /* Check for textual ("white-listed") bytes. */ - if ( - s.dyn_ltree[9 * 2] /*.Freq*/ !== 0 || - s.dyn_ltree[10 * 2] /*.Freq*/ !== 0 || - s.dyn_ltree[13 * 2] /*.Freq*/ !== 0 - ) { - return Z_TEXT; - } - for (n = 32; n < LITERALS; n++) { - if (s.dyn_ltree[n * 2] /*.Freq*/ !== 0) { - return Z_TEXT; - } - } - - /* There are no "black-listed" or "white-listed" bytes: - * this stream either is empty or has tolerated ("gray-listed") bytes only. - */ - return Z_BINARY; - } - - var static_init_done = false; - - /* =========================================================================== - * Initialize the tree data structures for a new zlib stream. - */ - function _tr_init(s) { - if (!static_init_done) { - tr_static_init(); - static_init_done = true; - } - - s.l_desc = new TreeDesc(s.dyn_ltree, static_l_desc); - s.d_desc = new TreeDesc(s.dyn_dtree, static_d_desc); - s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc); - - s.bi_buf = 0; - s.bi_valid = 0; - - /* Initialize the first block of the first file: */ - init_block(s); - } - - /* =========================================================================== - * Send a stored block - */ - function _tr_stored_block(s, buf, stored_len, last) { - //DeflateState *s; - //charf *buf; /* input block */ - //ulg stored_len; /* length of input block */ - //int last; /* one if this is the last block for a file */ - send_bits( - s, - (STORED_BLOCK << 1) + (last ? 1 : 0), - 3, - ); /* send block type */ - copy_block(s, buf, stored_len, true); /* with header */ - } - - /* =========================================================================== - * Send one empty static block to give enough lookahead for inflate. - * This takes 10 bits, of which 7 may remain in the bit buffer. - */ - function _tr_align(s) { - send_bits(s, STATIC_TREES << 1, 3); - send_code(s, END_BLOCK, static_ltree); - bi_flush(s); - } - - /* =========================================================================== - * Determine the best encoding for the current block: dynamic trees, static - * trees or store, and output the encoded block to the zip file. - */ - function _tr_flush_block(s, buf, stored_len, last) { - //DeflateState *s; - //charf *buf; /* input block, or NULL if too old */ - //ulg stored_len; /* length of input block */ - //int last; /* one if this is the last block for a file */ - var opt_lenb, static_lenb; /* opt_len and static_len in bytes */ - var max_blindex = 0; /* index of last bit length code of non zero freq */ - - /* Build the Huffman trees unless a stored block is forced */ - if (s.level > 0) { - /* Check if the file is binary or text */ - if (s.strm.data_type === Z_UNKNOWN) { - s.strm.data_type = detect_data_type(s); - } - - /* Construct the literal and distance trees */ - build_tree(s, s.l_desc); - // Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len, - // s->static_len)); - - build_tree(s, s.d_desc); - // Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len, - // s->static_len)); - /* At this point, opt_len and static_len are the total bit lengths of - * the compressed block data, excluding the tree representations. - */ - - /* Build the bit length tree for the above two trees, and get the index - * in bl_order of the last bit length code to send. - */ - max_blindex = build_bl_tree(s); - - /* Determine the best encoding. Compute the block lengths in bytes. */ - opt_lenb = (s.opt_len + 3 + 7) >>> 3; - static_lenb = (s.static_len + 3 + 7) >>> 3; - - // Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ", - // opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len, - // s->last_lit)); - - if (static_lenb <= opt_lenb) { - opt_lenb = static_lenb; - } - } else { - // Assert(buf != (char*)0, "lost buf"); - opt_lenb = static_lenb = - stored_len + 5; /* force a stored block */ - } - - if (stored_len + 4 <= opt_lenb && buf !== -1) { - /* 4: two words for the lengths */ - - /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE. - * Otherwise we can't have processed more than WSIZE input bytes since - * the last block flush, because compression would have been - * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to - * transform a block into a stored block. - */ - _tr_stored_block(s, buf, stored_len, last); - } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) { - send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3); - compress_block(s, static_ltree, static_dtree); - } else { - send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3); - send_all_trees( - s, - s.l_desc.max_code + 1, - s.d_desc.max_code + 1, - max_blindex + 1, - ); - compress_block(s, s.dyn_ltree, s.dyn_dtree); - } - // Assert (s->compressed_len == s->bits_sent, "bad compressed size"); - /* The above check is made mod 2^32, for files larger than 512 MB - * and uLong implemented on 32 bits. - */ - init_block(s); - - if (last) { - bi_windup(s); - } - // Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3, - // s->compressed_len-7*last)); - } - - /* =========================================================================== - * Save the match info and tally the frequency counts. Return true if - * the current block must be flushed. - */ - function _tr_tally(s, dist, lc) { - // deflate_state *s; - // unsigned dist; /* distance of matched string */ - // unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */ - //var out_length, in_length, dcode; - - s.pending_buf[s.d_buf + s.last_lit * 2] = (dist >>> 8) & 0xff; - s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff; - - s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff; - s.last_lit++; - - if (dist === 0) { - /* lc is the unmatched char */ - s.dyn_ltree[lc * 2] /*.Freq*/++; - } else { - s.matches++; - /* Here, lc is the match length - MIN_MATCH */ - dist--; /* dist = match distance - 1 */ - //Assert((ush)dist < (ush)MAX_DIST(s) && - // (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) && - // (ush)d_code(dist) < (ush)D_CODES, "_tr_tally: bad match"); - - s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2] /*.Freq*/++; - s.dyn_dtree[d_code(dist) * 2] /*.Freq*/++; - } - - // (!) This block is disabled in zlib defailts, - // don't enable it for binary compatibility - - //#ifdef TRUNCATE_BLOCK - // /* Try to guess if it is profitable to stop the current block here */ - // if ((s.last_lit & 0x1fff) === 0 && s.level > 2) { - // /* Compute an upper bound for the compressed length */ - // out_length = s.last_lit*8; - // in_length = s.strstart - s.block_start; - // - // for (dcode = 0; dcode < D_CODES; dcode++) { - // out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]); - // } - // out_length >>>= 3; - // //Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ", - // // s->last_lit, in_length, out_length, - // // 100L - out_length*100L/in_length)); - // if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) { - // return true; - // } - // } - //#endif - - return s.last_lit === s.lit_bufsize - 1; - /* We avoid equality with lit_bufsize because of wraparound at 64K - * on 16 bit machines and because stored blocks are restricted to - * 64K-1 bytes. - */ - } - - exports._tr_init = _tr_init; - exports._tr_stored_block = _tr_stored_block; - exports._tr_flush_block = _tr_flush_block; - exports._tr_tally = _tr_tally; - exports._tr_align = _tr_align; - }, - { "../utils/common": 41 }, - ], - 53: [ - function (require, module, exports) { - "use strict"; - - // (C) 1995-2013 Jean-loup Gailly and Mark Adler - // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin - // - // This software is provided 'as-is', without any express or implied - // warranty. In no event will the authors be held liable for any damages - // arising from the use of this software. - // - // Permission is granted to anyone to use this software for any purpose, - // including commercial applications, and to alter it and redistribute it - // freely, subject to the following restrictions: - // - // 1. The origin of this software must not be misrepresented; you must not - // claim that you wrote the original software. If you use this software - // in a product, an acknowledgment in the product documentation would be - // appreciated but is not required. - // 2. Altered source versions must be plainly marked as such, and must not be - // misrepresented as being the original software. - // 3. This notice may not be removed or altered from any source distribution. - - function ZStream() { - /* next input byte */ - this.input = null; // JS specific, because we have no pointers - this.next_in = 0; - /* number of bytes available at input */ - this.avail_in = 0; - /* total number of input bytes read so far */ - this.total_in = 0; - /* next output byte should be put there */ - this.output = null; // JS specific, because we have no pointers - this.next_out = 0; - /* remaining free space at output */ - this.avail_out = 0; - /* total number of bytes output so far */ - this.total_out = 0; - /* last error message, NULL if no error */ - this.msg = "" /*Z_NULL*/; - /* not visible by applications */ - this.state = null; - /* best guess about the data type: binary or text */ - this.data_type = 2 /*Z_UNKNOWN*/; - /* adler32 value of the uncompressed data */ - this.adler = 0; - } - - module.exports = ZStream; - }, - {}, - ], - 54: [ - function (require, module, exports) { - (function (global) { - (function (global, undefined) { - "use strict"; - - if (global.setImmediate) { - return; - } - - var nextHandle = 1; // Spec says greater than zero - var tasksByHandle = {}; - var currentlyRunningATask = false; - var doc = global.document; - var registerImmediate; - - function setImmediate(callback) { - // Callback can either be a function or a string - if (typeof callback !== "function") { - callback = new Function("" + callback); - } - // Copy function arguments - var args = new Array(arguments.length - 1); - for (var i = 0; i < args.length; i++) { - args[i] = arguments[i + 1]; - } - // Store and register the task - var task = { callback: callback, args: args }; - tasksByHandle[nextHandle] = task; - registerImmediate(nextHandle); - return nextHandle++; - } - - function clearImmediate(handle) { - delete tasksByHandle[handle]; - } - - function run(task) { - var callback = task.callback; - var args = task.args; - switch (args.length) { - case 0: - callback(); - break; - case 1: - callback(args[0]); - break; - case 2: - callback(args[0], args[1]); - break; - case 3: - callback(args[0], args[1], args[2]); - break; - default: - callback.apply(undefined, args); - break; - } - } - - function runIfPresent(handle) { - // From the spec: "Wait until any invocations of this algorithm started before this one have completed." - // So if we're currently running a task, we'll need to delay this invocation. - if (currentlyRunningATask) { - // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a - // "too much recursion" error. - setTimeout(runIfPresent, 0, handle); - } else { - var task = tasksByHandle[handle]; - if (task) { - currentlyRunningATask = true; - try { - run(task); - } finally { - clearImmediate(handle); - currentlyRunningATask = false; - } - } - } - } - - function installNextTickImplementation() { - registerImmediate = function (handle) { - process.nextTick(function () { - runIfPresent(handle); - }); - }; - } - - function canUsePostMessage() { - // The test against `importScripts` prevents this implementation from being installed inside a web worker, - // where `global.postMessage` means something completely different and can't be used for this purpose. - if (global.postMessage && !global.importScripts) { - var postMessageIsAsynchronous = true; - var oldOnMessage = global.onmessage; - global.onmessage = function () { - postMessageIsAsynchronous = false; - }; - global.postMessage("", "*"); - global.onmessage = oldOnMessage; - return postMessageIsAsynchronous; - } - } - - function installPostMessageImplementation() { - // Installs an event handler on `global` for the `message` event: see - // * https://developer.mozilla.org/en/DOM/window.postMessage - // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages - - var messagePrefix = "setImmediate$" + Math.random() + "$"; - var onGlobalMessage = function (event) { - if ( - event.source === global && - typeof event.data === "string" && - event.data.indexOf(messagePrefix) === 0 - ) { - runIfPresent(+event.data.slice(messagePrefix.length)); - } - }; - - if (global.addEventListener) { - global.addEventListener("message", onGlobalMessage, false); - } else { - global.attachEvent("onmessage", onGlobalMessage); - } - - registerImmediate = function (handle) { - global.postMessage(messagePrefix + handle, "*"); - }; - } - - function installMessageChannelImplementation() { - var channel = new MessageChannel(); - channel.port1.onmessage = function (event) { - var handle = event.data; - runIfPresent(handle); - }; - - registerImmediate = function (handle) { - channel.port2.postMessage(handle); - }; - } - - function installReadyStateChangeImplementation() { - var html = doc.documentElement; - registerImmediate = function (handle) { - // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted - // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called. - var script = doc.createElement("script"); - script.onreadystatechange = function () { - runIfPresent(handle); - script.onreadystatechange = null; - html.removeChild(script); - script = null; - }; - html.appendChild(script); - }; - } - - function installSetTimeoutImplementation() { - registerImmediate = function (handle) { - setTimeout(runIfPresent, 0, handle); - }; - } - - // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live. - var attachTo = - Object.getPrototypeOf && Object.getPrototypeOf(global); - attachTo = attachTo && attachTo.setTimeout ? attachTo : global; - - // Don't get fooled by e.g. browserify environments. - if ({}.toString.call(global.process) === "[object process]") { - // For Node.js before 0.9 - installNextTickImplementation(); - } else if (canUsePostMessage()) { - // For non-IE10 modern browsers - installPostMessageImplementation(); - } else if (global.MessageChannel) { - // For web workers, where supported - installMessageChannelImplementation(); - } else if ( - doc && - "onreadystatechange" in doc.createElement("script") - ) { - // For IE 6–8 - installReadyStateChangeImplementation(); - } else { - // For older browsers - installSetTimeoutImplementation(); - } - - attachTo.setImmediate = setImmediate; - attachTo.clearImmediate = clearImmediate; - })( - typeof self === "undefined" - ? typeof global === "undefined" - ? this - : global - : self, - ); - }).call( - this, - typeof global !== "undefined" - ? global - : typeof self !== "undefined" - ? self - : typeof window !== "undefined" - ? window - : {}, - ); - }, - {}, - ], - }, - {}, - [10], - )(10); -}); diff --git a/public/scripts/jszip.min.js b/public/scripts/jszip.min.js deleted file mode 100644 index 2e4fbd6..0000000 --- a/public/scripts/jszip.min.js +++ /dev/null @@ -1,6242 +0,0 @@ -/*! - -JSZip v3.10.1 - A JavaScript class for generating and reading zip files -<http://stuartk.com/jszip> - -(c) 2009-2016 Stuart Knightley <stuart [at] stuartk.com> -Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/main/LICENSE.markdown. - -JSZip uses the library pako released under the MIT license : -https://github.com/nodeca/pako/blob/main/LICENSE -*/ - -!(function (e) { - if ("object" == typeof exports && "undefined" != typeof module) - module.exports = e(); - else if ("function" == typeof define && define.amd) define([], e); - else { - ("undefined" != typeof window - ? window - : "undefined" != typeof global - ? global - : "undefined" != typeof self - ? self - : this - ).JSZip = e(); - } -})(function () { - return (function s(a, o, h) { - function u(r, e) { - if (!o[r]) { - if (!a[r]) { - var t = "function" == typeof require && require; - if (!e && t) return t(r, !0); - if (l) return l(r, !0); - var n = new Error("Cannot find module '" + r + "'"); - throw ((n.code = "MODULE_NOT_FOUND"), n); - } - var i = (o[r] = { exports: {} }); - a[r][0].call( - i.exports, - function (e) { - var t = a[r][1][e]; - return u(t || e); - }, - i, - i.exports, - s, - a, - o, - h, - ); - } - return o[r].exports; - } - for ( - var l = "function" == typeof require && require, e = 0; - e < h.length; - e++ - ) - u(h[e]); - return u; - })( - { - 1: [ - function (e, t, r) { - "use strict"; - var d = e("./utils"), - c = e("./support"), - p = - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; - (r.encode = function (e) { - for ( - var t, - r, - n, - i, - s, - a, - o, - h = [], - u = 0, - l = e.length, - f = l, - c = "string" !== d.getTypeOf(e); - u < e.length; - - ) - (f = l - u), - (n = c - ? ((t = e[u++]), (r = u < l ? e[u++] : 0), u < l ? e[u++] : 0) - : ((t = e.charCodeAt(u++)), - (r = u < l ? e.charCodeAt(u++) : 0), - u < l ? e.charCodeAt(u++) : 0)), - (i = t >> 2), - (s = ((3 & t) << 4) | (r >> 4)), - (a = 1 < f ? ((15 & r) << 2) | (n >> 6) : 64), - (o = 2 < f ? 63 & n : 64), - h.push(p.charAt(i) + p.charAt(s) + p.charAt(a) + p.charAt(o)); - return h.join(""); - }), - (r.decode = function (e) { - var t, - r, - n, - i, - s, - a, - o = 0, - h = 0, - u = "data:"; - if (e.substr(0, u.length) === u) - throw new Error( - "Invalid base64 input, it looks like a data url.", - ); - var l, - f = (3 * (e = e.replace(/[^A-Za-z0-9+/=]/g, "")).length) / 4; - if ( - (e.charAt(e.length - 1) === p.charAt(64) && f--, - e.charAt(e.length - 2) === p.charAt(64) && f--, - f % 1 != 0) - ) - throw new Error("Invalid base64 input, bad content length."); - for ( - l = c.uint8array ? new Uint8Array(0 | f) : new Array(0 | f); - o < e.length; - - ) - (t = - (p.indexOf(e.charAt(o++)) << 2) | - ((i = p.indexOf(e.charAt(o++))) >> 4)), - (r = ((15 & i) << 4) | ((s = p.indexOf(e.charAt(o++))) >> 2)), - (n = ((3 & s) << 6) | (a = p.indexOf(e.charAt(o++)))), - (l[h++] = t), - 64 !== s && (l[h++] = r), - 64 !== a && (l[h++] = n); - return l; - }); - }, - { "./support": 30, "./utils": 32 }, - ], - 2: [ - function (e, t, r) { - "use strict"; - var n = e("./external"), - i = e("./stream/DataWorker"), - s = e("./stream/Crc32Probe"), - a = e("./stream/DataLengthProbe"); - function o(e, t, r, n, i) { - (this.compressedSize = e), - (this.uncompressedSize = t), - (this.crc32 = r), - (this.compression = n), - (this.compressedContent = i); - } - (o.prototype = { - getContentWorker: function () { - var e = new i(n.Promise.resolve(this.compressedContent)) - .pipe(this.compression.uncompressWorker()) - .pipe(new a("data_length")), - t = this; - return ( - e.on("end", function () { - if (this.streamInfo.data_length !== t.uncompressedSize) - throw new Error("Bug : uncompressed data size mismatch"); - }), - e - ); - }, - getCompressedWorker: function () { - return new i(n.Promise.resolve(this.compressedContent)) - .withStreamInfo("compressedSize", this.compressedSize) - .withStreamInfo("uncompressedSize", this.uncompressedSize) - .withStreamInfo("crc32", this.crc32) - .withStreamInfo("compression", this.compression); - }, - }), - (o.createWorkerFrom = function (e, t, r) { - return e - .pipe(new s()) - .pipe(new a("uncompressedSize")) - .pipe(t.compressWorker(r)) - .pipe(new a("compressedSize")) - .withStreamInfo("compression", t); - }), - (t.exports = o); - }, - { - "./external": 6, - "./stream/Crc32Probe": 25, - "./stream/DataLengthProbe": 26, - "./stream/DataWorker": 27, - }, - ], - 3: [ - function (e, t, r) { - "use strict"; - var n = e("./stream/GenericWorker"); - (r.STORE = { - magic: "\0\0", - compressWorker: function () { - return new n("STORE compression"); - }, - uncompressWorker: function () { - return new n("STORE decompression"); - }, - }), - (r.DEFLATE = e("./flate")); - }, - { "./flate": 7, "./stream/GenericWorker": 28 }, - ], - 4: [ - function (e, t, r) { - "use strict"; - var n = e("./utils"); - var o = (function () { - for (var e, t = [], r = 0; r < 256; r++) { - e = r; - for (var n = 0; n < 8; n++) - e = 1 & e ? 3988292384 ^ (e >>> 1) : e >>> 1; - t[r] = e; - } - return t; - })(); - t.exports = function (e, t) { - return void 0 !== e && e.length - ? "string" !== n.getTypeOf(e) - ? (function (e, t, r, n) { - var i = o, - s = n + r; - e ^= -1; - for (var a = n; a < s; a++) - e = (e >>> 8) ^ i[255 & (e ^ t[a])]; - return -1 ^ e; - })(0 | t, e, e.length, 0) - : (function (e, t, r, n) { - var i = o, - s = n + r; - e ^= -1; - for (var a = n; a < s; a++) - e = (e >>> 8) ^ i[255 & (e ^ t.charCodeAt(a))]; - return -1 ^ e; - })(0 | t, e, e.length, 0) - : 0; - }; - }, - { "./utils": 32 }, - ], - 5: [ - function (e, t, r) { - "use strict"; - (r.base64 = !1), - (r.binary = !1), - (r.dir = !1), - (r.createFolders = !0), - (r.date = null), - (r.compression = null), - (r.compressionOptions = null), - (r.comment = null), - (r.unixPermissions = null), - (r.dosPermissions = null); - }, - {}, - ], - 6: [ - function (e, t, r) { - "use strict"; - var n = null; - (n = "undefined" != typeof Promise ? Promise : e("lie")), - (t.exports = { Promise: n }); - }, - { lie: 37 }, - ], - 7: [ - function (e, t, r) { - "use strict"; - var n = - "undefined" != typeof Uint8Array && - "undefined" != typeof Uint16Array && - "undefined" != typeof Uint32Array, - i = e("pako"), - s = e("./utils"), - a = e("./stream/GenericWorker"), - o = n ? "uint8array" : "array"; - function h(e, t) { - a.call(this, "FlateWorker/" + e), - (this._pako = null), - (this._pakoAction = e), - (this._pakoOptions = t), - (this.meta = {}); - } - (r.magic = "\b\0"), - s.inherits(h, a), - (h.prototype.processChunk = function (e) { - (this.meta = e.meta), - null === this._pako && this._createPako(), - this._pako.push(s.transformTo(o, e.data), !1); - }), - (h.prototype.flush = function () { - a.prototype.flush.call(this), - null === this._pako && this._createPako(), - this._pako.push([], !0); - }), - (h.prototype.cleanUp = function () { - a.prototype.cleanUp.call(this), (this._pako = null); - }), - (h.prototype._createPako = function () { - this._pako = new i[this._pakoAction]({ - raw: !0, - level: this._pakoOptions.level || -1, - }); - var t = this; - this._pako.onData = function (e) { - t.push({ data: e, meta: t.meta }); - }; - }), - (r.compressWorker = function (e) { - return new h("Deflate", e); - }), - (r.uncompressWorker = function () { - return new h("Inflate", {}); - }); - }, - { "./stream/GenericWorker": 28, "./utils": 32, pako: 38 }, - ], - 8: [ - function (e, t, r) { - "use strict"; - function A(e, t) { - var r, - n = ""; - for (r = 0; r < t; r++) - (n += String.fromCharCode(255 & e)), (e >>>= 8); - return n; - } - function n(e, t, r, n, i, s) { - var a, - o, - h = e.file, - u = e.compression, - l = s !== O.utf8encode, - f = I.transformTo("string", s(h.name)), - c = I.transformTo("string", O.utf8encode(h.name)), - d = h.comment, - p = I.transformTo("string", s(d)), - m = I.transformTo("string", O.utf8encode(d)), - _ = c.length !== h.name.length, - g = m.length !== d.length, - b = "", - v = "", - y = "", - w = h.dir, - k = h.date, - x = { crc32: 0, compressedSize: 0, uncompressedSize: 0 }; - (t && !r) || - ((x.crc32 = e.crc32), - (x.compressedSize = e.compressedSize), - (x.uncompressedSize = e.uncompressedSize)); - var S = 0; - t && (S |= 8), l || (!_ && !g) || (S |= 2048); - var z = 0, - C = 0; - w && (z |= 16), - "UNIX" === i - ? ((C = 798), - (z |= (function (e, t) { - var r = e; - return e || (r = t ? 16893 : 33204), (65535 & r) << 16; - })(h.unixPermissions, w))) - : ((C = 20), - (z |= (function (e) { - return 63 & (e || 0); - })(h.dosPermissions))), - (a = k.getUTCHours()), - (a <<= 6), - (a |= k.getUTCMinutes()), - (a <<= 5), - (a |= k.getUTCSeconds() / 2), - (o = k.getUTCFullYear() - 1980), - (o <<= 4), - (o |= k.getUTCMonth() + 1), - (o <<= 5), - (o |= k.getUTCDate()), - _ && - ((v = A(1, 1) + A(B(f), 4) + c), - (b += "up" + A(v.length, 2) + v)), - g && - ((y = A(1, 1) + A(B(p), 4) + m), - (b += "uc" + A(y.length, 2) + y)); - var E = ""; - return ( - (E += "\n\0"), - (E += A(S, 2)), - (E += u.magic), - (E += A(a, 2)), - (E += A(o, 2)), - (E += A(x.crc32, 4)), - (E += A(x.compressedSize, 4)), - (E += A(x.uncompressedSize, 4)), - (E += A(f.length, 2)), - (E += A(b.length, 2)), - { - fileRecord: R.LOCAL_FILE_HEADER + E + f + b, - dirRecord: - R.CENTRAL_FILE_HEADER + - A(C, 2) + - E + - A(p.length, 2) + - "\0\0\0\0" + - A(z, 4) + - A(n, 4) + - f + - b + - p, - } - ); - } - var I = e("../utils"), - i = e("../stream/GenericWorker"), - O = e("../utf8"), - B = e("../crc32"), - R = e("../signature"); - function s(e, t, r, n) { - i.call(this, "ZipFileWorker"), - (this.bytesWritten = 0), - (this.zipComment = t), - (this.zipPlatform = r), - (this.encodeFileName = n), - (this.streamFiles = e), - (this.accumulate = !1), - (this.contentBuffer = []), - (this.dirRecords = []), - (this.currentSourceOffset = 0), - (this.entriesCount = 0), - (this.currentFile = null), - (this._sources = []); - } - I.inherits(s, i), - (s.prototype.push = function (e) { - var t = e.meta.percent || 0, - r = this.entriesCount, - n = this._sources.length; - this.accumulate - ? this.contentBuffer.push(e) - : ((this.bytesWritten += e.data.length), - i.prototype.push.call(this, { - data: e.data, - meta: { - currentFile: this.currentFile, - percent: r ? (t + 100 * (r - n - 1)) / r : 100, - }, - })); - }), - (s.prototype.openedSource = function (e) { - (this.currentSourceOffset = this.bytesWritten), - (this.currentFile = e.file.name); - var t = this.streamFiles && !e.file.dir; - if (t) { - var r = n( - e, - t, - !1, - this.currentSourceOffset, - this.zipPlatform, - this.encodeFileName, - ); - this.push({ data: r.fileRecord, meta: { percent: 0 } }); - } else this.accumulate = !0; - }), - (s.prototype.closedSource = function (e) { - this.accumulate = !1; - var t = this.streamFiles && !e.file.dir, - r = n( - e, - t, - !0, - this.currentSourceOffset, - this.zipPlatform, - this.encodeFileName, - ); - if ((this.dirRecords.push(r.dirRecord), t)) - this.push({ - data: (function (e) { - return ( - R.DATA_DESCRIPTOR + - A(e.crc32, 4) + - A(e.compressedSize, 4) + - A(e.uncompressedSize, 4) - ); - })(e), - meta: { percent: 100 }, - }); - else - for ( - this.push({ data: r.fileRecord, meta: { percent: 0 } }); - this.contentBuffer.length; - - ) - this.push(this.contentBuffer.shift()); - this.currentFile = null; - }), - (s.prototype.flush = function () { - for ( - var e = this.bytesWritten, t = 0; - t < this.dirRecords.length; - t++ - ) - this.push({ data: this.dirRecords[t], meta: { percent: 100 } }); - var r = this.bytesWritten - e, - n = (function (e, t, r, n, i) { - var s = I.transformTo("string", i(n)); - return ( - R.CENTRAL_DIRECTORY_END + - "\0\0\0\0" + - A(e, 2) + - A(e, 2) + - A(t, 4) + - A(r, 4) + - A(s.length, 2) + - s - ); - })( - this.dirRecords.length, - r, - e, - this.zipComment, - this.encodeFileName, - ); - this.push({ data: n, meta: { percent: 100 } }); - }), - (s.prototype.prepareNextSource = function () { - (this.previous = this._sources.shift()), - this.openedSource(this.previous.streamInfo), - this.isPaused ? this.previous.pause() : this.previous.resume(); - }), - (s.prototype.registerPrevious = function (e) { - this._sources.push(e); - var t = this; - return ( - e.on("data", function (e) { - t.processChunk(e); - }), - e.on("end", function () { - t.closedSource(t.previous.streamInfo), - t._sources.length ? t.prepareNextSource() : t.end(); - }), - e.on("error", function (e) { - t.error(e); - }), - this - ); - }), - (s.prototype.resume = function () { - return ( - !!i.prototype.resume.call(this) && - (!this.previous && this._sources.length - ? (this.prepareNextSource(), !0) - : this.previous || this._sources.length || this.generatedError - ? void 0 - : (this.end(), !0)) - ); - }), - (s.prototype.error = function (e) { - var t = this._sources; - if (!i.prototype.error.call(this, e)) return !1; - for (var r = 0; r < t.length; r++) - try { - t[r].error(e); - } catch (e) {} - return !0; - }), - (s.prototype.lock = function () { - i.prototype.lock.call(this); - for (var e = this._sources, t = 0; t < e.length; t++) e[t].lock(); - }), - (t.exports = s); - }, - { - "../crc32": 4, - "../signature": 23, - "../stream/GenericWorker": 28, - "../utf8": 31, - "../utils": 32, - }, - ], - 9: [ - function (e, t, r) { - "use strict"; - var u = e("../compressions"), - n = e("./ZipFileWorker"); - r.generateWorker = function (e, a, t) { - var o = new n(a.streamFiles, t, a.platform, a.encodeFileName), - h = 0; - try { - e.forEach(function (e, t) { - h++; - var r = (function (e, t) { - var r = e || t, - n = u[r]; - if (!n) - throw new Error( - r + " is not a valid compression method !", - ); - return n; - })(t.options.compression, a.compression), - n = - t.options.compressionOptions || a.compressionOptions || {}, - i = t.dir, - s = t.date; - t._compressWorker(r, n) - .withStreamInfo("file", { - name: e, - dir: i, - date: s, - comment: t.comment || "", - unixPermissions: t.unixPermissions, - dosPermissions: t.dosPermissions, - }) - .pipe(o); - }), - (o.entriesCount = h); - } catch (e) { - o.error(e); - } - return o; - }; - }, - { "../compressions": 3, "./ZipFileWorker": 8 }, - ], - 10: [ - function (e, t, r) { - "use strict"; - function n() { - if (!(this instanceof n)) return new n(); - if (arguments.length) - throw new Error( - "The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide.", - ); - (this.files = Object.create(null)), - (this.comment = null), - (this.root = ""), - (this.clone = function () { - var e = new n(); - for (var t in this) - "function" != typeof this[t] && (e[t] = this[t]); - return e; - }); - } - ((n.prototype = e("./object")).loadAsync = e("./load")), - (n.support = e("./support")), - (n.defaults = e("./defaults")), - (n.version = "3.10.1"), - (n.loadAsync = function (e, t) { - return new n().loadAsync(e, t); - }), - (n.external = e("./external")), - (t.exports = n); - }, - { - "./defaults": 5, - "./external": 6, - "./load": 11, - "./object": 15, - "./support": 30, - }, - ], - 11: [ - function (e, t, r) { - "use strict"; - var u = e("./utils"), - i = e("./external"), - n = e("./utf8"), - s = e("./zipEntries"), - a = e("./stream/Crc32Probe"), - l = e("./nodejsUtils"); - function f(n) { - return new i.Promise(function (e, t) { - var r = n.decompressed.getContentWorker().pipe(new a()); - r.on("error", function (e) { - t(e); - }) - .on("end", function () { - r.streamInfo.crc32 !== n.decompressed.crc32 - ? t(new Error("Corrupted zip : CRC32 mismatch")) - : e(); - }) - .resume(); - }); - } - t.exports = function (e, o) { - var h = this; - return ( - (o = u.extend(o || {}, { - base64: !1, - checkCRC32: !1, - optimizedBinaryString: !1, - createFolders: !1, - decodeFileName: n.utf8decode, - })), - l.isNode && l.isStream(e) - ? i.Promise.reject( - new Error( - "JSZip can't accept a stream when loading a zip file.", - ), - ) - : u - .prepareContent( - "the loaded zip file", - e, - !0, - o.optimizedBinaryString, - o.base64, - ) - .then(function (e) { - var t = new s(o); - return t.load(e), t; - }) - .then(function (e) { - var t = [i.Promise.resolve(e)], - r = e.files; - if (o.checkCRC32) - for (var n = 0; n < r.length; n++) t.push(f(r[n])); - return i.Promise.all(t); - }) - .then(function (e) { - for ( - var t = e.shift(), r = t.files, n = 0; - n < r.length; - n++ - ) { - var i = r[n], - s = i.fileNameStr, - a = u.resolve(i.fileNameStr); - h.file(a, i.decompressed, { - binary: !0, - optimizedBinaryString: !0, - date: i.date, - dir: i.dir, - comment: i.fileCommentStr.length - ? i.fileCommentStr - : null, - unixPermissions: i.unixPermissions, - dosPermissions: i.dosPermissions, - createFolders: o.createFolders, - }), - i.dir || (h.file(a).unsafeOriginalName = s); - } - return ( - t.zipComment.length && (h.comment = t.zipComment), h - ); - }) - ); - }; - }, - { - "./external": 6, - "./nodejsUtils": 14, - "./stream/Crc32Probe": 25, - "./utf8": 31, - "./utils": 32, - "./zipEntries": 33, - }, - ], - 12: [ - function (e, t, r) { - "use strict"; - var n = e("../utils"), - i = e("../stream/GenericWorker"); - function s(e, t) { - i.call(this, "Nodejs stream input adapter for " + e), - (this._upstreamEnded = !1), - this._bindStream(t); - } - n.inherits(s, i), - (s.prototype._bindStream = function (e) { - var t = this; - (this._stream = e).pause(), - e - .on("data", function (e) { - t.push({ data: e, meta: { percent: 0 } }); - }) - .on("error", function (e) { - t.isPaused ? (this.generatedError = e) : t.error(e); - }) - .on("end", function () { - t.isPaused ? (t._upstreamEnded = !0) : t.end(); - }); - }), - (s.prototype.pause = function () { - return ( - !!i.prototype.pause.call(this) && (this._stream.pause(), !0) - ); - }), - (s.prototype.resume = function () { - return ( - !!i.prototype.resume.call(this) && - (this._upstreamEnded ? this.end() : this._stream.resume(), !0) - ); - }), - (t.exports = s); - }, - { "../stream/GenericWorker": 28, "../utils": 32 }, - ], - 13: [ - function (e, t, r) { - "use strict"; - var i = e("readable-stream").Readable; - function n(e, t, r) { - i.call(this, t), (this._helper = e); - var n = this; - e.on("data", function (e, t) { - n.push(e) || n._helper.pause(), r && r(t); - }) - .on("error", function (e) { - n.emit("error", e); - }) - .on("end", function () { - n.push(null); - }); - } - e("../utils").inherits(n, i), - (n.prototype._read = function () { - this._helper.resume(); - }), - (t.exports = n); - }, - { "../utils": 32, "readable-stream": 16 }, - ], - 14: [ - function (e, t, r) { - "use strict"; - t.exports = { - isNode: "undefined" != typeof Buffer, - newBufferFrom: function (e, t) { - if (Buffer.from && Buffer.from !== Uint8Array.from) - return Buffer.from(e, t); - if ("number" == typeof e) - throw new Error('The "data" argument must not be a number'); - return new Buffer(e, t); - }, - allocBuffer: function (e) { - if (Buffer.alloc) return Buffer.alloc(e); - var t = new Buffer(e); - return t.fill(0), t; - }, - isBuffer: function (e) { - return Buffer.isBuffer(e); - }, - isStream: function (e) { - return ( - e && - "function" == typeof e.on && - "function" == typeof e.pause && - "function" == typeof e.resume - ); - }, - }; - }, - {}, - ], - 15: [ - function (e, t, r) { - "use strict"; - function s(e, t, r) { - var n, - i = u.getTypeOf(t), - s = u.extend(r || {}, f); - (s.date = s.date || new Date()), - null !== s.compression && - (s.compression = s.compression.toUpperCase()), - "string" == typeof s.unixPermissions && - (s.unixPermissions = parseInt(s.unixPermissions, 8)), - s.unixPermissions && 16384 & s.unixPermissions && (s.dir = !0), - s.dosPermissions && 16 & s.dosPermissions && (s.dir = !0), - s.dir && (e = g(e)), - s.createFolders && (n = _(e)) && b.call(this, n, !0); - var a = "string" === i && !1 === s.binary && !1 === s.base64; - (r && void 0 !== r.binary) || (s.binary = !a), - ((t instanceof c && 0 === t.uncompressedSize) || - s.dir || - !t || - 0 === t.length) && - ((s.base64 = !1), - (s.binary = !0), - (t = ""), - (s.compression = "STORE"), - (i = "string")); - var o = null; - o = - t instanceof c || t instanceof l - ? t - : p.isNode && p.isStream(t) - ? new m(e, t) - : u.prepareContent( - e, - t, - s.binary, - s.optimizedBinaryString, - s.base64, - ); - var h = new d(e, o, s); - this.files[e] = h; - } - var i = e("./utf8"), - u = e("./utils"), - l = e("./stream/GenericWorker"), - a = e("./stream/StreamHelper"), - f = e("./defaults"), - c = e("./compressedObject"), - d = e("./zipObject"), - o = e("./generate"), - p = e("./nodejsUtils"), - m = e("./nodejs/NodejsStreamInputAdapter"), - _ = function (e) { - "/" === e.slice(-1) && (e = e.substring(0, e.length - 1)); - var t = e.lastIndexOf("/"); - return 0 < t ? e.substring(0, t) : ""; - }, - g = function (e) { - return "/" !== e.slice(-1) && (e += "/"), e; - }, - b = function (e, t) { - return ( - (t = void 0 !== t ? t : f.createFolders), - (e = g(e)), - this.files[e] || - s.call(this, e, null, { dir: !0, createFolders: t }), - this.files[e] - ); - }; - function h(e) { - return "[object RegExp]" === Object.prototype.toString.call(e); - } - var n = { - load: function () { - throw new Error( - "This method has been removed in JSZip 3.0, please check the upgrade guide.", - ); - }, - forEach: function (e) { - var t, r, n; - for (t in this.files) - (n = this.files[t]), - (r = t.slice(this.root.length, t.length)) && - t.slice(0, this.root.length) === this.root && - e(r, n); - }, - filter: function (r) { - var n = []; - return ( - this.forEach(function (e, t) { - r(e, t) && n.push(t); - }), - n - ); - }, - file: function (e, t, r) { - if (1 !== arguments.length) - return (e = this.root + e), s.call(this, e, t, r), this; - if (h(e)) { - var n = e; - return this.filter(function (e, t) { - return !t.dir && n.test(e); - }); - } - var i = this.files[this.root + e]; - return i && !i.dir ? i : null; - }, - folder: function (r) { - if (!r) return this; - if (h(r)) - return this.filter(function (e, t) { - return t.dir && r.test(e); - }); - var e = this.root + r, - t = b.call(this, e), - n = this.clone(); - return (n.root = t.name), n; - }, - remove: function (r) { - r = this.root + r; - var e = this.files[r]; - if ( - (e || ("/" !== r.slice(-1) && (r += "/"), (e = this.files[r])), - e && !e.dir) - ) - delete this.files[r]; - else - for ( - var t = this.filter(function (e, t) { - return t.name.slice(0, r.length) === r; - }), - n = 0; - n < t.length; - n++ - ) - delete this.files[t[n].name]; - return this; - }, - generate: function () { - throw new Error( - "This method has been removed in JSZip 3.0, please check the upgrade guide.", - ); - }, - generateInternalStream: function (e) { - var t, - r = {}; - try { - if ( - (((r = u.extend(e || {}, { - streamFiles: !1, - compression: "STORE", - compressionOptions: null, - type: "", - platform: "DOS", - comment: null, - mimeType: "application/zip", - encodeFileName: i.utf8encode, - })).type = r.type.toLowerCase()), - (r.compression = r.compression.toUpperCase()), - "binarystring" === r.type && (r.type = "string"), - !r.type) - ) - throw new Error("No output type specified."); - u.checkSupport(r.type), - ("darwin" !== r.platform && - "freebsd" !== r.platform && - "linux" !== r.platform && - "sunos" !== r.platform) || - (r.platform = "UNIX"), - "win32" === r.platform && (r.platform = "DOS"); - var n = r.comment || this.comment || ""; - t = o.generateWorker(this, r, n); - } catch (e) { - (t = new l("error")).error(e); - } - return new a(t, r.type || "string", r.mimeType); - }, - generateAsync: function (e, t) { - return this.generateInternalStream(e).accumulate(t); - }, - generateNodeStream: function (e, t) { - return ( - (e = e || {}).type || (e.type = "nodebuffer"), - this.generateInternalStream(e).toNodejsStream(t) - ); - }, - }; - t.exports = n; - }, - { - "./compressedObject": 2, - "./defaults": 5, - "./generate": 9, - "./nodejs/NodejsStreamInputAdapter": 12, - "./nodejsUtils": 14, - "./stream/GenericWorker": 28, - "./stream/StreamHelper": 29, - "./utf8": 31, - "./utils": 32, - "./zipObject": 35, - }, - ], - 16: [ - function (e, t, r) { - "use strict"; - t.exports = e("stream"); - }, - { stream: void 0 }, - ], - 17: [ - function (e, t, r) { - "use strict"; - var n = e("./DataReader"); - function i(e) { - n.call(this, e); - for (var t = 0; t < this.data.length; t++) e[t] = 255 & e[t]; - } - e("../utils").inherits(i, n), - (i.prototype.byteAt = function (e) { - return this.data[this.zero + e]; - }), - (i.prototype.lastIndexOfSignature = function (e) { - for ( - var t = e.charCodeAt(0), - r = e.charCodeAt(1), - n = e.charCodeAt(2), - i = e.charCodeAt(3), - s = this.length - 4; - 0 <= s; - --s - ) - if ( - this.data[s] === t && - this.data[s + 1] === r && - this.data[s + 2] === n && - this.data[s + 3] === i - ) - return s - this.zero; - return -1; - }), - (i.prototype.readAndCheckSignature = function (e) { - var t = e.charCodeAt(0), - r = e.charCodeAt(1), - n = e.charCodeAt(2), - i = e.charCodeAt(3), - s = this.readData(4); - return t === s[0] && r === s[1] && n === s[2] && i === s[3]; - }), - (i.prototype.readData = function (e) { - if ((this.checkOffset(e), 0 === e)) return []; - var t = this.data.slice( - this.zero + this.index, - this.zero + this.index + e, - ); - return (this.index += e), t; - }), - (t.exports = i); - }, - { "../utils": 32, "./DataReader": 18 }, - ], - 18: [ - function (e, t, r) { - "use strict"; - var n = e("../utils"); - function i(e) { - (this.data = e), - (this.length = e.length), - (this.index = 0), - (this.zero = 0); - } - (i.prototype = { - checkOffset: function (e) { - this.checkIndex(this.index + e); - }, - checkIndex: function (e) { - if (this.length < this.zero + e || e < 0) - throw new Error( - "End of data reached (data length = " + - this.length + - ", asked index = " + - e + - "). Corrupted zip ?", - ); - }, - setIndex: function (e) { - this.checkIndex(e), (this.index = e); - }, - skip: function (e) { - this.setIndex(this.index + e); - }, - byteAt: function () {}, - readInt: function (e) { - var t, - r = 0; - for ( - this.checkOffset(e), t = this.index + e - 1; - t >= this.index; - t-- - ) - r = (r << 8) + this.byteAt(t); - return (this.index += e), r; - }, - readString: function (e) { - return n.transformTo("string", this.readData(e)); - }, - readData: function () {}, - lastIndexOfSignature: function () {}, - readAndCheckSignature: function () {}, - readDate: function () { - var e = this.readInt(4); - return new Date( - Date.UTC( - 1980 + ((e >> 25) & 127), - ((e >> 21) & 15) - 1, - (e >> 16) & 31, - (e >> 11) & 31, - (e >> 5) & 63, - (31 & e) << 1, - ), - ); - }, - }), - (t.exports = i); - }, - { "../utils": 32 }, - ], - 19: [ - function (e, t, r) { - "use strict"; - var n = e("./Uint8ArrayReader"); - function i(e) { - n.call(this, e); - } - e("../utils").inherits(i, n), - (i.prototype.readData = function (e) { - this.checkOffset(e); - var t = this.data.slice( - this.zero + this.index, - this.zero + this.index + e, - ); - return (this.index += e), t; - }), - (t.exports = i); - }, - { "../utils": 32, "./Uint8ArrayReader": 21 }, - ], - 20: [ - function (e, t, r) { - "use strict"; - var n = e("./DataReader"); - function i(e) { - n.call(this, e); - } - e("../utils").inherits(i, n), - (i.prototype.byteAt = function (e) { - return this.data.charCodeAt(this.zero + e); - }), - (i.prototype.lastIndexOfSignature = function (e) { - return this.data.lastIndexOf(e) - this.zero; - }), - (i.prototype.readAndCheckSignature = function (e) { - return e === this.readData(4); - }), - (i.prototype.readData = function (e) { - this.checkOffset(e); - var t = this.data.slice( - this.zero + this.index, - this.zero + this.index + e, - ); - return (this.index += e), t; - }), - (t.exports = i); - }, - { "../utils": 32, "./DataReader": 18 }, - ], - 21: [ - function (e, t, r) { - "use strict"; - var n = e("./ArrayReader"); - function i(e) { - n.call(this, e); - } - e("../utils").inherits(i, n), - (i.prototype.readData = function (e) { - if ((this.checkOffset(e), 0 === e)) return new Uint8Array(0); - var t = this.data.subarray( - this.zero + this.index, - this.zero + this.index + e, - ); - return (this.index += e), t; - }), - (t.exports = i); - }, - { "../utils": 32, "./ArrayReader": 17 }, - ], - 22: [ - function (e, t, r) { - "use strict"; - var n = e("../utils"), - i = e("../support"), - s = e("./ArrayReader"), - a = e("./StringReader"), - o = e("./NodeBufferReader"), - h = e("./Uint8ArrayReader"); - t.exports = function (e) { - var t = n.getTypeOf(e); - return ( - n.checkSupport(t), - "string" !== t || i.uint8array - ? "nodebuffer" === t - ? new o(e) - : i.uint8array - ? new h(n.transformTo("uint8array", e)) - : new s(n.transformTo("array", e)) - : new a(e) - ); - }; - }, - { - "../support": 30, - "../utils": 32, - "./ArrayReader": 17, - "./NodeBufferReader": 19, - "./StringReader": 20, - "./Uint8ArrayReader": 21, - }, - ], - 23: [ - function (e, t, r) { - "use strict"; - (r.LOCAL_FILE_HEADER = "PK"), - (r.CENTRAL_FILE_HEADER = "PK"), - (r.CENTRAL_DIRECTORY_END = "PK"), - (r.ZIP64_CENTRAL_DIRECTORY_LOCATOR = "PK"), - (r.ZIP64_CENTRAL_DIRECTORY_END = "PK"), - (r.DATA_DESCRIPTOR = "PK\b"); - }, - {}, - ], - 24: [ - function (e, t, r) { - "use strict"; - var n = e("./GenericWorker"), - i = e("../utils"); - function s(e) { - n.call(this, "ConvertWorker to " + e), (this.destType = e); - } - i.inherits(s, n), - (s.prototype.processChunk = function (e) { - this.push({ - data: i.transformTo(this.destType, e.data), - meta: e.meta, - }); - }), - (t.exports = s); - }, - { "../utils": 32, "./GenericWorker": 28 }, - ], - 25: [ - function (e, t, r) { - "use strict"; - var n = e("./GenericWorker"), - i = e("../crc32"); - function s() { - n.call(this, "Crc32Probe"), this.withStreamInfo("crc32", 0); - } - e("../utils").inherits(s, n), - (s.prototype.processChunk = function (e) { - (this.streamInfo.crc32 = i(e.data, this.streamInfo.crc32 || 0)), - this.push(e); - }), - (t.exports = s); - }, - { "../crc32": 4, "../utils": 32, "./GenericWorker": 28 }, - ], - 26: [ - function (e, t, r) { - "use strict"; - var n = e("../utils"), - i = e("./GenericWorker"); - function s(e) { - i.call(this, "DataLengthProbe for " + e), - (this.propName = e), - this.withStreamInfo(e, 0); - } - n.inherits(s, i), - (s.prototype.processChunk = function (e) { - if (e) { - var t = this.streamInfo[this.propName] || 0; - this.streamInfo[this.propName] = t + e.data.length; - } - i.prototype.processChunk.call(this, e); - }), - (t.exports = s); - }, - { "../utils": 32, "./GenericWorker": 28 }, - ], - 27: [ - function (e, t, r) { - "use strict"; - var n = e("../utils"), - i = e("./GenericWorker"); - function s(e) { - i.call(this, "DataWorker"); - var t = this; - (this.dataIsReady = !1), - (this.index = 0), - (this.max = 0), - (this.data = null), - (this.type = ""), - (this._tickScheduled = !1), - e.then( - function (e) { - (t.dataIsReady = !0), - (t.data = e), - (t.max = (e && e.length) || 0), - (t.type = n.getTypeOf(e)), - t.isPaused || t._tickAndRepeat(); - }, - function (e) { - t.error(e); - }, - ); - } - n.inherits(s, i), - (s.prototype.cleanUp = function () { - i.prototype.cleanUp.call(this), (this.data = null); - }), - (s.prototype.resume = function () { - return ( - !!i.prototype.resume.call(this) && - (!this._tickScheduled && - this.dataIsReady && - ((this._tickScheduled = !0), - n.delay(this._tickAndRepeat, [], this)), - !0) - ); - }), - (s.prototype._tickAndRepeat = function () { - (this._tickScheduled = !1), - this.isPaused || - this.isFinished || - (this._tick(), - this.isFinished || - (n.delay(this._tickAndRepeat, [], this), - (this._tickScheduled = !0))); - }), - (s.prototype._tick = function () { - if (this.isPaused || this.isFinished) return !1; - var e = null, - t = Math.min(this.max, this.index + 16384); - if (this.index >= this.max) return this.end(); - switch (this.type) { - case "string": - e = this.data.substring(this.index, t); - break; - case "uint8array": - e = this.data.subarray(this.index, t); - break; - case "array": - case "nodebuffer": - e = this.data.slice(this.index, t); - } - return ( - (this.index = t), - this.push({ - data: e, - meta: { - percent: this.max ? (this.index / this.max) * 100 : 0, - }, - }) - ); - }), - (t.exports = s); - }, - { "../utils": 32, "./GenericWorker": 28 }, - ], - 28: [ - function (e, t, r) { - "use strict"; - function n(e) { - (this.name = e || "default"), - (this.streamInfo = {}), - (this.generatedError = null), - (this.extraStreamInfo = {}), - (this.isPaused = !0), - (this.isFinished = !1), - (this.isLocked = !1), - (this._listeners = { data: [], end: [], error: [] }), - (this.previous = null); - } - (n.prototype = { - push: function (e) { - this.emit("data", e); - }, - end: function () { - if (this.isFinished) return !1; - this.flush(); - try { - this.emit("end"), this.cleanUp(), (this.isFinished = !0); - } catch (e) { - this.emit("error", e); - } - return !0; - }, - error: function (e) { - return ( - !this.isFinished && - (this.isPaused - ? (this.generatedError = e) - : ((this.isFinished = !0), - this.emit("error", e), - this.previous && this.previous.error(e), - this.cleanUp()), - !0) - ); - }, - on: function (e, t) { - return this._listeners[e].push(t), this; - }, - cleanUp: function () { - (this.streamInfo = - this.generatedError = - this.extraStreamInfo = - null), - (this._listeners = []); - }, - emit: function (e, t) { - if (this._listeners[e]) - for (var r = 0; r < this._listeners[e].length; r++) - this._listeners[e][r].call(this, t); - }, - pipe: function (e) { - return e.registerPrevious(this); - }, - registerPrevious: function (e) { - if (this.isLocked) - throw new Error( - "The stream '" + this + "' has already been used.", - ); - (this.streamInfo = e.streamInfo), - this.mergeStreamInfo(), - (this.previous = e); - var t = this; - return ( - e.on("data", function (e) { - t.processChunk(e); - }), - e.on("end", function () { - t.end(); - }), - e.on("error", function (e) { - t.error(e); - }), - this - ); - }, - pause: function () { - return ( - !this.isPaused && - !this.isFinished && - ((this.isPaused = !0), - this.previous && this.previous.pause(), - !0) - ); - }, - resume: function () { - if (!this.isPaused || this.isFinished) return !1; - var e = (this.isPaused = !1); - return ( - this.generatedError && - (this.error(this.generatedError), (e = !0)), - this.previous && this.previous.resume(), - !e - ); - }, - flush: function () {}, - processChunk: function (e) { - this.push(e); - }, - withStreamInfo: function (e, t) { - return ( - (this.extraStreamInfo[e] = t), this.mergeStreamInfo(), this - ); - }, - mergeStreamInfo: function () { - for (var e in this.extraStreamInfo) - Object.prototype.hasOwnProperty.call(this.extraStreamInfo, e) && - (this.streamInfo[e] = this.extraStreamInfo[e]); - }, - lock: function () { - if (this.isLocked) - throw new Error( - "The stream '" + this + "' has already been used.", - ); - (this.isLocked = !0), this.previous && this.previous.lock(); - }, - toString: function () { - var e = "Worker " + this.name; - return this.previous ? this.previous + " -> " + e : e; - }, - }), - (t.exports = n); - }, - {}, - ], - 29: [ - function (e, t, r) { - "use strict"; - var h = e("../utils"), - i = e("./ConvertWorker"), - s = e("./GenericWorker"), - u = e("../base64"), - n = e("../support"), - a = e("../external"), - o = null; - if (n.nodestream) - try { - o = e("../nodejs/NodejsStreamOutputAdapter"); - } catch (e) {} - function l(e, o) { - return new a.Promise(function (t, r) { - var n = [], - i = e._internalType, - s = e._outputType, - a = e._mimeType; - e.on("data", function (e, t) { - n.push(e), o && o(t); - }) - .on("error", function (e) { - (n = []), r(e); - }) - .on("end", function () { - try { - var e = (function (e, t, r) { - switch (e) { - case "blob": - return h.newBlob(h.transformTo("arraybuffer", t), r); - case "base64": - return u.encode(t); - default: - return h.transformTo(e, t); - } - })( - s, - (function (e, t) { - var r, - n = 0, - i = null, - s = 0; - for (r = 0; r < t.length; r++) s += t[r].length; - switch (e) { - case "string": - return t.join(""); - case "array": - return Array.prototype.concat.apply([], t); - case "uint8array": - for ( - i = new Uint8Array(s), r = 0; - r < t.length; - r++ - ) - i.set(t[r], n), (n += t[r].length); - return i; - case "nodebuffer": - return Buffer.concat(t); - default: - throw new Error( - "concat : unsupported type '" + e + "'", - ); - } - })(i, n), - a, - ); - t(e); - } catch (e) { - r(e); - } - n = []; - }) - .resume(); - }); - } - function f(e, t, r) { - var n = t; - switch (t) { - case "blob": - case "arraybuffer": - n = "uint8array"; - break; - case "base64": - n = "string"; - } - try { - (this._internalType = n), - (this._outputType = t), - (this._mimeType = r), - h.checkSupport(n), - (this._worker = e.pipe(new i(n))), - e.lock(); - } catch (e) { - (this._worker = new s("error")), this._worker.error(e); - } - } - (f.prototype = { - accumulate: function (e) { - return l(this, e); - }, - on: function (e, t) { - var r = this; - return ( - "data" === e - ? this._worker.on(e, function (e) { - t.call(r, e.data, e.meta); - }) - : this._worker.on(e, function () { - h.delay(t, arguments, r); - }), - this - ); - }, - resume: function () { - return h.delay(this._worker.resume, [], this._worker), this; - }, - pause: function () { - return this._worker.pause(), this; - }, - toNodejsStream: function (e) { - if ( - (h.checkSupport("nodestream"), - "nodebuffer" !== this._outputType) - ) - throw new Error( - this._outputType + " is not supported by this method", - ); - return new o( - this, - { objectMode: "nodebuffer" !== this._outputType }, - e, - ); - }, - }), - (t.exports = f); - }, - { - "../base64": 1, - "../external": 6, - "../nodejs/NodejsStreamOutputAdapter": 13, - "../support": 30, - "../utils": 32, - "./ConvertWorker": 24, - "./GenericWorker": 28, - }, - ], - 30: [ - function (e, t, r) { - "use strict"; - if ( - ((r.base64 = !0), - (r.array = !0), - (r.string = !0), - (r.arraybuffer = - "undefined" != typeof ArrayBuffer && - "undefined" != typeof Uint8Array), - (r.nodebuffer = "undefined" != typeof Buffer), - (r.uint8array = "undefined" != typeof Uint8Array), - "undefined" == typeof ArrayBuffer) - ) - r.blob = !1; - else { - var n = new ArrayBuffer(0); - try { - r.blob = 0 === new Blob([n], { type: "application/zip" }).size; - } catch (e) { - try { - var i = new (self.BlobBuilder || - self.WebKitBlobBuilder || - self.MozBlobBuilder || - self.MSBlobBuilder)(); - i.append(n), (r.blob = 0 === i.getBlob("application/zip").size); - } catch (e) { - r.blob = !1; - } - } - } - try { - r.nodestream = !!e("readable-stream").Readable; - } catch (e) { - r.nodestream = !1; - } - }, - { "readable-stream": 16 }, - ], - 31: [ - function (e, t, s) { - "use strict"; - for ( - var o = e("./utils"), - h = e("./support"), - r = e("./nodejsUtils"), - n = e("./stream/GenericWorker"), - u = new Array(256), - i = 0; - i < 256; - i++ - ) - u[i] = - 252 <= i - ? 6 - : 248 <= i - ? 5 - : 240 <= i - ? 4 - : 224 <= i - ? 3 - : 192 <= i - ? 2 - : 1; - u[254] = u[254] = 1; - function a() { - n.call(this, "utf-8 decode"), (this.leftOver = null); - } - function l() { - n.call(this, "utf-8 encode"); - } - (s.utf8encode = function (e) { - return h.nodebuffer - ? r.newBufferFrom(e, "utf-8") - : (function (e) { - var t, - r, - n, - i, - s, - a = e.length, - o = 0; - for (i = 0; i < a; i++) - 55296 == (64512 & (r = e.charCodeAt(i))) && - i + 1 < a && - 56320 == (64512 & (n = e.charCodeAt(i + 1))) && - ((r = 65536 + ((r - 55296) << 10) + (n - 56320)), i++), - (o += r < 128 ? 1 : r < 2048 ? 2 : r < 65536 ? 3 : 4); - for ( - t = h.uint8array ? new Uint8Array(o) : new Array(o), - i = s = 0; - s < o; - i++ - ) - 55296 == (64512 & (r = e.charCodeAt(i))) && - i + 1 < a && - 56320 == (64512 & (n = e.charCodeAt(i + 1))) && - ((r = 65536 + ((r - 55296) << 10) + (n - 56320)), i++), - r < 128 - ? (t[s++] = r) - : (r < 2048 - ? (t[s++] = 192 | (r >>> 6)) - : (r < 65536 - ? (t[s++] = 224 | (r >>> 12)) - : ((t[s++] = 240 | (r >>> 18)), - (t[s++] = 128 | ((r >>> 12) & 63))), - (t[s++] = 128 | ((r >>> 6) & 63))), - (t[s++] = 128 | (63 & r))); - return t; - })(e); - }), - (s.utf8decode = function (e) { - return h.nodebuffer - ? o.transformTo("nodebuffer", e).toString("utf-8") - : (function (e) { - var t, - r, - n, - i, - s = e.length, - a = new Array(2 * s); - for (t = r = 0; t < s; ) - if ((n = e[t++]) < 128) a[r++] = n; - else if (4 < (i = u[n])) (a[r++] = 65533), (t += i - 1); - else { - for ( - n &= 2 === i ? 31 : 3 === i ? 15 : 7; - 1 < i && t < s; - - ) - (n = (n << 6) | (63 & e[t++])), i--; - 1 < i - ? (a[r++] = 65533) - : n < 65536 - ? (a[r++] = n) - : ((n -= 65536), - (a[r++] = 55296 | ((n >> 10) & 1023)), - (a[r++] = 56320 | (1023 & n))); - } - return ( - a.length !== r && - (a.subarray ? (a = a.subarray(0, r)) : (a.length = r)), - o.applyFromCharCode(a) - ); - })( - (e = o.transformTo( - h.uint8array ? "uint8array" : "array", - e, - )), - ); - }), - o.inherits(a, n), - (a.prototype.processChunk = function (e) { - var t = o.transformTo( - h.uint8array ? "uint8array" : "array", - e.data, - ); - if (this.leftOver && this.leftOver.length) { - if (h.uint8array) { - var r = t; - (t = new Uint8Array(r.length + this.leftOver.length)).set( - this.leftOver, - 0, - ), - t.set(r, this.leftOver.length); - } else t = this.leftOver.concat(t); - this.leftOver = null; - } - var n = (function (e, t) { - var r; - for ( - (t = t || e.length) > e.length && (t = e.length), r = t - 1; - 0 <= r && 128 == (192 & e[r]); - - ) - r--; - return r < 0 ? t : 0 === r ? t : r + u[e[r]] > t ? r : t; - })(t), - i = t; - n !== t.length && - (h.uint8array - ? ((i = t.subarray(0, n)), - (this.leftOver = t.subarray(n, t.length))) - : ((i = t.slice(0, n)), - (this.leftOver = t.slice(n, t.length)))), - this.push({ data: s.utf8decode(i), meta: e.meta }); - }), - (a.prototype.flush = function () { - this.leftOver && - this.leftOver.length && - (this.push({ data: s.utf8decode(this.leftOver), meta: {} }), - (this.leftOver = null)); - }), - (s.Utf8DecodeWorker = a), - o.inherits(l, n), - (l.prototype.processChunk = function (e) { - this.push({ data: s.utf8encode(e.data), meta: e.meta }); - }), - (s.Utf8EncodeWorker = l); - }, - { - "./nodejsUtils": 14, - "./stream/GenericWorker": 28, - "./support": 30, - "./utils": 32, - }, - ], - 32: [ - function (e, t, a) { - "use strict"; - var o = e("./support"), - h = e("./base64"), - r = e("./nodejsUtils"), - u = e("./external"); - function n(e) { - return e; - } - function l(e, t) { - for (var r = 0; r < e.length; ++r) t[r] = 255 & e.charCodeAt(r); - return t; - } - e("setimmediate"), - (a.newBlob = function (t, r) { - a.checkSupport("blob"); - try { - return new Blob([t], { type: r }); - } catch (e) { - try { - var n = new (self.BlobBuilder || - self.WebKitBlobBuilder || - self.MozBlobBuilder || - self.MSBlobBuilder)(); - return n.append(t), n.getBlob(r); - } catch (e) { - throw new Error("Bug : can't construct the Blob."); - } - } - }); - var i = { - stringifyByChunk: function (e, t, r) { - var n = [], - i = 0, - s = e.length; - if (s <= r) return String.fromCharCode.apply(null, e); - for (; i < s; ) - "array" === t || "nodebuffer" === t - ? n.push( - String.fromCharCode.apply( - null, - e.slice(i, Math.min(i + r, s)), - ), - ) - : n.push( - String.fromCharCode.apply( - null, - e.subarray(i, Math.min(i + r, s)), - ), - ), - (i += r); - return n.join(""); - }, - stringifyByChar: function (e) { - for (var t = "", r = 0; r < e.length; r++) - t += String.fromCharCode(e[r]); - return t; - }, - applyCanBeUsed: { - uint8array: (function () { - try { - return ( - o.uint8array && - 1 === - String.fromCharCode.apply(null, new Uint8Array(1)).length - ); - } catch (e) { - return !1; - } - })(), - nodebuffer: (function () { - try { - return ( - o.nodebuffer && - 1 === - String.fromCharCode.apply(null, r.allocBuffer(1)).length - ); - } catch (e) { - return !1; - } - })(), - }, - }; - function s(e) { - var t = 65536, - r = a.getTypeOf(e), - n = !0; - if ( - ("uint8array" === r - ? (n = i.applyCanBeUsed.uint8array) - : "nodebuffer" === r && (n = i.applyCanBeUsed.nodebuffer), - n) - ) - for (; 1 < t; ) - try { - return i.stringifyByChunk(e, r, t); - } catch (e) { - t = Math.floor(t / 2); - } - return i.stringifyByChar(e); - } - function f(e, t) { - for (var r = 0; r < e.length; r++) t[r] = e[r]; - return t; - } - a.applyFromCharCode = s; - var c = {}; - (c.string = { - string: n, - array: function (e) { - return l(e, new Array(e.length)); - }, - arraybuffer: function (e) { - return c.string.uint8array(e).buffer; - }, - uint8array: function (e) { - return l(e, new Uint8Array(e.length)); - }, - nodebuffer: function (e) { - return l(e, r.allocBuffer(e.length)); - }, - }), - (c.array = { - string: s, - array: n, - arraybuffer: function (e) { - return new Uint8Array(e).buffer; - }, - uint8array: function (e) { - return new Uint8Array(e); - }, - nodebuffer: function (e) { - return r.newBufferFrom(e); - }, - }), - (c.arraybuffer = { - string: function (e) { - return s(new Uint8Array(e)); - }, - array: function (e) { - return f(new Uint8Array(e), new Array(e.byteLength)); - }, - arraybuffer: n, - uint8array: function (e) { - return new Uint8Array(e); - }, - nodebuffer: function (e) { - return r.newBufferFrom(new Uint8Array(e)); - }, - }), - (c.uint8array = { - string: s, - array: function (e) { - return f(e, new Array(e.length)); - }, - arraybuffer: function (e) { - return e.buffer; - }, - uint8array: n, - nodebuffer: function (e) { - return r.newBufferFrom(e); - }, - }), - (c.nodebuffer = { - string: s, - array: function (e) { - return f(e, new Array(e.length)); - }, - arraybuffer: function (e) { - return c.nodebuffer.uint8array(e).buffer; - }, - uint8array: function (e) { - return f(e, new Uint8Array(e.length)); - }, - nodebuffer: n, - }), - (a.transformTo = function (e, t) { - if (((t = t || ""), !e)) return t; - a.checkSupport(e); - var r = a.getTypeOf(t); - return c[r][e](t); - }), - (a.resolve = function (e) { - for (var t = e.split("/"), r = [], n = 0; n < t.length; n++) { - var i = t[n]; - "." === i || - ("" === i && 0 !== n && n !== t.length - 1) || - (".." === i ? r.pop() : r.push(i)); - } - return r.join("/"); - }), - (a.getTypeOf = function (e) { - return "string" == typeof e - ? "string" - : "[object Array]" === Object.prototype.toString.call(e) - ? "array" - : o.nodebuffer && r.isBuffer(e) - ? "nodebuffer" - : o.uint8array && e instanceof Uint8Array - ? "uint8array" - : o.arraybuffer && e instanceof ArrayBuffer - ? "arraybuffer" - : void 0; - }), - (a.checkSupport = function (e) { - if (!o[e.toLowerCase()]) - throw new Error(e + " is not supported by this platform"); - }), - (a.MAX_VALUE_16BITS = 65535), - (a.MAX_VALUE_32BITS = -1), - (a.pretty = function (e) { - var t, - r, - n = ""; - for (r = 0; r < (e || "").length; r++) - n += - "\\x" + - ((t = e.charCodeAt(r)) < 16 ? "0" : "") + - t.toString(16).toUpperCase(); - return n; - }), - (a.delay = function (e, t, r) { - setImmediate(function () { - e.apply(r || null, t || []); - }); - }), - (a.inherits = function (e, t) { - function r() {} - (r.prototype = t.prototype), (e.prototype = new r()); - }), - (a.extend = function () { - var e, - t, - r = {}; - for (e = 0; e < arguments.length; e++) - for (t in arguments[e]) - Object.prototype.hasOwnProperty.call(arguments[e], t) && - void 0 === r[t] && - (r[t] = arguments[e][t]); - return r; - }), - (a.prepareContent = function (r, e, n, i, s) { - return u.Promise.resolve(e) - .then(function (n) { - return o.blob && - (n instanceof Blob || - -1 !== - ["[object File]", "[object Blob]"].indexOf( - Object.prototype.toString.call(n), - )) && - "undefined" != typeof FileReader - ? new u.Promise(function (t, r) { - var e = new FileReader(); - (e.onload = function (e) { - t(e.target.result); - }), - (e.onerror = function (e) { - r(e.target.error); - }), - e.readAsArrayBuffer(n); - }) - : n; - }) - .then(function (e) { - var t = a.getTypeOf(e); - return t - ? ("arraybuffer" === t - ? (e = a.transformTo("uint8array", e)) - : "string" === t && - (s - ? (e = h.decode(e)) - : n && - !0 !== i && - (e = (function (e) { - return l( - e, - o.uint8array - ? new Uint8Array(e.length) - : new Array(e.length), - ); - })(e))), - e) - : u.Promise.reject( - new Error( - "Can't read the data of '" + - r + - "'. Is it in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?", - ), - ); - }); - }); - }, - { - "./base64": 1, - "./external": 6, - "./nodejsUtils": 14, - "./support": 30, - setimmediate: 54, - }, - ], - 33: [ - function (e, t, r) { - "use strict"; - var n = e("./reader/readerFor"), - i = e("./utils"), - s = e("./signature"), - a = e("./zipEntry"), - o = e("./support"); - function h(e) { - (this.files = []), (this.loadOptions = e); - } - (h.prototype = { - checkSignature: function (e) { - if (!this.reader.readAndCheckSignature(e)) { - this.reader.index -= 4; - var t = this.reader.readString(4); - throw new Error( - "Corrupted zip or bug: unexpected signature (" + - i.pretty(t) + - ", expected " + - i.pretty(e) + - ")", - ); - } - }, - isSignature: function (e, t) { - var r = this.reader.index; - this.reader.setIndex(e); - var n = this.reader.readString(4) === t; - return this.reader.setIndex(r), n; - }, - readBlockEndOfCentral: function () { - (this.diskNumber = this.reader.readInt(2)), - (this.diskWithCentralDirStart = this.reader.readInt(2)), - (this.centralDirRecordsOnThisDisk = this.reader.readInt(2)), - (this.centralDirRecords = this.reader.readInt(2)), - (this.centralDirSize = this.reader.readInt(4)), - (this.centralDirOffset = this.reader.readInt(4)), - (this.zipCommentLength = this.reader.readInt(2)); - var e = this.reader.readData(this.zipCommentLength), - t = o.uint8array ? "uint8array" : "array", - r = i.transformTo(t, e); - this.zipComment = this.loadOptions.decodeFileName(r); - }, - readBlockZip64EndOfCentral: function () { - (this.zip64EndOfCentralSize = this.reader.readInt(8)), - this.reader.skip(4), - (this.diskNumber = this.reader.readInt(4)), - (this.diskWithCentralDirStart = this.reader.readInt(4)), - (this.centralDirRecordsOnThisDisk = this.reader.readInt(8)), - (this.centralDirRecords = this.reader.readInt(8)), - (this.centralDirSize = this.reader.readInt(8)), - (this.centralDirOffset = this.reader.readInt(8)), - (this.zip64ExtensibleData = {}); - for (var e, t, r, n = this.zip64EndOfCentralSize - 44; 0 < n; ) - (e = this.reader.readInt(2)), - (t = this.reader.readInt(4)), - (r = this.reader.readData(t)), - (this.zip64ExtensibleData[e] = { - id: e, - length: t, - value: r, - }); - }, - readBlockZip64EndOfCentralLocator: function () { - if ( - ((this.diskWithZip64CentralDirStart = this.reader.readInt(4)), - (this.relativeOffsetEndOfZip64CentralDir = - this.reader.readInt(8)), - (this.disksCount = this.reader.readInt(4)), - 1 < this.disksCount) - ) - throw new Error("Multi-volumes zip are not supported"); - }, - readLocalFiles: function () { - var e, t; - for (e = 0; e < this.files.length; e++) - (t = this.files[e]), - this.reader.setIndex(t.localHeaderOffset), - this.checkSignature(s.LOCAL_FILE_HEADER), - t.readLocalPart(this.reader), - t.handleUTF8(), - t.processAttributes(); - }, - readCentralDir: function () { - var e; - for ( - this.reader.setIndex(this.centralDirOffset); - this.reader.readAndCheckSignature(s.CENTRAL_FILE_HEADER); - - ) - (e = new a( - { zip64: this.zip64 }, - this.loadOptions, - )).readCentralPart(this.reader), - this.files.push(e); - if ( - this.centralDirRecords !== this.files.length && - 0 !== this.centralDirRecords && - 0 === this.files.length - ) - throw new Error( - "Corrupted zip or bug: expected " + - this.centralDirRecords + - " records in central dir, got " + - this.files.length, - ); - }, - readEndOfCentral: function () { - var e = this.reader.lastIndexOfSignature(s.CENTRAL_DIRECTORY_END); - if (e < 0) - throw !this.isSignature(0, s.LOCAL_FILE_HEADER) - ? new Error( - "Can't find end of central directory : is this a zip file ? If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html", - ) - : new Error( - "Corrupted zip: can't find end of central directory", - ); - this.reader.setIndex(e); - var t = e; - if ( - (this.checkSignature(s.CENTRAL_DIRECTORY_END), - this.readBlockEndOfCentral(), - this.diskNumber === i.MAX_VALUE_16BITS || - this.diskWithCentralDirStart === i.MAX_VALUE_16BITS || - this.centralDirRecordsOnThisDisk === i.MAX_VALUE_16BITS || - this.centralDirRecords === i.MAX_VALUE_16BITS || - this.centralDirSize === i.MAX_VALUE_32BITS || - this.centralDirOffset === i.MAX_VALUE_32BITS) - ) { - if ( - ((this.zip64 = !0), - (e = this.reader.lastIndexOfSignature( - s.ZIP64_CENTRAL_DIRECTORY_LOCATOR, - )) < 0) - ) - throw new Error( - "Corrupted zip: can't find the ZIP64 end of central directory locator", - ); - if ( - (this.reader.setIndex(e), - this.checkSignature(s.ZIP64_CENTRAL_DIRECTORY_LOCATOR), - this.readBlockZip64EndOfCentralLocator(), - !this.isSignature( - this.relativeOffsetEndOfZip64CentralDir, - s.ZIP64_CENTRAL_DIRECTORY_END, - ) && - ((this.relativeOffsetEndOfZip64CentralDir = - this.reader.lastIndexOfSignature( - s.ZIP64_CENTRAL_DIRECTORY_END, - )), - this.relativeOffsetEndOfZip64CentralDir < 0)) - ) - throw new Error( - "Corrupted zip: can't find the ZIP64 end of central directory", - ); - this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir), - this.checkSignature(s.ZIP64_CENTRAL_DIRECTORY_END), - this.readBlockZip64EndOfCentral(); - } - var r = this.centralDirOffset + this.centralDirSize; - this.zip64 && ((r += 20), (r += 12 + this.zip64EndOfCentralSize)); - var n = t - r; - if (0 < n) - this.isSignature(t, s.CENTRAL_FILE_HEADER) || - (this.reader.zero = n); - else if (n < 0) - throw new Error( - "Corrupted zip: missing " + Math.abs(n) + " bytes.", - ); - }, - prepareReader: function (e) { - this.reader = n(e); - }, - load: function (e) { - this.prepareReader(e), - this.readEndOfCentral(), - this.readCentralDir(), - this.readLocalFiles(); - }, - }), - (t.exports = h); - }, - { - "./reader/readerFor": 22, - "./signature": 23, - "./support": 30, - "./utils": 32, - "./zipEntry": 34, - }, - ], - 34: [ - function (e, t, r) { - "use strict"; - var n = e("./reader/readerFor"), - s = e("./utils"), - i = e("./compressedObject"), - a = e("./crc32"), - o = e("./utf8"), - h = e("./compressions"), - u = e("./support"); - function l(e, t) { - (this.options = e), (this.loadOptions = t); - } - (l.prototype = { - isEncrypted: function () { - return 1 == (1 & this.bitFlag); - }, - useUTF8: function () { - return 2048 == (2048 & this.bitFlag); - }, - readLocalPart: function (e) { - var t, r; - if ( - (e.skip(22), - (this.fileNameLength = e.readInt(2)), - (r = e.readInt(2)), - (this.fileName = e.readData(this.fileNameLength)), - e.skip(r), - -1 === this.compressedSize || -1 === this.uncompressedSize) - ) - throw new Error( - "Bug or corrupted zip : didn't get enough information from the central directory (compressedSize === -1 || uncompressedSize === -1)", - ); - if ( - null === - (t = (function (e) { - for (var t in h) - if ( - Object.prototype.hasOwnProperty.call(h, t) && - h[t].magic === e - ) - return h[t]; - return null; - })(this.compressionMethod)) - ) - throw new Error( - "Corrupted zip : compression " + - s.pretty(this.compressionMethod) + - " unknown (inner file : " + - s.transformTo("string", this.fileName) + - ")", - ); - this.decompressed = new i( - this.compressedSize, - this.uncompressedSize, - this.crc32, - t, - e.readData(this.compressedSize), - ); - }, - readCentralPart: function (e) { - (this.versionMadeBy = e.readInt(2)), - e.skip(2), - (this.bitFlag = e.readInt(2)), - (this.compressionMethod = e.readString(2)), - (this.date = e.readDate()), - (this.crc32 = e.readInt(4)), - (this.compressedSize = e.readInt(4)), - (this.uncompressedSize = e.readInt(4)); - var t = e.readInt(2); - if ( - ((this.extraFieldsLength = e.readInt(2)), - (this.fileCommentLength = e.readInt(2)), - (this.diskNumberStart = e.readInt(2)), - (this.internalFileAttributes = e.readInt(2)), - (this.externalFileAttributes = e.readInt(4)), - (this.localHeaderOffset = e.readInt(4)), - this.isEncrypted()) - ) - throw new Error("Encrypted zip are not supported"); - e.skip(t), - this.readExtraFields(e), - this.parseZIP64ExtraField(e), - (this.fileComment = e.readData(this.fileCommentLength)); - }, - processAttributes: function () { - (this.unixPermissions = null), (this.dosPermissions = null); - var e = this.versionMadeBy >> 8; - (this.dir = !!(16 & this.externalFileAttributes)), - 0 == e && - (this.dosPermissions = 63 & this.externalFileAttributes), - 3 == e && - (this.unixPermissions = - (this.externalFileAttributes >> 16) & 65535), - this.dir || - "/" !== this.fileNameStr.slice(-1) || - (this.dir = !0); - }, - parseZIP64ExtraField: function () { - if (this.extraFields[1]) { - var e = n(this.extraFields[1].value); - this.uncompressedSize === s.MAX_VALUE_32BITS && - (this.uncompressedSize = e.readInt(8)), - this.compressedSize === s.MAX_VALUE_32BITS && - (this.compressedSize = e.readInt(8)), - this.localHeaderOffset === s.MAX_VALUE_32BITS && - (this.localHeaderOffset = e.readInt(8)), - this.diskNumberStart === s.MAX_VALUE_32BITS && - (this.diskNumberStart = e.readInt(4)); - } - }, - readExtraFields: function (e) { - var t, - r, - n, - i = e.index + this.extraFieldsLength; - for ( - this.extraFields || (this.extraFields = {}); - e.index + 4 < i; - - ) - (t = e.readInt(2)), - (r = e.readInt(2)), - (n = e.readData(r)), - (this.extraFields[t] = { id: t, length: r, value: n }); - e.setIndex(i); - }, - handleUTF8: function () { - var e = u.uint8array ? "uint8array" : "array"; - if (this.useUTF8()) - (this.fileNameStr = o.utf8decode(this.fileName)), - (this.fileCommentStr = o.utf8decode(this.fileComment)); - else { - var t = this.findExtraFieldUnicodePath(); - if (null !== t) this.fileNameStr = t; - else { - var r = s.transformTo(e, this.fileName); - this.fileNameStr = this.loadOptions.decodeFileName(r); - } - var n = this.findExtraFieldUnicodeComment(); - if (null !== n) this.fileCommentStr = n; - else { - var i = s.transformTo(e, this.fileComment); - this.fileCommentStr = this.loadOptions.decodeFileName(i); - } - } - }, - findExtraFieldUnicodePath: function () { - var e = this.extraFields[28789]; - if (e) { - var t = n(e.value); - return 1 !== t.readInt(1) - ? null - : a(this.fileName) !== t.readInt(4) - ? null - : o.utf8decode(t.readData(e.length - 5)); - } - return null; - }, - findExtraFieldUnicodeComment: function () { - var e = this.extraFields[25461]; - if (e) { - var t = n(e.value); - return 1 !== t.readInt(1) - ? null - : a(this.fileComment) !== t.readInt(4) - ? null - : o.utf8decode(t.readData(e.length - 5)); - } - return null; - }, - }), - (t.exports = l); - }, - { - "./compressedObject": 2, - "./compressions": 3, - "./crc32": 4, - "./reader/readerFor": 22, - "./support": 30, - "./utf8": 31, - "./utils": 32, - }, - ], - 35: [ - function (e, t, r) { - "use strict"; - function n(e, t, r) { - (this.name = e), - (this.dir = r.dir), - (this.date = r.date), - (this.comment = r.comment), - (this.unixPermissions = r.unixPermissions), - (this.dosPermissions = r.dosPermissions), - (this._data = t), - (this._dataBinary = r.binary), - (this.options = { - compression: r.compression, - compressionOptions: r.compressionOptions, - }); - } - var s = e("./stream/StreamHelper"), - i = e("./stream/DataWorker"), - a = e("./utf8"), - o = e("./compressedObject"), - h = e("./stream/GenericWorker"); - n.prototype = { - internalStream: function (e) { - var t = null, - r = "string"; - try { - if (!e) throw new Error("No output type specified."); - var n = "string" === (r = e.toLowerCase()) || "text" === r; - ("binarystring" !== r && "text" !== r) || (r = "string"), - (t = this._decompressWorker()); - var i = !this._dataBinary; - i && !n && (t = t.pipe(new a.Utf8EncodeWorker())), - !i && n && (t = t.pipe(new a.Utf8DecodeWorker())); - } catch (e) { - (t = new h("error")).error(e); - } - return new s(t, r, ""); - }, - async: function (e, t) { - return this.internalStream(e).accumulate(t); - }, - nodeStream: function (e, t) { - return this.internalStream(e || "nodebuffer").toNodejsStream(t); - }, - _compressWorker: function (e, t) { - if ( - this._data instanceof o && - this._data.compression.magic === e.magic - ) - return this._data.getCompressedWorker(); - var r = this._decompressWorker(); - return ( - this._dataBinary || (r = r.pipe(new a.Utf8EncodeWorker())), - o.createWorkerFrom(r, e, t) - ); - }, - _decompressWorker: function () { - return this._data instanceof o - ? this._data.getContentWorker() - : this._data instanceof h - ? this._data - : new i(this._data); - }, - }; - for ( - var u = [ - "asText", - "asBinary", - "asNodeBuffer", - "asUint8Array", - "asArrayBuffer", - ], - l = function () { - throw new Error( - "This method has been removed in JSZip 3.0, please check the upgrade guide.", - ); - }, - f = 0; - f < u.length; - f++ - ) - n.prototype[u[f]] = l; - t.exports = n; - }, - { - "./compressedObject": 2, - "./stream/DataWorker": 27, - "./stream/GenericWorker": 28, - "./stream/StreamHelper": 29, - "./utf8": 31, - }, - ], - 36: [ - function (e, l, t) { - (function (t) { - "use strict"; - var r, - n, - e = t.MutationObserver || t.WebKitMutationObserver; - if (e) { - var i = 0, - s = new e(u), - a = t.document.createTextNode(""); - s.observe(a, { characterData: !0 }), - (r = function () { - a.data = i = ++i % 2; - }); - } else if (t.setImmediate || void 0 === t.MessageChannel) - r = - "document" in t && - "onreadystatechange" in t.document.createElement("script") - ? function () { - var e = t.document.createElement("script"); - (e.onreadystatechange = function () { - u(), - (e.onreadystatechange = null), - e.parentNode.removeChild(e), - (e = null); - }), - t.document.documentElement.appendChild(e); - } - : function () { - setTimeout(u, 0); - }; - else { - var o = new t.MessageChannel(); - (o.port1.onmessage = u), - (r = function () { - o.port2.postMessage(0); - }); - } - var h = []; - function u() { - var e, t; - n = !0; - for (var r = h.length; r; ) { - for (t = h, h = [], e = -1; ++e < r; ) t[e](); - r = h.length; - } - n = !1; - } - l.exports = function (e) { - 1 !== h.push(e) || n || r(); - }; - }).call( - this, - "undefined" != typeof global - ? global - : "undefined" != typeof self - ? self - : "undefined" != typeof window - ? window - : {}, - ); - }, - {}, - ], - 37: [ - function (e, t, r) { - "use strict"; - var i = e("immediate"); - function u() {} - var l = {}, - s = ["REJECTED"], - a = ["FULFILLED"], - n = ["PENDING"]; - function o(e) { - if ("function" != typeof e) - throw new TypeError("resolver must be a function"); - (this.state = n), - (this.queue = []), - (this.outcome = void 0), - e !== u && d(this, e); - } - function h(e, t, r) { - (this.promise = e), - "function" == typeof t && - ((this.onFulfilled = t), - (this.callFulfilled = this.otherCallFulfilled)), - "function" == typeof r && - ((this.onRejected = r), - (this.callRejected = this.otherCallRejected)); - } - function f(t, r, n) { - i(function () { - var e; - try { - e = r(n); - } catch (e) { - return l.reject(t, e); - } - e === t - ? l.reject( - t, - new TypeError("Cannot resolve promise with itself"), - ) - : l.resolve(t, e); - }); - } - function c(e) { - var t = e && e.then; - if ( - e && - ("object" == typeof e || "function" == typeof e) && - "function" == typeof t - ) - return function () { - t.apply(e, arguments); - }; - } - function d(t, e) { - var r = !1; - function n(e) { - r || ((r = !0), l.reject(t, e)); - } - function i(e) { - r || ((r = !0), l.resolve(t, e)); - } - var s = p(function () { - e(i, n); - }); - "error" === s.status && n(s.value); - } - function p(e, t) { - var r = {}; - try { - (r.value = e(t)), (r.status = "success"); - } catch (e) { - (r.status = "error"), (r.value = e); - } - return r; - } - ((t.exports = o).prototype.finally = function (t) { - if ("function" != typeof t) return this; - var r = this.constructor; - return this.then( - function (e) { - return r.resolve(t()).then(function () { - return e; - }); - }, - function (e) { - return r.resolve(t()).then(function () { - throw e; - }); - }, - ); - }), - (o.prototype.catch = function (e) { - return this.then(null, e); - }), - (o.prototype.then = function (e, t) { - if ( - ("function" != typeof e && this.state === a) || - ("function" != typeof t && this.state === s) - ) - return this; - var r = new this.constructor(u); - this.state !== n - ? f(r, this.state === a ? e : t, this.outcome) - : this.queue.push(new h(r, e, t)); - return r; - }), - (h.prototype.callFulfilled = function (e) { - l.resolve(this.promise, e); - }), - (h.prototype.otherCallFulfilled = function (e) { - f(this.promise, this.onFulfilled, e); - }), - (h.prototype.callRejected = function (e) { - l.reject(this.promise, e); - }), - (h.prototype.otherCallRejected = function (e) { - f(this.promise, this.onRejected, e); - }), - (l.resolve = function (e, t) { - var r = p(c, t); - if ("error" === r.status) return l.reject(e, r.value); - var n = r.value; - if (n) d(e, n); - else { - (e.state = a), (e.outcome = t); - for (var i = -1, s = e.queue.length; ++i < s; ) - e.queue[i].callFulfilled(t); - } - return e; - }), - (l.reject = function (e, t) { - (e.state = s), (e.outcome = t); - for (var r = -1, n = e.queue.length; ++r < n; ) - e.queue[r].callRejected(t); - return e; - }), - (o.resolve = function (e) { - if (e instanceof this) return e; - return l.resolve(new this(u), e); - }), - (o.reject = function (e) { - var t = new this(u); - return l.reject(t, e); - }), - (o.all = function (e) { - var r = this; - if ("[object Array]" !== Object.prototype.toString.call(e)) - return this.reject(new TypeError("must be an array")); - var n = e.length, - i = !1; - if (!n) return this.resolve([]); - var s = new Array(n), - a = 0, - t = -1, - o = new this(u); - for (; ++t < n; ) h(e[t], t); - return o; - function h(e, t) { - r.resolve(e).then( - function (e) { - (s[t] = e), ++a !== n || i || ((i = !0), l.resolve(o, s)); - }, - function (e) { - i || ((i = !0), l.reject(o, e)); - }, - ); - } - }), - (o.race = function (e) { - var t = this; - if ("[object Array]" !== Object.prototype.toString.call(e)) - return this.reject(new TypeError("must be an array")); - var r = e.length, - n = !1; - if (!r) return this.resolve([]); - var i = -1, - s = new this(u); - for (; ++i < r; ) - (a = e[i]), - t.resolve(a).then( - function (e) { - n || ((n = !0), l.resolve(s, e)); - }, - function (e) { - n || ((n = !0), l.reject(s, e)); - }, - ); - var a; - return s; - }); - }, - { immediate: 36 }, - ], - 38: [ - function (e, t, r) { - "use strict"; - var n = {}; - (0, e("./lib/utils/common").assign)( - n, - e("./lib/deflate"), - e("./lib/inflate"), - e("./lib/zlib/constants"), - ), - (t.exports = n); - }, - { - "./lib/deflate": 39, - "./lib/inflate": 40, - "./lib/utils/common": 41, - "./lib/zlib/constants": 44, - }, - ], - 39: [ - function (e, t, r) { - "use strict"; - var a = e("./zlib/deflate"), - o = e("./utils/common"), - h = e("./utils/strings"), - i = e("./zlib/messages"), - s = e("./zlib/zstream"), - u = Object.prototype.toString, - l = 0, - f = -1, - c = 0, - d = 8; - function p(e) { - if (!(this instanceof p)) return new p(e); - this.options = o.assign( - { - level: f, - method: d, - chunkSize: 16384, - windowBits: 15, - memLevel: 8, - strategy: c, - to: "", - }, - e || {}, - ); - var t = this.options; - t.raw && 0 < t.windowBits - ? (t.windowBits = -t.windowBits) - : t.gzip && - 0 < t.windowBits && - t.windowBits < 16 && - (t.windowBits += 16), - (this.err = 0), - (this.msg = ""), - (this.ended = !1), - (this.chunks = []), - (this.strm = new s()), - (this.strm.avail_out = 0); - var r = a.deflateInit2( - this.strm, - t.level, - t.method, - t.windowBits, - t.memLevel, - t.strategy, - ); - if (r !== l) throw new Error(i[r]); - if ( - (t.header && a.deflateSetHeader(this.strm, t.header), - t.dictionary) - ) { - var n; - if ( - ((n = - "string" == typeof t.dictionary - ? h.string2buf(t.dictionary) - : "[object ArrayBuffer]" === u.call(t.dictionary) - ? new Uint8Array(t.dictionary) - : t.dictionary), - (r = a.deflateSetDictionary(this.strm, n)) !== l) - ) - throw new Error(i[r]); - this._dict_set = !0; - } - } - function n(e, t) { - var r = new p(t); - if ((r.push(e, !0), r.err)) throw r.msg || i[r.err]; - return r.result; - } - (p.prototype.push = function (e, t) { - var r, - n, - i = this.strm, - s = this.options.chunkSize; - if (this.ended) return !1; - (n = t === ~~t ? t : !0 === t ? 4 : 0), - "string" == typeof e - ? (i.input = h.string2buf(e)) - : "[object ArrayBuffer]" === u.call(e) - ? (i.input = new Uint8Array(e)) - : (i.input = e), - (i.next_in = 0), - (i.avail_in = i.input.length); - do { - if ( - (0 === i.avail_out && - ((i.output = new o.Buf8(s)), - (i.next_out = 0), - (i.avail_out = s)), - 1 !== (r = a.deflate(i, n)) && r !== l) - ) - return this.onEnd(r), !(this.ended = !0); - (0 !== i.avail_out && - (0 !== i.avail_in || (4 !== n && 2 !== n))) || - ("string" === this.options.to - ? this.onData( - h.buf2binstring(o.shrinkBuf(i.output, i.next_out)), - ) - : this.onData(o.shrinkBuf(i.output, i.next_out))); - } while ((0 < i.avail_in || 0 === i.avail_out) && 1 !== r); - return 4 === n - ? ((r = a.deflateEnd(this.strm)), - this.onEnd(r), - (this.ended = !0), - r === l) - : 2 !== n || (this.onEnd(l), !(i.avail_out = 0)); - }), - (p.prototype.onData = function (e) { - this.chunks.push(e); - }), - (p.prototype.onEnd = function (e) { - e === l && - ("string" === this.options.to - ? (this.result = this.chunks.join("")) - : (this.result = o.flattenChunks(this.chunks))), - (this.chunks = []), - (this.err = e), - (this.msg = this.strm.msg); - }), - (r.Deflate = p), - (r.deflate = n), - (r.deflateRaw = function (e, t) { - return ((t = t || {}).raw = !0), n(e, t); - }), - (r.gzip = function (e, t) { - return ((t = t || {}).gzip = !0), n(e, t); - }); - }, - { - "./utils/common": 41, - "./utils/strings": 42, - "./zlib/deflate": 46, - "./zlib/messages": 51, - "./zlib/zstream": 53, - }, - ], - 40: [ - function (e, t, r) { - "use strict"; - var c = e("./zlib/inflate"), - d = e("./utils/common"), - p = e("./utils/strings"), - m = e("./zlib/constants"), - n = e("./zlib/messages"), - i = e("./zlib/zstream"), - s = e("./zlib/gzheader"), - _ = Object.prototype.toString; - function a(e) { - if (!(this instanceof a)) return new a(e); - this.options = d.assign( - { chunkSize: 16384, windowBits: 0, to: "" }, - e || {}, - ); - var t = this.options; - t.raw && - 0 <= t.windowBits && - t.windowBits < 16 && - ((t.windowBits = -t.windowBits), - 0 === t.windowBits && (t.windowBits = -15)), - !(0 <= t.windowBits && t.windowBits < 16) || - (e && e.windowBits) || - (t.windowBits += 32), - 15 < t.windowBits && - t.windowBits < 48 && - 0 == (15 & t.windowBits) && - (t.windowBits |= 15), - (this.err = 0), - (this.msg = ""), - (this.ended = !1), - (this.chunks = []), - (this.strm = new i()), - (this.strm.avail_out = 0); - var r = c.inflateInit2(this.strm, t.windowBits); - if (r !== m.Z_OK) throw new Error(n[r]); - (this.header = new s()), c.inflateGetHeader(this.strm, this.header); - } - function o(e, t) { - var r = new a(t); - if ((r.push(e, !0), r.err)) throw r.msg || n[r.err]; - return r.result; - } - (a.prototype.push = function (e, t) { - var r, - n, - i, - s, - a, - o, - h = this.strm, - u = this.options.chunkSize, - l = this.options.dictionary, - f = !1; - if (this.ended) return !1; - (n = t === ~~t ? t : !0 === t ? m.Z_FINISH : m.Z_NO_FLUSH), - "string" == typeof e - ? (h.input = p.binstring2buf(e)) - : "[object ArrayBuffer]" === _.call(e) - ? (h.input = new Uint8Array(e)) - : (h.input = e), - (h.next_in = 0), - (h.avail_in = h.input.length); - do { - if ( - (0 === h.avail_out && - ((h.output = new d.Buf8(u)), - (h.next_out = 0), - (h.avail_out = u)), - (r = c.inflate(h, m.Z_NO_FLUSH)) === m.Z_NEED_DICT && - l && - ((o = - "string" == typeof l - ? p.string2buf(l) - : "[object ArrayBuffer]" === _.call(l) - ? new Uint8Array(l) - : l), - (r = c.inflateSetDictionary(this.strm, o))), - r === m.Z_BUF_ERROR && !0 === f && ((r = m.Z_OK), (f = !1)), - r !== m.Z_STREAM_END && r !== m.Z_OK) - ) - return this.onEnd(r), !(this.ended = !0); - h.next_out && - ((0 !== h.avail_out && - r !== m.Z_STREAM_END && - (0 !== h.avail_in || - (n !== m.Z_FINISH && n !== m.Z_SYNC_FLUSH))) || - ("string" === this.options.to - ? ((i = p.utf8border(h.output, h.next_out)), - (s = h.next_out - i), - (a = p.buf2string(h.output, i)), - (h.next_out = s), - (h.avail_out = u - s), - s && d.arraySet(h.output, h.output, i, s, 0), - this.onData(a)) - : this.onData(d.shrinkBuf(h.output, h.next_out)))), - 0 === h.avail_in && 0 === h.avail_out && (f = !0); - } while ( - (0 < h.avail_in || 0 === h.avail_out) && - r !== m.Z_STREAM_END - ); - return ( - r === m.Z_STREAM_END && (n = m.Z_FINISH), - n === m.Z_FINISH - ? ((r = c.inflateEnd(this.strm)), - this.onEnd(r), - (this.ended = !0), - r === m.Z_OK) - : n !== m.Z_SYNC_FLUSH || - (this.onEnd(m.Z_OK), !(h.avail_out = 0)) - ); - }), - (a.prototype.onData = function (e) { - this.chunks.push(e); - }), - (a.prototype.onEnd = function (e) { - e === m.Z_OK && - ("string" === this.options.to - ? (this.result = this.chunks.join("")) - : (this.result = d.flattenChunks(this.chunks))), - (this.chunks = []), - (this.err = e), - (this.msg = this.strm.msg); - }), - (r.Inflate = a), - (r.inflate = o), - (r.inflateRaw = function (e, t) { - return ((t = t || {}).raw = !0), o(e, t); - }), - (r.ungzip = o); - }, - { - "./utils/common": 41, - "./utils/strings": 42, - "./zlib/constants": 44, - "./zlib/gzheader": 47, - "./zlib/inflate": 49, - "./zlib/messages": 51, - "./zlib/zstream": 53, - }, - ], - 41: [ - function (e, t, r) { - "use strict"; - var n = - "undefined" != typeof Uint8Array && - "undefined" != typeof Uint16Array && - "undefined" != typeof Int32Array; - (r.assign = function (e) { - for (var t = Array.prototype.slice.call(arguments, 1); t.length; ) { - var r = t.shift(); - if (r) { - if ("object" != typeof r) - throw new TypeError(r + "must be non-object"); - for (var n in r) r.hasOwnProperty(n) && (e[n] = r[n]); - } - } - return e; - }), - (r.shrinkBuf = function (e, t) { - return e.length === t - ? e - : e.subarray - ? e.subarray(0, t) - : ((e.length = t), e); - }); - var i = { - arraySet: function (e, t, r, n, i) { - if (t.subarray && e.subarray) e.set(t.subarray(r, r + n), i); - else for (var s = 0; s < n; s++) e[i + s] = t[r + s]; - }, - flattenChunks: function (e) { - var t, r, n, i, s, a; - for (t = n = 0, r = e.length; t < r; t++) n += e[t].length; - for (a = new Uint8Array(n), t = i = 0, r = e.length; t < r; t++) - (s = e[t]), a.set(s, i), (i += s.length); - return a; - }, - }, - s = { - arraySet: function (e, t, r, n, i) { - for (var s = 0; s < n; s++) e[i + s] = t[r + s]; - }, - flattenChunks: function (e) { - return [].concat.apply([], e); - }, - }; - (r.setTyped = function (e) { - e - ? ((r.Buf8 = Uint8Array), - (r.Buf16 = Uint16Array), - (r.Buf32 = Int32Array), - r.assign(r, i)) - : ((r.Buf8 = Array), - (r.Buf16 = Array), - (r.Buf32 = Array), - r.assign(r, s)); - }), - r.setTyped(n); - }, - {}, - ], - 42: [ - function (e, t, r) { - "use strict"; - var h = e("./common"), - i = !0, - s = !0; - try { - String.fromCharCode.apply(null, [0]); - } catch (e) { - i = !1; - } - try { - String.fromCharCode.apply(null, new Uint8Array(1)); - } catch (e) { - s = !1; - } - for (var u = new h.Buf8(256), n = 0; n < 256; n++) - u[n] = - 252 <= n - ? 6 - : 248 <= n - ? 5 - : 240 <= n - ? 4 - : 224 <= n - ? 3 - : 192 <= n - ? 2 - : 1; - function l(e, t) { - if (t < 65537 && ((e.subarray && s) || (!e.subarray && i))) - return String.fromCharCode.apply(null, h.shrinkBuf(e, t)); - for (var r = "", n = 0; n < t; n++) r += String.fromCharCode(e[n]); - return r; - } - (u[254] = u[254] = 1), - (r.string2buf = function (e) { - var t, - r, - n, - i, - s, - a = e.length, - o = 0; - for (i = 0; i < a; i++) - 55296 == (64512 & (r = e.charCodeAt(i))) && - i + 1 < a && - 56320 == (64512 & (n = e.charCodeAt(i + 1))) && - ((r = 65536 + ((r - 55296) << 10) + (n - 56320)), i++), - (o += r < 128 ? 1 : r < 2048 ? 2 : r < 65536 ? 3 : 4); - for (t = new h.Buf8(o), i = s = 0; s < o; i++) - 55296 == (64512 & (r = e.charCodeAt(i))) && - i + 1 < a && - 56320 == (64512 & (n = e.charCodeAt(i + 1))) && - ((r = 65536 + ((r - 55296) << 10) + (n - 56320)), i++), - r < 128 - ? (t[s++] = r) - : (r < 2048 - ? (t[s++] = 192 | (r >>> 6)) - : (r < 65536 - ? (t[s++] = 224 | (r >>> 12)) - : ((t[s++] = 240 | (r >>> 18)), - (t[s++] = 128 | ((r >>> 12) & 63))), - (t[s++] = 128 | ((r >>> 6) & 63))), - (t[s++] = 128 | (63 & r))); - return t; - }), - (r.buf2binstring = function (e) { - return l(e, e.length); - }), - (r.binstring2buf = function (e) { - for ( - var t = new h.Buf8(e.length), r = 0, n = t.length; - r < n; - r++ - ) - t[r] = e.charCodeAt(r); - return t; - }), - (r.buf2string = function (e, t) { - var r, - n, - i, - s, - a = t || e.length, - o = new Array(2 * a); - for (r = n = 0; r < a; ) - if ((i = e[r++]) < 128) o[n++] = i; - else if (4 < (s = u[i])) (o[n++] = 65533), (r += s - 1); - else { - for (i &= 2 === s ? 31 : 3 === s ? 15 : 7; 1 < s && r < a; ) - (i = (i << 6) | (63 & e[r++])), s--; - 1 < s - ? (o[n++] = 65533) - : i < 65536 - ? (o[n++] = i) - : ((i -= 65536), - (o[n++] = 55296 | ((i >> 10) & 1023)), - (o[n++] = 56320 | (1023 & i))); - } - return l(o, n); - }), - (r.utf8border = function (e, t) { - var r; - for ( - (t = t || e.length) > e.length && (t = e.length), r = t - 1; - 0 <= r && 128 == (192 & e[r]); - - ) - r--; - return r < 0 ? t : 0 === r ? t : r + u[e[r]] > t ? r : t; - }); - }, - { "./common": 41 }, - ], - 43: [ - function (e, t, r) { - "use strict"; - t.exports = function (e, t, r, n) { - for ( - var i = (65535 & e) | 0, s = ((e >>> 16) & 65535) | 0, a = 0; - 0 !== r; - - ) { - for ( - r -= a = 2e3 < r ? 2e3 : r; - (s = (s + (i = (i + t[n++]) | 0)) | 0), --a; - - ); - (i %= 65521), (s %= 65521); - } - return i | (s << 16) | 0; - }; - }, - {}, - ], - 44: [ - function (e, t, r) { - "use strict"; - t.exports = { - Z_NO_FLUSH: 0, - Z_PARTIAL_FLUSH: 1, - Z_SYNC_FLUSH: 2, - Z_FULL_FLUSH: 3, - Z_FINISH: 4, - Z_BLOCK: 5, - Z_TREES: 6, - Z_OK: 0, - Z_STREAM_END: 1, - Z_NEED_DICT: 2, - Z_ERRNO: -1, - Z_STREAM_ERROR: -2, - Z_DATA_ERROR: -3, - Z_BUF_ERROR: -5, - Z_NO_COMPRESSION: 0, - Z_BEST_SPEED: 1, - Z_BEST_COMPRESSION: 9, - Z_DEFAULT_COMPRESSION: -1, - Z_FILTERED: 1, - Z_HUFFMAN_ONLY: 2, - Z_RLE: 3, - Z_FIXED: 4, - Z_DEFAULT_STRATEGY: 0, - Z_BINARY: 0, - Z_TEXT: 1, - Z_UNKNOWN: 2, - Z_DEFLATED: 8, - }; - }, - {}, - ], - 45: [ - function (e, t, r) { - "use strict"; - var o = (function () { - for (var e, t = [], r = 0; r < 256; r++) { - e = r; - for (var n = 0; n < 8; n++) - e = 1 & e ? 3988292384 ^ (e >>> 1) : e >>> 1; - t[r] = e; - } - return t; - })(); - t.exports = function (e, t, r, n) { - var i = o, - s = n + r; - e ^= -1; - for (var a = n; a < s; a++) e = (e >>> 8) ^ i[255 & (e ^ t[a])]; - return -1 ^ e; - }; - }, - {}, - ], - 46: [ - function (e, t, r) { - "use strict"; - var h, - c = e("../utils/common"), - u = e("./trees"), - d = e("./adler32"), - p = e("./crc32"), - n = e("./messages"), - l = 0, - f = 4, - m = 0, - _ = -2, - g = -1, - b = 4, - i = 2, - v = 8, - y = 9, - s = 286, - a = 30, - o = 19, - w = 2 * s + 1, - k = 15, - x = 3, - S = 258, - z = S + x + 1, - C = 42, - E = 113, - A = 1, - I = 2, - O = 3, - B = 4; - function R(e, t) { - return (e.msg = n[t]), t; - } - function T(e) { - return (e << 1) - (4 < e ? 9 : 0); - } - function D(e) { - for (var t = e.length; 0 <= --t; ) e[t] = 0; - } - function F(e) { - var t = e.state, - r = t.pending; - r > e.avail_out && (r = e.avail_out), - 0 !== r && - (c.arraySet( - e.output, - t.pending_buf, - t.pending_out, - r, - e.next_out, - ), - (e.next_out += r), - (t.pending_out += r), - (e.total_out += r), - (e.avail_out -= r), - (t.pending -= r), - 0 === t.pending && (t.pending_out = 0)); - } - function N(e, t) { - u._tr_flush_block( - e, - 0 <= e.block_start ? e.block_start : -1, - e.strstart - e.block_start, - t, - ), - (e.block_start = e.strstart), - F(e.strm); - } - function U(e, t) { - e.pending_buf[e.pending++] = t; - } - function P(e, t) { - (e.pending_buf[e.pending++] = (t >>> 8) & 255), - (e.pending_buf[e.pending++] = 255 & t); - } - function L(e, t) { - var r, - n, - i = e.max_chain_length, - s = e.strstart, - a = e.prev_length, - o = e.nice_match, - h = e.strstart > e.w_size - z ? e.strstart - (e.w_size - z) : 0, - u = e.window, - l = e.w_mask, - f = e.prev, - c = e.strstart + S, - d = u[s + a - 1], - p = u[s + a]; - e.prev_length >= e.good_match && (i >>= 2), - o > e.lookahead && (o = e.lookahead); - do { - if ( - u[(r = t) + a] === p && - u[r + a - 1] === d && - u[r] === u[s] && - u[++r] === u[s + 1] - ) { - (s += 2), r++; - do {} while ( - u[++s] === u[++r] && - u[++s] === u[++r] && - u[++s] === u[++r] && - u[++s] === u[++r] && - u[++s] === u[++r] && - u[++s] === u[++r] && - u[++s] === u[++r] && - u[++s] === u[++r] && - s < c - ); - if (((n = S - (c - s)), (s = c - S), a < n)) { - if (((e.match_start = t), o <= (a = n))) break; - (d = u[s + a - 1]), (p = u[s + a]); - } - } - } while ((t = f[t & l]) > h && 0 != --i); - return a <= e.lookahead ? a : e.lookahead; - } - function j(e) { - var t, - r, - n, - i, - s, - a, - o, - h, - u, - l, - f = e.w_size; - do { - if ( - ((i = e.window_size - e.lookahead - e.strstart), - e.strstart >= f + (f - z)) - ) { - for ( - c.arraySet(e.window, e.window, f, f, 0), - e.match_start -= f, - e.strstart -= f, - e.block_start -= f, - t = r = e.hash_size; - (n = e.head[--t]), (e.head[t] = f <= n ? n - f : 0), --r; - - ); - for ( - t = r = f; - (n = e.prev[--t]), (e.prev[t] = f <= n ? n - f : 0), --r; - - ); - i += f; - } - if (0 === e.strm.avail_in) break; - if ( - ((a = e.strm), - (o = e.window), - (h = e.strstart + e.lookahead), - (u = i), - (l = void 0), - (l = a.avail_in), - u < l && (l = u), - (r = - 0 === l - ? 0 - : ((a.avail_in -= l), - c.arraySet(o, a.input, a.next_in, l, h), - 1 === a.state.wrap - ? (a.adler = d(a.adler, o, l, h)) - : 2 === a.state.wrap && (a.adler = p(a.adler, o, l, h)), - (a.next_in += l), - (a.total_in += l), - l)), - (e.lookahead += r), - e.lookahead + e.insert >= x) - ) - for ( - s = e.strstart - e.insert, - e.ins_h = e.window[s], - e.ins_h = - ((e.ins_h << e.hash_shift) ^ e.window[s + 1]) & - e.hash_mask; - e.insert && - ((e.ins_h = - ((e.ins_h << e.hash_shift) ^ e.window[s + x - 1]) & - e.hash_mask), - (e.prev[s & e.w_mask] = e.head[e.ins_h]), - (e.head[e.ins_h] = s), - s++, - e.insert--, - !(e.lookahead + e.insert < x)); - - ); - } while (e.lookahead < z && 0 !== e.strm.avail_in); - } - function Z(e, t) { - for (var r, n; ; ) { - if (e.lookahead < z) { - if ((j(e), e.lookahead < z && t === l)) return A; - if (0 === e.lookahead) break; - } - if ( - ((r = 0), - e.lookahead >= x && - ((e.ins_h = - ((e.ins_h << e.hash_shift) ^ e.window[e.strstart + x - 1]) & - e.hash_mask), - (r = e.prev[e.strstart & e.w_mask] = e.head[e.ins_h]), - (e.head[e.ins_h] = e.strstart)), - 0 !== r && - e.strstart - r <= e.w_size - z && - (e.match_length = L(e, r)), - e.match_length >= x) - ) - if ( - ((n = u._tr_tally( - e, - e.strstart - e.match_start, - e.match_length - x, - )), - (e.lookahead -= e.match_length), - e.match_length <= e.max_lazy_match && e.lookahead >= x) - ) { - for ( - e.match_length--; - e.strstart++, - (e.ins_h = - ((e.ins_h << e.hash_shift) ^ - e.window[e.strstart + x - 1]) & - e.hash_mask), - (r = e.prev[e.strstart & e.w_mask] = e.head[e.ins_h]), - (e.head[e.ins_h] = e.strstart), - 0 != --e.match_length; - - ); - e.strstart++; - } else - (e.strstart += e.match_length), - (e.match_length = 0), - (e.ins_h = e.window[e.strstart]), - (e.ins_h = - ((e.ins_h << e.hash_shift) ^ e.window[e.strstart + 1]) & - e.hash_mask); - else - (n = u._tr_tally(e, 0, e.window[e.strstart])), - e.lookahead--, - e.strstart++; - if (n && (N(e, !1), 0 === e.strm.avail_out)) return A; - } - return ( - (e.insert = e.strstart < x - 1 ? e.strstart : x - 1), - t === f - ? (N(e, !0), 0 === e.strm.avail_out ? O : B) - : e.last_lit && (N(e, !1), 0 === e.strm.avail_out) - ? A - : I - ); - } - function W(e, t) { - for (var r, n, i; ; ) { - if (e.lookahead < z) { - if ((j(e), e.lookahead < z && t === l)) return A; - if (0 === e.lookahead) break; - } - if ( - ((r = 0), - e.lookahead >= x && - ((e.ins_h = - ((e.ins_h << e.hash_shift) ^ e.window[e.strstart + x - 1]) & - e.hash_mask), - (r = e.prev[e.strstart & e.w_mask] = e.head[e.ins_h]), - (e.head[e.ins_h] = e.strstart)), - (e.prev_length = e.match_length), - (e.prev_match = e.match_start), - (e.match_length = x - 1), - 0 !== r && - e.prev_length < e.max_lazy_match && - e.strstart - r <= e.w_size - z && - ((e.match_length = L(e, r)), - e.match_length <= 5 && - (1 === e.strategy || - (e.match_length === x && - 4096 < e.strstart - e.match_start)) && - (e.match_length = x - 1)), - e.prev_length >= x && e.match_length <= e.prev_length) - ) { - for ( - i = e.strstart + e.lookahead - x, - n = u._tr_tally( - e, - e.strstart - 1 - e.prev_match, - e.prev_length - x, - ), - e.lookahead -= e.prev_length - 1, - e.prev_length -= 2; - ++e.strstart <= i && - ((e.ins_h = - ((e.ins_h << e.hash_shift) ^ - e.window[e.strstart + x - 1]) & - e.hash_mask), - (r = e.prev[e.strstart & e.w_mask] = e.head[e.ins_h]), - (e.head[e.ins_h] = e.strstart)), - 0 != --e.prev_length; - - ); - if ( - ((e.match_available = 0), - (e.match_length = x - 1), - e.strstart++, - n && (N(e, !1), 0 === e.strm.avail_out)) - ) - return A; - } else if (e.match_available) { - if ( - ((n = u._tr_tally(e, 0, e.window[e.strstart - 1])) && - N(e, !1), - e.strstart++, - e.lookahead--, - 0 === e.strm.avail_out) - ) - return A; - } else (e.match_available = 1), e.strstart++, e.lookahead--; - } - return ( - e.match_available && - ((n = u._tr_tally(e, 0, e.window[e.strstart - 1])), - (e.match_available = 0)), - (e.insert = e.strstart < x - 1 ? e.strstart : x - 1), - t === f - ? (N(e, !0), 0 === e.strm.avail_out ? O : B) - : e.last_lit && (N(e, !1), 0 === e.strm.avail_out) - ? A - : I - ); - } - function M(e, t, r, n, i) { - (this.good_length = e), - (this.max_lazy = t), - (this.nice_length = r), - (this.max_chain = n), - (this.func = i); - } - function H() { - (this.strm = null), - (this.status = 0), - (this.pending_buf = null), - (this.pending_buf_size = 0), - (this.pending_out = 0), - (this.pending = 0), - (this.wrap = 0), - (this.gzhead = null), - (this.gzindex = 0), - (this.method = v), - (this.last_flush = -1), - (this.w_size = 0), - (this.w_bits = 0), - (this.w_mask = 0), - (this.window = null), - (this.window_size = 0), - (this.prev = null), - (this.head = null), - (this.ins_h = 0), - (this.hash_size = 0), - (this.hash_bits = 0), - (this.hash_mask = 0), - (this.hash_shift = 0), - (this.block_start = 0), - (this.match_length = 0), - (this.prev_match = 0), - (this.match_available = 0), - (this.strstart = 0), - (this.match_start = 0), - (this.lookahead = 0), - (this.prev_length = 0), - (this.max_chain_length = 0), - (this.max_lazy_match = 0), - (this.level = 0), - (this.strategy = 0), - (this.good_match = 0), - (this.nice_match = 0), - (this.dyn_ltree = new c.Buf16(2 * w)), - (this.dyn_dtree = new c.Buf16(2 * (2 * a + 1))), - (this.bl_tree = new c.Buf16(2 * (2 * o + 1))), - D(this.dyn_ltree), - D(this.dyn_dtree), - D(this.bl_tree), - (this.l_desc = null), - (this.d_desc = null), - (this.bl_desc = null), - (this.bl_count = new c.Buf16(k + 1)), - (this.heap = new c.Buf16(2 * s + 1)), - D(this.heap), - (this.heap_len = 0), - (this.heap_max = 0), - (this.depth = new c.Buf16(2 * s + 1)), - D(this.depth), - (this.l_buf = 0), - (this.lit_bufsize = 0), - (this.last_lit = 0), - (this.d_buf = 0), - (this.opt_len = 0), - (this.static_len = 0), - (this.matches = 0), - (this.insert = 0), - (this.bi_buf = 0), - (this.bi_valid = 0); - } - function G(e) { - var t; - return e && e.state - ? ((e.total_in = e.total_out = 0), - (e.data_type = i), - ((t = e.state).pending = 0), - (t.pending_out = 0), - t.wrap < 0 && (t.wrap = -t.wrap), - (t.status = t.wrap ? C : E), - (e.adler = 2 === t.wrap ? 0 : 1), - (t.last_flush = l), - u._tr_init(t), - m) - : R(e, _); - } - function K(e) { - var t = G(e); - return ( - t === m && - (function (e) { - (e.window_size = 2 * e.w_size), - D(e.head), - (e.max_lazy_match = h[e.level].max_lazy), - (e.good_match = h[e.level].good_length), - (e.nice_match = h[e.level].nice_length), - (e.max_chain_length = h[e.level].max_chain), - (e.strstart = 0), - (e.block_start = 0), - (e.lookahead = 0), - (e.insert = 0), - (e.match_length = e.prev_length = x - 1), - (e.match_available = 0), - (e.ins_h = 0); - })(e.state), - t - ); - } - function Y(e, t, r, n, i, s) { - if (!e) return _; - var a = 1; - if ( - (t === g && (t = 6), - n < 0 ? ((a = 0), (n = -n)) : 15 < n && ((a = 2), (n -= 16)), - i < 1 || - y < i || - r !== v || - n < 8 || - 15 < n || - t < 0 || - 9 < t || - s < 0 || - b < s) - ) - return R(e, _); - 8 === n && (n = 9); - var o = new H(); - return ( - ((e.state = o).strm = e), - (o.wrap = a), - (o.gzhead = null), - (o.w_bits = n), - (o.w_size = 1 << o.w_bits), - (o.w_mask = o.w_size - 1), - (o.hash_bits = i + 7), - (o.hash_size = 1 << o.hash_bits), - (o.hash_mask = o.hash_size - 1), - (o.hash_shift = ~~((o.hash_bits + x - 1) / x)), - (o.window = new c.Buf8(2 * o.w_size)), - (o.head = new c.Buf16(o.hash_size)), - (o.prev = new c.Buf16(o.w_size)), - (o.lit_bufsize = 1 << (i + 6)), - (o.pending_buf_size = 4 * o.lit_bufsize), - (o.pending_buf = new c.Buf8(o.pending_buf_size)), - (o.d_buf = 1 * o.lit_bufsize), - (o.l_buf = 3 * o.lit_bufsize), - (o.level = t), - (o.strategy = s), - (o.method = r), - K(e) - ); - } - (h = [ - new M(0, 0, 0, 0, function (e, t) { - var r = 65535; - for ( - r > e.pending_buf_size - 5 && (r = e.pending_buf_size - 5); - ; - - ) { - if (e.lookahead <= 1) { - if ((j(e), 0 === e.lookahead && t === l)) return A; - if (0 === e.lookahead) break; - } - (e.strstart += e.lookahead), (e.lookahead = 0); - var n = e.block_start + r; - if ( - (0 === e.strstart || e.strstart >= n) && - ((e.lookahead = e.strstart - n), - (e.strstart = n), - N(e, !1), - 0 === e.strm.avail_out) - ) - return A; - if ( - e.strstart - e.block_start >= e.w_size - z && - (N(e, !1), 0 === e.strm.avail_out) - ) - return A; - } - return ( - (e.insert = 0), - t === f - ? (N(e, !0), 0 === e.strm.avail_out ? O : B) - : (e.strstart > e.block_start && (N(e, !1), e.strm.avail_out), - A) - ); - }), - new M(4, 4, 8, 4, Z), - new M(4, 5, 16, 8, Z), - new M(4, 6, 32, 32, Z), - new M(4, 4, 16, 16, W), - new M(8, 16, 32, 32, W), - new M(8, 16, 128, 128, W), - new M(8, 32, 128, 256, W), - new M(32, 128, 258, 1024, W), - new M(32, 258, 258, 4096, W), - ]), - (r.deflateInit = function (e, t) { - return Y(e, t, v, 15, 8, 0); - }), - (r.deflateInit2 = Y), - (r.deflateReset = K), - (r.deflateResetKeep = G), - (r.deflateSetHeader = function (e, t) { - return e && e.state - ? 2 !== e.state.wrap - ? _ - : ((e.state.gzhead = t), m) - : _; - }), - (r.deflate = function (e, t) { - var r, n, i, s; - if (!e || !e.state || 5 < t || t < 0) return e ? R(e, _) : _; - if ( - ((n = e.state), - !e.output || - (!e.input && 0 !== e.avail_in) || - (666 === n.status && t !== f)) - ) - return R(e, 0 === e.avail_out ? -5 : _); - if ( - ((n.strm = e), - (r = n.last_flush), - (n.last_flush = t), - n.status === C) - ) - if (2 === n.wrap) - (e.adler = 0), - U(n, 31), - U(n, 139), - U(n, 8), - n.gzhead - ? (U( - n, - (n.gzhead.text ? 1 : 0) + - (n.gzhead.hcrc ? 2 : 0) + - (n.gzhead.extra ? 4 : 0) + - (n.gzhead.name ? 8 : 0) + - (n.gzhead.comment ? 16 : 0), - ), - U(n, 255 & n.gzhead.time), - U(n, (n.gzhead.time >> 8) & 255), - U(n, (n.gzhead.time >> 16) & 255), - U(n, (n.gzhead.time >> 24) & 255), - U( - n, - 9 === n.level - ? 2 - : 2 <= n.strategy || n.level < 2 - ? 4 - : 0, - ), - U(n, 255 & n.gzhead.os), - n.gzhead.extra && - n.gzhead.extra.length && - (U(n, 255 & n.gzhead.extra.length), - U(n, (n.gzhead.extra.length >> 8) & 255)), - n.gzhead.hcrc && - (e.adler = p(e.adler, n.pending_buf, n.pending, 0)), - (n.gzindex = 0), - (n.status = 69)) - : (U(n, 0), - U(n, 0), - U(n, 0), - U(n, 0), - U(n, 0), - U( - n, - 9 === n.level - ? 2 - : 2 <= n.strategy || n.level < 2 - ? 4 - : 0, - ), - U(n, 3), - (n.status = E)); - else { - var a = (v + ((n.w_bits - 8) << 4)) << 8; - (a |= - (2 <= n.strategy || n.level < 2 - ? 0 - : n.level < 6 - ? 1 - : 6 === n.level - ? 2 - : 3) << 6), - 0 !== n.strstart && (a |= 32), - (a += 31 - (a % 31)), - (n.status = E), - P(n, a), - 0 !== n.strstart && - (P(n, e.adler >>> 16), P(n, 65535 & e.adler)), - (e.adler = 1); - } - if (69 === n.status) - if (n.gzhead.extra) { - for ( - i = n.pending; - n.gzindex < (65535 & n.gzhead.extra.length) && - (n.pending !== n.pending_buf_size || - (n.gzhead.hcrc && - n.pending > i && - (e.adler = p(e.adler, n.pending_buf, n.pending - i, i)), - F(e), - (i = n.pending), - n.pending !== n.pending_buf_size)); - - ) - U(n, 255 & n.gzhead.extra[n.gzindex]), n.gzindex++; - n.gzhead.hcrc && - n.pending > i && - (e.adler = p(e.adler, n.pending_buf, n.pending - i, i)), - n.gzindex === n.gzhead.extra.length && - ((n.gzindex = 0), (n.status = 73)); - } else n.status = 73; - if (73 === n.status) - if (n.gzhead.name) { - i = n.pending; - do { - if ( - n.pending === n.pending_buf_size && - (n.gzhead.hcrc && - n.pending > i && - (e.adler = p(e.adler, n.pending_buf, n.pending - i, i)), - F(e), - (i = n.pending), - n.pending === n.pending_buf_size) - ) { - s = 1; - break; - } - (s = - n.gzindex < n.gzhead.name.length - ? 255 & n.gzhead.name.charCodeAt(n.gzindex++) - : 0), - U(n, s); - } while (0 !== s); - n.gzhead.hcrc && - n.pending > i && - (e.adler = p(e.adler, n.pending_buf, n.pending - i, i)), - 0 === s && ((n.gzindex = 0), (n.status = 91)); - } else n.status = 91; - if (91 === n.status) - if (n.gzhead.comment) { - i = n.pending; - do { - if ( - n.pending === n.pending_buf_size && - (n.gzhead.hcrc && - n.pending > i && - (e.adler = p(e.adler, n.pending_buf, n.pending - i, i)), - F(e), - (i = n.pending), - n.pending === n.pending_buf_size) - ) { - s = 1; - break; - } - (s = - n.gzindex < n.gzhead.comment.length - ? 255 & n.gzhead.comment.charCodeAt(n.gzindex++) - : 0), - U(n, s); - } while (0 !== s); - n.gzhead.hcrc && - n.pending > i && - (e.adler = p(e.adler, n.pending_buf, n.pending - i, i)), - 0 === s && (n.status = 103); - } else n.status = 103; - if ( - (103 === n.status && - (n.gzhead.hcrc - ? (n.pending + 2 > n.pending_buf_size && F(e), - n.pending + 2 <= n.pending_buf_size && - (U(n, 255 & e.adler), - U(n, (e.adler >> 8) & 255), - (e.adler = 0), - (n.status = E))) - : (n.status = E)), - 0 !== n.pending) - ) { - if ((F(e), 0 === e.avail_out)) return (n.last_flush = -1), m; - } else if (0 === e.avail_in && T(t) <= T(r) && t !== f) - return R(e, -5); - if (666 === n.status && 0 !== e.avail_in) return R(e, -5); - if ( - 0 !== e.avail_in || - 0 !== n.lookahead || - (t !== l && 666 !== n.status) - ) { - var o = - 2 === n.strategy - ? (function (e, t) { - for (var r; ; ) { - if (0 === e.lookahead && (j(e), 0 === e.lookahead)) { - if (t === l) return A; - break; - } - if ( - ((e.match_length = 0), - (r = u._tr_tally(e, 0, e.window[e.strstart])), - e.lookahead--, - e.strstart++, - r && (N(e, !1), 0 === e.strm.avail_out)) - ) - return A; - } - return ( - (e.insert = 0), - t === f - ? (N(e, !0), 0 === e.strm.avail_out ? O : B) - : e.last_lit && (N(e, !1), 0 === e.strm.avail_out) - ? A - : I - ); - })(n, t) - : 3 === n.strategy - ? (function (e, t) { - for (var r, n, i, s, a = e.window; ; ) { - if (e.lookahead <= S) { - if ((j(e), e.lookahead <= S && t === l)) return A; - if (0 === e.lookahead) break; - } - if ( - ((e.match_length = 0), - e.lookahead >= x && - 0 < e.strstart && - (n = a[(i = e.strstart - 1)]) === a[++i] && - n === a[++i] && - n === a[++i]) - ) { - s = e.strstart + S; - do {} while ( - n === a[++i] && - n === a[++i] && - n === a[++i] && - n === a[++i] && - n === a[++i] && - n === a[++i] && - n === a[++i] && - n === a[++i] && - i < s - ); - (e.match_length = S - (s - i)), - e.match_length > e.lookahead && - (e.match_length = e.lookahead); - } - if ( - (e.match_length >= x - ? ((r = u._tr_tally(e, 1, e.match_length - x)), - (e.lookahead -= e.match_length), - (e.strstart += e.match_length), - (e.match_length = 0)) - : ((r = u._tr_tally(e, 0, e.window[e.strstart])), - e.lookahead--, - e.strstart++), - r && (N(e, !1), 0 === e.strm.avail_out)) - ) - return A; - } - return ( - (e.insert = 0), - t === f - ? (N(e, !0), 0 === e.strm.avail_out ? O : B) - : e.last_lit && (N(e, !1), 0 === e.strm.avail_out) - ? A - : I - ); - })(n, t) - : h[n.level].func(n, t); - if ( - ((o !== O && o !== B) || (n.status = 666), o === A || o === O) - ) - return 0 === e.avail_out && (n.last_flush = -1), m; - if ( - o === I && - (1 === t - ? u._tr_align(n) - : 5 !== t && - (u._tr_stored_block(n, 0, 0, !1), - 3 === t && - (D(n.head), - 0 === n.lookahead && - ((n.strstart = 0), - (n.block_start = 0), - (n.insert = 0)))), - F(e), - 0 === e.avail_out) - ) - return (n.last_flush = -1), m; - } - return t !== f - ? m - : n.wrap <= 0 - ? 1 - : (2 === n.wrap - ? (U(n, 255 & e.adler), - U(n, (e.adler >> 8) & 255), - U(n, (e.adler >> 16) & 255), - U(n, (e.adler >> 24) & 255), - U(n, 255 & e.total_in), - U(n, (e.total_in >> 8) & 255), - U(n, (e.total_in >> 16) & 255), - U(n, (e.total_in >> 24) & 255)) - : (P(n, e.adler >>> 16), P(n, 65535 & e.adler)), - F(e), - 0 < n.wrap && (n.wrap = -n.wrap), - 0 !== n.pending ? m : 1); - }), - (r.deflateEnd = function (e) { - var t; - return e && e.state - ? (t = e.state.status) !== C && - 69 !== t && - 73 !== t && - 91 !== t && - 103 !== t && - t !== E && - 666 !== t - ? R(e, _) - : ((e.state = null), t === E ? R(e, -3) : m) - : _; - }), - (r.deflateSetDictionary = function (e, t) { - var r, - n, - i, - s, - a, - o, - h, - u, - l = t.length; - if (!e || !e.state) return _; - if ( - 2 === (s = (r = e.state).wrap) || - (1 === s && r.status !== C) || - r.lookahead - ) - return _; - for ( - 1 === s && (e.adler = d(e.adler, t, l, 0)), - r.wrap = 0, - l >= r.w_size && - (0 === s && - (D(r.head), - (r.strstart = 0), - (r.block_start = 0), - (r.insert = 0)), - (u = new c.Buf8(r.w_size)), - c.arraySet(u, t, l - r.w_size, r.w_size, 0), - (t = u), - (l = r.w_size)), - a = e.avail_in, - o = e.next_in, - h = e.input, - e.avail_in = l, - e.next_in = 0, - e.input = t, - j(r); - r.lookahead >= x; - - ) { - for ( - n = r.strstart, i = r.lookahead - (x - 1); - (r.ins_h = - ((r.ins_h << r.hash_shift) ^ r.window[n + x - 1]) & - r.hash_mask), - (r.prev[n & r.w_mask] = r.head[r.ins_h]), - (r.head[r.ins_h] = n), - n++, - --i; - - ); - (r.strstart = n), (r.lookahead = x - 1), j(r); - } - return ( - (r.strstart += r.lookahead), - (r.block_start = r.strstart), - (r.insert = r.lookahead), - (r.lookahead = 0), - (r.match_length = r.prev_length = x - 1), - (r.match_available = 0), - (e.next_in = o), - (e.input = h), - (e.avail_in = a), - (r.wrap = s), - m - ); - }), - (r.deflateInfo = "pako deflate (from Nodeca project)"); - }, - { - "../utils/common": 41, - "./adler32": 43, - "./crc32": 45, - "./messages": 51, - "./trees": 52, - }, - ], - 47: [ - function (e, t, r) { - "use strict"; - t.exports = function () { - (this.text = 0), - (this.time = 0), - (this.xflags = 0), - (this.os = 0), - (this.extra = null), - (this.extra_len = 0), - (this.name = ""), - (this.comment = ""), - (this.hcrc = 0), - (this.done = !1); - }; - }, - {}, - ], - 48: [ - function (e, t, r) { - "use strict"; - t.exports = function (e, t) { - var r, - n, - i, - s, - a, - o, - h, - u, - l, - f, - c, - d, - p, - m, - _, - g, - b, - v, - y, - w, - k, - x, - S, - z, - C; - (r = e.state), - (n = e.next_in), - (z = e.input), - (i = n + (e.avail_in - 5)), - (s = e.next_out), - (C = e.output), - (a = s - (t - e.avail_out)), - (o = s + (e.avail_out - 257)), - (h = r.dmax), - (u = r.wsize), - (l = r.whave), - (f = r.wnext), - (c = r.window), - (d = r.hold), - (p = r.bits), - (m = r.lencode), - (_ = r.distcode), - (g = (1 << r.lenbits) - 1), - (b = (1 << r.distbits) - 1); - e: do { - p < 15 && - ((d += z[n++] << p), (p += 8), (d += z[n++] << p), (p += 8)), - (v = m[d & g]); - t: for (;;) { - if ( - ((d >>>= y = v >>> 24), - (p -= y), - 0 === (y = (v >>> 16) & 255)) - ) - C[s++] = 65535 & v; - else { - if (!(16 & y)) { - if (0 == (64 & y)) { - v = m[(65535 & v) + (d & ((1 << y) - 1))]; - continue t; - } - if (32 & y) { - r.mode = 12; - break e; - } - (e.msg = "invalid literal/length code"), (r.mode = 30); - break e; - } - (w = 65535 & v), - (y &= 15) && - (p < y && ((d += z[n++] << p), (p += 8)), - (w += d & ((1 << y) - 1)), - (d >>>= y), - (p -= y)), - p < 15 && - ((d += z[n++] << p), - (p += 8), - (d += z[n++] << p), - (p += 8)), - (v = _[d & b]); - r: for (;;) { - if ( - ((d >>>= y = v >>> 24), - (p -= y), - !(16 & (y = (v >>> 16) & 255))) - ) { - if (0 == (64 & y)) { - v = _[(65535 & v) + (d & ((1 << y) - 1))]; - continue r; - } - (e.msg = "invalid distance code"), (r.mode = 30); - break e; - } - if ( - ((k = 65535 & v), - p < (y &= 15) && - ((d += z[n++] << p), - (p += 8) < y && ((d += z[n++] << p), (p += 8))), - h < (k += d & ((1 << y) - 1))) - ) { - (e.msg = "invalid distance too far back"), (r.mode = 30); - break e; - } - if (((d >>>= y), (p -= y), (y = s - a) < k)) { - if (l < (y = k - y) && r.sane) { - (e.msg = "invalid distance too far back"), - (r.mode = 30); - break e; - } - if (((S = c), (x = 0) === f)) { - if (((x += u - y), y < w)) { - for (w -= y; (C[s++] = c[x++]), --y; ); - (x = s - k), (S = C); - } - } else if (f < y) { - if (((x += u + f - y), (y -= f) < w)) { - for (w -= y; (C[s++] = c[x++]), --y; ); - if (((x = 0), f < w)) { - for (w -= y = f; (C[s++] = c[x++]), --y; ); - (x = s - k), (S = C); - } - } - } else if (((x += f - y), y < w)) { - for (w -= y; (C[s++] = c[x++]), --y; ); - (x = s - k), (S = C); - } - for (; 2 < w; ) - (C[s++] = S[x++]), - (C[s++] = S[x++]), - (C[s++] = S[x++]), - (w -= 3); - w && ((C[s++] = S[x++]), 1 < w && (C[s++] = S[x++])); - } else { - for ( - x = s - k; - (C[s++] = C[x++]), - (C[s++] = C[x++]), - (C[s++] = C[x++]), - 2 < (w -= 3); - - ); - w && ((C[s++] = C[x++]), 1 < w && (C[s++] = C[x++])); - } - break; - } - } - break; - } - } while (n < i && s < o); - (n -= w = p >> 3), - (d &= (1 << (p -= w << 3)) - 1), - (e.next_in = n), - (e.next_out = s), - (e.avail_in = n < i ? i - n + 5 : 5 - (n - i)), - (e.avail_out = s < o ? o - s + 257 : 257 - (s - o)), - (r.hold = d), - (r.bits = p); - }; - }, - {}, - ], - 49: [ - function (e, t, r) { - "use strict"; - var I = e("../utils/common"), - O = e("./adler32"), - B = e("./crc32"), - R = e("./inffast"), - T = e("./inftrees"), - D = 1, - F = 2, - N = 0, - U = -2, - P = 1, - n = 852, - i = 592; - function L(e) { - return ( - ((e >>> 24) & 255) + - ((e >>> 8) & 65280) + - ((65280 & e) << 8) + - ((255 & e) << 24) - ); - } - function s() { - (this.mode = 0), - (this.last = !1), - (this.wrap = 0), - (this.havedict = !1), - (this.flags = 0), - (this.dmax = 0), - (this.check = 0), - (this.total = 0), - (this.head = null), - (this.wbits = 0), - (this.wsize = 0), - (this.whave = 0), - (this.wnext = 0), - (this.window = null), - (this.hold = 0), - (this.bits = 0), - (this.length = 0), - (this.offset = 0), - (this.extra = 0), - (this.lencode = null), - (this.distcode = null), - (this.lenbits = 0), - (this.distbits = 0), - (this.ncode = 0), - (this.nlen = 0), - (this.ndist = 0), - (this.have = 0), - (this.next = null), - (this.lens = new I.Buf16(320)), - (this.work = new I.Buf16(288)), - (this.lendyn = null), - (this.distdyn = null), - (this.sane = 0), - (this.back = 0), - (this.was = 0); - } - function a(e) { - var t; - return e && e.state - ? ((t = e.state), - (e.total_in = e.total_out = t.total = 0), - (e.msg = ""), - t.wrap && (e.adler = 1 & t.wrap), - (t.mode = P), - (t.last = 0), - (t.havedict = 0), - (t.dmax = 32768), - (t.head = null), - (t.hold = 0), - (t.bits = 0), - (t.lencode = t.lendyn = new I.Buf32(n)), - (t.distcode = t.distdyn = new I.Buf32(i)), - (t.sane = 1), - (t.back = -1), - N) - : U; - } - function o(e) { - var t; - return e && e.state - ? (((t = e.state).wsize = 0), (t.whave = 0), (t.wnext = 0), a(e)) - : U; - } - function h(e, t) { - var r, n; - return e && e.state - ? ((n = e.state), - t < 0 - ? ((r = 0), (t = -t)) - : ((r = 1 + (t >> 4)), t < 48 && (t &= 15)), - t && (t < 8 || 15 < t) - ? U - : (null !== n.window && n.wbits !== t && (n.window = null), - (n.wrap = r), - (n.wbits = t), - o(e))) - : U; - } - function u(e, t) { - var r, n; - return e - ? ((n = new s()), - ((e.state = n).window = null), - (r = h(e, t)) !== N && (e.state = null), - r) - : U; - } - var l, - f, - c = !0; - function j(e) { - if (c) { - var t; - for (l = new I.Buf32(512), f = new I.Buf32(32), t = 0; t < 144; ) - e.lens[t++] = 8; - for (; t < 256; ) e.lens[t++] = 9; - for (; t < 280; ) e.lens[t++] = 7; - for (; t < 288; ) e.lens[t++] = 8; - for ( - T(D, e.lens, 0, 288, l, 0, e.work, { bits: 9 }), t = 0; - t < 32; - - ) - e.lens[t++] = 5; - T(F, e.lens, 0, 32, f, 0, e.work, { bits: 5 }), (c = !1); - } - (e.lencode = l), - (e.lenbits = 9), - (e.distcode = f), - (e.distbits = 5); - } - function Z(e, t, r, n) { - var i, - s = e.state; - return ( - null === s.window && - ((s.wsize = 1 << s.wbits), - (s.wnext = 0), - (s.whave = 0), - (s.window = new I.Buf8(s.wsize))), - n >= s.wsize - ? (I.arraySet(s.window, t, r - s.wsize, s.wsize, 0), - (s.wnext = 0), - (s.whave = s.wsize)) - : (n < (i = s.wsize - s.wnext) && (i = n), - I.arraySet(s.window, t, r - n, i, s.wnext), - (n -= i) - ? (I.arraySet(s.window, t, r - n, n, 0), - (s.wnext = n), - (s.whave = s.wsize)) - : ((s.wnext += i), - s.wnext === s.wsize && (s.wnext = 0), - s.whave < s.wsize && (s.whave += i))), - 0 - ); - } - (r.inflateReset = o), - (r.inflateReset2 = h), - (r.inflateResetKeep = a), - (r.inflateInit = function (e) { - return u(e, 15); - }), - (r.inflateInit2 = u), - (r.inflate = function (e, t) { - var r, - n, - i, - s, - a, - o, - h, - u, - l, - f, - c, - d, - p, - m, - _, - g, - b, - v, - y, - w, - k, - x, - S, - z, - C = 0, - E = new I.Buf8(4), - A = [ - 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, - 15, - ]; - if (!e || !e.state || !e.output || (!e.input && 0 !== e.avail_in)) - return U; - 12 === (r = e.state).mode && (r.mode = 13), - (a = e.next_out), - (i = e.output), - (h = e.avail_out), - (s = e.next_in), - (n = e.input), - (o = e.avail_in), - (u = r.hold), - (l = r.bits), - (f = o), - (c = h), - (x = N); - e: for (;;) - switch (r.mode) { - case P: - if (0 === r.wrap) { - r.mode = 13; - break; - } - for (; l < 16; ) { - if (0 === o) break e; - o--, (u += n[s++] << l), (l += 8); - } - if (2 & r.wrap && 35615 === u) { - (E[(r.check = 0)] = 255 & u), - (E[1] = (u >>> 8) & 255), - (r.check = B(r.check, E, 2, 0)), - (l = u = 0), - (r.mode = 2); - break; - } - if ( - ((r.flags = 0), - r.head && (r.head.done = !1), - !(1 & r.wrap) || (((255 & u) << 8) + (u >> 8)) % 31) - ) { - (e.msg = "incorrect header check"), (r.mode = 30); - break; - } - if (8 != (15 & u)) { - (e.msg = "unknown compression method"), (r.mode = 30); - break; - } - if (((l -= 4), (k = 8 + (15 & (u >>>= 4))), 0 === r.wbits)) - r.wbits = k; - else if (k > r.wbits) { - (e.msg = "invalid window size"), (r.mode = 30); - break; - } - (r.dmax = 1 << k), - (e.adler = r.check = 1), - (r.mode = 512 & u ? 10 : 12), - (l = u = 0); - break; - case 2: - for (; l < 16; ) { - if (0 === o) break e; - o--, (u += n[s++] << l), (l += 8); - } - if (((r.flags = u), 8 != (255 & r.flags))) { - (e.msg = "unknown compression method"), (r.mode = 30); - break; - } - if (57344 & r.flags) { - (e.msg = "unknown header flags set"), (r.mode = 30); - break; - } - r.head && (r.head.text = (u >> 8) & 1), - 512 & r.flags && - ((E[0] = 255 & u), - (E[1] = (u >>> 8) & 255), - (r.check = B(r.check, E, 2, 0))), - (l = u = 0), - (r.mode = 3); - case 3: - for (; l < 32; ) { - if (0 === o) break e; - o--, (u += n[s++] << l), (l += 8); - } - r.head && (r.head.time = u), - 512 & r.flags && - ((E[0] = 255 & u), - (E[1] = (u >>> 8) & 255), - (E[2] = (u >>> 16) & 255), - (E[3] = (u >>> 24) & 255), - (r.check = B(r.check, E, 4, 0))), - (l = u = 0), - (r.mode = 4); - case 4: - for (; l < 16; ) { - if (0 === o) break e; - o--, (u += n[s++] << l), (l += 8); - } - r.head && ((r.head.xflags = 255 & u), (r.head.os = u >> 8)), - 512 & r.flags && - ((E[0] = 255 & u), - (E[1] = (u >>> 8) & 255), - (r.check = B(r.check, E, 2, 0))), - (l = u = 0), - (r.mode = 5); - case 5: - if (1024 & r.flags) { - for (; l < 16; ) { - if (0 === o) break e; - o--, (u += n[s++] << l), (l += 8); - } - (r.length = u), - r.head && (r.head.extra_len = u), - 512 & r.flags && - ((E[0] = 255 & u), - (E[1] = (u >>> 8) & 255), - (r.check = B(r.check, E, 2, 0))), - (l = u = 0); - } else r.head && (r.head.extra = null); - r.mode = 6; - case 6: - if ( - 1024 & r.flags && - (o < (d = r.length) && (d = o), - d && - (r.head && - ((k = r.head.extra_len - r.length), - r.head.extra || - (r.head.extra = new Array(r.head.extra_len)), - I.arraySet(r.head.extra, n, s, d, k)), - 512 & r.flags && (r.check = B(r.check, n, d, s)), - (o -= d), - (s += d), - (r.length -= d)), - r.length) - ) - break e; - (r.length = 0), (r.mode = 7); - case 7: - if (2048 & r.flags) { - if (0 === o) break e; - for ( - d = 0; - (k = n[s + d++]), - r.head && - k && - r.length < 65536 && - (r.head.name += String.fromCharCode(k)), - k && d < o; - - ); - if ( - (512 & r.flags && (r.check = B(r.check, n, d, s)), - (o -= d), - (s += d), - k) - ) - break e; - } else r.head && (r.head.name = null); - (r.length = 0), (r.mode = 8); - case 8: - if (4096 & r.flags) { - if (0 === o) break e; - for ( - d = 0; - (k = n[s + d++]), - r.head && - k && - r.length < 65536 && - (r.head.comment += String.fromCharCode(k)), - k && d < o; - - ); - if ( - (512 & r.flags && (r.check = B(r.check, n, d, s)), - (o -= d), - (s += d), - k) - ) - break e; - } else r.head && (r.head.comment = null); - r.mode = 9; - case 9: - if (512 & r.flags) { - for (; l < 16; ) { - if (0 === o) break e; - o--, (u += n[s++] << l), (l += 8); - } - if (u !== (65535 & r.check)) { - (e.msg = "header crc mismatch"), (r.mode = 30); - break; - } - l = u = 0; - } - r.head && - ((r.head.hcrc = (r.flags >> 9) & 1), (r.head.done = !0)), - (e.adler = r.check = 0), - (r.mode = 12); - break; - case 10: - for (; l < 32; ) { - if (0 === o) break e; - o--, (u += n[s++] << l), (l += 8); - } - (e.adler = r.check = L(u)), (l = u = 0), (r.mode = 11); - case 11: - if (0 === r.havedict) - return ( - (e.next_out = a), - (e.avail_out = h), - (e.next_in = s), - (e.avail_in = o), - (r.hold = u), - (r.bits = l), - 2 - ); - (e.adler = r.check = 1), (r.mode = 12); - case 12: - if (5 === t || 6 === t) break e; - case 13: - if (r.last) { - (u >>>= 7 & l), (l -= 7 & l), (r.mode = 27); - break; - } - for (; l < 3; ) { - if (0 === o) break e; - o--, (u += n[s++] << l), (l += 8); - } - switch (((r.last = 1 & u), (l -= 1), 3 & (u >>>= 1))) { - case 0: - r.mode = 14; - break; - case 1: - if ((j(r), (r.mode = 20), 6 !== t)) break; - (u >>>= 2), (l -= 2); - break e; - case 2: - r.mode = 17; - break; - case 3: - (e.msg = "invalid block type"), (r.mode = 30); - } - (u >>>= 2), (l -= 2); - break; - case 14: - for (u >>>= 7 & l, l -= 7 & l; l < 32; ) { - if (0 === o) break e; - o--, (u += n[s++] << l), (l += 8); - } - if ((65535 & u) != ((u >>> 16) ^ 65535)) { - (e.msg = "invalid stored block lengths"), (r.mode = 30); - break; - } - if ( - ((r.length = 65535 & u), - (l = u = 0), - (r.mode = 15), - 6 === t) - ) - break e; - case 15: - r.mode = 16; - case 16: - if ((d = r.length)) { - if ((o < d && (d = o), h < d && (d = h), 0 === d)) - break e; - I.arraySet(i, n, s, d, a), - (o -= d), - (s += d), - (h -= d), - (a += d), - (r.length -= d); - break; - } - r.mode = 12; - break; - case 17: - for (; l < 14; ) { - if (0 === o) break e; - o--, (u += n[s++] << l), (l += 8); - } - if ( - ((r.nlen = 257 + (31 & u)), - (u >>>= 5), - (l -= 5), - (r.ndist = 1 + (31 & u)), - (u >>>= 5), - (l -= 5), - (r.ncode = 4 + (15 & u)), - (u >>>= 4), - (l -= 4), - 286 < r.nlen || 30 < r.ndist) - ) { - (e.msg = "too many length or distance symbols"), - (r.mode = 30); - break; - } - (r.have = 0), (r.mode = 18); - case 18: - for (; r.have < r.ncode; ) { - for (; l < 3; ) { - if (0 === o) break e; - o--, (u += n[s++] << l), (l += 8); - } - (r.lens[A[r.have++]] = 7 & u), (u >>>= 3), (l -= 3); - } - for (; r.have < 19; ) r.lens[A[r.have++]] = 0; - if ( - ((r.lencode = r.lendyn), - (r.lenbits = 7), - (S = { bits: r.lenbits }), - (x = T(0, r.lens, 0, 19, r.lencode, 0, r.work, S)), - (r.lenbits = S.bits), - x) - ) { - (e.msg = "invalid code lengths set"), (r.mode = 30); - break; - } - (r.have = 0), (r.mode = 19); - case 19: - for (; r.have < r.nlen + r.ndist; ) { - for ( - ; - (g = - ((C = r.lencode[u & ((1 << r.lenbits) - 1)]) >>> 16) & - 255), - (b = 65535 & C), - !((_ = C >>> 24) <= l); - - ) { - if (0 === o) break e; - o--, (u += n[s++] << l), (l += 8); - } - if (b < 16) (u >>>= _), (l -= _), (r.lens[r.have++] = b); - else { - if (16 === b) { - for (z = _ + 2; l < z; ) { - if (0 === o) break e; - o--, (u += n[s++] << l), (l += 8); - } - if (((u >>>= _), (l -= _), 0 === r.have)) { - (e.msg = "invalid bit length repeat"), - (r.mode = 30); - break; - } - (k = r.lens[r.have - 1]), - (d = 3 + (3 & u)), - (u >>>= 2), - (l -= 2); - } else if (17 === b) { - for (z = _ + 3; l < z; ) { - if (0 === o) break e; - o--, (u += n[s++] << l), (l += 8); - } - (l -= _), - (k = 0), - (d = 3 + (7 & (u >>>= _))), - (u >>>= 3), - (l -= 3); - } else { - for (z = _ + 7; l < z; ) { - if (0 === o) break e; - o--, (u += n[s++] << l), (l += 8); - } - (l -= _), - (k = 0), - (d = 11 + (127 & (u >>>= _))), - (u >>>= 7), - (l -= 7); - } - if (r.have + d > r.nlen + r.ndist) { - (e.msg = "invalid bit length repeat"), (r.mode = 30); - break; - } - for (; d--; ) r.lens[r.have++] = k; - } - } - if (30 === r.mode) break; - if (0 === r.lens[256]) { - (e.msg = "invalid code -- missing end-of-block"), - (r.mode = 30); - break; - } - if ( - ((r.lenbits = 9), - (S = { bits: r.lenbits }), - (x = T(D, r.lens, 0, r.nlen, r.lencode, 0, r.work, S)), - (r.lenbits = S.bits), - x) - ) { - (e.msg = "invalid literal/lengths set"), (r.mode = 30); - break; - } - if ( - ((r.distbits = 6), - (r.distcode = r.distdyn), - (S = { bits: r.distbits }), - (x = T( - F, - r.lens, - r.nlen, - r.ndist, - r.distcode, - 0, - r.work, - S, - )), - (r.distbits = S.bits), - x) - ) { - (e.msg = "invalid distances set"), (r.mode = 30); - break; - } - if (((r.mode = 20), 6 === t)) break e; - case 20: - r.mode = 21; - case 21: - if (6 <= o && 258 <= h) { - (e.next_out = a), - (e.avail_out = h), - (e.next_in = s), - (e.avail_in = o), - (r.hold = u), - (r.bits = l), - R(e, c), - (a = e.next_out), - (i = e.output), - (h = e.avail_out), - (s = e.next_in), - (n = e.input), - (o = e.avail_in), - (u = r.hold), - (l = r.bits), - 12 === r.mode && (r.back = -1); - break; - } - for ( - r.back = 0; - (g = - ((C = r.lencode[u & ((1 << r.lenbits) - 1)]) >>> 16) & - 255), - (b = 65535 & C), - !((_ = C >>> 24) <= l); - - ) { - if (0 === o) break e; - o--, (u += n[s++] << l), (l += 8); - } - if (g && 0 == (240 & g)) { - for ( - v = _, y = g, w = b; - (g = - ((C = - r.lencode[ - w + ((u & ((1 << (v + y)) - 1)) >> v) - ]) >>> - 16) & - 255), - (b = 65535 & C), - !(v + (_ = C >>> 24) <= l); - - ) { - if (0 === o) break e; - o--, (u += n[s++] << l), (l += 8); - } - (u >>>= v), (l -= v), (r.back += v); - } - if ( - ((u >>>= _), - (l -= _), - (r.back += _), - (r.length = b), - 0 === g) - ) { - r.mode = 26; - break; - } - if (32 & g) { - (r.back = -1), (r.mode = 12); - break; - } - if (64 & g) { - (e.msg = "invalid literal/length code"), (r.mode = 30); - break; - } - (r.extra = 15 & g), (r.mode = 22); - case 22: - if (r.extra) { - for (z = r.extra; l < z; ) { - if (0 === o) break e; - o--, (u += n[s++] << l), (l += 8); - } - (r.length += u & ((1 << r.extra) - 1)), - (u >>>= r.extra), - (l -= r.extra), - (r.back += r.extra); - } - (r.was = r.length), (r.mode = 23); - case 23: - for ( - ; - (g = - ((C = r.distcode[u & ((1 << r.distbits) - 1)]) >>> 16) & - 255), - (b = 65535 & C), - !((_ = C >>> 24) <= l); - - ) { - if (0 === o) break e; - o--, (u += n[s++] << l), (l += 8); - } - if (0 == (240 & g)) { - for ( - v = _, y = g, w = b; - (g = - ((C = - r.distcode[ - w + ((u & ((1 << (v + y)) - 1)) >> v) - ]) >>> - 16) & - 255), - (b = 65535 & C), - !(v + (_ = C >>> 24) <= l); - - ) { - if (0 === o) break e; - o--, (u += n[s++] << l), (l += 8); - } - (u >>>= v), (l -= v), (r.back += v); - } - if (((u >>>= _), (l -= _), (r.back += _), 64 & g)) { - (e.msg = "invalid distance code"), (r.mode = 30); - break; - } - (r.offset = b), (r.extra = 15 & g), (r.mode = 24); - case 24: - if (r.extra) { - for (z = r.extra; l < z; ) { - if (0 === o) break e; - o--, (u += n[s++] << l), (l += 8); - } - (r.offset += u & ((1 << r.extra) - 1)), - (u >>>= r.extra), - (l -= r.extra), - (r.back += r.extra); - } - if (r.offset > r.dmax) { - (e.msg = "invalid distance too far back"), (r.mode = 30); - break; - } - r.mode = 25; - case 25: - if (0 === h) break e; - if (((d = c - h), r.offset > d)) { - if ((d = r.offset - d) > r.whave && r.sane) { - (e.msg = "invalid distance too far back"), - (r.mode = 30); - break; - } - (p = - d > r.wnext - ? ((d -= r.wnext), r.wsize - d) - : r.wnext - d), - d > r.length && (d = r.length), - (m = r.window); - } else (m = i), (p = a - r.offset), (d = r.length); - for ( - h < d && (d = h), h -= d, r.length -= d; - (i[a++] = m[p++]), --d; - - ); - 0 === r.length && (r.mode = 21); - break; - case 26: - if (0 === h) break e; - (i[a++] = r.length), h--, (r.mode = 21); - break; - case 27: - if (r.wrap) { - for (; l < 32; ) { - if (0 === o) break e; - o--, (u |= n[s++] << l), (l += 8); - } - if ( - ((c -= h), - (e.total_out += c), - (r.total += c), - c && - (e.adler = r.check = - r.flags - ? B(r.check, i, c, a - c) - : O(r.check, i, c, a - c)), - (c = h), - (r.flags ? u : L(u)) !== r.check) - ) { - (e.msg = "incorrect data check"), (r.mode = 30); - break; - } - l = u = 0; - } - r.mode = 28; - case 28: - if (r.wrap && r.flags) { - for (; l < 32; ) { - if (0 === o) break e; - o--, (u += n[s++] << l), (l += 8); - } - if (u !== (4294967295 & r.total)) { - (e.msg = "incorrect length check"), (r.mode = 30); - break; - } - l = u = 0; - } - r.mode = 29; - case 29: - x = 1; - break e; - case 30: - x = -3; - break e; - case 31: - return -4; - case 32: - default: - return U; - } - return ( - (e.next_out = a), - (e.avail_out = h), - (e.next_in = s), - (e.avail_in = o), - (r.hold = u), - (r.bits = l), - (r.wsize || - (c !== e.avail_out && - r.mode < 30 && - (r.mode < 27 || 4 !== t))) && - Z(e, e.output, e.next_out, c - e.avail_out) - ? ((r.mode = 31), -4) - : ((f -= e.avail_in), - (c -= e.avail_out), - (e.total_in += f), - (e.total_out += c), - (r.total += c), - r.wrap && - c && - (e.adler = r.check = - r.flags - ? B(r.check, i, c, e.next_out - c) - : O(r.check, i, c, e.next_out - c)), - (e.data_type = - r.bits + - (r.last ? 64 : 0) + - (12 === r.mode ? 128 : 0) + - (20 === r.mode || 15 === r.mode ? 256 : 0)), - ((0 == f && 0 === c) || 4 === t) && x === N && (x = -5), - x) - ); - }), - (r.inflateEnd = function (e) { - if (!e || !e.state) return U; - var t = e.state; - return t.window && (t.window = null), (e.state = null), N; - }), - (r.inflateGetHeader = function (e, t) { - var r; - return e && e.state - ? 0 == (2 & (r = e.state).wrap) - ? U - : (((r.head = t).done = !1), N) - : U; - }), - (r.inflateSetDictionary = function (e, t) { - var r, - n = t.length; - return e && e.state - ? 0 !== (r = e.state).wrap && 11 !== r.mode - ? U - : 11 === r.mode && O(1, t, n, 0) !== r.check - ? -3 - : Z(e, t, n, n) - ? ((r.mode = 31), -4) - : ((r.havedict = 1), N) - : U; - }), - (r.inflateInfo = "pako inflate (from Nodeca project)"); - }, - { - "../utils/common": 41, - "./adler32": 43, - "./crc32": 45, - "./inffast": 48, - "./inftrees": 50, - }, - ], - 50: [ - function (e, t, r) { - "use strict"; - var D = e("../utils/common"), - F = [ - 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, - 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0, - ], - N = [ - 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, - 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78, - ], - U = [ - 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, - 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, - 16385, 24577, 0, 0, - ], - P = [ - 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, - 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, 28, 28, 29, 29, 64, 64, - ]; - t.exports = function (e, t, r, n, i, s, a, o) { - var h, - u, - l, - f, - c, - d, - p, - m, - _, - g = o.bits, - b = 0, - v = 0, - y = 0, - w = 0, - k = 0, - x = 0, - S = 0, - z = 0, - C = 0, - E = 0, - A = null, - I = 0, - O = new D.Buf16(16), - B = new D.Buf16(16), - R = null, - T = 0; - for (b = 0; b <= 15; b++) O[b] = 0; - for (v = 0; v < n; v++) O[t[r + v]]++; - for (k = g, w = 15; 1 <= w && 0 === O[w]; w--); - if ((w < k && (k = w), 0 === w)) - return (i[s++] = 20971520), (i[s++] = 20971520), (o.bits = 1), 0; - for (y = 1; y < w && 0 === O[y]; y++); - for (k < y && (k = y), b = z = 1; b <= 15; b++) - if (((z <<= 1), (z -= O[b]) < 0)) return -1; - if (0 < z && (0 === e || 1 !== w)) return -1; - for (B[1] = 0, b = 1; b < 15; b++) B[b + 1] = B[b] + O[b]; - for (v = 0; v < n; v++) 0 !== t[r + v] && (a[B[t[r + v]]++] = v); - if ( - ((d = - 0 === e - ? ((A = R = a), 19) - : 1 === e - ? ((A = F), (I -= 257), (R = N), (T -= 257), 256) - : ((A = U), (R = P), -1)), - (b = y), - (c = s), - (S = v = E = 0), - (l = -1), - (f = (C = 1 << (x = k)) - 1), - (1 === e && 852 < C) || (2 === e && 592 < C)) - ) - return 1; - for (;;) { - for ( - p = b - S, - _ = - a[v] < d - ? ((m = 0), a[v]) - : a[v] > d - ? ((m = R[T + a[v]]), A[I + a[v]]) - : ((m = 96), 0), - h = 1 << (b - S), - y = u = 1 << x; - (i[c + (E >> S) + (u -= h)] = (p << 24) | (m << 16) | _ | 0), - 0 !== u; - - ); - for (h = 1 << (b - 1); E & h; ) h >>= 1; - if ( - (0 !== h ? ((E &= h - 1), (E += h)) : (E = 0), v++, 0 == --O[b]) - ) { - if (b === w) break; - b = t[r + a[v]]; - } - if (k < b && (E & f) !== l) { - for ( - 0 === S && (S = k), c += y, z = 1 << (x = b - S); - x + S < w && !((z -= O[x + S]) <= 0); - - ) - x++, (z <<= 1); - if ( - ((C += 1 << x), (1 === e && 852 < C) || (2 === e && 592 < C)) - ) - return 1; - i[(l = E & f)] = (k << 24) | (x << 16) | (c - s) | 0; - } - } - return ( - 0 !== E && (i[c + E] = ((b - S) << 24) | (64 << 16) | 0), - (o.bits = k), - 0 - ); - }; - }, - { "../utils/common": 41 }, - ], - 51: [ - function (e, t, r) { - "use strict"; - t.exports = { - 2: "need dictionary", - 1: "stream end", - 0: "", - "-1": "file error", - "-2": "stream error", - "-3": "data error", - "-4": "insufficient memory", - "-5": "buffer error", - "-6": "incompatible version", - }; - }, - {}, - ], - 52: [ - function (e, t, r) { - "use strict"; - var i = e("../utils/common"), - o = 0, - h = 1; - function n(e) { - for (var t = e.length; 0 <= --t; ) e[t] = 0; - } - var s = 0, - a = 29, - u = 256, - l = u + 1 + a, - f = 30, - c = 19, - _ = 2 * l + 1, - g = 15, - d = 16, - p = 7, - m = 256, - b = 16, - v = 17, - y = 18, - w = [ - 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, - 4, 4, 5, 5, 5, 5, 0, - ], - k = [ - 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, - 10, 10, 11, 11, 12, 12, 13, 13, - ], - x = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 7], - S = [ - 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15, - ], - z = new Array(2 * (l + 2)); - n(z); - var C = new Array(2 * f); - n(C); - var E = new Array(512); - n(E); - var A = new Array(256); - n(A); - var I = new Array(a); - n(I); - var O, - B, - R, - T = new Array(f); - function D(e, t, r, n, i) { - (this.static_tree = e), - (this.extra_bits = t), - (this.extra_base = r), - (this.elems = n), - (this.max_length = i), - (this.has_stree = e && e.length); - } - function F(e, t) { - (this.dyn_tree = e), (this.max_code = 0), (this.stat_desc = t); - } - function N(e) { - return e < 256 ? E[e] : E[256 + (e >>> 7)]; - } - function U(e, t) { - (e.pending_buf[e.pending++] = 255 & t), - (e.pending_buf[e.pending++] = (t >>> 8) & 255); - } - function P(e, t, r) { - e.bi_valid > d - r - ? ((e.bi_buf |= (t << e.bi_valid) & 65535), - U(e, e.bi_buf), - (e.bi_buf = t >> (d - e.bi_valid)), - (e.bi_valid += r - d)) - : ((e.bi_buf |= (t << e.bi_valid) & 65535), (e.bi_valid += r)); - } - function L(e, t, r) { - P(e, r[2 * t], r[2 * t + 1]); - } - function j(e, t) { - for (var r = 0; (r |= 1 & e), (e >>>= 1), (r <<= 1), 0 < --t; ); - return r >>> 1; - } - function Z(e, t, r) { - var n, - i, - s = new Array(g + 1), - a = 0; - for (n = 1; n <= g; n++) s[n] = a = (a + r[n - 1]) << 1; - for (i = 0; i <= t; i++) { - var o = e[2 * i + 1]; - 0 !== o && (e[2 * i] = j(s[o]++, o)); - } - } - function W(e) { - var t; - for (t = 0; t < l; t++) e.dyn_ltree[2 * t] = 0; - for (t = 0; t < f; t++) e.dyn_dtree[2 * t] = 0; - for (t = 0; t < c; t++) e.bl_tree[2 * t] = 0; - (e.dyn_ltree[2 * m] = 1), - (e.opt_len = e.static_len = 0), - (e.last_lit = e.matches = 0); - } - function M(e) { - 8 < e.bi_valid - ? U(e, e.bi_buf) - : 0 < e.bi_valid && (e.pending_buf[e.pending++] = e.bi_buf), - (e.bi_buf = 0), - (e.bi_valid = 0); - } - function H(e, t, r, n) { - var i = 2 * t, - s = 2 * r; - return e[i] < e[s] || (e[i] === e[s] && n[t] <= n[r]); - } - function G(e, t, r) { - for ( - var n = e.heap[r], i = r << 1; - i <= e.heap_len && - (i < e.heap_len && H(t, e.heap[i + 1], e.heap[i], e.depth) && i++, - !H(t, n, e.heap[i], e.depth)); - - ) - (e.heap[r] = e.heap[i]), (r = i), (i <<= 1); - e.heap[r] = n; - } - function K(e, t, r) { - var n, - i, - s, - a, - o = 0; - if (0 !== e.last_lit) - for ( - ; - (n = - (e.pending_buf[e.d_buf + 2 * o] << 8) | - e.pending_buf[e.d_buf + 2 * o + 1]), - (i = e.pending_buf[e.l_buf + o]), - o++, - 0 === n - ? L(e, i, t) - : (L(e, (s = A[i]) + u + 1, t), - 0 !== (a = w[s]) && P(e, (i -= I[s]), a), - L(e, (s = N(--n)), r), - 0 !== (a = k[s]) && P(e, (n -= T[s]), a)), - o < e.last_lit; - - ); - L(e, m, t); - } - function Y(e, t) { - var r, - n, - i, - s = t.dyn_tree, - a = t.stat_desc.static_tree, - o = t.stat_desc.has_stree, - h = t.stat_desc.elems, - u = -1; - for (e.heap_len = 0, e.heap_max = _, r = 0; r < h; r++) - 0 !== s[2 * r] - ? ((e.heap[++e.heap_len] = u = r), (e.depth[r] = 0)) - : (s[2 * r + 1] = 0); - for (; e.heap_len < 2; ) - (s[2 * (i = e.heap[++e.heap_len] = u < 2 ? ++u : 0)] = 1), - (e.depth[i] = 0), - e.opt_len--, - o && (e.static_len -= a[2 * i + 1]); - for (t.max_code = u, r = e.heap_len >> 1; 1 <= r; r--) G(e, s, r); - for ( - i = h; - (r = e.heap[1]), - (e.heap[1] = e.heap[e.heap_len--]), - G(e, s, 1), - (n = e.heap[1]), - (e.heap[--e.heap_max] = r), - (e.heap[--e.heap_max] = n), - (s[2 * i] = s[2 * r] + s[2 * n]), - (e.depth[i] = - (e.depth[r] >= e.depth[n] ? e.depth[r] : e.depth[n]) + 1), - (s[2 * r + 1] = s[2 * n + 1] = i), - (e.heap[1] = i++), - G(e, s, 1), - 2 <= e.heap_len; - - ); - (e.heap[--e.heap_max] = e.heap[1]), - (function (e, t) { - var r, - n, - i, - s, - a, - o, - h = t.dyn_tree, - u = t.max_code, - l = t.stat_desc.static_tree, - f = t.stat_desc.has_stree, - c = t.stat_desc.extra_bits, - d = t.stat_desc.extra_base, - p = t.stat_desc.max_length, - m = 0; - for (s = 0; s <= g; s++) e.bl_count[s] = 0; - for ( - h[2 * e.heap[e.heap_max] + 1] = 0, r = e.heap_max + 1; - r < _; - r++ - ) - p < (s = h[2 * h[2 * (n = e.heap[r]) + 1] + 1] + 1) && - ((s = p), m++), - (h[2 * n + 1] = s), - u < n || - (e.bl_count[s]++, - (a = 0), - d <= n && (a = c[n - d]), - (o = h[2 * n]), - (e.opt_len += o * (s + a)), - f && (e.static_len += o * (l[2 * n + 1] + a))); - if (0 !== m) { - do { - for (s = p - 1; 0 === e.bl_count[s]; ) s--; - e.bl_count[s]--, - (e.bl_count[s + 1] += 2), - e.bl_count[p]--, - (m -= 2); - } while (0 < m); - for (s = p; 0 !== s; s--) - for (n = e.bl_count[s]; 0 !== n; ) - u < (i = e.heap[--r]) || - (h[2 * i + 1] !== s && - ((e.opt_len += (s - h[2 * i + 1]) * h[2 * i]), - (h[2 * i + 1] = s)), - n--); - } - })(e, t), - Z(s, u, e.bl_count); - } - function X(e, t, r) { - var n, - i, - s = -1, - a = t[1], - o = 0, - h = 7, - u = 4; - for ( - 0 === a && ((h = 138), (u = 3)), - t[2 * (r + 1) + 1] = 65535, - n = 0; - n <= r; - n++ - ) - (i = a), - (a = t[2 * (n + 1) + 1]), - (++o < h && i === a) || - (o < u - ? (e.bl_tree[2 * i] += o) - : 0 !== i - ? (i !== s && e.bl_tree[2 * i]++, e.bl_tree[2 * b]++) - : o <= 10 - ? e.bl_tree[2 * v]++ - : e.bl_tree[2 * y]++, - (s = i), - (u = - (o = 0) === a - ? ((h = 138), 3) - : i === a - ? ((h = 6), 3) - : ((h = 7), 4))); - } - function V(e, t, r) { - var n, - i, - s = -1, - a = t[1], - o = 0, - h = 7, - u = 4; - for (0 === a && ((h = 138), (u = 3)), n = 0; n <= r; n++) - if (((i = a), (a = t[2 * (n + 1) + 1]), !(++o < h && i === a))) { - if (o < u) for (; L(e, i, e.bl_tree), 0 != --o; ); - else - 0 !== i - ? (i !== s && (L(e, i, e.bl_tree), o--), - L(e, b, e.bl_tree), - P(e, o - 3, 2)) - : o <= 10 - ? (L(e, v, e.bl_tree), P(e, o - 3, 3)) - : (L(e, y, e.bl_tree), P(e, o - 11, 7)); - (s = i), - (u = - (o = 0) === a - ? ((h = 138), 3) - : i === a - ? ((h = 6), 3) - : ((h = 7), 4)); - } - } - n(T); - var q = !1; - function J(e, t, r, n) { - P(e, (s << 1) + (n ? 1 : 0), 3), - (function (e, t, r, n) { - M(e), - n && (U(e, r), U(e, ~r)), - i.arraySet(e.pending_buf, e.window, t, r, e.pending), - (e.pending += r); - })(e, t, r, !0); - } - (r._tr_init = function (e) { - q || - ((function () { - var e, - t, - r, - n, - i, - s = new Array(g + 1); - for (n = r = 0; n < a - 1; n++) - for (I[n] = r, e = 0; e < 1 << w[n]; e++) A[r++] = n; - for (A[r - 1] = n, n = i = 0; n < 16; n++) - for (T[n] = i, e = 0; e < 1 << k[n]; e++) E[i++] = n; - for (i >>= 7; n < f; n++) - for (T[n] = i << 7, e = 0; e < 1 << (k[n] - 7); e++) - E[256 + i++] = n; - for (t = 0; t <= g; t++) s[t] = 0; - for (e = 0; e <= 143; ) (z[2 * e + 1] = 8), e++, s[8]++; - for (; e <= 255; ) (z[2 * e + 1] = 9), e++, s[9]++; - for (; e <= 279; ) (z[2 * e + 1] = 7), e++, s[7]++; - for (; e <= 287; ) (z[2 * e + 1] = 8), e++, s[8]++; - for (Z(z, l + 1, s), e = 0; e < f; e++) - (C[2 * e + 1] = 5), (C[2 * e] = j(e, 5)); - (O = new D(z, w, u + 1, l, g)), - (B = new D(C, k, 0, f, g)), - (R = new D(new Array(0), x, 0, c, p)); - })(), - (q = !0)), - (e.l_desc = new F(e.dyn_ltree, O)), - (e.d_desc = new F(e.dyn_dtree, B)), - (e.bl_desc = new F(e.bl_tree, R)), - (e.bi_buf = 0), - (e.bi_valid = 0), - W(e); - }), - (r._tr_stored_block = J), - (r._tr_flush_block = function (e, t, r, n) { - var i, - s, - a = 0; - 0 < e.level - ? (2 === e.strm.data_type && - (e.strm.data_type = (function (e) { - var t, - r = 4093624447; - for (t = 0; t <= 31; t++, r >>>= 1) - if (1 & r && 0 !== e.dyn_ltree[2 * t]) return o; - if ( - 0 !== e.dyn_ltree[18] || - 0 !== e.dyn_ltree[20] || - 0 !== e.dyn_ltree[26] - ) - return h; - for (t = 32; t < u; t++) - if (0 !== e.dyn_ltree[2 * t]) return h; - return o; - })(e)), - Y(e, e.l_desc), - Y(e, e.d_desc), - (a = (function (e) { - var t; - for ( - X(e, e.dyn_ltree, e.l_desc.max_code), - X(e, e.dyn_dtree, e.d_desc.max_code), - Y(e, e.bl_desc), - t = c - 1; - 3 <= t && 0 === e.bl_tree[2 * S[t] + 1]; - t-- - ); - return (e.opt_len += 3 * (t + 1) + 5 + 5 + 4), t; - })(e)), - (i = (e.opt_len + 3 + 7) >>> 3), - (s = (e.static_len + 3 + 7) >>> 3) <= i && (i = s)) - : (i = s = r + 5), - r + 4 <= i && -1 !== t - ? J(e, t, r, n) - : 4 === e.strategy || s === i - ? (P(e, 2 + (n ? 1 : 0), 3), K(e, z, C)) - : (P(e, 4 + (n ? 1 : 0), 3), - (function (e, t, r, n) { - var i; - for ( - P(e, t - 257, 5), P(e, r - 1, 5), P(e, n - 4, 4), i = 0; - i < n; - i++ - ) - P(e, e.bl_tree[2 * S[i] + 1], 3); - V(e, e.dyn_ltree, t - 1), V(e, e.dyn_dtree, r - 1); - })(e, e.l_desc.max_code + 1, e.d_desc.max_code + 1, a + 1), - K(e, e.dyn_ltree, e.dyn_dtree)), - W(e), - n && M(e); - }), - (r._tr_tally = function (e, t, r) { - return ( - (e.pending_buf[e.d_buf + 2 * e.last_lit] = (t >>> 8) & 255), - (e.pending_buf[e.d_buf + 2 * e.last_lit + 1] = 255 & t), - (e.pending_buf[e.l_buf + e.last_lit] = 255 & r), - e.last_lit++, - 0 === t - ? e.dyn_ltree[2 * r]++ - : (e.matches++, - t--, - e.dyn_ltree[2 * (A[r] + u + 1)]++, - e.dyn_dtree[2 * N(t)]++), - e.last_lit === e.lit_bufsize - 1 - ); - }), - (r._tr_align = function (e) { - P(e, 2, 3), - L(e, m, z), - (function (e) { - 16 === e.bi_valid - ? (U(e, e.bi_buf), (e.bi_buf = 0), (e.bi_valid = 0)) - : 8 <= e.bi_valid && - ((e.pending_buf[e.pending++] = 255 & e.bi_buf), - (e.bi_buf >>= 8), - (e.bi_valid -= 8)); - })(e); - }); - }, - { "../utils/common": 41 }, - ], - 53: [ - function (e, t, r) { - "use strict"; - t.exports = function () { - (this.input = null), - (this.next_in = 0), - (this.avail_in = 0), - (this.total_in = 0), - (this.output = null), - (this.next_out = 0), - (this.avail_out = 0), - (this.total_out = 0), - (this.msg = ""), - (this.state = null), - (this.data_type = 2), - (this.adler = 0); - }; - }, - {}, - ], - 54: [ - function (e, t, r) { - (function (e) { - !(function (r, n) { - "use strict"; - if (!r.setImmediate) { - var i, - s, - t, - a, - o = 1, - h = {}, - u = !1, - l = r.document, - e = Object.getPrototypeOf && Object.getPrototypeOf(r); - (e = e && e.setTimeout ? e : r), - (i = - "[object process]" === {}.toString.call(r.process) - ? function (e) { - process.nextTick(function () { - c(e); - }); - } - : (function () { - if (r.postMessage && !r.importScripts) { - var e = !0, - t = r.onmessage; - return ( - (r.onmessage = function () { - e = !1; - }), - r.postMessage("", "*"), - (r.onmessage = t), - e - ); - } - })() - ? ((a = "setImmediate$" + Math.random() + "$"), - r.addEventListener - ? r.addEventListener("message", d, !1) - : r.attachEvent("onmessage", d), - function (e) { - r.postMessage(a + e, "*"); - }) - : r.MessageChannel - ? (((t = new MessageChannel()).port1.onmessage = - function (e) { - c(e.data); - }), - function (e) { - t.port2.postMessage(e); - }) - : l && "onreadystatechange" in l.createElement("script") - ? ((s = l.documentElement), - function (e) { - var t = l.createElement("script"); - (t.onreadystatechange = function () { - c(e), - (t.onreadystatechange = null), - s.removeChild(t), - (t = null); - }), - s.appendChild(t); - }) - : function (e) { - setTimeout(c, 0, e); - }), - (e.setImmediate = function (e) { - "function" != typeof e && (e = new Function("" + e)); - for ( - var t = new Array(arguments.length - 1), r = 0; - r < t.length; - r++ - ) - t[r] = arguments[r + 1]; - var n = { callback: e, args: t }; - return (h[o] = n), i(o), o++; - }), - (e.clearImmediate = f); - } - function f(e) { - delete h[e]; - } - function c(e) { - if (u) setTimeout(c, 0, e); - else { - var t = h[e]; - if (t) { - u = !0; - try { - !(function (e) { - var t = e.callback, - r = e.args; - switch (r.length) { - case 0: - t(); - break; - case 1: - t(r[0]); - break; - case 2: - t(r[0], r[1]); - break; - case 3: - t(r[0], r[1], r[2]); - break; - default: - t.apply(n, r); - } - })(t); - } finally { - f(e), (u = !1); - } - } - } - } - function d(e) { - e.source === r && - "string" == typeof e.data && - 0 === e.data.indexOf(a) && - c(+e.data.slice(a.length)); - } - })("undefined" == typeof self ? (void 0 === e ? this : e) : self); - }).call( - this, - "undefined" != typeof global - ? global - : "undefined" != typeof self - ? self - : "undefined" != typeof window - ? window - : {}, - ); - }, - {}, - ], - }, - {}, - [10], - )(10); -});