xstate 5.0.0-alpha.1 → 5.0.0-alpha.3

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 (67) hide show
  1. package/README.md +3 -2
  2. package/actions/dist/xstate-actions.cjs.dev.js +3 -2
  3. package/actions/dist/xstate-actions.cjs.prod.js +2 -1
  4. package/actions/dist/xstate-actions.esm.js +2 -2
  5. package/actions/dist/xstate-actions.umd.min.js +1 -1
  6. package/actions/dist/xstate-actions.umd.min.js.map +1 -1
  7. package/actions/dynamicAction.ts +11 -3
  8. package/actors/dist/xstate-actors.cjs.d.ts +1 -1
  9. package/actors/dist/xstate-actors.cjs.dev.js +4 -3
  10. package/actors/dist/xstate-actors.cjs.prod.js +3 -2
  11. package/actors/dist/xstate-actors.esm.js +2 -2
  12. package/actors/dist/xstate-actors.umd.min.js +1 -1
  13. package/actors/dist/xstate-actors.umd.min.js.map +1 -1
  14. package/dev/dist/xstate-dev.cjs.dev.js +1 -1
  15. package/dev/dist/xstate-dev.cjs.prod.js +0 -11
  16. package/dev/dist/xstate-dev.esm.js +1 -1
  17. package/dev/dist/xstate-dev.umd.min.js.map +1 -1
  18. package/dist/{actions-7ea9280f.cjs.prod.js → actions-3910d35f.cjs.prod.js} +1127 -1491
  19. package/dist/{actions-b08d0da8.cjs.dev.js → actions-3f0ba11b.cjs.dev.js} +1131 -1501
  20. package/dist/{actions-b673cb13.esm.js → actions-4fe4ada8.esm.js} +1134 -1500
  21. package/dist/declarations/actions/dynamicAction.d.ts +3 -3
  22. package/dist/declarations/src/Machine.d.ts +4 -4
  23. package/dist/declarations/src/SimulatedClock.d.ts +1 -1
  24. package/dist/declarations/src/State.d.ts +6 -6
  25. package/dist/declarations/src/StateMachine.d.ts +12 -22
  26. package/dist/declarations/src/StateNode.d.ts +3 -3
  27. package/dist/declarations/src/actionTypes.d.ts +1 -1
  28. package/dist/declarations/src/actions/assign.d.ts +2 -2
  29. package/dist/declarations/src/actions/cancel.d.ts +3 -3
  30. package/dist/declarations/src/actions/choose.d.ts +3 -3
  31. package/dist/declarations/src/actions/invoke.d.ts +3 -3
  32. package/dist/declarations/src/actions/log.d.ts +3 -3
  33. package/dist/declarations/src/actions/pure.d.ts +5 -2
  34. package/dist/declarations/src/actions/raise.d.ts +2 -3
  35. package/dist/declarations/src/actions/send.d.ts +11 -9
  36. package/dist/declarations/src/actions/stop.d.ts +2 -2
  37. package/dist/declarations/src/actions.d.ts +14 -10
  38. package/dist/declarations/src/actors/callback.d.ts +8 -0
  39. package/dist/declarations/src/actors/index.d.ts +27 -0
  40. package/dist/declarations/src/actors/observable.d.ts +23 -0
  41. package/dist/declarations/src/actors/promise.d.ts +12 -0
  42. package/dist/declarations/src/actors/transition.d.ts +13 -0
  43. package/dist/declarations/src/dev/index.d.ts +2 -2
  44. package/dist/declarations/src/guards.d.ts +2 -2
  45. package/dist/declarations/src/index.d.ts +22 -22
  46. package/dist/declarations/src/interpreter.d.ts +26 -30
  47. package/dist/declarations/src/spawn.d.ts +2 -2
  48. package/dist/declarations/src/stateUtils.d.ts +11 -11
  49. package/dist/declarations/src/system.d.ts +2 -0
  50. package/dist/declarations/src/typegenTypes.d.ts +9 -9
  51. package/dist/declarations/src/types.d.ts +300 -267
  52. package/dist/declarations/src/utils.d.ts +14 -10
  53. package/dist/{index-20b364c4.esm.js → index-50bd0aff.esm.js} +0 -12
  54. package/dist/{index-2a564d03.cjs.dev.js → index-ebaab3c9.cjs.dev.js} +0 -12
  55. package/dist/xstate.cjs.dev.js +142 -217
  56. package/dist/xstate.cjs.prod.js +141 -216
  57. package/dist/xstate.esm.js +140 -216
  58. package/dist/xstate.umd.min.js +1 -1
  59. package/dist/xstate.umd.min.js.map +1 -1
  60. package/guards/dist/xstate-guards.cjs.dev.js +2 -2
  61. package/guards/dist/xstate-guards.cjs.prod.js +1 -1
  62. package/guards/dist/xstate-guards.esm.js +2 -2
  63. package/guards/dist/xstate-guards.umd.min.js +1 -1
  64. package/guards/dist/xstate-guards.umd.min.js.map +1 -1
  65. package/package.json +8 -9
  66. package/dist/declarations/src/actors.d.ts +0 -37
  67. package/dist/declarations/src/registry.d.ts +0 -8
