36 lines
		
	
	
		
			589 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			36 lines
		
	
	
		
			589 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| '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;
 | |
| 	}
 | |
| };
 |