You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
33 lines
617 B
33 lines
617 B
'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; |
|
} |
|
};
|
|
|