@prantlf/jsonlint 10.0.1 → 10.2.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/CHANGELOG.md CHANGED
@@ -1,3 +1,28 @@
1
+ # [10.2.0](https://github.com/prantlf/jsonlint/compare/v10.1.1...v10.2.0) (2019-12-28)
2
+
3
+ ### Features
4
+
5
+ * Allow trimming trailing commas in arrays and objects (JSON5) ([136ea99](https://github.com/prantlf/jsonlint/commit/136ea995bef7b0f77c2ac54b6ce7dd8572190bf8))
6
+ * Allow unifying quotes around object keys to double or single ones (JSON5) ([6b6da17](https://github.com/prantlf/jsonlint/commit/6b6da175cfea8f71841e145a525ef124c19c2607))
7
+
8
+ # [10.1.1](https://github.com/prantlf/jsonlint/compare/v10.1.0...v10.1.1) (2019-12-27)
9
+
10
+ ### Bug Fixes
11
+
12
+ * Restore compatibility with IE11 ([55b8a48](https://github.com/prantlf/jsonlint/commit/55b8a4816b08c5504cf7f0841d1997634a6376ea))
13
+
14
+ # [10.1.0](https://github.com/prantlf/jsonlint/compare/v10.0.2...v10.1.0) (2019-12-27)
15
+
16
+ ### Features
17
+
18
+ * Alternatively accept number of spaces for the indent parameter ([4c25739](https://github.com/prantlf/jsonlint/commit/4c257399b77e446c198b25049fae2ca08ad174ec))
19
+
20
+ # [10.0.2](https://github.com/prantlf/jsonlint/compare/v10.0.1...v10.0.2) (2019-12-27)
21
+
22
+ ### Bug Fixes
23
+
24
+ * Do not modify input options in the tokenize method ([7e3ac0b](https://github.com/prantlf/jsonlint/commit/7e3ac0babf873c42da1daadaee2bbe55d2644690))
25
+
1
26
  # [10.0.1](https://github.com/prantlf/jsonlint/compare/v10.0.0...v10.0.1) (2019-12-27)
2
27
 
3
28
  ### Bug Fixes
package/README.md CHANGED
@@ -84,8 +84,8 @@ By default, `jsonlint` will either report a syntax error with details or pretty-
84
84
  -E, --extensions [ext] file extensions to process for directory walk
85
85
  (default: ["json","JSON"])
86
86
  -i, --in-place overwrite the input files
87
- -t, --indent [char] characters to use for indentation
88
- (default: " ")
87
+ -t, --indent [num|char] number of spaces or specific characters
88
+ to use for indentation (default: 2)
89
89
  -c, --compact compact error display
90
90
  -M, --mode [mode] set other parsing flags according to a format
91
91
  type (default: "json")
@@ -103,6 +103,11 @@ By default, `jsonlint` will either report a syntax error with details or pretty-
103
103
  --prune-comments omit comments from the prettified output
104
104
  --strip-object-keys strip quotes from object keys if possible
105
105
  (JSON5)
106
+ --enforce-double-quotes surrounds all strings with double quotes
107
+ --enforce-single-quotes surrounds all strings with single quotes
108
+ (JSON5)
109
+ --trim-trailing-commas omit trailing commas from objects and arrays
110
+ (JSON5)
106
111
  -v, --version output the version number
107
112
  -h, --help output usage information
108
113
 
@@ -190,7 +195,7 @@ You can parse a JSON string to an array of tokens and print it back to a string
190
195
  const { tokenize } = require('@prantlf/jsonlint')
191
196
  const tokens = tokenize('string with JSON data', { rawTokens: true })
192
197
  const { print } = require('@prantlf/jsonlint/lib/printer')
193
- const output = print(tokens, { indent: ' ' })
198
+ const output = print(tokens, { indent: 2 })
194
199
  ```
195
200
 
196
201
  The [`tokenize`](#tokenizing) method accepts options in the second optional parameter. See the [`tokenize`](#tokenizing) method above for more information.
@@ -199,9 +204,12 @@ The [`print`](#pretty-printing) method accepts an object `options` as the second
199
204
 
200
205
  | Option | Description |
201
206
  | --------------------------- | ------------------------------------------------------- |
202
- | `indent` | whitespace characters to be used as an indentation unit |
207
+ | `indent` | count of spaces or the specific characters to be used as an indentation unit |
203
208
  | `pruneComments` | will omit all tokens with comments |
204
209
  | `stripObjectKeys` | will not print quotes around object keys which are JavaScript identifier names |
210
+ | `enforceDoubleQuotes` | will surround all strings with double quotes |
211
+ | `enforceSingleQuotes` | will surround all strings with single quotes |
212
+ | `trimTrailingCommas` | will omit all trailing commas after the last object entry or array item |
205
213
 
206
214
  ```js
207
215
  // Just concatenate the tokens to produce the same output as was the input.
@@ -213,13 +221,19 @@ print(tokens, {})
213
221
  // (Just introduce line breaks.)
214
222
  print(tokens, { indent: '' })
215
223
  // Print to multiple lines with object and array indentation. (Just like
216
- //`JSON.stringify(json, undefined, ' ')` would do it, but retaining comments.)
217
- print(tokens, { indent: ' ' })
224
+ //`JSON.stringify(json, undefined, 2)` would do it, but retaining comments.)
225
+ print(tokens, { indent: 2 })
218
226
  // Print to multiple lines with object and array indentation, omit comments.
219
227
  // (Just like `JSON.stringify(json, undefined, ' ')` would do it.)
220
228
  print(tokens, { indent: ' ', pruneComments: true })
221
229
  // Print to multiple lines with indentation enabled and JSON5 object keys.
222
- print(tokens, { indent: ' ', stripObjectKeys: true })
230
+ print(tokens, { indent: '\t', stripObjectKeys: true })
231
+ // Print to multiple lines with indentation enabled, unify JSON5 formatting.
232
+ print(tokens, {
233
+ indent: ' ',
234
+ enforceDoubleQuotes: true,
235
+ trimTrailingCommas: true
236
+ })
223
237
  ```
224
238
 
225
239
  ### Tokenizing
@@ -305,8 +319,9 @@ ${reason}`)
305
319
 
306
320
  Copyright (C) 2012-2019 Zachary Carter, Ferdinand Prantl
307
321
 
308
- Licensed under the MIT license.
322
+ Licensed under the [MIT License].
309
323
 
324
+ [MIT License]: http://en.wikipedia.org/wiki/MIT_License
310
325
  [pure JavaScript version]: http://prantlf.github.com/jsonlint/
311
326
  [jsonlint.com]: http://jsonlint.com
312
327
  [JSON]: https://tools.ietf.org/html/rfc8259
package/lib/cli.js CHANGED
@@ -20,7 +20,7 @@ var options = require('commander')
20
20
  .option('-s, --sort-keys', 'sort object keys (not when prettifying)')
21
21
  .option('-E, --extensions [ext]', 'file extensions to process for directory walk', collectExtensions, ['json', 'JSON'])
22
22
  .option('-i, --in-place', 'overwrite the input files')
23
- .option('-t, --indent [char]', 'characters to use for indentation', ' ')
23
+ .option('-t, --indent [num|char]', 'number of spaces or specific characters to use for indentation', 2)
24
24
  .option('-c, --compact', 'compact error display')
25
25
  .option('-M, --mode [mode]', 'set other parsing flags according to a format type', 'json')
26
26
  .option('-C, --comments', 'recognize and ignore JavaScript-style comments')
@@ -34,6 +34,9 @@ var options = require('commander')
34
34
  .option('-P, --pretty-print-invalid', 'force pretty-printing even for invalid input')
35
35
  .option('--prune-comments', 'omit comments from the prettified output')
36
36
  .option('--strip-object-keys', 'strip quotes from object keys if possible (JSON5)')
37
+ .option('--enforce-double-quotes', 'surrounds all strings with double quotes')
38
+ .option('--enforce-single-quotes', 'surrounds all strings with single quotes (JSON5)')
39
+ .option('--trim-trailing-commas', 'omit trailing commas from objects and arrays (JSON5)')
37
40
  .version(pkg.version, '-v, --version')
38
41
  .on('--help', () => {
39
42
  console.log()
@@ -86,7 +89,10 @@ function parse (source, file) {
86
89
  return printer.print(tokens, {
87
90
  indent: options.indent,
88
91
  pruneComments: options.pruneComments,
89
- stripObjectKeys: options.stripObjectKeys
92
+ stripObjectKeys: options.stripObjectKeys,
93
+ enforceDoubleQuotes: options.enforceDoubleQuotes,
94
+ enforceSingleQuotes: options.enforceSingleQuotes,
95
+ trimTrailingCommas: options.trimTrailingCommas
90
96
  })
91
97
  }
92
98
  if (options.sortKeys) {
package/lib/formatter.js CHANGED
@@ -20,70 +20,72 @@
20
20
  return new Array(count + 1).join(s)
21
21
  }
22
22
 
23
- function format (json, indentChars) {
23
+ function format (json, indent) {
24
24
  var i = 0
25
- var il = 0
26
- var tab = indentChars !== undefined ? indentChars : ' '
27
- var newJson = ''
25
+ var length = 0
26
+ var indentString = indent !== undefined
27
+ ? typeof indent === 'number'
28
+ ? new Array(indent + 1).join(' ') : indent : ' '
29
+ var outputString = ''
28
30
  var indentLevel = 0
29
- var inString = false
30
- var currentChar = null
31
+ var inString
32
+ var currentChar
31
33
 
32
- for (i = 0, il = json.length; i < il; i += 1) {
34
+ for (i = 0, length = json.length; i < length; i += 1) {
33
35
  currentChar = json.charAt(i)
34
36
  switch (currentChar) {
35
37
  case '{':
36
38
  case '[':
37
39
  if (!inString) {
38
- newJson += currentChar + '\n' + repeat(tab, indentLevel + 1)
40
+ outputString += currentChar + '\n' + repeat(indentString, indentLevel + 1)
39
41
  indentLevel += 1
40
42
  } else {
41
- newJson += currentChar
43
+ outputString += currentChar
42
44
  }
43
45
  break
44
46
  case '}':
45
47
  case ']':
46
48
  if (!inString) {
47
49
  indentLevel -= 1
48
- newJson += '\n' + repeat(tab, indentLevel) + currentChar
50
+ outputString += '\n' + repeat(indentString, indentLevel) + currentChar
49
51
  } else {
50
- newJson += currentChar
52
+ outputString += currentChar
51
53
  }
52
54
  break
53
55
  case ',':
54
56
  if (!inString) {
55
- newJson += ',\n' + repeat(tab, indentLevel)
57
+ outputString += ',\n' + repeat(indentString, indentLevel)
56
58
  } else {
57
- newJson += currentChar
59
+ outputString += currentChar
58
60
  }
59
61
  break
60
62
  case ':':
61
63
  if (!inString) {
62
- newJson += ': '
64
+ outputString += ': '
63
65
  } else {
64
- newJson += currentChar
66
+ outputString += currentChar
65
67
  }
66
68
  break
67
69
  case ' ':
68
70
  case '\n':
69
71
  case '\t':
70
72
  if (inString) {
71
- newJson += currentChar
73
+ outputString += currentChar
72
74
  }
73
75
  break
74
76
  case '"':
75
77
  if (i > 0 && json.charAt(i - 1) !== '\\') {
76
78
  inString = !inString
77
79
  }
78
- newJson += currentChar
80
+ outputString += currentChar
79
81
  break
80
82
  default:
81
- newJson += currentChar
83
+ outputString += currentChar
82
84
  break
83
85
  }
84
86
  }
85
87
 
86
- return newJson
88
+ return outputString
87
89
  }
88
90
 
89
91
  exports.format = format
package/lib/jsonlint.d.ts CHANGED
@@ -87,9 +87,12 @@ declare module '@prantlf/jsonlint/lib/validator' {
87
87
 
88
88
  declare module '@prantlf/jsonlint/lib/printer' {
89
89
  interface PrintOptions {
90
- indent?: string
90
+ indent?: number | string
91
91
  pruneComments?: boolean
92
92
  stripObjectKeys?: boolean
93
+ enforceDoubleQuotes?: boolean
94
+ enforceSingleQuotes?: boolean
95
+ trimTrailingCommas?: boolean
93
96
  }
94
97
 
95
98
  /**
@@ -100,7 +103,7 @@ declare module '@prantlf/jsonlint/lib/printer' {
100
103
  * import { tokenize } from '@prantlf/jsonlint'
101
104
  * import { print } from '@prantlf/jsonlint/lib/printer'
102
105
  * const tokens = tokenize('string with JSON data', { rawTokens: true })
103
- * const outputString = print(tokens, { indent: ' ' })
106
+ * const outputString = print(tokens, { indent: 2 })
104
107
  * ```
105
108
  *
106
109
  * @param tokens - an array of JSON tokens
package/lib/jsonlint.js CHANGED
@@ -719,8 +719,13 @@ function tokenize (input, options) { // eslint-disable-line no-unused-vars
719
719
  if (!options) {
720
720
  options = {}
721
721
  }
722
+ // As long as this is the single modification, this is easier than cloning.
723
+ // (Once Node.js 6 is dropped, this can be replaced by object destructuring.)
724
+ var oldTokenize = options.tokenize
722
725
  options.tokenize = true
723
- return parseInternal(input, options)
726
+ var tokens = parseInternal(input, options)
727
+ options.tokenize = oldTokenize
728
+ return tokens
724
729
  }
725
730
 
726
731
  function escapePointerToken (token) {
package/lib/printer.js CHANGED
@@ -40,11 +40,17 @@
40
40
  }
41
41
 
42
42
  var indentString = options.indent
43
+ if (typeof indentString === 'number') {
44
+ indentString = new Array(indentString + 1).join(' ')
45
+ }
43
46
  // Setting the indent to an empty string enables pretty-printing too.
44
47
  // It will just insert line breaks without any indentation.
45
48
  var prettyPrint = indentString !== undefined
46
49
  var pruneComments = options.pruneComments
47
50
  var stripObjectKeys = options.stripObjectKeys
51
+ var enforceDoubleQuotes = options.enforceDoubleQuotes
52
+ var enforceSingleQuotes = options.enforceSingleQuotes
53
+ var trimTrailingCommas = options.trimTrailingCommas
48
54
 
49
55
  var outputString = ''
50
56
  var foundLineBreak, addedLineBreak, needsLineBreak
@@ -56,6 +62,16 @@
56
62
  var tokenCount = tokens.length
57
63
  var tokenIndex, token, tokenType, tokenContent
58
64
 
65
+ function peekAtNextToken () {
66
+ var nextTokenIndex = tokenIndex
67
+ var nextToken
68
+ do {
69
+ nextToken = tokens[++nextTokenIndex]
70
+ } while (nextToken && (nextToken.type === 'whitespace' ||
71
+ nextToken.type === 'comment'))
72
+ return nextToken
73
+ }
74
+
59
75
  var addIndent
60
76
  if (prettyPrint && indentString) {
61
77
  addIndent = function () {
@@ -181,6 +197,14 @@
181
197
  if (stripObjectKeys && scopeType === '{' && !isValue &&
182
198
  isIdentifierName(tokenValue)) {
183
199
  outputString += tokenValue
200
+ } else if (typeof tokenValue === 'string') {
201
+ if (enforceDoubleQuotes && tokenContent[0] !== '"') {
202
+ outputString += JSON.stringify(tokenValue)
203
+ } else if (enforceSingleQuotes && tokenContent[0] !== '\'') {
204
+ outputString += '\'' + tokenValue.replace(/'/g, '\\\'') + '\''
205
+ } else {
206
+ outputString += tokenContent
207
+ }
184
208
  } else {
185
209
  outputString += tokenContent
186
210
  }
@@ -209,6 +233,12 @@
209
233
  }
210
234
 
211
235
  function addComma () {
236
+ if (trimTrailingCommas) {
237
+ var nextToken = peekAtNextToken()
238
+ if (nextToken && nextToken.type === 'symbol') {
239
+ return tryAddingInlineComment()
240
+ }
241
+ }
212
242
  addDelayedSpaceOrLineBreak()
213
243
  outputString += ','
214
244
  tryAddingInlineComment()
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@prantlf/jsonlint",
3
- "version": "10.0.1",
3
+ "version": "10.2.0",
4
4
  "description": "JSON parser, syntax and schema validator and pretty-printer.",
5
5
  "author": "Ferdinand Prantl <prantlf@gmail.com> (http://prantl.tk)",
6
6
  "contributors": [
@@ -1,2 +1,2 @@
1
- (function(global,factory){typeof exports==="object"&&typeof module!=="undefined"?factory(exports):typeof define==="function"&&define.amd?define("jsonlint-formatter",["exports"],factory):(global=global||self,factory(global.jsonlintFormatter={}))})(this,function(exports){"use strict";function repeat(s,count){return new Array(count+1).join(s)}function format(json,indentChars){var i=0;var il=0;var tab=indentChars!==undefined?indentChars:" ";var newJson="";var indentLevel=0;var inString=false;var currentChar=null;for(i=0,il=json.length;i<il;i+=1){currentChar=json.charAt(i);switch(currentChar){case"{":case"[":if(!inString){newJson+=currentChar+"\n"+repeat(tab,indentLevel+1);indentLevel+=1}else{newJson+=currentChar}break;case"}":case"]":if(!inString){indentLevel-=1;newJson+="\n"+repeat(tab,indentLevel)+currentChar}else{newJson+=currentChar}break;case",":if(!inString){newJson+=",\n"+repeat(tab,indentLevel)}else{newJson+=currentChar}break;case":":if(!inString){newJson+=": "}else{newJson+=currentChar}break;case" ":case"\n":case"\t":if(inString){newJson+=currentChar}break;case'"':if(i>0&&json.charAt(i-1)!=="\\"){inString=!inString}newJson+=currentChar;break;default:newJson+=currentChar;break}}return newJson}exports.format=format;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-formatter",["exports"],factory):(global=global||self,factory(global.jsonlintFormatter={}))})(this,function(exports){"use strict";function repeat(s,count){return new Array(count+1).join(s)}function format(json,indent){var i=0;var length=0;var indentString=indent!==undefined?typeof indent==="number"?new Array(indent+1).join(" "):indent:" ";var outputString="";var indentLevel=0;var inString;var currentChar;for(i=0,length=json.length;i<length;i+=1){currentChar=json.charAt(i);switch(currentChar){case"{":case"[":if(!inString){outputString+=currentChar+"\n"+repeat(indentString,indentLevel+1);indentLevel+=1}else{outputString+=currentChar}break;case"}":case"]":if(!inString){indentLevel-=1;outputString+="\n"+repeat(indentString,indentLevel)+currentChar}else{outputString+=currentChar}break;case",":if(!inString){outputString+=",\n"+repeat(indentString,indentLevel)}else{outputString+=currentChar}break;case":":if(!inString){outputString+=": "}else{outputString+=currentChar}break;case" ":case"\n":case"\t":if(inString){outputString+=currentChar}break;case'"':if(i>0&&json.charAt(i-1)!=="\\"){inString=!inString}outputString+=currentChar;break;default:outputString+=currentChar;break}}return outputString}exports.format=format;Object.defineProperty(exports,"__esModule",{value:true})});
2
2
  //# sourceMappingURL=formatter.min.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["lib/formatter.js"],"names":["global","factory","exports","module","define","amd","self","jsonlintFormatter","this","repeat","s","count","Array","join","format","json","indentChars","i","il","tab","undefined","newJson","indentLevel","inString","currentChar","length","charAt","Object","defineProperty","value"],"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,MANrE,CAOEC,KAAM,SAAUN,SAChB,aAUA,SAASO,OAAQC,EAAGC,OAClB,OAAO,IAAIC,MAAMD,MAAQ,GAAGE,KAAKH,GAGnC,SAASI,OAAQC,KAAMC,aACrB,IAAIC,EAAI,EACR,IAAIC,GAAK,EACT,IAAIC,IAAMH,cAAgBI,UAAYJ,YAAc,OACpD,IAAIK,QAAU,GACd,IAAIC,YAAc,EAClB,IAAIC,SAAW,MACf,IAAIC,YAAc,KAElB,IAAKP,EAAI,EAAGC,GAAKH,KAAKU,OAAQR,EAAIC,GAAID,GAAK,EAAG,CAC5CO,YAAcT,KAAKW,OAAOT,GAC1B,OAAQO,aACN,IAAK,IACL,IAAK,IACH,IAAKD,SAAU,CACbF,SAAWG,YAAc,KAAOf,OAAOU,IAAKG,YAAc,GAC1DA,aAAe,MACV,CACLD,SAAWG,YAEb,MACF,IAAK,IACL,IAAK,IACH,IAAKD,SAAU,CACbD,aAAe,EACfD,SAAW,KAAOZ,OAAOU,IAAKG,aAAeE,gBACxC,CACLH,SAAWG,YAEb,MACF,IAAK,IACH,IAAKD,SAAU,CACbF,SAAW,MAAQZ,OAAOU,IAAKG,iBAC1B,CACLD,SAAWG,YAEb,MACF,IAAK,IACH,IAAKD,SAAU,CACbF,SAAW,SACN,CACLA,SAAWG,YAEb,MACF,IAAK,IACL,IAAK,KACL,IAAK,KACH,GAAID,SAAU,CACZF,SAAWG,YAEb,MACF,IAAK,IACH,GAAIP,EAAI,GAAKF,KAAKW,OAAOT,EAAI,KAAO,KAAM,CACxCM,UAAYA,SAEdF,SAAWG,YACX,MACF,QACEH,SAAWG,YACX,OAIN,OAAOH,QAGTnB,QAAQY,OAASA,OAEjBa,OAAOC,eAAe1B,QAAS,aAAc,CAAE2B,MAAO","file":"formatter.js","sourcesContent":["(function (global, factory) {\n // eslint-disable-next-line no-unused-expressions\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports)\n // eslint-disable-next-line no-undef\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, indentChars) {\n var i = 0\n var il = 0\n var tab = indentChars !== undefined ? indentChars : ' '\n var newJson = ''\n var indentLevel = 0\n var inString = false\n var currentChar = null\n\n for (i = 0, il = json.length; i < il; i += 1) {\n currentChar = json.charAt(i)\n switch (currentChar) {\n case '{':\n case '[':\n if (!inString) {\n newJson += currentChar + '\\n' + repeat(tab, indentLevel + 1)\n indentLevel += 1\n } else {\n newJson += currentChar\n }\n break\n case '}':\n case ']':\n if (!inString) {\n indentLevel -= 1\n newJson += '\\n' + repeat(tab, indentLevel) + currentChar\n } else {\n newJson += currentChar\n }\n break\n case ',':\n if (!inString) {\n newJson += ',\\n' + repeat(tab, indentLevel)\n } else {\n newJson += currentChar\n }\n break\n case ':':\n if (!inString) {\n newJson += ': '\n } else {\n newJson += currentChar\n }\n break\n case ' ':\n case '\\n':\n case '\\t':\n if (inString) {\n newJson += currentChar\n }\n break\n case '\"':\n if (i > 0 && json.charAt(i - 1) !== '\\\\') {\n inString = !inString\n }\n newJson += currentChar\n break\n default:\n newJson += currentChar\n break\n }\n }\n\n return newJson\n }\n\n exports.format = format\n\n Object.defineProperty(exports, '__esModule', { value: true })\n}))\n"]}
1
+ {"version":3,"sources":["lib/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"],"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,MANrE,CAOEC,KAAM,SAAUN,SAChB,aAUA,SAASO,OAAQC,EAAGC,OAClB,OAAO,IAAIC,MAAMD,MAAQ,GAAGE,KAAKH,GAGnC,SAASI,OAAQC,KAAMC,QACrB,IAAIC,EAAI,EACR,IAAIC,OAAS,EACb,IAAIC,aAAeH,SAAWI,iBACnBJ,SAAW,SAChB,IAAIJ,MAAMI,OAAS,GAAGH,KAAK,KAAOG,OAAS,KACjD,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,MACV,CACLD,cAAgBG,YAElB,MACF,IAAK,IACL,IAAK,IACH,IAAKD,SAAU,CACbD,aAAe,EACfD,cAAgB,KAAOZ,OAAOU,aAAcG,aAAeE,gBACtD,CACLH,cAAgBG,YAElB,MACF,IAAK,IACH,IAAKD,SAAU,CACbF,cAAgB,MAAQZ,OAAOU,aAAcG,iBACxC,CACLD,cAAgBG,YAElB,MACF,IAAK,IACH,IAAKD,SAAU,CACbF,cAAgB,SACX,CACLA,cAAgBG,YAElB,MACF,IAAK,IACL,IAAK,KACL,IAAK,KACH,GAAID,SAAU,CACZF,cAAgBG,YAElB,MACF,IAAK,IACH,GAAIP,EAAI,GAAKF,KAAKU,OAAOR,EAAI,KAAO,KAAM,CACxCM,UAAYA,SAEdF,cAAgBG,YAChB,MACF,QACEH,cAAgBG,YAChB,OAIN,OAAOH,aAGTnB,QAAQY,OAASA,OAEjBY,OAAOC,eAAezB,QAAS,aAAc,CAAE0B,MAAO","file":"formatter.js","sourcesContent":["(function (global, factory) {\n // eslint-disable-next-line no-unused-expressions\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports)\n // eslint-disable-next-line no-undef\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 var i = 0\n var length = 0\n var indentString = indent !== undefined\n ? typeof indent === 'number'\n ? new Array(indent + 1).join(' ') : indent : ' '\n var outputString = ''\n var indentLevel = 0\n var inString\n var 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"]}
@@ -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";var 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"}var 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)}var json5=options.mode==="json5";var ignoreComments=options.ignoreComments||options.mode==="cjson"||json5;var ignoreTrailingCommas=options.ignoreTrailingCommas||json5;var allowSingleQuotedStrings=options.allowSingleQuotedStrings||json5;var allowDuplicateObjectKeys=options.allowDuplicateObjectKeys;var reviver=options.reviver;var tokenize=options.tokenize;var rawTokens=options.rawTokens;var tokenLocations=options.tokenLocations;var tokenPaths=options.tokenPaths;var isLineTerminator=json5?Uni.isLineTerminator:Uni.isLineTerminatorJSON;var isWhiteSpace=json5?Uni.isWhiteSpace:Uni.isWhiteSpaceJSON;var inputLength=input.length;var lineNumber=0;var lineStart=0;var position=0;var startToken;var endToken;var tokenPath;if(tokenize){var tokens=[];var tokenOffset=null;var tokenLine;var 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){var 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(){var message;if(position<inputLength){var token=JSON.stringify(input[position]);message="Unexpected token "+token}else{message="Unexpected end of input"}return message}function createError(message){var column=position-lineStart+1;++lineNumber;var texts=getTexts(message,input,position,lineNumber,column);var 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()}var error=createError(message);throw error}function newLine(char){if(char==="\r"&&input[position]==="\n"){++position}lineStart=position;++lineNumber}function parseGeneric(){while(position<inputLength){startToken&&startToken();var char=input[position++];if(char==='"'||char==="'"&&allowSingleQuotedStrings){var 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")){var 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(){var result;while(position<inputLength){startToken&&startToken();var char=input[position++];if(char==='"'||char==="'"&&allowSingleQuotedStrings){var 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)){var number=parseNumber(true);endToken&&endToken("literal",number);return number}else if(json5&&Uni.isIdentifierStart(char)||char==="\\"&&input[position]==="u"){var 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(){var insideWhiteSpace;function startWhiteSpace(){if(!insideWhiteSpace){insideWhiteSpace=true;--position;startToken();++position}}function endWhiteSpace(){if(insideWhiteSpace){insideWhiteSpace=false;endToken("whitespace")}}while(position<inputLength){var 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){var 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){var startPosition=position;for(var i=1,keywordLength=keyword.length;i<keywordLength;++i){if(position>=inputLength||keyword[i]!==input[position]){position=startPosition-1;fail()}++position}}function parseObject(){var result={};var emptyObject={};var isNotEmpty=false;while(position<inputLength){skipWhiteSpace();var key=parseKey();if(allowDuplicateObjectKeys===false&&result[key]){fail('Duplicate key: "'+key+'"')}skipWhiteSpace();startToken&&startToken();var 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);var 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(){var result=[];while(position<inputLength){skipWhiteSpace();tokenPath&&tokenPath.push(result.length);var item=parseGeneric();tokenPath&&tokenPath.pop();skipWhiteSpace();startToken&&startToken();var 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;var start=position;var char=input[position++];var toNumber=function(isOctal){var string=input.substr(start,position-start);var 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++];var isOctal=char==="o"||char==="O"||isOctDigit(char);var isHex=char==="x"||char==="X";if(json5&&(isOctal||isHex)){while(position<inputLength&&(isHex?isHexDigit:isOctDigit)(input[position])){++position}var 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;var result="";while(position<inputLength){var 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){var result="";while(position<inputLength){var 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){var count=char==="u"?4:2;for(var 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)){var 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();var 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={}}options.tokenize=true;return parseInternal(input,options)}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){var lines=input.substr(0,offset).split(/\r?\n/);var line=lines.length;var column=lines[line-1].length+1;return{line:line,column:column}}function pastInput(input,offset){var start=Math.max(0,offset-20);var previous=input.substr(start,offset-start);return(offset>20?"...":"")+previous.replace(/\r?\n/g,"")}function upcomingInput(input,offset){var start=Math.max(0,offset-20);start+=offset-start;var rest=input.length-start;var next=input.substr(start,Math.min(20,rest));return next.replace(/\r?\n/g,"")+(rest>20?"...":"")}function getPositionContext(input,offset){var past=pastInput(input,offset);var upcoming=upcomingInput(input,offset);var pointer=new Array(past.length+1).join("-")+"^";return{excerpt:past+upcoming,pointer:pointer}}function getReason(error){var message=error.message.replace("JSON.parse: ","").replace("JSON Parse error: ","");var firstCharacter=message.charAt(0);if(firstCharacter>="a"){message=firstCharacter.toUpperCase()+message.substr(1)}return message}function getLocationOnV8(input,reason){var match=/ in JSON at position (\d+)$/.exec(reason);if(match){var offset=+match[1];var location=getLineAndColumn(input,offset);return{offset:offset,line:location.line,column:location.column,reason:reason.substr(0,match.index)}}}function checkUnexpectedEndOnV8(input,reason){var match=/ end of JSON input$/.exec(reason);if(match){var offset=input.length;var location=getLineAndColumn(input,offset);return{offset:offset,line:location.line,column:location.column,reason:reason.substr(0,match.index+4)}}}function getLocationOnSpiderMonkey(input,reason){var match=/ at line (\d+) column (\d+) of the JSON data$/.exec(reason);if(match){var line=+match[1];var column=+match[2];var 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){var position=getPositionContext(input,offset);var excerpt=position.excerpt;var 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){var reason=getReason(error);var location=getLocationOnV8(input,reason)||checkUnexpectedEndOnV8(input,reason)||getLocationOnSpiderMonkey(input,reason);var offset,line,column;if(location){offset=location.offset;line=location.line;column=location.column;reason=location.reason}else{offset=0}error.reason=reason;var 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)}}var isSafari=typeof navigator!=="undefined"&&/Safari/.test(navigator.userAgent)&&/Apple Computer/.test(navigator.vendor);var 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";var 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"}var 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)}var json5=options.mode==="json5";var ignoreComments=options.ignoreComments||options.mode==="cjson"||json5;var ignoreTrailingCommas=options.ignoreTrailingCommas||json5;var allowSingleQuotedStrings=options.allowSingleQuotedStrings||json5;var allowDuplicateObjectKeys=options.allowDuplicateObjectKeys;var reviver=options.reviver;var tokenize=options.tokenize;var rawTokens=options.rawTokens;var tokenLocations=options.tokenLocations;var tokenPaths=options.tokenPaths;var isLineTerminator=json5?Uni.isLineTerminator:Uni.isLineTerminatorJSON;var isWhiteSpace=json5?Uni.isWhiteSpace:Uni.isWhiteSpaceJSON;var inputLength=input.length;var lineNumber=0;var lineStart=0;var position=0;var startToken;var endToken;var tokenPath;if(tokenize){var tokens=[];var tokenOffset=null;var tokenLine;var 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){var 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(){var message;if(position<inputLength){var token=JSON.stringify(input[position]);message="Unexpected token "+token}else{message="Unexpected end of input"}return message}function createError(message){var column=position-lineStart+1;++lineNumber;var texts=getTexts(message,input,position,lineNumber,column);var 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()}var error=createError(message);throw error}function newLine(char){if(char==="\r"&&input[position]==="\n"){++position}lineStart=position;++lineNumber}function parseGeneric(){while(position<inputLength){startToken&&startToken();var char=input[position++];if(char==='"'||char==="'"&&allowSingleQuotedStrings){var 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")){var 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(){var result;while(position<inputLength){startToken&&startToken();var char=input[position++];if(char==='"'||char==="'"&&allowSingleQuotedStrings){var 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)){var number=parseNumber(true);endToken&&endToken("literal",number);return number}else if(json5&&Uni.isIdentifierStart(char)||char==="\\"&&input[position]==="u"){var 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(){var insideWhiteSpace;function startWhiteSpace(){if(!insideWhiteSpace){insideWhiteSpace=true;--position;startToken();++position}}function endWhiteSpace(){if(insideWhiteSpace){insideWhiteSpace=false;endToken("whitespace")}}while(position<inputLength){var 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){var 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){var startPosition=position;for(var i=1,keywordLength=keyword.length;i<keywordLength;++i){if(position>=inputLength||keyword[i]!==input[position]){position=startPosition-1;fail()}++position}}function parseObject(){var result={};var emptyObject={};var isNotEmpty=false;while(position<inputLength){skipWhiteSpace();var key=parseKey();if(allowDuplicateObjectKeys===false&&result[key]){fail('Duplicate key: "'+key+'"')}skipWhiteSpace();startToken&&startToken();var 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);var 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(){var result=[];while(position<inputLength){skipWhiteSpace();tokenPath&&tokenPath.push(result.length);var item=parseGeneric();tokenPath&&tokenPath.pop();skipWhiteSpace();startToken&&startToken();var 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;var start=position;var char=input[position++];var toNumber=function(isOctal){var string=input.substr(start,position-start);var 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++];var isOctal=char==="o"||char==="O"||isOctDigit(char);var isHex=char==="x"||char==="X";if(json5&&(isOctal||isHex)){while(position<inputLength&&(isHex?isHexDigit:isOctDigit)(input[position])){++position}var 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;var result="";while(position<inputLength){var 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){var result="";while(position<inputLength){var 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){var count=char==="u"?4:2;for(var 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)){var 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();var 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={}}var oldTokenize=options.tokenize;options.tokenize=true;var 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){var lines=input.substr(0,offset).split(/\r?\n/);var line=lines.length;var column=lines[line-1].length+1;return{line:line,column:column}}function pastInput(input,offset){var start=Math.max(0,offset-20);var previous=input.substr(start,offset-start);return(offset>20?"...":"")+previous.replace(/\r?\n/g,"")}function upcomingInput(input,offset){var start=Math.max(0,offset-20);start+=offset-start;var rest=input.length-start;var next=input.substr(start,Math.min(20,rest));return next.replace(/\r?\n/g,"")+(rest>20?"...":"")}function getPositionContext(input,offset){var past=pastInput(input,offset);var upcoming=upcomingInput(input,offset);var pointer=new Array(past.length+1).join("-")+"^";return{excerpt:past+upcoming,pointer:pointer}}function getReason(error){var message=error.message.replace("JSON.parse: ","").replace("JSON Parse error: ","");var firstCharacter=message.charAt(0);if(firstCharacter>="a"){message=firstCharacter.toUpperCase()+message.substr(1)}return message}function getLocationOnV8(input,reason){var match=/ in JSON at position (\d+)$/.exec(reason);if(match){var offset=+match[1];var location=getLineAndColumn(input,offset);return{offset:offset,line:location.line,column:location.column,reason:reason.substr(0,match.index)}}}function checkUnexpectedEndOnV8(input,reason){var match=/ end of JSON input$/.exec(reason);if(match){var offset=input.length;var location=getLineAndColumn(input,offset);return{offset:offset,line:location.line,column:location.column,reason:reason.substr(0,match.index+4)}}}function getLocationOnSpiderMonkey(input,reason){var match=/ at line (\d+) column (\d+) of the JSON data$/.exec(reason);if(match){var line=+match[1];var column=+match[2];var 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){var position=getPositionContext(input,offset);var excerpt=position.excerpt;var 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){var reason=getReason(error);var location=getLocationOnV8(input,reason)||checkUnexpectedEndOnV8(input,reason)||getLocationOnSpiderMonkey(input,reason);var offset,line,column;if(location){offset=location.offset;line=location.line;column=location.column;reason=location.reason}else{offset=0}error.reason=reason;var 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)}}var isSafari=typeof navigator!=="undefined"&&/Safari/.test(navigator.userAgent)&&/Apple Computer/.test(navigator.vendor);var 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})});
2
2
  //# sourceMappingURL=jsonlint.min.js.map
@@ -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","startToken","endToken","tokenPath","tokens","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","escapePointerToken","toString","pathToPointer","map","join","unescapePointerToken","pointerToPath","split","getLineAndColumn","lines","pastInput","Math","max","previous","upcomingInput","rest","next","min","getPositionContext","past","upcoming","Array","getReason","firstCharacter","charAt","toUpperCase","getLocationOnV8","exec","index","checkUnexpectedEndOnV8","getLocationOnSpiderMonkey","getOffset","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\nvar 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\nvar 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 var json5 = options.mode === 'json5'\n var ignoreComments = options.ignoreComments || options.mode === 'cjson' || json5\n var ignoreTrailingCommas = options.ignoreTrailingCommas || json5\n var allowSingleQuotedStrings = options.allowSingleQuotedStrings || json5\n var allowDuplicateObjectKeys = options.allowDuplicateObjectKeys\n var reviver = options.reviver\n var tokenize = options.tokenize\n var rawTokens = options.rawTokens\n var tokenLocations = options.tokenLocations\n var tokenPaths = options.tokenPaths\n\n var isLineTerminator = json5 ? Uni.isLineTerminator : Uni.isLineTerminatorJSON\n var isWhiteSpace = json5 ? Uni.isWhiteSpace : Uni.isWhiteSpaceJSON\n\n var inputLength = input.length\n var lineNumber = 0\n var lineStart = 0\n var position = 0\n\n var startToken\n var endToken\n var tokenPath\n\n if (tokenize) {\n var tokens = []\n var tokenOffset = null\n var tokenLine\n var 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 var token = { type: 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 var message\n if (position < inputLength) {\n var 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 var column = position - lineStart + 1\n ++lineNumber\n var texts = getTexts(message, input, position, lineNumber, column)\n var 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: 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 var 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 while (position < inputLength) {\n startToken && startToken()\n var char = input[position++]\n if (char === '\"' || (char === '\\'' && allowSingleQuotedStrings)) {\n var 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 var 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 var result\n while (position < inputLength) {\n startToken && startToken()\n var char = input[position++]\n if (char === '\"' || (char === '\\'' && allowSingleQuotedStrings)) {\n var 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 var number = parseNumber(true)\n endToken && endToken('literal', number)\n return number\n } else if ((json5 && Uni.isIdentifierStart(char)) ||\n (char === '\\\\' && input[position] === 'u')) {\n var 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 var 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 var 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 var 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 var startPosition = position\n for (var 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 var result = {}\n var emptyObject = {}\n var isNotEmpty = false\n\n while (position < inputLength) {\n skipWhiteSpace()\n var key = parseKey()\n if (allowDuplicateObjectKeys === false && result[key]) {\n fail('Duplicate key: \"' + key + '\"')\n }\n skipWhiteSpace()\n startToken && startToken()\n var 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 var 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 var result = []\n while (position < inputLength) {\n skipWhiteSpace()\n tokenPath && tokenPath.push(result.length)\n var item = parseGeneric()\n tokenPath && tokenPath.pop()\n skipWhiteSpace()\n startToken && startToken()\n var 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 var start = position\n var char = input[position++]\n var toNumber = function (isOctal) {\n var string = input.substr(start, position - start)\n var 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 var isOctal = char === 'o' || char === 'O' || isOctDigit(char)\n var 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 var 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 var result = ''\n while (position < inputLength) {\n var 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 var result = ''\n while (position < inputLength) {\n var 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 var count = char === 'u' ? 4 : 2\n // validation for \\uXXXX\n for (var 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 var 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 var 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 options.tokenize = true\n return parseInternal(input, options)\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 var lines = input\n .substr(0, offset)\n .split(/\\r?\\n/)\n var line = lines.length\n var column = lines[line - 1].length + 1\n return {\n line: line,\n column: column\n }\n}\n\nfunction pastInput (input, offset) {\n var start = Math.max(0, offset - 20)\n var previous = input.substr(start, offset - start)\n return (offset > 20 ? '...' : '') + previous.replace(/\\r?\\n/g, '')\n}\n\nfunction upcomingInput (input, offset) {\n var start = Math.max(0, offset - 20)\n start += offset - start\n var rest = input.length - start\n var next = input.substr(start, Math.min(20, rest))\n return next.replace(/\\r?\\n/g, '') + (rest > 20 ? '...' : '')\n}\n\nfunction getPositionContext (input, offset) {\n var past = pastInput(input, offset)\n var upcoming = upcomingInput(input, offset)\n var pointer = new Array(past.length + 1).join('-') + '^'\n return {\n excerpt: past + upcoming,\n pointer: pointer\n }\n}\n\nfunction getReason (error) {\n var message = error.message\n .replace('JSON.parse: ', '') // SpiderMonkey\n .replace('JSON Parse error: ', '') // SquirrelFish\n var 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 var match = / in JSON at position (\\d+)$/.exec(reason)\n if (match) {\n var offset = +match[1]\n var location = getLineAndColumn(input, offset)\n return {\n offset: 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 var match = / end of JSON input$/.exec(reason)\n if (match) {\n var offset = input.length\n var location = getLineAndColumn(input, offset)\n return {\n offset: 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 var match = / at line (\\d+) column (\\d+) of the JSON data$/.exec(reason)\n if (match) {\n var line = +match[1]\n var column = +match[2]\n var offset = getOffset(input, line, column) // eslint-disable-line no-undef\n return {\n offset: offset,\n line: line,\n column: column,\n reason: reason.substr(0, match.index)\n }\n }\n}\n\nfunction getTexts (reason, input, offset, line, column) {\n var position = getPositionContext(input, offset)\n var excerpt = position.excerpt\n var 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: message,\n excerpt: excerpt,\n pointer: pointer\n }\n}\n\nfunction improveNativeError (input, error) {\n var reason = getReason(error)\n var location = getLocationOnV8(input, reason) ||\n checkUnexpectedEndOnV8(input, reason) ||\n getLocationOnSpiderMonkey(input, reason)\n var 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 var 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: column,\n line: line,\n offset: 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\nvar isSafari = typeof navigator !== 'undefined' && /Safari/.test(navigator.userAgent) && /Apple Computer/.test(navigator.vendor)\nvar 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,"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","startToken","endToken","tokenPath","tokens","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","pastInput","Math","max","previous","upcomingInput","rest","next","min","getPositionContext","past","upcoming","Array","getReason","firstCharacter","charAt","toUpperCase","getLocationOnV8","exec","index","checkUnexpectedEndOnV8","getLocationOnSpiderMonkey","getOffset","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\nvar 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\nvar 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 var json5 = options.mode === 'json5'\n var ignoreComments = options.ignoreComments || options.mode === 'cjson' || json5\n var ignoreTrailingCommas = options.ignoreTrailingCommas || json5\n var allowSingleQuotedStrings = options.allowSingleQuotedStrings || json5\n var allowDuplicateObjectKeys = options.allowDuplicateObjectKeys\n var reviver = options.reviver\n var tokenize = options.tokenize\n var rawTokens = options.rawTokens\n var tokenLocations = options.tokenLocations\n var tokenPaths = options.tokenPaths\n\n var isLineTerminator = json5 ? Uni.isLineTerminator : Uni.isLineTerminatorJSON\n var isWhiteSpace = json5 ? Uni.isWhiteSpace : Uni.isWhiteSpaceJSON\n\n var inputLength = input.length\n var lineNumber = 0\n var lineStart = 0\n var position = 0\n\n var startToken\n var endToken\n var tokenPath\n\n if (tokenize) {\n var tokens = []\n var tokenOffset = null\n var tokenLine\n var 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 var token = { type: 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 var message\n if (position < inputLength) {\n var 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 var column = position - lineStart + 1\n ++lineNumber\n var texts = getTexts(message, input, position, lineNumber, column)\n var 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: 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 var 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 while (position < inputLength) {\n startToken && startToken()\n var char = input[position++]\n if (char === '\"' || (char === '\\'' && allowSingleQuotedStrings)) {\n var 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 var 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 var result\n while (position < inputLength) {\n startToken && startToken()\n var char = input[position++]\n if (char === '\"' || (char === '\\'' && allowSingleQuotedStrings)) {\n var 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 var number = parseNumber(true)\n endToken && endToken('literal', number)\n return number\n } else if ((json5 && Uni.isIdentifierStart(char)) ||\n (char === '\\\\' && input[position] === 'u')) {\n var 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 var 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 var 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 var 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 var startPosition = position\n for (var 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 var result = {}\n var emptyObject = {}\n var isNotEmpty = false\n\n while (position < inputLength) {\n skipWhiteSpace()\n var key = parseKey()\n if (allowDuplicateObjectKeys === false && result[key]) {\n fail('Duplicate key: \"' + key + '\"')\n }\n skipWhiteSpace()\n startToken && startToken()\n var 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 var 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 var result = []\n while (position < inputLength) {\n skipWhiteSpace()\n tokenPath && tokenPath.push(result.length)\n var item = parseGeneric()\n tokenPath && tokenPath.pop()\n skipWhiteSpace()\n startToken && startToken()\n var 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 var start = position\n var char = input[position++]\n var toNumber = function (isOctal) {\n var string = input.substr(start, position - start)\n var 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 var isOctal = char === 'o' || char === 'O' || isOctDigit(char)\n var 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 var 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 var result = ''\n while (position < inputLength) {\n var 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 var result = ''\n while (position < inputLength) {\n var 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 var count = char === 'u' ? 4 : 2\n // validation for \\uXXXX\n for (var 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 var 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 var 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 var oldTokenize = options.tokenize\n options.tokenize = true\n var 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 var lines = input\n .substr(0, offset)\n .split(/\\r?\\n/)\n var line = lines.length\n var column = lines[line - 1].length + 1\n return {\n line: line,\n column: column\n }\n}\n\nfunction pastInput (input, offset) {\n var start = Math.max(0, offset - 20)\n var previous = input.substr(start, offset - start)\n return (offset > 20 ? '...' : '') + previous.replace(/\\r?\\n/g, '')\n}\n\nfunction upcomingInput (input, offset) {\n var start = Math.max(0, offset - 20)\n start += offset - start\n var rest = input.length - start\n var next = input.substr(start, Math.min(20, rest))\n return next.replace(/\\r?\\n/g, '') + (rest > 20 ? '...' : '')\n}\n\nfunction getPositionContext (input, offset) {\n var past = pastInput(input, offset)\n var upcoming = upcomingInput(input, offset)\n var pointer = new Array(past.length + 1).join('-') + '^'\n return {\n excerpt: past + upcoming,\n pointer: pointer\n }\n}\n\nfunction getReason (error) {\n var message = error.message\n .replace('JSON.parse: ', '') // SpiderMonkey\n .replace('JSON Parse error: ', '') // SquirrelFish\n var 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 var match = / in JSON at position (\\d+)$/.exec(reason)\n if (match) {\n var offset = +match[1]\n var location = getLineAndColumn(input, offset)\n return {\n offset: 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 var match = / end of JSON input$/.exec(reason)\n if (match) {\n var offset = input.length\n var location = getLineAndColumn(input, offset)\n return {\n offset: 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 var match = / at line (\\d+) column (\\d+) of the JSON data$/.exec(reason)\n if (match) {\n var line = +match[1]\n var column = +match[2]\n var offset = getOffset(input, line, column) // eslint-disable-line no-undef\n return {\n offset: offset,\n line: line,\n column: column,\n reason: reason.substr(0, match.index)\n }\n }\n}\n\nfunction getTexts (reason, input, offset, line, column) {\n var position = getPositionContext(input, offset)\n var excerpt = position.excerpt\n var 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: message,\n excerpt: excerpt,\n pointer: pointer\n }\n}\n\nfunction improveNativeError (input, error) {\n var reason = getReason(error)\n var location = getLocationOnV8(input, reason) ||\n checkUnexpectedEndOnV8(input, reason) ||\n getLocationOnSpiderMonkey(input, reason)\n var 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 var 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: column,\n line: line,\n offset: 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\nvar isSafari = typeof navigator !== 'undefined' && /Safari/.test(navigator.userAgent) && /Apple Computer/.test(navigator.vendor)\nvar 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,2 +1,2 @@
1
- (function(global,factory){typeof exports==="object"&&typeof module!=="undefined"?factory(exports):typeof define==="function"&&define.amd?define("jsonlint-printer",["exports"],factory):(global=global||self,factory(global.jsonlintPrinter={}))})(this,function(exports){"use strict";function noop(){}function isIdentifierName(value){return/^[a-zA-Z$_][a-zA-Z0-9$_]*$/.test(value)}function concatenateTokens(tokens){var outputString="";var tokenCount=tokens.length;var tokenIndex;for(tokenIndex=0;tokenIndex<tokenCount;++tokenIndex){outputString+=tokens[tokenIndex].raw}return outputString}function print(tokens,options){if(!(tokens&&tokens.length)){throw new Error("JSON tokens missing.")}if(!(tokens[0]&&tokens[0].raw)){throw new Error("JSON tokens lack raw values.")}if(!options){return concatenateTokens(tokens)}var indentString=options.indent;var prettyPrint=indentString!==undefined;var pruneComments=options.pruneComments;var stripObjectKeys=options.stripObjectKeys;var outputString="";var foundLineBreak,addedLineBreak,needsLineBreak;var addedSpace,needsSpace;var indentLevel=0;var scopes=[];var scopeType;var isValue;var tokenCount=tokens.length;var tokenIndex,token,tokenType,tokenContent;var addIndent;if(prettyPrint&&indentString){addIndent=function(){for(var i=0;i<indentLevel;++i){outputString+=indentString}}}else{addIndent=noop}var addLineBreak,addDelayedSpaceOrLineBreak;if(prettyPrint){addLineBreak=function(){outputString+="\n"};addDelayedSpaceOrLineBreak=function(){if(needsLineBreak){addLineBreak();addIndent()}else if(needsSpace){outputString+=" "}needsSpace=needsLineBreak=false}}else{addLineBreak=addDelayedSpaceOrLineBreak=noop}var addStandaloneComment,tryAddingInlineComment;if(pruneComments){addStandaloneComment=tryAddingInlineComment=noop}else{if(prettyPrint){addStandaloneComment=function(){if(!addedLineBreak&&tokenIndex>0){addLineBreak();addIndent()}outputString+=tokenContent;foundLineBreak=false;addedLineBreak=false;needsLineBreak=true};tryAddingInlineComment=function(){foundLineBreak=false;addedLineBreak=false;addedSpace=false;var tryTokenIndex=tokenIndex+1;function skipWhitespace(){var token=tokens[tryTokenIndex];if(token&&token.type==="whitespace"){foundLineBreak=token.raw.indexOf("\n")>=0;token=tokens[++tryTokenIndex]}return token}var token=skipWhitespace();if(!foundLineBreak&&token&&token.type==="comment"){if(needsLineBreak){if(!addedLineBreak){addLineBreak();addIndent()}}else{if(!addedSpace){outputString+=" "}}outputString+=token.raw;tokenIndex=tryTokenIndex++;skipWhitespace();if(foundLineBreak){needsSpace=false;needsLineBreak=true}else{needsSpace=true;needsLineBreak=false}}}}else{addStandaloneComment=function(){if(tokenContent[1]==="/"){outputString+="/*";outputString+=tokenContent.substr(2,tokenContent.length-2);outputString+=" */"}else{outputString+=tokenContent}};tryAddingInlineComment=noop}}function addLiteral(){addDelayedSpaceOrLineBreak();var tokenValue=token.value;if(stripObjectKeys&&scopeType==="{"&&!isValue&&isIdentifierName(tokenValue)){outputString+=tokenValue}else{outputString+=tokenContent}tryAddingInlineComment()}function openScope(){addDelayedSpaceOrLineBreak();scopes.push(scopeType);scopeType=tokenContent;isValue=scopeType==="[";outputString+=tokenContent;tryAddingInlineComment();++indentLevel;needsLineBreak=true}function closeScope(){scopeType=scopes.pop();addLineBreak();--indentLevel;addIndent();needsSpace=needsLineBreak=false;outputString+=tokenContent;tryAddingInlineComment()}function addComma(){addDelayedSpaceOrLineBreak();outputString+=",";tryAddingInlineComment();addLineBreak();addIndent();addedLineBreak=true;needsLineBreak=false;isValue=scopeType==="["}function addColon(){addDelayedSpaceOrLineBreak();outputString+=":";needsSpace=true;tryAddingInlineComment();isValue=true}for(tokenIndex=0;tokenIndex<tokenCount;++tokenIndex){token=tokens[tokenIndex];tokenType=token.type;tokenContent=token.raw;switch(tokenType){case"literal":addLiteral();break;case"comment":addStandaloneComment();break;case"symbol":switch(tokenContent){case"{":case"[":openScope();break;case"}":case"]":closeScope();break;case",":addComma();break;case":":addColon()}break;default:foundLineBreak=tokenContent.indexOf("\n")>=0}}return outputString}exports.print=print;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-printer",["exports"],factory):(global=global||self,factory(global.jsonlintPrinter={}))})(this,function(exports){"use strict";function noop(){}function isIdentifierName(value){return/^[a-zA-Z$_][a-zA-Z0-9$_]*$/.test(value)}function concatenateTokens(tokens){var outputString="";var tokenCount=tokens.length;var tokenIndex;for(tokenIndex=0;tokenIndex<tokenCount;++tokenIndex){outputString+=tokens[tokenIndex].raw}return outputString}function print(tokens,options){if(!(tokens&&tokens.length)){throw new Error("JSON tokens missing.")}if(!(tokens[0]&&tokens[0].raw)){throw new Error("JSON tokens lack raw values.")}if(!options){return concatenateTokens(tokens)}var indentString=options.indent;if(typeof indentString==="number"){indentString=new Array(indentString+1).join(" ")}var prettyPrint=indentString!==undefined;var pruneComments=options.pruneComments;var stripObjectKeys=options.stripObjectKeys;var enforceDoubleQuotes=options.enforceDoubleQuotes;var enforceSingleQuotes=options.enforceSingleQuotes;var trimTrailingCommas=options.trimTrailingCommas;var outputString="";var foundLineBreak,addedLineBreak,needsLineBreak;var addedSpace,needsSpace;var indentLevel=0;var scopes=[];var scopeType;var isValue;var tokenCount=tokens.length;var tokenIndex,token,tokenType,tokenContent;function peekAtNextToken(){var nextTokenIndex=tokenIndex;var nextToken;do{nextToken=tokens[++nextTokenIndex]}while(nextToken&&(nextToken.type==="whitespace"||nextToken.type==="comment"));return nextToken}var addIndent;if(prettyPrint&&indentString){addIndent=function(){for(var i=0;i<indentLevel;++i){outputString+=indentString}}}else{addIndent=noop}var addLineBreak,addDelayedSpaceOrLineBreak;if(prettyPrint){addLineBreak=function(){outputString+="\n"};addDelayedSpaceOrLineBreak=function(){if(needsLineBreak){addLineBreak();addIndent()}else if(needsSpace){outputString+=" "}needsSpace=needsLineBreak=false}}else{addLineBreak=addDelayedSpaceOrLineBreak=noop}var addStandaloneComment,tryAddingInlineComment;if(pruneComments){addStandaloneComment=tryAddingInlineComment=noop}else{if(prettyPrint){addStandaloneComment=function(){if(!addedLineBreak&&tokenIndex>0){addLineBreak();addIndent()}outputString+=tokenContent;foundLineBreak=false;addedLineBreak=false;needsLineBreak=true};tryAddingInlineComment=function(){foundLineBreak=false;addedLineBreak=false;addedSpace=false;var tryTokenIndex=tokenIndex+1;function skipWhitespace(){var token=tokens[tryTokenIndex];if(token&&token.type==="whitespace"){foundLineBreak=token.raw.indexOf("\n")>=0;token=tokens[++tryTokenIndex]}return token}var token=skipWhitespace();if(!foundLineBreak&&token&&token.type==="comment"){if(needsLineBreak){if(!addedLineBreak){addLineBreak();addIndent()}}else{if(!addedSpace){outputString+=" "}}outputString+=token.raw;tokenIndex=tryTokenIndex++;skipWhitespace();if(foundLineBreak){needsSpace=false;needsLineBreak=true}else{needsSpace=true;needsLineBreak=false}}}}else{addStandaloneComment=function(){if(tokenContent[1]==="/"){outputString+="/*";outputString+=tokenContent.substr(2,tokenContent.length-2);outputString+=" */"}else{outputString+=tokenContent}};tryAddingInlineComment=noop}}function addLiteral(){addDelayedSpaceOrLineBreak();var tokenValue=token.value;if(stripObjectKeys&&scopeType==="{"&&!isValue&&isIdentifierName(tokenValue)){outputString+=tokenValue}else if(typeof tokenValue==="string"){if(enforceDoubleQuotes&&tokenContent[0]!=='"'){outputString+=JSON.stringify(tokenValue)}else if(enforceSingleQuotes&&tokenContent[0]!=="'"){outputString+="'"+tokenValue.replace(/'/g,"\\'")+"'"}else{outputString+=tokenContent}}else{outputString+=tokenContent}tryAddingInlineComment()}function openScope(){addDelayedSpaceOrLineBreak();scopes.push(scopeType);scopeType=tokenContent;isValue=scopeType==="[";outputString+=tokenContent;tryAddingInlineComment();++indentLevel;needsLineBreak=true}function closeScope(){scopeType=scopes.pop();addLineBreak();--indentLevel;addIndent();needsSpace=needsLineBreak=false;outputString+=tokenContent;tryAddingInlineComment()}function addComma(){if(trimTrailingCommas){var nextToken=peekAtNextToken();if(nextToken&&nextToken.type==="symbol"){return tryAddingInlineComment()}}addDelayedSpaceOrLineBreak();outputString+=",";tryAddingInlineComment();addLineBreak();addIndent();addedLineBreak=true;needsLineBreak=false;isValue=scopeType==="["}function addColon(){addDelayedSpaceOrLineBreak();outputString+=":";needsSpace=true;tryAddingInlineComment();isValue=true}for(tokenIndex=0;tokenIndex<tokenCount;++tokenIndex){token=tokens[tokenIndex];tokenType=token.type;tokenContent=token.raw;switch(tokenType){case"literal":addLiteral();break;case"comment":addStandaloneComment();break;case"symbol":switch(tokenContent){case"{":case"[":openScope();break;case"}":case"]":closeScope();break;case",":addComma();break;case":":addColon()}break;default:foundLineBreak=tokenContent.indexOf("\n")>=0}}return outputString}exports.print=print;Object.defineProperty(exports,"__esModule",{value:true})});
2
2
  //# sourceMappingURL=printer.min.js.map
@@ -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","prettyPrint","undefined","pruneComments","stripObjectKeys","foundLineBreak","addedLineBreak","needsLineBreak","addedSpace","needsSpace","indentLevel","scopes","scopeType","isValue","token","tokenType","tokenContent","addIndent","i","addLineBreak","addDelayedSpaceOrLineBreak","addStandaloneComment","tryAddingInlineComment","tryTokenIndex","skipWhitespace","type","indexOf","substr","addLiteral","tokenValue","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\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports)\n // eslint-disable-next-line no-undef\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 var outputString = ''\n var tokenCount = tokens.length\n var 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 var indentString = options.indent\n // Setting the indent to an empty string enables pretty-printing too.\n // It will just insert line breaks without any indentation.\n var prettyPrint = indentString !== undefined\n var pruneComments = options.pruneComments\n var stripObjectKeys = options.stripObjectKeys\n\n var outputString = ''\n var foundLineBreak, addedLineBreak, needsLineBreak\n var addedSpace, needsSpace\n var indentLevel = 0\n var scopes = []\n var scopeType\n var isValue\n var tokenCount = tokens.length\n var tokenIndex, token, tokenType, tokenContent\n\n var addIndent\n if (prettyPrint && indentString) {\n addIndent = function () {\n for (var i = 0; i < indentLevel; ++i) {\n outputString += indentString\n }\n }\n } else {\n addIndent = noop\n }\n\n var 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 var 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 var tryTokenIndex = tokenIndex + 1\n\n function skipWhitespace () {\n var 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 var 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 var tokenValue = token.value\n if (stripObjectKeys && scopeType === '{' && !isValue &&\n isIdentifierName(tokenValue)) {\n outputString += tokenValue\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 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,"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\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports)\n // eslint-disable-next-line no-undef\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 var outputString = ''\n var tokenCount = tokens.length\n var 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 var 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 var prettyPrint = indentString !== undefined\n var pruneComments = options.pruneComments\n var stripObjectKeys = options.stripObjectKeys\n var enforceDoubleQuotes = options.enforceDoubleQuotes\n var enforceSingleQuotes = options.enforceSingleQuotes\n var trimTrailingCommas = options.trimTrailingCommas\n\n var outputString = ''\n var foundLineBreak, addedLineBreak, needsLineBreak\n var addedSpace, needsSpace\n var indentLevel = 0\n var scopes = []\n var scopeType\n var isValue\n var tokenCount = tokens.length\n var tokenIndex, token, tokenType, tokenContent\n\n function peekAtNextToken () {\n var nextTokenIndex = tokenIndex\n var nextToken\n do {\n nextToken = tokens[++nextTokenIndex]\n } while (nextToken && (nextToken.type === 'whitespace' ||\n nextToken.type === 'comment'))\n return nextToken\n }\n\n var addIndent\n if (prettyPrint && indentString) {\n addIndent = function () {\n for (var i = 0; i < indentLevel; ++i) {\n outputString += indentString\n }\n }\n } else {\n addIndent = noop\n }\n\n var 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 var 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 var tryTokenIndex = tokenIndex + 1\n\n function skipWhitespace () {\n var 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 var 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 var 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 var 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"]}