xstate 5.0.0-beta.37 → 5.0.0-beta.39

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 (62) hide show
  1. package/actions/dist/xstate-actions.cjs.js +4 -3
  2. package/actions/dist/xstate-actions.cjs.mjs +1 -0
  3. package/actions/dist/xstate-actions.development.cjs.js +4 -3
  4. package/actions/dist/xstate-actions.development.cjs.mjs +1 -0
  5. package/actions/dist/xstate-actions.development.esm.js +3 -3
  6. package/actions/dist/xstate-actions.esm.js +3 -3
  7. package/actions/dist/xstate-actions.umd.min.js +1 -1
  8. package/actions/dist/xstate-actions.umd.min.js.map +1 -1
  9. package/actors/dist/xstate-actors.cjs.js +60 -3
  10. package/actors/dist/xstate-actors.development.cjs.js +60 -3
  11. package/actors/dist/xstate-actors.development.esm.js +60 -3
  12. package/actors/dist/xstate-actors.esm.js +60 -3
  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 +2 -2
  16. package/dist/declarations/src/StateMachine.d.ts +7 -7
  17. package/dist/declarations/src/actions/assign.d.ts +4 -4
  18. package/dist/declarations/src/actions/cancel.d.ts +4 -4
  19. package/dist/declarations/src/actions/choose.d.ts +3 -3
  20. package/dist/declarations/src/actions/log.d.ts +4 -4
  21. package/dist/declarations/src/actions/pure.d.ts +4 -4
  22. package/dist/declarations/src/actions/raise.d.ts +3 -3
  23. package/dist/declarations/src/actions/send.d.ts +7 -7
  24. package/dist/declarations/src/actions/spawn.d.ts +34 -0
  25. package/dist/declarations/src/actions/stop.d.ts +4 -4
  26. package/dist/declarations/src/actions.d.ts +1 -0
  27. package/dist/declarations/src/actors/callback.d.ts +76 -2
  28. package/dist/declarations/src/actors/observable.d.ts +2 -3
  29. package/dist/declarations/src/actors/promise.d.ts +0 -1
  30. package/dist/declarations/src/actors/transition.d.ts +3 -3
  31. package/dist/declarations/src/guards.d.ts +9 -10
  32. package/dist/declarations/src/interpreter.d.ts +71 -10
  33. package/dist/declarations/src/spawn.d.ts +3 -4
  34. package/dist/declarations/src/stateUtils.d.ts +4 -9
  35. package/dist/declarations/src/types.d.ts +51 -62
  36. package/dist/{interpreter-e58ca48d.development.cjs.js → interpreter-03a5c3f5.development.cjs.js} +91 -12
  37. package/dist/{interpreter-8def682e.esm.js → interpreter-1e8c1c0c.esm.js} +91 -12
  38. package/dist/{interpreter-97aff8d2.cjs.js → interpreter-5dfcd203.cjs.js} +91 -12
  39. package/dist/{interpreter-1c52b23c.development.esm.js → interpreter-70cd9217.development.esm.js} +91 -12
  40. package/dist/{raise-1fd59c65.development.cjs.js → raise-17cb3d9d.development.cjs.js} +145 -152
  41. package/dist/{raise-800296d7.cjs.js → raise-291d2181.cjs.js} +145 -152
  42. package/dist/{raise-21c417c1.esm.js → raise-62de3670.esm.js} +145 -153
  43. package/dist/{raise-e342a840.development.esm.js → raise-e044f460.development.esm.js} +145 -153
  44. package/dist/{send-92854675.esm.js → send-1249d4ac.esm.js} +45 -44
  45. package/dist/{send-b309ef4e.development.cjs.js → send-33433787.development.cjs.js} +45 -44
  46. package/dist/{send-4cc29786.cjs.js → send-af152aca.cjs.js} +45 -44
  47. package/dist/{send-83ccc98b.development.esm.js → send-f1a2a827.development.esm.js} +45 -44
  48. package/dist/xstate.cjs.js +23 -20
  49. package/dist/xstate.cjs.mjs +1 -0
  50. package/dist/xstate.development.cjs.js +23 -20
  51. package/dist/xstate.development.cjs.mjs +1 -0
  52. package/dist/xstate.development.esm.js +25 -23
  53. package/dist/xstate.esm.js +25 -23
  54. package/dist/xstate.umd.min.js +1 -1
  55. package/dist/xstate.umd.min.js.map +1 -1
  56. package/guards/dist/xstate-guards.cjs.js +2 -2
  57. package/guards/dist/xstate-guards.development.cjs.js +2 -2
  58. package/guards/dist/xstate-guards.development.esm.js +2 -2
  59. package/guards/dist/xstate-guards.esm.js +2 -2
  60. package/guards/dist/xstate-guards.umd.min.js +1 -1
  61. package/guards/dist/xstate-guards.umd.min.js.map +1 -1
  62. 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, TEvent extends EventObject, TDelay extends string> {
3
- (_: ActionArgs<TContext, TExpressionEvent, TExpressionAction, TEvent>): void;
2
+ export interface SendToAction<TContext extends MachineContext, TExpressionEvent extends EventObject, TParams extends ParameterizedObject['params'] | undefined, TEvent extends EventObject, TDelay extends string> {
3
+ (args: ActionArgs<TContext, TExpressionEvent, TEvent>, params: TParams): 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, 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>;
15
+ export declare function sendTo<TContext extends MachineContext, TExpressionEvent extends EventObject, TParams extends ParameterizedObject['params'] | undefined, TTargetActor extends AnyActorRef, TEvent extends EventObject, TDelay extends string>(to: TTargetActor | string | ((args: ActionArgs<TContext, TExpressionEvent, TEvent>, params: TParams) => TTargetActor | string), eventOrExpr: EventFrom<TTargetActor> | SendExpr<TContext, TExpressionEvent, TParams, InferEvent<Cast<EventFrom<TTargetActor>, EventObject>>, TEvent>, options?: SendToActionOptions<TContext, TExpressionEvent, TParams, NoInfer<TEvent>, NoInfer<TDelay>>): SendToAction<TContext, TExpressionEvent, TParams, 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, 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>);
22
+ export declare function sendParent<TContext extends MachineContext, TExpressionEvent extends EventObject, TParams extends ParameterizedObject['params'] | undefined, TSentEvent extends EventObject = AnyEventObject, TEvent extends EventObject = AnyEventObject, TDelay extends string = string>(event: TSentEvent | SendExpr<TContext, TExpressionEvent, TParams, TSentEvent, TEvent>, options?: SendToActionOptions<TContext, TExpressionEvent, TParams, TEvent, TDelay>): SendToAction<TContext, TExpressionEvent, TParams, TEvent, TDelay>;
23
+ type Target<TContext extends MachineContext, TExpressionEvent extends EventObject, TParams extends ParameterizedObject['params'] | undefined, TEvent extends EventObject> = string | ActorRef<any, any> | ((args: ActionArgs<TContext, TExpressionEvent, TEvent>, params: TParams) => 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, 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>;
30
+ export declare function forwardTo<TContext extends MachineContext, TExpressionEvent extends EventObject, TParams extends ParameterizedObject['params'] | undefined, TEvent extends EventObject, TDelay extends string>(target: Target<TContext, TExpressionEvent, TParams, TEvent>, options?: SendToActionOptions<TContext, TExpressionEvent, TParams, TEvent, TDelay>): SendToAction<TContext, TExpressionEvent, TParams, 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, 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>;
38
+ export declare function escalate<TContext extends MachineContext, TExpressionEvent extends EventObject, TParams extends ParameterizedObject['params'] | undefined, TErrorData = any, TEvent extends EventObject = AnyEventObject>(errorData: TErrorData | ((args: UnifiedArg<TContext, TExpressionEvent, TEvent>) => TErrorData), options?: SendToActionParams<TContext, TExpressionEvent, TParams, EventObject, TEvent, string>): SendToAction<TContext, TExpressionEvent, TParams, TEvent, string>;
39
39
  export {};
@@ -0,0 +1,34 @@
1
+ import { ActionArgs, EventObject, MachineContext, ParameterizedObject, AnyActorLogic, ProvidedActor, IsLiteralString, InputFrom, UnifiedArg } from "../types.js";
2
+ type ResolvableActorId<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject, TId extends string | undefined> = TId | ((args: UnifiedArg<TContext, TExpressionEvent, TEvent>) => TId);
3
+ export interface SpawnAction<TContext extends MachineContext, TExpressionEvent extends EventObject, TParams extends ParameterizedObject['params'] | undefined, TEvent extends EventObject, TActor extends ProvidedActor> {
4
+ (args: ActionArgs<TContext, TExpressionEvent, TEvent>, params: TParams): void;
5
+ _out_TActor?: TActor;
6
+ }
7
+ type DistributeActors<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject, TActor extends ProvidedActor> = TActor extends any ? 'id' extends keyof TActor ? [
8
+ src: TActor['src'],
9
+ options: {
10
+ id: ResolvableActorId<TContext, TExpressionEvent, TEvent, TActor['id']>;
11
+ systemId?: string;
12
+ input?: InputFrom<TActor['logic']>;
13
+ syncSnapshot?: boolean;
14
+ }
15
+ ] : [
16
+ src: TActor['src'],
17
+ options?: {
18
+ id?: ResolvableActorId<TContext, TExpressionEvent, TEvent, string>;
19
+ systemId?: string;
20
+ input?: InputFrom<TActor['logic']>;
21
+ syncSnapshot?: boolean;
22
+ }
23
+ ] : never;
24
+ type SpawnArguments<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject, TActor extends ProvidedActor> = IsLiteralString<TActor['src']> extends true ? DistributeActors<TContext, TExpressionEvent, TEvent, TActor> : [
25
+ src: string | AnyActorLogic,
26
+ options?: {
27
+ id?: ResolvableActorId<TContext, TExpressionEvent, TEvent, string>;
28
+ systemId?: string;
29
+ input?: unknown;
30
+ syncSnapshot?: boolean;
31
+ }
32
+ ];
33
+ export declare function spawn<TContext extends MachineContext, TExpressionEvent extends EventObject, TParams extends ParameterizedObject['params'] | undefined, TEvent extends EventObject, TActor extends ProvidedActor>(...[src, { id, systemId, input, syncSnapshot }]: SpawnArguments<TContext, TExpressionEvent, TEvent, TActor>): SpawnAction<TContext, TExpressionEvent, TParams, TEvent, TActor>;
34
+ 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, 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;
2
+ type ResolvableActorRef<TContext extends MachineContext, TExpressionEvent extends EventObject, TParams extends ParameterizedObject['params'] | undefined, TEvent extends EventObject> = string | ActorRef<any, any> | ((args: ActionArgs<TContext, TExpressionEvent, TEvent>, params: TParams) => ActorRef<any, any> | string);
3
+ export interface StopAction<TContext extends MachineContext, TExpressionEvent extends EventObject, TParams extends ParameterizedObject['params'] | undefined, TEvent extends EventObject> {
4
+ (args: ActionArgs<TContext, TExpressionEvent, TEvent>, params: TParams): 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, TEvent extends EventObject>(actorRef: ResolvableActorRef<TContext, TExpressionEvent, TExpressionAction, TEvent>): StopAction<TContext, TExpressionEvent, TExpressionAction, TEvent>;
11
+ export declare function stop<TContext extends MachineContext, TExpressionEvent extends EventObject, TParams extends ParameterizedObject['params'] | undefined, TEvent extends EventObject>(actorRef: ResolvableActorRef<TContext, TExpressionEvent, TParams, TEvent>): StopAction<TContext, TExpressionEvent, TParams, TEvent>;
12
12
  export {};
@@ -6,3 +6,4 @@ export { pure, type PureAction } from "./actions/pure.js";
6
6
  export { raise, type RaiseAction } from "./actions/raise.js";
7
7
  export { escalate, forwardTo, sendParent, sendTo, type SendToAction } from "./actions/send.js";
8
8
  export { stop, type StopAction } from "./actions/stop.js";
9
+ export { spawn, type SpawnAction } from "./actions/spawn.js";
@@ -1,20 +1,94 @@
1
- import { ActorLogic, EventObject, AnyActorSystem, AnyEventObject, ActorSystem, ActorRefFrom, Snapshot, HomomorphicOmit } from "../types.js";
1
+ import { ActorLogic, EventObject, AnyActorSystem, AnyEventObject, ActorSystem, ActorRefFrom, Snapshot } from "../types.js";
2
2
  type CallbackSnapshot<TInput, TEvent> = Snapshot<undefined> & {
3
3
  input: TInput;
4
4
  _receivers: Set<(e: TEvent) => void>;
5
5
  _dispose: (() => void) | void;
6
6
  };
7
- export type CallbackActorLogic<TEvent extends EventObject, TInput = unknown> = ActorLogic<CallbackSnapshot<TInput, TEvent>, TEvent, TInput, HomomorphicOmit<CallbackSnapshot<TInput, TEvent>, '_receivers' | '_dispose'>, ActorSystem<any>>;
7
+ export type CallbackActorLogic<TEvent extends EventObject, TInput = unknown> = ActorLogic<CallbackSnapshot<TInput, TEvent>, TEvent, TInput, ActorSystem<any>>;
8
8
  export type CallbackActorRef<TEvent extends EventObject, TInput = unknown> = ActorRefFrom<CallbackActorLogic<TEvent, TInput>>;
9
9
  export type Receiver<TEvent extends EventObject> = (listener: {
10
10
  bivarianceHack(event: TEvent): void;
11
11
  }['bivarianceHack']) => void;
12
12
  export type InvokeCallback<TEvent extends EventObject = AnyEventObject, TSentEvent extends EventObject = AnyEventObject, TInput = unknown> = ({ input, system, self, sendBack, receive }: {
13
+ /**
14
+ * Data that was provided to the callback actor
15
+ * @see {@link https://stately.ai/docs/input | Input docs}
16
+ */
13
17
  input: TInput;
18
+ /**
19
+ * The actor system to which the callback actor belongs
20
+ */
14
21
  system: AnyActorSystem;
22
+ /**
23
+ * The parent actor of the callback actor
24
+ */
15
25
  self: CallbackActorRef<TEvent>;
26
+ /**
27
+ * A function that can send events back to the parent actor
28
+ */
16
29
  sendBack: (event: TSentEvent) => void;
30
+ /**
31
+ * A function that can be called with a listener function argument;
32
+ * the listener is then called whenever events are received by the callback actor
33
+ */
17
34
  receive: Receiver<TEvent>;
18
35
  }) => (() => void) | void;
36
+ /**
37
+ * An actor logic creator which returns callback logic as defined by a callback function.
38
+ *
39
+ * @remarks
40
+ * Useful for subscription-based or other free-form logic that can send events back to the parent actor.
41
+ *
42
+ * Actors created from callback logic (“callback actors”) can:
43
+ * - Receive events via the `receive` function
44
+ * - Send events to the parent actor via the `sendBack` function
45
+ *
46
+ * Callback actors are a bit different from other actors in that they:
47
+ * - Do not work with `onDone` or `onError`
48
+ * - Do not produce a snapshot using `.getSnapshot()`
49
+ * - Do not emit values when used with `.subscribe()`
50
+ * - Can not be stopped with `.stop()`
51
+ *
52
+ * @param invokeCallback - The callback function used to describe the callback logic
53
+ * The callback function is passed an object with the following properties:
54
+ * - `receive` - A function that can send events back to the parent actor; the listener is then called whenever events are received by the callback actor
55
+ * - `sendBack` - A function that can send events back to the parent actor
56
+ * - `input` - Data that was provided to the callback actor
57
+ * - `self` - The parent actor of the callback actor
58
+ * - `system` - The actor system to which the callback actor belongs
59
+ * The callback function can (optionally) return a cleanup function, which is called when the actor is stopped.
60
+ * @see {@link InvokeCallback} for more information about the callback function and its object argument
61
+ * @see {@link https://stately.ai/docs/input | Input docs} for more information about how input is passed
62
+
63
+ * @returns Callback logic
64
+ *
65
+ * @example
66
+ * ```typescript
67
+ * const callbackLogic = fromCallback(({ sendBack, receive }) => {
68
+ * let lockStatus = 'unlocked';
69
+ *
70
+ * const handler = (event) => {
71
+ * if (lockStatus === 'locked') {
72
+ * return;
73
+ * }
74
+ * sendBack(event);
75
+ * };
76
+ *
77
+ * receive((event) => {
78
+ * if (event.type === 'lock') {
79
+ * lockStatus = 'locked';
80
+ * } else if (event.type === 'unlock') {
81
+ * lockStatus = 'unlocked';
82
+ * }
83
+ * });
84
+ *
85
+ * document.body.addEventListener('click', handler);
86
+ *
87
+ * return () => {
88
+ * document.body.removeEventListener('click', handler);
89
+ * };
90
+ * });
91
+ * ```
92
+ */
19
93
  export declare function fromCallback<TEvent extends EventObject, TInput = unknown>(invokeCallback: InvokeCallback<TEvent, AnyEventObject, TInput>): CallbackActorLogic<TEvent, TInput>;
20
94
  export {};
@@ -1,14 +1,13 @@
1
- import { Subscribable, ActorLogic, EventObject, Subscription, AnyActorSystem, ActorRefFrom, Snapshot, HomomorphicOmit } from "../types.js";
1
+ import { Subscribable, ActorLogic, EventObject, Subscription, AnyActorSystem, ActorRefFrom, Snapshot } from "../types.js";
2
2
  export type ObservableSnapshot<TContext, TInput> = Snapshot<undefined> & {
3
3
  context: TContext | undefined;
4
4
  input: TInput | undefined;
5
5
  _subscription: Subscription | undefined;
6
6
  };
7
- export type ObservablePersistedState<TContext, TInput> = HomomorphicOmit<ObservableSnapshot<TContext, TInput>, '_subscription'>;
8
7
  export type ObservableActorLogic<TContext, TInput> = ActorLogic<ObservableSnapshot<TContext, TInput>, {
9
8
  type: string;
10
9
  [k: string]: unknown;
11
- }, TInput, ObservablePersistedState<TContext, TInput>, AnyActorSystem>;
10
+ }, TInput, AnyActorSystem>;
12
11
  export type ObservableActorRef<TContext> = ActorRefFrom<ObservableActorLogic<TContext, any>>;
13
12
  export declare function fromObservable<TContext, TInput>(observableCreator: ({ input, system }: {
14
13
  input: TInput;
@@ -18,7 +18,6 @@ export type PromiseActorLogic<TOutput, TInput = unknown> = ActorLogic<PromiseSna
18
18
  type: string;
19
19
  [k: string]: unknown;
20
20
  }, TInput, // input
21
- PromiseSnapshot<TOutput, TInput>, // persisted state
22
21
  ActorSystem<any>>;
23
22
  export type PromiseActorRef<TOutput> = ActorRefFrom<PromiseActorLogic<TOutput, unknown>>;
24
23
  export declare function fromPromise<TOutput, TInput = unknown>(promiseCreator: ({ input, system }: {
@@ -1,8 +1,8 @@
1
- import { ActorLogic, ActorContext, ActorSystem, EventObject, ActorRefFrom, AnyActorSystem, Snapshot } from "../types.js";
1
+ import { ActorLogic, ActorScope, ActorSystem, EventObject, ActorRefFrom, AnyActorSystem, Snapshot } from "../types.js";
2
2
  export type TransitionSnapshot<TContext> = Snapshot<undefined> & {
3
3
  context: TContext;
4
4
  };
5
- export type TransitionActorLogic<TContext, TEvent extends EventObject, TInput> = ActorLogic<TransitionSnapshot<TContext>, TEvent, TInput, TransitionSnapshot<TContext>, AnyActorSystem>;
5
+ export type TransitionActorLogic<TContext, TEvent extends EventObject, TInput> = ActorLogic<TransitionSnapshot<TContext>, TEvent, TInput, AnyActorSystem>;
6
6
  export type TransitionActorRef<TContext, TEvent extends EventObject> = ActorRefFrom<TransitionActorLogic<TransitionSnapshot<TContext>, TEvent, unknown>>;
7
7
  /**
8
8
  * Returns actor logic from a transition function and its initial state.
@@ -13,7 +13,7 @@ export type TransitionActorRef<TContext, TEvent extends EventObject> = ActorRefF
13
13
  * @param initialContext The initial state of the transition function.
14
14
  * @returns Actor logic
15
15
  */
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 }: {
16
+ export declare function fromTransition<TContext, TEvent extends EventObject, TSystem extends ActorSystem<any>, TInput>(transition: (state: TContext, event: TEvent, actorScope: ActorScope<TransitionSnapshot<TContext>, TEvent, TSystem>) => TContext, initialContext: TContext | (({ input, self }: {
17
17
  input: TInput;
18
18
  self: TransitionActorRef<TContext, TEvent>;
19
19
  }) => TContext)): TransitionActorLogic<TContext, TEvent, TInput>;
@@ -1,20 +1,19 @@
1
1
  import type { EventObject, StateValue, MachineContext, ParameterizedObject, AnyState, NoRequiredParams, NoInfer, WithDynamicParams } from "./types.js";
2
- export type GuardPredicate<TContext extends MachineContext, TExpressionEvent extends EventObject, TExpressionGuard extends ParameterizedObject | undefined, TGuard extends ParameterizedObject> = {
3
- (args: GuardArgs<TContext, TExpressionEvent, TExpressionGuard>): boolean;
2
+ export type GuardPredicate<TContext extends MachineContext, TExpressionEvent extends EventObject, TParams extends ParameterizedObject['params'] | undefined, TGuard extends ParameterizedObject> = {
3
+ (args: GuardArgs<TContext, TExpressionEvent>, params: TParams): boolean;
4
4
  _out_TGuard?: TGuard;
5
5
  };
6
- export interface GuardArgs<TContext extends MachineContext, TExpressionEvent extends EventObject, TExpressionGuard extends ParameterizedObject | undefined> {
6
+ export interface GuardArgs<TContext extends MachineContext, TExpressionEvent extends EventObject> {
7
7
  context: TContext;
8
8
  event: TExpressionEvent;
9
- guard: TExpressionGuard;
10
9
  }
11
- export type Guard<TContext extends MachineContext, TExpressionEvent extends EventObject, TExpressionGuard extends ParameterizedObject | undefined, TGuard extends ParameterizedObject> = NoRequiredParams<TGuard> | WithDynamicParams<TContext, TExpressionEvent, TGuard> | GuardPredicate<TContext, TExpressionEvent, TExpressionGuard, TGuard>;
10
+ export type Guard<TContext extends MachineContext, TExpressionEvent extends EventObject, TParams extends ParameterizedObject['params'] | undefined, TGuard extends ParameterizedObject> = NoRequiredParams<TGuard> | WithDynamicParams<TContext, TExpressionEvent, TGuard> | GuardPredicate<TContext, TExpressionEvent, TParams, TGuard>;
12
11
  export type UnknownGuard = UnknownReferencedGuard | UnknownInlineGuard;
13
- type UnknownReferencedGuard = Guard<MachineContext, EventObject, ParameterizedObject, ParameterizedObject>;
12
+ type UnknownReferencedGuard = Guard<MachineContext, EventObject, ParameterizedObject['params'], ParameterizedObject>;
14
13
  type UnknownInlineGuard = Guard<MachineContext, EventObject, undefined, ParameterizedObject>;
15
- export declare function stateIn<TContext extends MachineContext, TExpressionEvent extends EventObject, TExpressionGuard extends ParameterizedObject | undefined>(stateValue: StateValue): GuardPredicate<TContext, TExpressionEvent, TExpressionGuard, any>;
16
- export declare function not<TContext extends MachineContext, TExpressionEvent extends EventObject, TExpressionGuard extends ParameterizedObject | undefined, TGuard extends ParameterizedObject>(guard: Guard<TContext, TExpressionEvent, TExpressionGuard, NoInfer<TGuard>>): GuardPredicate<TContext, TExpressionEvent, TExpressionGuard, TGuard>;
17
- export declare function and<TContext extends MachineContext, TExpressionEvent extends EventObject, TExpressionGuard extends ParameterizedObject | undefined, TGuard extends ParameterizedObject>(guards: ReadonlyArray<Guard<TContext, TExpressionEvent, TExpressionGuard, NoInfer<TGuard>>>): GuardPredicate<TContext, TExpressionEvent, TExpressionGuard, TGuard>;
18
- export declare function or<TContext extends MachineContext, TExpressionEvent extends EventObject, TExpressionGuard extends ParameterizedObject | undefined, TGuard extends ParameterizedObject>(guards: ReadonlyArray<Guard<TContext, TExpressionEvent, TExpressionGuard, NoInfer<TGuard>>>): GuardPredicate<TContext, TExpressionEvent, TExpressionGuard, TGuard>;
14
+ export declare function stateIn<TContext extends MachineContext, TExpressionEvent extends EventObject, TParams extends ParameterizedObject['params'] | undefined>(stateValue: StateValue): GuardPredicate<TContext, TExpressionEvent, TParams, any>;
15
+ export declare function not<TContext extends MachineContext, TExpressionEvent extends EventObject, TParams extends ParameterizedObject['params'] | undefined, TGuard extends ParameterizedObject>(guard: Guard<TContext, TExpressionEvent, TParams, NoInfer<TGuard>>): GuardPredicate<TContext, TExpressionEvent, TParams, TGuard>;
16
+ export declare function and<TContext extends MachineContext, TExpressionEvent extends EventObject, TParams extends ParameterizedObject['params'] | undefined, TGuard extends ParameterizedObject>(guards: ReadonlyArray<Guard<TContext, TExpressionEvent, TParams, NoInfer<TGuard>>>): GuardPredicate<TContext, TExpressionEvent, TParams, TGuard>;
17
+ export declare function or<TContext extends MachineContext, TExpressionEvent extends EventObject, TParams extends ParameterizedObject['params'] | undefined, TGuard extends ParameterizedObject>(guards: ReadonlyArray<Guard<TContext, TExpressionEvent, TParams, NoInfer<TGuard>>>): GuardPredicate<TContext, TExpressionEvent, TParams, TGuard>;
19
18
  export declare function evaluateGuard<TContext extends MachineContext, TExpressionEvent extends EventObject>(guard: UnknownGuard | UnknownInlineGuard, context: TContext, event: TExpressionEvent, state: AnyState): boolean;
20
19
  export {};
@@ -1,6 +1,6 @@
1
1
  import { symbolObservable } from "./symbolObservable.js";
2
2
  import { AreAllImplementationsAssumedToBeProvided, MissingImplementationsError } from "./typegenTypes.js";
3
- import type { ActorSystem, AnyActorLogic, AnyStateMachine, EventFromLogic, PersistedStateFrom, SnapshotFrom, AnyActorRef } from "./types.js";
3
+ import type { ActorSystem, AnyActorLogic, AnyStateMachine, EventFromLogic, SnapshotFrom, Snapshot } from "./types.js";
4
4
  import { ActorRef, EventObject, InteropSubscribable, ActorOptions, Observer, Subscription } from "./types.js";
5
5
  export declare const $$ACTOR_TYPE = 1;
6
6
  export type SnapshotListener<TLogic extends AnyActorLogic> = (state: SnapshotFrom<TLogic>) => void;
@@ -20,6 +20,9 @@ export declare enum ActorStatus {
20
20
  * @deprecated Use `ActorStatus` instead.
21
21
  */
22
22
  export declare const InterpreterStatus: typeof ActorStatus;
23
+ /**
24
+ * 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.
25
+ */
23
26
  export declare class Actor<TLogic extends AnyActorLogic> implements ActorRef<EventFromLogic<TLogic>, SnapshotFrom<TLogic>> {
24
27
  logic: TLogic;
25
28
  /**
@@ -45,12 +48,15 @@ export declare class Actor<TLogic extends AnyActorLogic> implements ActorRef<Eve
45
48
  status: ActorStatus;
46
49
  _parent?: ActorRef<any, any>;
47
50
  ref: ActorRef<EventFromLogic<TLogic>, SnapshotFrom<TLogic>>;
48
- private _actorContext;
51
+ private _actorScope;
49
52
  private _systemId;
50
53
  /**
51
54
  * The globally unique process ID for this invocation.
52
55
  */
53
56
  sessionId: string;
57
+ /**
58
+ * The system to which this actor belongs.
59
+ */
54
60
  system: ActorSystem<any>;
55
61
  private _doneEvent?;
56
62
  src?: string;
@@ -64,6 +70,54 @@ export declare class Actor<TLogic extends AnyActorLogic> implements ActorRef<Eve
64
70
  private _initState;
65
71
  private _deferred;
66
72
  private update;
73
+ /**
74
+ * Subscribe an observer to an actor’s snapshot values.
75
+ *
76
+ * @remarks
77
+ * The observer will receive the actor’s snapshot value when it is emitted. The observer can be:
78
+ * - A plain function that receives the latest snapshot, or
79
+ * - An observer object whose `.next(snapshot)` method receives the latest snapshot
80
+ *
81
+ * @example
82
+ * ```ts
83
+ * // Observer as a plain function
84
+ * const subscription = actor.subscribe((snapshot) => {
85
+ * console.log(snapshot);
86
+ * });
87
+ * ```
88
+ *
89
+ * @example
90
+ * ```ts
91
+ * // Observer as an object
92
+ * const subscription = actor.subscribe({
93
+ * next(snapshot) {
94
+ * console.log(snapshot);
95
+ * },
96
+ * error(err) {
97
+ * // ...
98
+ * },
99
+ * complete() {
100
+ * // ...
101
+ * },
102
+ * });
103
+ * ```
104
+ *
105
+ * The return value of `actor.subscribe(observer)` is a subscription object that has an `.unsubscribe()` method. You can call `subscription.unsubscribe()` to unsubscribe the observer:
106
+ *
107
+ * @example
108
+ * ```ts
109
+ * const subscription = actor.subscribe((snapshot) => {
110
+ * // ...
111
+ * });
112
+ *
113
+ * // Unsubscribe the observer
114
+ * subscription.unsubscribe();
115
+ * ```
116
+ *
117
+ * When the actor is stopped, all of its observers will automatically be unsubscribed.
118
+ *
119
+ * @param observer - Either a plain function that receives the latest snapshot, or an observer object whose `.next(snapshot)` method receives the latest snapshot
120
+ */
67
121
  subscribe(observer: Observer<SnapshotFrom<TLogic>>): Subscription;
68
122
  subscribe(nextListener?: (state: SnapshotFrom<TLogic>) => void, errorListener?: (error: any) => void, completeListener?: () => void): Subscription;
69
123
  /**
@@ -85,20 +139,27 @@ export declare class Actor<TLogic extends AnyActorLogic> implements ActorRef<Eve
85
139
  * @param event The event to send
86
140
  */
87
141
  send(event: EventFromLogic<TLogic>): void;
88
- delaySend(params: {
89
- event: EventObject;
90
- id: string | undefined;
91
- delay: number;
92
- to?: AnyActorRef;
93
- }): void;
94
- cancel(sendId: string | number): void;
95
142
  private attachDevTools;
96
143
  toJSON(): {
97
144
  xstate$$type: number;
98
145
  id: string;
99
146
  };
100
- getPersistedState(): PersistedStateFrom<TLogic> | undefined;
147
+ getPersistedState(): Snapshot<unknown>;
101
148
  [symbolObservable](): InteropSubscribable<SnapshotFrom<TLogic>>;
149
+ /**
150
+ * Read an actor’s snapshot synchronously.
151
+ *
152
+ * @remarks
153
+ * The snapshot represent an actor's last emitted value.
154
+ *
155
+ * When an actor receives an event, its internal state may change.
156
+ * An actor may emit a snapshot when a state transition occurs.
157
+ *
158
+ * Note that some actors, such as callback actors generated with `fromCallback`, will not emit snapshots.
159
+ *
160
+ * @see {@link Actor.subscribe} to subscribe to an actor’s snapshot values.
161
+ * @see {@link Actor.getPersistedState} to persist the internal state of an actor (which is more than just a snapshot).
162
+ */
102
163
  getSnapshot(): SnapshotFrom<TLogic>;
103
164
  }
104
165
  /**
@@ -1,5 +1,5 @@
1
- import { ActorRefFrom, AnyActorContext, AnyActorLogic, AnyActorRef, AnyEventObject, AnyState, InputFrom, IsLiteralString, ProvidedActor } from "./types.js";
2
- type SpawnOptions<TActor extends ProvidedActor, TSrc extends TActor['src']> = TActor extends {
1
+ import { ActorRefFrom, AnyActorScope, AnyActorLogic, AnyActorRef, AnyEventObject, AnyState, InputFrom, IsLiteralString, ProvidedActor } from "./types.js";
2
+ export type SpawnOptions<TActor extends ProvidedActor, TSrc extends TActor['src']> = TActor extends {
3
3
  src: TSrc;
4
4
  } ? 'id' extends keyof TActor ? [
5
5
  options: {
@@ -24,5 +24,4 @@ export type Spawner<TActor extends ProvidedActor> = IsLiteralString<TActor['src'
24
24
  input?: unknown;
25
25
  syncSnapshot?: boolean;
26
26
  }) => TLogic extends string ? AnyActorRef : ActorRefFrom<TLogic>;
27
- export declare function createSpawner(actorContext: AnyActorContext, { machine, context }: AnyState, event: AnyEventObject, spawnedChildren: Record<string, AnyActorRef>): Spawner<any>;
28
- export {};
27
+ export declare function createSpawner(actorScope: AnyActorScope, { machine, context }: AnyState, event: AnyEventObject, spawnedChildren: Record<string, AnyActorRef>): Spawner<any>;
@@ -1,6 +1,6 @@
1
1
  import { State } from "./State.js";
2
2
  import type { StateNode } from "./StateNode.js";
3
- import { AnyActorContext, AnyEventObject, AnyHistoryValue, AnyState, AnyStateNode, AnyTransitionDefinition, DelayedTransitionDefinition, EventObject, InitialTransitionConfig, InitialTransitionDefinition, MachineContext, StateValue, StateValueMap, TransitionDefinition, TODO, UnknownAction, AnyTransitionConfig } from "./types.js";
3
+ import { AnyEventObject, AnyHistoryValue, AnyState, AnyStateNode, AnyTransitionDefinition, DelayedTransitionDefinition, EventObject, InitialTransitionConfig, InitialTransitionDefinition, MachineContext, StateValue, StateValueMap, TransitionDefinition, TODO, UnknownAction, AnyTransitionConfig, AnyActorScope } from "./types.js";
4
4
  type Configuration<TContext extends MachineContext, TE extends EventObject> = Iterable<StateNode<TContext, TE>>;
5
5
  type AnyConfiguration = Configuration<any, any>;
6
6
  type AdjList = Map<AnyStateNode, Array<AnyStateNode>>;
@@ -44,15 +44,10 @@ export declare function transitionNode<TContext extends MachineContext, TEvent e
44
44
  export declare function removeConflictingTransitions(enabledTransitions: Array<AnyTransitionDefinition>, configuration: Set<AnyStateNode>, historyValue: AnyHistoryValue): Array<AnyTransitionDefinition>;
45
45
  /**
46
46
  * https://www.w3.org/TR/scxml/#microstepProcedure
47
- *
48
- * @private
49
- * @param transitions
50
- * @param currentState
51
- * @param mutConfiguration
52
47
  */
53
- export declare function microstep<TContext extends MachineContext, TEvent extends EventObject>(transitions: Array<AnyTransitionDefinition>, currentState: AnyState, actorCtx: AnyActorContext, event: AnyEventObject, isInitial: boolean, internalQueue: Array<AnyEventObject>): AnyState;
54
- export declare function resolveActionsAndContext(currentState: AnyState, event: AnyEventObject, actorCtx: AnyActorContext, actions: UnknownAction[], internalQueue: AnyEventObject[], deferredActorIds?: string[]): AnyState;
55
- export declare function macrostep(state: AnyState, event: EventObject, actorCtx: AnyActorContext, internalQueue?: AnyEventObject[]): {
48
+ export declare function microstep<TContext extends MachineContext, TEvent extends EventObject>(transitions: Array<AnyTransitionDefinition>, currentState: AnyState, actorScope: AnyActorScope, event: AnyEventObject, isInitial: boolean, internalQueue: Array<AnyEventObject>): AnyState;
49
+ export declare function resolveActionsAndContext(currentState: AnyState, event: AnyEventObject, actorScope: AnyActorScope, actions: UnknownAction[], internalQueue: AnyEventObject[], deferredActorIds?: string[]): AnyState;
50
+ export declare function macrostep(state: AnyState, event: EventObject, actorScope: AnyActorScope, internalQueue?: AnyEventObject[]): {
56
51
  state: typeof state;
57
52
  microstates: Array<typeof state>;
58
53
  };