rdesign/frontend/node_modules/untruncate-json/dist/esm/index.js

215 lines
7.9 KiB
JavaScript

function isWhitespace(char) {
return "\u0020\u000D\u000A\u0009".indexOf(char) >= 0;
}
export default function untruncateJson(json) {
var contextStack = ["topLevel" /* TOP_LEVEL */];
var position = 0;
var respawnPosition;
var respawnStackLength;
var respawnReason;
var push = function (context) { return contextStack.push(context); };
var replace = function (context) {
return (contextStack[contextStack.length - 1] = context);
};
var setRespawn = function (reason) {
if (respawnPosition == null) {
respawnPosition = position;
respawnStackLength = contextStack.length;
respawnReason = reason;
}
};
var clearRespawn = function (reason) {
if (reason === respawnReason) {
respawnPosition = undefined;
respawnStackLength = undefined;
respawnReason = undefined;
}
};
var pop = function () { return contextStack.pop(); };
var dontConsumeCharacter = function () { return position--; };
var startAny = function (char) {
if ("0" <= char && char <= "9") {
push("number" /* NUMBER */);
return;
}
switch (char) {
case '"':
push("string" /* STRING */);
return;
case "-":
push("numberNeedsDigit" /* NUMBER_NEEDS_DIGIT */);
return;
case "t":
push("true" /* TRUE */);
return;
case "f":
push("false" /* FALSE */);
return;
case "n":
push("null" /* NULL */);
return;
case "[":
push("arrayNeedsValue" /* ARRAY_NEEDS_VALUE */);
return;
case "{":
push("objectNeedsKey" /* OBJECT_NEEDS_KEY */);
return;
}
};
for (var length = json.length; position < length; position++) {
var char = json[position];
switch (contextStack[contextStack.length - 1]) {
case "topLevel" /* TOP_LEVEL */:
startAny(char);
break;
case "string" /* STRING */:
switch (char) {
case '"':
pop();
break;
case "\\":
setRespawn("stringEscape" /* STRING_ESCAPE */);
push("stringEscaped" /* STRING_ESCAPED */);
break;
}
break;
case "stringEscaped" /* STRING_ESCAPED */:
if (char === "u") {
push("stringUnicode" /* STRING_UNICODE */);
}
else {
clearRespawn("stringEscape" /* STRING_ESCAPE */);
pop();
}
break;
case "stringUnicode" /* STRING_UNICODE */:
if (position - json.lastIndexOf("u", position) === 4) {
clearRespawn("stringEscape" /* STRING_ESCAPE */);
pop();
}
break;
case "number" /* NUMBER */:
if (char === ".") {
replace("numberNeedsDigit" /* NUMBER_NEEDS_DIGIT */);
}
else if (char === "e" || char === "E") {
replace("numberNeedsExponent" /* NUMBER_NEEDS_EXPONENT */);
}
else if (char < "0" || char > "9") {
dontConsumeCharacter();
pop();
}
break;
case "numberNeedsDigit" /* NUMBER_NEEDS_DIGIT */:
replace("number" /* NUMBER */);
break;
case "numberNeedsExponent" /* NUMBER_NEEDS_EXPONENT */:
if (char === "+" || char === "-") {
replace("numberNeedsDigit" /* NUMBER_NEEDS_DIGIT */);
}
else {
replace("number" /* NUMBER */);
}
break;
case "true" /* TRUE */:
case "false" /* FALSE */:
case "null" /* NULL */:
if (char < "a" || char > "z") {
dontConsumeCharacter();
pop();
}
break;
case "arrayNeedsValue" /* ARRAY_NEEDS_VALUE */:
if (char === "]") {
pop();
}
else if (!isWhitespace(char)) {
clearRespawn("collectionItem" /* COLLECTION_ITEM */);
replace("arrayNeedsComma" /* ARRAY_NEEDS_COMMA */);
startAny(char);
}
break;
case "arrayNeedsComma" /* ARRAY_NEEDS_COMMA */:
if (char === "]") {
pop();
}
else if (char === ",") {
setRespawn("collectionItem" /* COLLECTION_ITEM */);
replace("arrayNeedsValue" /* ARRAY_NEEDS_VALUE */);
}
break;
case "objectNeedsKey" /* OBJECT_NEEDS_KEY */:
if (char === "}") {
pop();
}
else if (char === '"') {
setRespawn("collectionItem" /* COLLECTION_ITEM */);
replace("objectNeedsColon" /* OBJECT_NEEDS_COLON */);
push("string" /* STRING */);
}
break;
case "objectNeedsColon" /* OBJECT_NEEDS_COLON */:
if (char === ":") {
replace("objectNeedsValue" /* OBJECT_NEEDS_VALUE */);
}
break;
case "objectNeedsValue" /* OBJECT_NEEDS_VALUE */:
if (!isWhitespace(char)) {
clearRespawn("collectionItem" /* COLLECTION_ITEM */);
replace("objectNeedsComma" /* OBJECT_NEEDS_COMMA */);
startAny(char);
}
break;
case "objectNeedsComma" /* OBJECT_NEEDS_COMMA */:
if (char === "}") {
pop();
}
else if (char === ",") {
setRespawn("collectionItem" /* COLLECTION_ITEM */);
replace("objectNeedsKey" /* OBJECT_NEEDS_KEY */);
}
break;
}
}
if (respawnStackLength != null) {
contextStack.length = respawnStackLength;
}
var result = [
respawnPosition != null ? json.slice(0, respawnPosition) : json,
];
var finishWord = function (word) {
return result.push(word.slice(json.length - json.lastIndexOf(word[0])));
};
for (var i = contextStack.length - 1; i >= 0; i--) {
switch (contextStack[i]) {
case "string" /* STRING */:
result.push('"');
break;
case "numberNeedsDigit" /* NUMBER_NEEDS_DIGIT */:
case "numberNeedsExponent" /* NUMBER_NEEDS_EXPONENT */:
result.push("0");
break;
case "true" /* TRUE */:
finishWord("true");
break;
case "false" /* FALSE */:
finishWord("false");
break;
case "null" /* NULL */:
finishWord("null");
break;
case "arrayNeedsValue" /* ARRAY_NEEDS_VALUE */:
case "arrayNeedsComma" /* ARRAY_NEEDS_COMMA */:
result.push("]");
break;
case "objectNeedsKey" /* OBJECT_NEEDS_KEY */:
case "objectNeedsColon" /* OBJECT_NEEDS_COLON */:
case "objectNeedsValue" /* OBJECT_NEEDS_VALUE */:
case "objectNeedsComma" /* OBJECT_NEEDS_COMMA */:
result.push("}");
break;
}
}
return result.join("");
}
//# sourceMappingURL=index.js.map