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
JavaScript
/**
* 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=