xstate 5.0.0-beta.7 → 5.0.0-beta.9

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.
Files changed (62) hide show
  1. package/actions/dist/xstate-actions.cjs.d.mts +2 -0
  2. package/actions/dist/xstate-actions.cjs.d.mts.map +1 -0
  3. package/actions/dist/xstate-actions.cjs.d.ts +1 -0
  4. package/actions/dist/xstate-actions.cjs.d.ts.map +1 -0
  5. package/actions/dist/xstate-actions.cjs.dev.js +2 -1
  6. package/actions/dist/xstate-actions.cjs.mjs +25 -0
  7. package/actions/dist/xstate-actions.cjs.prod.js +3 -2
  8. package/actions/dist/xstate-actions.esm.js +1 -1
  9. package/actions/dist/xstate-actions.umd.min.js +1 -1
  10. package/actions/dist/xstate-actions.umd.min.js.map +1 -1
  11. package/actors/dist/xstate-actors.cjs.d.mts +2 -0
  12. package/actors/dist/xstate-actors.cjs.d.mts.map +1 -0
  13. package/actors/dist/xstate-actors.cjs.d.ts +1 -0
  14. package/actors/dist/xstate-actors.cjs.d.ts.map +1 -0
  15. package/actors/dist/xstate-actors.cjs.dev.js +2 -1
  16. package/actors/dist/xstate-actors.cjs.mjs +15 -0
  17. package/actors/dist/xstate-actors.cjs.prod.js +3 -2
  18. package/actors/dist/xstate-actors.esm.js +1 -1
  19. package/actors/dist/xstate-actors.umd.min.js +1 -1
  20. package/actors/dist/xstate-actors.umd.min.js.map +1 -1
  21. package/dev/dist/xstate-dev.cjs.d.mts +2 -0
  22. package/dev/dist/xstate-dev.cjs.d.mts.map +1 -0
  23. package/dev/dist/xstate-dev.cjs.d.ts +1 -0
  24. package/dev/dist/xstate-dev.cjs.d.ts.map +1 -0
  25. package/dev/dist/xstate-dev.cjs.mjs +5 -0
  26. package/dev/dist/xstate-dev.cjs.prod.js +6 -43
  27. package/dev/dist/xstate-dev.umd.min.js.map +1 -1
  28. package/dist/{actions-0fcf4fd9.cjs.dev.js → actions-b6357569.cjs.dev.js} +252 -157
  29. package/dist/{actions-a1a641d3.cjs.prod.js → actions-bd4a184d.cjs.prod.js} +279 -160
  30. package/dist/{actions-b334e916.esm.js → actions-de434a04.esm.js} +208 -147
  31. package/dist/declarations/src/StateMachine.d.ts +2 -2
  32. package/dist/declarations/src/actions.d.ts +1 -0
  33. package/dist/declarations/src/actors/index.d.ts +2 -1
  34. package/dist/declarations/src/actors/observable.d.ts +1 -2
  35. package/dist/declarations/src/actors/promise.d.ts +1 -2
  36. package/dist/declarations/src/index.d.ts +12 -28
  37. package/dist/declarations/src/interpreter.d.ts +3 -2
  38. package/dist/declarations/src/typegenTypes.d.ts +7 -1
  39. package/dist/declarations/src/types.d.ts +5 -4
  40. package/dist/declarations/src/waitFor.d.ts +33 -0
  41. package/dist/index-0f3fdf0c.cjs.prod.js +52 -0
  42. package/dist/xstate.cjs.d.mts +2 -0
  43. package/dist/xstate.cjs.d.mts.map +1 -0
  44. package/dist/xstate.cjs.d.ts +1 -0
  45. package/dist/xstate.cjs.d.ts.map +1 -0
  46. package/dist/xstate.cjs.dev.js +97 -68
  47. package/dist/xstate.cjs.mjs +39 -0
  48. package/dist/xstate.cjs.prod.js +95 -69
  49. package/dist/xstate.esm.js +80 -57
  50. package/dist/xstate.umd.min.js +1 -1
  51. package/dist/xstate.umd.min.js.map +1 -1
  52. package/guards/dist/xstate-guards.cjs.d.mts +2 -0
  53. package/guards/dist/xstate-guards.cjs.d.mts.map +1 -0
  54. package/guards/dist/xstate-guards.cjs.d.ts +1 -0
  55. package/guards/dist/xstate-guards.cjs.d.ts.map +1 -0
  56. package/guards/dist/xstate-guards.cjs.dev.js +1 -1
  57. package/guards/dist/xstate-guards.cjs.mjs +8 -0
  58. package/guards/dist/xstate-guards.cjs.prod.js +2 -2
  59. package/guards/dist/xstate-guards.esm.js +1 -1
  60. package/guards/dist/xstate-guards.umd.min.js.map +1 -1
  61. package/package.json +7 -1
  62. package/dist/declarations/src/schema.d.ts +0 -2
@@ -3,6 +3,38 @@
3
3
  var dev_dist_xstateDev = require('./index-ebaab3c9.cjs.dev.js');
4
4
 
5
5
  // https://github.com/microsoft/TypeScript/issues/23182#issuecomment-379091887
6
+
7
+ // TODO: replace in v5 with:
8
+ // export type IndexByType<T extends { type: string }> = { [E in T as E['type']]: E; };
9
+
10
+ /**
11
+ * The full definition of an event, with a string `type`.
12
+ */
13
+
14
+ // TODO: do not accept machines without all implementations
15
+ // we should also accept a raw machine as a behavior here
16
+ // or just make machine a behavior
17
+
18
+ // TODO: narrow this to behaviors from machine
19
+
20
+ // TODO: fix last param
21
+
22
+ /**
23
+ * Extracts action objects that have no extra properties.
24
+ */
25
+
26
+ /**
27
+ * The string or object representing the state value relative to the parent state node.
28
+ *
29
+ * - For a child atomic state node, this is a string, e.g., `"pending"`.
30
+ * - For complex state nodes, this is an object, e.g., `{ success: "someChildState" }`.
31
+ */
32
+
33
+ // TODO: remove once TS fixes this type-widening issue
34
+
35
+ // TODO: possibly refactor this somehow, use even a simpler type, and maybe even make `machine.options` private or something
36
+
37
+ exports.ActionTypes = void 0;
6
38
  (function (ActionTypes) {
7
39
  ActionTypes["Stop"] = "xstate.stop";
8
40
  ActionTypes["Raise"] = "xstate.raise";
@@ -22,45 +54,46 @@ var dev_dist_xstateDev = require('./index-ebaab3c9.cjs.dev.js');
22
54
  ActionTypes["Pure"] = "xstate.pure";
23
55
  ActionTypes["Choose"] = "xstate.choose";
24
56
  })(exports.ActionTypes || (exports.ActionTypes = {}));
