xstate 5.0.0-beta.20 → 5.0.0-beta.22

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 (46) hide show
  1. package/actions/dist/xstate-actions.cjs.js +1 -1
  2. package/actions/dist/xstate-actions.development.cjs.js +1 -1
  3. package/actions/dist/xstate-actions.development.esm.js +1 -1
  4. package/actions/dist/xstate-actions.esm.js +1 -1
  5. package/actions/dist/xstate-actions.umd.min.js +1 -1
  6. package/actions/dist/xstate-actions.umd.min.js.map +1 -1
  7. package/actors/dist/xstate-actors.cjs.js +1 -1
  8. package/actors/dist/xstate-actors.development.cjs.js +1 -1
  9. package/actors/dist/xstate-actors.development.esm.js +1 -1
  10. package/actors/dist/xstate-actors.esm.js +1 -1
  11. package/actors/dist/xstate-actors.umd.min.js +1 -1
  12. package/actors/dist/xstate-actors.umd.min.js.map +1 -1
  13. package/dev/dist/xstate-dev.umd.min.js.map +1 -1
  14. package/dist/{actions-d1c41ed3.development.cjs.js → actions-4b70fc8d.development.cjs.js} +174 -82
  15. package/dist/{actions-069d9805.cjs.js → actions-8f2e997e.cjs.js} +172 -83
  16. package/dist/{actions-b299d008.development.esm.js → actions-d4305983.development.esm.js} +171 -82
  17. package/dist/{actions-a8a9433c.esm.js → actions-fb7384f8.esm.js} +169 -83
  18. package/dist/declarations/src/Machine.d.ts +2 -2
  19. package/dist/declarations/src/State.d.ts +4 -7
  20. package/dist/declarations/src/StateMachine.d.ts +7 -6
  21. package/dist/declarations/src/StateNode.d.ts +3 -3
  22. package/dist/declarations/src/actions/send.d.ts +1 -1
  23. package/dist/declarations/src/actions/stop.d.ts +1 -1
  24. package/dist/declarations/src/actions.d.ts +2 -2
  25. package/dist/declarations/src/actors/callback.d.ts +4 -4
  26. package/dist/declarations/src/actors/observable.d.ts +7 -4
  27. package/dist/declarations/src/actors/promise.d.ts +4 -4
  28. package/dist/declarations/src/dev/index.d.ts +6 -6
  29. package/dist/declarations/src/index.d.ts +3 -2
  30. package/dist/declarations/src/interpreter.d.ts +30 -16
  31. package/dist/declarations/src/types.d.ts +52 -33
  32. package/dist/declarations/src/utils.d.ts +2 -2
  33. package/dist/xstate.cjs.js +17 -14
  34. package/dist/xstate.cjs.mjs +3 -1
  35. package/dist/xstate.development.cjs.js +17 -14
  36. package/dist/xstate.development.cjs.mjs +3 -1
  37. package/dist/xstate.development.esm.js +14 -13
  38. package/dist/xstate.esm.js +14 -13
  39. package/dist/xstate.umd.min.js +1 -1
  40. package/dist/xstate.umd.min.js.map +1 -1
  41. package/guards/dist/xstate-guards.cjs.js +1 -1
  42. package/guards/dist/xstate-guards.development.cjs.js +1 -1
  43. package/guards/dist/xstate-guards.development.esm.js +1 -1
  44. package/guards/dist/xstate-guards.esm.js +1 -1
  45. package/guards/dist/xstate-guards.umd.min.js.map +1 -1
  46. package/package.json +1 -1
@@ -2,7 +2,7 @@ import { ActionArgs, ActorRef, AnyActorContext, AnyState, EventObject, MachineCo
2
2
  type ResolvableActorRef<TContext extends MachineContext, TExpressionEvent extends EventObject> = string | ActorRef<any> | ((args: UnifiedArg<TContext, TExpressionEvent>) => ActorRef<any> | string);
3
3
  declare function resolve(_: AnyActorContext, state: AnyState, args: ActionArgs<any, any>, { actorRef }: {
4
4
  actorRef: ResolvableActorRef<any, any>;
5
- }): (ActorRef<any, any> | AnyState)[];
5
+ }): (AnyState | ActorRef<any, any>)[];
6
6
  declare function execute(actorContext: AnyActorContext, actorRef: ActorRef<any, any> | undefined): void;
7
7
  /**
8
8
  * Stops an actor.
@@ -36,7 +36,7 @@ export declare function done(id: string, output?: any): DoneEventObject;
36
36
  */
37
37
  export declare function doneInvoke(invokeId: string, output?: any): DoneEvent;
38
38
  export declare function error(id: string, data?: any): ErrorPlatformEvent & string;
