co-mono/packages/web-ui/src/storage/store.ts
Mario Zechner 0de89a750e Refactor to Store-based architecture
- Create base Store class with private backend and protected getBackend()
- Add SettingsStore, ProviderKeysStore, SessionsStore
- Each store defines its own schema via getConfig()
- AppStorage now takes stores + backend in constructor
- Remove SessionsRepository (logic moved to SessionsStore)
- Update all consumers to use store API (storage.settings.get/set, storage.providerKeys.get/set)
- Update example app to follow new pattern: create stores, gather configs, create backend, wire
- Benefits: stores own their schema, no circular deps, cleaner separation
2025-10-08 16:41:02 +02:00

33 lines
868 B
TypeScript

import type { StorageBackend, StoreConfig } from "./types.js";
/**
* Base class for all storage stores.
* Each store defines its IndexedDB schema and provides domain-specific methods.
*/
export abstract class Store {
private backend: StorageBackend | null = null;
/**
* Returns the IndexedDB configuration for this store.
* Defines store name, key path, and indices.
*/
abstract getConfig(): StoreConfig;
/**
* Sets the storage backend. Called by AppStorage after backend creation.
*/
setBackend(backend: StorageBackend): void {
this.backend = backend;
}
/**
* Gets the storage backend. Throws if backend not set.
* Concrete stores must use this to access the backend.
*/
protected getBackend(): StorageBackend {
if (!this.backend) {
throw new Error(`Backend not set on ${this.constructor.name}`);
}
return this.backend;
}
}