Skip to content

Commit 62d4ede

Browse files
michael-ciniawskysokra
authored andcommitted
make WebpackErrors serializable
1 parent 440be0c commit 62d4ede

File tree

7 files changed

+197
-0
lines changed

7 files changed

+197
-0
lines changed

lib/CommentCompilationWarning.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
"use strict";
77

88
const WebpackError = require("./WebpackError");
9+
const makeSerializable = require("./util/makeSerializable");
910

1011
/** @typedef {import("./Module")} Module */
1112

@@ -28,6 +29,31 @@ class CommentCompilationWarning extends WebpackError {
2829

2930
Error.captureStackTrace(this, this.constructor);
3031
}
32+
33+
serialize(context) {
34+
const { write } = context;
35+
36+
write(this.name);
37+
write(this.module);
38+
write(this.loc);
39+
40+
super.serialize(context);
41+
}
42+
43+
deserialize(context) {
44+
const { read } = context;
45+
46+
this.name = read();
47+
this.module = read();
48+
this.loc = read();
49+
50+
super.serialize(context);
51+
}
3152
}
3253

54+
makeSerializable(
55+
CommentCompilationWarning,
56+
"webpack/lib/CommentCompilationWarning"
57+
);
58+
3359
module.exports = CommentCompilationWarning;

lib/ModuleBuildError.js

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,23 +7,28 @@
77

88
const { cutOffLoaderExecution } = require("./ErrorHelpers");
99
const WebpackError = require("./WebpackError");
10+
const makeSerializable = require("./util/makeSerializable");
1011

