xstate 4.35.2 → 5.0.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +25 -16
- package/actions/dist/xstate-actions.cjs.d.ts +1 -0
- package/actions/dist/xstate-actions.cjs.dev.js +30 -0
- package/actions/dist/xstate-actions.cjs.js +7 -0
- package/actions/dist/xstate-actions.cjs.prod.js +30 -0
- package/actions/dist/xstate-actions.esm.js +2 -0
- package/actions/dist/xstate-actions.umd.min.js +2 -0
- package/actions/dist/xstate-actions.umd.min.js.map +1 -0
- package/actions/dynamicAction.ts +34 -0
- package/actions/package.json +8 -0
- package/actors/dist/xstate-actors.cjs.d.ts +1 -0
- package/actors/dist/xstate-actors.cjs.dev.js +20 -0
- package/actors/dist/xstate-actors.cjs.js +7 -0
- package/actors/dist/xstate-actors.cjs.prod.js +20 -0
- package/actors/dist/xstate-actors.esm.js +2 -0
- package/actors/dist/xstate-actors.umd.min.js +2 -0
- package/actors/dist/xstate-actors.umd.min.js.map +1 -0
- package/actors/package.json +8 -0
- package/dev/dist/xstate-dev.cjs.d.ts +1 -0
- package/dev/dist/xstate-dev.cjs.dev.js +11 -0
- package/dev/dist/xstate-dev.cjs.js +7 -0
- package/{lib/devTools.js → dev/dist/xstate-dev.cjs.prod.js} +17 -10
- package/dev/dist/xstate-dev.esm.js +1 -0
- package/dev/dist/xstate-dev.umd.min.js +2 -0
- package/dev/dist/xstate-dev.umd.min.js.map +1 -0
- package/dev/package.json +8 -0
- package/dist/actions-7ea9280f.cjs.prod.js +4674 -0
- package/dist/actions-b08d0da8.cjs.dev.js +4718 -0
- package/dist/actions-b673cb13.esm.js +4660 -0
- package/dist/declarations/actions/dynamicAction.d.ts +5 -0
- package/dist/declarations/src/Machine.d.ts +4 -0
- package/dist/declarations/src/Mailbox.d.ts +12 -0
- package/{es → dist/declarations/src}/SimulatedClock.d.ts +16 -17
- package/dist/declarations/src/State.d.ts +97 -0
- package/dist/declarations/src/StateMachine.d.ts +120 -0
- package/dist/declarations/src/StateNode.d.ts +127 -0
- package/{es → dist/declarations/src}/actionTypes.d.ts +16 -20
- package/dist/declarations/src/actions/assign.d.ts +7 -0
- package/dist/declarations/src/actions/cancel.d.ts +10 -0
- package/dist/declarations/src/actions/choose.d.ts +3 -0
- package/dist/declarations/src/actions/invoke.d.ts +3 -0
- package/dist/declarations/src/actions/log.d.ts +11 -0
- package/dist/declarations/src/actions/pure.d.ts +3 -0
- package/dist/declarations/src/actions/raise.d.ts +9 -0
- package/dist/declarations/src/actions/send.d.ts +51 -0
- package/dist/declarations/src/actions/stop.d.ts +7 -0
- package/dist/declarations/src/actions.d.ts +43 -0
- package/dist/declarations/src/actors.d.ts +37 -0
- package/dist/declarations/src/constants.d.ts +5 -0
- package/{lib/devTools.d.ts → dist/declarations/src/dev/index.d.ts} +14 -14
- package/{es → dist/declarations/src}/environment.d.ts +1 -2
- package/dist/declarations/src/guards.d.ts +8 -0
- package/dist/declarations/src/index.d.ts +44 -0
- package/dist/declarations/src/interpreter.d.ts +108 -0
- package/{es → dist/declarations/src}/mapState.d.ts +3 -4
- package/dist/declarations/src/memo.d.ts +2 -0
- package/dist/declarations/src/registry.d.ts +8 -0
- package/{es → dist/declarations/src}/schema.d.ts +2 -3
- package/dist/declarations/src/spawn.d.ts +2 -0
- package/dist/declarations/src/stateUtils.d.ts +70 -0
- package/dist/declarations/src/symbolObservable.d.ts +1 -0
- package/{lib → dist/declarations/src}/typegenTypes.d.ts +132 -133
- package/dist/declarations/src/types.d.ts +1001 -0
- package/dist/declarations/src/utils.d.ts +54 -0
- package/{es/devTools.js → dist/index-20b364c4.esm.js} +18 -6
- package/dist/index-2a564d03.cjs.dev.js +64 -0
- package/dist/xstate.cjs.d.ts +1 -0
- package/dist/xstate.cjs.dev.js +993 -0
- package/dist/xstate.cjs.js +7 -0
- package/dist/xstate.cjs.prod.js +993 -0
- package/dist/xstate.esm.js +952 -0
- package/dist/xstate.umd.min.js +2 -0
- package/dist/xstate.umd.min.js.map +1 -0
- package/guards/dist/xstate-guards.cjs.d.ts +1 -0
- package/guards/dist/xstate-guards.cjs.dev.js +15 -0
- package/guards/dist/xstate-guards.cjs.js +7 -0
- package/guards/dist/xstate-guards.cjs.prod.js +15 -0
- package/guards/dist/xstate-guards.esm.js +2 -0
- package/guards/dist/xstate-guards.umd.min.js +2 -0
- package/guards/dist/xstate-guards.umd.min.js.map +1 -0
- package/guards/package.json +8 -0
- package/invoke/package.json +4 -0
- package/package.json +44 -30
- package/dist/xstate.interpreter.js +0 -15
- package/dist/xstate.js +0 -15
- package/dist/xstate.web.js +0 -15
- package/es/Actor.d.ts +0 -25
- package/es/Actor.js +0 -99
- package/es/Machine.d.ts +0 -12
- package/es/Machine.js +0 -21
- package/es/SimulatedClock.js +0 -81
- package/es/State.d.ts +0 -123
- package/es/State.js +0 -274
- package/es/StateNode.d.ts +0 -282
- package/es/StateNode.js +0 -1587
- package/es/_virtual/_tslib.js +0 -78
- package/es/actionTypes.js +0 -22
- package/es/actions.d.ts +0 -157
- package/es/actions.js +0 -630
- package/es/behaviors.d.ts +0 -37
- package/es/behaviors.js +0 -131
- package/es/constants.d.ts +0 -6
- package/es/constants.js +0 -6
- package/es/devTools.d.ts +0 -14
- package/es/each.d.ts +0 -4
- package/es/each.js +0 -13
- package/es/environment.js +0 -3
- package/es/index.d.ts +0 -22
- package/es/index.js +0 -25
- package/es/interpreter.d.ts +0 -217
- package/es/interpreter.js +0 -1488
- package/es/invoke.d.ts +0 -11
- package/es/invokeUtils.d.ts +0 -7
- package/es/invokeUtils.js +0 -40
- package/es/json.d.ts +0 -31
- package/es/json.js +0 -86
- package/es/mapState.js +0 -32
- package/es/match.d.ts +0 -9
- package/es/match.js +0 -34
- package/es/model.d.ts +0 -8
- package/es/model.js +0 -50
- package/es/model.types.d.ts +0 -56
- package/es/patterns.d.ts +0 -14
- package/es/patterns.js +0 -48
- package/es/registry.d.ts +0 -9
- package/es/registry.js +0 -19
- package/es/scheduler.d.ts +0 -17
- package/es/scheduler.js +0 -79
- package/es/schema.js +0 -6
- package/es/scxml.d.ts +0 -6
- package/es/serviceScope.d.ts +0 -4
- package/es/serviceScope.js +0 -16
- package/es/stateUtils.d.ts +0 -18
- package/es/stateUtils.js +0 -262
- package/es/typegenTypes.d.ts +0 -133
- package/es/types.d.ts +0 -1040
- package/es/types.js +0 -33
- package/es/utils.d.ts +0 -72
- package/es/utils.js +0 -622
- package/es/waitFor.d.ts +0 -34
- package/es/waitFor.js +0 -73
- package/lib/Actor.d.ts +0 -25
- package/lib/Actor.js +0 -108
- package/lib/Machine.d.ts +0 -12
- package/lib/Machine.js +0 -26
- package/lib/SimulatedClock.d.ts +0 -17
- package/lib/SimulatedClock.js +0 -85
- package/lib/State.d.ts +0 -123
- package/lib/State.js +0 -282
- package/lib/StateNode.d.ts +0 -282
- package/lib/StateNode.js +0 -1591
- package/lib/_virtual/_tslib.js +0 -85
- package/lib/actionTypes.d.ts +0 -20
- package/lib/actionTypes.js +0 -43
- package/lib/actions.d.ts +0 -157
- package/lib/actions.js +0 -662
- package/lib/behaviors.d.ts +0 -37
- package/lib/behaviors.js +0 -137
- package/lib/constants.d.ts +0 -6
- package/lib/constants.js +0 -13
- package/lib/each.d.ts +0 -4
- package/lib/each.js +0 -17
- package/lib/environment.d.ts +0 -2
- package/lib/environment.js +0 -7
- package/lib/index.d.ts +0 -22
- package/lib/index.js +0 -64
- package/lib/interpreter.d.ts +0 -217
- package/lib/interpreter.js +0 -1494
- package/lib/invoke.d.ts +0 -11
- package/lib/invoke.js +0 -20
- package/lib/invokeUtils.d.ts +0 -7
- package/lib/invokeUtils.js +0 -45
- package/lib/json.d.ts +0 -31
- package/lib/json.js +0 -94
- package/lib/mapState.d.ts +0 -4
- package/lib/mapState.js +0 -36
- package/lib/match.d.ts +0 -9
- package/lib/match.js +0 -38
- package/lib/model.d.ts +0 -8
- package/lib/model.js +0 -54
- package/lib/model.types.d.ts +0 -56
- package/lib/model.types.js +0 -2
- package/lib/patterns.d.ts +0 -14
- package/lib/patterns.js +0 -53
- package/lib/registry.d.ts +0 -9
- package/lib/registry.js +0 -23
- package/lib/scheduler.d.ts +0 -17
- package/lib/scheduler.js +0 -83
- package/lib/schema.d.ts +0 -3
- package/lib/schema.js +0 -11
- package/lib/scxml.d.ts +0 -6
- package/lib/scxml.js +0 -350
- package/lib/serviceScope.d.ts +0 -4
- package/lib/serviceScope.js +0 -21
- package/lib/stateUtils.d.ts +0 -18
- package/lib/stateUtils.js +0 -277
- package/lib/typegenTypes.js +0 -2
- package/lib/types.d.ts +0 -1040
- package/lib/types.js +0 -35
- package/lib/utils.d.ts +0 -72
- package/lib/utils.js +0 -669
- package/lib/waitFor.d.ts +0 -34
- package/lib/waitFor.js +0 -77
|
@@ -0,0 +1,4674 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var dev_dist_xstateDev = require('../dev/dist/xstate-dev.cjs.prod.js');
|
|
4
|
+
|
|
5
|
+
// https://github.com/microsoft/TypeScript/issues/23182#issuecomment-379091887
|
|
6
|
+
|
|
7
|
+
(function (ActionTypes) {
|
|
8
|
+
ActionTypes["Stop"] = "xstate.stop";
|
|
9
|
+
ActionTypes["Raise"] = "xstate.raise";
|
|
10
|
+
ActionTypes["Send"] = "xstate.send";
|
|
11
|
+
ActionTypes["Cancel"] = "xstate.cancel";
|
|
12
|
+
ActionTypes["Assign"] = "xstate.assign";
|
|
13
|
+
ActionTypes["After"] = "xstate.after";
|
|
14
|
+
ActionTypes["DoneState"] = "done.state";
|
|
15
|
+
ActionTypes["DoneInvoke"] = "done.invoke";
|
|
16
|
+
ActionTypes["Log"] = "xstate.log";
|
|
17
|
+
ActionTypes["Init"] = "xstate.init";
|
|
18
|
+
ActionTypes["Invoke"] = "xstate.invoke";
|
|
19
|
+
ActionTypes["ErrorExecution"] = "error.execution";
|
|
20
|
+
ActionTypes["ErrorCommunication"] = "error.communication";
|
|
21
|
+
ActionTypes["ErrorPlatform"] = "error.platform";
|
|
22
|
+
ActionTypes["ErrorCustom"] = "xstate.error";
|
|
23
|
+
ActionTypes["Pure"] = "xstate.pure";
|
|
24
|
+
ActionTypes["Choose"] = "xstate.choose";
|
|
25
|
+
})(exports.ActionTypes || (exports.ActionTypes = {}));
|
|
26
|
+
|
|
27
|
+
(function (SpecialTargets) {
|
|
28
|
+
SpecialTargets["Parent"] = "#_parent";
|
|
29
|
+
SpecialTargets["Internal"] = "#_internal";
|
|
30
|
+
})(exports.SpecialTargets || (exports.SpecialTargets = {}));
|
|
31
|
+
|
|
32
|
+
var stop = exports.ActionTypes.Stop;
|
|
33
|
+
var raise = exports.ActionTypes.Raise;
|
|
34
|
+
var send = exports.ActionTypes.Send;
|
|
35
|
+
var cancel = exports.ActionTypes.Cancel;
|
|
36
|
+
var assign = exports.ActionTypes.Assign;
|
|
37
|
+
var after = exports.ActionTypes.After;
|
|
38
|
+
var doneState = exports.ActionTypes.DoneState;
|
|
39
|
+
var log = exports.ActionTypes.Log;
|
|
40
|
+
var init = exports.ActionTypes.Init;
|
|
41
|
+
var invoke = exports.ActionTypes.Invoke;
|
|
42
|
+
var errorExecution = exports.ActionTypes.ErrorExecution;
|
|
43
|
+
var errorPlatform = exports.ActionTypes.ErrorPlatform;
|
|
44
|
+
var error = exports.ActionTypes.ErrorCustom;
|
|
45
|
+
var choose = exports.ActionTypes.Choose;
|
|
46
|
+
var pure = exports.ActionTypes.Pure;
|
|
47
|
+
|
|
48
|
+
var actionTypes = /*#__PURE__*/Object.freeze({
|
|
49
|
+
__proto__: null,
|
|
50
|
+
stop: stop,
|
|
51
|
+
raise: raise,
|
|
52
|
+
send: send,
|
|
53
|
+
cancel: cancel,
|
|
54
|
+
assign: assign,
|
|
55
|
+
after: after,
|
|
56
|
+
doneState: doneState,
|
|
57
|
+
log: log,
|
|
58
|
+
init: init,
|
|
59
|
+
invoke: invoke,
|
|
60
|
+
errorExecution: errorExecution,
|
|
61
|
+
errorPlatform: errorPlatform,
|
|
62
|
+
error: error,
|
|
63
|
+
choose: choose,
|
|
64
|
+
pure: pure
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
function _defineProperty(obj, key, value) {
|
|
68
|
+
if (key in obj) {
|
|
69
|
+
Object.defineProperty(obj, key, {
|
|
70
|
+
value: value,
|
|
71
|
+
enumerable: true,
|
|
72
|
+
configurable: true,
|
|
73
|
+
writable: true
|
|
74
|
+
});
|
|
75
|
+
} else {
|
|
76
|
+
obj[key] = value;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
return obj;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
function ownKeys(object, enumerableOnly) {
|
|
83
|
+
var keys = Object.keys(object);
|
|
84
|
+
|
|
85
|
+
if (Object.getOwnPropertySymbols) {
|
|
86
|
+
var symbols = Object.getOwnPropertySymbols(object);
|
|
87
|
+
if (enumerableOnly) symbols = symbols.filter(function (sym) {
|
|
88
|
+
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
|
89
|
+
});
|
|
90
|
+
keys.push.apply(keys, symbols);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
return keys;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
function _objectSpread2(target) {
|
|
97
|
+
for (var i = 1; i < arguments.length; i++) {
|
|
98
|
+
var source = arguments[i] != null ? arguments[i] : {};
|
|
99
|
+
|
|
100
|
+
if (i % 2) {
|
|
101
|
+
ownKeys(Object(source), true).forEach(function (key) {
|
|
102
|
+
_defineProperty(target, key, source[key]);
|
|
103
|
+
});
|
|
104
|
+
} else if (Object.getOwnPropertyDescriptors) {
|
|
105
|
+
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
|
|
106
|
+
} else {
|
|
107
|
+
ownKeys(Object(source)).forEach(function (key) {
|
|
108
|
+
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
return target;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
function _arrayWithHoles(arr) {
|
|
117
|
+
if (Array.isArray(arr)) return arr;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
function _iterableToArrayLimit(arr, i) {
|
|
121
|
+
if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return;
|
|
122
|
+
var _arr = [];
|
|
123
|
+
var _n = true;
|
|
124
|
+
var _d = false;
|
|
125
|
+
var _e = undefined;
|
|
126
|
+
|
|
127
|
+
try {
|
|
128
|
+
for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {
|
|
129
|
+
_arr.push(_s.value);
|
|
130
|
+
|
|
131
|
+
if (i && _arr.length === i) break;
|
|
132
|
+
}
|
|
133
|
+
} catch (err) {
|
|
134
|
+
_d = true;
|
|
135
|
+
_e = err;
|
|
136
|
+
} finally {
|
|
137
|
+
try {
|
|
138
|
+
if (!_n && _i["return"] != null) _i["return"]();
|
|
139
|
+
} finally {
|
|
140
|
+
if (_d) throw _e;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
return _arr;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
function _arrayLikeToArray(arr, len) {
|
|
148
|
+
if (len == null || len > arr.length) len = arr.length;
|
|
149
|
+
|
|
150
|
+
for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
|
|
151
|
+
|
|
152
|
+
return arr2;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
function _unsupportedIterableToArray(o, minLen) {
|
|
156
|
+
if (!o) return;
|
|
157
|
+
if (typeof o === "string") return _arrayLikeToArray(o, minLen);
|
|
158
|
+
var n = Object.prototype.toString.call(o).slice(8, -1);
|
|
159
|
+
if (n === "Object" && o.constructor) n = o.constructor.name;
|
|
160
|
+
if (n === "Map" || n === "Set") return Array.from(o);
|
|
161
|
+
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
function _nonIterableRest() {
|
|
165
|
+
throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
function _slicedToArray(arr, i) {
|
|
169
|
+
return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
function _arrayWithoutHoles(arr) {
|
|
173
|
+
if (Array.isArray(arr)) return _arrayLikeToArray(arr);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
function _iterableToArray(iter) {
|
|
177
|
+
if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
function _nonIterableSpread() {
|
|
181
|
+
throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
function _toConsumableArray(arr) {
|
|
185
|
+
return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
function _createForOfIteratorHelper(o, allowArrayLike) {
|
|
189
|
+
var it;
|
|
190
|
+
|
|
191
|
+
if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) {
|
|
192
|
+
if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
|
|
193
|
+
if (it) o = it;
|
|
194
|
+
var i = 0;
|
|
195
|
+
|
|
196
|
+
var F = function () {};
|
|
197
|
+
|
|
198
|
+
return {
|
|
199
|
+
s: F,
|
|
200
|
+
n: function () {
|
|
201
|
+
if (i >= o.length) return {
|
|
202
|
+
done: true
|
|
203
|
+
};
|
|
204
|
+
return {
|
|
205
|
+
done: false,
|
|
206
|
+
value: o[i++]
|
|
207
|
+
};
|
|
208
|
+
},
|
|
209
|
+
e: function (e) {
|
|
210
|
+
throw e;
|
|
211
|
+
},
|
|
212
|
+
f: F
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
var normalCompletion = true,
|
|
220
|
+
didErr = false,
|
|
221
|
+
err;
|
|
222
|
+
return {
|
|
223
|
+
s: function () {
|
|
224
|
+
it = o[Symbol.iterator]();
|
|
225
|
+
},
|
|
226
|
+
n: function () {
|
|
227
|
+
var step = it.next();
|
|
228
|
+
normalCompletion = step.done;
|
|
229
|
+
return step;
|
|
230
|
+
},
|
|
231
|
+
e: function (e) {
|
|
232
|
+
didErr = true;
|
|
233
|
+
err = e;
|
|
234
|
+
},
|
|
235
|
+
f: function () {
|
|
236
|
+
try {
|
|
237
|
+
if (!normalCompletion && it.return != null) it.return();
|
|
238
|
+
} finally {
|
|
239
|
+
if (didErr) throw err;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
function _typeof(obj) {
|
|
246
|
+
"@babel/helpers - typeof";
|
|
247
|
+
|
|
248
|
+
if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
|
|
249
|
+
_typeof = function (obj) {
|
|
250
|
+
return typeof obj;
|
|
251
|
+
};
|
|
252
|
+
} else {
|
|
253
|
+
_typeof = function (obj) {
|
|
254
|
+
return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
return _typeof(obj);
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
var STATE_DELIMITER = '.';
|
|
262
|
+
var TARGETLESS_KEY = '';
|
|
263
|
+
var NULL_EVENT = '';
|
|
264
|
+
var STATE_IDENTIFIER = '#';
|
|
265
|
+
var WILDCARD = '*';
|
|
266
|
+
|
|
267
|
+
function matchesState(parentStateId, childStateId) {
|
|
268
|
+
var delimiter = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : STATE_DELIMITER;
|
|
269
|
+
var parentStateValue = toStateValue(parentStateId, delimiter);
|
|
270
|
+
var childStateValue = toStateValue(childStateId, delimiter);
|
|
271
|
+
|
|
272
|
+
if (isString(childStateValue)) {
|
|
273
|
+
if (isString(parentStateValue)) {
|
|
274
|
+
return childStateValue === parentStateValue;
|
|
275
|
+
} // Parent more specific than child
|
|
276
|
+
|
|
277
|
+
|
|
278
|
+
return false;
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
if (isString(parentStateValue)) {
|
|
282
|
+
return parentStateValue in childStateValue;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
return Object.keys(parentStateValue).every(function (key) {
|
|
286
|
+
if (!(key in childStateValue)) {
|
|
287
|
+
return false;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
return matchesState(parentStateValue[key], childStateValue[key]);
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
function toStatePath(stateId, delimiter) {
|
|
294
|
+
try {
|
|
295
|
+
if (isArray(stateId)) {
|
|
296
|
+
return stateId;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
return stateId.toString().split(delimiter);
|
|
300
|
+
} catch (e) {
|
|
301
|
+
throw new Error("'".concat(stateId, "' is not a valid state path."));
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
function isStateLike(state) {
|
|
305
|
+
return _typeof(state) === 'object' && 'value' in state && 'context' in state && 'event' in state && '_event' in state;
|
|
306
|
+
}
|
|
307
|
+
function toStateValue(stateValue, delimiter) {
|
|
308
|
+
if (isStateLike(stateValue)) {
|
|
309
|
+
return stateValue.value;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
if (isArray(stateValue)) {
|
|
313
|
+
return pathToStateValue(stateValue);
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
if (typeof stateValue !== 'string') {
|
|
317
|
+
return stateValue;
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
var statePath = toStatePath(stateValue, delimiter);
|
|
321
|
+
return pathToStateValue(statePath);
|
|
322
|
+
}
|
|
323
|
+
function pathToStateValue(statePath) {
|
|
324
|
+
if (statePath.length === 1) {
|
|
325
|
+
return statePath[0];
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
var value = {};
|
|
329
|
+
var marker = value;
|
|
330
|
+
|
|
331
|
+
for (var _i = 0; _i < statePath.length - 1; _i++) {
|
|
332
|
+
if (_i === statePath.length - 2) {
|
|
333
|
+
marker[statePath[_i]] = statePath[_i + 1];
|
|
334
|
+
} else {
|
|
335
|
+
marker[statePath[_i]] = {};
|
|
336
|
+
marker = marker[statePath[_i]];
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
return value;
|
|
341
|
+
}
|
|
342
|
+
function mapValues(collection, iteratee) {
|
|
343
|
+
var result = {};
|
|
344
|
+
var collectionKeys = Object.keys(collection);
|
|
345
|
+
|
|
346
|
+
for (var _i2 = 0; _i2 < collectionKeys.length; _i2++) {
|
|
347
|
+
var _key = collectionKeys[_i2];
|
|
348
|
+
result[_key] = iteratee(collection[_key], _key, collection, _i2);
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
return result;
|
|
352
|
+
}
|
|
353
|
+
function flatten(array) {
|
|
354
|
+
var _ref;
|
|
355
|
+
|
|
356
|
+
return (_ref = []).concat.apply(_ref, _toConsumableArray(array));
|
|
357
|
+
}
|
|
358
|
+
function toArrayStrict(value) {
|
|
359
|
+
if (isArray(value)) {
|
|
360
|
+
return value;
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
return [value];
|
|
364
|
+
}
|
|
365
|
+
function toArray(value) {
|
|
366
|
+
if (value === undefined) {
|
|
367
|
+
return [];
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
return toArrayStrict(value);
|
|
371
|
+
}
|
|
372
|
+
function mapContext(mapper, context, _event) {
|
|
373
|
+
if (isFunction(mapper)) {
|
|
374
|
+
return mapper(context, _event.data);
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
var result = {};
|
|
378
|
+
|
|
379
|
+
for (var _i4 = 0, _Object$keys2 = Object.keys(mapper); _i4 < _Object$keys2.length; _i4++) {
|
|
380
|
+
var _key3 = _Object$keys2[_i4];
|
|
381
|
+
var subMapper = mapper[_key3];
|
|
382
|
+
|
|
383
|
+
if (isFunction(subMapper)) {
|
|
384
|
+
result[_key3] = subMapper(context, _event.data);
|
|
385
|
+
} else {
|
|
386
|
+
result[_key3] = subMapper;
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
return result;
|
|
391
|
+
}
|
|
392
|
+
function isPromiseLike(value) {
|
|
393
|
+
if (value instanceof Promise) {
|
|
394
|
+
return true;
|
|
395
|
+
} // Check if shape matches the Promise/A+ specification for a "thenable".
|
|
396
|
+
|
|
397
|
+
|
|
398
|
+
if (value !== null && (isFunction(value) || _typeof(value) === 'object') && isFunction(value.then)) {
|
|
399
|
+
return true;
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
return false;
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
var warn = function warn() {};
|
|
406
|
+
|
|
407
|
+
function isArray(value) {
|
|
408
|
+
return Array.isArray(value);
|
|
409
|
+
} // tslint:disable-next-line:ban-types
|
|
410
|
+
|
|
411
|
+
function isFunction(value) {
|
|
412
|
+
return typeof value === 'function';
|
|
413
|
+
}
|
|
414
|
+
function isString(value) {
|
|
415
|
+
return typeof value === 'string';
|
|
416
|
+
}
|
|
417
|
+
function isStateMachine(value) {
|
|
418
|
+
return !!value && '__xstatenode' in value;
|
|
419
|
+
}
|
|
420
|
+
function isSCXMLEvent(event) {
|
|
421
|
+
return '$$type' in event && event.$$type === 'scxml';
|
|
422
|
+
}
|
|
423
|
+
function isSCXMLErrorEvent(event) {
|
|
424
|
+
return typeof event.name === 'string' && (event.name === errorExecution || event.name.startsWith(errorPlatform));
|
|
425
|
+
}
|
|
426
|
+
function toSCXMLEvent(event, scxmlEvent) {
|
|
427
|
+
if (isSCXMLEvent(event)) {
|
|
428
|
+
return event;
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
return _objectSpread2({
|
|
432
|
+
name: event.type,
|
|
433
|
+
data: event,
|
|
434
|
+
$$type: 'scxml',
|
|
435
|
+
type: 'external'
|
|
436
|
+
}, scxmlEvent);
|
|
437
|
+
}
|
|
438
|
+
function toTransitionConfigArray(event, configLike) {
|
|
439
|
+
var transitions = toArrayStrict(configLike).map(function (transitionLike) {
|
|
440
|
+
if (typeof transitionLike === 'undefined' || typeof transitionLike === 'string' || isStateMachine(transitionLike)) {
|
|
441
|
+
return {
|
|
442
|
+
target: transitionLike,
|
|
443
|
+
event: event
|
|
444
|
+
};
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
return _objectSpread2(_objectSpread2({}, transitionLike), {}, {
|
|
448
|
+
event: event
|
|
449
|
+
});
|
|
450
|
+
});
|
|
451
|
+
return transitions;
|
|
452
|
+
}
|
|
453
|
+
function normalizeTarget(target) {
|
|
454
|
+
if (target === undefined || target === TARGETLESS_KEY) {
|
|
455
|
+
return undefined;
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
return toArray(target);
|
|
459
|
+
}
|
|
460
|
+
function toInvokeConfig(invocable, id) {
|
|
461
|
+
if (_typeof(invocable) === 'object') {
|
|
462
|
+
if ('src' in invocable) {
|
|
463
|
+
return invocable;
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
if ('transition' in invocable) {
|
|
467
|
+
return {
|
|
468
|
+
id: id,
|
|
469
|
+
src: invocable
|
|
470
|
+
};
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
return {
|
|
475
|
+
id: id,
|
|
476
|
+
src: invocable
|
|
477
|
+
};
|
|
478
|
+
}
|
|
479
|
+
function toInvokeSource(src) {
|
|
480
|
+
if (typeof src === 'string') {
|
|
481
|
+
return {
|
|
482
|
+
type: src
|
|
483
|
+
};
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
return src;
|
|
487
|
+
}
|
|
488
|
+
function toObserver(nextHandler, errorHandler, completionHandler) {
|
|
489
|
+
var noop = function noop() {};
|
|
490
|
+
|
|
491
|
+
var isObserver = _typeof(nextHandler) === 'object';
|
|
492
|
+
var self = isObserver ? nextHandler : null;
|
|
493
|
+
return {
|
|
494
|
+
next: ((isObserver ? nextHandler.next : nextHandler) || noop).bind(self),
|
|
495
|
+
error: ((isObserver ? nextHandler.error : errorHandler) || noop).bind(self),
|
|
496
|
+
complete: ((isObserver ? nextHandler.complete : completionHandler) || noop).bind(self)
|
|
497
|
+
};
|
|
498
|
+
}
|
|
499
|
+
function createInvokeId(stateNodeId, index) {
|
|
500
|
+
return "".concat(stateNodeId, ":invocation[").concat(index, "]");
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
function createDynamicAction(action, resolve) {
|
|
504
|
+
return {
|
|
505
|
+
type: action.type,
|
|
506
|
+
params: action.params,
|
|
507
|
+
resolve: resolve
|
|
508
|
+
};
|
|
509
|
+
}
|
|
510
|
+
function isDynamicAction(action) {
|
|
511
|
+
return _typeof(action) === 'object' && action !== null && 'resolve' in action;
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
/**
|
|
515
|
+
* Sends an event. This returns an action that will be read by an interpreter to
|
|
516
|
+
* send the event in the next step, after the current step is finished executing.
|
|
517
|
+
*
|
|
518
|
+
* @param event The event to send.
|
|
519
|
+
* @param options Options to pass into the send event:
|
|
520
|
+
* - `id` - The unique send event identifier (used with `cancel()`).
|
|
521
|
+
* - `delay` - The number of milliseconds to delay the sending of the event.
|
|
522
|
+
* - `to` - The target of this event (by default, the machine the event was sent from).
|
|
523
|
+
*/
|
|
524
|
+
|
|
525
|
+
function send$1(event, options) {
|
|
526
|
+
var eventOrExpr = isFunction(event) ? event : event;
|
|
527
|
+
return createDynamicAction({
|
|
528
|
+
type: send,
|
|
529
|
+
params: {
|
|
530
|
+
to: options ? options.to : undefined,
|
|
531
|
+
delay: options ? options.delay : undefined,
|
|
532
|
+
event: eventOrExpr,
|
|
533
|
+
id: options && options.id !== undefined ? options.id : isFunction(event) ? event.name : event.type
|
|
534
|
+
}
|
|
535
|
+
}, function (_event, _ref) {
|
|
536
|
+
var actorContext = _ref.actorContext,
|
|
537
|
+
state = _ref.state;
|
|
538
|
+
var params = {
|
|
539
|
+
to: options ? options.to : undefined,
|
|
540
|
+
delay: options ? options.delay : undefined,
|
|
541
|
+
event: eventOrExpr,
|
|
542
|
+
id: options && options.id !== undefined ? options.id : isFunction(event) ? event.name : event.type
|
|
543
|
+
};
|
|
544
|
+
var meta = {
|
|
545
|
+
_event: _event
|
|
546
|
+
};
|
|
547
|
+
var delaysMap = state.machine.options.delays; // TODO: helper function for resolving Expr
|
|
548
|
+
|
|
549
|
+
var resolvedEvent = toSCXMLEvent(isFunction(eventOrExpr) ? eventOrExpr(state.context, _event.data, meta) : eventOrExpr);
|
|
550
|
+
var resolvedDelay;
|
|
551
|
+
|
|
552
|
+
if (isString(params.delay)) {
|
|
553
|
+
var configDelay = delaysMap && delaysMap[params.delay];
|
|
554
|
+
resolvedDelay = isFunction(configDelay) ? configDelay(state.context, _event.data, meta) : configDelay;
|
|
555
|
+
} else {
|
|
556
|
+
resolvedDelay = isFunction(params.delay) ? params.delay(state.context, _event.data, meta) : params.delay;
|
|
557
|
+
}
|
|
558
|
+
|
|
559
|
+
var resolvedTarget = isFunction(params.to) ? params.to(state.context, _event.data, meta) : params.to;
|
|
560
|
+
var targetActorRef;
|
|
561
|
+
|
|
562
|
+
if (typeof resolvedTarget === 'string') {
|
|
563
|
+
if (resolvedTarget === exports.SpecialTargets.Parent) {
|
|
564
|
+
targetActorRef = actorContext === null || actorContext === void 0 ? void 0 : actorContext.self._parent;
|
|
565
|
+
} else if (resolvedTarget === exports.SpecialTargets.Internal) {
|
|
566
|
+
targetActorRef = actorContext === null || actorContext === void 0 ? void 0 : actorContext.self;
|
|
567
|
+
} else if (resolvedTarget.startsWith('#_')) {
|
|
568
|
+
// SCXML compatibility: https://www.w3.org/TR/scxml/#SCXMLEventProcessor
|
|
569
|
+
// #_invokeid. If the target is the special term '#_invokeid', where invokeid is the invokeid of an SCXML session that the sending session has created by <invoke>, the Processor must add the event to the external queue of that session.
|
|
570
|
+
targetActorRef = state.children[resolvedTarget.slice(2)];
|
|
571
|
+
} else {
|
|
572
|
+
targetActorRef = state.children[resolvedTarget];
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
if (!targetActorRef) {
|
|
576
|
+
throw new Error("Unable to send event to actor '".concat(resolvedTarget, "' from machine '").concat(state.machine.id, "'."));
|
|
577
|
+
}
|
|
578
|
+
} else {
|
|
579
|
+
targetActorRef = resolvedTarget || (actorContext === null || actorContext === void 0 ? void 0 : actorContext.self);
|
|
580
|
+
}
|
|
581
|
+
|
|
582
|
+
var resolvedAction = {
|
|
583
|
+
type: send,
|
|
584
|
+
params: _objectSpread2(_objectSpread2({}, params), {}, {
|
|
585
|
+
to: targetActorRef,
|
|
586
|
+
_event: resolvedEvent,
|
|
587
|
+
event: resolvedEvent.data,
|
|
588
|
+
delay: resolvedDelay,
|
|
589
|
+
internal: resolvedTarget === exports.SpecialTargets.Internal
|
|
590
|
+
}),
|
|
591
|
+
execute: function execute(actorCtx) {
|
|
592
|
+
var sendAction = resolvedAction;
|
|
593
|
+
|
|
594
|
+
if (typeof sendAction.params.delay === 'number') {
|
|
595
|
+
actorCtx.self.delaySend(sendAction);
|
|
596
|
+
return;
|
|
597
|
+
} else {
|
|
598
|
+
var target = sendAction.params.to;
|
|
599
|
+
var _event2 = sendAction.params._event;
|
|
600
|
+
actorCtx.defer(function () {
|
|
601
|
+
var origin = actorCtx.self;
|
|
602
|
+
|
|
603
|
+
var resolvedEvent = _objectSpread2(_objectSpread2({}, _event2), {}, {
|
|
604
|
+
name: _event2.name === error ? "".concat(error$1(origin.id)) : _event2.name,
|
|
605
|
+
origin: origin
|
|
606
|
+
});
|
|
607
|
+
|
|
608
|
+
target.send(resolvedEvent);
|
|
609
|
+
});
|
|
610
|
+
}
|
|
611
|
+
}
|
|
612
|
+
};
|
|
613
|
+
return [state, resolvedAction];
|
|
614
|
+
});
|
|
615
|
+
}
|
|
616
|
+
/**
|
|
617
|
+
* Sends an event to this machine's parent.
|
|
618
|
+
*
|
|
619
|
+
* @param event The event to send to the parent machine.
|
|
620
|
+
* @param options Options to pass into the send event.
|
|
621
|
+
*/
|
|
622
|
+
|
|
623
|
+
function sendParent(event, options) {
|
|
624
|
+
return send$1(event, _objectSpread2(_objectSpread2({}, options), {}, {
|
|
625
|
+
to: exports.SpecialTargets.Parent
|
|
626
|
+
}));
|
|
627
|
+
}
|
|
628
|
+
/**
|
|
629
|
+
* Sends an event back to the sender of the original event.
|
|
630
|
+
*
|
|
631
|
+
* @param event The event to send back to the sender
|
|
632
|
+
* @param options Options to pass into the send event
|
|
633
|
+
*/
|
|
634
|
+
|
|
635
|
+
function respond(event, options) {
|
|
636
|
+
return send$1(event, _objectSpread2(_objectSpread2({}, options), {}, {
|
|
637
|
+
to: function to(_, __, _ref2) {
|
|
638
|
+
var _event = _ref2._event;
|
|
639
|
+
return _event.origin; // TODO: handle when _event.origin is undefined
|
|
640
|
+
}
|
|
641
|
+
}));
|
|
642
|
+
}
|
|
643
|
+
/**
|
|
644
|
+
* Forwards (sends) an event to a specified service.
|
|
645
|
+
*
|
|
646
|
+
* @param target The target service to forward the event to.
|
|
647
|
+
* @param options Options to pass into the send action creator.
|
|
648
|
+
*/
|
|
649
|
+
|
|
650
|
+
function forwardTo(target, options) {
|
|
651
|
+
if (process.env.NODE_END !== 'production' && (!target || typeof target === 'function')) {
|
|
652
|
+
var originalTarget = target;
|
|
653
|
+
|
|
654
|
+
target = function target() {
|
|
655
|
+
var resolvedTarget = typeof originalTarget === 'function' ? originalTarget.apply(void 0, arguments) : originalTarget;
|
|
656
|
+
|
|
657
|
+
if (!resolvedTarget) {
|
|
658
|
+
throw new Error("Attempted to forward event to undefined actor. This risks an infinite loop in the sender.");
|
|
659
|
+
}
|
|
660
|
+
|
|
661
|
+
return resolvedTarget;
|
|
662
|
+
};
|
|
663
|
+
}
|
|
664
|
+
|
|
665
|
+
return send$1(function (_, event) {
|
|
666
|
+
return event;
|
|
667
|
+
}, _objectSpread2(_objectSpread2({}, options), {}, {
|
|
668
|
+
to: target
|
|
669
|
+
}));
|
|
670
|
+
}
|
|
671
|
+
/**
|
|
672
|
+
* Escalates an error by sending it as an event to this machine's parent.
|
|
673
|
+
*
|
|
674
|
+
* @param errorData The error data to send, or the expression function that
|
|
675
|
+
* takes in the `context`, `event`, and `meta`, and returns the error data to send.
|
|
676
|
+
* @param options Options to pass into the send action creator.
|
|
677
|
+
*/
|
|
678
|
+
|
|
679
|
+
function escalate(errorData, options) {
|
|
680
|
+
return sendParent(function (context, event, meta) {
|
|
681
|
+
return {
|
|
682
|
+
type: error,
|
|
683
|
+
data: isFunction(errorData) ? errorData(context, event, meta) : errorData
|
|
684
|
+
};
|
|
685
|
+
}, _objectSpread2(_objectSpread2({}, options), {}, {
|
|
686
|
+
to: exports.SpecialTargets.Parent
|
|
687
|
+
}));
|
|
688
|
+
}
|
|
689
|
+
/**
|
|
690
|
+
* Sends an event to an actor.
|
|
691
|
+
*
|
|
692
|
+
* @param actor The `ActorRef` to send the event to.
|
|
693
|
+
* @param event The event to send, or an expression that evaluates to the event to send
|
|
694
|
+
* @param options Send action options
|
|
695
|
+
* @returns An XState send action object
|
|
696
|
+
*/
|
|
697
|
+
|
|
698
|
+
function sendTo(actor, event, options) {
|
|
699
|
+
return send$1(event, _objectSpread2(_objectSpread2({}, options), {}, {
|
|
700
|
+
to: actor
|
|
701
|
+
}));
|
|
702
|
+
}
|
|
703
|
+
|
|
704
|
+
function _classCallCheck(instance, Constructor) {
|
|
705
|
+
if (!(instance instanceof Constructor)) {
|
|
706
|
+
throw new TypeError("Cannot call a class as a function");
|
|
707
|
+
}
|
|
708
|
+
}
|
|
709
|
+
|
|
710
|
+
function _defineProperties(target, props) {
|
|
711
|
+
for (var i = 0; i < props.length; i++) {
|
|
712
|
+
var descriptor = props[i];
|
|
713
|
+
descriptor.enumerable = descriptor.enumerable || false;
|
|
714
|
+
descriptor.configurable = true;
|
|
715
|
+
if ("value" in descriptor) descriptor.writable = true;
|
|
716
|
+
Object.defineProperty(target, descriptor.key, descriptor);
|
|
717
|
+
}
|
|
718
|
+
}
|
|
719
|
+
|
|
720
|
+
function _createClass(Constructor, protoProps, staticProps) {
|
|
721
|
+
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
|
722
|
+
if (staticProps) _defineProperties(Constructor, staticProps);
|
|
723
|
+
return Constructor;
|
|
724
|
+
}
|
|
725
|
+
|
|
726
|
+
var symbolObservable = function () {
|
|
727
|
+
return typeof Symbol === 'function' && Symbol.observable || '@@observable';
|
|
728
|
+
}();
|
|
729
|
+
|
|
730
|
+
/**
|
|
731
|
+
* Returns an actor behavior from a reducer and its initial state.
|
|
732
|
+
*
|
|
733
|
+
* @param transition The pure reducer that returns the next state given the current state and event.
|
|
734
|
+
* @param initialState The initial state of the reducer.
|
|
735
|
+
* @returns An actor behavior
|
|
736
|
+
*/
|
|
737
|
+
|
|
738
|
+
function fromReducer(_transition, initialState) {
|
|
739
|
+
return {
|
|
740
|
+
transition: function transition(state, event, actorCtx) {
|
|
741
|
+
// @ts-ignore TODO
|
|
742
|
+
var resolvedEvent = isSCXMLEvent(event) ? event.data : event; // @ts-ignore TODO
|
|
743
|
+
|
|
744
|
+
return _transition(state, resolvedEvent, actorCtx);
|
|
745
|
+
},
|
|
746
|
+
getInitialState: function getInitialState() {
|
|
747
|
+
return initialState;
|
|
748
|
+
},
|
|
749
|
+
getSnapshot: function getSnapshot(state) {
|
|
750
|
+
return state;
|
|
751
|
+
}
|
|
752
|
+
};
|
|
753
|
+
}
|
|
754
|
+
var startSignalType = 'xstate.init';
|
|
755
|
+
var stopSignalType = 'xstate.stop';
|
|
756
|
+
var startSignal = {
|
|
757
|
+
type: 'xstate.init'
|
|
758
|
+
};
|
|
759
|
+
var stopSignal = {
|
|
760
|
+
type: 'xstate.stop'
|
|
761
|
+
};
|
|
762
|
+
|
|
763
|
+
/**
|
|
764
|
+
* An object that expresses the behavior of an actor in reaction to received events,
|
|
765
|
+
* as well as an optionally emitted stream of values.
|
|
766
|
+
*
|
|
767
|
+
* @template TReceived The received event
|
|
768
|
+
* @template TSnapshot The emitted value
|
|
769
|
+
*/
|
|
770
|
+
function isSignal(eventType) {
|
|
771
|
+
return eventType === startSignalType || eventType === stopSignalType;
|
|
772
|
+
}
|
|
773
|
+
|
|
774
|
+
function fromCallback(invokeCallback) {
|
|
775
|
+
var behavior = {
|
|
776
|
+
start: function start(state, _ref) {
|
|
777
|
+
var self = _ref.self;
|
|
778
|
+
self.send({
|
|
779
|
+
type: startSignalType
|
|
780
|
+
});
|
|
781
|
+
return state;
|
|
782
|
+
},
|
|
783
|
+
transition: function transition(state, event, _ref2) {
|
|
784
|
+
var self = _ref2.self,
|
|
785
|
+
id = _ref2.id;
|
|
786
|
+
|
|
787
|
+
var _event = toSCXMLEvent(event);
|
|
788
|
+
|
|
789
|
+
if (_event.name === startSignalType) {
|
|
790
|
+
var sender = function sender(eventForParent) {
|
|
791
|
+
var _self$_parent;
|
|
792
|
+
|
|
793
|
+
if (state.canceled) {
|
|
794
|
+
return state;
|
|
795
|
+
}
|
|
796
|
+
|
|
797
|
+
(_self$_parent = self._parent) === null || _self$_parent === void 0 ? void 0 : _self$_parent.send(toSCXMLEvent(eventForParent, {
|
|
798
|
+
origin: self
|
|
799
|
+
}));
|
|
800
|
+
};
|
|
801
|
+
|
|
802
|
+
var receiver = function receiver(newListener) {
|
|
803
|
+
state.receivers.add(newListener);
|
|
804
|
+
};
|
|
805
|
+
|
|
806
|
+
state.dispose = invokeCallback(sender, receiver);
|
|
807
|
+
|
|
808
|
+
if (isPromiseLike(state.dispose)) {
|
|
809
|
+
state.dispose.then(function (resolved) {
|
|
810
|
+
var _self$_parent2;
|
|
811
|
+
|
|
812
|
+
(_self$_parent2 = self._parent) === null || _self$_parent2 === void 0 ? void 0 : _self$_parent2.send(toSCXMLEvent(doneInvoke(id, resolved), {
|
|
813
|
+
origin: self
|
|
814
|
+
}));
|
|
815
|
+
state.canceled = true;
|
|
816
|
+
}, function (errorData) {
|
|
817
|
+
var _self$_parent3;
|
|
818
|
+
|
|
819
|
+
var errorEvent = error$1(id, errorData);
|
|
820
|
+
(_self$_parent3 = self._parent) === null || _self$_parent3 === void 0 ? void 0 : _self$_parent3.send(toSCXMLEvent(errorEvent, {
|
|
821
|
+
origin: self
|
|
822
|
+
}));
|
|
823
|
+
state.canceled = true;
|
|
824
|
+
});
|
|
825
|
+
}
|
|
826
|
+
|
|
827
|
+
return state;
|
|
828
|
+
}
|
|
829
|
+
|
|
830
|
+
if (_event.name === stopSignalType) {
|
|
831
|
+
state.canceled = true;
|
|
832
|
+
|
|
833
|
+
if (isFunction(state.dispose)) {
|
|
834
|
+
state.dispose();
|
|
835
|
+
}
|
|
836
|
+
|
|
837
|
+
return state;
|
|
838
|
+
}
|
|
839
|
+
|
|
840
|
+
if (isSignal(_event.name)) {
|
|
841
|
+
// TODO: unrecognized signal
|
|
842
|
+
return state;
|
|
843
|
+
}
|
|
844
|
+
|
|
845
|
+
var plainEvent = isSCXMLEvent(event) ? event.data : event;
|
|
846
|
+
|
|
847
|
+
if (!isSignal(plainEvent.type)) {
|
|
848
|
+
state.receivers.forEach(function (receiver) {
|
|
849
|
+
return receiver(plainEvent);
|
|
850
|
+
});
|
|
851
|
+
}
|
|
852
|
+
|
|
853
|
+
return state;
|
|
854
|
+
},
|
|
855
|
+
getInitialState: function getInitialState() {
|
|
856
|
+
return {
|
|
857
|
+
canceled: false,
|
|
858
|
+
receivers: new Set(),
|
|
859
|
+
dispose: undefined
|
|
860
|
+
};
|
|
861
|
+
},
|
|
862
|
+
getSnapshot: function getSnapshot() {
|
|
863
|
+
return undefined;
|
|
864
|
+
}
|
|
865
|
+
};
|
|
866
|
+
return behavior;
|
|
867
|
+
}
|
|
868
|
+
function fromPromise(lazyPromise) {
|
|
869
|
+
var resolveEventType = '$$xstate.resolve';
|
|
870
|
+
var rejectEventType = '$$xstate.reject'; // TODO: add event types
|
|
871
|
+
|
|
872
|
+
var behavior = {
|
|
873
|
+
transition: function transition(state, event) {
|
|
874
|
+
var _event = toSCXMLEvent(event);
|
|
875
|
+
|
|
876
|
+
if (state.canceled) {
|
|
877
|
+
return state;
|
|
878
|
+
}
|
|
879
|
+
|
|
880
|
+
var eventObject = _event.data;
|
|
881
|
+
|
|
882
|
+
switch (_event.name) {
|
|
883
|
+
case resolveEventType:
|
|
884
|
+
state.status = 'done';
|
|
885
|
+
state.data = eventObject.data;
|
|
886
|
+
return state;
|
|
887
|
+
|
|
888
|
+
case rejectEventType:
|
|
889
|
+
state.status = 'error';
|
|
890
|
+
state.data = eventObject.data;
|
|
891
|
+
return state;
|
|
892
|
+
|
|
893
|
+
case stopSignalType:
|
|
894
|
+
state.canceled = true;
|
|
895
|
+
return state;
|
|
896
|
+
|
|
897
|
+
default:
|
|
898
|
+
return state;
|
|
899
|
+
}
|
|
900
|
+
},
|
|
901
|
+
start: function start(state, _ref3) {
|
|
902
|
+
var self = _ref3.self;
|
|
903
|
+
var resolvedPromise = Promise.resolve(lazyPromise());
|
|
904
|
+
resolvedPromise.then(function (response) {
|
|
905
|
+
self.send({
|
|
906
|
+
type: resolveEventType,
|
|
907
|
+
data: response
|
|
908
|
+
});
|
|
909
|
+
}, function (errorData) {
|
|
910
|
+
self.send({
|
|
911
|
+
type: rejectEventType,
|
|
912
|
+
data: errorData
|
|
913
|
+
});
|
|
914
|
+
});
|
|
915
|
+
return state;
|
|
916
|
+
},
|
|
917
|
+
getInitialState: function getInitialState() {
|
|
918
|
+
return {
|
|
919
|
+
canceled: false,
|
|
920
|
+
status: 'active',
|
|
921
|
+
data: undefined
|
|
922
|
+
};
|
|
923
|
+
},
|
|
924
|
+
getSnapshot: function getSnapshot(state) {
|
|
925
|
+
return state.data;
|
|
926
|
+
},
|
|
927
|
+
getStatus: function getStatus(state) {
|
|
928
|
+
return state;
|
|
929
|
+
}
|
|
930
|
+
};
|
|
931
|
+
return behavior;
|
|
932
|
+
}
|
|
933
|
+
function fromObservable(lazyObservable) {
|
|
934
|
+
var nextEventType = '$$xstate.next';
|
|
935
|
+
var errorEventType = '$$xstate.error';
|
|
936
|
+
var completeEventType = '$$xstate.complete'; // TODO: add event types
|
|
937
|
+
|
|
938
|
+
var behavior = {
|
|
939
|
+
transition: function transition(state, event, _ref4) {
|
|
940
|
+
var self = _ref4.self,
|
|
941
|
+
id = _ref4.id,
|
|
942
|
+
defer = _ref4.defer;
|
|
943
|
+
|
|
944
|
+
var _event = toSCXMLEvent(event);
|
|
945
|
+
|
|
946
|
+
if (state.canceled) {
|
|
947
|
+
return state;
|
|
948
|
+
}
|
|
949
|
+
|
|
950
|
+
switch (_event.name) {
|
|
951
|
+
case nextEventType:
|
|
952
|
+
state.data = event.data.data; // match the exact timing of events sent by machines
|
|
953
|
+
// send actions are not executed immediately
|
|
954
|
+
|
|
955
|
+
defer(function () {
|
|
956
|
+
var _self$_parent4;
|
|
957
|
+
|
|
958
|
+
(_self$_parent4 = self._parent) === null || _self$_parent4 === void 0 ? void 0 : _self$_parent4.send(toSCXMLEvent({
|
|
959
|
+
type: "xstate.snapshot.".concat(id),
|
|
960
|
+
data: _event.data.data
|
|
961
|
+
}, {
|
|
962
|
+
origin: self
|
|
963
|
+
}));
|
|
964
|
+
});
|
|
965
|
+
return state;
|
|
966
|
+
|
|
967
|
+
case errorEventType:
|
|
968
|
+
state.status = 'error';
|
|
969
|
+
state.data = _event.data.data;
|
|
970
|
+
return state;
|
|
971
|
+
|
|
972
|
+
case completeEventType:
|
|
973
|
+
state.status = 'done';
|
|
974
|
+
return state;
|
|
975
|
+
|
|
976
|
+
case stopSignalType:
|
|
977
|
+
state.canceled = true;
|
|
978
|
+
state.subscription.unsubscribe();
|
|
979
|
+
return state;
|
|
980
|
+
|
|
981
|
+
default:
|
|
982
|
+
return state;
|
|
983
|
+
}
|
|
984
|
+
},
|
|
985
|
+
getInitialState: function getInitialState() {
|
|
986
|
+
return {
|
|
987
|
+
subscription: undefined,
|
|
988
|
+
canceled: false,
|
|
989
|
+
status: 'active',
|
|
990
|
+
data: undefined
|
|
991
|
+
};
|
|
992
|
+
},
|
|
993
|
+
start: function start(state, _ref5) {
|
|
994
|
+
var self = _ref5.self;
|
|
995
|
+
state.subscription = lazyObservable().subscribe({
|
|
996
|
+
next: function next(value) {
|
|
997
|
+
self.send({
|
|
998
|
+
type: nextEventType,
|
|
999
|
+
data: value
|
|
1000
|
+
});
|
|
1001
|
+
},
|
|
1002
|
+
error: function error(err) {
|
|
1003
|
+
self.send({
|
|
1004
|
+
type: errorEventType,
|
|
1005
|
+
data: err
|
|
1006
|
+
});
|
|
1007
|
+
},
|
|
1008
|
+
complete: function complete() {
|
|
1009
|
+
self.send({
|
|
1010
|
+
type: completeEventType
|
|
1011
|
+
});
|
|
1012
|
+
}
|
|
1013
|
+
});
|
|
1014
|
+
return state;
|
|
1015
|
+
},
|
|
1016
|
+
getSnapshot: function getSnapshot(state) {
|
|
1017
|
+
return state.data;
|
|
1018
|
+
},
|
|
1019
|
+
getStatus: function getStatus(state) {
|
|
1020
|
+
return state;
|
|
1021
|
+
}
|
|
1022
|
+
};
|
|
1023
|
+
return behavior;
|
|
1024
|
+
}
|
|
1025
|
+
/**
|
|
1026
|
+
* Creates an event observable behavior that listens to an observable
|
|
1027
|
+
* that delivers event objects.
|
|
1028
|
+
*
|
|
1029
|
+
*
|
|
1030
|
+
* @param lazyObservable A function that creates an observable
|
|
1031
|
+
* @returns An event observable behavior
|
|
1032
|
+
*/
|
|
1033
|
+
|
|
1034
|
+
function fromEventObservable(lazyObservable) {
|
|
1035
|
+
var errorEventType = '$$xstate.error';
|
|
1036
|
+
var completeEventType = '$$xstate.complete'; // TODO: event types
|
|
1037
|
+
|
|
1038
|
+
var behavior = {
|
|
1039
|
+
transition: function transition(state, event) {
|
|
1040
|
+
var _event = toSCXMLEvent(event);
|
|
1041
|
+
|
|
1042
|
+
if (state.canceled) {
|
|
1043
|
+
return state;
|
|
1044
|
+
}
|
|
1045
|
+
|
|
1046
|
+
switch (_event.name) {
|
|
1047
|
+
case errorEventType:
|
|
1048
|
+
state.status = 'error';
|
|
1049
|
+
state.data = _event.data.data;
|
|
1050
|
+
return state;
|
|
1051
|
+
|
|
1052
|
+
case completeEventType:
|
|
1053
|
+
state.status = 'done';
|
|
1054
|
+
return state;
|
|
1055
|
+
|
|
1056
|
+
case stopSignalType:
|
|
1057
|
+
state.canceled = true;
|
|
1058
|
+
state.subscription.unsubscribe();
|
|
1059
|
+
return state;
|
|
1060
|
+
|
|
1061
|
+
default:
|
|
1062
|
+
return state;
|
|
1063
|
+
}
|
|
1064
|
+
},
|
|
1065
|
+
getInitialState: function getInitialState() {
|
|
1066
|
+
return {
|
|
1067
|
+
subscription: undefined,
|
|
1068
|
+
canceled: false,
|
|
1069
|
+
status: 'active',
|
|
1070
|
+
data: undefined
|
|
1071
|
+
};
|
|
1072
|
+
},
|
|
1073
|
+
start: function start(state, _ref6) {
|
|
1074
|
+
var self = _ref6.self;
|
|
1075
|
+
state.subscription = lazyObservable().subscribe({
|
|
1076
|
+
next: function next(value) {
|
|
1077
|
+
var _self$_parent5;
|
|
1078
|
+
|
|
1079
|
+
(_self$_parent5 = self._parent) === null || _self$_parent5 === void 0 ? void 0 : _self$_parent5.send(toSCXMLEvent(value, {
|
|
1080
|
+
origin: self
|
|
1081
|
+
}));
|
|
1082
|
+
},
|
|
1083
|
+
error: function error(err) {
|
|
1084
|
+
self.send({
|
|
1085
|
+
type: errorEventType,
|
|
1086
|
+
data: err
|
|
1087
|
+
});
|
|
1088
|
+
},
|
|
1089
|
+
complete: function complete() {
|
|
1090
|
+
self.send({
|
|
1091
|
+
type: completeEventType
|
|
1092
|
+
});
|
|
1093
|
+
}
|
|
1094
|
+
});
|
|
1095
|
+
return state;
|
|
1096
|
+
},
|
|
1097
|
+
getSnapshot: function getSnapshot(_) {
|
|
1098
|
+
return undefined;
|
|
1099
|
+
},
|
|
1100
|
+
getStatus: function getStatus(state) {
|
|
1101
|
+
return state;
|
|
1102
|
+
}
|
|
1103
|
+
};
|
|
1104
|
+
return behavior;
|
|
1105
|
+
}
|
|
1106
|
+
function isActorRef(item) {
|
|
1107
|
+
return !!item && _typeof(item) === 'object' && typeof item.send === 'function';
|
|
1108
|
+
} // TODO: refactor the return type, this could be written in a better way
|
|
1109
|
+
// but it's best to avoid unneccessary breaking changes now
|
|
1110
|
+
// @deprecated use `interpret(behavior)` instead
|
|
1111
|
+
|
|
1112
|
+
function toActorRef(actorRefLike) {
|
|
1113
|
+
var _objectSpread2$1;
|
|
1114
|
+
|
|
1115
|
+
return _objectSpread2((_objectSpread2$1 = {
|
|
1116
|
+
subscribe: function subscribe() {
|
|
1117
|
+
return {
|
|
1118
|
+
unsubscribe: function unsubscribe() {
|
|
1119
|
+
return void 0;
|
|
1120
|
+
}
|
|
1121
|
+
};
|
|
1122
|
+
},
|
|
1123
|
+
id: 'anonymous',
|
|
1124
|
+
getSnapshot: function getSnapshot() {
|
|
1125
|
+
return undefined;
|
|
1126
|
+
}
|
|
1127
|
+
}, _defineProperty(_objectSpread2$1, symbolObservable, function () {
|
|
1128
|
+
return this;
|
|
1129
|
+
}), _defineProperty(_objectSpread2$1, "status", exports.ActorStatus.Running), _objectSpread2$1), actorRefLike);
|
|
1130
|
+
}
|
|
1131
|
+
|
|
1132
|
+
var Mailbox = /*#__PURE__*/function () {
|
|
1133
|
+
function Mailbox(_process) {
|
|
1134
|
+
_classCallCheck(this, Mailbox);
|
|
1135
|
+
|
|
1136
|
+
this._process = _process;
|
|
1137
|
+
|
|
1138
|
+
_defineProperty(this, "_active", false);
|
|
1139
|
+
|
|
1140
|
+
_defineProperty(this, "_current", null);
|
|
1141
|
+
|
|
1142
|
+
_defineProperty(this, "_last", null);
|
|
1143
|
+
}
|
|
1144
|
+
|
|
1145
|
+
_createClass(Mailbox, [{
|
|
1146
|
+
key: "start",
|
|
1147
|
+
value: function start() {
|
|
1148
|
+
this._active = true;
|
|
1149
|
+
this.flush();
|
|
1150
|
+
}
|
|
1151
|
+
}, {
|
|
1152
|
+
key: "clear",
|
|
1153
|
+
value: function clear() {
|
|
1154
|
+
// we can't set _current to null because we might be currently processing
|
|
1155
|
+
// and enqueue following clear shouldnt start processing the enqueued item immediately
|
|
1156
|
+
if (this._current) {
|
|
1157
|
+
this._current.next = null;
|
|
1158
|
+
this._last = this._current;
|
|
1159
|
+
}
|
|
1160
|
+
} // TODO: rethink this design
|
|
1161
|
+
|
|
1162
|
+
}, {
|
|
1163
|
+
key: "prepend",
|
|
1164
|
+
value: function prepend(event) {
|
|
1165
|
+
if (!this._current) {
|
|
1166
|
+
this.enqueue(event);
|
|
1167
|
+
return;
|
|
1168
|
+
} // we know that something is already queued up
|
|
1169
|
+
// so the mailbox is already flushing or it's inactive
|
|
1170
|
+
// therefore the only thing that we need to do is to reassign `this._current`
|
|
1171
|
+
|
|
1172
|
+
|
|
1173
|
+
this._current = {
|
|
1174
|
+
value: event,
|
|
1175
|
+
next: this._current
|
|
1176
|
+
};
|
|
1177
|
+
}
|
|
1178
|
+
}, {
|
|
1179
|
+
key: "enqueue",
|
|
1180
|
+
value: function enqueue(event) {
|
|
1181
|
+
var enqueued = {
|
|
1182
|
+
value: event,
|
|
1183
|
+
next: null
|
|
1184
|
+
};
|
|
1185
|
+
|
|
1186
|
+
if (this._current) {
|
|
1187
|
+
this._last.next = enqueued;
|
|
1188
|
+
this._last = enqueued;
|
|
1189
|
+
return;
|
|
1190
|
+
}
|
|
1191
|
+
|
|
1192
|
+
this._current = enqueued;
|
|
1193
|
+
this._last = enqueued;
|
|
1194
|
+
|
|
1195
|
+
if (this._active) {
|
|
1196
|
+
this.flush();
|
|
1197
|
+
}
|
|
1198
|
+
}
|
|
1199
|
+
}, {
|
|
1200
|
+
key: "flush",
|
|
1201
|
+
value: function flush() {
|
|
1202
|
+
while (this._current) {
|
|
1203
|
+
// atm the given _process is responsible for implementing proper try/catch handling
|
|
1204
|
+
// we assume here that this won't throw in a way that can affect this mailbox
|
|
1205
|
+
var consumed = this._current;
|
|
1206
|
+
|
|
1207
|
+
this._process(consumed.value); // something could have been prepended in the meantime
|
|
1208
|
+
// so we need to be defensive here to avoid skipping over a prepended item
|
|
1209
|
+
|
|
1210
|
+
|
|
1211
|
+
if (consumed === this._current) {
|
|
1212
|
+
this._current = this._current.next;
|
|
1213
|
+
}
|
|
1214
|
+
}
|
|
1215
|
+
|
|
1216
|
+
this._last = null;
|
|
1217
|
+
}
|
|
1218
|
+
}]);
|
|
1219
|
+
|
|
1220
|
+
return Mailbox;
|
|
1221
|
+
}();
|
|
1222
|
+
|
|
1223
|
+
var children = new Map();
|
|
1224
|
+
var sessionIdIndex = 0;
|
|
1225
|
+
var registry = {
|
|
1226
|
+
bookId: function bookId() {
|
|
1227
|
+
return "x:".concat(sessionIdIndex++);
|
|
1228
|
+
},
|
|
1229
|
+
register: function register(id, actor) {
|
|
1230
|
+
children.set(id, actor);
|
|
1231
|
+
return id;
|
|
1232
|
+
},
|
|
1233
|
+
get: function get(id) {
|
|
1234
|
+
return children.get(id);
|
|
1235
|
+
},
|
|
1236
|
+
free: function free(id) {
|
|
1237
|
+
children["delete"](id);
|
|
1238
|
+
}
|
|
1239
|
+
};
|
|
1240
|
+
|
|
1241
|
+
var cache = new WeakMap();
|
|
1242
|
+
function memo(object, key, fn) {
|
|
1243
|
+
var memoizedData = cache.get(object);
|
|
1244
|
+
|
|
1245
|
+
if (!memoizedData) {
|
|
1246
|
+
memoizedData = _defineProperty({}, key, fn());
|
|
1247
|
+
cache.set(object, memoizedData);
|
|
1248
|
+
} else if (!(key in memoizedData)) {
|
|
1249
|
+
memoizedData[key] = fn();
|
|
1250
|
+
}
|
|
1251
|
+
|
|
1252
|
+
return memoizedData[key];
|
|
1253
|
+
}
|
|
1254
|
+
function evict(object, key) {
|
|
1255
|
+
if (!key) {
|
|
1256
|
+
return void cache["delete"](object);
|
|
1257
|
+
}
|
|
1258
|
+
|
|
1259
|
+
var memoizedData = cache.get(object);
|
|
1260
|
+
|
|
1261
|
+
if (memoizedData) {
|
|
1262
|
+
delete memoizedData[key];
|
|
1263
|
+
}
|
|
1264
|
+
}
|
|
1265
|
+
|
|
1266
|
+
(function (ActorStatus) {
|
|
1267
|
+
ActorStatus[ActorStatus["NotStarted"] = 0] = "NotStarted";
|
|
1268
|
+
ActorStatus[ActorStatus["Running"] = 1] = "Running";
|
|
1269
|
+
ActorStatus[ActorStatus["Stopped"] = 2] = "Stopped";
|
|
1270
|
+
})(exports.ActorStatus || (exports.ActorStatus = {}));
|
|
1271
|
+
|
|
1272
|
+
var defaultOptions = {
|
|
1273
|
+
deferEvents: true,
|
|
1274
|
+
clock: {
|
|
1275
|
+
setTimeout: function (_setTimeout) {
|
|
1276
|
+
function setTimeout(_x, _x2) {
|
|
1277
|
+
return _setTimeout.apply(this, arguments);
|
|
1278
|
+
}
|
|
1279
|
+
|
|
1280
|
+
setTimeout.toString = function () {
|
|
1281
|
+
return _setTimeout.toString();
|
|
1282
|
+
};
|
|
1283
|
+
|
|
1284
|
+
return setTimeout;
|
|
1285
|
+
}(function (fn, ms) {
|
|
1286
|
+
return setTimeout(fn, ms);
|
|
1287
|
+
}),
|
|
1288
|
+
clearTimeout: function (_clearTimeout) {
|
|
1289
|
+
function clearTimeout(_x3) {
|
|
1290
|
+
return _clearTimeout.apply(this, arguments);
|
|
1291
|
+
}
|
|
1292
|
+
|
|
1293
|
+
clearTimeout.toString = function () {
|
|
1294
|
+
return _clearTimeout.toString();
|
|
1295
|
+
};
|
|
1296
|
+
|
|
1297
|
+
return clearTimeout;
|
|
1298
|
+
}(function (id) {
|
|
1299
|
+
return clearTimeout(id);
|
|
1300
|
+
})
|
|
1301
|
+
},
|
|
1302
|
+
logger: console.log.bind(console),
|
|
1303
|
+
devTools: false
|
|
1304
|
+
};
|
|
1305
|
+
var Interpreter = /*#__PURE__*/function () {
|
|
1306
|
+
/**
|
|
1307
|
+
* The current state of the interpreted behavior.
|
|
1308
|
+
*/
|
|
1309
|
+
|
|
1310
|
+
/**
|
|
1311
|
+
* The clock that is responsible for setting and clearing timeouts, such as delayed events and transitions.
|
|
1312
|
+
*/
|
|
1313
|
+
|
|
1314
|
+
/**
|
|
1315
|
+
* The unique identifier for this actor relative to its parent.
|
|
1316
|
+
*/
|
|
1317
|
+
|
|
1318
|
+
/**
|
|
1319
|
+
* Whether the service is started.
|
|
1320
|
+
*/
|
|
1321
|
+
// Actor Ref
|
|
1322
|
+
|
|
1323
|
+
/**
|
|
1324
|
+
* The globally unique process ID for this invocation.
|
|
1325
|
+
*/
|
|
1326
|
+
// TODO: remove
|
|
1327
|
+
|
|
1328
|
+
/**
|
|
1329
|
+
* Creates a new Interpreter instance (i.e., service) for the given behavior with the provided options, if any.
|
|
1330
|
+
*
|
|
1331
|
+
* @param behavior The behavior to be interpreted
|
|
1332
|
+
* @param options Interpreter options
|
|
1333
|
+
*/
|
|
1334
|
+
function Interpreter(behavior, options) {
|
|
1335
|
+
var _this = this;
|
|
1336
|
+
|
|
1337
|
+
_classCallCheck(this, Interpreter);
|
|
1338
|
+
|
|
1339
|
+
this.behavior = behavior;
|
|
1340
|
+
|
|
1341
|
+
_defineProperty(this, "_state", void 0);
|
|
1342
|
+
|
|
1343
|
+
_defineProperty(this, "clock", void 0);
|
|
1344
|
+
|
|
1345
|
+
_defineProperty(this, "options", void 0);
|
|
1346
|
+
|
|
1347
|
+
_defineProperty(this, "id", void 0);
|
|
1348
|
+
|
|
1349
|
+
_defineProperty(this, "mailbox", new Mailbox(this._process.bind(this)));
|
|
1350
|
+
|
|
1351
|
+
_defineProperty(this, "delayedEventsMap", {});
|
|
1352
|
+
|
|
1353
|
+
_defineProperty(this, "observers", new Set());
|
|
1354
|
+
|
|
1355
|
+
_defineProperty(this, "logger", void 0);
|
|
1356
|
+
|
|
1357
|
+
_defineProperty(this, "status", exports.ActorStatus.NotStarted);
|
|
1358
|
+
|
|
1359
|
+
_defineProperty(this, "_parent", void 0);
|
|
1360
|
+
|
|
1361
|
+
_defineProperty(this, "ref", void 0);
|
|
1362
|
+
|
|
1363
|
+
_defineProperty(this, "_actorContext", void 0);
|
|
1364
|
+
|
|
1365
|
+
_defineProperty(this, "sessionId", void 0);
|
|
1366
|
+
|
|
1367
|
+
_defineProperty(this, "_forwardTo", new Set());
|
|
1368
|
+
|
|
1369
|
+
_defineProperty(this, "_deferred", []);
|
|
1370
|
+
|
|
1371
|
+
var resolvedOptions = _objectSpread2(_objectSpread2({}, defaultOptions), options);
|
|
1372
|
+
|
|
1373
|
+
var clock = resolvedOptions.clock,
|
|
1374
|
+
logger = resolvedOptions.logger,
|
|
1375
|
+
parent = resolvedOptions.parent,
|
|
1376
|
+
id = resolvedOptions.id;
|
|
1377
|
+
var self = this; // TODO: this should come from a "system"
|
|
1378
|
+
|
|
1379
|
+
this.sessionId = registry.bookId();
|
|
1380
|
+
this.id = id !== null && id !== void 0 ? id : this.sessionId;
|
|
1381
|
+
this.logger = logger;
|
|
1382
|
+
this.clock = clock;
|
|
1383
|
+
this._parent = parent;
|
|
1384
|
+
this.options = resolvedOptions;
|
|
1385
|
+
this.ref = this;
|
|
1386
|
+
this._actorContext = {
|
|
1387
|
+
self: self,
|
|
1388
|
+
id: this.id,
|
|
1389
|
+
sessionId: this.sessionId,
|
|
1390
|
+
logger: this.logger,
|
|
1391
|
+
defer: function defer(fn) {
|
|
1392
|
+
_this._deferred.push(fn);
|
|
1393
|
+
}
|
|
1394
|
+
}; // Ensure that the send method is bound to this interpreter instance
|
|
1395
|
+
// if destructured
|
|
1396
|
+
|
|
1397
|
+
this.send = this.send.bind(this);
|
|
1398
|
+
} // array of functions to defer
|
|
1399
|
+
|
|
1400
|
+
|
|
1401
|
+
_createClass(Interpreter, [{
|
|
1402
|
+
key: "_getInitialState",
|
|
1403
|
+
value: function _getInitialState() {
|
|
1404
|
+
var _this2 = this;
|
|
1405
|
+
|
|
1406
|
+
return memo(this, 'initial', function () {
|
|
1407
|
+
return _this2.behavior.getInitialState(_this2._actorContext);
|
|
1408
|
+
});
|
|
1409
|
+
}
|
|
1410
|
+
}, {
|
|
1411
|
+
key: "update",
|
|
1412
|
+
value: function update(state) {
|
|
1413
|
+
var _this$behavior$getSta, _this$behavior, _this$_parent, _this$_parent2;
|
|
1414
|
+
|
|
1415
|
+
// Update state
|
|
1416
|
+
this._state = state;
|
|
1417
|
+
var snapshot = this.getSnapshot(); // Execute deferred effects
|
|
1418
|
+
|
|
1419
|
+
var deferredFn;
|
|
1420
|
+
|
|
1421
|
+
while (deferredFn = this._deferred.shift()) {
|
|
1422
|
+
deferredFn(state);
|
|
1423
|
+
}
|
|
1424
|
+
|
|
1425
|
+
var _iterator = _createForOfIteratorHelper(this.observers),
|
|
1426
|
+
_step;
|
|
1427
|
+
|
|
1428
|
+
try {
|
|
1429
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
1430
|
+
var _observer2$next;
|
|
1431
|
+
|
|
1432
|
+
var _observer2 = _step.value;
|
|
1433
|
+
(_observer2$next = _observer2.next) === null || _observer2$next === void 0 ? void 0 : _observer2$next.call(_observer2, snapshot);
|
|
1434
|
+
}
|
|
1435
|
+
} catch (err) {
|
|
1436
|
+
_iterator.e(err);
|
|
1437
|
+
} finally {
|
|
1438
|
+
_iterator.f();
|
|
1439
|
+
}
|
|
1440
|
+
|
|
1441
|
+
var status = (_this$behavior$getSta = (_this$behavior = this.behavior).getStatus) === null || _this$behavior$getSta === void 0 ? void 0 : _this$behavior$getSta.call(_this$behavior, state);
|
|
1442
|
+
|
|
1443
|
+
switch (status === null || status === void 0 ? void 0 : status.status) {
|
|
1444
|
+
case 'done':
|
|
1445
|
+
(_this$_parent = this._parent) === null || _this$_parent === void 0 ? void 0 : _this$_parent.send(toSCXMLEvent(doneInvoke(this.id, status.data), {
|
|
1446
|
+
origin: this,
|
|
1447
|
+
invokeid: this.id
|
|
1448
|
+
}));
|
|
1449
|
+
|
|
1450
|
+
this._stop();
|
|
1451
|
+
|
|
1452
|
+
break;
|
|
1453
|
+
|
|
1454
|
+
case 'error':
|
|
1455
|
+
(_this$_parent2 = this._parent) === null || _this$_parent2 === void 0 ? void 0 : _this$_parent2.send(toSCXMLEvent(error$1(this.id, status.data), {
|
|
1456
|
+
origin: this
|
|
1457
|
+
}));
|
|
1458
|
+
|
|
1459
|
+
var _iterator2 = _createForOfIteratorHelper(this.observers),
|
|
1460
|
+
_step2;
|
|
1461
|
+
|
|
1462
|
+
try {
|
|
1463
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
1464
|
+
var _observer$error;
|
|
1465
|
+
|
|
1466
|
+
var _observer = _step2.value;
|
|
1467
|
+
(_observer$error = _observer.error) === null || _observer$error === void 0 ? void 0 : _observer$error.call(_observer, status.data);
|
|
1468
|
+
}
|
|
1469
|
+
} catch (err) {
|
|
1470
|
+
_iterator2.e(err);
|
|
1471
|
+
} finally {
|
|
1472
|
+
_iterator2.f();
|
|
1473
|
+
}
|
|
1474
|
+
|
|
1475
|
+
break;
|
|
1476
|
+
}
|
|
1477
|
+
}
|
|
1478
|
+
/*
|
|
1479
|
+
* Adds a listener that is notified whenever a state transition happens. The listener is called with
|
|
1480
|
+
* the next state and the event object that caused the state transition.
|
|
1481
|
+
*
|
|
1482
|
+
* @param listener The state listener
|
|
1483
|
+
* @deprecated Use .subscribe(listener) instead
|
|
1484
|
+
*/
|
|
1485
|
+
|
|
1486
|
+
}, {
|
|
1487
|
+
key: "onTransition",
|
|
1488
|
+
value: function onTransition(listener) {
|
|
1489
|
+
var observer = toObserver(listener);
|
|
1490
|
+
this.observers.add(observer); // Send current state to listener
|
|
1491
|
+
|
|
1492
|
+
if (this.status === exports.ActorStatus.Running) {
|
|
1493
|
+
var _observer$next;
|
|
1494
|
+
|
|
1495
|
+
(_observer$next = observer.next) === null || _observer$next === void 0 ? void 0 : _observer$next.call(observer, this.getSnapshot());
|
|
1496
|
+
}
|
|
1497
|
+
|
|
1498
|
+
return this;
|
|
1499
|
+
}
|
|
1500
|
+
}, {
|
|
1501
|
+
key: "subscribe",
|
|
1502
|
+
value: function subscribe(nextListenerOrObserver, errorListener, completeListener) {
|
|
1503
|
+
var _this3 = this;
|
|
1504
|
+
|
|
1505
|
+
var observer = toObserver(nextListenerOrObserver, errorListener, completeListener);
|
|
1506
|
+
this.observers.add(observer); // Send current state to listener
|
|
1507
|
+
|
|
1508
|
+
if (this.status !== exports.ActorStatus.NotStarted) {
|
|
1509
|
+
var _observer$next2;
|
|
1510
|
+
|
|
1511
|
+
(_observer$next2 = observer.next) === null || _observer$next2 === void 0 ? void 0 : _observer$next2.call(observer, this.getSnapshot());
|
|
1512
|
+
}
|
|
1513
|
+
|
|
1514
|
+
if (this.status === exports.ActorStatus.Stopped) {
|
|
1515
|
+
var _observer$complete;
|
|
1516
|
+
|
|
1517
|
+
(_observer$complete = observer.complete) === null || _observer$complete === void 0 ? void 0 : _observer$complete.call(observer);
|
|
1518
|
+
this.observers["delete"](observer);
|
|
1519
|
+
}
|
|
1520
|
+
|
|
1521
|
+
return {
|
|
1522
|
+
unsubscribe: function unsubscribe() {
|
|
1523
|
+
_this3.observers["delete"](observer);
|
|
1524
|
+
}
|
|
1525
|
+
};
|
|
1526
|
+
}
|
|
1527
|
+
/**
|
|
1528
|
+
* Adds a state listener that is notified when the statechart has reached its final state.
|
|
1529
|
+
* @param listener The state listener
|
|
1530
|
+
*/
|
|
1531
|
+
|
|
1532
|
+
}, {
|
|
1533
|
+
key: "onDone",
|
|
1534
|
+
value: function onDone(listener) {
|
|
1535
|
+
var _this4 = this;
|
|
1536
|
+
|
|
1537
|
+
this.observers.add({
|
|
1538
|
+
complete: function complete() {
|
|
1539
|
+
var snapshot = _this4.getSnapshot();
|
|
1540
|
+
|
|
1541
|
+
if (snapshot.done) {
|
|
1542
|
+
listener(doneInvoke(_this4.id, snapshot.output));
|
|
1543
|
+
}
|
|
1544
|
+
}
|
|
1545
|
+
});
|
|
1546
|
+
return this;
|
|
1547
|
+
}
|
|
1548
|
+
/**
|
|
1549
|
+
* Starts the interpreter from the given state, or the initial state.
|
|
1550
|
+
* @param initialState The state to start the statechart from
|
|
1551
|
+
*/
|
|
1552
|
+
|
|
1553
|
+
}, {
|
|
1554
|
+
key: "start",
|
|
1555
|
+
value: function start( // TODO: remove this argument
|
|
1556
|
+
initialState) {
|
|
1557
|
+
var _this$behavior$restor, _this$behavior2, _this$_getInitialStat;
|
|
1558
|
+
|
|
1559
|
+
if (this.status === exports.ActorStatus.Running) {
|
|
1560
|
+
// Do not restart the service if it is already started
|
|
1561
|
+
return this;
|
|
1562
|
+
}
|
|
1563
|
+
|
|
1564
|
+
registry.register(this.sessionId, this.ref);
|
|
1565
|
+
this.status = exports.ActorStatus.Running;
|
|
1566
|
+
var resolvedState = initialState ? (_this$behavior$restor = (_this$behavior2 = this.behavior).restoreState) === null || _this$behavior$restor === void 0 ? void 0 : _this$behavior$restor.call(_this$behavior2, initialState, this._actorContext) : (_this$_getInitialStat = this._getInitialState()) !== null && _this$_getInitialStat !== void 0 ? _this$_getInitialStat : undefined;
|
|
1567
|
+
|
|
1568
|
+
if (this.behavior.start) {
|
|
1569
|
+
resolvedState = this.behavior.start(resolvedState, this._actorContext);
|
|
1570
|
+
} // TODO: this notifies all subscribers but usually this is redundant
|
|
1571
|
+
// if we are using the initialState as `resolvedState` then there is no real change happening here
|
|
1572
|
+
// we need to rethink if this needs to be refactored
|
|
1573
|
+
|
|
1574
|
+
|
|
1575
|
+
this.update(resolvedState);
|
|
1576
|
+
|
|
1577
|
+
if (this.options.devTools) {
|
|
1578
|
+
this.attachDevTools();
|
|
1579
|
+
}
|
|
1580
|
+
|
|
1581
|
+
this.mailbox.start();
|
|
1582
|
+
return this;
|
|
1583
|
+
}
|
|
1584
|
+
}, {
|
|
1585
|
+
key: "_process",
|
|
1586
|
+
value: function _process(event) {
|
|
1587
|
+
this.forward(event);
|
|
1588
|
+
|
|
1589
|
+
try {
|
|
1590
|
+
var nextState = this.behavior.transition(this._state, event, this._actorContext);
|
|
1591
|
+
this.update(nextState);
|
|
1592
|
+
|
|
1593
|
+
if (event.name === stopSignalType) {
|
|
1594
|
+
this._stop();
|
|
1595
|
+
}
|
|
1596
|
+
} catch (err) {
|
|
1597
|
+
// TODO: properly handle errors
|
|
1598
|
+
if (this.observers.size > 0) {
|
|
1599
|
+
this.observers.forEach(function (observer) {
|
|
1600
|
+
var _observer$error2;
|
|
1601
|
+
|
|
1602
|
+
(_observer$error2 = observer.error) === null || _observer$error2 === void 0 ? void 0 : _observer$error2.call(observer, err);
|
|
1603
|
+
});
|
|
1604
|
+
this.stop();
|
|
1605
|
+
} else {
|
|
1606
|
+
throw err;
|
|
1607
|
+
}
|
|
1608
|
+
}
|
|
1609
|
+
}
|
|
1610
|
+
/**
|
|
1611
|
+
* Stops the interpreter and unsubscribe all listeners.
|
|
1612
|
+
*/
|
|
1613
|
+
|
|
1614
|
+
}, {
|
|
1615
|
+
key: "stop",
|
|
1616
|
+
value: function stop() {
|
|
1617
|
+
evict(this, 'initial');
|
|
1618
|
+
|
|
1619
|
+
if (this.status === exports.ActorStatus.Stopped) {
|
|
1620
|
+
return this;
|
|
1621
|
+
}
|
|
1622
|
+
|
|
1623
|
+
this.mailbox.clear();
|
|
1624
|
+
|
|
1625
|
+
if (this.status === exports.ActorStatus.NotStarted) {
|
|
1626
|
+
this.status = exports.ActorStatus.Stopped;
|
|
1627
|
+
return this;
|
|
1628
|
+
}
|
|
1629
|
+
|
|
1630
|
+
this.mailbox.enqueue(toSCXMLEvent({
|
|
1631
|
+
type: stopSignalType
|
|
1632
|
+
}));
|
|
1633
|
+
return this;
|
|
1634
|
+
}
|
|
1635
|
+
}, {
|
|
1636
|
+
key: "_complete",
|
|
1637
|
+
value: function _complete() {
|
|
1638
|
+
var _iterator3 = _createForOfIteratorHelper(this.observers),
|
|
1639
|
+
_step3;
|
|
1640
|
+
|
|
1641
|
+
try {
|
|
1642
|
+
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
1643
|
+
var _observer3$complete;
|
|
1644
|
+
|
|
1645
|
+
var _observer3 = _step3.value;
|
|
1646
|
+
(_observer3$complete = _observer3.complete) === null || _observer3$complete === void 0 ? void 0 : _observer3$complete.call(_observer3);
|
|
1647
|
+
}
|
|
1648
|
+
} catch (err) {
|
|
1649
|
+
_iterator3.e(err);
|
|
1650
|
+
} finally {
|
|
1651
|
+
_iterator3.f();
|
|
1652
|
+
}
|
|
1653
|
+
|
|
1654
|
+
this.observers.clear();
|
|
1655
|
+
}
|
|
1656
|
+
}, {
|
|
1657
|
+
key: "_stop",
|
|
1658
|
+
value: function _stop() {
|
|
1659
|
+
this._complete();
|
|
1660
|
+
|
|
1661
|
+
if (this.status !== exports.ActorStatus.Running) {
|
|
1662
|
+
// Interpreter already stopped; do nothing
|
|
1663
|
+
return this;
|
|
1664
|
+
} // Cancel all delayed events
|
|
1665
|
+
|
|
1666
|
+
|
|
1667
|
+
for (var _i = 0, _Object$keys = Object.keys(this.delayedEventsMap); _i < _Object$keys.length; _i++) {
|
|
1668
|
+
var key = _Object$keys[_i];
|
|
1669
|
+
this.clock.clearTimeout(this.delayedEventsMap[key]);
|
|
1670
|
+
} // TODO: mailbox.reset
|
|
1671
|
+
|
|
1672
|
+
|
|
1673
|
+
this.mailbox.clear(); // TODO: after `stop` we must prepare ourselves for receiving events again
|
|
1674
|
+
// events sent *after* stop signal must be queued
|
|
1675
|
+
// it seems like this should be the common behavior for all of our consumers
|
|
1676
|
+
// so perhaps this should be unified somehow for all of them
|
|
1677
|
+
|
|
1678
|
+
this.mailbox = new Mailbox(this._process.bind(this));
|
|
1679
|
+
this.status = exports.ActorStatus.Stopped;
|
|
1680
|
+
registry.free(this.sessionId);
|
|
1681
|
+
return this;
|
|
1682
|
+
}
|
|
1683
|
+
/**
|
|
1684
|
+
* Sends an event to the running interpreter to trigger a transition.
|
|
1685
|
+
*
|
|
1686
|
+
* An array of events (batched) can be sent as well, which will send all
|
|
1687
|
+
* batched events to the running interpreter. The listeners will be
|
|
1688
|
+
* notified only **once** when all events are processed.
|
|
1689
|
+
*
|
|
1690
|
+
* @param event The event(s) to send
|
|
1691
|
+
*/
|
|
1692
|
+
|
|
1693
|
+
}, {
|
|
1694
|
+
key: "send",
|
|
1695
|
+
value: function send(event) {
|
|
1696
|
+
var _event = toSCXMLEvent(event);
|
|
1697
|
+
|
|
1698
|
+
if (this.status === exports.ActorStatus.Stopped) {
|
|
1699
|
+
|
|
1700
|
+
return;
|
|
1701
|
+
}
|
|
1702
|
+
|
|
1703
|
+
if (this.status !== exports.ActorStatus.Running && !this.options.deferEvents) {
|
|
1704
|
+
throw new Error("Event \"".concat(_event.name, "\" was sent to uninitialized actor \"").concat(this.id // tslint:disable-next-line:max-line-length
|
|
1705
|
+
, "\". Make sure .start() is called for this actor, or set { deferEvents: true } in the actor options.\nEvent: ").concat(JSON.stringify(_event.data)));
|
|
1706
|
+
}
|
|
1707
|
+
|
|
1708
|
+
this.mailbox.enqueue(_event);
|
|
1709
|
+
} // TODO: remove
|
|
1710
|
+
|
|
1711
|
+
}, {
|
|
1712
|
+
key: "forward",
|
|
1713
|
+
value: function forward(event) {
|
|
1714
|
+
// The _forwardTo set will be empty for non-machine actors anyway
|
|
1715
|
+
var _iterator4 = _createForOfIteratorHelper(this._forwardTo),
|
|
1716
|
+
_step4;
|
|
1717
|
+
|
|
1718
|
+
try {
|
|
1719
|
+
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
|
1720
|
+
var child = _step4.value;
|
|
1721
|
+
child.send(event);
|
|
1722
|
+
}
|
|
1723
|
+
} catch (err) {
|
|
1724
|
+
_iterator4.e(err);
|
|
1725
|
+
} finally {
|
|
1726
|
+
_iterator4.f();
|
|
1727
|
+
}
|
|
1728
|
+
} // TODO: make private (and figure out a way to do this within the machine)
|
|
1729
|
+
|
|
1730
|
+
}, {
|
|
1731
|
+
key: "delaySend",
|
|
1732
|
+
value: function delaySend(sendAction) {
|
|
1733
|
+
var _this5 = this;
|
|
1734
|
+
|
|
1735
|
+
this.delayedEventsMap[sendAction.params.id] = this.clock.setTimeout(function () {
|
|
1736
|
+
if (sendAction.params.to) {
|
|
1737
|
+
sendAction.params.to.send(sendAction.params._event);
|
|
1738
|
+
} else {
|
|
1739
|
+
_this5.send(sendAction.params._event);
|
|
1740
|
+
}
|
|
1741
|
+
}, sendAction.params.delay);
|
|
1742
|
+
} // TODO: make private (and figure out a way to do this within the machine)
|
|
1743
|
+
|
|
1744
|
+
}, {
|
|
1745
|
+
key: "cancel",
|
|
1746
|
+
value: function cancel(sendId) {
|
|
1747
|
+
this.clock.clearTimeout(this.delayedEventsMap[sendId]);
|
|
1748
|
+
delete this.delayedEventsMap[sendId];
|
|
1749
|
+
}
|
|
1750
|
+
}, {
|
|
1751
|
+
key: "attachDevTools",
|
|
1752
|
+
value: function attachDevTools() {
|
|
1753
|
+
var devTools = this.options.devTools;
|
|
1754
|
+
|
|
1755
|
+
if (devTools) {
|
|
1756
|
+
var resolvedDevToolsAdapter = typeof devTools === 'function' ? devTools : dev_dist_xstateDev.devToolsAdapter;
|
|
1757
|
+
resolvedDevToolsAdapter(this);
|
|
1758
|
+
}
|
|
1759
|
+
}
|
|
1760
|
+
}, {
|
|
1761
|
+
key: "toJSON",
|
|
1762
|
+
value: function toJSON() {
|
|
1763
|
+
return {
|
|
1764
|
+
id: this.id
|
|
1765
|
+
};
|
|
1766
|
+
}
|
|
1767
|
+
}, {
|
|
1768
|
+
key: symbolObservable,
|
|
1769
|
+
value: function value() {
|
|
1770
|
+
return this;
|
|
1771
|
+
}
|
|
1772
|
+
}, {
|
|
1773
|
+
key: "getSnapshot",
|
|
1774
|
+
value: function getSnapshot() {
|
|
1775
|
+
var _this$behavior$getSna;
|
|
1776
|
+
|
|
1777
|
+
var getter = (_this$behavior$getSna = this.behavior.getSnapshot) !== null && _this$behavior$getSna !== void 0 ? _this$behavior$getSna : function (s) {
|
|
1778
|
+
return s;
|
|
1779
|
+
};
|
|
1780
|
+
|
|
1781
|
+
if (this.status === exports.ActorStatus.NotStarted) {
|
|
1782
|
+
return getter(this._getInitialState());
|
|
1783
|
+
}
|
|
1784
|
+
|
|
1785
|
+
return getter(this._state);
|
|
1786
|
+
}
|
|
1787
|
+
}]);
|
|
1788
|
+
|
|
1789
|
+
return Interpreter;
|
|
1790
|
+
}();
|
|
1791
|
+
/**
|
|
1792
|
+
* Creates a new Interpreter instance for the given machine with the provided options, if any.
|
|
1793
|
+
*
|
|
1794
|
+
* @param machine The machine to interpret
|
|
1795
|
+
* @param options Interpreter options
|
|
1796
|
+
*/
|
|
1797
|
+
|
|
1798
|
+
function interpret(behavior, options) {
|
|
1799
|
+
var interpreter = new Interpreter(behavior, options);
|
|
1800
|
+
return interpreter;
|
|
1801
|
+
}
|
|
1802
|
+
|
|
1803
|
+
/**
|
|
1804
|
+
* Stops an actor.
|
|
1805
|
+
*
|
|
1806
|
+
* @param actorRef The actor to stop.
|
|
1807
|
+
*/
|
|
1808
|
+
|
|
1809
|
+
function stop$1(actorRef) {
|
|
1810
|
+
var actor = actorRef;
|
|
1811
|
+
return createDynamicAction({
|
|
1812
|
+
type: stop,
|
|
1813
|
+
params: {
|
|
1814
|
+
actor: actor
|
|
1815
|
+
}
|
|
1816
|
+
}, function (_event, _ref) {
|
|
1817
|
+
var state = _ref.state;
|
|
1818
|
+
var actorRefOrString = isFunction(actor) ? actor(state.context, _event.data) : actor;
|
|
1819
|
+
var actorRef = typeof actorRefOrString === 'string' ? state.children[actorRefOrString] : actorRefOrString;
|
|
1820
|
+
return [state, {
|
|
1821
|
+
type: 'xstate.stop',
|
|
1822
|
+
params: {
|
|
1823
|
+
actor: actorRef
|
|
1824
|
+
},
|
|
1825
|
+
execute: function execute(actorCtx) {
|
|
1826
|
+
if (!actorRef) {
|
|
1827
|
+
return;
|
|
1828
|
+
}
|
|
1829
|
+
|
|
1830
|
+
if (actorRef.status !== exports.ActorStatus.Running) {
|
|
1831
|
+
var _actorRef$stop;
|
|
1832
|
+
|
|
1833
|
+
(_actorRef$stop = actorRef.stop) === null || _actorRef$stop === void 0 ? void 0 : _actorRef$stop.call(actorRef);
|
|
1834
|
+
return;
|
|
1835
|
+
}
|
|
1836
|
+
|
|
1837
|
+
actorCtx.defer(function () {
|
|
1838
|
+
var _actorRef$stop2;
|
|
1839
|
+
|
|
1840
|
+
(_actorRef$stop2 = actorRef.stop) === null || _actorRef$stop2 === void 0 ? void 0 : _actorRef$stop2.call(actorRef);
|
|
1841
|
+
});
|
|
1842
|
+
}
|
|
1843
|
+
}];
|
|
1844
|
+
});
|
|
1845
|
+
}
|
|
1846
|
+
|
|
1847
|
+
var defaultLogExpr = function defaultLogExpr(context, event) {
|
|
1848
|
+
return {
|
|
1849
|
+
context: context,
|
|
1850
|
+
event: event
|
|
1851
|
+
};
|
|
1852
|
+
};
|
|
1853
|
+
/**
|
|
1854
|
+
*
|
|
1855
|
+
* @param expr The expression function to evaluate which will be logged.
|
|
1856
|
+
* Takes in 2 arguments:
|
|
1857
|
+
* - `ctx` - the current state context
|
|
1858
|
+
* - `event` - the event that caused this action to be executed.
|
|
1859
|
+
* @param label The label to give to the logged expression.
|
|
1860
|
+
*/
|
|
1861
|
+
|
|
1862
|
+
|
|
1863
|
+
function log$1() {
|
|
1864
|
+
var expr = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultLogExpr;
|
|
1865
|
+
var label = arguments.length > 1 ? arguments[1] : undefined;
|
|
1866
|
+
return createDynamicAction({
|
|
1867
|
+
type: log,
|
|
1868
|
+
params: {
|
|
1869
|
+
label: label,
|
|
1870
|
+
expr: expr
|
|
1871
|
+
}
|
|
1872
|
+
}, function (_event, _ref) {
|
|
1873
|
+
var state = _ref.state;
|
|
1874
|
+
var resolvedValue = typeof expr === 'function' ? expr(state.context, _event.data, {
|
|
1875
|
+
_event: _event
|
|
1876
|
+
}) : expr;
|
|
1877
|
+
return [state, {
|
|
1878
|
+
type: 'xstate.log',
|
|
1879
|
+
params: {
|
|
1880
|
+
label: label,
|
|
1881
|
+
value: resolvedValue
|
|
1882
|
+
},
|
|
1883
|
+
execute: function execute(actorCtx) {
|
|
1884
|
+
if (label) {
|
|
1885
|
+
var _actorCtx$logger;
|
|
1886
|
+
|
|
1887
|
+
(_actorCtx$logger = actorCtx.logger) === null || _actorCtx$logger === void 0 ? void 0 : _actorCtx$logger.call(actorCtx, label, resolvedValue);
|
|
1888
|
+
} else {
|
|
1889
|
+
var _actorCtx$logger2;
|
|
1890
|
+
|
|
1891
|
+
(_actorCtx$logger2 = actorCtx.logger) === null || _actorCtx$logger2 === void 0 ? void 0 : _actorCtx$logger2.call(actorCtx, resolvedValue);
|
|
1892
|
+
}
|
|
1893
|
+
}
|
|
1894
|
+
}];
|
|
1895
|
+
});
|
|
1896
|
+
}
|
|
1897
|
+
|
|
1898
|
+
/**
|
|
1899
|
+
* Cancels an in-flight `send(...)` action. A canceled sent action will not
|
|
1900
|
+
* be executed, nor will its event be sent, unless it has already been sent
|
|
1901
|
+
* (e.g., if `cancel(...)` is called after the `send(...)` action's `delay`).
|
|
1902
|
+
*
|
|
1903
|
+
* @param sendId The `id` of the `send(...)` action to cancel.
|
|
1904
|
+
*/
|
|
1905
|
+
|
|
1906
|
+
function cancel$1(sendId) {
|
|
1907
|
+
return createDynamicAction({
|
|
1908
|
+
type: cancel,
|
|
1909
|
+
params: {
|
|
1910
|
+
sendId: sendId
|
|
1911
|
+
}
|
|
1912
|
+
}, function (_event, _ref) {
|
|
1913
|
+
var state = _ref.state;
|
|
1914
|
+
var resolvedSendId = isFunction(sendId) ? sendId(state.context, _event.data, {
|
|
1915
|
+
_event: _event
|
|
1916
|
+
}) : sendId;
|
|
1917
|
+
return [state, {
|
|
1918
|
+
type: 'xstate.cancel',
|
|
1919
|
+
params: {
|
|
1920
|
+
sendId: resolvedSendId
|
|
1921
|
+
},
|
|
1922
|
+
execute: function execute(actorCtx) {
|
|
1923
|
+
var interpreter = actorCtx.self;
|
|
1924
|
+
interpreter.cancel(resolvedSendId);
|
|
1925
|
+
}
|
|
1926
|
+
}];
|
|
1927
|
+
});
|
|
1928
|
+
}
|
|
1929
|
+
|
|
1930
|
+
function _objectWithoutPropertiesLoose(source, excluded) {
|
|
1931
|
+
if (source == null) return {};
|
|
1932
|
+
var target = {};
|
|
1933
|
+
var sourceKeys = Object.keys(source);
|
|
1934
|
+
var key, i;
|
|
1935
|
+
|
|
1936
|
+
for (i = 0; i < sourceKeys.length; i++) {
|
|
1937
|
+
key = sourceKeys[i];
|
|
1938
|
+
if (excluded.indexOf(key) >= 0) continue;
|
|
1939
|
+
target[key] = source[key];
|
|
1940
|
+
}
|
|
1941
|
+
|
|
1942
|
+
return target;
|
|
1943
|
+
}
|
|
1944
|
+
|
|
1945
|
+
function _objectWithoutProperties(source, excluded) {
|
|
1946
|
+
if (source == null) return {};
|
|
1947
|
+
var target = _objectWithoutPropertiesLoose(source, excluded);
|
|
1948
|
+
var key, i;
|
|
1949
|
+
|
|
1950
|
+
if (Object.getOwnPropertySymbols) {
|
|
1951
|
+
var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
|
|
1952
|
+
|
|
1953
|
+
for (i = 0; i < sourceSymbolKeys.length; i++) {
|
|
1954
|
+
key = sourceSymbolKeys[i];
|
|
1955
|
+
if (excluded.indexOf(key) >= 0) continue;
|
|
1956
|
+
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
|
|
1957
|
+
target[key] = source[key];
|
|
1958
|
+
}
|
|
1959
|
+
}
|
|
1960
|
+
|
|
1961
|
+
return target;
|
|
1962
|
+
}
|
|
1963
|
+
|
|
1964
|
+
function _toPrimitive(input, hint) {
|
|
1965
|
+
if (typeof input !== "object" || input === null) return input;
|
|
1966
|
+
var prim = input[Symbol.toPrimitive];
|
|
1967
|
+
|
|
1968
|
+
if (prim !== undefined) {
|
|
1969
|
+
var res = prim.call(input, hint || "default");
|
|
1970
|
+
if (typeof res !== "object") return res;
|
|
1971
|
+
throw new TypeError("@@toPrimitive must return a primitive value.");
|
|
1972
|
+
}
|
|
1973
|
+
|
|
1974
|
+
return (hint === "string" ? String : Number)(input);
|
|
1975
|
+
}
|
|
1976
|
+
|
|
1977
|
+
function _toPropertyKey(arg) {
|
|
1978
|
+
var key = _toPrimitive(arg, "string");
|
|
1979
|
+
return typeof key === "symbol" ? key : String(key);
|
|
1980
|
+
}
|
|
1981
|
+
|
|
1982
|
+
function stateIn(stateValue) {
|
|
1983
|
+
return {
|
|
1984
|
+
type: 'xstate.guard:in',
|
|
1985
|
+
params: {
|
|
1986
|
+
stateValue: stateValue
|
|
1987
|
+
},
|
|
1988
|
+
predicate: function predicate(_, __, _ref) {
|
|
1989
|
+
var state = _ref.state;
|
|
1990
|
+
|
|
1991
|
+
if (isString(stateValue) && isStateId(stateValue)) {
|
|
1992
|
+
return state.configuration.some(function (sn) {
|
|
1993
|
+
return sn.id === stateValue.slice(1);
|
|
1994
|
+
});
|
|
1995
|
+
}
|
|
1996
|
+
|
|
1997
|
+
return state.matches(stateValue);
|
|
1998
|
+
}
|
|
1999
|
+
};
|
|
2000
|
+
}
|
|
2001
|
+
function not(guard) {
|
|
2002
|
+
return {
|
|
2003
|
+
type: 'xstate.boolean',
|
|
2004
|
+
params: {
|
|
2005
|
+
op: 'not'
|
|
2006
|
+
},
|
|
2007
|
+
children: [toGuardDefinition(guard)],
|
|
2008
|
+
predicate: function predicate(ctx, _, meta) {
|
|
2009
|
+
return !meta.evaluate(meta.guard.children[0], ctx, meta._event, meta.state, meta.state.machine);
|
|
2010
|
+
}
|
|
2011
|
+
};
|
|
2012
|
+
}
|
|
2013
|
+
function and(guards) {
|
|
2014
|
+
return {
|
|
2015
|
+
type: 'xstate.boolean',
|
|
2016
|
+
params: {
|
|
2017
|
+
op: 'and'
|
|
2018
|
+
},
|
|
2019
|
+
children: guards.map(function (guard) {
|
|
2020
|
+
return toGuardDefinition(guard);
|
|
2021
|
+
}),
|
|
2022
|
+
predicate: function predicate(ctx, _, meta) {
|
|
2023
|
+
return meta.guard.children.every(function (childGuard) {
|
|
2024
|
+
return meta.evaluate(childGuard, ctx, meta._event, meta.state, meta.state.machine);
|
|
2025
|
+
});
|
|
2026
|
+
}
|
|
2027
|
+
};
|
|
2028
|
+
}
|
|
2029
|
+
function or(guards) {
|
|
2030
|
+
return {
|
|
2031
|
+
type: 'xstate.boolean',
|
|
2032
|
+
params: {
|
|
2033
|
+
op: 'or'
|
|
2034
|
+
},
|
|
2035
|
+
children: guards.map(function (guard) {
|
|
2036
|
+
return toGuardDefinition(guard);
|
|
2037
|
+
}),
|
|
2038
|
+
predicate: function predicate(ctx, _, meta) {
|
|
2039
|
+
return meta.guard.children.some(function (childGuard) {
|
|
2040
|
+
return meta.evaluate(childGuard, ctx, meta._event, meta.state, meta.state.machine);
|
|
2041
|
+
});
|
|
2042
|
+
}
|
|
2043
|
+
};
|
|
2044
|
+
}
|
|
2045
|
+
function evaluateGuard(guard, context, _event, state) {
|
|
2046
|
+
var _machine$options$guar, _machine$options, _machine$options$guar2;
|
|
2047
|
+
|
|
2048
|
+
var machine = state.machine;
|
|
2049
|
+
var guardMeta = {
|
|
2050
|
+
state: state,
|
|
2051
|
+
guard: guard,
|
|
2052
|
+
_event: _event,
|
|
2053
|
+
evaluate: evaluateGuard
|
|
2054
|
+
};
|
|
2055
|
+
var predicate = (_machine$options$guar = machine === null || machine === void 0 ? void 0 : (_machine$options = machine.options) === null || _machine$options === void 0 ? void 0 : (_machine$options$guar2 = _machine$options.guards) === null || _machine$options$guar2 === void 0 ? void 0 : _machine$options$guar2[guard.type]) !== null && _machine$options$guar !== void 0 ? _machine$options$guar : guard.predicate;
|
|
2056
|
+
|
|
2057
|
+
if (!predicate) {
|
|
2058
|
+
throw new Error("Guard '".concat(guard.type, "' is not implemented.'."));
|
|
2059
|
+
}
|
|
2060
|
+
|
|
2061
|
+
return predicate(context, _event.data, guardMeta);
|
|
2062
|
+
}
|
|
2063
|
+
function toGuardDefinition(guardConfig, getPredicate) {
|
|
2064
|
+
var _guardConfig$children;
|
|
2065
|
+
|
|
2066
|
+
if (isString(guardConfig)) {
|
|
2067
|
+
return {
|
|
2068
|
+
type: guardConfig,
|
|
2069
|
+
predicate: (getPredicate === null || getPredicate === void 0 ? void 0 : getPredicate(guardConfig)) || undefined,
|
|
2070
|
+
params: {
|
|
2071
|
+
type: guardConfig
|
|
2072
|
+
}
|
|
2073
|
+
};
|
|
2074
|
+
}
|
|
2075
|
+
|
|
2076
|
+
if (isFunction(guardConfig)) {
|
|
2077
|
+
return {
|
|
2078
|
+
type: guardConfig.name,
|
|
2079
|
+
predicate: guardConfig,
|
|
2080
|
+
params: {
|
|
2081
|
+
type: guardConfig.name,
|
|
2082
|
+
name: guardConfig.name
|
|
2083
|
+
}
|
|
2084
|
+
};
|
|
2085
|
+
}
|
|
2086
|
+
|
|
2087
|
+
return {
|
|
2088
|
+
type: guardConfig.type,
|
|
2089
|
+
params: guardConfig.params || guardConfig,
|
|
2090
|
+
children: (_guardConfig$children = guardConfig.children) === null || _guardConfig$children === void 0 ? void 0 : _guardConfig$children.map(function (childGuard) {
|
|
2091
|
+
return toGuardDefinition(childGuard, getPredicate);
|
|
2092
|
+
}),
|
|
2093
|
+
predicate: (getPredicate === null || getPredicate === void 0 ? void 0 : getPredicate(guardConfig.type)) || guardConfig.predicate
|
|
2094
|
+
};
|
|
2095
|
+
}
|
|
2096
|
+
|
|
2097
|
+
function getOutput(configuration, context, _event) {
|
|
2098
|
+
var machine = configuration[0].machine;
|
|
2099
|
+
var finalChildStateNode = configuration.find(function (stateNode) {
|
|
2100
|
+
return stateNode.type === 'final' && stateNode.parent === machine.root;
|
|
2101
|
+
});
|
|
2102
|
+
var doneData = finalChildStateNode && finalChildStateNode.doneData ? mapContext(finalChildStateNode.doneData, context, _event) : undefined;
|
|
2103
|
+
return doneData;
|
|
2104
|
+
}
|
|
2105
|
+
|
|
2106
|
+
var isAtomicStateNode = function isAtomicStateNode(stateNode) {
|
|
2107
|
+
return stateNode.type === 'atomic' || stateNode.type === 'final';
|
|
2108
|
+
};
|
|
2109
|
+
|
|
2110
|
+
function getChildren(stateNode) {
|
|
2111
|
+
return Object.values(stateNode.states).filter(function (sn) {
|
|
2112
|
+
return sn.type !== 'history';
|
|
2113
|
+
});
|
|
2114
|
+
}
|
|
2115
|
+
|
|
2116
|
+
function getProperAncestors(stateNode, toStateNode) {
|
|
2117
|
+
var ancestors = []; // add all ancestors
|
|
2118
|
+
|
|
2119
|
+
var m = stateNode.parent;
|
|
2120
|
+
|
|
2121
|
+
while (m && m !== toStateNode) {
|
|
2122
|
+
ancestors.push(m);
|
|
2123
|
+
m = m.parent;
|
|
2124
|
+
}
|
|
2125
|
+
|
|
2126
|
+
return ancestors;
|
|
2127
|
+
}
|
|
2128
|
+
|
|
2129
|
+
function getConfiguration(stateNodes) {
|
|
2130
|
+
var configuration = new Set(stateNodes);
|
|
2131
|
+
var configurationSet = new Set(stateNodes);
|
|
2132
|
+
var adjList = getAdjList(configurationSet); // add descendants
|
|
2133
|
+
|
|
2134
|
+
var _iterator = _createForOfIteratorHelper(configuration),
|
|
2135
|
+
_step;
|
|
2136
|
+
|
|
2137
|
+
try {
|
|
2138
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
2139
|
+
var s = _step.value;
|
|
2140
|
+
|
|
2141
|
+
// if previously active, add existing child nodes
|
|
2142
|
+
if (s.type === 'compound' && (!adjList.get(s) || !adjList.get(s).length)) {
|
|
2143
|
+
getInitialStateNodes(s).forEach(function (sn) {
|
|
2144
|
+
return configurationSet.add(sn);
|
|
2145
|
+
});
|
|
2146
|
+
} else {
|
|
2147
|
+
if (s.type === 'parallel') {
|
|
2148
|
+
var _iterator3 = _createForOfIteratorHelper(getChildren(s)),
|
|
2149
|
+
_step3;
|
|
2150
|
+
|
|
2151
|
+
try {
|
|
2152
|
+
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
2153
|
+
var child = _step3.value;
|
|
2154
|
+
|
|
2155
|
+
if (child.type === 'history') {
|
|
2156
|
+
continue;
|
|
2157
|
+
}
|
|
2158
|
+
|
|
2159
|
+
if (!configurationSet.has(child)) {
|
|
2160
|
+
var _iterator4 = _createForOfIteratorHelper(getInitialStateNodes(child)),
|
|
2161
|
+
_step4;
|
|
2162
|
+
|
|
2163
|
+
try {
|
|
2164
|
+
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
|
2165
|
+
var initialStateNode = _step4.value;
|
|
2166
|
+
configurationSet.add(initialStateNode);
|
|
2167
|
+
}
|
|
2168
|
+
} catch (err) {
|
|
2169
|
+
_iterator4.e(err);
|
|
2170
|
+
} finally {
|
|
2171
|
+
_iterator4.f();
|
|
2172
|
+
}
|
|
2173
|
+
}
|
|
2174
|
+
}
|
|
2175
|
+
} catch (err) {
|
|
2176
|
+
_iterator3.e(err);
|
|
2177
|
+
} finally {
|
|
2178
|
+
_iterator3.f();
|
|
2179
|
+
}
|
|
2180
|
+
}
|
|
2181
|
+
}
|
|
2182
|
+
} // add all ancestors
|
|
2183
|
+
|
|
2184
|
+
} catch (err) {
|
|
2185
|
+
_iterator.e(err);
|
|
2186
|
+
} finally {
|
|
2187
|
+
_iterator.f();
|
|
2188
|
+
}
|
|
2189
|
+
|
|
2190
|
+
var _iterator2 = _createForOfIteratorHelper(configurationSet),
|
|
2191
|
+
_step2;
|
|
2192
|
+
|
|
2193
|
+
try {
|
|
2194
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
2195
|
+
var _s = _step2.value;
|
|
2196
|
+
var m = _s.parent;
|
|
2197
|
+
|
|
2198
|
+
while (m) {
|
|
2199
|
+
configurationSet.add(m);
|
|
2200
|
+
m = m.parent;
|
|
2201
|
+
}
|
|
2202
|
+
}
|
|
2203
|
+
} catch (err) {
|
|
2204
|
+
_iterator2.e(err);
|
|
2205
|
+
} finally {
|
|
2206
|
+
_iterator2.f();
|
|
2207
|
+
}
|
|
2208
|
+
|
|
2209
|
+
return configurationSet;
|
|
2210
|
+
}
|
|
2211
|
+
|
|
2212
|
+
function getValueFromAdj(baseNode, adjList) {
|
|
2213
|
+
var childStateNodes = adjList.get(baseNode);
|
|
2214
|
+
|
|
2215
|
+
if (!childStateNodes) {
|
|
2216
|
+
return {}; // todo: fix?
|
|
2217
|
+
}
|
|
2218
|
+
|
|
2219
|
+
if (baseNode.type === 'compound') {
|
|
2220
|
+
var childStateNode = childStateNodes[0];
|
|
2221
|
+
|
|
2222
|
+
if (childStateNode) {
|
|
2223
|
+
if (isAtomicStateNode(childStateNode)) {
|
|
2224
|
+
return childStateNode.key;
|
|
2225
|
+
}
|
|
2226
|
+
} else {
|
|
2227
|
+
return {};
|
|
2228
|
+
}
|
|
2229
|
+
}
|
|
2230
|
+
|
|
2231
|
+
var stateValue = {};
|
|
2232
|
+
|
|
2233
|
+
var _iterator5 = _createForOfIteratorHelper(childStateNodes),
|
|
2234
|
+
_step5;
|
|
2235
|
+
|
|
2236
|
+
try {
|
|
2237
|
+
for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
|
|
2238
|
+
var _childStateNode = _step5.value;
|
|
2239
|
+
stateValue[_childStateNode.key] = getValueFromAdj(_childStateNode, adjList);
|
|
2240
|
+
}
|
|
2241
|
+
} catch (err) {
|
|
2242
|
+
_iterator5.e(err);
|
|
2243
|
+
} finally {
|
|
2244
|
+
_iterator5.f();
|
|
2245
|
+
}
|
|
2246
|
+
|
|
2247
|
+
return stateValue;
|
|
2248
|
+
}
|
|
2249
|
+
|
|
2250
|
+
function getAdjList(configuration) {
|
|
2251
|
+
var adjList = new Map();
|
|
2252
|
+
|
|
2253
|
+
var _iterator6 = _createForOfIteratorHelper(configuration),
|
|
2254
|
+
_step6;
|
|
2255
|
+
|
|
2256
|
+
try {
|
|
2257
|
+
for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
|
|
2258
|
+
var s = _step6.value;
|
|
2259
|
+
|
|
2260
|
+
if (!adjList.has(s)) {
|
|
2261
|
+
adjList.set(s, []);
|
|
2262
|
+
}
|
|
2263
|
+
|
|
2264
|
+
if (s.parent) {
|
|
2265
|
+
if (!adjList.has(s.parent)) {
|
|
2266
|
+
adjList.set(s.parent, []);
|
|
2267
|
+
}
|
|
2268
|
+
|
|
2269
|
+
adjList.get(s.parent).push(s);
|
|
2270
|
+
}
|
|
2271
|
+
}
|
|
2272
|
+
} catch (err) {
|
|
2273
|
+
_iterator6.e(err);
|
|
2274
|
+
} finally {
|
|
2275
|
+
_iterator6.f();
|
|
2276
|
+
}
|
|
2277
|
+
|
|
2278
|
+
return adjList;
|
|
2279
|
+
}
|
|
2280
|
+
function getStateValue(rootNode, configuration) {
|
|
2281
|
+
var config = getConfiguration(configuration);
|
|
2282
|
+
return getValueFromAdj(rootNode, getAdjList(config));
|
|
2283
|
+
}
|
|
2284
|
+
function isInFinalState(configuration) {
|
|
2285
|
+
var stateNode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : configuration[0].machine.root;
|
|
2286
|
+
|
|
2287
|
+
if (stateNode.type === 'compound') {
|
|
2288
|
+
return getChildren(stateNode).some(function (s) {
|
|
2289
|
+
return s.type === 'final' && configuration.includes(s);
|
|
2290
|
+
});
|
|
2291
|
+
}
|
|
2292
|
+
|
|
2293
|
+
if (stateNode.type === 'parallel') {
|
|
2294
|
+
return getChildren(stateNode).every(function (sn) {
|
|
2295
|
+
return isInFinalState(configuration, sn);
|
|
2296
|
+
});
|
|
2297
|
+
}
|
|
2298
|
+
|
|
2299
|
+
return false;
|
|
2300
|
+
}
|
|
2301
|
+
var isStateId = function isStateId(str) {
|
|
2302
|
+
return str[0] === STATE_IDENTIFIER;
|
|
2303
|
+
};
|
|
2304
|
+
function getCandidates(stateNode, receivedEventType) {
|
|
2305
|
+
var partialMatch = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
2306
|
+
var candidates = stateNode.transitions.filter(function (transition) {
|
|
2307
|
+
var eventType = transition.eventType; // First, check the trivial case: event names are exactly equal
|
|
2308
|
+
|
|
2309
|
+
if (eventType === receivedEventType) {
|
|
2310
|
+
return true;
|
|
2311
|
+
} // Then, check if transition is a wildcard transition,
|
|
2312
|
+
// which matches any non-transient events
|
|
2313
|
+
|
|
2314
|
+
|
|
2315
|
+
if (eventType === WILDCARD) {
|
|
2316
|
+
return true;
|
|
2317
|
+
}
|
|
2318
|
+
|
|
2319
|
+
if (!partialMatch && !eventType.endsWith('.*')) {
|
|
2320
|
+
return false;
|
|
2321
|
+
}
|
|
2322
|
+
|
|
2323
|
+
var partialEventTokens = eventType.split('.');
|
|
2324
|
+
var eventTokens = receivedEventType.split('.');
|
|
2325
|
+
|
|
2326
|
+
for (var tokenIndex = 0; tokenIndex < partialEventTokens.length; tokenIndex++) {
|
|
2327
|
+
var partialEventToken = partialEventTokens[tokenIndex];
|
|
2328
|
+
var eventToken = eventTokens[tokenIndex];
|
|
2329
|
+
|
|
2330
|
+
if (partialEventToken === '*') {
|
|
2331
|
+
var isLastToken = tokenIndex === partialEventTokens.length - 1;
|
|
2332
|
+
|
|
2333
|
+
return isLastToken;
|
|
2334
|
+
}
|
|
2335
|
+
|
|
2336
|
+
if (partialEventToken !== eventToken) {
|
|
2337
|
+
return false;
|
|
2338
|
+
}
|
|
2339
|
+
}
|
|
2340
|
+
|
|
2341
|
+
return true;
|
|
2342
|
+
});
|
|
2343
|
+
return candidates;
|
|
2344
|
+
}
|
|
2345
|
+
/**
|
|
2346
|
+
* All delayed transitions from the config.
|
|
2347
|
+
*/
|
|
2348
|
+
|
|
2349
|
+
function getDelayedTransitions(stateNode) {
|
|
2350
|
+
var afterConfig = stateNode.config.after;
|
|
2351
|
+
|
|
2352
|
+
if (!afterConfig) {
|
|
2353
|
+
return [];
|
|
2354
|
+
}
|
|
2355
|
+
|
|
2356
|
+
var mutateEntryExit = function mutateEntryExit(delay, i) {
|
|
2357
|
+
var delayRef = isFunction(delay) ? "".concat(stateNode.id, ":delay[").concat(i, "]") : delay;
|
|
2358
|
+
var eventType = after$1(delayRef, stateNode.id);
|
|
2359
|
+
stateNode.entry.push(send$1({
|
|
2360
|
+
type: eventType
|
|
2361
|
+
}, {
|
|
2362
|
+
delay: delay
|
|
2363
|
+
}));
|
|
2364
|
+
stateNode.exit.push(cancel$1(eventType));
|
|
2365
|
+
return eventType;
|
|
2366
|
+
};
|
|
2367
|
+
|
|
2368
|
+
var delayedTransitions = isArray(afterConfig) ? afterConfig.map(function (transition, i) {
|
|
2369
|
+
var eventType = mutateEntryExit(transition.delay, i);
|
|
2370
|
+
return _objectSpread2(_objectSpread2({}, transition), {}, {
|
|
2371
|
+
event: eventType
|
|
2372
|
+
});
|
|
2373
|
+
}) : Object.keys(afterConfig).flatMap(function (delay, i) {
|
|
2374
|
+
var configTransition = afterConfig[delay];
|
|
2375
|
+
var resolvedTransition = isString(configTransition) ? {
|
|
2376
|
+
target: configTransition
|
|
2377
|
+
} : configTransition;
|
|
2378
|
+
var resolvedDelay = !isNaN(+delay) ? +delay : delay;
|
|
2379
|
+
var eventType = mutateEntryExit(resolvedDelay, i);
|
|
2380
|
+
return toArray(resolvedTransition).map(function (transition) {
|
|
2381
|
+
return _objectSpread2(_objectSpread2({}, transition), {}, {
|
|
2382
|
+
event: eventType,
|
|
2383
|
+
delay: resolvedDelay
|
|
2384
|
+
});
|
|
2385
|
+
});
|
|
2386
|
+
});
|
|
2387
|
+
return delayedTransitions.map(function (delayedTransition) {
|
|
2388
|
+
var delay = delayedTransition.delay;
|
|
2389
|
+
return _objectSpread2(_objectSpread2({}, formatTransition(stateNode, delayedTransition)), {}, {
|
|
2390
|
+
delay: delay
|
|
2391
|
+
});
|
|
2392
|
+
});
|
|
2393
|
+
}
|
|
2394
|
+
function formatTransition(stateNode, transitionConfig) {
|
|
2395
|
+
var normalizedTarget = normalizeTarget(transitionConfig.target);
|
|
2396
|
+
var internal = stateNode === stateNode.machine.root ? true // always internal for root
|
|
2397
|
+
: 'internal' in transitionConfig ? transitionConfig.internal : normalizedTarget ? normalizedTarget.some(function (_target) {
|
|
2398
|
+
return isString(_target) && _target[0] === stateNode.machine.delimiter;
|
|
2399
|
+
}) : true;
|
|
2400
|
+
var guards = stateNode.machine.options.guards;
|
|
2401
|
+
var target = resolveTarget(stateNode, normalizedTarget); // TODO: should this be part of a lint rule instead?
|
|
2402
|
+
|
|
2403
|
+
var transition = _objectSpread2(_objectSpread2({}, transitionConfig), {}, {
|
|
2404
|
+
actions: toActionObjects(toArray(transitionConfig.actions)),
|
|
2405
|
+
guard: transitionConfig.guard ? toGuardDefinition(transitionConfig.guard, function (guardType) {
|
|
2406
|
+
return guards[guardType];
|
|
2407
|
+
}) : undefined,
|
|
2408
|
+
target: target,
|
|
2409
|
+
source: stateNode,
|
|
2410
|
+
internal: internal,
|
|
2411
|
+
eventType: transitionConfig.event,
|
|
2412
|
+
toJSON: function toJSON() {
|
|
2413
|
+
return _objectSpread2(_objectSpread2({}, transition), {}, {
|
|
2414
|
+
source: "#".concat(stateNode.id),
|
|
2415
|
+
target: target ? target.map(function (t) {
|
|
2416
|
+
return "#".concat(t.id);
|
|
2417
|
+
}) : undefined
|
|
2418
|
+
});
|
|
2419
|
+
}
|
|
2420
|
+
});
|
|
2421
|
+
|
|
2422
|
+
return transition;
|
|
2423
|
+
}
|
|
2424
|
+
function formatTransitions(stateNode) {
|
|
2425
|
+
var transitionConfigs = [];
|
|
2426
|
+
|
|
2427
|
+
if (Array.isArray(stateNode.config.on)) {
|
|
2428
|
+
transitionConfigs.push.apply(transitionConfigs, _toConsumableArray(stateNode.config.on));
|
|
2429
|
+
} else if (stateNode.config.on) {
|
|
2430
|
+
var _stateNode$config$on = stateNode.config.on,
|
|
2431
|
+
_stateNode$config$on$ = _stateNode$config$on[WILDCARD],
|
|
2432
|
+
wildcardConfigs = _stateNode$config$on$ === void 0 ? [] : _stateNode$config$on$,
|
|
2433
|
+
namedTransitionConfigs = _objectWithoutProperties(_stateNode$config$on, [WILDCARD].map(_toPropertyKey));
|
|
2434
|
+
|
|
2435
|
+
for (var _i = 0, _Object$keys = Object.keys(namedTransitionConfigs); _i < _Object$keys.length; _i++) {
|
|
2436
|
+
var eventType = _Object$keys[_i];
|
|
2437
|
+
|
|
2438
|
+
if (eventType === NULL_EVENT) {
|
|
2439
|
+
throw new Error('Null events ("") cannot be specified as a transition key. Use `always: { ... }` instead.');
|
|
2440
|
+
}
|
|
2441
|
+
|
|
2442
|
+
var eventTransitionConfigs = toTransitionConfigArray(eventType, namedTransitionConfigs[eventType]);
|
|
2443
|
+
transitionConfigs.push.apply(transitionConfigs, _toConsumableArray(eventTransitionConfigs)); // TODO: add dev-mode validation for unreachable transitions
|
|
2444
|
+
}
|
|
2445
|
+
|
|
2446
|
+
transitionConfigs.push.apply(transitionConfigs, _toConsumableArray(toTransitionConfigArray(WILDCARD, wildcardConfigs)));
|
|
2447
|
+
}
|
|
2448
|
+
|
|
2449
|
+
var doneConfig = stateNode.config.onDone ? toTransitionConfigArray(String(done(stateNode.id)), stateNode.config.onDone) : [];
|
|
2450
|
+
var invokeConfig = stateNode.invoke.flatMap(function (invokeDef) {
|
|
2451
|
+
var settleTransitions = [];
|
|
2452
|
+
|
|
2453
|
+
if (invokeDef.onDone) {
|
|
2454
|
+
settleTransitions.push.apply(settleTransitions, _toConsumableArray(toTransitionConfigArray("done.invoke.".concat(invokeDef.id), invokeDef.onDone)));
|
|
2455
|
+
}
|
|
2456
|
+
|
|
2457
|
+
if (invokeDef.onError) {
|
|
2458
|
+
settleTransitions.push.apply(settleTransitions, _toConsumableArray(toTransitionConfigArray("error.platform.".concat(invokeDef.id), invokeDef.onError)));
|
|
2459
|
+
}
|
|
2460
|
+
|
|
2461
|
+
if (invokeDef.onSnapshot) {
|
|
2462
|
+
settleTransitions.push.apply(settleTransitions, _toConsumableArray(toTransitionConfigArray("xstate.snapshot.".concat(invokeDef.id), invokeDef.onSnapshot)));
|
|
2463
|
+
}
|
|
2464
|
+
|
|
2465
|
+
return settleTransitions;
|
|
2466
|
+
});
|
|
2467
|
+
var delayedTransitions = stateNode.after;
|
|
2468
|
+
var formattedTransitions = [].concat(_toConsumableArray(doneConfig), _toConsumableArray(invokeConfig), transitionConfigs).flatMap(function (transitionConfig) {
|
|
2469
|
+
return toArray(transitionConfig).map(function (transition) {
|
|
2470
|
+
return formatTransition(stateNode, transition);
|
|
2471
|
+
});
|
|
2472
|
+
});
|
|
2473
|
+
|
|
2474
|
+
var _iterator7 = _createForOfIteratorHelper(delayedTransitions),
|
|
2475
|
+
_step7;
|
|
2476
|
+
|
|
2477
|
+
try {
|
|
2478
|
+
for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
|
|
2479
|
+
var delayedTransition = _step7.value;
|
|
2480
|
+
formattedTransitions.push(delayedTransition);
|
|
2481
|
+
}
|
|
2482
|
+
} catch (err) {
|
|
2483
|
+
_iterator7.e(err);
|
|
2484
|
+
} finally {
|
|
2485
|
+
_iterator7.f();
|
|
2486
|
+
}
|
|
2487
|
+
|
|
2488
|
+
return formattedTransitions;
|
|
2489
|
+
}
|
|
2490
|
+
function formatInitialTransition(stateNode, _target) {
|
|
2491
|
+
if (isString(_target) || isArray(_target)) {
|
|
2492
|
+
var targets = toArray(_target).map(function (t) {
|
|
2493
|
+
// Resolve state string keys (which represent children)
|
|
2494
|
+
// to their state node
|
|
2495
|
+
var descStateNode = isString(t) ? isStateId(t) ? stateNode.machine.getStateNodeById(t) : stateNode.states[t] : t;
|
|
2496
|
+
|
|
2497
|
+
if (!descStateNode) {
|
|
2498
|
+
throw new Error("Initial state node \"".concat(t, "\" not found on parent state node #").concat(stateNode.id));
|
|
2499
|
+
}
|
|
2500
|
+
|
|
2501
|
+
if (!isDescendant(descStateNode, stateNode)) {
|
|
2502
|
+
throw new Error("Invalid initial target: state node #".concat(descStateNode.id, " is not a descendant of #").concat(stateNode.id));
|
|
2503
|
+
}
|
|
2504
|
+
|
|
2505
|
+
return descStateNode;
|
|
2506
|
+
});
|
|
2507
|
+
var resolvedTarget = resolveTarget(stateNode, targets);
|
|
2508
|
+
var transition = {
|
|
2509
|
+
source: stateNode,
|
|
2510
|
+
actions: [],
|
|
2511
|
+
eventType: null,
|
|
2512
|
+
target: resolvedTarget,
|
|
2513
|
+
toJSON: function toJSON() {
|
|
2514
|
+
return _objectSpread2(_objectSpread2({}, transition), {}, {
|
|
2515
|
+
source: "#".concat(stateNode.id),
|
|
2516
|
+
target: resolvedTarget ? resolvedTarget.map(function (t) {
|
|
2517
|
+
return "#".concat(t.id);
|
|
2518
|
+
}) : undefined
|
|
2519
|
+
});
|
|
2520
|
+
}
|
|
2521
|
+
};
|
|
2522
|
+
return transition;
|
|
2523
|
+
}
|
|
2524
|
+
|
|
2525
|
+
return formatTransition(stateNode, {
|
|
2526
|
+
target: toArray(_target.target).map(function (t) {
|
|
2527
|
+
if (isString(t)) {
|
|
2528
|
+
return isStateId(t) ? t : "".concat(stateNode.machine.delimiter).concat(t);
|
|
2529
|
+
}
|
|
2530
|
+
|
|
2531
|
+
return t;
|
|
2532
|
+
}),
|
|
2533
|
+
actions: _target.actions,
|
|
2534
|
+
event: null
|
|
2535
|
+
});
|
|
2536
|
+
}
|
|
2537
|
+
function resolveTarget(stateNode, targets) {
|
|
2538
|
+
if (targets === undefined) {
|
|
2539
|
+
// an undefined target signals that the state node should not transition from that state when receiving that event
|
|
2540
|
+
return undefined;
|
|
2541
|
+
}
|
|
2542
|
+
|
|
2543
|
+
return targets.map(function (target) {
|
|
2544
|
+
if (!isString(target)) {
|
|
2545
|
+
return target;
|
|
2546
|
+
}
|
|
2547
|
+
|
|
2548
|
+
var isInternalTarget = target[0] === stateNode.machine.delimiter; // If internal target is defined on machine,
|
|
2549
|
+
// do not include machine key on target
|
|
2550
|
+
|
|
2551
|
+
if (isInternalTarget && !stateNode.parent) {
|
|
2552
|
+
return getStateNodeByPath(stateNode, target.slice(1));
|
|
2553
|
+
}
|
|
2554
|
+
|
|
2555
|
+
var resolvedTarget = isInternalTarget ? stateNode.key + target : target;
|
|
2556
|
+
|
|
2557
|
+
if (stateNode.parent) {
|
|
2558
|
+
try {
|
|
2559
|
+
var targetStateNode = getStateNodeByPath(stateNode.parent, resolvedTarget);
|
|
2560
|
+
return targetStateNode;
|
|
2561
|
+
} catch (err) {
|
|
2562
|
+
throw new Error("Invalid transition definition for state node '".concat(stateNode.id, "':\n").concat(err.message));
|
|
2563
|
+
}
|
|
2564
|
+
} else {
|
|
2565
|
+
return getStateNodeByPath(stateNode, resolvedTarget);
|
|
2566
|
+
}
|
|
2567
|
+
});
|
|
2568
|
+
}
|
|
2569
|
+
|
|
2570
|
+
function resolveHistoryTarget(stateNode) {
|
|
2571
|
+
var normalizedTarget = normalizeTarget(stateNode.target);
|
|
2572
|
+
|
|
2573
|
+
if (!normalizedTarget) {
|
|
2574
|
+
return stateNode.parent.initial.target;
|
|
2575
|
+
}
|
|
2576
|
+
|
|
2577
|
+
return normalizedTarget.map(function (t) {
|
|
2578
|
+
return typeof t === 'string' ? getStateNodeByPath(stateNode.parent, t) : t;
|
|
2579
|
+
});
|
|
2580
|
+
}
|
|
2581
|
+
|
|
2582
|
+
function isHistoryNode(stateNode) {
|
|
2583
|
+
return stateNode.type === 'history';
|
|
2584
|
+
}
|
|
2585
|
+
|
|
2586
|
+
function getInitialStateNodes(stateNode) {
|
|
2587
|
+
var set = new Set();
|
|
2588
|
+
|
|
2589
|
+
function iter(descStateNode) {
|
|
2590
|
+
if (set.has(descStateNode)) {
|
|
2591
|
+
return;
|
|
2592
|
+
}
|
|
2593
|
+
|
|
2594
|
+
set.add(descStateNode);
|
|
2595
|
+
|
|
2596
|
+
if (descStateNode.type === 'compound') {
|
|
2597
|
+
var _iterator8 = _createForOfIteratorHelper(descStateNode.initial.target),
|
|
2598
|
+
_step8;
|
|
2599
|
+
|
|
2600
|
+
try {
|
|
2601
|
+
for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
|
|
2602
|
+
var targetStateNode = _step8.value;
|
|
2603
|
+
|
|
2604
|
+
var _iterator9 = _createForOfIteratorHelper(getProperAncestors(targetStateNode, stateNode)),
|
|
2605
|
+
_step9;
|
|
2606
|
+
|
|
2607
|
+
try {
|
|
2608
|
+
for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {
|
|
2609
|
+
var a = _step9.value;
|
|
2610
|
+
set.add(a);
|
|
2611
|
+
}
|
|
2612
|
+
} catch (err) {
|
|
2613
|
+
_iterator9.e(err);
|
|
2614
|
+
} finally {
|
|
2615
|
+
_iterator9.f();
|
|
2616
|
+
}
|
|
2617
|
+
|
|
2618
|
+
iter(targetStateNode);
|
|
2619
|
+
}
|
|
2620
|
+
} catch (err) {
|
|
2621
|
+
_iterator8.e(err);
|
|
2622
|
+
} finally {
|
|
2623
|
+
_iterator8.f();
|
|
2624
|
+
}
|
|
2625
|
+
} else if (descStateNode.type === 'parallel') {
|
|
2626
|
+
var _iterator10 = _createForOfIteratorHelper(getChildren(descStateNode)),
|
|
2627
|
+
_step10;
|
|
2628
|
+
|
|
2629
|
+
try {
|
|
2630
|
+
for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {
|
|
2631
|
+
var child = _step10.value;
|
|
2632
|
+
iter(child);
|
|
2633
|
+
}
|
|
2634
|
+
} catch (err) {
|
|
2635
|
+
_iterator10.e(err);
|
|
2636
|
+
} finally {
|
|
2637
|
+
_iterator10.f();
|
|
2638
|
+
}
|
|
2639
|
+
}
|
|
2640
|
+
}
|
|
2641
|
+
|
|
2642
|
+
iter(stateNode);
|
|
2643
|
+
return _toConsumableArray(set);
|
|
2644
|
+
}
|
|
2645
|
+
/**
|
|
2646
|
+
* Returns the child state node from its relative `stateKey`, or throws.
|
|
2647
|
+
*/
|
|
2648
|
+
|
|
2649
|
+
function getStateNode(stateNode, stateKey) {
|
|
2650
|
+
if (isStateId(stateKey)) {
|
|
2651
|
+
return stateNode.machine.getStateNodeById(stateKey);
|
|
2652
|
+
}
|
|
2653
|
+
|
|
2654
|
+
if (!stateNode.states) {
|
|
2655
|
+
throw new Error("Unable to retrieve child state '".concat(stateKey, "' from '").concat(stateNode.id, "'; no child states exist."));
|
|
2656
|
+
}
|
|
2657
|
+
|
|
2658
|
+
var result = stateNode.states[stateKey];
|
|
2659
|
+
|
|
2660
|
+
if (!result) {
|
|
2661
|
+
throw new Error("Child state '".concat(stateKey, "' does not exist on '").concat(stateNode.id, "'"));
|
|
2662
|
+
}
|
|
2663
|
+
|
|
2664
|
+
return result;
|
|
2665
|
+
}
|
|
2666
|
+
/**
|
|
2667
|
+
* Returns the relative state node from the given `statePath`, or throws.
|
|
2668
|
+
*
|
|
2669
|
+
* @param statePath The string or string array relative path to the state node.
|
|
2670
|
+
*/
|
|
2671
|
+
|
|
2672
|
+
function getStateNodeByPath(stateNode, statePath) {
|
|
2673
|
+
if (typeof statePath === 'string' && isStateId(statePath)) {
|
|
2674
|
+
try {
|
|
2675
|
+
return stateNode.machine.getStateNodeById(statePath);
|
|
2676
|
+
} catch (e) {// try individual paths
|
|
2677
|
+
// throw e;
|
|
2678
|
+
}
|
|
2679
|
+
}
|
|
2680
|
+
|
|
2681
|
+
var arrayStatePath = toStatePath(statePath, stateNode.machine.delimiter).slice();
|
|
2682
|
+
var currentStateNode = stateNode;
|
|
2683
|
+
|
|
2684
|
+
while (arrayStatePath.length) {
|
|
2685
|
+
var key = arrayStatePath.shift();
|
|
2686
|
+
|
|
2687
|
+
if (!key.length) {
|
|
2688
|
+
break;
|
|
2689
|
+
}
|
|
2690
|
+
|
|
2691
|
+
currentStateNode = getStateNode(currentStateNode, key);
|
|
2692
|
+
}
|
|
2693
|
+
|
|
2694
|
+
return currentStateNode;
|
|
2695
|
+
}
|
|
2696
|
+
/**
|
|
2697
|
+
* Returns the state nodes represented by the current state value.
|
|
2698
|
+
*
|
|
2699
|
+
* @param state The state value or State instance
|
|
2700
|
+
*/
|
|
2701
|
+
|
|
2702
|
+
|
|
2703
|
+
function getStateNodes(stateNode, state) {
|
|
2704
|
+
var stateValue = state instanceof State ? state.value : toStateValue(state, stateNode.machine.delimiter);
|
|
2705
|
+
|
|
2706
|
+
if (isString(stateValue)) {
|
|
2707
|
+
return [stateNode, stateNode.states[stateValue]];
|
|
2708
|
+
}
|
|
2709
|
+
|
|
2710
|
+
var childStateKeys = Object.keys(stateValue);
|
|
2711
|
+
var childStateNodes = childStateKeys.map(function (subStateKey) {
|
|
2712
|
+
return getStateNode(stateNode, subStateKey);
|
|
2713
|
+
}).filter(Boolean);
|
|
2714
|
+
return [stateNode.machine.root, stateNode].concat(childStateNodes, childStateKeys.reduce(function (allSubStateNodes, subStateKey) {
|
|
2715
|
+
var subStateNode = getStateNode(stateNode, subStateKey);
|
|
2716
|
+
|
|
2717
|
+
if (!subStateNode) {
|
|
2718
|
+
return allSubStateNodes;
|
|
2719
|
+
}
|
|
2720
|
+
|
|
2721
|
+
var subStateNodes = getStateNodes(subStateNode, stateValue[subStateKey]);
|
|
2722
|
+
return allSubStateNodes.concat(subStateNodes);
|
|
2723
|
+
}, []));
|
|
2724
|
+
}
|
|
2725
|
+
function transitionAtomicNode(stateNode, stateValue, state, _event) {
|
|
2726
|
+
var childStateNode = getStateNode(stateNode, stateValue);
|
|
2727
|
+
var next = childStateNode.next(state, _event);
|
|
2728
|
+
|
|
2729
|
+
if (!next || !next.length) {
|
|
2730
|
+
return stateNode.next(state, _event);
|
|
2731
|
+
}
|
|
2732
|
+
|
|
2733
|
+
return next;
|
|
2734
|
+
}
|
|
2735
|
+
function transitionCompoundNode(stateNode, stateValue, state, _event) {
|
|
2736
|
+
var subStateKeys = Object.keys(stateValue);
|
|
2737
|
+
var childStateNode = getStateNode(stateNode, subStateKeys[0]);
|
|
2738
|
+
var next = transitionNode(childStateNode, stateValue[subStateKeys[0]], state, _event);
|
|
2739
|
+
|
|
2740
|
+
if (!next || !next.length) {
|
|
2741
|
+
return stateNode.next(state, _event);
|
|
2742
|
+
}
|
|
2743
|
+
|
|
2744
|
+
return next;
|
|
2745
|
+
}
|
|
2746
|
+
function transitionParallelNode(stateNode, stateValue, state, _event) {
|
|
2747
|
+
var allInnerTransitions = [];
|
|
2748
|
+
|
|
2749
|
+
for (var _i2 = 0, _Object$keys2 = Object.keys(stateValue); _i2 < _Object$keys2.length; _i2++) {
|
|
2750
|
+
var subStateKey = _Object$keys2[_i2];
|
|
2751
|
+
var subStateValue = stateValue[subStateKey];
|
|
2752
|
+
|
|
2753
|
+
if (!subStateValue) {
|
|
2754
|
+
continue;
|
|
2755
|
+
}
|
|
2756
|
+
|
|
2757
|
+
var subStateNode = getStateNode(stateNode, subStateKey);
|
|
2758
|
+
var innerTransitions = transitionNode(subStateNode, subStateValue, state, _event);
|
|
2759
|
+
|
|
2760
|
+
if (innerTransitions) {
|
|
2761
|
+
allInnerTransitions.push.apply(allInnerTransitions, _toConsumableArray(innerTransitions));
|
|
2762
|
+
}
|
|
2763
|
+
}
|
|
2764
|
+
|
|
2765
|
+
if (!allInnerTransitions.length) {
|
|
2766
|
+
return stateNode.next(state, _event);
|
|
2767
|
+
}
|
|
2768
|
+
|
|
2769
|
+
return allInnerTransitions;
|
|
2770
|
+
}
|
|
2771
|
+
function transitionNode(stateNode, stateValue, state, _event) {
|
|
2772
|
+
// leaf node
|
|
2773
|
+
if (isString(stateValue)) {
|
|
2774
|
+
return transitionAtomicNode(stateNode, stateValue, state, _event);
|
|
2775
|
+
} // compound node
|
|
2776
|
+
|
|
2777
|
+
|
|
2778
|
+
if (Object.keys(stateValue).length === 1) {
|
|
2779
|
+
return transitionCompoundNode(stateNode, stateValue, state, _event);
|
|
2780
|
+
} // parallel node
|
|
2781
|
+
|
|
2782
|
+
|
|
2783
|
+
return transitionParallelNode(stateNode, stateValue, state, _event);
|
|
2784
|
+
}
|
|
2785
|
+
|
|
2786
|
+
function getHistoryNodes(stateNode) {
|
|
2787
|
+
return Object.keys(stateNode.states).map(function (key) {
|
|
2788
|
+
return stateNode.states[key];
|
|
2789
|
+
}).filter(function (sn) {
|
|
2790
|
+
return sn.type === 'history';
|
|
2791
|
+
});
|
|
2792
|
+
}
|
|
2793
|
+
|
|
2794
|
+
function isDescendant(childStateNode, parentStateNode) {
|
|
2795
|
+
var marker = childStateNode;
|
|
2796
|
+
|
|
2797
|
+
while (marker.parent && marker.parent !== parentStateNode) {
|
|
2798
|
+
marker = marker.parent;
|
|
2799
|
+
}
|
|
2800
|
+
|
|
2801
|
+
return marker.parent === parentStateNode;
|
|
2802
|
+
}
|
|
2803
|
+
|
|
2804
|
+
function getPathFromRootToNode(stateNode) {
|
|
2805
|
+
var path = [];
|
|
2806
|
+
var marker = stateNode.parent;
|
|
2807
|
+
|
|
2808
|
+
while (marker) {
|
|
2809
|
+
path.unshift(marker);
|
|
2810
|
+
marker = marker.parent;
|
|
2811
|
+
}
|
|
2812
|
+
|
|
2813
|
+
return path;
|
|
2814
|
+
}
|
|
2815
|
+
|
|
2816
|
+
function hasIntersection(s1, s2) {
|
|
2817
|
+
var set1 = new Set(s1);
|
|
2818
|
+
var set2 = new Set(s2);
|
|
2819
|
+
|
|
2820
|
+
var _iterator11 = _createForOfIteratorHelper(set1),
|
|
2821
|
+
_step11;
|
|
2822
|
+
|
|
2823
|
+
try {
|
|
2824
|
+
for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {
|
|
2825
|
+
var item = _step11.value;
|
|
2826
|
+
|
|
2827
|
+
if (set2.has(item)) {
|
|
2828
|
+
return true;
|
|
2829
|
+
}
|
|
2830
|
+
}
|
|
2831
|
+
} catch (err) {
|
|
2832
|
+
_iterator11.e(err);
|
|
2833
|
+
} finally {
|
|
2834
|
+
_iterator11.f();
|
|
2835
|
+
}
|
|
2836
|
+
|
|
2837
|
+
var _iterator12 = _createForOfIteratorHelper(set2),
|
|
2838
|
+
_step12;
|
|
2839
|
+
|
|
2840
|
+
try {
|
|
2841
|
+
for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {
|
|
2842
|
+
var _item = _step12.value;
|
|
2843
|
+
|
|
2844
|
+
if (set1.has(_item)) {
|
|
2845
|
+
return true;
|
|
2846
|
+
}
|
|
2847
|
+
}
|
|
2848
|
+
} catch (err) {
|
|
2849
|
+
_iterator12.e(err);
|
|
2850
|
+
} finally {
|
|
2851
|
+
_iterator12.f();
|
|
2852
|
+
}
|
|
2853
|
+
|
|
2854
|
+
return false;
|
|
2855
|
+
}
|
|
2856
|
+
|
|
2857
|
+
function removeConflictingTransitions(enabledTransitions, configuration, historyValue) {
|
|
2858
|
+
var filteredTransitions = new Set();
|
|
2859
|
+
|
|
2860
|
+
var _iterator13 = _createForOfIteratorHelper(enabledTransitions),
|
|
2861
|
+
_step13;
|
|
2862
|
+
|
|
2863
|
+
try {
|
|
2864
|
+
for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {
|
|
2865
|
+
var t1 = _step13.value;
|
|
2866
|
+
var t1Preempted = false;
|
|
2867
|
+
var transitionsToRemove = new Set();
|
|
2868
|
+
|
|
2869
|
+
var _iterator14 = _createForOfIteratorHelper(filteredTransitions),
|
|
2870
|
+
_step14;
|
|
2871
|
+
|
|
2872
|
+
try {
|
|
2873
|
+
for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {
|
|
2874
|
+
var t2 = _step14.value;
|
|
2875
|
+
|
|
2876
|
+
if (hasIntersection(computeExitSet([t1], configuration, historyValue), computeExitSet([t2], configuration, historyValue))) {
|
|
2877
|
+
if (isDescendant(t1.source, t2.source)) {
|
|
2878
|
+
transitionsToRemove.add(t2);
|
|
2879
|
+
} else {
|
|
2880
|
+
t1Preempted = true;
|
|
2881
|
+
break;
|
|
2882
|
+
}
|
|
2883
|
+
}
|
|
2884
|
+
}
|
|
2885
|
+
} catch (err) {
|
|
2886
|
+
_iterator14.e(err);
|
|
2887
|
+
} finally {
|
|
2888
|
+
_iterator14.f();
|
|
2889
|
+
}
|
|
2890
|
+
|
|
2891
|
+
if (!t1Preempted) {
|
|
2892
|
+
var _iterator15 = _createForOfIteratorHelper(transitionsToRemove),
|
|
2893
|
+
_step15;
|
|
2894
|
+
|
|
2895
|
+
try {
|
|
2896
|
+
for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {
|
|
2897
|
+
var t3 = _step15.value;
|
|
2898
|
+
filteredTransitions["delete"](t3);
|
|
2899
|
+
}
|
|
2900
|
+
} catch (err) {
|
|
2901
|
+
_iterator15.e(err);
|
|
2902
|
+
} finally {
|
|
2903
|
+
_iterator15.f();
|
|
2904
|
+
}
|
|
2905
|
+
|
|
2906
|
+
filteredTransitions.add(t1);
|
|
2907
|
+
}
|
|
2908
|
+
}
|
|
2909
|
+
} catch (err) {
|
|
2910
|
+
_iterator13.e(err);
|
|
2911
|
+
} finally {
|
|
2912
|
+
_iterator13.f();
|
|
2913
|
+
}
|
|
2914
|
+
|
|
2915
|
+
return Array.from(filteredTransitions);
|
|
2916
|
+
}
|
|
2917
|
+
|
|
2918
|
+
function findLCCA(stateNodes) {
|
|
2919
|
+
var _stateNodes = _slicedToArray(stateNodes, 1),
|
|
2920
|
+
head = _stateNodes[0];
|
|
2921
|
+
|
|
2922
|
+
var current = getPathFromRootToNode(head);
|
|
2923
|
+
var candidates = [];
|
|
2924
|
+
|
|
2925
|
+
var _iterator16 = _createForOfIteratorHelper(stateNodes),
|
|
2926
|
+
_step16;
|
|
2927
|
+
|
|
2928
|
+
try {
|
|
2929
|
+
var _loop = function _loop() {
|
|
2930
|
+
var stateNode = _step16.value;
|
|
2931
|
+
var path = getPathFromRootToNode(stateNode);
|
|
2932
|
+
candidates = current.filter(function (sn) {
|
|
2933
|
+
return path.includes(sn);
|
|
2934
|
+
});
|
|
2935
|
+
current = candidates;
|
|
2936
|
+
candidates = [];
|
|
2937
|
+
};
|
|
2938
|
+
|
|
2939
|
+
for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {
|
|
2940
|
+
_loop();
|
|
2941
|
+
}
|
|
2942
|
+
} catch (err) {
|
|
2943
|
+
_iterator16.e(err);
|
|
2944
|
+
} finally {
|
|
2945
|
+
_iterator16.f();
|
|
2946
|
+
}
|
|
2947
|
+
|
|
2948
|
+
return current[current.length - 1];
|
|
2949
|
+
}
|
|
2950
|
+
|
|
2951
|
+
function getEffectiveTargetStates(transition, historyValue) {
|
|
2952
|
+
if (!transition.target) {
|
|
2953
|
+
return [];
|
|
2954
|
+
}
|
|
2955
|
+
|
|
2956
|
+
var targets = new Set();
|
|
2957
|
+
|
|
2958
|
+
var _iterator17 = _createForOfIteratorHelper(transition.target),
|
|
2959
|
+
_step17;
|
|
2960
|
+
|
|
2961
|
+
try {
|
|
2962
|
+
for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {
|
|
2963
|
+
var targetNode = _step17.value;
|
|
2964
|
+
|
|
2965
|
+
if (isHistoryNode(targetNode)) {
|
|
2966
|
+
if (historyValue[targetNode.id]) {
|
|
2967
|
+
var _iterator18 = _createForOfIteratorHelper(historyValue[targetNode.id]),
|
|
2968
|
+
_step18;
|
|
2969
|
+
|
|
2970
|
+
try {
|
|
2971
|
+
for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {
|
|
2972
|
+
var node = _step18.value;
|
|
2973
|
+
targets.add(node);
|
|
2974
|
+
}
|
|
2975
|
+
} catch (err) {
|
|
2976
|
+
_iterator18.e(err);
|
|
2977
|
+
} finally {
|
|
2978
|
+
_iterator18.f();
|
|
2979
|
+
}
|
|
2980
|
+
} else {
|
|
2981
|
+
var _iterator19 = _createForOfIteratorHelper(getEffectiveTargetStates({
|
|
2982
|
+
target: resolveHistoryTarget(targetNode)
|
|
2983
|
+
}, historyValue)),
|
|
2984
|
+
_step19;
|
|
2985
|
+
|
|
2986
|
+
try {
|
|
2987
|
+
for (_iterator19.s(); !(_step19 = _iterator19.n()).done;) {
|
|
2988
|
+
var _node = _step19.value;
|
|
2989
|
+
targets.add(_node);
|
|
2990
|
+
}
|
|
2991
|
+
} catch (err) {
|
|
2992
|
+
_iterator19.e(err);
|
|
2993
|
+
} finally {
|
|
2994
|
+
_iterator19.f();
|
|
2995
|
+
}
|
|
2996
|
+
}
|
|
2997
|
+
} else {
|
|
2998
|
+
targets.add(targetNode);
|
|
2999
|
+
}
|
|
3000
|
+
}
|
|
3001
|
+
} catch (err) {
|
|
3002
|
+
_iterator17.e(err);
|
|
3003
|
+
} finally {
|
|
3004
|
+
_iterator17.f();
|
|
3005
|
+
}
|
|
3006
|
+
|
|
3007
|
+
return _toConsumableArray(targets);
|
|
3008
|
+
}
|
|
3009
|
+
|
|
3010
|
+
function getTransitionDomain(transition, historyValue) {
|
|
3011
|
+
var targetStates = getEffectiveTargetStates(transition, historyValue);
|
|
3012
|
+
|
|
3013
|
+
if (!targetStates) {
|
|
3014
|
+
return null;
|
|
3015
|
+
}
|
|
3016
|
+
|
|
3017
|
+
if (transition.internal && transition.source.type === 'compound' && targetStates.every(function (targetStateNode) {
|
|
3018
|
+
return isDescendant(targetStateNode, transition.source);
|
|
3019
|
+
})) {
|
|
3020
|
+
return transition.source;
|
|
3021
|
+
}
|
|
3022
|
+
|
|
3023
|
+
var lcca = findLCCA(targetStates.concat(transition.source));
|
|
3024
|
+
return lcca;
|
|
3025
|
+
}
|
|
3026
|
+
|
|
3027
|
+
function computeExitSet(transitions, configuration, historyValue) {
|
|
3028
|
+
var statesToExit = new Set();
|
|
3029
|
+
|
|
3030
|
+
var _iterator20 = _createForOfIteratorHelper(transitions),
|
|
3031
|
+
_step20;
|
|
3032
|
+
|
|
3033
|
+
try {
|
|
3034
|
+
for (_iterator20.s(); !(_step20 = _iterator20.n()).done;) {
|
|
3035
|
+
var _t$target;
|
|
3036
|
+
|
|
3037
|
+
var t = _step20.value;
|
|
3038
|
+
|
|
3039
|
+
if ((_t$target = t.target) !== null && _t$target !== void 0 && _t$target.length) {
|
|
3040
|
+
var domain = getTransitionDomain(t, historyValue);
|
|
3041
|
+
|
|
3042
|
+
var _iterator21 = _createForOfIteratorHelper(configuration),
|
|
3043
|
+
_step21;
|
|
3044
|
+
|
|
3045
|
+
try {
|
|
3046
|
+
for (_iterator21.s(); !(_step21 = _iterator21.n()).done;) {
|
|
3047
|
+
var stateNode = _step21.value;
|
|
3048
|
+
|
|
3049
|
+
if (isDescendant(stateNode, domain)) {
|
|
3050
|
+
statesToExit.add(stateNode);
|
|
3051
|
+
}
|
|
3052
|
+
}
|
|
3053
|
+
} catch (err) {
|
|
3054
|
+
_iterator21.e(err);
|
|
3055
|
+
} finally {
|
|
3056
|
+
_iterator21.f();
|
|
3057
|
+
}
|
|
3058
|
+
}
|
|
3059
|
+
}
|
|
3060
|
+
} catch (err) {
|
|
3061
|
+
_iterator20.e(err);
|
|
3062
|
+
} finally {
|
|
3063
|
+
_iterator20.f();
|
|
3064
|
+
}
|
|
3065
|
+
|
|
3066
|
+
return _toConsumableArray(statesToExit);
|
|
3067
|
+
}
|
|
3068
|
+
/**
|
|
3069
|
+
* https://www.w3.org/TR/scxml/#microstepProcedure
|
|
3070
|
+
*
|
|
3071
|
+
* @private
|
|
3072
|
+
* @param transitions
|
|
3073
|
+
* @param currentState
|
|
3074
|
+
* @param mutConfiguration
|
|
3075
|
+
*/
|
|
3076
|
+
|
|
3077
|
+
|
|
3078
|
+
function microstep(transitions, currentState, actorCtx, scxmlEvent) {
|
|
3079
|
+
var machine = currentState.machine; // Transition will "apply" if:
|
|
3080
|
+
// - the state node is the initial state (there is no current state)
|
|
3081
|
+
// - OR there are transitions
|
|
3082
|
+
|
|
3083
|
+
var willTransition = currentState._initial || transitions.length > 0;
|
|
3084
|
+
var mutConfiguration = new Set(currentState.configuration);
|
|
3085
|
+
|
|
3086
|
+
if (!currentState._initial && !willTransition) {
|
|
3087
|
+
var inertState = cloneState(currentState, {
|
|
3088
|
+
_event: scxmlEvent,
|
|
3089
|
+
actions: [],
|
|
3090
|
+
transitions: []
|
|
3091
|
+
});
|
|
3092
|
+
inertState.changed = false;
|
|
3093
|
+
return inertState;
|
|
3094
|
+
}
|
|
3095
|
+
|
|
3096
|
+
var microstate = microstepProcedure(currentState._initial ? [{
|
|
3097
|
+
target: _toConsumableArray(currentState.configuration).filter(isAtomicStateNode),
|
|
3098
|
+
source: machine.root,
|
|
3099
|
+
actions: [],
|
|
3100
|
+
eventType: null,
|
|
3101
|
+
toJSON: null // TODO: fix
|
|
3102
|
+
|
|
3103
|
+
}] : transitions, currentState, mutConfiguration, scxmlEvent, actorCtx);
|
|
3104
|
+
var context = microstate.context,
|
|
3105
|
+
nonRaisedActions = microstate.actions;
|
|
3106
|
+
var children = setChildren(currentState, nonRaisedActions);
|
|
3107
|
+
var nextState = cloneState(microstate, {
|
|
3108
|
+
value: {},
|
|
3109
|
+
// TODO: make optional
|
|
3110
|
+
transitions: transitions,
|
|
3111
|
+
children: children
|
|
3112
|
+
});
|
|
3113
|
+
nextState.changed = currentState._initial ? undefined : !stateValuesEqual(nextState.value, currentState.value) || nextState.actions.length > 0 || context !== currentState.context;
|
|
3114
|
+
return nextState;
|
|
3115
|
+
}
|
|
3116
|
+
|
|
3117
|
+
function setChildren(currentState, nonRaisedActions) {
|
|
3118
|
+
var children = _objectSpread2({}, currentState.children);
|
|
3119
|
+
|
|
3120
|
+
var _iterator22 = _createForOfIteratorHelper(nonRaisedActions),
|
|
3121
|
+
_step22;
|
|
3122
|
+
|
|
3123
|
+
try {
|
|
3124
|
+
for (_iterator22.s(); !(_step22 = _iterator22.n()).done;) {
|
|
3125
|
+
var action = _step22.value;
|
|
3126
|
+
|
|
3127
|
+
if (action.type === invoke && action.params.ref) {
|
|
3128
|
+
var ref = action.params.ref;
|
|
3129
|
+
|
|
3130
|
+
if (ref) {
|
|
3131
|
+
children[ref.id] = ref;
|
|
3132
|
+
}
|
|
3133
|
+
} else if (action.type === stop) {
|
|
3134
|
+
var _ref = action.params.actor;
|
|
3135
|
+
|
|
3136
|
+
if (_ref) {
|
|
3137
|
+
delete children[_ref.id];
|
|
3138
|
+
}
|
|
3139
|
+
}
|
|
3140
|
+
}
|
|
3141
|
+
} catch (err) {
|
|
3142
|
+
_iterator22.e(err);
|
|
3143
|
+
} finally {
|
|
3144
|
+
_iterator22.f();
|
|
3145
|
+
}
|
|
3146
|
+
|
|
3147
|
+
return children;
|
|
3148
|
+
}
|
|
3149
|
+
|
|
3150
|
+
function microstepProcedure(transitions, currentState, mutConfiguration, scxmlEvent, actorCtx) {
|
|
3151
|
+
var machine = currentState.machine;
|
|
3152
|
+
var actions = [];
|
|
3153
|
+
|
|
3154
|
+
var historyValue = _objectSpread2({}, currentState.historyValue);
|
|
3155
|
+
|
|
3156
|
+
var filteredTransitions = removeConflictingTransitions(transitions, mutConfiguration, historyValue);
|
|
3157
|
+
|
|
3158
|
+
var internalQueue = _toConsumableArray(currentState._internalQueue); // Exit states
|
|
3159
|
+
|
|
3160
|
+
|
|
3161
|
+
if (!currentState._initial) {
|
|
3162
|
+
exitStates(filteredTransitions, mutConfiguration, historyValue, actions);
|
|
3163
|
+
} // Execute transition content
|
|
3164
|
+
|
|
3165
|
+
|
|
3166
|
+
actions.push.apply(actions, _toConsumableArray(filteredTransitions.flatMap(function (t) {
|
|
3167
|
+
return t.actions;
|
|
3168
|
+
}))); // Enter states
|
|
3169
|
+
|
|
3170
|
+
enterStates(filteredTransitions, mutConfiguration, actions, internalQueue, currentState, historyValue);
|
|
3171
|
+
|
|
3172
|
+
var nextConfiguration = _toConsumableArray(mutConfiguration);
|
|
3173
|
+
|
|
3174
|
+
var done = isInFinalState(nextConfiguration);
|
|
3175
|
+
|
|
3176
|
+
if (done) {
|
|
3177
|
+
var finalActions = nextConfiguration.sort(function (a, b) {
|
|
3178
|
+
return b.order - a.order;
|
|
3179
|
+
}).flatMap(function (state) {
|
|
3180
|
+
return state.exit;
|
|
3181
|
+
});
|
|
3182
|
+
actions.push.apply(actions, _toConsumableArray(finalActions));
|
|
3183
|
+
}
|
|
3184
|
+
|
|
3185
|
+
try {
|
|
3186
|
+
var _resolveActionsAndCon = resolveActionsAndContext(actions, scxmlEvent, currentState, actorCtx),
|
|
3187
|
+
nextState = _resolveActionsAndCon.nextState;
|
|
3188
|
+
|
|
3189
|
+
var output = done ? getOutput(nextConfiguration, nextState.context, scxmlEvent) : undefined;
|
|
3190
|
+
internalQueue.push.apply(internalQueue, _toConsumableArray(nextState._internalQueue));
|
|
3191
|
+
return cloneState(currentState, {
|
|
3192
|
+
actions: nextState.actions,
|
|
3193
|
+
configuration: nextConfiguration,
|
|
3194
|
+
historyValue: historyValue,
|
|
3195
|
+
_internalQueue: internalQueue,
|
|
3196
|
+
context: nextState.context,
|
|
3197
|
+
_event: scxmlEvent,
|
|
3198
|
+
done: done,
|
|
3199
|
+
output: output,
|
|
3200
|
+
children: nextState.children
|
|
3201
|
+
});
|
|
3202
|
+
} catch (e) {
|
|
3203
|
+
// TODO: Refactor this once proper error handling is implemented.
|
|
3204
|
+
// See https://github.com/statelyai/rfcs/pull/4
|
|
3205
|
+
if (machine.config.scxml) {
|
|
3206
|
+
return cloneState(currentState, {
|
|
3207
|
+
actions: [],
|
|
3208
|
+
configuration: Array.from(mutConfiguration),
|
|
3209
|
+
historyValue: historyValue,
|
|
3210
|
+
_internalQueue: [toSCXMLEvent({
|
|
3211
|
+
type: 'error.execution'
|
|
3212
|
+
})],
|
|
3213
|
+
context: machine.context
|
|
3214
|
+
});
|
|
3215
|
+
} else {
|
|
3216
|
+
throw e;
|
|
3217
|
+
}
|
|
3218
|
+
}
|
|
3219
|
+
}
|
|
3220
|
+
|
|
3221
|
+
function enterStates(filteredTransitions, mutConfiguration, actions, internalQueue, currentState, historyValue) {
|
|
3222
|
+
var statesToEnter = new Set();
|
|
3223
|
+
var statesForDefaultEntry = new Set();
|
|
3224
|
+
computeEntrySet(filteredTransitions, historyValue, statesForDefaultEntry, statesToEnter); // In the initial state, the root state node is "entered".
|
|
3225
|
+
|
|
3226
|
+
if (currentState._initial) {
|
|
3227
|
+
statesForDefaultEntry.add(currentState.machine.root);
|
|
3228
|
+
}
|
|
3229
|
+
|
|
3230
|
+
var _iterator23 = _createForOfIteratorHelper(_toConsumableArray(statesToEnter).sort(function (a, b) {
|
|
3231
|
+
return a.order - b.order;
|
|
3232
|
+
})),
|
|
3233
|
+
_step23;
|
|
3234
|
+
|
|
3235
|
+
try {
|
|
3236
|
+
for (_iterator23.s(); !(_step23 = _iterator23.n()).done;) {
|
|
3237
|
+
var stateNodeToEnter = _step23.value;
|
|
3238
|
+
mutConfiguration.add(stateNodeToEnter);
|
|
3239
|
+
|
|
3240
|
+
var _iterator24 = _createForOfIteratorHelper(stateNodeToEnter.invoke),
|
|
3241
|
+
_step24;
|
|
3242
|
+
|
|
3243
|
+
try {
|
|
3244
|
+
for (_iterator24.s(); !(_step24 = _iterator24.n()).done;) {
|
|
3245
|
+
var invokeDef = _step24.value;
|
|
3246
|
+
actions.push(invoke$1(invokeDef));
|
|
3247
|
+
} // Add entry actions
|
|
3248
|
+
|
|
3249
|
+
} catch (err) {
|
|
3250
|
+
_iterator24.e(err);
|
|
3251
|
+
} finally {
|
|
3252
|
+
_iterator24.f();
|
|
3253
|
+
}
|
|
3254
|
+
|
|
3255
|
+
actions.push.apply(actions, _toConsumableArray(stateNodeToEnter.entry));
|
|
3256
|
+
|
|
3257
|
+
if (statesForDefaultEntry.has(stateNodeToEnter)) {
|
|
3258
|
+
var _iterator25 = _createForOfIteratorHelper(statesForDefaultEntry),
|
|
3259
|
+
_step25;
|
|
3260
|
+
|
|
3261
|
+
try {
|
|
3262
|
+
for (_iterator25.s(); !(_step25 = _iterator25.n()).done;) {
|
|
3263
|
+
var stateNode = _step25.value;
|
|
3264
|
+
var initialActions = stateNode.initial.actions;
|
|
3265
|
+
actions.push.apply(actions, _toConsumableArray(initialActions));
|
|
3266
|
+
}
|
|
3267
|
+
} catch (err) {
|
|
3268
|
+
_iterator25.e(err);
|
|
3269
|
+
} finally {
|
|
3270
|
+
_iterator25.f();
|
|
3271
|
+
}
|
|
3272
|
+
}
|
|
3273
|
+
|
|
3274
|
+
if (stateNodeToEnter.type === 'final') {
|
|
3275
|
+
var parent = stateNodeToEnter.parent;
|
|
3276
|
+
|
|
3277
|
+
if (!parent.parent) {
|
|
3278
|
+
continue;
|
|
3279
|
+
}
|
|
3280
|
+
|
|
3281
|
+
internalQueue.push(toSCXMLEvent(done(parent.id, stateNodeToEnter.doneData ? mapContext(stateNodeToEnter.doneData, currentState.context, currentState._event) : undefined)));
|
|
3282
|
+
|
|
3283
|
+
if (parent.parent) {
|
|
3284
|
+
var grandparent = parent.parent;
|
|
3285
|
+
|
|
3286
|
+
if (grandparent.type === 'parallel') {
|
|
3287
|
+
if (getChildren(grandparent).every(function (parentNode) {
|
|
3288
|
+
return isInFinalState(_toConsumableArray(mutConfiguration), parentNode);
|
|
3289
|
+
})) {
|
|
3290
|
+
internalQueue.push(toSCXMLEvent(done(grandparent.id)));
|
|
3291
|
+
}
|
|
3292
|
+
}
|
|
3293
|
+
}
|
|
3294
|
+
}
|
|
3295
|
+
}
|
|
3296
|
+
} catch (err) {
|
|
3297
|
+
_iterator23.e(err);
|
|
3298
|
+
} finally {
|
|
3299
|
+
_iterator23.f();
|
|
3300
|
+
}
|
|
3301
|
+
}
|
|
3302
|
+
|
|
3303
|
+
function computeEntrySet(transitions, historyValue, statesForDefaultEntry, statesToEnter) {
|
|
3304
|
+
var _iterator26 = _createForOfIteratorHelper(transitions),
|
|
3305
|
+
_step26;
|
|
3306
|
+
|
|
3307
|
+
try {
|
|
3308
|
+
for (_iterator26.s(); !(_step26 = _iterator26.n()).done;) {
|
|
3309
|
+
var t = _step26.value;
|
|
3310
|
+
|
|
3311
|
+
var _iterator27 = _createForOfIteratorHelper(t.target || []),
|
|
3312
|
+
_step27;
|
|
3313
|
+
|
|
3314
|
+
try {
|
|
3315
|
+
for (_iterator27.s(); !(_step27 = _iterator27.n()).done;) {
|
|
3316
|
+
var s = _step27.value;
|
|
3317
|
+
addDescendantStatesToEnter(s, historyValue, statesForDefaultEntry, statesToEnter);
|
|
3318
|
+
}
|
|
3319
|
+
} catch (err) {
|
|
3320
|
+
_iterator27.e(err);
|
|
3321
|
+
} finally {
|
|
3322
|
+
_iterator27.f();
|
|
3323
|
+
}
|
|
3324
|
+
|
|
3325
|
+
var ancestor = getTransitionDomain(t, historyValue);
|
|
3326
|
+
var targetStates = getEffectiveTargetStates(t, historyValue);
|
|
3327
|
+
|
|
3328
|
+
var _iterator28 = _createForOfIteratorHelper(targetStates),
|
|
3329
|
+
_step28;
|
|
3330
|
+
|
|
3331
|
+
try {
|
|
3332
|
+
for (_iterator28.s(); !(_step28 = _iterator28.n()).done;) {
|
|
3333
|
+
var _s2 = _step28.value;
|
|
3334
|
+
addAncestorStatesToEnter(_s2, ancestor, statesToEnter, historyValue, statesForDefaultEntry);
|
|
3335
|
+
}
|
|
3336
|
+
} catch (err) {
|
|
3337
|
+
_iterator28.e(err);
|
|
3338
|
+
} finally {
|
|
3339
|
+
_iterator28.f();
|
|
3340
|
+
}
|
|
3341
|
+
}
|
|
3342
|
+
} catch (err) {
|
|
3343
|
+
_iterator26.e(err);
|
|
3344
|
+
} finally {
|
|
3345
|
+
_iterator26.f();
|
|
3346
|
+
}
|
|
3347
|
+
}
|
|
3348
|
+
|
|
3349
|
+
function addDescendantStatesToEnter(stateNode, historyValue, statesForDefaultEntry, statesToEnter) {
|
|
3350
|
+
if (isHistoryNode(stateNode)) {
|
|
3351
|
+
if (historyValue[stateNode.id]) {
|
|
3352
|
+
var historyStateNodes = historyValue[stateNode.id];
|
|
3353
|
+
|
|
3354
|
+
var _iterator29 = _createForOfIteratorHelper(historyStateNodes),
|
|
3355
|
+
_step29;
|
|
3356
|
+
|
|
3357
|
+
try {
|
|
3358
|
+
for (_iterator29.s(); !(_step29 = _iterator29.n()).done;) {
|
|
3359
|
+
var s = _step29.value;
|
|
3360
|
+
addDescendantStatesToEnter(s, historyValue, statesForDefaultEntry, statesToEnter);
|
|
3361
|
+
}
|
|
3362
|
+
} catch (err) {
|
|
3363
|
+
_iterator29.e(err);
|
|
3364
|
+
} finally {
|
|
3365
|
+
_iterator29.f();
|
|
3366
|
+
}
|
|
3367
|
+
|
|
3368
|
+
var _iterator30 = _createForOfIteratorHelper(historyStateNodes),
|
|
3369
|
+
_step30;
|
|
3370
|
+
|
|
3371
|
+
try {
|
|
3372
|
+
for (_iterator30.s(); !(_step30 = _iterator30.n()).done;) {
|
|
3373
|
+
var _s3 = _step30.value;
|
|
3374
|
+
addAncestorStatesToEnter(_s3, stateNode.parent, statesToEnter, historyValue, statesForDefaultEntry);
|
|
3375
|
+
|
|
3376
|
+
var _iterator31 = _createForOfIteratorHelper(statesForDefaultEntry),
|
|
3377
|
+
_step31;
|
|
3378
|
+
|
|
3379
|
+
try {
|
|
3380
|
+
for (_iterator31.s(); !(_step31 = _iterator31.n()).done;) {
|
|
3381
|
+
var stateForDefaultEntry = _step31.value;
|
|
3382
|
+
statesForDefaultEntry.add(stateForDefaultEntry);
|
|
3383
|
+
}
|
|
3384
|
+
} catch (err) {
|
|
3385
|
+
_iterator31.e(err);
|
|
3386
|
+
} finally {
|
|
3387
|
+
_iterator31.f();
|
|
3388
|
+
}
|
|
3389
|
+
}
|
|
3390
|
+
} catch (err) {
|
|
3391
|
+
_iterator30.e(err);
|
|
3392
|
+
} finally {
|
|
3393
|
+
_iterator30.f();
|
|
3394
|
+
}
|
|
3395
|
+
} else {
|
|
3396
|
+
var targets = resolveHistoryTarget(stateNode);
|
|
3397
|
+
|
|
3398
|
+
var _iterator32 = _createForOfIteratorHelper(targets),
|
|
3399
|
+
_step32;
|
|
3400
|
+
|
|
3401
|
+
try {
|
|
3402
|
+
for (_iterator32.s(); !(_step32 = _iterator32.n()).done;) {
|
|
3403
|
+
var _s4 = _step32.value;
|
|
3404
|
+
addDescendantStatesToEnter(_s4, historyValue, statesForDefaultEntry, statesToEnter);
|
|
3405
|
+
}
|
|
3406
|
+
} catch (err) {
|
|
3407
|
+
_iterator32.e(err);
|
|
3408
|
+
} finally {
|
|
3409
|
+
_iterator32.f();
|
|
3410
|
+
}
|
|
3411
|
+
|
|
3412
|
+
var _iterator33 = _createForOfIteratorHelper(targets),
|
|
3413
|
+
_step33;
|
|
3414
|
+
|
|
3415
|
+
try {
|
|
3416
|
+
for (_iterator33.s(); !(_step33 = _iterator33.n()).done;) {
|
|
3417
|
+
var _s5 = _step33.value;
|
|
3418
|
+
addAncestorStatesToEnter(_s5, stateNode, statesToEnter, historyValue, statesForDefaultEntry);
|
|
3419
|
+
|
|
3420
|
+
var _iterator34 = _createForOfIteratorHelper(statesForDefaultEntry),
|
|
3421
|
+
_step34;
|
|
3422
|
+
|
|
3423
|
+
try {
|
|
3424
|
+
for (_iterator34.s(); !(_step34 = _iterator34.n()).done;) {
|
|
3425
|
+
var _stateForDefaultEntry = _step34.value;
|
|
3426
|
+
statesForDefaultEntry.add(_stateForDefaultEntry);
|
|
3427
|
+
}
|
|
3428
|
+
} catch (err) {
|
|
3429
|
+
_iterator34.e(err);
|
|
3430
|
+
} finally {
|
|
3431
|
+
_iterator34.f();
|
|
3432
|
+
}
|
|
3433
|
+
}
|
|
3434
|
+
} catch (err) {
|
|
3435
|
+
_iterator33.e(err);
|
|
3436
|
+
} finally {
|
|
3437
|
+
_iterator33.f();
|
|
3438
|
+
}
|
|
3439
|
+
}
|
|
3440
|
+
} else {
|
|
3441
|
+
statesToEnter.add(stateNode);
|
|
3442
|
+
|
|
3443
|
+
if (stateNode.type === 'compound') {
|
|
3444
|
+
statesForDefaultEntry.add(stateNode);
|
|
3445
|
+
var initialStates = stateNode.initial.target;
|
|
3446
|
+
|
|
3447
|
+
var _iterator35 = _createForOfIteratorHelper(initialStates),
|
|
3448
|
+
_step35;
|
|
3449
|
+
|
|
3450
|
+
try {
|
|
3451
|
+
for (_iterator35.s(); !(_step35 = _iterator35.n()).done;) {
|
|
3452
|
+
var initialState = _step35.value;
|
|
3453
|
+
addDescendantStatesToEnter(initialState, historyValue, statesForDefaultEntry, statesToEnter);
|
|
3454
|
+
}
|
|
3455
|
+
} catch (err) {
|
|
3456
|
+
_iterator35.e(err);
|
|
3457
|
+
} finally {
|
|
3458
|
+
_iterator35.f();
|
|
3459
|
+
}
|
|
3460
|
+
|
|
3461
|
+
var _iterator36 = _createForOfIteratorHelper(initialStates),
|
|
3462
|
+
_step36;
|
|
3463
|
+
|
|
3464
|
+
try {
|
|
3465
|
+
for (_iterator36.s(); !(_step36 = _iterator36.n()).done;) {
|
|
3466
|
+
var _initialState = _step36.value;
|
|
3467
|
+
addAncestorStatesToEnter(_initialState, stateNode, statesToEnter, historyValue, statesForDefaultEntry);
|
|
3468
|
+
}
|
|
3469
|
+
} catch (err) {
|
|
3470
|
+
_iterator36.e(err);
|
|
3471
|
+
} finally {
|
|
3472
|
+
_iterator36.f();
|
|
3473
|
+
}
|
|
3474
|
+
} else {
|
|
3475
|
+
if (stateNode.type === 'parallel') {
|
|
3476
|
+
var _iterator37 = _createForOfIteratorHelper(getChildren(stateNode).filter(function (sn) {
|
|
3477
|
+
return !isHistoryNode(sn);
|
|
3478
|
+
})),
|
|
3479
|
+
_step37;
|
|
3480
|
+
|
|
3481
|
+
try {
|
|
3482
|
+
var _loop2 = function _loop2() {
|
|
3483
|
+
var child = _step37.value;
|
|
3484
|
+
|
|
3485
|
+
if (!_toConsumableArray(statesToEnter).some(function (s) {
|
|
3486
|
+
return isDescendant(s, child);
|
|
3487
|
+
})) {
|
|
3488
|
+
addDescendantStatesToEnter(child, historyValue, statesForDefaultEntry, statesToEnter);
|
|
3489
|
+
}
|
|
3490
|
+
};
|
|
3491
|
+
|
|
3492
|
+
for (_iterator37.s(); !(_step37 = _iterator37.n()).done;) {
|
|
3493
|
+
_loop2();
|
|
3494
|
+
}
|
|
3495
|
+
} catch (err) {
|
|
3496
|
+
_iterator37.e(err);
|
|
3497
|
+
} finally {
|
|
3498
|
+
_iterator37.f();
|
|
3499
|
+
}
|
|
3500
|
+
}
|
|
3501
|
+
}
|
|
3502
|
+
}
|
|
3503
|
+
}
|
|
3504
|
+
|
|
3505
|
+
function addAncestorStatesToEnter(stateNode, toStateNode, statesToEnter, historyValue, statesForDefaultEntry) {
|
|
3506
|
+
var properAncestors = getProperAncestors(stateNode, toStateNode);
|
|
3507
|
+
|
|
3508
|
+
var _iterator38 = _createForOfIteratorHelper(properAncestors),
|
|
3509
|
+
_step38;
|
|
3510
|
+
|
|
3511
|
+
try {
|
|
3512
|
+
for (_iterator38.s(); !(_step38 = _iterator38.n()).done;) {
|
|
3513
|
+
var anc = _step38.value;
|
|
3514
|
+
statesToEnter.add(anc);
|
|
3515
|
+
|
|
3516
|
+
if (anc.type === 'parallel') {
|
|
3517
|
+
var _iterator39 = _createForOfIteratorHelper(getChildren(anc).filter(function (sn) {
|
|
3518
|
+
return !isHistoryNode(sn);
|
|
3519
|
+
})),
|
|
3520
|
+
_step39;
|
|
3521
|
+
|
|
3522
|
+
try {
|
|
3523
|
+
var _loop3 = function _loop3() {
|
|
3524
|
+
var child = _step39.value;
|
|
3525
|
+
|
|
3526
|
+
if (!_toConsumableArray(statesToEnter).some(function (s) {
|
|
3527
|
+
return isDescendant(s, child);
|
|
3528
|
+
})) {
|
|
3529
|
+
addDescendantStatesToEnter(child, historyValue, statesForDefaultEntry, statesToEnter);
|
|
3530
|
+
}
|
|
3531
|
+
};
|
|
3532
|
+
|
|
3533
|
+
for (_iterator39.s(); !(_step39 = _iterator39.n()).done;) {
|
|
3534
|
+
_loop3();
|
|
3535
|
+
}
|
|
3536
|
+
} catch (err) {
|
|
3537
|
+
_iterator39.e(err);
|
|
3538
|
+
} finally {
|
|
3539
|
+
_iterator39.f();
|
|
3540
|
+
}
|
|
3541
|
+
}
|
|
3542
|
+
}
|
|
3543
|
+
} catch (err) {
|
|
3544
|
+
_iterator38.e(err);
|
|
3545
|
+
} finally {
|
|
3546
|
+
_iterator38.f();
|
|
3547
|
+
}
|
|
3548
|
+
}
|
|
3549
|
+
|
|
3550
|
+
function exitStates(transitions, mutConfiguration, historyValue, actions) {
|
|
3551
|
+
var statesToExit = computeExitSet(transitions, mutConfiguration, historyValue);
|
|
3552
|
+
|
|
3553
|
+
var _iterator40 = _createForOfIteratorHelper(statesToExit),
|
|
3554
|
+
_step40;
|
|
3555
|
+
|
|
3556
|
+
try {
|
|
3557
|
+
for (_iterator40.s(); !(_step40 = _iterator40.n()).done;) {
|
|
3558
|
+
var _sn = _step40.value;
|
|
3559
|
+
actions.push.apply(actions, _toConsumableArray(_sn.invoke.map(function (def) {
|
|
3560
|
+
return stop$1(def.id);
|
|
3561
|
+
})));
|
|
3562
|
+
}
|
|
3563
|
+
} catch (err) {
|
|
3564
|
+
_iterator40.e(err);
|
|
3565
|
+
} finally {
|
|
3566
|
+
_iterator40.f();
|
|
3567
|
+
}
|
|
3568
|
+
|
|
3569
|
+
statesToExit.sort(function (a, b) {
|
|
3570
|
+
return b.order - a.order;
|
|
3571
|
+
}); // From SCXML algorithm: https://www.w3.org/TR/scxml/#exitStates
|
|
3572
|
+
|
|
3573
|
+
var _iterator41 = _createForOfIteratorHelper(statesToExit),
|
|
3574
|
+
_step41;
|
|
3575
|
+
|
|
3576
|
+
try {
|
|
3577
|
+
var _loop4 = function _loop4() {
|
|
3578
|
+
var exitStateNode = _step41.value;
|
|
3579
|
+
|
|
3580
|
+
var _iterator43 = _createForOfIteratorHelper(getHistoryNodes(exitStateNode)),
|
|
3581
|
+
_step43;
|
|
3582
|
+
|
|
3583
|
+
try {
|
|
3584
|
+
for (_iterator43.s(); !(_step43 = _iterator43.n()).done;) {
|
|
3585
|
+
var historyNode = _step43.value;
|
|
3586
|
+
var predicate = void 0;
|
|
3587
|
+
|
|
3588
|
+
if (historyNode.history === 'deep') {
|
|
3589
|
+
predicate = function predicate(sn) {
|
|
3590
|
+
return isAtomicStateNode(sn) && isDescendant(sn, exitStateNode);
|
|
3591
|
+
};
|
|
3592
|
+
} else {
|
|
3593
|
+
predicate = function predicate(sn) {
|
|
3594
|
+
return sn.parent === exitStateNode;
|
|
3595
|
+
};
|
|
3596
|
+
}
|
|
3597
|
+
|
|
3598
|
+
historyValue[historyNode.id] = Array.from(mutConfiguration).filter(predicate);
|
|
3599
|
+
}
|
|
3600
|
+
} catch (err) {
|
|
3601
|
+
_iterator43.e(err);
|
|
3602
|
+
} finally {
|
|
3603
|
+
_iterator43.f();
|
|
3604
|
+
}
|
|
3605
|
+
};
|
|
3606
|
+
|
|
3607
|
+
for (_iterator41.s(); !(_step41 = _iterator41.n()).done;) {
|
|
3608
|
+
_loop4();
|
|
3609
|
+
}
|
|
3610
|
+
} catch (err) {
|
|
3611
|
+
_iterator41.e(err);
|
|
3612
|
+
} finally {
|
|
3613
|
+
_iterator41.f();
|
|
3614
|
+
}
|
|
3615
|
+
|
|
3616
|
+
var _iterator42 = _createForOfIteratorHelper(statesToExit),
|
|
3617
|
+
_step42;
|
|
3618
|
+
|
|
3619
|
+
try {
|
|
3620
|
+
for (_iterator42.s(); !(_step42 = _iterator42.n()).done;) {
|
|
3621
|
+
var s = _step42.value;
|
|
3622
|
+
actions.push.apply(actions, _toConsumableArray(s.exit.flat()));
|
|
3623
|
+
mutConfiguration["delete"](s);
|
|
3624
|
+
}
|
|
3625
|
+
} catch (err) {
|
|
3626
|
+
_iterator42.e(err);
|
|
3627
|
+
} finally {
|
|
3628
|
+
_iterator42.f();
|
|
3629
|
+
}
|
|
3630
|
+
}
|
|
3631
|
+
|
|
3632
|
+
function resolveActionsAndContext(actions, scxmlEvent, currentState, actorCtx) {
|
|
3633
|
+
var machine = currentState.machine;
|
|
3634
|
+
var resolvedActions = [];
|
|
3635
|
+
var raiseActions = [];
|
|
3636
|
+
var intermediateState = currentState;
|
|
3637
|
+
|
|
3638
|
+
function handleAction(action) {
|
|
3639
|
+
resolvedActions.push(action);
|
|
3640
|
+
|
|
3641
|
+
if ((actorCtx === null || actorCtx === void 0 ? void 0 : actorCtx.self.status) === exports.ActorStatus.Running) {
|
|
3642
|
+
var _action$execute;
|
|
3643
|
+
|
|
3644
|
+
(_action$execute = action.execute) === null || _action$execute === void 0 ? void 0 : _action$execute.call(action, actorCtx); // TODO: this is hacky; re-evaluate
|
|
3645
|
+
|
|
3646
|
+
delete action.execute;
|
|
3647
|
+
}
|
|
3648
|
+
}
|
|
3649
|
+
|
|
3650
|
+
function resolveAction(actionObject) {
|
|
3651
|
+
var executableActionObject = resolveActionObject(actionObject, machine.options.actions);
|
|
3652
|
+
|
|
3653
|
+
if (isDynamicAction(executableActionObject)) {
|
|
3654
|
+
var _resolvedAction$param;
|
|
3655
|
+
|
|
3656
|
+
var _executableActionObje = executableActionObject.resolve(scxmlEvent, {
|
|
3657
|
+
state: intermediateState,
|
|
3658
|
+
action: actionObject,
|
|
3659
|
+
actorContext: actorCtx
|
|
3660
|
+
}),
|
|
3661
|
+
_executableActionObje2 = _slicedToArray(_executableActionObje, 2),
|
|
3662
|
+
nextState = _executableActionObje2[0],
|
|
3663
|
+
resolvedAction = _executableActionObje2[1];
|
|
3664
|
+
|
|
3665
|
+
var matchedActions = (_resolvedAction$param = resolvedAction.params) === null || _resolvedAction$param === void 0 ? void 0 : _resolvedAction$param.actions;
|
|
3666
|
+
intermediateState = nextState;
|
|
3667
|
+
|
|
3668
|
+
if (resolvedAction.type === raise || resolvedAction.type === send && resolvedAction.params.internal) {
|
|
3669
|
+
raiseActions.push(resolvedAction);
|
|
3670
|
+
} // TODO: remove the check; just handleAction
|
|
3671
|
+
|
|
3672
|
+
|
|
3673
|
+
if (resolvedAction.type !== pure) {
|
|
3674
|
+
handleAction(resolvedAction);
|
|
3675
|
+
}
|
|
3676
|
+
|
|
3677
|
+
toActionObjects(matchedActions).forEach(resolveAction);
|
|
3678
|
+
return;
|
|
3679
|
+
}
|
|
3680
|
+
|
|
3681
|
+
handleAction(executableActionObject);
|
|
3682
|
+
}
|
|
3683
|
+
|
|
3684
|
+
var _iterator44 = _createForOfIteratorHelper(actions),
|
|
3685
|
+
_step44;
|
|
3686
|
+
|
|
3687
|
+
try {
|
|
3688
|
+
for (_iterator44.s(); !(_step44 = _iterator44.n()).done;) {
|
|
3689
|
+
var actionObject = _step44.value;
|
|
3690
|
+
resolveAction(actionObject);
|
|
3691
|
+
}
|
|
3692
|
+
} catch (err) {
|
|
3693
|
+
_iterator44.e(err);
|
|
3694
|
+
} finally {
|
|
3695
|
+
_iterator44.f();
|
|
3696
|
+
}
|
|
3697
|
+
|
|
3698
|
+
return {
|
|
3699
|
+
nextState: cloneState(intermediateState, {
|
|
3700
|
+
actions: resolvedActions,
|
|
3701
|
+
_internalQueue: raiseActions.map(function (a) {
|
|
3702
|
+
return a.params._event;
|
|
3703
|
+
})
|
|
3704
|
+
})
|
|
3705
|
+
};
|
|
3706
|
+
}
|
|
3707
|
+
function macrostep(state, scxmlEvent, actorCtx) {
|
|
3708
|
+
|
|
3709
|
+
var nextState = state;
|
|
3710
|
+
var states = []; // Handle stop event
|
|
3711
|
+
|
|
3712
|
+
if ((scxmlEvent === null || scxmlEvent === void 0 ? void 0 : scxmlEvent.name) === stopSignalType) {
|
|
3713
|
+
nextState = stopStep(scxmlEvent, nextState, actorCtx);
|
|
3714
|
+
states.push(nextState);
|
|
3715
|
+
return {
|
|
3716
|
+
state: nextState,
|
|
3717
|
+
microstates: states
|
|
3718
|
+
};
|
|
3719
|
+
} // Assume the state is at rest (no raised events)
|
|
3720
|
+
// Determine the next state based on the next microstep
|
|
3721
|
+
|
|
3722
|
+
|
|
3723
|
+
if (scxmlEvent.name !== init) {
|
|
3724
|
+
var transitions = selectTransitions(scxmlEvent, nextState);
|
|
3725
|
+
nextState = microstep(transitions, state, actorCtx, scxmlEvent);
|
|
3726
|
+
states.push(nextState);
|
|
3727
|
+
}
|
|
3728
|
+
|
|
3729
|
+
while (!nextState.done) {
|
|
3730
|
+
var enabledTransitions = selectEventlessTransitions(nextState);
|
|
3731
|
+
|
|
3732
|
+
if (enabledTransitions.length === 0) {
|
|
3733
|
+
// TODO: this is a bit of a hack, we need to review this
|
|
3734
|
+
// this matches the behavior from v4 for eventless transitions
|
|
3735
|
+
// where for `hasAlwaysTransitions` we were always trying to resolve with a NULL event
|
|
3736
|
+
// and if a transition was not selected the `state.transitions` stayed empty
|
|
3737
|
+
// without this we get into an infinite loop in the dieHard test in `@xstate/test` for the `simplePathsTo`
|
|
3738
|
+
if (nextState.configuration.some(function (state) {
|
|
3739
|
+
return state.always;
|
|
3740
|
+
})) {
|
|
3741
|
+
nextState.transitions = [];
|
|
3742
|
+
}
|
|
3743
|
+
|
|
3744
|
+
if (!nextState._internalQueue.length) {
|
|
3745
|
+
break;
|
|
3746
|
+
} else {
|
|
3747
|
+
var _nextState$actions;
|
|
3748
|
+
|
|
3749
|
+
var currentActions = nextState.actions;
|
|
3750
|
+
var nextEvent = nextState._internalQueue[0];
|
|
3751
|
+
|
|
3752
|
+
var _transitions = selectTransitions(nextEvent, nextState);
|
|
3753
|
+
|
|
3754
|
+
nextState = microstep(_transitions, nextState, actorCtx, nextEvent);
|
|
3755
|
+
|
|
3756
|
+
nextState._internalQueue.shift();
|
|
3757
|
+
|
|
3758
|
+
(_nextState$actions = nextState.actions).unshift.apply(_nextState$actions, _toConsumableArray(currentActions));
|
|
3759
|
+
|
|
3760
|
+
states.push(nextState);
|
|
3761
|
+
}
|
|
3762
|
+
}
|
|
3763
|
+
|
|
3764
|
+
if (enabledTransitions.length) {
|
|
3765
|
+
var _nextState$actions2;
|
|
3766
|
+
|
|
3767
|
+
var _currentActions = nextState.actions;
|
|
3768
|
+
nextState = microstep(enabledTransitions, nextState, actorCtx, nextState._event);
|
|
3769
|
+
|
|
3770
|
+
(_nextState$actions2 = nextState.actions).unshift.apply(_nextState$actions2, _toConsumableArray(_currentActions));
|
|
3771
|
+
|
|
3772
|
+
states.push(nextState);
|
|
3773
|
+
}
|
|
3774
|
+
}
|
|
3775
|
+
|
|
3776
|
+
if (nextState.done) {
|
|
3777
|
+
// Perform the stop step to ensure that child actors are stopped
|
|
3778
|
+
stopStep(nextState._event, nextState, actorCtx);
|
|
3779
|
+
}
|
|
3780
|
+
|
|
3781
|
+
return {
|
|
3782
|
+
state: nextState,
|
|
3783
|
+
microstates: states
|
|
3784
|
+
};
|
|
3785
|
+
}
|
|
3786
|
+
|
|
3787
|
+
function stopStep(scxmlEvent, nextState, actorCtx) {
|
|
3788
|
+
var actions = [];
|
|
3789
|
+
|
|
3790
|
+
var _iterator45 = _createForOfIteratorHelper(nextState.configuration.sort(function (a, b) {
|
|
3791
|
+
return b.order - a.order;
|
|
3792
|
+
})),
|
|
3793
|
+
_step45;
|
|
3794
|
+
|
|
3795
|
+
try {
|
|
3796
|
+
for (_iterator45.s(); !(_step45 = _iterator45.n()).done;) {
|
|
3797
|
+
var stateNode = _step45.value;
|
|
3798
|
+
actions.push.apply(actions, _toConsumableArray(stateNode.exit));
|
|
3799
|
+
}
|
|
3800
|
+
} catch (err) {
|
|
3801
|
+
_iterator45.e(err);
|
|
3802
|
+
} finally {
|
|
3803
|
+
_iterator45.f();
|
|
3804
|
+
}
|
|
3805
|
+
|
|
3806
|
+
for (var _i3 = 0, _Object$values = Object.values(nextState.children); _i3 < _Object$values.length; _i3++) {
|
|
3807
|
+
var child = _Object$values[_i3];
|
|
3808
|
+
actions.push(stop$1(child));
|
|
3809
|
+
}
|
|
3810
|
+
|
|
3811
|
+
var _resolveActionsAndCon2 = resolveActionsAndContext(actions, scxmlEvent, nextState, actorCtx),
|
|
3812
|
+
stoppedState = _resolveActionsAndCon2.nextState;
|
|
3813
|
+
|
|
3814
|
+
return stoppedState;
|
|
3815
|
+
}
|
|
3816
|
+
|
|
3817
|
+
function selectTransitions(scxmlEvent, nextState) {
|
|
3818
|
+
return nextState.machine.getTransitionData(nextState, scxmlEvent);
|
|
3819
|
+
}
|
|
3820
|
+
|
|
3821
|
+
function selectEventlessTransitions(nextState) {
|
|
3822
|
+
var enabledTransitionSet = new Set();
|
|
3823
|
+
var atomicStates = nextState.configuration.filter(isAtomicStateNode);
|
|
3824
|
+
|
|
3825
|
+
var _iterator46 = _createForOfIteratorHelper(atomicStates),
|
|
3826
|
+
_step46;
|
|
3827
|
+
|
|
3828
|
+
try {
|
|
3829
|
+
for (_iterator46.s(); !(_step46 = _iterator46.n()).done;) {
|
|
3830
|
+
var stateNode = _step46.value;
|
|
3831
|
+
|
|
3832
|
+
var _iterator47 = _createForOfIteratorHelper([stateNode].concat(getProperAncestors(stateNode, null))),
|
|
3833
|
+
_step47;
|
|
3834
|
+
|
|
3835
|
+
try {
|
|
3836
|
+
loop: for (_iterator47.s(); !(_step47 = _iterator47.n()).done;) {
|
|
3837
|
+
var s = _step47.value;
|
|
3838
|
+
|
|
3839
|
+
if (!s.always) {
|
|
3840
|
+
continue;
|
|
3841
|
+
}
|
|
3842
|
+
|
|
3843
|
+
var _iterator48 = _createForOfIteratorHelper(s.always),
|
|
3844
|
+
_step48;
|
|
3845
|
+
|
|
3846
|
+
try {
|
|
3847
|
+
for (_iterator48.s(); !(_step48 = _iterator48.n()).done;) {
|
|
3848
|
+
var transition = _step48.value;
|
|
3849
|
+
|
|
3850
|
+
if (transition.guard === undefined || evaluateGuard(transition.guard, nextState.context, nextState._event, nextState)) {
|
|
3851
|
+
enabledTransitionSet.add(transition);
|
|
3852
|
+
break loop;
|
|
3853
|
+
}
|
|
3854
|
+
}
|
|
3855
|
+
} catch (err) {
|
|
3856
|
+
_iterator48.e(err);
|
|
3857
|
+
} finally {
|
|
3858
|
+
_iterator48.f();
|
|
3859
|
+
}
|
|
3860
|
+
}
|
|
3861
|
+
} catch (err) {
|
|
3862
|
+
_iterator47.e(err);
|
|
3863
|
+
} finally {
|
|
3864
|
+
_iterator47.f();
|
|
3865
|
+
}
|
|
3866
|
+
}
|
|
3867
|
+
} catch (err) {
|
|
3868
|
+
_iterator46.e(err);
|
|
3869
|
+
} finally {
|
|
3870
|
+
_iterator46.f();
|
|
3871
|
+
}
|
|
3872
|
+
|
|
3873
|
+
return removeConflictingTransitions(Array.from(enabledTransitionSet), new Set(nextState.configuration), nextState.historyValue);
|
|
3874
|
+
}
|
|
3875
|
+
/**
|
|
3876
|
+
* Resolves a partial state value with its full representation in the state node's machine.
|
|
3877
|
+
*
|
|
3878
|
+
* @param stateValue The partial state value to resolve.
|
|
3879
|
+
*/
|
|
3880
|
+
|
|
3881
|
+
|
|
3882
|
+
function resolveStateValue(rootNode, stateValue) {
|
|
3883
|
+
var configuration = getConfiguration(getStateNodes(rootNode, stateValue));
|
|
3884
|
+
return getStateValue(rootNode, _toConsumableArray(configuration));
|
|
3885
|
+
}
|
|
3886
|
+
function stateValuesEqual(a, b) {
|
|
3887
|
+
if (a === b) {
|
|
3888
|
+
return true;
|
|
3889
|
+
}
|
|
3890
|
+
|
|
3891
|
+
if (a === undefined || b === undefined) {
|
|
3892
|
+
return false;
|
|
3893
|
+
}
|
|
3894
|
+
|
|
3895
|
+
if (isString(a) || isString(b)) {
|
|
3896
|
+
return a === b;
|
|
3897
|
+
}
|
|
3898
|
+
|
|
3899
|
+
var aKeys = Object.keys(a);
|
|
3900
|
+
var bKeys = Object.keys(b);
|
|
3901
|
+
return aKeys.length === bKeys.length && aKeys.every(function (key) {
|
|
3902
|
+
return stateValuesEqual(a[key], b[key]);
|
|
3903
|
+
});
|
|
3904
|
+
}
|
|
3905
|
+
function getInitialConfiguration(rootNode) {
|
|
3906
|
+
var configuration = [];
|
|
3907
|
+
var initialTransition = rootNode.initial;
|
|
3908
|
+
var statesToEnter = new Set();
|
|
3909
|
+
var statesForDefaultEntry = new Set([rootNode]);
|
|
3910
|
+
computeEntrySet([initialTransition], {}, statesForDefaultEntry, statesToEnter);
|
|
3911
|
+
|
|
3912
|
+
var _iterator49 = _createForOfIteratorHelper(_toConsumableArray(statesToEnter).sort(function (a, b) {
|
|
3913
|
+
return a.order - b.order;
|
|
3914
|
+
})),
|
|
3915
|
+
_step49;
|
|
3916
|
+
|
|
3917
|
+
try {
|
|
3918
|
+
for (_iterator49.s(); !(_step49 = _iterator49.n()).done;) {
|
|
3919
|
+
var stateNodeToEnter = _step49.value;
|
|
3920
|
+
configuration.push(stateNodeToEnter);
|
|
3921
|
+
}
|
|
3922
|
+
} catch (err) {
|
|
3923
|
+
_iterator49.e(err);
|
|
3924
|
+
} finally {
|
|
3925
|
+
_iterator49.f();
|
|
3926
|
+
}
|
|
3927
|
+
|
|
3928
|
+
return configuration;
|
|
3929
|
+
}
|
|
3930
|
+
|
|
3931
|
+
var _excluded = ["configuration", "transitions", "tags", "machine"];
|
|
3932
|
+
function isStateConfig(state) {
|
|
3933
|
+
if (_typeof(state) !== 'object' || state === null) {
|
|
3934
|
+
return false;
|
|
3935
|
+
}
|
|
3936
|
+
|
|
3937
|
+
return 'value' in state && '_event' in state;
|
|
3938
|
+
}
|
|
3939
|
+
var State = /*#__PURE__*/function () {
|
|
3940
|
+
/**
|
|
3941
|
+
* Creates a new `State` instance that represents the current state of a running machine.
|
|
3942
|
+
*
|
|
3943
|
+
* @param config
|
|
3944
|
+
*/
|
|
3945
|
+
function State(config, machine) {
|
|
3946
|
+
var _config$_internalQueu, _config$actions, _config$configuration, _config$done;
|
|
3947
|
+
|
|
3948
|
+
_classCallCheck(this, State);
|
|
3949
|
+
|
|
3950
|
+
this.machine = machine;
|
|
3951
|
+
|
|
3952
|
+
_defineProperty(this, "value", void 0);
|
|
3953
|
+
|
|
3954
|
+
_defineProperty(this, "done", void 0);
|
|
3955
|
+
|
|
3956
|
+
_defineProperty(this, "output", void 0);
|
|
3957
|
+
|
|
3958
|
+
_defineProperty(this, "context", void 0);
|
|
3959
|
+
|
|
3960
|
+
_defineProperty(this, "historyValue", {});
|
|
3961
|
+
|
|
3962
|
+
_defineProperty(this, "actions", []);
|
|
3963
|
+
|
|
3964
|
+
_defineProperty(this, "event", void 0);
|
|
3965
|
+
|
|
3966
|
+
_defineProperty(this, "_internalQueue", void 0);
|
|
3967
|
+
|
|
3968
|
+
_defineProperty(this, "_event", void 0);
|
|
3969
|
+
|
|
3970
|
+
_defineProperty(this, "_sessionid", void 0);
|
|
3971
|
+
|
|
3972
|
+
_defineProperty(this, "_initial", false);
|
|
3973
|
+
|
|
3974
|
+
_defineProperty(this, "changed", void 0);
|
|
3975
|
+
|
|
3976
|
+
_defineProperty(this, "configuration", void 0);
|
|
3977
|
+
|
|
3978
|
+
_defineProperty(this, "transitions", void 0);
|
|
3979
|
+
|
|
3980
|
+
_defineProperty(this, "children", void 0);
|
|
3981
|
+
|
|
3982
|
+
this.context = config.context;
|
|
3983
|
+
this._event = config._event;
|
|
3984
|
+
this._sessionid = config._sessionid;
|
|
3985
|
+
this._internalQueue = (_config$_internalQueu = config._internalQueue) !== null && _config$_internalQueu !== void 0 ? _config$_internalQueu : [];
|
|
3986
|
+
this.event = this._event.data;
|
|
3987
|
+
this.historyValue = config.historyValue || {};
|
|
3988
|
+
this.actions = (_config$actions = config.actions) !== null && _config$actions !== void 0 ? _config$actions : [];
|
|
3989
|
+
this.matches = this.matches.bind(this);
|
|
3990
|
+
this.toStrings = this.toStrings.bind(this);
|
|
3991
|
+
this.configuration = (_config$configuration = config.configuration) !== null && _config$configuration !== void 0 ? _config$configuration : Array.from(getConfiguration(getStateNodes(machine.root, config.value)));
|
|
3992
|
+
this.transitions = config.transitions;
|
|
3993
|
+
this.children = config.children;
|
|
3994
|
+
this.value = getStateValue(machine.root, this.configuration);
|
|
3995
|
+
this.done = (_config$done = config.done) !== null && _config$done !== void 0 ? _config$done : false;
|
|
3996
|
+
this.output = config.output;
|
|
3997
|
+
}
|
|
3998
|
+
/**
|
|
3999
|
+
* Returns an array of all the string leaf state node paths.
|
|
4000
|
+
* @param stateValue
|
|
4001
|
+
* @param delimiter The character(s) that separate each subpath in the string state node path.
|
|
4002
|
+
*/
|
|
4003
|
+
|
|
4004
|
+
|
|
4005
|
+
_createClass(State, [{
|
|
4006
|
+
key: "toStrings",
|
|
4007
|
+
value: function toStrings() {
|
|
4008
|
+
var _this = this;
|
|
4009
|
+
|
|
4010
|
+
var stateValue = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.value;
|
|
4011
|
+
var delimiter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '.';
|
|
4012
|
+
|
|
4013
|
+
if (isString(stateValue)) {
|
|
4014
|
+
return [stateValue];
|
|
4015
|
+
}
|
|
4016
|
+
|
|
4017
|
+
var valueKeys = Object.keys(stateValue);
|
|
4018
|
+
return valueKeys.concat.apply(valueKeys, _toConsumableArray(valueKeys.map(function (key) {
|
|
4019
|
+
return _this.toStrings(stateValue[key], delimiter).map(function (s) {
|
|
4020
|
+
return key + delimiter + s;
|
|
4021
|
+
});
|
|
4022
|
+
})));
|
|
4023
|
+
}
|
|
4024
|
+
}, {
|
|
4025
|
+
key: "toJSON",
|
|
4026
|
+
value: function toJSON() {
|
|
4027
|
+
var configuration = this.configuration,
|
|
4028
|
+
transitions = this.transitions,
|
|
4029
|
+
tags = this.tags,
|
|
4030
|
+
machine = this.machine,
|
|
4031
|
+
jsonValues = _objectWithoutProperties(this, _excluded);
|
|
4032
|
+
|
|
4033
|
+
return _objectSpread2(_objectSpread2({}, jsonValues), {}, {
|
|
4034
|
+
tags: Array.from(tags),
|
|
4035
|
+
meta: this.meta
|
|
4036
|
+
});
|
|
4037
|
+
}
|
|
4038
|
+
/**
|
|
4039
|
+
* Whether the current state value is a subset of the given parent state value.
|
|
4040
|
+
* @param parentStateValue
|
|
4041
|
+
*/
|
|
4042
|
+
|
|
4043
|
+
}, {
|
|
4044
|
+
key: "matches",
|
|
4045
|
+
value: function matches(parentStateValue) {
|
|
4046
|
+
return matchesState(parentStateValue, this.value);
|
|
4047
|
+
}
|
|
4048
|
+
/**
|
|
4049
|
+
* Whether the current state configuration has a state node with the specified `tag`.
|
|
4050
|
+
* @param tag
|
|
4051
|
+
*/
|
|
4052
|
+
|
|
4053
|
+
}, {
|
|
4054
|
+
key: "hasTag",
|
|
4055
|
+
value: function hasTag(tag) {
|
|
4056
|
+
return this.tags.has(tag);
|
|
4057
|
+
}
|
|
4058
|
+
/**
|
|
4059
|
+
* Determines whether sending the `event` will cause a non-forbidden transition
|
|
4060
|
+
* to be selected, even if the transitions have no actions nor
|
|
4061
|
+
* change the state value.
|
|
4062
|
+
*
|
|
4063
|
+
* @param event The event to test
|
|
4064
|
+
* @returns Whether the event will cause a transition
|
|
4065
|
+
*/
|
|
4066
|
+
|
|
4067
|
+
}, {
|
|
4068
|
+
key: "can",
|
|
4069
|
+
value: function can(event) {
|
|
4070
|
+
{
|
|
4071
|
+
warn(!!this.machine);
|
|
4072
|
+
}
|
|
4073
|
+
|
|
4074
|
+
var transitionData = this.machine.getTransitionData(this, toSCXMLEvent(event));
|
|
4075
|
+
return !!(transitionData !== null && transitionData !== void 0 && transitionData.length) && // Check that at least one transition is not forbidden
|
|
4076
|
+
transitionData.some(function (t) {
|
|
4077
|
+
return t.target !== undefined || t.actions.length;
|
|
4078
|
+
});
|
|
4079
|
+
}
|
|
4080
|
+
/**
|
|
4081
|
+
* The next events that will cause a transition from the current state.
|
|
4082
|
+
*/
|
|
4083
|
+
|
|
4084
|
+
}, {
|
|
4085
|
+
key: "nextEvents",
|
|
4086
|
+
get: function get() {
|
|
4087
|
+
var _this2 = this;
|
|
4088
|
+
|
|
4089
|
+
return memo(this, 'nextEvents', function () {
|
|
4090
|
+
return _toConsumableArray(new Set(flatten(_toConsumableArray(_this2.configuration.map(function (sn) {
|
|
4091
|
+
return sn.ownEvents;
|
|
4092
|
+
})))));
|
|
4093
|
+
});
|
|
4094
|
+
}
|
|
4095
|
+
}, {
|
|
4096
|
+
key: "meta",
|
|
4097
|
+
get: function get() {
|
|
4098
|
+
return this.configuration.reduce(function (acc, stateNode) {
|
|
4099
|
+
if (stateNode.meta !== undefined) {
|
|
4100
|
+
acc[stateNode.id] = stateNode.meta;
|
|
4101
|
+
}
|
|
4102
|
+
|
|
4103
|
+
return acc;
|
|
4104
|
+
}, {});
|
|
4105
|
+
}
|
|
4106
|
+
}, {
|
|
4107
|
+
key: "tags",
|
|
4108
|
+
get: function get() {
|
|
4109
|
+
return new Set(flatten(this.configuration.map(function (sn) {
|
|
4110
|
+
return sn.tags;
|
|
4111
|
+
})));
|
|
4112
|
+
}
|
|
4113
|
+
}], [{
|
|
4114
|
+
key: "from",
|
|
4115
|
+
value:
|
|
4116
|
+
/**
|
|
4117
|
+
* Indicates whether the state is a final state.
|
|
4118
|
+
*/
|
|
4119
|
+
|
|
4120
|
+
/**
|
|
4121
|
+
* The done data of the top-level finite state.
|
|
4122
|
+
*/
|
|
4123
|
+
// TODO: add an explicit type for `output`
|
|
4124
|
+
|
|
4125
|
+
/**
|
|
4126
|
+
* Indicates whether the state has changed from the previous state. A state is considered "changed" if:
|
|
4127
|
+
*
|
|
4128
|
+
* - Its value is not equal to its previous value, or:
|
|
4129
|
+
* - It has any new actions (side-effects) to execute.
|
|
4130
|
+
*
|
|
4131
|
+
* An initial state (with no history) will return `undefined`.
|
|
4132
|
+
*/
|
|
4133
|
+
|
|
4134
|
+
/**
|
|
4135
|
+
* The enabled state nodes representative of the state value.
|
|
4136
|
+
*/
|
|
4137
|
+
|
|
4138
|
+
/**
|
|
4139
|
+
* The transition definitions that resulted in this state.
|
|
4140
|
+
*/
|
|
4141
|
+
|
|
4142
|
+
/**
|
|
4143
|
+
* An object mapping actor names to spawned/invoked actors.
|
|
4144
|
+
*/
|
|
4145
|
+
|
|
4146
|
+
/**
|
|
4147
|
+
* Creates a new State instance for the given `stateValue` and `context`.
|
|
4148
|
+
* @param stateValue
|
|
4149
|
+
* @param context
|
|
4150
|
+
*/
|
|
4151
|
+
function from(stateValue) {
|
|
4152
|
+
var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
4153
|
+
var machine = arguments.length > 2 ? arguments[2] : undefined;
|
|
4154
|
+
|
|
4155
|
+
if (stateValue instanceof State) {
|
|
4156
|
+
if (stateValue.context !== context) {
|
|
4157
|
+
return new State({
|
|
4158
|
+
value: stateValue.value,
|
|
4159
|
+
context: context,
|
|
4160
|
+
_event: stateValue._event,
|
|
4161
|
+
_sessionid: undefined,
|
|
4162
|
+
actions: [],
|
|
4163
|
+
meta: {},
|
|
4164
|
+
configuration: [],
|
|
4165
|
+
// TODO: fix,
|
|
4166
|
+
transitions: [],
|
|
4167
|
+
children: {}
|
|
4168
|
+
}, machine);
|
|
4169
|
+
}
|
|
4170
|
+
|
|
4171
|
+
return stateValue;
|
|
4172
|
+
}
|
|
4173
|
+
|
|
4174
|
+
var _event = initEvent;
|
|
4175
|
+
var configuration = getConfiguration(getStateNodes(machine.root, stateValue));
|
|
4176
|
+
return new State({
|
|
4177
|
+
value: stateValue,
|
|
4178
|
+
context: context,
|
|
4179
|
+
_event: _event,
|
|
4180
|
+
_sessionid: undefined,
|
|
4181
|
+
actions: [],
|
|
4182
|
+
meta: undefined,
|
|
4183
|
+
configuration: Array.from(configuration),
|
|
4184
|
+
transitions: [],
|
|
4185
|
+
children: {}
|
|
4186
|
+
}, machine);
|
|
4187
|
+
}
|
|
4188
|
+
}]);
|
|
4189
|
+
|
|
4190
|
+
return State;
|
|
4191
|
+
}();
|
|
4192
|
+
function cloneState(state) {
|
|
4193
|
+
var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
4194
|
+
return new State(_objectSpread2(_objectSpread2({}, state), config), state.machine);
|
|
4195
|
+
}
|
|
4196
|
+
|
|
4197
|
+
function invoke$1(invokeDef) {
|
|
4198
|
+
return createDynamicAction({
|
|
4199
|
+
type: invoke,
|
|
4200
|
+
params: invokeDef
|
|
4201
|
+
}, function (_event, _ref) {
|
|
4202
|
+
var state = _ref.state;
|
|
4203
|
+
var type = invoke;
|
|
4204
|
+
var id = invokeDef.id,
|
|
4205
|
+
data = invokeDef.data,
|
|
4206
|
+
src = invokeDef.src,
|
|
4207
|
+
meta = invokeDef.meta;
|
|
4208
|
+
var resolvedInvokeAction;
|
|
4209
|
+
|
|
4210
|
+
if (isActorRef(src)) {
|
|
4211
|
+
resolvedInvokeAction = {
|
|
4212
|
+
type: type,
|
|
4213
|
+
params: _objectSpread2(_objectSpread2({}, invokeDef), {}, {
|
|
4214
|
+
ref: src
|
|
4215
|
+
})
|
|
4216
|
+
};
|
|
4217
|
+
} else {
|
|
4218
|
+
var behaviorImpl = state.machine.options.actors[src.type];
|
|
4219
|
+
|
|
4220
|
+
if (!behaviorImpl) {
|
|
4221
|
+
resolvedInvokeAction = {
|
|
4222
|
+
type: type,
|
|
4223
|
+
params: invokeDef
|
|
4224
|
+
};
|
|
4225
|
+
} else {
|
|
4226
|
+
var behavior = typeof behaviorImpl === 'function' ? behaviorImpl(state.context, _event.data, {
|
|
4227
|
+
id: id,
|
|
4228
|
+
data: data && mapContext(data, state.context, _event),
|
|
4229
|
+
src: src,
|
|
4230
|
+
_event: _event,
|
|
4231
|
+
meta: meta
|
|
4232
|
+
}) : behaviorImpl;
|
|
4233
|
+
resolvedInvokeAction = {
|
|
4234
|
+
type: type,
|
|
4235
|
+
params: _objectSpread2(_objectSpread2({}, invokeDef), {}, {
|
|
4236
|
+
ref: interpret(behavior, {
|
|
4237
|
+
id: id
|
|
4238
|
+
})
|
|
4239
|
+
})
|
|
4240
|
+
};
|
|
4241
|
+
}
|
|
4242
|
+
}
|
|
4243
|
+
|
|
4244
|
+
var actorRef = resolvedInvokeAction.params.ref;
|
|
4245
|
+
var invokedState = cloneState(state, {
|
|
4246
|
+
children: _objectSpread2(_objectSpread2({}, state.children), {}, _defineProperty({}, id, actorRef))
|
|
4247
|
+
});
|
|
4248
|
+
|
|
4249
|
+
resolvedInvokeAction.execute = function (actorCtx) {
|
|
4250
|
+
var interpreter = actorCtx.self;
|
|
4251
|
+
var _resolvedInvokeAction = resolvedInvokeAction.params,
|
|
4252
|
+
id = _resolvedInvokeAction.id,
|
|
4253
|
+
autoForward = _resolvedInvokeAction.autoForward,
|
|
4254
|
+
ref = _resolvedInvokeAction.ref;
|
|
4255
|
+
|
|
4256
|
+
if (!ref) {
|
|
4257
|
+
|
|
4258
|
+
return;
|
|
4259
|
+
}
|
|
4260
|
+
|
|
4261
|
+
ref._parent = interpreter; // TODO: fix
|
|
4262
|
+
|
|
4263
|
+
actorCtx.defer(function () {
|
|
4264
|
+
if (actorRef.status === exports.ActorStatus.Stopped) {
|
|
4265
|
+
return;
|
|
4266
|
+
}
|
|
4267
|
+
|
|
4268
|
+
try {
|
|
4269
|
+
var _actorRef$start;
|
|
4270
|
+
|
|
4271
|
+
if (autoForward) {
|
|
4272
|
+
interpreter._forwardTo.add(actorRef);
|
|
4273
|
+
}
|
|
4274
|
+
|
|
4275
|
+
(_actorRef$start = actorRef.start) === null || _actorRef$start === void 0 ? void 0 : _actorRef$start.call(actorRef);
|
|
4276
|
+
} catch (err) {
|
|
4277
|
+
interpreter.send(error$1(id, err));
|
|
4278
|
+
return;
|
|
4279
|
+
}
|
|
4280
|
+
});
|
|
4281
|
+
};
|
|
4282
|
+
|
|
4283
|
+
return [invokedState, resolvedInvokeAction];
|
|
4284
|
+
});
|
|
4285
|
+
}
|
|
4286
|
+
|
|
4287
|
+
function createSpawner(machine, context, _event, mutCapturedActions) {
|
|
4288
|
+
return function (behavior, name) {
|
|
4289
|
+
if (isString(behavior)) {
|
|
4290
|
+
var behaviorCreator = machine.options.actors[behavior];
|
|
4291
|
+
|
|
4292
|
+
if (behaviorCreator) {
|
|
4293
|
+
var resolvedName = name !== null && name !== void 0 ? name : 'anon'; // TODO: better name
|
|
4294
|
+
|
|
4295
|
+
var createdBehavior = typeof behaviorCreator === 'function' ? behaviorCreator(context, _event.data, {
|
|
4296
|
+
id: resolvedName,
|
|
4297
|
+
src: {
|
|
4298
|
+
type: behavior
|
|
4299
|
+
},
|
|
4300
|
+
_event: _event,
|
|
4301
|
+
meta: undefined
|
|
4302
|
+
}) : behaviorCreator;
|
|
4303
|
+
var actorRef = interpret(createdBehavior, {
|
|
4304
|
+
id: resolvedName
|
|
4305
|
+
});
|
|
4306
|
+
mutCapturedActions.push(invoke$1({
|
|
4307
|
+
id: actorRef.id,
|
|
4308
|
+
// @ts-ignore TODO: fix types
|
|
4309
|
+
src: actorRef,
|
|
4310
|
+
// TODO
|
|
4311
|
+
ref: actorRef,
|
|
4312
|
+
meta: undefined
|
|
4313
|
+
}));
|
|
4314
|
+
return actorRef; // TODO: fix types
|
|
4315
|
+
}
|
|
4316
|
+
|
|
4317
|
+
throw new Error("Behavior '".concat(behavior, "' not implemented in machine '").concat(machine.id, "'"));
|
|
4318
|
+
} else {
|
|
4319
|
+
var _actorRef = interpret(behavior, {
|
|
4320
|
+
id: name || 'anonymous'
|
|
4321
|
+
});
|
|
4322
|
+
|
|
4323
|
+
mutCapturedActions.push(invoke$1({
|
|
4324
|
+
// @ts-ignore TODO: fix types
|
|
4325
|
+
src: _actorRef,
|
|
4326
|
+
ref: _actorRef,
|
|
4327
|
+
id: _actorRef.id,
|
|
4328
|
+
meta: undefined
|
|
4329
|
+
}));
|
|
4330
|
+
return _actorRef; // TODO: fix types
|
|
4331
|
+
}
|
|
4332
|
+
};
|
|
4333
|
+
}
|
|
4334
|
+
|
|
4335
|
+
/**
|
|
4336
|
+
* Updates the current context of the machine.
|
|
4337
|
+
*
|
|
4338
|
+
* @param assignment An object that represents the partial context to update.
|
|
4339
|
+
*/
|
|
4340
|
+
|
|
4341
|
+
function assign$1(assignment) {
|
|
4342
|
+
return createDynamicAction({
|
|
4343
|
+
type: assign,
|
|
4344
|
+
params: {
|
|
4345
|
+
assignment: assignment
|
|
4346
|
+
}
|
|
4347
|
+
}, function (_event, _ref) {
|
|
4348
|
+
var state = _ref.state,
|
|
4349
|
+
action = _ref.action;
|
|
4350
|
+
var capturedActions = [];
|
|
4351
|
+
|
|
4352
|
+
if (!state.context) {
|
|
4353
|
+
throw new Error('Cannot assign to undefined `context`. Ensure that `context` is defined in the machine config.');
|
|
4354
|
+
}
|
|
4355
|
+
|
|
4356
|
+
var meta = {
|
|
4357
|
+
state: state,
|
|
4358
|
+
action: action,
|
|
4359
|
+
_event: _event,
|
|
4360
|
+
spawn: createSpawner(state.machine, state.context, _event, capturedActions)
|
|
4361
|
+
};
|
|
4362
|
+
var partialUpdate = {};
|
|
4363
|
+
|
|
4364
|
+
if (isFunction(assignment)) {
|
|
4365
|
+
partialUpdate = assignment(state.context, _event.data, meta);
|
|
4366
|
+
} else {
|
|
4367
|
+
for (var _i = 0, _Object$keys = Object.keys(assignment); _i < _Object$keys.length; _i++) {
|
|
4368
|
+
var key = _Object$keys[_i];
|
|
4369
|
+
var propAssignment = assignment[key];
|
|
4370
|
+
partialUpdate[key] = isFunction(propAssignment) ? propAssignment(state.context, _event.data, meta) : propAssignment;
|
|
4371
|
+
}
|
|
4372
|
+
}
|
|
4373
|
+
|
|
4374
|
+
var updatedContext = Object.assign({}, state.context, partialUpdate);
|
|
4375
|
+
return [cloneState(state, {
|
|
4376
|
+
context: updatedContext
|
|
4377
|
+
}), {
|
|
4378
|
+
type: assign,
|
|
4379
|
+
params: {
|
|
4380
|
+
context: updatedContext,
|
|
4381
|
+
actions: capturedActions
|
|
4382
|
+
}
|
|
4383
|
+
}];
|
|
4384
|
+
});
|
|
4385
|
+
}
|
|
4386
|
+
|
|
4387
|
+
/**
|
|
4388
|
+
* Raises an event. This places the event in the internal event queue, so that
|
|
4389
|
+
* the event is immediately consumed by the machine in the current step.
|
|
4390
|
+
*
|
|
4391
|
+
* @param eventType The event to raise.
|
|
4392
|
+
*/
|
|
4393
|
+
function raise$1(event) {
|
|
4394
|
+
return createDynamicAction({
|
|
4395
|
+
type: raise,
|
|
4396
|
+
params: {
|
|
4397
|
+
_event: toSCXMLEvent(event)
|
|
4398
|
+
}
|
|
4399
|
+
}, function (_event, _ref) {
|
|
4400
|
+
var state = _ref.state;
|
|
4401
|
+
return [state, {
|
|
4402
|
+
type: raise,
|
|
4403
|
+
params: {
|
|
4404
|
+
_event: toSCXMLEvent(event)
|
|
4405
|
+
}
|
|
4406
|
+
}];
|
|
4407
|
+
});
|
|
4408
|
+
}
|
|
4409
|
+
|
|
4410
|
+
function choose$1(guards) {
|
|
4411
|
+
return createDynamicAction({
|
|
4412
|
+
type: choose,
|
|
4413
|
+
params: {
|
|
4414
|
+
guards: guards
|
|
4415
|
+
}
|
|
4416
|
+
}, function (_event, _ref) {
|
|
4417
|
+
var _guards$find;
|
|
4418
|
+
|
|
4419
|
+
var state = _ref.state;
|
|
4420
|
+
var matchedActions = (_guards$find = guards.find(function (condition) {
|
|
4421
|
+
var guard = condition.guard && toGuardDefinition(condition.guard, function (guardType) {
|
|
4422
|
+
return state.machine.options.guards[guardType];
|
|
4423
|
+
});
|
|
4424
|
+
return !guard || evaluateGuard(guard, state.context, _event, state);
|
|
4425
|
+
})) === null || _guards$find === void 0 ? void 0 : _guards$find.actions;
|
|
4426
|
+
return [state, {
|
|
4427
|
+
type: choose,
|
|
4428
|
+
params: {
|
|
4429
|
+
actions: toActionObjects(matchedActions)
|
|
4430
|
+
}
|
|
4431
|
+
}];
|
|
4432
|
+
});
|
|
4433
|
+
}
|
|
4434
|
+
|
|
4435
|
+
var initEvent = toSCXMLEvent({
|
|
4436
|
+
type: init
|
|
4437
|
+
});
|
|
4438
|
+
function resolveActionObject(actionObject, actionFunctionMap) {
|
|
4439
|
+
if (isDynamicAction(actionObject)) {
|
|
4440
|
+
return actionObject;
|
|
4441
|
+
}
|
|
4442
|
+
|
|
4443
|
+
var dereferencedAction = actionFunctionMap[actionObject.type];
|
|
4444
|
+
|
|
4445
|
+
if (typeof dereferencedAction === 'function') {
|
|
4446
|
+
var _actionObject$params;
|
|
4447
|
+
|
|
4448
|
+
return createDynamicAction({
|
|
4449
|
+
type: 'xstate.expr',
|
|
4450
|
+
params: (_actionObject$params = actionObject.params) !== null && _actionObject$params !== void 0 ? _actionObject$params : {}
|
|
4451
|
+
}, function (_event, _ref) {
|
|
4452
|
+
var state = _ref.state;
|
|
4453
|
+
var a = {
|
|
4454
|
+
type: actionObject.type,
|
|
4455
|
+
params: actionObject.params,
|
|
4456
|
+
execute: function execute(_actorCtx) {
|
|
4457
|
+
return dereferencedAction(state.context, state.event, {
|
|
4458
|
+
action: a,
|
|
4459
|
+
_event: state._event,
|
|
4460
|
+
state: state
|
|
4461
|
+
});
|
|
4462
|
+
}
|
|
4463
|
+
};
|
|
4464
|
+
return [state, a];
|
|
4465
|
+
});
|
|
4466
|
+
} else if (dereferencedAction) {
|
|
4467
|
+
return dereferencedAction;
|
|
4468
|
+
} else {
|
|
4469
|
+
return actionObject;
|
|
4470
|
+
}
|
|
4471
|
+
}
|
|
4472
|
+
function toActionObject(action) {
|
|
4473
|
+
if (isDynamicAction(action)) {
|
|
4474
|
+
return action;
|
|
4475
|
+
}
|
|
4476
|
+
|
|
4477
|
+
if (typeof action === 'string') {
|
|
4478
|
+
return {
|
|
4479
|
+
type: action,
|
|
4480
|
+
params: {}
|
|
4481
|
+
};
|
|
4482
|
+
}
|
|
4483
|
+
|
|
4484
|
+
if (typeof action === 'function') {
|
|
4485
|
+
var type = 'xstate.function';
|
|
4486
|
+
return createDynamicAction({
|
|
4487
|
+
type: type,
|
|
4488
|
+
params: {}
|
|
4489
|
+
}, function (_event, _ref2) {
|
|
4490
|
+
var state = _ref2.state;
|
|
4491
|
+
var a = {
|
|
4492
|
+
type: type,
|
|
4493
|
+
params: {
|
|
4494
|
+
"function": action
|
|
4495
|
+
},
|
|
4496
|
+
execute: function execute(_actorCtx) {
|
|
4497
|
+
return action(state.context, _event.data, {
|
|
4498
|
+
action: a,
|
|
4499
|
+
_event: _event,
|
|
4500
|
+
state: state
|
|
4501
|
+
});
|
|
4502
|
+
}
|
|
4503
|
+
};
|
|
4504
|
+
return [state, a];
|
|
4505
|
+
});
|
|
4506
|
+
} // action is already a BaseActionObject
|
|
4507
|
+
|
|
4508
|
+
|
|
4509
|
+
return action;
|
|
4510
|
+
}
|
|
4511
|
+
var toActionObjects = function toActionObjects(action) {
|
|
4512
|
+
if (!action) {
|
|
4513
|
+
return [];
|
|
4514
|
+
}
|
|
4515
|
+
|
|
4516
|
+
var actions = isArray(action) ? action : [action];
|
|
4517
|
+
return actions.map(toActionObject);
|
|
4518
|
+
};
|
|
4519
|
+
/**
|
|
4520
|
+
* Returns an event type that represents an implicit event that
|
|
4521
|
+
* is sent after the specified `delay`.
|
|
4522
|
+
*
|
|
4523
|
+
* @param delayRef The delay in milliseconds
|
|
4524
|
+
* @param id The state node ID where this event is handled
|
|
4525
|
+
*/
|
|
4526
|
+
|
|
4527
|
+
function after$1(delayRef, id) {
|
|
4528
|
+
var idSuffix = id ? "#".concat(id) : '';
|
|
4529
|
+
return "".concat(exports.ActionTypes.After, "(").concat(delayRef, ")").concat(idSuffix);
|
|
4530
|
+
}
|
|
4531
|
+
/**
|
|
4532
|
+
* Returns an event that represents that a final state node
|
|
4533
|
+
* has been reached in the parent state node.
|
|
4534
|
+
*
|
|
4535
|
+
* @param id The final state node's parent state node `id`
|
|
4536
|
+
* @param data The data to pass into the event
|
|
4537
|
+
*/
|
|
4538
|
+
|
|
4539
|
+
function done(id, data) {
|
|
4540
|
+
var type = "".concat(exports.ActionTypes.DoneState, ".").concat(id);
|
|
4541
|
+
var eventObject = {
|
|
4542
|
+
type: type,
|
|
4543
|
+
data: data
|
|
4544
|
+
};
|
|
4545
|
+
|
|
4546
|
+
eventObject.toString = function () {
|
|
4547
|
+
return type;
|
|
4548
|
+
};
|
|
4549
|
+
|
|
4550
|
+
return eventObject;
|
|
4551
|
+
}
|
|
4552
|
+
/**
|
|
4553
|
+
* Returns an event that represents that an invoked service has terminated.
|
|
4554
|
+
*
|
|
4555
|
+
* An invoked service is terminated when it has reached a top-level final state node,
|
|
4556
|
+
* but not when it is canceled.
|
|
4557
|
+
*
|
|
4558
|
+
* @param invokeId The invoked service ID
|
|
4559
|
+
* @param data The data to pass into the event
|
|
4560
|
+
*/
|
|
4561
|
+
|
|
4562
|
+
function doneInvoke(invokeId, data) {
|
|
4563
|
+
var type = "".concat(exports.ActionTypes.DoneInvoke, ".").concat(invokeId);
|
|
4564
|
+
var eventObject = {
|
|
4565
|
+
type: type,
|
|
4566
|
+
data: data
|
|
4567
|
+
};
|
|
4568
|
+
|
|
4569
|
+
eventObject.toString = function () {
|
|
4570
|
+
return type;
|
|
4571
|
+
};
|
|
4572
|
+
|
|
4573
|
+
return eventObject;
|
|
4574
|
+
}
|
|
4575
|
+
function error$1(id, data) {
|
|
4576
|
+
var type = "".concat(exports.ActionTypes.ErrorPlatform, ".").concat(id);
|
|
4577
|
+
var eventObject = {
|
|
4578
|
+
type: type,
|
|
4579
|
+
data: data
|
|
4580
|
+
};
|
|
4581
|
+
|
|
4582
|
+
eventObject.toString = function () {
|
|
4583
|
+
return type;
|
|
4584
|
+
};
|
|
4585
|
+
|
|
4586
|
+
return eventObject;
|
|
4587
|
+
}
|
|
4588
|
+
|
|
4589
|
+
exports.Interpreter = Interpreter;
|
|
4590
|
+
exports.NULL_EVENT = NULL_EVENT;
|
|
4591
|
+
exports.STATE_DELIMITER = STATE_DELIMITER;
|
|
4592
|
+
exports.State = State;
|
|
4593
|
+
exports._classCallCheck = _classCallCheck;
|
|
4594
|
+
exports._createClass = _createClass;
|
|
4595
|
+
exports._createForOfIteratorHelper = _createForOfIteratorHelper;
|
|
4596
|
+
exports._defineProperty = _defineProperty;
|
|
4597
|
+
exports._objectSpread2 = _objectSpread2;
|
|
4598
|
+
exports._objectWithoutProperties = _objectWithoutProperties;
|
|
4599
|
+
exports._slicedToArray = _slicedToArray;
|
|
4600
|
+
exports._toConsumableArray = _toConsumableArray;
|
|
4601
|
+
exports.actionTypes = actionTypes;
|
|
4602
|
+
exports.after = after$1;
|
|
4603
|
+
exports.and = and;
|
|
4604
|
+
exports.assign = assign$1;
|
|
4605
|
+
exports.cancel = cancel$1;
|
|
4606
|
+
exports.choose = choose$1;
|
|
4607
|
+
exports.createDynamicAction = createDynamicAction;
|
|
4608
|
+
exports.createInvokeId = createInvokeId;
|
|
4609
|
+
exports.createSpawner = createSpawner;
|
|
4610
|
+
exports.done = done;
|
|
4611
|
+
exports.doneInvoke = doneInvoke;
|
|
4612
|
+
exports.error = error$1;
|
|
4613
|
+
exports.escalate = escalate;
|
|
4614
|
+
exports.evaluateGuard = evaluateGuard;
|
|
4615
|
+
exports.flatten = flatten;
|
|
4616
|
+
exports.formatInitialTransition = formatInitialTransition;
|
|
4617
|
+
exports.formatTransition = formatTransition;
|
|
4618
|
+
exports.formatTransitions = formatTransitions;
|
|
4619
|
+
exports.forwardTo = forwardTo;
|
|
4620
|
+
exports.fromCallback = fromCallback;
|
|
4621
|
+
exports.fromEventObservable = fromEventObservable;
|
|
4622
|
+
exports.fromObservable = fromObservable;
|
|
4623
|
+
exports.fromPromise = fromPromise;
|
|
4624
|
+
exports.fromReducer = fromReducer;
|
|
4625
|
+
exports.getCandidates = getCandidates;
|
|
4626
|
+
exports.getConfiguration = getConfiguration;
|
|
4627
|
+
exports.getDelayedTransitions = getDelayedTransitions;
|
|
4628
|
+
exports.getInitialConfiguration = getInitialConfiguration;
|
|
4629
|
+
exports.getStateNodes = getStateNodes;
|
|
4630
|
+
exports.initEvent = initEvent;
|
|
4631
|
+
exports.interpret = interpret;
|
|
4632
|
+
exports.invoke = invoke;
|
|
4633
|
+
exports.isActorRef = isActorRef;
|
|
4634
|
+
exports.isFunction = isFunction;
|
|
4635
|
+
exports.isInFinalState = isInFinalState;
|
|
4636
|
+
exports.isSCXMLErrorEvent = isSCXMLErrorEvent;
|
|
4637
|
+
exports.isStateConfig = isStateConfig;
|
|
4638
|
+
exports.isStateId = isStateId;
|
|
4639
|
+
exports.isString = isString;
|
|
4640
|
+
exports.log = log$1;
|
|
4641
|
+
exports.macrostep = macrostep;
|
|
4642
|
+
exports.mapValues = mapValues;
|
|
4643
|
+
exports.matchesState = matchesState;
|
|
4644
|
+
exports.memo = memo;
|
|
4645
|
+
exports.microstep = microstep;
|
|
4646
|
+
exports.not = not;
|
|
4647
|
+
exports.or = or;
|
|
4648
|
+
exports.pathToStateValue = pathToStateValue;
|
|
4649
|
+
exports.pure = pure;
|
|
4650
|
+
exports.raise = raise$1;
|
|
4651
|
+
exports.resolveActionObject = resolveActionObject;
|
|
4652
|
+
exports.resolveActionsAndContext = resolveActionsAndContext;
|
|
4653
|
+
exports.resolveStateValue = resolveStateValue;
|
|
4654
|
+
exports.respond = respond;
|
|
4655
|
+
exports.send = send$1;
|
|
4656
|
+
exports.sendParent = sendParent;
|
|
4657
|
+
exports.sendTo = sendTo;
|
|
4658
|
+
exports.startSignal = startSignal;
|
|
4659
|
+
exports.startSignalType = startSignalType;
|
|
4660
|
+
exports.stateIn = stateIn;
|
|
4661
|
+
exports.stop = stop$1;
|
|
4662
|
+
exports.stopSignal = stopSignal;
|
|
4663
|
+
exports.stopSignalType = stopSignalType;
|
|
4664
|
+
exports.toActionObject = toActionObject;
|
|
4665
|
+
exports.toActionObjects = toActionObjects;
|
|
4666
|
+
exports.toActorRef = toActorRef;
|
|
4667
|
+
exports.toArray = toArray;
|
|
4668
|
+
exports.toGuardDefinition = toGuardDefinition;
|
|
4669
|
+
exports.toInvokeConfig = toInvokeConfig;
|
|
4670
|
+
exports.toInvokeSource = toInvokeSource;
|
|
4671
|
+
exports.toObserver = toObserver;
|
|
4672
|
+
exports.toSCXMLEvent = toSCXMLEvent;
|
|
4673
|
+
exports.toTransitionConfigArray = toTransitionConfigArray;
|
|
4674
|
+
exports.transitionNode = transitionNode;
|