jsonfixerdev 1.0.4 → 1.0.5

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.
Files changed (67) hide show
  1. package/lib/cjs/index.js +34 -0
  2. package/lib/cjs/index.js.map +1 -0
  3. package/lib/cjs/package.json +3 -0
  4. package/lib/cjs/regular/jsonfixer.js +612 -0
  5. package/lib/cjs/regular/jsonfixer.js.map +1 -0
  6. package/lib/cjs/stream.js +13 -0
  7. package/lib/cjs/stream.js.map +1 -0
  8. package/lib/cjs/streaming/buffer/InputBuffer.js +75 -0
  9. package/lib/cjs/streaming/buffer/InputBuffer.js.map +1 -0
  10. package/lib/cjs/streaming/buffer/OutputBuffer.js +110 -0
  11. package/lib/cjs/streaming/buffer/OutputBuffer.js.map +1 -0
  12. package/lib/cjs/streaming/core.js +674 -0
  13. package/lib/cjs/streaming/core.js.map +1 -0
  14. package/lib/cjs/streaming/stack.js +51 -0
  15. package/lib/cjs/streaming/stack.js.map +1 -0
  16. package/lib/cjs/streaming/stream.js +37 -0
  17. package/lib/cjs/streaming/stream.js.map +1 -0
  18. package/lib/cjs/utils/JSONFixerError.js +15 -0
  19. package/lib/cjs/utils/JSONFixerError.js.map +1 -0
  20. package/lib/cjs/utils/stringUtils.js +186 -0
  21. package/lib/cjs/utils/stringUtils.js.map +1 -0
  22. package/lib/esm/index.js +16 -0
  23. package/lib/esm/index.js.map +1 -0
  24. package/lib/esm/regular/jsonfixer.js +605 -0
  25. package/lib/esm/regular/jsonfixer.js.map +1 -0
  26. package/lib/esm/stream.js +3 -0
  27. package/lib/esm/stream.js.map +1 -0
  28. package/lib/esm/streaming/buffer/InputBuffer.js +69 -0
  29. package/lib/esm/streaming/buffer/InputBuffer.js.map +1 -0
  30. package/lib/esm/streaming/buffer/OutputBuffer.js +104 -0
  31. package/lib/esm/streaming/buffer/OutputBuffer.js.map +1 -0
  32. package/lib/esm/streaming/core.js +668 -0
  33. package/lib/esm/streaming/core.js.map +1 -0
  34. package/lib/esm/streaming/stack.js +44 -0
  35. package/lib/esm/streaming/stack.js.map +1 -0
  36. package/lib/esm/streaming/stream.js +31 -0
  37. package/lib/esm/streaming/stream.js.map +1 -0
  38. package/lib/esm/utils/JSONFixerError.js +8 -0
  39. package/lib/esm/utils/JSONFixerError.js.map +1 -0
  40. package/lib/esm/utils/stringUtils.js +162 -0
  41. package/lib/esm/utils/stringUtils.js.map +1 -0
  42. package/lib/types/index.d.ts +5 -0
  43. package/lib/types/index.d.ts.map +1 -0
  44. package/lib/types/regular/jsonfixer.d.ts +19 -0
  45. package/lib/types/regular/jsonfixer.d.ts.map +1 -0
  46. package/lib/types/stream.d.ts +2 -0
  47. package/lib/types/stream.d.ts.map +1 -0
  48. package/lib/types/streaming/buffer/InputBuffer.d.ts +14 -0
  49. package/lib/types/streaming/buffer/InputBuffer.d.ts.map +1 -0
  50. package/lib/types/streaming/buffer/OutputBuffer.d.ts +17 -0
  51. package/lib/types/streaming/buffer/OutputBuffer.d.ts.map +1 -0
  52. package/lib/types/streaming/core.d.ts +11 -0
  53. package/lib/types/streaming/core.d.ts.map +1 -0
  54. package/lib/types/streaming/stack.d.ts +20 -0
  55. package/lib/types/streaming/stack.d.ts.map +1 -0
  56. package/lib/types/streaming/stream.d.ts +8 -0
  57. package/lib/types/streaming/stream.d.ts.map +1 -0
  58. package/lib/types/utils/JSONFixerError.d.ts +5 -0
  59. package/lib/types/utils/JSONFixerError.d.ts.map +1 -0
  60. package/lib/types/utils/stringUtils.d.ts +84 -0
  61. package/lib/types/utils/stringUtils.d.ts.map +1 -0
  62. package/lib/umd/jsonfixer.js +763 -0
  63. package/lib/umd/jsonfixer.js.map +1 -0
  64. package/lib/umd/jsonfixer.min.js +3 -0
  65. package/lib/umd/jsonfixer.min.js.map +1 -0
  66. package/lib/umd/package.json +3 -0
  67. package/package.json +4 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.js","names":["_InputBuffer","require","_OutputBuffer","_JSONFixerError","_stack","_stringUtils","controlCharacters","escapeCharacters","b","f","n","r","t","jsonfixerCore","_ref","onData","bufferSize","chunkSize","input","createInputBuffer","output","createOutputBuffer","write","i","iFlushed","stack","createStack","flushInputBuffer","flush","transform","chunk","push","currentLength","parse","close","parseWhitespaceAndSkipComments","type","StackType","object","caret","Caret","beforeKey","parseObjectKey","parseUnexpectedColon","parseRepairTrailingComma","parseRepairObjectEndOrComma","beforeValue","parseValue","parseRepairMissingObjectValue","afterValue","parseObjectComma","parseObjectEnd","array","parseRepairArrayEnd","parseArrayComma","parseArrayEnd","parseRepairMissingComma","ndJson","parseRepairNdJsonEnd","functionCall","parseFunctionCallEnd","root","parseUnexpectedEnd","parseRootEnd","parseObjectStart","parseArrayStart","parseString","parseNumber","parseKeywords","parseRepairUnquotedString","parseCharacter","codeOpeningBrace","codeClosingBrace","update","codeOpeningBracket","codeClosingBracket","unquotedStringEnd","findNextDelimiter","symbol","substring","skipCharacter","codeOpenParenthesis","JSON","stringify","charCodeAt","codeDoubleQuote","endsWithIgnoringWhitespace","stripLastOccurrence","codeColon","throwObjectKeyExpected","isEnd","throwUnexpectedEnd","throwUnexpectedCharacter","parsedKey","parseUnquotedKey","truncatedText","isStartOfValue","charAt","insertBeforeLastWhitespace","throwColonExpected","codeComma","pop","codeCloseParenthesis","codeSemicolon","parsedComma","unshift","start","changed","parseWhitespace","parseComment","whitespace","normal","isWhitespace","isSpecialWhitespace","length","codeSlash","codeAsterisk","atEndOfBlockComment","codeNewline","code","skipEscapeCharacter","codeBackslash","stopAtDelimiter","arguments","undefined","iBefore","skipEscapeChars","isQuote","isEndQuote","isDoubleQuote","isSingleQuote","isSingleQuoteLike","isDoubleQuoteLike","isEndOfString","isDelimiter","char","escapeChar","j","isHex","throwInvalidUnicodeCharacter","isControlCharacter","isValidStringCharacter","throwInvalidCharacter","hasEndQuote","valid","nextNonWhiteSpaceCharacter","remove","parseConcatenatedString","parsed","codePlus","parsedStr","codeMinus","expectDigitOrRepair","isDigit","codeDot","codeLowercaseE","codeUppercaseE","num","hasInvalidLeadingZero","test","parseKeyword","name","value","end","expectDigit","numSoFar","JSONFixerError","got","chars"],"sources":["../../../src/streaming/core.ts"],"sourcesContent":["import { createInputBuffer } from './buffer/InputBuffer.js'\nimport { createOutputBuffer } from './buffer/OutputBuffer.js'\nimport { JSONFixerError } from '../utils/JSONFixerError.js'\nimport { Caret, createStack, StackType } from './stack.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 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} 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\nexport interface JsonFixerCoreOptions {\n onData: (chunk: string) => void\n chunkSize?: number\n bufferSize?: number\n}\n\nexport interface JsonFixerCore {\n transform: (chunk: string) => void\n flush: () => void\n}\n\nexport function jsonfixerCore({\n onData,\n bufferSize = 65536,\n chunkSize = 65536\n}: JsonFixerCoreOptions): JsonFixerCore {\n const input = createInputBuffer()\n\n const output = createOutputBuffer({\n write: onData,\n bufferSize,\n chunkSize\n })\n\n let i = 0\n let iFlushed = 0\n const stack = createStack()\n\n function flushInputBuffer() {\n while (iFlushed < i - bufferSize - chunkSize) {\n iFlushed += chunkSize\n input.flush(iFlushed)\n }\n }\n\n function transform(chunk: string) {\n input.push(chunk)\n\n while (i < input.currentLength() - bufferSize && parse()) {\n // loop until there is nothing more to process\n }\n\n flushInputBuffer()\n }\n\n function flush() {\n input.close()\n\n while (parse()) {\n // loop until there is nothing more to process\n }\n\n output.flush()\n }\n\n function parse(): boolean {\n parseWhitespaceAndSkipComments()\n\n switch (stack.type) {\n case StackType.object: {\n switch (stack.caret) {\n case Caret.beforeKey:\n return (\n parseObjectKey() ||\n parseUnexpectedColon() ||\n parseRepairTrailingComma() ||\n parseRepairObjectEndOrComma()\n )\n case Caret.beforeValue:\n return parseValue() || parseRepairMissingObjectValue()\n case Caret.afterValue:\n return parseObjectComma() || parseObjectEnd() || parseRepairObjectEndOrComma()\n default:\n return false\n }\n }\n\n case StackType.array: {\n switch (stack.caret) {\n case Caret.beforeValue:\n return parseValue() || parseRepairTrailingComma() || parseRepairArrayEnd()\n case Caret.afterValue:\n return (\n parseArrayComma() ||\n parseArrayEnd() ||\n parseRepairMissingComma() ||\n parseRepairArrayEnd()\n )\n default:\n return false\n }\n }\n\n case StackType.ndJson: {\n switch (stack.caret) {\n case Caret.beforeValue:\n return parseValue() || parseRepairTrailingComma()\n case Caret.afterValue:\n return parseArrayComma() || parseRepairMissingComma() || parseRepairNdJsonEnd()\n default:\n return false\n }\n }\n\n case StackType.functionCall: {\n switch (stack.caret) {\n case Caret.beforeValue:\n return parseValue()\n case Caret.afterValue:\n return parseFunctionCallEnd()\n default:\n return false\n }\n }\n\n case StackType.root: {\n switch (stack.caret) {\n case Caret.beforeValue:\n return parseValue() || parseUnexpectedEnd()\n case Caret.afterValue:\n return parseRootEnd()\n default:\n return false\n }\n }\n\n default:\n return false\n }\n }\n\n function parseValue(): boolean {\n return (\n parseObjectStart() ||\n parseArrayStart() ||\n parseString() ||\n parseNumber() ||\n parseKeywords() ||\n parseRepairUnquotedString()\n )\n }\n\n function parseObjectStart(): boolean {\n if (parseCharacter(codeOpeningBrace)) {\n parseWhitespaceAndSkipComments()\n if (parseCharacter(codeClosingBrace)) {\n return stack.update(Caret.afterValue)\n }\n\n return stack.push(StackType.object, Caret.beforeKey)\n }\n\n return false\n }\n\n function parseArrayStart(): boolean {\n if (parseCharacter(codeOpeningBracket)) {\n parseWhitespaceAndSkipComments()\n if (parseCharacter(codeClosingBracket)) {\n return stack.update(Caret.afterValue)\n }\n\n return stack.push(StackType.array, Caret.beforeValue)\n }\n\n return false\n }\n\n function parseRepairUnquotedString(): boolean {\n const unquotedStringEnd = findNextDelimiter()\n if (unquotedStringEnd !== null) {\n const symbol = input.substring(i, unquotedStringEnd)\n i = unquotedStringEnd\n\n if (skipCharacter(codeOpenParenthesis)) {\n // A MongoDB function call like NumberLong(\"2\")\n // Or a JSONP function call like callback({...});\n // we strip the function call\n\n return stack.push(StackType.functionCall, Caret.beforeValue)\n }\n\n output.push(symbol === 'undefined' ? 'null' : JSON.stringify(symbol))\n\n if (input.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 stack.update(Caret.afterValue)\n }\n\n return false\n }\n\n function parseRepairMissingObjectValue(): boolean {\n // repair missing object value\n output.push('null')\n return stack.update(Caret.afterValue)\n }\n\n function parseRepairTrailingComma(): boolean {\n // repair trailing comma\n if (output.endsWithIgnoringWhitespace(',')) {\n output.stripLastOccurrence(',')\n return stack.update(Caret.afterValue)\n }\n\n return false\n }\n\n function parseUnexpectedColon(): boolean {\n if (input.charCodeAt(i) === codeColon) {\n throwObjectKeyExpected()\n }\n\n return false\n }\n\n function parseUnexpectedEnd(): boolean {\n if (input.isEnd(i)) {\n throwUnexpectedEnd()\n } else {\n throwUnexpectedCharacter()\n }\n\n return false\n }\n\n function parseObjectKey(): boolean {\n const parsedKey = parseString() || parseUnquotedKey()\n if (parsedKey) {\n parseWhitespaceAndSkipComments()\n\n if (parseCharacter(codeColon)) {\n // expect a value after the :\n return stack.update(Caret.beforeValue)\n }\n\n const truncatedText = input.isEnd(i)\n if (isStartOfValue(input.charAt(i)) || truncatedText) {\n // repair missing colon\n output.insertBeforeLastWhitespace(':')\n return stack.update(Caret.beforeValue)\n }\n\n throwColonExpected()\n }\n\n return false\n }\n\n function parseObjectComma(): boolean {\n if (parseCharacter(codeComma)) {\n return stack.update(Caret.beforeKey)\n }\n\n return false\n }\n\n function parseObjectEnd(): boolean {\n if (parseCharacter(codeClosingBrace)) {\n return stack.pop()\n }\n\n return false\n }\n\n function parseRepairObjectEndOrComma(): true {\n // repair missing object end and trailing comma\n if (input.charAt(i) === '{') {\n output.stripLastOccurrence(',')\n output.insertBeforeLastWhitespace('}')\n return stack.pop()\n }\n\n // repair missing comma\n if (!input.isEnd(i) && isStartOfValue(input.charAt(i))) {\n output.insertBeforeLastWhitespace(',')\n return stack.update(Caret.beforeKey)\n }\n\n // repair missing closing brace\n output.insertBeforeLastWhitespace('}')\n return stack.pop()\n }\n\n function parseArrayComma(): boolean {\n if (parseCharacter(codeComma)) {\n return stack.update(Caret.beforeValue)\n }\n\n return false\n }\n\n function parseArrayEnd(): boolean {\n if (parseCharacter(codeClosingBracket)) {\n return stack.pop()\n }\n\n return false\n }\n\n function parseRepairMissingComma(): boolean {\n // repair missing comma\n if (!input.isEnd(i) && isStartOfValue(input.charAt(i))) {\n output.insertBeforeLastWhitespace(',')\n return stack.update(Caret.beforeValue)\n }\n\n return false\n }\n\n function parseRepairArrayEnd(): true {\n // repair missing closing bracket\n output.insertBeforeLastWhitespace(']')\n return stack.pop()\n }\n\n function parseRepairNdJsonEnd(): boolean {\n if (input.isEnd(i)) {\n output.push('\\n]')\n return stack.pop()\n } else {\n throwUnexpectedEnd()\n return false // just to make TS happy\n }\n }\n\n function parseFunctionCallEnd(): true {\n if (skipCharacter(codeCloseParenthesis)) {\n skipCharacter(codeSemicolon)\n }\n\n return stack.pop()\n }\n\n function parseRootEnd(): boolean {\n const parsedComma = parseCharacter(codeComma)\n parseWhitespaceAndSkipComments()\n\n if (\n isStartOfValue(input.charAt(i)) &&\n (output.endsWithIgnoringWhitespace(',') || output.endsWithIgnoringWhitespace('\\n'))\n ) {\n // start of a new value after end of the root level object: looks like\n // newline delimited JSON -> turn into a root level array\n if (!parsedComma) {\n // repair missing comma\n output.insertBeforeLastWhitespace(',')\n }\n\n output.unshift('[\\n')\n\n return stack.push(StackType.ndJson, Caret.beforeValue)\n }\n\n if (parsedComma) {\n // repair: remove trailing comma\n output.stripLastOccurrence(',')\n\n return stack.update(Caret.afterValue)\n }\n\n // repair redundant end braces and brackets\n while (input.charCodeAt(i) === codeClosingBrace || input.charCodeAt(i) === codeClosingBracket) {\n i++\n parseWhitespaceAndSkipComments()\n }\n\n if (!input.isEnd(i)) {\n throwUnexpectedCharacter()\n }\n\n return false\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 (\n (normal = isWhitespace(input.charCodeAt(i))) ||\n isSpecialWhitespace(input.charCodeAt(i))\n ) {\n if (normal) {\n whitespace += input.charAt(i)\n } else {\n // repair special whitespace\n whitespace += ' '\n }\n\n i++\n }\n\n if (whitespace.length > 0) {\n output.push(whitespace)\n return true\n }\n\n return false\n }\n\n function parseComment(): boolean {\n // find a block comment '/* ... */'\n if (input.charCodeAt(i) === codeSlash && input.charCodeAt(i + 1) === codeAsterisk) {\n // repair block comment by skipping it\n while (!input.isEnd(i) && !atEndOfBlockComment(i)) {\n i++\n }\n i += 2\n\n return true\n }\n\n // find a line comment '// ...'\n if (input.charCodeAt(i) === codeSlash && input.charCodeAt(i + 1) === codeSlash) {\n // repair line comment by skipping it\n while (!input.isEnd(i) && input.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 (input.charCodeAt(i) === code) {\n output.push(input.charAt(i))\n i++\n return true\n }\n\n return false\n }\n\n function skipCharacter(code: number): boolean {\n if (input.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 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 const iBefore = i // we may need to revert\n\n let skipEscapeChars = input.charCodeAt(i) === codeBackslash\n if (skipEscapeChars) {\n // repair: remove the first escape character\n i++\n skipEscapeChars = true\n }\n\n if (isQuote(input.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(input.charCodeAt(i))\n ? isDoubleQuote\n : isSingleQuote(input.charCodeAt(i))\n ? isSingleQuote // eslint-disable-line indent\n : isSingleQuoteLike(input.charCodeAt(i)) // eslint-disable-line indent\n ? isSingleQuoteLike // eslint-disable-line indent\n : isDoubleQuoteLike // eslint-disable-line indent\n\n output.push('\"')\n i++\n\n const isEndOfString = stopAtDelimiter\n ? (i: number) => isDelimiter(input.charAt(i))\n : (i: number) => isEndQuote(input.charCodeAt(i))\n\n while (!input.isEnd(i) && !isEndOfString(i)) {\n if (input.charCodeAt(i) === codeBackslash) {\n const char = input.charAt(i + 1)\n const escapeChar = escapeCharacters[char]\n if (escapeChar !== undefined) {\n output.push(input.substring(i, i + 2))\n i += 2\n } else if (char === 'u') {\n let j = 2\n while (j < 6 && isHex(input.charCodeAt(i + j))) {\n j++\n }\n\n if (j === 6) {\n output.push(input.substring(i, i + 6))\n i += 6\n } else if (input.isEnd(i + j)) {\n // repair invalid or truncated unicode char at the end of the text\n // by removing the unicode char and ending the string here\n i += j\n } else {\n throwInvalidUnicodeCharacter()\n }\n } else {\n // repair invalid escape character: remove it\n output.push(char)\n i += 2\n }\n } else {\n const char = input.charAt(i)\n const code = char.charCodeAt(0)\n\n if (code === codeDoubleQuote && input.charCodeAt(i - 1) !== codeBackslash) {\n // repair unescaped double quote\n output.push('\\\\' + char)\n i++\n } else if (isControlCharacter(code)) {\n // unescaped control character\n output.push(controlCharacters[char])\n i++\n } else {\n if (!isValidStringCharacter(code)) {\n throwInvalidCharacter(char)\n }\n output.push(char)\n i++\n }\n }\n\n if (skipEscapeChars) {\n // repair: skipped escape character (nothing to do)\n skipEscapeCharacter()\n }\n }\n\n // see whether we have an end quote followed by a valid delimiter\n const hasEndQuote = isQuote(input.charCodeAt(i))\n const valid =\n hasEndQuote && (input.isEnd(i + 1) || isDelimiter(nextNonWhiteSpaceCharacter(i + 1)))\n\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 output.remove(iBefore)\n return parseString(true)\n }\n\n if (hasEndQuote) {\n output.push('\"')\n i++\n } else {\n // repair missing quote\n output.insertBeforeLastWhitespace('\"')\n }\n\n parseConcatenatedString()\n\n return stack.update(Caret.afterValue)\n }\n\n return false\n }\n\n /**\n * Repair concatenated strings like \"hello\" + \"world\", change this into \"helloworld\"\n */\n function parseConcatenatedString(): boolean {\n let parsed = false\n\n parseWhitespaceAndSkipComments()\n while (input.charCodeAt(i) === codePlus) {\n parsed = true\n i++\n parseWhitespaceAndSkipComments()\n\n // repair: remove the end quote of the first string\n output.stripLastOccurrence('\"', true)\n const start = output.length()\n const parsedStr = parseString()\n if (parsedStr) {\n // repair: remove the start quote of the second string\n output.remove(start, start + 1)\n } else {\n // repair: remove the + because it is not followed by a string\n output.insertBeforeLastWhitespace('\"')\n }\n }\n\n return parsed\n }\n\n /**\n * Parse a number like 2.4 or 2.4e6\n */\n function parseNumber(): boolean {\n const start = i\n if (input.charCodeAt(i) === codeMinus) {\n i++\n if (expectDigitOrRepair(start)) {\n return stack.update(Caret.afterValue)\n }\n }\n\n // Note that in JSON leading zeros like \"00789\" are not allowed.\n // We will allow all leading zeros here though and at the end of parseNumber\n // check against trailing zeros and repair that if needed.\n // Leading zeros can have meaning, so we should not clear them.\n while (isDigit(input.charCodeAt(i))) {\n i++\n }\n\n if (input.charCodeAt(i) === codeDot) {\n i++\n if (expectDigitOrRepair(start)) {\n return stack.update(Caret.afterValue)\n }\n while (isDigit(input.charCodeAt(i))) {\n i++\n }\n }\n\n if (input.charCodeAt(i) === codeLowercaseE || input.charCodeAt(i) === codeUppercaseE) {\n i++\n if (input.charCodeAt(i) === codeMinus || input.charCodeAt(i) === codePlus) {\n i++\n }\n if (expectDigitOrRepair(start)) {\n return stack.update(Caret.afterValue)\n }\n while (isDigit(input.charCodeAt(i))) {\n i++\n }\n }\n\n if (i > start) {\n // repair a number with leading zeros like \"00789\"\n const num = input.substring(start, i)\n const hasInvalidLeadingZero = /^0\\d/.test(num)\n\n output.push(hasInvalidLeadingZero ? `\"${num}\"` : num)\n return stack.update(Caret.afterValue)\n }\n\n return false\n }\n\n /**\n * Parse keywords true, false, null\n * Repair Python keywords True, False, None\n */\n function parseKeywords(): boolean {\n return (\n parseKeyword('true', 'true') ||\n parseKeyword('false', 'false') ||\n parseKeyword('null', 'null') ||\n // repair Python keywords True, False, None\n parseKeyword('True', 'true') ||\n parseKeyword('False', 'false') ||\n parseKeyword('None', 'null')\n )\n }\n\n function parseKeyword(name: string, value: string): boolean {\n if (input.substring(i, i + name.length) === name) {\n output.push(value)\n i += name.length\n return stack.update(Caret.afterValue)\n }\n\n return false\n }\n\n function parseUnquotedKey(): boolean {\n let end = findNextDelimiter()\n\n if (end !== null) {\n // first, go back to prevent getting trailing whitespaces in the string\n while (isWhitespace(input.charCodeAt(end - 1)) && end > i) {\n end--\n }\n\n const symbol = input.substring(i, end)\n output.push(JSON.stringify(symbol))\n i = end\n\n if (input.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 stack.update(Caret.afterValue) // we do not have a state Caret.afterKey, therefore we use afterValue here\n }\n\n return false\n }\n\n function findNextDelimiter(): number | null {\n // note that the symbol can end with whitespaces: we stop at the next delimiter\n let j = i\n while (!input.isEnd(j) && !isDelimiter(input.charAt(j))) {\n j++\n }\n\n return j > i ? j : null\n }\n\n function nextNonWhiteSpaceCharacter(start: number): string {\n let i = start\n\n while (isWhitespace(input.charCodeAt(i))) {\n i++\n }\n\n return input.charAt(i)\n }\n\n function expectDigit(start: number) {\n if (!isDigit(input.charCodeAt(i))) {\n const numSoFar = input.substring(start, i)\n throw new JSONFixerError(`Invalid number '${numSoFar}', expecting a digit ${got()}`, i)\n }\n }\n\n function expectDigitOrRepair(start: number) {\n if (input.isEnd(i)) {\n // repair numbers cut off at the end\n // this will only be called when we end after a '.', '-', or 'e' and does not\n // change the number more than it needs to make it valid JSON\n output.push(input.substring(start, i) + '0')\n 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(input.charAt(i)), i)\n }\n\n function throwUnexpectedEnd() {\n throw new JSONFixerError('Unexpected end of json string', i)\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 = input.substring(i, i + 6)\n throw new JSONFixerError(`Invalid unicode character \"${chars}\"`, i)\n }\n\n function got(): string {\n const char = input.charAt(i)\n return char ? `but got '${char}'` : 'but reached end of input'\n }\n\n function atEndOfBlockComment(i: number) {\n return input.charAt(i) === '*' && input.charAt(i + 1) === '/'\n }\n\n return {\n transform,\n flush\n }\n}\n\n"],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.StackType = exports.Caret = void 0;
7
+ exports.createStack = createStack;
8
+ let Caret = exports.Caret = /*#__PURE__*/function (Caret) {
9
+ Caret["beforeValue"] = "beforeValue";
10
+ Caret["afterValue"] = "afterValue";
11
+ Caret["beforeKey"] = "beforeKey";
12
+ return Caret;
13
+ }({});
14
+ let StackType = exports.StackType = /*#__PURE__*/function (StackType) {
15
+ StackType["root"] = "root";
16
+ StackType["object"] = "object";
17
+ StackType["array"] = "array";
18
+ StackType["ndJson"] = "ndJson";
19
+ StackType["functionCall"] = "dataType";
20
+ return StackType;
21
+ }({});
22
+ function createStack() {
23
+ const stack = [StackType.root];
24
+ let caret = Caret.beforeValue;
25
+ return {
26
+ get type() {
27
+ return last(stack);
28
+ },
29
+ get caret() {
30
+ return caret;
31
+ },
32
+ pop() {
33
+ stack.pop();
34
+ caret = Caret.afterValue;
35
+ return true;
36
+ },
37
+ push(type, newCaret) {
38
+ stack.push(type);
39
+ caret = newCaret;
40
+ return true;
41
+ },
42
+ update(newCaret) {
43
+ caret = newCaret;
44
+ return true;
45
+ }
46
+ };
47
+ }
48
+ function last(array) {
49
+ return array[array.length - 1];
50
+ }
51
+ //# sourceMappingURL=stack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stack.js","names":["Caret","exports","StackType","createStack","stack","root","caret","beforeValue","type","last","pop","afterValue","push","newCaret","update","array","length"],"sources":["../../../src/streaming/stack.ts"],"sourcesContent":["export const enum Caret {\n beforeValue = 'beforeValue',\n afterValue = 'afterValue',\n beforeKey = 'beforeKey'\n}\n\nexport const enum StackType {\n root = 'root',\n object = 'object',\n array = 'array',\n ndJson = 'ndJson',\n functionCall = 'dataType'\n}\n\nexport function createStack() {\n const stack: StackType[] = [StackType.root]\n let caret = Caret.beforeValue\n\n return {\n get type() {\n return last(stack)\n },\n\n get caret() {\n return caret\n },\n\n pop(): true {\n stack.pop()\n caret = Caret.afterValue\n\n return true\n },\n\n push(type: StackType, newCaret: Caret): true {\n stack.push(type)\n caret = newCaret\n\n return true\n },\n\n update(newCaret: Caret): true {\n caret = newCaret\n\n return true\n }\n }\n}\n\nfunction last<T>(array: T[]): T | undefined {\n return array[array.length - 1]\n}\n"],"mappings":";;;;;;;IAAkBA,KAAK,GAAAC,OAAA,CAAAD,KAAA,0BAALA,KAAK;EAALA,KAAK;EAALA,KAAK;EAALA,KAAK;EAAA,OAALA,KAAK;AAAA;AAAA,IAMLE,SAAS,GAAAD,OAAA,CAAAC,SAAA,0BAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAAA,OAATA,SAAS;AAAA;AAQpB,SAASC,WAAWA,CAAA,EAAG;EAC5B,MAAMC,KAAkB,GAAG,CAACF,SAAS,CAACG,IAAI,CAAC;EAC3C,IAAIC,KAAK,GAAGN,KAAK,CAACO,WAAW;EAE7B,OAAO;IACL,IAAIC,IAAIA,CAAA,EAAG;MACT,OAAOC,IAAI,CAACL,KAAK,CAAC;IACpB,CAAC;IAED,IAAIE,KAAKA,CAAA,EAAG;MACV,OAAOA,KAAK;IACd,CAAC;IAEDI,GAAGA,CAAA,EAAS;MACVN,KAAK,CAACM,GAAG,CAAC,CAAC;MACXJ,KAAK,GAAGN,KAAK,CAACW,UAAU;MAExB,OAAO,IAAI;IACb,CAAC;IAEDC,IAAIA,CAACJ,IAAe,EAAEK,QAAe,EAAQ;MAC3CT,KAAK,CAACQ,IAAI,CAACJ,IAAI,CAAC;MAChBF,KAAK,GAAGO,QAAQ;MAEhB,OAAO,IAAI;IACb,CAAC;IAEDC,MAAMA,CAACD,QAAe,EAAQ;MAC5BP,KAAK,GAAGO,QAAQ;MAEhB,OAAO,IAAI;IACb;EACF,CAAC;AACH;AAEA,SAASJ,IAAIA,CAAIM,KAAU,EAAiB;EAC1C,OAAOA,KAAK,CAACA,KAAK,CAACC,MAAM,GAAG,CAAC,CAAC;AAChC"}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.jsonfixerTransform = jsonfixerTransform;
7
+ var _nodeStream = require("node:stream");
8
+ var _core = require("./core.js");
9
+ function jsonfixerTransform(options) {
10
+ const repair = (0, _core.jsonfixerCore)({
11
+ onData: chunk => transform.push(chunk),
12
+ bufferSize: options?.bufferSize,
13
+ chunkSize: options?.chunkSize
14
+ });
15
+ const transform = new _nodeStream.Transform({
16
+ transform(chunk, encoding, callback) {
17
+ try {
18
+ repair.transform(chunk.toString());
19
+ } catch (err) {
20
+ this.emit('error', err);
21
+ } finally {
22
+ callback();
23
+ }
24
+ },
25
+ flush(callback) {
26
+ try {
27
+ repair.flush();
28
+ } catch (err) {
29
+ this.emit('error', err);
30
+ } finally {
31
+ callback();
32
+ }
33
+ }
34
+ });
35
+ return transform;
36
+ }
37
+ //# sourceMappingURL=stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream.js","names":["_nodeStream","require","_core","jsonfixerTransform","options","repair","jsonfixerCore","onData","chunk","transform","push","bufferSize","chunkSize","Transform","encoding","callback","toString","err","emit","flush"],"sources":["../../../src/streaming/stream.ts"],"sourcesContent":["import { Transform } from 'node:stream'\nimport { jsonfixerCore, type JsonFixerCore } from './core.js'\n\nexport interface JsonFixerTransformOptions {\n chunkSize?: number\n bufferSize?: number\n}\n\nexport function jsonfixerTransform(options?: JsonFixerTransformOptions): Transform {\n const repair: JsonFixerCore = jsonfixerCore({\n onData: (chunk) => transform.push(chunk),\n bufferSize: options?.bufferSize,\n chunkSize: options?.chunkSize\n })\n\n const transform = new Transform({\n transform(chunk, encoding, callback) {\n try {\n repair.transform(chunk.toString())\n } catch (err) {\n this.emit('error', err)\n } finally {\n callback()\n }\n },\n\n flush(callback) {\n try {\n repair.flush()\n } catch (err) {\n this.emit('error', err)\n } finally {\n callback()\n }\n }\n })\n\n return transform\n}\n\n"],"mappings":";;;;;;AAAA,IAAAA,WAAA,GAAAC,OAAA;AACA,IAAAC,KAAA,GAAAD,OAAA;AAOO,SAASE,kBAAkBA,CAACC,OAAmC,EAAa;EACjF,MAAMC,MAAqB,GAAG,IAAAC,mBAAa,EAAC;IAC1CC,MAAM,EAAGC,KAAK,IAAKC,SAAS,CAACC,IAAI,CAACF,KAAK,CAAC;IACxCG,UAAU,EAAEP,OAAO,EAAEO,UAAU;IAC/BC,SAAS,EAAER,OAAO,EAAEQ;EACtB,CAAC,CAAC;EAEF,MAAMH,SAAS,GAAG,IAAII,qBAAS,CAAC;IAC9BJ,SAASA,CAACD,KAAK,EAAEM,QAAQ,EAAEC,QAAQ,EAAE;MACnC,IAAI;QACFV,MAAM,CAACI,SAAS,CAACD,KAAK,CAACQ,QAAQ,CAAC,CAAC,CAAC;MACpC,CAAC,CAAC,OAAOC,GAAG,EAAE;QACZ,IAAI,CAACC,IAAI,CAAC,OAAO,EAAED,GAAG,CAAC;MACzB,CAAC,SAAS;QACRF,QAAQ,CAAC,CAAC;MACZ;IACF,CAAC;IAEDI,KAAKA,CAACJ,QAAQ,EAAE;MACd,IAAI;QACFV,MAAM,CAACc,KAAK,CAAC,CAAC;MAChB,CAAC,CAAC,OAAOF,GAAG,EAAE;QACZ,IAAI,CAACC,IAAI,CAAC,OAAO,EAAED,GAAG,CAAC;MACzB,CAAC,SAAS;QACRF,QAAQ,CAAC,CAAC;MACZ;IACF;EACF,CAAC,CAAC;EAEF,OAAON,SAAS;AAClB"}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.JSONFixerError = void 0;
7
+ class JSONFixerError extends Error {
8
+ constructor(message, position) {
9
+ super(message);
10
+ this.position = position;
11
+ this.name = 'JSONFixerError';
12
+ }
13
+ }
14
+ exports.JSONFixerError = JSONFixerError;
15
+ //# sourceMappingURL=JSONFixerError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JSONFixerError.js","names":["JSONFixerError","Error","constructor","message","position","name","exports"],"sources":["../../../src/utils/JSONFixerError.ts"],"sourcesContent":["export class JSONFixerError extends Error {\r\n public position: number\r\n\r\n constructor(message: string, position: number) {\r\n super(message)\r\n this.position = position\r\n this.name = 'JSONFixerError'\r\n }\r\n}"],"mappings":";;;;;;AAAO,MAAMA,cAAc,SAASC,KAAK,CAAC;EAGxCC,WAAWA,CAACC,OAAe,EAAEC,QAAgB,EAAE;IAC7C,KAAK,CAACD,OAAO,CAAC;IACd,IAAI,CAACC,QAAQ,GAAGA,QAAQ;IACxB,IAAI,CAACC,IAAI,GAAG,gBAAgB;EAC9B;AACF;AAACC,OAAA,CAAAN,cAAA,GAAAA,cAAA"}
@@ -0,0 +1,186 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.codeZero = exports.codeUppercaseF = exports.codeUppercaseE = exports.codeUppercaseA = exports.codeTab = exports.codeSpace = exports.codeSlash = exports.codeSemicolon = exports.codeReturn = exports.codeQuote = exports.codePlus = exports.codeOpeningBracket = exports.codeOpeningBrace = exports.codeOpenParenthesis = exports.codeNine = exports.codeNewline = exports.codeMinus = exports.codeLowercaseF = exports.codeLowercaseE = exports.codeLowercaseA = exports.codeFormFeed = exports.codeDoubleQuote = exports.codeDot = exports.codeComma = exports.codeColon = exports.codeClosingBracket = exports.codeClosingBrace = exports.codeCloseParenthesis = exports.codeBackspace = exports.codeBackslash = exports.codeAsterisk = void 0;
7
+ exports.endsWithCommaOrNewline = endsWithCommaOrNewline;
8
+ exports.insertBeforeLastWhitespace = insertBeforeLastWhitespace;
9
+ exports.isControlCharacter = isControlCharacter;
10
+ exports.isDelimiter = isDelimiter;
11
+ exports.isDigit = isDigit;
12
+ exports.isDoubleQuote = isDoubleQuote;
13
+ exports.isDoubleQuoteLike = isDoubleQuoteLike;
14
+ exports.isHex = isHex;
15
+ exports.isQuote = isQuote;
16
+ exports.isSingleQuote = isSingleQuote;
17
+ exports.isSingleQuoteLike = isSingleQuoteLike;
18
+ exports.isSpecialWhitespace = isSpecialWhitespace;
19
+ exports.isStartOfValue = isStartOfValue;
20
+ exports.isValidStringCharacter = isValidStringCharacter;
21
+ exports.isWhitespace = isWhitespace;
22
+ exports.nextNonWhiteSpaceCharacter = nextNonWhiteSpaceCharacter;
23
+ exports.removeAtIndex = removeAtIndex;
24
+ exports.stripLastOccurrence = stripLastOccurrence;
25
+ const codeBackslash = exports.codeBackslash = 0x5c; // "\"
26
+ const codeSlash = exports.codeSlash = 0x2f; // "/"
27
+ const codeAsterisk = exports.codeAsterisk = 0x2a; // "*"
28
+ const codeOpeningBrace = exports.codeOpeningBrace = 0x7b; // "{"
29
+ const codeClosingBrace = exports.codeClosingBrace = 0x7d; // "}"
30
+ const codeOpeningBracket = exports.codeOpeningBracket = 0x5b; // "["
31
+ const codeClosingBracket = exports.codeClosingBracket = 0x5d; // "]"
32
+ const codeOpenParenthesis = exports.codeOpenParenthesis = 0x28; // "("
33
+ const codeCloseParenthesis = exports.codeCloseParenthesis = 0x29; // ")"
34
+ const codeSpace = exports.codeSpace = 0x20; // " "
35
+ const codeNewline = exports.codeNewline = 0xa; // "\n"
36
+ const codeTab = exports.codeTab = 0x9; // "\t"
37
+ const codeReturn = exports.codeReturn = 0xd; // "\r"
38
+ const codeBackspace = exports.codeBackspace = 0x08; // "\b"
39
+ const codeFormFeed = exports.codeFormFeed = 0x0c; // "\f"
40
+ const codeDoubleQuote = exports.codeDoubleQuote = 0x0022; // "
41
+ const codePlus = exports.codePlus = 0x2b; // "+"
42
+ const codeMinus = exports.codeMinus = 0x2d; // "-"
43
+ const codeQuote = exports.codeQuote = 0x27; // "'"
44
+ const codeZero = exports.codeZero = 0x30; // "0"
45
+ const codeNine = exports.codeNine = 0x39; // "9"
46
+ const codeComma = exports.codeComma = 0x2c; // ","
47
+ const codeDot = exports.codeDot = 0x2e; // "." (dot, period)
48
+ const codeColon = exports.codeColon = 0x3a; // ":"
49
+ const codeSemicolon = exports.codeSemicolon = 0x3b; // ";"
50
+ const codeUppercaseA = exports.codeUppercaseA = 0x41; // "A"
51
+ const codeLowercaseA = exports.codeLowercaseA = 0x61; // "a"
52
+ const codeUppercaseE = exports.codeUppercaseE = 0x45; // "E"
53
+ const codeLowercaseE = exports.codeLowercaseE = 0x65; // "e"
54
+ const codeUppercaseF = exports.codeUppercaseF = 0x46; // "F"
55
+ const codeLowercaseF = exports.codeLowercaseF = 0x66; // "f"
56
+ const codeNonBreakingSpace = 0xa0;
57
+ const codeEnQuad = 0x2000;
58
+ const codeHairSpace = 0x200a;
59
+ const codeNarrowNoBreakSpace = 0x202f;
60
+ const codeMediumMathematicalSpace = 0x205f;
61
+ const codeIdeographicSpace = 0x3000;
62
+ const codeDoubleQuoteLeft = 0x201c; // “
63
+ const codeDoubleQuoteRight = 0x201d; // ”
64
+ const codeQuoteLeft = 0x2018; // ‘
65
+ const codeQuoteRight = 0x2019; // ’
66
+ const codeGraveAccent = 0x0060; // `
67
+ const codeAcuteAccent = 0x00b4; // ´
68
+
69
+ function isHex(code) {
70
+ return code >= codeZero && code <= codeNine || code >= codeUppercaseA && code <= codeUppercaseF || code >= codeLowercaseA && code <= codeLowercaseF;
71
+ }
72
+ function isDigit(code) {
73
+ return code >= codeZero && code <= codeNine;
74
+ }
75
+ function isValidStringCharacter(code) {
76
+ return code >= 0x20 && code <= 0x10ffff;
77
+ }
78
+ function isDelimiter(char) {
79
+ return regexDelimiter.test(char) || isQuote(char.charCodeAt(0));
80
+ }
81
+ const regexDelimiter = /^[,:[\]/{}()\n+]$/;
82
+ function isStartOfValue(char) {
83
+ return regexStartOfValue.test(char) || char && isQuote(char.charCodeAt(0));
84
+ }
85
+
86
+ // alpha, number, minus, or opening bracket or brace
87
+ const regexStartOfValue = /^[[{\w-]$/;
88
+ function isControlCharacter(code) {
89
+ return code === codeNewline || code === codeReturn || code === codeTab || code === codeBackspace || code === codeFormFeed;
90
+ }
91
+
92
+ /**
93
+ * Check if the given character is a whitespace character like space, tab, or
94
+ * newline
95
+ */
96
+ function isWhitespace(code) {
97
+ return code === codeSpace || code === codeNewline || code === codeTab || code === codeReturn;
98
+ }
99
+
100
+ /**
101
+ * Check if the given character is a special whitespace character, some
102
+ * unicode variant
103
+ */
104
+ function isSpecialWhitespace(code) {
105
+ return code === codeNonBreakingSpace || code >= codeEnQuad && code <= codeHairSpace || code === codeNarrowNoBreakSpace || code === codeMediumMathematicalSpace || code === codeIdeographicSpace;
106
+ }
107
+
108
+ /**
109
+ * Test whether the given character is a quote or double quote character.
110
+ * Also tests for special variants of quotes.
111
+ */
112
+ function isQuote(code) {
113
+ // the first check double quotes, since that occurs most often
114
+ return isDoubleQuoteLike(code) || isSingleQuoteLike(code);
115
+ }
116
+
117
+ /**
118
+ * Test whether the given character is a double quote character.
119
+ * Also tests for special variants of double quotes.
120
+ */
121
+ function isDoubleQuoteLike(code) {
122
+ // the first check double quotes, since that occurs most often
123
+ return code === codeDoubleQuote || code === codeDoubleQuoteLeft || code === codeDoubleQuoteRight;
124
+ }
125
+
126
+ /**
127
+ * Test whether the given character is a double quote character.
128
+ * Does NOT test for special variants of double quotes.
129
+ */
130
+ function isDoubleQuote(code) {
131
+ return code === codeDoubleQuote;
132
+ }
133
+
134
+ /**
135
+ * Test whether the given character is a single quote character.
136
+ * Also tests for special variants of single quotes.
137
+ */
138
+ function isSingleQuoteLike(code) {
139
+ return code === codeQuote || code === codeQuoteLeft || code === codeQuoteRight || code === codeGraveAccent || code === codeAcuteAccent;
140
+ }
141
+
142
+ /**
143
+ * Test whether the given character is a single quote character.
144
+ * Does NOT test for special variants of single quotes.
145
+ */
146
+ function isSingleQuote(code) {
147
+ return code === codeQuote;
148
+ }
149
+
150
+ /**
151
+ * Strip last occurrence of textToStrip from text
152
+ */
153
+ function stripLastOccurrence(text, textToStrip) {
154
+ let stripRemainingText = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
155
+ const index = text.lastIndexOf(textToStrip);
156
+ return index !== -1 ? text.substring(0, index) + (stripRemainingText ? '' : text.substring(index + 1)) : text;
157
+ }
158
+ function insertBeforeLastWhitespace(text, textToInsert) {
159
+ let index = text.length;
160
+ if (!isWhitespace(text.charCodeAt(index - 1))) {
161
+ // no trailing whitespaces
162
+ return text + textToInsert;
163
+ }
164
+ while (isWhitespace(text.charCodeAt(index - 1))) {
165
+ index--;
166
+ }
167
+ return text.substring(0, index) + textToInsert + text.substring(index);
168
+ }
169
+ function removeAtIndex(text, start, count) {
170
+ return text.substring(0, start) + text.substring(start + count);
171
+ }
172
+
173
+ /**
174
+ * Test whether a string ends with a newline or comma character and optional whitespace
175
+ */
176
+ function endsWithCommaOrNewline(text) {
177
+ return /[,\n][ \t\r]*$/.test(text);
178
+ }
179
+ function nextNonWhiteSpaceCharacter(text, start) {
180
+ let i = start;
181
+ while (isWhitespace(text.charCodeAt(i))) {
182
+ i++;
183
+ }
184
+ return text.charAt(i);
185
+ }
186
+ //# sourceMappingURL=stringUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stringUtils.js","names":["codeBackslash","exports","codeSlash","codeAsterisk","codeOpeningBrace","codeClosingBrace","codeOpeningBracket","codeClosingBracket","codeOpenParenthesis","codeCloseParenthesis","codeSpace","codeNewline","codeTab","codeReturn","codeBackspace","codeFormFeed","codeDoubleQuote","codePlus","codeMinus","codeQuote","codeZero","codeNine","codeComma","codeDot","codeColon","codeSemicolon","codeUppercaseA","codeLowercaseA","codeUppercaseE","codeLowercaseE","codeUppercaseF","codeLowercaseF","codeNonBreakingSpace","codeEnQuad","codeHairSpace","codeNarrowNoBreakSpace","codeMediumMathematicalSpace","codeIdeographicSpace","codeDoubleQuoteLeft","codeDoubleQuoteRight","codeQuoteLeft","codeQuoteRight","codeGraveAccent","codeAcuteAccent","isHex","code","isDigit","isValidStringCharacter","isDelimiter","char","regexDelimiter","test","isQuote","charCodeAt","isStartOfValue","regexStartOfValue","isControlCharacter","isWhitespace","isSpecialWhitespace","isDoubleQuoteLike","isSingleQuoteLike","isDoubleQuote","isSingleQuote","stripLastOccurrence","text","textToStrip","stripRemainingText","arguments","length","undefined","index","lastIndexOf","substring","insertBeforeLastWhitespace","textToInsert","removeAtIndex","start","count","endsWithCommaOrNewline","nextNonWhiteSpaceCharacter","i","charAt"],"sources":["../../../src/utils/stringUtils.ts"],"sourcesContent":["export const codeBackslash = 0x5c // \"\\\"\nexport const codeSlash = 0x2f // \"/\"\nexport const codeAsterisk = 0x2a // \"*\"\nexport const codeOpeningBrace = 0x7b // \"{\"\nexport const codeClosingBrace = 0x7d // \"}\"\nexport const codeOpeningBracket = 0x5b // \"[\"\nexport const codeClosingBracket = 0x5d // \"]\"\nexport const codeOpenParenthesis = 0x28 // \"(\"\nexport const codeCloseParenthesis = 0x29 // \")\"\nexport const codeSpace = 0x20 // \" \"\nexport const codeNewline = 0xa // \"\\n\"\nexport const codeTab = 0x9 // \"\\t\"\nexport const codeReturn = 0xd // \"\\r\"\nexport const codeBackspace = 0x08 // \"\\b\"\nexport const codeFormFeed = 0x0c // \"\\f\"\nexport const codeDoubleQuote = 0x0022 // \"\nexport const codePlus = 0x2b // \"+\"\nexport const codeMinus = 0x2d // \"-\"\nexport const codeQuote = 0x27 // \"'\"\nexport const codeZero = 0x30 // \"0\"\nexport const codeNine = 0x39 // \"9\"\nexport const codeComma = 0x2c // \",\"\nexport const codeDot = 0x2e // \".\" (dot, period)\nexport const codeColon = 0x3a // \":\"\nexport const codeSemicolon = 0x3b // \";\"\nexport const codeUppercaseA = 0x41 // \"A\"\nexport const codeLowercaseA = 0x61 // \"a\"\nexport const codeUppercaseE = 0x45 // \"E\"\nexport const codeLowercaseE = 0x65 // \"e\"\nexport const codeUppercaseF = 0x46 // \"F\"\nexport const codeLowercaseF = 0x66 // \"f\"\nconst codeNonBreakingSpace = 0xa0\nconst codeEnQuad = 0x2000\nconst codeHairSpace = 0x200a\nconst codeNarrowNoBreakSpace = 0x202f\nconst codeMediumMathematicalSpace = 0x205f\nconst codeIdeographicSpace = 0x3000\nconst codeDoubleQuoteLeft = 0x201c // “\nconst codeDoubleQuoteRight = 0x201d // ”\nconst codeQuoteLeft = 0x2018 // ‘\nconst codeQuoteRight = 0x2019 // ’\nconst codeGraveAccent = 0x0060 // `\nconst codeAcuteAccent = 0x00b4 // ´\n\nexport function isHex(code: number): boolean {\n return (\n (code >= codeZero && code <= codeNine) ||\n (code >= codeUppercaseA && code <= codeUppercaseF) ||\n (code >= codeLowercaseA && code <= codeLowercaseF)\n )\n}\n\nexport function isDigit(code: number): boolean {\n return code >= codeZero && code <= codeNine\n}\n\nexport function isValidStringCharacter(code: number): boolean {\n return code >= 0x20 && code <= 0x10ffff\n}\n\nexport function isDelimiter(char: string): boolean {\n return regexDelimiter.test(char) || isQuote(char.charCodeAt(0))\n}\n\nconst regexDelimiter = /^[,:[\\]/{}()\\n+]$/\nexport function isStartOfValue(char: string): boolean {\n return regexStartOfValue.test(char) || (char && isQuote(char.charCodeAt(0)))\n}\n\n// alpha, number, minus, or opening bracket or brace\nconst regexStartOfValue = /^[[{\\w-]$/\n\nexport function isControlCharacter(code: number) {\n return (\n code === codeNewline ||\n code === codeReturn ||\n code === codeTab ||\n code === codeBackspace ||\n code === codeFormFeed\n )\n}\n\n/**\n * Check if the given character is a whitespace character like space, tab, or\n * newline\n */\nexport function isWhitespace(code: number): boolean {\n return code === codeSpace || code === codeNewline || 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(code: number): boolean {\n return (\n code === codeNonBreakingSpace ||\n (code >= codeEnQuad && code <= codeHairSpace) ||\n code === codeNarrowNoBreakSpace ||\n code === codeMediumMathematicalSpace ||\n code === codeIdeographicSpace\n )\n}\n\n/**\n * Test whether the given character is a quote or double quote character.\n * Also tests for special variants of quotes.\n */\nexport function isQuote(code: number): boolean {\n // the first check double quotes, since that occurs most often\n return isDoubleQuoteLike(code) || isSingleQuoteLike(code)\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(code: number): boolean {\n // the first check double quotes, since that occurs most often\n return code === codeDoubleQuote || code === codeDoubleQuoteLeft || code === codeDoubleQuoteRight\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(code: number): boolean {\n return code === codeDoubleQuote\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(code: number): boolean {\n return (\n code === codeQuote ||\n code === codeQuoteLeft ||\n code === codeQuoteRight ||\n code === codeGraveAccent ||\n code === codeAcuteAccent\n )\n}\n\n/**\n * Test whether the given character is a single quote character.\n * Does NOT test for special variants of single quotes.\n */\nexport function isSingleQuote(code: number): boolean {\n return code === codeQuote\n}\n\n/**\n * Strip last occurrence of textToStrip from text\n */\nexport function stripLastOccurrence(\n text: string,\n textToStrip: string,\n stripRemainingText = false\n): string {\n const index = text.lastIndexOf(textToStrip)\n return index !== -1\n ? text.substring(0, index) + (stripRemainingText ? '' : text.substring(index + 1))\n : text\n}\n\nexport function insertBeforeLastWhitespace(text: string, textToInsert: string): string {\n let index = text.length\n\n if (!isWhitespace(text.charCodeAt(index - 1))) {\n // no trailing whitespaces\n return text + textToInsert\n }\n\n while (isWhitespace(text.charCodeAt(index - 1))) {\n index--\n }\n\n return text.substring(0, index) + textToInsert + text.substring(index)\n}\n\nexport function removeAtIndex(text: string, start: number, count: number) {\n return text.substring(0, start) + text.substring(start + count)\n}\n\n/**\n * Test whether a string ends with a newline or comma character and optional whitespace\n */\nexport function endsWithCommaOrNewline(text: string): boolean {\n return /[,\\n][ \\t\\r]*$/.test(text)\n}\n\nexport function nextNonWhiteSpaceCharacter(text: string, start: number): string {\n let i = start\n\n while (isWhitespace(text.charCodeAt(i))) {\n i++\n }\n\n return text.charAt(i)\n}\n"],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ // Cross-platform, non-streaming JavaScript API
2
+ import { jsonfixer } from './regular/jsonfixer.js';
3
+ export { jsonfixer };
4
+ export { JSONFixerError } from './utils/JSONFixerError.js';
5
+ export function getNormalizedString(value) {
6
+ const text = typeof value === 'string' ? value.trim() : '';
7
+ if (!text) {
8
+ return '';
9
+ }
10
+ try {
11
+ return jsonfixer(text);
12
+ } catch {
13
+ return text;
14
+ }
15
+ }
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["jsonfixer","JSONFixerError","getNormalizedString","value","text","trim"],"sources":["../../src/index.ts"],"sourcesContent":["// Cross-platform, non-streaming JavaScript API\nimport { jsonfixer } from './regular/jsonfixer.js'\nexport { jsonfixer }\nexport { JSONFixerError } from './utils/JSONFixerError.js'\n\nexport function getNormalizedString(value: string): string {\n const text = typeof value === 'string' ? value.trim() : ''\n if (!text) {\n return ''\n }\n\n try {\n return jsonfixer(text)\n } catch {\n return text\n }\n}\n"],"mappings":"AAAC;AACD,SAASA,SAAS,QAAQ,wBAAwB;AAClD,SAASA,SAAS;AAClB,SAASC,cAAc,QAAQ,2BAA2B;AAE1D,OAAO,SAASC,mBAAmBA,CAACC,KAAa,EAAU;EACzD,MAAMC,IAAI,GAAG,OAAOD,KAAK,KAAK,QAAQ,GAAGA,KAAK,CAACE,IAAI,CAAC,CAAC,GAAG,EAAE;EAC1D,IAAI,CAACD,IAAI,EAAE;IACT,OAAO,EAAE;EACX;EAEA,IAAI;IACF,OAAOJ,SAAS,CAACI,IAAI,CAAC;EACxB,CAAC,CAAC,MAAM;IACN,OAAOA,IAAI;EACb;AACF"}