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.

161 lines 10.9 kB
"use strict"; /** * State Machine Algebra - State management with algebraic operations * XState replacement with category-theoretic foundations */ Object.defineProperty(exports, "__esModule", { value: true }); exports.combine = exports.lens = exports.fsm = exports.machine = exports.state = void 0; const effect_1 = require("../core/effect"); /** * Creates a State effect with state management operations */ const state = (initialState, initialValue) => { let currentState = initialState; const baseEffect = (0, effect_1.effect)(initialValue); const stateInstance = { value: baseEffect.value, map: baseEffect.map, subscribe: baseEffect.subscribe, bind: baseEffect.bind, chain: baseEffect.chain, get: () => { return (0, exports.state)(currentState, currentState); }, put: (newState) => { const putState = (0, exports.state)(newState, undefined); currentState = newState; return putState; }, modify: (f) => { const newState = f(currentState); return stateInstance.put(newState); }, _setState: (s) => { currentState = s; }, _set: (value) => { currentState = value; }, _setValue: baseEffect._set, }; return stateInstance; }; exports.state = state; /** * Creates a state machine with reducer-like transitions */ const machine = (initialState, reducer) => { let currentState = initialState; const subscribers = new Set(); const notify = () => { subscribers.forEach((fn) => fn(currentState)); }; return { get state() { return currentState; }, send: (action) => { const newState = reducer(currentState, action); if (newState !== currentState) { currentState = newState; notify(); } }, subscribe: (fn) => { subscribers.add(fn); return () => subscribers.delete(fn); }, // Compatibility methods for factories getState: () => currentState, dispatch: (action) => { const newState = reducer(currentState, action); if (newState !== currentState) { currentState = newState; notify(); } }, }; }; exports.machine = machine; /** * Creates a finite state machine with explicit transitions */ const fsm = (initialState, transitions) => { let currentState = initialState; const subscribers = new Set(); const notify = () => { subscribers.forEach((fn) => fn(currentState)); }; const getTransition = (action) => { return transitions.find((t) => t.from === currentState && t.on === action && (!t.guard || t.guard())); }; return { get current() { return currentState; }, send: (action) => { const transition = getTransition(action); if (transition) { currentState = transition.to; notify(); } }, can: (action) => { return getTransition(action) !== undefined; }, subscribe: (fn) => { subscribers.add(fn); return () => subscribers.delete(fn); }, }; }; exports.fsm = fsm; /** * Natural transformation: State → Signal (lens view) * Simplified implementation that maps over the value */ const lens = (f) => (stateEffect) => { // For now, just cast the result - this is a simplified implementation return stateEffect.map(f); }; exports.lens = lens; /** * Combines multiple state machines */ const combine = (machine1, machine2) => { const subscribers = new Set(); const notify = () => { subscribers.forEach((fn) => fn({ m1: machine1.state, m2: machine2.state })); }; machine1.subscribe(notify); machine2.subscribe(notify); return { get state() { return { m1: machine1.state, m2: machine2.state }; }, send: (action) => { if (action.type === 'm1') { machine1.send(action.action); } else { machine2.send(action.action); } }, subscribe: (fn) => { subscribers.add(fn); return () => subscribers.delete(fn); }, // Compatibility methods for factories getState: () => ({ m1: machine1.state, m2: machine2.state }), dispatch: (action) => { if (action.type === 'm1') { machine1.send(action.action); } else { machine2.send(action.action); } }, }; }; exports.combine = combine; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYWxnZWJyYXMvc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7R0FHRzs7O0FBRUgsMkNBQWdEO0FBUWhEOztHQUVHO0FBQ0ksTUFBTSxLQUFLLEdBQUcsQ0FDbkIsWUFBZSxFQUNmLFlBQWUsRUFDeUQsRUFBRTtJQUMxRSxJQUFJLFlBQVksR0FBRyxZQUFZLENBQUM7SUFDaEMsTUFBTSxVQUFVLEdBQUcsSUFBQSxlQUFNLEVBQUMsWUFBWSxDQUFDLENBQUM7SUFFeEMsTUFBTSxhQUFhLEdBR2Y7UUFDRixLQUFLLEVBQUUsVUFBVSxDQUFDLEtBQUs7UUFDdkIsR0FBRyxFQUFFLFVBQVUsQ0FBQyxHQUFHO1FBQ25CLFNBQVMsRUFBRSxVQUFVLENBQUMsU0FBUztRQUMvQixJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUk7UUFDckIsS0FBSyxFQUFFLFVBQVUsQ0FBQyxLQUFLO1FBRXZCLEdBQUcsRUFBRSxHQUFnQixFQUFFO1lBQ3JCLE9BQU8sSUFBQSxhQUFLLEVBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzNDLENBQUM7UUFFRCxHQUFHLEVBQUUsQ0FBQyxRQUFXLEVBQWtCLEVBQUU7WUFDbkMsTUFBTSxRQUFRLEdBQUcsSUFBQSxhQUFLLEVBQUMsUUFBUSxFQUFFLFNBQWlCLENBQUMsQ0FBQztZQUNwRCxZQUFZLEdBQUcsUUFBUSxDQUFDO1lBQ3hCLE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUM7UUFFRCxNQUFNLEVBQUUsQ0FBQyxDQUFjLEVBQWtCLEVBQUU7WUFDekMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ2pDLE9BQU8sYUFBYSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNyQyxDQUFDO1FBRUQsU0FBUyxFQUFFLENBQUMsQ0FBSSxFQUFFLEVBQUU7WUFDbEIsWUFBWSxHQUFHLENB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