xstate 4.10.0 → 4.14.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 +205 -0
- package/LICENSE +22 -0
- package/README.md +2 -2
- package/dist/xstate.interpreter.js +1 -1
- package/dist/xstate.js +1 -1
- package/dist/xstate.web.js +2 -2
- package/es/Actor.d.ts +5 -3
- package/es/Actor.js +26 -4
- package/es/State.d.ts +5 -2
- package/es/StateNode.d.ts +8 -8
- package/es/StateNode.js +61 -41
- package/es/actions.d.ts +9 -5
- package/es/actions.js +28 -13
- package/es/index.d.ts +2 -2
- package/es/index.js +1 -1
- package/es/interpreter.d.ts +29 -15
- package/es/interpreter.js +99 -112
- package/es/invokeUtils.d.ts +7 -0
- package/es/invokeUtils.js +39 -0
- package/es/match.d.ts +4 -1
- package/es/serviceScope.d.ts +10 -0
- package/es/serviceScope.js +18 -0
- package/es/stateUtils.d.ts +1 -1
- package/es/types.d.ts +79 -32
- package/es/utils.d.ts +4 -3
- package/es/utils.js +12 -3
- package/lib/Actor.d.ts +5 -3
- package/lib/Actor.js +24 -3
- package/lib/Machine.js +1 -0
- package/lib/SimulatedClock.js +1 -0
- package/lib/State.d.ts +5 -2
- package/lib/State.js +1 -0
- package/lib/StateNode.d.ts +8 -8
- package/lib/StateNode.js +69 -42
- package/lib/actionTypes.js +1 -0
- package/lib/actions.d.ts +9 -5
- package/lib/actions.js +27 -19
- 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.d.ts +2 -2
- package/lib/index.js +29 -20
- package/lib/interpreter.d.ts +28 -14
- package/lib/interpreter.js +82 -88
- package/lib/invokeUtils.d.ts +7 -0
- package/lib/invokeUtils.js +42 -0
- package/lib/json.js +1 -0
- package/lib/mapState.js +1 -0
- package/lib/match.d.ts +4 -1
- 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 -1
- package/lib/stateUtils.js +1 -0
- package/lib/types.d.ts +79 -32
- package/lib/types.js +1 -0
- package/lib/utils.d.ts +4 -3
- package/lib/utils.js +9 -2
- package/package.json +6 -6
package/es/types.d.ts
CHANGED
|
@@ -49,12 +49,12 @@ export interface AssignMeta<TContext, TEvent extends EventObject> {
|
|
|
49
49
|
action: AssignAction<TContext, TEvent>;
|
|
50
50
|
_event: SCXML.Event<TEvent>;
|
|
51
51
|
}
|
|
52
|
-
export declare type ActionFunction<TContext, TEvent extends EventObject> = (context: TContext, event: TEvent, meta: ActionMeta<TContext, TEvent>) =>
|
|
52
|
+
export declare type ActionFunction<TContext, TEvent extends EventObject> = (context: TContext, event: TEvent, meta: ActionMeta<TContext, TEvent>) => void;
|
|
53
53
|
export interface ChooseConditon<TContext, TEvent extends EventObject> {
|
|
54
54
|
cond?: Condition<TContext, TEvent>;
|
|
55
55
|
actions: Actions<TContext, TEvent>;
|
|
56
56
|
}
|
|
57
|
-
export declare type Action<TContext, TEvent extends EventObject> = ActionType | ActionObject<TContext, TEvent> | ActionFunction<TContext, TEvent
|
|
57
|
+
export declare type Action<TContext, TEvent extends EventObject> = ActionType | ActionObject<TContext, TEvent> | ActionFunction<TContext, TEvent>;
|
|
58
58
|
export declare type Actions<TContext, TEvent extends EventObject> = SingleOrArray<Action<TContext, TEvent>>;
|
|
59
59
|
export declare type StateKey = string | State<any>;
|
|
60
60
|
export interface StateValueMap {
|
|
@@ -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;
|
|
@@ -113,8 +116,30 @@ export interface ActivityDefinition<TContext, TEvent extends EventObject> extend
|
|
|
113
116
|
type: string;
|
|
114
117
|
}
|
|
115
118
|
export declare type Sender<TEvent extends EventObject> = (event: Event<TEvent>) => void;
|
|
119
|
+
declare type ExcludeType<A> = {
|
|
120
|
+
[K in Exclude<keyof A, 'type'>]: A[K];
|
|
121
|
+
};
|
|
122
|
+
declare type ExtractExtraParameters<A, T> = A extends {
|
|
123
|
+
type: T;
|
|
124
|
+
} ? ExcludeType<A> : never;
|
|
125
|
+
declare type ExtractSimple<A> = A extends any ? {} extends ExcludeType<A> ? A : never : never;
|
|
126
|
+
declare type NeverIfEmpty<T> = {} extends T ? never : T;
|
|
127
|
+
export interface PayloadSender<TEvent extends EventObject> {
|
|
128
|
+
/**
|
|
129
|
+
* Send an event object or just the event type, if the event has no other payload
|
|
130
|
+
*/
|
|
131
|
+
(event: TEvent | ExtractSimple<TEvent>['type']): void;
|
|
132
|
+
/**
|
|
133
|
+
* Send an event type and its payload
|
|
134
|
+
*/
|
|
135
|
+
<K extends TEvent['type']>(eventType: K, payload: NeverIfEmpty<ExtractExtraParameters<TEvent, K>>): void;
|
|
136
|
+
}
|
|
116
137
|
export declare type Receiver<TEvent extends EventObject> = (listener: (event: TEvent) => void) => void;
|
|
117
138
|
export declare type InvokeCallback = (callback: Sender<any>, onReceive: Receiver<EventObject>) => any;
|
|
139
|
+
export interface InvokeMeta {
|
|
140
|
+
data: any;
|
|
141
|
+
src: InvokeSourceDefinition;
|
|
142
|
+
}
|
|
118
143
|
/**
|
|
119
144
|
* Returns either a Promises or a callback handler (for streams of events) given the
|
|
120
145
|
* machine's current `context` and `event` that invoked the service.
|
|
@@ -128,12 +153,12 @@ export declare type InvokeCallback = (callback: Sender<any>, onReceive: Receiver
|
|
|
128
153
|
* @param context The current machine `context`
|
|
129
154
|
* @param event The event that invoked the service
|
|
130
155
|
*/
|
|
131
|
-
export declare type InvokeCreator<TContext, TEvent = AnyEventObject, TFinalContext = any> = (context: TContext, event: TEvent) => PromiseLike<TFinalContext> | StateMachine<TFinalContext, any, any> | Subscribable<any> | InvokeCallback;
|
|
156
|
+
export declare type InvokeCreator<TContext, TEvent = AnyEventObject, TFinalContext = any> = (context: TContext, event: TEvent, meta: InvokeMeta) => PromiseLike<TFinalContext> | StateMachine<TFinalContext, any, any> | Subscribable<any> | InvokeCallback;
|
|
132
157
|
export interface InvokeDefinition<TContext, TEvent extends EventObject> extends ActivityDefinition<TContext, TEvent> {
|
|
133
158
|
/**
|
|
134
159
|
* The source of the machine to be invoked, or the machine itself.
|
|
135
160
|
*/
|
|
136
|
-
src: string;
|
|
161
|
+
src: string | InvokeSourceDefinition;
|
|
137
162
|
/**
|
|
138
163
|
* If `true`, events sent to the parent service will be forwarded to the invoked service.
|
|
139
164
|
*
|
|
@@ -152,7 +177,7 @@ export interface InvokeDefinition<TContext, TEvent extends EventObject> extends
|
|
|
152
177
|
*
|
|
153
178
|
* Data should be mapped to match the child machine's context shape.
|
|
154
179
|
*/
|
|
155
|
-
data?: Mapper<TContext, TEvent> | PropertyMapper<TContext, TEvent>;
|
|
180
|
+
data?: Mapper<TContext, TEvent, any> | PropertyMapper<TContext, TEvent, any>;
|
|
156
181
|
}
|
|
157
182
|
export interface Delay {
|
|
158
183
|
id: string;
|
|
@@ -186,18 +211,18 @@ declare type TransitionsConfigMap<TContext, TEvent extends EventObject> = {
|
|
|
186
211
|
} & {
|
|
187
212
|
'*'?: TransitionConfigOrTarget<TContext, TEvent>;
|
|
188
213
|
};
|
|
189
|
-
declare type TransitionsConfigArray<TContext, TEvent extends EventObject> = Array<{
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
} ? TEvent : never> & {
|
|
193
|
-
event: K;
|
|
194
|
-
};
|
|
195
|
-
}[TEvent['type']] | (TransitionConfig<TContext, TEvent> & {
|
|
214
|
+
declare type TransitionsConfigArray<TContext, TEvent extends EventObject> = Array<(TEvent extends EventObject ? TransitionConfig<TContext, TEvent> & {
|
|
215
|
+
event: TEvent['type'];
|
|
216
|
+
} : never) | (TransitionConfig<TContext, TEvent> & {
|
|
196
217
|
event: '';
|
|
197
218
|
}) | (TransitionConfig<TContext, TEvent> & {
|
|
198
219
|
event: '*';
|
|
199
220
|
})>;
|
|
200
221
|
export declare type TransitionsConfig<TContext, TEvent extends EventObject> = TransitionsConfigMap<TContext, TEvent> | TransitionsConfigArray<TContext, TEvent>;
|
|
222
|
+
export interface InvokeSourceDefinition {
|
|
223
|
+
[key: string]: any;
|
|
224
|
+
type: string;
|
|
225
|
+
}
|
|
201
226
|
export declare type InvokeConfig<TContext, TEvent extends EventObject> = {
|
|
202
227
|
/**
|
|
203
228
|
* The unique identifier for the invoked machine. If not specified, this
|
|
@@ -207,7 +232,7 @@ export declare type InvokeConfig<TContext, TEvent extends EventObject> = {
|
|
|
207
232
|
/**
|
|
208
233
|
* The source of the machine to be invoked, or the machine itself.
|
|
209
234
|
*/
|
|
210
|
-
src: string | StateMachine<any, any, any> | InvokeCreator<TContext, TEvent, any>;
|
|
235
|
+
src: string | InvokeSourceDefinition | StateMachine<any, any, any> | InvokeCreator<TContext, TEvent, any>;
|
|
211
236
|
/**
|
|
212
237
|
* If `true`, events sent to the parent service will be forwarded to the invoked service.
|
|
213
238
|
*
|
|
@@ -226,7 +251,7 @@ export declare type InvokeConfig<TContext, TEvent extends EventObject> = {
|
|
|
226
251
|
*
|
|
227
252
|
* Data should be mapped to match the child machine's context shape.
|
|
228
253
|
*/
|
|
229
|
-
data?: Mapper<TContext, TEvent> | PropertyMapper<TContext, TEvent>;
|
|
254
|
+
data?: Mapper<TContext, TEvent, any> | PropertyMapper<TContext, TEvent, any>;
|
|
230
255
|
/**
|
|
231
256
|
* The transition to take upon the invoked child machine reaching its final top-level state.
|
|
232
257
|
*/
|
|
@@ -235,7 +260,7 @@ export declare type InvokeConfig<TContext, TEvent extends EventObject> = {
|
|
|
235
260
|
* The transition to take upon the invoked child machine sending an error event.
|
|
236
261
|
*/
|
|
237
262
|
onError?: string | SingleOrArray<TransitionConfig<TContext, DoneInvokeEvent<any>>>;
|
|
238
|
-
}
|
|
263
|
+
};
|
|
239
264
|
export interface StateNodeConfig<TContext, TStateSchema extends StateSchema, TEvent extends EventObject> {
|
|
240
265
|
/**
|
|
241
266
|
* The relative key of the state node, which represents its location in the overall state value.
|
|
@@ -279,7 +304,7 @@ export interface StateNodeConfig<TContext, TStateSchema extends StateSchema, TEv
|
|
|
279
304
|
/**
|
|
280
305
|
* The services to invoke upon entering this state node. These services will be stopped upon exiting this state node.
|
|
281
306
|
*/
|
|
282
|
-
invoke?: SingleOrArray<InvokeConfig<TContext, TEvent>>;
|
|
307
|
+
invoke?: SingleOrArray<InvokeConfig<TContext, TEvent> | StateMachine<any, any, any>>;
|
|
283
308
|
/**
|
|
284
309
|
* The mapping of event types to their potential transition(s).
|
|
285
310
|
*/
|
|
@@ -315,6 +340,11 @@ export interface StateNodeConfig<TContext, TStateSchema extends StateSchema, TEv
|
|
|
315
340
|
* The delayed transitions are taken after the specified delay in an interpreter.
|
|
316
341
|
*/
|
|
317
342
|
after?: DelayedTransitions<TContext, TEvent>;
|
|
343
|
+
/**
|
|
344
|
+
* An eventless transition that is always taken when this state node is active.
|
|
345
|
+
* Equivalent to a transition specified as an empty `''`' string in the `on` property.
|
|
346
|
+
*/
|
|
347
|
+
always?: TransitionConfigOrTarget<TContext, TEvent>;
|
|
318
348
|
/**
|
|
319
349
|
* The activities to be started upon entering the state node,
|
|
320
350
|
* and stopped upon exiting the state node.
|
|
@@ -337,7 +367,7 @@ export interface StateNodeConfig<TContext, TStateSchema extends StateSchema, TEv
|
|
|
337
367
|
* The data will be evaluated with the current `context` and placed on the `.data` property
|
|
338
368
|
* of the event.
|
|
339
369
|
*/
|
|
340
|
-
data?: Mapper<TContext, TEvent> | PropertyMapper<TContext, TEvent>;
|
|
370
|
+
data?: Mapper<TContext, TEvent, any> | PropertyMapper<TContext, TEvent, any>;
|
|
341
371
|
/**
|
|
342
372
|
* The unique ID of the state node, which can be referenced as a transition target via the
|
|
343
373
|
* `#id` syntax.
|
|
@@ -388,18 +418,18 @@ export interface FinalStateNodeConfig<TContext, TEvent extends EventObject> exte
|
|
|
388
418
|
* The data to be sent with the "done.state.<id>" event. The data can be
|
|
389
419
|
* static or dynamic (based on assigners).
|
|
390
420
|
*/
|
|
391
|
-
data?:
|
|
421
|
+
data?: Mapper<TContext, TEvent, any> | PropertyMapper<TContext, TEvent, any>;
|
|
392
422
|
}
|
|
393
423
|
export declare type SimpleOrStateNodeConfig<TContext, TStateSchema extends StateSchema, TEvent extends EventObject> = AtomicStateNodeConfig<TContext, TEvent> | StateNodeConfig<TContext, TStateSchema, TEvent>;
|
|
394
424
|
export declare type ActionFunctionMap<TContext, TEvent extends EventObject> = Record<string, ActionObject<TContext, TEvent> | ActionFunction<TContext, TEvent>>;
|
|
395
425
|
export declare type DelayFunctionMap<TContext, TEvent extends EventObject> = Record<string, DelayConfig<TContext, TEvent>>;
|
|
396
|
-
export declare type ServiceConfig<TContext> = string | StateMachine<any, any, any> | InvokeCreator<TContext>;
|
|
426
|
+
export declare type ServiceConfig<TContext, TEvent extends EventObject = AnyEventObject> = string | StateMachine<any, any, any> | InvokeCreator<TContext, TEvent>;
|
|
397
427
|
export declare type DelayConfig<TContext, TEvent extends EventObject> = number | DelayExpr<TContext, TEvent>;
|
|
398
428
|
export interface MachineOptions<TContext, TEvent extends EventObject> {
|
|
399
429
|
guards: Record<string, ConditionPredicate<TContext, TEvent>>;
|
|
400
430
|
actions: ActionFunctionMap<TContext, TEvent>;
|
|
401
431
|
activities: Record<string, ActivityConfig<TContext, TEvent>>;
|
|
402
|
-
services: Record<string, ServiceConfig<TContext>>;
|
|
432
|
+
services: Record<string, ServiceConfig<TContext, TEvent>>;
|
|
403
433
|
delays: DelayFunctionMap<TContext, TEvent>;
|
|
404
434
|
/**
|
|
405
435
|
* @private
|
|
@@ -434,7 +464,10 @@ export interface HistoryStateNode<TContext> extends StateNode<TContext> {
|
|
|
434
464
|
history: 'shallow' | 'deep';
|
|
435
465
|
target: StateValue | undefined;
|
|
436
466
|
}
|
|
437
|
-
export interface StateMachine<TContext, TStateSchema extends StateSchema, TEvent extends EventObject, TTypestate extends Typestate<TContext> =
|
|
467
|
+
export interface StateMachine<TContext, TStateSchema extends StateSchema, TEvent extends EventObject, TTypestate extends Typestate<TContext> = {
|
|
468
|
+
value: any;
|
|
469
|
+
context: TContext;
|
|
470
|
+
}> extends StateNode<TContext, TStateSchema, TEvent, TTypestate> {
|
|
438
471
|
id: string;
|
|
439
472
|
states: StateNode<TContext, TStateSchema, TEvent>['states'];
|
|
440
473
|
}
|
|
@@ -526,7 +559,7 @@ export interface NullEvent {
|
|
|
526
559
|
}
|
|
527
560
|
export interface ActivityActionObject<TContext, TEvent extends EventObject> extends ActionObject<TContext, TEvent> {
|
|
528
561
|
type: ActionTypes.Start | ActionTypes.Stop;
|
|
529
|
-
activity: ActivityDefinition<TContext, TEvent
|
|
562
|
+
activity: ActivityDefinition<TContext, TEvent> | undefined;
|
|
530
563
|
exec: ActionFunction<TContext, TEvent> | undefined;
|
|
531
564
|
}
|
|
532
565
|
export interface InvokeActionObject<TContext, TEvent extends EventObject> extends ActivityActionObject<TContext, TEvent> {
|
|
@@ -554,6 +587,20 @@ export interface SendActionObject<TContext, TEvent extends EventObject, TSentEve
|
|
|
554
587
|
delay?: number;
|
|
555
588
|
id: string | number;
|
|
556
589
|
}
|
|
590
|
+
export interface StopAction<TContext, TEvent extends EventObject> extends ActionObject<TContext, TEvent> {
|
|
591
|
+
type: ActionTypes.Stop;
|
|
592
|
+
activity: string | {
|
|
593
|
+
id: string;
|
|
594
|
+
} | Expr<TContext, TEvent, string | {
|
|
595
|
+
id: string;
|
|
596
|
+
}>;
|
|
597
|
+
}
|
|
598
|
+
export interface StopActionObject {
|
|
599
|
+
type: ActionTypes.Stop;
|
|
600
|
+
activity: {
|
|
601
|
+
id: string;
|
|
602
|
+
};
|
|
603
|
+
}
|
|
557
604
|
export declare type Expr<TContext, TEvent extends EventObject, T> = (context: TContext, event: TEvent) => T;
|
|
558
605
|
export declare type ExprWithMeta<TContext, TEvent extends EventObject, T> = (context: TContext, event: TEvent, meta: SCXMLEventMeta<TEvent>) => T;
|
|
559
606
|
export declare type SendExpr<TContext, TEvent extends EventObject, TSentEvent extends EventObject = AnyEventObject> = ExprWithMeta<TContext, TEvent, TSentEvent>;
|
|
@@ -573,10 +620,10 @@ export declare type Assigner<TContext, TEvent extends EventObject> = (context: T
|
|
|
573
620
|
export declare type PropertyAssigner<TContext, TEvent extends EventObject> = {
|
|
574
621
|
[K in keyof TContext]?: ((context: TContext, event: TEvent, meta: AssignMeta<TContext, TEvent>) => TContext[K]) | TContext[K];
|
|
575
622
|
};
|
|
576
|
-
export declare type Mapper<TContext, TEvent extends EventObject> = (context: TContext, event: TEvent) =>
|
|
577
|
-
export declare type PropertyMapper<TContext, TEvent extends EventObject> =
|
|
578
|
-
[
|
|
579
|
-
}
|
|
623
|
+
export declare type Mapper<TContext, TEvent extends EventObject, TParams extends {}> = (context: TContext, event: TEvent) => TParams;
|
|
624
|
+
export declare type PropertyMapper<TContext, TEvent extends EventObject, TParams extends {}> = {
|
|
625
|
+
[K in keyof TParams]?: ((context: TContext, event: TEvent) => TParams[K]) | TParams[K];
|
|
626
|
+
};
|
|
580
627
|
export interface AnyAssignAction<TContext, TEvent extends EventObject> extends ActionObject<TContext, TEvent> {
|
|
581
628
|
type: ActionTypes.Assign;
|
|
582
629
|
assignment: any;
|
|
@@ -795,7 +842,7 @@ export declare namespace SCXML {
|
|
|
795
842
|
}
|
|
796
843
|
}
|
|
797
844
|
export interface Unsubscribable {
|
|
798
|
-
unsubscribe():
|
|
845
|
+
unsubscribe(): void;
|
|
799
846
|
}
|
|
800
847
|
export interface Subscribable<T> {
|
|
801
848
|
subscribe(next?: (value: T) => void, error?: (error: any) => void, complete?: () => void): Unsubscribable;
|
package/es/utils.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
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';
|
|
1
|
+
import { Event, StateValue, ActionType, Action, EventObject, PropertyMapper, Mapper, EventType, HistoryValue, AssignAction, Condition, Subscribable, StateMachine, ConditionPredicate, SCXML, StateLike, EventData, TransitionConfig, TransitionConfigTarget, NullEvent, SingleOrArray, Guard, InvokeSourceDefinition } from './types';
|
|
2
2
|
import { StateNode } from './StateNode';
|
|
3
3
|
import { State } from '.';
|
|
4
4
|
import { Actor } from './Actor';
|
|
@@ -39,7 +39,7 @@ export declare function pathsToStateValue(paths: string[][]): StateValue;
|
|
|
39
39
|
export declare function flatten<T>(array: Array<T | T[]>): T[];
|
|
40
40
|
export declare function toArrayStrict<T>(value: T[] | T): T[];
|
|
41
41
|
export declare function toArray<T>(value: T[] | T | undefined): T[];
|
|
42
|
-
export declare function mapContext<TContext, TEvent extends EventObject>(mapper: Mapper<TContext, TEvent> | PropertyMapper<TContext, TEvent>, context: TContext, _event: SCXML.Event<TEvent>): any;
|
|
42
|
+
export declare function mapContext<TContext, TEvent extends EventObject>(mapper: Mapper<TContext, TEvent, any> | PropertyMapper<TContext, TEvent, any>, context: TContext, _event: SCXML.Event<TEvent>): any;
|
|
43
43
|
export declare function isBuiltInEvent(eventType: EventType): boolean;
|
|
44
44
|
export declare function isPromiseLike(value: any): value is PromiseLike<any>;
|
|
45
45
|
export declare function partition<T, A extends T, B extends T>(items: T[], predicate: (item: T) => item is A): [A[], B[]];
|
|
@@ -52,7 +52,7 @@ export declare function isArray(value: any): value is any[];
|
|
|
52
52
|
export declare function isFunction(value: any): value is Function;
|
|
53
53
|
export declare function isString(value: any): value is string;
|
|
54
54
|
export declare function toGuard<TContext, TEvent extends EventObject>(condition?: Condition<TContext, TEvent>, guardMap?: Record<string, ConditionPredicate<TContext, TEvent>>): Guard<TContext, TEvent> | undefined;
|
|
55
|
-
export declare function isObservable<T>(value:
|
|
55
|
+
export declare function isObservable<T>(value: any): value is Subscribable<T>;
|
|
56
56
|
export declare const symbolObservable: string | symbol;
|
|
57
57
|
export declare function isMachine(value: any): value is StateMachine<any, any, any>;
|
|
58
58
|
export declare function isActor(value: any): value is Actor;
|
|
@@ -65,4 +65,5 @@ export declare function toTransitionConfigArray<TContext, TEvent extends EventOb
|
|
|
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
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;
|
|
68
|
+
export declare function toInvokeSource(src: string | InvokeSourceDefinition): InvokeSourceDefinition;
|
|
68
69
|
//# sourceMappingURL=utils.d.ts.map
|
package/es/utils.js
CHANGED
|
@@ -259,7 +259,7 @@ function mapContext(mapper, context, _event) {
|
|
|
259
259
|
var result = {};
|
|
260
260
|
|
|
261
261
|
try {
|
|
262
|
-
for (var _b = __values(keys(mapper)), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
262
|
+
for (var _b = __values(Object.keys(mapper)), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
263
263
|
var key = _c.value;
|
|
264
264
|
var subMapper = mapper[key];
|
|
265
265
|
|
|
@@ -530,7 +530,6 @@ function toSCXMLEvent(event, scxmlEvent) {
|
|
|
530
530
|
function toTransitionConfigArray(event, configLike) {
|
|
531
531
|
var transitions = toArrayStrict(configLike).map(function (transitionLike) {
|
|
532
532
|
if (typeof transitionLike === 'undefined' || typeof transitionLike === 'string' || isMachine(transitionLike)) {
|
|
533
|
-
// @ts-ignore until Type instantiation is excessively deep and possibly infinite bug is fixed
|
|
534
533
|
return {
|
|
535
534
|
target: transitionLike,
|
|
536
535
|
event: event
|
|
@@ -588,4 +587,14 @@ function evaluateGuard(machine, guard, context, _event, state) {
|
|
|
588
587
|
return condFn(context, _event.data, guardMeta);
|
|
589
588
|
}
|
|
590
589
|
|
|
591
|
-
|
|
590
|
+
function toInvokeSource(src) {
|
|
591
|
+
if (typeof src === 'string') {
|
|
592
|
+
return {
|
|
593
|
+
type: src
|
|
594
|
+
};
|
|
595
|
+
}
|
|
596
|
+
|
|
597
|
+
return src;
|
|
598
|
+
}
|
|
599
|
+
|
|
600
|
+
export { evaluateGuard, flatten, getEventType, isArray, isBuiltInEvent, isFunction, isMachine, isObservable, isPromiseLike, isStateLike, isString, keys, mapContext, mapFilterValues, mapValues, matchesState, nestedPath, normalizeTarget, partition, path, pathToStateValue, reportUnhandledExceptionOnInvocation, symbolObservable, toArray, toArrayStrict, toEventObject, toGuard, toInvokeSource, toSCXMLEvent, toStatePath, toStatePaths, toStateValue, toTransitionConfigArray, uniqueId, updateContext, updateHistoryStates, updateHistoryValue, warn };
|
package/lib/Actor.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { EventObject, Subscribable, InvokeDefinition, AnyEventObject } from './types';
|
|
1
|
+
import { EventObject, Subscribable, InvokeDefinition, AnyEventObject, StateMachine, Spawnable, SCXML } from './types';
|
|
2
2
|
export interface Actor<TContext = any, TEvent extends EventObject = AnyEventObject> extends Subscribable<TContext> {
|
|
3
3
|
id: string;
|
|
4
4
|
send: (event: TEvent) => any;
|
|
@@ -8,14 +8,16 @@ export interface Actor<TContext = any, TEvent extends EventObject = AnyEventObje
|
|
|
8
8
|
};
|
|
9
9
|
meta?: InvokeDefinition<TContext, TEvent>;
|
|
10
10
|
state?: any;
|
|
11
|
+
deferred?: boolean;
|
|
11
12
|
}
|
|
12
13
|
export declare function createNullActor(id: string): Actor;
|
|
13
14
|
/**
|
|
14
|
-
* Creates a
|
|
15
|
+
* Creates a deferred actor that is able to be invoked given the provided
|
|
15
16
|
* invocation information in its `.meta` value.
|
|
16
17
|
*
|
|
17
18
|
* @param invokeDefinition The meta information needed to invoke the actor.
|
|
18
19
|
*/
|
|
19
|
-
export declare function createInvocableActor<TC, TE extends EventObject>(invokeDefinition: InvokeDefinition<TC, TE>): Actor;
|
|
20
|
+
export declare function createInvocableActor<TC, TE extends EventObject>(invokeDefinition: InvokeDefinition<TC, TE>, machine: StateMachine<TC, any, TE>, context: TC, _event: SCXML.Event<TE>): Actor;
|
|
21
|
+
export declare function createDeferredActor(entity: Spawnable, id: string, data?: any): Actor;
|
|
20
22
|
export declare function isActor(item: any): item is Actor;
|
|
21
23
|
//# sourceMappingURL=Actor.d.ts.map
|
package/lib/Actor.js
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isActor = exports.createDeferredActor = exports.createInvocableActor = exports.createNullActor = void 0;
|
|
4
|
+
var utils_1 = require("./utils");
|
|
5
|
+
var serviceScope = require("./serviceScope");
|
|
3
6
|
function createNullActor(id) {
|
|
4
7
|
return {
|
|
5
8
|
id: id,
|
|
@@ -14,17 +17,35 @@ function createNullActor(id) {
|
|
|
14
17
|
}
|
|
15
18
|
exports.createNullActor = createNullActor;
|
|
16
19
|
/**
|
|
17
|
-
* Creates a
|
|
20
|
+
* Creates a deferred actor that is able to be invoked given the provided
|
|
18
21
|
* invocation information in its `.meta` value.
|
|
19
22
|
*
|
|
20
23
|
* @param invokeDefinition The meta information needed to invoke the actor.
|
|
21
24
|
*/
|
|
22
|
-
function createInvocableActor(invokeDefinition) {
|
|
23
|
-
var
|
|
25
|
+
function createInvocableActor(invokeDefinition, machine, context, _event) {
|
|
26
|
+
var _a;
|
|
27
|
+
var invokeSrc = utils_1.toInvokeSource(invokeDefinition.src);
|
|
28
|
+
var serviceCreator = (_a = machine === null || machine === void 0 ? void 0 : machine.options.services) === null || _a === void 0 ? void 0 : _a[invokeSrc.type];
|
|
29
|
+
var resolvedData = invokeDefinition.data
|
|
30
|
+
? utils_1.mapContext(invokeDefinition.data, context, _event)
|
|
31
|
+
: undefined;
|
|
32
|
+
var tempActor = serviceCreator
|
|
33
|
+
? createDeferredActor(serviceCreator, invokeDefinition.id, resolvedData)
|
|
34
|
+
: createNullActor(invokeDefinition.id);
|
|
24
35
|
tempActor.meta = invokeDefinition;
|
|
25
36
|
return tempActor;
|
|
26
37
|
}
|
|
27
38
|
exports.createInvocableActor = createInvocableActor;
|
|
39
|
+
function createDeferredActor(entity, id, data) {
|
|
40
|
+
var tempActor = createNullActor(id);
|
|
41
|
+
tempActor.deferred = true;
|
|
42
|
+
if (utils_1.isMachine(entity)) {
|
|
43
|
+
// "mute" the existing service scope so potential spawned actors within the `.initialState` stay deferred here
|
|
44
|
+
tempActor.state = serviceScope.provide(undefined, function () { return (data ? entity.withContext(data) : entity).initialState; });
|
|
45
|
+
}
|
|
46
|
+
return tempActor;
|
|
47
|
+
}
|
|
48
|
+
exports.createDeferredActor = createDeferredActor;
|
|
28
49
|
function isActor(item) {
|
|
29
50
|
try {
|
|
30
51
|
return typeof item.send === 'function';
|
package/lib/Machine.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createMachine = exports.Machine = void 0;
|
|
3
4
|
var StateNode_1 = require("./StateNode");
|
|
4
5
|
function Machine(config, options, initialContext) {
|
|
5
6
|
if (initialContext === void 0) { initialContext = config.context; }
|
package/lib/SimulatedClock.js
CHANGED
|
@@ -20,6 +20,7 @@ var __spread = (this && this.__spread) || function () {
|
|
|
20
20
|
return ar;
|
|
21
21
|
};
|
|
22
22
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
+
exports.SimulatedClock = void 0;
|
|
23
24
|
var SimulatedClock = /** @class */ (function () {
|
|
24
25
|
function SimulatedClock() {
|
|
25
26
|
this.timeouts = new Map();
|
package/lib/State.d.ts
CHANGED
|
@@ -2,7 +2,10 @@ import { StateValue, ActivityMap, EventObject, HistoryValue, ActionObject, Event
|
|
|
2
2
|
import { StateNode } from './StateNode';
|
|
3
3
|
import { Actor } from './Actor';
|
|
4
4
|
export declare function stateValuesEqual(a: StateValue | undefined, b: StateValue | undefined): boolean;
|
|
5
|
-
export declare function isState<TContext, TEvent extends EventObject, TStateSchema extends StateSchema<TContext> = any, TTypestate extends Typestate<TContext> =
|
|
5
|
+
export declare function isState<TContext, TEvent extends EventObject, TStateSchema extends StateSchema<TContext> = any, TTypestate extends Typestate<TContext> = {
|
|
6
|
+
value: any;
|
|
7
|
+
context: TContext;
|
|
8
|
+
}>(state: object | string): state is State<TContext, TEvent, TStateSchema, TTypestate>;
|
|
6
9
|
export declare function bindActionToState<TC, TE extends EventObject>(action: ActionObject<TC, TE>, state: State<TC, TE>): ActionObject<TC, TE>;
|
|
7
10
|
export declare class State<TContext, TEvent extends EventObject = EventObject, TStateSchema extends StateSchema<TContext> = any, TTypestate extends Typestate<TContext> = {
|
|
8
11
|
value: any;
|
|
@@ -11,7 +14,7 @@ export declare class State<TContext, TEvent extends EventObject = EventObject, T
|
|
|
11
14
|
value: StateValue;
|
|
12
15
|
context: TContext;
|
|
13
16
|
historyValue?: HistoryValue | undefined;
|
|
14
|
-
history?: State<TContext, TEvent, TStateSchema>;
|
|
17
|
+
history?: State<TContext, TEvent, TStateSchema, TTypestate>;
|
|
15
18
|
actions: Array<ActionObject<TContext, TEvent>>;
|
|
16
19
|
activities: ActivityMap;
|
|
17
20
|
meta: any;
|
package/lib/State.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.State = exports.bindActionToState = exports.isState = exports.stateValuesEqual = void 0;
|
|
45
46
|
var constants_1 = require("./constants");
|
|
46
47
|
var utils_1 = require("./utils");
|
|
47
48
|
var stateUtils_1 = require("./stateUtils");
|
package/lib/StateNode.d.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { Event, StateValue, StateValueMap, MachineOptions, EventObject, HistoryValue, StateNodeDefinition, TransitionDefinition, DelayedTransitionDefinition, ActivityDefinition, StateNodeConfig, StateSchema, StateNodesConfig, InvokeDefinition, ActionObject, Mapper, PropertyMapper, SCXML, Typestate, TransitionDefinitionMap } from './types';
|
|
2
2
|
import { State } from './State';
|
|
3
|
-
declare class StateNode<TContext = any, TStateSchema extends StateSchema = any, TEvent extends EventObject = EventObject, TTypestate extends Typestate<TContext> =
|
|
3
|
+
declare class StateNode<TContext = any, TStateSchema extends StateSchema = any, TEvent extends EventObject = EventObject, TTypestate extends Typestate<TContext> = {
|
|
4
|
+
value: any;
|
|
5
|
+
context: TContext;
|
|
6
|
+
}> {
|
|
4
7
|
/**
|
|
5
8
|
* The raw config used to create the machine.
|
|
6
9
|
*/
|
|
@@ -92,7 +95,7 @@ declare class StateNode<TContext = any, TStateSchema extends StateSchema = any,
|
|
|
92
95
|
/**
|
|
93
96
|
* The data sent with the "done.state._id_" event if this is a final state node.
|
|
94
97
|
*/
|
|
95
|
-
|
|
98
|
+
doneData?: Mapper<TContext, TEvent, any> | PropertyMapper<TContext, TEvent, any>;
|
|
96
99
|
/**
|
|
97
100
|
* The string delimiter for serializing the path to a string. The default is "."
|
|
98
101
|
*/
|
|
@@ -156,7 +159,7 @@ declare class StateNode<TContext = any, TStateSchema extends StateSchema = any,
|
|
|
156
159
|
*
|
|
157
160
|
* @param state The state value or State instance
|
|
158
161
|
*/
|
|
159
|
-
getStateNodes(state: StateValue | State<TContext, TEvent>): Array<StateNode<TContext, any, TEvent>>;
|
|
162
|
+
getStateNodes(state: StateValue | State<TContext, TEvent, any, TTypestate>): Array<StateNode<TContext, any, TEvent>>;
|
|
160
163
|
/**
|
|
161
164
|
* Returns `true` if this state node explicitly handles the given event.
|
|
162
165
|
*
|
|
@@ -170,7 +173,7 @@ declare class StateNode<TContext = any, TStateSchema extends StateSchema = any,
|
|
|
170
173
|
*
|
|
171
174
|
* @param state The state to resolve
|
|
172
175
|
*/
|
|
173
|
-
resolveState(state: State<TContext, TEvent>): State<TContext, TEvent>;
|
|
176
|
+
resolveState(state: State<TContext, TEvent>): State<TContext, TEvent, TStateSchema, TTypestate>;
|
|
174
177
|
private transitionLeafNode;
|
|
175
178
|
private transitionCompoundNode;
|
|
176
179
|
private transitionParallelNode;
|
|
@@ -190,10 +193,7 @@ declare class StateNode<TContext = any, TStateSchema extends StateSchema = any,
|
|
|
190
193
|
* @param event The event that was sent at the current state
|
|
191
194
|
* @param context The current context (extended state) of the current state
|
|
192
195
|
*/
|
|
193
|
-
transition(state: string | StateValueMap | State<TContext, TEvent, any,
|
|
194
|
-
value: any;
|
|
195
|
-
context: TContext;
|
|
196
|
-
}> | undefined, event: Event<TEvent> | SCXML.Event<TEvent>, context?: TContext): State<TContext, TEvent, TStateSchema, TTypestate>;
|
|
196
|
+
transition(state: string | StateValueMap | State<TContext, TEvent, any, TTypestate> | undefined, event: Event<TEvent> | SCXML.Event<TEvent>, context?: TContext): State<TContext, TEvent, TStateSchema, TTypestate>;
|
|
197
197
|
private resolveRaisedTransition;
|
|
198
198
|
private resolveTransition;
|
|
199
199
|
/**
|