task(A0): logger and test helpers

This commit is contained in:
Agent Zero
2026-08-26 21:04:17 +02:00
parent 725879562e
commit cba9358235
4 changed files with 264 additions and 0 deletions
+69
View File
@@ -0,0 +1,69 @@
/**
* Minimaler Level-basierter Logger.
* Ziel: direktes `console.log` im Produktivcode ersetzen (ROADMAP Teil-4-Regel),
* damit sich Logs zentral filtern/abschalten lassen.
*
* Nutzung:
* import { logger } from '../utils/logger';
* logger.info('Element erstellt', el.id);
*
* Level über localStorage['webcad.logLevel'] ('silent'|'error'|'warn'|'info'|'debug',
* Default: 'info'). `logger.debug` bleibt auf Default still.
*/
export type LogLevel = 'silent' | 'error' | 'warn' | 'info' | 'debug';
const LEVEL_ORDER: Record<LogLevel, number> = {
silent: 100,
error: 40,
warn: 30,
info: 20,
debug: 10,
};
function readConfiguredLevel(): LogLevel {
try {
// Browser und jsdom haben localStorage; in reinen Node-Tests schlägt der Zugriff fehl
const raw = globalThis.localStorage?.getItem('webcad.logLevel');
if (raw && raw in LEVEL_ORDER) return raw as LogLevel;
} catch {
/* Umgebung ohne localStorage → Default */
}
return 'info';
}
let currentLevel: LogLevel = readConfiguredLevel();
/** Setzt das Level programmatisch (überschreibt localStorage bis zum Reload). */
export function setLogLevel(level: LogLevel): void {
currentLevel = level;
}
/** Aktuell aktives Log-Level. */
export function getLogLevel(): LogLevel {
return currentLevel;
}
class Logger {
/** Fehlerhafte Zustände — melden außer bei silent. */
error(...args: unknown[]): void {
if (LEVEL_ORDER[currentLevel] <= LEVEL_ORDER.error) console.error('[web-cad]', ...args);
}
/** Warnungen. */
warn(...args: unknown[]): void {
if (LEVEL_ORDER[currentLevel] <= LEVEL_ORDER.warn) console.warn('[web-cad]', ...args);
}
/** Normale Informationsmeldungen (Default-Level aktiv). */
info(...args: unknown[]): void {
if (LEVEL_ORDER[currentLevel] <= LEVEL_ORDER.info) console.log('[web-cad]', ...args);
}
/** Debug-Ausgaben — nur wenn Level debug konfiguriert ist. */
debug(...args: unknown[]): void {
if (LEVEL_ORDER[currentLevel] <= LEVEL_ORDER.debug) console.log('[web-cad][debug]', ...args);
}
}
export const logger = new Logger();