UNPKG

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.

62 lines 3.9 kB
/** * Core Signal Category - Functor implementation * Following category-theoretic laws for structure preservation */ /** * Creates a basic signal with functor laws * Laws verified: * - map(id) ≡ id (identity) * - map(f ∘ g) ≡ map(f) ∘ map(g) (composition) */ export const signal = (initial) => { let current = initial; const subscribers = new Set(); const notify = () => { subscribers.forEach((fn) => fn(current)); }; const signalInstance = { value: () => current, map: (f) => { // Create derived signal that follows functor laws const derived = signal(f(current)); // Subscribe to changes and map them signalInstance.subscribe((newValue) => { derived._set(f(newValue)); }); return derived; }, subscribe: (fn) => { subscribers.add(fn); return () => subscribers.delete(fn); }, _set: (value) => { if (value !== current) { current = value; notify(); } }, }; return signalInstance; }; /** * Identity function for functor law verification */ export const id = (a) => a; /** * Function composition for functor law verification */ export const compose = (f, g) => (a) => f(g(a)); /** * Pure function - lifts a value into Signal context */ export const pure = (value) => signal(value); /** * Computed signal - creates a derived signal from a computation function */ export const computed = (compute) => { const computedSignal = signal(compute()); // For now, return a basic computed signal // In a full implementation, this would track dependencies automatically return computedSignal; }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvcmUvc2lnbmFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQVVIOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLENBQ3BCLE9BQVUsRUFDdUMsRUFBRTtJQUNuRCxJQUFJLE9BQU8sR0FBRyxPQUFPLENBQUM7SUFDdEIsTUFBTSxXQUFXLEdBQUcsSUFBSSxHQUFHLEVBQXNCLENBQUM7SUFFbEQsTUFBTSxNQUFNLEdBQUcsR0FBRyxFQUFFO1FBQ2xCLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzNDLENBQUMsQ0FBQztJQUVGLE1BQU0sY0FBYyxHQUFvRDtRQUN0RSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTztRQUVwQixHQUFHLEVBQUUsQ0FBSSxDQUFjLEVBQW9CLEVBQUU7WUFDM0Msa0RBQWtEO1lBQ2xELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUVuQyxvQ0FBb0M7WUFDcEMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO2dCQUNwQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQzVCLENBQUMsQ0FBQyxDQUFDO1lBRUgsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQztRQUVELFNBQVMsRUFBRSxDQUFDLEVBQWtCLEVBQUUsRUFBRTtZQUNoQyxXQUFXLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3BCLE9BQU8sR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN0QyxDQUFDO1FBRUQsSUFBSSxFQUFFLENBQUMsS0FBUSxFQUFFLEVBQUU7WUFDakIsSUFBSSxLQUFLLEtBQUssT0FBTyxFQUFFLENBQUM7Z0JBQ3RCLE9BQU8sR0FBRyxLQUFLLENBQUM7Z0JBQ2hCLE1BQU0sRUFBRSxDQUFDO1lBQ1gsQ0FBQztRQUNILENBQUM7S0FDRixDQUFDO0lBRUYsT0FBTyxjQUFjLENBQUM7QUFDeEIsQ0FBQyxDQUFDO0FBRUY7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBSSxDQUFJLEVBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztBQUVwQzs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FDbEIsQ0FBVSxDQUFjLEVBQUUsQ0FBYyxFQUFFLEVBQUUsQ0FDNUMsQ0FBQyxDQUFJLEVBQUssRUFBRSxDQUNWLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUVaOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUksS0FBUSxFQUFhLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFFOUQ7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsQ0FBSSxPQUFnQixFQUFvQixFQUFFO0lBQ2hFLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBRXpDLDBDQUEwQztJQUMxQyx3RUFBd0U7SUFDeEUsT0FBTyxjQUFjLENBQUM7QUFDeEIsQ0FBQyxDQUFDIn0=