xstate 4.31.0 → 4.33.0

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/lib/actions.js CHANGED
@@ -378,6 +378,26 @@ function pure(getActions) {
378
378
  */
379
379
 
380
380
  function forwardTo(target, options) {
381
+ if (!environment.IS_PRODUCTION && (!target || typeof target === 'function')) {
382
+ var originalTarget_1 = target;
383
+
384
+ target = function () {
385
+ var args = [];
386
+
387
+ for (var _i = 0; _i < arguments.length; _i++) {
388
+ args[_i] = arguments[_i];
389
+ }
390
+
391
+ var resolvedTarget = typeof originalTarget_1 === 'function' ? originalTarget_1.apply(void 0, _tslib.__spreadArray([], _tslib.__read(args), false)) : originalTarget_1;
392
+
393
+ if (!resolvedTarget) {
394
+ throw new Error("Attempted to forward event to undefined actor. This risks an infinite loop in the sender.");
395
+ }
396
+
397
+ return resolvedTarget;
398
+ };
399
+ }
400
+
381
401
  return send(function (_, event) {
382
402
  return event;
383
403
  }, _tslib.__assign(_tslib.__assign({}, options), {
@@ -408,7 +428,7 @@ function choose(conds) {
408
428
  conds: conds
409
429
  };
410
430
  }
411
- function resolveActions(machine, currentState, currentContext, _event, actions, preserveActionOrder) {
431
+ function resolveActions(machine, currentState, currentContext, _event, actions, predictableExec, preserveActionOrder) {
412
432
  if (preserveActionOrder === void 0) {
413
433
  preserveActionOrder = false;
414
434
  }
@@ -426,7 +446,9 @@ function resolveActions(machine, currentState, currentContext, _event, actions,
426
446
 
427
447
  switch (actionObject.type) {
428
448
  case actionTypes.raise:
429
- return resolveRaise(actionObject);
449
+ {
450
+ return resolveRaise(actionObject);
451
+ }
430
452
 
431
453
  case actionTypes.send:
432
454
  var sendAction = resolveSend(actionObject, updatedContext, _event, machine.options.delays); // TODO: fix ActionTypes.Init
@@ -437,24 +459,32 @@ function resolveActions(machine, currentState, currentContext, _event, actions,
437
459
  "No delay reference for delay expression '".concat(actionObject.delay, "' was found on machine '").concat(machine.id, "'"));
438
460
  }
439
461
 
462
+ if (sendAction.to !== types.SpecialTargets.Internal) {
463
+ predictableExec === null || predictableExec === void 0 ? void 0 : predictableExec(sendAction, updatedContext, _event);
464
+ }
465
+
440
466
  return sendAction;
441
467
 
442
468
  case actionTypes.log:
443
- return resolveLog(actionObject, updatedContext, _event);
469
+ {
470
+ var resolved = resolveLog(actionObject, updatedContext, _event);
471
+ predictableExec === null || predictableExec === void 0 ? void 0 : predictableExec(resolved, updatedContext, _event);
472
+ return resolved;
473
+ }
444
474
 
445
475
  case actionTypes.choose:
446
476
  {
447
477
  var chooseAction = actionObject;
448
478
  var matchedActions = (_a = chooseAction.conds.find(function (condition) {
449
479
  var guard = utils.toGuard(condition.cond, machine.options.guards);
450
- return !guard || utils.evaluateGuard(machine, guard, updatedContext, _event, currentState);
480
+ return !guard || utils.evaluateGuard(machine, guard, updatedContext, _event, !predictableExec ? currentState : undefined);
451
481
  })) === null || _a === void 0 ? void 0 : _a.actions;
452
482
 
453
483
  if (!matchedActions) {
454
484
  return [];
455
485
  }
456
486
 
457
- var _b = _tslib.__read(resolveActions(machine, currentState, updatedContext, _event, toActionObjects(utils.toArray(matchedActions), machine.options.actions), preserveActionOrder), 2),
487
+ var _b = _tslib.__read(resolveActions(machine, currentState, updatedContext, _event, toActionObjects(utils.toArray(matchedActions), machine.options.actions), predictableExec, preserveActionOrder), 2),
458
488
  resolvedActionsFromChoose = _b[0],
459
489
  resolvedContextFromChoose = _b[1];
460
490
 
@@ -471,7 +501,7 @@ function resolveActions(machine, currentState, currentContext, _event, actions,
471
501
  return [];
472
502
  }
473
503
 
474
- var _c = _tslib.__read(resolveActions(machine, currentState, updatedContext, _event, toActionObjects(utils.toArray(matchedActions), machine.options.actions), preserveActionOrder), 2),
504
+ var _c = _tslib.__read(resolveActions(machine, currentState, updatedContext, _event, toActionObjects(utils.toArray(matchedActions), machine.options.actions), predictableExec, preserveActionOrder), 2),
475
505
  resolvedActionsFromPure = _c[0],
476
506
  resolvedContext = _c[1];
477
507
 
@@ -482,12 +512,14 @@ function resolveActions(machine, currentState, currentContext, _event, actions,
482
512
 
483
513
  case actionTypes.stop:
484
514
  {
485
- return resolveStop(actionObject, updatedContext, _event);
515
+ var resolved = resolveStop(actionObject, updatedContext, _event);
516
+ predictableExec === null || predictableExec === void 0 ? void 0 : predictableExec(resolved, updatedContext, _event);
517
+ return resolved;
486
518
  }
487
519
 
488
520
  case actionTypes.assign:
489
521
  {
490
- updatedContext = utils.updateContext(updatedContext, _event, [actionObject], currentState);
522
+ updatedContext = utils.updateContext(updatedContext, _event, [actionObject], !predictableExec ? currentState : undefined);
491
523
  preservedContexts === null || preservedContexts === void 0 ? void 0 : preservedContexts.push(updatedContext);
492
524
  break;
493
525
  }
@@ -496,7 +528,9 @@ function resolveActions(machine, currentState, currentContext, _event, actions,
496
528
  var resolvedActionObject = toActionObject(actionObject, machine.options.actions);
497
529
  var exec_1 = resolvedActionObject.exec;
498
530
 
499
- if (exec_1 && preservedContexts) {
531
+ if (predictableExec) {
532
+ predictableExec(resolvedActionObject, updatedContext, _event);
533
+ } else if (exec_1 && preservedContexts) {
500
534
  var contextIndex_1 = preservedContexts.length - 1;
501
535
  resolvedActionObject = _tslib.__assign(_tslib.__assign({}, resolvedActionObject), {
502
536
  exec: function (_ctx) {
@@ -93,7 +93,7 @@ export declare class Interpreter<TContext, TStateSchema extends StateSchema = an
93
93
  execute(state: State<TContext, TEvent, TStateSchema, TTypestate, TResolvedTypesMeta>, actionsConfig?: MachineOptions<TContext, TEvent>['actions']): void;
94
94
  private update;
95
95
  onTransition(listener: StateListener<TContext, TEvent, TStateSchema, TTypestate, TResolvedTypesMeta>): this;
96
- subscribe(observer: Observer<State<TContext, TEvent, any, TTypestate, TResolvedTypesMeta>>): Subscription;
96
+ subscribe(observer: Partial<Observer<State<TContext, TEvent, any, TTypestate, TResolvedTypesMeta>>>): Subscription;
97
97
  subscribe(nextListener?: (state: State<TContext, TEvent, any, TTypestate, TResolvedTypesMeta>) => void, errorListener?: (error: any) => void, completeListener?: () => void): Subscription;
98
98
  /**
99
99
  * Adds an event listener that is notified whenever an event is sent to the running interpreter.
@@ -134,6 +134,7 @@ export declare class Interpreter<TContext, TStateSchema extends StateSchema = an
134
134
  * @param initialState The state to start the statechart from
135
135
  */
136
136
  start(initialState?: State<TContext, TEvent, TStateSchema, TTypestate, TResolvedTypesMeta> | StateConfig<TContext, TEvent> | StateValue): this;
137
+ private _stop;
137
138
  /**
138
139
  * Stops the interpreter and unsubscribe all listeners.
139
140
  *
@@ -158,6 +159,7 @@ export declare class Interpreter<TContext, TStateSchema extends StateSchema = an
158
159
  */
159
160
  sender(event: Event<TEvent>): () => State<TContext, TEvent, TStateSchema, TTypestate>;
160
161
  private sendTo;
162
+ private _nextState;
161
163
  /**
162
164
  * Returns the next state given the interpreter's current state and the event.
163
165
  *
@@ -169,6 +171,7 @@ export declare class Interpreter<TContext, TStateSchema extends StateSchema = an
169
171
  private forward;
170
172
  private defer;
171
173
  private cancel;
174
+ private _exec;
172
175
  private exec;
173
176
  private removeChild;
174
177
  private stopChild;