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