resig.js
Version:
Universal reactive signal library with complete platform features: signals, animations, CRDTs, scheduling, DOM integration. Works identically across React, SolidJS, Svelte, Vue, and Qwik.
104 lines (103 loc) • 3.77 kB
TypeScript
/**
* Plugin Engine - Zero-runtime cost category functors
* Each plugin is a category functor that rewrites the AST lazily
*/
import { Signal } from '../core/signal';
export type Plugin<A> = (signal: Signal<A>) => Signal<A>;
/**
* Debounce plugin - delays signal updates
*/
export declare const debouncePlugin: <A>(ms: number) => Plugin<A>;
/**
* Throttle plugin - limits signal update frequency
*/
export declare const throttlePlugin: <A>(ms: number) => Plugin<A>;
/**
* Cache plugin - caches signal values in localStorage
*/
export declare const cachePlugin: <A>(key: string, ttl?: number) => Plugin<A>;
/**
* Logger plugin - logs signal changes
*/
export declare const loggerPlugin: <A>(prefix?: string) => Plugin<A>;
/**
* Filter plugin - only emits values that pass predicate
*/
export declare const filterPlugin: <A>(predicate: (value: A) => boolean) => Plugin<A>;
/**
* Transform plugin - applies transformation to signal values
*/
export declare const transformPlugin: <A, B>(transform: (value: A) => B) => Plugin<A>;
/**
* Validation plugin - validates signal values
*/
export declare const validatePlugin: <A>(validator: (value: A) => boolean, onError?: (value: A) => void) => Plugin<A>;
/**
* Persistence plugin - persists signal state
*/
export declare const persistPlugin: <A>(key: string) => Plugin<A>;
/**
* Compose multiple plugins
*/
export declare const compose: <A>(...plugins: Plugin<A>[]) => Plugin<A>;
/**
* Apply plugin to signal
*/
export declare const apply: <A>(plugin: Plugin<A>) => (signal: Signal<A>) => Signal<A>;
/**
* Conditional plugin application
*/
export declare const when: <A>(condition: boolean, plugin: Plugin<A>) => Plugin<A>;
/**
* Plugin that applies different plugins based on signal value
*/
export declare const switchPlugin: <A>(selector: (value: A) => string, plugins: Record<string, Plugin<A>>, defaultPlugin?: Plugin<A>) => Plugin<A>;
/**
* Async plugin - handles async operations with loading states
*/
export declare const asyncPlugin: <A, B>(asyncFn: (value: A) => Promise<B>, initialValue?: B) => Plugin<A>;
/**
* Validation plugin with real-time feedback
*/
export declare const validationPlugin: <A>(validator: (value: A) => boolean, onValidChange?: (isValid: boolean) => void) => Plugin<A>;
/**
* State machine plugin
*/
export declare const stateMachinePlugin: <S, A>(initialState: S, reducer: (state: S, action: A) => S) => Plugin<A>;
/**
* Fetch plugin - HTTP operations with retry and caching
*/
export declare const fetchPlugin: <T>(fetcher: () => Promise<T>, options?: {
retries?: number;
cacheKey?: string;
cacheTtl?: number;
}) => Plugin<any>;
/**
* Built-in plugin combinations
*/
export declare const commonPlugins: {
/**
* Debug plugin - combines logging and validation
*/
debug: <A>(name: string, validator?: (value: A) => boolean) => Plugin<A>;
/**
* Performance plugin - combines debounce and cache
*/
performance: <A_1>(key: string, debounceMs?: number, cacheTtl?: number) => Plugin<A_1>;
/**
* Persistent state plugin - combines persistence and validation
*/
persistentState: <A_2>(key: string, validator?: (value: A_2) => boolean) => Plugin<A_2>;
/**
* Form field plugin - combines validation, debouncing, and persistence
*/
formField: <A_3>(key: string, validator: (value: A_3) => boolean, debounceMs?: number) => Plugin<A_3>;
/**
* API data plugin - combines fetch, caching, and error handling
*/
apiData: <T>(fetcher: () => Promise<T>, cacheKey: string, retries?: number) => Plugin<any>;
/**
* Real-time data plugin - combines debouncing and logging for live updates
*/
realTime: <A_4>(name: string, debounceMs?: number) => Plugin<A_4>;
};