formatUtil.js 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. 'use strict';
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.stripLoaderFromPath = exports.formatErrorMessage = undefined;
  6. var _flow2 = require('lodash/flow');
  7. var _flow3 = _interopRequireDefault(_flow2);
  8. var _os = require('os');
  9. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  10. var syntaxErrorLabel = 'Syntax error:';
  11. // we replace all EOL combinations with \n and replace to work in a consistent way
  12. var replaceEol = function replaceEol(message) {
  13. return message.replace(/\r?\n/g, '\n');
  14. };
  15. // undo eol replacements
  16. var useValidEol = function useValidEol(message) {
  17. return message.replace('\n', _os.EOL);
  18. };
  19. // strip stacks for module builds as they are useless and just show what happened inside the loader
  20. // strip at ... ...:x:y
  21. var stripStackTrace = function stripStackTrace(message) {
  22. return message.replace(/^\s*at\s.*\(.+\)\n?/gm, '');
  23. };
  24. var cleanUpModuleNotFoundMessage = function cleanUpModuleNotFoundMessage(message) {
  25. if (message.indexOf('Module not found:') === 0) {
  26. return message.replace('Cannot resolve \'file\' or \'directory\' ', '').replace('Cannot resolve module ', '').replace('Error: Can\'t resolve ', '').replace('Error: ', '');
  27. }
  28. return message;
  29. };
  30. var cleanUpBuildError = function cleanUpBuildError(message) {
  31. if (message.indexOf('Module build failed:') === 0) {
  32. // check if first line of message just contains 'Module build failed: '
  33. if (/Module build failed:\s*$/.test(message.split('\n')[0])) {
  34. var lines = message.split('\n');
  35. var replacement = lines[0];
  36. // try to detect real type of build error
  37. if (/File to import not found or unreadable/.test(message)) {
  38. // sass-loader file not found -> module not found
  39. replacement = 'Module not found:';
  40. } else if (/Invalid CSS/.test(message)) {
  41. // sass-loader css error -> syntax error
  42. replacement = syntaxErrorLabel;
  43. }
  44. lines[0] = replacement;
  45. message = lines.join('\n'); // eslint-disable-line no-param-reassign
  46. }
  47. return message.replace('Module build failed: SyntaxError:', syntaxErrorLabel) // babel-loader error
  48. .replace('Module build failed:', ''); // otherwise remove it as it's already clear that this is an module error
  49. }
  50. return message;
  51. };
  52. // removes new line characters at the end of message
  53. var cleanUpUnwantedEol = function cleanUpUnwantedEol(message) {
  54. return message.replace(/\s*\n\s*$/, '');
  55. };
  56. // indent all lines by 2 spaces
  57. var indent = function indent(message) {
  58. return message.split('\n').map(function (l) {
  59. return ' ' + l;
  60. }).join('\n');
  61. };
  62. // gets executed from top to bottom
  63. var formatErrorMessage = exports.formatErrorMessage = (0, _flow3.default)([replaceEol, stripStackTrace, cleanUpModuleNotFoundMessage, cleanUpBuildError, cleanUpUnwantedEol, indent, useValidEol]);
  64. var stripLoaderFromPath = exports.stripLoaderFromPath = function stripLoaderFromPath(file) {
  65. // Remove webpack-specific loader notation from filename.
  66. // Before:
  67. // ../mocha-webpack/lib/webpack/loader/entryLoader.js!../mocha-webpack/lib/entry.js
  68. // After:
  69. // ../mocha-webpack/lib/entry.js
  70. if (file.lastIndexOf('!') !== -1) {
  71. return file.substr(file.lastIndexOf('!') + 1);
  72. }
  73. return file;
  74. };