@typeonce/effect-machine 0.14.1 → 0.16.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 (74) hide show
  1. package/README.md +99 -48
  2. package/dist/Machine.d.ts +436 -156
  3. package/dist/Machine.d.ts.map +1 -1
  4. package/dist/Machine.js +114 -57
  5. package/dist/Machine.js.map +1 -1
  6. package/dist/internal/machine/activities.d.ts +2 -0
  7. package/dist/internal/machine/activities.d.ts.map +1 -1
  8. package/dist/internal/machine/activities.js +4 -0
  9. package/dist/internal/machine/activities.js.map +1 -1
  10. package/dist/internal/machine/executionPlan.d.ts.map +1 -1
  11. package/dist/internal/machine/executionPlan.js +6 -1
  12. package/dist/internal/machine/executionPlan.js.map +1 -1
  13. package/dist/internal/machine/invocation.d.ts +1 -1
  14. package/dist/internal/machine/invocation.d.ts.map +1 -1
  15. package/dist/internal/machine/invocation.js +25 -3
  16. package/dist/internal/machine/invocation.js.map +1 -1
  17. package/dist/internal/machine/invocationEvent.d.ts +8 -0
  18. package/dist/internal/machine/invocationEvent.d.ts.map +1 -1
  19. package/dist/internal/machine/invocationEvent.js +8 -0
  20. package/dist/internal/machine/invocationEvent.js.map +1 -1
  21. package/dist/internal/machine/machine.d.ts +9 -4
  22. package/dist/internal/machine/machine.d.ts.map +1 -1
  23. package/dist/internal/machine/machine.js +131 -55
  24. package/dist/internal/machine/machine.js.map +1 -1
  25. package/dist/internal/machine/planner.d.ts +7 -0
  26. package/dist/internal/machine/planner.d.ts.map +1 -1
  27. package/dist/internal/machine/planner.js +20 -11
  28. package/dist/internal/machine/planner.js.map +1 -1
  29. package/dist/internal/machine/runtime.d.ts +1 -0
  30. package/dist/internal/machine/runtime.d.ts.map +1 -1
  31. package/dist/internal/machine/runtime.js +25 -16
  32. package/dist/internal/machine/runtime.js.map +1 -1
  33. package/dist/internal/machine/stateDefinition.d.ts +3 -1
  34. package/dist/internal/machine/stateDefinition.d.ts.map +1 -1
  35. package/dist/internal/machine/stateDefinition.js +35 -0
  36. package/dist/internal/machine/stateDefinition.js.map +1 -1
  37. package/dist/internal/machine/topology.d.ts +11 -0
  38. package/dist/internal/machine/topology.d.ts.map +1 -1
  39. package/dist/internal/machine/topology.js +17 -6
  40. package/dist/internal/machine/topology.js.map +1 -1
  41. package/dist/internal/testing/machine/finiteModel.js +1 -1
  42. package/dist/internal/testing/machine/finiteModel.js.map +1 -1
  43. package/dist/internal/testing/machine/transitionCoverage.d.ts.map +1 -1
  44. package/dist/internal/testing/machine/transitionCoverage.js +6 -2
  45. package/dist/internal/testing/machine/transitionCoverage.js.map +1 -1
  46. package/dist/internal/testing/machine/verification.d.ts.map +1 -1
  47. package/dist/internal/testing/machine/verification.js +6 -0
  48. package/dist/internal/testing/machine/verification.js.map +1 -1
  49. package/dist/testing/MachineTest.d.ts +9 -8
  50. package/dist/testing/MachineTest.d.ts.map +1 -1
  51. package/dist/testing/MachineTest.js +7 -7
  52. package/dist/testing/MachineTest.js.map +1 -1
  53. package/dist/unstable/cluster/ClusterMachine.d.ts +1 -1
  54. package/dist/unstable/cluster/ClusterMachine.js +1 -1
  55. package/dist/unstable/reactivity/AtomMachine.d.ts +3 -3
  56. package/dist/unstable/reactivity/AtomMachine.js +3 -3
  57. package/docs/agent-guide.md +207 -88
  58. package/package.json +1 -1
  59. package/src/Machine.ts +871 -256
  60. package/src/internal/machine/activities.ts +7 -0
  61. package/src/internal/machine/executionPlan.ts +6 -1
  62. package/src/internal/machine/invocation.ts +39 -4
  63. package/src/internal/machine/invocationEvent.ts +16 -0
  64. package/src/internal/machine/machine.ts +187 -67
  65. package/src/internal/machine/planner.ts +17 -3
  66. package/src/internal/machine/runtime.ts +61 -25
  67. package/src/internal/machine/stateDefinition.ts +41 -1
  68. package/src/internal/machine/topology.ts +31 -2
  69. package/src/internal/testing/machine/finiteModel.ts +1 -1
  70. package/src/internal/testing/machine/transitionCoverage.ts +6 -2
  71. package/src/internal/testing/machine/verification.ts +11 -0
  72. package/src/testing/MachineTest.ts +9 -7
  73. package/src/unstable/cluster/ClusterMachine.ts +1 -1
  74. package/src/unstable/reactivity/AtomMachine.ts +3 -3
package/dist/Machine.d.ts CHANGED
@@ -41,7 +41,6 @@ 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 TransitionCaseTypeId: unique symbol;
45
44
  declare const ChildMachineLogicTypeId: typeof internal.ChildMachineLogicTypeId;
46
45
  /**
47
46
  * Type identifier used for the synthetic event passed to startup lifecycle
@@ -77,7 +76,7 @@ export declare const InitialEvent: InitialEvent;
77
76
  export declare const isInitialEvent: (u: unknown) => u is InitialEvent;
78
77
  type IsAny<A> = 0 extends (1 & A) ? true : false;
79
78
  /**
80
- * A schema-first machine definition.
79
+ * A schema-first machine implementation.
81
80
  *
82
81
  * **Details**
83
82
  *
@@ -157,20 +156,9 @@ export interface Machine<States extends Machine.StateSchemas, Events extends Rea
157
156
  /** @internal */
158
157
  readonly handlers: Machine.StateConfigs<States, Events, Emits, UnhandledStates, Machine.TagOf<Events[number]>, E, R>;
159
158
  /**
160
- * Adds typed state handlers and returns the refined machine definition.
161
- * Successive calls implement the remaining unhandled states while retaining
162
- * accumulated errors, services, final states, and output evidence.
163
- * Event dispatch maps and transition descriptors are captured by value, so
164
- * later mutation of the objects supplied to this call cannot alter the
165
- * resulting machine.
166
- *
167
- * @since 0.4.0
168
- */
169
- readonly handle: Machine.Handler<States, Events, Emits, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, OutputStates, InputEvents, ParentEvents>;
170
- /**
171
- * Preserves invocation inference with this machine's public input and parent
172
- * protocols. Prefer this bound constructor when an invocation source or
173
- * lifecycle handler uses `self` or `parent`.
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.
174
162
  *
175
163
  * @since 0.11.0
176
164
  */
@@ -180,6 +168,48 @@ export interface Machine<States extends Machine.StateSchemas, Events extends Rea
180
168
  /** @internal */
181
169
  readonly initialDefinition: Machine.InitialDefinition;
182
170
  }
