Files
duty-teller/webapp-next/src/lib/logger.ts
Nikolay Tatarinov 16bf1a1043 feat: migrate to Next.js for Mini App and enhance project structure
- Replaced the previous webapp with a new Mini App built using Next.js, improving performance and maintainability.
- Updated the `.gitignore` to exclude Next.js build artifacts and node modules.
- Revised documentation in `AGENTS.md`, `README.md`, and `architecture.md` to reflect the new Mini App structure and technology stack.
- Enhanced Dockerfile to support the new build process for the Next.js application.
- Updated CI workflow to build and test the Next.js application.
- Added new configuration options for the Mini App, including `MINI_APP_SHORT_NAME` for improved deep linking.
- Refactored frontend testing setup to accommodate the new structure and testing framework.
- Removed legacy webapp files and dependencies to streamline the project.
2026-03-03 16:04:08 +03:00

63 lines
1.7 KiB
TypeScript

/**
* Frontend logger with configurable level (window.__DT_LOG_LEVEL).
* Ported from webapp/js/logger.js.
*/
const LEVEL_ORDER: Record<string, number> = {
debug: 0,
info: 1,
warn: 2,
error: 3,
};
function getLogLevel(): string {
if (typeof window === "undefined") return "info";
const raw = (window as unknown as { __DT_LOG_LEVEL?: string }).__DT_LOG_LEVEL ?? "info";
const level = String(raw).toLowerCase();
return Object.hasOwn(LEVEL_ORDER, level) ? level : "info";
}
function shouldLog(messageLevel: string): boolean {
const configured = getLogLevel();
const configuredNum = LEVEL_ORDER[configured] ?? 1;
const messageNum = LEVEL_ORDER[messageLevel] ?? 1;
return messageNum >= configuredNum;
}
const PREFIX = "[DutyTeller]";
function logAt(level: string, args: unknown[]): void {
if (!shouldLog(level)) return;
const consoleMethod =
level === "debug"
? console.debug
: level === "info"
? console.info
: level === "warn"
? console.warn
: console.error;
const prefix = `${PREFIX}[${level}]`;
if (args.length === 0) {
(consoleMethod as (a: string) => void)(prefix);
} else if (args.length === 1) {
(consoleMethod as (a: string, b: unknown) => void)(prefix, args[0]);
} else {
(consoleMethod as (a: string, ...b: unknown[]) => void)(prefix, ...args);
}
}
export const logger = {
debug(msg: unknown, ...args: unknown[]): void {
logAt("debug", [msg, ...args]);
},
info(msg: unknown, ...args: unknown[]): void {
logAt("info", [msg, ...args]);
},
warn(msg: unknown, ...args: unknown[]): void {
logAt("warn", [msg, ...args]);
},
error(msg: unknown, ...args: unknown[]): void {
logAt("error", [msg, ...args]);
},
};