xstate 4.28.1 → 4.29.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/CHANGELOG.md +139 -91
  2. package/README.md +5 -5
  3. package/dist/xstate.js +1 -1
  4. package/dist/xstate.web.js +2 -2
  5. package/es/Actor.d.ts +1 -2
  6. package/es/Machine.d.ts +5 -4
  7. package/es/State.d.ts +13 -11
  8. package/es/StateNode.d.ts +22 -17
  9. package/es/StateNode.js +7 -7
  10. package/es/actions.d.ts +3 -4
  11. package/es/behaviors.d.ts +1 -1
  12. package/es/devTools.d.ts +3 -4
  13. package/es/each.d.ts +1 -1
  14. package/es/index.d.ts +3 -2
  15. package/es/index.js +1 -1
  16. package/es/interpreter.d.ts +37 -26
  17. package/es/model.d.ts +2 -2
  18. package/es/model.types.d.ts +8 -9
  19. package/es/schema.d.ts +1 -0
  20. package/es/schema.js +2 -1
  21. package/es/scxml.d.ts +2 -2
  22. package/es/stateUtils.d.ts +6 -5
  23. package/es/typegenTypes.d.ts +121 -0
  24. package/es/types.d.ts +105 -55
  25. package/es/utils.d.ts +1 -1
  26. package/es/utils.js +1 -1
  27. package/lib/Actor.d.ts +1 -2
  28. package/lib/Machine.d.ts +5 -4
  29. package/lib/State.d.ts +13 -11
  30. package/lib/StateNode.d.ts +22 -17
  31. package/lib/StateNode.js +7 -7
  32. package/lib/actions.d.ts +3 -4
  33. package/lib/behaviors.d.ts +1 -1
  34. package/lib/devTools.d.ts +3 -4
  35. package/lib/each.d.ts +1 -1
  36. package/lib/index.d.ts +3 -2
  37. package/lib/index.js +1 -0
  38. package/lib/interpreter.d.ts +37 -26
  39. package/lib/model.d.ts +2 -2
  40. package/lib/model.types.d.ts +8 -9
  41. package/lib/schema.d.ts +1 -0
  42. package/lib/schema.js +2 -0
  43. package/lib/scxml.d.ts +2 -2
  44. package/lib/stateUtils.d.ts +6 -5
  45. package/lib/typegenTypes.d.ts +121 -0
  46. package/lib/typegenTypes.js +2 -0
  47. package/lib/types.d.ts +105 -55
  48. package/lib/utils.d.ts +1 -1
  49. package/lib/utils.js +1 -1
  50. package/package.json +5 -5
