kingly
Version:
State machine library (Extended Hierarchical State Transducer)
3 lines (2 loc) • 42.8 kB
JavaScript
function _typeof(t){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function _defineProperties(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function _createClass(t,e,n){return e&&_defineProperties(t.prototype,e),n&&_defineProperties(t,n),t}function _defineProperty(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function _objectSpread(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(t){return Object.getOwnPropertyDescriptor(n,t).enumerable}))),r.forEach(function(e){_defineProperty(t,e,n[e])})}return t}function _inherits(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&_setPrototypeOf(t,e)}function _getPrototypeOf(t){return(_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}function _setPrototypeOf(t,e){return(_setPrototypeOf=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}function isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],function(){})),!0}catch(t){return!1}}function _construct(t,e,n){return(_construct=isNativeReflectConstruct()?Reflect.construct:function(t,e,n){var r=[null];r.push.apply(r,e);var a=new(Function.bind.apply(t,r));return n&&_setPrototypeOf(a,n.prototype),a}).apply(null,arguments)}function _isNativeFunction(t){return-1!==Function.toString.call(t).indexOf("[native code]")}function _wrapNativeSuper(t){var e="function"==typeof Map?new Map:void 0;return(_wrapNativeSuper=function(t){if(null===t||!_isNativeFunction(t))return t;if("function"!=typeof t)throw new TypeError("Super expression must either be null or a function");if(void 0!==e){if(e.has(t))return e.get(t);e.set(t,n)}function n(){return _construct(t,arguments,_getPrototypeOf(this).constructor)}return n.prototype=Object.create(t.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),_setPrototypeOf(n,t)})(t)}function _objectDestructuringEmpty(t){if(null==t)throw new TypeError("Cannot destructure undefined")}function _assertThisInitialized(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}function _possibleConstructorReturn(t,e){return!e||"object"!=typeof e&&"function"!=typeof e?_assertThisInitialized(t):e}function _slicedToArray(t,e){return _arrayWithHoles(t)||_iterableToArrayLimit(t,e)||_nonIterableRest()}function _arrayWithHoles(t){if(Array.isArray(t))return t}function _iterableToArrayLimit(t,e){var n=[],r=!0,a=!1,i=void 0;try{for(var o,s=t[Symbol.iterator]();!(r=(o=s.next()).done)&&(n.push(o.value),!e||n.length!==e);r=!0);}catch(t){a=!0,i=t}finally{try{r||null==s.return||s.return()}finally{if(a)throw i}}return n}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}var SEP=".",TRANSITION_SYMBOL="--\x3e",TRANSITION_LABEL_START_SYMBOL=":",HISTORY_STATE_NAME="H",HISTORY_PREFIX="history.",INIT_STATE="nok",INIT_EVENT="init",AUTO_EVENT="auto",STATE_PROTOTYPE_NAME="State",NO_STATE_UPDATE=[],NO_OUTPUT=[],ACTION_IDENTITY=function(){return{outputs:NO_OUTPUT,updates:NO_STATE_UPDATE}},SHALLOW="shallow",DEEP="deep",WRONG_EVENT_FORMAT_ERROR="The machine received an event which does not have the proper format. Expecting an object whose unique key is the event name, and value is the event data.",CONTRACTS_EVAL="CONTRACTS_EVAL",OUTPUTS_MSG="OUTPUTS_MSG",INPUT_MSG="INPUT_MSG",WARN_MSG="WARN_MSG",MACHINE_CREATION_ERROR_MSG="MACHINE_CREATION_ERROR_MSG",ERROR_MSG="ERROR_MSG",INTERNAL_INPUT_MSG="INTERNAL_INPUT_MSG",INTERNAL_OUTPUTS_MSG="INTERNAL_OUTPUTS_MSG",DEBUG_MSG="DEBUG_MSG",INIT_INPUT_MSG="INIT_INPUT_MSG";const PATH_ROOT=[0],PRE_ORDER="PRE_ORDER";function clone(t){return void 0===t?void 0:JSON.parse(JSON.stringify(t))}function merge(t,e){return Object.assign({},t,e)}function updatePathInTraversalState(t,e,n){n.forEach((n,r)=>{const a=t.get(e),i=t.get(n),o=i&&i.path;t.set(n,merge(i,{isAdded:!0,isVisited:!1,path:o||a.path.concat(r)}))})}function updateVisitInTraversalState(t,e){t.set(e,merge(t.get(e),{isVisited:!0}))}function visitTree(t,e){const{store:n,lenses:r,traverse:a}=t,{empty:i,add:o,takeAndRemoveOne:s,isEmpty:c}=n,{getChildren:u}=r,{visit:l,seed:f}=a,d=new Map,p="function"==typeof f?new(f()):clone(f);let T="function"==typeof i?new(i()):clone(i),h=p;for(o([e],T),d.set(e,{isAdded:!0,isVisited:!1,path:PATH_ROOT});!c(T);){const t=s(T),e=u(d,t);o(e,T),updatePathInTraversalState(d,t,e),h=l(h,d,t),updateVisitInTraversalState(d,t)}return d.clear(),h}function breadthFirstTraverseTree(t,e,n){const{getChildren:r}=t;return visitTree({store:{empty:[],takeAndRemoveOne:t=>t.shift(),isEmpty:t=>0===t.length,add:(t,e)=>e.push.apply(e,t)},lenses:{getChildren:(t,e)=>r(e)},traverse:e},n)}function preorderTraverseTree(t,e,n){const{getChildren:r}=t;return visitTree({store:{empty:[],takeAndRemoveOne:t=>t.shift(),isEmpty:t=>0===t.length,add:(t,e)=>e.unshift(...t)},lenses:{getChildren:(t,e)=>r(e)},traverse:e},n)}function postOrderTraverseTree(t,e,n){const{getChildren:r}=t,{seed:a,visit:i}=e,o=(t,e)=>e.get(t).isVisited||((t,e)=>0===r(t,e).length)(t,e);return visitTree({store:{empty:[],takeAndRemoveOne:t=>t.shift(),isEmpty:t=>0===t.length,add:(t,e)=>e.unshift(...t)},lenses:{getChildren:(t,e)=>o(e,t)?[]:r(e,t).concat([e])},traverse:{seed:a,visit:(t,e,n)=>o(n,e)?i(t,e,n):t}},n)}function isLeafLabel(t){return 0===objectTreeLenses.getChildren(t).length}const objectTreeLenses={isLeafLabel:isLeafLabel,getLabel:t=>{if("object"!=typeof t||Array.isArray(t)||1!==Object.keys(t).length)throw"getLabel > unexpected object tree value";return t},getChildren:t=>{if("object"!=typeof t||Array.isArray(t)||1!==Object.keys(t).length)throw"getChildren > unexpected value";{let e=Object.values(t)[0];return e&&"object"==typeof e&&!Array.isArray(e)?Object.keys(e).map(t=>({[t]:e[t]})):[]}},constructTree:(t,e)=>{const n=t&&Object.keys(t)&&Object.keys(t)[0];return 0===e.length?t:{[n]:Object.assign.apply(null,e)}}};function traverseObj(t,e){const n={root:e},{strategy:r,seed:a,visit:i}=t;return({BFS:breadthFirstTraverseTree,PRE_ORDER:preorderTraverseTree,POST_ORDER:postOrderTraverseTree}[r]||preorderTraverseTree)(objectTreeLenses,{seed:a,visit:function(t,e,n){const{path:r}=e.get(n);return JSON.stringify(r)===JSON.stringify(PATH_ROOT)?t:i(t,e,n)}},n)}const arrayTreeLenses={getLabel:t=>Array.isArray(t)?t[0]:t,getChildren:t=>Array.isArray(t)?t[1]:[],constructTree:(t,e)=>e&&Array.isArray(e)&&e.length>0?[t,e]:t};var noop=function(){},emptyConsole={log:noop,warn:noop,info:noop,debug:noop,error:noop,trace:noop,group:noop,groupEnd:noop},emptyTracer=noop;function isFunction(t){return"function"==typeof t}function isControlState(t){return t&&"string"==typeof t||isHistoryControlState(t)}function isEvent(t){return void 0===t||"string"==typeof t}function isActionFactory(t){return t&&"function"==typeof t}function get_fn_name(t){return/^[\s\r\n]*function[\s\r\n]*([^\(\s\r\n]*?)[\s\r\n]*\([^\)\s\r\n]*\)[\s\r\n]*\{((?:[^}]*\}?)+)\}\s*$/.exec(t.toString())[1]}function wrap(t){return["-",t,"-"].join("")}function times$1(t,e){return Array.apply(null,{length:e}).map(Number.call,Number).map(t)}function keys(t){return Object.keys(t)}function is_history_transition(t){return t.to.startsWith(HISTORY_PREFIX)}function is_entry_transition(t){return t.event===INIT_EVENT}function is_from_control_state(t){return function(e){return e.from===t}}function is_to_history_control_state_of(t){return function(e){return is_history_control_state_of(t,e.to)}}function is_history_control_state_of(t,e){return e.substring(HISTORY_PREFIX.length)===t}function format_transition_label(t,e,n){var r=t||"";return e&&n?"".concat(r," [").concat(e.name,"] / ").concat(n.name):e?"".concat(r," [").concat(e.name,"]}"):n?"".concat(r," / ").concat(n.name):"".concat(r)}function format_history_transition_state_name(t){var e=t.from,n=t.to;return"".concat(e,".").concat(n.substring(HISTORY_PREFIX.length),".").concat(HISTORY_STATE_NAME)}function get_all_transitions(t){var e=t.from,n=t.event,r=t.guards;return r?r.map(function(t){var r=t.predicate,a=t.to,i=t.action;return{from:e,event:n,predicate:r,to:a,action:i}}):[t]}function getDisplayName(t){return t.replace(/_/g," ")}function getStatesType(t){var e=objectTreeLenses.getLabel,n=objectTreeLenses.isLeafLabel;return traverseObj({strategy:PRE_ORDER,seed:{},visit:function(t,r,a){var i=e(a),o=Object.keys(i)[0];return n(i)?(t[o]=!1,t):(t[o]=!0,t)}},t)}function getStatesPath(t){var e=objectTreeLenses.getLabel;return traverseObj({strategy:PRE_ORDER,seed:{},visit:function(t,n,r){var a=n.get(r).path.join("."),i=e(r);return t[Object.keys(i)[0]]=a,t}},t)}function getStatesTransitionsMap(t){return t.reduce(function(t,e){var n=e.from,r=e.event;return isHistoryControlState(n)?t:(t[n]=t[n]||{},t[n][r]=e,t)},{})||{}}function getStateEventTransitionsMaps(t){return t.reduce(function(t,e){var n=e.from,r=e.event;return isHistoryControlState(n)?t:(t[n]=t[n]||{},t[n][r]=t[n][r]?t[n][r].concat(e):[e],t)},{})||{}}function getEventTransitionsMaps(t){return t.reduce(function(t,e){var n=e.from,r=e.event;return isHistoryControlState(n)?t:(t[r]=t[r]||{},t[r][n]=t[r][n]?t[r][n].concat(e):[e],t)},{})||{}}function getHistoryStatesMap(t){return reduceTransitions(function(t,e,n,r){var a=e.from,i=(e.event,e.to);e.action,e.predicate,e.gen;if(isHistoryControlState(a)){var o=getHistoryUnderlyingState(a);t.set(o,(t.get(o)||[]).concat([e]))}else if(isHistoryControlState(i)){var s=getHistoryUnderlyingState(i);t.set(s,(t.get(s)||[]).concat([e]))}return t},new Map,t)||{}}function getTargetStatesMap(t){return reduceTransitions(function(t,e,n,r){var a=e.to;return t.set(a,(t.get(a)||[]).concat([e])),t},new Map,t)||{}}function getAncestorMap(t){var e=objectTreeLenses.getLabel,n=objectTreeLenses.getChildren;return traverseObj({strategy:PRE_ORDER,seed:{},visit:function(t,r,a){var i=e(a),o=Object.keys(i)[0];return n(a).map(function(t){return Object.keys(e(t))[0]}).forEach(function(e){t[e]=t[e]||[],t[e]=t[e].concat(o)}),t}},t)}function computeHistoryMaps(t){if(0===Object.keys(t).length)throw"computeHistoryMaps : passed empty control states parameter?";var e=objectTreeLenses.getLabel,n=traverseObj({strategy:PRE_ORDER,seed:{stateList:[],stateAncestors:{}},visit:function(t,n,r){var a=e(r),i=Object.keys(a)[0];t.stateList=t.stateList.concat(i);var o=n.get(r).path;n.set(JSON.stringify(o),i);var s=o.slice(0,-1);if(1===s.length)n.set(JSON.stringify(s),INIT_STATE);else{var c=n.get(JSON.stringify(s));t.stateAncestors[i]=[c];var u=o.reduce(function(t,e){var r=t.path.slice(0,-1);if(t.path=r,r.length>1){var a=n.get(JSON.stringify(r));t.ancestors=t.ancestors.concat(a)}return t},{ancestors:[],path:o}).ancestors;t.stateAncestors[i]=u}return t}},t);return{stateList:n.stateList,stateAncestors:n.stateAncestors}}function reduceTransitions(t,e,n){return n.reduce(function(e,n,r){var a=n.from,i=n.event,o=n.to,s=n.gen,c=n.action,u=n.guards;return u||(u=s?[{to:o,action:c,gen:s,predicate:void 0}]:[{to:o,action:c,predicate:void 0}]),u.reduce(function(e,n,o){var s=n.to,c=n.action,u=n.gen,l=n.predicate;return t(e,u?{from:a,event:i,to:s,action:c,predicate:l,gen:u}:{from:a,event:i,to:s,action:c,predicate:l},o,r)},e)},e)}function arrayizeOutput(t){return t===NO_OUTPUT?NO_OUTPUT:Array.isArray(t)?t:[t]}function isHistoryControlState(t){return"object"===_typeof(t)&&(DEEP in t||SHALLOW in t)}function getHistoryType(t){return t[DEEP]?DEEP:SHALLOW}function getHistoryUnderlyingState(t){return t[getHistoryType(t)]}function initHistoryDataStructure(t){var e,n=function(){return t.reduce(function(t,e){return t[e]="",t},{})};return _defineProperty(e={},DEEP,n()),_defineProperty(e,SHALLOW,n()),e}function updateHistory(t,e,n){var r,a=(_defineProperty(r={},DEEP,Object.assign({},t[DEEP])),_defineProperty(r,SHALLOW,Object.assign({},t[SHALLOW])),r);return n===INIT_STATE?a:((e[n]||[]).reduce(function(t,e){return a[DEEP][e]=n,a[SHALLOW][e]=t,e},n),a)}function findInitTransition(t){return t.find(function(t){return t.from===INIT_STATE&&t.event===INIT_EVENT})}function assert(t,e){var n=t.name||"",r=t.apply(null,e);return!0===r?void 0:_objectSpread({},r,{when:"Checking contract",message:[r.message,"failed contract ".concat(n)].join("\n"),info:r.info})}function isActions(t){return t&&"updates"in t&&"outputs"in t&&Array.isArray(t.outputs)}function isEventStruct(t){var e;return t&&"object"===_typeof(t)?Object.keys(t).length>1?(e=new Error(WRONG_EVENT_FORMAT_ERROR)).info={event:t,cause:"Event objects must have only one key which is the event name!"}:e=!0:(e=new Error(WRONG_EVENT_FORMAT_ERROR)).info={event:t,cause:"not an object!"},e}function destructureEvent(t){var e=Object.keys(t)[0];return{eventName:e,eventData:t[e]}}function wrapUpdateStateFn(t,e){var n=e.throwKinglyError;e.tracer;return function(e,r){var a=t.name||"";try{return t(e,r)}catch(t){n({when:"Executing updateState function ".concat(a),location:"createStateMachine > wrappedUpdateState",info:{extendedState:e,updates:r},message:t.message,stack:t.stack})}}}function throwKinglyErrorFactory(t,e){return function(n){throw new KinglyError(n,t,e)}}var KinglyError=function(t){function e(t,n,r){var a;_classCallCheck(this,e),(a=_possibleConstructorReturn(this,_getPrototypeOf(e).call(this,t&&t.message||""))).name="KinglyError",a.stack=t&&t.stack||a.stack,a.errors=t;var i=t||{},o=i.when,s=i.location,c=i.info,u=i.message,l=["At ".concat(s,": ").concat(o," => ").concat(u),c?"See extra info in console":""].join("\n");return n&&n.error(l),c&&n&&n.info(c),a}return _inherits(e,_wrapNativeSuper(Error)),e}(),noDuplicatedStates={name:"noDuplicatedStates",shouldThrow:!1,predicate:function(t,e){var n=objectTreeLenses.getLabel,r=traverseObj({strategy:PRE_ORDER,seed:{duplicatedStates:[],statesHashMap:{}},visit:function(t,e,r){var a=t.duplicatedStates,i=t.statesHashMap,o=n(r),s=Object.keys(o)[0];return s in i?{duplicatedStates:a.concat(s),statesHashMap:i}:{duplicatedStates:a,statesHashMap:(i[s]="",i)}}},t.states).duplicatedStates;return{isFulfilled:0===r.length,blame:{message:"State names must be unique! Found duplicated state names. Cf. log",info:{duplicatedStates:r}}}}},noReservedStates={name:"noReservedStates",shouldThrow:!1,predicate:function(t,e,n){var r=n.statesType;return{isFulfilled:-1===Object.keys(r).indexOf(INIT_STATE),blame:{message:"You cannot use a reserved control state name for any of the configured control states for the machine! Cf. log",info:{reservedStates:[INIT_STATE],statesType:r}}}}},atLeastOneState={name:"atLeastOneState",shouldThrow:!1,predicate:function(t,e,n){var r=n.statesType;return{isFulfilled:Object.keys(r).length>0,blame:{message:"Machine configuration must define at least one control state! Cf. log",info:{statesType:r}}}}},isInitialControlStateDeclared={name:"isInitialControlStateDeclared",shouldThrow:!1,predicate:function(t,e,n){n.initTransition;var r=n.statesType,a=t.initialControlState,i=(t.transitions,Object.keys(r));return a?{isFulfilled:i.indexOf(a)>-1,blame:{message:"Configured initial control state must be a declared state. Cf. log",info:{initialControlState:a,declaredStates:i}}}:{isFulfilled:!0,blame:void 0}}},eventsAreStrings={name:"eventsAreStrings",shouldThrow:!1,predicate:function(t,e){return{isFulfilled:t.events.every(function(t){return"string"==typeof t}),blame:{message:"Events must be an array of strings!",info:{events:t.events}}}}},validInitialConfig={name:"validInitialConfig",shouldThrow:!1,predicate:function(t,e,n){var r=n.initTransition,a=t.initialControlState;return r&&a?{isFulfilled:!1,blame:{message:"Invalid machine configuration : defining an initial control state and an initial transition at the same time may lead to ambiguity and is forbidden!",info:{initialControlState:a,initTransition:r}}}:r||a?{isFulfilled:!0,blame:void 0}:{isFulfilled:!1,blame:{message:"Invalid machine configuration : you must define EITHER an initial control state OR an initial transition! Else in which state is the machine supposed to start?",info:{initialControlState:a,initTransition:r}}}}},validInitialTransition={name:"validInitialTransition",shouldThrow:!1,predicate:function(t,e,n){var r=n.initTransition,a=t.initialControlState,i=t.transitions.reduce(function(t,e){return e.from===INIT_STATE&&t.push(e),t},[]);return{isFulfilled:a&&!r||!a&&r&&1===i.length&&r.event===INIT_EVENT&&(isInconditionalTransition(r)||areCconditionalTransitions(r)),blame:{message:"Invalid configuration for initial transition! Cf. log",info:{initTransition:r,initTransitions:i,initialControlState:a}}}}},initEventOnlyInCompoundStates={name:"initEventOnlyInCompoundStates",shouldThrow:!1,predicate:function(t,e,n){var r=n.statesTransitionsMap,a=n.statesType,i=(n.statesPath,Object.keys(a).filter(function(t){return!a[t]}).map(function(t){return _defineProperty({},t,r[t]&&r[t][INIT_EVENT])}).filter(function(t){return Object.values(t)[0]}));return{isFulfilled:0===i.length,blame:{message:"Found at least one atomic state with an entry transition! That is forbidden! Cf. log",info:{initTransitions:i}}}}},validInitialTransitionForCompoundState={name:"validInitialTransitionForCompoundState",shouldThrow:!1,predicate:function(t,e,n){var r=n.statesTransitionsMap,a=n.statesType,i=n.statesPath,o=Object.keys(a).filter(function(t){return a[t]}),s=o.map(function(t){return r[t]&&r[t][INIT_EVENT]}),c=s.every(Boolean);if(!c)return{isFulfilled:!1,blame:{message:"Found at least one compound state without an entry transition! Cf. log",info:{hasEntryTransitions:o.map(function(t){return _defineProperty({},t,!(!r[t]||!r[t][INIT_EVENT]))})}}};var u=c&&s.every(function(t){var e=t.guards,n=t.to;return e?e.map(function(t){return t.to}).every(function(t){return"string"==typeof t}):"string"==typeof n});return u?u&&s.every(function(t){var e=t.from,n=t.guards,r=t.to;return n?n.map(function(t){return t.to}).every(function(t){return e!==t&&i[t]&&i[t].startsWith(i[e])}):e!==r&&i[r]&&i[r].startsWith(i[e])})?{isFulfilled:!0,blame:void 0}:{isFulfilled:!1,blame:{message:"Found at least one compound state with an invalid entry transition! Entry transitions for compound states must have a target state which is strictly below the compound state in the state hierarchy! ",info:{states:t.states,statesPath:i,entryTransitions:s}}}:{isFulfilled:!1,blame:{message:"Found at least one compound state with an invalid entry transition! Entry transitions for compound states must have the associated target control states which are not a history pseudo-state. Cf. log",info:{entryTransitions:s}}}}},validEventLessTransitions={name:"validEventLessTransitions",shouldThrow:!1,predicate:function(t,e,n){var r=n.statesTransitionsMap,a=n.statesType,i=(n.statesPath,Object.keys(a).map(function(t){return _defineProperty({},t,r[t]&&"".concat(void 0)in r[t]&&1!==Object.keys(r[t]).length)}).filter(function(t){return void 0!==Object.values(t)[0]&&Object.values(t)[0]}));return{isFulfilled:0===i.length,blame:{message:"Found at least one control state without both an eventless transition and a competing transition! Cf. log",info:{failingOriginControlStates:i}}}}},allStateTransitionsOnOneSingleRow={name:"allStateTransitionsOnOneSingleRow",shouldThrow:!1,predicate:function(t,e,n){var r=n.stateEventTransitionsMaps,a=Object.keys(r).reduce(function(t,e){var n=Object.keys(r[e]).filter(function(t){return r[e][t].length>1});return n.length>0&&(t[e]=n),t},{});return{isFulfilled:0===Object.keys(a).length,blame:{message:"Found at least one control state and one event for which the associated transition are not condensated under a unique row! Cf. log",info:{statesTransitionsInfo:a}}}}},noConflictingTransitionsWithAncestorState={name:"noConflictingTransitionsWithAncestorState",shouldThrow:!1,predicate:function(t,e,n){n.stateEventTransitionsMaps;var r=n.eventTransitionsMaps,a=n.ancestorMap,i=Object.keys(r).filter(function(t){return t!==INIT_EVENT&&void 0!==t}).reduce(function(t,e){var n=Object.keys(r[e]),i=n.filter(function(t){return t!==INIT_STATE}).map(function(t){return a[t]&&_defineProperty({},t,a[t].find(function(t){return n.indexOf(t)>-1}))}).filter(function(t){return t&&Object.values(t).filter(Boolean).length>0});return i.length>0&&(t[e]=i),t},{});return{isFulfilled:0===Object.keys(i).length,blame:{message:"Found two conflicting transitions! A -ev-> X, and B -ev-> Y leads to ambiguity if A < B or B < A. Cf. log",info:{eventTransitionsInfo:i}}}}},isHistoryStatesTargetStates={name:"isHistoryStatesTargetStates",shouldThrow:!1,predicate:function(t,e,n){_objectDestructuringEmpty(n);var r=t.transitions.reduce(function(t,e){return isHistoryControlState(e.from)?t.concat(e):t},[]);return{isFulfilled:0===Object.keys(r).length,blame:{message:"Found a history pseudo state configured as the origin control state for a transition. History pseudo states should only be target control states. Cf. log",info:{wrongHistoryStates:r}}}}},isHistoryStatesCompoundStates={name:"isHistoryStatesCompoundStates",shouldThrow:!1,predicate:function(t,e,n){var r=n.stateEventTransitionsMaps,a=n.statesType,i=Object.keys(r).map(function(t){return t===INIT_STATE?[]:Object.keys(r[t]).reduce(function(e,n){var i=r[t][n][0],o=i.guards,s=i.to;return o?o.reduce(function(t,e){var n=e.to;return isHistoryControlState(n)&&!a[getHistoryUnderlyingState(n)]?t.concat(i):t},e):isHistoryControlState(s)&&!a[getHistoryUnderlyingState(s)]?e.concat(i):e},[])}).reduce(function(t,e){return t.concat(e)},[]);return{isFulfilled:0===Object.keys(i).length,blame:{message:"Found a history pseudo state connected to an atomic state! History pseudo states only refer to compound states. Cf. log",info:{wrongHistoryStates:i,states:t.states}}}}},isHistoryStatesExisting={name:"isHistoryStatesExisting",shouldThrow:!1,predicate:function(t,e,n){var r=n.historyStatesMap,a=n.statesType,i=Array.from(r.entries()).map(function(t){var e=_slicedToArray(t,2),n=e[0],r=e[1];return!(n in a)&&{historyState:n,flatTransitions:r}}).filter(Boolean),o=Object.keys(i).length;return{isFulfilled:0===o,blame:{message:"Found ".concat(o," history pseudo state referring to a control state that is not declared! Check the states property of the state machine definition."),info:{invalidTransitions:i,states:t.states}}}}};function isInconditionalTransition(t){var e=t.from,n=t.event,r=t.guards,a=t.to,i=t.action;return typeof r==="".concat(void 0)&&a&&isControlState(e)&&isEvent(n)&&isControlState(a)&&isActionFactory(i)}function isValidGuard(t){var e=t.to,n=t.predicate,r=t.action;return e&&isControlState(e)&&isFunction(n)&&isActionFactory(r)}function areCconditionalTransitions(t){var e=t.from,n=t.event,r=t.guards,a=t.to;return r&&Array.isArray(r)&&r.length>0&&!a&&isControlState(e)&&isEvent(n)&&r.every(isValidGuard)}var isValidFsmDef={name:"isValidFsmDef",shouldThrow:!1,predicate:function(t,e){var n=t.transitions,r=t.states,a=t.events,i=(t.initialExtendedState,n&&Array.isArray(n)),o=r&&"object"===_typeof(r),s=a&&Array.isArray(a);return i?o?s?{isFulfilled:!0,blame:void 0}:{isFulfilled:!1,blame:{message:"The events property for a machine definition must be an array!",info:{events:a}}}:{isFulfilled:!1,blame:{message:"The states property for a machine definition must be an object!",info:{states:r}}}:{isFulfilled:!1,blame:{message:"The transitions property for a machine definition must be an array!",info:{transitions:n}}}}},haveTransitionsValidTypes={name:"haveTransitionsValidTypes",shouldThrow:!1,predicate:function(t,e){var n=t.transitions,r=n.map(function(t,e){return!isInconditionalTransition(t)&&!areCconditionalTransitions(t)&&{transition:t,index:e}}).filter(Boolean),a=Object.keys(r).length;return{isFulfilled:0===a,blame:{message:"Found ".concat(a," transitions with invalid format! Check logs for more details."),info:{wrongTransitions:r,transitions:n}}}}},areEventsDeclared={name:"areEventsDeclared",shouldThrow:!1,predicate:function(t,e,n){var r=n.eventTransitionsMaps,a=Object.keys(r),i=t.events,o=i.map(function(t){return-1===a.indexOf(t)&&t}).filter(Boolean),s=a.map(function(t){return-1===i.indexOf(t)&&t}).filter(Boolean).filter(function(t){return t!==INIT_EVENT&&"undefined"!==t});return{isFulfilled:0===o.length&&0===s.length,blame:{message:"All declared events must be used in transitions. All events used in transition must be declared! Cf. log",info:{eventsDeclaredButNotTriggeringTransitions:o,eventsNotDeclaredButTriggeringTransitions:s}}}}},areStatesDeclared={name:"areStatesDeclared",shouldThrow:!1,predicate:function(t,e,n){var r=n.stateEventTransitionsMaps,a=n.targetStatesMap,i=n.statesType,o=n.ancestorMap,s=Object.keys(r),c=Array.from(a.keys()).filter(function(t){return"object"!==_typeof(t)}),u=Object.keys([s,c].reduce(function(t,e){return e.forEach(function(e){return t[e]=!0}),t},{})),l=Object.keys(i),f=l.map(function(t){return-1===u.indexOf(t)&&t}).filter(Boolean).filter(function(t){return!o[t]||0===o[t].length}),d=u.map(function(t){return t!==INIT_STATE&&-1===l.indexOf(t)&&t}).filter(Boolean);return{isFulfilled:0===f.length&&0===d.length,blame:{message:"All declared states must be used in transitions. All states used in transition must be declared! Cf. log",info:{statesDeclaredButNotTriggeringTransitions:f,statesNotDeclaredButTriggeringTransitions:d}}}}},isValidSettings={name:"isValidSettings",shouldThrow:!1,predicate:function(t){return{isFulfilled:!0,blame:void 0}}},isInitialStateOriginState={name:"isInitialStateOriginState",shouldThrow:!1,predicate:function(t,e,n){var r=n.targetStatesMap;return Array.from(r.keys()).indexOf(INIT_STATE)>-1?{isFulfilled:!1,blame:{message:"Found at least one transition with the initial state as target state! CF. log",info:{targetStates:Array.from(r.keys()),transitions:t.transitions}}}:{isFulfilled:!0,blame:void 0}}},isValidSelfTransition={name:"isValidSelfTransition",shouldThrow:!1,predicate:function(t,e,n){var r=n.targetStatesMap,a=n.statesType,i=Array.from(r.keys()).map(function(t){return r.get(t).map(function(e){var n=e.from,r=e.event;if(t in a&&!a[t]&&n&&n===t&&!r)return{state:t,flatTransition:e}}).filter(Boolean)}).filter(function(t){return t.length>0});return{isFulfilled:0===i.length,blame:{message:"Found at least one eventless self-transition involving an atomic state! This is forbidden to avoid infinity loop! Cf. log",info:{wrongSelfTransitions:i}}}}},fsmContracts={injected:function(t,e){return{statesType:getStatesType(t.states),initTransition:findInitTransition(t.transitions),statesTransitionsMap:getStatesTransitionsMap(t.transitions),stateEventTransitionsMaps:getStateEventTransitionsMaps(t.transitions),eventTransitionsMaps:getEventTransitionsMaps(t.transitions),ancestorMap:getAncestorMap(t.states),statesPath:getStatesPath(t.states),historyStatesMap:getHistoryStatesMap(t.transitions),targetStatesMap:getTargetStatesMap(t.transitions)}},description:"FSM structure",contracts:[isValidFsmDef,isValidSettings,isInitialControlStateDeclared,isInitialStateOriginState,eventsAreStrings,haveTransitionsValidTypes,noDuplicatedStates,noReservedStates,atLeastOneState,areEventsDeclared,areStatesDeclared,validInitialConfig,validInitialTransition,initEventOnlyInCompoundStates,validInitialTransitionForCompoundState,validEventLessTransitions,isValidSelfTransition,allStateTransitionsOnOneSingleRow,noConflictingTransitionsWithAncestorState,isHistoryStatesExisting,isHistoryStatesTargetStates,isHistoryStatesCompoundStates]};function makeContractHandler(t,e){var n=e&&e.debug&&e.debug.console||emptyConsole,r=e&&e.debug&&e.debug.trace||noop,a=t.description;return function(){for(var e=arguments.length,i=new Array(e),o=0;o<e;o++)i[o]=arguments[o];var s=[],c=t.injected.apply(null,i),u={isFulfilled:t.contracts.reduce(function(t,e){var r=e.name,o=e.predicate,u=e.shouldThrow,l=i.concat(c),f=o.apply(null,l),d=f.isFulfilled,p=f.blame,T="".concat(a," FAILS ").concat(r,"!"),h=p||{},m=h.message,y=h.info;if(d)return t;if(s.push({name:r,message:m,info:y}),n.error(T),n.error([r,m].join(": ")),n.debug("Supporting error data:",y),u)throw new Error([T,"check console for information!"].join("\n"));return!1},!0),failingContracts:s};return r(_defineProperty({},CONTRACTS_EVAL,u)),u}}var fsmContractChecker=function(t,e,n){return makeContractHandler(n,e)(t,e)};function runContracts(t,e,n){var r=t.fsmDef,a=t.settings,i=n.throwKinglyError,o=n.tracer;if(e){var s=fsmContractChecker(r,a,e).failingContracts;try{s.length>0&&i({when:"Attempting to create a Kingly machine",location:"createStateMachine",info:{fsmDef:r,settings:a,failingContracts:s},message:"I found that one or more Kingly contracts are violated!"})}catch(t){return o({type:MACHINE_CREATION_ERROR_MSG,trace:{info:t.errors,message:t.message,machineState:{cs:void 0,es:void 0,hs:void 0}}}),t}}}function alwaysTrue(){return!0}function buildNestedStateStructure(t){var e="State",n={},r={};function a(){}return t={nok:t},a.prototype={current_state_name:INIT_STATE},n[INIT_STATE]=new a,n[STATE_PROTOTYPE_NAME]=new a,function t(a,i){keys(a).forEach(function(o){var s=a[o];if(n[o]=new i,n[o].name=o,n[o].parent_name=get_fn_name(i),n[o].root_name=e,"object"===_typeof(s)){r[o]=!0;var c=function(){};c.displayName=o,c.prototype=n[o],t(s,c)}})}(t,a),{hashStates:n,isGroupState:r}}function normalizeTransitions(t){var e=t.initialControlState,n=t.transitions,r=findInitTransition(n);return e?n.concat([{from:INIT_STATE,event:INIT_EVENT,to:e,action:ACTION_IDENTITY}]):r?n:void 0}function createStateMachine(t,e){var n=createStateMachineAPIs(t,e);return n instanceof Error?n:n.withProtectedState}function createPureStateMachine(t,e){var n=createStateMachineAPIs(t,e);return n instanceof Error?n:n.withPureInterface}function createStateMachineAPIs(t,e){var n=t.states,r=t.initialExtendedState,a=t.updateState,i=e||{},o=i.debug,s=i.devTool,c=o&&o.checkContracts||void 0,u=o&&o.console||emptyConsole,l=s&&s.tracer||emptyTracer,f=throwKinglyErrorFactory(u,l);if(c){var d=runContracts({fsmDef:t,settings:e},c,{throwKinglyError:f,tracer:l});if(d instanceof Error)return d}var p=wrapUpdateStateFn(a,{throwKinglyError:f,tracer:l}),T=normalizeTransitions(t),h=buildNestedStateStructure(n),m={},y={},v=h.isGroupState,g=h.hashStates;T.forEach(function(t){var n=t.from,r=t.to,a=t.action,i=t.event,s=t.guards;s||(s=[{predicate:void 0,to:r,action:a}]),i===INIT_EVENT&&(m[n]=!0);var c=g[n];i||(i=AUTO_EVENT,y[n]=!0),v[n]&&m[n]&&(y[n]=!0),c[i]=s.reduce(function(t,r,a){var s=r.action||ACTION_IDENTITY,c=s.name||s.displayName||"",d=function(t,e){var r=function(r,d,T){n=T||n;var h=t.predicate||alwaysTrue,y=h.name||h.displayName||"<anonymous>",v=t.to,_=function(e,r,o){try{return h(e,r,o)}catch(s){f({when:"Executing predicate function ".concat(y),location:"createStateMachine > event handler > condition_checking_fn > shouldTransitionBeTaken",info:{extendedState:e,event:i,event_data:r,settings:o,guard:t,from:n,to:v,index:a},message:["Error occurred while processing event ".concat(i," with target state ").concat(v),s.message].join("\n"),stack:s.stack})}}(r,d,e);if("boolean"!=typeof _&&f({when:"Executing predicate function ".concat(y),location:"createStateMachine > event handler > condition_checking_fn > throwIfInvalidGuardResult",info:{event:i,guard:t,from:n,to:v,index:a,shouldTransitionBeTaken:_},message:"Guard index ".concat(a," with name ").concat(y," did not return a boolean!")}),_){u.info("IN STATE ",wrap(n)),t.predicate?(l({type:DEBUG_MSG,trace:{message:"The guard ".concat(y," is fulfilled"),info:{eventData:d,from:n,action:c,to:v},machineState:{cs:T,es:r,hs:b}}}),u.info("CASE: guard ".concat(h.name," for transition is fulfilled"))):(l({type:DEBUG_MSG,trace:{message:"Evaluating transition with no guards",info:{eventData:d,from:n,action:c,to:v},machineState:{cs:T,es:O,hs:b}}}),u.info("CASE: unguarded transition")),u.info("THEN: we execute the action "+c);var S=function(e,r,o){try{return s(e,r,o)}catch(r){f({when:"Executing action factory ".concat(c),location:"createStateMachine > event handler > condition_checking_fn",info:{extendedState:e,event:i,event_data:d,settings:o,guard:t,from:n,to:v,index:a,action:s},message:r.message,stack:r.stack})}}(r,d,e);isActions(S)||f({when:"Executing action factory ".concat(c),location:"createStateMachine > event handler > condition_checking_fn",info:{extendedState:O,event:i,event_data:d,settings:e,guard:t,from:n,to:v,index:a,action:s,actionResult:S},message:"Action factory returned a value that does not have the expected shape!"});var N=S.updates,A=S.outputs;return function(t,e,n){b=updateHistory(b,E,n[t].name),u.info("LEAVE STATE",wrap(t))}(n,0,g),O=p(r,N),function(t,e,n){var r;if(isHistoryControlState(t)){var a=t[DEEP]?DEEP:t[SHALLOW]?SHALLOW:void 0,i=t[a];if(!m[i]){var s="Configured a history state unrelated to a compound state! The behaviour of the machine is thus unspecified. Please review your machine configuration";o&&u&&u.error(s),f({message:s})}r=b[a][i]||i}else t?r=n[t].name:f({message:"enter_state : unknown case! Not a state name, and not a history state to enter!"});I=r,l({type:DEBUG_MSG,trace:{message:isHistoryControlState(t)?"Entering history state for ".concat(t[t.deep?DEEP:t.shallow?SHALLOW:void 0]):"Entering state ".concat(t),machineState:{cs:I,es:O,hs:b}}}),o&&u.info("AND TRANSITION TO STATE",wrap(r))}(v,0,g),u.info("ENTER NEXT STATE: ",wrap(I)),u.info("with extended state: ",O),{stop:!0,outputs:A}}return l({type:DEBUG_MSG,trace:{message:t.predicate?"The guard ".concat(y," is not fulfilled!"):"Evaluated and skipped transition",info:{eventData:d,settings:e,guard:t,from:n,to:v,index:a,action:c},machineState:{cs:T,es:O,hs:b}}}),{stop:!1,outputs:null}};return r.displayName=n+"",r}(r,e);return function(e,n,r){var a=t(e,n,r);return a.stop?a:d(e,n,r)}},function(){return{stop:!1,outputs:null}})});var _=computeHistoryMaps(n),S=_.stateList,E=_.stateAncestors,b=initHistoryDataStructure(S),O=r,I=INIT_STATE;try{w()}catch(d){return l({type:MACHINE_CREATION_ERROR_MSG,trace:{message:d.message,info:{fsmDef:t,settings:e,error:d},machineState:{cs:INIT_STATE,es:O,hs:b}}}),u&&u.error("An error occurred when starting the machine",d),d}var N={withProtectedState:function(t){try{var e=destructureEvent(t),n=e.eventName,r=e.eventData;l({type:INPUT_MSG,trace:{info:{eventName:n,eventData:r},machineState:{cs:I,es:O,hs:b}}});var a=A(t,!1);return o&&u.info("OUTPUTS:",a),l({type:OUTPUTS_MSG,trace:{outputs:a,machineState:{cs:I,es:O,hs:b}}}),a}catch(t){if(t instanceof KinglyError)return l({type:ERROR_MSG,trace:{error:t,message:"An error ocurred while running an input through the machine!",machineState:{cs:I,es:O,hs:b}}}),t;throw l({type:ERROR_MSG,trace:{error:t,message:"An unknown error ocurred while running an input through the machine!",machineState:{cs:I,es:O,hs:b}}}),u.error("withProtectedState > unexpected error!",t),t}},withPureInterface:function(t,e){if(void 0===e);else if(null===e)I=INIT_STATE,O=r,b=initHistoryDataStructure(S),w();else{var n=e.cs,a=e.hs,i=e.es;O=i,b=a,I=n}return{outputs:N.withProtectedState(t),fsmState:{cs:I,hs:b,es:O}}}};return N;function A(t,e){var n=assert(isEventStruct,[t]);c&&n&&f(n);var r=destructureEvent(t),a=r.eventName,i=r.eventData;if(u.group("send event "+a||""),u.log(t),!e&&a===INIT_EVENT&&I!==INIT_STATE)return l({type:WARN_MSG,trace:{info:{eventName:a,eventData:i},message:"The external event INIT_EVENT can only be sent when starting the machine!",machineState:{cs:I,es:O,hs:b}}}),u.warn("The external event INIT_EVENT can only be sent when starting the machine!"),u.groupEnd(),null;var s=function(t,e,n,r){var a=I,i=t[a][e];if(!i)return u.warn("There is no transition associated to the event |".concat(e,"| in state |").concat(I,"|!")),l({type:WARN_MSG,trace:{info:{received:_defineProperty({},e,n)},message:"There is no transition associated to the event |".concat(e,"| in state |").concat(I,"|!"),machineState:{cs:I,es:r,hs:b}}}),null;u.log("found event handler!"),u.info("WHEN EVENT ",e,n);var s=i(r,n,a),c=s.stop,f=s.outputs,d=I;o&&!c&&u.warn("No guards have been fulfilled! We recommend to configure guards explicitly to cover the full state space!");var p=arrayizeOutput(f);if(!y[d])return p;if(d!==a){var T=m[d]?INIT_EVENT:AUTO_EVENT;l({type:INTERNAL_INPUT_MSG,trace:{info:{eventName:T,eventData:n},event:_defineProperty({},T,n),machineState:{cs:I,es:r,hs:b}}});var h=A(_defineProperty({},T,n),!0);return l({type:INTERNAL_OUTPUTS_MSG,trace:{outputs:h,machineState:{cs:I,es:r,hs:b}}}),[].concat(p).concat(h)}u.error("Eventless transitions (event |".concat(e,"| in state |").concat(I,"|) cannot return to the same control state!! This is forbidden to avoid possible infinite loops.")),l({type:ERROR_MSG,trace:{info:{received:_defineProperty({},e,n)},message:"Eventless transitions (event |".concat(e,"| in state |").concat(I,"|) cannot return to the same control state!! This is forbidden to avoid possible infinite loops."),machineState:{cs:I,es:r,hs:b}}})}(h.hashStates,a,i,O);return u.groupEnd(),s}function w(){return l({type:INIT_INPUT_MSG,trace:{info:{eventName:INIT_EVENT,eventData:r},event:_defineProperty({},INIT_EVENT,r),machineState:{cs:I,es:O,hs:b}}}),A(_defineProperty({},INIT_EVENT,r),!0)}}function makeWebComponentFromFsm(t){var e=t.name,n=t.eventHandler,r=t.fsm,a=t.commandHandlers,i=t.effectHandlers,o=t.options,s=function(t){function s(){var t;if(_classCallCheck(this,s),e.split("-").length<=1)throw"makeWebComponentFromFsm : web component's name MUST include a dash! Please review the name property passed as parameter to the function!";var c=_assertThisInitialized(t=_possibleConstructorReturn(this,_getPrototypeOf(s).call(this)));t.eventSubject=n,t.options=Object.assign({},o);var u=t.options.NO_ACTION||null;return t.eventSubject.subscribe({next:function(e){var n=r(e);if(n instanceof Error)console&&console.log(n);else{if(n===u)return;n.forEach(function(e){if(e!==u){var n=e.command,r=e.params;a[n](t.eventSubject.next,r,i,c)}})}}}),t}return _inherits(s,_wrapNativeSuper(HTMLElement)),_createClass(s,[{key:"connectedCallback",value:function(){this.options.initialEvent&&this.eventSubject.next(this.options.initialEvent)}},{key:"disconnectedCallback",value:function(){this.options.terminalEvent&&this.eventSubject.next(this.options.terminalEvent),this.eventSubject.complete()}},{key:"attributeChangedCallback",value:function(t,e,n){}}],[{key:"observedAttributes",get:function(){return[]}}]),s}();return customElements.define(e,s)}function historyState(t,e){return _defineProperty({},t,e)}function generateStatePlantUmlHeader(t,e){return e?'state "'.concat(e,'" as ').concat(t," <<NoContent>>"):'state "'.concat(getDisplayName(t),'" as ').concat(t," <<NoContent>>")}function toPlantUml(t,e){var n=t.states,r=t.transitions,a=objectTreeLenses.getChildren,i=objectTreeLenses.getLabel,o=function(t){return t.join(SEP)},s=postOrderTraverseTree(objectTreeLenses,{seed:function(){return Map},visit:function(t,e,n){var s=e.get(n).path,c=i(n),u=stateToPlantUML(Object.keys(c)[0],times$1(function(e){return t.get(o(s.concat(e)))},function(t,e){return a(t,e).length}(n,e)),r);return t.set(o(s),u),t}},_defineProperty({},INIT_STATE,n)),c=s.get("0");return s.clear(),c}function stateToPlantUML(t,e,n){return["".concat(generateStatePlantUmlHeader(t,"")," {"),e.join("\n"),format_history_states(t,n),format_entry_transitions(t,n),"}",translate_transitions(t,n)].filter(function(t){return"\n"!==t&&""!==t}).join("\n")}function format_history_states(t,e){var n=e.reduce(function(e,n){return get_all_transitions(n).filter(is_history_transition).filter(is_to_history_control_state_of(t)).reduce(function(t,e){return t[format_history_transition_state_name(e)]=void 0,t},e)},{});return Object.keys(n).map(function(t){return"".concat(generateStatePlantUmlHeader(t,HISTORY_STATE_NAME))}).join("\n")}function translate_transitions(t,e){return[format_history_transitions(t,e),format_standard_transitions(t,e)].filter(Boolean).join("\n")}function format_standard_transitions(t,e){return t===INIT_STATE?"":e.map(function(e){return get_all_transitions(e).filter(is_from_control_state(t)).filter(function(t){return!is_entry_transition(t)}).filter(function(t){return!is_history_transition(t)}).map(function(t){var e=t.from,n=t.event,r=t.predicate,a=t.to,i=t.action;return[e,TRANSITION_SYMBOL,a,TRANSITION_LABEL_START_SYMBOL,format_transition_label(n,r,i)].join(" ")}).join("\n")}).filter(Boolean).join("\n")}function format_entry_transitions(t,e){return e.reduce(function(e,n){return get_all_transitions(n).filter(is_entry_transition).filter(is_from_control_state(t)).reduce(function(t,e){e.from;var n=e.to,r=e.predicate,a=e.action;return t.push("[*] ".concat(TRANSITION_SYMBOL," ").concat(n," ").concat(TRANSITION_LABEL_START_SYMBOL," ").concat(format_transition_label("",r,a))),t},e)},[]).join("\n")}function format_history_transitions(t,e){return e.map(function(e){return get_all_transitions(e).filter(is_from_control_state(t)).filter(is_history_transition).map(function(t){var e=t.from,n=t.event,r=t.predicate,a=t.to,i=t.action;return[e,TRANSITION_SYMBOL,format_history_transition_state_name({from:e,to:a}),TRANSITION_LABEL_START_SYMBOL,format_transition_label(n,r,i)].join(" ")}).join("\n")}).filter(Boolean).join("\n")}function toDagreVisualizerFormat(t){var e=t.states,n=t.transitions,r=objectTreeLenses.getLabel,a=objectTreeLenses.getChildren,i=arrayTreeLenses.constructTree,o=function(t){return t.join(SEP)},s=postOrderTraverseTree(objectTreeLenses,{seed:function(){return Map},visit:function(t,e,n){var s=e.get(n).path,c=r(n),u=Object.keys(c)[0],l=times$1(function(e){return t.get(o(s.concat(e)))},function(t,e){return a(t,e).length}(n,e));return t.set(o(s),i(u,l)),t}},_defineProperty({},INIT_STATE,e)).get("0"),c=n.map(function(t){var e=t.from,n=t.to,r=t.event,a=t.guards,i=t.action;return a?{from:e,event:r,guards:a.map(function(t){var e=t.predicate,n=t.to,r=t.action;return{predicate:e.name,to:n,action:r.name}})}:{from:e,to:n,event:r,action:i.name||"no action name?"}});return JSON.stringify({states:s,transitions:c})}export{createStateMachine,createPureStateMachine,makeWebComponentFromFsm,historyState,ACTION_IDENTITY,INIT_EVENT,INIT_STATE,SHALLOW,DEEP,NO_STATE_UPDATE,NO_OUTPUT,computeHistoryMaps,initHistoryDataStructure,fsmContracts,toPlantUml,toDagreVisualizerFormat};
//# sourceMappingURL=kingly.es.min.js.map