xstate 5.0.0-beta.22 → 5.0.0-beta.24

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 (48) hide show
  1. package/actions/dist/xstate-actions.cjs.js +1 -1
  2. package/actions/dist/xstate-actions.development.cjs.js +1 -1
  3. package/actions/dist/xstate-actions.development.esm.js +1 -1
  4. package/actions/dist/xstate-actions.esm.js +1 -1
  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/actors/dist/xstate-actors.cjs.js +1 -1
  8. package/actors/dist/xstate-actors.development.cjs.js +1 -1
  9. package/actors/dist/xstate-actors.development.esm.js +1 -1
  10. package/actors/dist/xstate-actors.esm.js +1 -1
  11. package/actors/dist/xstate-actors.umd.min.js.map +1 -1
  12. package/dist/{actions-d4305983.development.esm.js → actions-194e6dcc.development.esm.js} +100 -144
  13. package/dist/{actions-4b70fc8d.development.cjs.js → actions-43f7d40e.development.cjs.js} +99 -144
  14. package/dist/{actions-8f2e997e.cjs.js → actions-6a8cda73.cjs.js} +95 -148
  15. package/dist/{actions-fb7384f8.esm.js → actions-7b182232.esm.js} +96 -148
  16. package/dist/declarations/src/Machine.d.ts +2 -2
  17. package/dist/declarations/src/State.d.ts +5 -5
  18. package/dist/declarations/src/StateMachine.d.ts +27 -19
  19. package/dist/declarations/src/StateNode.d.ts +9 -9
  20. package/dist/declarations/src/actions/assign.d.ts +6 -6
  21. package/dist/declarations/src/actions/cancel.d.ts +7 -7
  22. package/dist/declarations/src/actions/choose.d.ts +4 -10
  23. package/dist/declarations/src/actions/log.d.ts +7 -7
  24. package/dist/declarations/src/actions/pure.d.ts +6 -17
  25. package/dist/declarations/src/actions/raise.d.ts +3 -3
  26. package/dist/declarations/src/actions/send.d.ts +22 -22
  27. package/dist/declarations/src/actions/stop.d.ts +7 -7
  28. package/dist/declarations/src/guards.d.ts +17 -8
  29. package/dist/declarations/src/interpreter.d.ts +1 -1
  30. package/dist/declarations/src/stateUtils.d.ts +12 -12
  31. package/dist/declarations/src/typegenTypes.d.ts +6 -2
  32. package/dist/declarations/src/types.d.ts +130 -192
  33. package/dist/declarations/src/utils.d.ts +8 -8
  34. package/dist/xstate.cjs.js +10 -7
  35. package/dist/xstate.development.cjs.js +10 -7
  36. package/dist/xstate.development.esm.js +11 -8
  37. package/dist/xstate.esm.js +11 -8
  38. package/dist/xstate.umd.min.js +1 -1
  39. package/dist/xstate.umd.min.js.map +1 -1
  40. package/guards/dist/xstate-guards.cjs.js +1 -2
  41. package/guards/dist/xstate-guards.cjs.mjs +1 -2
  42. package/guards/dist/xstate-guards.development.cjs.js +1 -2
  43. package/guards/dist/xstate-guards.development.cjs.mjs +1 -2
  44. package/guards/dist/xstate-guards.development.esm.js +1 -1
  45. package/guards/dist/xstate-guards.esm.js +1 -1
  46. package/guards/dist/xstate-guards.umd.min.js +1 -1
  47. package/guards/dist/xstate-guards.umd.min.js.map +1 -1
  48. package/package.json +1 -1
@@ -4,6 +4,7 @@ import type { ActorStatus, Clock, Actor } from "./interpreter.js";
4
4
  import type { StateMachine } from "./StateMachine.js";
5
5
  import { TypegenDisabled, ResolveTypegenMeta, TypegenConstraint, MarkAllImplementationsAsProvided, AreAllImplementationsAssumedToBeProvided } from "./typegenTypes.js";
6
6
  import { PromiseActorLogic } from "./actors/promise.js";
7
+ import { Guard, GuardPredicate, UnknownGuard } from "./guards.js";
7
8
  /**
8
9
  * `T | unknown` reduces to `unknown` and that can be problematic when it comes to contextual typing.
9
10
  * It especially is a problem when the union has a function member, like here:
@@ -36,8 +37,6 @@ export type IsAny<T> = Equals<T, any>;
36
37
  export type Cast<A, B> = A extends B ? A : B;
37
38
  export type NoInfer<T> = [T][T extends any ? 0 : any];
38
39
  export type LowInfer<T> = T & {};
39
- export type EventType = string;
40
- export type ActionType = string;
41
40
  export type MetaObject = Record<string, any>;
42
41
  export type Lazy<T> = () => T;
43
42
  export type MaybeLazy<T> = T | Lazy<T>;
@@ -55,19 +54,19 @@ export interface AnyEventObject extends EventObject {
55
54
  }
56
55
  export interface ParameterizedObject {
57
56
  type: string;
58
- params?: Record<string, any>;
57
+ params?: Record<string, unknown>;
59
58
  }
60
- export interface UnifiedArg<TContext extends MachineContext, TEvent extends EventObject> {
59
+ export interface UnifiedArg<TContext extends MachineContext, TExpressionEvent extends EventObject> {
61
60
  context: TContext;
62
- event: TEvent;
63
- self: ActorRef<TEvent>;
61
+ event: TExpressionEvent;
62
+ self: ActorRef<TExpressionEvent>;
64
63
  system: ActorSystem<any>;
65
64
  }
66
65
  export type MachineContext = Record<string, any>;
67
- export interface ActionArgs<TContext extends MachineContext, TEvent extends EventObject, TAction extends ParameterizedObject = ParameterizedObject> extends UnifiedArg<TContext, TEvent> {
66
+ export interface ActionArgs<TContext extends MachineContext, TEvent extends EventObject, TAction extends ParameterizedObject | undefined> extends UnifiedArg<TContext, TEvent> {
68
67
  action: TAction;
69
68
  }
70
- export type InputFrom<T extends AnyActorLogic> = T extends StateMachine<infer _TContext, infer _TEvent, infer _TActions, infer _TActors, infer TInput, infer _TResolvedTypesMeta> ? TInput : T extends ActorLogic<infer _TEvent, infer _TSnapshot, infer _TInternalState, infer _TPersisted, infer _TSystem, infer TInput> ? TInput : never;
69
+ export type InputFrom<T extends AnyActorLogic> = T extends StateMachine<infer _TContext, infer _TEvent, infer _TActor, infer _TAction, infer _TGuard, infer TInput, infer _TOutput, infer _TResolvedTypesMeta> ? TInput : T extends ActorLogic<infer _TEvent, infer _TSnapshot, infer _TInternalState, infer _TPersisted, infer _TSystem, infer TInput> ? TInput : never;
71
70
  export type OutputFrom<T extends AnyActorLogic> = T extends ActorLogic<infer _TEvent, infer _TSnapshot, infer _TInternalState, infer _TPersisted, infer _TSystem, infer _TInput, infer TOutput> ? TOutput : never;
72
71
  export type Spawner = <T extends AnyActorLogic | string>(// TODO: read string from machine logic keys
73
72
  logic: T, options?: Partial<{
@@ -75,19 +74,24 @@ logic: T, options?: Partial<{
75
74
  systemId?: string;
76
75
  input: T extends AnyActorLogic ? InputFrom<T> : any;
77
76
  }>) => ActorRefFrom<T>;
78
- export interface AssignArgs<TContext extends MachineContext, TExpressionEvent extends EventObject> extends ActionArgs<TContext, TExpressionEvent> {
77
+ export interface AssignArgs<TContext extends MachineContext, TExpressionEvent extends EventObject, TExpressionAction extends ParameterizedObject | undefined> extends ActionArgs<TContext, TExpressionEvent, TExpressionAction> {
79
78
  spawn: Spawner;
80
79
  }
81
- export type ActionFunction<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject, TAction extends ParameterizedObject = ParameterizedObject> = {
82
- (args: ActionArgs<TContext, TExpressionEvent, TAction>): void;
80
+ export type ActionFunction<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject, TExpressionAction extends ParameterizedObject | undefined, TAction extends ParameterizedObject> = {
81
+ (args: ActionArgs<TContext, TExpressionEvent, TExpressionAction>): void;
83
82
  _out_TEvent?: TEvent;
83
+ _out_TAction?: TAction;
84
84
  };
85
- export interface ChooseBranch<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject = TExpressionEvent> {
86
- guard?: GuardConfig<TContext, TExpressionEvent>;
87
- actions: Actions<TContext, TExpressionEvent, TEvent>;
88
- }
89
- export type Action<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject = TExpressionEvent> = ActionType | ParameterizedObject | ActionFunction<TContext, TExpressionEvent, TEvent, ParameterizedObject>;
90
- export type Actions<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject = TExpressionEvent> = SingleOrArray<Action<TContext, TExpressionEvent, TEvent>>;
85
+ export interface ChooseBranch<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject = TExpressionEvent, TAction extends ParameterizedObject = ParameterizedObject, TExpressionGuard extends ParameterizedObject | undefined = ParameterizedObject | undefined, TGuard extends ParameterizedObject = ParameterizedObject> {
86
+ guard?: Guard<TContext, TExpressionEvent, TExpressionGuard, TGuard>;
87
+ actions: Actions<TContext, TExpressionEvent, TEvent, undefined, TAction>;
88
+ }
89
+ export type NoRequiredParams<T extends ParameterizedObject> = T extends any ? {
90
+ type: T['type'];
91
+ } extends T ? T['type'] : never : never;
92
+ export type Action<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject, TExpressionAction extends ParameterizedObject | undefined, TAction extends ParameterizedObject> = NoRequiredParams<TAction> | TAction | ActionFunction<TContext, TExpressionEvent, TEvent, TExpressionAction, TAction>;
93
+ export type UnknownAction = Action<MachineContext, EventObject, EventObject, ParameterizedObject | undefined, ParameterizedObject>;
94
+ export type Actions<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject, TExpressionAction extends ParameterizedObject | undefined, TAction extends ParameterizedObject> = SingleOrArray<Action<TContext, TExpressionEvent, TEvent, TExpressionAction, TAction>>;
91
95
  export type StateKey = string | AnyState;
92
96
  export interface StateValueMap {
93
97
  [key: string]: StateValue;
@@ -99,70 +103,24 @@ export interface StateValueMap {
99
103
  * - For complex state nodes, this is an object, e.g., `{ success: "someChildState" }`.
100
104
  */
