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