xstate 5.0.0-beta.29 → 5.0.0-beta.31

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 (52) hide show
  1. package/actions/dist/xstate-actions.cjs.js +3 -3
  2. package/actions/dist/xstate-actions.development.cjs.js +3 -3
  3. package/actions/dist/xstate-actions.development.esm.js +3 -3
  4. package/actions/dist/xstate-actions.esm.js +3 -3
  5. package/actions/dist/xstate-actions.umd.min.js +1 -1
  6. package/actions/dist/xstate-actions.umd.min.js.map +1 -1
  7. package/actors/dist/xstate-actors.cjs.js +100 -104
  8. package/actors/dist/xstate-actors.development.cjs.js +100 -104
  9. package/actors/dist/xstate-actors.development.esm.js +100 -104
  10. package/actors/dist/xstate-actors.esm.js +100 -104
  11. package/actors/dist/xstate-actors.umd.min.js +1 -1
  12. package/actors/dist/xstate-actors.umd.min.js.map +1 -1
  13. package/dist/declarations/src/Machine.d.ts +2 -2
  14. package/dist/declarations/src/State.d.ts +4 -6
  15. package/dist/declarations/src/StateMachine.d.ts +28 -21
  16. package/dist/declarations/src/StateNode.d.ts +3 -3
  17. package/dist/declarations/src/actions/stop.d.ts +1 -1
  18. package/dist/declarations/src/actors/callback.d.ts +8 -8
  19. package/dist/declarations/src/actors/index.d.ts +3 -3
  20. package/dist/declarations/src/actors/observable.d.ts +12 -13
  21. package/dist/declarations/src/actors/promise.d.ts +11 -14
  22. package/dist/declarations/src/actors/transition.d.ts +10 -7
  23. package/dist/declarations/src/index.d.ts +1 -1
  24. package/dist/declarations/src/interpreter.d.ts +4 -4
  25. package/dist/declarations/src/spawn.d.ts +3 -0
  26. package/dist/declarations/src/stateUtils.d.ts +5 -6
  27. package/dist/declarations/src/types.d.ts +74 -69
  28. package/dist/declarations/src/utils.d.ts +4 -4
  29. package/dist/{interpreter-c357bc50.cjs.js → interpreter-05e11c15.cjs.js} +11 -13
  30. package/dist/{interpreter-e2c6a579.development.cjs.js → interpreter-a2236840.development.cjs.js} +12 -14
  31. package/dist/{interpreter-498891b2.esm.js → interpreter-d5fa7ce0.esm.js} +11 -13
  32. package/dist/{interpreter-6e7909c8.development.esm.js → interpreter-e4d2487f.development.esm.js} +12 -14
  33. package/dist/{raise-59f2c242.esm.js → raise-6a68d0cc.esm.js} +61 -32
  34. package/dist/{raise-e778a828.development.esm.js → raise-6fbd4513.development.esm.js} +61 -32
  35. package/dist/{raise-03e57569.cjs.js → raise-90808d65.cjs.js} +61 -32
  36. package/dist/{raise-f751dfac.development.cjs.js → raise-b4bfe138.development.cjs.js} +61 -32
  37. package/dist/{send-f53778f6.development.cjs.js → send-4163d2af.development.cjs.js} +52 -20
  38. package/dist/{send-51717e53.cjs.js → send-72e85cc6.cjs.js} +52 -20
  39. package/dist/{send-42c83fb2.development.esm.js → send-7baeedcb.development.esm.js} +52 -20
  40. package/dist/{send-fff224db.esm.js → send-e5f0f3f6.esm.js} +52 -20
  41. package/dist/xstate.cjs.js +15 -24
  42. package/dist/xstate.development.cjs.js +18 -24
  43. package/dist/xstate.development.esm.js +21 -27
  44. package/dist/xstate.esm.js +18 -27
  45. package/dist/xstate.umd.min.js +1 -1
  46. package/dist/xstate.umd.min.js.map +1 -1
  47. package/guards/dist/xstate-guards.cjs.js +2 -2
  48. package/guards/dist/xstate-guards.development.cjs.js +2 -2
  49. package/guards/dist/xstate-guards.development.esm.js +2 -2
  50. package/guards/dist/xstate-guards.esm.js +2 -2
  51. package/guards/dist/xstate-guards.umd.min.js.map +1 -1
  52. package/package.json +1 -1
@@ -1,10 +1,8 @@
1
- import { ActorLogic, ActorRefFrom, ActorSystem, AnyActorSystem } from "../types.js";
1
+ import { ActorLogic, ActorRefFrom, ActorSystem, AnyActorSystem, Snapshot } from "../types.js";
2
2
  import { XSTATE_STOP } from "../constants.js";
3
- export interface PromiseInternalState<T, TInput = unknown> {
4
- status: 'active' | 'error' | 'done' | 'canceled';
5
- data: T | undefined;
3
+ export type PromiseSnapshot<TOutput, TInput> = Snapshot<TOutput> & {
6
4
  input: TInput | undefined;
7
- }
5
+ };
8
6
  declare const resolveEventType = "$$xstate.resolve";
9
7
  declare const rejectEventType = "$$xstate.reject";
