{"version":3,"sources":["jsdelivr-header.js","/npm/json-stream-parse@1.0.3/lib/index.js"],"names":[],"mappings":"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","file":"/npm/json-stream-parse@1.0.3/lib/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/json-stream-parse@1.0.3/lib/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","const EventEmitter = require(\"eventemitter3\"),\r\n    Stream = require(\"stream\");\r\n\r\nconst Events = {\r\n    Error: \"jsonError\",\r\n    JSON: \"json\"\r\n};\r\n\r\nconst EOT = 0x04,\r\n    SOH = 0x01,\r\n    LSB = 0x5b,\r\n    RSB = 0x5d,\r\n    LCB = 0x7b,\r\n    RCB = 0x7d;\r\n\r\nconst ALG1 = 1;\r\nconst ALG2 = 2;\r\nconst ALG3 = 3;\r\n\r\nconst MIN_ASCII = 0x00;\r\nconst MAX_ASCII = 0x7F;\r\n\r\nconst DEF_ALG = ALG1;\r\n\r\nclass Parser extends Stream.Writable {\r\n\r\n    constructor () {\r\n        super();\r\n\r\n        this._buffer = Buffer.alloc(0);\r\n        this._emitter = new EventEmitter();\r\n        this._searchIndex = 0;\r\n        this._startIndex = -1;\r\n        this._numBrackets = 0;\r\n        this._startMarker = SOH;\r\n        this._endMarker = EOT;\r\n        this._algorithm = DEF_ALG;\r\n    }\r\n\r\n    get algorithm () {\r\n        return this._algorithm;\r\n    }\r\n\r\n    get startMarker () {\r\n        return this._startMarker;\r\n    }\r\n\r\n    get endMarker () {\r\n        return this._endMarker;\r\n    }\r\n\r\n    set algorithm (value) {\r\n        this._algorithm = value;\r\n    }\r\n\r\n    set startMarker (value) {\r\n        if (typeof value === \"string\" && value.length === 1) {\r\n            this._startMarker = value.charCodeAt(0);\r\n        } else if (typeof value === \"number\" &&\r\n            value >= MIN_ASCII &&\r\n            value <= MAX_ASCII) {\r\n\r\n            this._startMarker = value;\r\n        } else {\r\n            throw new Error(\"Invalid start marker\");\r\n        }\r\n    }\r\n\r\n    set endMarker (value) {\r\n        if (typeof value === \"string\") {\r\n            this._endMarker = value.charCodeAt(0);\r\n        } else if (typeof value === \"number\" &&\r\n            value >= MIN_ASCII &&\r\n            value <= MAX_ASCII) {\r\n\r\n            this._endMarker = value;\r\n        } else {\r\n            throw new Error(\"Invalid start marker\");\r\n        }\r\n    }\r\n\r\n    on (event, cb) {\r\n        switch (event) {\r\n        case Events.JSON:\r\n            this._emitter.on(Events.JSON, cb);\r\n            break;\r\n        case Events.Error:\r\n            this._emitter.on(Events.Error, cb);\r\n            break;\r\n        default:\r\n            super.on(event, cb);\r\n        }\r\n    }\r\n\r\n    _parse (str) {\r\n        let obj = null;\r\n        try {\r\n            obj = JSON.parse(str);\r\n        } catch (error) {\r\n            if (error instanceof SyntaxError) {\r\n                return error;\r\n            }\r\n\r\n            throw error;\r\n        }\r\n\r\n        this._emitter.emit(Events.JSON, obj);\r\n    }\r\n\r\n    /**\r\n     * Parser A looks for repeated JSON objects (i.e. \"][\", \"}{\", \"}[\",\r\n     * or \"]{\").\r\n     *\r\n     * @param {Function} done - Function to call when the current buffer is\r\n     *                          fully parsed\r\n     * @returns {undefined}\r\n     */\r\n    _algorithm1 (done) {\r\n        let endChar = null;\r\n\r\n        this._startChar = this._buffer[0];\r\n        if (this._buffer[0] === LSB) {\r\n            endChar = RSB;\r\n        } else if (this._buffer[0] === LCB) {\r\n            endChar = RCB;\r\n        } else {\r\n            this._buffer = Buffer.alloc(0);\r\n            return done();\r\n        }\r\n\r\n        const index = this._getEndIndex(endChar);\r\n\r\n        // Packet isn't complete\r\n        if (index === -1 && this._buffer[this._buffer.length - 1] !== endChar) {\r\n            this._searchIndex = this._buffer.length;\r\n            done();\r\n        } else if (index === -1) {\r\n            // Packet might be complete\r\n            if (this._parse(this._buffer.toString(\"utf8\"))) {\r\n                this._searchIndex = this._buffer.length;\r\n            } else {\r\n                this._buffer = Buffer.alloc(0);\r\n                this._searchIndex = 0;\r\n            }\r\n            done();\r\n        } else {\r\n            this._parse(this._buffer.toString(\"utf8\", 0, index + 1));\r\n            this._buffer = this._buffer.slice(index + 1);\r\n            this._searchIndex = 0;\r\n            this._algorithm1(done);\r\n        }\r\n    }\r\n\r\n    _getEndIndex (char) {\r\n        const indexA = this._buffer.indexOf(\r\n            `${String.fromCharCode(char)}[`,\r\n            this._searchIndex\r\n        );\r\n        const indexB = this._buffer.indexOf(\r\n            `${String.fromCharCode(char)}{`,\r\n            this._searchIndex\r\n        );\r\n        let index = null;\r\n\r\n        if (indexA === -1) {\r\n            index = indexB;\r\n        } else if (indexB === -1) {\r\n            index = indexA;\r\n        } else {\r\n            index = indexA < indexB ?\r\n                indexA :\r\n                indexB;\r\n        }\r\n\r\n        return index;\r\n    }\r\n\r\n    /**\r\n     * AlgorithmB keeps track of JSON brackets to tell when a full JSON\r\n     * object/array has been recevied.\r\n     *\r\n     * @param {Function} done Function to call when done parsing\r\n     * @returns {undefined}\r\n     */\r\n    _algorithm2 (done) {\r\n        // Get starting bracket\r\n        if (this._numBrackets === 0) {\r\n            for (let i = 0; i < this._buffer.length; i += 1) {\r\n                if (this._buffer[i] === LSB) {\r\n                    this._startB = LSB;\r\n                    this._endB = RSB;\r\n                    this._startIndex = i;\r\n                    this._searchIndex = i + 1;\r\n                    this._numBrackets = 1;\r\n                    break;\r\n                } else if (this._buffer[i] === LCB) {\r\n                    this._startB = LCB;\r\n                    this._endB = RCB;\r\n                    this._startIndex = i;\r\n                    this._searchIndex = i + 1;\r\n                    this._numBrackets = 1;\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n\r\n        if (this._startIndex >= 0) {\r\n            for (let i = this._searchIndex; i < this._buffer.length; i += 1) {\r\n                if (this._buffer[i] === this._startB) {\r\n                    this._numBrackets += 1;\r\n                } else if (this._buffer[i] === this._endB) {\r\n                    this._numBrackets -= 1;\r\n                }\r\n\r\n                if (this._numBrackets === 0) {\r\n                    this._parse(this._buffer.slice(this._startIndex, i + 1));\r\n                    this._buffer = this._buffer.slice(i + 1);\r\n                    return this._algorithm2(done);\r\n                }\r\n            }\r\n        } else {\r\n            this._buffer = Buffer.alloc(0);\r\n        }\r\n\r\n        if (this._buffer.length > 0) {\r\n            this._searchIndex = this._buffer.length;\r\n        }\r\n        done();\r\n    }\r\n\r\n    /**\r\n     * AlgorithmE uses start/stop characters to know when a JSON structure has\r\n     * started or ended.  This also uses a Buffer instead of a String input\r\n     *\r\n     * @param {Function} done Function to call when done parsing\r\n     * @returns {undefined}\r\n     */\r\n    _algorithm3 (done) {\r\n        let end = null;\r\n\r\n        // If the start index is set then we found it on a previous iteration\r\n        if (this._startIndex < 0) {\r\n            this._startIndex = this._buffer.indexOf(this._startMarker);\r\n        }\r\n\r\n        if (this._startIndex >= 0) {\r\n            end = this._buffer.indexOf(this._endMarker, this._searchIndex);\r\n        } else {\r\n            this._buffer = Buffer.alloc(0);\r\n            return done();\r\n        }\r\n\r\n        if (end >= 0) {\r\n            this._parse(this._buffer.toString(\r\n                \"utf8\",\r\n                this._startIndex + 1,\r\n                end\r\n            ));\r\n            this._buffer = this._buffer.slice(end + 1);\r\n            this._startIndex = -1;\r\n            this._searchIndex = 0;\r\n            this._algorithm3(done);\r\n        } else {\r\n            this._buffer = this._buffer.slice(this._startIndex);\r\n            this._searchIndex = this._buffer.length;\r\n            done();\r\n        }\r\n    }\r\n\r\n    // ///////////////// //\r\n    // Transform Methods //\r\n    // ///////////////// //\r\n\r\n    _write (chunk, encoding, cb) {\r\n        this._buffer = Buffer.concat([\r\n            this._buffer,\r\n            chunk\r\n        ]);\r\n\r\n        switch (this._algorithm) {\r\n        case ALG1:\r\n            this._algorithm1(cb);\r\n            break;\r\n        case ALG2:\r\n            this._algorithm2(cb);\r\n            break;\r\n        case ALG3:\r\n            this._algorithm3(cb);\r\n            break;\r\n        default:\r\n            throw new Error(\"Inavlid parser\");\r\n        }\r\n    }\r\n\r\n    // ///////////////////// //\r\n    // End Transform Methods //\r\n    // ///////////////////// //\r\n\r\n}\r\n\r\nmodule.exports = Parser;\r\n"]}