@typeonce/effect-machine 0.31.2 → 0.33.0

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 (151) hide show
  1. package/README.md +168 -162
  2. package/dist/Machine.d.ts +495 -284
  3. package/dist/Machine.d.ts.map +1 -1
  4. package/dist/Machine.js +91 -111
  5. package/dist/Machine.js.map +1 -1
  6. package/dist/internal/machine/atom.d.ts +3 -4
  7. package/dist/internal/machine/atom.d.ts.map +1 -1
  8. package/dist/internal/machine/atom.js +0 -2
  9. package/dist/internal/machine/atom.js.map +1 -1
  10. package/dist/internal/machine/childRegistry.d.ts +52 -0
  11. package/dist/internal/machine/childRegistry.d.ts.map +1 -0
  12. package/dist/internal/machine/childRegistry.js +74 -0
  13. package/dist/internal/machine/childRegistry.js.map +1 -0
  14. package/dist/internal/machine/cluster.d.ts +2 -3
  15. package/dist/internal/machine/cluster.d.ts.map +1 -1
  16. package/dist/internal/machine/cluster.js.map +1 -1
  17. package/dist/internal/machine/configuration.d.ts.map +1 -1
  18. package/dist/internal/machine/configuration.js +14 -4
  19. package/dist/internal/machine/configuration.js.map +1 -1
  20. package/dist/internal/machine/executionPlan.d.ts +1 -0
  21. package/dist/internal/machine/executionPlan.d.ts.map +1 -1
  22. package/dist/internal/machine/executionPlan.js +97 -53
  23. package/dist/internal/machine/executionPlan.js.map +1 -1
  24. package/dist/internal/machine/invocation.d.ts.map +1 -1
  25. package/dist/internal/machine/invocation.js +4 -2
  26. package/dist/internal/machine/invocation.js.map +1 -1
  27. package/dist/internal/machine/invocationDefinition.d.ts +35 -0
  28. package/dist/internal/machine/invocationDefinition.d.ts.map +1 -0
  29. package/dist/internal/machine/invocationDefinition.js +21 -0
  30. package/dist/internal/machine/invocationDefinition.js.map +1 -0
  31. package/dist/internal/machine/invocationEvent.d.ts +0 -2
  32. package/dist/internal/machine/invocationEvent.d.ts.map +1 -1
  33. package/dist/internal/machine/invocationEvent.js +0 -8
  34. package/dist/internal/machine/invocationEvent.js.map +1 -1
  35. package/dist/internal/machine/machine.d.ts +21 -43
  36. package/dist/internal/machine/machine.d.ts.map +1 -1
  37. package/dist/internal/machine/machine.js +134 -403
  38. package/dist/internal/machine/machine.js.map +1 -1
  39. package/dist/internal/machine/planner.d.ts +13 -19
  40. package/dist/internal/machine/planner.d.ts.map +1 -1
  41. package/dist/internal/machine/planner.js +63 -35
  42. package/dist/internal/machine/planner.js.map +1 -1
  43. package/dist/internal/machine/process.d.ts +6 -8
  44. package/dist/internal/machine/process.d.ts.map +1 -1
  45. package/dist/internal/machine/process.js +1 -0
  46. package/dist/internal/machine/process.js.map +1 -1
  47. package/dist/internal/machine/protocol.d.ts +2 -2
  48. package/dist/internal/machine/protocol.d.ts.map +1 -1
  49. package/dist/internal/machine/protocol.js +4 -18
  50. package/dist/internal/machine/protocol.js.map +1 -1
  51. package/dist/internal/machine/readiness.d.ts +1 -1
  52. package/dist/internal/machine/readiness.d.ts.map +1 -1
  53. package/dist/internal/machine/requirements.d.ts +4 -0
  54. package/dist/internal/machine/requirements.d.ts.map +1 -0
  55. package/dist/internal/machine/requirements.js +2 -0
  56. package/dist/internal/machine/requirements.js.map +1 -0
  57. package/dist/internal/machine/runtime.d.ts +4 -58
  58. package/dist/internal/machine/runtime.d.ts.map +1 -1
  59. package/dist/internal/machine/runtime.js +1 -69
  60. package/dist/internal/machine/runtime.js.map +1 -1
  61. package/dist/internal/machine/serialization.d.ts.map +1 -1
  62. package/dist/internal/machine/serialization.js +16 -0
  63. package/dist/internal/machine/serialization.js.map +1 -1
  64. package/dist/internal/machine/stateDefinition.d.ts +3 -1
  65. package/dist/internal/machine/stateDefinition.d.ts.map +1 -1
  66. package/dist/internal/machine/stateDefinition.js +36 -2
  67. package/dist/internal/machine/stateDefinition.js.map +1 -1
  68. package/dist/internal/machine/targetBuilder.d.ts +16 -0
  69. package/dist/internal/machine/targetBuilder.d.ts.map +1 -0
  70. package/dist/internal/machine/targetBuilder.js +333 -0
  71. package/dist/internal/machine/targetBuilder.js.map +1 -0
  72. package/dist/internal/machine/topology.js +3 -3
  73. package/dist/internal/machine/topology.js.map +1 -1
  74. package/dist/internal/machine/transition.d.ts +16 -0
  75. package/dist/internal/machine/transition.d.ts.map +1 -0
  76. package/dist/internal/machine/transition.js +2 -0
  77. package/dist/internal/machine/transition.js.map +1 -0
  78. package/dist/internal/testing/machine/finiteModel.d.ts.map +1 -1
  79. package/dist/internal/testing/machine/finiteModel.js +11 -13
  80. package/dist/internal/testing/machine/finiteModel.js.map +1 -1
  81. package/dist/internal/testing/machine/format.d.ts +7 -0
  82. package/dist/internal/testing/machine/format.d.ts.map +1 -0
  83. package/dist/internal/testing/machine/format.js +104 -0
  84. package/dist/internal/testing/machine/format.js.map +1 -0
  85. package/dist/internal/testing/machine/probe.d.ts +1 -1
  86. package/dist/internal/testing/machine/probe.d.ts.map +1 -1
  87. package/dist/internal/testing/machine/probe.js +1 -1
  88. package/dist/internal/testing/machine/probe.js.map +1 -1
  89. package/dist/internal/testing/machine/referenceModel.d.ts.map +1 -1
  90. package/dist/internal/testing/machine/referenceModel.js +15 -19
  91. package/dist/internal/testing/machine/referenceModel.js.map +1 -1
  92. package/dist/internal/testing/machine/trace.d.ts +1 -1
  93. package/dist/internal/testing/machine/trace.d.ts.map +1 -1
  94. package/dist/internal/testing/machine/trace.js +3 -3
  95. package/dist/internal/testing/machine/trace.js.map +1 -1
  96. package/dist/internal/testing/machine/value.d.ts +8 -0
  97. package/dist/internal/testing/machine/value.d.ts.map +1 -0
  98. package/dist/internal/testing/machine/value.js +82 -0
  99. package/dist/internal/testing/machine/value.js.map +1 -0
  100. package/dist/internal/testing/machine/verification.d.ts +2 -13
  101. package/dist/internal/testing/machine/verification.d.ts.map +1 -1
  102. package/dist/internal/testing/machine/verification.js +21 -113
  103. package/dist/internal/testing/machine/verification.js.map +1 -1
  104. package/dist/testing/MachineTest.d.ts +89 -104
  105. package/dist/testing/MachineTest.d.ts.map +1 -1
  106. package/dist/testing/MachineTest.js +70 -84
  107. package/dist/testing/MachineTest.js.map +1 -1
  108. package/dist/unstable/cluster/ClusterMachine.d.ts +10 -13
  109. package/dist/unstable/cluster/ClusterMachine.d.ts.map +1 -1
  110. package/dist/unstable/cluster/ClusterMachine.js +5 -8
  111. package/dist/unstable/cluster/ClusterMachine.js.map +1 -1
  112. package/dist/unstable/reactivity/AtomMachine.d.ts +26 -61
  113. package/dist/unstable/reactivity/AtomMachine.d.ts.map +1 -1
  114. package/dist/unstable/reactivity/AtomMachine.js +17 -26
  115. package/dist/unstable/reactivity/AtomMachine.js.map +1 -1
  116. package/docs/agent-guide.md +45 -45
  117. package/docs/effect-atom-react.md +35 -63
  118. package/docs/machine-review.md +7 -7
  119. package/docs/root-api.md +259 -0
  120. package/package.json +1 -1
  121. package/src/Machine.ts +1053 -538
  122. package/src/internal/machine/atom.ts +3 -13
  123. package/src/internal/machine/childRegistry.ts +141 -0
  124. package/src/internal/machine/cluster.ts +5 -14
  125. package/src/internal/machine/configuration.ts +20 -4
  126. package/src/internal/machine/executionPlan.ts +109 -52
  127. package/src/internal/machine/invocation.ts +10 -6
  128. package/src/internal/machine/invocationDefinition.ts +52 -0
  129. package/src/internal/machine/invocationEvent.ts +0 -8
  130. package/src/internal/machine/machine.ts +222 -716
  131. package/src/internal/machine/planner.ts +74 -62
  132. package/src/internal/machine/process.ts +14 -21
  133. package/src/internal/machine/protocol.ts +9 -32
  134. package/src/internal/machine/readiness.ts +1 -0
  135. package/src/internal/machine/requirements.ts +11 -0
  136. package/src/internal/machine/runtime.ts +17 -186
  137. package/src/internal/machine/serialization.ts +22 -0
  138. package/src/internal/machine/stateDefinition.ts +36 -3
  139. package/src/internal/machine/targetBuilder.ts +525 -0
  140. package/src/internal/machine/topology.ts +3 -3
  141. package/src/internal/machine/transition.ts +26 -0
  142. package/src/internal/testing/machine/finiteModel.ts +23 -24
  143. package/src/internal/testing/machine/format.ts +120 -0
  144. package/src/internal/testing/machine/probe.ts +4 -4
  145. package/src/internal/testing/machine/referenceModel.ts +25 -17
  146. package/src/internal/testing/machine/trace.ts +4 -4
  147. package/src/internal/testing/machine/value.ts +77 -0
  148. package/src/internal/testing/machine/verification.ts +904 -1109
  149. package/src/testing/MachineTest.ts +103 -114
  150. package/src/unstable/cluster/ClusterMachine.ts +10 -20
  151. package/src/unstable/reactivity/AtomMachine.ts +42 -79
