{"version":3,"file":"jsonrepair.js","names":["JSONRepairError","codeAsterisk","codeBackslash","codeCloseParenthesis","codeClosingBrace","codeClosingBracket","codeColon","codeComma","codeDot","codeDoubleQuote","codeLowercaseE","codeMinus","codeNewline","codeOpeningBrace","codeOpeningBracket","codeOpenParenthesis","codePlus","codeSemicolon","codeSlash","codeUppercaseE","endsWithCommaOrNewline","insertBeforeLastWhitespace","isControlCharacter","isDelimiter","isDelimiterExceptSlash","isDigit","isDoubleQuote","isDoubleQuoteLike","isFunctionName","isHex","isQuote","isSingleQuote","isSingleQuoteLike","isSpecialWhitespace","isStartOfValue","isValidStringCharacter","isWhitespace","removeAtIndex","stripLastOccurrence","controlCharacters","escapeCharacters","b","f","n","r","t","jsonrepair","text","i","output","processed","parseValue","throwUnexpectedEnd","processedComma","parseCharacter","parseWhitespaceAndSkipComments","parseNewlineDelimitedJSON","charCodeAt","length","throwUnexpectedCharacter","parseObject","parseArray","parseString","parseNumber","parseKeywords","parseUnquotedString","start","changed","parseWhitespace","parseComment","whitespace","normal","atEndOfBlockComment","code","skipCharacter","skipEscapeCharacter","skipEllipsis","initial","processedKey","undefined","throwObjectKeyExpected","processedColon","truncatedText","throwColonExpected","processedValue","concat","stopAtDelimiter","arguments","skipEscapeChars","isEndQuote","iBefore","oBefore","str","iPrev","prevNonWhitespaceIndex","charAt","substring","iQuote","oQuote","parseConcatenatedString","char","escapeChar","slice","j","throwInvalidUnicodeCharacter","throwInvalidCharacter","parsedStr","atEndOfNumber","repairNumberEndingWithNumericSymbol","num","hasInvalidLeadingZero","test","parseKeyword","name","value","trim","symbol","JSON","stringify","prev","chars"],"sources":["../../../src/regular/jsonrepair.ts"],"sourcesContent":["import { JSONRepairError } from '../utils/JSONRepairError.js'\nimport {\n codeAsterisk,\n codeBackslash,\n codeCloseParenthesis,\n codeClosingBrace,\n codeClosingBracket,\n codeColon,\n codeComma,\n codeDot,\n codeDoubleQuote,\n codeLowercaseE,\n codeMinus,\n codeNewline,\n codeOpeningBrace,\n codeOpeningBracket,\n codeOpenParenthesis,\n codePlus,\n codeSemicolon,\n codeSlash,\n codeUppercaseE,\n endsWithCommaOrNewline,\n insertBeforeLastWhitespace,\n isControlCharacter,\n isDelimiter,\n isDelimiterExceptSlash,\n isDigit,\n isDoubleQuote,\n isDoubleQuoteLike,\n isFunctionName,\n isHex,\n isQuote,\n isSingleQuote,\n isSingleQuoteLike,\n isSpecialWhitespace,\n isStartOfValue,\n isValidStringCharacter,\n isWhitespace,\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 const processed = parseValue()\n if (!processed) {\n throwUnexpectedEnd()\n }\n\n const processedComma = parseCharacter(codeComma)\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.charCodeAt(i) === codeClosingBrace || text.charCodeAt(i) === codeClosingBracket) {\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()\n parseWhitespaceAndSkipComments()\n\n return processed\n }\n\n function parseWhitespaceAndSkipComments(): boolean {\n const start = i\n\n let changed = parseWhitespace()\n do {\n changed = parseComment()\n if (changed) {\n changed = parseWhitespace()\n }\n } while (changed)\n\n return i > start\n }\n\n function parseWhitespace(): boolean {\n let whitespace = ''\n let normal: boolean\n while ((normal = isWhitespace(text.charCodeAt(i))) || isSpecialWhitespace(text.charCodeAt(i))) {\n if (normal) {\n whitespace += text[i]\n } else {\n // repair special whitespace\n whitespace += ' '\n }\n\n i++\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.charCodeAt(i) === codeSlash && text.charCodeAt(i + 1) === codeAsterisk) {\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.charCodeAt(i) === codeSlash && text.charCodeAt(i + 1) === codeSlash) {\n // repair line comment by skipping it\n while (i < text.length && text.charCodeAt(i) !== codeNewline) {\n i++\n }\n\n return true\n }\n\n return false\n }\n\n function parseCharacter(code: number): boolean {\n if (text.charCodeAt(i) === code) {\n output += text[i]\n i++\n return true\n }\n\n return false\n }\n\n function skipCharacter(code: number): boolean {\n if (text.charCodeAt(i) === code) {\n i++\n return true\n }\n\n return false\n }\n\n function skipEscapeCharacter(): boolean {\n return skipCharacter(codeBackslash)\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 (\n text.charCodeAt(i) === codeDot &&\n text.charCodeAt(i + 1) === codeDot &&\n text.charCodeAt(i + 2) === codeDot\n ) {\n // repair: remove the ellipsis (three dots) and optionally a comma\n i += 3\n parseWhitespaceAndSkipComments()\n skipCharacter(codeComma)\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.charCodeAt(i) === codeOpeningBrace) {\n output += '{'\n i++\n parseWhitespaceAndSkipComments()\n\n // repair: skip leading comma like in {, message: \"hi\"}\n if (skipCharacter(codeComma)) {\n parseWhitespaceAndSkipComments()\n }\n\n let initial = true\n while (i < text.length && text.charCodeAt(i) !== codeClosingBrace) {\n let processedComma\n if (!initial) {\n processedComma = parseCharacter(codeComma)\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()\n if (!processedKey) {\n if (\n text.charCodeAt(i) === codeClosingBrace ||\n text.charCodeAt(i) === codeOpeningBrace ||\n text.charCodeAt(i) === codeClosingBracket ||\n text.charCodeAt(i) === codeOpeningBracket ||\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(codeColon)\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.charCodeAt(i) === codeClosingBrace) {\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.charCodeAt(i) === codeOpeningBracket) {\n output += '['\n i++\n parseWhitespaceAndSkipComments()\n\n // repair: skip leading comma like in [,1,2,3]\n if (skipCharacter(codeComma)) {\n parseWhitespaceAndSkipComments()\n }\n\n let initial = true\n while (i < text.length && text.charCodeAt(i) !== codeClosingBracket) {\n if (!initial) {\n const processedComma = parseCharacter(codeComma)\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.charCodeAt(i) === codeClosingBracket) {\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(codeComma)\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.\n */\n function parseString(stopAtDelimiter = false): boolean {\n let skipEscapeChars = text.charCodeAt(i) === codeBackslash\n if (skipEscapeChars) {\n // repair: remove the first escape character\n i++\n skipEscapeChars = true\n }\n\n if (isQuote(text.charCodeAt(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.charCodeAt(i))\n ? isDoubleQuote\n : isSingleQuote(text.charCodeAt(i))\n ? isSingleQuote\n : isSingleQuoteLike(text.charCodeAt(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 } else if (isEndQuote(text.charCodeAt(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()\n\n if (\n stopAtDelimiter ||\n i >= text.length ||\n isDelimiter(text.charAt(i)) ||\n isQuote(text.charCodeAt(i)) ||\n isDigit(text.charCodeAt(i))\n ) {\n // The quote is followed by the end of the text, a delimiter, or a next value\n // so the quote is indeed the end of the string\n parseConcatenatedString()\n\n return true\n }\n\n if (isDelimiter(text.charAt(prevNonWhitespaceIndex(iQuote - 1)))) {\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 && isDelimiter(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 // repair missing quote\n str = insertBeforeLastWhitespace(str, '\"')\n output += str\n\n parseConcatenatedString()\n\n return true\n } else if (text.charCodeAt(i) === codeBackslash) {\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.charCodeAt(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 const code = text.charCodeAt(i)\n\n if (code === codeDoubleQuote && text.charCodeAt(i - 1) !== codeBackslash) {\n // repair unescaped double quote\n str += '\\\\' + char\n i++\n } else if (isControlCharacter(code)) {\n // unescaped control character\n str += controlCharacters[char]\n i++\n } else {\n if (!isValidStringCharacter(code)) {\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.charCodeAt(i) === codePlus) {\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.charCodeAt(i) === codeMinus) {\n i++\n if (atEndOfNumber()) {\n repairNumberEndingWithNumericSymbol(start)\n return true\n }\n if (!isDigit(text.charCodeAt(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.charCodeAt(i))) {\n i++\n }\n\n if (text.charCodeAt(i) === codeDot) {\n i++\n if (atEndOfNumber()) {\n repairNumberEndingWithNumericSymbol(start)\n return true\n }\n if (!isDigit(text.charCodeAt(i))) {\n i = start\n return false\n }\n while (isDigit(text.charCodeAt(i))) {\n i++\n }\n }\n\n if (text.charCodeAt(i) === codeLowercaseE || text.charCodeAt(i) === codeUppercaseE) {\n i++\n if (text.charCodeAt(i) === codeMinus || text.charCodeAt(i) === codePlus) {\n i++\n }\n if (atEndOfNumber()) {\n repairNumberEndingWithNumericSymbol(start)\n return true\n }\n if (!isDigit(text.charCodeAt(i))) {\n i = start\n return false\n }\n while (isDigit(text.charCodeAt(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() {\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 while (i < text.length && !isDelimiterExceptSlash(text[i]) && !isQuote(text.charCodeAt(i))) {\n i++\n }\n\n if (i > start) {\n if (text.charCodeAt(i) === codeOpenParenthesis && isFunctionName(text.slice(start, i).trim())) {\n // repair a MongoDB function call like NumberLong(\"2\")\n // repair a JSONP function call like callback({...});\n i++\n\n parseValue()\n\n if (text.charCodeAt(i) === codeCloseParenthesis) {\n // repair: skip close bracket of function call\n i++\n if (text.charCodeAt(i) === codeSemicolon) {\n // repair: skip semicolon after JSONP call\n i++\n }\n }\n\n return true\n } else {\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.charCodeAt(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.charCodeAt(i) === codeDoubleQuote) {\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\n function prevNonWhitespaceIndex(start: number): number {\n let prev = start\n\n while (prev > 0 && isWhitespace(text.charCodeAt(prev))) {\n prev--\n }\n\n return prev\n }\n\n function atEndOfNumber() {\n return i >= text.length || isDelimiter(text[i]) || isWhitespace(text.charCodeAt(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":[]}