Blame view

node_modules/json-parse-better-errors/index.js 1.06 KB
ce4c83ff   wxy   初始提交
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
  'use strict'
  
  module.exports = parseJson
  function parseJson (txt, reviver, context) {
    context = context || 20
    try {
      return JSON.parse(txt, reviver)
    } catch (e) {
      if (typeof txt !== 'string') {
        const isEmptyArray = Array.isArray(txt) && txt.length === 0
        const errorMessage = 'Cannot parse ' +
        (isEmptyArray ? 'an empty array' : String(txt))
        throw new TypeError(errorMessage)
      }
      const syntaxErr = e.message.match(/^Unexpected token.*position\s+(\d+)/i)
      const errIdx = syntaxErr
      ? +syntaxErr[1]
      : e.message.match(/^Unexpected end of JSON.*/i)
      ? txt.length - 1
      : null
      if (errIdx != null) {
        const start = errIdx <= context
        ? 0
        : errIdx - context
        const end = errIdx + context >= txt.length
        ? txt.length
        : errIdx + context
        e.message += ` while parsing near '${
          start === 0 ? '' : '...'
        }${txt.slice(start, end)}${
          end === txt.length ? '' : '...'
        }'`
      } else {
        e.message += ` while parsing '${txt.slice(0, context * 2)}'`
      }
      throw e
    }
  }