on Jan 05, 2024 i took...

JavaScript persisted store

persisted.ts
import type { Draft } from 'immer' import { produce } from 'immer' type Session = { id: string email: string displayName: string } type Store = { sessions: Array<Session> active: Session | null } const defaultStore: Store = { sessions: [] active: null } const _key = 'application_store' as const let _state: Store = defaultStore const persisted = { init() { const value = localStorage.getItem(_key) if (!value) return defaultStore _state = JSON.parse(value) || defaultStore }, read<Selected>(selector: (persisted: Store) => Selected): Selected { return selector(_state) }, write(writer: (draft: Draft<Store>) => void) { _state = produce(_state, writer) localStorage.setItem(_key, JSON.stringify(_state)) }, } export default persisted