xstate 5.0.0-beta.14 → 5.0.0-beta.16

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 -3
  2. package/actions/dist/xstate-actions.cjs.mjs +0 -2
  3. package/actions/dist/xstate-actions.development.cjs.js +1 -3
  4. package/actions/dist/xstate-actions.development.esm.js +1 -1
  5. package/actions/dist/xstate-actions.esm.js +1 -1
  6. package/actions/dist/xstate-actions.umd.min.js +1 -1
  7. package/actions/dist/xstate-actions.umd.min.js.map +1 -1
  8. package/actors/dist/xstate-actors.cjs.js +1 -1
  9. package/actors/dist/xstate-actors.development.cjs.js +1 -1
  10. package/actors/dist/xstate-actors.development.esm.js +1 -1
  11. package/actors/dist/xstate-actors.esm.js +1 -1
  12. package/actors/dist/xstate-actors.umd.min.js +1 -1
  13. package/actors/dist/xstate-actors.umd.min.js.map +1 -1
  14. package/dist/{actions-444a17c3.esm.js → actions-0386b622.esm.js} +934 -997
  15. package/dist/{actions-73b8d456.development.cjs.js → actions-0f903c0d.development.cjs.js} +863 -928
  16. package/dist/{actions-17c3bcfa.cjs.js → actions-6b9073db.cjs.js} +934 -999
  17. package/dist/{actions-60622c0c.development.esm.js → actions-6f7fbc84.development.esm.js} +863 -926
  18. package/dist/declarations/src/State.d.ts +1 -11
  19. package/dist/declarations/src/StateMachine.d.ts +4 -11
  20. package/dist/declarations/src/actionTypes.d.ts +1 -1
  21. package/dist/declarations/src/actions/assign.d.ts +2 -2
  22. package/dist/declarations/src/actions/cancel.d.ts +2 -2
  23. package/dist/declarations/src/actions/send.d.ts +12 -22
  24. package/dist/declarations/src/actions/stop.d.ts +2 -2
  25. package/dist/declarations/src/actions.d.ts +1 -4
  26. package/dist/declarations/src/actors/callback.d.ts +3 -3
  27. package/dist/declarations/src/actors/index.d.ts +1 -1
  28. package/dist/declarations/src/actors/promise.d.ts +13 -3
  29. package/dist/declarations/src/guards.d.ts +1 -1
  30. package/dist/declarations/src/interpreter.d.ts +2 -2
  31. package/dist/declarations/src/stateUtils.d.ts +3 -2
  32. package/dist/declarations/src/types.d.ts +44 -71
  33. package/dist/declarations/src/utils.d.ts +3 -3
  34. package/dist/xstate.cjs.js +44 -59
  35. package/dist/xstate.development.cjs.js +44 -59
  36. package/dist/xstate.development.esm.js +45 -60
  37. package/dist/xstate.esm.js +45 -60
  38. package/dist/xstate.umd.min.js +1 -1
  39. package/dist/xstate.umd.min.js.map +1 -1
  40. package/guards/dist/xstate-guards.cjs.js +1 -1
  41. package/guards/dist/xstate-guards.development.cjs.js +1 -1
  42. package/guards/dist/xstate-guards.development.esm.js +1 -1
  43. package/guards/dist/xstate-guards.esm.js +1 -1
  44. package/guards/dist/xstate-guards.umd.min.js +1 -1
  45. package/guards/dist/xstate-guards.umd.min.js.map +1 -1
  46. package/package.json +2 -1
@@ -2,8 +2,8 @@ import type { StateNode } from "./StateNode.js";
2
2
  import type { State } from "./State.js";
3
3
  import type { ActorStatus, Clock, Interpreter } from "./interpreter.js";
4
4
  import type { StateMachine } from "./StateMachine.js";
5
- import type { LifecycleSignal } from "./actors/index.js";
6
5
  import { TypegenDisabled, ResolveTypegenMeta, TypegenConstraint, MarkAllImplementationsAsProvided, AreAllImplementationsAssumedToBeProvided } from "./typegenTypes.js";
6
+ import { PromiseEvent } from "./actors/promise.js";
7
7
  export type AnyFunction = (...args: any[]) => any;
8
8
  type ReturnTypeOrValue<T> = T extends AnyFunction ? ReturnType<T> : T;
9
9
  export type IsNever<T> = [T] extends [never] ? true : false;
@@ -54,6 +54,8 @@ export interface BuiltInActionObject extends ParameterizedObject {
54
54
  export interface UnifiedArg<TContext extends MachineContext, TEvent extends EventObject> {
55
55
  context: TContext;
56
56
  event: TEvent;
57
+ self: ActorRef<TEvent>;
58
+ system: ActorSystem<any>;
57
59
  }
58
60
  export interface BaseDynamicActionObject<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject, TResolvedAction extends BaseActionObject, TDynamicParams extends Record<string, any>> {
59
61
  type: `xstate.${string}`;
@@ -64,16 +66,13 @@ export interface BaseDynamicActionObject<TContext extends MachineContext, TExpre
64
66
  * The original action object
65
67
  */
66
68
  action: ParameterizedObject;
67
- actorContext: AnyActorContext | undefined;
69
+ actorContext: AnyActorContext;
68
70
  }) => [AnyState, TResolvedAction];
69
71
  /** @deprecated an internal signature that doesn't exist at runtime. Its existence helps TS to choose a better code path in the inference algorithm */
