summaryrefslogtreecommitdiff
path: root/node_modules/webpack/lib/HookWebpackError.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/webpack/lib/HookWebpackError.js')
-rw-r--r--node_modules/webpack/lib/HookWebpackError.js93
1 files changed, 93 insertions, 0 deletions
diff --git a/node_modules/webpack/lib/HookWebpackError.js b/node_modules/webpack/lib/HookWebpackError.js
new file mode 100644
index 00000000..b3a38292
--- /dev/null
+++ b/node_modules/webpack/lib/HookWebpackError.js
@@ -0,0 +1,93 @@
+/*
+ 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(/** @type {Error} */ (err), hook);
+ }
+ return r;
+};
+
+module.exports.tryRunOrWebpackError = tryRunOrWebpackError;