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.
35 lines
589 B
35 lines
589 B
'use strict'; |
|
var errorEx = require('error-ex'); |
|
var fallback = require('./vendor/parse'); |
|
|
|
var JSONError = errorEx('JSONError', { |
|
fileName: errorEx.append('in %s') |
|
}); |
|
|
|
module.exports = function (x, reviver, filename) { |
|
if (typeof reviver === 'string') { |
|
filename = reviver; |
|
reviver = null; |
|
} |
|
|
|
try { |
|
try { |
|
return JSON.parse(x, reviver); |
|
} catch (err) { |
|
fallback.parse(x, { |
|
mode: 'json', |
|
reviver: reviver |
|
}); |
|
|
|
throw err; |
|
} |
|
} catch (err) { |
|
var jsonErr = new JSONError(err); |
|
|
|
if (filename) { |
|
jsonErr.fileName = filename; |
|
} |
|
|
|
throw jsonErr; |
|
} |
|
};
|
|
|