@@ -1,33 +1,33 @@
1
- import type { StateNode } from './StateNode';
2
- import type { State } from './State';
3
- import type { ActorStatus, Clock, Interpreter } from './interpreter';
4
- import type { StateMachine } from './StateMachine';
5
- import type { LifecycleSignal } from './actors';
6
- import { TypegenDisabled, ResolveTypegenMeta, TypegenConstraint, MarkAllImplementationsAsProvided, AreAllImplementationsAssumedToBeProvided } from './typegenTypes';
7
- export declare type AnyFunction = (...args: any[]) => any;
8
- declare type ReturnTypeOrValue<T> = T extends AnyFunction ? ReturnType<T> : T;
9
- export declare type IsNever<T> = [T] extends [never] ? true : false;
10
- export declare type Compute<A extends any> = {
1
+ import type { StateNode } from './StateNode.js';
2
+ import type { State } from './State.js';
3
+ import type { ActorStatus, Clock, Interpreter } from './interpreter.js';
4
+ import type { StateMachine } from './StateMachine.js';
5
+ import type { LifecycleSignal } from './actors/index.js';
6
+ import { TypegenDisabled, ResolveTypegenMeta, TypegenConstraint, MarkAllImplementationsAsProvided, AreAllImplementationsAssumedToBeProvided } from './typegenTypes.js';
7
+ export type AnyFunction = (...args: any[]) => any;
8
+ type ReturnTypeOrValue<T> = T extends AnyFunction ? ReturnType<T> : T;
9
+ export type IsNever<T> = [T] extends [never] ? true : false;
10
+ export type Compute<A extends any> = {
11
11
  [K in keyof A]: A[K];
12
12
  } & unknown;
13
- export declare type Prop<T, K> = K extends keyof T ? T[K] : never;
14
- export declare type Values<T> = T[keyof T];
15
- export declare type Merge<M, N> = Omit<M, keyof N> & N;
16
- export declare type IndexByType<T extends {
13
+ export type Prop<T, K> = K extends keyof T ? T[K] : never;
14
+ export type Values<T> = T[keyof T];
15
+ export type Merge<M, N> = Omit<M, keyof N> & N;
16
+ export type IndexByType<T extends {
17
17
  type: string;
18
18
  }> = {
19
19
  [K in T['type']]: T extends any ? (K extends T['type'] ? T : never) : never;
20
20
  };
21
- 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;
22
- export declare type IsAny<T> = Equals<T, any>;
23
- export declare type Cast<A, B> = A extends B ? A : B;
24
- export declare type NoInfer<T> = [T][T extends any ? 0 : any];
25
- export declare type LowInfer<T> = T & {};
26
- export declare type EventType = string;
27
- export declare type ActionType = string;
28
- export declare type MetaObject = Record<string, any>;
29
- export declare type Lazy<T> = () => T;
30
- export declare type MaybeLazy<T> = T | Lazy<T>;
21
+ export type Equals<A1 extends any, A2 extends any> = (<A>() => A extends A2 ? true : false) extends <A>() => A extends A1 ? true : false ? true : false;
22
+ export type IsAny<T> = Equals<T, any>;
23
+ export type Cast<A, B> = A extends B ? A : B;
24
+ export type NoInfer<T> = [T][T extends any ? 0 : any];
25
+ export type LowInfer<T> = T & {};
26
+ export type EventType = string;
27
+ export type ActionType = string;
28
+ export type MetaObject = Record<string, any>;
29
+ export type Lazy<T> = () => T;
30
+ export type MaybeLazy<T> = T | Lazy<T>;
31
31
  /**
32
32
  * The full definition of an event, with a string `type`.
33
33
  */
@@ -40,57 +40,71 @@ export interface EventObject {
40
40
  export interface AnyEventObject extends EventObject {
41
41
  [key: string]: any;
42
42
  }
43
- export interface BaseActionObject {
43
+ export interface ParameterizedObject {
44
44
  type: string;
45
45
  params?: Record<string, any>;
46
- execute?: (actorCtx: ActorContext<any, any>) => void;
47
46
  }
48
- export interface BuiltInActionObject {
47
+ export interface BaseActionObject extends ParameterizedObject {
48
+ execute?: (actorCtx: AnyActorContext) => void;
49
+ }
50
+ export interface BuiltInActionObject extends ParameterizedObject {
49
51
  type: `xstate.${string}`;
50
52
  params: Record<string, any>;
51
53
  }
52
- export interface BaseDynamicActionObject<TContext extends MachineContext, TEvent extends EventObject, TResolvedAction extends BaseActionObject, TDynamicParams extends Record<string, any>> {
54
+ export interface UnifiedArg<TContext extends MachineContext, TEvent extends EventObject> {
55
+ context: TContext;
56
+ event: TEvent;
57
+ }
58
+ export interface BaseDynamicActionObject<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject, TResolvedAction extends BaseActionObject, TDynamicParams extends Record<string, any>> {
53
59
  type: `xstate.${string}`;
54
60
  params: TDynamicParams;
55
- resolve: (_event: SCXML.Event<TEvent>, extra: {
61
+ resolve: (_event: SCXML.Event<TExpressionEvent>, extra: {
56
62
  state: State<TContext, TEvent>;
57
63
  /**
58
64
  * The original action object
59
65
  */
60
- action: BaseActionObject;
61
- actorContext: ActorContext<any, any> | undefined;
66
+ action: ParameterizedObject;
67
+ actorContext: AnyActorContext | undefined;
62
68
  }) => [AnyState, TResolvedAction];
69
+ /** @deprecated an internal signature that doesn't exist at runtime. Its existence helps TS to choose a better code path in the inference algorithm */
70
+ (args: {
71
+ context: TContext;
72
+ event: TExpressionEvent;
73
+ } & ActionMeta<TContext, TEvent, ParameterizedObject>): void;
63
74
  }
64
- export declare type MachineContext = Record<string, any>;
65
- export interface ActionMeta<TContext extends MachineContext, TEvent extends EventObject, TAction extends BaseActionObject = BaseActionObject> extends StateMeta<TContext, TEvent> {
75
+ export type MachineContext = Record<string, any>;
76
+ export interface ActionMeta<TContext extends MachineContext, TEvent extends EventObject, TAction extends ParameterizedObject = ParameterizedObject> extends StateMeta<TContext, TEvent> {
66
77
  action: TAction;
67
78
  _event: SCXML.Event<TEvent>;
68
79
  }
69
- export declare type Spawner = <T extends Behavior<any, any> | string>(// TODO: read string from machine behavior keys
70
- behavior: T, name?: string) => T extends Behavior<infer TActorEvent, infer TActorEmitted> ? ActorRef<TActorEvent, TActorEmitted> : ActorRef<any, any>;
71
- export interface AssignMeta<TContext extends MachineContext, TEvent extends EventObject> {
72
- state: State<TContext, TEvent>;
80
+ export type Spawner = <T extends ActorBehavior<any, any> | string>(// TODO: read string from machine behavior keys
81
+ behavior: T, options?: Partial<{
82
+ id: string;
83
+ input: any;
84
+ }>) => T extends ActorBehavior<infer TActorEvent, infer TActorEmitted> ? ActorRef<TActorEvent, TActorEmitted> : ActorRef<any, any>;
85
+ export interface AssignMeta<TContext extends MachineContext, TExpressionEvent extends EventObject, _TEvent extends EventObject> extends StateMeta<TContext, TExpressionEvent> {
73
86
  action: BaseActionObject;
74
- _event: SCXML.Event<TEvent>;
87
+ _event: SCXML.Event<TExpressionEvent>;
75
88
  spawn: Spawner;
76
89
  }
77
- export declare type ActionFunction<TContext extends MachineContext, TEvent extends EventObject, TAction extends BaseActionObject = BaseActionObject> = {
78
- bivarianceHack(context: TContext, event: TEvent, meta: ActionMeta<TContext, TEvent, TAction>): void;
79
- }['bivarianceHack'];
80
- export interface ChooseCondition<TContext extends MachineContext, TEvent extends EventObject> {
90
+ export type ActionFunction<TContext extends MachineContext, TExpressionEvent extends EventObject, TAction extends ParameterizedObject = ParameterizedObject, TEvent extends EventObject = TExpressionEvent> = (args: {
91
+ context: TContext;
92
+ event: TExpressionEvent;
93
+ } & ActionMeta<TContext, TEvent, TAction>) => void;
94
+ export interface ChooseCondition<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject = TExpressionEvent> {
81
95
  guard?: GuardConfig<TContext, TEvent>;
82
- actions: Actions<TContext, TEvent>;
96
+ actions: Actions<TContext, TExpressionEvent, TEvent>;
83
97
  }
84
- export declare type Action<TContext extends MachineContext, TEvent extends EventObject> = ActionType | BaseActionObject | ActionFunction<TContext, TEvent> | BaseDynamicActionObject<TContext, TEvent, any, any>;
98
+ export type Action<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject = TExpressionEvent> = ActionType | ParameterizedObject | ActionFunction<TContext, TExpressionEvent, ParameterizedObject, TEvent> | BaseDynamicActionObject<TContext, TExpressionEvent, TEvent, any, any>;
85
99
  /**
86
100
  * Extracts action objects that have no extra properties.
87
101
  */
88
- declare type SimpleActionsFrom<T extends BaseActionObject> = BaseActionObject extends T ? T : ExtractWithSimpleSupport<T>;
89
- export declare type BaseAction<TContext extends MachineContext, TEvent extends EventObject, TAction extends BaseActionObject> = BaseDynamicActionObject<TContext, TEvent, any, // TODO: at the very least this should include TAction, but probably at a covariant position or something, we really need to rethink how action objects are typed
90
- any> | TAction | SimpleActionsFrom<TAction>['type'] | ActionFunction<TContext, TEvent>;
91
- export declare type BaseActions<TContext extends MachineContext, TEvent extends EventObject, TAction extends BaseActionObject> = SingleOrArray<BaseAction<TContext, TEvent, TAction>>;
92
- export declare type Actions<TContext extends MachineContext, TEvent extends EventObject> = SingleOrArray<Action<TContext, TEvent>>;
93
- export declare type StateKey = string | AnyState;
102
+ type SimpleActionsFrom<T extends ParameterizedObject> = ParameterizedObject extends T ? T : ExtractWithSimpleSupport<T>;
103
+ export type BaseAction<TContext extends MachineContext, TExpressionEvent extends EventObject, TAction extends ParameterizedObject, TEvent extends EventObject> = BaseDynamicActionObject<TContext, TExpressionEvent, TEvent, any, // TODO: at the very least this should include TAction, but probably at a covariant position or something, we really need to rethink how action objects are typed
104
+ any> | TAction | SimpleActionsFrom<TAction>['type'] | ActionFunction<TContext, TExpressionEvent, TAction, TEvent>;
105
+ export type BaseActions<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject, TAction extends ParameterizedObject> = SingleOrArray<BaseAction<TContext, TExpressionEvent, TAction, TEvent>>;
106
+ export type Actions<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject = TExpressionEvent> = SingleOrArray<Action<TContext, TEvent>>;
107
+ export type StateKey = string | AnyState;
94
108
  export interface StateValueMap {
95
109
  [key: string]: StateValue;
96
110
  }
@@ -100,26 +114,27 @@ export interface StateValueMap {
100
114
  * - For a child atomic state node, this is a string, e.g., `"pending"`.
101
115
  * - For complex state nodes, this is an object, e.g., `{ success: "someChildState" }`.
102
116
  */
103
- export declare type StateValue = string | StateValueMap;
104
- export declare type GuardPredicate<TContext extends MachineContext, TEvent extends EventObject> = (context: TContext, event: TEvent, meta: GuardMeta<TContext, TEvent>) => boolean;
105
- export interface DefaultGuardObject<TContext extends MachineContext, TEvent extends EventObject> {
106
- type: string;
107
- params?: {
108
- [key: string]: any;
109
- };
117
+ export type StateValue = string | StateValueMap;
118
+ export type GuardPredicate<TContext extends MachineContext, TEvent extends EventObject> = (args: {
119
+ context: TContext;
120
+ event: TEvent;
121
+ } & GuardMeta<TContext, TEvent>) => boolean;
122
+ export interface DefaultGuardObject<TContext extends MachineContext, TEvent extends EventObject> extends ParameterizedObject {
110
123
  /**
111
124
  * Nested guards
112
125
  */
113
126
  children?: Array<GuardObject<TContext, TEvent>>;
114
127
  predicate?: GuardPredicate<TContext, TEvent>;
115
128
  }
116
- export declare type GuardEvaluator<TContext extends MachineContext, TEvent extends EventObject> = (guard: GuardDefinition<TContext, TEvent>, context: TContext, _event: SCXML.Event<TEvent>, state: State<TContext, TEvent>, machine: StateMachine<TContext, TEvent>) => boolean;
117
- export interface GuardMeta<TContext extends MachineContext, TEvent extends EventObject> extends StateMeta<TContext, TEvent> {
129
+ export type GuardEvaluator<TContext extends MachineContext, TEvent extends EventObject> = (guard: GuardDefinition<TContext, TEvent>, context: TContext, _event: SCXML.Event<TEvent>, state: State<TContext, TEvent>) => boolean;
130
+ export interface GuardMeta<TContext extends MachineContext, TEvent extends EventObject> {
131
+ state: State<TContext, TEvent, any>;
132
+ _event: SCXML.Event<TEvent>;
118
133
  guard: GuardDefinition<TContext, TEvent>;
119
134
  evaluate: GuardEvaluator<TContext, TEvent>;
120
135
  }
121
- export declare type GuardConfig<TContext extends MachineContext, TEvent extends EventObject> = string | GuardPredicate<TContext, TEvent> | GuardObject<TContext, TEvent>;
122
- export declare type GuardObject<TContext extends MachineContext, TEvent extends EventObject> = BooleanGuardObject<TContext, TEvent> | DefaultGuardObject<TContext, TEvent>;
136
+ export type GuardConfig<TContext extends MachineContext, TEvent extends EventObject> = string | GuardPredicate<TContext, TEvent> | GuardObject<TContext, TEvent>;
137
+ export type GuardObject<TContext extends MachineContext, TEvent extends EventObject> = BooleanGuardObject<TContext, TEvent> | DefaultGuardObject<TContext, TEvent>;
123
138
  export interface GuardDefinition<TContext extends MachineContext, TEvent extends EventObject> {
124
139
  type: string;
125
140
  children?: Array<GuardDefinition<TContext, TEvent>>;
@@ -128,7 +143,7 @@ export interface GuardDefinition<TContext extends MachineContext, TEvent extends
128
143
  [key: string]: any;
129
144
  };
130
145
  }
131
- export interface BooleanGuardObject<TContext extends MachineContext, TEvent extends EventObject> {
146
+ export interface BooleanGuardObject<TContext extends MachineContext, TEvent extends EventObject> extends ParameterizedObject {
132
147
  type: 'xstate.boolean';
133
148
  children: Array<GuardConfig<TContext, TEvent>>;
134
149
  params: {
@@ -142,65 +157,55 @@ export interface BooleanGuardDefinition<TContext extends MachineContext, TEvent
142
157
  op: 'and' | 'or' | 'not';
143
158
  };
144
159
  }
145
- export declare type TransitionTarget<TContext extends MachineContext, TEvent extends EventObject> = SingleOrArray<string | StateNode<TContext, TEvent>>;
146
- export declare type TransitionTargets<TContext extends MachineContext> = Array<string | StateNode<TContext, any>>;
147
- export interface TransitionConfig<TContext extends MachineContext, TEvent extends EventObject, TAction extends BaseActionObject = BaseActionObject> {
148
- guard?: GuardConfig<TContext, TEvent>;
149
- actions?: BaseActions<TContext, TEvent, TAction>;
150
- internal?: boolean;
151
- target?: TransitionTarget<TContext, TEvent> | undefined;
160
+ export type TransitionTarget = SingleOrArray<string>;
161
+ export interface TransitionConfig<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject = TExpressionEvent, TAction extends ParameterizedObject = ParameterizedObject> {
162
+ guard?: GuardConfig<TContext, TExpressionEvent>;
163
+ actions?: BaseActions<TContext, TExpressionEvent, TEvent, TAction>;
164
+ external?: boolean;
165
+ target?: TransitionTarget | undefined;
152
166
  meta?: Record<string, any>;
153
167
  description?: string;
154
168
  }
155
169
  export interface TargetTransitionConfig<TContext extends MachineContext, TEvent extends EventObject> extends TransitionConfig<TContext, TEvent> {
156
- target: TransitionTarget<TContext, TEvent>;
170
+ target: TransitionTarget;
157
171
  }
158
- export declare type ConditionalTransitionConfig<TContext extends MachineContext, TEvent extends EventObject = EventObject> = Array<TransitionConfig<TContext, TEvent>>;
172
+ export type ConditionalTransitionConfig<TContext extends MachineContext, TEvent extends EventObject = EventObject> = Array<TransitionConfig<TContext, TEvent>>;
159
173
  export interface InitialTransitionConfig<TContext extends MachineContext, TEvent extends EventObject> extends TransitionConfig<TContext, TEvent> {
160
174
  guard?: never;
161
- target: TransitionTarget<TContext, TEvent>;
175
+ target: TransitionTarget;
162
176
  }
163
- export declare type Transition<TContext extends MachineContext, TEvent extends EventObject = EventObject> = string | TransitionConfig<TContext, TEvent> | ConditionalTransitionConfig<TContext, TEvent>;
164
- declare type ExtractWithSimpleSupport<T extends {
177
+ export type Transition<TContext extends MachineContext, TEvent extends EventObject = EventObject> = string | TransitionConfig<TContext, TEvent> | ConditionalTransitionConfig<TContext, TEvent>;
178
+ type ExtractWithSimpleSupport<T extends {
165
179
  type: string;
166
180
  }> = T extends any ? {
167
181
  type: T['type'];
168
182
  } extends T ? T : never : never;
169
- export declare type Receiver<TEvent extends EventObject> = (listener: {
183
+ export type Receiver<TEvent extends EventObject> = (listener: {
170
184
  bivarianceHack(event: TEvent): void;
171
185
  }['bivarianceHack']) => void;
172
- export declare type InvokeCallback<TEvent extends EventObject = AnyEventObject, TSentEvent extends EventObject = AnyEventObject> = (callback: (event: TSentEvent) => void, onReceive: Receiver<TEvent>) => (() => void) | Promise<any> | void;
173
- export declare type BehaviorCreator<TContext extends MachineContext, TEvent extends EventObject, TSnapshot = any> = (context: TContext, event: TEvent, meta: {
186
+ export type InvokeCallback<TEvent extends EventObject = AnyEventObject, TSentEvent extends EventObject = AnyEventObject> = (sendBack: (event: TSentEvent) => void, onReceive: Receiver<TEvent>, { input }: {
187
+ input: any;
188
+ }) => (() => void) | Promise<any> | void;
189
+ export type ActorBehaviorCreator<TContext extends MachineContext, TEvent extends EventObject, TActorBehavior extends AnyActorBehavior = AnyActorBehavior> = (context: TContext, event: TEvent, meta: {
174
190
  id: string;
175
191
  data?: any;
176
- src: InvokeSourceDefinition;
192
+ src: string;
177
193
  _event: SCXML.Event<TEvent>;
178
194
  meta: MetaObject | undefined;
179
- }) => Behavior<any, TSnapshot>;
195
+ input: any;
196
+ }) => TActorBehavior;
180
197
  export interface InvokeMeta {
181
- data: any;
182
- src: InvokeSourceDefinition;
198
+ src: string;
183
199
  meta: MetaObject | undefined;
184
200
  }
185
201
  export interface InvokeDefinition<TContext extends MachineContext, TEvent extends EventObject> {
186
202
  id: string;
203
+ systemId: string | undefined;
187
204
  /**
188
205
  * The source of the actor's behavior to be invoked
189
206
  */
190
- src: InvokeSourceDefinition;
191
- /**
192
- * If `true`, events sent to the parent service will be forwarded to the invoked service.
193
- *
194
- * Default: `false`
195
- */
196
- autoForward?: boolean;
197
- /**
198
- * Data from the parent machine's context to set as the (partial or full) context
199
- * for the invoked child machine.
200
- *
201
- * Data should be mapped to match the child machine's context shape.
202
- */
203
- data?: Mapper<TContext, TEvent, any> | PropertyMapper<TContext, TEvent, any>;
207
+ src: string;
208
+ input?: Mapper<TContext, TEvent, any> | any;
204
209
  /**
205
210
  * The transition to take upon the invoked child machine reaching its final top-level state.
206
211
  */
@@ -220,73 +225,58 @@ export interface Delay {
220
225
  */
221
226
  delay: number;
222
227
  }
223
- export declare type DelayedTransitions<TContext extends MachineContext, TEvent extends EventObject> = Record<string | number, string | SingleOrArray<TransitionConfig<TContext, TEvent>>> | Array<TransitionConfig<TContext, TEvent> & {
228
+ export type DelayedTransitions<TContext extends MachineContext, TEvent extends EventObject> = Record<string | number, string | SingleOrArray<TransitionConfig<TContext, TEvent>>> | Array<TransitionConfig<TContext, TEvent> & {
224
229
  delay: number | string | Expr<TContext, TEvent, number>;
225
230
  }>;
226
- export declare type StateTypes = 'atomic' | 'compound' | 'parallel' | 'final' | 'history' | string;
227
- export declare type SingleOrArray<T> = T[] | T;
228
- export declare type StateNodesConfig<TContext extends MachineContext, TEvent extends EventObject> = {
231
+ export type StateTypes = 'atomic' | 'compound' | 'parallel' | 'final' | 'history' | string;
232
+ export type SingleOrArray<T> = T[] | T;
233
+ export type StateNodesConfig<TContext extends MachineContext, TEvent extends EventObject> = {
229
234
  [K in string]: StateNode<TContext, TEvent>;
230
235
  };
231
- export declare type StatesConfig<TContext extends MachineContext, TEvent extends EventObject, TAction extends BaseActionObject = BaseActionObject> = {
236
+ export type StatesConfig<TContext extends MachineContext, TEvent extends EventObject, TAction extends ParameterizedObject = ParameterizedObject> = {
232
237
  [K in string]: StateNodeConfig<TContext, TEvent, TAction>;
233
238
  };
234
- export declare type StatesDefinition<TContext extends MachineContext, TEvent extends EventObject> = {
239
+ export type StatesDefinition<TContext extends MachineContext, TEvent extends EventObject> = {
235
240
  [K in string]: StateNodeDefinition<TContext, TEvent>;
236
241
  };
237
- export declare type TransitionConfigTarget<TContext extends MachineContext, TEvent extends EventObject> = string | undefined | StateNode<TContext, TEvent>;
238
- export declare type TransitionConfigOrTarget<TContext extends MachineContext, TEvent extends EventObject> = SingleOrArray<TransitionConfigTarget<TContext, TEvent> | TransitionConfig<TContext, TEvent>>;
239
- export declare type TransitionsConfigMap<TContext extends MachineContext, TEvent extends EventObject> = {
240
- [K in TEvent['type'] | '' | '*']?: K extends '' | '*' ? TransitionConfigOrTarget<TContext, TEvent> : TransitionConfigOrTarget<TContext, ExtractEvent<TEvent, K>>;
242
+ export type TransitionConfigTarget = string | undefined;
243
+ export type TransitionConfigOrTarget<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject = TExpressionEvent> = SingleOrArray<TransitionConfigTarget | TransitionConfig<TContext, TExpressionEvent, TEvent>>;
244
+ export type TransitionsConfigMap<TContext extends MachineContext, TEvent extends EventObject> = {
245
+ [K in TEvent['type'] | '' | '*']?: K extends '' | '*' ? TransitionConfigOrTarget<TContext, TEvent> : TransitionConfigOrTarget<TContext, ExtractEvent<TEvent, K>, TEvent>;
241
246
  };
242
- declare type TransitionsConfigArray<TContext extends MachineContext, TEvent extends EventObject> = Array<(TEvent extends EventObject ? TransitionConfig<TContext, TEvent> & {
247
+ type TransitionsConfigArray<TContext extends MachineContext, TEvent extends EventObject> = Array<(TEvent extends EventObject ? TransitionConfig<TContext, TEvent> & {
243
248
  event: TEvent['type'];
244
249
  } : never) | (TransitionConfig<TContext, TEvent> & {
245
250
  event: '*';
246
251
  })>;
247
- export declare type TransitionsConfig<TContext extends MachineContext, TEvent extends EventObject> = TransitionsConfigMap<TContext, TEvent> | TransitionsConfigArray<TContext, TEvent>;
248
- export interface InvokeSourceDefinition {
249
- [key: string]: any;
250
- type: string;
251
- }
252
+ export type TransitionsConfig<TContext extends MachineContext, TEvent extends EventObject> = TransitionsConfigMap<TContext, TEvent> | TransitionsConfigArray<TContext, TEvent>;
252
253
  export interface InvokeConfig<TContext extends MachineContext, TEvent extends EventObject> {
253
254
  /**
254
255
  * The unique identifier for the invoked machine. If not specified, this
255
256
  * will be the machine's own `id`, or the URL (from `src`).
256
257
  */
257
258
  id?: string;
259
+ systemId?: string;
258
260
  /**
259
261
  * The source of the machine to be invoked, or the machine itself.
260
262
  */
261
- src: string | InvokeSourceDefinition | BehaviorCreator<TContext, TEvent> | Behavior<any, any>;
262
- /**
263
- * If `true`, events sent to the parent service will be forwarded to the invoked service.
264
- *
265
- * Default: `false`
266
- */
267
- autoForward?: boolean;
268
- /**
269
- * Data from the parent machine's context to set as the (partial or full) context
270
- * for the invoked child machine.
271
- *
272
- * Data should be mapped to match the child machine's context shape.
273
- */
274
- data?: Mapper<TContext, TEvent, any> | PropertyMapper<TContext, TEvent, any>;
263
+ src: string | ActorBehavior<any, any>;
264
+ input?: Mapper<TContext, TEvent, any> | any;
275
265
  /**
276
266
  * The transition to take upon the invoked child machine reaching its final top-level state.
277
267
  */
278
- onDone?: string | SingleOrArray<TransitionConfig<TContext, DoneInvokeEvent<any>>>;
268
+ onDone?: string | SingleOrArray<TransitionConfigOrTarget<TContext, DoneInvokeEvent<any>, TEvent>>;
279
269
  /**
280
270
  * The transition to take upon the invoked child machine sending an error event.
281
271
  */
282
- onError?: string | SingleOrArray<TransitionConfig<TContext, DoneInvokeEvent<any>>>;
283
- onSnapshot?: string | SingleOrArray<TransitionConfig<TContext, SnapshotEvent<any>>>;
272
+ onError?: string | SingleOrArray<TransitionConfigOrTarget<TContext, DoneInvokeEvent<any>, TEvent>>;
273
+ onSnapshot?: string | SingleOrArray<TransitionConfigOrTarget<TContext, SnapshotEvent<any>, TEvent>>;
284
274
  /**
285
275
  * Meta data related to this invocation
286
276
  */
287
277
  meta?: MetaObject;
288
278
  }
289
- export interface StateNodeConfig<TContext extends MachineContext, TEvent extends EventObject, TAction extends BaseActionObject = BaseActionObject> {
279
+ export interface StateNodeConfig<TContext extends MachineContext, TEvent extends EventObject, TAction extends ParameterizedObject = ParameterizedObject> {
290
280
  /**
291
281
  * The initial state transition.
292
282
  */
@@ -314,7 +304,7 @@ export interface StateNodeConfig<TContext extends MachineContext, TEvent extends
314
304
  /**
315
305
  * The services to invoke upon entering this state node. These services will be stopped upon exiting this state node.
316
306
  */
317
- invoke?: SingleOrArray<string | BehaviorCreator<TContext, TEvent> | InvokeConfig<TContext, TEvent>>;
307
+ invoke?: SingleOrArray<string | InvokeConfig<TContext, TEvent>>;
318
308
  /**
319
309
  * The mapping of event types to their potential transition(s).
320
310
  */
@@ -322,11 +312,11 @@ export interface StateNodeConfig<TContext extends MachineContext, TEvent extends
322
312
  /**
323
313
  * The action(s) to be executed upon entering the state node.
324
314
  */
325
- entry?: BaseActions<TContext, TEvent, TAction>;
315
+ entry?: BaseActions<TContext, TEvent, TEvent, TAction>;
326
316
  /**
327
317
  * The action(s) to be executed upon exiting the state node.
328
318
  */
329
- exit?: BaseActions<TContext, TEvent, TAction>;
319
+ exit?: BaseActions<TContext, TEvent, TEvent, TAction>;
330
320
  /**
331
321
  * The potential transition(s) to be taken upon reaching a final child state node.
332
322
  *
@@ -406,11 +396,11 @@ export interface StateNodeDefinition<TContext extends MachineContext, TEvent ext
406
396
  export interface StateMachineDefinition<TContext extends MachineContext, TEvent extends EventObject> extends StateNodeDefinition<TContext, TEvent> {
407
397
  context: TContext;
408
398
  }
409
- export declare type AnyStateNode = StateNode<any, any>;
410
- export declare type AnyStateNodeDefinition = StateNodeDefinition<any, any>;
411
- export declare type AnyState = State<any, any, any>;
412
- export declare type AnyStateMachine = StateMachine<any, any, any, any, any>;
413
- export declare type AnyStateConfig = StateConfig<any, AnyEventObject>;
399
+ export type AnyStateNode = StateNode<any, any>;
400
+ export type AnyStateNodeDefinition = StateNodeDefinition<any, any>;
401
+ export type AnyState = State<any, any, any>;
402
+ export type AnyStateMachine = StateMachine<any, any, any, any, any>;
403
+ export type AnyStateConfig = StateConfig<any, AnyEventObject>;
414
404
  export interface AtomicStateNodeConfig<TContext extends MachineContext, TEvent extends EventObject> extends StateNodeConfig<TContext, TEvent> {
415
405
  initial?: undefined;
416
406
  parallel?: false | undefined;
@@ -429,59 +419,66 @@ export interface FinalStateNodeConfig<TContext extends MachineContext, TEvent ex
429
419
  */
430
420
  data?: Mapper<TContext, TEvent, any> | PropertyMapper<TContext, TEvent, any>;
431
421
  }
432
- export declare type SimpleOrStateNodeConfig<TContext extends MachineContext, TEvent extends EventObject> = AtomicStateNodeConfig<TContext, TEvent> | StateNodeConfig<TContext, TEvent>;
433
- export declare type ActionFunctionMap<TContext extends MachineContext, TEvent extends EventObject, TAction extends BaseActionObject = BaseActionObject> = {
434
- [K in TAction['type']]?: BaseDynamicActionObject<TContext, TEvent, TAction, any> | ActionFunction<TContext, TEvent, TAction extends {
422
+ export type SimpleOrStateNodeConfig<TContext extends MachineContext, TEvent extends EventObject> = AtomicStateNodeConfig<TContext, TEvent> | StateNodeConfig<TContext, TEvent>;
423
+ export type ActionFunctionMap<TContext extends MachineContext, TEvent extends EventObject, TAction extends ParameterizedObject = ParameterizedObject> = {
424
+ [K in TAction['type']]?: BaseDynamicActionObject<TContext, TEvent, TEvent, TAction, any> | ActionFunction<TContext, TEvent, TAction extends {
435
425
  type: K;
436
426
  } ? TAction : never>;
437
427
  };
438
- export declare type DelayFunctionMap<TContext extends MachineContext, TEvent extends EventObject> = Record<string, DelayConfig<TContext, TEvent>>;
439
- export declare type DelayConfig<TContext extends MachineContext, TEvent extends EventObject> = number | DelayExpr<TContext, TEvent>;
440
- export interface MachineImplementationsSimplified<TContext extends MachineContext, TEvent extends EventObject, TAction extends BaseActionObject = BaseActionObject> {
428
+ export type DelayFunctionMap<TContext extends MachineContext, TEvent extends EventObject> = Record<string, DelayConfig<TContext, TEvent>>;
429
+ export type DelayConfig<TContext extends MachineContext, TEvent extends EventObject> = number | DelayExpr<TContext, TEvent>;
430
+ export interface MachineImplementationsSimplified<TContext extends MachineContext, TEvent extends EventObject, TAction extends ParameterizedObject = ParameterizedObject> {
441
431
  guards: Record<string, GuardPredicate<TContext, TEvent>>;
442
432
  actions: ActionFunctionMap<TContext, TEvent, TAction>;
443
- actors: Record<string, BehaviorCreator<TContext, TEvent> | AnyBehavior>;
433
+ actors: Record<string, AnyActorBehavior | {
434
+ src: AnyActorBehavior;
435
+ input: Mapper<TContext, TEvent, any> | any;
436
+ }>;
444
437
  delays: DelayFunctionMap<TContext, TEvent>;
445
- context: Partial<TContext> | ContextFactory<Partial<TContext>>;
446
438
  }
447
- declare type MachineImplementationsActions<TContext extends MachineContext, TResolvedTypesMeta, TEventsCausingActions = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'eventsCausingActions'>, TIndexedEvents = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedEvents'>, TIndexedActions = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedActions'>> = {
448
- [K in keyof TEventsCausingActions]?: BaseDynamicActionObject<TContext, Cast<Prop<TIndexedEvents, TEventsCausingActions[K]>, EventObject>, any, // TODO: this should receive something like `Cast<Prop<TIndexedActions, K>, BaseActionObject>`, but at the moment builtin actions expect Resolved*Action here and this should be simplified somehow
449
- any> | ActionFunction<TContext, Cast<Prop<TIndexedEvents, TEventsCausingActions[K]>, EventObject>, Cast<Prop<TIndexedActions, K>, BaseActionObject>>;
439
+ type MachineImplementationsActions<TContext extends MachineContext, TResolvedTypesMeta, TEventsCausingActions = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'eventsCausingActions'>, TIndexedEvents = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedEvents'>> = {
440
+ [K in keyof TEventsCausingActions]?: BaseDynamicActionObject<TContext, Cast<Prop<TIndexedEvents, TEventsCausingActions[K]>, EventObject>, Cast<Prop<TIndexedEvents, keyof TIndexedEvents>, EventObject>, any, // TODO: this should receive something like `Cast<Prop<TIndexedActions, K>, ParameterizedObject>`, but at the moment builtin actions expect Resolved*Action here and this should be simplified somehow
441
+ any> | ActionFunction<TContext, Cast<Prop<TIndexedEvents, TEventsCausingActions[K]>, EventObject>, ParameterizedObject, // TODO: when bringing back parametrized actions this should accept something like `Cast<Prop<TIndexedActions, K>, ParameterizedObject>`. At the moment we need to keep this type argument consistent with what is provided to the fake callable signature within `BaseDynamicActionObject`
442
+ Cast<Prop<TIndexedEvents, keyof TIndexedEvents>, EventObject>>;
450
443
  };
451
- declare type MachineImplementationsDelays<TContext extends MachineContext, TResolvedTypesMeta, TEventsCausingDelays = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'eventsCausingDelays'>, TIndexedEvents = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedEvents'>> = {
444
+ type MachineImplementationsDelays<TContext extends MachineContext, TResolvedTypesMeta, TEventsCausingDelays = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'eventsCausingDelays'>, TIndexedEvents = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedEvents'>> = {
452
445
  [K in keyof TEventsCausingDelays]?: DelayConfig<TContext, Cast<Prop<TIndexedEvents, TEventsCausingDelays[K]>, EventObject>>;
453
446
  };
454
- declare type MachineImplementationsGuards<TContext extends MachineContext, TResolvedTypesMeta, TEventsCausingGuards = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'eventsCausingGuards'>, TIndexedEvents = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedEvents'>> = {
447
+ type MachineImplementationsGuards<TContext extends MachineContext, TResolvedTypesMeta, TEventsCausingGuards = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'eventsCausingGuards'>, TIndexedEvents = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedEvents'>> = {
455
448
  [K in keyof TEventsCausingGuards]?: GuardPredicate<TContext, Cast<Prop<TIndexedEvents, TEventsCausingGuards[K]>, EventObject>>;
456
449
  };
457
- declare type MachineImplementationsActors<TContext extends MachineContext, TResolvedTypesMeta, TEventsCausingActors = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'eventsCausingActors'>, TIndexedEvents = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedEvents'>, _TInvokeSrcNameMap = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'invokeSrcNameMap'>> = {
458
- [K in keyof TEventsCausingActors]?: BehaviorCreator<TContext, Cast<Prop<TIndexedEvents, TEventsCausingActors[K]>, EventObject>> | AnyBehavior;
450
+ type MachineImplementationsActors<TContext extends MachineContext, TResolvedTypesMeta, TEventsCausingActors = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'eventsCausingActors'>, TIndexedEvents = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedEvents'>, _TInvokeSrcNameMap = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'invokeSrcNameMap'>> = {
451
+ [K in keyof TEventsCausingActors]?: AnyActorBehavior | {
452
+ src: AnyActorBehavior;
453
+ input: Mapper<TContext, Cast<Prop<TIndexedEvents, TEventsCausingActors[K]>, EventObject>, any> | any;
454
+ };
459
455
  };
460
- declare type MakeKeysRequired<T extends string> = {
456
+ type MakeKeysRequired<T extends string> = {
461
457
  [K in T]: unknown;
462
458
  };
463
- declare type MaybeMakeMissingImplementationsRequired<TImplementationType, TMissingImplementationsForType, TRequireMissingImplementations> = TRequireMissingImplementations extends true ? IsNever<TMissingImplementationsForType> extends true ? {} : {
459
+ type MaybeMakeMissingImplementationsRequired<TImplementationType, TMissingImplementationsForType, TRequireMissingImplementations> = TRequireMissingImplementations extends true ? IsNever<TMissingImplementationsForType> extends true ? {} : {
464
460
  [K in Cast<TImplementationType, string>]: MakeKeysRequired<Cast<TMissingImplementationsForType, string>>;
465
461
  } : {};
466
- declare type GenerateActionsImplementationsPart<TContext extends MachineContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> = MaybeMakeMissingImplementationsRequired<'actions', Prop<TMissingImplementations, 'actions'>, TRequireMissingImplementations> & {
462
+ type GenerateActionsImplementationsPart<TContext extends MachineContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> = MaybeMakeMissingImplementationsRequired<'actions', Prop<TMissingImplementations, 'actions'>, TRequireMissingImplementations> & {
467
463
  actions?: MachineImplementationsActions<TContext, TResolvedTypesMeta>;
468
464
  };
469
- declare type GenerateDelaysImplementationsPart<TContext extends MachineContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> = MaybeMakeMissingImplementationsRequired<'delays', Prop<TMissingImplementations, 'delays'>, TRequireMissingImplementations> & {
465
+ type GenerateDelaysImplementationsPart<TContext extends MachineContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> = MaybeMakeMissingImplementationsRequired<'delays', Prop<TMissingImplementations, 'delays'>, TRequireMissingImplementations> & {
470
466
  delays?: MachineImplementationsDelays<TContext, TResolvedTypesMeta>;
471
467
  };
472
- declare type GenerateGuardsImplementationsPart<TContext extends MachineContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> = MaybeMakeMissingImplementationsRequired<'guards', Prop<TMissingImplementations, 'guards'>, TRequireMissingImplementations> & {
468
+ type GenerateGuardsImplementationsPart<TContext extends MachineContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> = MaybeMakeMissingImplementationsRequired<'guards', Prop<TMissingImplementations, 'guards'>, TRequireMissingImplementations> & {
473
469
  guards?: MachineImplementationsGuards<TContext, TResolvedTypesMeta>;
474
470
  };
475
- declare type GenerateActorsImplementationsPart<TContext extends MachineContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> = MaybeMakeMissingImplementationsRequired<'actors', Prop<TMissingImplementations, 'actors'>, TRequireMissingImplementations> & {
471
+ type GenerateActorsImplementationsPart<TContext extends MachineContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> = MaybeMakeMissingImplementationsRequired<'actors', Prop<TMissingImplementations, 'actors'>, TRequireMissingImplementations> & {
476
472
  actors?: MachineImplementationsActors<TContext, TResolvedTypesMeta>;
477
473
  };
478
- export declare type InternalMachineImplementations<TContext extends MachineContext, _TEvent extends EventObject, TResolvedTypesMeta, TRequireMissingImplementations extends boolean = false, TMissingImplementations = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'missingImplementations'>> = GenerateActionsImplementationsPart<TContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> & GenerateDelaysImplementationsPart<TContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> & GenerateGuardsImplementationsPart<TContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> & GenerateActorsImplementationsPart<TContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations>;
479
- export declare type MachineImplementations<TContext extends MachineContext, TEvent extends EventObject, TAction extends BaseActionObject = BaseActionObject, TActorMap extends ActorMap = ActorMap, TTypesMeta extends TypegenConstraint = TypegenDisabled> = InternalMachineImplementations<TContext, TEvent, ResolveTypegenMeta<TTypesMeta, TEvent, TAction, TActorMap>>;
480
- declare type InitialContext<TContext extends MachineContext> = TContext | ContextFactory<TContext>;
481
- export declare type ContextFactory<TContext extends MachineContext> = (stuff: {
474
+ export type InternalMachineImplementations<TContext extends MachineContext, _TEvent extends EventObject, TResolvedTypesMeta, TRequireMissingImplementations extends boolean = false, TMissingImplementations = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'missingImplementations'>> = GenerateActionsImplementationsPart<TContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> & GenerateDelaysImplementationsPart<TContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> & GenerateGuardsImplementationsPart<TContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> & GenerateActorsImplementationsPart<TContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations>;
475
+ export type MachineImplementations<TContext extends MachineContext, TEvent extends EventObject, TAction extends ParameterizedObject = ParameterizedObject, TActorMap extends ActorMap = ActorMap, TTypesMeta extends TypegenConstraint = TypegenDisabled> = InternalMachineImplementations<TContext, TEvent, ResolveTypegenMeta<TTypesMeta, TEvent, TAction, TActorMap>>;
476
+ type InitialContext<TContext extends MachineContext> = TContext | ContextFactory<TContext>;
477
+ export type ContextFactory<TContext extends MachineContext> = ({ spawn, input }: {
482
478
  spawn: Spawner;
479
+ input: any;
483
480
  }) => TContext;
484
- export interface MachineConfig<TContext extends MachineContext, TEvent extends EventObject, TAction extends BaseActionObject = BaseActionObject, TActorMap extends ActorMap = ActorMap, TTypesMeta = TypegenDisabled> extends StateNodeConfig<NoInfer<TContext>, NoInfer<TEvent>, TAction> {
481
+ export interface MachineConfig<TContext extends MachineContext, TEvent extends EventObject, TAction extends ParameterizedObject = ParameterizedObject, TActorMap extends ActorMap = ActorMap, TTypesMeta = TypegenDisabled> extends StateNodeConfig<NoInfer<TContext>, NoInfer<TEvent>, TAction> {
485
482
  /**
486
483
  * The initial context (extended state)
487
484
  */
@@ -497,7 +494,7 @@ export interface MachineConfig<TContext extends MachineContext, TEvent extends E
497
494
  schema?: MachineSchema<TContext, TEvent, TActorMap>;
498
495
  tsTypes?: TTypesMeta;
499
496
  }
500
- export declare type ActorMap = Record<string, {
497
+ export type ActorMap = Record<string, {
501
498
  data: any;
502
499
  }>;
503
500
  export interface MachineSchema<TContext extends MachineContext, TEvent extends EventObject, TActorMap extends ActorMap = ActorMap> {
@@ -517,10 +514,10 @@ export interface HistoryStateNode<TContext extends MachineContext> extends State
517
514
  history: 'shallow' | 'deep';
518
515
  target: string | undefined;
519
516
  }
520
- export declare type HistoryValue<TContext extends MachineContext, TEvent extends EventObject> = Record<string, Array<StateNode<TContext, TEvent>>>;
521
- export declare type AnyHistoryValue = HistoryValue<any, any>;
522
- export declare type StateFrom<T extends AnyStateMachine | ((...args: any[]) => AnyStateMachine)> = T extends AnyStateMachine ? ReturnType<T['transition']> : T extends (...args: any[]) => AnyStateMachine ? ReturnType<ReturnType<T>['transition']> : never;
523
- export declare type Transitions<TContext extends MachineContext, TEvent extends EventObject> = Array<TransitionDefinition<TContext, TEvent>>;
517
+ export type HistoryValue<TContext extends MachineContext, TEvent extends EventObject> = Record<string, Array<StateNode<TContext, TEvent>>>;
518
+ export type AnyHistoryValue = HistoryValue<any, any>;
519
+ export type StateFrom<T extends AnyStateMachine | ((...args: any[]) => AnyStateMachine)> = T extends AnyStateMachine ? ReturnType<T['transition']> : T extends (...args: any[]) => AnyStateMachine ? ReturnType<ReturnType<T>['transition']> : never;
520
+ export type Transitions<TContext extends MachineContext, TEvent extends EventObject> = Array<TransitionDefinition<TContext, TEvent>>;
524
521
  export declare enum ActionTypes {
525
522
  Stop = "xstate.stop",
526
523
  Raise = "xstate.raise",
@@ -540,10 +537,13 @@ export declare enum ActionTypes {
540
537
  Pure = "xstate.pure",
541
538
  Choose = "xstate.choose"
542
539
  }
543
- export interface RaiseActionObject<TEvent extends EventObject> extends BuiltInActionObject {
540
+ export interface RaiseActionObject<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject = TExpressionEvent> extends BaseActionObject {
544
541
  type: ActionTypes.Raise;
545
542
  params: {
543
+ event: TEvent;
546
544
  _event: SCXML.Event<TEvent>;
545
+ delay: RaiseActionOptions<TContext, TExpressionEvent>['delay'];
546
+ id: string | number;
547
547
  };
548
548
  }
549
549
  export interface DoneInvokeEvent<TData> extends EventObject {
@@ -574,13 +574,11 @@ export interface DoneEventObject extends EventObject {
574
574
  data?: any;
575
575
  toString(): string;
576
576
  }
577
- export declare type DoneEvent = DoneEventObject & string;
577
+ export type DoneEvent = DoneEventObject & string;
578
578
  export interface InvokeAction {
579
579
  type: ActionTypes.Invoke;
580
- src: InvokeSourceDefinition | ActorRef<any>;
580
+ src: string | ActorRef<any>;
581
581
  id: string;
582
- autoForward?: boolean;
583
- data?: any;
584
582
  exec?: undefined;
585
583
  meta: MetaObject | undefined;
586
584
  }
@@ -591,19 +589,17 @@ export interface DynamicInvokeActionObject<TContext extends MachineContext, TEve
591
589
  export interface InvokeActionObject extends BaseActionObject {
592
590
  type: ActionTypes.Invoke;
593
591
  params: {
594
- src: InvokeSourceDefinition | ActorRef<any>;
592
+ src: string | ActorRef<any>;
595
593
  id: string;
596
- autoForward?: boolean;
597
- data?: any;
598
594
  exec?: undefined;
599
595
  ref?: ActorRef<any>;
600
596
  meta: MetaObject | undefined;
601
597
  };
602
598
  }
603
- export interface DynamicStopActionObject<TContext extends MachineContext, TEvent extends EventObject> {
599
+ export interface DynamicStopActionObject<TContext extends MachineContext, TExpressionEvent extends EventObject> {
604
600
  type: ActionTypes.Stop;
605
601
  params: {
606
- actor: string | ActorRef<any> | Expr<TContext, TEvent, ActorRef<any> | string>;
602
+ actor: string | ActorRef<any> | Expr<TContext, TExpressionEvent, ActorRef<any> | string>;
607
603
  };
608
604
  }
609
605
  export interface StopActionObject {
@@ -612,11 +608,11 @@ export interface StopActionObject {
612
608
  actor: ActorRef<any>;
613
609
  };
614
610
  }
615
- export declare type DelayExpr<TContext extends MachineContext, TEvent extends EventObject> = ExprWithMeta<TContext, TEvent, number>;
616
- export declare type LogExpr<TContext extends MachineContext, TEvent extends EventObject> = ExprWithMeta<TContext, TEvent, any>;
617
- export interface DynamicLogAction<TContext extends MachineContext, TEvent extends EventObject> extends BaseDynamicActionObject<TContext, TEvent, LogActionObject, {
611
+ export type DelayExpr<TContext extends MachineContext, TEvent extends EventObject> = ExprWithMeta<TContext, TEvent, number>;
612
+ export type LogExpr<TContext extends MachineContext, TEvent extends EventObject> = ExprWithMeta<TContext, TEvent, any>;
613
+ export interface DynamicLogAction<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject> extends BaseDynamicActionObject<TContext, TExpressionEvent, TEvent, LogActionObject, {
618
614
  label: string | undefined;
619
- expr: string | LogExpr<TContext, TEvent>;
615
+ expr: string | LogExpr<TContext, TExpressionEvent>;
620
616
  }> {
621
617
  type: ActionTypes.Log;
622
618
  }
@@ -638,25 +634,30 @@ export interface SendActionObject<TSentEvent extends EventObject = AnyEventObjec
638
634
  internal: boolean;
639
635
  };
640
636
  }
641
- export declare type Expr<TContext extends MachineContext, TEvent extends EventObject, T> = (context: TContext, event: TEvent) => T;
642
- export declare type ExprWithMeta<TContext extends MachineContext, TEvent extends EventObject, T> = (context: TContext, event: TEvent, meta: SCXMLEventMeta<TEvent>) => T;
643
- export declare type SendExpr<TContext extends MachineContext, TEvent extends EventObject, TSentEvent extends EventObject = AnyEventObject> = ExprWithMeta<TContext, TEvent, TSentEvent>;
637
+ export type Expr<TContext extends MachineContext, TEvent extends EventObject, T> = (arg: UnifiedArg<TContext, TEvent>) => T;
638
+ export type ExprWithMeta<TContext extends MachineContext, TEvent extends EventObject, T> = (args: UnifiedArg<TContext, TEvent> & StateMeta<TContext, TEvent>) => T;
639
+ export type SendExpr<TContext extends MachineContext, TEvent extends EventObject, TSentEvent extends EventObject = AnyEventObject> = ExprWithMeta<TContext, TEvent, TSentEvent>;
644
640
  export declare enum SpecialTargets {
645
641
  Parent = "#_parent",
646
642
  Internal = "#_internal"
647
643
  }
648
- export interface SendActionOptions<TContext extends MachineContext, TEvent extends EventObject> {
644
+ export interface SendActionOptions<TContext extends MachineContext, TEvent extends EventObject> extends RaiseActionOptions<TContext, TEvent> {
645
+ to?: string | ActorRef<any, any> | ExprWithMeta<TContext, TEvent, string | ActorRef<any, any>>;
646
+ }
647
+ export interface RaiseActionOptions<TContext extends MachineContext, TEvent extends EventObject> {
649
648
  id?: string | number;
650
649
  delay?: number | string | DelayExpr<TContext, TEvent>;
651
- to?: string | ExprWithMeta<TContext, TEvent, string | ActorRef<any> | undefined> | undefined;
650
+ }
651
+ export interface RaiseActionParams<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject> extends RaiseActionOptions<TContext, TExpressionEvent> {
652
+ event: TEvent | SendExpr<TContext, TExpressionEvent, TEvent>;
652
653
  }
653
654
  export interface SendActionParams<TContext extends MachineContext, TEvent extends EventObject, TSentEvent extends EventObject = EventObject> extends SendActionOptions<TContext, TEvent> {
654
655
  event: TSentEvent | SendExpr<TContext, TEvent, TSentEvent>;
655
656
  }
656
- export interface DynamicCancelActionObject<TContext extends MachineContext, TEvent extends EventObject> {
657
+ export interface DynamicCancelActionObject<TContext extends MachineContext, TExpressionEvent extends EventObject> {
657
658
  type: ActionTypes.Cancel;
658
659
  params: {
659
- sendId: string | ExprWithMeta<TContext, TEvent, string>;
660
+ sendId: string | ExprWithMeta<TContext, TExpressionEvent, string>;
660
661
  };
661
662
  }
662
663
  export interface CancelActionObject extends BaseActionObject {
@@ -665,21 +666,33 @@ export interface CancelActionObject extends BaseActionObject {
665
666
  sendId: string;
666
667
  };
667
668
  }
668
- export declare type Assigner<TContext extends MachineContext, TEvent extends EventObject> = (context: TContext, event: TEvent, meta: AssignMeta<TContext, TEvent>) => Partial<TContext>;
669
- export declare type PartialAssigner<TContext extends MachineContext, TEvent extends EventObject, TKey extends keyof TContext> = (context: TContext, event: TEvent, meta: AssignMeta<TContext, TEvent>) => TContext[TKey];
670
- export declare type PropertyAssigner<TContext extends MachineContext, TEvent extends EventObject> = {
671
- [K in keyof TContext]?: PartialAssigner<TContext, TEvent, K> | TContext[K];
669
+ export type Assigner<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject = TExpressionEvent> = (args: {
670
+ context: TContext;
671
+ event: TExpressionEvent;
672
+ } & AssignMeta<TContext, TExpressionEvent, TEvent>) => Partial<TContext>;
673
+ export type PartialAssigner<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject, TKey extends keyof TContext> = (args: {
674
+ context: TContext;
675
+ event: TExpressionEvent;
676
+ } & AssignMeta<TContext, TExpressionEvent, TEvent>) => TContext[TKey];
677
+ export type PropertyAssigner<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject = TExpressionEvent> = {
678
+ [K in keyof TContext]?: PartialAssigner<TContext, TExpressionEvent, TEvent, K> | TContext[K];
672
679
  };
673
- export declare type Mapper<TContext extends MachineContext, TEvent extends EventObject, TParams extends {}> = (context: TContext, event: TEvent) => TParams;
674
- export declare type PropertyMapper<TContext extends MachineContext, TEvent extends EventObject, TParams extends {}> = {
675
- [K in keyof TParams]?: ((context: TContext, event: TEvent) => TParams[K]) | TParams[K];
680
+ export type Mapper<TContext extends MachineContext, TEvent extends EventObject, TParams extends {}> = (args: {
681
+ context: TContext;
682
+ event: TEvent;
683
+ }) => TParams;
684
+ export type PropertyMapper<TContext extends MachineContext, TEvent extends EventObject, TParams extends {}> = {
685
+ [K in keyof TParams]?: ((args: {
686
+ context: TContext;
687
+ event: TEvent;
688
+ }) => TParams[K]) | TParams[K];
676
689
  };
677
690
  export interface AnyAssignAction extends BaseActionObject {
678
691
  type: ActionTypes.Assign;
679
692
  assignment: any;
680
693
  }
681
- export declare type DynamicAssignAction<TContext extends MachineContext, TEvent extends EventObject> = BaseDynamicActionObject<TContext, TEvent, AssignActionObject<TContext> | RaiseActionObject<TEvent>, {
682
- assignment: Assigner<TContext, TEvent> | PropertyAssigner<TContext, TEvent>;
694
+ export type DynamicAssignAction<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject = TExpressionEvent> = BaseDynamicActionObject<TContext, TExpressionEvent, TEvent, AssignActionObject<TContext> | RaiseActionObject<TContext, TExpressionEvent>, {
695
+ assignment: Assigner<TContext, TExpressionEvent, TEvent> | PropertyAssigner<TContext, TExpressionEvent, TEvent>;
683
696
  }>;
684
697
  export interface AssignActionObject<TContext extends MachineContext> extends BaseActionObject {
685
698
  type: ActionTypes.Assign;
@@ -691,7 +704,10 @@ export interface AssignActionObject<TContext extends MachineContext> extends Bas
691
704
  export interface DynamicPureActionObject<TContext extends MachineContext, TEvent extends EventObject> {
692
705
  type: ActionTypes.Pure;
693
706
  params: {
694
- get: (context: TContext, event: TEvent) => SingleOrArray<BaseActionObject> | undefined;
707
+ get: (args: {
708
+ context: TContext;
709
+ event: TEvent;
710
+ }) => SingleOrArray<BaseActionObject | BaseActionObject['type']> | undefined;
695
711
  };
696
712
  }
697
713
  export interface PureActionObject extends BaseActionObject {
@@ -712,10 +728,11 @@ export interface ResolvedChooseAction extends BaseActionObject {
712
728
  actions: BaseActionObject[];
713
729
  };
714
730
  }
715
- export interface TransitionDefinition<TContext extends MachineContext, TEvent extends EventObject> extends TransitionConfig<TContext, TEvent> {
731
+ export interface TransitionDefinition<TContext extends MachineContext, TEvent extends EventObject> extends Omit<TransitionConfig<TContext, TEvent>, 'target'> {
716
732
  target: Array<StateNode<TContext, TEvent>> | undefined;
717
733
  source: StateNode<TContext, TEvent>;
718
734
  actions: BaseActionObject[];
735
+ external: boolean;
719
736
  guard?: GuardDefinition<TContext, TEvent>;
720
737
  eventType: TEvent['type'] | '*';
721
738
  toJSON: () => {
@@ -727,12 +744,12 @@ export interface TransitionDefinition<TContext extends MachineContext, TEvent ex
727
744
  meta?: Record<string, any>;
728
745
  };
729
746
  }
730
- export declare type AnyTransitionDefinition = TransitionDefinition<any, any>;
747
+ export type AnyTransitionDefinition = TransitionDefinition<any, any>;
731
748
  export interface InitialTransitionDefinition<TContext extends MachineContext, TEvent extends EventObject> extends TransitionDefinition<TContext, TEvent> {
732
749
  target: Array<StateNode<TContext, TEvent>>;
733
750
  guard?: never;
734
751
  }
735
- export declare type TransitionDefinitionMap<TContext extends MachineContext, TEvent extends EventObject> = {
752
+ export type TransitionDefinitionMap<TContext extends MachineContext, TEvent extends EventObject> = {
736
753
  [K in TEvent['type'] | '*']: Array<TransitionDefinition<TContext, K extends TEvent['type'] ? Extract<TEvent, {
737
754
  type: K;
738
755
  }> : EventObject>>;
@@ -765,36 +782,11 @@ export interface Segment<TContext extends MachineContext, TEvent extends EventOb
765
782
  */
766
783
  event: TEvent;
767
784
  }
768
- export interface PathItem<TContext extends MachineContext, TEvent extends EventObject> {
769
- state: State<TContext, TEvent>;
770
- path: Array<Segment<TContext, TEvent>>;
771
- weight?: number;
772
- }
773
- export interface PathMap<TContext extends MachineContext, TEvent extends EventObject> {
774
- [key: string]: PathItem<TContext, TEvent>;
775
- }
776
- export interface PathsItem<TContext extends MachineContext, TEvent extends EventObject> {
777
- state: State<TContext, TEvent>;
778
- paths: Array<Array<Segment<TContext, TEvent>>>;
779
- }
780
- export interface PathsMap<TContext extends MachineContext, TEvent extends EventObject> {
781
- [key: string]: PathsItem<TContext, TEvent>;
782
- }
783
- export interface TransitionMap {
784
- state: StateValue | undefined;
785
- }
786
- export interface AdjacencyMap {
787
- [stateId: string]: Record<string, TransitionMap>;
788
- }
789
- export interface ValueAdjacencyMap<TContext extends MachineContext, TEvent extends EventObject> {
790
- [stateId: string]: Record<string, State<TContext, TEvent>>;
791
- }
792
- export interface SCXMLEventMeta<TEvent extends EventObject> {
793
- _event: SCXML.Event<TEvent>;
794
- }
795
785
  export interface StateMeta<TContext extends MachineContext, TEvent extends EventObject> {
796
786
  state: State<TContext, TEvent, any>;
797
787
  _event: SCXML.Event<TEvent>;
788
+ self: ActorRef<TEvent>;
789
+ system: ActorSystem<any>;
798
790
  }
799
791
  export interface StateLike<TContext extends MachineContext> {
800
792
  value: StateValue;
@@ -806,12 +798,11 @@ export interface StateConfig<TContext extends MachineContext, TEvent extends Eve
806
798
  value: StateValue;
807
799
  context: TContext;
808
800
  _event: SCXML.Event<TEvent>;
809
- _sessionid: string | undefined;
810
801
  historyValue?: HistoryValue<TContext, TEvent>;
811
802
  actions?: BaseActionObject[];
812
803
  meta?: any;
813
804
  configuration?: Array<StateNode<TContext, TEvent>>;
814
- transitions: Array<TransitionDefinition<TContext, TEvent>>;
805
+ transitions?: Array<TransitionDefinition<TContext, TEvent>>;
815
806
  children: Record<string, ActorRef<any>>;
816
807
  done?: boolean;
817
808
  output?: any;
@@ -819,7 +810,7 @@ export interface StateConfig<TContext extends MachineContext, TEvent extends Eve
819
810
  machine?: StateMachine<TContext, TEvent, any, any, any>;
820
811
  _internalQueue?: Array<SCXML.Event<TEvent>>;
821
812
  }
822
- export interface InterpreterOptions {
813
+ export interface InterpreterOptions<_TActorBehavior extends AnyActorBehavior> {
823
814
  /**
824
815
  * Whether state actions should be executed immediately upon transition. Defaults to `true`.
825
816
  */
@@ -845,15 +836,22 @@ export interface InterpreterOptions {
845
836
  * Default: `false`
846
837
  */
847
838
  devTools?: boolean | DevToolsAdapter;
839
+ sync?: boolean;
848
840
  /**
849
- * If `true`, events from the parent will be sent to this interpreter.
850
- *
851
- * Default: `false`
841
+ * The system ID to register this actor under
852
842
  */
853
- autoForward?: boolean;
854
- sync?: boolean;
843
+ systemId?: string;
844
+ /**
845
+ * The input data to pass to the actor.
846
+ */
847
+ input?: any;
848
+ state?: any;
849
+ /**
850
+ * The source definition.
851
+ */
852
+ src?: string;
855
853
  }
856
- export declare type AnyInterpreter = Interpreter<any>;
854
+ export type AnyInterpreter = Interpreter<any>;
857
855
  export declare namespace SCXML {
858
856
  interface Event<TEvent extends EventObject> {
859
857
  /**
@@ -916,7 +914,7 @@ export declare namespace SCXML {
916
914
  $$type: 'scxml';
917
915
  }
918
916
  }
919
- export declare type Observer<T> = {
917
+ export type Observer<T> = {
920
918
  next?: (value: T) => void;
921
919
  error?: (err: any) => void;
922
920
  complete?: () => void;
@@ -934,8 +932,8 @@ export interface Subscribable<T> extends InteropSubscribable<T> {
934
932
  subscribe(observer: Observer<T>): Subscription;
935
933
  subscribe(next: (value: T) => void, error?: (error: any) => void, complete?: () => void): Subscription;
936
934
  }
937
- export declare type Spawnable = AnyStateMachine | PromiseLike<any> | InvokeCallback | InteropObservable<any> | Subscribable<any> | Behavior<any, any>;
938
- export declare type ExtractEvent<TEvent extends EventObject, TEventType extends TEvent['type']> = TEvent extends any ? TEventType extends TEvent['type'] ? TEvent : never : never;
935
+ export type Spawnable = AnyStateMachine | PromiseLike<any> | InvokeCallback | InteropObservable<any> | Subscribable<any> | ActorBehavior<any, any>;
936
+ export type ExtractEvent<TEvent extends EventObject, TEventType extends TEvent['type']> = TEvent extends any ? TEventType extends TEvent['type'] ? TEvent : never : never;
939
937
  export interface BaseActorRef<TEvent extends EventObject> {
940
938
  send: (event: TEvent) => void;
941
939
  }
@@ -947,55 +945,90 @@ export interface ActorRef<TEvent extends EventObject, TSnapshot = any> extends S
947
945
  * The unique identifier for this actor relative to its parent.
948
946
  */
949
947
  id: string;
948
+ sessionId: string;
950
949
  send: (event: TEvent) => void;
951
950
  start?: () => void;
952
951
  getSnapshot: () => TSnapshot | undefined;
953
- stop?: () => void;
952
+ getPersistedState?: () => any;
953
+ stop: () => void;
954
954
  toJSON?: () => any;
955
955
  _parent?: ActorRef<any, any>;
956
+ system?: ActorSystem<any>;
956
957
  status: ActorStatus;
958
+ src?: string;
957
959
  }
958
- export declare type AnyActorRef = ActorRef<any, any>;
959
- export declare type ActorRefFrom<T> = ReturnTypeOrValue<T> extends infer R ? R extends StateMachine<infer TContext, infer TEvent, any, any, infer TResolvedTypesMeta> ? ActorRef<TEvent, State<TContext, TEvent, AreAllImplementationsAssumedToBeProvided<TResolvedTypesMeta> extends false ? MarkAllImplementationsAsProvided<TResolvedTypesMeta> : TResolvedTypesMeta>> : R extends Promise<infer U> ? ActorRef<{
960
+ export type AnyActorRef = ActorRef<any, any>;
961
+ export type ActorRefFrom<T> = ReturnTypeOrValue<T> extends infer R ? R extends StateMachine<infer TContext, infer TEvent, any, any, infer TResolvedTypesMeta> ? ActorRef<TEvent, State<TContext, TEvent, AreAllImplementationsAssumedToBeProvided<TResolvedTypesMeta> extends false ? MarkAllImplementationsAsProvided<TResolvedTypesMeta> : TResolvedTypesMeta>> : R extends Promise<infer U> ? ActorRef<{
960
962
  type: string;
961
- }, U | undefined> : R extends Behavior<infer TEvent, infer TSnapshot> ? ActorRef<TEvent, TSnapshot> : never : never;
962
- export declare type DevToolsAdapter = (service: AnyInterpreter) => void;
963
- export declare type InterpreterFrom<T extends AnyStateMachine | ((...args: any[]) => AnyStateMachine)> = ReturnTypeOrValue<T> extends StateMachine<infer TContext, infer TEvent, any, any, infer TResolvedTypesMeta> ? Interpreter<Behavior<TEvent, State<TContext, TEvent, TResolvedTypesMeta>, State<TContext, TEvent, TResolvedTypesMeta>>> : never;
964
- export declare type MachineImplementationsFrom<T extends AnyStateMachine | ((...args: any[]) => AnyStateMachine), TRequireMissingImplementations extends boolean = false> = ReturnTypeOrValue<T> extends StateMachine<infer TContext, infer TEvent, any, any, infer TResolvedTypesMeta> ? InternalMachineImplementations<TContext, TEvent, TResolvedTypesMeta, TRequireMissingImplementations> : never;
965
- export declare type __ResolvedTypesMetaFrom<T> = T extends StateMachine<any, any, any, infer TResolvedTypesMeta> ? TResolvedTypesMeta : never;
966
- export declare type EventOfMachine<TMachine extends AnyStateMachine> = TMachine extends StateMachine<any, infer E, any, any, any> ? E : never;
967
- export interface ActorContext<TEvent extends EventObject, TSnapshot> {
963
+ }, U | undefined> : R extends ActorBehavior<infer TEvent, infer TSnapshot> ? ActorRef<TEvent, TSnapshot> : never : never;
964
+ export type DevToolsAdapter = (service: AnyInterpreter) => void;
965
+ export type InterpreterFrom<T extends AnyStateMachine | ((...args: any[]) => AnyStateMachine)> = ReturnTypeOrValue<T> extends StateMachine<infer TContext, infer TEvent, any, any, infer TResolvedTypesMeta> ? Interpreter<ActorBehavior<TEvent, State<TContext, TEvent, TResolvedTypesMeta>, State<TContext, TEvent, TResolvedTypesMeta>, PersistedMachineState<State<TContext, TEvent, TResolvedTypesMeta>>>> : never;
966
+ export type MachineImplementationsFrom<T extends AnyStateMachine | ((...args: any[]) => AnyStateMachine), TRequireMissingImplementations extends boolean = false> = ReturnTypeOrValue<T> extends StateMachine<infer TContext, infer TEvent, any, any, infer TResolvedTypesMeta> ? InternalMachineImplementations<TContext, TEvent, TResolvedTypesMeta, TRequireMissingImplementations> : never;
967
+ export type __ResolvedTypesMetaFrom<T> = T extends StateMachine<any, any, any, infer TResolvedTypesMeta> ? TResolvedTypesMeta : never;
968
+ export type EventOfMachine<TMachine extends AnyStateMachine> = TMachine extends StateMachine<any, infer E, any, any, any> ? E : never;
969
+ export interface ActorContext<TEvent extends EventObject, TSnapshot, TSystem extends ActorSystem<any> = ActorSystem<any>> {
968
970
  self: ActorRef<TEvent, TSnapshot>;
969
971
  id: string;
970
972
  sessionId: string;
971
973
  logger: (...args: any[]) => void;
972
974
  defer: (fn: () => void) => void;
975
+ system: TSystem;
976
+ stopChild: (child: AnyActorRef) => void;
973
977
  }
974
- export interface Behavior<TEvent extends EventObject, TSnapshot = any, TInternalState = any> {
975
- transition: (state: TInternalState, message: TEvent | LifecycleSignal, ctx: ActorContext<TEvent, TSnapshot>) => TInternalState;
976
- getInitialState: (actorCtx: ActorContext<TEvent, TSnapshot>) => TInternalState;
977
- restoreState?: (restoredState: any, actorCtx: ActorContext<TEvent, TSnapshot>) => TInternalState;
978
+ export type AnyActorContext = ActorContext<any, any, any>;
979
+ export interface ActorBehavior<TEvent extends EventObject, TSnapshot = any, TInternalState = any,
980
+ /**
981
+ * Serialized internal state used for persistence & restoration
982
+ */
983
+ TPersisted = TInternalState, TSystem extends ActorSystem<any> = ActorSystem<any>> {
984
+ transition: (state: TInternalState, message: TEvent | LifecycleSignal, ctx: ActorContext<TEvent, TSnapshot, TSystem>) => TInternalState;
985
+ getInitialState: (actorCtx: ActorContext<TEvent, TSnapshot, any>, input: any) => TInternalState;
986
+ restoreState?: (persistedState: TPersisted, actorCtx: ActorContext<TEvent, TSnapshot>) => TInternalState;
978
987
  getSnapshot?: (state: TInternalState) => TSnapshot;
979
988
  getStatus?: (state: TInternalState) => {
980
989
  status: string;
981
990
  data?: any;
982
991
  };
983
- start?: (state: TInternalState, actorCtx: ActorContext<TEvent, TSnapshot>) => TInternalState;
984
- }
985
- export declare type AnyBehavior = Behavior<any, any, any>;
986
- export declare type SnapshotFrom<T> = ReturnTypeOrValue<T> extends infer R ? R extends ActorRef<infer _, infer TSnapshot> ? TSnapshot : R extends Interpreter<infer TBehavior> ? SnapshotFrom<TBehavior> : R extends Behavior<infer _, infer TSnapshot> ? TSnapshot : R extends ActorContext<infer _, infer TSnapshot> ? TSnapshot : never : never;
987
- export declare type EventFromBehavior<TBehavior extends Behavior<any, any>> = TBehavior extends Behavior<infer TEvent, infer _> ? TEvent : never;
988
- declare type ResolveEventType<T> = ReturnTypeOrValue<T> extends infer R ? R extends StateMachine<infer _, infer TEvent, infer __, infer ___, infer ____> ? TEvent : R extends State<infer _, infer TEvent, infer __> ? TEvent : R extends Interpreter<infer _, infer TEvent> ? TEvent : R extends ActorRef<infer TEvent, infer _> ? TEvent : never : never;
989
- export declare type EventFrom<T, K extends Prop<TEvent, 'type'> = never, TEvent extends EventObject = ResolveEventType<T>> = IsNever<K> extends true ? TEvent : ExtractEvent<TEvent, K>;
990
- export declare type ContextFrom<T> = ReturnTypeOrValue<T> extends infer R ? R extends StateMachine<infer TContext, infer _, infer __, infer ___, infer ____> ? TContext : R extends State<infer TContext, infer _, infer __> ? TContext : R extends Interpreter<infer TBehavior> ? TBehavior extends StateMachine<infer TContext, infer _> ? TContext : never : never : never;
991
- export declare type InferEvent<E extends EventObject> = {
992
+ start?: (state: TInternalState, actorCtx: ActorContext<TEvent, TSnapshot>) => void;
993
+ /**
994
+ * @returns Persisted state
995
+ */
996
+ getPersistedState?: (state: TInternalState) => TPersisted;
997
+ }
998
+ export type AnyActorBehavior = ActorBehavior<any, any, any, any>;
999
+ export type SnapshotFrom<T> = ReturnTypeOrValue<T> extends infer R ? R extends ActorRef<infer _, infer TSnapshot> ? TSnapshot : R extends Interpreter<infer TBehavior> ? SnapshotFrom<TBehavior> : R extends ActorBehavior<infer _, infer TSnapshot> ? TSnapshot : R extends ActorContext<infer _, infer TSnapshot, infer __> ? TSnapshot : never : never;
1000
+ export type EventFromBehavior<TBehavior extends ActorBehavior<any, any>> = TBehavior extends ActorBehavior<infer TEvent, infer _> ? TEvent : never;
1001
+ export type PersistedStateFrom<TBehavior extends ActorBehavior<any, any>> = TBehavior extends ActorBehavior<infer _TEvent, infer _TSnapshot, infer _TInternalState, infer TPersisted> ? TPersisted : never;
1002
+ export type InternalStateFrom<TBehavior extends ActorBehavior<any, any>> = TBehavior extends ActorBehavior<infer _TEvent, infer _TSnapshot, infer TInternalState, infer _TPersisted> ? TInternalState : never;
1003
+ type ResolveEventType<T> = ReturnTypeOrValue<T> extends infer R ? R extends StateMachine<infer _, infer TEvent, infer __, infer ___, infer ____> ? TEvent : R extends State<infer _, infer TEvent, infer __> ? TEvent : R extends Interpreter<infer _, infer TEvent> ? TEvent : R extends ActorRef<infer TEvent, infer _> ? TEvent : never : never;
1004
+ export type EventFrom<T, K extends Prop<TEvent, 'type'> = never, TEvent extends EventObject = ResolveEventType<T>> = IsNever<K> extends true ? TEvent : ExtractEvent<TEvent, K>;
1005
+ export type ContextFrom<T> = ReturnTypeOrValue<T> extends infer R ? R extends StateMachine<infer TContext, infer _, infer __, infer ___, infer ____> ? TContext : R extends State<infer TContext, infer _, infer __> ? TContext : R extends Interpreter<infer TBehavior> ? TBehavior extends StateMachine<infer TContext, infer _> ? TContext : never : never : never;
1006
+ export type InferEvent<E extends EventObject> = {
992
1007
  [T in E['type']]: {
993
1008
  type: T;
994
1009
  } & Extract<E, {
995
1010
  type: T;
996
1011
  }>;
997
1012
  }[E['type']];
998
- export declare type TODO = any;
999
- export declare type StateValueFrom<TMachine extends AnyStateMachine> = Parameters<StateFrom<TMachine>['matches']>[0];
1000
- export declare type StateFromMachine<TMachine extends AnyStateMachine> = TMachine['initialState'];
1013
+ export type TODO = any;
1014
+ export type StateValueFrom<TMachine extends AnyStateMachine> = Parameters<StateFrom<TMachine>['matches']>[0];
1015
+ export type StateFromMachine<TMachine extends AnyStateMachine> = TMachine['initialState'];
1016
+ export interface ActorSystemInfo {
1017
+ actors: Record<string, AnyActorRef>;
1018
+ }
1019
+ export interface ActorSystem<T extends ActorSystemInfo> {
1020
+ _bookId: () => string;
1021
+ _register: (sessionId: string, actorRef: AnyActorRef) => string;
1022
+ _unregister: (actorRef: AnyActorRef) => void;
1023
+ _set: <K extends keyof T['actors']>(key: K, actorRef: T['actors'][K]) => void;
1024
+ get: <K extends keyof T['actors']>(key: K) => T['actors'][K] | undefined;
1025
+ }
1026
+ export type PersistedMachineState<TState extends AnyState> = Pick<TState, 'value' | 'output' | 'context' | '_event' | 'done' | 'historyValue'> & {
1027
+ children: {
1028
+ [K in keyof TState['children']]: {
1029
+ state: any;
1030
+ src?: string;
1031
+ };
1032
+ };
1033
+ };
1001
1034
  export {};