🚀 Socket Launch Week Day 5:Introducing Repository Access Permissions and Custom Roles.Learn more
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.12.0
to
3.13.0
+27
-18
lib/cjs/regular/jsonrepair.js

@@ -50,3 +50,3 @@ "use strict";

parseMarkdownCodeBlock();
parseMarkdownCodeBlock(['```', '[```', '{```']);
const processed = parseValue();

@@ -56,3 +56,3 @@ if (!processed) {

}
parseMarkdownCodeBlock();
parseMarkdownCodeBlock(['```', '```]', '```}']);
const processedComma = parseCharacter(',');

@@ -145,3 +145,3 @@ if (processedComma) {

}
function parseMarkdownCodeBlock() {
function parseMarkdownCodeBlock(blocks) {
// find and skip over a Markdown fenced code block:

@@ -151,4 +151,3 @@ // ``` ... ```

// ```json ... ```
if (text.slice(i, i + 3) === '```') {
i += 3;
if (skipMarkdownCodeBlock(blocks)) {
if ((0, _stringUtils.isFunctionNameCharStart)(text[i])) {

@@ -165,2 +164,12 @@ // strip the optional language specifier like "json"

}
function skipMarkdownCodeBlock(blocks) {
for (const block of blocks) {
const end = i + block.length;
if (text.slice(i, end) === block) {
i = end;
return true;
}
}
return false;
}
function parseCharacter(char) {

@@ -343,3 +352,3 @@ if (text[i] === char) {

// repair: wrap the output inside array brackets
output = "[\n".concat(output, "\n]");
output = `[\n${output}\n]`;
}

@@ -397,4 +406,4 @@

return true;
// biome-ignore lint/style/noUselessElse: <explanation>
} else if (i === stopAtIndex) {
}
if (i === stopAtIndex) {
// use the stop index detected in the first iteration, and repair end quote

@@ -404,4 +413,4 @@ str = (0, _stringUtils.insertBeforeLastWhitespace)(str, '"');

return true;
// biome-ignore lint/style/noUselessElse: <explanation>
} else if (isEndQuote(text[i])) {
}
if (isEndQuote(text[i])) {
// end quote

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

// repair unescaped quote
str = "".concat(str.substring(0, oQuote), "\\").concat(str.substring(oQuote));
str = `${str.substring(0, oQuote)}\\${str.substring(oQuote)}`;
} else if (stopAtDelimiter && (0, _stringUtils.isUnquotedStringDelimiter)(text[i])) {

@@ -496,3 +505,3 @@ // we're in the mode to stop the string at the first delimiter

// repair unescaped double quote
str += "\\".concat(char);
str += `\\${char}`;
i++;

@@ -611,3 +620,3 @@ } else if ((0, _stringUtils.isControlCharacter)(char)) {

const hasInvalidLeadingZero = /^0\d/.test(num);
output += hasInvalidLeadingZero ? "\"".concat(num, "\"") : num;
output += hasInvalidLeadingZero ? `"${num}"` : num;
return true;

@@ -704,3 +713,3 @@ }

i++;
output += "\"".concat(text.substring(start, i), "\"");
output += `"${text.substring(start, i)}"`;
return true;

@@ -723,9 +732,9 @@ }

// change the number more than it needs to make it valid JSON
output += "".concat(text.slice(start, i), "0");
output += `${text.slice(start, i)}0`;
}
function throwInvalidCharacter(char) {
throw new _JSONRepairError.JSONRepairError("Invalid character ".concat(JSON.stringify(char)), i);
throw new _JSONRepairError.JSONRepairError(`Invalid character ${JSON.stringify(char)}`, i);
}
function throwUnexpectedCharacter() {
throw new _JSONRepairError.JSONRepairError("Unexpected character ".concat(JSON.stringify(text[i])), i);
throw new _JSONRepairError.JSONRepairError(`Unexpected character ${JSON.stringify(text[i])}`, i);
}

@@ -743,3 +752,3 @@ function throwUnexpectedEnd() {

const chars = text.slice(i, i + 6);
throw new _JSONRepairError.JSONRepairError("Invalid unicode character \"".concat(chars, "\""), i);
throw new _JSONRepairError.JSONRepairError(`Invalid unicode character "${chars}"`, i);
}

@@ -746,0 +755,0 @@ }

+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","slice","isFunctionNameCharStart","isFunctionNameChar","char","skipCharacter","skipEscapeCharacter","skipEllipsis","initial","processedKey","throwObjectKeyExpected","processedColon","truncatedText","throwColonExpected","processedValue","concat","stopAtDelimiter","stopAtIndex","skipEscapeChars","isQuote","isEndQuote","isDoubleQuote","isSingleQuote","isSingleQuoteLike","isDoubleQuoteLike","iBefore","oBefore","str","iPrev","prevNonWhitespaceIndex","isDelimiter","charAt","substring","iQuote","oQuote","isDigit","parseConcatenatedString","iPrevChar","prevChar","isUnquotedStringDelimiter","regexUrlStart","test","regexUrlChar","escapeChar","j","isHex","throwInvalidUnicodeCharacter","isControlCharacter","isValidStringCharacter","throwInvalidCharacter","parsedStr","removeAtIndex","atEndOfNumber","repairNumberEndingWithNumericSymbol","num","hasInvalidLeadingZero","parseKeyword","name","value","isKey","symbol","JSON","stringify","prev","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 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(): boolean {\n // find and skip over a Markdown fenced code block:\n // ``` ... ```\n // or\n // ```json ... ```\n if (text.slice(i, i + 3) === '```') {\n i += 3\n\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 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 initial = false\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 output = stripLastOccurrence(output, ',')\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\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 } else {\n initial = false\n }\n\n skipEllipsis()\n\n const processedValue = parseValue()\n if (!processedValue) {\n // repair trailing comma\n output = stripLastOccurrence(output, ',')\n break\n }\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 // biome-ignore lint/style/noUselessElse: <explanation>\n } else 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 // biome-ignore lint/style/noUselessElse: <explanation>\n } else 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 isQuote(text[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 {\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 if (text[i] === '-') {\n i++\n if (atEndOfNumber()) {\n repairNumberEndingWithNumericSymbol(start)\n return true\n }\n if (!isDigit(text[i])) {\n i = start\n return false\n }\n }\n\n // Note that in JSON leading zeros like \"00789\" are not allowed.\n // We will allow all leading zeros here though and at the end of parseNumber\n // check against trailing zeros and repair that if needed.\n // Leading zeros can have meaning, so we should not clear them.\n while (isDigit(text[i])) {\n i++\n }\n\n if (text[i] === '.') {\n i++\n if (atEndOfNumber()) {\n repairNumberEndingWithNumericSymbol(start)\n return true\n }\n if (!isDigit(text[i])) {\n i = start\n return false\n }\n while (isDigit(text[i])) {\n i++\n }\n }\n\n if (text[i] === 'e' || text[i] === 'E') {\n i++\n if (text[i] === '-' || text[i] === '+') {\n i++\n }\n if (atEndOfNumber()) {\n repairNumberEndingWithNumericSymbol(start)\n return true\n }\n if (!isDigit(text[i])) {\n i = start\n return false\n }\n while (isDigit(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 if (i > start) {\n // repair a number with leading zeros like \"00789\"\n const num = text.slice(start, i)\n const hasInvalidLeadingZero = /^0\\d/.test(num)\n\n output += hasInvalidLeadingZero ? `\"${num}\"` : 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) {\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 += `\"${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 atEndOfNumber() {\n return i >= text.length || isDelimiter(text[i]) || isWhitespace(text, i)\n }\n\n function repairNumberEndingWithNumericSymbol(start: number) {\n // repair numbers cut off at the end\n // this will only be called when we end after a '.', '-', or 'e' and does not\n // change the number more than it needs to make it valid JSON\n output += `${text.slice(start, i)}0`\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","isEndQuote","isDoubleQuote","isSingleQuote","isSingleQuoteLike","isDoubleQuoteLike","iBefore","oBefore","str","iPrev","prevNonWhitespaceIndex","isDelimiter","charAt","substring","iQuote","oQuote","isDigit","parseConcatenatedString","iPrevChar","prevChar","isUnquotedStringDelimiter","regexUrlStart","test","regexUrlChar","escapeChar","j","isHex","throwInvalidUnicodeCharacter","isControlCharacter","isValidStringCharacter","throwInvalidCharacter","parsedStr","removeAtIndex","atEndOfNumber","repairNumberEndingWithNumericSymbol","num","hasInvalidLeadingZero","parseKeyword","name","value","isKey","symbol","JSON","stringify","prev","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 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 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 initial = false\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 output = stripLastOccurrence(output, ',')\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\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 } else {\n initial = false\n }\n\n skipEllipsis()\n\n const processedValue = parseValue()\n if (!processedValue) {\n // repair trailing comma\n output = stripLastOccurrence(output, ',')\n break\n }\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 isQuote(text[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 {\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 if (text[i] === '-') {\n i++\n if (atEndOfNumber()) {\n repairNumberEndingWithNumericSymbol(start)\n return true\n }\n if (!isDigit(text[i])) {\n i = start\n return false\n }\n }\n\n // Note that in JSON leading zeros like \"00789\" are not allowed.\n // We will allow all leading zeros here though and at the end of parseNumber\n // check against trailing zeros and repair that if needed.\n // Leading zeros can have meaning, so we should not clear them.\n while (isDigit(text[i])) {\n i++\n }\n\n if (text[i] === '.') {\n i++\n if (atEndOfNumber()) {\n repairNumberEndingWithNumericSymbol(start)\n return true\n }\n if (!isDigit(text[i])) {\n i = start\n return false\n }\n while (isDigit(text[i])) {\n i++\n }\n }\n\n if (text[i] === 'e' || text[i] === 'E') {\n i++\n if (text[i] === '-' || text[i] === '+') {\n i++\n }\n if (atEndOfNumber()) {\n repairNumberEndingWithNumericSymbol(start)\n return true\n }\n if (!isDigit(text[i])) {\n i = start\n return false\n }\n while (isDigit(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 if (i > start) {\n // repair a number with leading zeros like \"00789\"\n const num = text.slice(start, i)\n const hasInvalidLeadingZero = /^0\\d/.test(num)\n\n output += hasInvalidLeadingZero ? `\"${num}\"` : 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) {\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 += `\"${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 atEndOfNumber() {\n return i >= text.length || isDelimiter(text[i]) || isWhitespace(text, i)\n }\n\n function repairNumberEndingWithNumericSymbol(start: number) {\n // repair numbers cut off at the end\n // this will only be called when we end after a '.', '-', or 'e' and does not\n // change the number more than it needs to make it valid JSON\n output += `${text.slice(start, i)}0`\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":";;;;;;AAAA,IAAAA,gBAAA,GAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AA0BA,MAAME,iBAA4C,GAAG;EACnD,IAAI,EAAE,KAAK;EACX,IAAI,EAAE,KAAK;EACX,IAAI,EAAE,KAAK;EACX,IAAI,EAAE,KAAK;EACX,IAAI,EAAE;AACR,CAAC;;AAED;AACA,MAAMC,gBAA2C,GAAG;EAClD,GAAG,EAAE,GAAG;EACR,IAAI,EAAE,IAAI;EACV,GAAG,EAAE,GAAG;EACRC,CAAC,EAAE,IAAI;EACPC,CAAC,EAAE,IAAI;EACPC,CAAC,EAAE,IAAI;EACPC,CAAC,EAAE,IAAI;EACPC,CAAC,EAAE;EACH;AACF,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,UAAUA,CAACC,IAAY,EAAU;EAC/C,IAAIC,CAAC,GAAG,CAAC,EAAC;EACV,IAAIC,MAAM,GAAG,EAAE,EAAC;;EAEhBC,sBAAsB,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;EAE/C,MAAMC,SAAS,GAAGC,UAAU,CAAC,CAAC;EAC9B,IAAI,CAACD,SAAS,EAAE;IACdE,kBAAkB,CAAC,CAAC;EACtB;EAEAH,sBAAsB,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;EAE/C,MAAMI,cAAc,GAAGC,cAAc,CAAC,GAAG,CAAC;EAC1C,IAAID,cAAc,EAAE;IAClBE,8BAA8B,CAAC,CAAC;EAClC;EAEA,IAAI,IAAAC,2BAAc,EAACV,IAAI,CAACC,CAAC,CAAC,CAAC,IAAI,IAAAU,mCAAsB,EAACT,MAAM,CAAC,EAAE;IAC7D;IACA;IACA,IAAI,CAACK,cAAc,EAAE;MACnB;MACAL,MAAM,GAAG,IAAAU,uCAA0B,EAACV,MAAM,EAAE,GAAG,CAAC;IAClD;IAEAW,yBAAyB,CAAC,CAAC;EAC7B,CAAC,MAAM,IAAIN,cAAc,EAAE;IACzB;IACAL,MAAM,GAAG,IAAAY,gCAAmB,EAACZ,MAAM,EAAE,GAAG,CAAC;EAC3C;;EAEA;EACA,OAAOF,IAAI,CAACC,CAAC,CAAC,KAAK,GAAG,IAAID,IAAI,CAACC,CAAC,CAAC,KAAK,GAAG,EAAE;IACzCA,CAAC,EAAE;IACHQ,8BAA8B,CAAC,CAAC;EAClC;EAEA,IAAIR,CAAC,IAAID,IAAI,CAACe,MAAM,EAAE;IACpB;IACA,OAAOb,MAAM;EACf;EAEAc,wBAAwB,CAAC,CAAC;EAE1B,SAASX,UAAUA,CAAA,EAAY;IAC7BI,8BAA8B,CAAC,CAAC;IAChC,MAAML,SAAS,GACba,WAAW,CAAC,CAAC,IACbC,UAAU,CAAC,CAAC,IACZC,WAAW,CAAC,CAAC,IACbC,WAAW,CAAC,CAAC,IACbC,aAAa,CAAC,CAAC,IACfC,mBAAmB,CAAC,KAAK,CAAC,IAC1BC,UAAU,CAAC,CAAC;IACdd,8BAA8B,CAAC,CAAC;IAEhC,OAAOL,SAAS;EAClB;EAEA,SAASK,8BAA8BA,CAAA,EAA8B;IAAA,IAA7Be,WAAW,GAAAC,SAAA,CAAAV,MAAA,QAAAU,SAAA,QAAAC,SAAA,GAAAD,SAAA,MAAG,IAAI;IACxD,MAAME,KAAK,GAAG1B,CAAC;IAEf,IAAI2B,OAAO,GAAGC,eAAe,CAACL,WAAW,CAAC;IAC1C,GAAG;MACDI,OAAO,GAAGE,YAAY,CAAC,CAAC;MACxB,IAAIF,OAAO,EAAE;QACXA,OAAO,GAAGC,eAAe,CAACL,WAAW,CAAC;MACxC;IACF,CAAC,QAAQI,OAAO;IAEhB,OAAO3B,CAAC,GAAG0B,KAAK;EAClB;EAEA,SAASE,eAAeA,CAACL,WAAoB,EAAW;IACtD,MAAMO,aAAa,GAAGP,WAAW,GAAGQ,yBAAY,GAAGC,sCAAyB;IAC5E,IAAIC,UAAU,GAAG,EAAE;IAEnB,OAAO,IAAI,EAAE;MACX,IAAIH,aAAa,CAAC/B,IAAI,EAAEC,CAAC,CAAC,EAAE;QAC1BiC,UAAU,IAAIlC,IAAI,CAACC,CAAC,CAAC;QACrBA,CAAC,EAAE;MACL,CAAC,MAAM,IAAI,IAAAkC,gCAAmB,EAACnC,IAAI,EAAEC,CAAC,CAAC,EAAE;QACvC;QACAiC,UAAU,IAAI,GAAG;QACjBjC,CAAC,EAAE;MACL,CAAC,MAAM;QACL;MACF;IACF;IAEA,IAAIiC,UAAU,CAACnB,MAAM,GAAG,CAAC,EAAE;MACzBb,MAAM,IAAIgC,UAAU;MACpB,OAAO,IAAI;IACb;IAEA,OAAO,KAAK;EACd;EAEA,SAASJ,YAAYA,CAAA,EAAY;IAC/B;IACA,IAAI9B,IAAI,CAACC,CAAC,CAAC,KAAK,GAAG,IAAID,IAAI,CAACC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE;MAC1C;MACA,OAAOA,CAAC,GAAGD,IAAI,CAACe,MAAM,IAAI,CAACqB,mBAAmB,CAACpC,IAAI,EAAEC,CAAC,CAAC,EAAE;QACvDA,CAAC,EAAE;MACL;MACAA,CAAC,IAAI,CAAC;MAEN,OAAO,IAAI;IACb;;IAEA;IACA,IAAID,IAAI,CAACC,CAAC,CAAC,KAAK,GAAG,IAAID,IAAI,CAACC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE;MAC1C;MACA,OAAOA,CAAC,GAAGD,IAAI,CAACe,MAAM,IAAIf,IAAI,CAACC,CAAC,CAAC,KAAK,IAAI,EAAE;QAC1CA,CAAC,EAAE;MACL;MAEA,OAAO,IAAI;IACb;IAEA,OAAO,KAAK;EACd;EAEA,SAASE,sBAAsBA,CAACkC,MAAgB,EAAW;IACzD;IACA;IACA;IACA;IACA,IAAIC,qBAAqB,CAACD,MAAM,CAAC,EAAE;MACjC,IAAI,IAAAE,oCAAuB,EAACvC,IAAI,CAACC,CAAC,CAAC,CAAC,EAAE;QACpC;QACA,OAAOA,CAAC,GAAGD,IAAI,CAACe,MAAM,IAAI,IAAAyB,+BAAkB,EAACxC,IAAI,CAACC,CAAC,CAAC,CAAC,EAAE;UACrDA,CAAC,EAAE;QACL;MACF;MAEAQ,8BAA8B,CAAC,CAAC;MAEhC,OAAO,IAAI;IACb;IAEA,OAAO,KAAK;EACd;EAEA,SAAS6B,qBAAqBA,CAACD,MAAgB,EAAW;IACxD,KAAK,MAAMI,KAAK,IAAIJ,MAAM,EAAE;MAC1B,MAAMK,GAAG,GAAGzC,CAAC,GAAGwC,KAAK,CAAC1B,MAAM;MAC5B,IAAIf,IAAI,CAAC2C,KAAK,CAAC1C,CAAC,EAAEyC,GAAG,CAAC,KAAKD,KAAK,EAAE;QAChCxC,CAAC,GAAGyC,GAAG;QACP,OAAO,IAAI;MACb;IACF;IAEA,OAAO,KAAK;EACd;EAEA,SAASlC,cAAcA,CAACoC,IAAY,EAAW;IAC7C,IAAI5C,IAAI,CAACC,CAAC,CAAC,KAAK2C,IAAI,EAAE;MACpB1C,MAAM,IAAIF,IAAI,CAACC,CAAC,CAAC;MACjBA,CAAC,EAAE;MACH,OAAO,IAAI;IACb;IAEA,OAAO,KAAK;EACd;EAEA,SAAS4C,aAAaA,CAACD,IAAY,EAAW;IAC5C,IAAI5C,IAAI,CAACC,CAAC,CAAC,KAAK2C,IAAI,EAAE;MACpB3C,CAAC,EAAE;MACH,OAAO,IAAI;IACb;IAEA,OAAO,KAAK;EACd;EAEA,SAAS6C,mBAAmBA,CAAA,EAAY;IACtC,OAAOD,aAAa,CAAC,IAAI,CAAC;EAC5B;;EAEA;AACF;AACA;AACA;EACE,SAASE,YAAYA,CAAA,EAAY;IAC/BtC,8BAA8B,CAAC,CAAC;IAEhC,IAAIT,IAAI,CAACC,CAAC,CAAC,KAAK,GAAG,IAAID,IAAI,CAACC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,IAAID,IAAI,CAACC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE;MACjE;MACAA,CAAC,IAAI,CAAC;MACNQ,8BAA8B,CAAC,CAAC;MAChCoC,aAAa,CAAC,GAAG,CAAC;MAElB,OAAO,IAAI;IACb;IAEA,OAAO,KAAK;EACd;;EAEA;AACF;AACA;EACE,SAAS5B,WAAWA,CAAA,EAAY;IAC9B,IAAIjB,IAAI,CAACC,CAAC,CAAC,KAAK,GAAG,EAAE;MACnBC,MAAM,IAAI,GAAG;MACbD,CAAC,EAAE;MACHQ,8BAA8B,CAAC,CAAC;;MAEhC;MACA,IAAIoC,aAAa,CAAC,GAAG,CAAC,EAAE;QACtBpC,8BAA8B,CAAC,CAAC;MAClC;MAEA,IAAIuC,OAAO,GAAG,IAAI;MAClB,OAAO/C,CAAC,GAAGD,IAAI,CAACe,MAAM,IAAIf,IAAI,CAACC,CAAC,CAAC,KAAK,GAAG,EAAE;QACzC,IAAIM,cAAuB;QAC3B,IAAI,CAACyC,OAAO,EAAE;UACZzC,cAAc,GAAGC,cAAc,CAAC,GAAG,CAAC;UACpC,IAAI,CAACD,cAAc,EAAE;YACnB;YACAL,MAAM,GAAG,IAAAU,uCAA0B,EAACV,MAAM,EAAE,GAAG,CAAC;UAClD;UACAO,8BAA8B,CAAC,CAAC;QAClC,CAAC,MAAM;UACLF,cAAc,GAAG,IAAI;UACrByC,OAAO,GAAG,KAAK;QACjB;QAEAD,YAAY,CAAC,CAAC;QAEd,MAAME,YAAY,GAAG9B,WAAW,CAAC,CAAC,IAAIG,mBAAmB,CAAC,IAAI,CAAC;QAC/D,IAAI,CAAC2B,YAAY,EAAE;UACjB,IACEjD,IAAI,CAACC,CAAC,CAAC,KAAK,GAAG,IACfD,IAAI,CAACC,CAAC,CAAC,KAAK,GAAG,IACfD,IAAI,CAACC,CAAC,CAAC,KAAK,GAAG,IACfD,IAAI,CAACC,CAAC,CAAC,KAAK,GAAG,IACfD,IAAI,CAACC,CAAC,CAAC,KAAKyB,SAAS,EACrB;YACA;YACAxB,MAAM,GAAG,IAAAY,gCAAmB,EAACZ,MAAM,EAAE,GAAG,CAAC;UAC3C,CAAC,MAAM;YACLgD,sBAAsB,CAAC,CAAC;UAC1B;UACA;QACF;QAEAzC,8BAA8B,CAAC,CAAC;QAChC,MAAM0C,cAAc,GAAG3C,cAAc,CAAC,GAAG,CAAC;QAC1C,MAAM4C,aAAa,GAAGnD,CAAC,IAAID,IAAI,CAACe,MAAM;QACtC,IAAI,CAACoC,cAAc,EAAE;UACnB,IAAI,IAAAzC,2BAAc,EAACV,IAAI,CAACC,CAAC,CAAC,CAAC,IAAImD,aAAa,EAAE;YAC5C;YACAlD,MAAM,GAAG,IAAAU,uCAA0B,EAACV,MAAM,EAAE,GAAG,CAAC;UAClD,CAAC,MAAM;YACLmD,kBAAkB,CAAC,CAAC;UACtB;QACF;QACA,MAAMC,cAAc,GAAGjD,UAAU,CAAC,CAAC;QACnC,IAAI,CAACiD,cAAc,EAAE;UACnB,IAAIH,cAAc,IAAIC,aAAa,EAAE;YACnC;YACAlD,MAAM,IAAI,MAAM;UAClB,CAAC,MAAM;YACLmD,kBAAkB,CAAC,CAAC;UACtB;QACF;MACF;MAEA,IAAIrD,IAAI,CAACC,CAAC,CAAC,KAAK,GAAG,EAAE;QACnBC,MAAM,IAAI,GAAG;QACbD,CAAC,EAAE;MACL,CAAC,MAAM;QACL;QACAC,MAAM,GAAG,IAAAU,uCAA0B,EAACV,MAAM,EAAE,GAAG,CAAC;MAClD;MAEA,OAAO,IAAI;IACb;IAEA,OAAO,KAAK;EACd;;EAEA;AACF;AACA;EACE,SAASgB,UAAUA,CAAA,EAAY;IAC7B,IAAIlB,IAAI,CAACC,CAAC,CAAC,KAAK,GAAG,EAAE;MACnBC,MAAM,IAAI,GAAG;MACbD,CAAC,EAAE;MACHQ,8BAA8B,CAAC,CAAC;;MAEhC;MACA,IAAIoC,aAAa,CAAC,GAAG,CAAC,EAAE;QACtBpC,8BAA8B,CAAC,CAAC;MAClC;MAEA,IAAIuC,OAAO,GAAG,IAAI;MAClB,OAAO/C,CAAC,GAAGD,IAAI,CAACe,MAAM,IAAIf,IAAI,CAACC,CAAC,CAAC,KAAK,GAAG,EAAE;QACzC,IAAI,CAAC+C,OAAO,EAAE;UACZ,MAAMzC,cAAc,GAAGC,cAAc,CAAC,GAAG,CAAC;UAC1C,IAAI,CAACD,cAAc,EAAE;YACnB;YACAL,MAAM,GAAG,IAAAU,uCAA0B,EAACV,MAAM,EAAE,GAAG,CAAC;UAClD;QACF,CAAC,MAAM;UACL8C,OAAO,GAAG,KAAK;QACjB;QAEAD,YAAY,CAAC,CAAC;QAEd,MAAMO,cAAc,GAAGjD,UAAU,CAAC,CAAC;QACnC,IAAI,CAACiD,cAAc,EAAE;UACnB;UACApD,MAAM,GAAG,IAAAY,gCAAmB,EAACZ,MAAM,EAAE,GAAG,CAAC;UACzC;QACF;MACF;MAEA,IAAIF,IAAI,CAACC,CAAC,CAAC,KAAK,GAAG,EAAE;QACnBC,MAAM,IAAI,GAAG;QACbD,CAAC,EAAE;MACL,CAAC,MAAM;QACL;QACAC,MAAM,GAAG,IAAAU,uCAA0B,EAACV,MAAM,EAAE,GAAG,CAAC;MAClD;MAEA,OAAO,IAAI;IACb;IAEA,OAAO,KAAK;EACd;;EAEA;AACF;AACA;AACA;EACE,SAASW,yBAAyBA,CAAA,EAAG;IACnC;IACA,IAAImC,OAAO,GAAG,IAAI;IAClB,IAAIM,cAAc,GAAG,IAAI;IACzB,OAAOA,cAAc,EAAE;MACrB,IAAI,CAACN,OAAO,EAAE;QACZ;QACA,MAAMzC,cAAc,GAAGC,cAAc,CAAC,GAAG,CAAC;QAC1C,IAAI,CAACD,cAAc,EAAE;UACnB;UACAL,MAAM,GAAG,IAAAU,uCAA0B,EAACV,MAAM,EAAE,GAAG,CAAC;QAClD;MACF,CAAC,MAAM;QACL8C,OAAO,GAAG,KAAK;MACjB;MAEAM,cAAc,GAAGjD,UAAU,CAAC,CAAC;IAC/B;IAEA,IAAI,CAACiD,cAAc,EAAE;MACnB;MACApD,MAAM,GAAG,IAAAY,gCAAmB,EAACZ,MAAM,EAAE,GAAG,CAAC;IAC3C;;IAEA;IACAA,MAAM,GAAG,MAAMA,MAAM,KAAK;EAC5B;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,SAASiB,WAAWA,CAAA,EAAqD;IAAA,IAApDoC,eAAe,GAAA9B,SAAA,CAAAV,MAAA,QAAAU,SAAA,QAAAC,SAAA,GAAAD,SAAA,MAAG,KAAK;IAAA,IAAE+B,WAAW,GAAA/B,SAAA,CAAAV,MAAA,QAAAU,SAAA,QAAAC,SAAA,GAAAD,SAAA,MAAG,CAAC,CAAC;IAC5D,IAAIgC,eAAe,GAAGzD,IAAI,CAACC,CAAC,CAAC,KAAK,IAAI;IACtC,IAAIwD,eAAe,EAAE;MACnB;MACAxD,CAAC,EAAE;MACHwD,eAAe,GAAG,IAAI;IACxB;IAEA,IAAI,IAAAC,oBAAO,EAAC1D,IAAI,CAACC,CAAC,CAAC,CAAC,EAAE;MACpB;MACA;MACA;MACA;MACA,MAAM0D,UAAU,GAAG,IAAAC,0BAAa,EAAC5D,IAAI,CAACC,CAAC,CAAC,CAAC,GACrC2D,0BAAa,GACb,IAAAC,0BAAa,EAAC7D,IAAI,CAACC,CAAC,CAAC,CAAC,GACpB4D,0BAAa,GACb,IAAAC,8BAAiB,EAAC9D,IAAI,CAACC,CAAC,CAAC,CAAC,GACxB6D,8BAAiB,GACjBC,8BAAiB;MAEzB,MAAMC,OAAO,GAAG/D,CAAC;MACjB,MAAMgE,OAAO,GAAG/D,MAAM,CAACa,MAAM;MAE7B,IAAImD,GAAG,GAAG,GAAG;MACbjE,CAAC,EAAE;MAEH,OAAO,IAAI,EAAE;QACX,IAAIA,CAAC,IAAID,IAAI,CAACe,MAAM,EAAE;UACpB;;UAEA,MAAMoD,KAAK,GAAGC,sBAAsB,CAACnE,CAAC,GAAG,CAAC,CAAC;UAC3C,IAAI,CAACsD,eAAe,IAAI,IAAAc,wBAAW,EAACrE,IAAI,CAACsE,MAAM,CAACH,KAAK,CAAC,CAAC,EAAE;YACvD;YACA;YACA;YACAlE,CAAC,GAAG+D,OAAO;YACX9D,MAAM,GAAGA,MAAM,CAACqE,SAAS,CAAC,CAAC,EAAEN,OAAO,CAAC;YAErC,OAAO9C,WAAW,CAAC,IAAI,CAAC;UAC1B;;UAEA;UACA+C,GAAG,GAAG,IAAAtD,uCAA0B,EAACsD,GAAG,EAAE,GAAG,CAAC;UAC1ChE,MAAM,IAAIgE,GAAG;UAEb,OAAO,IAAI;QACb;QAEA,IAAIjE,CAAC,KAAKuD,WAAW,EAAE;UACrB;UACAU,GAAG,GAAG,IAAAtD,uCAA0B,EAACsD,GAAG,EAAE,GAAG,CAAC;UAC1ChE,MAAM,IAAIgE,GAAG;UAEb,OAAO,IAAI;QACb;QAEA,IAAIP,UAAU,CAAC3D,IAAI,CAACC,CAAC,CAAC,CAAC,EAAE;UACvB;UACA;UACA,MAAMuE,MAAM,GAAGvE,CAAC;UAChB,MAAMwE,MAAM,GAAGP,GAAG,CAACnD,MAAM;UACzBmD,GAAG,IAAI,GAAG;UACVjE,CAAC,EAAE;UACHC,MAAM,IAAIgE,GAAG;UAEbzD,8BAA8B,CAAC,KAAK,CAAC;UAErC,IACE8C,eAAe,IACftD,CAAC,IAAID,IAAI,CAACe,MAAM,IAChB,IAAAsD,wBAAW,EAACrE,IAAI,CAACC,CAAC,CAAC,CAAC,IACpB,IAAAyD,oBAAO,EAAC1D,IAAI,CAACC,CAAC,CAAC,CAAC,IAChB,IAAAyE,oBAAO,EAAC1E,IAAI,CAACC,CAAC,CAAC,CAAC,EAChB;YACA;YACA;YACA0E,uBAAuB,CAAC,CAAC;YAEzB,OAAO,IAAI;UACb;UAEA,MAAMC,SAAS,GAAGR,sBAAsB,CAACI,MAAM,GAAG,CAAC,CAAC;UACpD,MAAMK,QAAQ,GAAG7E,IAAI,CAACsE,MAAM,CAACM,SAAS,CAAC;UAEvC,IAAIC,QAAQ,KAAK,GAAG,EAAE;YACpB;YACA;YACA;YACA5E,CAAC,GAAG+D,OAAO;YACX9D,MAAM,GAAGA,MAAM,CAACqE,SAAS,CAAC,CAAC,EAAEN,OAAO,CAAC;YAErC,OAAO9C,WAAW,CAAC,KAAK,EAAEyD,SAAS,CAAC;UACtC;UAEA,IAAI,IAAAP,wBAAW,EAACQ,QAAQ,CAAC,EAAE;YACzB;YACA;YACA;YACA5E,CAAC,GAAG+D,OAAO;YACX9D,MAAM,GAAGA,MAAM,CAACqE,SAAS,CAAC,CAAC,EAAEN,OAAO,CAAC;YAErC,OAAO9C,WAAW,CAAC,IAAI,CAAC;UAC1B;;UAEA;UACAjB,MAAM,GAAGA,MAAM,CAACqE,SAAS,CAAC,CAAC,EAAEN,OAAO,CAAC;UACrChE,CAAC,GAAGuE,MAAM,GAAG,CAAC;;UAEd;UACAN,GAAG,GAAG,GAAGA,GAAG,CAACK,SAAS,CAAC,CAAC,EAAEE,MAAM,CAAC,KAAKP,GAAG,CAACK,SAAS,CAACE,MAAM,CAAC,EAAE;QAC/D,CAAC,MAAM,IAAIlB,eAAe,IAAI,IAAAuB,sCAAyB,EAAC9E,IAAI,CAACC,CAAC,CAAC,CAAC,EAAE;UAChE;UACA;;UAEA;UACA,IAAID,IAAI,CAACC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,IAAI8E,0BAAa,CAACC,IAAI,CAAChF,IAAI,CAACuE,SAAS,CAACP,OAAO,GAAG,CAAC,EAAE/D,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YACjF,OAAOA,CAAC,GAAGD,IAAI,CAACe,MAAM,IAAIkE,yBAAY,CAACD,IAAI,CAAChF,IAAI,CAACC,CAAC,CAAC,CAAC,EAAE;cACpDiE,GAAG,IAAIlE,IAAI,CAACC,CAAC,CAAC;cACdA,CAAC,EAAE;YACL;UACF;;UAEA;UACAiE,GAAG,GAAG,IAAAtD,uCAA0B,EAACsD,GAAG,EAAE,GAAG,CAAC;UAC1ChE,MAAM,IAAIgE,GAAG;UAEbS,uBAAuB,CAAC,CAAC;UAEzB,OAAO,IAAI;QACb,CAAC,MAAM,IAAI3E,IAAI,CAACC,CAAC,CAAC,KAAK,IAAI,EAAE;UAC3B;UACA,MAAM2C,IAAI,GAAG5C,IAAI,CAACsE,MAAM,CAACrE,CAAC,GAAG,CAAC,CAAC;UAC/B,MAAMiF,UAAU,GAAGzF,gBAAgB,CAACmD,IAAI,CAAC;UACzC,IAAIsC,UAAU,KAAKxD,SAAS,EAAE;YAC5BwC,GAAG,IAAIlE,IAAI,CAAC2C,KAAK,CAAC1C,CAAC,EAAEA,CAAC,GAAG,CAAC,CAAC;YAC3BA,CAAC,IAAI,CAAC;UACR,CAAC,MAAM,IAAI2C,IAAI,KAAK,GAAG,EAAE;YACvB,IAAIuC,CAAC,GAAG,CAAC;YACT,OAAOA,CAAC,GAAG,CAAC,IAAI,IAAAC,kBAAK,EAACpF,IAAI,CAACC,CAAC,GAAGkF,CAAC,CAAC,CAAC,EAAE;cAClCA,CAAC,EAAE;YACL;YAEA,IAAIA,CAAC,KAAK,CAAC,EAAE;cACXjB,GAAG,IAAIlE,IAAI,CAAC2C,KAAK,CAAC1C,CAAC,EAAEA,CAAC,GAAG,CAAC,CAAC;cAC3BA,CAAC,IAAI,CAAC;YACR,CAAC,MAAM,IAAIA,CAAC,GAAGkF,CAAC,IAAInF,IAAI,CAACe,MAAM,EAAE;cAC/B;cACA;cACAd,CAAC,GAAGD,IAAI,CAACe,MAAM;YACjB,CAAC,MAAM;cACLsE,4BAA4B,CAAC,CAAC;YAChC;UACF,CAAC,MAAM;YACL;YACAnB,GAAG,IAAItB,IAAI;YACX3C,CAAC,IAAI,CAAC;UACR;QACF,CAAC,MAAM;UACL;UACA,MAAM2C,IAAI,GAAG5C,IAAI,CAACsE,MAAM,CAACrE,CAAC,CAAC;UAE3B,IAAI2C,IAAI,KAAK,GAAG,IAAI5C,IAAI,CAACC,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE;YACxC;YACAiE,GAAG,IAAI,KAAKtB,IAAI,EAAE;YAClB3C,CAAC,EAAE;UACL,CAAC,MAAM,IAAI,IAAAqF,+BAAkB,EAAC1C,IAAI,CAAC,EAAE;YACnC;YACAsB,GAAG,IAAI1E,iBAAiB,CAACoD,IAAI,CAAC;YAC9B3C,CAAC,EAAE;UACL,CAAC,MAAM;YACL,IAAI,CAAC,IAAAsF,mCAAsB,EAAC3C,IAAI,CAAC,EAAE;cACjC4C,qBAAqB,CAAC5C,IAAI,CAAC;YAC7B;YACAsB,GAAG,IAAItB,IAAI;YACX3C,CAAC,EAAE;UACL;QACF;QAEA,IAAIwD,eAAe,EAAE;UACnB;UACAX,mBAAmB,CAAC,CAAC;QACvB;MACF;IACF;IAEA,OAAO,KAAK;EACd;;EAEA;AACF;AACA;EACE,SAAS6B,uBAAuBA,CAAA,EAAY;IAC1C,IAAIvE,SAAS,GAAG,KAAK;IAErBK,8BAA8B,CAAC,CAAC;IAChC,OAAOT,IAAI,CAACC,CAAC,CAAC,KAAK,GAAG,EAAE;MACtBG,SAAS,GAAG,IAAI;MAChBH,CAAC,EAAE;MACHQ,8BAA8B,CAAC,CAAC;;MAEhC;MACAP,MAAM,GAAG,IAAAY,gCAAmB,EAACZ,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC;MAC/C,MAAMyB,KAAK,GAAGzB,MAAM,CAACa,MAAM;MAC3B,MAAM0E,SAAS,GAAGtE,WAAW,CAAC,CAAC;MAC/B,IAAIsE,SAAS,EAAE;QACb;QACAvF,MAAM,GAAG,IAAAwF,0BAAa,EAACxF,MAAM,EAAEyB,KAAK,EAAE,CAAC,CAAC;MAC1C,CAAC,MAAM;QACL;QACAzB,MAAM,GAAG,IAAAU,uCAA0B,EAACV,MAAM,EAAE,GAAG,CAAC;MAClD;IACF;IAEA,OAAOE,SAAS;EAClB;;EAEA;AACF;AACA;EACE,SAASgB,WAAWA,CAAA,EAAY;IAC9B,MAAMO,KAAK,GAAG1B,CAAC;IACf,IAAID,IAAI,CAACC,CAAC,CAAC,KAAK,GAAG,EAAE;MACnBA,CAAC,EAAE;MACH,IAAI0F,aAAa,CAAC,CAAC,EAAE;QACnBC,mCAAmC,CAACjE,KAAK,CAAC;QAC1C,OAAO,IAAI;MACb;MACA,IAAI,CAAC,IAAA+C,oBAAO,EAAC1E,IAAI,CAACC,CAAC,CAAC,CAAC,EAAE;QACrBA,CAAC,GAAG0B,KAAK;QACT,OAAO,KAAK;MACd;IACF;;IAEA;IACA;IACA;IACA;IACA,OAAO,IAAA+C,oBAAO,EAAC1E,IAAI,CAACC,CAAC,CAAC,CAAC,EAAE;MACvBA,CAAC,EAAE;IACL;IAEA,IAAID,IAAI,CAACC,CAAC,CAAC,KAAK,GAAG,EAAE;MACnBA,CAAC,EAAE;MACH,IAAI0F,aAAa,CAAC,CAAC,EAAE;QACnBC,mCAAmC,CAACjE,KAAK,CAAC;QAC1C,OAAO,IAAI;MACb;MACA,IAAI,CAAC,IAAA+C,oBAAO,EAAC1E,IAAI,CAACC,CAAC,CAAC,CAAC,EAAE;QACrBA,CAAC,GAAG0B,KAAK;QACT,OAAO,KAAK;MACd;MACA,OAAO,IAAA+C,oBAAO,EAAC1E,IAAI,CAACC,CAAC,CAAC,CAAC,EAAE;QACvBA,CAAC,EAAE;MACL;IACF;IAEA,IAAID,IAAI,CAACC,CAAC,CAAC,KAAK,GAAG,IAAID,IAAI,CAACC,CAAC,CAAC,KAAK,GAAG,EAAE;MACtCA,CAAC,EAAE;MACH,IAAID,IAAI,CAACC,CAAC,CAAC,KAAK,GAAG,IAAID,IAAI,CAACC,CAAC,CAAC,KAAK,GAAG,EAAE;QACtCA,CAAC,EAAE;MACL;MACA,IAAI0F,aAAa,CAAC,CAAC,EAAE;QACnBC,mCAAmC,CAACjE,KAAK,CAAC;QAC1C,OAAO,IAAI;MACb;MACA,IAAI,CAAC,IAAA+C,oBAAO,EAAC1E,IAAI,CAACC,CAAC,CAAC,CAAC,EAAE;QACrBA,CAAC,GAAG0B,KAAK;QACT,OAAO,KAAK;MACd;MACA,OAAO,IAAA+C,oBAAO,EAAC1E,IAAI,CAACC,CAAC,CAAC,CAAC,EAAE;QACvBA,CAAC,EAAE;MACL;IACF;;IAEA;IACA,IAAI,CAAC0F,aAAa,CAAC,CAAC,EAAE;MACpB1F,CAAC,GAAG0B,KAAK;MACT,OAAO,KAAK;IACd;IAEA,IAAI1B,CAAC,GAAG0B,KAAK,EAAE;MACb;MACA,MAAMkE,GAAG,GAAG7F,IAAI,CAAC2C,KAAK,CAAChB,KAAK,EAAE1B,CAAC,CAAC;MAChC,MAAM6F,qBAAqB,GAAG,MAAM,CAACd,IAAI,CAACa,GAAG,CAAC;MAE9C3F,MAAM,IAAI4F,qBAAqB,GAAG,IAAID,GAAG,GAAG,GAAGA,GAAG;MAClD,OAAO,IAAI;IACb;IAEA,OAAO,KAAK;EACd;;EAEA;AACF;AACA;AACA;EACE,SAASxE,aAAaA,CAAA,EAAY;IAChC,OACE0E,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,IAC5BA,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,IAC9BA,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC;IAC5B;IACAA,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,IAC5BA,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,IAC9BA,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC;EAEhC;EAEA,SAASA,YAAYA,CAACC,IAAY,EAAEC,KAAa,EAAW;IAC1D,IAAIjG,IAAI,CAAC2C,KAAK,CAAC1C,CAAC,EAAEA,CAAC,GAAG+F,IAAI,CAACjF,MAAM,CAAC,KAAKiF,IAAI,EAAE;MAC3C9F,MAAM,IAAI+F,KAAK;MACfhG,CAAC,IAAI+F,IAAI,CAACjF,MAAM;MAChB,OAAO,IAAI;IACb;IAEA,OAAO,KAAK;EACd;;EAEA;AACF;AACA;AACA;AACA;EACE,SAASO,mBAAmBA,CAAC4E,KAAc,EAAE;IAC3C;IACA;IACA,MAAMvE,KAAK,GAAG1B,CAAC;IAEf,IAAI,IAAAsC,oCAAuB,EAACvC,IAAI,CAACC,CAAC,CAAC,CAAC,EAAE;MACpC,OAAOA,CAAC,GAAGD,IAAI,CAACe,MAAM,IAAI,IAAAyB,+BAAkB,EAACxC,IAAI,CAACC,CAAC,CAAC,CAAC,EAAE;QACrDA,CAAC,EAAE;MACL;MAEA,IAAIkF,CAAC,GAAGlF,CAAC;MACT,OAAO,IAAA+B,yBAAY,EAAChC,IAAI,EAAEmF,CAAC,CAAC,EAAE;QAC5BA,CAAC,EAAE;MACL;MAEA,IAAInF,IAAI,CAACmF,CAAC,CAAC,KAAK,GAAG,EAAE;QACnB;QACA;QACAlF,CAAC,GAAGkF,CAAC,GAAG,CAAC;QAET9E,UAAU,CAAC,CAAC;QAEZ,IAAIL,IAAI,CAACC,CAAC,CAAC,KAAK,GAAG,EAAE;UACnB;UACAA,CAAC,EAAE;UACH,IAAID,IAAI,CAACC,CAAC,CAAC,KAAK,GAAG,EAAE;YACnB;YACAA,CAAC,EAAE;UACL;QACF;QAEA,OAAO,IAAI;MACb;IACF;IAEA,OACEA,CAAC,GAAGD,IAAI,CAACe,MAAM,IACf,CAAC,IAAA+D,sCAAyB,EAAC9E,IAAI,CAACC,CAAC,CAAC,CAAC,IACnC,CAAC,IAAAyD,oBAAO,EAAC1D,IAAI,CAACC,CAAC,CAAC,CAAC,KAChB,CAACiG,KAAK,IAAIlG,IAAI,CAACC,CAAC,CAAC,KAAK,GAAG,CAAC,EAC3B;MACAA,CAAC,EAAE;IACL;;IAEA;IACA,IAAID,IAAI,CAACC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,IAAI8E,0BAAa,CAACC,IAAI,CAAChF,IAAI,CAACuE,SAAS,CAAC5C,KAAK,EAAE1B,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;MAC3E,OAAOA,CAAC,GAAGD,IAAI,CAACe,MAAM,IAAIkE,yBAAY,CAACD,IAAI,CAAChF,IAAI,CAACC,CAAC,CAAC,CAAC,EAAE;QACpDA,CAAC,EAAE;MACL;IACF;IAEA,IAAIA,CAAC,GAAG0B,KAAK,EAAE;MACb;MACA;;MAEA;MACA,OAAO,IAAAK,yBAAY,EAAChC,IAAI,EAAEC,CAAC,GAAG,CAAC,CAAC,IAAIA,CAAC,GAAG,CAAC,EAAE;QACzCA,CAAC,EAAE;MACL;MAEA,MAAMkG,MAAM,GAAGnG,IAAI,CAAC2C,KAAK,CAAChB,KAAK,EAAE1B,CAAC,CAAC;MACnCC,MAAM,IAAIiG,MAAM,KAAK,WAAW,GAAG,MAAM,GAAGC,IAAI,CAACC,SAAS,CAACF,MAAM,CAAC;MAElE,IAAInG,IAAI,CAACC,CAAC,CAAC,KAAK,GAAG,EAAE;QACnB;QACAA,CAAC,EAAE;MACL;MAEA,OAAO,IAAI;IACb;EACF;EAEA,SAASsB,UAAUA,CAAA,EAAG;IACpB,IAAIvB,IAAI,CAACC,CAAC,CAAC,KAAK,GAAG,EAAE;MACnB,MAAM0B,KAAK,GAAG1B,CAAC;MACfA,CAAC,EAAE;MAEH,OAAOA,CAAC,GAAGD,IAAI,CAACe,MAAM,KAAKf,IAAI,CAACC,CAAC,CAAC,KAAK,GAAG,IAAID,IAAI,CAACC,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,EAAE;QACnEA,CAAC,EAAE;MACL;MACAA,CAAC,EAAE;MAEHC,MAAM,IAAI,IAAIF,IAAI,CAACuE,SAAS,CAAC5C,KAAK,EAAE1B,CAAC,CAAC,GAAG;MAEzC,OAAO,IAAI;IACb;EACF;EAEA,SAASmE,sBAAsBA,CAACzC,KAAa,EAAU;IACrD,IAAI2E,IAAI,GAAG3E,KAAK;IAEhB,OAAO2E,IAAI,GAAG,CAAC,IAAI,IAAAtE,yBAAY,EAAChC,IAAI,EAAEsG,IAAI,CAAC,EAAE;MAC3CA,IAAI,EAAE;IACR;IAEA,OAAOA,IAAI;EACb;EAEA,SAASX,aAAaA,CAAA,EAAG;IACvB,OAAO1F,CAAC,IAAID,IAAI,CAACe,MAAM,IAAI,IAAAsD,wBAAW,EAACrE,IAAI,CAACC,CAAC,CAAC,CAAC,IAAI,IAAA+B,yBAAY,EAAChC,IAAI,EAAEC,CAAC,CAAC;EAC1E;EAEA,SAAS2F,mCAAmCA,CAACjE,KAAa,EAAE;IAC1D;IACA;IACA;IACAzB,MAAM,IAAI,GAAGF,IAAI,CAAC2C,KAAK,CAAChB,KAAK,EAAE1B,CAAC,CAAC,GAAG;EACtC;EAEA,SAASuF,qBAAqBA,CAAC5C,IAAY,EAAE;IAC3C,MAAM,IAAI2D,gCAAe,CAAC,qBAAqBH,IAAI,CAACC,SAAS,CAACzD,IAAI,CAAC,EAAE,EAAE3C,CAAC,CAAC;EAC3E;EAEA,SAASe,wBAAwBA,CAAA,EAAG;IAClC,MAAM,IAAIuF,gCAAe,CAAC,wBAAwBH,IAAI,CAACC,SAAS,CAACrG,IAAI,CAACC,CAAC,CAAC,CAAC,EAAE,EAAEA,CAAC,CAAC;EACjF;EAEA,SAASK,kBAAkBA,CAAA,EAAG;IAC5B,MAAM,IAAIiG,gCAAe,CAAC,+BAA+B,EAAEvG,IAAI,CAACe,MAAM,CAAC;EACzE;EAEA,SAASmC,sBAAsBA,CAAA,EAAG;IAChC,MAAM,IAAIqD,gCAAe,CAAC,qBAAqB,EAAEtG,CAAC,CAAC;EACrD;EAEA,SAASoD,kBAAkBA,CAAA,EAAG;IAC5B,MAAM,IAAIkD,gCAAe,CAAC,gBAAgB,EAAEtG,CAAC,CAAC;EAChD;EAEA,SAASoF,4BAA4BA,CAAA,EAAG;IACtC,MAAMmB,KAAK,GAAGxG,IAAI,CAAC2C,KAAK,CAAC1C,CAAC,EAAEA,CAAC,GAAG,CAAC,CAAC;IAClC,MAAM,IAAIsG,gCAAe,CAAC,8BAA8BC,KAAK,GAAG,EAAEvG,CAAC,CAAC;EACtE;AACF;AAEA,SAASmC,mBAAmBA,CAACpC,IAAY,EAAEC,CAAS,EAAE;EACpD,OAAOD,IAAI,CAACC,CAAC,CAAC,KAAK,GAAG,IAAID,IAAI,CAACC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG;AAC/C","ignoreList":[]}

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

{"version":3,"file":"stream.js","names":["_stream","require"],"sources":["../../src/stream.ts"],"sourcesContent":["// Node.js streaming API\nexport { jsonrepairTransform, type JsonRepairTransformOptions } from './streaming/stream.js'\n"],"mappings":";;;;;;;;;;;AACA,IAAAA,OAAA,GAAAC,OAAA","ignoreList":[]}
{"version":3,"file":"stream.js","names":["_stream","require"],"sources":["../../src/stream.ts"],"sourcesContent":["// Node.js streaming API\nexport { type JsonRepairTransformOptions, jsonrepairTransform } from './streaming/stream.js'\n"],"mappings":";;;;;;;;;;;AACA,IAAAA,OAAA,GAAAC,OAAA","ignoreList":[]}

@@ -14,7 +14,7 @@ "use strict";

if (index < offset) {
throw new Error("".concat(indexOutOfRangeMessage, " (index: ").concat(index, ", offset: ").concat(offset, ")"));
throw new Error(`${indexOutOfRangeMessage} (index: ${index}, offset: ${offset})`);
}
if (index >= currentLength) {
if (!closed) {
throw new Error("".concat(indexOutOfRangeMessage, " (index: ").concat(index, ")"));
throw new Error(`${indexOutOfRangeMessage} (index: ${index})`);
}

@@ -21,0 +21,0 @@ }

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

{"version":3,"file":"InputBuffer.js","names":["createInputBuffer","buffer","offset","currentLength","closed","ensure","index","Error","concat","indexOutOfRangeMessage","push","chunk","length","flush","position","substring","charAt","charCodeAt","start","end","slice","isEnd","close","currentBufferSize"],"sources":["../../../../src/streaming/buffer/InputBuffer.ts"],"sourcesContent":["export interface InputBuffer {\n push: (chunk: string) => void\n flush: (position: number) => void\n charAt: (index: number) => string\n charCodeAt: (index: number) => number\n substring: (start: number, end: number) => string\n length: () => number\n currentLength: () => number\n currentBufferSize: () => number\n isEnd: (index: number) => boolean\n close: () => void\n}\n\nexport function createInputBuffer(): InputBuffer {\n let buffer = ''\n let offset = 0\n let currentLength = 0\n let closed = false\n\n function ensure(index: number) {\n if (index < offset) {\n throw new Error(`${indexOutOfRangeMessage} (index: ${index}, offset: ${offset})`)\n }\n\n if (index >= currentLength) {\n if (!closed) {\n throw new Error(`${indexOutOfRangeMessage} (index: ${index})`)\n }\n }\n }\n\n function push(chunk: string) {\n buffer += chunk\n currentLength += chunk.length\n }\n\n function flush(position: number) {\n if (position > currentLength) {\n return\n }\n\n buffer = buffer.substring(position - offset)\n offset = position\n }\n\n function charAt(index: number): string {\n ensure(index)\n\n return buffer.charAt(index - offset)\n }\n\n function charCodeAt(index: number): number {\n ensure(index)\n\n return buffer.charCodeAt(index - offset)\n }\n\n function substring(start: number, end: number): string {\n ensure(end - 1) // -1 because end is excluded\n ensure(start)\n\n return buffer.slice(start - offset, end - offset)\n }\n\n function length(): number {\n if (!closed) {\n throw new Error('Cannot get length: input is not yet closed')\n }\n\n return currentLength\n }\n\n function isEnd(index: number): boolean {\n if (!closed) {\n ensure(index)\n }\n\n return index >= currentLength\n }\n\n function close() {\n closed = true\n }\n\n return {\n push,\n flush,\n charAt,\n charCodeAt,\n substring,\n length,\n currentLength: () => currentLength,\n currentBufferSize: () => buffer.length,\n isEnd,\n close\n }\n}\n\nconst indexOutOfRangeMessage = 'Index out of range, please configure a larger buffer size'\n"],"mappings":";;;;;;AAaO,SAASA,iBAAiBA,CAAA,EAAgB;EAC/C,IAAIC,MAAM,GAAG,EAAE;EACf,IAAIC,MAAM,GAAG,CAAC;EACd,IAAIC,aAAa,GAAG,CAAC;EACrB,IAAIC,MAAM,GAAG,KAAK;EAElB,SAASC,MAAMA,CAACC,KAAa,EAAE;IAC7B,IAAIA,KAAK,GAAGJ,MAAM,EAAE;MAClB,MAAM,IAAIK,KAAK,IAAAC,MAAA,CAAIC,sBAAsB,eAAAD,MAAA,CAAYF,KAAK,gBAAAE,MAAA,CAAaN,MAAM,MAAG,CAAC;IACnF;IAEA,IAAII,KAAK,IAAIH,aAAa,EAAE;MAC1B,IAAI,CAACC,MAAM,EAAE;QACX,MAAM,IAAIG,KAAK,IAAAC,MAAA,CAAIC,sBAAsB,eAAAD,MAAA,CAAYF,KAAK,MAAG,CAAC;MAChE;IACF;EACF;EAEA,SAASI,IAAIA,CAACC,KAAa,EAAE;IAC3BV,MAAM,IAAIU,KAAK;IACfR,aAAa,IAAIQ,KAAK,CAACC,MAAM;EAC/B;EAEA,SAASC,KAAKA,CAACC,QAAgB,EAAE;IAC/B,IAAIA,QAAQ,GAAGX,aAAa,EAAE;MAC5B;IACF;IAEAF,MAAM,GAAGA,MAAM,CAACc,SAAS,CAACD,QAAQ,GAAGZ,MAAM,CAAC;IAC5CA,MAAM,GAAGY,QAAQ;EACnB;EAEA,SAASE,MAAMA,CAACV,KAAa,EAAU;IACrCD,MAAM,CAACC,KAAK,CAAC;IAEb,OAAOL,MAAM,CAACe,MAAM,CAACV,KAAK,GAAGJ,MAAM,CAAC;EACtC;EAEA,SAASe,UAAUA,CAACX,KAAa,EAAU;IACzCD,MAAM,CAACC,KAAK,CAAC;IAEb,OAAOL,MAAM,CAACgB,UAAU,CAACX,KAAK,GAAGJ,MAAM,CAAC;EAC1C;EAEA,SAASa,SAASA,CAACG,KAAa,EAAEC,GAAW,EAAU;IACrDd,MAAM,CAACc,GAAG,GAAG,CAAC,CAAC,EAAC;IAChBd,MAAM,CAACa,KAAK,CAAC;IAEb,OAAOjB,MAAM,CAACmB,KAAK,CAACF,KAAK,GAAGhB,MAAM,EAAEiB,GAAG,GAAGjB,MAAM,CAAC;EACnD;EAEA,SAASU,MAAMA,CAAA,EAAW;IACxB,IAAI,CAACR,MAAM,EAAE;MACX,MAAM,IAAIG,KAAK,CAAC,4CAA4C,CAAC;IAC/D;IAEA,OAAOJ,aAAa;EACtB;EAEA,SAASkB,KAAKA,CAACf,KAAa,EAAW;IACrC,IAAI,CAACF,MAAM,EAAE;MACXC,MAAM,CAACC,KAAK,CAAC;IACf;IAEA,OAAOA,KAAK,IAAIH,aAAa;EAC/B;EAEA,SAASmB,KAAKA,CAAA,EAAG;IACflB,MAAM,GAAG,IAAI;EACf;EAEA,OAAO;IACLM,IAAI;IACJG,KAAK;IACLG,MAAM;IACNC,UAAU;IACVF,SAAS;IACTH,MAAM;IACNT,aAAa,EAAEA,CAAA,KAAMA,aAAa;IAClCoB,iBAAiB,EAAEA,CAAA,KAAMtB,MAAM,CAACW,MAAM;IACtCS,KAAK;IACLC;EACF,CAAC;AACH;AAEA,MAAMb,sBAAsB,GAAG,2DAA2D","ignoreList":[]}
{"version":3,"file":"InputBuffer.js","names":["createInputBuffer","buffer","offset","currentLength","closed","ensure","index","Error","indexOutOfRangeMessage","push","chunk","length","flush","position","substring","charAt","charCodeAt","start","end","slice","isEnd","close","currentBufferSize"],"sources":["../../../../src/streaming/buffer/InputBuffer.ts"],"sourcesContent":["export interface InputBuffer {\n push: (chunk: string) => void\n flush: (position: number) => void\n charAt: (index: number) => string\n charCodeAt: (index: number) => number\n substring: (start: number, end: number) => string\n length: () => number\n currentLength: () => number\n currentBufferSize: () => number\n isEnd: (index: number) => boolean\n close: () => void\n}\n\nexport function createInputBuffer(): InputBuffer {\n let buffer = ''\n let offset = 0\n let currentLength = 0\n let closed = false\n\n function ensure(index: number) {\n if (index < offset) {\n throw new Error(`${indexOutOfRangeMessage} (index: ${index}, offset: ${offset})`)\n }\n\n if (index >= currentLength) {\n if (!closed) {\n throw new Error(`${indexOutOfRangeMessage} (index: ${index})`)\n }\n }\n }\n\n function push(chunk: string) {\n buffer += chunk\n currentLength += chunk.length\n }\n\n function flush(position: number) {\n if (position > currentLength) {\n return\n }\n\n buffer = buffer.substring(position - offset)\n offset = position\n }\n\n function charAt(index: number): string {\n ensure(index)\n\n return buffer.charAt(index - offset)\n }\n\n function charCodeAt(index: number): number {\n ensure(index)\n\n return buffer.charCodeAt(index - offset)\n }\n\n function substring(start: number, end: number): string {\n ensure(end - 1) // -1 because end is excluded\n ensure(start)\n\n return buffer.slice(start - offset, end - offset)\n }\n\n function length(): number {\n if (!closed) {\n throw new Error('Cannot get length: input is not yet closed')\n }\n\n return currentLength\n }\n\n function isEnd(index: number): boolean {\n if (!closed) {\n ensure(index)\n }\n\n return index >= currentLength\n }\n\n function close() {\n closed = true\n }\n\n return {\n push,\n flush,\n charAt,\n charCodeAt,\n substring,\n length,\n currentLength: () => currentLength,\n currentBufferSize: () => buffer.length,\n isEnd,\n close\n }\n}\n\nconst indexOutOfRangeMessage = 'Index out of range, please configure a larger buffer size'\n"],"mappings":";;;;;;AAaO,SAASA,iBAAiBA,CAAA,EAAgB;EAC/C,IAAIC,MAAM,GAAG,EAAE;EACf,IAAIC,MAAM,GAAG,CAAC;EACd,IAAIC,aAAa,GAAG,CAAC;EACrB,IAAIC,MAAM,GAAG,KAAK;EAElB,SAASC,MAAMA,CAACC,KAAa,EAAE;IAC7B,IAAIA,KAAK,GAAGJ,MAAM,EAAE;MAClB,MAAM,IAAIK,KAAK,CAAC,GAAGC,sBAAsB,YAAYF,KAAK,aAAaJ,MAAM,GAAG,CAAC;IACnF;IAEA,IAAII,KAAK,IAAIH,aAAa,EAAE;MAC1B,IAAI,CAACC,MAAM,EAAE;QACX,MAAM,IAAIG,KAAK,CAAC,GAAGC,sBAAsB,YAAYF,KAAK,GAAG,CAAC;MAChE;IACF;EACF;EAEA,SAASG,IAAIA,CAACC,KAAa,EAAE;IAC3BT,MAAM,IAAIS,KAAK;IACfP,aAAa,IAAIO,KAAK,CAACC,MAAM;EAC/B;EAEA,SAASC,KAAKA,CAACC,QAAgB,EAAE;IAC/B,IAAIA,QAAQ,GAAGV,aAAa,EAAE;MAC5B;IACF;IAEAF,MAAM,GAAGA,MAAM,CAACa,SAAS,CAACD,QAAQ,GAAGX,MAAM,CAAC;IAC5CA,MAAM,GAAGW,QAAQ;EACnB;EAEA,SAASE,MAAMA,CAACT,KAAa,EAAU;IACrCD,MAAM,CAACC,KAAK,CAAC;IAEb,OAAOL,MAAM,CAACc,MAAM,CAACT,KAAK,GAAGJ,MAAM,CAAC;EACtC;EAEA,SAASc,UAAUA,CAACV,KAAa,EAAU;IACzCD,MAAM,CAACC,KAAK,CAAC;IAEb,OAAOL,MAAM,CAACe,UAAU,CAACV,KAAK,GAAGJ,MAAM,CAAC;EAC1C;EAEA,SAASY,SAASA,CAACG,KAAa,EAAEC,GAAW,EAAU;IACrDb,MAAM,CAACa,GAAG,GAAG,CAAC,CAAC,EAAC;IAChBb,MAAM,CAACY,KAAK,CAAC;IAEb,OAAOhB,MAAM,CAACkB,KAAK,CAACF,KAAK,GAAGf,MAAM,EAAEgB,GAAG,GAAGhB,MAAM,CAAC;EACnD;EAEA,SAASS,MAAMA,CAAA,EAAW;IACxB,IAAI,CAACP,MAAM,EAAE;MACX,MAAM,IAAIG,KAAK,CAAC,4CAA4C,CAAC;IAC/D;IAEA,OAAOJ,aAAa;EACtB;EAEA,SAASiB,KAAKA,CAACd,KAAa,EAAW;IACrC,IAAI,CAACF,MAAM,EAAE;MACXC,MAAM,CAACC,KAAK,CAAC;IACf;IAEA,OAAOA,KAAK,IAAIH,aAAa;EAC/B;EAEA,SAASkB,KAAKA,CAAA,EAAG;IACfjB,MAAM,GAAG,IAAI;EACf;EAEA,OAAO;IACLK,IAAI;IACJG,KAAK;IACLG,MAAM;IACNC,UAAU;IACVF,SAAS;IACTH,MAAM;IACNR,aAAa,EAAEA,CAAA,KAAMA,aAAa;IAClCmB,iBAAiB,EAAEA,CAAA,KAAMrB,MAAM,CAACU,MAAM;IACtCS,KAAK;IACLC;EACF,CAAC;AACH;AAEA,MAAMb,sBAAsB,GAAG,2DAA2D","ignoreList":[]}

@@ -39,3 +39,3 @@ "use strict";

if (offset > 0) {
throw new Error("Cannot unshift: ".concat(flushedMessage));
throw new Error(`Cannot unshift: ${flushedMessage}`);
}

@@ -47,3 +47,3 @@ buffer = text + buffer;

if (start < offset) {
throw new Error("Cannot remove: ".concat(flushedMessage));
throw new Error(`Cannot remove: ${flushedMessage}`);
}

@@ -58,3 +58,3 @@ if (end !== undefined) {

if (index < offset) {
throw new Error("Cannot insert: ".concat(flushedMessage));
throw new Error(`Cannot insert: ${flushedMessage}`);
}

@@ -89,3 +89,3 @@ buffer = buffer.substring(0, index - offset) + text + buffer.substring(index - offset);

if (bufferIndex <= 0) {
throw new Error("Cannot insert: ".concat(flushedMessage));
throw new Error(`Cannot insert: ${flushedMessage}`);
}

@@ -92,0 +92,0 @@ buffer = buffer.substring(0, bufferIndex) + textToInsert + buffer.substring(bufferIndex);

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

{"version":3,"file":"OutputBuffer.js","names":["_stringUtils","require","createOutputBuffer","_ref","write","chunkSize","bufferSize","buffer","offset","flushChunks","minSize","arguments","length","undefined","chunk","substring","flush","push","text","unshift","Error","concat","flushedMessage","remove","start","end","insertAt","index","stripLastOccurrence","textToStrip","stripRemainingText","bufferIndex","lastIndexOf","insertBeforeLastWhitespace","textToInsert","isWhitespace","endsWithIgnoringWhitespace","char","i","charAt"],"sources":["../../../../src/streaming/buffer/OutputBuffer.ts"],"sourcesContent":["import { isWhitespace } from '../../utils/stringUtils.js'\n\nexport interface OutputBuffer {\n push: (text: string) => void\n unshift: (text: string) => void\n remove: (start: number, end?: number) => void\n insertAt: (index: number, text: string) => void\n length: () => number\n flush: () => void\n\n stripLastOccurrence: (textToStrip: string, stripRemainingText?: boolean) => void\n insertBeforeLastWhitespace: (textToInsert: string) => void\n endsWithIgnoringWhitespace: (char: string) => boolean\n}\n\nexport interface OutputBufferOptions {\n write: (chunk: string) => void\n chunkSize: number\n bufferSize: number\n}\n\nexport function createOutputBuffer({\n write,\n chunkSize,\n bufferSize\n}: OutputBufferOptions): OutputBuffer {\n let buffer = ''\n let offset = 0\n\n function flushChunks(minSize = bufferSize) {\n while (buffer.length >= minSize + chunkSize) {\n const chunk = buffer.substring(0, chunkSize)\n write(chunk)\n offset += chunkSize\n buffer = buffer.substring(chunkSize)\n }\n }\n\n function flush() {\n flushChunks(0)\n\n if (buffer.length > 0) {\n write(buffer)\n offset += buffer.length\n buffer = ''\n }\n }\n\n function push(text: string) {\n buffer += text\n flushChunks()\n }\n\n function unshift(text: string) {\n if (offset > 0) {\n throw new Error(`Cannot unshift: ${flushedMessage}`)\n }\n\n buffer = text + buffer\n flushChunks()\n }\n\n function remove(start: number, end?: number) {\n if (start < offset) {\n throw new Error(`Cannot remove: ${flushedMessage}`)\n }\n\n if (end !== undefined) {\n buffer = buffer.substring(0, start - offset) + buffer.substring(end - offset)\n } else {\n buffer = buffer.substring(0, start - offset)\n }\n }\n\n function insertAt(index: number, text: string) {\n if (index < offset) {\n throw new Error(`Cannot insert: ${flushedMessage}`)\n }\n\n buffer = buffer.substring(0, index - offset) + text + buffer.substring(index - offset)\n }\n\n function length(): number {\n return offset + buffer.length\n }\n\n function stripLastOccurrence(textToStrip: string, stripRemainingText = false) {\n const bufferIndex = buffer.lastIndexOf(textToStrip)\n\n if (bufferIndex !== -1) {\n if (stripRemainingText) {\n buffer = buffer.substring(0, bufferIndex)\n } else {\n buffer =\n buffer.substring(0, bufferIndex) + buffer.substring(bufferIndex + textToStrip.length)\n }\n }\n }\n\n function insertBeforeLastWhitespace(textToInsert: string) {\n let bufferIndex = buffer.length // index relative to the start of the buffer, not taking `offset` into account\n\n if (!isWhitespace(buffer, bufferIndex - 1)) {\n // no trailing whitespaces\n push(textToInsert)\n return\n }\n\n while (isWhitespace(buffer, bufferIndex - 1)) {\n bufferIndex--\n }\n\n if (bufferIndex <= 0) {\n throw new Error(`Cannot insert: ${flushedMessage}`)\n }\n\n buffer = buffer.substring(0, bufferIndex) + textToInsert + buffer.substring(bufferIndex)\n flushChunks()\n }\n\n function endsWithIgnoringWhitespace(char: string): boolean {\n let i = buffer.length - 1\n\n while (i > 0) {\n if (char === buffer.charAt(i)) {\n return true\n }\n\n if (!isWhitespace(buffer, i)) {\n return false\n }\n\n i--\n }\n\n return false\n }\n\n return {\n push,\n unshift,\n remove,\n insertAt,\n length,\n flush,\n\n stripLastOccurrence,\n insertBeforeLastWhitespace,\n endsWithIgnoringWhitespace\n }\n}\n\nconst flushedMessage = 'start of the output is already flushed from the buffer'\n"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAqBO,SAASC,kBAAkBA,CAAAC,IAAA,EAII;EAAA,IAJH;IACjCC,KAAK;IACLC,SAAS;IACTC;EACmB,CAAC,GAAAH,IAAA;EACpB,IAAII,MAAM,GAAG,EAAE;EACf,IAAIC,MAAM,GAAG,CAAC;EAEd,SAASC,WAAWA,CAAA,EAAuB;IAAA,IAAtBC,OAAO,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAGL,UAAU;IACvC,OAAOC,MAAM,CAACK,MAAM,IAAIF,OAAO,GAAGL,SAAS,EAAE;MAC3C,MAAMS,KAAK,GAAGP,MAAM,CAACQ,SAAS,CAAC,CAAC,EAAEV,SAAS,CAAC;MAC5CD,KAAK,CAACU,KAAK,CAAC;MACZN,MAAM,IAAIH,SAAS;MACnBE,MAAM,GAAGA,MAAM,CAACQ,SAAS,CAACV,SAAS,CAAC;IACtC;EACF;EAEA,SAASW,KAAKA,CAAA,EAAG;IACfP,WAAW,CAAC,CAAC,CAAC;IAEd,IAAIF,MAAM,CAACK,MAAM,GAAG,CAAC,EAAE;MACrBR,KAAK,CAACG,MAAM,CAAC;MACbC,MAAM,IAAID,MAAM,CAACK,MAAM;MACvBL,MAAM,GAAG,EAAE;IACb;EACF;EAEA,SAASU,IAAIA,CAACC,IAAY,EAAE;IAC1BX,MAAM,IAAIW,IAAI;IACdT,WAAW,CAAC,CAAC;EACf;EAEA,SAASU,OAAOA,CAACD,IAAY,EAAE;IAC7B,IAAIV,MAAM,GAAG,CAAC,EAAE;MACd,MAAM,IAAIY,KAAK,oBAAAC,MAAA,CAAoBC,cAAc,CAAE,CAAC;IACtD;IAEAf,MAAM,GAAGW,IAAI,GAAGX,MAAM;IACtBE,WAAW,CAAC,CAAC;EACf;EAEA,SAASc,MAAMA,CAACC,KAAa,EAAEC,GAAY,EAAE;IAC3C,IAAID,KAAK,GAAGhB,MAAM,EAAE;MAClB,MAAM,IAAIY,KAAK,mBAAAC,MAAA,CAAmBC,cAAc,CAAE,CAAC;IACrD;IAEA,IAAIG,GAAG,KAAKZ,SAAS,EAAE;MACrBN,MAAM,GAAGA,MAAM,CAACQ,SAAS,CAAC,CAAC,EAAES,KAAK,GAAGhB,MAAM,CAAC,GAAGD,MAAM,CAACQ,SAAS,CAACU,GAAG,GAAGjB,MAAM,CAAC;IAC/E,CAAC,MAAM;MACLD,MAAM,GAAGA,MAAM,CAACQ,SAAS,CAAC,CAAC,EAAES,KAAK,GAAGhB,MAAM,CAAC;IAC9C;EACF;EAEA,SAASkB,QAAQA,CAACC,KAAa,EAAET,IAAY,EAAE;IAC7C,IAAIS,KAAK,GAAGnB,MAAM,EAAE;MAClB,MAAM,IAAIY,KAAK,mBAAAC,MAAA,CAAmBC,cAAc,CAAE,CAAC;IACrD;IAEAf,MAAM,GAAGA,MAAM,CAACQ,SAAS,CAAC,CAAC,EAAEY,KAAK,GAAGnB,MAAM,CAAC,GAAGU,IAAI,GAAGX,MAAM,CAACQ,SAAS,CAACY,KAAK,GAAGnB,MAAM,CAAC;EACxF;EAEA,SAASI,MAAMA,CAAA,EAAW;IACxB,OAAOJ,MAAM,GAAGD,MAAM,CAACK,MAAM;EAC/B;EAEA,SAASgB,mBAAmBA,CAACC,WAAmB,EAA8B;IAAA,IAA5BC,kBAAkB,GAAAnB,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,KAAK;IAC1E,MAAMoB,WAAW,GAAGxB,MAAM,CAACyB,WAAW,CAACH,WAAW,CAAC;IAEnD,IAAIE,WAAW,KAAK,CAAC,CAAC,EAAE;MACtB,IAAID,kBAAkB,EAAE;QACtBvB,MAAM,GAAGA,MAAM,CAACQ,SAAS,CAAC,CAAC,EAAEgB,WAAW,CAAC;MAC3C,CAAC,MAAM;QACLxB,MAAM,GACJA,MAAM,CAACQ,SAAS,CAAC,CAAC,EAAEgB,WAAW,CAAC,GAAGxB,MAAM,CAACQ,SAAS,CAACgB,WAAW,GAAGF,WAAW,CAACjB,MAAM,CAAC;MACzF;IACF;EACF;EAEA,SAASqB,0BAA0BA,CAACC,YAAoB,EAAE;IACxD,IAAIH,WAAW,GAAGxB,MAAM,CAACK,MAAM,EAAC;;IAEhC,IAAI,CAAC,IAAAuB,yBAAY,EAAC5B,MAAM,EAAEwB,WAAW,GAAG,CAAC,CAAC,EAAE;MAC1C;MACAd,IAAI,CAACiB,YAAY,CAAC;MAClB;IACF;IAEA,OAAO,IAAAC,yBAAY,EAAC5B,MAAM,EAAEwB,WAAW,GAAG,CAAC,CAAC,EAAE;MAC5CA,WAAW,EAAE;IACf;IAEA,IAAIA,WAAW,IAAI,CAAC,EAAE;MACpB,MAAM,IAAIX,KAAK,mBAAAC,MAAA,CAAmBC,cAAc,CAAE,CAAC;IACrD;IAEAf,MAAM,GAAGA,MAAM,CAACQ,SAAS,CAAC,CAAC,EAAEgB,WAAW,CAAC,GAAGG,YAAY,GAAG3B,MAAM,CAACQ,SAAS,CAACgB,WAAW,CAAC;IACxFtB,WAAW,CAAC,CAAC;EACf;EAEA,SAAS2B,0BAA0BA,CAACC,IAAY,EAAW;IACzD,IAAIC,CAAC,GAAG/B,MAAM,CAACK,MAAM,GAAG,CAAC;IAEzB,OAAO0B,CAAC,GAAG,CAAC,EAAE;MACZ,IAAID,IAAI,KAAK9B,MAAM,CAACgC,MAAM,CAACD,CAAC,CAAC,EAAE;QAC7B,OAAO,IAAI;MACb;MAEA,IAAI,CAAC,IAAAH,yBAAY,EAAC5B,MAAM,EAAE+B,CAAC,CAAC,EAAE;QAC5B,OAAO,KAAK;MACd;MAEAA,CAAC,EAAE;IACL;IAEA,OAAO,KAAK;EACd;EAEA,OAAO;IACLrB,IAAI;IACJE,OAAO;IACPI,MAAM;IACNG,QAAQ;IACRd,MAAM;IACNI,KAAK;IAELY,mBAAmB;IACnBK,0BAA0B;IAC1BG;EACF,CAAC;AACH;AAEA,MAAMd,cAAc,GAAG,wDAAwD","ignoreList":[]}
{"version":3,"file":"OutputBuffer.js","names":["_stringUtils","require","createOutputBuffer","_ref","write","chunkSize","bufferSize","buffer","offset","flushChunks","minSize","arguments","length","undefined","chunk","substring","flush","push","text","unshift","Error","flushedMessage","remove","start","end","insertAt","index","stripLastOccurrence","textToStrip","stripRemainingText","bufferIndex","lastIndexOf","insertBeforeLastWhitespace","textToInsert","isWhitespace","endsWithIgnoringWhitespace","char","i","charAt"],"sources":["../../../../src/streaming/buffer/OutputBuffer.ts"],"sourcesContent":["import { isWhitespace } from '../../utils/stringUtils.js'\n\nexport interface OutputBuffer {\n push: (text: string) => void\n unshift: (text: string) => void\n remove: (start: number, end?: number) => void\n insertAt: (index: number, text: string) => void\n length: () => number\n flush: () => void\n\n stripLastOccurrence: (textToStrip: string, stripRemainingText?: boolean) => void\n insertBeforeLastWhitespace: (textToInsert: string) => void\n endsWithIgnoringWhitespace: (char: string) => boolean\n}\n\nexport interface OutputBufferOptions {\n write: (chunk: string) => void\n chunkSize: number\n bufferSize: number\n}\n\nexport function createOutputBuffer({\n write,\n chunkSize,\n bufferSize\n}: OutputBufferOptions): OutputBuffer {\n let buffer = ''\n let offset = 0\n\n function flushChunks(minSize = bufferSize) {\n while (buffer.length >= minSize + chunkSize) {\n const chunk = buffer.substring(0, chunkSize)\n write(chunk)\n offset += chunkSize\n buffer = buffer.substring(chunkSize)\n }\n }\n\n function flush() {\n flushChunks(0)\n\n if (buffer.length > 0) {\n write(buffer)\n offset += buffer.length\n buffer = ''\n }\n }\n\n function push(text: string) {\n buffer += text\n flushChunks()\n }\n\n function unshift(text: string) {\n if (offset > 0) {\n throw new Error(`Cannot unshift: ${flushedMessage}`)\n }\n\n buffer = text + buffer\n flushChunks()\n }\n\n function remove(start: number, end?: number) {\n if (start < offset) {\n throw new Error(`Cannot remove: ${flushedMessage}`)\n }\n\n if (end !== undefined) {\n buffer = buffer.substring(0, start - offset) + buffer.substring(end - offset)\n } else {\n buffer = buffer.substring(0, start - offset)\n }\n }\n\n function insertAt(index: number, text: string) {\n if (index < offset) {\n throw new Error(`Cannot insert: ${flushedMessage}`)\n }\n\n buffer = buffer.substring(0, index - offset) + text + buffer.substring(index - offset)\n }\n\n function length(): number {\n return offset + buffer.length\n }\n\n function stripLastOccurrence(textToStrip: string, stripRemainingText = false) {\n const bufferIndex = buffer.lastIndexOf(textToStrip)\n\n if (bufferIndex !== -1) {\n if (stripRemainingText) {\n buffer = buffer.substring(0, bufferIndex)\n } else {\n buffer =\n buffer.substring(0, bufferIndex) + buffer.substring(bufferIndex + textToStrip.length)\n }\n }\n }\n\n function insertBeforeLastWhitespace(textToInsert: string) {\n let bufferIndex = buffer.length // index relative to the start of the buffer, not taking `offset` into account\n\n if (!isWhitespace(buffer, bufferIndex - 1)) {\n // no trailing whitespaces\n push(textToInsert)\n return\n }\n\n while (isWhitespace(buffer, bufferIndex - 1)) {\n bufferIndex--\n }\n\n if (bufferIndex <= 0) {\n throw new Error(`Cannot insert: ${flushedMessage}`)\n }\n\n buffer = buffer.substring(0, bufferIndex) + textToInsert + buffer.substring(bufferIndex)\n flushChunks()\n }\n\n function endsWithIgnoringWhitespace(char: string): boolean {\n let i = buffer.length - 1\n\n while (i > 0) {\n if (char === buffer.charAt(i)) {\n return true\n }\n\n if (!isWhitespace(buffer, i)) {\n return false\n }\n\n i--\n }\n\n return false\n }\n\n return {\n push,\n unshift,\n remove,\n insertAt,\n length,\n flush,\n\n stripLastOccurrence,\n insertBeforeLastWhitespace,\n endsWithIgnoringWhitespace\n }\n}\n\nconst flushedMessage = 'start of the output is already flushed from the buffer'\n"],"mappings":"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","ignoreList":[]}

@@ -207,3 +207,3 @@ "use strict";

i++;
output.push("\"".concat(input.substring(start, i), "\""));
output.push(`"${input.substring(start, i)}"`);
return stack.update(_stack.Caret.afterValue);

@@ -327,7 +327,7 @@ }

function parseRootStart() {
parseMarkdownCodeBlock();
parseMarkdownCodeBlock(['```', '[```', '{```']);
return parseValue() || parseUnexpectedEnd();
}
function parseRootEnd() {
parseMarkdownCodeBlock();
parseMarkdownCodeBlock(['```', '```]', '```}']);
const parsedComma = parseCharacter(',');

@@ -415,3 +415,3 @@ parseWhitespaceAndSkipComments();

}
function parseMarkdownCodeBlock() {
function parseMarkdownCodeBlock(blocks) {
// find and skip over a Markdown fenced code block:

@@ -421,4 +421,3 @@ // ``` ... ```

// ```json ... ```
if (input.substring(i, i + 3) === '```') {
i += 3;
if (skipMarkdownCodeBlock(blocks)) {
if ((0, _stringUtils.isFunctionNameCharStart)(input.charAt(i))) {

@@ -435,2 +434,12 @@ // strip the optional language specifier like "json"

}
function skipMarkdownCodeBlock(blocks) {
for (const block of blocks) {
const end = i + block.length;
if (input.substring(i, end) === block) {
i = end;
return true;
}
}
return false;
}
function parseCharacter(char) {

@@ -520,9 +529,9 @@ if (input.charAt(i) === char) {

return stack.update(_stack.Caret.afterValue);
// biome-ignore lint/style/noUselessElse: <explanation>
} else if (i === stopAtIndex) {
}
if (i === stopAtIndex) {
// use the stop index detected in the first iteration, and repair end quote
output.insertBeforeLastWhitespace('"');
return stack.update(_stack.Caret.afterValue);
// biome-ignore lint/style/noUselessElse: <explanation>
} else if (isEndQuote(input.charAt(i))) {
}
if (isEndQuote(input.charAt(i))) {
// end quote

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

// repair unescaped double quote
output.push("\\".concat(char));
output.push(`\\${char}`);
i++;

@@ -729,3 +738,3 @@ } else if ((0, _stringUtils.isControlCharacter)(char)) {

const hasInvalidLeadingZero = /^0\d/.test(num);
output.push(hasInvalidLeadingZero ? "\"".concat(num, "\"") : num);
output.push(hasInvalidLeadingZero ? `"${num}"` : num);
return stack.update(_stack.Caret.afterValue);

@@ -794,9 +803,9 @@ }

// change the number more than it needs to make it valid JSON
output.push("".concat(input.substring(start, i), "0"));
output.push(`${input.substring(start, i)}0`);
}
function throwInvalidCharacter(char) {
throw new _JSONRepairError.JSONRepairError("Invalid character ".concat(JSON.stringify(char)), i);
throw new _JSONRepairError.JSONRepairError(`Invalid character ${JSON.stringify(char)}`, i);
}
function throwUnexpectedCharacter() {
throw new _JSONRepairError.JSONRepairError("Unexpected character ".concat(JSON.stringify(input.charAt(i))), i);
throw new _JSONRepairError.JSONRepairError(`Unexpected character ${JSON.stringify(input.charAt(i))}`, i);
}

@@ -814,3 +823,3 @@ function throwUnexpectedEnd() {

const chars = input.substring(i, i + 6);
throw new _JSONRepairError.JSONRepairError("Invalid unicode character \"".concat(chars, "\""), i);
throw new _JSONRepairError.JSONRepairError(`Invalid unicode character "${chars}"`, i);
}

@@ -817,0 +826,0 @@ function atEndOfBlockComment(i) {

@@ -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","concat","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","char","skipEscapeCharacter","stopAtDelimiter","stopAtIndex","skipEscapeChars","isQuote","isEndQuote","isDoubleQuote","isSingleQuote","isSingleQuoteLike","isDoubleQuoteLike","iBefore","oBefore","iPrev","prevNonWhitespaceIndex","isDelimiter","remove","iQuote","oQuote","isDigit","parseConcatenatedString","iPrevChar","prevChar","insertAt","isUnquotedStringDelimiter","escapeChar","isHex","throwInvalidUnicodeCharacter","isControlCharacter","isValidStringCharacter","throwInvalidCharacter","parsed","parsedStr","atEndOfNumber","repairNumberEndingWithNumericSymbol","num","hasInvalidLeadingZero","parseKeyword","name","value","end","isKey","prev","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 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, StackType, createStack } 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(`\"${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(): boolean {\n // find and skip over a Markdown fenced code block:\n // ``` ... ```\n // or\n // ```json ... ```\n if (input.substring(i, i + 3) === '```') {\n i += 3\n\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 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 // biome-ignore lint/style/noUselessElse: <explanation>\n } else 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 // biome-ignore lint/style/noUselessElse: <explanation>\n } else 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 isQuote(input.charAt(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 {\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 if (input.charAt(i) === '-') {\n i++\n if (atEndOfNumber()) {\n repairNumberEndingWithNumericSymbol(start)\n return stack.update(Caret.afterValue)\n }\n if (!isDigit(input.charAt(i))) {\n i = start\n return false\n }\n }\n\n // Note that in JSON leading zeros like \"00789\" are not allowed.\n // We will allow all leading zeros here though and at the end of parseNumber\n // check against trailing zeros and repair that if needed.\n // Leading zeros can have meaning, so we should not clear them.\n while (isDigit(input.charAt(i))) {\n i++\n }\n\n if (input.charAt(i) === '.') {\n i++\n if (atEndOfNumber()) {\n repairNumberEndingWithNumericSymbol(start)\n return stack.update(Caret.afterValue)\n }\n if (!isDigit(input.charAt(i))) {\n i = start\n return false\n }\n while (isDigit(input.charAt(i))) {\n i++\n }\n }\n\n if (input.charAt(i) === 'e' || input.charAt(i) === 'E') {\n i++\n if (input.charAt(i) === '-' || input.charAt(i) === '+') {\n i++\n }\n if (atEndOfNumber()) {\n repairNumberEndingWithNumericSymbol(start)\n return stack.update(Caret.afterValue)\n }\n if (!isDigit(input.charAt(i))) {\n i = start\n return false\n }\n while (isDigit(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 if (i > start) {\n // repair a number with leading zeros like \"00789\"\n const num = input.substring(start, i)\n const hasInvalidLeadingZero = /^0\\d/.test(num)\n\n output.push(hasInvalidLeadingZero ? `\"${num}\"` : 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 (input.substring(i, i + name.length) === name) {\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 atEndOfNumber() {\n return input.isEnd(i) || isDelimiter(input.charAt(i)) || isWhitespace(input, i)\n }\n\n function repairNumberEndingWithNumericSymbol(start: number) {\n // repair numbers cut off at the end\n // this will only be called when we end after a '.', '-', or 'e' and does not\n // change the number more than it needs to make it valid JSON\n output.push(`${input.substring(start, i)}0`)\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","stopAtDelimiter","stopAtIndex","skipEscapeChars","isQuote","isEndQuote","isDoubleQuote","isSingleQuote","isSingleQuoteLike","isDoubleQuoteLike","iBefore","oBefore","iPrev","prevNonWhitespaceIndex","isDelimiter","remove","iQuote","oQuote","isDigit","parseConcatenatedString","iPrevChar","prevChar","insertAt","isUnquotedStringDelimiter","escapeChar","isHex","throwInvalidUnicodeCharacter","isControlCharacter","isValidStringCharacter","throwInvalidCharacter","parsed","parsedStr","atEndOfNumber","repairNumberEndingWithNumericSymbol","num","hasInvalidLeadingZero","parseKeyword","name","value","isKey","prev","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 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(`\"${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 isQuote(input.charAt(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 {\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 if (input.charAt(i) === '-') {\n i++\n if (atEndOfNumber()) {\n repairNumberEndingWithNumericSymbol(start)\n return stack.update(Caret.afterValue)\n }\n if (!isDigit(input.charAt(i))) {\n i = start\n return false\n }\n }\n\n // Note that in JSON leading zeros like \"00789\" are not allowed.\n // We will allow all leading zeros here though and at the end of parseNumber\n // check against trailing zeros and repair that if needed.\n // Leading zeros can have meaning, so we should not clear them.\n while (isDigit(input.charAt(i))) {\n i++\n }\n\n if (input.charAt(i) === '.') {\n i++\n if (atEndOfNumber()) {\n repairNumberEndingWithNumericSymbol(start)\n return stack.update(Caret.afterValue)\n }\n if (!isDigit(input.charAt(i))) {\n i = start\n return false\n }\n while (isDigit(input.charAt(i))) {\n i++\n }\n }\n\n if (input.charAt(i) === 'e' || input.charAt(i) === 'E') {\n i++\n if (input.charAt(i) === '-' || input.charAt(i) === '+') {\n i++\n }\n if (atEndOfNumber()) {\n repairNumberEndingWithNumericSymbol(start)\n return stack.update(Caret.afterValue)\n }\n if (!isDigit(input.charAt(i))) {\n i = start\n return false\n }\n while (isDigit(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 if (i > start) {\n // repair a number with leading zeros like \"00789\"\n const num = input.substring(start, i)\n const hasInvalidLeadingZero = /^0\\d/.test(num)\n\n output.push(hasInvalidLeadingZero ? `\"${num}\"` : 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 (input.substring(i, i + name.length) === name) {\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 atEndOfNumber() {\n return input.isEnd(i) || isDelimiter(input.charAt(i)) || isWhitespace(input, i)\n }\n\n function repairNumberEndingWithNumericSymbol(start: number) {\n // repair numbers cut off at the end\n // this will only be called when we end after a '.', '-', or 'e' and does not\n // change the number more than it needs to make it valid JSON\n output.push(`${input.substring(start, i)}0`)\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":[]}

@@ -12,7 +12,7 @@ "use strict";

onData: chunk => transform.push(chunk),
bufferSize: options === null || options === void 0 ? void 0 : options.bufferSize,
chunkSize: options === null || options === void 0 ? void 0 : options.chunkSize
bufferSize: options?.bufferSize,
chunkSize: options?.chunkSize
});
const transform = new _nodeStream.Transform({
transform(chunk, encoding, callback) {
transform(chunk, _encoding, callback) {
try {

@@ -19,0 +19,0 @@ repair.transform(chunk.toString());

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

{"version":3,"file":"stream.js","names":["_nodeStream","require","_core","jsonrepairTransform","options","repair","jsonrepairCore","onData","chunk","transform","push","bufferSize","chunkSize","Transform","encoding","callback","toString","err","emit","flush"],"sources":["../../../src/streaming/stream.ts"],"sourcesContent":["import { Transform } from 'node:stream'\nimport { jsonrepairCore } from './core.js'\n\nexport interface JsonRepairTransformOptions {\n chunkSize?: number\n bufferSize?: number\n}\n\nexport function jsonrepairTransform(options?: JsonRepairTransformOptions): Transform {\n const repair = jsonrepairCore({\n onData: (chunk) => transform.push(chunk),\n bufferSize: options?.bufferSize,\n chunkSize: options?.chunkSize\n })\n\n const transform = new Transform({\n transform(chunk, encoding, callback) {\n try {\n repair.transform(chunk.toString())\n } catch (err) {\n this.emit('error', err)\n } finally {\n callback()\n }\n },\n\n flush(callback) {\n try {\n repair.flush()\n } catch (err) {\n this.emit('error', err)\n } finally {\n callback()\n }\n }\n })\n\n return transform\n}\n"],"mappings":";;;;;;AAAA,IAAAA,WAAA,GAAAC,OAAA;AACA,IAAAC,KAAA,GAAAD,OAAA;AAOO,SAASE,mBAAmBA,CAACC,OAAoC,EAAa;EACnF,MAAMC,MAAM,GAAG,IAAAC,oBAAc,EAAC;IAC5BC,MAAM,EAAGC,KAAK,IAAKC,SAAS,CAACC,IAAI,CAACF,KAAK,CAAC;IACxCG,UAAU,EAAEP,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEO,UAAU;IAC/BC,SAAS,EAAER,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEQ;EACtB,CAAC,CAAC;EAEF,MAAMH,SAAS,GAAG,IAAII,qBAAS,CAAC;IAC9BJ,SAASA,CAACD,KAAK,EAAEM,QAAQ,EAAEC,QAAQ,EAAE;MACnC,IAAI;QACFV,MAAM,CAACI,SAAS,CAACD,KAAK,CAACQ,QAAQ,CAAC,CAAC,CAAC;MACpC,CAAC,CAAC,OAAOC,GAAG,EAAE;QACZ,IAAI,CAACC,IAAI,CAAC,OAAO,EAAED,GAAG,CAAC;MACzB,CAAC,SAAS;QACRF,QAAQ,CAAC,CAAC;MACZ;IACF,CAAC;IAEDI,KAAKA,CAACJ,QAAQ,EAAE;MACd,IAAI;QACFV,MAAM,CAACc,KAAK,CAAC,CAAC;MAChB,CAAC,CAAC,OAAOF,GAAG,EAAE;QACZ,IAAI,CAACC,IAAI,CAAC,OAAO,EAAED,GAAG,CAAC;MACzB,CAAC,SAAS;QACRF,QAAQ,CAAC,CAAC;MACZ;IACF;EACF,CAAC,CAAC;EAEF,OAAON,SAAS;AAClB","ignoreList":[]}
{"version":3,"file":"stream.js","names":["_nodeStream","require","_core","jsonrepairTransform","options","repair","jsonrepairCore","onData","chunk","transform","push","bufferSize","chunkSize","Transform","_encoding","callback","toString","err","emit","flush"],"sources":["../../../src/streaming/stream.ts"],"sourcesContent":["import { Transform } from 'node:stream'\nimport { jsonrepairCore } from './core.js'\n\nexport interface JsonRepairTransformOptions {\n chunkSize?: number\n bufferSize?: number\n}\n\nexport function jsonrepairTransform(options?: JsonRepairTransformOptions): Transform {\n const repair = jsonrepairCore({\n onData: (chunk) => transform.push(chunk),\n bufferSize: options?.bufferSize,\n chunkSize: options?.chunkSize\n })\n\n const transform = new Transform({\n transform(chunk, _encoding, callback) {\n try {\n repair.transform(chunk.toString())\n } catch (err) {\n this.emit('error', err)\n } finally {\n callback()\n }\n },\n\n flush(callback) {\n try {\n repair.flush()\n } catch (err) {\n this.emit('error', err)\n } finally {\n callback()\n }\n }\n })\n\n return transform\n}\n"],"mappings":";;;;;;AAAA,IAAAA,WAAA,GAAAC,OAAA;AACA,IAAAC,KAAA,GAAAD,OAAA;AAOO,SAASE,mBAAmBA,CAACC,OAAoC,EAAa;EACnF,MAAMC,MAAM,GAAG,IAAAC,oBAAc,EAAC;IAC5BC,MAAM,EAAGC,KAAK,IAAKC,SAAS,CAACC,IAAI,CAACF,KAAK,CAAC;IACxCG,UAAU,EAAEP,OAAO,EAAEO,UAAU;IAC/BC,SAAS,EAAER,OAAO,EAAEQ;EACtB,CAAC,CAAC;EAEF,MAAMH,SAAS,GAAG,IAAII,qBAAS,CAAC;IAC9BJ,SAASA,CAACD,KAAK,EAAEM,SAAS,EAAEC,QAAQ,EAAE;MACpC,IAAI;QACFV,MAAM,CAACI,SAAS,CAACD,KAAK,CAACQ,QAAQ,CAAC,CAAC,CAAC;MACpC,CAAC,CAAC,OAAOC,GAAG,EAAE;QACZ,IAAI,CAACC,IAAI,CAAC,OAAO,EAAED,GAAG,CAAC;MACzB,CAAC,SAAS;QACRF,QAAQ,CAAC,CAAC;MACZ;IACF,CAAC;IAEDI,KAAKA,CAACJ,QAAQ,EAAE;MACd,IAAI;QACFV,MAAM,CAACc,KAAK,CAAC,CAAC;MAChB,CAAC,CAAC,OAAOF,GAAG,EAAE;QACZ,IAAI,CAACC,IAAI,CAAC,OAAO,EAAED,GAAG,CAAC;MACzB,CAAC,SAAS;QACRF,QAAQ,CAAC,CAAC;MACZ;IACF;EACF,CAAC,CAAC;EAEF,OAAON,SAAS;AAClB","ignoreList":[]}

@@ -9,3 +9,3 @@ "use strict";

constructor(message, position) {
super("".concat(message, " at position ").concat(position));
super(`${message} at position ${position}`);
this.position = position;

@@ -12,0 +12,0 @@ }

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

{"version":3,"file":"JSONRepairError.js","names":["JSONRepairError","Error","constructor","message","position","concat","exports"],"sources":["../../../src/utils/JSONRepairError.ts"],"sourcesContent":["export class JSONRepairError extends Error {\n position: number\n\n constructor(message: string, position: number) {\n super(`${message} at position ${position}`)\n\n this.position = position\n }\n}\n"],"mappings":";;;;;;AAAO,MAAMA,eAAe,SAASC,KAAK,CAAC;EAGzCC,WAAWA,CAACC,OAAe,EAAEC,QAAgB,EAAE;IAC7C,KAAK,IAAAC,MAAA,CAAIF,OAAO,mBAAAE,MAAA,CAAgBD,QAAQ,CAAE,CAAC;IAE3C,IAAI,CAACA,QAAQ,GAAGA,QAAQ;EAC1B;AACF;AAACE,OAAA,CAAAN,eAAA,GAAAA,eAAA","ignoreList":[]}
{"version":3,"file":"JSONRepairError.js","names":["JSONRepairError","Error","constructor","message","position","exports"],"sources":["../../../src/utils/JSONRepairError.ts"],"sourcesContent":["export class JSONRepairError extends Error {\n position: number\n\n constructor(message: string, position: number) {\n super(`${message} at position ${position}`)\n\n this.position = position\n }\n}\n"],"mappings":";;;;;;AAAO,MAAMA,eAAe,SAASC,KAAK,CAAC;EAGzCC,WAAWA,CAACC,OAAe,EAAEC,QAAgB,EAAE;IAC7C,KAAK,CAAC,GAAGD,OAAO,gBAAgBC,QAAQ,EAAE,CAAC;IAE3C,IAAI,CAACA,QAAQ,GAAGA,QAAQ;EAC1B;AACF;AAACC,OAAA,CAAAL,eAAA,GAAAA,eAAA","ignoreList":[]}

@@ -44,3 +44,3 @@ import { JSONRepairError } from '../utils/JSONRepairError.js';

parseMarkdownCodeBlock();
parseMarkdownCodeBlock(['```', '[```', '{```']);
const processed = parseValue();

@@ -50,3 +50,3 @@ if (!processed) {

}
parseMarkdownCodeBlock();
parseMarkdownCodeBlock(['```', '```]', '```}']);
const processedComma = parseCharacter(',');

@@ -139,3 +139,3 @@ if (processedComma) {

}
function parseMarkdownCodeBlock() {
function parseMarkdownCodeBlock(blocks) {
// find and skip over a Markdown fenced code block:

@@ -145,4 +145,3 @@ // ``` ... ```

// ```json ... ```
if (text.slice(i, i + 3) === '```') {
i += 3;
if (skipMarkdownCodeBlock(blocks)) {
if (isFunctionNameCharStart(text[i])) {

@@ -159,2 +158,12 @@ // strip the optional language specifier like "json"

}
function skipMarkdownCodeBlock(blocks) {
for (const block of blocks) {
const end = i + block.length;
if (text.slice(i, end) === block) {
i = end;
return true;
}
}
return false;
}
function parseCharacter(char) {

@@ -337,3 +346,3 @@ if (text[i] === char) {

// repair: wrap the output inside array brackets
output = "[\n".concat(output, "\n]");
output = `[\n${output}\n]`;
}

@@ -391,4 +400,4 @@

return true;
// biome-ignore lint/style/noUselessElse: <explanation>
} else if (i === stopAtIndex) {
}
if (i === stopAtIndex) {
// use the stop index detected in the first iteration, and repair end quote

@@ -398,4 +407,4 @@ str = insertBeforeLastWhitespace(str, '"');

return true;
// biome-ignore lint/style/noUselessElse: <explanation>
} else if (isEndQuote(text[i])) {
}
if (isEndQuote(text[i])) {
// end quote

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

// repair unescaped quote
str = "".concat(str.substring(0, oQuote), "\\").concat(str.substring(oQuote));
str = `${str.substring(0, oQuote)}\\${str.substring(oQuote)}`;
} else if (stopAtDelimiter && isUnquotedStringDelimiter(text[i])) {

@@ -490,3 +499,3 @@ // we're in the mode to stop the string at the first delimiter

// repair unescaped double quote
str += "\\".concat(char);
str += `\\${char}`;
i++;

@@ -605,3 +614,3 @@ } else if (isControlCharacter(char)) {

const hasInvalidLeadingZero = /^0\d/.test(num);
output += hasInvalidLeadingZero ? "\"".concat(num, "\"") : num;
output += hasInvalidLeadingZero ? `"${num}"` : num;
return true;

@@ -698,3 +707,3 @@ }

i++;
output += "\"".concat(text.substring(start, i), "\"");
output += `"${text.substring(start, i)}"`;
return true;

@@ -717,9 +726,9 @@ }

// change the number more than it needs to make it valid JSON
output += "".concat(text.slice(start, i), "0");
output += `${text.slice(start, i)}0`;
}
function throwInvalidCharacter(char) {
throw new JSONRepairError("Invalid character ".concat(JSON.stringify(char)), i);
throw new JSONRepairError(`Invalid character ${JSON.stringify(char)}`, i);
}
function throwUnexpectedCharacter() {
throw new JSONRepairError("Unexpected character ".concat(JSON.stringify(text[i])), i);
throw new JSONRepairError(`Unexpected character ${JSON.stringify(text[i])}`, i);
}

@@ -737,3 +746,3 @@ function throwUnexpectedEnd() {

const chars = text.slice(i, i + 6);
throw new JSONRepairError("Invalid unicode character \"".concat(chars, "\""), i);
throw new JSONRepairError(`Invalid unicode character "${chars}"`, i);
}

@@ -740,0 +749,0 @@ }

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

{"version":3,"file":"jsonrepair.js","names":["JSONRepairError","endsWithCommaOrNewline","insertBeforeLastWhitespace","isControlCharacter","isDelimiter","isDigit","isDoubleQuote","isDoubleQuoteLike","isFunctionNameChar","isFunctionNameCharStart","isHex","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","slice","char","skipCharacter","skipEscapeCharacter","skipEllipsis","initial","processedKey","throwObjectKeyExpected","processedColon","truncatedText","throwColonExpected","processedValue","concat","stopAtDelimiter","stopAtIndex","skipEscapeChars","isEndQuote","iBefore","oBefore","str","iPrev","prevNonWhitespaceIndex","charAt","substring","iQuote","oQuote","parseConcatenatedString","iPrevChar","prevChar","test","escapeChar","j","throwInvalidUnicodeCharacter","throwInvalidCharacter","parsedStr","atEndOfNumber","repairNumberEndingWithNumericSymbol","num","hasInvalidLeadingZero","parseKeyword","name","value","isKey","symbol","JSON","stringify","prev","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 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(): boolean {\n // find and skip over a Markdown fenced code block:\n // ``` ... ```\n // or\n // ```json ... ```\n if (text.slice(i, i + 3) === '```') {\n i += 3\n\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 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 initial = false\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 output = stripLastOccurrence(output, ',')\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\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 } else {\n initial = false\n }\n\n skipEllipsis()\n\n const processedValue = parseValue()\n if (!processedValue) {\n // repair trailing comma\n output = stripLastOccurrence(output, ',')\n break\n }\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 // biome-ignore lint/style/noUselessElse: <explanation>\n } else 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 // biome-ignore lint/style/noUselessElse: <explanation>\n } else 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 isQuote(text[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 {\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 if (text[i] === '-') {\n i++\n if (atEndOfNumber()) {\n repairNumberEndingWithNumericSymbol(start)\n return true\n }\n if (!isDigit(text[i])) {\n i = start\n return false\n }\n }\n\n // Note that in JSON leading zeros like \"00789\" are not allowed.\n // We will allow all leading zeros here though and at the end of parseNumber\n // check against trailing zeros and repair that if needed.\n // Leading zeros can have meaning, so we should not clear them.\n while (isDigit(text[i])) {\n i++\n }\n\n if (text[i] === '.') {\n i++\n if (atEndOfNumber()) {\n repairNumberEndingWithNumericSymbol(start)\n return true\n }\n if (!isDigit(text[i])) {\n i = start\n return false\n }\n while (isDigit(text[i])) {\n i++\n }\n }\n\n if (text[i] === 'e' || text[i] === 'E') {\n i++\n if (text[i] === '-' || text[i] === '+') {\n i++\n }\n if (atEndOfNumber()) {\n repairNumberEndingWithNumericSymbol(start)\n return true\n }\n if (!isDigit(text[i])) {\n i = start\n return false\n }\n while (isDigit(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 if (i > start) {\n // repair a number with leading zeros like \"00789\"\n const num = text.slice(start, i)\n const hasInvalidLeadingZero = /^0\\d/.test(num)\n\n output += hasInvalidLeadingZero ? `\"${num}\"` : 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) {\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 += `\"${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 atEndOfNumber() {\n return i >= text.length || isDelimiter(text[i]) || isWhitespace(text, i)\n }\n\n function repairNumberEndingWithNumericSymbol(start: number) {\n // repair numbers cut off at the end\n // this will only be called when we end after a '.', '-', or 'e' and does not\n // change the number more than it needs to make it valid JSON\n output += `${text.slice(start, i)}0`\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","isDoubleQuoteLike","isFunctionNameChar","isFunctionNameCharStart","isHex","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","parseConcatenatedString","iPrevChar","prevChar","test","escapeChar","j","throwInvalidUnicodeCharacter","throwInvalidCharacter","parsedStr","atEndOfNumber","repairNumberEndingWithNumericSymbol","num","hasInvalidLeadingZero","parseKeyword","name","value","isKey","symbol","JSON","stringify","prev","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 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 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 initial = false\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 output = stripLastOccurrence(output, ',')\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\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 } else {\n initial = false\n }\n\n skipEllipsis()\n\n const processedValue = parseValue()\n if (!processedValue) {\n // repair trailing comma\n output = stripLastOccurrence(output, ',')\n break\n }\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 isQuote(text[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 {\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 if (text[i] === '-') {\n i++\n if (atEndOfNumber()) {\n repairNumberEndingWithNumericSymbol(start)\n return true\n }\n if (!isDigit(text[i])) {\n i = start\n return false\n }\n }\n\n // Note that in JSON leading zeros like \"00789\" are not allowed.\n // We will allow all leading zeros here though and at the end of parseNumber\n // check against trailing zeros and repair that if needed.\n // Leading zeros can have meaning, so we should not clear them.\n while (isDigit(text[i])) {\n i++\n }\n\n if (text[i] === '.') {\n i++\n if (atEndOfNumber()) {\n repairNumberEndingWithNumericSymbol(start)\n return true\n }\n if (!isDigit(text[i])) {\n i = start\n return false\n }\n while (isDigit(text[i])) {\n i++\n }\n }\n\n if (text[i] === 'e' || text[i] === 'E') {\n i++\n if (text[i] === '-' || text[i] === '+') {\n i++\n }\n if (atEndOfNumber()) {\n repairNumberEndingWithNumericSymbol(start)\n return true\n }\n if (!isDigit(text[i])) {\n i = start\n return false\n }\n while (isDigit(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 if (i > start) {\n // repair a number with leading zeros like \"00789\"\n const num = text.slice(start, i)\n const hasInvalidLeadingZero = /^0\\d/.test(num)\n\n output += hasInvalidLeadingZero ? `\"${num}\"` : 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) {\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 += `\"${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 atEndOfNumber() {\n return i >= text.length || isDelimiter(text[i]) || isWhitespace(text, i)\n }\n\n function repairNumberEndingWithNumericSymbol(start: number) {\n // repair numbers cut off at the end\n // this will only be called when we end after a '.', '-', or 'e' and does not\n // change the number more than it needs to make it valid JSON\n output += `${text.slice(start, i)}0`\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":[]}

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

{"version":3,"file":"stream.js","names":["jsonrepairTransform"],"sources":["../../src/stream.ts"],"sourcesContent":["// Node.js streaming API\nexport { jsonrepairTransform, type JsonRepairTransformOptions } from './streaming/stream.js'\n"],"mappings":"AAAA;AACA,SAASA,mBAAmB,QAAyC,uBAAuB","ignoreList":[]}
{"version":3,"file":"stream.js","names":["jsonrepairTransform"],"sources":["../../src/stream.ts"],"sourcesContent":["// Node.js streaming API\nexport { type JsonRepairTransformOptions, jsonrepairTransform } from './streaming/stream.js'\n"],"mappings":"AAAA;AACA,SAA0CA,mBAAmB,QAAQ,uBAAuB","ignoreList":[]}

@@ -8,7 +8,7 @@ export function createInputBuffer() {

if (index < offset) {
throw new Error("".concat(indexOutOfRangeMessage, " (index: ").concat(index, ", offset: ").concat(offset, ")"));
throw new Error(`${indexOutOfRangeMessage} (index: ${index}, offset: ${offset})`);
}
if (index >= currentLength) {
if (!closed) {
throw new Error("".concat(indexOutOfRangeMessage, " (index: ").concat(index, ")"));
throw new Error(`${indexOutOfRangeMessage} (index: ${index})`);
}

@@ -15,0 +15,0 @@ }

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

{"version":3,"file":"InputBuffer.js","names":["createInputBuffer","buffer","offset","currentLength","closed","ensure","index","Error","concat","indexOutOfRangeMessage","push","chunk","length","flush","position","substring","charAt","charCodeAt","start","end","slice","isEnd","close","currentBufferSize"],"sources":["../../../../src/streaming/buffer/InputBuffer.ts"],"sourcesContent":["export interface InputBuffer {\n push: (chunk: string) => void\n flush: (position: number) => void\n charAt: (index: number) => string\n charCodeAt: (index: number) => number\n substring: (start: number, end: number) => string\n length: () => number\n currentLength: () => number\n currentBufferSize: () => number\n isEnd: (index: number) => boolean\n close: () => void\n}\n\nexport function createInputBuffer(): InputBuffer {\n let buffer = ''\n let offset = 0\n let currentLength = 0\n let closed = false\n\n function ensure(index: number) {\n if (index < offset) {\n throw new Error(`${indexOutOfRangeMessage} (index: ${index}, offset: ${offset})`)\n }\n\n if (index >= currentLength) {\n if (!closed) {\n throw new Error(`${indexOutOfRangeMessage} (index: ${index})`)\n }\n }\n }\n\n function push(chunk: string) {\n buffer += chunk\n currentLength += chunk.length\n }\n\n function flush(position: number) {\n if (position > currentLength) {\n return\n }\n\n buffer = buffer.substring(position - offset)\n offset = position\n }\n\n function charAt(index: number): string {\n ensure(index)\n\n return buffer.charAt(index - offset)\n }\n\n function charCodeAt(index: number): number {\n ensure(index)\n\n return buffer.charCodeAt(index - offset)\n }\n\n function substring(start: number, end: number): string {\n ensure(end - 1) // -1 because end is excluded\n ensure(start)\n\n return buffer.slice(start - offset, end - offset)\n }\n\n function length(): number {\n if (!closed) {\n throw new Error('Cannot get length: input is not yet closed')\n }\n\n return currentLength\n }\n\n function isEnd(index: number): boolean {\n if (!closed) {\n ensure(index)\n }\n\n return index >= currentLength\n }\n\n function close() {\n closed = true\n }\n\n return {\n push,\n flush,\n charAt,\n charCodeAt,\n substring,\n length,\n currentLength: () => currentLength,\n currentBufferSize: () => buffer.length,\n isEnd,\n close\n }\n}\n\nconst indexOutOfRangeMessage = 'Index out of range, please configure a larger buffer size'\n"],"mappings":"AAaA,OAAO,SAASA,iBAAiBA,CAAA,EAAgB;EAC/C,IAAIC,MAAM,GAAG,EAAE;EACf,IAAIC,MAAM,GAAG,CAAC;EACd,IAAIC,aAAa,GAAG,CAAC;EACrB,IAAIC,MAAM,GAAG,KAAK;EAElB,SAASC,MAAMA,CAACC,KAAa,EAAE;IAC7B,IAAIA,KAAK,GAAGJ,MAAM,EAAE;MAClB,MAAM,IAAIK,KAAK,IAAAC,MAAA,CAAIC,sBAAsB,eAAAD,MAAA,CAAYF,KAAK,gBAAAE,MAAA,CAAaN,MAAM,MAAG,CAAC;IACnF;IAEA,IAAII,KAAK,IAAIH,aAAa,EAAE;MAC1B,IAAI,CAACC,MAAM,EAAE;QACX,MAAM,IAAIG,KAAK,IAAAC,MAAA,CAAIC,sBAAsB,eAAAD,MAAA,CAAYF,KAAK,MAAG,CAAC;MAChE;IACF;EACF;EAEA,SAASI,IAAIA,CAACC,KAAa,EAAE;IAC3BV,MAAM,IAAIU,KAAK;IACfR,aAAa,IAAIQ,KAAK,CAACC,MAAM;EAC/B;EAEA,SAASC,KAAKA,CAACC,QAAgB,EAAE;IAC/B,IAAIA,QAAQ,GAAGX,aAAa,EAAE;MAC5B;IACF;IAEAF,MAAM,GAAGA,MAAM,CAACc,SAAS,CAACD,QAAQ,GAAGZ,MAAM,CAAC;IAC5CA,MAAM,GAAGY,QAAQ;EACnB;EAEA,SAASE,MAAMA,CAACV,KAAa,EAAU;IACrCD,MAAM,CAACC,KAAK,CAAC;IAEb,OAAOL,MAAM,CAACe,MAAM,CAACV,KAAK,GAAGJ,MAAM,CAAC;EACtC;EAEA,SAASe,UAAUA,CAACX,KAAa,EAAU;IACzCD,MAAM,CAACC,KAAK,CAAC;IAEb,OAAOL,MAAM,CAACgB,UAAU,CAACX,KAAK,GAAGJ,MAAM,CAAC;EAC1C;EAEA,SAASa,SAASA,CAACG,KAAa,EAAEC,GAAW,EAAU;IACrDd,MAAM,CAACc,GAAG,GAAG,CAAC,CAAC,EAAC;IAChBd,MAAM,CAACa,KAAK,CAAC;IAEb,OAAOjB,MAAM,CAACmB,KAAK,CAACF,KAAK,GAAGhB,MAAM,EAAEiB,GAAG,GAAGjB,MAAM,CAAC;EACnD;EAEA,SAASU,MAAMA,CAAA,EAAW;IACxB,IAAI,CAACR,MAAM,EAAE;MACX,MAAM,IAAIG,KAAK,CAAC,4CAA4C,CAAC;IAC/D;IAEA,OAAOJ,aAAa;EACtB;EAEA,SAASkB,KAAKA,CAACf,KAAa,EAAW;IACrC,IAAI,CAACF,MAAM,EAAE;MACXC,MAAM,CAACC,KAAK,CAAC;IACf;IAEA,OAAOA,KAAK,IAAIH,aAAa;EAC/B;EAEA,SAASmB,KAAKA,CAAA,EAAG;IACflB,MAAM,GAAG,IAAI;EACf;EAEA,OAAO;IACLM,IAAI;IACJG,KAAK;IACLG,MAAM;IACNC,UAAU;IACVF,SAAS;IACTH,MAAM;IACNT,aAAa,EAAEA,CAAA,KAAMA,aAAa;IAClCoB,iBAAiB,EAAEA,CAAA,KAAMtB,MAAM,CAACW,MAAM;IACtCS,KAAK;IACLC;EACF,CAAC;AACH;AAEA,MAAMb,sBAAsB,GAAG,2DAA2D","ignoreList":[]}
{"version":3,"file":"InputBuffer.js","names":["createInputBuffer","buffer","offset","currentLength","closed","ensure","index","Error","indexOutOfRangeMessage","push","chunk","length","flush","position","substring","charAt","charCodeAt","start","end","slice","isEnd","close","currentBufferSize"],"sources":["../../../../src/streaming/buffer/InputBuffer.ts"],"sourcesContent":["export interface InputBuffer {\n push: (chunk: string) => void\n flush: (position: number) => void\n charAt: (index: number) => string\n charCodeAt: (index: number) => number\n substring: (start: number, end: number) => string\n length: () => number\n currentLength: () => number\n currentBufferSize: () => number\n isEnd: (index: number) => boolean\n close: () => void\n}\n\nexport function createInputBuffer(): InputBuffer {\n let buffer = ''\n let offset = 0\n let currentLength = 0\n let closed = false\n\n function ensure(index: number) {\n if (index < offset) {\n throw new Error(`${indexOutOfRangeMessage} (index: ${index}, offset: ${offset})`)\n }\n\n if (index >= currentLength) {\n if (!closed) {\n throw new Error(`${indexOutOfRangeMessage} (index: ${index})`)\n }\n }\n }\n\n function push(chunk: string) {\n buffer += chunk\n currentLength += chunk.length\n }\n\n function flush(position: number) {\n if (position > currentLength) {\n return\n }\n\n buffer = buffer.substring(position - offset)\n offset = position\n }\n\n function charAt(index: number): string {\n ensure(index)\n\n return buffer.charAt(index - offset)\n }\n\n function charCodeAt(index: number): number {\n ensure(index)\n\n return buffer.charCodeAt(index - offset)\n }\n\n function substring(start: number, end: number): string {\n ensure(end - 1) // -1 because end is excluded\n ensure(start)\n\n return buffer.slice(start - offset, end - offset)\n }\n\n function length(): number {\n if (!closed) {\n throw new Error('Cannot get length: input is not yet closed')\n }\n\n return currentLength\n }\n\n function isEnd(index: number): boolean {\n if (!closed) {\n ensure(index)\n }\n\n return index >= currentLength\n }\n\n function close() {\n closed = true\n }\n\n return {\n push,\n flush,\n charAt,\n charCodeAt,\n substring,\n length,\n currentLength: () => currentLength,\n currentBufferSize: () => buffer.length,\n isEnd,\n close\n }\n}\n\nconst indexOutOfRangeMessage = 'Index out of range, please configure a larger buffer size'\n"],"mappings":"AAaA,OAAO,SAASA,iBAAiBA,CAAA,EAAgB;EAC/C,IAAIC,MAAM,GAAG,EAAE;EACf,IAAIC,MAAM,GAAG,CAAC;EACd,IAAIC,aAAa,GAAG,CAAC;EACrB,IAAIC,MAAM,GAAG,KAAK;EAElB,SAASC,MAAMA,CAACC,KAAa,EAAE;IAC7B,IAAIA,KAAK,GAAGJ,MAAM,EAAE;MAClB,MAAM,IAAIK,KAAK,CAAC,GAAGC,sBAAsB,YAAYF,KAAK,aAAaJ,MAAM,GAAG,CAAC;IACnF;IAEA,IAAII,KAAK,IAAIH,aAAa,EAAE;MAC1B,IAAI,CAACC,MAAM,EAAE;QACX,MAAM,IAAIG,KAAK,CAAC,GAAGC,sBAAsB,YAAYF,KAAK,GAAG,CAAC;MAChE;IACF;EACF;EAEA,SAASG,IAAIA,CAACC,KAAa,EAAE;IAC3BT,MAAM,IAAIS,KAAK;IACfP,aAAa,IAAIO,KAAK,CAACC,MAAM;EAC/B;EAEA,SAASC,KAAKA,CAACC,QAAgB,EAAE;IAC/B,IAAIA,QAAQ,GAAGV,aAAa,EAAE;MAC5B;IACF;IAEAF,MAAM,GAAGA,MAAM,CAACa,SAAS,CAACD,QAAQ,GAAGX,MAAM,CAAC;IAC5CA,MAAM,GAAGW,QAAQ;EACnB;EAEA,SAASE,MAAMA,CAACT,KAAa,EAAU;IACrCD,MAAM,CAACC,KAAK,CAAC;IAEb,OAAOL,MAAM,CAACc,MAAM,CAACT,KAAK,GAAGJ,MAAM,CAAC;EACtC;EAEA,SAASc,UAAUA,CAACV,KAAa,EAAU;IACzCD,MAAM,CAACC,KAAK,CAAC;IAEb,OAAOL,MAAM,CAACe,UAAU,CAACV,KAAK,GAAGJ,MAAM,CAAC;EAC1C;EAEA,SAASY,SAASA,CAACG,KAAa,EAAEC,GAAW,EAAU;IACrDb,MAAM,CAACa,GAAG,GAAG,CAAC,CAAC,EAAC;IAChBb,MAAM,CAACY,KAAK,CAAC;IAEb,OAAOhB,MAAM,CAACkB,KAAK,CAACF,KAAK,GAAGf,MAAM,EAAEgB,GAAG,GAAGhB,MAAM,CAAC;EACnD;EAEA,SAASS,MAAMA,CAAA,EAAW;IACxB,IAAI,CAACP,MAAM,EAAE;MACX,MAAM,IAAIG,KAAK,CAAC,4CAA4C,CAAC;IAC/D;IAEA,OAAOJ,aAAa;EACtB;EAEA,SAASiB,KAAKA,CAACd,KAAa,EAAW;IACrC,IAAI,CAACF,MAAM,EAAE;MACXC,MAAM,CAACC,KAAK,CAAC;IACf;IAEA,OAAOA,KAAK,IAAIH,aAAa;EAC/B;EAEA,SAASkB,KAAKA,CAAA,EAAG;IACfjB,MAAM,GAAG,IAAI;EACf;EAEA,OAAO;IACLK,IAAI;IACJG,KAAK;IACLG,MAAM;IACNC,UAAU;IACVF,SAAS;IACTH,MAAM;IACNR,aAAa,EAAEA,CAAA,KAAMA,aAAa;IAClCmB,iBAAiB,EAAEA,CAAA,KAAMrB,MAAM,CAACU,MAAM;IACtCS,KAAK;IACLC;EACF,CAAC;AACH;AAEA,MAAMb,sBAAsB,GAAG,2DAA2D","ignoreList":[]}

@@ -33,3 +33,3 @@ import { isWhitespace } from '../../utils/stringUtils.js';

if (offset > 0) {
throw new Error("Cannot unshift: ".concat(flushedMessage));
throw new Error(`Cannot unshift: ${flushedMessage}`);
}

@@ -41,3 +41,3 @@ buffer = text + buffer;

if (start < offset) {
throw new Error("Cannot remove: ".concat(flushedMessage));
throw new Error(`Cannot remove: ${flushedMessage}`);
}

@@ -52,3 +52,3 @@ if (end !== undefined) {

if (index < offset) {
throw new Error("Cannot insert: ".concat(flushedMessage));
throw new Error(`Cannot insert: ${flushedMessage}`);
}

@@ -83,3 +83,3 @@ buffer = buffer.substring(0, index - offset) + text + buffer.substring(index - offset);

if (bufferIndex <= 0) {
throw new Error("Cannot insert: ".concat(flushedMessage));
throw new Error(`Cannot insert: ${flushedMessage}`);
}

@@ -86,0 +86,0 @@ buffer = buffer.substring(0, bufferIndex) + textToInsert + buffer.substring(bufferIndex);

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

{"version":3,"file":"OutputBuffer.js","names":["isWhitespace","createOutputBuffer","_ref","write","chunkSize","bufferSize","buffer","offset","flushChunks","minSize","arguments","length","undefined","chunk","substring","flush","push","text","unshift","Error","concat","flushedMessage","remove","start","end","insertAt","index","stripLastOccurrence","textToStrip","stripRemainingText","bufferIndex","lastIndexOf","insertBeforeLastWhitespace","textToInsert","endsWithIgnoringWhitespace","char","i","charAt"],"sources":["../../../../src/streaming/buffer/OutputBuffer.ts"],"sourcesContent":["import { isWhitespace } from '../../utils/stringUtils.js'\n\nexport interface OutputBuffer {\n push: (text: string) => void\n unshift: (text: string) => void\n remove: (start: number, end?: number) => void\n insertAt: (index: number, text: string) => void\n length: () => number\n flush: () => void\n\n stripLastOccurrence: (textToStrip: string, stripRemainingText?: boolean) => void\n insertBeforeLastWhitespace: (textToInsert: string) => void\n endsWithIgnoringWhitespace: (char: string) => boolean\n}\n\nexport interface OutputBufferOptions {\n write: (chunk: string) => void\n chunkSize: number\n bufferSize: number\n}\n\nexport function createOutputBuffer({\n write,\n chunkSize,\n bufferSize\n}: OutputBufferOptions): OutputBuffer {\n let buffer = ''\n let offset = 0\n\n function flushChunks(minSize = bufferSize) {\n while (buffer.length >= minSize + chunkSize) {\n const chunk = buffer.substring(0, chunkSize)\n write(chunk)\n offset += chunkSize\n buffer = buffer.substring(chunkSize)\n }\n }\n\n function flush() {\n flushChunks(0)\n\n if (buffer.length > 0) {\n write(buffer)\n offset += buffer.length\n buffer = ''\n }\n }\n\n function push(text: string) {\n buffer += text\n flushChunks()\n }\n\n function unshift(text: string) {\n if (offset > 0) {\n throw new Error(`Cannot unshift: ${flushedMessage}`)\n }\n\n buffer = text + buffer\n flushChunks()\n }\n\n function remove(start: number, end?: number) {\n if (start < offset) {\n throw new Error(`Cannot remove: ${flushedMessage}`)\n }\n\n if (end !== undefined) {\n buffer = buffer.substring(0, start - offset) + buffer.substring(end - offset)\n } else {\n buffer = buffer.substring(0, start - offset)\n }\n }\n\n function insertAt(index: number, text: string) {\n if (index < offset) {\n throw new Error(`Cannot insert: ${flushedMessage}`)\n }\n\n buffer = buffer.substring(0, index - offset) + text + buffer.substring(index - offset)\n }\n\n function length(): number {\n return offset + buffer.length\n }\n\n function stripLastOccurrence(textToStrip: string, stripRemainingText = false) {\n const bufferIndex = buffer.lastIndexOf(textToStrip)\n\n if (bufferIndex !== -1) {\n if (stripRemainingText) {\n buffer = buffer.substring(0, bufferIndex)\n } else {\n buffer =\n buffer.substring(0, bufferIndex) + buffer.substring(bufferIndex + textToStrip.length)\n }\n }\n }\n\n function insertBeforeLastWhitespace(textToInsert: string) {\n let bufferIndex = buffer.length // index relative to the start of the buffer, not taking `offset` into account\n\n if (!isWhitespace(buffer, bufferIndex - 1)) {\n // no trailing whitespaces\n push(textToInsert)\n return\n }\n\n while (isWhitespace(buffer, bufferIndex - 1)) {\n bufferIndex--\n }\n\n if (bufferIndex <= 0) {\n throw new Error(`Cannot insert: ${flushedMessage}`)\n }\n\n buffer = buffer.substring(0, bufferIndex) + textToInsert + buffer.substring(bufferIndex)\n flushChunks()\n }\n\n function endsWithIgnoringWhitespace(char: string): boolean {\n let i = buffer.length - 1\n\n while (i > 0) {\n if (char === buffer.charAt(i)) {\n return true\n }\n\n if (!isWhitespace(buffer, i)) {\n return false\n }\n\n i--\n }\n\n return false\n }\n\n return {\n push,\n unshift,\n remove,\n insertAt,\n length,\n flush,\n\n stripLastOccurrence,\n insertBeforeLastWhitespace,\n endsWithIgnoringWhitespace\n }\n}\n\nconst flushedMessage = 'start of the output is already flushed from the buffer'\n"],"mappings":"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","ignoreList":[]}
{"version":3,"file":"OutputBuffer.js","names":["isWhitespace","createOutputBuffer","_ref","write","chunkSize","bufferSize","buffer","offset","flushChunks","minSize","arguments","length","undefined","chunk","substring","flush","push","text","unshift","Error","flushedMessage","remove","start","end","insertAt","index","stripLastOccurrence","textToStrip","stripRemainingText","bufferIndex","lastIndexOf","insertBeforeLastWhitespace","textToInsert","endsWithIgnoringWhitespace","char","i","charAt"],"sources":["../../../../src/streaming/buffer/OutputBuffer.ts"],"sourcesContent":["import { isWhitespace } from '../../utils/stringUtils.js'\n\nexport interface OutputBuffer {\n push: (text: string) => void\n unshift: (text: string) => void\n remove: (start: number, end?: number) => void\n insertAt: (index: number, text: string) => void\n length: () => number\n flush: () => void\n\n stripLastOccurrence: (textToStrip: string, stripRemainingText?: boolean) => void\n insertBeforeLastWhitespace: (textToInsert: string) => void\n endsWithIgnoringWhitespace: (char: string) => boolean\n}\n\nexport interface OutputBufferOptions {\n write: (chunk: string) => void\n chunkSize: number\n bufferSize: number\n}\n\nexport function createOutputBuffer({\n write,\n chunkSize,\n bufferSize\n}: OutputBufferOptions): OutputBuffer {\n let buffer = ''\n let offset = 0\n\n function flushChunks(minSize = bufferSize) {\n while (buffer.length >= minSize + chunkSize) {\n const chunk = buffer.substring(0, chunkSize)\n write(chunk)\n offset += chunkSize\n buffer = buffer.substring(chunkSize)\n }\n }\n\n function flush() {\n flushChunks(0)\n\n if (buffer.length > 0) {\n write(buffer)\n offset += buffer.length\n buffer = ''\n }\n }\n\n function push(text: string) {\n buffer += text\n flushChunks()\n }\n\n function unshift(text: string) {\n if (offset > 0) {\n throw new Error(`Cannot unshift: ${flushedMessage}`)\n }\n\n buffer = text + buffer\n flushChunks()\n }\n\n function remove(start: number, end?: number) {\n if (start < offset) {\n throw new Error(`Cannot remove: ${flushedMessage}`)\n }\n\n if (end !== undefined) {\n buffer = buffer.substring(0, start - offset) + buffer.substring(end - offset)\n } else {\n buffer = buffer.substring(0, start - offset)\n }\n }\n\n function insertAt(index: number, text: string) {\n if (index < offset) {\n throw new Error(`Cannot insert: ${flushedMessage}`)\n }\n\n buffer = buffer.substring(0, index - offset) + text + buffer.substring(index - offset)\n }\n\n function length(): number {\n return offset + buffer.length\n }\n\n function stripLastOccurrence(textToStrip: string, stripRemainingText = false) {\n const bufferIndex = buffer.lastIndexOf(textToStrip)\n\n if (bufferIndex !== -1) {\n if (stripRemainingText) {\n buffer = buffer.substring(0, bufferIndex)\n } else {\n buffer =\n buffer.substring(0, bufferIndex) + buffer.substring(bufferIndex + textToStrip.length)\n }\n }\n }\n\n function insertBeforeLastWhitespace(textToInsert: string) {\n let bufferIndex = buffer.length // index relative to the start of the buffer, not taking `offset` into account\n\n if (!isWhitespace(buffer, bufferIndex - 1)) {\n // no trailing whitespaces\n push(textToInsert)\n return\n }\n\n while (isWhitespace(buffer, bufferIndex - 1)) {\n bufferIndex--\n }\n\n if (bufferIndex <= 0) {\n throw new Error(`Cannot insert: ${flushedMessage}`)\n }\n\n buffer = buffer.substring(0, bufferIndex) + textToInsert + buffer.substring(bufferIndex)\n flushChunks()\n }\n\n function endsWithIgnoringWhitespace(char: string): boolean {\n let i = buffer.length - 1\n\n while (i > 0) {\n if (char === buffer.charAt(i)) {\n return true\n }\n\n if (!isWhitespace(buffer, i)) {\n return false\n }\n\n i--\n }\n\n return false\n }\n\n return {\n push,\n unshift,\n remove,\n insertAt,\n length,\n flush,\n\n stripLastOccurrence,\n insertBeforeLastWhitespace,\n endsWithIgnoringWhitespace\n }\n}\n\nconst flushedMessage = 'start of the output is already flushed from the buffer'\n"],"mappings":"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","ignoreList":[]}

@@ -5,3 +5,3 @@ import { JSONRepairError } from '../utils/JSONRepairError.js';

import { createOutputBuffer } from './buffer/OutputBuffer.js';
import { Caret, StackType, createStack } from './stack.js';
import { Caret, createStack, StackType } from './stack.js';
const controlCharacters = {

@@ -202,3 +202,3 @@ '\b': '\\b',

i++;
output.push("\"".concat(input.substring(start, i), "\""));
output.push(`"${input.substring(start, i)}"`);
return stack.update(Caret.afterValue);

@@ -322,7 +322,7 @@ }

function parseRootStart() {
parseMarkdownCodeBlock();
parseMarkdownCodeBlock(['```', '[```', '{```']);
return parseValue() || parseUnexpectedEnd();
}
function parseRootEnd() {
parseMarkdownCodeBlock();
parseMarkdownCodeBlock(['```', '```]', '```}']);
const parsedComma = parseCharacter(',');

@@ -410,3 +410,3 @@ parseWhitespaceAndSkipComments();

}
function parseMarkdownCodeBlock() {
function parseMarkdownCodeBlock(blocks) {
// find and skip over a Markdown fenced code block:

@@ -416,4 +416,3 @@ // ``` ... ```

// ```json ... ```
if (input.substring(i, i + 3) === '```') {
i += 3;
if (skipMarkdownCodeBlock(blocks)) {
if (isFunctionNameCharStart(input.charAt(i))) {

@@ -430,2 +429,12 @@ // strip the optional language specifier like "json"

}
function skipMarkdownCodeBlock(blocks) {
for (const block of blocks) {
const end = i + block.length;
if (input.substring(i, end) === block) {
i = end;
return true;
}
}
return false;
}
function parseCharacter(char) {

@@ -515,9 +524,9 @@ if (input.charAt(i) === char) {

return stack.update(Caret.afterValue);
// biome-ignore lint/style/noUselessElse: <explanation>
} else if (i === stopAtIndex) {
}
if (i === stopAtIndex) {
// use the stop index detected in the first iteration, and repair end quote
output.insertBeforeLastWhitespace('"');
return stack.update(Caret.afterValue);
// biome-ignore lint/style/noUselessElse: <explanation>
} else if (isEndQuote(input.charAt(i))) {
}
if (isEndQuote(input.charAt(i))) {
// end quote

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

// repair unescaped double quote
output.push("\\".concat(char));
output.push(`\\${char}`);
i++;

@@ -724,3 +733,3 @@ } else if (isControlCharacter(char)) {

const hasInvalidLeadingZero = /^0\d/.test(num);
output.push(hasInvalidLeadingZero ? "\"".concat(num, "\"") : num);
output.push(hasInvalidLeadingZero ? `"${num}"` : num);
return stack.update(Caret.afterValue);

@@ -789,9 +798,9 @@ }

// change the number more than it needs to make it valid JSON
output.push("".concat(input.substring(start, i), "0"));
output.push(`${input.substring(start, i)}0`);
}
function throwInvalidCharacter(char) {
throw new JSONRepairError("Invalid character ".concat(JSON.stringify(char)), i);
throw new JSONRepairError(`Invalid character ${JSON.stringify(char)}`, i);
}
function throwUnexpectedCharacter() {
throw new JSONRepairError("Unexpected character ".concat(JSON.stringify(input.charAt(i))), i);
throw new JSONRepairError(`Unexpected character ${JSON.stringify(input.charAt(i))}`, i);
}

@@ -809,3 +818,3 @@ function throwUnexpectedEnd() {

const chars = input.substring(i, i + 6);
throw new JSONRepairError("Invalid unicode character \"".concat(chars, "\""), i);
throw new JSONRepairError(`Invalid unicode character "${chars}"`, i);
}

@@ -812,0 +821,0 @@ function atEndOfBlockComment(i) {

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

{"version":3,"file":"core.js","names":["JSONRepairError","isControlCharacter","isDelimiter","isDigit","isDoubleQuote","isDoubleQuoteLike","isFunctionNameChar","isFunctionNameCharStart","isHex","isQuote","isSingleQuote","isSingleQuoteLike","isSpecialWhitespace","isStartOfValue","isUnquotedStringDelimiter","isValidStringCharacter","isWhitespace","isWhitespaceExceptNewline","regexUrlChar","regexUrlStart","createInputBuffer","createOutputBuffer","Caret","StackType","createStack","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","concat","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","char","skipEscapeCharacter","stopAtDelimiter","stopAtIndex","skipEscapeChars","isEndQuote","iBefore","oBefore","iPrev","prevNonWhitespaceIndex","remove","iQuote","oQuote","parseConcatenatedString","iPrevChar","prevChar","insertAt","escapeChar","throwInvalidUnicodeCharacter","throwInvalidCharacter","parsed","parsedStr","atEndOfNumber","repairNumberEndingWithNumericSymbol","num","hasInvalidLeadingZero","parseKeyword","name","value","end","isKey","prev","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 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, StackType, createStack } 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(`\"${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(): boolean {\n // find and skip over a Markdown fenced code block:\n // ``` ... ```\n // or\n // ```json ... ```\n if (input.substring(i, i + 3) === '```') {\n i += 3\n\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 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 // biome-ignore lint/style/noUselessElse: <explanation>\n } else 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 // biome-ignore lint/style/noUselessElse: <explanation>\n } else 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 isQuote(input.charAt(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 {\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 if (input.charAt(i) === '-') {\n i++\n if (atEndOfNumber()) {\n repairNumberEndingWithNumericSymbol(start)\n return stack.update(Caret.afterValue)\n }\n if (!isDigit(input.charAt(i))) {\n i = start\n return false\n }\n }\n\n // Note that in JSON leading zeros like \"00789\" are not allowed.\n // We will allow all leading zeros here though and at the end of parseNumber\n // check against trailing zeros and repair that if needed.\n // Leading zeros can have meaning, so we should not clear them.\n while (isDigit(input.charAt(i))) {\n i++\n }\n\n if (input.charAt(i) === '.') {\n i++\n if (atEndOfNumber()) {\n repairNumberEndingWithNumericSymbol(start)\n return stack.update(Caret.afterValue)\n }\n if (!isDigit(input.charAt(i))) {\n i = start\n return false\n }\n while (isDigit(input.charAt(i))) {\n i++\n }\n }\n\n if (input.charAt(i) === 'e' || input.charAt(i) === 'E') {\n i++\n if (input.charAt(i) === '-' || input.charAt(i) === '+') {\n i++\n }\n if (atEndOfNumber()) {\n repairNumberEndingWithNumericSymbol(start)\n return stack.update(Caret.afterValue)\n }\n if (!isDigit(input.charAt(i))) {\n i = start\n return false\n }\n while (isDigit(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 if (i > start) {\n // repair a number with leading zeros like \"00789\"\n const num = input.substring(start, i)\n const hasInvalidLeadingZero = /^0\\d/.test(num)\n\n output.push(hasInvalidLeadingZero ? `\"${num}\"` : 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 (input.substring(i, i + name.length) === name) {\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 atEndOfNumber() {\n return input.isEnd(i) || isDelimiter(input.charAt(i)) || isWhitespace(input, i)\n }\n\n function repairNumberEndingWithNumericSymbol(start: number) {\n // repair numbers cut off at the end\n // this will only be called when we end after a '.', '-', or 'e' and does not\n // change the number more than it needs to make it valid JSON\n output.push(`${input.substring(start, i)}0`)\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","isDoubleQuoteLike","isFunctionNameChar","isFunctionNameCharStart","isHex","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","parseConcatenatedString","iPrevChar","prevChar","insertAt","escapeChar","throwInvalidUnicodeCharacter","throwInvalidCharacter","parsed","parsedStr","atEndOfNumber","repairNumberEndingWithNumericSymbol","num","hasInvalidLeadingZero","parseKeyword","name","value","isKey","prev","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 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(`\"${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 isQuote(input.charAt(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 {\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 if (input.charAt(i) === '-') {\n i++\n if (atEndOfNumber()) {\n repairNumberEndingWithNumericSymbol(start)\n return stack.update(Caret.afterValue)\n }\n if (!isDigit(input.charAt(i))) {\n i = start\n return false\n }\n }\n\n // Note that in JSON leading zeros like \"00789\" are not allowed.\n // We will allow all leading zeros here though and at the end of parseNumber\n // check against trailing zeros and repair that if needed.\n // Leading zeros can have meaning, so we should not clear them.\n while (isDigit(input.charAt(i))) {\n i++\n }\n\n if (input.charAt(i) === '.') {\n i++\n if (atEndOfNumber()) {\n repairNumberEndingWithNumericSymbol(start)\n return stack.update(Caret.afterValue)\n }\n if (!isDigit(input.charAt(i))) {\n i = start\n return false\n }\n while (isDigit(input.charAt(i))) {\n i++\n }\n }\n\n if (input.charAt(i) === 'e' || input.charAt(i) === 'E') {\n i++\n if (input.charAt(i) === '-' || input.charAt(i) === '+') {\n i++\n }\n if (atEndOfNumber()) {\n repairNumberEndingWithNumericSymbol(start)\n return stack.update(Caret.afterValue)\n }\n if (!isDigit(input.charAt(i))) {\n i = start\n return false\n }\n while (isDigit(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 if (i > start) {\n // repair a number with leading zeros like \"00789\"\n const num = input.substring(start, i)\n const hasInvalidLeadingZero = /^0\\d/.test(num)\n\n output.push(hasInvalidLeadingZero ? `\"${num}\"` : 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 (input.substring(i, i + name.length) === name) {\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 atEndOfNumber() {\n return input.isEnd(i) || isDelimiter(input.charAt(i)) || isWhitespace(input, i)\n }\n\n function repairNumberEndingWithNumericSymbol(start: number) {\n // repair numbers cut off at the end\n // this will only be called when we end after a '.', '-', or 'e' and does not\n // change the number more than it needs to make it valid JSON\n output.push(`${input.substring(start, i)}0`)\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":[]}

@@ -6,7 +6,7 @@ import { Transform } from 'node:stream';

onData: chunk => transform.push(chunk),
bufferSize: options === null || options === void 0 ? void 0 : options.bufferSize,
chunkSize: options === null || options === void 0 ? void 0 : options.chunkSize
bufferSize: options?.bufferSize,
chunkSize: options?.chunkSize
});
const transform = new Transform({
transform(chunk, encoding, callback) {
transform(chunk, _encoding, callback) {
try {

@@ -13,0 +13,0 @@ repair.transform(chunk.toString());

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

{"version":3,"file":"stream.js","names":["Transform","jsonrepairCore","jsonrepairTransform","options","repair","onData","chunk","transform","push","bufferSize","chunkSize","encoding","callback","toString","err","emit","flush"],"sources":["../../../src/streaming/stream.ts"],"sourcesContent":["import { Transform } from 'node:stream'\nimport { jsonrepairCore } from './core.js'\n\nexport interface JsonRepairTransformOptions {\n chunkSize?: number\n bufferSize?: number\n}\n\nexport function jsonrepairTransform(options?: JsonRepairTransformOptions): Transform {\n const repair = jsonrepairCore({\n onData: (chunk) => transform.push(chunk),\n bufferSize: options?.bufferSize,\n chunkSize: options?.chunkSize\n })\n\n const transform = new Transform({\n transform(chunk, encoding, callback) {\n try {\n repair.transform(chunk.toString())\n } catch (err) {\n this.emit('error', err)\n } finally {\n callback()\n }\n },\n\n flush(callback) {\n try {\n repair.flush()\n } catch (err) {\n this.emit('error', err)\n } finally {\n callback()\n }\n }\n })\n\n return transform\n}\n"],"mappings":"AAAA,SAASA,SAAS,QAAQ,aAAa;AACvC,SAASC,cAAc,QAAQ,WAAW;AAO1C,OAAO,SAASC,mBAAmBA,CAACC,OAAoC,EAAa;EACnF,MAAMC,MAAM,GAAGH,cAAc,CAAC;IAC5BI,MAAM,EAAGC,KAAK,IAAKC,SAAS,CAACC,IAAI,CAACF,KAAK,CAAC;IACxCG,UAAU,EAAEN,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEM,UAAU;IAC/BC,SAAS,EAAEP,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEO;EACtB,CAAC,CAAC;EAEF,MAAMH,SAAS,GAAG,IAAIP,SAAS,CAAC;IAC9BO,SAASA,CAACD,KAAK,EAAEK,QAAQ,EAAEC,QAAQ,EAAE;MACnC,IAAI;QACFR,MAAM,CAACG,SAAS,CAACD,KAAK,CAACO,QAAQ,CAAC,CAAC,CAAC;MACpC,CAAC,CAAC,OAAOC,GAAG,EAAE;QACZ,IAAI,CAACC,IAAI,CAAC,OAAO,EAAED,GAAG,CAAC;MACzB,CAAC,SAAS;QACRF,QAAQ,CAAC,CAAC;MACZ;IACF,CAAC;IAEDI,KAAKA,CAACJ,QAAQ,EAAE;MACd,IAAI;QACFR,MAAM,CAACY,KAAK,CAAC,CAAC;MAChB,CAAC,CAAC,OAAOF,GAAG,EAAE;QACZ,IAAI,CAACC,IAAI,CAAC,OAAO,EAAED,GAAG,CAAC;MACzB,CAAC,SAAS;QACRF,QAAQ,CAAC,CAAC;MACZ;IACF;EACF,CAAC,CAAC;EAEF,OAAOL,SAAS;AAClB","ignoreList":[]}
{"version":3,"file":"stream.js","names":["Transform","jsonrepairCore","jsonrepairTransform","options","repair","onData","chunk","transform","push","bufferSize","chunkSize","_encoding","callback","toString","err","emit","flush"],"sources":["../../../src/streaming/stream.ts"],"sourcesContent":["import { Transform } from 'node:stream'\nimport { jsonrepairCore } from './core.js'\n\nexport interface JsonRepairTransformOptions {\n chunkSize?: number\n bufferSize?: number\n}\n\nexport function jsonrepairTransform(options?: JsonRepairTransformOptions): Transform {\n const repair = jsonrepairCore({\n onData: (chunk) => transform.push(chunk),\n bufferSize: options?.bufferSize,\n chunkSize: options?.chunkSize\n })\n\n const transform = new Transform({\n transform(chunk, _encoding, callback) {\n try {\n repair.transform(chunk.toString())\n } catch (err) {\n this.emit('error', err)\n } finally {\n callback()\n }\n },\n\n flush(callback) {\n try {\n repair.flush()\n } catch (err) {\n this.emit('error', err)\n } finally {\n callback()\n }\n }\n })\n\n return transform\n}\n"],"mappings":"AAAA,SAASA,SAAS,QAAQ,aAAa;AACvC,SAASC,cAAc,QAAQ,WAAW;AAO1C,OAAO,SAASC,mBAAmBA,CAACC,OAAoC,EAAa;EACnF,MAAMC,MAAM,GAAGH,cAAc,CAAC;IAC5BI,MAAM,EAAGC,KAAK,IAAKC,SAAS,CAACC,IAAI,CAACF,KAAK,CAAC;IACxCG,UAAU,EAAEN,OAAO,EAAEM,UAAU;IAC/BC,SAAS,EAAEP,OAAO,EAAEO;EACtB,CAAC,CAAC;EAEF,MAAMH,SAAS,GAAG,IAAIP,SAAS,CAAC;IAC9BO,SAASA,CAACD,KAAK,EAAEK,SAAS,EAAEC,QAAQ,EAAE;MACpC,IAAI;QACFR,MAAM,CAACG,SAAS,CAACD,KAAK,CAACO,QAAQ,CAAC,CAAC,CAAC;MACpC,CAAC,CAAC,OAAOC,GAAG,EAAE;QACZ,IAAI,CAACC,IAAI,CAAC,OAAO,EAAED,GAAG,CAAC;MACzB,CAAC,SAAS;QACRF,QAAQ,CAAC,CAAC;MACZ;IACF,CAAC;IAEDI,KAAKA,CAACJ,QAAQ,EAAE;MACd,IAAI;QACFR,MAAM,CAACY,KAAK,CAAC,CAAC;MAChB,CAAC,CAAC,OAAOF,GAAG,EAAE;QACZ,IAAI,CAACC,IAAI,CAAC,OAAO,EAAED,GAAG,CAAC;MACzB,CAAC,SAAS;QACRF,QAAQ,CAAC,CAAC;MACZ;IACF;EACF,CAAC,CAAC;EAEF,OAAOL,SAAS;AAClB","ignoreList":[]}
export class JSONRepairError extends Error {
constructor(message, position) {
super("".concat(message, " at position ").concat(position));
super(`${message} at position ${position}`);
this.position = position;

@@ -5,0 +5,0 @@ }

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

{"version":3,"file":"JSONRepairError.js","names":["JSONRepairError","Error","constructor","message","position","concat"],"sources":["../../../src/utils/JSONRepairError.ts"],"sourcesContent":["export class JSONRepairError extends Error {\n position: number\n\n constructor(message: string, position: number) {\n super(`${message} at position ${position}`)\n\n this.position = position\n }\n}\n"],"mappings":"AAAA,OAAO,MAAMA,eAAe,SAASC,KAAK,CAAC;EAGzCC,WAAWA,CAACC,OAAe,EAAEC,QAAgB,EAAE;IAC7C,KAAK,IAAAC,MAAA,CAAIF,OAAO,mBAAAE,MAAA,CAAgBD,QAAQ,CAAE,CAAC;IAE3C,IAAI,CAACA,QAAQ,GAAGA,QAAQ;EAC1B;AACF","ignoreList":[]}
{"version":3,"file":"JSONRepairError.js","names":["JSONRepairError","Error","constructor","message","position"],"sources":["../../../src/utils/JSONRepairError.ts"],"sourcesContent":["export class JSONRepairError extends Error {\n position: number\n\n constructor(message: string, position: number) {\n super(`${message} at position ${position}`)\n\n this.position = position\n }\n}\n"],"mappings":"AAAA,OAAO,MAAMA,eAAe,SAASC,KAAK,CAAC;EAGzCC,WAAWA,CAACC,OAAe,EAAEC,QAAgB,EAAE;IAC7C,KAAK,CAAC,GAAGD,OAAO,gBAAgBC,QAAQ,EAAE,CAAC;IAE3C,IAAI,CAACA,QAAQ,GAAGA,QAAQ;EAC1B;AACF","ignoreList":[]}

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

{"version":3,"file":"jsonrepair.d.ts","sourceRoot":"","sources":["../../../src/regular/jsonrepair.ts"],"names":[],"mappings":"AAgDA;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAuzB/C"}
{"version":3,"file":"jsonrepair.d.ts","sourceRoot":"","sources":["../../../src/regular/jsonrepair.ts"],"names":[],"mappings":"AAgDA;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAm0B/C"}

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

export { jsonrepairTransform, type JsonRepairTransformOptions } from './streaming/stream.js';
export { type JsonRepairTransformOptions, jsonrepairTransform } from './streaming/stream.js';
//# sourceMappingURL=stream.d.ts.map

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

{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../src/stream.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,KAAK,0BAA0B,EAAE,MAAM,uBAAuB,CAAA"}
{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../src/stream.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,0BAA0B,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA"}

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

{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../src/streaming/core.ts"],"names":[],"mappings":"AA+CA,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,CAg9BxC"}
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../src/streaming/core.ts"],"names":[],"mappings":"AA+CA,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,CA49BxC"}

@@ -9,3 +9,3 @@ (function (global, factory) {

constructor(message, position) {
super("".concat(message, " at position ").concat(position));
super(`${message} at position ${position}`);
this.position = position;

@@ -203,3 +203,3 @@ }

parseMarkdownCodeBlock();
parseMarkdownCodeBlock(['```', '[```', '{```']);
const processed = parseValue();

@@ -209,3 +209,3 @@ if (!processed) {

}
parseMarkdownCodeBlock();
parseMarkdownCodeBlock(['```', '```]', '```}']);
const processedComma = parseCharacter(',');

@@ -298,3 +298,3 @@ if (processedComma) {

}
function parseMarkdownCodeBlock() {
function parseMarkdownCodeBlock(blocks) {
// find and skip over a Markdown fenced code block:

@@ -304,4 +304,3 @@ // ``` ... ```

// ```json ... ```
if (text.slice(i, i + 3) === '```') {
i += 3;
if (skipMarkdownCodeBlock(blocks)) {
if (isFunctionNameCharStart(text[i])) {

@@ -318,2 +317,12 @@ // strip the optional language specifier like "json"

}
function skipMarkdownCodeBlock(blocks) {
for (const block of blocks) {
const end = i + block.length;
if (text.slice(i, end) === block) {
i = end;
return true;
}
}
return false;
}
function parseCharacter(char) {

@@ -496,3 +505,3 @@ if (text[i] === char) {

// repair: wrap the output inside array brackets
output = "[\n".concat(output, "\n]");
output = `[\n${output}\n]`;
}

@@ -550,4 +559,4 @@

return true;
// biome-ignore lint/style/noUselessElse: <explanation>
} else if (i === stopAtIndex) {
}
if (i === stopAtIndex) {
// use the stop index detected in the first iteration, and repair end quote

@@ -557,4 +566,4 @@ str = insertBeforeLastWhitespace(str, '"');

return true;
// biome-ignore lint/style/noUselessElse: <explanation>
} else if (isEndQuote(text[i])) {
}
if (isEndQuote(text[i])) {
// end quote

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

// repair unescaped quote
str = "".concat(str.substring(0, oQuote), "\\").concat(str.substring(oQuote));
str = `${str.substring(0, oQuote)}\\${str.substring(oQuote)}`;
} else if (stopAtDelimiter && isUnquotedStringDelimiter(text[i])) {

@@ -649,3 +658,3 @@ // we're in the mode to stop the string at the first delimiter

// repair unescaped double quote
str += "\\".concat(char);
str += `\\${char}`;
i++;

@@ -764,3 +773,3 @@ } else if (isControlCharacter(char)) {

const hasInvalidLeadingZero = /^0\d/.test(num);
output += hasInvalidLeadingZero ? "\"".concat(num, "\"") : num;
output += hasInvalidLeadingZero ? `"${num}"` : num;
return true;

@@ -857,3 +866,3 @@ }

i++;
output += "\"".concat(text.substring(start, i), "\"");
output += `"${text.substring(start, i)}"`;
return true;

@@ -876,9 +885,9 @@ }

// change the number more than it needs to make it valid JSON
output += "".concat(text.slice(start, i), "0");
output += `${text.slice(start, i)}0`;
}
function throwInvalidCharacter(char) {
throw new JSONRepairError("Invalid character ".concat(JSON.stringify(char)), i);
throw new JSONRepairError(`Invalid character ${JSON.stringify(char)}`, i);
}
function throwUnexpectedCharacter() {
throw new JSONRepairError("Unexpected character ".concat(JSON.stringify(text[i])), i);
throw new JSONRepairError(`Unexpected character ${JSON.stringify(text[i])}`, i);
}

@@ -896,3 +905,3 @@ function throwUnexpectedEnd() {

const chars = text.slice(i, i + 6);
throw new JSONRepairError("Invalid unicode character \"".concat(chars, "\""), i);
throw new JSONRepairError(`Invalid unicode character "${chars}"`, i);
}

@@ -899,0 +908,0 @@ }

@@ -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(\"\".concat(message, \" at position \").concat(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\"\nconst codeNonBreakingSpace = 0xa0;\nconst codeEnQuad = 0x2000;\nconst codeHairSpace = 0x200a;\nconst codeNarrowNoBreakSpace = 0x202f;\nconst codeMediumMathematicalSpace = 0x205f;\nconst codeIdeographicSpace = 0x3000;\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 >= codeEnQuad && code <= codeHairSpace || code === codeNarrowNoBreakSpace || code === codeMediumMathematicalSpace || code === codeIdeographicSpace;\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//# sourceMappingURL=stringUtils.js.map","import { JSONRepairError } from '../utils/JSONRepairError.js';\nimport { endsWithCommaOrNewline, insertBeforeLastWhitespace, isControlCharacter, isDelimiter, isDigit, isDoubleQuote, isDoubleQuoteLike, isFunctionNameChar, isFunctionNameCharStart, isHex, 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() {\n // find and skip over a Markdown fenced code block:\n // ``` ... ```\n // or\n // ```json ... ```\n if (text.slice(i, i + 3) === '```') {\n i += 3;\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 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 initial = false;\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 output = stripLastOccurrence(output, ',');\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 }\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 } else {\n initial = false;\n }\n skipEllipsis();\n const processedValue = parseValue();\n if (!processedValue) {\n // repair trailing comma\n output = stripLastOccurrence(output, ',');\n break;\n }\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\".concat(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 // biome-ignore lint/style/noUselessElse: <explanation>\n } else 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 // biome-ignore lint/style/noUselessElse: <explanation>\n } else 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]) || isQuote(text[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 = \"\".concat(str.substring(0, oQuote), \"\\\\\").concat(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 {\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 += \"\\\\\".concat(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 if (text[i] === '-') {\n i++;\n if (atEndOfNumber()) {\n repairNumberEndingWithNumericSymbol(start);\n return true;\n }\n if (!isDigit(text[i])) {\n i = start;\n return false;\n }\n }\n\n // Note that in JSON leading zeros like \"00789\" are not allowed.\n // We will allow all leading zeros here though and at the end of parseNumber\n // check against trailing zeros and repair that if needed.\n // Leading zeros can have meaning, so we should not clear them.\n while (isDigit(text[i])) {\n i++;\n }\n if (text[i] === '.') {\n i++;\n if (atEndOfNumber()) {\n repairNumberEndingWithNumericSymbol(start);\n return true;\n }\n if (!isDigit(text[i])) {\n i = start;\n return false;\n }\n while (isDigit(text[i])) {\n i++;\n }\n }\n if (text[i] === 'e' || text[i] === 'E') {\n i++;\n if (text[i] === '-' || text[i] === '+') {\n i++;\n }\n if (atEndOfNumber()) {\n repairNumberEndingWithNumericSymbol(start);\n return true;\n }\n if (!isDigit(text[i])) {\n i = start;\n return false;\n }\n while (isDigit(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 if (i > start) {\n // repair a number with leading zeros like \"00789\"\n const num = text.slice(start, i);\n const hasInvalidLeadingZero = /^0\\d/.test(num);\n output += hasInvalidLeadingZero ? \"\\\"\".concat(num, \"\\\"\") : 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) {\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 += \"\\\"\".concat(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 atEndOfNumber() {\n return i >= text.length || isDelimiter(text[i]) || isWhitespace(text, i);\n }\n function repairNumberEndingWithNumericSymbol(start) {\n // repair numbers cut off at the end\n // this will only be called when we end after a '.', '-', or 'e' and does not\n // change the number more than it needs to make it valid JSON\n output += \"\".concat(text.slice(start, i), \"0\");\n }\n function throwInvalidCharacter(char) {\n throw new JSONRepairError(\"Invalid character \".concat(JSON.stringify(char)), i);\n }\n function throwUnexpectedCharacter() {\n throw new JSONRepairError(\"Unexpected character \".concat(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 \\\"\".concat(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\"\nconst codeNonBreakingSpace = 0xa0;\nconst codeEnQuad = 0x2000;\nconst codeHairSpace = 0x200a;\nconst codeNarrowNoBreakSpace = 0x202f;\nconst codeMediumMathematicalSpace = 0x205f;\nconst codeIdeographicSpace = 0x3000;\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 >= codeEnQuad && code <= codeHairSpace || code === codeNarrowNoBreakSpace || code === codeMediumMathematicalSpace || code === codeIdeographicSpace;\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//# sourceMappingURL=stringUtils.js.map","import { JSONRepairError } from '../utils/JSONRepairError.js';\nimport { endsWithCommaOrNewline, insertBeforeLastWhitespace, isControlCharacter, isDelimiter, isDigit, isDoubleQuote, isDoubleQuoteLike, isFunctionNameChar, isFunctionNameCharStart, isHex, 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 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 initial = false;\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 output = stripLastOccurrence(output, ',');\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 }\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 } else {\n initial = false;\n }\n skipEllipsis();\n const processedValue = parseValue();\n if (!processedValue) {\n // repair trailing comma\n output = stripLastOccurrence(output, ',');\n break;\n }\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]) || isQuote(text[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 {\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 if (text[i] === '-') {\n i++;\n if (atEndOfNumber()) {\n repairNumberEndingWithNumericSymbol(start);\n return true;\n }\n if (!isDigit(text[i])) {\n i = start;\n return false;\n }\n }\n\n // Note that in JSON leading zeros like \"00789\" are not allowed.\n // We will allow all leading zeros here though and at the end of parseNumber\n // check against trailing zeros and repair that if needed.\n // Leading zeros can have meaning, so we should not clear them.\n while (isDigit(text[i])) {\n i++;\n }\n if (text[i] === '.') {\n i++;\n if (atEndOfNumber()) {\n repairNumberEndingWithNumericSymbol(start);\n return true;\n }\n if (!isDigit(text[i])) {\n i = start;\n return false;\n }\n while (isDigit(text[i])) {\n i++;\n }\n }\n if (text[i] === 'e' || text[i] === 'E') {\n i++;\n if (text[i] === '-' || text[i] === '+') {\n i++;\n }\n if (atEndOfNumber()) {\n repairNumberEndingWithNumericSymbol(start);\n return true;\n }\n if (!isDigit(text[i])) {\n i = start;\n return false;\n }\n while (isDigit(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 if (i > start) {\n // repair a number with leading zeros like \"00789\"\n const num = text.slice(start, i);\n const hasInvalidLeadingZero = /^0\\d/.test(num);\n output += hasInvalidLeadingZero ? `\"${num}\"` : 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) {\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 += `\"${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 atEndOfNumber() {\n return i >= text.length || isDelimiter(text[i]) || isWhitespace(text, i);\n }\n function repairNumberEndingWithNumericSymbol(start) {\n // repair numbers cut off at the end\n // this will only be called when we end after a '.', '-', or 'e' and does not\n // change the number more than it needs to make it valid JSON\n output += `${text.slice(start, i)}0`;\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":";;;;;;EAAO,MAAM,eAAe,SAAS,KAAK,CAAC;EAC3C,EAAE,WAAW,CAAC,OAAO,EAAE,QAAQ,EAAE;EACjC,IAAI,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAC;EAC/C,IAAI,IAAI,CAAC,QAAQ,GAAG,QAAQ;EAC5B;EACA;;ECLA,MAAM,SAAS,GAAG,IAAI,CAAC;EACvB,MAAM,WAAW,GAAG,GAAG,CAAC;EACxB,MAAM,OAAO,GAAG,GAAG,CAAC;EACpB,MAAM,UAAU,GAAG,GAAG,CAAC;EACvB,MAAM,oBAAoB,GAAG,IAAI;EACjC,MAAM,UAAU,GAAG,MAAM;EACzB,MAAM,aAAa,GAAG,MAAM;EAC5B,MAAM,sBAAsB,GAAG,MAAM;EACrC,MAAM,2BAA2B,GAAG,MAAM;EAC1C,MAAM,oBAAoB,GAAG,MAAM;EAC5B,SAAS,KAAK,CAAC,IAAI,EAAE;EAC5B,EAAE,OAAO,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;EACnC;EACO,SAAS,OAAO,CAAC,IAAI,EAAE;EAC9B,EAAE,OAAO,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG;EACnC;EACO,SAAS,sBAAsB,CAAC,IAAI,EAAE;EAC7C;EACA;EACA;EACA,EAAE,OAAO,IAAI,IAAI,QAAQ;EACzB;EACO,SAAS,WAAW,CAAC,IAAI,EAAE;EAClC,EAAE,OAAO,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC;EACtC;EACO,SAAS,uBAAuB,CAAC,IAAI,EAAE;EAC9C,EAAE,OAAO,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG;EACjG;EACO,SAAS,kBAAkB,CAAC,IAAI,EAAE;EACzC,EAAE,OAAO,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG;EAC/H;;EAEA;EACO,MAAM,aAAa,GAAG,8CAA8C;;EAE3E;EACO,MAAM,YAAY,GAAG,kCAAkC;EACvD,SAAS,yBAAyB,CAAC,IAAI,EAAE;EAChD,EAAE,OAAO,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC;EACnC;EACO,SAAS,cAAc,CAAC,IAAI,EAAE;EACrC,EAAE,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;EACtD;;EAEA;EACA,MAAM,iBAAiB,GAAG,WAAW;EAC9B,SAAS,kBAAkB,CAAC,IAAI,EAAE;EACzC,EAAE,OAAO,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI;EAC1F;EACA;EACA;EACA;EACA;EACO,SAAS,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE;EAC1C,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;EACrC,EAAE,OAAO,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,UAAU;EAC9F;;EAEA;EACA;EACA;EACA;EACO,SAAS,yBAAyB,CAAC,IAAI,EAAE,KAAK,EAAE;EACvD,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;EACrC,EAAE,OAAO,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,UAAU;EACtE;;EAEA;EACA;EACA;EACA;EACO,SAAS,mBAAmB,CAAC,IAAI,EAAE,KAAK,EAAE;EACjD,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;EACrC,EAAE,OAAO,IAAI,KAAK,oBAAoB,IAAI,IAAI,IAAI,UAAU,IAAI,IAAI,IAAI,aAAa,IAAI,IAAI,KAAK,sBAAsB,IAAI,IAAI,KAAK,2BAA2B,IAAI,IAAI,KAAK,oBAAoB;EACjM;;EAEA;EACA;EACA;EACA;EACO,SAAS,OAAO,CAAC,IAAI,EAAE;EAC9B;EACA,EAAE,OAAO,iBAAiB,CAAC,IAAI,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC;EAC3D;;EAEA;EACA;EACA;EACA;EACO,SAAS,iBAAiB,CAAC,IAAI,EAAE;EACxC,EAAE,OAAO,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,QAAQ;EAC/D;;EAEA;EACA;EACA;EACA;EACO,SAAS,aAAa,CAAC,IAAI,EAAE;EACpC,EAAE,OAAO,IAAI,KAAK,GAAG;EACrB;;EAEA;EACA;EACA;EACA;EACO,SAAS,iBAAiB,CAAC,IAAI,EAAE;EACxC,EAAE,OAAO,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,QAAQ;EACzG;;EAEA;EACA;EACA;EACA;EACO,SAAS,aAAa,CAAC,IAAI,EAAE;EACpC,EAAE,OAAO,IAAI,KAAK,GAAG;EACrB;;EAEA;EACA;EACA;EACO,SAAS,mBAAmB,CAAC,IAAI,EAAE,WAAW,EAAE;EACvD,EAAE,IAAI,kBAAkB,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,KAAK;EACpG,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC;EAC7C,EAAE,OAAO,KAAK,KAAK,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,kBAAkB,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI;EAC/G;EACO,SAAS,0BAA0B,CAAC,IAAI,EAAE,YAAY,EAAE;EAC/D,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM;EACzB,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,EAAE;EACtC;EACA,IAAI,OAAO,IAAI,GAAG,YAAY;EAC9B;EACA,EAAE,OAAO,YAAY,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,EAAE;EACxC,IAAI,KAAK,EAAE;EACX;EACA,EAAE,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;EACxE;EACO,SAAS,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE;EAClD,EAAE,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,KAAK,CAAC;EACjE;;EAEA;EACA;EACA;EACO,SAAS,sBAAsB,CAAC,IAAI,EAAE;EAC7C,EAAE,OAAO,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;EACpC;;EC/IA,MAAM,iBAAiB,GAAG;EAC1B,EAAE,IAAI,EAAE,KAAK;EACb,EAAE,IAAI,EAAE,KAAK;EACb,EAAE,IAAI,EAAE,KAAK;EACb,EAAE,IAAI,EAAE,KAAK;EACb,EAAE,IAAI,EAAE;EACR,CAAC;;EAED;EACA,MAAM,gBAAgB,GAAG;EACzB,EAAE,GAAG,EAAE,GAAG;EACV,EAAE,IAAI,EAAE,IAAI;EACZ,EAAE,GAAG,EAAE,GAAG;EACV,EAAE,CAAC,EAAE,IAAI;EACT,EAAE,CAAC,EAAE,IAAI;EACT,EAAE,CAAC,EAAE,IAAI;EACT,EAAE,CAAC,EAAE,IAAI;EACT,EAAE,CAAC,EAAE;EACL;EACA,CAAC;;EAED;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACO,SAAS,UAAU,CAAC,IAAI,EAAE;EACjC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;EACZ,EAAE,IAAI,MAAM,GAAG,EAAE,CAAC;;EAElB,EAAE,sBAAsB,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;EACjD,EAAE,MAAM,SAAS,GAAG,UAAU,EAAE;EAChC,EAAE,IAAI,CAAC,SAAS,EAAE;EAClB,IAAI,kBAAkB,EAAE;EACxB;EACA,EAAE,sBAAsB,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;EACjD,EAAE,MAAM,cAAc,GAAG,cAAc,CAAC,GAAG,CAAC;EAC5C,EAAE,IAAI,cAAc,EAAE;EACtB,IAAI,8BAA8B,EAAE;EACpC;EACA,EAAE,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,sBAAsB,CAAC,MAAM,CAAC,EAAE;EACjE;EACA;EACA,IAAI,IAAI,CAAC,cAAc,EAAE;EACzB;EACA,MAAM,MAAM,GAAG,0BAA0B,CAAC,MAAM,EAAE,GAAG,CAAC;EACtD;EACA,IAAI,yBAAyB,EAAE;EAC/B,GAAG,MAAM,IAAI,cAAc,EAAE;EAC7B;EACA,IAAI,MAAM,GAAG,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC;EAC7C;;EAEA;EACA,EAAE,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;EAC7C,IAAI,CAAC,EAAE;EACP,IAAI,8BAA8B,EAAE;EACpC;EACA,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE;EACxB;EACA,IAAI,OAAO,MAAM;EACjB;EACA,EAAE,wBAAwB,EAAE;EAC5B,EAAE,SAAS,UAAU,GAAG;EACxB,IAAI,8BAA8B,EAAE;EACpC,IAAI,MAAM,SAAS,GAAG,WAAW,EAAE,IAAI,UAAU,EAAE,IAAI,WAAW,EAAE,IAAI,WAAW,EAAE,IAAI,aAAa,EAAE,IAAI,mBAAmB,CAAC,KAAK,CAAC,IAAI,UAAU,EAAE;EACtJ,IAAI,8BAA8B,EAAE;EACpC,IAAI,OAAO,SAAS;EACpB;EACA,EAAE,SAAS,8BAA8B,GAAG;EAC5C,IAAI,IAAI,WAAW,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI;EAC9F,IAAI,MAAM,KAAK,GAAG,CAAC;EACnB,IAAI,IAAI,OAAO,GAAG,eAAe,CAAC,WAAW,CAAC;EAC9C,IAAI,GAAG;EACP,MAAM,OAAO,GAAG,YAAY,EAAE;EAC9B,MAAM,IAAI,OAAO,EAAE;EACnB,QAAQ,OAAO,GAAG,eAAe,CAAC,WAAW,CAAC;EAC9C;EACA,KAAK,QAAQ,OAAO;EACpB,IAAI,OAAO,CAAC,GAAG,KAAK;EACpB;EACA,EAAE,SAAS,eAAe,CAAC,WAAW,EAAE;EACxC,IAAI,MAAM,aAAa,GAAG,WAAW,GAAG,YAAY,GAAG,yBAAyB;EAChF,IAAI,IAAI,UAAU,GAAG,EAAE;EACvB,IAAI,OAAO,IAAI,EAAE;EACjB,MAAM,IAAI,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE;EAClC,QAAQ,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC;EAC7B,QAAQ,CAAC,EAAE;EACX,OAAO,MAAM,IAAI,mBAAmB,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE;EAC/C;EACA,QAAQ,UAAU,IAAI,GAAG;EACzB,QAAQ,CAAC,EAAE;EACX,OAAO,MAAM;EACb,QAAQ;EACR;EACA;EACA,IAAI,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;EAC/B,MAAM,MAAM,IAAI,UAAU;EAC1B,MAAM,OAAO,IAAI;EACjB;EACA,IAAI,OAAO,KAAK;EAChB;EACA,EAAE,SAAS,YAAY,GAAG;EAC1B;EACA,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE;EAChD;EACA,MAAM,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE;EAC/D,QAAQ,CAAC,EAAE;EACX;EACA,MAAM,CAAC,IAAI,CAAC;EACZ,MAAM,OAAO,IAAI;EACjB;;EAEA;EACA,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE;EAChD;EACA,MAAM,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;EAClD,QAAQ,CAAC,EAAE;EACX;EACA,MAAM,OAAO,IAAI;EACjB;EACA,IAAI,OAAO,KAAK;EAChB;EACA,EAAE,SAAS,sBAAsB,CAAC,MAAM,EAAE;EAC1C;EACA;EACA;EACA;EACA,IAAI,IAAI,qBAAqB,CAAC,MAAM,CAAC,EAAE;EACvC,MAAM,IAAI,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;EAC5C;EACA,QAAQ,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;EAC/D,UAAU,CAAC,EAAE;EACb;EACA;EACA,MAAM,8BAA8B,EAAE;EACtC,MAAM,OAAO,IAAI;EACjB;EACA,IAAI,OAAO,KAAK;EAChB;EACA,EAAE,SAAS,qBAAqB,CAAC,MAAM,EAAE;EACzC,IAAI,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;EAChC,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM;EAClC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,KAAK,EAAE;EACxC,QAAQ,CAAC,GAAG,GAAG;EACf,QAAQ,OAAO,IAAI;EACnB;EACA;EACA,IAAI,OAAO,KAAK;EAChB;EACA,EAAE,SAAS,cAAc,CAAC,IAAI,EAAE;EAChC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;EAC1B,MAAM,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC;EACvB,MAAM,CAAC,EAAE;EACT,MAAM,OAAO,IAAI;EACjB;EACA,IAAI,OAAO,KAAK;EAChB;EACA,EAAE,SAAS,aAAa,CAAC,IAAI,EAAE;EAC/B,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;EAC1B,MAAM,CAAC,EAAE;EACT,MAAM,OAAO,IAAI;EACjB;EACA,IAAI,OAAO,KAAK;EAChB;EACA,EAAE,SAAS,mBAAmB,GAAG;EACjC,IAAI,OAAO,aAAa,CAAC,IAAI,CAAC;EAC9B;;EAEA;EACA;EACA;EACA;EACA,EAAE,SAAS,YAAY,GAAG;EAC1B,IAAI,8BAA8B,EAAE;EACpC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE;EACvE;EACA,MAAM,CAAC,IAAI,CAAC;EACZ,MAAM,8BAA8B,EAAE;EACtC,MAAM,aAAa,CAAC,GAAG,CAAC;EACxB,MAAM,OAAO,IAAI;EACjB;EACA,IAAI,OAAO,KAAK;EAChB;;EAEA;EACA;EACA;EACA,EAAE,SAAS,WAAW,GAAG;EACzB,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;EACzB,MAAM,MAAM,IAAI,GAAG;EACnB,MAAM,CAAC,EAAE;EACT,MAAM,8BAA8B,EAAE;;EAEtC;EACA,MAAM,IAAI,aAAa,CAAC,GAAG,CAAC,EAAE;EAC9B,QAAQ,8BAA8B,EAAE;EACxC;EACA,MAAM,IAAI,OAAO,GAAG,IAAI;EACxB,MAAM,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;EACjD,QAAQ,IAAI,cAAc;EAC1B,QAAQ,IAAI,CAAC,OAAO,EAAE;EACtB,UAAU,cAAc,GAAG,cAAc,CAAC,GAAG,CAAC;EAC9C,UAAU,IAAI,CAAC,cAAc,EAAE;EAC/B;EACA,YAAY,MAAM,GAAG,0BAA0B,CAAC,MAAM,EAAE,GAAG,CAAC;EAC5D;EACA,UAAU,8BAA8B,EAAE;EAC1C,SAAS,MAAM;EACf,UAAU,cAAc,GAAG,IAAI;EAC/B,UAAU,OAAO,GAAG,KAAK;EACzB;EACA,QAAQ,YAAY,EAAE;EACtB,QAAQ,MAAM,YAAY,GAAG,WAAW,EAAE,IAAI,mBAAmB,CAAC,IAAI,CAAC;EACvE,QAAQ,IAAI,CAAC,YAAY,EAAE;EAC3B,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE;EACjH;EACA,YAAY,MAAM,GAAG,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC;EACrD,WAAW,MAAM;EACjB,YAAY,sBAAsB,EAAE;EACpC;EACA,UAAU;EACV;EACA,QAAQ,8BAA8B,EAAE;EACxC,QAAQ,MAAM,cAAc,GAAG,cAAc,CAAC,GAAG,CAAC;EAClD,QAAQ,MAAM,aAAa,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM;EAC9C,QAAQ,IAAI,CAAC,cAAc,EAAE;EAC7B,UAAU,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,aAAa,EAAE;EACxD;EACA,YAAY,MAAM,GAAG,0BAA0B,CAAC,MAAM,EAAE,GAAG,CAAC;EAC5D,WAAW,MAAM;EACjB,YAAY,kBAAkB,EAAE;EAChC;EACA;EACA,QAAQ,MAAM,cAAc,GAAG,UAAU,EAAE;EAC3C,QAAQ,IAAI,CAAC,cAAc,EAAE;EAC7B,UAAU,IAAI,cAAc,IAAI,aAAa,EAAE;EAC/C;EACA,YAAY,MAAM,IAAI,MAAM;EAC5B,WAAW,MAAM;EACjB,YAAY,kBAAkB,EAAE;EAChC;EACA;EACA;EACA,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;EAC3B,QAAQ,MAAM,IAAI,GAAG;EACrB,QAAQ,CAAC,EAAE;EACX,OAAO,MAAM;EACb;EACA,QAAQ,MAAM,GAAG,0BAA0B,CAAC,MAAM,EAAE,GAAG,CAAC;EACxD;EACA,MAAM,OAAO,IAAI;EACjB;EACA,IAAI,OAAO,KAAK;EAChB;;EAEA;EACA;EACA;EACA,EAAE,SAAS,UAAU,GAAG;EACxB,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;EACzB,MAAM,MAAM,IAAI,GAAG;EACnB,MAAM,CAAC,EAAE;EACT,MAAM,8BAA8B,EAAE;;EAEtC;EACA,MAAM,IAAI,aAAa,CAAC,GAAG,CAAC,EAAE;EAC9B,QAAQ,8BAA8B,EAAE;EACxC;EACA,MAAM,IAAI,OAAO,GAAG,IAAI;EACxB,MAAM,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;EACjD,QAAQ,IAAI,CAAC,OAAO,EAAE;EACtB,UAAU,MAAM,cAAc,GAAG,cAAc,CAAC,GAAG,CAAC;EACpD,UAAU,IAAI,CAAC,cAAc,EAAE;EAC/B;EACA,YAAY,MAAM,GAAG,0BAA0B,CAAC,MAAM,EAAE,GAAG,CAAC;EAC5D;EACA,SAAS,MAAM;EACf,UAAU,OAAO,GAAG,KAAK;EACzB;EACA,QAAQ,YAAY,EAAE;EACtB,QAAQ,MAAM,cAAc,GAAG,UAAU,EAAE;EAC3C,QAAQ,IAAI,CAAC,cAAc,EAAE;EAC7B;EACA,UAAU,MAAM,GAAG,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC;EACnD,UAAU;EACV;EACA;EACA,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;EAC3B,QAAQ,MAAM,IAAI,GAAG;EACrB,QAAQ,CAAC,EAAE;EACX,OAAO,MAAM;EACb;EACA,QAAQ,MAAM,GAAG,0BAA0B,CAAC,MAAM,EAAE,GAAG,CAAC;EACxD;EACA,MAAM,OAAO,IAAI;EACjB;EACA,IAAI,OAAO,KAAK;EAChB;;EAEA;EACA;EACA;EACA;EACA,EAAE,SAAS,yBAAyB,GAAG;EACvC;EACA,IAAI,IAAI,OAAO,GAAG,IAAI;EACtB,IAAI,IAAI,cAAc,GAAG,IAAI;EAC7B,IAAI,OAAO,cAAc,EAAE;EAC3B,MAAM,IAAI,CAAC,OAAO,EAAE;EACpB;EACA,QAAQ,MAAM,cAAc,GAAG,cAAc,CAAC,GAAG,CAAC;EAClD,QAAQ,IAAI,CAAC,cAAc,EAAE;EAC7B;EACA,UAAU,MAAM,GAAG,0BAA0B,CAAC,MAAM,EAAE,GAAG,CAAC;EAC1D;EACA,OAAO,MAAM;EACb,QAAQ,OAAO,GAAG,KAAK;EACvB;EACA,MAAM,cAAc,GAAG,UAAU,EAAE;EACnC;EACA,IAAI,IAAI,CAAC,cAAc,EAAE;EACzB;EACA,MAAM,MAAM,GAAG,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC;EAC/C;;EAEA;EACA,IAAI,MAAM,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC;EAC9B;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,SAAS,WAAW,GAAG;EACzB,IAAI,IAAI,eAAe,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,KAAK;EACnG,IAAI,IAAI,WAAW,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE;EAC5F,IAAI,IAAI,eAAe,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI;EAC1C,IAAI,IAAI,eAAe,EAAE;EACzB;EACA,MAAM,CAAC,EAAE;EACT,MAAM,eAAe,GAAG,IAAI;EAC5B;EACA,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;EAC1B;EACA;EACA;EACA;EACA,MAAM,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,aAAa,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,aAAa,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,iBAAiB,GAAG,iBAAiB;EAC7K,MAAM,MAAM,OAAO,GAAG,CAAC;EACvB,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM;EACnC,MAAM,IAAI,GAAG,GAAG,GAAG;EACnB,MAAM,CAAC,EAAE;EACT,MAAM,OAAO,IAAI,EAAE;EACnB,QAAQ,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE;EAC9B;;EAEA,UAAU,MAAM,KAAK,GAAG,sBAAsB,CAAC,CAAC,GAAG,CAAC,CAAC;EACrD,UAAU,IAAI,CAAC,eAAe,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE;EACnE;EACA;EACA;EACA,YAAY,CAAC,GAAG,OAAO;EACvB,YAAY,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC;EACjD,YAAY,OAAO,WAAW,CAAC,IAAI,CAAC;EACpC;;EAEA;EACA,UAAU,GAAG,GAAG,0BAA0B,CAAC,GAAG,EAAE,GAAG,CAAC;EACpD,UAAU,MAAM,IAAI,GAAG;EACvB,UAAU,OAAO,IAAI;EACrB;EACA,QAAQ,IAAI,CAAC,KAAK,WAAW,EAAE;EAC/B;EACA,UAAU,GAAG,GAAG,0BAA0B,CAAC,GAAG,EAAE,GAAG,CAAC;EACpD,UAAU,MAAM,IAAI,GAAG;EACvB,UAAU,OAAO,IAAI;EACrB;EACA,QAAQ,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;EACjC;EACA;EACA,UAAU,MAAM,MAAM,GAAG,CAAC;EAC1B,UAAU,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM;EACnC,UAAU,GAAG,IAAI,GAAG;EACpB,UAAU,CAAC,EAAE;EACb,UAAU,MAAM,IAAI,GAAG;EACvB,UAAU,8BAA8B,CAAC,KAAK,CAAC;EAC/C,UAAU,IAAI,eAAe,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;EACnH;EACA;EACA,YAAY,uBAAuB,EAAE;EACrC,YAAY,OAAO,IAAI;EACvB;EACA,UAAU,MAAM,SAAS,GAAG,sBAAsB,CAAC,MAAM,GAAG,CAAC,CAAC;EAC9D,UAAU,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;EACjD,UAAU,IAAI,QAAQ,KAAK,GAAG,EAAE;EAChC;EACA;EACA;EACA,YAAY,CAAC,GAAG,OAAO;EACvB,YAAY,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC;EACjD,YAAY,OAAO,WAAW,CAAC,KAAK,EAAE,SAAS,CAAC;EAChD;EACA,UAAU,IAAI,WAAW,CAAC,QAAQ,CAAC,EAAE;EACrC;EACA;EACA;EACA,YAAY,CAAC,GAAG,OAAO;EACvB,YAAY,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC;EACjD,YAAY,OAAO,WAAW,CAAC,IAAI,CAAC;EACpC;;EAEA;EACA,UAAU,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC;EAC/C,UAAU,CAAC,GAAG,MAAM,GAAG,CAAC;;EAExB;EACA,UAAU,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;EACvE,SAAS,MAAM,IAAI,eAAe,IAAI,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;EAC1E;EACA;;EAEA;EACA,UAAU,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;EAC7F,YAAY,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;EAClE,cAAc,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC;EAC5B,cAAc,CAAC,EAAE;EACjB;EACA;;EAEA;EACA,UAAU,GAAG,GAAG,0BAA0B,CAAC,GAAG,EAAE,GAAG,CAAC;EACpD,UAAU,MAAM,IAAI,GAAG;EACvB,UAAU,uBAAuB,EAAE;EACnC,UAAU,OAAO,IAAI;EACrB,SAAS,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;EACrC;EACA,UAAU,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;EACzC,UAAU,MAAM,UAAU,GAAG,gBAAgB,CAAC,IAAI,CAAC;EACnD,UAAU,IAAI,UAAU,KAAK,SAAS,EAAE;EACxC,YAAY,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;EACvC,YAAY,CAAC,IAAI,CAAC;EAClB,WAAW,MAAM,IAAI,IAAI,KAAK,GAAG,EAAE;EACnC,YAAY,IAAI,CAAC,GAAG,CAAC;EACrB,YAAY,OAAO,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;EAChD,cAAc,CAAC,EAAE;EACjB;EACA,YAAY,IAAI,CAAC,KAAK,CAAC,EAAE;EACzB,cAAc,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;EACzC,cAAc,CAAC,IAAI,CAAC;EACpB,aAAa,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE;EAC7C;EACA;EACA,cAAc,CAAC,GAAG,IAAI,CAAC,MAAM;EAC7B,aAAa,MAAM;EACnB,cAAc,4BAA4B,EAAE;EAC5C;EACA,WAAW,MAAM;EACjB;EACA,YAAY,GAAG,IAAI,IAAI;EACvB,YAAY,CAAC,IAAI,CAAC;EAClB;EACA,SAAS,MAAM;EACf;EACA,UAAU,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;EACrC,UAAU,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE;EACpD;EACA,YAAY,GAAG,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;EAC9B,YAAY,CAAC,EAAE;EACf,WAAW,MAAM,IAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE;EAC/C;EACA,YAAY,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC;EAC1C,YAAY,CAAC,EAAE;EACf,WAAW,MAAM;EACjB,YAAY,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE;EAC/C,cAAc,qBAAqB,CAAC,IAAI,CAAC;EACzC;EACA,YAAY,GAAG,IAAI,IAAI;EACvB,YAAY,CAAC,EAAE;EACf;EACA;EACA,QAAQ,IAAI,eAAe,EAAE;EAC7B;EACA,UAAU,mBAAmB,EAAE;EAC/B;EACA;EACA;EACA,IAAI,OAAO,KAAK;EAChB;;EAEA;EACA;EACA;EACA,EAAE,SAAS,uBAAuB,GAAG;EACrC,IAAI,IAAI,SAAS,GAAG,KAAK;EACzB,IAAI,8BAA8B,EAAE;EACpC,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;EAC5B,MAAM,SAAS,GAAG,IAAI;EACtB,MAAM,CAAC,EAAE;EACT,MAAM,8BAA8B,EAAE;;EAEtC;EACA,MAAM,MAAM,GAAG,mBAAmB,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC;EACrD,MAAM,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM;EACjC,MAAM,MAAM,SAAS,GAAG,WAAW,EAAE;EACrC,MAAM,IAAI,SAAS,EAAE;EACrB;EACA,QAAQ,MAAM,GAAG,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;EAChD,OAAO,MAAM;EACb;EACA,QAAQ,MAAM,GAAG,0BAA0B,CAAC,MAAM,EAAE,GAAG,CAAC;EACxD;EACA;EACA,IAAI,OAAO,SAAS;EACpB;;EAEA;EACA;EACA;EACA,EAAE,SAAS,WAAW,GAAG;EACzB,IAAI,MAAM,KAAK,GAAG,CAAC;EACnB,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;EACzB,MAAM,CAAC,EAAE;EACT,MAAM,IAAI,aAAa,EAAE,EAAE;EAC3B,QAAQ,mCAAmC,CAAC,KAAK,CAAC;EAClD,QAAQ,OAAO,IAAI;EACnB;EACA,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;EAC7B,QAAQ,CAAC,GAAG,KAAK;EACjB,QAAQ,OAAO,KAAK;EACpB;EACA;;EAEA;EACA;EACA;EACA;EACA,IAAI,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;EAC7B,MAAM,CAAC,EAAE;EACT;EACA,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;EACzB,MAAM,CAAC,EAAE;EACT,MAAM,IAAI,aAAa,EAAE,EAAE;EAC3B,QAAQ,mCAAmC,CAAC,KAAK,CAAC;EAClD,QAAQ,OAAO,IAAI;EACnB;EACA,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;EAC7B,QAAQ,CAAC,GAAG,KAAK;EACjB,QAAQ,OAAO,KAAK;EACpB;EACA,MAAM,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;EAC/B,QAAQ,CAAC,EAAE;EACX;EACA;EACA,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;EAC5C,MAAM,CAAC,EAAE;EACT,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;EAC9C,QAAQ,CAAC,EAAE;EACX;EACA,MAAM,IAAI,aAAa,EAAE,EAAE;EAC3B,QAAQ,mCAAmC,CAAC,KAAK,CAAC;EAClD,QAAQ,OAAO,IAAI;EACnB;EACA,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;EAC7B,QAAQ,CAAC,GAAG,KAAK;EACjB,QAAQ,OAAO,KAAK;EACpB;EACA,MAAM,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;EAC/B,QAAQ,CAAC,EAAE;EACX;EACA;;EAEA;EACA,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;EAC1B,MAAM,CAAC,GAAG,KAAK;EACf,MAAM,OAAO,KAAK;EAClB;EACA,IAAI,IAAI,CAAC,GAAG,KAAK,EAAE;EACnB;EACA,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;EACtC,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;EACpD,MAAM,MAAM,IAAI,qBAAqB,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG;EACxD,MAAM,OAAO,IAAI;EACjB;EACA,IAAI,OAAO,KAAK;EAChB;;EAEA;EACA;EACA;EACA;EACA,EAAE,SAAS,aAAa,GAAG;EAC3B,IAAI,OAAO,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC;EACzG;EACA,IAAI,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC;EAClG;EACA,EAAE,SAAS,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE;EACrC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;EACjD,MAAM,MAAM,IAAI,KAAK;EACrB,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM;EACtB,MAAM,OAAO,IAAI;EACjB;EACA,IAAI,OAAO,KAAK;EAChB;;EAEA;EACA;EACA;EACA;EACA;EACA,EAAE,SAAS,mBAAmB,CAAC,KAAK,EAAE;EACtC;EACA;EACA,IAAI,MAAM,KAAK,GAAG,CAAC;EACnB,IAAI,IAAI,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;EAC1C,MAAM,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;EAC7D,QAAQ,CAAC,EAAE;EACX;EACA,MAAM,IAAI,CAAC,GAAG,CAAC;EACf,MAAM,OAAO,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE;EACpC,QAAQ,CAAC,EAAE;EACX;EACA,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;EAC3B;EACA;EACA,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;EACjB,QAAQ,UAAU,EAAE;EACpB,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;EAC7B;EACA,UAAU,CAAC,EAAE;EACb,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;EAC/B;EACA,YAAY,CAAC,EAAE;EACf;EACA;EACA,QAAQ,OAAO,IAAI;EACnB;EACA;EACA,IAAI,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE;EACvH,MAAM,CAAC,EAAE;EACT;;EAEA;EACA,IAAI,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;EACjF,MAAM,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;EAC5D,QAAQ,CAAC,EAAE;EACX;EACA;EACA,IAAI,IAAI,CAAC,GAAG,KAAK,EAAE;EACnB;EACA;;EAEA;EACA,MAAM,OAAO,YAAY,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;EACjD,QAAQ,CAAC,EAAE;EACX;EACA,MAAM,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;EACzC,MAAM,MAAM,IAAI,MAAM,KAAK,WAAW,GAAG,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;EACxE,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;EAC3B;EACA,QAAQ,CAAC,EAAE;EACX;EACA,MAAM,OAAO,IAAI;EACjB;EACA;EACA,EAAE,SAAS,UAAU,GAAG;EACxB,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;EACzB,MAAM,MAAM,KAAK,GAAG,CAAC;EACrB,MAAM,CAAC,EAAE;EACT,MAAM,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,EAAE;EAC3E,QAAQ,CAAC,EAAE;EACX;EACA,MAAM,CAAC,EAAE;EACT,MAAM,MAAM,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;EAC/C,MAAM,OAAO,IAAI;EACjB;EACA;EACA,EAAE,SAAS,sBAAsB,CAAC,KAAK,EAAE;EACzC,IAAI,IAAI,IAAI,GAAG,KAAK;EACpB,IAAI,OAAO,IAAI,GAAG,CAAC,IAAI,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE;EACjD,MAAM,IAAI,EAAE;EACZ;EACA,IAAI,OAAO,IAAI;EACf;EACA,EAAE,SAAS,aAAa,GAAG;EAC3B,IAAI,OAAO,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC;EAC5E;EACA,EAAE,SAAS,mCAAmC,CAAC,KAAK,EAAE;EACtD;EACA;EACA;EACA,IAAI,MAAM,IAAI,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;EACxC;EACA,EAAE,SAAS,qBAAqB,CAAC,IAAI,EAAE;EACvC,IAAI,MAAM,IAAI,eAAe,CAAC,CAAC,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;EAC7E;EACA,EAAE,SAAS,wBAAwB,GAAG;EACtC,IAAI,MAAM,IAAI,eAAe,CAAC,CAAC,qBAAqB,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;EACnF;EACA,EAAE,SAAS,kBAAkB,GAAG;EAChC,IAAI,MAAM,IAAI,eAAe,CAAC,+BAA+B,EAAE,IAAI,CAAC,MAAM,CAAC;EAC3E;EACA,EAAE,SAAS,sBAAsB,GAAG;EACpC,IAAI,MAAM,IAAI,eAAe,CAAC,qBAAqB,EAAE,CAAC,CAAC;EACvD;EACA,EAAE,SAAS,kBAAkB,GAAG;EAChC,IAAI,MAAM,IAAI,eAAe,CAAC,gBAAgB,EAAE,CAAC,CAAC;EAClD;EACA,EAAE,SAAS,4BAA4B,GAAG;EAC1C,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;EACtC,IAAI,MAAM,IAAI,eAAe,CAAC,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;EACxE;EACA;EACA,SAAS,mBAAmB,CAAC,IAAI,EAAE,CAAC,EAAE;EACtC,EAAE,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG;EAC/C;;;;;;;;;"}

@@ -1,1 +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 y extends Error{constructor(t,n){super("".concat(t," at position ").concat(n)),this.position=n}}let e=32,r=10,i=9,f=13,a=160,h=8192,$=8202,O=8239,N=8287,J=12288;function S(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 C(t){return"a"<=t&&t<="z"||"A"<=t&&t<="Z"||"_"===t||"$"===t||"0"<=t&&t<="9"}let m=/^(http|https|ftp|mailto|file|data|irc):\/\/$/,z=/^[A-Za-z0-9-._~:/?#@!$&'()*+;=]$/;function E(t){return",[]/{}\n+".includes(t)}function I(t){return _(t)||n.test(t)}let n=/^[[{\w-]$/;function T(t,n){t=t.charCodeAt(n);return t===e||t===r||t===i||t===f}function Z(t,n){t=t.charCodeAt(n);return t===e||t===i||t===f}function _(t){return F(t)||U(t)}function F(t){return'"'===t||"“"===t||"”"===t}function R(t){return'"'===t}function U(t){return"'"===t||"‘"===t||"’"===t||"`"===t||"´"===t}function q(t){return"'"===t}function B(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 D(t,n){let e=t.length;if(!T(t,e-1))return t+n;for(;T(t,e-1);)e--;return t.substring(0,e)+n+t.substring(e)}let G={"\b":"\\b","\f":"\\f","\n":"\\n","\r":"\\r","\t":"\\t"},H={'"':'"',"\\":"\\","/":"/",b:"\b",f:"\f",n:"\n",r:"\r",t:"\t"};t.JSONRepairError=y,t.jsonrepair=function(g){let d=0,b="";if(n(),!f())throw new y("Unexpected end of json string",g.length);n();var t=u(",");if(t&&v(),I(g[d])&&/[,\n][ \t\r]*$/.test(b)){t||(b=D(b,","));{let t=!0,n=!0;for(;n;)t?t=!1:u(",")||(b=D(b,",")),n=f();n||(b=B(b,",")),b="[\n".concat(b,"\n]")}}else t&&(b=B(b,","));for(;"}"===g[d]||"]"===g[d];)d++,v();if(d>=g.length)return b;throw new y("Unexpected character ".concat(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,n=!1):((t=u(","))||(b=D(b,",")),v()),o(),!(w()||l(!0))){"}"===g[d]||"{"===g[d]||"]"===g[d]||"["===g[d]||void 0===g[d]?b=B(b,","):(()=>{throw new y("Object key expected",d)})();break}v();var e=u(":"),r=d>=g.length,i=(e||(I(g[d])||r?b=D(b,":"):s()),f());i||(e||r?b+="null":s())}return"}"===g[d]?(b+="}",d++):b=D(b,"}"),!0}})()||(()=>{if("["!==g[d])return!1;{b+="[",d++,v(),p(",")&&v();let t=!0;for(;d<g.length&&"]"!==g[d];){t?t=!1:u(",")||(b=D(b,",")),o();var n=f();if(!n){b=B(b,",");break}}return"]"===g[d]?(b+="]",d++):b=D(b,"]"),!0}})()||w()||(()=>{var t,n,e=d;if("-"===g[d]){if(d++,i())return c(e),!0;if(!S(g[d]))return d=e,!1}for(;S(g[d]);)d++;if("."===g[d]){if(d++,i())return c(e),!0;if(!S(g[d]))return d=e,!1;for(;S(g[d]);)d++}if("e"===g[d]||"E"===g[d]){if(d++,"-"!==g[d]&&"+"!==g[d]||d++,i())return c(e),!0;if(!S(g[d]))return d=e,!1;for(;S(g[d]);)d++}if(i()){if(d>e)return t=g.slice(e,d),n=/^0\d/.test(t),b+=n?'"'.concat(t,'"'):t,!0}else d=e;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+='"'.concat(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?T:Z;let i="";for(;;){if(r(g,d))i+=g[d];else{if(n=g,e=d,!((n=n.charCodeAt(e))===a||n>=h&&n<=$||n===O||n===N||n===J))break;i+=" "}d++}return 0<i.length&&(b+=i,!0)}function n(){if("```"===g.slice(d,d+3)){if(d+=3,k(g[d]))for(;d<g.length&&C(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),_(g[d])){var f=R(g[d])?R:q(g[d])?q:U(g[d])?U:F,u=d,o=b.length;let n='"';for(d++;;){if(d>=g.length)return l=x(d-1),!e&&j(g.charAt(l))?(d=u,b=b.substring(0,o),w(!0)):(n=D(n,'"'),b+=n,!0);if(d===r)return n=D(n,'"'),b+=n,!0;if(f(g[d])){var l=d,c=n.length;if(n+='"',d++,b+=n,v(!1),e||d>=g.length||j(g[d])||_(g[d])||S(g[d]))return A(),!0;var s=x(l-1),a=g.charAt(s);if(","===a)return d=u,b=b.substring(0,o),w(!1,s);if(j(a))return d=u,b=b.substring(0,o),w(!0);b=b.substring(0,o),d=l+1,n="".concat(n.substring(0,c),"\\").concat(n.substring(c))}else{if(e&&E(g[d])){if(":"===g[d-1]&&m.test(g.substring(u+1,d+2)))for(;d<g.length&&z.test(g[d]);)n+=g[d],d++;return n=D(n,'"'),b+=n,A(),!0}if("\\"===g[d]){s=g.charAt(d+1);if(void 0!==H[s])n+=g.slice(d,d+2),d+=2;else if("u"===s){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 y('Invalid unicode character "'.concat(a,'"'),d);d=g.length}}else n+=s,d+=2}else{var h,c=g.charAt(d);if('"'===c&&"\\"!==g[d-1])n+="\\".concat(c);else if("\n"===(h=c)||"\r"===h||"\t"===h||"\b"===h||"\f"===h)n+=G[c];else{if(!(" "<=c))throw h=void 0,h=c,new y("Invalid character ".concat(JSON.stringify(h)),d);n+=c}d++}}i&&p("\\")}}return!1}function A(){let t=!1;for(v();"+"===g[d];){t=!0,d++,v();var n=(b=B(b,'"',!0)).length,e=w();b=e?(e=b,n=n,r=1,e.substring(0,n)+e.substring(n+r)):D(b,'"')}var r;t}function e(t,n){return g.slice(d,d+t.length)===t&&(b+=n,d+=t.length,!0)}function l(t){var n=d;if(k(g[d])){for(;d<g.length&&C(g[d]);)d++;let t=d;for(;T(g,t);)t++;if("("===g[t])return d=t+1,f(),")"===g[d]&&(d++,";"===g[d])&&d++,!0}for(;d<g.length&&!E(g[d])&&!_(g[d])&&(!t||":"!==g[d]);)d++;if(":"===g[d-1]&&m.test(g.substring(n,d+2)))for(;d<g.length&&z.test(g[d]);)d++;if(d>n){for(;T(g,d-1)&&0<d;)d--;n=g.slice(n,d);return b+="undefined"===n?"null":JSON.stringify(n),'"'===g[d]&&d++,!0}}function x(t){let n=t;for(;0<n&&T(g,n);)n--;return n}function i(){return d>=g.length||j(g[d])||T(g,d)}function c(t){b+="".concat(g.slice(t,d),"0")}function s(){throw new y("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 x extends Error{constructor(t,n){super(t+" at position "+n),this.position=n}}let r=32,e=10,i=9,f=13,a=160,h=8192,y=8202,O=8239,N=8287,J=12288;function S(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 C(t){return"a"<=t&&t<="z"||"A"<=t&&t<="Z"||"_"===t||"$"===t||"0"<=t&&t<="9"}let m=/^(http|https|ftp|mailto|file|data|irc):\/\/$/,z=/^[A-Za-z0-9-._~:/?#@!$&'()*+;=]$/;function E(t){return",[]/{}\n+".includes(t)}function I(t){return _(t)||n.test(t)}let n=/^[[{\w-]$/;function T(t,n){t=t.charCodeAt(n);return t===r||t===e||t===i||t===f}function Z(t,n){t=t.charCodeAt(n);return t===r||t===i||t===f}function _(t){return F(t)||U(t)}function F(t){return'"'===t||"“"===t||"”"===t}function R(t){return'"'===t}function U(t){return"'"===t||"‘"===t||"’"===t||"`"===t||"´"===t}function q(t){return"'"===t}function B(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 D(t,n){let r=t.length;if(!T(t,r-1))return t+n;for(;T(t,r-1);)r--;return t.substring(0,r)+n+t.substring(r)}let G={"\b":"\\b","\f":"\\f","\n":"\\n","\r":"\\r","\t":"\\t"},H={'"':'"',"\\":"\\","/":"/",b:"\b",f:"\f",n:"\n",r:"\r",t:"\t"};t.JSONRepairError=x,t.jsonrepair=function(g){let d=0,v="";if(n(["```","[```","{```"]),!f())throw new x("Unexpected end of json string",g.length);n(["```","```]","```}"]);var t=u(",");if(t&&b(),I(g[d])&&/[,\n][ \t\r]*$/.test(v)){t||(v=D(v,","));{let t=!0,n=!0;for(;n;)t?t=!1:u(",")||(v=D(v,",")),n=f();v=`[
${v=n?v:B(v,",")}
]`}}else t&&(v=B(v,","));for(;"}"===g[d]||"]"===g[d];)d++,b();if(d>=g.length)return v;throw new x("Unexpected character "+JSON.stringify(g[d]),d);function f(){b();var t=(()=>{if("{"!==g[d])return!1;{v+="{",d++,b(),p(",")&&b();let n=!0;for(;d<g.length&&"}"!==g[d];){let t;if(n?(t=!0,n=!1):((t=u(","))||(v=D(v,",")),b()),o(),!(w()||l(!0))){"}"===g[d]||"{"===g[d]||"]"===g[d]||"["===g[d]||void 0===g[d]?v=B(v,","):(()=>{throw new x("Object key expected",d)})();break}b();var r=u(":"),e=d>=g.length,i=(r||(I(g[d])||e?v=D(v,":"):c()),f());i||(r||e?v+="null":c())}return"}"===g[d]?(v+="}",d++):v=D(v,"}"),!0}})()||(()=>{if("["!==g[d])return!1;{v+="[",d++,b(),p(",")&&b();let t=!0;for(;d<g.length&&"]"!==g[d];){t?t=!1:u(",")||(v=D(v,",")),o();var n=f();if(!n){v=B(v,",");break}}return"]"===g[d]?(v+="]",d++):v=D(v,"]"),!0}})()||w()||(()=>{var t,n,r=d;if("-"===g[d]){if(d++,i())return s(r),!0;if(!S(g[d]))return d=r,!1}for(;S(g[d]);)d++;if("."===g[d]){if(d++,i())return s(r),!0;if(!S(g[d]))return d=r,!1;for(;S(g[d]);)d++}if("e"===g[d]||"E"===g[d]){if(d++,"-"!==g[d]&&"+"!==g[d]||d++,i())return s(r),!0;if(!S(g[d]))return d=r,!1;for(;S(g[d]);)d++}if(i()){if(d>r)return t=g.slice(r,d),n=/^0\d/.test(t),v+=n?`"${t}"`:t,!0}else d=r;return!1})()||r("true","true")||r("false","false")||r("null","null")||r("True","true")||r("False","false")||r("None","null")||l(!1)||(()=>{if("/"===g[d]){var t=d;for(d++;d<g.length&&("/"!==g[d]||"\\"===g[d-1]);)d++;return d++,v+=`"${g.substring(t,d)}"`,!0}})();return b(),t}function b(t){var n=!(0<arguments.length&&void 0!==t)||t;d;let r=e(n);for(;r=(r=(()=>{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})())&&e(n););d}function e(t){var n,r,e=t?T:Z;let i="";for(;;){if(e(g,d))i+=g[d];else{if(n=g,r=d,!((n=n.charCodeAt(r))===a||n>=h&&n<=y||n===O||n===N||n===J))break;i+=" "}d++}return 0<i.length&&(v+=i,!0)}function n(t){if((t=>{for(var n of t){var r=d+n.length;if(g.slice(d,r)===n)return d=r,1}})(t)){if(k(g[d]))for(;d<g.length&&C(g[d]);)d++;b()}}function u(t){return g[d]===t&&(v+=g[d],d++,!0)}function p(t){return g[d]===t&&(d++,!0)}function o(){b(),"."===g[d]&&"."===g[d+1]&&"."===g[d+2]&&(d+=3,b(),p(","))}function w(t,n){var r=0<arguments.length&&void 0!==t&&t,e=1<arguments.length&&void 0!==n?n:-1;let i="\\"===g[d];if(i&&(d++,i=!0),_(g[d])){var f=R(g[d])?R:q(g[d])?q:U(g[d])?U:F,u=d,o=v.length;let n='"';for(d++;;){if(d>=g.length)return l=A(d-1),!r&&j(g.charAt(l))?(d=u,v=v.substring(0,o),w(!0)):(n=D(n,'"'),v+=n,!0);if(d===e)return n=D(n,'"'),v+=n,!0;if(f(g[d])){var l=d,s=n.length;if(n+='"',d++,v+=n,b(!1),r||d>=g.length||j(g[d])||_(g[d])||S(g[d]))return $(),!0;var c=A(l-1),a=g.charAt(c);if(","===a)return d=u,v=v.substring(0,o),w(!1,c);if(j(a))return d=u,v=v.substring(0,o),w(!0);v=v.substring(0,o),d=l+1,n=n.substring(0,s)+"\\"+n.substring(s)}else{if(r&&E(g[d])){if(":"===g[d-1]&&m.test(g.substring(u+1,d+2)))for(;d<g.length&&z.test(g[d]);)n+=g[d],d++;return n=D(n,'"'),v+=n,$(),!0}if("\\"===g[d]){c=g.charAt(d+1);if(void 0!==H[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+=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+=G[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 $(){let t=!1;for(b();"+"===g[d];){t=!0,d++,b();var n=(v=B(v,'"',!0)).length,r=w();v=r?(r=v,n=n,e=1,r.substring(0,n)+r.substring(n+e)):D(v,'"')}var e;t}function r(t,n){return g.slice(d,d+t.length)===t&&(v+=n,d+=t.length,!0)}function l(t){var n=d;if(k(g[d])){for(;d<g.length&&C(g[d]);)d++;let t=d;for(;T(g,t);)t++;if("("===g[t])return d=t+1,f(),")"===g[d]&&(d++,";"===g[d])&&d++,!0}for(;d<g.length&&!E(g[d])&&!_(g[d])&&(!t||":"!==g[d]);)d++;if(":"===g[d-1]&&m.test(g.substring(n,d+2)))for(;d<g.length&&z.test(g[d]);)d++;if(d>n){for(;T(g,d-1)&&0<d;)d--;n=g.slice(n,d);return v+="undefined"===n?"null":JSON.stringify(n),'"'===g[d]&&d++,!0}}function A(t){let n=t;for(;0<n&&T(g,n);)n--;return n}function i(){return d>=g.length||j(g[d])||T(g,d)}function s(t){v+=g.slice(t,d)+"0"}function c(){throw new x("Colon expected",d)}}});

@@ -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","concat","codeSpace","codeNewline","codeTab","codeReturn","codeNonBreakingSpace","codeEnQuad","codeHairSpace","codeNarrowNoBreakSpace","codeMediumMathematicalSpace","codeIdeographicSpace","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","controlCharacters","\b","\f","\n","\r","\t","escapeCharacters","\"","\\","/","b","f","n","r","t","jsonrepair","i","output","parseMarkdownCodeBlock","parseValue","processedComma","parseCharacter","parseWhitespaceAndSkipComments","parseNewlineDelimitedJSON","initial","processedValue","JSON","stringify","processed","skipCharacter","skipEllipsis","parseString","parseUnquotedString","processedColon","truncatedText","throwColonExpected","num","hasInvalidLeadingZero","start","atEndOfNumber","repairNumberEndingWithNumericSymbol","slice","parseKeyword","skipNewline","changed","parseWhitespace","_isWhiteSpace","whitespace","stopAtDelimiter","stopAtIndex","skipEscapeChars","isEndQuote","iBefore","oBefore","str","iPrev","prevNonWhitespaceIndex","charAt","iQuote","oQuote","parseConcatenatedString","iPrevChar","prevChar","j","chars","parsedStr","count","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","codeEnQuad","codeHairSpace","codeNarrowNoBreakSpace","codeMediumMathematicalSpace","codeIdeographicSpace","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","controlCharacters","\b","\f","\n","\r","\t","escapeCharacters","\"","\\","/","b","f","n","r","t","jsonrepair","i","output","parseMarkdownCodeBlock","parseValue","processedComma","parseCharacter","parseWhitespaceAndSkipComments","parseNewlineDelimitedJSON","initial","processedValue","JSON","stringify","processed","skipCharacter","skipEllipsis","parseString","parseUnquotedString","processedColon","truncatedText","throwColonExpected","num","hasInvalidLeadingZero","start","atEndOfNumber","repairNumberEndingWithNumericSymbol","slice","parseKeyword","skipNewline","changed","parseWhitespace","_isWhiteSpace","whitespace","blocks","block","end","stopAtDelimiter","stopAtIndex","skipEscapeChars","isEndQuote","iBefore","oBefore","str","iPrev","prevNonWhitespaceIndex","charAt","iQuote","oQuote","parseConcatenatedString","iPrevChar","prevChar","j","chars","parsedStr","count","name","value","isKey","symbol","prev"],"mappings":"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"}
{
"name": "jsonrepair",
"version": "3.12.0",
"version": "3.13.0",
"description": "Repair broken JSON documents",

@@ -70,11 +70,11 @@ "repository": {

"devDependencies": {
"@babel/cli": "7.26.4",
"@babel/core": "7.26.7",
"@babel/plugin-transform-typescript": "7.26.7",
"@babel/preset-env": "7.26.7",
"@babel/preset-typescript": "7.26.0",
"@biomejs/biome": "1.9.4",
"@commitlint/cli": "19.6.1",
"@commitlint/config-conventional": "19.6.0",
"@types/node": "22.12.0",
"@babel/cli": "7.27.2",
"@babel/core": "7.27.7",
"@babel/plugin-transform-typescript": "7.27.1",
"@babel/preset-env": "7.27.2",
"@babel/preset-typescript": "7.27.1",
"@biomejs/biome": "2.0.6",
"@commitlint/cli": "19.8.1",
"@commitlint/config-conventional": "19.8.1",
"@types/node": "24.0.8",
"cpy-cli": "5.0.0",

@@ -84,10 +84,10 @@ "del-cli": "6.0.0",

"npm-run-all": "4.1.5",
"rollup": "4.32.1",
"rollup": "4.44.1",
"standard-version": "9.5.0",
"tinybench": "3.1.1",
"tinybench": "4.0.1",
"ts-node": "10.9.2",
"typescript": "5.7.3",
"typescript": "5.8.3",
"uglify-js": "3.19.3",
"vitest": "3.0.4"
"vitest": "3.2.4"
}
}

@@ -24,2 +24,3 @@ # jsonrepair

- Strip comments like `/* ... */` and `// ...`
- Strip fenced code blocks like `` ```json`` and `` ``` ``
- Strip ellipsis in arrays and objects like `[1, 2, 3, ...]`

@@ -26,0 +27,0 @@ - Strip JSONP notation like `callback({ ... })`