import { TsTest } from './tstest.classes.tstest.js'; import type { LogOptions } from './tstest.logging.js'; export enum TestExecutionMode { DIRECTORY = 'directory', FILE = 'file', GLOB = 'glob' } export const runCli = async () => { // Parse command line arguments const args = process.argv.slice(2); const logOptions: LogOptions = {}; let testPath: string | null = null; // Parse options for (let i = 0; i < args.length; i++) { const arg = args[i]; switch (arg) { case '--quiet': case '-q': logOptions.quiet = true; break; case '--verbose': case '-v': logOptions.verbose = true; break; case '--no-color': logOptions.noColor = true; break; case '--json': logOptions.json = true; break; case '--log-file': if (i + 1 < args.length) { logOptions.logFile = args[++i]; } break; default: if (!arg.startsWith('-')) { testPath = arg; } } } if (!testPath) { console.error('You must specify a test directory/file/pattern as argument. Please try again.'); console.error('\nUsage: tstest [options]'); console.error('\nOptions:'); console.error(' --quiet, -q Minimal output'); console.error(' --verbose, -v Verbose output'); console.error(' --no-color Disable colored output'); console.error(' --json Output results as JSON'); console.error(' --log-file Write logs to file'); process.exit(1); } let executionMode: TestExecutionMode; // Detect execution mode based on the argument if (testPath.includes('*') || testPath.includes('?') || testPath.includes('[') || testPath.includes('{')) { executionMode = TestExecutionMode.GLOB; } else if (testPath.endsWith('.ts')) { executionMode = TestExecutionMode.FILE; } else { executionMode = TestExecutionMode.DIRECTORY; } const tsTestInstance = new TsTest(process.cwd(), testPath, executionMode, logOptions); await tsTestInstance.run(); };