xstate 5.0.0-beta.28 → 5.0.0-beta.30

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 (60) 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 +104 -139
  8. package/actors/dist/xstate-actors.cjs.mjs +1 -3
  9. package/actors/dist/xstate-actors.development.cjs.js +104 -139
  10. package/actors/dist/xstate-actors.development.cjs.mjs +1 -3
  11. package/actors/dist/xstate-actors.development.esm.js +105 -138
  12. package/actors/dist/xstate-actors.esm.js +105 -138
  13. package/actors/dist/xstate-actors.umd.min.js +1 -1
  14. package/actors/dist/xstate-actors.umd.min.js.map +1 -1
  15. package/dist/declarations/src/State.d.ts +4 -6
  16. package/dist/declarations/src/StateMachine.d.ts +28 -21
  17. package/dist/declarations/src/StateNode.d.ts +1 -1
  18. package/dist/declarations/src/actions/assign.d.ts +4 -4
  19. package/dist/declarations/src/actions/cancel.d.ts +4 -4
  20. package/dist/declarations/src/actions/choose.d.ts +3 -3
  21. package/dist/declarations/src/actions/log.d.ts +4 -4
  22. package/dist/declarations/src/actions/pure.d.ts +1 -1
  23. package/dist/declarations/src/actions/raise.d.ts +2 -2
  24. package/dist/declarations/src/actions/send.d.ts +7 -7
  25. package/dist/declarations/src/actions/stop.d.ts +4 -4
  26. package/dist/declarations/src/actors/callback.d.ts +8 -8
  27. package/dist/declarations/src/actors/index.d.ts +3 -5
  28. package/dist/declarations/src/actors/observable.d.ts +12 -13
  29. package/dist/declarations/src/actors/promise.d.ts +11 -14
  30. package/dist/declarations/src/actors/transition.d.ts +10 -7
  31. package/dist/declarations/src/index.d.ts +1 -1
  32. package/dist/declarations/src/interpreter.d.ts +4 -4
  33. package/dist/declarations/src/stateUtils.d.ts +5 -6
  34. package/dist/declarations/src/types.d.ts +92 -70
  35. package/dist/{interpreter-a1432c7d.development.cjs.js → interpreter-7f1dc557.development.cjs.js} +9 -30
  36. package/dist/{interpreter-a77bb0ec.development.esm.js → interpreter-945c4b96.development.esm.js} +10 -28
  37. package/dist/{interpreter-672794ae.cjs.js → interpreter-a2c1e529.cjs.js} +9 -30
  38. package/dist/{interpreter-b5203bcb.esm.js → interpreter-b8f53c4b.esm.js} +10 -28
  39. package/dist/{raise-b9c9a234.esm.js → raise-0b7dde8b.esm.js} +13 -11
  40. package/dist/{raise-a60c9290.development.esm.js → raise-6e4f5cf7.development.esm.js} +13 -11
  41. package/dist/{raise-74b72ca5.development.cjs.js → raise-7cae872b.development.cjs.js} +13 -11
  42. package/dist/{raise-436a57a2.cjs.js → raise-e79b1f86.cjs.js} +13 -11
  43. package/dist/{send-e8b55d00.development.cjs.js → send-19a256f0.development.cjs.js} +2 -2
  44. package/dist/{send-e63b7b83.development.esm.js → send-a1d772da.development.esm.js} +2 -2
  45. package/dist/{send-35e1a689.cjs.js → send-e7063201.cjs.js} +2 -2
  46. package/dist/{send-4192e7bc.esm.js → send-f4fb3ba5.esm.js} +2 -2
  47. package/dist/xstate.cjs.js +20 -31
  48. package/dist/xstate.cjs.mjs +0 -2
  49. package/dist/xstate.development.cjs.js +20 -31
  50. package/dist/xstate.development.cjs.mjs +0 -2
  51. package/dist/xstate.development.esm.js +24 -33
  52. package/dist/xstate.esm.js +24 -33
  53. package/dist/xstate.umd.min.js +1 -1
  54. package/dist/xstate.umd.min.js.map +1 -1
  55. package/guards/dist/xstate-guards.cjs.js +2 -2
  56. package/guards/dist/xstate-guards.development.cjs.js +2 -2
  57. package/guards/dist/xstate-guards.development.esm.js +2 -2
  58. package/guards/dist/xstate-guards.esm.js +2 -2
  59. package/guards/dist/xstate-guards.umd.min.js.map +1 -1
  60. package/package.json +1 -1
@@ -1,6 +1,6 @@
1
1
  import { ActionArgs, ActorRef, AnyActorRef, AnyEventObject, Cast, EventFrom, EventObject, InferEvent, MachineContext, SendExpr, SendToActionOptions, SendToActionParams, UnifiedArg, ParameterizedObject, NoInfer } from "../types.js";
