xstate 4.9.1 → 4.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/CHANGELOG.md +206 -0
  2. package/README.md +2 -2
  3. package/dist/xstate.interpreter.js +1 -1
  4. package/dist/xstate.js +1 -1
  5. package/dist/xstate.web.js +2 -2
  6. package/es/Actor.d.ts +5 -3
  7. package/es/Actor.js +26 -4
  8. package/es/Machine.d.ts +4 -1
  9. package/es/State.d.ts +13 -5
  10. package/es/StateNode.d.ts +8 -5
  11. package/es/StateNode.js +68 -47
  12. package/es/actions.d.ts +12 -10
  13. package/es/actions.js +7 -9
  14. package/es/interpreter.d.ts +29 -20
  15. package/es/interpreter.js +31 -61
  16. package/es/invokeUtils.d.ts +7 -0
  17. package/es/invokeUtils.js +39 -0
  18. package/es/serviceScope.d.ts +10 -0
  19. package/es/serviceScope.js +18 -0
  20. package/es/stateUtils.d.ts +1 -1
  21. package/es/types.d.ts +59 -37
  22. package/es/utils.d.ts +4 -3
  23. package/es/utils.js +12 -3
  24. package/lib/Actor.d.ts +5 -3
  25. package/lib/Actor.js +24 -3
  26. package/lib/Machine.d.ts +4 -1
  27. package/lib/Machine.js +1 -0
  28. package/lib/SimulatedClock.js +1 -0
  29. package/lib/State.d.ts +13 -5
  30. package/lib/State.js +1 -0
  31. package/lib/StateNode.d.ts +8 -5
  32. package/lib/StateNode.js +73 -47
  33. package/lib/actionTypes.js +1 -0
  34. package/lib/actions.d.ts +12 -10
  35. package/lib/actions.js +6 -17
  36. package/lib/constants.js +1 -0
  37. package/lib/devTools.js +1 -0
  38. package/lib/each.js +1 -0
  39. package/lib/environment.js +1 -0
  40. package/lib/index.js +28 -20
  41. package/lib/interpreter.d.ts +29 -20
  42. package/lib/interpreter.js +32 -51
  43. package/lib/invokeUtils.d.ts +7 -0
  44. package/lib/invokeUtils.js +42 -0
  45. package/lib/json.js +1 -0
  46. package/lib/mapState.js +1 -0
  47. package/lib/match.js +1 -0
  48. package/lib/patterns.js +1 -0
  49. package/lib/registry.js +1 -0
  50. package/lib/scheduler.js +1 -0
  51. package/lib/scxml.js +1 -0
  52. package/lib/serviceScope.d.ts +10 -0
  53. package/lib/serviceScope.js +15 -0
  54. package/lib/stateUtils.d.ts +1 -1
  55. package/lib/stateUtils.js +1 -0
  56. package/lib/types.d.ts +59 -37
  57. package/lib/types.js +1 -0
  58. package/lib/utils.d.ts +4 -3
  59. package/lib/utils.js +9 -2
  60. package/package.json +4 -4
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.consume = exports.provide = void 0;
4
+ /**
5
+ * Maintains a stack of the current service in scope.
6
+ * This is used to provide the correct service to spawn().
7
+ */
8
+ var serviceStack = [];
9
+ exports.provide = function (service, fn) {
10
+ serviceStack.push(service);
11
+ var result = fn(service);
12
+ serviceStack.pop();
13
+ return result;
14
+ };
15
+ exports.consume = function (fn) { return fn(serviceStack[serviceStack.length - 1]); };
@@ -1,7 +1,7 @@
1
1
  import { EventObject, StateNode, StateValue } from '.';
2
2
  declare type Configuration<TC, TE extends EventObject> = Iterable<StateNode<TC, any, TE>>;
3
3
  declare type AdjList<TC, TE extends EventObject> = Map<StateNode<TC, any, TE>, Array<StateNode<TC, any, TE>>>;
4
- export declare const isLeafNode: (stateNode: StateNode<any, any, any, any>) => boolean;
4
+ export declare const isLeafNode: (stateNode: StateNode<any, any, any>) => boolean;
5
5
  export declare function getChildren<TC, TE extends EventObject>(stateNode: StateNode<TC, any, TE>): Array<StateNode<TC, any, TE>>;