70
- (args: {
71
- context: TContext;
72
- event: TExpressionEvent;
73
- } & ActionMeta<TEvent, ParameterizedObject>): void;
72
+ (args: ActionArgs<TContext, TExpressionEvent, ParameterizedObject>): void;
74
73
  }
75
74
  export type MachineContext = Record<string, any>;
76
- export interface ActionMeta<TEvent extends EventObject, TAction extends ParameterizedObject = ParameterizedObject> extends StateMeta<TEvent> {
75
+ export interface ActionArgs<TContext extends MachineContext, TEvent extends EventObject, TAction extends ParameterizedObject = ParameterizedObject> extends UnifiedArg<TContext, TEvent> {
77
76
  action: TAction;
78
77
  }
79
78
  export type Spawner = <T extends ActorLogic<any, any> | string>(// TODO: read string from machine logic keys
@@ -82,26 +81,23 @@ logic: T, options?: Partial<{
82
81
  systemId?: string;
83
82
  input: any;
84
83
  }>) => T extends ActorLogic<infer TActorEvent, infer TActorEmitted, infer _, infer __, infer ___> ? ActorRef<TActorEvent, TActorEmitted> : ActorRef<any, any>;
85
- export interface AssignMeta<TExpressionEvent extends EventObject, _TEvent extends EventObject> extends StateMeta<TExpressionEvent> {
84
+ export interface AssignArgs<TContext extends MachineContext, TExpressionEvent extends EventObject> extends ActionArgs<TContext, TExpressionEvent> {
86
85
  action: BaseActionObject;
87
86
  event: TExpressionEvent;
88
87
  spawn: Spawner;
89
88
  }
90
- export type ActionFunction<TContext extends MachineContext, TExpressionEvent extends EventObject, TAction extends ParameterizedObject = ParameterizedObject, TEvent extends EventObject = TExpressionEvent> = (args: {
91
- context: TContext;
92
- event: TExpressionEvent;
93
- } & ActionMeta<TEvent, TAction>) => void;
89
+ export type ActionFunction<TContext extends MachineContext, TExpressionEvent extends EventObject, TAction extends ParameterizedObject = ParameterizedObject> = (args: ActionArgs<TContext, TExpressionEvent, TAction>) => void;
94
90
  export interface ChooseCondition<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject = TExpressionEvent> {
95
91
  guard?: GuardConfig<TContext, TExpressionEvent>;
96
92
  actions: Actions<TContext, TExpressionEvent, TEvent>;
97
93
  }
98
- export type Action<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject = TExpressionEvent> = ActionType | ParameterizedObject | ActionFunction<TContext, TExpressionEvent, ParameterizedObject, TEvent> | BaseDynamicActionObject<TContext, TExpressionEvent, TEvent, any, any>;
94
+ export type Action<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject = TExpressionEvent> = ActionType | ParameterizedObject | ActionFunction<TContext, TExpressionEvent, ParameterizedObject> | BaseDynamicActionObject<TContext, TExpressionEvent, TEvent, any, any>;
99
95
  /**
100
96
  * Extracts action objects that have no extra properties.
101
97
  */
102
98
  type SimpleActionsFrom<T extends ParameterizedObject> = ParameterizedObject extends T ? T : ExtractWithSimpleSupport<T>;
103
99
  export type BaseAction<TContext extends MachineContext, TExpressionEvent extends EventObject, TAction extends ParameterizedObject, TEvent extends EventObject> = BaseDynamicActionObject<TContext, TExpressionEvent, TEvent, any, // TODO: at the very least this should include TAction, but probably at a covariant position or something, we really need to rethink how action objects are typed
104
- any> | TAction | SimpleActionsFrom<TAction>['type'] | ActionFunction<TContext, TExpressionEvent, TAction, TEvent>;
100
+ any> | TAction | SimpleActionsFrom<TAction>['type'] | ActionFunction<TContext, TExpressionEvent, TAction>;
105
101
  export type BaseActions<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject, TAction extends ParameterizedObject> = SingleOrArray<BaseAction<TContext, TExpressionEvent, TAction, TEvent>>;
106
102
  export type Actions<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject = TExpressionEvent> = SingleOrArray<Action<TContext, TEvent>>;
107
103
  export type StateKey = string | AnyState;
@@ -118,7 +114,7 @@ export type StateValue = string | StateValueMap;
118
114
  export type GuardPredicate<TContext extends MachineContext, TEvent extends EventObject> = (args: {
119
115
  context: TContext;
120
116
  event: TEvent;
121
- } & GuardMeta<TContext, TEvent>) => boolean;
117
+ } & GuardArgs<TContext, TEvent>) => boolean;
122
118
  export interface DefaultGuardObject<TContext extends MachineContext, TEvent extends EventObject> extends ParameterizedObject {
123
119
  /**
124
120
  * Nested guards
@@ -127,7 +123,7 @@ export interface DefaultGuardObject<TContext extends MachineContext, TEvent exte
127
123
  predicate?: GuardPredicate<TContext, TEvent>;
128
124
  }
129
125
  export type GuardEvaluator<TContext extends MachineContext, TEvent extends EventObject> = (guard: GuardDefinition<TContext, TEvent>, context: TContext, event: TEvent, state: State<TContext, TEvent>) => boolean;
130
- export interface GuardMeta<TContext extends MachineContext, TEvent extends EventObject> {
126
+ export interface GuardArgs<TContext extends MachineContext, TEvent extends EventObject> {
131
127
  state: State<TContext, TEvent, any>;
132
128
  guard: GuardDefinition<TContext, TEvent>;
133
129
  evaluate: GuardEvaluator<TContext, TEvent>;
@@ -218,7 +214,7 @@ export interface Delay {
218
214
  delay: number;
219
215
  }
220
216
  export type DelayedTransitions<TContext extends MachineContext, TEvent extends EventObject> = Record<string | number, string | SingleOrArray<TransitionConfig<TContext, TEvent>>> | Array<TransitionConfig<TContext, TEvent> & {
221
- delay: number | string | Expr<TContext, TEvent, number>;
217
+ delay: number | string | ((args: UnifiedArg<TContext, TEvent>) => number);
222
218
  }>;
223
219
  export type StateTypes = 'atomic' | 'compound' | 'parallel' | 'final' | 'history' | string;
224
220
  export type SingleOrArray<T> = T[] | T;
@@ -344,10 +340,6 @@ export interface StateNodeConfig<TContext extends MachineContext, TEvent extends
344
340
  * `#id` syntax.
345
341
  */
346
342
  id?: string | undefined;
347
- /**
348
- * The string delimiter for serializing the path to a string. The default is "."
349
- */
350
- delimiter?: string;
351
343
  /**
352
344
  * The order this state node appears. Corresponds to the implicit document order.
353
345
  */
@@ -385,7 +377,6 @@ export interface StateNodeDefinition<TContext extends MachineContext, TEvent ext
385
377
  tags: string[];
386
378
  }
