| 
									
										
										
										
											2019-05-10 17:06:25 +08:00
										 |  |  | /* | 
					
						
							|  |  |  | 	MIT License http://www.opensource.org/licenses/mit-license.php
 | 
					
						
							|  |  |  | 	Author Sean Larkin @thelarkinn | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | "use strict"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const WebpackError = require("./WebpackError"); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-09 20:49:47 +08:00
										 |  |  | /** | 
					
						
							|  |  |  |  * @template T | 
					
						
							|  |  |  |  * @callback Callback | 
					
						
							| 
									
										
										
										
											2024-03-18 01:15:44 +08:00
										 |  |  |  * @param {Error | null} err | 
					
						
							| 
									
										
										
										
											2019-08-09 20:49:47 +08:00
										 |  |  |  * @param {T=} stats | 
					
						
							|  |  |  |  * @returns {void} | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-10 17:06:25 +08:00
										 |  |  | 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; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-11 03:37:35 +08:00
										 |  |  | /** | 
					
						
							|  |  |  |  * @param {Error} error an error | 
					
						
							|  |  |  |  * @param {string} hook name of the hook | 
					
						
							|  |  |  |  * @returns {WebpackError} a webpack error | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2019-05-10 17:06:25 +08:00
										 |  |  | const makeWebpackError = (error, hook) => { | 
					
						
							|  |  |  | 	if (error instanceof WebpackError) return error; | 
					
						
							|  |  |  | 	return new HookWebpackError(error, hook); | 
					
						
							|  |  |  | }; | 
					
						
							| 
									
										
										
										
											2025-07-02 20:10:54 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-10 17:06:25 +08:00
										 |  |  | module.exports.makeWebpackError = makeWebpackError; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * @template T | 
					
						
							| 
									
										
										
										
											2025-03-12 09:56:14 +08:00
										 |  |  |  * @param {(err: WebpackError | null, result?: T) => void} callback webpack error callback | 
					
						
							| 
									
										
										
										
											2019-05-10 17:06:25 +08:00
										 |  |  |  * @param {string} hook name of hook | 
					
						
							| 
									
										
										
										
											2019-08-09 20:49:47 +08:00
										 |  |  |  * @returns {Callback<T>} generic callback | 
					
						
							| 
									
										
										
										
											2019-05-10 17:06:25 +08:00
										 |  |  |  */ | 
					
						
							| 
									
										
										
										
											2024-07-31 11:31:11 +08:00
										 |  |  | const makeWebpackErrorCallback = (callback, hook) => (err, result) => { | 
					
						
							|  |  |  | 	if (err) { | 
					
						
							|  |  |  | 		if (err instanceof WebpackError) { | 
					
						
							|  |  |  | 			callback(err); | 
					
						
							| 
									
										
										
										
											2019-05-10 17:06:25 +08:00
										 |  |  | 			return; | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2024-07-31 11:31:11 +08:00
										 |  |  | 		callback(new HookWebpackError(err, hook)); | 
					
						
							|  |  |  | 		return; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	callback(null, result); | 
					
						
							| 
									
										
										
										
											2019-05-10 17:06:25 +08:00
										 |  |  | }; | 
					
						
							| 
									
										
										
										
											2019-10-02 14:54:21 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-10 17:06:25 +08:00
										 |  |  | module.exports.makeWebpackErrorCallback = makeWebpackErrorCallback; | 
					
						
							| 
									
										
										
										
											2019-10-02 14:54:21 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * @template T | 
					
						
							| 
									
										
										
										
											2025-03-12 09:56:14 +08:00
										 |  |  |  * @param {() => T} fn function which will be wrapping in try catch | 
					
						
							| 
									
										
										
										
											2019-10-02 14:54:21 +08:00
										 |  |  |  * @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; | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2023-05-27 01:21:35 +08:00
										 |  |  | 		throw new HookWebpackError(/** @type {Error} */ (err), hook); | 
					
						
							| 
									
										
										
										
											2019-10-02 14:54:21 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	return r; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | module.exports.tryRunOrWebpackError = tryRunOrWebpackError; |