You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							93 lines
						
					
					
						
							2.0 KiB
						
					
					
				
			
		
		
	
	
							93 lines
						
					
					
						
							2.0 KiB
						
					
					
				/* | 
						|
	MIT License http://www.opensource.org/licenses/mit-license.php | 
						|
	Author Sean Larkin @thelarkinn | 
						|
*/ | 
						|
 | 
						|
"use strict"; | 
						|
 | 
						|
const WebpackError = require("./WebpackError"); | 
						|
 | 
						|
/** @typedef {import("./Module")} Module */ | 
						|
 | 
						|
/** | 
						|
 * @template T | 
						|
 * @callback Callback | 
						|
 * @param {Error=} err | 
						|
 * @param {T=} stats | 
						|
 * @returns {void} | 
						|
 */ | 
						|
 | 
						|
class HookWebpackError extends WebpackError { | 
						|
	/** | 
						|
	 * Creates an instance of HookWebpackError. | 
						|
	 * @param {Error} error inner error | 
						|
	 * @param {string} hook name of hook | 
						|
	 */ | 
						|
	constructor(error, hook) { | 
						|
		super(error.message); | 
						|
 | 
						|
		this.name = "HookWebpackError"; | 
						|
		this.hook = hook; | 
						|
		this.error = error; | 
						|
		this.hideStack = true; | 
						|
		this.details = `caused by plugins in ${hook}\n${error.stack}`; | 
						|
 | 
						|
		this.stack += `\n-- inner error --\n${error.stack}`; | 
						|
	} | 
						|
} | 
						|
 | 
						|
module.exports = HookWebpackError; | 
						|
 | 
						|
/** | 
						|
 * @param {Error} error an error | 
						|
 * @param {string} hook name of the hook | 
						|
 * @returns {WebpackError} a webpack error | 
						|
 */ | 
						|
const makeWebpackError = (error, hook) => { | 
						|
	if (error instanceof WebpackError) return error; | 
						|
	return new HookWebpackError(error, hook); | 
						|
}; | 
						|
module.exports.makeWebpackError = makeWebpackError; | 
						|
 | 
						|
/** | 
						|
 * @template T | 
						|
 * @param {function((WebpackError | null)=, T=): void} callback webpack error callback | 
						|
 * @param {string} hook name of hook | 
						|
 * @returns {Callback<T>} generic callback | 
						|
 */ | 
						|
const makeWebpackErrorCallback = (callback, hook) => { | 
						|
	return (err, result) => { | 
						|
		if (err) { | 
						|
			if (err instanceof WebpackError) { | 
						|
				callback(err); | 
						|
				return; | 
						|
			} | 
						|
			callback(new HookWebpackError(err, hook)); | 
						|
			return; | 
						|
		} | 
						|
		callback(null, result); | 
						|
	}; | 
						|
}; | 
						|
 | 
						|
module.exports.makeWebpackErrorCallback = makeWebpackErrorCallback; | 
						|
 | 
						|
/** | 
						|
 * @template T | 
						|
 * @param {function(): T} fn function which will be wrapping in try catch | 
						|
 * @param {string} hook name of hook | 
						|
 * @returns {T} the result | 
						|
 */ | 
						|
const tryRunOrWebpackError = (fn, hook) => { | 
						|
	let r; | 
						|
	try { | 
						|
		r = fn(); | 
						|
	} catch (err) { | 
						|
		if (err instanceof WebpackError) { | 
						|
			throw err; | 
						|
		} | 
						|
		throw new HookWebpackError(err, hook); | 
						|
	} | 
						|
	return r; | 
						|
}; | 
						|
 | 
						|
module.exports.tryRunOrWebpackError = tryRunOrWebpackError;
 | 
						|
 |