b4ad84b158faa250f0f63caad3a881b48044bc4fdbd7c91d4591332b7006dd95d1d543494350371736875c6eb86f86ac00b0e0881ff6a93cda2edfdb37f089 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. 'use strict';
  2. /**
  3. * This will be removed in next versions as it is not handled in the babel-loader
  4. * See: https://github.com/geowarin/friendly-errors-webpack-plugin/issues/2
  5. */
  6. function cleanStackTrace(message) {
  7. return message
  8. .replace(/^\s*at\s.*:\d+:\d+[\s)]*\n/gm, ''); // at ... ...:x:y
  9. }
  10. function cleanMessage(message) {
  11. return message
  12. // match until the last semicolon followed by a space
  13. // this should match
  14. // linux => "(SyntaxError: )Unexpected token (5:11)"
  15. // windows => "(SyntaxError: C:/projects/index.js: )Unexpected token (5:11)"
  16. .replace(/^Module build failed.*:\s/, 'Syntax Error: ')
  17. // remove mini-css-extract-plugin loader tracing errors
  18. .replace(/^Syntax Error: ModuleBuildError:.*:\s/, '')
  19. // remove babel extra wording and path
  20. .replace(/^Syntax Error: SyntaxError: (([A-Z]:)?\/.*:\s)?/, 'Syntax Error: ');
  21. }
  22. function isBabelSyntaxError(e) {
  23. return e.name === 'ModuleBuildError' || e.name === 'ModuleBuildError' &&
  24. e.message.indexOf('SyntaxError') >= 0;
  25. }
  26. function transform(error) {
  27. if (isBabelSyntaxError(error)) {
  28. return Object.assign({}, error, {
  29. message: cleanStackTrace(cleanMessage(error.message) + '\n'),
  30. severity: 1000,
  31. name: 'Syntax Error',
  32. });
  33. }
  34. return error;
  35. }
  36. module.exports = transform;