Skip to content

Commit 5a003e0

Browse files
committed
Consistent format for syntax errors.
1 parent 9d2941b commit 5a003e0

File tree

2 files changed

+41
-2
lines changed

2 files changed

+41
-2
lines changed

lib/processCss.js

+39-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
MIT License http://www.opensource.org/licenses/mit-license.php
33
Author Tobias Koppers @sokra
44
*/
5+
var formatCodeFrame = require("babel-code-frame");
56
var Tokenizer = require("css-selector-tokenizer");
67
var postcss = require("postcss");
78
var loaderUtils = require("loader-utils");
@@ -208,6 +209,43 @@ module.exports = function processCss(inputSource, inputMap, options, callback) {
208209
urlItemRegExp: /___CSS_LOADER_URL___([0-9]+)___/
209210
});
210211
}).catch(function(err) {
211-
callback(err);
212+
if (err.name === 'CssSyntaxError') {
213+
var wrappedError = new CSSLoaderError(
214+
'Syntax Error',
215+
err.reason,
216+
err.line != null && err.column != null
217+
? {line: err.line, column: err.column}
218+
: null,
219+
err.input.source
220+
);
221+
callback(wrappedError);
222+
} else {
223+
callback(err);
224+
}
212225
});
213226
};
227+
228+
function formatMessage(message, loc, source) {
229+
var formatted = message;
230+
if (loc) {
231+
formatted = formatted
232+
+ ' (' + loc.line + ':' + loc.column + ')';
233+
}
234+
if (loc && source) {
235+
formatted = formatted
236+
+ '\n\n' + formatCodeFrame(source, loc.line, loc.column) + '\n';
237+
}
238+
return formatted;
239+
}
240+
241+
function CSSLoaderError(name, message, loc, source, error) {
242+
Error.call(this);
243+
Error.captureStackTrace(this, CSSLoaderError);
244+
this.name = name;
245+
this.error = error;
246+
this.message = formatMessage(message, loc, source);
247+
this.hideStack = true;
248+
}
249+
250+
CSSLoaderError.prototype = Object.create(Error.prototype);
251+
CSSLoaderError.prototype.constructor = CSSLoaderError;

package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,12 @@
77
"node": ">=0.12.0"
88
},
99
"dependencies": {
10+
"babel-code-frame": "^6.11.0",
1011
"css-selector-tokenizer": "^0.6.0",
1112
"cssnano": ">=2.6.1 <4",
1213
"loader-utils": "~0.2.2",
13-
"object-assign": "^4.0.1",
1414
"lodash.camelcase": "^3.0.1",
15+
"object-assign": "^4.0.1",
1516
"postcss": "^5.0.6",
1617
"postcss-modules-extract-imports": "^1.0.0",
1718
"postcss-modules-local-by-default": "^1.0.1",

0 commit comments

Comments
 (0)