ModuleBuildError.js 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. /*
  2. MIT License http://www.opensource.org/licenses/mit-license.php
  3. Author Tobias Koppers @sokra
  4. */
  5. "use strict";
  6. const { cutOffLoaderExecution } = require("./ErrorHelpers");
  7. const WebpackError = require("./WebpackError");
  8. const makeSerializable = require("./util/makeSerializable");
  9. /** @typedef {import("./serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
  10. /** @typedef {import("./serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
  11. /** @typedef {Error & { hideStack?: boolean }} ErrorWithHideStack */
  12. class ModuleBuildError extends WebpackError {
  13. /**
  14. * Creates an instance of ModuleBuildError.
  15. * @param {string | ErrorWithHideStack} err error thrown
  16. * @param {{ from?: string | null }} info additional info
  17. */
  18. constructor(err, { from = null } = {}) {
  19. let message = "Module build failed";
  20. /** @type {undefined | string} */
  21. let details;
  22. message += from ? ` (from ${from}):\n` : ": ";
  23. if (err !== null && typeof err === "object") {
  24. if (typeof err.stack === "string" && err.stack) {
  25. const stack = cutOffLoaderExecution(err.stack);
  26. if (!err.hideStack) {
  27. message += stack;
  28. } else {
  29. details = stack;
  30. message +=
  31. typeof err.message === "string" && err.message ? err.message : err;
  32. }
  33. } else if (typeof err.message === "string" && err.message) {
  34. message += err.message;
  35. } else {
  36. message += String(err);
  37. }
  38. } else {
  39. message += String(err);
  40. }
  41. super(message);
  42. /** @type {string} */
  43. this.name = "ModuleBuildError";
  44. this.details = details;
  45. this.error = err;
  46. }
  47. /**
  48. * Serializes this instance into the provided serializer context.
  49. * @param {ObjectSerializerContext} context context
  50. */
  51. serialize(context) {
  52. const { write } = context;
  53. write(this.error);
  54. super.serialize(context);
  55. }
  56. /**
  57. * Restores this instance from the provided deserializer context.
  58. * @param {ObjectDeserializerContext} context context
  59. */
  60. deserialize(context) {
  61. const { read } = context;
  62. this.error = read();
  63. super.deserialize(context);
  64. }
  65. }
  66. makeSerializable(ModuleBuildError, "webpack/lib/ModuleBuildError");
  67. module.exports = ModuleBuildError;