xstate 4.30.2 → 4.30.5
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 +32 -0
- package/dist/xstate.interpreter.js +1 -1
- package/dist/xstate.js +1 -1
- package/dist/xstate.web.js +2 -2
- package/es/Machine.d.ts +1 -2
- package/es/SimulatedClock.js +81 -0
- package/es/State.js +18 -13
- package/es/StateNode.js +22 -22
- package/es/actions.js +3 -3
- package/es/behaviors.js +71 -5
- package/es/each.js +13 -0
- package/es/index.d.ts +12 -10
- package/es/index.js +7 -6
- package/es/interpreter.d.ts +2 -0
- package/es/interpreter.js +11 -7
- package/es/invokeUtils.js +5 -5
- package/es/json.js +86 -0
- package/es/mapState.js +2 -2
- package/es/model.js +50 -0
- package/es/patterns.js +48 -0
- package/es/stateUtils.js +2 -2
- package/es/types.d.ts +7 -5
- package/es/utils.d.ts +1 -3
- package/es/utils.js +56 -24
- package/lib/Machine.d.ts +1 -2
- package/lib/SimulatedClock.js +83 -81
- package/lib/State.js +16 -10
- package/lib/StateNode.js +18 -18
- package/lib/actions.js +2 -2
- package/lib/behaviors.js +72 -4
- package/lib/each.js +14 -12
- package/lib/index.d.ts +12 -10
- package/lib/index.js +26 -27
- package/lib/interpreter.d.ts +2 -0
- package/lib/interpreter.js +12 -7
- package/lib/invokeUtils.js +5 -5
- package/lib/json.js +81 -72
- package/lib/mapState.js +1 -1
- package/lib/model.js +49 -69
- package/lib/patterns.js +45 -53
- package/lib/scxml.js +1 -1
- package/lib/stateUtils.js +1 -1
- package/lib/types.d.ts +7 -5
- package/lib/types.js +4 -0
- package/lib/utils.d.ts +1 -3
- package/lib/utils.js +56 -22
- package/package.json +3 -2
package/es/behaviors.js
CHANGED
|
@@ -1,9 +1,75 @@
|
|
|
1
|
-
import './
|
|
2
|
-
import { toObserver } from './utils.js';
|
|
3
|
-
import './types.js';
|
|
4
|
-
import './actionTypes.js';
|
|
1
|
+
import { error, doneInvoke } from './actions.js';
|
|
5
2
|
import { toActorRef } from './Actor.js';
|
|
3
|
+
import { toObserver } from './utils.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Returns an actor behavior from a reducer and its initial state.
|
|
7
|
+
*
|
|
8
|
+
* @param transition The pure reducer that returns the next state given the current state and event.
|
|
9
|
+
* @param initialState The initial state of the reducer.
|
|
10
|
+
* @returns An actor behavior
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
function fromReducer(transition, initialState) {
|
|
14
|
+
return {
|
|
15
|
+
transition: transition,
|
|
16
|
+
initialState: initialState
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
function fromPromise(promiseFn) {
|
|
20
|
+
var initialState = {
|
|
21
|
+
error: undefined,
|
|
22
|
+
data: undefined,
|
|
23
|
+
status: 'pending'
|
|
24
|
+
};
|
|
25
|
+
return {
|
|
26
|
+
transition: function (state, event, _a) {
|
|
27
|
+
var parent = _a.parent,
|
|
28
|
+
id = _a.id,
|
|
29
|
+
observers = _a.observers;
|
|
6
30
|
|
|
31
|
+
switch (event.type) {
|
|
32
|
+
case 'fulfill':
|
|
33
|
+
parent === null || parent === void 0 ? void 0 : parent.send(doneInvoke(id, event.data));
|
|
34
|
+
return {
|
|
35
|
+
error: undefined,
|
|
36
|
+
data: event.data,
|
|
37
|
+
status: 'fulfilled'
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
case 'reject':
|
|
41
|
+
parent === null || parent === void 0 ? void 0 : parent.send(error(id, event.error));
|
|
42
|
+
observers.forEach(function (observer) {
|
|
43
|
+
observer.error(event.error);
|
|
44
|
+
});
|
|
45
|
+
return {
|
|
46
|
+
error: event.error,
|
|
47
|
+
data: undefined,
|
|
48
|
+
status: 'rejected'
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
default:
|
|
52
|
+
return state;
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
initialState: initialState,
|
|
56
|
+
start: function (_a) {
|
|
57
|
+
var self = _a.self;
|
|
58
|
+
promiseFn().then(function (data) {
|
|
59
|
+
self.send({
|
|
60
|
+
type: 'fulfill',
|
|
61
|
+
data: data
|
|
62
|
+
});
|
|
63
|
+
}, function (reason) {
|
|
64
|
+
self.send({
|
|
65
|
+
type: 'reject',
|
|
66
|
+
error: reason
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
return initialState;
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
}
|
|
7
73
|
function spawnBehavior(behavior, options) {
|
|
8
74
|
if (options === void 0) {
|
|
9
75
|
options = {};
|
|
@@ -62,4 +128,4 @@ function spawnBehavior(behavior, options) {
|
|
|
62
128
|
return actor;
|
|
63
129
|
}
|
|
64
130
|
|
|
65
|
-
export { spawnBehavior };
|
|
131
|
+
export { fromPromise, fromReducer, spawnBehavior };
|
package/es/each.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
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/es/index.d.ts
CHANGED
|
@@ -1,17 +1,19 @@
|
|
|
1
|
-
import { matchesState } from './utils';
|
|
2
|
-
import { mapState } from './mapState';
|
|
3
|
-
import { StateNode } from './StateNode';
|
|
4
|
-
import { State } from './State';
|
|
5
|
-
import { Machine, createMachine } from './Machine';
|
|
6
|
-
import { Actor, toActorRef } from './Actor';
|
|
7
1
|
import * as actions from './actions';
|
|
8
|
-
import {
|
|
2
|
+
import { Actor, toActorRef } from './Actor';
|
|
3
|
+
import { interpret, Interpreter, InterpreterStatus, spawn } from './interpreter';
|
|
4
|
+
import { createMachine, Machine } from './Machine';
|
|
5
|
+
import { mapState } from './mapState';
|
|
9
6
|
import { matchState } from './match';
|
|
10
7
|
import { createSchema, t } from './schema';
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
export
|
|
8
|
+
import { State } from './State';
|
|
9
|
+
import { StateNode } from './StateNode';
|
|
10
|
+
export { spawnBehavior } from './behaviors';
|
|
11
|
+
export { XStateDevInterface } from './devTools';
|
|
14
12
|
export * from './typegenTypes';
|
|
13
|
+
export * from './types';
|
|
14
|
+
export { matchesState, toEventObject, toObserver, toSCXMLEvent } from './utils';
|
|
15
|
+
export { Actor, toActorRef, Machine, StateNode, State, mapState, actions, assign, send, sendParent, sendUpdate, 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, sendParent: typeof actions.sendParent, sendUpdate: typeof actions.sendUpdate, forwardTo: typeof actions.forwardTo, doneInvoke: typeof actions.doneInvoke;
|
|
15
17
|
declare global {
|
|
16
18
|
interface SymbolConstructor {
|
|
17
19
|
readonly observable: symbol;
|
package/es/index.js
CHANGED
|
@@ -1,16 +1,17 @@
|
|
|
1
|
-
export { matchesState } from './utils.js';
|
|
2
|
-
export { mapState } from './mapState.js';
|
|
3
|
-
export { ActionTypes, SpecialTargets } from './types.js';
|
|
4
1
|
import { assign as assign$1, send as send$1, sendParent as sendParent$1, sendUpdate as sendUpdate$1, forwardTo as forwardTo$1, doneInvoke as doneInvoke$1 } from './actions.js';
|
|
5
2
|
import * as actions from './actions.js';
|
|
6
3
|
export { actions };
|
|
7
|
-
export { State } from './State.js';
|
|
8
4
|
export { toActorRef } from './Actor.js';
|
|
9
|
-
export { StateNode } from './StateNode.js';
|
|
10
|
-
export { Machine, createMachine } from './Machine.js';
|
|
11
5
|
export { Interpreter, InterpreterStatus, interpret, spawn } from './interpreter.js';
|
|
6
|
+
export { Machine, createMachine } from './Machine.js';
|
|
7
|
+
export { mapState } from './mapState.js';
|
|
12
8
|
export { matchState } from './match.js';
|
|
13
9
|
export { createSchema, t } from './schema.js';
|
|
10
|
+
export { State } from './State.js';
|
|
11
|
+
export { StateNode } from './StateNode.js';
|
|
12
|
+
export { spawnBehavior } from './behaviors.js';
|
|
13
|
+
export { ActionTypes, SpecialTargets } from './types.js';
|
|
14
|
+
export { matchesState, toEventObject, toObserver, toSCXMLEvent } from './utils.js';
|
|
14
15
|
|
|
15
16
|
var assign = assign$1,
|
|
16
17
|
send = send$1,
|
package/es/interpreter.d.ts
CHANGED
|
@@ -23,6 +23,7 @@ export declare enum InterpreterStatus {
|
|
|
23
23
|
Running = 1,
|
|
24
24
|
Stopped = 2
|
|
25
25
|
}
|
|
26
|
+
/** @ts-ignore [symbolObservable] creates problems for people without `skipLibCheck` who are on older versions of TS, remove this comment when we drop support for TS@<4.3 */
|
|
26
27
|
export declare class Interpreter<TContext, TStateSchema extends StateSchema = any, TEvent extends EventObject = EventObject, TTypestate extends Typestate<TContext> = {
|
|
27
28
|
value: any;
|
|
28
29
|
context: TContext;
|
|
@@ -189,6 +190,7 @@ export declare class Interpreter<TContext, TStateSchema extends StateSchema = an
|
|
|
189
190
|
toJSON(): {
|
|
190
191
|
id: string;
|
|
191
192
|
};
|
|
193
|
+
/** @ts-ignore this creates problems for people without `skipLibCheck` who are on older versions of TS, remove this comment when we drop support for TS@<4.3 */
|
|
192
194
|
[symbolObservable](): InteropSubscribable<State<TContext, TEvent, TStateSchema, TTypestate, TResolvedTypesMeta>>;
|
|
193
195
|
getSnapshot(): State<TContext, TEvent, TStateSchema, TTypestate, TResolvedTypesMeta>;
|
|
194
196
|
}
|
package/es/interpreter.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { __values, __spreadArray, __read, __assign } from './_virtual/_tslib.js';
|
|
2
|
-
import { IS_PRODUCTION } from './environment.js';
|
|
3
|
-
import { warn, mapContext, isFunction, keys, toSCXMLEvent, toInvokeSource, isMachine, isPromiseLike, isObservable, isBehavior, reportUnhandledExceptionOnInvocation, symbolObservable, isArray, toEventObject, isString, isActor, uniqueId, toObserver } from './utils.js';
|
|
4
2
|
import { ActionTypes, SpecialTargets } from './types.js';
|
|
5
|
-
import {
|
|
3
|
+
import { isStateConfig, State, bindActionToState } from './State.js';
|
|
6
4
|
import { errorPlatform, log, stop, start, cancel, send, update, error as error$1 } from './actionTypes.js';
|
|
7
5
|
import { doneInvoke, initEvent, getActionFunction, error } from './actions.js';
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import { isSpawnedActor, createDeferredActor } from './Actor.js';
|
|
6
|
+
import { IS_PRODUCTION } from './environment.js';
|
|
7
|
+
import { warn, mapContext, isFunction, toSCXMLEvent, toInvokeSource, isMachine, isPromiseLike, isObservable, isBehavior, reportUnhandledExceptionOnInvocation, symbolObservable, isArray, toEventObject, isString, isActor, uniqueId, toObserver } from './utils.js';
|
|
11
8
|
import { Scheduler } from './scheduler.js';
|
|
9
|
+
import { isSpawnedActor, createDeferredActor } from './Actor.js';
|
|
10
|
+
import { isInFinalState } from './stateUtils.js';
|
|
12
11
|
import { registry } from './registry.js';
|
|
13
12
|
import { registerService, getGlobal } from './devTools.js';
|
|
13
|
+
import { provide, consume } from './serviceScope.js';
|
|
14
14
|
import { spawnBehavior } from './behaviors.js';
|
|
15
15
|
|
|
16
16
|
var DEFAULT_SPAWN_OPTIONS = {
|
|
@@ -24,6 +24,8 @@ var InterpreterStatus;
|
|
|
24
24
|
InterpreterStatus[InterpreterStatus["Running"] = 1] = "Running";
|
|
25
25
|
InterpreterStatus[InterpreterStatus["Stopped"] = 2] = "Stopped";
|
|
26
26
|
})(InterpreterStatus || (InterpreterStatus = {}));
|
|
27
|
+
/** @ts-ignore [symbolObservable] creates problems for people without `skipLibCheck` who are on older versions of TS, remove this comment when we drop support for TS@<4.3 */
|
|
28
|
+
|
|
27
29
|
|
|
28
30
|
var Interpreter =
|
|
29
31
|
/*#__PURE__*/
|
|
@@ -591,7 +593,7 @@ function () {
|
|
|
591
593
|
|
|
592
594
|
try {
|
|
593
595
|
// Cancel all delayed events
|
|
594
|
-
for (var _p = __values(keys(this.delayedEventsMap)), _q = _p.next(); !_q.done; _q = _p.next()) {
|
|
596
|
+
for (var _p = __values(Object.keys(this.delayedEventsMap)), _q = _p.next(); !_q.done; _q = _p.next()) {
|
|
595
597
|
var key = _q.value;
|
|
596
598
|
this.clock.clearTimeout(this.delayedEventsMap[key]);
|
|
597
599
|
}
|
|
@@ -1308,6 +1310,8 @@ function () {
|
|
|
1308
1310
|
id: this.id
|
|
1309
1311
|
};
|
|
1310
1312
|
};
|
|
1313
|
+
/** @ts-ignore this creates problems for people without `skipLibCheck` who are on older versions of TS, remove this comment when we drop support for TS@<4.3 */
|
|
1314
|
+
|
|
1311
1315
|
|
|
1312
1316
|
Interpreter.prototype[symbolObservable] = function () {
|
|
1313
1317
|
return this;
|
package/es/invokeUtils.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { __assign, __rest } from './_virtual/_tslib.js';
|
|
2
|
-
import './environment.js';
|
|
3
|
-
import './utils.js';
|
|
4
2
|
import './types.js';
|
|
5
3
|
import { invoke } from './actionTypes.js';
|
|
4
|
+
import './utils.js';
|
|
5
|
+
import './environment.js';
|
|
6
6
|
|
|
7
7
|
function toInvokeSource(src) {
|
|
8
8
|
if (typeof src === 'string') {
|
|
@@ -25,9 +25,9 @@ function toInvokeDefinition(invokeConfig) {
|
|
|
25
25
|
type: invoke
|
|
26
26
|
}, invokeConfig), {
|
|
27
27
|
toJSON: function () {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
invokeDef = __rest(invokeConfig, ["onDone", "onError"]);
|
|
28
|
+
invokeConfig.onDone;
|
|
29
|
+
invokeConfig.onError;
|
|
30
|
+
var invokeDef = __rest(invokeConfig, ["onDone", "onError"]);
|
|
31
31
|
|
|
32
32
|
return __assign(__assign({}, invokeDef), {
|
|
33
33
|
type: invoke,
|
package/es/json.js
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { mapValues, isFunction } from './utils.js';
|
|
2
|
+
|
|
3
|
+
function stringifyFunction(fn) {
|
|
4
|
+
return {
|
|
5
|
+
$function: fn.toString()
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
function getStateNodeId(stateNode) {
|
|
10
|
+
return "#".concat(stateNode.id);
|
|
11
|
+
} // derive config from machine
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
function machineToJSON(stateNode) {
|
|
15
|
+
var config = {
|
|
16
|
+
type: stateNode.type,
|
|
17
|
+
initial: stateNode.initial === undefined ? undefined : String(stateNode.initial),
|
|
18
|
+
id: stateNode.id,
|
|
19
|
+
key: stateNode.key,
|
|
20
|
+
entry: stateNode.onEntry,
|
|
21
|
+
exit: stateNode.onExit,
|
|
22
|
+
on: mapValues(stateNode.on, function (transition) {
|
|
23
|
+
return transition.map(function (t) {
|
|
24
|
+
return {
|
|
25
|
+
target: t.target ? t.target.map(getStateNodeId) : [],
|
|
26
|
+
source: getStateNodeId(t.source),
|
|
27
|
+
actions: t.actions,
|
|
28
|
+
cond: t.cond,
|
|
29
|
+
eventType: t.eventType
|
|
30
|
+
};
|
|
31
|
+
});
|
|
32
|
+
}),
|
|
33
|
+
invoke: stateNode.invoke,
|
|
34
|
+
states: {}
|
|
35
|
+
};
|
|
36
|
+
Object.values(stateNode.states).forEach(function (sn) {
|
|
37
|
+
config.states[sn.key] = machineToJSON(sn);
|
|
38
|
+
});
|
|
39
|
+
return config;
|
|
40
|
+
}
|
|
41
|
+
function stringify(machine) {
|
|
42
|
+
return JSON.stringify(machineToJSON(machine), function (_, value) {
|
|
43
|
+
if (isFunction(value)) {
|
|
44
|
+
return {
|
|
45
|
+
$function: value.toString()
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
return value;
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
function parse(machineString) {
|
|
53
|
+
var config = JSON.parse(machineString, function (_, value) {
|
|
54
|
+
if (typeof value === 'object' && '$function' in value) {
|
|
55
|
+
return new Function(value.value);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
return value;
|
|
59
|
+
});
|
|
60
|
+
return config;
|
|
61
|
+
}
|
|
62
|
+
function jsonify(value) {
|
|
63
|
+
Object.defineProperty(value, 'toJSON', {
|
|
64
|
+
value: function () {
|
|
65
|
+
return mapValues(value, function (subValue) {
|
|
66
|
+
if (isFunction(subValue)) {
|
|
67
|
+
return stringifyFunction(subValue);
|
|
68
|
+
} else if (typeof subValue === 'object' && !Array.isArray(subValue)) {
|
|
69
|
+
// mostly for assignments
|
|
70
|
+
return mapValues(subValue, function (subSubValue) {
|
|
71
|
+
if (isFunction(subSubValue)) {
|
|
72
|
+
return stringifyFunction(subSubValue);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
return subSubValue;
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
return subValue;
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
return value;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export { jsonify, machineToJSON, parse, stringify, stringifyFunction };
|
package/es/mapState.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { __values } from './_virtual/_tslib.js';
|
|
2
|
-
import {
|
|
2
|
+
import { matchesState } from './utils.js';
|
|
3
3
|
|
|
4
4
|
function mapState(stateMap, stateId) {
|
|
5
5
|
var e_1, _a;
|
|
@@ -7,7 +7,7 @@ function mapState(stateMap, stateId) {
|
|
|
7
7
|
var foundStateId;
|
|
8
8
|
|
|
9
9
|
try {
|
|
10
|
-
for (var _b = __values(keys(stateMap)), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
10
|
+
for (var _b = __values(Object.keys(stateMap)), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
11
11
|
var mappedStateId = _c.value;
|
|
12
12
|
|
|
13
13
|
if (matchesState(mappedStateId, stateId) && (!foundStateId || stateId.length > foundStateId.length)) {
|
package/es/model.js
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { __assign, __spreadArray, __read } from './_virtual/_tslib.js';
|
|
2
|
+
import { assign } from './actions.js';
|
|
3
|
+
import { createMachine } from './Machine.js';
|
|
4
|
+
import { mapValues } from './utils.js';
|
|
5
|
+
|
|
6
|
+
function createModel(initialContext, creators) {
|
|
7
|
+
var eventCreators = creators === null || creators === void 0 ? void 0 : creators.events;
|
|
8
|
+
var actionCreators = creators === null || creators === void 0 ? void 0 : creators.actions;
|
|
9
|
+
var model = {
|
|
10
|
+
initialContext: initialContext,
|
|
11
|
+
assign: assign,
|
|
12
|
+
events: eventCreators ? mapValues(eventCreators, function (fn, eventType) {
|
|
13
|
+
return function () {
|
|
14
|
+
var args = [];
|
|
15
|
+
|
|
16
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
17
|
+
args[_i] = arguments[_i];
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
return __assign(__assign({}, fn.apply(void 0, __spreadArray([], __read(args), false))), {
|
|
21
|
+
type: eventType
|
|
22
|
+
});
|
|
23
|
+
};
|
|
24
|
+
}) : undefined,
|
|
25
|
+
actions: actionCreators ? mapValues(actionCreators, function (fn, actionType) {
|
|
26
|
+
return function () {
|
|
27
|
+
var args = [];
|
|
28
|
+
|
|
29
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
30
|
+
args[_i] = arguments[_i];
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
return __assign(__assign({}, fn.apply(void 0, __spreadArray([], __read(args), false))), {
|
|
34
|
+
type: actionType
|
|
35
|
+
});
|
|
36
|
+
};
|
|
37
|
+
}) : undefined,
|
|
38
|
+
reset: function () {
|
|
39
|
+
return assign(initialContext);
|
|
40
|
+
},
|
|
41
|
+
createMachine: function (config, implementations) {
|
|
42
|
+
return createMachine('context' in config ? config : __assign(__assign({}, config), {
|
|
43
|
+
context: initialContext
|
|
44
|
+
}), implementations);
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
return model;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export { createModel };
|
package/es/patterns.js
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { __assign } from './_virtual/_tslib.js';
|
|
2
|
+
import { toEventObject } from './utils.js';
|
|
3
|
+
|
|
4
|
+
function toggle(onState, offState, eventType) {
|
|
5
|
+
var _a, _b, _c;
|
|
6
|
+
|
|
7
|
+
return _a = {}, _a[onState] = {
|
|
8
|
+
on: (_b = {}, _b[eventType] = offState, _b)
|
|
9
|
+
}, _a[offState] = {
|
|
10
|
+
on: (_c = {}, _c[eventType] = onState, _c)
|
|
11
|
+
}, _a;
|
|
12
|
+
}
|
|
13
|
+
var defaultSequencePatternOptions = {
|
|
14
|
+
nextEvent: 'NEXT',
|
|
15
|
+
prevEvent: 'PREV'
|
|
16
|
+
};
|
|
17
|
+
function sequence(items, options) {
|
|
18
|
+
var resolvedOptions = __assign(__assign({}, defaultSequencePatternOptions), options);
|
|
19
|
+
|
|
20
|
+
var states = {};
|
|
21
|
+
var nextEventObject = resolvedOptions.nextEvent === undefined ? undefined : toEventObject(resolvedOptions.nextEvent);
|
|
22
|
+
var prevEventObject = resolvedOptions.prevEvent === undefined ? undefined : toEventObject(resolvedOptions.prevEvent);
|
|
23
|
+
items.forEach(function (item, i) {
|
|
24
|
+
var state = {
|
|
25
|
+
on: {}
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
if (i + 1 === items.length) {
|
|
29
|
+
state.type = 'final';
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
if (nextEventObject && i + 1 < items.length) {
|
|
33
|
+
state.on[nextEventObject.type] = items[i + 1];
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
if (prevEventObject && i > 0) {
|
|
37
|
+
state.on[prevEventObject.type] = items[i - 1];
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
states[item] = state;
|
|
41
|
+
});
|
|
42
|
+
return {
|
|
43
|
+
initial: items[0],
|
|
44
|
+
states: states
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export { sequence, toggle };
|
package/es/stateUtils.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { __values, __spreadArray, __read } from './_virtual/_tslib.js';
|
|
2
|
-
import { flatten
|
|
2
|
+
import { flatten } from './utils.js';
|
|
3
3
|
|
|
4
4
|
var isLeafNode = function (stateNode) {
|
|
5
5
|
return stateNode.type === 'atomic' || stateNode.type === 'final';
|
|
6
6
|
};
|
|
7
7
|
function getChildren(stateNode) {
|
|
8
|
-
return keys(stateNode.states).map(function (key) {
|
|
8
|
+
return Object.keys(stateNode.states).map(function (key) {
|
|
9
9
|
return stateNode.states[key];
|
|
10
10
|
});
|
|
11
11
|
}
|
package/es/types.d.ts
CHANGED
|
@@ -22,6 +22,8 @@ export declare type IndexByType<T extends {
|
|
|
22
22
|
export declare type Equals<A1 extends any, A2 extends any> = (<A>() => A extends A2 ? true : false) extends <A>() => A extends A1 ? true : false ? true : false;
|
|
23
23
|
export declare type IsAny<T> = Equals<T, any>;
|
|
24
24
|
export declare type Cast<A, B> = A extends B ? A : B;
|
|
25
|
+
export declare type NoInfer<T> = [T][T extends any ? 0 : any];
|
|
26
|
+
export declare type LowInfer<T> = T & {};
|
|
25
27
|
export declare type EventType = string;
|
|
26
28
|
export declare type ActionType = string;
|
|
27
29
|
export declare type MetaObject = Record<string, any>;
|
|
@@ -524,11 +526,11 @@ export declare type InternalMachineOptions<TContext, TEvent extends EventObject,
|
|
|
524
526
|
activities?: Record<string, ActivityConfig<TContext, TEvent>>;
|
|
525
527
|
};
|
|
526
528
|
export declare type MachineOptions<TContext, TEvent extends EventObject, TAction extends BaseActionObject = BaseActionObject, TServiceMap extends ServiceMap = ServiceMap, TTypesMeta extends TypegenConstraint = TypegenDisabled> = InternalMachineOptions<TContext, TEvent, ResolveTypegenMeta<TTypesMeta, TEvent, TAction, TServiceMap>>;
|
|
527
|
-
export interface MachineConfig<TContext, TStateSchema extends StateSchema, TEvent extends EventObject, TAction extends BaseActionObject = BaseActionObject, TServiceMap extends ServiceMap = ServiceMap, TTypesMeta = TypegenDisabled> extends StateNodeConfig<TContext
|
|
529
|
+
export interface MachineConfig<TContext, TStateSchema extends StateSchema, TEvent extends EventObject, TAction extends BaseActionObject = BaseActionObject, TServiceMap extends ServiceMap = ServiceMap, TTypesMeta = TypegenDisabled> extends StateNodeConfig<NoInfer<TContext>, TStateSchema, TEvent, TAction> {
|
|
528
530
|
/**
|
|
529
531
|
* The initial context (extended state)
|
|
530
532
|
*/
|
|
531
|
-
context?: TContext | (() => TContext)
|
|
533
|
+
context?: LowInfer<TContext | (() => TContext)>;
|
|
532
534
|
/**
|
|
533
535
|
* The machine's own version.
|
|
534
536
|
*/
|
|
@@ -1009,7 +1011,7 @@ export declare type ActorRefWithDeprecatedState<TContext, TEvent extends EventOb
|
|
|
1009
1011
|
*/
|
|
1010
1012
|
state: State<TContext, TEvent, any, TTypestate, TResolvedTypesMeta>;
|
|
1011
1013
|
};
|
|
1012
|
-
export declare type ActorRefFrom<T> = T extends
|
|
1014
|
+
export declare type ActorRefFrom<T> = ReturnTypeOrValue<T> extends infer R ? R extends StateMachine<infer TContext, any, infer TEvent, infer TTypestate, any, any, infer TResolvedTypesMeta> ? ActorRefWithDeprecatedState<TContext, TEvent, TTypestate, TResolvedTypesMeta> : R extends Promise<infer U> ? ActorRef<never, U> : R extends Behavior<infer TEvent, infer TEmitted> ? ActorRef<TEvent, TEmitted> : never : never;
|
|
1013
1015
|
export declare type AnyInterpreter = Interpreter<any, any, any, any, any>;
|
|
1014
1016
|
export declare type InterpreterFrom<T extends AnyStateMachine | ((...args: any[]) => AnyStateMachine)> = T extends StateMachine<infer TContext, infer TStateSchema, infer TEvent, infer TTypestate, any, any, infer TResolvedTypesMeta> ? Interpreter<TContext, TStateSchema, TEvent, TTypestate, TResolvedTypesMeta> : T extends (...args: any[]) => StateMachine<infer TContext, infer TStateSchema, infer TEvent, infer TTypestate, any, any, infer TResolvedTypesMeta> ? Interpreter<TContext, TStateSchema, TEvent, TTypestate, TResolvedTypesMeta> : never;
|
|
1015
1017
|
export declare type MachineOptionsFrom<T extends AnyStateMachine | ((...args: any[]) => AnyStateMachine), TRequireMissingImplementations extends boolean = false> = ReturnTypeOrValue<T> extends StateMachine<infer TContext, any, infer TEvent, any, any, any, infer TResolvedTypesMeta> ? InternalMachineOptions<TContext, TEvent, TResolvedTypesMeta, TRequireMissingImplementations> : never;
|
|
@@ -1026,10 +1028,10 @@ export interface Behavior<TEvent extends EventObject, TEmitted = any> {
|
|
|
1026
1028
|
start?: (actorCtx: ActorContext<TEvent, TEmitted>) => TEmitted;
|
|
1027
1029
|
}
|
|
1028
1030
|
export declare type EmittedFrom<T> = ReturnTypeOrValue<T> extends infer R ? R extends ActorRef<infer _, infer TEmitted> ? TEmitted : R extends Behavior<infer _, infer TEmitted> ? TEmitted : R extends ActorContext<infer _, infer TEmitted> ? TEmitted : never : never;
|
|
1029
|
-
declare type ResolveEventType<T> = ReturnTypeOrValue<T> extends infer R ? R extends StateMachine<infer _, infer __, infer TEvent, infer ____> ? TEvent : R extends Model<infer _, infer TEvent, infer
|
|
1031
|
+
declare type ResolveEventType<T> = ReturnTypeOrValue<T> extends infer R ? R extends StateMachine<infer _, infer __, infer TEvent, infer ___, infer ____, infer _____, infer ______> ? TEvent : R extends Model<infer _, infer TEvent, infer __, infer ___> ? TEvent : R extends State<infer _, infer TEvent, infer __, infer ___, infer ____> ? TEvent : R extends Interpreter<infer _, infer __, infer TEvent, infer ___, infer ____> ? TEvent : R extends ActorRef<infer TEvent, infer _> ? TEvent : never : never;
|
|
1030
1032
|
export declare type EventFrom<T, K extends Prop<TEvent, 'type'> = never, TEvent = ResolveEventType<T>> = IsNever<K> extends true ? TEvent : Extract<TEvent, {
|
|
1031
1033
|
type: K;
|
|
1032
1034
|
}>;
|
|
1033
|
-
export declare type ContextFrom<T> = ReturnTypeOrValue<T> extends infer R ? R extends StateMachine<infer TContext, infer _, infer __, infer ___> ? TContext : R extends Model<infer TContext, infer _, infer __, infer ___> ? TContext : R extends State<infer TContext, infer _, infer __, infer ___> ? TContext : R extends Interpreter<infer TContext, infer _, infer __, infer ___> ? TContext : never : never;
|
|
1035
|
+
export declare type ContextFrom<T> = ReturnTypeOrValue<T> extends infer R ? R extends StateMachine<infer TContext, infer _, infer __, infer ___, infer ____, infer _____, infer ______> ? TContext : R extends Model<infer TContext, infer _, infer __, infer ___> ? TContext : R extends State<infer TContext, infer _, infer __, infer ___, infer ____> ? TContext : R extends Interpreter<infer TContext, infer _, infer __, infer ___, infer ____> ? TContext : never : never;
|
|
1034
1036
|
export {};
|
|
1035
1037
|
//# sourceMappingURL=types.d.ts.map
|
package/es/utils.d.ts
CHANGED
|
@@ -11,9 +11,7 @@ export declare function toStatePath(stateId: string | string[], delimiter: strin
|
|
|
11
11
|
export declare function isStateLike(state: any): state is StateLike<any>;
|
|
12
12
|
export declare function toStateValue(stateValue: StateLike<any> | StateValue | string[], delimiter: string): StateValue;
|
|
13
13
|
export declare function pathToStateValue(statePath: string[]): StateValue;
|
|
14
|
-
export declare function mapValues<
|
|
15
|
-
[key: string]: T;
|
|
16
|
-
}>(collection: O, iteratee: (item: O[keyof O], key: keyof O, collection: O, i: number) => P): {
|
|
14
|
+
export declare function mapValues<P, O extends Record<string, unknown>>(collection: O, iteratee: (item: O[keyof O], key: keyof O, collection: O, i: number) => P): {
|
|
17
15
|
[key in keyof O]: P;
|
|
18
16
|
};
|
|
19
17
|
export declare function mapFilterValues<T, P>(collection: {
|