2
- export interface SendToAction<TContext extends MachineContext, TExpressionEvent extends EventObject, TExpressionAction extends ParameterizedObject | undefined, TDelay extends string> {
3
- (_: ActionArgs<TContext, TExpressionEvent, TExpressionAction>): void;
2
+ export interface SendToAction<TContext extends MachineContext, TExpressionEvent extends EventObject, TExpressionAction extends ParameterizedObject | undefined, TEvent extends EventObject, TDelay extends string> {
3
+ (_: ActionArgs<TContext, TExpressionEvent, TExpressionAction, TEvent>): void;
4
4
  _out_TDelay?: TDelay;
5
5
  }
6
6
  /**
@@ -12,22 +12,22 @@ export interface SendToAction<TContext extends MachineContext, TExpressionEvent
12
12
  * - `id` - The unique send event identifier (used with `cancel()`).
13
13
  * - `delay` - The number of milliseconds to delay the sending of the event.
14
14
  */
15
- export declare function sendTo<TContext extends MachineContext, TExpressionEvent extends EventObject, TExpressionAction extends ParameterizedObject | undefined, TActor extends AnyActorRef, TDelay extends string>(to: TActor | string | ((args: ActionArgs<TContext, TExpressionEvent, TExpressionAction>) => TActor | string), eventOrExpr: EventFrom<TActor> | SendExpr<TContext, TExpressionEvent, TExpressionAction, InferEvent<Cast<EventFrom<TActor>, EventObject>>>, options?: SendToActionOptions<TContext, TExpressionEvent, TExpressionAction, NoInfer<TDelay>>): SendToAction<TContext, TExpressionEvent, TExpressionAction, TDelay>;
15
+ export declare function sendTo<TContext extends MachineContext, TExpressionEvent extends EventObject, TExpressionAction extends ParameterizedObject | undefined, TTargetActor extends AnyActorRef, TEvent extends EventObject, TDelay extends string>(to: TTargetActor | string | ((args: ActionArgs<TContext, TExpressionEvent, TExpressionAction, TEvent>) => TTargetActor | string), eventOrExpr: EventFrom<TTargetActor> | SendExpr<TContext, TExpressionEvent, TExpressionAction, InferEvent<Cast<EventFrom<TTargetActor>, EventObject>>, TEvent>, options?: SendToActionOptions<TContext, TExpressionEvent, TExpressionAction, NoInfer<TEvent>, NoInfer<TDelay>>): SendToAction<TContext, TExpressionEvent, TExpressionAction, TEvent, TDelay>;
16
16
  /**
17
17
  * Sends an event to this machine's parent.
18
18
  *
19
19
  * @param event The event to send to the parent machine.
20
20
  * @param options Options to pass into the send event.
21
21
  */
22
- export declare function sendParent<TContext extends MachineContext, TExpressionEvent extends EventObject, TExpressionAction extends ParameterizedObject | undefined, TSentEvent extends EventObject = AnyEventObject, TDelay extends string = string>(event: TSentEvent | SendExpr<TContext, TExpressionEvent, TExpressionAction, TSentEvent>, options?: SendToActionOptions<TContext, TExpressionEvent, TExpressionAction, TDelay>): SendToAction<TContext, TExpressionEvent, TExpressionAction, TDelay>;
23
- type Target<TContext extends MachineContext, TExpressionEvent extends EventObject, TExpressionAction extends ParameterizedObject | undefined> = string | ActorRef<any, any> | ((args: ActionArgs<TContext, TExpressionEvent, TExpressionAction>) => string | ActorRef<any, any>);
22
+ export declare function sendParent<TContext extends MachineContext, TExpressionEvent extends EventObject, TExpressionAction extends ParameterizedObject | undefined, TSentEvent extends EventObject = AnyEventObject, TEvent extends EventObject = AnyEventObject, TDelay extends string = string>(event: TSentEvent | SendExpr<TContext, TExpressionEvent, TExpressionAction, TSentEvent, TEvent>, options?: SendToActionOptions<TContext, TExpressionEvent, TExpressionAction, TEvent, TDelay>): SendToAction<TContext, TExpressionEvent, TExpressionAction, TEvent, TDelay>;
23
+ type Target<TContext extends MachineContext, TExpressionEvent extends EventObject, TExpressionAction extends ParameterizedObject | undefined, TEvent extends EventObject> = string | ActorRef<any, any> | ((args: ActionArgs<TContext, TExpressionEvent, TExpressionAction, TEvent>) => string | ActorRef<any, any>);
24
24
  /**
25
25
  * Forwards (sends) an event to a specified service.
26
26
  *
27
27
  * @param target The target service to forward the event to.
28
28
  * @param options Options to pass into the send action creator.
29
29
  */
30
- export declare function forwardTo<TContext extends MachineContext, TExpressionEvent extends EventObject, TExpressionAction extends ParameterizedObject | undefined, TDelay extends string>(target: Target<TContext, TExpressionEvent, TExpressionAction>, options?: SendToActionOptions<TContext, TExpressionEvent, TExpressionAction, TDelay>): (args: ActionArgs<TContext, TExpressionEvent, TExpressionAction>) => void;
30
+ export declare function forwardTo<TContext extends MachineContext, TExpressionEvent extends EventObject, TExpressionAction extends ParameterizedObject | undefined, TEvent extends EventObject, TDelay extends string>(target: Target<TContext, TExpressionEvent, TExpressionAction, TEvent>, options?: SendToActionOptions<TContext, TExpressionEvent, TExpressionAction, TEvent, TDelay>): SendToAction<TContext, TExpressionEvent, TExpressionAction, TEvent, TDelay>;
31
31
  /**
32
32
  * Escalates an error by sending it as an event to this machine's parent.
33
33
  *
@@ -35,5 +35,5 @@ export declare function forwardTo<TContext extends MachineContext, TExpressionEv
35
35
  * takes in the `context`, `event`, and `meta`, and returns the error data to send.
36
36
  * @param options Options to pass into the send action creator.
37
37
  */
38
- export declare function escalate<TContext extends MachineContext, TExpressionEvent extends EventObject, TExpressionAction extends ParameterizedObject | undefined, TErrorData = any>(errorData: TErrorData | ((args: UnifiedArg<TContext, TExpressionEvent>) => TErrorData), options?: SendToActionParams<TContext, TExpressionEvent, TExpressionAction, EventObject, string>): SendToAction<TContext, TExpressionEvent, TExpressionAction, string>;
38
+ export declare function escalate<TContext extends MachineContext, TExpressionEvent extends EventObject, TExpressionAction extends ParameterizedObject | undefined, TErrorData = any, TEvent extends EventObject = AnyEventObject>(errorData: TErrorData | ((args: UnifiedArg<TContext, TExpressionEvent, TEvent>) => TErrorData), options?: SendToActionParams<TContext, TExpressionEvent, TExpressionAction, EventObject, TEvent, string>): SendToAction<TContext, TExpressionEvent, TExpressionAction, TEvent, string>;
39
39
  export {};
@@ -1,12 +1,12 @@
1
1
  import { ActionArgs, ActorRef, EventObject, MachineContext, ParameterizedObject } from "../types.js";
2
- type ResolvableActorRef<TContext extends MachineContext, TExpressionEvent extends EventObject, TExpressionAction extends ParameterizedObject | undefined> = string | ActorRef<any> | ((args: ActionArgs<TContext, TExpressionEvent, TExpressionAction>) => ActorRef<any> | string);
3
- export interface StopAction<TContext extends MachineContext, TExpressionEvent extends EventObject, TExpressionAction extends ParameterizedObject | undefined> {
4
- (_: ActionArgs<TContext, TExpressionEvent, TExpressionAction>): void;
2
+ type ResolvableActorRef<TContext extends MachineContext, TExpressionEvent extends EventObject, TExpressionAction extends ParameterizedObject | undefined, TEvent extends EventObject> = string | ActorRef<any, any> | ((args: ActionArgs<TContext, TExpressionEvent, TExpressionAction, TEvent>) => ActorRef<any, any> | string);
3
+ export interface StopAction<TContext extends MachineContext, TExpressionEvent extends EventObject, TExpressionAction extends ParameterizedObject | undefined, TEvent extends EventObject> {
4
+ (_: ActionArgs<TContext, TExpressionEvent, TExpressionAction, TEvent>): void;
5
5
  }
6
6
  /**
7
7
  * Stops an actor.
8
8
  *
9
9
  * @param actorRef The actor to stop.
10
10
  */
11
- export declare function stop<TContext extends MachineContext, TExpressionEvent extends EventObject, TExpressionAction extends ParameterizedObject | undefined>(actorRef: ResolvableActorRef<TContext, TExpressionEvent, TExpressionAction>): StopAction<TContext, TExpressionEvent, TExpressionAction>;
11
+ export declare function stop<TContext extends MachineContext, TExpressionEvent extends EventObject, TExpressionAction extends ParameterizedObject | undefined, TEvent extends EventObject>(actorRef: ResolvableActorRef<TContext, TExpressionEvent, TExpressionAction, TEvent>): StopAction<TContext, TExpressionEvent, TExpressionAction, TEvent>;
12
12
  export {};
@@ -1,11 +1,10 @@
1
- import { ActorLogic, EventObject, AnyActorSystem, AnyEventObject, ActorSystem, ActorRefFrom } from "../types.js";
2
- export interface CallbackInternalState<TEvent extends EventObject, TInput = unknown> {
3
- canceled: boolean;
4
- receivers: Set<(e: TEvent) => void>;
5
- dispose: void | (() => void) | Promise<any>;
1
+ import { ActorLogic, EventObject, AnyActorSystem, AnyEventObject, ActorSystem, ActorRefFrom, Snapshot, HomomorphicOmit } from "../types.js";
2
+ type CallbackSnapshot<TInput, TEvent> = Snapshot<undefined> & {
6
3
  input: TInput;
7
- }
8
- export type CallbackActorLogic<TEvent extends EventObject, TInput = unknown> = ActorLogic<TEvent, undefined, CallbackInternalState<TEvent, TInput>, Pick<CallbackInternalState<TEvent, TInput>, 'input' | 'canceled'>, ActorSystem<any>, TInput, any>;
4
+ _receivers: Set<(e: TEvent) => void>;
5
+ _dispose: (() => void) | void;
6
+ };
7
+ export type CallbackActorLogic<TEvent extends EventObject, TInput = unknown> = ActorLogic<CallbackSnapshot<TInput, TEvent>, TEvent, TInput, HomomorphicOmit<CallbackSnapshot<TInput, TEvent>, '_receivers' | '_dispose'>, ActorSystem<any>>;
9
8
  export type CallbackActorRef<TEvent extends EventObject, TInput = unknown> = ActorRefFrom<CallbackActorLogic<TEvent, TInput>>;
10
9
  export type Receiver<TEvent extends EventObject> = (listener: {
11
10
  bivarianceHack(event: TEvent): void;
@@ -16,5 +15,6 @@ export type InvokeCallback<TEvent extends EventObject = AnyEventObject, TSentEve
16
15
  self: CallbackActorRef<TEvent>;
17
16
  sendBack: (event: TSentEvent) => void;
18
17
  receive: Receiver<TEvent>;
19
- }) => (() => void) | Promise<any> | void;
18
+ }) => (() => void) | void;
20
19
  export declare function fromCallback<TEvent extends EventObject, TInput>(invokeCallback: InvokeCallback<TEvent, AnyEventObject, TInput>): CallbackActorLogic<TEvent, TInput>;