package/dist/Machine.d.ts CHANGED
@@ -18,6 +18,7 @@ import type { ChildAlreadyExistsError, InfiniteTransitionError, MachineSchemaDec
18
18
  import * as internal from "./internal/machine/machine.js";
19
19
  import { InitialEventTypeId } from "./internal/machine/machine.js";
20
20
  import type { EnsureExecutable } from "./internal/machine/readiness.js";
21
+ import type { ExcludeCompatibleRuntime } from "./internal/machine/requirements.js";
21
22
  import type * as internalRuntime from "./internal/machine/runtime.js";
22
23
  import type * as StateDefinition from "./internal/machine/stateDefinition.js";
23
24
  import type * as Topology from "./internal/machine/topology.js";
@@ -109,6 +110,8 @@ export interface Machine<States extends Machine.StateSchemas, Events extends Rea
109
110
  * @since 0.4.0
110
111
  */
111
112
  readonly states: States;
113
+ /** Root descriptor for topology and snapshot access. */
114
+ readonly root: State<Extract<Omit<States[""], "~effect/Machine/ExplicitInitial">, Machine.StateNodeConfig>>;
112
115
  /**
113
116
  * Events accepted through public machine input boundaries.
114
117
  *
@@ -186,15 +189,15 @@ export interface Definition<States extends Machine.StateSchemas, Events extends
186
189
  * **Example**
187
190
  *
188
191
  * ```ts
189
- * const counter = definition.handle({
192
+ * const counter = definition.handle({ states: {
190
193
  * Count: {
191
194
  * on: {
192
195
  * Increment: (to) =>
193
- * to.full.Count().resolve(({ event, state, target }) =>
196
+ * to.branch.Count().resolve(({ event, state, target }) =>
194
197
  * target.decoded(new Count({ value: state.value + event.by })))
195
198
  * }
196
199
  * }
197
- * })
200
+ * } })
198
201
  * ```
199
202
  *
200
203
  * @since 0.4.0
@@ -485,7 +488,6 @@ export declare namespace Runtime {
485
488
  };
486
489
  }
487
490
  }
488
- type ExcludeCompatibleRuntime<Requirements, Events, Emits> = Requirements extends Runtime.Requirement<infer RequiredEvents, infer RequiredEmits> ? IsAny<Requirements> extends true ? Requirements : [RequiredEvents] extends [Events] ? [RequiredEmits] extends [Emits] ? never : Requirements : Requirements : Requirements;
489
491
  type IncompatibleRuntime<Requirements, Events, Emits> = Requirements extends Runtime.Requirement<infer RequiredEvents, infer RequiredEmits> ? IsAny<Requirements> extends true ? never : [RequiredEvents] extends [Events] ? [RequiredEmits] extends [Emits] ? never : Requirements : Requirements : never;
490
492
  declare const InvokeTypeId: typeof internal.InvokeTypeId;
491
493
  declare const TransitionTypeId: typeof internal.TransitionTypeId;
@@ -552,37 +554,58 @@ type ValidateCompoundStateNode<Node extends Machine.StateNodeConfig, Children ex
552
554
  type ValidateStateNodeWithoutChildren<Node extends Machine.StateNodeConfig> = "initial" extends keyof Node ? StateDefinitionError<"Atomic states cannot declare an initial child"> : Node extends {
553
555
  readonly type: infer Type;
554
556
  } ? Type extends "final" ? ValidateOutputSchema<Node> : Type extends "active" | undefined ? "output" extends keyof Node ? StateDefinitionError<"Only final and parallel states can declare output"> : unknown : StateDefinitionError<"State node type must be active, final, or parallel"> : "output" extends keyof Node ? StateDefinitionError<"Only final and parallel states can declare output"> : unknown;
555
- type DefineStateTreeInput<States extends Machine.StateSchemas> = {
556
- readonly [Key in keyof States]: DefineStateNodeInput<States[Key]>;
557
- };
558
- type DefineStateNodeInput<Node> = Node extends Machine.TaggedSchema ? Node : Node extends Machine.HistoryStateNodeConfig ? Machine.HistoryStateNodeConfig : Node extends Machine.ChoiceStateNodeConfig ? Machine.ChoiceStateNodeConfig : Node extends {
559
- readonly type: "parallel";
560
- readonly states: infer Children extends Machine.StateSchemas;
561
- } ? Omit<Node, "states"> & {
562
- readonly states: DefineStateTreeInput<Children>;
563
- } : Node extends {
564
- readonly states: infer Children extends Machine.StateSchemas;
565
- } ? Omit<Node, "initial" | "states"> & {
566
- readonly initial: ActiveStateKey<Children> | ChoiceStateKey<Children>;
567
- readonly states: DefineStateTreeInput<Children>;
568
- } : Node;
569
- type ValidateDefinedStates<States extends Machine.StateSchemas> = [States] extends [
570
- Machine.ValidateStateSchemas<States>
571
- ] ? [] : [validation: Machine.ValidateStateSchemas<States>];
572
- type InvalidDefinedStateTreeInput<States extends Machine.StateSchemas> = [States] extends [
573
- Machine.ValidateStateSchemas<States>
574
- ] ? never : States & Machine.ValidateStateSchemas<States>;
575
557
  type ReusableStateNodeConfig = Machine.AtomicStateNodeConfig | Machine.CompoundStateNodeConfig | Machine.ParallelStateNodeConfig;
576
558
  type ReusableStateValidation<Node> = Node extends ReusableStateNodeConfig ? ValidateStateNode<Node, false, "state"> : StateDefinitionError<"Reusable states must be active state nodes", "state">;
577
559
  type ValidateDefinedState<Node> = [Node] extends [ReusableStateValidation<Node>] ? [] : [validation: ReusableStateValidation<Node>];
578
- type InvalidDefinedStateInput<Node> = [Node] extends [ReusableStateValidation<Node>] ? never : Node & ReusableStateValidation<Node>;
579
- interface StateConstructor {
580
- <const Node>(node: Node & DefineStateNodeInput<NoInfer<Node>>, ..._validation: ValidateDefinedState<NoInfer<Node>>): Node;
581
- <const Node>(node: InvalidDefinedStateInput<Node>): never;
560
+ declare const StateTypeId = "~effect/Machine/State";
561
+ /** An immutable state descriptor, usable as a root or a nested state.
562
+ * @category models
563
+ * @since 0.32.0
564
+ */
565
+ export interface State<Node extends Machine.StateNodeConfig> extends Machine.StateAccessors<{
566
+ readonly "": Node;
567
+ }> {
568
+ readonly [StateTypeId]: typeof StateTypeId;
569
+ readonly node: Node;
582
570
  }
583
- interface StatesConstructor {
584
- <const States extends Machine.StateSchemas>(states: States & DefineStateTreeInput<NoInfer<States>>, ..._validation: ValidateDefinedStates<NoInfer<States>>): Machine.DefinedStates<States>;
585
- <const States extends Machine.StateSchemas>(states: InvalidDefinedStateTreeInput<States>): never;
571
+ type NormalizeState<Node, Tag extends string = ""> = Node extends {
572
+ readonly [StateTypeId]: typeof StateTypeId;
573
+ readonly node: infer Config;
574
+ } ? Config : Node extends Machine.TaggedSchema ? Node : "fields" extends keyof Node ? NormalizeStateFields<Node, Tag> : Node extends {
575
+ readonly states: infer Children;
576
+ } ? Children extends Readonly<Record<string, Machine.TaggedSchema>> ? Node : NormalizeStateFields<Node, Tag> : Node;
577
+ type NormalizeStateFields<Node, Tag extends string> = {
578
+ readonly [Key in keyof Node as Key extends "fields" ? "schema" : Key]: Key extends "fields" ? Node[Key] extends Schema.Struct.Fields ? Schema.TaggedStruct<Tag, Node[Key]> : never : Key extends "states" ? {
579
+ readonly [Child in keyof Node[Key]]: NormalizeState<Node[Key][Child], Extract<Child, string>>;
580
+ } : Node[Key];
581
+ };
582
+ type NormalizedState<Node> = Extract<NormalizeState<Node>, Machine.StateNodeConfig>;
583
+ type StateFieldsValidation<Node> = Node extends {
584
+ readonly [StateTypeId]: typeof StateTypeId;
585
+ } | Machine.TaggedSchema ? unknown : (Node extends {
586
+ readonly fields: infer Fields;
587
+ } ? "schema" extends keyof Node ? StateDefinitionError<"Declare fields or schema, not both", ""> : Fields extends Schema.Struct.Fields ? "_tag" extends keyof Fields ? StateDefinitionError<"State fields cannot declare _tag", ""> : unknown : StateDefinitionError<"State fields must be schema fields", ""> : unknown) & (Node extends {
588
+ readonly states: infer Children;
589
+ } ? {
590
+ readonly states: {
591
+ readonly [Key in keyof Children]: StateFieldsValidation<Children[Key]>;
592
+ };
593
+ } : unknown);
594
+ interface StateInput {
595
+ readonly schema?: Machine.TaggedSchema;
596
+ readonly fields?: Schema.Struct.Fields;
597
+ readonly type?: "active" | "parallel" | "final" | "history" | "choice";
598
+ readonly initial?: string;
599
+ readonly states?: Readonly<Record<string, Machine.TaggedSchema | StateInput | {
600
+ readonly [StateTypeId]: typeof StateTypeId;
601
+ readonly node: Machine.StateNodeConfig;
602
+ }>>;
603
+ readonly history?: "shallow" | "deep";
604
+ readonly output?: Schema.Top;
605
+ readonly annotations?: Machine.SchemaLessStateAnnotations;
606
+ }
607
+ interface StateConstructor {
608
+ <const Node extends StateInput>(node: Node & StateFieldsValidation<NoInfer<Node>>, ..._validation: ValidateDefinedState<NormalizeState<NoInfer<Node>>>): State<NormalizedState<Node>>;
586
609
  }
587
610
  type EventProtocolError<Message extends string, Tag extends PropertyKey = never> = {
588
611
  readonly "~effect/Machine/EventProtocolError": Message;
@@ -593,7 +616,6 @@ type DuplicateEventTag<Events extends ReadonlyArray<Machine.TaggedSchema>, Seen
593
616
  ...infer Tail extends ReadonlyArray<Machine.TaggedSchema>
594
617
  ] ? Machine.TagOf<Head> extends infer Tag extends PropertyKey ? Extract<Tag, Seen> | DuplicateEventTag<Tail, Seen | Tag> : never : never;
595
618
  type ValidateInputEventProtocol<InputEvents extends ReadonlyArray<Machine.TaggedSchema>, DuplicateInput extends PropertyKey = DuplicateEventTag<InputEvents>> = [DuplicateInput] extends [never] ? unknown : EventProtocolError<"Public event tags must be unique", DuplicateInput>;
596
- type ValidateEmittedEventProtocol<EmittedEvents extends ReadonlyArray<Machine.TaggedSchema>, DuplicateEmitted extends PropertyKey = DuplicateEventTag<EmittedEvents>> = [DuplicateEmitted] extends [never] ? unknown : EventProtocolError<"Emitted event tags must be unique", DuplicateEmitted>;
597
619
  type ValidateInternalEventProtocol<InputEvents extends ReadonlyArray<Machine.TaggedSchema>, InternalEvents extends ReadonlyArray<Machine.TaggedSchema>, DuplicateInternal extends PropertyKey = DuplicateEventTag<InternalEvents>, Overlap extends PropertyKey = Extract<Machine.TagOf<InputEvents[number]>, Machine.TagOf<InternalEvents[number]>>> = [DuplicateInternal] extends [never] ? [Overlap] extends [never] ? unknown : EventProtocolError<"Public and internal event tags must be disjoint", Overlap> : EventProtocolError<"Internal event tags must be unique", DuplicateInternal>;
598
620
  type ValidateEventProtocolBuilder<Kind extends Machine.EventProtocolKind, Inputs extends ReadonlyArray<Machine.EventProtocolInput<Kind>>, Schemas extends ReadonlyArray<Machine.TaggedSchema> = Machine.EventProtocolInputSchemasOf<Kind, Inputs>, Duplicate extends PropertyKey = DuplicateEventTag<Schemas>> = [Duplicate] extends [never] ? unknown : EventProtocolError<"Event protocol tags must be unique", Duplicate>;
599
621
  declare const SnapshotBuilderStateTypeId: typeof internal.SnapshotBuilderStateTypeId;
@@ -606,7 +628,7 @@ type FromCallable<Arguments extends ReadonlyArray<unknown>, Result> = Arguments
606
628
  (...args: Rest): Result;
607
629
  (...args: Arguments): Result;
608
630
  } : (...args: Arguments) => Result : (...args: Arguments) => Result;
609
- type FromMethod<Arguments extends ReadonlyArray<unknown>, Result> = {
631
+ type FromMethod<in out Arguments extends ReadonlyArray<unknown>, out Result> = {
610
632
  /**
611
633
  * Constructs the selected state from its schema make input while the
612
634
  * machine plans the resulting configuration. The input may be omitted when
@@ -716,12 +738,14 @@ type InitialParallelBuilder<States extends Machine.StateSchemas, Prefix extends
716
738
  readonly [Region in Key]: InitialSnapshotResult<States, Key, Prefix>;
717
739
  }, true>>;
718
740
  };
719
- type FullSnapshotBuilderWithPrefix<States extends Machine.StateSchemas, Prefix extends string = ""> = {
720
- readonly [Key in ActiveStateKey<States>]: FullSnapshotMethod<States, Key, Prefix>;
721
- } & {
722
- readonly [Key in ChoiceStateKey<States>]: () => Machine.ChoiceTargetInstruction<Machine.JoinPath<Prefix, Key>>;
741
+ type FullSnapshotBuilderWithPrefix<in out States extends Machine.StateSchemas, in out Prefix extends string = ""> = {
742
+ readonly [Key in ActiveStateKey<States> | ChoiceStateKey<States>]: Key extends ActiveStateKey<States> ? FullSnapshotMethod<States, Key, Prefix> : () => Machine.ChoiceTargetInstruction<Machine.JoinPath<Prefix, Key>>;
743
+ };
744
+ type FullSnapshotMethod<in out States extends Machine.StateSchemas, in out StateId extends ActiveStateKey<States>, in out Prefix extends string> = {
745
+ readonly [
746
+ /** Constructs this node using schema make input or an already decoded value. */
747
+ Method in Machine.NodeSchema<States[StateId]> extends never ? "from" : "from" | "decoded"]: Method extends "from" ? FromCallable<FullSnapshotFromArguments<States, StateId, Prefix>, Machine.StateConstruction<FullSnapshotResult<States, StateId, Prefix>>> : (...args: FullSnapshotArguments<States, StateId, Prefix>) => FullSnapshotResult<States, StateId, Prefix>;
723
748
  };
724
- type FullSnapshotMethod<States extends Machine.StateSchemas, StateId extends ActiveStateKey<States>, Prefix extends string> = Machine.NodeSchema<States[StateId]> extends never ? FromMethod<FullSnapshotFromArguments<States, StateId, Prefix>, FullSnapshotResult<States, StateId, Prefix>> : DecodedMethod<FullSnapshotArguments<States, StateId, Prefix>, FullSnapshotResult<States, StateId, Prefix>> & FromMethod<FullSnapshotFromArguments<States, StateId, Prefix>, FullSnapshotResult<States, StateId, Prefix>>;
725
749
  type FullSnapshotArguments<States extends Machine.StateSchemas, StateId extends ActiveStateKey<States>, Prefix extends string, Path extends string = Machine.JoinPath<Prefix, StateId>> = States[StateId] extends infer Node ? Node extends {
726
750
  readonly type: "parallel";
727
751
  readonly states: infer Children extends Machine.StateSchemas;
@@ -784,18 +808,20 @@ type HistorySnapshotResult<States extends Machine.StateSchemas, StateId extends
784
808
  } ? Machine.ParallelSnapshot<Path, NodeValue<Node>, HistorySnapshotRegions<Children, Path, Owner>> : Node extends {
785
809
  readonly states: infer Children extends Machine.StateSchemas;
786
810
  } ? Machine.CompoundSnapshot<Path, NodeValue<Node>, HistorySnapshotWithPrefix<Children, Owner, Path>> : never : never;
787
- type HistorySnapshotMethod<States extends Machine.StateSchemas, StateId extends ActiveStateKey<States>, Prefix extends string, Owner extends string> = Machine.NodeSchema<States[StateId]> extends never ? FromMethod<HistorySnapshotFromArguments<States, StateId, Prefix, Owner>, HistorySnapshotResult<States, StateId, Prefix, Owner>> : DecodedMethod<HistorySnapshotArguments<States, StateId, Prefix, Owner>, HistorySnapshotResult<States, StateId, Prefix, Owner>> & FromMethod<HistorySnapshotFromArguments<States, StateId, Prefix, Owner>, HistorySnapshotResult<States, StateId, Prefix, Owner>>;
811
+ type HistorySnapshotMethod<in out States extends Machine.StateSchemas, in out StateId extends ActiveStateKey<States>, in out Prefix extends string, in out Owner extends string> = {
812
+ readonly [Key in Machine.NodeSchema<States[StateId]> extends never ? "from" : "from" | "decoded"]: Key extends "from" ? FromCallable<HistorySnapshotFromArguments<States, StateId, Prefix, Owner>, Machine.StateConstruction<HistorySnapshotResult<States, StateId, Prefix, Owner>>> : (...args: HistorySnapshotArguments<States, StateId, Prefix, Owner>) => HistorySnapshotResult<States, StateId, Prefix, Owner>;
813
+ };
788
814
  type HistorySnapshotWithPrefix<States extends Machine.StateSchemas, Owner extends string, Prefix extends string> = {
789
- readonly [Key in ActiveStateKey<States>]: Owner extends Machine.JoinPath<Prefix, Key> | `${Machine.JoinPath<Prefix, Key>}.${string}` ? HistorySnapshotResult<States, Key, Prefix, Owner> : never;
815
+ readonly [Key in ActiveStateKey<States>]: Owner extends Machine.JoinPath<Prefix, Key> | (Machine.JoinPath<Prefix, Key> extends "" ? string : `${Machine.JoinPath<Prefix, Key>}.${string}`) ? HistorySnapshotResult<States, Key, Prefix, Owner> : never;
790
816
  }[ActiveStateKey<States>];
791
817
  type HistorySnapshotBuilderWithPrefix<States extends Machine.StateSchemas, Owner extends string, Prefix extends string = ""> = {
792
- readonly [Key in ActiveStateKey<States> as Owner extends Machine.JoinPath<Prefix, Key> | `${Machine.JoinPath<Prefix, Key>}.${string}` ? Key : never]: HistorySnapshotMethod<States, Key, Prefix, Owner>;
818
+ readonly [Key in ActiveStateKey<States> as Owner extends Machine.JoinPath<Prefix, Key> | (Machine.JoinPath<Prefix, Key> extends "" ? string : `${Machine.JoinPath<Prefix, Key>}.${string}`) ? Key : never]: HistorySnapshotMethod<States, Key, Prefix, Owner>;
793
819
  };
794
820
  type HistorySnapshotRegions<States extends Machine.StateSchemas, Prefix extends string, Owner extends string> = {
795
- readonly [Key in ActiveStateKey<States>]: Owner extends Machine.JoinPath<Prefix, Key> | `${Machine.JoinPath<Prefix, Key>}.${string}` ? HistorySnapshotResult<States, Key, Prefix, Owner> : FullSnapshotResult<States, Key, Prefix>;
821
+ readonly [Key in ActiveStateKey<States>]: Owner extends Machine.JoinPath<Prefix, Key> | (Machine.JoinPath<Prefix, Key> extends "" ? string : `${Machine.JoinPath<Prefix, Key>}.${string}`) ? HistorySnapshotResult<States, Key, Prefix, Owner> : FullSnapshotResult<States, Key, Prefix>;
796
822
  };
797
823
  type HistoryParallelBuilder<States extends Machine.StateSchemas, Prefix extends string, Owner extends string, Remaining extends ActiveStateKey<States> = ActiveStateKey<States>, Regions = {}, Constructed extends boolean = false> = SnapshotBuilderComplete<Regions, Constructed> & {
798
- readonly [Key in Remaining]: Owner extends Machine.JoinPath<Prefix, Key> | `${Machine.JoinPath<Prefix, Key>}.${string}` ? NodeBuilderMethod<States[Key], HistorySnapshotArguments<States, Key, Prefix, Owner>, HistoryParallelBuilder<States, Prefix, Owner, Exclude<Remaining, Key>, Regions & {
824
+ readonly [Key in Remaining]: Owner extends Machine.JoinPath<Prefix, Key> | (Machine.JoinPath<Prefix, Key> extends "" ? string : `${Machine.JoinPath<Prefix, Key>}.${string}`) ? NodeBuilderMethod<States[Key], HistorySnapshotArguments<States, Key, Prefix, Owner>, HistoryParallelBuilder<States, Prefix, Owner, Exclude<Remaining, Key>, Regions & {
799
825
  readonly [Region in Key]: HistorySnapshotResult<States, Key, Prefix, Owner>;
800
826
  }, Constructed>, HistorySnapshotFromArguments<States, Key, Prefix, Owner>, HistoryParallelBuilder<States, Prefix, Owner, Exclude<Remaining, Key>, Regions & {
801
827
  readonly [Region in Key]: HistorySnapshotResult<States, Key, Prefix, Owner>;
@@ -805,7 +831,7 @@ type HistoryParallelBuilder<States extends Machine.StateSchemas, Prefix extends
805
831
  readonly [Region in Key]: FullSnapshotResult<States, Key, Prefix>;
806
832
  }, true>>;
807
833
  };
808
- type ParentPath<Path extends string> = Path extends `${infer Parent}.${infer Child}` ? Child extends `${string}.${string}` ? `${Parent}.${ParentPath<Child>}` : Parent : never;
834
+ type ParentPath<Path extends string> = Machine.ImmediateParentStateIdentifier<Path>;
809
835
  type IsCompoundNode<Node> = Node extends {
810
836
  readonly type: "parallel";
811
837
  } ? false : Node extends {
@@ -832,7 +858,7 @@ type LocalTargetBuilderWithPrefix<AllStates extends Machine.StateSchemas, States
832
858
  type LocalTargetMethod<AllStates extends Machine.StateSchemas, States extends Machine.StateSchemas, StateId extends ActiveStateKey<States>, Prefix extends string, Source extends Machine.StateNodeIdentifier<AllStates>, Path extends string = Machine.JoinPath<Prefix, StateId>> = States[StateId] extends infer Node ? Node extends {
833
859
  readonly type: "parallel";
834
860
  readonly states: infer Children extends Machine.StateSchemas;
835
- } ? Source extends Path | `${Path}.${string}` ? NestedTargetMethod<Node, LocalTargetBuilderWithPrefix<AllStates, Children, Path, Source>, LocalTargetResultWithPrefix<AllStates, Children, Path>, Path> : NodeMethodWithInitial<Node, WithNodeValue<Node, [
861
+ } ? Source extends Path | (Path extends "" ? string : `${Path}.${string}`) ? NestedTargetMethod<Node, LocalTargetBuilderWithPrefix<AllStates, Children, Path, Source>, LocalTargetResultWithPrefix<AllStates, Children, Path>, Path> : NodeMethodWithInitial<Node, WithNodeValue<Node, [
836
862
  states: (builder: FullParallelBuilder<Children, Path>) => SnapshotBuilderComplete<Machine.SnapshotRegionsWithPrefix<Children, Path>>
837
863
  ]>, Machine.Target<AllStates, StateIdentifierFromPath<AllStates, Path>>, WithNodeInput<Node, [
838
864
  states: (builder: FullParallelBuilder<Children, Path>) => SnapshotBuilderComplete<Machine.SnapshotRegionsWithPrefix<Children, Path>, boolean>
@@ -867,7 +893,7 @@ type BranchTargetBuilderWithPrefix<AllStates extends Machine.StateSchemas, State
867
893
  type BranchTargetMethod<AllStates extends Machine.StateSchemas, States extends Machine.StateSchemas, StateId extends ActiveStateKey<States>, Prefix extends string, Source extends Machine.StateNodeIdentifier<AllStates>, Path extends string = Machine.JoinPath<Prefix, StateId>> = States[StateId] extends infer Node ? Node extends {
868
894
  readonly type: "parallel";
869
895
  readonly states: infer Children extends Machine.StateSchemas;
870
- } ? Source extends Path | `${Path}.${string}` ? NestedTargetMethod<Node, BranchTargetBuilderWithPrefix<AllStates, Children, Path, Source>, BranchTargetResultWithPrefix<AllStates, Children, Path>, Path> & BranchTargetBuilderWithPrefix<AllStates, Children, Path, Source> : NodeMethodWithInitial<Node, WithNodeValue<Node, [
896
+ } ? Source extends Path | (Path extends "" ? string : `${Path}.${string}`) ? NestedTargetMethod<Node, BranchTargetBuilderWithPrefix<AllStates, Children, Path, Source>, BranchTargetResultWithPrefix<AllStates, Children, Path>, Path> & BranchTargetBuilderWithPrefix<AllStates, Children, Path, Source> : NodeMethodWithInitial<Node, WithNodeValue<Node, [
871
897
  states: (builder: FullParallelBuilder<Children, Path>) => SnapshotBuilderComplete<Machine.SnapshotRegionsWithPrefix<Children, Path>>
872
898
  ]>, Machine.Target<AllStates, StateIdentifierFromPath<AllStates, Path>>, WithNodeInput<Node, [
873
899
  states: (builder: FullParallelBuilder<Children, Path>) => SnapshotBuilderComplete<Machine.SnapshotRegionsWithPrefix<Children, Path>, boolean>
@@ -894,16 +920,19 @@ type HasDirectShallowHistory<States extends Machine.StateSchemas> = {
894
920
  readonly history: "deep";
895
921
  } ? never : Key;
896
922
  }[HistoryStateKey<States>] extends never ? false : true;
897
- type HasValuedActiveChild<States extends Machine.StateSchemas> = {
898
- readonly [Key in ActiveStateKey<States>]: Machine.NodeSchema<States[Key]> extends never ? never : Key;
923
+ type RequiresInitialValue<Node> = Machine.NodeSchema<Node> extends never ? false : {} extends NodeMakeInput<Node> ? false : true;
924
+ type HasRequiredActiveChild<States extends Machine.StateSchemas> = {
925
+ readonly [Key in ActiveStateKey<States>]: RequiresInitialValue<States[Key]> extends true ? Key : never;
899
926
  }[ActiveStateKey<States>] extends never ? false : true;
900
927
  type InitializerClosureForNode<AllStates extends Machine.StateSchemas, Node, Path extends string> = Node extends {
928
+ readonly states: infer Declared extends Machine.StateSchemas;
929
+ } ? string extends keyof Declared ? never : Node extends {
901
930
  readonly type: "parallel";
902
931
  readonly states: infer Children extends Machine.StateSchemas;
903
- } ? (HasValuedActiveChild<Children> extends true ? Extract<Path, Machine.StateIdentifier<AllStates>> : never) | InitializerClosuresForChildren<AllStates, Children, Path> : Node extends {
932
+ } ? (HasRequiredActiveChild<Children> extends true ? Extract<Path, Machine.StateIdentifier<AllStates>> : never) | InitializerClosuresForChildren<AllStates, Children, Path> : Node extends {
904
933
  readonly states: infer Children extends Machine.StateSchemas;
905
934
  readonly initial: infer Initial;
906
- } ? (Initial extends ActiveStateKey<Children> ? Machine.NodeSchema<Children[Initial]> extends never ? never : Extract<Path, Machine.StateIdentifier<AllStates>> : never) | (Initial extends ActiveStateKey<Children> ? InitializerClosureForNode<AllStates, Children[Initial], Machine.JoinPath<Path, Initial>> : never) : never;
935
+ } ? (Initial extends ActiveStateKey<Children> ? RequiresInitialValue<Children[Initial]> extends true ? Extract<Path, Machine.StateIdentifier<AllStates>> : never : never) | (Initial extends ActiveStateKey<Children> ? InitializerClosureForNode<AllStates, Children[Initial], Machine.JoinPath<Path, Initial>> : never) : never : never;
907
936
  type InitializerClosuresForChildren<AllStates extends Machine.StateSchemas, States extends Machine.StateSchemas, Prefix extends string> = {
908
937
  readonly [Key in ActiveStateKey<States>]: InitializerClosureForNode<AllStates, States[Key], Machine.JoinPath<Prefix, Key>>;
909
938
  }[ActiveStateKey<States>];
@@ -1416,7 +1445,7 @@ export declare namespace ChildMachine {
1416
1445
  * @category utility types
1417
1446
  * @since 0.20.0
1418
1447
  */
1419
- type StartRequirements<Child extends Any> = Child extends ChildMachine<string, infer M> ? Exclude<ExcludeCompatibleRuntime<Exclude<ExecutionServices<Machine.InitialServices<M> | Machine.Services<M>>, MachineRuntimeRequirement>, Machine.Event<M>, Machine.Emit<M>>, Scope.Scope> : never;
1448
+ type StartRequirements<Child extends Any> = Child extends ChildMachine<string, infer M> ? Exclude<ExcludeCompatibleRuntime<Exclude<ExecutionServices<Machine.InitialServices<M> | Machine.Services<M>>, MachineRuntimeRequirement>, Machine.Event<M>, Machine.EmittedEvent<M>>, Scope.Scope> : never;
1420
1449
  /**
1421
1450
  * Running machine reference selected by a child descriptor.
1422
1451
  *
@@ -1582,6 +1611,7 @@ export declare namespace Machine {
1582
1611
  /** @internal */
1583
1612
  readonly [MachineTypeId]: TypeCarrier<any, any, any, any, any, any, any, any, any, any, any, any, any, any>;
1584
1613
  readonly states: StateSchemas;
1614
+ readonly root: Pick<State<Machine.StateNodeConfig>, typeof StateTypeId | "node">;
1585
1615
  readonly events: EventProtocol.Any<"public">;
1586
1616
  readonly internalEvents: EventProtocol.Any<"internal">;
1587
1617
  readonly emittedEvents: EventProtocol.Any<"emitted">;
@@ -1686,8 +1716,6 @@ export declare namespace Machine {
1686
1716
  * @since 0.4.0
1687
1717
  */
1688
1718
  type EmittedEvents<M extends Any> = M[typeof MachineTypeId]["emittedEvents"];
1689
- /** @deprecated Use {@link EmittedEvents}. */
1690
- type Emits<M extends Any> = EmittedEvents<M>;
1691
1719
  /**
1692
1720
  * Extracts state paths with implemented output handlers.
1693
1721
  *
@@ -1814,9 +1842,7 @@ export declare namespace Machine {
1814
1842
  * @category utility types
1815
1843
  * @since 0.4.0
1816
1844
  */
1817
- type EmittedEvent<M extends Any> = EmittedEventOf<Emits<M>>;
1818
- /** @deprecated Use {@link EmittedEvent}. */
1819
- type Emit<M extends Any> = EmittedEvent<M>;
1845
+ type EmittedEvent<M extends Any> = EmittedEventOf<EmittedEvents<M>>;
1820
1846
  /**
1821
1847
  * A schema whose decoded value contains a `_tag` discriminator.
1822
1848
  *
@@ -1853,8 +1879,6 @@ export declare namespace Machine {
1853
1879
  }
1854
1880
  /** Descriptive annotations accepted by schema-less active and pseudo-states. */
1855
1881
  type SchemaLessStateAnnotations = Pick<StateNodeAnnotations, "title" | "description" | "documentation">;
1856
- /** @deprecated Use {@link SchemaLessStateAnnotations}. */
1857
- type PseudoStateAnnotations = SchemaLessStateAnnotations;
1858
1882
  /**
1859
1883
  * Configuration accepted for an atomic object state node.
1860
1884
  *
@@ -2028,20 +2052,16 @@ export declare namespace Machine {
2028
2052
  */
2029
2053
  type InitialBuilder<States extends StateSchemas> = InitialSnapshotBuilderWithPrefix<States>;
2030
2054
  /**
2031
- * State definitions and snapshot access helpers returned by `states`.
2055
+ * Typed snapshot access shared by state descriptors.
2032
2056
  *
2033
2057
  * **Details**
2034
2058
  *
2035
- * The `states` property is the original state tree and can be passed directly
2036
- * to `make`. The remaining helpers match and read snapshots for the same
2037
- * state tree.
2059
+ * The helpers match and read snapshots for the same captured topology.
2038
2060
  *
2039
2061
  * @category models
2040
2062
  * @since 0.4.0
2041
2063
  */
2042
- interface DefinedStates<States extends StateSchemas> {
2043
- /** Captured state tree supplied to {@link states}. */
2044
- readonly states: States;
2064
+ interface StateAccessors<States extends StateSchemas> {
2045
2065
  /**
2046
2066
  * Checks and preserves one active state path from this definition.
2047
2067
  *
@@ -2061,7 +2081,7 @@ export declare namespace Machine {
2061
2081
  */
2062
2082
  readonly get: {
2063
2083
  <Path extends ValuedStateIdentifier<States>>(snapshot: Snapshot<States>, path: Path): Option.Option<StateByIdentifier<States, Path>>;
2064
- <const From extends StateIdentifier<States>, const Path extends ValuedStateIdentifier<States>>(snapshot: SnapshotByIdentifier<States, From>, path: Path & (Path extends NoInfer<From> | `${NoInfer<From>}.${string}` ? unknown : never)): Option.Option<StateByIdentifier<States, Path>>;
2084
+ <const From extends StateIdentifier<States>, const Path extends ValuedStateIdentifier<States>>(snapshot: SnapshotByIdentifier<States, From>, path: Path & (Path extends NoInfer<From> | (NoInfer<From> extends "" ? string : `${NoInfer<From>}.${string}`) ? unknown : never)): Option.Option<StateByIdentifier<States, Path>>;
2065
2085
  };
2066
2086
  /**
2067
2087
  * Returns the decoded value for an active state path together with all of
@@ -2084,7 +2104,7 @@ export declare namespace Machine {
2084
2104
  */
2085
2105
  readonly getSnapshot: {
2086
2106
  <Path extends StateIdentifier<States>>(snapshot: Snapshot<States>, path: Path): Option.Option<SnapshotByIdentifier<States, Path>>;
2087
- <const From extends StateIdentifier<States>, const Path extends StateIdentifier<States>>(snapshot: SnapshotByIdentifier<States, From>, path: Path & (Path extends NoInfer<From> | `${NoInfer<From>}.${string}` ? unknown : never)): Option.Option<SnapshotByIdentifier<States, Path>>;
2107
+ <const From extends StateIdentifier<States>, const Path extends StateIdentifier<States>>(snapshot: SnapshotByIdentifier<States, From>, path: Path & (Path extends NoInfer<From> | (NoInfer<From> extends "" ? string : `${NoInfer<From>}.${string}`) ? unknown : never)): Option.Option<SnapshotByIdentifier<States, Path>>;
2088
2108
  };
2089
2109
  /**
2090
2110
  * Returns whether a state path is active in the snapshot. The supplied
@@ -2096,7 +2116,7 @@ export declare namespace Machine {
2096
2116
  */
2097
2117
  readonly matches: {
2098
2118
  <Path extends StateIdentifier<States>>(snapshot: Snapshot<States>, path: Path): boolean;
2099
- <const From extends StateIdentifier<States>, const Path extends StateIdentifier<States>>(snapshot: SnapshotByIdentifier<States, From>, path: Path & (Path extends NoInfer<From> | `${NoInfer<From>}.${string}` ? unknown : never)): boolean;
2119
+ <const From extends StateIdentifier<States>, const Path extends StateIdentifier<States>>(snapshot: SnapshotByIdentifier<States, From>, path: Path & (Path extends NoInfer<From> | (NoInfer<From> extends "" ? string : `${NoInfer<From>}.${string}`) ? unknown : never)): boolean;
2100
2120
  };
2101
2121
  }
2102
2122
  /**
@@ -2408,20 +2428,31 @@ export declare namespace Machine {
2408
2428
  /** Choice-owning active parents that remain unimplemented. */
2409
2429
  type MissingChoiceImplementations<States extends StateSchemas, UnhandledStates extends StateIdentifier<States>> = Extract<UnhandledStates, ChoiceParentIdentifier<States>>;
2410
2430
  /** @internal Readiness proof for required choice resolvers. */
2411
- type EnsureChoiceImplementations<States extends StateSchemas, UnhandledStates extends StateIdentifier<States>> = [ChoiceIdentifier<States>] extends [never] ? unknown : [MissingChoiceImplementations<States, UnhandledStates>] extends [never] ? unknown : {
2431
+ type EnsureChoiceImplementations<States extends StateSchemas, UnhandledStates extends StateIdentifier<States>> = IsAny<States> extends true ? unknown : [ChoiceIdentifier<States>] extends [never] ? unknown : [MissingChoiceImplementations<States, UnhandledStates>] extends [never] ? unknown : {
2412
2432
  readonly "~effect/Machine/MissingChoiceImplementation": MissingChoiceImplementations<States, UnhandledStates>;
2413
2433
  };
2414
2434
  /** @internal Readiness proof required by planning and managed execution. */
2415
- type EnsureHistoryImplementations<States extends StateSchemas, UnhandledStates extends StateIdentifier<States>> = ([HistoryIdentifier<States>] extends [never] ? unknown : [MissingHistoryImplementations<States, UnhandledStates>] extends [never] ? unknown : {
2435
+ type EnsureHistoryImplementations<States extends StateSchemas, UnhandledStates extends StateIdentifier<States>> = IsAny<States> extends true ? unknown : ([HistoryIdentifier<States>] extends [never] ? unknown : [MissingHistoryImplementations<States, UnhandledStates>] extends [never] ? unknown : {
2416
2436
  readonly "~effect/Machine/MissingHistoryImplementation": MissingHistoryImplementations<States, UnhandledStates>;
2417
2437
  }) & EnsureChoiceImplementations<States, UnhandledStates>;
2438
+ /** Owners whose declared default descendants require supplied values. */
2439
+ type RequiredInitializers<States extends StateSchemas> = string extends keyof States ? never : "" extends keyof States ? States[""] extends {
2440
+ readonly "~effect/Machine/ExplicitInitial": true;
2441
+ } ? never : InitializerClosureForNode<States, States[""], ""> : never;
2442
+ /** Proof that initialization can construct every required default value. */
2443
+ type EnsureInitialImplementations<States extends StateSchemas, UnhandledStates extends StateIdentifier<States>> = [Extract<RequiredInitializers<States>, UnhandledStates>] extends [never] ? unknown : {
2444
+ readonly "~effect/Machine/MissingInitialImplementation": Extract<RequiredInitializers<States>, UnhandledStates>;
2445
+ };
2418
2446
  /**
2419
2447
  * Extracts a state-tree node by state path.
2420
2448
  *
2421
2449
  * @category utility types
2422
2450
  * @since 0.4.0
2423
2451
  */
2424
- type NodeByIdentifier<States extends StateSchemas, StateId extends StateIdentifier<States>> = StateId extends `${infer Head}.${infer Rest}` ? Head extends keyof States ? States[Head] extends {
2452
+ type NodeByIdentifier<States extends StateSchemas, StateId extends StateIdentifier<States>> = string extends keyof States ? NodeByNamedIdentifier<States, StateId> : "" extends keyof States ? StateId extends "" ? States[""] : States[""] extends {
2453
+ readonly states: infer Children extends StateSchemas;
2454
+ } ? NodeByIdentifier<Children, Extract<StateId, StateIdentifier<Children>>> : never : NodeByNamedIdentifier<States, StateId>;
2455
+ type NodeByNamedIdentifier<States extends StateSchemas, StateId extends string> = StateId extends `${infer Head}.${infer Rest}` ? Head extends keyof States ? States[Head] extends {
2425
2456
  readonly states: infer Children extends StateSchemas;
2426
2457
  } ? Rest extends StateIdentifier<Children> ? NodeByIdentifier<Children, Rest> : never : never : never : StateId extends keyof States ? States[StateId] : never;
2427
2458
  /**
@@ -2453,8 +2484,6 @@ export declare namespace Machine {
2453
2484
  * @since 0.4.0
2454
2485
  */
2455
2486
  type EmittedEventOf<Emits extends ReadonlyArray<TaggedSchema>> = Emits[number]["Type"];
2456
- /** @deprecated Use {@link EmittedEventOf}. */
2457
- type EmitOf<Emits extends ReadonlyArray<TaggedSchema>> = EmittedEventOf<Emits>;
2458
2487
  /**
2459
2488
  * Event values received by lifecycle callbacks.
2460
2489
  *
@@ -2475,14 +2504,15 @@ export declare namespace Machine {
2475
2504
  * @category utility types
2476
2505
  * @since 0.4.0
2477
2506
  */
2478
- type ParentStateIdentifier<StateId extends string> = StateId extends `${infer Parent}.${infer Child}` ? Parent | (Child extends `${string}.${string}` ? `${Parent}.${ParentStateIdentifier<Child>}` : never) : never;
2507
+ type ParentStateIdentifier<StateId extends string> = StateId extends "" ? never : "" | NamedParentStateIdentifier<StateId>;
2508
+ type NamedParentStateIdentifier<StateId extends string> = StateId extends `${infer Parent}.${infer Child}` ? Parent | (Child extends `${string}.${string}` ? `${Parent}.${NamedParentStateIdentifier<Child>}` : never) : never;
2479
2509
  /**
2480
2510
  * Extracts the nearest parent state path from a state identifier.
2481
2511
  *
2482
2512
  * @category utility types
2483
2513
  * @since 0.4.0
2484
2514
  */
2485
- type ImmediateParentStateIdentifier<StateId extends string> = StateId extends `${infer Head}.${infer Tail}` ? Tail extends `${string}.${string}` ? `${Head}.${ImmediateParentStateIdentifier<Tail>}` : Head : never;
2515
+ type ImmediateParentStateIdentifier<StateId extends string> = StateId extends `${infer Head}.${infer Tail}` ? Tail extends `${string}.${string}` ? `${Head}.${ImmediateParentStateIdentifier<Tail>}` : Head : StateId extends "" ? never : "";
2486
2516
  /**
2487
2517
  * Maps every parent state path of a state identifier to its decoded value.
2488
2518
  *
@@ -2524,7 +2554,7 @@ export declare namespace Machine {
2524
2554
  readonly type: "final";
2525
2555
  } ? OutputByIdentifier<States, StateId> : never;
2526
2556
  type CompoundCompletionOutput<States extends StateSchemas, Children extends StateSchemas, Prefix extends StateIdentifier<States>> = UndefinedIfNever<CompoundCompletionOutputRaw<States, Children, Prefix>>;
2527
- type CompoundCompletionOutputRaw<States extends StateSchemas, Children extends StateSchemas, Prefix extends StateIdentifier<States>> = {
2557
+ type CompoundCompletionOutputRaw<States extends StateSchemas, Children extends StateSchemas, Prefix extends StateIdentifier<States>> = Prefix extends "" ? TerminalOutput<Children> : {
2528
2558
  readonly [Key in ActiveStateKey<Children>]: DirectFinalCompletionOutput<States, Extract<JoinPath<Prefix, Key>, StateIdentifier<States>>>;
2529
2559
  }[ActiveStateKey<Children>];
2530
2560
  /**
@@ -2650,6 +2680,7 @@ export declare namespace Machine {
2650
2680
  * @since 0.4.0
2651
2681
  */
2652
2682
  interface EncodedSnapshot {
2683
+ readonly version: 2;
2653
2684
  readonly _tag: "MachineSnapshot";
2654
2685
  readonly active: ReadonlyArray<EncodedSnapshotState>;
2655
2686
  readonly completed?: ReadonlyArray<EncodedSnapshotCompletion>;
@@ -2797,7 +2828,7 @@ export declare namespace Machine {
2797
2828
  * @category utility types
2798
2829
  * @since 0.4.0
2799
2830
  */
2800
- type RootStateIdentifier<StateId extends string> = StateId extends `${infer Root}.${string}` ? Root : StateId;
2831
+ type RootStateIdentifier<StateId extends string> = StateId extends string ? "" : never;
2801
2832
  /**
2802
2833
  * Extracts the public snapshot shape that contains a final state path.
2803
2834
  *
@@ -2839,7 +2870,7 @@ export declare namespace Machine {
2839
2870
  * @category models
2840
2871
  * @since 0.4.0
2841
2872
  */
2842
- interface StateConstruction<Result> {
2873
+ interface StateConstruction<out Result> {
2843
2874
  readonly [Topology.StateConstructionTypeId]: Result;
2844
2875
  }
2845
2876
  /**
@@ -2979,7 +3010,11 @@ export declare namespace Machine {
2979
3010
  * @category utility types
2980
3011
  * @since 0.4.0
2981
3012
  */
2982
- type HistoryDefaultTargetBuilder<States extends StateSchemas, Owner extends StateIdentifier<States>> = HistorySnapshotBuilderWithPrefix<States, Owner>;
3013
+ type HistoryDefaultTargetBuilder<States extends StateSchemas, Owner extends StateIdentifier<States>> = HistorySnapshotMethod<{
3014
+ readonly "": Extract<Omit<States[""], "~effect/Machine/ExplicitInitial">, StateNodeConfig>;
3015
+ }, "" & ActiveStateKey<{
3016
+ readonly "": Extract<Omit<States[""], "~effect/Machine/ExplicitInitial">, StateNodeConfig>;
3017
+ }>, "", Owner>;
2983
3018
  /**
2984
3019
  * Builder for source-local transition targets.
2985
3020
  *
@@ -3003,7 +3038,7 @@ export declare namespace Machine {
3003
3038
  * @category utility types
3004
3039
  * @since 0.4.0
3005
3040
  */
3006
- type BranchTargetBuilder<States extends StateSchemas, Source extends StateNodeIdentifier<States>> = BranchTargetBuilderForRoot<States, Extract<RootStateIdentifier<Source>, ActiveStateKey<States>>, Source>;
3041
+ type BranchTargetBuilder<States extends StateSchemas, Source extends StateNodeIdentifier<States>> = BranchTargetBuilderForRoot<States, Extract<"" extends keyof States ? "" : RootStateIdentifier<Source>, ActiveStateKey<States>>, Source>;
3007
3042
  /**
3008
3043
  * Machine-bound target builders available in transition contexts.
3009
3044
  *
@@ -3017,13 +3052,13 @@ export declare namespace Machine {
3017
3052
  * do not directly control state re-entry. Exit and entry paths are derived
3018
3053
  * from the previous and next active paths. Shared active ancestors remain
3019
3054
  * entered even when a `full` target supplies their values again. Use an event
3020
- * transition with `reenter: true` when the source should explicitly exit and
3055
+ * transition with `.reenter()` when the source should explicitly exit and
3021
3056
  * enter again.
3022
3057
  *
3023
3058
  * @category models
3024
3059
  * @since 0.4.0
3025
3060
  */
3026
- interface TargetBuilder<States extends StateSchemas, Source extends StateNodeIdentifier<States>> {
3061
+ interface TargetBuilder<in out States extends StateSchemas, in out Source extends StateNodeIdentifier<States>> {
3027
3062
  /**
3028
3063
  * Selects an explicitly targetless transition.
3029
3064
  *
@@ -3095,10 +3130,10 @@ export declare namespace Machine {
3095
3130
  } ? SelectionMethod<Builder, Path, "state", Scope> & InitialSelectionMethod<Builder, Path, Scope> & SelectionTreeWithPrefix<AllStates, Children, Path, Scope, Builder> : SelectionMethod<Builder, Path, "state", Scope>;
3096
3131
  /** @internal */
3097
3132
  type StateUpdateSelectionForNode<AllStates extends StateSchemas, Node, Path extends string, Scope extends "local" | "branch"> = Node extends {
3098
- readonly states: StateSchemas;
3099
- } ? NodeSchema<Node> extends never ? {} : {
3133
+ readonly type: "final";
3134
+ } ? {} : NodeSchema<Node> extends never ? {} : {
3100
3135
  readonly update: SelectionValue<StateUpdateBuilder<AllStates, Extract<Path, ValuedStateIdentifier<AllStates>>>, Path, "update", Scope>;
3101
- } : {};
3136
+ };
3102
3137
  /** @internal */
3103
3138
  type BranchUpdateSelectionPath<AllStates extends StateSchemas, Node, Path extends string, Rest extends string, Scope extends "local" | "branch" = "branch"> = StateUpdateSelectionForNode<AllStates, Node, Path, Scope> & (Node extends {
3104
3139
  readonly states: infer Children extends StateSchemas;
@@ -3110,12 +3145,13 @@ export declare namespace Machine {
3110
3145
  type FullSelectionNode<AllStates extends StateSchemas, Node, Path extends StateIdentifier<AllStates>, Builder> = Node extends {
3111
3146
  readonly states: StateSchemas;
3112
3147
  } ? SelectionMethod<Builder, Path, "state", "full"> & InitialSelectionMethod<Builder, Path, "full"> : SelectionMethod<Builder, Path, "state", "full">;
3113
- type FullTargetSelector<States extends StateSchemas> = {
3114
- readonly [Key in Extract<ActiveStateKey<States>, keyof FullTargetBuilder<States>>]: FullSelectionNode<States, States[Key], Extract<Key, StateIdentifier<States>>, FullTargetBuilder<States>[Key]>;
3115
- };
3116
- type BranchTargetSelector<States extends StateSchemas, Source extends StateNodeIdentifier<States>, Root extends string = Source extends `${infer Head}.${string}` ? Head : Source> = Root extends ActiveStateKey<States> ? Root extends keyof BranchTargetBuilder<States, Source> ? {
3117
- readonly [Key in Root]: SelectionNode<States, States[Key], Key, "branch", BranchTargetBuilder<States, Source>[Key]> & (Source extends ChoiceIdentifier<States> ? {} : Source extends `${Key}.${infer Rest}` ? BranchUpdateSelectionPath<States, States[Key], Key, Rest> : StateUpdateSelectionForNode<States, States[Key], Key, "branch">);
3118
- } : {} : {};
3148
+ type RootBuilder<Builder> = Builder extends {
3149
+ readonly "": infer Root;
3150
+ } ? Root : never;
3151
+ type FullTargetSelector<States extends StateSchemas> = SelectionValue<RootBuilder<FullTargetBuilder<States>>, "", "state", "full"> & InitialSelectionMethod<RootBuilder<FullTargetBuilder<States>>, "", "full">;
3152
+ type BranchTargetSelector<States extends StateSchemas, Source extends StateNodeIdentifier<States>> = States[""] extends {
3153
+ readonly states: infer Children extends StateSchemas;
3154
+ } ? SelectionTreeWithPrefix<States, Children, "", "branch", RootBuilder<BranchTargetBuilder<States, Source>>> & (Source extends ChoiceIdentifier<States> ? {} : Omit<BranchUpdateSelectionPath<States, States[""], "", Source>, "update">) : {};
3119
3155
  type LocalTargetSelector<States extends StateSchemas, Source extends StateNodeIdentifier<States>> = NearestCompoundScope<States, Source> extends infer Scope ? [Scope] extends [never] ? {} : Scope extends StateIdentifier<States> ? ChildrenOf<States, Scope> extends infer Children extends StateSchemas ? LocalTargetBuilder<States, Source> extends infer Builder ? SelectionTreeWithPrefix<States, Children, Scope, "local", Builder> & ("with" extends keyof Builder ? {
3120
3156
  readonly with: SelectionValue<Builder["with"], Scope, "state", "local">;
3121
3157
  } : {}) & (Source extends ChoiceIdentifier<States> ? {} : Scope extends ValuedStateIdentifier<States> ? {
@@ -3136,6 +3172,13 @@ export declare namespace Machine {
3136
3172
  * target-specific resolver APIs retain exact inference.
3137
3173
  */
3138
3174
  interface TargetSelector<States extends StateSchemas, Source extends StateNodeIdentifier<States>> {
3175
+ /** Replaces this handler owner's value without reentry. */
3176
+ /** Selects the current handler owner for a value update without reentry. */
3177
+ readonly self: Source extends ValuedStateIdentifier<States> ? StateUpdateSelectionForNode<States, NodeByIdentifier<States, Source>, Source, "branch"> : {};
3178
+ /** Addresses the root and its retained value from any active descendant. */
3179
+ readonly root: "" extends ActiveStateKey<States> ? SelectionNode<States, States[""], "", "branch", (BranchTargetBuilder<States, Source> extends {
3180
+ readonly "": infer Builder;
3181
+ } ? Builder : never)> & StateUpdateSelectionForNode<States, States[""], "", "branch"> : never;
3139
3182
  /** Handles the trigger without selecting a destination. */
3140
3183
  readonly none: SelectionValue<TargetBuilder<States, Source>["none"], never, "none", "local">;
3141
3184
  /** Selects a destination or updates the nearest active compound scope. */
@@ -3145,7 +3188,9 @@ export declare namespace Machine {
3145
3188
  /** Selects a complete destination under any top-level state. */
3146
3189
  readonly full: FullTargetSelector<States>;
3147
3190
  /** Restores a shallow or deep history pseudo-state. */
3148
- readonly history: HistorySelectionTree<States, States, "", HistoryTargetBuilder<States>>;
3191
+ readonly history: States[""] extends {
3192
+ readonly states: infer Children extends StateSchemas;
3193
+ } ? HistorySelectionTree<States, Children, "", RootBuilder<HistoryTargetBuilder<States>>> : {};
3149
3194
  }
3150
3195
  /** Definition-time selector that can choose only a valid top-level initial entry. */
3151
3196
  type InitialTargetSelector<States extends StateSchemas> = {
@@ -3430,8 +3475,9 @@ export declare namespace Machine {
3430
3475
  *
3431
3476
  * Handlers return snapshots for complete state replacement, target builder
3432
3477
  * results for path-safe partial transitions, state-value updates, or
3433
- * `target.none()` for an explicitly targetless transition. Raw decoded state
3434
- * values and `void` are not accepted at transition boundaries.
3478
+ * an explicit targetless result. In a machine definition, select `to.none`;
3479
+ * its optional resolver returns `undefined`. Raw decoded state values are
3480
+ * not accepted as transition targets.
3435
3481
  *
3436
3482
  * @category utility types
3437
3483
  * @since 0.4.0
@@ -3527,7 +3573,7 @@ export declare namespace Machine {
3527
3573
  */
3528
3574
  type InvokeResolvedSource<Source> = Source extends (...args: any) => infer Resolved ? Resolved : Source;
3529
3575
  type InvokeFactoryResult<Source> = Source extends (...args: any) => infer Resolved ? Resolved : never;
3530
- type ChildMachineLogic<Child> = Child extends ChildMachine<string, infer M> ? Logic<Snapshot<States<M>>, EventInput<InputEvent<M>>, Error<M> | ActionError<Services<M>> | InfiniteTransitionError | MachineSchemaDecodeError | StoppedError, ExcludeCompatibleRuntime<Exclude<ExecutionServices<InitialServices<M> | Services<M>>, internalRuntime.MachineRuntime>, Event<M>, Emit<M>>, Output<M>, InitialError<M> | Error<M> | ActionError<InitialServices<M> | Services<M>> | InfiniteTransitionError | MachineSchemaDecodeError | StartupError | StoppedError> : never;
3576
+ type ChildMachineLogic<Child> = Child extends ChildMachine<string, infer M> ? Logic<Snapshot<States<M>>, EventInput<InputEvent<M>>, Error<M> | ActionError<Services<M>> | InfiniteTransitionError | MachineSchemaDecodeError | StoppedError, ExcludeCompatibleRuntime<Exclude<ExecutionServices<InitialServices<M> | Services<M>>, internalRuntime.MachineRuntime>, Event<M>, EmittedEvent<M>>, Output<M>, InitialError<M> | Error<M> | ActionError<InitialServices<M> | Services<M>> | InfiniteTransitionError | MachineSchemaDecodeError | StartupError | StoppedError> : never;
3531
3577
  type InvokeLogic<Invoke> = Invoke extends {
3532
3578
  readonly effect: infer Source;
3533
3579
  } ? InvokeFactoryResult<Source> extends infer Fx extends Effect.Effect<any, any, any> ? Logic<void, never, Effect.Error<Fx>, Effect.Services<Fx>, Effect.Success<Fx>> : never : Invoke extends {
@@ -3595,7 +3641,7 @@ export declare namespace Machine {
3595
3641
  };
3596
3642
  } ? Emitted : Invoke extends {
3597
3643
  readonly child: ChildMachine<string, infer M>;
3598
- } ? Emit<M> : never;
3644
+ } ? EmittedEvent<M> : never;
3599
3645
  /** Public parent inputs required by an invoked child machine. */
3600
3646
  type InvokeParentEvents<Invoke> = Invoke extends {
3601
3647
  readonly [InvokeTypeId]: {
@@ -3735,12 +3781,12 @@ export declare namespace Machine {
3735
3781
  /** Declines this candidate and continues hierarchical transition selection. */
3736
3782
  readonly decline: () => Declined;
3737
3783
  }
3738
- type TransitionResolver<Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Context, Selection> = (context: TransitionResolveContext<Context, Selection>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => SelectionKind<Selection> extends "none" ? undefined : SelectedTargetResult<Selection> | undefined;
3739
- type DeclinableTransitionResolver<Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Context, Selection> = (context: TransitionResolveContext<Context, Selection> & DeclineCapability, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => (SelectionKind<Selection> extends "none" ? undefined : SelectedTargetResult<Selection> | undefined) | Declined;
3784
+ type TransitionResolver<Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Context, Selection> = (context: TransitionResolveContext<Context, Selection>, enqueue: Enqueue<EventOf<Events>, EmittedEventOf<Emits>>) => SelectionKind<Selection> extends "none" ? undefined : SelectedTargetResult<Selection> | undefined;
3785
+ type DeclinableTransitionResolver<Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Context, Selection> = (context: TransitionResolveContext<Context, Selection> & DeclineCapability, enqueue: Enqueue<EventOf<Events>, EmittedEventOf<Emits>>) => (SelectionKind<Selection> extends "none" ? undefined : SelectedTargetResult<Selection> | undefined) | Declined;
3740
3786
  /** @internal */
3741
- type StateUpdateResolver<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Context, Owner extends ValuedStateIdentifier<States>> = (context: StateUpdateResolveContext<States, Context, Owner>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => StateUpdate<States, Owner>;
3787
+ type StateUpdateResolver<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Context, Owner extends ValuedStateIdentifier<States>> = (context: StateUpdateResolveContext<States, Context, Owner>, enqueue: Enqueue<EventOf<Events>, EmittedEventOf<Emits>>) => StateUpdate<States, Owner>;
3742
3788
  /** @internal */
3743
- type DeclinableStateUpdateResolver<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Context, Owner extends ValuedStateIdentifier<States>> = (context: StateUpdateResolveContext<States, Context, Owner> & DeclineCapability, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => StateUpdate<States, Owner> | Declined;
3789
+ type DeclinableStateUpdateResolver<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Context, Owner extends ValuedStateIdentifier<States>> = (context: StateUpdateResolveContext<States, Context, Owner> & DeclineCapability, enqueue: Enqueue<EventOf<Events>, EmittedEventOf<Emits>>) => StateUpdate<States, Owner> | Declined;
3744
3790
  /** One named destination declared by a branching transition. */
3745
3791
  interface TransitionBranchInput<Selection extends TargetSelection<any, any, any> = TargetSelection<any, any, any>> {
3746
3792
  /** Exact topology destination available to the branching resolver. */
@@ -3776,8 +3822,8 @@ export declare namespace Machine {
3776
3822
  type TransitionBranchesResolveContext<Context, Branches extends Readonly<Record<string, TransitionBranchInput>>> = Omit<Context, "target"> & {
3777
3823
  readonly select: BranchSelectors<Branches>;
3778
3824
  };
3779
- type TransitionBranchesResolver<Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Context, Branches extends Readonly<Record<string, TransitionBranchInput>>> = (context: TransitionBranchesResolveContext<Context, Branches>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => BranchSelectionResult<Branches>;
3780
- type DeclinableTransitionBranchesResolver<Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Context, Branches extends Readonly<Record<string, TransitionBranchInput>>> = (context: TransitionBranchesResolveContext<Context, Branches> & DeclineCapability, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => BranchSelectionResult<Branches> | Declined;
3825
+ type TransitionBranchesResolver<Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Context, Branches extends Readonly<Record<string, TransitionBranchInput>>> = (context: TransitionBranchesResolveContext<Context, Branches>, enqueue: Enqueue<EventOf<Events>, EmittedEventOf<Emits>>) => BranchSelectionResult<Branches>;
3826
+ type DeclinableTransitionBranchesResolver<Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Context, Branches extends Readonly<Record<string, TransitionBranchInput>>> = (context: TransitionBranchesResolveContext<Context, Branches> & DeclineCapability, enqueue: Enqueue<EventOf<Events>, EmittedEventOf<Emits>>) => BranchSelectionResult<Branches> | Declined;
3781
3827
  /** @internal Type evidence retained by a transition authored through its bound selector. */
3782
3828
  interface TransitionBuilderEvidence<out Result, out Acceptance extends TransitionAcceptance> {
3783
3829
  readonly [TransitionBuilderTypeId]: {
@@ -3785,78 +3831,128 @@ export declare namespace Machine {
3785
3831
  readonly acceptance: Types.Covariant<Acceptance>;
3786
3832
  };
3787
3833
  }
3788
- type TransitionReenterOption<Reenter extends boolean> = [Reenter] extends [true] ? {
3789
- /** Forces the source state to exit and enter even when active paths remain unchanged. */
3790
- readonly reenter?: boolean;
3791
- } : {
3792
- readonly reenter?: never;
3793
- };
3794
- type TransitionRequiredOptions<Reenter extends boolean> = TransitionReenterOption<Reenter> & {
3834
+ type TransitionRequiredOptions = {
3795
3835
  /** Keeps the transition required. The resolver cannot return `decline()`. */
3796
3836
  readonly declinable?: false;
3837
+ readonly reenter?: never;
3797
3838
  };
3798
- type TransitionDeclinableOptions<Reenter extends boolean> = TransitionReenterOption<Reenter> & {
3839
+ type TransitionDeclinableOptions = {
3799
3840
  /** Adds `decline()` to the resolver context and permits declining this candidate. */
3800
3841
  readonly declinable: true;
3842
+ readonly reenter?: never;
3801
3843
  };
3802
3844
  type BuiltTransition<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateNodeIdentifier<States>, Context, Reenter extends boolean, Result, Acceptance extends TransitionAcceptance> = TransitionTyped<States, Events, Emits, StateId, Context, Reenter, Acceptance> & TransitionBuilderEvidence<Result, Acceptance>;
3803
3845
  interface TransitionResolveRequired<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateNodeIdentifier<States>, Context, Reenter extends boolean, Selection extends TargetSelection<any, any, any>> {
3804
- (resolve: TransitionResolver<Events, Emits, Context, Selection>, options?: TransitionRequiredOptions<Reenter>): BuiltTransition<States, Events, Emits, StateId, Context, Reenter, SelectionKind<Selection> extends "none" ? undefined : SelectedTargetResult<Selection> | undefined, "required">;
3846
+ (resolve: TransitionResolver<Events, Emits, Context, Selection>, options?: TransitionRequiredOptions): BuiltTransition<States, Events, Emits, StateId, Context, Reenter, SelectionKind<Selection> extends "none" ? undefined : SelectedTargetResult<Selection> | undefined, "required">;
3805
3847
  }
3806
3848
  interface TransitionResolveDeclinable<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateNodeIdentifier<States>, Context, Reenter extends boolean, Selection extends TargetSelection<any, any, any>> {
3807
- (resolve: DeclinableTransitionResolver<Events, Emits, Context, Selection>, options: TransitionDeclinableOptions<Reenter>): BuiltTransition<States, Events, Emits, StateId, Context, Reenter, (SelectionKind<Selection> extends "none" ? undefined : SelectedTargetResult<Selection> | undefined) | Declined, "declinable">;
3849
+ (resolve: DeclinableTransitionResolver<Events, Emits, Context, Selection>, options: TransitionDeclinableOptions): BuiltTransition<States, Events, Emits, StateId, Context, Reenter, (SelectionKind<Selection> extends "none" ? undefined : SelectedTargetResult<Selection> | undefined) | Declined, "declinable">;
3808
3850
  }
3851
+ type ConstructionCallbacks<Context, Builder, Result> = {
3852
+ readonly [Method in Extract<keyof Builder, "from" | "decoded"> as Builder[Method] extends (...args: infer Args) => unknown ? Args extends readonly [unknown?] ? Method : never : never]: Builder[Method] extends (...args: infer Args) => unknown ? (value: (context: Context) => Args[0]) => Result : never;
3853
+ };
3854
+ type GuardedTransition<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateNodeIdentifier<States>, Context, Reenter extends boolean, Selection extends TargetSelection<any, any, any>> = ConstructionCallbacks<Omit<Context, "target">, SelectionBuilder<Selection>, BuiltTransition<States, Events, Emits, StateId, Context, Reenter, SelectedTargetResult<Selection> | Declined, "declinable">> & (SelectionSupportsDefaultConstruction<Selection> extends true ? BuiltTransition<States, Events, Emits, StateId, Context, Reenter, SelectedTargetResult<Selection> | Declined, "declinable"> : {}) & {
3855
+ readonly resolve: (resolve: TransitionResolver<Events, Emits, Context, Selection>, options?: TransitionRequiredOptions) => BuiltTransition<States, Events, Emits, StateId, Context, Reenter, SelectedTargetResult<Selection> | Declined, "declinable">;
3856
+ };
3809
3857
  /**
3810
3858
  * A selected transition target with target-specific resolver operations.
3811
3859
  *
3812
- * **Example** (Updating state while reentering)
3860
+ * **Example** (Constructing state while reentering)
3813
3861
  *
3814
3862
  * ```ts
3815
3863
  * Reset: (to) =>
3816
- * to.full.Ready().resolve(
3817
- * ({ target }) => target.from(),
3818
- * { reenter: true }
3819
- * )
3864
+ * to.branch.Ready().reenter().from(({ event }) => ({ count: event.count }))
3820
3865
  * ```
3821
3866
  *
3822
3867
  * @inlineType TransitionRequiredOptions
3823
3868
  * @inlineType TransitionDeclinableOptions
3824
- * @inlineType TransitionReenterOption
3825
3869
  */
3826
- type TransitionTarget<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateNodeIdentifier<States>, Context, Reenter extends boolean, Acceptance extends TransitionAcceptance, Selection extends TargetSelection<any, any, any>> = Selection & (SelectionSupportsDefaultConstruction<Selection> extends true ? BuiltTransition<States, Events, Emits, StateId, Context, Reenter, SelectionKind<Selection> extends "none" ? undefined : SelectedTargetResult<Selection> | undefined, "required"> : {}) & {
3870
+ type TransitionTarget<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateNodeIdentifier<States>, Context, Reenter extends boolean, Acceptance extends TransitionAcceptance, Selection extends TargetSelection<any, any, any>> = Selection & ("declinable" extends Acceptance ? {
3871
+ /** Declines this candidate before construction when the predicate is false. */
3872
+ readonly guard: (predicate: (context: Omit<Context, "target">) => boolean) => GuardedTransition<States, Events, Emits, StateId, Context, Reenter, Selection>;
3873
+ } : {}) & ConstructionCallbacks<Omit<Context, "target">, SelectionBuilder<Selection>, BuiltTransition<States, Events, Emits, StateId, Context, Reenter, SelectedTargetResult<Selection>, "required">> & (SelectionSupportsDefaultConstruction<Selection> extends true ? BuiltTransition<States, Events, Emits, StateId, Context, Reenter, SelectionKind<Selection> extends "none" ? undefined : SelectedTargetResult<Selection> | undefined, "required"> : {}) & {
3827
3874
  /** Evaluates state construction after this transition is selected. */
3828
3875
  readonly resolve: TransitionResolveRequired<States, Events, Emits, StateId, Context, Reenter, Selection> & ("declinable" extends Acceptance ? TransitionResolveDeclinable<States, Events, Emits, StateId, Context, Reenter, Selection> : {});
3829
- } & ([Reenter] extends [true] ? SelectionSupportsDefaultConstruction<Selection> extends true ? {
3830
- /** Reenters the source using the selected target's default construction. */
3831
- readonly reenter: () => BuiltTransition<States, Events, Emits, StateId, Context, Reenter, SelectionKind<Selection> extends "none" ? undefined : SelectedTargetResult<Selection> | undefined, "required">;
3832
- } : {} : {}) & (SelectionKind<Selection> extends "state" ? SelectionScope<Selection> extends "local" | "branch" ? RetainedUpdateOwner<States, StateId, Selection> extends infer Owner extends ValuedStateIdentifier<States> ? [
3876
+ } & ([Reenter] extends [true] ? {
3877
+ /** Forces source exit and entry, preserving subsequent construction and guards. */
3878
+ readonly reenter: () => Omit<TransitionTarget<States, Events, Emits, StateId, Context, Reenter, Acceptance, Selection>, typeof Topology.TargetSelectionTypeId>;
3879
+ } : {}) & (SelectionKind<Selection> extends "state" ? SelectionScope<Selection> extends "local" | "branch" ? RetainedUpdateOwner<States, StateId, Selection> extends infer Owner extends ValuedStateIdentifier<States> ? [
3833
3880
  Owner
3834
3881
  ] extends [never] ? {} : {
3835
3882
  /** Declares one valued owner retained by the selected topology. */
3836
3883
  readonly updating: <SelectedOwner extends Owner>(owner: RetainedOwnerSelector<SelectedOwner>) => UpdatingTransitionTarget<States, Events, Emits, StateId, Context, Reenter, Acceptance, Selection, SelectedOwner>;
3837
3884
  } : {} : {} : {});
3838
- /** A topology selection that requires one retained owner replacement. */
3839
- type UpdatingTransitionTarget<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateNodeIdentifier<States>, Context, Reenter extends boolean, Acceptance extends TransitionAcceptance, Selection extends TargetSelection<any, any, "state">, Owner extends ValuedStateIdentifier<States>> = Selection & {
3885
+ type UpdatingConstructionCallbacks<Context, Builder, OwnerBuilder, Result> = {
3886
+ readonly [Method in Extract<keyof Builder & keyof OwnerBuilder, "from" | "decoded"> as Builder[Method] extends (...args: infer Args) => unknown ? Args extends readonly [unknown?] ? Method : never : never]: Builder[Method] extends (...args: infer Args) => unknown ? OwnerBuilder[Method] extends (value: infer Update) => unknown ? (construct: (context: Context) => {
3887
+ readonly target: Args[0];
3888
+ readonly update: Update;
3889
+ }) => Result : never : never;
3890
+ };
3891
+ type UpdatingCallbacks<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateNodeIdentifier<States>, Context, Reenter extends boolean, Selection extends TargetSelection<any, any, "state">, Owner extends ValuedStateIdentifier<States>, Acceptance extends TransitionAcceptance> = UpdatingConstructionCallbacks<Omit<UpdatingTransitionResolveContext<States, Context, Selection, Owner>, "owner" | "target">, SelectionBuilder<Selection>, StateUpdateBuilder<States, Owner>, BuiltTransition<States, Events, Emits, StateId, Context, Reenter, CombinedTarget<UnwrapConstruction<SelectedTargetResult<Selection>>, States, Owner> | (Acceptance extends "declinable" ? Declined : never), Acceptance>>;
3892
+ type GuardedUpdatingTransition<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateNodeIdentifier<States>, Context, Reenter extends boolean, Selection extends TargetSelection<any, any, "state">, Owner extends ValuedStateIdentifier<States>> = UpdatingCallbacks<States, Events, Emits, StateId, Context, Reenter, Selection, Owner, "declinable"> & {
3893
+ readonly resolve: (resolve: (context: UpdatingTransitionResolveContext<States, Context, Selection, Owner>, enqueue: Enqueue<EventOf<Events>, EmittedEventOf<Emits>>) => CombinedTarget<UnwrapConstruction<SelectedTargetResult<Selection>>, States, Owner>, options?: TransitionRequiredOptions) => BuiltTransition<States, Events, Emits, StateId, Context, Reenter, CombinedTarget<UnwrapConstruction<SelectedTargetResult<Selection>>, States, Owner> | Declined, "declinable">;
3894
+ };
3895
+ /**
3896
+ * A topology selection that requires one retained owner replacement.
3897
+ *
3898
+ * `.from` constructs both values from schema inputs; `.decoded` accepts both
3899
+ * decoded values. Both callbacks return `{ target, update }` and read the same
3900
+ * pre-transition snapshot. Use `.resolve` for explicit child construction,
3901
+ * mixed construction methods, or queued commands.
3902
+ *
3903
+ * **Example** (Guarding an atomic destination and owner update)
3904
+ *
3905
+ * ```ts
3906
+ * Save: (to) => to.local.Saving().updating(to.root)
3907
+ * .guard(({ current }) => current.draft.length > 0)
3908
+ * .from(({ current }) => ({
3909
+ * target: { text: current.draft },
3910
+ * update: { ...current, attempts: current.attempts + 1 }
3911
+ * }))
3912
+ * ```
3913
+ */
3914
+ type UpdatingTransitionTarget<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateNodeIdentifier<States>, Context, Reenter extends boolean, Acceptance extends TransitionAcceptance, Selection extends TargetSelection<any, any, "state">, Owner extends ValuedStateIdentifier<States>> = Selection & UpdatingCallbacks<States, Events, Emits, StateId, Context, Reenter, Selection, Owner, "required"> & ([Reenter] extends [true] ? {
3915
+ readonly reenter: () => Omit<UpdatingTransitionTarget<States, Events, Emits, StateId, Context, Reenter, Acceptance, Selection, Owner>, typeof Topology.TargetSelectionTypeId>;
3916
+ } : {}) & ("declinable" extends Acceptance ? {
3917
+ /** Declines before either value is constructed or any commands are enqueued. */
3918
+ readonly guard: (predicate: (context: Omit<UpdatingTransitionResolveContext<States, Context, Selection, Owner>, "owner" | "target">) => boolean) => GuardedUpdatingTransition<States, Events, Emits, StateId, Context, Reenter, Selection, Owner>;
3919
+ } : {}) & {
3840
3920
  /** @internal */
3841
3921
  readonly "~effect/Machine/UpdatingTransitionTarget": Owner;
3842
- readonly resolve: ((resolve: (context: UpdatingTransitionResolveContext<States, Context, Selection, Owner>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => CombinedTarget<UnwrapConstruction<SelectedTargetResult<Selection>>, States, Owner>, options?: TransitionRequiredOptions<Reenter>) => BuiltTransition<States, Events, Emits, StateId, Context, Reenter, CombinedTarget<UnwrapConstruction<SelectedTargetResult<Selection>>, States, Owner>, "required">) & ("declinable" extends Acceptance ? (resolve: (context: UpdatingTransitionResolveContext<States, Context, Selection, Owner> & DeclineCapability, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => CombinedTarget<UnwrapConstruction<SelectedTargetResult<Selection>>, States, Owner> | Declined, options: TransitionDeclinableOptions<Reenter>) => BuiltTransition<States, Events, Emits, StateId, Context, Reenter, CombinedTarget<UnwrapConstruction<SelectedTargetResult<Selection>>, States, Owner> | Declined, "declinable"> : {});
3922
+ readonly resolve: ((resolve: (context: UpdatingTransitionResolveContext<States, Context, Selection, Owner>, enqueue: Enqueue<EventOf<Events>, EmittedEventOf<Emits>>) => CombinedTarget<UnwrapConstruction<SelectedTargetResult<Selection>>, States, Owner>, options?: TransitionRequiredOptions) => BuiltTransition<States, Events, Emits, StateId, Context, Reenter, CombinedTarget<UnwrapConstruction<SelectedTargetResult<Selection>>, States, Owner>, "required">) & ("declinable" extends Acceptance ? (resolve: (context: UpdatingTransitionResolveContext<States, Context, Selection, Owner> & DeclineCapability, enqueue: Enqueue<EventOf<Events>, EmittedEventOf<Emits>>) => CombinedTarget<UnwrapConstruction<SelectedTargetResult<Selection>>, States, Owner> | Declined, options: TransitionDeclinableOptions) => BuiltTransition<States, Events, Emits, StateId, Context, Reenter, CombinedTarget<UnwrapConstruction<SelectedTargetResult<Selection>>, States, Owner> | Declined, "declinable"> : {});
3843
3923
  };
3844
3924
  /** @internal */
3845
3925
  interface StateUpdateTransitionRequired<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateNodeIdentifier<States>, Context, Reenter extends boolean, Selection extends TargetSelection<any, any, "update">> {
3846
- (resolve: StateUpdateResolver<States, Events, Emits, Context, Extract<SelectionPath<Selection>, ValuedStateIdentifier<States>>>, options?: TransitionRequiredOptions<Reenter>): BuiltTransition<States, Events, Emits, StateId, Context, Reenter, SelectedTargetResult<Selection>, "required">;
3926
+ (resolve: StateUpdateResolver<States, Events, Emits, Context, Extract<SelectionPath<Selection>, ValuedStateIdentifier<States>>>, options?: TransitionRequiredOptions): BuiltTransition<States, Events, Emits, StateId, Context, Reenter, SelectedTargetResult<Selection>, "required">;
3847
3927
  }
3848
3928
  /** @internal */
3849
3929
  interface StateUpdateTransitionDeclinable<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateNodeIdentifier<States>, Context, Reenter extends boolean, Selection extends TargetSelection<any, any, "update">> {
3850
- (resolve: DeclinableStateUpdateResolver<States, Events, Emits, Context, Extract<SelectionPath<Selection>, ValuedStateIdentifier<States>>>, options: TransitionDeclinableOptions<Reenter>): BuiltTransition<States, Events, Emits, StateId, Context, Reenter, SelectedTargetResult<Selection> | Declined, "declinable">;
3930
+ (resolve: DeclinableStateUpdateResolver<States, Events, Emits, Context, Extract<SelectionPath<Selection>, ValuedStateIdentifier<States>>>, options: TransitionDeclinableOptions): BuiltTransition<States, Events, Emits, StateId, Context, Reenter, SelectedTargetResult<Selection> | Declined, "declinable">;
3851
3931
  }
3932
+ type GuardedStateUpdateTransition<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateNodeIdentifier<States>, Context, Reenter extends boolean, Selection extends TargetSelection<any, any, "update">> = ConstructionCallbacks<Omit<StateUpdateResolveContext<States, Context, Extract<SelectionPath<Selection>, ValuedStateIdentifier<States>>>, "owner">, SelectionBuilder<Selection>, BuiltTransition<States, Events, Emits, StateId, Context, Reenter, SelectedTargetResult<Selection> | Declined, "declinable">> & {
3933
+ readonly resolve: (resolve: StateUpdateResolver<States, Events, Emits, Context, Extract<SelectionPath<Selection>, ValuedStateIdentifier<States>>>, options?: TransitionRequiredOptions) => BuiltTransition<States, Events, Emits, StateId, Context, Reenter, SelectedTargetResult<Selection> | Declined, "declinable">;
3934
+ };
3852
3935
  /** @internal */
3853
- type StateUpdateTransition<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateNodeIdentifier<States>, Context, Reenter extends boolean, Acceptance extends TransitionAcceptance, Selection extends TargetSelection<any, any, "update">> = Selection & StateUpdateTransitionRequired<States, Events, Emits, StateId, Context, Reenter, Selection> & ("declinable" extends Acceptance ? StateUpdateTransitionDeclinable<States, Events, Emits, StateId, Context, Reenter, Selection> : {});
3936
+ type StateUpdateTransition<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateNodeIdentifier<States>, Context, Reenter extends boolean, Acceptance extends TransitionAcceptance, Selection extends TargetSelection<any, any, "update">> = Selection & ([Reenter] extends [true] ? {
3937
+ /** Reenters the source while updating its retained valued ancestor. */
3938
+ readonly reenter: () => Omit<StateUpdateTransition<States, Events, Emits, StateId, Context, Reenter, Acceptance, Selection>, typeof Topology.TargetSelectionTypeId>;
3939
+ } : {}) & ("declinable" extends Acceptance ? {
3940
+ /** Declines before replacing the selected owner value. */
3941
+ readonly guard: (predicate: (context: Omit<StateUpdateResolveContext<States, Context, Extract<SelectionPath<Selection>, ValuedStateIdentifier<States>>>, "owner">) => boolean) => GuardedStateUpdateTransition<States, Events, Emits, StateId, Context, Reenter, Selection>;
3942
+ } : {}) & ConstructionCallbacks<Omit<StateUpdateResolveContext<States, Context, Extract<SelectionPath<Selection>, ValuedStateIdentifier<States>>>, "owner">, SelectionBuilder<Selection>, BuiltTransition<States, Events, Emits, StateId, Context, Reenter, SelectedTargetResult<Selection>, "required">> & {
3943
+ readonly resolve: StateUpdateTransitionRequired<States, Events, Emits, StateId, Context, Reenter, Selection> & ("declinable" extends Acceptance ? StateUpdateTransitionDeclinable<States, Events, Emits, StateId, Context, Reenter, Selection> : {});
3944
+ };
3854
3945
  /** @internal Type evidence retained by a machine initial-entry declaration. */
3855
3946
  interface InitialBuilderEvidence<out Selection> {
3856
3947
  readonly [InitialBuilderTypeId]: Types.Covariant<Selection>;
3857
3948
  }
3949
+ /** Decoded input shared by initial construction callbacks. */
3950
+ interface InitialContext<Input> {
3951
+ /** Decoded value supplied when the machine is started. */
3952
+ readonly input: Input;
3953
+ }
3858
3954
  /** A selected machine initial entry with its exact resolver target. */
3859
- type InitialTransitionTarget<Input, Selection extends TargetSelection<any, any, any>> = Selection & (SelectionSupportsDefaultConstruction<Selection> extends true ? InitialBuilderEvidence<Selection> : {}) & {
3955
+ type InitialTransitionTarget<Input, Selection extends TargetSelection<any, any, any>> = Selection & ConstructionCallbacks<InitialContext<Input>, SelectionBuilder<Selection>, InitialBuilderEvidence<Selection>> & (SelectionSupportsDefaultConstruction<Selection> extends true ? InitialBuilderEvidence<Selection> : {}) & {
3860
3956
  /** Lazily constructs the selected initial state from decoded machine input. */
3861
3957
  readonly resolve: (resolve: (context: {
3862
3958
  /** Decoded value supplied when the machine is started. */
@@ -3874,25 +3970,50 @@ export declare namespace Machine {
3874
3970
  type InitialSelector<States extends StateSchemas, Input = void> = InitialSelectorNode<Input, InitialTargetSelector<States>>;
3875
3971
  /** Target-first initial-entry declaration accepted by {@link make}. */
3876
3972
  type InitialBuilderInput<States extends StateSchemas, Input> = (to: InitialSelector<States, Input>) => InitialBuilderEvidence<TargetSelection<any, any, any>>;
3973
+ /** Initializes the root and its declared default descendants. */
3974
+ type RootInitialBuilderInput<Root extends StateNodeConfig, Input> = (root: InitialTransitionTarget<Input, SelectionValue<InitialTargetFactory<Root, "">, "", "initial", "initial">>) => InitialBuilderEvidence<TargetSelection<any, any, any>>;
3975
+ interface RootConfigurationSelection<in out Root extends StateNodeConfig> extends TargetSelection<FullSnapshotMethod<{
3976
+ readonly "": Root;
3977
+ }, "" & ActiveStateKey<{
3978
+ readonly "": Root;
3979
+ }>, "">, "", "state", "initial"> {
3980
+ }
3981
+ /** Explicitly constructs a complete starting configuration. */
3982
+ type RootConfigurationBuilderInput<Root extends StateNodeConfig, Input> = (root: ConstructionCallbacks<InitialContext<Input>, SelectionBuilder<RootConfigurationSelection<Root>>, InitialBuilderEvidence<RootConfigurationSelection<Root>>> & {
3983
+ readonly resolve: (resolve: (context: {
3984
+ /** Decoded startup input. */
3985
+ readonly input: Input;
3986
+ /** Builder for the complete root configuration. */
3987
+ readonly target: SelectionBuilder<RootConfigurationSelection<Root>>;
3988
+ }) => ConstructionResult<Snapshot<{
3989
+ readonly "": Root;
3990
+ }>>) => InitialBuilderEvidence<RootConfigurationSelection<Root>>;
3991
+ }) => InitialBuilderEvidence<TargetSelection<any, any, any>>;
3877
3992
  type TransitionSelectorNode<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateNodeIdentifier<States>, Context, Reenter extends boolean, Acceptance extends TransitionAcceptance, Node> = Node extends TargetSelection<any, any, "update"> ? StateUpdateTransition<States, Events, Emits, StateId, Context, Reenter, Acceptance, Node> : Node extends (...args: infer Args) => infer Selection ? Selection extends TargetSelection<any, any, any> ? ((...args: Args) => TransitionTarget<States, Events, Emits, StateId, Context, Reenter, Acceptance, Selection>) & {
3878
3993
  readonly [Key in keyof Node]: TransitionSelectorNode<States, Events, Emits, StateId, Context, Reenter, Acceptance, Node[Key]>;
3879
3994
  } : never : Node extends TargetSelection<any, any, any> ? TransitionTarget<States, Events, Emits, StateId, Context, Reenter, Acceptance, Node> : {
3880
3995
  readonly [Key in keyof Node]: TransitionSelectorNode<States, Events, Emits, StateId, Context, Reenter, Acceptance, Node[Key]>;
3881
3996
  };
3882
3997
  interface TransitionBranchesResolveRequired<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateNodeIdentifier<States>, Context, Reenter extends boolean, Branches extends Readonly<Record<string, TransitionBranchInput>>> {
3883
- (resolve: TransitionBranchesResolver<Events, Emits, Context, Branches>, options?: TransitionRequiredOptions<Reenter>): BuiltTransition<States, Events, Emits, StateId, Context, Reenter, BranchSelectionResult<Branches>, "required">;
3998
+ (resolve: TransitionBranchesResolver<Events, Emits, Context, Branches>, options?: TransitionRequiredOptions): BuiltTransition<States, Events, Emits, StateId, Context, Reenter, BranchSelectionResult<Branches>, "required">;
3884
3999
  }
3885
4000
  interface TransitionBranchesResolveDeclinable<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateNodeIdentifier<States>, Context, Reenter extends boolean, Branches extends Readonly<Record<string, TransitionBranchInput>>> {
3886
- (resolve: DeclinableTransitionBranchesResolver<Events, Emits, Context, Branches>, options: TransitionDeclinableOptions<Reenter>): BuiltTransition<States, Events, Emits, StateId, Context, Reenter, BranchSelectionResult<Branches> | Declined, "declinable">;
4001
+ (resolve: DeclinableTransitionBranchesResolver<Events, Emits, Context, Branches>, options: TransitionDeclinableOptions): BuiltTransition<States, Events, Emits, StateId, Context, Reenter, BranchSelectionResult<Branches> | Declined, "declinable">;
3887
4002
  }
4003
+ type TransitionSelectorTargets<in out States extends StateSchemas, in out Events extends ReadonlyArray<TaggedSchema>, in out Emits extends ReadonlyArray<TaggedSchema>, in out StateId extends StateNodeIdentifier<States>, in out Context, in out Reenter extends boolean, in out Acceptance extends TransitionAcceptance> = {
4004
+ readonly [Key in keyof TargetSelector<States, StateId>]: TransitionSelectorNode<States, Events, Emits, StateId, Context, Key extends "self" ? false : Reenter, Acceptance, TargetSelector<States, StateId>[Key]>;
4005
+ };
4006
+ type TransitionBranchesTarget<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateNodeIdentifier<States>, Context, Reenter extends boolean, Acceptance extends TransitionAcceptance, Branches extends Readonly<Record<string, TransitionBranchInput>>> = {
4007
+ /** Resolves exactly one declared branch after this transition is selected. */
4008
+ readonly resolve: TransitionBranchesResolveRequired<States, Events, Emits, StateId, Context, Reenter, Branches> & ("declinable" extends Acceptance ? TransitionBranchesResolveDeclinable<States, Events, Emits, StateId, Context, Reenter, Branches> : {});
4009
+ } & ([Reenter] extends [true] ? {
4010
+ readonly reenter: () => TransitionBranchesTarget<States, Events, Emits, StateId, Context, Reenter, Acceptance, Branches>;
4011
+ } : {});
3888
4012
  /** Selector supplied to inline transition declarations. */
3889
- type TransitionSelector<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateNodeIdentifier<States>, Context, Reenter extends boolean, Acceptance extends TransitionAcceptance> = TransitionSelectorNode<States, Events, Emits, StateId, Context, Reenter, Acceptance, TargetSelector<States, StateId>> & {
4013
+ interface TransitionSelector<in out States extends StateSchemas, in out Events extends ReadonlyArray<TaggedSchema>, in out Emits extends ReadonlyArray<TaggedSchema>, in out StateId extends StateNodeIdentifier<States>, in out Context, in out Reenter extends boolean, in out Acceptance extends TransitionAcceptance> extends TransitionSelectorTargets<States, Events, Emits, StateId, Context, Reenter, Acceptance> {
3890
4014
  /** Declares a closed set of named destinations for one resolver. */
3891
- readonly branches: <const Branches extends Readonly<Record<string, TransitionBranchInput>>>(branches: Branches & ValidateTransitionBranchRecord<NoInfer<Branches>>) => {
3892
- /** Resolves exactly one declared branch after this transition is selected. */
3893
- readonly resolve: TransitionBranchesResolveRequired<States, Events, Emits, StateId, Context, Reenter, Branches> & ("declinable" extends Acceptance ? TransitionBranchesResolveDeclinable<States, Events, Emits, StateId, Context, Reenter, Branches> : {});
3894
- };
3895
- };
4015
+ readonly branches: <const Branches extends Readonly<Record<string, TransitionBranchInput>>>(branches: Branches & ValidateTransitionBranchRecord<NoInfer<Branches>>) => TransitionBranchesTarget<States, Events, Emits, StateId, Context, Reenter, Acceptance, Branches>;
4016
+ }
3896
4017
  /** Inline transition declaration accepted by state and invocation handlers. */
3897
4018
  type TransitionBuilderInput<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateNodeIdentifier<States>, Context, Reenter extends boolean, Acceptance extends TransitionAcceptance> = (to: TransitionSelector<States, Events, Emits, StateId, Context, Reenter, Acceptance>) => TransitionTyped<States, Events, Emits, StateId, Context, Reenter, Acceptance> & TransitionBuilderEvidence<any, Acceptance>;
3898
4019
  type InvokeTransition<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateNodeIdentifier<States>, Context> = TransitionConfig<States, Events, Emits, StateId, Context, true, TransitionAcceptance>;
@@ -4011,7 +4132,7 @@ export declare namespace Machine {
4011
4132
  type EffectInvokeBuilder<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, InputEvents extends ReadonlyArray<TaggedSchema>, ParentEvents extends ReadonlyArray<TaggedSchema>, Source extends (...args: ReadonlyArray<any>) => Effect.Effect<any, any, any>> = InvokeBuilder<States, Events, Emits, StateId, InputEvents, ParentEvents, Effect.Success<ReturnType<Source>>, Effect.Error<ReturnType<Source>>, Effect.Services<ReturnType<Source>>, never, never, never, never, RequiredInvokeChannel<Effect.Success<ReturnType<Source>>, "done"> | RequiredInvokeChannel<Effect.Error<ReturnType<Source>>, "failure">, never>;
4012
4133
  type StreamInvokeBuilder<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, InputEvents extends ReadonlyArray<TaggedSchema>, ParentEvents extends ReadonlyArray<TaggedSchema>, Source extends (...args: ReadonlyArray<any>) => Stream.Stream<any, any, any>> = InvokeBuilder<States, Events, Emits, StateId, InputEvents, ParentEvents, void, Stream.Error<ReturnType<Source>>, Stream.Services<ReturnType<Source>>, never, never, never, Stream.Success<ReturnType<Source>>, "done" | RequiredInvokeChannel<Stream.Success<ReturnType<Source>>, "element"> | RequiredInvokeChannel<Stream.Error<ReturnType<Source>>, "failure">, never>;
4013
4134
  type LogicInvokeBuilder<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, InputEvents extends ReadonlyArray<TaggedSchema>, ParentEvents extends ReadonlyArray<TaggedSchema>, ChildLogic> = InvokeBuilder<States, Events, Emits, StateId, InputEvents, ParentEvents, LogicOutputOf<ChildLogic>, LogicErrorOf<ChildLogic>, LogicServicesOf<ChildLogic>, LogicInitialErrorOf<ChildLogic>, never, never, never, RequiredInvokeChannel<LogicOutputOf<ChildLogic>, "done"> | RequiredInvokeChannel<LogicErrorOf<ChildLogic>, "failure">, InvokeTransition<States, Events, Emits, StateId, InvokeSnapshotContext<States, Events, Emits, StateId, LogicStateOf<ChildLogic>, LogicErrorOf<ChildLogic>, LogicOutputOf<ChildLogic>, InputEvents, ParentEvents>>>;
4014
- type ChildInvokeBuilder<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, InputEvents extends ReadonlyArray<TaggedSchema>, ParentEvents extends ReadonlyArray<TaggedSchema>, Child extends ChildMachine.Any, ChildDefinition extends Machine.Any = Child["machine"]> = InvokeBuilder<States, Events, Emits, StateId, InputEvents, ParentEvents, Output<ChildDefinition>, Error<ChildDefinition> | ActionError<Services<ChildDefinition>>, Services<ChildDefinition>, InitialError<ChildDefinition>, Emit<ChildDefinition>, EventOf<Machine.ParentEvents<ChildDefinition>>, never, RequiredInvokeChannel<Output<ChildDefinition>, "done"> | RequiredInvokeChannel<Error<ChildDefinition> | ActionError<Services<ChildDefinition>>, "failure">, InvokeTransition<States, Events, Emits, StateId, InvokeSnapshotContext<States, Events, Emits, StateId, Snapshot<Machine.States<ChildDefinition>>, Error<ChildDefinition>, Output<ChildDefinition>, InputEvents, ParentEvents>>>;
4135
+ type ChildInvokeBuilder<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, InputEvents extends ReadonlyArray<TaggedSchema>, ParentEvents extends ReadonlyArray<TaggedSchema>, Child extends ChildMachine.Any, ChildDefinition extends Machine.Any = Child["machine"]> = InvokeBuilder<States, Events, Emits, StateId, InputEvents, ParentEvents, Output<ChildDefinition>, Error<ChildDefinition> | ActionError<Services<ChildDefinition>>, Services<ChildDefinition>, InitialError<ChildDefinition>, EmittedEvent<ChildDefinition>, EventOf<Machine.ParentEvents<ChildDefinition>>, never, RequiredInvokeChannel<Output<ChildDefinition>, "done"> | RequiredInvokeChannel<Error<ChildDefinition> | ActionError<Services<ChildDefinition>>, "failure">, InvokeTransition<States, Events, Emits, StateId, InvokeSnapshotContext<States, Events, Emits, StateId, Snapshot<Machine.States<ChildDefinition>>, Error<ChildDefinition>, Output<ChildDefinition>, InputEvents, ParentEvents>>>;
4015
4136
  /**
4016
4137
  * Selects state-owned work and begins its lifecycle-handler chain.
4017
4138
  *
@@ -4024,9 +4145,9 @@ export declare namespace Machine {
4024
4145
  * ```ts
4025
4146
  * invoke: (from) =>
4026
4147
  * from.effect("load-user", () => loadUser).onDone((to) =>
4027
- * to.full.Ready().resolve(({ output, target }) => target.from({ user: output }))
4148
+ * to.branch.Ready().resolve(({ output, target }) => target.from({ user: output }))
4028
4149
  * ).onFailure((to) =>
4029
- * to.full.Failed().resolve(({ error, target }) => target.from({ error }))
4150
+ * to.branch.Failed().resolve(({ error, target }) => target.from({ error }))
4030
4151
  * )
4031
4152
  * ```
4032
4153
  *
@@ -4141,14 +4262,14 @@ export declare namespace Machine {
4141
4262
  * **Example** (State actions, events, and invocation)
4142
4263
  *
4143
4264
  * ```ts
4144
- * machine.handle({
4265
+ * machine.handle({ states: {
4145
4266
  * Loading: {
4146
4267
  * entry: (_, enqueue) => enqueue.emit({ _tag: "Started" }),
4147
4268
  * invoke: (from) =>
4148
- * from.effect("load", () => load).onDone((to) => to.full.Ready()),
4149
- * on: { Cancel: (to) => to.full.Idle() }
4269
+ * from.effect("load", () => load).onDone((to) => to.branch.Ready()),
4270
+ * on: { Cancel: (to) => to.branch.Idle() }
4150
4271
  * }
4151
- * })
4272
+ * } })
4152
4273
  * ```
4153
4274
  *
4154
4275
  * @inlineType ActiveOutputHandlerConfig
@@ -4159,9 +4280,9 @@ export declare namespace Machine {
4159
4280
  */
4160
4281
  type ActiveStateConfig<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, E, R, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> = {
4161
4282
  /** Runs synchronously when the state is entered and may enqueue commands. */
4162
- readonly entry?: (context: StateActionContext<States, Events, Emits, StateId, InputEvents, ParentEvents>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => StateActionResult<any, any>;
4283
+ readonly entry?: (context: StateActionContext<States, Events, Emits, StateId, InputEvents, ParentEvents>, enqueue: Enqueue<EventOf<Events>, EmittedEventOf<Emits>>) => StateActionResult<any, any>;
4163
4284
  /** Runs synchronously before the state is exited and may enqueue commands. */
4164
- readonly exit?: (context: StateActionContext<States, Events, Emits, StateId, InputEvents, ParentEvents>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => StateActionResult<any, any>;
4285
+ readonly exit?: (context: StateActionContext<States, Events, Emits, StateId, InputEvents, ParentEvents>, enqueue: Enqueue<EventOf<Events>, EmittedEventOf<Emits>>) => StateActionResult<any, any>;
4165
4286
  /** Starts state-owned Effect, Stream, timer, logic, or child lifecycles. */
4166
4287
  readonly invoke?: InvokeBuilderInput<States, Events, Emits, StateId, InputEvents, ParentEvents>;
4167
4288
  /** Eventless transition evaluated after the state becomes stable. */
@@ -4235,9 +4356,9 @@ export declare namespace Machine {
4235
4356
  * @category models
4236
4357
  * @since 0.13.0
4237
4358
  */
4238
- type StateInitializeHandler<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> = (context: StateInitializeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => SnapshotBuilderComplete<StateInitializeValue<States, StateId>, boolean>;
4359
+ type StateInitializeHandler<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> = (context: StateInitializeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>, enqueue: Enqueue<EventOf<Events>, EmittedEventOf<Emits>>) => SnapshotBuilderComplete<StateInitializeValue<States, StateId>, boolean>;
4239
4360
  /** Context used only when a history node has no previously captured record. */
4240
- interface HistoryDefaultContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, ParentId extends StateIdentifier<States>> {
4361
+ interface HistoryDefaultContext<in out States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, in out ParentId extends StateIdentifier<States>> {
4241
4362
  /** Lifecycle event that attempted to restore this history node. */
4242
4363
  readonly event: LifecycleEvent<Events>;
4243
4364
  /** Complete target builder rooted at the history owner. */
@@ -4252,7 +4373,7 @@ export declare namespace Machine {
4252
4373
  * history owner. This makes the default independent of the transition source
4253
4374
  * and provides every inactive ancestor and required parallel region.
4254
4375
  */
4255
- type HistoryDefaultHandler<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, ParentId extends StateIdentifier<States>> = (context: HistoryDefaultContext<States, Events, Emits, ParentId>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => CompleteSnapshotContaining<States, ParentId> | StateConstruction<CompleteSnapshotContaining<States, ParentId>>;
4376
+ type HistoryDefaultHandler<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, ParentId extends StateIdentifier<States>> = (context: HistoryDefaultContext<States, Events, Emits, ParentId>, enqueue: Enqueue<EventOf<Events>, EmittedEventOf<Emits>>) => CompleteSnapshotContaining<States, ParentId> | StateConstruction<CompleteSnapshotContaining<States, ParentId>>;
4256
4377
  /**
4257
4378
  * Fallback implementation for one direct history pseudo-state.
4258
4379
  *
@@ -4293,7 +4414,7 @@ export declare namespace Machine {
4293
4414
  */
4294
4415
  type FinalStateConfig<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> = {
4295
4416
  /** Runs synchronously when the final state is entered and may enqueue commands. */
4296
- readonly entry?: (context: StateActionContext<States, Events, Emits, StateId, InputEvents, ParentEvents>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => StateActionResult<any, any>;
4417
+ readonly entry?: (context: StateActionContext<States, Events, Emits, StateId, InputEvents, ParentEvents>, enqueue: Enqueue<EventOf<Events>, EmittedEventOf<Emits>>) => StateActionResult<any, any>;
4297
4418
  readonly exit?: never;
4298
4419
  readonly always?: never;
4299
4420
  readonly onDone?: never;
@@ -4319,10 +4440,12 @@ export declare namespace Machine {
4319
4440
  type HandlerNodeChildrenConfig<Config> = "states" extends keyof Config ? Config extends {
4320
4441
  readonly states?: infer Children;
4321
4442
  } ? NonNullable<Children> : never : never;
4322
- type HandlerNodeByPath<States extends StateSchemas, Path extends string> = Path extends `${infer Head}.${infer Rest}` ? Head extends keyof States ? States[Head] extends {
4443
+ type HandlerNodeByPath<States extends StateSchemas, Path extends string> = "" extends keyof States ? Path extends "" ? States[""] : States[""] extends {
4444
+ readonly states: infer Children extends StateSchemas;
4445
+ } ? HandlerNodeByPath<Children, Path> : never : Path extends `${infer Head}.${infer Rest}` ? Head extends keyof States ? States[Head] extends {
4323
4446
  readonly states: infer Children extends StateSchemas;
4324
4447
  } ? HandlerNodeByPath<Children, Rest> : never : never : Path extends keyof States ? States[Path] : never;
4325
- type HandlerConfigAtPath<Config, Path extends string> = Path extends `${infer Head}.${infer Rest}` ? Head extends keyof Config ? HandlerConfigAtPath<HandlerNodeChildrenConfig<Config[Head]>, Rest> : never : Path extends keyof Config ? Config[Path] : never;
4448
+ type HandlerConfigAtPath<Config, Path extends string> = [Config] extends [never] ? never : "" extends keyof Config ? Path extends "" ? Config[""] : HandlerConfigAtPath<HandlerNodeChildrenConfig<Config[""]>, Path> : Path extends `${infer Head}.${infer Rest}` ? Head extends keyof Config ? HandlerConfigAtPath<HandlerNodeChildrenConfig<Config[Head]>, Rest> : never : Path extends keyof Config ? Config[Path] : never;
4326
4449
  type HandlerValidationAtPath<Path extends string, Validation> = Path extends `${infer Head}.${infer Rest}` ? {
4327
4450
  readonly [Key in Head]?: {
4328
4451
  readonly states: HandlerValidationAtPath<Rest, Validation>;
@@ -4374,7 +4497,7 @@ export declare namespace Machine {
4374
4497
  readonly [Key in Extract<keyof Children, string>]: RequiredCompletionOutputStates<States, Extract<JoinPath<StateId, Key>, StateIdentifier<States>>>;
4375
4498
  }[Extract<keyof Children, string>] : never;
4376
4499
  type HandlerOutputStates<AllStates extends StateSchemas, StateId extends StateIdentifier<AllStates>, Config> = "output" extends keyof Config ? StateId : never;
4377
- type HandlerUnknownStateKeyValidation<States extends StateSchemas, Prefix extends string, Config, UnknownKeys extends string = Exclude<Extract<keyof Config, string>, Extract<keyof States, string>>> = [UnknownKeys] extends [never] ? unknown : {
4500
+ type HandlerUnknownStateKeyValidation<States extends StateSchemas, Prefix extends string, Config, UnknownKeys extends string = Exclude<Extract<keyof Config, string>, ActiveStateKey<States> | ChoiceStateKey<States>>> = [UnknownKeys] extends [never] ? unknown : {
4378
4501
  readonly [Key in UnknownKeys]: HandlerValidationError<"Handler tree contains a state key that does not exist", JoinPath<Prefix, Key>, Key>;
4379
4502
  };
4380
4503
  type HandlerUnknownConfigKeyValidation<StateId extends string, Config, UnknownKeys extends string = Exclude<Extract<keyof Config, string>, HandlerNodeConfigKey>> = [UnknownKeys] extends [never] ? unknown : {
@@ -4427,7 +4550,7 @@ export declare namespace Machine {
4427
4550
  ] extends [never] ? unknown : {
4428
4551
  readonly output: HandlerValidationError<"Handler config is missing a region output implementation required by parallel output", StateId, Exclude<RequiredParallelOutputStates<AllStates, StateId>, AvailableOutputStates>>;
4429
4552
  } : unknown : unknown);
4430
- type HandlerRequiredHistoryInitializeValidation<AllStates extends StateSchemas, StateId extends StateIdentifier<AllStates>, Config> = [HistoryIdentifier<AllStates>] extends [never] ? unknown : StateId extends RequiredHistoryInitializers<AllStates> ? "initialize" extends keyof Config ? unknown : {
4553
+ type HandlerRequiredHistoryInitializeValidation<AllStates extends StateSchemas, StateId extends StateIdentifier<AllStates>, Config> = [HistoryIdentifier<AllStates>] extends [never] ? unknown : StateId extends RequiredHistoryInitializers<AllStates> | RequiredInitializers<AllStates> ? "initialize" extends keyof Config ? unknown : {
4431
4554
  readonly initialize: HandlerValidationError<"State requires initialize for shallow history restoration", StateId>;
4432
4555
  } : unknown;
4433
4556
  type HandlerNodeValidation<AllStates extends StateSchemas, Node, Events extends ReadonlyArray<TaggedSchema>, InputEvents extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateNodeIdentifier<AllStates>, Config, AvailableOutputStates extends StateIdentifier<AllStates>> = StateId extends ChoiceIdentifier<AllStates> ? HandlerChoiceUnknownConfigKeyValidation<StateId, Config> & HandlerRuntimeValidation<Events, Emits, StateId, Config> : StateId extends StateIdentifier<AllStates> ? HandlerUnknownConfigKeyValidation<StateId, Config> & HandlerOnKeyValidation<Events, StateId, Config> & HandlerInvokeParentEventsValidation<InputEvents, StateId, Config> & HandlerChildrenValidation<Node, StateId, Config> & HandlerOutputRequirementValidation<AllStates, StateId, AvailableOutputStates, Config> & HandlerRequiredHistoryInitializeValidation<AllStates, StateId, Config> & HandlerRuntimeValidation<Events, Emits, StateId, Config> : unknown;
@@ -4437,11 +4560,38 @@ export declare namespace Machine {
4437
4560
  type HandlerInvokeParentEventsValidation<Events extends ReadonlyArray<TaggedSchema>, StateId extends string, Config> = [InvokeReturn<Config>] extends [never] ? unknown : [Exclude<InvokeParentEvents<InvokeReturn<Config>>, EventOf<Events>>] extends [never] ? unknown : {
4438
4561
  readonly invoke: HandlerValidationError<"Invoked child expects parent events not accepted by this machine", StateId, Exclude<InvokeParentEvents<InvokeReturn<Config>>, EventOf<Events>>>;
4439
4562
  };
4440
- type HandlerRuntimeValidation<Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends string, Config, Incompatible = IncompatibleRuntime<ConfigServices<HandlerConfigPart<Config>>, EventOf<Events>, EmitOf<Emits>>> = [Incompatible] extends [never] ? unknown : HandlerValidationError<"Handler config requires an incompatible machine runtime", StateId, Incompatible>;
4441
- type HandlerNodeValidationAtPath<AllStates extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, InputEvents extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Config, AvailableOutputStates extends StateIdentifier<AllStates>, StateId extends StateNodeIdentifier<AllStates>, NodeConfig = HandlerConfigAtPath<Config, StateId>> = [NodeConfig] extends [never] ? never : HandlerNodeValidation<AllStates, HandlerNodeByPath<AllStates, StateId>, Events, InputEvents, Emits, StateId, NodeConfig, AvailableOutputStates> extends infer Validation ? unknown extends Validation ? never : HandlerValidationAtPath<StateId, Validation> : never;
4563
+ type HandlerRuntimeValidation<Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends string, Config, Incompatible = keyof Config extends never ? never : IncompatibleRuntime<ConfigServices<HandlerConfigPart<Config>>, EventOf<Events>, EmittedEventOf<Emits>>> = [Incompatible] extends [never] ? unknown : HandlerValidationError<"Handler config requires an incompatible machine runtime", StateId, Incompatible>;
4564
+ type HandlerNodeValidationAtPath<AllStates extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, InputEvents extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Config, AvailableOutputStates extends StateIdentifier<AllStates>, StateId extends StateNodeIdentifier<AllStates>, NodeConfig = HandlerConfigAtPath<Config, StateId>> = [NodeConfig] extends [never] ? never : HandlerNodeValidation<AllStates, HandlerNodeByPath<AllStates, StateId>, Events, InputEvents, Emits, StateId, NodeConfig, AvailableOutputStates> extends infer Validation ? unknown extends Validation ? never : "" extends keyof AllStates ? StateId extends "" ? {
4565
+ readonly ""?: Validation;
4566
+ } : {
4567
+ readonly ""?: {
4568
+ readonly states: HandlerValidationAtPath<StateId, Validation>;
4569
+ };
4570
+ } : HandlerValidationAtPath<StateId, Validation> : never;
4442
4571
  type HandlerTreeNodeValidations<AllStates extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, InputEvents extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Config, AvailableOutputStates extends StateIdentifier<AllStates>> = Types.UnionToIntersection<StateNodeIdentifier<AllStates> extends infer StateId extends StateNodeIdentifier<AllStates> ? StateId extends StateNodeIdentifier<AllStates> ? HandlerNodeValidationAtPath<AllStates, Events, InputEvents, Emits, Config, AvailableOutputStates, StateId> : never : never>;
4443
4572
  type HandlerTreeValidation<AllStates extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, InputEvents extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Config, AvailableOutputStates extends StateIdentifier<AllStates>> = HandlerUnknownStateKeyValidation<AllStates, "", Config> & HandlerTreeNodeValidations<AllStates, Events, InputEvents, Emits, Config, AvailableOutputStates>;
4444
- type HandlerHasRequiredInitial<AllStates extends StateSchemas, StateId extends StateIdentifier<AllStates>, Config> = StateId extends RequiredHistoryInitializers<AllStates> ? "initialize" extends keyof Config ? true : false : true;
4573
+ type RootInitialTargetValidation<States extends StateSchemas, Config> = RequiredInitializersForTargetPath<States, HandlerTreeInitialTargetPath<{
4574
+ readonly "": Config;
4575
+ }>> extends infer Required ? Types.UnionToIntersection<Required extends string ? HandlerConfigAtPath<{
4576
+ readonly "": Config;
4577
+ }, Required> extends infer NodeConfig ? [
4578
+ NodeConfig
4579
+ ] extends [never] ? RootInitializeError<Required> : "initialize" extends keyof NodeConfig ? never : RootInitializeError<Required> : never : unknown> : unknown;
4580
+ type RootInitializeError<Path extends string> = Path extends "" ? {
4581
+ readonly initialize: HandlerValidationError<"State requires initialize because a transition enters its declared initial configuration", Path>;
4582
+ } : {
4583
+ readonly states: HandlerValidationAtPath<Path, {
4584
+ readonly initialize: HandlerValidationError<"State requires initialize because a transition enters its declared initial configuration", Path>;
4585
+ }>;
4586
+ };
4587
+ type RootHandlerValidation<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, InputEvents extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Config, OutputStates extends StateIdentifier<States>> = HandlerNodeValidation<States, States[""], Events, InputEvents, Emits, Extract<"", StateNodeIdentifier<States>>, Config, OutputStates> & RootInitialTargetValidation<States, Config> & Types.UnionToIntersection<Exclude<StateNodeIdentifier<States>, ""> extends infer Path ? Path extends StateNodeIdentifier<States> ? HandlerConfigAtPath<{
4588
+ readonly "": Config;
4589
+ }, Path> extends infer NodeConfig ? [
4590
+ NodeConfig
4591
+ ] extends [never] ? never : HandlerNodeValidation<States, HandlerNodeByPath<States, Path>, Events, InputEvents, Emits, Path, NodeConfig, OutputStates> extends infer Validation ? unknown extends Validation ? never : {
4592
+ readonly states: HandlerValidationAtPath<Path, Validation>;
4593
+ } : never : never : never : never>;
4594
+ type HandlerHasRequiredInitial<AllStates extends StateSchemas, StateId extends StateIdentifier<AllStates>, Config> = StateId extends RequiredHistoryInitializers<AllStates> | RequiredInitializers<AllStates> ? "initialize" extends keyof Config ? true : false : true;
4445
4595
  type HandlerHasRequiredHistoryDefaults<Node, Config> = Node extends {
4446
4596
  readonly states: infer Children extends StateSchemas;
4447
4597
  } ? [HistoryStateKey<Children>] extends [never] ? true : Config extends {
@@ -4456,7 +4606,7 @@ export declare namespace Machine {
4456
4606
  } ? [
4457
4607
  Exclude<ChoiceStateKey<Children>, Extract<keyof NonNullable<ChildrenConfig>, string>>
4458
4608
  ] extends [never] ? true : false : false : true;
4459
- type HandlerImplementedStateId<AllStates extends StateSchemas, Node, StateId extends StateIdentifier<AllStates>, Config> = [HistoryIdentifier<AllStates> | ChoiceIdentifier<AllStates>] extends [never] ? StateId : HandlerHasRequiredInitial<AllStates, StateId, Config> extends true ? HandlerHasRequiredHistoryDefaults<Node, Config> extends true ? HandlerHasRequiredChoices<Node, Config> extends true ? StateId : never : never : never;
4609
+ type HandlerImplementedStateId<AllStates extends StateSchemas, Node, StateId extends StateIdentifier<AllStates>, Config> = [HistoryIdentifier<AllStates> | ChoiceIdentifier<AllStates> | RequiredInitializers<AllStates>] extends [never] ? StateId : HandlerHasRequiredInitial<AllStates, StateId, Config> extends true ? HandlerHasRequiredHistoryDefaults<Node, Config> extends true ? HandlerHasRequiredChoices<Node, Config> extends true ? StateId : never : never : never;
4460
4610
  type HandlerConfigError<Config> = Effect.Error<EventHandlerReturn<Config>> | Effect.Error<AlwaysReturn<Config>> | Effect.Error<DoneReturn<Config>> | Effect.Error<StateActionReturn<Config, "entry">> | Effect.Error<StateActionReturn<Config, "exit">> | Effect.Error<HistoryDefaultReturn<Config>> | Effect.Error<ChoiceReturn<Config>> | InvokeError<Config>;
4461
4611
  type HandlerNodeEvidence<AllStates extends StateSchemas, Config, StateId extends StateNodeIdentifier<AllStates>, NodeConfig = HandlerConfigAtPath<Config, StateId>> = [NodeConfig] extends [never] ? never : {
4462
4612
  readonly stateId: StateId extends StateIdentifier<AllStates> ? HandlerImplementedStateId<AllStates, HandlerNodeByPath<AllStates, StateId>, StateId, NodeConfig> : never;
@@ -4465,7 +4615,7 @@ export declare namespace Machine {
4465
4615
  readonly outputState: StateId extends StateIdentifier<AllStates> ? HandlerOutputStates<AllStates, StateId, HandlerConfigPart<NodeConfig>> : never;
4466
4616
  };
4467
4617
  type HandlerTreeEvidence<AllStates extends StateSchemas, Config> = StateNodeIdentifier<AllStates> extends infer StateId extends StateNodeIdentifier<AllStates> ? StateId extends StateNodeIdentifier<AllStates> ? HandlerNodeEvidence<AllStates, Config, StateId> : never : never;
4468
- type HandleTreeResult<AllStates extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Input extends Schema.Top, UnhandledStates extends StateIdentifier<AllStates>, E, R, InitialE, InitialR, FinalStates extends StateIdentifier<AllStates>, Output, OutputStates extends StateIdentifier<AllStates>, InputEvents extends ReadonlyArray<TaggedSchema>, ParentEvents extends ReadonlyArray<TaggedSchema>, Config> = Machine<AllStates, Events, Input, Exclude<UnhandledStates, HandlerTreeEvidence<AllStates, Config>["stateId"]>, E | HandlerTreeEvidence<AllStates, Config>["error"], ExcludeCompatibleRuntime<R | HandlerTreeEvidence<AllStates, Config>["services"], EventOf<Events>, EmitOf<Emits>>, InitialE, InitialR, FinalStates, Output, Emits, OutputStates | Extract<HandlerTreeEvidence<AllStates, Config>["outputState"], StateIdentifier<AllStates>>, InputEvents, ParentEvents>;
4618
+ type HandleTreeResult<AllStates extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Input extends Schema.Top, UnhandledStates extends StateIdentifier<AllStates>, E, R, InitialE, InitialR, FinalStates extends StateIdentifier<AllStates>, Output, OutputStates extends StateIdentifier<AllStates>, InputEvents extends ReadonlyArray<TaggedSchema>, ParentEvents extends ReadonlyArray<TaggedSchema>, Config> = Machine<AllStates, Events, Input, Exclude<UnhandledStates, HandlerTreeEvidence<AllStates, Config>["stateId"]>, E | HandlerTreeEvidence<AllStates, Config>["error"], ExcludeCompatibleRuntime<R | HandlerTreeEvidence<AllStates, Config>["services"], EventOf<Events>, EmittedEventOf<Emits>>, InitialE, InitialR, FinalStates, Output, Emits, OutputStates | Extract<HandlerTreeEvidence<AllStates, Config>["outputState"], StateIdentifier<AllStates>>, InputEvents, ParentEvents>;
4469
4619
  /**
4470
4620
  * Adds state handlers from a root state object.
4471
4621
  *
@@ -4473,7 +4623,11 @@ export declare namespace Machine {
4473
4623
  * @since 0.4.0
4474
4624
  */
4475
4625
  interface Handler<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Input extends Schema.Top, UnhandledStates extends StateIdentifier<States>, E, R, InitialE, InitialR, FinalStates extends StateIdentifier<States>, Output, OutputStates extends StateIdentifier<States>, InputEvents extends ReadonlyArray<TaggedSchema>, ParentEvents extends ReadonlyArray<TaggedSchema>> {
4476
- <const Config extends HandlerTree<States, States, Events, Emits, E, R, InputEvents, ParentEvents, "">>(config: Config & HandlerTreeValidation<States, Events, InputEvents, Emits, NoInfer<Config>, OutputStates | Extract<HandlerTreeEvidence<States, NoInfer<Config>>["outputState"], StateIdentifier<States>>> & ([StateIdentifier<States>] extends [UnhandledStates] ? HandlerInitialTargetValidation<States, NoInfer<Config>> : unknown)): HandleTreeResult<States, Events, Emits, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, OutputStates, InputEvents, ParentEvents, Config>;
4626
+ <const Config>(config: Config & (Config extends (...args: never[]) => unknown ? never : unknown) & HandlerNode<States, States[""], Events, Emits, E, R, InputEvents, ParentEvents, Extract<"", StateNodeIdentifier<States>>> & RootHandlerValidation<States, Events, InputEvents, Emits, NoInfer<Config>, OutputStates | Extract<HandlerTreeEvidence<States, {
4627
+ readonly "": NoInfer<Config>;
4628
+ }>["outputState"], StateIdentifier<States>>>): HandleTreeResult<States, Events, Emits, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, OutputStates, InputEvents, ParentEvents, {
4629
+ readonly "": Config;
4630
+ }>;
4477
4631
  }
4478
4632
  /**
4479
4633
  * Any state config.
@@ -4496,8 +4650,8 @@ export declare namespace Machine {
4496
4650
  * @since 0.4.0
4497
4651
  */
4498
4652
  interface StateConfig<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, EventTag extends TagOf<Events[number]>, E, R> {
4499
- readonly entry?: (context: StateActionContext<States, Events, Emits, StateId>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => StateActionResult<E, R>;
4500
- readonly exit?: (context: StateActionContext<States, Events, Emits, StateId>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => StateActionResult<E, R>;
4653
+ readonly entry?: (context: StateActionContext<States, Events, Emits, StateId>, enqueue: Enqueue<EventOf<Events>, EmittedEventOf<Emits>>) => StateActionResult<E, R>;
4654
+ readonly exit?: (context: StateActionContext<States, Events, Emits, StateId>, enqueue: Enqueue<EventOf<Events>, EmittedEventOf<Emits>>) => StateActionResult<E, R>;
4501
4655
  readonly invoke?: StoredInvokeDefinition<States, Events, Emits, StateId>;
4502
4656
  readonly always?: TransitionConfig<States, Events, Emits, StateId, AlwaysContext<States, Events, Emits, StateId>, false, TransitionAcceptance>;
4503
4657
  readonly onDone?: TransitionConfig<States, Events, Emits, StateId, DoneContext<States, Events, Emits, StateId>, false, TransitionAcceptance>;
@@ -4512,8 +4666,10 @@ export declare namespace Machine {
4512
4666
  */
4513
4667
  type StateConfigs<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, EventTag extends TagOf<Events[number]>, E, R> = Readonly<Record<PropertyKey, StateConfig<States, Events, Emits, StateId, EventTag, E, R> | ChoiceStateConfig<States, Events, Emits, ChoiceIdentifier<States>>>>;
4514
4668
  }
4515
- type StateSource = Machine.DefinedStates<any> | Machine.Any;
4516
- type StateSchemasOf<Source extends StateSource> = Source extends Machine.DefinedStates<infer States> ? States : Source extends Machine.Any ? Machine.States<Source> : never;
4669
+ type StateSource = State<any> | Machine.Any;
4670
+ type StateSchemasOf<Source extends StateSource> = Source extends State<infer Node> ? {
4671
+ readonly "": Node;
4672
+ } : Source extends Machine.Any ? Machine.States<Source> : never;
4517
4673
  /**
4518
4674
  * Extracts the complete logical snapshot represented by a state definition or
4519
4675
  * machine.
@@ -4522,6 +4678,30 @@ type StateSchemasOf<Source extends StateSource> = Source extends Machine.Defined
4522
4678
  * @since 0.15.0
4523
4679
  */
4524
4680
  export type Snapshot<Source extends StateSource> = Machine.Snapshot<StateSchemasOf<Source>>;
4681
+ /** Type utilities for logical snapshots, including snapshots carried by atom bridges. */
4682
+ /** Typed traversal of root and child logical snapshots.
4683
+ * @category utility types
4684
+ * @since 0.32.0
4685
+ */
4686
+ export declare namespace Snapshot {
4687
+ /** Every active node represented by a logical snapshot type. */
4688
+ type Node<State> = State extends {
4689
+ readonly path: string;
4690
+ readonly value: unknown;
4691
+ } ? State | (State extends {
4692
+ readonly state: infer Child;
4693
+ } ? Node<Child> : State extends {
4694
+ readonly states: infer Regions;
4695
+ } ? Node<Regions[keyof Regions]> : never) : never;
4696
+ /** Every valid absolute path in a logical snapshot type. */
4697
+ type Path<State> = Node<State> extends infer Current ? Current extends {
4698
+ readonly path: infer Path extends string;
4699
+ } ? Path : never : never;
4700
+ /** The node at one absolute path. Runtime access can still be inactive. */
4701
+ type At<State, Path extends Snapshot.Path<State>> = Node<State> extends infer Current ? Current extends {
4702
+ readonly path: Path;
4703
+ } ? Current : never : never;
4704
+ }
4525
4705
  /**
4526
4706
  * Extracts the decoded value owned by a schema-backed state path.
4527
4707
  *
@@ -4537,7 +4717,7 @@ export type Value<Source extends StateSource, Path extends Machine.ValuedStateId
4537
4717
  *
4538
4718
  * The source may be the object returned by {@link states} or a machine
4539
4719
  * definition. This is the type-level counterpart of
4540
- * `DefinedStates.getSnapshot`.
4720
+ * `State.getSnapshot`.
4541
4721
  *
4542
4722
  * @category utility types
4543
4723
  * @since 0.18.0
@@ -4583,59 +4763,24 @@ export declare const isFinal: <const States extends Machine.StateSchemas, const
4583
4763
  * }
4584
4764
  * })
4585
4765
  *
4586
- * const States = Machine.states({
4766
+ * const States = Machine.state({ initial: "slot1", states: {
4587
4767
  * slot1: TradingSlot,
4588
4768
  * slot2: TradingSlot
4589
- * })
4769
+ * } })
4590
4770
  * ```
4591
4771
  *
4592
4772
  * @category constructors
4593
4773
  * @since 0.15.0
4594
4774
  */
4595
4775
  export declare const state: StateConstructor;
4596
- /**
4597
- * Defines the complete state tree while preserving literal state paths.
4598
- *
4599
- * **When to use**
4600
- *
4601
- * Use when you want to pass a state tree to `make` and also get typed
4602
- * snapshot matching and access helpers.
4603
- *
4604
- * **Details**
4605
- *
4606
- * The returned `states` property is an immutable structural capture of the
4607
- * supplied tree.
4608
- * `Machine.make` derives its initial target selector from that tree and
4609
- * enforces compound and parallel initial-state rules. Active nodes may omit
4610
- * `schema` when they own no value and still participate fully in targeting,
4611
- * matching, and snapshots.
4612
- *
4613
- * **Example** (Atomic initial snapshot)
4614
- *
4615
- * ```ts
4616
- * import { Schema } from "effect"
4617
- * import { Machine } from "@typeonce/effect-machine"
4618
- *
4619
- * class Idle extends Schema.TaggedClass<Idle>("Idle")("Idle", {}) {}
4620
- *
4621
- * const States = Machine.states({ idle: Idle })
4622
- *
4623
- * Machine.make({
4624
- * states: States.states,
4625
- * events: Machine.events(),
4626
- * initial: (to) => to.idle().resolve(({ target }) => target.from())
4627
- * })
4628
- * ```
4629
- *
4630
- * @category constructors
4631
- * @since 0.4.0
4632
- */
4633
- export declare const states: StatesConstructor;
4634
- type MakeConfig<States extends Machine.StateSchemas, InputEvents extends ReadonlyArray<Machine.TaggedSchema>, Emits extends ReadonlyArray<Machine.TaggedSchema>, Input extends Schema.Top, InitialE, InitialR, InternalEvents extends ReadonlyArray<Machine.TaggedSchema>, ParentDeclaration extends Parent.Any | undefined> = {
4776
+ type MakeConfig<Root extends Machine.StateNodeConfig, InputEvents extends ReadonlyArray<Machine.TaggedSchema>, Emits extends ReadonlyArray<Machine.TaggedSchema>, Input extends Schema.Top, InitialE, InitialR, InternalEvents extends ReadonlyArray<Machine.TaggedSchema>, ParentDeclaration extends Parent.Any | undefined> = {
4635
4777
  /** Stable definition identifier used by inspection and visualization. */
4636
4778
  readonly id?: string;
4637
- /** State topology and value schemas, normally supplied by `Machine.states`. */
4638
- readonly states: States & DefineStateTreeInput<NoInfer<States>>;
4779
+ /** State topology and value schemas, captured by a `Machine.state` descriptor. */
4780
+ readonly root: {
4781
+ readonly [StateTypeId]: typeof StateTypeId;
4782
+ readonly node: Root;
4783
+ };
4639
4784
  /** Public events accepted by independently running machine references. */
4640
4785
  readonly events: Machine.EventProtocol<"public", InputEvents> & ValidateInputEventProtocol<NoInfer<InputEvents>>;
4641
4786
  /** Machine-local events used by raised events and other internal deliveries. */
@@ -4646,20 +4791,38 @@ type MakeConfig<States extends Machine.StateSchemas, InputEvents extends Readonl
4646
4791
  readonly parent?: ParentDeclaration;
4647
4792
  /** Schema used to decode input before initial-state construction. */
4648
4793
  readonly input?: Input;
4649
- /** Target-first declaration that constructs the initial active configuration. */
4650
- readonly initial: unknown;
4651
4794
  };
4652
- type MakeResult<States extends Machine.StateSchemas, InputEvents extends ReadonlyArray<Machine.TaggedSchema>, Emits extends ReadonlyArray<Machine.TaggedSchema>, Input extends Schema.Top, InitialE, InitialR, InternalEvents extends ReadonlyArray<Machine.TaggedSchema>, ParentDeclaration extends Parent.Any | undefined> = Definition<States, readonly [...InputEvents, ...InternalEvents], Input, InitialE, InitialR, Machine.FinalStateFromDefinition<States>, Machine.TerminalOutput<States>, Emits, InputEvents, Machine.ParentEventsOf<ParentDeclaration>>;
4795
+ type MakeResult<Root extends Machine.StateNodeConfig, InputEvents extends ReadonlyArray<Machine.TaggedSchema>, Emits extends ReadonlyArray<Machine.TaggedSchema>, Input extends Schema.Top, InitialE, InitialR, InternalEvents extends ReadonlyArray<Machine.TaggedSchema>, ParentDeclaration extends Parent.Any | undefined> = Definition<{
4796
+ readonly "": Root;
4797
+ }, readonly [...InputEvents, ...InternalEvents], Input, InitialE, InitialR, Machine.FinalStateFromDefinition<{
4798
+ readonly "": Root;
4799
+ }>, Machine.TerminalOutput<{
4800
+ readonly "": Root;
4801
+ }>, Emits, InputEvents, Machine.ParentEventsOf<ParentDeclaration>>;
4802
+ type RootInitialization<Root extends Machine.StateNodeConfig, Input> = {
4803
+ readonly initialConfiguration?: never;
4804
+ } & (Machine.NodeSchema<Root> extends never ? {
4805
+ readonly initial?: Machine.RootInitialBuilderInput<Root, Input>;
4806
+ } : {} extends NodeMakeInput<Root> ? {
4807
+ readonly initial?: Machine.RootInitialBuilderInput<Root, Input>;
4808
+ } : {
4809
+ readonly initial: Machine.RootInitialBuilderInput<Root, Input>;
4810
+ });
4653
4811
  /** @inline */
4654
4812
  interface Make {
4813
+ /** @param config Complete starting configuration, including root and descendant values. */
4814
+ <const Root extends Machine.StateNodeConfig, const InputEvents extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const Input extends Schema.Top = typeof Schema.Void, InitialE = never, InitialR = never, const InternalEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const ParentDeclaration extends Parent.Any | undefined = undefined>(config: MakeConfig<Root, InputEvents, Emits, Input, InitialE, InitialR, InternalEvents, ParentDeclaration> & {
4815
+ /** Mutually exclusive with a complete initial configuration. */
4816
+ readonly initial?: never;
4817
+ /** Constructs the complete initial root configuration, overriding child defaults. */
4818
+ readonly initialConfiguration: Machine.RootConfigurationBuilderInput<NoInfer<Root>, Input["Type"]>;
4819
+ }): MakeResult<Root & {
4820
+ readonly "~effect/Machine/ExplicitInitial": true;
4821
+ }, InputEvents, Emits, Input, InitialE, InitialR, InternalEvents, ParentDeclaration>;
4655
4822
  /** @param config Complete schema-first machine definition. */
4656
- <const States extends Machine.StateSchemas, const InputEvents extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const Input extends Schema.Top = typeof Schema.Void, InitialE = never, InitialR = never, const InternalEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const ParentDeclaration extends Parent.Any | undefined = undefined>(config: Omit<MakeConfig<States, InputEvents, Emits, Input, InitialE, InitialR, InternalEvents, ParentDeclaration>, "initial"> & {
4657
- readonly initial: Machine.InitialBuilderInput<States, Input["Type"]>;
4658
- }, ..._validation: ValidateDefinedStates<NoInfer<States>>): MakeResult<States, InputEvents, Emits, Input, InitialE, InitialR, InternalEvents, ParentDeclaration>;
4659
- /** @param config Invalid state tree retained only to report its validation error at the call site. */
4660
- <const States extends Machine.StateSchemas, const InputEvents extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const Input extends Schema.Top = typeof Schema.Void, InitialE = never, InitialR = never, const InternalEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const ParentDeclaration extends Parent.Any | undefined = undefined>(config: Omit<MakeConfig<States, InputEvents, Emits, Input, InitialE, InitialR, InternalEvents, ParentDeclaration>, "states"> & {
4661
- readonly states: InvalidDefinedStateTreeInput<States>;
4662
- }): never;
4823
+ <const Root extends Machine.StateNodeConfig, const InputEvents extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const Input extends Schema.Top = typeof Schema.Void, InitialE = never, InitialR = never, const InternalEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const ParentDeclaration extends Parent.Any | undefined = undefined>(config: MakeConfig<Root, InputEvents, Emits, Input, InitialE, InitialR, InternalEvents, ParentDeclaration> & Exclude<RootInitialization<NoInfer<Root>, Input["Type"]>, {
4824
+ readonly initialConfiguration: unknown;
4825
+ }>): MakeResult<Root, InputEvents, Emits, Input, InitialE, InitialR, InternalEvents, ParentDeclaration>;
4663
4826
  }
4664
4827
  /**
4665
4828
  * Creates a schema-first machine definition.
@@ -4700,25 +4863,25 @@ interface Make {
4700
4863
  * by: Schema.Number
4701
4864
  * }) {}
4702
4865
  *
4703
- * const States = Machine.states({ Count })
4704
- * const Events = Machine.events(Increment)
4866
+ * const States = Machine.state({ initial: "Count", states: { Count } })
4867
+ * const Events = Machine.eventsFromSchemas(Increment)
4705
4868
  *
4706
4869
  * const counter = Machine.make({
4707
- * states: States.states,
4870
+ * root: States,
4708
4871
  * events: Events,
4709
- * initial: (to) => to.Count().resolve(({ target }) => target.decoded(new Count({ value: 0 })))
4710
- * }).handle({
4872
+ * initialConfiguration: root => root.resolve(({ target }) => target.from(to => to.Count.decoded(new Count({ value: 0 }))))
4873
+ * }).handle({ states: {
4711
4874
  * Count: {
4712
4875
  * on: {
4713
4876
  * Increment: (to) =>
4714
- * to.full.Count().resolve(({ event, state, target }) =>
4877
+ * to.branch.Count().resolve(({ event, state, target }) =>
4715
4878
  * target.decoded(new Count({ value: state.value + event.by })))
4716
4879
  * }
4717
4880
  * }
4718
- * })
4881
+ * } })
4719
4882
  * ```
4720
4883
  *
4721
- * @see {@link states} for typed state-tree helpers.
4884
+ * @see {@link state} for typed state-tree helpers.
4722
4885
  * @inlineType MakeConfig
4723
4886
  * @category constructors
4724
4887
  * @since 0.4.0
@@ -4743,7 +4906,7 @@ export type EventOf<Protocol extends Machine.EventProtocol.Any> = Machine.EventO
4743
4906
  * **Example**
4744
4907
  *
4745
4908
  * ```ts
4746
- * export const Event = Machine.events(
4909
+ * export const Event = Machine.eventsFromSchemas(
4747
4910
  * Schema.TaggedUnion({
4748
4911
  * Increment: { by: Schema.Number },
4749
4912
  * Reset: {}
@@ -4756,8 +4919,32 @@ export type EventOf<Protocol extends Machine.EventProtocol.Any> = Machine.EventO
4756
4919
  * @category constructors
4757
4920
  * @since 0.10.0
4758
4921
  */
4759
- export declare const events: {
4760
- <const Schemas extends ReadonlyArray<Machine.TaggedSchema>>(...schemas: Schemas & ValidateInputEventProtocol<NoInfer<Schemas>>): Machine.EventProtocol<"public", readonly [...Schemas]>;
4922
+ type EventFieldsSchemas<Cases extends Readonly<Record<string, Schema.Struct.Fields>>> = keyof Cases extends never ? readonly [] : readonly [
4923
+ Extract<Schema.TaggedUnion<{
4924
+ readonly [Tag in keyof Cases & string]: Schema.TaggedStruct<Tag, Cases[Tag]>;
4925
+ }>, Machine.TaggedSchema>
4926
+ ];
4927
+ type ValidateEventFields<Cases> = {
4928
+ readonly [Tag in keyof Cases]: "_tag" extends keyof Cases[Tag] ? EventProtocolError<"Event fields cannot declare _tag", Extract<Tag, PropertyKey>> : unknown;
4929
+ };
4930
+ /** Defines a public event protocol from tagged field records.
4931
+ *
4932
+ * ```ts
4933
+ * const Events = Machine.events({ Increment: { by: Schema.Number }, Reset: {} })
4934
+ * const increment = Events.Increment({ by: 1 })
4935
+ * ```
4936
+ *
4937
+ * Constructors defer schema validation until delivery. Use eventsFromSchemas
4938
+ * when importing existing tagged schemas or protocol descriptors.
4939
+ * @category constructors
4940
+ * @since 0.32.0
4941
+ */
4942
+ export declare const events: <const Cases extends Readonly<Record<string, Schema.Struct.Fields>>>(cases: Cases & ValidateEventFields<NoInfer<Cases>> & ValidateEventProtocolBuilder<"public", EventFieldsSchemas<Cases>>) => Machine.EventProtocol<"public", EventFieldsSchemas<Cases>>;
4943
+ /** Imports existing schemas and protocols without rebuilding their contracts.
4944
+ * @category constructors
4945
+ * @since 0.32.0
4946
+ */
4947
+ export declare const eventsFromSchemas: {
4761
4948
  <const Inputs extends ReadonlyArray<Machine.EventProtocolInput<"public">>>(...inputs: Inputs & ValidateEventProtocolBuilder<"public", Inputs>): Machine.EventProtocol<"public", Machine.EventProtocolInputSchemasOf<"public", Inputs>>;
4762
4949
  };
4763
4950
  /**
@@ -4792,7 +4979,7 @@ export declare const optionalParent: <const Events extends ReadonlyArray<Machine
4792
4979
  * **Example**
4793
4980
  *
4794
4981
  * ```ts
4795
- * const Internal = Machine.internalEvents(
4982
+ * const Internal = Machine.internalEventsFromSchemas(
4796
4983
  * Schema.TaggedUnion({
4797
4984
  * Loaded: { value: Schema.String },
4798
4985
  * Failed: { message: Schema.String }
@@ -4807,8 +4994,12 @@ export declare const optionalParent: <const Events extends ReadonlyArray<Machine
4807
4994
  * @category constructors
4808
4995
  * @since 0.10.0
4809
4996
  */
4810
- export declare const internalEvents: {
4811
- <const Schemas extends ReadonlyArray<Machine.TaggedSchema>>(...schemas: Schemas & ValidateInternalEventProtocol<readonly [], NoInfer<Schemas>>): Machine.EventProtocol<"internal", readonly [...Schemas]>;
4997
+ export declare const internalEvents: <const Cases extends Readonly<Record<string, Schema.Struct.Fields>>>(cases: Cases & ValidateEventFields<NoInfer<Cases>> & ValidateEventProtocolBuilder<"internal", EventFieldsSchemas<Cases>>) => Machine.EventProtocol<"internal", EventFieldsSchemas<Cases>>;
4998
+ /** Imports existing schemas and protocols without rebuilding their contracts.
4999
+ * @category constructors
5000
+ * @since 0.32.0
5001
+ */
5002
+ export declare const internalEventsFromSchemas: {
4812
5003
  <const Inputs extends ReadonlyArray<Machine.EventProtocolInput<"internal">>>(...inputs: Inputs & ValidateEventProtocolBuilder<"internal", Inputs>): Machine.EventProtocol<"internal", Machine.EventProtocolInputSchemasOf<"internal", Inputs>>;
4813
5004
  };
4814
5005
  /**
@@ -4820,7 +5011,7 @@ export declare const internalEvents: {
4820
5011
  * **Example**
4821
5012
  *
4822
5013
  * ```ts
4823
- * const Emitted = Machine.emittedEvents(
5014
+ * const Emitted = Machine.emittedEventsFromSchemas(
4824
5015
  * Schema.TaggedUnion({
4825
5016
  * Saved: { id: Schema.String }
4826
5017
  * })
@@ -4831,8 +5022,12 @@ export declare const internalEvents: {
4831
5022
  * @category constructors
4832
5023
  * @since 0.10.0
4833
5024
  */
4834
- export declare const emittedEvents: {
4835
- <const Schemas extends ReadonlyArray<Machine.TaggedSchema>>(...schemas: Schemas & ValidateEmittedEventProtocol<NoInfer<Schemas>>): Machine.EventProtocol<"emitted", readonly [...Schemas]>;
5025
+ export declare const emittedEvents: <const Cases extends Readonly<Record<string, Schema.Struct.Fields>>>(cases: Cases & ValidateEventFields<NoInfer<Cases>> & ValidateEventProtocolBuilder<"emitted", EventFieldsSchemas<Cases>>) => Machine.EventProtocol<"emitted", EventFieldsSchemas<Cases>>;
5026
+ /** Imports existing schemas and protocols without rebuilding their contracts.
5027
+ * @category constructors
5028
+ * @since 0.32.0
5029
+ */
5030
+ export declare const emittedEventsFromSchemas: {
4836
5031
  <const Inputs extends ReadonlyArray<Machine.EventProtocolInput<"emitted">>>(...inputs: Inputs & ValidateEventProtocolBuilder<"emitted", Inputs>): Machine.EventProtocol<"emitted", Machine.EventProtocolInputSchemasOf<"emitted", Inputs>>;
4837
5032
  };
4838
5033
  /**
@@ -4868,12 +5063,12 @@ export declare const emittedEvents: {
4868
5063
  * import { Machine } from "@typeonce/effect-machine"
4869
5064
  *
4870
5065
  * class Idle extends Schema.TaggedClass<Idle>("Idle")("Idle", {}) {}
4871
- * const States = Machine.states({ Idle })
5066
+ * const States = Machine.state({ initial: "Idle", states: { Idle } })
4872
5067
  * const machine = Machine.make({
4873
- * states: States.states,
4874
- * events: Machine.events(),
4875
- * initial: (to) => to.Idle().resolve(({ target }) => target.from())
4876
- * }).handle({ Idle: {} })
5068
+ * root: States,
5069
+ * events: Machine.eventsFromSchemas(),
5070
+ * initialConfiguration: root => root.resolve(({ target }) => target.from(to => to.Idle.from()))
5071
+ * }).handle({ states: { Idle: {} } })
4877
5072
  *
4878
5073
  * const encoded = Effect.gen(function*() {
4879
5074
  * const initial = yield* Machine.planInitial(machine)
@@ -4912,12 +5107,12 @@ export declare const encodeSnapshot: <const States extends Machine.StateSchemas,
4912
5107
  * import { Machine } from "@typeonce/effect-machine"
4913
5108
  *
4914
5109
  * class Idle extends Schema.TaggedClass<Idle>("Idle")("Idle", {}) {}
4915
- * const States = Machine.states({ Idle })
5110
+ * const States = Machine.state({ initial: "Idle", states: { Idle } })
4916
5111
  * const machine = Machine.make({
4917
- * states: States.states,
4918
- * events: Machine.events(),
4919
- * initial: (to) => to.Idle().resolve(({ target }) => target.from())
4920
- * }).handle({ Idle: {} })
5112
+ * root: States,
5113
+ * events: Machine.eventsFromSchemas(),
5114
+ * initialConfiguration: root => root.resolve(({ target }) => target.from(to => to.Idle.from()))
5115
+ * }).handle({ states: { Idle: {} } })
4921
5116
  *
4922
5117
  * const roundTrip = Effect.gen(function*() {
4923
5118
  * const initial = yield* Machine.planInitial(machine)
@@ -4971,12 +5166,12 @@ type ValidateTransitionBranchRecord<Branches> = [keyof Branches] extends [never]
4971
5166
  * import { Machine } from "@typeonce/effect-machine"
4972
5167
  *
4973
5168
  * class Idle extends Schema.TaggedClass<Idle>("Idle")("Idle", {}) {}
4974
- * const States = Machine.states({ Idle })
5169
+ * const States = Machine.state({ initial: "Idle", states: { Idle } })
4975
5170
  * const machine = Machine.make({
4976
- * states: States.states,
4977
- * events: Machine.events(),
4978
- * initial: (to) => to.Idle().resolve(({ target }) => target.from())
4979
- * }).handle({ Idle: {} })
5171
+ * root: States,
5172
+ * events: Machine.eventsFromSchemas(),
5173
+ * initialConfiguration: root => root.resolve(({ target }) => target.from(to => to.Idle.from()))
5174
+ * }).handle({ states: { Idle: {} } })
4980
5175
  *
4981
5176
  * const initialState = Effect.map(Machine.planInitial(machine), (plan) => plan.state)
4982
5177
  * ```
@@ -4991,14 +5186,14 @@ export declare const planInitial: <const States extends Machine.StateSchemas, co
4991
5186
  readonly initialEntryPaths: ReadonlyArray<Machine.StateIdentifier<States>>;
4992
5187
  readonly state: Machine.Snapshot<States>;
4993
5188
  readonly commands: ReadonlyArray<Command>;
4994
- readonly emittedEvents: ReadonlyArray<Machine.EmitOf<Emits>>;
5189
+ readonly emittedEvents: ReadonlyArray<Machine.EmittedEventOf<Emits>>;
4995
5190
  readonly microsteps: ReadonlyArray<{
4996
5191
  readonly next: Machine.Snapshot<States>;
4997
5192
  readonly event: Machine.EventOf<Events> | InitialEvent;
4998
5193
  readonly transitions: ReadonlyArray<Machine.RetainedTransition<Machine.StateNodeIdentifier<States>, Machine.TagOf<Events[number]>, Machine.StateNodeIdentifier<States>>>;
4999
5194
  readonly commands: ReadonlyArray<Command>;
5000
5195
  readonly raisedEvents: ReadonlyArray<Machine.EventOf<Events>>;
5001
- readonly emittedEvents: ReadonlyArray<Machine.EmitOf<Emits>>;
5196
+ readonly emittedEvents: ReadonlyArray<Machine.EmittedEventOf<Emits>>;
5002
5197
  readonly exitPaths: ReadonlyArray<string>;
5003
5198
  readonly entryPaths: ReadonlyArray<string>;
5004
5199
  readonly changed: boolean;
@@ -5115,23 +5310,38 @@ export declare const enabled: <const States extends Machine.StateSchemas, const
5115
5310
  * they accept the event. Any commands, emissions, or raised events collected
5116
5311
  * during that check are discarded.
5117
5312
  *
5118
- * Event input is decoded through the machine's public event protocol. Invalid
5119
- * input fails with `MachineSchemaDecodeError`. Final snapshots and valid events
5313
+ * Event input is decoded through the machine's public and internal event protocols.
5314
+ * Invalid input fails with `MachineSchemaDecodeError`. Final snapshots and valid events
5120
5315
  * with no accepting handler return `false`.
5121
5316
  *
5122
5317
  * **Gotchas**
5123
5318
  *
5124
5319
  * This query does not execute transitions or stabilize the resulting machine.
5125
5320
  * It does not run entry, exit, always, completion, child lifecycle, or command
5126
- * effects. A `true` result therefore describes event acceptance only.
5321
+ * effects. A `true` result therefore describes event acceptance only, for this
5322
+ * snapshot. It does not guarantee acceptance after the machine advances.
5323
+ *
5324
+ * This Effect can also be used by machine effects to query internal events.
5325
+ * Synchronous transition resolvers cannot execute it. Querying an internal event
5326
+ * does not make that event available to `MachineRef.send`.
5127
5327
  *
5128
5328
  * **Example**
5129
5329
  *
5130
5330
  * ```ts
5131
- * const canCheckout = Machine.can(checkoutMachine)
5331
+ * import { Machine } from "@typeonce/effect-machine"
5332
+ * import { Effect, Schema } from "effect"
5132
5333
  *
5133
- * const canSubmit = yield* canCheckout(snapshot, {
5134
- * _tag: "SubmitOrder"
5334
+ * const internalEvents = Machine.internalEventsFromSchemas(Schema.TaggedStruct("Loaded", {}))
5335
+ * const machine = Machine.make({
5336
+ * root: Machine.state({ initial: "Idle", states: { Idle: {} } }),
5337
+ * events: Machine.eventsFromSchemas(),
5338
+ * internalEvents,
5339
+ * initialConfiguration: (root) => root.resolve(({ target }) => target.from((to) => to.Idle.from()))
5340
+ * }).handle({ states: { Idle: { on: { Loaded: (to) => to.none } } } })
5341
+ *
5342
+ * export const canLoad = Effect.gen(function*() {
5343
+ * const initial = yield* Machine.planInitial(machine)
5344
+ * return yield* Machine.can(machine, initial.state, internalEvents.Loaded())
5135
5345
  * })
5136
5346
  * ```
5137
5347
  *
@@ -5139,11 +5349,11 @@ export declare const enabled: <const States extends Machine.StateSchemas, const
5139
5349
  * @since 0.30.0
5140
5350
  */
5141
5351
  export declare const can: {
5142
- <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, const Input extends Schema.Top = typeof Schema.Void, UnhandledStates extends Machine.StateIdentifier<States> = Machine.StateIdentifier<States>, E = never, R = never, InitialE = never, InitialR = never, FinalStates extends Machine.StateIdentifier<States> = never, Output = never, OutputStates extends Machine.StateIdentifier<States> = never, InputEvents extends ReadonlyArray<Machine.TaggedSchema> = Events, ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(machine: Machine<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents, ParentEvents> & EnsureExecutable<States, UnhandledStates, OutputStates> & Machine.RootCompatible<ParentEvents>): (state: Machine.Snapshot<States>, event: Machine.EventInputOf<InputEvents>) => Effect.Effect<boolean, MachineSchemaDecodeError>;
5143
- <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, const Input extends Schema.Top = typeof Schema.Void, UnhandledStates extends Machine.StateIdentifier<States> = Machine.StateIdentifier<States>, E = never, R = never, InitialE = never, InitialR = never, FinalStates extends Machine.StateIdentifier<States> = never, Output = never, OutputStates extends Machine.StateIdentifier<States> = never, InputEvents extends ReadonlyArray<Machine.TaggedSchema> = Events, ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(machine: Machine<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents, ParentEvents> & EnsureExecutable<States, UnhandledStates, OutputStates> & Machine.RootCompatible<ParentEvents>, state: Machine.Snapshot<States>, event: Machine.EventInputOf<InputEvents>): Effect.Effect<boolean, MachineSchemaDecodeError>;
5352
+ <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, const Input extends Schema.Top = typeof Schema.Void, UnhandledStates extends Machine.StateIdentifier<States> = Machine.StateIdentifier<States>, E = never, R = never, InitialE = never, InitialR = never, FinalStates extends Machine.StateIdentifier<States> = never, Output = never, OutputStates extends Machine.StateIdentifier<States> = never, InputEvents extends ReadonlyArray<Machine.TaggedSchema> = Events, ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(machine: Machine<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents, ParentEvents> & EnsureExecutable<States, UnhandledStates, OutputStates> & Machine.RootCompatible<ParentEvents>): (state: Machine.Snapshot<States>, event: Machine.EventInputOf<Events>) => Effect.Effect<boolean, MachineSchemaDecodeError>;
5353
+ <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, const Input extends Schema.Top = typeof Schema.Void, UnhandledStates extends Machine.StateIdentifier<States> = Machine.StateIdentifier<States>, E = never, R = never, InitialE = never, InitialR = never, FinalStates extends Machine.StateIdentifier<States> = never, Output = never, OutputStates extends Machine.StateIdentifier<States> = never, InputEvents extends ReadonlyArray<Machine.TaggedSchema> = Events, ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(machine: Machine<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents, ParentEvents> & EnsureExecutable<States, UnhandledStates, OutputStates> & Machine.RootCompatible<ParentEvents>, state: Machine.Snapshot<States>, event: Machine.EventInputOf<Events>): Effect.Effect<boolean, MachineSchemaDecodeError>;
5144
5354
  };
5145
5355
  /**
5146
- * Plans the next state snapshot synchronously.
5356
+ * Returns an Effect that plans the next state snapshot without running command effects.
5147
5357
  *
5148
5358
  * **Details**
5149
5359
  *
@@ -5168,20 +5378,20 @@ export declare const can: {
5168
5378
  * class Off extends Schema.TaggedClass<Off>("Off")("Off", {}) {}
5169
5379
  * class On extends Schema.TaggedClass<On>("On")("On", {}) {}
5170
5380
  * class Toggle extends Schema.TaggedClass<Toggle>("Toggle")("Toggle", {}) {}
5171
- * const States = Machine.states({ Off, On })
5381
+ * const States = Machine.state({ initial: "Off", states: { Off, On } })
5172
5382
  * const machine = Machine.make({
5173
- * states: States.states,
5174
- * events: Machine.events(Toggle),
5175
- * initial: (to) => to.Off().resolve(({ target }) => target.from())
5176
- * }).handle({
5383
+ * root: States,
5384
+ * events: Machine.eventsFromSchemas(Toggle),
5385
+ * initialConfiguration: root => root.resolve(({ target }) => target.from(to => to.Off.from()))
5386
+ * }).handle({ states: {
5177
5387
  * Off: {
5178
5388
  * on: {
5179
5389
  * Toggle: (to) =>
5180
- * to.full.On().resolve(({ target }) => target.from())
5390
+ * to.branch.On().resolve(({ target }) => target.from())
5181
5391
  * }
5182
5392
  * },
5183
5393
  * On: {}
5184
- * })
5394
+ * } })
5185
5395
  *
5186
5396
  * const nextState = Effect.gen(function*() {
5187
5397
  * const initial = yield* Machine.planInitial(machine)
@@ -5195,16 +5405,17 @@ export declare const can: {
5195
5405
  * @since 0.4.0
5196
5406
  */
5197
5407
  export declare const plan: <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const Input extends Schema.Top = typeof Schema.Void, UnhandledStates extends Machine.StateIdentifier<States> = Machine.StateIdentifier<States>, E = never, R = never, InitialE = never, InitialR = never, FinalStates extends Machine.StateIdentifier<States> = never, Output = never, OutputStates extends Machine.StateIdentifier<States> = never, InputEvents extends ReadonlyArray<Machine.TaggedSchema> = Events, ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(machine: Machine<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents, ParentEvents> & EnsureExecutable<States, UnhandledStates, OutputStates> & Machine.RootCompatible<ParentEvents>, state: Machine.Snapshot<States>, event: Machine.EventInputOf<InputEvents>) => Effect.Effect<{
5408
+ readonly event: Machine.EventOf<InputEvents>;
5198
5409
  readonly next: Machine.Snapshot<States>;
5199
5410
  readonly commands: ReadonlyArray<Command>;
5200
- readonly emittedEvents: ReadonlyArray<Machine.EmitOf<Emits>>;
5411
+ readonly emittedEvents: ReadonlyArray<Machine.EmittedEventOf<Emits>>;
5201
5412
  readonly microsteps: ReadonlyArray<{
5202
5413
  readonly next: Machine.Snapshot<States>;
5203
5414
  readonly event: Machine.EventOf<Events> | InitialEvent;
5204
5415
  readonly transitions: ReadonlyArray<Machine.RetainedTransition<Machine.StateNodeIdentifier<States>, Machine.TagOf<Events[number]>, Machine.StateNodeIdentifier<States>>>;
5205
5416
  readonly commands: ReadonlyArray<Command>;
5206
5417
  readonly raisedEvents: ReadonlyArray<Machine.EventOf<Events>>;
5207
- readonly emittedEvents: ReadonlyArray<Machine.EmitOf<Emits>>;
5418
+ readonly emittedEvents: ReadonlyArray<Machine.EmittedEventOf<Emits>>;
5208
5419
  readonly exitPaths: ReadonlyArray<string>;
5209
5420
  readonly entryPaths: ReadonlyArray<string>;
5210
5421
  readonly changed: boolean;
@@ -5351,7 +5562,7 @@ export declare const watch: <State, Event, Error = never, Output = never>(ref: M
5351
5562
  * @category constructors
5352
5563
  * @since 0.11.0
5353
5564
  */
5354
- export declare const prepare: <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const Input extends Schema.Top = typeof Schema.Void, UnhandledStates extends Machine.StateIdentifier<States> = Machine.StateIdentifier<States>, E = never, R = never, InitialE = never, InitialR = never, FinalStates extends Machine.StateIdentifier<States> = never, Output = never, OutputStates extends Machine.StateIdentifier<States> = never, InputEvents extends ReadonlyArray<Machine.TaggedSchema> = Events, ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(machine: Machine<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents, ParentEvents> & EnsureExecutable<States, UnhandledStates, OutputStates> & Machine.RootCompatible<ParentEvents>, ...args: [...Machine.InputArgs<Input>]) => Effect.Effect<Prepared<Machine.Snapshot<States>, Machine.EventInputOf<InputEvents>, E | ActionError<R> | InfiniteTransitionError | MachineSchemaDecodeError | StoppedError, Output, Machine.EmittedEventOf<Emits>, InitialE | E | ActionError<InitialR | R> | InfiniteTransitionError | MachineSchemaDecodeError | StartupError | StoppedError, ExcludeCompatibleRuntime<ExecutionServices<InitialR | R>, Machine.EventOf<Events>, Machine.EmitOf<Emits>>>>;
5565
+ export declare const prepare: <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const Input extends Schema.Top = typeof Schema.Void, UnhandledStates extends Machine.StateIdentifier<States> = Machine.StateIdentifier<States>, E = never, R = never, InitialE = never, InitialR = never, FinalStates extends Machine.StateIdentifier<States> = never, Output = never, OutputStates extends Machine.StateIdentifier<States> = never, InputEvents extends ReadonlyArray<Machine.TaggedSchema> = Events, ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(machine: Machine<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents, ParentEvents> & EnsureExecutable<States, UnhandledStates, OutputStates> & Machine.RootCompatible<ParentEvents>, ...args: [...Machine.InputArgs<Input>]) => Effect.Effect<Prepared<Machine.Snapshot<States>, Machine.EventInputOf<InputEvents>, E | ActionError<R> | InfiniteTransitionError | MachineSchemaDecodeError | StoppedError, Output, Machine.EmittedEventOf<Emits>, InitialE | E | ActionError<InitialR | R> | InfiniteTransitionError | MachineSchemaDecodeError | StartupError | StoppedError, ExcludeCompatibleRuntime<ExecutionServices<InitialR | R>, Machine.EventOf<Events>, Machine.EmittedEventOf<Emits>>>>;
5355
5566
  /**
5356
5567
  * Starts a machine.
5357
5568
  *
@@ -5381,12 +5592,12 @@ export declare const prepare: <const States extends Machine.StateSchemas, const
5381
5592
  * import { Machine } from "@typeonce/effect-machine"
5382
5593
  *
5383
5594
  * class Idle extends Schema.TaggedClass<Idle>("Idle")("Idle", {}) {}
5384
- * const States = Machine.states({ Idle })
5595
+ * const States = Machine.state({ initial: "Idle", states: { Idle } })
5385
5596
  * const machine = Machine.make({
5386
- * states: States.states,
5387
- * events: Machine.events(),
5388
- * initial: (to) => to.Idle().resolve(({ target }) => target.from())
5389
- * }).handle({ Idle: {} })
5597
+ * root: States,
5598
+ * events: Machine.eventsFromSchemas(),
5599
+ * initialConfiguration: root => root.resolve(({ target }) => target.from(to => to.Idle.from()))
5600
+ * }).handle({ states: { Idle: {} } })
5390
5601
  *
5391
5602
  * const state = Effect.gen(function*() {
5392
5603
  * const ref = yield* Machine.start(machine)
@@ -5399,7 +5610,7 @@ export declare const prepare: <const States extends Machine.StateSchemas, const
5399
5610
  * @category constructors
5400
5611
  * @since 0.4.0
5401
5612
  */
5402
- export declare const start: <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const Input extends Schema.Top = typeof Schema.Void, UnhandledStates extends Machine.StateIdentifier<States> = Machine.StateIdentifier<States>, E = never, R = never, InitialE = never, InitialR = never, FinalStates extends Machine.StateIdentifier<States> = never, Output = never, OutputStates extends Machine.StateIdentifier<States> = never, InputEvents extends ReadonlyArray<Machine.TaggedSchema> = Events, ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(machine: Machine<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents, ParentEvents> & EnsureExecutable<States, UnhandledStates, OutputStates> & Machine.RootCompatible<ParentEvents>, ...args: [...Machine.InputArgs<Input>]) => Effect.Effect<MachineRef<Machine.Snapshot<States>, Machine.EventInputOf<InputEvents>, E | ActionError<R> | InfiniteTransitionError | MachineSchemaDecodeError | StoppedError, Output, Machine.EmittedEventOf<Emits>>, InitialE | E | ActionError<InitialR | R> | InfiniteTransitionError | MachineSchemaDecodeError | StartupError | StoppedError, ExcludeCompatibleRuntime<ExecutionServices<InitialR | R>, Machine.EventOf<Events>, Machine.EmitOf<Emits>>>;
5613
+ export declare const start: <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const Input extends Schema.Top = typeof Schema.Void, UnhandledStates extends Machine.StateIdentifier<States> = Machine.StateIdentifier<States>, E = never, R = never, InitialE = never, InitialR = never, FinalStates extends Machine.StateIdentifier<States> = never, Output = never, OutputStates extends Machine.StateIdentifier<States> = never, InputEvents extends ReadonlyArray<Machine.TaggedSchema> = Events, ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(machine: Machine<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents, ParentEvents> & EnsureExecutable<States, UnhandledStates, OutputStates> & Machine.RootCompatible<ParentEvents>, ...args: [...Machine.InputArgs<Input>]) => Effect.Effect<MachineRef<Machine.Snapshot<States>, Machine.EventInputOf<InputEvents>, E | ActionError<R> | InfiniteTransitionError | MachineSchemaDecodeError | StoppedError, Output, Machine.EmittedEventOf<Emits>>, InitialE | E | ActionError<InitialR | R> | InfiniteTransitionError | MachineSchemaDecodeError | StartupError | StoppedError, ExcludeCompatibleRuntime<ExecutionServices<InitialR | R>, Machine.EventOf<Events>, Machine.EmittedEventOf<Emits>>>;
5403
5614
  /**
5404
5615
  * Starts a fresh managed runtime from a decoded logical snapshot.
5405
5616
  *
@@ -5431,12 +5642,12 @@ export declare const start: <const States extends Machine.StateSchemas, const Ev
5431
5642
  * import { Machine } from "@typeonce/effect-machine"
5432
5643
  *
5433
5644
  * class Idle extends Schema.TaggedClass<Idle>("Idle")("Idle", {}) {}
5434
- * const States = Machine.states({ Idle })
5645
+ * const States = Machine.state({ initial: "Idle", states: { Idle } })
5435
5646
  * const machine = Machine.make({
5436
- * states: States.states,
5437
- * events: Machine.events(),
5438
- * initial: (to) => to.Idle().resolve(({ target }) => target.from())
5439
- * }).handle({ Idle: {} })
5647
+ * root: States,
5648
+ * events: Machine.eventsFromSchemas(),
5649
+ * initialConfiguration: root => root.resolve(({ target }) => target.from(to => to.Idle.from()))
5650
+ * }).handle({ states: { Idle: {} } })
5440
5651
  *
5441
5652
  * const resumed = Effect.gen(function*() {
5442
5653
  * const initial = yield* Machine.planInitial(machine)
@@ -5451,5 +5662,5 @@ export declare const start: <const States extends Machine.StateSchemas, const Ev
5451
5662
  * @category constructors
5452
5663
  * @since 0.4.0
5453
5664
  */
5454
- export declare const resume: <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const Input extends Schema.Top = typeof Schema.Void, UnhandledStates extends Machine.StateIdentifier<States> = Machine.StateIdentifier<States>, E = never, R = never, InitialE = never, InitialR = never, FinalStates extends Machine.StateIdentifier<States> = never, Output = never, OutputStates extends Machine.StateIdentifier<States> = never, InputEvents extends ReadonlyArray<Machine.TaggedSchema> = Events, ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(machine: Machine<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents, ParentEvents> & EnsureExecutable<States, UnhandledStates, OutputStates> & Machine.RootCompatible<ParentEvents>, snapshot: Machine.Snapshot<States>) => Effect.Effect<MachineRef<Machine.Snapshot<States>, Machine.EventInputOf<InputEvents>, E | ActionError<R> | InfiniteTransitionError | MachineSchemaDecodeError | StoppedError, Output, Machine.EmittedEventOf<Emits>>, MachineSchemaDecodeError, ExcludeCompatibleRuntime<ExecutionServices<R>, Machine.EventOf<Events>, Machine.EmitOf<Emits>>>;
5665
+ export declare const resume: <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const Input extends Schema.Top = typeof Schema.Void, UnhandledStates extends Machine.StateIdentifier<States> = Machine.StateIdentifier<States>, E = never, R = never, InitialE = never, InitialR = never, FinalStates extends Machine.StateIdentifier<States> = never, Output = never, OutputStates extends Machine.StateIdentifier<States> = never, InputEvents extends ReadonlyArray<Machine.TaggedSchema> = Events, ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(machine: Machine<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents, ParentEvents> & EnsureExecutable<States, UnhandledStates, OutputStates> & Machine.RootCompatible<ParentEvents>, snapshot: Machine.Snapshot<States>) => Effect.Effect<MachineRef<Machine.Snapshot<States>, Machine.EventInputOf<InputEvents>, E | ActionError<R> | InfiniteTransitionError | MachineSchemaDecodeError | StoppedError, Output, Machine.EmittedEventOf<Emits>>, MachineSchemaDecodeError, ExcludeCompatibleRuntime<ExecutionServices<R>, Machine.EventOf<Events>, Machine.EmittedEventOf<Emits>>>;
5455
5666
  //# sourceMappingURL=Machine.d.ts.map