39
- export declare function createInitEvent(input: any): {
39
+ export declare function createInitEvent(input: unknown): {
40
40
  readonly type: "xstate.init";
41
- readonly input: any;
41
+ readonly input: unknown;
42
42
  };
@@ -1,12 +1,12 @@
1
1
  import { ActorLogic, EventObject, AnyActorSystem, AnyEventObject, ActorSystem, ActorRefFrom } from "../types.js";
2
- export interface CallbackInternalState<TEvent extends EventObject> {
2
+ export interface CallbackInternalState<TEvent extends EventObject, TInput = unknown> {
3
3
  canceled: boolean;
4
4
  receivers: Set<(e: TEvent) => void>;
5
5
  dispose: void | (() => void) | Promise<any>;
6
- input?: any;
6
+ input: TInput;
7
7
  }
8
- export type CallbackActorLogic<TEvent extends EventObject, TInput = any> = ActorLogic<TEvent, undefined, CallbackInternalState<TEvent>, CallbackInternalState<TEvent>, ActorSystem<any>, TInput, any>;
9
- export type CallbackActorRef<TEvent extends EventObject> = ActorRefFrom<CallbackActorLogic<TEvent>>;
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>;
9
+ export type CallbackActorRef<TEvent extends EventObject, TInput = unknown> = ActorRefFrom<CallbackActorLogic<TEvent, TInput>>;
10
10
  export type Receiver<TEvent extends EventObject> = (listener: {
11
11
  bivarianceHack(event: TEvent): void;
12
12
  }['bivarianceHack']) => void;
@@ -1,12 +1,15 @@
1
1
  import { Subscribable, ActorLogic, EventObject, Subscription, AnyActorSystem, ActorRefFrom } from "../types.js";
2
- export interface ObservableInternalState<T> {
2
+ export interface ObservableInternalState<T, TInput = unknown> {
3
3
  subscription: Subscription | undefined;
4
4
  status: 'active' | 'done' | 'error' | 'canceled';
5
5
  data: T | undefined;
6
- input?: any;
6
+ input: TInput | undefined;
7
7
  }
8
- export type ObservablePersistedState<T> = Omit<ObservableInternalState<T>, 'subscription'>;
9
- export type ObservableActorLogic<T, TInput> = ActorLogic<EventObject, T | undefined, ObservableInternalState<T>, ObservablePersistedState<T>, AnyActorSystem, TInput>;
8
+ export type ObservablePersistedState<T, TInput = unknown> = Omit<ObservableInternalState<T, TInput>, 'subscription'>;
9
+ export type ObservableActorLogic<T, TInput> = ActorLogic<{
10
+ type: string;
11
+ [k: string]: unknown;
12
+ }, T | undefined, ObservableInternalState<T, TInput>, ObservablePersistedState<T, TInput>, AnyActorSystem, TInput>;
10
13
  export type ObservableActorRef<T> = ActorRefFrom<ObservableActorLogic<T, any>>;
11
14
  export declare function fromObservable<T, TInput>(observableCreator: ({ input, system }: {
12
15
  input: TInput;
@@ -1,8 +1,8 @@
1
1
  import { ActorLogic, ActorRefFrom, ActorSystem, AnyActorSystem } from "../types.js";
2
- export interface PromiseInternalState<T> {
2
+ export interface PromiseInternalState<T, TInput = unknown> {
3
3
  status: 'active' | 'error' | 'done' | 'canceled';
4
4
  data: T | undefined;
5
- input?: any;
5
+ input: TInput | undefined;
6
6
  }
7
7
  declare const resolveEventType = "$$xstate.resolve";
8
8
  declare const rejectEventType = "$$xstate.reject";
@@ -18,8 +18,8 @@ export type PromiseActorEvents<T> = {
18
18
  export type PromiseActorLogic<T, TInput = unknown> = ActorLogic<{
19
19
  type: string;
20
20
  [k: string]: unknown;
21
- }, T | undefined, PromiseInternalState<T>, // internal state
22
- PromiseInternalState<T>, // persisted state
21
+ }, T | undefined, PromiseInternalState<T, TInput>, // internal state
22
+ PromiseInternalState<T, TInput>, // persisted state
23
23
  ActorSystem<any>, TInput, // input
24
24
  T>;
25
25
  export type PromiseActorRef<T> = ActorRefFrom<PromiseActorLogic<T>>;
@@ -1,14 +1,14 @@
1
- import { AnyInterpreter, DevToolsAdapter } from "../types.js";
2
- type ServiceListener = (service: AnyInterpreter) => void;
1
+ import { AnyActor, DevToolsAdapter } from "../types.js";
2
+ type ServiceListener = (service: AnyActor) => void;
3
3
  export interface XStateDevInterface {
4
- register: (service: AnyInterpreter) => void;
5
- unregister: (service: AnyInterpreter) => void;
4
+ register: (service: AnyActor) => void;
5
+ unregister: (service: AnyActor) => void;
6
6
  onRegister: (listener: ServiceListener) => {
7
7
  unsubscribe: () => void;
8
8
  };
9
- services: Set<AnyInterpreter>;
9
+ services: Set<AnyActor>;
10
10
  }
11
11
  export declare function getGlobal(): typeof globalThis | undefined;
12
- export declare function registerService(service: AnyInterpreter): void;
12
+ export declare function registerService(service: AnyActor): void;
13
13
  export declare const devToolsAdapter: DevToolsAdapter;
14
14
  export {};
@@ -6,7 +6,7 @@ export { log } from "./actions/log.js";
6
6
  export { pure } from "./actions/pure.js";
7
7
  export { raise } from "./actions/raise.js";
8
8
  export { stop } from "./actions/stop.js";
9
- import { interpret, Interpreter, ActorStatus } from "./interpreter.js";
9
+ import { createActor, interpret, Actor, ActorStatus, InterpreterStatus, Interpreter } from "./interpreter.js";
10
10
  import { createMachine } from "./Machine.js";
11
11
  import { mapState } from "./mapState.js";
12
12
  import { State } from "./State.js";
@@ -18,7 +18,8 @@ export { waitFor } from "./waitFor.js";
18
18
  export * from "./typegenTypes.js";
19
19
  export * from "./types.js";
20
20
  export { matchesState, pathToStateValue, toObserver } from "./utils.js";
21
- export { StateNode, State, mapState, sendTo, sendParent, forwardTo, interpret, Interpreter, ActorStatus as InterpreterStatus, doneInvoke, createMachine };
21
+ export { StateNode, State, mapState, sendTo, sendParent, forwardTo, createActor, interpret, // deprecated
22
+ Actor, type Interpreter, ActorStatus, InterpreterStatus, doneInvoke, createMachine };
22
23
  export { fromPromise, fromObservable, fromCallback, fromEventObservable, fromTransition } from "./actors/index.js";
23
24
  export { stateIn, not, and, or } from "./guards.js";
24
25
  declare global {
@@ -1,7 +1,7 @@
1
1
  import { symbolObservable } from "./symbolObservable.js";
2
2
  import { AreAllImplementationsAssumedToBeProvided, MissingImplementationsError } from "./typegenTypes.js";
3
- import type { ActorSystem, AnyActorLogic, AnyStateMachine, EventFromLogic, InterpreterFrom, PersistedStateFrom, SnapshotFrom, AnyActorRef } from "./types.js";
4
- import { ActorRef, EventObject, InteropSubscribable, InterpreterOptions, Observer, Subscription } from "./types.js";
3
+ import type { ActorSystem, AnyActorLogic, AnyStateMachine, EventFromLogic, PersistedStateFrom, SnapshotFrom, AnyActorRef } from "./types.js";
4
+ import { ActorRef, EventObject, InteropSubscribable, ActorOptions, Observer, Subscription } from "./types.js";
5
5
  export type SnapshotListener<TLogic extends AnyActorLogic> = (state: SnapshotFrom<TLogic>) => void;
6
6
  export type EventListener<TEvent extends EventObject = EventObject> = (event: TEvent) => void;
7
7
  export type Listener = () => void;
@@ -15,17 +15,21 @@ export declare enum ActorStatus {
15
15
  Running = 1,
16
16
  Stopped = 2
17
17
  }
18
- export declare class Interpreter<TLogic extends AnyActorLogic, TEvent extends EventObject = EventFromLogic<TLogic>> implements ActorRef<TEvent, SnapshotFrom<TLogic>> {
18
+ /**
19
+ * @deprecated Use `ActorStatus` instead.
20
+ */
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>> {
19
23
  logic: TLogic;
20
24
  /**
21
- * The current state of the interpreted logic.
25
+ * The current internal state of the actor.
22
26
  */
23
27
  private _state;
24
28
  /**
25
29
  * The clock that is responsible for setting and clearing timeouts, such as delayed events and transitions.
26
30
  */
27
31
  clock: Clock;
28
- options: Readonly<InterpreterOptions<TLogic>>;
32
+ options: Readonly<ActorOptions<TLogic>>;
29
33
  /**
30
34
  * The unique identifier for this actor relative to its parent.
31
35
  */
@@ -50,32 +54,32 @@ export declare class Interpreter<TLogic extends AnyActorLogic, TEvent extends Ev
50
54
  private _doneEvent?;
51
55
  src?: string;
52
56
  /**
53
- * Creates a new Interpreter instance (i.e., service) for the given logic with the provided options, if any.
57
+ * Creates a new actor instance for the given logic with the provided options, if any.
54
58
  *
55
- * @param logic The logic to be interpreted
56
- * @param options Interpreter options
59
+ * @param logic The logic to create an actor from
60
+ * @param options Actor options
57
61
  */
58
- constructor(logic: TLogic, options?: InterpreterOptions<TLogic>);
62
+ constructor(logic: TLogic, options?: ActorOptions<TLogic>);
59
63
  private _initState;
60
64
  private _deferred;
61
65
  private update;
62
66
  subscribe(observer: Observer<SnapshotFrom<TLogic>>): Subscription;
63
67
  subscribe(nextListener?: (state: SnapshotFrom<TLogic>) => void, errorListener?: (error: any) => void, completeListener?: () => void): Subscription;
64
68
  /**
65
- * Starts the interpreter from the initial state
69
+ * Starts the Actor from the initial state
66
70
  */
67
71
  start(): this;
68
72
  private _process;
69
73
  private _stop;
70
74
  /**
71
- * Stops the interpreter and unsubscribe all listeners.
75
+ * Stops the Actor and unsubscribe all listeners.
72
76
  */
73
77
  stop(): this;
74
78
  private _complete;
75
79
  private _error;
76
80
  private _stopProcedure;
77
81
  /**
78
- * Sends an event to the running interpreter to trigger a transition.
82
+ * Sends an event to the running Actor to trigger a transition.
79
83
  *
80
84
  * @param event The event to send
81
85
  */
@@ -95,11 +99,21 @@ export declare class Interpreter<TLogic extends AnyActorLogic, TEvent extends Ev
95
99
  [Symbol.observable](): InteropSubscribable<SnapshotFrom<TLogic>>;
96
100
  getSnapshot(): SnapshotFrom<TLogic>;
97
101
  }
102
+ /**
103
+ * Creates a new `ActorRef` instance for the given machine with the provided options, if any.
104
+ *
105
+ * @param machine The machine to create an actor from
106
+ * @param options `ActorRef` options
107
+ */
108
+ export declare function createActor<TMachine extends AnyStateMachine>(machine: AreAllImplementationsAssumedToBeProvided<TMachine['__TResolvedTypesMeta']> extends true ? TMachine : MissingImplementationsError<TMachine['__TResolvedTypesMeta']>, options?: ActorOptions<TMachine>): Actor<TMachine>;
109
+ export declare function createActor<TLogic extends AnyActorLogic>(logic: TLogic, options?: ActorOptions<TLogic>): Actor<TLogic>;
98
110
  /**
99
111
  * Creates a new Interpreter instance for the given machine with the provided options, if any.
100
112
  *
101
- * @param machine The machine to interpret
102
- * @param options Interpreter options
113
+ * @deprecated Use `createActor` instead
114
+ */
115
+ export declare const interpret: typeof createActor;
116
+ /**
117
+ * @deprecated Use `Actor` instead.
103
118
  */
104
- export declare function interpret<TMachine extends AnyStateMachine>(machine: AreAllImplementationsAssumedToBeProvided<TMachine['__TResolvedTypesMeta']> extends true ? TMachine : MissingImplementationsError<TMachine['__TResolvedTypesMeta']>, options?: InterpreterOptions<TMachine>): InterpreterFrom<TMachine>;
105
- export declare function interpret<TLogic extends AnyActorLogic>(logic: TLogic, options?: InterpreterOptions<TLogic>): Interpreter<TLogic>;
119
+ export type Interpreter = typeof Actor;
@@ -1,9 +1,21 @@
1
1
  import type { StateNode } from "./StateNode.js";
2
2
  import type { State } from "./State.js";
3
- import type { ActorStatus, Clock, Interpreter } from "./interpreter.js";
3
+ import type { ActorStatus, Clock, Actor } from "./interpreter.js";
4
4
  import type { StateMachine } from "./StateMachine.js";
5
5
  import { TypegenDisabled, ResolveTypegenMeta, TypegenConstraint, MarkAllImplementationsAsProvided, AreAllImplementationsAssumedToBeProvided } from "./typegenTypes.js";
6
6
  import { PromiseActorLogic } from "./actors/promise.js";
7
+ /**
8
+ * `T | unknown` reduces to `unknown` and that can be problematic when it comes to contextual typing.
9
+ * It especially is a problem when the union has a function member, like here:
10
+ *
11
+ * ```ts
12
+ * declare function test(cbOrVal: ((arg: number) => unknown) | unknown): void;
13
+ * test((arg) => {}) // oops, implicit any
14
+ * ```
15
+ *
16
+ * This type can be used to avoid this problem. This union represents the same value space as `unknown`.
17
+ */
18
+ export type NonReducibleUnknown = {} | null | undefined;
7
19
  export type AnyFunction = (...args: any[]) => any;
8
20
  type ReturnTypeOrValue<T> = T extends AnyFunction ? ReturnType<T> : T;
9
21
  export type IsNever<T> = [T] extends [never] ? true : false;
@@ -55,7 +67,7 @@ export type MachineContext = Record<string, any>;
55
67
  export interface ActionArgs<TContext extends MachineContext, TEvent extends EventObject, TAction extends ParameterizedObject = ParameterizedObject> extends UnifiedArg<TContext, TEvent> {
56
68
  action: TAction;
57
69
  }
58
- export type InputFrom<T extends AnyActorLogic> = T extends ActorLogic<infer _TEvent, infer _TSnapshot, infer _TInternalState, infer _TPersisted, infer _TSystem, infer TInput> ? TInput : never;
70
+ export type InputFrom<T extends AnyActorLogic> = T extends StateMachine<infer _TContext, infer _TEvent, infer _TActions, infer _TActors, infer TInput, infer _TResolvedTypesMeta> ? TInput : T extends ActorLogic<infer _TEvent, infer _TSnapshot, infer _TInternalState, infer _TPersisted, infer _TSystem, infer TInput> ? TInput : never;
59
71
  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;
60
72
  export type Spawner = <T extends AnyActorLogic | string>(// TODO: read string from machine logic keys
61
73
  logic: T, options?: Partial<{
@@ -157,7 +169,7 @@ export interface InvokeDefinition<TContext extends MachineContext, TEvent extend
157
169
  * The source of the actor logic to be invoked
158
170
  */
159
171
  src: string;
160
- input?: Mapper<TContext, TEvent, any> | any;
172
+ input?: Mapper<TContext, TEvent, NonReducibleUnknown> | NonReducibleUnknown;
161
173
  /**
162
174
  * The transition to take upon the invoked child machine reaching its final top-level state.
163
175
  */
@@ -243,7 +255,7 @@ export type InvokeConfig<TContext extends MachineContext, TEvent extends EventOb
243
255
  * The source of the machine to be invoked, or the machine itself.
244
256
  */
245
257
  src: AnyActorLogic | string;
246
- input?: Mapper<TContext, TEvent, any> | any;
258
+ input?: Mapper<TContext, TEvent, NonReducibleUnknown> | NonReducibleUnknown;
247
259
  /**
248
260
  * The transition to take upon the invoked child machine reaching its final top-level state.
249
261
  */
@@ -328,7 +340,7 @@ export interface StateNodeConfig<TContext extends MachineContext, TEvent extends
328
340
  * The output data will be evaluated with the current `context` and placed on the `.data` property
329
341
  * of the event.
330
342
  */
331
- output?: Mapper<TContext, TEvent, any> | PropertyMapper<TContext, TEvent, any>;
343
+ output?: Mapper<TContext, TEvent, any> | NonReducibleUnknown;
332
344
  /**
333
345
  * The unique ID of the state node, which can be referenced as a transition target via the
334
346
  * `#id` syntax.
@@ -375,7 +387,7 @@ export interface StateMachineDefinition<TContext extends MachineContext, TEvent
375
387
  export type AnyStateNode = StateNode<any, any>;
376
388
  export type AnyStateNodeDefinition = StateNodeDefinition<any, any>;
377
389
  export type AnyState = State<any, any, any, any>;
378
- export type AnyStateMachine = StateMachine<any, any, any, any, any>;
390
+ export type AnyStateMachine = StateMachine<any, any, any, any, any, any>;
379
391
  export type AnyStateConfig = StateConfig<any, AnyEventObject>;
380
392
  export interface AtomicStateNodeConfig<TContext extends MachineContext, TEvent extends EventObject> extends StateNodeConfig<TContext, TEvent, TODO, TODO> {
381
393
  initial?: undefined;
@@ -393,7 +405,7 @@ export interface FinalStateNodeConfig<TContext extends MachineContext, TEvent ex
393
405
  * The data to be sent with the "done.state.<id>" event. The data can be
394
406
  * static or dynamic (based on assigners).
395
407
  */
396
- output?: Mapper<TContext, TEvent, any> | PropertyMapper<TContext, TEvent, any>;
408
+ output?: Mapper<TContext, TEvent, any>;
397
409
  }
398
410
  export type SimpleOrStateNodeConfig<TContext extends MachineContext, TEvent extends EventObject> = AtomicStateNodeConfig<TContext, TEvent> | StateNodeConfig<TContext, TEvent, TODO, TODO>;
399
411
  export type ActionFunctionMap<TContext extends MachineContext, TEvent extends EventObject, TAction extends ParameterizedObject = ParameterizedObject> = {
@@ -447,12 +459,12 @@ type GenerateGuardsImplementationsPart<TContext extends MachineContext, TResolve
447
459
  }>;
448
460
  export type InternalMachineImplementations<TContext extends MachineContext, TEvent extends EventObject, _TAction extends ParameterizedObject, TActor extends ProvidedActor, TResolvedTypesMeta, TRequireMissingImplementations extends boolean = false, TMissingImplementations = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'missingImplementations'>> = Compute<GenerateActionsImplementationsPart<TContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> & GenerateActorsImplementationsPart<TContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> & GenerateDelaysImplementationsPart<TContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> & GenerateGuardsImplementationsPart<TContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations>>;
449
461
  export type MachineImplementations<TContext extends MachineContext, TEvent extends EventObject, TAction extends ParameterizedObject = ParameterizedObject, TActor extends ProvidedActor = ProvidedActor, TTypesMeta extends TypegenConstraint = TypegenDisabled> = InternalMachineImplementations<TContext, TEvent, TAction, TActor, ResolveTypegenMeta<TTypesMeta, TEvent, TAction, TActor>>;
450
- type InitialContext<TContext extends MachineContext> = TContext | ContextFactory<TContext>;
451
- export type ContextFactory<TContext extends MachineContext> = ({ spawn, input }: {
462
+ type InitialContext<TContext extends MachineContext, TInput> = TContext | ContextFactory<TContext, TInput>;
463
+ export type ContextFactory<TContext extends MachineContext, TInput> = ({ spawn, input }: {
452
464
  spawn: Spawner;
453
- input: any;
465
+ input: TInput;
454
466
  }) => TContext;
455
- export type MachineConfig<TContext extends MachineContext, TEvent extends EventObject, TAction extends ParameterizedObject = ParameterizedObject, TActor extends ProvidedActor = ProvidedActor, TTypesMeta = TypegenDisabled> = (StateNodeConfig<NoInfer<TContext>, NoInfer<TEvent>, NoInfer<TAction>, NoInfer<TActor>> & {
467
+ export type MachineConfig<TContext extends MachineContext, TEvent extends EventObject, TAction extends ParameterizedObject = ParameterizedObject, TActor extends ProvidedActor = ProvidedActor, TInput = any, TTypesMeta = TypegenDisabled> = (StateNodeConfig<NoInfer<TContext>, NoInfer<TEvent>, NoInfer<TAction>, NoInfer<TActor>> & {
456
468
  /**
457
469
  * The initial context (extended state)
458
470
  */
@@ -460,18 +472,18 @@ export type MachineConfig<TContext extends MachineContext, TEvent extends EventO
460
472
  * The machine's own version.
461
473
  */
462
474
  version?: string;
463
- types?: MachineTypes<TContext, TEvent, TActor, TTypesMeta>;
475
+ types?: MachineTypes<TContext, TEvent, TActor, TInput, TTypesMeta>;
464
476
  }) & (Equals<TContext, MachineContext> extends true ? {
465
- context?: InitialContext<LowInfer<TContext>>;
477
+ context?: InitialContext<LowInfer<TContext>, TInput>;
466
478
  } : {
467
- context: InitialContext<LowInfer<TContext>>;
479
+ context: InitialContext<LowInfer<TContext>, TInput>;
468
480
  });
469
481
  export interface ProvidedActor {
470
482
  src: string;
471
483
  logic: AnyActorLogic;
472
484
  id?: string;
473
485
  }
474
- export interface MachineTypes<TContext extends MachineContext, TEvent extends EventObject, TActor extends ProvidedActor, TTypesMeta = TypegenDisabled> {
486
+ export interface MachineTypes<TContext extends MachineContext, TEvent extends EventObject, TActor extends ProvidedActor, TInput, TTypesMeta = TypegenDisabled> {
475
487
  context?: TContext;
476
488
  actions?: {
477
489
  type: string;
@@ -484,6 +496,7 @@ export interface MachineTypes<TContext extends MachineContext, TEvent extends Ev
484
496
  [key: string]: any;
485
497
  };
486
498
  typegen?: TTypesMeta;
499
+ input?: TInput;
487
500
  }
488
501
  export interface HistoryStateNode<TContext extends MachineContext> extends StateNode<TContext> {
489
502
  history: 'shallow' | 'deep';
@@ -551,15 +564,13 @@ export type PartialAssigner<TContext extends MachineContext, TExpressionEvent ex
551
564
  export type PropertyAssigner<TContext extends MachineContext, TExpressionEvent extends EventObject> = {
552
565
  [K in keyof TContext]?: PartialAssigner<TContext, TExpressionEvent, K> | TContext[K];
553
566
  };
554
- export type Mapper<TContext extends MachineContext, TEvent extends EventObject, TParams extends {}> = (args: {
567
+ export type Mapper<TContext extends MachineContext, TEvent extends EventObject, TParams> = (args: {
555
568
  context: TContext;
556
569
  event: TEvent;
570
+ self: ActorRef<TEvent>;
557
571
  }) => TParams;
558
572
  export type PropertyMapper<TContext extends MachineContext, TEvent extends EventObject, TParams extends {}> = {
559
- [K in keyof TParams]?: ((args: {
560
- context: TContext;
561
- event: TEvent;
562
- }) => TParams[K]) | TParams[K];
573
+ [K in keyof TParams]?: Mapper<TContext, TEvent, TParams[K]> | TParams[K];
563
574
  };
564
575
  export interface TransitionDefinition<TContext extends MachineContext, TEvent extends EventObject> extends Omit<TransitionConfig<TContext, TEvent>, 'target'> {
565
576
  target: Array<StateNode<TContext, TEvent>> | undefined;
@@ -629,11 +640,12 @@ export interface StateConfig<TContext extends MachineContext, TEvent extends Eve
629
640
  children: Record<string, ActorRef<any>>;
630
641
  done?: boolean;
631
642
  output?: any;
643
+ error?: unknown;
632
644
  tags?: Set<string>;
633
- machine?: StateMachine<TContext, TEvent, any, any, any>;
645
+ machine?: StateMachine<TContext, TEvent, any, any, any, any>;
634
646
  _internalQueue?: Array<TEvent>;
635
647
  }
636
- export interface InterpreterOptions<TLogic extends AnyActorLogic> {
648
+ export interface ActorOptions<TLogic extends AnyActorLogic> {
637
649
  /**
638
650
  * Whether state actions should be executed immediately upon transition. Defaults to `true`.
639
651
  */
@@ -674,7 +686,11 @@ export interface InterpreterOptions<TLogic extends AnyActorLogic> {
674
686
  */
675
687
  src?: string;
676
688
  }
677
- export type AnyInterpreter = Interpreter<any, any>;
689
+ export type AnyActor = Actor<any, any>;
690
+ /**
691
+ * @deprecated Use `AnyActor` instead.
692
+ */
693
+ export type AnyInterpreter = AnyActor;
678
694
  export type Observer<T> = {
679
695
  next?: (value: T) => void;
680
696
  error?: (err: any) => void;
@@ -719,12 +735,15 @@ export interface ActorRef<TEvent extends EventObject, TSnapshot = any> extends S
719
735
  }
720
736
  export type AnyActorRef = ActorRef<any, any>;
721
737
  export type ActorLogicFrom<T> = ReturnTypeOrValue<T> extends infer R ? R extends StateMachine<any, any, any, any, any> ? R : R extends Promise<infer U> ? PromiseActorLogic<U> : never : never;
722
- export type ActorRefFrom<T> = ReturnTypeOrValue<T> extends infer R ? R extends StateMachine<infer TContext, infer TEvent, any, any, infer TResolvedTypesMeta> ? ActorRef<TEvent, State<TContext, TEvent, TODO, AreAllImplementationsAssumedToBeProvided<TResolvedTypesMeta> extends false ? MarkAllImplementationsAsProvided<TResolvedTypesMeta> : TResolvedTypesMeta>> : R extends Promise<infer U> ? ActorRefFrom<PromiseActorLogic<U>> : R extends ActorLogic<infer TEvent, infer TSnapshot, infer _, infer __, infer ___, infer ____, infer _____> ? ActorRef<TEvent, TSnapshot> : never : never;
723
- export type DevToolsAdapter = (service: AnyInterpreter) => void;
724
- export type InterpreterFrom<T extends AnyStateMachine | ((...args: any[]) => AnyStateMachine)> = ReturnTypeOrValue<T> extends StateMachine<infer TContext, infer TEvent, infer TAction, infer TActor, infer TResolvedTypesMeta> ? Interpreter<ActorLogic<TEvent, State<TContext, TEvent, TActor, TResolvedTypesMeta>, State<TContext, TEvent, TActor, TResolvedTypesMeta>, PersistedMachineState<State<TContext, TEvent, TActor, TResolvedTypesMeta>>>> : never;
725
- export type MachineImplementationsFrom<T extends AnyStateMachine | ((...args: any[]) => AnyStateMachine), TRequireMissingImplementations extends boolean = false> = ReturnTypeOrValue<T> extends StateMachine<infer TContext, infer TEvent, infer TAction, infer TActor, infer TResolvedTypesMeta> ? InternalMachineImplementations<TContext, TEvent, TAction, TActor, TResolvedTypesMeta, TRequireMissingImplementations> : never;
726
- export type __ResolvedTypesMetaFrom<T> = T extends StateMachine<any, any, any, infer TResolvedTypesMeta> ? TResolvedTypesMeta : never;
727
- export type EventOfMachine<TMachine extends AnyStateMachine> = TMachine extends StateMachine<any, infer E, any, any, any> ? E : never;
738
+ export type ActorRefFrom<T> = ReturnTypeOrValue<T> extends infer R ? R extends StateMachine<infer TContext, infer TEvent, any, any, any, infer TResolvedTypesMeta> ? ActorRef<TEvent, State<TContext, TEvent, TODO, AreAllImplementationsAssumedToBeProvided<TResolvedTypesMeta> extends false ? MarkAllImplementationsAsProvided<TResolvedTypesMeta> : TResolvedTypesMeta>> : R extends Promise<infer U> ? ActorRefFrom<PromiseActorLogic<U>> : R extends ActorLogic<infer TEvent, infer TSnapshot, infer _, infer __, infer ___, infer ____, infer _____> ? ActorRef<TEvent, TSnapshot> : never : never;
739
+ export type DevToolsAdapter = (service: AnyActor) => void;
740
+ /**
741
+ * @deprecated Use `Actor<T>` instead.
742
+ */
743
+ export type InterpreterFrom<T extends AnyStateMachine | ((...args: any[]) => AnyStateMachine)> = ReturnTypeOrValue<T> extends StateMachine<infer TContext, infer TEvent, infer _TAction, infer TActor, infer TInput, infer TResolvedTypesMeta> ? Actor<ActorLogic<TEvent, State<TContext, TEvent, TActor, TResolvedTypesMeta>, State<TContext, TEvent, TActor, TResolvedTypesMeta>, PersistedMachineState<State<TContext, TEvent, TActor, TResolvedTypesMeta>>, ActorSystem<any>, TInput>> : never;
744
+ export type MachineImplementationsFrom<T extends AnyStateMachine | ((...args: any[]) => AnyStateMachine), TRequireMissingImplementations extends boolean = false> = ReturnTypeOrValue<T> extends StateMachine<infer TContext, infer TEvent, infer TAction, infer TActor, infer _TInput, infer TResolvedTypesMeta> ? InternalMachineImplementations<TContext, TEvent, TAction, TActor, TResolvedTypesMeta, TRequireMissingImplementations> : never;
745
+ export type __ResolvedTypesMetaFrom<T> = T extends StateMachine<any, any, any, any, any, infer TResolvedTypesMeta> ? TResolvedTypesMeta : never;
746
+ export type EventOfMachine<TMachine extends AnyStateMachine> = TMachine extends StateMachine<any, infer E, any, any, any, any> ? E : never;
728
747
  export interface ActorContext<TEvent extends EventObject, TSnapshot, TSystem extends ActorSystem<any> = ActorSystem<any>> {
729
748
  self: ActorRef<TEvent, TSnapshot>;
730
749
  id: string;
@@ -763,13 +782,13 @@ any, // persisted state
763
782
  any, // system
764
783
  any, // input
765
784
  any>;
766
- export type SnapshotFrom<T> = ReturnTypeOrValue<T> extends infer R ? R extends ActorRef<infer _, infer TSnapshot> ? TSnapshot : R extends Interpreter<infer TLogic> ? SnapshotFrom<TLogic> : R extends StateMachine<infer _, infer __, infer ___, infer ____, infer _____> ? StateFrom<R> : R extends ActorLogic<infer _, infer TSnapshot, infer __, infer ___, infer ____> ? TSnapshot : R extends ActorContext<infer _, infer TSnapshot, infer __> ? TSnapshot : never : never;
785
+ export type SnapshotFrom<T> = ReturnTypeOrValue<T> extends infer R ? R extends ActorRef<infer _, infer TSnapshot> ? TSnapshot : R extends Actor<infer TLogic> ? SnapshotFrom<TLogic> : R extends StateMachine<infer _, infer __, infer ___, infer ____, infer _____, infer ______> ? StateFrom<R> : R extends ActorLogic<infer _, infer TSnapshot, infer __, infer ___, infer ____> ? TSnapshot : R extends ActorContext<infer _, infer TSnapshot, infer __> ? TSnapshot : never : never;
767
786
  export type EventFromLogic<TLogic extends ActorLogic<any, any>> = TLogic extends ActorLogic<infer TEvent, infer _, infer __, infer ___, infer ____> ? TEvent : never;
768
787
  export type PersistedStateFrom<TLogic extends ActorLogic<any, any>> = TLogic extends ActorLogic<infer _TEvent, infer _TSnapshot, infer _TInternalState, infer TPersisted> ? TPersisted : never;
769
788
  export type InternalStateFrom<TLogic extends ActorLogic<any, any>> = TLogic extends ActorLogic<infer _TEvent, infer _TSnapshot, infer TInternalState, infer _TPersisted> ? TInternalState : never;
770
- type ResolveEventType<T> = ReturnTypeOrValue<T> extends infer R ? R extends StateMachine<infer _, infer TEvent, infer __, infer ___, infer ____> ? TEvent : R extends State<infer _TContext, infer TEvent, infer _TAction, infer _TActor> ? TEvent : R extends ActorRef<infer TEvent, infer _> ? TEvent : never : never;
789
+ type ResolveEventType<T> = ReturnTypeOrValue<T> extends infer R ? R extends StateMachine<infer _, infer TEvent, infer __, infer ___, infer ____, infer _____> ? TEvent : R extends State<infer _TContext, infer TEvent, infer _TAction, infer _TActor> ? TEvent : R extends ActorRef<infer TEvent, infer _> ? TEvent : never : never;
771
790
  export type EventFrom<T, K extends Prop<TEvent, 'type'> = never, TEvent extends EventObject = ResolveEventType<T>> = IsNever<K> extends true ? TEvent : ExtractEvent<TEvent, K>;
772
- export type ContextFrom<T> = ReturnTypeOrValue<T> extends infer R ? R extends StateMachine<infer TContext, infer _, infer __, infer ___, infer ____> ? TContext : R extends State<infer TContext, infer _TEvent, infer _TAction, infer _TActor> ? TContext : R extends Interpreter<infer TActorLogic> ? TActorLogic extends StateMachine<infer TContext, infer _> ? TContext : never : never : never;
791
+ export type ContextFrom<T> = ReturnTypeOrValue<T> extends infer R ? R extends StateMachine<infer TContext, infer _, infer __, infer ___, infer ____, infer _____> ? TContext : R extends State<infer TContext, infer _TEvent, infer _TAction, infer _TActor> ? TContext : R extends Actor<infer TActorLogic> ? TActorLogic extends StateMachine<infer TContext, infer _TEvent, infer _TActions, infer _TActors, infer _TInput, infer _TTypesMeta> ? TContext : never : never : never;
773
792
  export type InferEvent<E extends EventObject> = {
774
793
  [T in E['type']]: {
775
794
  type: T;
@@ -791,7 +810,7 @@ export interface ActorSystem<T extends ActorSystemInfo> {
791
810
  get: <K extends keyof T['actors']>(key: K) => T['actors'][K] | undefined;
792
811
  }
793
812
  export type AnyActorSystem = ActorSystem<any>;
794
- export type PersistedMachineState<TState extends AnyState> = Pick<TState, 'value' | 'output' | 'context' | 'done' | 'historyValue'> & {
813
+ export type PersistedMachineState<TState extends AnyState> = Pick<TState, 'value' | 'output' | 'error' | 'context' | 'done' | 'historyValue'> & {
795
814
  children: {
796
815
  [K in keyof TState['children']]: {
797
816
  state: any;
@@ -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, EventType, InvokeConfig, MachineContext, Mapper, Observer, PropertyMapper, ErrorEvent, SingleOrArray, StateLike, StateValue, Subscribable, TransitionConfig, TransitionConfigTarget, TODO } from "./types.js";
3
+ import type { ActorLogic, AnyEventObject, EventObject, EventType, InvokeConfig, MachineContext, Mapper, Observer, ErrorEvent, SingleOrArray, StateLike, StateValue, Subscribable, TransitionConfig, TransitionConfigTarget, TODO, AnyActorRef } 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: T[] | T): T[];
28
28
  export declare function toArray<T>(value: T[] | T | undefined): T[];
29
- export declare function mapContext<TContext extends MachineContext, TEvent extends EventObject>(mapper: Mapper<TContext, TEvent, any> | PropertyMapper<TContext, TEvent, any>, context: TContext, event: TEvent): any;
29
+ export declare function mapContext<TContext extends MachineContext, TEvent extends EventObject>(mapper: Mapper<TContext, TEvent, any>, context: TContext, event: TEvent, self: AnyActorRef): any;
30
30
  export declare function isBuiltInEvent(eventType: EventType): 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>;
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var actors_dist_xstateActors = require('./actions-069d9805.cjs.js');
5
+ var actors_dist_xstateActors = require('./actions-8f2e997e.cjs.js');
6
6
  require('../dev/dist/xstate-dev.cjs.js');
7
7
 
8
8
  const EMPTY_OBJECT = {};
@@ -365,6 +365,7 @@ class StateMachine {
365
365
  this.__TAction = void 0;
366
366
  this.__TActor = void 0;
367
367
  this.__TResolvedTypesMeta = void 0;
368
+ this.__TInput = void 0;
368
369
  this.id = config.id || '(machine)';
369
370
  this.implementations = {
370
371
  actors: implementations?.actors ?? {},
@@ -452,7 +453,9 @@ class StateMachine {
452
453
  transition(state, event, actorCtx) {
453
454
  // TODO: handle error events in a better way
454
455
  if (actors_dist_xstateActors.isErrorEvent(event) && !state.nextEvents.some(nextEvent => nextEvent === event.type)) {
455
- throw event.data;
456
+ return actors_dist_xstateActors.cloneState(state, {
457
+ error: event.data
458
+ });
456
459
  }
457
460
  const {
458
461
  state: nextState
@@ -523,15 +526,10 @@ class StateMachine {
523
526
  } = actors_dist_xstateActors.macrostep(nextState, initEvent, actorCtx);
524
527
  return macroState;
525
528
  }
526
- start(state, actorCtx) {
529
+ start(state) {
527
530
  Object.values(state.children).forEach(child => {
528
531
  if (child.status === 0) {
529
- try {
530
- child.start?.();
531
- } catch (err) {
532
- // TODO: unify error handling when child starts
533
- actorCtx.self.send(actors_dist_xstateActors.error(child.id, err));
534
- }
532
+ child.start?.();
535
533
  }
536
534
  });
537
535
  }
@@ -558,7 +556,10 @@ class StateMachine {
558
556
  return stateConfig instanceof actors_dist_xstateActors.State ? stateConfig : new actors_dist_xstateActors.State(stateConfig, this);
559
557
  }
560
558
  getStatus(state) {
561
- return state.done ? {
559
+ return state.error ? {
560
+ status: 'error',
561
+ data: state.error
562
+ } : state.done ? {
562
563
  status: 'done',
563
564
  data: state.output
564
565
  } : {
@@ -576,7 +577,7 @@ class StateMachine {
576
577
  return;
577
578
  }
578
579
  const actorState = logic.restoreState?.(childState, _actorCtx);
579
- const actorRef = actors_dist_xstateActors.interpret(logic, {
580
+ const actorRef = actors_dist_xstateActors.createActor(logic, {
580
581
  id: actorId,
581
582
  state: actorState
582
583
  });
@@ -600,7 +601,7 @@ class StateMachine {
600
601
  }
601
602
  const referenced = actors_dist_xstateActors.resolveReferencedActor(this.implementations.actors[src]);
602
603
  if (referenced) {
603
- const actorRef = actors_dist_xstateActors.interpret(referenced.src, {
604
+ const actorRef = actors_dist_xstateActors.createActor(referenced.src, {
604
605
  id,
605
606
  parent: _actorCtx?.self,
606
607
  input: 'input' in invokeConfig ? invokeConfig.input : referenced.input
@@ -750,15 +751,17 @@ function waitFor(actorRef, predicate, options) {
750
751
  });
751
752
  }
752
753
 
754
+ exports.Actor = actors_dist_xstateActors.Actor;
755
+ exports.ActorStatus = actors_dist_xstateActors.ActorStatus;
753
756
  exports.ConstantPrefix = actors_dist_xstateActors.ConstantPrefix;
754
- exports.Interpreter = actors_dist_xstateActors.Interpreter;
755
- exports.InterpreterStatus = actors_dist_xstateActors.ActorStatus;
757
+ exports.InterpreterStatus = actors_dist_xstateActors.InterpreterStatus;
756
758
  exports.SpecialTargets = actors_dist_xstateActors.SpecialTargets;
757
759
  exports.State = actors_dist_xstateActors.State;
758
760
  exports.and = actors_dist_xstateActors.and;
759
761
  exports.assign = actors_dist_xstateActors.assign;
760
762
  exports.cancel = actors_dist_xstateActors.cancel;
761
763
  exports.choose = actors_dist_xstateActors.choose;
764
+ exports.createActor = actors_dist_xstateActors.createActor;
762
765
  exports.doneInvoke = actors_dist_xstateActors.doneInvoke;
763
766
  exports.forwardTo = actors_dist_xstateActors.forwardTo;
764
767
  exports.fromCallback = actors_dist_xstateActors.fromCallback;
@@ -1,6 +1,7 @@
1
1
  export {
2
+ Actor,
3
+ ActorStatus,
2
4
  ConstantPrefix,
3
- Interpreter,
4
5
  InterpreterStatus,
5
6
  SimulatedClock,
6
7
  SpecialTargets,
@@ -11,6 +12,7 @@ export {
11
12
  assign,
12
13
  cancel,
13
14
  choose,
15
+ createActor,
14
16
  createMachine,
15
17
  doneInvoke,
16
18
  forwardTo,