34 lines
		
	
	
		
			617 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			34 lines
		
	
	
		
			617 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| '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;
 | |
| 	}
 | |
| };
 |