101
105
  export type StateValue = string | StateValueMap;
102
- export type GuardPredicate<TContext extends MachineContext, TEvent extends EventObject> = (args: {
103
- context: TContext;
104
- event: TEvent;
105
- } & GuardArgs<TContext, TEvent>) => boolean;
106
- export interface DefaultGuardObject<TContext extends MachineContext, TEvent extends EventObject> extends ParameterizedObject {
107
- /**
108
- * Nested guards
109
- */
110
- children?: Array<GuardObject<TContext, TEvent>>;
111
- predicate?: GuardPredicate<TContext, TEvent>;
112
- }
113
- export type GuardEvaluator<TContext extends MachineContext, TEvent extends EventObject> = (guard: GuardDefinition<TContext, TEvent>, context: TContext, event: TEvent, state: State<TContext, TEvent, TODO>) => boolean;
114
- export interface GuardArgs<TContext extends MachineContext, TEvent extends EventObject> {
115
- state: State<TContext, TEvent, TODO>;
116
- guard: GuardDefinition<TContext, TEvent>;
117
- evaluate: GuardEvaluator<TContext, TEvent>;
118
- }
119
- export type GuardConfig<TContext extends MachineContext, TEvent extends EventObject> = string | GuardPredicate<TContext, TEvent> | GuardObject<TContext, TEvent>;
120
- export type GuardObject<TContext extends MachineContext, TEvent extends EventObject> = BooleanGuardObject<TContext, TEvent> | DefaultGuardObject<TContext, TEvent>;
121
- export interface GuardDefinition<TContext extends MachineContext, TEvent extends EventObject> {
122
- type: string;
123
- children?: Array<GuardDefinition<TContext, TEvent>>;
124
- predicate?: GuardPredicate<TContext, TEvent>;
125
- params: {
126
- [key: string]: any;
127
- };
128
- }
129
- export interface BooleanGuardObject<TContext extends MachineContext, TEvent extends EventObject> extends ParameterizedObject {
130
- type: 'xstate.boolean';
131
- children: Array<GuardConfig<TContext, TEvent>>;
132
- params: {
133
- op: 'and' | 'or' | 'not';
134
- };
135
- predicate: undefined;
136
- }
137
- export interface BooleanGuardDefinition<TContext extends MachineContext, TEvent extends EventObject> extends GuardDefinition<TContext, TEvent> {
138
- type: 'xstate.boolean';
139
- params: {
140
- op: 'and' | 'or' | 'not';
141
- };
142
- }
143
106
  export type TransitionTarget = SingleOrArray<string>;
