cypress-terminal-report
Version:
Better terminal and file output for cypress test logs.
133 lines (132 loc) • 4.79 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const constants_1 = __importDefault(require("../constants"));
const utils_1 = __importDefault(require("../utils"));
const chalk_1 = __importDefault(require("chalk"));
const { LOG_TYPES, COLORS } = constants_1.default;
const KNOWN_LOG_TYPES = Object.values(LOG_TYPES);
const LOG_SYMBOLS = (() => process.platform !== 'win32' || process.env.CI || process.env.TERM === 'xterm-256color'
? constants_1.default.LOG_SYMBOLS
: constants_1.default.LOG_SYMBOLS_BASIC)();
const BOLD_COLORS = [COLORS.RED, COLORS.YELLOW];
const getTypeConfigMap = (options) => ({
[LOG_TYPES.PLUGIN_LOG_TYPE]: {
color: COLORS.WHITE,
icon: '-',
},
[LOG_TYPES.BROWSER_CONSOLE_WARN]: {
color: COLORS.YELLOW,
icon: LOG_SYMBOLS.WARNING,
},
[LOG_TYPES.BROWSER_CONSOLE_ERROR]: {
color: COLORS.RED,
icon: LOG_SYMBOLS.WARNING,
},
[LOG_TYPES.BROWSER_CONSOLE_DEBUG]: {
color: COLORS.BLUE,
icon: LOG_SYMBOLS.DEBUG,
},
[LOG_TYPES.BROWSER_CONSOLE_LOG]: {
color: COLORS.WHITE,
icon: LOG_SYMBOLS.INFO,
},
[LOG_TYPES.BROWSER_CONSOLE_INFO]: {
color: COLORS.WHITE,
icon: LOG_SYMBOLS.INFO,
},
[LOG_TYPES.CYPRESS_LOG]: {
color: COLORS.GREEN,
icon: LOG_SYMBOLS.INFO,
},
[LOG_TYPES.CYPRESS_XHR]: {
color: COLORS.GREEN,
icon: LOG_SYMBOLS.ROUTE,
trim: options.routeTrimLength,
},
[LOG_TYPES.CYPRESS_FETCH]: {
color: COLORS.GREEN,
icon: LOG_SYMBOLS.ROUTE,
trim: options.routeTrimLength,
},
[LOG_TYPES.CYPRESS_INTERCEPT]: {
color: COLORS.GREEN,
icon: LOG_SYMBOLS.ROUTE,
trim: options.routeTrimLength,
},
[LOG_TYPES.CYPRESS_REQUEST]: {
color: COLORS.GREEN,
icon: LOG_SYMBOLS.SUCCESS,
trim: options.routeTrimLength,
},
[LOG_TYPES.CYPRESS_COMMAND]: {
color: COLORS.GREEN,
icon: LOG_SYMBOLS.SUCCESS,
trim: options.routeTrimLength,
},
});
const TYPE_STRING_CACHE = {};
const padType = (type, padding) => ' '.repeat(Math.max(padding.length - type.length - 4, 0)) + type + ' ';
const getTypeString = (type, icon, color, padding) => {
const key = `${type}:${icon}:${color}:${padding}`;
if (TYPE_STRING_CACHE[key]) {
return TYPE_STRING_CACHE[key];
}
let typeString = padType(KNOWN_LOG_TYPES.includes(type) ? type : '[unknown]', padding);
typeString += icon + ' ';
typeString = chalk_1.default[color](typeString);
if (BOLD_COLORS.includes(color)) {
typeString = chalk_1.default.bold(typeString);
}
TYPE_STRING_CACHE[key] = typeString;
return typeString;
};
function consoleProcessor(messages, options, data) {
const tabLevel = data.level || 0;
const levelPadding = ' '.repeat(Math.max(0, tabLevel - 1));
const padding = constants_1.default.PADDING.LOG + levelPadding;
let output = '';
if (data.consoleTitle) {
output += ' '.repeat(4) + levelPadding + chalk_1.default.gray(data.consoleTitle) + '\n';
}
messages.forEach(({ type, message, severity, timeString }) => {
let processedMessage = message;
let { color, icon, trim = options.defaultTrimLength } = getTypeConfigMap(options)[type];
if (severity === constants_1.default.SEVERITY.ERROR) {
color = COLORS.RED;
icon = LOG_SYMBOLS.ERROR;
}
else if (severity === constants_1.default.SEVERITY.WARNING) {
color = COLORS.YELLOW;
icon = LOG_SYMBOLS.WARNING;
}
const maybeTrimLength = (msg) => trim && msg.length > trim ? msg.substring(0, trim) + ' ...' : msg;
if (type == 'cy:log') {
processedMessage = utils_1.default.applyMessageMarkdown(processedMessage, {
bold: chalk_1.default.bold,
italic: chalk_1.default.italic,
processContents: maybeTrimLength,
});
}
else {
processedMessage = maybeTrimLength(processedMessage);
}
if (timeString) {
output += chalk_1.default.gray(`${padding}Time: ${timeString}`) + '\n';
}
output +=
getTypeString(type, icon, color, padding) +
' ' +
processedMessage.replace(/\n/g, '\n' + padding) +
'\n';
});
if (messages.length !== 0 && !data.continuous) {
console.log(output + '\n');
}
else if (output !== '') {
console.log(output.substring(-1));
}
}
exports.default = consoleProcessor;