@prantlf/jsonlint 11.5.0 → 11.7.0
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.
- package/README.md +6 -1
- package/lib/cli.js +8 -5
- package/lib/jsonlint.d.ts +3 -0
- package/lib/jsonlint.js +19 -1
- package/lib/validator.js +1 -0
- package/package.json +14 -14
- package/web/ajv.min.js.map +1 -1
- package/web/formatter.min.js.map +1 -1
- package/web/jsonlint.min.js +1 -1
- package/web/jsonlint.min.js.map +1 -1
- package/web/printer.min.js.map +1 -1
- package/web/schema-drafts.min.js.map +1 -1
- package/web/sorter.min.js.map +1 -1
- package/web/validator.min.js +1 -1
- package/web/validator.min.js.map +1 -1
package/web/formatter.min.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"formatter.js","names":["global","factory","exports","module","define","amd","self","jsonlintFormatter","this","repeat","s","count","Array","join","format","json","indent","i","length","indentString","undefined","outputString","indentLevel","inString","currentChar","charAt","Object","defineProperty","value"],"sources":["lib/formatter.js"],"sourcesContent":["(function (global, factory) {\n // eslint-disable-next-line no-unused-expressions, multiline-ternary\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports)\n // eslint-disable-next-line no-undef, multiline-ternary\n : typeof define === 'function' && define.amd ? define('jsonlint-formatter', ['exports'], factory)\n // eslint-disable-next-line no-undef\n : (global = global || self, factory(global.jsonlintFormatter = {}))\n}(this, function (exports) {\n 'use strict'\n\n /**\n * Manual formatter taken straight from https://github.com/umbrae/jsonlintdotcom\n *\n * jsl.format - Provide json reformatting in a character-by-character approach,\n * so that even invalid JSON may be reformatted (to the best of its ability).\n *\n */\n\n function repeat (s, count) {\n return new Array(count + 1).join(s)\n }\n\n function format (json, indent) {\n let i = 0\n let length = 0\n const indentString = indent !== undefined\n ? typeof indent === 'number'\n ? new Array(indent + 1).join(' ')\n : indent\n : ' '\n let outputString = ''\n let indentLevel = 0\n let inString\n let currentChar\n\n for (i = 0, length = json.length; i < length; i += 1) {\n currentChar = json.charAt(i)\n switch (currentChar) {\n case '{':\n case '[':\n if (!inString) {\n outputString += currentChar + '\\n' + repeat(indentString, indentLevel + 1)\n indentLevel += 1\n } else {\n outputString += currentChar\n }\n break\n case '}':\n case ']':\n if (!inString) {\n indentLevel -= 1\n outputString += '\\n' + repeat(indentString, indentLevel) + currentChar\n } else {\n outputString += currentChar\n }\n break\n case ',':\n if (!inString) {\n outputString += ',\\n' + repeat(indentString, indentLevel)\n } else {\n outputString += currentChar\n }\n break\n case ':':\n if (!inString) {\n outputString += ': '\n } else {\n outputString += currentChar\n }\n break\n case ' ':\n case '\\n':\n case '\\t':\n if (inString) {\n outputString += currentChar\n }\n break\n case '\"':\n if (i > 0 && json.charAt(i - 1) !== '\\\\') {\n inString = !inString\n }\n outputString += currentChar\n break\n default:\n outputString += currentChar\n break\n }\n }\n\n return outputString\n }\n\n exports.format = format\n\n Object.defineProperty(exports, '__esModule', { value: true })\n}))\n"],"mappings":"CAAC,SAAUA,OAAQC,gBAEVC,UAAY,iBAAmBC,SAAW,YAAcF,QAAQC,gBAE5DE,SAAW,YAAcA,OAAOC,IAAMD,OAAO,qBAAsB,CAAC,WAAYH,UAEpFD,OAASA,QAAUM,KAAML,QAAQD,OAAOO,kBAAoB,CAAC,GACtE,EAPA,CAOEC,MAAM,SAAUN,SAChB,aAUA,SAASO,OAAQC,EAAGC,OAClB,OAAO,IAAIC,MAAMD,MAAQ,GAAGE,KAAKH,EACnC,CAEA,SAASI,OAAQC,KAAMC,QACrB,IAAIC,EAAI,EACR,IAAIC,OAAS,EACb,MAAMC,aAAeH,SAAWI,iBACrBJ,SAAW,SAChB,IAAIJ,MAAMI,OAAS,GAAGH,KAAK,KAC3BG,OACF,KACJ,IAAIK,aAAe,GACnB,IAAIC,YAAc,EAClB,IAAIC,SACJ,IAAIC,YAEJ,IAAKP,EAAI,EAAGC,OAASH,KAAKG,OAAQD,EAAIC,OAAQD,GAAK,EAAG,CACpDO,YAAcT,KAAKU,OAAOR,GAC1B,OAAQO,aACN,IAAK,IACL,IAAK,IACH,IAAKD,SAAU,CACbF,cAAgBG,YAAc,KAAOf,OAAOU,aAAcG,YAAc,GACxEA,aAAe,CACjB,KAAO,CACLD,cAAgBG,WAClB,CACA,MACF,IAAK,IACL,IAAK,IACH,IAAKD,SAAU,CACbD,aAAe,EACfD,cAAgB,KAAOZ,OAAOU,aAAcG,aAAeE,WAC7D,KAAO,CACLH,cAAgBG,WAClB,CACA,MACF,IAAK,IACH,IAAKD,SAAU,CACbF,cAAgB,MAAQZ,OAAOU,aAAcG,YAC/C,KAAO,CACLD,cAAgBG,WAClB,CACA,MACF,IAAK,IACH,IAAKD,SAAU,CACbF,cAAgB,IAClB,KAAO,CACLA,cAAgBG,WAClB,CACA,MACF,IAAK,IACL,IAAK,KACL,IAAK,KACH,GAAID,SAAU,CACZF,cAAgBG,WAClB,CACA,MACF,IAAK,IACH,GAAIP,EAAI,GAAKF,KAAKU,OAAOR,EAAI,KAAO,KAAM,CACxCM,UAAYA,QACd,CACAF,cAAgBG,YAChB,MACF,QACEH,cAAgBG,YAChB,MAEN,CAEA,OAAOH,YACT,CAEAnB,QAAQY,OAASA,OAEjBY,OAAOC,eAAezB,QAAS,aAAc,CAAE0B,MAAO,MACxD"}
|
package/web/jsonlint.min.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
(function(global,factory){typeof exports==="object"&&typeof module!=="undefined"?factory(exports):typeof define==="function"&&define.amd?define("jsonlint",["exports"],factory):(global=global||self,factory(global.jsonlint={}))})(this,(function(exports){"use strict";const Uni={isWhiteSpace:function isWhiteSpace(x){return x===" "||x===" "||x==="\ufeff"||x>="\t"&&x<="\r"||x===" "||x>=" "&&x<=" "||x==="\u2028"||x==="\u2029"||x===" "||x===" "||x===" "},isWhiteSpaceJSON:function isWhiteSpaceJSON(x){return x===" "||x==="\t"||x==="\n"||x==="\r"},isLineTerminator:function isLineTerminator(x){return x==="\n"||x==="\r"||x==="\u2028"||x==="\u2029"},isLineTerminatorJSON:function isLineTerminatorJSON(x){return x==="\n"||x==="\r"},isIdentifierStart:function isIdentifierStart(x){return x==="$"||x==="_"||x>="A"&&x<="Z"||x>="a"&&x<="z"||x>=""&&Uni.NonAsciiIdentifierStart.test(x)},isIdentifierPart:function isIdentifierPart(x){return x==="$"||x==="_"||x>="A"&&x<="Z"||x>="a"&&x<="z"||x>="0"&&x<="9"||x>=""&&Uni.NonAsciiIdentifierPart.test(x)},NonAsciiIdentifierStart:/[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F0\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]/,NonAsciiIdentifierPart:/[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0\u08A2-\u08AC\u08E4-\u08FE\u0900-\u0963\u0966-\u096F\u0971-\u0977\u0979-\u097F\u0981-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C01-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58\u0C59\u0C60-\u0C63\u0C66-\u0C6F\u0C82\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D02\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D60-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F0\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191C\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1D00-\u1DE6\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA697\uA69F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A\uAA7B\uAA80-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE26\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]/};function isHexDigit(x){return x>="0"&&x<="9"||x>="A"&&x<="F"||x>="a"&&x<="f"}function isOctDigit(x){return x>="0"&&x<="7"}function isDecDigit(x){return x>="0"&&x<="9"}const unescapeMap={"'":"'",'"':'"',"\\":"\\",b:"\b",f:"\f",n:"\n",r:"\r",t:"\t",v:"\v","/":"/"};function parseInternal(input,options){if(typeof input!=="string"||!(input instanceof String)){input=String(input)}const json5=options.mode==="json5";const ignoreComments=options.ignoreComments||options.mode==="cjson"||json5;const ignoreTrailingCommas=options.ignoreTrailingCommas||json5;const allowSingleQuotedStrings=options.allowSingleQuotedStrings||json5;const allowDuplicateObjectKeys=options.allowDuplicateObjectKeys;const reviver=options.reviver;const tokenize=options.tokenize;const rawTokens=options.rawTokens;const tokenLocations=options.tokenLocations;const tokenPaths=options.tokenPaths;const isLineTerminator=json5?Uni.isLineTerminator:Uni.isLineTerminatorJSON;const isWhiteSpace=json5?Uni.isWhiteSpace:Uni.isWhiteSpaceJSON;const inputLength=input.length;let lineNumber=0;let lineStart=0;let position=0;const tokens=[];let startToken;let endToken;let tokenPath;if(tokenize){let tokenOffset=null;let tokenLine;let tokenColumn;startToken=function(){if(tokenOffset!==null)throw Error("internal error, token overlap");tokenLine=lineNumber+1;tokenColumn=position-lineStart+1;tokenOffset=position};endToken=function(type,value){if(tokenOffset!==position){const token={type:type};if(rawTokens){token.raw=input.substr(tokenOffset,position-tokenOffset)}if(value!==undefined){token.value=value}if(tokenLocations){token.location={start:{column:tokenColumn,line:tokenLine,offset:tokenOffset}}}if(tokenPaths){token.path=tokenPath.slice()}tokens.push(token)}tokenOffset=null;return value};tokenPaths&&(tokenPath=[])}function generateMessage(){let message;if(position<inputLength){const token=JSON.stringify(input[position]);message="Unexpected token "+token}else{message="Unexpected end of input"}return message}function createError(message){const column=position-lineStart+1;++lineNumber;const texts=getTexts(message,input,position,lineNumber,column);const error=SyntaxError(texts.message);error.reason=message;error.excerpt=texts.excerpt;error.pointer=texts.pointer;error.location={start:{column:column,line:lineNumber,offset:position}};return error}function fail(message){if(!message){message=generateMessage()}const error=createError(message);throw error}function newLine(char){if(char==="\r"&&input[position]==="\n"){++position}lineStart=position;++lineNumber}function parseGeneric(){if(position<inputLength){startToken&&startToken();const char=input[position++];if(char==='"'||char==="'"&&allowSingleQuotedStrings){const string=parseString(char);endToken&&endToken("literal",string);return string}else if(char==="{"){endToken&&endToken("symbol","{");return parseObject()}else if(char==="["){endToken&&endToken("symbol","[");return parseArray()}else if(char==="-"||char==="."||isDecDigit(char)||json5&&(char==="+"||char==="I"||char==="N")){const number=parseNumber();endToken&&endToken("literal",number);return number}else if(char==="n"){parseKeyword("null");endToken&&endToken("literal",null);return null}else if(char==="t"){parseKeyword("true");endToken&&endToken("literal",true);return true}else if(char==="f"){parseKeyword("false");endToken&&endToken("literal",false);return false}else{--position;endToken&&endToken();return undefined}}}function parseKey(){let result;if(position<inputLength){startToken&&startToken();const char=input[position++];if(char==='"'||char==="'"&&allowSingleQuotedStrings){const string=parseString(char);endToken&&endToken("literal",string);return string}else if(char==="{"){endToken&&endToken("symbol","{");return parseObject()}else if(char==="["){endToken&&endToken("symbol","[");return parseArray()}else if(char==="."||isDecDigit(char)){const number=parseNumber(true);endToken&&endToken("literal",number);return number}else if(json5&&Uni.isIdentifierStart(char)||char==="\\"&&input[position]==="u"){const rollback=position-1;result=parseIdentifier();if(result===undefined){position=rollback;endToken&&endToken();return undefined}else{endToken&&endToken("literal",result);return result}}else{--position;endToken&&endToken();return undefined}}}function skipWhiteSpace(){let insideWhiteSpace;function startWhiteSpace(){if(!insideWhiteSpace){insideWhiteSpace=true;--position;startToken();++position}}function endWhiteSpace(){if(insideWhiteSpace){insideWhiteSpace=false;endToken("whitespace")}}while(position<inputLength){const char=input[position++];if(isLineTerminator(char)){startToken&&startWhiteSpace();newLine(char)}else if(isWhiteSpace(char)){startToken&&startWhiteSpace()}else if(char==="/"&&ignoreComments&&(input[position]==="/"||input[position]==="*")){if(startToken){--position;endWhiteSpace();startToken();++position}skipComment(input[position++]==="*");endToken&&endToken("comment")}else{--position;break}}endToken&&endWhiteSpace()}function skipComment(multiLine){while(position<inputLength){const char=input[position++];if(isLineTerminator(char)){if(!multiLine){--position;return}newLine(char)}else if(char==="*"&&multiLine){if(input[position]==="/"){++position;return}}else{}}if(multiLine){fail("Unclosed multiline comment")}}function parseKeyword(keyword){const startPosition=position;for(let i=1,keywordLength=keyword.length;i<keywordLength;++i){if(position>=inputLength||keyword[i]!==input[position]){position=startPosition-1;fail()}++position}}function parseObject(){const result={};const emptyObject={};let isNotEmpty=false;while(position<inputLength){skipWhiteSpace();const key=parseKey();if(allowDuplicateObjectKeys===false&&result[key]){fail('Duplicate key: "'+key+'"')}skipWhiteSpace();startToken&&startToken();let char=input[position++];endToken&&endToken("symbol",char);if(char==="}"&&key===undefined){if(!ignoreTrailingCommas&&isNotEmpty){--position;fail("Trailing comma in object")}return result}else if(char===":"&&key!==undefined){skipWhiteSpace();tokenPath&&tokenPath.push(key);let value=parseGeneric();tokenPath&&tokenPath.pop();if(value===undefined)fail('No value found for key "'+key+'"');if(typeof key!=="string"){if(!json5||typeof key!=="number"){fail('Wrong key type: "'+key+'"')}}if(key in emptyObject||emptyObject[key]!=null){}else{if(reviver){value=reviver(key,value)}if(value!==undefined){isNotEmpty=true;result[key]=value}}skipWhiteSpace();startToken&&startToken();char=input[position++];endToken&&endToken("symbol",char);if(char===","){continue}else if(char==="}"){return result}else{fail()}}else{--position;fail()}}fail()}function parseArray(){const result=[];while(position<inputLength){skipWhiteSpace();tokenPath&&tokenPath.push(result.length);let item=parseGeneric();tokenPath&&tokenPath.pop();skipWhiteSpace();startToken&&startToken();const char=input[position++];endToken&&endToken("symbol",char);if(item!==undefined){if(reviver){item=reviver(String(result.length),item)}if(item===undefined){++result.length;item=true}else{result.push(item)}}if(char===","){if(item===undefined){fail("Elisions are not supported")}}else if(char==="]"){if(!ignoreTrailingCommas&&item===undefined&&result.length){--position;fail("Trailing comma in array")}return result}else{--position;fail()}}}function parseNumber(){--position;let start=position;let char=input[position++];const toNumber=function(isOctal){const string=input.substr(start,position-start);let result;if(isOctal){result=parseInt(string.replace(/^0o?/,""),8)}else{result=Number(string)}if(Number.isNaN(result)){--position;fail('Bad numeric literal - "'+input.substr(start,position-start+1)+'"')}else if(!json5&&!string.match(/^-?(0|[1-9][0-9]*)(\.[0-9]+)?(e[+-]?[0-9]+)?$/i)){--position;fail('Non-json numeric literal - "'+input.substr(start,position-start+1)+'"')}else{return result}};if(char==="-"||char==="+"&&json5){char=input[position++]}if(char==="N"&&json5){parseKeyword("NaN");return NaN}if(char==="I"&&json5){parseKeyword("Infinity");return toNumber()}if(char>="1"&&char<="9"){while(position<inputLength&&isDecDigit(input[position])){++position}char=input[position++]}if(char==="0"){char=input[position++];const isOctal=char==="o"||char==="O"||isOctDigit(char);const isHex=char==="x"||char==="X";if(json5&&(isOctal||isHex)){while(position<inputLength&&(isHex?isHexDigit:isOctDigit)(input[position])){++position}let sign=1;if(input[start]==="-"){sign=-1;++start}else if(input[start]==="+"){++start}return sign*toNumber(isOctal)}}if(char==="."){while(position<inputLength&&isDecDigit(input[position])){++position}char=input[position++]}if(char==="e"||char==="E"){char=input[position++];if(char==="-"||char==="+"){++position}while(position<inputLength&&isDecDigit(input[position])){++position}char=input[position++]}--position;return toNumber()}function parseIdentifier(){--position;let result="";while(position<inputLength){let char=input[position++];if(char==="\\"&&input[position]==="u"&&isHexDigit(input[position+1])&&isHexDigit(input[position+2])&&isHexDigit(input[position+3])&&isHexDigit(input[position+4])){char=String.fromCharCode(parseInt(input.substr(position+1,4),16));position+=5}if(result.length){if(Uni.isIdentifierPart(char)){result+=char}else{--position;return result}}else{if(Uni.isIdentifierStart(char)){result+=char}else{return undefined}}}fail()}function parseString(endChar){let result="";while(position<inputLength){let char=input[position++];if(char===endChar){return result}else if(char==="\\"){if(position>=inputLength){fail()}char=input[position++];if(unescapeMap[char]&&(json5||char!=="v"&&(char!=="'"||allowSingleQuotedStrings))){result+=unescapeMap[char]}else if(json5&&isLineTerminator(char)){newLine(char)}else if(char==="u"||char==="x"&&json5){const count=char==="u"?4:2;for(let i=0;i<count;++i){if(position>=inputLength){fail()}if(!isHexDigit(input[position])){fail("Bad escape sequence")}position++}result+=String.fromCharCode(parseInt(input.substr(position-count,count),16))}else if(json5&&isOctDigit(char)){let digits;if(char<"4"&&isOctDigit(input[position])&&isOctDigit(input[position+1])){digits=3}else if(isOctDigit(input[position])){digits=2}else{digits=1}position+=digits-1;result+=String.fromCharCode(parseInt(input.substr(position-digits,digits),8))}else if(json5){result+=char}else{--position;fail()}}else if(isLineTerminator(char)){fail()}else{if(!json5&&char.charCodeAt(0)<32){--position;fail("Unexpected control character")}result+=char}}fail()}skipWhiteSpace();let returnValue=parseGeneric();if(returnValue!==undefined||position<inputLength){skipWhiteSpace();if(position>=inputLength){if(reviver){returnValue=reviver("",returnValue)}return tokenize?tokens:returnValue}else{fail()}}else{if(position){fail("No data, only a whitespace")}else{fail("No data, empty input")}}}function parseCustom(input,options){if(typeof options==="function"){options={reviver:options}}else if(!options){options={}}return parseInternal(input,options)}function tokenize(input,options){if(!options){options={}}const oldTokenize=options.tokenize;options.tokenize=true;const tokens=parseInternal(input,options);options.tokenize=oldTokenize;return tokens}function escapePointerToken(token){return token.toString().replace(/~/g,"~0").replace(/\//g,"~1")}function pathToPointer(tokens){if(tokens.length===0){return""}return"/"+tokens.map(escapePointerToken).join("/")}function unescapePointerToken(token){return token.replace(/~1/g,"/").replace(/~0/g,"~")}function pointerToPath(pointer){if(pointer===""){return[]}if(pointer[0]!=="/"){throw new Error('Missing initial "/" in the reference')}return pointer.substr(1).split("/").map(unescapePointerToken)}function getLineAndColumn(input,offset){const lines=input.substr(0,offset).split(/\r?\n/);const line=lines.length;const column=lines[line-1].length+1;return{line:line,column:column}}function getOffset(input,line,column){if(line>1){const breaks=/\r?\n/g;let match;while(match=breaks.exec(input)){if(--line===1){return match.index+column}}}return column-1}function pastInput(input,offset){const start=Math.max(0,offset-20);const previous=input.substr(start,offset-start);return(offset>20?"...":"")+previous.replace(/\r?\n/g,"")}function upcomingInput(input,offset){let start=Math.max(0,offset-20);start+=offset-start;const rest=input.length-start;const next=input.substr(start,Math.min(20,rest));return next.replace(/\r?\n/g,"")+(rest>20?"...":"")}function getPositionContext(input,offset){const past=pastInput(input,offset);const upcoming=upcomingInput(input,offset);const pointer=new Array(past.length+1).join("-")+"^";return{excerpt:past+upcoming,pointer:pointer}}function getReason(error){let message=error.message.replace("JSON.parse: ","").replace("JSON Parse error: ","");const firstCharacter=message.charAt(0);if(firstCharacter>="a"){message=firstCharacter.toUpperCase()+message.substr(1)}return message}function getLocationOnV8(input,reason){const match=/ in JSON at position (\d+)$/.exec(reason);if(match){const offset=+match[1];const location=getLineAndColumn(input,offset);return{offset:offset,line:location.line,column:location.column,reason:reason.substr(0,match.index)}}}function checkUnexpectedEndOnV8(input,reason){const match=/ end of JSON input$/.exec(reason);if(match){const offset=input.length;const location=getLineAndColumn(input,offset);return{offset:offset,line:location.line,column:location.column,reason:reason.substr(0,match.index+4)}}}function getLocationOnSpiderMonkey(input,reason){const match=/ at line (\d+) column (\d+) of the JSON data$/.exec(reason);if(match){const line=+match[1];const column=+match[2];const offset=getOffset(input,line,column);return{offset:offset,line:line,column:column,reason:reason.substr(0,match.index)}}}function getTexts(reason,input,offset,line,column){const position=getPositionContext(input,offset);const excerpt=position.excerpt;let message,pointer;if(typeof line==="number"){pointer=position.pointer;message="Parse error on line "+line+", column "+column+":\n"+excerpt+"\n"+pointer+"\n"+reason}else{message="Parse error in JSON input:\n"+excerpt+"\n"+reason}return{message:message,excerpt:excerpt,pointer:pointer}}function improveNativeError(input,error){let reason=getReason(error);const location=getLocationOnV8(input,reason)||checkUnexpectedEndOnV8(input,reason)||getLocationOnSpiderMonkey(input,reason);let offset,line,column;if(location){offset=location.offset;line=location.line;column=location.column;reason=location.reason}else{offset=0}error.reason=reason;const texts=getTexts(reason,input,offset,line,column);error.message=texts.message;error.excerpt=texts.excerpt;if(texts.pointer){error.pointer=texts.pointer;error.location={start:{column:column,line:line,offset:offset}}}return error}function parseNative(input,reviver){try{return JSON.parse(input,reviver)}catch(error){throw improveNativeError(input,error)}}const isSafari=typeof navigator!=="undefined"&&/Safari/.test(navigator.userAgent)&&/Apple Computer/.test(navigator.vendor);const oldNode=typeof process!=="undefined"&&process.version.startsWith("v4.");function needsCustomParser(options){return options.ignoreComments||options.ignoreTrailingCommas||options.allowSingleQuotedStrings||options.allowDuplicateObjectKeys===false||options.mode==="cjson"||options.mode==="json5"||isSafari||oldNode}function getReviver(options){if(typeof options==="function"){return options}else if(options){return options.reviver}}function parse(input,options){options||(options={});return needsCustomParser(options)?parseCustom(input,options):parseNative(input,getReviver(options))}exports.parse=parse;exports.tokenize=tokenize;exports.pathToPointer=pathToPointer;exports.pointerToPath=pointerToPath;exports.parseNative=parseNative;exports.parseCustom=parseCustom;exports.getErrorTexts=getTexts;Object.defineProperty(exports,"__esModule",{value:true})}));
|
|
1
|
+
(function(global,factory){typeof exports==="object"&&typeof module!=="undefined"?factory(exports):typeof define==="function"&&define.amd?define("jsonlint",["exports"],factory):(global=global||self,factory(global.jsonlint={}))})(this,(function(exports){"use strict";const Uni={isWhiteSpace:function isWhiteSpace(x){return x===" "||x===" "||x==="\ufeff"||x>="\t"&&x<="\r"||x===" "||x>=" "&&x<=" "||x==="\u2028"||x==="\u2029"||x===" "||x===" "||x===" "},isWhiteSpaceJSON:function isWhiteSpaceJSON(x){return x===" "||x==="\t"||x==="\n"||x==="\r"},isLineTerminator:function isLineTerminator(x){return x==="\n"||x==="\r"||x==="\u2028"||x==="\u2029"},isLineTerminatorJSON:function isLineTerminatorJSON(x){return x==="\n"||x==="\r"},isIdentifierStart:function isIdentifierStart(x){return x==="$"||x==="_"||x>="A"&&x<="Z"||x>="a"&&x<="z"||x>=""&&Uni.NonAsciiIdentifierStart.test(x)},isIdentifierPart:function isIdentifierPart(x){return x==="$"||x==="_"||x>="A"&&x<="Z"||x>="a"&&x<="z"||x>="0"&&x<="9"||x>=""&&Uni.NonAsciiIdentifierPart.test(x)},NonAsciiIdentifierStart:/[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F0\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]/,NonAsciiIdentifierPart:/[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0\u08A2-\u08AC\u08E4-\u08FE\u0900-\u0963\u0966-\u096F\u0971-\u0977\u0979-\u097F\u0981-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C01-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58\u0C59\u0C60-\u0C63\u0C66-\u0C6F\u0C82\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D02\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D60-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F0\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191C\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1D00-\u1DE6\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA697\uA69F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A\uAA7B\uAA80-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE26\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]/};function isHexDigit(x){return x>="0"&&x<="9"||x>="A"&&x<="F"||x>="a"&&x<="f"}function isOctDigit(x){return x>="0"&&x<="7"}function isDecDigit(x){return x>="0"&&x<="9"}function isBOM(x){return x.charCodeAt(0)===65279}const unescapeMap={"'":"'",'"':'"',"\\":"\\",b:"\b",f:"\f",n:"\n",r:"\r",t:"\t",v:"\v","/":"/"};function parseInternal(input,options){if(typeof input!=="string"||!(input instanceof String)){input=String(input)}const json5=options.mode==="json5";const ignoreBOM=options.ignoreBOM;const ignoreComments=options.ignoreComments||options.mode==="cjson"||json5;const ignoreTrailingCommas=options.ignoreTrailingCommas||json5;const allowSingleQuotedStrings=options.allowSingleQuotedStrings||json5;const allowDuplicateObjectKeys=options.allowDuplicateObjectKeys;const reviver=options.reviver;const tokenize=options.tokenize;const rawTokens=options.rawTokens;const tokenLocations=options.tokenLocations;const tokenPaths=options.tokenPaths;const isLineTerminator=json5?Uni.isLineTerminator:Uni.isLineTerminatorJSON;const isWhiteSpace=json5?Uni.isWhiteSpace:Uni.isWhiteSpaceJSON;const inputLength=input.length;let lineNumber=0;let lineStart=0;let position=0;const tokens=[];let startToken;let endToken;let tokenPath;if(tokenize){let tokenOffset=null;let tokenLine;let tokenColumn;startToken=function(){if(tokenOffset!==null)throw Error("internal error, token overlap");tokenLine=lineNumber+1;tokenColumn=position-lineStart+1;tokenOffset=position};endToken=function(type,value){if(tokenOffset!==position){const token={type:type};if(rawTokens){token.raw=input.substr(tokenOffset,position-tokenOffset)}if(value!==undefined){token.value=value}if(tokenLocations){token.location={start:{column:tokenColumn,line:tokenLine,offset:tokenOffset}}}if(tokenPaths){token.path=tokenPath.slice()}tokens.push(token)}tokenOffset=null;return value};tokenPaths&&(tokenPath=[])}function generateMessage(){let message;if(position<inputLength){const token=JSON.stringify(input[position]);message="Unexpected token "+token}else{message="Unexpected end of input"}return message}function createError(message){const column=position-lineStart+1;++lineNumber;const texts=getTexts(message,input,position,lineNumber,column);const error=SyntaxError(texts.message);error.reason=message;error.excerpt=texts.excerpt;error.pointer=texts.pointer;error.location={start:{column:column,line:lineNumber,offset:position}};return error}function fail(message){if(!message){message=generateMessage()}const error=createError(message);throw error}function newLine(char){if(char==="\r"&&input[position]==="\n"){++position}lineStart=position;++lineNumber}function parseGeneric(){if(position<inputLength){startToken&&startToken();const char=input[position++];if(char==='"'||char==="'"&&allowSingleQuotedStrings){const string=parseString(char);endToken&&endToken("literal",string);return string}else if(char==="{"){endToken&&endToken("symbol","{");return parseObject()}else if(char==="["){endToken&&endToken("symbol","[");return parseArray()}else if(char==="-"||char==="."||isDecDigit(char)||json5&&(char==="+"||char==="I"||char==="N")){const number=parseNumber();endToken&&endToken("literal",number);return number}else if(char==="n"){parseKeyword("null");endToken&&endToken("literal",null);return null}else if(char==="t"){parseKeyword("true");endToken&&endToken("literal",true);return true}else if(char==="f"){parseKeyword("false");endToken&&endToken("literal",false);return false}else{--position;endToken&&endToken();return undefined}}}function parseKey(){let result;if(position<inputLength){startToken&&startToken();const char=input[position++];if(char==='"'||char==="'"&&allowSingleQuotedStrings){const string=parseString(char);endToken&&endToken("literal",string);return string}else if(char==="{"){endToken&&endToken("symbol","{");return parseObject()}else if(char==="["){endToken&&endToken("symbol","[");return parseArray()}else if(char==="."||isDecDigit(char)){const number=parseNumber(true);endToken&&endToken("literal",number);return number}else if(json5&&Uni.isIdentifierStart(char)||char==="\\"&&input[position]==="u"){const rollback=position-1;result=parseIdentifier();if(result===undefined){position=rollback;endToken&&endToken();return undefined}else{endToken&&endToken("literal",result);return result}}else{--position;endToken&&endToken();return undefined}}}function skipBOM(){if(isBOM(input)){startToken&&startToken();++position;endToken&&endToken("bom")}}function skipWhiteSpace(){let insideWhiteSpace;function startWhiteSpace(){if(!insideWhiteSpace){insideWhiteSpace=true;--position;startToken();++position}}function endWhiteSpace(){if(insideWhiteSpace){insideWhiteSpace=false;endToken("whitespace")}}while(position<inputLength){const char=input[position++];if(isLineTerminator(char)){startToken&&startWhiteSpace();newLine(char)}else if(isWhiteSpace(char)){startToken&&startWhiteSpace()}else if(char==="/"&&ignoreComments&&(input[position]==="/"||input[position]==="*")){if(startToken){--position;endWhiteSpace();startToken();++position}skipComment(input[position++]==="*");endToken&&endToken("comment")}else{--position;break}}endToken&&endWhiteSpace()}function skipComment(multiLine){while(position<inputLength){const char=input[position++];if(isLineTerminator(char)){if(!multiLine){--position;return}newLine(char)}else if(char==="*"&&multiLine){if(input[position]==="/"){++position;return}}else{}}if(multiLine){fail("Unclosed multiline comment")}}function parseKeyword(keyword){const startPosition=position;for(let i=1,keywordLength=keyword.length;i<keywordLength;++i){if(position>=inputLength||keyword[i]!==input[position]){position=startPosition-1;fail()}++position}}function parseObject(){const result={};const emptyObject={};let isNotEmpty=false;while(position<inputLength){skipWhiteSpace();const key=parseKey();if(allowDuplicateObjectKeys===false&&result[key]){fail('Duplicate key: "'+key+'"')}skipWhiteSpace();startToken&&startToken();let char=input[position++];endToken&&endToken("symbol",char);if(char==="}"&&key===undefined){if(!ignoreTrailingCommas&&isNotEmpty){--position;fail("Trailing comma in object")}return result}else if(char===":"&&key!==undefined){skipWhiteSpace();tokenPath&&tokenPath.push(key);let value=parseGeneric();tokenPath&&tokenPath.pop();if(value===undefined)fail('No value found for key "'+key+'"');if(typeof key!=="string"){if(!json5||typeof key!=="number"){fail('Wrong key type: "'+key+'"')}}if(key in emptyObject||emptyObject[key]!=null){}else{if(reviver){value=reviver(key,value)}if(value!==undefined){isNotEmpty=true;result[key]=value}}skipWhiteSpace();startToken&&startToken();char=input[position++];endToken&&endToken("symbol",char);if(char===","){continue}else if(char==="}"){return result}else{fail()}}else{--position;fail()}}fail()}function parseArray(){const result=[];while(position<inputLength){skipWhiteSpace();tokenPath&&tokenPath.push(result.length);let item=parseGeneric();tokenPath&&tokenPath.pop();skipWhiteSpace();startToken&&startToken();const char=input[position++];endToken&&endToken("symbol",char);if(item!==undefined){if(reviver){item=reviver(String(result.length),item)}if(item===undefined){++result.length;item=true}else{result.push(item)}}if(char===","){if(item===undefined){fail("Elisions are not supported")}}else if(char==="]"){if(!ignoreTrailingCommas&&item===undefined&&result.length){--position;fail("Trailing comma in array")}return result}else{--position;fail()}}}function parseNumber(){--position;let start=position;let char=input[position++];const toNumber=function(isOctal){const string=input.substr(start,position-start);let result;if(isOctal){result=parseInt(string.replace(/^0o?/,""),8)}else{result=Number(string)}if(Number.isNaN(result)){--position;fail('Bad numeric literal - "'+input.substr(start,position-start+1)+'"')}else if(!json5&&!string.match(/^-?(0|[1-9][0-9]*)(\.[0-9]+)?(e[+-]?[0-9]+)?$/i)){--position;fail('Non-json numeric literal - "'+input.substr(start,position-start+1)+'"')}else{return result}};if(char==="-"||char==="+"&&json5){char=input[position++]}if(char==="N"&&json5){parseKeyword("NaN");return NaN}if(char==="I"&&json5){parseKeyword("Infinity");return toNumber()}if(char>="1"&&char<="9"){while(position<inputLength&&isDecDigit(input[position])){++position}char=input[position++]}if(char==="0"){char=input[position++];const isOctal=char==="o"||char==="O"||isOctDigit(char);const isHex=char==="x"||char==="X";if(json5&&(isOctal||isHex)){while(position<inputLength&&(isHex?isHexDigit:isOctDigit)(input[position])){++position}let sign=1;if(input[start]==="-"){sign=-1;++start}else if(input[start]==="+"){++start}return sign*toNumber(isOctal)}}if(char==="."){while(position<inputLength&&isDecDigit(input[position])){++position}char=input[position++]}if(char==="e"||char==="E"){char=input[position++];if(char==="-"||char==="+"){++position}while(position<inputLength&&isDecDigit(input[position])){++position}char=input[position++]}--position;return toNumber()}function parseIdentifier(){--position;let result="";while(position<inputLength){let char=input[position++];if(char==="\\"&&input[position]==="u"&&isHexDigit(input[position+1])&&isHexDigit(input[position+2])&&isHexDigit(input[position+3])&&isHexDigit(input[position+4])){char=String.fromCharCode(parseInt(input.substr(position+1,4),16));position+=5}if(result.length){if(Uni.isIdentifierPart(char)){result+=char}else{--position;return result}}else{if(Uni.isIdentifierStart(char)){result+=char}else{return undefined}}}fail()}function parseString(endChar){let result="";while(position<inputLength){let char=input[position++];if(char===endChar){return result}else if(char==="\\"){if(position>=inputLength){fail()}char=input[position++];if(unescapeMap[char]&&(json5||char!=="v"&&(char!=="'"||allowSingleQuotedStrings))){result+=unescapeMap[char]}else if(json5&&isLineTerminator(char)){newLine(char)}else if(char==="u"||char==="x"&&json5){const count=char==="u"?4:2;for(let i=0;i<count;++i){if(position>=inputLength){fail()}if(!isHexDigit(input[position])){fail("Bad escape sequence")}position++}result+=String.fromCharCode(parseInt(input.substr(position-count,count),16))}else if(json5&&isOctDigit(char)){let digits;if(char<"4"&&isOctDigit(input[position])&&isOctDigit(input[position+1])){digits=3}else if(isOctDigit(input[position])){digits=2}else{digits=1}position+=digits-1;result+=String.fromCharCode(parseInt(input.substr(position-digits,digits),8))}else if(json5){result+=char}else{--position;fail()}}else if(isLineTerminator(char)){fail()}else{if(!json5&&char.charCodeAt(0)<32){--position;fail("Unexpected control character")}result+=char}}fail()}if(ignoreBOM){skipBOM()}skipWhiteSpace();let returnValue=parseGeneric();if(returnValue!==undefined||position<inputLength){skipWhiteSpace();if(position>=inputLength){if(reviver){returnValue=reviver("",returnValue)}return tokenize?tokens:returnValue}else{fail()}}else{if(position){fail("No data, only a whitespace")}else{fail("No data, empty input")}}}function parseCustom(input,options){if(typeof options==="function"){options={reviver:options}}else if(!options){options={}}return parseInternal(input,options)}function tokenize(input,options){if(!options){options={}}const oldTokenize=options.tokenize;options.tokenize=true;const tokens=parseInternal(input,options);options.tokenize=oldTokenize;return tokens}function escapePointerToken(token){return token.toString().replace(/~/g,"~0").replace(/\//g,"~1")}function pathToPointer(tokens){if(tokens.length===0){return""}return"/"+tokens.map(escapePointerToken).join("/")}function unescapePointerToken(token){return token.replace(/~1/g,"/").replace(/~0/g,"~")}function pointerToPath(pointer){if(pointer===""){return[]}if(pointer[0]!=="/"){throw new Error('Missing initial "/" in the reference')}return pointer.substr(1).split("/").map(unescapePointerToken)}function getLineAndColumn(input,offset){const lines=input.substr(0,offset).split(/\r?\n/);const line=lines.length;const column=lines[line-1].length+1;return{line:line,column:column}}function getOffset(input,line,column){if(line>1){const breaks=/\r?\n/g;let match;while(match=breaks.exec(input)){if(--line===1){return match.index+column}}}return column-1}function pastInput(input,offset){const start=Math.max(0,offset-20);const previous=input.substr(start,offset-start);return(offset>20?"...":"")+previous.replace(/\r?\n/g,"")}function upcomingInput(input,offset){let start=Math.max(0,offset-20);start+=offset-start;const rest=input.length-start;const next=input.substr(start,Math.min(20,rest));return next.replace(/\r?\n/g,"")+(rest>20?"...":"")}function getPositionContext(input,offset){const past=pastInput(input,offset);const upcoming=upcomingInput(input,offset);const pointer=new Array(past.length+1).join("-")+"^";return{excerpt:past+upcoming,pointer:pointer}}function getReason(error){let message=error.message.replace("JSON.parse: ","").replace("JSON Parse error: ","");const firstCharacter=message.charAt(0);if(firstCharacter>="a"){message=firstCharacter.toUpperCase()+message.substr(1)}return message}function getLocationOnV8(input,reason){const match=/ in JSON at position (\d+)$/.exec(reason);if(match){const offset=+match[1];const location=getLineAndColumn(input,offset);return{offset:offset,line:location.line,column:location.column,reason:reason.substr(0,match.index)}}}function checkUnexpectedEndOnV8(input,reason){const match=/ end of JSON input$/.exec(reason);if(match){const offset=input.length;const location=getLineAndColumn(input,offset);return{offset:offset,line:location.line,column:location.column,reason:reason.substr(0,match.index+4)}}}function getLocationOnSpiderMonkey(input,reason){const match=/ at line (\d+) column (\d+) of the JSON data$/.exec(reason);if(match){const line=+match[1];const column=+match[2];const offset=getOffset(input,line,column);return{offset:offset,line:line,column:column,reason:reason.substr(0,match.index)}}}function getTexts(reason,input,offset,line,column){const position=getPositionContext(input,offset);const excerpt=position.excerpt;let message,pointer;if(typeof line==="number"){pointer=position.pointer;message="Parse error on line "+line+", column "+column+":\n"+excerpt+"\n"+pointer+"\n"+reason}else{message="Parse error in JSON input:\n"+excerpt+"\n"+reason}return{message:message,excerpt:excerpt,pointer:pointer}}function improveNativeError(input,error){let reason=getReason(error);const location=getLocationOnV8(input,reason)||checkUnexpectedEndOnV8(input,reason)||getLocationOnSpiderMonkey(input,reason);let offset,line,column;if(location){offset=location.offset;line=location.line;column=location.column;reason=location.reason}else{offset=0}error.reason=reason;const texts=getTexts(reason,input,offset,line,column);error.message=texts.message;error.excerpt=texts.excerpt;if(texts.pointer){error.pointer=texts.pointer;error.location={start:{column:column,line:line,offset:offset}}}return error}function parseNative(input,reviver){try{return JSON.parse(input,reviver)}catch(error){throw improveNativeError(input,error)}}const isSafari=typeof navigator!=="undefined"&&/Safari/.test(navigator.userAgent)&&/Apple Computer/.test(navigator.vendor);const oldNode=typeof process!=="undefined"&&process.version.startsWith("v4.");function needsCustomParser(options){return options.ignoreBOM||options.ignoreComments||options.ignoreTrailingCommas||options.allowSingleQuotedStrings||options.allowDuplicateObjectKeys===false||options.mode==="cjson"||options.mode==="json5"||isSafari||oldNode}function getReviver(options){if(typeof options==="function"){return options}else if(options){return options.reviver}}function parse(input,options){options||(options={});return needsCustomParser(options)?parseCustom(input,options):parseNative(input,getReviver(options))}exports.parse=parse;exports.tokenize=tokenize;exports.pathToPointer=pathToPointer;exports.pointerToPath=pointerToPath;exports.parseNative=parseNative;exports.parseCustom=parseCustom;exports.getErrorTexts=getTexts;Object.defineProperty(exports,"__esModule",{value:true})}));
|
|
2
2
|
//# sourceMappingURL=jsonlint.min.js.map
|
package/web/jsonlint.min.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["lib/jsonlint.js"],"names":["global","factory","exports","module","define","amd","self","jsonlint","this","Uni","isWhiteSpace","x","isWhiteSpaceJSON","isLineTerminator","isLineTerminatorJSON","isIdentifierStart","NonAsciiIdentifierStart","test","isIdentifierPart","NonAsciiIdentifierPart","isHexDigit","isOctDigit","isDecDigit","unescapeMap","b","f","n","r","t","v","parseInternal","input","options","String","json5","mode","ignoreComments","ignoreTrailingCommas","allowSingleQuotedStrings","allowDuplicateObjectKeys","reviver","tokenize","rawTokens","tokenLocations","tokenPaths","inputLength","length","lineNumber","lineStart","position","tokens","startToken","endToken","tokenPath","tokenOffset","tokenLine","tokenColumn","Error","type","value","token","raw","substr","undefined","location","start","column","line","offset","path","slice","push","generateMessage","message","JSON","stringify","createError","texts","getTexts","error","SyntaxError","reason","excerpt","pointer","fail","newLine","char","parseGeneric","string","parseString","parseObject","parseArray","number","parseNumber","parseKeyword","parseKey","result","rollback","parseIdentifier","skipWhiteSpace","insideWhiteSpace","startWhiteSpace","endWhiteSpace","skipComment","multiLine","keyword","startPosition","i","keywordLength","emptyObject","isNotEmpty","key","pop","item","toNumber","isOctal","parseInt","replace","Number","isNaN","match","NaN","isHex","sign","fromCharCode","endChar","count","digits","charCodeAt","returnValue","parseCustom","oldTokenize","escapePointerToken","toString","pathToPointer","map","join","unescapePointerToken","pointerToPath","split","getLineAndColumn","lines","getOffset","breaks","exec","index","pastInput","Math","max","previous","upcomingInput","rest","next","min","getPositionContext","past","upcoming","Array","getReason","firstCharacter","charAt","toUpperCase","getLocationOnV8","checkUnexpectedEndOnV8","getLocationOnSpiderMonkey","improveNativeError","parseNative","parse","isSafari","navigator","userAgent","vendor","oldNode","process","version","startsWith","needsCustomParser","getReviver","getErrorTexts","Object","defineProperty"],"mappings":"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","file":"jsonlint.js","sourcesContent":["(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define('jsonlint', ['exports'], factory) :\n (global = global || self, factory(global.jsonlint = {}))\n}(this, function (exports) { 'use strict'\n\n// Modified from https://github.com/rlidwka/jju/blob/master/lib/unicode.js\n\n// This is autogenerated with esprima tools, see:\n// https://github.com/ariya/esprima/blob/master/esprima.js\n\nconst Uni = { // eslint-disable-line no-unused-vars\n isWhiteSpace: function isWhiteSpace (x) {\n // section 7.2, table 2\n return x === '\\u0020' ||\n x === '\\u00A0' ||\n x === '\\uFEFF' || // <-- this is not a Unicode WS, only a JS one\n (x >= '\\u0009' && x <= '\\u000D') || // 9 A B C D\n\n // + whitespace characters from unicode, category Zs\n x === '\\u1680' ||\n (x >= '\\u2000' && x <= '\\u200A') || // 0 1 2 3 4 5 6 7 8 9 A\n x === '\\u2028' ||\n x === '\\u2029' ||\n x === '\\u202F' ||\n x === '\\u205F' ||\n x === '\\u3000'\n },\n isWhiteSpaceJSON: function isWhiteSpaceJSON (x) {\n return x === '\\u0020' ||\n x === '\\u0009' ||\n x === '\\u000A' ||\n x === '\\u000D'\n },\n isLineTerminator: function isLineTerminator (x) {\n // ok, here is the part when JSON is wrong\n // section 7.3, table 3\n return x === '\\u000A' ||\n x === '\\u000D' ||\n x === '\\u2028' ||\n x === '\\u2029'\n },\n isLineTerminatorJSON: function isLineTerminatorJSON (x) {\n return x === '\\u000A' ||\n x === '\\u000D'\n },\n isIdentifierStart: function isIdentifierStart (x) {\n return x === '$' ||\n x === '_' ||\n (x >= 'A' && x <= 'Z') ||\n (x >= 'a' && x <= 'z') ||\n (x >= '\\u0080' && Uni.NonAsciiIdentifierStart.test(x))\n },\n isIdentifierPart: function isIdentifierPart (x) {\n return x === '$' ||\n x === '_' ||\n (x >= 'A' && x <= 'Z') ||\n (x >= 'a' && x <= 'z') ||\n (x >= '0' && x <= '9') || // <-- addition to Start\n (x >= '\\u0080' && Uni.NonAsciiIdentifierPart.test(x))\n },\n // ECMAScript 5.1/Unicode v6.3.0 NonAsciiIdentifierStart:\n NonAsciiIdentifierStart: /[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0\\u08A2-\\u08AC\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F0\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA697\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7F8-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA80-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]/,\n // ECMAScript 5.1/Unicode v6.3.0 NonAsciiIdentifierPart:\n /* eslint-disable-next-line no-misleading-character-class */\n NonAsciiIdentifierPart: /[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u0483-\\u0487\\u048A-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0610-\\u061A\\u0620-\\u0669\\u066E-\\u06D3\\u06D5-\\u06DC\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF\\u0710-\\u074A\\u074D-\\u07B1\\u07C0-\\u07F5\\u07FA\\u0800-\\u082D\\u0840-\\u085B\\u08A0\\u08A2-\\u08AC\\u08E4-\\u08FE\\u0900-\\u0963\\u0966-\\u096F\\u0971-\\u0977\\u0979-\\u097F\\u0981-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09F1\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C01-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58\\u0C59\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C82\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D02\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D57\\u0D60-\\u0D63\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F84\\u0F86-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u135F\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F0\\u1700-\\u170C\\u170E-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17D3\\u17D7\\u17DC\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19D9\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1B00-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1BF3\\u1C00-\\u1C37\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1CD0-\\u1CD2\\u1CD4-\\u1CF6\\u1D00-\\u1DE6\\u1DFC-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u200C\\u200D\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u209C\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D7F-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u2E2F\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099\\u309A\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66F\\uA674-\\uA67D\\uA67F-\\uA697\\uA69F-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7F8-\\uA827\\uA840-\\uA873\\uA880-\\uA8C4\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA900-\\uA92D\\uA930-\\uA953\\uA960-\\uA97C\\uA980-\\uA9C0\\uA9CF-\\uA9D9\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A\\uAA7B\\uAA80-\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF6\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uABC0-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE00-\\uFE0F\\uFE20-\\uFE26\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF3F\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]/\n}\n\n/* globals Uni, getTexts */\n\n// Modified from https://github.com/rlidwka/jju/blob/master/lib/parse.js\n\nfunction isHexDigit (x) {\n return (x >= '0' && x <= '9') ||\n (x >= 'A' && x <= 'F') ||\n (x >= 'a' && x <= 'f')\n}\n\nfunction isOctDigit (x) {\n return x >= '0' && x <= '7'\n}\n\nfunction isDecDigit (x) {\n return x >= '0' && x <= '9'\n}\n\nconst unescapeMap = {\n '\\'': '\\'',\n '\"': '\"',\n '\\\\': '\\\\',\n b: '\\b',\n f: '\\f',\n n: '\\n',\n r: '\\r',\n t: '\\t',\n v: '\\v',\n '/': '/'\n}\n\nfunction parseInternal (input, options) {\n if (typeof input !== 'string' || !(input instanceof String)) {\n input = String(input)\n }\n\n const json5 = options.mode === 'json5'\n const ignoreComments = options.ignoreComments || options.mode === 'cjson' || json5\n const ignoreTrailingCommas = options.ignoreTrailingCommas || json5\n const allowSingleQuotedStrings = options.allowSingleQuotedStrings || json5\n const allowDuplicateObjectKeys = options.allowDuplicateObjectKeys\n const reviver = options.reviver\n const tokenize = options.tokenize\n const rawTokens = options.rawTokens\n const tokenLocations = options.tokenLocations\n const tokenPaths = options.tokenPaths\n\n const isLineTerminator = json5 ? Uni.isLineTerminator : Uni.isLineTerminatorJSON\n const isWhiteSpace = json5 ? Uni.isWhiteSpace : Uni.isWhiteSpaceJSON\n\n const inputLength = input.length\n let lineNumber = 0\n let lineStart = 0\n let position = 0\n\n const tokens = []\n let startToken\n let endToken\n let tokenPath\n\n if (tokenize) {\n let tokenOffset = null\n let tokenLine\n let tokenColumn\n startToken = function () {\n if (tokenOffset !== null) throw Error('internal error, token overlap')\n tokenLine = lineNumber + 1\n tokenColumn = position - lineStart + 1\n tokenOffset = position\n }\n endToken = function (type, value) {\n if (tokenOffset !== position) {\n const token = { type }\n if (rawTokens) {\n token.raw = input.substr(tokenOffset, position - tokenOffset)\n }\n if (value !== undefined) {\n token.value = value\n }\n if (tokenLocations) {\n token.location = {\n start: {\n column: tokenColumn,\n line: tokenLine,\n offset: tokenOffset\n }\n }\n }\n if (tokenPaths) {\n token.path = tokenPath.slice()\n }\n tokens.push(token)\n }\n tokenOffset = null\n return value\n }\n tokenPaths && (tokenPath = [])\n }\n\n function generateMessage () {\n let message\n if (position < inputLength) {\n const token = JSON.stringify(input[position])\n message = 'Unexpected token ' + token\n } else {\n message = 'Unexpected end of input'\n }\n return message\n }\n\n function createError (message) {\n const column = position - lineStart + 1\n ++lineNumber\n const texts = getTexts(message, input, position, lineNumber, column)\n const error = SyntaxError(texts.message)\n error.reason = message\n error.excerpt = texts.excerpt\n error.pointer = texts.pointer\n error.location = {\n start: {\n column,\n line: lineNumber,\n offset: position\n }\n }\n return error\n }\n\n function fail (message) {\n if (!message) {\n message = generateMessage()\n }\n const error = createError(message)\n throw error\n }\n\n function newLine (char) {\n // account for <cr><lf>\n if (char === '\\r' && input[position] === '\\n') {\n ++position\n }\n lineStart = position\n ++lineNumber\n }\n\n function parseGeneric () {\n if (position < inputLength) {\n startToken && startToken()\n const char = input[position++]\n if (char === '\"' || (char === '\\'' && allowSingleQuotedStrings)) {\n const string = parseString(char)\n endToken && endToken('literal', string)\n return string\n } else if (char === '{') {\n endToken && endToken('symbol', '{')\n return parseObject()\n } else if (char === '[') {\n endToken && endToken('symbol', '[')\n return parseArray()\n } else if (char === '-' || char === '.' || isDecDigit(char) ||\n (json5 && (char === '+' || char === 'I' || char === 'N'))) {\n const number = parseNumber()\n endToken && endToken('literal', number)\n return number\n } else if (char === 'n') {\n parseKeyword('null')\n endToken && endToken('literal', null)\n return null\n } else if (char === 't') {\n parseKeyword('true')\n endToken && endToken('literal', true)\n return true\n } else if (char === 'f') {\n parseKeyword('false')\n endToken && endToken('literal', false)\n return false\n } else {\n --position\n endToken && endToken()\n return undefined\n }\n }\n }\n\n function parseKey () {\n let result\n if (position < inputLength) {\n startToken && startToken()\n const char = input[position++]\n if (char === '\"' || (char === '\\'' && allowSingleQuotedStrings)) {\n const string = parseString(char)\n endToken && endToken('literal', string)\n return string\n } else if (char === '{') {\n endToken && endToken('symbol', '{')\n return parseObject()\n } else if (char === '[') {\n endToken && endToken('symbol', '[')\n return parseArray()\n } else if (char === '.' || isDecDigit(char)) {\n const number = parseNumber(true)\n endToken && endToken('literal', number)\n return number\n } else if ((json5 && Uni.isIdentifierStart(char)) ||\n (char === '\\\\' && input[position] === 'u')) {\n const rollback = position - 1\n result = parseIdentifier()\n if (result === undefined) {\n position = rollback\n endToken && endToken()\n return undefined\n } else {\n endToken && endToken('literal', result)\n return result\n }\n } else {\n --position\n endToken && endToken()\n return undefined\n }\n }\n }\n\n function skipWhiteSpace () {\n let insideWhiteSpace\n function startWhiteSpace () {\n if (!insideWhiteSpace) {\n insideWhiteSpace = true\n --position\n startToken()\n ++position\n }\n }\n function endWhiteSpace () {\n if (insideWhiteSpace) {\n insideWhiteSpace = false\n endToken('whitespace')\n }\n }\n while (position < inputLength) {\n const char = input[position++]\n if (isLineTerminator(char)) {\n startToken && startWhiteSpace()\n newLine(char)\n } else if (isWhiteSpace(char)) {\n startToken && startWhiteSpace()\n } else if (char === '/' && ignoreComments &&\n (input[position] === '/' || input[position] === '*')) {\n if (startToken) {\n --position\n endWhiteSpace()\n startToken()\n ++position\n }\n skipComment(input[position++] === '*')\n endToken && endToken('comment')\n } else {\n --position\n break\n }\n }\n endToken && endWhiteSpace()\n }\n\n function skipComment (multiLine) {\n while (position < inputLength) {\n const char = input[position++]\n if (isLineTerminator(char)) {\n if (!multiLine) {\n // let parent function deal with newline\n --position\n return\n }\n newLine(char)\n } else if (char === '*' && multiLine) {\n if (input[position] === '/') {\n ++position\n return\n }\n } else {\n // nothing\n }\n }\n if (multiLine) {\n fail('Unclosed multiline comment')\n }\n }\n\n function parseKeyword (keyword) {\n // keyword[0] is not checked because it was checked earlier\n const startPosition = position\n for (let i = 1, keywordLength = keyword.length; i < keywordLength; ++i) {\n if (position >= inputLength || keyword[i] !== input[position]) {\n position = startPosition - 1\n fail()\n }\n ++position\n }\n }\n\n function parseObject () {\n const result = {}\n const emptyObject = {}\n let isNotEmpty = false\n\n while (position < inputLength) {\n skipWhiteSpace()\n const key = parseKey()\n if (allowDuplicateObjectKeys === false && result[key]) {\n fail('Duplicate key: \"' + key + '\"')\n }\n skipWhiteSpace()\n startToken && startToken()\n let char = input[position++]\n endToken && endToken('symbol', char)\n if (char === '}' && key === undefined) {\n if (!ignoreTrailingCommas && isNotEmpty) {\n --position\n fail('Trailing comma in object')\n }\n return result\n } else if (char === ':' && key !== undefined) {\n skipWhiteSpace()\n tokenPath && tokenPath.push(key)\n let value = parseGeneric()\n tokenPath && tokenPath.pop()\n\n if (value === undefined) fail('No value found for key \"' + key + '\"')\n if (typeof key !== 'string') {\n if (!json5 || typeof key !== 'number') {\n fail('Wrong key type: \"' + key + '\"')\n }\n }\n\n if (key in emptyObject || emptyObject[key] != null) {\n // silently ignore it\n } else {\n if (reviver) {\n value = reviver(key, value)\n }\n if (value !== undefined) {\n isNotEmpty = true\n result[key] = value\n }\n }\n\n skipWhiteSpace()\n startToken && startToken()\n char = input[position++]\n endToken && endToken('symbol', char)\n if (char === ',') {\n continue\n } else if (char === '}') {\n return result\n } else {\n fail()\n }\n } else {\n --position\n fail()\n }\n }\n\n fail()\n }\n\n function parseArray () {\n const result = []\n while (position < inputLength) {\n skipWhiteSpace()\n tokenPath && tokenPath.push(result.length)\n let item = parseGeneric()\n tokenPath && tokenPath.pop()\n skipWhiteSpace()\n startToken && startToken()\n const char = input[position++]\n endToken && endToken('symbol', char)\n if (item !== undefined) {\n if (reviver) {\n item = reviver(String(result.length), item)\n }\n if (item === undefined) {\n ++result.length\n item = true // hack for check below, not included into result\n } else {\n result.push(item)\n }\n }\n\n if (char === ',') {\n if (item === undefined) {\n fail('Elisions are not supported')\n }\n } else if (char === ']') {\n if (!ignoreTrailingCommas && item === undefined && result.length) {\n --position\n fail('Trailing comma in array')\n }\n return result\n } else {\n --position\n fail()\n }\n }\n }\n\n function parseNumber () {\n // rewind because we don't know first char\n --position\n\n let start = position\n let char = input[position++]\n const toNumber = function (isOctal) {\n const string = input.substr(start, position - start)\n let result\n\n if (isOctal) {\n result = parseInt(string.replace(/^0o?/, ''), 8)\n } else {\n result = Number(string)\n }\n\n if (Number.isNaN(result)) {\n --position\n fail('Bad numeric literal - \"' + input.substr(start, position - start + 1) + '\"')\n } else if (!json5 && !string.match(/^-?(0|[1-9][0-9]*)(\\.[0-9]+)?(e[+-]?[0-9]+)?$/i)) {\n // additional restrictions imposed by json\n --position\n fail('Non-json numeric literal - \"' + input.substr(start, position - start + 1) + '\"')\n } else {\n return result\n }\n }\n\n // ex: -5982475.249875e+29384\n // ^ skipping this\n if (char === '-' || (char === '+' && json5)) {\n char = input[position++]\n }\n\n if (char === 'N' && json5) {\n parseKeyword('NaN')\n return NaN\n }\n\n if (char === 'I' && json5) {\n parseKeyword('Infinity')\n // returning +inf or -inf\n return toNumber()\n }\n\n if (char >= '1' && char <= '9') {\n // ex: -5982475.249875e+29384\n // ^^^ skipping these\n while (position < inputLength && isDecDigit(input[position])) {\n ++position\n }\n char = input[position++]\n }\n\n // special case for leading zero: 0.123456\n if (char === '0') {\n char = input[position++]\n\n // new syntax, \"0o777\" old syntax, \"0777\"\n const isOctal = char === 'o' || char === 'O' || isOctDigit(char)\n const isHex = char === 'x' || char === 'X'\n\n if (json5 && (isOctal || isHex)) {\n while (position < inputLength &&\n (isHex ? isHexDigit : isOctDigit)(input[position])) {\n ++position\n }\n\n let sign = 1\n if (input[start] === '-') {\n sign = -1\n ++start\n } else if (input[start] === '+') {\n ++start\n }\n\n return sign * toNumber(isOctal)\n }\n }\n\n if (char === '.') {\n // ex: -5982475.249875e+29384\n // ^^^ skipping these\n while (position < inputLength && isDecDigit(input[position])) {\n ++position\n }\n char = input[position++]\n }\n\n if (char === 'e' || char === 'E') {\n char = input[position++]\n if (char === '-' || char === '+') {\n ++position\n }\n // ex: -5982475.249875e+29384\n // ^^^ skipping these\n while (position < inputLength && isDecDigit(input[position])) {\n ++position\n }\n char = input[position++]\n }\n\n // we have char in the buffer, so count for it\n --position\n return toNumber()\n }\n\n function parseIdentifier () {\n // rewind because we don't know first char\n --position\n\n let result = ''\n while (position < inputLength) {\n let char = input[position++]\n if (char === '\\\\' &&\n input[position] === 'u' &&\n isHexDigit(input[position + 1]) &&\n isHexDigit(input[position + 2]) &&\n isHexDigit(input[position + 3]) &&\n isHexDigit(input[position + 4])) {\n // UnicodeEscapeSequence\n char = String.fromCharCode(parseInt(input.substr(position + 1, 4), 16))\n position += 5\n }\n\n if (result.length) {\n // identifier started\n if (Uni.isIdentifierPart(char)) {\n result += char\n } else {\n --position\n return result\n }\n } else {\n if (Uni.isIdentifierStart(char)) {\n result += char\n } else {\n return undefined\n }\n }\n }\n\n fail()\n }\n\n function parseString (endChar) {\n // 7.8.4 of ES262 spec\n let result = ''\n while (position < inputLength) {\n let char = input[position++]\n if (char === endChar) {\n return result\n } else if (char === '\\\\') {\n if (position >= inputLength) {\n fail()\n }\n char = input[position++]\n if (unescapeMap[char] && (json5 || (char !== 'v' && (char !== \"'\" || allowSingleQuotedStrings)))) {\n result += unescapeMap[char]\n } else if (json5 && isLineTerminator(char)) {\n // line continuation\n newLine(char)\n } else if (char === 'u' || (char === 'x' && json5)) {\n // unicode/character escape sequence\n const count = char === 'u' ? 4 : 2\n // validation for \\uXXXX\n for (let i = 0; i < count; ++i) {\n if (position >= inputLength) {\n fail()\n }\n if (!isHexDigit(input[position])) {\n fail('Bad escape sequence')\n }\n position++\n }\n result += String.fromCharCode(parseInt(input.substr(position - count, count), 16))\n } else if (json5 && isOctDigit(char)) {\n let digits\n if (char < '4' && isOctDigit(input[position]) && isOctDigit(input[position + 1])) {\n // three-digit octal\n digits = 3\n } else if (isOctDigit(input[position])) {\n // two-digit octal\n digits = 2\n } else {\n digits = 1\n }\n position += digits - 1\n result += String.fromCharCode(parseInt(input.substr(position - digits, digits), 8))\n } else if (json5) {\n // \\X -> x\n result += char\n } else {\n --position\n fail()\n }\n } else if (isLineTerminator(char)) {\n fail()\n } else {\n if (!json5 && char.charCodeAt(0) < 32) {\n --position\n fail('Unexpected control character')\n }\n // SourceCharacter but not one of \" or \\ or LineTerminator\n result += char\n }\n }\n\n fail()\n }\n\n skipWhiteSpace()\n let returnValue = parseGeneric()\n if (returnValue !== undefined || position < inputLength) {\n skipWhiteSpace()\n if (position >= inputLength) {\n if (reviver) {\n returnValue = reviver('', returnValue)\n }\n return tokenize ? tokens : returnValue\n } else {\n fail()\n }\n } else {\n if (position) {\n fail('No data, only a whitespace')\n } else {\n fail('No data, empty input')\n }\n }\n}\n\nfunction parseCustom (input, options) { // eslint-disable-line no-unused-vars\n if (typeof options === 'function') {\n options = {\n reviver: options\n }\n } else if (!options) {\n options = {}\n }\n return parseInternal(input, options)\n}\n\nfunction tokenize (input, options) { // eslint-disable-line no-unused-vars\n if (!options) {\n options = {}\n }\n // As long as this is the single modification, this is easier than cloning.\n // (Once Node.js 6 is dropped, this can be replaced by object destructuring.)\n const oldTokenize = options.tokenize\n options.tokenize = true\n const tokens = parseInternal(input, options)\n options.tokenize = oldTokenize\n return tokens\n}\n\nfunction escapePointerToken (token) {\n return token\n .toString()\n .replace(/~/g, '~0')\n .replace(/\\//g, '~1')\n}\n\nfunction pathToPointer (tokens) { // eslint-disable-line no-unused-vars\n if (tokens.length === 0) {\n return ''\n }\n return '/' + tokens\n .map(escapePointerToken)\n .join('/')\n}\n\nfunction unescapePointerToken (token) {\n return token\n .replace(/~1/g, '/')\n .replace(/~0/g, '~')\n}\n\nfunction pointerToPath (pointer) { // eslint-disable-line no-unused-vars\n if (pointer === '') {\n return []\n }\n if (pointer[0] !== '/') {\n throw new Error('Missing initial \"/\" in the reference')\n }\n return pointer\n .substr(1)\n .split('/')\n .map(unescapePointerToken)\n}\n\nfunction getLineAndColumn (input, offset) {\n const lines = input\n .substr(0, offset)\n .split(/\\r?\\n/)\n const line = lines.length\n const column = lines[line - 1].length + 1\n return {\n line,\n column\n }\n}\n\nfunction getOffset (input, line, column) {\n if (line > 1) {\n const breaks = /\\r?\\n/g\n let match\n while (match = breaks.exec(input)) { // eslint-disable-line no-cond-assign\n if (--line === 1) {\n return match.index + column\n }\n }\n }\n return column - 1\n}\n\nfunction pastInput (input, offset) {\n const start = Math.max(0, offset - 20)\n const previous = input.substr(start, offset - start)\n return (offset > 20 ? '...' : '') + previous.replace(/\\r?\\n/g, '')\n}\n\nfunction upcomingInput (input, offset) {\n let start = Math.max(0, offset - 20)\n start += offset - start\n const rest = input.length - start\n const next = input.substr(start, Math.min(20, rest))\n return next.replace(/\\r?\\n/g, '') + (rest > 20 ? '...' : '')\n}\n\nfunction getPositionContext (input, offset) {\n const past = pastInput(input, offset)\n const upcoming = upcomingInput(input, offset)\n const pointer = new Array(past.length + 1).join('-') + '^'\n return {\n excerpt: past + upcoming,\n pointer\n }\n}\n\nfunction getReason (error) {\n let message = error.message\n .replace('JSON.parse: ', '') // SpiderMonkey\n .replace('JSON Parse error: ', '') // SquirrelFish\n const firstCharacter = message.charAt(0)\n if (firstCharacter >= 'a') {\n message = firstCharacter.toUpperCase() + message.substr(1)\n }\n return message\n}\n\nfunction getLocationOnV8 (input, reason) {\n const match = / in JSON at position (\\d+)$/.exec(reason)\n if (match) {\n const offset = +match[1]\n const location = getLineAndColumn(input, offset)\n return {\n offset,\n line: location.line,\n column: location.column,\n reason: reason.substr(0, match.index)\n }\n }\n}\n\nfunction checkUnexpectedEndOnV8 (input, reason) {\n const match = / end of JSON input$/.exec(reason)\n if (match) {\n const offset = input.length\n const location = getLineAndColumn(input, offset)\n return {\n offset,\n line: location.line,\n column: location.column,\n reason: reason.substr(0, match.index + 4)\n }\n }\n}\n\nfunction getLocationOnSpiderMonkey (input, reason) {\n const match = / at line (\\d+) column (\\d+) of the JSON data$/.exec(reason)\n if (match) {\n const line = +match[1]\n const column = +match[2]\n const offset = getOffset(input, line, column) // eslint-disable-line no-undef\n return {\n offset,\n line,\n column,\n reason: reason.substr(0, match.index)\n }\n }\n}\n\nfunction getTexts (reason, input, offset, line, column) {\n const position = getPositionContext(input, offset)\n const excerpt = position.excerpt\n let message, pointer\n if (typeof line === 'number') {\n pointer = position.pointer\n message = 'Parse error on line ' + line + ', column ' +\n column + ':\\n' + excerpt + '\\n' + pointer + '\\n' + reason\n } else {\n message = 'Parse error in JSON input:\\n' + excerpt + '\\n' + reason\n }\n return {\n message,\n excerpt,\n pointer\n }\n}\n\nfunction improveNativeError (input, error) {\n let reason = getReason(error)\n const location = getLocationOnV8(input, reason) ||\n checkUnexpectedEndOnV8(input, reason) ||\n getLocationOnSpiderMonkey(input, reason)\n let offset, line, column\n if (location) {\n offset = location.offset\n line = location.line\n column = location.column\n reason = location.reason\n } else {\n offset = 0\n }\n error.reason = reason\n const texts = getTexts(reason, input, offset, line, column)\n error.message = texts.message\n error.excerpt = texts.excerpt\n if (texts.pointer) {\n error.pointer = texts.pointer\n error.location = {\n start: {\n column,\n line,\n offset\n }\n }\n }\n return error\n}\n\nfunction parseNative (input, reviver) { // eslint-disable-line no-unused-vars\n try {\n return JSON.parse(input, reviver)\n } catch (error) {\n throw improveNativeError(input, error)\n }\n}\n\n/* globals navigator, process, parseCustom, parseNative */\n\nconst isSafari = typeof navigator !== 'undefined' && /Safari/.test(navigator.userAgent) && /Apple Computer/.test(navigator.vendor)\nconst oldNode = typeof process !== 'undefined' && process.version.startsWith('v4.')\n\nfunction needsCustomParser (options) {\n return options.ignoreComments || options.ignoreTrailingCommas ||\n options.allowSingleQuotedStrings || options.allowDuplicateObjectKeys === false ||\n options.mode === 'cjson' || options.mode === 'json5' || isSafari || oldNode\n}\n\nfunction getReviver (options) {\n if (typeof options === 'function') {\n return options\n } else if (options) {\n return options.reviver\n }\n}\n\nfunction parse (input, options) { // eslint-disable-line no-unused-vars\n options || (options = {})\n return needsCustomParser(options)\n ? parseCustom(input, options)\n : parseNative(input, getReviver(options))\n}\n\n exports.parse = parse\n exports.tokenize = tokenize\n exports.pathToPointer = pathToPointer\n exports.pointerToPath = pointerToPath\n\n exports.parseNative = parseNative\n exports.parseCustom = parseCustom\n exports.getErrorTexts = getTexts\n\n Object.defineProperty(exports, '__esModule', { value: true })\n}));\n"]}
|
|
1
|
+
{"version":3,"file":"jsonlint.js","names":["global","factory","exports","module","define","amd","self","jsonlint","this","Uni","isWhiteSpace","x","isWhiteSpaceJSON","isLineTerminator","isLineTerminatorJSON","isIdentifierStart","NonAsciiIdentifierStart","test","isIdentifierPart","NonAsciiIdentifierPart","isHexDigit","isOctDigit","isDecDigit","isBOM","charCodeAt","unescapeMap","b","f","n","r","t","v","parseInternal","input","options","String","json5","mode","ignoreBOM","ignoreComments","ignoreTrailingCommas","allowSingleQuotedStrings","allowDuplicateObjectKeys","reviver","tokenize","rawTokens","tokenLocations","tokenPaths","inputLength","length","lineNumber","lineStart","position","tokens","startToken","endToken","tokenPath","tokenOffset","tokenLine","tokenColumn","Error","type","value","token","raw","substr","undefined","location","start","column","line","offset","path","slice","push","generateMessage","message","JSON","stringify","createError","texts","getTexts","error","SyntaxError","reason","excerpt","pointer","fail","newLine","char","parseGeneric","string","parseString","parseObject","parseArray","number","parseNumber","parseKeyword","parseKey","result","rollback","parseIdentifier","skipBOM","skipWhiteSpace","insideWhiteSpace","startWhiteSpace","endWhiteSpace","skipComment","multiLine","keyword","startPosition","i","keywordLength","emptyObject","isNotEmpty","key","pop","item","toNumber","isOctal","parseInt","replace","Number","isNaN","match","NaN","isHex","sign","fromCharCode","endChar","count","digits","returnValue","parseCustom","oldTokenize","escapePointerToken","toString","pathToPointer","map","join","unescapePointerToken","pointerToPath","split","getLineAndColumn","lines","getOffset","breaks","exec","index","pastInput","Math","max","previous","upcomingInput","rest","next","min","getPositionContext","past","upcoming","Array","getReason","firstCharacter","charAt","toUpperCase","getLocationOnV8","checkUnexpectedEndOnV8","getLocationOnSpiderMonkey","improveNativeError","parseNative","parse","isSafari","navigator","userAgent","vendor","oldNode","process","version","startsWith","needsCustomParser","getReviver","getErrorTexts","Object","defineProperty"],"sources":["lib/jsonlint.js"],"sourcesContent":["(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define('jsonlint', ['exports'], factory) :\n (global = global || self, factory(global.jsonlint = {}))\n}(this, function (exports) { 'use strict'\n\n// Modified from https://github.com/rlidwka/jju/blob/master/lib/unicode.js\n\n// This is autogenerated with esprima tools, see:\n// https://github.com/ariya/esprima/blob/master/esprima.js\n\nconst Uni = { // eslint-disable-line no-unused-vars\n isWhiteSpace: function isWhiteSpace (x) {\n // section 7.2, table 2\n return x === '\\u0020' ||\n x === '\\u00A0' ||\n x === '\\uFEFF' || // <-- this is not a Unicode WS, only a JS one\n (x >= '\\u0009' && x <= '\\u000D') || // 9 A B C D\n\n // + whitespace characters from unicode, category Zs\n x === '\\u1680' ||\n (x >= '\\u2000' && x <= '\\u200A') || // 0 1 2 3 4 5 6 7 8 9 A\n x === '\\u2028' ||\n x === '\\u2029' ||\n x === '\\u202F' ||\n x === '\\u205F' ||\n x === '\\u3000'\n },\n isWhiteSpaceJSON: function isWhiteSpaceJSON (x) {\n return x === '\\u0020' ||\n x === '\\u0009' ||\n x === '\\u000A' ||\n x === '\\u000D'\n },\n isLineTerminator: function isLineTerminator (x) {\n // ok, here is the part when JSON is wrong\n // section 7.3, table 3\n return x === '\\u000A' ||\n x === '\\u000D' ||\n x === '\\u2028' ||\n x === '\\u2029'\n },\n isLineTerminatorJSON: function isLineTerminatorJSON (x) {\n return x === '\\u000A' ||\n x === '\\u000D'\n },\n isIdentifierStart: function isIdentifierStart (x) {\n return x === '$' ||\n x === '_' ||\n (x >= 'A' && x <= 'Z') ||\n (x >= 'a' && x <= 'z') ||\n (x >= '\\u0080' && Uni.NonAsciiIdentifierStart.test(x))\n },\n isIdentifierPart: function isIdentifierPart (x) {\n return x === '$' ||\n x === '_' ||\n (x >= 'A' && x <= 'Z') ||\n (x >= 'a' && x <= 'z') ||\n (x >= '0' && x <= '9') || // <-- addition to Start\n (x >= '\\u0080' && Uni.NonAsciiIdentifierPart.test(x))\n },\n // ECMAScript 5.1/Unicode v6.3.0 NonAsciiIdentifierStart:\n NonAsciiIdentifierStart: /[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0\\u08A2-\\u08AC\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F0\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA697\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7F8-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA80-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]/,\n // ECMAScript 5.1/Unicode v6.3.0 NonAsciiIdentifierPart:\n /* eslint-disable-next-line no-misleading-character-class */\n NonAsciiIdentifierPart: /[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u0483-\\u0487\\u048A-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0610-\\u061A\\u0620-\\u0669\\u066E-\\u06D3\\u06D5-\\u06DC\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF\\u0710-\\u074A\\u074D-\\u07B1\\u07C0-\\u07F5\\u07FA\\u0800-\\u082D\\u0840-\\u085B\\u08A0\\u08A2-\\u08AC\\u08E4-\\u08FE\\u0900-\\u0963\\u0966-\\u096F\\u0971-\\u0977\\u0979-\\u097F\\u0981-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09F1\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C01-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58\\u0C59\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C82\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D02\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D57\\u0D60-\\u0D63\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F84\\u0F86-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u135F\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F0\\u1700-\\u170C\\u170E-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17D3\\u17D7\\u17DC\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19D9\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1B00-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1BF3\\u1C00-\\u1C37\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1CD0-\\u1CD2\\u1CD4-\\u1CF6\\u1D00-\\u1DE6\\u1DFC-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u200C\\u200D\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u209C\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D7F-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u2E2F\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099\\u309A\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66F\\uA674-\\uA67D\\uA67F-\\uA697\\uA69F-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7F8-\\uA827\\uA840-\\uA873\\uA880-\\uA8C4\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA900-\\uA92D\\uA930-\\uA953\\uA960-\\uA97C\\uA980-\\uA9C0\\uA9CF-\\uA9D9\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A\\uAA7B\\uAA80-\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF6\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uABC0-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE00-\\uFE0F\\uFE20-\\uFE26\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF3F\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]/\n}\n\n/* globals Uni, getTexts */\n\n// Modified from https://github.com/rlidwka/jju/blob/master/lib/parse.js\n\nfunction isHexDigit (x) {\n return (x >= '0' && x <= '9') ||\n (x >= 'A' && x <= 'F') ||\n (x >= 'a' && x <= 'f')\n}\n\nfunction isOctDigit (x) {\n return x >= '0' && x <= '7'\n}\n\nfunction isDecDigit (x) {\n return x >= '0' && x <= '9'\n}\n\nfunction isBOM (x) {\n // This catches EFBBBF (UTF-8 BOM) because the buffer-to-string\n // conversion in `fs.readFileSync()` translates it to FEFF (UTF-16 BOM).\n return x.charCodeAt(0) === 0xFEFF\n}\n\nconst unescapeMap = {\n '\\'': '\\'',\n '\"': '\"',\n '\\\\': '\\\\',\n b: '\\b',\n f: '\\f',\n n: '\\n',\n r: '\\r',\n t: '\\t',\n v: '\\v',\n '/': '/'\n}\n\nfunction parseInternal (input, options) {\n if (typeof input !== 'string' || !(input instanceof String)) {\n input = String(input)\n }\n\n const json5 = options.mode === 'json5'\n const ignoreBOM = options.ignoreBOM\n const ignoreComments = options.ignoreComments || options.mode === 'cjson' || json5\n const ignoreTrailingCommas = options.ignoreTrailingCommas || json5\n const allowSingleQuotedStrings = options.allowSingleQuotedStrings || json5\n const allowDuplicateObjectKeys = options.allowDuplicateObjectKeys\n const reviver = options.reviver\n const tokenize = options.tokenize\n const rawTokens = options.rawTokens\n const tokenLocations = options.tokenLocations\n const tokenPaths = options.tokenPaths\n\n const isLineTerminator = json5 ? Uni.isLineTerminator : Uni.isLineTerminatorJSON\n const isWhiteSpace = json5 ? Uni.isWhiteSpace : Uni.isWhiteSpaceJSON\n\n const inputLength = input.length\n let lineNumber = 0\n let lineStart = 0\n let position = 0\n\n const tokens = []\n let startToken\n let endToken\n let tokenPath\n\n if (tokenize) {\n let tokenOffset = null\n let tokenLine\n let tokenColumn\n startToken = function () {\n if (tokenOffset !== null) throw Error('internal error, token overlap')\n tokenLine = lineNumber + 1\n tokenColumn = position - lineStart + 1\n tokenOffset = position\n }\n endToken = function (type, value) {\n if (tokenOffset !== position) {\n const token = { type }\n if (rawTokens) {\n token.raw = input.substr(tokenOffset, position - tokenOffset)\n }\n if (value !== undefined) {\n token.value = value\n }\n if (tokenLocations) {\n token.location = {\n start: {\n column: tokenColumn,\n line: tokenLine,\n offset: tokenOffset\n }\n }\n }\n if (tokenPaths) {\n token.path = tokenPath.slice()\n }\n tokens.push(token)\n }\n tokenOffset = null\n return value\n }\n tokenPaths && (tokenPath = [])\n }\n\n function generateMessage () {\n let message\n if (position < inputLength) {\n const token = JSON.stringify(input[position])\n message = 'Unexpected token ' + token\n } else {\n message = 'Unexpected end of input'\n }\n return message\n }\n\n function createError (message) {\n const column = position - lineStart + 1\n ++lineNumber\n const texts = getTexts(message, input, position, lineNumber, column)\n const error = SyntaxError(texts.message)\n error.reason = message\n error.excerpt = texts.excerpt\n error.pointer = texts.pointer\n error.location = {\n start: {\n column,\n line: lineNumber,\n offset: position\n }\n }\n return error\n }\n\n function fail (message) {\n if (!message) {\n message = generateMessage()\n }\n const error = createError(message)\n throw error\n }\n\n function newLine (char) {\n // account for <cr><lf>\n if (char === '\\r' && input[position] === '\\n') {\n ++position\n }\n lineStart = position\n ++lineNumber\n }\n\n function parseGeneric () {\n if (position < inputLength) {\n startToken && startToken()\n const char = input[position++]\n if (char === '\"' || (char === '\\'' && allowSingleQuotedStrings)) {\n const string = parseString(char)\n endToken && endToken('literal', string)\n return string\n } else if (char === '{') {\n endToken && endToken('symbol', '{')\n return parseObject()\n } else if (char === '[') {\n endToken && endToken('symbol', '[')\n return parseArray()\n } else if (char === '-' || char === '.' || isDecDigit(char) ||\n (json5 && (char === '+' || char === 'I' || char === 'N'))) {\n const number = parseNumber()\n endToken && endToken('literal', number)\n return number\n } else if (char === 'n') {\n parseKeyword('null')\n endToken && endToken('literal', null)\n return null\n } else if (char === 't') {\n parseKeyword('true')\n endToken && endToken('literal', true)\n return true\n } else if (char === 'f') {\n parseKeyword('false')\n endToken && endToken('literal', false)\n return false\n } else {\n --position\n endToken && endToken()\n return undefined\n }\n }\n }\n\n function parseKey () {\n let result\n if (position < inputLength) {\n startToken && startToken()\n const char = input[position++]\n if (char === '\"' || (char === '\\'' && allowSingleQuotedStrings)) {\n const string = parseString(char)\n endToken && endToken('literal', string)\n return string\n } else if (char === '{') {\n endToken && endToken('symbol', '{')\n return parseObject()\n } else if (char === '[') {\n endToken && endToken('symbol', '[')\n return parseArray()\n } else if (char === '.' || isDecDigit(char)) {\n const number = parseNumber(true)\n endToken && endToken('literal', number)\n return number\n } else if ((json5 && Uni.isIdentifierStart(char)) ||\n (char === '\\\\' && input[position] === 'u')) {\n const rollback = position - 1\n result = parseIdentifier()\n if (result === undefined) {\n position = rollback\n endToken && endToken()\n return undefined\n } else {\n endToken && endToken('literal', result)\n return result\n }\n } else {\n --position\n endToken && endToken()\n return undefined\n }\n }\n }\n\n function skipBOM () {\n if (isBOM(input)) {\n startToken && startToken()\n ++position\n endToken && endToken('bom')\n }\n }\n\n function skipWhiteSpace () {\n let insideWhiteSpace\n function startWhiteSpace () {\n if (!insideWhiteSpace) {\n insideWhiteSpace = true\n --position\n startToken()\n ++position\n }\n }\n function endWhiteSpace () {\n if (insideWhiteSpace) {\n insideWhiteSpace = false\n endToken('whitespace')\n }\n }\n while (position < inputLength) {\n const char = input[position++]\n if (isLineTerminator(char)) {\n startToken && startWhiteSpace()\n newLine(char)\n } else if (isWhiteSpace(char)) {\n startToken && startWhiteSpace()\n } else if (char === '/' && ignoreComments &&\n (input[position] === '/' || input[position] === '*')) {\n if (startToken) {\n --position\n endWhiteSpace()\n startToken()\n ++position\n }\n skipComment(input[position++] === '*')\n endToken && endToken('comment')\n } else {\n --position\n break\n }\n }\n endToken && endWhiteSpace()\n }\n\n function skipComment (multiLine) {\n while (position < inputLength) {\n const char = input[position++]\n if (isLineTerminator(char)) {\n if (!multiLine) {\n // let parent function deal with newline\n --position\n return\n }\n newLine(char)\n } else if (char === '*' && multiLine) {\n if (input[position] === '/') {\n ++position\n return\n }\n } else {\n // nothing\n }\n }\n if (multiLine) {\n fail('Unclosed multiline comment')\n }\n }\n\n function parseKeyword (keyword) {\n // keyword[0] is not checked because it was checked earlier\n const startPosition = position\n for (let i = 1, keywordLength = keyword.length; i < keywordLength; ++i) {\n if (position >= inputLength || keyword[i] !== input[position]) {\n position = startPosition - 1\n fail()\n }\n ++position\n }\n }\n\n function parseObject () {\n const result = {}\n const emptyObject = {}\n let isNotEmpty = false\n\n while (position < inputLength) {\n skipWhiteSpace()\n const key = parseKey()\n if (allowDuplicateObjectKeys === false && result[key]) {\n fail('Duplicate key: \"' + key + '\"')\n }\n skipWhiteSpace()\n startToken && startToken()\n let char = input[position++]\n endToken && endToken('symbol', char)\n if (char === '}' && key === undefined) {\n if (!ignoreTrailingCommas && isNotEmpty) {\n --position\n fail('Trailing comma in object')\n }\n return result\n } else if (char === ':' && key !== undefined) {\n skipWhiteSpace()\n tokenPath && tokenPath.push(key)\n let value = parseGeneric()\n tokenPath && tokenPath.pop()\n\n if (value === undefined) fail('No value found for key \"' + key + '\"')\n if (typeof key !== 'string') {\n if (!json5 || typeof key !== 'number') {\n fail('Wrong key type: \"' + key + '\"')\n }\n }\n\n if (key in emptyObject || emptyObject[key] != null) {\n // silently ignore it\n } else {\n if (reviver) {\n value = reviver(key, value)\n }\n if (value !== undefined) {\n isNotEmpty = true\n result[key] = value\n }\n }\n\n skipWhiteSpace()\n startToken && startToken()\n char = input[position++]\n endToken && endToken('symbol', char)\n if (char === ',') {\n continue\n } else if (char === '}') {\n return result\n } else {\n fail()\n }\n } else {\n --position\n fail()\n }\n }\n\n fail()\n }\n\n function parseArray () {\n const result = []\n while (position < inputLength) {\n skipWhiteSpace()\n tokenPath && tokenPath.push(result.length)\n let item = parseGeneric()\n tokenPath && tokenPath.pop()\n skipWhiteSpace()\n startToken && startToken()\n const char = input[position++]\n endToken && endToken('symbol', char)\n if (item !== undefined) {\n if (reviver) {\n item = reviver(String(result.length), item)\n }\n if (item === undefined) {\n ++result.length\n item = true // hack for check below, not included into result\n } else {\n result.push(item)\n }\n }\n\n if (char === ',') {\n if (item === undefined) {\n fail('Elisions are not supported')\n }\n } else if (char === ']') {\n if (!ignoreTrailingCommas && item === undefined && result.length) {\n --position\n fail('Trailing comma in array')\n }\n return result\n } else {\n --position\n fail()\n }\n }\n }\n\n function parseNumber () {\n // rewind because we don't know first char\n --position\n\n let start = position\n let char = input[position++]\n const toNumber = function (isOctal) {\n const string = input.substr(start, position - start)\n let result\n\n if (isOctal) {\n result = parseInt(string.replace(/^0o?/, ''), 8)\n } else {\n result = Number(string)\n }\n\n if (Number.isNaN(result)) {\n --position\n fail('Bad numeric literal - \"' + input.substr(start, position - start + 1) + '\"')\n } else if (!json5 && !string.match(/^-?(0|[1-9][0-9]*)(\\.[0-9]+)?(e[+-]?[0-9]+)?$/i)) {\n // additional restrictions imposed by json\n --position\n fail('Non-json numeric literal - \"' + input.substr(start, position - start + 1) + '\"')\n } else {\n return result\n }\n }\n\n // ex: -5982475.249875e+29384\n // ^ skipping this\n if (char === '-' || (char === '+' && json5)) {\n char = input[position++]\n }\n\n if (char === 'N' && json5) {\n parseKeyword('NaN')\n return NaN\n }\n\n if (char === 'I' && json5) {\n parseKeyword('Infinity')\n // returning +inf or -inf\n return toNumber()\n }\n\n if (char >= '1' && char <= '9') {\n // ex: -5982475.249875e+29384\n // ^^^ skipping these\n while (position < inputLength && isDecDigit(input[position])) {\n ++position\n }\n char = input[position++]\n }\n\n // special case for leading zero: 0.123456\n if (char === '0') {\n char = input[position++]\n\n // new syntax, \"0o777\" old syntax, \"0777\"\n const isOctal = char === 'o' || char === 'O' || isOctDigit(char)\n const isHex = char === 'x' || char === 'X'\n\n if (json5 && (isOctal || isHex)) {\n while (position < inputLength &&\n (isHex ? isHexDigit : isOctDigit)(input[position])) {\n ++position\n }\n\n let sign = 1\n if (input[start] === '-') {\n sign = -1\n ++start\n } else if (input[start] === '+') {\n ++start\n }\n\n return sign * toNumber(isOctal)\n }\n }\n\n if (char === '.') {\n // ex: -5982475.249875e+29384\n // ^^^ skipping these\n while (position < inputLength && isDecDigit(input[position])) {\n ++position\n }\n char = input[position++]\n }\n\n if (char === 'e' || char === 'E') {\n char = input[position++]\n if (char === '-' || char === '+') {\n ++position\n }\n // ex: -5982475.249875e+29384\n // ^^^ skipping these\n while (position < inputLength && isDecDigit(input[position])) {\n ++position\n }\n char = input[position++]\n }\n\n // we have char in the buffer, so count for it\n --position\n return toNumber()\n }\n\n function parseIdentifier () {\n // rewind because we don't know first char\n --position\n\n let result = ''\n while (position < inputLength) {\n let char = input[position++]\n if (char === '\\\\' &&\n input[position] === 'u' &&\n isHexDigit(input[position + 1]) &&\n isHexDigit(input[position + 2]) &&\n isHexDigit(input[position + 3]) &&\n isHexDigit(input[position + 4])) {\n // UnicodeEscapeSequence\n char = String.fromCharCode(parseInt(input.substr(position + 1, 4), 16))\n position += 5\n }\n\n if (result.length) {\n // identifier started\n if (Uni.isIdentifierPart(char)) {\n result += char\n } else {\n --position\n return result\n }\n } else {\n if (Uni.isIdentifierStart(char)) {\n result += char\n } else {\n return undefined\n }\n }\n }\n\n fail()\n }\n\n function parseString (endChar) {\n // 7.8.4 of ES262 spec\n let result = ''\n while (position < inputLength) {\n let char = input[position++]\n if (char === endChar) {\n return result\n } else if (char === '\\\\') {\n if (position >= inputLength) {\n fail()\n }\n char = input[position++]\n if (unescapeMap[char] && (json5 || (char !== 'v' && (char !== \"'\" || allowSingleQuotedStrings)))) {\n result += unescapeMap[char]\n } else if (json5 && isLineTerminator(char)) {\n // line continuation\n newLine(char)\n } else if (char === 'u' || (char === 'x' && json5)) {\n // unicode/character escape sequence\n const count = char === 'u' ? 4 : 2\n // validation for \\uXXXX\n for (let i = 0; i < count; ++i) {\n if (position >= inputLength) {\n fail()\n }\n if (!isHexDigit(input[position])) {\n fail('Bad escape sequence')\n }\n position++\n }\n result += String.fromCharCode(parseInt(input.substr(position - count, count), 16))\n } else if (json5 && isOctDigit(char)) {\n let digits\n if (char < '4' && isOctDigit(input[position]) && isOctDigit(input[position + 1])) {\n // three-digit octal\n digits = 3\n } else if (isOctDigit(input[position])) {\n // two-digit octal\n digits = 2\n } else {\n digits = 1\n }\n position += digits - 1\n result += String.fromCharCode(parseInt(input.substr(position - digits, digits), 8))\n } else if (json5) {\n // \\X -> x\n result += char\n } else {\n --position\n fail()\n }\n } else if (isLineTerminator(char)) {\n fail()\n } else {\n if (!json5 && char.charCodeAt(0) < 32) {\n --position\n fail('Unexpected control character')\n }\n // SourceCharacter but not one of \" or \\ or LineTerminator\n result += char\n }\n }\n\n fail()\n }\n\n if (ignoreBOM) {\n skipBOM()\n }\n skipWhiteSpace()\n let returnValue = parseGeneric()\n if (returnValue !== undefined || position < inputLength) {\n skipWhiteSpace()\n if (position >= inputLength) {\n if (reviver) {\n returnValue = reviver('', returnValue)\n }\n return tokenize ? tokens : returnValue\n } else {\n fail()\n }\n } else {\n if (position) {\n fail('No data, only a whitespace')\n } else {\n fail('No data, empty input')\n }\n }\n}\n\nfunction parseCustom (input, options) { // eslint-disable-line no-unused-vars\n if (typeof options === 'function') {\n options = {\n reviver: options\n }\n } else if (!options) {\n options = {}\n }\n return parseInternal(input, options)\n}\n\nfunction tokenize (input, options) { // eslint-disable-line no-unused-vars\n if (!options) {\n options = {}\n }\n // As long as this is the single modification, this is easier than cloning.\n // (Once Node.js 6 is dropped, this can be replaced by object destructuring.)\n const oldTokenize = options.tokenize\n options.tokenize = true\n const tokens = parseInternal(input, options)\n options.tokenize = oldTokenize\n return tokens\n}\n\nfunction escapePointerToken (token) {\n return token\n .toString()\n .replace(/~/g, '~0')\n .replace(/\\//g, '~1')\n}\n\nfunction pathToPointer (tokens) { // eslint-disable-line no-unused-vars\n if (tokens.length === 0) {\n return ''\n }\n return '/' + tokens\n .map(escapePointerToken)\n .join('/')\n}\n\nfunction unescapePointerToken (token) {\n return token\n .replace(/~1/g, '/')\n .replace(/~0/g, '~')\n}\n\nfunction pointerToPath (pointer) { // eslint-disable-line no-unused-vars\n if (pointer === '') {\n return []\n }\n if (pointer[0] !== '/') {\n throw new Error('Missing initial \"/\" in the reference')\n }\n return pointer\n .substr(1)\n .split('/')\n .map(unescapePointerToken)\n}\n\nfunction getLineAndColumn (input, offset) {\n const lines = input\n .substr(0, offset)\n .split(/\\r?\\n/)\n const line = lines.length\n const column = lines[line - 1].length + 1\n return {\n line,\n column\n }\n}\n\nfunction getOffset (input, line, column) {\n if (line > 1) {\n const breaks = /\\r?\\n/g\n let match\n while (match = breaks.exec(input)) { // eslint-disable-line no-cond-assign\n if (--line === 1) {\n return match.index + column\n }\n }\n }\n return column - 1\n}\n\nfunction pastInput (input, offset) {\n const start = Math.max(0, offset - 20)\n const previous = input.substr(start, offset - start)\n return (offset > 20 ? '...' : '') + previous.replace(/\\r?\\n/g, '')\n}\n\nfunction upcomingInput (input, offset) {\n let start = Math.max(0, offset - 20)\n start += offset - start\n const rest = input.length - start\n const next = input.substr(start, Math.min(20, rest))\n return next.replace(/\\r?\\n/g, '') + (rest > 20 ? '...' : '')\n}\n\nfunction getPositionContext (input, offset) {\n const past = pastInput(input, offset)\n const upcoming = upcomingInput(input, offset)\n const pointer = new Array(past.length + 1).join('-') + '^'\n return {\n excerpt: past + upcoming,\n pointer\n }\n}\n\nfunction getReason (error) {\n let message = error.message\n .replace('JSON.parse: ', '') // SpiderMonkey\n .replace('JSON Parse error: ', '') // SquirrelFish\n const firstCharacter = message.charAt(0)\n if (firstCharacter >= 'a') {\n message = firstCharacter.toUpperCase() + message.substr(1)\n }\n return message\n}\n\nfunction getLocationOnV8 (input, reason) {\n const match = / in JSON at position (\\d+)$/.exec(reason)\n if (match) {\n const offset = +match[1]\n const location = getLineAndColumn(input, offset)\n return {\n offset,\n line: location.line,\n column: location.column,\n reason: reason.substr(0, match.index)\n }\n }\n}\n\nfunction checkUnexpectedEndOnV8 (input, reason) {\n const match = / end of JSON input$/.exec(reason)\n if (match) {\n const offset = input.length\n const location = getLineAndColumn(input, offset)\n return {\n offset,\n line: location.line,\n column: location.column,\n reason: reason.substr(0, match.index + 4)\n }\n }\n}\n\nfunction getLocationOnSpiderMonkey (input, reason) {\n const match = / at line (\\d+) column (\\d+) of the JSON data$/.exec(reason)\n if (match) {\n const line = +match[1]\n const column = +match[2]\n const offset = getOffset(input, line, column) // eslint-disable-line no-undef\n return {\n offset,\n line,\n column,\n reason: reason.substr(0, match.index)\n }\n }\n}\n\nfunction getTexts (reason, input, offset, line, column) {\n const position = getPositionContext(input, offset)\n const excerpt = position.excerpt\n let message, pointer\n if (typeof line === 'number') {\n pointer = position.pointer\n message = 'Parse error on line ' + line + ', column ' +\n column + ':\\n' + excerpt + '\\n' + pointer + '\\n' + reason\n } else {\n message = 'Parse error in JSON input:\\n' + excerpt + '\\n' + reason\n }\n return {\n message,\n excerpt,\n pointer\n }\n}\n\nfunction improveNativeError (input, error) {\n let reason = getReason(error)\n const location = getLocationOnV8(input, reason) ||\n checkUnexpectedEndOnV8(input, reason) ||\n getLocationOnSpiderMonkey(input, reason)\n let offset, line, column\n if (location) {\n offset = location.offset\n line = location.line\n column = location.column\n reason = location.reason\n } else {\n offset = 0\n }\n error.reason = reason\n const texts = getTexts(reason, input, offset, line, column)\n error.message = texts.message\n error.excerpt = texts.excerpt\n if (texts.pointer) {\n error.pointer = texts.pointer\n error.location = {\n start: {\n column,\n line,\n offset\n }\n }\n }\n return error\n}\n\nfunction parseNative (input, reviver) { // eslint-disable-line no-unused-vars\n try {\n return JSON.parse(input, reviver)\n } catch (error) {\n throw improveNativeError(input, error)\n }\n}\n\n/* globals navigator, process, parseCustom, parseNative */\n\nconst isSafari = typeof navigator !== 'undefined' && /Safari/.test(navigator.userAgent) && /Apple Computer/.test(navigator.vendor)\nconst oldNode = typeof process !== 'undefined' && process.version.startsWith('v4.')\n\nfunction needsCustomParser (options) {\n return options.ignoreBOM || options.ignoreComments || options.ignoreTrailingCommas ||\n options.allowSingleQuotedStrings || options.allowDuplicateObjectKeys === false ||\n options.mode === 'cjson' || options.mode === 'json5' || isSafari || oldNode\n}\n\nfunction getReviver (options) {\n if (typeof options === 'function') {\n return options\n } else if (options) {\n return options.reviver\n }\n}\n\nfunction parse (input, options) { // eslint-disable-line no-unused-vars\n options || (options = {})\n return needsCustomParser(options)\n ? parseCustom(input, options)\n : parseNative(input, getReviver(options))\n}\n\n exports.parse = parse\n exports.tokenize = tokenize\n exports.pathToPointer = pathToPointer\n exports.pointerToPath = pointerToPath\n\n exports.parseNative = parseNative\n exports.parseCustom = parseCustom\n exports.getErrorTexts = getTexts\n\n Object.defineProperty(exports, '__esModule', { value: true })\n}));\n"],"mappings":"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"}
|
package/web/printer.min.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["lib/printer.js"],"names":["global","factory","exports","module","define","amd","self","jsonlintPrinter","this","noop","isIdentifierName","value","test","concatenateTokens","tokens","outputString","tokenCount","length","tokenIndex","raw","print","options","Error","indentString","indent","Array","join","prettyPrint","undefined","pruneComments","stripObjectKeys","enforceDoubleQuotes","enforceSingleQuotes","trimTrailingCommas","foundLineBreak","addedLineBreak","needsLineBreak","addedSpace","needsSpace","indentLevel","scopes","scopeType","isValue","token","tokenType","tokenContent","peekAtNextToken","nextTokenIndex","nextToken","type","addIndent","i","addLineBreak","addDelayedSpaceOrLineBreak","addStandaloneComment","tryAddingInlineComment","tryTokenIndex","skipWhitespace","indexOf","substr","addLiteral","tokenValue","JSON","stringify","replace","openScope","push","closeScope","pop","addComma","addColon","Object","defineProperty"],"mappings":"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","file":"printer.js","sourcesContent":["(function (global, factory) {\n // eslint-disable-next-line no-unused-expressions, multiline-ternary\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports)\n // eslint-disable-next-line no-undef, multiline-ternary\n : typeof define === 'function' && define.amd ? define('jsonlint-printer', ['exports'], factory)\n // eslint-disable-next-line no-undef\n : (global = global || self, factory(global.jsonlintPrinter = {}))\n}(this, function (exports) {\n 'use strict'\n\n function noop () {}\n\n function isIdentifierName (value) {\n return /^[a-zA-Z$_][a-zA-Z0-9$_]*$/.test(value)\n }\n\n function concatenateTokens (tokens) {\n let outputString = ''\n const tokenCount = tokens.length\n let tokenIndex\n for (tokenIndex = 0; tokenIndex < tokenCount; ++tokenIndex) {\n outputString += tokens[tokenIndex].raw\n }\n return outputString\n }\n\n function print (tokens, options) {\n if (!(tokens && tokens.length)) {\n throw new Error('JSON tokens missing.')\n }\n // Whitespace and comments are available only as raw token content.\n if (!(tokens[0] && tokens[0].raw)) {\n throw new Error('JSON tokens lack raw values.')\n }\n\n if (!options) {\n // If no options, not even an empty object is passed, just concatenate\n // the raw tokens with neither minification, nor pretty-printing.\n return concatenateTokens(tokens)\n }\n\n let indentString = options.indent\n if (typeof indentString === 'number') {\n indentString = new Array(indentString + 1).join(' ')\n }\n // Setting the indent to an empty string enables pretty-printing too.\n // It will just insert line breaks without any indentation.\n const prettyPrint = indentString !== undefined\n const pruneComments = options.pruneComments\n const stripObjectKeys = options.stripObjectKeys\n const enforceDoubleQuotes = options.enforceDoubleQuotes\n const enforceSingleQuotes = options.enforceSingleQuotes\n const trimTrailingCommas = options.trimTrailingCommas\n\n let outputString = ''\n let foundLineBreak, addedLineBreak, needsLineBreak\n let addedSpace, needsSpace\n let indentLevel = 0\n const scopes = []\n let scopeType\n let isValue\n const tokenCount = tokens.length\n let tokenIndex, token, tokenType, tokenContent\n\n function peekAtNextToken () {\n let nextTokenIndex = tokenIndex\n let nextToken\n do {\n nextToken = tokens[++nextTokenIndex]\n } while (nextToken && (nextToken.type === 'whitespace' ||\n nextToken.type === 'comment'))\n return nextToken\n }\n\n let addIndent\n if (prettyPrint && indentString) {\n addIndent = function () {\n for (let i = 0; i < indentLevel; ++i) {\n outputString += indentString\n }\n }\n } else {\n addIndent = noop\n }\n\n let addLineBreak, addDelayedSpaceOrLineBreak\n if (prettyPrint) {\n addLineBreak = function () {\n outputString += '\\n'\n }\n\n addDelayedSpaceOrLineBreak = function () {\n // A line break is more important than a space.\n if (needsLineBreak) {\n addLineBreak()\n addIndent()\n } else if (needsSpace) {\n outputString += ' '\n }\n needsSpace = needsLineBreak = false\n }\n } else {\n addLineBreak = addDelayedSpaceOrLineBreak = noop\n }\n\n let addStandaloneComment, tryAddingInlineComment\n if (pruneComments) {\n addStandaloneComment = tryAddingInlineComment = noop\n } else {\n if (prettyPrint) {\n addStandaloneComment = function () {\n // If a comment is not appended to the end of a line, it will start\n // on a new line with the current indentation.\n if (!addedLineBreak && tokenIndex > 0) {\n addLineBreak()\n addIndent()\n }\n outputString += tokenContent\n foundLineBreak = false\n addedLineBreak = false\n // If a comment is not appended to the end of a line, it will take\n // the whole line and has to end by a line break.\n needsLineBreak = true\n }\n\n tryAddingInlineComment = function () {\n // This function is called after printing a non-line-break character.\n foundLineBreak = false\n addedLineBreak = false\n addedSpace = false\n\n // Start with the character after the just processed one.\n let tryTokenIndex = tokenIndex + 1\n\n function skipWhitespace () {\n let token = tokens[tryTokenIndex]\n if (token && token.type === 'whitespace') {\n foundLineBreak = token.raw.indexOf('\\n') >= 0\n token = tokens[++tryTokenIndex]\n }\n return token\n }\n\n const token = skipWhitespace()\n // If line break followed the previous token, leave the comment\n // to be handled by the next usual token processing.\n if (!foundLineBreak && token && token.type === 'comment') {\n if (needsLineBreak) {\n // If the previous non-whitespace token was ended by a line\n // break, retain it. Print the comment after the line break too.\n if (!addedLineBreak) {\n addLineBreak()\n addIndent()\n }\n } else {\n // If the previous non-whitespace token was not ended by a line\n // break, ensure that the comment is separated from it.\n if (!addedSpace) {\n outputString += ' '\n }\n }\n outputString += token.raw\n // Set the current token to the just processed comment.\n tokenIndex = tryTokenIndex++\n // Check the whitespace after the comment to give a hint\n // about the next whitespace to the further processing.\n skipWhitespace()\n if (foundLineBreak) {\n needsSpace = false\n needsLineBreak = true\n } else {\n needsSpace = true\n needsLineBreak = false\n }\n }\n }\n } else {\n // If all whitespace is omitted, convert single-line comments\n // to multi-line ones, which include a comment-closing token.\n addStandaloneComment = function () {\n if (tokenContent[1] === '/') {\n outputString += '/*'\n outputString += tokenContent.substr(2, tokenContent.length - 2)\n outputString += ' */'\n } else {\n outputString += tokenContent\n }\n }\n\n tryAddingInlineComment = noop\n }\n }\n\n function addLiteral () {\n addDelayedSpaceOrLineBreak()\n const tokenValue = token.value\n if (stripObjectKeys && scopeType === '{' && !isValue &&\n isIdentifierName(tokenValue)) {\n outputString += tokenValue\n } else if (typeof tokenValue === 'string') {\n if (enforceDoubleQuotes && tokenContent[0] !== '\"') {\n outputString += JSON.stringify(tokenValue)\n } else if (enforceSingleQuotes && tokenContent[0] !== '\\'') {\n outputString += '\\'' + tokenValue.replace(/'/g, '\\\\\\'') + '\\''\n } else {\n outputString += tokenContent\n }\n } else {\n outputString += tokenContent\n }\n tryAddingInlineComment()\n }\n\n function openScope () {\n addDelayedSpaceOrLineBreak()\n scopes.push(scopeType)\n scopeType = tokenContent\n isValue = scopeType === '['\n outputString += tokenContent\n tryAddingInlineComment()\n ++indentLevel\n needsLineBreak = true\n }\n\n function closeScope () {\n scopeType = scopes.pop()\n addLineBreak()\n --indentLevel\n addIndent()\n needsSpace = needsLineBreak = false\n outputString += tokenContent\n tryAddingInlineComment()\n }\n\n function addComma () {\n if (trimTrailingCommas) {\n const nextToken = peekAtNextToken()\n if (nextToken && nextToken.type === 'symbol') {\n return tryAddingInlineComment()\n }\n }\n addDelayedSpaceOrLineBreak()\n outputString += ','\n tryAddingInlineComment()\n addLineBreak()\n addIndent()\n addedLineBreak = true\n needsLineBreak = false\n isValue = scopeType === '['\n }\n\n function addColon () {\n addDelayedSpaceOrLineBreak()\n outputString += ':'\n needsSpace = true\n tryAddingInlineComment()\n isValue = true\n }\n\n for (tokenIndex = 0; tokenIndex < tokenCount; ++tokenIndex) {\n token = tokens[tokenIndex]\n tokenType = token.type\n tokenContent = token.raw\n switch (tokenType) {\n case 'literal':\n addLiteral()\n break\n case 'comment':\n addStandaloneComment()\n break\n case 'symbol':\n switch (tokenContent) {\n case '{':\n case '[':\n openScope()\n break\n case '}':\n case ']':\n closeScope()\n break\n case ',':\n addComma()\n break\n case ':':\n addColon()\n }\n break\n default: // whitespace\n foundLineBreak = tokenContent.indexOf('\\n') >= 0\n }\n }\n\n return outputString\n }\n\n exports.print = print\n\n Object.defineProperty(exports, '__esModule', { value: true })\n}))\n"]}
|
|
1
|
+
{"version":3,"file":"printer.js","names":["global","factory","exports","module","define","amd","self","jsonlintPrinter","this","noop","isIdentifierName","value","test","concatenateTokens","tokens","outputString","tokenCount","length","tokenIndex","raw","print","options","Error","indentString","indent","Array","join","prettyPrint","undefined","pruneComments","stripObjectKeys","enforceDoubleQuotes","enforceSingleQuotes","trimTrailingCommas","foundLineBreak","addedLineBreak","needsLineBreak","addedSpace","needsSpace","indentLevel","scopes","scopeType","isValue","token","tokenType","tokenContent","peekAtNextToken","nextTokenIndex","nextToken","type","addIndent","i","addLineBreak","addDelayedSpaceOrLineBreak","addStandaloneComment","tryAddingInlineComment","tryTokenIndex","skipWhitespace","indexOf","substr","addLiteral","tokenValue","JSON","stringify","replace","openScope","push","closeScope","pop","addComma","addColon","Object","defineProperty"],"sources":["lib/printer.js"],"sourcesContent":["(function (global, factory) {\n // eslint-disable-next-line no-unused-expressions, multiline-ternary\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports)\n // eslint-disable-next-line no-undef, multiline-ternary\n : typeof define === 'function' && define.amd ? define('jsonlint-printer', ['exports'], factory)\n // eslint-disable-next-line no-undef\n : (global = global || self, factory(global.jsonlintPrinter = {}))\n}(this, function (exports) {\n 'use strict'\n\n function noop () {}\n\n function isIdentifierName (value) {\n return /^[a-zA-Z$_][a-zA-Z0-9$_]*$/.test(value)\n }\n\n function concatenateTokens (tokens) {\n let outputString = ''\n const tokenCount = tokens.length\n let tokenIndex\n for (tokenIndex = 0; tokenIndex < tokenCount; ++tokenIndex) {\n outputString += tokens[tokenIndex].raw\n }\n return outputString\n }\n\n function print (tokens, options) {\n if (!(tokens && tokens.length)) {\n throw new Error('JSON tokens missing.')\n }\n // Whitespace and comments are available only as raw token content.\n if (!(tokens[0] && tokens[0].raw)) {\n throw new Error('JSON tokens lack raw values.')\n }\n\n if (!options) {\n // If no options, not even an empty object is passed, just concatenate\n // the raw tokens with neither minification, nor pretty-printing.\n return concatenateTokens(tokens)\n }\n\n let indentString = options.indent\n if (typeof indentString === 'number') {\n indentString = new Array(indentString + 1).join(' ')\n }\n // Setting the indent to an empty string enables pretty-printing too.\n // It will just insert line breaks without any indentation.\n const prettyPrint = indentString !== undefined\n const pruneComments = options.pruneComments\n const stripObjectKeys = options.stripObjectKeys\n const enforceDoubleQuotes = options.enforceDoubleQuotes\n const enforceSingleQuotes = options.enforceSingleQuotes\n const trimTrailingCommas = options.trimTrailingCommas\n\n let outputString = ''\n let foundLineBreak, addedLineBreak, needsLineBreak\n let addedSpace, needsSpace\n let indentLevel = 0\n const scopes = []\n let scopeType\n let isValue\n const tokenCount = tokens.length\n let tokenIndex, token, tokenType, tokenContent\n\n function peekAtNextToken () {\n let nextTokenIndex = tokenIndex\n let nextToken\n do {\n nextToken = tokens[++nextTokenIndex]\n } while (nextToken && (nextToken.type === 'whitespace' ||\n nextToken.type === 'comment'))\n return nextToken\n }\n\n let addIndent\n if (prettyPrint && indentString) {\n addIndent = function () {\n for (let i = 0; i < indentLevel; ++i) {\n outputString += indentString\n }\n }\n } else {\n addIndent = noop\n }\n\n let addLineBreak, addDelayedSpaceOrLineBreak\n if (prettyPrint) {\n addLineBreak = function () {\n outputString += '\\n'\n }\n\n addDelayedSpaceOrLineBreak = function () {\n // A line break is more important than a space.\n if (needsLineBreak) {\n addLineBreak()\n addIndent()\n } else if (needsSpace) {\n outputString += ' '\n }\n needsSpace = needsLineBreak = false\n }\n } else {\n addLineBreak = addDelayedSpaceOrLineBreak = noop\n }\n\n let addStandaloneComment, tryAddingInlineComment\n if (pruneComments) {\n addStandaloneComment = tryAddingInlineComment = noop\n } else {\n if (prettyPrint) {\n addStandaloneComment = function () {\n // If a comment is not appended to the end of a line, it will start\n // on a new line with the current indentation.\n if (!addedLineBreak && tokenIndex > 0) {\n addLineBreak()\n addIndent()\n }\n outputString += tokenContent\n foundLineBreak = false\n addedLineBreak = false\n // If a comment is not appended to the end of a line, it will take\n // the whole line and has to end by a line break.\n needsLineBreak = true\n }\n\n tryAddingInlineComment = function () {\n // This function is called after printing a non-line-break character.\n foundLineBreak = false\n addedLineBreak = false\n addedSpace = false\n\n // Start with the character after the just processed one.\n let tryTokenIndex = tokenIndex + 1\n\n function skipWhitespace () {\n let token = tokens[tryTokenIndex]\n if (token && token.type === 'whitespace') {\n foundLineBreak = token.raw.indexOf('\\n') >= 0\n token = tokens[++tryTokenIndex]\n }\n return token\n }\n\n const token = skipWhitespace()\n // If line break followed the previous token, leave the comment\n // to be handled by the next usual token processing.\n if (!foundLineBreak && token && token.type === 'comment') {\n if (needsLineBreak) {\n // If the previous non-whitespace token was ended by a line\n // break, retain it. Print the comment after the line break too.\n if (!addedLineBreak) {\n addLineBreak()\n addIndent()\n }\n } else {\n // If the previous non-whitespace token was not ended by a line\n // break, ensure that the comment is separated from it.\n if (!addedSpace) {\n outputString += ' '\n }\n }\n outputString += token.raw\n // Set the current token to the just processed comment.\n tokenIndex = tryTokenIndex++\n // Check the whitespace after the comment to give a hint\n // about the next whitespace to the further processing.\n skipWhitespace()\n if (foundLineBreak) {\n needsSpace = false\n needsLineBreak = true\n } else {\n needsSpace = true\n needsLineBreak = false\n }\n }\n }\n } else {\n // If all whitespace is omitted, convert single-line comments\n // to multi-line ones, which include a comment-closing token.\n addStandaloneComment = function () {\n if (tokenContent[1] === '/') {\n outputString += '/*'\n outputString += tokenContent.substr(2, tokenContent.length - 2)\n outputString += ' */'\n } else {\n outputString += tokenContent\n }\n }\n\n tryAddingInlineComment = noop\n }\n }\n\n function addLiteral () {\n addDelayedSpaceOrLineBreak()\n const tokenValue = token.value\n if (stripObjectKeys && scopeType === '{' && !isValue &&\n isIdentifierName(tokenValue)) {\n outputString += tokenValue\n } else if (typeof tokenValue === 'string') {\n if (enforceDoubleQuotes && tokenContent[0] !== '\"') {\n outputString += JSON.stringify(tokenValue)\n } else if (enforceSingleQuotes && tokenContent[0] !== '\\'') {\n outputString += '\\'' + tokenValue.replace(/'/g, '\\\\\\'') + '\\''\n } else {\n outputString += tokenContent\n }\n } else {\n outputString += tokenContent\n }\n tryAddingInlineComment()\n }\n\n function openScope () {\n addDelayedSpaceOrLineBreak()\n scopes.push(scopeType)\n scopeType = tokenContent\n isValue = scopeType === '['\n outputString += tokenContent\n tryAddingInlineComment()\n ++indentLevel\n needsLineBreak = true\n }\n\n function closeScope () {\n scopeType = scopes.pop()\n addLineBreak()\n --indentLevel\n addIndent()\n needsSpace = needsLineBreak = false\n outputString += tokenContent\n tryAddingInlineComment()\n }\n\n function addComma () {\n if (trimTrailingCommas) {\n const nextToken = peekAtNextToken()\n if (nextToken && nextToken.type === 'symbol') {\n return tryAddingInlineComment()\n }\n }\n addDelayedSpaceOrLineBreak()\n outputString += ','\n tryAddingInlineComment()\n addLineBreak()\n addIndent()\n addedLineBreak = true\n needsLineBreak = false\n isValue = scopeType === '['\n }\n\n function addColon () {\n addDelayedSpaceOrLineBreak()\n outputString += ':'\n needsSpace = true\n tryAddingInlineComment()\n isValue = true\n }\n\n for (tokenIndex = 0; tokenIndex < tokenCount; ++tokenIndex) {\n token = tokens[tokenIndex]\n tokenType = token.type\n tokenContent = token.raw\n switch (tokenType) {\n case 'literal':\n addLiteral()\n break\n case 'comment':\n addStandaloneComment()\n break\n case 'symbol':\n switch (tokenContent) {\n case '{':\n case '[':\n openScope()\n break\n case '}':\n case ']':\n closeScope()\n break\n case ',':\n addComma()\n break\n case ':':\n addColon()\n }\n break\n default: // whitespace\n foundLineBreak = tokenContent.indexOf('\\n') >= 0\n }\n }\n\n return outputString\n }\n\n exports.print = print\n\n Object.defineProperty(exports, '__esModule', { value: true })\n}))\n"],"mappings":"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"}
|