12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- const ansiHTML = require('ansi-html');
- const HtmlEntities = require('html-entities');
- const theme = require('../theme');
- const formatFilename = require('../utils/formatFilename');
- ansiHTML.setColors(theme);
- const entities = new HtmlEntities.Html5Entities();
- /**
- * @typedef {Object} CompileErrorTraceProps
- * @property {string} errorMessage
- */
- /**
- * A formatter that turns Webpack compile error messages into highlighted HTML source traces.
- * @param {Document} document
- * @param {HTMLElement} root
- * @param {CompileErrorTraceProps} props
- * @returns {void}
- */
- function CompileErrorTrace(document, root, props) {
- const errorParts = props.errorMessage.split('\n');
- const errorMessage = errorParts
- .splice(1, 1)[0]
- // Strip filename from the error message
- .replace(/^(.*:)\s.*:(\s.*)$/, '$1$2');
- errorParts[0] = formatFilename(errorParts[0]);
- errorParts.unshift(errorMessage);
- const stackContainer = document.createElement('pre');
- stackContainer.innerHTML = entities.decode(ansiHTML(entities.encode(errorParts.join('\n'))));
- stackContainer.style.fontFamily = [
- '"Operator Mono SSm"',
- '"Operator Mono"',
- '"Fira Code Retina"',
- '"Fira Code"',
- '"FiraCode-Retina"',
- '"Andale Mono"',
- '"Lucida Console"',
- 'Menlo',
- 'Consolas',
- 'Monaco',
- 'monospace',
- ].join(', ');
- stackContainer.style.margin = '0';
- stackContainer.style.whiteSpace = 'pre-wrap';
- root.appendChild(stackContainer);
- }
- module.exports = CompileErrorTrace;
|