UNPKG

cypress-terminal-report

Version:

Better terminal and file output for cypress test logs.

133 lines (132 loc) 4.79 kB
"use strict"; 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;