1112
class ModuleBuildError extends WebpackError {
1213
constructor(module, err, { from = null } = {}) {
1314
let message = "Module build failed";
1415
let details = undefined;
16+
1517
if (from) {
1618
message += ` (from ${from}):\n`;
1719
} else {
1820
message += ": ";
1921
}
22+
2023
if (err !== null && typeof err === "object") {
2124
if (typeof err.stack === "string" && err.stack) {
2225
const stack = cutOffLoaderExecution(err.stack);
26+
2327
if (!err.hideStack) {
2428
message += stack;
2529
} else {
2630
details = stack;
31+
2732
if (typeof err.message === "string" && err.message) {
2833
message += err.message;
2934
} else {
@@ -48,6 +53,30 @@ class ModuleBuildError extends WebpackError {
4853

4954
Error.captureStackTrace(this, this.constructor);
5055
}
56+
57+
serialize(context) {
58+
const { write } = context;
59+
60+
write(this.name);
61+
write(this.details);
62+
write(this.module);
63+
write(this.error);
64+
65+
super.serialize(context);
66+
}
67+
68+
deserialize(context) {
69+
const { read } = context;
70+
71+
this.name = read();
72+
this.details = read();
73+
this.module = read();
74+
this.error = read();
75+
76+
super.deserialize(context);
77+
}
5178
}
5279

80+
makeSerializable(ModuleBuildError, "webpack/lib/ModuleBuildError");
81+
5382
module.exports = ModuleBuildError;

lib/ModuleError.js

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,21 +7,26 @@
77

88
const { cleanUp } = require("./ErrorHelpers");
99
const WebpackError = require("./WebpackError");
10+
const makeSerializable = require("./util/makeSerializable");
1011

1112
class ModuleError extends WebpackError {
1213
constructor(module, err, { from = null } = {}) {
1314
let message = "Module Error";
15+
1416
if (from) {
1517
message += ` (from ${from}):\n`;
1618
} else {
1719
message += ": ";
1820
}
21+
1922
if (err && typeof err === "object" && err.message) {
2023
message += err.message;
2124
} else if (err) {
2225
message += err;
2326
}
27+
2428
super(message);
29+
2530
this.name = "ModuleError";
2631
this.module = module;
2732
this.error = err;
@@ -32,6 +37,30 @@ class ModuleError extends WebpackError {
3237

3338
Error.captureStackTrace(this, this.constructor);
3439
}
40+
41+
serialize(context) {
42+
const { write } = context;
43+
44+
write(this.name);
45+
write(this.module);
46+
write(this.error);
47+
write(this.details);
48+
49+
super.serialize(context);
50+
}
51+
52+
deserialize(context) {
53+
const { read } = context;
54+
55+
this.name = read();
56+
this.module = read();
57+
this.error = read();
58+
this.details = read();
59+
60+
super.deserialize(context);
61+
}
3562
}
3663

64+
makeSerializable(ModuleError, "webpack/lib/ModuleError");
65+
3766
module.exports = ModuleError;

lib/ModuleParseError.js

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
"use strict";
77

88
const WebpackError = require("./WebpackError");
9+
const makeSerializable = require("./util/makeSerializable");
910

1011
/** @typedef {import("./Module")} Module */
1112

@@ -18,13 +19,16 @@ class ModuleParseError extends WebpackError {
1819
constructor(module, source, err) {
1920
let message = "Module parse failed: " + err.message;
2021
let loc = undefined;
22+
2123
message += "\nYou may need an appropriate loader to handle this file type.";
24+
2225
if (
2326
err.loc &&
2427
typeof err.loc === "object" &&
2528
typeof err.loc.line === "number"
2629
) {
2730
var lineNumber = err.loc.line;
31+
2832
if (/[\0\u0001\u0002\u0003\u0004\u0005\u0006\u0007]/.test(source)) {
2933
// binary file
3034
message += "\n(Source code omitted for this binary file)";
@@ -34,11 +38,13 @@ class ModuleParseError extends WebpackError {
3438
const linesBefore = sourceLines.slice(start, lineNumber - 1);
3539
const theLine = sourceLines[lineNumber - 1];
3640
const linesAfter = sourceLines.slice(lineNumber, lineNumber + 2);
41+
3742
message +=
3843
linesBefore.map(l => `\n| ${l}`).join("") +
3944
`\n> ${theLine}` +
4045
linesAfter.map(l => `\n| ${l}`).join("");
4146
}
47+
4248
loc = { start: err.loc };
4349
} else {
4450
message += "\n" + err.stack;
@@ -53,6 +59,30 @@ class ModuleParseError extends WebpackError {
5359

5460
Error.captureStackTrace(this, this.constructor);
5561
}
62+
63+
serialize(context) {
64+
const { write } = context;
65+
66+
write(this.name);
67+
write(this.module);
68+
write(this.loc);
69+
write(this.error);
70+
71+
super.serialize(context);
72+
}
73+
74+
deserialize(context) {
75+
const { read } = context;
76+
77+
this.name = read();
78+
this.module = read();
79+
this.loc = read();
80+
this.error = read();
81+
82+
super.deserialize(context);
83+
}
5684
}
5785

86+
makeSerializable(ModuleParseError, "webpack/lib/dependencies/ModuleParseError");
87+
5888
module.exports = ModuleParseError;

lib/ModuleWarning.js

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,21 +7,26 @@
77

88
const { cleanUp } = require("./ErrorHelpers");
99
const WebpackError = require("./WebpackError");
10+
const makeSerializable = require("./util/makeSerializable");
1011

1112
class ModuleWarning extends WebpackError {
1213
constructor(module, warning, { from = null } = {}) {
1314
let message = "Module Warning";
15+
1416
if (from) {
1517
message += ` (from ${from}):\n`;
1618
} else {
1719
message += ": ";
1820
}
21+
1922
if (warning && typeof warning === "object" && warning.message) {
2023
message += warning.message;
2124
} else if (warning) {
2225
message += warning;
2326
}
27+
2428
super(message);
29+
2530
this.name = "ModuleWarning";
2631
this.module = module;
2732
this.warning = warning;
@@ -32,6 +37,30 @@ class ModuleWarning extends WebpackError {
3237

3338
Error.captureStackTrace(this, this.constructor);
3439
}
40+
41+
serialize(context) {
42+
const { write } = context;
43+
44+
write(this.name);
45+
write(this.module);
46+
write(this.warning);
47+
write(this.details);
48+
49+
super.serialize(context);
50+
}
51+
52+
deserialize(context) {
53+
const { read } = context;
54+
55+
this.name = read();
56+
this.module = read();
57+
this.warning = read();
58+
this.details = read();
59+
60+
super.deserialize(context);
61+
}
3562
}
3663

64+
makeSerializable(ModuleWarning, "webpack/lib/ModuleWarning");
65+
3766
module.exports = ModuleWarning;

lib/UnsupportedFeatureWarning.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
"use strict";
77

88
const WebpackError = require("./WebpackError");
9+
const makeSerializable = require("./util/makeSerializable");
910

1011
/** @typedef {import("./Dependency").DependencyLocation} DependencyLocation */
1112
/** @typedef {import("./Module")} Module */
@@ -26,6 +27,33 @@ class UnsupportedFeatureWarning extends WebpackError {
2627

2728
Error.captureStackTrace(this, this.constructor);
2829
}
30+
31+
serialize(context) {
32+
const { write } = context;
33+
34+
write(this.name);
35+
write(this.module);
36+
write(this.loc);
37+
write(this.hideStack);
38+
39+
super.serialize(context);
40+
}
41+
42+
deserialize(context) {
43+
const { read } = context;
44+
45+
this.name = read();
46+
this.module = read();
47+
this.loc = read();
48+
this.hideStack = read();
49+
50+
super.deserialize(context);
51+
}
2952
}
3053

54+
makeSerializable(
55+
UnsupportedFeatureWarning,
56+
"webpack/lib/UnsupportedFeatureWarning"
57+
);
58+
3159
module.exports = UnsupportedFeatureWarning;

lib/WebpackError.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55

66
"use strict";
77

8+
const makeSerializable = require("./util/makeSerializable");
9+
810
/** @typedef {import("./Dependency").DependencyLocation} DependencyLocation */
911

1012
class WebpackError extends Error {
@@ -27,6 +29,30 @@ class WebpackError extends Error {
2729
inspect() {
2830
return this.stack + (this.details ? `\n${this.details}` : "");
2931
}
32+
33+
serialize(context) {
34+
const { write } = context;
35+
36+
write(this.details);
37+
write(this.missing);
38+
write(this.module);
39+
write(this.loc);
40+
41+
super.serialize(context);
42+
}
43+
44+
deserialize(context) {
45+
const { read } = context;
46+
47+
this.details = read();
48+
this.missing = read();
49+
this.module = read();
50+
this.loc = read();
51+
52+
super.deserialize(context);
53+
}
3054
}
3155

56+
makeSerializable(WebpackError, "webpack/lib/WebpackError");
57+
3258
module.exports = WebpackError;

0 commit comments

Comments
 (0)