You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					184 lines
				
				5.2 KiB
			
		
		
			
		
	
	
					184 lines
				
				5.2 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								"use strict";
							 | 
						||
| 
								 | 
							
								Object.defineProperty(exports, "__esModule", { value: true });
							 | 
						||
| 
								 | 
							
								exports.parseJsonString = exports.parseJsonNumber = exports.parseJson = void 0;
							 | 
						||
| 
								 | 
							
								const rxParseJson = /position\s(\d+)$/;
							 | 
						||
| 
								 | 
							
								function parseJson(s, pos) {
							 | 
						||
| 
								 | 
							
								    let endPos;
							 | 
						||
| 
								 | 
							
								    parseJson.message = undefined;
							 | 
						||
| 
								 | 
							
								    let matches;
							 | 
						||
| 
								 | 
							
								    if (pos)
							 | 
						||
| 
								 | 
							
								        s = s.slice(pos);
							 | 
						||
| 
								 | 
							
								    try {
							 | 
						||
| 
								 | 
							
								        parseJson.position = pos + s.length;
							 | 
						||
| 
								 | 
							
								        return JSON.parse(s);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    catch (e) {
							 | 
						||
| 
								 | 
							
								        matches = rxParseJson.exec(e.message);
							 | 
						||
| 
								 | 
							
								        if (!matches) {
							 | 
						||
| 
								 | 
							
								            parseJson.message = "unexpected end";
							 | 
						||
| 
								 | 
							
								            return undefined;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        endPos = +matches[1];
							 | 
						||
| 
								 | 
							
								        const c = s[endPos];
							 | 
						||
| 
								 | 
							
								        s = s.slice(0, endPos);
							 | 
						||
| 
								 | 
							
								        parseJson.position = pos + endPos;
							 | 
						||
| 
								 | 
							
								        try {
							 | 
						||
| 
								 | 
							
								            return JSON.parse(s);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        catch (e1) {
							 | 
						||
| 
								 | 
							
								            parseJson.message = `unexpected token ${c}`;
							 | 
						||
| 
								 | 
							
								            return undefined;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								exports.parseJson = parseJson;
							 | 
						||
| 
								 | 
							
								parseJson.message = undefined;
							 | 
						||
| 
								 | 
							
								parseJson.position = 0;
							 | 
						||
| 
								 | 
							
								parseJson.code = 'require("ajv/dist/runtime/parseJson").parseJson';
							 | 
						||
| 
								 | 
							
								function parseJsonNumber(s, pos, maxDigits) {
							 | 
						||
| 
								 | 
							
								    let numStr = "";
							 | 
						||
| 
								 | 
							
								    let c;
							 | 
						||
| 
								 | 
							
								    parseJsonNumber.message = undefined;
							 | 
						||
| 
								 | 
							
								    if (s[pos] === "-") {
							 | 
						||
| 
								 | 
							
								        numStr += "-";
							 | 
						||
| 
								 | 
							
								        pos++;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    if (s[pos] === "0") {
							 | 
						||
| 
								 | 
							
								        numStr += "0";
							 | 
						||
| 
								 | 
							
								        pos++;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    else {
							 | 
						||
| 
								 | 
							
								        if (!parseDigits(maxDigits)) {
							 | 
						||
| 
								 | 
							
								            errorMessage();
							 | 
						||
| 
								 | 
							
								            return undefined;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    if (maxDigits) {
							 | 
						||
| 
								 | 
							
								        parseJsonNumber.position = pos;
							 | 
						||
| 
								 | 
							
								        return +numStr;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    if (s[pos] === ".") {
							 | 
						||
| 
								 | 
							
								        numStr += ".";
							 | 
						||
| 
								 | 
							
								        pos++;
							 | 
						||
| 
								 | 
							
								        if (!parseDigits()) {
							 | 
						||
| 
								 | 
							
								            errorMessage();
							 | 
						||
| 
								 | 
							
								            return undefined;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    if (((c = s[pos]), c === "e" || c === "E")) {
							 | 
						||
| 
								 | 
							
								        numStr += "e";
							 | 
						||
| 
								 | 
							
								        pos++;
							 | 
						||
| 
								 | 
							
								        if (((c = s[pos]), c === "+" || c === "-")) {
							 | 
						||
| 
								 | 
							
								            numStr += c;
							 | 
						||
| 
								 | 
							
								            pos++;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        if (!parseDigits()) {
							 | 
						||
| 
								 | 
							
								            errorMessage();
							 | 
						||
| 
								 | 
							
								            return undefined;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    parseJsonNumber.position = pos;
							 | 
						||
| 
								 | 
							
								    return +numStr;
							 | 
						||
| 
								 | 
							
								    function parseDigits(maxLen) {
							 | 
						||
| 
								 | 
							
								        let digit = false;
							 | 
						||
| 
								 | 
							
								        while (((c = s[pos]), c >= "0" && c <= "9" && (maxLen === undefined || maxLen-- > 0))) {
							 | 
						||
| 
								 | 
							
								            digit = true;
							 | 
						||
| 
								 | 
							
								            numStr += c;
							 | 
						||
| 
								 | 
							
								            pos++;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        return digit;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    function errorMessage() {
							 | 
						||
| 
								 | 
							
								        parseJsonNumber.position = pos;
							 | 
						||
| 
								 | 
							
								        parseJsonNumber.message = pos < s.length ? `unexpected token ${s[pos]}` : "unexpected end";
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								exports.parseJsonNumber = parseJsonNumber;
							 | 
						||
| 
								 | 
							
								parseJsonNumber.message = undefined;
							 | 
						||
| 
								 | 
							
								parseJsonNumber.position = 0;
							 | 
						||
| 
								 | 
							
								parseJsonNumber.code = 'require("ajv/dist/runtime/parseJson").parseJsonNumber';
							 | 
						||
| 
								 | 
							
								const escapedChars = {
							 | 
						||
| 
								 | 
							
								    b: "\b",
							 | 
						||
| 
								 | 
							
								    f: "\f",
							 | 
						||
| 
								 | 
							
								    n: "\n",
							 | 
						||
| 
								 | 
							
								    r: "\r",
							 | 
						||
| 
								 | 
							
								    t: "\t",
							 | 
						||
| 
								 | 
							
								    '"': '"',
							 | 
						||
| 
								 | 
							
								    "/": "/",
							 | 
						||
| 
								 | 
							
								    "\\": "\\",
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								const CODE_A = "a".charCodeAt(0);
							 | 
						||
| 
								 | 
							
								const CODE_0 = "0".charCodeAt(0);
							 | 
						||
| 
								 | 
							
								function parseJsonString(s, pos) {
							 | 
						||
| 
								 | 
							
								    let str = "";
							 | 
						||
| 
								 | 
							
								    let c;
							 | 
						||
| 
								 | 
							
								    parseJsonString.message = undefined;
							 | 
						||
| 
								 | 
							
								    // eslint-disable-next-line no-constant-condition, @typescript-eslint/no-unnecessary-condition
							 | 
						||
| 
								 | 
							
								    while (true) {
							 | 
						||
| 
								 | 
							
								        c = s[pos++];
							 | 
						||
| 
								 | 
							
								        if (c === '"')
							 | 
						||
| 
								 | 
							
								            break;
							 | 
						||
| 
								 | 
							
								        if (c === "\\") {
							 | 
						||
| 
								 | 
							
								            c = s[pos];
							 | 
						||
| 
								 | 
							
								            if (c in escapedChars) {
							 | 
						||
| 
								 | 
							
								                str += escapedChars[c];
							 | 
						||
| 
								 | 
							
								                pos++;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            else if (c === "u") {
							 | 
						||
| 
								 | 
							
								                pos++;
							 | 
						||
| 
								 | 
							
								                let count = 4;
							 | 
						||
| 
								 | 
							
								                let code = 0;
							 | 
						||
| 
								 | 
							
								                while (count--) {
							 | 
						||
| 
								 | 
							
								                    code <<= 4;
							 | 
						||
| 
								 | 
							
								                    c = s[pos];
							 | 
						||
| 
								 | 
							
								                    if (c === undefined) {
							 | 
						||
| 
								 | 
							
								                        errorMessage("unexpected end");
							 | 
						||
| 
								 | 
							
								                        return undefined;
							 | 
						||
| 
								 | 
							
								                    }
							 | 
						||
| 
								 | 
							
								                    c = c.toLowerCase();
							 | 
						||
| 
								 | 
							
								                    if (c >= "a" && c <= "f") {
							 | 
						||
| 
								 | 
							
								                        code += c.charCodeAt(0) - CODE_A + 10;
							 | 
						||
| 
								 | 
							
								                    }
							 | 
						||
| 
								 | 
							
								                    else if (c >= "0" && c <= "9") {
							 | 
						||
| 
								 | 
							
								                        code += c.charCodeAt(0) - CODE_0;
							 | 
						||
| 
								 | 
							
								                    }
							 | 
						||
| 
								 | 
							
								                    else {
							 | 
						||
| 
								 | 
							
								                        errorMessage(`unexpected token ${c}`);
							 | 
						||
| 
								 | 
							
								                        return undefined;
							 | 
						||
| 
								 | 
							
								                    }
							 | 
						||
| 
								 | 
							
								                    pos++;
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								                str += String.fromCharCode(code);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            else {
							 | 
						||
| 
								 | 
							
								                errorMessage(`unexpected token ${c}`);
							 | 
						||
| 
								 | 
							
								                return undefined;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        else if (c === undefined) {
							 | 
						||
| 
								 | 
							
								            errorMessage("unexpected end");
							 | 
						||
| 
								 | 
							
								            return undefined;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        else {
							 | 
						||
| 
								 | 
							
								            if (c.charCodeAt(0) >= 0x20) {
							 | 
						||
| 
								 | 
							
								                str += c;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            else {
							 | 
						||
| 
								 | 
							
								                errorMessage(`unexpected token ${c}`);
							 | 
						||
| 
								 | 
							
								                return undefined;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    parseJsonString.position = pos;
							 | 
						||
| 
								 | 
							
								    return str;
							 | 
						||
| 
								 | 
							
								    function errorMessage(msg) {
							 | 
						||
| 
								 | 
							
								        parseJsonString.position = pos;
							 | 
						||
| 
								 | 
							
								        parseJsonString.message = msg;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								exports.parseJsonString = parseJsonString;
							 | 
						||
| 
								 | 
							
								parseJsonString.message = undefined;
							 | 
						||
| 
								 | 
							
								parseJsonString.position = 0;
							 | 
						||
| 
								 | 
							
								parseJsonString.code = 'require("ajv/dist/runtime/parseJson").parseJsonString';
							 | 
						||
| 
								 | 
							
								//# sourceMappingURL=parseJson.js.map
							 |