testgenius-ai
Version:
🚀 TestGenius AI - The Ultimate E2E Testing Framework for Everyone | No Coding Required • AI-Powered Automation • Beautiful Reports • Zero Complexity
192 lines • 6.79 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Logger = exports.LogLevel = void 0;
const chalk_1 = __importDefault(require("chalk"));
const fs_extra_1 = __importDefault(require("fs-extra"));
const path_1 = __importDefault(require("path"));
var LogLevel;
(function (LogLevel) {
LogLevel[LogLevel["DEBUG"] = 0] = "DEBUG";
LogLevel[LogLevel["INFO"] = 1] = "INFO";
LogLevel[LogLevel["WARN"] = 2] = "WARN";
LogLevel[LogLevel["ERROR"] = 3] = "ERROR";
LogLevel[LogLevel["SILENT"] = 4] = "SILENT";
})(LogLevel || (exports.LogLevel = LogLevel = {}));
class Logger {
constructor(config = {}) {
this.currentTestId = '';
this.logFile = '';
this.config = {
level: LogLevel.INFO,
enableConsole: true,
enableFile: false, // Disabled by default for simplicity
logDir: 'logs',
includeTimestamp: true,
includeTestId: true,
maxFileSize: 10, // 10MB
maxFiles: 5,
...config
};
this.initializeLogFile();
}
initializeLogFile() {
if (this.config.enableFile) {
try {
fs_extra_1.default.ensureDirSync(this.config.logDir);
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
this.logFile = path_1.default.join(this.config.logDir, `testgenius-${timestamp}.log`);
}
catch (error) {
console.warn('Could not initialize log file:', error);
this.config.enableFile = false;
}
}
}
setTestId(testId) {
this.currentTestId = testId;
}
formatMessage(level, message) {
let formatted = '';
if (this.config.includeTimestamp) {
formatted += `[${new Date().toLocaleString()}] `;
}
formatted += `[${level}] `;
if (this.config.includeTestId && this.currentTestId) {
formatted += `[${this.currentTestId}] `;
}
formatted += message;
return formatted;
}
async writeToFile(message) {
if (!this.config.enableFile || !this.logFile)
return;
try {
await fs_extra_1.default.appendFile(this.logFile, message + '\n');
}
catch (error) {
console.warn('Could not write to log file:', error);
}
}
debug(message, ...args) {
if (this.config.level <= LogLevel.DEBUG) {
const formattedMessage = this.formatMessage('DEBUG', message);
if (this.config.enableConsole) {
console.log(chalk_1.default.gray(formattedMessage), ...args);
}
this.writeToFile(formattedMessage);
}
}
info(message, ...args) {
if (this.config.level <= LogLevel.INFO) {
const formattedMessage = this.formatMessage('INFO', message);
if (this.config.enableConsole) {
console.log(chalk_1.default.blue(formattedMessage), ...args);
}
this.writeToFile(formattedMessage);
}
}
warn(message, ...args) {
if (this.config.level <= LogLevel.WARN) {
const formattedMessage = this.formatMessage('WARN', message);
if (this.config.enableConsole) {
console.log(chalk_1.default.yellow(formattedMessage), ...args);
}
this.writeToFile(formattedMessage);
}
}
error(message, ...args) {
if (this.config.level <= LogLevel.ERROR) {
const formattedMessage = this.formatMessage('ERROR', message);
if (this.config.enableConsole) {
console.log(chalk_1.default.red(formattedMessage), ...args);
}
this.writeToFile(formattedMessage);
}
}
success(message, ...args) {
if (this.config.level <= LogLevel.INFO) {
const formattedMessage = this.formatMessage('SUCCESS', message);
if (this.config.enableConsole) {
console.log(chalk_1.default.green(formattedMessage), ...args);
}
this.writeToFile(formattedMessage);
}
}
// Test-specific logging methods
testStart(testId, testName) {
this.setTestId(testId);
this.info(`Starting test: ${testName} (${testId})`);
}
testStep(stepNumber, description) {
this.info(`Step ${stepNumber}: ${description}`);
}
testSuccess(testId, duration) {
this.success(`Test ${testId} completed successfully in ${duration}ms`);
}
testFailure(testId, error, duration) {
this.error(`Test ${testId} failed after ${duration}ms: ${error}`);
}
// Browser-specific logging methods
browserNavigation(url) {
this.info(`🌐 Navigating to: ${url}`);
}
browserScreenshot(path) {
this.info(`📸 Screenshot saved: ${path}`);
}
// AI-specific logging methods
aiRequest(prompt) {
this.debug(`🤖 AI Request: ${prompt.substring(0, 100)}...`);
}
aiResponse(response) {
this.debug(`🤖 AI Response: ${response.substring(0, 100)}...`);
}
aiError(error) {
this.error(`🤖 AI Error: ${error}`);
}
// Configuration methods
updateConfig(newConfig) {
this.config = { ...this.config, ...newConfig };
if (newConfig.enableFile && !this.config.enableFile) {
this.initializeLogFile();
}
}
getConfig() {
return { ...this.config };
}
// Simple file management methods
async getLogFiles() {
if (!this.config.enableFile || !this.config.logDir) {
return [];
}
try {
const files = await fs_extra_1.default.readdir(this.config.logDir);
return files
.filter(file => file.startsWith('testgenius-') && file.endsWith('.log'))
.map(file => path_1.default.join(this.config.logDir, file));
}
catch (error) {
console.warn('Could not read log directory:', error);
return [];
}
}
async clearLogs() {
if (!this.config.enableFile || !this.config.logDir) {
return;
}
try {
const files = await this.getLogFiles();
for (const file of files) {
await fs_extra_1.default.remove(file);
}
console.log(`🗑️ Cleared ${files.length} log files`);
}
catch (error) {
console.warn('Could not clear log files:', error);
}
}
}
exports.Logger = Logger;
//# sourceMappingURL=Logger.js.map