You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
1.6 KiB
59 lines
1.6 KiB
2 years ago
|
const ansiHTML = require('ansi-html-community');
|
||
|
const entities = require('html-entities');
|
||
|
const theme = require('../theme.js');
|
||
|
const utils = require('../utils.js');
|
||
|
|
||
|
ansiHTML.setColors(theme);
|
||
|
|
||
|
/**
|
||
|
* @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');
|
||
|
if (errorParts.length) {
|
||
|
if (errorParts[0]) {
|
||
|
errorParts[0] = utils.formatFilename(errorParts[0]);
|
||
|
}
|
||
|
|
||
|
const errorMessage = errorParts.splice(1, 1)[0];
|
||
|
if (errorMessage) {
|
||
|
// Strip filename from the error message
|
||
|
errorParts.unshift(errorMessage.replace(/^(.*:)\s.*:(\s.*)$/, '$1$2'));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
const stackContainer = document.createElement('pre');
|
||
|
stackContainer.innerHTML = entities.decode(
|
||
|
ansiHTML(entities.encode(errorParts.join('\n'), { level: 'html5', mode: 'nonAscii' })),
|
||
|
{ level: 'html5' }
|
||
|
);
|
||
|
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;
|