20
+ export {};
@@ -1,8 +1,6 @@
1
- import type { ActorRef, AnyEventObject, BaseActorRef, EventObject } from "../types.js";
1
+ import type { ActorRef, AnyEventObject, Snapshot } from "../types.js";
2
2
  export { fromCallback, type CallbackActorLogic } from "./callback.js";
3
3
  export { fromEventObservable, fromObservable, type ObservableActorLogic } from "./observable.js";
4
4
  export { fromPromise, type PromiseActorLogic } from "./promise.js";
5
- export { fromTransition, type TransitionActorLogic } from "./transition.js";
6
- export declare function isActorRef(item: any): item is ActorRef<any>;
7
- export declare function toActorRef<TEvent extends EventObject, TSnapshot = any, TActorRefLike extends BaseActorRef<TEvent> = BaseActorRef<TEvent>>(actorRefLike: TActorRefLike): ActorRef<TEvent, TSnapshot> & Omit<TActorRefLike, keyof ActorRef<any, any>>;
8
- export declare function createEmptyActor(): ActorRef<AnyEventObject, undefined>;
5
+ export { fromTransition, type TransitionActorLogic, type TransitionSnapshot } from "./transition.js";
6
+ export declare function createEmptyActor(): ActorRef<AnyEventObject, Snapshot<undefined>>;
@@ -1,21 +1,20 @@
1
- import { Subscribable, ActorLogic, EventObject, Subscription, AnyActorSystem, ActorRefFrom } from "../types.js";
2
- export interface ObservableInternalState<T, TInput = unknown> {
3
- subscription: Subscription | undefined;
4
- status: 'active' | 'done' | 'error' | 'canceled';
5
- data: T | undefined;
1
+ import { Subscribable, ActorLogic, EventObject, Subscription, AnyActorSystem, ActorRefFrom, Snapshot, HomomorphicOmit } from "../types.js";
2
+ export type ObservableSnapshot<TContext, TInput> = Snapshot<undefined> & {
3
+ context: TContext | undefined;
6
4
  input: TInput | undefined;
7
- }
8
- export type ObservablePersistedState<T, TInput = unknown> = Omit<ObservableInternalState<T, TInput>, 'subscription'>;
9
- export type ObservableActorLogic<T, TInput> = ActorLogic<{
5
+ _subscription: Subscription | undefined;
6
+ };
7
+ export type ObservablePersistedState<TContext, TInput> = HomomorphicOmit<ObservableSnapshot<TContext, TInput>, '_subscription'>;
8
+ export type ObservableActorLogic<TContext, TInput> = ActorLogic<ObservableSnapshot<TContext, TInput>, {
10
9
  type: string;
11
10
  [k: string]: unknown;
12
- }, T | undefined, ObservableInternalState<T, TInput>, ObservablePersistedState<T, TInput>, AnyActorSystem, TInput>;
13
- export type ObservableActorRef<T> = ActorRefFrom<ObservableActorLogic<T, any>>;
14
- export declare function fromObservable<T, TInput>(observableCreator: ({ input, system }: {
11
+ }, TInput, ObservablePersistedState<TContext, TInput>, AnyActorSystem>;
12
+ export type ObservableActorRef<TContext> = ActorRefFrom<ObservableActorLogic<TContext, any>>;
13
+ export declare function fromObservable<TContext, TInput>(observableCreator: ({ input, system }: {
15
14
  input: TInput;
16
15
  system: AnyActorSystem;
17
- self: ObservableActorRef<T>;
18
- }) => Subscribable<T>): ObservableActorLogic<T, TInput>;
16
+ self: ObservableActorRef<TContext>;
17
+ }) => Subscribable<TContext>): ObservableActorLogic<TContext, TInput>;
19
18
  /**
20
19
  * Creates event observable logic that listens to an observable
21
20
  * that delivers event objects.
@@ -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;
@@ -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:
@@ -58,20 +64,22 @@ export interface ParameterizedObject {
58
64
  type: string;
59
65
  params?: Record<string, unknown>;
60
66
  }
61
- export interface UnifiedArg<TContext extends MachineContext, TExpressionEvent extends EventObject> {
67
+ export interface UnifiedArg<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject> {
62
68
  context: TContext;
63
69
  event: TExpressionEvent;
64
- self: ActorRef<TExpressionEvent>;
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
- export interface ActionArgs<TContext extends MachineContext, TEvent extends EventObject, TAction extends ParameterizedObject | undefined> extends UnifiedArg<TContext, TEvent> {
69
- action: TAction;
74
+ export interface ActionArgs<TContext extends MachineContext, TExpressionEvent extends EventObject, TExpressionAction extends ParameterizedObject | undefined, TEvent extends EventObject> extends UnifiedArg<TContext, TExpressionEvent, TEvent> {
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
- (args: ActionArgs<TContext, TExpressionEvent, TExpressionAction>): void;
82
+ (args: ActionArgs<TContext, TExpressionEvent, TExpressionAction, TEvent>): void;
75
83
  _out_TEvent?: TEvent;
76
84
  _out_TActor?: TActor;
77
85
  _out_TAction?: TAction;
@@ -143,7 +151,7 @@ type Delay<TDelay extends string> = TDelay | number;
143
151
  export type DelayedTransitions<TContext extends MachineContext, TEvent extends EventObject, TActor extends ProvidedActor, TAction extends ParameterizedObject, TGuard extends ParameterizedObject, TDelay extends string> = {
144
152
  [K in Delay<TDelay>]?: string | SingleOrArray<TransitionConfig<TContext, TEvent, TEvent, TActor, TAction, TGuard, TDelay>>;
145
153
  } | Array<TransitionConfig<TContext, TEvent, TEvent, TActor, TAction, TGuard, TDelay> & {
146
- delay: Delay<TDelay> | ((args: UnifiedArg<TContext, TEvent>) => Delay<TDelay>);
154
+ delay: Delay<TDelay> | ((args: UnifiedArg<TContext, TEvent, TEvent>) => Delay<TDelay>);
147
155
  }>;
148
156
  export type StateTypes = 'atomic' | 'compound' | 'parallel' | 'final' | 'history' | string;
149
157
  export type SingleOrArray<T> = readonly T[] | T;
@@ -338,7 +346,10 @@ export interface StateMachineDefinition<TContext extends MachineContext, TEvent
338
346
  }
339
347
  export type AnyStateNode = StateNode<any, any>;
340
348
  export type AnyStateNodeDefinition = StateNodeDefinition<any, any>;
341
- export type AnyState = State<any, any, any, any, any, // delays
349
+ export type AnyState = State<any, // context
350
+ any, // event
351
+ any, // actor
352
+ any, // tags
342
353
  any>;
343
354
  export type AnyStateMachine = StateMachine<any, any, any, any, any, any, any, any, any, // delays
344
355
  any>;
@@ -372,8 +383,8 @@ type GuardMap<TContext extends MachineContext, TEvent extends EventObject, TGuar
372
383
  type: K;
373
384
  } ? TGuard : never, TGuard>;
374
385
  };
375
- export type DelayFunctionMap<TContext extends MachineContext, TEvent extends EventObject, TAction extends ParameterizedObject> = Record<string, DelayConfig<TContext, TEvent, TAction>>;
376
- export type DelayConfig<TContext extends MachineContext, TExpressionEvent extends EventObject, TExpressionAction extends ParameterizedObject | undefined> = number | DelayExpr<TContext, TExpressionEvent, TExpressionAction>;
386
+ export type DelayFunctionMap<TContext extends MachineContext, TEvent extends EventObject, TAction extends ParameterizedObject> = Record<string, DelayConfig<TContext, TEvent, TAction, TEvent>>;
387
+ export type DelayConfig<TContext extends MachineContext, TExpressionEvent extends EventObject, TExpressionAction extends ParameterizedObject | undefined, TEvent extends EventObject> = number | DelayExpr<TContext, TExpressionEvent, TExpressionAction, TEvent>;
377
388
  export interface MachineImplementationsSimplified<TContext extends MachineContext, TEvent extends EventObject, TActor extends ProvidedActor = ProvidedActor, TAction extends ParameterizedObject = ParameterizedObject, TGuard extends ParameterizedObject = ParameterizedObject> {
378
389
  guards: GuardMap<TContext, TEvent, TGuard>;
379
390
  actions: ActionFunctionMap<TContext, TEvent, TActor, TAction>;
@@ -394,7 +405,7 @@ type MachineImplementationsActors<TContext extends MachineContext, TResolvedType
394
405
  };
395
406
  };
396
407
  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'>> = {
397
- [K in keyof TIndexedDelays]?: DelayConfig<TContext, MaybeNarrowedEvent<TIndexedEvents, TEventsCausingDelays, K>, Cast<Prop<TIndexedActions, keyof TIndexedActions>, ParameterizedObject> | undefined>;
408
+ [K in keyof TIndexedDelays]?: DelayConfig<TContext, MaybeNarrowedEvent<TIndexedEvents, TEventsCausingDelays, K>, Cast<Prop<TIndexedActions, keyof TIndexedActions>, ParameterizedObject> | undefined, Cast<Prop<TIndexedEvents, keyof TIndexedEvents>, EventObject>>;
398
409
  };
399
410
  type MachineImplementationsGuards<TContext extends MachineContext, TResolvedTypesMeta, TEventsCausingGuards = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'eventsCausingGuards'>, TIndexedEvents = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedEvents'>, TIndexedGuards = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedGuards'>> = {
400
411
  [K in keyof TIndexedGuards]?: Guard<TContext, MaybeNarrowedEvent<TIndexedEvents, TEventsCausingGuards, K>, Cast<TIndexedGuards[K], ParameterizedObject>, Cast<Prop<TIndexedGuards, keyof TIndexedGuards>, ParameterizedObject>>;
@@ -482,34 +493,34 @@ export interface DoneStateEvent<TOutput = unknown> extends EventObject {
482
493
  type: `xstate.done.state.${string}`;
483
494
  output: TOutput;
484
495
  }
485
- export type DelayExpr<TContext extends MachineContext, TExpressionEvent extends EventObject, TExpressionAction extends ParameterizedObject | undefined> = (args: ActionArgs<TContext, TExpressionEvent, TExpressionAction>) => number;
486
- export type LogExpr<TContext extends MachineContext, TExpressionEvent extends EventObject, TExpressionAction extends ParameterizedObject | undefined> = (args: ActionArgs<TContext, TExpressionEvent, TExpressionAction>) => unknown;
487
- export type SendExpr<TContext extends MachineContext, TExpressionEvent extends EventObject, TExpressionAction extends ParameterizedObject | undefined, TSentEvent extends EventObject> = (args: ActionArgs<TContext, TExpressionEvent, TExpressionAction>) => TSentEvent;
496
+ export type DelayExpr<TContext extends MachineContext, TExpressionEvent extends EventObject, TExpressionAction extends ParameterizedObject | undefined, TEvent extends EventObject> = (args: ActionArgs<TContext, TExpressionEvent, TExpressionAction, TEvent>) => number;
497
+ export type LogExpr<TContext extends MachineContext, TExpressionEvent extends EventObject, TExpressionAction extends ParameterizedObject | undefined, TEvent extends EventObject> = (args: ActionArgs<TContext, TExpressionEvent, TExpressionAction, TEvent>) => unknown;
498
+ export type SendExpr<TContext extends MachineContext, TExpressionEvent extends EventObject, TExpressionAction extends ParameterizedObject | undefined, TSentEvent extends EventObject, TEvent extends EventObject> = (args: ActionArgs<TContext, TExpressionEvent, TExpressionAction, TEvent>) => TSentEvent;
488
499
  export declare enum SpecialTargets {
489
500
  Parent = "#_parent",
490
501
  Internal = "#_internal"
491
502
  }
492
- export interface SendToActionOptions<TContext extends MachineContext, TExpressionEvent extends EventObject, TExpressionAction extends ParameterizedObject | undefined, TDelay extends string> extends RaiseActionOptions<TContext, TExpressionEvent, TExpressionAction, TDelay> {
503
+ export interface SendToActionOptions<TContext extends MachineContext, TExpressionEvent extends EventObject, TExpressionAction extends ParameterizedObject | undefined, TEvent extends EventObject, TDelay extends string> extends RaiseActionOptions<TContext, TExpressionEvent, TExpressionAction, TEvent, TDelay> {
493
504
  }
494
- export interface RaiseActionOptions<TContext extends MachineContext, TExpressionEvent extends EventObject, TExpressionAction extends ParameterizedObject | undefined, TDelay extends string> {
505
+ export interface RaiseActionOptions<TContext extends MachineContext, TExpressionEvent extends EventObject, TExpressionAction extends ParameterizedObject | undefined, TEvent extends EventObject, TDelay extends string> {
495
506
  id?: string;
496
- delay?: Delay<TDelay> | DelayExpr<TContext, TExpressionEvent, TExpressionAction>;
507
+ delay?: Delay<TDelay> | DelayExpr<TContext, TExpressionEvent, TExpressionAction, TEvent>;
497
508
  }
498
- export interface RaiseActionParams<TContext extends MachineContext, TExpressionEvent extends EventObject, TExpressionAction extends ParameterizedObject | undefined, TEvent extends EventObject, TDelay extends string> extends RaiseActionOptions<TContext, TExpressionEvent, TExpressionAction, TDelay> {
499
- event: TEvent | SendExpr<TContext, TExpressionEvent, TExpressionAction, TEvent>;
509
+ export interface RaiseActionParams<TContext extends MachineContext, TExpressionEvent extends EventObject, TExpressionAction extends ParameterizedObject | undefined, TEvent extends EventObject, TDelay extends string> extends RaiseActionOptions<TContext, TExpressionEvent, TExpressionAction, TEvent, TDelay> {
510
+ event: TEvent | SendExpr<TContext, TExpressionEvent, TExpressionAction, TEvent, TEvent>;
500
511
  }
501
- export interface SendToActionParams<TContext extends MachineContext, TExpressionEvent extends EventObject, TExpressionAction extends ParameterizedObject | undefined, TSentEvent extends EventObject, TDelay extends string> extends SendToActionOptions<TContext, TExpressionEvent, TExpressionAction, TDelay> {
502
- event: TSentEvent | SendExpr<TContext, TExpressionEvent, TExpressionAction, TSentEvent>;
512
+ export interface SendToActionParams<TContext extends MachineContext, TExpressionEvent extends EventObject, TExpressionAction extends ParameterizedObject | undefined, TSentEvent extends EventObject, TEvent extends EventObject, TDelay extends string> extends SendToActionOptions<TContext, TExpressionEvent, TExpressionAction, TEvent, TDelay> {
513
+ event: TSentEvent | SendExpr<TContext, TExpressionEvent, TExpressionAction, TSentEvent, TEvent>;
503
514
  }
504
- export type Assigner<TContext extends MachineContext, TExpressionEvent extends EventObject, TExpressionAction extends ParameterizedObject | undefined, TActor extends ProvidedActor> = (args: AssignArgs<TContext, TExpressionEvent, TExpressionAction, TActor>) => Partial<TContext>;
505
- export type PartialAssigner<TContext extends MachineContext, TExpressionEvent extends EventObject, TExpressionAction extends ParameterizedObject | undefined, TActor extends ProvidedActor, TKey extends keyof TContext> = (args: AssignArgs<TContext, TExpressionEvent, TExpressionAction, TActor>) => TContext[TKey];
506
- export type PropertyAssigner<TContext extends MachineContext, TExpressionEvent extends EventObject, TExpressionAction extends ParameterizedObject | undefined, TActor extends ProvidedActor> = {
507
- [K in keyof TContext]?: PartialAssigner<TContext, TExpressionEvent, TExpressionAction, TActor, K> | TContext[K];
515
+ export type Assigner<TContext extends MachineContext, TExpressionEvent extends EventObject, TExpressionAction extends ParameterizedObject | undefined, TEvent extends EventObject, TActor extends ProvidedActor> = (args: AssignArgs<TContext, TExpressionEvent, TExpressionAction, TEvent, TActor>) => Partial<TContext>;
516
+ export type PartialAssigner<TContext extends MachineContext, TExpressionEvent extends EventObject, TExpressionAction extends ParameterizedObject | undefined, TEvent extends EventObject, TActor extends ProvidedActor, TKey extends keyof TContext> = (args: AssignArgs<TContext, TExpressionEvent, TExpressionAction, TEvent, TActor>) => TContext[TKey];
517
+ export type PropertyAssigner<TContext extends MachineContext, TExpressionEvent extends EventObject, TExpressionAction extends ParameterizedObject | undefined, TEvent extends EventObject, TActor extends ProvidedActor> = {
518
+ [K in keyof TContext]?: PartialAssigner<TContext, TExpressionEvent, TExpressionAction, TEvent, TActor, K> | TContext[K];
508
519
  };
509
520
  export type Mapper<TContext extends MachineContext, TEvent extends EventObject, TResult> = (args: {
510
521
  context: TContext;
511
522
  event: TEvent;
512
- self: ActorRef<TEvent>;
523
+ self: ActorRef<TEvent, any>;
513
524
  }) => TResult;
514
525
  export type PropertyMapper<TContext extends MachineContext, TEvent extends EventObject, TParams extends {}> = {
515
526
  [K in keyof TParams]?: Mapper<TContext, TEvent, TParams[K]> | TParams[K];
@@ -539,7 +550,7 @@ export type TransitionDefinitionMap<TContext extends MachineContext, TEvent exte
539
550
  [K in EventDescriptor<TEvent>]: Array<TransitionDefinition<TContext, ExtractEvent<TEvent, K>>>;
540
551
  };
541
552
  export interface DelayedTransitionDefinition<TContext extends MachineContext, TEvent extends EventObject> extends TransitionDefinition<TContext, TEvent> {
542
- delay: number | string | DelayExpr<TContext, TEvent, undefined>;
553
+ delay: number | string | DelayExpr<TContext, TEvent, undefined, TEvent>;
543
554
  }
544
555
  export interface StateLike<TContext extends MachineContext> {
545
556
  value: StateValue;
@@ -552,8 +563,8 @@ export interface StateConfig<TContext extends MachineContext, TEvent extends Eve
552
563
  historyValue?: HistoryValue<TContext, TEvent>;
553
564
  meta?: any;
554
565
  configuration?: Array<StateNode<TContext, TEvent>>;
555
- children: Record<string, ActorRef<any>>;
556
- done?: boolean;
566
+ children: Record<string, ActorRef<any, any>>;
567
+ status: 'active' | 'done' | 'error' | 'stopped';
557
568
  output?: any;
558
569
  error?: unknown;
559
570
  tags?: Set<string>;
@@ -567,15 +578,7 @@ export interface ActorOptions<TLogic extends AnyActorLogic> {
567
578
  execute?: boolean;
568
579
  clock?: Clock;
569
580
  logger?: (...args: any[]) => void;
570
- parent?: ActorRef<any>;
571
- /**
572
- * If `true`, defers processing of sent events until the service
573
- * is initialized (`.start()`). Otherwise, an error will be thrown
574
- * for events sent to an uninitialized service.
575
- *
576
- * Default: `true`
577
- */
578
- deferEvents?: boolean;
581
+ parent?: ActorRef<any, any>;
579
582
  /**
580
583
  * The custom `id` for referencing this service.
581
584
  */
