takt/src/shared/context.ts
2026-02-04 04:04:56 +09:00

48 lines
1.2 KiB
TypeScript

/**
* Runtime context shared across modules.
*
* Holds process-wide state (quiet mode, etc.) that would otherwise
* create circular dependencies if exported from cli.ts.
*
* AppContext is a singleton — use AppContext.getInstance() or
* the module-level convenience functions isQuietMode / setQuietMode.
*/
export class AppContext {
private static instance: AppContext | null = null;
private quietMode = false;
private constructor() {}
static getInstance(): AppContext {
if (!AppContext.instance) {
AppContext.instance = new AppContext();
}
return AppContext.instance;
}
/** Reset singleton for testing */
static resetInstance(): void {
AppContext.instance = null;
}
getQuietMode(): boolean {
return this.quietMode;
}
setQuietMode(value: boolean): void {
this.quietMode = value;
}
}
/** Get whether quiet mode is active (CLI flag or config, resolved in preAction) */
export function isQuietMode(): boolean {
return AppContext.getInstance().getQuietMode();
}
/** Set quiet mode state. Called from CLI preAction hook. */
export function setQuietMode(value: boolean): void {
AppContext.getInstance().setQuietMode(value);
}