| '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; | |
| } | |
| }; |