xstate 4.27.0-pr2674-2021926101023 → 4.29.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 +210 -94
- package/README.md +5 -5
- package/dist/xstate.interpreter.js +1 -1
- package/dist/xstate.js +1 -1
- package/dist/xstate.web.js +2 -2
- package/es/Actor.js +5 -5
- package/es/Machine.d.ts +4 -4
- package/es/State.d.ts +9 -6
- package/es/State.js +10 -3
- package/es/StateNode.d.ts +12 -11
- package/es/StateNode.js +61 -71
- package/es/_virtual/_tslib.js +8 -4
- package/es/actions.d.ts +18 -2
- package/es/actions.js +22 -8
- package/es/devTools.d.ts +4 -6
- package/es/devTools.js +4 -0
- package/es/index.d.ts +9 -3
- package/es/index.js +3 -2
- package/es/interpreter.d.ts +6 -10
- package/es/interpreter.js +40 -27
- package/es/model.types.d.ts +3 -3
- package/es/registry.js +1 -1
- package/es/schema.d.ts +1 -0
- package/es/schema.js +2 -1
- package/es/scxml.d.ts +1 -1
- package/es/stateUtils.d.ts +4 -4
- package/es/stateUtils.js +1 -1
- package/es/typegenTypes.d.ts +66 -37
- package/es/types.d.ts +42 -41
- package/es/utils.d.ts +6 -1
- package/es/utils.js +17 -10
- package/lib/Actor.js +4 -4
- package/lib/Machine.d.ts +4 -4
- package/lib/SimulatedClock.js +9 -5
- package/lib/State.d.ts +9 -6
- package/lib/State.js +10 -3
- package/lib/StateNode.d.ts +12 -11
- package/lib/StateNode.js +59 -69
- package/lib/_virtual/_tslib.js +8 -4
- package/lib/actions.d.ts +18 -2
- package/lib/actions.js +22 -7
- package/lib/devTools.d.ts +4 -6
- package/lib/devTools.js +4 -0
- package/lib/index.d.ts +9 -3
- package/lib/index.js +2 -0
- package/lib/interpreter.d.ts +6 -10
- package/lib/interpreter.js +38 -25
- package/lib/json.js +7 -7
- package/lib/model.js +14 -10
- package/lib/model.types.d.ts +3 -3
- package/lib/patterns.js +2 -2
- package/lib/registry.js +1 -1
- package/lib/schema.d.ts +1 -0
- package/lib/schema.js +2 -0
- package/lib/scxml.d.ts +1 -1
- package/lib/scxml.js +29 -25
- package/lib/stateUtils.d.ts +4 -4
- package/lib/stateUtils.js +1 -1
- package/lib/typegenTypes.d.ts +66 -37
- package/lib/types.d.ts +42 -41
- package/lib/utils.d.ts +6 -1
- package/lib/utils.js +18 -9
- package/package.json +7 -11
- package/dist/xstate.cjs.d.ts +0 -11
- package/dist/xstate.cjs.js +0 -16
package/es/types.d.ts
CHANGED
|
@@ -2,11 +2,10 @@ 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 } from './typegenTypes';
|
|
5
|
+
import { MarkAllImplementationsAsProvided, TypegenDisabled, ResolveTypegenMeta, TypegenConstraint, AreAllImplementationsAssumedToBeProvided } 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;
|
|
9
|
-
export declare type Cast<T extends any, TCastType extends any> = T extends TCastType ? T : TCastType;
|
|
10
9
|
export declare type Compute<A extends any> = {
|
|
11
10
|
[K in keyof A]: A[K];
|
|
12
11
|
} & unknown;
|
|
@@ -20,6 +19,9 @@ export declare type IndexByType<T extends {
|
|
|
20
19
|
type: K;
|
|
21
20
|
}>;
|
|
22
21
|
};
|
|
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
|
+
export declare type IsAny<T> = Equals<T, any>;
|
|
24
|
+
export declare type Cast<A, B> = A extends B ? A : B;
|
|
23
25
|
export declare type EventType = string;
|
|
24
26
|
export declare type ActionType = string;
|
|
25
27
|
export declare type MetaObject = Record<string, any>;
|
|
@@ -50,7 +52,7 @@ export interface ActionObject<TContext, TEvent extends EventObject> extends Base
|
|
|
50
52
|
/**
|
|
51
53
|
* The implementation for executing the action.
|
|
52
54
|
*/
|
|
53
|
-
exec?: ActionFunction<TContext, TEvent
|
|
55
|
+
exec?: ActionFunction<TContext, TEvent> | undefined;
|
|
54
56
|
}
|
|
55
57
|
export declare type DefaultContext = Record<string, any> | undefined;
|
|
56
58
|
export declare type EventData = Record<string, any> & {
|
|
@@ -99,14 +101,6 @@ export interface StateValueMap {
|
|
|
99
101
|
* - For complex state nodes, this is an object, e.g., `{ success: "someChildState" }`.
|
|
100
102
|
*/
|
|
101
103
|
export declare type StateValue = string | StateValueMap;
|
|
102
|
-
declare type KeysWithStates<TStates extends Record<string, StateSchema> | undefined> = TStates extends object ? {
|
|
103
|
-
[K in keyof TStates]-?: TStates[K] extends {
|
|
104
|
-
states: object;
|
|
105
|
-
} ? K : never;
|
|
106
|
-
}[keyof TStates] : never;
|
|
107
|
-
export declare type ExtractStateValue<TSchema extends Required<Pick<StateSchema<any>, 'states'>>> = keyof TSchema['states'] | (KeysWithStates<TSchema['states']> extends never ? never : {
|
|
108
|
-
[K in KeysWithStates<TSchema['states']>]?: ExtractStateValue<TSchema['states'][K]>;
|
|
109
|
-
});
|
|
110
104
|
export interface HistoryValue {
|
|
111
105
|
states: Record<string, HistoryValue | undefined>;
|
|
112
106
|
current: StateValue | undefined;
|
|
@@ -132,7 +126,7 @@ export interface TransitionConfig<TContext, TEvent extends EventObject> {
|
|
|
132
126
|
actions?: Actions<TContext, TEvent>;
|
|
133
127
|
in?: StateValue;
|
|
134
128
|
internal?: boolean;
|
|
135
|
-
target?: TransitionTarget<TContext, TEvent
|
|
129
|
+
target?: TransitionTarget<TContext, TEvent> | undefined;
|
|
136
130
|
meta?: Record<string, any>;
|
|
137
131
|
description?: string;
|
|
138
132
|
}
|
|
@@ -171,7 +165,9 @@ export interface PayloadSender<TEvent extends EventObject> {
|
|
|
171
165
|
*/
|
|
172
166
|
<K extends TEvent['type']>(eventType: K, payload: NeverIfEmpty<ExtractExtraParameters<TEvent, K>>): void;
|
|
173
167
|
}
|
|
174
|
-
export declare type Receiver<TEvent extends EventObject> = (listener:
|
|
168
|
+
export declare type Receiver<TEvent extends EventObject> = (listener: {
|
|
169
|
+
bivarianceHack(event: TEvent): void;
|
|
170
|
+
}['bivarianceHack']) => void;
|
|
175
171
|
export declare type InvokeCallback<TEvent extends EventObject = AnyEventObject, TSentEvent extends EventObject = AnyEventObject> = (callback: Sender<TSentEvent>, onReceive: Receiver<TEvent>) => (() => void) | Promise<any> | void;
|
|
176
172
|
export interface InvokeMeta {
|
|
177
173
|
data: any;
|
|
@@ -191,7 +187,8 @@ export interface InvokeMeta {
|
|
|
191
187
|
* @param context The current machine `context`
|
|
192
188
|
* @param event The event that invoked the service
|
|
193
189
|
*/
|
|
194
|
-
export declare type InvokeCreator<TContext,
|
|
190
|
+
export declare type InvokeCreator<TContext, TSourceEvent extends EventObject, TFinalContext = any, TInputEvent extends EventObject = any, // keeping a slot for it here, but it's actually not used right now to ensure that the communication contract between actors is satisfied
|
|
191
|
+
TOutputEvent extends EventObject = TSourceEvent> = (context: TContext, event: TSourceEvent, meta: InvokeMeta) => PromiseLike<TFinalContext> | StateMachine<TFinalContext, any, any, any, any, any, any> | Subscribable<EventObject> | InvokeCallback<TInputEvent, TOutputEvent> | Behavior<any>;
|
|
195
192
|
export interface InvokeDefinition<TContext, TEvent extends EventObject> extends ActivityDefinition<TContext, TEvent> {
|
|
196
193
|
/**
|
|
197
194
|
* The source of the machine to be invoked, or the machine itself.
|
|
@@ -371,7 +368,7 @@ export interface StateNodeConfig<TContext, TStateSchema extends StateSchema, TEv
|
|
|
371
368
|
*
|
|
372
369
|
* This is equivalent to defining a `[done(id)]` transition on this state node's `on` property.
|
|
373
370
|
*/
|
|
374
|
-
onDone?: string | SingleOrArray<TransitionConfig<TContext, DoneEventObject
|
|
371
|
+
onDone?: string | SingleOrArray<TransitionConfig<TContext, DoneEventObject>> | undefined;
|
|
375
372
|
/**
|
|
376
373
|
* The mapping (or array) of delays (in milliseconds) to their potential transition(s).
|
|
377
374
|
* The delayed transitions are taken after the specified delay in an interpreter.
|
|
@@ -498,7 +495,7 @@ declare type MachineOptionsGuards<TContext, TResolvedTypesMeta, TEventsCausingGu
|
|
|
498
495
|
[K in keyof TEventsCausingGuards]?: ConditionPredicate<TContext, Cast<Prop<TIndexedEvents, TEventsCausingGuards[K]>, EventObject>>;
|
|
499
496
|
};
|
|
500
497
|
declare type MachineOptionsServices<TContext, TResolvedTypesMeta, TEventsCausingServices = Prop<TResolvedTypesMeta, 'eventsCausingServices'>, TIndexedEvents = Prop<TResolvedTypesMeta, 'indexedEvents'>, TInvokeSrcNameMap = Prop<TResolvedTypesMeta, 'invokeSrcNameMap'>> = {
|
|
501
|
-
[K in keyof TEventsCausingServices]?: StateMachine<any, any, any> | InvokeCreator<TContext, Cast<Prop<TIndexedEvents, TEventsCausingServices[K]>, EventObject>, Prop<Prop<TIndexedEvents, Prop<TInvokeSrcNameMap, K>>, 'data'>>;
|
|
498
|
+
[K in keyof TEventsCausingServices]?: StateMachine<any, any, any, any, any, any, any> | InvokeCreator<TContext, Cast<Prop<TIndexedEvents, TEventsCausingServices[K]>, EventObject>, Prop<Prop<TIndexedEvents, Prop<TInvokeSrcNameMap, K>>, 'data'>, EventObject, Cast<TIndexedEvents[keyof TIndexedEvents], EventObject>>;
|
|
502
499
|
};
|
|
503
500
|
declare type MakeKeysRequired<T extends string> = {
|
|
504
501
|
[K in T]: unknown;
|
|
@@ -524,8 +521,8 @@ export declare type InternalMachineOptions<TContext, TEvent extends EventObject,
|
|
|
524
521
|
*/
|
|
525
522
|
activities?: Record<string, ActivityConfig<TContext, TEvent>>;
|
|
526
523
|
};
|
|
527
|
-
export declare type MachineOptions<TContext, TEvent extends EventObject, TAction extends BaseActionObject = BaseActionObject, TTypesMeta extends TypegenConstraint = TypegenDisabled> = InternalMachineOptions<TContext, TEvent, ResolveTypegenMeta<TTypesMeta, TEvent, TAction>>;
|
|
528
|
-
export interface MachineConfig<TContext, TStateSchema extends StateSchema, TEvent extends EventObject, TAction extends BaseActionObject = BaseActionObject, TTypesMeta = TypegenDisabled> extends StateNodeConfig<TContext, TStateSchema, TEvent, TAction> {
|
|
524
|
+
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>>;
|
|
525
|
+
export interface MachineConfig<TContext, TStateSchema extends StateSchema, TEvent extends EventObject, TAction extends BaseActionObject = BaseActionObject, TServiceMap extends ServiceMap = ServiceMap, TTypesMeta = TypegenDisabled> extends StateNodeConfig<TContext, TStateSchema, TEvent, TAction> {
|
|
529
526
|
/**
|
|
530
527
|
* The initial context (extended state)
|
|
531
528
|
*/
|
|
@@ -534,10 +531,13 @@ export interface MachineConfig<TContext, TStateSchema extends StateSchema, TEven
|
|
|
534
531
|
* The machine's own version.
|
|
535
532
|
*/
|
|
536
533
|
version?: string;
|
|
537
|
-
schema?: MachineSchema<TContext, TEvent>;
|
|
538
|
-
tsTypes?: TTypesMeta
|
|
534
|
+
schema?: MachineSchema<TContext, TEvent, TServiceMap>;
|
|
535
|
+
tsTypes?: TTypesMeta;
|
|
539
536
|
}
|
|
540
|
-
export
|
|
537
|
+
export declare type ServiceMap = Record<string, {
|
|
538
|
+
data: any;
|
|
539
|
+
}>;
|
|
540
|
+
export interface MachineSchema<TContext, TEvent extends EventObject, TServiceMap extends ServiceMap = ServiceMap> {
|
|
541
541
|
context?: TContext;
|
|
542
542
|
events?: TEvent;
|
|
543
543
|
actions?: {
|
|
@@ -548,10 +548,7 @@ export interface MachineSchema<TContext, TEvent extends EventObject> {
|
|
|
548
548
|
type: string;
|
|
549
549
|
[key: string]: any;
|
|
550
550
|
};
|
|
551
|
-
services?:
|
|
552
|
-
type: string;
|
|
553
|
-
[key: string]: any;
|
|
554
|
-
};
|
|
551
|
+
services?: TServiceMap;
|
|
555
552
|
}
|
|
556
553
|
export interface StandardMachineConfig<TContext, TStateSchema extends StateSchema, TEvent extends EventObject> extends StateNodeConfig<TContext, TStateSchema, TEvent> {
|
|
557
554
|
}
|
|
@@ -570,19 +567,20 @@ export interface HistoryStateNode<TContext> extends StateNode<TContext> {
|
|
|
570
567
|
export interface StateMachine<TContext, TStateSchema extends StateSchema, TEvent extends EventObject, TTypestate extends Typestate<TContext> = {
|
|
571
568
|
value: any;
|
|
572
569
|
context: TContext;
|
|
573
|
-
}, TAction extends BaseActionObject = BaseActionObject, TResolvedTypesMeta = TypegenDisabled> extends StateNode<TContext, TStateSchema, TEvent, TTypestate, TResolvedTypesMeta> {
|
|
570
|
+
}, TAction extends BaseActionObject = BaseActionObject, TServiceMap extends ServiceMap = ServiceMap, TResolvedTypesMeta = TypegenDisabled> extends StateNode<TContext, TStateSchema, TEvent, TTypestate, TServiceMap, TResolvedTypesMeta> {
|
|
574
571
|
id: string;
|
|
575
|
-
states: StateNode<TContext, TStateSchema, TEvent, TTypestate, TResolvedTypesMeta>['states'];
|
|
576
|
-
withConfig(options: InternalMachineOptions<TContext, TEvent, TResolvedTypesMeta, true>, context?: TContext | (() => TContext)): StateMachine<TContext, TStateSchema, TEvent, TTypestate, TAction, MarkAllImplementationsAsProvided<TResolvedTypesMeta
|
|
577
|
-
withContext(context: TContext | (() => TContext)): StateMachine<TContext, TStateSchema, TEvent, TTypestate,
|
|
572
|
+
states: StateNode<TContext, TStateSchema, TEvent, TTypestate, TServiceMap, TResolvedTypesMeta>['states'];
|
|
573
|
+
withConfig(options: InternalMachineOptions<TContext, TEvent, TResolvedTypesMeta, true>, context?: TContext | (() => TContext)): StateMachine<TContext, TStateSchema, TEvent, TTypestate, TAction, TServiceMap, AreAllImplementationsAssumedToBeProvided<TResolvedTypesMeta> extends false ? MarkAllImplementationsAsProvided<TResolvedTypesMeta> : TResolvedTypesMeta>;
|
|
574
|
+
withContext(context: TContext | (() => TContext)): StateMachine<TContext, TStateSchema, TEvent, TTypestate, TAction, TServiceMap, TResolvedTypesMeta>;
|
|
578
575
|
__TContext: TContext;
|
|
579
576
|
__TStateSchema: TStateSchema;
|
|
580
577
|
__TEvent: TEvent;
|
|
581
578
|
__TTypestate: TTypestate;
|
|
582
579
|
__TAction: TAction;
|
|
580
|
+
__TServiceMap: TServiceMap;
|
|
583
581
|
__TResolvedTypesMeta: TResolvedTypesMeta;
|
|
584
582
|
}
|
|
585
|
-
export declare type StateFrom<T extends StateMachine<any, any, any, any, any, any> | ((...args: any[]) => StateMachine<any, any, any, any, any, any>)> = T extends StateMachine<any, any, any, any, any, any> ? ReturnType<T['transition']> : T extends (...args: any[]) => StateMachine<any, any, any, any, any, any> ? ReturnType<ReturnType<T>['transition']> : never;
|
|
583
|
+
export declare type StateFrom<T extends StateMachine<any, any, any, any, any, any, any> | ((...args: any[]) => StateMachine<any, any, any, any, any, any, any>)> = T extends StateMachine<any, any, any, any, any, any, any> ? ReturnType<T['transition']> : T extends (...args: any[]) => StateMachine<any, any, any, any, any, any, any> ? ReturnType<ReturnType<T>['transition']> : never;
|
|
586
584
|
export interface ActionMap<TContext, TEvent extends EventObject> {
|
|
587
585
|
onEntry: Array<Action<TContext, TEvent>>;
|
|
588
586
|
actions: Array<Action<TContext, TEvent>>;
|
|
@@ -601,9 +599,9 @@ export interface ActivityMap {
|
|
|
601
599
|
}
|
|
602
600
|
export interface StateTransition<TContext, TEvent extends EventObject> {
|
|
603
601
|
transitions: Array<TransitionDefinition<TContext, TEvent>>;
|
|
604
|
-
configuration: Array<StateNode<TContext, any, TEvent, any, any>>;
|
|
605
|
-
entrySet: Array<StateNode<TContext, any, TEvent, any, any>>;
|
|
606
|
-
exitSet: Array<StateNode<TContext, any, TEvent, any, any>>;
|
|
602
|
+
configuration: Array<StateNode<TContext, any, TEvent, any, any, any>>;
|
|
603
|
+
entrySet: Array<StateNode<TContext, any, TEvent, any, any, any>>;
|
|
604
|
+
exitSet: Array<StateNode<TContext, any, TEvent, any, any, any>>;
|
|
607
605
|
/**
|
|
608
606
|
* The source state that preceded the transition.
|
|
609
607
|
*/
|
|
@@ -860,7 +858,7 @@ export interface StateConfig<TContext, TEvent extends EventObject> {
|
|
|
860
858
|
children: Record<string, ActorRef<any>>;
|
|
861
859
|
done?: boolean;
|
|
862
860
|
tags?: Set<string>;
|
|
863
|
-
machine?: StateMachine<TContext, any, TEvent, any, any, any>;
|
|
861
|
+
machine?: StateMachine<TContext, any, TEvent, any, any, any, any>;
|
|
864
862
|
}
|
|
865
863
|
export interface StateSchema<TC = any> {
|
|
866
864
|
meta?: any;
|
|
@@ -966,18 +964,21 @@ export interface Observer<T> {
|
|
|
966
964
|
export interface Subscription {
|
|
967
965
|
unsubscribe(): void;
|
|
968
966
|
}
|
|
967
|
+
export interface InteropObservable<T> {
|
|
968
|
+
[Symbol.observable]: () => Subscribable<T>;
|
|
969
|
+
}
|
|
969
970
|
export interface Subscribable<T> {
|
|
970
971
|
subscribe(next: (value: T) => void, error?: (error: any) => void, complete?: () => void): Subscription;
|
|
971
972
|
subscribe(observer: Observer<T>): Subscription;
|
|
972
973
|
}
|
|
973
|
-
export declare type Spawnable = StateMachine<any, any, any> | PromiseLike<any> | InvokeCallback | Subscribable<any> | Behavior<any>;
|
|
974
|
+
export declare type Spawnable = StateMachine<any, any, any> | PromiseLike<any> | InvokeCallback | InteropObservable<any> | Subscribable<any> | Behavior<any>;
|
|
974
975
|
export declare type ExtractEvent<TEvent extends EventObject, TEventType extends TEvent['type']> = TEvent extends {
|
|
975
976
|
type: TEventType;
|
|
976
977
|
} ? TEvent : never;
|
|
977
978
|
export interface BaseActorRef<TEvent extends EventObject> {
|
|
978
979
|
send: (event: TEvent) => void;
|
|
979
980
|
}
|
|
980
|
-
export interface ActorRef<TEvent extends EventObject, TEmitted = any> extends Subscribable<TEmitted> {
|
|
981
|
+
export interface ActorRef<TEvent extends EventObject, TEmitted = any> extends Subscribable<TEmitted>, InteropObservable<TEmitted> {
|
|
981
982
|
send: Sender<TEvent>;
|
|
982
983
|
id: string;
|
|
983
984
|
getSnapshot: () => TEmitted | undefined;
|
|
@@ -994,11 +995,11 @@ export declare type ActorRefWithDeprecatedState<TContext, TEvent extends EventOb
|
|
|
994
995
|
*/
|
|
995
996
|
state: State<TContext, TEvent, any, TTypestate, TResolvedTypesMeta>;
|
|
996
997
|
};
|
|
997
|
-
export declare type ActorRefFrom<T> = T extends StateMachine<infer TContext, any, infer TEvent, infer TTypestate> ? ActorRefWithDeprecatedState<TContext, TEvent, TTypestate> : T extends (...args: any[]) => StateMachine<infer TContext, any, infer TEvent, infer TTypestate, any, infer TResolvedTypesMeta> ? ActorRefWithDeprecatedState<TContext, TEvent, TTypestate, TResolvedTypesMeta> : T extends Promise<infer U> ? ActorRef<never, U> : T extends Behavior<infer TEvent1, infer TEmitted> ? ActorRef<TEvent1, TEmitted> : T extends (...args: any[]) => Behavior<infer TEvent1, infer TEmitted> ? ActorRef<TEvent1, TEmitted> : never;
|
|
998
|
+
export declare type ActorRefFrom<T> = T extends StateMachine<infer TContext, any, infer TEvent, infer TTypestate, any, any, any> ? ActorRefWithDeprecatedState<TContext, TEvent, TTypestate> : T extends (...args: any[]) => StateMachine<infer TContext, any, infer TEvent, infer TTypestate, any, any, infer TResolvedTypesMeta> ? ActorRefWithDeprecatedState<TContext, TEvent, TTypestate, TResolvedTypesMeta> : T extends Promise<infer U> ? ActorRef<never, U> : T extends Behavior<infer TEvent1, infer TEmitted> ? ActorRef<TEvent1, TEmitted> : T extends (...args: any[]) => Behavior<infer TEvent1, infer TEmitted> ? ActorRef<TEvent1, TEmitted> : never;
|
|
998
999
|
export declare type AnyInterpreter = Interpreter<any, any, any, any, any>;
|
|
999
|
-
export declare type InterpreterFrom<T extends StateMachine<any, any, any, any, any, any> | ((...args: any[]) => StateMachine<any, any, any, any, any, any>)> = T extends StateMachine<infer TContext, infer TStateSchema, infer TEvent, infer TTypestate, any, infer TResolvedTypesMeta> ? Interpreter<TContext, TStateSchema, TEvent, TTypestate, TResolvedTypesMeta> : T extends (...args: any[]) => StateMachine<infer TContext, infer TStateSchema, infer TEvent, infer TTypestate, any, infer TResolvedTypesMeta> ? Interpreter<TContext, TStateSchema, TEvent, TTypestate, TResolvedTypesMeta> : never;
|
|
1000
|
-
export declare type MachineOptionsFrom<T extends StateMachine<any, any, any, any> | ((...args: any[]) => StateMachine<any, any, any, any>), TRequireMissingImplementations extends boolean = false> = ReturnTypeOrValue<T> extends StateMachine<infer TContext, any, infer TEvent, any, any, infer TResolvedTypesMeta> ? InternalMachineOptions<TContext, TEvent, TResolvedTypesMeta, TRequireMissingImplementations> : never;
|
|
1001
|
-
export declare type __ResolvedTypesMetaFrom<T> = T extends StateMachine<any, any, any, any, any, infer TResolvedTypesMeta> ? TResolvedTypesMeta : never;
|
|
1000
|
+
export declare type InterpreterFrom<T extends StateMachine<any, any, any, any, any, any, any> | ((...args: any[]) => StateMachine<any, any, any, any, any, any, any>)> = 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;
|
|
1001
|
+
export declare type MachineOptionsFrom<T extends StateMachine<any, any, any, any, any, any, any> | ((...args: any[]) => StateMachine<any, any, any, any, any, any, any>), TRequireMissingImplementations extends boolean = false> = ReturnTypeOrValue<T> extends StateMachine<infer TContext, any, infer TEvent, any, any, any, infer TResolvedTypesMeta> ? InternalMachineOptions<TContext, TEvent, TResolvedTypesMeta, TRequireMissingImplementations> : never;
|
|
1002
|
+
export declare type __ResolvedTypesMetaFrom<T> = T extends StateMachine<any, any, any, any, any, any, infer TResolvedTypesMeta> ? TResolvedTypesMeta : never;
|
|
1002
1003
|
export interface ActorContext<TEvent extends EventObject, TEmitted> {
|
|
1003
1004
|
parent?: ActorRef<any, any>;
|
|
1004
1005
|
self: ActorRef<TEvent, TEmitted>;
|
|
@@ -1011,7 +1012,7 @@ export interface Behavior<TEvent extends EventObject, TEmitted = any> {
|
|
|
1011
1012
|
start?: (actorCtx: ActorContext<TEvent, TEmitted>) => TEmitted;
|
|
1012
1013
|
}
|
|
1013
1014
|
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;
|
|
1014
|
-
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 ___, infer ____> ? TEvent : R extends State<infer _, infer TEvent, infer ___, infer ____> ? TEvent : R extends Interpreter<infer _, infer __, infer TEvent, infer ____> ? TEvent : never : never;
|
|
1015
|
+
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 ___, infer ____> ? TEvent : R extends State<infer _, infer TEvent, infer ___, infer ____> ? TEvent : R extends Interpreter<infer _, infer __, infer TEvent, infer ____> ? TEvent : R extends ActorRef<infer TEvent, infer _> ? TEvent : never : never;
|
|
1015
1016
|
export declare type EventFrom<T, K extends Prop<TEvent, 'type'> = never, TEvent = ResolveEventType<T>> = IsNever<K> extends true ? TEvent : Extract<TEvent, {
|
|
1016
1017
|
type: K;
|
|
1017
1018
|
}>;
|
package/es/utils.d.ts
CHANGED
|
@@ -52,7 +52,11 @@ export declare function isFunction(value: any): value is Function;
|
|
|
52
52
|
export declare function isString(value: any): value is string;
|
|
53
53
|
export declare function toGuard<TContext, TEvent extends EventObject>(condition?: Condition<TContext, TEvent>, guardMap?: Record<string, ConditionPredicate<TContext, TEvent>>): Guard<TContext, TEvent> | undefined;
|
|
54
54
|
export declare function isObservable<T>(value: any): value is Subscribable<T>;
|
|
55
|
-
export declare const symbolObservable:
|
|
55
|
+
export declare const symbolObservable: string | typeof Symbol.observable;
|
|
56
|
+
export declare const interopSymbols: {
|
|
57
|
+
[x: string]: () => any;
|
|
58
|
+
[Symbol.observable]: () => any;
|
|
59
|
+
};
|
|
56
60
|
export declare function isMachine(value: any): value is StateMachine<any, any, any>;
|
|
57
61
|
export declare function isActor(value: any): value is Actor;
|
|
58
62
|
export declare const uniqueId: () => string;
|
|
@@ -66,4 +70,5 @@ export declare function reportUnhandledExceptionOnInvocation(originalError: any,
|
|
|
66
70
|
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;
|
|
67
71
|
export declare function toInvokeSource(src: string | InvokeSourceDefinition): InvokeSourceDefinition;
|
|
68
72
|
export declare function toObserver<T>(nextHandler: Observer<T> | ((value: T) => void), errorHandler?: (error: any) => void, completionHandler?: () => void): Observer<T>;
|
|
73
|
+
export declare function createInvokeId(stateNodeId: string, index: number): string;
|
|
69
74
|
//# sourceMappingURL=utils.d.ts.map
|
package/es/utils.js
CHANGED
|
@@ -2,6 +2,7 @@ import { __spreadArray, __read, __values, __assign } from './_virtual/_tslib.js'
|
|
|
2
2
|
import { DEFAULT_GUARD_TYPE, TARGETLESS_KEY, STATE_DELIMITER } from './constants.js';
|
|
3
3
|
import { IS_PRODUCTION } from './environment.js';
|
|
4
4
|
|
|
5
|
+
var _a;
|
|
5
6
|
function keys(value) {
|
|
6
7
|
return Object.keys(value);
|
|
7
8
|
}
|
|
@@ -36,7 +37,7 @@ function matchesState(parentStateId, childStateId, delimiter) {
|
|
|
36
37
|
}
|
|
37
38
|
function getEventType(event) {
|
|
38
39
|
try {
|
|
39
|
-
return isString(event) || typeof event === 'number' ? ""
|
|
40
|
+
return isString(event) || typeof event === 'number' ? "".concat(event) : event.type;
|
|
40
41
|
} catch (e) {
|
|
41
42
|
throw new Error('Events must be strings or objects with a string event.type property.');
|
|
42
43
|
}
|
|
@@ -49,7 +50,7 @@ function toStatePath(stateId, delimiter) {
|
|
|
49
50
|
|
|
50
51
|
return stateId.toString().split(delimiter);
|
|
51
52
|
} catch (e) {
|
|
52
|
-
throw new Error("'"
|
|
53
|
+
throw new Error("'".concat(stateId, "' is not a valid state path."));
|
|
53
54
|
}
|
|
54
55
|
}
|
|
55
56
|
function isStateLike(state) {
|
|
@@ -218,7 +219,7 @@ function toStatePaths(stateValue) {
|
|
|
218
219
|
function flatten(array) {
|
|
219
220
|
var _a;
|
|
220
221
|
|
|
221
|
-
return (_a = []).concat.apply(_a, __spreadArray([], __read(array)));
|
|
222
|
+
return (_a = []).concat.apply(_a, __spreadArray([], __read(array), false));
|
|
222
223
|
}
|
|
223
224
|
function toArrayStrict(value) {
|
|
224
225
|
if (isArray(value)) {
|
|
@@ -395,7 +396,7 @@ if (!IS_PRODUCTION) {
|
|
|
395
396
|
}
|
|
396
397
|
|
|
397
398
|
if (console !== undefined) {
|
|
398
|
-
var args = ["Warning: "
|
|
399
|
+
var args = ["Warning: ".concat(message)];
|
|
399
400
|
|
|
400
401
|
if (error) {
|
|
401
402
|
args.push(error);
|
|
@@ -460,6 +461,9 @@ function isObservable(value) {
|
|
|
460
461
|
var symbolObservable = /*#__PURE__*/function () {
|
|
461
462
|
return typeof Symbol === 'function' && Symbol.observable || '@@observable';
|
|
462
463
|
}();
|
|
464
|
+
var interopSymbols = (_a = {}, _a[symbolObservable] = function () {
|
|
465
|
+
return this;
|
|
466
|
+
}, _a);
|
|
463
467
|
function isMachine(value) {
|
|
464
468
|
try {
|
|
465
469
|
return '__xstatenode' in value;
|
|
@@ -524,15 +528,15 @@ function normalizeTarget(target) {
|
|
|
524
528
|
}
|
|
525
529
|
function reportUnhandledExceptionOnInvocation(originalError, currentError, id) {
|
|
526
530
|
if (!IS_PRODUCTION) {
|
|
527
|
-
var originalStackTrace = originalError.stack ? " Stacktrace was '"
|
|
531
|
+
var originalStackTrace = originalError.stack ? " Stacktrace was '".concat(originalError.stack, "'") : '';
|
|
528
532
|
|
|
529
533
|
if (originalError === currentError) {
|
|
530
534
|
// tslint:disable-next-line:no-console
|
|
531
|
-
console.error("Missing onError handler for invocation '"
|
|
535
|
+
console.error("Missing onError handler for invocation '".concat(id, "', error was '").concat(originalError, "'.").concat(originalStackTrace));
|
|
532
536
|
} else {
|
|
533
|
-
var stackTrace = currentError.stack ? " Stacktrace was '"
|
|
537
|
+
var stackTrace = currentError.stack ? " Stacktrace was '".concat(currentError.stack, "'") : ''; // tslint:disable-next-line:no-console
|
|
534
538
|
|
|
535
|
-
console.error("Missing onError handler and/or unhandled exception/promise rejection for invocation '"
|
|
539
|
+
console.error("Missing onError handler and/or unhandled exception/promise rejection for invocation '".concat(id, "'. ") + "Original error: '".concat(originalError, "'. ").concat(originalStackTrace, " Current error is '").concat(currentError, "'.").concat(stackTrace));
|
|
536
540
|
}
|
|
537
541
|
}
|
|
538
542
|
}
|
|
@@ -551,7 +555,7 @@ function evaluateGuard(machine, guard, context, _event, state) {
|
|
|
551
555
|
var condFn = guards === null || guards === void 0 ? void 0 : guards[guard.type];
|
|
552
556
|
|
|
553
557
|
if (!condFn) {
|
|
554
|
-
throw new Error("Guard '"
|
|
558
|
+
throw new Error("Guard '".concat(guard.type, "' is not implemented on machine '").concat(machine.id, "'."));
|
|
555
559
|
}
|
|
556
560
|
|
|
557
561
|
return condFn(context, _event.data, guardMeta);
|
|
@@ -580,5 +584,8 @@ function toObserver(nextHandler, errorHandler, completionHandler) {
|
|
|
580
584
|
complete: completionHandler || noop
|
|
581
585
|
};
|
|
582
586
|
}
|
|
587
|
+
function createInvokeId(stateNodeId, index) {
|
|
588
|
+
return "".concat(stateNodeId, ":invocation[").concat(index, "]");
|
|
589
|
+
}
|
|
583
590
|
|
|
584
|
-
export { evaluateGuard, flatten, getEventType, isActor, isArray, isBehavior, isBuiltInEvent, isFunction, isMachine, isObservable, isPromiseLike, isStateLike, isString, keys, mapContext, mapFilterValues, mapValues, matchesState, nestedPath, normalizeTarget, partition, path, pathToStateValue, reportUnhandledExceptionOnInvocation, symbolObservable, toArray, toArrayStrict, toEventObject, toGuard, toInvokeSource, toObserver, toSCXMLEvent, toStatePath, toStatePaths, toStateValue, toTransitionConfigArray, uniqueId, updateContext, updateHistoryStates, updateHistoryValue, warn };
|
|
591
|
+
export { createInvokeId, evaluateGuard, flatten, getEventType, interopSymbols, isActor, isArray, isBehavior, isBuiltInEvent, isFunction, isMachine, isObservable, isPromiseLike, isStateLike, isString, keys, mapContext, mapFilterValues, mapValues, matchesState, nestedPath, normalizeTarget, partition, path, pathToStateValue, reportUnhandledExceptionOnInvocation, symbolObservable, toArray, toArrayStrict, toEventObject, toGuard, toInvokeSource, toObserver, toSCXMLEvent, toStatePath, toStatePaths, toStateValue, toTransitionConfigArray, uniqueId, updateContext, updateHistoryStates, updateHistoryValue, warn };
|
package/lib/Actor.js
CHANGED
|
@@ -7,7 +7,7 @@ var utils = require('./utils.js');
|
|
|
7
7
|
var serviceScope = require('./serviceScope.js');
|
|
8
8
|
|
|
9
9
|
function createNullActor(id) {
|
|
10
|
-
return {
|
|
10
|
+
return _tslib.__assign({
|
|
11
11
|
id: id,
|
|
12
12
|
send: function () {
|
|
13
13
|
return void 0;
|
|
@@ -27,7 +27,7 @@ function createNullActor(id) {
|
|
|
27
27
|
id: id
|
|
28
28
|
};
|
|
29
29
|
}
|
|
30
|
-
};
|
|
30
|
+
}, utils.interopSymbols);
|
|
31
31
|
}
|
|
32
32
|
/**
|
|
33
33
|
* Creates a deferred actor that is able to be invoked given the provided
|
|
@@ -76,7 +76,7 @@ function isSpawnedActor(item) {
|
|
|
76
76
|
return isActor(item) && 'id' in item;
|
|
77
77
|
}
|
|
78
78
|
function toActorRef(actorRefLike) {
|
|
79
|
-
return _tslib.__assign({
|
|
79
|
+
return _tslib.__assign(_tslib.__assign({
|
|
80
80
|
subscribe: function () {
|
|
81
81
|
return {
|
|
82
82
|
unsubscribe: function () {
|
|
@@ -88,7 +88,7 @@ function toActorRef(actorRefLike) {
|
|
|
88
88
|
getSnapshot: function () {
|
|
89
89
|
return undefined;
|
|
90
90
|
}
|
|
91
|
-
}, actorRefLike);
|
|
91
|
+
}, utils.interopSymbols), actorRefLike);
|
|
92
92
|
}
|
|
93
93
|
|
|
94
94
|
exports.createDeferredActor = createDeferredActor;
|
package/lib/Machine.d.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { Model } from './model.types';
|
|
2
|
-
import { AnyEventObject, BaseActionObject, DefaultContext, EventObject, MachineConfig,
|
|
2
|
+
import { AnyEventObject, BaseActionObject, DefaultContext, EventObject, MachineConfig, InternalMachineOptions, StateMachine, StateSchema, Typestate, ServiceMap } from './types';
|
|
3
3
|
import { TypegenConstraint, TypegenDisabled, ResolveTypegenMeta } from './typegenTypes';
|
|
4
4
|
/**
|
|
5
5
|
* @deprecated Use `createMachine(...)` instead.
|
|
6
6
|
*/
|
|
7
|
-
export declare function Machine<TContext = any, TEvent extends EventObject = AnyEventObject>(config: MachineConfig<TContext, any, TEvent>, options?:
|
|
8
|
-
export declare function Machine<TContext = DefaultContext, TStateSchema extends StateSchema = any, TEvent extends EventObject = AnyEventObject>(config: MachineConfig<TContext, TStateSchema, TEvent>, options?:
|
|
7
|
+
export declare function Machine<TContext = any, TEvent extends EventObject = AnyEventObject>(config: MachineConfig<TContext, any, TEvent>, options?: InternalMachineOptions<TContext, TEvent, ResolveTypegenMeta<TypegenDisabled, TEvent, BaseActionObject, ServiceMap>>, initialContext?: TContext): StateMachine<TContext, any, TEvent, any, BaseActionObject, ServiceMap, ResolveTypegenMeta<TypegenDisabled, TEvent, BaseActionObject, ServiceMap>>;
|
|
8
|
+
export declare function Machine<TContext = DefaultContext, TStateSchema extends StateSchema = any, TEvent extends EventObject = AnyEventObject>(config: MachineConfig<TContext, TStateSchema, TEvent>, options?: InternalMachineOptions<TContext, TEvent, ResolveTypegenMeta<TypegenDisabled, TEvent, BaseActionObject, ServiceMap>>, initialContext?: TContext): StateMachine<TContext, TStateSchema, TEvent, any, BaseActionObject, ServiceMap, ResolveTypegenMeta<TypegenDisabled, TEvent, BaseActionObject, ServiceMap>>;
|
|
9
9
|
export declare function createMachine<TContext, TEvent extends EventObject = AnyEventObject, TTypestate extends Typestate<TContext> = {
|
|
10
10
|
value: any;
|
|
11
11
|
context: TContext;
|
|
12
|
-
}, TTypesMeta extends TypegenConstraint = TypegenDisabled>(config: TContext extends Model<any, any, any, any> ? 'Model type no longer supported as generic type. Please use `model.createMachine(...)` instead.' : MachineConfig<TContext, any, TEvent, BaseActionObject, TTypesMeta>, options?: InternalMachineOptions<TContext, TEvent, ResolveTypegenMeta<TTypesMeta, TEvent, BaseActionObject>>): StateMachine<TContext, any, TEvent, any, BaseActionObject, ResolveTypegenMeta<TTypesMeta, TEvent, BaseActionObject>>;
|
|
12
|
+
}, TServiceMap extends ServiceMap = ServiceMap, TTypesMeta extends TypegenConstraint = TypegenDisabled>(config: TContext extends Model<any, any, any, any> ? 'Model type no longer supported as generic type. Please use `model.createMachine(...)` instead.' : MachineConfig<TContext, any, TEvent, BaseActionObject, TServiceMap, TTypesMeta>, options?: InternalMachineOptions<TContext, TEvent, ResolveTypegenMeta<TTypesMeta, TEvent, BaseActionObject, TServiceMap>>): StateMachine<TContext, any, TEvent, any, BaseActionObject, TServiceMap, ResolveTypegenMeta<TTypesMeta, TEvent, BaseActionObject, TServiceMap>>;
|
|
13
13
|
//# sourceMappingURL=Machine.d.ts.map
|
package/lib/SimulatedClock.js
CHANGED
|
@@ -15,10 +15,14 @@ var __read = (this && this.__read) || function (o, n) {
|
|
|
15
15
|
}
|
|
16
16
|
return ar;
|
|
17
17
|
};
|
|
18
|
-
var __spreadArray = (this && this.__spreadArray) || function (to, from) {
|
|
19
|
-
for (var i = 0,
|
|
20
|
-
|
|
21
|
-
|
|
18
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
19
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
20
|
+
if (ar || !(i in from)) {
|
|
21
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
22
|
+
ar[i] = from[i];
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
22
26
|
};
|
|
23
27
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
28
|
exports.SimulatedClock = void 0;
|
|
@@ -55,7 +59,7 @@ var SimulatedClock = /** @class */ (function () {
|
|
|
55
59
|
};
|
|
56
60
|
SimulatedClock.prototype.flushTimeouts = function () {
|
|
57
61
|
var _this = this;
|
|
58
|
-
__spreadArray([], __read(this.timeouts)).sort(function (_a, _b) {
|
|
62
|
+
__spreadArray([], __read(this.timeouts), false).sort(function (_a, _b) {
|
|
59
63
|
var _c = __read(_a, 2), _idA = _c[0], timeoutA = _c[1];
|
|
60
64
|
var _d = __read(_b, 2), _idB = _d[0], timeoutB = _d[1];
|
|
61
65
|
var endA = timeoutA.start + timeoutA.timeout;
|
package/lib/State.d.ts
CHANGED
|
@@ -39,7 +39,7 @@ export declare class State<TContext, TEvent extends EventObject = EventObject, T
|
|
|
39
39
|
/**
|
|
40
40
|
* The enabled state nodes representative of the state value.
|
|
41
41
|
*/
|
|
42
|
-
configuration: Array<StateNode<TContext, any, TEvent, any>>;
|
|
42
|
+
configuration: Array<StateNode<TContext, any, TEvent, any, any>>;
|
|
43
43
|
/**
|
|
44
44
|
* The next events that will cause a transition from the current state.
|
|
45
45
|
*/
|
|
@@ -53,7 +53,7 @@ export declare class State<TContext, TEvent extends EventObject = EventObject, T
|
|
|
53
53
|
*/
|
|
54
54
|
children: Record<string, ActorRef<any>>;
|
|
55
55
|
tags: Set<string>;
|
|
56
|
-
machine: StateMachine<TContext, any, TEvent, TTypestate, BaseActionObject, TResolvedTypesMeta> | undefined;
|
|
56
|
+
machine: StateMachine<TContext, any, TEvent, TTypestate, BaseActionObject, any, TResolvedTypesMeta> | undefined;
|
|
57
57
|
/**
|
|
58
58
|
* Creates a new State instance for the given `stateValue` and `context`.
|
|
59
59
|
* @param stateValue
|
|
@@ -64,7 +64,7 @@ export declare class State<TContext, TEvent extends EventObject = EventObject, T
|
|
|
64
64
|
* Creates a new State instance for the given `config`.
|
|
65
65
|
* @param config The state config
|
|
66
66
|
*/
|
|
67
|
-
static create<TC, TE extends EventObject = EventObject>(config: StateConfig<TC, TE>): State<TC, TE>;
|
|
67
|
+
static create<TC, TE extends EventObject = EventObject>(config: StateConfig<TC, TE>): State<TC, TE, any, any, any>;
|
|
68
68
|
/**
|
|
69
69
|
* Creates a new `State` instance for the given `stateValue` and `context` with no actions (side-effects).
|
|
70
70
|
* @param stateValue
|
|
@@ -90,14 +90,14 @@ export declare class State<TContext, TEvent extends EventObject = EventObject, T
|
|
|
90
90
|
* @param delimiter The character(s) that separate each subpath in the string state node path.
|
|
91
91
|
*/
|
|
92
92
|
toStrings(stateValue?: StateValue, delimiter?: string): string[];
|
|
93
|
-
toJSON(): Omit<this, "
|
|
93
|
+
toJSON(): Omit<this, "machine" | "tags" | "transitions" | "configuration"> & {
|
|
94
94
|
tags: string[];
|
|
95
95
|
};
|
|
96
96
|
/**
|
|
97
97
|
* Whether the current state value is a subset of the given parent state value.
|
|
98
98
|
* @param parentStateValue
|
|
99
99
|
*/
|
|
100
|
-
matches<TSV extends
|
|
100
|
+
matches<TSV extends TResolvedTypesMeta extends TypegenEnabled ? Prop<TResolvedTypesMeta, 'matchesStates'> : TTypestate['value']>(parentStateValue: TSV): this is State<(TTypestate extends any ? {
|
|
101
101
|
value: TSV;
|
|
102
102
|
context: any;
|
|
103
103
|
} extends TTypestate ? TTypestate : never : never)['context'], TEvent, TStateSchema, TTypestate, TResolvedTypesMeta> & {
|
|
@@ -109,7 +109,10 @@ export declare class State<TContext, TEvent extends EventObject = EventObject, T
|
|
|
109
109
|
*/
|
|
110
110
|
hasTag(tag: TResolvedTypesMeta extends TypegenEnabled ? Prop<TResolvedTypesMeta, 'tags'> : string): boolean;
|
|
111
111
|
/**
|
|
112
|
-
* Determines whether sending the `event` will cause a transition
|
|
112
|
+
* Determines whether sending the `event` will cause a non-forbidden transition
|
|
113
|
+
* to be selected, even if the transitions have no actions nor
|
|
114
|
+
* change the state value.
|
|
115
|
+
*
|
|
113
116
|
* @param event The event to test
|
|
114
117
|
* @returns Whether the event will cause a transition
|
|
115
118
|
*/
|
package/lib/State.js
CHANGED
|
@@ -215,7 +215,7 @@ function () {
|
|
|
215
215
|
return _this.toStrings(stateValue[key], delimiter).map(function (s) {
|
|
216
216
|
return key + delimiter + s;
|
|
217
217
|
});
|
|
218
|
-
}))));
|
|
218
|
+
})), false));
|
|
219
219
|
};
|
|
220
220
|
|
|
221
221
|
State.prototype.toJSON = function () {
|
|
@@ -249,7 +249,10 @@ function () {
|
|
|
249
249
|
return this.tags.has(tag);
|
|
250
250
|
};
|
|
251
251
|
/**
|
|
252
|
-
* Determines whether sending the `event` will cause a transition
|
|
252
|
+
* Determines whether sending the `event` will cause a non-forbidden transition
|
|
253
|
+
* to be selected, even if the transitions have no actions nor
|
|
254
|
+
* change the state value.
|
|
255
|
+
*
|
|
253
256
|
* @param event The event to test
|
|
254
257
|
* @returns Whether the event will cause a transition
|
|
255
258
|
*/
|
|
@@ -262,7 +265,11 @@ function () {
|
|
|
262
265
|
utils.warn(!!this.machine, "state.can(...) used outside of a machine-created State object; this will always return false.");
|
|
263
266
|
}
|
|
264
267
|
|
|
265
|
-
|
|
268
|
+
var transitionData = (_a = this.machine) === null || _a === void 0 ? void 0 : _a.getTransitionData(this, event);
|
|
269
|
+
return !!(transitionData === null || transitionData === void 0 ? void 0 : transitionData.transitions.length) && // Check that at least one transition is not forbidden
|
|
270
|
+
transitionData.transitions.some(function (t) {
|
|
271
|
+
return t.target !== undefined || t.actions.length;
|
|
272
|
+
});
|
|
266
273
|
};
|
|
267
274
|
|
|
268
275
|
return State;
|
package/lib/StateNode.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { Event, StateValue, MachineOptions, EventObject, HistoryValue, StateNodeDefinition, TransitionDefinition, DelayedTransitionDefinition, ActivityDefinition, StateNodeConfig, StateSchema, StateNodesConfig, InvokeDefinition, ActionObject, Mapper, PropertyMapper, SCXML, Typestate, TransitionDefinitionMap, MachineSchema, InternalMachineOptions } from './types';
|
|
1
|
+
import { Event, StateValue, StateTransition, MachineOptions, EventObject, HistoryValue, StateNodeDefinition, TransitionDefinition, DelayedTransitionDefinition, ActivityDefinition, StateNodeConfig, StateSchema, StateNodesConfig, InvokeDefinition, ActionObject, Mapper, PropertyMapper, SCXML, Typestate, TransitionDefinitionMap, MachineSchema, InternalMachineOptions, ServiceMap } from './types';
|
|
2
2
|
import { State } from './State';
|
|
3
3
|
import { TypegenDisabled } from './typegenTypes';
|
|
4
4
|
declare class StateNode<TContext = any, TStateSchema extends StateSchema = any, TEvent extends EventObject = EventObject, TTypestate extends Typestate<TContext> = {
|
|
5
5
|
value: any;
|
|
6
6
|
context: TContext;
|
|
7
|
-
}, TResolvedTypesMeta = TypegenDisabled> {
|
|
7
|
+
}, TServiceMap extends ServiceMap = ServiceMap, TResolvedTypesMeta = TypegenDisabled> {
|
|
8
8
|
/**
|
|
9
9
|
* The raw config used to create the machine.
|
|
10
10
|
*/
|
|
@@ -82,7 +82,7 @@ declare class StateNode<TContext = any, TStateSchema extends StateSchema = any,
|
|
|
82
82
|
/**
|
|
83
83
|
* The parent state node.
|
|
84
84
|
*/
|
|
85
|
-
parent?: StateNode<TContext, any, TEvent, any>;
|
|
85
|
+
parent?: StateNode<TContext, any, TEvent, any, any, any>;
|
|
86
86
|
/**
|
|
87
87
|
* The root machine node.
|
|
88
88
|
*/
|
|
@@ -126,7 +126,7 @@ declare class StateNode<TContext = any, TStateSchema extends StateSchema = any,
|
|
|
126
126
|
*/
|
|
127
127
|
_context?: Readonly<TContext> | (() => Readonly<TContext>), // TODO: this is unsafe, but we're removing it in v5 anyway
|
|
128
128
|
_stateInfo?: {
|
|
129
|
-
parent: StateNode<any, any, any, any, any>;
|
|
129
|
+
parent: StateNode<any, any, any, any, any, any>;
|
|
130
130
|
key: string;
|
|
131
131
|
});
|
|
132
132
|
private _init;
|
|
@@ -136,7 +136,7 @@ declare class StateNode<TContext = any, TStateSchema extends StateSchema = any,
|
|
|
136
136
|
* @param options Options (actions, guards, activities, services) to recursively merge with the existing options.
|
|
137
137
|
* @param context Custom context (will override predefined context)
|
|
138
138
|
*/
|
|
139
|
-
withConfig(options: InternalMachineOptions<TContext, TEvent, TResolvedTypesMeta, true>, context?: TContext | (() => TContext)): StateNode<TContext, TStateSchema, TEvent, TTypestate, TResolvedTypesMeta>;
|
|
139
|
+
withConfig(options: InternalMachineOptions<TContext, TEvent, TResolvedTypesMeta, true>, context?: TContext | (() => TContext)): StateNode<TContext, TStateSchema, TEvent, TTypestate, TServiceMap, TResolvedTypesMeta>;
|
|
140
140
|
/**
|
|
141
141
|
* Clones this state machine with custom context.
|
|
142
142
|
*
|
|
@@ -168,7 +168,7 @@ declare class StateNode<TContext = any, TStateSchema extends StateSchema = any,
|
|
|
168
168
|
*
|
|
169
169
|
* @param state The state value or State instance
|
|
170
170
|
*/
|
|
171
|
-
getStateNodes(state: StateValue | State<TContext, TEvent, any, TTypestate, TResolvedTypesMeta>): Array<StateNode<TContext, any, TEvent, TTypestate, TResolvedTypesMeta>>;
|
|
171
|
+
getStateNodes(state: StateValue | State<TContext, TEvent, any, TTypestate, TResolvedTypesMeta>): Array<StateNode<TContext, any, TEvent, TTypestate, TServiceMap, TResolvedTypesMeta>>;
|
|
172
172
|
/**
|
|
173
173
|
* Returns `true` if this state node explicitly handles the given event.
|
|
174
174
|
*
|
|
@@ -187,6 +187,7 @@ declare class StateNode<TContext = any, TStateSchema extends StateSchema = any,
|
|
|
187
187
|
private transitionCompoundNode;
|
|
188
188
|
private transitionParallelNode;
|
|
189
189
|
private _transition;
|
|
190
|
+
getTransitionData(state: State<TContext, TEvent, any, any, any>, event: Event<TEvent> | SCXML.Event<TEvent>): StateTransition<TContext, TEvent> | undefined;
|
|
190
191
|
private next;
|
|
191
192
|
private nodesFromChild;
|
|
192
193
|
/**
|
|
@@ -208,19 +209,19 @@ declare class StateNode<TContext = any, TStateSchema extends StateSchema = any,
|
|
|
208
209
|
/**
|
|
209
210
|
* Returns the child state node from its relative `stateKey`, or throws.
|
|
210
211
|
*/
|
|
211
|
-
getStateNode(stateKey: string): StateNode<TContext, any, TEvent, TTypestate, TResolvedTypesMeta>;
|
|
212
|
+
getStateNode(stateKey: string): StateNode<TContext, any, TEvent, TTypestate, TServiceMap, TResolvedTypesMeta>;
|
|
212
213
|
/**
|
|
213
214
|
* Returns the state node with the given `stateId`, or throws.
|
|
214
215
|
*
|
|
215
216
|
* @param stateId The state ID. The prefix "#" is removed.
|
|
216
217
|
*/
|
|
217
|
-
getStateNodeById(stateId: string): StateNode<TContext, any, TEvent, any, TResolvedTypesMeta>;
|
|
218
|
+
getStateNodeById(stateId: string): StateNode<TContext, any, TEvent, any, TServiceMap, TResolvedTypesMeta>;
|
|
218
219
|
/**
|
|
219
220
|
* Returns the relative state node from the given `statePath`, or throws.
|
|
220
221
|
*
|
|
221
222
|
* @param statePath The string or string array relative path to the state node.
|
|
222
223
|
*/
|
|
223
|
-
getStateNodeByPath(statePath: string | string[]): StateNode<TContext, any, TEvent, any, any>;
|
|
224
|
+
getStateNodeByPath(statePath: string | string[]): StateNode<TContext, any, TEvent, any, any, any>;
|
|
224
225
|
/**
|
|
225
226
|
* Resolves a partial state value with its full representation in this machine.
|
|
226
227
|
*
|
|
@@ -248,14 +249,14 @@ declare class StateNode<TContext = any, TStateSchema extends StateSchema = any,
|
|
|
248
249
|
* @param resolve Whether state nodes should resolve to initial child state nodes
|
|
249
250
|
*/
|
|
250
251
|
getRelativeStateNodes(relativeStateId: StateNode<TContext, any, TEvent>, historyValue?: HistoryValue, resolve?: boolean): Array<StateNode<TContext, any, TEvent>>;
|
|
251
|
-
get initialStateNodes(): Array<StateNode<TContext, any, TEvent, any, any>>;
|
|
252
|
+
get initialStateNodes(): Array<StateNode<TContext, any, TEvent, any, any, any>>;
|
|
252
253
|
/**
|
|
253
254
|
* Retrieves state nodes from a relative path to this state node.
|
|
254
255
|
*
|
|
255
256
|
* @param relativePath The relative path from this state node
|
|
256
257
|
* @param historyValue
|
|
257
258
|
*/
|
|
258
|
-
getFromRelativePath(relativePath: string[]): Array<StateNode<TContext, any, TEvent, any, any>>;
|
|
259
|
+
getFromRelativePath(relativePath: string[]): Array<StateNode<TContext, any, TEvent, any, any, any>>;
|
|
259
260
|
private historyValue;
|
|
260
261
|
/**
|
|
261
262
|
* Resolves to the historical value(s) of the parent state node,
|