@@ -0,0 +1,121 @@
1
+ import { BaseActionObject, EventObject, IndexByType, IsNever, Prop, Values, IsAny, ServiceMap, Cast } from './types';
2
+ export interface TypegenDisabled {
3
+ '@@xstate/typegen': false;
4
+ }
5
+ export interface TypegenEnabled {
6
+ '@@xstate/typegen': true;
7
+ }
8
+ export interface TypegenMeta extends TypegenEnabled {
9
+ /**
10
+ * Allows you to specify all the results of state.matches
11
+ */
12
+ matchesStates: string | {};
13
+ /**
14
+ * Allows you to specify all tags used by the machine
15
+ */
16
+ tags: string;
17
+ /**
18
+ * Allows you to specify all the missing implementations
19
+ * of the machine
20
+ */
21
+ missingImplementations: {
22
+ actions: string;
23
+ delays: string;
24
+ guards: string;
25
+ services: string;
26
+ };
27
+ /**
28
+ * A map for the internal events of the machine.
29
+ *
30
+ * key: 'done.invoke.myService'
31
+ * value: {
32
+ * type: 'done.invoke.myService';
33
+ * data: unknown;
34
+ * __tip: 'Declare the type in event types!';
35
+ * }
36
+ */
37
+ internalEvents: {};
38
+ /**
39
+ * Maps the name of the service to the event type
40
+ * of the done.invoke action
41
+ *
42
+ * key: 'invokeSrc'
43
+ * value: 'done.invoke.invokeName'
44
+ */
45
+ invokeSrcNameMap: Record<string, string>;
46
+ /**
47
+ * Keeps track of which events lead to which
48
+ * actions.
49
+ *
50
+ * Key: 'EVENT_NAME'
51
+ * Value: 'actionName' | 'otherActionName'
52
+ */
53
+ eventsCausingActions: Record<string, string>;
54
+ /**
55
+ * Keeps track of which events lead to which
56
+ * delays.
57
+ *
58
+ * Key: 'EVENT_NAME'
59
+ * Value: 'delayName' | 'otherDelayName'
60
+ */
61
+ eventsCausingDelays: Record<string, string>;
62
+ /**
63
+ * Keeps track of which events lead to which
64
+ * guards.
65
+ *
66
+ * Key: 'EVENT_NAME'
67
+ * Value: 'guardName' | 'otherGuardName'
68
+ */
69
+ eventsCausingGuards: Record<string, string>;
70
+ /**
71
+ * Keeps track of which events lead to which
72
+ * services.
73
+ *
74
+ * Key: 'EVENT_NAME'
75
+ * Value: 'serviceName' | 'otherServiceName'
76
+ */
77
+ eventsCausingServices: Record<string, string>;
78
+ }
79
+ export interface ResolvedTypegenMeta extends TypegenMeta {
80
+ indexedActions: Record<string, BaseActionObject>;
81
+ indexedEvents: Record<string, EventObject>;
82
+ }
83
+ export declare type TypegenConstraint = TypegenEnabled | TypegenDisabled;
84
+ export declare type AreAllImplementationsAssumedToBeProvided<TResolvedTypesMeta, TMissingImplementations = Prop<TResolvedTypesMeta, 'missingImplementations'>> = IsAny<TResolvedTypesMeta> extends true ? true : TResolvedTypesMeta extends TypegenEnabled ? IsNever<Values<{
85
+ [K in keyof TMissingImplementations]: TMissingImplementations[K];
86
+ }>> extends true ? true : false : true;
87
+ export declare type MarkAllImplementationsAsProvided<TResolvedTypesMeta> = TResolvedTypesMeta & {
88
+ missingImplementations: {
89
+ actions: never;
90
+ delays: never;
91
+ guards: never;
92
+ services: never;
93
+ };
94
+ };
95
+ declare type GenerateServiceEvent<TServiceName, TEventType, TServiceMap extends ServiceMap> = TEventType extends any ? {
96
+ type: TEventType;
97
+ } & Prop<TServiceMap, TServiceName> : never;
98
+ declare type GenerateServiceEvents<TServiceMap extends ServiceMap, TInvokeSrcNameMap> = string extends keyof TServiceMap ? never : Cast<{
99
+ [K in keyof TInvokeSrcNameMap]: GenerateServiceEvent<K, TInvokeSrcNameMap[K], TServiceMap>;
100
+ }[keyof TInvokeSrcNameMap], EventObject>;
101
+ declare type MergeWithInternalEvents<TIndexedEvents, TInternalEvents> = TIndexedEvents & Pick<TInternalEvents, Exclude<keyof TInternalEvents, keyof TIndexedEvents>>;
102
+ declare type AllowAllEvents = {
103
+ eventsCausingActions: Record<string, string>;
104
+ eventsCausingDelays: Record<string, string>;
105
+ eventsCausingGuards: Record<string, string>;
106
+ eventsCausingServices: Record<string, string>;
107
+ };
108
+ export declare type ResolveTypegenMeta<TTypesMeta extends TypegenConstraint, TEvent extends EventObject, TAction extends BaseActionObject, TServiceMap extends ServiceMap> = TTypesMeta extends TypegenEnabled ? TTypesMeta & {
109
+ indexedActions: IndexByType<TAction>;
110
+ indexedEvents: MergeWithInternalEvents<IndexByType<(string extends TEvent['type'] ? never : TEvent) | GenerateServiceEvents<TServiceMap, Prop<TTypesMeta, 'invokeSrcNameMap'>>>, Prop<TTypesMeta, 'internalEvents'>>;
111
+ } : MarkAllImplementationsAsProvided<TypegenDisabled> & AllowAllEvents & {
112
+ indexedActions: IndexByType<TAction>;
113
+ indexedEvents: Record<string, TEvent> & {
114
+ __XSTATE_ALLOW_ANY_INVOKE_DATA_HACK__: {
115
+ data: any;
116
+ };
117
+ };
118
+ invokeSrcNameMap: Record<string, '__XSTATE_ALLOW_ANY_INVOKE_DATA_HACK__'>;
119
+ };
120
+ export {};
121
+ //# sourceMappingURL=typegenTypes.d.ts.map
package/es/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
  }
