xstate 4.12.0 → 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 +52 -0
- package/dist/xstate.interpreter.js +1 -1
- package/dist/xstate.js +1 -1
- package/dist/xstate.web.js +1 -1
- package/es/Actor.js +5 -1
- package/es/StateNode.js +11 -11
- package/es/actions.d.ts +1 -1
- package/es/interpreter.d.ts +2 -2
- package/es/interpreter.js +9 -25
- package/es/serviceScope.d.ts +10 -0
- package/es/serviceScope.js +18 -0
- package/es/stateUtils.d.ts +1 -4
- package/es/types.d.ts +11 -12
- package/lib/Actor.js +4 -1
- package/lib/Machine.js +1 -0
- package/lib/SimulatedClock.js +1 -0
- package/lib/State.js +1 -0
- package/lib/StateNode.js +12 -11
- package/lib/actionTypes.js +1 -0
- package/lib/actions.d.ts +1 -1
- package/lib/actions.js +1 -0
- 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 +2 -2
- package/lib/interpreter.js +10 -23
- package/lib/invokeUtils.js +1 -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 -4
- package/lib/stateUtils.js +1 -0
- package/lib/types.d.ts +11 -12
- package/lib/types.js +1 -0
- package/lib/utils.js +1 -0
- package/package.json +1 -1
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
|
/**
|
|
@@ -424,7 +411,7 @@ var Interpreter = /** @class */ (function () {
|
|
|
424
411
|
this._status = InterpreterStatus.Running;
|
|
425
412
|
var resolvedState = initialState === undefined
|
|
426
413
|
? this.initialState
|
|
427
|
-
:
|
|
414
|
+
: serviceScope.provide(this, function () {
|
|
428
415
|
return State_1.isState(initialState)
|
|
429
416
|
? _this.machine.resolveState(initialState)
|
|
430
417
|
: _this.machine.resolveState(State_1.State.from(initialState, _this.machine.context));
|
|
@@ -546,7 +533,7 @@ var Interpreter = /** @class */ (function () {
|
|
|
546
533
|
var _loop_1 = function (event_1) {
|
|
547
534
|
var _event = utils_1.toSCXMLEvent(event_1);
|
|
548
535
|
_this.forward(_event);
|
|
549
|
-
nextState =
|
|
536
|
+
nextState = serviceScope.provide(_this, function () {
|
|
550
537
|
return _this.machine.transition(nextState, _event);
|
|
551
538
|
});
|
|
552
539
|
batchedActions.push.apply(batchedActions, __spread(nextState.actions.map(function (a) {
|
|
@@ -594,7 +581,7 @@ var Interpreter = /** @class */ (function () {
|
|
|
594
581
|
!this.state.nextEvents.some(function (nextEvent) { return nextEvent.indexOf(actionTypes.errorPlatform) === 0; })) {
|
|
595
582
|
throw _event.data.data;
|
|
596
583
|
}
|
|
597
|
-
var nextState =
|
|
584
|
+
var nextState = serviceScope.provide(this, function () {
|
|
598
585
|
return _this.machine.transition(_this.state, _event);
|
|
599
586
|
});
|
|
600
587
|
return nextState;
|
|
@@ -1049,7 +1036,7 @@ var Interpreter = /** @class */ (function () {
|
|
|
1049
1036
|
},
|
|
1050
1037
|
logger: global.console.log.bind(console),
|
|
1051
1038
|
devTools: false
|
|
1052
|
-
}); })(typeof
|
|
1039
|
+
}); })(typeof self !== 'undefined' ? self : global);
|
|
1053
1040
|
Interpreter.interpret = interpret;
|
|
1054
1041
|
return Interpreter;
|
|
1055
1042
|
}());
|
|
@@ -1062,7 +1049,7 @@ var resolveSpawnOptions = function (nameOrOptions) {
|
|
|
1062
1049
|
};
|
|
1063
1050
|
function spawn(entity, nameOrOptions) {
|
|
1064
1051
|
var resolvedOptions = resolveSpawnOptions(nameOrOptions);
|
|
1065
|
-
return
|
|
1052
|
+
return serviceScope.consume(function (service) {
|
|
1066
1053
|
if (!environment_1.IS_PRODUCTION) {
|
|
1067
1054
|
var isLazyEntity = utils_1.isMachine(entity) || utils_1.isFunction(entity);
|
|
1068
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.");
|
package/lib/invokeUtils.js
CHANGED
|
@@ -22,6 +22,7 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
22
22
|
return t;
|
|
23
23
|
};
|
|
24
24
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
+
exports.toInvokeDefinition = exports.toInvokeSource = void 0;
|
|
25
26
|
var actions_1 = require("./actions");
|
|
26
27
|
function toInvokeSource(src) {
|
|
27
28
|
if (typeof src === 'string') {
|
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
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.consume = exports.provide = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Maintains a stack of the current service in scope.
|
|
6
|
+
* This is used to provide the correct service to spawn().
|
|
7
|
+
*/
|
|
8
|
+
var serviceStack = [];
|
|
9
|
+
exports.provide = function (service, fn) {
|
|
10
|
+
serviceStack.push(service);
|
|
11
|
+
var result = fn(service);
|
|
12
|
+
serviceStack.pop();
|
|
13
|
+
return result;
|
|
14
|
+
};
|
|
15
|
+
exports.consume = function (fn) { return fn(serviceStack[serviceStack.length - 1]); };
|
package/lib/stateUtils.d.ts
CHANGED
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
import { EventObject, StateNode, StateValue } from '.';
|
|
2
2
|
declare type Configuration<TC, TE extends EventObject> = Iterable<StateNode<TC, any, TE>>;
|
|
3
3
|
declare type AdjList<TC, TE extends EventObject> = Map<StateNode<TC, any, TE>, Array<StateNode<TC, any, TE>>>;
|
|
4
|
-
export declare const isLeafNode: (stateNode: StateNode<any, any, any
|
|
5
|
-
value: any;
|
|
6
|
-
context: any;
|
|
7
|
-
}>) => boolean;
|
|
4
|
+
export declare const isLeafNode: (stateNode: StateNode<any, any, any>) => boolean;
|
|
8
5
|
export declare function getChildren<TC, TE extends EventObject>(stateNode: StateNode<TC, any, TE>): Array<StateNode<TC, any, TE>>;
|
|
9
6
|
export declare function getAllStateNodes<TC, TE extends EventObject>(stateNode: StateNode<TC, any, TE>): Array<StateNode<TC, any, TE>>;
|
|
10
7
|
export declare function getConfiguration<TC, TE extends EventObject>(prevStateNodes: Iterable<StateNode<TC, any, TE>>, stateNodes: Iterable<StateNode<TC, any, TE>>): Iterable<StateNode<TC, any, TE>>;
|
package/lib/stateUtils.js
CHANGED
|
@@ -31,6 +31,7 @@ var __spread = (this && this.__spread) || function () {
|
|
|
31
31
|
return ar;
|
|
32
32
|
};
|
|
33
33
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
34
|
+
exports.isInFinalState = exports.nextEvents = exports.has = exports.getValue = exports.getAdjList = exports.getConfiguration = exports.getAllStateNodes = exports.getChildren = exports.isLeafNode = void 0;
|
|
34
35
|
var utils_1 = require("./utils");
|
|
35
36
|
exports.isLeafNode = function (stateNode) {
|
|
36
37
|
return stateNode.type === 'atomic' || stateNode.type === 'final';
|
package/lib/types.d.ts
CHANGED
|
@@ -67,11 +67,14 @@ export interface StateValueMap {
|
|
|
67
67
|
* - For complex state nodes, this is an object, e.g., `{ success: "someChildState" }`.
|
|
68
68
|
*/
|
|
69
69
|
export declare type StateValue = string | StateValueMap;
|
|
70
|
-
|
|
71
|
-
[K in keyof
|
|
72
|
-
states:
|
|
73
|
-
} ?
|
|
74
|
-
};
|
|
70
|
+
declare type KeysWithStates<TStates extends Record<string, StateSchema> | undefined> = TStates extends object ? {
|
|
71
|
+
[K in keyof TStates]-?: TStates[K] extends {
|
|
72
|
+
states: object;
|
|
73
|
+
} ? K : never;
|
|
74
|
+
}[keyof TStates] : never;
|
|
75
|
+
export declare type ExtractStateValue<TSchema extends Required<Pick<StateSchema<any>, 'states'>>> = keyof TSchema['states'] | (KeysWithStates<TSchema['states']> extends never ? never : {
|
|
76
|
+
[K in KeysWithStates<TSchema['states']>]?: ExtractStateValue<TSchema['states'][K]>;
|
|
77
|
+
});
|
|
75
78
|
export interface HistoryValue {
|
|
76
79
|
states: Record<string, HistoryValue | undefined>;
|
|
77
80
|
current: StateValue | undefined;
|
|
@@ -190,13 +193,9 @@ declare type TransitionsConfigMap<TContext, TEvent extends EventObject> = {
|
|
|
190
193
|
} & {
|
|
191
194
|
'*'?: TransitionConfigOrTarget<TContext, TEvent>;
|
|
192
195
|
};
|
|
193
|
-
declare type TransitionsConfigArray<TContext, TEvent extends EventObject> = Array<{
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
} ? TEvent : never> & {
|
|
197
|
-
event: K;
|
|
198
|
-
};
|
|
199
|
-
}[TEvent['type']] | (TransitionConfig<TContext, TEvent> & {
|
|
196
|
+
declare type TransitionsConfigArray<TContext, TEvent extends EventObject> = Array<(TEvent extends EventObject ? TransitionConfig<TContext, TEvent> & {
|
|
197
|
+
event: TEvent['type'];
|
|
198
|
+
} : never) | (TransitionConfig<TContext, TEvent> & {
|
|
200
199
|
event: '';
|
|
201
200
|
}) | (TransitionConfig<TContext, TEvent> & {
|
|
202
201
|
event: '*';
|
package/lib/types.js
CHANGED
package/lib/utils.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.toInvokeSource = exports.evaluateGuard = exports.reportUnhandledExceptionOnInvocation = exports.normalizeTarget = exports.toTransitionConfigArray = exports.toSCXMLEvent = exports.toEventObject = exports.uniqueId = exports.isActor = exports.isMachine = exports.symbolObservable = exports.isObservable = exports.toGuard = exports.isString = exports.isFunction = exports.isArray = exports.warn = exports.updateContext = exports.updateHistoryValue = exports.updateHistoryStates = exports.partition = exports.isPromiseLike = exports.isBuiltInEvent = exports.mapContext = exports.toArray = exports.toArrayStrict = exports.flatten = exports.pathsToStateValue = exports.toStatePaths = exports.nestedPath = exports.path = exports.mapFilterValues = exports.mapValues = exports.pathToStateValue = exports.toStateValue = exports.isStateLike = exports.toStatePath = exports.getActionType = exports.getEventType = exports.matchesState = exports.keys = void 0;
|
|
45
46
|
var constants_1 = require("./constants");
|
|
46
47
|
var environment_1 = require("./environment");
|
|
47
48
|
function keys(value) {
|