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/lib/actions.js CHANGED
@@ -83,28 +83,40 @@ function toActivityDefinition(action) {
83
83
  * @param eventType The event to raise.
84
84
  */
85
85
 
86
- function raise(event) {
87
- if (!utils.isString(event)) {
88
- return send(event, {
89
- to: types.SpecialTargets.Internal
90
- });
91
- }
92
-
86
+ function raise(event, options) {
93
87
  return {
94
88
  type: actionTypes.raise,
95
- event: event
89
+ event: typeof event === 'function' ? event : utils.toEventObject(event),
90
+ delay: options ? options.delay : undefined,
91
+ id: options === null || options === void 0 ? void 0 : options.id
96
92
  };
97
93
  }
98
- function resolveRaise(action) {
99
- return {
100
- type: actionTypes.raise,
101
- _event: utils.toSCXMLEvent(action.event)
94
+ function resolveRaise(action, ctx, _event, delaysMap) {
95
+ var meta = {
96
+ _event: _event
102
97
  };
98
+ var resolvedEvent = utils.toSCXMLEvent(utils.isFunction(action.event) ? action.event(ctx, _event.data, meta) : action.event);
99
+ var resolvedDelay;
100
+
101
+ if (utils.isString(action.delay)) {
102
+ var configDelay = delaysMap && delaysMap[action.delay];
103
+ resolvedDelay = utils.isFunction(configDelay) ? configDelay(ctx, _event.data, meta) : configDelay;
104
+ } else {
105
+ resolvedDelay = utils.isFunction(action.delay) ? action.delay(ctx, _event.data, meta) : action.delay;
106
+ }
107
+
108
+ return _tslib.__assign(_tslib.__assign({}, action), {
109
+ type: actionTypes.raise,
110
+ _event: resolvedEvent,
111
+ delay: resolvedDelay
112
+ });
103
113
  }
104
114
  /**
105
115
  * Sends an event. This returns an action that will be read by an interpreter to
106
116
  * send the event in the next step, after the current step is finished executing.
107
117
  *
118
+ * @deprecated Use the `sendTo(...)` action creator instead.
119
+ *
108
120
  * @param event The event to send.
109
121
  * @param options Options to pass into the send event:
110
122
  * - `id` - The unique send event identifier (used with `cancel()`).
@@ -118,6 +130,8 @@ function send(event, options) {
118
130
  type: actionTypes.send,
119
131
  event: utils.isFunction(event) ? event : utils.toEventObject(event),
120
132
  delay: options ? options.delay : undefined,
133
+ // TODO: don't auto-generate IDs here like that
134
+ // there is too big chance of the ID collision
121
135
  id: options && options.id !== undefined ? options.id : utils.isFunction(event) ? event.name : utils.getEventType(event)
122
136
  };
123
137
  }
@@ -480,23 +494,30 @@ function resolveActions(machine, currentState, currentContext, _event, actionBlo
480
494
  switch (actionObject.type) {
481
495
  case actionTypes.raise:
482
496
  {
483
- return resolveRaise(actionObject);
497
+ var raisedAction = resolveRaise(actionObject, updatedContext, _event, machine.options.delays);
498
+
499
+ if (predictableExec && typeof raisedAction.delay === 'number') {
500
+ predictableExec(raisedAction, updatedContext, _event);
501
+ }
502
+
503
+ return raisedAction;
484
504
  }
485
505
 
486
506
  case actionTypes.send:
487
507
  var sendAction = resolveSend(actionObject, updatedContext, _event, machine.options.delays); // TODO: fix ActionTypes.Init
488
508
 
489
509
  if (!environment.IS_PRODUCTION) {
490
- // warn after resolving as we can create better contextual message here
491
- utils.warn(!utils.isString(actionObject.delay) || typeof sendAction.delay === 'number', // tslint:disable-next-line:max-line-length
492
- "No delay reference for delay expression '".concat(actionObject.delay, "' was found on machine '").concat(machine.id, "'"));
510
+ var configuredDelay = actionObject.delay; // warn after resolving as we can create better contextual message here
511
+
512
+ utils.warn(!utils.isString(configuredDelay) || typeof sendAction.delay === 'number', // tslint:disable-next-line:max-line-length
513
+ "No delay reference for delay expression '".concat(configuredDelay, "' was found on machine '").concat(machine.id, "'"));
493
514
  }
494
515
 
495
516
  if (predictableExec && sendAction.to !== types.SpecialTargets.Internal) {
496
517
  if (blockType === 'entry') {
497
518
  deferredToBlockEnd.push(sendAction);
498
519
  } else {
499
- predictableExec === null || predictableExec === void 0 ? void 0 : predictableExec(sendAction, updatedContext, _event);
520
+ predictableExec(sendAction, updatedContext, _event);
500
521
  }
501
522
  }
502
523
 
@@ -575,7 +596,8 @@ function resolveActions(machine, currentState, currentContext, _event, actionBlo
575
596
  predictableExec(resolvedActionObject, updatedContext, _event);
576
597
  } else if (exec_1 && preservedContexts) {
577
598
  var contextIndex_1 = preservedContexts.length - 1;
578
- resolvedActionObject = _tslib.__assign(_tslib.__assign({}, resolvedActionObject), {
599
+
600
+ var wrapped = _tslib.__assign(_tslib.__assign({}, resolvedActionObject), {
579
601
  exec: function (_ctx) {
580
602
  var args = [];
581
603
 
@@ -586,6 +608,8 @@ function resolveActions(machine, currentState, currentContext, _event, actionBlo
586
608
  exec_1.apply(void 0, _tslib.__spreadArray([preservedContexts[contextIndex_1]], _tslib.__read(args), false));
587
609
  }
588
610
  });
611
+
612
+ resolvedActionObject = wrapped;
589
613
  }
590
614
 
591
615
  return resolvedActionObject;
package/lib/index.d.ts CHANGED
@@ -13,7 +13,7 @@ export * from './typegenTypes';
13
13
  export * from './types';
14
14
  export { matchesState, toEventObject, toObserver, toSCXMLEvent } from './utils';
15
15
  export { Actor, toActorRef, Machine, StateNode, State, mapState, actions, assign, send, sendTo, sendParent, sendUpdate, raise, forwardTo, interpret, Interpreter, InterpreterStatus, matchState, spawn, doneInvoke, createMachine, createSchema, t };
16
- declare const assign: <TContext, TEvent extends import("./types").EventObject = import("./types").EventObject>(assignment: import("./types").Assigner<TContext, TEvent> | import("./types").PropertyAssigner<TContext, TEvent>) => import("./types").AssignAction<TContext, TEvent>, send: typeof actions.send, sendTo: typeof actions.sendTo, sendParent: typeof actions.sendParent, sendUpdate: typeof actions.sendUpdate, forwardTo: typeof actions.forwardTo, doneInvoke: typeof actions.doneInvoke, raise: typeof actions.raise;
16
+ declare const assign: <TContext, TExpressionEvent extends import("./types").EventObject = import("./types").EventObject, TEvent extends import("./types").EventObject = TExpressionEvent>(assignment: import("./types").Assigner<import("./types").LowInfer<TContext>, TExpressionEvent> | import("./types").PropertyAssigner<import("./types").LowInfer<TContext>, TExpressionEvent>) => import("./types").AssignAction<TContext, TExpressionEvent, TEvent>, send: typeof actions.send, sendTo: typeof actions.sendTo, sendParent: typeof actions.sendParent, sendUpdate: typeof actions.sendUpdate, forwardTo: typeof actions.forwardTo, doneInvoke: typeof actions.doneInvoke, raise: typeof actions.raise;
17
17
  declare global {
18
18
  interface SymbolConstructor {
19
19
  readonly observable: symbol;
@@ -75,6 +75,7 @@ export declare class Interpreter<TContext, TStateSchema extends StateSchema = an
75
75
  private forwardTo;
76
76
  private _outgoingQueue;
77
77
  private devTools?;
78
+ private _doneEvent?;
78
79
  /**
79
80
  * Creates a new Interpreter instance (i.e., service) for the given machine with the provided options, if any.
80
81
  *
@@ -116,7 +116,7 @@ function () {
116
116
 
117
117
  this.sendTo = function (event, to, immediate) {
118
118
  var isParent = _this.parent && (to === types.SpecialTargets.Parent || _this.parent.id === to);
119
- var target = isParent ? _this.parent : utils.isString(to) ? _this.children.get(to) || registry.registry.get(to) : utils.isActor(to) ? to : undefined;
119
+ var target = isParent ? _this.parent : utils.isString(to) ? to === types.SpecialTargets.Internal ? _this : _this.children.get(to) || registry.registry.get(to) : utils.isActor(to) ? to : undefined;
120
120
 
121
121
  if (!target) {
122
122
  if (!isParent) {
@@ -189,6 +189,16 @@ function () {
189
189
  }
190
190
 
191
191
  switch (action.type) {
192
+ case actionTypes.raise:
193
+ {
194
+ // if raise action reached the interpreter then it's a delayed one
195
+ var sendAction_1 = action;
196
+
197
+ _this.defer(sendAction_1);
198
+
199
+ break;
200
+ }
201
+
192
202
  case actionTypes.send:
193
203
  var sendAction = action;
194
204
 
@@ -292,8 +302,9 @@ function () {
292
302
  }
293
303
 
294
304
  case actionTypes.log:
295
- var label = action.label,
296
- value = action.value;
305
+ var _a = action,
306
+ label = _a.label,
307
+ value = _a.value;
297
308
 
298
309
  if (label) {
299
310
  _this.logger(label, value);
@@ -479,11 +490,12 @@ function () {
479
490
  return sn.type === 'final' && sn.parent === _this.machine;
480
491
  });
481
492
  var doneData = finalChildStateNode && finalChildStateNode.doneData ? utils.mapContext(finalChildStateNode.doneData, state.context, _event) : undefined;
493
+ this._doneEvent = actions.doneInvoke(this.id, doneData);
482
494
 
483
495
  try {
484
496
  for (var _l = _tslib.__values(this.doneListeners), _m = _l.next(); !_m.done; _m = _l.next()) {
485
497
  var listener = _m.value;
486
- listener(actions.doneInvoke(this.id, doneData));
498
+ listener(this._doneEvent);
487
499
  }
488
500
  } catch (e_5_1) {
489
501
  e_5 = {
@@ -605,7 +617,12 @@ function () {
605
617
 
606
618
 
607
619
  Interpreter.prototype.onDone = function (listener) {
608
- this.doneListeners.add(listener);
620
+ if (this.status === exports.InterpreterStatus.Stopped && this._doneEvent) {
621
+ listener(this._doneEvent);
622
+ } else {
623
+ this.doneListeners.add(listener);
624
+ }
625
+
609
626
  return this;
610
627
  };
611
628
  /**
@@ -822,7 +839,7 @@ function () {
822
839
  historyValue: undefined,
823
840
  history: _this.state,
824
841
  actions: resolvedActions.filter(function (action) {
825
- return action.type !== actionTypes.raise && (action.type !== actionTypes.send || !!action.to && action.to !== types.SpecialTargets.Internal);
842
+ return !utils.isRaisableAction(action);
826
843
  }),
827
844
  activities: {},
828
845
  events: [],
@@ -983,13 +1000,17 @@ function () {
983
1000
  Interpreter.prototype.defer = function (sendAction) {
984
1001
  var _this = this;
985
1002
 
986
- this.delayedEventsMap[sendAction.id] = this.clock.setTimeout(function () {
987
- if (sendAction.to) {
1003
+ var timerId = this.clock.setTimeout(function () {
1004
+ if ('to' in sendAction && sendAction.to) {
988
1005
  _this.sendTo(sendAction._event, sendAction.to, true);
989
1006
  } else {
990
1007
  _this.send(sendAction._event);
991
1008
  }
992
1009
  }, sendAction.delay);
1010
+
1011
+ if (sendAction.id) {
1012
+ this.delayedEventsMap[sendAction.id] = timerId;
1013
+ }
993
1014
  };
994
1015
 
995
1016
  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/lib/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/lib/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/lib/utils.js CHANGED
@@ -3,6 +3,8 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var _tslib = require('./_virtual/_tslib.js');
6
+ var types = require('./types.js');
7
+ var actionTypes = require('./actionTypes.js');
6
8
  var constants = require('./constants.js');
7
9
  var environment = require('./environment.js');
8
10
 
@@ -622,6 +624,9 @@ function toObserver(nextHandler, errorHandler, completionHandler) {
622
624
  function createInvokeId(stateNodeId, index) {
623
625
  return "".concat(stateNodeId, ":invocation[").concat(index, "]");
624
626
  }
627
+ function isRaisableAction(action) {
628
+ return (action.type === actionTypes.raise || action.type === actionTypes.send && action.to === types.SpecialTargets.Internal) && typeof action.delay !== 'number';
629
+ }
625
630
 
626
631
  exports.createInvokeId = createInvokeId;
627
632
  exports.evaluateGuard = evaluateGuard;
@@ -637,6 +642,7 @@ exports.isFunction = isFunction;
637
642
  exports.isMachine = isMachine;
638
643
  exports.isObservable = isObservable;
639
644
  exports.isPromiseLike = isPromiseLike;
645
+ exports.isRaisableAction = isRaisableAction;
640
646
  exports.isStateLike = isStateLike;
641
647
  exports.isString = isString;
642
648
  exports.keys = keys;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "xstate",
3
- "version": "4.35.4",
3
+ "version": "4.36.0",
4
4
  "description": "Finite State Machines and Statecharts for the Modern Web.",
5
5
  "main": "lib/index.js",
6
6
  "module": "es/index.js",
package/es/each.d.ts DELETED
@@ -1,4 +0,0 @@
1
- import { EventObject, SingleOrArray, ActionObject } from './types';
2
- export declare function each<TContext, TEvent extends EventObject>(collection: keyof TContext, item: keyof TContext, actions: SingleOrArray<ActionObject<TContext, TEvent>>): ActionObject<TContext, TEvent>;
3
- export declare function each<TContext, TEvent extends EventObject>(collection: keyof TContext, item: keyof TContext, index: keyof TContext, actions: SingleOrArray<ActionObject<TContext, TEvent>>): ActionObject<TContext, TEvent>;
4
- //# sourceMappingURL=each.d.ts.map
package/es/each.js DELETED
@@ -1,13 +0,0 @@
1
- function each(collection, item, indexOrActions, maybeActions) {
2
- var actions = maybeActions || indexOrActions;
3
- var index = maybeActions ? indexOrActions : undefined;
4
- return {
5
- type: 'xstate.foreach',
6
- collection: collection,
7
- item: item,
8
- index: index,
9
- actions: actions
10
- };
11
- }
12
-
13
- export { each };
package/lib/each.d.ts DELETED
@@ -1,4 +0,0 @@
1
- import { EventObject, SingleOrArray, ActionObject } from './types';
2
- export declare function each<TContext, TEvent extends EventObject>(collection: keyof TContext, item: keyof TContext, actions: SingleOrArray<ActionObject<TContext, TEvent>>): ActionObject<TContext, TEvent>;
3
- export declare function each<TContext, TEvent extends EventObject>(collection: keyof TContext, item: keyof TContext, index: keyof TContext, actions: SingleOrArray<ActionObject<TContext, TEvent>>): ActionObject<TContext, TEvent>;
4
- //# sourceMappingURL=each.d.ts.map
package/lib/each.js DELETED
@@ -1,17 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- function each(collection, item, indexOrActions, maybeActions) {
6
- var actions = maybeActions || indexOrActions;
7
- var index = maybeActions ? indexOrActions : undefined;
8
- return {
9
- type: 'xstate.foreach',
10
- collection: collection,
11
- item: item,
12
- index: index,
13
- actions: actions
14
- };
15
- }
16
-
17
- exports.each = each;