xstate 5.0.0-alpha.0 → 5.0.0-alpha.2

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 (97) hide show
  1. package/README.md +26 -15
  2. package/actions/dist/xstate-actions.cjs.dev.js +24 -25
  3. package/actions/dist/xstate-actions.cjs.prod.js +23 -24
  4. package/actions/dist/xstate-actions.esm.js +2 -2
  5. package/actions/dist/xstate-actions.umd.min.js +2 -0
  6. package/actions/dist/xstate-actions.umd.min.js.map +1 -0
  7. package/actions/dynamicAction.ts +15 -7
  8. package/actions/package.json +5 -1
  9. package/actors/dist/xstate-actors.cjs.d.ts +1 -1
  10. package/actors/dist/xstate-actors.cjs.dev.js +14 -14
  11. package/actors/dist/xstate-actors.cjs.prod.js +13 -13
  12. package/actors/dist/xstate-actors.esm.js +2 -2
  13. package/actors/dist/xstate-actors.umd.min.js +2 -0
  14. package/actors/dist/xstate-actors.umd.min.js.map +1 -0
  15. package/actors/package.json +5 -1
  16. package/dev/dist/xstate-dev.cjs.dev.js +1 -1
  17. package/dev/dist/xstate-dev.cjs.prod.js +0 -11
  18. package/dev/dist/xstate-dev.esm.js +1 -1
  19. package/dev/dist/xstate-dev.umd.min.js +2 -0
  20. package/dev/dist/xstate-dev.umd.min.js.map +1 -0
  21. package/dev/package.json +5 -1
  22. package/dist/{actions-6b86876d.cjs.dev.js → actions-1e9778c2.cjs.dev.js} +2819 -3334
  23. package/dist/actions-9778f6fb.esm.js +4246 -0
  24. package/dist/actions-acb29ffe.cjs.prod.js +4262 -0
  25. package/dist/declarations/actions/dynamicAction.d.ts +5 -3
  26. package/dist/declarations/src/Machine.d.ts +4 -4
  27. package/dist/declarations/src/Mailbox.d.ts +12 -12
  28. package/dist/declarations/src/SimulatedClock.d.ts +16 -16
  29. package/dist/declarations/src/State.d.ts +97 -104
  30. package/dist/declarations/src/StateMachine.d.ts +110 -112
  31. package/dist/declarations/src/StateNode.d.ts +127 -127
  32. package/dist/declarations/src/actionTypes.d.ts +16 -17
  33. package/dist/declarations/src/actions/assign.d.ts +7 -7
  34. package/dist/declarations/src/actions/cancel.d.ts +10 -10
  35. package/dist/declarations/src/actions/choose.d.ts +3 -3
  36. package/dist/declarations/src/actions/invoke.d.ts +3 -3
  37. package/dist/declarations/src/actions/log.d.ts +11 -11
  38. package/dist/declarations/src/actions/pure.d.ts +3 -3
  39. package/dist/declarations/src/actions/raise.d.ts +8 -9
  40. package/dist/declarations/src/actions/send.d.ts +53 -55
  41. package/dist/declarations/src/actions/stop.d.ts +7 -8
  42. package/dist/declarations/src/actions.d.ts +47 -44
  43. package/dist/declarations/src/actors/callback.d.ts +8 -0
  44. package/dist/declarations/src/actors/index.d.ts +27 -0
  45. package/dist/declarations/src/actors/observable.d.ts +23 -0
  46. package/dist/declarations/src/actors/promise.d.ts +12 -0
  47. package/dist/declarations/src/actors/transition.d.ts +13 -0
  48. package/dist/declarations/src/constants.d.ts +5 -5
  49. package/dist/declarations/src/dev/index.d.ts +14 -14
  50. package/dist/declarations/src/environment.d.ts +1 -1
  51. package/dist/declarations/src/guards.d.ts +8 -9
  52. package/dist/declarations/src/index.d.ts +44 -47
  53. package/dist/declarations/src/interpreter.d.ts +104 -147
  54. package/dist/declarations/src/mapState.d.ts +3 -3
  55. package/dist/declarations/src/memo.d.ts +2 -1
  56. package/dist/declarations/src/schema.d.ts +2 -2
  57. package/dist/declarations/src/spawn.d.ts +2 -2
  58. package/dist/declarations/src/stateUtils.d.ts +70 -85
  59. package/dist/declarations/src/symbolObservable.d.ts +1 -0
  60. package/dist/declarations/src/system.d.ts +2 -0
  61. package/dist/declarations/src/typegenTypes.d.ts +132 -132
  62. package/dist/declarations/src/types.d.ts +1008 -1026
  63. package/dist/declarations/src/utils.d.ts +58 -56
  64. package/dist/{index-20b364c4.esm.js → index-50bd0aff.esm.js} +0 -12
  65. package/dist/{index-2a564d03.cjs.dev.js → index-ebaab3c9.cjs.dev.js} +0 -12
  66. package/dist/xstate.cjs.dev.js +798 -100
  67. package/dist/xstate.cjs.prod.js +797 -99
  68. package/dist/xstate.esm.js +756 -55
  69. package/dist/xstate.umd.min.js +2 -0
  70. package/dist/xstate.umd.min.js.map +1 -0
  71. package/guards/dist/xstate-guards.cjs.dev.js +8 -8
  72. package/guards/dist/xstate-guards.cjs.prod.js +7 -7
  73. package/guards/dist/xstate-guards.esm.js +2 -2
  74. package/guards/dist/xstate-guards.umd.min.js +2 -0
  75. package/guards/dist/xstate-guards.umd.min.js.map +1 -0
  76. package/guards/package.json +5 -1
  77. package/package.json +28 -6
  78. package/CHANGELOG.md +0 -1986
  79. package/actions/ExecutableAction.ts +0 -58
  80. package/dist/Machine-9ce74c11.cjs.dev.js +0 -755
  81. package/dist/Machine-dca041dc.cjs.prod.js +0 -749
  82. package/dist/Machine-fb2f47f5.esm.js +0 -751
  83. package/dist/actions-70094c93.cjs.prod.js +0 -4765
  84. package/dist/actions-ff512f16.esm.js +0 -4757
  85. package/dist/declarations/actions/ExecutableAction.d.ts +0 -23
  86. package/dist/declarations/src/ObservableActorRef.d.ts +0 -25
  87. package/dist/declarations/src/actors.d.ts +0 -38
  88. package/dist/declarations/src/match.d.ts +0 -5
  89. package/dist/declarations/src/model.d.ts +0 -5
  90. package/dist/declarations/src/model.types.d.ts +0 -53
  91. package/dist/declarations/src/registry.d.ts +0 -8
  92. package/model/dist/xstate-model.cjs.d.ts +0 -1
  93. package/model/dist/xstate-model.cjs.dev.js +0 -41
  94. package/model/dist/xstate-model.cjs.js +0 -7
  95. package/model/dist/xstate-model.cjs.prod.js +0 -41
  96. package/model/dist/xstate-model.esm.js +0 -37
  97. package/model/package.json +0 -4
