webpack/lib/HookWebpackError.js

60 lines
1.4 KiB
JavaScript
Raw Normal View History

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");
/** @typedef {import("./Module")} Module */
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}`;
Error.captureStackTrace(this, this.constructor);
this.stack += `\n-- inner error --\n${error.stack}`;
}
}
module.exports = HookWebpackError;
const makeWebpackError = (error, hook) => {
if (error instanceof WebpackError) return error;
return new HookWebpackError(error, hook);
};
module.exports.makeWebpackError = makeWebpackError;
/**
* @template T
* @param {function(WebpackError=, T=): void} callback webpack error callback
* @param {string} hook name of hook
* @returns {function(Error=, T=): void} 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;