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.

213 lines 15 kB
"use strict"; /** * Time Algebra - Clock ticks and temporal operations * Extends Effect with time-based operations */ Object.defineProperty(exports, "__esModule", { value: true }); exports.throttle = exports.debounce = exports.interval = exports.timeout = exports.delay = exports.currentTime = exports.time = void 0; const effect_1 = require("../core/effect"); /** * Creates a Time effect with temporal operations */ const time = (initial) => { const baseEffect = (0, effect_1.effect)(initial); const timeInstance = { value: baseEffect.value, map: baseEffect.map, subscribe: baseEffect.subscribe, bind: baseEffect.bind, chain: baseEffect.chain, _set: baseEffect._set, delay: (ms) => { const delayed = (0, exports.time)(baseEffect.value()); setTimeout(() => { delayed._set(baseEffect.value()); }, ms); // Subscribe to original changes with delay baseEffect.subscribe((newValue) => { setTimeout(() => { delayed._set(newValue); }, ms); }); return delayed; }, timeout: (ms) => { const timedOut = (0, exports.time)(baseEffect.value()); let hasCompleted = false; // Set timeout const timeoutId = setTimeout(() => { if (!hasCompleted) { timedOut._set(new Error(`Timeout after ${ms}ms`)); } }, ms); // Subscribe to original completion baseEffect.subscribe((newValue) => { if (!hasCompleted) { hasCompleted = true; clearTimeout(timeoutId); timedOut._set(newValue); } }); return timedOut; }, interval: (ms) => { const intervalTime = (0, exports.time)(baseEffect.value()); let intervalId; let subscriberCount = 0; let tickCount = 0; // Create a new Time object with custom subscribe const customIntervalTime = { ...intervalTime, subscribe: (fn) => { subscriberCount++; // Start interval when first subscriber is added if (subscriberCount === 1) { intervalId = setInterval(() => { tickCount++; // Force a change by setting a slightly different value // For primitive types, we can append tick count const currentValue = baseEffect.value(); if (typeof currentValue === 'number') { intervalTime._set((currentValue + tickCount * 0.000001)); } else if (typeof currentValue === 'string') { intervalTime._set((currentValue + '')); } else { // For objects, create a new reference intervalTime._set({ ...currentValue, _tick: tickCount, }); } }, ms); } const unsubscribe = intervalTime.subscribe(fn); return () => { subscriberCount--; if (subscriberCount === 0 && intervalId) { clearInterval(intervalId); } unsubscribe(); }; }, }; return customIntervalTime; }, // Compatibility methods for factories now: () => baseEffect.value(), update: () => { // Force an update by setting the current value baseEffect._set(baseEffect.value()); }, }; return timeInstance; }; exports.time = time; /** * Creates a current time effect that updates with the current timestamp */ const currentTime = () => { const timeEffect = (0, exports.time)(Date.now()); // Override the now method to return current timestamp const currentTimeEffect = { ...timeEffect, now: () => Date.now(), update: () => { timeEffect._set(Date.now()); }, }; return currentTimeEffect; }; exports.currentTime = currentTime; /** * Creates a delayed effect */ const delay = (ms, value) => { return (0, exports.time)(value).delay(ms); }; exports.delay = delay; /** * Creates a timeout effect */ const timeout = (ms, effect) => { const timeEffect = (0, exports.time)(effect.value()); effect.subscribe((value) => timeEffect._set(value)); return timeEffect.timeout(ms); }; exports.timeout = timeout; /** * Creates an interval effect */ const interval = (ms, value) => { const intervalTime = (0, exports.time)(value); let intervalId; let subscriberCount = 0; let tickCount = 0; // Create a new Time object with custom subscribe const customIntervalTime = { ...intervalTime, subscribe: (fn) => { subscriberCount++; // Start interval when first subscriber is added if (subscriberCount === 1) { intervalId = setInterval(() => { tickCount++; // Force a change by setting a slightly different value if (typeof value === 'number') { intervalTime._set((value + tickCount * 0.000001)); } else if (typeof value === 'string') { intervalTime._set((value + '')); } else { // For objects, create a new reference intervalTime._set({ ...value, _tick: tickCount }); } }, ms); } const unsubscribe = intervalTime.subscribe(fn); return () => { subscriberCount--; if (subscriberCount === 0 && intervalId) { clearInterval(intervalId); } unsubscribe(); }; }, }; return customIntervalTime; }; exports.interval = interval; /** * Debounce utility using Time algebra */ const debounce = (ms, effect) => { const debounced = (0, exports.time)(effect.value()); let timeoutId; effect.subscribe((newValue) => { clearTimeout(timeoutId); timeoutId = setTimeout(() => { debounced._set(newValue); }, ms); }); return debounced; }; exports.debounce = debounce; /** * Throttle utility using Time algebra */ const throttle = (ms, effect) => { const throttled = (0, exports.time)(effect.value()); let lastExecution = 0; effect.subscribe((newValue) => { const now = Date.now(); if (now - lastExecution >= ms) { throttled._set(newValue); lastExecution = now; } }); return throttled; }; exports.throttle = throttle; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hbGdlYnJhcy90aW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O0dBR0c7OztBQUVILDJDQUFnRDtBQVdoRDs7R0FFRztBQUNJLE1BQU0sSUFBSSxHQUFHLENBQUksT0FBVSxFQUEwQyxFQUFFO0lBQzVFLE1BQU0sVUFBVSxHQUFHLElBQUEsZUFBTSxFQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRW5DLE1BQU0sWUFBWSxHQUEyQztRQUMzRCxLQUFLLEVBQUUsVUFBVSxDQUFDLEtBQUs7UUFDdkIsR0FBRyxFQUFFLFVBQVUsQ0FBQyxHQUFHO1FBQ25CLFNBQVMsRUFBRSxVQUFVLENBQUMsU0FBUztRQUMvQixJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUk7UUFDckIsS0FBSyxFQUFFLFVBQVUsQ0FBQyxLQUFLO1FBQ3ZCLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSTtRQUVyQixLQUFLLEVBQUUsQ0FBQyxFQUFVLEVBQVcsRUFBRTtZQUM3QixNQUFNLE9BQU8sR0FBRyxJQUFBLFlBQUksRUFBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUV6QyxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDbkMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBRVAsMkNBQTJDO1lBQzNDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtnQkFDaEMsVUFBVSxDQUFDLEdBQUcsRUFBRTtvQkFDZCxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUN6QixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDVCxDQUFDLENBQUMsQ0FBQztZQUVILE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUM7UUFFRCxPQUFPLEVBQUUsQ0FBQyxFQUFVLEVBQW1CLEVBQUU7WUFDdkMsTUFBTSxRQUFRLEdBQUcsSUFBQSxZQUFJLEVBQVksVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDckQsSUFBSSxZQUFZLEdBQUcsS0FBSyxDQUFDO1lBRXpCLGNBQWM7WUFDZCxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNoQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7b0JBQ2xCLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDcEQsQ0FBQztZQUNILENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUVQLG1DQUFtQztZQUNuQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7Z0JBQ2hDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztvQkFDbEIsWUFBWSxHQUFHLElBQUksQ0FBQztvQkFDcEIsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO29CQUN4QixRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUMxQixDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFFSCxPQUFPLFFBQVEsQ0FBQztRQUNsQixDQUFDO1FBRUQsUUFBUSxFQUFFLENBQUMsRUFBVSxFQUFXLEVBQUU7WUFDaEMsTUFBTSxZQUFZLEdBQUcsSUFBQSxZQUFJLEVBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDOUMsSUFBSSxVQUEwQixDQUFDO1lBQy9CLElBQUksZUFBZSxHQUFHLENBQUMsQ0FBQztZQUN4QixJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFFbEIsaURBQWlEO1lBQ2pELE1BQU0sa0JBQWtCLEdBQTJDO2dCQUNqRSxHQUFHLFlBQVk7Z0JBQ2YsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUU7b0JBQ2hCLGVBQWUsRUFBRSxDQUFDO29CQUVsQixnREFBZ0Q7b0JBQ2hELElBQUksZUFBZSxLQUFLLENBQUMsRUFBRSxDQUFDO3dCQUMxQixVQUFVLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRTs0QkFDNUIsU0FBUyxFQUFFLENBQUM7NEJBQ1osdURBQXVEOzRCQUN2RCxnREFBZ0Q7NEJBQ2hELE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQzs0QkFDeEMsSUFBSSxPQUFPLFlBQVksS0FBSyxRQUFRLEVBQUUsQ0FBQztnQ0FDckMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLFlBQVksR0FBRyxTQUFTLEdBQUcsUUFBUSxDQUFNLENBQUMsQ0FBQzs0QkFDaEUsQ0FBQztpQ0FBTSxJQUFJLE9BQU8sWUFBWSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dDQUM1QyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBTSxDQUFDLENBQUM7NEJBQzlDLENBQUM7aUNBQU0sQ0FBQztnQ0FDTixzQ0FBc0M7Z0NBQ3RDLFlBQVksQ0FBQyxJQUFJLENBQUM7b0NBQ2hCLEdBQUksWUFBdUI7b0NBQzNCLEtBQUssRUFBRSxTQUFTO2lDQUNaLENBQUMsQ0FBQzs0QkFDVixDQUFDO3dCQUNILENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDVCxDQUFDO29CQUVELE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQy9DLE9BQU8sR0FBRyxFQUFFO3dCQUNWLGVBQWUsRUFBRSxDQUFDO3dCQUNsQixJQUFJLGVBQWUsS0FBSyxDQUFDLElBQUksVUFBVSxFQUFFLENBQUM7NEJBQ3hDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQzt3QkFDNUIsQ0FBQzt3QkFDRCxXQUFXLEVBQUUsQ0FBQztvQkFDaEIsQ0FBQyxDQUFDO2dCQUNKLENBQUM7YUFDRixDQUFDO1lBRUYsT0FBTyxrQkFBa0IsQ0FBQztRQUM1QixDQUFDO1FBRUQsc0NBQXNDO1FBQ3RDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFO1FBQzdCLE1BQU0sRUFBRSxHQUFHLEVBQUU7WUFDWCwrQ0FBK0M7WUFDL0MsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN0QyxDQUFDO0tBQ0YsQ0FBQztJQUVGLE9BQU8sWUFBWSxDQUFDO0FBQ3RCLENBQUMsQ0FBQztBQTNHVyxRQUFBLElBQUksUUEyR2Y7QUFFRjs7R0FFRztBQUNJLE1BQU0sV0FBVyxHQUFHLEdBRXpCLEVBQUU7SUFDRixNQUFNLFVBQVUsR0FBRyxJQUFBLFlBQUksRUFBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUVwQyxzREFBc0Q7SUFDdEQsTUFBTSxpQkFBaUIsR0FBRztRQUN4QixHQUFHLFVBQVU7UUFDYixHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtRQUNyQixNQUFNLEVBQUUsR0FBRyxFQUFFO1lBQ1gsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUM5QixDQUFDO0tBQ0YsQ0FBQztJQUVGLE9BQU8saUJBQWlCLENBQUM7QUFDM0IsQ0FBQyxDQUFDO0FBZlcsUUFBQSxXQUFXLGVBZXRCO0FBRUY7O0dBRUc7QUFDSSxNQUFNLEtBQUssR0FBRyxDQUFJLEVBQVUsRUFBRSxLQUFRLEVBQVcsRUFBRTtJQUN4RCxPQUFPLElBQUEsWUFBSSxFQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMvQixDQUFDLENBQUM7QUFGVyxRQUFBLEtBQUssU0FFaEI7QUFFRjs7R0FFRztBQUNJLE1BQU0sT0FBTyxHQUFHLENBQUksRUFBVSxFQUFFLE1BQWlCLEVBQW1CLEVBQUU7SUFDM0UsTUFBTSxVQUFVLEdBQUcsSUFBQSxZQUFJLEVBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDeEMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3BELE9BQU8sVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNoQyxDQUFDLENBQUM7QUFKVyxRQUFBLE9BQU8sV0FJbEI7QUFFRjs7R0FFRztBQUNJLE1BQU0sUUFBUSxHQUFHLENBQUksRUFBVSxFQUFFLEtBQVEsRUFBVyxFQUFFO0lBQzNELE1BQU0sWUFBWSxHQUFHLElBQUEsWUFBSSxFQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLElBQUksVUFBMEIsQ0FBQztJQUMvQixJQUFJLGVBQWUsR0FBRyxDQUFDLENBQUM7SUFDeEIsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBRWxCLGlEQUFpRDtJQUNqRCxNQUFNLGtCQUFrQixHQUEyQztRQUNqRSxHQUFHLFlBQVk7UUFDZixTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRTtZQUNoQixlQUFlLEVBQUUsQ0FBQztZQUVsQixnREFBZ0Q7WUFDaEQsSUFBSSxlQUFlLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQzFCLFVBQVUsR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFO29CQUM1QixTQUFTLEVBQUUsQ0FBQztvQkFDWix1REFBdUQ7b0JBQ3ZELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7d0JBQzlCLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsU0FBUyxHQUFHLFFBQVEsQ0FBTSxDQUFDLENBQUM7b0JBQ3pELENBQUM7eUJBQU0sSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQzt3QkFDckMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQU0sQ0FBQyxDQUFDO29CQUN2QyxDQUFDO3lCQUFNLENBQUM7d0JBQ04sc0NBQXNDO3dCQUN0QyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBSSxLQUFnQixFQUFFLEtBQUssRUFBRSxTQUFTLEVBQU8sQ0FBQyxDQUFDO29CQUNyRSxDQUFDO2dCQUNILENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNULENBQUM7WUFFRCxNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQy9DLE9BQU8sR0FBRyxFQUFFO2dCQUNWLGVBQWUsRUFBRSxDQUFDO2dCQUNsQixJQUFJLGVBQWUsS0FBSyxDQUFDLElBQUksVUFBVSxFQUFFLENBQUM7b0JBQ3hDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDNUIsQ0FBQztnQkFDRCxXQUFXLEVBQUUsQ0FBQztZQUNoQixDQUFDLENBQUM7UUFDSixDQUFDO0tBQ0YsQ0FBQztJQUVGLE9BQU8sa0JBQWtCLENBQUM7QUFDNUIsQ0FBQyxDQUFDO0FBeENXLFFBQUEsUUFBUSxZQXdDbkI7QUFFRjs7R0FFRztBQUNJLE1BQU0sUUFBUSxHQUFHLENBQUksRUFBVSxFQUFFLE1BQWlCLEVBQVcsRUFBRTtJQUNwRSxNQUFNLFNBQVMsR0FBRyxJQUFBLFlBQUksRUFBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUN2QyxJQUFJLFNBQXlCLENBQUM7SUFFOUIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO1FBQzVCLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN4QixTQUFTLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUMxQixTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNCLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNULENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyxDQUFDO0FBWlcsUUFBQSxRQUFRLFlBWW5CO0FBRUY7O0dBRUc7QUFDSSxNQUFNLFFBQVEsR0FBRyxDQUFJLEVBQVUsRUFBRSxNQUFpQixFQUFXLEVBQUU7SUFDcEUsTUFBTSxTQUFTLEdBQUcsSUFBQSxZQUFJLEVBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDdkMsSUFBSSxhQUFhLEdBQUcsQ0FBQyxDQUFDO0lBRXRCLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtRQUM1QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxHQUFHLEdBQUcsYUFBYSxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQzlCLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDekIsYUFBYSxHQUFHLEdBQUcsQ0FBQztRQUN0QixDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDLENBQUM7QUFiVyxRQUFBLFFBQVEsWUFhbkIifQ==