@fun-land/fun-state
TypeScript icon, indicating that this package has built-in type declarations

6.2.9 • Public • Published

Fun-State

@fun-land/fun-state is a framework-agnostic library for doing fractal, compositional state in a way that is type-safe, testable, and easy to refactor.

Getting Started

See @fun-land/use-fun-state to get started using react hooks.

API

FunState

export interface FunState<State> {
  /** Extract the enclosed immutable State */
  get: () => State

  /** Query the state using an accessor */
  query: <A>(acc: Accessor<State, A>) => A[]

  /** Transform the state with the passed function */
  mod: Updater<State>

  /** Replace the state */
  set: (val: State) => void

  /** Create a new FunState focused at the passed accessor */
  focus: <SubState>(acc: Accessor<State, SubState>) => FunState<SubState>

  /** Focus state at passed property key (sugar for `focus(prop(k))`) */
  prop: <K extends keyof State>(key: K) => FunState<State[K]>
}

Data structure that holds the state along with a stateful methods that interact with it.

mockState

<State>(initialState: State) => FunState<State>

Creates a library-agnostic instance of the state machine with a starting state. This is useful when unit testing functions or components that take a FunState instance.

pureState

<State>({getState, modState}: StateEngine<State>): FunState<State>

Creates an instance of funState given a custom StateEngine. If you want to add support for preact or other libraries with things like hooks you want this.

Accessor

Used by FunState:query and FunState:focus for operating on more complex structures. See @fun-land/accessor

merge

<State>(fs: FunState<State>) => (part: Partial<State>) => void

Mutably merge a partial state into a FunState

extractArray

<A>(state: FunState<A[]>): Array<FunState<A>> =>

Transform a FunState holding an array of items into an array of FunState of the item. Usefull when you want to pass FunState instances to child components.

TODO / Contributing

  • Give feedback!
  • Add performance benchmarks
  • File bugs
  • Improve documentation
  • Add more examples

Package Sidebar

Install

npm i @fun-land/fun-state

Weekly Downloads

1

Version

6.2.9

License

ISC

Unpacked Size

36.2 kB

Total Files

39

Last publish

Collaborators

  • jethrolarson