jsonrepair
Advanced tools
+1
-1
@@ -134,3 +134,3 @@ #!/usr/bin/env node | ||
| const num = Number.parseInt(match[1]) | ||
| const num = Number.parseInt(match[1], 10) | ||
| const suffix = match[2] // K, M, or G | ||
@@ -137,0 +137,0 @@ |
@@ -161,2 +161,3 @@ "use strict"; | ||
| function skipMarkdownCodeBlock(blocks) { | ||
| parseWhitespace(true); | ||
| for (const block of blocks) { | ||
@@ -163,0 +164,0 @@ const end = i + block.length; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"jsonrepair.js","names":["_JSONRepairError","require","_stringUtils","controlCharacters","escapeCharacters","b","f","n","r","t","jsonrepair","text","i","output","parseMarkdownCodeBlock","processed","parseValue","throwUnexpectedEnd","processedComma","parseCharacter","parseWhitespaceAndSkipComments","isStartOfValue","endsWithCommaOrNewline","insertBeforeLastWhitespace","parseNewlineDelimitedJSON","stripLastOccurrence","length","throwUnexpectedCharacter","parseObject","parseArray","parseString","parseNumber","parseKeywords","parseUnquotedString","parseRegex","skipNewline","arguments","undefined","start","changed","parseWhitespace","parseComment","_isWhiteSpace","isWhitespace","isWhitespaceExceptNewline","whitespace","isSpecialWhitespace","atEndOfBlockComment","blocks","skipMarkdownCodeBlock","isFunctionNameCharStart","isFunctionNameChar","block","end","slice","char","skipCharacter","skipEscapeCharacter","skipEllipsis","initial","processedKey","throwObjectKeyExpected","processedColon","truncatedText","throwColonExpected","processedValue","stopAtDelimiter","stopAtIndex","skipEscapeChars","isQuote","isEndQuote","isDoubleQuote","isSingleQuote","isSingleQuoteLike","isDoubleQuoteLike","iBefore","oBefore","str","iPrev","prevNonWhitespaceIndex","isDelimiter","charAt","substring","iQuote","oQuote","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":"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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 parseWhitespace(true)\n\n for (const block of blocks) {\n const end = i + block.length\n if (text.slice(i, end) === block) {\n i = end\n return true\n }\n }\n\n return false\n }\n\n function parseCharacter(char: string): boolean {\n if (text[i] === char) {\n output += text[i]\n i++\n return true\n }\n\n return false\n }\n\n function skipCharacter(char: string): boolean {\n if (text[i] === char) {\n i++\n return true\n }\n\n return false\n }\n\n function skipEscapeCharacter(): boolean {\n return skipCharacter('\\\\')\n }\n\n /**\n * Skip ellipsis like \"[1,2,3,...]\" or \"[1,2,3,...,9]\" or \"[...,7,8,9]\"\n * or a similar construct in objects.\n */\n function skipEllipsis(): boolean {\n parseWhitespaceAndSkipComments()\n\n if (text[i] === '.' && text[i + 1] === '.' && text[i + 2] === '.') {\n // repair: remove the ellipsis (three dots) and optionally a comma\n i += 3\n parseWhitespaceAndSkipComments()\n skipCharacter(',')\n\n return true\n }\n\n return false\n }\n\n /**\n * Parse an object like '{\"key\": \"value\"}'\n */\n function parseObject(): boolean {\n if (text[i] === '{') {\n output += '{'\n i++\n parseWhitespaceAndSkipComments()\n\n // repair: skip leading comma like in {, message: \"hi\"}\n if (skipCharacter(',')) {\n parseWhitespaceAndSkipComments()\n }\n\n let initial = true\n while (i < text.length && text[i] !== '}') {\n let processedComma: boolean\n if (!initial) {\n processedComma = parseCharacter(',')\n if (!processedComma) {\n // repair missing comma\n output = insertBeforeLastWhitespace(output, ',')\n }\n parseWhitespaceAndSkipComments()\n } else {\n processedComma = true\n 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":[]} |
@@ -155,2 +155,3 @@ import { JSONRepairError } from '../utils/JSONRepairError.js'; | ||
| function skipMarkdownCodeBlock(blocks) { | ||
| parseWhitespace(true); | ||
| for (const block of blocks) { | ||
@@ -157,0 +158,0 @@ const end = i + block.length; |
@@ -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","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":[]} | ||
| {"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 parseWhitespace(true)\n\n for (const block of blocks) {\n const end = i + block.length\n if (text.slice(i, end) === block) {\n i = end\n return true\n }\n }\n\n return false\n }\n\n function parseCharacter(char: string): boolean {\n if (text[i] === char) {\n output += text[i]\n i++\n return true\n }\n\n return false\n }\n\n function skipCharacter(char: string): boolean {\n if (text[i] === char) {\n i++\n return true\n }\n\n return false\n }\n\n function skipEscapeCharacter(): boolean {\n return skipCharacter('\\\\')\n }\n\n /**\n * Skip ellipsis like \"[1,2,3,...]\" or \"[1,2,3,...,9]\" or \"[...,7,8,9]\"\n * or a similar construct in objects.\n */\n function skipEllipsis(): boolean {\n parseWhitespaceAndSkipComments()\n\n if (text[i] === '.' && text[i + 1] === '.' && text[i + 2] === '.') {\n // repair: remove the ellipsis (three dots) and optionally a comma\n i += 3\n parseWhitespaceAndSkipComments()\n skipCharacter(',')\n\n return true\n }\n\n return false\n }\n\n /**\n * Parse an object like '{\"key\": \"value\"}'\n */\n function parseObject(): boolean {\n if (text[i] === '{') {\n output += '{'\n i++\n parseWhitespaceAndSkipComments()\n\n // repair: skip leading comma like in {, message: \"hi\"}\n if (skipCharacter(',')) {\n parseWhitespaceAndSkipComments()\n }\n\n let initial = true\n while (i < text.length && text[i] !== '}') {\n let processedComma: boolean\n if (!initial) {\n processedComma = parseCharacter(',')\n if (!processedComma) {\n // repair missing comma\n output = insertBeforeLastWhitespace(output, ',')\n }\n parseWhitespaceAndSkipComments()\n } else {\n processedComma = true\n 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":"jsonrepair.d.ts","sourceRoot":"","sources":["../../../src/regular/jsonrepair.ts"],"names":[],"mappings":"AAgDA;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAm0B/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,CAq0B/C"} |
@@ -313,2 +313,3 @@ (function (global, factory) { | ||
| function skipMarkdownCodeBlock(blocks) { | ||
| parseWhitespace(true); | ||
| for (const block of blocks) { | ||
@@ -315,0 +316,0 @@ const end = i + block.length; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"jsonrepair.js","sources":["../esm/utils/JSONRepairError.js","../esm/utils/stringUtils.js","../esm/regular/jsonrepair.js"],"sourcesContent":["export class JSONRepairError extends Error {\n constructor(message, position) {\n super(`${message} at position ${position}`);\n this.position = position;\n }\n}\n//# sourceMappingURL=JSONRepairError.js.map","const codeSpace = 0x20; // \" \"\nconst codeNewline = 0xa; // \"\\n\"\nconst codeTab = 0x9; // \"\\t\"\nconst codeReturn = 0xd; // \"\\r\"\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":"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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 parseWhitespace(true);\n for (const block of blocks) {\n const end = i + block.length;\n if (text.slice(i, end) === block) {\n i = end;\n return true;\n }\n }\n return false;\n }\n function parseCharacter(char) {\n if (text[i] === char) {\n output += text[i];\n i++;\n return true;\n }\n return false;\n }\n function skipCharacter(char) {\n if (text[i] === char) {\n i++;\n return true;\n }\n return false;\n }\n function skipEscapeCharacter() {\n return skipCharacter('\\\\');\n }\n\n /**\n * Skip ellipsis like \"[1,2,3,...]\" or \"[1,2,3,...,9]\" or \"[...,7,8,9]\"\n * or a similar construct in objects.\n */\n function skipEllipsis() {\n parseWhitespaceAndSkipComments();\n if (text[i] === '.' && text[i + 1] === '.' && text[i + 2] === '.') {\n // repair: remove the ellipsis (three dots) and optionally a comma\n i += 3;\n parseWhitespaceAndSkipComments();\n skipCharacter(',');\n return true;\n }\n return false;\n }\n\n /**\n * Parse an object like '{\"key\": \"value\"}'\n */\n function parseObject() {\n if (text[i] === '{') {\n output += '{';\n i++;\n parseWhitespaceAndSkipComments();\n\n // repair: skip leading comma like in {, message: \"hi\"}\n if (skipCharacter(',')) {\n parseWhitespaceAndSkipComments();\n }\n let initial = true;\n while (i < text.length && text[i] !== '}') {\n let processedComma;\n if (!initial) {\n processedComma = parseCharacter(',');\n if (!processedComma) {\n // repair missing comma\n output = insertBeforeLastWhitespace(output, ',');\n }\n parseWhitespaceAndSkipComments();\n } else {\n processedComma = true;\n 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":"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"} |
| ((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)}}}); | ||
| ]`}}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=>{e(!0);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","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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"} | ||
| {"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":"CAAA,CAAWA,EAAQC,KACE,UAAnB,OAAOC,SAA0C,aAAlB,OAAOC,OAAyBF,EAAQC,OAAO,EAC5D,YAAlB,OAAOE,QAAyBA,OAAOC,IAAMD,OAAO,CAAC,WAAYH,CAAO,EACGA,GAA1ED,EAA+B,aAAtB,OAAOM,WAA6BA,WAAaN,GAAUO,MAAqBC,WAAa,EAAE,CAC1G,GAAEC,KAAM,SAAWP,SAEZQ,UAAwBC,MAC5BC,YAAYC,EAASC,GACnBC,MAASF,EAAH,gBAA0BC,CAAU,EAC1CL,KAAKK,SAAWA,CAClB,CACF,CAEA,IAAME,EAAY,GACZC,EAAc,GACdC,EAAU,EACVC,EAAa,GACbC,EAAuB,IACvBC,EAAa,KACbC,EAAgB,KAChBC,EAAyB,KACzBC,EAA8B,KAC9BC,EAAuB,MAI7B,SAASC,EAAQC,GACf,MAAe,KAARA,GAAeA,GAAQ,GAChC,CAOA,SAASC,EAAYD,GACnB,MAAO,eAAeE,SAASF,CAAI,CACrC,CACA,SAASG,EAAwBH,GAC/B,MAAe,KAARA,GAAeA,GAAQ,KAAe,KAARA,GAAeA,GAAQ,KAAgB,MAATA,GAAyB,MAATA,CACrF,CACA,SAASI,EAAmBJ,GAC1B,MAAe,KAARA,GAAeA,GAAQ,KAAe,KAARA,GAAeA,GAAQ,KAAgB,MAATA,GAAyB,MAATA,GAAwB,KAARA,GAAeA,GAAQ,GAC5H,CAGA,IAAMK,EAAgB,+CAGhBC,EAAe,mCACrB,SAASC,EAA0BP,GACjC,MAAO,YAAYE,SAASF,CAAI,CAClC,CACA,SAASQ,EAAeR,GACtB,OAAOS,EAAQT,CAAI,GAAKU,EAAkBC,KAAKX,CAAI,CACrD,CAGA,IAAMU,EAAoB,YAQ1B,SAASE,EAAaC,EAAMC,GACpBC,EAAOF,EAAKG,WAAWF,CAAK,EAClC,OAAOC,IAAS1B,GAAa0B,IAASzB,GAAeyB,IAASxB,GAAWwB,IAASvB,CACpF,CAMA,SAASyB,EAA0BJ,EAAMC,GACjCC,EAAOF,EAAKG,WAAWF,CAAK,EAClC,OAAOC,IAAS1B,GAAa0B,IAASxB,GAAWwB,IAASvB,CAC5D,CAeA,SAASiB,EAAQT,GAEf,OAAOkB,EAAkBlB,CAAI,GAAKmB,EAAkBnB,CAAI,CAC1D,CAMA,SAASkB,EAAkBlB,GACzB,MAAgB,MAATA,GAAyB,MAATA,GAA8B,MAATA,CAC9C,CAMA,SAASoB,EAAcpB,GACrB,MAAgB,MAATA,CACT,CAMA,SAASmB,EAAkBnB,GACzB,MAAgB,MAATA,GAAyB,MAATA,GAA8B,MAATA,GAA8B,MAATA,GAA8B,MAATA,CACxF,CAMA,SAASqB,EAAcrB,GACrB,MAAgB,MAATA,CACT,CAKA,SAASsB,EAAoBT,EAAMU,EAAnC,GACMC,EAAwC,EAAnBC,UAAUC,QAA+BC,KAAAA,IADpE,GAAA,EAEQb,EAAQD,EAAKe,YAAYL,CAAW,EAC1C,MAAiB,CAAC,IAAXT,EAAeD,EAAKgB,UAAU,EAAGf,CAAK,GAAKU,EAAqB,GAAKX,EAAKgB,UAAUf,EAAQ,CAAC,GAAKD,CAC3G,CACA,SAASiB,EAA2BjB,EAAMkB,GACxCC,IAAIlB,EAAQD,EAAKa,OACjB,GAAI,CAACd,EAAaC,EAAMC,EAAQ,CAAC,EAE/B,OAAOD,EAAOkB,EAEhB,KAAOnB,EAAaC,EAAMC,EAAQ,CAAC,GACjCA,CAAK,GAEP,OAAOD,EAAKgB,UAAU,EAAGf,CAAK,EAAIiB,EAAelB,EAAKgB,UAAUf,CAAK,CACvE,CAYA,IAAMmB,EAAoB,CACxBC,KAAM,MACNC,KAAM,MACNC,KAAM,MACNC,KAAM,MACNC,KAAM,KACR,EAGMC,EAAmB,CACvBC,IAAK,IACLC,KAAM,KACNC,IAAK,IACLC,EAAG,KACHC,EAAG,KACHC,EAAG,KACHC,EAAG,KACHC,EAAG,IAEL,EA+sBAxE,EAAQQ,gBAAkBA,EAC1BR,EAAQyE,WA9rBR,SAAoBnC,GAClBmB,IAAIiB,EAAI,EACJC,EAAS,GAIb,GAFAC,EAAuB,CAAC,MAAO,OAAQ,OAAO,EAE1C,CADcC,EAAW,EAuqB3B,MAAM,IAAIrE,EAAgB,gCAAiC8B,EAAKa,MAAM,EAnqBxEyB,EAAuB,CAAC,MAAO,OAAQ,OAAO,EAC9C,IAAME,EAAiBC,EAAe,GAAG,EAIzC,GAHID,GACFE,EAA+B,EAE7B/C,EAAeK,EAAKoC,EAAE,GAtDnB,iBAAiBtC,KAsD8BuC,CAtDrB,EAsD8B,CAGxDG,IAEHH,EAASpB,EAA2BoB,EAAQ,GAAG,GAEjDM,CAoQAxB,IAAIyB,EAAU,CAAA,EACVC,EAAiB,CAAA,EACrB,KAAOA,GACAD,EAQHA,EAAU,CAAA,EANaH,EAAe,GAAG,IAGvCJ,EAASpB,EAA2BoB,EAAQ,GAAG,GAKnDQ,EAAiBN,EAAW,EAQ9BF;EAJEA,EAFGQ,EAMUR,EAJJ5B,EAAoB4B,EAAQ,GAAG;EArRhB,CAC5B,MAAWG,IAETH,EAAS5B,EAAoB4B,EAAQ,GAAG,GAI1C,KAAmB,MAAZrC,EAAKoC,IAA0B,MAAZpC,EAAKoC,IAC7BA,CAAC,GACDM,EAA+B,EAEjC,GAAIN,GAAKpC,EAAKa,OAEZ,OAAOwB,EAuoBP,MAAM,IAAInE,EAAgB,wBAAwB4E,KAAKC,UAAU/C,EAAKoC,EAAE,EAAKA,CAAC,EApoBhF,SAASG,IACPG,EAA+B,EAC/B,IAAMM,GA4HR,KACE,GAAgB,MAAZhD,EAAKoC,GAgET,MAAO,CAAA,EAhEc,CACnBC,GAAU,IACVD,CAAC,GACDM,EAA+B,EAG3BO,EAAc,GAAG,GACnBP,EAA+B,EAEjCvB,IAAIyB,EAAU,CAAA,EACd,KAAOR,EAAIpC,EAAKa,QAAsB,MAAZb,EAAKoC,IAAY,CACzCjB,IAAIqB,EAcJ,GAbKI,GAQHJ,EAAiB,CAAA,EACjBI,EAAU,CAAA,KARVJ,EAAiBC,EAAe,GAAG,KAGjCJ,EAASpB,EAA2BoB,EAAQ,GAAG,GAEjDK,EAA+B,GAKjCQ,EAAa,EAET,EADiBC,EAAY,GAAKC,EAAoB,CAAA,CAAI,GAC3C,CACD,MAAZpD,EAAKoC,IAA0B,MAAZpC,EAAKoC,IAA0B,MAAZpC,EAAKoC,IAA0B,MAAZpC,EAAKoC,IAA0BtB,KAAAA,IAAZd,EAAKoC,GAEnFC,EAAS5B,EAAoB4B,EAAQ,GAAG,GA8elD,KACE,MAAM,IAAInE,EAAgB,sBAAuBkE,CAAC,CACpD,GA9eiC,EAEzB,KACF,CACAM,EAA+B,EAC/B,IAAMW,EAAiBZ,EAAe,GAAG,EACnCa,EAAgBlB,GAAKpC,EAAKa,OAS1BgC,GARDQ,IACC1D,EAAeK,EAAKoC,EAAE,GAAKkB,EAE7BjB,EAASpB,EAA2BoB,EAAQ,GAAG,EAE/CkB,EAAmB,GAGAhB,EAAW,GAC7BM,IACCQ,GAAkBC,EAEpBjB,GAAU,OAEVkB,EAAmB,EAGzB,CAQA,MAPgB,MAAZvD,EAAKoC,IACPC,GAAU,IACVD,CAAC,IAGDC,EAASpB,EAA2BoB,EAAQ,GAAG,EAE1C,CAAA,CACT,CAEF,GA9LgC,IAmMhC,KACE,GAAgB,MAAZrC,EAAKoC,GAqCT,MAAO,CAAA,EArCc,CACnBC,GAAU,IACVD,CAAC,GACDM,EAA+B,EAG3BO,EAAc,GAAG,GACnBP,EAA+B,EAEjCvB,IAAIyB,EAAU,CAAA,EACd,KAAOR,EAAIpC,EAAKa,QAAsB,MAAZb,EAAKoC,IAAY,CACpCQ,EAOHA,EAAU,CAAA,EANaH,EAAe,GAAG,IAGvCJ,EAASpB,EAA2BoB,EAAQ,GAAG,GAKnDa,EAAa,EATb,IAUML,EAAiBN,EAAW,EAClC,GAAI,CAACM,EAAgB,CAEnBR,EAAS5B,EAAoB4B,EAAQ,GAAG,EACxC,KACF,CACF,CAQA,MAPgB,MAAZrC,EAAKoC,IACPC,GAAU,IACVD,CAAC,IAGDC,EAASpB,EAA2BoB,EAAQ,GAAG,EAE1C,CAAA,CACT,CAEF,GA1OgD,GAAKc,EAAY,IAgdjE,KACE,IA2DQK,EACAC,EA5DFC,EAAQtB,EACd,GAAgB,MAAZpC,EAAKoC,GAAY,CAEnB,GADAA,CAAC,GACGuB,EAAc,EAEhB,OADAC,EAAoCF,CAAK,EAClC,CAAA,EAET,GAAI,CAACxE,EAAQc,EAAKoC,EAAE,EAElB,OADAA,EAAIsB,EACG,CAAA,CAEX,CAMA,KAAOxE,EAAQc,EAAKoC,EAAE,GACpBA,CAAC,GAEH,GAAgB,MAAZpC,EAAKoC,GAAY,CAEnB,GADAA,CAAC,GACGuB,EAAc,EAEhB,OADAC,EAAoCF,CAAK,EAClC,CAAA,EAET,GAAI,CAACxE,EAAQc,EAAKoC,EAAE,EAElB,OADAA,EAAIsB,EACG,CAAA,EAET,KAAOxE,EAAQc,EAAKoC,EAAE,GACpBA,CAAC,EAEL,CACA,GAAgB,MAAZpC,EAAKoC,IAA0B,MAAZpC,EAAKoC,GAAY,CAKtC,GAJAA,CAAC,GACe,MAAZpC,EAAKoC,IAA0B,MAAZpC,EAAKoC,IAC1BA,CAAC,GAECuB,EAAc,EAEhB,OADAC,EAAoCF,CAAK,EAClC,CAAA,EAET,GAAI,CAACxE,EAAQc,EAAKoC,EAAE,EAElB,OADAA,EAAIsB,EACG,CAAA,EAET,KAAOxE,EAAQc,EAAKoC,EAAE,GACpBA,CAAC,EAEL,CAGA,GAAKuB,EAAc,GAInB,GAAIvB,EAAIsB,EAKN,OAHMF,EAAMxD,EAAK6D,MAAMH,EAAOtB,CAAC,EACzBqB,EAAwB,OAAO3D,KAAK0D,CAAG,EAC7CnB,GAAUoB,MAA4BD,KAASA,EACxC,CAAA,CACT,MATEpB,EAAIsB,EAUN,MAAO,CAAA,CACT,GAlhBkF,GAyhBzEI,EAAa,OAAQ,MAAM,GAAKA,EAAa,QAAS,OAAO,GAAKA,EAAa,OAAQ,MAAM,GAEpGA,EAAa,OAAQ,MAAM,GAAKA,EAAa,QAAS,OAAO,GAAKA,EAAa,OAAQ,MAAM,GA3hBWV,EAAoB,CAAA,CAAK,IAkmBnI,KACE,GAAgB,MAAZpD,EAAKoC,GAAY,CACnB,IAAMsB,EAAQtB,EAEd,IADAA,CAAC,GACMA,EAAIpC,EAAKa,SAAuB,MAAZb,EAAKoC,IAA8B,OAAhBpC,EAAKoC,EAAI,KACrDA,CAAC,GAIH,OAFAA,CAAC,GACDC,OAAcrC,EAAKgB,UAAU0C,EAAOtB,CAAC,KAC9B,CAAA,CACT,CACF,GA7mBmJ,EAEjJ,OADAM,EAA+B,EACxBM,CACT,CACA,SAASN,EAAT,GACEvB,IAAI4C,EAAcnD,EAAmB,EAAnBA,UAAUC,QAA+BC,KAAAA,IAD7D,IAAA,EAEgBsB,EACdjB,IAAI6C,EAAUC,EAAgBF,CAAW,EACzC,KAEMC,GADJA,GA4BJ,KAEE,GAAgB,MAAZhE,EAAKoC,IAA8B,MAAhBpC,EAAKoC,EAAI,GAAhC,CAEE,KAAOA,EAAIpC,EAAKa,QAAU,EAymBhC,CAA6Bb,EAAMoC,IACd,MAAZpC,EAAKoC,IAA8B,MAAhBpC,EAAKoC,EAAI,IA1mBgBpC,EAAMoC,CAAC,GACpDA,CAAC,GAEHA,GAAK,CAEP,KAPA,CAUA,GAAgB,MAAZpC,EAAKoC,IAA8B,MAAhBpC,EAAKoC,EAAI,GAOhC,MAAO,CAAA,EALL,KAAOA,EAAIpC,EAAKa,QAAsB,OAAZb,EAAKoC,IAC7BA,CAAC,EANL,CAQE,MAAO,CAAA,CAGX,GAhD2B,IAEX6B,EAAgBF,CAAW,IAGlC3B,CACT,CACA,SAAS6B,EAAgBF,GACvB,IAzKyB/D,EAAMC,EAyKzBiE,EAAgBH,EAAchE,EAAeK,EACnDe,IAAIgD,EAAa,GACjB,OAAa,CACX,GAAID,EAAclE,EAAMoC,CAAC,EACvB+B,GAAcnE,EAAKoC,OADrB,CAGO,GA/KgBpC,EA+KQA,EA/KFC,EA+KQmC,EA7KlClC,GADDA,EAAOF,EAAKG,WAAWF,CAAK,KAClBrB,GAAwBsB,GAAQrB,GAAcqB,GAAQpB,GAAiBoB,IAASnB,GAA0BmB,IAASlB,GAA+BkB,IAASjB,GAkLrK,MAHAkF,GAAc,GAIhB,CAHE/B,CAAC,EAIL,CACA,OAAwB,EAApB+B,EAAWtD,SACbwB,GAAU8B,EACH,CAAA,EAGX,CAsBA,SAAS7B,EAAuB8B,GAK9B,IAY6BA,IAC7BH,EAAgB,CAAA,CAAI,EACpB,IAAK,IAAMI,KAASD,EAAQ,CAC1B,IAAME,EAAMlC,EAAIiC,EAAMxD,OACtB,GAAIb,EAAK6D,MAAMzB,EAAGkC,CAAG,IAAMD,EAEzB,OADAjC,EAAIkC,EACG,CAEX,CAEF,GAtB4BF,CAAM,EAAhC,CACE,GAAI9E,EAAwBU,EAAKoC,EAAE,EAEjC,KAAOA,EAAIpC,EAAKa,QAAUtB,EAAmBS,EAAKoC,EAAE,GAClDA,CAAC,GAGLM,EAA+B,CAEjC,CAEF,CAYA,SAASD,EAAetD,GACtB,OAAIa,EAAKoC,KAAOjD,IACdkD,GAAUrC,EAAKoC,GACfA,CAAC,GACM,CAAA,EAGX,CACA,SAASa,EAAc9D,GACrB,OAAIa,EAAKoC,KAAOjD,IACdiD,CAAC,GACM,CAAA,EAGX,CASA,SAASc,IACPR,EAA+B,EACf,MAAZ1C,EAAKoC,IAA8B,MAAhBpC,EAAKoC,EAAI,IAA8B,MAAhBpC,EAAKoC,EAAI,KAErDA,GAAK,EACLM,EAA+B,EAC/BO,EAAc,GAAG,EAIrB,CAgKA,SAASE,EAAT,EAAA,GACEhC,IAAIoD,EAAqC,EAAnB3D,UAAUC,QAA+BC,KAAAA,IADjE,GAAA,EAEM0D,EAAiC,EAAnB5D,UAAUC,QAA+BC,KAAAA,IAF7D,EAAA,EAEwF,CAAC,EACvFK,IAAIsD,EAA8B,OAAZzE,EAAKoC,GAM3B,GALIqC,IAEFrC,CAAC,GACDqC,EAAkB,CAAA,GAEhB7E,EAAQI,EAAKoC,EAAE,EAAG,CAKpB,IAAMsC,EAAanE,EAAcP,EAAKoC,EAAE,EAAI7B,EAAgBC,EAAcR,EAAKoC,EAAE,EAAI5B,EAAgBF,EAAkBN,EAAKoC,EAAE,EAAI9B,EAAoBD,EAChJsE,EAAUvC,EACVwC,EAAUvC,EAAOxB,OACvBM,IAAI0D,EAAM,IAEV,IADAzC,CAAC,KACY,CACX,GAAIA,GAAKpC,EAAKa,OAIZ,OADMiE,EAAQC,EAAuB3C,EAAI,CAAC,EACtC,CAACmC,GAAmBnF,EAAYY,EAAKgF,OAAOF,CAAK,CAAC,GAIpD1C,EAAIuC,EACJtC,EAASA,EAAOrB,UAAU,EAAG4D,CAAO,EAC7BzB,EAAY,CAAA,CAAI,IAIzB0B,EAAM5D,EAA2B4D,EAAK,GAAG,EACzCxC,GAAUwC,EACH,CAAA,GAET,GAAIzC,IAAMoC,EAIR,OAFAK,EAAM5D,EAA2B4D,EAAK,GAAG,EACzCxC,GAAUwC,EACH,CAAA,EAET,GAAIH,EAAW1E,EAAKoC,EAAE,EAAG,CAGvB,IAAM6C,EAAS7C,EACT8C,EAASL,EAAIhE,OAKnB,GAJAgE,GAAO,IACPzC,CAAC,GACDC,GAAUwC,EACVnC,EAA+B,CAAA,CAAK,EAChC6B,GAAmBnC,GAAKpC,EAAKa,QAAUzB,EAAYY,EAAKoC,EAAE,GAAKxC,EAAQI,EAAKoC,EAAE,GAAKlD,EAAQc,EAAKoC,EAAE,EAIpG,OADA+C,EAAwB,EACjB,CAAA,EAET,IAAMC,EAAYL,EAAuBE,EAAS,CAAC,EAC7CI,EAAWrF,EAAKgF,OAAOI,CAAS,EACtC,GAAiB,MAAbC,EAMF,OAFAjD,EAAIuC,EACJtC,EAASA,EAAOrB,UAAU,EAAG4D,CAAO,EAC7BzB,EAAY,CAAA,EAAOiC,CAAS,EAErC,GAAIhG,EAAYiG,CAAQ,EAMtB,OAFAjD,EAAIuC,EACJtC,EAASA,EAAOrB,UAAU,EAAG4D,CAAO,EAC7BzB,EAAY,CAAA,CAAI,EAIzBd,EAASA,EAAOrB,UAAU,EAAG4D,CAAO,EACpCxC,EAAI6C,EAAS,EAGbJ,EAASA,EAAI7D,UAAU,EAAGkE,CAAM,EAA1B,KAAgCL,EAAI7D,UAAUkE,CAAM,CAC5D,KAAO,CAAA,GAAIX,GAAmB7E,EAA0BM,EAAKoC,EAAE,EAAG,CAKhE,GAAoB,MAAhBpC,EAAKoC,EAAI,IAAc5C,EAAcM,KAAKE,EAAKgB,UAAU2D,EAAU,EAAGvC,EAAI,CAAC,CAAC,EAC9E,KAAOA,EAAIpC,EAAKa,QAAUpB,EAAaK,KAAKE,EAAKoC,EAAE,GACjDyC,GAAO7E,EAAKoC,GACZA,CAAC,GAQL,OAHAyC,EAAM5D,EAA2B4D,EAAK,GAAG,EACzCxC,GAAUwC,EACVM,EAAwB,EACjB,CAAA,CACT,CAAO,GAAgB,OAAZnF,EAAKoC,GAAa,CAErBjD,EAAOa,EAAKgF,OAAO5C,EAAI,CAAC,EAE9B,GAAmBtB,KAAAA,IADAY,EAAiBvC,GAElC0F,GAAO7E,EAAK6D,MAAMzB,EAAGA,EAAI,CAAC,EAC1BA,GAAK,OACA,GAAa,MAATjD,EAAc,CACvBgC,IAAImE,EAAI,EACR,KAAOA,EAAI,GAzlBd,gBAAgBxF,KAylBSE,EAAKoC,EAAIkD,EAzlBT,GA0lBpBA,CAAC,GAEH,GAAU,IAANA,EACFT,GAAO7E,EAAK6D,MAAMzB,EAAGA,EAAI,CAAC,EAC1BA,GAAK,MACA,CAAA,GAAIA,EAAAA,EAAIkD,GAAKtF,EAAKa,QAoQjC,MADM0E,EAAAA,KAAAA,EAAAA,EAAQvF,EAAK6D,MAAMzB,EAAGA,EAAI,CAAC,EAC3B,IAAIlE,gCAA8CqH,KAAUnD,CAAC,EAjQzDA,EAAIpC,EAAKa,MAGX,CACF,MAEEgE,GAAO1F,EACPiD,GAAK,CAET,KAAO,CAEL,IAqOuBjD,EArOjBA,EAAOa,EAAKgF,OAAO5C,CAAC,EAC1B,GAAa,MAATjD,GAAgC,OAAhBa,EAAKoC,EAAI,GAE3ByC,GAAO,KAAK1F,OAEP,GA9kBC,QADUA,EA+kBYA,IA9kBL,OAATA,GAA0B,OAATA,GAA0B,OAATA,GAA0B,OAATA,EAglBjE0F,GAAOzD,EAAkBjC,OAFpB,CAKL,GAAI,EA9mBC,KA8mBuBA,GA4NpC,MAD6BA,EAAAA,KAAAA,EAAAA,EA1NGA,EA2N1B,IAAIjB,EAAgB,qBAAqB4E,KAAKC,UAAU5D,CAAI,EAAKiD,CAAC,EAzNhEyC,GAAO1F,CAET,CADEiD,CAAC,EAEL,CAAA,CACIqC,GApUDxB,EAAc,IAAI,CAwUvB,CACF,CACA,MAAO,CAAA,CACT,CAKA,SAASkC,IACPhE,IAAI6B,EAAY,CAAA,EAEhB,IADAN,EAA+B,EACZ,MAAZ1C,EAAKoC,IAAY,CACtBY,EAAY,CAAA,EACZZ,CAAC,GACDM,EAA+B,EAI/B,IAAMgB,GADNrB,EAAS5B,EAAoB4B,EAAQ,IAAK,CAAA,CAAI,GACzBxB,OACf2E,EAAYrC,EAAY,EAG5Bd,EAFEmD,GAzhBaxF,EA2hBQqC,EA3hBFqB,EA2hBUA,EA3hBH+B,EA2hBU,EA1hBrCzF,EAAKgB,UAAU,EAAG0C,CAAK,EAAI1D,EAAKgB,UAAU0C,EAAQ+B,CAAK,GA6hB/CxE,EAA2BoB,EAAQ,GAAG,CAEnD,CAhiBJ,IAAoCoD,EAiiBzBzC,CACT,CAkFA,SAASc,EAAa4B,EAAMC,GAC1B,OAAI3F,EAAK6D,MAAMzB,EAAGA,EAAIsD,EAAK7E,MAAM,IAAM6E,IACrCrD,GAAUsD,EACVvD,GAAKsD,EAAK7E,OACH,CAAA,EAGX,CAOA,SAASuC,EAAoBwC,GAG3B,IAAMlC,EAAQtB,EACd,GAAI9C,EAAwBU,EAAKoC,EAAE,EAAG,CACpC,KAAOA,EAAIpC,EAAKa,QAAUtB,EAAmBS,EAAKoC,EAAE,GAClDA,CAAC,GAEHjB,IAAImE,EAAIlD,EACR,KAAOrC,EAAaC,EAAMsF,CAAC,GACzBA,CAAC,GAEH,GAAgB,MAAZtF,EAAKsF,GAaP,OAVAlD,EAAIkD,EAAI,EACR/C,EAAW,EACK,MAAZvC,EAAKoC,KAEPA,CAAC,GACe,MAAZpC,EAAKoC,KAEPA,CAAC,GAGE,CAAA,CAEX,CACA,KAAOA,EAAIpC,EAAKa,QAAU,CAACnB,EAA0BM,EAAKoC,EAAE,GAAK,CAACxC,EAAQI,EAAKoC,EAAE,IAAM,CAACwD,GAAqB,MAAZ5F,EAAKoC,KACpGA,CAAC,GAIH,GAAoB,MAAhBpC,EAAKoC,EAAI,IAAc5C,EAAcM,KAAKE,EAAKgB,UAAU0C,EAAOtB,EAAI,CAAC,CAAC,EACxE,KAAOA,EAAIpC,EAAKa,QAAUpB,EAAaK,KAAKE,EAAKoC,EAAE,GACjDA,CAAC,GAGL,GAAIA,EAAIsB,EAAO,CAKb,KAAO3D,EAAaC,EAAMoC,EAAI,CAAC,GAAS,EAAJA,GAClCA,CAAC,GAEGyD,EAAS7F,EAAK6D,MAAMH,EAAOtB,CAAC,EAMlC,OALAC,GAAqB,cAAXwD,EAAyB,OAAS/C,KAAKC,UAAU8C,CAAM,EACjD,MAAZ7F,EAAKoC,IAEPA,CAAC,GAEI,CAAA,CACT,CACF,CAaA,SAAS2C,EAAuBrB,GAC9BvC,IAAI2E,EAAOpC,EACX,KAAc,EAAPoC,GAAY/F,EAAaC,EAAM8F,CAAI,GACxCA,CAAI,GAEN,OAAOA,CACT,CACA,SAASnC,IACP,OAAOvB,GAAKpC,EAAKa,QAAUzB,EAAYY,EAAKoC,EAAE,GAAKrC,EAAaC,EAAMoC,CAAC,CACzE,CACA,SAASwB,EAAoCF,GAI3CrB,GAAarC,EAAK6D,MAAMH,EAAOtB,CAAC,EAAtB,GACZ,CAaA,SAASmB,IACP,MAAM,IAAIrF,EAAgB,iBAAkBkE,CAAC,CAC/C,CAKF,CAQD,CAAC"} |
+12
-12
| { | ||
| "name": "jsonrepair", | ||
| "version": "3.13.0", | ||
| "version": "3.13.1", | ||
| "description": "Repair broken JSON documents", | ||
@@ -70,20 +70,20 @@ "repository": { | ||
| "devDependencies": { | ||
| "@babel/cli": "7.27.2", | ||
| "@babel/core": "7.27.7", | ||
| "@babel/plugin-transform-typescript": "7.27.1", | ||
| "@babel/preset-env": "7.27.2", | ||
| "@babel/cli": "7.28.3", | ||
| "@babel/core": "7.28.4", | ||
| "@babel/plugin-transform-typescript": "7.28.0", | ||
| "@babel/preset-env": "7.28.3", | ||
| "@babel/preset-typescript": "7.27.1", | ||
| "@biomejs/biome": "2.0.6", | ||
| "@biomejs/biome": "2.2.4", | ||
| "@commitlint/cli": "19.8.1", | ||
| "@commitlint/config-conventional": "19.8.1", | ||
| "@types/node": "24.0.8", | ||
| "cpy-cli": "5.0.0", | ||
| "del-cli": "6.0.0", | ||
| "@types/node": "24.5.2", | ||
| "cpy-cli": "6.0.0", | ||
| "del-cli": "7.0.0", | ||
| "husky": "9.1.7", | ||
| "npm-run-all": "4.1.5", | ||
| "rollup": "4.44.1", | ||
| "rollup": "4.51.0", | ||
| "standard-version": "9.5.0", | ||
| "tinybench": "4.0.1", | ||
| "tinybench": "5.0.1", | ||
| "ts-node": "10.9.2", | ||
| "typescript": "5.8.3", | ||
| "typescript": "5.9.2", | ||
| "uglify-js": "3.19.3", | ||
@@ -90,0 +90,0 @@ "vitest": "3.2.4" |
515226
0.2%5066
0.06%