xstate 4.31.0 → 4.33.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/xstate.interpreter.js +1 -1
- package/dist/xstate.js +1 -1
- package/dist/xstate.web.js +2 -2
- package/es/Machine.js +7 -0
- package/es/State.d.ts +3 -3
- package/es/StateNode.d.ts +3 -8
- package/es/StateNode.js +53 -57
- package/es/actions.d.ts +3 -3
- package/es/actions.js +43 -9
- package/es/interpreter.d.ts +4 -1
- package/es/interpreter.js +303 -253
- package/es/model.types.d.ts +6 -2
- package/es/stateUtils.d.ts +1 -0
- package/es/stateUtils.js +6 -3
- package/es/typegenTypes.d.ts +13 -10
- package/es/types.d.ts +22 -18
- package/es/utils.d.ts +1 -1
- package/es/utils.js +6 -10
- package/es/waitFor.js +6 -1
- package/lib/Machine.js +7 -0
- package/lib/State.d.ts +3 -3
- package/lib/StateNode.d.ts +3 -8
- package/lib/StateNode.js +51 -55
- package/lib/actions.d.ts +3 -3
- package/lib/actions.js +43 -9
- package/lib/interpreter.d.ts +4 -1
- package/lib/interpreter.js +298 -248
- package/lib/model.types.d.ts +6 -2
- package/lib/stateUtils.d.ts +1 -0
- package/lib/stateUtils.js +6 -2
- package/lib/typegenTypes.d.ts +13 -10
- package/lib/types.d.ts +22 -18
- package/lib/utils.d.ts +1 -1
- package/lib/utils.js +6 -10
- package/lib/waitFor.js +6 -1
- package/package.json +1 -1
- package/CHANGELOG.md +0 -1460
package/lib/model.types.d.ts
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
|
-
import { AnyFunction, AssignAction, Assigner, BaseActionObject, Compute, EventObject,
|
|
1
|
+
import { AnyFunction, AssignAction, Assigner, BaseActionObject, Compute, EventObject, MachineConfig, Prop, PropertyAssigner, StateMachine, InternalMachineOptions, ServiceMap } from './types';
|
|
2
2
|
import { ResolveTypegenMeta, TypegenConstraint, TypegenDisabled } from './typegenTypes';
|
|
3
|
+
declare type SimplisticExtractEvent<TEvent extends EventObject, TEventType extends TEvent['type']> = TEvent extends {
|
|
4
|
+
type: TEventType;
|
|
5
|
+
} ? TEvent : never;
|
|
3
6
|
export interface Model<TContext, TEvent extends EventObject, TAction extends BaseActionObject = BaseActionObject, TModelCreators = void> {
|
|
4
7
|
initialContext: TContext;
|
|
5
|
-
assign: <TEventType extends TEvent['type'] = TEvent['type']>(assigner: Assigner<TContext,
|
|
8
|
+
assign: <TEventType extends TEvent['type'] = TEvent['type']>(assigner: Assigner<TContext, SimplisticExtractEvent<TEvent, TEventType>> | PropertyAssigner<TContext, SimplisticExtractEvent<TEvent, TEventType>>, eventType?: TEventType) => AssignAction<TContext, SimplisticExtractEvent<TEvent, TEventType>>;
|
|
6
9
|
events: Prop<TModelCreators, 'events'>;
|
|
7
10
|
actions: Prop<TModelCreators, 'actions'>;
|
|
8
11
|
reset: () => AssignAction<TContext, any>;
|
|
@@ -49,4 +52,5 @@ export interface FinalModelCreators<Self> {
|
|
|
49
52
|
export declare type UnionFromCreatorsReturnTypes<TCreators> = {
|
|
50
53
|
[K in keyof TCreators]: TCreators[K] extends AnyFunction ? ReturnType<TCreators[K]> : never;
|
|
51
54
|
}[keyof TCreators];
|
|
55
|
+
export {};
|
|
52
56
|
//# sourceMappingURL=model.types.d.ts.map
|
package/lib/stateUtils.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ import { StateNode } from './StateNode';
|
|
|
3
3
|
declare type Configuration<TC, TE extends EventObject> = Iterable<StateNode<TC, any, TE>>;
|
|
4
4
|
declare type AdjList<TC, TE extends EventObject> = Map<StateNode<TC, any, TE>, Array<StateNode<TC, any, TE>>>;
|
|
5
5
|
export declare const isLeafNode: (stateNode: StateNode<any, any, any, any, any, any>) => boolean;
|
|
6
|
+
export declare function getAllChildren<TC, TE extends EventObject>(stateNode: StateNode<TC, any, TE>): Array<StateNode<TC, any, TE>>;
|
|
6
7
|
export declare function getChildren<TC, TE extends EventObject>(stateNode: StateNode<TC, any, TE>): Array<StateNode<TC, any, TE>>;
|
|
7
8
|
export declare function getAllStateNodes<TC, TE extends EventObject>(stateNode: StateNode<TC, any, TE, any, any, any>): Array<StateNode<TC, any, TE, any, any, any>>;
|
|
8
9
|
export declare function getConfiguration<TC, TE extends EventObject>(prevStateNodes: Iterable<StateNode<TC, any, TE, any, any, any>>, stateNodes: Iterable<StateNode<TC, any, TE, any, any, any>>): Set<StateNode<TC, any, TE, any, any, any>>;
|
package/lib/stateUtils.js
CHANGED
|
@@ -8,10 +8,13 @@ var utils = require('./utils.js');
|
|
|
8
8
|
var isLeafNode = function (stateNode) {
|
|
9
9
|
return stateNode.type === 'atomic' || stateNode.type === 'final';
|
|
10
10
|
};
|
|
11
|
-
function
|
|
11
|
+
function getAllChildren(stateNode) {
|
|
12
12
|
return Object.keys(stateNode.states).map(function (key) {
|
|
13
13
|
return stateNode.states[key];
|
|
14
|
-
})
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
function getChildren(stateNode) {
|
|
17
|
+
return getAllChildren(stateNode).filter(function (sn) {
|
|
15
18
|
return sn.type !== 'history';
|
|
16
19
|
});
|
|
17
20
|
}
|
|
@@ -261,6 +264,7 @@ function getTagsFromConfiguration(configuration) {
|
|
|
261
264
|
}
|
|
262
265
|
|
|
263
266
|
exports.getAdjList = getAdjList;
|
|
267
|
+
exports.getAllChildren = getAllChildren;
|
|
264
268
|
exports.getAllStateNodes = getAllStateNodes;
|
|
265
269
|
exports.getChildren = getChildren;
|
|
266
270
|
exports.getConfiguration = getConfiguration;
|
package/lib/typegenTypes.d.ts
CHANGED
|
@@ -113,18 +113,21 @@ declare type AllowAllEvents = {
|
|
|
113
113
|
};
|
|
114
114
|
export interface ResolveTypegenMeta<TTypesMeta extends TypegenConstraint, TEvent extends EventObject, TAction extends BaseActionObject, TServiceMap extends ServiceMap> {
|
|
115
115
|
'@@xstate/typegen': TTypesMeta['@@xstate/typegen'];
|
|
116
|
-
resolved:
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
116
|
+
resolved: {
|
|
117
|
+
enabled: TTypesMeta & {
|
|
118
|
+
indexedActions: IndexByType<TAction>;
|
|
119
|
+
indexedEvents: MergeWithInternalEvents<IndexByType<(string extends TEvent['type'] ? never : TEvent) | GenerateServiceEvents<TServiceMap, Prop<TTypesMeta, 'invokeSrcNameMap'>>>, Prop<TTypesMeta, 'internalEvents'>>;
|
|
120
|
+
};
|
|
121
|
+
disabled: TypegenDisabled & AllImplementationsProvided & AllowAllEvents & {
|
|
122
|
+
indexedActions: IndexByType<TAction>;
|
|
123
|
+
indexedEvents: Record<string, TEvent> & {
|
|
124
|
+
__XSTATE_ALLOW_ANY_INVOKE_DATA_HACK__: {
|
|
125
|
+
data: any;
|
|
126
|
+
};
|
|
124
127
|
};
|
|
128
|
+
invokeSrcNameMap: Record<string, '__XSTATE_ALLOW_ANY_INVOKE_DATA_HACK__'>;
|
|
125
129
|
};
|
|
126
|
-
|
|
127
|
-
};
|
|
130
|
+
}[IsNever<TTypesMeta> extends true ? 'disabled' : TTypesMeta extends TypegenEnabled ? 'enabled' : 'disabled'];
|
|
128
131
|
}
|
|
129
132
|
export {};
|
|
130
133
|
//# sourceMappingURL=typegenTypes.d.ts.map
|
package/lib/types.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { Clock, Interpreter } from './interpreter';
|
|
|
2
2
|
import { Model } from './model.types';
|
|
3
3
|
import { State } from './State';
|
|
4
4
|
import { StateNode } from './StateNode';
|
|
5
|
-
import { MarkAllImplementationsAsProvided, TypegenDisabled, ResolveTypegenMeta, TypegenConstraint, AreAllImplementationsAssumedToBeProvided } from './typegenTypes';
|
|
5
|
+
import { MarkAllImplementationsAsProvided, TypegenDisabled, ResolveTypegenMeta, TypegenConstraint, AreAllImplementationsAssumedToBeProvided, TypegenEnabled } from './typegenTypes';
|
|
6
6
|
export declare type AnyFunction = (...args: any[]) => any;
|
|
7
7
|
declare type ReturnTypeOrValue<T> = T extends AnyFunction ? ReturnType<T> : T;
|
|
8
8
|
export declare type IsNever<T> = [T] extends [never] ? true : false;
|
|
@@ -15,9 +15,7 @@ export declare type Merge<M, N> = Omit<M, keyof N> & N;
|
|
|
15
15
|
export declare type IndexByType<T extends {
|
|
16
16
|
type: string;
|
|
17
17
|
}> = {
|
|
18
|
-
[K in T['type']]:
|
|
19
|
-
type: K;
|
|
20
|
-
}>;
|
|
18
|
+
[K in T['type']]: T extends any ? (K extends T['type'] ? T : never) : never;
|
|
21
19
|
};
|
|
22
20
|
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
21
|
export declare type IsAny<T> = Equals<T, any>;
|
|
@@ -241,13 +239,7 @@ export declare type StatesDefinition<TContext, TStateSchema extends StateSchema,
|
|
|
241
239
|
export declare type TransitionConfigTarget<TContext, TEvent extends EventObject> = string | undefined | StateNode<TContext, any, TEvent>;
|
|
242
240
|
export declare type TransitionConfigOrTarget<TContext, TEvent extends EventObject> = SingleOrArray<TransitionConfigTarget<TContext, TEvent> | TransitionConfig<TContext, TEvent>>;
|
|
243
241
|
export declare type TransitionsConfigMap<TContext, TEvent extends EventObject> = {
|
|
244
|
-
[K in TEvent['type']]?: TransitionConfigOrTarget<TContext, TEvent
|
|
245
|
-
type: K;
|
|
246
|
-
} ? TEvent : never>;
|
|
247
|
-
} & {
|
|
248
|
-
''?: TransitionConfigOrTarget<TContext, TEvent>;
|
|
249
|
-
} & {
|
|
250
|
-
'*'?: TransitionConfigOrTarget<TContext, TEvent>;
|
|
242
|
+
[K in TEvent['type'] | '' | '*']?: K extends '' | '*' ? TransitionConfigOrTarget<TContext, TEvent> : TransitionConfigOrTarget<TContext, ExtractEvent<TEvent, K>>;
|
|
251
243
|
};
|
|
252
244
|
declare type TransitionsConfigArray<TContext, TEvent extends EventObject> = Array<(TEvent extends EventObject ? TransitionConfig<TContext, TEvent> & {
|
|
253
245
|
event: TEvent['type'];
|
|
@@ -430,6 +422,12 @@ export interface StateNodeConfig<TContext, TStateSchema extends StateSchema, TEv
|
|
|
430
422
|
* @default false
|
|
431
423
|
*/
|
|
432
424
|
preserveActionOrder?: boolean;
|
|
425
|
+
/**
|
|
426
|
+
* Whether XState calls actions with the event directly responsible for the related transition.
|
|
427
|
+
*
|
|
428
|
+
* @default false
|
|
429
|
+
*/
|
|
430
|
+
predictableActionArguments?: boolean;
|
|
433
431
|
/**
|
|
434
432
|
* A text description of the state node
|
|
435
433
|
*/
|
|
@@ -864,6 +862,9 @@ export interface StateConfig<TContext, TEvent extends EventObject> {
|
|
|
864
862
|
*/
|
|
865
863
|
activities?: ActivityMap;
|
|
866
864
|
meta?: any;
|
|
865
|
+
/**
|
|
866
|
+
* @deprecated
|
|
867
|
+
*/
|
|
867
868
|
events?: TEvent[];
|
|
868
869
|
configuration: Array<StateNode<TContext, any, TEvent>>;
|
|
869
870
|
transitions: Array<TransitionDefinition<TContext, TEvent>>;
|
|
@@ -988,9 +989,7 @@ export interface Subscribable<T> extends InteropSubscribable<T> {
|
|
|
988
989
|
subscribe(next: (value: T) => void, error?: (error: any) => void, complete?: () => void): Subscription;
|
|
989
990
|
}
|
|
990
991
|
export declare type Spawnable = AnyStateMachine | PromiseLike<any> | InvokeCallback | InteropObservable<any> | Subscribable<any> | Behavior<any>;
|
|
991
|
-
export declare type ExtractEvent<TEvent extends EventObject, TEventType extends TEvent['type']> = TEvent extends
|
|
992
|
-
type: TEventType;
|
|
993
|
-
} ? TEvent : never;
|
|
992
|
+
export declare type ExtractEvent<TEvent extends EventObject, TEventType extends TEvent['type']> = TEvent extends any ? TEventType extends TEvent['type'] ? TEvent : never : never;
|
|
994
993
|
export interface BaseActorRef<TEvent extends EventObject> {
|
|
995
994
|
send: (event: TEvent) => void;
|
|
996
995
|
}
|
|
@@ -1001,6 +1000,7 @@ export interface ActorRef<TEvent extends EventObject, TEmitted = any> extends Su
|
|
|
1001
1000
|
stop?: () => void;
|
|
1002
1001
|
toJSON?: () => any;
|
|
1003
1002
|
}
|
|
1003
|
+
export declare type AnyActorRef = ActorRef<any, any>;
|
|
1004
1004
|
/**
|
|
1005
1005
|
* @deprecated Use `ActorRef` instead.
|
|
1006
1006
|
*/
|
|
@@ -1027,11 +1027,15 @@ export interface Behavior<TEvent extends EventObject, TEmitted = any> {
|
|
|
1027
1027
|
initialState: TEmitted;
|
|
1028
1028
|
start?: (actorCtx: ActorContext<TEvent, TEmitted>) => TEmitted;
|
|
1029
1029
|
}
|
|
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;
|
|
1030
|
+
export declare type EmittedFrom<T> = ReturnTypeOrValue<T> extends infer R ? R extends Interpreter<infer _, infer __, infer ___, infer ____, infer _____> ? R['initialState'] : R extends ActorRef<infer _, infer TEmitted> ? TEmitted : R extends Behavior<infer _, infer TEmitted> ? TEmitted : R extends ActorContext<infer _, infer TEmitted> ? TEmitted : never : never;
|
|
1031
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;
|
|
1032
|
-
export declare type EventFrom<T, K extends Prop<TEvent, 'type'> = never, TEvent = ResolveEventType<T>> = IsNever<K> extends true ? TEvent :
|
|
1033
|
-
type: K;
|
|
1034
|
-
}>;
|
|
1032
|
+
export declare type EventFrom<T, K extends Prop<TEvent, 'type'> = never, TEvent extends EventObject = ResolveEventType<T>> = IsNever<K> extends true ? TEvent : ExtractEvent<TEvent, K>;
|
|
1035
1033
|
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
|
+
declare type Matches<TypegenEnabledArg, TypegenDisabledArg> = {
|
|
1035
|
+
(stateValue: TypegenEnabledArg): any;
|
|
1036
|
+
(stateValue: TypegenDisabledArg): any;
|
|
1037
|
+
};
|
|
1038
|
+
export declare type StateValueFrom<TMachine extends AnyStateMachine> = StateFrom<TMachine>['matches'] extends Matches<infer TypegenEnabledArg, infer TypegenDisabledArg> ? TMachine['__TResolvedTypesMeta'] extends TypegenEnabled ? TypegenEnabledArg : TypegenDisabledArg : never;
|
|
1039
|
+
export declare type PredictableActionArgumentsExec = (action: ActionObject<unknown, EventObject>, context: unknown, _event: SCXML.Event<EventObject>) => void;
|
|
1036
1040
|
export {};
|
|
1037
1041
|
//# sourceMappingURL=types.d.ts.map
|
package/lib/utils.d.ts
CHANGED
|
@@ -67,6 +67,6 @@ export declare function normalizeTarget<TContext, TEvent extends EventObject>(ta
|
|
|
67
67
|
export declare function reportUnhandledExceptionOnInvocation(originalError: any, currentError: any, id: string): void;
|
|
68
68
|
export declare function evaluateGuard<TContext, TEvent extends EventObject>(machine: StateNode<TContext, any, TEvent, any, any>, guard: Guard<TContext, TEvent>, context: TContext, _event: SCXML.Event<TEvent>, state: State<TContext, TEvent>): boolean;
|
|
69
69
|
export declare function toInvokeSource(src: string | InvokeSourceDefinition): InvokeSourceDefinition;
|
|
70
|
-
export declare function toObserver<T>(nextHandler
|
|
70
|
+
export declare function toObserver<T>(nextHandler?: Partial<Observer<T>> | ((value: T) => void), errorHandler?: (error: any) => void, completionHandler?: () => void): Observer<T>;
|
|
71
71
|
export declare function createInvokeId(stateNodeId: string, index: number): string;
|
|
72
72
|
//# sourceMappingURL=utils.d.ts.map
|
package/lib/utils.js
CHANGED
|
@@ -609,18 +609,14 @@ function toInvokeSource(src) {
|
|
|
609
609
|
return src;
|
|
610
610
|
}
|
|
611
611
|
function toObserver(nextHandler, errorHandler, completionHandler) {
|
|
612
|
-
|
|
613
|
-
return nextHandler;
|
|
614
|
-
}
|
|
615
|
-
|
|
616
|
-
var noop = function () {
|
|
617
|
-
return void 0;
|
|
618
|
-
};
|
|
612
|
+
var noop = function () {};
|
|
619
613
|
|
|
614
|
+
var isObserver = typeof nextHandler === 'object';
|
|
615
|
+
var self = isObserver ? nextHandler : null;
|
|
620
616
|
return {
|
|
621
|
-
next: nextHandler,
|
|
622
|
-
error: errorHandler || noop,
|
|
623
|
-
complete: completionHandler || noop
|
|
617
|
+
next: ((isObserver ? nextHandler.next : nextHandler) || noop).bind(self),
|
|
618
|
+
error: ((isObserver ? nextHandler.error : errorHandler) || noop).bind(self),
|
|
619
|
+
complete: ((isObserver ? nextHandler.complete : completionHandler) || noop).bind(self)
|
|
624
620
|
};
|
|
625
621
|
}
|
|
626
622
|
function createInvokeId(stateNodeId, index) {
|
package/lib/waitFor.js
CHANGED
|
@@ -33,7 +33,12 @@ function waitFor(actorRef, predicate, options) {
|
|
|
33
33
|
|
|
34
34
|
return new Promise(function (res, rej) {
|
|
35
35
|
var done = false;
|
|
36
|
-
|
|
36
|
+
|
|
37
|
+
if (process.env.NODE_ENV !== 'production' && resolvedOptions.timeout < 0) {
|
|
38
|
+
console.error('`timeout` passed to `waitFor` is negative and it will reject its internal promise immediately.');
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
var handle = resolvedOptions.timeout === Infinity ? undefined : setTimeout(function () {
|
|
37
42
|
sub.unsubscribe();
|
|
38
43
|
rej(new Error("Timeout of ".concat(resolvedOptions.timeout, " ms exceeded")));
|
|
39
44
|
}, resolvedOptions.timeout);
|