zustand-injectors
Version:
A sweet way of lazy load slices
19 lines (17 loc) • 994 B
TypeScript
import { StateCreator, StoreMutatorIdentifier } from 'zustand/vanilla';
type StoreInjectors<S> = {
asyncSliceInitializers: Record<string, () => Promise<StateCreator<S, [], [], unknown>>>;
injectAsyncSliceInitializer: (key: string, asyncSliceInitializer: () => Promise<StateCreator<S, [], [], unknown>>) => void;
};
type Injectors = <T, Mps extends [StoreMutatorIdentifier, unknown][] = [], Mcs extends [StoreMutatorIdentifier, unknown][] = [], U = T>(initializer: StateCreator<T, [...Mps, ["injectors", never]], Mcs>, initialAsyncSliceInitializers?: Record<string, () => Promise<StateCreator<T, [], [], unknown>>>) => StateCreator<T, Mps, [["injectors", U], ...Mcs]>;
type Write<T, U> = Omit<T, keyof U> & U;
type WithInjectors<S> = S extends {
getState: () => infer T;
} ? Write<S, StoreInjectors<T>> : never;
declare module "zustand/vanilla" {
interface StoreMutators<S, A> {
injectors: WithInjectors<S>;
}
}
export declare const injectors: Injectors;
export {};