| 'use strict'; |
| const errorEx = require('error-ex'); |
| const fallback = require('json-parse-better-errors'); |
| |
| const JSONError = errorEx('JSONError', { |
| fileName: errorEx.append('in %s') |
| }); |
| |
| module.exports = (input, reviver, filename) => { |
| if (typeof reviver === 'string') { |
| filename = reviver; |
| reviver = null; |
| } |
| |
| try { |
| try { |
| return JSON.parse(input, reviver); |
| } catch (err) { |
| fallback(input, reviver); |
| |
| throw err; |
| } |
| } catch (err) { |
| err.message = err.message.replace(/\n/g, ''); |
| |
| const jsonErr = new JSONError(err); |
| if (filename) { |
| jsonErr.fileName = filename; |
| } |
| |
| throw jsonErr; |
| } |
| }; |