xstate 4.35.4 → 4.36.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/es/interpreter.js CHANGED
@@ -1,10 +1,10 @@
1
1
  import { __values, __spreadArray, __read, __assign } from './_virtual/_tslib.js';
2
2
  import { SpecialTargets, ActionTypes } from './types.js';
3
3
  import { isStateConfig, State, bindActionToState } from './State.js';
4
- import { raise, send, errorPlatform, update, error as error$1, log, stop, start, cancel } from './actionTypes.js';
4
+ import { errorPlatform, update, error as error$1, log, stop, start, cancel, send, raise } from './actionTypes.js';
5
5
  import { initEvent, doneInvoke, toActionObjects, resolveActions, error, getActionFunction } from './actions.js';
6
6
  import { IS_PRODUCTION } from './environment.js';
7
- import { warn, mapContext, toObserver, isFunction, toSCXMLEvent, flatten, isPromiseLike, isObservable, isMachine, isBehavior, reportUnhandledExceptionOnInvocation, symbolObservable, isArray, toEventObject, isString, isActor, toInvokeSource, uniqueId } from './utils.js';
7
+ import { warn, mapContext, toObserver, isFunction, toSCXMLEvent, flatten, isRaisableAction, isPromiseLike, isObservable, isMachine, isBehavior, reportUnhandledExceptionOnInvocation, symbolObservable, isArray, toEventObject, isString, isActor, toInvokeSource, uniqueId } from './utils.js';
8
8
  import { Scheduler } from './scheduler.js';
9
9
  import { createDeferredActor, isSpawnedActor } from './Actor.js';
10
10
  import { registry } from './registry.js';
