184 lines
5.2 KiB
JavaScript
184 lines
5.2 KiB
JavaScript
|
"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
|