@fsmoothy/core
Version:
FSMoothy is a feature-rich and easy-to-use finite state machine for TypeScript.
3 lines (2 loc) • 18.3 kB
JavaScript
function t(){try{var n=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(n){}return(t=function(){return!!n})()}function n(t){var n=function(t,n){if("object"!=typeof t||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var r=e.call(t,"string");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==typeof n?n:n+""}function e(t,e){for(var r=0;r<e.length;r++){var i=e[r];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,n(i.key),i)}}function r(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),Object.defineProperty(t,"prototype",{writable:!1}),t}function i(){return i=Object.assign?Object.assign.bind():function(t){for(var n=1;n<arguments.length;n++){var e=arguments[n];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])}return t},i.apply(this,arguments)}function o(t,n){t.prototype=Object.create(n.prototype),t.prototype.constructor=t,a(t,n)}function u(t){return u=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},u(t)}function a(t,n){return a=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,n){return t.__proto__=n,t},a(t,n)}function l(n){var e="function"==typeof Map?new Map:void 0;return l=function(n){if(null===n||!function(t){try{return-1!==Function.toString.call(t).indexOf("[native code]")}catch(n){return"function"==typeof t}}(n))return n;if("function"!=typeof n)throw new TypeError("Super expression must either be null or a function");if(void 0!==e){if(e.has(n))return e.get(n);e.set(n,r)}function r(){return function(n,e,r){if(t())return Reflect.construct.apply(null,arguments);var i=[null];i.push.apply(i,e);var o=new(n.bind.apply(n,i));return r&&a(o,r.prototype),o}(n,arguments,u(this).constructor)}return r.prototype=Object.create(n.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),a(r,n)},l(n)}function c(t,n){(null==n||n>t.length)&&(n=t.length);for(var e=0,r=new Array(n);e<n;e++)r[e]=t[e];return r}function s(t,n){var e="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(e)return(e=e.call(t)).next.bind(e);if(Array.isArray(t)||(e=function(t,n){if(t){if("string"==typeof t)return c(t,n);var e=Object.prototype.toString.call(t).slice(8,-1);return"Object"===e&&t.constructor&&(e=t.constructor.name),"Map"===e||"Set"===e?Array.from(t):"Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?c(t,n):void 0}}(t))||n&&t&&"number"==typeof t.length){e&&(t=e);var r=0;return function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var f=0;function v(t){return"__private_"+f+++"_"+t}function h(t,n){if(!Object.prototype.hasOwnProperty.call(t,n))throw new TypeError("attempted to use private field on non-instance");return t}var d=/*#__PURE__*/function(t){function n(n,e,r,i){var o;return(o=t.call(this,"Event "+String(r)+" is not allowed in state "+String(e)+" of "+n)||this).name="StateMachineTransitionError",o.cause=i,o}return o(n,t),n}(/*#__PURE__*/l(Error)),p=function(t){return t instanceof d},y=Symbol("All"),b=Symbol("InitialEvent");function m(t){return t.charAt(0).toUpperCase()+t.slice(1)}var g=new Set([y,b]);function P(t){return{from:t,event:b,to:t,_original:{from:t,event:b,to:t}}}function w(t){var n=this;"string"==typeof t&&(this["is"+m(t)]=function(){return n.is(t)})}function x(t){for(var n,e,r=new Map,i=null!=(n=null==t.states?void 0:t.states(t))?n:{},o=s(null!=(u=t.transitions)?u:[]);!(e=o()).done;){var u,a=e.value,l=a.from,c=a.to;if(Array.isArray(l))for(var f,v=s(l);!(f=v()).done;)r.set(f.value,null);else r.set(l,null);r.set(c,null)}for(var h=0,d=Object.entries(i);h<d.length;h++){var p=d[h],y=p[0],b=p[1];b&&(b._parent=this,r.set(y,b))}return r}function j(t){var n=this;return void 0===t&&(t=[]),t.reduce(function(t,e){var r=e.from,i=e.event,o=Array.isArray(r)?r:[r];t.has(i)||t.set(i,new Map);for(var u,a=t.get(i),l=s(o);!(u=l()).done;){var c,f=u.value;null!=a&&a.has(f)||null==a||a.set(f,[]),null==a||null==(c=a.get(f))||c.push(n.bindToCallbacks(e))}return t},new Map)}function O(t){var n=new Map;if(!t)return n;if(y in t)for(var e,r=s(t[y]);!(e=r()).done;){var i,o=e.value;n.set(y,new Map),null==(i=n.get(y))||i.set(o,o.bind(this))}for(var u=0,a=Object.entries(t);u<a.length;u++){var l=a[u],c=l[0],f=l[1];n.has(c)||n.set(c,new Map);for(var v,h=s(f);!(v=h()).done;){var d,p=v.value;null==(d=n.get(c))||d.set(p,p.bind(this))}}return n}function _(t){for(var n,e,r,i=this.nested.flatMap(function(t){return"parallel"===t.type?t.machines.flatMap(function(t){return t.events}):t.events}),o=new Set([].concat(null!=(n=null==(e=t.transitions)?void 0:e.map(function(t){return t.event}))?n:[],i)),u=s(o);!(r=u()).done;){var a=r.value;g.has(a)||S.call(this,a)}}function E(t){for(var n,e,r,i,o,u=this.nested.flatMap(function(t){return"parallel"===t.type?t.machines.flatMap(function(t){return t.states}):t.states}),a=new Set([].concat(null!=(n=null==(e=t.transitions)?void 0:e.map(function(t){return t.from}))?n:[],null!=(r=null==(i=t.transitions)?void 0:i.map(function(t){return t.to}))?r:[],u)),l=s(a);!(o=l()).done;){var c=o.value;g.has(c)||w.call(this,c)}}function S(t){var n=this;if("string"==typeof t){var e=m(t);this[t]=function(){try{return Promise.resolve(n.transition.apply(n,[t].concat([].slice.call(arguments)))).then(function(){})}catch(t){return Promise.reject(t)}},this["can"+e]=function(){return n.can.apply(n,[t].concat([].slice.call(arguments)))}}}var k=["onExit","onEnter","onLeave","guard"],T=function(t,n,e,r){if(void 0===r&&(r={}),"function"==typeof r)return{from:t,event:n,to:e,guard:r};var o=r.onExit,u=r.onEnter,a=r.onLeave,l=r.guard;return i({},function(t,n){if(null==t)return{};var e,r,i={},o=Object.keys(t);for(r=0;r<o.length;r++)n.indexOf(e=o[r])>=0||(i[e]=t[e]);return i}(r,k),{from:t,event:n,to:e,onLeave:a,onExit:o,onEnter:u,guard:l})},A="undefined"!=typeof Symbol?Symbol.iterator||(Symbol.iterator=Symbol("Symbol.iterator")):"@@iterator";function M(t,n,e){if(!t.s){if(e instanceof L){if(!e.s)return void(e.o=M.bind(null,t,n));1&n&&(n=e.s),e=e.v}if(e&&e.then)return void e.then(M.bind(null,t,n),M.bind(null,t,2));t.s=n,t.v=e;var r=t.o;r&&r(t)}}var L=/*#__PURE__*/function(){function t(){}return t.prototype.then=function(n,e){var r=new t,i=this.s;if(i){var o=1&i?n:e;if(o){try{M(r,1,o(this.v))}catch(t){M(r,2,t)}return r}return this}return this.o=function(t){try{var i=t.v;1&t.s?M(r,1,n?n(i):i):e?M(r,1,e(i)):M(r,2,i)}catch(t){M(r,2,t)}},r},t}();function C(t){return t instanceof L&&1&t.s}var B=/*#__PURE__*/v("last");function N(t,n,e){if("function"==typeof t[A]){var r,i,o,u=t[A]();if(function t(a){try{for(;!((r=u.next()).done||e&&e());)if((a=n(r.value))&&a.then){if(!C(a))return void a.then(t,o||(o=M.bind(null,i=new L,2)));a=a.v}i?M(i,1,a):i=a}catch(t){M(i||(i=new L),2,t)}}(),u.return){var a=function(t){try{r.done||u.return()}catch(t){}return t};if(i&&i.then)return i.then(a,function(t){throw a(t)});a()}return i}if(!("length"in t))throw new TypeError("Object is not iterable");for(var l=[],c=0;c<t.length;c++)l.push(t[c]);return function(t,n,e){var r,i,o=-1;return function u(a){try{for(;++o<t.length&&(!e||!e());)if((a=n(o))&&a.then){if(!C(a))return void a.then(u,i||(i=M.bind(null,r=new L,2)));a=a.v}r?M(r,1,a):r=a}catch(t){M(r||(r=new L),2,t)}}(),r}(l,function(t){return n(l[t])},e)}var I=/*#__PURE__*/v("id"),R=/*#__PURE__*/v("contextPromise"),U=/*#__PURE__*/v("boundTo"),$=/*#__PURE__*/v("dataPromise"),F=/*#__PURE__*/v("activeChild"),G=/*#__PURE__*/v("activeParallelState"),q=/*#__PURE__*/v("states"),z=/*#__PURE__*/v("transitions"),D=/*#__PURE__*/v("subscribers"),H=/*#__PURE__*/v("initialParameters"),J=/*#__PURE__*/function(){function t(t){var n;this._context={},Object.defineProperty(this,B,{writable:!0,value:void 0}),Object.defineProperty(this,I,{writable:!0,value:void 0}),Object.defineProperty(this,R,{writable:!0,value:null}),Object.defineProperty(this,U,{writable:!0,value:this}),Object.defineProperty(this,$,{writable:!0,value:null}),Object.defineProperty(this,F,{writable:!0,value:null}),Object.defineProperty(this,G,{writable:!0,value:null}),Object.defineProperty(this,q,{writable:!0,value:void 0}),Object.defineProperty(this,z,{writable:!0,value:void 0}),Object.defineProperty(this,D,{writable:!0,value:new Map}),Object.defineProperty(this,H,{writable:!0,value:void 0}),h(this,H)[H]=t,h(this,I)[I]=null!=(n=t.id)?n:"fsm",h(this,B)[B]=P(t.initial),h(this,q)[q]=x.call(this,t),h(this,z)[z]=j.call(this,t.transitions),h(this,D)[D]=O.call(this,t.subscribers),_.call(this,t),E.call(this,t),this.populateContext(t)}var n=t.prototype;return n.addTransition=function(t,n,e,r){var i,o=T(t,n,e,r),u=new Set(Array.isArray(t)?[].concat(t):[t]);S.call(this,n);for(var a,l=null!=(i=h(this,z)[z].get(n))?i:new Map,c=s(u);!(a=c()).done;){var f,v=a.value;h(this,q)[q].set(v,null),w.call(this,v),null!=l&&l.has(v)||null==l||l.set(v,[]),null==l||null==(f=l.get(v))||f.push(this.bindToCallbacks(o))}return h(this,z)[z].set(n,l),this},n.addNestedMachine=function(t,n){if(h(this,q)[q].set(t,n),"parallel"===n.type)return this;n._parent=this;for(var e,r=s(n.events);!(e=r()).done;)S.call(this,e.value);for(var i,o=s(n.states);!(i=o()).done;)w.call(this,i.value);return this},n.removeState=function(t){return this.current===t&&(h(this,F)[F]=null,h(this,G)[G]=null),h(this,q)[q].delete(t),this},n.is=function(t){var n;return!(null==(n=h(this,F)[F])||!n.is(t))||this.current===t},n.can=function(t){try{var n,e=this,r=[].slice.call(arguments,1);return Promise.resolve(null==(n=h(e,F)[F])?void 0:n.can.apply(n,[t].concat(r))).then(function(n){var i;function o(t){var n,o;if(i)return t;if(null==u||!u.has(e.current))return!1;var a=N(null!=(n=u.get(e.current))?n:[],function(t){var n,i=t.guard;return Promise.resolve(null==(n=null==i?void 0:i.apply(void 0,[e._context].concat(r)))||n).then(function(t){if(t)return o=!0})},function(){return o});return a&&a.then?a.then(function(t){return!!o&&t}):!!o&&a}if(n)return!0;var u=h(e,z)[z].get(t),a=function(){var t;if(null!=u&&u.has(y))return N(null!=(t=u.get(y))?t:[],function(t){var n;return Promise.resolve(null==(n=null==t.guard?void 0:t.guard.apply(t,[e._context].concat(r)))||n).then(function(t){if(t)return i=!0})},function(){return i})}();return a&&a.then?a.then(o):o(a)})}catch(t){return Promise.reject(t)}},n.on=function(t,n){if("function"==typeof t)return this.on(y,t);var e=t;h(this,D)[D].has(e)||h(this,D)[D].set(e,new Map);var r=h(this,D)[D].get(e);return n&&(null==r||r.set(n,n.bind(h(this,U)[U]))),this},n.off=function(t,n){if("function"==typeof t)return this.off(y,t);var e=t;if(h(this,D)[D].has(e)){var r=h(this,D)[D].get(e);return null==r||r.delete(n),this}},n.transition=function(t){try{var n=this,e=[].slice.call(arguments,1);return Promise.resolve(n.makeNestedTransition.apply(n,[t].concat(e))).then(function(r){return r?n:Promise.resolve(n.can.apply(n,[t].concat(e))).then(function(r){if(!r)throw new d(h(n,I)[I],n.current,t);return Promise.resolve(n.getAllowedTransition.apply(n,[t].concat(e))).then(function(t){function r(){function r(){return Promise.resolve(n.executeTransition.apply(n,[t].concat(e))).then(function(){return n})}var i=function(){if(h(n,$)[$])return Promise.resolve(h(n,$)[$]).then(function(t){n._context.data=t,h(n,$)[$]=null})}();return i&&i.then?i.then(r):r()}var i=function(){if(h(n,R)[R]){var t=function(){h(n,R)[R]=null};return Promise.resolve(h(n,R)[R]).then(function(e){var r=N(Object.entries(e),function(t){n._context[t[0]]=t[1]});return r&&r.then?r.then(t):t()})}}();return i&&i.then?i.then(r):r()})})})}catch(t){return Promise.reject(t)}},n.tryTransition=function(t){try{var n=this,e=arguments;return Promise.resolve(function(r,i){try{var o=Promise.resolve(n.transition.apply(n,[t].concat([].slice.call(e,1)))).then(function(){return!0})}catch(t){return i(t)}return o&&o.then?o.then(void 0,i):o}(0,function(t){if(p(t))return!1;throw t}))}catch(t){return Promise.reject(t)}},n.removeTransition=function(t,n,e){var r,i,o=null==(r=h(this,z)[z].get(n))?void 0:r.get(t);if(!o)return this;var u=o.filter(function(t){return t.to!==e});return null==(i=h(this,z)[z].get(n))||i.set(t,u),this},n.bind=function(t){for(var n,e=s(h(this,D)[D].values());!(n=e()).done;)for(var r,i=n.value,o=s(i.keys());!(r=o()).done;){var u=r.value;i.set(u,u.bind(t))}for(var a,l=s(h(this,z)[z].values());!(a=l()).done;)for(var c,f=s(a.value.values());!(c=f()).done;)for(var v,d=s(c.value);!(v=d()).done;){var p,y,b,m,g=v.value;g.onEnter=null==(p=g._original.onEnter)?void 0:p.bind(t),g.onExit=null==(y=g._original.onExit)?void 0:y.bind(t),g.onLeave=null==(b=g._original.onLeave)?void 0:b.bind(t),g.guard=null==(m=g._original.guard)?void 0:m.bind(t)}return h(this,U)[U]=t,this},n.inject=function(t,n){return this._context[t]=n,this},n.injectAsync=function(t,n){var e,r=n(this);return r instanceof Promise?(null!=(e=h(this,R))[R]||(e[R]=Promise.resolve({})),h(this,R)[R].then(function(n){return r.then(function(e){return n[t]=e,n})})):this._context[t]=r,this},n.dehydrate=function(){var t={current:this.current,data:this._context.data};return h(this,F)[F]&&(t.nested=h(this,F)[F].dehydrate()),t},n.hydrate=function(t){return h(this,B)[B]=P(t.current),this._context.data=t.data,h(this,F)[F]&&t.nested&&h(this,F)[F].hydrate(t.nested),this},n.inspect=function(){for(var t,n=[],e=s(h(this,z)[z].entries());!(t=e()).done;)for(var r,i=t.value,o=i[0],u=s(i[1].entries());!(r=u()).done;)for(var a,l=r.value,c=l[0],f=s(l[1]);!(a=f()).done;){var v=a.value,d={from:c,event:o,to:v.to,hasGuard:Boolean(v.guard),hasOnEnter:Boolean(v.onEnter),hasOnExit:Boolean(v.onExit),hasOnLeave:Boolean(v.onLeave)};n.push(d)}return{currentState:this.current.toString(),transitions:n,id:h(this,I)[I],states:this.states,data:this._context.data}},n.populateContext=function(t){var n,e=this;h(this,R)[R]=Promise.resolve({});for(var r=function(){var t=o[i],n=t[0],r=t[1],u="function"==typeof r?r(e):r;u instanceof Promise?h(e,R)[R]=h(e,R)[R].then(function(t){return u.then(function(e){return t[n]=e,t})}):e._context[n]=u},i=0,o=Object.entries(null!=(u=t.inject)?u:{});i<o.length;i++){var u;r()}var a=null!=(n=null==t.data?void 0:t.data(t))?n:{};a instanceof Promise?(h(this,$)[$]=a,this._context.data={}):this._context.data=a},n.makeNestedTransition=function(t){try{var n,e,r=this,i=[].slice.call(arguments,1),o=!1;if(!h(r,F)[F]&&!h(r,G)[G])return Promise.resolve(o);var u=N(null!=(n=null==(e=h(r,G)[G])?void 0:e.machines)?n:[h(r,F)[F]],function(n){!function(){if(n&&_child$can){var e=n;h(r,F)[F]=e,Promise.resolve(null==n?void 0:n.transition.apply(n,[t].concat(i))).then(function(){o=!0})}}()});return Promise.resolve(u&&u.then?u.then(function(){return o}):o)}catch(t){return Promise.reject(t)}},n.getAllowedTransition=function(t){try{var n,e=function(t){var e;if(n)return t;var u=o.get(y),a=function(){if(u)return N(u,function(t){var n;return Promise.resolve(null==(n=null==t.guard?void 0:t.guard.apply(t,[r._context].concat(i)))||n).then(function(n){if(n)return e=1,t})},function(){return e})}();return a&&a.then?a.then(function(t){return e?t:null}):e?a:null},r=this,i=[].slice.call(arguments,1),o=h(r,z)[z].get(t);if(!o)return Promise.resolve(null);var u=o.get(r.current),a=function(){if(u)return N(u,function(t){var e,o=t.guard;return Promise.resolve(null==(e=null==o?void 0:o.apply(void 0,[r._context].concat(i)))||e).then(function(e){if(e)return n=1,t})},function(){return n})}();return Promise.resolve(a&&a.then?a.then(e):e(a))}catch(t){return Promise.reject(t)}},n.bindToCallbacks=function(t){var n,e,r,o;return i({},t,{onLeave:null==(n=t.onLeave)?void 0:n.bind(h(this,U)[U]),onEnter:null==(e=t.onEnter)?void 0:e.bind(h(this,U)[U]),onExit:null==(r=t.onExit)?void 0:r.bind(h(this,U)[U]),guard:null==(o=t.guard)?void 0:o.bind(h(this,U)[U]),_original:t})},n.switchNestedState=function(t){var n=h(this,q)[q].get(t.to);if(!n)return h(this,F)[F]=null,void(h(this,G)[G]=null);if("parallel"===n.type)return h(this,G)[G]=n,void(n=n.machines[0]);switch(n.history){case"none":h(this,F)[F]=new n.constructor(h(n,H)[H],this);break;case"deep":h(this,F)[F]=n}},n.makeTransition=function(t){h(this,B)[B]=null!=t?t:h(this,B)[B]},n.executeTransition=function(t){try{var n,e,r=this,i=[].slice.call(arguments,1),o=null!=t?t:{},u=o.onEnter,a=o.onExit,l=o.event,c=h(r,D)[D].get(l),s=h(r,D)[D].get(y);return Promise.resolve(null==(n=(e=h(r,B)[B]).onLeave)?void 0:n.call.apply(n,[e,r.context].concat(i))).then(function(){return Promise.resolve(null==u?void 0:u.apply(void 0,[r.context].concat(i))).then(function(){var n;function e(){var t;function n(){return Promise.resolve(null==a?void 0:a.apply(void 0,[r.context].concat(i))).then(function(){})}var e=N(null!=(t=null==s?void 0:s.values())?t:[],function(t){return Promise.resolve(t.apply(void 0,[r.context].concat(i))).then(function(){})});return e&&e.then?e.then(n):n()}r.makeTransition(t),r.switchNestedState(t);var o=N(null!=(n=null==c?void 0:c.values())?n:[],function(t){return Promise.resolve(t.apply(void 0,[r.context].concat(i))).then(function(){})});return o&&o.then?o.then(e):e()})})}catch(t){return Promise.reject(t)}},r(t,[{key:"context",get:function(){return this._context}},{key:"current",get:function(){return h(this,B)[B].to}},{key:"data",get:function(){return this._context.data}},{key:"child",get:function(){return h(this,F)[F]}},{key:"events",get:function(){return Array.from(h(this,z)[z].keys())}},{key:"states",get:function(){return Array.from(h(this,q)[q].keys())}},{key:"nested",get:function(){return Array.from(h(this,q)[q].values()).filter(function(t){return null!==t})}}])}(),K=J,Q=/*#__PURE__*/function(t){function n(n,e){var r,i;return void 0===e&&(e=null),(i=t.call(this,n)||this)._parent=void 0,i.type="nested",i.history=void 0,i._parent=e,i.history=null!=(r=n.history)?r:"deep",i}return o(n,t),r(n,[{key:"context",get:function(){var t;return i({},null==(t=this._parent)?void 0:t.context,this._context)}}])}(J);function V(t){return new Q(t)}function W(){return{type:"parallel",machines:[].slice.call(arguments)}}export{y as All,K as StateMachine,p as isStateMachineTransitionError,V as nested,W as parallel,T as t};
//# sourceMappingURL=index.esm.mjs.map