UNPKG

3.23 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3const tslib_1 = require("tslib");
4const chalk_1 = tslib_1.__importDefault(require("chalk"));
5const friendlySyntaxErrorLabel = 'Syntax error:';
6/**
7 * Formats webpack messages into a nicer looking, human friendly format.
8 * Heavily adopted from:
9 * https://github.com/facebook/create-react-app/blob/master/packages/react-dev-utils/formatWebpackMessages.js
10 * @param message
11 */
12function formatMessage(message) {
13 let lines = message.split('\n');
14 // Remove webpack errors/warnings
15 lines = lines.filter(line => !/Module [A-z ]+\(from/.test(line));
16 // remove extra file path if exists
17 // webpack somehow inserts a relative path into the messages, so we
18 // splice it off here.
19 if (lines.length > 2 && ~lines[0].indexOf(lines[1].slice(2))) {
20 lines.splice(1, 1);
21 }
22 // remove webpack @ stack
23 lines = lines.filter(line => line.indexOf(' @ ') !== 0);
24 // Transform 'Parsing error' to 'Syntax error'
25 lines = lines.map(line => {
26 const parseError = /Line (\d+):(?:(\d+):)?\s*Parsing error: (.+)$/.exec(line);
27 if (!parseError) {
28 return line;
29 }
30 const [, errorLine, errorColumn, errorMessage] = parseError;
31 return `${friendlySyntaxErrorLabel} ${errorMessage} (${errorLine}:${errorColumn})`;
32 });
33 // Strip leading newlines
34 if (lines.length > 2 && lines[1].trim() === '') {
35 lines.splice(1, 1);
36 }
37 // Cleans up verbose "module not found" messages for files and packages.
38 if (lines[1] && lines[1].indexOf('Module not found: ') === 0) {
39 lines = [
40 lines[0],
41 lines[1]
42 .replace('Error: ', '')
43 .replace('Module not found: Cannot find file:', 'Cannot find file:'),
44 ];
45 }
46 // Underline and bold file name
47 if (lines[0]) {
48 lines[0] = chalk_1.default.underline.bold(lines[0]);
49 }
50 message = lines.join('\n');
51 // Internal stacks are generally useless so we strip them... with the
52 // exception of stacks containing `webpack:` because they're normally
53 // from user code generated by Webpack. For more information see
54 // https://github.com/facebook/create-react-app/pull/1050
55 message = message.replace(/^\s*at\s((?!webpack:).)*:\d+:\d+[\s)]*(\n|$)/gm, ''); // at ... ...:x:y
56 message = message.replace(/^\s*at\s<anonymous>(\n|$)/gm, ''); // at <anonymous>
57 lines = message.split('\n');
58 // Remove duplicated newlines
59 lines = lines.filter((line, index, arr) => index === 0 || line.trim() !== '' || line.trim() !== arr[index - 1].trim());
60 // Reassemble the message
61 message = lines.join('\n');
62 return message.trim();
63}
64function formatWebpackMessages(json // Webpack's stat output is typed as any
65) {
66 const errors = json.errors
67 .map((message) => formatMessage(message))
68 .filter(message => message !== '');
69 const warnings = json.warnings
70 .map((message) => formatMessage(message))
71 .filter(message => message !== '');
72 return {
73 errors,
74 warnings,
75 };
76}
77exports.formatWebpackMessages = formatWebpackMessages;
78//# sourceMappingURL=formatWebpackMessages.js.map
\No newline at end of file