57
+ exports.SpecialTargets = void 0;
25
58
  (function (SpecialTargets) {
26
59
  SpecialTargets["Parent"] = "#_parent";
27
60
  SpecialTargets["Internal"] = "#_internal";
28
61
  })(exports.SpecialTargets || (exports.SpecialTargets = {}));
29
62
 
30
63
  // xstate-specific action types
31
- var stop = exports.ActionTypes.Stop;
32
- var raise = exports.ActionTypes.Raise;
33
- var send = exports.ActionTypes.Send;
34
- var cancel = exports.ActionTypes.Cancel;
35
- var assign = exports.ActionTypes.Assign;
36
- var after = exports.ActionTypes.After;
64
+ var stop$1 = exports.ActionTypes.Stop;
65
+ var raise$1 = exports.ActionTypes.Raise;
66
+ var send$1 = exports.ActionTypes.Send;
67
+ var cancel$1 = exports.ActionTypes.Cancel;
68
+ var assign$1 = exports.ActionTypes.Assign;
69
+ var after$1 = exports.ActionTypes.After;
37
70
  var doneState = exports.ActionTypes.DoneState;
38
- var log = exports.ActionTypes.Log;
71
+ var log$1 = exports.ActionTypes.Log;
39
72
  var init = exports.ActionTypes.Init;
40
- var invoke = exports.ActionTypes.Invoke;
73
+ var invoke$1 = exports.ActionTypes.Invoke;
41
74
  var errorExecution = exports.ActionTypes.ErrorExecution;
42
75
  var errorPlatform = exports.ActionTypes.ErrorPlatform;
43
- var error = exports.ActionTypes.ErrorCustom;
44
- var choose = exports.ActionTypes.Choose;
45
- var pure = exports.ActionTypes.Pure;
76
+ var error$1 = exports.ActionTypes.ErrorCustom;
77
+ var choose$1 = exports.ActionTypes.Choose;
78
+ var pure$1 = exports.ActionTypes.Pure;
46
79
 
47
80
  var actionTypes = /*#__PURE__*/Object.freeze({
48
81
  __proto__: null,
49
- stop: stop,
50
- raise: raise,
51
- send: send,
52
- cancel: cancel,
53
- assign: assign,
54
- after: after,
82
+ stop: stop$1,
83
+ raise: raise$1,
84
+ send: send$1,
85
+ cancel: cancel$1,
86
+ assign: assign$1,
87
+ after: after$1,
55
88
  doneState: doneState,
56
- log: log,
89
+ log: log$1,
57
90
  init: init,
58
- invoke: invoke,
91
+ invoke: invoke$1,
59
92
  errorExecution: errorExecution,
60
93
  errorPlatform: errorPlatform,
61
- error: error,
62
- choose: choose,
63
- pure: pure
94
+ error: error$1,
95
+ choose: choose$1,
96
+ pure: pure$1
64
97
  });
65
98
 
