"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