🎩 You're Invited:Meet the Socket team at Black Hat in Las Vegas, August 3-6.RSVP
Sign In

jsonrepair

Package Overview
Dependencies
Maintainers
1
Versions
41
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

jsonrepair - npm Package Compare versions

Comparing version
3.14.1
to
3.15.0
+35
-7
lib/cjs/regular/jsonrepair.js

@@ -370,9 +370,16 @@ "use strict";

let stopAtIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : -1;
let skipEscapeChars = text[i] === '\\';
const skipEscapeChars = text[i] === '\\';
if (skipEscapeChars) {
// repair: remove the first escape character
i++;
skipEscapeChars = true;
if (!(0, _stringUtils.isQuote)(text[i])) {
throwUnexpectedCharacter();
}
}
if ((0, _stringUtils.isQuote)(text[i])) {
// a string can be opened by a quote character, or by an HTML entity that
// decodes to a quote (like ") when repairing HTML-encoded JSON
const openEntity = text[i] === '&' ? (0, _stringUtils.matchHtmlEntity)(text.slice(i, i + _stringUtils.maxHtmlEntityLength)) : null;
const openedByEntity = (0, _stringUtils.isDoubleQuoteEntity)(openEntity) || (0, _stringUtils.isSingleQuoteEntity)(openEntity);
if ((0, _stringUtils.isQuote)(text[i]) || openedByEntity) {
// double quotes are correct JSON,

@@ -386,3 +393,4 @@ // single quotes come from JavaScript for example, we assume it will have a correct single end quote too

let str = '"';
i++;
// when opened by an entity, skip past the whole entity; otherwise skip the quote
i += openedByEntity && openEntity ? openEntity.length : 1;
while (true) {

@@ -413,3 +421,8 @@ if (i >= text.length) {

}
if (isEndQuote(text[i])) {
// inside an entity-opened string a '&' is an entity; it is the end quote
// when it decodes to the opening quote
const entity = openedByEntity && text[i] === '&' ? (0, _stringUtils.matchHtmlEntity)(text.slice(i, i + _stringUtils.maxHtmlEntityLength)) : null;
const isEnd = entity && openEntity ? entity.char === openEntity.char : isEndQuote(text[i]);
if (isEnd) {
// end quote

@@ -420,3 +433,3 @@ // let us check what is before and after the quote to verify whether this is a legit end quote

str += '"';
i++;
i += entity ? entity.length : 1;
output += str;

@@ -433,2 +446,5 @@ parseWhitespaceAndSkipComments(false);

}
if (text[i] === '\\') {
throwUnexpectedCharacter();
}
const iPrevChar = prevNonWhitespaceIndex(iQuote - 1);

@@ -455,3 +471,3 @@ const prevChar = text.charAt(iPrevChar);

output = output.substring(0, oBefore);
i = iQuote + 1;
i = iQuote + (entity ? entity.length : 1);

@@ -477,2 +493,14 @@ // repair unescaped quote

return true;
} else if (entity) {
// decode an HTML entity inside the string as content
const char = entity.char;
if (char === '"') {
// repair unescaped double quote
str += '\\"';
} else if ((0, _stringUtils.isControlCharacter)(char)) {
str += controlCharacters[char];
} else {
str += char;
}
i += entity.length;
} else if (text[i] === '\\') {

@@ -479,0 +507,0 @@ // handle escaped content like \n or \u2605

+1
-1

@@ -1,1 +0,1 @@

{"version":3,"file":"jsonrepair.js","names":["_JSONRepairError","require","_stringUtils","controlCharacters","escapeCharacters","b","f","n","r","t","jsonrepair","text","i","output","parseMarkdownCodeBlock","processed","parseValue","throwUnexpectedEnd","processedComma","parseCharacter","parseWhitespaceAndSkipComments","isStartOfValue","endsWithCommaOrNewline","insertBeforeLastWhitespace","parseNewlineDelimitedJSON","stripLastOccurrence","length","throwUnexpectedCharacter","parseObject","parseArray","parseString","parseNumber","parseKeywords","parseUnquotedString","parseRegex","skipNewline","arguments","undefined","start","changed","parseWhitespace","parseComment","_isWhiteSpace","isWhitespace","isWhitespaceExceptNewline","whitespace","isSpecialWhitespace","atEndOfBlockComment","blocks","skipMarkdownCodeBlock","isFunctionNameCharStart","isFunctionNameChar","block","end","slice","char","skipCharacter","skipEscapeCharacter","skipEllipsis","initial","processedKey","throwObjectKeyExpected","processedColon","truncatedText","throwColonExpected","processedValue","stopAtDelimiter","stopAtIndex","skipEscapeChars","isQuote","isEndQuote","isDoubleQuote","isSingleQuote","isSingleQuoteLike","isDoubleQuoteLike","iBefore","oBefore","str","iPrev","prevNonWhitespaceIndex","isDelimiter","charAt","substring","iQuote","oQuote","isInsideUnclosedBracket","nextQuoteIsEndQuote","isDigit","parseConcatenatedString","iPrevChar","prevChar","isUnquotedStringDelimiter","regexUrlStart","test","regexUrlChar","escapeChar","j","isHex","throwInvalidUnicodeCharacter","isControlCharacter","isValidStringCharacter","throwInvalidCharacter","parsedStr","removeAtIndex","num","invalid","atEndOfNumber","parseKeyword","name","value","isKey","symbol","JSON","stringify","prev","index","next","JSONRepairError","chars"],"sources":["../../../src/regular/jsonrepair.ts"],"sourcesContent":["import { JSONRepairError } from '../utils/JSONRepairError.js'\nimport {\n endsWithCommaOrNewline,\n insertBeforeLastWhitespace,\n isControlCharacter,\n isDelimiter,\n isDigit,\n isDoubleQuote,\n isDoubleQuoteLike,\n isFunctionNameChar,\n isFunctionNameCharStart,\n isHex,\n isInsideUnclosedBracket,\n isQuote,\n isSingleQuote,\n isSingleQuoteLike,\n isSpecialWhitespace,\n isStartOfValue,\n isUnquotedStringDelimiter,\n isValidStringCharacter,\n isWhitespace,\n isWhitespaceExceptNewline,\n regexUrlChar,\n regexUrlStart,\n removeAtIndex,\n stripLastOccurrence\n} from '../utils/stringUtils.js'\n\nconst controlCharacters: { [key: string]: string } = {\n '\\b': '\\\\b',\n '\\f': '\\\\f',\n '\\n': '\\\\n',\n '\\r': '\\\\r',\n '\\t': '\\\\t'\n}\n\n// map with all escape characters\nconst escapeCharacters: { [key: string]: string } = {\n '\"': '\"',\n '\\\\': '\\\\',\n '/': '/',\n b: '\\b',\n f: '\\f',\n n: '\\n',\n r: '\\r',\n t: '\\t'\n // note that \\u is handled separately in parseString()\n}\n\n/**\n * Repair a string containing an invalid JSON document.\n * For example changes JavaScript notation into JSON notation.\n *\n * Example:\n *\n * try {\n * const json = \"{name: 'John'}\"\n * const repaired = jsonrepair(json)\n * console.log(repaired)\n * // '{\"name\": \"John\"}'\n * } catch (err) {\n * console.error(err)\n * }\n *\n */\nexport function jsonrepair(text: string): string {\n let i = 0 // current index in text\n let output = '' // generated output\n\n parseMarkdownCodeBlock(['```', '[```', '{```'])\n\n const processed = parseValue()\n if (!processed) {\n throwUnexpectedEnd()\n }\n\n parseMarkdownCodeBlock(['```', '```]', '```}'])\n\n const processedComma = parseCharacter(',')\n if (processedComma) {\n parseWhitespaceAndSkipComments()\n }\n\n if (isStartOfValue(text[i]) && endsWithCommaOrNewline(output)) {\n // start of a new value after end of the root level object: looks like\n // newline delimited JSON -> turn into a root level array\n if (!processedComma) {\n // repair missing comma\n output = insertBeforeLastWhitespace(output, ',')\n }\n\n parseNewlineDelimitedJSON()\n } else if (processedComma) {\n // repair: remove trailing comma\n output = stripLastOccurrence(output, ',')\n }\n\n // repair redundant end quotes\n while (text[i] === '}' || text[i] === ']') {\n i++\n parseWhitespaceAndSkipComments()\n }\n\n if (i >= text.length) {\n // reached the end of the document properly\n return output\n }\n\n throwUnexpectedCharacter()\n\n function parseValue(): boolean {\n parseWhitespaceAndSkipComments()\n const processed =\n parseObject() ||\n parseArray() ||\n parseString() ||\n parseNumber() ||\n parseKeywords() ||\n parseUnquotedString(false) ||\n parseRegex()\n parseWhitespaceAndSkipComments()\n\n return processed\n }\n\n function parseWhitespaceAndSkipComments(skipNewline = true): boolean {\n const start = i\n\n let changed = parseWhitespace(skipNewline)\n do {\n changed = parseComment()\n if (changed) {\n changed = parseWhitespace(skipNewline)\n }\n } while (changed)\n\n return i > start\n }\n\n function parseWhitespace(skipNewline: boolean): boolean {\n const _isWhiteSpace = skipNewline ? isWhitespace : isWhitespaceExceptNewline\n let whitespace = ''\n\n while (true) {\n if (_isWhiteSpace(text, i)) {\n whitespace += text[i]\n i++\n } else if (isSpecialWhitespace(text, i)) {\n // repair special whitespace\n whitespace += ' '\n i++\n } else {\n break\n }\n }\n\n if (whitespace.length > 0) {\n output += whitespace\n return true\n }\n\n return false\n }\n\n function parseComment(): boolean {\n // find a block comment '/* ... */'\n if (text[i] === '/' && text[i + 1] === '*') {\n // repair block comment by skipping it\n while (i < text.length && !atEndOfBlockComment(text, i)) {\n i++\n }\n i += 2\n\n return true\n }\n\n // find a line comment '// ...'\n if (text[i] === '/' && text[i + 1] === '/') {\n // repair line comment by skipping it\n while (i < text.length && text[i] !== '\\n') {\n i++\n }\n\n return true\n }\n\n return false\n }\n\n function parseMarkdownCodeBlock(blocks: string[]): boolean {\n // find and skip over a Markdown fenced code block:\n // ``` ... ```\n // or\n // ```json ... ```\n if (skipMarkdownCodeBlock(blocks)) {\n if (isFunctionNameCharStart(text[i])) {\n // strip the optional language specifier like \"json\"\n while (i < text.length && isFunctionNameChar(text[i])) {\n i++\n }\n }\n\n parseWhitespaceAndSkipComments()\n\n return true\n }\n\n return false\n }\n\n function skipMarkdownCodeBlock(blocks: string[]): boolean {\n parseWhitespace(true)\n\n for (const block of blocks) {\n const end = i + block.length\n if (text.slice(i, end) === block) {\n i = end\n return true\n }\n }\n\n return false\n }\n\n function parseCharacter(char: string): boolean {\n if (text[i] === char) {\n output += text[i]\n i++\n return true\n }\n\n return false\n }\n\n function skipCharacter(char: string): boolean {\n if (text[i] === char) {\n i++\n return true\n }\n\n return false\n }\n\n function skipEscapeCharacter(): boolean {\n return skipCharacter('\\\\')\n }\n\n /**\n * Skip ellipsis like \"[1,2,3,...]\" or \"[1,2,3,...,9]\" or \"[...,7,8,9]\"\n * or a similar construct in objects.\n */\n function skipEllipsis(): boolean {\n parseWhitespaceAndSkipComments()\n\n if (text[i] === '.' && text[i + 1] === '.' && text[i + 2] === '.') {\n // repair: remove the ellipsis (three dots) and optionally a comma\n i += 3\n parseWhitespaceAndSkipComments()\n skipCharacter(',')\n\n return true\n }\n\n return false\n }\n\n /**\n * Parse an object like '{\"key\": \"value\"}'\n */\n function parseObject(): boolean {\n if (text[i] === '{') {\n output += '{'\n i++\n parseWhitespaceAndSkipComments()\n\n // repair: skip leading comma like in {, message: \"hi\"}\n if (skipCharacter(',')) {\n parseWhitespaceAndSkipComments()\n }\n\n let initial = true\n while (i < text.length && text[i] !== '}') {\n let processedComma: boolean\n if (!initial) {\n processedComma = parseCharacter(',')\n if (!processedComma) {\n // repair missing comma\n output = insertBeforeLastWhitespace(output, ',')\n }\n parseWhitespaceAndSkipComments()\n } else {\n processedComma = true\n }\n\n skipEllipsis()\n\n const processedKey = parseString() || parseUnquotedString(true)\n if (!processedKey) {\n if (\n text[i] === '}' ||\n text[i] === '{' ||\n text[i] === ']' ||\n text[i] === '[' ||\n text[i] === undefined\n ) {\n // repair trailing comma\n if (!initial) {\n output = stripLastOccurrence(output, ',')\n }\n } else {\n throwObjectKeyExpected()\n }\n break\n }\n\n parseWhitespaceAndSkipComments()\n const processedColon = parseCharacter(':')\n const truncatedText = i >= text.length\n if (!processedColon) {\n if (isStartOfValue(text[i]) || truncatedText) {\n // repair missing colon\n output = insertBeforeLastWhitespace(output, ':')\n } else {\n throwColonExpected()\n }\n }\n const processedValue = parseValue()\n if (!processedValue) {\n if (processedColon || truncatedText) {\n // repair missing object value\n output += 'null'\n } else {\n throwColonExpected()\n }\n }\n\n initial = false\n }\n\n if (text[i] === '}') {\n output += '}'\n i++\n } else {\n // repair missing end bracket\n output = insertBeforeLastWhitespace(output, '}')\n }\n\n return true\n }\n\n return false\n }\n\n /**\n * Parse an array like '[\"item1\", \"item2\", ...]'\n */\n function parseArray(): boolean {\n if (text[i] === '[') {\n output += '['\n i++\n parseWhitespaceAndSkipComments()\n\n // repair: skip leading comma like in [,1,2,3]\n if (skipCharacter(',')) {\n parseWhitespaceAndSkipComments()\n }\n\n let initial = true\n while (i < text.length && text[i] !== ']') {\n if (!initial) {\n const processedComma = parseCharacter(',')\n if (!processedComma) {\n // repair missing comma\n output = insertBeforeLastWhitespace(output, ',')\n }\n }\n\n skipEllipsis()\n\n const processedValue = parseValue()\n if (!processedValue) {\n // repair trailing comma\n if (!initial) {\n output = stripLastOccurrence(output, ',')\n }\n break\n }\n\n initial = false\n }\n\n if (text[i] === ']') {\n output += ']'\n i++\n } else {\n // repair missing closing array bracket\n output = insertBeforeLastWhitespace(output, ']')\n }\n\n return true\n }\n\n return false\n }\n\n /**\n * Parse and repair Newline Delimited JSON (NDJSON):\n * multiple JSON objects separated by a newline character\n */\n function parseNewlineDelimitedJSON() {\n // repair NDJSON\n let initial = true\n let processedValue = true\n while (processedValue) {\n if (!initial) {\n // parse optional comma, insert when missing\n const processedComma = parseCharacter(',')\n if (!processedComma) {\n // repair: add missing comma\n output = insertBeforeLastWhitespace(output, ',')\n }\n } else {\n initial = false\n }\n\n processedValue = parseValue()\n }\n\n if (!processedValue) {\n // repair: remove trailing comma\n output = stripLastOccurrence(output, ',')\n }\n\n // repair: wrap the output inside array brackets\n output = `[\\n${output}\\n]`\n }\n\n /**\n * Parse a string enclosed by double quotes \"...\". Can contain escaped quotes\n * Repair strings enclosed in single quotes or special quotes\n * Repair an escaped string\n *\n * The function can run in two stages:\n * - First, it assumes the string has a valid end quote\n * - If it turns out that the string does not have a valid end quote followed\n * by a delimiter (which should be the case), the function runs again in a\n * more conservative way, stopping the string at the first next delimiter\n * and fixing the string by inserting a quote there, or stopping at a\n * stop index detected in the first iteration.\n */\n function parseString(stopAtDelimiter = false, stopAtIndex = -1): boolean {\n let skipEscapeChars = text[i] === '\\\\'\n if (skipEscapeChars) {\n // repair: remove the first escape character\n i++\n skipEscapeChars = true\n }\n\n if (isQuote(text[i])) {\n // double quotes are correct JSON,\n // single quotes come from JavaScript for example, we assume it will have a correct single end quote too\n // otherwise, we will match any double-quote-like start with a double-quote-like end,\n // or any single-quote-like start with a single-quote-like end\n const isEndQuote = isDoubleQuote(text[i])\n ? isDoubleQuote\n : isSingleQuote(text[i])\n ? isSingleQuote\n : isSingleQuoteLike(text[i])\n ? isSingleQuoteLike\n : isDoubleQuoteLike\n\n const iBefore = i\n const oBefore = output.length\n\n let str = '\"'\n i++\n\n while (true) {\n if (i >= text.length) {\n // end of text, we are missing an end quote\n\n const iPrev = prevNonWhitespaceIndex(i - 1)\n if (!stopAtDelimiter && isDelimiter(text.charAt(iPrev))) {\n // if the text ends with a delimiter, like [\"hello],\n // so the missing end quote should be inserted before this delimiter\n // retry parsing the string, stopping at the first next delimiter\n i = iBefore\n output = output.substring(0, oBefore)\n\n return parseString(true)\n }\n\n // repair missing quote\n str = insertBeforeLastWhitespace(str, '\"')\n output += str\n\n return true\n }\n\n if (i === stopAtIndex) {\n // use the stop index detected in the first iteration, and repair end quote\n str = insertBeforeLastWhitespace(str, '\"')\n output += str\n\n return true\n }\n\n if (isEndQuote(text[i])) {\n // end quote\n // let us check what is before and after the quote to verify whether this is a legit end quote\n const iQuote = i\n const oQuote = str.length\n str += '\"'\n i++\n output += str\n\n parseWhitespaceAndSkipComments(false)\n\n if (\n stopAtDelimiter ||\n i >= text.length ||\n (isDelimiter(text[i]) &&\n // only count the brackets inside the string when actually needed,\n // i.e. when the quote is directly followed by a closing bracket\n !isInsideUnclosedBracket(str, text[i])) ||\n (isQuote(text[i]) && !nextQuoteIsEndQuote(i)) ||\n isDigit(text[i])\n ) {\n // The quote is followed by the end of the text, a delimiter,\n // or a next value. So the quote is indeed the end of the string.\n parseConcatenatedString()\n\n return true\n }\n\n const iPrevChar = prevNonWhitespaceIndex(iQuote - 1)\n const prevChar = text.charAt(iPrevChar)\n\n if (prevChar === ',') {\n // A comma followed by a quote, like '{\"a\":\"b,c,\"d\":\"e\"}'.\n // We assume that the quote is a start quote, and that the end quote\n // should have been located right before the comma but is missing.\n i = iBefore\n output = output.substring(0, oBefore)\n\n return parseString(false, iPrevChar)\n }\n\n if (isDelimiter(prevChar)) {\n // This is not the right end quote: it is preceded by a delimiter,\n // and NOT followed by a delimiter. So, there is an end quote missing\n // parse the string again and then stop at the first next delimiter\n i = iBefore\n output = output.substring(0, oBefore)\n\n return parseString(true)\n }\n\n // revert to right after the quote but before any whitespace, and continue parsing the string\n output = output.substring(0, oBefore)\n i = iQuote + 1\n\n // repair unescaped quote\n str = `${str.substring(0, oQuote)}\\\\${str.substring(oQuote)}`\n } else if (stopAtDelimiter && isUnquotedStringDelimiter(text[i])) {\n // we're in the mode to stop the string at the first delimiter\n // because there is an end quote missing\n\n // test start of an url like \"https://...\" (this would be parsed as a comment)\n if (text[i - 1] === ':' && regexUrlStart.test(text.substring(iBefore + 1, i + 2))) {\n while (i < text.length && regexUrlChar.test(text[i])) {\n str += text[i]\n i++\n }\n }\n\n // repair missing quote\n str = insertBeforeLastWhitespace(str, '\"')\n output += str\n\n parseConcatenatedString()\n\n return true\n } else if (text[i] === '\\\\') {\n // handle escaped content like \\n or \\u2605\n const char = text.charAt(i + 1)\n const escapeChar = escapeCharacters[char]\n if (escapeChar !== undefined) {\n str += text.slice(i, i + 2)\n i += 2\n } else if (char === 'u') {\n let j = 2\n while (j < 6 && isHex(text[i + j])) {\n j++\n }\n\n if (j === 6) {\n str += text.slice(i, i + 6)\n i += 6\n } else if (i + j >= text.length) {\n // repair invalid or truncated unicode char at the end of the text\n // by removing the unicode char and ending the string here\n i = text.length\n } else {\n throwInvalidUnicodeCharacter()\n }\n } else if (char === '\\n') {\n // repair a backslash escaped newline (like in Bash scripts)\n str += '\\\\n'\n i += 2\n } else {\n // repair invalid escape character: remove it\n str += char\n i += 2\n }\n } else {\n // handle regular characters\n const char = text.charAt(i)\n\n if (char === '\"' && text[i - 1] !== '\\\\') {\n // repair unescaped double quote\n str += `\\\\${char}`\n i++\n } else if (isControlCharacter(char)) {\n // unescaped control character\n str += controlCharacters[char]\n i++\n } else {\n if (!isValidStringCharacter(char)) {\n throwInvalidCharacter(char)\n }\n str += char\n i++\n }\n }\n\n if (skipEscapeChars) {\n // repair: skipped escape character (nothing to do)\n skipEscapeCharacter()\n }\n }\n }\n\n return false\n }\n\n /**\n * Repair concatenated strings like \"hello\" + \"world\", change this into \"helloworld\"\n */\n function parseConcatenatedString(): boolean {\n let processed = false\n\n parseWhitespaceAndSkipComments()\n while (text[i] === '+') {\n processed = true\n i++\n parseWhitespaceAndSkipComments()\n\n // repair: remove the end quote of the first string\n output = stripLastOccurrence(output, '\"', true)\n const start = output.length\n const parsedStr = parseString()\n if (parsedStr) {\n // repair: remove the start quote of the second string\n output = removeAtIndex(output, start, 1)\n } else {\n // repair: remove the + because it is not followed by a string\n output = insertBeforeLastWhitespace(output, '\"')\n }\n }\n\n return processed\n }\n\n /**\n * Parse a number like 2.4 or 2.4e6\n */\n function parseNumber(): boolean {\n const start = i\n let num = ''\n let invalid = false\n\n if (text[i] === '-') {\n num += text[i]\n i++\n\n if (!isDigit(text[i]) && atEndOfNumber()) {\n // repair missing zero after minus like in \"-.2\" or \"-\"\n num += '0'\n }\n }\n\n if (text[i] === '0' && isDigit(text[i + 1])) {\n // the number has leading zeros like \"00123\" or \"001.23\"\n invalid = true\n }\n\n while (isDigit(text[i])) {\n num += text[i]\n i++\n }\n\n if (text[i] === '.') {\n if (num === '' || num === '-') {\n // repair missing leading zero before dot\n num += '0'\n }\n\n num += text[i]\n i++\n\n if (!isDigit(text[i])) {\n // repair a truncated number like \"2.\" into \"2.0\"\n num += '0'\n }\n\n while (isDigit(text[i])) {\n num += text[i]\n i++\n }\n }\n\n if (i > start) {\n if (text[i] === 'e' || text[i] === 'E') {\n if (num === '-') {\n invalid = true\n }\n\n num += text[i]\n i++\n\n if (text[i] === '-' || text[i] === '+') {\n num += text[i]\n i++\n }\n\n if (!isDigit(text[i])) {\n // repair a truncated number like \"2e\" into \"2e0\"\n num += '0'\n }\n\n while (isDigit(text[i])) {\n num += text[i]\n i++\n }\n }\n\n // if we're not at the end of the number by this point, allow this to be parsed as another type\n if (!atEndOfNumber()) {\n i = start\n return false\n }\n\n output += invalid ? `\"${text.substring(start, i)}\"` : num\n return true\n }\n\n return false\n }\n\n /**\n * Parse keywords true, false, null\n * Repair Python keywords True, False, None\n */\n function parseKeywords(): boolean {\n return (\n parseKeyword('true', 'true') ||\n parseKeyword('false', 'false') ||\n parseKeyword('null', 'null') ||\n // repair Python keywords True, False, None\n parseKeyword('True', 'true') ||\n parseKeyword('False', 'false') ||\n parseKeyword('None', 'null')\n )\n }\n\n function parseKeyword(name: string, value: string): boolean {\n if (text.slice(i, i + name.length) === name && !isFunctionNameChar(text[i + name.length])) {\n output += value\n i += name.length\n return true\n }\n\n return false\n }\n\n /**\n * Repair an unquoted string by adding quotes around it\n * Repair a MongoDB function call like NumberLong(\"2\")\n * Repair a JSONP function call like callback({...});\n */\n function parseUnquotedString(isKey: boolean) {\n // note that the symbol can end with whitespaces: we stop at the next delimiter\n // also, note that we allow strings to contain a slash / in order to support repairing regular expressions\n const start = i\n\n if (isFunctionNameCharStart(text[i])) {\n while (i < text.length && isFunctionNameChar(text[i])) {\n i++\n }\n\n let j = i\n while (isWhitespace(text, j)) {\n j++\n }\n\n if (text[j] === '(') {\n // repair a MongoDB function call like NumberLong(\"2\")\n // repair a JSONP function call like callback({...});\n i = j + 1\n\n parseValue()\n\n if (text[i] === ')') {\n // repair: skip close bracket of function call\n i++\n if (text[i] === ';') {\n // repair: skip semicolon after JSONP call\n i++\n }\n }\n\n return true\n }\n }\n\n while (\n i < text.length &&\n !isUnquotedStringDelimiter(text[i]) &&\n !isQuote(text[i]) &&\n (!isKey || text[i] !== ':')\n ) {\n i++\n }\n\n // test start of an url like \"https://...\" (this would be parsed as a comment)\n if (text[i - 1] === ':' && regexUrlStart.test(text.substring(start, i + 2))) {\n while (i < text.length && regexUrlChar.test(text[i])) {\n i++\n }\n }\n\n if (i > start) {\n // repair unquoted string\n // also, repair undefined into null\n\n // first, go back to prevent getting trailing whitespaces in the string\n while (isWhitespace(text, i - 1) && i > 0) {\n i--\n }\n\n const symbol = text.slice(start, i)\n output += symbol === 'undefined' ? 'null' : JSON.stringify(symbol)\n\n if (text[i] === '\"') {\n // we had a missing start quote, but now we encountered the end quote, so we can skip that one\n i++\n }\n\n return true\n }\n }\n\n function parseRegex() {\n if (text[i] === '/') {\n const start = i\n i++\n\n while (i < text.length && (text[i] !== '/' || text[i - 1] === '\\\\')) {\n i++\n }\n i++\n\n output += JSON.stringify(text.substring(start, i))\n\n return true\n }\n }\n\n function prevNonWhitespaceIndex(start: number): number {\n let prev = start\n\n while (prev > 0 && isWhitespace(text, prev)) {\n prev--\n }\n\n return prev\n }\n\n function nextQuoteIsEndQuote(index: number): boolean {\n // precondition: text[index] is a quote. Peek past it: if nothing meaningful\n // follows, that quote is the true end and this one is embedded (e.g. `\"The TV is 72\"\"`)\n let next = index + 1\n while (next < text.length && isWhitespace(text, next)) {\n next++\n }\n\n return next >= text.length || isDelimiter(text[next])\n }\n\n function atEndOfNumber() {\n return i >= text.length || isDelimiter(text[i]) || isWhitespace(text, i)\n }\n\n function throwInvalidCharacter(char: string) {\n throw new JSONRepairError(`Invalid character ${JSON.stringify(char)}`, i)\n }\n\n function throwUnexpectedCharacter() {\n throw new JSONRepairError(`Unexpected character ${JSON.stringify(text[i])}`, i)\n }\n\n function throwUnexpectedEnd() {\n throw new JSONRepairError('Unexpected end of json string', text.length)\n }\n\n function throwObjectKeyExpected() {\n throw new JSONRepairError('Object key expected', i)\n }\n\n function throwColonExpected() {\n throw new JSONRepairError('Colon expected', i)\n }\n\n function throwInvalidUnicodeCharacter() {\n const chars = text.slice(i, i + 6)\n throw new JSONRepairError(`Invalid unicode character \"${chars}\"`, i)\n }\n}\n\nfunction atEndOfBlockComment(text: string, i: number) {\n return text[i] === '*' && text[i + 1] === '/'\n}\n"],"mappings":"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","ignoreList":[]}
{"version":3,"file":"jsonrepair.js","names":["_JSONRepairError","require","_stringUtils","controlCharacters","escapeCharacters","b","f","n","r","t","jsonrepair","text","i","output","parseMarkdownCodeBlock","processed","parseValue","throwUnexpectedEnd","processedComma","parseCharacter","parseWhitespaceAndSkipComments","isStartOfValue","endsWithCommaOrNewline","insertBeforeLastWhitespace","parseNewlineDelimitedJSON","stripLastOccurrence","length","throwUnexpectedCharacter","parseObject","parseArray","parseString","parseNumber","parseKeywords","parseUnquotedString","parseRegex","skipNewline","arguments","undefined","start","changed","parseWhitespace","parseComment","_isWhiteSpace","isWhitespace","isWhitespaceExceptNewline","whitespace","isSpecialWhitespace","atEndOfBlockComment","blocks","skipMarkdownCodeBlock","isFunctionNameCharStart","isFunctionNameChar","block","end","slice","char","skipCharacter","skipEscapeCharacter","skipEllipsis","initial","processedKey","throwObjectKeyExpected","processedColon","truncatedText","throwColonExpected","processedValue","stopAtDelimiter","stopAtIndex","skipEscapeChars","isQuote","openEntity","matchHtmlEntity","maxHtmlEntityLength","openedByEntity","isDoubleQuoteEntity","isSingleQuoteEntity","isEndQuote","isDoubleQuote","isSingleQuote","isSingleQuoteLike","isDoubleQuoteLike","iBefore","oBefore","str","iPrev","prevNonWhitespaceIndex","isDelimiter","charAt","substring","entity","isEnd","iQuote","oQuote","isInsideUnclosedBracket","nextQuoteIsEndQuote","isDigit","parseConcatenatedString","iPrevChar","prevChar","isUnquotedStringDelimiter","regexUrlStart","test","regexUrlChar","isControlCharacter","escapeChar","j","isHex","throwInvalidUnicodeCharacter","isValidStringCharacter","throwInvalidCharacter","parsedStr","removeAtIndex","num","invalid","atEndOfNumber","parseKeyword","name","value","isKey","symbol","JSON","stringify","prev","index","next","JSONRepairError","chars"],"sources":["../../../src/regular/jsonrepair.ts"],"sourcesContent":["import { JSONRepairError } from '../utils/JSONRepairError.js'\nimport {\n endsWithCommaOrNewline,\n insertBeforeLastWhitespace,\n isControlCharacter,\n isDelimiter,\n isDigit,\n isDoubleQuote,\n isDoubleQuoteEntity,\n isDoubleQuoteLike,\n isFunctionNameChar,\n isFunctionNameCharStart,\n isHex,\n isInsideUnclosedBracket,\n isQuote,\n isSingleQuote,\n isSingleQuoteEntity,\n isSingleQuoteLike,\n isSpecialWhitespace,\n isStartOfValue,\n isUnquotedStringDelimiter,\n isValidStringCharacter,\n isWhitespace,\n isWhitespaceExceptNewline,\n matchHtmlEntity,\n maxHtmlEntityLength,\n regexUrlChar,\n regexUrlStart,\n removeAtIndex,\n stripLastOccurrence\n} from '../utils/stringUtils.js'\n\nconst controlCharacters: { [key: string]: string } = {\n '\\b': '\\\\b',\n '\\f': '\\\\f',\n '\\n': '\\\\n',\n '\\r': '\\\\r',\n '\\t': '\\\\t'\n}\n\n// map with all escape characters\nconst escapeCharacters: { [key: string]: string } = {\n '\"': '\"',\n '\\\\': '\\\\',\n '/': '/',\n b: '\\b',\n f: '\\f',\n n: '\\n',\n r: '\\r',\n t: '\\t'\n // note that \\u is handled separately in parseString()\n}\n\n/**\n * Repair a string containing an invalid JSON document.\n * For example changes JavaScript notation into JSON notation.\n *\n * Example:\n *\n * try {\n * const json = \"{name: 'John'}\"\n * const repaired = jsonrepair(json)\n * console.log(repaired)\n * // '{\"name\": \"John\"}'\n * } catch (err) {\n * console.error(err)\n * }\n *\n */\nexport function jsonrepair(text: string): string {\n let i = 0 // current index in text\n let output = '' // generated output\n\n parseMarkdownCodeBlock(['```', '[```', '{```'])\n\n const processed = parseValue()\n if (!processed) {\n throwUnexpectedEnd()\n }\n\n parseMarkdownCodeBlock(['```', '```]', '```}'])\n\n const processedComma = parseCharacter(',')\n if (processedComma) {\n parseWhitespaceAndSkipComments()\n }\n\n if (isStartOfValue(text[i]) && endsWithCommaOrNewline(output)) {\n // start of a new value after end of the root level object: looks like\n // newline delimited JSON -> turn into a root level array\n if (!processedComma) {\n // repair missing comma\n output = insertBeforeLastWhitespace(output, ',')\n }\n\n parseNewlineDelimitedJSON()\n } else if (processedComma) {\n // repair: remove trailing comma\n output = stripLastOccurrence(output, ',')\n }\n\n // repair redundant end quotes\n while (text[i] === '}' || text[i] === ']') {\n i++\n parseWhitespaceAndSkipComments()\n }\n\n if (i >= text.length) {\n // reached the end of the document properly\n return output\n }\n\n throwUnexpectedCharacter()\n\n function parseValue(): boolean {\n parseWhitespaceAndSkipComments()\n const processed =\n parseObject() ||\n parseArray() ||\n parseString() ||\n parseNumber() ||\n parseKeywords() ||\n parseUnquotedString(false) ||\n parseRegex()\n parseWhitespaceAndSkipComments()\n\n return processed\n }\n\n function parseWhitespaceAndSkipComments(skipNewline = true): boolean {\n const start = i\n\n let changed = parseWhitespace(skipNewline)\n do {\n changed = parseComment()\n if (changed) {\n changed = parseWhitespace(skipNewline)\n }\n } while (changed)\n\n return i > start\n }\n\n function parseWhitespace(skipNewline: boolean): boolean {\n const _isWhiteSpace = skipNewline ? isWhitespace : isWhitespaceExceptNewline\n let whitespace = ''\n\n while (true) {\n if (_isWhiteSpace(text, i)) {\n whitespace += text[i]\n i++\n } else if (isSpecialWhitespace(text, i)) {\n // repair special whitespace\n whitespace += ' '\n i++\n } else {\n break\n }\n }\n\n if (whitespace.length > 0) {\n output += whitespace\n return true\n }\n\n return false\n }\n\n function parseComment(): boolean {\n // find a block comment '/* ... */'\n if (text[i] === '/' && text[i + 1] === '*') {\n // repair block comment by skipping it\n while (i < text.length && !atEndOfBlockComment(text, i)) {\n i++\n }\n i += 2\n\n return true\n }\n\n // find a line comment '// ...'\n if (text[i] === '/' && text[i + 1] === '/') {\n // repair line comment by skipping it\n while (i < text.length && text[i] !== '\\n') {\n i++\n }\n\n return true\n }\n\n return false\n }\n\n function parseMarkdownCodeBlock(blocks: string[]): boolean {\n // find and skip over a Markdown fenced code block:\n // ``` ... ```\n // or\n // ```json ... ```\n if (skipMarkdownCodeBlock(blocks)) {\n if (isFunctionNameCharStart(text[i])) {\n // strip the optional language specifier like \"json\"\n while (i < text.length && isFunctionNameChar(text[i])) {\n i++\n }\n }\n\n parseWhitespaceAndSkipComments()\n\n return true\n }\n\n return false\n }\n\n function skipMarkdownCodeBlock(blocks: string[]): boolean {\n parseWhitespace(true)\n\n for (const block of blocks) {\n const end = i + block.length\n if (text.slice(i, end) === block) {\n i = end\n return true\n }\n }\n\n return false\n }\n\n function parseCharacter(char: string): boolean {\n if (text[i] === char) {\n output += text[i]\n i++\n return true\n }\n\n return false\n }\n\n function skipCharacter(char: string): boolean {\n if (text[i] === char) {\n i++\n return true\n }\n\n return false\n }\n\n function skipEscapeCharacter(): boolean {\n return skipCharacter('\\\\')\n }\n\n /**\n * Skip ellipsis like \"[1,2,3,...]\" or \"[1,2,3,...,9]\" or \"[...,7,8,9]\"\n * or a similar construct in objects.\n */\n function skipEllipsis(): boolean {\n parseWhitespaceAndSkipComments()\n\n if (text[i] === '.' && text[i + 1] === '.' && text[i + 2] === '.') {\n // repair: remove the ellipsis (three dots) and optionally a comma\n i += 3\n parseWhitespaceAndSkipComments()\n skipCharacter(',')\n\n return true\n }\n\n return false\n }\n\n /**\n * Parse an object like '{\"key\": \"value\"}'\n */\n function parseObject(): boolean {\n if (text[i] === '{') {\n output += '{'\n i++\n parseWhitespaceAndSkipComments()\n\n // repair: skip leading comma like in {, message: \"hi\"}\n if (skipCharacter(',')) {\n parseWhitespaceAndSkipComments()\n }\n\n let initial = true\n while (i < text.length && text[i] !== '}') {\n let processedComma: boolean\n if (!initial) {\n processedComma = parseCharacter(',')\n if (!processedComma) {\n // repair missing comma\n output = insertBeforeLastWhitespace(output, ',')\n }\n parseWhitespaceAndSkipComments()\n } else {\n processedComma = true\n }\n\n skipEllipsis()\n\n const processedKey = parseString() || parseUnquotedString(true)\n if (!processedKey) {\n if (\n text[i] === '}' ||\n text[i] === '{' ||\n text[i] === ']' ||\n text[i] === '[' ||\n text[i] === undefined\n ) {\n // repair trailing comma\n if (!initial) {\n output = stripLastOccurrence(output, ',')\n }\n } else {\n throwObjectKeyExpected()\n }\n break\n }\n\n parseWhitespaceAndSkipComments()\n const processedColon = parseCharacter(':')\n const truncatedText = i >= text.length\n if (!processedColon) {\n if (isStartOfValue(text[i]) || truncatedText) {\n // repair missing colon\n output = insertBeforeLastWhitespace(output, ':')\n } else {\n throwColonExpected()\n }\n }\n const processedValue = parseValue()\n if (!processedValue) {\n if (processedColon || truncatedText) {\n // repair missing object value\n output += 'null'\n } else {\n throwColonExpected()\n }\n }\n\n initial = false\n }\n\n if (text[i] === '}') {\n output += '}'\n i++\n } else {\n // repair missing end bracket\n output = insertBeforeLastWhitespace(output, '}')\n }\n\n return true\n }\n\n return false\n }\n\n /**\n * Parse an array like '[\"item1\", \"item2\", ...]'\n */\n function parseArray(): boolean {\n if (text[i] === '[') {\n output += '['\n i++\n parseWhitespaceAndSkipComments()\n\n // repair: skip leading comma like in [,1,2,3]\n if (skipCharacter(',')) {\n parseWhitespaceAndSkipComments()\n }\n\n let initial = true\n while (i < text.length && text[i] !== ']') {\n if (!initial) {\n const processedComma = parseCharacter(',')\n if (!processedComma) {\n // repair missing comma\n output = insertBeforeLastWhitespace(output, ',')\n }\n }\n\n skipEllipsis()\n\n const processedValue = parseValue()\n if (!processedValue) {\n // repair trailing comma\n if (!initial) {\n output = stripLastOccurrence(output, ',')\n }\n break\n }\n\n initial = false\n }\n\n if (text[i] === ']') {\n output += ']'\n i++\n } else {\n // repair missing closing array bracket\n output = insertBeforeLastWhitespace(output, ']')\n }\n\n return true\n }\n\n return false\n }\n\n /**\n * Parse and repair Newline Delimited JSON (NDJSON):\n * multiple JSON objects separated by a newline character\n */\n function parseNewlineDelimitedJSON() {\n // repair NDJSON\n let initial = true\n let processedValue = true\n while (processedValue) {\n if (!initial) {\n // parse optional comma, insert when missing\n const processedComma = parseCharacter(',')\n if (!processedComma) {\n // repair: add missing comma\n output = insertBeforeLastWhitespace(output, ',')\n }\n } else {\n initial = false\n }\n\n processedValue = parseValue()\n }\n\n if (!processedValue) {\n // repair: remove trailing comma\n output = stripLastOccurrence(output, ',')\n }\n\n // repair: wrap the output inside array brackets\n output = `[\\n${output}\\n]`\n }\n\n /**\n * Parse a string enclosed by double quotes \"...\". Can contain escaped quotes\n * Repair strings enclosed in single quotes or special quotes\n * Repair an escaped string\n *\n * The function can run in two stages:\n * - First, it assumes the string has a valid end quote\n * - If it turns out that the string does not have a valid end quote followed\n * by a delimiter (which should be the case), the function runs again in a\n * more conservative way, stopping the string at the first next delimiter\n * and fixing the string by inserting a quote there, or stopping at a\n * stop index detected in the first iteration.\n */\n function parseString(stopAtDelimiter = false, stopAtIndex = -1): boolean {\n const skipEscapeChars = text[i] === '\\\\'\n if (skipEscapeChars) {\n // repair: remove the first escape character\n i++\n\n if (!isQuote(text[i])) {\n throwUnexpectedCharacter()\n }\n }\n\n // a string can be opened by a quote character, or by an HTML entity that\n // decodes to a quote (like &quot;) when repairing HTML-encoded JSON\n const openEntity =\n text[i] === '&' ? matchHtmlEntity(text.slice(i, i + maxHtmlEntityLength)) : null\n const openedByEntity = isDoubleQuoteEntity(openEntity) || isSingleQuoteEntity(openEntity)\n\n if (isQuote(text[i]) || openedByEntity) {\n // double quotes are correct JSON,\n // single quotes come from JavaScript for example, we assume it will have a correct single end quote too\n // otherwise, we will match any double-quote-like start with a double-quote-like end,\n // or any single-quote-like start with a single-quote-like end\n const isEndQuote = isDoubleQuote(text[i])\n ? isDoubleQuote\n : isSingleQuote(text[i])\n ? isSingleQuote\n : isSingleQuoteLike(text[i])\n ? isSingleQuoteLike\n : isDoubleQuoteLike\n\n const iBefore = i\n const oBefore = output.length\n\n let str = '\"'\n // when opened by an entity, skip past the whole entity; otherwise skip the quote\n i += openedByEntity && openEntity ? openEntity.length : 1\n\n while (true) {\n if (i >= text.length) {\n // end of text, we are missing an end quote\n\n const iPrev = prevNonWhitespaceIndex(i - 1)\n if (!stopAtDelimiter && isDelimiter(text.charAt(iPrev))) {\n // if the text ends with a delimiter, like [\"hello],\n // so the missing end quote should be inserted before this delimiter\n // retry parsing the string, stopping at the first next delimiter\n i = iBefore\n output = output.substring(0, oBefore)\n\n return parseString(true)\n }\n\n // repair missing quote\n str = insertBeforeLastWhitespace(str, '\"')\n output += str\n\n return true\n }\n\n if (i === stopAtIndex) {\n // use the stop index detected in the first iteration, and repair end quote\n str = insertBeforeLastWhitespace(str, '\"')\n output += str\n\n return true\n }\n\n // inside an entity-opened string a '&' is an entity; it is the end quote\n // when it decodes to the opening quote\n const entity =\n openedByEntity && text[i] === '&'\n ? matchHtmlEntity(text.slice(i, i + maxHtmlEntityLength))\n : null\n const isEnd = entity && openEntity ? entity.char === openEntity.char : isEndQuote(text[i])\n\n if (isEnd) {\n // end quote\n // let us check what is before and after the quote to verify whether this is a legit end quote\n const iQuote = i\n const oQuote = str.length\n str += '\"'\n i += entity ? entity.length : 1\n output += str\n\n parseWhitespaceAndSkipComments(false)\n\n if (\n stopAtDelimiter ||\n i >= text.length ||\n (isDelimiter(text[i]) &&\n // only count the brackets inside the string when actually needed,\n // i.e. when the quote is directly followed by a closing bracket\n !isInsideUnclosedBracket(str, text[i])) ||\n (isQuote(text[i]) && !nextQuoteIsEndQuote(i)) ||\n isDigit(text[i])\n ) {\n // The quote is followed by the end of the text, a delimiter,\n // or a next value. So the quote is indeed the end of the string.\n parseConcatenatedString()\n\n return true\n }\n\n if (text[i] === '\\\\') {\n throwUnexpectedCharacter()\n }\n\n const iPrevChar = prevNonWhitespaceIndex(iQuote - 1)\n const prevChar = text.charAt(iPrevChar)\n\n if (prevChar === ',') {\n // A comma followed by a quote, like '{\"a\":\"b,c,\"d\":\"e\"}'.\n // We assume that the quote is a start quote, and that the end quote\n // should have been located right before the comma but is missing.\n i = iBefore\n output = output.substring(0, oBefore)\n\n return parseString(false, iPrevChar)\n }\n\n if (isDelimiter(prevChar)) {\n // This is not the right end quote: it is preceded by a delimiter,\n // and NOT followed by a delimiter. So, there is an end quote missing\n // parse the string again and then stop at the first next delimiter\n i = iBefore\n output = output.substring(0, oBefore)\n\n return parseString(true)\n }\n\n // revert to right after the quote but before any whitespace, and continue parsing the string\n output = output.substring(0, oBefore)\n i = iQuote + (entity ? entity.length : 1)\n\n // repair unescaped quote\n str = `${str.substring(0, oQuote)}\\\\${str.substring(oQuote)}`\n } else if (stopAtDelimiter && isUnquotedStringDelimiter(text[i])) {\n // we're in the mode to stop the string at the first delimiter\n // because there is an end quote missing\n\n // test start of an url like \"https://...\" (this would be parsed as a comment)\n if (text[i - 1] === ':' && regexUrlStart.test(text.substring(iBefore + 1, i + 2))) {\n while (i < text.length && regexUrlChar.test(text[i])) {\n str += text[i]\n i++\n }\n }\n\n // repair missing quote\n str = insertBeforeLastWhitespace(str, '\"')\n output += str\n\n parseConcatenatedString()\n\n return true\n } else if (entity) {\n // decode an HTML entity inside the string as content\n const char = entity.char\n if (char === '\"') {\n // repair unescaped double quote\n str += '\\\\\"'\n } else if (isControlCharacter(char)) {\n str += controlCharacters[char]\n } else {\n str += char\n }\n i += entity.length\n } else if (text[i] === '\\\\') {\n // handle escaped content like \\n or \\u2605\n const char = text.charAt(i + 1)\n const escapeChar = escapeCharacters[char]\n if (escapeChar !== undefined) {\n str += text.slice(i, i + 2)\n i += 2\n } else if (char === 'u') {\n let j = 2\n while (j < 6 && isHex(text[i + j])) {\n j++\n }\n\n if (j === 6) {\n str += text.slice(i, i + 6)\n i += 6\n } else if (i + j >= text.length) {\n // repair invalid or truncated unicode char at the end of the text\n // by removing the unicode char and ending the string here\n i = text.length\n } else {\n throwInvalidUnicodeCharacter()\n }\n } else if (char === '\\n') {\n // repair a backslash escaped newline (like in Bash scripts)\n str += '\\\\n'\n i += 2\n } else {\n // repair invalid escape character: remove it\n str += char\n i += 2\n }\n } else {\n // handle regular characters\n const char = text.charAt(i)\n\n if (char === '\"' && text[i - 1] !== '\\\\') {\n // repair unescaped double quote\n str += `\\\\${char}`\n i++\n } else if (isControlCharacter(char)) {\n // unescaped control character\n str += controlCharacters[char]\n i++\n } else {\n if (!isValidStringCharacter(char)) {\n throwInvalidCharacter(char)\n }\n str += char\n i++\n }\n }\n\n if (skipEscapeChars) {\n // repair: skipped escape character (nothing to do)\n skipEscapeCharacter()\n }\n }\n }\n\n return false\n }\n\n /**\n * Repair concatenated strings like \"hello\" + \"world\", change this into \"helloworld\"\n */\n function parseConcatenatedString(): boolean {\n let processed = false\n\n parseWhitespaceAndSkipComments()\n while (text[i] === '+') {\n processed = true\n i++\n parseWhitespaceAndSkipComments()\n\n // repair: remove the end quote of the first string\n output = stripLastOccurrence(output, '\"', true)\n const start = output.length\n const parsedStr = parseString()\n if (parsedStr) {\n // repair: remove the start quote of the second string\n output = removeAtIndex(output, start, 1)\n } else {\n // repair: remove the + because it is not followed by a string\n output = insertBeforeLastWhitespace(output, '\"')\n }\n }\n\n return processed\n }\n\n /**\n * Parse a number like 2.4 or 2.4e6\n */\n function parseNumber(): boolean {\n const start = i\n let num = ''\n let invalid = false\n\n if (text[i] === '-') {\n num += text[i]\n i++\n\n if (!isDigit(text[i]) && atEndOfNumber()) {\n // repair missing zero after minus like in \"-.2\" or \"-\"\n num += '0'\n }\n }\n\n if (text[i] === '0' && isDigit(text[i + 1])) {\n // the number has leading zeros like \"00123\" or \"001.23\"\n invalid = true\n }\n\n while (isDigit(text[i])) {\n num += text[i]\n i++\n }\n\n if (text[i] === '.') {\n if (num === '' || num === '-') {\n // repair missing leading zero before dot\n num += '0'\n }\n\n num += text[i]\n i++\n\n if (!isDigit(text[i])) {\n // repair a truncated number like \"2.\" into \"2.0\"\n num += '0'\n }\n\n while (isDigit(text[i])) {\n num += text[i]\n i++\n }\n }\n\n if (i > start) {\n if (text[i] === 'e' || text[i] === 'E') {\n if (num === '-') {\n invalid = true\n }\n\n num += text[i]\n i++\n\n if (text[i] === '-' || text[i] === '+') {\n num += text[i]\n i++\n }\n\n if (!isDigit(text[i])) {\n // repair a truncated number like \"2e\" into \"2e0\"\n num += '0'\n }\n\n while (isDigit(text[i])) {\n num += text[i]\n i++\n }\n }\n\n // if we're not at the end of the number by this point, allow this to be parsed as another type\n if (!atEndOfNumber()) {\n i = start\n return false\n }\n\n output += invalid ? `\"${text.substring(start, i)}\"` : num\n return true\n }\n\n return false\n }\n\n /**\n * Parse keywords true, false, null\n * Repair Python keywords True, False, None\n */\n function parseKeywords(): boolean {\n return (\n parseKeyword('true', 'true') ||\n parseKeyword('false', 'false') ||\n parseKeyword('null', 'null') ||\n // repair Python keywords True, False, None\n parseKeyword('True', 'true') ||\n parseKeyword('False', 'false') ||\n parseKeyword('None', 'null')\n )\n }\n\n function parseKeyword(name: string, value: string): boolean {\n if (text.slice(i, i + name.length) === name && !isFunctionNameChar(text[i + name.length])) {\n output += value\n i += name.length\n return true\n }\n\n return false\n }\n\n /**\n * Repair an unquoted string by adding quotes around it\n * Repair a MongoDB function call like NumberLong(\"2\")\n * Repair a JSONP function call like callback({...});\n */\n function parseUnquotedString(isKey: boolean) {\n // note that the symbol can end with whitespaces: we stop at the next delimiter\n // also, note that we allow strings to contain a slash / in order to support repairing regular expressions\n const start = i\n\n if (isFunctionNameCharStart(text[i])) {\n while (i < text.length && isFunctionNameChar(text[i])) {\n i++\n }\n\n let j = i\n while (isWhitespace(text, j)) {\n j++\n }\n\n if (text[j] === '(') {\n // repair a MongoDB function call like NumberLong(\"2\")\n // repair a JSONP function call like callback({...});\n i = j + 1\n\n parseValue()\n\n if (text[i] === ')') {\n // repair: skip close bracket of function call\n i++\n if (text[i] === ';') {\n // repair: skip semicolon after JSONP call\n i++\n }\n }\n\n return true\n }\n }\n\n while (\n i < text.length &&\n !isUnquotedStringDelimiter(text[i]) &&\n !isQuote(text[i]) &&\n (!isKey || text[i] !== ':')\n ) {\n i++\n }\n\n // test start of an url like \"https://...\" (this would be parsed as a comment)\n if (text[i - 1] === ':' && regexUrlStart.test(text.substring(start, i + 2))) {\n while (i < text.length && regexUrlChar.test(text[i])) {\n i++\n }\n }\n\n if (i > start) {\n // repair unquoted string\n // also, repair undefined into null\n\n // first, go back to prevent getting trailing whitespaces in the string\n while (isWhitespace(text, i - 1) && i > 0) {\n i--\n }\n\n const symbol = text.slice(start, i)\n output += symbol === 'undefined' ? 'null' : JSON.stringify(symbol)\n\n if (text[i] === '\"') {\n // we had a missing start quote, but now we encountered the end quote, so we can skip that one\n i++\n }\n\n return true\n }\n }\n\n function parseRegex() {\n if (text[i] === '/') {\n const start = i\n i++\n\n while (i < text.length && (text[i] !== '/' || text[i - 1] === '\\\\')) {\n i++\n }\n i++\n\n output += JSON.stringify(text.substring(start, i))\n\n return true\n }\n }\n\n function prevNonWhitespaceIndex(start: number): number {\n let prev = start\n\n while (prev > 0 && isWhitespace(text, prev)) {\n prev--\n }\n\n return prev\n }\n\n function nextQuoteIsEndQuote(index: number): boolean {\n // precondition: text[index] is a quote. Peek past it: if nothing meaningful\n // follows, that quote is the true end and this one is embedded (e.g. `\"The TV is 72\"\"`)\n let next = index + 1\n while (next < text.length && isWhitespace(text, next)) {\n next++\n }\n\n return next >= text.length || isDelimiter(text[next])\n }\n\n function atEndOfNumber() {\n return i >= text.length || isDelimiter(text[i]) || isWhitespace(text, i)\n }\n\n function throwInvalidCharacter(char: string) {\n throw new JSONRepairError(`Invalid character ${JSON.stringify(char)}`, i)\n }\n\n function throwUnexpectedCharacter() {\n throw new JSONRepairError(`Unexpected character ${JSON.stringify(text[i])}`, i)\n }\n\n function throwUnexpectedEnd() {\n throw new JSONRepairError('Unexpected end of json string', text.length)\n }\n\n function throwObjectKeyExpected() {\n throw new JSONRepairError('Object key expected', i)\n }\n\n function throwColonExpected() {\n throw new JSONRepairError('Colon expected', i)\n }\n\n function throwInvalidUnicodeCharacter() {\n const chars = text.slice(i, i + 6)\n throw new JSONRepairError(`Invalid unicode character \"${chars}\"`, i)\n }\n}\n\nfunction atEndOfBlockComment(text: string, i: number) {\n return text[i] === '*' && text[i + 1] === '/'\n}\n"],"mappings":"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","ignoreList":[]}

@@ -476,2 +476,11 @@ "use strict";

/**
* Read a small window of buffered input at the given index to detect an HTML
* entity, clamped so it never reads past the buffered input.
*/
function htmlEntityWindow(at) {
const max = Math.min(at + _stringUtils.maxHtmlEntityLength, input.currentLength());
return at < max ? input.substring(at, max) : '';
}
/**
* Parse a string enclosed by double quotes "...". Can contain escaped quotes

@@ -492,9 +501,16 @@ * Repair strings enclosed in single quotes or special quotes

let stopAtIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : -1;
let skipEscapeChars = input.charAt(i) === '\\';
const skipEscapeChars = input.charAt(i) === '\\';
if (skipEscapeChars) {
// repair: remove the first escape character
i++;
skipEscapeChars = true;
if (!(0, _stringUtils.isQuote)(input.charAt(i))) {
throwUnexpectedCharacter();
}
}
if ((0, _stringUtils.isQuote)(input.charAt(i))) {
// a string can be opened by a quote character, or by an HTML entity that
// decodes to a quote (like &quot;) when repairing HTML-encoded JSON
const openEntity = input.charAt(i) === '&' ? (0, _stringUtils.matchHtmlEntity)(htmlEntityWindow(i)) : null;
const openedByEntity = (0, _stringUtils.isDoubleQuoteEntity)(openEntity) || (0, _stringUtils.isSingleQuoteEntity)(openEntity);
if ((0, _stringUtils.isQuote)(input.charAt(i)) || openedByEntity) {
// double quotes are correct JSON,

@@ -508,3 +524,4 @@ // single quotes come from JavaScript for example, we assume it will have a correct single end quote too

output.push('"');
i++;
// when opened by an entity, skip past the whole entity; otherwise skip the quote
i += openedByEntity && openEntity ? openEntity.length : 1;
while (true) {

@@ -533,3 +550,8 @@ if (input.isEnd(i)) {

}
if (isEndQuote(input.charAt(i))) {
// inside an entity-opened string a '&' is an entity; it is the end quote
// when it decodes to the opening quote
const entity = openedByEntity && input.charAt(i) === '&' ? (0, _stringUtils.matchHtmlEntity)(htmlEntityWindow(i)) : null;
const isEnd = entity && openEntity ? entity.char === openEntity.char : isEndQuote(input.charAt(i));
if (isEnd) {
// end quote

@@ -540,3 +562,3 @@ // let us check what is before and after the quote to verify whether this is a legit end quote

output.push('"');
i++;
i += entity ? entity.length : 1;
parseWhitespaceAndSkipComments(false);

@@ -552,2 +574,5 @@ if (stopAtDelimiter || input.isEnd(i) || (0, _stringUtils.isDelimiter)(input.charAt(i)) &&

}
if (input.charAt(i) === '\\') {
throwUnexpectedCharacter();
}
const iPrevChar = prevNonWhitespaceIndex(iQuote - 1);

@@ -574,3 +599,3 @@ const prevChar = input.charAt(iPrevChar);

output.remove(oQuote + 1);
i = iQuote + 1;
i = iQuote + (entity ? entity.length : 1);

@@ -595,2 +620,14 @@ // repair unescaped quote

return stack.update(_stack.Caret.afterValue);
} else if (entity) {
// decode an HTML entity inside the string as content
const char = entity.char;
if (char === '"') {
// repair unescaped double quote
output.push('\\"');
} else if ((0, _stringUtils.isControlCharacter)(char)) {
output.push(controlCharacters[char]);
} else {
output.push(char);
}
i += entity.length;
} else if (input.charAt(i) === '\\') {

@@ -597,0 +634,0 @@ // handle escaped content like \n or \u2605

@@ -1,1 +0,1 @@

{"version":3,"file":"core.js","names":["_JSONRepairError","require","_stringUtils","_InputBuffer","_OutputBuffer","_stack","controlCharacters","escapeCharacters","b","f","n","r","t","jsonrepairCore","_ref","onData","bufferSize","chunkSize","input","createInputBuffer","output","createOutputBuffer","write","i","iFlushed","stack","createStack","flushInputBuffer","flush","transform","chunk","push","currentLength","parse","close","parseWhitespaceAndSkipComments","type","StackType","object","caret","Caret","beforeKey","skipEllipsis","parseObjectKey","parseUnexpectedColon","parseRepairTrailingComma","parseRepairObjectEndOrComma","beforeValue","parseValue","parseRepairMissingObjectValue","afterValue","parseObjectComma","parseObjectEnd","array","parseRepairArrayEnd","parseArrayComma","parseArrayEnd","parseRepairMissingComma","ndJson","parseRepairNdJsonEnd","functionCall","parseFunctionCallEnd","root","parseRootStart","parseRootEnd","parseObjectStart","parseArrayStart","parseString","parseNumber","parseKeywords","parseRepairUnquotedString","parseRepairRegex","parseCharacter","skipCharacter","update","j","isFunctionNameCharStart","charAt","isEnd","isFunctionNameChar","k","isWhitespace","findNextDelimiter","regexUrlStart","test","substring","regexUrlChar","symbol","JSON","stringify","start","endsWithIgnoringWhitespace","stripLastOccurrence","throwObjectKeyExpected","parseUnexpectedEnd","throwUnexpectedEnd","throwUnexpectedCharacter","parsedKey","parseUnquotedKey","truncatedText","isStartOfValue","insertBeforeLastWhitespace","throwColonExpected","pop","parseMarkdownCodeBlock","parsedComma","unshift","skipNewline","arguments","length","undefined","changed","parseWhitespace","parseComment","_isWhiteSpace","isWhitespaceExceptNewline","whitespace","isSpecialWhitespace","atEndOfBlockComment","blocks","skipMarkdownCodeBlock","block","end","char","skipEscapeCharacter","stopAtDelimiter","stopAtIndex","skipEscapeChars","isQuote","isEndQuote","isDoubleQuote","isSingleQuote","isSingleQuoteLike","isDoubleQuoteLike","iBefore","oBefore","iPrev","prevNonWhitespaceIndex","isDelimiter","remove","iQuote","oQuote","isInsideUnclosedBracket","nextQuoteIsEndQuote","isDigit","parseConcatenatedString","iPrevChar","prevChar","insertAt","isUnquotedStringDelimiter","escapeChar","isHex","throwInvalidUnicodeCharacter","isControlCharacter","isValidStringCharacter","throwInvalidCharacter","parsed","parsedStr","num","invalid","atEndOfNumber","parseKeyword","name","value","isKey","prev","index","next","JSONRepairError","chars"],"sources":["../../../src/streaming/core.ts"],"sourcesContent":["import { JSONRepairError } from '../utils/JSONRepairError.js'\nimport {\n isControlCharacter,\n isDelimiter,\n isDigit,\n isDoubleQuote,\n isDoubleQuoteLike,\n isFunctionNameChar,\n isFunctionNameCharStart,\n isHex,\n isInsideUnclosedBracket,\n isQuote,\n isSingleQuote,\n isSingleQuoteLike,\n isSpecialWhitespace,\n isStartOfValue,\n isUnquotedStringDelimiter,\n isValidStringCharacter,\n isWhitespace,\n isWhitespaceExceptNewline,\n regexUrlChar,\n regexUrlStart\n} from '../utils/stringUtils.js'\nimport { createInputBuffer } from './buffer/InputBuffer.js'\nimport { createOutputBuffer } from './buffer/OutputBuffer.js'\nimport { Caret, createStack, StackType } from './stack.js'\n\nconst controlCharacters: { [key: string]: string } = {\n '\\b': '\\\\b',\n '\\f': '\\\\f',\n '\\n': '\\\\n',\n '\\r': '\\\\r',\n '\\t': '\\\\t'\n}\n\n// map with all escape characters\nconst escapeCharacters: { [key: string]: string } = {\n '\"': '\"',\n '\\\\': '\\\\',\n '/': '/',\n b: '\\b',\n f: '\\f',\n n: '\\n',\n r: '\\r',\n t: '\\t'\n // note that \\u is handled separately in parseString()\n}\n\nexport interface JsonRepairCoreOptions {\n onData: (chunk: string) => void\n chunkSize?: number\n bufferSize?: number\n}\n\nexport interface JsonRepairCore {\n transform: (chunk: string) => void\n flush: () => void\n}\n\nexport function jsonrepairCore({\n onData,\n bufferSize = 65536,\n chunkSize = 65536\n}: JsonRepairCoreOptions): JsonRepairCore {\n const input = createInputBuffer()\n\n const output = createOutputBuffer({\n write: onData,\n bufferSize,\n chunkSize\n })\n\n let i = 0\n let iFlushed = 0\n const stack = createStack()\n\n function flushInputBuffer() {\n while (iFlushed < i - bufferSize - chunkSize) {\n iFlushed += chunkSize\n input.flush(iFlushed)\n }\n }\n\n function transform(chunk: string) {\n input.push(chunk)\n\n while (i < input.currentLength() - bufferSize && parse()) {\n // loop until there is nothing more to process\n }\n\n flushInputBuffer()\n }\n\n function flush() {\n input.close()\n\n while (parse()) {\n // loop until there is nothing more to process\n }\n\n output.flush()\n }\n\n function parse(): boolean {\n parseWhitespaceAndSkipComments()\n\n switch (stack.type) {\n case StackType.object: {\n switch (stack.caret) {\n case Caret.beforeKey:\n return (\n skipEllipsis() ||\n parseObjectKey() ||\n parseUnexpectedColon() ||\n parseRepairTrailingComma() ||\n parseRepairObjectEndOrComma()\n )\n case Caret.beforeValue:\n return parseValue() || parseRepairMissingObjectValue()\n case Caret.afterValue:\n return parseObjectComma() || parseObjectEnd() || parseRepairObjectEndOrComma()\n default:\n return false\n }\n }\n\n case StackType.array: {\n switch (stack.caret) {\n case Caret.beforeValue:\n return (\n skipEllipsis() || parseValue() || parseRepairTrailingComma() || parseRepairArrayEnd()\n )\n case Caret.afterValue:\n return (\n parseArrayComma() ||\n parseArrayEnd() ||\n parseRepairMissingComma() ||\n parseRepairArrayEnd()\n )\n default:\n return false\n }\n }\n\n case StackType.ndJson: {\n switch (stack.caret) {\n case Caret.beforeValue:\n return parseValue() || parseRepairTrailingComma()\n case Caret.afterValue:\n return parseArrayComma() || parseRepairMissingComma() || parseRepairNdJsonEnd()\n default:\n return false\n }\n }\n\n case StackType.functionCall: {\n switch (stack.caret) {\n case Caret.beforeValue:\n return parseValue()\n case Caret.afterValue:\n return parseFunctionCallEnd()\n default:\n return false\n }\n }\n\n case StackType.root: {\n switch (stack.caret) {\n case Caret.beforeValue:\n return parseRootStart()\n case Caret.afterValue:\n return parseRootEnd()\n default:\n return false\n }\n }\n\n default:\n return false\n }\n }\n\n function parseValue(): boolean {\n return (\n parseObjectStart() ||\n parseArrayStart() ||\n parseString() ||\n parseNumber() ||\n parseKeywords() ||\n parseRepairUnquotedString() ||\n parseRepairRegex()\n )\n }\n\n function parseObjectStart(): boolean {\n if (parseCharacter('{')) {\n parseWhitespaceAndSkipComments()\n\n skipEllipsis()\n\n if (skipCharacter(',')) {\n parseWhitespaceAndSkipComments()\n }\n\n if (parseCharacter('}')) {\n return stack.update(Caret.afterValue)\n }\n\n return stack.push(StackType.object, Caret.beforeKey)\n }\n\n return false\n }\n\n function parseArrayStart(): boolean {\n if (parseCharacter('[')) {\n parseWhitespaceAndSkipComments()\n\n skipEllipsis()\n\n if (skipCharacter(',')) {\n parseWhitespaceAndSkipComments()\n }\n\n if (parseCharacter(']')) {\n return stack.update(Caret.afterValue)\n }\n\n return stack.push(StackType.array, Caret.beforeValue)\n }\n\n return false\n }\n\n function parseRepairUnquotedString(): boolean {\n let j = i\n\n if (isFunctionNameCharStart(input.charAt(j))) {\n while (!input.isEnd(j) && isFunctionNameChar(input.charAt(j))) {\n j++\n }\n\n let k = j\n while (isWhitespace(input, k)) {\n k++\n }\n\n if (input.charAt(k) === '(') {\n // repair a MongoDB function call like NumberLong(\"2\")\n // repair a JSONP function call like callback({...});\n k++\n i = k\n return stack.push(StackType.functionCall, Caret.beforeValue)\n }\n }\n\n j = findNextDelimiter(false, j)\n if (j !== null) {\n // test start of an url like \"https://...\" (this would be parsed as a comment)\n if (input.charAt(j - 1) === ':' && regexUrlStart.test(input.substring(i, j + 2))) {\n while (!input.isEnd(j) && regexUrlChar.test(input.charAt(j))) {\n j++\n }\n }\n\n const symbol = input.substring(i, j)\n i = j\n\n output.push(symbol === 'undefined' ? 'null' : JSON.stringify(symbol))\n\n if (input.charAt(i) === '\"') {\n // we had a missing start quote, but now we encountered the end quote, so we can skip that one\n i++\n }\n\n return stack.update(Caret.afterValue)\n }\n\n return false\n }\n\n function parseRepairRegex() {\n if (input.charAt(i) === '/') {\n const start = i\n i++\n\n while (!input.isEnd(i) && (input.charAt(i) !== '/' || input.charAt(i - 1) === '\\\\')) {\n i++\n }\n i++\n\n output.push(JSON.stringify(input.substring(start, i)))\n\n return stack.update(Caret.afterValue)\n }\n }\n\n function parseRepairMissingObjectValue(): boolean {\n // repair missing object value\n output.push('null')\n return stack.update(Caret.afterValue)\n }\n\n function parseRepairTrailingComma(): boolean {\n // repair trailing comma\n if (output.endsWithIgnoringWhitespace(',')) {\n output.stripLastOccurrence(',')\n return stack.update(Caret.afterValue)\n }\n\n return false\n }\n\n function parseUnexpectedColon(): boolean {\n if (input.charAt(i) === ':') {\n throwObjectKeyExpected()\n }\n\n return false\n }\n\n function parseUnexpectedEnd(): boolean {\n if (input.isEnd(i)) {\n throwUnexpectedEnd()\n } else {\n throwUnexpectedCharacter()\n }\n\n return false\n }\n\n function parseObjectKey(): boolean {\n const parsedKey = parseString() || parseUnquotedKey()\n if (parsedKey) {\n parseWhitespaceAndSkipComments()\n\n if (parseCharacter(':')) {\n // expect a value after the :\n return stack.update(Caret.beforeValue)\n }\n\n const truncatedText = input.isEnd(i)\n if (isStartOfValue(input.charAt(i)) || truncatedText) {\n // repair missing colon\n output.insertBeforeLastWhitespace(':')\n return stack.update(Caret.beforeValue)\n }\n\n throwColonExpected()\n }\n\n return false\n }\n\n function parseObjectComma(): boolean {\n if (parseCharacter(',')) {\n return stack.update(Caret.beforeKey)\n }\n\n return false\n }\n\n function parseObjectEnd(): boolean {\n if (parseCharacter('}')) {\n return stack.pop()\n }\n\n return false\n }\n\n function parseRepairObjectEndOrComma(): true {\n // repair missing object end and trailing comma\n if (input.charAt(i) === '{') {\n output.stripLastOccurrence(',')\n output.insertBeforeLastWhitespace('}')\n return stack.pop()\n }\n\n // repair missing comma\n if (!input.isEnd(i) && isStartOfValue(input.charAt(i))) {\n output.insertBeforeLastWhitespace(',')\n return stack.update(Caret.beforeKey)\n }\n\n // repair missing closing brace\n output.insertBeforeLastWhitespace('}')\n return stack.pop()\n }\n\n function parseArrayComma(): boolean {\n if (parseCharacter(',')) {\n return stack.update(Caret.beforeValue)\n }\n\n return false\n }\n\n function parseArrayEnd(): boolean {\n if (parseCharacter(']')) {\n return stack.pop()\n }\n\n return false\n }\n\n function parseRepairMissingComma(): boolean {\n // repair missing comma\n if (!input.isEnd(i) && isStartOfValue(input.charAt(i))) {\n output.insertBeforeLastWhitespace(',')\n return stack.update(Caret.beforeValue)\n }\n\n return false\n }\n\n function parseRepairArrayEnd(): true {\n // repair missing closing bracket\n output.insertBeforeLastWhitespace(']')\n return stack.pop()\n }\n\n function parseRepairNdJsonEnd(): boolean {\n if (input.isEnd(i)) {\n output.push('\\n]')\n return stack.pop()\n }\n\n throwUnexpectedEnd()\n return false // just to make TS happy\n }\n\n function parseFunctionCallEnd(): true {\n if (skipCharacter(')')) {\n skipCharacter(';')\n }\n\n return stack.pop()\n }\n\n function parseRootStart(): boolean {\n parseMarkdownCodeBlock(['```', '[```', '{```'])\n\n return parseValue() || parseUnexpectedEnd()\n }\n\n function parseRootEnd(): boolean {\n parseMarkdownCodeBlock(['```', '```]', '```}'])\n\n const parsedComma = parseCharacter(',')\n parseWhitespaceAndSkipComments()\n\n if (\n isStartOfValue(input.charAt(i)) &&\n (output.endsWithIgnoringWhitespace(',') || output.endsWithIgnoringWhitespace('\\n'))\n ) {\n // start of a new value after end of the root level object: looks like\n // newline delimited JSON -> turn into a root level array\n if (!parsedComma) {\n // repair missing comma\n output.insertBeforeLastWhitespace(',')\n }\n\n output.unshift('[\\n')\n\n return stack.push(StackType.ndJson, Caret.beforeValue)\n }\n\n if (parsedComma) {\n // repair: remove trailing comma\n output.stripLastOccurrence(',')\n\n return stack.update(Caret.afterValue)\n }\n\n // repair redundant end braces and brackets\n while (input.charAt(i) === '}' || input.charAt(i) === ']') {\n i++\n parseWhitespaceAndSkipComments()\n }\n\n if (!input.isEnd(i)) {\n throwUnexpectedCharacter()\n }\n\n return false\n }\n\n function parseWhitespaceAndSkipComments(skipNewline = true): boolean {\n const start = i\n\n let changed = parseWhitespace(skipNewline)\n do {\n changed = parseComment()\n if (changed) {\n changed = parseWhitespace(skipNewline)\n }\n } while (changed)\n\n return i > start\n }\n\n function parseWhitespace(skipNewline: boolean): boolean {\n const _isWhiteSpace = skipNewline ? isWhitespace : isWhitespaceExceptNewline\n let whitespace = ''\n\n while (true) {\n if (_isWhiteSpace(input, i)) {\n whitespace += input.charAt(i)\n i++\n } else if (isSpecialWhitespace(input, i)) {\n // repair special whitespace\n whitespace += ' '\n i++\n } else {\n break\n }\n }\n\n if (whitespace.length > 0) {\n output.push(whitespace)\n return true\n }\n\n return false\n }\n\n function parseComment(): boolean {\n // find a block comment '/* ... */'\n if (input.charAt(i) === '/' && input.charAt(i + 1) === '*') {\n // repair block comment by skipping it\n while (!input.isEnd(i) && !atEndOfBlockComment(i)) {\n i++\n }\n i += 2\n\n return true\n }\n\n // find a line comment '// ...'\n if (input.charAt(i) === '/' && input.charAt(i + 1) === '/') {\n // repair line comment by skipping it\n while (!input.isEnd(i) && input.charAt(i) !== '\\n') {\n i++\n }\n\n return true\n }\n\n return false\n }\n\n function parseMarkdownCodeBlock(blocks: string[]): boolean {\n // find and skip over a Markdown fenced code block:\n // ``` ... ```\n // or\n // ```json ... ```\n if (skipMarkdownCodeBlock(blocks)) {\n if (isFunctionNameCharStart(input.charAt(i))) {\n // strip the optional language specifier like \"json\"\n while (!input.isEnd(i) && isFunctionNameChar(input.charAt(i))) {\n i++\n }\n }\n\n parseWhitespaceAndSkipComments()\n\n return true\n }\n\n return false\n }\n\n function skipMarkdownCodeBlock(blocks: string[]): boolean {\n for (const block of blocks) {\n const end = i + block.length\n if (input.substring(i, end) === block) {\n i = end\n return true\n }\n }\n\n return false\n }\n\n function parseCharacter(char: string): boolean {\n if (input.charAt(i) === char) {\n output.push(input.charAt(i))\n i++\n return true\n }\n\n return false\n }\n\n function skipCharacter(char: string): boolean {\n if (input.charAt(i) === char) {\n i++\n return true\n }\n\n return false\n }\n\n function skipEscapeCharacter(): boolean {\n return skipCharacter('\\\\')\n }\n\n /**\n * Skip ellipsis like \"[1,2,3,...]\" or \"[1,2,3,...,9]\" or \"[...,7,8,9]\"\n * or a similar construct in objects.\n */\n function skipEllipsis(): boolean {\n parseWhitespaceAndSkipComments()\n\n if (input.charAt(i) === '.' && input.charAt(i + 1) === '.' && input.charAt(i + 2) === '.') {\n // repair: remove the ellipsis (three dots) and optionally a comma\n i += 3\n parseWhitespaceAndSkipComments()\n skipCharacter(',')\n\n return true\n }\n\n return false\n }\n\n /**\n * Parse a string enclosed by double quotes \"...\". Can contain escaped quotes\n * Repair strings enclosed in single quotes or special quotes\n * Repair an escaped string\n *\n * The function can run in two stages:\n * - First, it assumes the string has a valid end quote\n * - If it turns out that the string does not have a valid end quote followed\n * by a delimiter (which should be the case), the function runs again in a\n * more conservative way, stopping the string at the first next delimiter\n * and fixing the string by inserting a quote there, or stopping at a\n * stop index detected in the first iteration.\n */\n function parseString(stopAtDelimiter = false, stopAtIndex = -1): boolean {\n let skipEscapeChars = input.charAt(i) === '\\\\'\n if (skipEscapeChars) {\n // repair: remove the first escape character\n i++\n skipEscapeChars = true\n }\n\n if (isQuote(input.charAt(i))) {\n // double quotes are correct JSON,\n // single quotes come from JavaScript for example, we assume it will have a correct single end quote too\n // otherwise, we will match any double-quote-like start with a double-quote-like end,\n // or any single-quote-like start with a single-quote-like end\n const isEndQuote = isDoubleQuote(input.charAt(i))\n ? isDoubleQuote\n : isSingleQuote(input.charAt(i))\n ? isSingleQuote\n : isSingleQuoteLike(input.charAt(i))\n ? isSingleQuoteLike\n : isDoubleQuoteLike\n\n const iBefore = i\n const oBefore = output.length()\n\n output.push('\"')\n i++\n\n while (true) {\n if (input.isEnd(i)) {\n // end of text, we have a missing quote somewhere\n\n const iPrev = prevNonWhitespaceIndex(i - 1)\n if (!stopAtDelimiter && isDelimiter(input.charAt(iPrev))) {\n // if the text ends with a delimiter, like [\"hello],\n // so the missing end quote should be inserted before this delimiter\n // retry parsing the string, stopping at the first next delimiter\n i = iBefore\n output.remove(oBefore)\n\n return parseString(true)\n }\n\n // repair missing quote\n output.insertBeforeLastWhitespace('\"')\n\n return stack.update(Caret.afterValue)\n }\n\n if (i === stopAtIndex) {\n // use the stop index detected in the first iteration, and repair end quote\n output.insertBeforeLastWhitespace('\"')\n\n return stack.update(Caret.afterValue)\n }\n\n if (isEndQuote(input.charAt(i))) {\n // end quote\n // let us check what is before and after the quote to verify whether this is a legit end quote\n const iQuote = i\n const oQuote = output.length()\n output.push('\"')\n i++\n\n parseWhitespaceAndSkipComments(false)\n\n if (\n stopAtDelimiter ||\n input.isEnd(i) ||\n (isDelimiter(input.charAt(i)) &&\n // only count the brackets inside the string when actually needed,\n // i.e. when the quote is directly followed by a closing bracket\n !isInsideUnclosedBracket(input.substring(iBefore, iQuote), input.charAt(i))) ||\n (isQuote(input.charAt(i)) && !nextQuoteIsEndQuote(i)) ||\n isDigit(input.charAt(i))\n ) {\n // The quote is followed by the end of the text, a delimiter, or a next value\n // so the quote is indeed the end of the string\n parseConcatenatedString()\n\n return stack.update(Caret.afterValue)\n }\n\n const iPrevChar = prevNonWhitespaceIndex(iQuote - 1)\n const prevChar = input.charAt(iPrevChar)\n\n if (prevChar === ',') {\n // A comma followed by a quote, like '{\"a\":\"b,c,\"d\":\"e\"}'.\n // We assume that the quote is a start quote, and that the end quote\n // should have been located right before the comma but is missing.\n i = iBefore\n output.remove(oBefore)\n\n return parseString(false, iPrevChar)\n }\n\n if (isDelimiter(prevChar)) {\n // This is not the right end quote: it is preceded by a delimiter,\n // and NOT followed by a delimiter. So, there is an end quote missing\n // parse the string again and then stop at the first next delimiter\n i = iBefore\n output.remove(oBefore)\n\n return parseString(true)\n }\n\n // revert to right after the quote but before any whitespace, and continue parsing the string\n output.remove(oQuote + 1)\n i = iQuote + 1\n\n // repair unescaped quote\n output.insertAt(oQuote, '\\\\')\n } else if (stopAtDelimiter && isUnquotedStringDelimiter(input.charAt(i))) {\n // we're in the mode to stop the string at the first delimiter\n // because there is an end quote missing\n\n // test start of an url like \"https://...\" (this would be parsed as a comment)\n if (\n input.charAt(i - 1) === ':' &&\n regexUrlStart.test(input.substring(iBefore + 1, i + 2))\n ) {\n while (!input.isEnd(i) && regexUrlChar.test(input.charAt(i))) {\n output.push(input.charAt(i))\n i++\n }\n }\n\n // repair missing quote\n output.insertBeforeLastWhitespace('\"')\n\n parseConcatenatedString()\n\n return stack.update(Caret.afterValue)\n } else if (input.charAt(i) === '\\\\') {\n // handle escaped content like \\n or \\u2605\n const char = input.charAt(i + 1)\n const escapeChar = escapeCharacters[char]\n if (escapeChar !== undefined) {\n output.push(input.substring(i, i + 2))\n i += 2\n } else if (char === 'u') {\n let j = 2\n while (j < 6 && isHex(input.charAt(i + j))) {\n j++\n }\n\n if (j === 6) {\n output.push(input.substring(i, i + 6))\n i += 6\n } else if (input.isEnd(i + j)) {\n // repair invalid or truncated unicode char at the end of the text\n // by removing the unicode char and ending the string here\n i += j\n } else {\n throwInvalidUnicodeCharacter()\n }\n } else if (char === '\\n') {\n // repair a backslash escaped newline (like in Bash scripts)\n output.push('\\\\n')\n i += 2\n } else {\n // repair invalid escape character: remove it\n output.push(char)\n i += 2\n }\n } else {\n // handle regular characters\n const char = input.charAt(i)\n\n if (char === '\"' && input.charAt(i - 1) !== '\\\\') {\n // repair unescaped double quote\n output.push(`\\\\${char}`)\n i++\n } else if (isControlCharacter(char)) {\n // unescaped control character\n output.push(controlCharacters[char])\n i++\n } else {\n if (!isValidStringCharacter(char)) {\n throwInvalidCharacter(char)\n }\n output.push(char)\n i++\n }\n }\n\n if (skipEscapeChars) {\n // repair: skipped escape character (nothing to do)\n skipEscapeCharacter()\n }\n }\n }\n\n return false\n }\n\n /**\n * Repair concatenated strings like \"hello\" + \"world\", change this into \"helloworld\"\n */\n function parseConcatenatedString(): boolean {\n let parsed = false\n\n parseWhitespaceAndSkipComments()\n while (input.charAt(i) === '+') {\n parsed = true\n i++\n parseWhitespaceAndSkipComments()\n\n // repair: remove the end quote of the first string\n output.stripLastOccurrence('\"', true)\n const start = output.length()\n const parsedStr = parseString()\n if (parsedStr) {\n // repair: remove the start quote of the second string\n output.remove(start, start + 1)\n } else {\n // repair: remove the + because it is not followed by a string\n output.insertBeforeLastWhitespace('\"')\n }\n }\n\n return parsed\n }\n\n /**\n * Parse a number like 2.4 or 2.4e6\n */\n function parseNumber(): boolean {\n const start = i\n let num = ''\n let invalid = false\n\n if (input.charAt(i) === '-') {\n num += input.charAt(i)\n i++\n\n if (!isDigit(input.charAt(i)) && atEndOfNumber()) {\n num += '0'\n }\n }\n\n if (input.charAt(i) === '0' && isDigit(input.charAt(i + 1))) {\n // the number has leading zeros like \"00123\" or \"001.23\"\n invalid = true\n }\n\n while (isDigit(input.charAt(i))) {\n num += input.charAt(i)\n i++\n }\n\n if (input.charAt(i) === '.') {\n if (num === '' || num === '-') {\n // repair missing leading zero before dot\n num += '0'\n }\n\n num += input.charAt(i)\n i++\n\n if (!isDigit(input.charAt(i))) {\n // repair a truncated number like \"2.\" into \"2.0\"\n num += '0'\n }\n\n while (isDigit(input.charAt(i))) {\n num += input.charAt(i)\n i++\n }\n }\n\n if (i > start) {\n if (input.charAt(i) === 'e' || input.charAt(i) === 'E') {\n if (num === '-') {\n invalid = true\n }\n\n num += input.charAt(i)\n i++\n\n if (input.charAt(i) === '-' || input.charAt(i) === '+') {\n num += input.charAt(i)\n i++\n }\n\n if (!isDigit(input.charAt(i))) {\n // repair a truncated number like \"2e\" into \"2e0\"\n num += '0'\n }\n\n while (isDigit(input.charAt(i))) {\n num += input.charAt(i)\n i++\n }\n }\n\n // if we're not at the end of the number by this point, allow this to be parsed as another type\n if (!atEndOfNumber()) {\n i = start\n return false\n }\n\n output.push(invalid ? `\"${input.substring(start, i)}\"` : num)\n return stack.update(Caret.afterValue)\n }\n\n return false\n }\n\n /**\n * Parse keywords true, false, null\n * Repair Python keywords True, False, None\n */\n function parseKeywords(): boolean {\n return (\n parseKeyword('true', 'true') ||\n parseKeyword('false', 'false') ||\n parseKeyword('null', 'null') ||\n // repair Python keywords True, False, None\n parseKeyword('True', 'true') ||\n parseKeyword('False', 'false') ||\n parseKeyword('None', 'null')\n )\n }\n\n function parseKeyword(name: string, value: string): boolean {\n if (\n input.substring(i, i + name.length) === name &&\n !isFunctionNameChar(input.charAt(i + name.length))\n ) {\n output.push(value)\n i += name.length\n return stack.update(Caret.afterValue)\n }\n\n return false\n }\n\n function parseUnquotedKey(): boolean {\n let end = findNextDelimiter(true, i)\n\n if (end !== null) {\n // first, go back to prevent getting trailing whitespaces in the string\n while (isWhitespace(input, end - 1) && end > i) {\n end--\n }\n\n const symbol = input.substring(i, end)\n output.push(JSON.stringify(symbol))\n i = end\n\n if (input.charAt(i) === '\"') {\n // we had a missing start quote, but now we encountered the end quote, so we can skip that one\n i++\n }\n\n return stack.update(Caret.afterValue) // we do not have a state Caret.afterKey, therefore we use afterValue here\n }\n\n return false\n }\n\n function findNextDelimiter(isKey: boolean, start: number): number | null {\n // note that the symbol can end with whitespaces: we stop at the next delimiter\n // also, note that we allow strings to contain a slash / in order to support repairing regular expressions\n let j = start\n while (\n !input.isEnd(j) &&\n !isUnquotedStringDelimiter(input.charAt(j)) &&\n !isQuote(input.charAt(j)) &&\n (!isKey || input.charAt(j) !== ':')\n ) {\n j++\n }\n\n return j > i ? j : null\n }\n\n function prevNonWhitespaceIndex(start: number): number {\n let prev = start\n\n while (prev > 0 && isWhitespace(input, prev)) {\n prev--\n }\n\n return prev\n }\n\n function nextQuoteIsEndQuote(index: number): boolean {\n // precondition: input.charAt(index) is a quote. Peek past it: if nothing meaningful\n // follows, that quote is the true end and this one is embedded (e.g. `\"The TV is 72\"\"`)\n let next = index + 1\n while (!input.isEnd(next) && isWhitespace(input, next)) {\n next++\n }\n\n return input.isEnd(next) || isDelimiter(input.charAt(next))\n }\n\n function atEndOfNumber() {\n return input.isEnd(i) || isDelimiter(input.charAt(i)) || isWhitespace(input, i)\n }\n\n function throwInvalidCharacter(char: string) {\n throw new JSONRepairError(`Invalid character ${JSON.stringify(char)}`, i)\n }\n\n function throwUnexpectedCharacter() {\n throw new JSONRepairError(`Unexpected character ${JSON.stringify(input.charAt(i))}`, i)\n }\n\n function throwUnexpectedEnd() {\n throw new JSONRepairError('Unexpected end of json string', i)\n }\n\n function throwObjectKeyExpected() {\n throw new JSONRepairError('Object key expected', i)\n }\n\n function throwColonExpected() {\n throw new JSONRepairError('Colon expected', i)\n }\n\n function throwInvalidUnicodeCharacter() {\n const chars = input.substring(i, i + 6)\n throw new JSONRepairError(`Invalid unicode character \"${chars}\"`, i)\n }\n\n function atEndOfBlockComment(i: number) {\n return input.charAt(i) === '*' && input.charAt(i + 1) === '/'\n }\n\n return {\n transform,\n flush\n }\n}\n"],"mappings":"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","ignoreList":[]}
{"version":3,"file":"core.js","names":["_JSONRepairError","require","_stringUtils","_InputBuffer","_OutputBuffer","_stack","controlCharacters","escapeCharacters","b","f","n","r","t","jsonrepairCore","_ref","onData","bufferSize","chunkSize","input","createInputBuffer","output","createOutputBuffer","write","i","iFlushed","stack","createStack","flushInputBuffer","flush","transform","chunk","push","currentLength","parse","close","parseWhitespaceAndSkipComments","type","StackType","object","caret","Caret","beforeKey","skipEllipsis","parseObjectKey","parseUnexpectedColon","parseRepairTrailingComma","parseRepairObjectEndOrComma","beforeValue","parseValue","parseRepairMissingObjectValue","afterValue","parseObjectComma","parseObjectEnd","array","parseRepairArrayEnd","parseArrayComma","parseArrayEnd","parseRepairMissingComma","ndJson","parseRepairNdJsonEnd","functionCall","parseFunctionCallEnd","root","parseRootStart","parseRootEnd","parseObjectStart","parseArrayStart","parseString","parseNumber","parseKeywords","parseRepairUnquotedString","parseRepairRegex","parseCharacter","skipCharacter","update","j","isFunctionNameCharStart","charAt","isEnd","isFunctionNameChar","k","isWhitespace","findNextDelimiter","regexUrlStart","test","substring","regexUrlChar","symbol","JSON","stringify","start","endsWithIgnoringWhitespace","stripLastOccurrence","throwObjectKeyExpected","parseUnexpectedEnd","throwUnexpectedEnd","throwUnexpectedCharacter","parsedKey","parseUnquotedKey","truncatedText","isStartOfValue","insertBeforeLastWhitespace","throwColonExpected","pop","parseMarkdownCodeBlock","parsedComma","unshift","skipNewline","arguments","length","undefined","changed","parseWhitespace","parseComment","_isWhiteSpace","isWhitespaceExceptNewline","whitespace","isSpecialWhitespace","atEndOfBlockComment","blocks","skipMarkdownCodeBlock","block","end","char","skipEscapeCharacter","htmlEntityWindow","at","max","Math","min","maxHtmlEntityLength","stopAtDelimiter","stopAtIndex","skipEscapeChars","isQuote","openEntity","matchHtmlEntity","openedByEntity","isDoubleQuoteEntity","isSingleQuoteEntity","isEndQuote","isDoubleQuote","isSingleQuote","isSingleQuoteLike","isDoubleQuoteLike","iBefore","oBefore","iPrev","prevNonWhitespaceIndex","isDelimiter","remove","entity","iQuote","oQuote","isInsideUnclosedBracket","nextQuoteIsEndQuote","isDigit","parseConcatenatedString","iPrevChar","prevChar","insertAt","isUnquotedStringDelimiter","isControlCharacter","escapeChar","isHex","throwInvalidUnicodeCharacter","isValidStringCharacter","throwInvalidCharacter","parsed","parsedStr","num","invalid","atEndOfNumber","parseKeyword","name","value","isKey","prev","index","next","JSONRepairError","chars"],"sources":["../../../src/streaming/core.ts"],"sourcesContent":["import { JSONRepairError } from '../utils/JSONRepairError.js'\nimport {\n isControlCharacter,\n isDelimiter,\n isDigit,\n isDoubleQuote,\n isDoubleQuoteEntity,\n isDoubleQuoteLike,\n isFunctionNameChar,\n isFunctionNameCharStart,\n isHex,\n isInsideUnclosedBracket,\n isQuote,\n isSingleQuote,\n isSingleQuoteEntity,\n isSingleQuoteLike,\n isSpecialWhitespace,\n isStartOfValue,\n isUnquotedStringDelimiter,\n isValidStringCharacter,\n isWhitespace,\n isWhitespaceExceptNewline,\n matchHtmlEntity,\n maxHtmlEntityLength,\n regexUrlChar,\n regexUrlStart\n} from '../utils/stringUtils.js'\nimport { createInputBuffer } from './buffer/InputBuffer.js'\nimport { createOutputBuffer } from './buffer/OutputBuffer.js'\nimport { Caret, createStack, StackType } from './stack.js'\n\nconst controlCharacters: { [key: string]: string } = {\n '\\b': '\\\\b',\n '\\f': '\\\\f',\n '\\n': '\\\\n',\n '\\r': '\\\\r',\n '\\t': '\\\\t'\n}\n\n// map with all escape characters\nconst escapeCharacters: { [key: string]: string } = {\n '\"': '\"',\n '\\\\': '\\\\',\n '/': '/',\n b: '\\b',\n f: '\\f',\n n: '\\n',\n r: '\\r',\n t: '\\t'\n // note that \\u is handled separately in parseString()\n}\n\nexport interface JsonRepairCoreOptions {\n onData: (chunk: string) => void\n chunkSize?: number\n bufferSize?: number\n}\n\nexport interface JsonRepairCore {\n transform: (chunk: string) => void\n flush: () => void\n}\n\nexport function jsonrepairCore({\n onData,\n bufferSize = 65536,\n chunkSize = 65536\n}: JsonRepairCoreOptions): JsonRepairCore {\n const input = createInputBuffer()\n\n const output = createOutputBuffer({\n write: onData,\n bufferSize,\n chunkSize\n })\n\n let i = 0\n let iFlushed = 0\n const stack = createStack()\n\n function flushInputBuffer() {\n while (iFlushed < i - bufferSize - chunkSize) {\n iFlushed += chunkSize\n input.flush(iFlushed)\n }\n }\n\n function transform(chunk: string) {\n input.push(chunk)\n\n while (i < input.currentLength() - bufferSize && parse()) {\n // loop until there is nothing more to process\n }\n\n flushInputBuffer()\n }\n\n function flush() {\n input.close()\n\n while (parse()) {\n // loop until there is nothing more to process\n }\n\n output.flush()\n }\n\n function parse(): boolean {\n parseWhitespaceAndSkipComments()\n\n switch (stack.type) {\n case StackType.object: {\n switch (stack.caret) {\n case Caret.beforeKey:\n return (\n skipEllipsis() ||\n parseObjectKey() ||\n parseUnexpectedColon() ||\n parseRepairTrailingComma() ||\n parseRepairObjectEndOrComma()\n )\n case Caret.beforeValue:\n return parseValue() || parseRepairMissingObjectValue()\n case Caret.afterValue:\n return parseObjectComma() || parseObjectEnd() || parseRepairObjectEndOrComma()\n default:\n return false\n }\n }\n\n case StackType.array: {\n switch (stack.caret) {\n case Caret.beforeValue:\n return (\n skipEllipsis() || parseValue() || parseRepairTrailingComma() || parseRepairArrayEnd()\n )\n case Caret.afterValue:\n return (\n parseArrayComma() ||\n parseArrayEnd() ||\n parseRepairMissingComma() ||\n parseRepairArrayEnd()\n )\n default:\n return false\n }\n }\n\n case StackType.ndJson: {\n switch (stack.caret) {\n case Caret.beforeValue:\n return parseValue() || parseRepairTrailingComma()\n case Caret.afterValue:\n return parseArrayComma() || parseRepairMissingComma() || parseRepairNdJsonEnd()\n default:\n return false\n }\n }\n\n case StackType.functionCall: {\n switch (stack.caret) {\n case Caret.beforeValue:\n return parseValue()\n case Caret.afterValue:\n return parseFunctionCallEnd()\n default:\n return false\n }\n }\n\n case StackType.root: {\n switch (stack.caret) {\n case Caret.beforeValue:\n return parseRootStart()\n case Caret.afterValue:\n return parseRootEnd()\n default:\n return false\n }\n }\n\n default:\n return false\n }\n }\n\n function parseValue(): boolean {\n return (\n parseObjectStart() ||\n parseArrayStart() ||\n parseString() ||\n parseNumber() ||\n parseKeywords() ||\n parseRepairUnquotedString() ||\n parseRepairRegex()\n )\n }\n\n function parseObjectStart(): boolean {\n if (parseCharacter('{')) {\n parseWhitespaceAndSkipComments()\n\n skipEllipsis()\n\n if (skipCharacter(',')) {\n parseWhitespaceAndSkipComments()\n }\n\n if (parseCharacter('}')) {\n return stack.update(Caret.afterValue)\n }\n\n return stack.push(StackType.object, Caret.beforeKey)\n }\n\n return false\n }\n\n function parseArrayStart(): boolean {\n if (parseCharacter('[')) {\n parseWhitespaceAndSkipComments()\n\n skipEllipsis()\n\n if (skipCharacter(',')) {\n parseWhitespaceAndSkipComments()\n }\n\n if (parseCharacter(']')) {\n return stack.update(Caret.afterValue)\n }\n\n return stack.push(StackType.array, Caret.beforeValue)\n }\n\n return false\n }\n\n function parseRepairUnquotedString(): boolean {\n let j = i\n\n if (isFunctionNameCharStart(input.charAt(j))) {\n while (!input.isEnd(j) && isFunctionNameChar(input.charAt(j))) {\n j++\n }\n\n let k = j\n while (isWhitespace(input, k)) {\n k++\n }\n\n if (input.charAt(k) === '(') {\n // repair a MongoDB function call like NumberLong(\"2\")\n // repair a JSONP function call like callback({...});\n k++\n i = k\n return stack.push(StackType.functionCall, Caret.beforeValue)\n }\n }\n\n j = findNextDelimiter(false, j)\n if (j !== null) {\n // test start of an url like \"https://...\" (this would be parsed as a comment)\n if (input.charAt(j - 1) === ':' && regexUrlStart.test(input.substring(i, j + 2))) {\n while (!input.isEnd(j) && regexUrlChar.test(input.charAt(j))) {\n j++\n }\n }\n\n const symbol = input.substring(i, j)\n i = j\n\n output.push(symbol === 'undefined' ? 'null' : JSON.stringify(symbol))\n\n if (input.charAt(i) === '\"') {\n // we had a missing start quote, but now we encountered the end quote, so we can skip that one\n i++\n }\n\n return stack.update(Caret.afterValue)\n }\n\n return false\n }\n\n function parseRepairRegex() {\n if (input.charAt(i) === '/') {\n const start = i\n i++\n\n while (!input.isEnd(i) && (input.charAt(i) !== '/' || input.charAt(i - 1) === '\\\\')) {\n i++\n }\n i++\n\n output.push(JSON.stringify(input.substring(start, i)))\n\n return stack.update(Caret.afterValue)\n }\n }\n\n function parseRepairMissingObjectValue(): boolean {\n // repair missing object value\n output.push('null')\n return stack.update(Caret.afterValue)\n }\n\n function parseRepairTrailingComma(): boolean {\n // repair trailing comma\n if (output.endsWithIgnoringWhitespace(',')) {\n output.stripLastOccurrence(',')\n return stack.update(Caret.afterValue)\n }\n\n return false\n }\n\n function parseUnexpectedColon(): boolean {\n if (input.charAt(i) === ':') {\n throwObjectKeyExpected()\n }\n\n return false\n }\n\n function parseUnexpectedEnd(): boolean {\n if (input.isEnd(i)) {\n throwUnexpectedEnd()\n } else {\n throwUnexpectedCharacter()\n }\n\n return false\n }\n\n function parseObjectKey(): boolean {\n const parsedKey = parseString() || parseUnquotedKey()\n if (parsedKey) {\n parseWhitespaceAndSkipComments()\n\n if (parseCharacter(':')) {\n // expect a value after the :\n return stack.update(Caret.beforeValue)\n }\n\n const truncatedText = input.isEnd(i)\n if (isStartOfValue(input.charAt(i)) || truncatedText) {\n // repair missing colon\n output.insertBeforeLastWhitespace(':')\n return stack.update(Caret.beforeValue)\n }\n\n throwColonExpected()\n }\n\n return false\n }\n\n function parseObjectComma(): boolean {\n if (parseCharacter(',')) {\n return stack.update(Caret.beforeKey)\n }\n\n return false\n }\n\n function parseObjectEnd(): boolean {\n if (parseCharacter('}')) {\n return stack.pop()\n }\n\n return false\n }\n\n function parseRepairObjectEndOrComma(): true {\n // repair missing object end and trailing comma\n if (input.charAt(i) === '{') {\n output.stripLastOccurrence(',')\n output.insertBeforeLastWhitespace('}')\n return stack.pop()\n }\n\n // repair missing comma\n if (!input.isEnd(i) && isStartOfValue(input.charAt(i))) {\n output.insertBeforeLastWhitespace(',')\n return stack.update(Caret.beforeKey)\n }\n\n // repair missing closing brace\n output.insertBeforeLastWhitespace('}')\n return stack.pop()\n }\n\n function parseArrayComma(): boolean {\n if (parseCharacter(',')) {\n return stack.update(Caret.beforeValue)\n }\n\n return false\n }\n\n function parseArrayEnd(): boolean {\n if (parseCharacter(']')) {\n return stack.pop()\n }\n\n return false\n }\n\n function parseRepairMissingComma(): boolean {\n // repair missing comma\n if (!input.isEnd(i) && isStartOfValue(input.charAt(i))) {\n output.insertBeforeLastWhitespace(',')\n return stack.update(Caret.beforeValue)\n }\n\n return false\n }\n\n function parseRepairArrayEnd(): true {\n // repair missing closing bracket\n output.insertBeforeLastWhitespace(']')\n return stack.pop()\n }\n\n function parseRepairNdJsonEnd(): boolean {\n if (input.isEnd(i)) {\n output.push('\\n]')\n return stack.pop()\n }\n\n throwUnexpectedEnd()\n return false // just to make TS happy\n }\n\n function parseFunctionCallEnd(): true {\n if (skipCharacter(')')) {\n skipCharacter(';')\n }\n\n return stack.pop()\n }\n\n function parseRootStart(): boolean {\n parseMarkdownCodeBlock(['```', '[```', '{```'])\n\n return parseValue() || parseUnexpectedEnd()\n }\n\n function parseRootEnd(): boolean {\n parseMarkdownCodeBlock(['```', '```]', '```}'])\n\n const parsedComma = parseCharacter(',')\n parseWhitespaceAndSkipComments()\n\n if (\n isStartOfValue(input.charAt(i)) &&\n (output.endsWithIgnoringWhitespace(',') || output.endsWithIgnoringWhitespace('\\n'))\n ) {\n // start of a new value after end of the root level object: looks like\n // newline delimited JSON -> turn into a root level array\n if (!parsedComma) {\n // repair missing comma\n output.insertBeforeLastWhitespace(',')\n }\n\n output.unshift('[\\n')\n\n return stack.push(StackType.ndJson, Caret.beforeValue)\n }\n\n if (parsedComma) {\n // repair: remove trailing comma\n output.stripLastOccurrence(',')\n\n return stack.update(Caret.afterValue)\n }\n\n // repair redundant end braces and brackets\n while (input.charAt(i) === '}' || input.charAt(i) === ']') {\n i++\n parseWhitespaceAndSkipComments()\n }\n\n if (!input.isEnd(i)) {\n throwUnexpectedCharacter()\n }\n\n return false\n }\n\n function parseWhitespaceAndSkipComments(skipNewline = true): boolean {\n const start = i\n\n let changed = parseWhitespace(skipNewline)\n do {\n changed = parseComment()\n if (changed) {\n changed = parseWhitespace(skipNewline)\n }\n } while (changed)\n\n return i > start\n }\n\n function parseWhitespace(skipNewline: boolean): boolean {\n const _isWhiteSpace = skipNewline ? isWhitespace : isWhitespaceExceptNewline\n let whitespace = ''\n\n while (true) {\n if (_isWhiteSpace(input, i)) {\n whitespace += input.charAt(i)\n i++\n } else if (isSpecialWhitespace(input, i)) {\n // repair special whitespace\n whitespace += ' '\n i++\n } else {\n break\n }\n }\n\n if (whitespace.length > 0) {\n output.push(whitespace)\n return true\n }\n\n return false\n }\n\n function parseComment(): boolean {\n // find a block comment '/* ... */'\n if (input.charAt(i) === '/' && input.charAt(i + 1) === '*') {\n // repair block comment by skipping it\n while (!input.isEnd(i) && !atEndOfBlockComment(i)) {\n i++\n }\n i += 2\n\n return true\n }\n\n // find a line comment '// ...'\n if (input.charAt(i) === '/' && input.charAt(i + 1) === '/') {\n // repair line comment by skipping it\n while (!input.isEnd(i) && input.charAt(i) !== '\\n') {\n i++\n }\n\n return true\n }\n\n return false\n }\n\n function parseMarkdownCodeBlock(blocks: string[]): boolean {\n // find and skip over a Markdown fenced code block:\n // ``` ... ```\n // or\n // ```json ... ```\n if (skipMarkdownCodeBlock(blocks)) {\n if (isFunctionNameCharStart(input.charAt(i))) {\n // strip the optional language specifier like \"json\"\n while (!input.isEnd(i) && isFunctionNameChar(input.charAt(i))) {\n i++\n }\n }\n\n parseWhitespaceAndSkipComments()\n\n return true\n }\n\n return false\n }\n\n function skipMarkdownCodeBlock(blocks: string[]): boolean {\n for (const block of blocks) {\n const end = i + block.length\n if (input.substring(i, end) === block) {\n i = end\n return true\n }\n }\n\n return false\n }\n\n function parseCharacter(char: string): boolean {\n if (input.charAt(i) === char) {\n output.push(input.charAt(i))\n i++\n return true\n }\n\n return false\n }\n\n function skipCharacter(char: string): boolean {\n if (input.charAt(i) === char) {\n i++\n return true\n }\n\n return false\n }\n\n function skipEscapeCharacter(): boolean {\n return skipCharacter('\\\\')\n }\n\n /**\n * Skip ellipsis like \"[1,2,3,...]\" or \"[1,2,3,...,9]\" or \"[...,7,8,9]\"\n * or a similar construct in objects.\n */\n function skipEllipsis(): boolean {\n parseWhitespaceAndSkipComments()\n\n if (input.charAt(i) === '.' && input.charAt(i + 1) === '.' && input.charAt(i + 2) === '.') {\n // repair: remove the ellipsis (three dots) and optionally a comma\n i += 3\n parseWhitespaceAndSkipComments()\n skipCharacter(',')\n\n return true\n }\n\n return false\n }\n\n /**\n * Read a small window of buffered input at the given index to detect an HTML\n * entity, clamped so it never reads past the buffered input.\n */\n function htmlEntityWindow(at: number): string {\n const max = Math.min(at + maxHtmlEntityLength, input.currentLength())\n return at < max ? input.substring(at, max) : ''\n }\n\n /**\n * Parse a string enclosed by double quotes \"...\". Can contain escaped quotes\n * Repair strings enclosed in single quotes or special quotes\n * Repair an escaped string\n *\n * The function can run in two stages:\n * - First, it assumes the string has a valid end quote\n * - If it turns out that the string does not have a valid end quote followed\n * by a delimiter (which should be the case), the function runs again in a\n * more conservative way, stopping the string at the first next delimiter\n * and fixing the string by inserting a quote there, or stopping at a\n * stop index detected in the first iteration.\n */\n function parseString(stopAtDelimiter = false, stopAtIndex = -1): boolean {\n const skipEscapeChars = input.charAt(i) === '\\\\'\n if (skipEscapeChars) {\n // repair: remove the first escape character\n i++\n\n if (!isQuote(input.charAt(i))) {\n throwUnexpectedCharacter()\n }\n }\n\n // a string can be opened by a quote character, or by an HTML entity that\n // decodes to a quote (like &quot;) when repairing HTML-encoded JSON\n const openEntity = input.charAt(i) === '&' ? matchHtmlEntity(htmlEntityWindow(i)) : null\n const openedByEntity = isDoubleQuoteEntity(openEntity) || isSingleQuoteEntity(openEntity)\n\n if (isQuote(input.charAt(i)) || openedByEntity) {\n // double quotes are correct JSON,\n // single quotes come from JavaScript for example, we assume it will have a correct single end quote too\n // otherwise, we will match any double-quote-like start with a double-quote-like end,\n // or any single-quote-like start with a single-quote-like end\n const isEndQuote = isDoubleQuote(input.charAt(i))\n ? isDoubleQuote\n : isSingleQuote(input.charAt(i))\n ? isSingleQuote\n : isSingleQuoteLike(input.charAt(i))\n ? isSingleQuoteLike\n : isDoubleQuoteLike\n\n const iBefore = i\n const oBefore = output.length()\n\n output.push('\"')\n // when opened by an entity, skip past the whole entity; otherwise skip the quote\n i += openedByEntity && openEntity ? openEntity.length : 1\n\n while (true) {\n if (input.isEnd(i)) {\n // end of text, we have a missing quote somewhere\n\n const iPrev = prevNonWhitespaceIndex(i - 1)\n if (!stopAtDelimiter && isDelimiter(input.charAt(iPrev))) {\n // if the text ends with a delimiter, like [\"hello],\n // so the missing end quote should be inserted before this delimiter\n // retry parsing the string, stopping at the first next delimiter\n i = iBefore\n output.remove(oBefore)\n\n return parseString(true)\n }\n\n // repair missing quote\n output.insertBeforeLastWhitespace('\"')\n\n return stack.update(Caret.afterValue)\n }\n\n if (i === stopAtIndex) {\n // use the stop index detected in the first iteration, and repair end quote\n output.insertBeforeLastWhitespace('\"')\n\n return stack.update(Caret.afterValue)\n }\n\n // inside an entity-opened string a '&' is an entity; it is the end quote\n // when it decodes to the opening quote\n const entity =\n openedByEntity && input.charAt(i) === '&' ? matchHtmlEntity(htmlEntityWindow(i)) : null\n const isEnd =\n entity && openEntity ? entity.char === openEntity.char : isEndQuote(input.charAt(i))\n\n if (isEnd) {\n // end quote\n // let us check what is before and after the quote to verify whether this is a legit end quote\n const iQuote = i\n const oQuote = output.length()\n output.push('\"')\n i += entity ? entity.length : 1\n\n parseWhitespaceAndSkipComments(false)\n\n if (\n stopAtDelimiter ||\n input.isEnd(i) ||\n (isDelimiter(input.charAt(i)) &&\n // only count the brackets inside the string when actually needed,\n // i.e. when the quote is directly followed by a closing bracket\n !isInsideUnclosedBracket(input.substring(iBefore, iQuote), input.charAt(i))) ||\n (isQuote(input.charAt(i)) && !nextQuoteIsEndQuote(i)) ||\n isDigit(input.charAt(i))\n ) {\n // The quote is followed by the end of the text, a delimiter, or a next value\n // so the quote is indeed the end of the string\n parseConcatenatedString()\n\n return stack.update(Caret.afterValue)\n }\n\n if (input.charAt(i) === '\\\\') {\n throwUnexpectedCharacter()\n }\n\n const iPrevChar = prevNonWhitespaceIndex(iQuote - 1)\n const prevChar = input.charAt(iPrevChar)\n\n if (prevChar === ',') {\n // A comma followed by a quote, like '{\"a\":\"b,c,\"d\":\"e\"}'.\n // We assume that the quote is a start quote, and that the end quote\n // should have been located right before the comma but is missing.\n i = iBefore\n output.remove(oBefore)\n\n return parseString(false, iPrevChar)\n }\n\n if (isDelimiter(prevChar)) {\n // This is not the right end quote: it is preceded by a delimiter,\n // and NOT followed by a delimiter. So, there is an end quote missing\n // parse the string again and then stop at the first next delimiter\n i = iBefore\n output.remove(oBefore)\n\n return parseString(true)\n }\n\n // revert to right after the quote but before any whitespace, and continue parsing the string\n output.remove(oQuote + 1)\n i = iQuote + (entity ? entity.length : 1)\n\n // repair unescaped quote\n output.insertAt(oQuote, '\\\\')\n } else if (stopAtDelimiter && isUnquotedStringDelimiter(input.charAt(i))) {\n // we're in the mode to stop the string at the first delimiter\n // because there is an end quote missing\n\n // test start of an url like \"https://...\" (this would be parsed as a comment)\n if (\n input.charAt(i - 1) === ':' &&\n regexUrlStart.test(input.substring(iBefore + 1, i + 2))\n ) {\n while (!input.isEnd(i) && regexUrlChar.test(input.charAt(i))) {\n output.push(input.charAt(i))\n i++\n }\n }\n\n // repair missing quote\n output.insertBeforeLastWhitespace('\"')\n\n parseConcatenatedString()\n\n return stack.update(Caret.afterValue)\n } else if (entity) {\n // decode an HTML entity inside the string as content\n const char = entity.char\n if (char === '\"') {\n // repair unescaped double quote\n output.push('\\\\\"')\n } else if (isControlCharacter(char)) {\n output.push(controlCharacters[char])\n } else {\n output.push(char)\n }\n i += entity.length\n } else if (input.charAt(i) === '\\\\') {\n // handle escaped content like \\n or \\u2605\n const char = input.charAt(i + 1)\n const escapeChar = escapeCharacters[char]\n if (escapeChar !== undefined) {\n output.push(input.substring(i, i + 2))\n i += 2\n } else if (char === 'u') {\n let j = 2\n while (j < 6 && isHex(input.charAt(i + j))) {\n j++\n }\n\n if (j === 6) {\n output.push(input.substring(i, i + 6))\n i += 6\n } else if (input.isEnd(i + j)) {\n // repair invalid or truncated unicode char at the end of the text\n // by removing the unicode char and ending the string here\n i += j\n } else {\n throwInvalidUnicodeCharacter()\n }\n } else if (char === '\\n') {\n // repair a backslash escaped newline (like in Bash scripts)\n output.push('\\\\n')\n i += 2\n } else {\n // repair invalid escape character: remove it\n output.push(char)\n i += 2\n }\n } else {\n // handle regular characters\n const char = input.charAt(i)\n\n if (char === '\"' && input.charAt(i - 1) !== '\\\\') {\n // repair unescaped double quote\n output.push(`\\\\${char}`)\n i++\n } else if (isControlCharacter(char)) {\n // unescaped control character\n output.push(controlCharacters[char])\n i++\n } else {\n if (!isValidStringCharacter(char)) {\n throwInvalidCharacter(char)\n }\n output.push(char)\n i++\n }\n }\n\n if (skipEscapeChars) {\n // repair: skipped escape character (nothing to do)\n skipEscapeCharacter()\n }\n }\n }\n\n return false\n }\n\n /**\n * Repair concatenated strings like \"hello\" + \"world\", change this into \"helloworld\"\n */\n function parseConcatenatedString(): boolean {\n let parsed = false\n\n parseWhitespaceAndSkipComments()\n while (input.charAt(i) === '+') {\n parsed = true\n i++\n parseWhitespaceAndSkipComments()\n\n // repair: remove the end quote of the first string\n output.stripLastOccurrence('\"', true)\n const start = output.length()\n const parsedStr = parseString()\n if (parsedStr) {\n // repair: remove the start quote of the second string\n output.remove(start, start + 1)\n } else {\n // repair: remove the + because it is not followed by a string\n output.insertBeforeLastWhitespace('\"')\n }\n }\n\n return parsed\n }\n\n /**\n * Parse a number like 2.4 or 2.4e6\n */\n function parseNumber(): boolean {\n const start = i\n let num = ''\n let invalid = false\n\n if (input.charAt(i) === '-') {\n num += input.charAt(i)\n i++\n\n if (!isDigit(input.charAt(i)) && atEndOfNumber()) {\n num += '0'\n }\n }\n\n if (input.charAt(i) === '0' && isDigit(input.charAt(i + 1))) {\n // the number has leading zeros like \"00123\" or \"001.23\"\n invalid = true\n }\n\n while (isDigit(input.charAt(i))) {\n num += input.charAt(i)\n i++\n }\n\n if (input.charAt(i) === '.') {\n if (num === '' || num === '-') {\n // repair missing leading zero before dot\n num += '0'\n }\n\n num += input.charAt(i)\n i++\n\n if (!isDigit(input.charAt(i))) {\n // repair a truncated number like \"2.\" into \"2.0\"\n num += '0'\n }\n\n while (isDigit(input.charAt(i))) {\n num += input.charAt(i)\n i++\n }\n }\n\n if (i > start) {\n if (input.charAt(i) === 'e' || input.charAt(i) === 'E') {\n if (num === '-') {\n invalid = true\n }\n\n num += input.charAt(i)\n i++\n\n if (input.charAt(i) === '-' || input.charAt(i) === '+') {\n num += input.charAt(i)\n i++\n }\n\n if (!isDigit(input.charAt(i))) {\n // repair a truncated number like \"2e\" into \"2e0\"\n num += '0'\n }\n\n while (isDigit(input.charAt(i))) {\n num += input.charAt(i)\n i++\n }\n }\n\n // if we're not at the end of the number by this point, allow this to be parsed as another type\n if (!atEndOfNumber()) {\n i = start\n return false\n }\n\n output.push(invalid ? `\"${input.substring(start, i)}\"` : num)\n return stack.update(Caret.afterValue)\n }\n\n return false\n }\n\n /**\n * Parse keywords true, false, null\n * Repair Python keywords True, False, None\n */\n function parseKeywords(): boolean {\n return (\n parseKeyword('true', 'true') ||\n parseKeyword('false', 'false') ||\n parseKeyword('null', 'null') ||\n // repair Python keywords True, False, None\n parseKeyword('True', 'true') ||\n parseKeyword('False', 'false') ||\n parseKeyword('None', 'null')\n )\n }\n\n function parseKeyword(name: string, value: string): boolean {\n if (\n input.substring(i, i + name.length) === name &&\n !isFunctionNameChar(input.charAt(i + name.length))\n ) {\n output.push(value)\n i += name.length\n return stack.update(Caret.afterValue)\n }\n\n return false\n }\n\n function parseUnquotedKey(): boolean {\n let end = findNextDelimiter(true, i)\n\n if (end !== null) {\n // first, go back to prevent getting trailing whitespaces in the string\n while (isWhitespace(input, end - 1) && end > i) {\n end--\n }\n\n const symbol = input.substring(i, end)\n output.push(JSON.stringify(symbol))\n i = end\n\n if (input.charAt(i) === '\"') {\n // we had a missing start quote, but now we encountered the end quote, so we can skip that one\n i++\n }\n\n return stack.update(Caret.afterValue) // we do not have a state Caret.afterKey, therefore we use afterValue here\n }\n\n return false\n }\n\n function findNextDelimiter(isKey: boolean, start: number): number | null {\n // note that the symbol can end with whitespaces: we stop at the next delimiter\n // also, note that we allow strings to contain a slash / in order to support repairing regular expressions\n let j = start\n while (\n !input.isEnd(j) &&\n !isUnquotedStringDelimiter(input.charAt(j)) &&\n !isQuote(input.charAt(j)) &&\n (!isKey || input.charAt(j) !== ':')\n ) {\n j++\n }\n\n return j > i ? j : null\n }\n\n function prevNonWhitespaceIndex(start: number): number {\n let prev = start\n\n while (prev > 0 && isWhitespace(input, prev)) {\n prev--\n }\n\n return prev\n }\n\n function nextQuoteIsEndQuote(index: number): boolean {\n // precondition: input.charAt(index) is a quote. Peek past it: if nothing meaningful\n // follows, that quote is the true end and this one is embedded (e.g. `\"The TV is 72\"\"`)\n let next = index + 1\n while (!input.isEnd(next) && isWhitespace(input, next)) {\n next++\n }\n\n return input.isEnd(next) || isDelimiter(input.charAt(next))\n }\n\n function atEndOfNumber() {\n return input.isEnd(i) || isDelimiter(input.charAt(i)) || isWhitespace(input, i)\n }\n\n function throwInvalidCharacter(char: string) {\n throw new JSONRepairError(`Invalid character ${JSON.stringify(char)}`, i)\n }\n\n function throwUnexpectedCharacter() {\n throw new JSONRepairError(`Unexpected character ${JSON.stringify(input.charAt(i))}`, i)\n }\n\n function throwUnexpectedEnd() {\n throw new JSONRepairError('Unexpected end of json string', i)\n }\n\n function throwObjectKeyExpected() {\n throw new JSONRepairError('Object key expected', i)\n }\n\n function throwColonExpected() {\n throw new JSONRepairError('Colon expected', i)\n }\n\n function throwInvalidUnicodeCharacter() {\n const chars = input.substring(i, i + 6)\n throw new JSONRepairError(`Invalid unicode character \"${chars}\"`, i)\n }\n\n function atEndOfBlockComment(i: number) {\n return input.charAt(i) === '*' && input.charAt(i + 1) === '/'\n }\n\n return {\n transform,\n flush\n }\n}\n"],"mappings":"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","ignoreList":[]}

@@ -13,2 +13,3 @@ "use strict";

exports.isDoubleQuote = isDoubleQuote;
exports.isDoubleQuoteEntity = isDoubleQuoteEntity;
exports.isDoubleQuoteLike = isDoubleQuoteLike;

@@ -21,2 +22,3 @@ exports.isFunctionNameChar = isFunctionNameChar;

exports.isSingleQuote = isSingleQuote;
exports.isSingleQuoteEntity = isSingleQuoteEntity;
exports.isSingleQuoteLike = isSingleQuoteLike;

@@ -29,3 +31,4 @@ exports.isSpecialWhitespace = isSpecialWhitespace;

exports.isWhitespaceExceptNewline = isWhitespaceExceptNewline;
exports.regexUrlStart = exports.regexUrlChar = void 0;
exports.matchHtmlEntity = matchHtmlEntity;
exports.regexUrlStart = exports.regexUrlChar = exports.maxHtmlEntityLength = void 0;
exports.removeAtIndex = removeAtIndex;

@@ -183,4 +186,67 @@ exports.stripLastOccurrence = stripLastOccurrence;

}
const namedHtmlEntities = {
'&quot;': '"',
'&amp;': '&',
'&lt;': '<',
'&gt;': '>',
'&apos;': "'"
};
// the longest entity we need to recognize is a numeric one like "&#x10FFFF;"
// (10 chars), so a window of 12 characters is always enough
const maxHtmlEntityLength = exports.maxHtmlEntityLength = 12;
/**
* Try to match an HTML entity at the start of the given fragment. The fragment
* is a small slice of text that begins exactly at the candidate '&'. Returns the
* decoded character and the number of characters consumed, or null when there
* is no complete, valid entity (for example a truncated "&quot" without ';').
*/
function matchHtmlEntity(fragment) {
if (fragment.charAt(0) !== '&') {
return null;
}
const semicolon = fragment.indexOf(';');
if (semicolon === -1) {
return null;
}
const entity = fragment.substring(0, semicolon + 1);
const named = namedHtmlEntities[entity];
if (named !== undefined) {
return {
char: named,
length: entity.length
};
}
if (fragment.charAt(1) === '#') {
const body = fragment.substring(2, semicolon);
const hex = body.charAt(0) === 'x' || body.charAt(0) === 'X';
const digits = hex ? body.substring(1) : body;
if (digits.length > 0) {
const code = Number.parseInt(digits, hex ? 16 : 10);
if (!Number.isNaN(code) && code >= 0 && code <= 0x10ffff) {
return {
char: String.fromCodePoint(code),
length: entity.length
};
}
}
}
return null;
}
/**
* Test whether a matched HTML entity decodes to a double quote character
*/
function isDoubleQuoteEntity(match) {
return match !== null && match.char === '"';
}
/**
* Test whether a matched HTML entity decodes to a single quote character
*/
function isSingleQuoteEntity(match) {
return match !== null && match.char === "'";
}
/**
* Count the number of occurrences of a single character in a string

@@ -187,0 +253,0 @@ */

@@ -1,1 +0,1 @@

{"version":3,"file":"stringUtils.js","names":["codeSpace","codeNewline","codeTab","codeReturn","codeNonBreakingSpace","codeMongolianVowelSeparator","codeEnQuad","codeZeroWidthSpace","codeNarrowNoBreakSpace","codeMediumMathematicalSpace","codeIdeographicSpace","codeZeroWidthNoBreakSpace","isHex","char","test","isDigit","isValidStringCharacter","isDelimiter","includes","isFunctionNameCharStart","isFunctionNameChar","regexUrlStart","exports","regexUrlChar","isUnquotedStringDelimiter","isStartOfValue","isQuote","regexStartOfValue","isControlCharacter","isWhitespace","text","index","code","charCodeAt","isWhitespaceExceptNewline","isSpecialWhitespace","isDoubleQuoteLike","isSingleQuoteLike","isDoubleQuote","isSingleQuote","stripLastOccurrence","textToStrip","stripRemainingText","arguments","length","undefined","lastIndexOf","substring","insertBeforeLastWhitespace","textToInsert","removeAtIndex","start","count","endsWithCommaOrNewline","countOccurrences","i","charAt","isInsideUnclosedBracket","closeChar"],"sources":["../../../src/utils/stringUtils.ts"],"sourcesContent":["const codeSpace = 0x20 // \" \"\nconst codeNewline = 0xa // \"\\n\"\nconst codeTab = 0x9 // \"\\t\"\nconst codeReturn = 0xd // \"\\r\"\n\n// unicode spaces: https://jkorpela.fi/chars/spaces.html\nconst codeNonBreakingSpace = 0x00a0\nconst codeMongolianVowelSeparator = 0x180e\nconst codeEnQuad = 0x2000\nconst codeZeroWidthSpace = 0x200b\nconst codeNarrowNoBreakSpace = 0x202f\nconst codeMediumMathematicalSpace = 0x205f\nconst codeIdeographicSpace = 0x3000\nconst codeZeroWidthNoBreakSpace = 0xfeff\n\nexport function isHex(char: string): boolean {\n return /^[0-9A-Fa-f]$/.test(char)\n}\n\nexport function isDigit(char: string): boolean {\n return char >= '0' && char <= '9'\n}\n\nexport function isValidStringCharacter(char: string): boolean {\n // note that the valid range is between \\u{0020} and \\u{10ffff},\n // but in JavaScript it is not possible to create a code point larger than\n // \\u{10ffff}, so there is no need to test for that here.\n return char >= '\\u0020'\n}\n\nexport function isDelimiter(char: string): boolean {\n return ',:[]/{}()\\n+'.includes(char)\n}\n\nexport function isFunctionNameCharStart(char: string) {\n return (\n (char >= 'a' && char <= 'z') || (char >= 'A' && char <= 'Z') || char === '_' || char === '$'\n )\n}\n\nexport function isFunctionNameChar(char: string) {\n return (\n (char >= 'a' && char <= 'z') ||\n (char >= 'A' && char <= 'Z') ||\n char === '_' ||\n char === '$' ||\n (char >= '0' && char <= '9')\n )\n}\n\n// matches \"https://\" and other schemas\nexport const regexUrlStart = /^(http|https|ftp|mailto|file|data|irc):\\/\\/$/\n\n// matches all valid URL characters EXCEPT \"[\", \"]\", and \",\", since that are important JSON delimiters\nexport const regexUrlChar = /^[A-Za-z0-9-._~:/?#@!$&'()*+;=]$/\n\nexport function isUnquotedStringDelimiter(char: string): boolean {\n return ',[]/{}\\n+'.includes(char)\n}\n\nexport function isStartOfValue(char: string): boolean {\n return isQuote(char) || regexStartOfValue.test(char)\n}\n\n// alpha, number, minus, or opening bracket or brace\nconst regexStartOfValue = /^[[{\\w-]$/\n\nexport function isControlCharacter(char: string) {\n return char === '\\n' || char === '\\r' || char === '\\t' || char === '\\b' || char === '\\f'\n}\n\nexport interface Text {\n charCodeAt: (index: number) => number\n}\n\n/**\n * Check if the given character is a whitespace character like space, tab, or\n * newline\n */\nexport function isWhitespace(text: Text, index: number): boolean {\n const code = text.charCodeAt(index)\n\n return code === codeSpace || code === codeNewline || code === codeTab || code === codeReturn\n}\n\n/**\n * Check if the given character is a whitespace character like space or tab,\n * but NOT a newline\n */\nexport function isWhitespaceExceptNewline(text: Text, index: number): boolean {\n const code = text.charCodeAt(index)\n\n return code === codeSpace || code === codeTab || code === codeReturn\n}\n\n/**\n * Check if the given character is a special whitespace character, some\n * unicode variant\n */\nexport function isSpecialWhitespace(text: Text, index: number): boolean {\n const code = text.charCodeAt(index)\n\n return (\n code === codeNonBreakingSpace ||\n code === codeMongolianVowelSeparator ||\n (code >= codeEnQuad && code <= codeZeroWidthSpace) ||\n code === codeNarrowNoBreakSpace ||\n code === codeMediumMathematicalSpace ||\n code === codeIdeographicSpace ||\n code === codeZeroWidthNoBreakSpace\n )\n}\n\n/**\n * Test whether the given character is a quote or double quote character.\n * Also tests for special variants of quotes.\n */\nexport function isQuote(char: string): boolean {\n // the first check double quotes, since that occurs most often\n return isDoubleQuoteLike(char) || isSingleQuoteLike(char)\n}\n\n/**\n * Test whether the given character is a double quote character.\n * Also tests for special variants of double quotes.\n */\nexport function isDoubleQuoteLike(char: string): boolean {\n return char === '\"' || char === '\\u201c' || char === '\\u201d'\n}\n\n/**\n * Test whether the given character is a double quote character.\n * Does NOT test for special variants of double quotes.\n */\nexport function isDoubleQuote(char: string): boolean {\n return char === '\"'\n}\n\n/**\n * Test whether the given character is a single quote character.\n * Also tests for special variants of single quotes.\n */\nexport function isSingleQuoteLike(char: string): boolean {\n return (\n char === \"'\" || char === '\\u2018' || char === '\\u2019' || char === '\\u0060' || char === '\\u00b4'\n )\n}\n\n/**\n * Test whether the given character is a single quote character.\n * Does NOT test for special variants of single quotes.\n */\nexport function isSingleQuote(char: string): boolean {\n return char === \"'\"\n}\n\n/**\n * Strip last occurrence of textToStrip from text\n */\nexport function stripLastOccurrence(\n text: string,\n textToStrip: string,\n stripRemainingText = false\n): string {\n const index = text.lastIndexOf(textToStrip)\n return index !== -1\n ? text.substring(0, index) + (stripRemainingText ? '' : text.substring(index + 1))\n : text\n}\n\nexport function insertBeforeLastWhitespace(text: string, textToInsert: string): string {\n let index = text.length\n\n if (!isWhitespace(text, index - 1)) {\n // no trailing whitespaces\n return text + textToInsert\n }\n\n while (isWhitespace(text, index - 1)) {\n index--\n }\n\n return text.substring(0, index) + textToInsert + text.substring(index)\n}\n\nexport function removeAtIndex(text: string, start: number, count: number) {\n return text.substring(0, start) + text.substring(start + count)\n}\n\n/**\n * Test whether a string ends with a newline or comma character and optional whitespace\n */\nexport function endsWithCommaOrNewline(text: string): boolean {\n return /[,\\n][ \\t\\r]*$/.test(text)\n}\n\n/**\n * Count the number of occurrences of a single character in a string\n */\nexport function countOccurrences(text: string, char: string): number {\n let count = 0\n for (let i = 0; i < text.length; i++) {\n if (text.charAt(i) === char) {\n count++\n }\n }\n return count\n}\n\n/**\n * Test whether `closeChar` is a closing bracket and `text` still contains an\n * unmatched opening bracket of the same kind. This indicates that the end of\n * `text` is located inside the brackets, for example the quote in\n * `\"a (b\") c\"` is followed by `)` while `(` is still unclosed.\n *\n * Note that the (potentially expensive) counting is only performed when\n * `closeChar` actually is a closing bracket.\n */\nexport function isInsideUnclosedBracket(text: string, closeChar: string): boolean {\n switch (closeChar) {\n case ')':\n return countOccurrences(text, '(') > countOccurrences(text, ')')\n case ']':\n return countOccurrences(text, '[') > countOccurrences(text, ']')\n case '}':\n return countOccurrences(text, '{') > countOccurrences(text, '}')\n default:\n return false\n }\n}\n"],"mappings":"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","ignoreList":[]}
{"version":3,"file":"stringUtils.js","names":["codeSpace","codeNewline","codeTab","codeReturn","codeNonBreakingSpace","codeMongolianVowelSeparator","codeEnQuad","codeZeroWidthSpace","codeNarrowNoBreakSpace","codeMediumMathematicalSpace","codeIdeographicSpace","codeZeroWidthNoBreakSpace","isHex","char","test","isDigit","isValidStringCharacter","isDelimiter","includes","isFunctionNameCharStart","isFunctionNameChar","regexUrlStart","exports","regexUrlChar","isUnquotedStringDelimiter","isStartOfValue","isQuote","regexStartOfValue","isControlCharacter","isWhitespace","text","index","code","charCodeAt","isWhitespaceExceptNewline","isSpecialWhitespace","isDoubleQuoteLike","isSingleQuoteLike","isDoubleQuote","isSingleQuote","stripLastOccurrence","textToStrip","stripRemainingText","arguments","length","undefined","lastIndexOf","substring","insertBeforeLastWhitespace","textToInsert","removeAtIndex","start","count","endsWithCommaOrNewline","namedHtmlEntities","maxHtmlEntityLength","matchHtmlEntity","fragment","charAt","semicolon","indexOf","entity","named","body","hex","digits","Number","parseInt","isNaN","String","fromCodePoint","isDoubleQuoteEntity","match","isSingleQuoteEntity","countOccurrences","i","isInsideUnclosedBracket","closeChar"],"sources":["../../../src/utils/stringUtils.ts"],"sourcesContent":["const codeSpace = 0x20 // \" \"\nconst codeNewline = 0xa // \"\\n\"\nconst codeTab = 0x9 // \"\\t\"\nconst codeReturn = 0xd // \"\\r\"\n\n// unicode spaces: https://jkorpela.fi/chars/spaces.html\nconst codeNonBreakingSpace = 0x00a0\nconst codeMongolianVowelSeparator = 0x180e\nconst codeEnQuad = 0x2000\nconst codeZeroWidthSpace = 0x200b\nconst codeNarrowNoBreakSpace = 0x202f\nconst codeMediumMathematicalSpace = 0x205f\nconst codeIdeographicSpace = 0x3000\nconst codeZeroWidthNoBreakSpace = 0xfeff\n\nexport function isHex(char: string): boolean {\n return /^[0-9A-Fa-f]$/.test(char)\n}\n\nexport function isDigit(char: string): boolean {\n return char >= '0' && char <= '9'\n}\n\nexport function isValidStringCharacter(char: string): boolean {\n // note that the valid range is between \\u{0020} and \\u{10ffff},\n // but in JavaScript it is not possible to create a code point larger than\n // \\u{10ffff}, so there is no need to test for that here.\n return char >= '\\u0020'\n}\n\nexport function isDelimiter(char: string): boolean {\n return ',:[]/{}()\\n+'.includes(char)\n}\n\nexport function isFunctionNameCharStart(char: string) {\n return (\n (char >= 'a' && char <= 'z') || (char >= 'A' && char <= 'Z') || char === '_' || char === '$'\n )\n}\n\nexport function isFunctionNameChar(char: string) {\n return (\n (char >= 'a' && char <= 'z') ||\n (char >= 'A' && char <= 'Z') ||\n char === '_' ||\n char === '$' ||\n (char >= '0' && char <= '9')\n )\n}\n\n// matches \"https://\" and other schemas\nexport const regexUrlStart = /^(http|https|ftp|mailto|file|data|irc):\\/\\/$/\n\n// matches all valid URL characters EXCEPT \"[\", \"]\", and \",\", since that are important JSON delimiters\nexport const regexUrlChar = /^[A-Za-z0-9-._~:/?#@!$&'()*+;=]$/\n\nexport function isUnquotedStringDelimiter(char: string): boolean {\n return ',[]/{}\\n+'.includes(char)\n}\n\nexport function isStartOfValue(char: string): boolean {\n return isQuote(char) || regexStartOfValue.test(char)\n}\n\n// alpha, number, minus, or opening bracket or brace\nconst regexStartOfValue = /^[[{\\w-]$/\n\nexport function isControlCharacter(char: string) {\n return char === '\\n' || char === '\\r' || char === '\\t' || char === '\\b' || char === '\\f'\n}\n\nexport interface Text {\n charCodeAt: (index: number) => number\n}\n\n/**\n * Check if the given character is a whitespace character like space, tab, or\n * newline\n */\nexport function isWhitespace(text: Text, index: number): boolean {\n const code = text.charCodeAt(index)\n\n return code === codeSpace || code === codeNewline || code === codeTab || code === codeReturn\n}\n\n/**\n * Check if the given character is a whitespace character like space or tab,\n * but NOT a newline\n */\nexport function isWhitespaceExceptNewline(text: Text, index: number): boolean {\n const code = text.charCodeAt(index)\n\n return code === codeSpace || code === codeTab || code === codeReturn\n}\n\n/**\n * Check if the given character is a special whitespace character, some\n * unicode variant\n */\nexport function isSpecialWhitespace(text: Text, index: number): boolean {\n const code = text.charCodeAt(index)\n\n return (\n code === codeNonBreakingSpace ||\n code === codeMongolianVowelSeparator ||\n (code >= codeEnQuad && code <= codeZeroWidthSpace) ||\n code === codeNarrowNoBreakSpace ||\n code === codeMediumMathematicalSpace ||\n code === codeIdeographicSpace ||\n code === codeZeroWidthNoBreakSpace\n )\n}\n\n/**\n * Test whether the given character is a quote or double quote character.\n * Also tests for special variants of quotes.\n */\nexport function isQuote(char: string): boolean {\n // the first check double quotes, since that occurs most often\n return isDoubleQuoteLike(char) || isSingleQuoteLike(char)\n}\n\n/**\n * Test whether the given character is a double quote character.\n * Also tests for special variants of double quotes.\n */\nexport function isDoubleQuoteLike(char: string): boolean {\n return char === '\"' || char === '\\u201c' || char === '\\u201d'\n}\n\n/**\n * Test whether the given character is a double quote character.\n * Does NOT test for special variants of double quotes.\n */\nexport function isDoubleQuote(char: string): boolean {\n return char === '\"'\n}\n\n/**\n * Test whether the given character is a single quote character.\n * Also tests for special variants of single quotes.\n */\nexport function isSingleQuoteLike(char: string): boolean {\n return (\n char === \"'\" || char === '\\u2018' || char === '\\u2019' || char === '\\u0060' || char === '\\u00b4'\n )\n}\n\n/**\n * Test whether the given character is a single quote character.\n * Does NOT test for special variants of single quotes.\n */\nexport function isSingleQuote(char: string): boolean {\n return char === \"'\"\n}\n\n/**\n * Strip last occurrence of textToStrip from text\n */\nexport function stripLastOccurrence(\n text: string,\n textToStrip: string,\n stripRemainingText = false\n): string {\n const index = text.lastIndexOf(textToStrip)\n return index !== -1\n ? text.substring(0, index) + (stripRemainingText ? '' : text.substring(index + 1))\n : text\n}\n\nexport function insertBeforeLastWhitespace(text: string, textToInsert: string): string {\n let index = text.length\n\n if (!isWhitespace(text, index - 1)) {\n // no trailing whitespaces\n return text + textToInsert\n }\n\n while (isWhitespace(text, index - 1)) {\n index--\n }\n\n return text.substring(0, index) + textToInsert + text.substring(index)\n}\n\nexport function removeAtIndex(text: string, start: number, count: number) {\n return text.substring(0, start) + text.substring(start + count)\n}\n\n/**\n * Test whether a string ends with a newline or comma character and optional whitespace\n */\nexport function endsWithCommaOrNewline(text: string): boolean {\n return /[,\\n][ \\t\\r]*$/.test(text)\n}\n\nconst namedHtmlEntities: { [key: string]: string } = {\n '&quot;': '\"',\n '&amp;': '&',\n '&lt;': '<',\n '&gt;': '>',\n '&apos;': \"'\"\n}\n\n// the longest entity we need to recognize is a numeric one like \"&#x10FFFF;\"\n// (10 chars), so a window of 12 characters is always enough\nexport const maxHtmlEntityLength = 12\n\nexport interface HtmlEntityMatch {\n char: string // the decoded character\n length: number // number of source characters consumed, including & and ;\n}\n\n/**\n * Try to match an HTML entity at the start of the given fragment. The fragment\n * is a small slice of text that begins exactly at the candidate '&'. Returns the\n * decoded character and the number of characters consumed, or null when there\n * is no complete, valid entity (for example a truncated \"&quot\" without ';').\n */\nexport function matchHtmlEntity(fragment: string): HtmlEntityMatch | null {\n if (fragment.charAt(0) !== '&') {\n return null\n }\n\n const semicolon = fragment.indexOf(';')\n if (semicolon === -1) {\n return null\n }\n\n const entity = fragment.substring(0, semicolon + 1)\n const named = namedHtmlEntities[entity]\n if (named !== undefined) {\n return { char: named, length: entity.length }\n }\n\n if (fragment.charAt(1) === '#') {\n const body = fragment.substring(2, semicolon)\n const hex = body.charAt(0) === 'x' || body.charAt(0) === 'X'\n const digits = hex ? body.substring(1) : body\n if (digits.length > 0) {\n const code = Number.parseInt(digits, hex ? 16 : 10)\n if (!Number.isNaN(code) && code >= 0 && code <= 0x10ffff) {\n return { char: String.fromCodePoint(code), length: entity.length }\n }\n }\n }\n\n return null\n}\n\n/**\n * Test whether a matched HTML entity decodes to a double quote character\n */\nexport function isDoubleQuoteEntity(match: HtmlEntityMatch | null): boolean {\n return match !== null && match.char === '\"'\n}\n\n/**\n * Test whether a matched HTML entity decodes to a single quote character\n */\nexport function isSingleQuoteEntity(match: HtmlEntityMatch | null): boolean {\n return match !== null && match.char === \"'\"\n}\n\n/**\n * Count the number of occurrences of a single character in a string\n */\nexport function countOccurrences(text: string, char: string): number {\n let count = 0\n for (let i = 0; i < text.length; i++) {\n if (text.charAt(i) === char) {\n count++\n }\n }\n return count\n}\n\n/**\n * Test whether `closeChar` is a closing bracket and `text` still contains an\n * unmatched opening bracket of the same kind. This indicates that the end of\n * `text` is located inside the brackets, for example the quote in\n * `\"a (b\") c\"` is followed by `)` while `(` is still unclosed.\n *\n * Note that the (potentially expensive) counting is only performed when\n * `closeChar` actually is a closing bracket.\n */\nexport function isInsideUnclosedBracket(text: string, closeChar: string): boolean {\n switch (closeChar) {\n case ')':\n return countOccurrences(text, '(') > countOccurrences(text, ')')\n case ']':\n return countOccurrences(text, '[') > countOccurrences(text, ']')\n case '}':\n return countOccurrences(text, '{') > countOccurrences(text, '}')\n default:\n return false\n }\n}\n"],"mappings":"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","ignoreList":[]}
import { JSONRepairError } from '../utils/JSONRepairError.js';
import { endsWithCommaOrNewline, insertBeforeLastWhitespace, isControlCharacter, isDelimiter, isDigit, isDoubleQuote, isDoubleQuoteLike, isFunctionNameChar, isFunctionNameCharStart, isHex, isInsideUnclosedBracket, isQuote, isSingleQuote, isSingleQuoteLike, isSpecialWhitespace, isStartOfValue, isUnquotedStringDelimiter, isValidStringCharacter, isWhitespace, isWhitespaceExceptNewline, regexUrlChar, regexUrlStart, removeAtIndex, stripLastOccurrence } from '../utils/stringUtils.js';
import { endsWithCommaOrNewline, insertBeforeLastWhitespace, isControlCharacter, isDelimiter, isDigit, isDoubleQuote, isDoubleQuoteEntity, isDoubleQuoteLike, isFunctionNameChar, isFunctionNameCharStart, isHex, isInsideUnclosedBracket, isQuote, isSingleQuote, isSingleQuoteEntity, isSingleQuoteLike, isSpecialWhitespace, isStartOfValue, isUnquotedStringDelimiter, isValidStringCharacter, isWhitespace, isWhitespaceExceptNewline, matchHtmlEntity, maxHtmlEntityLength, regexUrlChar, regexUrlStart, removeAtIndex, stripLastOccurrence } from '../utils/stringUtils.js';
const controlCharacters = {

@@ -364,9 +364,16 @@ '\b': '\\b',

let stopAtIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : -1;
let skipEscapeChars = text[i] === '\\';
const skipEscapeChars = text[i] === '\\';
if (skipEscapeChars) {
// repair: remove the first escape character
i++;
skipEscapeChars = true;
if (!isQuote(text[i])) {
throwUnexpectedCharacter();
}
}
if (isQuote(text[i])) {
// a string can be opened by a quote character, or by an HTML entity that
// decodes to a quote (like &quot;) when repairing HTML-encoded JSON
const openEntity = text[i] === '&' ? matchHtmlEntity(text.slice(i, i + maxHtmlEntityLength)) : null;
const openedByEntity = isDoubleQuoteEntity(openEntity) || isSingleQuoteEntity(openEntity);
if (isQuote(text[i]) || openedByEntity) {
// double quotes are correct JSON,

@@ -380,3 +387,4 @@ // single quotes come from JavaScript for example, we assume it will have a correct single end quote too

let str = '"';
i++;
// when opened by an entity, skip past the whole entity; otherwise skip the quote
i += openedByEntity && openEntity ? openEntity.length : 1;
while (true) {

@@ -407,3 +415,8 @@ if (i >= text.length) {

}
if (isEndQuote(text[i])) {
// inside an entity-opened string a '&' is an entity; it is the end quote
// when it decodes to the opening quote
const entity = openedByEntity && text[i] === '&' ? matchHtmlEntity(text.slice(i, i + maxHtmlEntityLength)) : null;
const isEnd = entity && openEntity ? entity.char === openEntity.char : isEndQuote(text[i]);
if (isEnd) {
// end quote

@@ -414,3 +427,3 @@ // let us check what is before and after the quote to verify whether this is a legit end quote

str += '"';
i++;
i += entity ? entity.length : 1;
output += str;

@@ -427,2 +440,5 @@ parseWhitespaceAndSkipComments(false);

}
if (text[i] === '\\') {
throwUnexpectedCharacter();
}
const iPrevChar = prevNonWhitespaceIndex(iQuote - 1);

@@ -449,3 +465,3 @@ const prevChar = text.charAt(iPrevChar);

output = output.substring(0, oBefore);
i = iQuote + 1;
i = iQuote + (entity ? entity.length : 1);

@@ -471,2 +487,14 @@ // repair unescaped quote

return true;
} else if (entity) {
// decode an HTML entity inside the string as content
const char = entity.char;
if (char === '"') {
// repair unescaped double quote
str += '\\"';
} else if (isControlCharacter(char)) {
str += controlCharacters[char];
} else {
str += char;
}
i += entity.length;
} else if (text[i] === '\\') {

@@ -473,0 +501,0 @@ // handle escaped content like \n or \u2605

@@ -1,1 +0,1 @@

{"version":3,"file":"jsonrepair.js","names":["JSONRepairError","endsWithCommaOrNewline","insertBeforeLastWhitespace","isControlCharacter","isDelimiter","isDigit","isDoubleQuote","isDoubleQuoteLike","isFunctionNameChar","isFunctionNameCharStart","isHex","isInsideUnclosedBracket","isQuote","isSingleQuote","isSingleQuoteLike","isSpecialWhitespace","isStartOfValue","isUnquotedStringDelimiter","isValidStringCharacter","isWhitespace","isWhitespaceExceptNewline","regexUrlChar","regexUrlStart","removeAtIndex","stripLastOccurrence","controlCharacters","escapeCharacters","b","f","n","r","t","jsonrepair","text","i","output","parseMarkdownCodeBlock","processed","parseValue","throwUnexpectedEnd","processedComma","parseCharacter","parseWhitespaceAndSkipComments","parseNewlineDelimitedJSON","length","throwUnexpectedCharacter","parseObject","parseArray","parseString","parseNumber","parseKeywords","parseUnquotedString","parseRegex","skipNewline","arguments","undefined","start","changed","parseWhitespace","parseComment","_isWhiteSpace","whitespace","atEndOfBlockComment","blocks","skipMarkdownCodeBlock","block","end","slice","char","skipCharacter","skipEscapeCharacter","skipEllipsis","initial","processedKey","throwObjectKeyExpected","processedColon","truncatedText","throwColonExpected","processedValue","stopAtDelimiter","stopAtIndex","skipEscapeChars","isEndQuote","iBefore","oBefore","str","iPrev","prevNonWhitespaceIndex","charAt","substring","iQuote","oQuote","nextQuoteIsEndQuote","parseConcatenatedString","iPrevChar","prevChar","test","escapeChar","j","throwInvalidUnicodeCharacter","throwInvalidCharacter","parsedStr","num","invalid","atEndOfNumber","parseKeyword","name","value","isKey","symbol","JSON","stringify","prev","index","next","chars"],"sources":["../../../src/regular/jsonrepair.ts"],"sourcesContent":["import { JSONRepairError } from '../utils/JSONRepairError.js'\nimport {\n endsWithCommaOrNewline,\n insertBeforeLastWhitespace,\n isControlCharacter,\n isDelimiter,\n isDigit,\n isDoubleQuote,\n isDoubleQuoteLike,\n isFunctionNameChar,\n isFunctionNameCharStart,\n isHex,\n isInsideUnclosedBracket,\n isQuote,\n isSingleQuote,\n isSingleQuoteLike,\n isSpecialWhitespace,\n isStartOfValue,\n isUnquotedStringDelimiter,\n isValidStringCharacter,\n isWhitespace,\n isWhitespaceExceptNewline,\n regexUrlChar,\n regexUrlStart,\n removeAtIndex,\n stripLastOccurrence\n} from '../utils/stringUtils.js'\n\nconst controlCharacters: { [key: string]: string } = {\n '\\b': '\\\\b',\n '\\f': '\\\\f',\n '\\n': '\\\\n',\n '\\r': '\\\\r',\n '\\t': '\\\\t'\n}\n\n// map with all escape characters\nconst escapeCharacters: { [key: string]: string } = {\n '\"': '\"',\n '\\\\': '\\\\',\n '/': '/',\n b: '\\b',\n f: '\\f',\n n: '\\n',\n r: '\\r',\n t: '\\t'\n // note that \\u is handled separately in parseString()\n}\n\n/**\n * Repair a string containing an invalid JSON document.\n * For example changes JavaScript notation into JSON notation.\n *\n * Example:\n *\n * try {\n * const json = \"{name: 'John'}\"\n * const repaired = jsonrepair(json)\n * console.log(repaired)\n * // '{\"name\": \"John\"}'\n * } catch (err) {\n * console.error(err)\n * }\n *\n */\nexport function jsonrepair(text: string): string {\n let i = 0 // current index in text\n let output = '' // generated output\n\n parseMarkdownCodeBlock(['```', '[```', '{```'])\n\n const processed = parseValue()\n if (!processed) {\n throwUnexpectedEnd()\n }\n\n parseMarkdownCodeBlock(['```', '```]', '```}'])\n\n const processedComma = parseCharacter(',')\n if (processedComma) {\n parseWhitespaceAndSkipComments()\n }\n\n if (isStartOfValue(text[i]) && endsWithCommaOrNewline(output)) {\n // start of a new value after end of the root level object: looks like\n // newline delimited JSON -> turn into a root level array\n if (!processedComma) {\n // repair missing comma\n output = insertBeforeLastWhitespace(output, ',')\n }\n\n parseNewlineDelimitedJSON()\n } else if (processedComma) {\n // repair: remove trailing comma\n output = stripLastOccurrence(output, ',')\n }\n\n // repair redundant end quotes\n while (text[i] === '}' || text[i] === ']') {\n i++\n parseWhitespaceAndSkipComments()\n }\n\n if (i >= text.length) {\n // reached the end of the document properly\n return output\n }\n\n throwUnexpectedCharacter()\n\n function parseValue(): boolean {\n parseWhitespaceAndSkipComments()\n const processed =\n parseObject() ||\n parseArray() ||\n parseString() ||\n parseNumber() ||\n parseKeywords() ||\n parseUnquotedString(false) ||\n parseRegex()\n parseWhitespaceAndSkipComments()\n\n return processed\n }\n\n function parseWhitespaceAndSkipComments(skipNewline = true): boolean {\n const start = i\n\n let changed = parseWhitespace(skipNewline)\n do {\n changed = parseComment()\n if (changed) {\n changed = parseWhitespace(skipNewline)\n }\n } while (changed)\n\n return i > start\n }\n\n function parseWhitespace(skipNewline: boolean): boolean {\n const _isWhiteSpace = skipNewline ? isWhitespace : isWhitespaceExceptNewline\n let whitespace = ''\n\n while (true) {\n if (_isWhiteSpace(text, i)) {\n whitespace += text[i]\n i++\n } else if (isSpecialWhitespace(text, i)) {\n // repair special whitespace\n whitespace += ' '\n i++\n } else {\n break\n }\n }\n\n if (whitespace.length > 0) {\n output += whitespace\n return true\n }\n\n return false\n }\n\n function parseComment(): boolean {\n // find a block comment '/* ... */'\n if (text[i] === '/' && text[i + 1] === '*') {\n // repair block comment by skipping it\n while (i < text.length && !atEndOfBlockComment(text, i)) {\n i++\n }\n i += 2\n\n return true\n }\n\n // find a line comment '// ...'\n if (text[i] === '/' && text[i + 1] === '/') {\n // repair line comment by skipping it\n while (i < text.length && text[i] !== '\\n') {\n i++\n }\n\n return true\n }\n\n return false\n }\n\n function parseMarkdownCodeBlock(blocks: string[]): boolean {\n // find and skip over a Markdown fenced code block:\n // ``` ... ```\n // or\n // ```json ... ```\n if (skipMarkdownCodeBlock(blocks)) {\n if (isFunctionNameCharStart(text[i])) {\n // strip the optional language specifier like \"json\"\n while (i < text.length && isFunctionNameChar(text[i])) {\n i++\n }\n }\n\n parseWhitespaceAndSkipComments()\n\n return true\n }\n\n return false\n }\n\n function skipMarkdownCodeBlock(blocks: string[]): boolean {\n parseWhitespace(true)\n\n for (const block of blocks) {\n const end = i + block.length\n if (text.slice(i, end) === block) {\n i = end\n return true\n }\n }\n\n return false\n }\n\n function parseCharacter(char: string): boolean {\n if (text[i] === char) {\n output += text[i]\n i++\n return true\n }\n\n return false\n }\n\n function skipCharacter(char: string): boolean {\n if (text[i] === char) {\n i++\n return true\n }\n\n return false\n }\n\n function skipEscapeCharacter(): boolean {\n return skipCharacter('\\\\')\n }\n\n /**\n * Skip ellipsis like \"[1,2,3,...]\" or \"[1,2,3,...,9]\" or \"[...,7,8,9]\"\n * or a similar construct in objects.\n */\n function skipEllipsis(): boolean {\n parseWhitespaceAndSkipComments()\n\n if (text[i] === '.' && text[i + 1] === '.' && text[i + 2] === '.') {\n // repair: remove the ellipsis (three dots) and optionally a comma\n i += 3\n parseWhitespaceAndSkipComments()\n skipCharacter(',')\n\n return true\n }\n\n return false\n }\n\n /**\n * Parse an object like '{\"key\": \"value\"}'\n */\n function parseObject(): boolean {\n if (text[i] === '{') {\n output += '{'\n i++\n parseWhitespaceAndSkipComments()\n\n // repair: skip leading comma like in {, message: \"hi\"}\n if (skipCharacter(',')) {\n parseWhitespaceAndSkipComments()\n }\n\n let initial = true\n while (i < text.length && text[i] !== '}') {\n let processedComma: boolean\n if (!initial) {\n processedComma = parseCharacter(',')\n if (!processedComma) {\n // repair missing comma\n output = insertBeforeLastWhitespace(output, ',')\n }\n parseWhitespaceAndSkipComments()\n } else {\n processedComma = true\n }\n\n skipEllipsis()\n\n const processedKey = parseString() || parseUnquotedString(true)\n if (!processedKey) {\n if (\n text[i] === '}' ||\n text[i] === '{' ||\n text[i] === ']' ||\n text[i] === '[' ||\n text[i] === undefined\n ) {\n // repair trailing comma\n if (!initial) {\n output = stripLastOccurrence(output, ',')\n }\n } else {\n throwObjectKeyExpected()\n }\n break\n }\n\n parseWhitespaceAndSkipComments()\n const processedColon = parseCharacter(':')\n const truncatedText = i >= text.length\n if (!processedColon) {\n if (isStartOfValue(text[i]) || truncatedText) {\n // repair missing colon\n output = insertBeforeLastWhitespace(output, ':')\n } else {\n throwColonExpected()\n }\n }\n const processedValue = parseValue()\n if (!processedValue) {\n if (processedColon || truncatedText) {\n // repair missing object value\n output += 'null'\n } else {\n throwColonExpected()\n }\n }\n\n initial = false\n }\n\n if (text[i] === '}') {\n output += '}'\n i++\n } else {\n // repair missing end bracket\n output = insertBeforeLastWhitespace(output, '}')\n }\n\n return true\n }\n\n return false\n }\n\n /**\n * Parse an array like '[\"item1\", \"item2\", ...]'\n */\n function parseArray(): boolean {\n if (text[i] === '[') {\n output += '['\n i++\n parseWhitespaceAndSkipComments()\n\n // repair: skip leading comma like in [,1,2,3]\n if (skipCharacter(',')) {\n parseWhitespaceAndSkipComments()\n }\n\n let initial = true\n while (i < text.length && text[i] !== ']') {\n if (!initial) {\n const processedComma = parseCharacter(',')\n if (!processedComma) {\n // repair missing comma\n output = insertBeforeLastWhitespace(output, ',')\n }\n }\n\n skipEllipsis()\n\n const processedValue = parseValue()\n if (!processedValue) {\n // repair trailing comma\n if (!initial) {\n output = stripLastOccurrence(output, ',')\n }\n break\n }\n\n initial = false\n }\n\n if (text[i] === ']') {\n output += ']'\n i++\n } else {\n // repair missing closing array bracket\n output = insertBeforeLastWhitespace(output, ']')\n }\n\n return true\n }\n\n return false\n }\n\n /**\n * Parse and repair Newline Delimited JSON (NDJSON):\n * multiple JSON objects separated by a newline character\n */\n function parseNewlineDelimitedJSON() {\n // repair NDJSON\n let initial = true\n let processedValue = true\n while (processedValue) {\n if (!initial) {\n // parse optional comma, insert when missing\n const processedComma = parseCharacter(',')\n if (!processedComma) {\n // repair: add missing comma\n output = insertBeforeLastWhitespace(output, ',')\n }\n } else {\n initial = false\n }\n\n processedValue = parseValue()\n }\n\n if (!processedValue) {\n // repair: remove trailing comma\n output = stripLastOccurrence(output, ',')\n }\n\n // repair: wrap the output inside array brackets\n output = `[\\n${output}\\n]`\n }\n\n /**\n * Parse a string enclosed by double quotes \"...\". Can contain escaped quotes\n * Repair strings enclosed in single quotes or special quotes\n * Repair an escaped string\n *\n * The function can run in two stages:\n * - First, it assumes the string has a valid end quote\n * - If it turns out that the string does not have a valid end quote followed\n * by a delimiter (which should be the case), the function runs again in a\n * more conservative way, stopping the string at the first next delimiter\n * and fixing the string by inserting a quote there, or stopping at a\n * stop index detected in the first iteration.\n */\n function parseString(stopAtDelimiter = false, stopAtIndex = -1): boolean {\n let skipEscapeChars = text[i] === '\\\\'\n if (skipEscapeChars) {\n // repair: remove the first escape character\n i++\n skipEscapeChars = true\n }\n\n if (isQuote(text[i])) {\n // double quotes are correct JSON,\n // single quotes come from JavaScript for example, we assume it will have a correct single end quote too\n // otherwise, we will match any double-quote-like start with a double-quote-like end,\n // or any single-quote-like start with a single-quote-like end\n const isEndQuote = isDoubleQuote(text[i])\n ? isDoubleQuote\n : isSingleQuote(text[i])\n ? isSingleQuote\n : isSingleQuoteLike(text[i])\n ? isSingleQuoteLike\n : isDoubleQuoteLike\n\n const iBefore = i\n const oBefore = output.length\n\n let str = '\"'\n i++\n\n while (true) {\n if (i >= text.length) {\n // end of text, we are missing an end quote\n\n const iPrev = prevNonWhitespaceIndex(i - 1)\n if (!stopAtDelimiter && isDelimiter(text.charAt(iPrev))) {\n // if the text ends with a delimiter, like [\"hello],\n // so the missing end quote should be inserted before this delimiter\n // retry parsing the string, stopping at the first next delimiter\n i = iBefore\n output = output.substring(0, oBefore)\n\n return parseString(true)\n }\n\n // repair missing quote\n str = insertBeforeLastWhitespace(str, '\"')\n output += str\n\n return true\n }\n\n if (i === stopAtIndex) {\n // use the stop index detected in the first iteration, and repair end quote\n str = insertBeforeLastWhitespace(str, '\"')\n output += str\n\n return true\n }\n\n if (isEndQuote(text[i])) {\n // end quote\n // let us check what is before and after the quote to verify whether this is a legit end quote\n const iQuote = i\n const oQuote = str.length\n str += '\"'\n i++\n output += str\n\n parseWhitespaceAndSkipComments(false)\n\n if (\n stopAtDelimiter ||\n i >= text.length ||\n (isDelimiter(text[i]) &&\n // only count the brackets inside the string when actually needed,\n // i.e. when the quote is directly followed by a closing bracket\n !isInsideUnclosedBracket(str, text[i])) ||\n (isQuote(text[i]) && !nextQuoteIsEndQuote(i)) ||\n isDigit(text[i])\n ) {\n // The quote is followed by the end of the text, a delimiter,\n // or a next value. So the quote is indeed the end of the string.\n parseConcatenatedString()\n\n return true\n }\n\n const iPrevChar = prevNonWhitespaceIndex(iQuote - 1)\n const prevChar = text.charAt(iPrevChar)\n\n if (prevChar === ',') {\n // A comma followed by a quote, like '{\"a\":\"b,c,\"d\":\"e\"}'.\n // We assume that the quote is a start quote, and that the end quote\n // should have been located right before the comma but is missing.\n i = iBefore\n output = output.substring(0, oBefore)\n\n return parseString(false, iPrevChar)\n }\n\n if (isDelimiter(prevChar)) {\n // This is not the right end quote: it is preceded by a delimiter,\n // and NOT followed by a delimiter. So, there is an end quote missing\n // parse the string again and then stop at the first next delimiter\n i = iBefore\n output = output.substring(0, oBefore)\n\n return parseString(true)\n }\n\n // revert to right after the quote but before any whitespace, and continue parsing the string\n output = output.substring(0, oBefore)\n i = iQuote + 1\n\n // repair unescaped quote\n str = `${str.substring(0, oQuote)}\\\\${str.substring(oQuote)}`\n } else if (stopAtDelimiter && isUnquotedStringDelimiter(text[i])) {\n // we're in the mode to stop the string at the first delimiter\n // because there is an end quote missing\n\n // test start of an url like \"https://...\" (this would be parsed as a comment)\n if (text[i - 1] === ':' && regexUrlStart.test(text.substring(iBefore + 1, i + 2))) {\n while (i < text.length && regexUrlChar.test(text[i])) {\n str += text[i]\n i++\n }\n }\n\n // repair missing quote\n str = insertBeforeLastWhitespace(str, '\"')\n output += str\n\n parseConcatenatedString()\n\n return true\n } else if (text[i] === '\\\\') {\n // handle escaped content like \\n or \\u2605\n const char = text.charAt(i + 1)\n const escapeChar = escapeCharacters[char]\n if (escapeChar !== undefined) {\n str += text.slice(i, i + 2)\n i += 2\n } else if (char === 'u') {\n let j = 2\n while (j < 6 && isHex(text[i + j])) {\n j++\n }\n\n if (j === 6) {\n str += text.slice(i, i + 6)\n i += 6\n } else if (i + j >= text.length) {\n // repair invalid or truncated unicode char at the end of the text\n // by removing the unicode char and ending the string here\n i = text.length\n } else {\n throwInvalidUnicodeCharacter()\n }\n } else if (char === '\\n') {\n // repair a backslash escaped newline (like in Bash scripts)\n str += '\\\\n'\n i += 2\n } else {\n // repair invalid escape character: remove it\n str += char\n i += 2\n }\n } else {\n // handle regular characters\n const char = text.charAt(i)\n\n if (char === '\"' && text[i - 1] !== '\\\\') {\n // repair unescaped double quote\n str += `\\\\${char}`\n i++\n } else if (isControlCharacter(char)) {\n // unescaped control character\n str += controlCharacters[char]\n i++\n } else {\n if (!isValidStringCharacter(char)) {\n throwInvalidCharacter(char)\n }\n str += char\n i++\n }\n }\n\n if (skipEscapeChars) {\n // repair: skipped escape character (nothing to do)\n skipEscapeCharacter()\n }\n }\n }\n\n return false\n }\n\n /**\n * Repair concatenated strings like \"hello\" + \"world\", change this into \"helloworld\"\n */\n function parseConcatenatedString(): boolean {\n let processed = false\n\n parseWhitespaceAndSkipComments()\n while (text[i] === '+') {\n processed = true\n i++\n parseWhitespaceAndSkipComments()\n\n // repair: remove the end quote of the first string\n output = stripLastOccurrence(output, '\"', true)\n const start = output.length\n const parsedStr = parseString()\n if (parsedStr) {\n // repair: remove the start quote of the second string\n output = removeAtIndex(output, start, 1)\n } else {\n // repair: remove the + because it is not followed by a string\n output = insertBeforeLastWhitespace(output, '\"')\n }\n }\n\n return processed\n }\n\n /**\n * Parse a number like 2.4 or 2.4e6\n */\n function parseNumber(): boolean {\n const start = i\n let num = ''\n let invalid = false\n\n if (text[i] === '-') {\n num += text[i]\n i++\n\n if (!isDigit(text[i]) && atEndOfNumber()) {\n // repair missing zero after minus like in \"-.2\" or \"-\"\n num += '0'\n }\n }\n\n if (text[i] === '0' && isDigit(text[i + 1])) {\n // the number has leading zeros like \"00123\" or \"001.23\"\n invalid = true\n }\n\n while (isDigit(text[i])) {\n num += text[i]\n i++\n }\n\n if (text[i] === '.') {\n if (num === '' || num === '-') {\n // repair missing leading zero before dot\n num += '0'\n }\n\n num += text[i]\n i++\n\n if (!isDigit(text[i])) {\n // repair a truncated number like \"2.\" into \"2.0\"\n num += '0'\n }\n\n while (isDigit(text[i])) {\n num += text[i]\n i++\n }\n }\n\n if (i > start) {\n if (text[i] === 'e' || text[i] === 'E') {\n if (num === '-') {\n invalid = true\n }\n\n num += text[i]\n i++\n\n if (text[i] === '-' || text[i] === '+') {\n num += text[i]\n i++\n }\n\n if (!isDigit(text[i])) {\n // repair a truncated number like \"2e\" into \"2e0\"\n num += '0'\n }\n\n while (isDigit(text[i])) {\n num += text[i]\n i++\n }\n }\n\n // if we're not at the end of the number by this point, allow this to be parsed as another type\n if (!atEndOfNumber()) {\n i = start\n return false\n }\n\n output += invalid ? `\"${text.substring(start, i)}\"` : num\n return true\n }\n\n return false\n }\n\n /**\n * Parse keywords true, false, null\n * Repair Python keywords True, False, None\n */\n function parseKeywords(): boolean {\n return (\n parseKeyword('true', 'true') ||\n parseKeyword('false', 'false') ||\n parseKeyword('null', 'null') ||\n // repair Python keywords True, False, None\n parseKeyword('True', 'true') ||\n parseKeyword('False', 'false') ||\n parseKeyword('None', 'null')\n )\n }\n\n function parseKeyword(name: string, value: string): boolean {\n if (text.slice(i, i + name.length) === name && !isFunctionNameChar(text[i + name.length])) {\n output += value\n i += name.length\n return true\n }\n\n return false\n }\n\n /**\n * Repair an unquoted string by adding quotes around it\n * Repair a MongoDB function call like NumberLong(\"2\")\n * Repair a JSONP function call like callback({...});\n */\n function parseUnquotedString(isKey: boolean) {\n // note that the symbol can end with whitespaces: we stop at the next delimiter\n // also, note that we allow strings to contain a slash / in order to support repairing regular expressions\n const start = i\n\n if (isFunctionNameCharStart(text[i])) {\n while (i < text.length && isFunctionNameChar(text[i])) {\n i++\n }\n\n let j = i\n while (isWhitespace(text, j)) {\n j++\n }\n\n if (text[j] === '(') {\n // repair a MongoDB function call like NumberLong(\"2\")\n // repair a JSONP function call like callback({...});\n i = j + 1\n\n parseValue()\n\n if (text[i] === ')') {\n // repair: skip close bracket of function call\n i++\n if (text[i] === ';') {\n // repair: skip semicolon after JSONP call\n i++\n }\n }\n\n return true\n }\n }\n\n while (\n i < text.length &&\n !isUnquotedStringDelimiter(text[i]) &&\n !isQuote(text[i]) &&\n (!isKey || text[i] !== ':')\n ) {\n i++\n }\n\n // test start of an url like \"https://...\" (this would be parsed as a comment)\n if (text[i - 1] === ':' && regexUrlStart.test(text.substring(start, i + 2))) {\n while (i < text.length && regexUrlChar.test(text[i])) {\n i++\n }\n }\n\n if (i > start) {\n // repair unquoted string\n // also, repair undefined into null\n\n // first, go back to prevent getting trailing whitespaces in the string\n while (isWhitespace(text, i - 1) && i > 0) {\n i--\n }\n\n const symbol = text.slice(start, i)\n output += symbol === 'undefined' ? 'null' : JSON.stringify(symbol)\n\n if (text[i] === '\"') {\n // we had a missing start quote, but now we encountered the end quote, so we can skip that one\n i++\n }\n\n return true\n }\n }\n\n function parseRegex() {\n if (text[i] === '/') {\n const start = i\n i++\n\n while (i < text.length && (text[i] !== '/' || text[i - 1] === '\\\\')) {\n i++\n }\n i++\n\n output += JSON.stringify(text.substring(start, i))\n\n return true\n }\n }\n\n function prevNonWhitespaceIndex(start: number): number {\n let prev = start\n\n while (prev > 0 && isWhitespace(text, prev)) {\n prev--\n }\n\n return prev\n }\n\n function nextQuoteIsEndQuote(index: number): boolean {\n // precondition: text[index] is a quote. Peek past it: if nothing meaningful\n // follows, that quote is the true end and this one is embedded (e.g. `\"The TV is 72\"\"`)\n let next = index + 1\n while (next < text.length && isWhitespace(text, next)) {\n next++\n }\n\n return next >= text.length || isDelimiter(text[next])\n }\n\n function atEndOfNumber() {\n return i >= text.length || isDelimiter(text[i]) || isWhitespace(text, i)\n }\n\n function throwInvalidCharacter(char: string) {\n throw new JSONRepairError(`Invalid character ${JSON.stringify(char)}`, i)\n }\n\n function throwUnexpectedCharacter() {\n throw new JSONRepairError(`Unexpected character ${JSON.stringify(text[i])}`, i)\n }\n\n function throwUnexpectedEnd() {\n throw new JSONRepairError('Unexpected end of json string', text.length)\n }\n\n function throwObjectKeyExpected() {\n throw new JSONRepairError('Object key expected', i)\n }\n\n function throwColonExpected() {\n throw new JSONRepairError('Colon expected', i)\n }\n\n function throwInvalidUnicodeCharacter() {\n const chars = text.slice(i, i + 6)\n throw new JSONRepairError(`Invalid unicode character \"${chars}\"`, i)\n }\n}\n\nfunction atEndOfBlockComment(text: string, i: number) {\n return text[i] === '*' && text[i + 1] === '/'\n}\n"],"mappings":"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","ignoreList":[]}
{"version":3,"file":"jsonrepair.js","names":["JSONRepairError","endsWithCommaOrNewline","insertBeforeLastWhitespace","isControlCharacter","isDelimiter","isDigit","isDoubleQuote","isDoubleQuoteEntity","isDoubleQuoteLike","isFunctionNameChar","isFunctionNameCharStart","isHex","isInsideUnclosedBracket","isQuote","isSingleQuote","isSingleQuoteEntity","isSingleQuoteLike","isSpecialWhitespace","isStartOfValue","isUnquotedStringDelimiter","isValidStringCharacter","isWhitespace","isWhitespaceExceptNewline","matchHtmlEntity","maxHtmlEntityLength","regexUrlChar","regexUrlStart","removeAtIndex","stripLastOccurrence","controlCharacters","escapeCharacters","b","f","n","r","t","jsonrepair","text","i","output","parseMarkdownCodeBlock","processed","parseValue","throwUnexpectedEnd","processedComma","parseCharacter","parseWhitespaceAndSkipComments","parseNewlineDelimitedJSON","length","throwUnexpectedCharacter","parseObject","parseArray","parseString","parseNumber","parseKeywords","parseUnquotedString","parseRegex","skipNewline","arguments","undefined","start","changed","parseWhitespace","parseComment","_isWhiteSpace","whitespace","atEndOfBlockComment","blocks","skipMarkdownCodeBlock","block","end","slice","char","skipCharacter","skipEscapeCharacter","skipEllipsis","initial","processedKey","throwObjectKeyExpected","processedColon","truncatedText","throwColonExpected","processedValue","stopAtDelimiter","stopAtIndex","skipEscapeChars","openEntity","openedByEntity","isEndQuote","iBefore","oBefore","str","iPrev","prevNonWhitespaceIndex","charAt","substring","entity","isEnd","iQuote","oQuote","nextQuoteIsEndQuote","parseConcatenatedString","iPrevChar","prevChar","test","escapeChar","j","throwInvalidUnicodeCharacter","throwInvalidCharacter","parsedStr","num","invalid","atEndOfNumber","parseKeyword","name","value","isKey","symbol","JSON","stringify","prev","index","next","chars"],"sources":["../../../src/regular/jsonrepair.ts"],"sourcesContent":["import { JSONRepairError } from '../utils/JSONRepairError.js'\nimport {\n endsWithCommaOrNewline,\n insertBeforeLastWhitespace,\n isControlCharacter,\n isDelimiter,\n isDigit,\n isDoubleQuote,\n isDoubleQuoteEntity,\n isDoubleQuoteLike,\n isFunctionNameChar,\n isFunctionNameCharStart,\n isHex,\n isInsideUnclosedBracket,\n isQuote,\n isSingleQuote,\n isSingleQuoteEntity,\n isSingleQuoteLike,\n isSpecialWhitespace,\n isStartOfValue,\n isUnquotedStringDelimiter,\n isValidStringCharacter,\n isWhitespace,\n isWhitespaceExceptNewline,\n matchHtmlEntity,\n maxHtmlEntityLength,\n regexUrlChar,\n regexUrlStart,\n removeAtIndex,\n stripLastOccurrence\n} from '../utils/stringUtils.js'\n\nconst controlCharacters: { [key: string]: string } = {\n '\\b': '\\\\b',\n '\\f': '\\\\f',\n '\\n': '\\\\n',\n '\\r': '\\\\r',\n '\\t': '\\\\t'\n}\n\n// map with all escape characters\nconst escapeCharacters: { [key: string]: string } = {\n '\"': '\"',\n '\\\\': '\\\\',\n '/': '/',\n b: '\\b',\n f: '\\f',\n n: '\\n',\n r: '\\r',\n t: '\\t'\n // note that \\u is handled separately in parseString()\n}\n\n/**\n * Repair a string containing an invalid JSON document.\n * For example changes JavaScript notation into JSON notation.\n *\n * Example:\n *\n * try {\n * const json = \"{name: 'John'}\"\n * const repaired = jsonrepair(json)\n * console.log(repaired)\n * // '{\"name\": \"John\"}'\n * } catch (err) {\n * console.error(err)\n * }\n *\n */\nexport function jsonrepair(text: string): string {\n let i = 0 // current index in text\n let output = '' // generated output\n\n parseMarkdownCodeBlock(['```', '[```', '{```'])\n\n const processed = parseValue()\n if (!processed) {\n throwUnexpectedEnd()\n }\n\n parseMarkdownCodeBlock(['```', '```]', '```}'])\n\n const processedComma = parseCharacter(',')\n if (processedComma) {\n parseWhitespaceAndSkipComments()\n }\n\n if (isStartOfValue(text[i]) && endsWithCommaOrNewline(output)) {\n // start of a new value after end of the root level object: looks like\n // newline delimited JSON -> turn into a root level array\n if (!processedComma) {\n // repair missing comma\n output = insertBeforeLastWhitespace(output, ',')\n }\n\n parseNewlineDelimitedJSON()\n } else if (processedComma) {\n // repair: remove trailing comma\n output = stripLastOccurrence(output, ',')\n }\n\n // repair redundant end quotes\n while (text[i] === '}' || text[i] === ']') {\n i++\n parseWhitespaceAndSkipComments()\n }\n\n if (i >= text.length) {\n // reached the end of the document properly\n return output\n }\n\n throwUnexpectedCharacter()\n\n function parseValue(): boolean {\n parseWhitespaceAndSkipComments()\n const processed =\n parseObject() ||\n parseArray() ||\n parseString() ||\n parseNumber() ||\n parseKeywords() ||\n parseUnquotedString(false) ||\n parseRegex()\n parseWhitespaceAndSkipComments()\n\n return processed\n }\n\n function parseWhitespaceAndSkipComments(skipNewline = true): boolean {\n const start = i\n\n let changed = parseWhitespace(skipNewline)\n do {\n changed = parseComment()\n if (changed) {\n changed = parseWhitespace(skipNewline)\n }\n } while (changed)\n\n return i > start\n }\n\n function parseWhitespace(skipNewline: boolean): boolean {\n const _isWhiteSpace = skipNewline ? isWhitespace : isWhitespaceExceptNewline\n let whitespace = ''\n\n while (true) {\n if (_isWhiteSpace(text, i)) {\n whitespace += text[i]\n i++\n } else if (isSpecialWhitespace(text, i)) {\n // repair special whitespace\n whitespace += ' '\n i++\n } else {\n break\n }\n }\n\n if (whitespace.length > 0) {\n output += whitespace\n return true\n }\n\n return false\n }\n\n function parseComment(): boolean {\n // find a block comment '/* ... */'\n if (text[i] === '/' && text[i + 1] === '*') {\n // repair block comment by skipping it\n while (i < text.length && !atEndOfBlockComment(text, i)) {\n i++\n }\n i += 2\n\n return true\n }\n\n // find a line comment '// ...'\n if (text[i] === '/' && text[i + 1] === '/') {\n // repair line comment by skipping it\n while (i < text.length && text[i] !== '\\n') {\n i++\n }\n\n return true\n }\n\n return false\n }\n\n function parseMarkdownCodeBlock(blocks: string[]): boolean {\n // find and skip over a Markdown fenced code block:\n // ``` ... ```\n // or\n // ```json ... ```\n if (skipMarkdownCodeBlock(blocks)) {\n if (isFunctionNameCharStart(text[i])) {\n // strip the optional language specifier like \"json\"\n while (i < text.length && isFunctionNameChar(text[i])) {\n i++\n }\n }\n\n parseWhitespaceAndSkipComments()\n\n return true\n }\n\n return false\n }\n\n function skipMarkdownCodeBlock(blocks: string[]): boolean {\n parseWhitespace(true)\n\n for (const block of blocks) {\n const end = i + block.length\n if (text.slice(i, end) === block) {\n i = end\n return true\n }\n }\n\n return false\n }\n\n function parseCharacter(char: string): boolean {\n if (text[i] === char) {\n output += text[i]\n i++\n return true\n }\n\n return false\n }\n\n function skipCharacter(char: string): boolean {\n if (text[i] === char) {\n i++\n return true\n }\n\n return false\n }\n\n function skipEscapeCharacter(): boolean {\n return skipCharacter('\\\\')\n }\n\n /**\n * Skip ellipsis like \"[1,2,3,...]\" or \"[1,2,3,...,9]\" or \"[...,7,8,9]\"\n * or a similar construct in objects.\n */\n function skipEllipsis(): boolean {\n parseWhitespaceAndSkipComments()\n\n if (text[i] === '.' && text[i + 1] === '.' && text[i + 2] === '.') {\n // repair: remove the ellipsis (three dots) and optionally a comma\n i += 3\n parseWhitespaceAndSkipComments()\n skipCharacter(',')\n\n return true\n }\n\n return false\n }\n\n /**\n * Parse an object like '{\"key\": \"value\"}'\n */\n function parseObject(): boolean {\n if (text[i] === '{') {\n output += '{'\n i++\n parseWhitespaceAndSkipComments()\n\n // repair: skip leading comma like in {, message: \"hi\"}\n if (skipCharacter(',')) {\n parseWhitespaceAndSkipComments()\n }\n\n let initial = true\n while (i < text.length && text[i] !== '}') {\n let processedComma: boolean\n if (!initial) {\n processedComma = parseCharacter(',')\n if (!processedComma) {\n // repair missing comma\n output = insertBeforeLastWhitespace(output, ',')\n }\n parseWhitespaceAndSkipComments()\n } else {\n processedComma = true\n }\n\n skipEllipsis()\n\n const processedKey = parseString() || parseUnquotedString(true)\n if (!processedKey) {\n if (\n text[i] === '}' ||\n text[i] === '{' ||\n text[i] === ']' ||\n text[i] === '[' ||\n text[i] === undefined\n ) {\n // repair trailing comma\n if (!initial) {\n output = stripLastOccurrence(output, ',')\n }\n } else {\n throwObjectKeyExpected()\n }\n break\n }\n\n parseWhitespaceAndSkipComments()\n const processedColon = parseCharacter(':')\n const truncatedText = i >= text.length\n if (!processedColon) {\n if (isStartOfValue(text[i]) || truncatedText) {\n // repair missing colon\n output = insertBeforeLastWhitespace(output, ':')\n } else {\n throwColonExpected()\n }\n }\n const processedValue = parseValue()\n if (!processedValue) {\n if (processedColon || truncatedText) {\n // repair missing object value\n output += 'null'\n } else {\n throwColonExpected()\n }\n }\n\n initial = false\n }\n\n if (text[i] === '}') {\n output += '}'\n i++\n } else {\n // repair missing end bracket\n output = insertBeforeLastWhitespace(output, '}')\n }\n\n return true\n }\n\n return false\n }\n\n /**\n * Parse an array like '[\"item1\", \"item2\", ...]'\n */\n function parseArray(): boolean {\n if (text[i] === '[') {\n output += '['\n i++\n parseWhitespaceAndSkipComments()\n\n // repair: skip leading comma like in [,1,2,3]\n if (skipCharacter(',')) {\n parseWhitespaceAndSkipComments()\n }\n\n let initial = true\n while (i < text.length && text[i] !== ']') {\n if (!initial) {\n const processedComma = parseCharacter(',')\n if (!processedComma) {\n // repair missing comma\n output = insertBeforeLastWhitespace(output, ',')\n }\n }\n\n skipEllipsis()\n\n const processedValue = parseValue()\n if (!processedValue) {\n // repair trailing comma\n if (!initial) {\n output = stripLastOccurrence(output, ',')\n }\n break\n }\n\n initial = false\n }\n\n if (text[i] === ']') {\n output += ']'\n i++\n } else {\n // repair missing closing array bracket\n output = insertBeforeLastWhitespace(output, ']')\n }\n\n return true\n }\n\n return false\n }\n\n /**\n * Parse and repair Newline Delimited JSON (NDJSON):\n * multiple JSON objects separated by a newline character\n */\n function parseNewlineDelimitedJSON() {\n // repair NDJSON\n let initial = true\n let processedValue = true\n while (processedValue) {\n if (!initial) {\n // parse optional comma, insert when missing\n const processedComma = parseCharacter(',')\n if (!processedComma) {\n // repair: add missing comma\n output = insertBeforeLastWhitespace(output, ',')\n }\n } else {\n initial = false\n }\n\n processedValue = parseValue()\n }\n\n if (!processedValue) {\n // repair: remove trailing comma\n output = stripLastOccurrence(output, ',')\n }\n\n // repair: wrap the output inside array brackets\n output = `[\\n${output}\\n]`\n }\n\n /**\n * Parse a string enclosed by double quotes \"...\". Can contain escaped quotes\n * Repair strings enclosed in single quotes or special quotes\n * Repair an escaped string\n *\n * The function can run in two stages:\n * - First, it assumes the string has a valid end quote\n * - If it turns out that the string does not have a valid end quote followed\n * by a delimiter (which should be the case), the function runs again in a\n * more conservative way, stopping the string at the first next delimiter\n * and fixing the string by inserting a quote there, or stopping at a\n * stop index detected in the first iteration.\n */\n function parseString(stopAtDelimiter = false, stopAtIndex = -1): boolean {\n const skipEscapeChars = text[i] === '\\\\'\n if (skipEscapeChars) {\n // repair: remove the first escape character\n i++\n\n if (!isQuote(text[i])) {\n throwUnexpectedCharacter()\n }\n }\n\n // a string can be opened by a quote character, or by an HTML entity that\n // decodes to a quote (like &quot;) when repairing HTML-encoded JSON\n const openEntity =\n text[i] === '&' ? matchHtmlEntity(text.slice(i, i + maxHtmlEntityLength)) : null\n const openedByEntity = isDoubleQuoteEntity(openEntity) || isSingleQuoteEntity(openEntity)\n\n if (isQuote(text[i]) || openedByEntity) {\n // double quotes are correct JSON,\n // single quotes come from JavaScript for example, we assume it will have a correct single end quote too\n // otherwise, we will match any double-quote-like start with a double-quote-like end,\n // or any single-quote-like start with a single-quote-like end\n const isEndQuote = isDoubleQuote(text[i])\n ? isDoubleQuote\n : isSingleQuote(text[i])\n ? isSingleQuote\n : isSingleQuoteLike(text[i])\n ? isSingleQuoteLike\n : isDoubleQuoteLike\n\n const iBefore = i\n const oBefore = output.length\n\n let str = '\"'\n // when opened by an entity, skip past the whole entity; otherwise skip the quote\n i += openedByEntity && openEntity ? openEntity.length : 1\n\n while (true) {\n if (i >= text.length) {\n // end of text, we are missing an end quote\n\n const iPrev = prevNonWhitespaceIndex(i - 1)\n if (!stopAtDelimiter && isDelimiter(text.charAt(iPrev))) {\n // if the text ends with a delimiter, like [\"hello],\n // so the missing end quote should be inserted before this delimiter\n // retry parsing the string, stopping at the first next delimiter\n i = iBefore\n output = output.substring(0, oBefore)\n\n return parseString(true)\n }\n\n // repair missing quote\n str = insertBeforeLastWhitespace(str, '\"')\n output += str\n\n return true\n }\n\n if (i === stopAtIndex) {\n // use the stop index detected in the first iteration, and repair end quote\n str = insertBeforeLastWhitespace(str, '\"')\n output += str\n\n return true\n }\n\n // inside an entity-opened string a '&' is an entity; it is the end quote\n // when it decodes to the opening quote\n const entity =\n openedByEntity && text[i] === '&'\n ? matchHtmlEntity(text.slice(i, i + maxHtmlEntityLength))\n : null\n const isEnd = entity && openEntity ? entity.char === openEntity.char : isEndQuote(text[i])\n\n if (isEnd) {\n // end quote\n // let us check what is before and after the quote to verify whether this is a legit end quote\n const iQuote = i\n const oQuote = str.length\n str += '\"'\n i += entity ? entity.length : 1\n output += str\n\n parseWhitespaceAndSkipComments(false)\n\n if (\n stopAtDelimiter ||\n i >= text.length ||\n (isDelimiter(text[i]) &&\n // only count the brackets inside the string when actually needed,\n // i.e. when the quote is directly followed by a closing bracket\n !isInsideUnclosedBracket(str, text[i])) ||\n (isQuote(text[i]) && !nextQuoteIsEndQuote(i)) ||\n isDigit(text[i])\n ) {\n // The quote is followed by the end of the text, a delimiter,\n // or a next value. So the quote is indeed the end of the string.\n parseConcatenatedString()\n\n return true\n }\n\n if (text[i] === '\\\\') {\n throwUnexpectedCharacter()\n }\n\n const iPrevChar = prevNonWhitespaceIndex(iQuote - 1)\n const prevChar = text.charAt(iPrevChar)\n\n if (prevChar === ',') {\n // A comma followed by a quote, like '{\"a\":\"b,c,\"d\":\"e\"}'.\n // We assume that the quote is a start quote, and that the end quote\n // should have been located right before the comma but is missing.\n i = iBefore\n output = output.substring(0, oBefore)\n\n return parseString(false, iPrevChar)\n }\n\n if (isDelimiter(prevChar)) {\n // This is not the right end quote: it is preceded by a delimiter,\n // and NOT followed by a delimiter. So, there is an end quote missing\n // parse the string again and then stop at the first next delimiter\n i = iBefore\n output = output.substring(0, oBefore)\n\n return parseString(true)\n }\n\n // revert to right after the quote but before any whitespace, and continue parsing the string\n output = output.substring(0, oBefore)\n i = iQuote + (entity ? entity.length : 1)\n\n // repair unescaped quote\n str = `${str.substring(0, oQuote)}\\\\${str.substring(oQuote)}`\n } else if (stopAtDelimiter && isUnquotedStringDelimiter(text[i])) {\n // we're in the mode to stop the string at the first delimiter\n // because there is an end quote missing\n\n // test start of an url like \"https://...\" (this would be parsed as a comment)\n if (text[i - 1] === ':' && regexUrlStart.test(text.substring(iBefore + 1, i + 2))) {\n while (i < text.length && regexUrlChar.test(text[i])) {\n str += text[i]\n i++\n }\n }\n\n // repair missing quote\n str = insertBeforeLastWhitespace(str, '\"')\n output += str\n\n parseConcatenatedString()\n\n return true\n } else if (entity) {\n // decode an HTML entity inside the string as content\n const char = entity.char\n if (char === '\"') {\n // repair unescaped double quote\n str += '\\\\\"'\n } else if (isControlCharacter(char)) {\n str += controlCharacters[char]\n } else {\n str += char\n }\n i += entity.length\n } else if (text[i] === '\\\\') {\n // handle escaped content like \\n or \\u2605\n const char = text.charAt(i + 1)\n const escapeChar = escapeCharacters[char]\n if (escapeChar !== undefined) {\n str += text.slice(i, i + 2)\n i += 2\n } else if (char === 'u') {\n let j = 2\n while (j < 6 && isHex(text[i + j])) {\n j++\n }\n\n if (j === 6) {\n str += text.slice(i, i + 6)\n i += 6\n } else if (i + j >= text.length) {\n // repair invalid or truncated unicode char at the end of the text\n // by removing the unicode char and ending the string here\n i = text.length\n } else {\n throwInvalidUnicodeCharacter()\n }\n } else if (char === '\\n') {\n // repair a backslash escaped newline (like in Bash scripts)\n str += '\\\\n'\n i += 2\n } else {\n // repair invalid escape character: remove it\n str += char\n i += 2\n }\n } else {\n // handle regular characters\n const char = text.charAt(i)\n\n if (char === '\"' && text[i - 1] !== '\\\\') {\n // repair unescaped double quote\n str += `\\\\${char}`\n i++\n } else if (isControlCharacter(char)) {\n // unescaped control character\n str += controlCharacters[char]\n i++\n } else {\n if (!isValidStringCharacter(char)) {\n throwInvalidCharacter(char)\n }\n str += char\n i++\n }\n }\n\n if (skipEscapeChars) {\n // repair: skipped escape character (nothing to do)\n skipEscapeCharacter()\n }\n }\n }\n\n return false\n }\n\n /**\n * Repair concatenated strings like \"hello\" + \"world\", change this into \"helloworld\"\n */\n function parseConcatenatedString(): boolean {\n let processed = false\n\n parseWhitespaceAndSkipComments()\n while (text[i] === '+') {\n processed = true\n i++\n parseWhitespaceAndSkipComments()\n\n // repair: remove the end quote of the first string\n output = stripLastOccurrence(output, '\"', true)\n const start = output.length\n const parsedStr = parseString()\n if (parsedStr) {\n // repair: remove the start quote of the second string\n output = removeAtIndex(output, start, 1)\n } else {\n // repair: remove the + because it is not followed by a string\n output = insertBeforeLastWhitespace(output, '\"')\n }\n }\n\n return processed\n }\n\n /**\n * Parse a number like 2.4 or 2.4e6\n */\n function parseNumber(): boolean {\n const start = i\n let num = ''\n let invalid = false\n\n if (text[i] === '-') {\n num += text[i]\n i++\n\n if (!isDigit(text[i]) && atEndOfNumber()) {\n // repair missing zero after minus like in \"-.2\" or \"-\"\n num += '0'\n }\n }\n\n if (text[i] === '0' && isDigit(text[i + 1])) {\n // the number has leading zeros like \"00123\" or \"001.23\"\n invalid = true\n }\n\n while (isDigit(text[i])) {\n num += text[i]\n i++\n }\n\n if (text[i] === '.') {\n if (num === '' || num === '-') {\n // repair missing leading zero before dot\n num += '0'\n }\n\n num += text[i]\n i++\n\n if (!isDigit(text[i])) {\n // repair a truncated number like \"2.\" into \"2.0\"\n num += '0'\n }\n\n while (isDigit(text[i])) {\n num += text[i]\n i++\n }\n }\n\n if (i > start) {\n if (text[i] === 'e' || text[i] === 'E') {\n if (num === '-') {\n invalid = true\n }\n\n num += text[i]\n i++\n\n if (text[i] === '-' || text[i] === '+') {\n num += text[i]\n i++\n }\n\n if (!isDigit(text[i])) {\n // repair a truncated number like \"2e\" into \"2e0\"\n num += '0'\n }\n\n while (isDigit(text[i])) {\n num += text[i]\n i++\n }\n }\n\n // if we're not at the end of the number by this point, allow this to be parsed as another type\n if (!atEndOfNumber()) {\n i = start\n return false\n }\n\n output += invalid ? `\"${text.substring(start, i)}\"` : num\n return true\n }\n\n return false\n }\n\n /**\n * Parse keywords true, false, null\n * Repair Python keywords True, False, None\n */\n function parseKeywords(): boolean {\n return (\n parseKeyword('true', 'true') ||\n parseKeyword('false', 'false') ||\n parseKeyword('null', 'null') ||\n // repair Python keywords True, False, None\n parseKeyword('True', 'true') ||\n parseKeyword('False', 'false') ||\n parseKeyword('None', 'null')\n )\n }\n\n function parseKeyword(name: string, value: string): boolean {\n if (text.slice(i, i + name.length) === name && !isFunctionNameChar(text[i + name.length])) {\n output += value\n i += name.length\n return true\n }\n\n return false\n }\n\n /**\n * Repair an unquoted string by adding quotes around it\n * Repair a MongoDB function call like NumberLong(\"2\")\n * Repair a JSONP function call like callback({...});\n */\n function parseUnquotedString(isKey: boolean) {\n // note that the symbol can end with whitespaces: we stop at the next delimiter\n // also, note that we allow strings to contain a slash / in order to support repairing regular expressions\n const start = i\n\n if (isFunctionNameCharStart(text[i])) {\n while (i < text.length && isFunctionNameChar(text[i])) {\n i++\n }\n\n let j = i\n while (isWhitespace(text, j)) {\n j++\n }\n\n if (text[j] === '(') {\n // repair a MongoDB function call like NumberLong(\"2\")\n // repair a JSONP function call like callback({...});\n i = j + 1\n\n parseValue()\n\n if (text[i] === ')') {\n // repair: skip close bracket of function call\n i++\n if (text[i] === ';') {\n // repair: skip semicolon after JSONP call\n i++\n }\n }\n\n return true\n }\n }\n\n while (\n i < text.length &&\n !isUnquotedStringDelimiter(text[i]) &&\n !isQuote(text[i]) &&\n (!isKey || text[i] !== ':')\n ) {\n i++\n }\n\n // test start of an url like \"https://...\" (this would be parsed as a comment)\n if (text[i - 1] === ':' && regexUrlStart.test(text.substring(start, i + 2))) {\n while (i < text.length && regexUrlChar.test(text[i])) {\n i++\n }\n }\n\n if (i > start) {\n // repair unquoted string\n // also, repair undefined into null\n\n // first, go back to prevent getting trailing whitespaces in the string\n while (isWhitespace(text, i - 1) && i > 0) {\n i--\n }\n\n const symbol = text.slice(start, i)\n output += symbol === 'undefined' ? 'null' : JSON.stringify(symbol)\n\n if (text[i] === '\"') {\n // we had a missing start quote, but now we encountered the end quote, so we can skip that one\n i++\n }\n\n return true\n }\n }\n\n function parseRegex() {\n if (text[i] === '/') {\n const start = i\n i++\n\n while (i < text.length && (text[i] !== '/' || text[i - 1] === '\\\\')) {\n i++\n }\n i++\n\n output += JSON.stringify(text.substring(start, i))\n\n return true\n }\n }\n\n function prevNonWhitespaceIndex(start: number): number {\n let prev = start\n\n while (prev > 0 && isWhitespace(text, prev)) {\n prev--\n }\n\n return prev\n }\n\n function nextQuoteIsEndQuote(index: number): boolean {\n // precondition: text[index] is a quote. Peek past it: if nothing meaningful\n // follows, that quote is the true end and this one is embedded (e.g. `\"The TV is 72\"\"`)\n let next = index + 1\n while (next < text.length && isWhitespace(text, next)) {\n next++\n }\n\n return next >= text.length || isDelimiter(text[next])\n }\n\n function atEndOfNumber() {\n return i >= text.length || isDelimiter(text[i]) || isWhitespace(text, i)\n }\n\n function throwInvalidCharacter(char: string) {\n throw new JSONRepairError(`Invalid character ${JSON.stringify(char)}`, i)\n }\n\n function throwUnexpectedCharacter() {\n throw new JSONRepairError(`Unexpected character ${JSON.stringify(text[i])}`, i)\n }\n\n function throwUnexpectedEnd() {\n throw new JSONRepairError('Unexpected end of json string', text.length)\n }\n\n function throwObjectKeyExpected() {\n throw new JSONRepairError('Object key expected', i)\n }\n\n function throwColonExpected() {\n throw new JSONRepairError('Colon expected', i)\n }\n\n function throwInvalidUnicodeCharacter() {\n const chars = text.slice(i, i + 6)\n throw new JSONRepairError(`Invalid unicode character \"${chars}\"`, i)\n }\n}\n\nfunction atEndOfBlockComment(text: string, i: number) {\n return text[i] === '*' && text[i + 1] === '/'\n}\n"],"mappings":"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","ignoreList":[]}
import { JSONRepairError } from '../utils/JSONRepairError.js';
import { isControlCharacter, isDelimiter, isDigit, isDoubleQuote, isDoubleQuoteLike, isFunctionNameChar, isFunctionNameCharStart, isHex, isInsideUnclosedBracket, isQuote, isSingleQuote, isSingleQuoteLike, isSpecialWhitespace, isStartOfValue, isUnquotedStringDelimiter, isValidStringCharacter, isWhitespace, isWhitespaceExceptNewline, regexUrlChar, regexUrlStart } from '../utils/stringUtils.js';
import { isControlCharacter, isDelimiter, isDigit, isDoubleQuote, isDoubleQuoteEntity, isDoubleQuoteLike, isFunctionNameChar, isFunctionNameCharStart, isHex, isInsideUnclosedBracket, isQuote, isSingleQuote, isSingleQuoteEntity, isSingleQuoteLike, isSpecialWhitespace, isStartOfValue, isUnquotedStringDelimiter, isValidStringCharacter, isWhitespace, isWhitespaceExceptNewline, matchHtmlEntity, maxHtmlEntityLength, regexUrlChar, regexUrlStart } from '../utils/stringUtils.js';
import { createInputBuffer } from './buffer/InputBuffer.js';

@@ -470,2 +470,11 @@ import { createOutputBuffer } from './buffer/OutputBuffer.js';

/**
* Read a small window of buffered input at the given index to detect an HTML
* entity, clamped so it never reads past the buffered input.
*/
function htmlEntityWindow(at) {
const max = Math.min(at + maxHtmlEntityLength, input.currentLength());
return at < max ? input.substring(at, max) : '';
}
/**
* Parse a string enclosed by double quotes "...". Can contain escaped quotes

@@ -486,9 +495,16 @@ * Repair strings enclosed in single quotes or special quotes

let stopAtIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : -1;
let skipEscapeChars = input.charAt(i) === '\\';
const skipEscapeChars = input.charAt(i) === '\\';
if (skipEscapeChars) {
// repair: remove the first escape character
i++;
skipEscapeChars = true;
if (!isQuote(input.charAt(i))) {
throwUnexpectedCharacter();
}
}
if (isQuote(input.charAt(i))) {
// a string can be opened by a quote character, or by an HTML entity that
// decodes to a quote (like &quot;) when repairing HTML-encoded JSON
const openEntity = input.charAt(i) === '&' ? matchHtmlEntity(htmlEntityWindow(i)) : null;
const openedByEntity = isDoubleQuoteEntity(openEntity) || isSingleQuoteEntity(openEntity);
if (isQuote(input.charAt(i)) || openedByEntity) {
// double quotes are correct JSON,

@@ -502,3 +518,4 @@ // single quotes come from JavaScript for example, we assume it will have a correct single end quote too

output.push('"');
i++;
// when opened by an entity, skip past the whole entity; otherwise skip the quote
i += openedByEntity && openEntity ? openEntity.length : 1;
while (true) {

@@ -527,3 +544,8 @@ if (input.isEnd(i)) {

}
if (isEndQuote(input.charAt(i))) {
// inside an entity-opened string a '&' is an entity; it is the end quote
// when it decodes to the opening quote
const entity = openedByEntity && input.charAt(i) === '&' ? matchHtmlEntity(htmlEntityWindow(i)) : null;
const isEnd = entity && openEntity ? entity.char === openEntity.char : isEndQuote(input.charAt(i));
if (isEnd) {
// end quote

@@ -534,3 +556,3 @@ // let us check what is before and after the quote to verify whether this is a legit end quote

output.push('"');
i++;
i += entity ? entity.length : 1;
parseWhitespaceAndSkipComments(false);

@@ -546,2 +568,5 @@ if (stopAtDelimiter || input.isEnd(i) || isDelimiter(input.charAt(i)) &&

}
if (input.charAt(i) === '\\') {
throwUnexpectedCharacter();
}
const iPrevChar = prevNonWhitespaceIndex(iQuote - 1);

@@ -568,3 +593,3 @@ const prevChar = input.charAt(iPrevChar);

output.remove(oQuote + 1);
i = iQuote + 1;
i = iQuote + (entity ? entity.length : 1);

@@ -589,2 +614,14 @@ // repair unescaped quote

return stack.update(Caret.afterValue);
} else if (entity) {
// decode an HTML entity inside the string as content
const char = entity.char;
if (char === '"') {
// repair unescaped double quote
output.push('\\"');
} else if (isControlCharacter(char)) {
output.push(controlCharacters[char]);
} else {
output.push(char);
}
i += entity.length;
} else if (input.charAt(i) === '\\') {

@@ -591,0 +628,0 @@ // handle escaped content like \n or \u2605

@@ -1,1 +0,1 @@

{"version":3,"file":"core.js","names":["JSONRepairError","isControlCharacter","isDelimiter","isDigit","isDoubleQuote","isDoubleQuoteLike","isFunctionNameChar","isFunctionNameCharStart","isHex","isInsideUnclosedBracket","isQuote","isSingleQuote","isSingleQuoteLike","isSpecialWhitespace","isStartOfValue","isUnquotedStringDelimiter","isValidStringCharacter","isWhitespace","isWhitespaceExceptNewline","regexUrlChar","regexUrlStart","createInputBuffer","createOutputBuffer","Caret","createStack","StackType","controlCharacters","escapeCharacters","b","f","n","r","t","jsonrepairCore","_ref","onData","bufferSize","chunkSize","input","output","write","i","iFlushed","stack","flushInputBuffer","flush","transform","chunk","push","currentLength","parse","close","parseWhitespaceAndSkipComments","type","object","caret","beforeKey","skipEllipsis","parseObjectKey","parseUnexpectedColon","parseRepairTrailingComma","parseRepairObjectEndOrComma","beforeValue","parseValue","parseRepairMissingObjectValue","afterValue","parseObjectComma","parseObjectEnd","array","parseRepairArrayEnd","parseArrayComma","parseArrayEnd","parseRepairMissingComma","ndJson","parseRepairNdJsonEnd","functionCall","parseFunctionCallEnd","root","parseRootStart","parseRootEnd","parseObjectStart","parseArrayStart","parseString","parseNumber","parseKeywords","parseRepairUnquotedString","parseRepairRegex","parseCharacter","skipCharacter","update","j","charAt","isEnd","k","findNextDelimiter","test","substring","symbol","JSON","stringify","start","endsWithIgnoringWhitespace","stripLastOccurrence","throwObjectKeyExpected","parseUnexpectedEnd","throwUnexpectedEnd","throwUnexpectedCharacter","parsedKey","parseUnquotedKey","truncatedText","insertBeforeLastWhitespace","throwColonExpected","pop","parseMarkdownCodeBlock","parsedComma","unshift","skipNewline","arguments","length","undefined","changed","parseWhitespace","parseComment","_isWhiteSpace","whitespace","atEndOfBlockComment","blocks","skipMarkdownCodeBlock","block","end","char","skipEscapeCharacter","stopAtDelimiter","stopAtIndex","skipEscapeChars","isEndQuote","iBefore","oBefore","iPrev","prevNonWhitespaceIndex","remove","iQuote","oQuote","nextQuoteIsEndQuote","parseConcatenatedString","iPrevChar","prevChar","insertAt","escapeChar","throwInvalidUnicodeCharacter","throwInvalidCharacter","parsed","parsedStr","num","invalid","atEndOfNumber","parseKeyword","name","value","isKey","prev","index","next","chars"],"sources":["../../../src/streaming/core.ts"],"sourcesContent":["import { JSONRepairError } from '../utils/JSONRepairError.js'\nimport {\n isControlCharacter,\n isDelimiter,\n isDigit,\n isDoubleQuote,\n isDoubleQuoteLike,\n isFunctionNameChar,\n isFunctionNameCharStart,\n isHex,\n isInsideUnclosedBracket,\n isQuote,\n isSingleQuote,\n isSingleQuoteLike,\n isSpecialWhitespace,\n isStartOfValue,\n isUnquotedStringDelimiter,\n isValidStringCharacter,\n isWhitespace,\n isWhitespaceExceptNewline,\n regexUrlChar,\n regexUrlStart\n} from '../utils/stringUtils.js'\nimport { createInputBuffer } from './buffer/InputBuffer.js'\nimport { createOutputBuffer } from './buffer/OutputBuffer.js'\nimport { Caret, createStack, StackType } from './stack.js'\n\nconst controlCharacters: { [key: string]: string } = {\n '\\b': '\\\\b',\n '\\f': '\\\\f',\n '\\n': '\\\\n',\n '\\r': '\\\\r',\n '\\t': '\\\\t'\n}\n\n// map with all escape characters\nconst escapeCharacters: { [key: string]: string } = {\n '\"': '\"',\n '\\\\': '\\\\',\n '/': '/',\n b: '\\b',\n f: '\\f',\n n: '\\n',\n r: '\\r',\n t: '\\t'\n // note that \\u is handled separately in parseString()\n}\n\nexport interface JsonRepairCoreOptions {\n onData: (chunk: string) => void\n chunkSize?: number\n bufferSize?: number\n}\n\nexport interface JsonRepairCore {\n transform: (chunk: string) => void\n flush: () => void\n}\n\nexport function jsonrepairCore({\n onData,\n bufferSize = 65536,\n chunkSize = 65536\n}: JsonRepairCoreOptions): JsonRepairCore {\n const input = createInputBuffer()\n\n const output = createOutputBuffer({\n write: onData,\n bufferSize,\n chunkSize\n })\n\n let i = 0\n let iFlushed = 0\n const stack = createStack()\n\n function flushInputBuffer() {\n while (iFlushed < i - bufferSize - chunkSize) {\n iFlushed += chunkSize\n input.flush(iFlushed)\n }\n }\n\n function transform(chunk: string) {\n input.push(chunk)\n\n while (i < input.currentLength() - bufferSize && parse()) {\n // loop until there is nothing more to process\n }\n\n flushInputBuffer()\n }\n\n function flush() {\n input.close()\n\n while (parse()) {\n // loop until there is nothing more to process\n }\n\n output.flush()\n }\n\n function parse(): boolean {\n parseWhitespaceAndSkipComments()\n\n switch (stack.type) {\n case StackType.object: {\n switch (stack.caret) {\n case Caret.beforeKey:\n return (\n skipEllipsis() ||\n parseObjectKey() ||\n parseUnexpectedColon() ||\n parseRepairTrailingComma() ||\n parseRepairObjectEndOrComma()\n )\n case Caret.beforeValue:\n return parseValue() || parseRepairMissingObjectValue()\n case Caret.afterValue:\n return parseObjectComma() || parseObjectEnd() || parseRepairObjectEndOrComma()\n default:\n return false\n }\n }\n\n case StackType.array: {\n switch (stack.caret) {\n case Caret.beforeValue:\n return (\n skipEllipsis() || parseValue() || parseRepairTrailingComma() || parseRepairArrayEnd()\n )\n case Caret.afterValue:\n return (\n parseArrayComma() ||\n parseArrayEnd() ||\n parseRepairMissingComma() ||\n parseRepairArrayEnd()\n )\n default:\n return false\n }\n }\n\n case StackType.ndJson: {\n switch (stack.caret) {\n case Caret.beforeValue:\n return parseValue() || parseRepairTrailingComma()\n case Caret.afterValue:\n return parseArrayComma() || parseRepairMissingComma() || parseRepairNdJsonEnd()\n default:\n return false\n }\n }\n\n case StackType.functionCall: {\n switch (stack.caret) {\n case Caret.beforeValue:\n return parseValue()\n case Caret.afterValue:\n return parseFunctionCallEnd()\n default:\n return false\n }\n }\n\n case StackType.root: {\n switch (stack.caret) {\n case Caret.beforeValue:\n return parseRootStart()\n case Caret.afterValue:\n return parseRootEnd()\n default:\n return false\n }\n }\n\n default:\n return false\n }\n }\n\n function parseValue(): boolean {\n return (\n parseObjectStart() ||\n parseArrayStart() ||\n parseString() ||\n parseNumber() ||\n parseKeywords() ||\n parseRepairUnquotedString() ||\n parseRepairRegex()\n )\n }\n\n function parseObjectStart(): boolean {\n if (parseCharacter('{')) {\n parseWhitespaceAndSkipComments()\n\n skipEllipsis()\n\n if (skipCharacter(',')) {\n parseWhitespaceAndSkipComments()\n }\n\n if (parseCharacter('}')) {\n return stack.update(Caret.afterValue)\n }\n\n return stack.push(StackType.object, Caret.beforeKey)\n }\n\n return false\n }\n\n function parseArrayStart(): boolean {\n if (parseCharacter('[')) {\n parseWhitespaceAndSkipComments()\n\n skipEllipsis()\n\n if (skipCharacter(',')) {\n parseWhitespaceAndSkipComments()\n }\n\n if (parseCharacter(']')) {\n return stack.update(Caret.afterValue)\n }\n\n return stack.push(StackType.array, Caret.beforeValue)\n }\n\n return false\n }\n\n function parseRepairUnquotedString(): boolean {\n let j = i\n\n if (isFunctionNameCharStart(input.charAt(j))) {\n while (!input.isEnd(j) && isFunctionNameChar(input.charAt(j))) {\n j++\n }\n\n let k = j\n while (isWhitespace(input, k)) {\n k++\n }\n\n if (input.charAt(k) === '(') {\n // repair a MongoDB function call like NumberLong(\"2\")\n // repair a JSONP function call like callback({...});\n k++\n i = k\n return stack.push(StackType.functionCall, Caret.beforeValue)\n }\n }\n\n j = findNextDelimiter(false, j)\n if (j !== null) {\n // test start of an url like \"https://...\" (this would be parsed as a comment)\n if (input.charAt(j - 1) === ':' && regexUrlStart.test(input.substring(i, j + 2))) {\n while (!input.isEnd(j) && regexUrlChar.test(input.charAt(j))) {\n j++\n }\n }\n\n const symbol = input.substring(i, j)\n i = j\n\n output.push(symbol === 'undefined' ? 'null' : JSON.stringify(symbol))\n\n if (input.charAt(i) === '\"') {\n // we had a missing start quote, but now we encountered the end quote, so we can skip that one\n i++\n }\n\n return stack.update(Caret.afterValue)\n }\n\n return false\n }\n\n function parseRepairRegex() {\n if (input.charAt(i) === '/') {\n const start = i\n i++\n\n while (!input.isEnd(i) && (input.charAt(i) !== '/' || input.charAt(i - 1) === '\\\\')) {\n i++\n }\n i++\n\n output.push(JSON.stringify(input.substring(start, i)))\n\n return stack.update(Caret.afterValue)\n }\n }\n\n function parseRepairMissingObjectValue(): boolean {\n // repair missing object value\n output.push('null')\n return stack.update(Caret.afterValue)\n }\n\n function parseRepairTrailingComma(): boolean {\n // repair trailing comma\n if (output.endsWithIgnoringWhitespace(',')) {\n output.stripLastOccurrence(',')\n return stack.update(Caret.afterValue)\n }\n\n return false\n }\n\n function parseUnexpectedColon(): boolean {\n if (input.charAt(i) === ':') {\n throwObjectKeyExpected()\n }\n\n return false\n }\n\n function parseUnexpectedEnd(): boolean {\n if (input.isEnd(i)) {\n throwUnexpectedEnd()\n } else {\n throwUnexpectedCharacter()\n }\n\n return false\n }\n\n function parseObjectKey(): boolean {\n const parsedKey = parseString() || parseUnquotedKey()\n if (parsedKey) {\n parseWhitespaceAndSkipComments()\n\n if (parseCharacter(':')) {\n // expect a value after the :\n return stack.update(Caret.beforeValue)\n }\n\n const truncatedText = input.isEnd(i)\n if (isStartOfValue(input.charAt(i)) || truncatedText) {\n // repair missing colon\n output.insertBeforeLastWhitespace(':')\n return stack.update(Caret.beforeValue)\n }\n\n throwColonExpected()\n }\n\n return false\n }\n\n function parseObjectComma(): boolean {\n if (parseCharacter(',')) {\n return stack.update(Caret.beforeKey)\n }\n\n return false\n }\n\n function parseObjectEnd(): boolean {\n if (parseCharacter('}')) {\n return stack.pop()\n }\n\n return false\n }\n\n function parseRepairObjectEndOrComma(): true {\n // repair missing object end and trailing comma\n if (input.charAt(i) === '{') {\n output.stripLastOccurrence(',')\n output.insertBeforeLastWhitespace('}')\n return stack.pop()\n }\n\n // repair missing comma\n if (!input.isEnd(i) && isStartOfValue(input.charAt(i))) {\n output.insertBeforeLastWhitespace(',')\n return stack.update(Caret.beforeKey)\n }\n\n // repair missing closing brace\n output.insertBeforeLastWhitespace('}')\n return stack.pop()\n }\n\n function parseArrayComma(): boolean {\n if (parseCharacter(',')) {\n return stack.update(Caret.beforeValue)\n }\n\n return false\n }\n\n function parseArrayEnd(): boolean {\n if (parseCharacter(']')) {\n return stack.pop()\n }\n\n return false\n }\n\n function parseRepairMissingComma(): boolean {\n // repair missing comma\n if (!input.isEnd(i) && isStartOfValue(input.charAt(i))) {\n output.insertBeforeLastWhitespace(',')\n return stack.update(Caret.beforeValue)\n }\n\n return false\n }\n\n function parseRepairArrayEnd(): true {\n // repair missing closing bracket\n output.insertBeforeLastWhitespace(']')\n return stack.pop()\n }\n\n function parseRepairNdJsonEnd(): boolean {\n if (input.isEnd(i)) {\n output.push('\\n]')\n return stack.pop()\n }\n\n throwUnexpectedEnd()\n return false // just to make TS happy\n }\n\n function parseFunctionCallEnd(): true {\n if (skipCharacter(')')) {\n skipCharacter(';')\n }\n\n return stack.pop()\n }\n\n function parseRootStart(): boolean {\n parseMarkdownCodeBlock(['```', '[```', '{```'])\n\n return parseValue() || parseUnexpectedEnd()\n }\n\n function parseRootEnd(): boolean {\n parseMarkdownCodeBlock(['```', '```]', '```}'])\n\n const parsedComma = parseCharacter(',')\n parseWhitespaceAndSkipComments()\n\n if (\n isStartOfValue(input.charAt(i)) &&\n (output.endsWithIgnoringWhitespace(',') || output.endsWithIgnoringWhitespace('\\n'))\n ) {\n // start of a new value after end of the root level object: looks like\n // newline delimited JSON -> turn into a root level array\n if (!parsedComma) {\n // repair missing comma\n output.insertBeforeLastWhitespace(',')\n }\n\n output.unshift('[\\n')\n\n return stack.push(StackType.ndJson, Caret.beforeValue)\n }\n\n if (parsedComma) {\n // repair: remove trailing comma\n output.stripLastOccurrence(',')\n\n return stack.update(Caret.afterValue)\n }\n\n // repair redundant end braces and brackets\n while (input.charAt(i) === '}' || input.charAt(i) === ']') {\n i++\n parseWhitespaceAndSkipComments()\n }\n\n if (!input.isEnd(i)) {\n throwUnexpectedCharacter()\n }\n\n return false\n }\n\n function parseWhitespaceAndSkipComments(skipNewline = true): boolean {\n const start = i\n\n let changed = parseWhitespace(skipNewline)\n do {\n changed = parseComment()\n if (changed) {\n changed = parseWhitespace(skipNewline)\n }\n } while (changed)\n\n return i > start\n }\n\n function parseWhitespace(skipNewline: boolean): boolean {\n const _isWhiteSpace = skipNewline ? isWhitespace : isWhitespaceExceptNewline\n let whitespace = ''\n\n while (true) {\n if (_isWhiteSpace(input, i)) {\n whitespace += input.charAt(i)\n i++\n } else if (isSpecialWhitespace(input, i)) {\n // repair special whitespace\n whitespace += ' '\n i++\n } else {\n break\n }\n }\n\n if (whitespace.length > 0) {\n output.push(whitespace)\n return true\n }\n\n return false\n }\n\n function parseComment(): boolean {\n // find a block comment '/* ... */'\n if (input.charAt(i) === '/' && input.charAt(i + 1) === '*') {\n // repair block comment by skipping it\n while (!input.isEnd(i) && !atEndOfBlockComment(i)) {\n i++\n }\n i += 2\n\n return true\n }\n\n // find a line comment '// ...'\n if (input.charAt(i) === '/' && input.charAt(i + 1) === '/') {\n // repair line comment by skipping it\n while (!input.isEnd(i) && input.charAt(i) !== '\\n') {\n i++\n }\n\n return true\n }\n\n return false\n }\n\n function parseMarkdownCodeBlock(blocks: string[]): boolean {\n // find and skip over a Markdown fenced code block:\n // ``` ... ```\n // or\n // ```json ... ```\n if (skipMarkdownCodeBlock(blocks)) {\n if (isFunctionNameCharStart(input.charAt(i))) {\n // strip the optional language specifier like \"json\"\n while (!input.isEnd(i) && isFunctionNameChar(input.charAt(i))) {\n i++\n }\n }\n\n parseWhitespaceAndSkipComments()\n\n return true\n }\n\n return false\n }\n\n function skipMarkdownCodeBlock(blocks: string[]): boolean {\n for (const block of blocks) {\n const end = i + block.length\n if (input.substring(i, end) === block) {\n i = end\n return true\n }\n }\n\n return false\n }\n\n function parseCharacter(char: string): boolean {\n if (input.charAt(i) === char) {\n output.push(input.charAt(i))\n i++\n return true\n }\n\n return false\n }\n\n function skipCharacter(char: string): boolean {\n if (input.charAt(i) === char) {\n i++\n return true\n }\n\n return false\n }\n\n function skipEscapeCharacter(): boolean {\n return skipCharacter('\\\\')\n }\n\n /**\n * Skip ellipsis like \"[1,2,3,...]\" or \"[1,2,3,...,9]\" or \"[...,7,8,9]\"\n * or a similar construct in objects.\n */\n function skipEllipsis(): boolean {\n parseWhitespaceAndSkipComments()\n\n if (input.charAt(i) === '.' && input.charAt(i + 1) === '.' && input.charAt(i + 2) === '.') {\n // repair: remove the ellipsis (three dots) and optionally a comma\n i += 3\n parseWhitespaceAndSkipComments()\n skipCharacter(',')\n\n return true\n }\n\n return false\n }\n\n /**\n * Parse a string enclosed by double quotes \"...\". Can contain escaped quotes\n * Repair strings enclosed in single quotes or special quotes\n * Repair an escaped string\n *\n * The function can run in two stages:\n * - First, it assumes the string has a valid end quote\n * - If it turns out that the string does not have a valid end quote followed\n * by a delimiter (which should be the case), the function runs again in a\n * more conservative way, stopping the string at the first next delimiter\n * and fixing the string by inserting a quote there, or stopping at a\n * stop index detected in the first iteration.\n */\n function parseString(stopAtDelimiter = false, stopAtIndex = -1): boolean {\n let skipEscapeChars = input.charAt(i) === '\\\\'\n if (skipEscapeChars) {\n // repair: remove the first escape character\n i++\n skipEscapeChars = true\n }\n\n if (isQuote(input.charAt(i))) {\n // double quotes are correct JSON,\n // single quotes come from JavaScript for example, we assume it will have a correct single end quote too\n // otherwise, we will match any double-quote-like start with a double-quote-like end,\n // or any single-quote-like start with a single-quote-like end\n const isEndQuote = isDoubleQuote(input.charAt(i))\n ? isDoubleQuote\n : isSingleQuote(input.charAt(i))\n ? isSingleQuote\n : isSingleQuoteLike(input.charAt(i))\n ? isSingleQuoteLike\n : isDoubleQuoteLike\n\n const iBefore = i\n const oBefore = output.length()\n\n output.push('\"')\n i++\n\n while (true) {\n if (input.isEnd(i)) {\n // end of text, we have a missing quote somewhere\n\n const iPrev = prevNonWhitespaceIndex(i - 1)\n if (!stopAtDelimiter && isDelimiter(input.charAt(iPrev))) {\n // if the text ends with a delimiter, like [\"hello],\n // so the missing end quote should be inserted before this delimiter\n // retry parsing the string, stopping at the first next delimiter\n i = iBefore\n output.remove(oBefore)\n\n return parseString(true)\n }\n\n // repair missing quote\n output.insertBeforeLastWhitespace('\"')\n\n return stack.update(Caret.afterValue)\n }\n\n if (i === stopAtIndex) {\n // use the stop index detected in the first iteration, and repair end quote\n output.insertBeforeLastWhitespace('\"')\n\n return stack.update(Caret.afterValue)\n }\n\n if (isEndQuote(input.charAt(i))) {\n // end quote\n // let us check what is before and after the quote to verify whether this is a legit end quote\n const iQuote = i\n const oQuote = output.length()\n output.push('\"')\n i++\n\n parseWhitespaceAndSkipComments(false)\n\n if (\n stopAtDelimiter ||\n input.isEnd(i) ||\n (isDelimiter(input.charAt(i)) &&\n // only count the brackets inside the string when actually needed,\n // i.e. when the quote is directly followed by a closing bracket\n !isInsideUnclosedBracket(input.substring(iBefore, iQuote), input.charAt(i))) ||\n (isQuote(input.charAt(i)) && !nextQuoteIsEndQuote(i)) ||\n isDigit(input.charAt(i))\n ) {\n // The quote is followed by the end of the text, a delimiter, or a next value\n // so the quote is indeed the end of the string\n parseConcatenatedString()\n\n return stack.update(Caret.afterValue)\n }\n\n const iPrevChar = prevNonWhitespaceIndex(iQuote - 1)\n const prevChar = input.charAt(iPrevChar)\n\n if (prevChar === ',') {\n // A comma followed by a quote, like '{\"a\":\"b,c,\"d\":\"e\"}'.\n // We assume that the quote is a start quote, and that the end quote\n // should have been located right before the comma but is missing.\n i = iBefore\n output.remove(oBefore)\n\n return parseString(false, iPrevChar)\n }\n\n if (isDelimiter(prevChar)) {\n // This is not the right end quote: it is preceded by a delimiter,\n // and NOT followed by a delimiter. So, there is an end quote missing\n // parse the string again and then stop at the first next delimiter\n i = iBefore\n output.remove(oBefore)\n\n return parseString(true)\n }\n\n // revert to right after the quote but before any whitespace, and continue parsing the string\n output.remove(oQuote + 1)\n i = iQuote + 1\n\n // repair unescaped quote\n output.insertAt(oQuote, '\\\\')\n } else if (stopAtDelimiter && isUnquotedStringDelimiter(input.charAt(i))) {\n // we're in the mode to stop the string at the first delimiter\n // because there is an end quote missing\n\n // test start of an url like \"https://...\" (this would be parsed as a comment)\n if (\n input.charAt(i - 1) === ':' &&\n regexUrlStart.test(input.substring(iBefore + 1, i + 2))\n ) {\n while (!input.isEnd(i) && regexUrlChar.test(input.charAt(i))) {\n output.push(input.charAt(i))\n i++\n }\n }\n\n // repair missing quote\n output.insertBeforeLastWhitespace('\"')\n\n parseConcatenatedString()\n\n return stack.update(Caret.afterValue)\n } else if (input.charAt(i) === '\\\\') {\n // handle escaped content like \\n or \\u2605\n const char = input.charAt(i + 1)\n const escapeChar = escapeCharacters[char]\n if (escapeChar !== undefined) {\n output.push(input.substring(i, i + 2))\n i += 2\n } else if (char === 'u') {\n let j = 2\n while (j < 6 && isHex(input.charAt(i + j))) {\n j++\n }\n\n if (j === 6) {\n output.push(input.substring(i, i + 6))\n i += 6\n } else if (input.isEnd(i + j)) {\n // repair invalid or truncated unicode char at the end of the text\n // by removing the unicode char and ending the string here\n i += j\n } else {\n throwInvalidUnicodeCharacter()\n }\n } else if (char === '\\n') {\n // repair a backslash escaped newline (like in Bash scripts)\n output.push('\\\\n')\n i += 2\n } else {\n // repair invalid escape character: remove it\n output.push(char)\n i += 2\n }\n } else {\n // handle regular characters\n const char = input.charAt(i)\n\n if (char === '\"' && input.charAt(i - 1) !== '\\\\') {\n // repair unescaped double quote\n output.push(`\\\\${char}`)\n i++\n } else if (isControlCharacter(char)) {\n // unescaped control character\n output.push(controlCharacters[char])\n i++\n } else {\n if (!isValidStringCharacter(char)) {\n throwInvalidCharacter(char)\n }\n output.push(char)\n i++\n }\n }\n\n if (skipEscapeChars) {\n // repair: skipped escape character (nothing to do)\n skipEscapeCharacter()\n }\n }\n }\n\n return false\n }\n\n /**\n * Repair concatenated strings like \"hello\" + \"world\", change this into \"helloworld\"\n */\n function parseConcatenatedString(): boolean {\n let parsed = false\n\n parseWhitespaceAndSkipComments()\n while (input.charAt(i) === '+') {\n parsed = true\n i++\n parseWhitespaceAndSkipComments()\n\n // repair: remove the end quote of the first string\n output.stripLastOccurrence('\"', true)\n const start = output.length()\n const parsedStr = parseString()\n if (parsedStr) {\n // repair: remove the start quote of the second string\n output.remove(start, start + 1)\n } else {\n // repair: remove the + because it is not followed by a string\n output.insertBeforeLastWhitespace('\"')\n }\n }\n\n return parsed\n }\n\n /**\n * Parse a number like 2.4 or 2.4e6\n */\n function parseNumber(): boolean {\n const start = i\n let num = ''\n let invalid = false\n\n if (input.charAt(i) === '-') {\n num += input.charAt(i)\n i++\n\n if (!isDigit(input.charAt(i)) && atEndOfNumber()) {\n num += '0'\n }\n }\n\n if (input.charAt(i) === '0' && isDigit(input.charAt(i + 1))) {\n // the number has leading zeros like \"00123\" or \"001.23\"\n invalid = true\n }\n\n while (isDigit(input.charAt(i))) {\n num += input.charAt(i)\n i++\n }\n\n if (input.charAt(i) === '.') {\n if (num === '' || num === '-') {\n // repair missing leading zero before dot\n num += '0'\n }\n\n num += input.charAt(i)\n i++\n\n if (!isDigit(input.charAt(i))) {\n // repair a truncated number like \"2.\" into \"2.0\"\n num += '0'\n }\n\n while (isDigit(input.charAt(i))) {\n num += input.charAt(i)\n i++\n }\n }\n\n if (i > start) {\n if (input.charAt(i) === 'e' || input.charAt(i) === 'E') {\n if (num === '-') {\n invalid = true\n }\n\n num += input.charAt(i)\n i++\n\n if (input.charAt(i) === '-' || input.charAt(i) === '+') {\n num += input.charAt(i)\n i++\n }\n\n if (!isDigit(input.charAt(i))) {\n // repair a truncated number like \"2e\" into \"2e0\"\n num += '0'\n }\n\n while (isDigit(input.charAt(i))) {\n num += input.charAt(i)\n i++\n }\n }\n\n // if we're not at the end of the number by this point, allow this to be parsed as another type\n if (!atEndOfNumber()) {\n i = start\n return false\n }\n\n output.push(invalid ? `\"${input.substring(start, i)}\"` : num)\n return stack.update(Caret.afterValue)\n }\n\n return false\n }\n\n /**\n * Parse keywords true, false, null\n * Repair Python keywords True, False, None\n */\n function parseKeywords(): boolean {\n return (\n parseKeyword('true', 'true') ||\n parseKeyword('false', 'false') ||\n parseKeyword('null', 'null') ||\n // repair Python keywords True, False, None\n parseKeyword('True', 'true') ||\n parseKeyword('False', 'false') ||\n parseKeyword('None', 'null')\n )\n }\n\n function parseKeyword(name: string, value: string): boolean {\n if (\n input.substring(i, i + name.length) === name &&\n !isFunctionNameChar(input.charAt(i + name.length))\n ) {\n output.push(value)\n i += name.length\n return stack.update(Caret.afterValue)\n }\n\n return false\n }\n\n function parseUnquotedKey(): boolean {\n let end = findNextDelimiter(true, i)\n\n if (end !== null) {\n // first, go back to prevent getting trailing whitespaces in the string\n while (isWhitespace(input, end - 1) && end > i) {\n end--\n }\n\n const symbol = input.substring(i, end)\n output.push(JSON.stringify(symbol))\n i = end\n\n if (input.charAt(i) === '\"') {\n // we had a missing start quote, but now we encountered the end quote, so we can skip that one\n i++\n }\n\n return stack.update(Caret.afterValue) // we do not have a state Caret.afterKey, therefore we use afterValue here\n }\n\n return false\n }\n\n function findNextDelimiter(isKey: boolean, start: number): number | null {\n // note that the symbol can end with whitespaces: we stop at the next delimiter\n // also, note that we allow strings to contain a slash / in order to support repairing regular expressions\n let j = start\n while (\n !input.isEnd(j) &&\n !isUnquotedStringDelimiter(input.charAt(j)) &&\n !isQuote(input.charAt(j)) &&\n (!isKey || input.charAt(j) !== ':')\n ) {\n j++\n }\n\n return j > i ? j : null\n }\n\n function prevNonWhitespaceIndex(start: number): number {\n let prev = start\n\n while (prev > 0 && isWhitespace(input, prev)) {\n prev--\n }\n\n return prev\n }\n\n function nextQuoteIsEndQuote(index: number): boolean {\n // precondition: input.charAt(index) is a quote. Peek past it: if nothing meaningful\n // follows, that quote is the true end and this one is embedded (e.g. `\"The TV is 72\"\"`)\n let next = index + 1\n while (!input.isEnd(next) && isWhitespace(input, next)) {\n next++\n }\n\n return input.isEnd(next) || isDelimiter(input.charAt(next))\n }\n\n function atEndOfNumber() {\n return input.isEnd(i) || isDelimiter(input.charAt(i)) || isWhitespace(input, i)\n }\n\n function throwInvalidCharacter(char: string) {\n throw new JSONRepairError(`Invalid character ${JSON.stringify(char)}`, i)\n }\n\n function throwUnexpectedCharacter() {\n throw new JSONRepairError(`Unexpected character ${JSON.stringify(input.charAt(i))}`, i)\n }\n\n function throwUnexpectedEnd() {\n throw new JSONRepairError('Unexpected end of json string', i)\n }\n\n function throwObjectKeyExpected() {\n throw new JSONRepairError('Object key expected', i)\n }\n\n function throwColonExpected() {\n throw new JSONRepairError('Colon expected', i)\n }\n\n function throwInvalidUnicodeCharacter() {\n const chars = input.substring(i, i + 6)\n throw new JSONRepairError(`Invalid unicode character \"${chars}\"`, i)\n }\n\n function atEndOfBlockComment(i: number) {\n return input.charAt(i) === '*' && input.charAt(i + 1) === '/'\n }\n\n return {\n transform,\n flush\n }\n}\n"],"mappings":"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","ignoreList":[]}
{"version":3,"file":"core.js","names":["JSONRepairError","isControlCharacter","isDelimiter","isDigit","isDoubleQuote","isDoubleQuoteEntity","isDoubleQuoteLike","isFunctionNameChar","isFunctionNameCharStart","isHex","isInsideUnclosedBracket","isQuote","isSingleQuote","isSingleQuoteEntity","isSingleQuoteLike","isSpecialWhitespace","isStartOfValue","isUnquotedStringDelimiter","isValidStringCharacter","isWhitespace","isWhitespaceExceptNewline","matchHtmlEntity","maxHtmlEntityLength","regexUrlChar","regexUrlStart","createInputBuffer","createOutputBuffer","Caret","createStack","StackType","controlCharacters","escapeCharacters","b","f","n","r","t","jsonrepairCore","_ref","onData","bufferSize","chunkSize","input","output","write","i","iFlushed","stack","flushInputBuffer","flush","transform","chunk","push","currentLength","parse","close","parseWhitespaceAndSkipComments","type","object","caret","beforeKey","skipEllipsis","parseObjectKey","parseUnexpectedColon","parseRepairTrailingComma","parseRepairObjectEndOrComma","beforeValue","parseValue","parseRepairMissingObjectValue","afterValue","parseObjectComma","parseObjectEnd","array","parseRepairArrayEnd","parseArrayComma","parseArrayEnd","parseRepairMissingComma","ndJson","parseRepairNdJsonEnd","functionCall","parseFunctionCallEnd","root","parseRootStart","parseRootEnd","parseObjectStart","parseArrayStart","parseString","parseNumber","parseKeywords","parseRepairUnquotedString","parseRepairRegex","parseCharacter","skipCharacter","update","j","charAt","isEnd","k","findNextDelimiter","test","substring","symbol","JSON","stringify","start","endsWithIgnoringWhitespace","stripLastOccurrence","throwObjectKeyExpected","parseUnexpectedEnd","throwUnexpectedEnd","throwUnexpectedCharacter","parsedKey","parseUnquotedKey","truncatedText","insertBeforeLastWhitespace","throwColonExpected","pop","parseMarkdownCodeBlock","parsedComma","unshift","skipNewline","arguments","length","undefined","changed","parseWhitespace","parseComment","_isWhiteSpace","whitespace","atEndOfBlockComment","blocks","skipMarkdownCodeBlock","block","end","char","skipEscapeCharacter","htmlEntityWindow","at","max","Math","min","stopAtDelimiter","stopAtIndex","skipEscapeChars","openEntity","openedByEntity","isEndQuote","iBefore","oBefore","iPrev","prevNonWhitespaceIndex","remove","entity","iQuote","oQuote","nextQuoteIsEndQuote","parseConcatenatedString","iPrevChar","prevChar","insertAt","escapeChar","throwInvalidUnicodeCharacter","throwInvalidCharacter","parsed","parsedStr","num","invalid","atEndOfNumber","parseKeyword","name","value","isKey","prev","index","next","chars"],"sources":["../../../src/streaming/core.ts"],"sourcesContent":["import { JSONRepairError } from '../utils/JSONRepairError.js'\nimport {\n isControlCharacter,\n isDelimiter,\n isDigit,\n isDoubleQuote,\n isDoubleQuoteEntity,\n isDoubleQuoteLike,\n isFunctionNameChar,\n isFunctionNameCharStart,\n isHex,\n isInsideUnclosedBracket,\n isQuote,\n isSingleQuote,\n isSingleQuoteEntity,\n isSingleQuoteLike,\n isSpecialWhitespace,\n isStartOfValue,\n isUnquotedStringDelimiter,\n isValidStringCharacter,\n isWhitespace,\n isWhitespaceExceptNewline,\n matchHtmlEntity,\n maxHtmlEntityLength,\n regexUrlChar,\n regexUrlStart\n} from '../utils/stringUtils.js'\nimport { createInputBuffer } from './buffer/InputBuffer.js'\nimport { createOutputBuffer } from './buffer/OutputBuffer.js'\nimport { Caret, createStack, StackType } from './stack.js'\n\nconst controlCharacters: { [key: string]: string } = {\n '\\b': '\\\\b',\n '\\f': '\\\\f',\n '\\n': '\\\\n',\n '\\r': '\\\\r',\n '\\t': '\\\\t'\n}\n\n// map with all escape characters\nconst escapeCharacters: { [key: string]: string } = {\n '\"': '\"',\n '\\\\': '\\\\',\n '/': '/',\n b: '\\b',\n f: '\\f',\n n: '\\n',\n r: '\\r',\n t: '\\t'\n // note that \\u is handled separately in parseString()\n}\n\nexport interface JsonRepairCoreOptions {\n onData: (chunk: string) => void\n chunkSize?: number\n bufferSize?: number\n}\n\nexport interface JsonRepairCore {\n transform: (chunk: string) => void\n flush: () => void\n}\n\nexport function jsonrepairCore({\n onData,\n bufferSize = 65536,\n chunkSize = 65536\n}: JsonRepairCoreOptions): JsonRepairCore {\n const input = createInputBuffer()\n\n const output = createOutputBuffer({\n write: onData,\n bufferSize,\n chunkSize\n })\n\n let i = 0\n let iFlushed = 0\n const stack = createStack()\n\n function flushInputBuffer() {\n while (iFlushed < i - bufferSize - chunkSize) {\n iFlushed += chunkSize\n input.flush(iFlushed)\n }\n }\n\n function transform(chunk: string) {\n input.push(chunk)\n\n while (i < input.currentLength() - bufferSize && parse()) {\n // loop until there is nothing more to process\n }\n\n flushInputBuffer()\n }\n\n function flush() {\n input.close()\n\n while (parse()) {\n // loop until there is nothing more to process\n }\n\n output.flush()\n }\n\n function parse(): boolean {\n parseWhitespaceAndSkipComments()\n\n switch (stack.type) {\n case StackType.object: {\n switch (stack.caret) {\n case Caret.beforeKey:\n return (\n skipEllipsis() ||\n parseObjectKey() ||\n parseUnexpectedColon() ||\n parseRepairTrailingComma() ||\n parseRepairObjectEndOrComma()\n )\n case Caret.beforeValue:\n return parseValue() || parseRepairMissingObjectValue()\n case Caret.afterValue:\n return parseObjectComma() || parseObjectEnd() || parseRepairObjectEndOrComma()\n default:\n return false\n }\n }\n\n case StackType.array: {\n switch (stack.caret) {\n case Caret.beforeValue:\n return (\n skipEllipsis() || parseValue() || parseRepairTrailingComma() || parseRepairArrayEnd()\n )\n case Caret.afterValue:\n return (\n parseArrayComma() ||\n parseArrayEnd() ||\n parseRepairMissingComma() ||\n parseRepairArrayEnd()\n )\n default:\n return false\n }\n }\n\n case StackType.ndJson: {\n switch (stack.caret) {\n case Caret.beforeValue:\n return parseValue() || parseRepairTrailingComma()\n case Caret.afterValue:\n return parseArrayComma() || parseRepairMissingComma() || parseRepairNdJsonEnd()\n default:\n return false\n }\n }\n\n case StackType.functionCall: {\n switch (stack.caret) {\n case Caret.beforeValue:\n return parseValue()\n case Caret.afterValue:\n return parseFunctionCallEnd()\n default:\n return false\n }\n }\n\n case StackType.root: {\n switch (stack.caret) {\n case Caret.beforeValue:\n return parseRootStart()\n case Caret.afterValue:\n return parseRootEnd()\n default:\n return false\n }\n }\n\n default:\n return false\n }\n }\n\n function parseValue(): boolean {\n return (\n parseObjectStart() ||\n parseArrayStart() ||\n parseString() ||\n parseNumber() ||\n parseKeywords() ||\n parseRepairUnquotedString() ||\n parseRepairRegex()\n )\n }\n\n function parseObjectStart(): boolean {\n if (parseCharacter('{')) {\n parseWhitespaceAndSkipComments()\n\n skipEllipsis()\n\n if (skipCharacter(',')) {\n parseWhitespaceAndSkipComments()\n }\n\n if (parseCharacter('}')) {\n return stack.update(Caret.afterValue)\n }\n\n return stack.push(StackType.object, Caret.beforeKey)\n }\n\n return false\n }\n\n function parseArrayStart(): boolean {\n if (parseCharacter('[')) {\n parseWhitespaceAndSkipComments()\n\n skipEllipsis()\n\n if (skipCharacter(',')) {\n parseWhitespaceAndSkipComments()\n }\n\n if (parseCharacter(']')) {\n return stack.update(Caret.afterValue)\n }\n\n return stack.push(StackType.array, Caret.beforeValue)\n }\n\n return false\n }\n\n function parseRepairUnquotedString(): boolean {\n let j = i\n\n if (isFunctionNameCharStart(input.charAt(j))) {\n while (!input.isEnd(j) && isFunctionNameChar(input.charAt(j))) {\n j++\n }\n\n let k = j\n while (isWhitespace(input, k)) {\n k++\n }\n\n if (input.charAt(k) === '(') {\n // repair a MongoDB function call like NumberLong(\"2\")\n // repair a JSONP function call like callback({...});\n k++\n i = k\n return stack.push(StackType.functionCall, Caret.beforeValue)\n }\n }\n\n j = findNextDelimiter(false, j)\n if (j !== null) {\n // test start of an url like \"https://...\" (this would be parsed as a comment)\n if (input.charAt(j - 1) === ':' && regexUrlStart.test(input.substring(i, j + 2))) {\n while (!input.isEnd(j) && regexUrlChar.test(input.charAt(j))) {\n j++\n }\n }\n\n const symbol = input.substring(i, j)\n i = j\n\n output.push(symbol === 'undefined' ? 'null' : JSON.stringify(symbol))\n\n if (input.charAt(i) === '\"') {\n // we had a missing start quote, but now we encountered the end quote, so we can skip that one\n i++\n }\n\n return stack.update(Caret.afterValue)\n }\n\n return false\n }\n\n function parseRepairRegex() {\n if (input.charAt(i) === '/') {\n const start = i\n i++\n\n while (!input.isEnd(i) && (input.charAt(i) !== '/' || input.charAt(i - 1) === '\\\\')) {\n i++\n }\n i++\n\n output.push(JSON.stringify(input.substring(start, i)))\n\n return stack.update(Caret.afterValue)\n }\n }\n\n function parseRepairMissingObjectValue(): boolean {\n // repair missing object value\n output.push('null')\n return stack.update(Caret.afterValue)\n }\n\n function parseRepairTrailingComma(): boolean {\n // repair trailing comma\n if (output.endsWithIgnoringWhitespace(',')) {\n output.stripLastOccurrence(',')\n return stack.update(Caret.afterValue)\n }\n\n return false\n }\n\n function parseUnexpectedColon(): boolean {\n if (input.charAt(i) === ':') {\n throwObjectKeyExpected()\n }\n\n return false\n }\n\n function parseUnexpectedEnd(): boolean {\n if (input.isEnd(i)) {\n throwUnexpectedEnd()\n } else {\n throwUnexpectedCharacter()\n }\n\n return false\n }\n\n function parseObjectKey(): boolean {\n const parsedKey = parseString() || parseUnquotedKey()\n if (parsedKey) {\n parseWhitespaceAndSkipComments()\n\n if (parseCharacter(':')) {\n // expect a value after the :\n return stack.update(Caret.beforeValue)\n }\n\n const truncatedText = input.isEnd(i)\n if (isStartOfValue(input.charAt(i)) || truncatedText) {\n // repair missing colon\n output.insertBeforeLastWhitespace(':')\n return stack.update(Caret.beforeValue)\n }\n\n throwColonExpected()\n }\n\n return false\n }\n\n function parseObjectComma(): boolean {\n if (parseCharacter(',')) {\n return stack.update(Caret.beforeKey)\n }\n\n return false\n }\n\n function parseObjectEnd(): boolean {\n if (parseCharacter('}')) {\n return stack.pop()\n }\n\n return false\n }\n\n function parseRepairObjectEndOrComma(): true {\n // repair missing object end and trailing comma\n if (input.charAt(i) === '{') {\n output.stripLastOccurrence(',')\n output.insertBeforeLastWhitespace('}')\n return stack.pop()\n }\n\n // repair missing comma\n if (!input.isEnd(i) && isStartOfValue(input.charAt(i))) {\n output.insertBeforeLastWhitespace(',')\n return stack.update(Caret.beforeKey)\n }\n\n // repair missing closing brace\n output.insertBeforeLastWhitespace('}')\n return stack.pop()\n }\n\n function parseArrayComma(): boolean {\n if (parseCharacter(',')) {\n return stack.update(Caret.beforeValue)\n }\n\n return false\n }\n\n function parseArrayEnd(): boolean {\n if (parseCharacter(']')) {\n return stack.pop()\n }\n\n return false\n }\n\n function parseRepairMissingComma(): boolean {\n // repair missing comma\n if (!input.isEnd(i) && isStartOfValue(input.charAt(i))) {\n output.insertBeforeLastWhitespace(',')\n return stack.update(Caret.beforeValue)\n }\n\n return false\n }\n\n function parseRepairArrayEnd(): true {\n // repair missing closing bracket\n output.insertBeforeLastWhitespace(']')\n return stack.pop()\n }\n\n function parseRepairNdJsonEnd(): boolean {\n if (input.isEnd(i)) {\n output.push('\\n]')\n return stack.pop()\n }\n\n throwUnexpectedEnd()\n return false // just to make TS happy\n }\n\n function parseFunctionCallEnd(): true {\n if (skipCharacter(')')) {\n skipCharacter(';')\n }\n\n return stack.pop()\n }\n\n function parseRootStart(): boolean {\n parseMarkdownCodeBlock(['```', '[```', '{```'])\n\n return parseValue() || parseUnexpectedEnd()\n }\n\n function parseRootEnd(): boolean {\n parseMarkdownCodeBlock(['```', '```]', '```}'])\n\n const parsedComma = parseCharacter(',')\n parseWhitespaceAndSkipComments()\n\n if (\n isStartOfValue(input.charAt(i)) &&\n (output.endsWithIgnoringWhitespace(',') || output.endsWithIgnoringWhitespace('\\n'))\n ) {\n // start of a new value after end of the root level object: looks like\n // newline delimited JSON -> turn into a root level array\n if (!parsedComma) {\n // repair missing comma\n output.insertBeforeLastWhitespace(',')\n }\n\n output.unshift('[\\n')\n\n return stack.push(StackType.ndJson, Caret.beforeValue)\n }\n\n if (parsedComma) {\n // repair: remove trailing comma\n output.stripLastOccurrence(',')\n\n return stack.update(Caret.afterValue)\n }\n\n // repair redundant end braces and brackets\n while (input.charAt(i) === '}' || input.charAt(i) === ']') {\n i++\n parseWhitespaceAndSkipComments()\n }\n\n if (!input.isEnd(i)) {\n throwUnexpectedCharacter()\n }\n\n return false\n }\n\n function parseWhitespaceAndSkipComments(skipNewline = true): boolean {\n const start = i\n\n let changed = parseWhitespace(skipNewline)\n do {\n changed = parseComment()\n if (changed) {\n changed = parseWhitespace(skipNewline)\n }\n } while (changed)\n\n return i > start\n }\n\n function parseWhitespace(skipNewline: boolean): boolean {\n const _isWhiteSpace = skipNewline ? isWhitespace : isWhitespaceExceptNewline\n let whitespace = ''\n\n while (true) {\n if (_isWhiteSpace(input, i)) {\n whitespace += input.charAt(i)\n i++\n } else if (isSpecialWhitespace(input, i)) {\n // repair special whitespace\n whitespace += ' '\n i++\n } else {\n break\n }\n }\n\n if (whitespace.length > 0) {\n output.push(whitespace)\n return true\n }\n\n return false\n }\n\n function parseComment(): boolean {\n // find a block comment '/* ... */'\n if (input.charAt(i) === '/' && input.charAt(i + 1) === '*') {\n // repair block comment by skipping it\n while (!input.isEnd(i) && !atEndOfBlockComment(i)) {\n i++\n }\n i += 2\n\n return true\n }\n\n // find a line comment '// ...'\n if (input.charAt(i) === '/' && input.charAt(i + 1) === '/') {\n // repair line comment by skipping it\n while (!input.isEnd(i) && input.charAt(i) !== '\\n') {\n i++\n }\n\n return true\n }\n\n return false\n }\n\n function parseMarkdownCodeBlock(blocks: string[]): boolean {\n // find and skip over a Markdown fenced code block:\n // ``` ... ```\n // or\n // ```json ... ```\n if (skipMarkdownCodeBlock(blocks)) {\n if (isFunctionNameCharStart(input.charAt(i))) {\n // strip the optional language specifier like \"json\"\n while (!input.isEnd(i) && isFunctionNameChar(input.charAt(i))) {\n i++\n }\n }\n\n parseWhitespaceAndSkipComments()\n\n return true\n }\n\n return false\n }\n\n function skipMarkdownCodeBlock(blocks: string[]): boolean {\n for (const block of blocks) {\n const end = i + block.length\n if (input.substring(i, end) === block) {\n i = end\n return true\n }\n }\n\n return false\n }\n\n function parseCharacter(char: string): boolean {\n if (input.charAt(i) === char) {\n output.push(input.charAt(i))\n i++\n return true\n }\n\n return false\n }\n\n function skipCharacter(char: string): boolean {\n if (input.charAt(i) === char) {\n i++\n return true\n }\n\n return false\n }\n\n function skipEscapeCharacter(): boolean {\n return skipCharacter('\\\\')\n }\n\n /**\n * Skip ellipsis like \"[1,2,3,...]\" or \"[1,2,3,...,9]\" or \"[...,7,8,9]\"\n * or a similar construct in objects.\n */\n function skipEllipsis(): boolean {\n parseWhitespaceAndSkipComments()\n\n if (input.charAt(i) === '.' && input.charAt(i + 1) === '.' && input.charAt(i + 2) === '.') {\n // repair: remove the ellipsis (three dots) and optionally a comma\n i += 3\n parseWhitespaceAndSkipComments()\n skipCharacter(',')\n\n return true\n }\n\n return false\n }\n\n /**\n * Read a small window of buffered input at the given index to detect an HTML\n * entity, clamped so it never reads past the buffered input.\n */\n function htmlEntityWindow(at: number): string {\n const max = Math.min(at + maxHtmlEntityLength, input.currentLength())\n return at < max ? input.substring(at, max) : ''\n }\n\n /**\n * Parse a string enclosed by double quotes \"...\". Can contain escaped quotes\n * Repair strings enclosed in single quotes or special quotes\n * Repair an escaped string\n *\n * The function can run in two stages:\n * - First, it assumes the string has a valid end quote\n * - If it turns out that the string does not have a valid end quote followed\n * by a delimiter (which should be the case), the function runs again in a\n * more conservative way, stopping the string at the first next delimiter\n * and fixing the string by inserting a quote there, or stopping at a\n * stop index detected in the first iteration.\n */\n function parseString(stopAtDelimiter = false, stopAtIndex = -1): boolean {\n const skipEscapeChars = input.charAt(i) === '\\\\'\n if (skipEscapeChars) {\n // repair: remove the first escape character\n i++\n\n if (!isQuote(input.charAt(i))) {\n throwUnexpectedCharacter()\n }\n }\n\n // a string can be opened by a quote character, or by an HTML entity that\n // decodes to a quote (like &quot;) when repairing HTML-encoded JSON\n const openEntity = input.charAt(i) === '&' ? matchHtmlEntity(htmlEntityWindow(i)) : null\n const openedByEntity = isDoubleQuoteEntity(openEntity) || isSingleQuoteEntity(openEntity)\n\n if (isQuote(input.charAt(i)) || openedByEntity) {\n // double quotes are correct JSON,\n // single quotes come from JavaScript for example, we assume it will have a correct single end quote too\n // otherwise, we will match any double-quote-like start with a double-quote-like end,\n // or any single-quote-like start with a single-quote-like end\n const isEndQuote = isDoubleQuote(input.charAt(i))\n ? isDoubleQuote\n : isSingleQuote(input.charAt(i))\n ? isSingleQuote\n : isSingleQuoteLike(input.charAt(i))\n ? isSingleQuoteLike\n : isDoubleQuoteLike\n\n const iBefore = i\n const oBefore = output.length()\n\n output.push('\"')\n // when opened by an entity, skip past the whole entity; otherwise skip the quote\n i += openedByEntity && openEntity ? openEntity.length : 1\n\n while (true) {\n if (input.isEnd(i)) {\n // end of text, we have a missing quote somewhere\n\n const iPrev = prevNonWhitespaceIndex(i - 1)\n if (!stopAtDelimiter && isDelimiter(input.charAt(iPrev))) {\n // if the text ends with a delimiter, like [\"hello],\n // so the missing end quote should be inserted before this delimiter\n // retry parsing the string, stopping at the first next delimiter\n i = iBefore\n output.remove(oBefore)\n\n return parseString(true)\n }\n\n // repair missing quote\n output.insertBeforeLastWhitespace('\"')\n\n return stack.update(Caret.afterValue)\n }\n\n if (i === stopAtIndex) {\n // use the stop index detected in the first iteration, and repair end quote\n output.insertBeforeLastWhitespace('\"')\n\n return stack.update(Caret.afterValue)\n }\n\n // inside an entity-opened string a '&' is an entity; it is the end quote\n // when it decodes to the opening quote\n const entity =\n openedByEntity && input.charAt(i) === '&' ? matchHtmlEntity(htmlEntityWindow(i)) : null\n const isEnd =\n entity && openEntity ? entity.char === openEntity.char : isEndQuote(input.charAt(i))\n\n if (isEnd) {\n // end quote\n // let us check what is before and after the quote to verify whether this is a legit end quote\n const iQuote = i\n const oQuote = output.length()\n output.push('\"')\n i += entity ? entity.length : 1\n\n parseWhitespaceAndSkipComments(false)\n\n if (\n stopAtDelimiter ||\n input.isEnd(i) ||\n (isDelimiter(input.charAt(i)) &&\n // only count the brackets inside the string when actually needed,\n // i.e. when the quote is directly followed by a closing bracket\n !isInsideUnclosedBracket(input.substring(iBefore, iQuote), input.charAt(i))) ||\n (isQuote(input.charAt(i)) && !nextQuoteIsEndQuote(i)) ||\n isDigit(input.charAt(i))\n ) {\n // The quote is followed by the end of the text, a delimiter, or a next value\n // so the quote is indeed the end of the string\n parseConcatenatedString()\n\n return stack.update(Caret.afterValue)\n }\n\n if (input.charAt(i) === '\\\\') {\n throwUnexpectedCharacter()\n }\n\n const iPrevChar = prevNonWhitespaceIndex(iQuote - 1)\n const prevChar = input.charAt(iPrevChar)\n\n if (prevChar === ',') {\n // A comma followed by a quote, like '{\"a\":\"b,c,\"d\":\"e\"}'.\n // We assume that the quote is a start quote, and that the end quote\n // should have been located right before the comma but is missing.\n i = iBefore\n output.remove(oBefore)\n\n return parseString(false, iPrevChar)\n }\n\n if (isDelimiter(prevChar)) {\n // This is not the right end quote: it is preceded by a delimiter,\n // and NOT followed by a delimiter. So, there is an end quote missing\n // parse the string again and then stop at the first next delimiter\n i = iBefore\n output.remove(oBefore)\n\n return parseString(true)\n }\n\n // revert to right after the quote but before any whitespace, and continue parsing the string\n output.remove(oQuote + 1)\n i = iQuote + (entity ? entity.length : 1)\n\n // repair unescaped quote\n output.insertAt(oQuote, '\\\\')\n } else if (stopAtDelimiter && isUnquotedStringDelimiter(input.charAt(i))) {\n // we're in the mode to stop the string at the first delimiter\n // because there is an end quote missing\n\n // test start of an url like \"https://...\" (this would be parsed as a comment)\n if (\n input.charAt(i - 1) === ':' &&\n regexUrlStart.test(input.substring(iBefore + 1, i + 2))\n ) {\n while (!input.isEnd(i) && regexUrlChar.test(input.charAt(i))) {\n output.push(input.charAt(i))\n i++\n }\n }\n\n // repair missing quote\n output.insertBeforeLastWhitespace('\"')\n\n parseConcatenatedString()\n\n return stack.update(Caret.afterValue)\n } else if (entity) {\n // decode an HTML entity inside the string as content\n const char = entity.char\n if (char === '\"') {\n // repair unescaped double quote\n output.push('\\\\\"')\n } else if (isControlCharacter(char)) {\n output.push(controlCharacters[char])\n } else {\n output.push(char)\n }\n i += entity.length\n } else if (input.charAt(i) === '\\\\') {\n // handle escaped content like \\n or \\u2605\n const char = input.charAt(i + 1)\n const escapeChar = escapeCharacters[char]\n if (escapeChar !== undefined) {\n output.push(input.substring(i, i + 2))\n i += 2\n } else if (char === 'u') {\n let j = 2\n while (j < 6 && isHex(input.charAt(i + j))) {\n j++\n }\n\n if (j === 6) {\n output.push(input.substring(i, i + 6))\n i += 6\n } else if (input.isEnd(i + j)) {\n // repair invalid or truncated unicode char at the end of the text\n // by removing the unicode char and ending the string here\n i += j\n } else {\n throwInvalidUnicodeCharacter()\n }\n } else if (char === '\\n') {\n // repair a backslash escaped newline (like in Bash scripts)\n output.push('\\\\n')\n i += 2\n } else {\n // repair invalid escape character: remove it\n output.push(char)\n i += 2\n }\n } else {\n // handle regular characters\n const char = input.charAt(i)\n\n if (char === '\"' && input.charAt(i - 1) !== '\\\\') {\n // repair unescaped double quote\n output.push(`\\\\${char}`)\n i++\n } else if (isControlCharacter(char)) {\n // unescaped control character\n output.push(controlCharacters[char])\n i++\n } else {\n if (!isValidStringCharacter(char)) {\n throwInvalidCharacter(char)\n }\n output.push(char)\n i++\n }\n }\n\n if (skipEscapeChars) {\n // repair: skipped escape character (nothing to do)\n skipEscapeCharacter()\n }\n }\n }\n\n return false\n }\n\n /**\n * Repair concatenated strings like \"hello\" + \"world\", change this into \"helloworld\"\n */\n function parseConcatenatedString(): boolean {\n let parsed = false\n\n parseWhitespaceAndSkipComments()\n while (input.charAt(i) === '+') {\n parsed = true\n i++\n parseWhitespaceAndSkipComments()\n\n // repair: remove the end quote of the first string\n output.stripLastOccurrence('\"', true)\n const start = output.length()\n const parsedStr = parseString()\n if (parsedStr) {\n // repair: remove the start quote of the second string\n output.remove(start, start + 1)\n } else {\n // repair: remove the + because it is not followed by a string\n output.insertBeforeLastWhitespace('\"')\n }\n }\n\n return parsed\n }\n\n /**\n * Parse a number like 2.4 or 2.4e6\n */\n function parseNumber(): boolean {\n const start = i\n let num = ''\n let invalid = false\n\n if (input.charAt(i) === '-') {\n num += input.charAt(i)\n i++\n\n if (!isDigit(input.charAt(i)) && atEndOfNumber()) {\n num += '0'\n }\n }\n\n if (input.charAt(i) === '0' && isDigit(input.charAt(i + 1))) {\n // the number has leading zeros like \"00123\" or \"001.23\"\n invalid = true\n }\n\n while (isDigit(input.charAt(i))) {\n num += input.charAt(i)\n i++\n }\n\n if (input.charAt(i) === '.') {\n if (num === '' || num === '-') {\n // repair missing leading zero before dot\n num += '0'\n }\n\n num += input.charAt(i)\n i++\n\n if (!isDigit(input.charAt(i))) {\n // repair a truncated number like \"2.\" into \"2.0\"\n num += '0'\n }\n\n while (isDigit(input.charAt(i))) {\n num += input.charAt(i)\n i++\n }\n }\n\n if (i > start) {\n if (input.charAt(i) === 'e' || input.charAt(i) === 'E') {\n if (num === '-') {\n invalid = true\n }\n\n num += input.charAt(i)\n i++\n\n if (input.charAt(i) === '-' || input.charAt(i) === '+') {\n num += input.charAt(i)\n i++\n }\n\n if (!isDigit(input.charAt(i))) {\n // repair a truncated number like \"2e\" into \"2e0\"\n num += '0'\n }\n\n while (isDigit(input.charAt(i))) {\n num += input.charAt(i)\n i++\n }\n }\n\n // if we're not at the end of the number by this point, allow this to be parsed as another type\n if (!atEndOfNumber()) {\n i = start\n return false\n }\n\n output.push(invalid ? `\"${input.substring(start, i)}\"` : num)\n return stack.update(Caret.afterValue)\n }\n\n return false\n }\n\n /**\n * Parse keywords true, false, null\n * Repair Python keywords True, False, None\n */\n function parseKeywords(): boolean {\n return (\n parseKeyword('true', 'true') ||\n parseKeyword('false', 'false') ||\n parseKeyword('null', 'null') ||\n // repair Python keywords True, False, None\n parseKeyword('True', 'true') ||\n parseKeyword('False', 'false') ||\n parseKeyword('None', 'null')\n )\n }\n\n function parseKeyword(name: string, value: string): boolean {\n if (\n input.substring(i, i + name.length) === name &&\n !isFunctionNameChar(input.charAt(i + name.length))\n ) {\n output.push(value)\n i += name.length\n return stack.update(Caret.afterValue)\n }\n\n return false\n }\n\n function parseUnquotedKey(): boolean {\n let end = findNextDelimiter(true, i)\n\n if (end !== null) {\n // first, go back to prevent getting trailing whitespaces in the string\n while (isWhitespace(input, end - 1) && end > i) {\n end--\n }\n\n const symbol = input.substring(i, end)\n output.push(JSON.stringify(symbol))\n i = end\n\n if (input.charAt(i) === '\"') {\n // we had a missing start quote, but now we encountered the end quote, so we can skip that one\n i++\n }\n\n return stack.update(Caret.afterValue) // we do not have a state Caret.afterKey, therefore we use afterValue here\n }\n\n return false\n }\n\n function findNextDelimiter(isKey: boolean, start: number): number | null {\n // note that the symbol can end with whitespaces: we stop at the next delimiter\n // also, note that we allow strings to contain a slash / in order to support repairing regular expressions\n let j = start\n while (\n !input.isEnd(j) &&\n !isUnquotedStringDelimiter(input.charAt(j)) &&\n !isQuote(input.charAt(j)) &&\n (!isKey || input.charAt(j) !== ':')\n ) {\n j++\n }\n\n return j > i ? j : null\n }\n\n function prevNonWhitespaceIndex(start: number): number {\n let prev = start\n\n while (prev > 0 && isWhitespace(input, prev)) {\n prev--\n }\n\n return prev\n }\n\n function nextQuoteIsEndQuote(index: number): boolean {\n // precondition: input.charAt(index) is a quote. Peek past it: if nothing meaningful\n // follows, that quote is the true end and this one is embedded (e.g. `\"The TV is 72\"\"`)\n let next = index + 1\n while (!input.isEnd(next) && isWhitespace(input, next)) {\n next++\n }\n\n return input.isEnd(next) || isDelimiter(input.charAt(next))\n }\n\n function atEndOfNumber() {\n return input.isEnd(i) || isDelimiter(input.charAt(i)) || isWhitespace(input, i)\n }\n\n function throwInvalidCharacter(char: string) {\n throw new JSONRepairError(`Invalid character ${JSON.stringify(char)}`, i)\n }\n\n function throwUnexpectedCharacter() {\n throw new JSONRepairError(`Unexpected character ${JSON.stringify(input.charAt(i))}`, i)\n }\n\n function throwUnexpectedEnd() {\n throw new JSONRepairError('Unexpected end of json string', i)\n }\n\n function throwObjectKeyExpected() {\n throw new JSONRepairError('Object key expected', i)\n }\n\n function throwColonExpected() {\n throw new JSONRepairError('Colon expected', i)\n }\n\n function throwInvalidUnicodeCharacter() {\n const chars = input.substring(i, i + 6)\n throw new JSONRepairError(`Invalid unicode character \"${chars}\"`, i)\n }\n\n function atEndOfBlockComment(i: number) {\n return input.charAt(i) === '*' && input.charAt(i + 1) === '/'\n }\n\n return {\n transform,\n flush\n }\n}\n"],"mappings":"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","ignoreList":[]}

@@ -151,4 +151,67 @@ const codeSpace = 0x20; // " "

}
const namedHtmlEntities = {
'&quot;': '"',
'&amp;': '&',
'&lt;': '<',
'&gt;': '>',
'&apos;': "'"
};
// the longest entity we need to recognize is a numeric one like "&#x10FFFF;"
// (10 chars), so a window of 12 characters is always enough
export const maxHtmlEntityLength = 12;
/**
* Try to match an HTML entity at the start of the given fragment. The fragment
* is a small slice of text that begins exactly at the candidate '&'. Returns the
* decoded character and the number of characters consumed, or null when there
* is no complete, valid entity (for example a truncated "&quot" without ';').
*/
export function matchHtmlEntity(fragment) {
if (fragment.charAt(0) !== '&') {
return null;
}
const semicolon = fragment.indexOf(';');
if (semicolon === -1) {
return null;
}
const entity = fragment.substring(0, semicolon + 1);
const named = namedHtmlEntities[entity];
if (named !== undefined) {
return {
char: named,
length: entity.length
};
}
if (fragment.charAt(1) === '#') {
const body = fragment.substring(2, semicolon);
const hex = body.charAt(0) === 'x' || body.charAt(0) === 'X';
const digits = hex ? body.substring(1) : body;
if (digits.length > 0) {
const code = Number.parseInt(digits, hex ? 16 : 10);
if (!Number.isNaN(code) && code >= 0 && code <= 0x10ffff) {
return {
char: String.fromCodePoint(code),
length: entity.length
};
}
}
}
return null;
}
/**
* Test whether a matched HTML entity decodes to a double quote character
*/
export function isDoubleQuoteEntity(match) {
return match !== null && match.char === '"';
}
/**
* Test whether a matched HTML entity decodes to a single quote character
*/
export function isSingleQuoteEntity(match) {
return match !== null && match.char === "'";
}
/**
* Count the number of occurrences of a single character in a string

@@ -155,0 +218,0 @@ */

@@ -1,1 +0,1 @@

{"version":3,"file":"stringUtils.js","names":["codeSpace","codeNewline","codeTab","codeReturn","codeNonBreakingSpace","codeMongolianVowelSeparator","codeEnQuad","codeZeroWidthSpace","codeNarrowNoBreakSpace","codeMediumMathematicalSpace","codeIdeographicSpace","codeZeroWidthNoBreakSpace","isHex","char","test","isDigit","isValidStringCharacter","isDelimiter","includes","isFunctionNameCharStart","isFunctionNameChar","regexUrlStart","regexUrlChar","isUnquotedStringDelimiter","isStartOfValue","isQuote","regexStartOfValue","isControlCharacter","isWhitespace","text","index","code","charCodeAt","isWhitespaceExceptNewline","isSpecialWhitespace","isDoubleQuoteLike","isSingleQuoteLike","isDoubleQuote","isSingleQuote","stripLastOccurrence","textToStrip","stripRemainingText","arguments","length","undefined","lastIndexOf","substring","insertBeforeLastWhitespace","textToInsert","removeAtIndex","start","count","endsWithCommaOrNewline","countOccurrences","i","charAt","isInsideUnclosedBracket","closeChar"],"sources":["../../../src/utils/stringUtils.ts"],"sourcesContent":["const codeSpace = 0x20 // \" \"\nconst codeNewline = 0xa // \"\\n\"\nconst codeTab = 0x9 // \"\\t\"\nconst codeReturn = 0xd // \"\\r\"\n\n// unicode spaces: https://jkorpela.fi/chars/spaces.html\nconst codeNonBreakingSpace = 0x00a0\nconst codeMongolianVowelSeparator = 0x180e\nconst codeEnQuad = 0x2000\nconst codeZeroWidthSpace = 0x200b\nconst codeNarrowNoBreakSpace = 0x202f\nconst codeMediumMathematicalSpace = 0x205f\nconst codeIdeographicSpace = 0x3000\nconst codeZeroWidthNoBreakSpace = 0xfeff\n\nexport function isHex(char: string): boolean {\n return /^[0-9A-Fa-f]$/.test(char)\n}\n\nexport function isDigit(char: string): boolean {\n return char >= '0' && char <= '9'\n}\n\nexport function isValidStringCharacter(char: string): boolean {\n // note that the valid range is between \\u{0020} and \\u{10ffff},\n // but in JavaScript it is not possible to create a code point larger than\n // \\u{10ffff}, so there is no need to test for that here.\n return char >= '\\u0020'\n}\n\nexport function isDelimiter(char: string): boolean {\n return ',:[]/{}()\\n+'.includes(char)\n}\n\nexport function isFunctionNameCharStart(char: string) {\n return (\n (char >= 'a' && char <= 'z') || (char >= 'A' && char <= 'Z') || char === '_' || char === '$'\n )\n}\n\nexport function isFunctionNameChar(char: string) {\n return (\n (char >= 'a' && char <= 'z') ||\n (char >= 'A' && char <= 'Z') ||\n char === '_' ||\n char === '$' ||\n (char >= '0' && char <= '9')\n )\n}\n\n// matches \"https://\" and other schemas\nexport const regexUrlStart = /^(http|https|ftp|mailto|file|data|irc):\\/\\/$/\n\n// matches all valid URL characters EXCEPT \"[\", \"]\", and \",\", since that are important JSON delimiters\nexport const regexUrlChar = /^[A-Za-z0-9-._~:/?#@!$&'()*+;=]$/\n\nexport function isUnquotedStringDelimiter(char: string): boolean {\n return ',[]/{}\\n+'.includes(char)\n}\n\nexport function isStartOfValue(char: string): boolean {\n return isQuote(char) || regexStartOfValue.test(char)\n}\n\n// alpha, number, minus, or opening bracket or brace\nconst regexStartOfValue = /^[[{\\w-]$/\n\nexport function isControlCharacter(char: string) {\n return char === '\\n' || char === '\\r' || char === '\\t' || char === '\\b' || char === '\\f'\n}\n\nexport interface Text {\n charCodeAt: (index: number) => number\n}\n\n/**\n * Check if the given character is a whitespace character like space, tab, or\n * newline\n */\nexport function isWhitespace(text: Text, index: number): boolean {\n const code = text.charCodeAt(index)\n\n return code === codeSpace || code === codeNewline || code === codeTab || code === codeReturn\n}\n\n/**\n * Check if the given character is a whitespace character like space or tab,\n * but NOT a newline\n */\nexport function isWhitespaceExceptNewline(text: Text, index: number): boolean {\n const code = text.charCodeAt(index)\n\n return code === codeSpace || code === codeTab || code === codeReturn\n}\n\n/**\n * Check if the given character is a special whitespace character, some\n * unicode variant\n */\nexport function isSpecialWhitespace(text: Text, index: number): boolean {\n const code = text.charCodeAt(index)\n\n return (\n code === codeNonBreakingSpace ||\n code === codeMongolianVowelSeparator ||\n (code >= codeEnQuad && code <= codeZeroWidthSpace) ||\n code === codeNarrowNoBreakSpace ||\n code === codeMediumMathematicalSpace ||\n code === codeIdeographicSpace ||\n code === codeZeroWidthNoBreakSpace\n )\n}\n\n/**\n * Test whether the given character is a quote or double quote character.\n * Also tests for special variants of quotes.\n */\nexport function isQuote(char: string): boolean {\n // the first check double quotes, since that occurs most often\n return isDoubleQuoteLike(char) || isSingleQuoteLike(char)\n}\n\n/**\n * Test whether the given character is a double quote character.\n * Also tests for special variants of double quotes.\n */\nexport function isDoubleQuoteLike(char: string): boolean {\n return char === '\"' || char === '\\u201c' || char === '\\u201d'\n}\n\n/**\n * Test whether the given character is a double quote character.\n * Does NOT test for special variants of double quotes.\n */\nexport function isDoubleQuote(char: string): boolean {\n return char === '\"'\n}\n\n/**\n * Test whether the given character is a single quote character.\n * Also tests for special variants of single quotes.\n */\nexport function isSingleQuoteLike(char: string): boolean {\n return (\n char === \"'\" || char === '\\u2018' || char === '\\u2019' || char === '\\u0060' || char === '\\u00b4'\n )\n}\n\n/**\n * Test whether the given character is a single quote character.\n * Does NOT test for special variants of single quotes.\n */\nexport function isSingleQuote(char: string): boolean {\n return char === \"'\"\n}\n\n/**\n * Strip last occurrence of textToStrip from text\n */\nexport function stripLastOccurrence(\n text: string,\n textToStrip: string,\n stripRemainingText = false\n): string {\n const index = text.lastIndexOf(textToStrip)\n return index !== -1\n ? text.substring(0, index) + (stripRemainingText ? '' : text.substring(index + 1))\n : text\n}\n\nexport function insertBeforeLastWhitespace(text: string, textToInsert: string): string {\n let index = text.length\n\n if (!isWhitespace(text, index - 1)) {\n // no trailing whitespaces\n return text + textToInsert\n }\n\n while (isWhitespace(text, index - 1)) {\n index--\n }\n\n return text.substring(0, index) + textToInsert + text.substring(index)\n}\n\nexport function removeAtIndex(text: string, start: number, count: number) {\n return text.substring(0, start) + text.substring(start + count)\n}\n\n/**\n * Test whether a string ends with a newline or comma character and optional whitespace\n */\nexport function endsWithCommaOrNewline(text: string): boolean {\n return /[,\\n][ \\t\\r]*$/.test(text)\n}\n\n/**\n * Count the number of occurrences of a single character in a string\n */\nexport function countOccurrences(text: string, char: string): number {\n let count = 0\n for (let i = 0; i < text.length; i++) {\n if (text.charAt(i) === char) {\n count++\n }\n }\n return count\n}\n\n/**\n * Test whether `closeChar` is a closing bracket and `text` still contains an\n * unmatched opening bracket of the same kind. This indicates that the end of\n * `text` is located inside the brackets, for example the quote in\n * `\"a (b\") c\"` is followed by `)` while `(` is still unclosed.\n *\n * Note that the (potentially expensive) counting is only performed when\n * `closeChar` actually is a closing bracket.\n */\nexport function isInsideUnclosedBracket(text: string, closeChar: string): boolean {\n switch (closeChar) {\n case ')':\n return countOccurrences(text, '(') > countOccurrences(text, ')')\n case ']':\n return countOccurrences(text, '[') > countOccurrences(text, ']')\n case '}':\n return countOccurrences(text, '{') > countOccurrences(text, '}')\n default:\n return false\n }\n}\n"],"mappings":"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","ignoreList":[]}
{"version":3,"file":"stringUtils.js","names":["codeSpace","codeNewline","codeTab","codeReturn","codeNonBreakingSpace","codeMongolianVowelSeparator","codeEnQuad","codeZeroWidthSpace","codeNarrowNoBreakSpace","codeMediumMathematicalSpace","codeIdeographicSpace","codeZeroWidthNoBreakSpace","isHex","char","test","isDigit","isValidStringCharacter","isDelimiter","includes","isFunctionNameCharStart","isFunctionNameChar","regexUrlStart","regexUrlChar","isUnquotedStringDelimiter","isStartOfValue","isQuote","regexStartOfValue","isControlCharacter","isWhitespace","text","index","code","charCodeAt","isWhitespaceExceptNewline","isSpecialWhitespace","isDoubleQuoteLike","isSingleQuoteLike","isDoubleQuote","isSingleQuote","stripLastOccurrence","textToStrip","stripRemainingText","arguments","length","undefined","lastIndexOf","substring","insertBeforeLastWhitespace","textToInsert","removeAtIndex","start","count","endsWithCommaOrNewline","namedHtmlEntities","maxHtmlEntityLength","matchHtmlEntity","fragment","charAt","semicolon","indexOf","entity","named","body","hex","digits","Number","parseInt","isNaN","String","fromCodePoint","isDoubleQuoteEntity","match","isSingleQuoteEntity","countOccurrences","i","isInsideUnclosedBracket","closeChar"],"sources":["../../../src/utils/stringUtils.ts"],"sourcesContent":["const codeSpace = 0x20 // \" \"\nconst codeNewline = 0xa // \"\\n\"\nconst codeTab = 0x9 // \"\\t\"\nconst codeReturn = 0xd // \"\\r\"\n\n// unicode spaces: https://jkorpela.fi/chars/spaces.html\nconst codeNonBreakingSpace = 0x00a0\nconst codeMongolianVowelSeparator = 0x180e\nconst codeEnQuad = 0x2000\nconst codeZeroWidthSpace = 0x200b\nconst codeNarrowNoBreakSpace = 0x202f\nconst codeMediumMathematicalSpace = 0x205f\nconst codeIdeographicSpace = 0x3000\nconst codeZeroWidthNoBreakSpace = 0xfeff\n\nexport function isHex(char: string): boolean {\n return /^[0-9A-Fa-f]$/.test(char)\n}\n\nexport function isDigit(char: string): boolean {\n return char >= '0' && char <= '9'\n}\n\nexport function isValidStringCharacter(char: string): boolean {\n // note that the valid range is between \\u{0020} and \\u{10ffff},\n // but in JavaScript it is not possible to create a code point larger than\n // \\u{10ffff}, so there is no need to test for that here.\n return char >= '\\u0020'\n}\n\nexport function isDelimiter(char: string): boolean {\n return ',:[]/{}()\\n+'.includes(char)\n}\n\nexport function isFunctionNameCharStart(char: string) {\n return (\n (char >= 'a' && char <= 'z') || (char >= 'A' && char <= 'Z') || char === '_' || char === '$'\n )\n}\n\nexport function isFunctionNameChar(char: string) {\n return (\n (char >= 'a' && char <= 'z') ||\n (char >= 'A' && char <= 'Z') ||\n char === '_' ||\n char === '$' ||\n (char >= '0' && char <= '9')\n )\n}\n\n// matches \"https://\" and other schemas\nexport const regexUrlStart = /^(http|https|ftp|mailto|file|data|irc):\\/\\/$/\n\n// matches all valid URL characters EXCEPT \"[\", \"]\", and \",\", since that are important JSON delimiters\nexport const regexUrlChar = /^[A-Za-z0-9-._~:/?#@!$&'()*+;=]$/\n\nexport function isUnquotedStringDelimiter(char: string): boolean {\n return ',[]/{}\\n+'.includes(char)\n}\n\nexport function isStartOfValue(char: string): boolean {\n return isQuote(char) || regexStartOfValue.test(char)\n}\n\n// alpha, number, minus, or opening bracket or brace\nconst regexStartOfValue = /^[[{\\w-]$/\n\nexport function isControlCharacter(char: string) {\n return char === '\\n' || char === '\\r' || char === '\\t' || char === '\\b' || char === '\\f'\n}\n\nexport interface Text {\n charCodeAt: (index: number) => number\n}\n\n/**\n * Check if the given character is a whitespace character like space, tab, or\n * newline\n */\nexport function isWhitespace(text: Text, index: number): boolean {\n const code = text.charCodeAt(index)\n\n return code === codeSpace || code === codeNewline || code === codeTab || code === codeReturn\n}\n\n/**\n * Check if the given character is a whitespace character like space or tab,\n * but NOT a newline\n */\nexport function isWhitespaceExceptNewline(text: Text, index: number): boolean {\n const code = text.charCodeAt(index)\n\n return code === codeSpace || code === codeTab || code === codeReturn\n}\n\n/**\n * Check if the given character is a special whitespace character, some\n * unicode variant\n */\nexport function isSpecialWhitespace(text: Text, index: number): boolean {\n const code = text.charCodeAt(index)\n\n return (\n code === codeNonBreakingSpace ||\n code === codeMongolianVowelSeparator ||\n (code >= codeEnQuad && code <= codeZeroWidthSpace) ||\n code === codeNarrowNoBreakSpace ||\n code === codeMediumMathematicalSpace ||\n code === codeIdeographicSpace ||\n code === codeZeroWidthNoBreakSpace\n )\n}\n\n/**\n * Test whether the given character is a quote or double quote character.\n * Also tests for special variants of quotes.\n */\nexport function isQuote(char: string): boolean {\n // the first check double quotes, since that occurs most often\n return isDoubleQuoteLike(char) || isSingleQuoteLike(char)\n}\n\n/**\n * Test whether the given character is a double quote character.\n * Also tests for special variants of double quotes.\n */\nexport function isDoubleQuoteLike(char: string): boolean {\n return char === '\"' || char === '\\u201c' || char === '\\u201d'\n}\n\n/**\n * Test whether the given character is a double quote character.\n * Does NOT test for special variants of double quotes.\n */\nexport function isDoubleQuote(char: string): boolean {\n return char === '\"'\n}\n\n/**\n * Test whether the given character is a single quote character.\n * Also tests for special variants of single quotes.\n */\nexport function isSingleQuoteLike(char: string): boolean {\n return (\n char === \"'\" || char === '\\u2018' || char === '\\u2019' || char === '\\u0060' || char === '\\u00b4'\n )\n}\n\n/**\n * Test whether the given character is a single quote character.\n * Does NOT test for special variants of single quotes.\n */\nexport function isSingleQuote(char: string): boolean {\n return char === \"'\"\n}\n\n/**\n * Strip last occurrence of textToStrip from text\n */\nexport function stripLastOccurrence(\n text: string,\n textToStrip: string,\n stripRemainingText = false\n): string {\n const index = text.lastIndexOf(textToStrip)\n return index !== -1\n ? text.substring(0, index) + (stripRemainingText ? '' : text.substring(index + 1))\n : text\n}\n\nexport function insertBeforeLastWhitespace(text: string, textToInsert: string): string {\n let index = text.length\n\n if (!isWhitespace(text, index - 1)) {\n // no trailing whitespaces\n return text + textToInsert\n }\n\n while (isWhitespace(text, index - 1)) {\n index--\n }\n\n return text.substring(0, index) + textToInsert + text.substring(index)\n}\n\nexport function removeAtIndex(text: string, start: number, count: number) {\n return text.substring(0, start) + text.substring(start + count)\n}\n\n/**\n * Test whether a string ends with a newline or comma character and optional whitespace\n */\nexport function endsWithCommaOrNewline(text: string): boolean {\n return /[,\\n][ \\t\\r]*$/.test(text)\n}\n\nconst namedHtmlEntities: { [key: string]: string } = {\n '&quot;': '\"',\n '&amp;': '&',\n '&lt;': '<',\n '&gt;': '>',\n '&apos;': \"'\"\n}\n\n// the longest entity we need to recognize is a numeric one like \"&#x10FFFF;\"\n// (10 chars), so a window of 12 characters is always enough\nexport const maxHtmlEntityLength = 12\n\nexport interface HtmlEntityMatch {\n char: string // the decoded character\n length: number // number of source characters consumed, including & and ;\n}\n\n/**\n * Try to match an HTML entity at the start of the given fragment. The fragment\n * is a small slice of text that begins exactly at the candidate '&'. Returns the\n * decoded character and the number of characters consumed, or null when there\n * is no complete, valid entity (for example a truncated \"&quot\" without ';').\n */\nexport function matchHtmlEntity(fragment: string): HtmlEntityMatch | null {\n if (fragment.charAt(0) !== '&') {\n return null\n }\n\n const semicolon = fragment.indexOf(';')\n if (semicolon === -1) {\n return null\n }\n\n const entity = fragment.substring(0, semicolon + 1)\n const named = namedHtmlEntities[entity]\n if (named !== undefined) {\n return { char: named, length: entity.length }\n }\n\n if (fragment.charAt(1) === '#') {\n const body = fragment.substring(2, semicolon)\n const hex = body.charAt(0) === 'x' || body.charAt(0) === 'X'\n const digits = hex ? body.substring(1) : body\n if (digits.length > 0) {\n const code = Number.parseInt(digits, hex ? 16 : 10)\n if (!Number.isNaN(code) && code >= 0 && code <= 0x10ffff) {\n return { char: String.fromCodePoint(code), length: entity.length }\n }\n }\n }\n\n return null\n}\n\n/**\n * Test whether a matched HTML entity decodes to a double quote character\n */\nexport function isDoubleQuoteEntity(match: HtmlEntityMatch | null): boolean {\n return match !== null && match.char === '\"'\n}\n\n/**\n * Test whether a matched HTML entity decodes to a single quote character\n */\nexport function isSingleQuoteEntity(match: HtmlEntityMatch | null): boolean {\n return match !== null && match.char === \"'\"\n}\n\n/**\n * Count the number of occurrences of a single character in a string\n */\nexport function countOccurrences(text: string, char: string): number {\n let count = 0\n for (let i = 0; i < text.length; i++) {\n if (text.charAt(i) === char) {\n count++\n }\n }\n return count\n}\n\n/**\n * Test whether `closeChar` is a closing bracket and `text` still contains an\n * unmatched opening bracket of the same kind. This indicates that the end of\n * `text` is located inside the brackets, for example the quote in\n * `\"a (b\") c\"` is followed by `)` while `(` is still unclosed.\n *\n * Note that the (potentially expensive) counting is only performed when\n * `closeChar` actually is a closing bracket.\n */\nexport function isInsideUnclosedBracket(text: string, closeChar: string): boolean {\n switch (closeChar) {\n case ')':\n return countOccurrences(text, '(') > countOccurrences(text, ')')\n case ']':\n return countOccurrences(text, '[') > countOccurrences(text, ']')\n case '}':\n return countOccurrences(text, '{') > countOccurrences(text, '}')\n default:\n return false\n }\n}\n"],"mappings":"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","ignoreList":[]}

@@ -1,1 +0,1 @@

{"version":3,"file":"jsonrepair.d.ts","sourceRoot":"","sources":["../../../src/regular/jsonrepair.ts"],"names":[],"mappings":"AAiDA;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA+1B/C"}
{"version":3,"file":"jsonrepair.d.ts","sourceRoot":"","sources":["../../../src/regular/jsonrepair.ts"],"names":[],"mappings":"AAqDA;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAi4B/C"}

@@ -1,1 +0,1 @@

{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../src/streaming/core.ts"],"names":[],"mappings":"AAgDA,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,KAAK,EAAE,MAAM,IAAI,CAAA;CAClB;AAED,wBAAgB,cAAc,CAAC,EAC7B,MAAM,EACN,UAAkB,EAClB,SAAiB,EAClB,EAAE,qBAAqB,GAAG,cAAc,CAm/BxC"}
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../src/streaming/core.ts"],"names":[],"mappings":"AAoDA,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,KAAK,EAAE,MAAM,IAAI,CAAA;CAClB;AAED,wBAAgB,cAAc,CAAC,EAC7B,MAAM,EACN,UAAkB,EAClB,SAAiB,EAClB,EAAE,qBAAqB,GAAG,cAAc,CA4hCxC"}

@@ -65,3 +65,23 @@ export declare function isHex(char: string): boolean;

export declare function endsWithCommaOrNewline(text: string): boolean;
export declare const maxHtmlEntityLength = 12;
export interface HtmlEntityMatch {
char: string;
length: number;
}
/**
* Try to match an HTML entity at the start of the given fragment. The fragment
* is a small slice of text that begins exactly at the candidate '&'. Returns the
* decoded character and the number of characters consumed, or null when there
* is no complete, valid entity (for example a truncated "&quot" without ';').
*/
export declare function matchHtmlEntity(fragment: string): HtmlEntityMatch | null;
/**
* Test whether a matched HTML entity decodes to a double quote character
*/
export declare function isDoubleQuoteEntity(match: HtmlEntityMatch | null): boolean;
/**
* Test whether a matched HTML entity decodes to a single quote character
*/
export declare function isSingleQuoteEntity(match: HtmlEntityMatch | null): boolean;
/**
* Count the number of occurrences of a single character in a string

@@ -68,0 +88,0 @@ */

@@ -1,1 +0,1 @@

{"version":3,"file":"stringUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/stringUtils.ts"],"names":[],"mappings":"AAeA,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE3C;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE7C;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAK5D;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,WAInD;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,WAQ9C;AAGD,eAAO,MAAM,aAAa,QAAiD,CAAA;AAG3E,eAAO,MAAM,YAAY,QAAqC,CAAA;AAE9D,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE/D;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEpD;AAKD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,4CAE9C;AAED,MAAM,WAAW,IAAI;IACnB,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAA;CACtC;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAI/D;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAI5E;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAYtE;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAG7C;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAIvD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,kBAAkB,UAAQ,GACzB,MAAM,CAKR;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAarF;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,UAEvE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE5D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAQnE;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAWhF"}
{"version":3,"file":"stringUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/stringUtils.ts"],"names":[],"mappings":"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"}

@@ -164,4 +164,67 @@ (function (global, factory) {

}
const namedHtmlEntities = {
'&quot;': '"',
'&amp;': '&',
'&lt;': '<',
'&gt;': '>',
'&apos;': "'"
};
// the longest entity we need to recognize is a numeric one like "&#x10FFFF;"
// (10 chars), so a window of 12 characters is always enough
const maxHtmlEntityLength = 12;
/**
* Try to match an HTML entity at the start of the given fragment. The fragment
* is a small slice of text that begins exactly at the candidate '&'. Returns the
* decoded character and the number of characters consumed, or null when there
* is no complete, valid entity (for example a truncated "&quot" without ';').
*/
function matchHtmlEntity(fragment) {
if (fragment.charAt(0) !== '&') {
return null;
}
const semicolon = fragment.indexOf(';');
if (semicolon === -1) {
return null;
}
const entity = fragment.substring(0, semicolon + 1);
const named = namedHtmlEntities[entity];
if (named !== undefined) {
return {
char: named,
length: entity.length
};
}
if (fragment.charAt(1) === '#') {
const body = fragment.substring(2, semicolon);
const hex = body.charAt(0) === 'x' || body.charAt(0) === 'X';
const digits = hex ? body.substring(1) : body;
if (digits.length > 0) {
const code = Number.parseInt(digits, hex ? 16 : 10);
if (!Number.isNaN(code) && code >= 0 && code <= 0x10ffff) {
return {
char: String.fromCodePoint(code),
length: entity.length
};
}
}
}
return null;
}
/**
* Test whether a matched HTML entity decodes to a double quote character
*/
function isDoubleQuoteEntity(match) {
return match !== null && match.char === '"';
}
/**
* Test whether a matched HTML entity decodes to a single quote character
*/
function isSingleQuoteEntity(match) {
return match !== null && match.char === "'";
}
/**
* Count the number of occurrences of a single character in a string

@@ -562,9 +625,16 @@ */

let stopAtIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : -1;
let skipEscapeChars = text[i] === '\\';
const skipEscapeChars = text[i] === '\\';
if (skipEscapeChars) {
// repair: remove the first escape character
i++;
skipEscapeChars = true;
if (!isQuote(text[i])) {
throwUnexpectedCharacter();
}
}
if (isQuote(text[i])) {
// a string can be opened by a quote character, or by an HTML entity that
// decodes to a quote (like &quot;) when repairing HTML-encoded JSON
const openEntity = text[i] === '&' ? matchHtmlEntity(text.slice(i, i + maxHtmlEntityLength)) : null;
const openedByEntity = isDoubleQuoteEntity(openEntity) || isSingleQuoteEntity(openEntity);
if (isQuote(text[i]) || openedByEntity) {
// double quotes are correct JSON,

@@ -578,3 +648,4 @@ // single quotes come from JavaScript for example, we assume it will have a correct single end quote too

let str = '"';
i++;
// when opened by an entity, skip past the whole entity; otherwise skip the quote
i += openedByEntity && openEntity ? openEntity.length : 1;
while (true) {

@@ -605,3 +676,8 @@ if (i >= text.length) {

}
if (isEndQuote(text[i])) {
// inside an entity-opened string a '&' is an entity; it is the end quote
// when it decodes to the opening quote
const entity = openedByEntity && text[i] === '&' ? matchHtmlEntity(text.slice(i, i + maxHtmlEntityLength)) : null;
const isEnd = entity && openEntity ? entity.char === openEntity.char : isEndQuote(text[i]);
if (isEnd) {
// end quote

@@ -612,3 +688,3 @@ // let us check what is before and after the quote to verify whether this is a legit end quote

str += '"';
i++;
i += entity ? entity.length : 1;
output += str;

@@ -625,2 +701,5 @@ parseWhitespaceAndSkipComments(false);

}
if (text[i] === '\\') {
throwUnexpectedCharacter();
}
const iPrevChar = prevNonWhitespaceIndex(iQuote - 1);

@@ -647,3 +726,3 @@ const prevChar = text.charAt(iPrevChar);

output = output.substring(0, oBefore);
i = iQuote + 1;
i = iQuote + (entity ? entity.length : 1);

@@ -669,2 +748,14 @@ // repair unescaped quote

return true;
} else if (entity) {
// decode an HTML entity inside the string as content
const char = entity.char;
if (char === '"') {
// repair unescaped double quote
str += '\\"';
} else if (isControlCharacter(char)) {
str += controlCharacters[char];
} else {
str += char;
}
i += entity.length;
} else if (text[i] === '\\') {

@@ -671,0 +762,0 @@ // handle escaped content like \n or \u2605

@@ -1,1 +0,1 @@

{"version":3,"file":"jsonrepair.js","sources":["../esm/utils/JSONRepairError.js","../esm/utils/stringUtils.js","../esm/regular/jsonrepair.js"],"sourcesContent":["export class JSONRepairError extends Error {\n constructor(message, position) {\n super(`${message} at position ${position}`);\n this.position = position;\n }\n}\n//# sourceMappingURL=JSONRepairError.js.map","const codeSpace = 0x20; // \" \"\nconst codeNewline = 0xa; // \"\\n\"\nconst codeTab = 0x9; // \"\\t\"\nconst codeReturn = 0xd; // \"\\r\"\n\n// unicode spaces: https://jkorpela.fi/chars/spaces.html\nconst codeNonBreakingSpace = 0x00a0;\nconst codeMongolianVowelSeparator = 0x180e;\nconst codeEnQuad = 0x2000;\nconst codeZeroWidthSpace = 0x200b;\nconst codeNarrowNoBreakSpace = 0x202f;\nconst codeMediumMathematicalSpace = 0x205f;\nconst codeIdeographicSpace = 0x3000;\nconst codeZeroWidthNoBreakSpace = 0xfeff;\nexport function isHex(char) {\n return /^[0-9A-Fa-f]$/.test(char);\n}\nexport function isDigit(char) {\n return char >= '0' && char <= '9';\n}\nexport function isValidStringCharacter(char) {\n // note that the valid range is between \\u{0020} and \\u{10ffff},\n // but in JavaScript it is not possible to create a code point larger than\n // \\u{10ffff}, so there is no need to test for that here.\n return char >= '\\u0020';\n}\nexport function isDelimiter(char) {\n return ',:[]/{}()\\n+'.includes(char);\n}\nexport function isFunctionNameCharStart(char) {\n return char >= 'a' && char <= 'z' || char >= 'A' && char <= 'Z' || char === '_' || char === '$';\n}\nexport function isFunctionNameChar(char) {\n return char >= 'a' && char <= 'z' || char >= 'A' && char <= 'Z' || char === '_' || char === '$' || char >= '0' && char <= '9';\n}\n\n// matches \"https://\" and other schemas\nexport const regexUrlStart = /^(http|https|ftp|mailto|file|data|irc):\\/\\/$/;\n\n// matches all valid URL characters EXCEPT \"[\", \"]\", and \",\", since that are important JSON delimiters\nexport const regexUrlChar = /^[A-Za-z0-9-._~:/?#@!$&'()*+;=]$/;\nexport function isUnquotedStringDelimiter(char) {\n return ',[]/{}\\n+'.includes(char);\n}\nexport function isStartOfValue(char) {\n return isQuote(char) || regexStartOfValue.test(char);\n}\n\n// alpha, number, minus, or opening bracket or brace\nconst regexStartOfValue = /^[[{\\w-]$/;\nexport function isControlCharacter(char) {\n return char === '\\n' || char === '\\r' || char === '\\t' || char === '\\b' || char === '\\f';\n}\n/**\n * Check if the given character is a whitespace character like space, tab, or\n * newline\n */\nexport function isWhitespace(text, index) {\n const code = text.charCodeAt(index);\n return code === codeSpace || code === codeNewline || code === codeTab || code === codeReturn;\n}\n\n/**\n * Check if the given character is a whitespace character like space or tab,\n * but NOT a newline\n */\nexport function isWhitespaceExceptNewline(text, index) {\n const code = text.charCodeAt(index);\n return code === codeSpace || code === codeTab || code === codeReturn;\n}\n\n/**\n * Check if the given character is a special whitespace character, some\n * unicode variant\n */\nexport function isSpecialWhitespace(text, index) {\n const code = text.charCodeAt(index);\n return code === codeNonBreakingSpace || code === codeMongolianVowelSeparator || code >= codeEnQuad && code <= codeZeroWidthSpace || code === codeNarrowNoBreakSpace || code === codeMediumMathematicalSpace || code === codeIdeographicSpace || code === codeZeroWidthNoBreakSpace;\n}\n\n/**\n * Test whether the given character is a quote or double quote character.\n * Also tests for special variants of quotes.\n */\nexport function isQuote(char) {\n // the first check double quotes, since that occurs most often\n return isDoubleQuoteLike(char) || isSingleQuoteLike(char);\n}\n\n/**\n * Test whether the given character is a double quote character.\n * Also tests for special variants of double quotes.\n */\nexport function isDoubleQuoteLike(char) {\n return char === '\"' || char === '\\u201c' || char === '\\u201d';\n}\n\n/**\n * Test whether the given character is a double quote character.\n * Does NOT test for special variants of double quotes.\n */\nexport function isDoubleQuote(char) {\n return char === '\"';\n}\n\n/**\n * Test whether the given character is a single quote character.\n * Also tests for special variants of single quotes.\n */\nexport function isSingleQuoteLike(char) {\n return char === \"'\" || char === '\\u2018' || char === '\\u2019' || char === '\\u0060' || char === '\\u00b4';\n}\n\n/**\n * Test whether the given character is a single quote character.\n * Does NOT test for special variants of single quotes.\n */\nexport function isSingleQuote(char) {\n return char === \"'\";\n}\n\n/**\n * Strip last occurrence of textToStrip from text\n */\nexport function stripLastOccurrence(text, textToStrip) {\n let stripRemainingText = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n const index = text.lastIndexOf(textToStrip);\n return index !== -1 ? text.substring(0, index) + (stripRemainingText ? '' : text.substring(index + 1)) : text;\n}\nexport function insertBeforeLastWhitespace(text, textToInsert) {\n let index = text.length;\n if (!isWhitespace(text, index - 1)) {\n // no trailing whitespaces\n return text + textToInsert;\n }\n while (isWhitespace(text, index - 1)) {\n index--;\n }\n return text.substring(0, index) + textToInsert + text.substring(index);\n}\nexport function removeAtIndex(text, start, count) {\n return text.substring(0, start) + text.substring(start + count);\n}\n\n/**\n * Test whether a string ends with a newline or comma character and optional whitespace\n */\nexport function endsWithCommaOrNewline(text) {\n return /[,\\n][ \\t\\r]*$/.test(text);\n}\n\n/**\n * Count the number of occurrences of a single character in a string\n */\nexport function countOccurrences(text, char) {\n let count = 0;\n for (let i = 0; i < text.length; i++) {\n if (text.charAt(i) === char) {\n count++;\n }\n }\n return count;\n}\n\n/**\n * Test whether `closeChar` is a closing bracket and `text` still contains an\n * unmatched opening bracket of the same kind. This indicates that the end of\n * `text` is located inside the brackets, for example the quote in\n * `\"a (b\") c\"` is followed by `)` while `(` is still unclosed.\n *\n * Note that the (potentially expensive) counting is only performed when\n * `closeChar` actually is a closing bracket.\n */\nexport function isInsideUnclosedBracket(text, closeChar) {\n switch (closeChar) {\n case ')':\n return countOccurrences(text, '(') > countOccurrences(text, ')');\n case ']':\n return countOccurrences(text, '[') > countOccurrences(text, ']');\n case '}':\n return countOccurrences(text, '{') > countOccurrences(text, '}');\n default:\n return false;\n }\n}\n//# sourceMappingURL=stringUtils.js.map","import { JSONRepairError } from '../utils/JSONRepairError.js';\nimport { endsWithCommaOrNewline, insertBeforeLastWhitespace, isControlCharacter, isDelimiter, isDigit, isDoubleQuote, isDoubleQuoteLike, isFunctionNameChar, isFunctionNameCharStart, isHex, isInsideUnclosedBracket, isQuote, isSingleQuote, isSingleQuoteLike, isSpecialWhitespace, isStartOfValue, isUnquotedStringDelimiter, isValidStringCharacter, isWhitespace, isWhitespaceExceptNewline, regexUrlChar, regexUrlStart, removeAtIndex, stripLastOccurrence } from '../utils/stringUtils.js';\nconst controlCharacters = {\n '\\b': '\\\\b',\n '\\f': '\\\\f',\n '\\n': '\\\\n',\n '\\r': '\\\\r',\n '\\t': '\\\\t'\n};\n\n// map with all escape characters\nconst escapeCharacters = {\n '\"': '\"',\n '\\\\': '\\\\',\n '/': '/',\n b: '\\b',\n f: '\\f',\n n: '\\n',\n r: '\\r',\n t: '\\t'\n // note that \\u is handled separately in parseString()\n};\n\n/**\n * Repair a string containing an invalid JSON document.\n * For example changes JavaScript notation into JSON notation.\n *\n * Example:\n *\n * try {\n * const json = \"{name: 'John'}\"\n * const repaired = jsonrepair(json)\n * console.log(repaired)\n * // '{\"name\": \"John\"}'\n * } catch (err) {\n * console.error(err)\n * }\n *\n */\nexport function jsonrepair(text) {\n let i = 0; // current index in text\n let output = ''; // generated output\n\n parseMarkdownCodeBlock(['```', '[```', '{```']);\n const processed = parseValue();\n if (!processed) {\n throwUnexpectedEnd();\n }\n parseMarkdownCodeBlock(['```', '```]', '```}']);\n const processedComma = parseCharacter(',');\n if (processedComma) {\n parseWhitespaceAndSkipComments();\n }\n if (isStartOfValue(text[i]) && endsWithCommaOrNewline(output)) {\n // start of a new value after end of the root level object: looks like\n // newline delimited JSON -> turn into a root level array\n if (!processedComma) {\n // repair missing comma\n output = insertBeforeLastWhitespace(output, ',');\n }\n parseNewlineDelimitedJSON();\n } else if (processedComma) {\n // repair: remove trailing comma\n output = stripLastOccurrence(output, ',');\n }\n\n // repair redundant end quotes\n while (text[i] === '}' || text[i] === ']') {\n i++;\n parseWhitespaceAndSkipComments();\n }\n if (i >= text.length) {\n // reached the end of the document properly\n return output;\n }\n throwUnexpectedCharacter();\n function parseValue() {\n parseWhitespaceAndSkipComments();\n const processed = parseObject() || parseArray() || parseString() || parseNumber() || parseKeywords() || parseUnquotedString(false) || parseRegex();\n parseWhitespaceAndSkipComments();\n return processed;\n }\n function parseWhitespaceAndSkipComments() {\n let skipNewline = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n const start = i;\n let changed = parseWhitespace(skipNewline);\n do {\n changed = parseComment();\n if (changed) {\n changed = parseWhitespace(skipNewline);\n }\n } while (changed);\n return i > start;\n }\n function parseWhitespace(skipNewline) {\n const _isWhiteSpace = skipNewline ? isWhitespace : isWhitespaceExceptNewline;\n let whitespace = '';\n while (true) {\n if (_isWhiteSpace(text, i)) {\n whitespace += text[i];\n i++;\n } else if (isSpecialWhitespace(text, i)) {\n // repair special whitespace\n whitespace += ' ';\n i++;\n } else {\n break;\n }\n }\n if (whitespace.length > 0) {\n output += whitespace;\n return true;\n }\n return false;\n }\n function parseComment() {\n // find a block comment '/* ... */'\n if (text[i] === '/' && text[i + 1] === '*') {\n // repair block comment by skipping it\n while (i < text.length && !atEndOfBlockComment(text, i)) {\n i++;\n }\n i += 2;\n return true;\n }\n\n // find a line comment '// ...'\n if (text[i] === '/' && text[i + 1] === '/') {\n // repair line comment by skipping it\n while (i < text.length && text[i] !== '\\n') {\n i++;\n }\n return true;\n }\n return false;\n }\n function parseMarkdownCodeBlock(blocks) {\n // find and skip over a Markdown fenced code block:\n // ``` ... ```\n // or\n // ```json ... ```\n if (skipMarkdownCodeBlock(blocks)) {\n if (isFunctionNameCharStart(text[i])) {\n // strip the optional language specifier like \"json\"\n while (i < text.length && isFunctionNameChar(text[i])) {\n i++;\n }\n }\n parseWhitespaceAndSkipComments();\n return true;\n }\n return false;\n }\n function skipMarkdownCodeBlock(blocks) {\n parseWhitespace(true);\n for (const block of blocks) {\n const end = i + block.length;\n if (text.slice(i, end) === block) {\n i = end;\n return true;\n }\n }\n return false;\n }\n function parseCharacter(char) {\n if (text[i] === char) {\n output += text[i];\n i++;\n return true;\n }\n return false;\n }\n function skipCharacter(char) {\n if (text[i] === char) {\n i++;\n return true;\n }\n return false;\n }\n function skipEscapeCharacter() {\n return skipCharacter('\\\\');\n }\n\n /**\n * Skip ellipsis like \"[1,2,3,...]\" or \"[1,2,3,...,9]\" or \"[...,7,8,9]\"\n * or a similar construct in objects.\n */\n function skipEllipsis() {\n parseWhitespaceAndSkipComments();\n if (text[i] === '.' && text[i + 1] === '.' && text[i + 2] === '.') {\n // repair: remove the ellipsis (three dots) and optionally a comma\n i += 3;\n parseWhitespaceAndSkipComments();\n skipCharacter(',');\n return true;\n }\n return false;\n }\n\n /**\n * Parse an object like '{\"key\": \"value\"}'\n */\n function parseObject() {\n if (text[i] === '{') {\n output += '{';\n i++;\n parseWhitespaceAndSkipComments();\n\n // repair: skip leading comma like in {, message: \"hi\"}\n if (skipCharacter(',')) {\n parseWhitespaceAndSkipComments();\n }\n let initial = true;\n while (i < text.length && text[i] !== '}') {\n let processedComma;\n if (!initial) {\n processedComma = parseCharacter(',');\n if (!processedComma) {\n // repair missing comma\n output = insertBeforeLastWhitespace(output, ',');\n }\n parseWhitespaceAndSkipComments();\n } else {\n processedComma = true;\n }\n skipEllipsis();\n const processedKey = parseString() || parseUnquotedString(true);\n if (!processedKey) {\n if (text[i] === '}' || text[i] === '{' || text[i] === ']' || text[i] === '[' || text[i] === undefined) {\n // repair trailing comma\n if (!initial) {\n output = stripLastOccurrence(output, ',');\n }\n } else {\n throwObjectKeyExpected();\n }\n break;\n }\n parseWhitespaceAndSkipComments();\n const processedColon = parseCharacter(':');\n const truncatedText = i >= text.length;\n if (!processedColon) {\n if (isStartOfValue(text[i]) || truncatedText) {\n // repair missing colon\n output = insertBeforeLastWhitespace(output, ':');\n } else {\n throwColonExpected();\n }\n }\n const processedValue = parseValue();\n if (!processedValue) {\n if (processedColon || truncatedText) {\n // repair missing object value\n output += 'null';\n } else {\n throwColonExpected();\n }\n }\n initial = false;\n }\n if (text[i] === '}') {\n output += '}';\n i++;\n } else {\n // repair missing end bracket\n output = insertBeforeLastWhitespace(output, '}');\n }\n return true;\n }\n return false;\n }\n\n /**\n * Parse an array like '[\"item1\", \"item2\", ...]'\n */\n function parseArray() {\n if (text[i] === '[') {\n output += '[';\n i++;\n parseWhitespaceAndSkipComments();\n\n // repair: skip leading comma like in [,1,2,3]\n if (skipCharacter(',')) {\n parseWhitespaceAndSkipComments();\n }\n let initial = true;\n while (i < text.length && text[i] !== ']') {\n if (!initial) {\n const processedComma = parseCharacter(',');\n if (!processedComma) {\n // repair missing comma\n output = insertBeforeLastWhitespace(output, ',');\n }\n }\n skipEllipsis();\n const processedValue = parseValue();\n if (!processedValue) {\n // repair trailing comma\n if (!initial) {\n output = stripLastOccurrence(output, ',');\n }\n break;\n }\n initial = false;\n }\n if (text[i] === ']') {\n output += ']';\n i++;\n } else {\n // repair missing closing array bracket\n output = insertBeforeLastWhitespace(output, ']');\n }\n return true;\n }\n return false;\n }\n\n /**\n * Parse and repair Newline Delimited JSON (NDJSON):\n * multiple JSON objects separated by a newline character\n */\n function parseNewlineDelimitedJSON() {\n // repair NDJSON\n let initial = true;\n let processedValue = true;\n while (processedValue) {\n if (!initial) {\n // parse optional comma, insert when missing\n const processedComma = parseCharacter(',');\n if (!processedComma) {\n // repair: add missing comma\n output = insertBeforeLastWhitespace(output, ',');\n }\n } else {\n initial = false;\n }\n processedValue = parseValue();\n }\n if (!processedValue) {\n // repair: remove trailing comma\n output = stripLastOccurrence(output, ',');\n }\n\n // repair: wrap the output inside array brackets\n output = `[\\n${output}\\n]`;\n }\n\n /**\n * Parse a string enclosed by double quotes \"...\". Can contain escaped quotes\n * Repair strings enclosed in single quotes or special quotes\n * Repair an escaped string\n *\n * The function can run in two stages:\n * - First, it assumes the string has a valid end quote\n * - If it turns out that the string does not have a valid end quote followed\n * by a delimiter (which should be the case), the function runs again in a\n * more conservative way, stopping the string at the first next delimiter\n * and fixing the string by inserting a quote there, or stopping at a\n * stop index detected in the first iteration.\n */\n function parseString() {\n let stopAtDelimiter = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n let stopAtIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : -1;\n let skipEscapeChars = text[i] === '\\\\';\n if (skipEscapeChars) {\n // repair: remove the first escape character\n i++;\n skipEscapeChars = true;\n }\n if (isQuote(text[i])) {\n // double quotes are correct JSON,\n // single quotes come from JavaScript for example, we assume it will have a correct single end quote too\n // otherwise, we will match any double-quote-like start with a double-quote-like end,\n // or any single-quote-like start with a single-quote-like end\n const isEndQuote = isDoubleQuote(text[i]) ? isDoubleQuote : isSingleQuote(text[i]) ? isSingleQuote : isSingleQuoteLike(text[i]) ? isSingleQuoteLike : isDoubleQuoteLike;\n const iBefore = i;\n const oBefore = output.length;\n let str = '\"';\n i++;\n while (true) {\n if (i >= text.length) {\n // end of text, we are missing an end quote\n\n const iPrev = prevNonWhitespaceIndex(i - 1);\n if (!stopAtDelimiter && isDelimiter(text.charAt(iPrev))) {\n // if the text ends with a delimiter, like [\"hello],\n // so the missing end quote should be inserted before this delimiter\n // retry parsing the string, stopping at the first next delimiter\n i = iBefore;\n output = output.substring(0, oBefore);\n return parseString(true);\n }\n\n // repair missing quote\n str = insertBeforeLastWhitespace(str, '\"');\n output += str;\n return true;\n }\n if (i === stopAtIndex) {\n // use the stop index detected in the first iteration, and repair end quote\n str = insertBeforeLastWhitespace(str, '\"');\n output += str;\n return true;\n }\n if (isEndQuote(text[i])) {\n // end quote\n // let us check what is before and after the quote to verify whether this is a legit end quote\n const iQuote = i;\n const oQuote = str.length;\n str += '\"';\n i++;\n output += str;\n parseWhitespaceAndSkipComments(false);\n if (stopAtDelimiter || i >= text.length || isDelimiter(text[i]) &&\n // only count the brackets inside the string when actually needed,\n // i.e. when the quote is directly followed by a closing bracket\n !isInsideUnclosedBracket(str, text[i]) || isQuote(text[i]) && !nextQuoteIsEndQuote(i) || isDigit(text[i])) {\n // The quote is followed by the end of the text, a delimiter,\n // or a next value. So the quote is indeed the end of the string.\n parseConcatenatedString();\n return true;\n }\n const iPrevChar = prevNonWhitespaceIndex(iQuote - 1);\n const prevChar = text.charAt(iPrevChar);\n if (prevChar === ',') {\n // A comma followed by a quote, like '{\"a\":\"b,c,\"d\":\"e\"}'.\n // We assume that the quote is a start quote, and that the end quote\n // should have been located right before the comma but is missing.\n i = iBefore;\n output = output.substring(0, oBefore);\n return parseString(false, iPrevChar);\n }\n if (isDelimiter(prevChar)) {\n // This is not the right end quote: it is preceded by a delimiter,\n // and NOT followed by a delimiter. So, there is an end quote missing\n // parse the string again and then stop at the first next delimiter\n i = iBefore;\n output = output.substring(0, oBefore);\n return parseString(true);\n }\n\n // revert to right after the quote but before any whitespace, and continue parsing the string\n output = output.substring(0, oBefore);\n i = iQuote + 1;\n\n // repair unescaped quote\n str = `${str.substring(0, oQuote)}\\\\${str.substring(oQuote)}`;\n } else if (stopAtDelimiter && isUnquotedStringDelimiter(text[i])) {\n // we're in the mode to stop the string at the first delimiter\n // because there is an end quote missing\n\n // test start of an url like \"https://...\" (this would be parsed as a comment)\n if (text[i - 1] === ':' && regexUrlStart.test(text.substring(iBefore + 1, i + 2))) {\n while (i < text.length && regexUrlChar.test(text[i])) {\n str += text[i];\n i++;\n }\n }\n\n // repair missing quote\n str = insertBeforeLastWhitespace(str, '\"');\n output += str;\n parseConcatenatedString();\n return true;\n } else if (text[i] === '\\\\') {\n // handle escaped content like \\n or \\u2605\n const char = text.charAt(i + 1);\n const escapeChar = escapeCharacters[char];\n if (escapeChar !== undefined) {\n str += text.slice(i, i + 2);\n i += 2;\n } else if (char === 'u') {\n let j = 2;\n while (j < 6 && isHex(text[i + j])) {\n j++;\n }\n if (j === 6) {\n str += text.slice(i, i + 6);\n i += 6;\n } else if (i + j >= text.length) {\n // repair invalid or truncated unicode char at the end of the text\n // by removing the unicode char and ending the string here\n i = text.length;\n } else {\n throwInvalidUnicodeCharacter();\n }\n } else if (char === '\\n') {\n // repair a backslash escaped newline (like in Bash scripts)\n str += '\\\\n';\n i += 2;\n } else {\n // repair invalid escape character: remove it\n str += char;\n i += 2;\n }\n } else {\n // handle regular characters\n const char = text.charAt(i);\n if (char === '\"' && text[i - 1] !== '\\\\') {\n // repair unescaped double quote\n str += `\\\\${char}`;\n i++;\n } else if (isControlCharacter(char)) {\n // unescaped control character\n str += controlCharacters[char];\n i++;\n } else {\n if (!isValidStringCharacter(char)) {\n throwInvalidCharacter(char);\n }\n str += char;\n i++;\n }\n }\n if (skipEscapeChars) {\n // repair: skipped escape character (nothing to do)\n skipEscapeCharacter();\n }\n }\n }\n return false;\n }\n\n /**\n * Repair concatenated strings like \"hello\" + \"world\", change this into \"helloworld\"\n */\n function parseConcatenatedString() {\n let processed = false;\n parseWhitespaceAndSkipComments();\n while (text[i] === '+') {\n processed = true;\n i++;\n parseWhitespaceAndSkipComments();\n\n // repair: remove the end quote of the first string\n output = stripLastOccurrence(output, '\"', true);\n const start = output.length;\n const parsedStr = parseString();\n if (parsedStr) {\n // repair: remove the start quote of the second string\n output = removeAtIndex(output, start, 1);\n } else {\n // repair: remove the + because it is not followed by a string\n output = insertBeforeLastWhitespace(output, '\"');\n }\n }\n return processed;\n }\n\n /**\n * Parse a number like 2.4 or 2.4e6\n */\n function parseNumber() {\n const start = i;\n let num = '';\n let invalid = false;\n if (text[i] === '-') {\n num += text[i];\n i++;\n if (!isDigit(text[i]) && atEndOfNumber()) {\n // repair missing zero after minus like in \"-.2\" or \"-\"\n num += '0';\n }\n }\n if (text[i] === '0' && isDigit(text[i + 1])) {\n // the number has leading zeros like \"00123\" or \"001.23\"\n invalid = true;\n }\n while (isDigit(text[i])) {\n num += text[i];\n i++;\n }\n if (text[i] === '.') {\n if (num === '' || num === '-') {\n // repair missing leading zero before dot\n num += '0';\n }\n num += text[i];\n i++;\n if (!isDigit(text[i])) {\n // repair a truncated number like \"2.\" into \"2.0\"\n num += '0';\n }\n while (isDigit(text[i])) {\n num += text[i];\n i++;\n }\n }\n if (i > start) {\n if (text[i] === 'e' || text[i] === 'E') {\n if (num === '-') {\n invalid = true;\n }\n num += text[i];\n i++;\n if (text[i] === '-' || text[i] === '+') {\n num += text[i];\n i++;\n }\n if (!isDigit(text[i])) {\n // repair a truncated number like \"2e\" into \"2e0\"\n num += '0';\n }\n while (isDigit(text[i])) {\n num += text[i];\n i++;\n }\n }\n\n // if we're not at the end of the number by this point, allow this to be parsed as another type\n if (!atEndOfNumber()) {\n i = start;\n return false;\n }\n output += invalid ? `\"${text.substring(start, i)}\"` : num;\n return true;\n }\n return false;\n }\n\n /**\n * Parse keywords true, false, null\n * Repair Python keywords True, False, None\n */\n function parseKeywords() {\n return parseKeyword('true', 'true') || parseKeyword('false', 'false') || parseKeyword('null', 'null') ||\n // repair Python keywords True, False, None\n parseKeyword('True', 'true') || parseKeyword('False', 'false') || parseKeyword('None', 'null');\n }\n function parseKeyword(name, value) {\n if (text.slice(i, i + name.length) === name && !isFunctionNameChar(text[i + name.length])) {\n output += value;\n i += name.length;\n return true;\n }\n return false;\n }\n\n /**\n * Repair an unquoted string by adding quotes around it\n * Repair a MongoDB function call like NumberLong(\"2\")\n * Repair a JSONP function call like callback({...});\n */\n function parseUnquotedString(isKey) {\n // note that the symbol can end with whitespaces: we stop at the next delimiter\n // also, note that we allow strings to contain a slash / in order to support repairing regular expressions\n const start = i;\n if (isFunctionNameCharStart(text[i])) {\n while (i < text.length && isFunctionNameChar(text[i])) {\n i++;\n }\n let j = i;\n while (isWhitespace(text, j)) {\n j++;\n }\n if (text[j] === '(') {\n // repair a MongoDB function call like NumberLong(\"2\")\n // repair a JSONP function call like callback({...});\n i = j + 1;\n parseValue();\n if (text[i] === ')') {\n // repair: skip close bracket of function call\n i++;\n if (text[i] === ';') {\n // repair: skip semicolon after JSONP call\n i++;\n }\n }\n return true;\n }\n }\n while (i < text.length && !isUnquotedStringDelimiter(text[i]) && !isQuote(text[i]) && (!isKey || text[i] !== ':')) {\n i++;\n }\n\n // test start of an url like \"https://...\" (this would be parsed as a comment)\n if (text[i - 1] === ':' && regexUrlStart.test(text.substring(start, i + 2))) {\n while (i < text.length && regexUrlChar.test(text[i])) {\n i++;\n }\n }\n if (i > start) {\n // repair unquoted string\n // also, repair undefined into null\n\n // first, go back to prevent getting trailing whitespaces in the string\n while (isWhitespace(text, i - 1) && i > 0) {\n i--;\n }\n const symbol = text.slice(start, i);\n output += symbol === 'undefined' ? 'null' : JSON.stringify(symbol);\n if (text[i] === '\"') {\n // we had a missing start quote, but now we encountered the end quote, so we can skip that one\n i++;\n }\n return true;\n }\n }\n function parseRegex() {\n if (text[i] === '/') {\n const start = i;\n i++;\n while (i < text.length && (text[i] !== '/' || text[i - 1] === '\\\\')) {\n i++;\n }\n i++;\n output += JSON.stringify(text.substring(start, i));\n return true;\n }\n }\n function prevNonWhitespaceIndex(start) {\n let prev = start;\n while (prev > 0 && isWhitespace(text, prev)) {\n prev--;\n }\n return prev;\n }\n function nextQuoteIsEndQuote(index) {\n // precondition: text[index] is a quote. Peek past it: if nothing meaningful\n // follows, that quote is the true end and this one is embedded (e.g. `\"The TV is 72\"\"`)\n let next = index + 1;\n while (next < text.length && isWhitespace(text, next)) {\n next++;\n }\n return next >= text.length || isDelimiter(text[next]);\n }\n function atEndOfNumber() {\n return i >= text.length || isDelimiter(text[i]) || isWhitespace(text, i);\n }\n function throwInvalidCharacter(char) {\n throw new JSONRepairError(`Invalid character ${JSON.stringify(char)}`, i);\n }\n function throwUnexpectedCharacter() {\n throw new JSONRepairError(`Unexpected character ${JSON.stringify(text[i])}`, i);\n }\n function throwUnexpectedEnd() {\n throw new JSONRepairError('Unexpected end of json string', text.length);\n }\n function throwObjectKeyExpected() {\n throw new JSONRepairError('Object key expected', i);\n }\n function throwColonExpected() {\n throw new JSONRepairError('Colon expected', i);\n }\n function throwInvalidUnicodeCharacter() {\n const chars = text.slice(i, i + 6);\n throw new JSONRepairError(`Invalid unicode character \"${chars}\"`, i);\n }\n}\nfunction atEndOfBlockComment(text, i) {\n return text[i] === '*' && text[i + 1] === '/';\n}\n//# sourceMappingURL=jsonrepair.js.map"],"names":[],"mappings":"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"}
{"version":3,"file":"jsonrepair.js","sources":["../esm/utils/JSONRepairError.js","../esm/utils/stringUtils.js","../esm/regular/jsonrepair.js"],"sourcesContent":["export class JSONRepairError extends Error {\n constructor(message, position) {\n super(`${message} at position ${position}`);\n this.position = position;\n }\n}\n//# sourceMappingURL=JSONRepairError.js.map","const codeSpace = 0x20; // \" \"\nconst codeNewline = 0xa; // \"\\n\"\nconst codeTab = 0x9; // \"\\t\"\nconst codeReturn = 0xd; // \"\\r\"\n\n// unicode spaces: https://jkorpela.fi/chars/spaces.html\nconst codeNonBreakingSpace = 0x00a0;\nconst codeMongolianVowelSeparator = 0x180e;\nconst codeEnQuad = 0x2000;\nconst codeZeroWidthSpace = 0x200b;\nconst codeNarrowNoBreakSpace = 0x202f;\nconst codeMediumMathematicalSpace = 0x205f;\nconst codeIdeographicSpace = 0x3000;\nconst codeZeroWidthNoBreakSpace = 0xfeff;\nexport function isHex(char) {\n return /^[0-9A-Fa-f]$/.test(char);\n}\nexport function isDigit(char) {\n return char >= '0' && char <= '9';\n}\nexport function isValidStringCharacter(char) {\n // note that the valid range is between \\u{0020} and \\u{10ffff},\n // but in JavaScript it is not possible to create a code point larger than\n // \\u{10ffff}, so there is no need to test for that here.\n return char >= '\\u0020';\n}\nexport function isDelimiter(char) {\n return ',:[]/{}()\\n+'.includes(char);\n}\nexport function isFunctionNameCharStart(char) {\n return char >= 'a' && char <= 'z' || char >= 'A' && char <= 'Z' || char === '_' || char === '$';\n}\nexport function isFunctionNameChar(char) {\n return char >= 'a' && char <= 'z' || char >= 'A' && char <= 'Z' || char === '_' || char === '$' || char >= '0' && char <= '9';\n}\n\n// matches \"https://\" and other schemas\nexport const regexUrlStart = /^(http|https|ftp|mailto|file|data|irc):\\/\\/$/;\n\n// matches all valid URL characters EXCEPT \"[\", \"]\", and \",\", since that are important JSON delimiters\nexport const regexUrlChar = /^[A-Za-z0-9-._~:/?#@!$&'()*+;=]$/;\nexport function isUnquotedStringDelimiter(char) {\n return ',[]/{}\\n+'.includes(char);\n}\nexport function isStartOfValue(char) {\n return isQuote(char) || regexStartOfValue.test(char);\n}\n\n// alpha, number, minus, or opening bracket or brace\nconst regexStartOfValue = /^[[{\\w-]$/;\nexport function isControlCharacter(char) {\n return char === '\\n' || char === '\\r' || char === '\\t' || char === '\\b' || char === '\\f';\n}\n/**\n * Check if the given character is a whitespace character like space, tab, or\n * newline\n */\nexport function isWhitespace(text, index) {\n const code = text.charCodeAt(index);\n return code === codeSpace || code === codeNewline || code === codeTab || code === codeReturn;\n}\n\n/**\n * Check if the given character is a whitespace character like space or tab,\n * but NOT a newline\n */\nexport function isWhitespaceExceptNewline(text, index) {\n const code = text.charCodeAt(index);\n return code === codeSpace || code === codeTab || code === codeReturn;\n}\n\n/**\n * Check if the given character is a special whitespace character, some\n * unicode variant\n */\nexport function isSpecialWhitespace(text, index) {\n const code = text.charCodeAt(index);\n return code === codeNonBreakingSpace || code === codeMongolianVowelSeparator || code >= codeEnQuad && code <= codeZeroWidthSpace || code === codeNarrowNoBreakSpace || code === codeMediumMathematicalSpace || code === codeIdeographicSpace || code === codeZeroWidthNoBreakSpace;\n}\n\n/**\n * Test whether the given character is a quote or double quote character.\n * Also tests for special variants of quotes.\n */\nexport function isQuote(char) {\n // the first check double quotes, since that occurs most often\n return isDoubleQuoteLike(char) || isSingleQuoteLike(char);\n}\n\n/**\n * Test whether the given character is a double quote character.\n * Also tests for special variants of double quotes.\n */\nexport function isDoubleQuoteLike(char) {\n return char === '\"' || char === '\\u201c' || char === '\\u201d';\n}\n\n/**\n * Test whether the given character is a double quote character.\n * Does NOT test for special variants of double quotes.\n */\nexport function isDoubleQuote(char) {\n return char === '\"';\n}\n\n/**\n * Test whether the given character is a single quote character.\n * Also tests for special variants of single quotes.\n */\nexport function isSingleQuoteLike(char) {\n return char === \"'\" || char === '\\u2018' || char === '\\u2019' || char === '\\u0060' || char === '\\u00b4';\n}\n\n/**\n * Test whether the given character is a single quote character.\n * Does NOT test for special variants of single quotes.\n */\nexport function isSingleQuote(char) {\n return char === \"'\";\n}\n\n/**\n * Strip last occurrence of textToStrip from text\n */\nexport function stripLastOccurrence(text, textToStrip) {\n let stripRemainingText = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n const index = text.lastIndexOf(textToStrip);\n return index !== -1 ? text.substring(0, index) + (stripRemainingText ? '' : text.substring(index + 1)) : text;\n}\nexport function insertBeforeLastWhitespace(text, textToInsert) {\n let index = text.length;\n if (!isWhitespace(text, index - 1)) {\n // no trailing whitespaces\n return text + textToInsert;\n }\n while (isWhitespace(text, index - 1)) {\n index--;\n }\n return text.substring(0, index) + textToInsert + text.substring(index);\n}\nexport function removeAtIndex(text, start, count) {\n return text.substring(0, start) + text.substring(start + count);\n}\n\n/**\n * Test whether a string ends with a newline or comma character and optional whitespace\n */\nexport function endsWithCommaOrNewline(text) {\n return /[,\\n][ \\t\\r]*$/.test(text);\n}\nconst namedHtmlEntities = {\n '&quot;': '\"',\n '&amp;': '&',\n '&lt;': '<',\n '&gt;': '>',\n '&apos;': \"'\"\n};\n\n// the longest entity we need to recognize is a numeric one like \"&#x10FFFF;\"\n// (10 chars), so a window of 12 characters is always enough\nexport const maxHtmlEntityLength = 12;\n/**\n * Try to match an HTML entity at the start of the given fragment. The fragment\n * is a small slice of text that begins exactly at the candidate '&'. Returns the\n * decoded character and the number of characters consumed, or null when there\n * is no complete, valid entity (for example a truncated \"&quot\" without ';').\n */\nexport function matchHtmlEntity(fragment) {\n if (fragment.charAt(0) !== '&') {\n return null;\n }\n const semicolon = fragment.indexOf(';');\n if (semicolon === -1) {\n return null;\n }\n const entity = fragment.substring(0, semicolon + 1);\n const named = namedHtmlEntities[entity];\n if (named !== undefined) {\n return {\n char: named,\n length: entity.length\n };\n }\n if (fragment.charAt(1) === '#') {\n const body = fragment.substring(2, semicolon);\n const hex = body.charAt(0) === 'x' || body.charAt(0) === 'X';\n const digits = hex ? body.substring(1) : body;\n if (digits.length > 0) {\n const code = Number.parseInt(digits, hex ? 16 : 10);\n if (!Number.isNaN(code) && code >= 0 && code <= 0x10ffff) {\n return {\n char: String.fromCodePoint(code),\n length: entity.length\n };\n }\n }\n }\n return null;\n}\n\n/**\n * Test whether a matched HTML entity decodes to a double quote character\n */\nexport function isDoubleQuoteEntity(match) {\n return match !== null && match.char === '\"';\n}\n\n/**\n * Test whether a matched HTML entity decodes to a single quote character\n */\nexport function isSingleQuoteEntity(match) {\n return match !== null && match.char === \"'\";\n}\n\n/**\n * Count the number of occurrences of a single character in a string\n */\nexport function countOccurrences(text, char) {\n let count = 0;\n for (let i = 0; i < text.length; i++) {\n if (text.charAt(i) === char) {\n count++;\n }\n }\n return count;\n}\n\n/**\n * Test whether `closeChar` is a closing bracket and `text` still contains an\n * unmatched opening bracket of the same kind. This indicates that the end of\n * `text` is located inside the brackets, for example the quote in\n * `\"a (b\") c\"` is followed by `)` while `(` is still unclosed.\n *\n * Note that the (potentially expensive) counting is only performed when\n * `closeChar` actually is a closing bracket.\n */\nexport function isInsideUnclosedBracket(text, closeChar) {\n switch (closeChar) {\n case ')':\n return countOccurrences(text, '(') > countOccurrences(text, ')');\n case ']':\n return countOccurrences(text, '[') > countOccurrences(text, ']');\n case '}':\n return countOccurrences(text, '{') > countOccurrences(text, '}');\n default:\n return false;\n }\n}\n//# sourceMappingURL=stringUtils.js.map","import { JSONRepairError } from '../utils/JSONRepairError.js';\nimport { endsWithCommaOrNewline, insertBeforeLastWhitespace, isControlCharacter, isDelimiter, isDigit, isDoubleQuote, isDoubleQuoteEntity, isDoubleQuoteLike, isFunctionNameChar, isFunctionNameCharStart, isHex, isInsideUnclosedBracket, isQuote, isSingleQuote, isSingleQuoteEntity, isSingleQuoteLike, isSpecialWhitespace, isStartOfValue, isUnquotedStringDelimiter, isValidStringCharacter, isWhitespace, isWhitespaceExceptNewline, matchHtmlEntity, maxHtmlEntityLength, regexUrlChar, regexUrlStart, removeAtIndex, stripLastOccurrence } from '../utils/stringUtils.js';\nconst controlCharacters = {\n '\\b': '\\\\b',\n '\\f': '\\\\f',\n '\\n': '\\\\n',\n '\\r': '\\\\r',\n '\\t': '\\\\t'\n};\n\n// map with all escape characters\nconst escapeCharacters = {\n '\"': '\"',\n '\\\\': '\\\\',\n '/': '/',\n b: '\\b',\n f: '\\f',\n n: '\\n',\n r: '\\r',\n t: '\\t'\n // note that \\u is handled separately in parseString()\n};\n\n/**\n * Repair a string containing an invalid JSON document.\n * For example changes JavaScript notation into JSON notation.\n *\n * Example:\n *\n * try {\n * const json = \"{name: 'John'}\"\n * const repaired = jsonrepair(json)\n * console.log(repaired)\n * // '{\"name\": \"John\"}'\n * } catch (err) {\n * console.error(err)\n * }\n *\n */\nexport function jsonrepair(text) {\n let i = 0; // current index in text\n let output = ''; // generated output\n\n parseMarkdownCodeBlock(['```', '[```', '{```']);\n const processed = parseValue();\n if (!processed) {\n throwUnexpectedEnd();\n }\n parseMarkdownCodeBlock(['```', '```]', '```}']);\n const processedComma = parseCharacter(',');\n if (processedComma) {\n parseWhitespaceAndSkipComments();\n }\n if (isStartOfValue(text[i]) && endsWithCommaOrNewline(output)) {\n // start of a new value after end of the root level object: looks like\n // newline delimited JSON -> turn into a root level array\n if (!processedComma) {\n // repair missing comma\n output = insertBeforeLastWhitespace(output, ',');\n }\n parseNewlineDelimitedJSON();\n } else if (processedComma) {\n // repair: remove trailing comma\n output = stripLastOccurrence(output, ',');\n }\n\n // repair redundant end quotes\n while (text[i] === '}' || text[i] === ']') {\n i++;\n parseWhitespaceAndSkipComments();\n }\n if (i >= text.length) {\n // reached the end of the document properly\n return output;\n }\n throwUnexpectedCharacter();\n function parseValue() {\n parseWhitespaceAndSkipComments();\n const processed = parseObject() || parseArray() || parseString() || parseNumber() || parseKeywords() || parseUnquotedString(false) || parseRegex();\n parseWhitespaceAndSkipComments();\n return processed;\n }\n function parseWhitespaceAndSkipComments() {\n let skipNewline = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n const start = i;\n let changed = parseWhitespace(skipNewline);\n do {\n changed = parseComment();\n if (changed) {\n changed = parseWhitespace(skipNewline);\n }\n } while (changed);\n return i > start;\n }\n function parseWhitespace(skipNewline) {\n const _isWhiteSpace = skipNewline ? isWhitespace : isWhitespaceExceptNewline;\n let whitespace = '';\n while (true) {\n if (_isWhiteSpace(text, i)) {\n whitespace += text[i];\n i++;\n } else if (isSpecialWhitespace(text, i)) {\n // repair special whitespace\n whitespace += ' ';\n i++;\n } else {\n break;\n }\n }\n if (whitespace.length > 0) {\n output += whitespace;\n return true;\n }\n return false;\n }\n function parseComment() {\n // find a block comment '/* ... */'\n if (text[i] === '/' && text[i + 1] === '*') {\n // repair block comment by skipping it\n while (i < text.length && !atEndOfBlockComment(text, i)) {\n i++;\n }\n i += 2;\n return true;\n }\n\n // find a line comment '// ...'\n if (text[i] === '/' && text[i + 1] === '/') {\n // repair line comment by skipping it\n while (i < text.length && text[i] !== '\\n') {\n i++;\n }\n return true;\n }\n return false;\n }\n function parseMarkdownCodeBlock(blocks) {\n // find and skip over a Markdown fenced code block:\n // ``` ... ```\n // or\n // ```json ... ```\n if (skipMarkdownCodeBlock(blocks)) {\n if (isFunctionNameCharStart(text[i])) {\n // strip the optional language specifier like \"json\"\n while (i < text.length && isFunctionNameChar(text[i])) {\n i++;\n }\n }\n parseWhitespaceAndSkipComments();\n return true;\n }\n return false;\n }\n function skipMarkdownCodeBlock(blocks) {\n parseWhitespace(true);\n for (const block of blocks) {\n const end = i + block.length;\n if (text.slice(i, end) === block) {\n i = end;\n return true;\n }\n }\n return false;\n }\n function parseCharacter(char) {\n if (text[i] === char) {\n output += text[i];\n i++;\n return true;\n }\n return false;\n }\n function skipCharacter(char) {\n if (text[i] === char) {\n i++;\n return true;\n }\n return false;\n }\n function skipEscapeCharacter() {\n return skipCharacter('\\\\');\n }\n\n /**\n * Skip ellipsis like \"[1,2,3,...]\" or \"[1,2,3,...,9]\" or \"[...,7,8,9]\"\n * or a similar construct in objects.\n */\n function skipEllipsis() {\n parseWhitespaceAndSkipComments();\n if (text[i] === '.' && text[i + 1] === '.' && text[i + 2] === '.') {\n // repair: remove the ellipsis (three dots) and optionally a comma\n i += 3;\n parseWhitespaceAndSkipComments();\n skipCharacter(',');\n return true;\n }\n return false;\n }\n\n /**\n * Parse an object like '{\"key\": \"value\"}'\n */\n function parseObject() {\n if (text[i] === '{') {\n output += '{';\n i++;\n parseWhitespaceAndSkipComments();\n\n // repair: skip leading comma like in {, message: \"hi\"}\n if (skipCharacter(',')) {\n parseWhitespaceAndSkipComments();\n }\n let initial = true;\n while (i < text.length && text[i] !== '}') {\n let processedComma;\n if (!initial) {\n processedComma = parseCharacter(',');\n if (!processedComma) {\n // repair missing comma\n output = insertBeforeLastWhitespace(output, ',');\n }\n parseWhitespaceAndSkipComments();\n } else {\n processedComma = true;\n }\n skipEllipsis();\n const processedKey = parseString() || parseUnquotedString(true);\n if (!processedKey) {\n if (text[i] === '}' || text[i] === '{' || text[i] === ']' || text[i] === '[' || text[i] === undefined) {\n // repair trailing comma\n if (!initial) {\n output = stripLastOccurrence(output, ',');\n }\n } else {\n throwObjectKeyExpected();\n }\n break;\n }\n parseWhitespaceAndSkipComments();\n const processedColon = parseCharacter(':');\n const truncatedText = i >= text.length;\n if (!processedColon) {\n if (isStartOfValue(text[i]) || truncatedText) {\n // repair missing colon\n output = insertBeforeLastWhitespace(output, ':');\n } else {\n throwColonExpected();\n }\n }\n const processedValue = parseValue();\n if (!processedValue) {\n if (processedColon || truncatedText) {\n // repair missing object value\n output += 'null';\n } else {\n throwColonExpected();\n }\n }\n initial = false;\n }\n if (text[i] === '}') {\n output += '}';\n i++;\n } else {\n // repair missing end bracket\n output = insertBeforeLastWhitespace(output, '}');\n }\n return true;\n }\n return false;\n }\n\n /**\n * Parse an array like '[\"item1\", \"item2\", ...]'\n */\n function parseArray() {\n if (text[i] === '[') {\n output += '[';\n i++;\n parseWhitespaceAndSkipComments();\n\n // repair: skip leading comma like in [,1,2,3]\n if (skipCharacter(',')) {\n parseWhitespaceAndSkipComments();\n }\n let initial = true;\n while (i < text.length && text[i] !== ']') {\n if (!initial) {\n const processedComma = parseCharacter(',');\n if (!processedComma) {\n // repair missing comma\n output = insertBeforeLastWhitespace(output, ',');\n }\n }\n skipEllipsis();\n const processedValue = parseValue();\n if (!processedValue) {\n // repair trailing comma\n if (!initial) {\n output = stripLastOccurrence(output, ',');\n }\n break;\n }\n initial = false;\n }\n if (text[i] === ']') {\n output += ']';\n i++;\n } else {\n // repair missing closing array bracket\n output = insertBeforeLastWhitespace(output, ']');\n }\n return true;\n }\n return false;\n }\n\n /**\n * Parse and repair Newline Delimited JSON (NDJSON):\n * multiple JSON objects separated by a newline character\n */\n function parseNewlineDelimitedJSON() {\n // repair NDJSON\n let initial = true;\n let processedValue = true;\n while (processedValue) {\n if (!initial) {\n // parse optional comma, insert when missing\n const processedComma = parseCharacter(',');\n if (!processedComma) {\n // repair: add missing comma\n output = insertBeforeLastWhitespace(output, ',');\n }\n } else {\n initial = false;\n }\n processedValue = parseValue();\n }\n if (!processedValue) {\n // repair: remove trailing comma\n output = stripLastOccurrence(output, ',');\n }\n\n // repair: wrap the output inside array brackets\n output = `[\\n${output}\\n]`;\n }\n\n /**\n * Parse a string enclosed by double quotes \"...\". Can contain escaped quotes\n * Repair strings enclosed in single quotes or special quotes\n * Repair an escaped string\n *\n * The function can run in two stages:\n * - First, it assumes the string has a valid end quote\n * - If it turns out that the string does not have a valid end quote followed\n * by a delimiter (which should be the case), the function runs again in a\n * more conservative way, stopping the string at the first next delimiter\n * and fixing the string by inserting a quote there, or stopping at a\n * stop index detected in the first iteration.\n */\n function parseString() {\n let stopAtDelimiter = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n let stopAtIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : -1;\n const skipEscapeChars = text[i] === '\\\\';\n if (skipEscapeChars) {\n // repair: remove the first escape character\n i++;\n if (!isQuote(text[i])) {\n throwUnexpectedCharacter();\n }\n }\n\n // a string can be opened by a quote character, or by an HTML entity that\n // decodes to a quote (like &quot;) when repairing HTML-encoded JSON\n const openEntity = text[i] === '&' ? matchHtmlEntity(text.slice(i, i + maxHtmlEntityLength)) : null;\n const openedByEntity = isDoubleQuoteEntity(openEntity) || isSingleQuoteEntity(openEntity);\n if (isQuote(text[i]) || openedByEntity) {\n // double quotes are correct JSON,\n // single quotes come from JavaScript for example, we assume it will have a correct single end quote too\n // otherwise, we will match any double-quote-like start with a double-quote-like end,\n // or any single-quote-like start with a single-quote-like end\n const isEndQuote = isDoubleQuote(text[i]) ? isDoubleQuote : isSingleQuote(text[i]) ? isSingleQuote : isSingleQuoteLike(text[i]) ? isSingleQuoteLike : isDoubleQuoteLike;\n const iBefore = i;\n const oBefore = output.length;\n let str = '\"';\n // when opened by an entity, skip past the whole entity; otherwise skip the quote\n i += openedByEntity && openEntity ? openEntity.length : 1;\n while (true) {\n if (i >= text.length) {\n // end of text, we are missing an end quote\n\n const iPrev = prevNonWhitespaceIndex(i - 1);\n if (!stopAtDelimiter && isDelimiter(text.charAt(iPrev))) {\n // if the text ends with a delimiter, like [\"hello],\n // so the missing end quote should be inserted before this delimiter\n // retry parsing the string, stopping at the first next delimiter\n i = iBefore;\n output = output.substring(0, oBefore);\n return parseString(true);\n }\n\n // repair missing quote\n str = insertBeforeLastWhitespace(str, '\"');\n output += str;\n return true;\n }\n if (i === stopAtIndex) {\n // use the stop index detected in the first iteration, and repair end quote\n str = insertBeforeLastWhitespace(str, '\"');\n output += str;\n return true;\n }\n\n // inside an entity-opened string a '&' is an entity; it is the end quote\n // when it decodes to the opening quote\n const entity = openedByEntity && text[i] === '&' ? matchHtmlEntity(text.slice(i, i + maxHtmlEntityLength)) : null;\n const isEnd = entity && openEntity ? entity.char === openEntity.char : isEndQuote(text[i]);\n if (isEnd) {\n // end quote\n // let us check what is before and after the quote to verify whether this is a legit end quote\n const iQuote = i;\n const oQuote = str.length;\n str += '\"';\n i += entity ? entity.length : 1;\n output += str;\n parseWhitespaceAndSkipComments(false);\n if (stopAtDelimiter || i >= text.length || isDelimiter(text[i]) &&\n // only count the brackets inside the string when actually needed,\n // i.e. when the quote is directly followed by a closing bracket\n !isInsideUnclosedBracket(str, text[i]) || isQuote(text[i]) && !nextQuoteIsEndQuote(i) || isDigit(text[i])) {\n // The quote is followed by the end of the text, a delimiter,\n // or a next value. So the quote is indeed the end of the string.\n parseConcatenatedString();\n return true;\n }\n if (text[i] === '\\\\') {\n throwUnexpectedCharacter();\n }\n const iPrevChar = prevNonWhitespaceIndex(iQuote - 1);\n const prevChar = text.charAt(iPrevChar);\n if (prevChar === ',') {\n // A comma followed by a quote, like '{\"a\":\"b,c,\"d\":\"e\"}'.\n // We assume that the quote is a start quote, and that the end quote\n // should have been located right before the comma but is missing.\n i = iBefore;\n output = output.substring(0, oBefore);\n return parseString(false, iPrevChar);\n }\n if (isDelimiter(prevChar)) {\n // This is not the right end quote: it is preceded by a delimiter,\n // and NOT followed by a delimiter. So, there is an end quote missing\n // parse the string again and then stop at the first next delimiter\n i = iBefore;\n output = output.substring(0, oBefore);\n return parseString(true);\n }\n\n // revert to right after the quote but before any whitespace, and continue parsing the string\n output = output.substring(0, oBefore);\n i = iQuote + (entity ? entity.length : 1);\n\n // repair unescaped quote\n str = `${str.substring(0, oQuote)}\\\\${str.substring(oQuote)}`;\n } else if (stopAtDelimiter && isUnquotedStringDelimiter(text[i])) {\n // we're in the mode to stop the string at the first delimiter\n // because there is an end quote missing\n\n // test start of an url like \"https://...\" (this would be parsed as a comment)\n if (text[i - 1] === ':' && regexUrlStart.test(text.substring(iBefore + 1, i + 2))) {\n while (i < text.length && regexUrlChar.test(text[i])) {\n str += text[i];\n i++;\n }\n }\n\n // repair missing quote\n str = insertBeforeLastWhitespace(str, '\"');\n output += str;\n parseConcatenatedString();\n return true;\n } else if (entity) {\n // decode an HTML entity inside the string as content\n const char = entity.char;\n if (char === '\"') {\n // repair unescaped double quote\n str += '\\\\\"';\n } else if (isControlCharacter(char)) {\n str += controlCharacters[char];\n } else {\n str += char;\n }\n i += entity.length;\n } else if (text[i] === '\\\\') {\n // handle escaped content like \\n or \\u2605\n const char = text.charAt(i + 1);\n const escapeChar = escapeCharacters[char];\n if (escapeChar !== undefined) {\n str += text.slice(i, i + 2);\n i += 2;\n } else if (char === 'u') {\n let j = 2;\n while (j < 6 && isHex(text[i + j])) {\n j++;\n }\n if (j === 6) {\n str += text.slice(i, i + 6);\n i += 6;\n } else if (i + j >= text.length) {\n // repair invalid or truncated unicode char at the end of the text\n // by removing the unicode char and ending the string here\n i = text.length;\n } else {\n throwInvalidUnicodeCharacter();\n }\n } else if (char === '\\n') {\n // repair a backslash escaped newline (like in Bash scripts)\n str += '\\\\n';\n i += 2;\n } else {\n // repair invalid escape character: remove it\n str += char;\n i += 2;\n }\n } else {\n // handle regular characters\n const char = text.charAt(i);\n if (char === '\"' && text[i - 1] !== '\\\\') {\n // repair unescaped double quote\n str += `\\\\${char}`;\n i++;\n } else if (isControlCharacter(char)) {\n // unescaped control character\n str += controlCharacters[char];\n i++;\n } else {\n if (!isValidStringCharacter(char)) {\n throwInvalidCharacter(char);\n }\n str += char;\n i++;\n }\n }\n if (skipEscapeChars) {\n // repair: skipped escape character (nothing to do)\n skipEscapeCharacter();\n }\n }\n }\n return false;\n }\n\n /**\n * Repair concatenated strings like \"hello\" + \"world\", change this into \"helloworld\"\n */\n function parseConcatenatedString() {\n let processed = false;\n parseWhitespaceAndSkipComments();\n while (text[i] === '+') {\n processed = true;\n i++;\n parseWhitespaceAndSkipComments();\n\n // repair: remove the end quote of the first string\n output = stripLastOccurrence(output, '\"', true);\n const start = output.length;\n const parsedStr = parseString();\n if (parsedStr) {\n // repair: remove the start quote of the second string\n output = removeAtIndex(output, start, 1);\n } else {\n // repair: remove the + because it is not followed by a string\n output = insertBeforeLastWhitespace(output, '\"');\n }\n }\n return processed;\n }\n\n /**\n * Parse a number like 2.4 or 2.4e6\n */\n function parseNumber() {\n const start = i;\n let num = '';\n let invalid = false;\n if (text[i] === '-') {\n num += text[i];\n i++;\n if (!isDigit(text[i]) && atEndOfNumber()) {\n // repair missing zero after minus like in \"-.2\" or \"-\"\n num += '0';\n }\n }\n if (text[i] === '0' && isDigit(text[i + 1])) {\n // the number has leading zeros like \"00123\" or \"001.23\"\n invalid = true;\n }\n while (isDigit(text[i])) {\n num += text[i];\n i++;\n }\n if (text[i] === '.') {\n if (num === '' || num === '-') {\n // repair missing leading zero before dot\n num += '0';\n }\n num += text[i];\n i++;\n if (!isDigit(text[i])) {\n // repair a truncated number like \"2.\" into \"2.0\"\n num += '0';\n }\n while (isDigit(text[i])) {\n num += text[i];\n i++;\n }\n }\n if (i > start) {\n if (text[i] === 'e' || text[i] === 'E') {\n if (num === '-') {\n invalid = true;\n }\n num += text[i];\n i++;\n if (text[i] === '-' || text[i] === '+') {\n num += text[i];\n i++;\n }\n if (!isDigit(text[i])) {\n // repair a truncated number like \"2e\" into \"2e0\"\n num += '0';\n }\n while (isDigit(text[i])) {\n num += text[i];\n i++;\n }\n }\n\n // if we're not at the end of the number by this point, allow this to be parsed as another type\n if (!atEndOfNumber()) {\n i = start;\n return false;\n }\n output += invalid ? `\"${text.substring(start, i)}\"` : num;\n return true;\n }\n return false;\n }\n\n /**\n * Parse keywords true, false, null\n * Repair Python keywords True, False, None\n */\n function parseKeywords() {\n return parseKeyword('true', 'true') || parseKeyword('false', 'false') || parseKeyword('null', 'null') ||\n // repair Python keywords True, False, None\n parseKeyword('True', 'true') || parseKeyword('False', 'false') || parseKeyword('None', 'null');\n }\n function parseKeyword(name, value) {\n if (text.slice(i, i + name.length) === name && !isFunctionNameChar(text[i + name.length])) {\n output += value;\n i += name.length;\n return true;\n }\n return false;\n }\n\n /**\n * Repair an unquoted string by adding quotes around it\n * Repair a MongoDB function call like NumberLong(\"2\")\n * Repair a JSONP function call like callback({...});\n */\n function parseUnquotedString(isKey) {\n // note that the symbol can end with whitespaces: we stop at the next delimiter\n // also, note that we allow strings to contain a slash / in order to support repairing regular expressions\n const start = i;\n if (isFunctionNameCharStart(text[i])) {\n while (i < text.length && isFunctionNameChar(text[i])) {\n i++;\n }\n let j = i;\n while (isWhitespace(text, j)) {\n j++;\n }\n if (text[j] === '(') {\n // repair a MongoDB function call like NumberLong(\"2\")\n // repair a JSONP function call like callback({...});\n i = j + 1;\n parseValue();\n if (text[i] === ')') {\n // repair: skip close bracket of function call\n i++;\n if (text[i] === ';') {\n // repair: skip semicolon after JSONP call\n i++;\n }\n }\n return true;\n }\n }\n while (i < text.length && !isUnquotedStringDelimiter(text[i]) && !isQuote(text[i]) && (!isKey || text[i] !== ':')) {\n i++;\n }\n\n // test start of an url like \"https://...\" (this would be parsed as a comment)\n if (text[i - 1] === ':' && regexUrlStart.test(text.substring(start, i + 2))) {\n while (i < text.length && regexUrlChar.test(text[i])) {\n i++;\n }\n }\n if (i > start) {\n // repair unquoted string\n // also, repair undefined into null\n\n // first, go back to prevent getting trailing whitespaces in the string\n while (isWhitespace(text, i - 1) && i > 0) {\n i--;\n }\n const symbol = text.slice(start, i);\n output += symbol === 'undefined' ? 'null' : JSON.stringify(symbol);\n if (text[i] === '\"') {\n // we had a missing start quote, but now we encountered the end quote, so we can skip that one\n i++;\n }\n return true;\n }\n }\n function parseRegex() {\n if (text[i] === '/') {\n const start = i;\n i++;\n while (i < text.length && (text[i] !== '/' || text[i - 1] === '\\\\')) {\n i++;\n }\n i++;\n output += JSON.stringify(text.substring(start, i));\n return true;\n }\n }\n function prevNonWhitespaceIndex(start) {\n let prev = start;\n while (prev > 0 && isWhitespace(text, prev)) {\n prev--;\n }\n return prev;\n }\n function nextQuoteIsEndQuote(index) {\n // precondition: text[index] is a quote. Peek past it: if nothing meaningful\n // follows, that quote is the true end and this one is embedded (e.g. `\"The TV is 72\"\"`)\n let next = index + 1;\n while (next < text.length && isWhitespace(text, next)) {\n next++;\n }\n return next >= text.length || isDelimiter(text[next]);\n }\n function atEndOfNumber() {\n return i >= text.length || isDelimiter(text[i]) || isWhitespace(text, i);\n }\n function throwInvalidCharacter(char) {\n throw new JSONRepairError(`Invalid character ${JSON.stringify(char)}`, i);\n }\n function throwUnexpectedCharacter() {\n throw new JSONRepairError(`Unexpected character ${JSON.stringify(text[i])}`, i);\n }\n function throwUnexpectedEnd() {\n throw new JSONRepairError('Unexpected end of json string', text.length);\n }\n function throwObjectKeyExpected() {\n throw new JSONRepairError('Object key expected', i);\n }\n function throwColonExpected() {\n throw new JSONRepairError('Colon expected', i);\n }\n function throwInvalidUnicodeCharacter() {\n const chars = text.slice(i, i + 6);\n throw new JSONRepairError(`Invalid unicode character \"${chars}\"`, i);\n }\n}\nfunction atEndOfBlockComment(text, i) {\n return text[i] === '*' && text[i + 1] === '/';\n}\n//# sourceMappingURL=jsonrepair.js.map"],"names":[],"mappings":"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"}

@@ -1,3 +0,3 @@

((t,n)=>{"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n((t="undefined"!=typeof globalThis?globalThis:t||self).JSONRepair={})})(this,function(t){class x extends Error{constructor(t,n){super(t+" at position "+n),this.position=n}}let e=32,r=10,i=9,f=13,c=160,a=6158,h=8192,y=8203,O=8239,N=8287,J=12288,S=65279;function j(t){return"0"<=t&&t<="9"}function k(t){return",:[]/{}()\n+".includes(t)}function C(t){return"a"<=t&&t<="z"||"A"<=t&&t<="Z"||"_"===t||"$"===t}function m(t){return"a"<=t&&t<="z"||"A"<=t&&t<="Z"||"_"===t||"$"===t||"0"<=t&&t<="9"}let z=/^(http|https|ftp|mailto|file|data|irc):\/\/$/,E=/^[A-Za-z0-9-._~:/?#@!$&'()*+;=]$/;function I(t){return",[]/{}\n+".includes(t)}function T(t){return F(t)||n.test(t)}let n=/^[[{\w-]$/;function Z(t,n){t=t.charCodeAt(n);return t===e||t===r||t===i||t===f}function _(t,n){t=t.charCodeAt(n);return t===e||t===i||t===f}function F(t){return R(t)||q(t)}function R(t){return'"'===t||"“"===t||"”"===t}function U(t){return'"'===t}function q(t){return"'"===t||"‘"===t||"’"===t||"`"===t||"´"===t}function B(t){return"'"===t}function D(t,n,e){e=2<arguments.length&&void 0!==e&&e,n=t.lastIndexOf(n);return-1!==n?t.substring(0,n)+(e?"":t.substring(n+1)):t}function G(t,n){let e=t.length;if(!Z(t,e-1))return t+n;for(;Z(t,e-1);)e--;return t.substring(0,e)+n+t.substring(e)}function H(n,e){let r=0;for(let t=0;t<n.length;t++)n.charAt(t)===e&&r++;return r}let K={"\b":"\\b","\f":"\\f","\n":"\\n","\r":"\\r","\t":"\\t"},L={'"':'"',"\\":"\\","/":"/",b:"\b",f:"\f",n:"\n",r:"\r",t:"\t"};t.JSONRepairError=x,t.jsonrepair=function(g){let d=0,b="";if(n(["```","[```","{```"]),!f())throw new x("Unexpected end of json string",g.length);n(["```","```]","```}"]);var t=u(",");if(t&&v(),T(g[d])&&/[,\n][ \t\r]*$/.test(b)){t||(b=G(b,","));{let t=!0,n=!0;for(;n;)t?t=!1:u(",")||(b=G(b,",")),n=f();b=`[
${b=n?b:D(b,",")}
]`}}else t&&(b=D(b,","));for(;"}"===g[d]||"]"===g[d];)d++,v();if(d>=g.length)return b;throw new x("Unexpected character "+JSON.stringify(g[d]),d);function f(){v();var t=(()=>{if("{"!==g[d])return!1;{b+="{",d++,v(),p(",")&&v();let n=!0;for(;d<g.length&&"}"!==g[d];){let t;if(n?t=!0:((t=u(","))||(b=G(b,",")),v()),o(),!(w()||l(!0))){"}"===g[d]||"{"===g[d]||"]"===g[d]||"["===g[d]||void 0===g[d]?n||(b=D(b,",")):(()=>{throw new x("Object key expected",d)})();break}v();var e=u(":"),r=d>=g.length,i=(e||(T(g[d])||r?b=G(b,":"):s()),f());i||(e||r?b+="null":s()),n=!1}return"}"===g[d]?(b+="}",d++):b=G(b,"}"),!0}})()||(()=>{if("["!==g[d])return!1;{b+="[",d++,v(),p(",")&&v();let t=!0;for(;d<g.length&&"]"!==g[d];){t||u(",")||(b=G(b,",")),o();var n=f();if(!n){t||(b=D(b,","));break}t=!1}return"]"===g[d]?(b+="]",d++):b=G(b,"]"),!0}})()||w()||(()=>{let t=d,n="",e=!1;for("-"===g[d]&&(n+=g[d],d++,!j(g[d]))&&i()&&(n+="0"),"0"===g[d]&&j(g[d+1])&&(e=!0);j(g[d]);)n+=g[d],d++;if("."===g[d])for(""!==n&&"-"!==n||(n+="0"),n+=g[d],d++,j(g[d])||(n+="0");j(g[d]);)n+=g[d],d++;if(d>t){if("e"===g[d]||"E"===g[d])for("-"===n&&(e=!0),n+=g[d],d++,"-"!==g[d]&&"+"!==g[d]||(n+=g[d],d++),j(g[d])||(n+="0");j(g[d]);)n+=g[d],d++;return i()?(b+=e?`"${g.substring(t,d)}"`:n,!0):(d=t,!1)}return!1})()||e("true","true")||e("false","false")||e("null","null")||e("True","true")||e("False","false")||e("None","null")||l(!1)||(()=>{if("/"===g[d]){var t=d;for(d++;d<g.length&&("/"!==g[d]||"\\"===g[d-1]);)d++;return d++,b+=JSON.stringify(g.substring(t,d)),!0}})();return v(),t}function v(t){var n=!(0<arguments.length&&void 0!==t)||t;d;let e=r(n);for(;e=(e=(()=>{if("/"===g[d]&&"*"===g[d+1]){for(;d<g.length&&!((t,n)=>"*"===t[n]&&"/"===t[n+1])(g,d);)d++;d+=2}else{if("/"!==g[d]||"/"!==g[d+1])return!1;for(;d<g.length&&"\n"!==g[d];)d++}return!0})())&&r(n););d}function r(t){var n,e,r=t?Z:_;let i="";for(;;){if(r(g,d))i+=g[d];else{if(n=g,e=d,!((n=n.charCodeAt(e))===c||n===a||n>=h&&n<=y||n===O||n===N||n===J||n===S))break;i+=" "}d++}return 0<i.length&&(b+=i,!0)}function n(t){if((t=>{r(!0);for(var n of t){var e=d+n.length;if(g.slice(d,e)===n)return d=e,1}})(t)){if(C(g[d]))for(;d<g.length&&m(g[d]);)d++;v()}}function u(t){return g[d]===t&&(b+=g[d],d++,!0)}function p(t){return g[d]===t&&(d++,!0)}function o(){v(),"."===g[d]&&"."===g[d+1]&&"."===g[d+2]&&(d+=3,v(),p(","))}function w(t,n){var e=0<arguments.length&&void 0!==t&&t,r=1<arguments.length&&void 0!==n?n:-1;let i="\\"===g[d];if(i&&(d++,i=!0),F(g[d])){var f=U(g[d])?U:B(g[d])?B:q(g[d])?q:R,u=d,o=b.length;let n='"';for(d++;;){if(d>=g.length)return l=$(d-1),!e&&k(g.charAt(l))?(d=u,b=b.substring(0,o),w(!0)):(n=G(n,'"'),b+=n,!0);if(d===r)return n=G(n,'"'),b+=n,!0;if(f(g[d])){var l=d,s=n.length;if(n+='"',d++,b+=n,v(!1),e||d>=g.length||k(g[d])&&!((t,n)=>{switch(n){case")":return H(t,"(")>H(t,")");case"]":return H(t,"[")>H(t,"]");case"}":return H(t,"{")>H(t,"}");default:return}})(n,g[d])||F(g[d])&&!(t=>{let n=t+1;for(;n<g.length&&Z(g,n);)n++;return n>=g.length||k(g[n])})(d)||j(g[d]))return A(),!0;var c=$(l-1),a=g.charAt(c);if(","===a)return d=u,b=b.substring(0,o),w(!1,c);if(k(a))return d=u,b=b.substring(0,o),w(!0);b=b.substring(0,o),d=l+1,n=n.substring(0,s)+"\\"+n.substring(s)}else{if(e&&I(g[d])){if(":"===g[d-1]&&z.test(g.substring(u+1,d+2)))for(;d<g.length&&E.test(g[d]);)n+=g[d],d++;return n=G(n,'"'),b+=n,A(),!0}if("\\"===g[d]){c=g.charAt(d+1);if(void 0!==L[c])n+=g.slice(d,d+2),d+=2;else if("u"===c){let t=2;for(;t<6&&/^[0-9A-Fa-f]$/.test(g[d+t]);)t++;if(6===t)n+=g.slice(d,d+6),d+=6;else{if(!(d+t>=g.length))throw a=void 0,a=g.slice(d,d+6),new x(`Invalid unicode character "${a}"`,d);d=g.length}}else n+="\n"===c?"\\n":c,d+=2}else{var h,s=g.charAt(d);if('"'===s&&"\\"!==g[d-1])n+="\\"+s;else if("\n"===(h=s)||"\r"===h||"\t"===h||"\b"===h||"\f"===h)n+=K[s];else{if(!(" "<=s))throw h=void 0,h=s,new x("Invalid character "+JSON.stringify(h),d);n+=s}d++}}i&&p("\\")}}return!1}function A(){let t=!1;for(v();"+"===g[d];){t=!0,d++,v();var n=(b=D(b,'"',!0)).length,e=w();b=e?(e=b,n=n,r=1,e.substring(0,n)+e.substring(n+r)):G(b,'"')}var r;t}function e(t,n){return g.slice(d,d+t.length)===t&&!m(g[d+t.length])&&(b+=n,d+=t.length,!0)}function l(t){var n=d;if(C(g[d])){for(;d<g.length&&m(g[d]);)d++;let t=d;for(;Z(g,t);)t++;if("("===g[t])return d=t+1,f(),")"===g[d]&&(d++,";"===g[d])&&d++,!0}for(;d<g.length&&!I(g[d])&&!F(g[d])&&(!t||":"!==g[d]);)d++;if(":"===g[d-1]&&z.test(g.substring(n,d+2)))for(;d<g.length&&E.test(g[d]);)d++;if(d>n){for(;Z(g,d-1)&&0<d;)d--;n=g.slice(n,d);return b+="undefined"===n?"null":JSON.stringify(n),'"'===g[d]&&d++,!0}}function $(t){let n=t;for(;0<n&&Z(g,n);)n--;return n}function i(){return d>=g.length||k(g[d])||Z(g,d)}function s(){throw new x("Colon expected",d)}}});
((t,n)=>{"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n((t="undefined"!=typeof globalThis?globalThis:t||self).JSONRepair={})})(this,function(t){class m extends Error{constructor(t,n){super(t+" at position "+n),this.position=n}}let r=32,e=10,i=9,f=13,c=160,a=6158,h=8192,g=8203,d=8239,b=8287,S=12288,J=65279;function C(t){return"0"<=t&&t<="9"}function j(t){return",:[]/{}()\n+".includes(t)}function k(t){return"a"<=t&&t<="z"||"A"<=t&&t<="Z"||"_"===t||"$"===t}function I(t){return"a"<=t&&t<="z"||"A"<=t&&t<="Z"||"_"===t||"$"===t||"0"<=t&&t<="9"}let z=/^(http|https|ftp|mailto|file|data|irc):\/\/$/,E=/^[A-Za-z0-9-._~:/?#@!$&'()*+;=]$/;function T(t){return",[]/{}\n+".includes(t)}function Z(t){return U(t)||n.test(t)}let n=/^[[{\w-]$/;function _(t){return"\n"===t||"\r"===t||"\t"===t||"\b"===t||"\f"===t}function F(t,n){t=t.charCodeAt(n);return t===r||t===e||t===i||t===f}function R(t,n){t=t.charCodeAt(n);return t===r||t===i||t===f}function U(t){return q(t)||X(t)}function q(t){return'"'===t||"“"===t||"”"===t}function P(t){return'"'===t}function X(t){return"'"===t||"‘"===t||"’"===t||"`"===t||"´"===t}function B(t){return"'"===t}function D(t,n,r){r=2<arguments.length&&void 0!==r&&r,n=t.lastIndexOf(n);return-1!==n?t.substring(0,n)+(r?"":t.substring(n+1)):t}function G(t,n){let r=t.length;if(!F(t,r-1))return t+n;for(;F(t,r-1);)r--;return t.substring(0,r)+n+t.substring(r)}let u={"&quot;":'"',"&amp;":"&","&lt;":"<","&gt;":">","&apos;":"'"};function H(t){if("&"===t.charAt(0)){var n=t.indexOf(";");if(-1!==n){var r=t.substring(0,n+1),e=u[r];if(void 0!==e)return{char:e,length:r.length};if("#"===t.charAt(1)){e=t.substring(2,n),t="x"===e.charAt(0)||"X"===e.charAt(0),n=t?e.substring(1):e;if(0<n.length){e=Number.parseInt(n,t?16:10);if(!Number.isNaN(e)&&0<=e&&e<=1114111)return{char:String.fromCodePoint(e),length:r.length}}}}}return null}function K(n,r){let e=0;for(let t=0;t<n.length;t++)n.charAt(t)===r&&e++;return e}let L={"\b":"\\b","\f":"\\f","\n":"\\n","\r":"\\r","\t":"\\t"},M={'"':'"',"\\":"\\","/":"/",b:"\b",f:"\f",n:"\n",r:"\r",t:"\t"};t.JSONRepairError=m,t.jsonrepair=function(v){let p=0,A="";if(n(["```","[```","{```"]),!f())throw new m("Unexpected end of json string",v.length);n(["```","```]","```}"]);var t=u(",");if(t&&w(),Z(v[p])&&/[,\n][ \t\r]*$/.test(A)){t||(A=G(A,","));{let t=!0,n=!0;for(;n;)t?t=!1:u(",")||(A=G(A,",")),n=f();A=`[
${A=n?A:D(A,",")}
]`}}else t&&(A=D(A,","));for(;"}"===v[p]||"]"===v[p];)p++,w();if(p>=v.length)return A;function f(){w();var t=(()=>{if("{"!==v[p])return!1;{A+="{",p++,w(),x(",")&&w();let n=!0;for(;p<v.length&&"}"!==v[p];){let t;if(n?t=!0:((t=u(","))||(A=G(A,",")),w()),l(),!(N()||o(!0))){"}"===v[p]||"{"===v[p]||"]"===v[p]||"["===v[p]||void 0===v[p]?n||(A=D(A,",")):(()=>{throw new m("Object key expected",p)})();break}w();var r=u(":"),e=p>=v.length,i=(r||(Z(v[p])||e?A=G(A,":"):s()),f());i||(r||e?A+="null":s()),n=!1}return"}"===v[p]?(A+="}",p++):A=G(A,"}"),!0}})()||(()=>{if("["!==v[p])return!1;{A+="[",p++,w(),x(",")&&w();let t=!0;for(;p<v.length&&"]"!==v[p];){t||u(",")||(A=G(A,",")),l();var n=f();if(!n){t||(A=D(A,","));break}t=!1}return"]"===v[p]?(A+="]",p++):A=G(A,"]"),!0}})()||N()||(()=>{let t=p,n="",r=!1;for("-"===v[p]&&(n+=v[p],p++,!C(v[p]))&&i()&&(n+="0"),"0"===v[p]&&C(v[p+1])&&(r=!0);C(v[p]);)n+=v[p],p++;if("."===v[p])for(""!==n&&"-"!==n||(n+="0"),n+=v[p],p++,C(v[p])||(n+="0");C(v[p]);)n+=v[p],p++;if(p>t){if("e"===v[p]||"E"===v[p])for("-"===n&&(r=!0),n+=v[p],p++,"-"!==v[p]&&"+"!==v[p]||(n+=v[p],p++),C(v[p])||(n+="0");C(v[p]);)n+=v[p],p++;return i()?(A+=r?`"${v.substring(t,p)}"`:n,!0):(p=t,!1)}return!1})()||r("true","true")||r("false","false")||r("null","null")||r("True","true")||r("False","false")||r("None","null")||o(!1)||(()=>{if("/"===v[p]){var t=p;for(p++;p<v.length&&("/"!==v[p]||"\\"===v[p-1]);)p++;return p++,A+=JSON.stringify(v.substring(t,p)),!0}})();return w(),t}function w(t){var n=!(0<arguments.length&&void 0!==t)||t;p;let r=e(n);for(;r=(r=(()=>{if("/"===v[p]&&"*"===v[p+1]){for(;p<v.length&&!((t,n)=>"*"===t[n]&&"/"===t[n+1])(v,p);)p++;p+=2}else{if("/"!==v[p]||"/"!==v[p+1])return!1;for(;p<v.length&&"\n"!==v[p];)p++}return!0})())&&e(n););p}function e(t){var n,r,e=t?F:R;let i="";for(;;){if(e(v,p))i+=v[p];else{if(n=v,r=p,!((n=n.charCodeAt(r))===c||n===a||n>=h&&n<=g||n===d||n===b||n===S||n===J))break;i+=" "}p++}return 0<i.length&&(A+=i,!0)}function n(t){if((t=>{e(!0);for(var n of t){var r=p+n.length;if(v.slice(p,r)===n)return p=r,1}})(t)){if(k(v[p]))for(;p<v.length&&I(v[p]);)p++;w()}}function u(t){return v[p]===t&&(A+=v[p],p++,!0)}function x(t){return v[p]===t&&(p++,!0)}function l(){w(),"."===v[p]&&"."===v[p+1]&&"."===v[p+2]&&(p+=3,w(),x(","))}function N(t,n){var r=0<arguments.length&&void 0!==t&&t,e=1<arguments.length&&void 0!==n?n:-1,i="\\"===v[p],f=(i&&(p++,U(v[p])||O()),"&"===v[p]?H(v.slice(p,p+12)):null),u=null!==(t=f)&&'"'===t.char||null!==(n=f)&&"'"===n.char;if(U(v[p])||u){var l=P(v[p])?P:B(v[p])?B:X(v[p])?X:q,o=p,s=A.length;let n='"';for(p+=u&&f?f.length:1;;){if(p>=v.length)return c=y(p-1),!r&&j(v.charAt(c))?(p=o,A=A.substring(0,s),N(!0)):(n=G(n,'"'),A+=n,!0);if(p===e)return n=G(n,'"'),A+=n,!0;var c=u&&"&"===v[p]?H(v.slice(p,p+12)):null;if(c&&f?c.char===f.char:l(v[p])){var a=p,h=n.length;if(n+='"',p+=c?c.length:1,A+=n,w(!1),r||p>=v.length||j(v[p])&&!((t,n)=>{switch(n){case")":return K(t,"(")>K(t,")");case"]":return K(t,"[")>K(t,"]");case"}":return K(t,"{")>K(t,"}");default:return}})(n,v[p])||U(v[p])&&!(t=>{let n=t+1;for(;n<v.length&&F(v,n);)n++;return n>=v.length||j(v[n])})(p)||C(v[p]))return $(),!0;"\\"===v[p]&&O();var g=y(a-1),d=v.charAt(g);if(","===d)return p=o,A=A.substring(0,s),N(!1,g);if(j(d))return p=o,A=A.substring(0,s),N(!0);A=A.substring(0,s),p=a+(c?c.length:1),n=n.substring(0,h)+"\\"+n.substring(h)}else{if(r&&T(v[p])){if(":"===v[p-1]&&z.test(v.substring(o+1,p+2)))for(;p<v.length&&E.test(v[p]);)n+=v[p],p++;return n=G(n,'"'),A+=n,$(),!0}if(c){g=c.char;'"'===g?n+='\\"':_(g)?n+=L[g]:n+=g,p+=c.length}else if("\\"===v[p]){d=v.charAt(p+1);if(void 0!==M[d])n+=v.slice(p,p+2),p+=2;else if("u"===d){let t=2;for(;t<6&&/^[0-9A-Fa-f]$/.test(v[p+t]);)t++;if(6===t)n+=v.slice(p,p+6),p+=6;else{if(!(p+t>=v.length))throw a=void 0,a=v.slice(p,p+6),new m(`Invalid unicode character "${a}"`,p);p=v.length}}else n+="\n"===d?"\\n":d,p+=2}else{var b,h=v.charAt(p);if('"'===h&&"\\"!==v[p-1])n+="\\"+h;else if(_(h))n+=L[h];else{if(!(" "<=h))throw b=void 0,b=h,new m("Invalid character "+JSON.stringify(b),p);n+=h}p++}}i&&x("\\")}}return!1}function $(){let t=!1;for(w();"+"===v[p];){t=!0,p++,w();var n=(A=D(A,'"',!0)).length,r=N();A=r?(r=A,n=n,e=1,r.substring(0,n)+r.substring(n+e)):G(A,'"')}var e;t}function r(t,n){return v.slice(p,p+t.length)===t&&!I(v[p+t.length])&&(A+=n,p+=t.length,!0)}function o(t){var n=p;if(k(v[p])){for(;p<v.length&&I(v[p]);)p++;let t=p;for(;F(v,t);)t++;if("("===v[t])return p=t+1,f(),")"===v[p]&&(p++,";"===v[p])&&p++,!0}for(;p<v.length&&!T(v[p])&&!U(v[p])&&(!t||":"!==v[p]);)p++;if(":"===v[p-1]&&z.test(v.substring(n,p+2)))for(;p<v.length&&E.test(v[p]);)p++;if(p>n){for(;F(v,p-1)&&0<p;)p--;n=v.slice(n,p);return A+="undefined"===n?"null":JSON.stringify(n),'"'===v[p]&&p++,!0}}function y(t){let n=t;for(;0<n&&F(v,n);)n--;return n}function i(){return p>=v.length||j(v[p])||F(v,p)}function O(){throw new m("Unexpected character "+JSON.stringify(v[p]),p)}function s(){throw new m("Colon expected",p)}O()}});

@@ -1,1 +0,1 @@

{"version":3,"sources":["lib/umd/jsonrepair.js"],"names":["global","factory","exports","module","define","amd","globalThis","self","JSONRepair","this","JSONRepairError","Error","constructor","message","position","super","codeSpace","codeNewline","codeTab","codeReturn","codeNonBreakingSpace","codeMongolianVowelSeparator","codeEnQuad","codeZeroWidthSpace","codeNarrowNoBreakSpace","codeMediumMathematicalSpace","codeIdeographicSpace","codeZeroWidthNoBreakSpace","isDigit","char","isDelimiter","includes","isFunctionNameCharStart","isFunctionNameChar","regexUrlStart","regexUrlChar","isUnquotedStringDelimiter","isStartOfValue","isQuote","regexStartOfValue","test","isWhitespace","text","index","code","charCodeAt","isWhitespaceExceptNewline","isDoubleQuoteLike","isSingleQuoteLike","isDoubleQuote","isSingleQuote","stripLastOccurrence","textToStrip","stripRemainingText","arguments","length","undefined","lastIndexOf","substring","insertBeforeLastWhitespace","textToInsert","let","countOccurrences","count","i","charAt","controlCharacters","\b","\f","\n","\r","\t","escapeCharacters","\"","\\","/","b","f","n","r","t","jsonrepair","output","parseMarkdownCodeBlock","parseValue","processedComma","parseCharacter","parseWhitespaceAndSkipComments","parseNewlineDelimitedJSON","initial","processedValue","JSON","stringify","processed","skipCharacter","skipEllipsis","parseString","parseUnquotedString","processedColon","truncatedText","throwColonExpected","start","num","invalid","atEndOfNumber","parseKeyword","skipNewline","changed","parseWhitespace","_isWhiteSpace","whitespace","blocks","block","end","slice","stopAtDelimiter","stopAtIndex","skipEscapeChars","isEndQuote","iBefore","oBefore","str","iPrev","prevNonWhitespaceIndex","iQuote","oQuote","closeChar","next","parseConcatenatedString","iPrevChar","prevChar","j","chars","parsedStr","name","value","isKey","symbol","prev"],"mappings":"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"}
{"version":3,"sources":["lib/umd/jsonrepair.js"],"names":["global","factory","exports","module","define","amd","globalThis","self","JSONRepair","this","JSONRepairError","Error","constructor","message","position","super","codeSpace","codeNewline","codeTab","codeReturn","codeNonBreakingSpace","codeMongolianVowelSeparator","codeEnQuad","codeZeroWidthSpace","codeNarrowNoBreakSpace","codeMediumMathematicalSpace","codeIdeographicSpace","codeZeroWidthNoBreakSpace","isDigit","char","isDelimiter","includes","isFunctionNameCharStart","isFunctionNameChar","regexUrlStart","regexUrlChar","isUnquotedStringDelimiter","isStartOfValue","isQuote","regexStartOfValue","test","isControlCharacter","isWhitespace","text","index","code","charCodeAt","isWhitespaceExceptNewline","isDoubleQuoteLike","isSingleQuoteLike","isDoubleQuote","isSingleQuote","stripLastOccurrence","textToStrip","stripRemainingText","arguments","length","undefined","lastIndexOf","substring","insertBeforeLastWhitespace","textToInsert","let","namedHtmlEntities","&quot;","&amp;","&lt;","&gt;","&apos;","matchHtmlEntity","fragment","charAt","semicolon","indexOf","entity","named","body","hex","digits","Number","parseInt","isNaN","String","fromCodePoint","countOccurrences","count","i","controlCharacters","\b","\f","\n","\r","\t","escapeCharacters","\"","\\","/","b","f","n","r","t","jsonrepair","output","parseMarkdownCodeBlock","parseValue","processedComma","parseCharacter","parseWhitespaceAndSkipComments","parseNewlineDelimitedJSON","initial","processedValue","processed","skipCharacter","skipEllipsis","parseString","parseUnquotedString","processedColon","truncatedText","throwColonExpected","start","num","invalid","atEndOfNumber","parseKeyword","JSON","stringify","skipNewline","changed","parseWhitespace","_isWhiteSpace","whitespace","blocks","block","end","slice","stopAtDelimiter","stopAtIndex","skipEscapeChars","openEntity","throwUnexpectedCharacter","openedByEntity","match","isEndQuote","iBefore","oBefore","str","iPrev","prevNonWhitespaceIndex","iQuote","oQuote","closeChar","next","parseConcatenatedString","iPrevChar","prevChar","j","chars","parsedStr","name","value","isKey","symbol","prev"],"mappings":"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"}
{
"name": "jsonrepair",
"version": "3.14.1",
"version": "3.15.0",
"description": "Repair broken JSON documents",

@@ -5,0 +5,0 @@ "repository": {