{"version":3,"sources":["../../nodejs/node_modules/adm-zip/util/fileSystem.js","../../nodejs/node_modules/adm-zip/util/constants.js","../../nodejs/node_modules/adm-zip/util/errors.js","../../nodejs/node_modules/adm-zip/util/utils.js","../../nodejs/node_modules/adm-zip/util/fattr.js","../../nodejs/node_modules/adm-zip/util/index.js","../../nodejs/node_modules/adm-zip/headers/entryHeader.js","../../nodejs/node_modules/adm-zip/headers/mainHeader.js","../../nodejs/node_modules/adm-zip/headers/index.js","../../nodejs/node_modules/adm-zip/methods/deflater.js","../../nodejs/node_modules/adm-zip/methods/inflater.js","../../nodejs/node_modules/adm-zip/methods/zipcrypto.js","../../nodejs/node_modules/adm-zip/methods/index.js","../../nodejs/node_modules/adm-zip/zipEntry.js","../../nodejs/node_modules/adm-zip/zipFile.js","../../nodejs/node_modules/adm-zip/adm-zip.js","../../nodejs/package.json","../../nodejs/src/versions.ts","../../nodejs/src/util.ts","../../nodejs/src/cpython.ts","../../nodejs/src/graalpy.ts","../../nodejs/src/pypy.ts","../../nodejs/src/index.ts","../src/pythonVersion.ts","../src/index.ts"],"sourcesContent":["exports.require = function () {\n    if (typeof process === \"object\" && process.versions && process.versions[\"electron\"]) {\n        try {\n            const originalFs = require(\"original-fs\");\n            if (Object.keys(originalFs).length > 0) {\n                return originalFs;\n            }\n        } catch (e) {}\n    }\n    return require(\"fs\");\n};\n","module.exports = {\n    /* The local file header */\n    LOCHDR           : 30, // LOC header size\n    LOCSIG           : 0x04034b50, // \"PK\\003\\004\"\n    LOCVER           : 4,\t// version needed to extract\n    LOCFLG           : 6, // general purpose bit flag\n    LOCHOW           : 8, // compression method\n    LOCTIM           : 10, // modification time (2 bytes time, 2 bytes date)\n    LOCCRC           : 14, // uncompressed file crc-32 value\n    LOCSIZ           : 18, // compressed size\n    LOCLEN           : 22, // uncompressed size\n    LOCNAM           : 26, // filename length\n    LOCEXT           : 28, // extra field length\n\n    /* The Data descriptor */\n    EXTSIG           : 0x08074b50, // \"PK\\007\\008\"\n    EXTHDR           : 16, // EXT header size\n    EXTCRC           : 4, // uncompressed file crc-32 value\n    EXTSIZ           : 8, // compressed size\n    EXTLEN           : 12, // uncompressed size\n\n    /* The central directory file header */\n    CENHDR           : 46, // CEN header size\n    CENSIG           : 0x02014b50, // \"PK\\001\\002\"\n    CENVEM           : 4, // version made by\n    CENVER           : 6, // version needed to extract\n    CENFLG           : 8, // encrypt, decrypt flags\n    CENHOW           : 10, // compression method\n    CENTIM           : 12, // modification time (2 bytes time, 2 bytes date)\n    CENCRC           : 16, // uncompressed file crc-32 value\n    CENSIZ           : 20, // compressed size\n    CENLEN           : 24, // uncompressed size\n    CENNAM           : 28, // filename length\n    CENEXT           : 30, // extra field length\n    CENCOM           : 32, // file comment length\n    CENDSK           : 34, // volume number start\n    CENATT           : 36, // internal file attributes\n    CENATX           : 38, // external file attributes (host system dependent)\n    CENOFF           : 42, // LOC header offset\n\n    /* The entries in the end of central directory */\n    ENDHDR           : 22, // END header size\n    ENDSIG           : 0x06054b50, // \"PK\\005\\006\"\n    ENDSUB           : 8, // number of entries on this disk\n    ENDTOT           : 10, // total number of entries\n    ENDSIZ           : 12, // central directory size in bytes\n    ENDOFF           : 16, // offset of first CEN header\n    ENDCOM           : 20, // zip file comment length\n\n    END64HDR         : 20, // zip64 END header size\n    END64SIG         : 0x07064b50, // zip64 Locator signature, \"PK\\006\\007\"\n    END64START       : 4, // number of the disk with the start of the zip64\n    END64OFF         : 8, // relative offset of the zip64 end of central directory\n    END64NUMDISKS    : 16, // total number of disks\n\n    ZIP64SIG         : 0x06064b50, // zip64 signature, \"PK\\006\\006\"\n    ZIP64HDR         : 56, // zip64 record minimum size\n    ZIP64LEAD        : 12, // leading bytes at the start of the record, not counted by the value stored in ZIP64SIZE\n    ZIP64SIZE        : 4, // zip64 size of the central directory record\n    ZIP64VEM         : 12, // zip64 version made by\n    ZIP64VER         : 14, // zip64 version needed to extract\n    ZIP64DSK         : 16, // zip64 number of this disk\n    ZIP64DSKDIR      : 20, // number of the disk with the start of the record directory\n    ZIP64SUB         : 24, // number of entries on this disk\n    ZIP64TOT         : 32, // total number of entries\n    ZIP64SIZB        : 40, // zip64 central directory size in bytes\n    ZIP64OFF         : 48, // offset of start of central directory with respect to the starting disk number\n    ZIP64EXTRA       : 56, // extensible data sector\n\n    /* Compression methods */\n    STORED           : 0, // no compression\n    SHRUNK           : 1, // shrunk\n    REDUCED1         : 2, // reduced with compression factor 1\n    REDUCED2         : 3, // reduced with compression factor 2\n    REDUCED3         : 4, // reduced with compression factor 3\n    REDUCED4         : 5, // reduced with compression factor 4\n    IMPLODED         : 6, // imploded\n    // 7 reserved for Tokenizing compression algorithm\n    DEFLATED         : 8, // deflated\n    ENHANCED_DEFLATED: 9, // enhanced deflated\n    PKWARE           : 10,// PKWare DCL imploded\n    // 11 reserved by PKWARE\n    BZIP2            : 12, //  compressed using BZIP2\n    // 13 reserved by PKWARE\n    LZMA             : 14, // LZMA\n    // 15-17 reserved by PKWARE\n    IBM_TERSE        : 18, // compressed using IBM TERSE\n    IBM_LZ77         : 19, // IBM LZ77 z\n    AES_ENCRYPT      : 99, // WinZIP AES encryption method\n\n    /* General purpose bit flag */\n    // values can obtained with expression 2**bitnr\n    FLG_ENC          : 1,    // Bit 0: encrypted file\n    FLG_COMP1        : 2,    // Bit 1, compression option\n    FLG_COMP2        : 4,    // Bit 2, compression option\n    FLG_DESC         : 8,    // Bit 3, data descriptor\n    FLG_ENH          : 16,   // Bit 4, enhanced deflating\n    FLG_PATCH        : 32,   // Bit 5, indicates that the file is compressed patched data.\n    FLG_STR          : 64,   // Bit 6, strong encryption (patented)\n                             // Bits 7-10: Currently unused.\n    FLG_EFS          : 2048, // Bit 11: Language encoding flag (EFS)\n                             // Bit 12: Reserved by PKWARE for enhanced compression.\n                             // Bit 13: encrypted the Central Directory (patented).\n                             // Bits 14-15: Reserved by PKWARE.\n    FLG_MSK          : 4096, // mask header values\n\n    /* Load type */\n    FILE             : 2,\n    BUFFER           : 1,\n    NONE             : 0,\n\n    /* 4.5 Extensible data fields */\n    EF_ID            : 0,\n    EF_SIZE          : 2,\n\n    /* Header IDs */\n    ID_ZIP64         : 0x0001,\n    ID_AVINFO        : 0x0007,\n    ID_PFS           : 0x0008,\n    ID_OS2           : 0x0009,\n    ID_NTFS          : 0x000a,\n    ID_OPENVMS       : 0x000c,\n    ID_UNIX          : 0x000d,\n    ID_FORK          : 0x000e,\n    ID_PATCH         : 0x000f,\n    ID_X509_PKCS7    : 0x0014,\n    ID_X509_CERTID_F : 0x0015,\n    ID_X509_CERTID_C : 0x0016,\n    ID_STRONGENC     : 0x0017,\n    ID_RECORD_MGT    : 0x0018,\n    ID_X509_PKCS7_RL : 0x0019,\n    ID_IBM1          : 0x0065,\n    ID_IBM2          : 0x0066,\n    ID_POSZIP        : 0x4690,\n\n    EF_ZIP64_OR_32   : 0xffffffff,\n    EF_ZIP64_OR_16   : 0xffff,\n    EF_ZIP64_SUNCOMP : 0,\n    EF_ZIP64_SCOMP   : 8,\n    EF_ZIP64_RHO     : 16,\n    EF_ZIP64_DSN     : 24\n};\n","module.exports = {\n    /* Header error messages */\n    INVALID_LOC: \"Invalid LOC header (bad signature)\",\n    INVALID_CEN: \"Invalid CEN header (bad signature)\",\n    INVALID_END: \"Invalid END header (bad signature)\",\n\n    /* ZipEntry error messages*/\n    NO_DATA: \"Nothing to decompress\",\n    BAD_CRC: \"CRC32 checksum failed\",\n    FILE_IN_THE_WAY: \"There is a file in the way: %s\",\n    UNKNOWN_METHOD: \"Invalid/unsupported compression method\",\n\n    /* Inflater error messages */\n    AVAIL_DATA: \"inflate::Available inflate data did not terminate\",\n    INVALID_DISTANCE: \"inflate::Invalid literal/length or distance code in fixed or dynamic block\",\n    TO_MANY_CODES: \"inflate::Dynamic block code description: too many length or distance codes\",\n    INVALID_REPEAT_LEN: \"inflate::Dynamic block code description: repeat more than specified lengths\",\n    INVALID_REPEAT_FIRST: \"inflate::Dynamic block code description: repeat lengths with no first length\",\n    INCOMPLETE_CODES: \"inflate::Dynamic block code description: code lengths codes incomplete\",\n    INVALID_DYN_DISTANCE: \"inflate::Dynamic block code description: invalid distance code lengths\",\n    INVALID_CODES_LEN: \"inflate::Dynamic block code description: invalid literal/length code lengths\",\n    INVALID_STORE_BLOCK: \"inflate::Stored block length did not match one's complement\",\n    INVALID_BLOCK_TYPE: \"inflate::Invalid block type (type == 3)\",\n\n    /* ADM-ZIP error messages */\n    CANT_EXTRACT_FILE: \"Could not extract the file\",\n    CANT_OVERRIDE: \"Target file already exists\",\n    NO_ZIP: \"No zip file was loaded\",\n    NO_ENTRY: \"Entry doesn't exist\",\n    DIRECTORY_CONTENT_ERROR: \"A directory cannot have content\",\n    FILE_NOT_FOUND: \"File not found: %s\",\n    NOT_IMPLEMENTED: \"Not implemented\",\n    INVALID_FILENAME: \"Invalid filename\",\n    INVALID_FORMAT: \"Invalid or unsupported zip format. No END header found\"\n};\n","const fsystem = require(\"./fileSystem\").require();\nconst pth = require(\"path\");\nconst Constants = require(\"./constants\");\nconst Errors = require(\"./errors\");\nconst isWin = typeof process === \"object\" && \"win32\" === process.platform;\n\nconst is_Obj = (obj) => obj && typeof obj === \"object\";\n\n// generate CRC32 lookup table\nconst crcTable = new Uint32Array(256).map((t, c) => {\n    for (let k = 0; k < 8; k++) {\n        if ((c & 1) !== 0) {\n            c = 0xedb88320 ^ (c >>> 1);\n        } else {\n            c >>>= 1;\n        }\n    }\n    return c >>> 0;\n});\n\n// UTILS functions\n\nfunction Utils(opts) {\n    this.sep = pth.sep;\n    this.fs = fsystem;\n\n    if (is_Obj(opts)) {\n        // custom filesystem\n        if (is_Obj(opts.fs) && typeof opts.fs.statSync === \"function\") {\n            this.fs = opts.fs;\n        }\n    }\n}\n\nmodule.exports = Utils;\n\n// INSTANCED functions\n\nUtils.prototype.makeDir = function (/*String*/ folder) {\n    const self = this;\n\n    // Sync - make directories tree\n    function mkdirSync(/*String*/ fpath) {\n        let resolvedPath = fpath.split(self.sep)[0];\n        fpath.split(self.sep).forEach(function (name) {\n            if (!name || name.substr(-1, 1) === \":\") return;\n            resolvedPath += self.sep + name;\n            var stat;\n            try {\n                stat = self.fs.statSync(resolvedPath);\n            } catch (e) {\n                self.fs.mkdirSync(resolvedPath);\n            }\n            if (stat && stat.isFile()) throw Errors.FILE_IN_THE_WAY.replace(\"%s\", resolvedPath);\n        });\n    }\n\n    mkdirSync(folder);\n};\n\nUtils.prototype.writeFileTo = function (/*String*/ path, /*Buffer*/ content, /*Boolean*/ overwrite, /*Number*/ attr) {\n    const self = this;\n    if (self.fs.existsSync(path)) {\n        if (!overwrite) return false; // cannot overwrite\n\n        var stat = self.fs.statSync(path);\n        if (stat.isDirectory()) {\n            return false;\n        }\n    }\n    var folder = pth.dirname(path);\n    if (!self.fs.existsSync(folder)) {\n        self.makeDir(folder);\n    }\n\n    var fd;\n    try {\n        fd = self.fs.openSync(path, \"w\", 438); // 0666\n    } catch (e) {\n        self.fs.chmodSync(path, 438);\n        fd = self.fs.openSync(path, \"w\", 438);\n    }\n    if (fd) {\n        try {\n            self.fs.writeSync(fd, content, 0, content.length, 0);\n        } finally {\n            self.fs.closeSync(fd);\n        }\n    }\n    self.fs.chmodSync(path, attr || 438);\n    return true;\n};\n\nUtils.prototype.writeFileToAsync = function (/*String*/ path, /*Buffer*/ content, /*Boolean*/ overwrite, /*Number*/ attr, /*Function*/ callback) {\n    if (typeof attr === \"function\") {\n        callback = attr;\n        attr = undefined;\n    }\n\n    const self = this;\n\n    self.fs.exists(path, function (exist) {\n        if (exist && !overwrite) return callback(false);\n\n        self.fs.stat(path, function (err, stat) {\n            if (exist && stat.isDirectory()) {\n                return callback(false);\n            }\n\n            var folder = pth.dirname(path);\n            self.fs.exists(folder, function (exists) {\n                if (!exists) self.makeDir(folder);\n\n                self.fs.open(path, \"w\", 438, function (err, fd) {\n                    if (err) {\n                        self.fs.chmod(path, 438, function () {\n                            self.fs.open(path, \"w\", 438, function (err, fd) {\n                                self.fs.write(fd, content, 0, content.length, 0, function () {\n                                    self.fs.close(fd, function () {\n                                        self.fs.chmod(path, attr || 438, function () {\n                                            callback(true);\n                                        });\n                                    });\n                                });\n                            });\n                        });\n                    } else if (fd) {\n                        self.fs.write(fd, content, 0, content.length, 0, function () {\n                            self.fs.close(fd, function () {\n                                self.fs.chmod(path, attr || 438, function () {\n                                    callback(true);\n                                });\n                            });\n                        });\n                    } else {\n                        self.fs.chmod(path, attr || 438, function () {\n                            callback(true);\n                        });\n                    }\n                });\n            });\n        });\n    });\n};\n\nUtils.prototype.findFiles = function (/*String*/ path) {\n    const self = this;\n\n    function findSync(/*String*/ dir, /*RegExp*/ pattern, /*Boolean*/ recursive) {\n        if (typeof pattern === \"boolean\") {\n            recursive = pattern;\n            pattern = undefined;\n        }\n        let files = [];\n        self.fs.readdirSync(dir).forEach(function (file) {\n            var path = pth.join(dir, file);\n\n            if (self.fs.statSync(path).isDirectory() && recursive) files = files.concat(findSync(path, pattern, recursive));\n\n            if (!pattern || pattern.test(path)) {\n                files.push(pth.normalize(path) + (self.fs.statSync(path).isDirectory() ? self.sep : \"\"));\n            }\n        });\n        return files;\n    }\n\n    return findSync(path, undefined, true);\n};\n\nUtils.prototype.getAttributes = function () {};\n\nUtils.prototype.setAttributes = function () {};\n\n// STATIC functions\n\n// crc32 single update (it is part of crc32)\nUtils.crc32update = function (crc, byte) {\n    return crcTable[(crc ^ byte) & 0xff] ^ (crc >>> 8);\n};\n\nUtils.crc32 = function (buf) {\n    if (typeof buf === \"string\") {\n        buf = Buffer.from(buf, \"utf8\");\n    }\n    // Generate crcTable\n    if (!crcTable.length) genCRCTable();\n\n    let len = buf.length;\n    let crc = ~0;\n    for (let off = 0; off < len; ) crc = Utils.crc32update(crc, buf[off++]);\n    // xor and cast as uint32 number\n    return ~crc >>> 0;\n};\n\nUtils.methodToString = function (/*Number*/ method) {\n    switch (method) {\n        case Constants.STORED:\n            return \"STORED (\" + method + \")\";\n        case Constants.DEFLATED:\n            return \"DEFLATED (\" + method + \")\";\n        default:\n            return \"UNSUPPORTED (\" + method + \")\";\n    }\n};\n\n// removes \"..\" style path elements\nUtils.canonical = function (/*string*/ path) {\n    if (!path) return \"\";\n    // trick normalize think path is absolute\n    var safeSuffix = pth.posix.normalize(\"/\" + path.split(\"\\\\\").join(\"/\"));\n    return pth.join(\".\", safeSuffix);\n};\n\n// make abolute paths taking prefix as root folder\nUtils.sanitize = function (/*string*/ prefix, /*string*/ name) {\n    prefix = pth.resolve(pth.normalize(prefix));\n    var parts = name.split(\"/\");\n    for (var i = 0, l = parts.length; i < l; i++) {\n        var path = pth.normalize(pth.join(prefix, parts.slice(i, l).join(pth.sep)));\n        if (path.indexOf(prefix) === 0) {\n            return path;\n        }\n    }\n    return pth.normalize(pth.join(prefix, pth.basename(name)));\n};\n\n// converts buffer, Uint8Array, string types to buffer\nUtils.toBuffer = function toBuffer(/*buffer, Uint8Array, string*/ input) {\n    if (Buffer.isBuffer(input)) {\n        return input;\n    } else if (input instanceof Uint8Array) {\n        return Buffer.from(input);\n    } else {\n        // expect string all other values are invalid and return empty buffer\n        return typeof input === \"string\" ? Buffer.from(input, \"utf8\") : Buffer.alloc(0);\n    }\n};\n\nUtils.readBigUInt64LE = function (/*Buffer*/ buffer, /*int*/ index) {\n    var slice = Buffer.from(buffer.slice(index, index + 8));\n    slice.swap64();\n\n    return parseInt(`0x${slice.toString(\"hex\")}`);\n};\n\nUtils.isWin = isWin; // Do we have windows system\nUtils.crcTable = crcTable;\n","const fs = require(\"./fileSystem\").require();\nconst pth = require(\"path\");\n\nfs.existsSync = fs.existsSync || pth.existsSync;\n\nmodule.exports = function (/*String*/ path) {\n    var _path = path || \"\",\n        _obj = newAttr(),\n        _stat = null;\n\n    function newAttr() {\n        return {\n            directory: false,\n            readonly: false,\n            hidden: false,\n            executable: false,\n            mtime: 0,\n            atime: 0\n        };\n    }\n\n    if (_path && fs.existsSync(_path)) {\n        _stat = fs.statSync(_path);\n        _obj.directory = _stat.isDirectory();\n        _obj.mtime = _stat.mtime;\n        _obj.atime = _stat.atime;\n        _obj.executable = (0o111 & _stat.mode) !== 0; // file is executable who ever har right not just owner\n        _obj.readonly = (0o200 & _stat.mode) === 0; // readonly if owner has no write right\n        _obj.hidden = pth.basename(_path)[0] === \".\";\n    } else {\n        console.warn(\"Invalid path: \" + _path);\n    }\n\n    return {\n        get directory() {\n            return _obj.directory;\n        },\n\n        get readOnly() {\n            return _obj.readonly;\n        },\n\n        get hidden() {\n            return _obj.hidden;\n        },\n\n        get mtime() {\n            return _obj.mtime;\n        },\n\n        get atime() {\n            return _obj.atime;\n        },\n\n        get executable() {\n            return _obj.executable;\n        },\n\n        decodeAttributes: function () {},\n\n        encodeAttributes: function () {},\n\n        toJSON: function () {\n            return {\n                path: _path,\n                isDirectory: _obj.directory,\n                isReadOnly: _obj.readonly,\n                isHidden: _obj.hidden,\n                isExecutable: _obj.executable,\n                mTime: _obj.mtime,\n                aTime: _obj.atime\n            };\n        },\n\n        toString: function () {\n            return JSON.stringify(this.toJSON(), null, \"\\t\");\n        }\n    };\n};\n","module.exports = require(\"./utils\");\nmodule.exports.Constants = require(\"./constants\");\nmodule.exports.Errors = require(\"./errors\");\nmodule.exports.FileAttr = require(\"./fattr\");\n","var Utils = require(\"../util\"),\n    Constants = Utils.Constants;\n\n/* The central directory file header */\nmodule.exports = function () {\n    var _verMade = 20, // v2.0\n        _version = 10, // v1.0\n        _flags = 0,\n        _method = 0,\n        _time = 0,\n        _crc = 0,\n        _compressedSize = 0,\n        _size = 0,\n        _fnameLen = 0,\n        _extraLen = 0,\n        _comLen = 0,\n        _diskStart = 0,\n        _inattr = 0,\n        _attr = 0,\n        _offset = 0;\n\n    _verMade |= Utils.isWin ? 0x0a00 : 0x0300;\n\n    // Set EFS flag since filename and comment fields are all by default encoded using UTF-8.\n    // Without it file names may be corrupted for other apps when file names use unicode chars\n    _flags |= Constants.FLG_EFS;\n\n    var _dataHeader = {};\n\n    function setTime(val) {\n        val = new Date(val);\n        _time =\n            (((val.getFullYear() - 1980) & 0x7f) << 25) | // b09-16 years from 1980\n            ((val.getMonth() + 1) << 21) | // b05-08 month\n            (val.getDate() << 16) | // b00-04 hour\n            // 2 bytes time\n            (val.getHours() << 11) | // b11-15 hour\n            (val.getMinutes() << 5) | // b05-10 minute\n            (val.getSeconds() >> 1); // b00-04 seconds divided by 2\n    }\n\n    setTime(+new Date());\n\n    return {\n        get made() {\n            return _verMade;\n        },\n        set made(val) {\n            _verMade = val;\n        },\n\n        get version() {\n            return _version;\n        },\n        set version(val) {\n            _version = val;\n        },\n\n        get flags() {\n            return _flags;\n        },\n        set flags(val) {\n            _flags = val;\n        },\n\n        get method() {\n            return _method;\n        },\n        set method(val) {\n            switch (val) {\n                case Constants.STORED:\n                    this.version = 10;\n                case Constants.DEFLATED:\n                default:\n                    this.version = 20;\n            }\n            _method = val;\n        },\n\n        get time() {\n            return new Date(((_time >> 25) & 0x7f) + 1980, ((_time >> 21) & 0x0f) - 1, (_time >> 16) & 0x1f, (_time >> 11) & 0x1f, (_time >> 5) & 0x3f, (_time & 0x1f) << 1);\n        },\n        set time(val) {\n            setTime(val);\n        },\n\n        get crc() {\n            return _crc;\n        },\n        set crc(val) {\n            _crc = Math.max(0, val) >>> 0;\n        },\n\n        get compressedSize() {\n            return _compressedSize;\n        },\n        set compressedSize(val) {\n            _compressedSize = Math.max(0, val) >>> 0;\n        },\n\n        get size() {\n            return _size;\n        },\n        set size(val) {\n            _size = Math.max(0, val) >>> 0;\n        },\n\n        get fileNameLength() {\n            return _fnameLen;\n        },\n        set fileNameLength(val) {\n            _fnameLen = val;\n        },\n\n        get extraLength() {\n            return _extraLen;\n        },\n        set extraLength(val) {\n            _extraLen = val;\n        },\n\n        get commentLength() {\n            return _comLen;\n        },\n        set commentLength(val) {\n            _comLen = val;\n        },\n\n        get diskNumStart() {\n            return _diskStart;\n        },\n        set diskNumStart(val) {\n            _diskStart = Math.max(0, val) >>> 0;\n        },\n\n        get inAttr() {\n            return _inattr;\n        },\n        set inAttr(val) {\n            _inattr = Math.max(0, val) >>> 0;\n        },\n\n        get attr() {\n            return _attr;\n        },\n        set attr(val) {\n            _attr = Math.max(0, val) >>> 0;\n        },\n\n        // get Unix file permissions\n        get fileAttr() {\n            return _attr ? (((_attr >>> 0) | 0) >> 16) & 0xfff : 0;\n        },\n\n        get offset() {\n            return _offset;\n        },\n        set offset(val) {\n            _offset = Math.max(0, val) >>> 0;\n        },\n\n        get encripted() {\n            return (_flags & 1) === 1;\n        },\n\n        get entryHeaderSize() {\n            return Constants.CENHDR + _fnameLen + _extraLen + _comLen;\n        },\n\n        get realDataOffset() {\n            return _offset + Constants.LOCHDR + _dataHeader.fnameLen + _dataHeader.extraLen;\n        },\n\n        get dataHeader() {\n            return _dataHeader;\n        },\n\n        loadDataHeaderFromBinary: function (/*Buffer*/ input) {\n            var data = input.slice(_offset, _offset + Constants.LOCHDR);\n            // 30 bytes and should start with \"PK\\003\\004\"\n            if (data.readUInt32LE(0) !== Constants.LOCSIG) {\n                throw new Error(Utils.Errors.INVALID_LOC);\n            }\n            _dataHeader = {\n                // version needed to extract\n                version: data.readUInt16LE(Constants.LOCVER),\n                // general purpose bit flag\n                flags: data.readUInt16LE(Constants.LOCFLG),\n                // compression method\n                method: data.readUInt16LE(Constants.LOCHOW),\n                // modification time (2 bytes time, 2 bytes date)\n                time: data.readUInt32LE(Constants.LOCTIM),\n                // uncompressed file crc-32 value\n                crc: data.readUInt32LE(Constants.LOCCRC),\n                // compressed size\n                compressedSize: data.readUInt32LE(Constants.LOCSIZ),\n                // uncompressed size\n                size: data.readUInt32LE(Constants.LOCLEN),\n                // filename length\n                fnameLen: data.readUInt16LE(Constants.LOCNAM),\n                // extra field length\n                extraLen: data.readUInt16LE(Constants.LOCEXT)\n            };\n        },\n\n        loadFromBinary: function (/*Buffer*/ data) {\n            // data should be 46 bytes and start with \"PK 01 02\"\n            if (data.length !== Constants.CENHDR || data.readUInt32LE(0) !== Constants.CENSIG) {\n                throw new Error(Utils.Errors.INVALID_CEN);\n            }\n            // version made by\n            _verMade = data.readUInt16LE(Constants.CENVEM);\n            // version needed to extract\n            _version = data.readUInt16LE(Constants.CENVER);\n            // encrypt, decrypt flags\n            _flags = data.readUInt16LE(Constants.CENFLG);\n            // compression method\n            _method = data.readUInt16LE(Constants.CENHOW);\n            // modification time (2 bytes time, 2 bytes date)\n            _time = data.readUInt32LE(Constants.CENTIM);\n            // uncompressed file crc-32 value\n            _crc = data.readUInt32LE(Constants.CENCRC);\n            // compressed size\n            _compressedSize = data.readUInt32LE(Constants.CENSIZ);\n            // uncompressed size\n            _size = data.readUInt32LE(Constants.CENLEN);\n            // filename length\n            _fnameLen = data.readUInt16LE(Constants.CENNAM);\n            // extra field length\n            _extraLen = data.readUInt16LE(Constants.CENEXT);\n            // file comment length\n            _comLen = data.readUInt16LE(Constants.CENCOM);\n            // volume number start\n            _diskStart = data.readUInt16LE(Constants.CENDSK);\n            // internal file attributes\n            _inattr = data.readUInt16LE(Constants.CENATT);\n            // external file attributes\n            _attr = data.readUInt32LE(Constants.CENATX);\n            // LOC header offset\n            _offset = data.readUInt32LE(Constants.CENOFF);\n        },\n\n        dataHeaderToBinary: function () {\n            // LOC header size (30 bytes)\n            var data = Buffer.alloc(Constants.LOCHDR);\n            // \"PK\\003\\004\"\n            data.writeUInt32LE(Constants.LOCSIG, 0);\n            // version needed to extract\n            data.writeUInt16LE(_version, Constants.LOCVER);\n            // general purpose bit flag\n            data.writeUInt16LE(_flags, Constants.LOCFLG);\n            // compression method\n            data.writeUInt16LE(_method, Constants.LOCHOW);\n            // modification time (2 bytes time, 2 bytes date)\n            data.writeUInt32LE(_time, Constants.LOCTIM);\n            // uncompressed file crc-32 value\n            data.writeUInt32LE(_crc, Constants.LOCCRC);\n            // compressed size\n            data.writeUInt32LE(_compressedSize, Constants.LOCSIZ);\n            // uncompressed size\n            data.writeUInt32LE(_size, Constants.LOCLEN);\n            // filename length\n            data.writeUInt16LE(_fnameLen, Constants.LOCNAM);\n            // extra field length\n            data.writeUInt16LE(_extraLen, Constants.LOCEXT);\n            return data;\n        },\n\n        entryHeaderToBinary: function () {\n            // CEN header size (46 bytes)\n            var data = Buffer.alloc(Constants.CENHDR + _fnameLen + _extraLen + _comLen);\n            // \"PK\\001\\002\"\n            data.writeUInt32LE(Constants.CENSIG, 0);\n            // version made by\n            data.writeUInt16LE(_verMade, Constants.CENVEM);\n            // version needed to extract\n            data.writeUInt16LE(_version, Constants.CENVER);\n            // encrypt, decrypt flags\n            data.writeUInt16LE(_flags, Constants.CENFLG);\n            // compression method\n            data.writeUInt16LE(_method, Constants.CENHOW);\n            // modification time (2 bytes time, 2 bytes date)\n            data.writeUInt32LE(_time, Constants.CENTIM);\n            // uncompressed file crc-32 value\n            data.writeUInt32LE(_crc, Constants.CENCRC);\n            // compressed size\n            data.writeUInt32LE(_compressedSize, Constants.CENSIZ);\n            // uncompressed size\n            data.writeUInt32LE(_size, Constants.CENLEN);\n            // filename length\n            data.writeUInt16LE(_fnameLen, Constants.CENNAM);\n            // extra field length\n            data.writeUInt16LE(_extraLen, Constants.CENEXT);\n            // file comment length\n            data.writeUInt16LE(_comLen, Constants.CENCOM);\n            // volume number start\n            data.writeUInt16LE(_diskStart, Constants.CENDSK);\n            // internal file attributes\n            data.writeUInt16LE(_inattr, Constants.CENATT);\n            // external file attributes\n            data.writeUInt32LE(_attr, Constants.CENATX);\n            // LOC header offset\n            data.writeUInt32LE(_offset, Constants.CENOFF);\n            // fill all with\n            data.fill(0x00, Constants.CENHDR);\n            return data;\n        },\n\n        toJSON: function () {\n            const bytes = function (nr) {\n                return nr + \" bytes\";\n            };\n\n            return {\n                made: _verMade,\n                version: _version,\n                flags: _flags,\n                method: Utils.methodToString(_method),\n                time: this.time,\n                crc: \"0x\" + _crc.toString(16).toUpperCase(),\n                compressedSize: bytes(_compressedSize),\n                size: bytes(_size),\n                fileNameLength: bytes(_fnameLen),\n                extraLength: bytes(_extraLen),\n                commentLength: bytes(_comLen),\n                diskNumStart: _diskStart,\n                inAttr: _inattr,\n                attr: _attr,\n                offset: _offset,\n                entryHeaderSize: bytes(Constants.CENHDR + _fnameLen + _extraLen + _comLen)\n            };\n        },\n\n        toString: function () {\n            return JSON.stringify(this.toJSON(), null, \"\\t\");\n        }\n    };\n};\n","var Utils = require(\"../util\"),\n    Constants = Utils.Constants;\n\n/* The entries in the end of central directory */\nmodule.exports = function () {\n    var _volumeEntries = 0,\n        _totalEntries = 0,\n        _size = 0,\n        _offset = 0,\n        _commentLength = 0;\n\n    return {\n        get diskEntries() {\n            return _volumeEntries;\n        },\n        set diskEntries(/*Number*/ val) {\n            _volumeEntries = _totalEntries = val;\n        },\n\n        get totalEntries() {\n            return _totalEntries;\n        },\n        set totalEntries(/*Number*/ val) {\n            _totalEntries = _volumeEntries = val;\n        },\n\n        get size() {\n            return _size;\n        },\n        set size(/*Number*/ val) {\n            _size = val;\n        },\n\n        get offset() {\n            return _offset;\n        },\n        set offset(/*Number*/ val) {\n            _offset = val;\n        },\n\n        get commentLength() {\n            return _commentLength;\n        },\n        set commentLength(/*Number*/ val) {\n            _commentLength = val;\n        },\n\n        get mainHeaderSize() {\n            return Constants.ENDHDR + _commentLength;\n        },\n\n        loadFromBinary: function (/*Buffer*/ data) {\n            // data should be 22 bytes and start with \"PK 05 06\"\n            // or be 56+ bytes and start with \"PK 06 06\" for Zip64\n            if (\n                (data.length !== Constants.ENDHDR || data.readUInt32LE(0) !== Constants.ENDSIG) &&\n                (data.length < Constants.ZIP64HDR || data.readUInt32LE(0) !== Constants.ZIP64SIG)\n            ) {\n                throw new Error(Utils.Errors.INVALID_END);\n            }\n\n            if (data.readUInt32LE(0) === Constants.ENDSIG) {\n                // number of entries on this volume\n                _volumeEntries = data.readUInt16LE(Constants.ENDSUB);\n                // total number of entries\n                _totalEntries = data.readUInt16LE(Constants.ENDTOT);\n                // central directory size in bytes\n                _size = data.readUInt32LE(Constants.ENDSIZ);\n                // offset of first CEN header\n                _offset = data.readUInt32LE(Constants.ENDOFF);\n                // zip file comment length\n                _commentLength = data.readUInt16LE(Constants.ENDCOM);\n            } else {\n                // number of entries on this volume\n                _volumeEntries = Utils.readBigUInt64LE(data, Constants.ZIP64SUB);\n                // total number of entries\n                _totalEntries = Utils.readBigUInt64LE(data, Constants.ZIP64TOT);\n                // central directory size in bytes\n                _size = Utils.readBigUInt64LE(data, Constants.ZIP64SIZE);\n                // offset of first CEN header\n                _offset = Utils.readBigUInt64LE(data, Constants.ZIP64OFF);\n\n                _commentLength = 0;\n            }\n        },\n\n        toBinary: function () {\n            var b = Buffer.alloc(Constants.ENDHDR + _commentLength);\n            // \"PK 05 06\" signature\n            b.writeUInt32LE(Constants.ENDSIG, 0);\n            b.writeUInt32LE(0, 4);\n            // number of entries on this volume\n            b.writeUInt16LE(_volumeEntries, Constants.ENDSUB);\n            // total number of entries\n            b.writeUInt16LE(_totalEntries, Constants.ENDTOT);\n            // central directory size in bytes\n            b.writeUInt32LE(_size, Constants.ENDSIZ);\n            // offset of first CEN header\n            b.writeUInt32LE(_offset, Constants.ENDOFF);\n            // zip file comment length\n            b.writeUInt16LE(_commentLength, Constants.ENDCOM);\n            // fill comment memory with spaces so no garbage is left there\n            b.fill(\" \", Constants.ENDHDR);\n\n            return b;\n        },\n\n        toJSON: function () {\n            // creates 0x0000 style output\n            const offset = function (nr, len) {\n                let offs = nr.toString(16).toUpperCase();\n                while (offs.length < len) offs = \"0\" + offs;\n                return \"0x\" + offs;\n            };\n\n            return {\n                diskEntries: _volumeEntries,\n                totalEntries: _totalEntries,\n                size: _size + \" bytes\",\n                offset: offset(_offset, 4),\n                commentLength: _commentLength\n            };\n        },\n\n        toString: function () {\n            return JSON.stringify(this.toJSON(), null, \"\\t\");\n        }\n    };\n};\n // Misspelled ","exports.EntryHeader = require(\"./entryHeader\");\nexports.MainHeader = require(\"./mainHeader\");\n","module.exports = function (/*Buffer*/ inbuf) {\n    var zlib = require(\"zlib\");\n\n    var opts = { chunkSize: (parseInt(inbuf.length / 1024) + 1) * 1024 };\n\n    return {\n        deflate: function () {\n            return zlib.deflateRawSync(inbuf, opts);\n        },\n\n        deflateAsync: function (/*Function*/ callback) {\n            var tmp = zlib.createDeflateRaw(opts),\n                parts = [],\n                total = 0;\n            tmp.on(\"data\", function (data) {\n                parts.push(data);\n                total += data.length;\n            });\n            tmp.on(\"end\", function () {\n                var buf = Buffer.alloc(total),\n                    written = 0;\n                buf.fill(0);\n                for (var i = 0; i < parts.length; i++) {\n                    var part = parts[i];\n                    part.copy(buf, written);\n                    written += part.length;\n                }\n                callback && callback(buf);\n            });\n            tmp.end(inbuf);\n        }\n    };\n};\n","module.exports = function (/*Buffer*/ inbuf) {\n    var zlib = require(\"zlib\");\n\n    return {\n        inflate: function () {\n            return zlib.inflateRawSync(inbuf);\n        },\n\n        inflateAsync: function (/*Function*/ callback) {\n            var tmp = zlib.createInflateRaw(),\n                parts = [],\n                total = 0;\n            tmp.on(\"data\", function (data) {\n                parts.push(data);\n                total += data.length;\n            });\n            tmp.on(\"end\", function () {\n                var buf = Buffer.alloc(total),\n                    written = 0;\n                buf.fill(0);\n                for (var i = 0; i < parts.length; i++) {\n                    var part = parts[i];\n                    part.copy(buf, written);\n                    written += part.length;\n                }\n                callback && callback(buf);\n            });\n            tmp.end(inbuf);\n        }\n    };\n};\n","\"use strict\";\n\n// node crypt, we use it for generate salt\n// eslint-disable-next-line node/no-unsupported-features/node-builtins\nconst { randomFillSync } = require(\"crypto\");\n\n// generate CRC32 lookup table\nconst crctable = new Uint32Array(256).map((t, crc) => {\n    for (let j = 0; j < 8; j++) {\n        if (0 !== (crc & 1)) {\n            crc = (crc >>> 1) ^ 0xedb88320;\n        } else {\n            crc >>>= 1;\n        }\n    }\n    return crc >>> 0;\n});\n\n// C-style uInt32 Multiply (discards higher bits, when JS multiply discards lower bits)\nconst uMul = (a, b) => Math.imul(a, b) >>> 0;\n\n// crc32 byte single update (actually same function is part of utils.crc32 function :) )\nconst crc32update = (pCrc32, bval) => {\n    return crctable[(pCrc32 ^ bval) & 0xff] ^ (pCrc32 >>> 8);\n};\n\n// function for generating salt for encrytion header\nconst genSalt = () => {\n    if (\"function\" === typeof randomFillSync) {\n        return randomFillSync(Buffer.alloc(12));\n    } else {\n        // fallback if function is not defined\n        return genSalt.node();\n    }\n};\n\n// salt generation with node random function (mainly as fallback)\ngenSalt.node = () => {\n    const salt = Buffer.alloc(12);\n    const len = salt.length;\n    for (let i = 0; i < len; i++) salt[i] = (Math.random() * 256) & 0xff;\n    return salt;\n};\n\n// general config\nconst config = {\n    genSalt\n};\n\n// Class Initkeys handles same basic ops with keys\nfunction Initkeys(pw) {\n    const pass = Buffer.isBuffer(pw) ? pw : Buffer.from(pw);\n    this.keys = new Uint32Array([0x12345678, 0x23456789, 0x34567890]);\n    for (let i = 0; i < pass.length; i++) {\n        this.updateKeys(pass[i]);\n    }\n}\n\nInitkeys.prototype.updateKeys = function (byteValue) {\n    const keys = this.keys;\n    keys[0] = crc32update(keys[0], byteValue);\n    keys[1] += keys[0] & 0xff;\n    keys[1] = uMul(keys[1], 134775813) + 1;\n    keys[2] = crc32update(keys[2], keys[1] >>> 24);\n    return byteValue;\n};\n\nInitkeys.prototype.next = function () {\n    const k = (this.keys[2] | 2) >>> 0; // key\n    return (uMul(k, k ^ 1) >> 8) & 0xff; // decode\n};\n\nfunction make_decrypter(/*Buffer*/ pwd) {\n    // 1. Stage initialize key\n    const keys = new Initkeys(pwd);\n\n    // return decrypter function\n    return function (/*Buffer*/ data) {\n        // result - we create new Buffer for results\n        const result = Buffer.alloc(data.length);\n        let pos = 0;\n        // process input data\n        for (let c of data) {\n            //c ^= keys.next();\n            //result[pos++] = c; // decode & Save Value\n            result[pos++] = keys.updateKeys(c ^ keys.next()); // update keys with decoded byte\n        }\n        return result;\n    };\n}\n\nfunction make_encrypter(/*Buffer*/ pwd) {\n    // 1. Stage initialize key\n    const keys = new Initkeys(pwd);\n\n    // return encrypting function, result and pos is here so we dont have to merge buffers later\n    return function (/*Buffer*/ data, /*Buffer*/ result, /* Number */ pos = 0) {\n        // result - we create new Buffer for results\n        if (!result) result = Buffer.alloc(data.length);\n        // process input data\n        for (let c of data) {\n            const k = keys.next(); // save key byte\n            result[pos++] = c ^ k; // save val\n            keys.updateKeys(c); // update keys with decoded byte\n        }\n        return result;\n    };\n}\n\nfunction decrypt(/*Buffer*/ data, /*Object*/ header, /*String, Buffer*/ pwd) {\n    if (!data || !Buffer.isBuffer(data) || data.length < 12) {\n        return Buffer.alloc(0);\n    }\n\n    // 1. We Initialize and generate decrypting function\n    const decrypter = make_decrypter(pwd);\n\n    // 2. decrypt salt what is always 12 bytes and is a part of file content\n    const salt = decrypter(data.slice(0, 12));\n\n    // 3. does password meet expectations\n    if (salt[11] !== header.crc >>> 24) {\n        throw \"ADM-ZIP: Wrong Password\";\n    }\n\n    // 4. decode content\n    return decrypter(data.slice(12));\n}\n\n// lets add way to populate salt, NOT RECOMMENDED for production but maybe useful for testing general functionality\nfunction _salter(data) {\n    if (Buffer.isBuffer(data) && data.length >= 12) {\n        // be aware - currently salting buffer data is modified\n        config.genSalt = function () {\n            return data.slice(0, 12);\n        };\n    } else if (data === \"node\") {\n        // test salt generation with node random function\n        config.genSalt = genSalt.node;\n    } else {\n        // if value is not acceptable config gets reset.\n        config.genSalt = genSalt;\n    }\n}\n\nfunction encrypt(/*Buffer*/ data, /*Object*/ header, /*String, Buffer*/ pwd, /*Boolean*/ oldlike = false) {\n    // 1. test data if data is not Buffer we make buffer from it\n    if (data == null) data = Buffer.alloc(0);\n    // if data is not buffer be make buffer from it\n    if (!Buffer.isBuffer(data)) data = Buffer.from(data.toString());\n\n    // 2. We Initialize and generate encrypting function\n    const encrypter = make_encrypter(pwd);\n\n    // 3. generate salt (12-bytes of random data)\n    const salt = config.genSalt();\n    salt[11] = (header.crc >>> 24) & 0xff;\n\n    // old implementations (before PKZip 2.04g) used two byte check\n    if (oldlike) salt[10] = (header.crc >>> 16) & 0xff;\n\n    // 4. create output\n    const result = Buffer.alloc(data.length + 12);\n    encrypter(salt, result);\n\n    // finally encode content\n    return encrypter(data, result, 12);\n}\n\nmodule.exports = { decrypt, encrypt, _salter };\n","exports.Deflater = require(\"./deflater\");\nexports.Inflater = require(\"./inflater\");\nexports.ZipCrypto = require(\"./zipcrypto\");\n","var Utils = require(\"./util\"),\n    Headers = require(\"./headers\"),\n    Constants = Utils.Constants,\n    Methods = require(\"./methods\");\n\nmodule.exports = function (/*Buffer*/ input) {\n    var _entryHeader = new Headers.EntryHeader(),\n        _entryName = Buffer.alloc(0),\n        _comment = Buffer.alloc(0),\n        _isDirectory = false,\n        uncompressedData = null,\n        _extra = Buffer.alloc(0);\n\n    function getCompressedDataFromZip() {\n        if (!input || !Buffer.isBuffer(input)) {\n            return Buffer.alloc(0);\n        }\n        _entryHeader.loadDataHeaderFromBinary(input);\n        return input.slice(_entryHeader.realDataOffset, _entryHeader.realDataOffset + _entryHeader.compressedSize);\n    }\n\n    function crc32OK(data) {\n        // if bit 3 (0x08) of the general-purpose flags field is set, then the CRC-32 and file sizes are not known when the header is written\n        if ((_entryHeader.flags & 0x8) !== 0x8) {\n            if (Utils.crc32(data) !== _entryHeader.dataHeader.crc) {\n                return false;\n            }\n        } else {\n            // @TODO: load and check data descriptor header\n            // The fields in the local header are filled with zero, and the CRC-32 and size are appended in a 12-byte structure\n            // (optionally preceded by a 4-byte signature) immediately after the compressed data:\n        }\n        return true;\n    }\n\n    function decompress(/*Boolean*/ async, /*Function*/ callback, /*String, Buffer*/ pass) {\n        if (typeof callback === \"undefined\" && typeof async === \"string\") {\n            pass = async;\n            async = void 0;\n        }\n        if (_isDirectory) {\n            if (async && callback) {\n                callback(Buffer.alloc(0), Utils.Errors.DIRECTORY_CONTENT_ERROR); //si added error.\n            }\n            return Buffer.alloc(0);\n        }\n\n        var compressedData = getCompressedDataFromZip();\n\n        if (compressedData.length === 0) {\n            // File is empty, nothing to decompress.\n            if (async && callback) callback(compressedData);\n            return compressedData;\n        }\n\n        if (_entryHeader.encripted) {\n            if (\"string\" !== typeof pass && !Buffer.isBuffer(pass)) {\n                throw new Error(\"ADM-ZIP: Incompatible password parameter\");\n            }\n            compressedData = Methods.ZipCrypto.decrypt(compressedData, _entryHeader, pass);\n        }\n\n        var data = Buffer.alloc(_entryHeader.size);\n\n        switch (_entryHeader.method) {\n            case Utils.Constants.STORED:\n                compressedData.copy(data);\n                if (!crc32OK(data)) {\n                    if (async && callback) callback(data, Utils.Errors.BAD_CRC); //si added error\n                    throw new Error(Utils.Errors.BAD_CRC);\n                } else {\n                    //si added otherwise did not seem to return data.\n                    if (async && callback) callback(data);\n                    return data;\n                }\n            case Utils.Constants.DEFLATED:\n                var inflater = new Methods.Inflater(compressedData);\n                if (!async) {\n                    const result = inflater.inflate(data);\n                    result.copy(data, 0);\n                    if (!crc32OK(data)) {\n                        throw new Error(Utils.Errors.BAD_CRC + \" \" + _entryName.toString());\n                    }\n                    return data;\n                } else {\n                    inflater.inflateAsync(function (result) {\n                        result.copy(result, 0);\n                        if (callback) {\n                            if (!crc32OK(result)) {\n                                callback(result, Utils.Errors.BAD_CRC); //si added error\n                            } else {\n                                callback(result);\n                            }\n                        }\n                    });\n                }\n                break;\n            default:\n                if (async && callback) callback(Buffer.alloc(0), Utils.Errors.UNKNOWN_METHOD);\n                throw new Error(Utils.Errors.UNKNOWN_METHOD);\n        }\n    }\n\n    function compress(/*Boolean*/ async, /*Function*/ callback) {\n        if ((!uncompressedData || !uncompressedData.length) && Buffer.isBuffer(input)) {\n            // no data set or the data wasn't changed to require recompression\n            if (async && callback) callback(getCompressedDataFromZip());\n            return getCompressedDataFromZip();\n        }\n\n        if (uncompressedData.length && !_isDirectory) {\n            var compressedData;\n            // Local file header\n            switch (_entryHeader.method) {\n                case Utils.Constants.STORED:\n                    _entryHeader.compressedSize = _entryHeader.size;\n\n                    compressedData = Buffer.alloc(uncompressedData.length);\n                    uncompressedData.copy(compressedData);\n\n                    if (async && callback) callback(compressedData);\n                    return compressedData;\n                default:\n                case Utils.Constants.DEFLATED:\n                    var deflater = new Methods.Deflater(uncompressedData);\n                    if (!async) {\n                        var deflated = deflater.deflate();\n                        _entryHeader.compressedSize = deflated.length;\n                        return deflated;\n                    } else {\n                        deflater.deflateAsync(function (data) {\n                            compressedData = Buffer.alloc(data.length);\n                            _entryHeader.compressedSize = data.length;\n                            data.copy(compressedData);\n                            callback && callback(compressedData);\n                        });\n                    }\n                    deflater = null;\n                    break;\n            }\n        } else if (async && callback) {\n            callback(Buffer.alloc(0));\n        } else {\n            return Buffer.alloc(0);\n        }\n    }\n\n    function readUInt64LE(buffer, offset) {\n        return (buffer.readUInt32LE(offset + 4) << 4) + buffer.readUInt32LE(offset);\n    }\n\n    function parseExtra(data) {\n        var offset = 0;\n        var signature, size, part;\n        while (offset < data.length) {\n            signature = data.readUInt16LE(offset);\n            offset += 2;\n            size = data.readUInt16LE(offset);\n            offset += 2;\n            part = data.slice(offset, offset + size);\n            offset += size;\n            if (Constants.ID_ZIP64 === signature) {\n                parseZip64ExtendedInformation(part);\n            }\n        }\n    }\n\n    //Override header field values with values from the ZIP64 extra field\n    function parseZip64ExtendedInformation(data) {\n        var size, compressedSize, offset, diskNumStart;\n\n        if (data.length >= Constants.EF_ZIP64_SCOMP) {\n            size = readUInt64LE(data, Constants.EF_ZIP64_SUNCOMP);\n            if (_entryHeader.size === Constants.EF_ZIP64_OR_32) {\n                _entryHeader.size = size;\n            }\n        }\n        if (data.length >= Constants.EF_ZIP64_RHO) {\n            compressedSize = readUInt64LE(data, Constants.EF_ZIP64_SCOMP);\n            if (_entryHeader.compressedSize === Constants.EF_ZIP64_OR_32) {\n                _entryHeader.compressedSize = compressedSize;\n            }\n        }\n        if (data.length >= Constants.EF_ZIP64_DSN) {\n            offset = readUInt64LE(data, Constants.EF_ZIP64_RHO);\n            if (_entryHeader.offset === Constants.EF_ZIP64_OR_32) {\n                _entryHeader.offset = offset;\n            }\n        }\n        if (data.length >= Constants.EF_ZIP64_DSN + 4) {\n            diskNumStart = data.readUInt32LE(Constants.EF_ZIP64_DSN);\n            if (_entryHeader.diskNumStart === Constants.EF_ZIP64_OR_16) {\n                _entryHeader.diskNumStart = diskNumStart;\n            }\n        }\n    }\n\n    return {\n        get entryName() {\n            return _entryName.toString();\n        },\n        get rawEntryName() {\n            return _entryName;\n        },\n        set entryName(val) {\n            _entryName = Utils.toBuffer(val);\n            var lastChar = _entryName[_entryName.length - 1];\n            _isDirectory = lastChar === 47 || lastChar === 92;\n            _entryHeader.fileNameLength = _entryName.length;\n        },\n\n        get extra() {\n            return _extra;\n        },\n        set extra(val) {\n            _extra = val;\n            _entryHeader.extraLength = val.length;\n            parseExtra(val);\n        },\n\n        get comment() {\n            return _comment.toString();\n        },\n        set comment(val) {\n            _comment = Utils.toBuffer(val);\n            _entryHeader.commentLength = _comment.length;\n        },\n\n        get name() {\n            var n = _entryName.toString();\n            return _isDirectory\n                ? n\n                      .substr(n.length - 1)\n                      .split(\"/\")\n                      .pop()\n                : n.split(\"/\").pop();\n        },\n        get isDirectory() {\n            return _isDirectory;\n        },\n\n        getCompressedData: function () {\n            return compress(false, null);\n        },\n\n        getCompressedDataAsync: function (/*Function*/ callback) {\n            compress(true, callback);\n        },\n\n        setData: function (value) {\n            uncompressedData = Utils.toBuffer(value);\n            if (!_isDirectory && uncompressedData.length) {\n                _entryHeader.size = uncompressedData.length;\n                _entryHeader.method = Utils.Constants.DEFLATED;\n                _entryHeader.crc = Utils.crc32(value);\n                _entryHeader.changed = true;\n            } else {\n                // folders and blank files should be stored\n                _entryHeader.method = Utils.Constants.STORED;\n            }\n        },\n\n        getData: function (pass) {\n            if (_entryHeader.changed) {\n                return uncompressedData;\n            } else {\n                return decompress(false, null, pass);\n            }\n        },\n\n        getDataAsync: function (/*Function*/ callback, pass) {\n            if (_entryHeader.changed) {\n                callback(uncompressedData);\n            } else {\n                decompress(true, callback, pass);\n            }\n        },\n\n        set attr(attr) {\n            _entryHeader.attr = attr;\n        },\n        get attr() {\n            return _entryHeader.attr;\n        },\n\n        set header(/*Buffer*/ data) {\n            _entryHeader.loadFromBinary(data);\n        },\n\n        get header() {\n            return _entryHeader;\n        },\n\n        packHeader: function () {\n            // 1. create header (buffer)\n            var header = _entryHeader.entryHeaderToBinary();\n            var addpos = Utils.Constants.CENHDR;\n            // 2. add file name\n            _entryName.copy(header, addpos);\n            addpos += _entryName.length;\n            // 3. add extra data\n            if (_entryHeader.extraLength) {\n                _extra.copy(header, addpos);\n                addpos += _entryHeader.extraLength;\n            }\n            // 4. add file comment\n            if (_entryHeader.commentLength) {\n                _comment.copy(header, addpos);\n            }\n            return header;\n        },\n\n        toJSON: function () {\n            const bytes = function (nr) {\n                return \"<\" + ((nr && nr.length + \" bytes buffer\") || \"null\") + \">\";\n            };\n\n            return {\n                entryName: this.entryName,\n                name: this.name,\n                comment: this.comment,\n                isDirectory: this.isDirectory,\n                header: _entryHeader.toJSON(),\n                compressedData: bytes(input),\n                data: bytes(uncompressedData)\n            };\n        },\n\n        toString: function () {\n            return JSON.stringify(this.toJSON(), null, \"\\t\");\n        }\n    };\n};\n","const ZipEntry = require(\"./zipEntry\");\nconst Headers = require(\"./headers\");\nconst Utils = require(\"./util\");\n\nmodule.exports = function (/*Buffer|null*/ inBuffer, /** object */ options) {\n    var entryList = [],\n        entryTable = {},\n        _comment = Buffer.alloc(0),\n        mainHeader = new Headers.MainHeader(),\n        loadedEntries = false;\n\n    // assign options\n    const opts = Object.assign(Object.create(null), options);\n\n    const { noSort } = opts;\n\n    if (inBuffer) {\n        // is a memory buffer\n        readMainHeader(opts.readEntries);\n    } else {\n        // none. is a new file\n        loadedEntries = true;\n    }\n\n    function iterateEntries(callback) {\n        const totalEntries = mainHeader.diskEntries; // total number of entries\n        let index = mainHeader.offset; // offset of first CEN header\n\n        for (let i = 0; i < totalEntries; i++) {\n            let tmp = index;\n            const entry = new ZipEntry(inBuffer);\n\n            entry.header = inBuffer.slice(tmp, (tmp += Utils.Constants.CENHDR));\n            entry.entryName = inBuffer.slice(tmp, (tmp += entry.header.fileNameLength));\n\n            index += entry.header.entryHeaderSize;\n\n            callback(entry);\n        }\n    }\n\n    function readEntries() {\n        loadedEntries = true;\n        entryTable = {};\n        entryList = new Array(mainHeader.diskEntries); // total number of entries\n        var index = mainHeader.offset; // offset of first CEN header\n        for (var i = 0; i < entryList.length; i++) {\n            var tmp = index,\n                entry = new ZipEntry(inBuffer);\n            entry.header = inBuffer.slice(tmp, (tmp += Utils.Constants.CENHDR));\n\n            entry.entryName = inBuffer.slice(tmp, (tmp += entry.header.fileNameLength));\n\n            if (entry.header.extraLength) {\n                entry.extra = inBuffer.slice(tmp, (tmp += entry.header.extraLength));\n            }\n\n            if (entry.header.commentLength) entry.comment = inBuffer.slice(tmp, tmp + entry.header.commentLength);\n\n            index += entry.header.entryHeaderSize;\n\n            entryList[i] = entry;\n            entryTable[entry.entryName] = entry;\n        }\n    }\n\n    function readMainHeader(/*Boolean*/ readNow) {\n        var i = inBuffer.length - Utils.Constants.ENDHDR, // END header size\n            max = Math.max(0, i - 0xffff), // 0xFFFF is the max zip file comment length\n            n = max,\n            endStart = inBuffer.length,\n            endOffset = -1, // Start offset of the END header\n            commentEnd = 0;\n\n        for (i; i >= n; i--) {\n            if (inBuffer[i] !== 0x50) continue; // quick check that the byte is 'P'\n            if (inBuffer.readUInt32LE(i) === Utils.Constants.ENDSIG) {\n                // \"PK\\005\\006\"\n                endOffset = i;\n                commentEnd = i;\n                endStart = i + Utils.Constants.ENDHDR;\n                // We already found a regular signature, let's look just a bit further to check if there's any zip64 signature\n                n = i - Utils.Constants.END64HDR;\n                continue;\n            }\n\n            if (inBuffer.readUInt32LE(i) === Utils.Constants.END64SIG) {\n                // Found a zip64 signature, let's continue reading the whole zip64 record\n                n = max;\n                continue;\n            }\n\n            if (inBuffer.readUInt32LE(i) === Utils.Constants.ZIP64SIG) {\n                // Found the zip64 record, let's determine it's size\n                endOffset = i;\n                endStart = i + Utils.readBigUInt64LE(inBuffer, i + Utils.Constants.ZIP64SIZE) + Utils.Constants.ZIP64LEAD;\n                break;\n            }\n        }\n\n        if (!~endOffset) throw new Error(Utils.Errors.INVALID_FORMAT);\n\n        mainHeader.loadFromBinary(inBuffer.slice(endOffset, endStart));\n        if (mainHeader.commentLength) {\n            _comment = inBuffer.slice(commentEnd + Utils.Constants.ENDHDR);\n        }\n        if (readNow) readEntries();\n    }\n\n    function sortEntries() {\n        if (entryList.length > 1 && !noSort) {\n            entryList.sort((a, b) => a.entryName.toLowerCase().localeCompare(b.entryName.toLowerCase()));\n        }\n    }\n\n    return {\n        /**\n         * Returns an array of ZipEntry objects existent in the current opened archive\n         * @return Array\n         */\n        get entries() {\n            if (!loadedEntries) {\n                readEntries();\n            }\n            return entryList;\n        },\n\n        /**\n         * Archive comment\n         * @return {String}\n         */\n        get comment() {\n            return _comment.toString();\n        },\n        set comment(val) {\n            _comment = Utils.toBuffer(val);\n            mainHeader.commentLength = _comment.length;\n        },\n\n        getEntryCount: function () {\n            if (!loadedEntries) {\n                return mainHeader.diskEntries;\n            }\n\n            return entryList.length;\n        },\n\n        forEach: function (callback) {\n            if (!loadedEntries) {\n                iterateEntries(callback);\n                return;\n            }\n\n            entryList.forEach(callback);\n        },\n\n        /**\n         * Returns a reference to the entry with the given name or null if entry is inexistent\n         *\n         * @param entryName\n         * @return ZipEntry\n         */\n        getEntry: function (/*String*/ entryName) {\n            if (!loadedEntries) {\n                readEntries();\n            }\n            return entryTable[entryName] || null;\n        },\n\n        /**\n         * Adds the given entry to the entry list\n         *\n         * @param entry\n         */\n        setEntry: function (/*ZipEntry*/ entry) {\n            if (!loadedEntries) {\n                readEntries();\n            }\n            entryList.push(entry);\n            entryTable[entry.entryName] = entry;\n            mainHeader.totalEntries = entryList.length;\n        },\n\n        /**\n         * Removes the entry with the given name from the entry list.\n         *\n         * If the entry is a directory, then all nested files and directories will be removed\n         * @param entryName\n         */\n        deleteEntry: function (/*String*/ entryName) {\n            if (!loadedEntries) {\n                readEntries();\n            }\n            var entry = entryTable[entryName];\n            if (entry && entry.isDirectory) {\n                var _self = this;\n                this.getEntryChildren(entry).forEach(function (child) {\n                    if (child.entryName !== entryName) {\n                        _self.deleteEntry(child.entryName);\n                    }\n                });\n            }\n            entryList.splice(entryList.indexOf(entry), 1);\n            delete entryTable[entryName];\n            mainHeader.totalEntries = entryList.length;\n        },\n\n        /**\n         *  Iterates and returns all nested files and directories of the given entry\n         *\n         * @param entry\n         * @return Array\n         */\n        getEntryChildren: function (/*ZipEntry*/ entry) {\n            if (!loadedEntries) {\n                readEntries();\n            }\n            if (entry && entry.isDirectory) {\n                const list = [];\n                const name = entry.entryName;\n                const len = name.length;\n\n                entryList.forEach(function (zipEntry) {\n                    if (zipEntry.entryName.substr(0, len) === name) {\n                        list.push(zipEntry);\n                    }\n                });\n                return list;\n            }\n            return [];\n        },\n\n        /**\n         * Returns the zip file\n         *\n         * @return Buffer\n         */\n        compressToBuffer: function () {\n            if (!loadedEntries) {\n                readEntries();\n            }\n            sortEntries();\n\n            const dataBlock = [];\n            const entryHeaders = [];\n            let totalSize = 0;\n            let dindex = 0;\n\n            mainHeader.size = 0;\n            mainHeader.offset = 0;\n\n            for (const entry of entryList) {\n                // compress data and set local and entry header accordingly. Reason why is called first\n                const compressedData = entry.getCompressedData();\n                // 1. construct data header\n                entry.header.offset = dindex;\n                const dataHeader = entry.header.dataHeaderToBinary();\n                const entryNameLen = entry.rawEntryName.length;\n                // 1.2. postheader - data after data header\n                const postHeader = Buffer.alloc(entryNameLen + entry.extra.length);\n                entry.rawEntryName.copy(postHeader, 0);\n                postHeader.copy(entry.extra, entryNameLen);\n\n                // 2. offsets\n                const dataLength = dataHeader.length + postHeader.length + compressedData.length;\n                dindex += dataLength;\n\n                // 3. store values in sequence\n                dataBlock.push(dataHeader);\n                dataBlock.push(postHeader);\n                dataBlock.push(compressedData);\n\n                // 4. construct entry header\n                const entryHeader = entry.packHeader();\n                entryHeaders.push(entryHeader);\n                // 5. update main header\n                mainHeader.size += entryHeader.length;\n                totalSize += dataLength + entryHeader.length;\n            }\n\n            totalSize += mainHeader.mainHeaderSize; // also includes zip file comment length\n            // point to end of data and beginning of central directory first record\n            mainHeader.offset = dindex;\n\n            dindex = 0;\n            const outBuffer = Buffer.alloc(totalSize);\n            // write data blocks\n            for (const content of dataBlock) {\n                content.copy(outBuffer, dindex);\n                dindex += content.length;\n            }\n\n            // write central directory entries\n            for (const content of entryHeaders) {\n                content.copy(outBuffer, dindex);\n                dindex += content.length;\n            }\n\n            // write main header\n            const mh = mainHeader.toBinary();\n            if (_comment) {\n                _comment.copy(mh, Utils.Constants.ENDHDR); // add zip file comment\n            }\n            mh.copy(outBuffer, dindex);\n\n            return outBuffer;\n        },\n\n        toAsyncBuffer: function (/*Function*/ onSuccess, /*Function*/ onFail, /*Function*/ onItemStart, /*Function*/ onItemEnd) {\n            try {\n                if (!loadedEntries) {\n                    readEntries();\n                }\n                sortEntries();\n\n                const dataBlock = [];\n                const entryHeaders = [];\n                let totalSize = 0;\n                let dindex = 0;\n\n                mainHeader.size = 0;\n                mainHeader.offset = 0;\n\n                const compress2Buffer = function (entryLists) {\n                    if (entryLists.length) {\n                        const entry = entryLists.pop();\n                        const name = entry.entryName + entry.extra.toString();\n                        if (onItemStart) onItemStart(name);\n                        entry.getCompressedDataAsync(function (compressedData) {\n                            if (onItemEnd) onItemEnd(name);\n\n                            entry.header.offset = dindex;\n                            // data header\n                            const dataHeader = entry.header.dataHeaderToBinary();\n                            const postHeader = Buffer.alloc(name.length, name);\n                            const dataLength = dataHeader.length + postHeader.length + compressedData.length;\n\n                            dindex += dataLength;\n\n                            dataBlock.push(dataHeader);\n                            dataBlock.push(postHeader);\n                            dataBlock.push(compressedData);\n\n                            const entryHeader = entry.packHeader();\n                            entryHeaders.push(entryHeader);\n                            mainHeader.size += entryHeader.length;\n                            totalSize += dataLength + entryHeader.length;\n\n                            compress2Buffer(entryLists);\n                        });\n                    } else {\n                        totalSize += mainHeader.mainHeaderSize; // also includes zip file comment length\n                        // point to end of data and beginning of central directory first record\n                        mainHeader.offset = dindex;\n\n                        dindex = 0;\n                        const outBuffer = Buffer.alloc(totalSize);\n                        dataBlock.forEach(function (content) {\n                            content.copy(outBuffer, dindex); // write data blocks\n                            dindex += content.length;\n                        });\n                        entryHeaders.forEach(function (content) {\n                            content.copy(outBuffer, dindex); // write central directory entries\n                            dindex += content.length;\n                        });\n\n                        const mh = mainHeader.toBinary();\n                        if (_comment) {\n                            _comment.copy(mh, Utils.Constants.ENDHDR); // add zip file comment\n                        }\n\n                        mh.copy(outBuffer, dindex); // write main header\n\n                        onSuccess(outBuffer);\n                    }\n                };\n\n                compress2Buffer(entryList);\n            } catch (e) {\n                onFail(e);\n            }\n        }\n    };\n};\n","const Utils = require(\"./util\");\nconst pth = require(\"path\");\nconst ZipEntry = require(\"./zipEntry\");\nconst ZipFile = require(\"./zipFile\");\n\nconst get_Bool = (val, def) => (typeof val === \"boolean\" ? val : def);\nconst get_Str = (val, def) => (typeof val === \"string\" ? val : def);\n\nconst defaultOptions = {\n    // option \"noSort\" : if true it disables files sorting\n    noSort: false,\n    // read entries during load (initial loading may be slower)\n    readEntries: false,\n    // default method is none\n    method: Utils.Constants.NONE,\n    // file system\n    fs: null\n};\n\nmodule.exports = function (/**String*/ input, /** object */ options) {\n    let inBuffer = null;\n\n    // create object based default options, allowing them to be overwritten\n    const opts = Object.assign(Object.create(null), defaultOptions);\n\n    // test input variable\n    if (input && \"object\" === typeof input) {\n        // if value is not buffer we accept it to be object with options\n        if (!(input instanceof Uint8Array)) {\n            Object.assign(opts, input);\n            input = opts.input ? opts.input : undefined;\n            if (opts.input) delete opts.input;\n        }\n\n        // if input is buffer\n        if (Buffer.isBuffer(input)) {\n            inBuffer = input;\n            opts.method = Utils.Constants.BUFFER;\n            input = undefined;\n        }\n    }\n\n    // assign options\n    Object.assign(opts, options);\n\n    // instanciate utils filesystem\n    const filetools = new Utils(opts);\n\n    // if input is file name we retrieve its content\n    if (input && \"string\" === typeof input) {\n        // load zip file\n        if (filetools.fs.existsSync(input)) {\n            opts.method = Utils.Constants.FILE;\n            opts.filename = input;\n            inBuffer = filetools.fs.readFileSync(input);\n        } else {\n            throw new Error(Utils.Errors.INVALID_FILENAME);\n        }\n    }\n\n    // create variable\n    const _zip = new ZipFile(inBuffer, opts);\n\n    const { canonical, sanitize } = Utils;\n\n    function getEntry(/**Object*/ entry) {\n        if (entry && _zip) {\n            var item;\n            // If entry was given as a file name\n            if (typeof entry === \"string\") item = _zip.getEntry(entry);\n            // if entry was given as a ZipEntry object\n            if (typeof entry === \"object\" && typeof entry.entryName !== \"undefined\" && typeof entry.header !== \"undefined\") item = _zip.getEntry(entry.entryName);\n\n            if (item) {\n                return item;\n            }\n        }\n        return null;\n    }\n\n    function fixPath(zipPath) {\n        const { join, normalize, sep } = pth.posix;\n        // convert windows file separators and normalize\n        return join(\".\", normalize(sep + zipPath.split(\"\\\\\").join(sep) + sep));\n    }\n\n    return {\n        /**\n         * Extracts the given entry from the archive and returns the content as a Buffer object\n         * @param entry ZipEntry object or String with the full path of the entry\n         *\n         * @return Buffer or Null in case of error\n         */\n        readFile: function (/**Object*/ entry, /*String, Buffer*/ pass) {\n            var item = getEntry(entry);\n            return (item && item.getData(pass)) || null;\n        },\n\n        /**\n         * Asynchronous readFile\n         * @param entry ZipEntry object or String with the full path of the entry\n         * @param callback\n         *\n         * @return Buffer or Null in case of error\n         */\n        readFileAsync: function (/**Object*/ entry, /**Function*/ callback) {\n            var item = getEntry(entry);\n            if (item) {\n                item.getDataAsync(callback);\n            } else {\n                callback(null, \"getEntry failed for:\" + entry);\n            }\n        },\n\n        /**\n         * Extracts the given entry from the archive and returns the content as plain text in the given encoding\n         * @param entry ZipEntry object or String with the full path of the entry\n         * @param encoding Optional. If no encoding is specified utf8 is used\n         *\n         * @return String\n         */\n        readAsText: function (/**Object*/ entry, /**String=*/ encoding) {\n            var item = getEntry(entry);\n            if (item) {\n                var data = item.getData();\n                if (data && data.length) {\n                    return data.toString(encoding || \"utf8\");\n                }\n            }\n            return \"\";\n        },\n\n        /**\n         * Asynchronous readAsText\n         * @param entry ZipEntry object or String with the full path of the entry\n         * @param callback\n         * @param encoding Optional. If no encoding is specified utf8 is used\n         *\n         * @return String\n         */\n        readAsTextAsync: function (/**Object*/ entry, /**Function*/ callback, /**String=*/ encoding) {\n            var item = getEntry(entry);\n            if (item) {\n                item.getDataAsync(function (data, err) {\n                    if (err) {\n                        callback(data, err);\n                        return;\n                    }\n\n                    if (data && data.length) {\n                        callback(data.toString(encoding || \"utf8\"));\n                    } else {\n                        callback(\"\");\n                    }\n                });\n            } else {\n                callback(\"\");\n            }\n        },\n\n        /**\n         * Remove the entry from the file or the entry and all it's nested directories and files if the given entry is a directory\n         *\n         * @param entry\n         */\n        deleteFile: function (/**Object*/ entry) {\n            // @TODO: test deleteFile\n            var item = getEntry(entry);\n            if (item) {\n                _zip.deleteEntry(item.entryName);\n            }\n        },\n\n        /**\n         * Adds a comment to the zip. The zip must be rewritten after adding the comment.\n         *\n         * @param comment\n         */\n        addZipComment: function (/**String*/ comment) {\n            // @TODO: test addZipComment\n            _zip.comment = comment;\n        },\n\n        /**\n         * Returns the zip comment\n         *\n         * @return String\n         */\n        getZipComment: function () {\n            return _zip.comment || \"\";\n        },\n\n        /**\n         * Adds a comment to a specified zipEntry. The zip must be rewritten after adding the comment\n         * The comment cannot exceed 65535 characters in length\n         *\n         * @param entry\n         * @param comment\n         */\n        addZipEntryComment: function (/**Object*/ entry, /**String*/ comment) {\n            var item = getEntry(entry);\n            if (item) {\n                item.comment = comment;\n            }\n        },\n\n        /**\n         * Returns the comment of the specified entry\n         *\n         * @param entry\n         * @return String\n         */\n        getZipEntryComment: function (/**Object*/ entry) {\n            var item = getEntry(entry);\n            if (item) {\n                return item.comment || \"\";\n            }\n            return \"\";\n        },\n\n        /**\n         * Updates the content of an existing entry inside the archive. The zip must be rewritten after updating the content\n         *\n         * @param entry\n         * @param content\n         */\n        updateFile: function (/**Object*/ entry, /**Buffer*/ content) {\n            var item = getEntry(entry);\n            if (item) {\n                item.setData(content);\n            }\n        },\n\n        /**\n         * Adds a file from the disk to the archive\n         *\n         * @param localPath File to add to zip\n         * @param zipPath Optional path inside the zip\n         * @param zipName Optional name for the file\n         */\n        addLocalFile: function (/**String*/ localPath, /**String=*/ zipPath, /**String=*/ zipName, /**String*/ comment) {\n            if (filetools.fs.existsSync(localPath)) {\n                // fix ZipPath\n                zipPath = zipPath ? fixPath(zipPath) : \"\";\n\n                // p - local file name\n                var p = localPath.split(\"\\\\\").join(\"/\").split(\"/\").pop();\n\n                // add file name into zippath\n                zipPath += zipName ? zipName : p;\n\n                // read file attributes\n                const _attr = filetools.fs.statSync(localPath);\n\n                // add file into zip file\n                this.addFile(zipPath, filetools.fs.readFileSync(localPath), comment, _attr);\n            } else {\n                throw new Error(Utils.Errors.FILE_NOT_FOUND.replace(\"%s\", localPath));\n            }\n        },\n\n        /**\n         * Adds a local directory and all its nested files and directories to the archive\n         *\n         * @param localPath\n         * @param zipPath optional path inside zip\n         * @param filter optional RegExp or Function if files match will\n         *               be included.\n         * @param {number | object} attr - number as unix file permissions, object as filesystem Stats object\n         */\n        addLocalFolder: function (/**String*/ localPath, /**String=*/ zipPath, /**=RegExp|Function*/ filter, /**=number|object*/ attr) {\n            // Prepare filter\n            if (filter instanceof RegExp) {\n                // if filter is RegExp wrap it\n                filter = (function (rx) {\n                    return function (filename) {\n                        return rx.test(filename);\n                    };\n                })(filter);\n            } else if (\"function\" !== typeof filter) {\n                // if filter is not function we will replace it\n                filter = function () {\n                    return true;\n                };\n            }\n\n            // fix ZipPath\n            zipPath = zipPath ? fixPath(zipPath) : \"\";\n\n            // normalize the path first\n            localPath = pth.normalize(localPath);\n\n            if (filetools.fs.existsSync(localPath)) {\n                const items = filetools.findFiles(localPath);\n                const self = this;\n\n                if (items.length) {\n                    items.forEach(function (filepath) {\n                        var p = pth.relative(localPath, filepath).split(\"\\\\\").join(\"/\"); //windows fix\n                        if (filter(p)) {\n                            var stats = filetools.fs.statSync(filepath);\n                            if (stats.isFile()) {\n                                self.addFile(zipPath + p, filetools.fs.readFileSync(filepath), \"\", attr ? attr : stats);\n                            } else {\n                                self.addFile(zipPath + p + \"/\", Buffer.alloc(0), \"\", attr ? attr : stats);\n                            }\n                        }\n                    });\n                }\n            } else {\n                throw new Error(Utils.Errors.FILE_NOT_FOUND.replace(\"%s\", localPath));\n            }\n        },\n\n        /**\n         * Asynchronous addLocalFile\n         * @param localPath\n         * @param callback\n         * @param zipPath optional path inside zip\n         * @param filter optional RegExp or Function if files match will\n         *               be included.\n         */\n        addLocalFolderAsync: function (/*String*/ localPath, /*Function*/ callback, /*String*/ zipPath, /*RegExp|Function*/ filter) {\n            if (filter instanceof RegExp) {\n                filter = (function (rx) {\n                    return function (filename) {\n                        return rx.test(filename);\n                    };\n                })(filter);\n            } else if (\"function\" !== typeof filter) {\n                filter = function () {\n                    return true;\n                };\n            }\n\n            // fix ZipPath\n            zipPath = zipPath ? fixPath(zipPath) : \"\";\n\n            // normalize the path first\n            localPath = pth.normalize(localPath);\n\n            var self = this;\n            filetools.fs.open(localPath, \"r\", function (err) {\n                if (err && err.code === \"ENOENT\") {\n                    callback(undefined, Utils.Errors.FILE_NOT_FOUND.replace(\"%s\", localPath));\n                } else if (err) {\n                    callback(undefined, err);\n                } else {\n                    var items = filetools.findFiles(localPath);\n                    var i = -1;\n\n                    var next = function () {\n                        i += 1;\n                        if (i < items.length) {\n                            var filepath = items[i];\n                            var p = pth.relative(localPath, filepath).split(\"\\\\\").join(\"/\"); //windows fix\n                            p = p\n                                .normalize(\"NFD\")\n                                .replace(/[\\u0300-\\u036f]/g, \"\")\n                                .replace(/[^\\x20-\\x7E]/g, \"\"); // accent fix\n                            if (filter(p)) {\n                                filetools.fs.stat(filepath, function (er0, stats) {\n                                    if (er0) callback(undefined, er0);\n                                    if (stats.isFile()) {\n                                        filetools.fs.readFile(filepath, function (er1, data) {\n                                            if (er1) {\n                                                callback(undefined, er1);\n                                            } else {\n                                                self.addFile(zipPath + p, data, \"\", stats);\n                                                next();\n                                            }\n                                        });\n                                    } else {\n                                        self.addFile(zipPath + p + \"/\", Buffer.alloc(0), \"\", stats);\n                                        next();\n                                    }\n                                });\n                            } else {\n                                process.nextTick(() => {\n                                    next();\n                                });\n                            }\n                        } else {\n                            callback(true, undefined);\n                        }\n                    };\n\n                    next();\n                }\n            });\n        },\n\n        /**\n         *\n         * @param {string} localPath - path where files will be extracted\n         * @param {object} props - optional properties\n         * @param {string} props.zipPath - optional path inside zip\n         * @param {regexp, function} props.filter - RegExp or Function if files match will be included.\n         */\n        addLocalFolderPromise: function (/*String*/ localPath, /* object */ props) {\n            return new Promise((resolve, reject) => {\n                const { filter, zipPath } = Object.assign({}, props);\n                this.addLocalFolderAsync(\n                    localPath,\n                    (done, err) => {\n                        if (err) reject(err);\n                        if (done) resolve(this);\n                    },\n                    zipPath,\n                    filter\n                );\n            });\n        },\n\n        /**\n         * Allows you to create a entry (file or directory) in the zip file.\n         * If you want to create a directory the entryName must end in / and a null buffer should be provided.\n         * Comment and attributes are optional\n         *\n         * @param {string} entryName\n         * @param {Buffer | string} content - file content as buffer or utf8 coded string\n         * @param {string} comment - file comment\n         * @param {number | object} attr - number as unix file permissions, object as filesystem Stats object\n         */\n        addFile: function (/**String*/ entryName, /**Buffer*/ content, /**String*/ comment, /**Number*/ attr) {\n            let entry = getEntry(entryName);\n            const update = entry != null;\n\n            // prepare new entry\n            if (!update) {\n                entry = new ZipEntry();\n                entry.entryName = entryName;\n            }\n            entry.comment = comment || \"\";\n\n            const isStat = \"object\" === typeof attr && attr instanceof filetools.fs.Stats;\n\n            // last modification time from file stats\n            if (isStat) {\n                entry.header.time = attr.mtime;\n            }\n\n            // Set file attribute\n            var fileattr = entry.isDirectory ? 0x10 : 0; // (MS-DOS directory flag)\n\n            // extended attributes field for Unix\n            // set file type either S_IFDIR / S_IFREG\n            let unix = entry.isDirectory ? 0x4000 : 0x8000;\n\n            if (isStat) {\n                // File attributes from file stats\n                unix |= 0xfff & attr.mode;\n            } else if (\"number\" === typeof attr) {\n                // attr from given attr values\n                unix |= 0xfff & attr;\n            } else {\n                // Default values:\n                unix |= entry.isDirectory ? 0o755 : 0o644; // permissions (drwxr-xr-x) or (-r-wr--r--)\n            }\n\n            fileattr = (fileattr | (unix << 16)) >>> 0; // add attributes\n\n            entry.attr = fileattr;\n\n            entry.setData(content);\n            if (!update) _zip.setEntry(entry);\n        },\n\n        /**\n         * Returns an array of ZipEntry objects representing the files and folders inside the archive\n         *\n         * @return Array\n         */\n        getEntries: function () {\n            return _zip ? _zip.entries : [];\n        },\n\n        /**\n         * Returns a ZipEntry object representing the file or folder specified by ``name``.\n         *\n         * @param name\n         * @return ZipEntry\n         */\n        getEntry: function (/**String*/ name) {\n            return getEntry(name);\n        },\n\n        getEntryCount: function () {\n            return _zip.getEntryCount();\n        },\n\n        forEach: function (callback) {\n            return _zip.forEach(callback);\n        },\n\n        /**\n         * Extracts the given entry to the given targetPath\n         * If the entry is a directory inside the archive, the entire directory and it's subdirectories will be extracted\n         *\n         * @param entry ZipEntry object or String with the full path of the entry\n         * @param targetPath Target folder where to write the file\n         * @param maintainEntryPath If maintainEntryPath is true and the entry is inside a folder, the entry folder\n         *                          will be created in targetPath as well. Default is TRUE\n         * @param overwrite If the file already exists at the target path, the file will be overwriten if this is true.\n         *                  Default is FALSE\n         * @param keepOriginalPermission The file will be set as the permission from the entry if this is true.\n         *                  Default is FALSE\n         * @param outFileName String If set will override the filename of the extracted file (Only works if the entry is a file)\n         *\n         * @return Boolean\n         */\n        extractEntryTo: function (\n            /**Object*/ entry,\n            /**String*/ targetPath,\n            /**Boolean*/ maintainEntryPath,\n            /**Boolean*/ overwrite,\n            /**Boolean*/ keepOriginalPermission,\n            /**String**/ outFileName\n        ) {\n            overwrite = get_Bool(overwrite, false);\n            keepOriginalPermission = get_Bool(keepOriginalPermission, false);\n            maintainEntryPath = get_Bool(maintainEntryPath, true);\n            outFileName = get_Str(outFileName, get_Str(keepOriginalPermission, undefined));\n\n            var item = getEntry(entry);\n            if (!item) {\n                throw new Error(Utils.Errors.NO_ENTRY);\n            }\n\n            var entryName = canonical(item.entryName);\n\n            var target = sanitize(targetPath, outFileName && !item.isDirectory ? outFileName : maintainEntryPath ? entryName : pth.basename(entryName));\n\n            if (item.isDirectory) {\n                var children = _zip.getEntryChildren(item);\n                children.forEach(function (child) {\n                    if (child.isDirectory) return;\n                    var content = child.getData();\n                    if (!content) {\n                        throw new Error(Utils.Errors.CANT_EXTRACT_FILE);\n                    }\n                    var name = canonical(child.entryName);\n                    var childName = sanitize(targetPath, maintainEntryPath ? name : pth.basename(name));\n                    // The reverse operation for attr depend on method addFile()\n                    const fileAttr = keepOriginalPermission ? child.header.fileAttr : undefined;\n                    filetools.writeFileTo(childName, content, overwrite, fileAttr);\n                });\n                return true;\n            }\n\n            var content = item.getData();\n            if (!content) throw new Error(Utils.Errors.CANT_EXTRACT_FILE);\n\n            if (filetools.fs.existsSync(target) && !overwrite) {\n                throw new Error(Utils.Errors.CANT_OVERRIDE);\n            }\n            // The reverse operation for attr depend on method addFile()\n            const fileAttr = keepOriginalPermission ? entry.header.fileAttr : undefined;\n            filetools.writeFileTo(target, content, overwrite, fileAttr);\n\n            return true;\n        },\n\n        /**\n         * Test the archive\n         *\n         */\n        test: function (pass) {\n            if (!_zip) {\n                return false;\n            }\n\n            for (var entry in _zip.entries) {\n                try {\n                    if (entry.isDirectory) {\n                        continue;\n                    }\n                    var content = _zip.entries[entry].getData(pass);\n                    if (!content) {\n                        return false;\n                    }\n                } catch (err) {\n                    return false;\n                }\n            }\n            return true;\n        },\n\n        /**\n         * Extracts the entire archive to the given location\n         *\n         * @param targetPath Target location\n         * @param overwrite If the file already exists at the target path, the file will be overwriten if this is true.\n         *                  Default is FALSE\n         * @param keepOriginalPermission The file will be set as the permission from the entry if this is true.\n         *                  Default is FALSE\n         */\n        extractAllTo: function (/**String*/ targetPath, /**Boolean*/ overwrite, /**Boolean*/ keepOriginalPermission, /*String, Buffer*/ pass) {\n            overwrite = get_Bool(overwrite, false);\n            pass = get_Str(keepOriginalPermission, pass);\n            keepOriginalPermission = get_Bool(keepOriginalPermission, false);\n            if (!_zip) {\n                throw new Error(Utils.Errors.NO_ZIP);\n            }\n            _zip.entries.forEach(function (entry) {\n                var entryName = sanitize(targetPath, canonical(entry.entryName.toString()));\n                if (entry.isDirectory) {\n                    filetools.makeDir(entryName);\n                    return;\n                }\n                var content = entry.getData(pass);\n                if (!content) {\n                    throw new Error(Utils.Errors.CANT_EXTRACT_FILE);\n                }\n                // The reverse operation for attr depend on method addFile()\n                const fileAttr = keepOriginalPermission ? entry.header.fileAttr : undefined;\n                filetools.writeFileTo(entryName, content, overwrite, fileAttr);\n                try {\n                    filetools.fs.utimesSync(entryName, entry.header.time, entry.header.time);\n                } catch (err) {\n                    throw new Error(Utils.Errors.CANT_EXTRACT_FILE);\n                }\n            });\n        },\n\n        /**\n         * Asynchronous extractAllTo\n         *\n         * @param targetPath Target location\n         * @param overwrite If the file already exists at the target path, the file will be overwriten if this is true.\n         *                  Default is FALSE\n         * @param keepOriginalPermission The file will be set as the permission from the entry if this is true.\n         *                  Default is FALSE\n         * @param callback The callback will be executed when all entries are extracted successfully or any error is thrown.\n         */\n        extractAllToAsync: function (/**String*/ targetPath, /**Boolean*/ overwrite, /**Boolean*/ keepOriginalPermission, /**Function*/ callback) {\n            overwrite = get_Bool(overwrite, false);\n            if (typeof keepOriginalPermission === \"function\" && !callback) callback = keepOriginalPermission;\n            keepOriginalPermission = get_Bool(keepOriginalPermission, false);\n            if (!callback) {\n                callback = function (err) {\n                    throw new Error(err);\n                };\n            }\n            if (!_zip) {\n                callback(new Error(Utils.Errors.NO_ZIP));\n                return;\n            }\n\n            targetPath = pth.resolve(targetPath);\n            // convert entryName to\n            const getPath = (entry) => sanitize(targetPath, pth.normalize(canonical(entry.entryName.toString())));\n            const getError = (msg, file) => new Error(msg + ': \"' + file + '\"');\n\n            // separate directories from files\n            const dirEntries = [];\n            const fileEntries = new Set();\n            _zip.entries.forEach((e) => {\n                if (e.isDirectory) {\n                    dirEntries.push(e);\n                } else {\n                    fileEntries.add(e);\n                }\n            });\n\n            // Create directory entries first synchronously\n            // this prevents race condition and assures folders are there before writing files\n            for (const entry of dirEntries) {\n                const dirPath = getPath(entry);\n                // The reverse operation for attr depend on method addFile()\n                const dirAttr = keepOriginalPermission ? entry.header.fileAttr : undefined;\n                try {\n                    filetools.makeDir(dirPath);\n                    if (dirAttr) filetools.fs.chmodSync(dirPath, dirAttr);\n                    // in unix timestamp will change if files are later added to folder, but still\n                    filetools.fs.utimesSync(dirPath, entry.header.time, entry.header.time);\n                } catch (er) {\n                    callback(getError(\"Unable to create folder\", dirPath));\n                }\n            }\n\n            // callback wrapper, for some house keeping\n            const done = () => {\n                if (fileEntries.size === 0) {\n                    callback();\n                }\n            };\n\n            // Extract file entries asynchronously\n            for (const entry of fileEntries.values()) {\n                const entryName = pth.normalize(canonical(entry.entryName.toString()));\n                const filePath = sanitize(targetPath, entryName);\n                entry.getDataAsync(function (content, err_1) {\n                    if (err_1) {\n                        callback(new Error(err_1));\n                        return;\n                    }\n                    if (!content) {\n                        callback(new Error(Utils.Errors.CANT_EXTRACT_FILE));\n                    } else {\n                        // The reverse operation for attr depend on method addFile()\n                        const fileAttr = keepOriginalPermission ? entry.header.fileAttr : undefined;\n                        filetools.writeFileToAsync(filePath, content, overwrite, fileAttr, function (succ) {\n                            if (!succ) {\n                                callback(getError(\"Unable to write file\", filePath));\n                                return;\n                            }\n                            filetools.fs.utimes(filePath, entry.header.time, entry.header.time, function (err_2) {\n                                if (err_2) {\n                                    callback(getError(\"Unable to set times\", filePath));\n                                    return;\n                                }\n                                fileEntries.delete(entry);\n                                // call the callback if it was last entry\n                                done();\n                            });\n                        });\n                    }\n                });\n            }\n            // call the callback if fileEntries was empty\n            done();\n        },\n\n        /**\n         * Writes the newly created zip file to disk at the specified location or if a zip was opened and no ``targetFileName`` is provided, it will overwrite the opened zip\n         *\n         * @param targetFileName\n         * @param callback\n         */\n        writeZip: function (/**String*/ targetFileName, /**Function*/ callback) {\n            if (arguments.length === 1) {\n                if (typeof targetFileName === \"function\") {\n                    callback = targetFileName;\n                    targetFileName = \"\";\n                }\n            }\n\n            if (!targetFileName && opts.filename) {\n                targetFileName = opts.filename;\n            }\n            if (!targetFileName) return;\n\n            var zipData = _zip.compressToBuffer();\n            if (zipData) {\n                var ok = filetools.writeFileTo(targetFileName, zipData, true);\n                if (typeof callback === \"function\") callback(!ok ? new Error(\"failed\") : null, \"\");\n            }\n        },\n\n        writeZipPromise: function (/**String*/ targetFileName, /* object */ props) {\n            const { overwrite, perm } = Object.assign({ overwrite: true }, props);\n\n            return new Promise((resolve, reject) => {\n                // find file name\n                if (!targetFileName && opts.filename) targetFileName = opts.filename;\n                if (!targetFileName) reject(\"ADM-ZIP: ZIP File Name Missing\");\n\n                this.toBufferPromise().then((zipData) => {\n                    const ret = (done) => (done ? resolve(done) : reject(\"ADM-ZIP: Wasn't able to write zip file\"));\n                    filetools.writeFileToAsync(targetFileName, zipData, overwrite, perm, ret);\n                }, reject);\n            });\n        },\n\n        toBufferPromise: function () {\n            return new Promise((resolve, reject) => {\n                _zip.toAsyncBuffer(resolve, reject);\n            });\n        },\n\n        /**\n         * Returns the content of the entire zip file as a Buffer object\n         *\n         * @return Buffer\n         */\n        toBuffer: function (/**Function=*/ onSuccess, /**Function=*/ onFail, /**Function=*/ onItemStart, /**Function=*/ onItemEnd) {\n            this.valueOf = 2;\n            if (typeof onSuccess === \"function\") {\n                _zip.toAsyncBuffer(onSuccess, onFail, onItemStart, onItemEnd);\n                return null;\n            }\n            return _zip.compressToBuffer();\n        }\n    };\n};\n","{\n  \"name\": \"@bjia56/portable-python\",\n  \"version\": \"0.1.164\",\n  \"description\": \"Portable Python\",\n  \"main\": \"./dist/index.js\",\n  \"module\": \"./dist/index.mjs\",\n  \"types\": \"./dist/index.d.ts\",\n  \"files\": [\n    \"dist\"\n  ],\n  \"scripts\": {\n    \"prebuild\": \"rimraf README.md && rimraf dist\",\n    \"build\": \"cp ../../README.md . && tsc --outDir dist\",\n    \"prepublishOnly\": \"npm run build\",\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/bjia56/portable-python.git\"\n  },\n  \"keywords\": [\n    \"python\"\n  ],\n  \"author\": \"Brett Jia\",\n  \"license\": \"Apache-2.0\",\n  \"bugs\": {\n    \"url\": \"https://github.com/bjia56/portable-python/issues\"\n  },\n  \"homepage\": \"https://github.com/bjia56/portable-python\",\n  \"dependencies\": {\n    \"adm-zip\": \"^0.5.10\"\n  },\n  \"devDependencies\": {\n    \"@types/adm-zip\": \"^0.5.5\",\n    \"rimraf\": \"^5.0.5\",\n    \"ts-node\": \"^10.9.1\",\n    \"typescript\": \"^5.3.2\"\n  },\n  \"portablePython\": {\n    \"cpython\": {\n      \"versions\": [\n        \"3.13.9\",\n        \"3.13.8\",\n        \"3.13.7\",\n        \"3.13.6\",\n        \"3.13.5\",\n        \"3.13.4\",\n        \"3.13.3\",\n        \"3.13.2\",\n        \"3.13.1\",\n        \"3.13.0\",\n        \"3.12.12\",\n        \"3.12.11\",\n        \"3.12.10\",\n        \"3.12.9\",\n        \"3.12.8\",\n        \"3.12.7\",\n        \"3.12.6\",\n        \"3.11.14\",\n        \"3.11.13\",\n        \"3.11.12\",\n        \"3.11.11\",\n        \"3.11.10\",\n        \"3.11.9\",\n        \"3.10.19\",\n        \"3.10.18\",\n        \"3.10.17\",\n        \"3.10.16\",\n        \"3.10.15\",\n        \"3.10.14\",\n        \"3.9.24\",\n        \"3.9.23\",\n        \"3.9.22\",\n        \"3.9.21\",\n        \"3.9.20\",\n        \"3.9.19\"\n      ],\n      \"versionBuilds\": {\n        \"3.9.19\": \"cpython-v3.9.19-build.6\",\n        \"3.10.14\": \"cpython-v3.10.14-build.6\",\n        \"3.11.9\": \"cpython-v3.11.9-build.6\",\n        \"3.9.20\": \"cpython-v3.9.20-build.1\",\n        \"3.10.15\": \"cpython-v3.10.15-build.1\",\n        \"3.11.10\": \"cpython-v3.11.10-build.2\",\n        \"3.12.6\": \"cpython-v3.12.6-build.5\",\n        \"3.12.7\": \"cpython-v3.12.7-build.1\",\n        \"3.13.0\": \"cpython-v3.13.0-build.0\",\n        \"3.9.21\": \"cpython-v3.9.21-build.0\",\n        \"3.10.16\": \"cpython-v3.10.16-build.0\",\n        \"3.11.11\": \"cpython-v3.11.11-build.0\",\n        \"3.12.8\": \"cpython-v3.12.8-build.0\",\n        \"3.13.1\": \"cpython-v3.13.1-build.3\",\n        \"3.9.22\": \"cpython-v3.9.22-build.2\",\n        \"3.10.17\": \"cpython-v3.10.17-build.2\",\n        \"3.11.12\": \"cpython-v3.11.12-build.2\",\n        \"3.12.9\": \"cpython-v3.12.9-build.0\",\n        \"3.12.10\": \"cpython-v3.12.10-build.2\",\n        \"3.13.2\": \"cpython-v3.13.2-build.0\",\n        \"3.13.3\": \"cpython-v3.13.3-build.2\",\n        \"3.9.23\": \"cpython-v3.9.23-build.2\",\n        \"3.10.18\": \"cpython-v3.10.18-build.2\",\n        \"3.11.13\": \"cpython-v3.11.13-build.2\",\n        \"3.12.11\": \"cpython-v3.12.11-build.2\",\n        \"3.13.4\": \"cpython-v3.13.4-build.1\",\n        \"3.13.5\": \"cpython-v3.13.5-build.1\",\n        \"3.13.6\": \"cpython-v3.13.6-build.0\",\n        \"3.13.7\": \"cpython-v3.13.7-build.0\",\n        \"3.9.24\": \"cpython-v3.9.24-build.0\",\n        \"3.10.19\": \"cpython-v3.10.19-build.0\",\n        \"3.11.14\": \"cpython-v3.11.14-build.0\",\n        \"3.12.12\": \"cpython-v3.12.12-build.0\",\n        \"3.13.8\": \"cpython-v3.13.8-build.0\",\n        \"3.13.9\": \"cpython-v3.13.9-build.0\"\n      }\n    },\n    \"graalpy\": {\n      \"versions\": [\n        \"25.0.0\",\n        \"24.2.2\",\n        \"24.2.1\",\n        \"24.2.0\",\n        \"24.1.2\",\n        \"24.1.1\",\n        \"24.1.0\",\n        \"24.0.2\"\n      ],\n      \"versionBuilds\": {\n        \"24.0.2\": \"graalpy-v24.0.2-build.0\",\n        \"24.1.0\": \"graalpy-v24.1.0-build.0\",\n        \"24.1.1\": \"graalpy-v24.1.1-build.0\",\n        \"24.1.2\": \"graalpy-v24.1.2-build.0\",\n        \"24.2.0\": \"graalpy-v24.2.0-build.0\",\n        \"24.2.1\": \"graalpy-v24.2.1-build.0\",\n        \"24.2.2\": \"graalpy-v24.2.2-build.0\",\n        \"25.0.0\": \"graalpy-v25.0.0-build.0\"\n      }\n    },\n    \"pypy\": {\n      \"versions\": [\n        \"7.3.20\",\n        \"7.3.19\",\n        \"7.3.18\",\n        \"7.3.17\",\n        \"7.3.16\"\n      ],\n      \"versionBuilds\": {\n        \"7.3.16\": \"pypy-v7.3.16-build.0\",\n        \"7.3.17\": \"pypy-v7.3.17-build.0\",\n        \"7.3.18\": \"pypy-v7.3.18-build.0\",\n        \"7.3.19\": \"pypy-v7.3.19-build.0\",\n        \"7.3.20\": \"pypy-v7.3.20-build.0\"\n      }\n    }\n  }\n}","const packageJson = require(\"../package.json\");\nconst VERSIONS = packageJson.portablePython;\n\nexport function getVersions(implementation: string) {\n    const versions = VERSIONS[implementation].versions;\n    if (!versions) {\n        throw Error(\"unknown implementation\");\n    }\n    return versions;\n}\n\nexport function getVersionBuilds(implementation: string) {\n    const versionBuilds = VERSIONS[implementation].versionBuilds;\n    if (!versionBuilds) {\n        throw Error(\"unknown implementation\");\n    }\n    return versionBuilds;\n}\n\nexport function pickVersion(implementation: string, version: string) {\n    const versions = getVersions(implementation);\n    for (let i = 0; i < versions.length; ++i) {\n        // TODO: This doesn't handle semver correctly, e.g. 3.8.17 will match 3.8.1\n        if (versions[i].startsWith(version)) {\n            return versions[i];\n        }\n    }\n    return null;\n}","import { existsSync } from 'fs';\nimport { platform } from 'os';\n\nexport function isNixOS(): boolean {\n    try {\n        return platform() === \"linux\" && existsSync(\"/etc/NIXOS\");\n    } catch (e) {\n        return false;\n    }\n}","import { platform, arch, release, version } from \"os\";\nimport { accessSync } from \"fs\";\nimport { chmod, symlink, rename } from \"fs/promises\";\nimport { join } from \"path\";\nimport { execSync } from \"child_process\";\n\nimport { IInstaller, IPortablePython } from './types';\nimport { isNixOS } from './util';\n\nconst DL_PLATFORM = (() => {\n    if (platform() == \"win32\") {\n        return \"windows\";\n    }\n    if (platform() == \"freebsd\") {\n        const releaseName = release();\n        const releaseMajor = parseInt(releaseName.split(\".\")[0]);\n        return `freebsd${releaseMajor}`;\n    }\n    if (platform() == \"sunos\") {\n        const versionString = version();\n        const versionMajor = parseInt(versionString.split(\".\")[0]);\n        return `solaris${versionMajor}`;\n    }\n    return platform();\n})();\n\nconst DL_ARCH = (() => {\n    if (DL_PLATFORM == \"darwin\") {\n        return \"universal2\";\n    }\n\n    switch (arch()) {\n    case \"ia32\":\n        return \"i386\";\n    case \"x64\":\n        return \"x86_64\";\n    case \"arm64\":\n        return \"aarch64\";\n    case \"loong64\":\n        return \"loongarch64\";\n    case \"ppc64\":\n        return \"powerpc64le\";\n    }\n\n    return arch();\n})();\n\nconst COSMO_EXES = [\n    \"python.com\",\n    \"python.x86_64.elf\",\n    \"python.x86_64.macho\",\n    \"python.aarch64.elf\"\n]\n\nexport default class CPythonInstaller implements IInstaller {\n    constructor(private parent: IPortablePython) {}\n\n    get relativeExecutablePath(): string {\n        if (this.parent.distribution === \"cosmo\") {\n            let exe = \"python.com\";\n            if (platform() == \"darwin\") {\n                if (arch() == \"x64\") {\n                    exe = \"python.x86_64.macho\";\n                }\n            } else if (platform() != \"win32\") {\n                if (arch() == \"x64\") {\n                    exe = \"python.x86_64.elf\";\n                } else if (arch() == \"arm64\") {\n                    exe = \"python.aarch64.elf\";\n                }\n            }\n\n            try {\n                accessSync(join(this.parent.extractPath, \"bin\", exe));\n            } catch {\n                exe = \"python.com\";\n            }\n\n            return join(this.pythonDistributionName, \"bin\", exe);\n        }\n\n        return join(this.pythonDistributionName, \"bin\", \"python\" + (\n            platform() === \"win32\" ? \".exe\" : \"\"\n        ));\n    }\n\n    get relativePipPath(): string {\n        if (this.parent.distribution != \"cosmo\" && platform() === \"win32\") {\n            return join(this.pythonDistributionName, \"Scripts\", `pip${this.parent.major}.exe`);\n        }\n        return join(this.pythonDistributionName, \"bin\", `pip${this.parent.major}`);\n    }\n\n    get pythonDistributionName(): string {\n        if (this.parent.distribution === \"cosmo\") {\n            return `python-${this.parent.version}${this.parent.abiflags}-cosmo-unknown`;\n        }\n        const distribution = this.parent.distribution === \"auto\" ? \"headless\" : this.parent.distribution;\n        return `python-${distribution}-${this.parent.version}${this.parent.abiflags}-${DL_PLATFORM}-${DL_ARCH}`;\n    }\n\n    validateOptions(): void {\n        if (this.parent.implementation !== \"cpython\") {\n            throw Error(\"expected cpython implementation\");\n        }\n\n        if (![\"auto\", \"cosmo\", \"headless\", \"full\"].includes(this.parent.distribution)) {\n            throw Error(\"invalid distribution\");\n        }\n\n        if (this.parent.abiflags && this.parent.abiflags != \"t\") {\n            throw Error(\"invalid abiflags\");\n        }\n\n        if (this.parent.abiflags == \"t\" && this.parent.minor != \"13\") {\n            throw Error(\"abiflags 't' is only supported for Python 3.13\");\n        }\n    }\n\n    async postInstall(): Promise<void> {\n        if (!this.parent.isInstalled()) {\n            throw Error(\"something went wrong and the installation failed\");\n        }\n\n        await chmod(this.parent.executablePath, 0o777);\n        if (this.parent.distribution != \"cosmo\" && platform() != \"win32\") {\n            // node can't create symlinks over existing files, so we create symlinks with temp names,\n            // then rename to overwrite existing files\n            await symlink(\"python\", `${this.parent.executablePath}${this.parent.major}_`, \"file\");\n            await rename(`${this.parent.executablePath}${this.parent.major}_`, `${this.parent.executablePath}${this.parent.major}`);\n            await symlink(\"python\", `${this.parent.executablePath}${this.parent.major}.${this.parent.minor}_`, \"file\");\n            await rename(`${this.parent.executablePath}${this.parent.major}.${this.parent.minor}_`, `${this.parent.executablePath}${this.parent.major}.${this.parent.minor}`);\n\n            // ensure the pip script is executable\n            await chmod(this.parent.pipPath, 0o777);\n            await chmod(`${this.parent.pipPath}.${this.parent.minor}`, 0o777);\n        }\n\n        if (this.parent.distribution === \"cosmo\" && platform() != \"win32\") {\n            for (const exe of COSMO_EXES) {\n                try {\n                    await chmod(join(this.parent.extractPath, \"bin\", exe), 0o777);\n                } catch(e) {\n                    // ignore\n                }\n            }\n\n            // ensure the pip script is executable\n            await chmod(this.parent.pipPath, 0o777);\n            await chmod(`${this.parent.pipPath}.${this.parent.minor}`, 0o777);\n        }\n\n        if (this.parent.distribution !== \"cosmo\" && isNixOS()) {\n            // Get glibc path\n            const glibcOut = execSync('nix --extra-experimental-features \"nix-command flakes\" path-info nixpkgs#glibc.out');\n            const glibcPath = glibcOut.toString().trim();\n            const glibcInterpreter = (() => {\n                switch (arch()) {\n                case \"x64\":\n                    return \"ld-linux-x86-64.so.2\";\n                case \"arm64\":\n                    return \"ld-linux-aarch64.so.1\";\n                };\n                throw new Error(\"Unsupported architecture\");\n            })();\n            const glibcInterpreterPath = join(glibcPath, \"lib\", glibcInterpreter);\n\n            // Run patchelf to set the interpreter\n            execSync(`nix-shell -p patchelf --run 'patchelf --set-interpreter ${glibcInterpreterPath} ${this.parent.executablePath}'`);\n        }\n    }\n}","import { platform, arch } from \"os\";\nimport { chmod, symlink, rename } from \"fs/promises\";\nimport { join } from \"path\";\n\nimport { IInstaller, IPortablePython, IPortablePythonOptions } from './types';\n\nconst DL_PLATFORM = (() => {\n    if (platform() == \"win32\") {\n        return \"windows\";\n    }\n    return platform();\n})();\n\nconst DL_ARCH = (() => {\n    switch (arch()) {\n    case \"x64\":\n        return \"x86_64\";\n    case \"arm64\":\n        return \"aarch64\";\n    }\n    return arch();\n})();\n\nexport default class GraalPyInstaller implements IInstaller {\n    private pythonMajor: number = 3;\n    private get pythonMinor(): number {\n        const parentMajor = parseInt(this.parent.major);\n        const parentMinor = parseInt(this.parent.minor);\n        if (parentMajor < 24 || (parentMajor === 24 && parentMinor < 1)) {\n            return 10;\n        }\n        if (parentMajor < 25) {\n            return 11;\n        }\n        return 12;\n    };\n\n    constructor(private parent: IPortablePython) {}\n\n    get relativeExecutablePath(): string {\n        return join(this.pythonDistributionName, \"bin\", \"python\" + (platform() === \"win32\" ? \".exe\" : \"\"));\n    }\n\n    get relativePipPath(): string {\n        if (platform() === \"win32\") {\n            return join(this.pythonDistributionName, \"Scripts\", `pip${this.pythonMajor}.exe`);\n        }\n        return join(this.pythonDistributionName, \"bin\", `pip${this.pythonMajor}`);\n    }\n\n    get pythonDistributionName(): string {\n        if (this.parent.distribution === \"auto\" || this.parent.distribution === \"standard\") {\n            return `graalpy-${this.parent.version}-${DL_PLATFORM}-${DL_ARCH}`;\n        }\n        return `graalpy-${this.parent.distribution}-${this.parent.version}-${DL_PLATFORM}-${DL_ARCH}`;\n    }\n\n    validateOptions(): void {\n        if (this.parent.implementation !== \"graalpy\") {\n            throw Error(\"expected graalpy implementation\");\n        }\n\n        if (![\"auto\", \"standard\", \"community\", \"jvm\", \"community-jvm\"].includes(this.parent.distribution)) {\n            throw Error(\"invalid distribution\");\n        }\n    }\n\n    async postInstall(): Promise<void> {\n        if (!this.parent.isInstalled()) {\n            throw Error(\"something went wrong and the installation failed\");\n        }\n\n        await chmod(this.parent.executablePath, 0o777);\n        if (platform() != \"win32\") {\n            // node can't create symlinks over existing files, so we create symlinks with temp names,\n            // then rename to overwrite existing files\n            await symlink(\"python\", `${this.parent.executablePath}${this.pythonMajor}_`, \"file\");\n            await rename(`${this.parent.executablePath}${this.pythonMajor}_`, `${this.parent.executablePath}${this.pythonMajor}`);\n            await symlink(\"python\", `${this.parent.executablePath}${this.pythonMajor}.${this.pythonMinor}_`, \"file\");\n            await rename(`${this.parent.executablePath}${this.pythonMajor}.${this.pythonMinor}_`, `${this.parent.executablePath}${this.pythonMajor}.${this.pythonMinor}`);\n\n            // ensure the pip script is executable\n            await chmod(this.parent.pipPath, 0o777);\n            await chmod(`${this.parent.pipPath}.${this.pythonMinor}`, 0o777);\n        }\n    }\n}","import { platform, arch } from \"os\";\nimport { chmod, symlink, rename } from \"fs/promises\";\nimport { join } from \"path\";\n\nimport { IInstaller, IPortablePython } from './types';\n\nconst DL_PLATFORM = (() => {\n    if (platform() == \"win32\") {\n        return \"windows\";\n    }\n    return platform();\n})();\n\nconst DL_ARCH = (() => {\n    switch (arch()) {\n    case \"x64\":\n        return \"x86_64\";\n    case \"arm64\":\n        return \"aarch64\";\n    }\n    return arch();\n})();\n\nexport default class PyPyInstaller implements IInstaller {\n    constructor(private parent: IPortablePython) {}\n\n    get pythonMajor(): string {\n        if (this.parent.distribution === \"auto\") {\n            return \"3\";\n        }\n        return this.parent.distribution.split(\".\")[0];\n    }\n\n    get pythonMinor(): string {\n        if (this.parent.distribution === \"auto\") {\n            const parentMajor = parseInt(this.parent.major);\n            const parentMinor = parseInt(this.parent.minor);\n            const parentPatch = parseInt(this.parent.patch);\n            if (parentMajor > 7 ||\n                (parentMajor == 7 && parentMinor > 3) ||\n                (parentMajor == 7 && parentMinor == 3 && parentPatch >= 18)) {\n                return \"11\";\n            }\n            return \"10\";\n        }\n        return this.parent.distribution.split(\".\")[1];\n    }\n\n    get relativeExecutablePath(): string {\n        if (platform() === \"win32\") {\n            return join(this.pythonDistributionName, \"python.exe\");\n        }\n        return join(this.pythonDistributionName, \"bin\", \"python\");\n    }\n\n    get relativePipPath(): string {\n        if (platform() === \"win32\") {\n            return join(this.pythonDistributionName, \"Scripts\", `pip${this.pythonMajor}.exe`);\n        }\n        return join(this.pythonDistributionName, \"bin\", `pip${this.pythonMajor}`);\n    }\n\n    get pythonDistributionName(): string {\n        return `pypy${this.pythonMajor}.${this.pythonMinor}-${this.parent.version}-${DL_PLATFORM}-${DL_ARCH}`;\n    }\n\n    validateOptions(): void {\n        if (this.parent.implementation !== \"pypy\") {\n            throw Error(\"expected pypy implementation\");\n        }\n\n        const parentMajor = parseInt(this.parent.major);\n        const parentMinor = parseInt(this.parent.minor);\n        const parentPatch = parseInt(this.parent.patch);\n\n        if (parentMajor > 7 ||\n            (parentMajor == 7 && parentMinor > 3) ||\n            (parentMajor == 7 && parentMinor == 3 && parentPatch >= 20)) {\n            if (![\"auto\", \"3.11\"].includes(this.parent.distribution)) {\n                throw Error(\"invalid distribution\");\n            }\n        } else if (parentMajor == 7 && parentMinor == 3 && [18, 19].includes(parentPatch)) {\n            if (![\"auto\", \"3.10\", \"3.11\"].includes(this.parent.distribution)) {\n                throw Error(\"invalid distribution\");\n            }\n        } else if (parentMajor == 7 && parentMinor == 3 && parentPatch == 17) {\n            if (![\"auto\", \"3.10\"].includes(this.parent.distribution)) {\n                throw Error(\"invalid distribution\");\n            }\n        } else {\n            if (![\"auto\", \"3.9\", \"3.10\"].includes(this.parent.distribution)) {\n                throw Error(\"invalid distribution\");\n            }\n        }\n    }\n\n    async postInstall(): Promise<void> {\n        if (!this.parent.isInstalled()) {\n            throw Error(\"something went wrong and the installation failed\");\n        }\n\n        await chmod(this.parent.executablePath, 0o777);\n        if (platform() != \"win32\") {\n            // node can't create symlinks over existing files, so we create symlinks with temp names,\n            // then rename to overwrite existing files\n            await symlink(\"python\", `${this.parent.executablePath}${this.pythonMajor}_`, \"file\");\n            await rename(`${this.parent.executablePath}${this.pythonMajor}_`, `${this.parent.executablePath}${this.pythonMajor}`);\n            await symlink(\"python\", `${this.parent.executablePath}${this.pythonMajor}.${this.pythonMinor}_`, \"file\");\n            await rename(`${this.parent.executablePath}${this.pythonMajor}.${this.pythonMinor}_`, `${this.parent.executablePath}${this.pythonMajor}.${this.pythonMinor}`);\n\n            // ensure the pip script is executable\n            await chmod(this.parent.pipPath, 0o777);\n            await chmod(`${this.parent.pipPath}.${this.pythonMinor}`, 0o777);\n        }\n    }\n}\n","import { createWriteStream, existsSync, readFileSync } from \"fs\";\nimport { mkdir, rm, writeFile } from \"fs/promises\";\nimport { join, dirname } from \"path\";\nimport { Readable } from 'stream';\nimport { finished } from 'stream/promises';\nimport { ReadableStream } from 'stream/web';\nimport AdmZip from \"adm-zip\";\n\nimport { IInstaller, IPortablePython, IPortablePythonOptions } from \"./types\";\nimport { getVersionBuilds, pickVersion } from \"./versions\";\nimport CPythonInstaller from \"./cpython\";\nimport GraalPyInstaller from \"./graalpy\";\nimport PyPyInstaller from \"./pypy\";\n\nconst INSTALLERS = new Map<string, new (parent: IPortablePython) => IInstaller>([\n    [\"cpython\", CPythonInstaller],\n    [\"graalpy\", GraalPyInstaller],\n    [\"pypy\", PyPyInstaller],\n]);\n\nasync function download(url: string, dest: string) {\n    const res = await fetch(url);\n    const file = createWriteStream(dest);\n    await finished(Readable.fromWeb(res.body as ReadableStream).pipe(file));\n}\n\nexport class PortablePython implements IPortablePython {\n    private _version: string\n    private _installer: IInstaller\n    private _experimentalTag: string\n    implementation: string = \"cpython\"\n    distribution: string = \"auto\"\n    abiflags: string = \"\"\n    installDir = dirname(__dirname);\n\n    constructor(version: string, installDir: string | null = null, options: IPortablePythonOptions = {}) {\n        if (!version) {\n            throw Error(\"version must not be empty\");\n        }\n\n        if (options.implementation) {\n            this.implementation = options.implementation;\n        }\n        if (options.distribution) {\n            this.distribution = options.distribution;\n        }\n        if (options.abiflags) {\n            this.abiflags = options.abiflags;\n        }\n\n        if (!INSTALLERS.has(this.implementation)) {\n            throw Error(\"invalid implementation\");\n        }\n\n        if (installDir) {\n            this.installDir = installDir;\n        }\n\n        if (options._tagOverride) {\n            this._experimentalTag = options._tagOverride;\n        }\n\n        if (options._versionOverride) {\n            this._version = options._versionOverride;\n        } else {\n            this._version = pickVersion(this.implementation, version);\n        }\n        if (!this._version) {\n            throw Error(`unknown version: ${version}`);\n        }\n        if (!this.releaseTag) {\n            throw Error(\"no releases available for this version\");\n        }\n\n        const ctor = INSTALLERS.get(this.implementation)!;\n        this._installer = new ctor(this);\n        this._installer.validateOptions();\n    }\n\n    /**\n     * Contains the path to the Python executable.\n     */\n    get executablePath() {\n        return join(this.installDir, this._installer.relativeExecutablePath);\n    }\n\n    /**\n     * Contains the path to the bundled pip executable.\n     */\n    get pipPath() {\n        return join(this.installDir, this._installer.relativePipPath);\n    }\n\n    /**\n     * Contains the selected Python version.\n     */\n    get version() {\n        return this._version;\n    }\n\n    /**\n     * Contains the major version number.\n     */\n    get major() {\n        return this.version.split(\".\")[0];\n    }\n\n    /**\n     * Contains the minor version number.\n     */\n    get minor() {\n        return this.version.split(\".\")[1];\n    }\n\n    /**\n     * Contains the micro version number.\n     */\n    get micro() {\n        return this.version.split(\".\")[2];\n    }\n\n    /**\n     * Contains the patch version number.\n     */\n    get patch() {\n        return this.micro;\n    }\n\n    /**\n     * Contains the release tag that will be downloaded.\n     */\n    get releaseTag() {\n        if (this._experimentalTag) {\n            return this._experimentalTag;\n        }\n        return getVersionBuilds(this.implementation)[this.version] as string;\n    }\n\n    /**\n     * Contains the full name of the Python distribution.\n     */\n    get pythonDistributionName() {\n        return this._installer.pythonDistributionName;\n    }\n\n    /**\n     * Contains the path to the extracted Python distribution folder.\n     */\n    get extractPath() {\n        return join(this.installDir, this.pythonDistributionName);\n    }\n\n    /**\n     * Checks if the selected Python version has been installed on the host platform.\n     * @returns True if the installation exists, false otherwise.\n     */\n    isInstalled() {\n        return existsSync(this.extractPath);\n    }\n\n    /**\n     * Checks if the build tag of the downloaded Python distribution is outdated (i.e.\n     * the tag does not match the specified release tag).\n     * @returns True if the tag is outdated, false otherwise.\n     */\n    isTagOutdated() {\n        const tagPath = join(this.extractPath, \"build_tag.txt\");\n        if (!existsSync(tagPath)) {\n            return true;\n        }\n\n        const tag = readFileSync(tagPath, \"utf-8\").trim();\n        return tag !== this.releaseTag;\n    }\n\n    /**\n     * Will download the compressed Python installation and extract it to\n     * the installation directory.\n     * @param [zipFile=null] - Install from an existing zip file on the filesystem, instead of downloading.\n     */\n    async install(zipFile: string | null = null) {\n        if (this.isInstalled()) {\n            return;\n        }\n\n        await mkdir(this.installDir, { recursive: true });\n\n        if (zipFile) {\n            const zip = new AdmZip(zipFile);\n            zip.extractAllTo(this.installDir, true)\n            await this._installer.postInstall()\n            return;\n        }\n\n        const url = `https://github.com/bjia56/portable-python/releases/download/${this.releaseTag}/${this.pythonDistributionName}.zip`\n        const downloadPath = join(this.installDir, `${this.pythonDistributionName}.zip`);\n\n        const installDir = this.installDir;\n        await download(url, downloadPath);\n\n        const zip = new AdmZip(downloadPath);\n        zip.extractAllTo(installDir, true)\n\n        await rm(downloadPath);\n\n        // Write the selected build tag to a file for debugging purposes\n        const tagPath = join(this.extractPath, \"build_tag.txt\");\n        await writeFile(tagPath, this.releaseTag);\n\n        await this._installer.postInstall();\n    }\n\n    /**\n     * Uninstalls the Python distribution.\n     */\n    async uninstall() {\n        if (!this.isInstalled()) {\n            return;\n        }\n        await rm(this.extractPath, { force: true, recursive: true });\n    }\n\n}\n\n","export const pythonVersion = \"3.13\";\n","import path from \"path\";\nimport { PortablePython } from \"@bjia56/portable-python\";\nimport { pythonVersion } from \"./pythonVersion\";\nif (require.main === module) {\n    new PortablePython(pythonVersion, path.dirname(__dirname)).install();\n} else {\n    module.exports = new PortablePython(pythonVersion, path.dirname(__dirname)).executablePath;\n}\n"],"mappings":"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","names":["path","err","fd","path","content","fileAttr","zip"]}