66
99
  function _toPrimitive(input, hint) {
@@ -504,9 +537,9 @@ function isDynamicAction(action) {
504
537
  * - `delay` - The number of milliseconds to delay the sending of the event.
505
538
  * - `to` - The target of this event (by default, the machine the event was sent from).
506
539
  */
507
- function send$1(eventOrExpr, options) {
540
+ function send(eventOrExpr, options) {
508
541
  return createDynamicAction({
509
- type: send,
542
+ type: send$1,
510
543
  params: {
511
544
  to: options ? options.to : undefined,
512
545
  delay: options ? options.delay : undefined,
@@ -535,6 +568,9 @@ function send$1(eventOrExpr, options) {
535
568
  var delaysMap = state.machine.options.delays;
536
569
 
537
570
  // TODO: helper function for resolving Expr
571
+ if (typeof eventOrExpr === 'string') {
572
+ throw new Error("Only event objects may be used with sendTo; use sendTo({ type: \"".concat(eventOrExpr, "\" }) instead"));
573
+ }
538
574
  var resolvedEvent = toSCXMLEvent(isFunction(eventOrExpr) ? eventOrExpr(args) : eventOrExpr);
539
575
  var resolvedDelay;
540
576
  if (isString(params.delay)) {
@@ -564,7 +600,7 @@ function send$1(eventOrExpr, options) {
564
600
  targetActorRef = resolvedTarget || (actorContext === null || actorContext === void 0 ? void 0 : actorContext.self);
565
601
  }
566
602
  var resolvedAction = {
567
- type: send,
603
+ type: send$1,
568
604
  params: _objectSpread2(_objectSpread2({}, params), {}, {
569
605
  to: targetActorRef,
570
606
  _event: resolvedEvent,
@@ -583,7 +619,7 @@ function send$1(eventOrExpr, options) {
583
619
  actorCtx.defer(function () {
584
620
  var origin = actorCtx.self;
585
621
  var resolvedEvent = _objectSpread2(_objectSpread2({}, _event2), {}, {
586
- name: _event2.name === error ? "".concat(error$1(origin.id)) : _event2.name,
622
+ name: _event2.name === error$1 ? "".concat(error(origin.id)) : _event2.name,
587
623
  origin: origin
588
624
  });
589
625
  target.send(resolvedEvent);
@@ -602,7 +638,7 @@ function send$1(eventOrExpr, options) {
602
638
  * @param options Options to pass into the send event.
603
639
  */
604
640
  function sendParent(event, options) {
605
- return send$1(event, _objectSpread2(_objectSpread2({}, options), {}, {
641
+ return send(event, _objectSpread2(_objectSpread2({}, options), {}, {
606
642
  to: exports.SpecialTargets.Parent
607
643
  }));
608
644
  }
@@ -614,7 +650,7 @@ function sendParent(event, options) {
614
650
  * @param options Options to pass into the send event
615
651
  */
616
652
  function respond(event, options) {
617
- return send$1(event, _objectSpread2(_objectSpread2({}, options), {}, {
653
+ return send(event, _objectSpread2(_objectSpread2({}, options), {}, {
618
654
  to: function to(_ref2) {
619
655
  var _event = _ref2._event;
620
656
  return _event.origin; // TODO: handle when _event.origin is undefined
@@ -639,7 +675,7 @@ function forwardTo(target, options) {
639
675
  return resolvedTarget;
640
676
  };
641
677
  }
642
- return send$1(function (_ref3) {
678
+ return send(function (_ref3) {
643
679
  var event = _ref3.event;
644
680
  return event;
645
681
  }, _objectSpread2(_objectSpread2({}, options), {}, {
@@ -657,7 +693,7 @@ function forwardTo(target, options) {
657
693
  function escalate(errorData, options) {
658
694
  return sendParent(function (arg) {
659
695
  return {
660
- type: error,
696
+ type: error$1,
661
697
  data: isFunction(errorData) ? errorData(arg) : errorData
662
698
  };
663
699
  }, _objectSpread2(_objectSpread2({}, options), {}, {
@@ -674,7 +710,7 @@ function escalate(errorData, options) {
674
710
  * @returns An XState send action object
675
711
  */
676
712
  function sendTo(actor, event, options) {
677
- return send$1(event, _objectSpread2(_objectSpread2({}, options), {}, {
713
+ return send(event, _objectSpread2(_objectSpread2({}, options), {}, {
678
714
  to: actor
679
715
  }));
680
716
  }
@@ -832,25 +868,28 @@ promiseCreator) {
832
868
  var behavior = {
833
869
  transition: function transition(state, event) {
834
870
  var _event = toSCXMLEvent(event);
835
- if (state.canceled) {
871
+ if (state.status !== 'active') {
836
872
  return state;
837
873
  }
838
874
  var eventObject = _event.data;
839
875
  switch (_event.name) {
840
876
  case resolveEventType:
841
- state.status = 'done';
842
- state.data = eventObject.data;
843
- delete state.input;
844
- return state;
877
+ return _objectSpread2(_objectSpread2({}, state), {}, {
878
+ status: 'done',
879
+ data: eventObject.data,
880
+ input: undefined
881
+ });
845
882
  case rejectEventType:
846
- state.status = 'error';
847
- state.data = eventObject.data;
848
- delete state.input;
849
- return state;
883
+ return _objectSpread2(_objectSpread2({}, state), {}, {
884
+ status: 'error',
885
+ data: eventObject.data,
886
+ input: undefined
887
+ });
850
888
  case stopSignalType:
851
- state.canceled = true;
852
- delete state.input;
853
- return state;
889
+ return _objectSpread2(_objectSpread2({}, state), {}, {
890
+ status: 'canceled',
891
+ input: undefined
892
+ });
854
893
  default:
855
894
  return state;
856
895
  }
@@ -866,11 +905,19 @@ promiseCreator) {
866
905
  input: state.input
867
906
  }));
868
907
  resolvedPromise.then(function (response) {
908
+ // TODO: remove this condition once dead letter queue lands
909
+ if (self._state.status !== 'active') {
910
+ return;
911
+ }
869
912
  self.send({
870
913
  type: resolveEventType,
871
914
  data: response
872
915
  });
873
916
  }, function (errorData) {
917
+ // TODO: remove this condition once dead letter queue lands
918
+ if (self._state.status !== 'active') {
919
+ return;
920
+ }
874
921
  self.send({
875
922
  type: rejectEventType,
876
923
  data: errorData
@@ -879,7 +926,6 @@ promiseCreator) {
879
926
  },
880
927
  getInitialState: function getInitialState(_, input) {
881
928
  return {
882
- canceled: false,
883
929
  status: 'active',
884
930
  data: undefined,
885
931
  input: input
@@ -914,12 +960,11 @@ function fromObservable(observableCreator) {
914
960
  id = _ref.id,
915
961
  defer = _ref.defer;
916
962
  var _event = toSCXMLEvent(event);
917
- if (state.canceled) {
963
+ if (state.status !== 'active') {
918
964
  return state;
919
965
  }
920
966
  switch (_event.name) {
921
967
  case nextEventType:
922
- state.data = event.data.data;
923
968
  // match the exact timing of events sent by machines
924
969
  // send actions are not executed immediately
925
970
  defer(function () {
@@ -931,21 +976,29 @@ function fromObservable(observableCreator) {
931
976
  origin: self
932
977
  }));
933
978
  });
934
- return state;
979
+ return _objectSpread2(_objectSpread2({}, state), {}, {
980
+ data: event.data.data
981
+ });
935
982
  case errorEventType:
936
- state.status = 'error';
937
- delete state.input;
938
- state.data = _event.data.data;
939
- return state;
983
+ return _objectSpread2(_objectSpread2({}, state), {}, {
984
+ status: 'error',
985
+ input: undefined,
986
+ data: _event.data.data,
987
+ subscription: undefined
988
+ });
940
989
  case completeEventType:
941
- state.status = 'done';
942
- delete state.input;
943
- return state;
990
+ return _objectSpread2(_objectSpread2({}, state), {}, {
991
+ status: 'done',
992
+ input: undefined,
993
+ subscription: undefined
994
+ });
944
995
  case stopSignalType:
945
- state.canceled = true;
946
- delete state.input;
947
996
  state.subscription.unsubscribe();
948
- return state;
997
+ return _objectSpread2(_objectSpread2({}, state), {}, {
998
+ status: 'canceled',
999
+ input: undefined,
1000
+ subscription: undefined
1001
+ });
949
1002
  default:
950
1003
  return state;
951
1004
  }
@@ -953,7 +1006,6 @@ function fromObservable(observableCreator) {
953
1006
  getInitialState: function getInitialState(_, input) {
954
1007
  return {
955
1008
  subscription: undefined,
956
- canceled: false,
957
1009
  status: 'active',
958
1010
  data: undefined,
959
1011
  input: input
@@ -991,12 +1043,10 @@ function fromObservable(observableCreator) {
991
1043
  return state.data;
992
1044
  },
993
1045
  getPersistedState: function getPersistedState(_ref3) {
994
- var canceled = _ref3.canceled,
995
- status = _ref3.status,
1046
+ var status = _ref3.status,
996
1047
  data = _ref3.data,
997
1048
  input = _ref3.input;
998
1049
  return {
999
- canceled: canceled,
1000
1050
  status: status,
1001
1051
  data: data,
1002
1052
  input: input
@@ -1031,24 +1081,30 @@ function fromEventObservable(lazyObservable) {
1031
1081
  var behavior = {
1032
1082
  transition: function transition(state, event) {
1033
1083
  var _event = toSCXMLEvent(event);
1034
- if (state.canceled) {
1084
+ if (state.status !== 'active') {
1035
1085
  return state;
1036
1086
  }
1037
1087
  switch (_event.name) {
1038
1088
  case errorEventType:
1039
- state.status = 'error';
1040
- delete state.input;
1041
- state.data = _event.data.data;
1042
- return state;
1089
+ return _objectSpread2(_objectSpread2({}, state), {}, {
1090
+ status: 'error',
1091
+ input: undefined,
1092
+ data: _event.data.data,
1093
+ subscription: undefined
1094
+ });
1043
1095
  case completeEventType:
1044
- state.status = 'done';
1045
- delete state.input;
1046
- return state;
1096
+ return _objectSpread2(_objectSpread2({}, state), {}, {
1097
+ status: 'done',
1098
+ input: undefined,
1099
+ subscription: undefined
1100
+ });
1047
1101
  case stopSignalType:
1048
- state.canceled = true;
1049
- delete state.input;
1050
1102
  state.subscription.unsubscribe();
1051
- return state;
1103
+ return _objectSpread2(_objectSpread2({}, state), {}, {
1104
+ status: 'canceled',
1105
+ input: undefined,
1106
+ subscription: undefined
1107
+ });
1052
1108
  default:
1053
1109
  return state;
1054
1110
  }
@@ -1056,7 +1112,6 @@ function fromEventObservable(lazyObservable) {
1056
1112
  getInitialState: function getInitialState() {
1057
1113
  return {
1058
1114
  subscription: undefined,
1059
- canceled: false,
1060
1115
  status: 'active',
1061
1116
  data: undefined
1062
1117
  };
@@ -1093,12 +1148,10 @@ function fromEventObservable(lazyObservable) {
1093
1148
  return undefined;
1094
1149
  },
1095
1150
  getPersistedState: function getPersistedState(_ref5) {
1096
- var canceled = _ref5.canceled,
1097
- status = _ref5.status,
1151
+ var status = _ref5.status,
1098
1152
  data = _ref5.data,
1099
1153
  input = _ref5.input;
1100
1154
  return {
1101
- canceled: canceled,
1102
1155
  status: status,
1103
1156
  data: data,
1104
1157
  input: input
@@ -1132,7 +1185,7 @@ function fromCallback(invokeCallback) {
1132
1185
  var sender = function sender(eventForParent) {
1133
1186
  var _self$_parent;
1134
1187
  if (state.canceled) {
1135
- return state;
1188
+ return;
1136
1189
  }
1137
1190
  (_self$_parent = self._parent) === null || _self$_parent === void 0 ? void 0 : _self$_parent.send(toSCXMLEvent(eventForParent, {
1138
1191
  origin: self
@@ -1153,7 +1206,7 @@ function fromCallback(invokeCallback) {
1153
1206
  state.canceled = true;
1154
1207
  }, function (errorData) {
1155
1208
  var _self$_parent3;
1156
- var errorEvent = error$1(id, errorData);
1209
+ var errorEvent = error(id, errorData);
1157
1210
  (_self$_parent3 = self._parent) === null || _self$_parent3 === void 0 ? void 0 : _self$_parent3.send(toSCXMLEvent(errorEvent, {
1158
1211
  origin: self
1159
1212
  }));
@@ -1247,6 +1300,12 @@ function toActorRef(actorRefLike) {
1247
1300
  return void 0;
1248
1301
  }), _objectSpread2$1), actorRefLike);
1249
1302
  }
1303
+ var emptyBehavior = fromTransition(function (_) {
1304
+ return undefined;
1305
+ }, undefined);
1306
+ function createEmptyActor() {
1307
+ return interpret(emptyBehavior);
1308
+ }
1250
1309
 
1251
1310
  function createSystem() {
1252
1311
  var sessionIdCounter = 0;
@@ -1284,6 +1343,7 @@ function createSystem() {
1284
1343
  return system;
1285
1344
  }
1286
1345
 
1346
+ exports.ActorStatus = void 0;
1287
1347
  (function (ActorStatus) {
1288
1348
  ActorStatus[ActorStatus["NotStarted"] = 0] = "NotStarted";
1289
1349
  ActorStatus[ActorStatus["Running"] = 1] = "Running";
@@ -1439,9 +1499,9 @@ var Interpreter = /*#__PURE__*/function () {
1439
1499
  _step;
1440
1500
  try {
1441
1501
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
1442
- var _observer2$next;
1443
- var _observer2 = _step.value;
1444
- (_observer2$next = _observer2.next) === null || _observer2$next === void 0 ? void 0 : _observer2$next.call(_observer2, snapshot);
1502
+ var _observer$next;
1503
+ var _observer = _step.value;
1504
+ (_observer$next = _observer.next) === null || _observer$next === void 0 ? void 0 : _observer$next.call(_observer, snapshot);
1445
1505
  }
1446
1506
  } catch (err) {
1447
1507
  _iterator.e(err);
@@ -1451,30 +1511,20 @@ var Interpreter = /*#__PURE__*/function () {
1451
1511
  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);
1452
1512
  switch (status === null || status === void 0 ? void 0 : status.status) {
1453
1513
  case 'done':
1514
+ this._stopProcedure();
1454
1515
  this._doneEvent = doneInvoke(this.id, status.data);
1455
1516
  (_this$_parent = this._parent) === null || _this$_parent === void 0 ? void 0 : _this$_parent.send(toSCXMLEvent(this._doneEvent, {
1456
1517
  origin: this,
1457
1518
  invokeid: this.id
1458
1519
  }));
1459
- this._stopProcedure();
1520
+ this._complete();
1460
1521
  break;
1461
1522
  case 'error':
1462
- (_this$_parent2 = this._parent) === null || _this$_parent2 === void 0 ? void 0 : _this$_parent2.send(toSCXMLEvent(error$1(this.id, status.data), {
1523
+ this._stopProcedure();
1524
+ (_this$_parent2 = this._parent) === null || _this$_parent2 === void 0 ? void 0 : _this$_parent2.send(toSCXMLEvent(error(this.id, status.data), {
1463
1525
  origin: this
1464
1526
  }));
1465
- var _iterator2 = _createForOfIteratorHelper(this.observers),
1466
- _step2;
1467
- try {
1468
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
1469
- var _observer$error;
1470
- var _observer = _step2.value;
1471
- (_observer$error = _observer.error) === null || _observer$error === void 0 ? void 0 : _observer$error.call(_observer, status.data);
1472
- }
1473
- } catch (err) {
1474
- _iterator2.e(err);
1475
- } finally {
1476
- _iterator2.f();
1477
- }
1527
+ this._error(status.data);
1478
1528
  break;
1479
1529
  }
1480
1530
  }
@@ -1555,13 +1605,14 @@ var Interpreter = /*#__PURE__*/function () {
1555
1605
  this.update(nextState);
1556
1606
  if (event.name === stopSignalType) {
1557
1607
  this._stopProcedure();
1608
+ this._complete();
1558
1609
  }
1559
1610
  } catch (err) {
1560
1611
  // TODO: properly handle errors
1561
1612
  if (this.observers.size > 0) {
1562
1613
  this.observers.forEach(function (observer) {
1563
- var _observer$error2;
1564
- (_observer$error2 = observer.error) === null || _observer$error2 === void 0 ? void 0 : _observer$error2.call(observer, err);
1614
+ var _observer$error;
1615
+ (_observer$error = observer.error) === null || _observer$error === void 0 ? void 0 : _observer$error.call(observer, err);
1565
1616
  });
1566
1617
  this.stop();
1567
1618
  } else {
@@ -1600,13 +1651,31 @@ var Interpreter = /*#__PURE__*/function () {
1600
1651
  }, {
1601
1652
  key: "_complete",
1602
1653
  value: function _complete() {
1654
+ var _iterator2 = _createForOfIteratorHelper(this.observers),
1655
+ _step2;
1656
+ try {
1657
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
1658
+ var _observer2$complete;
1659
+ var _observer2 = _step2.value;
1660
+ (_observer2$complete = _observer2.complete) === null || _observer2$complete === void 0 ? void 0 : _observer2$complete.call(_observer2);
1661
+ }
1662
+ } catch (err) {
1663
+ _iterator2.e(err);
1664
+ } finally {
1665
+ _iterator2.f();
1666
+ }
1667
+ this.observers.clear();
1668
+ }
1669
+ }, {
1670
+ key: "_error",
1671
+ value: function _error(data) {
1603
1672
  var _iterator3 = _createForOfIteratorHelper(this.observers),
1604
1673
  _step3;
1605
1674
  try {
1606
1675
  for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
1607
- var _observer3$complete;
1676
+ var _observer3$error;
1608
1677
  var _observer3 = _step3.value;
1609
- (_observer3$complete = _observer3.complete) === null || _observer3$complete === void 0 ? void 0 : _observer3$complete.call(_observer3);
1678
+ (_observer3$error = _observer3.error) === null || _observer3$error === void 0 ? void 0 : _observer3$error.call(_observer3, data);
1610
1679
  }
1611
1680
  } catch (err) {
1612
1681
  _iterator3.e(err);
@@ -1618,7 +1687,6 @@ var Interpreter = /*#__PURE__*/function () {
1618
1687
  }, {
1619
1688
  key: "_stopProcedure",
1620
1689
  value: function _stopProcedure() {
1621
- this._complete();
1622
1690
  if (this.status !== exports.ActorStatus.Running) {
1623
1691
  // Interpreter already stopped; do nothing
1624
1692
  return this;
@@ -1650,6 +1718,9 @@ var Interpreter = /*#__PURE__*/function () {
1650
1718
  }, {
1651
1719
  key: "send",
1652
1720
  value: function send(event) {
1721
+ if (typeof event === 'string') {
1722
+ throw new Error("Only event objects may be sent to actors; use .send({ type: \"".concat(event, "\" }) instead"));
1723
+ }
1653
1724
  var _event = toSCXMLEvent(event);
1654
1725
  if (this.status === exports.ActorStatus.Stopped) {
1655
1726
  // do nothing
@@ -1742,10 +1813,10 @@ function interpret(behavior, options) {
1742
1813
  * @param actorRef The actor to stop.
1743
1814
  */
1744
1815
 
1745
- function stop$1(actorRef) {
1816
+ function stop(actorRef) {
1746
1817
  var actor = actorRef;
1747
1818
  return createDynamicAction({
1748
- type: stop,
1819
+ type: stop$1,
1749
1820
  params: {
1750
1821
  actor: actor
1751
1822
  }
@@ -1795,11 +1866,11 @@ var defaultLogExpr = function defaultLogExpr(_ref) {
1795
1866
  * @param label The label to give to the logged expression.
1796
1867
  */
1797
1868
 
1798
- function log$1() {
1869
+ function log() {
1799
1870
  var expr = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultLogExpr;
1800
1871
  var label = arguments.length > 1 ? arguments[1] : undefined;
1801
1872
  return createDynamicAction({
1802
- type: log,
1873
+ type: log$1,
1803
1874
  params: {
1804
1875
  label: label,
1805
1876
  expr: expr
@@ -1842,9 +1913,9 @@ function log$1() {
1842
1913
  * @param sendId The `id` of the `send(...)` action to cancel.
1843
1914
  */
1844
1915
 
1845
- function cancel$1(sendId) {
1916
+ function cancel(sendId) {
1846
1917
  return createDynamicAction({
1847
- type: cancel,
1918
+ type: cancel$1,
1848
1919
  params: {
1849
1920
  sendId: sendId
1850
1921
  }
@@ -2255,13 +2326,13 @@ function getDelayedTransitions(stateNode) {
2255
2326
  }
2256
2327
  var mutateEntryExit = function mutateEntryExit(delay, i) {
2257
2328
  var delayRef = isFunction(delay) ? "".concat(stateNode.id, ":delay[").concat(i, "]") : delay;
2258
- var eventType = after$1(delayRef, stateNode.id);
2259
- stateNode.entry.push(send$1({
2329
+ var eventType = after(delayRef, stateNode.id);
2330
+ stateNode.entry.push(raise({
2260
2331
  type: eventType
2261
2332
  }, {
2262
2333
  delay: delay
2263
2334
  }));
2264
- stateNode.exit.push(cancel$1(eventType));
2335
+ stateNode.exit.push(cancel(eventType));
2265
2336
  return eventType;
2266
2337
  };
2267
2338
  var delayedTransitions = isArray(afterConfig) ? afterConfig.map(function (transition, i) {
@@ -2912,12 +2983,12 @@ function setChildren(currentState, nonRaisedActions) {
2912
2983
  try {
2913
2984
  for (_iterator21.s(); !(_step21 = _iterator21.n()).done;) {
2914
2985
  var action = _step21.value;
2915
- if (action.type === invoke && action.params.ref) {
2986
+ if (action.type === invoke$1 && action.params.ref) {
2916
2987
  var ref = action.params.ref;
2917
2988
  if (ref) {
2918
2989
  children[ref.id] = ref;
2919
2990
  }
2920
- } else if (action.type === stop) {
2991
+ } else if (action.type === stop$1) {
2921
2992
  var _ref = action.params.actor;
2922
2993
  if (_ref) {
2923
2994
  delete children[_ref.id];
@@ -3016,7 +3087,7 @@ function enterStates(filteredTransitions, mutConfiguration, actions, internalQue
3016
3087
  try {
3017
3088
  for (_iterator23.s(); !(_step23 = _iterator23.n()).done;) {
3018
3089
  var invokeDef = _step23.value;
3019
- actions.push(invoke$1(invokeDef));
3090
+ actions.push(invoke(invokeDef));
3020
3091
  }
3021
3092
 
3022
3093
  // Add entry actions
@@ -3326,7 +3397,7 @@ function exitStates(transitions, mutConfiguration, historyValue, actions) {
3326
3397
  for (_iterator40.s(); !(_step40 = _iterator40.n()).done;) {
3327
3398
  var s = _step40.value;
3328
3399
  actions.push.apply(actions, _toConsumableArray(s.exit.flat()).concat(_toConsumableArray(s.invoke.map(function (def) {
3329
- return stop$1(def.id);
3400
+ return stop(def.id);
3330
3401
  }))));
3331
3402
  mutConfiguration["delete"](s);
3332
3403
  }
@@ -3364,12 +3435,12 @@ function resolveActionsAndContext(actions, scxmlEvent, currentState, actorCtx) {
3364
3435
  resolvedAction = _executableActionObje2[1];
3365
3436
  var matchedActions = (_resolvedAction$param = resolvedAction.params) === null || _resolvedAction$param === void 0 ? void 0 : _resolvedAction$param.actions;
3366
3437
  intermediateState = nextState;
3367
- if ((resolvedAction.type === raise || resolvedAction.type === send && resolvedAction.params.internal) && typeof resolvedAction.params.delay !== 'number') {
3438
+ if ((resolvedAction.type === raise$1 || resolvedAction.type === send$1 && resolvedAction.params.internal) && typeof resolvedAction.params.delay !== 'number') {
3368
3439
  raiseActions.push(resolvedAction);
3369
3440
  }
3370
3441
 
3371
3442
  // TODO: remove the check; just handleAction
3372
- if (resolvedAction.type !== pure) {
3443
+ if (resolvedAction.type !== pure$1) {
3373
3444
  handleAction(resolvedAction);
3374
3445
  }
3375
3446
  toActionObjects(matchedActions).forEach(resolveAction);
@@ -3483,7 +3554,7 @@ function stopStep(scxmlEvent, nextState, actorCtx) {
3483
3554
  }
3484
3555
  for (var _i4 = 0, _Object$values = Object.values(nextState.children); _i4 < _Object$values.length; _i4++) {
3485
3556
  var child = _Object$values[_i4];
3486
- actions.push(stop$1(child));
3557
+ actions.push(stop(child));
3487
3558
  }
3488
3559
  var _resolveActionsAndCon2 = resolveActionsAndContext(actions, scxmlEvent, nextState, actorCtx),
3489
3560
  stoppedState = _resolveActionsAndCon2.nextState;
@@ -3656,11 +3727,11 @@ var State = /*#__PURE__*/function () {
3656
3727
  }, {
3657
3728
  key: "toJSON",
3658
3729
  value: function toJSON() {
3659
- var configuration = this.configuration,
3660
- transitions = this.transitions,
3661
- tags = this.tags,
3662
- machine = this.machine,
3663
- jsonValues = _objectWithoutProperties(this, _excluded);
3730
+ this.configuration;
3731
+ this.transitions;
3732
+ var tags = this.tags;
3733
+ this.machine;
3734
+ var jsonValues = _objectWithoutProperties(this, _excluded);
3664
3735
  return _objectSpread2(_objectSpread2({}, jsonValues), {}, {
3665
3736
  tags: Array.from(tags),
3666
3737
  meta: this.meta
@@ -3811,11 +3882,11 @@ function cloneState(state) {
3811
3882
  return new State(_objectSpread2(_objectSpread2({}, state), config), state.machine);
3812
3883
  }
3813
3884
  function getPersistedState(state) {
3814
- var configuration = state.configuration,
3815
- transitions = state.transitions,
3816
- tags = state.tags,
3817
- machine = state.machine,
3818
- children = state.children,
3885
+ state.configuration;
3886
+ state.transitions;
3887
+ state.tags;
3888
+ state.machine;
3889
+ var children = state.children,
3819
3890
  jsonValues = _objectWithoutProperties(state, _excluded2);
3820
3891
  var childrenJson = {};
3821
3892
  for (var id in children) {
@@ -3830,14 +3901,14 @@ function getPersistedState(state) {
3830
3901
  });
3831
3902
  }
3832
3903
 
3833
- function invoke$1(invokeDef) {
3904
+ function invoke(invokeDef) {
3834
3905
  return createDynamicAction({
3835
- type: invoke,
3906
+ type: invoke$1,
3836
3907
  params: invokeDef
3837
3908
  }, function (_event, _ref) {
3838
3909
  var state = _ref.state,
3839
3910
  actorContext = _ref.actorContext;
3840
- var type = invoke;
3911
+ var type = invoke$1;
3841
3912
  var id = invokeDef.id,
3842
3913
  src = invokeDef.src;
3843
3914
  var resolvedInvokeAction;
@@ -3899,7 +3970,7 @@ function invoke$1(invokeDef) {
3899
3970
  var _actorRef$start;
3900
3971
  (_actorRef$start = actorRef.start) === null || _actorRef$start === void 0 ? void 0 : _actorRef$start.call(actorRef);
3901
3972
  } catch (err) {
3902
- parent.send(error$1(id, err));
3973
+ parent.send(error(id, err));
3903
3974
  return;
3904
3975
  }
3905
3976
  });
@@ -3928,7 +3999,7 @@ function createSpawner(self, machine, context, _event, mutCapturedActions) {
3928
3999
  self: self
3929
4000
  }) : input
3930
4001
  });
3931
- mutCapturedActions.push(invoke$1({
4002
+ mutCapturedActions.push(invoke({
3932
4003
  id: actorRef.id,
3933
4004
  // @ts-ignore TODO: fix types
3934
4005
  src: actorRef,
@@ -3949,7 +4020,7 @@ function createSpawner(self, machine, context, _event, mutCapturedActions) {
3949
4020
  parent: self,
3950
4021
  input: options.input
3951
4022
  });
3952
- mutCapturedActions.push(invoke$1({
4023
+ mutCapturedActions.push(invoke({
3953
4024
  // @ts-ignore TODO: fix types
3954
4025
  src: _actorRef,
3955
4026
  ref: _actorRef,
@@ -3967,9 +4038,9 @@ function createSpawner(self, machine, context, _event, mutCapturedActions) {
3967
4038
  *
3968
4039
  * @param assignment An object that represents the partial context to update.
3969
4040
  */
3970
- function assign$1(assignment) {
4041
+ function assign(assignment) {
3971
4042
  return createDynamicAction({
3972
- type: assign,
4043
+ type: assign$1,
3973
4044
  params: {
3974
4045
  assignment: assignment
3975
4046
  }
@@ -4005,7 +4076,7 @@ function assign$1(assignment) {
4005
4076
  return [cloneState(state, {
4006
4077
  context: updatedContext
4007
4078
  }), {
4008
- type: assign,
4079
+ type: assign$1,
4009
4080
  params: {
4010
4081
  context: updatedContext,
4011
4082
  actions: capturedActions
@@ -4021,9 +4092,9 @@ function assign$1(assignment) {
4021
4092
  * @param eventType The event to raise.
4022
4093
  */
4023
4094
 
4024
- function raise$1(eventOrExpr, options) {
4095
+ function raise(eventOrExpr, options) {
4025
4096
  return createDynamicAction({
4026
- type: raise,
4097
+ type: raise$1,
4027
4098
  params: {
4028
4099
  delay: options ? options.delay : undefined,
4029
4100
  event: eventOrExpr,
@@ -4048,6 +4119,9 @@ function raise$1(eventOrExpr, options) {
4048
4119
  var delaysMap = state.machine.options.delays;
4049
4120
 
4050
4121
  // TODO: helper function for resolving Expr
4122
+ if (typeof eventOrExpr === 'string') {
4123
+ throw new Error("Only event objects may be used with raise; use raise({ type: \"".concat(eventOrExpr, "\" }) instead"));
4124
+ }
4051
4125
  var resolvedEvent = toSCXMLEvent(typeof eventOrExpr === 'function' ? eventOrExpr(args) : eventOrExpr);
4052
4126
  var resolvedDelay;
4053
4127
  if (typeof params.delay === 'string') {
@@ -4057,7 +4131,7 @@ function raise$1(eventOrExpr, options) {
4057
4131
  resolvedDelay = typeof params.delay === 'function' ? params.delay(args) : params.delay;
4058
4132
  }
4059
4133
  var resolvedAction = {
4060
- type: raise,
4134
+ type: raise$1,
4061
4135
  params: _objectSpread2(_objectSpread2({}, params), {}, {
4062
4136
  _event: resolvedEvent,
4063
4137
  event: resolvedEvent.data,
@@ -4074,9 +4148,9 @@ function raise$1(eventOrExpr, options) {
4074
4148
  });
4075
4149
  }
4076
4150
 
4077
- function choose$1(guards) {
4151
+ function choose(guards) {
4078
4152
  return createDynamicAction({
4079
- type: choose,
4153
+ type: choose$1,
4080
4154
  params: {
4081
4155
  guards: guards
4082
4156
  }
@@ -4090,7 +4164,7 @@ function choose$1(guards) {
4090
4164
  return !guard || evaluateGuard(guard, state.context, _event, state);
4091
4165
  })) === null || _guards$find === void 0 ? void 0 : _guards$find.actions;
4092
4166
  return [state, {
4093
- type: choose,
4167
+ type: choose$1,
4094
4168
  params: {
4095
4169
  actions: toActionObjects(matchedActions)
4096
4170
  }
@@ -4098,6 +4172,27 @@ function choose$1(guards) {
4098
4172
  });
4099
4173
  }
4100
4174
 
4175
+ function pure(getActions) {
4176
+ return createDynamicAction({
4177
+ type: pure$1,
4178
+ params: {
4179
+ get: getActions
4180
+ }
4181
+ }, function (_event, _ref) {
4182
+ var _toArray;
4183
+ var state = _ref.state;
4184
+ return [state, {
4185
+ type: pure$1,
4186
+ params: {
4187
+ actions: (_toArray = toArray(toActionObjects(getActions({
4188
+ context: state.context,
4189
+ event: _event.data
4190
+ })))) !== null && _toArray !== void 0 ? _toArray : []
4191
+ }
4192
+ }];
4193
+ });
4194
+ }
4195
+
4101
4196
  var initEvent = toSCXMLEvent({
4102
4197
  type: init
4103
4198
  });
@@ -4119,9 +4214,9 @@ function resolveActionObject(actionObject, actionFunctionMap) {
4119
4214
  execute: function execute(actorCtx) {
4120
4215
  return dereferencedAction({
4121
4216
  context: state.context,
4122
- event: state.event,
4217
+ event: _event.data,
4123
4218
  action: a,
4124
- _event: state._event,
4219
+ _event: _event,
4125
4220
  system: actorCtx.system,
4126
4221
  self: actorCtx.self
4127
4222
  });
@@ -4190,7 +4285,7 @@ var toActionObjects = function toActionObjects(action) {
4190
4285
  * @param delayRef The delay in milliseconds
4191
4286
  * @param id The state node ID where this event is handled
4192
4287
  */
4193
- function after$1(delayRef, id) {
4288
+ function after(delayRef, id) {
4194
4289
  var idSuffix = id ? "#".concat(id) : '';
4195
4290
  return "".concat(exports.ActionTypes.After, "(").concat(delayRef, ")").concat(idSuffix);
4196
4291
  }
@@ -4234,7 +4329,7 @@ function doneInvoke(invokeId, output) {
4234
4329
  };
4235
4330
  return eventObject;
4236
4331
  }
4237
- function error$1(id, data) {
4332
+ function error(id, data) {
4238
4333
  var type = "".concat(exports.ActionTypes.ErrorPlatform, ".").concat(id);
4239
4334
  var eventObject = {
4240
4335
  type: type,
@@ -4265,18 +4360,18 @@ exports._objectWithoutProperties = _objectWithoutProperties;
4265
4360
  exports._slicedToArray = _slicedToArray;
4266
4361
  exports._toConsumableArray = _toConsumableArray;
4267
4362
  exports.actionTypes = actionTypes;
4268
- exports.after = after$1;
4363
+ exports.after = after;
4269
4364
  exports.and = and;
4270
- exports.assign = assign$1;
4271
- exports.cancel = cancel$1;
4272
- exports.choose = choose$1;
4273
- exports.createDynamicAction = createDynamicAction;
4365
+ exports.assign = assign;
4366
+ exports.cancel = cancel;
4367
+ exports.choose = choose;
4368
+ exports.createEmptyActor = createEmptyActor;
4274
4369
  exports.createInitEvent = createInitEvent;
4275
4370
  exports.createInvokeId = createInvokeId;
4276
4371
  exports.createSpawner = createSpawner;
4277
4372
  exports.done = done;
4278
4373
  exports.doneInvoke = doneInvoke;
4279
- exports.error = error$1;
4374
+ exports.error = error;
4280
4375
  exports.escalate = escalate;
4281
4376
  exports.evaluateGuard = evaluateGuard;
4282
4377
  exports.flatten = flatten;
@@ -4298,14 +4393,14 @@ exports.getStateNodeByPath = getStateNodeByPath;
4298
4393
  exports.getStateNodes = getStateNodes;
4299
4394
  exports.initEvent = initEvent;
4300
4395
  exports.interpret = interpret;
4301
- exports.invoke = invoke;
4396
+ exports.invoke = invoke$1;
4302
4397
  exports.isActorRef = isActorRef;
4303
4398
  exports.isInFinalState = isInFinalState;
4304
4399
  exports.isSCXMLErrorEvent = isSCXMLErrorEvent;
4305
4400
  exports.isSignal = isSignal;
4306
4401
  exports.isStateId = isStateId;
4307
4402
  exports.isString = isString;
4308
- exports.log = log$1;
4403
+ exports.log = log;
4309
4404
  exports.macrostep = macrostep;
4310
4405
  exports.mapValues = mapValues;
4311
4406
  exports.matchesState = matchesState;
@@ -4315,19 +4410,19 @@ exports.not = not;
4315
4410
  exports.or = or;
4316
4411
  exports.pathToStateValue = pathToStateValue;
4317
4412
  exports.pure = pure;
4318
- exports.raise = raise$1;
4413
+ exports.raise = raise;
4319
4414
  exports.resolveActionObject = resolveActionObject;
4320
4415
  exports.resolveActionsAndContext = resolveActionsAndContext;
4321
4416
  exports.resolveReferencedActor = resolveReferencedActor;
4322
4417
  exports.resolveStateValue = resolveStateValue;
4323
4418
  exports.respond = respond;
4324
- exports.send = send$1;
4419
+ exports.send = send;
4325
4420
  exports.sendParent = sendParent;
4326
4421
  exports.sendTo = sendTo;
4327
4422
  exports.startSignal = startSignal;
4328
4423
  exports.startSignalType = startSignalType;
4329
4424
  exports.stateIn = stateIn;
4330
- exports.stop = stop$1;
4425
+ exports.stop = stop;
4331
4426
  exports.stopSignal = stopSignal;
4332
4427
  exports.stopSignalType = stopSignalType;
4333
4428
  exports.toActionObject = toActionObject;