xstate 5.0.0-beta.45 → 5.0.0-beta.46

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 (42) hide show
  1. package/actions/dist/xstate-actions.cjs.js +2 -2
  2. package/actions/dist/xstate-actions.development.cjs.js +2 -2
  3. package/actions/dist/xstate-actions.development.esm.js +2 -2
  4. package/actions/dist/xstate-actions.esm.js +2 -2
  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 +42 -5
  8. package/actors/dist/xstate-actors.development.cjs.js +42 -5
  9. package/actors/dist/xstate-actors.development.esm.js +42 -5
  10. package/actors/dist/xstate-actors.esm.js +42 -5
  11. package/actors/dist/xstate-actors.umd.min.js.map +1 -1
  12. package/dist/declarations/src/State.d.ts +16 -26
  13. package/dist/declarations/src/StateMachine.d.ts +11 -29
  14. package/dist/declarations/src/StateNode.d.ts +8 -6
  15. package/dist/declarations/src/actors/observable.d.ts +41 -4
  16. package/dist/declarations/src/createMachine.d.ts +3 -3
  17. package/dist/declarations/src/index.d.ts +1 -1
  18. package/dist/declarations/src/setup.d.ts +11 -8
  19. package/dist/declarations/src/types.d.ts +41 -15
  20. package/dist/declarations/src/utils.d.ts +2 -1
  21. package/dist/{raise-2b5a4e4c.esm.js → raise-1682abb7.esm.js} +23 -36
  22. package/dist/{raise-fabffc3d.cjs.js → raise-a1d3d7e9.cjs.js} +23 -35
  23. package/dist/{raise-b3fb3c65.development.cjs.js → raise-a9e7e31c.development.cjs.js} +23 -35
  24. package/dist/{raise-90139fbc.development.esm.js → raise-fa23c2b9.development.esm.js} +23 -36
  25. package/dist/{send-c124176f.cjs.js → send-2fa3a204.cjs.js} +22 -1
  26. package/dist/{send-d0bc7eed.development.cjs.js → send-5b256a89.development.cjs.js} +22 -1
  27. package/dist/{send-24cc8018.development.esm.js → send-9acdf858.development.esm.js} +22 -1
  28. package/dist/{send-8e7e41e7.esm.js → send-a237e4e8.esm.js} +22 -1
  29. package/dist/xstate.cjs.js +59 -81
  30. package/dist/xstate.cjs.mjs +1 -0
  31. package/dist/xstate.development.cjs.js +59 -81
  32. package/dist/xstate.development.cjs.mjs +1 -0
  33. package/dist/xstate.development.esm.js +60 -83
  34. package/dist/xstate.esm.js +60 -83
  35. package/dist/xstate.umd.min.js +1 -1
  36. package/dist/xstate.umd.min.js.map +1 -1
  37. package/guards/dist/xstate-guards.cjs.js +1 -1
  38. package/guards/dist/xstate-guards.development.cjs.js +1 -1
  39. package/guards/dist/xstate-guards.development.esm.js +1 -1
  40. package/guards/dist/xstate-guards.esm.js +1 -1
  41. package/guards/dist/xstate-guards.umd.min.js.map +1 -1
  42. package/package.json +1 -1
@@ -64,13 +64,15 @@ export declare class StateNode<TContext extends MachineContext = MachineContext,
64
64
  /**
65
65
  * The root machine node.
66
66
  */
67
- machine: StateMachine<TContext, TEvent, any, // actors
67
+ machine: StateMachine<TContext, TEvent, any, // children
68
+ any, // actor
69
+ any, // action
70
+ any, // guard
71
+ any, // delay
72
+ any, // tag
68
73
  any, // input
69
- TODO, // output
70
- TODO, // guards
71
- TODO, // delays
72
- TODO, // tags
73
- TODO>;
74
+ any, // output
75
+ any>;
74
76
  /**
75
77
  * The meta data associated with this state node, which will be returned in State instances.
76
78
  */
@@ -22,6 +22,7 @@ export type ObservableActorRef<TContext> = ActorRefFrom<ObservableActorLogic<TCo
22
22
  * - `input` - Data that was provided to the observable actor
23
23
  * - `self` - The parent actor
24
24
  * - `system` - The actor system to which the observable actor belongs
25
+ *
25
26
  * It should return a {@link Subscribable}, which is compatible with an RxJS Observable, although RxJS is not required to create them.
26
27
  *
27
28
  * @example
@@ -54,12 +55,48 @@ export declare function fromObservable<TContext, TInput>(observableCreator: ({ i
54
55
  self: ObservableActorRef<TContext>;
55
56
  }) => Subscribable<TContext>): ObservableActorLogic<TContext, TInput>;
56
57
  /**
57
- * Creates event observable logic that listens to an observable
58
- * that delivers event objects.
58
+ * Creates event observable logic that listens to an observable that delivers event objects.
59
+ *
60
+ * Event observable actor logic is described by an observable stream of {@link https://stately.ai/docs/transitions#event-objects | event objects}. Actors created from event observable logic (“event observable actors”) can:
61
+ *
62
+ * - Implicitly send events to its parent actor
63
+ * - Emit snapshots of its emitted event objects
64
+ *
65
+ * Sending events to event observable actors will have no effect.
59
66
  *
67
+ * @param lazyObservable A function that creates an observable that delivers event objects. It receives one argument, an object with the following properties:
68
+ *
69
+ * - `input` - Data that was provided to the event observable actor
70
+ * - `self` - The parent actor
71
+ * - `system` - The actor system to which the event observable actor belongs.
72
+ *
73
+ * It should return a {@link Subscribable}, which is compatible with an RxJS Observable, although RxJS is not required to create them.
60
74
  *
61
- * @param lazyObservable A function that creates an observable
62
- * @returns Event observable logic
75
+ * @example
76
+ * ```ts
77
+ * import {
78
+ * fromEventObservable,
79
+ * Subscribable,
80
+ * EventObject,
81
+ * createMachine,
82
+ * createActor
83
+ * } from 'xstate';
84
+ * import { fromEvent } from 'rxjs';
85
+ *
86
+ * const mouseClickLogic = fromEventObservable(() =>
87
+ * fromEvent(document.body, 'click') as Subscribable<EventObject>
88
+ * );
89
+ *
90
+ * const canvasMachine = createMachine({
91
+ * invoke: {
92
+ * // Will send mouse `click` events to the canvas actor
93
+ * src: mouseClickLogic,
94
+ * }
95
+ * });
96
+ *
97
+ * const canvasActor = createActor(canvasMachine);
98
+ * canvasActor.start();
99
+ * ```
63
100
  */
