UNPKG

@scion-scxml/scxml

Version:

An implementation of SCXML in JavaScript.

2 lines 619 kB
(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.scion=g.scion||{};g.scion.scxml=f();g.scion.core=g.scion.scxml.core}})(function(){var define,module,exports;return function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r}()({1:[function(require,module,exports){(function(setImmediate){"use strict";var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor}}();function _toConsumableArray(arr){if(Array.isArray(arr)){for(var i=0,arr2=Array(arr.length);i<arr.length;i++){arr2[i]=arr[i]}return arr2}else{return Array.from(arr)}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _possibleConstructorReturn(self,call){if(!self){throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}return call&&(typeof call==="object"||typeof call==="function")?call:self}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function, not "+typeof superClass)}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:false,writable:true,configurable:true}});if(superClass)Object.setPrototypeOf?Object.setPrototypeOf(subClass,superClass):subClass.__proto__=superClass}var base=require("@scion-scxml/core-base"),helpers=base.helpers,query=base.query,transitionComparator=base.helpers.transitionComparator;var Statechart=function(_base$BaseInterpreter){_inherits(Statechart,_base$BaseInterpreter);function Statechart(modelOrModelFactory,opts){_classCallCheck(this,Statechart);opts=opts||{};opts.legacySemantics=false;return _possibleConstructorReturn(this,(Statechart.__proto__||Object.getPrototypeOf(Statechart)).call(this,modelOrModelFactory,opts))}_createClass(Statechart,[{key:"_selectTransitions",value:function _selectTransitions(currentEvent,selectEventlessTransitions){var transitionSelector=this.opts.transitionSelector;var enabledTransitions=new this.opts.Set;var e=this._evaluateAction.bind(this,currentEvent);var atomicStates=this._configuration.iter().sort(transitionComparator);var _iteratorNormalCompletion=true;var _didIteratorError=false;var _iteratorError=undefined;try{for(var _iterator=atomicStates[Symbol.iterator](),_step;!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=true){var state=_step.value;var _iteratorNormalCompletion2=true;var _didIteratorError2=false;var _iteratorError2=undefined;try{loop:for(var _iterator2=[state].concat(query.getAncestors(state))[Symbol.iterator](),_step2;!(_iteratorNormalCompletion2=(_step2=_iterator2.next()).done);_iteratorNormalCompletion2=true){var s=_step2.value;var _iteratorNormalCompletion3=true;var _didIteratorError3=false;var _iteratorError3=undefined;try{for(var _iterator3=s.transitions[Symbol.iterator](),_step3;!(_iteratorNormalCompletion3=(_step3=_iterator3.next()).done);_iteratorNormalCompletion3=true){var t=_step3.value;if(transitionSelector(t,currentEvent,e,selectEventlessTransitions)){enabledTransitions.add(t);break loop}}}catch(err){_didIteratorError3=true;_iteratorError3=err}finally{try{if(!_iteratorNormalCompletion3&&_iterator3.return){_iterator3.return()}}finally{if(_didIteratorError3){throw _iteratorError3}}}}}catch(err){_didIteratorError2=true;_iteratorError2=err}finally{try{if(!_iteratorNormalCompletion2&&_iterator2.return){_iterator2.return()}}finally{if(_didIteratorError2){throw _iteratorError2}}}}}catch(err){_didIteratorError=true;_iteratorError=err}finally{try{if(!_iteratorNormalCompletion&&_iterator.return){_iterator.return()}}finally{if(_didIteratorError){throw _iteratorError}}}var priorityEnabledTransitions=this._removeConflictingTransition(enabledTransitions);this._log("priorityEnabledTransitions",priorityEnabledTransitions);return priorityEnabledTransitions}},{key:"_removeConflictingTransition",value:function _removeConflictingTransition(enabledTransitions){var _this2=this;var filteredTransitions=new this.opts.Set;var _iteratorNormalCompletion4=true;var _didIteratorError4=false;var _iteratorError4=undefined;try{for(var _iterator4=enabledTransitions.iter()[Symbol.iterator](),_step4;!(_iteratorNormalCompletion4=(_step4=_iterator4.next()).done);_iteratorNormalCompletion4=true){var t1=_step4.value;var t1Preempted=false;var transitionsToRemove=new Set;var _iteratorNormalCompletion5=true;var _didIteratorError5=false;var _iteratorError5=undefined;try{var _loop=function _loop(){var t2=_step5.value;var t1ExitSet=_this2._computeExitSet([t1]);var t2ExitSet=_this2._computeExitSet([t2]);var hasIntersection=[].concat(_toConsumableArray(t1ExitSet)).some(function(s){return t2ExitSet.has(s)})||[].concat(_toConsumableArray(t2ExitSet)).some(function(s){return t1ExitSet.has(s)});_this2._log("t1ExitSet",t1.source.id,[].concat(_toConsumableArray(t1ExitSet)).map(function(s){return s.id}));_this2._log("t2ExitSet",t2.source.id,[].concat(_toConsumableArray(t2ExitSet)).map(function(s){return s.id}));_this2._log("hasIntersection",hasIntersection);if(hasIntersection){if(t2.source.descendants.indexOf(t1.source)>-1){transitionsToRemove.add(t2)}else{t1Preempted=true;return"break"}}};for(var _iterator5=filteredTransitions.iter()[Symbol.iterator](),_step5;!(_iteratorNormalCompletion5=(_step5=_iterator5.next()).done);_iteratorNormalCompletion5=true){var _ret=_loop();if(_ret==="break")break}}catch(err){_didIteratorError5=true;_iteratorError5=err}finally{try{if(!_iteratorNormalCompletion5&&_iterator5.return){_iterator5.return()}}finally{if(_didIteratorError5){throw _iteratorError5}}}if(!t1Preempted){var _iteratorNormalCompletion6=true;var _didIteratorError6=false;var _iteratorError6=undefined;try{for(var _iterator6=transitionsToRemove[Symbol.iterator](),_step6;!(_iteratorNormalCompletion6=(_step6=_iterator6.next()).done);_iteratorNormalCompletion6=true){var t3=_step6.value;filteredTransitions.remove(t3)}}catch(err){_didIteratorError6=true;_iteratorError6=err}finally{try{if(!_iteratorNormalCompletion6&&_iterator6.return){_iterator6.return()}}finally{if(_didIteratorError6){throw _iteratorError6}}}filteredTransitions.add(t1)}}}catch(err){_didIteratorError4=true;_iteratorError4=err}finally{try{if(!_iteratorNormalCompletion4&&_iterator4.return){_iterator4.return()}}finally{if(_didIteratorError4){throw _iteratorError4}}}return filteredTransitions}}]);return Statechart}(base.BaseInterpreter);base.Statechart=Statechart;base.InterpreterScriptingContext.invokers={"http://www.w3.org/TR/scxml/":function httpWwwW3OrgTRScxml(invokingSession,invokeObj,invokerExecutionContext,cb){var method=void 0,arg=void 0;if(invokeObj.constructorFunction){var fnModel=invokeObj.constructorFunction;var options={invokeid:invokeObj.id,params:invokeObj.params,parentSession:invokingSession,docUrl:invokeObj.docUrl};var model=invokerExecutionContext;var interpreter=void 0;if(options.parentSession instanceof Statechart){interpreter=new Statechart(fnModel,options)}cb(null,interpreter,fnModel,model);setImmediate(function(){return interpreter.start()})}else{throw new Error("Invoke object needs a constructorFunction property")}}};base.InterpreterScriptingContext.invokers[undefined]=base.InterpreterScriptingContext.invokers[null]=base.InterpreterScriptingContext.invokers["scxml"]=base.InterpreterScriptingContext.invokers["http://www.w3.org/TR/scxml/"];module.exports=base}).call(this,require("timers").setImmediate)},{"@scion-scxml/core-base":6,timers:105}],2:[function(require,module,exports){"use strict";function ArraySet(l){l=l||[];this.o=new Set(l)}ArraySet.prototype={add:function add(x){this.o.add(x)},remove:function remove(x){return this.o.delete(x)},union:function union(l){var _iteratorNormalCompletion=true;var _didIteratorError=false;var _iteratorError=undefined;try{for(var _iterator=l.o[Symbol.iterator](),_step;!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=true){var v=_step.value;this.o.add(v)}}catch(err){_didIteratorError=true;_iteratorError=err}finally{try{if(!_iteratorNormalCompletion&&_iterator.return){_iterator.return()}}finally{if(_didIteratorError){throw _iteratorError}}}return this},difference:function difference(l){var _iteratorNormalCompletion2=true;var _didIteratorError2=false;var _iteratorError2=undefined;try{for(var _iterator2=l.o[Symbol.iterator](),_step2;!(_iteratorNormalCompletion2=(_step2=_iterator2.next()).done);_iteratorNormalCompletion2=true){var v=_step2.value;this.o.delete(v)}}catch(err){_didIteratorError2=true;_iteratorError2=err}finally{try{if(!_iteratorNormalCompletion2&&_iterator2.return){_iterator2.return()}}finally{if(_didIteratorError2){throw _iteratorError2}}}return this},contains:function contains(x){return this.o.has(x)},iter:function iter(){return Array.from(this.o)},isEmpty:function isEmpty(){return!this.o.size},size:function size(){return this.o.size},equals:function equals(s2){if(this.o.size!==s2.size()){return false}var _iteratorNormalCompletion3=true;var _didIteratorError3=false;var _iteratorError3=undefined;try{for(var _iterator3=this.o[Symbol.iterator](),_step3;!(_iteratorNormalCompletion3=(_step3=_iterator3.next()).done);_iteratorNormalCompletion3=true){var v=_step3.value;if(!s2.contains(v)){return false}}}catch(err){_didIteratorError3=true;_iteratorError3=err}finally{try{if(!_iteratorNormalCompletion3&&_iterator3.return){_iterator3.return()}}finally{if(_didIteratorError3){throw _iteratorError3}}}return true},toString:function toString(){return this.o.size===0?"<empty>":Array.from(this.o).join(",\n")}};module.exports=ArraySet},{}],3:[function(require,module,exports){"use strict";var STATE_TYPES={BASIC:0,COMPOSITE:1,PARALLEL:2,HISTORY:3,INITIAL:4,FINAL:5};var SCXML_IOPROCESSOR_TYPE="http://www.w3.org/TR/scxml/#SCXMLEventProcessor";var HTTP_IOPROCESSOR_TYPE="http://www.w3.org/TR/scxml/#BasicHTTPEventProcessor";var RX_TRAILING_WILDCARD=/\.\*$/;module.exports={STATE_TYPES:STATE_TYPES,SCXML_IOPROCESSOR_TYPE:SCXML_IOPROCESSOR_TYPE,HTTP_IOPROCESSOR_TYPE:HTTP_IOPROCESSOR_TYPE,RX_TRAILING_WILDCARD:RX_TRAILING_WILDCARD}},{}],4:[function(require,module,exports){"use strict";var _typeof=typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"?function(obj){return typeof obj}:function(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj};var constants=require("./constants"),STATE_TYPES=constants.STATE_TYPES,RX_TRAILING_WILDCARD=constants.RX_TRAILING_WILDCARD;var printTrace=false;module.exports={extend:extend,transitionWithTargets:transitionWithTargets,transitionComparator:transitionComparator,initializeModel:initializeModel,isEventPrefixMatch:isEventPrefixMatch,isTransitionMatch:isTransitionMatch,scxmlPrefixTransitionSelector:scxmlPrefixTransitionSelector,eventlessTransitionSelector:eventlessTransitionSelector,getTransitionWithHigherSourceChildPriority:getTransitionWithHigherSourceChildPriority,sortInEntryOrder:sortInEntryOrder,getStateWithHigherSourceChildPriority:getStateWithHigherSourceChildPriority,initializeModelGeneratorFn:initializeModelGeneratorFn,deserializeSerializedConfiguration:deserializeSerializedConfiguration,deserializeHistory:deserializeHistory};function extend(to,from){Object.keys(from).forEach(function(k){to[k]=from[k]});return to}function transitionWithTargets(t){return t.targets}function transitionComparator(t1,t2){return t1.documentOrder-t2.documentOrder}function initializeModel(rootState,opts){var transitions=[],idToStateMap=new Map,documentOrder=0;var idCount={};function generateId(type){if(idCount[type]===undefined)idCount[type]=0;do{var count=idCount[type]++;var id="$generated-"+type+"-"+count}while(idToStateMap.has(id));return id}function wrapInFakeRootState(state){return{$deserializeDatamodel:state.$deserializeDatamodel||function(){},$serializeDatamodel:state.$serializeDatamodel||function(){return null},$idToStateMap:idToStateMap,docUrl:state.docUrl,name:state.name,states:[{$type:"initial",transitions:[{target:state}]},state]}}var statesWithInitialAttributes=[];function transitionToString(sourceState){return sourceState+" -- "+(this.events?"("+this.events.join(",")+")":null)+(this.cond?"["+this.cond.name+"]":"")+" --\x3e "+(this.targets?this.targets.join(","):null)}function stateToString(){return this.id}function populateStateIdMap(state){if(state.id){idToStateMap.set(state.id,state)}if(state.states){for(var j=0,len=state.states.length;j<len;j++){populateStateIdMap(state.states[j])}}}function traverse(ancestors,state){if(printTrace)state.toString=stateToString;if(state.transitions)transitions.push.apply(transitions,state.transitions);state.$type=state.$type||"state";state.ancestors=ancestors;state.depth=ancestors.length;state.parent=ancestors[0];state.documentOrder=documentOrder++;state.transitions=state.transitions||[];for(var j=0,len=state.transitions.length;j<len;j++){var transition=state.transitions[j];transition.documentOrder=documentOrder++;transition.source=state;if(printTrace)transition.toString=transitionToString.bind(transition,state)}if(state.states){var ancs=[state].concat(ancestors);for(var j=0,len=state.states.length;j<len;j++){traverse(ancs,state.states[j])}}switch(state.$type){case"parallel":state.typeEnum=STATE_TYPES.PARALLEL;state.isAtomic=false;break;case"initial":state.typeEnum=STATE_TYPES.INITIAL;state.isAtomic=true;break;case"history":state.typeEnum=STATE_TYPES.HISTORY;state.isAtomic=true;break;case"final":state.typeEnum=STATE_TYPES.FINAL;state.isAtomic=true;break;case"state":case"scxml":if(state.states&&state.states.length){state.typeEnum=STATE_TYPES.COMPOSITE;state.isAtomic=false}else{state.typeEnum=STATE_TYPES.BASIC;state.isAtomic=true}break;default:throw new Error("Unknown state type: "+state.$type)}if(state.states){state.descendants=state.states.concat(state.states.map(function(s){return s.descendants}).reduce(function(a,b){return a.concat(b)},[]))}else{state.descendants=[]}var initialChildren;if(state.typeEnum===STATE_TYPES.COMPOSITE){if(Array.isArray(state.initial)||typeof state.initial==="string"){statesWithInitialAttributes.push(state)}else{initialChildren=state.states.filter(function(child){return child.$type==="initial"});state.initialRef=[initialChildren.length?initialChildren[0]:state.states[0]];checkInitialRef(state)}}if(state.typeEnum===STATE_TYPES.COMPOSITE||state.typeEnum===STATE_TYPES.PARALLEL){var historyChildren=state.states.filter(function(s){return s.$type==="history"});state.historyRef=historyChildren}if(!state.id){state.id=generateId(state.$type);idToStateMap.set(state.id,state)}["onEntry","onExit"].forEach(function(prop){if(state[prop]){if(!Array.isArray(state[prop])){state[prop]=[state[prop]]}if(!state[prop].every(function(handler){return Array.isArray(handler)})){state[prop]=[state[prop]]}}});if(state.invokes&&!Array.isArray(state.invokes)){state.invokes=[state.invokes];state.invokes.forEach(function(invoke){if(invoke.finalize&&!Array.isArray(invoke.finalize)){invoke.finalize=[invoke.finalize]}})}}function checkInitialRef(state){if(!state.initialRef)throw new Error("Unable to locate initial state for composite state: "+state.id)}function connectIntialAttributes(){for(var j=0,len=statesWithInitialAttributes.length;j<len;j++){var s=statesWithInitialAttributes[j];var initialStates=Array.isArray(s.initial)?s.initial:[s.initial];s.initialRef=initialStates.map(function(initialState){return idToStateMap.get(initialState)});checkInitialRef(s)}}var RX_WHITESPACE=/\s+/;function connectTransitionGraph(){for(var i=0,len=transitions.length;i<len;i++){var t=transitions[i];if(t.onTransition&&!Array.isArray(t.onTransition)){t.onTransition=[t.onTransition]}if(typeof t.event==="string"){t.events=t.event.trim().split(RX_WHITESPACE)}delete t.event;if(t.targets||typeof t.target==="undefined"){continue}if(typeof t.target==="string"){var target=idToStateMap.get(t.target);if(!target)throw new Error("Unable to find target state with id "+t.target);t.target=target;t.targets=[t.target]}else if(Array.isArray(t.target)){t.targets=t.target.map(function(target){if(typeof target==="string"){target=idToStateMap.get(target);if(!target)throw new Error("Unable to find target state with id "+t.target);return target}else{return target}})}else if(_typeof(t.target)==="object"){t.targets=[t.target]}else{throw new Error("Transition target has unknown type: "+t.target)}}for(var i=0,len=transitions.length;i<len;i++){var t=transitions[i];if(t.targets)t.lcca=getLCCA(t.source,t.targets[0]);t.scope=getScope(t)}}function getScope(transition){var transitionIsReallyInternal=transition.type==="internal"&&transition.source.typeEnum===STATE_TYPES.COMPOSITE&&transition.source.parent&&transition.targets&&transition.targets.every(function(target){return transition.source.descendants.indexOf(target)>-1});if(!transition.targets){return null}else if(transitionIsReallyInternal){return transition.source}else{return transition.lcca}}function getLCCA(s1,s2){var commonAncestors=[];for(var j=0,len=s1.ancestors.length;j<len;j++){var anc=s1.ancestors[j];if((opts&&opts.legacySemantics?anc.typeEnum===STATE_TYPES.COMPOSITE:anc.typeEnum===STATE_TYPES.COMPOSITE||anc.typeEnum===STATE_TYPES.PARALLEL)&&anc.descendants.indexOf(s2)>-1){commonAncestors.push(anc)}}if(!commonAncestors.length)throw new Error("Could not find LCA for states.");return commonAncestors[0]}populateStateIdMap(rootState);var fakeRootState=wrapInFakeRootState(rootState);traverse([],fakeRootState);connectTransitionGraph();connectIntialAttributes();return fakeRootState}function isEventPrefixMatch(prefix,fullName){prefix=prefix.replace(RX_TRAILING_WILDCARD,"");if(prefix===fullName){return true}if(prefix.length>fullName.length){return false}if(fullName.charAt(prefix.length)!=="."){return false}return fullName.indexOf(prefix)===0}function isTransitionMatch(t,eventName){return t.events.some(function(tEvent){return tEvent==="*"||isEventPrefixMatch(tEvent,eventName)})}function scxmlPrefixTransitionSelector(t,event,evaluator,selectEventlessTransitions){return(selectEventlessTransitions?!t.events:t.events&&event&&event.name&&isTransitionMatch(t,event.name))&&(!t.cond||evaluator(t.cond))}function eventlessTransitionSelector(state){return state.transitions.filter(function(transition){return!transition.events||transition.events&&transition.events.length===0})}function getTransitionWithHigherSourceChildPriority(_args){var t1=_args[0],t2=_args[1];var r=getStateWithHigherSourceChildPriority(t1.source,t2.source);if(t1.source.depth<t2.source.depth){return t2}else if(t2.source.depth<t1.source.depth){return t1}else{if(t1.documentOrder<t2.documentOrder){return t1}else{return t2}}}function sortInEntryOrder(s1,s2){return getStateWithHigherSourceChildPriority(s1,s2)*-1}function getStateWithHigherSourceChildPriority(s1,s2){if(s1.depth>s2.depth){return-1}else if(s1.depth<s2.depth){return 1}else{if(s1.documentOrder<s2.documentOrder){return 1}else if(s1.documentOrder>s2.documentOrder){return-1}else{return 0}}}function initializeModelGeneratorFn(modelFn,opts,interpreter){return modelFn.call(interpreter,opts._x,opts._x._sessionid,opts._x._ioprocessors,interpreter.isIn.bind(interpreter))}function deserializeSerializedConfiguration(serializedConfiguration,idToStateMap){return serializedConfiguration.map(function(id){var state=idToStateMap.get(id);if(!state)throw new Error("Error loading serialized configuration. Unable to locate state with id "+id);return state})}function deserializeHistory(serializedHistory,idToStateMap){var o={};Object.keys(serializedHistory).forEach(function(sid){o[sid]=serializedHistory[sid].map(function(id){var state=idToStateMap.get(id);if(!state)throw new Error("Error loading serialized history. Unable to locate state with id "+id);return state})});return o}},{"./constants":3}],5:[function(require,module,exports){"use strict";var constants=require("./constants");var query={isDescendant:function isDescendant(s1,s2){return s2.descendants.indexOf(s1)>-1},getAncestors:function getAncestors(s,root){var ancestors,index,state;index=s.ancestors.indexOf(root);if(index>-1){return s.ancestors.slice(0,index)}else{return s.ancestors}},isOrthogonalTo:function isOrthogonalTo(s1,s2){return!this.isAncestrallyRelatedTo(s1,s2)&&this.getLCA(s1,s2).typeEnum===constants.STATE_TYPES.PARALLEL},isAncestrallyRelatedTo:function isAncestrallyRelatedTo(s1,s2){return this.getAncestorsOrSelf(s2).indexOf(s1)>-1||this.getAncestorsOrSelf(s1).indexOf(s2)>-1},getAncestorsOrSelf:function getAncestorsOrSelf(s,root){return[s].concat(query.getAncestors(s,root))},getDescendantsOrSelf:function getDescendantsOrSelf(s){return[s].concat(s.descendants)},getLCA:function getLCA(s1,s2){var commonAncestors=this.getAncestors(s1).filter(function(a){return a.descendants.indexOf(s2)>-1},this);return commonAncestors[0]}};module.exports=query},{"./constants":3}],6:[function(require,module,exports){(function(process,setImmediate){"use strict";var _slicedToArray=function(){function sliceIterator(arr,i){var _arr=[];var _n=true;var _d=false;var _e=undefined;try{for(var _i=arr[Symbol.iterator](),_s;!(_n=(_s=_i.next()).done);_n=true){_arr.push(_s.value);if(i&&_arr.length===i)break}}catch(err){_d=true;_e=err}finally{try{if(!_n&&_i["return"])_i["return"]()}finally{if(_d)throw _e}}return _arr}return function(arr,i){if(Array.isArray(arr)){return arr}else if(Symbol.iterator in Object(arr)){return sliceIterator(arr,i)}else{throw new TypeError("Invalid attempt to destructure non-iterable instance")}}}();var _typeof=typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"?function(obj){return typeof obj}:function(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj};var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor}}();function _toConsumableArray(arr){if(Array.isArray(arr)){for(var i=0,arr2=Array(arr.length);i<arr.length;i++){arr2[i]=arr[i]}return arr2}else{return Array.from(arr)}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _possibleConstructorReturn(self,call){if(!self){throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}return call&&(typeof call==="object"||typeof call==="function")?call:self}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function, not "+typeof superClass)}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:false,writable:true,configurable:true}});if(superClass)Object.setPrototypeOf?Object.setPrototypeOf(subClass,superClass):subClass.__proto__=superClass}var EventEmitter=require("tiny-events").EventEmitter,util=require("util"),ArraySet=require("./ArraySet"),constants=require("./constants"),helpers=require("./helpers"),query=require("./query"),extend=helpers.extend,transitionWithTargets=helpers.transitionWithTargets,transitionComparator=helpers.transitionComparator,initializeModel=helpers.initializeModel,isEventPrefixMatch=helpers.isEventPrefixMatch,isTransitionMatch=helpers.isTransitionMatch,scxmlPrefixTransitionSelector=helpers.scxmlPrefixTransitionSelector,eventlessTransitionSelector=helpers.eventlessTransitionSelector,getTransitionWithHigherSourceChildPriority=helpers.getTransitionWithHigherSourceChildPriority,sortInEntryOrder=helpers.sortInEntryOrder,getStateWithHigherSourceChildPriority=helpers.getStateWithHigherSourceChildPriority,initializeModelGeneratorFn=helpers.initializeModelGeneratorFn,deserializeSerializedConfiguration=helpers.deserializeSerializedConfiguration,deserializeHistory=helpers.deserializeHistory,BASIC=constants.STATE_TYPES.BASIC,COMPOSITE=constants.STATE_TYPES.COMPOSITE,PARALLEL=constants.STATE_TYPES.PARALLEL,HISTORY=constants.STATE_TYPES.HISTORY,INITIAL=constants.STATE_TYPES.INITIAL,FINAL=constants.STATE_TYPES.FINAL,SCXML_IOPROCESSOR_TYPE=constants.SCXML_IOPROCESSOR_TYPE;var printTrace=typeof process!=="undefined"&&!!process.env.DEBUG;var BaseInterpreter=function(_EventEmitter){_inherits(BaseInterpreter,_EventEmitter);function BaseInterpreter(modelOrModelFactory,opts){_classCallCheck(this,BaseInterpreter);var _this=_possibleConstructorReturn(this,(BaseInterpreter.__proto__||Object.getPrototypeOf(BaseInterpreter)).call(this));_this.opts=opts;_this.opts.InterpreterScriptingContext=_this.opts.InterpreterScriptingContext||InterpreterScriptingContext;_this._isStepping=false;_this._scriptingContext=_this.opts.interpreterScriptingContext||(_this.opts.InterpreterScriptingContext?new _this.opts.InterpreterScriptingContext(_this):{});_this.opts.generateSessionid=_this.opts.generateSessionid||BaseInterpreter.generateSessionid;_this.opts.sessionid=_this.opts.sessionid||_this.opts.generateSessionid();_this.opts.sessionRegistry=_this.opts.sessionRegistry||BaseInterpreter.sessionRegistry;_this.opts.invokerExecutionContext=opts.invokerExecutionContext||modelOrModelFactory._executionContext;var _ioprocessors={};_ioprocessors[SCXML_IOPROCESSOR_TYPE]={location:"#_scxml_"+_this.opts.sessionid};_ioprocessors.scxml=_ioprocessors[SCXML_IOPROCESSOR_TYPE];_this.opts._x={_sessionid:_this.opts.sessionid,_ioprocessors:_ioprocessors};var model;if(typeof modelOrModelFactory==="function"){model=initializeModelGeneratorFn(modelOrModelFactory,_this.opts,_this)}else if((typeof modelOrModelFactory==="undefined"?"undefined":_typeof(modelOrModelFactory))==="object"){model=JSON.parse(JSON.stringify(modelOrModelFactory))}else{throw new Error("Unexpected model type. Expected model factory function, or scjson object.")}_this._model=initializeModel(model,_this.opts);_this.opts.console=_this.opts.console||(typeof console==="undefined"?{log:function log(){}}:console);_this.opts.Set=_this.opts.Set||ArraySet;_this.opts.priorityComparisonFn=_this.opts.priorityComparisonFn||getTransitionWithHigherSourceChildPriority;_this.opts.transitionSelector=_this.opts.transitionSelector||scxmlPrefixTransitionSelector;_this.opts.sessionRegistry.set(String(_this.opts.sessionid),_this);_this._scriptingContext.log=_this._scriptingContext.log||function log(){if(this.opts.console.log.apply){this.opts.console.log.apply(this.opts.console,arguments)}else{this.opts.console.log(Array.prototype.slice.apply(arguments).join(","))}}.bind(_this);_this._externalEventQueue=[];_this._internalEventQueue=[];if(_this.opts.params){_this._model.$deserializeDatamodel(_this.opts.params)}if(_this.opts.snapshot){_this._configuration=new _this.opts.Set(deserializeSerializedConfiguration(_this.opts.snapshot[0],_this._model.$idToStateMap));_this._historyValue=deserializeHistory(_this.opts.snapshot[1],_this._model.$idToStateMap);_this._isInFinalState=_this.opts.snapshot[2];_this._model.$deserializeDatamodel(_this.opts.snapshot[3]);_this._internalEventQueue=_this.opts.snapshot[4]}else{_this._configuration=new _this.opts.Set;_this._historyValue={};_this._isInFinalState=false}BaseInterpreter.EVENTS.forEach(function(event){this.on(event,this._log.bind(this,event))},_this);module.exports.emit("new",_this);return _this}_createClass(BaseInterpreter,[{key:"cancel",value:function cancel(){delete this.opts.parentSession;if(this._isInFinalState)return;this._isInFinalState=true;this._log("session cancelled "+this.opts.invokeid);this._exitInterpreter(null)}},{key:"_exitInterpreter",value:function _exitInterpreter(event){var _this2=this;this._cancelAllDelayedSends();var statesToExit=this._getFullConfiguration().sort(getStateWithHigherSourceChildPriority);for(var j=0,len=statesToExit.length;j<len;j++){var stateExited=statesToExit[j];if(stateExited.onExit!==undefined){for(var exitIdx=0,exitLen=stateExited.onExit.length;exitIdx<exitLen;exitIdx++){var block=stateExited.onExit[exitIdx];for(var blockIdx=0,blockLen=block.length;blockIdx<blockLen;blockIdx++){var actionRef=block[blockIdx];try{actionRef.call(this._scriptingContext,null)}catch(e){this._handleError(e,actionRef);break}}}}if(stateExited.invokes)stateExited.invokes.forEach(function(invoke){_this2._scriptingContext.cancelInvoke(invoke.id)});if(stateExited.$type==="final"&&stateExited.parent.$type==="scxml"){if(this.opts.parentSession){this._scriptingContext.send({target:"#_parent",name:"done.invoke."+this.opts.invokeid,data:stateExited.donedata&&stateExited.donedata.call(this._scriptingContext,event)})}this.opts.sessionRegistry.delete(this.opts.sessionid);this.emit("onExitInterpreter",event)}}}},{key:"start",value:function start(){this._initStart();this._performBigStep();return this.getConfiguration()}},{key:"startAsync",value:function startAsync(cb){cb=this._initStart(cb);this.genAsync(null,cb)}},{key:"_initStart",value:function _initStart(cb){var _this3=this;if(typeof cb!=="function"){cb=nop}this._log("performing initial big step");this._model.initialRef.forEach(function(s){return _this3._configuration.add(s)});return cb}},{key:"getConfiguration",value:function getConfiguration(){return this._configuration.iter().map(function(s){return s.id})}},{key:"_getFullConfiguration",value:function _getFullConfiguration(){return this._configuration.iter().map(function(s){return[s].concat(query.getAncestors(s))},this).reduce(function(a,b){return a.concat(b)},[]).reduce(function(a,b){return a.indexOf(b)>-1?a:a.concat(b)},[])}},{key:"getFullConfiguration",value:function getFullConfiguration(){return this._getFullConfiguration().map(function(s){return s.id})}},{key:"isIn",value:function isIn(stateName){return this.getFullConfiguration().indexOf(stateName)>-1}},{key:"isFinal",value:function isFinal(){return this._isInFinalState}},{key:"_performBigStep",value:function _performBigStep(e){var currentEvent=void 0,keepGoing=void 0,allStatesExited=void 0,allStatesEntered=void 0;var _startBigStep2=this._startBigStep(e);var _startBigStep3=_slicedToArray(_startBigStep2,4);allStatesExited=_startBigStep3[0];allStatesEntered=_startBigStep3[1];keepGoing=_startBigStep3[2];currentEvent=_startBigStep3[3];while(keepGoing){var _selectTransitionsAnd=this._selectTransitionsAndPerformSmallStep(currentEvent,allStatesEntered,allStatesExited);var _selectTransitionsAnd2=_slicedToArray(_selectTransitionsAnd,2);currentEvent=_selectTransitionsAnd2[0];keepGoing=_selectTransitionsAnd2[1]}this._finishBigStep(currentEvent,allStatesEntered,allStatesExited)}},{key:"_selectTransitionsAndPerformSmallStep",value:function _selectTransitionsAndPerformSmallStep(currentEvent,allStatesEntered,allStatesExited){ var selectedTransitions=this._selectTransitions(currentEvent,true);if(selectedTransitions.isEmpty()){var ev=this._internalEventQueue.shift();if(ev){currentEvent=ev;selectedTransitions=this._selectTransitions(currentEvent,false)}}if(!selectedTransitions.isEmpty()){this.emit("onSmallStepBegin",currentEvent);var statesExited=void 0,statesEntered=void 0;var _performSmallStep2=this._performSmallStep(currentEvent,selectedTransitions);var _performSmallStep3=_slicedToArray(_performSmallStep2,2);statesExited=_performSmallStep3[0];statesEntered=_performSmallStep3[1];if(statesExited)statesExited.forEach(function(s){return allStatesExited.add(s)});if(statesEntered)statesEntered.forEach(function(s){return allStatesEntered.add(s)});this.emit("onSmallStepEnd",currentEvent)}var keepGoing=!selectedTransitions.isEmpty()||this._internalEventQueue.length;return[currentEvent,keepGoing]}},{key:"_startBigStep",value:function _startBigStep(e){var _this4=this;this.emit("onBigStepBegin",e);this._configuration.iter().forEach(function(state){if(state.invokes)state.invokes.forEach(function(invoke){if(invoke.autoforward){_this4._scriptingContext.send({target:"#_"+invoke.id,name:e.name,data:e.data})}if(invoke.id===e.invokeid){if(invoke.finalize)invoke.finalize.forEach(function(action){return _this4._evaluateAction(e,action)})}})});if(e)this._internalEventQueue.push(e);var allStatesExited=new Set,allStatesEntered=new Set;var keepGoing=true;var currentEvent=e;return[allStatesEntered,allStatesExited,keepGoing,currentEvent]}},{key:"_finishBigStep",value:function _finishBigStep(e,allStatesEntered,allStatesExited,cb){var _this5=this;var statesToInvoke=Array.from(new Set([].concat(_toConsumableArray(allStatesEntered)).filter(function(s){return s.invokes&&!allStatesExited.has(s)}))).sort(sortInEntryOrder);statesToInvoke.forEach(function(s){s.invokes.forEach(function(f){return _this5._evaluateAction(e,f)})});allStatesExited.forEach(function(s){if(s.invokes)s.invokes.forEach(function(invoke){_this5._scriptingContext.cancelInvoke(invoke.id)})});this._isInFinalState=this._configuration.iter().every(function(s){return s.typeEnum===FINAL});if(this._isInFinalState){this._exitInterpreter(e)}this.emit("onBigStepEnd",e);if(cb)cb(undefined,this.getConfiguration())}},{key:"_cancelAllDelayedSends",value:function _cancelAllDelayedSends(){var _iteratorNormalCompletion=true;var _didIteratorError=false;var _iteratorError=undefined;try{for(var _iterator=this._scriptingContext._timeouts[Symbol.iterator](),_step;!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=true){var timeoutOptions=_step.value;if(!timeoutOptions.sendOptions.delay)continue;this._log("cancelling delayed send",timeoutOptions);clearTimeout(timeoutOptions.timeoutHandle);this._scriptingContext._timeouts.delete(timeoutOptions)}}catch(err){_didIteratorError=true;_iteratorError=err}finally{try{if(!_iteratorNormalCompletion&&_iterator.return){_iterator.return()}}finally{if(_didIteratorError){throw _iteratorError}}}Object.keys(this._scriptingContext._timeoutMap).forEach(function(key){delete this._scriptingContext._timeoutMap[key]},this)}},{key:"_performBigStepAsync",value:function _performBigStepAsync(e,cb){var currentEvent=void 0,keepGoing=void 0,allStatesExited=void 0,allStatesEntered=void 0;var _startBigStep4=this._startBigStep(e);var _startBigStep5=_slicedToArray(_startBigStep4,4);allStatesExited=_startBigStep5[0];allStatesEntered=_startBigStep5[1];keepGoing=_startBigStep5[2];currentEvent=_startBigStep5[3];function nextStep(emit){this.emit(emit);var _selectTransitionsAnd3=this._selectTransitionsAndPerformSmallStep(currentEvent,allStatesEntered,allStatesExited);var _selectTransitionsAnd4=_slicedToArray(_selectTransitionsAnd3,2);currentEvent=_selectTransitionsAnd4[0];keepGoing=_selectTransitionsAnd4[1];if(keepGoing){this.emit("onBigStepSuspend");setImmediate(nextStep.bind(this,"onBigStepResume"))}else{this._finishBigStep(currentEvent,allStatesEntered,allStatesExited,cb)}}nextStep.call(this,"onBigStepBegin")}},{key:"_performSmallStep",value:function _performSmallStep(currentEvent,selectedTransitions){this._log("selecting transitions with currentEvent",currentEvent);this._log("selected transitions",selectedTransitions);var statesExited=void 0,statesEntered=void 0;if(!selectedTransitions.isEmpty()){var selectedTransitionsWithTargets=new this.opts.Set(selectedTransitions.iter().filter(transitionWithTargets));statesExited=this._exitStates(currentEvent,selectedTransitionsWithTargets);this._executeTransitions(currentEvent,selectedTransitions);statesEntered=this._enterStates(currentEvent,selectedTransitionsWithTargets);this._log("new configuration ",this._configuration)}return[statesExited,statesEntered]}},{key:"_exitStates",value:function _exitStates(currentEvent,selectedTransitionsWithTargets){var basicStatesExited=void 0,statesExited=void 0;var _getStatesExited2=this._getStatesExited(selectedTransitionsWithTargets);var _getStatesExited3=_slicedToArray(_getStatesExited2,2);basicStatesExited=_getStatesExited3[0];statesExited=_getStatesExited3[1];this._log("exiting states");for(var j=0,len=statesExited.length;j<len;j++){var stateExited=statesExited[j];if(stateExited.isAtomic)this._configuration.remove(stateExited);this._log("exiting ",stateExited.id);this.emit("onExit",stateExited.id);if(stateExited.onExit!==undefined){for(var exitIdx=0,exitLen=stateExited.onExit.length;exitIdx<exitLen;exitIdx++){var block=stateExited.onExit[exitIdx];for(var blockIdx=0,blockLen=block.length;blockIdx<blockLen;blockIdx++){var actionRef=block[blockIdx];try{actionRef.call(this._scriptingContext,currentEvent)}catch(e){this._handleError(e,actionRef);break}}}}var f;if(stateExited.historyRef){var _iteratorNormalCompletion2=true;var _didIteratorError2=false;var _iteratorError2=undefined;try{for(var _iterator2=stateExited.historyRef[Symbol.iterator](),_step2;!(_iteratorNormalCompletion2=(_step2=_iterator2.next()).done);_iteratorNormalCompletion2=true){var historyRef=_step2.value;if(historyRef.isDeep){f=function f(s0){return s0.typeEnum===BASIC&&stateExited.descendants.indexOf(s0)>-1}}else{f=function f(s0){return s0.parent===stateExited}}this._historyValue[historyRef.id]=statesExited.filter(f)}}catch(err){_didIteratorError2=true;_iteratorError2=err}finally{try{if(!_iteratorNormalCompletion2&&_iterator2.return){_iterator2.return()}}finally{if(_didIteratorError2){throw _iteratorError2}}}}}return statesExited}},{key:"_getStatesExited",value:function _getStatesExited(transitions){var statesExited=new this.opts.Set;var basicStatesExited=new this.opts.Set;var transitionList=transitions.iter();for(var txIdx=0,txLen=transitionList.length;txIdx<txLen;txIdx++){var transition=transitionList[txIdx];var scope=transition.scope,desc=scope.descendants;var configList=this._configuration.iter();for(var cfgIdx=0,cfgLen=configList.length;cfgIdx<cfgLen;cfgIdx++){var state=configList[cfgIdx];if(desc.indexOf(state)>-1){basicStatesExited.add(state);statesExited.add(state);var ancestors=query.getAncestors(state,scope);for(var ancIdx=0,ancLen=ancestors.length;ancIdx<ancLen;ancIdx++){statesExited.add(ancestors[ancIdx])}}}}var sortedStatesExited=statesExited.iter().sort(getStateWithHigherSourceChildPriority);return[basicStatesExited,sortedStatesExited]}},{key:"_executeTransitions",value:function _executeTransitions(currentEvent,selectedTransitions){var sortedTransitions=selectedTransitions.iter().sort(transitionComparator);this._log("executing transitition actions");for(var stxIdx=0,len=sortedTransitions.length;stxIdx<len;stxIdx++){var transition=sortedTransitions[stxIdx];var targetIds=transition.targets&&transition.targets.map(function(target){return target.id});this.emit("onTransition",transition.source.id,targetIds,transition.source.transitions.indexOf(transition));if(transition.onTransition!==undefined){for(var txIdx=0,txLen=transition.onTransition.length;txIdx<txLen;txIdx++){var actionRef=transition.onTransition[txIdx];try{actionRef.call(this._scriptingContext,currentEvent)}catch(e){this._handleError(e,actionRef);break}}}}}},{key:"_enterStates",value:function _enterStates(currentEvent,selectedTransitionsWithTargets){var _this6=this;this._log("entering states");var statesEntered=new Set;var statesForDefaultEntry=new Set;var defaultHistoryContent={};this._computeEntrySet(selectedTransitionsWithTargets,statesEntered,statesForDefaultEntry,defaultHistoryContent);statesEntered=Array.from(statesEntered).sort(sortInEntryOrder);this._log("statesEntered ",statesEntered);for(var enterIdx=0,enterLen=statesEntered.length;enterIdx<enterLen;enterIdx++){var stateEntered=statesEntered[enterIdx];if(stateEntered.isAtomic)this._configuration.add(stateEntered);this._log("entering",stateEntered.id);this.emit("onEntry",stateEntered.id);if(stateEntered.onEntry!==undefined){for(var entryIdx=0,entryLen=stateEntered.onEntry.length;entryIdx<entryLen;entryIdx++){var block=stateEntered.onEntry[entryIdx];for(var blockIdx=0,blockLen=block.length;blockIdx<blockLen;blockIdx++){var actionRef=block[blockIdx];try{actionRef.call(this._scriptingContext,currentEvent)}catch(e){this._handleError(e,actionRef);break}}}}if(statesForDefaultEntry.has(stateEntered)){var _iteratorNormalCompletion3=true;var _didIteratorError3=false;var _iteratorError3=undefined;try{for(var _iterator3=stateEntered.initialRef[Symbol.iterator](),_step3;!(_iteratorNormalCompletion3=(_step3=_iterator3.next()).done);_iteratorNormalCompletion3=true){var initialState=_step3.value;this.emit("onDefaultEntry",initialState.id);if(initialState.typeEnum===INITIAL){var transition=initialState.transitions[0];if(transition.onTransition!==undefined){this._log("executing initial transition content for initial state of parent state",stateEntered.id);for(var txIdx=0,txLen=transition.onTransition.length;txIdx<txLen;txIdx++){var _actionRef=transition.onTransition[txIdx];try{_actionRef.call(this._scriptingContext,currentEvent)}catch(e){this._handleError(e,_actionRef);break}}}}}}catch(err){_didIteratorError3=true;_iteratorError3=err}finally{try{if(!_iteratorNormalCompletion3&&_iterator3.return){_iterator3.return()}}finally{if(_didIteratorError3){throw _iteratorError3}}}}if(defaultHistoryContent[stateEntered.id]){var _transition=defaultHistoryContent[stateEntered.id];if(_transition.onTransition!==undefined){this._log("executing history transition content for history state of parent state",stateEntered.id);for(var txIdx=0,txLen=_transition.onTransition.length;txIdx<txLen;txIdx++){var _actionRef2=_transition.onTransition[txIdx];try{_actionRef2.call(this._scriptingContext,currentEvent)}catch(e){this._handleError(e,_actionRef2);break}}}}}for(var enterIdx=0,enterLen=statesEntered.length;enterIdx<enterLen;enterIdx++){var stateEntered=statesEntered[enterIdx];if(stateEntered.typeEnum===FINAL){var parent=stateEntered.parent;var grandparent=parent.parent;this._internalEventQueue.push({name:"done.state."+parent.id,data:stateEntered.donedata&&stateEntered.donedata.call(this._scriptingContext,currentEvent)});if(grandparent&&grandparent.typeEnum===PARALLEL){if(grandparent.states.every(function(s){return _this6.isInFinalState(s)})){this._internalEventQueue.push({name:"done.state."+grandparent.id})}}}}return statesEntered}},{key:"_getEffectiveTargetStates",value:function _getEffectiveTargetStates(transition){var targets=new Set;var _iteratorNormalCompletion4=true;var _didIteratorError4=false;var _iteratorError4=undefined;try{for(var _iterator4=transition.targets[Symbol.iterator](),_step4;!(_iteratorNormalCompletion4=(_step4=_iterator4.next()).done);_iteratorNormalCompletion4=true){var s=_step4.value;if(s.typeEnum===HISTORY){if(s.id in this._historyValue)this._historyValue[s.id].forEach(function(state){return targets.add(state)});else[].concat(_toConsumableArray(this._getEffectiveTargetStates(s.transitions[0]))).forEach(function(state){return targets.add(state)})}else{targets.add(s)}}}catch(err){_didIteratorError4=true;_iteratorError4=err}finally{try{if(!_iteratorNormalCompletion4&&_iterator4.return){_iterator4.return()}}finally{if(_didIteratorError4){throw _iteratorError4}}}return targets}},{key:"_computeEntrySet",value:function _computeEntrySet(transitions,statesToEnter,statesForDefaultEntry,defaultHistoryContent){var _iteratorNormalCompletion5=true;var _didIteratorError5=false;var _iteratorError5=undefined;try{for(var _iterator5=transitions.iter()[Symbol.iterator](),_step5;!(_iteratorNormalCompletion5=(_step5=_iterator5.next()).done);_iteratorNormalCompletion5=true){var t=_step5.value;var _iteratorNormalCompletion6=true;var _didIteratorError6=false;var _iteratorError6=undefined;try{for(var _iterator6=t.targets[Symbol.iterator](),_step6;!(_iteratorNormalCompletion6=(_step6=_iterator6.next()).done);_iteratorNormalCompletion6=true){var s=_step6.value;this._addDescendantStatesToEnter(s,statesToEnter,statesForDefaultEntry,defaultHistoryContent)}}catch(err){_didIteratorError6=true;_iteratorError6=err}finally{try{if(!_iteratorNormalCompletion6&&_iterator6.return){_iterator6.return()}}finally{if(_didIteratorError6){throw _iteratorError6}}}var ancestor=t.scope;var _iteratorNormalCompletion7=true;var _didIteratorError7=false;var _iteratorError7=undefined;try{for(var _iterator7=this._getEffectiveTargetStates(t)[Symbol.iterator](),_step7;!(_iteratorNormalCompletion7=(_step7=_iterator7.next()).done);_iteratorNormalCompletion7=true){var _s=_step7.value;this._addAncestorStatesToEnter(_s,ancestor,statesToEnter,statesForDefaultEntry,defaultHistoryContent)}}catch(err){_didIteratorError7=true;_iteratorError7=err}finally{try{if(!_iteratorNormalCompletion7&&_iterator7.return){_iterator7.return()}}finally{if(_didIteratorError7){throw _iteratorError7}}}}}catch(err){_didIteratorError5=true;_iteratorError5=err}finally{try{if(!_iteratorNormalCompletion5&&_iterator5.return){_iterator5.return()}}finally{if(_didIteratorError5){throw _iteratorError5}}}}},{key:"_computeExitSet",value:function _computeExitSet(transitions){var statesToExit=new Set;var _iteratorNormalCompletion8=true;var _didIteratorError8=false;var _iteratorError8=undefined;try{for(var _iterator8=transitions[Symbol.iterator](),_step8;!(_iteratorNormalCompletion8=(_step8=_iterator8.next()).done);_iteratorNormalCompletion8=true){var t=_step8.value;if(t.targets){var scope=t.scope;var _iteratorNormalCompletion9=true;var _didIteratorError9=false;var _iteratorError9=undefined;try{for(var _iterator9=this._getFullConfiguration()[Symbol.iterator](),_step9;!(_iteratorNormalCompletion9=(_step9=_iterator9.next()).done);_iteratorNormalCompletion9=true){var s=_step9.value;if(query.isDescendant(s,scope))statesToExit.add(s)}}catch(err){_didIteratorError9=true;_iteratorError9=err}finally{try{if(!_iteratorNormalCompletion9&&_iterator9.return){_iterator9.return()}}finally{if(_didIteratorError9){throw _iteratorError9}}}}}}catch(err){_didIteratorError8=true;_iteratorError8=err}finally{try{if(!_iteratorNormalCompletion8&&_iterator8.return){_iterator8.return()}}finally{if(_didIteratorError8){throw _iteratorError8}}}return statesToExit}},{key:"_addAncestorStatesToEnter",value:function _addAncestorStatesToEnter(state,ancestor,statesToEnter,statesForDefaultEntry,defaultHistoryContent){var _this7=this;var traverse=function traverse(anc){if(anc.typeEnum===PARALLEL){var _iteratorNormalCompletion10=true;var _didIteratorError10=false;var _iteratorError10=undefined;try{var _loop=function _loop(){var child=_step10.value;if(child.typeEnum!==HISTORY&&![].concat(_toConsumableArray(statesToEnter)).some(function(s){return query.isDescendant(s,child)})){_this7._addDescendantStatesToEnter(child,statesToEnter,statesForDefaultEntry,defaultHistoryContent)}};for(var _iterator10=anc.states[Symbol.iterator](),_step10;!(_iteratorNormalCompletion10=(_step10=_iterator10.next()).done);_iteratorNormalCompletion10=true){_loop()}}catch(err){_didIteratorError10=true;_iteratorError10=err}finally{try{if(!_iteratorNormalCompletion10&&_iterator10.return){_iterator10.return()}}finally{if(_didIteratorError10){throw _iteratorError10}}}}};var _iteratorNormalCompletion11=true;var _didIteratorError11=false;var _iteratorError11=undefined;try{for(var _iterator11=query.getAncestors(state,ancestor)[Symbol.iterator](),_step11;!(_iteratorNormalCompletion11=(_step11=_iterator11.next()).done);_iteratorNormalCompletion11=true){var anc=_step11.value;statesToEnter.add(anc);traverse(anc)}}catch(err){_didIteratorError11=true;_iteratorError11=err}finally{try{if(!_iteratorNormalCompletion11&&_iterator11.return){_iterator11.return()}}finally{if(_didIteratorError11){throw _iteratorError11}}}traverse(ancestor)}},{key:"_addDescendantStatesToEnter",value:function _addDescendantStatesToEnter(state,statesToEnter,statesForDefaultEntry,defaultHistoryContent){var _this8=this;if(state.typeEnum===HISTORY){if(this._historyValue[state.id]){var _iteratorNormalCompletion12=true;var _didIteratorError12=false;var _iteratorError12=undefined;try{for(var _iterator12=this._historyValue[state.id][Symbol.iterator](),_step12;!(_iteratorNormalCompletion12=(_step12=_iterator12.next()).done);_iteratorNormalCompletion12=true){var s=_step12.value;this._addDescendantStatesToEnter(s,statesToEnter,statesForDefaultEntry,defaultHistoryContent)}}catch(err){_didIteratorError12=true;_iteratorError12=err}finally{try{if(!_iteratorNormalCompletion12&&_iterator12.return){_iterator12.return()}}finally{if(_didIteratorError12){throw _iteratorError12}}}var _iteratorNormalCompletion13=true;var _didIteratorError13=false;var _iteratorError13=undefined;try{for(var _iterator13=this._historyValue[state.id][Symbol.iterator](),_step13;!(_iteratorNormalCompletion13=(_step13=_iterator13.next()).done);_iteratorNormalCompletion13=true){var _s2=_step13.value;this._addAncestorStatesToEnter(_s2,state.parent,statesToEnter,statesForDefaultEntry,defaultHistoryContent)}}catch(err){_didIteratorError13=true;_iteratorError13=err}finally{try{if(!_iteratorNormalCompletion13&&_iterator13.return){_iterator13.return()}}finally{if(_didIteratorError13){throw _iteratorError13}}}}else{defaultHistoryContent[state.parent.id]=state.transitions[0];var