πŸ“„ File detail

state/store.ts

🧩 .tsπŸ“ 35 linesπŸ’Ύ 836 bytesπŸ“ text
← Back to All Files

🎯 Use case

This file lives under β€œstate/”, which covers central application state slices and reducers/stores. On the API surface it exposes Store and createStore β€” mainly functions, hooks, or classes.

Generated from folder role, exports, dependency roots, and inline comments β€” not hand-reviewed for every path.

🧠 Inline summary

type Listener = () => void type OnChange<T> = (args: { newState: T; oldState: T }) => void export type Store<T> = { getState: () => T

πŸ“€ Exports (heuristic)

  • Store
  • createStore

πŸ–₯️ Source preview

type Listener = () => void
type OnChange<T> = (args: { newState: T; oldState: T }) => void

export type Store<T> = {
  getState: () => T
  setState: (updater: (prev: T) => T) => void
  subscribe: (listener: Listener) => () => void
}

export function createStore<T>(
  initialState: T,
  onChange?: OnChange<T>,
): Store<T> {
  let state = initialState
  const listeners = new Set<Listener>()

  return {
    getState: () => state,

    setState: (updater: (prev: T) => T) => {
      const prev = state
      const next = updater(prev)
      if (Object.is(next, prev)) return
      state = next
      onChange?.({ newState: next, oldState: prev })
      for (const listener of listeners) listener()
    },

    subscribe: (listener: Listener) => {
      listeners.add(listener)
      return () => listeners.delete(listener)
    },
  }
}