impact-signal
Version:
Reactive signals for React
56 lines (55 loc) • 1.69 kB
TypeScript
export declare class ObserverContext {
static stack: ObserverContext[];
static get current(): ObserverContext | undefined;
private _getters;
private _setters;
private _onUpdate?;
private _snapshot;
get snapshot(): {
signals: unknown[];
};
constructor();
registerGetter(signal: SignalTracker): void;
registerSetter(signal: SignalTracker): void;
/**
* There is only a single subscriber to any ObserverContext
*/
subscribe(onUpdate: () => void): () => void;
notify(): void;
[Symbol.dispose](): void;
}
export declare class SignalTracker {
getValue: () => unknown;
private contexts;
constructor(getValue: () => unknown);
addContext(context: ObserverContext): void;
removeContext(context: ObserverContext): void;
notify(): void;
}
export type Signal<T> = T extends Promise<infer V> ? {
get value(): ObservablePromise<V>;
set value(promise: T);
} : {
value: T;
};
export declare function signal<T>(): Signal<T | undefined>;
export declare function signal<T>(initialValue: T): Signal<T>;
type PendingPromise<T> = Promise<T> & {
status: "pending";
};
type FulfilledPromise<T> = Promise<T> & {
status: "fulfilled";
value: T;
};
type RejectedPromise<T> = Promise<T> & {
status: "rejected";
reason: unknown;
};
type ObservablePromise<T> = PendingPromise<T> | FulfilledPromise<T> | RejectedPromise<T>;
export declare function use<T>(promise: ObservablePromise<T>): T;
export declare function derived<T>(cb: () => T): {
readonly value: T;
};
export declare function effect(cb: () => void): () => void;
export declare function observer(): ObserverContext;
export {};