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.
70 lines • 4.29 kB
JavaScript
;
/**
* Core Signal Category - Functor implementation
* Following category-theoretic laws for structure preservation
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.computed = exports.pure = exports.compose = exports.id = exports.signal = void 0;
/**
* Creates a basic signal with functor laws
* Laws verified:
* - map(id) ≡ id (identity)
* - map(f ∘ g) ≡ map(f) ∘ map(g) (composition)
*/
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 = (0, exports.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;
};
exports.signal = signal;
/**
* Identity function for functor law verification
*/
const id = (a) => a;
exports.id = id;
/**
* Function composition for functor law verification
*/
const compose = (f, g) => (a) => f(g(a));
exports.compose = compose;
/**
* Pure function - lifts a value into Signal context
*/
const pure = (value) => (0, exports.signal)(value);
exports.pure = pure;
/**
* Computed signal - creates a derived signal from a computation function
*/
const computed = (compute) => {
const computedSignal = (0, exports.signal)(compute());
// For now, return a basic computed signal
// In a full implementation, this would track dependencies automatically
return computedSignal;
};
exports.computed = computed;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvcmUvc2lnbmFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O0dBR0c7OztBQVVIOzs7OztHQUtHO0FBQ0ksTUFBTSxNQUFNLEdBQUcsQ0FDcEIsT0FBVSxFQUN1QyxFQUFFO0lBQ25ELElBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQztJQUN0QixNQUFNLFdBQVcsR0FBRyxJQUFJLEdBQUcsRUFBc0IsQ0FBQztJQUVsRCxNQUFNLE1BQU0sR0FBRyxHQUFHLEVBQUU7UUFDbEIsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDM0MsQ0FBQyxDQUFDO0lBRUYsTUFBTSxjQUFjLEdBQW9EO1FBQ3RFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPO1FBRXBCLEdBQUcsRUFBRSxDQUFJLENBQWMsRUFBb0IsRUFBRTtZQUMzQyxrREFBa0Q7WUFDbEQsTUFBTSxPQUFPLEdBQUcsSUFBQSxjQUFNLEVBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFFbkMsb0NBQW9DO1lBQ3BDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtnQkFDcEMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUM1QixDQUFDLENBQUMsQ0FBQztZQUVILE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUM7UUFFRCxTQUFTLEVBQUUsQ0FBQyxFQUFrQixFQUFFLEVBQUU7WUFDaEMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNwQixPQUFPLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEMsQ0FBQztRQUVELElBQUksRUFBRSxDQUFDLEtBQVEsRUFBRSxFQUFFO1lBQ2pCLElBQUksS0FBSyxLQUFLLE9BQU8sRUFBRSxDQUFDO2dCQUN0QixPQUFPLEdBQUcsS0FBSyxDQUFDO2dCQUNoQixNQUFNLEVBQUUsQ0FBQztZQUNYLENBQUM7UUFDSCxDQUFDO0tBQ0YsQ0FBQztJQUVGLE9BQU8sY0FBYyxDQUFDO0FBQ3hCLENBQUMsQ0FBQztBQXZDVyxRQUFBLE1BQU0sVUF1Q2pCO0FBRUY7O0dBRUc7QUFDSSxNQUFNLEVBQUUsR0FBRyxDQUFJLENBQUksRUFBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQXZCLFFBQUEsRUFBRSxNQUFxQjtBQUVwQzs7R0FFRztBQUNJLE1BQU0sT0FBTyxHQUNsQixDQUFVLENBQWMsRUFBRSxDQUFjLEVBQUUsRUFBRSxDQUM1QyxDQUFDLENBQUksRUFBSyxFQUFFLENBQ1YsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBSEMsUUFBQSxPQUFPLFdBR1I7QUFFWjs7R0FFRztBQUNJLE1BQU0sSUFBSSxHQUFHLENBQUksS0FBUSxFQUFhLEVBQUUsQ0FBQyxJQUFBLGNBQU0sRUFBQyxLQUFLLENBQUMsQ0FBQztBQUFqRCxRQUFBLElBQUksUUFBNkM7QUFFOUQ7O0dBRUc7QUFDSSxNQUFNLFFBQVEsR0FBRyxDQUFJLE9BQWdCLEVBQW9CLEVBQUU7SUFDaEUsTUFBTSxjQUFjLEdBQUcsSUFBQSxjQUFNLEVBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUV6QywwQ0FBMEM7SUFDMUMsd0VBQXdFO0lBQ3hFLE9BQU8sY0FBYyxDQUFDO0FBQ3hCLENBQUMsQ0FBQztBQU5XLFFBQUEsUUFBUSxZQU1uQiJ9