171
+ /**
172
+ * A schema-first machine definition that can produce independent
173
+ * implementations.
174
+ *
175
+ * **Details**
176
+ *
177
+ * Call `handle` once for each implementation. The returned {@link Machine}
178
+ * does not expose `handle`, so handler configuration cannot be accumulated or
179
+ * replaced through chained calls. Calling `handle` multiple times on the same
180
+ * definition remains supported and creates independent machines.
181
+ *
182
+ * @category models
183
+ * @since 0.15.0
184
+ */
185
+ export interface Definition<States extends Machine.StateSchemas, Events extends ReadonlyArray<Machine.TaggedSchema>, Input extends Schema.Top = typeof Schema.Void, InitialE = never, InitialR = never, FinalStates extends Machine.StateIdentifier<States> = never, Output = never, Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [], InputEvents extends ReadonlyArray<Machine.TaggedSchema> = Events, ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []> extends Machine<States, Events, Input, Machine.StateIdentifier<States>, never, never, InitialE, InitialR, FinalStates, Output, Emits, never, InputEvents, ParentEvents> {
186
+ /**
187
+ * Adds typed state handlers and returns an independent machine
188
+ * implementation. Event dispatch maps and transition descriptors are
189
+ * captured by value, so later mutation of the supplied objects cannot alter
190
+ * the resulting machine.
191
+ *
192
+ * @since 0.4.0
193
+ */
194
+ readonly handle: Machine.Handler<States, Events, Emits, Input, Machine.StateIdentifier<States>, never, never, InitialE, InitialR, FinalStates, Output, never, InputEvents, ParentEvents>;
195
+ }
196
+ /**
197
+ * Namespace containing type-level members associated with {@link Definition}.
198
+ *
199
+ * @category models
200
+ * @since 0.15.0
201
+ */
202
+ export declare namespace Definition {
203
+ /**
204
+ * Any schema-first machine definition.
205
+ *
206
+ * @category models
207
+ * @since 0.15.0
208
+ */
209
+ interface Any extends Machine.Any {
210
+ readonly handle: any;
211
+ }
212
+ }
183
213
  export {
184
214
  /**
185
215
  * Error returned by `spawn` when a child process with the same id already
@@ -467,7 +497,7 @@ type ValidateCompoundStateNode<Node extends Machine.StateNodeConfig, Children ex
467
497
  readonly initial: infer Initial;
468
498
  } ? Initial extends ActiveStateKey<Children> | ChoiceStateKey<Children> ? {
469
499
  readonly states: ValidateStateTree<Children, true, Extract<Path, string>>;
470
- } : StateDefinitionError<"Compound initial must be one of its direct child keys"> : StateDefinitionError<"Compound states must declare an initial child">;
500
+ } : StateDefinitionError<"Compound initial must be one of its direct child keys", Path, Extract<Initial, PropertyKey>> : StateDefinitionError<"Compound states must declare an initial child", Path>;
471
501
  type ValidateStateNodeWithoutChildren<Node extends Machine.StateNodeConfig> = "initial" extends keyof Node ? StateDefinitionError<"Atomic states cannot declare an initial child"> : Node extends {
472
502
  readonly type: infer Type;
473
503
  } ? Type extends "final" ? ValidateOutputSchema<Node> : Type extends "active" | undefined ? "output" extends keyof Node ? StateDefinitionError<"Only final and parallel states can declare output"> : unknown : StateDefinitionError<"State node type must be active, final, or parallel"> : "output" extends keyof Node ? StateDefinitionError<"Only final and parallel states can declare output"> : unknown;
@@ -491,7 +521,15 @@ type ValidateDefinedStates<States extends Machine.StateSchemas> = [States] exten
491
521
  type InvalidDefinedStateTreeInput<States extends Machine.StateSchemas> = [States] extends [
492
522
  Machine.ValidateStateSchemas<States>
493
523
  ] ? never : States & Machine.ValidateStateSchemas<States>;
494
- interface DefineStates {
524
+ type ReusableStateNodeConfig = Machine.AtomicStateNodeConfig | Machine.CompoundStateNodeConfig | Machine.ParallelStateNodeConfig;
525
+ type ReusableStateValidation<Node> = Node extends ReusableStateNodeConfig ? ValidateStateNode<Node, false, "state"> : StateDefinitionError<"Reusable states must be active state nodes", "state">;
526
+ type ValidateDefinedState<Node> = [Node] extends [ReusableStateValidation<Node>] ? [] : [validation: ReusableStateValidation<Node>];
527
+ type InvalidDefinedStateInput<Node> = [Node] extends [ReusableStateValidation<Node>] ? never : Node & ReusableStateValidation<Node>;
528
+ interface StateConstructor {
529
+ <const Node>(node: Node & DefineStateNodeInput<NoInfer<Node>>, ..._validation: ValidateDefinedState<NoInfer<Node>>): Node;
530
+ <const Node>(node: InvalidDefinedStateInput<Node>): never;
531
+ }
532
+ interface StatesConstructor {
495
533
  <const States extends Machine.StateSchemas>(states: States & DefineStateTreeInput<NoInfer<States>>, ..._validation: ValidateDefinedStates<NoInfer<States>>): Machine.DefinedStates<States>;
496
534
  <const States extends Machine.StateSchemas>(states: InvalidDefinedStateTreeInput<States>): never;
497
535
  }
@@ -981,9 +1019,9 @@ export declare namespace Inspection {
981
1019
  readonly sessionId: string;
982
1020
  readonly owner: Subject;
983
1021
  readonly ownerPath: string;
984
- readonly kind: "Effect" | "Timer";
1022
+ readonly kind: "Effect" | "Stream" | "Timer";
985
1023
  }
986
- /** Announces an Effect or timer invocation starting. */
1024
+ /** Announces an Effect, Stream, or timer invocation starting. */
987
1025
  interface ActivityStarted extends Base {
988
1026
  readonly _tag: "ActivityStarted";
989
1027
  readonly activity: Activity;
@@ -1399,8 +1437,6 @@ export declare namespace Machine {
1399
1437
  /** @internal */
1400
1438
  readonly handlers: any;
1401
1439
  /** @internal */
1402
- readonly handle: any;
1403
- /** @internal */
1404
1440
  readonly invoke: any;
1405
1441
  /** @internal */
1406
1442
  readonly initial: any;
@@ -1773,12 +1809,12 @@ export declare namespace Machine {
1773
1809
  */
1774
1810
  type StateSchemas = StateTree;
1775
1811
  /**
1776
- * Builder for initial state snapshots generated by `defineStates`.
1812
+ * Builder for initial state snapshots generated by `states`.
1777
1813
  *
1778
1814
  * **When to use**
1779
1815
  *
1780
1816
  * Use when you need the type of the `initial` property returned by
1781
- * `defineStates` or want to expose an initial snapshot builder from a helper.
1817
+ * `states` or want to expose an initial snapshot builder from a helper.
1782
1818
  *
1783
1819
  * **Details**
1784
1820
  *
@@ -1790,7 +1826,7 @@ export declare namespace Machine {
1790
1826
  */
1791
1827
  type InitialBuilder<States extends StateSchemas> = InitialSnapshotBuilderWithPrefix<States>;
1792
1828
  /**
1793
- * State definitions and snapshot access helpers returned by `defineStates`.
1829
+ * State definitions and snapshot access helpers returned by `states`.
1794
1830
  *
1795
1831
  * **Details**
1796
1832
  *
@@ -1802,8 +1838,17 @@ export declare namespace Machine {
1802
1838
  * @since 0.4.0
1803
1839
  */
1804
1840
  interface DefinedStates<States extends StateSchemas> {
1805
- /** Original state tree supplied to {@link defineStates}. */
1841
+ /** Captured state tree supplied to {@link states}. */
1806
1842
  readonly states: States;
1843
+ /**
1844
+ * Checks and preserves one active state path from this definition.
1845
+ *
1846
+ * This is useful for named path helpers, including finite template-literal
1847
+ * families. Every member of a path union must exist in the state tree.
1848
+ *
1849
+ * @since 0.15.0
1850
+ */
1851
+ readonly path: <const Path extends StateIdentifier<States>>(path: Path) => Path;
1807
1852
  /**
1808
1853
  * Returns the decoded value for an active state path. The supplied
1809
1854
  * snapshot may be a complete root snapshot or a snapshot previously
@@ -1968,7 +2013,7 @@ export declare namespace Machine {
1968
2013
  } | {
1969
2014
  readonly type: "invoke";
1970
2015
  readonly id: string;
1971
- readonly outcome: "done" | "failure" | "snapshot";
2016
+ readonly outcome: "element" | "done" | "failure" | "snapshot";
1972
2017
  };
1973
2018
  /** Static topology selected by a transition branch. */
1974
2019
  interface TransitionTargetSelection<Path extends string | undefined = string | undefined, Kind extends Topology.TargetSelectionKind = Topology.TargetSelectionKind, Scope extends Topology.TargetSelectionScope | undefined = Topology.TargetSelectionScope | undefined> {
@@ -1982,14 +2027,11 @@ export declare namespace Machine {
1982
2027
  readonly target: Path | undefined;
1983
2028
  readonly selection: TransitionTargetSelection<Path | undefined>;
1984
2029
  } | {
1985
- readonly type: "case";
2030
+ readonly type: "branch";
2031
+ readonly key: string;
1986
2032
  readonly title: string;
1987
2033
  readonly target: Path | undefined;
1988
2034
  readonly selection: TransitionTargetSelection<Path | undefined>;
1989
- } | {
1990
- readonly type: "otherwise";
1991
- readonly target: Path | undefined;
1992
- readonly selection: TransitionTargetSelection<Path | undefined>;
1993
2035
  };
1994
2036
  /** The statically selected root entry for machine startup. */
1995
2037
  interface InitialDefinition<Path extends string = string> {
@@ -2001,8 +2043,8 @@ export declare namespace Machine {
2001
2043
  *
2002
2044
  * **Details**
2003
2045
  *
2004
- * Every branch exposes its selected target without executing its predicate
2005
- * or resolver. A compound local or branch target covers its descendants;
2046
+ * Every branch exposes its selected target without executing its resolver.
2047
+ * A compound local or branch target covers its descendants;
2006
2048
  * `undefined` identifies an explicitly targetless branch.
2007
2049
  *
2008
2050
  * @category models
@@ -2038,6 +2080,8 @@ export declare namespace Machine {
2038
2080
  readonly reenter: boolean;
2039
2081
  /** Zero-based index of the selected static branch. */
2040
2082
  readonly branchIndex: number;
2083
+ /** Stable key of a named branch, or `undefined` for a direct transition. */
2084
+ readonly branchKey: string | undefined;
2041
2085
  /** Path returned by the handler, including a choice or history pseudo-state. */
2042
2086
  readonly target: TargetPath | undefined;
2043
2087
  /**
@@ -2898,6 +2942,16 @@ export declare namespace Machine {
2898
2942
  readonly target: TargetBuilder<States, StateId>;
2899
2943
  readonly output: Output;
2900
2944
  }
2945
+ /** 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> {
2947
+ readonly id: string;
2948
+ readonly state: StateByIdentifier<States, StateId>;
2949
+ readonly containingState: ParentStateValue<States, StateId>;
2950
+ readonly ancestors: ParentStateValues<States, StateId>;
2951
+ readonly snapshot: Snapshot<States>;
2952
+ readonly target: TargetBuilder<States, StateId>;
2953
+ readonly element: Element;
2954
+ }
2901
2955
  /** Context passed to an invocation typed-failure transition. */
2902
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> {
2903
2957
  readonly id: string;
@@ -3090,13 +3144,9 @@ export declare namespace Machine {
3090
3144
  * @category utility types
3091
3145
  * @since 0.4.0
3092
3146
  */
3093
- type EventTransitionReturn<Transition> = (Transition extends {
3147
+ type EventTransitionReturn<Transition> = Transition extends {
3094
3148
  readonly resolve?: infer Resolve;
3095
- } ? NonNullable<Resolve> extends (...args: any) => infer Ret ? Ret : never : never) | (Transition extends {
3096
- readonly cases: infer Cases extends ReadonlyArray<unknown>;
3097
- } ? EventTransitionReturn<Cases[number]> : never) | (Transition extends {
3098
- readonly otherwise: infer Otherwise;
3099
- } ? EventTransitionReturn<Otherwise> : never);
3149
+ } ? NonNullable<Resolve> extends (...args: any) => infer Ret ? Ret : never : never;
3100
3150
  /**
3101
3151
  * Extracts the return value from a state's event handlers.
3102
3152
  *
@@ -3129,6 +3179,8 @@ export declare namespace Machine {
3129
3179
  type InvokeLogic<Invoke> = Invoke extends {
3130
3180
  readonly effect: infer Source;
3131
3181
  } ? InvokeFactoryResult<Source> extends infer Fx extends Effect.Effect<any, any, any> ? Logic<void, never, Effect.Error<Fx>, Effect.Services<Fx>, Effect.Success<Fx>> : never : Invoke extends {
3182
+ readonly stream: infer Source;
3183
+ } ? InvokeFactoryResult<Source> extends infer SourceStream extends Stream.Stream<any, any, any> ? Logic<void, never, Stream.Error<SourceStream>, Stream.Services<SourceStream>, void> : never : Invoke extends {
3132
3184
  readonly after: unknown;
3133
3185
  } ? Logic<void, never, never, never, void> : Invoke extends {
3134
3186
  readonly logic: infer Source;
@@ -3205,6 +3257,8 @@ export declare namespace Machine {
3205
3257
  readonly onDone?: infer Handler;
3206
3258
  } ? EventTransitionReturn<NonNullable<Handler>> : never) | (Invoke extends {
3207
3259
  readonly onFailure?: infer Handler;
3260
+ } ? EventTransitionReturn<NonNullable<Handler>> : never) | (Invoke extends {
3261
+ readonly onElement?: infer Handler;
3208
3262
  } ? EventTransitionReturn<NonNullable<Handler>> : never) | (Invoke extends {
3209
3263
  readonly onSnapshot?: infer Handler;
3210
3264
  } ? EventTransitionReturn<NonNullable<Handler>> : never) : never;
@@ -3256,7 +3310,6 @@ export declare namespace Machine {
3256
3310
  * @since 0.4.0
3257
3311
  */
3258
3312
  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>;
3259
- type TransitionWhenContext<Context> = Omit<Context, "target">;
3260
3313
  /** Type evidence retained by {@link transition} without affecting runtime data. */
3261
3314
  interface TransitionTyped<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateNodeIdentifier<States>, Context, Reenter extends boolean> {
3262
3315
  readonly [TransitionTypeId]: {
@@ -3270,9 +3323,19 @@ export declare namespace Machine {
3270
3323
  };
3271
3324
  }
3272
3325
  /** The only transition value accepted by machine handler APIs. */
3273
- 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) & {
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>) & {
3274
3327
  readonly reenter?: [Reenter] extends [true] ? boolean : never;
3275
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
+ };
3276
3339
  type SelectionBuilder<Selection> = Selection extends TargetSelection<infer Builder, any, any> ? Builder : never;
3277
3340
  type SelectionKind<Selection> = Selection extends TargetSelection<any, any, infer Kind> ? Kind : never;
3278
3341
  type SelectionPath<Selection> = Selection extends TargetSelection<any, infer Path, any> ? Path : never;
@@ -3280,33 +3343,61 @@ export declare namespace Machine {
3280
3343
  readonly from: (...args: any) => infer Result;
3281
3344
  } ? Result : never);
3282
3345
  type SelectedTargetResult<Selection> = SelectionBuilder<Selection> extends infer Builder ? TargetBuilderResult<Builder> : never;
3283
- type TransitionResolveContext<Context, Selection, Match = never> = Omit<Context, "target"> & ([Match] extends [never] ? {} : {
3284
- readonly match: Match;
3285
- }) & (SelectionKind<Selection> extends "none" ? {} : {
3346
+ type TransitionResolveContext<Context, Selection> = Omit<Context, "target"> & (SelectionKind<Selection> extends "none" ? {} : {
3286
3347
  readonly target: SelectionBuilder<Selection>;
3287
3348
  });
3288
- type TransitionResolver<Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Context, Selection, Match = never> = (context: TransitionResolveContext<Context, Selection, Match>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => SelectionKind<Selection> extends "none" ? undefined : SelectedTargetResult<Selection> | undefined;
3349
+ 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;
3289
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>> = {
3290
3351
  readonly target: (to: TargetSelector<States, StateId>) => Selection;
3291
3352
  readonly resolve?: TransitionResolver<Events, Emits, Context, Selection>;
3292
- readonly cases?: never;
3293
- readonly otherwise?: never;
3353
+ readonly branches?: never;
3294
3354
  readonly reenter?: Reenter;
3295
3355
  };
3296
- type TransitionCaseInput<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateNodeIdentifier<States>, Context, Selection extends TargetSelection<any, any, any>, Match> = {
3297
- readonly title: string;
3298
- readonly when: (context: TransitionWhenContext<Context>) => Option.Option<Match>;
3299
- readonly target: (to: TargetSelector<States, StateId>) => Selection;
3300
- readonly resolve?: TransitionResolver<Events, Emits, Context, Selection, NoInfer<Match>>;
3301
- readonly cases?: never;
3302
- readonly otherwise?: never;
3303
- readonly reenter?: never;
3356
+ /** One named destination declared by a branching transition. */
3357
+ interface TransitionBranchInput<Selection extends TargetSelection<any, any, any> = TargetSelection<any, any, any>> {
3358
+ readonly target: Selection;
3359
+ readonly title?: string;
3360
+ }
3361
+ /** Opaque evidence that a branching resolver selected one declared branch. */
3362
+ interface SelectedBranch<out Key extends string, out Result> {
3363
+ readonly [Topology.SelectedBranchTypeId]: {
3364
+ readonly key: Types.Covariant<Key>;
3365
+ readonly result: Types.Covariant<Result>;
3366
+ };
3367
+ }
3368
+ type SelectedBranchCallable<Callable, Key extends string> = Callable extends {
3369
+ (...args: infer Arguments1): infer Result1;
3370
+ (...args: infer Arguments2): infer Result2;
3371
+ } ? {
3372
+ (...args: Arguments1): SelectedBranch<Key, Result1>;
3373
+ (...args: Arguments2): SelectedBranch<Key, Result2>;
3374
+ } : Callable extends (...args: infer Arguments) => infer Result ? (...args: Arguments) => SelectedBranch<Key, Result> : {};
3375
+ type SelectedBranchBuilderProperties<Builder, Key extends string> = {
3376
+ readonly [Property in keyof Builder]: Builder[Property] extends (...args: any) => any ? SelectedBranchCallable<Builder[Property], Key> : Builder[Property];
3304
3377
  };
3305
- type TransitionConditionalInput<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateNodeIdentifier<States>, Context, Reenter extends boolean, Cases extends readonly [TransitionCaseTyped, ...ReadonlyArray<TransitionCaseTyped>], OtherwiseSelection extends TargetSelection<any, any, any>> = {
3378
+ /** Target-specific builder that brands every construction with its branch key. */
3379
+ type SelectedBranchBuilder<Builder, Key extends string> = SelectedBranchCallable<Builder, Key> & SelectedBranchBuilderProperties<Builder, Key>;
3380
+ type BranchSelectors<Branches extends Readonly<Record<string, TransitionBranchInput>>> = {
3381
+ readonly [Key in Extract<keyof Branches, string>]: SelectedBranchBuilder<SelectionBuilder<Branches[Key]["target"]>, Key>;
3382
+ };
3383
+ type BranchSelectionResult<Branches extends Readonly<Record<string, TransitionBranchInput>>> = {
3384
+ readonly [Key in Extract<keyof Branches, string>]: SelectedBranch<Key, SelectedTargetResult<Branches[Key]["target"]>>;
3385
+ }[Extract<keyof Branches, string>];
3386
+ type TransitionBranchesResolveContext<Context, Branches extends Readonly<Record<string, TransitionBranchInput>>> = Omit<Context, "target"> & {
3387
+ readonly select: BranchSelectors<Branches>;
3388
+ };
3389
+ 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>>> = {
3306
3391
  readonly target?: never;
3307
- readonly resolve?: never;
3308
- readonly cases: (branch: TransitionCaseConstructor<States, Events, Emits, StateId, Context>) => Cases;
3309
- readonly otherwise: TransitionDirectInput<States, Events, Emits, StateId, Context, never, OtherwiseSelection>;
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>;
3310
3401
  readonly reenter?: Reenter;
3311
3402
  };
3312
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>;
@@ -3329,32 +3420,50 @@ export declare namespace Machine {
3329
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> & ({
3330
3421
  readonly id: string;
3331
3422
  readonly effect: (context: InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>) => Effect.Effect<any, any, any>;
3423
+ readonly stream?: never;
3332
3424
  readonly after?: never;
3333
3425
  readonly logic?: never;
3334
3426
  readonly child?: never;
3335
3427
  readonly address?: never;
3336
3428
  readonly onDone?: unknown;
3337
3429
  readonly onFailure?: unknown;
3430
+ readonly onElement?: never;
3431
+ readonly onSnapshot?: never;
3432
+ } | {
3433
+ readonly id: string;
3434
+ readonly stream: (context: InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>) => Stream.Stream<any, any, any>;
3435
+ readonly effect?: never;
3436
+ readonly after?: never;
3437
+ readonly logic?: never;
3438
+ readonly child?: never;
3439
+ readonly address?: never;
3440
+ readonly onElement?: unknown;
3441
+ readonly onDone: unknown;
3442
+ readonly onFailure?: unknown;
3338
3443
  readonly onSnapshot?: never;
3339
3444
  } | {
3340
3445
  readonly id: string;
3341
3446
  readonly after: InvokeSource<Duration.Input, InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>>;
3342
3447
  readonly effect?: never;
3448
+ readonly stream?: never;
3343
3449
  readonly logic?: never;
3344
3450
  readonly child?: never;
3345
3451
  readonly address?: never;
3346
3452
  readonly onDone: unknown;
3347
3453
  readonly onFailure?: never;
3454
+ readonly onElement?: never;
3348
3455
  readonly onSnapshot?: never;
3349
3456
  } | {
3350
3457
  readonly id: string;
3351
3458
  readonly address: string;
3352
3459
  readonly logic: InvokeSource<Logic<any, any, any, any, any, any>, InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>>;
3353
3460
  readonly effect?: never;
3461
+ readonly stream?: never;
3354
3462
  readonly after?: never;
3355
3463
  readonly child?: never;
3356
3464
  readonly onDone?: unknown;
3357
3465
  readonly onFailure?: unknown;
3466
+ readonly onElement?: never;
3358
3467
  readonly onSnapshot?: unknown;
3359
3468
  } | {
3360
3469
  readonly child: ChildMachine.Any;
@@ -3362,10 +3471,12 @@ export declare namespace Machine {
3362
3471
  readonly id?: never;
3363
3472
  readonly address?: never;
3364
3473
  readonly effect?: never;
3474
+ readonly stream?: never;
3365
3475
  readonly after?: never;
3366
3476
  readonly logic?: never;
3367
3477
  readonly onDone?: unknown;
3368
3478
  readonly onFailure?: unknown;
3479
+ readonly onElement?: never;
3369
3480
  readonly onSnapshot?: unknown;
3370
3481
  });
3371
3482
  /** State-bound inline invocation configuration. */
@@ -3392,14 +3503,23 @@ export declare namespace Machine {
3392
3503
  } : {
3393
3504
  readonly onFailure?: never;
3394
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;
3395
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 []> = {
3396
3514
  readonly id: InvokeLifecycleId;
3397
3515
  readonly after: InvokeSource<Duration.Input, InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>>;
3398
3516
  readonly effect?: never;
3517
+ readonly stream?: never;
3399
3518
  readonly logic?: never;
3400
3519
  readonly child?: never;
3401
3520
  readonly address?: never;
3402
3521
  readonly onFailure?: never;
3522
+ readonly onElement?: never;
3403
3523
  readonly onSnapshot?: never;
3404
3524
  readonly onDone: InvokeTransition<States, Events, Emits, StateId, InvokeDoneContext<States, Events, Emits, StateId, void, InputEvents, ParentEvents>>;
3405
3525
  };
@@ -3408,8 +3528,10 @@ export declare namespace Machine {
3408
3528
  readonly address: Address & ChildAddress.Compatibility<Address, ChildEvent>;
3409
3529
  readonly logic: Source;
3410
3530
  readonly effect?: never;
3531
+ readonly stream?: never;
3411
3532
  readonly after?: never;
3412
3533
  readonly child?: never;
3534
+ readonly onElement?: never;
3413
3535
  readonly onSnapshot?: InvokeTransition<States, Events, Emits, StateId, InvokeSnapshotContext<States, Events, Emits, StateId, NoInfer<ChildState>, NoInfer<ChildError>, NoInfer<ChildOutput>, InputEvents, ParentEvents>>;
3414
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>>>;
3415
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 []> = {
@@ -3417,8 +3539,10 @@ export declare namespace Machine {
3417
3539
  readonly id?: never;
3418
3540
  readonly address?: never;
3419
3541
  readonly effect?: never;
3542
+ readonly stream?: never;
3420
3543
  readonly after?: never;
3421
3544
  readonly logic?: never;
3545
+ readonly onElement?: never;
3422
3546
  readonly onSnapshot?: InvokeTransition<States, Events, Emits, StateId, InvokeSnapshotContext<States, Events, Emits, StateId, Snapshot<Machine.States<ChildDefinition>>, Error<ChildDefinition>, Output<ChildDefinition>, InputEvents, ParentEvents>>;
3423
3547
  } & (Input<ChildDefinition> extends typeof Schema.Void ? {
3424
3548
  readonly input?: never;
@@ -3443,6 +3567,12 @@ export declare namespace Machine {
3443
3567
  readonly effect: infer Source;
3444
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>>> & {
3445
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;
3446
3576
  } : never : Raw extends {
3447
3577
  readonly after: unknown;
3448
3578
  } ? {
@@ -3693,7 +3823,7 @@ export declare namespace Machine {
3693
3823
  readonly [Key in UnknownKeys]: HandlerValidationError<"Handler config contains an event key that does not exist", StateId, Key>;
3694
3824
  };
3695
3825
  } : unknown;
3696
- type TransitionResultInitialTargetPath<Result> = IsAny<Result> extends true ? never : Result extends Effect.Effect<infer Success, any, any> ? TransitionResultInitialTargetPath<Success> : Result extends StateConstruction<infer Constructed> ? TransitionResultInitialTargetPath<Constructed> : Result extends {
3826
+ type TransitionResultInitialTargetPath<Result> = IsAny<Result> extends true ? never : Result extends Effect.Effect<infer Success, any, any> ? TransitionResultInitialTargetPath<Success> : Result extends SelectedBranch<any, infer Selected> ? TransitionResultInitialTargetPath<Selected> : Result extends StateConstruction<infer Constructed> ? TransitionResultInitialTargetPath<Constructed> : Result extends {
3697
3827
  readonly [Topology.InitialTargetTypeId]: typeof Topology.InitialTargetTypeId;
3698
3828
  readonly _tag: "InitialTarget";
3699
3829
  } ? Result extends {
@@ -3818,6 +3948,13 @@ export declare namespace Machine {
3818
3948
  */
3819
3949
  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>>>>;
3820
3950
  }
3951
+ /**
3952
+ * Extracts the complete logical snapshot represented by a state definition.
3953
+ *
3954
+ * @category utility types
3955
+ * @since 0.15.0
3956
+ */
3957
+ export type Snapshot<Defined extends Machine.DefinedStates<any>> = Defined extends Machine.DefinedStates<infer States> ? Machine.Snapshot<States> : never;
3821
3958
  /**
3822
3959
  * Returns `true` if a value is a `Machine`.
3823
3960
  *
@@ -3833,7 +3970,43 @@ export declare const isMachine: (u: unknown) => u is Machine.Any;
3833
3970
  */
3834
3971
  export declare const isFinal: <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, const Input extends Schema.Top = typeof Schema.Void, UnhandledStates extends Machine.StateIdentifier<States> = Machine.StateIdentifier<States>, E = never, R = never, InitialE = never, InitialR = never, FinalStates extends Machine.StateIdentifier<States> = never, Output = never, OutputStates extends Machine.StateIdentifier<States> = never, InputEvents extends ReadonlyArray<Machine.TaggedSchema> = Events, ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(machine: Machine<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents, ParentEvents>, state: Machine.Snapshot<States>) => state is Machine.SnapshotContainingFinal<States, FinalStates>;
3835
3972
  /**
3836
- * Defines a state tree while preserving literal state paths.
3973
+ * Defines one reusable active state while preserving its exact child topology.
3974
+ *
3975
+ * Prefer declaring state nodes inline in {@link states}. Use this constructor
3976
+ * only when the same state definition is mounted more than once.
3977
+ * Tagged schemas are already reusable and do not need this constructor.
3978
+ *
3979
+ * **Example** (Repeated compound state)
3980
+ *
3981
+ * ```ts
3982
+ * import { Schema } from "effect"
3983
+ * import { Machine } from "@typeonce/effect-machine"
3984
+ *
3985
+ * const TradingState = Schema.TaggedUnion({
3986
+ * InSession: {},
3987
+ * Applying: {}
3988
+ * })
3989
+ * const TradingSlot = Machine.state({
3990
+ * initial: "Idle",
3991
+ * states: {
3992
+ * Idle: {},
3993
+ * InSession: TradingState.cases.InSession,
3994
+ * Applying: TradingState.cases.Applying
3995
+ * }
3996
+ * })
3997
+ *
3998
+ * const States = Machine.states({
3999
+ * slot1: TradingSlot,
4000
+ * slot2: TradingSlot
4001
+ * })
4002
+ * ```
4003
+ *
4004
+ * @category constructors
4005
+ * @since 0.15.0
4006
+ */
4007
+ export declare const state: StateConstructor;
4008
+ /**
4009
+ * Defines the complete state tree while preserving literal state paths.
3837
4010
  *
3838
4011
  * **When to use**
3839
4012
  *
@@ -3842,7 +4015,8 @@ export declare const isFinal: <const States extends Machine.StateSchemas, const
3842
4015
  *
3843
4016
  * **Details**
3844
4017
  *
3845
- * The returned `states` property is the same object passed to `defineStates`.
4018
+ * The returned `states` property is an immutable structural capture of the
4019
+ * supplied tree.
3846
4020
  * `Machine.make` derives its initial target selector from that tree and
3847
4021
  * enforces compound and parallel initial-state rules. Active nodes may omit
3848
4022
  * `schema` when they own no value and still participate fully in targeting,
@@ -3856,7 +4030,7 @@ export declare const isFinal: <const States extends Machine.StateSchemas, const
3856
4030
  *
3857
4031
  * class Idle extends Schema.TaggedClass<Idle>("Idle")("Idle", {}) {}
3858
4032
  *
3859
- * const States = Machine.defineStates({ idle: Idle })
4033
+ * const States = Machine.states({ idle: Idle })
3860
4034
  *
3861
4035
  * Machine.make({
3862
4036
  * states: States.states,
@@ -3871,7 +4045,7 @@ export declare const isFinal: <const States extends Machine.StateSchemas, const
3871
4045
  * @category constructors
3872
4046
  * @since 0.4.0
3873
4047
  */
3874
- export declare const defineStates: DefineStates;
4048
+ export declare const states: StatesConstructor;
3875
4049
  type InitialDirectInput<States extends Machine.StateSchemas, Input, Selection extends Machine.TargetSelection<any, any, any>> = {
3876
4050
  readonly target: (to: Machine.InitialSelector<States>) => Selection;
3877
4051
  readonly resolve?: (context: {
@@ -3891,7 +4065,7 @@ type MakeConfig<States extends Machine.StateSchemas, InputEvents extends Readonl
3891
4065
  readonly input?: Input;
3892
4066
  readonly initial: unknown;
3893
4067
  };
3894
- 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>> = Machine<States, readonly [...InputEvents, ...InternalEvents], Input, Machine.StateIdentifier<States>, never, never, InitialE, InitialR, Machine.FinalStateFromDefinition<States>, Machine.TerminalOutput<States>, Emits, never, InputEvents, ParentEvents>;
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>;
3895
4069
  interface Make {
3896
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"> & {
3897
4071
  readonly initial: InitialDirectInput<States, Input["Type"], InitialSelection>;
@@ -3908,7 +4082,7 @@ interface Make {
3908
4082
  * State and event schemas provide runtime boundary validation while their
3909
4083
  * decoded types drive handler, state, event, target, error, and service
3910
4084
  * inference. State-tree validation is applied whether `states` comes from
3911
- * `defineStates` or is passed inline. Call `handle` on the returned definition
4085
+ * `states` or is passed inline. Call `handle` on the returned definition
3912
4086
  * to implement state behavior with ordinary TypeScript control flow.
3913
4087
  *
3914
4088
  * `Machine.events` defines the public input protocol. `Machine.internalEvents`
@@ -3933,7 +4107,7 @@ interface Make {
3933
4107
  * by: Schema.Number
3934
4108
  * }) {}
3935
4109
  *
3936
- * const States = Machine.defineStates({ Count })
4110
+ * const States = Machine.states({ Count })
3937
4111
  * const Events = Machine.events(Increment)
3938
4112
  *
3939
4113
  * const counter = Machine.make({
@@ -3956,7 +4130,7 @@ interface Make {
3956
4130
  * })
3957
4131
  * ```
3958
4132
  *
3959
- * @see {@link defineStates} for typed state-tree helpers.
4133
+ * @see {@link states} for typed state-tree helpers.
3960
4134
  * @category constructors
3961
4135
  * @since 0.4.0
3962
4136
  */
@@ -3980,9 +4154,14 @@ export type EventOf<Protocol extends Machine.EventProtocol.Any> = Machine.EventO
3980
4154
  * **Example**
3981
4155
  *
3982
4156
  * ```ts
3983
- * const Events = Machine.events(Increment, Reset)
3984
- * const machine = Machine.make({ events: Events, ... })
3985
- * yield* ref.send(Events.Increment({ by: 1 }))
4157
+ * export const Event = Machine.events(
4158
+ * Schema.TaggedUnion({
4159
+ * Increment: { by: Schema.Number },
4160
+ * Reset: {}
4161
+ * })
4162
+ * )
4163
+ * const machine = Machine.make({ events: Event, ... })
4164
+ * yield* ref.send(Event.Increment({ by: 1 }))
3986
4165
  * ```
3987
4166
  *
3988
4167
  * @category constructors
@@ -4003,11 +4182,16 @@ export declare const events: {
4003
4182
  * **Example**
4004
4183
  *
4005
4184
  * ```ts
4006
- * const InternalEvents = Machine.internalEvents(Loaded, Failed)
4007
- * const machine = Machine.make({ internalEvents: InternalEvents, ... })
4185
+ * const Internal = Machine.internalEvents(
4186
+ * Schema.TaggedUnion({
4187
+ * Loaded: { value: Schema.String },
4188
+ * Failed: { message: Schema.String }
4189
+ * })
4190
+ * )
4191
+ * const machine = Machine.make({ internalEvents: Internal, ... })
4008
4192
  *
4009
4193
  * // Inside a transition callback:
4010
- * enqueue.raise(InternalEvents.Loaded({ value }))
4194
+ * enqueue.raise(Internal.Loaded({ value }))
4011
4195
  * ```
4012
4196
  *
4013
4197
  * @category constructors
@@ -4023,6 +4207,17 @@ export declare const internalEvents: {
4023
4207
  * implicitly to a parent machine. Observe them through `MachineRef.emissions` or
4024
4208
  * the AtomMachine emission stream adapters.
4025
4209
  *
4210
+ * **Example**
4211
+ *
4212
+ * ```ts
4213
+ * const Emitted = Machine.emittedEvents(
4214
+ * Schema.TaggedUnion({
4215
+ * Saved: { id: Schema.String }
4216
+ * })
4217
+ * )
4218
+ * const machine = Machine.make({ emittedEvents: Emitted, ... })
4219
+ * ```
4220
+ *
4026
4221
  * @category constructors
4027
4222
  * @since 0.10.0
4028
4223
  */
@@ -4060,7 +4255,7 @@ export declare const emittedEvents: {
4060
4255
  * import { Machine } from "@typeonce/effect-machine"
4061
4256
  *
4062
4257
  * class Idle extends Schema.TaggedClass<Idle>("Idle")("Idle", {}) {}
4063
- * const States = Machine.defineStates({ Idle })
4258
+ * const States = Machine.states({ Idle })
4064
4259
  * const machine = Machine.make({
4065
4260
  * states: States.states,
4066
4261
  * events: Machine.events(),
@@ -4107,7 +4302,7 @@ export declare const encodeSnapshot: <const States extends Machine.StateSchemas,
4107
4302
  * import { Machine } from "@typeonce/effect-machine"
4108
4303
  *
4109
4304
  * class Idle extends Schema.TaggedClass<Idle>("Idle")("Idle", {}) {}
4110
- * const States = Machine.defineStates({ Idle })
4305
+ * const States = Machine.states({ Idle })
4111
4306
  * const machine = Machine.make({
4112
4307
  * states: States.states,
4113
4308
  * events: Machine.events(),
@@ -4129,72 +4324,76 @@ export declare const encodeSnapshot: <const States extends Machine.StateSchemas,
4129
4324
  * @since 0.4.0
4130
4325
  */
4131
4326
  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>>;
4132
- type EffectInvokeSource<States extends Machine.StateSchemas, Events extends ReadonlyArray<Machine.TaggedSchema>, Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, Source extends (context: Machine.InvokeContext<States, Events, Emits, StateId, readonly [], readonly []>) => Effect.Effect<unknown, unknown, unknown>> = {
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>> = {
4133
4328
  readonly id: InvokeLifecycleId;
4134
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;
4135
4345
  readonly after?: never;
4136
4346
  readonly logic?: never;
4137
4347
  readonly child?: never;
4138
4348
  readonly address?: never;
4139
4349
  readonly onSnapshot?: never;
4140
4350
  };
4141
- type EffectDoneHandler<States extends Machine.StateSchemas, Events extends ReadonlyArray<Machine.TaggedSchema>, Emits 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>>>, readonly [], readonly []>>;
4142
- type EffectFailureHandler<States extends Machine.StateSchemas, Events extends ReadonlyArray<Machine.TaggedSchema>, Emits 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>>>, readonly [], readonly []>>;
4143
- type EffectInvokeResult<States extends Machine.StateSchemas, Events extends ReadonlyArray<Machine.TaggedSchema>, Emits 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, readonly [], readonly []> & Machine.InvokeTyped<Effect.Success<ReturnType<Source>>, Effect.Error<ReturnType<Source>>, Effect.Services<ReturnType<Source>>, never>;
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>;
4144
4356
  type InvokeChannelIsNever<Value> = IsAny<Value> extends true ? false : [Value] extends [never] ? true : false;
4145
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>> = {
4146
4358
  readonly id: InvokeLifecycleId;
4147
4359
  readonly effect: Source;
4360
+ readonly stream?: never;
4148
4361
  readonly after?: never;
4149
4362
  readonly logic?: never;
4150
4363
  readonly child?: never;
4151
4364
  readonly address?: never;
4365
+ readonly onElement?: never;
4152
4366
  readonly onSnapshot?: never;
4153
4367
  };
4154
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>>;
4155
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>>;
4156
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>;
4157
- /** Type evidence retained for a case created by a conditional transition's local builder. */
4158
- interface TransitionCaseTyped {
4159
- readonly [TransitionCaseTypeId]: true;
4160
- }
4161
- /** Locally bound constructor that preserves each conditional transition case independently. */
4162
- interface TransitionCaseConstructor<States extends Machine.StateSchemas, Events extends ReadonlyArray<Machine.TaggedSchema>, Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateNodeIdentifier<States>, Context> {
4163
- <const Selection extends Machine.TargetSelection<any, any, any>, const Match>(config: Machine.TransitionCaseInput<States, Events, Emits, StateId, Context, Selection, Match>): Machine.TransitionCaseInput<States, Events, Emits, StateId, Context, Selection, Match> & TransitionCaseTyped;
4164
- }
4165
- /**
4166
- * Captures one exact transition topology while preserving handler inference.
4167
- *
4168
- * @category constructors
4169
- * @since 0.14.0
4170
- */
4171
- type ConditionalTransitionResult<States extends Machine.StateSchemas, Events extends ReadonlyArray<Machine.TaggedSchema>, Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateNodeIdentifier<States>, Context, Reenter extends boolean, Cases extends readonly [
4172
- TransitionCaseTyped,
4173
- ...ReadonlyArray<TransitionCaseTyped>
4174
- ], OtherwiseSelection extends Machine.TargetSelection<any, any, any>> = Omit<Machine.TransitionConditionalInput<States, Events, Emits, StateId, Context, Reenter, Cases, OtherwiseSelection>, "cases"> & {
4175
- readonly cases: Cases;
4176
- } & Machine.TransitionTyped<States, Events, Emits, StateId, Context, Reenter>;
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
+ type TransitionBranchRecordError<Message extends string, Key extends PropertyKey = never> = {
4374
+ readonly "~effect/Machine/TransitionBranchRecordError": Message;
4375
+ readonly key: Key;
4376
+ };
4377
+ type InvalidStaticTransitionBranchKey<Branches> = Extract<keyof Branches, "" | number | symbol>;
4378
+ 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>>;
4177
4379
  /**
4178
- * Contextually types direct and conditional transition definitions.
4380
+ * Contextually types direct and branching transition definitions.
4179
4381
  *
4180
4382
  * @category constructors
4181
4383
  * @since 0.14.0
4182
4384
  */
4183
4385
  export interface TransitionConstructor {
4184
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>);
4185
- <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateNodeIdentifier<States>, Context, const Cases extends readonly [
4186
- TransitionCaseTyped,
4187
- ...ReadonlyArray<TransitionCaseTyped>
4188
- ], const OtherwiseSelection extends Machine.TargetSelection<any, any, any>, Reenter extends boolean = never>(config: Machine.TransitionConditionalInput<States, Events, Emits, StateId, Context, Reenter, Cases, OtherwiseSelection>): ConditionalTransitionResult<States, Events, Emits, StateId, Context, Reenter, Cases, OtherwiseSelection>;
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>;
4189
4388
  }
4190
4389
  /**
4191
4390
  * Defines a statically inspectable transition.
4192
4391
  *
4193
4392
  * It is required for every event, lifecycle, choice, and invocation transition
4194
4393
  * so the destination selected by `target` can contextually type the
4195
- * corresponding resolver. Conditional transitions use the locally bound
4196
- * `branch` constructor so every case independently infers its matched value and
4197
- * selected destination, with no limit on the number of cases.
4394
+ * corresponding resolver. Branching transitions declare every possible
4395
+ * destination up front, then select one through ordinary TypeScript control
4396
+ * flow in `resolve`.
4198
4397
  *
4199
4398
  * ```ts
4200
4399
  * Machine.transition({
@@ -4203,18 +4402,13 @@ export interface TransitionConstructor {
4203
4402
  * })
4204
4403
  *
4205
4404
  * Machine.transition({
4206
- * cases: (branch) => [
4207
- * branch({
4208
- * title: "has cached data",
4209
- * when: ({ event }) => event.cached,
4210
- * target: (to) => to.full.Ready(),
4211
- * resolve: ({ match, target }) => target.from({ data: match })
4212
- * })
4213
- * ],
4214
- * otherwise: {
4215
- * target: (to) => to.full.Loading(),
4216
- * resolve: ({ target }) => target.from()
4217
- * }
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()
4218
4412
  * })
4219
4413
  * ```
4220
4414
  *
@@ -4222,6 +4416,39 @@ export interface TransitionConstructor {
4222
4416
  * @since 0.14.0
4223
4417
  */
4224
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;
4225
4452
  /**
4226
4453
  * Machine-bound invocation constructor that preserves the owning machine's
4227
4454
  * public input and parent protocols in every invocation callback.
@@ -4254,6 +4481,32 @@ export interface Invoker<States extends Machine.StateSchemas, Events extends Rea
4254
4481
  readonly onDone?: never;
4255
4482
  readonly onFailure?: never;
4256
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>;
4257
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>;
4258
4511
  <StateId extends Machine.StateIdentifier<States>, const Source extends (context: Machine.InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>) => unknown, Address extends ChildAddress<never>>(config: {
4259
4512
  readonly logic: Source;
@@ -4276,25 +4529,27 @@ export interface Invoker<States extends Machine.StateSchemas, Events extends Rea
4276
4529
  /**
4277
4530
  * Preserves inference for a state-owned invocation configuration.
4278
4531
  *
4279
- * Use `effect` for one-shot work, `after` for a cancellable timer, `logic` for
4280
- * reusable process logic, or `child` for a complete child machine. `onDone` is
4281
- * required whenever the source can complete with an output, while `onFailure`
4282
- * is required only when the source has a typed failure channel.
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.
4283
4538
  *
4284
4539
  * This constructor is an identity at runtime, but preserves lifecycle callback
4285
- * inference through published declarations. Effect factories run when their
4286
- * owning state is entered and infer the owner context, output, error, and
4287
- * service channels together without a return annotation. Durations may be
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
4288
4544
  * supplied directly or derived from the owning state's entry context. Logic
4289
4545
  * invocations require both a lifecycle `id` and a typed communication
4290
4546
  * `address`. Child descriptors already own their identity, so `id` and
4291
4547
  * `address` must not be repeated.
4292
4548
  *
4293
- * Owner references are intentionally non-sendable here because this standalone
4294
- * constructor does not know the owning definition. When a callback sends to
4295
- * `self` or `parent`, use the bound constructor on the owning definition
4296
- * (`definition.invoke(...)`) so the exact public input and `parentEvents`
4297
- * protocols are available.
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.
4298
4553
  *
4299
4554
  * ```ts
4300
4555
  * invoke: Machine.invoke({
@@ -4319,34 +4574,60 @@ export interface Invoker<States extends Machine.StateSchemas, Events extends Rea
4319
4574
  * @since 0.9.0
4320
4575
  */
4321
4576
  export declare const invoke: {
4322
- <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, readonly [], readonly []>) => Effect.Effect<unknown, unknown, unknown>>(config: EffectInvokeSource<States, Events, Emits, StateId, Source> & {
4323
- readonly onDone: EffectDoneHandler<States, Events, Emits, StateId, Source>;
4324
- readonly onFailure: EffectFailureHandler<States, Events, Emits, StateId, Source>;
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>;
4325
4580
  }, ..._validation: InvokeChannelIsNever<Effect.Success<ReturnType<Source>>> extends true ? [
4326
4581
  "onDone must be omitted when the Effect output is never"
4327
4582
  ] : InvokeChannelIsNever<Effect.Error<ReturnType<Source>>> extends true ? [
4328
4583
  "onFailure must be omitted when the Effect error is never"
4329
- ] : []): EffectInvokeResult<States, Events, Emits, StateId, Source>;
4330
- <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, readonly [], readonly []>) => Effect.Effect<unknown, never, unknown>>(config: EffectInvokeSource<States, Events, Emits, StateId, Source> & {
4331
- readonly onDone: EffectDoneHandler<States, Events, Emits, StateId, Source>;
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>;
4332
4587
  readonly onFailure?: never;
4333
4588
  }, ..._validation: InvokeChannelIsNever<Effect.Success<ReturnType<Source>>> extends true ? [
4334
4589
  "onDone must be omitted when the Effect output is never"
4335
- ] : []): EffectInvokeResult<States, Events, Emits, StateId, Source>;
4336
- <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, readonly [], readonly []>) => Effect.Effect<never, unknown, unknown>>(config: EffectInvokeSource<States, Events, Emits, StateId, Source> & {
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> & {
4337
4592
  readonly onDone?: never;
4338
- readonly onFailure: EffectFailureHandler<States, Events, Emits, StateId, Source>;
4593
+ readonly onFailure: EffectFailureHandler<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
4339
4594
  }, ..._validation: InvokeChannelIsNever<Effect.Error<ReturnType<Source>>> extends true ? [
4340
4595
  "onFailure must be omitted when the Effect error is never"
4341
- ] : []): EffectInvokeResult<States, Events, Emits, StateId, Source>;
4342
- <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, readonly [], readonly []>) => Effect.Effect<never, never, unknown>>(config: EffectInvokeSource<States, Events, Emits, StateId, Source> & {
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> & {
4343
4598
  readonly onDone?: never;
4344
4599
  readonly onFailure?: never;
4345
- }): EffectInvokeResult<States, Events, Emits, StateId, Source>;
4346
- <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>(config: Config & Machine.TimerInvokeArgs<States, Events, Emits, StateId, readonly [], readonly []>): Config & Machine.InvokeOwned<States, Events, Emits, StateId> & Machine.InvokeTyped<void, never, never, never>;
4347
- <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>>(config: Machine.LogicInvokeArgs<States, Events, Emits, StateId, ChildState, ChildEvent, ChildError, ChildRequirements, ChildOutput, ChildInitialError, Address, (context: Machine.InvokeContext<States, Events, Emits, StateId, readonly [], readonly []>) => Logic<ChildState, ChildEvent, ChildError, ChildRequirements, ChildOutput, ChildInitialError>, readonly [], readonly []>): Machine.InvokeConfig<States, Events, Emits, StateId, readonly [], readonly []> & Machine.InvokeTyped<ChildOutput, ChildError, ChildRequirements, ChildInitialError>;
4348
- <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>(config: Config & Machine.LogicInvokeArgs<States, Events, Emits, StateId, ChildState, ChildEvent, ChildError, ChildRequirements, ChildOutput, ChildInitialError, Address, Logic<ChildState, ChildEvent, ChildError, ChildRequirements, ChildOutput, ChildInitialError>, readonly [], readonly []>): Config & Machine.InvokeOwned<States, Events, Emits, StateId> & Machine.InvokeTyped<ChildOutput, ChildError, ChildRequirements, ChildInitialError>;
4349
- <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>(config: Config & Machine.ChildInvokeArgs<States, Events, Emits, StateId, Child["machine"], Child, readonly [], readonly []>): 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"]>>>;
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"]>>>;
4350
4631
  };
4351
4632
  /**
4352
4633
  * Plans the initial state for a machine without executing machine commands.
@@ -4373,7 +4654,7 @@ export declare const invoke: {
4373
4654
  * import { Machine } from "@typeonce/effect-machine"
4374
4655
  *
4375
4656
  * class Idle extends Schema.TaggedClass<Idle>("Idle")("Idle", {}) {}
4376
- * const States = Machine.defineStates({ Idle })
4657
+ * const States = Machine.states({ Idle })
4377
4658
  * const machine = Machine.make({
4378
4659
  * states: States.states,
4379
4660
  * events: Machine.events(),
@@ -4448,9 +4729,8 @@ export declare const initialDefinition: <M extends Machine.Any>(machine: M) => M
4448
4729
  *
4449
4730
  * Event handlers retain their handler-key order within each source state and
4450
4731
  * are followed by eventless and completion handlers. This function does not
4451
- * execute predicates or resolvers. Every direct, conditional, fallback, and
4452
- * targetless branch exposes the destination selected by its required static
4453
- * `target` declaration.
4732
+ * execute resolvers. Every direct, named, and targetless branch exposes the
4733
+ * destination selected by its required static `target` declaration.
4454
4734
  *
4455
4735
  * @category getters
4456
4736
  * @since 0.4.0
@@ -4515,7 +4795,7 @@ export declare const enabled: <const States extends Machine.StateSchemas, const
4515
4795
  * class Off extends Schema.TaggedClass<Off>("Off")("Off", {}) {}
4516
4796
  * class On extends Schema.TaggedClass<On>("On")("On", {}) {}
4517
4797
  * class Toggle extends Schema.TaggedClass<Toggle>("Toggle")("Toggle", {}) {}
4518
- * const States = Machine.defineStates({ Off, On })
4798
+ * const States = Machine.states({ Off, On })
4519
4799
  * const machine = Machine.make({
4520
4800
  * states: States.states,
4521
4801
  * events: Machine.events(Toggle),
@@ -4722,7 +5002,7 @@ export declare const prepare: <const States extends Machine.StateSchemas, const
4722
5002
  * import { Machine } from "@typeonce/effect-machine"
4723
5003
  *
4724
5004
  * class Idle extends Schema.TaggedClass<Idle>("Idle")("Idle", {}) {}
4725
- * const States = Machine.defineStates({ Idle })
5005
+ * const States = Machine.states({ Idle })
4726
5006
  * const machine = Machine.make({
4727
5007
  * states: States.states,
4728
5008
  * events: Machine.events(),
@@ -4775,7 +5055,7 @@ export declare const start: <const States extends Machine.StateSchemas, const Ev
4775
5055
  * import { Machine } from "@typeonce/effect-machine"
4776
5056
  *
4777
5057
  * class Idle extends Schema.TaggedClass<Idle>("Idle")("Idle", {}) {}
4778
- * const States = Machine.defineStates({ Idle })
5058
+ * const States = Machine.states({ Idle })
4779
5059
  * const machine = Machine.make({
4780
5060
  * states: States.states,
4781
5061
  * events: Machine.events(),