| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392 | "use strict";var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {    if (k2 === undefined) k2 = k;    var desc = Object.getOwnPropertyDescriptor(m, k);    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {      desc = { enumerable: true, get: function() { return m[k]; } };    }    Object.defineProperty(o, k2, desc);}) : (function(o, m, k, k2) {    if (k2 === undefined) k2 = k;    o[k2] = m[k];}));var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {    Object.defineProperty(o, "default", { enumerable: true, value: v });}) : function(o, v) {    o["default"] = v;});var __importStar = (this && this.__importStar) || (function () {    var ownKeys = function(o) {        ownKeys = Object.getOwnPropertyNames || function (o) {            var ar = [];            for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;            return ar;        };        return ownKeys(o);    };    return function (mod) {        if (mod && mod.__esModule) return mod;        var result = {};        if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);        __setModuleDefault(result, mod);        return result;    };})();var __importDefault = (this && this.__importDefault) || function (mod) {    return (mod && mod.__esModule) ? mod : { "default": mod };};Object.defineProperty(exports, "__esModule", { value: true });exports.BrotliDecompress = exports.BrotliCompress = exports.Brotli = exports.Unzip = exports.InflateRaw = exports.DeflateRaw = exports.Gunzip = exports.Gzip = exports.Inflate = exports.Deflate = exports.Zlib = exports.ZlibError = exports.constants = void 0;const assert_1 = __importDefault(require("assert"));const buffer_1 = require("buffer");const minipass_1 = require("minipass");const realZlib = __importStar(require("zlib"));const constants_js_1 = require("./constants.js");var constants_js_2 = require("./constants.js");Object.defineProperty(exports, "constants", { enumerable: true, get: function () { return constants_js_2.constants; } });const OriginalBufferConcat = buffer_1.Buffer.concat;const desc = Object.getOwnPropertyDescriptor(buffer_1.Buffer, 'concat');const noop = (args) => args;const passthroughBufferConcat = desc?.writable === true || desc?.set !== undefined    ? (makeNoOp) => {        buffer_1.Buffer.concat = makeNoOp ? noop : OriginalBufferConcat;    }    : (_) => { };const _superWrite = Symbol('_superWrite');class ZlibError extends Error {    code;    errno;    constructor(err) {        super('zlib: ' + err.message);        this.code = err.code;        this.errno = err.errno;        /* c8 ignore next */        if (!this.code)            this.code = 'ZLIB_ERROR';        this.message = 'zlib: ' + err.message;        Error.captureStackTrace(this, this.constructor);    }    get name() {        return 'ZlibError';    }}exports.ZlibError = ZlibError;// the Zlib class they all inherit from// This thing manages the queue of requests, and returns// true or false if there is anything in the queue when// you call the .write() method.const _flushFlag = Symbol('flushFlag');class ZlibBase extends minipass_1.Minipass {    #sawError = false;    #ended = false;    #flushFlag;    #finishFlushFlag;    #fullFlushFlag;    #handle;    #onError;    get sawError() {        return this.#sawError;    }    get handle() {        return this.#handle;    }    /* c8 ignore start */    get flushFlag() {        return this.#flushFlag;    }    /* c8 ignore stop */    constructor(opts, mode) {        if (!opts || typeof opts !== 'object')            throw new TypeError('invalid options for ZlibBase constructor');        //@ts-ignore        super(opts);        /* c8 ignore start */        this.#flushFlag = opts.flush ?? 0;        this.#finishFlushFlag = opts.finishFlush ?? 0;        this.#fullFlushFlag = opts.fullFlushFlag ?? 0;        /* c8 ignore stop */        // this will throw if any options are invalid for the class selected        try {            // @types/node doesn't know that it exports the classes, but they're there            //@ts-ignore            this.#handle = new realZlib[mode](opts);        }        catch (er) {            // make sure that all errors get decorated properly            throw new ZlibError(er);        }        this.#onError = err => {            // no sense raising multiple errors, since we abort on the first one.            if (this.#sawError)                return;            this.#sawError = true;            // there is no way to cleanly recover.            // continuing only obscures problems.            this.close();            this.emit('error', err);        };        this.#handle?.on('error', er => this.#onError(new ZlibError(er)));        this.once('end', () => this.close);    }    close() {        if (this.#handle) {            this.#handle.close();            this.#handle = undefined;            this.emit('close');        }    }    reset() {        if (!this.#sawError) {            (0, assert_1.default)(this.#handle, 'zlib binding closed');            //@ts-ignore            return this.#handle.reset?.();        }    }    flush(flushFlag) {        if (this.ended)            return;        if (typeof flushFlag !== 'number')            flushFlag = this.#fullFlushFlag;        this.write(Object.assign(buffer_1.Buffer.alloc(0), { [_flushFlag]: flushFlag }));    }    end(chunk, encoding, cb) {        /* c8 ignore start */        if (typeof chunk === 'function') {            cb = chunk;            encoding = undefined;            chunk = undefined;        }        if (typeof encoding === 'function') {            cb = encoding;            encoding = undefined;        }        /* c8 ignore stop */        if (chunk) {            if (encoding)                this.write(chunk, encoding);            else                this.write(chunk);        }        this.flush(this.#finishFlushFlag);        this.#ended = true;        return super.end(cb);    }    get ended() {        return this.#ended;    }    // overridden in the gzip classes to do portable writes    [_superWrite](data) {        return super.write(data);    }    write(chunk, encoding, cb) {        // process the chunk using the sync process        // then super.write() all the outputted chunks        if (typeof encoding === 'function')            (cb = encoding), (encoding = 'utf8');        if (typeof chunk === 'string')            chunk = buffer_1.Buffer.from(chunk, encoding);        if (this.#sawError)            return;        (0, assert_1.default)(this.#handle, 'zlib binding closed');        // _processChunk tries to .close() the native handle after it's done, so we        // intercept that by temporarily making it a no-op.        // diving into the node:zlib internals a bit here        const nativeHandle = this.#handle            ._handle;        const originalNativeClose = nativeHandle.close;        nativeHandle.close = () => { };        const originalClose = this.#handle.close;        this.#handle.close = () => { };        // It also calls `Buffer.concat()` at the end, which may be convenient        // for some, but which we are not interested in as it slows us down.        passthroughBufferConcat(true);        let result = undefined;        try {            const flushFlag = typeof chunk[_flushFlag] === 'number'                ? chunk[_flushFlag]                : this.#flushFlag;            result = this.#handle._processChunk(chunk, flushFlag);            // if we don't throw, reset it back how it was            passthroughBufferConcat(false);        }        catch (err) {            // or if we do, put Buffer.concat() back before we emit error            // Error events call into user code, which may call Buffer.concat()            passthroughBufferConcat(false);            this.#onError(new ZlibError(err));        }        finally {            if (this.#handle) {                // Core zlib resets `_handle` to null after attempting to close the                // native handle. Our no-op handler prevented actual closure, but we                // need to restore the `._handle` property.                ;                this.#handle._handle =                    nativeHandle;                nativeHandle.close = originalNativeClose;                this.#handle.close = originalClose;                // `_processChunk()` adds an 'error' listener. If we don't remove it                // after each call, these handlers start piling up.                this.#handle.removeAllListeners('error');                // make sure OUR error listener is still attached tho            }        }        if (this.#handle)            this.#handle.on('error', er => this.#onError(new ZlibError(er)));        let writeReturn;        if (result) {            if (Array.isArray(result) && result.length > 0) {                const r = result[0];                // The first buffer is always `handle._outBuffer`, which would be                // re-used for later invocations; so, we always have to copy that one.                writeReturn = this[_superWrite](buffer_1.Buffer.from(r));                for (let i = 1; i < result.length; i++) {                    writeReturn = this[_superWrite](result[i]);                }            }            else {                // either a single Buffer or an empty array                writeReturn = this[_superWrite](buffer_1.Buffer.from(result));            }        }        if (cb)            cb();        return writeReturn;    }}class Zlib extends ZlibBase {    #level;    #strategy;    constructor(opts, mode) {        opts = opts || {};        opts.flush = opts.flush || constants_js_1.constants.Z_NO_FLUSH;        opts.finishFlush = opts.finishFlush || constants_js_1.constants.Z_FINISH;        opts.fullFlushFlag = constants_js_1.constants.Z_FULL_FLUSH;        super(opts, mode);        this.#level = opts.level;        this.#strategy = opts.strategy;    }    params(level, strategy) {        if (this.sawError)            return;        if (!this.handle)            throw new Error('cannot switch params when binding is closed');        // no way to test this without also not supporting params at all        /* c8 ignore start */        if (!this.handle.params)            throw new Error('not supported in this implementation');        /* c8 ignore stop */        if (this.#level !== level || this.#strategy !== strategy) {            this.flush(constants_js_1.constants.Z_SYNC_FLUSH);            (0, assert_1.default)(this.handle, 'zlib binding closed');            // .params() calls .flush(), but the latter is always async in the            // core zlib. We override .flush() temporarily to intercept that and            // flush synchronously.            const origFlush = this.handle.flush;            this.handle.flush = (flushFlag, cb) => {                /* c8 ignore start */                if (typeof flushFlag === 'function') {                    cb = flushFlag;                    flushFlag = this.flushFlag;                }                /* c8 ignore stop */                this.flush(flushFlag);                cb?.();            };            try {                ;                this.handle.params(level, strategy);            }            finally {                this.handle.flush = origFlush;            }            /* c8 ignore start */            if (this.handle) {                this.#level = level;                this.#strategy = strategy;            }            /* c8 ignore stop */        }    }}exports.Zlib = Zlib;// minimal 2-byte headerclass Deflate extends Zlib {    constructor(opts) {        super(opts, 'Deflate');    }}exports.Deflate = Deflate;class Inflate extends Zlib {    constructor(opts) {        super(opts, 'Inflate');    }}exports.Inflate = Inflate;class Gzip extends Zlib {    #portable;    constructor(opts) {        super(opts, 'Gzip');        this.#portable = opts && !!opts.portable;    }    [_superWrite](data) {        if (!this.#portable)            return super[_superWrite](data);        // we'll always get the header emitted in one first chunk        // overwrite the OS indicator byte with 0xFF        this.#portable = false;        data[9] = 255;        return super[_superWrite](data);    }}exports.Gzip = Gzip;class Gunzip extends Zlib {    constructor(opts) {        super(opts, 'Gunzip');    }}exports.Gunzip = Gunzip;// raw - no headerclass DeflateRaw extends Zlib {    constructor(opts) {        super(opts, 'DeflateRaw');    }}exports.DeflateRaw = DeflateRaw;class InflateRaw extends Zlib {    constructor(opts) {        super(opts, 'InflateRaw');    }}exports.InflateRaw = InflateRaw;// auto-detect header.class Unzip extends Zlib {    constructor(opts) {        super(opts, 'Unzip');    }}exports.Unzip = Unzip;class Brotli extends ZlibBase {    constructor(opts, mode) {        opts = opts || {};        opts.flush = opts.flush || constants_js_1.constants.BROTLI_OPERATION_PROCESS;        opts.finishFlush =            opts.finishFlush || constants_js_1.constants.BROTLI_OPERATION_FINISH;        opts.fullFlushFlag = constants_js_1.constants.BROTLI_OPERATION_FLUSH;        super(opts, mode);    }}exports.Brotli = Brotli;class BrotliCompress extends Brotli {    constructor(opts) {        super(opts, 'BrotliCompress');    }}exports.BrotliCompress = BrotliCompress;class BrotliDecompress extends Brotli {    constructor(opts) {        super(opts, 'BrotliDecompress');    }}exports.BrotliDecompress = BrotliDecompress;//# sourceMappingURL=index.js.map
 |