144
- export interface TransitionConfig<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject = TExpressionEvent, TAction extends ParameterizedObject = ParameterizedObject> {
145
- guard?: GuardConfig<TContext, TExpressionEvent>;
146
- actions?: Actions<TContext, TExpressionEvent, TEvent>;
107
+ export interface TransitionConfig<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject, TAction extends ParameterizedObject, TGuard extends ParameterizedObject> {
108
+ guard?: Guard<TContext, TExpressionEvent, undefined, TGuard>;
109
+ actions?: Actions<TContext, TExpressionEvent, TEvent, undefined, TAction>;
147
110
  reenter?: boolean;
148
111
  target?: TransitionTarget | undefined;
149
112
  meta?: Record<string, any>;
150
113
  description?: string;
151
114
  }
152
- export interface TargetTransitionConfig<TContext extends MachineContext, TEvent extends EventObject> extends TransitionConfig<TContext, TEvent> {
115
+ export interface InitialTransitionConfig<TContext extends MachineContext, TEvent extends EventObject, TAction extends ParameterizedObject, TGuard extends ParameterizedObject> extends TransitionConfig<TContext, TEvent, TEvent, TAction, TGuard> {
153
116
  target: TransitionTarget;
154
117
  }
155
- export type ConditionalTransitionConfig<TContext extends MachineContext, TEvent extends EventObject = EventObject> = Array<TransitionConfig<TContext, TEvent>>;
156
- export interface InitialTransitionConfig<TContext extends MachineContext, TEvent extends EventObject> extends TransitionConfig<TContext, TEvent> {
157
- guard?: never;
158
- target: TransitionTarget;
159
- }
160
- export type Transition<TContext extends MachineContext, TEvent extends EventObject = EventObject> = string | TransitionConfig<TContext, TEvent> | ConditionalTransitionConfig<TContext, TEvent>;
118
+ export type AnyTransitionConfig = TransitionConfig<any, any, any, any, any>;
161
119
  export interface InvokeMeta {
162
120
  src: string;
163
121
  meta: MetaObject | undefined;
164
122
  }
165
- export interface InvokeDefinition<TContext extends MachineContext, TEvent extends EventObject> {
123
+ export interface InvokeDefinition<TContext extends MachineContext, TEvent extends EventObject, TAction extends ParameterizedObject, TGuard extends ParameterizedObject> {
166
124
  id: string;
167
125
  systemId: string | undefined;
168
126
  /**
@@ -173,13 +131,13 @@ export interface InvokeDefinition<TContext extends MachineContext, TEvent extend
173
131
  /**
174
132
  * The transition to take upon the invoked child machine reaching its final top-level state.
175
133
  */
176
- onDone?: string | SingleOrArray<TransitionConfig<TContext, DoneInvokeEvent<any>>>;
134
+ onDone?: string | SingleOrArray<TransitionConfig<TContext, DoneInvokeEvent<any>, DoneInvokeEvent<any>, TAction, TGuard>>;
177
135
  /**
178
136
  * The transition to take upon the invoked child machine sending an error event.
179
137
  */
180
- onError?: string | SingleOrArray<TransitionConfig<TContext, ErrorEvent<any>>>;
181
- onSnapshot?: string | SingleOrArray<TransitionConfig<TContext, SnapshotEvent<any>>>;
182
- toJSON: () => Omit<InvokeDefinition<TContext, TEvent>, 'onDone' | 'onError' | 'toJSON'>;
138
+ onError?: string | SingleOrArray<TransitionConfig<TContext, ErrorEvent<any>, ErrorEvent<any>, TAction, TGuard>>;
139
+ onSnapshot?: string | SingleOrArray<TransitionConfig<TContext, SnapshotEvent<any>, SnapshotEvent<any>, TAction, TGuard>>;
140
+ toJSON: () => Omit<InvokeDefinition<TContext, TEvent, TAction, TGuard>, 'onDone' | 'onError' | 'toJSON'>;
183
141
  meta: MetaObject | undefined;
184
142
  }
185
143
  export interface Delay {
@@ -189,27 +147,27 @@ export interface Delay {
189
147
  */
190
148
  delay: number;
191
149
  }
192
- export type DelayedTransitions<TContext extends MachineContext, TEvent extends EventObject> = Record<string | number, string | SingleOrArray<TransitionConfig<TContext, TEvent>>> | Array<TransitionConfig<TContext, TEvent> & {
150
+ export type DelayedTransitions<TContext extends MachineContext, TEvent extends EventObject, TAction extends ParameterizedObject, TGuard extends ParameterizedObject> = Record<string | number, string | SingleOrArray<TransitionConfig<TContext, TEvent, TEvent, TAction, TGuard>>> | Array<TransitionConfig<TContext, TEvent, TEvent, TAction, TGuard> & {
193
151
  delay: number | string | ((args: UnifiedArg<TContext, TEvent>) => number);
194
152
  }>;
195
153
  export type StateTypes = 'atomic' | 'compound' | 'parallel' | 'final' | 'history' | string;
196
- export type SingleOrArray<T> = T[] | T;
154
+ export type SingleOrArray<T> = readonly T[] | T;
197
155
  export type StateNodesConfig<TContext extends MachineContext, TEvent extends EventObject> = {
198
156
  [K in string]: StateNode<TContext, TEvent>;
199
157
  };
200
- export type StatesConfig<TContext extends MachineContext, TEvent extends EventObject, TAction extends ParameterizedObject, TActor extends ProvidedActor> = {
201
- [K in string]: StateNodeConfig<TContext, TEvent, TAction, TActor>;
158
+ export type StatesConfig<TContext extends MachineContext, TEvent extends EventObject, TAction extends ParameterizedObject, TGuard extends ParameterizedObject, TActor extends ProvidedActor, TOutput> = {
159
+ [K in string]: StateNodeConfig<TContext, TEvent, TAction, TGuard, TActor, TOutput>;
202
160
  };
203
161
  export type StatesDefinition<TContext extends MachineContext, TEvent extends EventObject> = {
204
162
  [K in string]: StateNodeDefinition<TContext, TEvent>;
205
163
  };
206
164
  export type TransitionConfigTarget = string | undefined;
207
- export type TransitionConfigOrTarget<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject = TExpressionEvent> = SingleOrArray<TransitionConfigTarget | TransitionConfig<TContext, TExpressionEvent, TEvent>>;
208
- export type TransitionsConfig<TContext extends MachineContext, TEvent extends EventObject> = {
209
- [K in TEvent['type'] | '*']?: K extends '*' ? TransitionConfigOrTarget<TContext, TEvent> : TransitionConfigOrTarget<TContext, ExtractEvent<TEvent, K>, TEvent>;
165
+ export type TransitionConfigOrTarget<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject, TAction extends ParameterizedObject, TGuard extends ParameterizedObject> = SingleOrArray<TransitionConfigTarget | TransitionConfig<TContext, TExpressionEvent, TEvent, TAction, TGuard>>;
166
+ export type TransitionsConfig<TContext extends MachineContext, TEvent extends EventObject, TAction extends ParameterizedObject, TGuard extends ParameterizedObject> = {
167
+ [K in TEvent['type'] | '*']?: K extends '*' ? TransitionConfigOrTarget<TContext, TEvent, TEvent, TAction, TGuard> : TransitionConfigOrTarget<TContext, ExtractEvent<TEvent, K>, TEvent, TAction, TGuard>;
210
168
  };
211
169
  type IsLiteralString<T extends string> = string extends T ? false : true;
212
- type DistributeActors<TContext extends MachineContext, TEvent extends EventObject, TActor extends ProvidedActor> = TActor extends {
170
+ type DistributeActors<TContext extends MachineContext, TEvent extends EventObject, TActor extends ProvidedActor, TAction extends ParameterizedObject, TGuard extends ParameterizedObject> = TActor extends {
213
171
  src: infer TSrc;
214
172
  } ? Compute<{
215
173
  systemId?: string;
@@ -221,12 +179,12 @@ type DistributeActors<TContext extends MachineContext, TEvent extends EventObjec
221
179
  /**
222
180
  * The transition to take upon the invoked child machine reaching its final top-level state.
223
181
  */
224
- onDone?: string | SingleOrArray<TransitionConfigOrTarget<TContext, DoneInvokeEvent<OutputFrom<TActor['logic']>>, TEvent>>;
182
+ onDone?: string | SingleOrArray<TransitionConfigOrTarget<TContext, DoneInvokeEvent<OutputFrom<TActor['logic']>>, TEvent, TAction, TGuard>>;
225
183
  /**
226
184
  * The transition to take upon the invoked child machine sending an error event.
227
185
  */
228
- onError?: string | SingleOrArray<TransitionConfigOrTarget<TContext, ErrorEvent<any>, TEvent>>;
229
- onSnapshot?: string | SingleOrArray<TransitionConfigOrTarget<TContext, SnapshotEvent<any>, TEvent>>;
186
+ onError?: string | SingleOrArray<TransitionConfigOrTarget<TContext, ErrorEvent<any>, TEvent, TAction, TGuard>>;
187
+ onSnapshot?: string | SingleOrArray<TransitionConfigOrTarget<TContext, SnapshotEvent<any>, TEvent, TAction, TGuard>>;
230
188
  /**
231
189
  * Meta data related to this invocation
232
190
  */
@@ -244,7 +202,7 @@ type DistributeActors<TContext extends MachineContext, TEvent extends EventObjec
244
202
  */
245
203
  id?: string;
246
204
  })> : never;
247
- export type InvokeConfig<TContext extends MachineContext, TEvent extends EventObject, TActor extends ProvidedActor> = IsLiteralString<TActor['src']> extends true ? DistributeActors<TContext, TEvent, TActor> : {
205
+ export type InvokeConfig<TContext extends MachineContext, TEvent extends EventObject, TActor extends ProvidedActor, TAction extends ParameterizedObject, TGuard extends ParameterizedObject> = IsLiteralString<TActor['src']> extends true ? DistributeActors<TContext, TEvent, TActor, TAction, TGuard> : {
248
206
  /**
249
207
  * The unique identifier for the invoked machine. If not specified, this
250
208
  * will be the machine's own `id`, or the URL (from `src`).
@@ -259,22 +217,23 @@ export type InvokeConfig<TContext extends MachineContext, TEvent extends EventOb
259
217
  /**
260
218
  * The transition to take upon the invoked child machine reaching its final top-level state.
261
219
  */
262
- onDone?: string | SingleOrArray<TransitionConfigOrTarget<TContext, DoneInvokeEvent<any>, TEvent>>;
220
+ onDone?: string | SingleOrArray<TransitionConfigOrTarget<TContext, DoneInvokeEvent<any>, TEvent, TAction, TGuard>>;
263
221
  /**
264
222
  * The transition to take upon the invoked child machine sending an error event.
265
223
  */
266
- onError?: string | SingleOrArray<TransitionConfigOrTarget<TContext, ErrorEvent<any>, TEvent>>;
267
- onSnapshot?: string | SingleOrArray<TransitionConfigOrTarget<TContext, SnapshotEvent<any>, TEvent>>;
224
+ onError?: string | SingleOrArray<TransitionConfigOrTarget<TContext, ErrorEvent<any>, TEvent, TAction, TGuard>>;
225
+ onSnapshot?: string | SingleOrArray<TransitionConfigOrTarget<TContext, SnapshotEvent<any>, TEvent, TAction, TGuard>>;
268
226
  /**
269
227
  * Meta data related to this invocation
270
228
  */
271
229
  meta?: MetaObject;
272
230
  };
273
- export interface StateNodeConfig<TContext extends MachineContext, TEvent extends EventObject, TAction extends ParameterizedObject, TActor extends ProvidedActor> {
231
+ export type AnyInvokeConfig = InvokeConfig<any, any, any, any, any>;
232
+ export interface StateNodeConfig<TContext extends MachineContext, TEvent extends EventObject, TAction extends ParameterizedObject, TGuard extends ParameterizedObject, TActor extends ProvidedActor, TOutput> {
274
233
  /**
275
234
  * The initial state transition.
276
235
  */
277
- initial?: InitialTransitionConfig<TContext, TEvent> | SingleOrArray<string> | undefined;
236
+ initial?: InitialTransitionConfig<TContext, TEvent, TAction, TGuard> | SingleOrArray<string> | undefined;
278
237
  /**
279
238
  * The type of this state node:
280
239
  *
@@ -294,38 +253,38 @@ export interface StateNodeConfig<TContext extends MachineContext, TEvent extends
294
253
  /**
295
254
  * The mapping of state node keys to their state node configurations (recursive).
296
255
  */
297
- states?: StatesConfig<TContext, TEvent, TAction, TActor> | undefined;
256
+ states?: StatesConfig<TContext, TEvent, TAction, TGuard, TActor, NonReducibleUnknown> | undefined;
298
257
  /**
299
258
  * The services to invoke upon entering this state node. These services will be stopped upon exiting this state node.
300
259
  */
301
- invoke?: SingleOrArray<TActor['src'] | InvokeConfig<TContext, TEvent, TActor>>;
260
+ invoke?: SingleOrArray<TActor['src'] | InvokeConfig<TContext, TEvent, TActor, TAction, TGuard>>;
302
261
  /**
303
262
  * The mapping of event types to their potential transition(s).
304
263
  */
305
- on?: TransitionsConfig<TContext, TEvent>;
264
+ on?: TransitionsConfig<TContext, TEvent, TAction, TGuard>;
306
265
  /**
307
266
  * The action(s) to be executed upon entering the state node.
308
267
  */
309
- entry?: Actions<TContext, TEvent, TEvent>;
268
+ entry?: Actions<TContext, TEvent, TEvent, undefined, TAction>;
310
269
  /**
311
270
  * The action(s) to be executed upon exiting the state node.
312
271
  */
313
- exit?: Actions<TContext, TEvent, TEvent>;
272
+ exit?: Actions<TContext, TEvent, TEvent, undefined, TAction>;
314
273
  /**
315
274
  * The potential transition(s) to be taken upon reaching a final child state node.
316
275
  *
317
276
  * This is equivalent to defining a `[done(id)]` transition on this state node's `on` property.
318
277
  */
319
- onDone?: string | SingleOrArray<TransitionConfig<TContext, DoneEventObject>> | undefined;
278
+ onDone?: string | SingleOrArray<TransitionConfig<TContext, DoneEventObject, DoneEventObject, TAction, TGuard>> | undefined;
320
279
  /**
321
280
  * The mapping (or array) of delays (in milliseconds) to their potential transition(s).
322
281
  * The delayed transitions are taken after the specified delay in an interpreter.
323
282
  */
324
- after?: DelayedTransitions<TContext, TEvent>;
283
+ after?: DelayedTransitions<TContext, TEvent, TAction, TGuard>;
325
284
  /**
326
285
  * An eventless transition that is always taken when this state node is active.
327
286
  */
328
- always?: TransitionConfigOrTarget<TContext, TEvent>;
287
+ always?: TransitionConfigOrTarget<TContext, TEvent, TEvent, TAction, TGuard>;
329
288
  /**
330
289
  * @private
331
290
  */
@@ -340,7 +299,7 @@ export interface StateNodeConfig<TContext extends MachineContext, TEvent extends
340
299
  * The output data will be evaluated with the current `context` and placed on the `.data` property
341
300
  * of the event.
342
301
  */
343
- output?: Mapper<TContext, TEvent, any> | NonReducibleUnknown;
302
+ output?: Mapper<TContext, TEvent, TOutput> | TOutput;
344
303
  /**
345
304
  * The unique ID of the state node, which can be referenced as a transition target via the
346
305
  * `#id` syntax.
@@ -363,6 +322,7 @@ export interface StateNodeConfig<TContext extends MachineContext, TEvent extends
363
322
  */
364
323
  target?: string;
365
324
  }
325
+ export type AnyStateNodeConfig = StateNodeConfig<any, any, any, any, any, any>;
366
326
  export interface StateNodeDefinition<TContext extends MachineContext, TEvent extends EventObject> {
367
327
  id: string;
368
328
  version?: string | undefined;
@@ -373,12 +333,12 @@ export interface StateNodeDefinition<TContext extends MachineContext, TEvent ext
373
333
  states: StatesDefinition<TContext, TEvent>;
374
334
  on: TransitionDefinitionMap<TContext, TEvent>;
375
335
  transitions: Array<TransitionDefinition<TContext, TEvent>>;
376
- entry: Action<any, any, any>[];
377
- exit: Action<any, any, any>[];
336
+ entry: UnknownAction[];
337
+ exit: UnknownAction[];
378
338
  meta: any;
379
339
  order: number;
380
340
  output?: FinalStateNodeConfig<TContext, TEvent>['output'];
381
- invoke: Array<InvokeDefinition<TContext, TEvent>>;
341
+ invoke: Array<InvokeDefinition<TContext, TEvent, TODO, TODO>>;
382
342
  description?: string;
383
343
  tags: string[];
384
344
  }
@@ -386,10 +346,10 @@ export interface StateMachineDefinition<TContext extends MachineContext, TEvent
386
346
  }
387
347
  export type AnyStateNode = StateNode<any, any>;
388
348
  export type AnyStateNodeDefinition = StateNodeDefinition<any, any>;
389
- export type AnyState = State<any, any, any, any>;
390
- export type AnyStateMachine = StateMachine<any, any, any, any, any, any>;
349
+ export type AnyState = State<any, any, any, any, any>;
350
+ export type AnyStateMachine = StateMachine<any, any, any, any, any, any, any, any>;
391
351
  export type AnyStateConfig = StateConfig<any, AnyEventObject>;
392
- export interface AtomicStateNodeConfig<TContext extends MachineContext, TEvent extends EventObject> extends StateNodeConfig<TContext, TEvent, TODO, TODO> {
352
+ export interface AtomicStateNodeConfig<TContext extends MachineContext, TEvent extends EventObject> extends StateNodeConfig<TContext, TEvent, TODO, TODO, TODO, TODO> {
393
353
  initial?: undefined;
394
354
  parallel?: false | undefined;
395
355
  states?: undefined;
@@ -407,37 +367,43 @@ export interface FinalStateNodeConfig<TContext extends MachineContext, TEvent ex
407
367
  */
408
368
  output?: Mapper<TContext, TEvent, any>;
409
369
  }
410
- export type SimpleOrStateNodeConfig<TContext extends MachineContext, TEvent extends EventObject> = AtomicStateNodeConfig<TContext, TEvent> | StateNodeConfig<TContext, TEvent, TODO, TODO>;
370
+ export type SimpleOrStateNodeConfig<TContext extends MachineContext, TEvent extends EventObject> = AtomicStateNodeConfig<TContext, TEvent> | StateNodeConfig<TContext, TEvent, TODO, TODO, TODO, TODO>;
411
371
  export type ActionFunctionMap<TContext extends MachineContext, TEvent extends EventObject, TAction extends ParameterizedObject = ParameterizedObject> = {
412
372
  [K in TAction['type']]?: ActionFunction<TContext, TEvent, TEvent, TAction extends {
413
373
  type: K;
414
- } ? TAction : never>;
374
+ } ? TAction : never, TAction>;
415
375
  };
416
- export type DelayFunctionMap<TContext extends MachineContext, TEvent extends EventObject> = Record<string, DelayConfig<TContext, TEvent>>;
417
- export type DelayConfig<TContext extends MachineContext, TEvent extends EventObject> = number | DelayExpr<TContext, TEvent>;
418
- export interface MachineImplementationsSimplified<TContext extends MachineContext, TEvent extends EventObject, TAction extends ParameterizedObject = ParameterizedObject> {
419
- guards: Record<string, GuardPredicate<TContext, TEvent>>;
376
+ type GuardMap<TContext extends MachineContext, TEvent extends EventObject, TGuard extends ParameterizedObject> = {
377
+ [K in TGuard['type']]?: GuardPredicate<TContext, TEvent, TGuard extends {
378
+ type: K;
379
+ } ? TGuard : never, TGuard>;
380
+ };
381
+ export type DelayFunctionMap<TContext extends MachineContext, TEvent extends EventObject, TAction extends ParameterizedObject> = Record<string, DelayConfig<TContext, TEvent, TAction>>;
382
+ export type DelayConfig<TContext extends MachineContext, TExpressionEvent extends EventObject, TExpressionAction extends ParameterizedObject | undefined> = number | DelayExpr<TContext, TExpressionEvent, TExpressionAction>;
383
+ export interface MachineImplementationsSimplified<TContext extends MachineContext, TEvent extends EventObject, TAction extends ParameterizedObject = ParameterizedObject, TGuard extends ParameterizedObject = ParameterizedObject> {
384
+ guards: GuardMap<TContext, TEvent, TGuard>;
420
385
  actions: ActionFunctionMap<TContext, TEvent, TAction>;
421
386
  actors: Record<string, AnyActorLogic | {
422
387
  src: AnyActorLogic;
423
388
  input: Mapper<TContext, TEvent, any> | any;
424
389
  }>;
425
- delays: DelayFunctionMap<TContext, TEvent>;
390
+ delays: DelayFunctionMap<TContext, TEvent, TAction>;
426
391
  }
427
- type MachineImplementationsActions<TContext extends MachineContext, TResolvedTypesMeta, TEventsCausingActions = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'eventsCausingActions'>, TIndexedEvents = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedEvents'>> = {
428
- [K in keyof TEventsCausingActions]?: ActionFunction<TContext, Cast<Prop<TIndexedEvents, TEventsCausingActions[K]>, EventObject>, Cast<Prop<TIndexedEvents, keyof TIndexedEvents>, EventObject>, ParameterizedObject>;
392
+ type MaybeNarrowedEvent<TIndexedEvents, TCausingLookup, K> = Cast<Prop<TIndexedEvents, K extends keyof TCausingLookup ? TCausingLookup[K] : TIndexedEvents[keyof TIndexedEvents]>, EventObject>;
393
+ type MachineImplementationsActions<TContext extends MachineContext, TResolvedTypesMeta, TEventsCausingActions = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'eventsCausingActions'>, TIndexedEvents = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedEvents'>, TIndexedActions = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedActions'>> = {
394
+ [K in keyof TIndexedActions]?: ActionFunction<TContext, MaybeNarrowedEvent<TIndexedEvents, TEventsCausingActions, K>, Cast<Prop<TIndexedEvents, keyof TIndexedEvents>, EventObject>, Cast<TIndexedActions[K], ParameterizedObject>, Cast<Prop<TIndexedActions, keyof TIndexedActions>, ParameterizedObject>>;
429
395
  };
430
396
  type MachineImplementationsActors<TContext extends MachineContext, TResolvedTypesMeta, TEventsCausingActors = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'eventsCausingActors'>, TIndexedActors = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedActors'>, TIndexedEvents = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedEvents'>, _TInvokeSrcNameMap = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'invokeSrcNameMap'>> = {
431
397
  [K in keyof TIndexedActors]?: Cast<Prop<TIndexedActors[K], 'logic'>, AnyActorLogic> | {
432
398
  src: Cast<Prop<TIndexedActors[K], 'logic'>, AnyActorLogic>;
433
- input: Mapper<TContext, Cast<Prop<TIndexedEvents, K extends keyof TEventsCausingActors ? TEventsCausingActors[K] : TIndexedEvents[keyof TIndexedEvents]>, EventObject>, InputFrom<Cast<Prop<TIndexedActors[K], 'logic'>, AnyActorLogic>>> | InputFrom<Cast<Prop<TIndexedActors[K], 'logic'>, AnyActorLogic>>;
399
+ input: Mapper<TContext, MaybeNarrowedEvent<TIndexedEvents, TEventsCausingActors, K>, InputFrom<Cast<Prop<TIndexedActors[K], 'logic'>, AnyActorLogic>>> | InputFrom<Cast<Prop<TIndexedActors[K], 'logic'>, AnyActorLogic>>;
434
400
  };
435
401
  };
436
402
  type MachineImplementationsDelays<TContext extends MachineContext, TResolvedTypesMeta, TEventsCausingDelays = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'eventsCausingDelays'>, TIndexedEvents = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedEvents'>> = {
437
- [K in keyof TEventsCausingDelays]?: DelayConfig<TContext, Cast<Prop<TIndexedEvents, TEventsCausingDelays[K]>, EventObject>>;
403
+ [K in keyof TEventsCausingDelays]?: DelayConfig<TContext, Cast<Prop<TIndexedEvents, TEventsCausingDelays[K]>, EventObject>, ParameterizedObject | undefined>;
438
404
  };
439
- type MachineImplementationsGuards<TContext extends MachineContext, TResolvedTypesMeta, TEventsCausingGuards = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'eventsCausingGuards'>, TIndexedEvents = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedEvents'>> = {
440
- [K in keyof TEventsCausingGuards]?: GuardPredicate<TContext, Cast<Prop<TIndexedEvents, TEventsCausingGuards[K]>, EventObject>> | GuardConfig<TContext, Cast<Prop<TIndexedEvents, TEventsCausingGuards[K]>, EventObject>>;
405
+ type MachineImplementationsGuards<TContext extends MachineContext, TResolvedTypesMeta, TEventsCausingGuards = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'eventsCausingGuards'>, TIndexedEvents = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedEvents'>, TIndexedGuards = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedGuards'>> = {
406
+ [K in keyof TIndexedGuards]?: Guard<TContext, MaybeNarrowedEvent<TIndexedEvents, TEventsCausingGuards, K>, Cast<TIndexedGuards[K], ParameterizedObject>, Cast<Prop<TIndexedGuards, keyof TIndexedGuards>, ParameterizedObject>>;
441
407
  };
442
408
  type MakeKeysRequired<T extends string> = {
443
409
  [K in T]: unknown;
@@ -457,14 +423,17 @@ type GenerateDelaysImplementationsPart<TContext extends MachineContext, TResolve
457
423
  type GenerateGuardsImplementationsPart<TContext extends MachineContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> = Compute<MaybeMakeMissingImplementationsRequired<'guards', Prop<TMissingImplementations, 'guards'>, TRequireMissingImplementations> & {
458
424
  guards?: MachineImplementationsGuards<TContext, TResolvedTypesMeta>;
459
425
  }>;
460
- export type InternalMachineImplementations<TContext extends MachineContext, TEvent extends EventObject, _TAction extends ParameterizedObject, TActor extends ProvidedActor, TResolvedTypesMeta, TRequireMissingImplementations extends boolean = false, TMissingImplementations = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'missingImplementations'>> = Compute<GenerateActionsImplementationsPart<TContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> & GenerateActorsImplementationsPart<TContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> & GenerateDelaysImplementationsPart<TContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> & GenerateGuardsImplementationsPart<TContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations>>;
461
- export type MachineImplementations<TContext extends MachineContext, TEvent extends EventObject, TAction extends ParameterizedObject = ParameterizedObject, TActor extends ProvidedActor = ProvidedActor, TTypesMeta extends TypegenConstraint = TypegenDisabled> = InternalMachineImplementations<TContext, TEvent, TAction, TActor, ResolveTypegenMeta<TTypesMeta, TEvent, TAction, TActor>>;
426
+ export type InternalMachineImplementations<TContext extends MachineContext, TEvent extends EventObject, TActor extends ProvidedActor, TAction extends ParameterizedObject, TResolvedTypesMeta, TRequireMissingImplementations extends boolean = false, TMissingImplementations = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'missingImplementations'>> = Compute<GenerateActionsImplementationsPart<TContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> & GenerateActorsImplementationsPart<TContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> & GenerateDelaysImplementationsPart<TContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> & GenerateGuardsImplementationsPart<TContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations>>;
427
+ export type MachineImplementations<TContext extends MachineContext, TEvent extends EventObject, TActor extends ProvidedActor = ProvidedActor, TAction extends ParameterizedObject = ParameterizedObject, TGuard extends ParameterizedObject = ParameterizedObject, TTypesMeta extends TypegenConstraint = TypegenDisabled> = InternalMachineImplementations<TContext, TEvent, TActor, TAction, ResolveTypegenMeta<TTypesMeta, TEvent, TActor, TAction, TGuard>>;
462
428
  type InitialContext<TContext extends MachineContext, TInput> = TContext | ContextFactory<TContext, TInput>;
463
429
  export type ContextFactory<TContext extends MachineContext, TInput> = ({ spawn, input }: {
464
430
  spawn: Spawner;
465
431
  input: TInput;
466
432
  }) => TContext;
467
- export type MachineConfig<TContext extends MachineContext, TEvent extends EventObject, TAction extends ParameterizedObject = ParameterizedObject, TActor extends ProvidedActor = ProvidedActor, TInput = any, TTypesMeta = TypegenDisabled> = (StateNodeConfig<NoInfer<TContext>, NoInfer<TEvent>, NoInfer<TAction>, NoInfer<TActor>> & {
433
+ type RootStateNodeConfig<TContext extends MachineContext, TEvent extends EventObject, TAction extends ParameterizedObject, TGuard extends ParameterizedObject, TActor extends ProvidedActor, TOutput> = Omit<StateNodeConfig<TContext, TEvent, TAction, TGuard, TActor, TOutput>, 'states'> & {
434
+ states?: StatesConfig<TContext, TEvent, TAction, TGuard, TActor, TOutput> | undefined;
435
+ };
436
+ export type MachineConfig<TContext extends MachineContext, TEvent extends EventObject, TAction extends ParameterizedObject = ParameterizedObject, TGuard extends ParameterizedObject = ParameterizedObject, TActor extends ProvidedActor = ProvidedActor, TInput = any, TOutput = unknown, TTypesMeta = TypegenDisabled> = (RootStateNodeConfig<NoInfer<TContext>, NoInfer<TEvent>, NoInfer<TAction>, NoInfer<TGuard>, NoInfer<TActor>, NoInfer<TOutput>> & {
468
437
  /**
469
438
  * The initial context (extended state)
470
439
  */
@@ -472,7 +441,7 @@ export type MachineConfig<TContext extends MachineContext, TEvent extends EventO
472
441
  * The machine's own version.
473
442
  */
474
443
  version?: string;
475
- types?: MachineTypes<TContext, TEvent, TActor, TInput, TTypesMeta>;
444
+ types?: MachineTypes<TContext, TEvent, TAction, TGuard, TActor, TInput, TOutput, TTypesMeta>;
476
445
  }) & (Equals<TContext, MachineContext> extends true ? {
477
446
  context?: InitialContext<LowInfer<TContext>, TInput>;
478
447
  } : {
@@ -483,20 +452,15 @@ export interface ProvidedActor {
483
452
  logic: AnyActorLogic;
484
453
  id?: string;
485
454
  }
486
- export interface MachineTypes<TContext extends MachineContext, TEvent extends EventObject, TActor extends ProvidedActor, TInput, TTypesMeta = TypegenDisabled> {
455
+ export interface MachineTypes<TContext extends MachineContext, TEvent extends EventObject, TAction extends ParameterizedObject, TGuard extends ParameterizedObject, TActor extends ProvidedActor, TInput, TOutput, TTypesMeta = TypegenDisabled> {
487
456
  context?: TContext;
488
- actions?: {
489
- type: string;
490
- [key: string]: any;
491
- };
492
- actors?: TActor;
493
457
  events?: TEvent;
494
- guards?: {
495
- type: string;
496
- [key: string]: any;
497
- };
498
- typegen?: TTypesMeta;
458
+ actors?: TActor;
459
+ actions?: TAction;
460
+ guards?: TGuard;
499
461
  input?: TInput;
462
+ output?: TOutput;
463
+ typegen?: TTypesMeta;
500
464
  }
501
465
  export interface HistoryStateNode<TContext extends MachineContext> extends StateNode<TContext> {
502
466
  history: 'shallow' | 'deep';
@@ -540,57 +504,57 @@ export interface DoneEventObject extends EventObject {
540
504
  toString(): string;
541
505
  }
542
506
  export type DoneEvent = DoneEventObject & string;
543
- export type DelayExpr<TContext extends MachineContext, TEvent extends EventObject> = (args: UnifiedArg<TContext, TEvent>) => number;
544
- export type LogExpr<TContext extends MachineContext, TEvent extends EventObject> = (args: UnifiedArg<TContext, TEvent>) => unknown;
545
- export type SendExpr<TContext extends MachineContext, TExpressionEvent extends EventObject, TSentEvent extends EventObject = AnyEventObject> = (args: UnifiedArg<TContext, TExpressionEvent>) => TSentEvent;
507
+ export type DelayExpr<TContext extends MachineContext, TExpressionEvent extends EventObject, TExpressionAction extends ParameterizedObject | undefined> = (args: ActionArgs<TContext, TExpressionEvent, TExpressionAction>) => number;
508
+ export type LogExpr<TContext extends MachineContext, TExpressionEvent extends EventObject, TExpressionAction extends ParameterizedObject | undefined> = (args: ActionArgs<TContext, TExpressionEvent, TExpressionAction>) => unknown;
509
+ export type SendExpr<TContext extends MachineContext, TExpressionEvent extends EventObject, TExpressionAction extends ParameterizedObject | undefined, TSentEvent extends EventObject> = (args: ActionArgs<TContext, TExpressionEvent, TExpressionAction>) => TSentEvent;
546
510
  export declare enum SpecialTargets {
547
511
  Parent = "#_parent",
548
512
  Internal = "#_internal"
549
513
  }
550
- export interface SendToActionOptions<TContext extends MachineContext, TEvent extends EventObject> extends RaiseActionOptions<TContext, TEvent> {
514
+ export interface SendToActionOptions<TContext extends MachineContext, TExpressionEvent extends EventObject, TExpressionAction extends ParameterizedObject | undefined> extends RaiseActionOptions<TContext, TExpressionEvent, TExpressionAction> {
551
515
  }
552
- export interface RaiseActionOptions<TContext extends MachineContext, TEvent extends EventObject> {
516
+ export interface RaiseActionOptions<TContext extends MachineContext, TExpressionEvent extends EventObject, TExpressionAction extends ParameterizedObject | undefined> {
553
517
  id?: string;
554
- delay?: number | string | DelayExpr<TContext, TEvent>;
518
+ delay?: number | string | DelayExpr<TContext, TExpressionEvent, TExpressionAction>;
555
519
  }
556
- export interface RaiseActionParams<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject> extends RaiseActionOptions<TContext, TExpressionEvent> {
557
- event: TEvent | SendExpr<TContext, TExpressionEvent, TEvent>;
520
+ export interface RaiseActionParams<TContext extends MachineContext, TExpressionEvent extends EventObject, TExpressionAction extends ParameterizedObject | undefined, TEvent extends EventObject> extends RaiseActionOptions<TContext, TExpressionEvent, TExpressionAction> {
521
+ event: TEvent | SendExpr<TContext, TExpressionEvent, TExpressionAction, TEvent>;
558
522
  }
559
- export interface SendToActionParams<TContext extends MachineContext, TEvent extends EventObject, TSentEvent extends EventObject = EventObject> extends SendToActionOptions<TContext, TEvent> {
560
- event: TSentEvent | SendExpr<TContext, TEvent, TSentEvent>;
523
+ export interface SendToActionParams<TContext extends MachineContext, TExpressionEvent extends EventObject, TExpressionAction extends ParameterizedObject | undefined, TSentEvent extends EventObject> extends SendToActionOptions<TContext, TExpressionEvent, TExpressionAction> {
524
+ event: TSentEvent | SendExpr<TContext, TExpressionEvent, TExpressionAction, TSentEvent>;
561
525
  }
562
- export type Assigner<TContext extends MachineContext, TExpressionEvent extends EventObject> = (args: AssignArgs<TContext, TExpressionEvent>) => Partial<TContext>;
563
- export type PartialAssigner<TContext extends MachineContext, TExpressionEvent extends EventObject, TKey extends keyof TContext> = (args: AssignArgs<TContext, TExpressionEvent>) => TContext[TKey];
564
- export type PropertyAssigner<TContext extends MachineContext, TExpressionEvent extends EventObject> = {
565
- [K in keyof TContext]?: PartialAssigner<TContext, TExpressionEvent, K> | TContext[K];
526
+ export type Assigner<TContext extends MachineContext, TExpressionEvent extends EventObject, TExpressionAction extends ParameterizedObject | undefined> = (args: AssignArgs<TContext, TExpressionEvent, TExpressionAction>) => Partial<TContext>;
527
+ export type PartialAssigner<TContext extends MachineContext, TExpressionEvent extends EventObject, TExpressionAction extends ParameterizedObject | undefined, TKey extends keyof TContext> = (args: AssignArgs<TContext, TExpressionEvent, TExpressionAction>) => TContext[TKey];
528
+ export type PropertyAssigner<TContext extends MachineContext, TExpressionEvent extends EventObject, TExpressionAction extends ParameterizedObject | undefined> = {
529
+ [K in keyof TContext]?: PartialAssigner<TContext, TExpressionEvent, TExpressionAction, K> | TContext[K];
566
530
  };
567
- export type Mapper<TContext extends MachineContext, TEvent extends EventObject, TParams> = (args: {
531
+ export type Mapper<TContext extends MachineContext, TEvent extends EventObject, TResult> = (args: {
568
532
  context: TContext;
569
533
  event: TEvent;
570
534
  self: ActorRef<TEvent>;
571
- }) => TParams;
535
+ }) => TResult;
572
536
  export type PropertyMapper<TContext extends MachineContext, TEvent extends EventObject, TParams extends {}> = {
573
537
  [K in keyof TParams]?: Mapper<TContext, TEvent, TParams[K]> | TParams[K];
574
538
  };
575
- export interface TransitionDefinition<TContext extends MachineContext, TEvent extends EventObject> extends Omit<TransitionConfig<TContext, TEvent>, 'target'> {
576
- target: Array<StateNode<TContext, TEvent>> | undefined;
539
+ export interface TransitionDefinition<TContext extends MachineContext, TEvent extends EventObject> extends Omit<TransitionConfig<TContext, TEvent, TEvent, TODO, TODO>, 'target' | 'guard'> {
540
+ target: ReadonlyArray<StateNode<TContext, TEvent>> | undefined;
577
541
  source: StateNode<TContext, TEvent>;
578
- actions: Action<any, any, any>[];
542
+ actions: readonly UnknownAction[];
579
543
  reenter: boolean;
580
- guard?: GuardDefinition<TContext, TEvent>;
544
+ guard?: UnknownGuard;
581
545
  eventType: TEvent['type'] | '*';
582
546
  toJSON: () => {
583
547
  target: string[] | undefined;
584
548
  source: string;
585
- actions: Action<any, any, any>[];
586
- guard?: GuardDefinition<TContext, TEvent>;
549
+ actions: readonly UnknownAction[];
550
+ guard?: UnknownGuard;
587
551
  eventType: TEvent['type'] | '*';
588
552
  meta?: Record<string, any>;
589
553
  };
590
554
  }
591
555
  export type AnyTransitionDefinition = TransitionDefinition<any, any>;
592
556
  export interface InitialTransitionDefinition<TContext extends MachineContext, TEvent extends EventObject> extends TransitionDefinition<TContext, TEvent> {
593
- target: Array<StateNode<TContext, TEvent>>;
557
+ target: ReadonlyArray<StateNode<TContext, TEvent>>;
594
558
  guard?: never;
595
559
  }
596
560
  export type TransitionDefinitionMap<TContext extends MachineContext, TEvent extends EventObject> = {
@@ -599,32 +563,7 @@ export type TransitionDefinitionMap<TContext extends MachineContext, TEvent exte
599
563
  }> : EventObject>>;
600
564
  };
601
565
  export interface DelayedTransitionDefinition<TContext extends MachineContext, TEvent extends EventObject> extends TransitionDefinition<TContext, TEvent> {
602
- delay: number | string | DelayExpr<TContext, TEvent>;
603
- }
604
- export interface Edge<TContext extends MachineContext, TEvent extends EventObject, TEventType extends TEvent['type'] = string> {
605
- event: TEventType;
606
- source: StateNode<TContext, TEvent>;
607
- target: StateNode<TContext, TEvent>;
608
- cond?: GuardConfig<TContext, TEvent & {
609
- type: TEventType;
610
- }>;
611
- actions: Array<Action<TContext, TEvent>>;
612
- meta?: MetaObject;
613
- transition: TransitionDefinition<TContext, TEvent>;
614
- }
615
- export interface NodesAndEdges<TContext extends MachineContext, TEvent extends EventObject> {
616
- nodes: StateNode[];
617
- edges: Array<Edge<TContext, TEvent, TEvent['type']>>;
618
- }
619
- export interface Segment<TContext extends MachineContext, TEvent extends EventObject> {
620
- /**
621
- * From state.
622
- */
623
- state: State<TContext, TEvent, TODO>;
624
- /**
625
- * Event from state.
626
- */
627
- event: TEvent;
566
+ delay: number | string | DelayExpr<TContext, TEvent, undefined>;
628
567
  }
629
568
  export interface StateLike<TContext extends MachineContext> {
630
569
  value: StateValue;
@@ -642,7 +581,7 @@ export interface StateConfig<TContext extends MachineContext, TEvent extends Eve
642
581
  output?: any;
643
582
  error?: unknown;
644
583
  tags?: Set<string>;
645
- machine?: StateMachine<TContext, TEvent, any, any, any, any>;
584
+ machine?: StateMachine<TContext, TEvent, any, any, any, any, any, any>;
646
585
  _internalQueue?: Array<TEvent>;
647
586
  }
648
587
  export interface ActorOptions<TLogic extends AnyActorLogic> {
@@ -734,16 +673,15 @@ export interface ActorRef<TEvent extends EventObject, TSnapshot = any> extends S
734
673
  src?: string;
735
674
  }
736
675
  export type AnyActorRef = ActorRef<any, any>;
737
- export type ActorLogicFrom<T> = ReturnTypeOrValue<T> extends infer R ? R extends StateMachine<any, any, any, any, any> ? R : R extends Promise<infer U> ? PromiseActorLogic<U> : never : never;
738
- export type ActorRefFrom<T> = ReturnTypeOrValue<T> extends infer R ? R extends StateMachine<infer TContext, infer TEvent, any, any, any, infer TResolvedTypesMeta> ? ActorRef<TEvent, State<TContext, TEvent, TODO, AreAllImplementationsAssumedToBeProvided<TResolvedTypesMeta> extends false ? MarkAllImplementationsAsProvided<TResolvedTypesMeta> : TResolvedTypesMeta>> : R extends Promise<infer U> ? ActorRefFrom<PromiseActorLogic<U>> : R extends ActorLogic<infer TEvent, infer TSnapshot, infer _, infer __, infer ___, infer ____, infer _____> ? ActorRef<TEvent, TSnapshot> : never : never;
676
+ export type ActorLogicFrom<T> = ReturnTypeOrValue<T> extends infer R ? R extends StateMachine<any, any, any, any, any, any, any, any> ? R : R extends Promise<infer U> ? PromiseActorLogic<U> : never : never;
677
+ export type ActorRefFrom<T> = ReturnTypeOrValue<T> extends infer R ? R extends StateMachine<infer TContext, infer TEvent, infer TActor, infer _TAction, infer _TGuard, infer _Tinput, infer TOutput, infer TResolvedTypesMeta> ? ActorRef<TEvent, State<TContext, TEvent, TActor, TOutput, AreAllImplementationsAssumedToBeProvided<TResolvedTypesMeta> extends false ? MarkAllImplementationsAsProvided<TResolvedTypesMeta> : TResolvedTypesMeta>> : R extends Promise<infer U> ? ActorRefFrom<PromiseActorLogic<U>> : R extends ActorLogic<infer TEvent, infer TSnapshot, infer _, infer __, infer ___, infer ____, infer _____> ? ActorRef<TEvent, TSnapshot> : never : never;
739
678
  export type DevToolsAdapter = (service: AnyActor) => void;
740
679
  /**
741
680
  * @deprecated Use `Actor<T>` instead.
742
681
  */
743
- export type InterpreterFrom<T extends AnyStateMachine | ((...args: any[]) => AnyStateMachine)> = ReturnTypeOrValue<T> extends StateMachine<infer TContext, infer TEvent, infer _TAction, infer TActor, infer TInput, infer TResolvedTypesMeta> ? Actor<ActorLogic<TEvent, State<TContext, TEvent, TActor, TResolvedTypesMeta>, State<TContext, TEvent, TActor, TResolvedTypesMeta>, PersistedMachineState<State<TContext, TEvent, TActor, TResolvedTypesMeta>>, ActorSystem<any>, TInput>> : never;
744
- export type MachineImplementationsFrom<T extends AnyStateMachine | ((...args: any[]) => AnyStateMachine), TRequireMissingImplementations extends boolean = false> = ReturnTypeOrValue<T> extends StateMachine<infer TContext, infer TEvent, infer TAction, infer TActor, infer _TInput, infer TResolvedTypesMeta> ? InternalMachineImplementations<TContext, TEvent, TAction, TActor, TResolvedTypesMeta, TRequireMissingImplementations> : never;
745
- export type __ResolvedTypesMetaFrom<T> = T extends StateMachine<any, any, any, any, any, infer TResolvedTypesMeta> ? TResolvedTypesMeta : never;
746
- export type EventOfMachine<TMachine extends AnyStateMachine> = TMachine extends StateMachine<any, infer E, any, any, any, any> ? E : never;
682
+ export type InterpreterFrom<T extends AnyStateMachine | ((...args: any[]) => AnyStateMachine)> = ReturnTypeOrValue<T> extends StateMachine<infer TContext, infer TEvent, infer TActor, infer _TAction, infer _TGuard, infer TInput, infer TOutput, infer TResolvedTypesMeta> ? Actor<ActorLogic<TEvent, State<TContext, TEvent, TActor, TOutput, TResolvedTypesMeta>, State<TContext, TEvent, TActor, TOutput, TResolvedTypesMeta>, PersistedMachineState<State<TContext, TEvent, TActor, TOutput, TResolvedTypesMeta>>, ActorSystem<any>, TInput>> : never;
683
+ export type MachineImplementationsFrom<T extends AnyStateMachine | ((...args: any[]) => AnyStateMachine), TRequireMissingImplementations extends boolean = false> = ReturnTypeOrValue<T> extends StateMachine<infer TContext, infer TEvent, infer TActor, infer TAction, infer _TGuard, infer _TInput, infer _TOutput, infer TResolvedTypesMeta> ? InternalMachineImplementations<TContext, TEvent, TActor, TAction, TResolvedTypesMeta, TRequireMissingImplementations> : never;
684
+ export type __ResolvedTypesMetaFrom<T> = T extends StateMachine<any, any, any, any, any, any, any, infer TResolvedTypesMeta> ? TResolvedTypesMeta : never;
747
685
  export interface ActorContext<TEvent extends EventObject, TSnapshot, TSystem extends ActorSystem<any> = ActorSystem<any>> {
748
686
  self: ActorRef<TEvent, TSnapshot>;
749
687
  id: string;
@@ -782,13 +720,13 @@ any, // persisted state
782
720
  any, // system
783
721
  any, // input
784
722
  any>;
785
- export type SnapshotFrom<T> = ReturnTypeOrValue<T> extends infer R ? R extends ActorRef<infer _, infer TSnapshot> ? TSnapshot : R extends Actor<infer TLogic> ? SnapshotFrom<TLogic> : R extends StateMachine<infer _, infer __, infer ___, infer ____, infer _____, infer ______> ? StateFrom<R> : R extends ActorLogic<infer _, infer TSnapshot, infer __, infer ___, infer ____> ? TSnapshot : R extends ActorContext<infer _, infer TSnapshot, infer __> ? TSnapshot : never : never;
723
+ export type SnapshotFrom<T> = ReturnTypeOrValue<T> extends infer R ? R extends ActorRef<infer _, infer TSnapshot> ? TSnapshot : R extends Actor<infer TLogic> ? SnapshotFrom<TLogic> : R extends StateMachine<infer _, infer __, infer ___, infer ____, infer _____, infer ______, infer _______, infer ________> ? StateFrom<R> : R extends ActorLogic<infer _, infer TSnapshot, infer __, infer ___, infer ____> ? TSnapshot : R extends ActorContext<infer _, infer TSnapshot, infer __> ? TSnapshot : never : never;
786
724
  export type EventFromLogic<TLogic extends ActorLogic<any, any>> = TLogic extends ActorLogic<infer TEvent, infer _, infer __, infer ___, infer ____> ? TEvent : never;
787
725
  export type PersistedStateFrom<TLogic extends ActorLogic<any, any>> = TLogic extends ActorLogic<infer _TEvent, infer _TSnapshot, infer _TInternalState, infer TPersisted> ? TPersisted : never;
788
726
  export type InternalStateFrom<TLogic extends ActorLogic<any, any>> = TLogic extends ActorLogic<infer _TEvent, infer _TSnapshot, infer TInternalState, infer _TPersisted> ? TInternalState : never;
789
- type ResolveEventType<T> = ReturnTypeOrValue<T> extends infer R ? R extends StateMachine<infer _, infer TEvent, infer __, infer ___, infer ____, infer _____> ? TEvent : R extends State<infer _TContext, infer TEvent, infer _TAction, infer _TActor> ? TEvent : R extends ActorRef<infer TEvent, infer _> ? TEvent : never : never;
727
+ type ResolveEventType<T> = ReturnTypeOrValue<T> extends infer R ? R extends StateMachine<infer _TContext, infer TEvent, infer _TActor, infer _TAction, infer _TGuard, infer _TInput, infer _TOutput, infer _TResolvedTypesMeta> ? TEvent : R extends State<infer _TContext, infer TEvent, infer _TActor, infer _TOutput, infer _TResolvedTypesMeta> ? TEvent : R extends ActorRef<infer TEvent, infer _> ? TEvent : never : never;
790
728
  export type EventFrom<T, K extends Prop<TEvent, 'type'> = never, TEvent extends EventObject = ResolveEventType<T>> = IsNever<K> extends true ? TEvent : ExtractEvent<TEvent, K>;
791
- export type ContextFrom<T> = ReturnTypeOrValue<T> extends infer R ? R extends StateMachine<infer TContext, infer _, infer __, infer ___, infer ____, infer _____> ? TContext : R extends State<infer TContext, infer _TEvent, infer _TAction, infer _TActor> ? TContext : R extends Actor<infer TActorLogic> ? TActorLogic extends StateMachine<infer TContext, infer _TEvent, infer _TActions, infer _TActors, infer _TInput, infer _TTypesMeta> ? TContext : never : never : never;
729
+ export type ContextFrom<T> = ReturnTypeOrValue<T> extends infer R ? R extends StateMachine<infer TContext, infer _, infer __, infer ___, infer ____, infer _____, infer ______, infer _______> ? TContext : R extends State<infer TContext, infer _TEvent, infer _TActor, infer _TOutput, infer _TResolvedTypesMeta> ? TContext : R extends Actor<infer TActorLogic> ? TActorLogic extends StateMachine<infer TContext, infer _TEvent, infer _TActor, infer _TAction, infer _TGuard, infer _TInput, infer _TOutput, infer _TTypesMeta> ? TContext : never : never : never;
792
730
  export type InferEvent<E extends EventObject> = {
793
731
  [T in E['type']]: {
794
732
  type: T;