@@ -601,14 +604,14 @@ export interface ActorOptions<TLogic extends AnyActorLogic> {
601
604
  */
602
605
  src?: string;
603
606
  }
604
- export type AnyActor = Actor<any, any>;
607
+ export type AnyActor = Actor<any>;
605
608
  /**
606
609
  * @deprecated Use `AnyActor` instead.
607
610
  */
608
611
  export type AnyInterpreter = AnyActor;
609
612
  export type Observer<T> = {
610
613
  next?: (value: T) => void;
611
- error?: (err: any) => void;
614
+ error?: (err: unknown) => void;
612
615
  complete?: () => void;
613
616
  };
614
617
  export interface Subscription {
@@ -631,7 +634,7 @@ export interface BaseActorRef<TEvent extends EventObject> {
631
634
  export interface ActorLike<TCurrent, TEvent extends EventObject> extends Subscribable<TCurrent> {
632
635
  send: (event: TEvent) => void;
633
636
  }
634
- export interface ActorRef<TEvent extends EventObject, TSnapshot = any> extends Subscribable<TSnapshot>, InteropObservable<TSnapshot> {
637
+ export interface ActorRef<TEvent extends EventObject, TSnapshot extends Snapshot<unknown>> extends Subscribable<TSnapshot>, InteropObservable<TSnapshot> {
635
638
  /**
636
639
  * The unique identifier for this actor relative to its parent.
637
640
  */
@@ -650,12 +653,12 @@ export interface ActorRef<TEvent extends EventObject, TSnapshot = any> extends S
650
653
  }
651
654
  export type AnyActorRef = ActorRef<any, any>;
652
655
  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;
653
- 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;
656
+ 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;
654
657
  export type DevToolsAdapter = (service: AnyActor) => void;
655
658
  /**
656
659
  * @deprecated Use `Actor<T>` instead.
657
660
  */
658
- 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;
661
+ 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;
659
662
  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;
660
663
  export type __ResolvedTypesMetaFrom<T> = T extends StateMachine<any, // context
661
664
  any, // event
@@ -667,7 +670,7 @@ any, // tag
667
670
  any, // input
668
671
  any, // output
669
672
  infer TResolvedTypesMeta> ? TResolvedTypesMeta : never;
670
- export interface ActorContext<TEvent extends EventObject, TSnapshot, TSystem extends ActorSystem<any> = ActorSystem<any>> {
673
+ export interface ActorContext<TSnapshot extends Snapshot<unknown>, TEvent extends EventObject, TSystem extends ActorSystem<any> = ActorSystem<any>> {
671
674
  self: ActorRef<TEvent, TSnapshot>;
672
675
  id: string;
673
676
  sessionId: string;
@@ -677,38 +680,57 @@ export interface ActorContext<TEvent extends EventObject, TSnapshot, TSystem ext
677
680
  stopChild: (child: AnyActorRef) => void;
678
681
  }
679
682
  export type AnyActorContext = ActorContext<any, any, any>;
680
- export interface ActorLogic<TEvent extends EventObject, TSnapshot = any, TInternalState = TSnapshot,
683
+ export type ActorStatusObject<TOutput> = {
684
+ status: 'done';
685
+ output: TOutput;
686
+ } | {
687
+ status: 'error';
688
+ error: unknown;
689
+ } | {
690
+ status: 'stopped';
691
+ } | {
692
+ status: 'active';
693
+ };
694
+ export type Snapshot<TOutput> = {
695
+ status: 'active';
696
+ output: undefined;
697
+ error: undefined;
698
+ } | {
699
+ status: 'done';
700
+ output: TOutput;
701
+ error: undefined;
702
+ } | {
703
+ status: 'error';
704
+ output: undefined;
705
+ error: unknown;
706
+ } | {
707
+ status: 'stopped';
708
+ output: undefined;
709
+ error: undefined;
710
+ };
711
+ export interface ActorLogic<TSnapshot extends Snapshot<unknown>, TEvent extends EventObject, TInput = unknown,
681
712
  /**
682
713
  * Serialized internal state used for persistence & restoration
683
714
  */
684
- TPersisted = TInternalState, TSystem extends ActorSystem<any> = ActorSystem<any>, TInput = any, TOutput = unknown> {
715
+ TPersisted = TSnapshot, TSystem extends ActorSystem<any> = ActorSystem<any>> {
685
716
  config?: unknown;
686
- transition: (state: TInternalState, message: TEvent, ctx: ActorContext<TEvent, TSnapshot, TSystem>) => TInternalState;
687
- getInitialState: (actorCtx: ActorContext<TEvent, TSnapshot, TSystem>, input: TInput) => TInternalState;
688
- restoreState?: (persistedState: TPersisted, actorCtx: ActorContext<TEvent, TSnapshot>) => TInternalState;
689
- getSnapshot?: (state: TInternalState) => TSnapshot;
690
- getStatus?: (state: TInternalState) => {
691
- status: string;
692
- data?: any;
693
- };
694
- start?: (state: TInternalState, actorCtx: ActorContext<TEvent, TSnapshot>) => void;
717
+ transition: (state: TSnapshot, message: TEvent, ctx: ActorContext<TSnapshot, TEvent, TSystem>) => TSnapshot;
718
+ getInitialState: (actorCtx: ActorContext<TSnapshot, TEvent, TSystem>, input: TInput) => TSnapshot;
719
+ restoreState?: (persistedState: TPersisted, actorCtx: ActorContext<TSnapshot, TEvent>) => TSnapshot;
720
+ start?: (state: TSnapshot, actorCtx: ActorContext<TSnapshot, TEvent>) => void;
695
721
  /**
696
722
  * @returns Persisted state
697
723
  */
698
- getPersistedState?: (state: TInternalState) => TPersisted;
699
- _out_TOutput?: TOutput;
724
+ getPersistedState?: (state: TSnapshot) => TPersisted;
700
725
  }
701
- export type AnyActorLogic = ActorLogic<any, // event
702
- any, // snapshot
703
- any, // internal state
704
- any, // persisted state
705
- any, // system
726
+ export type AnyActorLogic = ActorLogic<any, // snapshot
727
+ any, // event
706
728
  any, // input
729
+ any, // persisted state
707
730
  any>;
708
- 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;
709
- export type EventFromLogic<TLogic extends ActorLogic<any, any>> = TLogic extends ActorLogic<infer TEvent, infer _, infer __, infer ___, infer ____> ? TEvent : never;
710
- export type PersistedStateFrom<TLogic extends ActorLogic<any, any>> = TLogic extends ActorLogic<infer _TEvent, infer _TSnapshot, infer _TInternalState, infer TPersisted> ? TPersisted : never;
711
- export type InternalStateFrom<TLogic extends ActorLogic<any, any>> = TLogic extends ActorLogic<infer _TEvent, infer _TSnapshot, infer TInternalState, infer _TPersisted> ? TInternalState : never;
731
+ 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;
732
+ export type EventFromLogic<TLogic extends ActorLogic<any, any, any, any, any>> = TLogic extends ActorLogic<infer _, infer TEvent, infer __, infer _____, infer ______> ? TEvent : never;
733
+ 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;
712
734
  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;
713
735
  export type EventFrom<T, K extends Prop<TEvent, 'type'> = never, TEvent extends EventObject = ResolveEventType<T>> = IsNever<K> extends true ? TEvent : ExtractEvent<TEvent, K>;
714
736
  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;
@@ -733,9 +755,9 @@ export interface ActorSystem<T extends ActorSystemInfo> {
733
755
  get: <K extends keyof T['actors']>(key: K) => T['actors'][K] | undefined;
734
756
  }
735
757
  export type AnyActorSystem = ActorSystem<any>;
736
- export type PersistedMachineState<TState extends AnyState> = Pick<TState, 'value' | 'output' | 'error' | 'context' | 'done' | 'historyValue'> & {
758
+ 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'> & {
737
759
  children: {
738
- [K in keyof TState['children']]: {
760
+ [K in keyof MachineSnapshot<TContext, TEvent, TActor, TTag, TOutput, TResolvedTypesMeta>['children']]: {
739
761
  state: any;
740
762
  src?: string;
741
763
  };