387
379
  export interface StateMachineDefinition<TContext extends MachineContext, TEvent extends EventObject> extends StateNodeDefinition<TContext, TEvent> {
388
- context: TContext;
389
380
  }
390
381
  export type AnyStateNode = StateNode<any, any>;
391
382
  export type AnyStateNodeDefinition = StateNodeDefinition<any, any>;
@@ -429,14 +420,13 @@ export interface MachineImplementationsSimplified<TContext extends MachineContex
429
420
  }
430
421
  type MachineImplementationsActions<TContext extends MachineContext, TResolvedTypesMeta, TEventsCausingActions = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'eventsCausingActions'>, TIndexedEvents = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedEvents'>> = {
431
422
  [K in keyof TEventsCausingActions]?: BaseDynamicActionObject<TContext, Cast<Prop<TIndexedEvents, TEventsCausingActions[K]>, EventObject>, Cast<Prop<TIndexedEvents, keyof TIndexedEvents>, EventObject>, any, // TODO: this should receive something like `Cast<Prop<TIndexedActions, K>, ParameterizedObject>`, but at the moment builtin actions expect Resolved*Action here and this should be simplified somehow
432
- any> | ActionFunction<TContext, Cast<Prop<TIndexedEvents, TEventsCausingActions[K]>, EventObject>, ParameterizedObject, // TODO: when bringing back parametrized actions this should accept something like `Cast<Prop<TIndexedActions, K>, ParameterizedObject>`. At the moment we need to keep this type argument consistent with what is provided to the fake callable signature within `BaseDynamicActionObject`
433
- Cast<Prop<TIndexedEvents, keyof TIndexedEvents>, EventObject>>;
423
+ any> | ActionFunction<TContext, Cast<Prop<TIndexedEvents, TEventsCausingActions[K]>, EventObject>, ParameterizedObject>;
434
424
  };
435
425
  type MachineImplementationsDelays<TContext extends MachineContext, TResolvedTypesMeta, TEventsCausingDelays = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'eventsCausingDelays'>, TIndexedEvents = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedEvents'>> = {
436
426
  [K in keyof TEventsCausingDelays]?: DelayConfig<TContext, Cast<Prop<TIndexedEvents, TEventsCausingDelays[K]>, EventObject>>;
437
427
  };
438
428
  type MachineImplementationsGuards<TContext extends MachineContext, TResolvedTypesMeta, TEventsCausingGuards = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'eventsCausingGuards'>, TIndexedEvents = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedEvents'>> = {
439
- [K in keyof TEventsCausingGuards]?: GuardPredicate<TContext, Cast<Prop<TIndexedEvents, TEventsCausingGuards[K]>, EventObject>>;
429
+ [K in keyof TEventsCausingGuards]?: GuardPredicate<TContext, Cast<Prop<TIndexedEvents, TEventsCausingGuards[K]>, EventObject>> | GuardConfig<TContext, Cast<Prop<TIndexedEvents, TEventsCausingGuards[K]>, EventObject>>;
440
430
  };
441
431
  type MachineImplementationsActors<TContext extends MachineContext, TResolvedTypesMeta, TEventsCausingActors = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'eventsCausingActors'>, TIndexedEvents = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedEvents'>, _TInvokeSrcNameMap = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'invokeSrcNameMap'>> = {
