|
2 | 2 | MIT License http://www.opensource.org/licenses/mit-license.php
|
3 | 3 | Author Tobias Koppers @sokra
|
4 | 4 | */
|
| 5 | +var formatCodeFrame = require("babel-code-frame"); |
5 | 6 | var Tokenizer = require("css-selector-tokenizer");
|
6 | 7 | var postcss = require("postcss");
|
7 | 8 | var loaderUtils = require("loader-utils");
|
@@ -208,6 +209,43 @@ module.exports = function processCss(inputSource, inputMap, options, callback) {
|
208 | 209 | urlItemRegExp: /___CSS_LOADER_URL___([0-9]+)___/
|
209 | 210 | });
|
210 | 211 | }).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 | + } |
212 | 225 | });
|
213 | 226 | };
|
| 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; |
0 commit comments