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.

153 lines 10.5 kB
/** * State Machine Algebra - State management with algebraic operations * XState replacement with category-theoretic foundations */ import { effect } from '../core/effect'; /** * Creates a State effect with state management operations */ export const state = (initialState, initialValue) => { let currentState = initialState; const baseEffect = effect(initialValue); const stateInstance = { value: baseEffect.value, map: baseEffect.map, subscribe: baseEffect.subscribe, bind: baseEffect.bind, chain: baseEffect.chain, get: () => { return state(currentState, currentState); }, put: (newState) => { const putState = 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; }; /** * Creates a state machine with reducer-like transitions */ export 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(); } }, }; }; /** * Creates a finite state machine with explicit transitions */ export 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); }, }; }; /** * Natural transformation: State → Signal (lens view) * Simplified implementation that maps over the value */ export const lens = (f) => (stateEffect) => { // For now, just cast the result - this is a simplified implementation return stateEffect.map(f); }; /** * Combines multiple state machines */ export 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); } }, }; }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYWxnZWJyYXMvc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxFQUFVLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBUWhEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLENBQ25CLFlBQWUsRUFDZixZQUFlLEVBQ3lELEVBQUU7SUFDMUUsSUFBSSxZQUFZLEdBQUcsWUFBWSxDQUFDO0lBQ2hDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUV4QyxNQUFNLGFBQWEsR0FHZjtRQUNGLEtBQUssRUFBRSxVQUFVLENBQUMsS0FBSztRQUN2QixHQUFHLEVBQUUsVUFBVSxDQUFDLEdBQUc7UUFDbkIsU0FBUyxFQUFFLFVBQVUsQ0FBQyxTQUFTO1FBQy9CLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSTtRQUNyQixLQUFLLEVBQUUsVUFBVSxDQUFDLEtBQUs7UUFFdkIsR0FBRyxFQUFFLEdBQWdCLEVBQUU7WUFDckIsT0FBTyxLQUFLLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzNDLENBQUM7UUFFRCxHQUFHLEVBQUUsQ0FBQyxRQUFXLEVBQWtCLEVBQUU7WUFDbkMsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxTQUFpQixDQUFDLENBQUM7WUFDcEQsWUFBWSxHQUFHLFFBQVEsQ0FBQztZQUN4QixPQUFPLFFBQVEsQ0FBQztRQUNsQixDQUFDO1FBRUQsTUFBTSxFQUFFLENBQUMsQ0FBYyxFQUFrQixFQUFFO1lBQ3pDLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNqQyxPQUFPLGFBQWEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDckMsQ0FBQztRQUVELFNBQVMsRUFBRSxDQUFDLENBQUksRUFBRSxF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