π File detail
utils/settings/settingsCache.ts
π― Use case
This file lives under βutils/β, which covers cross-cutting helpers (shell, tempfiles, settings, messages, process input, β¦). On the API surface it exposes getSessionSettingsCache, setSessionSettingsCache, getCachedSettingsForSource, setCachedSettingsForSource, and getCachedParsedFile (and more) β mainly functions, hooks, or classes. It composes internal code from constants, types, and validation (relative imports).
Generated from folder role, exports, dependency roots, and inline comments β not hand-reviewed for every path.
π§ Inline summary
import type { SettingSource } from './constants.js' import type { SettingsJson } from './types.js' import type { SettingsWithErrors, ValidationError } from './validation.js' let sessionSettingsCache: SettingsWithErrors | null = null
π€ Exports (heuristic)
getSessionSettingsCachesetSessionSettingsCachegetCachedSettingsForSourcesetCachedSettingsForSourcegetCachedParsedFilesetCachedParsedFileresetSettingsCachegetPluginSettingsBasesetPluginSettingsBaseclearPluginSettingsBase
π₯οΈ Source preview
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<SettingSource, SettingsJson | null>()
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<string, ParsedSettings>()
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<string, unknown> | undefined
export function getPluginSettingsBase(): Record<string, unknown> | undefined {
return pluginSettingsBase
}
export function setPluginSettingsBase(
settings: Record<string, unknown> | undefined,
): void {
pluginSettingsBase = settings
}
export function clearPluginSettingsBase(): void {
pluginSettingsBase = undefined
}