xstate 4.35.3 → 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/dist/xstate.interpreter.js +1 -1
- package/dist/xstate.js +1 -1
- package/dist/xstate.web.js +2 -2
- package/es/State.d.ts +1 -1
- package/es/StateNode.js +9 -10
- package/es/actions.d.ts +15 -15
- package/es/actions.js +43 -19
- package/es/index.d.ts +1 -1
- package/es/interpreter.d.ts +1 -0
- package/es/interpreter.js +33 -10
- package/es/model.types.d.ts +1 -1
- package/es/types.d.ts +45 -32
- package/es/utils.d.ts +3 -2
- package/es/utils.js +6 -1
- package/lib/State.d.ts +1 -1
- package/lib/StateNode.js +5 -6
- package/lib/actions.d.ts +15 -15
- package/lib/actions.js +42 -18
- package/lib/index.d.ts +1 -1
- package/lib/interpreter.d.ts +1 -0
- package/lib/interpreter.js +31 -8
- package/lib/model.types.d.ts +1 -1
- package/lib/types.d.ts +45 -32
- package/lib/utils.d.ts +3 -2
- package/lib/utils.js +6 -0
- package/package.json +1 -1
- package/es/each.d.ts +0 -4
- package/es/each.js +0 -13
- package/lib/each.d.ts +0 -4
- package/lib/each.js +0 -17
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
|
-
|
|
100
|
-
|
|
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
|
-
|
|
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
|
-
|
|
492
|
-
|
|
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
|
|
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
|
-
|
|
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,
|
|
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;
|
package/lib/interpreter.d.ts
CHANGED
|
@@ -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
|
*
|
package/lib/interpreter.js
CHANGED
|
@@ -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
|
|
296
|
-
|
|
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(
|
|
498
|
+
listener(this._doneEvent);
|
|
487
499
|
}
|
|
488
500
|
} catch (e_5_1) {
|
|
489
501
|
e_5 = {
|
|
@@ -500,6 +512,8 @@ function () {
|
|
|
500
512
|
this._stop();
|
|
501
513
|
|
|
502
514
|
this._stopChildren();
|
|
515
|
+
|
|
516
|
+
registry.registry.free(this.sessionId);
|
|
503
517
|
}
|
|
504
518
|
};
|
|
505
519
|
/*
|
|
@@ -603,7 +617,12 @@ function () {
|
|
|
603
617
|
|
|
604
618
|
|
|
605
619
|
Interpreter.prototype.onDone = function (listener) {
|
|
606
|
-
this.
|
|
620
|
+
if (this.status === exports.InterpreterStatus.Stopped && this._doneEvent) {
|
|
621
|
+
listener(this._doneEvent);
|
|
622
|
+
} else {
|
|
623
|
+
this.doneListeners.add(listener);
|
|
624
|
+
}
|
|
625
|
+
|
|
607
626
|
return this;
|
|
608
627
|
};
|
|
609
628
|
/**
|
|
@@ -820,7 +839,7 @@ function () {
|
|
|
820
839
|
historyValue: undefined,
|
|
821
840
|
history: _this.state,
|
|
822
841
|
actions: resolvedActions.filter(function (action) {
|
|
823
|
-
return
|
|
842
|
+
return !utils.isRaisableAction(action);
|
|
824
843
|
}),
|
|
825
844
|
activities: {},
|
|
826
845
|
events: [],
|
|
@@ -981,13 +1000,17 @@ function () {
|
|
|
981
1000
|
Interpreter.prototype.defer = function (sendAction) {
|
|
982
1001
|
var _this = this;
|
|
983
1002
|
|
|
984
|
-
|
|
985
|
-
if (sendAction.to) {
|
|
1003
|
+
var timerId = this.clock.setTimeout(function () {
|
|
1004
|
+
if ('to' in sendAction && sendAction.to) {
|
|
986
1005
|
_this.sendTo(sendAction._event, sendAction.to, true);
|
|
987
1006
|
} else {
|
|
988
1007
|
_this.send(sendAction._event);
|
|
989
1008
|
}
|
|
990
1009
|
}, sendAction.delay);
|
|
1010
|
+
|
|
1011
|
+
if (sendAction.id) {
|
|
1012
|
+
this.delayedEventsMap[sendAction.id] = timerId;
|
|
1013
|
+
}
|
|
991
1014
|
};
|
|
992
1015
|
|
|
993
1016
|
Interpreter.prototype.cancel = function (sendId) {
|
package/lib/model.types.d.ts
CHANGED
|
@@ -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
|
|
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,
|
|
75
|
-
bivarianceHack(context: TContext, event:
|
|
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,
|
|
91
|
-
export declare type BaseActions<TContext, TEvent extends EventObject, TAction extends BaseActionObject> = SingleOrArray<BaseAction<TContext,
|
|
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,
|
|
126
|
-
actions?:
|
|
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
|
|
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,
|
|
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,
|
|
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<
|
|
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,
|
|
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
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;
|