fireproof-storage / fireproof-storage/fireproof
[Architecture] Break circular references between core components
- Dominant language
- TypeScript
- Stars
- 973
- Forks
- 58
- PR merge metrics
- No merged PRs in 30d
Description
## Summary
Core components (Ledger, CRDT, Blockstore, Loader) have circular parent references that prevent garbage collection. This causes memory leaks when databases are opened and closed repeatedly.
## Problem
The current architecture has:
- `CRDT` holds reference to `Ledger`
- `Blockstore` holds reference to `CRDT`
- `Loader` holds references to multiple components
- These circular references prevent cleanup when `close()` is called
Repeatedly opening and closing databases causes unbounded memory growth.
## Proposed Solution
1. Define clean interfaces in `core/types/`:
- `ILedger`, `ICRDT`, `IBlockstore`, `ILoader`
2. Extract responsibilities from monolithic `Loader`:
- `BlockLoader` - block loading/caching
- `MetaLoader` - metadata management
- `CompactionManager` - compaction logic
3. Replace parent object references with IDs
4. Create `ComponentRegistry` for service lookup
5. Add event-based communication between components
## Expected Outcomes
- Closing database releases all associated resources
- No references remain to closed database objects
- Components testable in isolation
- Memory stabilizes after 1000 open/close cycles
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.