import { Accessor } from 'solid-js'; import { Signal, Setter, AccessorArray } from 'solid-js/types/reactive/signal'; /** * Any function */ type Fn = () => void; /** * Any function */ type AnyFn = (...args: any[]) => any; /** * Maybe it's a signal, or a plain value * * ```ts * type MaybeSignal = T | Signal * ``` */ type MaybeSignal = MaybeAccessor | Signal; /** * Maybe it's a accessor, or a plain value */ type MaybeAccessor = T | Accessor; type MaybeElement = HTMLElement | SVGElement | undefined | null; type MaybeElementAccessor = MaybeAccessor; type Arrayable = T[] | T; /** * Infers the element type of an array */ type ElementOf = T extends Array ? E : never; type Awaitable = Promise | T; type ArgumentsType = T extends (...args: infer U) => any ? U : never; type PromisifyFn = (...args: ArgumentsType) => Promise>; interface Pausable { /** * A Accessor indicate whether a pausable instance is active */ isActive: Accessor; /** * Temporary pause the effect from executing */ pause: Fn; /** * Resume the effects */ resume: Fn; } interface Stoppable { /** * A Accessor indicate whether a stoppable instance is executing */ isPending: Accessor; /** * Stop the effect from executing */ stop: Fn; /** * Start the effects */ start: (...args: StartFnArgs) => void; } /** * A Signal that allow to set null or undefined */ type RemovableSignal = [Accessor, Setter]; type EffectOnDeps = AccessorArray | Accessor; type MapSources = { [K in keyof T]: T[K] extends EffectOnDeps ? V : never; }; type MapOldSources = { [K in keyof T]: T[K] extends EffectOnDeps ? V | undefined : never; }; type Mutable = { -readonly [P in keyof T]: T[P]; }; export { AnyFn, ArgumentsType, Arrayable, Awaitable, EffectOnDeps, ElementOf, Fn, MapOldSources, MapSources, MaybeAccessor, MaybeElement, MaybeElementAccessor, MaybeSignal, Mutable, Pausable, PromisifyFn, RemovableSignal, Stoppable };