UNPKG

neant

Version:

The simplest React state management library - direct mutations, direct destructuring, automatic fine-grained reactivity

37 lines (33 loc) 1.32 kB
import * as immer from 'immer'; import { Draft } from 'immer'; type StateCreator<T> = (setState: (updater: ProduceParam<T>) => void, getState: () => T) => T; type ExtractState<S> = S extends { getState: () => infer T; } ? T : never; type UseBoundStore<S> = { (): ExtractState<S>; <U>(selector: (state: ExtractState<S>) => U): U; } & S; interface StoreApi<T> { setState: (updater: ProduceParam<T>) => void; getState: () => T; subscribe: (listener: (state: T, prevState: T) => void) => () => void; } type ProduceParam<T> = ((draft: Draft<T>) => void); type WithDirectStateAccess<S> = S extends { getState: () => infer T; } ? S & { use: { [K in keyof T]: () => T[K]; }; } : never; declare function createEnhancedStore<T>(createState: StateCreator<T>): WithDirectStateAccess<UseBoundStore<StoreApi<T>>>; type StoreType<T> = ReturnType<typeof createEnhancedStore<T>>; type StoreState<T> = ReturnType<StoreType<T>['getState']>; declare function createStore<T extends object>(createState: StateCreator<T>): { useAppStore: () => T; subscribe: (listener: (state: T, prevState: T) => void) => () => void; getState: () => T; setState: (updater: (draft: immer.Draft<T>) => void) => void; }; export { type StoreState, type StoreType, createEnhancedStore, createStore };