Lightweight RxJS-based state utilities for TypeScript:
SimpleStore<T extends Record<string, unknown>>: Keyed selection and immutable partial updates.QueryResultStore<Q,R,T>: Managequery,result, andtransientwith cache by query.
rxjses-toolkitqsserialize-javascriptrxjs-state-subject
Keyed selection and immutable partial updates.
import { SimpleStore } from 'simple-store'
type AppState = { user: { name: string }, theme: 'light' | 'dark' }
const store = new SimpleStore<AppState>({ user: { name: 'Ada' }, theme: 'light' })
store.select('user').subscribe((u) => console.log(u.name))
store.setState({ theme: 'dark' })
store.destroy() // complete subscriptions bound with takeUntilManage query, result, and transient with cache by query.
import { QueryResultStore } from 'simple-store'
type Query = { q?: string; page?: number }
type Result = { items: string[] }
type Transient = { loading: boolean }
const qrs = new QueryResultStore<Query, Result, Transient>({
query: { q: '', page: 1 },
result: { items: [] },
transient: { loading: false },
})
qrs.query$.subscribe(console.log)
qrs.setQuery({ q: 'books' })
// use cache key derived from query (stable, sorted, no undefineds)
const key = qrs.getCacheKey()
qrs.setResult({ items: ['A', 'B'] }) // also caches by key
const cached = qrs.getCachedResult() // -> { items: ['A','B'] }-
SimpleStore<T extends Record<string, unknown>>:constructor(initial, unsubscriber?): OptionalSubject<void>for teardown.setState(partial, sideEffectFn?): Shallow-merge into current state.getState(): Current state.select(key, filterFn?): Observable ofstate[key], with deep equality and optional filter.selectAll(): Observable of the whole state.reset(sideEffectFn?): Reset via underlyingStateSubject.destroy(): Trigger unsubscribe viatakeUntil.
-
QueryResultStore<Q,R,T>extendsSimpleStore<{query:Q; result:R; transient:T}>:- streams:
query$,result$,transient$. - getters/setters:
setQuery,getQuery,setResult,getResult,setTransient,getTransient. - cache:
getCacheKey(),getCachedResult(),cacheResult(result); cache key viaqs.stringifyof query (sorted, noundefined).
- streams:
MIT