xstate 4.7.7 → 4.9.1
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 +63 -0
- package/dist/xstate.interpreter.js +1 -1
- package/dist/xstate.js +1 -1
- package/dist/xstate.web.js +2 -2
- package/es/State.js +3 -1
- package/es/StateNode.d.ts +1 -2
- package/es/StateNode.js +41 -77
- package/es/actionTypes.d.ts +1 -0
- package/es/actionTypes.js +2 -1
- package/es/actions.d.ts +7 -3
- package/es/actions.js +86 -7
- package/es/index.d.ts +3 -1
- package/es/index.js +4 -2
- package/es/interpreter.d.ts +4 -3
- package/es/interpreter.js +24 -14
- package/es/json.d.ts +31 -0
- package/es/registry.js +1 -3
- package/es/types.d.ts +31 -14
- package/es/types.js +1 -0
- package/es/utils.d.ts +3 -2
- package/es/utils.js +24 -7
- package/lib/State.js +2 -1
- package/lib/StateNode.d.ts +1 -2
- package/lib/StateNode.js +27 -67
- package/lib/actionTypes.d.ts +1 -0
- package/lib/actionTypes.js +1 -0
- package/lib/actions.d.ts +7 -3
- package/lib/actions.js +81 -1
- package/lib/index.d.ts +3 -1
- package/lib/index.js +3 -1
- package/lib/interpreter.d.ts +4 -3
- package/lib/interpreter.js +16 -8
- package/lib/json.d.ts +31 -0
- package/lib/json.js +84 -0
- package/lib/scxml.js +132 -57
- package/lib/types.d.ts +31 -14
- package/lib/types.js +1 -0
- package/lib/utils.d.ts +3 -2
- package/lib/utils.js +22 -4
- package/package.json +2 -2
package/lib/types.d.ts
CHANGED
|
@@ -50,7 +50,11 @@ export interface AssignMeta<TContext, TEvent extends EventObject> {
|
|
|
50
50
|
_event: SCXML.Event<TEvent>;
|
|
51
51
|
}
|
|
52
52
|
export declare type ActionFunction<TContext, TEvent extends EventObject> = (context: TContext, event: TEvent, meta: ActionMeta<TContext, TEvent>) => any | void;
|
|
53
|
-
export
|
|
53
|
+
export interface ChooseConditon<TContext, TEvent extends EventObject> {
|
|
54
|
+
cond?: Condition<TContext, TEvent>;
|
|
55
|
+
actions: Actions<TContext, TEvent>;
|
|
56
|
+
}
|
|
57
|
+
export declare type Action<TContext, TEvent extends EventObject> = ActionType | ActionObject<TContext, TEvent> | ActionFunction<TContext, TEvent> | AssignAction<Required<TContext>, TEvent> | SendAction<TContext, AnyEventObject> | RaiseAction<AnyEventObject> | ChooseAction<TContext, TEvent>;
|
|
54
58
|
export declare type Actions<TContext, TEvent extends EventObject> = SingleOrArray<Action<TContext, TEvent>>;
|
|
55
59
|
export declare type StateKey = string | State<any>;
|
|
56
60
|
export interface StateValueMap {
|
|
@@ -124,7 +128,7 @@ export declare type InvokeCallback = (callback: Sender<any>, onReceive: Receiver
|
|
|
124
128
|
* @param context The current machine `context`
|
|
125
129
|
* @param event The event that invoked the service
|
|
126
130
|
*/
|
|
127
|
-
export declare type InvokeCreator<TContext, TFinalContext = any> = (context: TContext, event:
|
|
131
|
+
export declare type InvokeCreator<TContext, TEvent = AnyEventObject, TFinalContext = any> = (context: TContext, event: TEvent) => PromiseLike<TFinalContext> | StateMachine<TFinalContext, any, any> | Subscribable<any> | InvokeCallback;
|
|
128
132
|
export interface InvokeDefinition<TContext, TEvent extends EventObject> extends ActivityDefinition<TContext, TEvent> {
|
|
129
133
|
/**
|
|
130
134
|
* The source of the machine to be invoked, or the machine itself.
|
|
@@ -171,21 +175,28 @@ export declare type StatesConfig<TContext, TStateSchema extends StateSchema, TEv
|
|
|
171
175
|
export declare type StatesDefinition<TContext, TStateSchema extends StateSchema, TEvent extends EventObject> = {
|
|
172
176
|
[K in keyof TStateSchema['states']]: StateNodeDefinition<TContext, TStateSchema['states'][K], TEvent>;
|
|
173
177
|
};
|
|
174
|
-
export declare type
|
|
178
|
+
export declare type TransitionConfigTarget<TContext, TEvent extends EventObject> = string | undefined | StateNode<TContext, any, TEvent>;
|
|
179
|
+
export declare type TransitionConfigOrTarget<TContext, TEvent extends EventObject> = SingleOrArray<TransitionConfigTarget<TContext, TEvent> | TransitionConfig<TContext, TEvent>>;
|
|
175
180
|
declare type TransitionsConfigMap<TContext, TEvent extends EventObject> = {
|
|
176
|
-
[K in TEvent['type']
|
|
181
|
+
[K in TEvent['type']]?: TransitionConfigOrTarget<TContext, TEvent extends {
|
|
177
182
|
type: K;
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
|
|
183
|
+
} ? TEvent : never>;
|
|
184
|
+
} & {
|
|
185
|
+
''?: TransitionConfigOrTarget<TContext, TEvent>;
|
|
186
|
+
} & {
|
|
187
|
+
'*'?: TransitionConfigOrTarget<TContext, TEvent>;
|
|
181
188
|
};
|
|
182
189
|
declare type TransitionsConfigArray<TContext, TEvent extends EventObject> = Array<{
|
|
183
|
-
[K in TEvent['type']
|
|
190
|
+
[K in TEvent['type']]: TransitionConfig<TContext, TEvent extends {
|
|
184
191
|
type: K;
|
|
185
|
-
}
|
|
192
|
+
} ? TEvent : never> & {
|
|
186
193
|
event: K;
|
|
187
194
|
};
|
|
188
|
-
}[TEvent['type'] |
|
|
195
|
+
}[TEvent['type']] | (TransitionConfig<TContext, TEvent> & {
|
|
196
|
+
event: '';
|
|
197
|
+
}) | (TransitionConfig<TContext, TEvent> & {
|
|
198
|
+
event: '*';
|
|
199
|
+
})>;
|
|
189
200
|
export declare type TransitionsConfig<TContext, TEvent extends EventObject> = TransitionsConfigMap<TContext, TEvent> | TransitionsConfigArray<TContext, TEvent>;
|
|
190
201
|
export declare type InvokeConfig<TContext, TEvent extends EventObject> = {
|
|
191
202
|
/**
|
|
@@ -196,7 +207,7 @@ export declare type InvokeConfig<TContext, TEvent extends EventObject> = {
|
|
|
196
207
|
/**
|
|
197
208
|
* The source of the machine to be invoked, or the machine itself.
|
|
198
209
|
*/
|
|
199
|
-
src: string | StateMachine<any, any, any> | InvokeCreator<
|
|
210
|
+
src: string | StateMachine<any, any, any> | InvokeCreator<TContext, TEvent, any>;
|
|
200
211
|
/**
|
|
201
212
|
* If `true`, events sent to the parent service will be forwarded to the invoked service.
|
|
202
213
|
*
|
|
@@ -345,14 +356,15 @@ export interface StateNodeDefinition<TContext, TStateSchema extends StateSchema,
|
|
|
345
356
|
id: string;
|
|
346
357
|
version: string | undefined;
|
|
347
358
|
key: string;
|
|
359
|
+
context: TContext;
|
|
348
360
|
type: 'atomic' | 'compound' | 'parallel' | 'final' | 'history';
|
|
349
361
|
initial: StateNodeConfig<TContext, TStateSchema, TEvent>['initial'];
|
|
350
362
|
history: boolean | 'shallow' | 'deep' | undefined;
|
|
351
363
|
states: StatesDefinition<TContext, TStateSchema, TEvent>;
|
|
352
364
|
on: TransitionDefinitionMap<TContext, TEvent>;
|
|
353
365
|
transitions: Array<TransitionDefinition<TContext, TEvent>>;
|
|
354
|
-
|
|
355
|
-
|
|
366
|
+
entry: Array<ActionObject<TContext, TEvent>>;
|
|
367
|
+
exit: Array<ActionObject<TContext, TEvent>>;
|
|
356
368
|
activities: Array<ActivityDefinition<TContext, TEvent>>;
|
|
357
369
|
meta: any;
|
|
358
370
|
order: number;
|
|
@@ -478,7 +490,8 @@ export declare enum ActionTypes {
|
|
|
478
490
|
ErrorPlatform = "error.platform",
|
|
479
491
|
ErrorCustom = "xstate.error",
|
|
480
492
|
Update = "xstate.update",
|
|
481
|
-
Pure = "xstate.pure"
|
|
493
|
+
Pure = "xstate.pure",
|
|
494
|
+
Choose = "xstate.choose"
|
|
482
495
|
}
|
|
483
496
|
export interface RaiseAction<TEvent extends EventObject> {
|
|
484
497
|
type: ActionTypes.Raise;
|
|
@@ -576,6 +589,10 @@ export interface PureAction<TContext, TEvent extends EventObject> extends Action
|
|
|
576
589
|
type: ActionTypes.Pure;
|
|
577
590
|
get: (context: TContext, event: TEvent) => SingleOrArray<ActionObject<TContext, TEvent>> | undefined;
|
|
578
591
|
}
|
|
592
|
+
export interface ChooseAction<TContext, TEvent extends EventObject> extends ActionObject<TContext, TEvent> {
|
|
593
|
+
type: ActionTypes.Choose;
|
|
594
|
+
conds: Array<ChooseConditon<TContext, TEvent>>;
|
|
595
|
+
}
|
|
579
596
|
export interface TransitionDefinition<TContext, TEvent extends EventObject> extends TransitionConfig<TContext, TEvent> {
|
|
580
597
|
target: Array<StateNode<TContext, any, TEvent>> | undefined;
|
|
581
598
|
source: StateNode<TContext, any, TEvent>;
|
package/lib/types.js
CHANGED
|
@@ -21,6 +21,7 @@ var ActionTypes;
|
|
|
21
21
|
ActionTypes["ErrorCustom"] = "xstate.error";
|
|
22
22
|
ActionTypes["Update"] = "xstate.update";
|
|
23
23
|
ActionTypes["Pure"] = "xstate.pure";
|
|
24
|
+
ActionTypes["Choose"] = "xstate.choose";
|
|
24
25
|
})(ActionTypes = exports.ActionTypes || (exports.ActionTypes = {}));
|
|
25
26
|
var SpecialTargets;
|
|
26
27
|
(function (SpecialTargets) {
|
package/lib/utils.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Event, StateValue, ActionType, Action, EventObject, PropertyMapper, Mapper, EventType, HistoryValue, AssignAction, Condition,
|
|
1
|
+
import { Event, StateValue, ActionType, Action, EventObject, PropertyMapper, Mapper, EventType, HistoryValue, AssignAction, Condition, Subscribable, StateMachine, ConditionPredicate, SCXML, StateLike, EventData, TransitionConfig, TransitionConfigTarget, NullEvent, SingleOrArray, Guard } from './types';
|
|
2
2
|
import { StateNode } from './StateNode';
|
|
3
3
|
import { State } from '.';
|
|
4
4
|
import { Actor } from './Actor';
|
|
@@ -59,9 +59,10 @@ export declare function isActor(value: any): value is Actor;
|
|
|
59
59
|
export declare const uniqueId: () => string;
|
|
60
60
|
export declare function toEventObject<TEvent extends EventObject>(event: Event<TEvent>, payload?: EventData): TEvent;
|
|
61
61
|
export declare function toSCXMLEvent<TEvent extends EventObject>(event: Event<TEvent> | SCXML.Event<TEvent>, scxmlEvent?: Partial<SCXML.Event<TEvent>>): SCXML.Event<TEvent>;
|
|
62
|
-
export declare function toTransitionConfigArray<TContext, TEvent extends EventObject>(event: TEvent['type'] | NullEvent['type'] | '*', configLike: SingleOrArray<TransitionConfig<TContext, TEvent> |
|
|
62
|
+
export declare function toTransitionConfigArray<TContext, TEvent extends EventObject>(event: TEvent['type'] | NullEvent['type'] | '*', configLike: SingleOrArray<TransitionConfig<TContext, TEvent> | TransitionConfigTarget<TContext, TEvent>>): Array<TransitionConfig<TContext, TEvent> & {
|
|
63
63
|
event: TEvent['type'] | NullEvent['type'] | '*';
|
|
64
64
|
}>;
|
|
65
65
|
export declare function normalizeTarget<TContext, TEvent extends EventObject>(target: SingleOrArray<string | StateNode<TContext, any, TEvent>> | undefined): Array<string | StateNode<TContext, any, TEvent>> | undefined;
|
|
66
66
|
export declare function reportUnhandledExceptionOnInvocation(originalError: any, currentError: any, id: string): void;
|
|
67
|
+
export declare function evaluateGuard<TContext, TEvent extends EventObject>(machine: StateNode<TContext, any, TEvent>, guard: Guard<TContext, TEvent>, context: TContext, _event: SCXML.Event<TEvent>, state: State<TContext, TEvent>): boolean;
|
|
67
68
|
//# sourceMappingURL=utils.d.ts.map
|
package/lib/utils.js
CHANGED
|
@@ -108,10 +108,10 @@ function toStatePath(stateId, delimiter) {
|
|
|
108
108
|
exports.toStatePath = toStatePath;
|
|
109
109
|
function isStateLike(state) {
|
|
110
110
|
return (typeof state === 'object' &&
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
111
|
+
'value' in state &&
|
|
112
|
+
'context' in state &&
|
|
113
|
+
'event' in state &&
|
|
114
|
+
'_event' in state);
|
|
115
115
|
}
|
|
116
116
|
exports.isStateLike = isStateLike;
|
|
117
117
|
function toStateValue(stateValue, delimiter) {
|
|
@@ -584,3 +584,21 @@ function reportUnhandledExceptionOnInvocation(originalError, currentError, id) {
|
|
|
584
584
|
}
|
|
585
585
|
}
|
|
586
586
|
exports.reportUnhandledExceptionOnInvocation = reportUnhandledExceptionOnInvocation;
|
|
587
|
+
function evaluateGuard(machine, guard, context, _event, state) {
|
|
588
|
+
var guards = machine.options.guards;
|
|
589
|
+
var guardMeta = {
|
|
590
|
+
state: state,
|
|
591
|
+
cond: guard,
|
|
592
|
+
_event: _event
|
|
593
|
+
};
|
|
594
|
+
// TODO: do not hardcode!
|
|
595
|
+
if (guard.type === constants_1.DEFAULT_GUARD_TYPE) {
|
|
596
|
+
return guard.predicate(context, _event.data, guardMeta);
|
|
597
|
+
}
|
|
598
|
+
var condFn = guards[guard.type];
|
|
599
|
+
if (!condFn) {
|
|
600
|
+
throw new Error("Guard '" + guard.type + "' is not implemented on machine '" + machine.id + "'.");
|
|
601
|
+
}
|
|
602
|
+
return condFn(context, _event.data, guardMeta);
|
|
603
|
+
}
|
|
604
|
+
exports.evaluateGuard = evaluateGuard;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "xstate",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.9.1",
|
|
4
4
|
"description": "Finite State Machines and Statecharts for the Modern Web.",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"module": "es/index.js",
|
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
"rxjs": "^6.5.1",
|
|
67
67
|
"ts-jest": "^24.1.9",
|
|
68
68
|
"tslib": "^1.10.0",
|
|
69
|
-
"typescript": "^3.
|
|
69
|
+
"typescript": "^3.8.3",
|
|
70
70
|
"xml-js": "^1.6.11"
|
|
71
71
|
}
|
|
72
72
|
}
|