Skip to content

Commit d0a6e81

Browse files
committed
pass from(error's source) through constructors.
1 parent a324352 commit d0a6e81

4 files changed

Lines changed: 36 additions & 45 deletions

File tree

lib/ModuleBuildError.js

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,16 @@ const WebpackError = require("./WebpackError");
88
const cutOffLoaderExecution = require("./ErrorHelpers").cutOffLoaderExecution;
99

1010
class ModuleBuildError extends WebpackError {
11-
constructor(module, err) {
11+
constructor(module, err, from) {
1212
super();
1313

1414
this.name = "ModuleBuildError";
1515
this.message = "Module build failed";
16+
if(from) {
17+
this.message += ` (from ${from})`;
18+
}
19+
this.message += ": ";
1620
if(err !== null && typeof err === "object") {
17-
if(err.from) {
18-
this.message += ("(from " + err.from + ")");
19-
}
20-
this.message += ": ";
21-
2221
if(typeof err.stack === "string" && err.stack) {
2322
var stack = cutOffLoaderExecution(err.stack);
2423
if(!err.hideStack) {
@@ -36,8 +35,6 @@ class ModuleBuildError extends WebpackError {
3635
} else {
3736
this.message += err;
3837
}
39-
} else {
40-
this.message += ": ";
4138
}
4239
this.module = module;
4340
this.error = err;

lib/ModuleError.js

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,17 @@ const WebpackError = require("./WebpackError");
88
const cleanUp = require("./ErrorHelpers").cleanUp;
99

1010
class ModuleError extends WebpackError {
11-
constructor(module, err) {
11+
constructor(module, err, from) {
1212
super();
1313

1414
this.name = "ModuleError";
1515
this.module = module;
16-
this.message = err && typeof err === "object" && err.message ? err.message : err;
16+
this.message = "Module Error";
17+
if(from) {
18+
this.message += ` (from ${from})`;
19+
}
20+
this.message += ": ";
21+
this.message += err && typeof err === "object" && err.message ? err.message : err;
1722
this.error = err;
1823
this.details = err && typeof err === "object" && err.stack ? cleanUp(err.stack, this.message) : undefined;
1924

lib/ModuleWarning.js

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -8,28 +8,19 @@ const WebpackError = require("./WebpackError");
88
const cleanUp = require("./ErrorHelpers").cleanUp;
99

1010
class ModuleWarning extends WebpackError {
11-
constructor(module, warning) {
11+
constructor(module, warning, from) {
1212
super();
1313

1414
this.name = "ModuleWarning";
1515
this.module = module;
16-
this.message = "Module warning";
17-
if(warning !== null && typeof warning === "object") {
18-
if(warning.from) {
19-
this.message += ("(from " + warning.from + ")");
20-
}
21-
this.message += ": ";
22-
if(warning.message) {
23-
this.message += warning.message;
24-
}
25-
if(warning.stack) {
26-
this.details = cleanUp(warning.stack, this.message);
27-
}
28-
} else {
29-
this.message += ": ";
30-
this.message += warning;
16+
this.message = "Module Warning";
17+
if(from) {
18+
this.message += ` (from ${from})`;
3119
}
20+
this.message += ": ";
21+
this.message += warning && typeof warning === "object" && warning.message ? warning.message : warning;
3222
this.warning = warning;
23+
this.details = warning && typeof warning === "object" && warning.stack ? cleanUp(warning.stack, this.message) : undefined;
3324

3425
Error.captureStackTrace(this, this.constructor);
3526
}

lib/NormalModule.js

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ const WebpackError = require("./WebpackError");
1717
const Module = require("./Module");
1818
const ModuleParseError = require("./ModuleParseError");
1919
const ModuleBuildError = require("./ModuleBuildError");
20+
const ModuleError = require("./ModuleError");
2021
const ModuleWarning = require("./ModuleWarning");
2122

2223
const runLoaders = require("loader-runner").runLoaders;
@@ -135,32 +136,17 @@ class NormalModule extends Module {
135136
}
136137

137138
createLoaderContext(resolver, options, compilation, fs) {
138-
const addErrorFrom = (error) => {
139-
if(!error.from) {
140-
const currentLoaderObject = loaderContext.loaders && loaderContext.loaders.length ?
141-
loaderContext.loaders[loaderContext.loaderIndex] :
142-
null;
143-
if(currentLoaderObject) {
144-
const loaderName = currentLoaderObject.origin || currentLoaderObject.path;
145-
error.from = /\//.test(loaderName) ?
146-
path.relative(loaderContext.rootContext, loaderName) :
147-
loaderName;
148-
}
149-
}
150-
};
151139
const loaderContext = {
152140
version: 2,
153141
emitWarning: (warning) => {
154142
if(!(warning instanceof Error))
155143
warning = new NonErrorEmittedError(warning);
156-
addErrorFrom(warning);
157-
this.warnings.push(new ModuleWarning(this, warning));
144+
this.warnings.push(new ModuleWarning(this, warning, this.getCurrentLoaderName(loaderContext)));
158145
},
159146
emitError: (error) => {
160147
if(!(error instanceof Error))
161148
error = new NonErrorEmittedError(error);
162-
addErrorFrom(error);
163-
this.errors.push(new ModuleBuildError(this, error));
149+
this.errors.push(new ModuleError(this, error, this.getCurrentLoaderName(loaderContext)));
164150
},
165151
exec: (code, filename) => {
166152
const module = new NativeModule(filename, this);
@@ -192,6 +178,19 @@ class NormalModule extends Module {
192178
return loaderContext;
193179
}
194180

181+
getCurrentLoaderName(loaderContext) {
182+
const currentLoaderObject = this.loaders && this.loaders.length ?
183+
this.loaders[loaderContext.loaderIndex] :
184+
null;
185+
if(currentLoaderObject) {
186+
const loaderName = currentLoaderObject.origin || currentLoaderObject.path;
187+
return /\/|\\/.test(loaderName) ?
188+
path.relative(loaderContext.rootContext, loaderName) :
189+
loaderName;
190+
}
191+
return null;
192+
}
193+
195194
createSource(source, resourceBuffer, sourceMap) {
196195
// if there is no identifier return raw source
197196
if(!this.identifier) {
@@ -219,7 +218,6 @@ class NormalModule extends Module {
219218

220219
doBuild(options, compilation, resolver, fs, callback) {
221220
const loaderContext = this.createLoaderContext(resolver, options, compilation, fs);
222-
223221
runLoaders({
224222
resource: this.resource,
225223
loaders: this.loaders,
@@ -233,7 +231,7 @@ class NormalModule extends Module {
233231
}
234232

235233
if(err) {
236-
const error = new ModuleBuildError(this, err);
234+
const error = new ModuleBuildError(this, err, this.getCurrentLoaderName(loaderContext));
237235
return callback(error);
238236
}
239237

0 commit comments

Comments
 (0)