@@ -525,13 +567,20 @@ export interface HistoryStateNode<TContext> extends StateNode<TContext> {
525
567
  export interface StateMachine<TContext, TStateSchema extends StateSchema, TEvent extends EventObject, TTypestate extends Typestate<TContext> = {
526
568
  value: any;
527
569
  context: TContext;
528
- }, _TAction extends ActionObject<TContext, TEvent> = ActionObject<TContext, TEvent>> extends StateNode<TContext, TStateSchema, TEvent, TTypestate> {
570
+ }, TAction extends BaseActionObject = BaseActionObject, TServiceMap extends ServiceMap = ServiceMap, TResolvedTypesMeta = TypegenDisabled> extends StateNode<TContext, TStateSchema, TEvent, TTypestate, TServiceMap, TResolvedTypesMeta> {
529
571
  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;
572
+ states: StateNode<TContext, TStateSchema, TEvent, TTypestate, TServiceMap, TResolvedTypesMeta>['states'];
573
+ withConfig(options: InternalMachineOptions<TContext, TEvent, TResolvedTypesMeta, true>, context?: TContext | (() => TContext)): StateMachine<TContext, TStateSchema, TEvent, TTypestate, TAction, TServiceMap, AreAllImplementationsAssumedToBeProvided<TResolvedTypesMeta> extends false ? MarkAllImplementationsAsProvided<TResolvedTypesMeta> : TResolvedTypesMeta>;
574
+ withContext(context: TContext | (() => TContext)): StateMachine<TContext, TStateSchema, TEvent, TTypestate, TAction, TServiceMap, TResolvedTypesMeta>;
575
+ __TContext: TContext;
576
+ __TStateSchema: TStateSchema;
577
+ __TEvent: TEvent;
578
+ __TTypestate: TTypestate;
579
+ __TAction: TAction;
580
+ __TServiceMap: TServiceMap;
581
+ __TResolvedTypesMeta: TResolvedTypesMeta;
582
+ }
583
+ export declare type StateFrom<T extends StateMachine<any, any, any, any, any, any, any> | ((...args: any[]) => StateMachine<any, any, any, any, any, any, any>)> = T extends StateMachine<any, any, any, any, any, any, any> ? ReturnType<T['transition']> : T extends (...args: any[]) => StateMachine<any, any, any, any, any, any, any> ? ReturnType<ReturnType<T>['transition']> : never;
535
584
  export interface ActionMap<TContext, TEvent extends EventObject> {
536
585
  onEntry: Array<Action<TContext, TEvent>>;
537
586
  actions: Array<Action<TContext, TEvent>>;
@@ -550,13 +599,13 @@ export interface ActivityMap {
550
599
  }
551
600
  export interface StateTransition<TContext, TEvent extends EventObject> {
552
601
  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>>;
602
+ configuration: Array<StateNode<TContext, any, TEvent, any, any, any>>;
603
+ entrySet: Array<StateNode<TContext, any, TEvent, any, any, any>>;
604
+ exitSet: Array<StateNode<TContext, any, TEvent, any, any, any>>;
556
605
  /**
557
606
  * The source state that preceded the transition.
558
607
  */
559
- source: State<TContext, any, any, any> | undefined;
608
+ source: State<TContext, any, any, any, any> | undefined;
560
609
  actions: Array<ActionObject<TContext, TEvent>>;
561
610
  }
562
611
  export interface TransitionData<TContext, TEvent extends EventObject> {
@@ -777,7 +826,7 @@ export interface SCXMLEventMeta<TEvent extends EventObject> {
777
826
  _event: SCXML.Event<TEvent>;
778
827
  }
779
828
  export interface StateMeta<TContext, TEvent extends EventObject> {
780
- state: State<TContext, TEvent, any, any>;
829
+ state: State<TContext, TEvent, any, any, any>;
781
830
  _event: SCXML.Event<TEvent>;
782
831
  }
783
832
  export interface Typestate<TContext> {
@@ -796,7 +845,7 @@ export interface StateConfig<TContext, TEvent extends EventObject> {
796
845
  _event: SCXML.Event<TEvent>;
797
846
  _sessionid: string | null;
798
847
  historyValue?: HistoryValue | undefined;
799
- history?: State<TContext, TEvent>;
848
+ history?: State<TContext, TEvent, any, any, any>;
800
849
  actions?: Array<ActionObject<TContext, TEvent>>;
801
850
  /**
802
851
  * @deprecated
@@ -809,7 +858,7 @@ export interface StateConfig<TContext, TEvent extends EventObject> {
809
858
  children: Record<string, ActorRef<any>>;
810
859
  done?: boolean;
811
860
  tags?: Set<string>;
812
- machine?: StateMachine<TContext, any, TEvent, any>;
861
+ machine?: StateMachine<TContext, any, TEvent, any, any, any, any>;
813
862
  }
814
863
  export interface StateSchema<TC = any> {
815
864
  meta?: any;
@@ -822,9 +871,9 @@ export interface InterpreterOptions {
822
871
  /**
823
872
  * Whether state actions should be executed immediately upon transition. Defaults to `true`.
824
873
  */
825
- execute: boolean;
826
- clock: Clock;
827
- logger: (...args: any[]) => void;
874
+ execute?: boolean;
875
+ clock?: Clock;
876
+ logger?: (...args: any[]) => void;
828
877
  parent?: AnyInterpreter;
829
878
  /**
830
879
  * If `true`, defers processing of sent events until the service
@@ -833,7 +882,7 @@ export interface InterpreterOptions {
833
882
  *
834
883
  * Default: `true`
835
884
  */
836
- deferEvents: boolean;
885
+ deferEvents?: boolean;
837
886
  /**
838
887
  * The custom `id` for referencing this service.
839
888
  */
@@ -843,8 +892,7 @@ export interface InterpreterOptions {
843
892
  *
844
893
  * Default: `false`
845
894
  */
846
- devTools: boolean | object;
847
- [option: string]: any;
895
+ devTools?: boolean | object;
848
896
  }
849
897
  export declare namespace SCXML {
850
898
  interface Event<TEvent extends EventObject> {
@@ -941,15 +989,17 @@ export interface ActorRef<TEvent extends EventObject, TEmitted = any> extends Su
941
989
  * @deprecated Use `ActorRef` instead.
942
990
  */
943
991
  export declare type SpawnedActorRef<TEvent extends EventObject, TEmitted = any> = ActorRef<TEvent, TEmitted>;
944
- export declare type ActorRefWithDeprecatedState<TContext, TEvent extends EventObject, TTypestate extends Typestate<TContext>> = ActorRef<TEvent, State<TContext, TEvent, any, TTypestate>> & {
992
+ export declare type ActorRefWithDeprecatedState<TContext, TEvent extends EventObject, TTypestate extends Typestate<TContext>, TResolvedTypesMeta = TypegenDisabled> = ActorRef<TEvent, State<TContext, TEvent, any, TTypestate, TResolvedTypesMeta>> & {
945
993
  /**
946
994
  * @deprecated Use `.getSnapshot()` instead.
947
995
  */
948
- state: State<TContext, TEvent, any, TTypestate>;
996
+ state: State<TContext, TEvent, any, TTypestate, TResolvedTypesMeta>;
949
997
  };
950
- 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;
951
- export declare type AnyInterpreter = Interpreter<any, any, any, any>;
952
- 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;
998
+ export declare type ActorRefFrom<T> = T extends StateMachine<infer TContext, any, infer TEvent, infer TTypestate, any, any, any> ? ActorRefWithDeprecatedState<TContext, TEvent, TTypestate> : T extends (...args: any[]) => StateMachine<infer TContext, any, infer TEvent, infer TTypestate, any, any, infer TResolvedTypesMeta> ? ActorRefWithDeprecatedState<TContext, TEvent, TTypestate, TResolvedTypesMeta> : T extends Promise<infer U> ? ActorRef<never, U> : T extends Behavior<infer TEvent1, infer TEmitted> ? ActorRef<TEvent1, TEmitted> : T extends (...args: any[]) => Behavior<infer TEvent1, infer TEmitted> ? ActorRef<TEvent1, TEmitted> : never;
999
+ export declare type AnyInterpreter = Interpreter<any, any, any, any, any>;
1000
+ export declare type InterpreterFrom<T extends StateMachine<any, any, any, any, any, any, any> | ((...args: any[]) => StateMachine<any, any, any, any, any, any, any>)> = T extends StateMachine<infer TContext, infer TStateSchema, infer TEvent, infer TTypestate, any, any, infer TResolvedTypesMeta> ? Interpreter<TContext, TStateSchema, TEvent, TTypestate, TResolvedTypesMeta> : T extends (...args: any[]) => StateMachine<infer TContext, infer TStateSchema, infer TEvent, infer TTypestate, any, any, infer TResolvedTypesMeta> ? Interpreter<TContext, TStateSchema, TEvent, TTypestate, TResolvedTypesMeta> : never;
1001
+ export declare type MachineOptionsFrom<T extends StateMachine<any, any, any, any, any, any, any> | ((...args: any[]) => StateMachine<any, any, any, any, any, any, any>), TRequireMissingImplementations extends boolean = false> = ReturnTypeOrValue<T> extends StateMachine<infer TContext, any, infer TEvent, any, any, any, infer TResolvedTypesMeta> ? InternalMachineOptions<TContext, TEvent, TResolvedTypesMeta, TRequireMissingImplementations> : never;
1002
+ export declare type __ResolvedTypesMetaFrom<T> = T extends StateMachine<any, any, any, any, any, any, infer TResolvedTypesMeta> ? TResolvedTypesMeta : never;
953
1003
  export interface ActorContext<TEvent extends EventObject, TEmitted> {
954
1004
  parent?: ActorRef<any, any>;
955
1005
  self: ActorRef<TEvent, TEmitted>;
package/es/utils.d.ts CHANGED
@@ -67,7 +67,7 @@ export declare function toTransitionConfigArray<TContext, TEvent extends EventOb
67
67
  }>;
68
68
  export declare function normalizeTarget<TContext, TEvent extends EventObject>(target: SingleOrArray<string | StateNode<TContext, any, TEvent>> | undefined): Array<string | StateNode<TContext, any, TEvent>> | undefined;
69
69
  export declare function reportUnhandledExceptionOnInvocation(originalError: any, currentError: any, id: string): void;
70
- 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;
71
71
  export declare function toInvokeSource(src: string | InvokeSourceDefinition): InvokeSourceDefinition;
72
72
  export declare function toObserver<T>(nextHandler: Observer<T> | ((value: T) => void), errorHandler?: (error: any) => void, completionHandler?: () => void): Observer<T>;
73
73
  export declare function createInvokeId(stateNodeId: string, index: number): string;
package/es/utils.js CHANGED
@@ -552,7 +552,7 @@ function evaluateGuard(machine, guard, context, _event, state) {
552
552
  return ((guards === null || guards === void 0 ? void 0 : guards[guard.name]) || guard.predicate)(context, _event.data, guardMeta);
553
553
  }
554
554
 
555
- var condFn = guards[guard.type];
555
+ var condFn = guards === null || guards === void 0 ? void 0 : guards[guard.type];
556
556
 
557
557
  if (!condFn) {
558
558
  throw new Error("Guard '".concat(guard.type, "' is not implemented on machine '").concat(machine.id, "'."));
package/lib/Actor.d.ts CHANGED
@@ -1,5 +1,4 @@
1
- import { EventObject, Subscribable, InvokeDefinition, AnyEventObject, StateMachine, Spawnable, SCXML } from './types';
2
- import { ActorRef, BaseActorRef } from '.';
1
+ import { EventObject, Subscribable, InvokeDefinition, AnyEventObject, StateMachine, Spawnable, SCXML, ActorRef, BaseActorRef } from './types';
3
2
  export interface Actor<TContext = any, TEvent extends EventObject = AnyEventObject> extends Subscribable<TContext> {
4
3
  id: string;
5
4
  send: (event: TEvent) => any;
package/lib/Machine.d.ts CHANGED
@@ -1,12 +1,13 @@
1
1
  import { Model } from './model.types';
2
- import { AnyEventObject, DefaultContext, EventObject, MachineConfig, MachineOptions, StateMachine, StateSchema, Typestate } from './types';
2
+ import { AnyEventObject, BaseActionObject, DefaultContext, EventObject, MachineConfig, InternalMachineOptions, StateMachine, StateSchema, Typestate, ServiceMap } from './types';
3
+ import { TypegenConstraint, TypegenDisabled, ResolveTypegenMeta } from './typegenTypes';
3
4
  /**
4
5
  * @deprecated Use `createMachine(...)` instead.
5
6
  */
6
- export declare function Machine<TContext = any, TEvent extends EventObject = AnyEventObject>(config: MachineConfig<TContext, any, TEvent>, options?: Partial<MachineOptions<TContext, TEvent>>, initialContext?: TContext): StateMachine<TContext, any, TEvent>;
7
- export declare function Machine<TContext = DefaultContext, TStateSchema extends StateSchema = any, TEvent extends EventObject = AnyEventObject>(config: MachineConfig<TContext, TStateSchema, TEvent>, options?: Partial<MachineOptions<TContext, TEvent>>, initialContext?: TContext): StateMachine<TContext, TStateSchema, TEvent>;
7
+ export declare function Machine<TContext = any, TEvent extends EventObject = AnyEventObject>(config: MachineConfig<TContext, any, TEvent>, options?: InternalMachineOptions<TContext, TEvent, ResolveTypegenMeta<TypegenDisabled, TEvent, BaseActionObject, ServiceMap>>, initialContext?: TContext): StateMachine<TContext, any, TEvent, any, BaseActionObject, ServiceMap, ResolveTypegenMeta<TypegenDisabled, TEvent, BaseActionObject, ServiceMap>>;
8
+ export declare function Machine<TContext = DefaultContext, TStateSchema extends StateSchema = any, TEvent extends EventObject = AnyEventObject>(config: MachineConfig<TContext, TStateSchema, TEvent>, options?: InternalMachineOptions<TContext, TEvent, ResolveTypegenMeta<TypegenDisabled, TEvent, BaseActionObject, ServiceMap>>, initialContext?: TContext): StateMachine<TContext, TStateSchema, TEvent, any, BaseActionObject, ServiceMap, ResolveTypegenMeta<TypegenDisabled, TEvent, BaseActionObject, ServiceMap>>;
8
9
  export declare function createMachine<TContext, TEvent extends EventObject = AnyEventObject, TTypestate extends Typestate<TContext> = {
9
10
  value: any;
10
11
  context: TContext;
11
- }>(config: TContext extends Model<any, any, any, any> ? 'Model type no longer supported as generic type. Please use `model.createMachine(...)` instead.' : MachineConfig<TContext, any, TEvent>, options?: Partial<MachineOptions<TContext, TEvent>>): StateMachine<TContext, any, TEvent, TTypestate>;
12
+ }, TServiceMap extends ServiceMap = ServiceMap, TTypesMeta extends TypegenConstraint = TypegenDisabled>(config: TContext extends Model<any, any, any, any> ? 'Model type no longer supported as generic type. Please use `model.createMachine(...)` instead.' : MachineConfig<TContext, any, TEvent, BaseActionObject, TServiceMap, TTypesMeta>, options?: InternalMachineOptions<TContext, TEvent, ResolveTypegenMeta<TTypesMeta, TEvent, BaseActionObject, TServiceMap>>): StateMachine<TContext, any, TEvent, any, BaseActionObject, TServiceMap, ResolveTypegenMeta<TTypesMeta, TEvent, BaseActionObject, TServiceMap>>;
12
13
  //# sourceMappingURL=Machine.d.ts.map
package/lib/State.d.ts CHANGED
@@ -1,19 +1,21 @@
1
1
  import { StateValue, ActivityMap, EventObject, HistoryValue, ActionObject, EventType, StateConfig, SCXML, StateSchema, TransitionDefinition, Typestate, ActorRef, StateMachine, SimpleEventsOf } from './types';
2
2
  import { StateNode } from './StateNode';
3
+ import { TypegenDisabled, TypegenEnabled } from './typegenTypes';
4
+ import { BaseActionObject, Prop } from './types';
3
5
  export declare function stateValuesEqual(a: StateValue | undefined, b: StateValue | undefined): boolean;
4
6
  export declare function isState<TContext, TEvent extends EventObject, TStateSchema extends StateSchema<TContext> = any, TTypestate extends Typestate<TContext> = {
5
7
  value: any;
6
8
  context: TContext;
7
- }>(state: object | string): state is State<TContext, TEvent, TStateSchema, TTypestate>;
8
- export declare function bindActionToState<TC, TE extends EventObject>(action: ActionObject<TC, TE>, state: State<TC, TE, any, any>): ActionObject<TC, TE>;
9
+ }, TResolvedTypesMeta = TypegenDisabled>(state: object | string): state is State<TContext, TEvent, TStateSchema, TTypestate, TResolvedTypesMeta>;
10
+ export declare function bindActionToState<TC, TE extends EventObject>(action: ActionObject<TC, TE>, state: State<TC, TE, any, any, any>): ActionObject<TC, TE>;
9
11
  export declare class State<TContext, TEvent extends EventObject = EventObject, TStateSchema extends StateSchema<TContext> = any, TTypestate extends Typestate<TContext> = {
10
12
  value: any;
11
13
  context: TContext;
12
- }> {
14
+ }, TResolvedTypesMeta = TypegenDisabled> {
13
15
  value: StateValue;
14
16
  context: TContext;
15
17
  historyValue?: HistoryValue | undefined;
16
- history?: State<TContext, TEvent, TStateSchema, TTypestate>;
18
+ history?: State<TContext, TEvent, TStateSchema, TTypestate, TResolvedTypesMeta>;
17
19
  actions: Array<ActionObject<TContext, TEvent>>;
18
20
  activities: ActivityMap;
19
21
  meta: any;
@@ -37,7 +39,7 @@ export declare class State<TContext, TEvent extends EventObject = EventObject, T
37
39
  /**
38
40
  * The enabled state nodes representative of the state value.
39
41
  */
40
- configuration: Array<StateNode<TContext, any, TEvent, any>>;
42
+ configuration: Array<StateNode<TContext, any, TEvent, any, any>>;
41
43
  /**
42
44
  * The next events that will cause a transition from the current state.
43
45
  */
@@ -51,18 +53,18 @@ export declare class State<TContext, TEvent extends EventObject = EventObject, T
51
53
  */
52
54
  children: Record<string, ActorRef<any>>;
53
55
  tags: Set<string>;
54
- machine: StateMachine<TContext, any, TEvent, TTypestate> | undefined;
56
+ machine: StateMachine<TContext, any, TEvent, TTypestate, BaseActionObject, any, TResolvedTypesMeta> | undefined;
55
57
  /**
56
58
  * Creates a new State instance for the given `stateValue` and `context`.
57
59
  * @param stateValue
58
60
  * @param context
59
61
  */
60
- static from<TC, TE extends EventObject = EventObject>(stateValue: State<TC, TE, any, any> | StateValue, context?: TC | undefined): State<TC, TE, any, any>;
62
+ static from<TC, TE extends EventObject = EventObject>(stateValue: State<TC, TE, any, any, any> | StateValue, context?: TC | undefined): State<TC, TE, any, any, any>;
61
63
  /**
62
64
  * Creates a new State instance for the given `config`.
63
65
  * @param config The state config
64
66
  */
65
- static create<TC, TE extends EventObject = EventObject>(config: StateConfig<TC, TE>): State<TC, TE>;
67
+ static create<TC, TE extends EventObject = EventObject>(config: StateConfig<TC, TE>): State<TC, TE, any, any, any>;
66
68
  /**
67
69
  * Creates a new `State` instance for the given `stateValue` and `context` with no actions (side-effects).
68
70
  * @param stateValue
@@ -95,17 +97,17 @@ export declare class State<TContext, TEvent extends EventObject = EventObject, T
95
97
  * Whether the current state value is a subset of the given parent state value.
96
98
  * @param parentStateValue
97
99
  */
98
- matches<TSV extends TTypestate['value']>(parentStateValue: TSV): this is State<(TTypestate extends any ? {
100
+ matches<TSV extends TResolvedTypesMeta extends TypegenEnabled ? Prop<TResolvedTypesMeta, 'matchesStates'> : TTypestate['value']>(parentStateValue: TSV): this is State<(TTypestate extends any ? {
99
101
  value: TSV;
100
102
  context: any;
101
- } extends TTypestate ? TTypestate : never : never)['context'], TEvent, TStateSchema, TTypestate> & {
103
+ } extends TTypestate ? TTypestate : never : never)['context'], TEvent, TStateSchema, TTypestate, TResolvedTypesMeta> & {
102
104
  value: TSV;
103
105
  };
104
106
  /**
105
107
  * Whether the current state configuration has a state node with the specified `tag`.
106
108
  * @param tag
107
109
  */
108
- hasTag(tag: string): boolean;
110
+ hasTag(tag: TResolvedTypesMeta extends TypegenEnabled ? Prop<TResolvedTypesMeta, 'tags'> : string): boolean;
109
111
  /**
110
112
  * Determines whether sending the `event` will cause a non-forbidden transition
111
113
  * to be selected, even if the transitions have no actions nor