64
101
  export declare function fromEventObservable<T extends EventObject, TInput>(lazyObservable: ({ input, system }: {
65
102
  input: TInput;
@@ -1,5 +1,5 @@
1
- import { MachineConfig, MachineContext, InternalMachineImplementations, ParameterizedObject, ProvidedActor, NonReducibleUnknown, Prop, AnyEventObject } from "./types.js";
2
- import { TypegenConstraint, ResolveTypegenMeta, TypegenDisabled } from "./typegenTypes.js";
3
1
  import { StateMachine } from "./StateMachine.js";
2
+ import { ResolveTypegenMeta, TypegenConstraint, TypegenDisabled } from "./typegenTypes.js";
3
+ import { AnyActorRef, AnyEventObject, Cast, InternalMachineImplementations, MachineConfig, MachineContext, NonReducibleUnknown, ParameterizedObject, Prop, ProvidedActor, ToChildren } from "./types.js";
4
4
  export declare function createMachine<TContext extends MachineContext, TEvent extends AnyEventObject, // TODO: consider using a stricter `EventObject` here
5
- TActor extends ProvidedActor, TAction extends ParameterizedObject, TGuard extends ParameterizedObject, TDelay extends string, TTag extends string, TInput, TOutput extends NonReducibleUnknown, TTypesMeta extends TypegenConstraint = TypegenDisabled>(config: MachineConfig<TContext, TEvent, TActor, TAction, TGuard, TDelay, TTag, TInput, TOutput, TTypesMeta>, implementations?: InternalMachineImplementations<TContext, ResolveTypegenMeta<TTypesMeta, TEvent, TActor, TAction, TGuard, TDelay, TTag>>): StateMachine<TContext, TEvent, TActor, TAction, TGuard, TDelay, Prop<ResolveTypegenMeta<TTypesMeta, TEvent, TActor, TAction, TGuard, TDelay, TTag>['resolved'], 'tags'> & string, TInput, TOutput, ResolveTypegenMeta<TTypesMeta, TEvent, TActor, TAction, TGuard, TDelay, TTag>>;
5
+ TActor extends ProvidedActor, TAction extends ParameterizedObject, TGuard extends ParameterizedObject, TDelay extends string, TTag extends string, TInput, TOutput extends NonReducibleUnknown, TTypesMeta extends TypegenConstraint = TypegenDisabled>(config: MachineConfig<TContext, TEvent, TActor, TAction, TGuard, TDelay, TTag, TInput, TOutput, TTypesMeta>, implementations?: InternalMachineImplementations<TContext, ResolveTypegenMeta<TTypesMeta, TEvent, TActor, TAction, TGuard, TDelay, TTag>>): StateMachine<TContext, TEvent, Cast<ToChildren<TActor>, Record<string, AnyActorRef | undefined>>, TActor, TAction, TGuard, TDelay, Prop<ResolveTypegenMeta<TTypesMeta, TEvent, TActor, TAction, TGuard, TDelay, TTag>['resolved'], 'tags'> & string, TInput, TOutput, ResolveTypegenMeta<TTypesMeta, TEvent, TActor, TAction, TGuard, TDelay, TTag>>;
@@ -11,7 +11,7 @@ import { Actor, createActor, interpret, Interpreter } from "./interpreter.js";
11
11
  import { createMachine } from "./createMachine.js";
12
12
  export { type MachineSnapshot, isMachineSnapshot } from "./State.js";
13
13
  import { StateNode } from "./StateNode.js";
14
- export { matchesState, pathToStateValue, toObserver } from "./utils.js";
14
+ export { matchesState, pathToStateValue, toObserver, getAllOwnEventDescriptors as __unsafe_getAllOwnEventDescriptors } from "./utils.js";
15
15
  export { Actor, createActor, createMachine, interpret, StateNode, type Interpreter };
16
16
  export type { InspectedActorEvent, InspectedEventEvent, InspectedSnapshotEvent, InspectionEvent } from "./system.js";
17
17
  export { and, not, or, stateIn } from "./guards.js";
@@ -1,24 +1,27 @@
1
- import { ResolveTypegenMeta, StateMachine, TypegenDisabled } from "./index.js";
1
+ import { StateMachine } from "./StateMachine.js";
2
2
  import { GuardPredicate } from "./guards.js";
3
- import { AnyActorLogic, MachineContext, AnyEventObject, NonReducibleUnknown, MachineConfig, Values, ParameterizedObject, ActionFunction, SetupTypes, DelayConfig } from "./types.js";
3
+ import { ResolveTypegenMeta, TypegenDisabled } from "./typegenTypes.js";
4
+ import { ActionFunction, AnyActorLogic, AnyActorRef, AnyEventObject, Cast, DelayConfig, Invert, IsNever, MachineConfig, MachineContext, NonReducibleUnknown, ParameterizedObject, SetupTypes, ToChildren, Values } from "./types.js";
4
5
  type ToParameterizedObject<TParameterizedMap extends Record<string, ParameterizedObject['params'] | undefined>> = Values<{
5
6
  [K in keyof TParameterizedMap & string]: {
6
7
  type: K;
7
8
  params: TParameterizedMap[K];
8
9
  };
9
10
  }>;
10
- type ToProvidedActor<TActors extends Record<string, AnyActorLogic>> = Values<{
11
- [K in keyof TActors & string]: {
11
+ type DefaultToAnyActors<TActors extends Record<string, AnyActorLogic>> = IsNever<keyof TActors> extends true ? Record<string, AnyActorLogic> : TActors;
12
+ type ToProvidedActor<TChildrenMap extends Record<string, string>, TActors extends Record<Values<TChildrenMap>, AnyActorLogic>> = Values<{
13
+ [K in keyof DefaultToAnyActors<TActors> & string]: {
12
14
  src: K;
13
15
  logic: TActors[K];
16
+ id: IsNever<TChildrenMap> extends true ? string | undefined : K extends keyof Invert<TChildrenMap> ? Invert<TChildrenMap>[K] : string | undefined;
14
17
  };
15
18
  }>;
16
19
  export declare function setup<TContext extends MachineContext, TEvent extends AnyEventObject, // TODO: consider using a stricter `EventObject` here
17
- TActors extends Record<string, AnyActorLogic>, TActions extends Record<string, ParameterizedObject['params'] | undefined>, TGuards extends Record<string, ParameterizedObject['params'] | undefined>, TDelay extends string, TTag extends string, TInput, TOutput extends NonReducibleUnknown>({ actors, actions, guards, delays }: {
18
- types?: SetupTypes<TContext, TEvent, TTag, TInput, TOutput>;
20
+ TActors extends Record<Values<TChildrenMap>, AnyActorLogic>, TActions extends Record<string, ParameterizedObject['params'] | undefined>, TGuards extends Record<string, ParameterizedObject['params'] | undefined>, TDelay extends string, TTag extends string, TInput, TOutput extends NonReducibleUnknown, TChildrenMap extends Record<string, string> = never>({ actors, actions, guards, delays }: {
21
+ types?: SetupTypes<TContext, TEvent, TChildrenMap, TTag, TInput, TOutput>;
19
22
  actors?: TActors;
20
23
  actions?: {
21
- [K in keyof TActions]: ActionFunction<TContext, TEvent, TEvent, TActions[K], ToProvidedActor<TActors>, ToParameterizedObject<TActions>, ToParameterizedObject<TGuards>, TDelay>;
24
+ [K in keyof TActions]: ActionFunction<TContext, TEvent, TEvent, TActions[K], ToProvidedActor<TChildrenMap, TActors>, ToParameterizedObject<TActions>, ToParameterizedObject<TGuards>, TDelay>;
22
25
  };
23
26
  guards?: {
24
27
  [K in keyof TGuards]: GuardPredicate<TContext, TEvent, TGuards[K], ToParameterizedObject<TGuards>>;
@@ -27,6 +30,6 @@ TActors extends Record<string, AnyActorLogic>, TActions extends Record<string, P
27
30
  [K in TDelay]: DelayConfig<TContext, TEvent, ToParameterizedObject<TActions>['params'], TEvent>;
28
31
  };
29
32
  }): {
30
- createMachine: (config: MachineConfig<TContext, TEvent, ToProvidedActor<TActors>, ToParameterizedObject<TActions>, ToParameterizedObject<TGuards>, TDelay, TTag, TInput, TOutput, ResolveTypegenMeta<TypegenDisabled, TEvent, ToProvidedActor<TActors>, ToParameterizedObject<TActions>, ToParameterizedObject<TGuards>, TDelay, TTag>>) => StateMachine<TContext, TEvent, ToProvidedActor<TActors>, ToParameterizedObject<TActions>, ToParameterizedObject<TGuards>, TDelay, TTag, TInput, TOutput, ResolveTypegenMeta<TypegenDisabled, TEvent, ToProvidedActor<TActors>, ToParameterizedObject<TActions>, ToParameterizedObject<TGuards>, TDelay, TTag>>;
33
+ createMachine: <const TConfig extends MachineConfig<TContext, TEvent, ToProvidedActor<TChildrenMap, TActors>, ToParameterizedObject<TActions>, ToParameterizedObject<TGuards>, TDelay, TTag, TInput, TOutput, ResolveTypegenMeta<TypegenDisabled, TEvent, ToProvidedActor<TChildrenMap, TActors>, ToParameterizedObject<TActions>, ToParameterizedObject<TGuards>, TDelay, TTag>>>(config: TConfig) => StateMachine<TContext, TEvent, Cast<ToChildren<ToProvidedActor<TChildrenMap, TActors>>, Record<string, AnyActorRef | undefined>>, ToProvidedActor<TChildrenMap, TActors>, ToParameterizedObject<TActions>, ToParameterizedObject<TGuards>, TDelay, TTag, TInput, TOutput, ResolveTypegenMeta<TypegenDisabled, TEvent, ToProvidedActor<TChildrenMap, TActors>, ToParameterizedObject<TActions>, ToParameterizedObject<TGuards>, TDelay, TTag>>;
31
34
  };
32
35
  export {};
@@ -17,6 +17,9 @@ export type HomomorphicPick<T, K extends keyof any> = {
17
17
  export type HomomorphicOmit<T, K extends keyof any> = {
18
18
  [P in keyof T as Exclude<P, K>]: T[P];
19
19
  };
20
+ export type Invert<T extends Record<PropertyKey, PropertyKey>> = {
21
+ [K in keyof T as T[K]]: K;
22
+ };
20
23
  export type GetParameterizedParams<T extends ParameterizedObject | undefined> = T extends any ? ('params' extends keyof T ? T['params'] : undefined) : never;
21
24
  /**
22
25
  *
@@ -77,13 +80,14 @@ export interface ParameterizedObject {
77
80
  export interface UnifiedArg<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject> {
78
81
  context: TContext;
79
82
  event: TExpressionEvent;
80
- self: ActorRef<TEvent, MachineSnapshot<TContext, TEvent, ProvidedActor, string, unknown>>;
83
+ self: ActorRef<TEvent, MachineSnapshot<TContext, TEvent, Record<string, AnyActorRef | undefined>, // TODO: this should be replaced with `TChildren`
84
+ string, unknown>>;
81
85
  system: ActorSystem<any>;
82
86
  }
83
87
  export type MachineContext = Record<string, any>;
84
88
  export interface ActionArgs<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject> extends UnifiedArg<TContext, TExpressionEvent, TEvent> {
85
89
  }
86
- 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 _TSystem> ? TInput : never;
90
+ export type InputFrom<T extends AnyActorLogic> = T extends StateMachine<infer _TContext, infer _TEvent, infer _TChildren, 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 _TSystem> ? TInput : never;
87
91
  export type OutputFrom<T extends AnyActorLogic> = T extends ActorLogic<infer TSnapshot, infer _TEvent, infer _TInput, infer _TSystem> ? (TSnapshot & {
88
92
  status: 'done';
89
93
  })['output'] : never;
@@ -348,7 +352,16 @@ export type AnyStateNodeDefinition = StateNodeDefinition<any, any>;
348
352
  export type AnyMachineSnapshot = MachineSnapshot<any, any, any, any, any, any>;
349
353
  /** @deprecated use `AnyMachineSnapshot` instead */
350
354
  export type AnyState = AnyMachineSnapshot;
351
- export type AnyStateMachine = StateMachine<any, any, any, any, any, any, any, any, any, // delays
355
+ export type AnyStateMachine = StateMachine<any, // context
356
+ any, // event
357
+ any, // children
358
+ any, // actor
359
+ any, // action
360
+ any, // guard
361
+ any, // delay
362
+ any, // tag
363
+ any, // input
364
+ any, // output
352
365
  any>;
353
366
  export type AnyStateConfig = StateConfig<any, AnyEventObject>;
354
367
  export interface AtomicStateNodeConfig<TContext extends MachineContext, TEvent extends EventObject> extends StateNodeConfig<TContext, TEvent, TODO, TODO, TODO, TODO, TODO, TODO> {
@@ -441,14 +454,15 @@ export interface ProvidedActor {
441
454
  logic: AnyActorLogic;
442
455
  id?: string;
443
456
  }
444
- export interface SetupTypes<TContext extends MachineContext, TEvent extends EventObject, TTag extends string, TInput, TOutput> {
457
+ export interface SetupTypes<TContext extends MachineContext, TEvent extends EventObject, TChildrenMap extends Record<string, string>, TTag extends string, TInput, TOutput> {
445
458
  context?: TContext;
446
459
  events?: TEvent;
460
+ children?: TChildrenMap;
447
461
  tags?: TTag;
448
462
  input?: TInput;
449
463
  output?: TOutput;
450
464
  }
451
- export interface MachineTypes<TContext extends MachineContext, TEvent extends EventObject, TActor extends ProvidedActor, TAction extends ParameterizedObject, TGuard extends ParameterizedObject, TDelay extends string, TTag extends string, TInput, TOutput, TTypesMeta = TypegenDisabled> extends SetupTypes<TContext, TEvent, TTag, TInput, TOutput> {
465
+ export interface MachineTypes<TContext extends MachineContext, TEvent extends EventObject, TActor extends ProvidedActor, TAction extends ParameterizedObject, TGuard extends ParameterizedObject, TDelay extends string, TTag extends string, TInput, TOutput, TTypesMeta = TypegenDisabled> extends SetupTypes<TContext, TEvent, never, TTag, TInput, TOutput> {
452
466
  actors?: TActor;
453
467
  actions?: TAction;
454
468
  guards?: TGuard;
@@ -506,7 +520,8 @@ export type PropertyAssigner<TContext extends MachineContext, TExpressionEvent e
506
520
  export type Mapper<TContext extends MachineContext, TExpressionEvent extends EventObject, TResult, TEvent extends EventObject> = (args: {
507
521
  context: TContext;
508
522
  event: TExpressionEvent;
509
- self: ActorRef<TEvent, MachineSnapshot<TContext, TEvent, ProvidedActor, string, unknown>>;
523
+ self: ActorRef<TEvent, MachineSnapshot<TContext, TEvent, Record<string, AnyActorRef>, // TODO: this should be replaced with `TChildren`
524
+ string, unknown>>;
510
525
  }) => TResult;
511
526
  export interface TransitionDefinition<TContext extends MachineContext, TEvent extends EventObject> extends Omit<TransitionConfig<TContext, TEvent, TEvent, TODO, TODO, TODO, TODO>, 'target' | 'guard'> {
512
527
  target: ReadonlyArray<StateNode<TContext, TEvent>> | undefined;
@@ -547,7 +562,7 @@ export interface StateConfig<TContext extends MachineContext, TEvent extends Eve
547
562
  status: 'active' | 'done' | 'error' | 'stopped';
548
563
  output?: any;
549
564
  error?: unknown;
550
- machine?: StateMachine<TContext, TEvent, any, any, any, any, any, any, any>;
565
+ machine?: StateMachine<TContext, TEvent, any, any, any, any, any, any, any, any, any>;
551
566
  }
552
567
  export interface ActorOptions<TLogic extends AnyActorLogic> {
553
568
  /**
@@ -730,16 +745,17 @@ export interface ActorRef<TEvent extends EventObject, TSnapshot extends Snapshot
730
745
  src: string | AnyActorLogic;
731
746
  }
732
747
  export type AnyActorRef = ActorRef<any, any>;
733
- 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;
734
- 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 _TSystem> ? ActorRef<TEvent, TSnapshot> : never : never;
748
+ export type ActorLogicFrom<T> = ReturnTypeOrValue<T> extends infer R ? R extends StateMachine<any, any, any, any, any, any, any, any, any, any, any> ? R : R extends Promise<infer U> ? PromiseActorLogic<U> : never : never;
749
+ export type ActorRefFrom<T> = ReturnTypeOrValue<T> extends infer R ? R extends StateMachine<infer TContext, infer TEvent, infer TChildren, infer _TActor, infer _TAction, infer _TGuard, infer _TDelay, infer TTag, infer _TInput, infer TOutput, infer TResolvedTypesMeta> ? ActorRef<TEvent, MachineSnapshot<TContext, TEvent, TChildren, 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 _TSystem> ? ActorRef<TEvent, TSnapshot> : never : never;
735
750
  export type DevToolsAdapter = (service: AnyActor) => void;
736
751
  /**
737
752
  * @deprecated Use `Actor<T>` instead.
738
753
  */
739
- 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, ActorSystem<any>>> : never;
740
- 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, TResolvedTypesMeta, TRequireMissingImplementations> : never;
754
+ export type InterpreterFrom<T extends AnyStateMachine | ((...args: any[]) => AnyStateMachine)> = ReturnTypeOrValue<T> extends StateMachine<infer TContext, infer TEvent, infer TChildren, infer _TActor, infer _TAction, infer _TGuard, infer _TDelay, infer TTag, infer TInput, infer TOutput, infer TResolvedTypesMeta> ? Actor<ActorLogic<MachineSnapshot<TContext, TEvent, TChildren, TTag, TOutput, TResolvedTypesMeta>, TEvent, TInput, ActorSystem<any>>> : never;
755
+ export type MachineImplementationsFrom<T extends AnyStateMachine | ((...args: any[]) => AnyStateMachine), TRequireMissingImplementations extends boolean = false> = ReturnTypeOrValue<T> extends StateMachine<infer TContext, infer _TEvent, infer _TChildren, infer _TActor, infer _TAction, infer _TGuard, infer _TDelay, infer _TTag, infer _TInput, infer _TOutput, infer TResolvedTypesMeta> ? InternalMachineImplementations<TContext, TResolvedTypesMeta, TRequireMissingImplementations> : never;
741
756
  export type __ResolvedTypesMetaFrom<T> = T extends StateMachine<any, // context
742
757
  any, // event
758
+ any, // children
743
759
  any, // actor
744
760
  any, // action
745
761
  any, // guard
@@ -828,11 +844,11 @@ export type AnyActorLogic = ActorLogic<any, // snapshot
828
844
  any, // event
829
845
  any, // input
830
846
  any>;
831
- 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> ? ReturnType<R['transition']> : R extends ActorScope<infer TSnapshot, infer _, infer __> ? TSnapshot : never : never;
847
+ 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 _TChildren, 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> ? ReturnType<R['transition']> : R extends ActorScope<infer TSnapshot, infer _, infer __> ? TSnapshot : never : never;
832
848
  export type EventFromLogic<TLogic extends ActorLogic<any, any, any, any>> = TLogic extends ActorLogic<infer _, infer TEvent, infer __, infer _____> ? TEvent : never;
833
- 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 MachineSnapshot<infer _TContext, infer TEvent, infer _TActor, infer _TTag, infer _TOutput, infer _TResolvedTypesMeta> ? TEvent : R extends ActorRef<infer TEvent, infer _> ? TEvent : never : never;
849
+ type ResolveEventType<T> = ReturnTypeOrValue<T> extends infer R ? R extends StateMachine<infer _TContext, infer TEvent, infer _TChildren, infer _TActor, infer _TAction, infer _TGuard, infer _TDelay, infer _TTag, infer _TInput, infer _TOutput, infer _TResolvedTypesMeta> ? TEvent : R extends MachineSnapshot<infer _TContext, infer TEvent, infer _TChildren, infer _TTag, infer _TOutput, infer _TResolvedTypesMeta> ? TEvent : R extends ActorRef<infer TEvent, infer _> ? TEvent : never : never;
834
850
  export type EventFrom<T, K extends Prop<TEvent, 'type'> = never, TEvent extends EventObject = ResolveEventType<T>> = IsNever<K> extends true ? TEvent : ExtractEvent<TEvent, K>;
835
- 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 MachineSnapshot<infer TContext, infer _TEvent, infer _TActor, infer _TTag, 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;
851
+ export type ContextFrom<T> = ReturnTypeOrValue<T> extends infer R ? R extends StateMachine<infer TContext, infer _TEvent, infer _TChildren, infer _TActor, infer _TAction, infer _TGuard, infer _TDelay, infer _TTag, infer _TInput, infer _TOutput, infer _TTypesMeta> ? TContext : R extends MachineSnapshot<infer TContext, infer _TEvent, infer _TChildren, infer _TTag, infer _TOutput, infer _TResolvedTypesMeta> ? TContext : R extends Actor<infer TActorLogic> ? TActorLogic extends StateMachine<infer TContext, infer _TEvent, infer _TChildren, infer _TActor, infer _TAction, infer _TGuard, infer _TDelay, infer _TTag, infer _TInput, infer _TOutput, infer _TTypesMeta> ? TContext : never : never : never;
836
852
  export type InferEvent<E extends EventObject> = {
837
853
  [T in E['type']]: {
838
854
  type: T;
@@ -851,5 +867,15 @@ export interface ActorSystem<T extends ActorSystemInfo> {
851
867
  inspect: (observer: Observer<InspectionEvent>) => void;
852
868
  }
853
869
  export type AnyActorSystem = ActorSystem<any>;
854
- export type RequiredActorOptions<TActor extends ProvidedActor> = ('id' extends keyof TActor ? 'id' : never) | (undefined extends InputFrom<TActor['logic']> ? never : 'input');
870
+ export type RequiredActorOptions<TActor extends ProvidedActor> = (undefined extends TActor['id'] ? never : 'id') | (undefined extends InputFrom<TActor['logic']> ? never : 'input');
871
+ type ExtractLiteralString<T extends string | undefined> = T extends string ? string extends T ? never : T : never;
872
+ type ToConcreteChildren<TActor extends ProvidedActor> = {
873
+ [A in TActor as ExtractLiteralString<A['id']>]?: ActorRefFrom<A['logic']>;
874
+ };
875
+ export type ToChildren<TActor extends ProvidedActor> = string extends TActor['src'] ? Record<string, AnyActorRef> : Compute<ToConcreteChildren<TActor> & {
876
+ include: {
877
+ [id: string]: TActor extends any ? ActorRefFrom<TActor['logic']> | undefined : never;
878
+ };
879
+ exclude: {};
880
+ }[undefined extends TActor['id'] ? 'include' : string extends TActor['id'] ? 'include' : 'exclude']>;
855
881
  export {};
@@ -1,5 +1,5 @@
1
1
  import type { StateNode } from "./StateNode.js";
2
- import type { ActorLogic, AnyEventObject, EventObject, MachineContext, Mapper, Observer, ErrorActorEvent, SingleOrArray, StateLike, StateValue, Subscribable, TransitionConfigTarget, AnyActorRef, AnyTransitionConfig, NonReducibleUnknown, AnyStateMachine } from "./types.js";
2
+ import type { ActorLogic, AnyEventObject, EventObject, MachineContext, Mapper, Observer, ErrorActorEvent, SingleOrArray, StateLike, StateValue, Subscribable, TransitionConfigTarget, AnyActorRef, AnyTransitionConfig, NonReducibleUnknown, AnyStateMachine, AnyMachineSnapshot } from "./types.js";
3
3
  export declare function keys<T extends object>(value: T): Array<keyof T & string>;
4
4
  export declare function matchesState(parentStateId: StateValue, childStateId: StateValue): boolean;
5
5
  export declare function toStatePath(stateId: string | string[]): string[];
@@ -38,3 +38,4 @@ export declare function reportUnhandledExceptionOnInvocation(originalError: any,
38
38
  export declare function toObserver<T>(nextHandler?: Observer<T> | ((value: T) => void), errorHandler?: (error: any) => void, completionHandler?: () => void): Observer<T>;
39
39
  export declare function createInvokeId(stateNodeId: string, index: number): string;
40
40
  export declare function resolveReferencedActor(machine: AnyStateMachine, src: string): any;
41
+ export declare function getAllOwnEventDescriptors(snapshot: AnyMachineSnapshot): any[];
@@ -316,6 +316,9 @@ function resolveReferencedActor(machine, src) {
316
316
  }
317
317
  return machine.implementations.actors[src];
318
318
  }
319
+ function getAllOwnEventDescriptors(snapshot) {
320
+ return [...new Set(flatten([...snapshot._nodes.map(sn => sn.ownEvents)]))];
321
+ }
319
322
 
320
323
  const $$ACTOR_TYPE = 1;
321
324
  // those values are currently used by @xstate/react directly so it's important to keep the assigned values in sync
@@ -342,32 +345,6 @@ const defaultOptions = {
342
345
  * An Actor is a running process that can receive events, send events and change its behavior based on the events it receives, which can cause effects outside of the actor. When you run a state machine, it becomes an actor.
343
346
  */
344
347
  class Actor {
345
- /**
346
- * The current internal state of the actor.
347
- */
348
-
349
- /**
350
- * The clock that is responsible for setting and clearing timeouts, such as delayed events and transitions.
351
- */
352
-
353
- /**
354
- * The unique identifier for this actor relative to its parent.
355
- */
356
-
357
- /** @internal */
358
-
359
- // Actor Ref
360
-
361
- // TODO: add typings for system
362
-
363
- /**
364
- * The globally unique process ID for this invocation.
365
- */
366
-
367
- /**
368
- * The system to which this actor belongs.
369
- */
370
-
371
348
  /**
372
349
  * Creates a new actor instance for the given logic with the provided options, if any.
373
350
  *
@@ -376,24 +353,43 @@ class Actor {
376
353
  */
377
354
  constructor(logic, options) {
378
355
  this.logic = logic;
356
+ /**
357
+ * The current internal state of the actor.
358
+ */
379
359
  this._state = void 0;
360
+ /**
361
+ * The clock that is responsible for setting and clearing timeouts, such as delayed events and transitions.
362
+ */
380
363
  this.clock = void 0;
381
364
  this.options = void 0;
365
+ /**
366
+ * The unique identifier for this actor relative to its parent.
367
+ */
382
368
  this.id = void 0;
383
369
  this.mailbox = new Mailbox(this._process.bind(this));
384
370
  this.delayedEventsMap = {};
385
371
  this.observers = new Set();
386
372
  this.logger = void 0;
373
+ /** @internal */
387
374
  this._processingStatus = ProcessingStatus.NotStarted;
375
+ // Actor Ref
388
376
  this._parent = void 0;
389
377
  this._syncSnapshot = void 0;
390
378
  this.ref = void 0;
379
+ // TODO: add typings for system
391
380
  this._actorScope = void 0;
392
381
  this._systemId = void 0;
382
+ /**
383
+ * The globally unique process ID for this invocation.
384
+ */
393
385
  this.sessionId = void 0;
386
+ /**
387
+ * The system to which this actor belongs.
388
+ */
394
389
  this.system = void 0;
395
390
  this._doneEvent = void 0;
396
391
  this.src = void 0;
392
+ // array of functions to defer
397
393
  this._deferred = [];
398
394
  const resolvedOptions = {
399
395
  ...defaultOptions,
@@ -458,9 +454,6 @@ class Actor {
458
454
  _initState(persistedState) {
459
455
  this._state = persistedState ? this.logic.restoreState ? this.logic.restoreState(persistedState, this._actorScope) : persistedState : this.logic.getInitialState(this._actorScope, this.options?.input);
460
456
  }
461
-
462
- // array of functions to defer
463
-
464
457
  update(snapshot, event) {
465
458
  // Update state
466
459
  this._state = snapshot;
@@ -2076,7 +2069,6 @@ const machineSnapshotToJSON = function toJSON() {
2076
2069
  _nodes: nodes,
2077
2070
  tags,
2078
2071
  machine,
2079
- getNextEvents,
2080
2072
  getMeta,
2081
2073
  toJSON,
2082
2074
  can,
@@ -2089,9 +2081,6 @@ const machineSnapshotToJSON = function toJSON() {
2089
2081
  tags: Array.from(tags)
2090
2082
  };
2091
2083
  };
2092
- const machineSnapshotGetNextEvents = function getNextEvents() {
2093
- return [...new Set(flatten([...this._nodes.map(sn => sn.ownEvents)]))];
2094
- };
2095
2084
  const machineSnapshotGetMeta = function getMeta() {
2096
2085
  return this._nodes.reduce((acc, stateNode) => {
2097
2086
  if (stateNode.meta !== undefined) {
@@ -2116,7 +2105,6 @@ function createMachineSnapshot(config, machine) {
2116
2105
  matches: machineSnapshotMatches,
2117
2106
  hasTag: machineSnapshotHasTag,
2118
2107
  can: machineSnapshotCan,
2119
- getNextEvents: machineSnapshotGetNextEvents,
2120
2108
  getMeta: machineSnapshotGetMeta,
2121
2109
  toJSON: machineSnapshotToJSON
2122
2110
  };
@@ -2137,7 +2125,6 @@ function getPersistedState(state, options) {
2137
2125
  can,
2138
2126
  hasTag,
2139
2127
  matches,
2140
- getNextEvents,
2141
2128
  getMeta,
2142
2129
  toJSON,
2143
2130
  ...jsonValues
@@ -2238,4 +2225,4 @@ function raise(eventOrExpr, options) {
2238
2225
  return raise;
2239
2226
  }
2240
2227
 
2241
- export { $$ACTOR_TYPE as $, resolveReferencedActor as A, createActor as B, Actor as C, interpret as D, isMachineSnapshot as E, matchesState as F, pathToStateValue as G, toObserver as H, and as I, not as J, or as K, stateIn as L, cancel as M, NULL_EVENT as N, raise as O, stop as P, spawn as Q, ProcessingStatus as R, STATE_DELIMITER as S, createErrorActorEvent as T, XSTATE_ERROR as U, XSTATE_STOP as X, toTransitionConfigArray as a, formatTransition as b, createInvokeId as c, formatInitialTransition as d, evaluateGuard as e, formatTransitions as f, getDelayedTransitions as g, getCandidates as h, getAllStateNodes as i, getStateNodes as j, createMachineSnapshot as k, isInFinalState as l, mapValues as m, isErrorActorEvent as n, cloneMachineSnapshot as o, macrostep as p, transitionNode as q, resolveStateValue as r, resolveActionsAndContext as s, toArray as t, createInitEvent as u, microstep as v, getInitialStateNodes as w, isStateId as x, getStateNodeByPath as y, getPersistedState as z };
2228
+ export { $$ACTOR_TYPE as $, getPersistedState as A, resolveReferencedActor as B, createActor as C, Actor as D, interpret as E, isMachineSnapshot as F, matchesState as G, pathToStateValue as H, toObserver as I, and as J, not as K, or as L, stateIn as M, NULL_EVENT as N, cancel as O, raise as P, stop as Q, spawn as R, STATE_DELIMITER as S, ProcessingStatus as T, createErrorActorEvent as U, XSTATE_ERROR as V, XSTATE_STOP as X, toTransitionConfigArray as a, formatTransition as b, createInvokeId as c, formatInitialTransition as d, evaluateGuard as e, formatTransitions as f, getDelayedTransitions as g, getCandidates as h, getAllStateNodes as i, getStateNodes as j, createMachineSnapshot as k, isInFinalState as l, mapValues as m, isErrorActorEvent as n, getAllOwnEventDescriptors as o, cloneMachineSnapshot as p, macrostep as q, resolveStateValue as r, transitionNode as s, toArray as t, resolveActionsAndContext as u, createInitEvent as v, microstep as w, getInitialStateNodes as x, isStateId as y, getStateNodeByPath as z };
@@ -318,6 +318,9 @@ function resolveReferencedActor(machine, src) {
318
318
  }
319
319
  return machine.implementations.actors[src];
320
320
  }
321
+ function getAllOwnEventDescriptors(snapshot) {
322
+ return [...new Set(flatten([...snapshot._nodes.map(sn => sn.ownEvents)]))];
323
+ }
321
324
 
322
325
  const $$ACTOR_TYPE = 1;
323
326
  // those values are currently used by @xstate/react directly so it's important to keep the assigned values in sync
@@ -344,32 +347,6 @@ const defaultOptions = {
344
347
  * An Actor is a running process that can receive events, send events and change its behavior based on the events it receives, which can cause effects outside of the actor. When you run a state machine, it becomes an actor.
345
348
  */
346
349
  class Actor {
347
- /**
348
- * The current internal state of the actor.
349
- */
350
-
351
- /**
352
- * The clock that is responsible for setting and clearing timeouts, such as delayed events and transitions.
353
- */
354
-
355
- /**
356
- * The unique identifier for this actor relative to its parent.
357
- */
358
-
359
- /** @internal */
360
-
361
- // Actor Ref
362
-
363
- // TODO: add typings for system
364
-
365
- /**
366
- * The globally unique process ID for this invocation.
367
- */
368
-
369
- /**
370
- * The system to which this actor belongs.
371
- */
372
-
373
350
  /**
374
351
  * Creates a new actor instance for the given logic with the provided options, if any.
375
352
  *
@@ -378,24 +355,43 @@ class Actor {
378
355
  */
379
356
  constructor(logic, options) {
380
357
  this.logic = logic;
358
+ /**
359
+ * The current internal state of the actor.
360
+ */
381
361
  this._state = void 0;
362
+ /**
363
+ * The clock that is responsible for setting and clearing timeouts, such as delayed events and transitions.
364
+ */
382
365
  this.clock = void 0;
383
366
  this.options = void 0;
367
+ /**
368
+ * The unique identifier for this actor relative to its parent.
369
+ */
384
370
  this.id = void 0;
385
371
  this.mailbox = new Mailbox(this._process.bind(this));
386
372
  this.delayedEventsMap = {};
387
373
  this.observers = new Set();
388
374
  this.logger = void 0;
375
+ /** @internal */
389
376
  this._processingStatus = ProcessingStatus.NotStarted;
377
+ // Actor Ref
390
378
  this._parent = void 0;
391
379
  this._syncSnapshot = void 0;
392
380
  this.ref = void 0;
381
+ // TODO: add typings for system
393
382
  this._actorScope = void 0;
394
383
  this._systemId = void 0;
384
+ /**
385
+ * The globally unique process ID for this invocation.
386
+ */
395
387
  this.sessionId = void 0;
388
+ /**
389
+ * The system to which this actor belongs.
390
+ */
396
391
  this.system = void 0;
397
392
  this._doneEvent = void 0;
398
393
  this.src = void 0;
394
+ // array of functions to defer
399
395
  this._deferred = [];
400
396
  const resolvedOptions = {
401
397
  ...defaultOptions,
@@ -460,9 +456,6 @@ class Actor {
460
456
  _initState(persistedState) {
461
457
  this._state = persistedState ? this.logic.restoreState ? this.logic.restoreState(persistedState, this._actorScope) : persistedState : this.logic.getInitialState(this._actorScope, this.options?.input);
462
458
  }
463
-
464
- // array of functions to defer
465
-
466
459
  update(snapshot, event) {
467
460
  // Update state
468
461
  this._state = snapshot;
@@ -2078,7 +2071,6 @@ const machineSnapshotToJSON = function toJSON() {
2078
2071
  _nodes: nodes,
2079
2072
  tags,
2080
2073
  machine,
2081
- getNextEvents,
2082
2074
  getMeta,
2083
2075
  toJSON,
2084
2076
  can,
@@ -2091,9 +2083,6 @@ const machineSnapshotToJSON = function toJSON() {
2091
2083
  tags: Array.from(tags)
2092
2084
  };
2093
2085
  };
2094
- const machineSnapshotGetNextEvents = function getNextEvents() {
2095
- return [...new Set(flatten([...this._nodes.map(sn => sn.ownEvents)]))];
2096
- };
2097
2086
  const machineSnapshotGetMeta = function getMeta() {
2098
2087
  return this._nodes.reduce((acc, stateNode) => {
2099
2088
  if (stateNode.meta !== undefined) {
@@ -2118,7 +2107,6 @@ function createMachineSnapshot(config, machine) {
2118
2107
  matches: machineSnapshotMatches,
2119
2108
  hasTag: machineSnapshotHasTag,
2120
2109
  can: machineSnapshotCan,
2121
- getNextEvents: machineSnapshotGetNextEvents,
2122
2110
  getMeta: machineSnapshotGetMeta,
2123
2111
  toJSON: machineSnapshotToJSON
2124
2112
  };
@@ -2139,7 +2127,6 @@ function getPersistedState(state, options) {
2139
2127
  can,
2140
2128
  hasTag,
2141
2129
  matches,
2142
- getNextEvents,
2143
2130
  getMeta,
2144
2131
  toJSON,
2145
2132
  ...jsonValues
@@ -2259,6 +2246,7 @@ exports.evaluateGuard = evaluateGuard;
2259
2246
  exports.formatInitialTransition = formatInitialTransition;
2260
2247
  exports.formatTransition = formatTransition;
2261
2248
  exports.formatTransitions = formatTransitions;
2249
+ exports.getAllOwnEventDescriptors = getAllOwnEventDescriptors;
2262
2250
  exports.getAllStateNodes = getAllStateNodes;
2263
2251
  exports.getCandidates = getCandidates;
2264
2252
  exports.getDelayedTransitions = getDelayedTransitions;