diff --git a/halogen-engine/src/wasmJsMain/kotlin/halogen/engine/LocalStorageThemeCache.kt b/halogen-engine/src/wasmJsMain/kotlin/halogen/engine/LocalStorageThemeCache.kt index aba1f32..b34898f 100644 --- a/halogen-engine/src/wasmJsMain/kotlin/halogen/engine/LocalStorageThemeCache.kt +++ b/halogen-engine/src/wasmJsMain/kotlin/halogen/engine/LocalStorageThemeCache.kt @@ -48,19 +48,28 @@ public class LocalStorageThemeCache( private val _changes = MutableSharedFlow(extraBufferCapacity = 64) private val json = Json { ignoreUnknownKeys = true } private val manifestKey = "${prefix}__keys__" + private var manifestCache: MutableSet? = null // ── Manifest helpers ──────────────────────────────────────────────── private fun readManifest(): MutableSet { - val raw = jsGetItem(manifestKey.toJsString())?.toString() ?: return mutableSetOf() - return try { - json.decodeFromString>(raw).toMutableSet() - } catch (_: Exception) { + manifestCache?.let { return it } + val raw = jsGetItem(manifestKey.toJsString())?.toString() + val parsed = if (raw == null) { mutableSetOf() + } else { + try { + json.decodeFromString>(raw).toMutableSet() + } catch (_: Exception) { + mutableSetOf() + } } + manifestCache = parsed + return parsed } private fun writeManifest(keys: Set) { + manifestCache = keys.toMutableSet() val encoded = json.encodeToString(keys) jsSetItem(manifestKey.toJsString(), encoded.toJsString()) } @@ -154,6 +163,7 @@ public class LocalStorageThemeCache( for (key in manifest) { removeEntry("$prefix$key") } + manifestCache = mutableSetOf() jsRemoveItem(manifestKey.toJsString()) _changes.tryEmit(CacheEvent.Cleared) }