fix: dispose persistent-store effects; close comparisonStore effect leak

Thread the new createPersistentStore.destroy() through its owners so the
save effect.root is actually torn down: LayoutManager gains destroy();
ThemeManager and typographySettings dispose their #store in their existing
destroy().

comparisonStore had its own leak — a constructor $effect.root whose disposer
was discarded, and a module-level persistent storage created at import. Move
storage into the instance (#storage, created lazily per instance), capture
the effect.root disposer, add destroy(), and adopt createSingleton so reset
runs resetAll() + destroy(). Re-export createSingleton from the $shared/lib
barrel; give the test storage mock a destroy().
This commit is contained in:
Ilia Mashkov
2026-06-03 10:16:47 +03:00
parent ded9606c30
commit 0aae710e35
6 changed files with 53 additions and 23 deletions
@@ -46,6 +46,8 @@ const mockStorage = vi.hoisted(() => {
configurable: true,
});
storage.destroy = vi.fn();
return storage;
});