ModuleBuildError.js 1.8 KB

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