import { Store } from './store.js'; import { Listener } from './types.js'; export type UnwrapDerivedOrStore = T extends Derived ? InnerD : T extends Store ? InnerS : never; type UnwrapReadonlyDerivedOrStoreArray | Store>> = TArr extends readonly [infer Head, ...infer Tail] ? Head extends Derived | Store ? Tail extends ReadonlyArray | Store> ? [UnwrapDerivedOrStore, ...UnwrapReadonlyDerivedOrStoreArray] : [] : [] : []; export interface DerivedFnProps | Store> = ReadonlyArray, TUnwrappedArr extends UnwrapReadonlyDerivedOrStoreArray = UnwrapReadonlyDerivedOrStoreArray> { /** * `undefined` if it's the first run * @privateRemarks this also cannot be typed as TState, as it breaks the inferencing of the function's return type when an argument is used - even with `NoInfer` usage */ prevVal: unknown | undefined; prevDepVals: TUnwrappedArr | undefined; currDepVals: TUnwrappedArr; } export interface DerivedOptions | Store> = ReadonlyArray> { onSubscribe?: (listener: Listener, derived: Derived) => () => void; onUpdate?: () => void; deps: TArr; /** * Values of the `deps` from before and after the current invocation of `fn` */ fn: (props: DerivedFnProps) => TState; } export declare class Derived | Store> = ReadonlyArray> { listeners: Set>; state: TState; prevState: TState | undefined; options: DerivedOptions; /** * Functions representing the subscriptions. Call a function to cleanup * @private */ _subscriptions: Array<() => void>; lastSeenDepValues: Array; getDepVals: () => { prevDepVals: unknown[]; currDepVals: unknown[]; prevVal: NonNullable | undefined; }; constructor(options: DerivedOptions); registerOnGraph(deps?: ReadonlyArray | Store>): void; unregisterFromGraph(deps?: ReadonlyArray | Store>): void; recompute: () => void; checkIfRecalculationNeededDeeply: () => void; mount: () => () => void; subscribe: (listener: Listener) => () => void; } export {};