@typeonce/effect-machine 0.16.0 → 0.18.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 (68) hide show
  1. package/README.md +157 -150
  2. package/dist/Machine.d.ts +416 -592
  3. package/dist/Machine.d.ts.map +1 -1
  4. package/dist/Machine.js +55 -136
  5. package/dist/Machine.js.map +1 -1
  6. package/dist/internal/machine/atom.d.ts +7 -7
  7. package/dist/internal/machine/atom.d.ts.map +1 -1
  8. package/dist/internal/machine/atom.js.map +1 -1
  9. package/dist/internal/machine/cluster.d.ts +2 -2
  10. package/dist/internal/machine/cluster.d.ts.map +1 -1
  11. package/dist/internal/machine/cluster.js +6 -5
  12. package/dist/internal/machine/cluster.js.map +1 -1
  13. package/dist/internal/machine/executionPlan.d.ts.map +1 -1
  14. package/dist/internal/machine/executionPlan.js +10 -3
  15. package/dist/internal/machine/executionPlan.js.map +1 -1
  16. package/dist/internal/machine/invocation.d.ts.map +1 -1
  17. package/dist/internal/machine/invocation.js +1 -1
  18. package/dist/internal/machine/invocation.js.map +1 -1
  19. package/dist/internal/machine/machine.d.ts +8 -6
  20. package/dist/internal/machine/machine.d.ts.map +1 -1
  21. package/dist/internal/machine/machine.js +239 -35
  22. package/dist/internal/machine/machine.js.map +1 -1
  23. package/dist/internal/machine/planner.d.ts +19 -4
  24. package/dist/internal/machine/planner.d.ts.map +1 -1
  25. package/dist/internal/machine/planner.js +56 -20
  26. package/dist/internal/machine/planner.js.map +1 -1
  27. package/dist/internal/machine/stateDefinition.d.ts.map +1 -1
  28. package/dist/internal/machine/stateDefinition.js +14 -0
  29. package/dist/internal/machine/stateDefinition.js.map +1 -1
  30. package/dist/internal/machine/topology.d.ts +9 -0
  31. package/dist/internal/machine/topology.d.ts.map +1 -1
  32. package/dist/internal/machine/topology.js +16 -0
  33. package/dist/internal/machine/topology.js.map +1 -1
  34. package/dist/internal/testing/machine/finiteModel.d.ts.map +1 -1
  35. package/dist/internal/testing/machine/finiteModel.js +15 -20
  36. package/dist/internal/testing/machine/finiteModel.js.map +1 -1
  37. package/dist/internal/testing/machine/transitionCoverage.d.ts.map +1 -1
  38. package/dist/internal/testing/machine/transitionCoverage.js +2 -0
  39. package/dist/internal/testing/machine/transitionCoverage.js.map +1 -1
  40. package/dist/testing/MachineTest.d.ts +15 -15
  41. package/dist/testing/MachineTest.d.ts.map +1 -1
  42. package/dist/testing/MachineTest.js +5 -8
  43. package/dist/testing/MachineTest.js.map +1 -1
  44. package/dist/unstable/cluster/ClusterMachine.d.ts +2 -2
  45. package/dist/unstable/cluster/ClusterMachine.d.ts.map +1 -1
  46. package/dist/unstable/cluster/ClusterMachine.js.map +1 -1
  47. package/dist/unstable/reactivity/AtomMachine.d.ts +13 -13
  48. package/dist/unstable/reactivity/AtomMachine.d.ts.map +1 -1
  49. package/dist/unstable/reactivity/AtomMachine.js.map +1 -1
  50. package/docs/agent-guide.md +229 -193
  51. package/package.json +1 -1
  52. package/src/Machine.ts +1686 -2234
  53. package/src/internal/machine/atom.ts +20 -15
  54. package/src/internal/machine/cluster.ts +14 -9
  55. package/src/internal/machine/executionPlan.ts +8 -3
  56. package/src/internal/machine/invocation.ts +1 -1
  57. package/src/internal/machine/machine.ts +365 -48
  58. package/src/internal/machine/planner.ts +89 -27
  59. package/src/internal/machine/stateDefinition.ts +39 -0
  60. package/src/internal/machine/topology.ts +28 -0
  61. package/src/internal/testing/machine/exploration.ts +1 -1
  62. package/src/internal/testing/machine/finiteModel.ts +18 -21
  63. package/src/internal/testing/machine/trace.ts +1 -1
  64. package/src/internal/testing/machine/transitionCoverage.ts +2 -0
  65. package/src/internal/testing/machine/verification.ts +1 -1
  66. package/src/testing/MachineTest.ts +18 -15
  67. package/src/unstable/cluster/ClusterMachine.ts +8 -4
  68. package/src/unstable/reactivity/AtomMachine.ts +20 -13
package/dist/Machine.d.ts CHANGED
@@ -41,6 +41,8 @@ declare const MachineTypeId: unique symbol;
41
41
  declare const EventConstructionTypeId: unique symbol;
42
42
  declare const EmittedEventConstructionTypeId: unique symbol;
43
43
  declare const EventProtocolTypeId: unique symbol;
44
+ declare const ParentModeTypeId: unique symbol;
45
+ declare const ParentTypeId = "~effect/Machine/Parent";
44
46
  declare const ChildMachineLogicTypeId: typeof internal.ChildMachineLogicTypeId;
45
47
  /**
46
48
  * Type identifier used for the synthetic event passed to startup lifecycle
@@ -127,16 +129,16 @@ export interface Machine<States extends Machine.StateSchemas, Events extends Rea
127
129
  */
128
130
  readonly emittedEvents: Machine.EventProtocol<"emitted", Emits>;
129
131
  /**
130
- * Public input events accepted by an owning machine when this machine is
131
- * running as a child.
132
+ * Declared owning-machine protocol, or `undefined` when this machine does
133
+ * not communicate with its owner.
132
134
  *
133
- * The protocol types the optional `parent` machine target exposed to
134
- * handlers and is checked against a concrete parent's public events at
135
- * composition boundaries.
135
+ * Required parents make the machine child-only and expose a non-optional
136
+ * `parent` target to handlers. Optional parents keep root execution valid
137
+ * and expose `parent` as possibly absent.
136
138
  *
137
- * @since 0.10.0
139
+ * @since 0.17.0
138
140
  */
139
- readonly parentEvents: Machine.EventProtocol<"public", ParentEvents>;
141
+ readonly parent: Machine.ParentDeclarationOf<ParentEvents>;
140
142
  /**
141
143
  * Optional schema used to decode the machine input before initialization.
142
144
  *
@@ -155,14 +157,6 @@ export interface Machine<States extends Machine.StateSchemas, Events extends Rea
155
157
  readonly makeTargetBuilder: <Source extends Machine.StateNodeIdentifier<States>>(source: Source) => Machine.TargetBuilder<States, Source>;
156
158
  /** @internal */
157
159
  readonly handlers: Machine.StateConfigs<States, Events, Emits, UnhandledStates, Machine.TagOf<Events[number]>, E, R>;
158
- /**
159
- * Machine-bound equivalent of {@link invoke}. Both forms preserve this
160
- * machine's public input and parent protocols in invocation callbacks;
161
- * `Machine.invoke(...)` inside `handle(...)` is the canonical inline form.
162
- *
163
- * @since 0.11.0
164
- */
165
- readonly invoke: Invoker<States, Events, Emits, InputEvents, ParentEvents>;
166
160
  /** @internal */
167
161
  readonly initial: (...args: [...Machine.InputArgs<Input>]) => Machine.InitialResult<States, InitialE, InitialR>;
168
162
  /** @internal */
@@ -343,18 +337,51 @@ export interface MachineTarget<in Event> {
343
337
  readonly sessionId: string;
344
338
  readonly send: (event: Event) => Effect.Effect<void, StoppedError>;
345
339
  }
340
+ /**
341
+ * Availability declared for an owning-machine target.
342
+ *
343
+ * @category models
344
+ * @since 0.17.0
345
+ */
346
+ export type ParentMode = "required" | "optional";
347
+ /**
348
+ * Owning-machine protocol declared by {@link parent} or
349
+ * {@link optionalParent}.
350
+ *
351
+ * @category models
352
+ * @since 0.17.0
353
+ */
354
+ export interface Parent<Mode extends ParentMode, Events extends ReadonlyArray<Machine.TaggedSchema>> {
355
+ readonly [ParentTypeId]: typeof ParentTypeId;
356
+ readonly mode: Mode;
357
+ readonly events: Machine.EventProtocol<"public", Events>;
358
+ }
359
+ /**
360
+ * Namespace containing type-level members associated with {@link Parent}.
361
+ *
362
+ * @category models
363
+ * @since 0.17.0
364
+ */
365
+ export declare namespace Parent {
366
+ /** Any owning-machine protocol declaration. */
367
+ type Any = Parent<ParentMode, ReadonlyArray<Machine.TaggedSchema>>;
368
+ }
346
369
  /**
347
370
  * Machine targets available while evaluating machine behavior.
348
371
  *
349
372
  * @category models
350
373
  * @since 0.12.0
351
374
  */
352
- export interface MachineReferences<InputEvents extends ReadonlyArray<Machine.TaggedSchema>, ParentEvents extends ReadonlyArray<Machine.TaggedSchema>> {
375
+ export type MachineReferences<InputEvents extends ReadonlyArray<Machine.TaggedSchema>, ParentEvents extends ReadonlyArray<Machine.TaggedSchema>> = {
353
376
  /** Target for the current machine. Sending queues a later mailbox event. */
354
377
  readonly self: MachineTarget<Machine.EventInputOf<InputEvents>>;
378
+ } & (Machine.ParentModeOf<ParentEvents> extends "required" ? {
379
+ /** Required target for the machine that owns this child. */
380
+ readonly parent: MachineTarget<Machine.EventInputOf<ParentEvents>>;
381
+ } : Machine.ParentModeOf<ParentEvents> extends "optional" ? {
355
382
  /** Target for the owning machine, or `undefined` when running as a root. */
356
383
  readonly parent: MachineTarget<Machine.EventInputOf<ParentEvents>> | undefined;
357
- }
384
+ } : {});
358
385
  /**
359
386
  * Synchronous commands available while a machine transition is being
360
387
  * selected. Enqueuing only records statechart and machine operations; it never
@@ -446,6 +473,9 @@ type ExcludeCompatibleRuntime<Requirements, Events, Emits> = Requirements extend
446
473
  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;
447
474
  declare const InvokeTypeId: typeof internal.InvokeTypeId;
448
475
  declare const TransitionTypeId: typeof internal.TransitionTypeId;
476
+ declare const TransitionBuilderTypeId: unique symbol;
477
+ declare const InvokeBuilderTypeId: unique symbol;
478
+ declare const InitialBuilderTypeId: unique symbol;
449
479
  type StateDefinitionError<Message extends string, Path extends PropertyKey = never, Details extends PropertyKey = never> = {
450
480
  readonly "~effect/Machine/DefinitionError": Message;
451
481
  readonly path: Path;
@@ -486,16 +516,21 @@ type ValidateStateNodeConfig<Node extends Machine.StateNodeConfig, Path extends
486
516
  type ValidateOutputSchema<Node> = "output" extends keyof Node ? Node extends {
487
517
  readonly output: Schema.Top;
488
518
  } ? unknown : StateDefinitionError<"State output must be a schema"> : unknown;
519
+ type SelectorChildKey<Children extends Machine.StateSchemas> = ActiveStateKey<Children> | ChoiceStateKey<Children>;
520
+ type ValidateInitialSelectorChild<Children extends Machine.StateSchemas, Path extends PropertyKey> = "initial" extends SelectorChildKey<Children> ? StateDefinitionError<"Active and choice child states cannot use the reserved target selector key \"initial\"", StateDefinitionPath<Extract<Path, string>, "initial">, "initial"> : unknown;
521
+ type ValidateWithSelectorChild<Node extends Machine.StateNodeConfig, Children extends Machine.StateSchemas, Path extends PropertyKey> = Node extends {
522
+ readonly schema: Machine.TaggedSchema;
523
+ } ? "with" extends SelectorChildKey<Children> ? StateDefinitionError<"Schema-backed compound child states cannot use the reserved local target selector key \"with\"", StateDefinitionPath<Extract<Path, string>, "with">, "with"> : unknown : unknown;
489
524
  type ValidateStateNodeWithChildren<Node extends Machine.StateNodeConfig, Children, Path extends PropertyKey> = Children extends Machine.StateSchemas ? Node extends {
490
525
  readonly type: "final";
491
526
  } ? StateDefinitionError<"Final states cannot declare child states"> : Node extends {
492
527
  readonly type: "parallel";
493
- } ? "initial" extends keyof Node ? StateDefinitionError<"Parallel states cannot declare an initial child"> : {
528
+ } ? ValidateInitialSelectorChild<Children, Path> & ("initial" extends keyof Node ? StateDefinitionError<"Parallel states cannot declare an initial child"> : {
494
529
  readonly states: ValidateStateTree<Children, true, Extract<Path, string>>;
495
- } & ValidateOutputSchema<Node> : "output" extends keyof Node ? StateDefinitionError<"Only final and parallel states can declare output"> : ValidateCompoundStateNode<Node, Children, Path> : StateDefinitionError<"Child states must be a state tree">;
530
+ } & ValidateOutputSchema<Node>) : "output" extends keyof Node ? StateDefinitionError<"Only final and parallel states can declare output"> : ValidateCompoundStateNode<Node, Children, Path> : StateDefinitionError<"Child states must be a state tree">;
496
531
  type ValidateCompoundStateNode<Node extends Machine.StateNodeConfig, Children extends Machine.StateSchemas, Path extends PropertyKey> = Node extends {
497
532
  readonly initial: infer Initial;
498
- } ? Initial extends ActiveStateKey<Children> | ChoiceStateKey<Children> ? {
533
+ } ? Initial extends ActiveStateKey<Children> | ChoiceStateKey<Children> ? ValidateInitialSelectorChild<Children, Path> & ValidateWithSelectorChild<Node, Children, Path> & {
499
534
  readonly states: ValidateStateTree<Children, true, Extract<Path, string>>;
500
535
  } : StateDefinitionError<"Compound initial must be one of its direct child keys", Path, Extract<Initial, PropertyKey>> : StateDefinitionError<"Compound states must declare an initial child", Path>;
501
536
  type ValidateStateNodeWithoutChildren<Node extends Machine.StateNodeConfig> = "initial" extends keyof Node ? StateDefinitionError<"Atomic states cannot declare an initial child"> : Node extends {
@@ -1164,7 +1199,7 @@ export interface MachineRef<out State, in Event, out Error = never, out Output =
1164
1199
  readonly childChanges: <Child extends ChildMachine.Any>(child: Child) => Stream.Stream<Option.Option<ChildMachine.Ref<Child>>>;
1165
1200
  }
1166
1201
  /**
1167
- * Machine-specific process logic used by `spawn` and `invoke`.
1202
+ * Machine-specific process logic used by `spawn` and state-owned invocations.
1168
1203
  *
1169
1204
  * @category models
1170
1205
  * @since 0.4.0
@@ -1407,6 +1442,20 @@ export declare namespace Machine {
1407
1442
  readonly inputEvents: InputEvents;
1408
1443
  readonly parentEvents: ParentEvents;
1409
1444
  }
1445
+ /** @internal Carries parent availability without widening the event tuple. */
1446
+ type ParentEventSchemas<Mode extends ParentMode, Events extends ReadonlyArray<TaggedSchema>> = Events & {
1447
+ readonly [ParentModeTypeId]: Mode;
1448
+ };
1449
+ /** Extracts the parent availability encoded in a machine event tuple. */
1450
+ type ParentModeOf<Events extends ReadonlyArray<TaggedSchema>> = Events extends {
1451
+ readonly [ParentModeTypeId]: infer Mode extends ParentMode;
1452
+ } ? Mode : Events extends readonly [] ? "none" : "optional";
1453
+ /** Extracts the event schemas declared by an owning-machine protocol. */
1454
+ type ParentEventsOf<Declaration extends Parent.Any | undefined> = Declaration extends Parent<infer Mode, infer Events> ? ParentEventSchemas<Mode, Events> : readonly [];
1455
+ /** Extracts the owning-machine declaration carried by a machine. */
1456
+ type ParentDeclarationOf<Events extends ReadonlyArray<TaggedSchema>> = ParentModeOf<Events> extends infer Mode ? Mode extends ParentMode ? Parent<Mode, Events> : undefined : never;
1457
+ /** Constraint applied to APIs that create an independent root runtime. */
1458
+ type RootCompatible<Events extends ReadonlyArray<TaggedSchema>> = ParentModeOf<Events> extends "required" ? never : unknown;
1410
1459
  /**
1411
1460
  * Any schema-first machine.
1412
1461
  *
@@ -1427,7 +1476,7 @@ export declare namespace Machine {
1427
1476
  readonly events: EventProtocol.Any<"public">;
1428
1477
  readonly internalEvents: EventProtocol.Any<"internal">;
1429
1478
  readonly emittedEvents: EventProtocol.Any<"emitted">;
1430
- readonly parentEvents: EventProtocol.Any<"public">;
1479
+ readonly parent: Parent.Any | undefined;
1431
1480
  readonly input: Schema.Top | undefined;
1432
1481
  readonly id: string | undefined;
1433
1482
  /** @internal */
