UNPKG

storestack

Version:
86 lines (85 loc) 2.85 kB
declare global { interface Window { stores: StoreStack; } } export interface Observer<T> { update(subject: Store<T>): void; } export interface Subject<T> { readonly state: T; attach(observer: Observer<T>): void; detach(observer: Observer<T>): void; notify(): void; set(options: T): void; set(options: (prevState: T) => T): void; } export declare type Pointer = string; export declare type AnyStore = Store<any>; export declare class DuplicateObserverError extends Error { constructor(); } export declare class UnknownObserverError extends Error { constructor(); } export declare class MemoryAllocationError extends Error { constructor(); } export declare class NullPointerError extends Error { constructor(); } export declare class Store<T> implements Subject<T> { #private; get state(): T; get prevState(): T | null; static newPointer(): string; constructor(state: T); attach(observer: Observer<T>, skipOnExist?: boolean): void; detach(observer: Observer<T>): void; notify(): void; set(options: T | ((prevState: T) => T)): void; } export interface StoreOptions<T> { pointer?: Pointer; onChange?: (state: T) => void; observers?: Observer<T>[]; override?: boolean; errorHandling?: StoreOptionsErrorHandling; } export interface StoreOptionsErrorHandling { verbose?: boolean; stopOnError?: boolean; } export declare function useStore<T>(state: T, options?: StoreOptions<T>): Pointer; export declare class StoreObserver<T> implements Observer<T> { #private; constructor(callback: (currentState: T, previousState?: T | null) => void); update(subject: Store<T>): void; } export declare function useObserver<T = unknown>(callback: (currentState: T, prevState?: T | null) => void): StoreObserver<T>; declare type SetterFunction<T = any> = (prevState: T) => T; export declare class StoreStack { #private; static configure(): void; static attach<T>(globalObservers?: Observer<T>[]): StoreStack; private constructor(); addGlobalObserver<T>(...globalObservers: Observer<T>[]): void; addStore(newItem: AnyStore): Pointer; addStoreAtPointer(newItem: AnyStore, pointer: Pointer, options?: { override?: boolean; verbose?: boolean; }): void; upsert<T>(defaultValue: T, pointer: Pointer, ...observers: Observer<T>[]): void; removeStore(ptr: Pointer, options?: { verbose?: boolean; }): void; get<T = any>(ptr: Pointer): Store<T> | undefined; useState<T = any>({ pointer, defaultValue, observers, useGlobalObserver, }: { pointer: Pointer; defaultValue: T; observers?: Observer<T>[]; useGlobalObserver?: boolean; }): [() => T, (newState: T | SetterFunction<T>) => void]; } export declare const Stores: StoreStack; export {};