import type { SettingSource } from './constants.js' import type { SettingsJson } from './types.js' import type { SettingsWithErrors, ValidationError } from './validation.js' let sessionSettingsCache: SettingsWithErrors | null = null export function getSessionSettingsCache(): SettingsWithErrors | null { return sessionSettingsCache } export function setSessionSettingsCache(value: SettingsWithErrors): void { sessionSettingsCache = value } /** * Per-source cache for getSettingsForSource. Invalidated alongside the * merged sessionSettingsCache — same resetSettingsCache() triggers * (settings write, --add-dir, plugin init, hooks refresh). */ const perSourceCache = new Map() export function getCachedSettingsForSource( source: SettingSource, ): SettingsJson | null | undefined { // undefined = cache miss; null = cached "no settings for this source" return perSourceCache.has(source) ? perSourceCache.get(source) : undefined } export function setCachedSettingsForSource( source: SettingSource, value: SettingsJson | null, ): void { perSourceCache.set(source, value) } /** * Path-keyed cache for parseSettingsFile. Both getSettingsForSource and * loadSettingsFromDisk call parseSettingsFile on the same paths during * startup — this dedupes the disk read + zod parse. */ type ParsedSettings = { settings: SettingsJson | null errors: ValidationError[] } const parseFileCache = new Map() export function getCachedParsedFile(path: string): ParsedSettings | undefined { return parseFileCache.get(path) } export function setCachedParsedFile(path: string, value: ParsedSettings): void { parseFileCache.set(path, value) } export function resetSettingsCache(): void { sessionSettingsCache = null perSourceCache.clear() parseFileCache.clear() } /** * Plugin settings base layer for the settings cascade. * pluginLoader writes here after loading plugins; * loadSettingsFromDisk reads it as the lowest-priority base. */ let pluginSettingsBase: Record | undefined export function getPluginSettingsBase(): Record | undefined { return pluginSettingsBase } export function setPluginSettingsBase( settings: Record | undefined, ): void { pluginSettingsBase = settings } export function clearPluginSettingsBase(): void { pluginSettingsBase = undefined }