@@ -112,7 +112,7 @@ function () {
112
112
 
113
113
  this.sendTo = function (event, to, immediate) {
114
114
  var isParent = _this.parent && (to === SpecialTargets.Parent || _this.parent.id === to);
115
- var target = isParent ? _this.parent : isString(to) ? _this.children.get(to) || registry.get(to) : isActor(to) ? to : undefined;
115
+ var target = isParent ? _this.parent : isString(to) ? to === SpecialTargets.Internal ? _this : _this.children.get(to) || registry.get(to) : isActor(to) ? to : undefined;
116
116
 
117
117
  if (!target) {
118
118
  if (!isParent) {
@@ -185,6 +185,16 @@ function () {
185
185
  }
186
186
 
187
187
  switch (action.type) {
188
+ case raise:
189
+ {
190
+ // if raise action reached the interpreter then it's a delayed one
191
+ var sendAction_1 = action;
192
+
193
+ _this.defer(sendAction_1);
194
+
195
+ break;
196
+ }
197
+
188
198
  case send:
189
199
  var sendAction = action;
190
200
 
@@ -288,8 +298,9 @@ function () {
288
298
  }
289
299
 
290
300
  case log:
291
- var label = action.label,
292
- value = action.value;
301
+ var _a = action,
302
+ label = _a.label,
303
+ value = _a.value;
293
304
 
294
305
  if (label) {
295
306
  _this.logger(label, value);
@@ -475,11 +486,12 @@ function () {
475
486
  return sn.type === 'final' && sn.parent === _this.machine;
476
487
  });
477
488
  var doneData = finalChildStateNode && finalChildStateNode.doneData ? mapContext(finalChildStateNode.doneData, state.context, _event) : undefined;
489
+ this._doneEvent = doneInvoke(this.id, doneData);
478
490
 
479
491
  try {
480
492
  for (var _l = __values(this.doneListeners), _m = _l.next(); !_m.done; _m = _l.next()) {
481
493
  var listener = _m.value;
482
- listener(doneInvoke(this.id, doneData));
494
+ listener(this._doneEvent);
483
495
  }
484
496
  } catch (e_5_1) {
485
497
  e_5 = {
@@ -601,7 +613,12 @@ function () {
601
613
 
602
614
 
603
615
  Interpreter.prototype.onDone = function (listener) {
604
- this.doneListeners.add(listener);
616
+ if (this.status === InterpreterStatus.Stopped && this._doneEvent) {
617
+ listener(this._doneEvent);
618
+ } else {
619
+ this.doneListeners.add(listener);
620
+ }
621
+
605
622
  return this;
606
623
  };
607
624
  /**
@@ -818,7 +835,7 @@ function () {
818
835
  historyValue: undefined,
819
836
  history: _this.state,
820
837
  actions: resolvedActions.filter(function (action) {
821
- return action.type !== raise && (action.type !== send || !!action.to && action.to !== SpecialTargets.Internal);
838
+ return !isRaisableAction(action);
822
839
  }),
823
840
  activities: {},
824
841
  events: [],
@@ -979,13 +996,17 @@ function () {
979
996
  Interpreter.prototype.defer = function (sendAction) {
980
997
  var _this = this;
981
998
 
982
- this.delayedEventsMap[sendAction.id] = this.clock.setTimeout(function () {
983
- if (sendAction.to) {
999
+ var timerId = this.clock.setTimeout(function () {
1000
+ if ('to' in sendAction && sendAction.to) {
984
1001
  _this.sendTo(sendAction._event, sendAction.to, true);
985
1002
  } else {
986
1003
  _this.send(sendAction._event);
987
1004
  }
988
1005
  }, sendAction.delay);
1006
+
1007
+ if (sendAction.id) {
1008
+ this.delayedEventsMap[sendAction.id] = timerId;
1009
+ }
989
1010
  };
990
1011
 
991
1012
  Interpreter.prototype.cancel = function (sendId) {
@@ -5,7 +5,7 @@ declare type SimplisticExtractEvent<TEvent extends EventObject, TEventType exten
5
5
  } ? TEvent : never;
6
6
  export interface Model<TContext, TEvent extends EventObject, TAction extends BaseActionObject = BaseActionObject, TModelCreators = void> {
7
7
  initialContext: TContext;
8
- assign: <TEventType extends TEvent['type'] = TEvent['type']>(assigner: Assigner<TContext, SimplisticExtractEvent<TEvent, TEventType>> | PropertyAssigner<TContext, SimplisticExtractEvent<TEvent, TEventType>>, eventType?: TEventType) => AssignAction<TContext, SimplisticExtractEvent<TEvent, TEventType>>;
8
+ assign: <TEventType extends TEvent['type'] = TEvent['type']>(assigner: Assigner<TContext, SimplisticExtractEvent<TEvent, TEventType>> | PropertyAssigner<TContext, SimplisticExtractEvent<TEvent, TEventType>>, eventType?: TEventType) => AssignAction<TContext, SimplisticExtractEvent<TEvent, TEventType>, TEvent>;
9
9
  events: Prop<TModelCreators, 'events'>;
10
10
  actions: Prop<TModelCreators, 'actions'>;
11
11
  reset: () => AssignAction<TContext, any>;
package/es/types.d.ts CHANGED
@@ -43,16 +43,20 @@ export interface BaseActionObject {
43
43
  */
44
44
  type: string;
45
45
  [other: string]: any;
46
+ [notAnArrayLike: number]: never;
46
47
  }
47
48
  /**
48
49
  * The full definition of an action, with a string `type` and an
49
50
  * `exec` implementation function.
50
51
  */
51
- export interface ActionObject<TContext, TEvent extends EventObject> extends BaseActionObject {
52
+ export interface ActionObject<TContext, TExpressionEvent extends EventObject, TEvent extends EventObject = TExpressionEvent, TAction extends BaseActionObject = BaseActionObject> {
53
+ type: string;
52
54
  /**
53
55
  * The implementation for executing the action.
54
56
  */
55
- exec?: ActionFunction<TContext, TEvent> | undefined;
57
+ exec?: ActionFunction<TContext, TExpressionEvent, BaseActionObject, TEvent> | undefined;
58
+ /** @deprecated an internal signature that doesn't exist at runtime. Its existence helps TS to choose a better code path in the inference algorithm */
59
+ (arg: TContext, ev: TExpressionEvent, meta: ActionMeta<TContext, TEvent, TAction>): void;
56
60
  }
57
61
  export declare type DefaultContext = Record<string, any> | undefined;
58
62
  export declare type EventData = Record<string, any> & {
@@ -71,14 +75,14 @@ export interface AssignMeta<TContext, TEvent extends EventObject> {
71
75
  action: AssignAction<TContext, TEvent>;
72
76
  _event: SCXML.Event<TEvent>;
73
77
  }
74
- export declare type ActionFunction<TContext, TEvent extends EventObject, TAction extends BaseActionObject = BaseActionObject> = {
75
- bivarianceHack(context: TContext, event: TEvent, meta: ActionMeta<TContext, TEvent, TAction>): void;
78
+ export declare type ActionFunction<TContext, TExpressionEvent extends EventObject, TAction extends BaseActionObject = BaseActionObject, TEvent extends EventObject = TExpressionEvent> = {
79
+ bivarianceHack(context: TContext, event: TExpressionEvent, meta: ActionMeta<TContext, TEvent, TAction>): void;
76
80
  }['bivarianceHack'];
77
81
  export interface ChooseCondition<TContext, TEvent extends EventObject> {
78
82
  cond?: Condition<TContext, TEvent>;
79
83
  actions: Actions<TContext, TEvent>;
80
84
  }
81
- export declare type Action<TContext, TEvent extends EventObject> = ActionType | ActionObject<TContext, TEvent> | ActionFunction<TContext, TEvent>;
85
+ export declare type Action<TContext, TExpressionEvent extends EventObject, TEvent extends EventObject = TExpressionEvent> = ActionType | BaseActionObject | ActionObject<TContext, TExpressionEvent, TEvent> | ActionFunction<TContext, TExpressionEvent, BaseActionObject, TEvent>;
82
86
  /**
83
87
  * Extracts action objects that have no extra properties.
84
88
  */
@@ -87,9 +91,9 @@ declare type SimpleActionsOf<T extends BaseActionObject> = ActionObject<any, any
87
91
  * Events that do not require payload
88
92
  */
89
93
  export declare type SimpleEventsOf<TEvent extends EventObject> = ExtractWithSimpleSupport<TEvent>;
90
- export declare type BaseAction<TContext, TEvent extends EventObject, TAction extends BaseActionObject> = SimpleActionsOf<TAction>['type'] | TAction | RaiseAction<any> | SendAction<TContext, TEvent, any> | AssignAction<TContext, TEvent> | LogAction<TContext, TEvent> | CancelAction | StopAction<TContext, TEvent> | ChooseAction<TContext, TEvent> | ActionFunction<TContext, TEvent>;
91
- export declare type BaseActions<TContext, TEvent extends EventObject, TAction extends BaseActionObject> = SingleOrArray<BaseAction<TContext, TEvent, TAction>>;
92
- export declare type Actions<TContext, TEvent extends EventObject> = SingleOrArray<Action<TContext, TEvent>>;
94
+ export declare type BaseAction<TContext, TExpressionEvent extends EventObject, TAction extends BaseActionObject, TEvent extends EventObject = TExpressionEvent> = SimpleActionsOf<TAction>['type'] | TAction | RaiseAction<TContext, TExpressionEvent, TEvent> | SendAction<TContext, TExpressionEvent, TEvent> | AssignAction<TContext, TExpressionEvent, TEvent> | LogAction<TContext, TExpressionEvent, TEvent> | CancelAction<TContext, TExpressionEvent, TEvent> | StopAction<TContext, TExpressionEvent, TEvent> | ChooseAction<TContext, TExpressionEvent, TEvent> | PureAction<TContext, TExpressionEvent, TEvent> | ActionFunction<TContext, TExpressionEvent, TAction, TEvent>;
95
+ export declare type BaseActions<TContext, TExpressionEvent extends EventObject, TEvent extends EventObject, TAction extends BaseActionObject> = SingleOrArray<BaseAction<TContext, TExpressionEvent, TAction, TEvent>>;
96
+ export declare type Actions<TContext, TExpressionEvent extends EventObject, TEvent extends EventObject = TExpressionEvent> = SingleOrArray<Action<TContext, TExpressionEvent, TEvent>>;
93
97
  export declare type StateKey = string | AnyState;
94
98
  export interface StateValueMap {
95
99
  [key: string]: StateValue;
@@ -121,9 +125,9 @@ export interface GuardMeta<TContext, TEvent extends EventObject> extends StateMe
121
125
  export declare type Condition<TContext, TEvent extends EventObject> = string | ConditionPredicate<TContext, TEvent> | Guard<TContext, TEvent>;
122
126
  export declare type TransitionTarget<TContext, TEvent extends EventObject> = SingleOrArray<string | StateNode<TContext, any, TEvent>>;
123
127
  export declare type TransitionTargets<TContext> = Array<string | StateNode<TContext, any>>;
124
- export interface TransitionConfig<TContext, TEvent extends EventObject> {
125
- cond?: Condition<TContext, TEvent>;
126
- actions?: Actions<TContext, TEvent>;
128
+ export interface TransitionConfig<TContext, TExpressionEvent extends EventObject, TEvent extends EventObject = TExpressionEvent> {
129
+ cond?: Condition<TContext, TExpressionEvent>;
130
+ actions?: BaseActions<TContext, TExpressionEvent, TEvent, BaseActionObject>;
127
131
  in?: StateValue;
128
132
  internal?: boolean;
129
133
  target?: TransitionTarget<TContext, TEvent> | undefined;
@@ -237,9 +241,9 @@ export declare type StatesDefinition<TContext, TStateSchema extends StateSchema,
237
241
  [K in keyof TStateSchema['states']]: StateNodeDefinition<TContext, TStateSchema['states'][K] & {}, TEvent>;
238
242
  };
239
243
  export declare type TransitionConfigTarget<TContext, TEvent extends EventObject> = string | undefined | StateNode<TContext, any, TEvent>;
240
- export declare type TransitionConfigOrTarget<TContext, TEvent extends EventObject> = SingleOrArray<TransitionConfigTarget<TContext, TEvent> | TransitionConfig<TContext, TEvent>>;
244
+ export declare type TransitionConfigOrTarget<TContext, TExpressionEvent extends EventObject, TEvent extends EventObject = TExpressionEvent> = SingleOrArray<TransitionConfigTarget<TContext, TEvent> | TransitionConfig<TContext, TExpressionEvent, TEvent>>;
241
245
  export declare type TransitionsConfigMap<TContext, TEvent extends EventObject> = {
242
- [K in TEvent['type'] | '' | '*']?: K extends '' | '*' ? TransitionConfigOrTarget<TContext, TEvent> : TransitionConfigOrTarget<TContext, ExtractEvent<TEvent, K>>;
246
+ [K in TEvent['type'] | '' | '*']?: K extends '' | '*' ? TransitionConfigOrTarget<TContext, TEvent> : TransitionConfigOrTarget<TContext, ExtractEvent<TEvent, K>, TEvent>;
243
247
  };
244
248
  declare type TransitionsConfigArray<TContext, TEvent extends EventObject> = Array<(TEvent extends EventObject ? TransitionConfig<TContext, TEvent> & {
245
249
  event: TEvent['type'];
@@ -346,7 +350,7 @@ export interface StateNodeConfig<TContext, TStateSchema extends StateSchema, TEv
346
350
  /**
347
351
  * The action(s) to be executed upon entering the state node.
348
352
  */
349
- entry?: BaseActions<TContext, TEvent, TAction>;
353
+ entry?: BaseActions<TContext, TEvent, TEvent, TAction>;
350
354
  /**
351
355
  * The action(s) to be executed upon exiting the state node.
352
356
  *
@@ -356,7 +360,7 @@ export interface StateNodeConfig<TContext, TStateSchema extends StateSchema, TEv
356
360
  /**
357
361
  * The action(s) to be executed upon exiting the state node.
358
362
  */
359
- exit?: BaseActions<TContext, TEvent, TAction>;
363
+ exit?: BaseActions<TContext, TEvent, TEvent, TAction>;
360
364
  /**
361
365
  * The potential transition(s) to be taken upon reaching a final child state node.
362
366
  *
@@ -488,7 +492,7 @@ export declare type DelayFunctionMap<TContext, TEvent extends EventObject> = Rec
488
492
  export declare type ServiceConfig<TContext, TEvent extends EventObject = AnyEventObject> = string | AnyStateMachine | InvokeCreator<TContext, TEvent>;
489
493
  export declare type DelayConfig<TContext, TEvent extends EventObject> = number | DelayExpr<TContext, TEvent>;
490
494
  declare type MachineOptionsActions<TContext, TResolvedTypesMeta, TEventsCausingActions = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'eventsCausingActions'>, TIndexedEvents = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedEvents'>, TIndexedActions = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedActions'>> = {
491
- [K in keyof TEventsCausingActions]?: ActionObject<TContext, Cast<Prop<TIndexedEvents, TEventsCausingActions[K]>, EventObject>> | ActionFunction<TContext, Cast<Prop<TIndexedEvents, TEventsCausingActions[K]>, EventObject>, Cast<Prop<TIndexedActions, K>, BaseActionObject>>;
495
+ [K in keyof TEventsCausingActions]?: ActionObject<TContext, Cast<Prop<TIndexedEvents, TEventsCausingActions[K]>, EventObject>, Cast<Prop<TIndexedEvents, keyof TIndexedEvents>, EventObject>, Cast<Prop<TIndexedActions, K>, BaseActionObject>> | ActionFunction<TContext, Cast<Prop<TIndexedEvents, TEventsCausingActions[K]>, EventObject>, Cast<Prop<TIndexedActions, K>, BaseActionObject>, Cast<Prop<TIndexedEvents, keyof TIndexedEvents>, EventObject>>;
492
496
  };
493
497
  declare type MachineOptionsDelays<TContext, TResolvedTypesMeta, TEventsCausingDelays = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'eventsCausingDelays'>, TIndexedEvents = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedEvents'>> = {
494
498
  [K in keyof TEventsCausingDelays]?: DelayConfig<TContext, Cast<Prop<TIndexedEvents, TEventsCausingDelays[K]>, EventObject>>;
@@ -644,13 +648,17 @@ export declare enum ActionTypes {
644
648
  Pure = "xstate.pure",
645
649
  Choose = "xstate.choose"
646
650
  }
647
- export interface RaiseAction<TEvent extends EventObject> {
651
+ export interface RaiseAction<TContext, TExpressionEvent extends EventObject, TEvent extends EventObject = TExpressionEvent> extends ActionObject<TContext, TExpressionEvent, TEvent> {
648
652
  type: ActionTypes.Raise;
649
- event: TEvent['type'];
653
+ event: TEvent | SendExpr<TContext, TExpressionEvent, TEvent>;
654
+ delay: number | string | undefined | DelayExpr<TContext, TExpressionEvent>;
655
+ id: string | number | undefined;
650
656
  }
651
- export interface RaiseActionObject<TEvent extends EventObject> {
657
+ export interface RaiseActionObject<TContext, TExpressionEvent extends EventObject, TEvent extends EventObject = TExpressionEvent> extends RaiseAction<TContext, TExpressionEvent, TEvent> {
652
658
  type: ActionTypes.Raise;
653
659
  _event: SCXML.Event<TEvent>;
660
+ delay: number | undefined;
661
+ id: string | number | undefined;
654
662
  }
655
663
  export interface DoneInvokeEvent<TData> extends EventObject {
656
664
  data: TData;
@@ -685,14 +693,16 @@ export interface InvokeActionObject<TContext, TEvent extends EventObject> extend
685
693
  }
686
694
  export declare type DelayExpr<TContext, TEvent extends EventObject> = ExprWithMeta<TContext, TEvent, number>;
687
695
  export declare type LogExpr<TContext, TEvent extends EventObject> = ExprWithMeta<TContext, TEvent, any>;
688
- export interface LogAction<TContext, TEvent extends EventObject> extends ActionObject<TContext, TEvent> {
696
+ export interface LogAction<TContext, TExpressionEvent extends EventObject, TEvent extends EventObject = TExpressionEvent> extends ActionObject<TContext, TExpressionEvent, TEvent> {
697
+ type: ActionTypes.Log;
689
698
  label: string | undefined;
690
- expr: string | LogExpr<TContext, TEvent>;
699
+ expr: string | LogExpr<TContext, TExpressionEvent>;
691
700
  }
692
701
  export interface LogActionObject<TContext, TEvent extends EventObject> extends LogAction<TContext, TEvent> {
693
702
  value: any;
694
703
  }
695
- export interface SendAction<TContext, TEvent extends EventObject, TSentEvent extends EventObject> extends ActionObject<TContext, TEvent> {
704
+ export interface SendAction<TContext, TEvent extends EventObject, TSentEvent extends EventObject> extends ActionObject<TContext, TEvent, TSentEvent> {
705
+ type: ActionTypes.Send;
696
706
  to: string | number | ActorRef<any> | ExprWithMeta<TContext, TEvent, string | number | ActorRef<any>> | undefined;
697
707
  event: TSentEvent | SendExpr<TContext, TEvent, TSentEvent>;
698
708
  delay?: number | string | DelayExpr<TContext, TEvent>;
@@ -705,11 +715,11 @@ export interface SendActionObject<TContext, TEvent extends EventObject, TSentEve
705
715
  delay?: number;
706
716
  id: string | number;
707
717
  }
708
- export interface StopAction<TContext, TEvent extends EventObject> extends ActionObject<TContext, TEvent> {
718
+ export interface StopAction<TContext, TExpressionEvent extends EventObject, TEvent extends EventObject = TExpressionEvent> extends ActionObject<TContext, TExpressionEvent, TEvent> {
709
719
  type: ActionTypes.Stop;
710
720
  activity: string | {
711
721
  id: string;
712
- } | Expr<TContext, TEvent, string | {
722
+ } | Expr<TContext, TExpressionEvent, string | {
713
723
  id: string;
714
724
  }>;
715
725
  }
@@ -726,12 +736,15 @@ export declare enum SpecialTargets {
726
736
  Parent = "#_parent",
727
737
  Internal = "#_internal"
728
738
  }
729
- export interface SendActionOptions<TContext, TEvent extends EventObject> {
739
+ export interface SendActionOptions<TContext, TEvent extends EventObject> extends RaiseActionOptions<TContext, TEvent> {
740
+ to?: string | ActorRef<any> | ExprWithMeta<TContext, TEvent, string | ActorRef<any>>;
741
+ }
742
+ export interface RaiseActionOptions<TContext, TEvent extends EventObject> {
730
743
  id?: string | number;
731
744
  delay?: number | string | DelayExpr<TContext, TEvent>;
732
- to?: string | ActorRef<any> | ExprWithMeta<TContext, TEvent, string | ActorRef<any>>;
733
745
  }
734
- export interface CancelAction extends ActionObject<any, any> {
746
+ export interface CancelAction<TContext, TExpressionEvent extends EventObject, TEvent extends EventObject = TExpressionEvent> extends ActionObject<TContext, TExpressionEvent, TEvent> {
747
+ type: ActionTypes.Cancel;
735
748
  sendId: string | number;
736
749
  }
737
750
  export declare type Assigner<TContext, TEvent extends EventObject> = (context: TContext, event: TEvent, meta: AssignMeta<TContext, TEvent>) => Partial<TContext>;
@@ -747,19 +760,19 @@ export interface AnyAssignAction<TContext, TEvent extends EventObject> extends A
747
760
  type: ActionTypes.Assign;
748
761
  assignment: any;
749
762
  }
750
- export interface AssignAction<TContext, TEvent extends EventObject> extends ActionObject<TContext, TEvent> {
763
+ export interface AssignAction<TContext, TExpressionEvent extends EventObject, TEvent extends EventObject = TExpressionEvent> extends ActionObject<TContext, TExpressionEvent, TEvent> {
751
764
  type: ActionTypes.Assign;
752
- assignment: Assigner<TContext, TEvent> | PropertyAssigner<TContext, TEvent>;
765
+ assignment: Assigner<TContext, TExpressionEvent> | PropertyAssigner<TContext, TExpressionEvent>;
753
766
  }
754
- export interface PureAction<TContext, TEvent extends EventObject> extends ActionObject<TContext, TEvent> {
767
+ export interface PureAction<TContext, TExpressionEvent extends EventObject, TEvent extends EventObject = TExpressionEvent> extends ActionObject<TContext, TExpressionEvent, TEvent> {
755
768
  type: ActionTypes.Pure;
756
769
  get: (context: TContext, event: TEvent) => SingleOrArray<ActionObject<TContext, TEvent> | ActionObject<TContext, TEvent>['type']> | undefined;
757
770
  }
758
- export interface ChooseAction<TContext, TEvent extends EventObject> extends ActionObject<TContext, TEvent> {
771
+ export interface ChooseAction<TContext, TExpressionEvent extends EventObject, TEvent extends EventObject = TExpressionEvent> extends ActionObject<TContext, TExpressionEvent, TEvent> {
759
772
  type: ActionTypes.Choose;
760
773
  conds: Array<ChooseCondition<TContext, TEvent>>;
761
774
  }
762
- export interface TransitionDefinition<TContext, TEvent extends EventObject> extends TransitionConfig<TContext, TEvent> {
775
+ export interface TransitionDefinition<TContext, TEvent extends EventObject> extends Omit<TransitionConfig<TContext, TEvent, any>, 'actions'> {
763
776
  target: Array<StateNode<TContext, any, TEvent>> | undefined;
764
777
  source: StateNode<TContext, any, TEvent>;
765
778
  actions: Array<ActionObject<TContext, TEvent>>;
package/es/utils.d.ts CHANGED
@@ -1,8 +1,8 @@
1
- import { Event, StateValue, ActionType, Action, EventObject, PropertyMapper, Mapper, EventType, HistoryValue, AssignAction, Condition, Subscribable, ConditionPredicate, SCXML, StateLike, EventData, TransitionConfig, TransitionConfigTarget, NullEvent, SingleOrArray, Guard, InvokeSourceDefinition, Observer, Behavior } from './types';
1
+ import { Event, StateValue, ActionType, Action, EventObject, PropertyMapper, Mapper, EventType, HistoryValue, AssignAction, Condition, Subscribable, ConditionPredicate, SCXML, StateLike, EventData, TransitionConfig, TransitionConfigTarget, NullEvent, SingleOrArray, Guard, InvokeSourceDefinition, Observer, Behavior, RaiseActionObject, SendActionObject } from './types';
2
2
  import { StateNode } from './StateNode';
3
3
  import { State } from './State';
4
4
  import { Actor } from './Actor';
5
- import { AnyStateMachine } from '.';
5
+ import { ActionObject, AnyStateMachine } from '.';
6
6
  export declare function keys<T extends object>(value: T): Array<keyof T & string>;
7
7
  export declare function matchesState(parentStateId: StateValue, childStateId: StateValue, delimiter?: string): boolean;
8
8
  export declare function getEventType<TEvent extends EventObject = EventObject>(event: Event<TEvent>): TEvent['type'];
@@ -69,4 +69,5 @@ export declare function evaluateGuard<TContext, TEvent extends EventObject>(mach
69
69
  export declare function toInvokeSource(src: string | InvokeSourceDefinition): InvokeSourceDefinition;
70
70
  export declare function toObserver<T>(nextHandler?: Partial<Observer<T>> | ((value: T) => void), errorHandler?: (error: any) => void, completionHandler?: () => void): Observer<T>;
71
71
  export declare function createInvokeId(stateNodeId: string, index: number): string;
72
+ export declare function isRaisableAction<TContext, TExpressionEvent extends EventObject, TEvent extends EventObject>(action: ActionObject<TContext, TExpressionEvent, TEvent>): action is RaiseActionObject<TContext, TExpressionEvent, TEvent> | SendActionObject<TContext, TExpressionEvent, TEvent>;
72
73
  //# sourceMappingURL=utils.d.ts.map
package/es/utils.js CHANGED
@@ -1,4 +1,6 @@
1
1
  import { __values, __spreadArray, __read, __assign } from './_virtual/_tslib.js';
2
+ import { SpecialTargets } from './types.js';
3
+ import { raise, send } from './actionTypes.js';
2
4
  import { DEFAULT_GUARD_TYPE, TARGETLESS_KEY, STATE_DELIMITER } from './constants.js';
3
5
  import { IS_PRODUCTION } from './environment.js';
4
6
 
@@ -618,5 +620,8 @@ function toObserver(nextHandler, errorHandler, completionHandler) {
618
620
  function createInvokeId(stateNodeId, index) {
619
621
  return "".concat(stateNodeId, ":invocation[").concat(index, "]");
620
622
  }
623
+ function isRaisableAction(action) {
624
+ return (action.type === raise || action.type === send && action.to === SpecialTargets.Internal) && typeof action.delay !== 'number';
625
+ }
621
626
 
622
- export { createInvokeId, evaluateGuard, flatten, getActionType, getEventType, interopSymbols, isActor, isArray, isBehavior, isBuiltInEvent, isFunction, isMachine, isObservable, isPromiseLike, isStateLike, isString, keys, mapContext, mapFilterValues, mapValues, matchesState, nestedPath, normalizeTarget, partition, path, pathToStateValue, pathsToStateValue, reportUnhandledExceptionOnInvocation, symbolObservable, toArray, toArrayStrict, toEventObject, toGuard, toInvokeSource, toObserver, toSCXMLEvent, toStatePath, toStatePaths, toStateValue, toTransitionConfigArray, uniqueId, updateContext, updateHistoryStates, updateHistoryValue, warn };
627
+ export { createInvokeId, evaluateGuard, flatten, getActionType, getEventType, interopSymbols, isActor, isArray, isBehavior, isBuiltInEvent, isFunction, isMachine, isObservable, isPromiseLike, isRaisableAction, isStateLike, isString, keys, mapContext, mapFilterValues, mapValues, matchesState, nestedPath, normalizeTarget, partition, path, pathToStateValue, pathsToStateValue, reportUnhandledExceptionOnInvocation, symbolObservable, toArray, toArrayStrict, toEventObject, toGuard, toInvokeSource, toObserver, toSCXMLEvent, toStatePath, toStatePaths, toStateValue, toTransitionConfigArray, uniqueId, updateContext, updateHistoryStates, updateHistoryValue, warn };
package/lib/State.d.ts CHANGED
@@ -91,7 +91,7 @@ export declare class State<TContext, TEvent extends EventObject = EventObject, T
91
91
  * @param delimiter The character(s) that separate each subpath in the string state node path.
92
92
  */
93
93
  toStrings(stateValue?: StateValue, delimiter?: string): string[];
94
- toJSON(): Omit<this, "machine" | "configuration" | "transitions" | "tags" | "toStrings" | "toJSON" | "matches" | "hasTag" | "can"> & {
94
+ toJSON(): Omit<this, "configuration" | "transitions" | "tags" | "machine" | "toStrings" | "toJSON" | "matches" | "hasTag" | "can"> & {
95
95
  tags: string[];
96
96
  };
97
97
  /**
package/lib/StateNode.js CHANGED
@@ -4,7 +4,6 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var _tslib = require('./_virtual/_tslib.js');
6
6
  var utils = require('./utils.js');
7
- var types = require('./types.js');
8
7
  var State = require('./State.js');
9
8
  var actionTypes = require('./actionTypes.js');
10
9
  var actions = require('./actions.js');
@@ -759,7 +758,9 @@ function () {
759
758
  };
760
759
  }).concat({
761
760
  type: 'state_done',
762
- actions: doneEvents.map(actions.raise)
761
+ actions: doneEvents.map(function (event) {
762
+ return actions.raise(event);
763
+ })
763
764
  });
764
765
  var exitActions = Array.from(exitStates).map(function (stateNode) {
765
766
  return {
@@ -780,7 +781,7 @@ function () {
780
781
  }).map(function (stateNode) {
781
782
  return stateNode.onExit;
782
783
  })), this.machine.options.actions).filter(function (action) {
783
- return action.type !== actionTypes.raise && (action.type !== actionTypes.send || !!action.to && action.to !== types.SpecialTargets.Internal);
784
+ return !utils.isRaisableAction(action);
784
785
  });
785
786
  return actions$1.concat({
786
787
  type: 'stop',
@@ -917,9 +918,7 @@ function () {
917
918
  resolvedActions = _e[0],
918
919
  updatedContext = _e[1];
919
920
 
920
- var _f = _tslib.__read(utils.partition(resolvedActions, function (action) {
921
- return action.type === actionTypes.raise || action.type === actionTypes.send && action.to === types.SpecialTargets.Internal;
922
- }), 2),
921
+ var _f = _tslib.__read(utils.partition(resolvedActions, utils.isRaisableAction), 2),
923
922
  raisedEvents = _f[0],
924
923
  nonRaisedActions = _f[1];
925
924
 
package/lib/actions.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { Action, Event, EventObject, SingleOrArray, SendAction, SendActionOptions, CancelAction, ActionObject, ActionType, Assigner, PropertyAssigner, AssignAction, ActionFunction, ActionFunctionMap, ActivityActionObject, ActionTypes, ActivityDefinition, RaiseAction, RaiseActionObject, DoneEvent, ErrorPlatformEvent, DoneEventObject, SendExpr, SendActionObject, PureAction, LogExpr, LogAction, LogActionObject, DelayFunctionMap, SCXML, ExprWithMeta, ChooseCondition, ChooseAction, AnyEventObject, Expr, StopAction, StopActionObject, Cast, EventFrom, AnyActorRef, PredictableActionArgumentsExec } from './types';
1
+ import { Action, Event, EventObject, SingleOrArray, SendAction, SendActionOptions, CancelAction, ActionObject, ActionType, Assigner, PropertyAssigner, AssignAction, ActionFunction, ActionFunctionMap, ActivityActionObject, ActionTypes, ActivityDefinition, RaiseAction, RaiseActionObject, DoneEvent, ErrorPlatformEvent, DoneEventObject, SendExpr, SendActionObject, PureAction, LogExpr, LogAction, LogActionObject, DelayFunctionMap, SCXML, ExprWithMeta, ChooseCondition, ChooseAction, AnyEventObject, Expr, StopAction, StopActionObject, Cast, EventFrom, AnyActorRef, PredictableActionArgumentsExec, RaiseActionOptions, NoInfer, BaseActionObject, LowInfer } from './types';
2
2
  import * as actionTypes from './actionTypes';
3
3
  import { State } from './State';
4
4
  import { StateNode } from './StateNode';
@@ -8,7 +8,7 @@ export declare const initEvent: SCXML.Event<{
8
8
  }>;
9
9
  export declare function getActionFunction<TContext, TEvent extends EventObject>(actionType: ActionType, actionFunctionMap?: ActionFunctionMap<TContext, TEvent>): ActionObject<TContext, TEvent> | ActionFunction<TContext, TEvent> | undefined;
10
10
  export declare function toActionObject<TContext, TEvent extends EventObject>(action: Action<TContext, TEvent>, actionFunctionMap?: ActionFunctionMap<TContext, TEvent>): ActionObject<TContext, TEvent>;
11
- export declare const toActionObjects: <TContext, TEvent extends EventObject>(action?: SingleOrArray<Action<TContext, TEvent>> | undefined, actionFunctionMap?: ActionFunctionMap<TContext, TEvent, import("./types").BaseActionObject> | undefined) => ActionObject<TContext, TEvent>[];
11
+ export declare const toActionObjects: <TContext, TEvent extends EventObject>(action?: SingleOrArray<Action<TContext, TEvent, TEvent>> | undefined, actionFunctionMap?: ActionFunctionMap<TContext, TEvent, BaseActionObject> | undefined) => ActionObject<TContext, TEvent, TEvent, BaseActionObject>[];
12
12
  export declare function toActivityDefinition<TContext, TEvent extends EventObject>(action: string | ActivityDefinition<TContext, TEvent>): ActivityDefinition<TContext, TEvent>;
13
13
  /**
14
14
  * Raises an event. This places the event in the internal event queue, so that
@@ -16,19 +16,21 @@ export declare function toActivityDefinition<TContext, TEvent extends EventObjec
16
16
  *
17
17
  * @param eventType The event to raise.
18
18
  */
19
- export declare function raise<TContext, TEvent extends EventObject>(event: Event<TEvent>): RaiseAction<TEvent> | SendAction<TContext, AnyEventObject, TEvent>;
20
- export declare function resolveRaise<TEvent extends EventObject>(action: RaiseAction<TEvent>): RaiseActionObject<TEvent>;
19
+ export declare function raise<TContext, TExpressionEvent extends EventObject, TEvent extends EventObject = TExpressionEvent>(event: NoInfer<Event<TEvent>> | SendExpr<TContext, TExpressionEvent, TEvent>, options?: RaiseActionOptions<TContext, TExpressionEvent>): RaiseAction<TContext, TExpressionEvent, TEvent>;
20
+ export declare function resolveRaise<TContext, TEvent extends EventObject, TExpressionEvent extends EventObject>(action: RaiseAction<TContext, TExpressionEvent, TEvent>, ctx: TContext, _event: SCXML.Event<TExpressionEvent>, delaysMap?: DelayFunctionMap<TContext, TEvent>): RaiseActionObject<TContext, TExpressionEvent, TEvent>;
21
21
  /**
22
22
  * Sends an event. This returns an action that will be read by an interpreter to
23
23
  * send the event in the next step, after the current step is finished executing.
24
24
  *
25
+ * @deprecated Use the `sendTo(...)` action creator instead.
26
+ *
25
27
  * @param event The event to send.
26
28
  * @param options Options to pass into the send event:
27
29
  * - `id` - The unique send event identifier (used with `cancel()`).
28
30
  * - `delay` - The number of milliseconds to delay the sending of the event.
29
31
  * - `to` - The target of this event (by default, the machine the event was sent from).
30
32
  */
31
- export declare function send<TContext, TEvent extends EventObject, TSentEvent extends EventObject = AnyEventObject>(event: Event<TSentEvent> | SendExpr<TContext, TEvent, TSentEvent>, options?: SendActionOptions<TContext, TEvent>): SendAction<TContext, TEvent, TSentEvent>;
33
+ export declare function send<TContext, TEvent extends EventObject, TSentEvent extends EventObject = AnyEventObject>(event: Event<AnyEventObject> | SendExpr<TContext, TEvent, AnyEventObject>, options?: SendActionOptions<TContext, TEvent>): SendAction<TContext, TEvent, TSentEvent>;
32
34
  export declare function resolveSend<TContext, TEvent extends EventObject, TSentEvent extends EventObject>(action: SendAction<TContext, TEvent, TSentEvent>, ctx: TContext, _event: SCXML.Event<TEvent>, delaysMap?: DelayFunctionMap<TContext, TEvent>): SendActionObject<TContext, TEvent, TSentEvent>;
33
35
  /**
34
36
  * Sends an event to this machine's parent.
@@ -36,7 +38,7 @@ export declare function resolveSend<TContext, TEvent extends EventObject, TSentE
36
38
  * @param event The event to send to the parent machine.
37
39
  * @param options Options to pass into the send event.
38
40
  */
39
- export declare function sendParent<TContext, TEvent extends EventObject, TSentEvent extends EventObject = AnyEventObject>(event: Event<TSentEvent> | SendExpr<TContext, TEvent, TSentEvent>, options?: SendActionOptions<TContext, TEvent>): SendAction<TContext, TEvent, TSentEvent>;
41
+ export declare function sendParent<TContext, TEvent extends EventObject, TSentEvent extends EventObject = AnyEventObject>(event: Event<AnyEventObject> | SendExpr<TContext, TEvent, AnyEventObject>, options?: SendActionOptions<TContext, TEvent>): SendAction<TContext, TEvent, TSentEvent>;
40
42
  declare type InferEvent<E extends EventObject> = {
41
43
  [T in E['type']]: {
42
44
  type: T;
@@ -52,13 +54,11 @@ declare type InferEvent<E extends EventObject> = {
52
54
  * @param options Send action options
53
55
  * @returns An XState send action object
54
56
  */
55
- export declare function sendTo<TContext, TEvent extends EventObject, TActor extends AnyActorRef>(actor: string | TActor | ((ctx: TContext) => TActor), event: EventFrom<TActor> | SendExpr<TContext, TEvent, InferEvent<Cast<EventFrom<TActor>, EventObject>>>, options?: SendActionOptions<TContext, TEvent>): SendAction<TContext, TEvent, any>;
57
+ export declare function sendTo<TContext, TEvent extends EventObject, TActor extends AnyActorRef>(actor: string | TActor | ((ctx: TContext, event: TEvent) => TActor), event: EventFrom<TActor> | SendExpr<TContext, TEvent, InferEvent<Cast<EventFrom<TActor>, EventObject>>>, options?: SendActionOptions<TContext, TEvent>): SendAction<TContext, TEvent, any>;
56
58
  /**
57
59
  * Sends an update event to this machine's parent.
58
60
  */
59
- export declare function sendUpdate<TContext, TEvent extends EventObject>(): SendAction<TContext, TEvent, {
60
- type: ActionTypes.Update;
61
- }>;
61
+ export declare function sendUpdate<TContext, TEvent extends EventObject>(): SendAction<TContext, TEvent, AnyEventObject>;
62
62
  /**
63
63
  * Sends an event back to the sender of the original event.
64
64
  *
@@ -75,7 +75,7 @@ export declare function respond<TContext, TEvent extends EventObject, TSentEvent
75
75
  * @param label The label to give to the logged expression.
76
76
  */
77
77
  export declare function log<TContext, TEvent extends EventObject>(expr?: string | LogExpr<TContext, TEvent>, label?: string): LogAction<TContext, TEvent>;
78
- export declare const resolveLog: <TContext, TEvent extends EventObject>(action: LogAction<TContext, TEvent>, ctx: TContext, _event: SCXML.Event<TEvent>) => LogActionObject<TContext, TEvent>;
78
+ export declare const resolveLog: <TContext, TEvent extends EventObject>(action: LogAction<TContext, TEvent, TEvent>, ctx: TContext, _event: SCXML.Event<TEvent>) => LogActionObject<TContext, TEvent>;
79
79
  /**
80
80
  * Cancels an in-flight `send(...)` action. A canceled sent action will not
81
81
  * be executed, nor will its event be sent, unless it has already been sent
@@ -83,7 +83,7 @@ export declare const resolveLog: <TContext, TEvent extends EventObject>(action:
83
83
  *
84
84
  * @param sendId The `id` of the `send(...)` action to cancel.
85
85
  */
86
- export declare const cancel: (sendId: string | number) => CancelAction;
86
+ export declare const cancel: <TContext, TEvent extends EventObject>(sendId: string | number) => CancelAction<TContext, TEvent, TEvent>;
87
87
  /**
88
88
  * Starts an activity.
89
89
  *
@@ -95,7 +95,7 @@ export declare function start<TContext, TEvent extends EventObject>(activity: st
95
95
  *
96
96
  * @param actorRef The activity to stop.
97
97
  */
98
- export declare function stop<TContext, TEvent extends EventObject>(actorRef: string | ActivityDefinition<TContext, TEvent> | Expr<TContext, TEvent, string | {
98
+ export declare function stop<TContext, TEvent extends EventObject>(actorRef: string | Expr<TContext, TEvent, string | {
99
99
  id: string;
100
100
  }>): StopAction<TContext, TEvent>;
101
101
  export declare function resolveStop<TContext, TEvent extends EventObject>(action: StopAction<TContext, TEvent>, context: TContext, _event: SCXML.Event<TEvent>): StopActionObject;
@@ -104,7 +104,7 @@ export declare function resolveStop<TContext, TEvent extends EventObject>(action
104
104
  *
105
105
  * @param assignment An object that represents the partial context to update.
106
106
  */
107
- export declare const assign: <TContext, TEvent extends EventObject = EventObject>(assignment: Assigner<TContext, TEvent> | PropertyAssigner<TContext, TEvent>) => AssignAction<TContext, TEvent>;
107
+ export declare const assign: <TContext, TExpressionEvent extends EventObject = EventObject, TEvent extends EventObject = TExpressionEvent>(assignment: Assigner<LowInfer<TContext>, TExpressionEvent> | PropertyAssigner<LowInfer<TContext>, TExpressionEvent>) => AssignAction<TContext, TExpressionEvent, TEvent>;
108
108
  export declare function isActionObject<TContext, TEvent extends EventObject>(action: Action<TContext, TEvent>): action is ActionObject<TContext, TEvent>;
109
109
  /**
110
110
  * Returns an event type that represents an implicit event that
@@ -133,7 +133,7 @@ export declare function done(id: string, data?: any): DoneEventObject;
133
133
  */
134
134
  export declare function doneInvoke(id: string, data?: any): DoneEvent;
135
135
  export declare function error(id: string, data?: any): ErrorPlatformEvent & string;
136
- export declare function pure<TContext, TEvent extends EventObject>(getActions: (context: TContext, event: TEvent) => SingleOrArray<ActionObject<TContext, TEvent> | ActionObject<TContext, TEvent>['type']> | undefined): PureAction<TContext, TEvent>;
136
+ export declare function pure<TContext, TEvent extends EventObject>(getActions: (context: TContext, event: TEvent) => SingleOrArray<BaseActionObject | BaseActionObject['type'] | ActionObject<TContext, TEvent>> | undefined): PureAction<TContext, TEvent>;
137
137
  /**
138
138
  * Forwards (sends) an event to a specified service.
139
139
  *