| | |
| | | "use strict"; |
| | | |
| | | const WebpackError = require("./WebpackError"); |
| | | const makeSerializable = require("./util/makeSerializable"); |
| | | |
| | | /** @typedef {import("./serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */ |
| | | /** @typedef {import("./serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */ |
| | | |
| | | /** |
| | | * Defines the callback callback. |
| | | * @template T |
| | | * @callback Callback |
| | | * @param {Error | null} err |
| | |
| | | * @param {string} hook name of hook |
| | | */ |
| | | constructor(error, hook) { |
| | | super(error.message); |
| | | super(error ? error.message : undefined, error ? { cause: error } : {}); |
| | | |
| | | this.name = "HookWebpackError"; |
| | | this.hook = hook; |
| | | this.error = error; |
| | | /** @type {string} */ |
| | | this.name = "HookWebpackError"; |
| | | this.hideStack = true; |
| | | this.details = `caused by plugins in ${hook}\n${error.stack}`; |
| | | this.stack += `\n-- inner error --\n${error ? error.stack : ""}`; |
| | | this.details = `caused by plugins in ${hook}\n${error ? error.stack : ""}`; |
| | | } |
| | | |
| | | this.stack += `\n-- inner error --\n${error.stack}`; |
| | | /** |
| | | * Serializes this instance into the provided serializer context. |
| | | * @param {ObjectSerializerContext} context context |
| | | */ |
| | | serialize(context) { |
| | | const { write } = context; |
| | | |
| | | write(this.error); |
| | | write(this.hook); |
| | | |
| | | super.serialize(context); |
| | | } |
| | | |
| | | /** |
| | | * Restores this instance from the provided deserializer context. |
| | | * @param {ObjectDeserializerContext} context context |
| | | */ |
| | | deserialize(context) { |
| | | const { read } = context; |
| | | |
| | | this.error = read(); |
| | | this.hook = read(); |
| | | |
| | | super.deserialize(context); |
| | | } |
| | | } |
| | | |
| | | makeSerializable(HookWebpackError, "webpack/lib/HookWebpackError"); |
| | | |
| | | module.exports = HookWebpackError; |
| | | |
| | | /** |
| | | * Creates webpack error. |
| | | * @param {Error} error an error |
| | | * @param {string} hook name of the hook |
| | | * @returns {WebpackError} a webpack error |
| | |
| | | module.exports.makeWebpackError = makeWebpackError; |
| | | |
| | | /** |
| | | * Creates webpack error callback. |
| | | * @template T |
| | | * @param {(err: WebpackError | null, result?: T) => void} callback webpack error callback |
| | | * @param {string} hook name of hook |
| | |
| | | module.exports.makeWebpackErrorCallback = makeWebpackErrorCallback; |
| | | |
| | | /** |
| | | * Try run or webpack error. |
| | | * @template T |
| | | * @param {() => T} fn function which will be wrapping in try catch |
| | | * @param {string} hook name of hook |
| | | * @returns {T} the result |
| | | */ |
| | | const tryRunOrWebpackError = (fn, hook) => { |
| | | /** @type {T} */ |
| | | let r; |
| | | try { |
| | | r = fn(); |