UNPKG

kosha

Version:

⚡A modern, lightweight, fast, and powerful global state management library for modern React.js projects.

33 lines (32 loc) 1.56 kB
/** * Kosha: A lightweight global state management library for React. * * @template T - The type of the state object. * @param {(set: (state: StateSetterArgType<T>) => void, get: () => T | null) => T} storeCreator * A function that initializes the store with its state and actions. * @returns {(selectorFunc?: (state: T) => U) => U} * A custom React hook to read and subscribe to state slices. */ export type Immutable<T> = { readonly [K in keyof T]: T[K] extends object ? T[K] extends Function ? T[K] : Immutable<T[K]> : T[K]; }; export type Mutable<T> = { -readonly [K in keyof T]: T[K] extends object ? T[K] extends Function ? T[K] : Mutable<T[K]> : T[K]; }; export type BaseType = Omit<object, "__get">; export type StateSetterArgType<T> = ((newState: Immutable<T>) => T | Partial<T>) | Partial<T> | T; export type StateSetter<T> = { (state: StateSetterArgType<T>, replace?: false): void; (state: ((newState: Immutable<T>) => T) | T, replace: true): void; }; export type StoreCreator<T extends BaseType> = (set: StateSetter<T>, get: () => T | null) => T & { __get?: () => T | null; }; export type SliceCreator<TStore extends BaseType, TSlice = Partial<TStore>> = (set: StateSetter<TStore>, get: () => TStore | null) => TSlice; export type Middleware<T extends BaseType> = (storeCreator: StoreCreator<T>) => StoreCreator<T>; export declare const create: <T extends BaseType>(storeCreator: StoreCreator<T>) => { (): T; <U>(selectorFunc: (state: T) => U): U; getState: () => T | null; setState: StateSetter<T>; };