xstate 4.27.0 → 4.30.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 (59) hide show
  1. package/CHANGELOG.md +227 -90
  2. package/README.md +5 -5
  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 +1 -2
  7. package/es/Actor.js +5 -5
  8. package/es/Machine.d.ts +5 -4
  9. package/es/State.d.ts +17 -14
  10. package/es/State.js +4 -4
  11. package/es/StateNode.d.ts +22 -17
  12. package/es/StateNode.js +33 -36
  13. package/es/actions.d.ts +3 -4
  14. package/es/actions.js +22 -3
  15. package/es/behaviors.d.ts +1 -1
  16. package/es/devTools.d.ts +3 -4
  17. package/es/each.d.ts +1 -1
  18. package/es/index.d.ts +10 -21
  19. package/es/index.js +11 -22
  20. package/es/interpreter.d.ts +34 -31
  21. package/es/interpreter.js +21 -13
  22. package/es/model.d.ts +2 -2
  23. package/es/model.types.d.ts +8 -9
  24. package/es/schema.d.ts +1 -0
  25. package/es/schema.js +2 -1
  26. package/es/scxml.d.ts +2 -2
  27. package/es/stateUtils.d.ts +6 -5
  28. package/es/typegenTypes.d.ts +121 -0
  29. package/es/types.d.ts +118 -57
  30. package/es/utils.d.ts +7 -2
  31. package/es/utils.js +9 -2
  32. package/lib/Actor.d.ts +1 -2
  33. package/lib/Actor.js +4 -4
  34. package/lib/Machine.d.ts +5 -4
  35. package/lib/State.d.ts +17 -14
  36. package/lib/State.js +4 -4
  37. package/lib/StateNode.d.ts +22 -17
  38. package/lib/StateNode.js +32 -35
  39. package/lib/actions.d.ts +3 -4
  40. package/lib/actions.js +20 -0
  41. package/lib/behaviors.d.ts +1 -1
  42. package/lib/devTools.d.ts +3 -4
  43. package/lib/each.d.ts +1 -1
  44. package/lib/index.d.ts +10 -21
  45. package/lib/index.js +15 -26
  46. package/lib/interpreter.d.ts +34 -31
  47. package/lib/interpreter.js +18 -10
  48. package/lib/model.d.ts +2 -2
  49. package/lib/model.types.d.ts +8 -9
  50. package/lib/schema.d.ts +1 -0
  51. package/lib/schema.js +2 -0
  52. package/lib/scxml.d.ts +2 -2
  53. package/lib/stateUtils.d.ts +6 -5
  54. package/lib/typegenTypes.d.ts +121 -0
  55. package/lib/typegenTypes.js +2 -0
  56. package/lib/types.d.ts +118 -57
  57. package/lib/utils.d.ts +7 -2
  58. package/lib/utils.js +10 -1
  59. package/package.json +5 -5
package/lib/types.d.ts CHANGED
@@ -1,9 +1,26 @@
1
- import { StateNode } from './StateNode';
1
+ import { Clock, Interpreter } from './interpreter';
2
+ import { Model } from './model.types';
2
3
  import { State } from './State';
3
- import { Interpreter, Clock } from './interpreter';
4
- import { IsNever, Model, Prop } from './model.types';
5
- declare type AnyFunction = (...args: any[]) => any;
4
+ import { StateNode } from './StateNode';
5
+ import { MarkAllImplementationsAsProvided, TypegenDisabled, ResolveTypegenMeta, TypegenConstraint, AreAllImplementationsAssumedToBeProvided } from './typegenTypes';
6
+ export declare type AnyFunction = (...args: any[]) => any;
6
7
  declare type ReturnTypeOrValue<T> = T extends AnyFunction ? ReturnType<T> : T;