10
8
  export type PromiseActorEvents<T> = {
@@ -16,17 +14,16 @@ export type PromiseActorEvents<T> = {
16
14
  } | {
17
15
  type: typeof XSTATE_STOP;
18
16
  };
19
- export type PromiseActorLogic<T, TInput = unknown> = ActorLogic<{
17
+ export type PromiseActorLogic<TOutput, TInput = unknown> = ActorLogic<PromiseSnapshot<TOutput, TInput>, {
20
18
  type: string;
21
19
  [k: string]: unknown;
22
- }, T | undefined, PromiseInternalState<T, TInput>, // internal state
23
- PromiseInternalState<T, TInput>, // persisted state
24
- ActorSystem<any>, TInput, // input
25
- T>;
26
- export type PromiseActorRef<T> = ActorRefFrom<PromiseActorLogic<T>>;
27
- export declare function fromPromise<T, TInput>(promiseCreator: ({ input, system }: {
20
+ }, TInput, // input
21
+ PromiseSnapshot<TOutput, TInput>, // persisted state
22
+ ActorSystem<any>>;
23
+ export type PromiseActorRef<TOutput> = ActorRefFrom<PromiseActorLogic<TOutput, unknown>>;
24
+ export declare function fromPromise<TOutput, TInput = unknown>(promiseCreator: ({ input, system }: {
28
25
  input: TInput;
29
26
  system: AnyActorSystem;
30
- self: PromiseActorRef<T>;
31
- }) => PromiseLike<T>): PromiseActorLogic<T, TInput>;
27
+ self: PromiseActorRef<TOutput>;
28
+ }) => PromiseLike<TOutput>): PromiseActorLogic<TOutput, TInput>;
32
29
  export {};
@@ -1,16 +1,19 @@
1
- import { ActorLogic, ActorContext, ActorSystem, EventObject, ActorRefFrom, AnyActorSystem } from "../types.js";
2
- export type TransitionActorLogic<TState, TEvent extends EventObject, TInput> = ActorLogic<TEvent, TState, TState, TState, AnyActorSystem, TInput>;
3
- export type TransitionActorRef<TState, TEvent extends EventObject> = ActorRefFrom<TransitionActorLogic<TState, TEvent, unknown>>;
1
+ import { ActorLogic, ActorContext, ActorSystem, EventObject, ActorRefFrom, AnyActorSystem, Snapshot } from "../types.js";
2
+ export type TransitionSnapshot<TContext> = Snapshot<undefined> & {
3
+ context: TContext;
4
+ };
5
+ export type TransitionActorLogic<TContext, TEvent extends EventObject, TInput> = ActorLogic<TransitionSnapshot<TContext>, TEvent, TInput, TransitionSnapshot<TContext>, AnyActorSystem>;
6
+ export type TransitionActorRef<TContext, TEvent extends EventObject> = ActorRefFrom<TransitionActorLogic<TransitionSnapshot<TContext>, TEvent, unknown>>;
4
7
  /**
5
8
  * Returns actor logic from a transition function and its initial state.
6
9
  *
7
10
  * A transition function is a function that takes the current state and an event and returns the next state.
8
11
  *
9
12
  * @param transition The transition function that returns the next state given the current state and event.
10
- * @param initialState The initial state of the transition function.
13
+ * @param initialContext The initial state of the transition function.
11
14
  * @returns Actor logic
12
15
  */
13
- export declare function fromTransition<TState, TEvent extends EventObject, TSystem extends ActorSystem<any>, TInput>(transition: (state: TState, event: TEvent, actorContext: ActorContext<TEvent, TState, TSystem>) => TState, initialState: TState | (({ input, self }: {
16
+ export declare function fromTransition<TContext, TEvent extends EventObject, TSystem extends ActorSystem<any>, TInput>(transition: (state: TContext, event: TEvent, actorContext: ActorContext<TransitionSnapshot<TContext>, TEvent, TSystem>) => TContext, initialContext: TContext | (({ input, self }: {
14
17
  input: TInput;
15
- self: TransitionActorRef<TState, TEvent>;
16
- }) => TState)): TransitionActorLogic<TState, TEvent, TInput>;
18
+ self: TransitionActorRef<TContext, TEvent>;
19
+ }) => TContext)): TransitionActorLogic<TContext, TEvent, TInput>;
@@ -2,7 +2,7 @@ export * from "./actions.js";
2
2
  export * from "./actors/index.js";
3
3
  export { SimulatedClock } from "./SimulatedClock.js";
4
4
  export { type Spawner } from "./spawn.js";
5
- export { StateMachine } from "./StateMachine.js";
5
+ export { StateMachine, type MachineSnapshot } from "./StateMachine.js";
6
6
  export { getStateNodes } from "./stateUtils.js";
7
7
  export * from "./typegenTypes.js";
8
8
  export * from "./types.js";
@@ -19,7 +19,7 @@ export declare enum ActorStatus {
19
19
  * @deprecated Use `ActorStatus` instead.
20
20
  */
21
21
  export declare const InterpreterStatus: typeof ActorStatus;
22
- export declare class Actor<TLogic extends AnyActorLogic, TEvent extends EventObject = EventFromLogic<TLogic>> implements ActorRef<TEvent, SnapshotFrom<TLogic>> {
22
+ export declare class Actor<TLogic extends AnyActorLogic> implements ActorRef<EventFromLogic<TLogic>, SnapshotFrom<TLogic>> {
23
23
  logic: TLogic;
24
24
  /**
25
25
  * The current internal state of the actor.
@@ -42,8 +42,8 @@ export declare class Actor<TLogic extends AnyActorLogic, TEvent extends EventObj
42
42
  * Whether the service is started.
43
43
  */
44
44
  status: ActorStatus;
45
- _parent?: ActorRef<any>;
46
- ref: ActorRef<TEvent>;
45
+ _parent?: ActorRef<any, any>;
46
+ ref: ActorRef<EventFromLogic<TLogic>, SnapshotFrom<TLogic>>;
47
47
  private _actorContext;
48
48
  private _systemId;
49
49
  /**
@@ -83,7 +83,7 @@ export declare class Actor<TLogic extends AnyActorLogic, TEvent extends EventObj
83
83
  *
84
84
  * @param event The event to send
85
85
  */
86
- send(event: TEvent): void;
86
+ send(event: EventFromLogic<TLogic>): void;
87
87
  delaySend({ event, id, delay, to }: {
88
88
  event: EventObject;
89
89
  id: string | undefined;
@@ -6,12 +6,14 @@ type SpawnOptions<TActor extends ProvidedActor, TSrc extends TActor['src']> = TA
6
6
  id: TActor['id'];
7
7
  systemId?: string;
8
8
  input?: InputFrom<TActor['logic']>;
9
+ syncSnapshot?: boolean;
9
10
  }
10
11
  ] : [
11
12
  options?: {
12
13
  id?: string;
13
14
  systemId?: string;
14
15
  input?: InputFrom<TActor['logic']>;
16
+ syncSnapshot?: boolean;
15
17
  }
16
18
  ] : never;
17
19
  export type Spawner<TActor extends ProvidedActor> = IsLiteralString<TActor['src']> extends true ? <TSrc extends TActor['src']>(logic: TSrc, ...[options]: SpawnOptions<TActor, TSrc>) => ActorRefFrom<(TActor & {
@@ -20,6 +22,7 @@ export type Spawner<TActor extends ProvidedActor> = IsLiteralString<TActor['src'
20
22
  id?: string;
21
23
  systemId?: string;
22
24
  input?: unknown;
25
+ syncSnapshot?: boolean;
23
26
  }) => TLogic extends string ? AnyActorRef : ActorRefFrom<TLogic>;
24
27
  export declare function createSpawner(actorContext: AnyActorContext, { machine, context }: AnyState, event: AnyEventObject, spawnedChildren: Record<string, AnyActorRef>): Spawner<any>;
25
28
  export {};
@@ -35,12 +35,11 @@ export declare function getStateNodeByPath(stateNode: AnyStateNode, statePath: s
35
35
  *
36
36
  * @param state The state value or State instance
37
37
  */
38
- export declare function getStateNodes<TContext extends MachineContext, TEvent extends EventObject>(stateNode: AnyStateNode, state: StateValue | State<TContext, TEvent, TODO, TODO, TODO, TODO>): Array<AnyStateNode>;
39
- export declare function transitionAtomicNode<TContext extends MachineContext, TEvent extends EventObject>(stateNode: AnyStateNode, stateValue: string, state: State<TContext, TEvent, TODO, TODO, TODO, TODO>, event: TEvent): Array<TransitionDefinition<TContext, TEvent>> | undefined;
40
- export declare function transitionCompoundNode<TContext extends MachineContext, TEvent extends EventObject>(stateNode: AnyStateNode, stateValue: StateValueMap, state: State<TContext, TEvent, TODO, TODO, TODO, TODO>, event: TEvent): Array<TransitionDefinition<TContext, TEvent>> | undefined;
41
- export declare function transitionParallelNode<TContext extends MachineContext, TEvent extends EventObject>(stateNode: AnyStateNode, stateValue: StateValueMap, state: State<TContext, TEvent, TODO, TODO, TODO, TODO>, event: TEvent): Array<TransitionDefinition<TContext, TEvent>> | undefined;
42
- export declare function transitionNode<TContext extends MachineContext, TEvent extends EventObject>(stateNode: AnyStateNode, stateValue: StateValue, state: State<TContext, TEvent, TODO, TODO, TODO, // output
43
- TODO>, event: TEvent): Array<TransitionDefinition<TContext, TEvent>> | undefined;
38
+ export declare function getStateNodes<TContext extends MachineContext, TEvent extends EventObject>(stateNode: AnyStateNode, state: StateValue | State<TContext, TEvent, TODO, TODO, TODO>): Array<AnyStateNode>;
39
+ export declare function transitionAtomicNode<TContext extends MachineContext, TEvent extends EventObject>(stateNode: AnyStateNode, stateValue: string, state: State<TContext, TEvent, TODO, TODO, TODO>, event: TEvent): Array<TransitionDefinition<TContext, TEvent>> | undefined;
40
+ export declare function transitionCompoundNode<TContext extends MachineContext, TEvent extends EventObject>(stateNode: AnyStateNode, stateValue: StateValueMap, state: State<TContext, TEvent, TODO, TODO, TODO>, event: TEvent): Array<TransitionDefinition<TContext, TEvent>> | undefined;
41
+ export declare function transitionParallelNode<TContext extends MachineContext, TEvent extends EventObject>(stateNode: AnyStateNode, stateValue: StateValueMap, state: State<TContext, TEvent, TODO, TODO, TODO>, event: TEvent): Array<TransitionDefinition<TContext, TEvent>> | undefined;
42
+ export declare function transitionNode<TContext extends MachineContext, TEvent extends EventObject>(stateNode: AnyStateNode, stateValue: StateValue, state: State<TContext, TEvent, TODO, TODO, TODO>, event: TEvent): Array<TransitionDefinition<TContext, TEvent>> | undefined;
44
43
  export declare function removeConflictingTransitions(enabledTransitions: Array<AnyTransitionDefinition>, configuration: Set<AnyStateNode>, historyValue: AnyHistoryValue): Array<AnyTransitionDefinition>;
45
44
  /**
46
45
  * https://www.w3.org/TR/scxml/#microstepProcedure
@@ -1,12 +1,18 @@
1
1
  import type { StateNode } from "./StateNode.js";
2
2
  import type { State } from "./State.js";
3
3
  import type { ActorStatus, Clock, Actor } from "./interpreter.js";
4
- import type { StateMachine } from "./StateMachine.js";
4
+ import type { MachineSnapshot, StateMachine } from "./StateMachine.js";
5
5
  import { TypegenDisabled, ResolveTypegenMeta, TypegenConstraint, MarkAllImplementationsAsProvided, AreAllImplementationsAssumedToBeProvided } from "./typegenTypes.js";
6
6
  import { PromiseActorLogic } from "./actors/promise.js";
7
7
  import { Guard, GuardPredicate, UnknownGuard } from "./guards.js";
8
8
  import { Spawner } from "./spawn.js";
9
9
  import { AssignArgs } from "./actions/assign.js";
10
+ export type HomomorphicPick<T, K extends keyof any> = {
11
+ [P in keyof T as P & K]: T[P];
12
+ };
13
+ export type HomomorphicOmit<T, K extends keyof any> = {
14
+ [P in keyof T as Exclude<P, K>]: T[P];
15
+ };
10
16
  /**
11
17
  * `T | unknown` reduces to `unknown` and that can be problematic when it comes to contextual typing.
12
18
  * It especially is a problem when the union has a function member, like here:
@@ -61,15 +67,17 @@ export interface ParameterizedObject {
61
67
  export interface UnifiedArg<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject> {
62
68
  context: TContext;
63
69
  event: TExpressionEvent;
64
- self: ActorRef<TEvent, TContext>;
70
+ self: ActorRef<TEvent, MachineSnapshot<TContext, TEvent, ProvidedActor, string, unknown>>;
65
71
  system: ActorSystem<any>;
66
72
  }
67
73
  export type MachineContext = Record<string, any>;
68
74
  export interface ActionArgs<TContext extends MachineContext, TExpressionEvent extends EventObject, TExpressionAction extends ParameterizedObject | undefined, TEvent extends EventObject> extends UnifiedArg<TContext, TExpressionEvent, TEvent> {
69
75
  action: TExpressionAction;
70
76
  }
71
- export type InputFrom<T extends AnyActorLogic> = T extends StateMachine<infer _TContext, infer _TEvent, infer _TActor, infer _TAction, infer _TGuard, infer _TDelay, infer _TTag, infer TInput, infer _TOutput, infer _TResolvedTypesMeta> ? TInput : T extends ActorLogic<infer _TEvent, infer _TSnapshot, infer _TInternalState, infer _TPersisted, infer _TSystem, infer TInput> ? TInput : never;
72
- export type OutputFrom<T extends AnyActorLogic> = T extends ActorLogic<infer _TEvent, infer _TSnapshot, infer _TInternalState, infer _TPersisted, infer _TSystem, infer _TInput, infer TOutput> ? TOutput : never;
77
+ export type InputFrom<T extends AnyActorLogic> = T extends StateMachine<infer _TContext, infer _TEvent, infer _TActor, infer _TAction, infer _TGuard, infer _TDelay, infer _TTag, infer TInput, infer _TOutput, infer _TResolvedTypesMeta> ? TInput : T extends ActorLogic<infer _TSnapshot, infer _TEvent, infer TInput, infer _TPersisted, infer _TSystem> ? TInput : never;
78
+ export type OutputFrom<T extends AnyActorLogic> = T extends ActorLogic<infer TSnapshot, infer _TEvent, infer _TInput, infer _TPersisted, infer _TSystem> ? (TSnapshot & {
79
+ status: 'done';
80
+ })['output'] : never;
73
81
  export type ActionFunction<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject, TExpressionAction extends ParameterizedObject | undefined, TActor extends ProvidedActor, TAction extends ParameterizedObject, TGuard extends ParameterizedObject, TDelay extends string> = {
74
82
  (args: ActionArgs<TContext, TExpressionEvent, TExpressionAction, TEvent>): void;
75
83
  _out_TEvent?: TEvent;
@@ -127,7 +135,7 @@ export interface InvokeDefinition<TContext extends MachineContext, TEvent extend
127
135
  * The source of the actor logic to be invoked
128
136
  */
129
137
  src: string;
130
- input?: Mapper<TContext, TEvent, NonReducibleUnknown> | NonReducibleUnknown;
138
+ input?: Mapper<TContext, TEvent, NonReducibleUnknown, TEvent> | NonReducibleUnknown;
131
139
  /**
132
140
  * The transition to take upon the invoked child machine reaching its final top-level state.
133
141
  */
@@ -136,7 +144,7 @@ export interface InvokeDefinition<TContext extends MachineContext, TEvent extend
136
144
  * The transition to take upon the invoked child machine sending an error event.
137
145
  */
138
146
  onError?: string | SingleOrArray<TransitionConfig<TContext, ErrorActorEvent, TEvent, TActor, TAction, TGuard, TDelay>>;
139
- onSnapshot?: string | SingleOrArray<TransitionConfig<TContext, SnapshotEvent<unknown>, TEvent, TActor, TAction, TGuard, TDelay>>;
147
+ onSnapshot?: string | SingleOrArray<TransitionConfig<TContext, SnapshotEvent, TEvent, TActor, TAction, TGuard, TDelay>>;
140
148
  toJSON: () => Omit<InvokeDefinition<TContext, TEvent, TActor, TAction, TGuard, TDelay>, 'onDone' | 'onError' | 'toJSON'>;
141
149
  }
142
150
  type Delay<TDelay extends string> = TDelay | number;
@@ -173,7 +181,7 @@ type DistributeActors<TContext extends MachineContext, TEvent extends EventObjec
173
181
  * The source of the machine to be invoked, or the machine itself.
174
182
  */
175
183
  src: TSrc;
176
- input?: Mapper<TContext, TEvent, InputFrom<TSpecificActor['logic']>> | InputFrom<TSpecificActor['logic']>;
184
+ input?: Mapper<TContext, TEvent, InputFrom<TSpecificActor['logic']>, TEvent> | InputFrom<TSpecificActor['logic']>;
177
185
  /**
178
186
  * The transition to take upon the invoked child machine reaching its final top-level state.
179
187
  */
@@ -207,7 +215,7 @@ export type InvokeConfig<TContext extends MachineContext, TEvent extends EventOb
207
215
  * The source of the machine to be invoked, or the machine itself.
208
216
  */
209
217
  src: AnyActorLogic | string;
210
- input?: Mapper<TContext, TEvent, NonReducibleUnknown> | NonReducibleUnknown;
218
+ input?: Mapper<TContext, TEvent, NonReducibleUnknown, TEvent> | NonReducibleUnknown;
211
219
  /**
212
220
  * The transition to take upon the invoked child machine reaching its final top-level state.
213
221
  */
@@ -217,8 +225,7 @@ export type InvokeConfig<TContext extends MachineContext, TEvent extends EventOb
217
225
  * The transition to take upon the invoked child machine sending an error event.
218
226
  */
219
227
  onError?: string | SingleOrArray<TransitionConfigOrTarget<TContext, ErrorActorEvent, TEvent, TActor, TAction, TGuard, TDelay>>;
220
- onSnapshot?: string | SingleOrArray<TransitionConfigOrTarget<TContext, SnapshotEvent<any>, // TODO: consider replacing with `unknown`
221
- TEvent, TActor, TAction, TGuard, TDelay>>;
228
+ onSnapshot?: string | SingleOrArray<TransitionConfigOrTarget<TContext, SnapshotEvent, TEvent, TActor, TAction, TGuard, TDelay>>;
222
229
  };
223
230
  export type AnyInvokeConfig = InvokeConfig<any, any, any, any, any, any>;
224
231
  export interface StateNodeConfig<TContext extends MachineContext, TEvent extends EventObject, TActor extends ProvidedActor, TAction extends ParameterizedObject, TGuard extends ParameterizedObject, TDelay extends string, TTag extends string, TOutput> {
@@ -291,7 +298,7 @@ export interface StateNodeConfig<TContext extends MachineContext, TEvent extends
291
298
  * The output data will be evaluated with the current `context` and placed on the `.data` property
292
299
  * of the event.
293
300
  */
294
- output?: Mapper<TContext, TEvent, TOutput> | TOutput;
301
+ output?: Mapper<TContext, TEvent, unknown, TEvent> | NonReducibleUnknown;
295
302
  /**
296
303
  * The unique ID of the state node, which can be referenced as a transition target via the
297
304
  * `#id` syntax.
@@ -329,7 +336,7 @@ export interface StateNodeDefinition<TContext extends MachineContext, TEvent ext
329
336
  exit: UnknownAction[];
330
337
  meta: any;
331
338
  order: number;
332
- output?: FinalStateNodeConfig<TContext, TEvent>['output'];
339
+ output?: StateNodeConfig<TContext, TEvent, ProvidedActor, ParameterizedObject, ParameterizedObject, string, string, unknown>['output'];
333
340
  invoke: Array<InvokeDefinition<TContext, TEvent, TODO, TODO, TODO, TODO>>;
334
341
  description?: string;
335
342
  tags: string[];
@@ -338,7 +345,10 @@ export interface StateMachineDefinition<TContext extends MachineContext, TEvent
338
345
  }
339
346
  export type AnyStateNode = StateNode<any, any>;
340
347
  export type AnyStateNodeDefinition = StateNodeDefinition<any, any>;
341
- export type AnyState = State<any, any, any, any, any, // delays
348
+ export type AnyState = State<any, // context
349
+ any, // event
350
+ any, // actor
351
+ any, // tags
342
352
  any>;
343
353
  export type AnyStateMachine = StateMachine<any, any, any, any, any, any, any, any, any, // delays
344
354
  any>;
@@ -353,14 +363,6 @@ export interface HistoryStateNodeConfig<TContext extends MachineContext, TEvent
353
363
  history: 'shallow' | 'deep' | true;
354
364
  target: string | undefined;
355
365
  }
356
- export interface FinalStateNodeConfig<TContext extends MachineContext, TEvent extends EventObject> extends AtomicStateNodeConfig<TContext, TEvent> {
357
- type: 'final';
358
- /**
359
- * The data to be sent with the "xstate.done.state.<id>" event. The data can be
360
- * static or dynamic (based on assigners).
361
- */
362
- output?: Mapper<TContext, TEvent, any>;
363
- }
364
366
  export type SimpleOrStateNodeConfig<TContext extends MachineContext, TEvent extends EventObject> = AtomicStateNodeConfig<TContext, TEvent> | StateNodeConfig<TContext, TEvent, TODO, TODO, TODO, TODO, TODO, TODO>;
365
367
  export type ActionFunctionMap<TContext extends MachineContext, TEvent extends EventObject, TActor extends ProvidedActor, TAction extends ParameterizedObject = ParameterizedObject, TGuard extends ParameterizedObject = ParameterizedObject, TDelay extends string = string> = {
366
368
  [K in TAction['type']]?: ActionFunction<TContext, TEvent, TEvent, TAction extends {
@@ -379,7 +381,7 @@ export interface MachineImplementationsSimplified<TContext extends MachineContex
379
381
  actions: ActionFunctionMap<TContext, TEvent, TActor, TAction>;
380
382
  actors: Record<string, AnyActorLogic | {
381
383
  src: AnyActorLogic;
382
- input: Mapper<TContext, TEvent, any> | any;
384
+ input: Mapper<TContext, TEvent, unknown, TEvent> | NonReducibleUnknown;
383
385
  }>;
384
386
  delays: DelayFunctionMap<TContext, TEvent, TAction>;
385
387
  }
@@ -390,7 +392,7 @@ type MachineImplementationsActions<TContext extends MachineContext, TResolvedTyp
390
392
  type MachineImplementationsActors<TContext extends MachineContext, TResolvedTypesMeta, TEventsCausingActors = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'eventsCausingActors'>, TIndexedActors = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedActors'>, TIndexedEvents = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedEvents'>, _TInvokeSrcNameMap = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'invokeSrcNameMap'>> = {
391
393
  [K in keyof TIndexedActors]?: Cast<Prop<TIndexedActors[K], 'logic'>, AnyActorLogic> | {
392
394
  src: Cast<Prop<TIndexedActors[K], 'logic'>, AnyActorLogic>;
393
- input: Mapper<TContext, MaybeNarrowedEvent<TIndexedEvents, TEventsCausingActors, K>, InputFrom<Cast<Prop<TIndexedActors[K], 'logic'>, AnyActorLogic>>> | InputFrom<Cast<Prop<TIndexedActors[K], 'logic'>, AnyActorLogic>>;
395
+ input: Mapper<TContext, MaybeNarrowedEvent<TIndexedEvents, TEventsCausingActors, K>, InputFrom<Cast<Prop<TIndexedActors[K], 'logic'>, AnyActorLogic>>, Cast<Prop<TIndexedEvents, keyof TIndexedEvents>, EventObject>> | InputFrom<Cast<Prop<TIndexedActors[K], 'logic'>, AnyActorLogic>>;
394
396
  };
395
397
  };
396
398
  type MachineImplementationsDelays<TContext extends MachineContext, TResolvedTypesMeta, TEventsCausingDelays = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'eventsCausingDelays'>, TIndexedEvents = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedEvents'>, TIndexedActions = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedActions'>, TIndexedDelays = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedDelays'>> = {
@@ -424,10 +426,7 @@ export type ContextFactory<TContext extends MachineContext, TActor extends Provi
424
426
  spawn: Spawner<TActor>;
425
427
  input: TInput;
426
428
  }) => TContext;
427
- type RootStateNodeConfig<TContext extends MachineContext, TEvent extends EventObject, TActor extends ProvidedActor, TAction extends ParameterizedObject, TGuard extends ParameterizedObject, TDelay extends string, TTag extends string, TOutput> = Omit<StateNodeConfig<TContext, TEvent, TActor, TAction, TGuard, TDelay, TTag, TOutput>, 'states'> & {
428
- states?: StatesConfig<TContext, TEvent, TActor, TAction, TGuard, TDelay, TTag, TOutput> | undefined;
429
- };
430
- export type MachineConfig<TContext extends MachineContext, TEvent extends EventObject, TActor extends ProvidedActor = ProvidedActor, TAction extends ParameterizedObject = ParameterizedObject, TGuard extends ParameterizedObject = ParameterizedObject, TDelay extends string = string, TTag extends string = string, TInput = any, TOutput = unknown, TTypesMeta = TypegenDisabled> = (RootStateNodeConfig<NoInfer<TContext>, NoInfer<TEvent>, NoInfer<TActor>, NoInfer<TAction>, NoInfer<TGuard>, NoInfer<TDelay>, NoInfer<TTag>, NoInfer<TOutput>> & {
429
+ export type MachineConfig<TContext extends MachineContext, TEvent extends EventObject, TActor extends ProvidedActor = ProvidedActor, TAction extends ParameterizedObject = ParameterizedObject, TGuard extends ParameterizedObject = ParameterizedObject, TDelay extends string = string, TTag extends string = string, TInput = any, TOutput = unknown, TTypesMeta = TypegenDisabled> = (Omit<StateNodeConfig<NoInfer<TContext>, NoInfer<TEvent>, NoInfer<TActor>, NoInfer<TAction>, NoInfer<TGuard>, NoInfer<TDelay>, NoInfer<TTag>, NoInfer<TOutput>>, 'output'> & {
431
430
  /**
432
431
  * The initial context (extended state)
433
432
  */
@@ -436,7 +435,8 @@ export type MachineConfig<TContext extends MachineContext, TEvent extends EventO
436
435
  */
437
436
  version?: string;
438
437
  types?: MachineTypes<TContext, TEvent, TActor, TAction, TGuard, TDelay, TTag, TInput, TOutput, TTypesMeta>;
439
- }) & (Equals<TContext, MachineContext> extends true ? {
438
+ output?: Mapper<TContext, DoneStateEvent, TOutput, TEvent> | TOutput;
439
+ }) & (MachineContext extends TContext ? {
440
440
  context?: InitialContext<LowInfer<TContext>, TActor, TInput>;
441
441
  } : {
442
442
  context: InitialContext<LowInfer<TContext>, TActor, TInput>;
@@ -474,9 +474,9 @@ export interface ErrorActorEvent<TErrorData = unknown> extends EventObject {
474
474
  type: `xstate.error.actor.${string}`;
475
475
  data: TErrorData;
476
476
  }
477
- export interface SnapshotEvent<TData = unknown> extends EventObject {
477
+ export interface SnapshotEvent<TSnapshot extends Snapshot<unknown> = Snapshot<unknown>> extends EventObject {
478
478
  type: `xstate.snapshot.${string}`;
479
- data: TData;
479
+ snapshot: TSnapshot;
480
480
  }
481
481
  export interface DoneStateEvent<TOutput = unknown> extends EventObject {
482
482
  type: `xstate.done.state.${string}`;
@@ -506,14 +506,11 @@ export type PartialAssigner<TContext extends MachineContext, TExpressionEvent ex
506
506
  export type PropertyAssigner<TContext extends MachineContext, TExpressionEvent extends EventObject, TExpressionAction extends ParameterizedObject | undefined, TEvent extends EventObject, TActor extends ProvidedActor> = {
507
507
  [K in keyof TContext]?: PartialAssigner<TContext, TExpressionEvent, TExpressionAction, TEvent, TActor, K> | TContext[K];
508
508
  };
509
- export type Mapper<TContext extends MachineContext, TEvent extends EventObject, TResult> = (args: {
509
+ export type Mapper<TContext extends MachineContext, TExpressionEvent extends EventObject, TResult, TEvent extends EventObject> = (args: {
510
510
  context: TContext;
511
- event: TEvent;
512
- self: ActorRef<TEvent>;
511
+ event: TExpressionEvent;
512
+ self: ActorRef<TEvent, MachineSnapshot<TContext, TEvent, ProvidedActor, string, unknown>>;
513
513
  }) => TResult;
514
- export type PropertyMapper<TContext extends MachineContext, TEvent extends EventObject, TParams extends {}> = {
515
- [K in keyof TParams]?: Mapper<TContext, TEvent, TParams[K]> | TParams[K];
516
- };
517
514
  export interface TransitionDefinition<TContext extends MachineContext, TEvent extends EventObject> extends Omit<TransitionConfig<TContext, TEvent, TEvent, TODO, TODO, TODO, TODO>, 'target' | 'guard'> {
518
515
  target: ReadonlyArray<StateNode<TContext, TEvent>> | undefined;
519
516
  source: StateNode<TContext, TEvent>;
@@ -552,8 +549,8 @@ export interface StateConfig<TContext extends MachineContext, TEvent extends Eve
552
549
  historyValue?: HistoryValue<TContext, TEvent>;
553
550
  meta?: any;
554
551
  configuration?: Array<StateNode<TContext, TEvent>>;
555
- children: Record<string, ActorRef<any>>;
556
- done?: boolean;
552
+ children: Record<string, ActorRef<any, any>>;
553
+ status: 'active' | 'done' | 'error' | 'stopped';
557
554
  output?: any;
558
555
  error?: unknown;
559
556
  tags?: Set<string>;
@@ -567,7 +564,7 @@ export interface ActorOptions<TLogic extends AnyActorLogic> {
567
564
  execute?: boolean;
568
565
  clock?: Clock;
569
566
  logger?: (...args: any[]) => void;
570
- parent?: ActorRef<any>;
567
+ parent?: ActorRef<any, any>;
571
568
  /**
572
569
  * The custom `id` for referencing this service.
573
570
  */
@@ -593,14 +590,14 @@ export interface ActorOptions<TLogic extends AnyActorLogic> {
593
590
  */
594
591
  src?: string;
595
592
  }
596
- export type AnyActor = Actor<any, any>;
593
+ export type AnyActor = Actor<any>;
597
594
  /**
598
595
  * @deprecated Use `AnyActor` instead.
599
596
  */
600
597
  export type AnyInterpreter = AnyActor;
601
598
  export type Observer<T> = {
602
599
  next?: (value: T) => void;
603
- error?: (err: any) => void;
600
+ error?: (err: unknown) => void;
604
601
  complete?: () => void;
605
602
  };
606
603
  export interface Subscription {
@@ -623,7 +620,7 @@ export interface BaseActorRef<TEvent extends EventObject> {
623
620
  export interface ActorLike<TCurrent, TEvent extends EventObject> extends Subscribable<TCurrent> {
624
621
  send: (event: TEvent) => void;
625
622
  }
626
- export interface ActorRef<TEvent extends EventObject, TSnapshot = any> extends Subscribable<TSnapshot>, InteropObservable<TSnapshot> {
623
+ export interface ActorRef<TEvent extends EventObject, TSnapshot extends Snapshot<unknown>> extends Subscribable<TSnapshot>, InteropObservable<TSnapshot> {
627
624
  /**
628
625
  * The unique identifier for this actor relative to its parent.
629
626
  */
@@ -642,12 +639,12 @@ export interface ActorRef<TEvent extends EventObject, TSnapshot = any> extends S
642
639
  }
643
640
  export type AnyActorRef = ActorRef<any, any>;
644
641
  export type ActorLogicFrom<T> = ReturnTypeOrValue<T> extends infer R ? R extends StateMachine<any, any, any, any, any, any, any, any, any> ? R : R extends Promise<infer U> ? PromiseActorLogic<U> : never : never;
645
- export type ActorRefFrom<T> = ReturnTypeOrValue<T> extends infer R ? R extends StateMachine<infer TContext, infer TEvent, infer TActor, infer _TAction, infer _TGuard, infer _TDelay, infer TTag, infer _TInput, infer TOutput, infer TResolvedTypesMeta> ? ActorRef<TEvent, State<TContext, TEvent, TActor, TTag, TOutput, AreAllImplementationsAssumedToBeProvided<TResolvedTypesMeta> extends false ? MarkAllImplementationsAsProvided<TResolvedTypesMeta> : TResolvedTypesMeta>> : R extends Promise<infer U> ? ActorRefFrom<PromiseActorLogic<U>> : R extends ActorLogic<infer TEvent, infer TSnapshot, infer _, infer __, infer ___, infer ____, infer _____> ? ActorRef<TEvent, TSnapshot> : never : never;
642
+ export type ActorRefFrom<T> = ReturnTypeOrValue<T> extends infer R ? R extends StateMachine<infer TContext, infer TEvent, infer TActor, infer _TAction, infer _TGuard, infer _TDelay, infer TTag, infer _TInput, infer TOutput, infer TResolvedTypesMeta> ? ActorRef<TEvent, MachineSnapshot<TContext, TEvent, TActor, TTag, TOutput, AreAllImplementationsAssumedToBeProvided<TResolvedTypesMeta> extends false ? MarkAllImplementationsAsProvided<TResolvedTypesMeta> : TResolvedTypesMeta>> : R extends Promise<infer U> ? ActorRefFrom<PromiseActorLogic<U>> : R extends ActorLogic<infer TSnapshot, infer TEvent, infer _TInput, infer _TPersisted, infer _TSystem> ? ActorRef<TEvent, TSnapshot> : never : never;
646
643
  export type DevToolsAdapter = (service: AnyActor) => void;
647
644
  /**
648
645
  * @deprecated Use `Actor<T>` instead.
649
646
  */
650
- export type InterpreterFrom<T extends AnyStateMachine | ((...args: any[]) => AnyStateMachine)> = ReturnTypeOrValue<T> extends StateMachine<infer TContext, infer TEvent, infer TActor, infer _TAction, infer _TGuard, infer _TDelay, infer TTag, infer TInput, infer TOutput, infer TResolvedTypesMeta> ? Actor<ActorLogic<TEvent, State<TContext, TEvent, TActor, TTag, TOutput, TResolvedTypesMeta>, State<TContext, TEvent, TActor, TTag, TOutput, TResolvedTypesMeta>, PersistedMachineState<State<TContext, TEvent, TActor, TTag, TOutput, TResolvedTypesMeta>>, ActorSystem<any>, TInput>> : never;
647
+ export type InterpreterFrom<T extends AnyStateMachine | ((...args: any[]) => AnyStateMachine)> = ReturnTypeOrValue<T> extends StateMachine<infer TContext, infer TEvent, infer TActor, infer _TAction, infer _TGuard, infer _TDelay, infer TTag, infer TInput, infer TOutput, infer TResolvedTypesMeta> ? Actor<ActorLogic<MachineSnapshot<TContext, TEvent, TActor, TTag, TOutput, TResolvedTypesMeta>, TEvent, TInput, PersistedMachineState<TContext, TEvent, TActor, TTag, TOutput, TResolvedTypesMeta>, ActorSystem<any>>> : never;
651
648
  export type MachineImplementationsFrom<T extends AnyStateMachine | ((...args: any[]) => AnyStateMachine), TRequireMissingImplementations extends boolean = false> = ReturnTypeOrValue<T> extends StateMachine<infer TContext, infer TEvent, infer TActor, infer TAction, infer _TGuard, infer TDelay, infer _TTag, infer _TInput, infer _TOutput, infer TResolvedTypesMeta> ? InternalMachineImplementations<TContext, TEvent, TActor, TAction, TDelay, TResolvedTypesMeta, TRequireMissingImplementations> : never;
652
649
  export type __ResolvedTypesMetaFrom<T> = T extends StateMachine<any, // context
653
650
  any, // event
@@ -659,7 +656,7 @@ any, // tag
659
656
  any, // input
660
657
  any, // output
661
658
  infer TResolvedTypesMeta> ? TResolvedTypesMeta : never;
662
- export interface ActorContext<TEvent extends EventObject, TSnapshot, TSystem extends ActorSystem<any> = ActorSystem<any>> {
659
+ export interface ActorContext<TSnapshot extends Snapshot<unknown>, TEvent extends EventObject, TSystem extends ActorSystem<any> = ActorSystem<any>> {
663
660
  self: ActorRef<TEvent, TSnapshot>;
664
661
  id: string;
665
662
  sessionId: string;
@@ -669,38 +666,46 @@ export interface ActorContext<TEvent extends EventObject, TSnapshot, TSystem ext
669
666
  stopChild: (child: AnyActorRef) => void;
670
667
  }
671
668
  export type AnyActorContext = ActorContext<any, any, any>;
672
- export interface ActorLogic<TEvent extends EventObject, TSnapshot = any, TInternalState = TSnapshot,
669
+ export type Snapshot<TOutput> = {
670
+ status: 'active';
671
+ output: undefined;
672
+ error: undefined;
673
+ } | {
674
+ status: 'done';
675
+ output: TOutput;
676
+ error: undefined;
677
+ } | {
678
+ status: 'error';
679
+ output: undefined;
680
+ error: unknown;
681
+ } | {
682
+ status: 'stopped';
683
+ output: undefined;
684
+ error: undefined;
685
+ };
686
+ export interface ActorLogic<TSnapshot extends Snapshot<unknown>, TEvent extends EventObject, TInput = unknown,
673
687
  /**
674
688
  * Serialized internal state used for persistence & restoration
675
689
  */
676
- TPersisted = TInternalState, TSystem extends ActorSystem<any> = ActorSystem<any>, TInput = any, TOutput = unknown> {
690
+ TPersisted = TSnapshot, TSystem extends ActorSystem<any> = ActorSystem<any>> {
677
691
  config?: unknown;
678
- transition: (state: TInternalState, message: TEvent, ctx: ActorContext<TEvent, TSnapshot, TSystem>) => TInternalState;
679
- getInitialState: (actorCtx: ActorContext<TEvent, TSnapshot, TSystem>, input: TInput) => TInternalState;
680
- restoreState?: (persistedState: TPersisted, actorCtx: ActorContext<TEvent, TSnapshot>) => TInternalState;
681
- getSnapshot?: (state: TInternalState) => TSnapshot;
682
- getStatus?: (state: TInternalState) => {
683
- status: string;
684
- data?: any;
685
- };
686
- start?: (state: TInternalState, actorCtx: ActorContext<TEvent, TSnapshot>) => void;
692
+ transition: (state: TSnapshot, message: TEvent, ctx: ActorContext<TSnapshot, TEvent, TSystem>) => TSnapshot;
693
+ getInitialState: (actorCtx: ActorContext<TSnapshot, TEvent, TSystem>, input: TInput) => TSnapshot;
694
+ restoreState?: (persistedState: TPersisted, actorCtx: ActorContext<TSnapshot, TEvent>) => TSnapshot;
695
+ start?: (state: TSnapshot, actorCtx: ActorContext<TSnapshot, TEvent>) => void;
687
696
  /**
688
697
  * @returns Persisted state
689
698
  */
690
- getPersistedState?: (state: TInternalState) => TPersisted;
691
- _out_TOutput?: TOutput;
699
+ getPersistedState?: (state: TSnapshot) => TPersisted;
692
700
  }
693
- export type AnyActorLogic = ActorLogic<any, // event
694
- any, // snapshot
695
- any, // internal state
696
- any, // persisted state
697
- any, // system
701
+ export type AnyActorLogic = ActorLogic<any, // snapshot
702
+ any, // event
698
703
  any, // input
704
+ any, // persisted state
699
705
  any>;
700
- export type SnapshotFrom<T> = ReturnTypeOrValue<T> extends infer R ? R extends ActorRef<infer _, infer TSnapshot> ? TSnapshot : R extends Actor<infer TLogic> ? SnapshotFrom<TLogic> : R extends StateMachine<infer _TContext, infer _TEvent, infer _TActor, infer _TAction, infer _TGuard, infer _TDelay, infer _TTag, infer _TInput, infer _TOutput, infer _TResolvedTypesMeta> ? StateFrom<R> : R extends ActorLogic<infer _, infer TSnapshot, infer __, infer ___, infer ____> ? TSnapshot : R extends ActorContext<infer _, infer TSnapshot, infer __> ? TSnapshot : never : never;
701
- export type EventFromLogic<TLogic extends ActorLogic<any, any>> = TLogic extends ActorLogic<infer TEvent, infer _, infer __, infer ___, infer ____> ? TEvent : never;
702
- export type PersistedStateFrom<TLogic extends ActorLogic<any, any>> = TLogic extends ActorLogic<infer _TEvent, infer _TSnapshot, infer _TInternalState, infer TPersisted> ? TPersisted : never;
703
- export type InternalStateFrom<TLogic extends ActorLogic<any, any>> = TLogic extends ActorLogic<infer _TEvent, infer _TSnapshot, infer TInternalState, infer _TPersisted> ? TInternalState : never;
706
+ export type SnapshotFrom<T> = ReturnTypeOrValue<T> extends infer R ? R extends ActorRef<infer _, infer TSnapshot> ? TSnapshot : R extends Actor<infer TLogic> ? SnapshotFrom<TLogic> : R extends StateMachine<infer _TContext, infer _TEvent, infer _TActor, infer _TAction, infer _TGuard, infer _TDelay, infer _TTag, infer _TInput, infer _TOutput, infer _TResolvedTypesMeta> ? StateFrom<R> : R extends ActorLogic<any, any, any, any, any> ? ReturnType<R['transition']> : R extends ActorContext<infer TSnapshot, infer _, infer __> ? TSnapshot : never : never;
707
+ export type EventFromLogic<TLogic extends ActorLogic<any, any, any, any, any>> = TLogic extends ActorLogic<infer _, infer TEvent, infer __, infer _____, infer ______> ? TEvent : never;
708
+ export type PersistedStateFrom<TLogic extends ActorLogic<any, any, any, any, any>> = TLogic extends ActorLogic<infer _TSnapshot, infer _TEvent, infer _TInput, infer TPersisted, infer _TSystem> ? TPersisted : never;
704
709
  type ResolveEventType<T> = ReturnTypeOrValue<T> extends infer R ? R extends StateMachine<infer _TContext, infer TEvent, infer _TActor, infer _TAction, infer _TGuard, infer _TDelay, infer _TTag, infer _TInput, infer _TOutput, infer _TResolvedTypesMeta> ? TEvent : R extends State<infer _TContext, infer TEvent, infer _TActor, infer _TOutput, infer _TResolvedTypesMeta> ? TEvent : R extends ActorRef<infer TEvent, infer _> ? TEvent : never : never;
705
710
  export type EventFrom<T, K extends Prop<TEvent, 'type'> = never, TEvent extends EventObject = ResolveEventType<T>> = IsNever<K> extends true ? TEvent : ExtractEvent<TEvent, K>;
706
711
  export type ContextFrom<T> = ReturnTypeOrValue<T> extends infer R ? R extends StateMachine<infer TContext, infer _TEvent, infer _TActor, infer _TAction, infer _TGuard, infer _TDelay, infer _TTag, infer _TInput, infer _TOutput, infer _TTypesMeta> ? TContext : R extends State<infer TContext, infer _TEvent, infer _TActor, infer _TOutput, infer _TResolvedTypesMeta> ? TContext : R extends Actor<infer TActorLogic> ? TActorLogic extends StateMachine<infer TContext, infer _TEvent, infer _TActor, infer _TAction, infer _TGuard, infer _TDelay, infer _TTag, infer _TInput, infer _TOutput, infer _TTypesMeta> ? TContext : never : never : never;
@@ -725,9 +730,9 @@ export interface ActorSystem<T extends ActorSystemInfo> {
725
730
  get: <K extends keyof T['actors']>(key: K) => T['actors'][K] | undefined;
726
731
  }
727
732
  export type AnyActorSystem = ActorSystem<any>;
728
- export type PersistedMachineState<TState extends AnyState> = Pick<TState, 'value' | 'output' | 'error' | 'context' | 'done' | 'historyValue'> & {
733
+ export type PersistedMachineState<TContext extends MachineContext, TEvent extends EventObject, TActor extends ProvidedActor, TTag extends string, TOutput, TResolvedTypesMeta = TypegenDisabled> = HomomorphicPick<MachineSnapshot<TContext, TEvent, TActor, TTag, TOutput, TResolvedTypesMeta>, 'value' | 'output' | 'error' | 'context' | 'status' | 'historyValue'> & {
729
734
  children: {
730
- [K in keyof TState['children']]: {
735
+ [K in keyof MachineSnapshot<TContext, TEvent, TActor, TTag, TOutput, TResolvedTypesMeta>['children']]: {
731
736
  state: any;
732
737
  src?: string;
733
738
  };
@@ -1,6 +1,6 @@
1
1
  import { AnyActorLogic, AnyState } from "./index.js";
2
2
  import type { StateNode } from "./StateNode.js";
3
- import type { ActorLogic, AnyEventObject, EventObject, MachineContext, Mapper, Observer, ErrorActorEvent, SingleOrArray, StateLike, StateValue, Subscribable, TransitionConfigTarget, AnyActorRef, AnyTransitionConfig } from "./types.js";
3
+ import type { ActorLogic, AnyEventObject, EventObject, MachineContext, Mapper, Observer, ErrorActorEvent, SingleOrArray, StateLike, StateValue, Subscribable, TransitionConfigTarget, AnyActorRef, AnyTransitionConfig, NonReducibleUnknown } from "./types.js";
4
4
  export declare function keys<T extends object>(value: T): Array<keyof T & string>;
5
5
  export declare function matchesState(parentStateId: StateValue, childStateId: StateValue): boolean;
6
6
  export declare function toStatePath(stateId: string | string[]): string[];
@@ -26,7 +26,7 @@ export declare function toStatePaths(stateValue: StateValue | undefined): string
26
26
  export declare function flatten<T>(array: Array<T | T[]>): T[];
27
27
  export declare function toArrayStrict<T>(value: readonly T[] | T): readonly T[];
28
28
  export declare function toArray<T>(value: readonly T[] | T | undefined): readonly T[];
29
- export declare function mapContext<TContext extends MachineContext, TEvent extends EventObject>(mapper: Mapper<TContext, TEvent, any>, context: TContext, event: TEvent, self: AnyActorRef): any;
29
+ export declare function resolveOutput<TContext extends MachineContext, TExpressionEvent extends EventObject>(mapper: Mapper<TContext, TExpressionEvent, unknown, EventObject> | NonReducibleUnknown, context: TContext, event: TExpressionEvent, self: AnyActorRef): unknown;
30
30
  export declare function isBuiltInEvent(eventType: string): boolean;
31
31
  export declare function isPromiseLike(value: any): value is PromiseLike<any>;
32
32
  export declare function isActorLogic(value: any): value is ActorLogic<any, any>;
@@ -42,8 +42,8 @@ export declare function toObserver<T>(nextHandler?: Observer<T> | ((value: T) =>
42
42
  export declare function createInvokeId(stateNodeId: string, index: number): string;
43
43
  export declare function resolveReferencedActor(referenced: AnyActorLogic | {
44
44
  src: AnyActorLogic;
45
- input: Mapper<any, any, any> | any;
45
+ input: Mapper<MachineContext, EventObject, unknown, EventObject> | NonReducibleUnknown;
46
46
  } | undefined): {
47
47
  src: AnyActorLogic;
48
- input: Mapper<any, any, any> | any;
48
+ input: Mapper<MachineContext, EventObject, unknown, EventObject> | NonReducibleUnknown;
49
49
  } | undefined;
@@ -271,7 +271,7 @@ function toArray(value) {
271
271
  }
272
272
  return toArrayStrict(value);
273
273
  }
274
- function mapContext(mapper, context, event, self) {
274
+ function resolveOutput(mapper, context, event, self) {
275
275
  if (typeof mapper === 'function') {
276
276
  return mapper({
277
277
  context,
@@ -449,10 +449,9 @@ class Actor {
449
449
 
450
450
  // array of functions to defer
451
451
 
452
- update(state) {
452
+ update(snapshot) {
453
453
  // Update state
454
- this._state = state;
455
- const snapshot = this.getSnapshot();
454
+ this._state = snapshot;
456
455
 
457
456
  // Execute deferred effects
458
457
  let deferredFn;
@@ -467,18 +466,17 @@ class Actor {
467
466
  reportUnhandledError(err);
468
467
  }
469
468
  }
470
- const status = this.logic.getStatus?.(state);
471
- switch (status?.status) {
469
+ switch (this._state.status) {
472
470
  case 'done':
473
471
  this._stopProcedure();
474
472
  this._complete();
475
- this._doneEvent = createDoneActorEvent(this.id, status.data);
473
+ this._doneEvent = createDoneActorEvent(this.id, this._state.output);
476
474
  this._parent?.send(this._doneEvent);
477
475
  break;
478
476
  case 'error':
479
477
  this._stopProcedure();
480
- this._error(status.data);
481
- this._parent?.send(createErrorActorEvent(this.id, status.data));
478
+ this._error(this._state.error);
479
+ this._parent?.send(createErrorActorEvent(this.id, this._state.error));
482
480
  break;
483
481
  }
484
482
  }
@@ -513,8 +511,8 @@ class Actor {
513
511
  this.system._set(this._systemId, this);
514
512
  }
515
513
  this.status = ActorStatus.Running;
516
- const status = this.logic.getStatus?.(this._state);
517
- switch (status?.status) {
514
+ const status = this._state.status;
515
+ switch (status) {
518
516
  case 'done':
519
517
  // a state machine can be "done" upon intialization (it could reach a final state using initial microsteps)
520
518
  // we still need to complete observers, flush deferreds etc
@@ -713,7 +711,7 @@ class Actor {
713
711
  return this;
714
712
  }
715
713
  getSnapshot() {
716
- return this.logic.getSnapshot ? this.logic.getSnapshot(this._state) : this._state;
714
+ return this._state;
717
715
  }
718
716
  }
719
717
 
@@ -760,11 +758,11 @@ exports.flatten = flatten;
760
758
  exports.interpret = interpret;
761
759
  exports.isArray = isArray;
762
760
  exports.isErrorActorEvent = isErrorActorEvent;
763
- exports.mapContext = mapContext;
764
761
  exports.mapValues = mapValues;
765
762
  exports.matchesState = matchesState;
766
763
  exports.normalizeTarget = normalizeTarget;
767
764
  exports.pathToStateValue = pathToStateValue;
765
+ exports.resolveOutput = resolveOutput;
768
766
  exports.resolveReferencedActor = resolveReferencedActor;
769
767
  exports.toArray = toArray;
770
768
  exports.toObserver = toObserver;