UNPKG

@known-as-bmf/store

Version:
71 lines 2.02 kB
import { HookSubscriber, TransformInput, TapInput, TapOutput } from '@known-as-bmf/hookable'; /** * A store instance. * * @public */ export interface Store<S> { } /** * Hooks available to middlewares. * * @public */ export interface Hooks<S> { /** * Register a function that will be invoked each time a state change is requested. * This function can transform the state and must return an array containing the new state. * An array must be returned because of implementation details behind the scene. * * @param fn - A state transformation function. */ transformState: HookSubscriber<TransformInput<(state: S) => S>>; /** * Register a function that will be invoked when the state is about to change. * It is invoked after all `transformState` hooks. * * @param fn - A function invoked when the state is about to change. */ stateWillChange: HookSubscriber<TapInput<(state: S) => S>>; /** * Register a function that will be invoked after the state changed. * It is invoked after all `transformState` and `stateWillChange` hooks. * * @param fn - A function invoked when the state has changed. */ stateDidChange: HookSubscriber<TapOutput<(state: S) => S>>; } /** * Data provided when a subscription to state change is called. * * @public */ export interface StateChangedEvent<S> { /** * The previous value of the state. */ previous: S; /** * The new value of the state. */ current: S; } /** * State selector function. * * @public */ export declare type Selector<S, R> = (state: S) => R; /** * Subscription callback function. * * @public */ export declare type SubscriptionCallback<S> = (event: StateChangedEvent<S>) => void; /** * Middleware function signature. * * @public */ export declare type Middleware<S> = (store: Store<S>, hooks: Hooks<S>) => void; //# sourceMappingURL=types.d.ts.map