signalforge
Version:
Fine-grained reactive state management with automatic dependency tracking - Ultra-optimized, zero dependencies
75 lines • 2.78 kB
TypeScript
export interface SignalMetadata {
id: string;
type: 'signal' | 'computed' | 'effect';
createdAt: number;
label?: string;
}
export interface PluginContext<T = any> {
signal: SignalMetadata;
oldValue?: T;
newValue: T;
timestamp: number;
source?: 'set' | 'compute' | 'init';
}
export interface Plugin {
name: string;
version?: string;
onSignalCreate?<T>(metadata: SignalMetadata, initialValue: T): void;
onBeforeUpdate?<T>(context: PluginContext<T>): T | undefined;
onSignalUpdate?<T>(context: PluginContext<T>): void;
onSignalDestroy?(metadata: SignalMetadata): void;
onRegister?(): void;
onUnregister?(): void;
}
export declare function registerPlugin(plugin: Plugin): void;
export declare function unregisterPlugin(pluginNameOrInstance: string | Plugin): boolean;
export declare function getRegisteredPlugins(): readonly Plugin[];
export declare function clearPlugins(): void;
export declare function enablePlugins(): void;
export declare function disablePlugins(): void;
export declare function arePluginsEnabled(): boolean;
export declare function __registerSignal<T>(type: 'signal' | 'computed' | 'effect', initialValue: T, label?: string): SignalMetadata;
export declare function __notifyBeforeUpdate<T>(signalId: string, oldValue: T, newValue: T, source?: 'set' | 'compute' | 'init'): T | undefined;
export declare function __notifyAfterUpdate<T>(signalId: string, oldValue: T, newValue: T, source?: 'set' | 'compute' | 'init'): void;
export declare function __notifySignalDestroy(signalId: string): void;
export declare function __getSignalMetadata(signalId: string): SignalMetadata | undefined;
export declare function createLoggerPlugin(options?: {
verbose?: boolean;
logCreates?: boolean;
logUpdates?: boolean;
logDestroys?: boolean;
}): Plugin;
export interface HistoryEntry {
signalId: string;
oldValue: any;
newValue: any;
timestamp: number;
}
export declare function createTimeTravelPlugin(options?: {
maxHistory?: number;
}): {
plugin: Plugin;
undo(): boolean;
redo(): boolean;
getHistory(): readonly HistoryEntry[];
clear(): void;
readonly historySize: number;
readonly futureSize: number;
};
export interface PerformanceMetrics {
totalUpdates: number;
updatesBySignal: Map<string, number>;
averageUpdateTime: number;
slowestUpdate: {
signalId: string;
duration: number;
} | null;
}
export declare function createPerformancePlugin(): {
plugin: Plugin;
getMetrics(): Readonly<PerformanceMetrics>;
reset(): void;
printMetrics(): void;
};
export declare function createValidationPlugin(validators: Record<string, (value: any) => boolean>): Plugin;
//# sourceMappingURL=plugins.d.ts.map