@@ -1,1026 +1,1008 @@
1
- import type { StateNode } from './StateNode';
2
- import type { State } from './State';
3
- import type { Clock, Interpreter } from './interpreter';
4
- import type { StateMachine } from './StateMachine';
5
- import type { LifecycleSignal } from './actors';
6
- import type { Model } from './model.types';
7
- import { TypegenDisabled, ResolveTypegenMeta, TypegenConstraint, MarkAllImplementationsAsProvided, AreAllImplementationsAssumedToBeProvided } from './typegenTypes';
8
- export declare type AnyFunction = (...args: any[]) => any;
9
- declare type ReturnTypeOrValue<T> = T extends AnyFunction ? ReturnType<T> : T;
10
- export declare type IsNever<T> = [T] extends [never] ? true : false;
11
- export declare type Compute<A extends any> = {
12
- [K in keyof A]: A[K];
13
- } & unknown;
14
- export declare type Prop<T, K> = K extends keyof T ? T[K] : never;
15
- export declare type Values<T> = T[keyof T];
16
- export declare type Merge<M, N> = Omit<M, keyof N> & N;
17
- export declare type IndexByType<T extends {
18
- type: string;
19
- }> = {
20
- [K in T['type']]: T extends any ? (K extends T['type'] ? T : never) : never;
21
- };
22
- export declare type Equals<A1 extends any, A2 extends any> = (<A>() => A extends A2 ? true : false) extends <A>() => A extends A1 ? true : false ? true : false;
23
- export declare type IsAny<T> = Equals<T, any>;
24
- export declare type Cast<A, B> = A extends B ? A : B;
25
- export declare type NoInfer<T> = [T][T extends any ? 0 : any];
26
- export declare type LowInfer<T> = T & {};
27
- export declare type EventType = string;
28
- export declare type ActionType = string;
29
- export declare type MetaObject = Record<string, any>;
30
- export declare type Lazy<T> = () => T;
31
- export declare type MaybeLazy<T> = T | Lazy<T>;
32
- /**
33
- * The full definition of an event, with a string `type`.
34
- */
35
- export interface EventObject {
36
- /**
37
- * The type of event that is sent.
38
- */
39
- type: string;
40
- }
41
- export interface AnyEventObject extends EventObject {
42
- [key: string]: any;
43
- }
44
- export interface BaseActionObject {
45
- type: string;
46
- params?: Record<string, any>;
47
- }
48
- export interface BuiltInActionObject {
49
- type: `xstate.${string}`;
50
- params: Record<string, any>;
51
- }
52
- export interface BaseDynamicActionObject<TContext extends MachineContext, TEvent extends EventObject, TResolvedAction extends BaseActionObject, TDynamicParams extends Record<string, any>> {
53
- type: `xstate.${string}`;
54
- params: TDynamicParams;
55
- resolve: (dynamicAction: BaseDynamicActionObject<TContext, TEvent, TResolvedAction, TDynamicParams>, context: TContext, _event: SCXML.Event<TEvent>, extra: {
56
- machine: StateMachine<TContext, TEvent>;
57
- state: State<TContext, TEvent>;
58
- /**
59
- * The original action object
60
- */
61
- action: BaseActionObject;
62
- }) => TResolvedAction;
63
- }
64
- export declare type MachineContext = Record<string, any>;
65
- /**
66
- * The specified string event types or the specified event objects.
67
- */
68
- export declare type Event<TEvent extends EventObject> = TEvent['type'] | TEvent;
69
- export interface ActionMeta<TContext extends MachineContext, TEvent extends EventObject, TAction extends BaseActionObject = BaseActionObject> extends StateMeta<TContext, TEvent> {
70
- action: TAction;
71
- _event: SCXML.Event<TEvent>;
72
- }
73
- export declare type Spawner = <T extends Behavior<any, any> | string>(// TODO: read string from machine behavior keys
74
- behavior: T, name?: string) => T extends Behavior<infer TActorEvent, infer TActorEmitted> ? ActorRef<TActorEvent, TActorEmitted> : ActorRef<any, any>;
75
- export interface AssignMeta<TContext extends MachineContext, TEvent extends EventObject> {
76
- state: State<TContext, TEvent>;
77
- action: BaseActionObject;
78
- _event: SCXML.Event<TEvent>;
79
- spawn: Spawner;
80
- }
81
- export declare type ActionFunction<TContext extends MachineContext, TEvent extends EventObject, TAction extends BaseActionObject = BaseActionObject> = {
82
- bivarianceHack(context: TContext, event: TEvent, meta: ActionMeta<TContext, TEvent, TAction>): void;
83
- }['bivarianceHack'];
84
- export interface ChooseCondition<TContext extends MachineContext, TEvent extends EventObject> {
85
- guard?: GuardConfig<TContext, TEvent>;
86
- actions: Actions<TContext, TEvent>;
87
- }
88
- export declare type Action<TContext extends MachineContext, TEvent extends EventObject> = ActionType | BaseActionObject | ActionFunction<TContext, TEvent> | BaseDynamicActionObject<TContext, TEvent, any, any>;
89
- /**
90
- * Extracts action objects that have no extra properties.
91
- */
92
- declare type SimpleActionsFrom<T extends BaseActionObject> = BaseActionObject extends T ? T : ExtractWithSimpleSupport<T>;
93
- 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
94
- any> | TAction | SimpleActionsFrom<TAction>['type'] | ActionFunction<TContext, TEvent>;
95
- export declare type BaseActions<TContext extends MachineContext, TEvent extends EventObject, TAction extends BaseActionObject> = SingleOrArray<BaseAction<TContext, TEvent, TAction>>;
96
- export declare type Actions<TContext extends MachineContext, TEvent extends EventObject> = SingleOrArray<Action<TContext, TEvent>>;
97
- export declare type StateKey = string | AnyState;
98
- export interface StateValueMap {
99
- [key: string]: StateValue;
100
- }
101
- /**
102
- * The string or object representing the state value relative to the parent state node.
103
- *
104
- * - For a child atomic state node, this is a string, e.g., `"pending"`.
105
- * - For complex state nodes, this is an object, e.g., `{ success: "someChildState" }`.
106
- */
107
- export declare type StateValue = string | StateValueMap;
108
- export declare type GuardPredicate<TContext extends MachineContext, TEvent extends EventObject> = (context: TContext, event: TEvent, meta: GuardMeta<TContext, TEvent>) => boolean;
109
- export interface DefaultGuardObject<TContext extends MachineContext, TEvent extends EventObject> {
110
- type: string;
111
- params?: {
112
- [key: string]: any;
113
- };
114
- /**
115
- * Nested guards
116
- */
117
- children?: Array<GuardObject<TContext, TEvent>>;
118
- predicate?: GuardPredicate<TContext, TEvent>;
119
- }
120
- 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;
121
- export interface GuardMeta<TContext extends MachineContext, TEvent extends EventObject> extends StateMeta<TContext, TEvent> {
122
- guard: GuardDefinition<TContext, TEvent>;
123
- evaluate: GuardEvaluator<TContext, TEvent>;
124
- }
125
- export declare type GuardConfig<TContext extends MachineContext, TEvent extends EventObject> = string | GuardPredicate<TContext, TEvent> | GuardObject<TContext, TEvent>;
126
- export declare type GuardObject<TContext extends MachineContext, TEvent extends EventObject> = BooleanGuardObject<TContext, TEvent> | DefaultGuardObject<TContext, TEvent>;
127
- export interface GuardDefinition<TContext extends MachineContext, TEvent extends EventObject> {
128
- type: string;
129
- children?: Array<GuardDefinition<TContext, TEvent>>;
130
- predicate?: GuardPredicate<TContext, TEvent>;
131
- params: {
132
- [key: string]: any;
133
- };
134
- }
135
- export interface BooleanGuardObject<TContext extends MachineContext, TEvent extends EventObject> {
136
- type: 'xstate.boolean';
137
- children: Array<GuardConfig<TContext, TEvent>>;
138
- params: {
139
- op: 'and' | 'or' | 'not';
140
- };
141
- predicate: undefined;
142
- }
143
- export interface BooleanGuardDefinition<TContext extends MachineContext, TEvent extends EventObject> extends GuardDefinition<TContext, TEvent> {
144
- type: 'xstate.boolean';
145
- params: {
146
- op: 'and' | 'or' | 'not';
147
- };
148
- }
149
- export declare type TransitionTarget<TContext extends MachineContext, TEvent extends EventObject> = SingleOrArray<string | StateNode<TContext, TEvent>>;
150
- export declare type TransitionTargets<TContext extends MachineContext> = Array<string | StateNode<TContext, any>>;
151
- export interface TransitionConfig<TContext extends MachineContext, TEvent extends EventObject, TAction extends BaseActionObject = BaseActionObject> {
152
- guard?: GuardConfig<TContext, TEvent>;
153
- actions?: BaseActions<TContext, TEvent, TAction>;
154
- internal?: boolean;
155
- target?: TransitionTarget<TContext, TEvent> | undefined;
156
- meta?: Record<string, any>;
157
- description?: string;
158
- }
159
- export interface TargetTransitionConfig<TContext extends MachineContext, TEvent extends EventObject> extends TransitionConfig<TContext, TEvent> {
160
- target: TransitionTarget<TContext, TEvent>;
161
- }
162
- export declare type ConditionalTransitionConfig<TContext extends MachineContext, TEvent extends EventObject = EventObject> = Array<TransitionConfig<TContext, TEvent>>;
163
- export interface InitialTransitionConfig<TContext extends MachineContext, TEvent extends EventObject> extends TransitionConfig<TContext, TEvent> {
164
- guard?: never;
165
- target: TransitionTarget<TContext, TEvent>;
166
- }
167
- export declare type Transition<TContext extends MachineContext, TEvent extends EventObject = EventObject> = string | TransitionConfig<TContext, TEvent> | ConditionalTransitionConfig<TContext, TEvent>;
168
- declare type ExcludeType<A> = {
169
- [K in Exclude<keyof A, 'type'>]: A[K];
170
- };
171
- declare type ExtractExtraParameters<A, T> = A extends {
172
- type: T;
173
- } ? ExcludeType<A> : never;
174
- declare type ExtractWithSimpleSupport<T extends {
175
- type: string;
176
- }> = T extends any ? {
177
- type: T['type'];
178
- } extends T ? T : never : never;
179
- declare type NeverIfEmpty<T> = {} extends T ? never : T;
180
- export interface PayloadSender<TEvent extends EventObject> {
181
- /**
182
- * Send an event object or just the event type, if the event has no other payload
183
- */
184
- (event: SCXML.Event<TEvent> | TEvent | ExtractWithSimpleSupport<TEvent>['type']): void;
185
- /**
186
- * Send an event type and its payload
187
- */
188
- <K extends TEvent['type']>(eventType: K, payload: NeverIfEmpty<ExtractExtraParameters<TEvent, K>>): void;
189
- }
190
- export declare type Receiver<TEvent extends EventObject> = (listener: {
191
- bivarianceHack(event: TEvent): void;
192
- }['bivarianceHack']) => void;
193
- export declare type InvokeCallback<TEvent extends EventObject = AnyEventObject, TSentEvent extends EventObject = AnyEventObject> = (callback: Sender<TSentEvent>, onReceive: Receiver<TEvent>) => (() => void) | Promise<any> | void;
194
- export declare type BehaviorCreator<TContext extends MachineContext, TEvent extends EventObject, TSnapshot = any> = (context: TContext, event: TEvent, meta: {
195
- id: string;
196
- data?: any;
197
- src: InvokeSourceDefinition;
198
- _event: SCXML.Event<TEvent>;
199
- meta: MetaObject | undefined;
200
- }) => Behavior<any, TSnapshot>;
201
- export interface InvokeMeta {
202
- data: any;
203
- src: InvokeSourceDefinition;
204
- meta: MetaObject | undefined;
205
- }
206
- export interface InvokeDefinition<TContext extends MachineContext, TEvent extends EventObject> {
207
- id: string;
208
- /**
209
- * The source of the actor's behavior to be invoked
210
- */
211
- src: InvokeSourceDefinition;
212
- /**
213
- * If `true`, events sent to the parent service will be forwarded to the invoked service.
214
- *
215
- * Default: `false`
216
- */
217
- autoForward?: boolean;
218
- /**
219
- * Data from the parent machine's context to set as the (partial or full) context
220
- * for the invoked child machine.
221
- *
222
- * Data should be mapped to match the child machine's context shape.
223
- */
224
- data?: Mapper<TContext, TEvent, any> | PropertyMapper<TContext, TEvent, any>;
225
- /**
226
- * The transition to take upon the invoked child machine reaching its final top-level state.
227
- */
228
- onDone?: string | SingleOrArray<TransitionConfig<TContext, DoneInvokeEvent<any>>>;
229
- /**
230
- * The transition to take upon the invoked child machine sending an error event.
231
- */
232
- onError?: string | SingleOrArray<TransitionConfig<TContext, ErrorEvent<any>>>;
233
- onSnapshot?: string | SingleOrArray<TransitionConfig<TContext, SnapshotEvent<any>>>;
234
- toJSON: () => Omit<InvokeDefinition<TContext, TEvent>, 'onDone' | 'onError' | 'toJSON'>;
235
- meta: MetaObject | undefined;
236
- }
237
- export interface Delay {
238
- id: string;
239
- /**
240
- * The time to delay the event, in milliseconds.
241
- */
242
- delay: number;
243
- }
244
- export declare type DelayedTransitions<TContext extends MachineContext, TEvent extends EventObject> = Record<string | number, string | SingleOrArray<TransitionConfig<TContext, TEvent>>> | Array<TransitionConfig<TContext, TEvent> & {
245
- delay: number | string | Expr<TContext, TEvent, number>;
246
- }>;
247
- export declare type StateTypes = 'atomic' | 'compound' | 'parallel' | 'final' | 'history' | string;
248
- export declare type SingleOrArray<T> = T[] | T;
249
- export declare type StateNodesConfig<TContext extends MachineContext, TEvent extends EventObject> = {
250
- [K in string]: StateNode<TContext, TEvent>;
251
- };
252
- export declare type StatesConfig<TContext extends MachineContext, TEvent extends EventObject, TAction extends BaseActionObject = BaseActionObject> = {
253
- [K in string]: StateNodeConfig<TContext, TEvent, TAction>;
254
- };
255
- export declare type StatesDefinition<TContext extends MachineContext, TEvent extends EventObject> = {
256
- [K in string]: StateNodeDefinition<TContext, TEvent>;
257
- };
258
- export declare type TransitionConfigTarget<TContext extends MachineContext, TEvent extends EventObject> = string | undefined | StateNode<TContext, TEvent>;
259
- export declare type TransitionConfigOrTarget<TContext extends MachineContext, TEvent extends EventObject> = SingleOrArray<TransitionConfigTarget<TContext, TEvent> | TransitionConfig<TContext, TEvent>>;
260
- export declare type TransitionsConfigMap<TContext extends MachineContext, TEvent extends EventObject> = {
261
- [K in TEvent['type'] | '' | '*']?: K extends '' | '*' ? TransitionConfigOrTarget<TContext, TEvent> : TransitionConfigOrTarget<TContext, ExtractEvent<TEvent, K>>;
262
- };
263
- declare type TransitionsConfigArray<TContext extends MachineContext, TEvent extends EventObject> = Array<(TEvent extends EventObject ? TransitionConfig<TContext, TEvent> & {
264
- event: TEvent['type'];
265
- } : never) | (TransitionConfig<TContext, TEvent> & {
266
- event: '*';
267
- })>;
268
- export declare type TransitionsConfig<TContext extends MachineContext, TEvent extends EventObject> = TransitionsConfigMap<TContext, TEvent> | TransitionsConfigArray<TContext, TEvent>;
269
- export interface InvokeSourceDefinition {
270
- [key: string]: any;
271
- type: string;
272
- }
273
- export interface InvokeConfig<TContext extends MachineContext, TEvent extends EventObject> {
274
- /**
275
- * The unique identifier for the invoked machine. If not specified, this
276
- * will be the machine's own `id`, or the URL (from `src`).
277
- */
278
- id?: string;
279
- /**
280
- * The source of the machine to be invoked, or the machine itself.
281
- */
282
- src: string | InvokeSourceDefinition | BehaviorCreator<TContext, TEvent> | Behavior<any, any>;
283
- /**
284
- * If `true`, events sent to the parent service will be forwarded to the invoked service.
285
- *
286
- * Default: `false`
287
- */
288
- autoForward?: boolean;
289
- /**
290
- * Data from the parent machine's context to set as the (partial or full) context
291
- * for the invoked child machine.
292
- *
293
- * Data should be mapped to match the child machine's context shape.
294
- */
295
- data?: Mapper<TContext, TEvent, any> | PropertyMapper<TContext, TEvent, any>;
296
- /**
297
- * The transition to take upon the invoked child machine reaching its final top-level state.
298
- */
299
- onDone?: string | SingleOrArray<TransitionConfig<TContext, DoneInvokeEvent<any>>>;
300
- /**
301
- * The transition to take upon the invoked child machine sending an error event.
302
- */
303
- onError?: string | SingleOrArray<TransitionConfig<TContext, DoneInvokeEvent<any>>>;
304
- onSnapshot?: string | SingleOrArray<TransitionConfig<TContext, SnapshotEvent<any>>>;
305
- /**
306
- * Meta data related to this invocation
307
- */
308
- meta?: MetaObject;
309
- }
310
- export interface StateNodeConfig<TContext extends MachineContext, TEvent extends EventObject, TAction extends BaseActionObject = BaseActionObject> {
311
- /**
312
- * The relative key of the state node, which represents its location in the overall state value.
313
- * This is automatically determined by the configuration shape via the key where it was defined.
314
- */
315
- key?: string;
316
- /**
317
- * The initial state transition.
318
- */
319
- initial?: InitialTransitionConfig<TContext, TEvent> | SingleOrArray<string> | undefined;
320
- /**
321
- * The type of this state node:
322
- *
323
- * - `'atomic'` - no child state nodes
324
- * - `'compound'` - nested child state nodes (XOR)
325
- * - `'parallel'` - orthogonal nested child state nodes (AND)
326
- * - `'history'` - history state node
327
- * - `'final'` - final state node
328
- */
329
- type?: 'atomic' | 'compound' | 'parallel' | 'final' | 'history';
330
- /**
331
- * Indicates whether the state node is a history state node, and what
332
- * type of history:
333
- * shallow, deep, true (shallow), false (none), undefined (none)
334
- */
335
- history?: 'shallow' | 'deep' | boolean | undefined;
336
- /**
337
- * The mapping of state node keys to their state node configurations (recursive).
338
- */
339
- states?: StatesConfig<TContext, TEvent, TAction> | undefined;
340
- /**
341
- * The services to invoke upon entering this state node. These services will be stopped upon exiting this state node.
342
- */
343
- invoke?: SingleOrArray<string | BehaviorCreator<TContext, TEvent> | InvokeConfig<TContext, TEvent>>;
344
- /**
345
- * The mapping of event types to their potential transition(s).
346
- */
347
- on?: TransitionsConfig<TContext, TEvent>;
348
- /**
349
- * The action(s) to be executed upon entering the state node.
350
- */
351
- entry?: BaseActions<TContext, TEvent, TAction>;
352
- /**
353
- * The action(s) to be executed upon exiting the state node.
354
- */
355
- exit?: BaseActions<TContext, TEvent, TAction>;
356
- /**
357
- * The potential transition(s) to be taken upon reaching a final child state node.
358
- *
359
- * This is equivalent to defining a `[done(id)]` transition on this state node's `on` property.
360
- */
361
- onDone?: string | SingleOrArray<TransitionConfig<TContext, DoneEventObject>> | undefined;
362
- /**
363
- * The mapping (or array) of delays (in milliseconds) to their potential transition(s).
364
- * The delayed transitions are taken after the specified delay in an interpreter.
365
- */
366
- after?: DelayedTransitions<TContext, TEvent>;
367
- /**
368
- * An eventless transition that is always taken when this state node is active.
369
- */
370
- always?: TransitionConfigOrTarget<TContext, TEvent>;
371
- /**
372
- * @private
373
- */
374
- parent?: StateNode<TContext, TEvent>;
375
- strict?: boolean | undefined;
376
- /**
377
- * The meta data associated with this state node, which will be returned in State instances.
378
- */
379
- meta?: any;
380
- /**
381
- * The data sent with the "done.state._id_" event if this is a final state node.
382
- *
383
- * The data will be evaluated with the current `context` and placed on the `.data` property
384
- * of the event.
385
- */
386
- data?: Mapper<TContext, TEvent, any> | PropertyMapper<TContext, TEvent, any>;
387
- /**
388
- * The unique ID of the state node, which can be referenced as a transition target via the
389
- * `#id` syntax.
390
- */
391
- id?: string | undefined;
392
- /**
393
- * The string delimiter for serializing the path to a string. The default is "."
394
- */
395
- delimiter?: string;
396
- /**
397
- * The order this state node appears. Corresponds to the implicit SCXML document order.
398
- */
399
- order?: number;
400
- /**
401
- * The tags for this state node, which are accumulated into the `state.tags` property.
402
- */
403
- tags?: SingleOrArray<string>;
404
- /**
405
- * Whether actions should be called in order.
406
- * When `false` (default), `assign(...)` actions are prioritized before other actions.
407
- *
408
- * @default false
409
- */
410
- preserveActionOrder?: boolean;
411
- /**
412
- * A text description of the state node
413
- */
414
- description?: string;
415
- }
416
- export interface StateNodeDefinition<TContext extends MachineContext, TEvent extends EventObject> {
417
- id: string;
418
- version?: string | undefined;
419
- key: string;
420
- context: TContext;
421
- type: 'atomic' | 'compound' | 'parallel' | 'final' | 'history';
422
- initial: InitialTransitionDefinition<TContext, TEvent> | undefined;
423
- history: boolean | 'shallow' | 'deep' | undefined;
424
- states: StatesDefinition<TContext, TEvent>;
425
- on: TransitionDefinitionMap<TContext, TEvent>;
426
- transitions: Array<TransitionDefinition<TContext, TEvent>>;
427
- entry: BaseActionObject[];
428
- exit: BaseActionObject[];
429
- meta: any;
430
- order: number;
431
- data?: FinalStateNodeConfig<TContext, TEvent>['data'];
432
- invoke: Array<InvokeDefinition<TContext, TEvent>>;
433
- description?: string;
434
- tags: string[];
435
- }
436
- export declare type AnyStateNode = StateNode<any, any>;
437
- export declare type AnyStateNodeDefinition = StateNodeDefinition<any, any>;
438
- export declare type AnyState = State<any, any, any>;
439
- export declare type AnyStateMachine = StateMachine<any, any, any, any, any>;
440
- export declare type AnyStateConfig = StateConfig<any, AnyEventObject>;
441
- export interface AtomicStateNodeConfig<TContext extends MachineContext, TEvent extends EventObject> extends StateNodeConfig<TContext, TEvent> {
442
- initial?: undefined;
443
- parallel?: false | undefined;
444
- states?: undefined;
445
- onDone?: undefined;
446
- }
447
- export interface HistoryStateNodeConfig<TContext extends MachineContext, TEvent extends EventObject> extends AtomicStateNodeConfig<TContext, TEvent> {
448
- history: 'shallow' | 'deep' | true;
449
- target: string | undefined;
450
- }
451
- export interface FinalStateNodeConfig<TContext extends MachineContext, TEvent extends EventObject> extends AtomicStateNodeConfig<TContext, TEvent> {
452
- type: 'final';
453
- /**
454
- * The data to be sent with the "done.state.<id>" event. The data can be
455
- * static or dynamic (based on assigners).
456
- */
457
- data?: Mapper<TContext, TEvent, any> | PropertyMapper<TContext, TEvent, any>;
458
- }
459
- export declare type SimpleOrStateNodeConfig<TContext extends MachineContext, TEvent extends EventObject> = AtomicStateNodeConfig<TContext, TEvent> | StateNodeConfig<TContext, TEvent>;
460
- export declare type ActionFunctionMap<TContext extends MachineContext, TEvent extends EventObject, TAction extends BaseActionObject = BaseActionObject> = {
461
- [K in TAction['type']]?: BaseDynamicActionObject<TContext, TEvent, TAction, any> | ActionFunction<TContext, TEvent, TAction extends {
462
- type: K;
463
- } ? TAction : never>;
464
- };
465
- export declare type DelayFunctionMap<TContext extends MachineContext, TEvent extends EventObject> = Record<string, DelayConfig<TContext, TEvent>>;
466
- export declare type DelayConfig<TContext extends MachineContext, TEvent extends EventObject> = number | DelayExpr<TContext, TEvent>;
467
- export interface MachineImplementationsSimplified<TContext extends MachineContext, TEvent extends EventObject, TAction extends BaseActionObject = BaseActionObject> {
468
- guards: Record<string, GuardPredicate<TContext, TEvent>>;
469
- actions: ActionFunctionMap<TContext, TEvent, TAction>;
470
- actors: Record<string, BehaviorCreator<TContext, TEvent>>;
471
- delays: DelayFunctionMap<TContext, TEvent>;
472
- context: Partial<TContext> | ContextFactory<Partial<TContext>>;
473
- }
474
- 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'>> = {
475
- [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
476
- any> | ActionFunction<TContext, Cast<Prop<TIndexedEvents, TEventsCausingActions[K]>, EventObject>, Cast<Prop<TIndexedActions, K>, BaseActionObject>>;
477
- };
478
- declare type MachineImplementationsDelays<TContext extends MachineContext, TResolvedTypesMeta, TEventsCausingDelays = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'eventsCausingDelays'>, TIndexedEvents = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedEvents'>> = {
479
- [K in keyof TEventsCausingDelays]?: DelayConfig<TContext, Cast<Prop<TIndexedEvents, TEventsCausingDelays[K]>, EventObject>>;
480
- };
481
- declare type MachineImplementationsGuards<TContext extends MachineContext, TResolvedTypesMeta, TEventsCausingGuards = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'eventsCausingGuards'>, TIndexedEvents = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedEvents'>> = {
482
- [K in keyof TEventsCausingGuards]?: GuardPredicate<TContext, Cast<Prop<TIndexedEvents, TEventsCausingGuards[K]>, EventObject>>;
483
- };
484
- 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'>> = {
485
- [K in keyof TEventsCausingActors]?: BehaviorCreator<TContext, Cast<Prop<TIndexedEvents, TEventsCausingActors[K]>, EventObject>>;
486
- };
487
- declare type MakeKeysRequired<T extends string> = {
488
- [K in T]: unknown;
489
- };
490
- declare type MaybeMakeMissingImplementationsRequired<TImplementationType, TMissingImplementationsForType, TRequireMissingImplementations> = TRequireMissingImplementations extends true ? IsNever<TMissingImplementationsForType> extends true ? {} : {
491
- [K in Cast<TImplementationType, string>]: MakeKeysRequired<Cast<TMissingImplementationsForType, string>>;
492
- } : {};
493
- declare type GenerateActionsImplementationsPart<TContext extends MachineContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> = MaybeMakeMissingImplementationsRequired<'actions', Prop<TMissingImplementations, 'actions'>, TRequireMissingImplementations> & {
494
- actions?: MachineImplementationsActions<TContext, TResolvedTypesMeta>;
495
- };
496
- declare type GenerateDelaysImplementationsPart<TContext extends MachineContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> = MaybeMakeMissingImplementationsRequired<'delays', Prop<TMissingImplementations, 'delays'>, TRequireMissingImplementations> & {
497
- delays?: MachineImplementationsDelays<TContext, TResolvedTypesMeta>;
498
- };
499
- declare type GenerateGuardsImplementationsPart<TContext extends MachineContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> = MaybeMakeMissingImplementationsRequired<'guards', Prop<TMissingImplementations, 'guards'>, TRequireMissingImplementations> & {
500
- guards?: MachineImplementationsGuards<TContext, TResolvedTypesMeta>;
501
- };
502
- declare type GenerateActorsImplementationsPart<TContext extends MachineContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> = MaybeMakeMissingImplementationsRequired<'actors', Prop<TMissingImplementations, 'actors'>, TRequireMissingImplementations> & {
503
- actors?: MachineImplementationsActors<TContext, TResolvedTypesMeta>;
504
- };
505
- 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>;
506
- 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>>;
507
- declare type InitialContext<TContext extends MachineContext> = TContext | ContextFactory<TContext>;
508
- export declare type ContextFactory<TContext extends MachineContext> = (stuff: {
509
- spawn: Spawner;
510
- }) => TContext;
511
- 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> {
512
- /**
513
- * The initial context (extended state)
514
- */
515
- context?: InitialContext<LowInfer<TContext>>;
516
- /**
517
- * The machine's own version.
518
- */
519
- version?: string;
520
- /**
521
- * If `true`, will use SCXML semantics, such as event token matching.
522
- */
523
- scxml?: boolean;
524
- schema?: MachineSchema<TContext, TEvent, TActorMap>;
525
- tsTypes?: TTypesMeta;
526
- }
527
- export declare type ActorMap = Record<string, {
528
- data: any;
529
- }>;
530
- export interface MachineSchema<TContext extends MachineContext, TEvent extends EventObject, TActorMap extends ActorMap = ActorMap> {
531
- context?: TContext;
532
- actions?: {
533
- type: string;
534
- [key: string]: any;
535
- };
536
- actors?: TActorMap;
537
- events?: TEvent;
538
- guards?: {
539
- type: string;
540
- [key: string]: any;
541
- };
542
- }
543
- export interface HistoryStateNode<TContext extends MachineContext> extends StateNode<TContext> {
544
- history: 'shallow' | 'deep';
545
- target: string | undefined;
546
- }
547
- export declare type HistoryValue<TContext extends MachineContext, TEvent extends EventObject> = Record<string, Array<StateNode<TContext, TEvent>>>;
548
- 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;
549
- export declare type Transitions<TContext extends MachineContext, TEvent extends EventObject> = Array<TransitionDefinition<TContext, TEvent>>;
550
- export declare enum ActionTypes {
551
- Stop = "xstate.stop",
552
- Raise = "xstate.raise",
553
- Send = "xstate.send",
554
- Cancel = "xstate.cancel",
555
- Assign = "xstate.assign",
556
- After = "xstate.after",
557
- DoneState = "done.state",
558
- DoneInvoke = "done.invoke",
559
- Log = "xstate.log",
560
- Init = "xstate.init",
561
- Invoke = "xstate.invoke",
562
- ErrorExecution = "error.execution",
563
- ErrorCommunication = "error.communication",
564
- ErrorPlatform = "error.platform",
565
- ErrorCustom = "xstate.error",
566
- Update = "xstate.update",
567
- Pure = "xstate.pure",
568
- Choose = "xstate.choose"
569
- }
570
- export interface RaiseActionObject<TEvent extends EventObject> extends BuiltInActionObject {
571
- type: ActionTypes.Raise;
572
- params: {
573
- _event: SCXML.Event<TEvent>;
574
- };
575
- }
576
- export interface DoneInvokeEvent<TData> extends EventObject {
577
- type: `done.invoke.${string}`;
578
- data: TData;
579
- }
580
- export interface ErrorEvent<TErrorData> {
581
- type: `error.${string}`;
582
- data: TErrorData;
583
- }
584
- export interface SnapshotEvent<TData> {
585
- type: `xstate.snapshot.${string}`;
586
- data: TData;
587
- }
588
- export interface ErrorExecutionEvent extends EventObject {
589
- src: string;
590
- type: ActionTypes.ErrorExecution;
591
- data: any;
592
- }
593
- export interface ErrorPlatformEvent extends EventObject {
594
- data: any;
595
- }
596
- export interface SCXMLErrorEvent extends SCXML.Event<any> {
597
- name: ActionTypes.ErrorExecution | ActionTypes.ErrorPlatform | ActionTypes.ErrorCommunication;
598
- data: any;
599
- }
600
- export interface DoneEventObject extends EventObject {
601
- data?: any;
602
- toString(): string;
603
- }
604
- export interface UpdateObject extends EventObject {
605
- id: string | number;
606
- state: AnyState;
607
- }
608
- export declare type DoneEvent = DoneEventObject & string;
609
- export interface InvokeAction {
610
- type: ActionTypes.Invoke;
611
- src: InvokeSourceDefinition | ActorRef<any>;
612
- id: string;
613
- autoForward?: boolean;
614
- data?: any;
615
- exec?: undefined;
616
- meta: MetaObject | undefined;
617
- }
618
- export interface DynamicInvokeActionObject<TContext extends MachineContext, TEvent extends EventObject> {
619
- type: ActionTypes.Invoke;
620
- params: InvokeDefinition<TContext, TEvent>;
621
- }
622
- export interface InvokeActionObject extends BaseActionObject {
623
- type: ActionTypes.Invoke;
624
- params: {
625
- src: InvokeSourceDefinition | ActorRef<any>;
626
- id: string;
627
- autoForward?: boolean;
628
- data?: any;
629
- exec?: undefined;
630
- ref?: ActorRef<any>;
631
- meta: MetaObject | undefined;
632
- };
633
- }
634
- export interface DynamicStopActionObject<TContext extends MachineContext, TEvent extends EventObject> {
635
- type: ActionTypes.Stop;
636
- params: {
637
- actor: string | Expr<TContext, TEvent, ActorRef<any>>;
638
- };
639
- }
640
- export interface StopActionObject {
641
- type: ActionTypes.Stop;
642
- params: {
643
- actor: string | ActorRef<any>;
644
- };
645
- }
646
- export declare type DelayExpr<TContext extends MachineContext, TEvent extends EventObject> = ExprWithMeta<TContext, TEvent, number>;
647
- export declare type LogExpr<TContext extends MachineContext, TEvent extends EventObject> = ExprWithMeta<TContext, TEvent, any>;
648
- export interface DynamicLogAction<TContext extends MachineContext, TEvent extends EventObject> extends BaseDynamicActionObject<TContext, TEvent, LogActionObject, {
649
- label: string | undefined;
650
- expr: string | LogExpr<TContext, TEvent>;
651
- }> {
652
- type: ActionTypes.Log;
653
- }
654
- export interface LogActionObject extends BuiltInActionObject {
655
- type: ActionTypes.Log;
656
- params: {
657
- label: string | undefined;
658
- value: any;
659
- };
660
- }
661
- export interface SendActionObject<TSentEvent extends EventObject = AnyEventObject> extends BaseActionObject {
662
- type: 'xstate.send';
663
- params: {
664
- to: string | ActorRef<TSentEvent> | undefined;
665
- _event: SCXML.Event<TSentEvent>;
666
- event: TSentEvent;
667
- delay?: number;
668
- id: string | number;
669
- };
670
- }
671
- export declare type Expr<TContext extends MachineContext, TEvent extends EventObject, T> = (context: TContext, event: TEvent) => T;
672
- export declare type ExprWithMeta<TContext extends MachineContext, TEvent extends EventObject, T> = (context: TContext, event: TEvent, meta: SCXMLEventMeta<TEvent>) => T;
673
- export declare type SendExpr<TContext extends MachineContext, TEvent extends EventObject, TSentEvent extends EventObject = AnyEventObject> = ExprWithMeta<TContext, TEvent, TSentEvent>;
674
- export declare enum SpecialTargets {
675
- Parent = "#_parent",
676
- Internal = "#_internal"
677
- }
678
- export interface SendActionOptions<TContext extends MachineContext, TEvent extends EventObject> {
679
- id?: string | number;
680
- delay?: number | string | DelayExpr<TContext, TEvent>;
681
- to?: string | ExprWithMeta<TContext, TEvent, string | ActorRef<any> | undefined> | undefined;
682
- }
683
- export interface SendActionParams<TContext extends MachineContext, TEvent extends EventObject, TSentEvent extends EventObject = EventObject> extends SendActionOptions<TContext, TEvent> {
684
- event: TSentEvent | SendExpr<TContext, TEvent, TSentEvent>;
685
- }
686
- export interface DynamicCancelActionObject<TContext extends MachineContext, TEvent extends EventObject> {
687
- type: ActionTypes.Cancel;
688
- params: {
689
- sendId: string | ExprWithMeta<TContext, TEvent, string>;
690
- };
691
- }
692
- export interface CancelActionObject extends BaseActionObject {
693
- type: ActionTypes.Cancel;
694
- params: {
695
- sendId: string;
696
- };
697
- }
698
- export declare type Assigner<TContext extends MachineContext, TEvent extends EventObject> = (context: TContext, event: TEvent, meta: AssignMeta<TContext, TEvent>) => Partial<TContext>;
699
- export declare type PartialAssigner<TContext extends MachineContext, TEvent extends EventObject, TKey extends keyof TContext> = (context: TContext, event: TEvent, meta: AssignMeta<TContext, TEvent>) => TContext[TKey];
700
- export declare type PropertyAssigner<TContext extends MachineContext, TEvent extends EventObject> = {
701
- [K in keyof TContext]?: PartialAssigner<TContext, TEvent, K> | TContext[K];
702
- };
703
- export declare type Mapper<TContext extends MachineContext, TEvent extends EventObject, TParams extends {}> = (context: TContext, event: TEvent) => TParams;
704
- export declare type PropertyMapper<TContext extends MachineContext, TEvent extends EventObject, TParams extends {}> = {
705
- [K in keyof TParams]?: ((context: TContext, event: TEvent) => TParams[K]) | TParams[K];
706
- };
707
- export interface AnyAssignAction extends BaseActionObject {
708
- type: ActionTypes.Assign;
709
- assignment: any;
710
- }
711
- export declare type DynamicAssignAction<TContext extends MachineContext, TEvent extends EventObject> = BaseDynamicActionObject<TContext, TEvent, AssignActionObject<TContext> | RaiseActionObject<TEvent>, {
712
- assignment: Assigner<TContext, TEvent> | PropertyAssigner<TContext, TEvent>;
713
- }>;
714
- export interface AssignActionObject<TContext extends MachineContext> extends BaseActionObject {
715
- type: ActionTypes.Assign;
716
- params: {
717
- context: TContext;
718
- actions: BaseActionObject[];
719
- };
720
- }
721
- export interface DynamicPureActionObject<TContext extends MachineContext, TEvent extends EventObject> {
722
- type: ActionTypes.Pure;
723
- params: {
724
- get: (context: TContext, event: TEvent) => SingleOrArray<BaseActionObject> | undefined;
725
- };
726
- }
727
- export interface PureActionObject extends BaseActionObject {
728
- type: ActionTypes.Pure;
729
- params: {
730
- actions: BaseActionObject[];
731
- };
732
- }
733
- export interface ChooseAction<TContext extends MachineContext, TEvent extends EventObject> extends BaseActionObject {
734
- type: ActionTypes.Choose;
735
- params: {
736
- guards: Array<ChooseCondition<TContext, TEvent>>;
737
- };
738
- }
739
- export interface ResolvedChooseAction extends BaseActionObject {
740
- type: ActionTypes.Choose;
741
- params: {
742
- actions: BaseActionObject[];
743
- };
744
- }
745
- export interface TransitionDefinition<TContext extends MachineContext, TEvent extends EventObject> extends TransitionConfig<TContext, TEvent> {
746
- target: Array<StateNode<TContext, TEvent>> | undefined;
747
- source: StateNode<TContext, TEvent>;
748
- actions: BaseActionObject[];
749
- guard?: GuardDefinition<TContext, TEvent>;
750
- eventType: TEvent['type'] | '*';
751
- toJSON: () => {
752
- target: string[] | undefined;
753
- source: string;
754
- actions: BaseActionObject[];
755
- guard?: GuardDefinition<TContext, TEvent>;
756
- eventType: TEvent['type'] | '*';
757
- meta?: Record<string, any>;
758
- };
759
- }
760
- export interface InitialTransitionDefinition<TContext extends MachineContext, TEvent extends EventObject> extends TransitionDefinition<TContext, TEvent> {
761
- target: Array<StateNode<TContext, TEvent>>;
762
- guard?: never;
763
- }
764
- export declare type TransitionDefinitionMap<TContext extends MachineContext, TEvent extends EventObject> = {
765
- [K in TEvent['type'] | '*']: Array<TransitionDefinition<TContext, K extends TEvent['type'] ? Extract<TEvent, {
766
- type: K;
767
- }> : EventObject>>;
768
- };
769
- export interface DelayedTransitionDefinition<TContext extends MachineContext, TEvent extends EventObject> extends TransitionDefinition<TContext, TEvent> {
770
- delay: number | string | DelayExpr<TContext, TEvent>;
771
- }
772
- export interface Edge<TContext extends MachineContext, TEvent extends EventObject, TEventType extends TEvent['type'] = string> {
773
- event: TEventType;
774
- source: StateNode<TContext, TEvent>;
775
- target: StateNode<TContext, TEvent>;
776
- cond?: GuardConfig<TContext, TEvent & {
777
- type: TEventType;
778
- }>;
779
- actions: Array<Action<TContext, TEvent>>;
780
- meta?: MetaObject;
781
- transition: TransitionDefinition<TContext, TEvent>;
782
- }
783
- export interface NodesAndEdges<TContext extends MachineContext, TEvent extends EventObject> {
784
- nodes: StateNode[];
785
- edges: Array<Edge<TContext, TEvent, TEvent['type']>>;
786
- }
787
- export interface Segment<TContext extends MachineContext, TEvent extends EventObject> {
788
- /**
789
- * From state.
790
- */
791
- state: State<TContext, TEvent>;
792
- /**
793
- * Event from state.
794
- */
795
- event: TEvent;
796
- }
797
- export interface PathItem<TContext extends MachineContext, TEvent extends EventObject> {
798
- state: State<TContext, TEvent>;
799
- path: Array<Segment<TContext, TEvent>>;
800
- weight?: number;
801
- }
802
- export interface PathMap<TContext extends MachineContext, TEvent extends EventObject> {
803
- [key: string]: PathItem<TContext, TEvent>;
804
- }
805
- export interface PathsItem<TContext extends MachineContext, TEvent extends EventObject> {
806
- state: State<TContext, TEvent>;
807
- paths: Array<Array<Segment<TContext, TEvent>>>;
808
- }
809
- export interface PathsMap<TContext extends MachineContext, TEvent extends EventObject> {
810
- [key: string]: PathsItem<TContext, TEvent>;
811
- }
812
- export interface TransitionMap {
813
- state: StateValue | undefined;
814
- }
815
- export interface AdjacencyMap {
816
- [stateId: string]: Record<string, TransitionMap>;
817
- }
818
- export interface ValueAdjacencyMap<TContext extends MachineContext, TEvent extends EventObject> {
819
- [stateId: string]: Record<string, State<TContext, TEvent>>;
820
- }
821
- export interface SCXMLEventMeta<TEvent extends EventObject> {
822
- _event: SCXML.Event<TEvent>;
823
- }
824
- export interface StateMeta<TContext extends MachineContext, TEvent extends EventObject> {
825
- state: State<TContext, TEvent, any>;
826
- _event: SCXML.Event<TEvent>;
827
- }
828
- export interface StateLike<TContext extends MachineContext> {
829
- value: StateValue;
830
- context: TContext;
831
- event: EventObject;
832
- _event: SCXML.Event<EventObject>;
833
- }
834
- export interface StateConfig<TContext extends MachineContext, TEvent extends EventObject> {
835
- value: StateValue;
836
- context: TContext;
837
- _event: SCXML.Event<TEvent>;
838
- _sessionid: string | null;
839
- historyValue?: HistoryValue<TContext, TEvent>;
840
- actions?: BaseActionObject[];
841
- meta?: any;
842
- configuration: Array<StateNode<TContext, TEvent>>;
843
- transitions: Array<TransitionDefinition<TContext, TEvent>>;
844
- children: Record<string, ActorRef<any>>;
845
- done?: boolean;
846
- tags?: Set<string>;
847
- machine?: StateMachine<TContext, TEvent, any, any, any>;
848
- }
849
- export interface InterpreterOptions {
850
- /**
851
- * Whether state actions should be executed immediately upon transition. Defaults to `true`.
852
- */
853
- execute?: boolean;
854
- clock?: Clock;
855
- logger?: (...args: any[]) => void;
856
- parent?: ActorRef<any>;
857
- /**
858
- * If `true`, defers processing of sent events until the service
859
- * is initialized (`.start()`). Otherwise, an error will be thrown
860
- * for events sent to an uninitialized service.
861
- *
862
- * Default: `true`
863
- */
864
- deferEvents?: boolean;
865
- /**
866
- * The custom `id` for referencing this service.
867
- */
868
- id?: string;
869
- /**
870
- * If `true`, states and events will be logged to Redux DevTools.
871
- *
872
- * Default: `false`
873
- */
874
- devTools?: boolean | DevToolsAdapter;
875
- /**
876
- * If `true`, events from the parent will be sent to this interpreter.
877
- *
878
- * Default: `false`
879
- */
880
- autoForward?: boolean;
881
- sync?: boolean;
882
- }
883
- export declare type AnyInterpreter = Interpreter<any, any, any>;
884
- export declare namespace SCXML {
885
- interface Event<TEvent extends EventObject> {
886
- /**
887
- * This is a character string giving the name of the event.
888
- * The SCXML Processor must set the name field to the name of this event.
889
- * It is what is matched against the 'event' attribute of <transition>.
890
- * Note that transitions can do additional tests by using the value of this field
891
- * inside boolean expressions in the 'cond' attribute.
892
- */
893
- name: string;
894
- /**
895
- * This field describes the event type.
896
- * The SCXML Processor must set it to: "platform" (for events raised by the platform itself, such as error events),
897
- * "internal" (for events raised by <raise> and <send> with target '_internal')
898
- * or "external" (for all other events).
899
- */
900
- type: 'platform' | 'internal' | 'external';
901
- /**
902
- * If the sending entity has specified a value for this, the Processor must set this field to that value
903
- * (see C Event I/O Processors for details).
904
- * Otherwise, in the case of error events triggered by a failed attempt to send an event,
905
- * the Processor must set this field to the send id of the triggering <send> element.
906
- * Otherwise it must leave it blank.
907
- */
908
- sendid?: string;
909
- /**
910
- * This is a URI, equivalent to the 'target' attribute on the <send> element.
911
- * For external events, the SCXML Processor should set this field to a value which,
912
- * when used as the value of 'target', will allow the receiver of the event to <send>
913
- * a response back to the originating entity via the Event I/O Processor specified in 'origintype'.
914
- * For internal and platform events, the Processor must leave this field blank.
915
- */
916
- origin?: ActorRef<any>;
917
- /**
918
- * This is equivalent to the 'type' field on the <send> element.
919
- * For external events, the SCXML Processor should set this field to a value which,
920
- * when used as the value of 'type', will allow the receiver of the event to <send>
921
- * a response back to the originating entity at the URI specified by 'origin'.
922
- * For internal and platform events, the Processor must leave this field blank.
923
- */
924
- origintype?: string;
925
- /**
926
- * If this event is generated from an invoked child process, the SCXML Processor
927
- * must set this field to the invoke id of the invocation that triggered the child process.
928
- * Otherwise it must leave it blank.
929
- */
930
- invokeid?: string;
931
- /**
932
- * This field contains whatever data the sending entity chose to include in this event.
933
- * The receiving SCXML Processor should reformat this data to match its data model,
934
- * but must not otherwise modify it.
935
- *
936
- * If the conversion is not possible, the Processor must leave the field blank
937
- * and must place an error 'error.execution' in the internal event queue.
938
- */
939
- data: TEvent;
940
- /**
941
- * @private
942
- */
943
- $$type: 'scxml';
944
- }
945
- }
946
- export declare type Observer<T> = {
947
- next: (value: T) => void;
948
- error?: (err: any) => void;
949
- complete?: () => void;
950
- } | {
951
- next?: (value: T) => void;
952
- error: (err: any) => void;
953
- complete?: () => void;
954
- } | {
955
- next?: (value: T) => void;
956
- error?: (err: any) => void;
957
- complete: () => void;
958
- };
959
- export interface Subscription {
960
- unsubscribe(): void;
961
- }
962
- export interface InteropObservable<T> {
963
- [Symbol.observable]: () => InteropSubscribable<T>;
964
- }
965
- export interface InteropSubscribable<T> {
966
- subscribe(observer: Observer<T>): Subscription;
967
- }
968
- export interface Subscribable<T> extends InteropSubscribable<T> {
969
- subscribe(observer: Observer<T>): Subscription;
970
- subscribe(next: (value: T) => void, error?: (error: any) => void, complete?: () => void): Subscription;
971
- }
972
- export declare type Spawnable = AnyStateMachine | PromiseLike<any> | InvokeCallback | InteropObservable<any> | Subscribable<any> | Behavior<any, any>;
973
- export declare type ExtractEvent<TEvent extends EventObject, TEventType extends TEvent['type']> = TEvent extends any ? TEventType extends TEvent['type'] ? TEvent : never : never;
974
- export interface BaseActorRef<TEvent extends EventObject> {
975
- send: (event: TEvent) => void;
976
- }
977
- export interface ActorLike<TCurrent, TEvent extends EventObject> extends Subscribable<TCurrent> {
978
- send: Sender<TEvent>;
979
- }
980
- export declare type Sender<TEvent extends EventObject> = (event: TEvent) => void;
981
- export interface ActorRef<TEvent extends EventObject, TSnapshot = any> extends Subscribable<TSnapshot>, InteropObservable<TSnapshot> {
982
- name: string;
983
- send: (event: TEvent) => void;
984
- start?: () => void;
985
- getSnapshot: () => TSnapshot | undefined;
986
- stop?: () => void;
987
- toJSON?: () => any;
988
- _parent?: ActorRef<any, any>;
989
- }
990
- export declare type AnyActorRef = ActorRef<any, any>;
991
- 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<{
992
- type: string;
993
- }, U | undefined> : R extends Behavior<infer TEvent, infer TSnapshot> ? ActorRef<TEvent, TSnapshot> : never : never;
994
- export declare type DevToolsAdapter = (service: AnyInterpreter) => void;
995
- export declare type InterpreterFrom<T extends AnyStateMachine | ((...args: any[]) => AnyStateMachine)> = ReturnTypeOrValue<T> extends StateMachine<infer TContext, infer TEvent, any, any, infer TResolvedTypesMeta> ? Interpreter<TContext, TEvent, AreAllImplementationsAssumedToBeProvided<TResolvedTypesMeta> extends false ? MarkAllImplementationsAsProvided<TResolvedTypesMeta> : TResolvedTypesMeta> : never;
996
- 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;
997
- export declare type __ResolvedTypesMetaFrom<T> = T extends StateMachine<any, any, any, infer TResolvedTypesMeta> ? TResolvedTypesMeta : never;
998
- export declare type EventOfMachine<TMachine extends AnyStateMachine> = TMachine extends StateMachine<any, infer E, any, any, any> ? E : never;
999
- export interface ActorContext<TEvent extends EventObject, TSnapshot> {
1000
- self: ActorRef<TEvent, TSnapshot>;
1001
- name: string;
1002
- _event: SCXML.Event<TEvent> | LifecycleSignal;
1003
- }
1004
- export interface Behavior<TEvent extends EventObject, TSnapshot = any> {
1005
- transition: (state: TSnapshot, message: TEvent | LifecycleSignal, ctx: ActorContext<TEvent, TSnapshot>) => TSnapshot;
1006
- initialState: TSnapshot;
1007
- start?: (actorCtx: ActorContext<TEvent, TSnapshot>) => TSnapshot;
1008
- }
1009
- export declare type SnapshotFrom<T> = ReturnTypeOrValue<T> extends infer R ? R extends Interpreter<infer _, infer __, infer ___> ? R['initialState'] : R extends ActorRef<infer _, infer TSnapshot> ? TSnapshot : R extends Behavior<infer _, infer TSnapshot> ? TSnapshot : R extends ActorContext<infer _, infer TSnapshot> ? TSnapshot : never : never;
1010
- declare type ResolveEventType<T> = ReturnTypeOrValue<T> extends infer R ? R extends StateMachine<infer _, infer TEvent, infer __, infer ___, infer ____> ? TEvent : R extends Model<infer _, infer TEvent, infer __, infer ___> ? TEvent : R extends State<infer _, infer TEvent, infer __> ? TEvent : R extends Interpreter<infer _, infer TEvent, infer __> ? TEvent : R extends ActorRef<infer TEvent, infer _> ? TEvent : never : never;
1011
- export declare type EventFrom<T, K extends Prop<TEvent, 'type'> = never, TEvent extends EventObject = ResolveEventType<T>> = IsNever<K> extends true ? TEvent : ExtractEvent<TEvent, K>;
1012
- /**
1013
- * Events that do not require payload
1014
- */
1015
- export declare type SimpleEventsOf<TEvent extends EventObject> = ExtractWithSimpleSupport<TEvent>;
1016
- export declare type ContextFrom<T> = ReturnTypeOrValue<T> extends infer R ? R extends StateMachine<infer TContext, infer _, infer __, infer ___, infer ____> ? TContext : R extends Model<infer TContext, infer _, infer __, infer ___> ? TContext : R extends State<infer TContext, infer _, infer __> ? TContext : R extends Interpreter<infer TContext, infer _, infer __> ? TContext : never : never;
1017
- export declare type InferEvent<E extends EventObject> = {
1018
- [T in E['type']]: {
1019
- type: T;
1020
- } & Extract<E, {
1021
- type: T;
1022
- }>;
1023
- }[E['type']];
1024
- export declare type TODO = any;
1025
- export declare type StateValueFrom<TMachine extends AnyStateMachine> = Parameters<StateFrom<TMachine>['matches']>[0];
1026
- export {};
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
+ [K in keyof A]: A[K];
12
+ } & unknown;
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
+ type: string;
18
+ }> = {
19
+ [K in T['type']]: T extends any ? (K extends T['type'] ? T : never) : never;
20
+ };
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
+ /**
32
+ * The full definition of an event, with a string `type`.
33
+ */
34
+ export interface EventObject {
35
+ /**
36
+ * The type of event that is sent.
37
+ */
38
+ type: string;
39
+ }
40
+ export interface AnyEventObject extends EventObject {
41
+ [key: string]: any;
42
+ }
43
+ export interface ParameterizedObject {
44
+ type: string;
45
+ params?: Record<string, any>;
46
+ }
47
+ export interface BaseActionObject extends ParameterizedObject {
48
+ execute?: (actorCtx: AnyActorContext) => void;
49
+ }
50
+ export interface BuiltInActionObject extends ParameterizedObject {
51
+ type: `xstate.${string}`;
52
+ params: Record<string, any>;
53
+ }
54
+ export interface BaseDynamicActionObject<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject, TResolvedAction extends BaseActionObject, TDynamicParams extends Record<string, any>> {
55
+ type: `xstate.${string}`;
56
+ params: TDynamicParams;
57
+ resolve: (_event: SCXML.Event<TExpressionEvent>, extra: {
58
+ state: State<TContext, TEvent>;
59
+ /**
60
+ * The original action object
61
+ */
62
+ action: ParameterizedObject;
63
+ actorContext: AnyActorContext | undefined;
64
+ }) => [AnyState, TResolvedAction];
65
+ /** @deprecated an internal signature that doesn't exist at runtime. Its existence helps TS to choose a better code path in the inference algorithm */
66
+ (arg: TContext, ev: TExpressionEvent, meta: ActionMeta<TContext, TEvent, ParameterizedObject>): void;
67
+ }
68
+ export type MachineContext = Record<string, any>;
69
+ export interface ActionMeta<TContext extends MachineContext, TEvent extends EventObject, TAction extends ParameterizedObject = ParameterizedObject> extends StateMeta<TContext, TEvent> {
70
+ action: TAction;
71
+ _event: SCXML.Event<TEvent>;
72
+ }
73
+ export type Spawner = <T extends ActorBehavior<any, any> | string>(// TODO: read string from machine behavior keys
74
+ behavior: T, options?: Partial<{
75
+ id: string;
76
+ input: any;
77
+ }>) => T extends ActorBehavior<infer TActorEvent, infer TActorEmitted> ? ActorRef<TActorEvent, TActorEmitted> : ActorRef<any, any>;
78
+ export interface AssignMeta<TContext extends MachineContext, TExpressionEvent extends EventObject, _TEvent extends EventObject> extends StateMeta<TContext, TExpressionEvent> {
79
+ action: BaseActionObject;
80
+ _event: SCXML.Event<TExpressionEvent>;
81
+ spawn: Spawner;
82
+ }
83
+ export type ActionFunction<TContext extends MachineContext, TExpressionEvent extends EventObject, TAction extends ParameterizedObject = ParameterizedObject, TEvent extends EventObject = TExpressionEvent> = {
84
+ bivarianceHack(context: TContext, event: TExpressionEvent, meta: ActionMeta<TContext, TEvent, TAction>): void;
85
+ }['bivarianceHack'];
86
+ export interface ChooseCondition<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject = TExpressionEvent> {
87
+ guard?: GuardConfig<TContext, TEvent>;
88
+ actions: Actions<TContext, TExpressionEvent, TEvent>;
89
+ }
90
+ 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>;
91
+ /**
92
+ * Extracts action objects that have no extra properties.
93
+ */
94
+ type SimpleActionsFrom<T extends ParameterizedObject> = ParameterizedObject extends T ? T : ExtractWithSimpleSupport<T>;
95
+ 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
96
+ any> | TAction | SimpleActionsFrom<TAction>['type'] | ActionFunction<TContext, TExpressionEvent, TAction, TEvent>;
97
+ export type BaseActions<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject, TAction extends ParameterizedObject> = SingleOrArray<BaseAction<TContext, TExpressionEvent, TAction, TEvent>>;
98
+ export type Actions<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject = TExpressionEvent> = SingleOrArray<Action<TContext, TEvent>>;
99
+ export type StateKey = string | AnyState;
100
+ export interface StateValueMap {
101
+ [key: string]: StateValue;
102
+ }
103
+ /**
104
+ * The string or object representing the state value relative to the parent state node.
105
+ *
106
+ * - For a child atomic state node, this is a string, e.g., `"pending"`.
107
+ * - For complex state nodes, this is an object, e.g., `{ success: "someChildState" }`.
108
+ */
109
+ export type StateValue = string | StateValueMap;
110
+ export type GuardPredicate<TContext extends MachineContext, TEvent extends EventObject> = (context: TContext, event: TEvent, meta: GuardMeta<TContext, TEvent>) => boolean;
111
+ export interface DefaultGuardObject<TContext extends MachineContext, TEvent extends EventObject> extends ParameterizedObject {
112
+ /**
113
+ * Nested guards
114
+ */
115
+ children?: Array<GuardObject<TContext, TEvent>>;
116
+ predicate?: GuardPredicate<TContext, TEvent>;
117
+ }
118
+ export type GuardEvaluator<TContext extends MachineContext, TEvent extends EventObject> = (guard: GuardDefinition<TContext, TEvent>, context: TContext, _event: SCXML.Event<TEvent>, state: State<TContext, TEvent>) => boolean;
119
+ export interface GuardMeta<TContext extends MachineContext, TEvent extends EventObject> {
120
+ state: State<TContext, TEvent, any>;
121
+ _event: SCXML.Event<TEvent>;
122
+ guard: GuardDefinition<TContext, TEvent>;
123
+ evaluate: GuardEvaluator<TContext, TEvent>;
124
+ }
125
+ export type GuardConfig<TContext extends MachineContext, TEvent extends EventObject> = string | GuardPredicate<TContext, TEvent> | GuardObject<TContext, TEvent>;
126
+ export type GuardObject<TContext extends MachineContext, TEvent extends EventObject> = BooleanGuardObject<TContext, TEvent> | DefaultGuardObject<TContext, TEvent>;
127
+ export interface GuardDefinition<TContext extends MachineContext, TEvent extends EventObject> {
128
+ type: string;
129
+ children?: Array<GuardDefinition<TContext, TEvent>>;
130
+ predicate?: GuardPredicate<TContext, TEvent>;
131
+ params: {
132
+ [key: string]: any;
133
+ };
134
+ }
135
+ export interface BooleanGuardObject<TContext extends MachineContext, TEvent extends EventObject> extends ParameterizedObject {
136
+ type: 'xstate.boolean';
137
+ children: Array<GuardConfig<TContext, TEvent>>;
138
+ params: {
139
+ op: 'and' | 'or' | 'not';
140
+ };
141
+ predicate: undefined;
142
+ }
143
+ export interface BooleanGuardDefinition<TContext extends MachineContext, TEvent extends EventObject> extends GuardDefinition<TContext, TEvent> {
144
+ type: 'xstate.boolean';
145
+ params: {
146
+ op: 'and' | 'or' | 'not';
147
+ };
148
+ }
149
+ export type TransitionTarget = SingleOrArray<string>;
150
+ export interface TransitionConfig<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject = TExpressionEvent, TAction extends ParameterizedObject = ParameterizedObject> {
151
+ guard?: GuardConfig<TContext, TExpressionEvent>;
152
+ actions?: BaseActions<TContext, TExpressionEvent, TEvent, TAction>;
153
+ external?: boolean;
154
+ target?: TransitionTarget | undefined;
155
+ meta?: Record<string, any>;
156
+ description?: string;
157
+ }
158
+ export interface TargetTransitionConfig<TContext extends MachineContext, TEvent extends EventObject> extends TransitionConfig<TContext, TEvent> {
159
+ target: TransitionTarget;
160
+ }
161
+ export type ConditionalTransitionConfig<TContext extends MachineContext, TEvent extends EventObject = EventObject> = Array<TransitionConfig<TContext, TEvent>>;
162
+ export interface InitialTransitionConfig<TContext extends MachineContext, TEvent extends EventObject> extends TransitionConfig<TContext, TEvent> {
163
+ guard?: never;
164
+ target: TransitionTarget;
165
+ }
166
+ export type Transition<TContext extends MachineContext, TEvent extends EventObject = EventObject> = string | TransitionConfig<TContext, TEvent> | ConditionalTransitionConfig<TContext, TEvent>;
167
+ type ExtractWithSimpleSupport<T extends {
168
+ type: string;
169
+ }> = T extends any ? {
170
+ type: T['type'];
171
+ } extends T ? T : never : never;
172
+ export type Receiver<TEvent extends EventObject> = (listener: {
173
+ bivarianceHack(event: TEvent): void;
174
+ }['bivarianceHack']) => void;
175
+ export type InvokeCallback<TEvent extends EventObject = AnyEventObject, TSentEvent extends EventObject = AnyEventObject> = (sendBack: (event: TSentEvent) => void, onReceive: Receiver<TEvent>, { input }: {
176
+ input: any;
177
+ }) => (() => void) | Promise<any> | void;
178
+ export type ActorBehaviorCreator<TContext extends MachineContext, TEvent extends EventObject, TActorBehavior extends AnyActorBehavior = AnyActorBehavior> = (context: TContext, event: TEvent, meta: {
179
+ id: string;
180
+ data?: any;
181
+ src: string;
182
+ _event: SCXML.Event<TEvent>;
183
+ meta: MetaObject | undefined;
184
+ input: any;
185
+ }) => TActorBehavior;
186
+ export interface InvokeMeta {
187
+ src: string;
188
+ meta: MetaObject | undefined;
189
+ }
190
+ export interface InvokeDefinition<TContext extends MachineContext, TEvent extends EventObject> {
191
+ id: string;
192
+ systemId: string | undefined;
193
+ /**
194
+ * The source of the actor's behavior to be invoked
195
+ */
196
+ src: string;
197
+ input?: Mapper<TContext, TEvent, any> | any;
198
+ /**
199
+ * The transition to take upon the invoked child machine reaching its final top-level state.
200
+ */
201
+ onDone?: string | SingleOrArray<TransitionConfig<TContext, DoneInvokeEvent<any>>>;
202
+ /**
203
+ * The transition to take upon the invoked child machine sending an error event.
204
+ */
205
+ onError?: string | SingleOrArray<TransitionConfig<TContext, ErrorEvent<any>>>;
206
+ onSnapshot?: string | SingleOrArray<TransitionConfig<TContext, SnapshotEvent<any>>>;
207
+ toJSON: () => Omit<InvokeDefinition<TContext, TEvent>, 'onDone' | 'onError' | 'toJSON'>;
208
+ meta: MetaObject | undefined;
209
+ }
210
+ export interface Delay {
211
+ id: string;
212
+ /**
213
+ * The time to delay the event, in milliseconds.
214
+ */
215
+ delay: number;
216
+ }
217
+ export type DelayedTransitions<TContext extends MachineContext, TEvent extends EventObject> = Record<string | number, string | SingleOrArray<TransitionConfig<TContext, TEvent>>> | Array<TransitionConfig<TContext, TEvent> & {
218
+ delay: number | string | Expr<TContext, TEvent, number>;
219
+ }>;
220
+ export type StateTypes = 'atomic' | 'compound' | 'parallel' | 'final' | 'history' | string;
221
+ export type SingleOrArray<T> = T[] | T;
222
+ export type StateNodesConfig<TContext extends MachineContext, TEvent extends EventObject> = {
223
+ [K in string]: StateNode<TContext, TEvent>;
224
+ };
225
+ export type StatesConfig<TContext extends MachineContext, TEvent extends EventObject, TAction extends ParameterizedObject = ParameterizedObject> = {
226
+ [K in string]: StateNodeConfig<TContext, TEvent, TAction>;
227
+ };
228
+ export type StatesDefinition<TContext extends MachineContext, TEvent extends EventObject> = {
229
+ [K in string]: StateNodeDefinition<TContext, TEvent>;
230
+ };
231
+ export type TransitionConfigTarget = string | undefined;
232
+ export type TransitionConfigOrTarget<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject = TExpressionEvent> = SingleOrArray<TransitionConfigTarget | TransitionConfig<TContext, TExpressionEvent, TEvent>>;
233
+ export type TransitionsConfigMap<TContext extends MachineContext, TEvent extends EventObject> = {
234
+ [K in TEvent['type'] | '' | '*']?: K extends '' | '*' ? TransitionConfigOrTarget<TContext, TEvent> : TransitionConfigOrTarget<TContext, ExtractEvent<TEvent, K>, TEvent>;
235
+ };
236
+ type TransitionsConfigArray<TContext extends MachineContext, TEvent extends EventObject> = Array<(TEvent extends EventObject ? TransitionConfig<TContext, TEvent> & {
237
+ event: TEvent['type'];
238
+ } : never) | (TransitionConfig<TContext, TEvent> & {
239
+ event: '*';
240
+ })>;
241
+ export type TransitionsConfig<TContext extends MachineContext, TEvent extends EventObject> = TransitionsConfigMap<TContext, TEvent> | TransitionsConfigArray<TContext, TEvent>;
242
+ export interface InvokeConfig<TContext extends MachineContext, TEvent extends EventObject> {
243
+ /**
244
+ * The unique identifier for the invoked machine. If not specified, this
245
+ * will be the machine's own `id`, or the URL (from `src`).
246
+ */
247
+ id?: string;
248
+ systemId?: string;
249
+ /**
250
+ * The source of the machine to be invoked, or the machine itself.
251
+ */
252
+ src: string | ActorBehavior<any, any>;
253
+ input?: Mapper<TContext, TEvent, any> | any;
254
+ /**
255
+ * The transition to take upon the invoked child machine reaching its final top-level state.
256
+ */
257
+ onDone?: string | SingleOrArray<TransitionConfigOrTarget<TContext, DoneInvokeEvent<any>, TEvent>>;
258
+ /**
259
+ * The transition to take upon the invoked child machine sending an error event.
260
+ */
261
+ onError?: string | SingleOrArray<TransitionConfigOrTarget<TContext, DoneInvokeEvent<any>, TEvent>>;
262
+ onSnapshot?: string | SingleOrArray<TransitionConfigOrTarget<TContext, SnapshotEvent<any>, TEvent>>;
263
+ /**
264
+ * Meta data related to this invocation
265
+ */
266
+ meta?: MetaObject;
267
+ }
268
+ export interface StateNodeConfig<TContext extends MachineContext, TEvent extends EventObject, TAction extends ParameterizedObject = ParameterizedObject> {
269
+ /**
270
+ * The initial state transition.
271
+ */
272
+ initial?: InitialTransitionConfig<TContext, TEvent> | SingleOrArray<string> | undefined;
273
+ /**
274
+ * The type of this state node:
275
+ *
276
+ * - `'atomic'` - no child state nodes
277
+ * - `'compound'` - nested child state nodes (XOR)
278
+ * - `'parallel'` - orthogonal nested child state nodes (AND)
279
+ * - `'history'` - history state node
280
+ * - `'final'` - final state node
281
+ */
282
+ type?: 'atomic' | 'compound' | 'parallel' | 'final' | 'history';
283
+ /**
284
+ * Indicates whether the state node is a history state node, and what
285
+ * type of history:
286
+ * shallow, deep, true (shallow), false (none), undefined (none)
287
+ */
288
+ history?: 'shallow' | 'deep' | boolean | undefined;
289
+ /**
290
+ * The mapping of state node keys to their state node configurations (recursive).
291
+ */
292
+ states?: StatesConfig<TContext, TEvent, TAction> | undefined;
293
+ /**
294
+ * The services to invoke upon entering this state node. These services will be stopped upon exiting this state node.
295
+ */
296
+ invoke?: SingleOrArray<string | InvokeConfig<TContext, TEvent>>;
297
+ /**
298
+ * The mapping of event types to their potential transition(s).
299
+ */
300
+ on?: TransitionsConfig<TContext, TEvent>;
301
+ /**
302
+ * The action(s) to be executed upon entering the state node.
303
+ */
304
+ entry?: BaseActions<TContext, TEvent, TEvent, TAction>;
305
+ /**
306
+ * The action(s) to be executed upon exiting the state node.
307
+ */
308
+ exit?: BaseActions<TContext, TEvent, TEvent, TAction>;
309
+ /**
310
+ * The potential transition(s) to be taken upon reaching a final child state node.
311
+ *
312
+ * This is equivalent to defining a `[done(id)]` transition on this state node's `on` property.
313
+ */
314
+ onDone?: string | SingleOrArray<TransitionConfig<TContext, DoneEventObject>> | undefined;
315
+ /**
316
+ * The mapping (or array) of delays (in milliseconds) to their potential transition(s).
317
+ * The delayed transitions are taken after the specified delay in an interpreter.
318
+ */
319
+ after?: DelayedTransitions<TContext, TEvent>;
320
+ /**
321
+ * An eventless transition that is always taken when this state node is active.
322
+ */
323
+ always?: TransitionConfigOrTarget<TContext, TEvent>;
324
+ /**
325
+ * @private
326
+ */
327
+ parent?: StateNode<TContext, TEvent>;
328
+ strict?: boolean | undefined;
329
+ /**
330
+ * The meta data associated with this state node, which will be returned in State instances.
331
+ */
332
+ meta?: any;
333
+ /**
334
+ * The data sent with the "done.state._id_" event if this is a final state node.
335
+ *
336
+ * The data will be evaluated with the current `context` and placed on the `.data` property
337
+ * of the event.
338
+ */
339
+ data?: Mapper<TContext, TEvent, any> | PropertyMapper<TContext, TEvent, any>;
340
+ /**
341
+ * The unique ID of the state node, which can be referenced as a transition target via the
342
+ * `#id` syntax.
343
+ */
344
+ id?: string | undefined;
345
+ /**
346
+ * The string delimiter for serializing the path to a string. The default is "."
347
+ */
348
+ delimiter?: string;
349
+ /**
350
+ * The order this state node appears. Corresponds to the implicit SCXML document order.
351
+ */
352
+ order?: number;
353
+ /**
354
+ * The tags for this state node, which are accumulated into the `state.tags` property.
355
+ */
356
+ tags?: SingleOrArray<string>;
357
+ /**
358
+ * A text description of the state node
359
+ */
360
+ description?: string;
361
+ /**
362
+ * A default target for a history state
363
+ */
364
+ target?: string;
365
+ }
366
+ export interface StateNodeDefinition<TContext extends MachineContext, TEvent extends EventObject> {
367
+ id: string;
368
+ version?: string | undefined;
369
+ key: string;
370
+ type: 'atomic' | 'compound' | 'parallel' | 'final' | 'history';
371
+ initial: InitialTransitionDefinition<TContext, TEvent> | undefined;
372
+ history: boolean | 'shallow' | 'deep' | undefined;
373
+ states: StatesDefinition<TContext, TEvent>;
374
+ on: TransitionDefinitionMap<TContext, TEvent>;
375
+ transitions: Array<TransitionDefinition<TContext, TEvent>>;
376
+ entry: BaseActionObject[];
377
+ exit: BaseActionObject[];
378
+ meta: any;
379
+ order: number;
380
+ data?: FinalStateNodeConfig<TContext, TEvent>['data'];
381
+ invoke: Array<InvokeDefinition<TContext, TEvent>>;
382
+ description?: string;
383
+ tags: string[];
384
+ }
385
+ export interface StateMachineDefinition<TContext extends MachineContext, TEvent extends EventObject> extends StateNodeDefinition<TContext, TEvent> {
386
+ context: TContext;
387
+ }
388
+ export type AnyStateNode = StateNode<any, any>;
389
+ export type AnyStateNodeDefinition = StateNodeDefinition<any, any>;
390
+ export type AnyState = State<any, any, any>;
391
+ export type AnyStateMachine = StateMachine<any, any, any, any, any>;
392
+ export type AnyStateConfig = StateConfig<any, AnyEventObject>;
393
+ export interface AtomicStateNodeConfig<TContext extends MachineContext, TEvent extends EventObject> extends StateNodeConfig<TContext, TEvent> {
394
+ initial?: undefined;
395
+ parallel?: false | undefined;
396
+ states?: undefined;
397
+ onDone?: undefined;
398
+ }
399
+ export interface HistoryStateNodeConfig<TContext extends MachineContext, TEvent extends EventObject> extends AtomicStateNodeConfig<TContext, TEvent> {
400
+ history: 'shallow' | 'deep' | true;
401
+ target: string | undefined;
402
+ }
403
+ export interface FinalStateNodeConfig<TContext extends MachineContext, TEvent extends EventObject> extends AtomicStateNodeConfig<TContext, TEvent> {
404
+ type: 'final';
405
+ /**
406
+ * The data to be sent with the "done.state.<id>" event. The data can be
407
+ * static or dynamic (based on assigners).
408
+ */
409
+ data?: Mapper<TContext, TEvent, any> | PropertyMapper<TContext, TEvent, any>;
410
+ }
411
+ export type SimpleOrStateNodeConfig<TContext extends MachineContext, TEvent extends EventObject> = AtomicStateNodeConfig<TContext, TEvent> | StateNodeConfig<TContext, TEvent>;
412
+ export type ActionFunctionMap<TContext extends MachineContext, TEvent extends EventObject, TAction extends ParameterizedObject = ParameterizedObject> = {
413
+ [K in TAction['type']]?: BaseDynamicActionObject<TContext, TEvent, TEvent, TAction, any> | ActionFunction<TContext, TEvent, TAction extends {
414
+ type: K;
415
+ } ? TAction : never>;
416
+ };
417
+ export type DelayFunctionMap<TContext extends MachineContext, TEvent extends EventObject> = Record<string, DelayConfig<TContext, TEvent>>;
418
+ export type DelayConfig<TContext extends MachineContext, TEvent extends EventObject> = number | DelayExpr<TContext, TEvent>;
419
+ export interface MachineImplementationsSimplified<TContext extends MachineContext, TEvent extends EventObject, TAction extends ParameterizedObject = ParameterizedObject> {
420
+ guards: Record<string, GuardPredicate<TContext, TEvent>>;
421
+ actions: ActionFunctionMap<TContext, TEvent, TAction>;
422
+ actors: Record<string, AnyActorBehavior | {
423
+ src: AnyActorBehavior;
424
+ input: Mapper<TContext, TEvent, any> | any;
425
+ }>;
426
+ delays: DelayFunctionMap<TContext, TEvent>;
427
+ }
428
+ type MachineImplementationsActions<TContext extends MachineContext, TResolvedTypesMeta, TEventsCausingActions = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'eventsCausingActions'>, TIndexedEvents = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedEvents'>> = {
429
+ [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
430
+ 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`
431
+ Cast<Prop<TIndexedEvents, keyof TIndexedEvents>, EventObject>>;
432
+ };
433
+ type MachineImplementationsDelays<TContext extends MachineContext, TResolvedTypesMeta, TEventsCausingDelays = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'eventsCausingDelays'>, TIndexedEvents = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedEvents'>> = {
434
+ [K in keyof TEventsCausingDelays]?: DelayConfig<TContext, Cast<Prop<TIndexedEvents, TEventsCausingDelays[K]>, EventObject>>;
435
+ };
436
+ type MachineImplementationsGuards<TContext extends MachineContext, TResolvedTypesMeta, TEventsCausingGuards = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'eventsCausingGuards'>, TIndexedEvents = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedEvents'>> = {
437
+ [K in keyof TEventsCausingGuards]?: GuardPredicate<TContext, Cast<Prop<TIndexedEvents, TEventsCausingGuards[K]>, EventObject>>;
438
+ };
439
+ type MachineImplementationsActors<TContext extends MachineContext, TResolvedTypesMeta, TEventsCausingActors = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'eventsCausingActors'>, TIndexedEvents = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedEvents'>, _TInvokeSrcNameMap = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'invokeSrcNameMap'>> = {
440
+ [K in keyof TEventsCausingActors]?: AnyActorBehavior | {
441
+ src: AnyActorBehavior;
442
+ input: Mapper<TContext, Cast<Prop<TIndexedEvents, TEventsCausingActors[K]>, EventObject>, any> | any;
443
+ };
444
+ };
445
+ type MakeKeysRequired<T extends string> = {
446
+ [K in T]: unknown;
447
+ };
448
+ type MaybeMakeMissingImplementationsRequired<TImplementationType, TMissingImplementationsForType, TRequireMissingImplementations> = TRequireMissingImplementations extends true ? IsNever<TMissingImplementationsForType> extends true ? {} : {
449
+ [K in Cast<TImplementationType, string>]: MakeKeysRequired<Cast<TMissingImplementationsForType, string>>;
450
+ } : {};
451
+ type GenerateActionsImplementationsPart<TContext extends MachineContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> = MaybeMakeMissingImplementationsRequired<'actions', Prop<TMissingImplementations, 'actions'>, TRequireMissingImplementations> & {
452
+ actions?: MachineImplementationsActions<TContext, TResolvedTypesMeta>;
453
+ };
454
+ type GenerateDelaysImplementationsPart<TContext extends MachineContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> = MaybeMakeMissingImplementationsRequired<'delays', Prop<TMissingImplementations, 'delays'>, TRequireMissingImplementations> & {
455
+ delays?: MachineImplementationsDelays<TContext, TResolvedTypesMeta>;
456
+ };
457
+ type GenerateGuardsImplementationsPart<TContext extends MachineContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> = MaybeMakeMissingImplementationsRequired<'guards', Prop<TMissingImplementations, 'guards'>, TRequireMissingImplementations> & {
458
+ guards?: MachineImplementationsGuards<TContext, TResolvedTypesMeta>;
459
+ };
460
+ type GenerateActorsImplementationsPart<TContext extends MachineContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> = MaybeMakeMissingImplementationsRequired<'actors', Prop<TMissingImplementations, 'actors'>, TRequireMissingImplementations> & {
461
+ actors?: MachineImplementationsActors<TContext, TResolvedTypesMeta>;
462
+ };
463
+ 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>;
464
+ 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>>;
465
+ type InitialContext<TContext extends MachineContext> = TContext | ContextFactory<TContext>;
466
+ export type ContextFactory<TContext extends MachineContext> = ({ spawn, input }: {
467
+ spawn: Spawner;
468
+ input: any;
469
+ }) => TContext;
470
+ 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> {
471
+ /**
472
+ * The initial context (extended state)
473
+ */
474
+ context?: InitialContext<LowInfer<TContext>>;
475
+ /**
476
+ * The machine's own version.
477
+ */
478
+ version?: string;
479
+ /**
480
+ * If `true`, will use SCXML semantics, such as event token matching.
481
+ */
482
+ scxml?: boolean;
483
+ schema?: MachineSchema<TContext, TEvent, TActorMap>;
484
+ tsTypes?: TTypesMeta;
485
+ }
486
+ export type ActorMap = Record<string, {
487
+ data: any;
488
+ }>;
489
+ export interface MachineSchema<TContext extends MachineContext, TEvent extends EventObject, TActorMap extends ActorMap = ActorMap> {
490
+ context?: TContext;
491
+ actions?: {
492
+ type: string;
493
+ [key: string]: any;
494
+ };
495
+ actors?: TActorMap;
496
+ events?: TEvent;
497
+ guards?: {
498
+ type: string;
499
+ [key: string]: any;
500
+ };
501
+ }
502
+ export interface HistoryStateNode<TContext extends MachineContext> extends StateNode<TContext> {
503
+ history: 'shallow' | 'deep';
504
+ target: string | undefined;
505
+ }
506
+ export type HistoryValue<TContext extends MachineContext, TEvent extends EventObject> = Record<string, Array<StateNode<TContext, TEvent>>>;
507
+ export type AnyHistoryValue = HistoryValue<any, any>;
508
+ 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;
509
+ export type Transitions<TContext extends MachineContext, TEvent extends EventObject> = Array<TransitionDefinition<TContext, TEvent>>;
510
+ export declare enum ActionTypes {
511
+ Stop = "xstate.stop",
512
+ Raise = "xstate.raise",
513
+ Send = "xstate.send",
514
+ Cancel = "xstate.cancel",
515
+ Assign = "xstate.assign",
516
+ After = "xstate.after",
517
+ DoneState = "done.state",
518
+ DoneInvoke = "done.invoke",
519
+ Log = "xstate.log",
520
+ Init = "xstate.init",
521
+ Invoke = "xstate.invoke",
522
+ ErrorExecution = "error.execution",
523
+ ErrorCommunication = "error.communication",
524
+ ErrorPlatform = "error.platform",
525
+ ErrorCustom = "xstate.error",
526
+ Pure = "xstate.pure",
527
+ Choose = "xstate.choose"
528
+ }
529
+ export interface RaiseActionObject<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject = TExpressionEvent> extends BaseActionObject {
530
+ type: ActionTypes.Raise;
531
+ params: {
532
+ event: TEvent;
533
+ _event: SCXML.Event<TEvent>;
534
+ delay: RaiseActionOptions<TContext, TExpressionEvent>['delay'];
535
+ id: string | number;
536
+ };
537
+ }
538
+ export interface DoneInvokeEvent<TData> extends EventObject {
539
+ type: `done.invoke.${string}`;
540
+ data: TData;
541
+ }
542
+ export interface ErrorEvent<TErrorData> {
543
+ type: `error.${string}`;
544
+ data: TErrorData;
545
+ }
546
+ export interface SnapshotEvent<TData> {
547
+ type: `xstate.snapshot.${string}`;
548
+ data: TData;
549
+ }
550
+ export interface ErrorExecutionEvent extends EventObject {
551
+ src: string;
552
+ type: ActionTypes.ErrorExecution;
553
+ data: any;
554
+ }
555
+ export interface ErrorPlatformEvent extends EventObject {
556
+ data: any;
557
+ }
558
+ export interface SCXMLErrorEvent extends SCXML.Event<any> {
559
+ name: ActionTypes.ErrorExecution | ActionTypes.ErrorPlatform | ActionTypes.ErrorCommunication;
560
+ data: any;
561
+ }
562
+ export interface DoneEventObject extends EventObject {
563
+ data?: any;
564
+ toString(): string;
565
+ }
566
+ export type DoneEvent = DoneEventObject & string;
567
+ export interface InvokeAction {
568
+ type: ActionTypes.Invoke;
569
+ src: string | ActorRef<any>;
570
+ id: string;
571
+ exec?: undefined;
572
+ meta: MetaObject | undefined;
573
+ }
574
+ export interface DynamicInvokeActionObject<TContext extends MachineContext, TEvent extends EventObject> {
575
+ type: ActionTypes.Invoke;
576
+ params: InvokeDefinition<TContext, TEvent>;
577
+ }
578
+ export interface InvokeActionObject extends BaseActionObject {
579
+ type: ActionTypes.Invoke;
580
+ params: {
581
+ src: string | ActorRef<any>;
582
+ id: string;
583
+ exec?: undefined;
584
+ ref?: ActorRef<any>;
585
+ meta: MetaObject | undefined;
586
+ };
587
+ }
588
+ export interface DynamicStopActionObject<TContext extends MachineContext, TExpressionEvent extends EventObject> {
589
+ type: ActionTypes.Stop;
590
+ params: {
591
+ actor: string | ActorRef<any> | Expr<TContext, TExpressionEvent, ActorRef<any> | string>;
592
+ };
593
+ }
594
+ export interface StopActionObject {
595
+ type: ActionTypes.Stop;
596
+ params: {
597
+ actor: ActorRef<any>;
598
+ };
599
+ }
600
+ export type DelayExpr<TContext extends MachineContext, TEvent extends EventObject> = ExprWithMeta<TContext, TEvent, number>;
601
+ export type LogExpr<TContext extends MachineContext, TEvent extends EventObject> = ExprWithMeta<TContext, TEvent, any>;
602
+ export interface DynamicLogAction<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject> extends BaseDynamicActionObject<TContext, TExpressionEvent, TEvent, LogActionObject, {
603
+ label: string | undefined;
604
+ expr: string | LogExpr<TContext, TExpressionEvent>;
605
+ }> {
606
+ type: ActionTypes.Log;
607
+ }
608
+ export interface LogActionObject extends BuiltInActionObject {
609
+ type: ActionTypes.Log;
610
+ params: {
611
+ label: string | undefined;
612
+ value: any;
613
+ };
614
+ }
615
+ export interface SendActionObject<TSentEvent extends EventObject = AnyEventObject> extends BaseActionObject {
616
+ type: 'xstate.send';
617
+ params: {
618
+ to: ActorRef<TSentEvent> | undefined;
619
+ _event: SCXML.Event<TSentEvent>;
620
+ event: TSentEvent;
621
+ delay?: number;
622
+ id: string | number;
623
+ internal: boolean;
624
+ };
625
+ }
626
+ export type Expr<TContext extends MachineContext, TEvent extends EventObject, T> = (context: TContext, event: TEvent) => T;
627
+ export type ExprWithMeta<TContext extends MachineContext, TEvent extends EventObject, T> = (context: TContext, event: TEvent, meta: StateMeta<TContext, TEvent>) => T;
628
+ export type SendExpr<TContext extends MachineContext, TEvent extends EventObject, TSentEvent extends EventObject = AnyEventObject> = ExprWithMeta<TContext, TEvent, TSentEvent>;
629
+ export declare enum SpecialTargets {
630
+ Parent = "#_parent",
631
+ Internal = "#_internal"
632
+ }
633
+ export interface SendActionOptions<TContext extends MachineContext, TEvent extends EventObject> extends RaiseActionOptions<TContext, TEvent> {
634
+ to?: string | ActorRef<any, any> | ExprWithMeta<TContext, TEvent, string | ActorRef<any, any>>;
635
+ }
636
+ export interface RaiseActionOptions<TContext extends MachineContext, TEvent extends EventObject> {
637
+ id?: string | number;
638
+ delay?: number | string | DelayExpr<TContext, TEvent>;
639
+ }
640
+ export interface RaiseActionParams<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject> extends RaiseActionOptions<TContext, TExpressionEvent> {
641
+ event: TEvent | SendExpr<TContext, TExpressionEvent, TEvent>;
642
+ }
643
+ export interface SendActionParams<TContext extends MachineContext, TEvent extends EventObject, TSentEvent extends EventObject = EventObject> extends SendActionOptions<TContext, TEvent> {
644
+ event: TSentEvent | SendExpr<TContext, TEvent, TSentEvent>;
645
+ }
646
+ export interface DynamicCancelActionObject<TContext extends MachineContext, TExpressionEvent extends EventObject> {
647
+ type: ActionTypes.Cancel;
648
+ params: {
649
+ sendId: string | ExprWithMeta<TContext, TExpressionEvent, string>;
650
+ };
651
+ }
652
+ export interface CancelActionObject extends BaseActionObject {
653
+ type: ActionTypes.Cancel;
654
+ params: {
655
+ sendId: string;
656
+ };
657
+ }
658
+ export type Assigner<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject = TExpressionEvent> = (context: TContext, event: TExpressionEvent, meta: AssignMeta<TContext, TExpressionEvent, TEvent>) => Partial<TContext>;
659
+ export type PartialAssigner<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject, TKey extends keyof TContext> = (context: TContext, event: TExpressionEvent, meta: AssignMeta<TContext, TExpressionEvent, TEvent>) => TContext[TKey];
660
+ export type PropertyAssigner<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject = TExpressionEvent> = {
661
+ [K in keyof TContext]?: PartialAssigner<TContext, TExpressionEvent, TEvent, K> | TContext[K];
662
+ };
663
+ export type Mapper<TContext extends MachineContext, TEvent extends EventObject, TParams extends {}> = (context: TContext, event: TEvent) => TParams;
664
+ export type PropertyMapper<TContext extends MachineContext, TEvent extends EventObject, TParams extends {}> = {
665
+ [K in keyof TParams]?: ((context: TContext, event: TEvent) => TParams[K]) | TParams[K];
666
+ };
667
+ export interface AnyAssignAction extends BaseActionObject {
668
+ type: ActionTypes.Assign;
669
+ assignment: any;
670
+ }
671
+ export type DynamicAssignAction<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject = TExpressionEvent> = BaseDynamicActionObject<TContext, TExpressionEvent, TEvent, AssignActionObject<TContext> | RaiseActionObject<TContext, TExpressionEvent>, {
672
+ assignment: Assigner<TContext, TExpressionEvent, TEvent> | PropertyAssigner<TContext, TExpressionEvent, TEvent>;
673
+ }>;
674
+ export interface AssignActionObject<TContext extends MachineContext> extends BaseActionObject {
675
+ type: ActionTypes.Assign;
676
+ params: {
677
+ context: TContext;
678
+ actions: BaseActionObject[];
679
+ };
680
+ }
681
+ export interface DynamicPureActionObject<TContext extends MachineContext, TEvent extends EventObject> {
682
+ type: ActionTypes.Pure;
683
+ params: {
684
+ get: (context: TContext, event: TEvent) => SingleOrArray<BaseActionObject | BaseActionObject['type']> | undefined;
685
+ };
686
+ }
687
+ export interface PureActionObject extends BaseActionObject {
688
+ type: ActionTypes.Pure;
689
+ params: {
690
+ actions: BaseActionObject[];
691
+ };
692
+ }
693
+ export interface ChooseAction<TContext extends MachineContext, TEvent extends EventObject> extends BaseActionObject {
694
+ type: ActionTypes.Choose;
695
+ params: {
696
+ guards: Array<ChooseCondition<TContext, TEvent>>;
697
+ };
698
+ }
699
+ export interface ResolvedChooseAction extends BaseActionObject {
700
+ type: ActionTypes.Choose;
701
+ params: {
702
+ actions: BaseActionObject[];
703
+ };
704
+ }
705
+ export interface TransitionDefinition<TContext extends MachineContext, TEvent extends EventObject> extends Omit<TransitionConfig<TContext, TEvent>, 'target'> {
706
+ target: Array<StateNode<TContext, TEvent>> | undefined;
707
+ source: StateNode<TContext, TEvent>;
708
+ actions: BaseActionObject[];
709
+ external: boolean;
710
+ guard?: GuardDefinition<TContext, TEvent>;
711
+ eventType: TEvent['type'] | '*';
712
+ toJSON: () => {
713
+ target: string[] | undefined;
714
+ source: string;
715
+ actions: BaseActionObject[];
716
+ guard?: GuardDefinition<TContext, TEvent>;
717
+ eventType: TEvent['type'] | '*';
718
+ meta?: Record<string, any>;
719
+ };
720
+ }
721
+ export type AnyTransitionDefinition = TransitionDefinition<any, any>;
722
+ export interface InitialTransitionDefinition<TContext extends MachineContext, TEvent extends EventObject> extends TransitionDefinition<TContext, TEvent> {
723
+ target: Array<StateNode<TContext, TEvent>>;
724
+ guard?: never;
725
+ }
726
+ export type TransitionDefinitionMap<TContext extends MachineContext, TEvent extends EventObject> = {
727
+ [K in TEvent['type'] | '*']: Array<TransitionDefinition<TContext, K extends TEvent['type'] ? Extract<TEvent, {
728
+ type: K;
729
+ }> : EventObject>>;
730
+ };
731
+ export interface DelayedTransitionDefinition<TContext extends MachineContext, TEvent extends EventObject> extends TransitionDefinition<TContext, TEvent> {
732
+ delay: number | string | DelayExpr<TContext, TEvent>;
733
+ }
734
+ export interface Edge<TContext extends MachineContext, TEvent extends EventObject, TEventType extends TEvent['type'] = string> {
735
+ event: TEventType;
736
+ source: StateNode<TContext, TEvent>;
737
+ target: StateNode<TContext, TEvent>;
738
+ cond?: GuardConfig<TContext, TEvent & {
739
+ type: TEventType;
740
+ }>;
741
+ actions: Array<Action<TContext, TEvent>>;
742
+ meta?: MetaObject;
743
+ transition: TransitionDefinition<TContext, TEvent>;
744
+ }
745
+ export interface NodesAndEdges<TContext extends MachineContext, TEvent extends EventObject> {
746
+ nodes: StateNode[];
747
+ edges: Array<Edge<TContext, TEvent, TEvent['type']>>;
748
+ }
749
+ export interface Segment<TContext extends MachineContext, TEvent extends EventObject> {
750
+ /**
751
+ * From state.
752
+ */
753
+ state: State<TContext, TEvent>;
754
+ /**
755
+ * Event from state.
756
+ */
757
+ event: TEvent;
758
+ }
759
+ export interface StateMeta<TContext extends MachineContext, TEvent extends EventObject> {
760
+ state: State<TContext, TEvent, any>;
761
+ _event: SCXML.Event<TEvent>;
762
+ self: ActorRef<TEvent>;
763
+ system: ActorSystem<any>;
764
+ }
765
+ export interface StateLike<TContext extends MachineContext> {
766
+ value: StateValue;
767
+ context: TContext;
768
+ event: EventObject;
769
+ _event: SCXML.Event<EventObject>;
770
+ }
771
+ export interface StateConfig<TContext extends MachineContext, TEvent extends EventObject> {
772
+ value: StateValue;
773
+ context: TContext;
774
+ _event: SCXML.Event<TEvent>;
775
+ historyValue?: HistoryValue<TContext, TEvent>;
776
+ actions?: BaseActionObject[];
777
+ meta?: any;
778
+ configuration?: Array<StateNode<TContext, TEvent>>;
779
+ transitions?: Array<TransitionDefinition<TContext, TEvent>>;
780
+ children: Record<string, ActorRef<any>>;
781
+ done?: boolean;
782
+ output?: any;
783
+ tags?: Set<string>;
784
+ machine?: StateMachine<TContext, TEvent, any, any, any>;
785
+ _internalQueue?: Array<SCXML.Event<TEvent>>;
786
+ }
787
+ export interface InterpreterOptions<_TActorBehavior extends AnyActorBehavior> {
788
+ /**
789
+ * Whether state actions should be executed immediately upon transition. Defaults to `true`.
790
+ */
791
+ execute?: boolean;
792
+ clock?: Clock;
793
+ logger?: (...args: any[]) => void;
794
+ parent?: ActorRef<any>;
795
+ /**
796
+ * If `true`, defers processing of sent events until the service
797
+ * is initialized (`.start()`). Otherwise, an error will be thrown
798
+ * for events sent to an uninitialized service.
799
+ *
800
+ * Default: `true`
801
+ */
802
+ deferEvents?: boolean;
803
+ /**
804
+ * The custom `id` for referencing this service.
805
+ */
806
+ id?: string;
807
+ /**
808
+ * If `true`, states and events will be logged to Redux DevTools.
809
+ *
810
+ * Default: `false`
811
+ */
812
+ devTools?: boolean | DevToolsAdapter;
813
+ sync?: boolean;
814
+ /**
815
+ * The system ID to register this actor under
816
+ */
817
+ systemId?: string;
818
+ /**
819
+ * The input data to pass to the actor.
820
+ */
821
+ input?: any;
822
+ state?: any;
823
+ /**
824
+ * The source definition.
825
+ */
826
+ src?: string;
827
+ }
828
+ export type AnyInterpreter = Interpreter<any>;
829
+ export declare namespace SCXML {
830
+ interface Event<TEvent extends EventObject> {
831
+ /**
832
+ * This is a character string giving the name of the event.
833
+ * The SCXML Processor must set the name field to the name of this event.
834
+ * It is what is matched against the 'event' attribute of <transition>.
835
+ * Note that transitions can do additional tests by using the value of this field
836
+ * inside boolean expressions in the 'cond' attribute.
837
+ */
838
+ name: string;
839
+ /**
840
+ * This field describes the event type.
841
+ * The SCXML Processor must set it to: "platform" (for events raised by the platform itself, such as error events),
842
+ * "internal" (for events raised by <raise> and <send> with target '_internal')
843
+ * or "external" (for all other events).
844
+ */
845
+ type: 'platform' | 'internal' | 'external';
846
+ /**
847
+ * If the sending entity has specified a value for this, the Processor must set this field to that value
848
+ * (see C Event I/O Processors for details).
849
+ * Otherwise, in the case of error events triggered by a failed attempt to send an event,
850
+ * the Processor must set this field to the send id of the triggering <send> element.
851
+ * Otherwise it must leave it blank.
852
+ */
853
+ sendid?: string;
854
+ /**
855
+ * This is a URI, equivalent to the 'target' attribute on the <send> element.
856
+ * For external events, the SCXML Processor should set this field to a value which,
857
+ * when used as the value of 'target', will allow the receiver of the event to <send>
858
+ * a response back to the originating entity via the Event I/O Processor specified in 'origintype'.
859
+ * For internal and platform events, the Processor must leave this field blank.
860
+ */
861
+ origin?: ActorRef<any>;
862
+ /**
863
+ * This is equivalent to the 'type' field on the <send> element.
864
+ * For external events, the SCXML Processor should set this field to a value which,
865
+ * when used as the value of 'type', will allow the receiver of the event to <send>
866
+ * a response back to the originating entity at the URI specified by 'origin'.
867
+ * For internal and platform events, the Processor must leave this field blank.
868
+ */
869
+ origintype?: string;
870
+ /**
871
+ * If this event is generated from an invoked child process, the SCXML Processor
872
+ * must set this field to the invoke id of the invocation that triggered the child process.
873
+ * Otherwise it must leave it blank.
874
+ */
875
+ invokeid?: string;
876
+ /**
877
+ * This field contains whatever data the sending entity chose to include in this event.
878
+ * The receiving SCXML Processor should reformat this data to match its data model,
879
+ * but must not otherwise modify it.
880
+ *
881
+ * If the conversion is not possible, the Processor must leave the field blank
882
+ * and must place an error 'error.execution' in the internal event queue.
883
+ */
884
+ data: TEvent;
885
+ /**
886
+ * @private
887
+ */
888
+ $$type: 'scxml';
889
+ }
890
+ }
891
+ export type Observer<T> = {
892
+ next?: (value: T) => void;
893
+ error?: (err: any) => void;
894
+ complete?: () => void;
895
+ };
896
+ export interface Subscription {
897
+ unsubscribe(): void;
898
+ }
899
+ export interface InteropObservable<T> {
900
+ [Symbol.observable]: () => InteropSubscribable<T>;
901
+ }
902
+ export interface InteropSubscribable<T> {
903
+ subscribe(observer: Observer<T>): Subscription;
904
+ }
905
+ export interface Subscribable<T> extends InteropSubscribable<T> {
906
+ subscribe(observer: Observer<T>): Subscription;
907
+ subscribe(next: (value: T) => void, error?: (error: any) => void, complete?: () => void): Subscription;
908
+ }
909
+ export type Spawnable = AnyStateMachine | PromiseLike<any> | InvokeCallback | InteropObservable<any> | Subscribable<any> | ActorBehavior<any, any>;
910
+ export type ExtractEvent<TEvent extends EventObject, TEventType extends TEvent['type']> = TEvent extends any ? TEventType extends TEvent['type'] ? TEvent : never : never;
911
+ export interface BaseActorRef<TEvent extends EventObject> {
912
+ send: (event: TEvent) => void;
913
+ }
914
+ export interface ActorLike<TCurrent, TEvent extends EventObject> extends Subscribable<TCurrent> {
915
+ send: (event: TEvent) => void;
916
+ }
917
+ export interface ActorRef<TEvent extends EventObject, TSnapshot = any> extends Subscribable<TSnapshot>, InteropObservable<TSnapshot> {
918
+ /**
919
+ * The unique identifier for this actor relative to its parent.
920
+ */
921
+ id: string;
922
+ sessionId: string;
923
+ send: (event: TEvent) => void;
924
+ start?: () => void;
925
+ getSnapshot: () => TSnapshot | undefined;
926
+ getPersistedState?: () => any;
927
+ stop: () => void;
928
+ toJSON?: () => any;
929
+ _parent?: ActorRef<any, any>;
930
+ system?: ActorSystem<any>;
931
+ status: ActorStatus;
932
+ src?: string;
933
+ }
934
+ export type AnyActorRef = ActorRef<any, any>;
935
+ 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<{
936
+ type: string;
937
+ }, U | undefined> : R extends ActorBehavior<infer TEvent, infer TSnapshot> ? ActorRef<TEvent, TSnapshot> : never : never;
938
+ export type DevToolsAdapter = (service: AnyInterpreter) => void;
939
+ 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;
940
+ 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;
941
+ export type __ResolvedTypesMetaFrom<T> = T extends StateMachine<any, any, any, infer TResolvedTypesMeta> ? TResolvedTypesMeta : never;
942
+ export type EventOfMachine<TMachine extends AnyStateMachine> = TMachine extends StateMachine<any, infer E, any, any, any> ? E : never;
943
+ export interface ActorContext<TEvent extends EventObject, TSnapshot, TSystem extends ActorSystem<any> = ActorSystem<any>> {
944
+ self: ActorRef<TEvent, TSnapshot>;
945
+ id: string;
946
+ sessionId: string;
947
+ logger: (...args: any[]) => void;
948
+ defer: (fn: () => void) => void;
949
+ system: TSystem;
950
+ stopChild: (child: AnyActorRef) => void;
951
+ }
952
+ export type AnyActorContext = ActorContext<any, any, any>;
953
+ export interface ActorBehavior<TEvent extends EventObject, TSnapshot = any, TInternalState = any,
954
+ /**
955
+ * Serialized internal state used for persistence & restoration
956
+ */
957
+ TPersisted = TInternalState, TSystem extends ActorSystem<any> = ActorSystem<any>> {
958
+ transition: (state: TInternalState, message: TEvent | LifecycleSignal, ctx: ActorContext<TEvent, TSnapshot, TSystem>) => TInternalState;
959
+ getInitialState: (actorCtx: ActorContext<TEvent, TSnapshot, any>, input: any) => TInternalState;
960
+ restoreState?: (persistedState: TPersisted, actorCtx: ActorContext<TEvent, TSnapshot>) => TInternalState;
961
+ getSnapshot?: (state: TInternalState) => TSnapshot;
962
+ getStatus?: (state: TInternalState) => {
963
+ status: string;
964
+ data?: any;
965
+ };
966
+ start?: (state: TInternalState, actorCtx: ActorContext<TEvent, TSnapshot>) => void;
967
+ /**
968
+ * @returns Persisted state
969
+ */
970
+ getPersistedState?: (state: TInternalState) => TPersisted;
971
+ }
972
+ export type AnyActorBehavior = ActorBehavior<any, any, any, any>;
973
+ 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;
974
+ export type EventFromBehavior<TBehavior extends ActorBehavior<any, any>> = TBehavior extends ActorBehavior<infer TEvent, infer _> ? TEvent : never;
975
+ export type PersistedStateFrom<TBehavior extends ActorBehavior<any, any>> = TBehavior extends ActorBehavior<infer _TEvent, infer _TSnapshot, infer _TInternalState, infer TPersisted> ? TPersisted : never;
976
+ export type InternalStateFrom<TBehavior extends ActorBehavior<any, any>> = TBehavior extends ActorBehavior<infer _TEvent, infer _TSnapshot, infer TInternalState, infer _TPersisted> ? TInternalState : never;
977
+ 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;
978
+ export type EventFrom<T, K extends Prop<TEvent, 'type'> = never, TEvent extends EventObject = ResolveEventType<T>> = IsNever<K> extends true ? TEvent : ExtractEvent<TEvent, K>;
979
+ 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;
980
+ export type InferEvent<E extends EventObject> = {
981
+ [T in E['type']]: {
982
+ type: T;
983
+ } & Extract<E, {
984
+ type: T;
985
+ }>;
986
+ }[E['type']];
987
+ export type TODO = any;
988
+ export type StateValueFrom<TMachine extends AnyStateMachine> = Parameters<StateFrom<TMachine>['matches']>[0];
989
+ export type StateFromMachine<TMachine extends AnyStateMachine> = TMachine['initialState'];
990
+ export interface ActorSystemInfo {
991
+ actors: Record<string, AnyActorRef>;
992
+ }
993
+ export interface ActorSystem<T extends ActorSystemInfo> {
994
+ _bookId: () => string;
995
+ _register: (sessionId: string, actorRef: AnyActorRef) => string;
996
+ _unregister: (actorRef: AnyActorRef) => void;
997
+ _set: <K extends keyof T['actors']>(key: K, actorRef: T['actors'][K]) => void;
998
+ get: <K extends keyof T['actors']>(key: K) => T['actors'][K] | undefined;
999
+ }
1000
+ export type PersistedMachineState<TState extends AnyState> = Pick<TState, 'value' | 'output' | 'context' | '_event' | 'done' | 'historyValue'> & {
1001
+ children: {
1002
+ [K in keyof TState['children']]: {
1003
+ state: any;
1004
+ src?: string;
1005
+ };
1006
+ };
1007
+ };
1008
+ export {};