8
+ export declare type IsNever<T> = [T] extends [never] ? true : false;
9
+ export declare type Compute<A extends any> = {
10
+ [K in keyof A]: A[K];
11
+ } & unknown;
12
+ export declare type Prop<T, K> = K extends keyof T ? T[K] : never;
13
+ export declare type Values<T> = T[keyof T];
14
+ export declare type Merge<M, N> = Omit<M, keyof N> & N;
15
+ export declare type IndexByType<T extends {
16
+ type: string;
17
+ }> = {
18
+ [K in T['type']]: Extract<T, {
19
+ type: K;
20
+ }>;
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>;
7
24
  export declare type Cast<A, B> = A extends B ? A : B;
8
25
  export declare type EventType = string;
9
26
  export declare type ActionType = string;
@@ -45,7 +62,7 @@ export declare type EventData = Record<string, any> & {
45
62
  * The specified string event types or the specified event objects.
46
63
  */
47
64
  export declare type Event<TEvent extends EventObject> = TEvent['type'] | TEvent;
48
- export interface ActionMeta<TContext, TEvent extends EventObject, TAction extends ActionObject<TContext, TEvent> = ActionObject<TContext, TEvent>> extends StateMeta<TContext, TEvent> {
65
+ export interface ActionMeta<TContext, TEvent extends EventObject, TAction extends BaseActionObject = BaseActionObject> extends StateMeta<TContext, TEvent> {
49
66
  action: TAction;
50
67
  _event: SCXML.Event<TEvent>;
51
68
  }
@@ -54,7 +71,9 @@ export interface AssignMeta<TContext, TEvent extends EventObject> {
54
71
  action: AssignAction<TContext, TEvent>;
55
72
  _event: SCXML.Event<TEvent>;
56
73
  }
57
- export declare type ActionFunction<TContext, TEvent extends EventObject, TAction extends ActionObject<TContext, TEvent> = ActionObject<TContext, TEvent>> = (context: TContext, event: TEvent, meta: ActionMeta<TContext, TEvent, TAction>) => void;
74
+ export declare type ActionFunction<TContext, TEvent extends EventObject, TAction extends BaseActionObject = BaseActionObject> = {
75
+ bivarianceHack(context: TContext, event: TEvent, meta: ActionMeta<TContext, TEvent, TAction>): void;
76
+ }['bivarianceHack'];
58
77
  export interface ChooseCondition<TContext, TEvent extends EventObject> {
59
78
  cond?: Condition<TContext, TEvent>;
60
79
  actions: Actions<TContext, TEvent>;
@@ -146,7 +165,9 @@ export interface PayloadSender<TEvent extends EventObject> {
146
165
  */
147
166
  <K extends TEvent['type']>(eventType: K, payload: NeverIfEmpty<ExtractExtraParameters<TEvent, K>>): void;
148
167
  }
149
- export declare type Receiver<TEvent extends EventObject> = (listener: (event: TEvent) => void) => void;
168
+ export declare type Receiver<TEvent extends EventObject> = (listener: {
169
+ bivarianceHack(event: TEvent): void;
170
+ }['bivarianceHack']) => void;
150
171
  export declare type InvokeCallback<TEvent extends EventObject = AnyEventObject, TSentEvent extends EventObject = AnyEventObject> = (callback: Sender<TSentEvent>, onReceive: Receiver<TEvent>) => (() => void) | Promise<any> | void;
151
172
  export interface InvokeMeta {
152
173
  data: any;
@@ -166,7 +187,8 @@ export interface InvokeMeta {
166
187
  * @param context The current machine `context`
167
188
  * @param event The event that invoked the service
168
189
  */
169
- export declare type InvokeCreator<TContext, TEvent extends EventObject, TFinalContext = any> = (context: TContext, event: TEvent, meta: InvokeMeta) => PromiseLike<TFinalContext> | StateMachine<TFinalContext, any, any> | Subscribable<EventObject> | InvokeCallback<any, TEvent> | Behavior<any>;
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>;
170
192
  export interface InvokeDefinition<TContext, TEvent extends EventObject> extends ActivityDefinition<TContext, TEvent> {
171
193
  /**
172
194
  * The source of the machine to be invoked, or the machine itself.
@@ -455,7 +477,7 @@ export interface FinalStateNodeConfig<TContext, TEvent extends EventObject> exte
455
477
  data?: Mapper<TContext, TEvent, any> | PropertyMapper<TContext, TEvent, any>;
456
478
  }
457
479
  export declare type SimpleOrStateNodeConfig<TContext, TStateSchema extends StateSchema, TEvent extends EventObject> = AtomicStateNodeConfig<TContext, TEvent> | StateNodeConfig<TContext, TStateSchema, TEvent>;
458
- export declare type ActionFunctionMap<TContext, TEvent extends EventObject, TAction extends ActionObject<TContext, TEvent> = ActionObject<TContext, TEvent>> = {
480
+ export declare type ActionFunctionMap<TContext, TEvent extends EventObject, TAction extends BaseActionObject = BaseActionObject> = {
459
481
  [K in TAction['type']]?: ActionObject<TContext, TEvent> | ActionFunction<TContext, TEvent, TAction extends {
460
482
  type: K;
461
483
  } ? TAction : never>;
@@ -463,25 +485,44 @@ export declare type ActionFunctionMap<TContext, TEvent extends EventObject, TAct
463
485
  export declare type DelayFunctionMap<TContext, TEvent extends EventObject> = Record<string, DelayConfig<TContext, TEvent>>;
464
486
  export declare type ServiceConfig<TContext, TEvent extends EventObject = AnyEventObject> = string | StateMachine<any, any, any> | InvokeCreator<TContext, TEvent>;
465
487
  export declare type DelayConfig<TContext, TEvent extends EventObject> = number | DelayExpr<TContext, TEvent>;
466
- export interface MachineOptions<TContext, TEvent extends EventObject, TAction extends ActionObject<TContext, TEvent> = ActionObject<TContext, TEvent>> {
467
- guards: Record<string, ConditionPredicate<TContext, TEvent>>;
468
- actions: ActionFunctionMap<TContext, TEvent, TAction>;
488
+ declare type MachineOptionsActions<TContext, TResolvedTypesMeta, TEventsCausingActions = Prop<TResolvedTypesMeta, 'eventsCausingActions'>, TIndexedEvents = Prop<TResolvedTypesMeta, 'indexedEvents'>, TIndexedActions = Prop<TResolvedTypesMeta, 'indexedActions'>> = {
489
+ [K in keyof TEventsCausingActions]?: ActionObject<TContext, Cast<Prop<TIndexedEvents, TEventsCausingActions[K]>, EventObject>> | ActionFunction<TContext, Cast<Prop<TIndexedEvents, TEventsCausingActions[K]>, EventObject>, Cast<Prop<TIndexedActions, K>, BaseActionObject>>;
490
+ };
491
+ declare type MachineOptionsDelays<TContext, TResolvedTypesMeta, TEventsCausingDelays = Prop<TResolvedTypesMeta, 'eventsCausingDelays'>, TIndexedEvents = Prop<TResolvedTypesMeta, 'indexedEvents'>> = {
492
+ [K in keyof TEventsCausingDelays]?: DelayConfig<TContext, Cast<Prop<TIndexedEvents, TEventsCausingDelays[K]>, EventObject>>;
493
+ };
494
+ declare type MachineOptionsGuards<TContext, TResolvedTypesMeta, TEventsCausingGuards = Prop<TResolvedTypesMeta, 'eventsCausingGuards'>, TIndexedEvents = Prop<TResolvedTypesMeta, 'indexedEvents'>> = {
495
+ [K in keyof TEventsCausingGuards]?: ConditionPredicate<TContext, Cast<Prop<TIndexedEvents, TEventsCausingGuards[K]>, EventObject>>;
496
+ };
497
+ declare type MachineOptionsServices<TContext, TResolvedTypesMeta, TEventsCausingServices = Prop<TResolvedTypesMeta, 'eventsCausingServices'>, TIndexedEvents = Prop<TResolvedTypesMeta, 'indexedEvents'>, TInvokeSrcNameMap = Prop<TResolvedTypesMeta, 'invokeSrcNameMap'>> = {
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>>;
499
+ };
500
+ declare type MakeKeysRequired<T extends string> = {
501
+ [K in T]: unknown;
502
+ };
503
+ declare type MaybeMakeMissingImplementationsRequired<TImplementationType, TMissingImplementationsForType, TRequireMissingImplementations> = TRequireMissingImplementations extends true ? IsNever<TMissingImplementationsForType> extends true ? {} : {
504
+ [K in Cast<TImplementationType, string>]: MakeKeysRequired<Cast<TMissingImplementationsForType, string>>;
505
+ } : {};
506
+ declare type GenerateActionsConfigPart<TContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> = MaybeMakeMissingImplementationsRequired<'actions', Prop<TMissingImplementations, 'actions'>, TRequireMissingImplementations> & {
507
+ actions?: MachineOptionsActions<TContext, TResolvedTypesMeta>;
508
+ };
509
+ declare type GenerateDelaysConfigPart<TContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> = MaybeMakeMissingImplementationsRequired<'delays', Prop<TMissingImplementations, 'delays'>, TRequireMissingImplementations> & {
510
+ delays?: MachineOptionsDelays<TContext, TResolvedTypesMeta>;
511
+ };
512
+ declare type GenerateGuardsConfigPart<TContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> = MaybeMakeMissingImplementationsRequired<'guards', Prop<TMissingImplementations, 'guards'>, TRequireMissingImplementations> & {
513
+ guards?: MachineOptionsGuards<TContext, TResolvedTypesMeta>;
514
+ };
515
+ declare type GenerateServicesConfigPart<TContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> = MaybeMakeMissingImplementationsRequired<'services', Prop<TMissingImplementations, 'services'>, TRequireMissingImplementations> & {
516
+ services?: MachineOptionsServices<TContext, TResolvedTypesMeta>;
517
+ };
518
+ export declare type InternalMachineOptions<TContext, TEvent extends EventObject, TResolvedTypesMeta, TRequireMissingImplementations extends boolean = false, TMissingImplementations = Prop<TResolvedTypesMeta, 'missingImplementations'>> = GenerateActionsConfigPart<TContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> & GenerateDelaysConfigPart<TContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> & GenerateGuardsConfigPart<TContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> & GenerateServicesConfigPart<TContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> & {
469
519
  /**
470
520
  * @deprecated Use `services` instead.
471
521
  */
472
- activities: Record<string, ActivityConfig<TContext, TEvent>>;
473
- services: Record<string, ServiceConfig<TContext, TEvent>>;
474
- delays: DelayFunctionMap<TContext, TEvent>;
475
- /**
476
- * @private
477
- */
478
- _parent?: StateNode<TContext, any, TEvent, any>;
479
- /**
480
- * @private
481
- */
482
- _key?: string;
483
- }
484
- export interface MachineConfig<TContext, TStateSchema extends StateSchema, TEvent extends EventObject, TAction extends BaseActionObject = ActionObject<TContext, TEvent>> extends StateNodeConfig<TContext, TStateSchema, TEvent, TAction> {
522
+ activities?: Record<string, ActivityConfig<TContext, TEvent>>;
523
+ };
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> {
485
526
  /**
486
527
  * The initial context (extended state)
487
528
  */
@@ -490,9 +531,13 @@ export interface MachineConfig<TContext, TStateSchema extends StateSchema, TEven
490
531
  * The machine's own version.
491
532
  */
492
533
  version?: string;
493
- schema?: MachineSchema<TContext, TEvent>;
534
+ schema?: MachineSchema<TContext, TEvent, TServiceMap>;
535
+ tsTypes?: TTypesMeta;
494
536
  }
495
- export interface MachineSchema<TContext, TEvent extends EventObject> {
537
+ export declare type ServiceMap = Record<string, {
538
+ data: any;
539
+ }>;
540
+ export interface MachineSchema<TContext, TEvent extends EventObject, TServiceMap extends ServiceMap = ServiceMap> {
496
541
  context?: TContext;
497
542
  events?: TEvent;
498
543
  actions?: {
@@ -503,10 +548,7 @@ export interface MachineSchema<TContext, TEvent extends EventObject> {
503
548
  type: string;
504
549
  [key: string]: any;
505
550
  };
506
- services?: {
507
- type: string;
508
- [key: string]: any;
509
- };
551
+ services?: TServiceMap;
510
552
  }
511
553
  export interface StandardMachineConfig<TContext, TStateSchema extends StateSchema, TEvent extends EventObject> extends StateNodeConfig<TContext, TStateSchema, TEvent> {
512
554
  }
@@ -522,16 +564,31 @@ export interface HistoryStateNode<TContext> extends StateNode<TContext> {
522
564
  history: 'shallow' | 'deep';
523
565
  target: StateValue | undefined;
524
566
  }
567
+ /** @ts-ignore TS complains about withConfig & withContext not being compatible here when extending StateNode */
525
568
  export interface StateMachine<TContext, TStateSchema extends StateSchema, TEvent extends EventObject, TTypestate extends Typestate<TContext> = {
526
569
  value: any;
527
570
  context: TContext;
528
- }, _TAction extends ActionObject<TContext, TEvent> = ActionObject<TContext, TEvent>> extends StateNode<TContext, TStateSchema, TEvent, TTypestate> {
571
+ }, TAction extends BaseActionObject = BaseActionObject, TServiceMap extends ServiceMap = ServiceMap, TResolvedTypesMeta = TypegenDisabled> extends StateNode<TContext, TStateSchema, TEvent, TTypestate, TServiceMap, TResolvedTypesMeta> {
529
572
  id: string;
530
- states: StateNode<TContext, TStateSchema, TEvent>['states'];
531
- withConfig(options: Partial<MachineOptions<TContext, TEvent>>, context?: TContext | (() => TContext)): StateMachine<TContext, TStateSchema, TEvent, TTypestate>;
532
- withContext(context: TContext | (() => TContext)): StateMachine<TContext, TStateSchema, TEvent, TTypestate>;
533
- }
534
- export declare type StateFrom<T extends StateMachine<any, any, any, any> | ((...args: any[]) => StateMachine<any, any, any, any>)> = T extends StateMachine<any, any, any> ? ReturnType<T['transition']> : T extends (...args: any[]) => StateMachine<any, any, any> ? ReturnType<ReturnType<T>['transition']> : never;
573
+ states: StateNode<TContext, TStateSchema, TEvent, TTypestate, TServiceMap, TResolvedTypesMeta>['states'];
574
+ withConfig(options: InternalMachineOptions<TContext, TEvent, TResolvedTypesMeta, true>, context?: TContext | (() => TContext)): StateMachine<TContext, TStateSchema, TEvent, TTypestate, TAction, TServiceMap, AreAllImplementationsAssumedToBeProvided<TResolvedTypesMeta> extends false ? MarkAllImplementationsAsProvided<TResolvedTypesMeta> : TResolvedTypesMeta>;
575
+ withContext(context: TContext | (() => TContext)): StateMachine<TContext, TStateSchema, TEvent, TTypestate, TAction, TServiceMap, TResolvedTypesMeta>;
576
+ /** @deprecated an internal property acting as a "phantom" type, not meant to be used at runtime */
577
+ __TContext: TContext;
578
+ /** @deprecated an internal property acting as a "phantom" type, not meant to be used at runtime */
579
+ __TStateSchema: TStateSchema;
580
+ /** @deprecated an internal property acting as a "phantom" type, not meant to be used at runtime */
581
+ __TEvent: TEvent;
582
+ /** @deprecated an internal property acting as a "phantom" type, not meant to be used at runtime */
583
+ __TTypestate: TTypestate;
584
+ /** @deprecated an internal property acting as a "phantom" type, not meant to be used at runtime */
585
+ __TAction: TAction;
586
+ /** @deprecated an internal property acting as a "phantom" type, not meant to be used at runtime */
587
+ __TServiceMap: TServiceMap;
588
+ /** @deprecated an internal property acting as a "phantom" type, not meant to be used at runtime */
589
+ __TResolvedTypesMeta: TResolvedTypesMeta;
590
+ }
591
+ 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;
535
592
  export interface ActionMap<TContext, TEvent extends EventObject> {
536
593
  onEntry: Array<Action<TContext, TEvent>>;
537
594
  actions: Array<Action<TContext, TEvent>>;
@@ -550,13 +607,13 @@ export interface ActivityMap {
550
607
  }
551
608
  export interface StateTransition<TContext, TEvent extends EventObject> {
552
609
  transitions: Array<TransitionDefinition<TContext, TEvent>>;
553
- configuration: Array<StateNode<TContext, any, TEvent, any>>;
554
- entrySet: Array<StateNode<TContext, any, TEvent, any>>;
555
- exitSet: Array<StateNode<TContext, any, TEvent, any>>;
610
+ configuration: Array<StateNode<TContext, any, TEvent, any, any, any>>;
611
+ entrySet: Array<StateNode<TContext, any, TEvent, any, any, any>>;
612
+ exitSet: Array<StateNode<TContext, any, TEvent, any, any, any>>;
556
613
  /**
557
614
  * The source state that preceded the transition.
558
615
  */
559
- source: State<TContext, any, any, any> | undefined;
616
+ source: State<TContext, any, any, any, any> | undefined;
560
617
  actions: Array<ActionObject<TContext, TEvent>>;
561
618
  }
562
619
  export interface TransitionData<TContext, TEvent extends EventObject> {
@@ -777,7 +834,7 @@ export interface SCXMLEventMeta<TEvent extends EventObject> {
777
834
  _event: SCXML.Event<TEvent>;
778
835
  }
779
836
  export interface StateMeta<TContext, TEvent extends EventObject> {
780
- state: State<TContext, TEvent, any, any>;
837
+ state: State<TContext, TEvent, any, any, any>;
781
838
  _event: SCXML.Event<TEvent>;
782
839
  }
783
840
  export interface Typestate<TContext> {
@@ -796,7 +853,7 @@ export interface StateConfig<TContext, TEvent extends EventObject> {
796
853
  _event: SCXML.Event<TEvent>;
797
854
  _sessionid: string | null;
798
855
  historyValue?: HistoryValue | undefined;
799
- history?: State<TContext, TEvent>;
856
+ history?: State<TContext, TEvent, any, any, any>;
800
857
  actions?: Array<ActionObject<TContext, TEvent>>;
801
858
  /**
802
859
  * @deprecated
@@ -809,7 +866,7 @@ export interface StateConfig<TContext, TEvent extends EventObject> {
809
866
  children: Record<string, ActorRef<any>>;
810
867
  done?: boolean;
811
868
  tags?: Set<string>;
812
- machine?: StateMachine<TContext, any, TEvent, any>;
869
+ machine?: StateMachine<TContext, any, TEvent, any, any, any, any>;
813
870
  }
814
871
  export interface StateSchema<TC = any> {
815
872
  meta?: any;
@@ -822,9 +879,9 @@ export interface InterpreterOptions {
822
879
  /**
823
880
  * Whether state actions should be executed immediately upon transition. Defaults to `true`.
824
881
  */
825
- execute: boolean;
826
- clock: Clock;
827
- logger: (...args: any[]) => void;
882
+ execute?: boolean;
883
+ clock?: Clock;
884
+ logger?: (...args: any[]) => void;
828
885
  parent?: AnyInterpreter;
829
886
  /**
830
887
  * If `true`, defers processing of sent events until the service
@@ -833,7 +890,7 @@ export interface InterpreterOptions {
833
890
  *
834
891
  * Default: `true`
835
892
  */
836
- deferEvents: boolean;
893
+ deferEvents?: boolean;
837
894
  /**
838
895
  * The custom `id` for referencing this service.
839
896
  */
@@ -843,8 +900,7 @@ export interface InterpreterOptions {
843
900
  *
844
901
  * Default: `false`
845
902
  */
846
- devTools: boolean | object;
847
- [option: string]: any;
903
+ devTools?: boolean | object;
848
904
  }
849
905
  export declare namespace SCXML {
850
906
  interface Event<TEvent extends EventObject> {
@@ -916,18 +972,21 @@ export interface Observer<T> {
916
972
  export interface Subscription {
917
973
  unsubscribe(): void;
918
974
  }
975
+ export interface InteropObservable<T> {
976
+ [Symbol.observable]: () => Subscribable<T>;
977
+ }
919
978
  export interface Subscribable<T> {
920
979
  subscribe(next: (value: T) => void, error?: (error: any) => void, complete?: () => void): Subscription;
921
980
  subscribe(observer: Observer<T>): Subscription;
922
981
  }
923
- export declare type Spawnable = StateMachine<any, any, any> | PromiseLike<any> | InvokeCallback | Subscribable<any> | Behavior<any>;
982
+ export declare type Spawnable = StateMachine<any, any, any> | PromiseLike<any> | InvokeCallback | InteropObservable<any> | Subscribable<any> | Behavior<any>;
924
983
  export declare type ExtractEvent<TEvent extends EventObject, TEventType extends TEvent['type']> = TEvent extends {
925
984
  type: TEventType;
926
985
  } ? TEvent : never;
927
986
  export interface BaseActorRef<TEvent extends EventObject> {
928
987
  send: (event: TEvent) => void;
929
988
  }
930
- export interface ActorRef<TEvent extends EventObject, TEmitted = any> extends Subscribable<TEmitted> {
989
+ export interface ActorRef<TEvent extends EventObject, TEmitted = any> extends Subscribable<TEmitted>, InteropObservable<TEmitted> {
931
990
  send: Sender<TEvent>;
932
991
  id: string;
933
992
  getSnapshot: () => TEmitted | undefined;
@@ -938,15 +997,17 @@ export interface ActorRef<TEvent extends EventObject, TEmitted = any> extends Su
938
997
  * @deprecated Use `ActorRef` instead.
939
998
  */
940
999
  export declare type SpawnedActorRef<TEvent extends EventObject, TEmitted = any> = ActorRef<TEvent, TEmitted>;
941
- export declare type ActorRefWithDeprecatedState<TContext, TEvent extends EventObject, TTypestate extends Typestate<TContext>> = ActorRef<TEvent, State<TContext, TEvent, any, TTypestate>> & {
1000
+ export declare type ActorRefWithDeprecatedState<TContext, TEvent extends EventObject, TTypestate extends Typestate<TContext>, TResolvedTypesMeta = TypegenDisabled> = ActorRef<TEvent, State<TContext, TEvent, any, TTypestate, TResolvedTypesMeta>> & {
942
1001
  /**
943
1002
  * @deprecated Use `.getSnapshot()` instead.
944
1003
  */
945
- state: State<TContext, TEvent, any, TTypestate>;
1004
+ state: State<TContext, TEvent, any, TTypestate, TResolvedTypesMeta>;
946
1005
  };
947
- 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> ? ActorRefWithDeprecatedState<TContext, TEvent, TTypestate> : 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;
948
- export declare type AnyInterpreter = Interpreter<any, any, any, any>;
949
- export declare type InterpreterFrom<T extends StateMachine<any, any, any, any> | ((...args: any[]) => StateMachine<any, any, any, any>)> = T extends StateMachine<infer TContext, infer TStateSchema, infer TEvent, infer TTypestate> ? Interpreter<TContext, TStateSchema, TEvent, TTypestate> : T extends (...args: any[]) => StateMachine<infer TContext, infer TStateSchema, infer TEvent, infer TTypestate> ? Interpreter<TContext, TStateSchema, TEvent, TTypestate> : never;
1006
+ 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;
1007
+ export declare type AnyInterpreter = Interpreter<any, any, any, any, any>;
1008
+ 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;
1009
+ 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;
1010
+ export declare type __ResolvedTypesMetaFrom<T> = T extends StateMachine<any, any, any, any, any, any, infer TResolvedTypesMeta> ? TResolvedTypesMeta : never;
950
1011
  export interface ActorContext<TEvent extends EventObject, TEmitted> {
951
1012
  parent?: ActorRef<any, any>;
952
1013
  self: ActorRef<TEvent, TEmitted>;
package/lib/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: any;
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;
@@ -63,7 +67,8 @@ export declare function toTransitionConfigArray<TContext, TEvent extends EventOb
63
67
  }>;
64
68
  export declare function normalizeTarget<TContext, TEvent extends EventObject>(target: SingleOrArray<string | StateNode<TContext, any, TEvent>> | undefined): Array<string | StateNode<TContext, any, TEvent>> | undefined;
65
69
  export declare function reportUnhandledExceptionOnInvocation(originalError: any, currentError: any, id: string): void;
66
- export declare function evaluateGuard<TContext, TEvent extends EventObject>(machine: StateNode<TContext, any, TEvent, any>, guard: Guard<TContext, TEvent>, context: TContext, _event: SCXML.Event<TEvent>, state: State<TContext, TEvent>): boolean;
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/lib/utils.js CHANGED
@@ -6,6 +6,7 @@ var _tslib = require('./_virtual/_tslib.js');
6
6
  var constants = require('./constants.js');
7
7
  var environment = require('./environment.js');
8
8
 
9
+ var _a;
9
10
  function keys(value) {
10
11
  return Object.keys(value);
11
12
  }
@@ -464,6 +465,9 @@ function isObservable(value) {
464
465
  var symbolObservable = /*#__PURE__*/function () {
465
466
  return typeof Symbol === 'function' && Symbol.observable || '@@observable';
466
467
  }();
468
+ var interopSymbols = (_a = {}, _a[symbolObservable] = function () {
469
+ return this;
470
+ }, _a);
467
471
  function isMachine(value) {
468
472
  try {
469
473
  return '__xstatenode' in value;
@@ -552,7 +556,7 @@ function evaluateGuard(machine, guard, context, _event, state) {
552
556
  return ((guards === null || guards === void 0 ? void 0 : guards[guard.name]) || guard.predicate)(context, _event.data, guardMeta);
553
557
  }
554
558
 
555
- var condFn = guards[guard.type];
559
+ var condFn = guards === null || guards === void 0 ? void 0 : guards[guard.type];
556
560
 
557
561
  if (!condFn) {
558
562
  throw new Error("Guard '".concat(guard.type, "' is not implemented on machine '").concat(machine.id, "'."));
@@ -584,10 +588,15 @@ function toObserver(nextHandler, errorHandler, completionHandler) {
584
588
  complete: completionHandler || noop
585
589
  };
586
590
  }
591
+ function createInvokeId(stateNodeId, index) {
592
+ return "".concat(stateNodeId, ":invocation[").concat(index, "]");
593
+ }
587
594
 
595
+ exports.createInvokeId = createInvokeId;
588
596
  exports.evaluateGuard = evaluateGuard;
589
597
  exports.flatten = flatten;
590
598
  exports.getEventType = getEventType;
599
+ exports.interopSymbols = interopSymbols;
591
600
  exports.isActor = isActor;
592
601
  exports.isArray = isArray;
593
602
  exports.isBehavior = isBehavior;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "xstate",
3
- "version": "4.27.0",
3
+ "version": "4.30.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",
@@ -30,18 +30,18 @@
30
30
  "clean": "rm -rf lib es dist tsconfig.tsbuildinfo",
31
31
  "test": "jest",
32
32
  "build": "rollup -c",
33
- "prepublishOnly": "npm run build"
33
+ "prepare": "npm run build"
34
34
  },
35
35
  "repository": {
36
36
  "type": "git",
37
- "url": "git+https://github.com/davidkpiano/xstate.git"
37
+ "url": "git+https://github.com/statelyai/xstate.git"
38
38
  },
39
39
  "author": "David Khourshid <davidkpiano@gmail.com>",
40
40
  "license": "MIT",
41
41
  "bugs": {
42
- "url": "https://github.com/davidkpiano/xstate/issues"
42
+ "url": "https://github.com/statelyai/xstate/issues"
43
43
  },
44
- "homepage": "https://github.com/davidkpiano/xstate/tree/main/packages/core#readme",
44
+ "homepage": "https://github.com/statelyai/xstate/tree/main/packages/core#readme",
45
45
  "devDependencies": {
46
46
  "@babel/cli": "^7.10.5",
47
47
  "@babel/core": "^7.10.5",