@@ -1437,8 +1486,6 @@ export declare namespace Machine {
1437
1486
  /** @internal */
1438
1487
  readonly handlers: any;
1439
1488
  /** @internal */
1440
- readonly invoke: any;
1441
- /** @internal */
1442
1489
  readonly initial: any;
1443
1490
  /** @internal */
1444
1491
  readonly initialDefinition: InitialDefinition;
@@ -1458,12 +1505,22 @@ export declare namespace Machine {
1458
1505
  */
1459
1506
  type Events<M extends Any> = M[typeof MachineTypeId]["events"];
1460
1507
  /**
1461
- * Extracts the input schema carried by a machine definition.
1508
+ * Extracts the startup input schema carried by a machine definition.
1462
1509
  *
1463
1510
  * @category utility types
1464
- * @since 0.4.0
1511
+ * @since 0.18.0
1465
1512
  */
1466
- type Input<M extends Any> = M[typeof MachineTypeId]["input"];
1513
+ type InputSchema<M extends Any> = M[typeof MachineTypeId]["input"];
1514
+ /**
1515
+ * Extracts the decoded startup input accepted by a machine definition.
1516
+ *
1517
+ * Machines declared with `Schema.Void` do not accept a startup input, so
1518
+ * their extracted input type is `never`.
1519
+ *
1520
+ * @category utility types
1521
+ * @since 0.18.0
1522
+ */
1523
+ type Input<M extends Any> = InputSchema<M> extends infer Input extends Schema.Top ? Input extends typeof Schema.Void ? never : Input["Type"] : never;
1467
1524
  /**
1468
1525
  * Extracts state paths that do not yet have handlers.
1469
1526
  *
@@ -1538,6 +1595,8 @@ export declare namespace Machine {
1538
1595
  type InputEvents<M extends Any> = M[typeof MachineTypeId]["inputEvents"];
1539
1596
  /** Extracts the public input protocol required from an owning machine. */
1540
1597
  type ParentEvents<M extends Any> = M[typeof MachineTypeId]["parentEvents"];
1598
+ /** Extracts whether a machine requires or optionally accepts an owner. */
1599
+ type ParentAvailability<M extends Any> = ParentModeOf<M[typeof MachineTypeId]["parentEvents"]>;
1541
1600
  /** Extracts an internal event schema tuple from the complete and public protocols. */
1542
1601
  type InternalEventSchemas<Events extends ReadonlyArray<TaggedSchema>, InputEvents extends ReadonlyArray<TaggedSchema>> = Events extends readonly [
1543
1602
  ...InputEvents,
@@ -2054,6 +2113,7 @@ export declare namespace Machine {
2054
2113
  readonly source: SourcePath;
2055
2114
  readonly trigger: TransitionTrigger<EventTag>;
2056
2115
  readonly reenter: boolean;
2116
+ readonly acceptance: TransitionAcceptance;
2057
2117
  readonly branches: ReadonlyArray<TransitionBranch<TargetPath>>;
2058
2118
  }
2059
2119
  /**
@@ -2658,6 +2718,22 @@ export declare namespace Machine {
2658
2718
  interface NoTarget {
2659
2719
  readonly [Topology.NoTargetTypeId]: typeof Topology.NoTargetTypeId;
2660
2720
  }
2721
+ /**
2722
+ * Opaque result returned when a declinable transition does not accept the
2723
+ * current event or lifecycle outcome.
2724
+ *
2725
+ * Declining selects no transition and discards operations enqueued by that
2726
+ * resolver. Hierarchical event and eventless dispatch continues with the
2727
+ * next eligible ancestor candidate.
2728
+ *
2729
+ * @category models
2730
+ * @since 0.17.0
2731
+ */
2732
+ interface Declined {
2733
+ readonly [Topology.DeclinedTypeId]: typeof Topology.DeclinedTypeId;
2734
+ }
2735
+ /** Static acceptance contract of one transition definition. */
2736
+ type TransitionAcceptance = "required" | "declinable";
2661
2737
  /**
2662
2738
  * Transition instruction that restores a history pseudo-state's parent.
2663
2739
  *
@@ -2821,11 +2897,12 @@ export declare namespace Machine {
2821
2897
  readonly path: Path;
2822
2898
  readonly "~effect/Machine/TargetSelectionResult"?: Types.Covariant<Result>;
2823
2899
  }
2824
- type SelectionMethod<Builder, Path extends string, Kind extends Topology.TargetSelectionKind = "state"> = () => TargetSelection<Builder, Path, Kind>;
2900
+ type SelectionValue<Builder, Path extends string, Kind extends Topology.TargetSelectionKind = "state"> = TargetSelection<Builder, Path, Kind>;
2901
+ type SelectionMethod<Builder, Path extends string, Kind extends Topology.TargetSelectionKind = "state"> = () => SelectionValue<Builder, Path, Kind>;
2825
2902
  type InitialSelectionMethod<Builder, Path extends string> = Builder extends {
2826
2903
  readonly initial: infer Initial;
2827
2904
  } ? {
2828
- readonly initial: SelectionMethod<Initial, Path, "initial">;
2905
+ readonly initial: SelectionValue<Initial, Path, "initial">;
2829
2906
  } : {};
2830
2907
  type SelectionTreeWithPrefix<AllStates extends StateSchemas, States extends StateSchemas, Prefix extends string, Scope extends "local" | "branch", Builder> = {
2831
2908
  readonly [Key in Extract<ActiveStateKey<States> | ChoiceStateKey<States>, keyof Builder>]: SelectionNode<AllStates, States[Key], JoinPath<Prefix, Key>, Scope, Builder[Key]>;
@@ -2843,27 +2920,32 @@ export declare namespace Machine {
2843
2920
  readonly [Key in Root]: SelectionNode<States, States[Key], Key, "branch", BranchTargetBuilder<States, Source>[Key]>;
2844
2921
  } : {} : {};
2845
2922
  type LocalTargetSelector<States extends StateSchemas, Source extends StateNodeIdentifier<States>> = NearestCompoundScope<States, Source> extends infer 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 ? {
2846
- readonly with: SelectionMethod<Builder["with"], Scope>;
2923
+ readonly with: SelectionValue<Builder["with"], Scope>;
2847
2924
  } : {}) : {} : {} : {};
2848
2925
  type HistorySelectionTree<AllStates extends StateSchemas, States extends StateSchemas, Prefix extends string, Builder> = {
2849
- readonly [Key in Extract<HistoryContainingKey<States>, keyof Builder>]: States[Key] extends HistoryStateNodeConfig ? SelectionMethod<Builder[Key], JoinPath<Prefix, Key>, "history"> : States[Key] extends {
2926
+ readonly [Key in Extract<HistoryContainingKey<States>, keyof Builder>]: States[Key] extends HistoryStateNodeConfig ? SelectionValue<Builder[Key], JoinPath<Prefix, Key>, "history"> : States[Key] extends {
2850
2927
  readonly states: infer Children extends StateSchemas;
2851
2928
  } ? HistorySelectionTree<AllStates, Children, JoinPath<Prefix, Key>, Builder[Key]> : never;
2852
2929
  };
2853
- /** Definition-time topology selector available to an ordinary transition. */
2930
+ /**
2931
+ * Definition-time topology selector available to an ordinary transition.
2932
+ * Topology-only instructions (`none`, declared `initial` and history
2933
+ * selections, and `local.with`) are values. State and choice destinations
2934
+ * remain callable selection methods.
2935
+ */
2854
2936
  interface TargetSelector<States extends StateSchemas, Source extends StateNodeIdentifier<States>> {
2855
- readonly none: SelectionMethod<TargetBuilder<States, Source>["none"], never, "none">;
2937
+ readonly none: SelectionValue<TargetBuilder<States, Source>["none"], never, "none">;
2856
2938
  readonly local: LocalTargetSelector<States, Source>;
2857
2939
  readonly branch: BranchTargetSelector<States, Source>;
2858
2940
  readonly full: FullTargetSelector<States>;
2859
2941
  readonly history: HistorySelectionTree<States, States, "", HistoryTargetBuilder<States>>;
2860
2942
  }
2861
2943
  /** Definition-time selector that can choose only a valid top-level initial entry. */
2862
- type InitialSelector<States extends StateSchemas> = {
2944
+ type InitialTargetSelector<States extends StateSchemas> = {
2863
2945
  readonly [Key in Extract<ActiveStateKey<States>, keyof InitialBuilder<States>>]: States[Key] extends {
2864
2946
  readonly states: StateSchemas;
2865
2947
  } ? {
2866
- readonly initial: SelectionMethod<InitialBuilder<States>[Key], Key, "initial">;
2948
+ readonly initial: SelectionValue<InitialBuilder<States>[Key], Key, "initial">;
2867
2949
  } : SelectionMethod<InitialBuilder<States>[Key], Key>;
2868
2950
  };
2869
2951
  /**
@@ -2872,7 +2954,7 @@ export declare namespace Machine {
2872
2954
  * @category models
2873
2955
  * @since 0.4.0
2874
2956
  */
2875
- interface HandlerContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, EventTag extends TagOf<Events[number]>, E, R, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> extends MachineReferences<InputEvents, ParentEvents> {
2957
+ type HandlerContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, EventTag extends TagOf<Events[number]>, E, R, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> = MachineReferences<InputEvents, ParentEvents> & {
2876
2958
  readonly state: StateByIdentifier<States, StateId>;
2877
2959
  readonly containingState: ParentStateValue<States, StateId>;
2878
2960
  readonly ancestors: ParentStateValues<States, StateId>;
@@ -2886,38 +2968,38 @@ export declare namespace Machine {
2886
2968
  * @since 0.4.0
2887
2969
  */
2888
2970
  readonly target: TargetBuilder<States, StateId>;
2889
- }
2971
+ };
2890
2972
  /**
2891
2973
  * Context passed to an entry or exit state handler.
2892
2974
  *
2893
2975
  * @category models
2894
2976
  * @since 0.4.0
2895
2977
  */
2896
- interface StateActionContext<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 []> extends MachineReferences<InputEvents, ParentEvents> {
2978
+ type StateActionContext<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 []> = MachineReferences<InputEvents, ParentEvents> & {
2897
2979
  readonly state: StateByIdentifier<States, StateId>;
2898
2980
  readonly containingState: ParentStateValue<States, StateId>;
2899
2981
  readonly ancestors: ParentStateValues<States, StateId>;
2900
2982
  readonly event: LifecycleEvent<Events>;
2901
- }
2983
+ };
2902
2984
  /**
2903
2985
  * Context passed to a function-valued invocation source.
2904
2986
  *
2905
2987
  * @category models
2906
2988
  * @since 0.4.0
2907
2989
  */
2908
- interface InvokeContext<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 []> extends MachineReferences<InputEvents, ParentEvents> {
2990
+ type InvokeContext<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 []> = MachineReferences<InputEvents, ParentEvents> & {
2909
2991
  readonly state: StateByIdentifier<States, StateId>;
2910
2992
  readonly containingState: ParentStateValue<States, StateId>;
2911
2993
  readonly ancestors: ParentStateValues<States, StateId>;
2912
2994
  readonly event: LifecycleEvent<Events>;
2913
- }
2995
+ };
2914
2996
  /**
2915
2997
  * Context passed to an invocation's active-snapshot transition.
2916
2998
  *
2917
2999
  * @category models
2918
3000
  * @since 0.4.0
2919
3001
  */
2920
- interface InvokeSnapshotContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, State, Error, Output, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> extends MachineReferences<InputEvents, ParentEvents> {
3002
+ type InvokeSnapshotContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, State, Error, Output, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> = MachineReferences<InputEvents, ParentEvents> & {
2921
3003
  readonly id: string;
2922
3004
  readonly state: StateByIdentifier<States, StateId>;
2923
3005
  readonly containingState: ParentStateValue<States, StateId>;
@@ -2926,14 +3008,14 @@ export declare namespace Machine {
2926
3008
  readonly snapshot: Extract<RuntimeSnapshot<State, Error, Output>, {
2927
3009
  readonly status: "active";
2928
3010
  }>;
2929
- }
3011
+ };
2930
3012
  /**
2931
3013
  * Context passed to an invocation's successful completion transition.
2932
3014
  *
2933
3015
  * @category models
2934
3016
  * @since 0.4.0
2935
3017
  */
2936
- interface InvokeDoneContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, Output, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> extends MachineReferences<InputEvents, ParentEvents> {
3018
+ type InvokeDoneContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, Output, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> = MachineReferences<InputEvents, ParentEvents> & {
2937
3019
  readonly id: string;
2938
3020
  readonly state: StateByIdentifier<States, StateId>;
2939
3021
  readonly containingState: ParentStateValue<States, StateId>;
@@ -2941,9 +3023,9 @@ export declare namespace Machine {
2941
3023
  readonly snapshot: Snapshot<States>;
2942
3024
  readonly target: TargetBuilder<States, StateId>;
2943
3025
  readonly output: Output;
2944
- }
3026
+ };
2945
3027
  /** Context passed to a Stream invocation's element transition. */
2946
- interface InvokeElementContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, Element, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> extends MachineReferences<InputEvents, ParentEvents> {
3028
+ type InvokeElementContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, Element, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> = MachineReferences<InputEvents, ParentEvents> & {
2947
3029
  readonly id: string;
2948
3030
  readonly state: StateByIdentifier<States, StateId>;
2949
3031
  readonly containingState: ParentStateValue<States, StateId>;
@@ -2951,9 +3033,9 @@ export declare namespace Machine {
2951
3033
  readonly snapshot: Snapshot<States>;
2952
3034
  readonly target: TargetBuilder<States, StateId>;
2953
3035
  readonly element: Element;
2954
- }
3036
+ };
2955
3037
  /** Context passed to an invocation typed-failure transition. */
2956
- interface InvokeFailureContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, Error, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> extends MachineReferences<InputEvents, ParentEvents> {
3038
+ type InvokeFailureContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, Error, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> = MachineReferences<InputEvents, ParentEvents> & {
2957
3039
  readonly id: string;
2958
3040
  readonly state: StateByIdentifier<States, StateId>;
2959
3041
  readonly containingState: ParentStateValue<States, StateId>;
@@ -2961,14 +3043,14 @@ export declare namespace Machine {
2961
3043
  readonly snapshot: Snapshot<States>;
2962
3044
  readonly target: TargetBuilder<States, StateId>;
2963
3045
  readonly error: Error;
2964
- }
3046
+ };
2965
3047
  /**
2966
3048
  * Context passed to an eventless transition handler.
2967
3049
  *
2968
3050
  * @category models
2969
3051
  * @since 0.4.0
2970
3052
  */
2971
- interface AlwaysContext<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 []> extends MachineReferences<InputEvents, ParentEvents> {
3053
+ type AlwaysContext<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 []> = MachineReferences<InputEvents, ParentEvents> & {
2972
3054
  readonly state: StateByIdentifier<States, StateId>;
2973
3055
  readonly containingState: ParentStateValue<States, StateId>;
2974
3056
  readonly ancestors: ParentStateValues<States, StateId>;
@@ -2983,14 +3065,14 @@ export declare namespace Machine {
2983
3065
  * @since 0.4.0
2984
3066
  */
2985
3067
  readonly target: TargetBuilder<States, StateId>;
2986
- }
3068
+ };
2987
3069
  /**
2988
3070
  * Context passed to a state completion transition handler.
2989
3071
  *
2990
3072
  * @category models
2991
3073
  * @since 0.4.0
2992
3074
  */
2993
- interface DoneContext<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 []> extends MachineReferences<InputEvents, ParentEvents> {
3075
+ type DoneContext<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 []> = MachineReferences<InputEvents, ParentEvents> & {
2994
3076
  readonly state: StateByIdentifier<States, StateId>;
2995
3077
  readonly containingState: ParentStateValue<States, StateId>;
2996
3078
  readonly ancestors: ParentStateValues<States, StateId>;
@@ -3006,16 +3088,16 @@ export declare namespace Machine {
3006
3088
  * @since 0.4.0
3007
3089
  */
3008
3090
  readonly target: TargetBuilder<States, StateId>;
3009
- }
3091
+ };
3010
3092
  /** Context passed to a transient choice resolver. There is no `state` value. */
3011
- interface ChoiceContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, ChoiceId extends ChoiceIdentifier<States>, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> extends MachineReferences<InputEvents, ParentEvents> {
3093
+ type ChoiceContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, ChoiceId extends ChoiceIdentifier<States>, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> = MachineReferences<InputEvents, ParentEvents> & {
3012
3094
  readonly containingState: StateByIdentifier<States, Extract<ImmediateParentStateIdentifier<ChoiceId>, StateIdentifier<States>>>;
3013
3095
  readonly ancestors: {
3014
3096
  readonly [Parent in Extract<ParentStateIdentifier<ChoiceId>, ValuedStateIdentifier<States>>]: StateByIdentifier<States, Parent>;
3015
3097
  };
3016
3098
  readonly event: LifecycleEvent<Events>;
3017
3099
  readonly target: TargetBuilder<States, ChoiceId>;
3018
- }
3100
+ };
3019
3101
  /**
3020
3102
  * Context passed to a final state output function.
3021
3103
  *
@@ -3144,7 +3226,7 @@ export declare namespace Machine {
3144
3226
  * @category utility types
3145
3227
  * @since 0.4.0
3146
3228
  */
3147
- type EventTransitionReturn<Transition> = Transition extends {
3229
+ type EventTransitionReturn<Transition> = Transition extends (...args: any) => infer Authored ? Authored extends TransitionBuilderEvidence<infer Result, any> ? Result : never : Transition extends {
3148
3230
  readonly resolve?: infer Resolve;
3149
3231
  } ? NonNullable<Resolve> extends (...args: any) => infer Ret ? Ret : never : never;
3150
3232
  /**
@@ -3254,6 +3336,10 @@ export declare namespace Machine {
3254
3336
  } ? EventOf<ParentEvents<M>> : never;
3255
3337
  /** Extracts transition results returned by invocation lifecycle handlers. */
3256
3338
  type InvokeOutcomeReturn<Invoke> = Invoke extends unknown ? (Invoke extends {
3339
+ readonly [InvokeTypeId]: {
3340
+ readonly outcomes: Types.Covariant<infer Outcomes>;
3341
+ };
3342
+ } ? EventTransitionReturn<Outcomes> : never) | (Invoke extends {
3257
3343
  readonly onDone?: infer Handler;
3258
3344
  } ? EventTransitionReturn<NonNullable<Handler>> : never) | (Invoke extends {
3259
3345
  readonly onFailure?: infer Handler;
@@ -3262,20 +3348,22 @@ export declare namespace Machine {
3262
3348
  } ? EventTransitionReturn<NonNullable<Handler>> : never) | (Invoke extends {
3263
3349
  readonly onSnapshot?: infer Handler;
3264
3350
  } ? EventTransitionReturn<NonNullable<Handler>> : never) : never;
3351
+ type InvokeOutcomeError<Invoke> = IsAny<InvokeOutcomeReturn<Invoke>> extends true ? never : Effect.Error<InvokeOutcomeReturn<Invoke>>;
3352
+ type InvokeOutcomeServices<Invoke> = IsAny<InvokeOutcomeReturn<Invoke>> extends true ? never : Effect.Services<InvokeOutcomeReturn<Invoke>>;
3265
3353
  /**
3266
3354
  * Extracts the parent transition error contribution from invoked children.
3267
3355
  *
3268
3356
  * @category utility types
3269
3357
  * @since 0.4.0
3270
3358
  */
3271
- type InvokeError<Config> = [InvokeReturn<Config>] extends [never] ? never : ChildAlreadyExistsError | InvokeInitialError<InvokeReturn<Config>> | Effect.Error<InvokeOutcomeReturn<InvokeReturn<Config>>>;
3359
+ type InvokeError<Config> = [InvokeReturn<Config>] extends [never] ? never : ChildAlreadyExistsError | InvokeInitialError<InvokeReturn<Config>> | InvokeOutcomeError<InvokeReturn<Config>>;
3272
3360
  /**
3273
3361
  * Extracts the parent service requirement contribution from invoked children.
3274
3362
  *
3275
3363
  * @category utility types
3276
3364
  * @since 0.4.0
3277
3365
  */
3278
- type InvokeRequirements<Config> = [InvokeReturn<Config>] extends [never] ? never : MachineRuntimeRequirement | InvokeServices<InvokeReturn<Config>> | Effect.Services<InvokeOutcomeReturn<InvokeReturn<Config>>>;
3366
+ type InvokeRequirements<Config> = [InvokeReturn<Config>] extends [never] ? never : MachineRuntimeRequirement | InvokeServices<InvokeReturn<Config>> | InvokeOutcomeServices<InvokeReturn<Config>>;
3279
3367
  /**
3280
3368
  * Extracts the return value from an eventless transition.
3281
3369
  *
@@ -3310,32 +3398,15 @@ export declare namespace Machine {
3310
3398
  * @since 0.4.0
3311
3399
  */
3312
3400
  type ConfigServices<Config> = Effect.Services<EventHandlerReturn<Config>> | Effect.Services<AlwaysReturn<Config>> | Effect.Services<DoneReturn<Config>> | Effect.Services<StateActionReturn<Config, "entry">> | Effect.Services<StateActionReturn<Config, "exit">> | Effect.Services<HistoryDefaultReturn<Config>> | Effect.Services<ChoiceReturn<Config>> | InvokeRequirements<Config>;
3313
- /** Type evidence retained by {@link transition} without affecting runtime data. */
3314
- interface TransitionTyped<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateNodeIdentifier<States>, Context, Reenter extends boolean> {
3401
+ /** Type evidence retained by an authored transition without affecting runtime data. */
3402
+ interface TransitionTyped<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateNodeIdentifier<States>, Context, Reenter extends boolean, Acceptance extends TransitionAcceptance = "required"> {
3315
3403
  readonly [TransitionTypeId]: {
3316
3404
  readonly owner: Types.Covariant<readonly [States, Events, Emits, StateId, Context]>;
3317
- };
3318
- }
3319
- /** Type evidence for a targetless transition reusable in every owning context. */
3320
- interface TargetlessTransitionTyped {
3321
- readonly [TransitionTypeId]: {
3322
- readonly targetless: true;
3405
+ readonly acceptance: Types.Covariant<Acceptance>;
3323
3406
  };
3324
3407
  }
3325
3408
  /** The only transition value accepted by machine handler APIs. */
3326
- type TransitionConfig<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateNodeIdentifier<States>, Context, Reenter extends boolean = false> = (TransitionTyped<States, Events, Emits, StateId, Context, Reenter> | TargetlessTransitionTyped | TargetlessTransitionInput<Events, Emits, Context>) & {
3327
- readonly reenter?: [Reenter] extends [true] ? boolean : never;
3328
- };
3329
- /** Direct shorthand for a non-reentering targetless transition. */
3330
- interface TargetlessTransitionResolver<Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Context> {
3331
- <ResolvedContext extends Omit<Context, "target">>(context: ResolvedContext, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>): undefined;
3332
- }
3333
- type TargetlessTransitionInput<Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Context> = {
3334
- readonly target: TargetlessSelector;
3335
- readonly resolve?: TargetlessTransitionResolver<Events, Emits, Context>;
3336
- readonly branches?: never;
3337
- readonly reenter?: never;
3338
- };
3409
+ type TransitionConfig<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateNodeIdentifier<States>, Context, Reenter extends boolean = false, Acceptance extends TransitionAcceptance = "required"> = TransitionBuilderInput<States, Events, Emits, StateId, Context, Reenter, Acceptance>;
3339
3410
  type SelectionBuilder<Selection> = Selection extends TargetSelection<infer Builder, any, any> ? Builder : never;
3340
3411
  type SelectionKind<Selection> = Selection extends TargetSelection<any, any, infer Kind> ? Kind : never;
3341
3412
  type SelectionPath<Selection> = Selection extends TargetSelection<any, infer Path, any> ? Path : never;
@@ -3343,16 +3414,18 @@ export declare namespace Machine {
3343
3414
  readonly from: (...args: any) => infer Result;
3344
3415
  } ? Result : never);
3345
3416
  type SelectedTargetResult<Selection> = SelectionBuilder<Selection> extends infer Builder ? TargetBuilderResult<Builder> : never;
3417
+ type SelectionSupportsDefaultConstruction<Selection> = SelectionKind<Selection> extends "none" ? true : SelectionBuilder<Selection> extends {
3418
+ readonly from: (...args: infer Args) => any;
3419
+ } ? [] extends Args ? true : false : SelectionBuilder<Selection> extends (...args: infer Args) => any ? [] extends Args ? true : false : false;
3346
3420
  type TransitionResolveContext<Context, Selection> = Omit<Context, "target"> & (SelectionKind<Selection> extends "none" ? {} : {
3347
3421
  readonly target: SelectionBuilder<Selection>;
3348
3422
  });
3423
+ /** Context capability available only to explicitly declinable resolvers. */
3424
+ interface DeclineCapability {
3425
+ readonly decline: () => Declined;
3426
+ }
3349
3427
  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;
3350
- type TransitionDirectInput<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>> = {
3351
- readonly target: (to: TargetSelector<States, StateId>) => Selection;
3352
- readonly resolve?: TransitionResolver<Events, Emits, Context, Selection>;
3353
- readonly branches?: never;
3354
- readonly reenter?: Reenter;
3355
- };
3428
+ 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;
3356
3429
  /** One named destination declared by a branching transition. */
3357
3430
  interface TransitionBranchInput<Selection extends TargetSelection<any, any, any> = TargetSelection<any, any, any>> {
3358
3431
  readonly target: Selection;
@@ -3387,27 +3460,85 @@ export declare namespace Machine {
3387
3460
  readonly select: BranchSelectors<Branches>;
3388
3461
  };
3389
3462
  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>;
3390
- type TransitionBranchesInput<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>>> = {
3391
- readonly target?: never;
3392
- /**
3393
- * Declares every possible destination under a stable semantic key.
3394
- *
3395
- * Branches are captured once in ECMAScript property order. Array-index
3396
- * keys are rejected so reordering ordinary named properties affects only
3397
- * presentation order; the key remains the testing and inspection identity.
3398
- */
3399
- readonly branches: (to: TargetSelector<States, StateId>) => Branches;
3400
- readonly resolve: TransitionBranchesResolver<Events, Emits, Context, Branches>;
3401
- readonly reenter?: Reenter;
3463
+ 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;
3464
+ /** @internal Type evidence retained by a transition authored through its bound selector. */
3465
+ interface TransitionBuilderEvidence<out Result, out Acceptance extends TransitionAcceptance> {
3466
+ readonly [TransitionBuilderTypeId]: {
3467
+ readonly result: Types.Covariant<Result>;
3468
+ readonly acceptance: Types.Covariant<Acceptance>;
3469
+ };
3470
+ }
3471
+ type TransitionReenterOption<Reenter extends boolean> = [Reenter] extends [true] ? {
3472
+ readonly reenter?: boolean;
3473
+ } : {
3474
+ readonly reenter?: never;
3402
3475
  };
3403
- 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>;
3476
+ type TransitionRequiredOptions<Reenter extends boolean> = TransitionReenterOption<Reenter> & {
3477
+ readonly declinable?: false;
3478
+ };
3479
+ type TransitionDeclinableOptions<Reenter extends boolean> = TransitionReenterOption<Reenter> & {
3480
+ readonly declinable: true;
3481
+ };
3482
+ 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>;
3483
+ 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>> {
3484
+ (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">;
3485
+ }
3486
+ 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>> {
3487
+ (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">;
3488
+ }
3489
+ /** A selected transition target with target-specific resolver operations. */
3490
+ 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"> : {}) & {
3491
+ readonly resolve: TransitionResolveRequired<States, Events, Emits, StateId, Context, Reenter, Selection> & ("declinable" extends Acceptance ? TransitionResolveDeclinable<States, Events, Emits, StateId, Context, Reenter, Selection> : {});
3492
+ } & ([Reenter] extends [true] ? SelectionSupportsDefaultConstruction<Selection> extends true ? {
3493
+ readonly reenter: () => BuiltTransition<States, Events, Emits, StateId, Context, Reenter, SelectionKind<Selection> extends "none" ? undefined : SelectedTargetResult<Selection> | undefined, "required">;
3494
+ } : {} : {});
3495
+ /** @internal Type evidence retained by a machine initial-entry declaration. */
3496
+ interface InitialBuilderEvidence<out Selection> {
3497
+ readonly [InitialBuilderTypeId]: Types.Covariant<Selection>;
3498
+ }
3499
+ /** A selected machine initial entry with its exact resolver target. */
3500
+ type InitialTransitionTarget<Input, Selection extends TargetSelection<any, any, any>> = Selection & (SelectionSupportsDefaultConstruction<Selection> extends true ? InitialBuilderEvidence<Selection> : {}) & {
3501
+ readonly resolve: (resolve: (context: {
3502
+ readonly input: Input;
3503
+ readonly target: SelectionBuilder<Selection>;
3504
+ }) => SelectedTargetResult<Selection>) => InitialBuilderEvidence<Selection>;
3505
+ };
3506
+ type InitialSelectorNode<Input, Node> = Node extends (...args: infer Args) => infer Selection ? Selection extends TargetSelection<any, any, any> ? ((...args: Args) => InitialTransitionTarget<Input, Selection>) & {
3507
+ readonly [Key in keyof Node]: InitialSelectorNode<Input, Node[Key]>;
3508
+ } : never : Node extends TargetSelection<any, any, any> ? InitialTransitionTarget<Input, Node> : {
3509
+ readonly [Key in keyof Node]: InitialSelectorNode<Input, Node[Key]>;
3510
+ };
3511
+ /** Definition-time selector for a machine's top-level initial entry. */
3512
+ type InitialSelector<States extends StateSchemas, Input = void> = InitialSelectorNode<Input, InitialTargetSelector<States>>;
3513
+ /** Target-first initial-entry declaration accepted by {@link make}. */
3514
+ type InitialBuilderInput<States extends StateSchemas, Input> = (to: InitialSelector<States, Input>) => InitialBuilderEvidence<TargetSelection<any, any, any>>;
3515
+ 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 (...args: infer Args) => infer Selection ? Selection extends TargetSelection<any, any, any> ? ((...args: Args) => TransitionTarget<States, Events, Emits, StateId, Context, Reenter, Acceptance, Selection>) & {
3516
+ readonly [Key in keyof Node]: TransitionSelectorNode<States, Events, Emits, StateId, Context, Reenter, Acceptance, Node[Key]>;
3517
+ } : never : Node extends TargetSelection<any, any, any> ? TransitionTarget<States, Events, Emits, StateId, Context, Reenter, Acceptance, Node> : {
3518
+ readonly [Key in keyof Node]: TransitionSelectorNode<States, Events, Emits, StateId, Context, Reenter, Acceptance, Node[Key]>;
3519
+ };
3520
+ 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>>> {
3521
+ (resolve: TransitionBranchesResolver<Events, Emits, Context, Branches>, options?: TransitionRequiredOptions<Reenter>): BuiltTransition<States, Events, Emits, StateId, Context, Reenter, BranchSelectionResult<Branches>, "required">;
3522
+ }
3523
+ 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>>> {
3524
+ (resolve: DeclinableTransitionBranchesResolver<Events, Emits, Context, Branches>, options: TransitionDeclinableOptions<Reenter>): BuiltTransition<States, Events, Emits, StateId, Context, Reenter, BranchSelectionResult<Branches> | Declined, "declinable">;
3525
+ }
3526
+ /** Selector supplied to inline transition declarations. */
3527
+ 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>> & {
3528
+ readonly branches: <const Branches extends Readonly<Record<string, TransitionBranchInput>>>(branches: Branches & ValidateTransitionBranchRecord<NoInfer<Branches>>) => {
3529
+ readonly resolve: TransitionBranchesResolveRequired<States, Events, Emits, StateId, Context, Reenter, Branches> & ("declinable" extends Acceptance ? TransitionBranchesResolveDeclinable<States, Events, Emits, StateId, Context, Reenter, Branches> : {});
3530
+ };
3531
+ };
3532
+ /** Inline transition declaration accepted by state and invocation handlers. */
3533
+ 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>;
3534
+ 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>;
3404
3535
  type InvokeSource<Value, Context> = Value | ((context: Context) => Value);
3405
3536
  /** Inline state-owned work that runs for the lifetime of its active state. */
3406
- interface InvokeOwned<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>> {
3407
- readonly "~effect/Machine/InvokeOwner"?: Types.Covariant<readonly [States, Events, Emits, StateId]>;
3537
+ interface InvokeOwned<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 []> {
3538
+ readonly "~effect/Machine/InvokeOwner"?: Types.Covariant<readonly [States, Events, Emits, StateId, InputEvents, ParentEvents]>;
3408
3539
  }
3409
- /** Type evidence retained by {@link invoke} without affecting runtime data. */
3410
- interface InvokeTyped<Output, Error, Requirements, InitialError, Emits = never, ParentEvent = never> {
3540
+ /** Type evidence retained by a completed state-owned invocation. */
3541
+ interface InvokeTyped<Output, Error, Requirements, InitialError, Emits = never, ParentEvent = never, Outcomes = never> {
3411
3542
  readonly [InvokeTypeId]: {
3412
3543
  readonly output: Types.Covariant<Output>;
3413
3544
  readonly error: Types.Covariant<Error>;
@@ -3415,9 +3546,10 @@ export declare namespace Machine {
3415
3546
  readonly initialError: Types.Covariant<InitialError>;
3416
3547
  readonly emits: Types.Covariant<Emits>;
3417
3548
  readonly parentEvents: Types.Covariant<ParentEvent>;
3549
+ readonly outcomes: Types.Covariant<Outcomes>;
3418
3550
  };
3419
3551
  }
3420
- type InvokeConfig<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 []> = InvokeOwned<States, Events, Emits, StateId> & ({
3552
+ type StoredInvokeConfig<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 []> = InvokeOwned<States, Events, Emits, StateId, InputEvents, ParentEvents> & ({
3421
3553
  readonly id: string;
3422
3554
  readonly effect: (context: InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>) => Effect.Effect<any, any, any>;
3423
3555
  readonly stream?: never;
@@ -3479,76 +3611,7 @@ export declare namespace Machine {
3479
3611
  readonly onElement?: never;
3480
3612
  readonly onSnapshot?: unknown;
3481
3613
  });
3482
- /** State-bound inline invocation configuration. */
3483
- type InvokeDefinition<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 []> = InvokeConfig<States, Events, Emits, StateId, InputEvents, ParentEvents> | ReadonlyArray<InvokeConfig<States, Events, Emits, StateId, InputEvents, ParentEvents>>;
3484
- type TypedInvokeDefinition = InvokeTyped<any, any, any, any, any, any> | ReadonlyArray<InvokeTyped<any, any, any, any, any, any>>;
3485
- type InvokeHandlerRequirement<Value, Handler> = IsAny<Value> extends true ? {
3486
- readonly handler: Handler;
3487
- } : [Value] extends [never] ? {
3488
- readonly handler?: never;
3489
- } : {
3490
- readonly handler: Handler;
3491
- };
3492
- type InvokeDoneRequirement<Value, Handler> = InvokeHandlerRequirement<Value, Handler> extends infer Requirement ? Requirement extends {
3493
- readonly handler: infer Required;
3494
- } ? {
3495
- readonly onDone: Required;
3496
- } : {
3497
- readonly onDone?: never;
3498
- } : never;
3499
- type InvokeFailureRequirement<Value, Handler> = InvokeHandlerRequirement<Value, Handler> extends infer Requirement ? Requirement extends {
3500
- readonly handler: infer Required;
3501
- } ? {
3502
- readonly onFailure: Required;
3503
- } : {
3504
- readonly onFailure?: never;
3505
- } : never;
3506
- type InvokeElementRequirement<Value, Handler> = InvokeHandlerRequirement<Value, Handler> extends infer Requirement ? Requirement extends {
3507
- readonly handler: infer Required;
3508
- } ? {
3509
- readonly onElement: Required;
3510
- } : {
3511
- readonly onElement?: never;
3512
- } : never;
3513
- type TimerInvokeArgs<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 []> = {
3514
- readonly id: InvokeLifecycleId;
3515
- readonly after: InvokeSource<Duration.Input, InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>>;
3516
- readonly effect?: never;
3517
- readonly stream?: never;
3518
- readonly logic?: never;
3519
- readonly child?: never;
3520
- readonly address?: never;
3521
- readonly onFailure?: never;
3522
- readonly onElement?: never;
3523
- readonly onSnapshot?: never;
3524
- readonly onDone: InvokeTransition<States, Events, Emits, StateId, InvokeDoneContext<States, Events, Emits, StateId, void, InputEvents, ParentEvents>>;
3525
- };
3526
- type LogicInvokeArgs<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, ChildState, ChildEvent, ChildError, ChildRequirements, ChildOutput, ChildInitialError, Address extends ChildAddress<never>, Source = Logic<ChildState, ChildEvent, ChildError, ChildRequirements, ChildOutput, ChildInitialError>, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> = {
3527
- readonly id: InvokeLifecycleId;
3528
- readonly address: Address & ChildAddress.Compatibility<Address, ChildEvent>;
3529
- readonly logic: Source;
3530
- readonly effect?: never;
3531
- readonly stream?: never;
3532
- readonly after?: never;
3533
- readonly child?: never;
3534
- readonly onElement?: never;
3535
- readonly onSnapshot?: InvokeTransition<States, Events, Emits, StateId, InvokeSnapshotContext<States, Events, Emits, StateId, NoInfer<ChildState>, NoInfer<ChildError>, NoInfer<ChildOutput>, InputEvents, ParentEvents>>;
3536
- } & InvokeDoneRequirement<NoInfer<ChildOutput>, InvokeTransition<States, Events, Emits, StateId, InvokeDoneContext<States, Events, Emits, StateId, NoInfer<ChildOutput>, InputEvents, ParentEvents>>> & InvokeFailureRequirement<NoInfer<ChildError>, InvokeTransition<States, Events, Emits, StateId, InvokeFailureContext<States, Events, Emits, StateId, NoInfer<ChildError>, InputEvents, ParentEvents>>>;
3537
- type ChildInvokeArgs<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, ChildDefinition extends Machine.Any, Child extends ChildMachine<string, ChildDefinition>, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> = {
3538
- readonly child: Child & (ChildDefinition extends EnsureExecutable<Machine.States<ChildDefinition>, Machine.UnhandledStates<ChildDefinition>, Machine.OutputStates<ChildDefinition>> ? unknown : never);
3539
- readonly id?: never;
3540
- readonly address?: never;
3541
- readonly effect?: never;
3542
- readonly stream?: never;
3543
- readonly after?: never;
3544
- readonly logic?: never;
3545
- readonly onElement?: never;
3546
- readonly onSnapshot?: InvokeTransition<States, Events, Emits, StateId, InvokeSnapshotContext<States, Events, Emits, StateId, Snapshot<Machine.States<ChildDefinition>>, Error<ChildDefinition>, Output<ChildDefinition>, InputEvents, ParentEvents>>;
3547
- } & (Input<ChildDefinition> extends typeof Schema.Void ? {
3548
- readonly input?: never;
3549
- } : {
3550
- readonly input: InvokeSource<Input<ChildDefinition>["Type"], InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>>;
3551
- }) & InvokeDoneRequirement<Output<ChildDefinition>, InvokeTransition<States, Events, Emits, StateId, InvokeDoneContext<States, Events, Emits, StateId, Output<ChildDefinition>, InputEvents, ParentEvents>>> & InvokeFailureRequirement<Error<ChildDefinition> | ActionError<Services<ChildDefinition>>, InvokeTransition<States, Events, Emits, StateId, InvokeFailureContext<States, Events, Emits, StateId, Error<ChildDefinition> | ActionError<Services<ChildDefinition>>, InputEvents, ParentEvents>>>;
3614
+ type StoredInvokeDefinition<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 []> = StoredInvokeConfig<States, Events, Emits, StateId, InputEvents, ParentEvents> | ReadonlyArray<StoredInvokeConfig<States, Events, Emits, StateId, InputEvents, ParentEvents>>;
3552
3615
  type LogicInitialEffectOf<Value> = Value extends {
3553
3616
  readonly initial: infer Initial;
3554
3617
  } ? Initial extends (...args: ReadonlyArray<any>) => infer Result ? Result : never : never;
@@ -3563,40 +3626,85 @@ export declare namespace Machine {
3563
3626
  type LogicServicesOf<Value> = Effect.Services<LogicInitialEffectOf<Value> | LogicRunEffectOf<Value>>;
3564
3627
  type LogicOutputOf<Value> = Effect.Success<LogicRunEffectOf<Value>>;
3565
3628
  type LogicInitialErrorOf<Value> = Effect.Error<LogicInitialEffectOf<Value>>;
3566
- type ContextualInvokeConfig<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, InputEvents extends ReadonlyArray<TaggedSchema>, ParentEvents extends ReadonlyArray<TaggedSchema>, Raw> = Raw extends InvokeTyped<any, any, any, any, any> ? unknown : Raw extends {
3567
- readonly effect: infer Source;
3568
- } ? InvokeFactoryResult<Source> extends infer Fx extends Effect.Effect<any, any, any> ? InvokeDoneRequirement<Effect.Success<Fx>, InvokeTransition<States, Events, Emits, StateId, InvokeDoneContext<States, Events, Emits, StateId, Effect.Success<Fx>, InputEvents, ParentEvents>>> & InvokeFailureRequirement<Effect.Error<Fx>, InvokeTransition<States, Events, Emits, StateId, InvokeFailureContext<States, Events, Emits, StateId, Effect.Error<Fx>, InputEvents, ParentEvents>>> & {
3569
- readonly onSnapshot?: never;
3570
- } : never : Raw extends {
3571
- readonly stream: infer Source;
3572
- } ? InvokeFactoryResult<Source> extends infer SourceStream extends Stream.Stream<any, any, any> ? InvokeElementRequirement<Stream.Success<SourceStream>, InvokeTransition<States, Events, Emits, StateId, InvokeElementContext<States, Events, Emits, StateId, Stream.Success<SourceStream>, InputEvents, ParentEvents>>> & {
3573
- readonly onDone: InvokeTransition<States, Events, Emits, StateId, InvokeDoneContext<States, Events, Emits, StateId, void, InputEvents, ParentEvents>>;
3574
- } & InvokeFailureRequirement<Stream.Error<SourceStream>, InvokeTransition<States, Events, Emits, StateId, InvokeFailureContext<States, Events, Emits, StateId, Stream.Error<SourceStream>, InputEvents, ParentEvents>>> & {
3575
- readonly onSnapshot?: never;
3576
- } : never : Raw extends {
3577
- readonly after: unknown;
3578
- } ? {
3579
- readonly onDone: InvokeTransition<States, Events, Emits, StateId, InvokeDoneContext<States, Events, Emits, StateId, void, InputEvents, ParentEvents>>;
3580
- readonly onFailure?: never;
3581
- readonly onSnapshot?: never;
3582
- } : Raw extends {
3583
- readonly logic: infer Source;
3584
- readonly address: infer Address;
3585
- } ? InvokeResolvedSource<Source> extends infer ChildLogic extends Logic<any, any, any, any, any, any> ? InvokeDoneRequirement<InvokeOutput<Raw>, InvokeTransition<States, Events, Emits, StateId, InvokeDoneContext<States, Events, Emits, StateId, InvokeOutput<Raw>, InputEvents, ParentEvents>>> & InvokeFailureRequirement<InvokeRuntimeError<Raw>, InvokeTransition<States, Events, Emits, StateId, InvokeFailureContext<States, Events, Emits, StateId, InvokeRuntimeError<Raw>, InputEvents, ParentEvents>>> & {
3586
- readonly address: ChildAddress<never> & ChildAddress.Compatibility<Address, ChildLogic extends Logic<any, infer ChildEvent, any, any, any, any> ? ChildEvent : never>;
3587
- readonly onSnapshot?: InvokeTransition<States, Events, Emits, StateId, InvokeSnapshotContext<States, Events, Emits, StateId, ChildLogic extends Logic<infer ChildState, any, any, any, any, any> ? ChildState : never, InvokeRuntimeError<Raw>, InvokeOutput<Raw>, InputEvents, ParentEvents>>;
3588
- } : never : Raw extends {
3589
- readonly child: infer Child extends ChildMachine<string, infer ChildDefinition>;
3590
- } ? ChildMachineLogic<Child> extends infer ChildLogic extends Logic<any, any, any, any, any, any> ? InvokeDoneRequirement<Output<ChildDefinition>, InvokeTransition<States, Events, Emits, StateId, InvokeDoneContext<States, Events, Emits, StateId, Output<ChildDefinition>, InputEvents, ParentEvents>>> & InvokeFailureRequirement<Error<ChildDefinition> | ActionError<Services<ChildDefinition>>, InvokeTransition<States, Events, Emits, StateId, InvokeFailureContext<States, Events, Emits, StateId, Error<ChildDefinition> | ActionError<Services<ChildDefinition>>, InputEvents, ParentEvents>>> & (Input<ChildDefinition> extends typeof Schema.Void ? {
3591
- readonly input?: never;
3592
- } : {
3593
- readonly input: InvokeSource<Input<ChildDefinition>["Type"], InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>>;
3594
- }) & {
3595
- readonly onSnapshot?: InvokeTransition<States, Events, Emits, StateId, InvokeSnapshotContext<States, Events, Emits, StateId, Snapshot<Machine.States<ChildDefinition>>, Error<ChildDefinition>, Output<ChildDefinition>, InputEvents, ParentEvents>>;
3596
- } : never : never;
3597
- type ContextualInvokeDefinition<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, InputEvents extends ReadonlyArray<TaggedSchema>, ParentEvents extends ReadonlyArray<TaggedSchema>, Raw> = Raw extends ReadonlyArray<any> ? {
3598
- readonly [Index in keyof Raw]: ContextualInvokeConfig<States, Events, Emits, StateId, InputEvents, ParentEvents, Raw[Index]>;
3599
- } : ContextualInvokeConfig<States, Events, Emits, StateId, InputEvents, ParentEvents, Raw>;
3629
+ type RequiredInvokeChannel<Value, Channel extends string> = IsAny<Value> extends true ? Channel : [Value] extends [never] ? never : Channel;
3630
+ type InvokeBuilderResult<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, InputEvents extends ReadonlyArray<TaggedSchema>, ParentEvents extends ReadonlyArray<TaggedSchema>, Output, Error, Requirements, InitialError, ChildEmits, ChildParentEvent, Outcomes> = InvokeOwned<States, Events, Emits, StateId, InputEvents, ParentEvents> & InvokeTyped<Output, Error, Requirements, InitialError, ChildEmits, ChildParentEvent, Outcomes> & {
3631
+ readonly [InvokeBuilderTypeId]: true;
3632
+ };
3633
+ type InvokeBuilder<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, InputEvents extends ReadonlyArray<TaggedSchema>, ParentEvents extends ReadonlyArray<TaggedSchema>, Output, Error, Requirements, InitialError, ChildEmits, ChildParentEvent, Element, Pending extends string, SnapshotHandler, Outcomes = never> = ([Pending] extends [never] ? InvokeBuilderResult<States, Events, Emits, StateId, InputEvents, ParentEvents, Output, Error, Requirements, InitialError, ChildEmits, ChildParentEvent, Outcomes> : {}) & ("done" extends Pending ? {
3634
+ readonly onDone: <const Handler extends InvokeTransition<States, Events, Emits, StateId, InvokeDoneContext<States, Events, Emits, StateId, Output, InputEvents, ParentEvents>>>(handler: Handler & InvokeTransition<States, Events, Emits, StateId, InvokeDoneContext<States, Events, Emits, StateId, Output, InputEvents, ParentEvents>>) => InvokeBuilder<States, Events, Emits, StateId, InputEvents, ParentEvents, Output, Error, Requirements, InitialError, ChildEmits, ChildParentEvent, Element, Exclude<Pending, "done">, SnapshotHandler, Outcomes | Handler>;
3635
+ } : {}) & ("failure" extends Pending ? {
3636
+ readonly onFailure: <const Handler extends InvokeTransition<States, Events, Emits, StateId, InvokeFailureContext<States, Events, Emits, StateId, Error, InputEvents, ParentEvents>>>(handler: Handler & InvokeTransition<States, Events, Emits, StateId, InvokeFailureContext<States, Events, Emits, StateId, Error, InputEvents, ParentEvents>>) => InvokeBuilder<States, Events, Emits, StateId, InputEvents, ParentEvents, Output, Error, Requirements, InitialError, ChildEmits, ChildParentEvent, Element, Exclude<Pending, "failure">, SnapshotHandler, Outcomes | Handler>;
3637
+ } : {}) & ("element" extends Pending ? {
3638
+ readonly onElement: <const Handler extends InvokeTransition<States, Events, Emits, StateId, InvokeElementContext<States, Events, Emits, StateId, Element, InputEvents, ParentEvents>>>(handler: Handler & InvokeTransition<States, Events, Emits, StateId, InvokeElementContext<States, Events, Emits, StateId, Element, InputEvents, ParentEvents>>) => InvokeBuilder<States, Events, Emits, StateId, InputEvents, ParentEvents, Output, Error, Requirements, InitialError, ChildEmits, ChildParentEvent, Element, Exclude<Pending, "element">, SnapshotHandler, Outcomes | Handler>;
3639
+ } : {}) & ([SnapshotHandler] extends [never] ? {} : {
3640
+ readonly onSnapshot: <const Handler extends SnapshotHandler>(handler: Handler & SnapshotHandler) => InvokeBuilder<States, Events, Emits, StateId, InputEvents, ParentEvents, Output, Error, Requirements, InitialError, ChildEmits, ChildParentEvent, Element, Pending, never, Outcomes | Handler>;
3641
+ });
3642
+ 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>;
3643
+ 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>;
3644
+ 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>>>;
3645
+ 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>>>;
3646
+ /**
3647
+ * Selects state-owned work and begins its lifecycle-handler chain.
3648
+ *
3649
+ * Each source exposes exactly the lifecycle methods that it can produce. A
3650
+ * chain becomes returnable from `invoke` only after every reachable required
3651
+ * channel has been handled.
3652
+ *
3653
+ * @category models
3654
+ * @since 0.18.0
3655
+ */
3656
+ interface InvokeSelector<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 []> {
3657
+ /** Starts a fresh Effect each time the owning state is entered. */
3658
+ readonly effect: <const Source extends (context: InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>) => Effect.Effect<unknown, unknown, unknown>>(id: InvokeLifecycleId, source: Source) => EffectInvokeBuilder<States, Events, Emits, StateId, InputEvents, ParentEvents, Source>;
3659
+ /** Starts a fresh, backpressured Stream each time the owning state is entered. */
3660
+ readonly stream: <const Source extends (context: InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>) => Stream.Stream<unknown, unknown, any>>(id: InvokeLifecycleId, source: Source) => StreamInvokeBuilder<States, Events, Emits, StateId, InputEvents, ParentEvents, Source>;
3661
+ /** Starts a cancellable state-scoped timer. */
3662
+ readonly timer: (id: InvokeLifecycleId, duration: InvokeSource<Duration.Input, InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>>) => InvokeBuilder<States, Events, Emits, StateId, InputEvents, ParentEvents, void, never, never, never, never, never, never, "done", never>;
3663
+ /** Starts reusable process logic at a typed parent-local address. */
3664
+ readonly logic: {
3665
+ <const Source extends (context: InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>) => unknown, Address extends ChildAddress<never>>(id: InvokeLifecycleId, options: {
3666
+ readonly address: Address & ChildAddress.Compatibility<Address, LogicEventOf<ReturnType<NoInfer<Source>>>>;
3667
+ readonly logic: Source;
3668
+ }, ..._validation: ReturnType<Source> extends {
3669
+ readonly initial: unknown;
3670
+ readonly run: unknown;
3671
+ } ? [] : [
3672
+ "logic factory must return Machine.Logic"
3673
+ ]): LogicInvokeBuilder<States, Events, Emits, StateId, InputEvents, ParentEvents, ReturnType<Source>>;
3674
+ <const Source, Address extends ChildAddress<never>>(id: InvokeLifecycleId, options: {
3675
+ readonly address: Address & ChildAddress.Compatibility<Address, LogicEventOf<NoInfer<Source>>>;
3676
+ readonly logic: Source;
3677
+ }, ..._validation: Source extends {
3678
+ readonly initial: unknown;
3679
+ readonly run: unknown;
3680
+ } ? [] : [
3681
+ "logic must implement Machine.Logic"
3682
+ ]): LogicInvokeBuilder<States, Events, Emits, StateId, InputEvents, ParentEvents, Source>;
3683
+ };
3684
+ /** Starts a complete child statechart represented by a reusable descriptor. */
3685
+ readonly child: <const Child extends ChildMachine.Any>(child: Child & (Child["machine"] extends EnsureExecutable<Machine.States<Child["machine"]>, Machine.UnhandledStates<Child["machine"]>, Machine.OutputStates<Child["machine"]>> ? unknown : never), ...options: InputSchema<Child["machine"]> extends typeof Schema.Void ? [options?: {
3686
+ readonly input?: never;
3687
+ }] : [
3688
+ options: {
3689
+ readonly input: InvokeSource<Input<Child["machine"]>, InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>>;
3690
+ }
3691
+ ]) => ChildInvokeBuilder<States, Events, Emits, StateId, InputEvents, ParentEvents, Child>;
3692
+ }
3693
+ /**
3694
+ * Inline invocation declaration accepted by an active state handler.
3695
+ *
3696
+ * Return one completed source chain or an array of completed chains. Source
3697
+ * computations and child descriptors may be extracted, but the chain stays
3698
+ * local to preserve the owning state and machine protocols.
3699
+ *
3700
+ * @category models
3701
+ * @since 0.18.0
3702
+ */
3703
+ type InvokeBuilderInput<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 []> = (from: InvokeSelector<States, Events, Emits, StateId, InputEvents, ParentEvents>) => (InvokeOwned<States, Events, Emits, StateId, InputEvents, ParentEvents> & {
3704
+ readonly [InvokeBuilderTypeId]: true;
3705
+ }) | ReadonlyArray<InvokeOwned<States, Events, Emits, StateId, InputEvents, ParentEvents> & {
3706
+ readonly [InvokeBuilderTypeId]: true;
3707
+ }>;
3600
3708
  type OutputHandlerConfig<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, Context> = NodeByIdentifier<States, StateId> extends {
3601
3709
  readonly output: Schema.Top;
3602
3710
  } ? {
@@ -3618,11 +3726,11 @@ export declare namespace Machine {
3618
3726
  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 []> = {
3619
3727
  readonly entry?: (context: StateActionContext<States, Events, Emits, StateId, InputEvents, ParentEvents>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => StateActionResult<any, any>;
3620
3728
  readonly exit?: (context: StateActionContext<States, Events, Emits, StateId, InputEvents, ParentEvents>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => StateActionResult<any, any>;
3621
- readonly invoke?: InvokeDefinition<States, Events, Emits, StateId, InputEvents, ParentEvents> | TypedInvokeDefinition;
3622
- readonly always?: TransitionConfig<States, Events, Emits, StateId, AlwaysContext<States, Events, Emits, StateId, InputEvents, ParentEvents>>;
3623
- readonly onDone?: TransitionConfig<States, Events, Emits, StateId, DoneContext<States, Events, Emits, StateId, InputEvents, ParentEvents>>;
3729
+ readonly invoke?: InvokeBuilderInput<States, Events, Emits, StateId, InputEvents, ParentEvents>;
3730
+ readonly always?: TransitionConfig<States, Events, Emits, StateId, AlwaysContext<States, Events, Emits, StateId, InputEvents, ParentEvents>, false, TransitionAcceptance>;
3731
+ readonly onDone?: TransitionConfig<States, Events, Emits, StateId, DoneContext<States, Events, Emits, StateId, InputEvents, ParentEvents>, false, TransitionAcceptance>;
3624
3732
  readonly on?: {
3625
- readonly [EventTag in TagOf<Events[number]>]?: TransitionConfig<States, Events, Emits, StateId, HandlerContext<States, Events, Emits, StateId, EventTag, E, R, InputEvents, ParentEvents>, true>;
3733
+ readonly [EventTag in TagOf<Events[number]>]?: TransitionConfig<States, Events, Emits, StateId, HandlerContext<States, Events, Emits, StateId, EventTag, E, R, InputEvents, ParentEvents>, true, TransitionAcceptance>;
3626
3734
  };
3627
3735
  readonly initialize?: StateInitializeHandler<States, Events, Emits, StateId, InputEvents, ParentEvents>;
3628
3736
  } & ActiveOutputHandlerConfig<States, Events, StateId>;
@@ -3756,12 +3864,6 @@ export declare namespace Machine {
3756
3864
  readonly states: infer Children extends StateSchemas;
3757
3865
  } ? HandlerNodeByPath<Children, Rest> : never : never : Path extends keyof States ? States[Path] : never;
3758
3866
  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;
3759
- type HandlerInvokeContextAtPath<AllStates extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, InputEvents extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, ParentEvents extends ReadonlyArray<TaggedSchema>, Config, StateId extends StateNodeIdentifier<AllStates>, NodeConfig = HandlerConfigAtPath<Config, StateId>> = StateId extends StateIdentifier<AllStates> ? NodeConfig extends {
3760
- readonly invoke: infer Invoke;
3761
- } ? HandlerValidationAtPath<StateId, {
3762
- readonly invoke: ContextualInvokeDefinition<AllStates, Events, Emits, StateId, InputEvents, ParentEvents, Invoke>;
3763
- }> : unknown : unknown;
3764
- type HandlerInvokeContexts<AllStates extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, InputEvents extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, ParentEvents extends ReadonlyArray<TaggedSchema>, Config> = Types.UnionToIntersection<StateNodeIdentifier<AllStates> extends infer StateId extends StateNodeIdentifier<AllStates> ? StateId extends StateNodeIdentifier<AllStates> ? HandlerInvokeContextAtPath<AllStates, Events, InputEvents, Emits, ParentEvents, Config, StateId> : never : never>;
3765
3867
  type HandlerValidationAtPath<Path extends string, Validation> = Path extends `${infer Head}.${infer Rest}` ? {
3766
3868
  readonly [Key in Head]?: {
3767
3869
  readonly states: HandlerValidationAtPath<Rest, Validation>;
@@ -3909,7 +4011,7 @@ export declare namespace Machine {
3909
4011
  * @since 0.4.0
3910
4012
  */
3911
4013
  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>> {
3912
- <const Config extends HandlerTree<States, States, Events, Emits, E, R, InputEvents, ParentEvents, "">>(config: Config & HandlerInvokeContexts<States, Events, InputEvents, Emits, ParentEvents, NoInfer<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>;
4014
+ <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>;
3913
4015
  }
3914
4016
  /**
3915
4017
  * Any state config.
@@ -3924,7 +4026,7 @@ export declare namespace Machine {
3924
4026
  * @category models
3925
4027
  * @since 0.4.0
3926
4028
  */
3927
- type EventHandlerMap<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, TransitionConfig<States, Events, Emits, StateId, HandlerContext<States, Events, Emits, StateId, EventTag, E, R>, true>>>;
4029
+ type EventHandlerMap<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, TransitionConfig<States, Events, Emits, StateId, HandlerContext<States, Events, Emits, StateId, EventTag, E, R>, true, TransitionAcceptance>>>;
3928
4030
  /**
3929
4031
  * Runtime state config stored for a single state tag.
3930
4032
  *
@@ -3934,9 +4036,9 @@ export declare namespace Machine {
3934
4036
  interface StateConfig<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, EventTag extends TagOf<Events[number]>, E, R> {
3935
4037
  readonly entry?: (context: StateActionContext<States, Events, Emits, StateId>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => StateActionResult<E, R>;
3936
4038
  readonly exit?: (context: StateActionContext<States, Events, Emits, StateId>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => StateActionResult<E, R>;
3937
- readonly invoke?: InvokeDefinition<States, Events, Emits, StateId>;
3938
- readonly always?: TransitionConfig<States, Events, Emits, StateId, AlwaysContext<States, Events, Emits, StateId>>;
3939
- readonly onDone?: TransitionConfig<States, Events, Emits, StateId, DoneContext<States, Events, Emits, StateId>>;
4039
+ readonly invoke?: StoredInvokeDefinition<States, Events, Emits, StateId>;
4040
+ readonly always?: TransitionConfig<States, Events, Emits, StateId, AlwaysContext<States, Events, Emits, StateId>, false, TransitionAcceptance>;
4041
+ readonly onDone?: TransitionConfig<States, Events, Emits, StateId, DoneContext<States, Events, Emits, StateId>, false, TransitionAcceptance>;
3940
4042
  readonly output?: ((context: FinalOutputContext<States, Events, StateId>) => unknown) | ((context: ParallelOutputContext<States, Events, StateId>) => unknown);
3941
4043
  readonly on?: EventHandlerMap<States, Events, Emits, StateId, EventTag, E, R>;
3942
4044
  }
@@ -3948,13 +4050,37 @@ export declare namespace Machine {
3948
4050
  */
3949
4051
  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>>>>;
3950
4052
  }
4053
+ type StateSource = Machine.DefinedStates<any> | Machine.Any;
4054
+ type StateSchemasOf<Source extends StateSource> = Source extends Machine.DefinedStates<infer States> ? States : Source extends Machine.Any ? Machine.States<Source> : never;
3951
4055
  /**
3952
- * Extracts the complete logical snapshot represented by a state definition.
4056
+ * Extracts the complete logical snapshot represented by a state definition or
4057
+ * machine.
3953
4058
  *
3954
4059
  * @category utility types
3955
4060
  * @since 0.15.0
3956
4061
  */
3957
- export type Snapshot<Defined extends Machine.DefinedStates<any>> = Defined extends Machine.DefinedStates<infer States> ? Machine.Snapshot<States> : never;
4062
+ export type Snapshot<Source extends StateSource> = Machine.Snapshot<StateSchemasOf<Source>>;
4063
+ /**
4064
+ * Extracts the decoded value owned by a schema-backed state path.
4065
+ *
4066
+ * The source may be the object returned by {@link states} or a machine
4067
+ * definition. Control-only state paths are intentionally excluded.
4068
+ *
4069
+ * @category utility types
4070
+ * @since 0.18.0
4071
+ */
4072
+ export type Value<Source extends StateSource, Path extends Machine.ValuedStateIdentifier<StateSchemasOf<Source>>> = Machine.StateByIdentifier<StateSchemasOf<Source>, Path>;
4073
+ /**
4074
+ * Extracts the logical snapshot rooted at a state path.
4075
+ *
4076
+ * The source may be the object returned by {@link states} or a machine
4077
+ * definition. This is the type-level counterpart of
4078
+ * `DefinedStates.getSnapshot`.
4079
+ *
4080
+ * @category utility types
4081
+ * @since 0.18.0
4082
+ */
4083
+ export type SnapshotAt<Source extends StateSource, Path extends Machine.StateIdentifier<StateSchemasOf<Source>>> = Machine.SnapshotByIdentifier<StateSchemasOf<Source>, Path>;
3958
4084
  /**
3959
4085
  * Returns `true` if a value is a `Machine`.
3960
4086
  *
@@ -4035,10 +4161,7 @@ export declare const state: StateConstructor;
4035
4161
  * Machine.make({
4036
4162
  * states: States.states,
4037
4163
  * events: Machine.events(),
4038
- * initial: {
4039
- * target: (to) => to.idle(),
4040
- * resolve: ({ target }) => target.from()
4041
- * }
4164
+ * initial: (to) => to.idle().resolve(({ target }) => target.from())
4042
4165
  * })
4043
4166
  * ```
4044
4167
  *
@@ -4046,31 +4169,22 @@ export declare const state: StateConstructor;
4046
4169
  * @since 0.4.0
4047
4170
  */
4048
4171
  export declare const states: StatesConstructor;
4049
- type InitialDirectInput<States extends Machine.StateSchemas, Input, Selection extends Machine.TargetSelection<any, any, any>> = {
4050
- readonly target: (to: Machine.InitialSelector<States>) => Selection;
4051
- readonly resolve?: (context: {
4052
- readonly input: Input;
4053
- readonly target: Machine.SelectionBuilder<Selection>;
4054
- }) => Machine.SelectedTargetResult<Selection>;
4055
- readonly cases?: never;
4056
- readonly otherwise?: never;
4057
- };
4058
- 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>, ParentEvents extends ReadonlyArray<Machine.TaggedSchema>> = {
4172
+ 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> = {
4059
4173
  readonly id?: string;
4060
4174
  readonly states: States & DefineStateTreeInput<NoInfer<States>>;
4061
4175
  readonly events: Machine.EventProtocol<"public", InputEvents> & ValidateInputEventProtocol<NoInfer<InputEvents>>;
4062
4176
  readonly internalEvents?: Machine.EventProtocol<"internal", InternalEvents> & ValidateInternalEventProtocol<NoInfer<InputEvents>, NoInfer<InternalEvents>>;
4063
4177
  readonly emittedEvents?: Machine.EventProtocol<"emitted", Emits>;
4064
- readonly parentEvents?: Machine.EventProtocol<"public", ParentEvents>;
4178
+ readonly parent?: ParentDeclaration;
4065
4179
  readonly input?: Input;
4066
4180
  readonly initial: unknown;
4067
4181
  };
4068
- 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>, ParentEvents extends ReadonlyArray<Machine.TaggedSchema>> = Definition<States, readonly [...InputEvents, ...InternalEvents], Input, InitialE, InitialR, Machine.FinalStateFromDefinition<States>, Machine.TerminalOutput<States>, Emits, InputEvents, ParentEvents>;
4182
+ 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>>;
4069
4183
  interface Make {
4070
- <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 ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const InitialSelection extends Machine.TargetSelection<any, any, any> = Machine.TargetSelection<any, any, any>>(config: Omit<MakeConfig<States, InputEvents, Emits, Input, InitialE, InitialR, InternalEvents, ParentEvents>, "initial"> & {
4071
- readonly initial: InitialDirectInput<States, Input["Type"], InitialSelection>;
4072
- }, ..._validation: ValidateDefinedStates<NoInfer<States>>): MakeResult<States, InputEvents, Emits, Input, InitialE, InitialR, InternalEvents, ParentEvents>;
4073
- <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 ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(config: Omit<MakeConfig<States, InputEvents, Emits, Input, InitialE, InitialR, InternalEvents, ParentEvents>, "states"> & {
4184
+ <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"> & {
4185
+ readonly initial: Machine.InitialBuilderInput<States, Input["Type"]>;
4186
+ }, ..._validation: ValidateDefinedStates<NoInfer<States>>): MakeResult<States, InputEvents, Emits, Input, InitialE, InitialR, InternalEvents, ParentDeclaration>;
4187
+ <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"> & {
4074
4188
  readonly states: InvalidDefinedStateTreeInput<States>;
4075
4189
  }): never;
4076
4190
  }
@@ -4085,11 +4199,17 @@ interface Make {
4085
4199
  * `states` or is passed inline. Call `handle` on the returned definition
4086
4200
  * to implement state behavior with ordinary TypeScript control flow.
4087
4201
  *
4202
+ * `initial` is a target-first callback. Its outer selector runs once while the
4203
+ * definition is captured; an attached `.resolve(...)` callback remains lazy
4204
+ * until initial planning. Return a bare selected state when its schema supports
4205
+ * default construction.
4206
+ *
4088
4207
  * `Machine.events` defines the public input protocol. `Machine.internalEvents`
4089
4208
  * adds raised events and other machine-local deliveries.
4090
- * `Machine.emittedEvents` defines outward ephemeral notifications, while
4091
- * `parentEvents` declares the inputs a child may explicitly send to its owning
4092
- * machine. All descriptors expose deferred constructors while retaining their
4209
+ * `Machine.emittedEvents` defines outward ephemeral notifications. The
4210
+ * `parent` configuration accepts `Machine.parent(events)` for a required owner
4211
+ * or `Machine.optionalParent(events)` for a root-capable machine. All
4212
+ * descriptors expose deferred constructors while retaining their
4093
4213
  * schemas opaquely for runtime validation. Public and internal tags must be
4094
4214
  * disjoint.
4095
4215
  *
@@ -4113,18 +4233,13 @@ interface Make {
4113
4233
  * const counter = Machine.make({
4114
4234
  * states: States.states,
4115
4235
  * events: Events,
4116
- * initial: {
4117
- * target: (to) => to.Count(),
4118
- * resolve: ({ target }) => target(new Count({ value: 0 }))
4119
- * }
4236
+ * initial: (to) => to.Count().resolve(({ target }) => target(new Count({ value: 0 })))
4120
4237
  * }).handle({
4121
4238
  * Count: {
4122
4239
  * on: {
4123
- * Increment: Machine.transition({
4124
- * target: (to) => to.full.Count(),
4125
- * resolve: ({ event, state, target }) =>
4126
- * target(new Count({ value: state.value + event.by }))
4127
- * })
4240
+ * Increment: (to) =>
4241
+ * to.full.Count().resolve(({ event, state, target }) =>
4242
+ * target(new Count({ value: state.value + event.by })))
4128
4243
  * }
4129
4244
  * }
4130
4245
  * })
@@ -4171,6 +4286,27 @@ export declare const events: {
4171
4286
  <const Schemas extends ReadonlyArray<Machine.TaggedSchema>>(...schemas: Schemas & ValidateInputEventProtocol<NoInfer<Schemas>>): Machine.EventProtocol<"public", readonly [...Schemas]>;
4172
4287
  <const Inputs extends ReadonlyArray<Machine.EventProtocolInput<"public">>>(...inputs: Inputs & ValidateEventProtocolBuilder<"public", Inputs>): Machine.EventProtocol<"public", Machine.EventProtocolInputSchemasOf<"public", Inputs>>;
4173
4288
  };
4289
+ /**
4290
+ * Requires the machine to run as an owned child whose parent accepts the
4291
+ * supplied public event protocol.
4292
+ *
4293
+ * Required-parent machines expose a non-optional `parent` target in behavior
4294
+ * contexts and are rejected by root execution APIs.
4295
+ *
4296
+ * @category constructors
4297
+ * @since 0.17.0
4298
+ */
4299
+ export declare const parent: <const Events extends ReadonlyArray<Machine.TaggedSchema>>(events: Machine.EventProtocol<"public", Events>) => Parent<"required", Events>;
4300
+ /**
4301
+ * Declares public events a machine may send to its owner while preserving the
4302
+ * ability to run that machine as a root.
4303
+ *
4304
+ * Optional-parent machines expose `parent` as a possibly absent target.
4305
+ *
4306
+ * @category constructors
4307
+ * @since 0.17.0
4308
+ */
4309
+ export declare const optionalParent: <const Events extends ReadonlyArray<Machine.TaggedSchema>>(events: Machine.EventProtocol<"public", Events>) => Parent<"optional", Events>;
4174
4310
  /**
4175
4311
  * Defines an internal event protocol and returns deferred constructors for
4176
4312
  * every statically finite configured event tag.
@@ -4259,10 +4395,7 @@ export declare const emittedEvents: {
4259
4395
  * const machine = Machine.make({
4260
4396
  * states: States.states,
4261
4397
  * events: Machine.events(),
4262
- * initial: {
4263
- * target: (to) => to.Idle(),
4264
- * resolve: ({ target }) => target.from()
4265
- * }
4398
+ * initial: (to) => to.Idle().resolve(({ target }) => target.from())
4266
4399
  * }).handle({ Idle: {} })
4267
4400
  *
4268
4401
  * const encoded = Effect.gen(function*() {
@@ -4306,10 +4439,7 @@ export declare const encodeSnapshot: <const States extends Machine.StateSchemas,
4306
4439
  * const machine = Machine.make({
4307
4440
  * states: States.states,
4308
4441
  * events: Machine.events(),
4309
- * initial: {
4310
- * target: (to) => to.Idle(),
4311
- * resolve: ({ target }) => target.from()
4312
- * }
4442
+ * initial: (to) => to.Idle().resolve(({ target }) => target.from())
4313
4443
  * }).handle({ Idle: {} })
4314
4444
  *
4315
4445
  * const roundTrip = Effect.gen(function*() {
@@ -4324,311 +4454,12 @@ export declare const encodeSnapshot: <const States extends Machine.StateSchemas,
4324
4454
  * @since 0.4.0
4325
4455
  */
4326
4456
  export declare const decodeSnapshot: <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>, encoded: unknown) => Effect.Effect<Machine.Snapshot<States>, MachineSchemaDecodeError, Machine.SnapshotDecodingServices<States>>;
4327
- type EffectInvokeSource<States extends Machine.StateSchemas, Events extends ReadonlyArray<Machine.TaggedSchema>, Emits extends ReadonlyArray<Machine.TaggedSchema>, InputEvents extends ReadonlyArray<Machine.TaggedSchema>, ParentEvents extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, Source extends (context: Machine.InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>) => Effect.Effect<unknown, unknown, unknown>> = {
4328
- readonly id: InvokeLifecycleId;
4329
- readonly effect: Source;
4330
- readonly stream?: never;
4331
- readonly after?: never;
4332
- readonly logic?: never;
4333
- readonly child?: never;
4334
- readonly address?: never;
4335
- readonly onElement?: never;
4336
- readonly onSnapshot?: never;
4337
- };
4338
- type EffectDoneHandler<States extends Machine.StateSchemas, Events extends ReadonlyArray<Machine.TaggedSchema>, Emits extends ReadonlyArray<Machine.TaggedSchema>, InputEvents extends ReadonlyArray<Machine.TaggedSchema>, ParentEvents extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, Source extends (...args: ReadonlyArray<never>) => Effect.Effect<unknown, unknown, unknown>> = Machine.InvokeTransition<States, Events, Emits, StateId, Machine.InvokeDoneContext<States, Events, Emits, StateId, Effect.Success<ReturnType<NoInfer<Source>>>, InputEvents, ParentEvents>>;
4339
- type EffectFailureHandler<States extends Machine.StateSchemas, Events extends ReadonlyArray<Machine.TaggedSchema>, Emits extends ReadonlyArray<Machine.TaggedSchema>, InputEvents extends ReadonlyArray<Machine.TaggedSchema>, ParentEvents extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, Source extends (...args: ReadonlyArray<never>) => Effect.Effect<unknown, unknown, unknown>> = Machine.InvokeTransition<States, Events, Emits, StateId, Machine.InvokeFailureContext<States, Events, Emits, StateId, Effect.Error<ReturnType<NoInfer<Source>>>, InputEvents, ParentEvents>>;
4340
- type EffectInvokeResult<States extends Machine.StateSchemas, Events extends ReadonlyArray<Machine.TaggedSchema>, Emits extends ReadonlyArray<Machine.TaggedSchema>, InputEvents extends ReadonlyArray<Machine.TaggedSchema>, ParentEvents extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, Source extends (...args: ReadonlyArray<never>) => Effect.Effect<unknown, unknown, unknown>> = Machine.InvokeConfig<States, Events, Emits, StateId, InputEvents, ParentEvents> & Machine.InvokeTyped<Effect.Success<ReturnType<Source>>, Effect.Error<ReturnType<Source>>, Effect.Services<ReturnType<Source>>, never>;
4341
- type StreamInvokeSource<States extends Machine.StateSchemas, Events extends ReadonlyArray<Machine.TaggedSchema>, Emits extends ReadonlyArray<Machine.TaggedSchema>, InputEvents extends ReadonlyArray<Machine.TaggedSchema>, ParentEvents extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, Source extends (...args: ReadonlyArray<any>) => unknown> = {
4342
- readonly id: InvokeLifecycleId;
4343
- readonly stream: Source & ((context: Machine.InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>) => unknown);
4344
- readonly effect?: never;
4345
- readonly after?: never;
4346
- readonly logic?: never;
4347
- readonly child?: never;
4348
- readonly address?: never;
4349
- readonly onSnapshot?: never;
4350
- };
4351
- type StreamSourceResult<Source extends (...args: ReadonlyArray<any>) => unknown> = ReturnType<Source> extends infer Result extends Stream.Stream<any, any, any> ? Result : never;
4352
- type StreamElementHandler<States extends Machine.StateSchemas, Events extends ReadonlyArray<Machine.TaggedSchema>, Emits extends ReadonlyArray<Machine.TaggedSchema>, InputEvents extends ReadonlyArray<Machine.TaggedSchema>, ParentEvents extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, Source extends (...args: ReadonlyArray<any>) => unknown> = Machine.InvokeTransition<States, Events, Emits, StateId, Machine.InvokeElementContext<States, Events, Emits, StateId, Stream.Success<StreamSourceResult<NoInfer<Source>>>, InputEvents, ParentEvents>>;
4353
- type StreamDoneHandler<States extends Machine.StateSchemas, Events extends ReadonlyArray<Machine.TaggedSchema>, Emits extends ReadonlyArray<Machine.TaggedSchema>, InputEvents extends ReadonlyArray<Machine.TaggedSchema>, ParentEvents extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>> = Machine.InvokeTransition<States, Events, Emits, StateId, Machine.InvokeDoneContext<States, Events, Emits, StateId, void, InputEvents, ParentEvents>>;
4354
- type StreamFailureHandler<States extends Machine.StateSchemas, Events extends ReadonlyArray<Machine.TaggedSchema>, Emits extends ReadonlyArray<Machine.TaggedSchema>, InputEvents extends ReadonlyArray<Machine.TaggedSchema>, ParentEvents extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, Source extends (...args: ReadonlyArray<any>) => unknown> = Machine.InvokeTransition<States, Events, Emits, StateId, Machine.InvokeFailureContext<States, Events, Emits, StateId, Stream.Error<StreamSourceResult<NoInfer<Source>>>, InputEvents, ParentEvents>>;
4355
- type StreamInvokeResult<States extends Machine.StateSchemas, Events extends ReadonlyArray<Machine.TaggedSchema>, Emits extends ReadonlyArray<Machine.TaggedSchema>, InputEvents extends ReadonlyArray<Machine.TaggedSchema>, ParentEvents extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, Source extends (...args: ReadonlyArray<any>) => unknown> = Machine.InvokeConfig<States, Events, Emits, StateId, InputEvents, ParentEvents> & Machine.InvokeTyped<void, Stream.Error<StreamSourceResult<Source>>, Stream.Services<StreamSourceResult<Source>>, never>;
4356
- type InvokeChannelIsNever<Value> = IsAny<Value> extends true ? false : [Value] extends [never] ? true : false;
4357
- type BoundEffectInvokeSource<States extends Machine.StateSchemas, Events extends ReadonlyArray<Machine.TaggedSchema>, Emits extends ReadonlyArray<Machine.TaggedSchema>, InputEvents extends ReadonlyArray<Machine.TaggedSchema>, ParentEvents extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, Source extends (context: Machine.InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>) => Effect.Effect<unknown, unknown, unknown>> = {
4358
- readonly id: InvokeLifecycleId;
4359
- readonly effect: Source;
4360
- readonly stream?: never;
4361
- readonly after?: never;
4362
- readonly logic?: never;
4363
- readonly child?: never;
4364
- readonly address?: never;
4365
- readonly onElement?: never;
4366
- readonly onSnapshot?: never;
4367
- };
4368
- type BoundEffectDoneHandler<States extends Machine.StateSchemas, Events extends ReadonlyArray<Machine.TaggedSchema>, Emits extends ReadonlyArray<Machine.TaggedSchema>, InputEvents extends ReadonlyArray<Machine.TaggedSchema>, ParentEvents extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, Source extends (...args: ReadonlyArray<never>) => Effect.Effect<unknown, unknown, unknown>> = Machine.InvokeTransition<States, Events, Emits, StateId, Machine.InvokeDoneContext<States, Events, Emits, StateId, Effect.Success<ReturnType<NoInfer<Source>>>, InputEvents, ParentEvents>>;
4369
- type BoundEffectFailureHandler<States extends Machine.StateSchemas, Events extends ReadonlyArray<Machine.TaggedSchema>, Emits extends ReadonlyArray<Machine.TaggedSchema>, InputEvents extends ReadonlyArray<Machine.TaggedSchema>, ParentEvents extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, Source extends (...args: ReadonlyArray<never>) => Effect.Effect<unknown, unknown, unknown>> = Machine.InvokeTransition<States, Events, Emits, StateId, Machine.InvokeFailureContext<States, Events, Emits, StateId, Effect.Error<ReturnType<NoInfer<Source>>>, InputEvents, ParentEvents>>;
4370
- type BoundEffectInvokeResult<States extends Machine.StateSchemas, Events extends ReadonlyArray<Machine.TaggedSchema>, Emits extends ReadonlyArray<Machine.TaggedSchema>, InputEvents extends ReadonlyArray<Machine.TaggedSchema>, ParentEvents extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, Source extends (...args: ReadonlyArray<never>) => Effect.Effect<unknown, unknown, unknown>> = Machine.InvokeConfig<States, Events, Emits, StateId, InputEvents, ParentEvents> & Machine.InvokeTyped<Effect.Success<ReturnType<Source>>, Effect.Error<ReturnType<Source>>, Effect.Services<ReturnType<Source>>, never>;
4371
- /** Captures one exact named-branch topology while preserving handler inference. */
4372
- type BranchingTransitionResult<States extends Machine.StateSchemas, Events extends ReadonlyArray<Machine.TaggedSchema>, Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateNodeIdentifier<States>, Context, Reenter extends boolean, Branches extends Readonly<Record<string, Machine.TransitionBranchInput>>> = Machine.TransitionBranchesInput<States, Events, Emits, StateId, Context, Reenter, Branches> & Machine.TransitionTyped<States, Events, Emits, StateId, Context, Reenter>;
4373
4457
  type TransitionBranchRecordError<Message extends string, Key extends PropertyKey = never> = {
4374
4458
  readonly "~effect/Machine/TransitionBranchRecordError": Message;
4375
4459
  readonly key: Key;
4376
4460
  };
4377
4461
  type InvalidStaticTransitionBranchKey<Branches> = Extract<keyof Branches, "" | number | symbol>;
4378
4462
  type ValidateTransitionBranchRecord<Branches> = [keyof Branches] extends [never] ? TransitionBranchRecordError<"Branch records must contain at least one branch"> : [InvalidStaticTransitionBranchKey<Branches>] extends [never] ? unknown : TransitionBranchRecordError<"Branch keys must be non-empty, non-index strings", InvalidStaticTransitionBranchKey<Branches>>;
4379
- /**
4380
- * Contextually types direct and branching transition definitions.
4381
- *
4382
- * @category constructors
4383
- * @since 0.14.0
4384
- */
4385
- export interface TransitionConstructor {
4386
- <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateNodeIdentifier<States>, Context, const Selection extends Machine.TargetSelection<any, any, any>, Reenter extends boolean = never>(config: Machine.TransitionDirectInput<States, Events, Emits, StateId, Context, Reenter, Selection>): Machine.TransitionDirectInput<States, Events, Emits, StateId, Context, Reenter, Selection> & (Machine.SelectionKind<Selection> extends "none" ? Machine.TargetlessTransitionTyped : Machine.TransitionTyped<States, Events, Emits, StateId, Context, Reenter>);
4387
- <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateNodeIdentifier<States>, Context, const Branches extends Readonly<Record<string, Machine.TransitionBranchInput>>, Reenter extends boolean = never>(config: Machine.TransitionBranchesInput<States, Events, Emits, StateId, Context, Reenter, Branches> & ValidateTransitionBranchRecord<NoInfer<Branches>>): BranchingTransitionResult<States, Events, Emits, StateId, Context, Reenter, Branches>;
4388
- }
4389
- /**
4390
- * Defines a statically inspectable transition.
4391
- *
4392
- * It is required for every event, lifecycle, choice, and invocation transition
4393
- * so the destination selected by `target` can contextually type the
4394
- * corresponding resolver. Branching transitions declare every possible
4395
- * destination up front, then select one through ordinary TypeScript control
4396
- * flow in `resolve`.
4397
- *
4398
- * ```ts
4399
- * Machine.transition({
4400
- * target: (to) => to.full.Ready(),
4401
- * resolve: ({ target }) => target.from()
4402
- * })
4403
- *
4404
- * Machine.transition({
4405
- * branches: (to) => ({
4406
- * cached: { target: to.full.Ready() },
4407
- * loading: { target: to.full.Loading() }
4408
- * }),
4409
- * resolve: ({ event, select }) => event.cached
4410
- * ? select.cached.from({ data: event.cached })
4411
- * : select.loading.from()
4412
- * })
4413
- * ```
4414
- *
4415
- * @category constructors
4416
- * @since 0.14.0
4417
- */
4418
- export declare const transition: TransitionConstructor;
4419
- /**
4420
- * Sentinel used by direct targetless transition shorthands.
4421
- *
4422
- * This is the concise form of `target: (to) => to.none()`.
4423
- *
4424
- * ```ts
4425
- * onElement: {
4426
- * target: Machine.targetless,
4427
- * resolve: ({ element }, enqueue) => {
4428
- * enqueue.raise(new MeasurementReceived({ value: element }))
4429
- * }
4430
- * }
4431
- *
4432
- * onDone: { target: Machine.targetless }
4433
- * ```
4434
- *
4435
- * @category constructors
4436
- * @since 0.16.0
4437
- */
4438
- export interface TargetlessSelector {
4439
- readonly "~effect/Machine/TargetlessSelector": true;
4440
- <const States extends Machine.StateSchemas, StateId extends Machine.StateNodeIdentifier<States>>(to: Machine.TargetSelector<States, StateId>): ReturnType<Machine.TargetSelector<States, StateId>["none"]>;
4441
- }
4442
- /**
4443
- * Selects no transition target while keeping enqueue operations explicit.
4444
- *
4445
- * Use as the `target` of a direct handler object when the handler should keep
4446
- * the current state configuration and only raise, emit, or send events.
4447
- *
4448
- * @category constructors
4449
- * @since 0.16.0
4450
- */
4451
- export declare const targetless: TargetlessSelector;
4452
- /**
4453
- * Machine-bound invocation constructor that preserves the owning machine's
4454
- * public input and parent protocols in every invocation callback.
4455
- *
4456
- * @category constructors
4457
- * @since 0.11.0
4458
- */
4459
- export interface Invoker<States extends Machine.StateSchemas, Events extends ReadonlyArray<Machine.TaggedSchema>, Emits extends ReadonlyArray<Machine.TaggedSchema>, InputEvents extends ReadonlyArray<Machine.TaggedSchema>, ParentEvents extends ReadonlyArray<Machine.TaggedSchema>> {
4460
- <StateId extends Machine.StateIdentifier<States>, const Source extends (context: Machine.InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>) => Effect.Effect<unknown, unknown, unknown>>(config: BoundEffectInvokeSource<States, Events, Emits, InputEvents, ParentEvents, StateId, Source> & {
4461
- readonly onDone: BoundEffectDoneHandler<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
4462
- readonly onFailure: BoundEffectFailureHandler<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
4463
- }, ..._validation: InvokeChannelIsNever<Effect.Success<ReturnType<Source>>> extends true ? [
4464
- "onDone must be omitted when the Effect output is never"
4465
- ] : InvokeChannelIsNever<Effect.Error<ReturnType<Source>>> extends true ? [
4466
- "onFailure must be omitted when the Effect error is never"
4467
- ] : []): BoundEffectInvokeResult<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
4468
- <StateId extends Machine.StateIdentifier<States>, const Source extends (context: Machine.InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>) => Effect.Effect<unknown, never, unknown>>(config: BoundEffectInvokeSource<States, Events, Emits, InputEvents, ParentEvents, StateId, Source> & {
4469
- readonly onDone: BoundEffectDoneHandler<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
4470
- readonly onFailure?: never;
4471
- }, ..._validation: InvokeChannelIsNever<Effect.Success<ReturnType<Source>>> extends true ? [
4472
- "onDone must be omitted when the Effect output is never"
4473
- ] : []): BoundEffectInvokeResult<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
4474
- <StateId extends Machine.StateIdentifier<States>, const Source extends (context: Machine.InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>) => Effect.Effect<never, unknown, unknown>>(config: BoundEffectInvokeSource<States, Events, Emits, InputEvents, ParentEvents, StateId, Source> & {
4475
- readonly onDone?: never;
4476
- readonly onFailure: BoundEffectFailureHandler<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
4477
- }, ..._validation: InvokeChannelIsNever<Effect.Error<ReturnType<Source>>> extends true ? [
4478
- "onFailure must be omitted when the Effect error is never"
4479
- ] : []): BoundEffectInvokeResult<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
4480
- <StateId extends Machine.StateIdentifier<States>, const Source extends (context: Machine.InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>) => Effect.Effect<never, never, unknown>>(config: BoundEffectInvokeSource<States, Events, Emits, InputEvents, ParentEvents, StateId, Source> & {
4481
- readonly onDone?: never;
4482
- readonly onFailure?: never;
4483
- }): BoundEffectInvokeResult<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
4484
- <StateId extends Machine.StateIdentifier<States>, const Source extends (context: Machine.InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>) => Stream.Stream<unknown, unknown, any>>(config: StreamInvokeSource<States, Events, Emits, InputEvents, ParentEvents, StateId, Source> & {
4485
- readonly onElement: StreamElementHandler<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
4486
- readonly onDone: StreamDoneHandler<States, Events, Emits, InputEvents, ParentEvents, StateId>;
4487
- readonly onFailure: StreamFailureHandler<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
4488
- }, ..._validation: InvokeChannelIsNever<Stream.Success<ReturnType<Source>>> extends true ? [
4489
- "onElement must be omitted when the Stream element is never"
4490
- ] : InvokeChannelIsNever<Stream.Error<ReturnType<Source>>> extends true ? [
4491
- "onFailure must be omitted when the Stream error is never"
4492
- ] : []): StreamInvokeResult<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
4493
- <StateId extends Machine.StateIdentifier<States>, const Source extends (context: Machine.InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>) => Stream.Stream<never, unknown, any>>(config: StreamInvokeSource<States, Events, Emits, InputEvents, ParentEvents, StateId, Source> & {
4494
- readonly onElement?: never;
4495
- readonly onDone: StreamDoneHandler<States, Events, Emits, InputEvents, ParentEvents, StateId>;
4496
- readonly onFailure: StreamFailureHandler<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
4497
- }, ..._validation: InvokeChannelIsNever<Stream.Error<ReturnType<Source>>> extends true ? [
4498
- "onFailure must be omitted when the Stream error is never"
4499
- ] : []): StreamInvokeResult<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
4500
- <StateId extends Machine.StateIdentifier<States>, const Source extends (context: Machine.InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>) => Stream.Stream<never, never, any>>(config: StreamInvokeSource<States, Events, Emits, InputEvents, ParentEvents, StateId, Source> & {
4501
- readonly onElement?: never;
4502
- readonly onDone: StreamDoneHandler<States, Events, Emits, InputEvents, ParentEvents, StateId>;
4503
- readonly onFailure?: never;
4504
- }): StreamInvokeResult<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
4505
- <StateId extends Machine.StateIdentifier<States>, const Source extends (context: Machine.InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>) => Stream.Stream<unknown, never, any>>(config: StreamInvokeSource<States, Events, Emits, InputEvents, ParentEvents, StateId, Source> & {
4506
- readonly onElement: StreamElementHandler<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
4507
- readonly onDone: StreamDoneHandler<States, Events, Emits, InputEvents, ParentEvents, StateId>;
4508
- readonly onFailure?: never;
4509
- }): StreamInvokeResult<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
4510
- <StateId extends Machine.StateIdentifier<States>, const Config extends object>(config: Config & Machine.TimerInvokeArgs<States, Events, Emits, StateId, InputEvents, ParentEvents>): Config & Machine.InvokeOwned<States, Events, Emits, StateId> & Machine.InvokeTyped<void, never, never, never>;
4511
- <StateId extends Machine.StateIdentifier<States>, const Source extends (context: Machine.InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>) => unknown, Address extends ChildAddress<never>>(config: {
4512
- readonly logic: Source;
4513
- } & Machine.LogicInvokeArgs<States, Events, Emits, StateId, Machine.LogicStateOf<ReturnType<Source>>, Machine.LogicEventOf<ReturnType<Source>>, Machine.LogicErrorOf<ReturnType<Source>>, Machine.LogicServicesOf<ReturnType<Source>>, Machine.LogicOutputOf<ReturnType<Source>>, Machine.LogicInitialErrorOf<ReturnType<Source>>, Address, Source, InputEvents, ParentEvents>, ..._validation: ReturnType<Source> extends {
4514
- readonly initial: unknown;
4515
- readonly run: unknown;
4516
- } ? [] : [
4517
- "logic factory must return Machine.Logic"
4518
- ]): Machine.InvokeConfig<States, Events, Emits, StateId, InputEvents, ParentEvents> & Machine.InvokeTyped<Machine.LogicOutputOf<ReturnType<Source>>, Machine.LogicErrorOf<ReturnType<Source>>, Machine.LogicServicesOf<ReturnType<Source>>, Machine.LogicInitialErrorOf<ReturnType<Source>>>;
4519
- <StateId extends Machine.StateIdentifier<States>, const Source, Address extends ChildAddress<never>>(config: {
4520
- readonly logic: Source;
4521
- } & Machine.LogicInvokeArgs<States, Events, Emits, StateId, Machine.LogicStateOf<Source>, Machine.LogicEventOf<Source>, Machine.LogicErrorOf<Source>, Machine.LogicServicesOf<Source>, Machine.LogicOutputOf<Source>, Machine.LogicInitialErrorOf<Source>, Address, Source, InputEvents, ParentEvents>, ..._validation: Source extends {
4522
- readonly initial: unknown;
4523
- readonly run: unknown;
4524
- } ? [] : [
4525
- "logic must implement Machine.Logic"
4526
- ]): Machine.InvokeConfig<States, Events, Emits, StateId, InputEvents, ParentEvents> & Machine.InvokeTyped<Machine.LogicOutputOf<Source>, Machine.LogicErrorOf<Source>, Machine.LogicServicesOf<Source>, Machine.LogicInitialErrorOf<Source>>;
4527
- <StateId extends Machine.StateIdentifier<States>, const Child extends ChildMachine.Any, const Config extends object>(config: Config & Machine.ChildInvokeArgs<States, Events, Emits, StateId, Child["machine"], Child, InputEvents, ParentEvents>): Config & Machine.InvokeOwned<States, Events, Emits, StateId> & Machine.InvokeTyped<Machine.Output<Child["machine"]>, Machine.Error<Child["machine"]> | ActionError<Machine.Services<Child["machine"]>>, Machine.Services<Child["machine"]>, Machine.InitialError<Child["machine"]>, Machine.Emit<Child["machine"]>, Machine.EventOf<Machine.ParentEvents<Child["machine"]>>>;
4528
- }
4529
- /**
4530
- * Preserves inference for a state-owned invocation configuration.
4531
- *
4532
- * Use `effect` for one-shot work, `stream` for repeated values, `after` for a
4533
- * cancellable timer, `logic` for reusable process logic, or `child` for a
4534
- * complete child machine. Stream elements are handled by `onElement` before
4535
- * the next element is pulled. `onDone` is required whenever the source can
4536
- * complete, while `onFailure` is required only when the source has a typed
4537
- * failure channel.
4538
- *
4539
- * This constructor is an identity at runtime, but preserves lifecycle callback
4540
- * inference through published declarations. Effect and Stream factories run
4541
- * when their owning state is entered and infer the owner context, value,
4542
- * output, error, and service channels together without a return annotation.
4543
- * Durations may be
4544
- * supplied directly or derived from the owning state's entry context. Logic
4545
- * invocations require both a lifecycle `id` and a typed communication
4546
- * `address`. Child descriptors already own their identity, so `id` and
4547
- * `address` must not be repeated.
4548
- *
4549
- * Inside `handle(...)`, the owning definition contextually supplies its public
4550
- * input and `parentEvents` protocols. Invocation sources and lifecycle handlers
4551
- * can therefore send through `self` and `parent` without naming the definition.
4552
- * The bound `definition.invoke(...)` constructor remains an equivalent form.
4553
- *
4554
- * ```ts
4555
- * invoke: Machine.invoke({
4556
- * id: "load",
4557
- * effect: () =>
4558
- * Effect.tryPromise({
4559
- * try: () => fetch("/api/data").then((response) => response.json()),
4560
- * catch: (cause) => new LoadError({ cause })
4561
- * }),
4562
- * onDone: Machine.transition({
4563
- * target: (to) => to.full.Ready(),
4564
- * resolve: ({ output, target }) => target.from({ data: output })
4565
- * }),
4566
- * onFailure: Machine.transition({
4567
- * target: (to) => to.full.Failed(),
4568
- * resolve: ({ error, target }) => target.from({ error })
4569
- * })
4570
- * })
4571
- * ```
4572
- *
4573
- * @category constructors
4574
- * @since 0.9.0
4575
- */
4576
- export declare const invoke: {
4577
- <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, const Source extends (context: Machine.InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>) => Effect.Effect<unknown, unknown, unknown>, const InputEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(config: EffectInvokeSource<States, Events, Emits, InputEvents, ParentEvents, StateId, Source> & {
4578
- readonly onDone: EffectDoneHandler<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
4579
- readonly onFailure: EffectFailureHandler<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
4580
- }, ..._validation: InvokeChannelIsNever<Effect.Success<ReturnType<Source>>> extends true ? [
4581
- "onDone must be omitted when the Effect output is never"
4582
- ] : InvokeChannelIsNever<Effect.Error<ReturnType<Source>>> extends true ? [
4583
- "onFailure must be omitted when the Effect error is never"
4584
- ] : []): EffectInvokeResult<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
4585
- <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, const Source extends (context: Machine.InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>) => Effect.Effect<unknown, never, unknown>, const InputEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(config: EffectInvokeSource<States, Events, Emits, InputEvents, ParentEvents, StateId, Source> & {
4586
- readonly onDone: EffectDoneHandler<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
4587
- readonly onFailure?: never;
4588
- }, ..._validation: InvokeChannelIsNever<Effect.Success<ReturnType<Source>>> extends true ? [
4589
- "onDone must be omitted when the Effect output is never"
4590
- ] : []): EffectInvokeResult<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
4591
- <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, const Source extends (context: Machine.InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>) => Effect.Effect<never, unknown, unknown>, const InputEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(config: EffectInvokeSource<States, Events, Emits, InputEvents, ParentEvents, StateId, Source> & {
4592
- readonly onDone?: never;
4593
- readonly onFailure: EffectFailureHandler<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
4594
- }, ..._validation: InvokeChannelIsNever<Effect.Error<ReturnType<Source>>> extends true ? [
4595
- "onFailure must be omitted when the Effect error is never"
4596
- ] : []): EffectInvokeResult<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
4597
- <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, const Source extends (context: Machine.InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>) => Effect.Effect<never, never, unknown>, const InputEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(config: EffectInvokeSource<States, Events, Emits, InputEvents, ParentEvents, StateId, Source> & {
4598
- readonly onDone?: never;
4599
- readonly onFailure?: never;
4600
- }): EffectInvokeResult<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
4601
- <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, const Source extends (context: Machine.InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>) => Stream.Stream<unknown, unknown, any>, const InputEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(config: StreamInvokeSource<States, Events, Emits, InputEvents, ParentEvents, StateId, Source> & {
4602
- readonly onElement: StreamElementHandler<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
4603
- readonly onDone: StreamDoneHandler<States, Events, Emits, InputEvents, ParentEvents, StateId>;
4604
- readonly onFailure: StreamFailureHandler<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
4605
- }, ..._validation: InvokeChannelIsNever<Stream.Success<ReturnType<Source>>> extends true ? [
4606
- "onElement must be omitted when the Stream element is never"
4607
- ] : InvokeChannelIsNever<Stream.Error<ReturnType<Source>>> extends true ? [
4608
- "onFailure must be omitted when the Stream error is never"
4609
- ] : []): StreamInvokeResult<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
4610
- <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, const Source extends (context: Machine.InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>) => Stream.Stream<never, unknown, any>, const InputEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(config: StreamInvokeSource<States, Events, Emits, InputEvents, ParentEvents, StateId, Source> & {
4611
- readonly onElement?: never;
4612
- readonly onDone: StreamDoneHandler<States, Events, Emits, InputEvents, ParentEvents, StateId>;
4613
- readonly onFailure: StreamFailureHandler<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
4614
- }, ..._validation: InvokeChannelIsNever<Stream.Error<ReturnType<Source>>> extends true ? [
4615
- "onFailure must be omitted when the Stream error is never"
4616
- ] : []): StreamInvokeResult<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
4617
- <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, const Source extends (context: Machine.InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>) => Stream.Stream<never, never, any>, const InputEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(config: StreamInvokeSource<States, Events, Emits, InputEvents, ParentEvents, StateId, Source> & {
4618
- readonly onElement?: never;
4619
- readonly onDone: StreamDoneHandler<States, Events, Emits, InputEvents, ParentEvents, StateId>;
4620
- readonly onFailure?: never;
4621
- }): StreamInvokeResult<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
4622
- <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, const Source extends (context: Machine.InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>) => Stream.Stream<unknown, never, any>, const InputEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(config: StreamInvokeSource<States, Events, Emits, InputEvents, ParentEvents, StateId, Source> & {
4623
- readonly onElement: StreamElementHandler<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
4624
- readonly onDone: StreamDoneHandler<States, Events, Emits, InputEvents, ParentEvents, StateId>;
4625
- readonly onFailure?: never;
4626
- }): StreamInvokeResult<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
4627
- <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, const Config extends object, const InputEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(config: Config & Machine.TimerInvokeArgs<States, Events, Emits, StateId, InputEvents, ParentEvents>): Config & Machine.InvokeOwned<States, Events, Emits, StateId> & Machine.InvokeTyped<void, never, never, never>;
4628
- <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, ChildState, ChildEvent, ChildError, ChildRequirements, ChildOutput, ChildInitialError, Address extends ChildAddress<never>, const InputEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(config: Machine.LogicInvokeArgs<States, Events, Emits, StateId, ChildState, ChildEvent, ChildError, ChildRequirements, ChildOutput, ChildInitialError, Address, (context: Machine.InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>) => Logic<ChildState, ChildEvent, ChildError, ChildRequirements, ChildOutput, ChildInitialError>, InputEvents, ParentEvents>): Machine.InvokeConfig<States, Events, Emits, StateId, InputEvents, ParentEvents> & Machine.InvokeTyped<ChildOutput, ChildError, ChildRequirements, ChildInitialError>;
4629
- <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, ChildState, ChildEvent, ChildError, ChildRequirements, ChildOutput, ChildInitialError, Address extends ChildAddress<never>, const Config extends object, const InputEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(config: Config & Machine.LogicInvokeArgs<States, Events, Emits, StateId, ChildState, ChildEvent, ChildError, ChildRequirements, ChildOutput, ChildInitialError, Address, Logic<ChildState, ChildEvent, ChildError, ChildRequirements, ChildOutput, ChildInitialError>, InputEvents, ParentEvents>): Config & Machine.InvokeOwned<States, Events, Emits, StateId> & Machine.InvokeTyped<ChildOutput, ChildError, ChildRequirements, ChildInitialError>;
4630
- <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, const Child extends ChildMachine.Any, const Config extends object, const InputEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(config: Config & Machine.ChildInvokeArgs<States, Events, Emits, StateId, Child["machine"], Child, InputEvents, ParentEvents>): Config & Machine.InvokeOwned<States, Events, Emits, StateId> & Machine.InvokeTyped<Machine.Output<Child["machine"]>, Machine.Error<Child["machine"]> | ActionError<Machine.Services<Child["machine"]>>, Machine.Services<Child["machine"]>, Machine.InitialError<Child["machine"]>, Machine.Emit<Child["machine"]>, Machine.EventOf<Machine.ParentEvents<Child["machine"]>>>;
4631
- };
4632
4463
  /**
4633
4464
  * Plans the initial state for a machine without executing machine commands.
4634
4465
  *
@@ -4658,10 +4489,7 @@ export declare const invoke: {
4658
4489
  * const machine = Machine.make({
4659
4490
  * states: States.states,
4660
4491
  * events: Machine.events(),
4661
- * initial: {
4662
- * target: (to) => to.Idle(),
4663
- * resolve: ({ target }) => target.from()
4664
- * }
4492
+ * initial: (to) => to.Idle().resolve(({ target }) => target.from())
4665
4493
  * }).handle({ Idle: {} })
4666
4494
  *
4667
4495
  * const initialState = Effect.map(Machine.planInitial(machine), (plan) => plan.state)
@@ -4672,7 +4500,7 @@ export declare const invoke: {
4672
4500
  * @category constructors
4673
4501
  * @since 0.4.0
4674
4502
  */
4675
- export declare const planInitial: <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>, ...args: [...Machine.InputArgs<Input>]) => Effect.Effect<{
4503
+ export declare const planInitial: <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<{
4676
4504
  readonly startingState: Machine.Snapshot<States>;
4677
4505
  readonly initialEntryPaths: ReadonlyArray<Machine.StateIdentifier<States>>;
4678
4506
  readonly state: Machine.Snapshot<States>;
@@ -4730,7 +4558,8 @@ export declare const initialDefinition: <M extends Machine.Any>(machine: M) => M
4730
4558
  * Event handlers retain their handler-key order within each source state and
4731
4559
  * are followed by eventless and completion handlers. This function does not
4732
4560
  * execute resolvers. Every direct, named, and targetless branch exposes the
4733
- * destination selected by its required static `target` declaration.
4561
+ * destination selected by its required static `target` declaration, while
4562
+ * `acceptance` reports whether the resolver may decline the transition.
4734
4563
  *
4735
4564
  * @category getters
4736
4565
  * @since 0.4.0
@@ -4763,7 +4592,12 @@ export declare const activityDefinitions: <M extends Machine.Any>(machine: M) =>
4763
4592
  */
4764
4593
  export declare const configuration: <M extends Machine.Any>(machine: M, state: Machine.Snapshot<Machine.States<M>>) => ReadonlyArray<Machine.ActiveStateNode<Machine.StateIdentifier<Machine.States<M>>, Machine.ChoiceIdentifier<Machine.States<M>>>>;
4765
4594
  /**
4766
- * Returns the event tags handled by the current state snapshot.
4595
+ * Returns event tags with at least one structurally eligible handler in the
4596
+ * current state snapshot.
4597
+ *
4598
+ * A `declinable` handler may still reject a concrete event at planning time,
4599
+ * so this is a static candidate query rather than a guarantee that every value
4600
+ * with the returned tag will be handled.
4767
4601
  *
4768
4602
  * @category getters
4769
4603
  * @since 0.4.0
@@ -4799,17 +4633,12 @@ export declare const enabled: <const States extends Machine.StateSchemas, const
4799
4633
  * const machine = Machine.make({
4800
4634
  * states: States.states,
4801
4635
  * events: Machine.events(Toggle),
4802
- * initial: {
4803
- * target: (to) => to.Off(),
4804
- * resolve: ({ target }) => target.from()
4805
- * }
4636
+ * initial: (to) => to.Off().resolve(({ target }) => target.from())
4806
4637
  * }).handle({
4807
4638
  * Off: {
4808
4639
  * on: {
4809
- * Toggle: Machine.transition({
4810
- * target: (to) => to.full.On(),
4811
- * resolve: ({ target }) => target.from()
4812
- * })
4640
+ * Toggle: (to) =>
4641
+ * to.full.On().resolve(({ target }) => target.from())
4813
4642
  * }
4814
4643
  * },
4815
4644
  * On: {}
@@ -4826,7 +4655,7 @@ export declare const enabled: <const States extends Machine.StateSchemas, const
4826
4655
  * @category combinators
4827
4656
  * @since 0.4.0
4828
4657
  */
4829
- 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>, state: Machine.Snapshot<States>, event: Machine.EventInputOf<InputEvents>) => Effect.Effect<{
4658
+ 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<{
4830
4659
  readonly next: Machine.Snapshot<States>;
4831
4660
  readonly commands: ReadonlyArray<Command>;
4832
4661
  readonly emittedEvents: ReadonlyArray<Machine.EmitOf<Emits>>;
@@ -4894,7 +4723,7 @@ export declare const child: <const Id extends string, M extends Machine.Any>(id:
4894
4723
  * Creates a typed parent-local address for lower-level child process logic.
4895
4724
  *
4896
4725
  * The default event protocol is `never`; provide an event type before using
4897
- * the address with `spawn`, `invoke`, or `sendTo`.
4726
+ * the address with `spawn`, a state-owned logic invocation, or `sendTo`.
4898
4727
  *
4899
4728
  * @category constructors
4900
4729
  * @since 0.4.0
@@ -4914,7 +4743,8 @@ export declare const childAddress: <Event = never>(id: string) => ChildAddress<E
4914
4743
  * This Effect requires a managed process runtime. A named child id must be
4915
4744
  * unique for the current parent until that child stops.
4916
4745
  *
4917
- * @see {@link invoke} for children that start and stop with a state.
4746
+ * Use a state's `invoke: (from) => from.logic(...)` declaration for children
4747
+ * that start and stop with that state.
4918
4748
  * @see {@link sendTo} for sending events to named children.
4919
4749
  * @category runtime
4920
4750
  * @since 0.4.0
@@ -4972,7 +4802,7 @@ export declare const watch: <State, Event, Error = never, Output = never>(ref: M
4972
4802
  * @category constructors
4973
4803
  * @since 0.11.0
4974
4804
  */
4975
- 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>, ...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>>>>;
4805
+ 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>>>>;
4976
4806
  /**
4977
4807
  * Starts a machine.
4978
4808
  *
@@ -5006,10 +4836,7 @@ export declare const prepare: <const States extends Machine.StateSchemas, const
5006
4836
  * const machine = Machine.make({
5007
4837
  * states: States.states,
5008
4838
  * events: Machine.events(),
5009
- * initial: {
5010
- * target: (to) => to.Idle(),
5011
- * resolve: ({ target }) => target.from()
5012
- * }
4839
+ * initial: (to) => to.Idle().resolve(({ target }) => target.from())
5013
4840
  * }).handle({ Idle: {} })
5014
4841
  *
5015
4842
  * const state = Effect.gen(function*() {
@@ -5023,7 +4850,7 @@ export declare const prepare: <const States extends Machine.StateSchemas, const
5023
4850
  * @category constructors
5024
4851
  * @since 0.4.0
5025
4852
  */
5026
- 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>, ...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>>>;
4853
+ 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>>>;
5027
4854
  /**
5028
4855
  * Starts a fresh managed runtime from a decoded logical snapshot.
5029
4856
  *
@@ -5059,10 +4886,7 @@ export declare const start: <const States extends Machine.StateSchemas, const Ev
5059
4886
  * const machine = Machine.make({
5060
4887
  * states: States.states,
5061
4888
  * events: Machine.events(),
5062
- * initial: {
5063
- * target: (to) => to.Idle(),
5064
- * resolve: ({ target }) => target.from()
5065
- * }
4889
+ * initial: (to) => to.Idle().resolve(({ target }) => target.from())
5066
4890
  * }).handle({ Idle: {} })
5067
4891
  *
5068
4892
  * const resumed = Effect.gen(function*() {
@@ -5078,5 +4902,5 @@ export declare const start: <const States extends Machine.StateSchemas, const Ev
5078
4902
  * @category constructors
5079
4903
  * @since 0.4.0
5080
4904
  */
5081
- 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>, 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>>>;
4905
+ 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>>>;
5082
4906
  //# sourceMappingURL=Machine.d.ts.map