442
432
  [K in keyof TEventsCausingActors]?: AnyActorLogic | {
@@ -450,19 +440,19 @@ type MakeKeysRequired<T extends string> = {
450
440
  type MaybeMakeMissingImplementationsRequired<TImplementationType, TMissingImplementationsForType, TRequireMissingImplementations> = TRequireMissingImplementations extends true ? IsNever<TMissingImplementationsForType> extends true ? {} : {
451
441
  [K in Cast<TImplementationType, string>]: MakeKeysRequired<Cast<TMissingImplementationsForType, string>>;
452
442
  } : {};
453
- type GenerateActionsImplementationsPart<TContext extends MachineContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> = MaybeMakeMissingImplementationsRequired<'actions', Prop<TMissingImplementations, 'actions'>, TRequireMissingImplementations> & {
443
+ type GenerateActionsImplementationsPart<TContext extends MachineContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> = Compute<MaybeMakeMissingImplementationsRequired<'actions', Prop<TMissingImplementations, 'actions'>, TRequireMissingImplementations> & {
454
444
  actions?: MachineImplementationsActions<TContext, TResolvedTypesMeta>;
455
- };
456
- type GenerateDelaysImplementationsPart<TContext extends MachineContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> = MaybeMakeMissingImplementationsRequired<'delays', Prop<TMissingImplementations, 'delays'>, TRequireMissingImplementations> & {
445
+ }>;
446
+ type GenerateActorsImplementationsPart<TContext extends MachineContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> = Compute<MaybeMakeMissingImplementationsRequired<'actors', Prop<TMissingImplementations, 'actors'>, TRequireMissingImplementations> & {
447
+ actors?: MachineImplementationsActors<TContext, TResolvedTypesMeta>;
448
+ }>;
449
+ type GenerateDelaysImplementationsPart<TContext extends MachineContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> = Compute<MaybeMakeMissingImplementationsRequired<'delays', Prop<TMissingImplementations, 'delays'>, TRequireMissingImplementations> & {
457
450
  delays?: MachineImplementationsDelays<TContext, TResolvedTypesMeta>;
458
- };
459
- type GenerateGuardsImplementationsPart<TContext extends MachineContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> = MaybeMakeMissingImplementationsRequired<'guards', Prop<TMissingImplementations, 'guards'>, TRequireMissingImplementations> & {
451
+ }>;
452
+ type GenerateGuardsImplementationsPart<TContext extends MachineContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> = Compute<MaybeMakeMissingImplementationsRequired<'guards', Prop<TMissingImplementations, 'guards'>, TRequireMissingImplementations> & {
460
453
  guards?: MachineImplementationsGuards<TContext, TResolvedTypesMeta>;
461
- };
462
- type GenerateActorsImplementationsPart<TContext extends MachineContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> = MaybeMakeMissingImplementationsRequired<'actors', Prop<TMissingImplementations, 'actors'>, TRequireMissingImplementations> & {
463
- actors?: MachineImplementationsActors<TContext, TResolvedTypesMeta>;
464
- };
465
- export type InternalMachineImplementations<TContext extends MachineContext, _TEvent extends EventObject, TResolvedTypesMeta, TRequireMissingImplementations extends boolean = false, TMissingImplementations = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'missingImplementations'>> = GenerateActionsImplementationsPart<TContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> & GenerateDelaysImplementationsPart<TContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> & GenerateGuardsImplementationsPart<TContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> & GenerateActorsImplementationsPart<TContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations>;
454
+ }>;
455
+ export type InternalMachineImplementations<TContext extends MachineContext, _TEvent extends EventObject, TResolvedTypesMeta, TRequireMissingImplementations extends boolean = false, TMissingImplementations = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'missingImplementations'>> = GenerateActionsImplementationsPart<TContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> & GenerateActorsImplementationsPart<TContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> & GenerateDelaysImplementationsPart<TContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> & GenerateGuardsImplementationsPart<TContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations>;
466
456
  export type MachineImplementations<TContext extends MachineContext, TEvent extends EventObject, TAction extends ParameterizedObject = ParameterizedObject, TActorMap extends ActorMap = ActorMap, TTypesMeta extends TypegenConstraint = TypegenDisabled> = InternalMachineImplementations<TContext, TEvent, ResolveTypegenMeta<TTypesMeta, TEvent, TAction, TActorMap>>;
467
457
  type InitialContext<TContext extends MachineContext> = TContext | ContextFactory<TContext>;
468
458
  export type ContextFactory<TContext extends MachineContext> = ({ spawn, input }: {
@@ -508,7 +498,7 @@ export type Transitions<TContext extends MachineContext, TEvent extends EventObj
508
498
  export declare enum ActionTypes {
509
499
  Stop = "xstate.stop",
510
500
  Raise = "xstate.raise",
511
- Send = "xstate.send",
501
+ SendTo = "xstate.sendTo",
512
502
  Cancel = "xstate.cancel",
513
503
  Assign = "xstate.assign",
514
504
  After = "xstate.after",
@@ -581,7 +571,7 @@ export interface InvokeActionObject extends BaseActionObject {
581
571
  export interface DynamicStopActionObject<TContext extends MachineContext, TExpressionEvent extends EventObject> {
582
572
  type: ActionTypes.Stop;
583
573
  params: {
584
- actor: string | ActorRef<any> | Expr<TContext, TExpressionEvent, ActorRef<any> | string>;
574
+ actor: string | ActorRef<any> | ((args: UnifiedArg<TContext, TExpressionEvent>) => ActorRef<any> | string);
585
575
  };
586
576
  }
587
577
  export interface StopActionObject {
@@ -590,8 +580,8 @@ export interface StopActionObject {
590
580
  actor: ActorRef<any>;
591
581
  };
592
582
  }
593
- export type DelayExpr<TContext extends MachineContext, TEvent extends EventObject> = ExprWithMeta<TContext, TEvent, number>;
594
- export type LogExpr<TContext extends MachineContext, TEvent extends EventObject> = ExprWithMeta<TContext, TEvent, any>;
583
+ export type DelayExpr<TContext extends MachineContext, TEvent extends EventObject> = (args: UnifiedArg<TContext, TEvent>) => number;
584
+ export type LogExpr<TContext extends MachineContext, TEvent extends EventObject> = (args: UnifiedArg<TContext, TEvent>) => unknown;
595
585
  export interface DynamicLogAction<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject> extends BaseDynamicActionObject<TContext, TExpressionEvent, TEvent, LogActionObject, {
596
586
  label: string | undefined;
597
587
  expr: string | LogExpr<TContext, TExpressionEvent>;
@@ -605,25 +595,21 @@ export interface LogActionObject extends BuiltInActionObject {
605
595
  value: any;
606
596
  };
607
597
  }
608
- export interface SendActionObject<TSentEvent extends EventObject = AnyEventObject> extends BaseActionObject {
609
- type: 'xstate.send';
598
+ export interface SendToActionObject<TSentEvent extends EventObject = AnyEventObject> extends BaseActionObject {
599
+ type: 'xstate.sendTo';
610
600
  params: {
611
- to: ActorRef<TSentEvent> | undefined;
601
+ to: ActorRef<TSentEvent>;
612
602
  event: TSentEvent;
613
603
  delay?: number;
614
604
  id: string | number;
615
- internal: boolean;
616
605
  };
617
606
  }
618
- export type Expr<TContext extends MachineContext, TEvent extends EventObject, T> = (arg: UnifiedArg<TContext, TEvent>) => T;
619
- export type ExprWithMeta<TContext extends MachineContext, TEvent extends EventObject, T> = (args: UnifiedArg<TContext, TEvent> & StateMeta<TEvent>) => T;
620
- export type SendExpr<TContext extends MachineContext, TEvent extends EventObject, TSentEvent extends EventObject = AnyEventObject> = ExprWithMeta<TContext, TEvent, TSentEvent>;
607
+ export type SendExpr<TContext extends MachineContext, TExpressionEvent extends EventObject, TSentEvent extends EventObject = AnyEventObject> = (args: UnifiedArg<TContext, TExpressionEvent>) => TSentEvent;
621
608
  export declare enum SpecialTargets {
622
609
  Parent = "#_parent",
623
610
  Internal = "#_internal"
624
611
  }
625
- export interface SendActionOptions<TContext extends MachineContext, TEvent extends EventObject> extends RaiseActionOptions<TContext, TEvent> {
626
- to?: string | ActorRef<any, any> | ExprWithMeta<TContext, TEvent, string | ActorRef<any, any>>;
612
+ export interface SendToActionOptions<TContext extends MachineContext, TEvent extends EventObject> extends RaiseActionOptions<TContext, TEvent> {
627
613
  }
628
614
  export interface RaiseActionOptions<TContext extends MachineContext, TEvent extends EventObject> {
629
615
  id?: string | number;
@@ -632,13 +618,13 @@ export interface RaiseActionOptions<TContext extends MachineContext, TEvent exte
632
618
  export interface RaiseActionParams<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject> extends RaiseActionOptions<TContext, TExpressionEvent> {
633
619
  event: TEvent | SendExpr<TContext, TExpressionEvent, TEvent>;
634
620
  }
635
- export interface SendActionParams<TContext extends MachineContext, TEvent extends EventObject, TSentEvent extends EventObject = EventObject> extends SendActionOptions<TContext, TEvent> {
621
+ export interface SendToActionParams<TContext extends MachineContext, TEvent extends EventObject, TSentEvent extends EventObject = EventObject> extends SendToActionOptions<TContext, TEvent> {
636
622
  event: TSentEvent | SendExpr<TContext, TEvent, TSentEvent>;
637
623
  }
638
624
  export interface DynamicCancelActionObject<TContext extends MachineContext, TExpressionEvent extends EventObject> {
639
625
  type: ActionTypes.Cancel;
640
626
  params: {
641
- sendId: string | ExprWithMeta<TContext, TExpressionEvent, string>;
627
+ sendId: string | ((args: UnifiedArg<TContext, TExpressionEvent>) => string);
642
628
  };
643
629
  }
644
630
  export interface CancelActionObject extends BaseActionObject {
@@ -647,16 +633,10 @@ export interface CancelActionObject extends BaseActionObject {
647
633
  sendId: string;
648
634
  };
649
635
  }
650
- export type Assigner<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject = TExpressionEvent> = (args: {
651
- context: TContext;
652
- event: TExpressionEvent;
653
- } & AssignMeta<TExpressionEvent, TEvent>) => Partial<TContext>;
654
- export type PartialAssigner<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject, TKey extends keyof TContext> = (args: {
655
- context: TContext;
656
- event: TExpressionEvent;
657
- } & AssignMeta<TExpressionEvent, TEvent>) => TContext[TKey];
658
- export type PropertyAssigner<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject = TExpressionEvent> = {
659
- [K in keyof TContext]?: PartialAssigner<TContext, TExpressionEvent, TEvent, K> | TContext[K];
636
+ export type Assigner<TContext extends MachineContext, TExpressionEvent extends EventObject> = (args: AssignArgs<TContext, TExpressionEvent>) => Partial<TContext>;
637
+ export type PartialAssigner<TContext extends MachineContext, TExpressionEvent extends EventObject, TKey extends keyof TContext> = (args: AssignArgs<TContext, TExpressionEvent>) => TContext[TKey];
638
+ export type PropertyAssigner<TContext extends MachineContext, TExpressionEvent extends EventObject> = {
639
+ [K in keyof TContext]?: PartialAssigner<TContext, TExpressionEvent, K> | TContext[K];
660
640
  };
661
641
  export type Mapper<TContext extends MachineContext, TEvent extends EventObject, TParams extends {}> = (args: {
662
642
  context: TContext;
@@ -673,7 +653,7 @@ export interface AnyAssignAction extends BaseActionObject {
673
653
  assignment: any;
674
654
  }
675
655
  export type DynamicAssignAction<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject = TExpressionEvent> = BaseDynamicActionObject<TContext, TExpressionEvent, TEvent, AssignActionObject<TContext> | RaiseActionObject<TContext, TExpressionEvent>, {
676
- assignment: Assigner<TContext, TExpressionEvent, TEvent> | PropertyAssigner<TContext, TExpressionEvent, TEvent>;
656
+ assignment: Assigner<TContext, TExpressionEvent> | PropertyAssigner<TContext, TExpressionEvent>;
677
657
  }>;
678
658
  export interface AssignActionObject<TContext extends MachineContext> extends BaseActionObject {
679
659
  type: ActionTypes.Assign;
@@ -763,10 +743,6 @@ export interface Segment<TContext extends MachineContext, TEvent extends EventOb
763
743
  */
764
744
  event: TEvent;
765
745
  }
766
- export interface StateMeta<TEvent extends EventObject> {
767
- self: ActorRef<TEvent>;
768
- system: ActorSystem<any>;
769
- }
770
746
  export interface StateLike<TContext extends MachineContext> {
771
747
  value: StateValue;
772
748
  context: TContext;
@@ -778,7 +754,6 @@ export interface StateConfig<TContext extends MachineContext, TEvent extends Eve
778
754
  historyValue?: HistoryValue<TContext, TEvent>;
779
755
  meta?: any;
780
756
  configuration?: Array<StateNode<TContext, TEvent>>;
781
- transitions?: Array<TransitionDefinition<TContext, TEvent>>;
782
757
  children: Record<string, ActorRef<any>>;
783
758
  done?: boolean;
784
759
  output?: any;
@@ -827,7 +802,7 @@ export interface InterpreterOptions<_TActorLogic extends AnyActorLogic> {
827
802
  */
828
803
  src?: string;
829
804
  }
830
- export type AnyInterpreter = Interpreter<any>;
805
+ export type AnyInterpreter = Interpreter<any, any>;
831
806
  export type Observer<T> = {
832
807
  next?: (value: T) => void;
833
808
  error?: (err: any) => void;
@@ -871,9 +846,7 @@ export interface ActorRef<TEvent extends EventObject, TSnapshot = any> extends S
871
846
  src?: string;
872
847
  }
873
848
  export type AnyActorRef = ActorRef<any, any>;
874
- 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, AreAllImplementationsAssumedToBeProvided<TResolvedTypesMeta> extends false ? MarkAllImplementationsAsProvided<TResolvedTypesMeta> : TResolvedTypesMeta>> : R extends Promise<infer U> ? ActorRef<{
875
- type: string;
876
- }, U | undefined> : R extends ActorLogic<infer TEvent, infer TSnapshot> ? ActorRef<TEvent, TSnapshot> : never : never;
849
+ 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, AreAllImplementationsAssumedToBeProvided<TResolvedTypesMeta> extends false ? MarkAllImplementationsAsProvided<TResolvedTypesMeta> : TResolvedTypesMeta>> : R extends Promise<infer U> ? ActorRef<PromiseEvent<U>, U | undefined> : R extends ActorLogic<infer TEvent, infer TSnapshot, infer _, infer __, infer ___> ? ActorRef<TEvent, TSnapshot> : never : never;
877
850
  export type DevToolsAdapter = (service: AnyInterpreter) => void;
878
851
  export type InterpreterFrom<T extends AnyStateMachine | ((...args: any[]) => AnyStateMachine)> = ReturnTypeOrValue<T> extends StateMachine<infer TContext, infer TEvent, any, any, infer TResolvedTypesMeta> ? Interpreter<ActorLogic<TEvent, State<TContext, TEvent, TResolvedTypesMeta>, State<TContext, TEvent, TResolvedTypesMeta>, PersistedMachineState<State<TContext, TEvent, TResolvedTypesMeta>>>> : never;
879
852
  export type MachineImplementationsFrom<T extends AnyStateMachine | ((...args: any[]) => AnyStateMachine), TRequireMissingImplementations extends boolean = false> = ReturnTypeOrValue<T> extends StateMachine<infer TContext, infer TEvent, any, any, infer TResolvedTypesMeta> ? InternalMachineImplementations<TContext, TEvent, TResolvedTypesMeta, TRequireMissingImplementations> : never;
@@ -895,7 +868,7 @@ export interface ActorLogic<TEvent extends EventObject, TSnapshot = any, TIntern
895
868
  */
896
869
  TPersisted = TInternalState, TSystem extends ActorSystem<any> = ActorSystem<any>> {
897
870
  config?: unknown;
898
- transition: (state: TInternalState, message: TEvent | LifecycleSignal, ctx: ActorContext<TEvent, TSnapshot, TSystem>) => TInternalState;
871
+ transition: (state: TInternalState, message: TEvent, ctx: ActorContext<TEvent, TSnapshot, TSystem>) => TInternalState;
899
872
  getInitialState: (actorCtx: ActorContext<TEvent, TSnapshot, any>, input: any) => TInternalState;
900
873
  restoreState?: (persistedState: TPersisted, actorCtx: ActorContext<TEvent, TSnapshot>) => TInternalState;
901
874
  getSnapshot?: (state: TInternalState) => TSnapshot;
@@ -3,10 +3,10 @@ import { NULL_EVENT } from "./constants.js";
3
3
  import type { StateNode } from "./StateNode.js";
4
4
  import type { ActorLogic, AnyEventObject, EventObject, EventType, InvokeConfig, MachineContext, Mapper, Observer, PropertyMapper, ErrorEvent, SingleOrArray, StateLike, StateValue, Subscribable, TransitionConfig, TransitionConfigTarget } from "./types.js";
5
5
  export declare function keys<T extends object>(value: T): Array<keyof T & string>;
6
- export declare function matchesState(parentStateId: StateValue, childStateId: StateValue, delimiter?: string): boolean;
7
- export declare function toStatePath(stateId: string | string[], delimiter: string): string[];
6
+ export declare function matchesState(parentStateId: StateValue, childStateId: StateValue): boolean;
7
+ export declare function toStatePath(stateId: string | string[]): string[];
8
8
  export declare function isStateLike(state: any): state is AnyState;
9
- export declare function toStateValue(stateValue: StateLike<any> | StateValue | string[], delimiter: string): StateValue;
9
+ export declare function toStateValue(stateValue: StateLike<any> | StateValue | string[]): StateValue;
10
10
  export declare function pathToStateValue(statePath: string[]): StateValue;
11
11
  export declare function mapValues<P, O extends Record<string, unknown>>(collection: O, iteratee: (item: O[keyof O], key: keyof O, collection: O, i: number) => P): {
12
12
  [key in keyof O]: P;
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var actors_dist_xstateActors = require('./actions-17c3bcfa.cjs.js');
5
+ var actors_dist_xstateActors = require('./actions-6b9073db.cjs.js');
6
6
  require('../dev/dist/xstate-dev.cjs.js');
7
7
 
8
8
  const EMPTY_OBJECT = {};
@@ -95,7 +95,7 @@ class StateNode {
95
95
  this.key = options._key;
96
96
  this.machine = options._machine;
97
97
  this.path = this.parent ? this.parent.path.concat(this.key) : [];
98
- this.id = this.config.id || [this.machine.id, ...this.path].join(this.machine.delimiter);
98
+ this.id = this.config.id || [this.machine.id, ...this.path].join(actors_dist_xstateActors.STATE_DELIMITER);
99
99
  this.type = this.config.type || (this.config.states && Object.keys(this.config.states).length ? 'compound' : this.config.history ? 'history' : 'atomic');
100
100
  this.description = this.config.description;
101
101
  this.order = this.machine.idMap.size;
@@ -185,9 +185,9 @@ class StateNode {
185
185
  systemId
186
186
  } = invokeConfig;
187
187
  const resolvedSrc = actors_dist_xstateActors.isString(src) ? src : !('type' in src) ? resolvedId : src;
188
- if (!this.machine.options.actors[resolvedId] && typeof src !== 'string' && !('type' in src)) {
189
- this.machine.options.actors = {
190
- ...this.machine.options.actors,
188
+ if (!this.machine.implementations.actors[resolvedId] && typeof src !== 'string' && !('type' in src)) {
189
+ this.machine.implementations.actors = {
190
+ ...this.machine.implementations.actors,
191
191
  // TODO: this should accept `src` as-is
192
192
  [resolvedId]: src
193
193
  };
@@ -318,33 +318,7 @@ class StateNode {
318
318
  }
319
319
 
320
320
  const STATE_IDENTIFIER = '#';
321
- function createDefaultOptions() {
322
- return {
323
- actions: {},
324
- actors: {},
325
- delays: {},
326
- guards: {},
327
- context: {}
328
- };
329
- }
330
321
  class StateMachine {
331
- // TODO: this getter should be removed
332
- getContext(input) {
333
- return this.getContextAndActions(undefined, input)[0];
334
- }
335
- getContextAndActions(actorCtx, input) {
336
- const actions = [];
337
- const {
338
- context
339
- } = this.config;
340
- const resolvedContext = typeof context === 'function' ? context({
341
- spawn: actors_dist_xstateActors.createSpawner(actorCtx?.self, this, undefined,
342
- // TODO: this requires `| undefined` for all referenced dynamic inputs that are spawnable in the context factory,
343
- actors_dist_xstateActors.createInitEvent(input), actions),
344
- input
345
- }) : context;
346
- return [resolvedContext || {}, actions];
347
- }
348
322
  /**
349
323
  * The machine's own version.
350
324
  */
@@ -353,11 +327,10 @@ class StateMachine {
353
327
  /**
354
328
  * The raw config used to create the machine.
355
329
  */
356
- config, options) {
330
+ config, implementations) {
357
331
  this.config = config;
358
332
  this.version = void 0;
359
- this.delimiter = void 0;
360
- this.options = void 0;
333
+ this.implementations = void 0;
361
334
  this.types = void 0;
362
335
  this.__xstatenode = true;
363
336
  this.idMap = new Map();
@@ -371,8 +344,12 @@ class StateMachine {
371
344
  this.__TActorMap = void 0;
372
345
  this.__TResolvedTypesMeta = void 0;
373
346
  this.id = config.id || '(machine)';
374
- this.options = Object.assign(createDefaultOptions(), options);
375
- this.delimiter = this.config.delimiter || actors_dist_xstateActors.STATE_DELIMITER;
347
+ this.implementations = {
348
+ actors: implementations?.actors ?? {},
349
+ actions: implementations?.actions ?? {},
350
+ delays: implementations?.delays ?? {},
351
+ guards: implementations?.guards ?? {}
352
+ };
376
353
  this.version = this.config.version;
377
354
  this.types = this.config.types ?? {};
378
355
  this.transition = this.transition.bind(this);
@@ -400,7 +377,7 @@ class StateMachine {
400
377
  guards,
401
378
  actors,
402
379
  delays
403
- } = this.options;
380
+ } = this.implementations;
404
381
  return new StateMachine(this.config, {
405
382
  actions: {
406
383
  ...actions,
@@ -438,10 +415,9 @@ class StateMachine {
438
415
  done: actors_dist_xstateActors.isInFinalState(configuration)
439
416
  });
440
417
  }
441
- resolveStateValue(stateValue) {
418
+ resolveStateValue(stateValue, ...[context]) {
442
419
  const resolvedStateValue = actors_dist_xstateActors.resolveStateValue(this.root, stateValue);
443
- const resolvedContext = this.getContext();
444
- return this.resolveState(actors_dist_xstateActors.State.from(resolvedStateValue, resolvedContext, this));
420
+ return this.resolveState(actors_dist_xstateActors.State.from(resolvedStateValue, context, this));
445
421
  }
446
422
 
447
423
  /**
@@ -480,22 +456,27 @@ class StateMachine {
480
456
  * The initial state _before_ evaluating any microsteps.
481
457
  * This "pre-initial" state is provided to initial actions executed in the initial state.
482
458
  */
483
- getPreInitialState(actorCtx, input) {
484
- const [context, actions] = this.getContextAndActions(actorCtx, input);
485
- const config = actors_dist_xstateActors.getInitialConfiguration(this.root);
459
+ getPreInitialState(actorCtx, initEvent) {
460
+ const {
461
+ context
462
+ } = this.config;
486
463
  const preInitial = this.resolveState(this.createState({
487
464
  value: {},
488
465
  // TODO: this is computed in state constructor
489
- context,
466
+ context: typeof context !== 'function' && context ? context : {},
490
467
  meta: undefined,
491
- configuration: config,
492
- transitions: [],
468
+ configuration: actors_dist_xstateActors.getInitialConfiguration(this.root),
493
469
  children: {}
494
470
  }));
495
- preInitial._initial = true;
496
- if (actorCtx) {
497
- const [nextState] = actors_dist_xstateActors.resolveActionsAndContext(actions, actors_dist_xstateActors.initEvent, preInitial, actorCtx);
498
- preInitial.children = nextState.children;
471
+ if (typeof context === 'function') {
472
+ const assignment = ({
473
+ spawn,
474
+ event
475
+ }) => context({
476
+ spawn,
477
+ input: event.input
478
+ });
479
+ return actors_dist_xstateActors.resolveActionsAndContext([actors_dist_xstateActors.assign(assignment)], initEvent, preInitial, actorCtx);
499
480
  }
500
481
  return preInitial;
501
482
  }
@@ -506,8 +487,15 @@ class StateMachine {
506
487
  getInitialState(actorCtx, input) {
507
488
  const initEvent = actors_dist_xstateActors.createInitEvent(input); // TODO: fix;
508
489
 
509
- const preInitialState = this.getPreInitialState(actorCtx, input);
510
- const nextState = actors_dist_xstateActors.microstep([], preInitialState, actorCtx, initEvent);
490
+ const preInitialState = this.getPreInitialState(actorCtx, initEvent);
491
+ const nextState = actors_dist_xstateActors.microstep([{
492
+ target: [...preInitialState.configuration].filter(actors_dist_xstateActors.isAtomicStateNode),
493
+ source: this.root,
494
+ reenter: true,
495
+ actions: [],
496
+ eventType: null,
497
+ toJSON: null // TODO: fix
498
+ }], preInitialState, actorCtx, initEvent, true);
511
499
  const {
512
500
  state: macroState
513
501
  } = actors_dist_xstateActors.macrostep(nextState, initEvent, actorCtx);
@@ -526,7 +514,7 @@ class StateMachine {
526
514
  });
527
515
  }
528
516
  getStateNodeById(stateId) {
529
- const fullPath = stateId.split(this.delimiter);
517
+ const fullPath = stateId.split(actors_dist_xstateActors.STATE_DELIMITER);
530
518
  const relativePath = fullPath.slice(1);
531
519
  const resolvedStateId = actors_dist_xstateActors.isStateId(fullPath[0]) ? fullPath[0].slice(STATE_IDENTIFIER.length) : fullPath[0];
532
520
  const stateNode = this.idMap.get(resolvedStateId);
@@ -536,10 +524,7 @@ class StateMachine {
536
524
  return actors_dist_xstateActors.getStateNodeByPath(stateNode, relativePath);
537
525
  }
538
526
  get definition() {
539
- return {
540
- context: this.getContext(),
541
- ...this.root.definition
542
- };
527
+ return this.root.definition;
543
528
  }
544
529
  toJSON() {
545
530
  return this.definition;
@@ -564,7 +549,7 @@ class StateMachine {
564
549
  const actorData = state.children[actorId];
565
550
  const childState = actorData.state;
566
551
  const src = actorData.src;
567
- const logic = src ? actors_dist_xstateActors.resolveReferencedActor(this.options.actors[src])?.src : undefined;
552
+ const logic = src ? actors_dist_xstateActors.resolveReferencedActor(this.implementations.actors[src])?.src : undefined;
568
553
  if (!logic) {
569
554
  return;
570
555
  }
@@ -591,7 +576,7 @@ class StateMachine {
591
576
  if (children[id]) {
592
577
  return;
593
578
  }
594
- const referenced = actors_dist_xstateActors.resolveReferencedActor(this.options.actors[src]);
579
+ const referenced = actors_dist_xstateActors.resolveReferencedActor(this.implementations.actors[src]);
595
580
  if (referenced) {
596
581
  const actorRef = actors_dist_xstateActors.interpret(referenced.src, {
597
582
  id,