ModuleBuildError.js 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  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. * @param {string | ErrorWithHideStack} err error thrown
  15. * @param {{from?: string|null}} info additional info
  16. */
  17. constructor(err, { from = null } = {}) {
  18. let message = "Module build failed";
  19. let details;
  20. message += from ? ` (from ${from}):\n` : ": ";
  21. if (err !== null && typeof err === "object") {
  22. if (typeof err.stack === "string" && err.stack) {
  23. const stack = cutOffLoaderExecution(err.stack);
  24. if (!err.hideStack) {
  25. message += stack;
  26. } else {
  27. details = stack;
  28. message +=
  29. typeof err.message === "string" && err.message ? err.message : err;
  30. }
  31. } else if (typeof err.message === "string" && err.message) {
  32. message += err.message;
  33. } else {
  34. message += String(err);
  35. }
  36. } else {
  37. message += String(err);
  38. }
  39. super(message);
  40. this.name = "ModuleBuildError";
  41. this.details = details;
  42. this.error = err;
  43. }
  44. /**
  45. * @param {ObjectSerializerContext} context context
  46. */
  47. serialize(context) {
  48. const { write } = context;
  49. write(this.error);
  50. super.serialize(context);
  51. }
  52. /**
  53. * @param {ObjectDeserializerContext} context context
  54. */
  55. deserialize(context) {
  56. const { read } = context;
  57. this.error = read();
  58. super.deserialize(context);
  59. }
  60. }
  61. makeSerializable(ModuleBuildError, "webpack/lib/ModuleBuildError");
  62. module.exports = ModuleBuildError;