UNPKG

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