xstate 4.9.1 → 4.13.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/CHANGELOG.md +206 -0
- package/README.md +2 -2
- package/dist/xstate.interpreter.js +1 -1
- package/dist/xstate.js +1 -1
- package/dist/xstate.web.js +2 -2
- package/es/Actor.d.ts +5 -3
- package/es/Actor.js +26 -4
- package/es/Machine.d.ts +4 -1
- package/es/State.d.ts +13 -5
- package/es/StateNode.d.ts +8 -5
- package/es/StateNode.js +68 -47
- package/es/actions.d.ts +12 -10
- package/es/actions.js +7 -9
- package/es/interpreter.d.ts +29 -20
- package/es/interpreter.js +31 -61
- package/es/invokeUtils.d.ts +7 -0
- package/es/invokeUtils.js +39 -0
- package/es/serviceScope.d.ts +10 -0
- package/es/serviceScope.js +18 -0
- package/es/stateUtils.d.ts +1 -1
- package/es/types.d.ts +59 -37
- package/es/utils.d.ts +4 -3
- package/es/utils.js +12 -3
- package/lib/Actor.d.ts +5 -3
- package/lib/Actor.js +24 -3
- package/lib/Machine.d.ts +4 -1
- package/lib/Machine.js +1 -0
- package/lib/SimulatedClock.js +1 -0
- package/lib/State.d.ts +13 -5
- package/lib/State.js +1 -0
- package/lib/StateNode.d.ts +8 -5
- package/lib/StateNode.js +73 -47
- package/lib/actionTypes.js +1 -0
- package/lib/actions.d.ts +12 -10
- package/lib/actions.js +6 -17
- package/lib/constants.js +1 -0
- package/lib/devTools.js +1 -0
- package/lib/each.js +1 -0
- package/lib/environment.js +1 -0
- package/lib/index.js +28 -20
- package/lib/interpreter.d.ts +29 -20
- package/lib/interpreter.js +32 -51
- package/lib/invokeUtils.d.ts +7 -0
- package/lib/invokeUtils.js +42 -0
- package/lib/json.js +1 -0
- package/lib/mapState.js +1 -0
- package/lib/match.js +1 -0
- package/lib/patterns.js +1 -0
- package/lib/registry.js +1 -0
- package/lib/scheduler.js +1 -0
- package/lib/scxml.js +1 -0
- package/lib/serviceScope.d.ts +10 -0
- package/lib/serviceScope.js +15 -0
- package/lib/stateUtils.d.ts +1 -1
- package/lib/stateUtils.js +1 -0
- package/lib/types.d.ts +59 -37
- package/lib/types.js +1 -0
- package/lib/utils.d.ts +4 -3
- package/lib/utils.js +9 -2
- package/package.json +4 -4
package/lib/actions.js
CHANGED
|
@@ -10,17 +10,6 @@ var __assign = (this && this.__assign) || function () {
|
|
|
10
10
|
};
|
|
11
11
|
return __assign.apply(this, arguments);
|
|
12
12
|
};
|
|
13
|
-
var __rest = (this && this.__rest) || function (s, e) {
|
|
14
|
-
var t = {};
|
|
15
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
16
|
-
t[p] = s[p];
|
|
17
|
-
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
18
|
-
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
19
|
-
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
20
|
-
t[p[i]] = s[p[i]];
|
|
21
|
-
}
|
|
22
|
-
return t;
|
|
23
|
-
};
|
|
24
13
|
var __read = (this && this.__read) || function (o, n) {
|
|
25
14
|
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
26
15
|
if (!m) return o;
|
|
@@ -38,11 +27,11 @@ var __read = (this && this.__read) || function (o, n) {
|
|
|
38
27
|
return ar;
|
|
39
28
|
};
|
|
40
29
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
30
|
+
exports.resolveActions = exports.choose = exports.escalate = exports.forwardTo = exports.pure = exports.error = exports.doneInvoke = exports.done = exports.after = exports.isActionObject = exports.assign = exports.stop = exports.start = exports.cancel = exports.resolveLog = exports.log = exports.respond = exports.sendUpdate = exports.sendParent = exports.resolveSend = exports.send = exports.resolveRaise = exports.raise = exports.toActivityDefinition = exports.toActionObjects = exports.toActionObject = exports.getActionFunction = exports.initEvent = exports.actionTypes = void 0;
|
|
41
31
|
var types_1 = require("./types");
|
|
42
32
|
var actionTypes = require("./actionTypes");
|
|
43
33
|
exports.actionTypes = actionTypes;
|
|
44
34
|
var utils_1 = require("./utils");
|
|
45
|
-
var utils_2 = require("./utils");
|
|
46
35
|
var environment_1 = require("./environment");
|
|
47
36
|
exports.initEvent = utils_1.toSCXMLEvent({ type: actionTypes.init });
|
|
48
37
|
function getActionFunction(actionType, actionFunctionMap) {
|
|
@@ -81,8 +70,8 @@ function toActionObject(action, actionFunctionMap) {
|
|
|
81
70
|
actionObject = __assign(__assign({}, action), { exec: exec });
|
|
82
71
|
}
|
|
83
72
|
else if (exec) {
|
|
84
|
-
var
|
|
85
|
-
actionObject = __assign(__assign({
|
|
73
|
+
var actionType = exec.type || action.type;
|
|
74
|
+
actionObject = __assign(__assign(__assign({}, exec), action), { type: actionType });
|
|
86
75
|
}
|
|
87
76
|
else {
|
|
88
77
|
actionObject = action;
|
|
@@ -100,7 +89,7 @@ exports.toActionObjects = function (action, actionFunctionMap) {
|
|
|
100
89
|
if (!action) {
|
|
101
90
|
return [];
|
|
102
91
|
}
|
|
103
|
-
var actions =
|
|
92
|
+
var actions = utils_1.isArray(action) ? action : [action];
|
|
104
93
|
return actions.map(function (subAction) {
|
|
105
94
|
return toActionObject(subAction, actionFunctionMap);
|
|
106
95
|
});
|
|
@@ -426,7 +415,7 @@ function resolveActions(machine, currentState, currentContext, _event, actions)
|
|
|
426
415
|
if (!matchedActions) {
|
|
427
416
|
return [];
|
|
428
417
|
}
|
|
429
|
-
var resolved = resolveActions(machine, currentState, updatedContext, _event, exports.toActionObjects(utils_1.toArray(matchedActions)));
|
|
418
|
+
var resolved = resolveActions(machine, currentState, updatedContext, _event, exports.toActionObjects(utils_1.toArray(matchedActions), machine.options.actions));
|
|
430
419
|
updatedContext = resolved[1];
|
|
431
420
|
return resolved[0];
|
|
432
421
|
}
|
|
@@ -435,7 +424,7 @@ function resolveActions(machine, currentState, currentContext, _event, actions)
|
|
|
435
424
|
if (!matchedActions) {
|
|
436
425
|
return [];
|
|
437
426
|
}
|
|
438
|
-
var resolved = resolveActions(machine, currentState, updatedContext, _event, exports.toActionObjects(utils_1.toArray(matchedActions)));
|
|
427
|
+
var resolved = resolveActions(machine, currentState, updatedContext, _event, exports.toActionObjects(utils_1.toArray(matchedActions), machine.options.actions));
|
|
439
428
|
updatedContext = resolved[1];
|
|
440
429
|
return resolved[0];
|
|
441
430
|
}
|
package/lib/constants.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TARGETLESS_KEY = exports.DEFAULT_GUARD_TYPE = exports.EMPTY_ACTIVITY_MAP = exports.STATE_DELIMITER = void 0;
|
|
3
4
|
exports.STATE_DELIMITER = '.';
|
|
4
5
|
exports.EMPTY_ACTIVITY_MAP = {};
|
|
5
6
|
exports.DEFAULT_GUARD_TYPE = 'xstate.guard';
|
package/lib/devTools.js
CHANGED
package/lib/each.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.each = void 0;
|
|
3
4
|
function each(collection, item, indexOrActions, maybeActions) {
|
|
4
5
|
var actions = maybeActions || indexOrActions;
|
|
5
6
|
var index = maybeActions ? indexOrActions : undefined;
|
package/lib/environment.js
CHANGED
package/lib/index.js
CHANGED
|
@@ -1,32 +1,40 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
function
|
|
3
|
-
|
|
4
|
-
}
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
10
|
+
for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);
|
|
11
|
+
};
|
|
5
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.createMachine = exports.doneInvoke = exports.spawn = exports.matchState = exports.Interpreter = exports.interpret = exports.forwardTo = exports.sendUpdate = exports.sendParent = exports.send = exports.assign = exports.actions = exports.mapState = exports.matchesState = exports.State = exports.StateNode = exports.Machine = void 0;
|
|
6
14
|
var utils_1 = require("./utils");
|
|
7
|
-
exports
|
|
15
|
+
Object.defineProperty(exports, "matchesState", { enumerable: true, get: function () { return utils_1.matchesState; } });
|
|
8
16
|
var mapState_1 = require("./mapState");
|
|
9
|
-
exports
|
|
17
|
+
Object.defineProperty(exports, "mapState", { enumerable: true, get: function () { return mapState_1.mapState; } });
|
|
10
18
|
var StateNode_1 = require("./StateNode");
|
|
11
|
-
exports
|
|
19
|
+
Object.defineProperty(exports, "StateNode", { enumerable: true, get: function () { return StateNode_1.StateNode; } });
|
|
12
20
|
var State_1 = require("./State");
|
|
13
|
-
exports
|
|
21
|
+
Object.defineProperty(exports, "State", { enumerable: true, get: function () { return State_1.State; } });
|
|
14
22
|
var Machine_1 = require("./Machine");
|
|
15
|
-
exports
|
|
16
|
-
exports
|
|
23
|
+
Object.defineProperty(exports, "Machine", { enumerable: true, get: function () { return Machine_1.Machine; } });
|
|
24
|
+
Object.defineProperty(exports, "createMachine", { enumerable: true, get: function () { return Machine_1.createMachine; } });
|
|
17
25
|
var actions_1 = require("./actions");
|
|
18
|
-
exports
|
|
19
|
-
exports
|
|
20
|
-
exports
|
|
21
|
-
exports
|
|
22
|
-
exports
|
|
23
|
-
exports
|
|
26
|
+
Object.defineProperty(exports, "send", { enumerable: true, get: function () { return actions_1.send; } });
|
|
27
|
+
Object.defineProperty(exports, "sendParent", { enumerable: true, get: function () { return actions_1.sendParent; } });
|
|
28
|
+
Object.defineProperty(exports, "sendUpdate", { enumerable: true, get: function () { return actions_1.sendUpdate; } });
|
|
29
|
+
Object.defineProperty(exports, "assign", { enumerable: true, get: function () { return actions_1.assign; } });
|
|
30
|
+
Object.defineProperty(exports, "doneInvoke", { enumerable: true, get: function () { return actions_1.doneInvoke; } });
|
|
31
|
+
Object.defineProperty(exports, "forwardTo", { enumerable: true, get: function () { return actions_1.forwardTo; } });
|
|
24
32
|
var interpreter_1 = require("./interpreter");
|
|
25
|
-
exports
|
|
26
|
-
exports
|
|
27
|
-
exports
|
|
33
|
+
Object.defineProperty(exports, "interpret", { enumerable: true, get: function () { return interpreter_1.interpret; } });
|
|
34
|
+
Object.defineProperty(exports, "Interpreter", { enumerable: true, get: function () { return interpreter_1.Interpreter; } });
|
|
35
|
+
Object.defineProperty(exports, "spawn", { enumerable: true, get: function () { return interpreter_1.spawn; } });
|
|
28
36
|
var match_1 = require("./match");
|
|
29
|
-
exports
|
|
37
|
+
Object.defineProperty(exports, "matchState", { enumerable: true, get: function () { return match_1.matchState; } });
|
|
30
38
|
var actions = {
|
|
31
39
|
raise: actions_1.raise,
|
|
32
40
|
send: actions_1.send,
|
|
@@ -46,4 +54,4 @@ var actions = {
|
|
|
46
54
|
pure: actions_1.pure
|
|
47
55
|
};
|
|
48
56
|
exports.actions = actions;
|
|
49
|
-
|
|
57
|
+
__exportStar(require("./types"), exports);
|
package/lib/interpreter.d.ts
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
import { StateMachine, Event, EventObject, DefaultContext, StateSchema, StateValue, InterpreterOptions, DoneEvent, Unsubscribable, MachineOptions, SCXML, EventData, Observer, Spawnable, Typestate } from './types';
|
|
1
|
+
import { StateMachine, Event, EventObject, DefaultContext, StateSchema, StateValue, InterpreterOptions, SingleOrArray, DoneEvent, Unsubscribable, MachineOptions, SCXML, EventData, Observer, Spawnable, Typestate } from './types';
|
|
2
2
|
import { State } from './State';
|
|
3
3
|
import { Actor } from './Actor';
|
|
4
|
-
export declare type StateListener<TContext, TEvent extends EventObject,
|
|
4
|
+
export declare type StateListener<TContext, TEvent extends EventObject, TStateSchema extends StateSchema<TContext> = any, TTypestate extends Typestate<TContext> = {
|
|
5
|
+
value: any;
|
|
6
|
+
context: TContext;
|
|
7
|
+
}> = (state: State<TContext, TEvent, TStateSchema, TTypestate>, event: TEvent) => void;
|
|
5
8
|
export declare type ContextListener<TContext = DefaultContext> = (context: TContext, prevContext: TContext | undefined) => void;
|
|
6
9
|
export declare type EventListener<TEvent extends EventObject = EventObject> = (event: TEvent) => void;
|
|
7
10
|
export declare type Listener = () => void;
|
|
@@ -14,7 +17,10 @@ interface SpawnOptions {
|
|
|
14
17
|
autoForward?: boolean;
|
|
15
18
|
sync?: boolean;
|
|
16
19
|
}
|
|
17
|
-
export declare class Interpreter<TContext, TStateSchema extends StateSchema = any, TEvent extends EventObject = EventObject, TTypestate extends Typestate<TContext> =
|
|
20
|
+
export declare class Interpreter<TContext, TStateSchema extends StateSchema = any, TEvent extends EventObject = EventObject, TTypestate extends Typestate<TContext> = {
|
|
21
|
+
value: any;
|
|
22
|
+
context: TContext;
|
|
23
|
+
}> implements Actor<State<TContext, TEvent, TStateSchema, TTypestate>, TEvent> {
|
|
18
24
|
machine: StateMachine<TContext, TStateSchema, TEvent, TTypestate>;
|
|
19
25
|
/**
|
|
20
26
|
* The default interpreter options:
|
|
@@ -63,8 +69,8 @@ export declare class Interpreter<TContext, TStateSchema extends StateSchema = an
|
|
|
63
69
|
* @param options Interpreter options
|
|
64
70
|
*/
|
|
65
71
|
constructor(machine: StateMachine<TContext, TStateSchema, TEvent, TTypestate>, options?: Partial<InterpreterOptions>);
|
|
66
|
-
get initialState(): State<TContext, TEvent>;
|
|
67
|
-
get state(): State<TContext, TEvent,
|
|
72
|
+
get initialState(): State<TContext, TEvent, TStateSchema, TTypestate>;
|
|
73
|
+
get state(): State<TContext, TEvent, TStateSchema, TTypestate>;
|
|
68
74
|
static interpret: typeof interpret;
|
|
69
75
|
/**
|
|
70
76
|
* Executes the actions of the given state, with that state's `context` and `event`.
|
|
@@ -72,56 +78,56 @@ export declare class Interpreter<TContext, TStateSchema extends StateSchema = an
|
|
|
72
78
|
* @param state The state whose actions will be executed
|
|
73
79
|
* @param actionsConfig The action implementations to use
|
|
74
80
|
*/
|
|
75
|
-
execute(state: State<TContext, TEvent>, actionsConfig?: MachineOptions<TContext, TEvent>['actions']): void;
|
|
81
|
+
execute(state: State<TContext, TEvent, TStateSchema, TTypestate>, actionsConfig?: MachineOptions<TContext, TEvent>['actions']): void;
|
|
76
82
|
private update;
|
|
77
|
-
onTransition(listener: StateListener<TContext, TEvent, TTypestate>): this;
|
|
83
|
+
onTransition(listener: StateListener<TContext, TEvent, TStateSchema, TTypestate>): this;
|
|
78
84
|
subscribe(observer: Observer<State<TContext, TEvent, any, TTypestate>>): Unsubscribable;
|
|
79
85
|
subscribe(nextListener?: (state: State<TContext, TEvent, any, TTypestate>) => void, errorListener?: (error: any) => void, completeListener?: () => void): Unsubscribable;
|
|
80
86
|
/**
|
|
81
87
|
* Adds an event listener that is notified whenever an event is sent to the running interpreter.
|
|
82
88
|
* @param listener The event listener
|
|
83
89
|
*/
|
|
84
|
-
onEvent(listener: EventListener): Interpreter<TContext, TStateSchema, TEvent>;
|
|
90
|
+
onEvent(listener: EventListener): Interpreter<TContext, TStateSchema, TEvent, TTypestate>;
|
|
85
91
|
/**
|
|
86
92
|
* Adds an event listener that is notified whenever a `send` event occurs.
|
|
87
93
|
* @param listener The event listener
|
|
88
94
|
*/
|
|
89
|
-
onSend(listener: EventListener): Interpreter<TContext, TStateSchema, TEvent>;
|
|
95
|
+
onSend(listener: EventListener): Interpreter<TContext, TStateSchema, TEvent, TTypestate>;
|
|
90
96
|
/**
|
|
91
97
|
* Adds a context listener that is notified whenever the state context changes.
|
|
92
98
|
* @param listener The context listener
|
|
93
99
|
*/
|
|
94
|
-
onChange(listener: ContextListener<TContext>): Interpreter<TContext, TStateSchema, TEvent>;
|
|
100
|
+
onChange(listener: ContextListener<TContext>): Interpreter<TContext, TStateSchema, TEvent, TTypestate>;
|
|
95
101
|
/**
|
|
96
102
|
* Adds a listener that is notified when the machine is stopped.
|
|
97
103
|
* @param listener The listener
|
|
98
104
|
*/
|
|
99
|
-
onStop(listener: Listener): Interpreter<TContext, TStateSchema, TEvent>;
|
|
105
|
+
onStop(listener: Listener): Interpreter<TContext, TStateSchema, TEvent, TTypestate>;
|
|
100
106
|
/**
|
|
101
107
|
* Adds a state listener that is notified when the statechart has reached its final state.
|
|
102
108
|
* @param listener The state listener
|
|
103
109
|
*/
|
|
104
|
-
onDone(listener: EventListener<DoneEvent>): Interpreter<TContext, TStateSchema, TEvent>;
|
|
110
|
+
onDone(listener: EventListener<DoneEvent>): Interpreter<TContext, TStateSchema, TEvent, TTypestate>;
|
|
105
111
|
/**
|
|
106
112
|
* Removes a listener.
|
|
107
113
|
* @param listener The listener to remove
|
|
108
114
|
*/
|
|
109
|
-
off(listener: (...args: any[]) => void): Interpreter<TContext, TStateSchema, TEvent>;
|
|
115
|
+
off(listener: (...args: any[]) => void): Interpreter<TContext, TStateSchema, TEvent, TTypestate>;
|
|
110
116
|
/**
|
|
111
117
|
* Alias for Interpreter.prototype.start
|
|
112
118
|
*/
|
|
113
|
-
init: (initialState?: string | import("./types").StateValueMap | State<TContext, TEvent,
|
|
119
|
+
init: (initialState?: string | import("./types").StateValueMap | State<TContext, TEvent, TStateSchema, TTypestate> | undefined) => Interpreter<TContext, TStateSchema, TEvent, TTypestate>;
|
|
114
120
|
/**
|
|
115
121
|
* Starts the interpreter from the given state, or the initial state.
|
|
116
122
|
* @param initialState The state to start the statechart from
|
|
117
123
|
*/
|
|
118
|
-
start(initialState?: State<TContext, TEvent> | StateValue): Interpreter<TContext, TStateSchema, TEvent, TTypestate>;
|
|
124
|
+
start(initialState?: State<TContext, TEvent, TStateSchema, TTypestate> | StateValue): Interpreter<TContext, TStateSchema, TEvent, TTypestate>;
|
|
119
125
|
/**
|
|
120
126
|
* Stops the interpreter and unsubscribe all listeners.
|
|
121
127
|
*
|
|
122
128
|
* This will also notify the `onStop` listeners.
|
|
123
129
|
*/
|
|
124
|
-
stop(): Interpreter<TContext, TStateSchema, TEvent>;
|
|
130
|
+
stop(): Interpreter<TContext, TStateSchema, TEvent, TTypestate>;
|
|
125
131
|
/**
|
|
126
132
|
* Sends an event to the running interpreter to trigger a transition.
|
|
127
133
|
*
|
|
@@ -131,14 +137,14 @@ export declare class Interpreter<TContext, TStateSchema extends StateSchema = an
|
|
|
131
137
|
*
|
|
132
138
|
* @param event The event(s) to send
|
|
133
139
|
*/
|
|
134
|
-
send: (event:
|
|
140
|
+
send: (event: SingleOrArray<Event<TEvent>> | SCXML.Event<TEvent>, payload?: EventData | undefined) => State<TContext, TEvent, TStateSchema, TTypestate>;
|
|
135
141
|
private batch;
|
|
136
142
|
/**
|
|
137
143
|
* Returns a send function bound to this interpreter instance.
|
|
138
144
|
*
|
|
139
145
|
* @param event The event to be sent by the sender.
|
|
140
146
|
*/
|
|
141
|
-
sender(event: Event<TEvent>): () => State<TContext, TEvent>;
|
|
147
|
+
sender(event: Event<TEvent>): () => State<TContext, TEvent, TStateSchema, TTypestate>;
|
|
142
148
|
private sendTo;
|
|
143
149
|
/**
|
|
144
150
|
* Returns the next state given the interpreter's current state and the event.
|
|
@@ -147,7 +153,7 @@ export declare class Interpreter<TContext, TStateSchema extends StateSchema = an
|
|
|
147
153
|
*
|
|
148
154
|
* @param event The event to determine the next state
|
|
149
155
|
*/
|
|
150
|
-
nextState(event: Event<TEvent> | SCXML.Event<TEvent>): State<TContext, TEvent>;
|
|
156
|
+
nextState(event: Event<TEvent> | SCXML.Event<TEvent>): State<TContext, TEvent, TStateSchema, TTypestate>;
|
|
151
157
|
private forward;
|
|
152
158
|
private defer;
|
|
153
159
|
private cancel;
|
|
@@ -179,6 +185,9 @@ export declare function spawn(entity: Spawnable, nameOrOptions?: string | SpawnO
|
|
|
179
185
|
* @param machine The machine to interpret
|
|
180
186
|
* @param options Interpreter options
|
|
181
187
|
*/
|
|
182
|
-
export declare function interpret<TContext = DefaultContext, TStateSchema extends StateSchema = any, TEvent extends EventObject = EventObject, TTypestate extends Typestate<TContext> =
|
|
188
|
+
export declare function interpret<TContext = DefaultContext, TStateSchema extends StateSchema = any, TEvent extends EventObject = EventObject, TTypestate extends Typestate<TContext> = {
|
|
189
|
+
value: any;
|
|
190
|
+
context: TContext;
|
|
191
|
+
}>(machine: StateMachine<TContext, TStateSchema, TEvent, TTypestate>, options?: Partial<InterpreterOptions>): Interpreter<TContext, TStateSchema, TEvent, TTypestate>;
|
|
183
192
|
export {};
|
|
184
193
|
//# sourceMappingURL=interpreter.d.ts.map
|
package/lib/interpreter.js
CHANGED
|
@@ -42,6 +42,7 @@ var __spread = (this && this.__spread) || function () {
|
|
|
42
42
|
return ar;
|
|
43
43
|
};
|
|
44
44
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
|
+
exports.interpret = exports.spawn = exports.Interpreter = void 0;
|
|
45
46
|
var types_1 = require("./types");
|
|
46
47
|
var State_1 = require("./State");
|
|
47
48
|
var actionTypes = require("./actionTypes");
|
|
@@ -53,22 +54,8 @@ var Actor_1 = require("./Actor");
|
|
|
53
54
|
var stateUtils_1 = require("./stateUtils");
|
|
54
55
|
var registry_1 = require("./registry");
|
|
55
56
|
var devTools_1 = require("./devTools");
|
|
57
|
+
var serviceScope = require("./serviceScope");
|
|
56
58
|
var DEFAULT_SPAWN_OPTIONS = { sync: false, autoForward: false };
|
|
57
|
-
/**
|
|
58
|
-
* Maintains a stack of the current service in scope.
|
|
59
|
-
* This is used to provide the correct service to spawn().
|
|
60
|
-
*
|
|
61
|
-
* @private
|
|
62
|
-
*/
|
|
63
|
-
var withServiceScope = (function () {
|
|
64
|
-
var serviceStack = [];
|
|
65
|
-
return function (service, fn) {
|
|
66
|
-
service && serviceStack.push(service);
|
|
67
|
-
var result = fn(service || serviceStack[serviceStack.length - 1]);
|
|
68
|
-
service && serviceStack.pop();
|
|
69
|
-
return result;
|
|
70
|
-
};
|
|
71
|
-
})();
|
|
72
59
|
var InterpreterStatus;
|
|
73
60
|
(function (InterpreterStatus) {
|
|
74
61
|
InterpreterStatus[InterpreterStatus["NotStarted"] = 0] = "NotStarted";
|
|
@@ -191,12 +178,12 @@ var Interpreter = /** @class */ (function () {
|
|
|
191
178
|
if (this._initialState) {
|
|
192
179
|
return this._initialState;
|
|
193
180
|
}
|
|
194
|
-
return
|
|
181
|
+
return serviceScope.provide(this, function () {
|
|
195
182
|
_this._initialState = _this.machine.initialState;
|
|
196
183
|
return _this._initialState;
|
|
197
184
|
});
|
|
198
185
|
},
|
|
199
|
-
enumerable:
|
|
186
|
+
enumerable: false,
|
|
200
187
|
configurable: true
|
|
201
188
|
});
|
|
202
189
|
Object.defineProperty(Interpreter.prototype, "state", {
|
|
@@ -206,7 +193,7 @@ var Interpreter = /** @class */ (function () {
|
|
|
206
193
|
}
|
|
207
194
|
return this._state;
|
|
208
195
|
},
|
|
209
|
-
enumerable:
|
|
196
|
+
enumerable: false,
|
|
210
197
|
configurable: true
|
|
211
198
|
});
|
|
212
199
|
/**
|
|
@@ -292,8 +279,8 @@ var Interpreter = /** @class */ (function () {
|
|
|
292
279
|
if (this.state.configuration && isDone) {
|
|
293
280
|
// get final child state node
|
|
294
281
|
var finalChildStateNode = state.configuration.find(function (sn) { return sn.type === 'final' && sn.parent === _this.machine; });
|
|
295
|
-
var doneData = finalChildStateNode && finalChildStateNode.
|
|
296
|
-
? utils_1.mapContext(finalChildStateNode.
|
|
282
|
+
var doneData = finalChildStateNode && finalChildStateNode.doneData
|
|
283
|
+
? utils_1.mapContext(finalChildStateNode.doneData, state.context, _event)
|
|
297
284
|
: undefined;
|
|
298
285
|
try {
|
|
299
286
|
for (var _l = __values(this.doneListeners), _m = _l.next(); !_m.done; _m = _l.next()) {
|
|
@@ -325,9 +312,8 @@ var Interpreter = /** @class */ (function () {
|
|
|
325
312
|
}
|
|
326
313
|
return this;
|
|
327
314
|
};
|
|
328
|
-
Interpreter.prototype.subscribe = function (nextListenerOrObserver,
|
|
329
|
-
|
|
330
|
-
errorListener, completeListener) {
|
|
315
|
+
Interpreter.prototype.subscribe = function (nextListenerOrObserver, _, // TODO: error listener
|
|
316
|
+
completeListener) {
|
|
331
317
|
var _this = this;
|
|
332
318
|
if (!nextListenerOrObserver) {
|
|
333
319
|
return { unsubscribe: function () { return void 0; } };
|
|
@@ -425,7 +411,7 @@ var Interpreter = /** @class */ (function () {
|
|
|
425
411
|
this._status = InterpreterStatus.Running;
|
|
426
412
|
var resolvedState = initialState === undefined
|
|
427
413
|
? this.initialState
|
|
428
|
-
:
|
|
414
|
+
: serviceScope.provide(this, function () {
|
|
429
415
|
return State_1.isState(initialState)
|
|
430
416
|
? _this.machine.resolveState(initialState)
|
|
431
417
|
: _this.machine.resolveState(State_1.State.from(initialState, _this.machine.context));
|
|
@@ -547,7 +533,7 @@ var Interpreter = /** @class */ (function () {
|
|
|
547
533
|
var _loop_1 = function (event_1) {
|
|
548
534
|
var _event = utils_1.toSCXMLEvent(event_1);
|
|
549
535
|
_this.forward(_event);
|
|
550
|
-
nextState =
|
|
536
|
+
nextState = serviceScope.provide(_this, function () {
|
|
551
537
|
return _this.machine.transition(nextState, _event);
|
|
552
538
|
});
|
|
553
539
|
batchedActions.push.apply(batchedActions, __spread(nextState.actions.map(function (a) {
|
|
@@ -595,7 +581,7 @@ var Interpreter = /** @class */ (function () {
|
|
|
595
581
|
!this.state.nextEvents.some(function (nextEvent) { return nextEvent.indexOf(actionTypes.errorPlatform) === 0; })) {
|
|
596
582
|
throw _event.data.data;
|
|
597
583
|
}
|
|
598
|
-
var nextState =
|
|
584
|
+
var nextState = serviceScope.provide(this, function () {
|
|
599
585
|
return _this.machine.transition(_this.state, _event);
|
|
600
586
|
});
|
|
601
587
|
return nextState;
|
|
@@ -636,8 +622,10 @@ var Interpreter = /** @class */ (function () {
|
|
|
636
622
|
delete this.delayedEventsMap[sendId];
|
|
637
623
|
};
|
|
638
624
|
Interpreter.prototype.exec = function (action, state, actionFunctionMap) {
|
|
625
|
+
if (actionFunctionMap === void 0) { actionFunctionMap = this.machine
|
|
626
|
+
.options.actions; }
|
|
639
627
|
var context = state.context, _event = state._event;
|
|
640
|
-
var actionOrExec = actions_1.getActionFunction(action.type, actionFunctionMap)
|
|
628
|
+
var actionOrExec = action.exec || actions_1.getActionFunction(action.type, actionFunctionMap);
|
|
641
629
|
var exec = utils_1.isFunction(actionOrExec)
|
|
642
630
|
? actionOrExec
|
|
643
631
|
: actionOrExec
|
|
@@ -686,14 +674,14 @@ var Interpreter = /** @class */ (function () {
|
|
|
686
674
|
// If the activity will be stopped right after it's started
|
|
687
675
|
// (such as in transient states)
|
|
688
676
|
// don't bother starting the activity.
|
|
689
|
-
if (!this.state.activities[activity.type]) {
|
|
677
|
+
if (!this.state.activities[activity.id || activity.type]) {
|
|
690
678
|
break;
|
|
691
679
|
}
|
|
692
680
|
// Invoked services
|
|
693
681
|
if (activity.type === types_1.ActionTypes.Invoke) {
|
|
694
|
-
var
|
|
695
|
-
|
|
696
|
-
? this.machine.options.services[
|
|
682
|
+
var invokeSource = utils_1.toInvokeSource(activity.src);
|
|
683
|
+
var serviceCreator = this.machine.options.services
|
|
684
|
+
? this.machine.options.services[invokeSource.type]
|
|
697
685
|
: undefined;
|
|
698
686
|
var id = activity.id, data = activity.data;
|
|
699
687
|
if (!environment_1.IS_PRODUCTION) {
|
|
@@ -712,8 +700,14 @@ var Interpreter = /** @class */ (function () {
|
|
|
712
700
|
}
|
|
713
701
|
return;
|
|
714
702
|
}
|
|
703
|
+
var resolvedData = data
|
|
704
|
+
? utils_1.mapContext(data, context, _event)
|
|
705
|
+
: undefined;
|
|
715
706
|
var source = utils_1.isFunction(serviceCreator)
|
|
716
|
-
? serviceCreator(context, _event.data
|
|
707
|
+
? serviceCreator(context, _event.data, {
|
|
708
|
+
data: resolvedData,
|
|
709
|
+
src: invokeSource
|
|
710
|
+
})
|
|
717
711
|
: serviceCreator;
|
|
718
712
|
if (utils_1.isPromiseLike(source)) {
|
|
719
713
|
this.state.children[id] = this.spawnPromise(Promise.resolve(source), id);
|
|
@@ -726,9 +720,7 @@ var Interpreter = /** @class */ (function () {
|
|
|
726
720
|
}
|
|
727
721
|
else if (utils_1.isMachine(source)) {
|
|
728
722
|
// TODO: try/catch here
|
|
729
|
-
this.state.children[id] = this.spawnMachine(
|
|
730
|
-
? source.withContext(utils_1.mapContext(data, context, _event))
|
|
731
|
-
: source, {
|
|
723
|
+
this.state.children[id] = this.spawnMachine(resolvedData ? source.withContext(resolvedData) : source, {
|
|
732
724
|
id: id,
|
|
733
725
|
autoForward: autoForward
|
|
734
726
|
});
|
|
@@ -1044,23 +1036,11 @@ var Interpreter = /** @class */ (function () {
|
|
|
1044
1036
|
},
|
|
1045
1037
|
logger: global.console.log.bind(console),
|
|
1046
1038
|
devTools: false
|
|
1047
|
-
}); })(typeof
|
|
1039
|
+
}); })(typeof self !== 'undefined' ? self : global);
|
|
1048
1040
|
Interpreter.interpret = interpret;
|
|
1049
1041
|
return Interpreter;
|
|
1050
1042
|
}());
|
|
1051
1043
|
exports.Interpreter = Interpreter;
|
|
1052
|
-
var createNullActor = function (name) {
|
|
1053
|
-
if (name === void 0) { name = 'null'; }
|
|
1054
|
-
return ({
|
|
1055
|
-
id: name,
|
|
1056
|
-
send: function () { return void 0; },
|
|
1057
|
-
subscribe: function () {
|
|
1058
|
-
// tslint:disable-next-line:no-empty
|
|
1059
|
-
return { unsubscribe: function () { } };
|
|
1060
|
-
},
|
|
1061
|
-
toJSON: function () { return ({ id: name }); }
|
|
1062
|
-
});
|
|
1063
|
-
};
|
|
1064
1044
|
var resolveSpawnOptions = function (nameOrOptions) {
|
|
1065
1045
|
if (utils_1.isString(nameOrOptions)) {
|
|
1066
1046
|
return __assign(__assign({}, DEFAULT_SPAWN_OPTIONS), { name: nameOrOptions });
|
|
@@ -1069,15 +1049,16 @@ var resolveSpawnOptions = function (nameOrOptions) {
|
|
|
1069
1049
|
};
|
|
1070
1050
|
function spawn(entity, nameOrOptions) {
|
|
1071
1051
|
var resolvedOptions = resolveSpawnOptions(nameOrOptions);
|
|
1072
|
-
return
|
|
1052
|
+
return serviceScope.consume(function (service) {
|
|
1073
1053
|
if (!environment_1.IS_PRODUCTION) {
|
|
1074
|
-
|
|
1054
|
+
var isLazyEntity = utils_1.isMachine(entity) || utils_1.isFunction(entity);
|
|
1055
|
+
utils_1.warn(!!service || isLazyEntity, "Attempted to spawn an Actor (ID: \"" + (utils_1.isMachine(entity) ? entity.id : 'undefined') + "\") outside of a service. This will have no effect.");
|
|
1075
1056
|
}
|
|
1076
1057
|
if (service) {
|
|
1077
1058
|
return service.spawn(entity, resolvedOptions.name, resolvedOptions);
|
|
1078
1059
|
}
|
|
1079
1060
|
else {
|
|
1080
|
-
return
|
|
1061
|
+
return Actor_1.createDeferredActor(entity, resolvedOptions.name);
|
|
1081
1062
|
}
|
|
1082
1063
|
});
|
|
1083
1064
|
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { EventObject, InvokeConfig, InvokeDefinition, InvokeSourceDefinition } from './types';
|
|
2
|
+
export declare function toInvokeSource(src: string | InvokeSourceDefinition): InvokeSourceDefinition;
|
|
3
|
+
export declare function toInvokeDefinition<TContext, TEvent extends EventObject>(invokeConfig: InvokeConfig<TContext, TEvent> & {
|
|
4
|
+
src: string | InvokeSourceDefinition;
|
|
5
|
+
id: string;
|
|
6
|
+
}): InvokeDefinition<TContext, TEvent>;
|
|
7
|
+
//# sourceMappingURL=invokeUtils.d.ts.map
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
14
|
+
var t = {};
|
|
15
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
16
|
+
t[p] = s[p];
|
|
17
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
18
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
19
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
20
|
+
t[p[i]] = s[p[i]];
|
|
21
|
+
}
|
|
22
|
+
return t;
|
|
23
|
+
};
|
|
24
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
+
exports.toInvokeDefinition = exports.toInvokeSource = void 0;
|
|
26
|
+
var actions_1 = require("./actions");
|
|
27
|
+
function toInvokeSource(src) {
|
|
28
|
+
if (typeof src === 'string') {
|
|
29
|
+
var simpleSrc = { type: src };
|
|
30
|
+
simpleSrc.toString = function () { return src; }; // v4 compat - TODO: remove in v5
|
|
31
|
+
return simpleSrc;
|
|
32
|
+
}
|
|
33
|
+
return src;
|
|
34
|
+
}
|
|
35
|
+
exports.toInvokeSource = toInvokeSource;
|
|
36
|
+
function toInvokeDefinition(invokeConfig) {
|
|
37
|
+
return __assign(__assign({ type: actions_1.actionTypes.invoke }, invokeConfig), { toJSON: function () {
|
|
38
|
+
var onDone = invokeConfig.onDone, onError = invokeConfig.onError, invokeDef = __rest(invokeConfig, ["onDone", "onError"]);
|
|
39
|
+
return __assign(__assign({}, invokeDef), { type: actions_1.actionTypes.invoke, src: toInvokeSource(invokeConfig.src) });
|
|
40
|
+
} });
|
|
41
|
+
}
|
|
42
|
+
exports.toInvokeDefinition = toInvokeDefinition;
|
package/lib/json.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.jsonify = exports.parse = exports.stringify = exports.machineToJSON = exports.stringifyFunction = void 0;
|
|
3
4
|
var utils_1 = require("./utils");
|
|
4
5
|
// tslint:disable-next-line:ban-types
|
|
5
6
|
function stringifyFunction(fn) {
|
package/lib/mapState.js
CHANGED
|
@@ -11,6 +11,7 @@ var __values = (this && this.__values) || function(o) {
|
|
|
11
11
|
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
12
12
|
};
|
|
13
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.mapState = void 0;
|
|
14
15
|
var utils_1 = require("./utils");
|
|
15
16
|
function mapState(stateMap, stateId) {
|
|
16
17
|
var e_1, _a;
|
package/lib/match.js
CHANGED
|
@@ -27,6 +27,7 @@ var __read = (this && this.__read) || function (o, n) {
|
|
|
27
27
|
return ar;
|
|
28
28
|
};
|
|
29
29
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
30
|
+
exports.matchState = void 0;
|
|
30
31
|
var State_1 = require("./State");
|
|
31
32
|
function matchState(state, patterns, defaultValue) {
|
|
32
33
|
var e_1, _a;
|
package/lib/patterns.js
CHANGED
|
@@ -11,6 +11,7 @@ var __assign = (this && this.__assign) || function () {
|
|
|
11
11
|
return __assign.apply(this, arguments);
|
|
12
12
|
};
|
|
13
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.sequence = exports.toggle = void 0;
|
|
14
15
|
var utils_1 = require("./utils");
|
|
15
16
|
function toggle(onState, offState, eventType) {
|
|
16
17
|
var _a, _b, _c;
|
package/lib/registry.js
CHANGED
package/lib/scheduler.js
CHANGED
package/lib/scxml.js
CHANGED
|
@@ -42,6 +42,7 @@ var __values = (this && this.__values) || function(o) {
|
|
|
42
42
|
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
43
43
|
};
|
|
44
44
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
|
+
exports.toMachine = void 0;
|
|
45
46
|
var xml_js_1 = require("xml-js");
|
|
46
47
|
var index_1 = require("./index");
|
|
47
48
|
var utils_1 = require("./utils");
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Interpreter } from './interpreter';
|
|
2
|
+
export declare const provide: <T, TService extends Interpreter<any, any, any, {
|
|
3
|
+
value: any;
|
|
4
|
+
context: any;
|
|
5
|
+
}>>(service: TService | undefined, fn: (service: TService | undefined) => T) => T;
|
|
6
|
+
export declare const consume: <T, TService extends Interpreter<any, any, any, {
|
|
7
|
+
value: any;
|
|
8
|
+
context: any;
|
|
9
|
+
}>>(fn: (service: TService) => T) => T;
|
|
10
|
+
//# sourceMappingURL=serviceScope.d.ts.map
|