@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,u(t,n)}function a(t){return a=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},a(t)}function u(t,n){return u=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,n){return t.__proto__=n,t},u(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&&u(o,r.prototype),o}(n,arguments,a(this).constructor)}return r.prototype=Object.create(n.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),u(r,n)},l(n)}function s(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 c(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 s(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)?s(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=c(null!=(a=t.transitions)?a:[]);!(e=o()).done;){var a,u=e.value,l=u.from,s=u.to;if(Array.isArray(l))for(var f,v=c(l);!(f=v()).done;)r.set(f.value,null);else r.set(l,null);r.set(s,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 a,u=t.get(i),l=c(o);!(a=l()).done;){var s,f=a.value;null!=u&&u.has(f)||null==u||u.set(f,[]),null==u||null==(s=u.get(f))||s.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=c(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 a=0,u=Object.entries(t);a<u.length;a++){var l=u[a],s=l[0],f=l[1];n.has(s)||n.set(s,new Map);for(var v,h=c(f);!(v=h()).done;){var d,p=v.value;null==(d=n.get(s))||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)),a=c(o);!(r=a()).done;){var u=r.value;g.has(u)||E.call(this,u)}}function S(t){for(var n,e,r,i,o,a=this.nested.flatMap(function(t){return"parallel"===t.type?t.machines.flatMap(function(t){return t.states}):t.states}),u=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:[],a)),l=c(u);!(o=l()).done;){var s=o.value;g.has(s)||w.call(this,s)}}function E(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 T=["onExit","onEnter","onLeave","guard"],k=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,a=r.onEnter,u=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,T),{from:t,event:n,to:e,onLeave:u,onExit:o,onEnter:a,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,a=t[A]();if(function t(u){try{for(;!((r=a.next()).done||e&&e());)if((u=n(r.value))&&u.then){if(!C(u))return void u.then(t,o||(o=M.bind(null,i=new L,2)));u=u.v}i?M(i,1,u):i=u}catch(t){M(i||(i=new L),2,t)}}(),a.return){var u=function(t){try{r.done||a.return()}catch(t){}return t};if(i&&i.then)return i.then(u,function(t){throw u(t)});u()}return i}if(!("length"in t))throw new TypeError("Object is not iterable");for(var l=[],s=0;s<t.length;s++)l.push(t[s]);return function(t,n,e){var r,i,o=-1;return function a(u){try{for(;++o<t.length&&(!e||!e());)if((u=n(o))&&u.then){if(!C(u))return void u.then(a,i||(i=M.bind(null,r=new L,2)));u=u.v}r?M(r,1,u):r=u}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),S.call(this,t),this.populateContext(t)}var n=t.prototype;return n.addTransition=function(t,n,e,r){var i,o=k(t,n,e,r),a=new Set(Array.isArray(t)?[].concat(t):[t]);E.call(this,n);for(var u,l=null!=(i=h(this,z)[z].get(n))?i:new Map,s=c(a);!(u=s()).done;){var f,v=u.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=c(n.events);!(e=r()).done;)E.call(this,e.value);for(var i,o=c(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==a||!a.has(e.current))return!1;var u=N(null!=(n=a.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 u&&u.then?u.then(function(t){return!!o&&t}):!!o&&u}if(n)return!0;var a=h(e,z)[z].get(t),u=function(){var t;if(null!=a&&a.has(y))return N(null!=(t=a.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 u&&u.then?u.then(o):o(u)})}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 a=o.filter(function(t){return t.to!==e});return null==(i=h(this,z)[z].get(n))||i.set(t,a),this},n.bind=function(t){for(var n,e=c(h(this,D)[D].values());!(n=e()).done;)for(var r,i=n.value,o=c(i.keys());!(r=o()).done;){var a=r.value;i.set(a,a.bind(t))}for(var u,l=c(h(this,z)[z].values());!(u=l()).done;)for(var s,f=c(u.value.values());!(s=f()).done;)for(var v,d=c(s.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=c(h(this,z)[z].entries());!(t=e()).done;)for(var r,i=t.value,o=i[0],a=c(i[1].entries());!(r=a()).done;)for(var u,l=r.value,s=l[0],f=c(l[1]);!(u=f()).done;){var v=u.value,d={from:s,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],a="function"==typeof r?r(e):r;a instanceof Promise?h(e,R)[R]=h(e,R)[R].then(function(t){return a.then(function(e){return t[n]=e,t})}):e._context[n]=a},i=0,o=Object.entries(null!=(a=t.inject)?a:{});i<o.length;i++){var a;r()}var u=null!=(n=null==t.data?void 0:t.data(t))?n:{};u instanceof Promise?(h(this,$)[$]=u,this._context.data={}):this._context.data=u},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 a=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(a&&a.then?a.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 a=o.get(y),u=function(){if(a)return N(a,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 u&&u.then?u.then(function(t){return e?t:null}):e?u:null},r=this,i=[].slice.call(arguments,1),o=h(r,z)[z].get(t);if(!o)return Promise.resolve(null);var a=o.get(r.current),u=function(){if(a)return N(a,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(u&&u.then?u.then(e):e(u))}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:{},a=o.onEnter,u=o.onExit,l=o.event,s=h(r,D)[D].get(l),c=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==a?void 0:a.apply(void 0,[r.context].concat(i))).then(function(){var n;function e(){var t;function n(){return Promise.resolve(null==u?void 0:u.apply(void 0,[r.context].concat(i))).then(function(){})}var e=N(null!=(t=null==c?void 0:c.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==s?void 0:s.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);exports.All=y,exports.StateMachine=K,exports.isStateMachineTransitionError=p,exports.nested=function(t){return new Q(t)},exports.parallel=function(){return{type:"parallel",machines:[].slice.call(arguments)}},exports.t=k;
//# sourceMappingURL=index.js.map