6
6
  export declare function getAllStateNodes<TC, TE extends EventObject>(stateNode: StateNode<TC, any, TE>): Array<StateNode<TC, any, TE>>;
7
7
  export declare function getConfiguration<TC, TE extends EventObject>(prevStateNodes: Iterable<StateNode<TC, any, TE>>, stateNodes: Iterable<StateNode<TC, any, TE>>): Iterable<StateNode<TC, any, TE>>;
package/lib/stateUtils.js CHANGED
@@ -31,6 +31,7 @@ var __spread = (this && this.__spread) || function () {
31
31
  return ar;
32
32
  };
33
33
  Object.defineProperty(exports, "__esModule", { value: true });
34
+ exports.isInFinalState = exports.nextEvents = exports.has = exports.getValue = exports.getAdjList = exports.getConfiguration = exports.getAllStateNodes = exports.getChildren = exports.isLeafNode = void 0;
34
35
  var utils_1 = require("./utils");
35
36
  exports.isLeafNode = function (stateNode) {
36
37
  return stateNode.type === 'atomic' || stateNode.type === 'final';
package/lib/types.d.ts CHANGED
@@ -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>) => any | void;
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> | AssignAction<Required<TContext>, TEvent> | SendAction<TContext, AnyEventObject> | RaiseAction<AnyEventObject> | ChooseAction<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
- export declare type ExtractStateValue<TS extends StateSchema<any>, TSS = TS['states']> = TSS extends undefined ? never : {
71
- [K in keyof TSS]?: (TSS[K] extends {
72
- states: any;
73
- } ? keyof TSS[K]['states'] : never) | ExtractStateValue<TSS[K]>;
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;
@@ -115,6 +118,10 @@ export interface ActivityDefinition<TContext, TEvent extends EventObject> extend
115
118
  export declare type Sender<TEvent extends EventObject> = (event: Event<TEvent>) => void;
116
119
  export declare type Receiver<TEvent extends EventObject> = (listener: (event: TEvent) => void) => void;
117
120
  export declare type InvokeCallback = (callback: Sender<any>, onReceive: Receiver<EventObject>) => any;
121
+ export interface InvokeMeta {
122
+ data: any;
123
+ src: InvokeSourceDefinition;
124
+ }
118
125
  /**
119
126
  * Returns either a Promises or a callback handler (for streams of events) given the
120
127
  * machine's current `context` and `event` that invoked the service.
@@ -128,12 +135,12 @@ export declare type InvokeCallback = (callback: Sender<any>, onReceive: Receiver
128
135
  * @param context The current machine `context`
129
136
  * @param event The event that invoked the service
130
137
  */
131
- export declare type InvokeCreator<TContext, TEvent = AnyEventObject, TFinalContext = any> = (context: TContext, event: TEvent) => PromiseLike<TFinalContext> | StateMachine<TFinalContext, any, any> | Subscribable<any> | InvokeCallback;
138
+ 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
139
  export interface InvokeDefinition<TContext, TEvent extends EventObject> extends ActivityDefinition<TContext, TEvent> {
133
140
  /**
134
141
  * The source of the machine to be invoked, or the machine itself.
135
142
  */
136
- src: string;
143
+ src: string | InvokeSourceDefinition;
137
144
  /**
138
145
  * If `true`, events sent to the parent service will be forwarded to the invoked service.
139
146
  *
@@ -152,7 +159,7 @@ export interface InvokeDefinition<TContext, TEvent extends EventObject> extends
152
159
  *
153
160
  * Data should be mapped to match the child machine's context shape.
154
161
  */
155
- data?: Mapper<TContext, TEvent> | PropertyMapper<TContext, TEvent>;
162
+ data?: Mapper<TContext, TEvent, any> | PropertyMapper<TContext, TEvent, any>;
156
163
  }
157
164
  export interface Delay {
158
165
  id: string;
@@ -186,18 +193,18 @@ declare type TransitionsConfigMap<TContext, TEvent extends EventObject> = {
186
193
  } & {
187
194
  '*'?: TransitionConfigOrTarget<TContext, TEvent>;
188
195
  };
189
- declare type TransitionsConfigArray<TContext, TEvent extends EventObject> = Array<{
190
- [K in TEvent['type']]: TransitionConfig<TContext, TEvent extends {
191
- type: K;
192
- } ? TEvent : never> & {
193
- event: K;
194
- };
195
- }[TEvent['type']] | (TransitionConfig<TContext, TEvent> & {
196
+ declare type TransitionsConfigArray<TContext, TEvent extends EventObject> = Array<(TEvent extends EventObject ? TransitionConfig<TContext, TEvent> & {
197
+ event: TEvent['type'];
198
+ } : never) | (TransitionConfig<TContext, TEvent> & {
196
199
  event: '';
197
200
  }) | (TransitionConfig<TContext, TEvent> & {
198
201
  event: '*';
199
202
  })>;
200
203
  export declare type TransitionsConfig<TContext, TEvent extends EventObject> = TransitionsConfigMap<TContext, TEvent> | TransitionsConfigArray<TContext, TEvent>;
204
+ export interface InvokeSourceDefinition {
205
+ [key: string]: any;
206
+ type: string;
207
+ }
201
208
  export declare type InvokeConfig<TContext, TEvent extends EventObject> = {
202
209
  /**
203
210
  * The unique identifier for the invoked machine. If not specified, this
@@ -207,7 +214,7 @@ export declare type InvokeConfig<TContext, TEvent extends EventObject> = {
207
214
  /**
208
215
  * The source of the machine to be invoked, or the machine itself.
209
216
  */
210
- src: string | StateMachine<any, any, any> | InvokeCreator<TContext, TEvent, any>;
217
+ src: string | InvokeSourceDefinition | StateMachine<any, any, any> | InvokeCreator<TContext, TEvent, any>;
211
218
  /**
212
219
  * If `true`, events sent to the parent service will be forwarded to the invoked service.
213
220
  *
@@ -226,7 +233,7 @@ export declare type InvokeConfig<TContext, TEvent extends EventObject> = {
226
233
  *
227
234
  * Data should be mapped to match the child machine's context shape.
228
235
  */
229
- data?: Mapper<TContext, TEvent> | PropertyMapper<TContext, TEvent>;
236
+ data?: Mapper<TContext, TEvent, any> | PropertyMapper<TContext, TEvent, any>;
230
237
  /**
231
238
  * The transition to take upon the invoked child machine reaching its final top-level state.
232
239
  */
@@ -235,7 +242,7 @@ export declare type InvokeConfig<TContext, TEvent extends EventObject> = {
235
242
  * The transition to take upon the invoked child machine sending an error event.
236
243
  */
237
244
  onError?: string | SingleOrArray<TransitionConfig<TContext, DoneInvokeEvent<any>>>;
238
- } | StateMachine<any, any, any>;
245
+ };
239
246
  export interface StateNodeConfig<TContext, TStateSchema extends StateSchema, TEvent extends EventObject> {
240
247
  /**
241
248
  * The relative key of the state node, which represents its location in the overall state value.
@@ -279,7 +286,7 @@ export interface StateNodeConfig<TContext, TStateSchema extends StateSchema, TEv
279
286
  /**
280
287
  * The services to invoke upon entering this state node. These services will be stopped upon exiting this state node.
281
288
  */
282
- invoke?: SingleOrArray<InvokeConfig<TContext, TEvent>>;
289
+ invoke?: SingleOrArray<InvokeConfig<TContext, TEvent> | StateMachine<any, any, any>>;
283
290
  /**
284
291
  * The mapping of event types to their potential transition(s).
285
292
  */
@@ -315,6 +322,11 @@ export interface StateNodeConfig<TContext, TStateSchema extends StateSchema, TEv
315
322
  * The delayed transitions are taken after the specified delay in an interpreter.
316
323
  */
317
324
  after?: DelayedTransitions<TContext, TEvent>;
325
+ /**
326
+ * An eventless transition that is always taken when this state node is active.
327
+ * Equivalent to a transition specified as an empty `''`' string in the `on` property.
328
+ */
329
+ always?: TransitionConfigOrTarget<TContext, TEvent>;
318
330
  /**
319
331
  * The activities to be started upon entering the state node,
320
332
  * and stopped upon exiting the state node.
@@ -337,7 +349,7 @@ export interface StateNodeConfig<TContext, TStateSchema extends StateSchema, TEv
337
349
  * The data will be evaluated with the current `context` and placed on the `.data` property
338
350
  * of the event.
339
351
  */
340
- data?: Mapper<TContext, TEvent> | PropertyMapper<TContext, TEvent>;
352
+ data?: Mapper<TContext, TEvent, any> | PropertyMapper<TContext, TEvent, any>;
341
353
  /**
342
354
  * The unique ID of the state node, which can be referenced as a transition target via the
343
355
  * `#id` syntax.
@@ -388,18 +400,18 @@ export interface FinalStateNodeConfig<TContext, TEvent extends EventObject> exte
388
400
  * The data to be sent with the "done.state.<id>" event. The data can be
389
401
  * static or dynamic (based on assigners).
390
402
  */
391
- data?: Assigner<TContext, TEvent> | PropertyAssigner<TContext, TEvent> | any;
403
+ data?: Mapper<TContext, TEvent, any> | PropertyMapper<TContext, TEvent, any>;
392
404
  }
393
405
  export declare type SimpleOrStateNodeConfig<TContext, TStateSchema extends StateSchema, TEvent extends EventObject> = AtomicStateNodeConfig<TContext, TEvent> | StateNodeConfig<TContext, TStateSchema, TEvent>;
394
406
  export declare type ActionFunctionMap<TContext, TEvent extends EventObject> = Record<string, ActionObject<TContext, TEvent> | ActionFunction<TContext, TEvent>>;
395
407
  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>;
408
+ export declare type ServiceConfig<TContext, TEvent extends EventObject = AnyEventObject> = string | StateMachine<any, any, any> | InvokeCreator<TContext, TEvent>;
397
409
  export declare type DelayConfig<TContext, TEvent extends EventObject> = number | DelayExpr<TContext, TEvent>;
398
410
  export interface MachineOptions<TContext, TEvent extends EventObject> {
399
411
  guards: Record<string, ConditionPredicate<TContext, TEvent>>;
400
412
  actions: ActionFunctionMap<TContext, TEvent>;
401
413
  activities: Record<string, ActivityConfig<TContext, TEvent>>;
402
- services: Record<string, ServiceConfig<TContext>>;
414
+ services: Record<string, ServiceConfig<TContext, TEvent>>;
403
415
  delays: DelayFunctionMap<TContext, TEvent>;
404
416
  /**
405
417
  * @private
@@ -434,7 +446,10 @@ export interface HistoryStateNode<TContext> extends StateNode<TContext> {
434
446
  history: 'shallow' | 'deep';
435
447
  target: StateValue | undefined;
436
448
  }
437
- export interface StateMachine<TContext, TStateSchema extends StateSchema, TEvent extends EventObject, TTypestate extends Typestate<TContext> = any> extends StateNode<TContext, TStateSchema, TEvent, TTypestate> {
449
+ export interface StateMachine<TContext, TStateSchema extends StateSchema, TEvent extends EventObject, TTypestate extends Typestate<TContext> = {
450
+ value: any;
451
+ context: TContext;
452
+ }> extends StateNode<TContext, TStateSchema, TEvent, TTypestate> {
438
453
  id: string;
439
454
  states: StateNode<TContext, TStateSchema, TEvent>['states'];
440
455
  }
@@ -541,22 +556,22 @@ export interface LogAction<TContext, TEvent extends EventObject> extends ActionO
541
556
  export interface LogActionObject<TContext, TEvent extends EventObject> extends LogAction<TContext, TEvent> {
542
557
  value: any;
543
558
  }
544
- export interface SendAction<TContext, TEvent extends EventObject> extends ActionObject<TContext, TEvent> {
559
+ export interface SendAction<TContext, TEvent extends EventObject, TSentEvent extends EventObject> extends ActionObject<TContext, TEvent> {
545
560
  to: string | number | Actor | ExprWithMeta<TContext, TEvent, string | number | Actor> | undefined;
546
- event: TEvent | SendExpr<TContext, TEvent>;
561
+ event: TSentEvent | SendExpr<TContext, TEvent, TSentEvent>;
547
562
  delay?: number | string | DelayExpr<TContext, TEvent>;
548
563
  id: string | number;
549
564
  }
550
- export interface SendActionObject<TContext, TEvent extends EventObject> extends SendAction<TContext, TEvent> {
565
+ export interface SendActionObject<TContext, TEvent extends EventObject, TSentEvent extends EventObject = AnyEventObject> extends SendAction<TContext, TEvent, TSentEvent> {
551
566
  to: string | number | Actor | undefined;
552
- _event: SCXML.Event<TEvent>;
553
- event: TEvent;
567
+ _event: SCXML.Event<TSentEvent>;
568
+ event: TSentEvent;
554
569
  delay?: number;
555
570
  id: string | number;
556
571
  }
557
572
  export declare type Expr<TContext, TEvent extends EventObject, T> = (context: TContext, event: TEvent) => T;
558
573
  export declare type ExprWithMeta<TContext, TEvent extends EventObject, T> = (context: TContext, event: TEvent, meta: SCXMLEventMeta<TEvent>) => T;
559
- export declare type SendExpr<TContext, TEvent extends EventObject> = ExprWithMeta<TContext, TEvent, TEvent>;
574
+ export declare type SendExpr<TContext, TEvent extends EventObject, TSentEvent extends EventObject = AnyEventObject> = ExprWithMeta<TContext, TEvent, TSentEvent>;
560
575
  export declare enum SpecialTargets {
561
576
  Parent = "#_parent",
562
577
  Internal = "#_internal"
@@ -573,10 +588,10 @@ export declare type Assigner<TContext, TEvent extends EventObject> = (context: T
573
588
  export declare type PropertyAssigner<TContext, TEvent extends EventObject> = {
574
589
  [K in keyof TContext]?: ((context: TContext, event: TEvent, meta: AssignMeta<TContext, TEvent>) => TContext[K]) | TContext[K];
575
590
  };
576
- export declare type Mapper<TContext, TEvent extends EventObject> = (context: TContext, event: TEvent) => any;
577
- export declare type PropertyMapper<TContext, TEvent extends EventObject> = Partial<{
578
- [key: string]: ((context: TContext, event: TEvent) => any) | any;
579
- }>;
591
+ export declare type Mapper<TContext, TEvent extends EventObject, TParams extends {}> = (context: TContext, event: TEvent) => TParams;
592
+ export declare type PropertyMapper<TContext, TEvent extends EventObject, TParams extends {}> = {
593
+ [K in keyof TParams]?: ((context: TContext, event: TEvent) => TParams[K]) | TParams[K];
594
+ };
580
595
  export interface AnyAssignAction<TContext, TEvent extends EventObject> extends ActionObject<TContext, TEvent> {
581
596
  type: ActionTypes.Assign;
582
597
  assignment: any;
@@ -599,6 +614,13 @@ export interface TransitionDefinition<TContext, TEvent extends EventObject> exte
599
614
  actions: Array<ActionObject<TContext, TEvent>>;
600
615
  cond?: Guard<TContext, TEvent>;
601
616
  eventType: TEvent['type'] | NullEvent['type'] | '*';
617
+ toJSON: () => {
618
+ target: string[] | undefined;
619
+ source: string;
620
+ actions: Array<ActionObject<TContext, TEvent>>;
621
+ cond?: Guard<TContext, TEvent>;
622
+ eventType: TEvent['type'] | NullEvent['type'] | '*';
623
+ };
602
624
  }
603
625
  export declare type TransitionDefinitionMap<TContext, TEvent extends EventObject> = {
604
626
  [K in TEvent['type'] | NullEvent['type'] | '*']: Array<TransitionDefinition<TContext, K extends TEvent['type'] ? Extract<TEvent, {
@@ -788,7 +810,7 @@ export declare namespace SCXML {
788
810
  }
789
811
  }
790
812
  export interface Unsubscribable {
791
- unsubscribe(): any | void;
813
+ unsubscribe(): void;
792
814
  }
793
815
  export interface Subscribable<T> {
794
816
  subscribe(next?: (value: T) => void, error?: (error: any) => void, complete?: () => void): Unsubscribable;
package/lib/types.js CHANGED
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SpecialTargets = exports.ActionTypes = void 0;
3
4
  var ActionTypes;
4
5
  (function (ActionTypes) {
5
6
  ActionTypes["Start"] = "xstate.start";
package/lib/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: Subscribable<T> | any): value is Subscribable<T>;
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/lib/utils.js CHANGED
@@ -42,6 +42,7 @@ var __spread = (this && this.__spread) || function () {
42
42
  return ar;
43
43
  };
44
44
  Object.defineProperty(exports, "__esModule", { value: true });
45
+ exports.toInvokeSource = exports.evaluateGuard = exports.reportUnhandledExceptionOnInvocation = exports.normalizeTarget = exports.toTransitionConfigArray = exports.toSCXMLEvent = exports.toEventObject = exports.uniqueId = exports.isActor = exports.isMachine = exports.symbolObservable = exports.isObservable = exports.toGuard = exports.isString = exports.isFunction = exports.isArray = exports.warn = exports.updateContext = exports.updateHistoryValue = exports.updateHistoryStates = exports.partition = exports.isPromiseLike = exports.isBuiltInEvent = exports.mapContext = exports.toArray = exports.toArrayStrict = exports.flatten = exports.pathsToStateValue = exports.toStatePaths = exports.nestedPath = exports.path = exports.mapFilterValues = exports.mapValues = exports.pathToStateValue = exports.toStateValue = exports.isStateLike = exports.toStatePath = exports.getActionType = exports.getEventType = exports.matchesState = exports.keys = void 0;
45
46
  var constants_1 = require("./constants");
46
47
  var environment_1 = require("./environment");
47
48
  function keys(value) {
@@ -304,7 +305,7 @@ function mapContext(mapper, context, _event) {
304
305
  }
305
306
  var result = {};
306
307
  try {
307
- for (var _b = __values(keys(mapper)), _c = _b.next(); !_c.done; _c = _b.next()) {
308
+ for (var _b = __values(Object.keys(mapper)), _c = _b.next(); !_c.done; _c = _b.next()) {
308
309
  var key = _c.value;
309
310
  var subMapper = mapper[key];
310
311
  if (isFunction(subMapper)) {
@@ -549,7 +550,6 @@ function toTransitionConfigArray(event, configLike) {
549
550
  if (typeof transitionLike === 'undefined' ||
550
551
  typeof transitionLike === 'string' ||
551
552
  isMachine(transitionLike)) {
552
- // @ts-ignore until Type instantiation is excessively deep and possibly infinite bug is fixed
553
553
  return { target: transitionLike, event: event };
554
554
  }
555
555
  return __assign(__assign({}, transitionLike), { event: event });
@@ -602,3 +602,10 @@ function evaluateGuard(machine, guard, context, _event, state) {
602
602
  return condFn(context, _event.data, guardMeta);
603
603
  }
604
604
  exports.evaluateGuard = evaluateGuard;
605
+ function toInvokeSource(src) {
606
+ if (typeof src === 'string') {
607
+ return { type: src };
608
+ }
609
+ return src;
610
+ }
611
+ exports.toInvokeSource = toInvokeSource;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "xstate",
3
- "version": "4.9.1",
3
+ "version": "4.13.0",
4
4
  "description": "Finite State Machines and Statecharts for the Modern Web.",
5
5
  "main": "lib/index.js",
6
6
  "module": "es/index.js",
@@ -48,8 +48,8 @@
48
48
  },
49
49
  "homepage": "https://github.com/davidkpiano/xstate/tree/master/packages/core#readme",
50
50
  "devDependencies": {
51
- "@babel/cli": "^7.6.0",
52
- "@babel/core": "^7.6.0",
51
+ "@babel/cli": "^7.10.5",
52
+ "@babel/core": "^7.10.5",
53
53
  "@scion-scxml/test-framework": "^2.0.15",
54
54
  "babel-plugin-annotate-pure-calls": "^0.4.0",
55
55
  "jest": "^24.8.0",
@@ -66,7 +66,7 @@
66
66
  "rxjs": "^6.5.1",
67
67
  "ts-jest": "^24.1.9",
68
68
  "tslib": "^1.10.0",
69
- "typescript": "^3.8.3",
69
+ "typescript": "^3.9.7",
70
70
  "xml-js": "^1.6.11"
71
71
  }
72
72
  }