export interface Signal { value: T; update(updater: (value: T) => T): void; } export interface ReadonlySignal { readonly value: ReactiveValue; } export type ReactiveFn = (...args: Args) => ReactiveValue; export interface Watcher { readonly value: ReactiveValue; addListener(listener: () => void, opts?: { skipInitial?: boolean; }): () => void; } export interface Notifier { consume(): void; notify(): void; } export type Equals = (prev: T, next: T) => boolean; /** * Context passed to {@link RelayHooks.deactivate} (and threaded through * signalium's internal deactivation path). An options object rather than a * positional flag so more context can be added without a breaking change. */ export interface DeactivateOptions { /** * `true` when the relay is being torn down by a temporary pause (e.g. via * `PauseSignalsProvider`) that will likely resume, and `false`/absent for a * genuine cleanup (no remaining watchers). Relays should avoid scheduling * destructive work like garbage collection while pausing, so that resuming * can reuse the existing state. */ isPausing?: boolean; } export type RelayHooks = { update?(): void; /** * Called when the relay is torn down. See {@link DeactivateOptions.isPausing} * for distinguishing a temporary pause from a genuine cleanup. */ deactivate?(options?: DeactivateOptions): void; }; export interface RelayState { readonly isPending: boolean; value: T | undefined; setPromise: (promise: Promise) => void; setError: (error: unknown) => void; } export type RelayActivate = (state: RelayState) => RelayHooks | (() => unknown) | undefined | void; export interface SignalOptions { equals?: Equals | false; id?: string; desc?: string; throwIfRunning?: boolean; } export interface ReactiveOptions extends SignalOptions { paramKey?: (...params: Params) => string | number; } /** * Internal shape shared by both branches of the {@link ReactivePromise} union. * Not part of the public API — consumers should use {@link ReactivePromise}, * {@link PendingReactivePromise}, or {@link ReadyReactivePromise}. */ export interface BaseReactivePromise extends Promise { readonly error: unknown; readonly isPending: boolean; readonly isRejected: boolean; readonly isResolved: boolean; readonly isSettled: boolean; } export interface PendingReactivePromise extends BaseReactivePromise { readonly value: undefined; readonly isReady: false; } export interface ReadyReactivePromise extends BaseReactivePromise { readonly value: T; readonly isReady: true; } export type ReactivePromise = PendingReactivePromise | ReadyReactivePromise; export interface ReactivePromiseConstructor { readonly prototype: ReactivePromise; new (executor?: (resolve: (value: T | PromiseLike) => void, reject: (reason: unknown) => void) => void): ReactivePromise; all(values: T): ReactivePromise<{ -readonly [P in keyof T]: Awaited; }>; race(values: T): ReactivePromise>; any(values: Iterable>): ReactivePromise>; any(values: T): ReactivePromise>; allSettled(values: Iterable>): Promise>[]>; allSettled(values: T): Promise<{ -readonly [P in keyof T]: PromiseSettledResult>; }>; resolve(value: T): ReactivePromise; reject(reason: any): ReactivePromise; withResolvers(): { promise: ReactivePromise; resolve: (value: T | PromiseLike) => void; reject: (reason: unknown) => void; }; } export type ReactiveTask = ReactivePromise & { run(...params: Params): ReactivePromise; }; export type ReactiveValue = T extends ReactiveTask ? ReactiveTask : T extends Promise ? ReactivePromise : T extends Generator ? ReactivePromise : T; export interface Context { readonly defaultValue: T; } //# sourceMappingURL=types.d.ts.map