kosha
Version:
⚡A modern, lightweight, fast, and powerful global state management library for modern React.js projects.
33 lines (32 loc) • 1.56 kB
TypeScript
/**
* 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>;
};