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