killa
Version:
State management for Vanilla and React
34 lines (33 loc) • 1.29 kB
TypeScript
export interface Options<T> {
compare?: (a: unknown, b: unknown) => boolean;
clone?: (state: T) => T;
use?: ((store: Store<T>) => void)[];
}
type State = Record<string, any>;
export type Selector<T, U = unknown> = (state: T) => U;
export interface Subscriber<T, U = unknown> {
(state: T, prevState: T): void;
$$subscriber?: symbol;
$$selectorState?: U;
$$selector?: Selector<T, U>;
}
export interface Store<T = State> {
$$store: symbol;
getState: () => T;
setState: (fn: (state: T) => Partial<T>, force?: boolean) => void;
subscribe: {
<U>(subscriber: Subscriber<T, U>, selector?: (State: T) => U): () => boolean;
};
getServerState: () => T;
}
type InitializerFn<T> = (getState: Store<T>['getState'], setState: Store<T>['setState']) => T;
export declare function createStore<T extends State, U = InitializerFn<T> | T>(initializer?: U, options?: Options<T>): Readonly<{
$$store: symbol;
getState: () => T;
setState: (fn: (state: T) => Partial<T>, force?: boolean | undefined) => void;
subscribe: <U_1>(subscriber: Subscriber<T, U_1>, selector?: ((State: T) => U_1) | undefined) => () => boolean;
getServerState: () => T;
resetState: (state?: unknown | null) => void;
destroy: () => void;
}>;
export {};