@typeonce/effect-machine 0.9.0 → 0.10.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 (92) hide show
  1. package/README.md +128 -28
  2. package/dist/Machine.d.ts +334 -238
  3. package/dist/Machine.d.ts.map +1 -1
  4. package/dist/Machine.js +45 -76
  5. package/dist/Machine.js.map +1 -1
  6. package/dist/internal/machine/atom.d.ts +6 -2
  7. package/dist/internal/machine/atom.d.ts.map +1 -1
  8. package/dist/internal/machine/atom.js +5 -0
  9. package/dist/internal/machine/atom.js.map +1 -1
  10. package/dist/internal/machine/cluster.d.ts.map +1 -1
  11. package/dist/internal/machine/cluster.js +2 -1
  12. package/dist/internal/machine/cluster.js.map +1 -1
  13. package/dist/internal/machine/command.js +2 -2
  14. package/dist/internal/machine/command.js.map +1 -1
  15. package/dist/internal/machine/commandRuntime.d.ts.map +1 -1
  16. package/dist/internal/machine/commandRuntime.js +6 -3
  17. package/dist/internal/machine/commandRuntime.js.map +1 -1
  18. package/dist/internal/machine/configuration.d.ts +8 -1
  19. package/dist/internal/machine/configuration.d.ts.map +1 -1
  20. package/dist/internal/machine/configuration.js +9 -4
  21. package/dist/internal/machine/configuration.js.map +1 -1
  22. package/dist/internal/machine/errors.d.ts +1 -1
  23. package/dist/internal/machine/errors.d.ts.map +1 -1
  24. package/dist/internal/machine/executionPlan.d.ts +3 -3
  25. package/dist/internal/machine/executionPlan.d.ts.map +1 -1
  26. package/dist/internal/machine/executionPlan.js +50 -25
  27. package/dist/internal/machine/executionPlan.js.map +1 -1
  28. package/dist/internal/machine/invocation.d.ts.map +1 -1
  29. package/dist/internal/machine/invocation.js +3 -2
  30. package/dist/internal/machine/invocation.js.map +1 -1
  31. package/dist/internal/machine/machine.d.ts +14 -19
  32. package/dist/internal/machine/machine.d.ts.map +1 -1
  33. package/dist/internal/machine/machine.js +12 -10
  34. package/dist/internal/machine/machine.js.map +1 -1
  35. package/dist/internal/machine/planner.d.ts +2 -1
  36. package/dist/internal/machine/planner.d.ts.map +1 -1
  37. package/dist/internal/machine/planner.js +61 -24
  38. package/dist/internal/machine/planner.js.map +1 -1
  39. package/dist/internal/machine/process.d.ts.map +1 -1
  40. package/dist/internal/machine/process.js +8 -8
  41. package/dist/internal/machine/process.js.map +1 -1
  42. package/dist/internal/machine/protocol.d.ts +7 -13
  43. package/dist/internal/machine/protocol.d.ts.map +1 -1
  44. package/dist/internal/machine/protocol.js +128 -50
  45. package/dist/internal/machine/protocol.js.map +1 -1
  46. package/dist/internal/machine/runtime.d.ts +8 -2
  47. package/dist/internal/machine/runtime.d.ts.map +1 -1
  48. package/dist/internal/machine/runtime.js +86 -8
  49. package/dist/internal/machine/runtime.js.map +1 -1
  50. package/dist/internal/machine/topology.d.ts +7 -0
  51. package/dist/internal/machine/topology.d.ts.map +1 -1
  52. package/dist/internal/machine/topology.js +6 -0
  53. package/dist/internal/machine/topology.js.map +1 -1
  54. package/dist/internal/testing/machine/finiteModel.js +1 -1
  55. package/dist/internal/testing/machine/finiteModel.js.map +1 -1
  56. package/dist/internal/testing/machine/runtime.d.ts.map +1 -1
  57. package/dist/internal/testing/machine/runtime.js +2 -1
  58. package/dist/internal/testing/machine/runtime.js.map +1 -1
  59. package/dist/internal/testing/machine/verification.d.ts.map +1 -1
  60. package/dist/internal/testing/machine/verification.js +5 -3
  61. package/dist/internal/testing/machine/verification.js.map +1 -1
  62. package/dist/testing/MachineTest.d.ts +7 -7
  63. package/dist/testing/MachineTest.js +7 -7
  64. package/dist/unstable/cluster/ClusterMachine.d.ts +1 -1
  65. package/dist/unstable/cluster/ClusterMachine.js +1 -1
  66. package/dist/unstable/reactivity/AtomMachine.d.ts +25 -8
  67. package/dist/unstable/reactivity/AtomMachine.d.ts.map +1 -1
  68. package/dist/unstable/reactivity/AtomMachine.js +18 -3
  69. package/dist/unstable/reactivity/AtomMachine.js.map +1 -1
  70. package/docs/agent-guide.md +143 -48
  71. package/package.json +1 -1
  72. package/src/Machine.ts +559 -307
  73. package/src/internal/machine/atom.ts +35 -10
  74. package/src/internal/machine/cluster.ts +2 -1
  75. package/src/internal/machine/command.ts +2 -2
  76. package/src/internal/machine/commandRuntime.ts +9 -4
  77. package/src/internal/machine/configuration.ts +23 -5
  78. package/src/internal/machine/errors.ts +1 -1
  79. package/src/internal/machine/executionPlan.ts +74 -29
  80. package/src/internal/machine/invocation.ts +3 -2
  81. package/src/internal/machine/machine.ts +68 -49
  82. package/src/internal/machine/planner.ts +68 -24
  83. package/src/internal/machine/process.ts +18 -8
  84. package/src/internal/machine/protocol.ts +207 -68
  85. package/src/internal/machine/runtime.ts +135 -9
  86. package/src/internal/machine/topology.ts +15 -0
  87. package/src/internal/testing/machine/finiteModel.ts +1 -1
  88. package/src/internal/testing/machine/runtime.ts +2 -1
  89. package/src/internal/testing/machine/verification.ts +5 -3
  90. package/src/testing/MachineTest.ts +7 -7
  91. package/src/unstable/cluster/ClusterMachine.ts +1 -1
  92. package/src/unstable/reactivity/AtomMachine.ts +42 -10
package/dist/Machine.d.ts CHANGED
@@ -38,6 +38,8 @@ export declare const TypeId: TypeId;
38
38
  declare const MachineOutputStatesTypeId: unique symbol;
39
39
  declare const MachineTypeId: unique symbol;
40
40
  declare const EventConstructionTypeId: unique symbol;
41
+ declare const EmittedEventConstructionTypeId: unique symbol;
42
+ declare const EventProtocolTypeId: unique symbol;
41
43
  declare const ChildMachineLogicTypeId: typeof internal.ChildMachineLogicTypeId;
42
44
  /**
43
45
  * Type identifier used for the synthetic event passed to startup lifecycle
@@ -92,10 +94,10 @@ type IsAny<A> = 0 extends (1 & A) ? true : false;
92
94
  * @category models
93
95
  * @since 0.4.0
94
96
  */
95
- export interface Machine<States extends Machine.StateSchemas, Events extends ReadonlyArray<Machine.TaggedSchema>, 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, Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [], OutputStates extends Machine.StateIdentifier<States> = never, InputEvents extends ReadonlyArray<Machine.TaggedSchema> = Events> extends Pipeable {
97
+ export interface Machine<States extends Machine.StateSchemas, Events extends ReadonlyArray<Machine.TaggedSchema>, 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, Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [], OutputStates extends Machine.StateIdentifier<States> = never, InputEvents extends ReadonlyArray<Machine.TaggedSchema> = Events, ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []> extends Pipeable {
96
98
  readonly [TypeId]: TypeId;
97
99
  /** @internal Stable type-level carrier for machine protocol extraction. */
98
- readonly [MachineTypeId]: Machine.TypeCarrier<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents>;
100
+ readonly [MachineTypeId]: Machine.TypeCarrier<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents, ParentEvents>;
99
101
  /** @internal Prevents output implementation evidence from being widened. */
100
102
  readonly [MachineOutputStatesTypeId]: Readonly<Record<OutputStates, true>>;
101
103
  /**
@@ -109,20 +111,31 @@ export interface Machine<States extends Machine.StateSchemas, Events extends Rea
109
111
  *
110
112
  * @since 0.4.0
111
113
  */
112
- readonly events: InputEvents;
114
+ readonly events: Machine.EventProtocol<"public", InputEvents>;
113
115
  /**
114
- * Events reserved for raised events, child emissions, and other machine-local
115
- * work.
116
+ * Events reserved for raised events and other machine-local work.
116
117
  *
117
118
  * @since 0.4.0
118
119
  */
119
- readonly internalEvents: ReadonlyArray<Machine.TaggedSchema>;
120
+ readonly internalEvents: Machine.EventProtocol<"internal", Machine.InternalEventSchemas<Events, InputEvents>>;
120
121
  /**
121
- * Events that the machine may emit to its parent or external adapter.
122
+ * Ephemeral outward notifications published to this actor's observers.
123
+ * Emissions are never delivered implicitly to an owning actor.
122
124
  *
123
125
  * @since 0.4.0
124
126
  */
125
- readonly emits: Emits;
127
+ readonly emittedEvents: Machine.EventProtocol<"emitted", Emits>;
128
+ /**
129
+ * Public input events accepted by an owning actor when this machine is
130
+ * running as a child.
131
+ *
132
+ * The protocol types the optional `parent` actor reference exposed to
133
+ * handlers and is checked against a concrete parent's public events at
134
+ * composition boundaries.
135
+ *
136
+ * @since 0.10.0
137
+ */
138
+ readonly parentEvents: Machine.EventProtocol<"public", ParentEvents>;
126
139
  /**
127
140
  * Optional schema used to decode the machine input before initialization.
128
141
  *
@@ -151,7 +164,7 @@ export interface Machine<States extends Machine.StateSchemas, Events extends Rea
151
164
  *
152
165
  * @since 0.4.0
153
166
  */
154
- readonly handle: Machine.Handler<States, Events, Emits, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, OutputStates, InputEvents>;
167
+ readonly handle: Machine.Handler<States, Events, Emits, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, OutputStates, InputEvents, ParentEvents>;
155
168
  /** @internal */
156
169
  readonly initial: (...args: [...Machine.InputArgs<Input>]) => Machine.InitialResult<States, InitialE, InitialR>;
157
170
  }
@@ -257,7 +270,8 @@ export type PlanningServices<Requirements> = Exclude<Requirements, ActionRequire
257
270
  */
258
271
  export type ExecutionServices<Requirements> = Exclude<PlanningServices<Requirements>, MachineRuntimeRequirement> | Exclude<ActionServices<Requirements>, MachineRuntimeRequirement>;
259
272
  /**
260
- * Managed runtime capability used to deliver raised and emitted events.
273
+ * Managed runtime capability used to deliver raised events and publish
274
+ * emitted notifications.
261
275
  *
262
276
  * @category models
263
277
  * @since 0.4.0
@@ -270,11 +284,34 @@ export interface Runtime<in Events, in Emits> {
270
284
  */
271
285
  readonly raise: (event: Machine.EventInput<Events>) => Effect.Effect<void, MachineSchemaDecodeError | StoppedError>;
272
286
  /**
273
- * Emits an event through the running machine's parent boundary.
287
+ * Publishes an ephemeral notification to the running actor's observers.
274
288
  *
275
289
  * @since 0.4.0
276
290
  */
277
- readonly sendParent: (event: Emits) => Effect.Effect<void, MachineSchemaDecodeError | StoppedError>;
291
+ readonly emit: (event: Machine.EmittedEventInput<Emits>) => Effect.Effect<void, MachineSchemaDecodeError | StoppedError>;
292
+ }
293
+ /**
294
+ * Minimal typed reference accepted by targeted actor commands.
295
+ *
296
+ * @category models
297
+ * @since 0.10.0
298
+ */
299
+ export interface ActorRef<in Event> {
300
+ readonly id: string;
301
+ readonly sessionId: string;
302
+ readonly send: (event: Event) => Effect.Effect<void, StoppedError>;
303
+ }
304
+ /**
305
+ * Actor references available while evaluating machine behavior.
306
+ *
307
+ * @category models
308
+ * @since 0.10.0
309
+ */
310
+ export interface ActorContext<InputEvents extends ReadonlyArray<Machine.TaggedSchema>, ParentEvents extends ReadonlyArray<Machine.TaggedSchema>> {
311
+ /** Reference to the current actor. Sending queues a later mailbox event. */
312
+ readonly self: ActorRef<Machine.EventInputOf<InputEvents>>;
313
+ /** Reference to the owning actor, or `undefined` when running as a root. */
314
+ readonly parent: ActorRef<Machine.EventInputOf<ParentEvents>> | undefined;
278
315
  }
279
316
  /**
280
317
  * Synchronous commands available while a machine transition is being
@@ -287,10 +324,11 @@ export interface Runtime<in Events, in Emits> {
287
324
  export interface Enqueue<in Events, in Emits> {
288
325
  /** Raises an event inside the current macrostep. */
289
326
  readonly raise: (event: Machine.EventInput<Events>) => void;
290
- /** Emits an event through the machine's parent boundary. */
291
- readonly emit: (event: Emits) => void;
327
+ /** Publishes an ephemeral notification to this actor's observers. */
328
+ readonly emit: (event: Machine.EmittedEventInput<Emits>) => void;
292
329
  /** Sends an event to an invoked child after the transition is selected. */
293
330
  readonly sendTo: {
331
+ <Event>(target: ActorRef<Event>, event: Event): void;
294
332
  <Child extends ChildMachine.Any>(child: Child, event: ChildMachine.Event<Child>): void;
295
333
  <Address extends ChildAddress<never>>(child: Address, event: ChildAddress.Event<Address>): void;
296
334
  };
@@ -308,7 +346,7 @@ export interface Enqueue<in Events, in Emits> {
308
346
  */
309
347
  export type Command = {
310
348
  readonly _tag: "SendTo";
311
- readonly child: ChildMachine.Any | ChildAddress<never>;
349
+ readonly target: ActorRef<unknown> | ChildMachine.Any | ChildAddress<never>;
312
350
  readonly event: unknown;
313
351
  } | {
314
352
  readonly _tag: "Stop";
@@ -451,9 +489,11 @@ type EventProtocolError<Message extends string, Tag extends PropertyKey = never>
451
489
  type DuplicateEventTag<Events extends ReadonlyArray<Machine.TaggedSchema>, Seen extends PropertyKey = never> = number extends Events["length"] ? never : Events extends readonly [
452
490
  infer Head extends Machine.TaggedSchema,
453
491
  ...infer Tail extends ReadonlyArray<Machine.TaggedSchema>
454
- ] ? Machine.TagOf<Head> extends infer Tag extends PropertyKey ? Tag extends Seen ? Tag | DuplicateEventTag<Tail, Seen> : DuplicateEventTag<Tail, Seen | Tag> : never : never;
492
+ ] ? Machine.TagOf<Head> extends infer Tag extends PropertyKey ? Extract<Tag, Seen> | DuplicateEventTag<Tail, Seen | Tag> : never : never;
455
493
  type ValidateInputEventProtocol<InputEvents extends ReadonlyArray<Machine.TaggedSchema>, DuplicateInput extends PropertyKey = DuplicateEventTag<InputEvents>> = [DuplicateInput] extends [never] ? unknown : EventProtocolError<"Public event tags must be unique", DuplicateInput>;
494
+ type ValidateEmittedEventProtocol<EmittedEvents extends ReadonlyArray<Machine.TaggedSchema>, DuplicateEmitted extends PropertyKey = DuplicateEventTag<EmittedEvents>> = [DuplicateEmitted] extends [never] ? unknown : EventProtocolError<"Emitted event tags must be unique", DuplicateEmitted>;
456
495
  type ValidateInternalEventProtocol<InputEvents extends ReadonlyArray<Machine.TaggedSchema>, InternalEvents extends ReadonlyArray<Machine.TaggedSchema>, DuplicateInternal extends PropertyKey = DuplicateEventTag<InternalEvents>, Overlap extends PropertyKey = Extract<Machine.TagOf<InputEvents[number]>, Machine.TagOf<InternalEvents[number]>>> = [DuplicateInternal] extends [never] ? [Overlap] extends [never] ? unknown : EventProtocolError<"Public and internal event tags must be disjoint", Overlap> : EventProtocolError<"Internal event tags must be unique", DuplicateInternal>;
496
+ type ValidateEventProtocolBuilder<Kind extends Machine.EventProtocolKind, Inputs extends ReadonlyArray<Machine.EventProtocolInput<Kind>>, Schemas extends ReadonlyArray<Machine.TaggedSchema> = Machine.EventProtocolInputSchemasOf<Kind, Inputs>, Duplicate extends PropertyKey = DuplicateEventTag<Schemas>> = [Duplicate] extends [never] ? unknown : EventProtocolError<"Event protocol tags must be unique", Duplicate>;
457
497
  declare const SnapshotBuilderStateTypeId: typeof internal.SnapshotBuilderStateTypeId;
458
498
  declare const SnapshotBuilderConstructionTypeId: unique symbol;
459
499
  type SnapshotBuilderComplete<Regions, Constructed extends boolean = false> = {
@@ -825,7 +865,7 @@ export type RuntimeOutcome<State, Error = never, Output = never> = {
825
865
  * @category models
826
866
  * @since 0.4.0
827
867
  */
828
- export interface MachineRef<out State, in Event, out Error = never, out Output = never> {
868
+ export interface MachineRef<out State, in Event, out Error = never, out Output = never, out Emitted = never> extends ActorRef<Event> {
829
869
  /** Stable machine definition id, or a generated fallback when none was declared. */
830
870
  readonly id: string;
831
871
  /** Unique identity for this running machine instance. */
@@ -834,8 +874,13 @@ export interface MachineRef<out State, in Event, out Error = never, out Output =
834
874
  readonly state: Effect.Effect<State>;
835
875
  /** Reads the latest lifecycle snapshot. */
836
876
  readonly snapshot: Effect.Effect<RuntimeSnapshot<State, Error, Output>>;
837
- /** Streams lifecycle snapshots published after subscription. */
877
+ /** Streams the current lifecycle snapshot followed by later changes. */
838
878
  readonly changes: Stream.Stream<RuntimeSnapshot<State, Error, Output>>;
879
+ /**
880
+ * Streams ephemeral notifications published after subscription. Emissions
881
+ * are not retained or replayed; the stream completes when the actor stops.
882
+ */
883
+ readonly emissions: Stream.Stream<Emitted>;
839
884
  /** Waits for machine output or fails when execution fails or is stopped. */
840
885
  readonly join: Effect.Effect<Output, Error | StoppedError>;
841
886
  /** Stops this machine instance and its owned child processes. */
@@ -903,13 +948,6 @@ export declare namespace Logic {
903
948
  /**
904
949
  * Machine-local capabilities available while process logic initializes.
905
950
  *
906
- * **Gotchas**
907
- *
908
- * `sendParent` accepts `unknown` because process logic is independent from
909
- * the parent that eventually owns it. Prefer typed process output or an
910
- * invocation lifecycle transition when either can represent the
911
- * communication.
912
- *
913
951
  * @category models
914
952
  * @since 0.4.0
915
953
  */
@@ -920,10 +958,11 @@ export declare namespace Logic {
920
958
  readonly parent: Address<unknown> | undefined;
921
959
  /** Starts a child process owned by this scope. */
922
960
  readonly spawn: Spawn;
923
- /** Sends an untyped event to the owning process. */
924
- readonly sendParent: (event: unknown) => Effect.Effect<void, StoppedError>;
925
- /** Sends an event through a typed parent-local child address. */
926
- readonly sendTo: <Address extends ChildAddress<never>>(id: Address, event: ChildAddress.Event<Address>) => Effect.Effect<void, StoppedError>;
961
+ /** Sends an event to an actor reference or typed parent-local child address. */
962
+ readonly sendTo: {
963
+ <TargetEvent>(target: ActorRef<TargetEvent>, event: TargetEvent): Effect.Effect<void, StoppedError>;
964
+ <Address extends ChildAddress<never>>(id: Address, event: ChildAddress.Event<Address>): Effect.Effect<void, StoppedError>;
965
+ };
927
966
  /** Stops a child process selected by its parent-local address. */
928
967
  readonly stopChild: <Event>(id: ChildAddress<Event>) => Effect.Effect<void>;
929
968
  }
@@ -992,14 +1031,14 @@ export declare namespace ChildMachine {
992
1031
  * @category utility types
993
1032
  * @since 0.4.0
994
1033
  */
995
- type Ref<Child> = Child extends ChildMachine<string, infer M> ? MachineRef<Machine.Snapshot<Machine.States<M>>, Machine.EventInput<Machine.InputEvent<M>>, Machine.Error<M> | ActionError<Machine.Services<M>> | InfiniteTransitionError | MachineSchemaDecodeError | StoppedError, Machine.Output<M>> : never;
1034
+ type Ref<Child> = Child extends ChildMachine<string, infer M> ? MachineRef<Machine.Snapshot<Machine.States<M>>, Machine.EventInput<Machine.InputEvent<M>>, Machine.Error<M> | ActionError<Machine.Services<M>> | InfiniteTransitionError | MachineSchemaDecodeError | StoppedError, Machine.Output<M>, Machine.EmittedEvent<M>> : never;
996
1035
  /**
997
1036
  * Event accepted by the child selected by a descriptor.
998
1037
  *
999
1038
  * @category utility types
1000
1039
  * @since 0.4.0
1001
1040
  */
1002
- type Event<Child> = Ref<Child> extends MachineRef<any, infer Event, any, any> ? Event : never;
1041
+ type Event<Child> = Child extends ChildMachine<string, infer M> ? Machine.EventInput<Machine.InputEvent<M>> : never;
1003
1042
  }
1004
1043
  /**
1005
1044
  * Parent-local address for a child process that can receive events.
@@ -1089,7 +1128,7 @@ export declare namespace Machine {
1089
1128
  *
1090
1129
  * @internal
1091
1130
  */
1092
- interface TypeCarrier<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Input extends Schema.Top, UnhandledStates extends StateIdentifier<States>, E, R, InitialE, InitialR, FinalStates extends StateIdentifier<States>, Output, Emits extends ReadonlyArray<TaggedSchema>, OutputStates extends StateIdentifier<States>, InputEvents extends ReadonlyArray<TaggedSchema>> {
1131
+ interface TypeCarrier<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Input extends Schema.Top, UnhandledStates extends StateIdentifier<States>, E, R, InitialE, InitialR, FinalStates extends StateIdentifier<States>, Output, Emits extends ReadonlyArray<TaggedSchema>, OutputStates extends StateIdentifier<States>, InputEvents extends ReadonlyArray<TaggedSchema>, ParentEvents extends ReadonlyArray<TaggedSchema>> {
1093
1132
  readonly states: States;
1094
1133
  readonly events: Events;
1095
1134
  readonly input: Input;
@@ -1100,9 +1139,10 @@ export declare namespace Machine {
1100
1139
  readonly initialServices: InitialR;
1101
1140
  readonly finalStates: FinalStates;
1102
1141
  readonly output: Output;
1103
- readonly emits: Emits;
1142
+ readonly emittedEvents: Emits;
1104
1143
  readonly outputStates: OutputStates;
1105
1144
  readonly inputEvents: InputEvents;
1145
+ readonly parentEvents: ParentEvents;
1106
1146
  }
1107
1147
  /**
1108
1148
  * Any schema-first machine.
@@ -1119,11 +1159,12 @@ export declare namespace Machine {
1119
1159
  interface Any extends Pipeable {
1120
1160
  readonly [TypeId]: TypeId;
1121
1161
  /** @internal */
1122
- readonly [MachineTypeId]: TypeCarrier<any, any, any, any, any, any, any, any, any, any, any, any, any>;
1162
+ readonly [MachineTypeId]: TypeCarrier<any, any, any, any, any, any, any, any, any, any, any, any, any, any>;
1123
1163
  readonly states: StateSchemas;
1124
- readonly events: ReadonlyArray<TaggedSchema>;
1125
- readonly internalEvents: ReadonlyArray<TaggedSchema>;
1126
- readonly emits: ReadonlyArray<TaggedSchema>;
1164
+ readonly events: EventProtocol.Any<"public">;
1165
+ readonly internalEvents: EventProtocol.Any<"internal">;
1166
+ readonly emittedEvents: EventProtocol.Any<"emitted">;
1167
+ readonly parentEvents: EventProtocol.Any<"public">;
1127
1168
  readonly input: Schema.Top | undefined;
1128
1169
  readonly id: string | undefined;
1129
1170
  /** @internal */
@@ -1213,7 +1254,9 @@ export declare namespace Machine {
1213
1254
  * @category utility types
1214
1255
  * @since 0.4.0
1215
1256
  */
1216
- type Emits<M extends Any> = M[typeof MachineTypeId]["emits"];
1257
+ type EmittedEvents<M extends Any> = M[typeof MachineTypeId]["emittedEvents"];
1258
+ /** @deprecated Use {@link EmittedEvents}. */
1259
+ type Emits<M extends Any> = EmittedEvents<M>;
1217
1260
  /**
1218
1261
  * Extracts state paths with implemented output handlers.
1219
1262
  *
@@ -1228,11 +1271,15 @@ export declare namespace Machine {
1228
1271
  * @since 0.4.0
1229
1272
  */
1230
1273
  type InputEvents<M extends Any> = M[typeof MachineTypeId]["inputEvents"];
1231
- /** Extracts the internal event schema tuple carried by a machine definition. */
1232
- type InternalEvents<M extends Any> = Events<M> extends readonly [
1233
- ...InputEvents<M>,
1274
+ /** Extracts the public input protocol required from an owning actor. */
1275
+ type ParentEvents<M extends Any> = M[typeof MachineTypeId]["parentEvents"];
1276
+ /** Extracts an internal event schema tuple from the complete and public protocols. */
1277
+ type InternalEventSchemas<Events extends ReadonlyArray<TaggedSchema>, InputEvents extends ReadonlyArray<TaggedSchema>> = Events extends readonly [
1278
+ ...InputEvents,
1234
1279
  ...infer Internal extends ReadonlyArray<TaggedSchema>
1235
- ] ? Internal : readonly [];
1280
+ ] ? readonly [...Internal] : readonly [];
1281
+ /** Extracts the internal event schema tuple carried by a machine definition. */
1282
+ type InternalEvents<M extends Any> = InternalEventSchemas<Events<M>, InputEvents<M>>;
1236
1283
  /**
1237
1284
  * Extracts the complete event protocol handled inside a machine.
1238
1285
  *
@@ -1260,34 +1307,83 @@ export declare namespace Machine {
1260
1307
  readonly [EventConstructionTypeId]: Event;
1261
1308
  readonly _tag: Event["_tag"];
1262
1309
  }
1310
+ /** Opaque construction returned by {@link emittedEvents}. */
1311
+ interface EmittedEventConstruction<out Event extends {
1312
+ readonly _tag: PropertyKey;
1313
+ }> {
1314
+ readonly [EmittedEventConstructionTypeId]: Event;
1315
+ readonly _tag: Event["_tag"];
1316
+ }
1263
1317
  /** A decoded event or a deferred machine-bound construction of that event. */
1264
1318
  type EventInput<Event> = Event | (Event extends {
1265
1319
  readonly _tag: PropertyKey;
1266
1320
  } ? EventConstruction<Event> : never);
1321
+ /** A decoded emitted event or a deferred emitted-event construction. */
1322
+ type EmittedEventInput<Event> = Event | (Event extends {
1323
+ readonly _tag: PropertyKey;
1324
+ } ? EmittedEventConstruction<Event> : never);
1267
1325
  /** Event inputs accepted for a schema tuple at machine delivery boundaries. */
1268
1326
  type EventInputOf<Events extends ReadonlyArray<TaggedSchema>> = EventInput<EventOf<Events>>;
1327
+ /** Identifies whether an event protocol is accepted publicly or only inside a machine. */
1328
+ type EventProtocolKind = "public" | "internal" | "emitted";
1269
1329
  type EventConstructorInput<EventSchema extends TaggedSchema> = Omit<EventSchema["~type.make.in"], "_tag">;
1270
- type EventConstructor<EventSchema extends TaggedSchema, Tag extends EventSchema["Type"]["_tag"]> = {} extends EventConstructorInput<EventSchema> ? (input?: EventConstructorInput<EventSchema>) => EventConstruction<EventByTag<readonly [EventSchema], Tag>> : (input: EventConstructorInput<EventSchema>) => EventConstruction<EventByTag<readonly [EventSchema], Tag>>;
1271
- type EventConstructorsForSchema<EventSchema extends TaggedSchema> = EventSchema extends {
1330
+ type EventConstructor<EventSchema extends TaggedSchema, Tag extends EventSchema["Type"]["_tag"], Kind extends EventProtocolKind> = {} extends EventConstructorInput<EventSchema> ? (input?: EventConstructorInput<EventSchema>) => Kind extends "emitted" ? EmittedEventConstruction<EventByTag<readonly [EventSchema], Tag>> : EventConstruction<EventByTag<readonly [EventSchema], Tag>> : (input: EventConstructorInput<EventSchema>) => Kind extends "emitted" ? EmittedEventConstruction<EventByTag<readonly [EventSchema], Tag>> : EventConstruction<EventByTag<readonly [EventSchema], Tag>>;
1331
+ type FiniteEventTag<Tag extends PropertyKey> = string extends Tag ? never : number extends Tag ? never : symbol extends Tag ? never : Tag;
1332
+ type EventConstructorsForSchema<EventSchema extends TaggedSchema, Kind extends EventProtocolKind> = EventSchema extends {
1272
1333
  readonly cases: infer Cases extends Readonly<Record<PropertyKey, TaggedSchema>>;
1273
1334
  } ? {
1274
- readonly [Tag in keyof Cases]: Tag extends Cases[Tag]["Type"]["_tag"] ? EventConstructor<Cases[Tag], Tag> : never;
1335
+ readonly [Tag in keyof Cases]: Tag extends Cases[Tag]["Type"]["_tag"] ? EventConstructor<Cases[Tag], Tag, Kind> : never;
1275
1336
  } : EventSchema extends {
1276
1337
  readonly members: infer Members extends ReadonlyArray<TaggedSchema>;
1277
- } ? Types.UnionToIntersection<EventConstructorsForSchema<Members[number]>> : {
1278
- readonly [Tag in EventSchema["Type"]["_tag"]]: EventConstructor<EventSchema, Tag>;
1338
+ } ? Types.UnionToIntersection<EventConstructorsForSchema<Members[number], Kind>> : {
1339
+ readonly [Tag in FiniteEventTag<EventSchema["Type"]["_tag"]>]: EventConstructor<EventSchema, Tag, Kind>;
1279
1340
  };
1280
1341
  /** Protocol-bound constructors keyed by each configured event tag. */
1281
- type EventConstructors<Events extends ReadonlyArray<TaggedSchema>> = {
1282
- readonly [Tag in keyof Types.UnionToIntersection<EventConstructorsForSchema<Events[number]>>]: Types.UnionToIntersection<EventConstructorsForSchema<Events[number]>>[Tag];
1342
+ type EventConstructors<Events extends ReadonlyArray<TaggedSchema>, Kind extends EventProtocolKind = "public"> = {
1343
+ readonly [Tag in keyof Types.UnionToIntersection<EventConstructorsForSchema<Events[number], Kind>>]: Types.UnionToIntersection<EventConstructorsForSchema<Events[number], Kind>>[Tag];
1344
+ };
1345
+ /**
1346
+ * A schema-backed event protocol exposing only deferred event constructors.
1347
+ *
1348
+ * The schema tuple is retained opaquely for machine runtime validation and
1349
+ * type inference. It is not exposed as a runtime property.
1350
+ *
1351
+ * @since 0.10.0
1352
+ */
1353
+ type EventProtocol<Kind extends EventProtocolKind, Schemas extends ReadonlyArray<TaggedSchema>> = EventConstructors<Schemas, Kind> & {
1354
+ readonly [EventProtocolTypeId]: {
1355
+ readonly kind: Kind;
1356
+ readonly schemas: Schemas;
1357
+ };
1283
1358
  };
1359
+ namespace EventProtocol {
1360
+ /** An erased event protocol descriptor retaining its kind and schema carrier. */
1361
+ interface Any<Kind extends EventProtocolKind = EventProtocolKind> {
1362
+ readonly [EventProtocolTypeId]: {
1363
+ readonly kind: Kind;
1364
+ readonly schemas: ReadonlyArray<TaggedSchema>;
1365
+ };
1366
+ }
1367
+ }
1368
+ /** A schema or an existing protocol accepted by an event builder. */
1369
+ type EventProtocolInput<Kind extends EventProtocolKind> = TaggedSchema | EventProtocol.Any<Kind>;
1370
+ type EventProtocolInputSchemas<Kind extends EventProtocolKind, Input extends EventProtocolInput<Kind>> = Input extends EventProtocol<Kind, infer Schemas> ? Schemas : Input extends TaggedSchema ? readonly [Input] : readonly [];
1371
+ /** Flattens schema and protocol inputs into one owned schema tuple. */
1372
+ type EventProtocolInputSchemasOf<Kind extends EventProtocolKind, Inputs extends ReadonlyArray<EventProtocolInput<Kind>>> = Inputs extends readonly [
1373
+ infer Head extends EventProtocolInput<Kind>,
1374
+ ...infer Tail extends ReadonlyArray<EventProtocolInput<Kind>>
1375
+ ] ? readonly [...EventProtocolInputSchemas<Kind, Head>, ...EventProtocolInputSchemasOf<Kind, Tail>] : readonly [];
1376
+ /** @internal Extracts the schema tuple carried opaquely by an event protocol. */
1377
+ type EventProtocolSchemas<Protocol extends EventProtocol.Any> = Protocol[typeof EventProtocolTypeId]["schemas"];
1284
1378
  /**
1285
1379
  * Extracts the event protocol emitted by a machine.
1286
1380
  *
1287
1381
  * @category utility types
1288
1382
  * @since 0.4.0
1289
1383
  */
1290
- type Emit<M extends Any> = EmitOf<Emits<M>>;
1384
+ type EmittedEvent<M extends Any> = EmittedEventOf<Emits<M>>;
1385
+ /** @deprecated Use {@link EmittedEvent}. */
1386
+ type Emit<M extends Any> = EmittedEvent<M>;
1291
1387
  /**
1292
1388
  * A schema whose decoded value contains a `_tag` discriminator.
1293
1389
  *
@@ -1860,7 +1956,9 @@ export declare namespace Machine {
1860
1956
  * @category utility types
1861
1957
  * @since 0.4.0
1862
1958
  */
1863
- type EmitOf<Emits extends ReadonlyArray<TaggedSchema>> = Emits[number]["Type"];
1959
+ type EmittedEventOf<Emits extends ReadonlyArray<TaggedSchema>> = Emits[number]["Type"];
1960
+ /** @deprecated Use {@link EmittedEventOf}. */
1961
+ type EmitOf<Emits extends ReadonlyArray<TaggedSchema>> = EmittedEventOf<Emits>;
1864
1962
  /**
1865
1963
  * Event values received by lifecycle callbacks.
1866
1964
  *
@@ -2260,6 +2358,20 @@ export declare namespace Machine {
2260
2358
  readonly [AncestorStateId in ValuedStateIdentifier<States>]: StateByIdentifier<States, AncestorStateId>;
2261
2359
  }>;
2262
2360
  }
2361
+ /**
2362
+ * Opaque result returned by an explicitly targetless transition.
2363
+ *
2364
+ * The transition remains handled and retains its queued commands, raised
2365
+ * events, and emitted events, but selects no concrete destination. Declared
2366
+ * `targets` constrain only concrete destinations, so this result is always
2367
+ * permitted from ordinary transition handlers.
2368
+ *
2369
+ * @category models
2370
+ * @since 0.10.0
2371
+ */
2372
+ interface NoTarget {
2373
+ readonly [Topology.NoTargetTypeId]: typeof Topology.NoTargetTypeId;
2374
+ }
2263
2375
  /**
2264
2376
  * Transition instruction that restores a history pseudo-state's parent.
2265
2377
  *
@@ -2336,9 +2448,9 @@ export declare namespace Machine {
2336
2448
  *
2337
2449
  * **Details**
2338
2450
  *
2339
- * `local` targets the nearest compound scope for the source state, `branch`
2340
- * targets descendants of the source root, and `full` builds complete
2341
- * snapshots for any root.
2451
+ * `none()` handles without selecting a destination, `local` targets the
2452
+ * nearest compound scope for the source state, `branch` targets descendants
2453
+ * of the source root, and `full` builds complete snapshots for any root.
2342
2454
  *
2343
2455
  * These builders control how the next active configuration is assembled; they
2344
2456
  * do not directly control state re-entry. Exit and entry paths are derived
@@ -2351,6 +2463,17 @@ export declare namespace Machine {
2351
2463
  * @since 0.4.0
2352
2464
  */
2353
2465
  interface TargetBuilder<States extends StateSchemas, Source extends StateNodeIdentifier<States>> {
2466
+ /**
2467
+ * Selects an explicitly targetless transition.
2468
+ *
2469
+ * The event or lifecycle outcome is handled and queued operations are
2470
+ * retained, while the current state configuration remains the transition
2471
+ * result. This remains valid when the handler declares concrete `targets`,
2472
+ * because those paths are an upper bound rather than an exhaustive result.
2473
+ *
2474
+ * @since 0.10.0
2475
+ */
2476
+ readonly none: () => NoTarget;
2354
2477
  /**
2355
2478
  * Moves to another state in the same local group. The value of the state
2356
2479
  * containing that group, and values in other active branches, are kept.
@@ -2388,10 +2511,10 @@ export declare namespace Machine {
2388
2511
  * @category models
2389
2512
  * @since 0.4.0
2390
2513
  */
2391
- interface HandlerContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, EventTag extends TagOf<Events[number]>, E, R> {
2514
+ interface HandlerContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, EventTag extends TagOf<Events[number]>, E, R, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> extends ActorContext<InputEvents, ParentEvents> {
2392
2515
  readonly state: StateByIdentifier<States, StateId>;
2393
- readonly parent: ParentStateValue<States, StateId>;
2394
- readonly parents: ParentStateValues<States, StateId>;
2516
+ readonly containingState: ParentStateValue<States, StateId>;
2517
+ readonly ancestors: ParentStateValues<States, StateId>;
2395
2518
  /** Complete logical configuration captured at the start of this microstep. */
2396
2519
  readonly snapshot: Snapshot<States>;
2397
2520
  readonly event: EventByTag<Events, EventTag>;
@@ -2409,10 +2532,10 @@ export declare namespace Machine {
2409
2532
  * @category models
2410
2533
  * @since 0.4.0
2411
2534
  */
2412
- interface StateActionContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>> {
2535
+ interface StateActionContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> extends ActorContext<InputEvents, ParentEvents> {
2413
2536
  readonly state: StateByIdentifier<States, StateId>;
2414
- readonly parent: ParentStateValue<States, StateId>;
2415
- readonly parents: ParentStateValues<States, StateId>;
2537
+ readonly containingState: ParentStateValue<States, StateId>;
2538
+ readonly ancestors: ParentStateValues<States, StateId>;
2416
2539
  readonly event: LifecycleEvent<Events>;
2417
2540
  }
2418
2541
  /**
@@ -2421,10 +2544,10 @@ export declare namespace Machine {
2421
2544
  * @category models
2422
2545
  * @since 0.4.0
2423
2546
  */
2424
- interface InvokeContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>> {
2547
+ interface InvokeContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> extends ActorContext<InputEvents, ParentEvents> {
2425
2548
  readonly state: StateByIdentifier<States, StateId>;
2426
- readonly parent: ParentStateValue<States, StateId>;
2427
- readonly parents: ParentStateValues<States, StateId>;
2549
+ readonly containingState: ParentStateValue<States, StateId>;
2550
+ readonly ancestors: ParentStateValues<States, StateId>;
2428
2551
  readonly event: LifecycleEvent<Events>;
2429
2552
  }
2430
2553
  /**
@@ -2433,11 +2556,11 @@ export declare namespace Machine {
2433
2556
  * @category models
2434
2557
  * @since 0.4.0
2435
2558
  */
2436
- interface InvokeSnapshotContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, State, Error, Output> {
2559
+ interface InvokeSnapshotContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, State, Error, Output, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> extends ActorContext<InputEvents, ParentEvents> {
2437
2560
  readonly id: string;
2438
2561
  readonly state: StateByIdentifier<States, StateId>;
2439
- readonly parent: ParentStateValue<States, StateId>;
2440
- readonly parents: ParentStateValues<States, StateId>;
2562
+ readonly containingState: ParentStateValue<States, StateId>;
2563
+ readonly ancestors: ParentStateValues<States, StateId>;
2441
2564
  readonly target: TargetBuilder<States, StateId>;
2442
2565
  readonly snapshot: Extract<RuntimeSnapshot<State, Error, Output>, {
2443
2566
  readonly status: "active";
@@ -2449,21 +2572,21 @@ export declare namespace Machine {
2449
2572
  * @category models
2450
2573
  * @since 0.4.0
2451
2574
  */
2452
- interface InvokeDoneContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, Output> {
2575
+ interface InvokeDoneContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, Output, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> extends ActorContext<InputEvents, ParentEvents> {
2453
2576
  readonly id: string;
2454
2577
  readonly state: StateByIdentifier<States, StateId>;
2455
- readonly parent: ParentStateValue<States, StateId>;
2456
- readonly parents: ParentStateValues<States, StateId>;
2578
+ readonly containingState: ParentStateValue<States, StateId>;
2579
+ readonly ancestors: ParentStateValues<States, StateId>;
2457
2580
  readonly snapshot: Snapshot<States>;
2458
2581
  readonly target: TargetBuilder<States, StateId>;
2459
2582
  readonly output: Output;
2460
2583
  }
2461
2584
  /** Context passed to an invocation typed-failure transition. */
2462
- interface InvokeFailureContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, Error> {
2585
+ 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 ActorContext<InputEvents, ParentEvents> {
2463
2586
  readonly id: string;
2464
2587
  readonly state: StateByIdentifier<States, StateId>;
2465
- readonly parent: ParentStateValue<States, StateId>;
2466
- readonly parents: ParentStateValues<States, StateId>;
2588
+ readonly containingState: ParentStateValue<States, StateId>;
2589
+ readonly ancestors: ParentStateValues<States, StateId>;
2467
2590
  readonly snapshot: Snapshot<States>;
2468
2591
  readonly target: TargetBuilder<States, StateId>;
2469
2592
  readonly error: Error;
@@ -2474,10 +2597,10 @@ export declare namespace Machine {
2474
2597
  * @category models
2475
2598
  * @since 0.4.0
2476
2599
  */
2477
- interface AlwaysContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>> {
2600
+ interface AlwaysContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> extends ActorContext<InputEvents, ParentEvents> {
2478
2601
  readonly state: StateByIdentifier<States, StateId>;
2479
- readonly parent: ParentStateValue<States, StateId>;
2480
- readonly parents: ParentStateValues<States, StateId>;
2602
+ readonly containingState: ParentStateValue<States, StateId>;
2603
+ readonly ancestors: ParentStateValues<States, StateId>;
2481
2604
  /** Complete logical configuration captured at the start of this microstep. */
2482
2605
  readonly snapshot: Snapshot<States>;
2483
2606
  readonly event: LifecycleEvent<Events>;
@@ -2496,10 +2619,10 @@ export declare namespace Machine {
2496
2619
  * @category models
2497
2620
  * @since 0.4.0
2498
2621
  */
2499
- interface DoneContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>> {
2622
+ interface DoneContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> extends ActorContext<InputEvents, ParentEvents> {
2500
2623
  readonly state: StateByIdentifier<States, StateId>;
2501
- readonly parent: ParentStateValue<States, StateId>;
2502
- readonly parents: ParentStateValues<States, StateId>;
2624
+ readonly containingState: ParentStateValue<States, StateId>;
2625
+ readonly ancestors: ParentStateValues<States, StateId>;
2503
2626
  /** Complete logical configuration captured at the start of this microstep. */
2504
2627
  readonly snapshot: Snapshot<States>;
2505
2628
  readonly event: LifecycleEvent<Events>;
@@ -2514,9 +2637,9 @@ export declare namespace Machine {
2514
2637
  readonly target: TargetBuilder<States, StateId>;
2515
2638
  }
2516
2639
  /** Context passed to a transient choice resolver. There is no `state` value. */
2517
- interface ChoiceContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, ChoiceId extends ChoiceIdentifier<States>> {
2518
- readonly parent: StateByIdentifier<States, Extract<ImmediateParentStateIdentifier<ChoiceId>, StateIdentifier<States>>>;
2519
- readonly parents: {
2640
+ interface ChoiceContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, ChoiceId extends ChoiceIdentifier<States>, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> extends ActorContext<InputEvents, ParentEvents> {
2641
+ readonly containingState: StateByIdentifier<States, Extract<ImmediateParentStateIdentifier<ChoiceId>, StateIdentifier<States>>>;
2642
+ readonly ancestors: {
2520
2643
  readonly [Parent in Extract<ParentStateIdentifier<ChoiceId>, ValuedStateIdentifier<States>>]: StateByIdentifier<States, Parent>;
2521
2644
  };
2522
2645
  readonly event: LifecycleEvent<Events>;
@@ -2530,8 +2653,8 @@ export declare namespace Machine {
2530
2653
  */
2531
2654
  interface FinalOutputContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>> {
2532
2655
  readonly state: StateByIdentifier<States, StateId>;
2533
- readonly parent: ParentStateValue<States, StateId>;
2534
- readonly parents: ParentStateValues<States, StateId>;
2656
+ readonly containingState: ParentStateValue<States, StateId>;
2657
+ readonly ancestors: ParentStateValues<States, StateId>;
2535
2658
  readonly event: LifecycleEvent<Events>;
2536
2659
  }
2537
2660
  /**
@@ -2554,8 +2677,8 @@ export declare namespace Machine {
2554
2677
  */
2555
2678
  interface ParallelOutputContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>> {
2556
2679
  readonly state: StateByIdentifier<States, StateId>;
2557
- readonly parent: ParentStateValue<States, StateId>;
2558
- readonly parents: ParentStateValues<States, StateId>;
2680
+ readonly containingState: ParentStateValue<States, StateId>;
2681
+ readonly ancestors: ParentStateValues<States, StateId>;
2559
2682
  readonly event: LifecycleEvent<Events>;
2560
2683
  readonly outputs: ParallelOutputRegions<States, StateId>;
2561
2684
  }
@@ -2582,14 +2705,15 @@ export declare namespace Machine {
2582
2705
  *
2583
2706
  * **Details**
2584
2707
  *
2585
- * Handlers return snapshots for complete state replacement or target builder
2586
- * results for path-safe partial transitions. Raw decoded state values are not
2587
- * accepted at transition boundaries.
2708
+ * Handlers return snapshots for complete state replacement, target builder
2709
+ * results for path-safe partial transitions, or `target.none()` for an
2710
+ * explicitly targetless transition. Raw decoded state values and `void` are
2711
+ * not accepted at transition boundaries.
2588
2712
  *
2589
2713
  * @category utility types
2590
2714
  * @since 0.4.0
2591
2715
  */
2592
- type HandlerResult<States extends StateSchemas, E, R> = Snapshot<States> | Target<States, StateIdentifier<States>> | HistoryTarget<States, HistoryIdentifier<States>> | ChoiceTarget<States, ChoiceIdentifier<States>> | StateConstruction<Snapshot<States> | Target<States, StateIdentifier<States>> | HistoryTarget<States, HistoryIdentifier<States>> | ChoiceTarget<States, ChoiceIdentifier<States>>> | void;
2716
+ type HandlerResult<States extends StateSchemas, E, R> = Snapshot<States> | Target<States, StateIdentifier<States>> | HistoryTarget<States, HistoryIdentifier<States>> | ChoiceTarget<States, ChoiceIdentifier<States>> | StateConstruction<Snapshot<States> | Target<States, StateIdentifier<States>> | HistoryTarget<States, HistoryIdentifier<States>> | ChoiceTarget<States, ChoiceIdentifier<States>>> | NoTarget;
2593
2717
  /** A choice resolver must always select a typed target synchronously. */
2594
2718
  type ChoiceResult<States extends StateSchemas, E, R> = Snapshot<States> | Target<States, StateIdentifier<States>> | HistoryTarget<States, HistoryIdentifier<States>> | ChoiceTarget<States, ChoiceIdentifier<States>> | StateConstruction<Snapshot<States> | Target<States, StateIdentifier<States>> | HistoryTarget<States, HistoryIdentifier<States>> | ChoiceTarget<States, ChoiceIdentifier<States>>>;
2595
2719
  /**
@@ -2748,6 +2872,14 @@ export declare namespace Machine {
2748
2872
  } ? Emitted : Invoke extends {
2749
2873
  readonly child: ChildMachine<string, infer M>;
2750
2874
  } ? Emit<M> : never;
2875
+ /** Public parent inputs required by an invoked child machine. */
2876
+ type InvokeParentEvents<Invoke> = Invoke extends {
2877
+ readonly [InvokeTypeId]: {
2878
+ readonly parentEvents: Types.Covariant<infer ParentEvent>;
2879
+ };
2880
+ } ? ParentEvent : IsAny<Invoke> extends true ? never : Invoke extends {
2881
+ readonly child: ChildMachine<string, infer M>;
2882
+ } ? EventOf<ParentEvents<M>> : never;
2751
2883
  /** Extracts transition results returned by invocation lifecycle handlers. */
2752
2884
  type InvokeOutcomeReturn<Invoke> = Invoke extends unknown ? (Invoke extends {
2753
2885
  readonly onDone?: infer Handler;
@@ -2819,13 +2951,14 @@ export declare namespace Machine {
2819
2951
  readonly "~effect/Machine/InvokeOwner"?: Types.Covariant<readonly [States, Events, Emits, StateId]>;
2820
2952
  }
2821
2953
  /** Type evidence retained by {@link invoke} without affecting runtime data. */
2822
- interface InvokeTyped<Output, Error, Requirements, InitialError, Emits = never> {
2954
+ interface InvokeTyped<Output, Error, Requirements, InitialError, Emits = never, ParentEvent = never> {
2823
2955
  readonly [InvokeTypeId]: {
2824
2956
  readonly output: Types.Covariant<Output>;
2825
2957
  readonly error: Types.Covariant<Error>;
2826
2958
  readonly requirements: Types.Covariant<Requirements>;
2827
2959
  readonly initialError: Types.Covariant<InitialError>;
2828
2960
  readonly emits: Types.Covariant<Emits>;
2961
+ readonly parentEvents: Types.Covariant<ParentEvent>;
2829
2962
  };
2830
2963
  }
2831
2964
  type InvokeConfig<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>> = InvokeOwned<States, Events, Emits, StateId> & ({
@@ -2987,33 +3120,33 @@ export declare namespace Machine {
2987
3120
  * @category models
2988
3121
  * @since 0.4.0
2989
3122
  */
2990
- type ActiveStateConfig<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, E, R> = {
2991
- readonly entry?: (context: StateActionContext<States, Events, Emits, StateId>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => StateActionResult<any, any>;
2992
- readonly exit?: (context: StateActionContext<States, Events, Emits, StateId>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => StateActionResult<any, any>;
3123
+ type ActiveStateConfig<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, E, R, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> = {
3124
+ readonly entry?: (context: StateActionContext<States, Events, Emits, StateId, InputEvents, ParentEvents>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => StateActionResult<any, any>;
3125
+ readonly exit?: (context: StateActionContext<States, Events, Emits, StateId, InputEvents, ParentEvents>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => StateActionResult<any, any>;
2993
3126
  readonly invoke?: InvokeDefinition<States, Events, Emits, StateId>;
2994
- readonly always?: ((context: AlwaysContext<States, Events, Emits, StateId>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => HandlerResult<States, any, any>) | {
3127
+ readonly always?: ((context: AlwaysContext<States, Events, Emits, StateId, InputEvents, ParentEvents>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => HandlerResult<States, any, any>) | {
2995
3128
  /** Statically declared upper bound of possible target paths. */
2996
3129
  readonly targets?: ReadonlyArray<StateNodeIdentifier<States>>;
2997
- readonly transition: (context: AlwaysContext<States, Events, Emits, StateId>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => HandlerResult<States, any, any>;
3130
+ readonly transition: (context: AlwaysContext<States, Events, Emits, StateId, InputEvents, ParentEvents>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => HandlerResult<States, any, any>;
2998
3131
  };
2999
- readonly onDone?: ((context: DoneContext<States, Events, Emits, StateId>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => HandlerResult<States, any, any>) | {
3132
+ readonly onDone?: ((context: DoneContext<States, Events, Emits, StateId, InputEvents, ParentEvents>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => HandlerResult<States, any, any>) | {
3000
3133
  /** Statically declared upper bound of possible target paths. */
3001
3134
  readonly targets?: ReadonlyArray<StateNodeIdentifier<States>>;
3002
- readonly transition: (context: DoneContext<States, Events, Emits, StateId>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => HandlerResult<States, any, any>;
3135
+ readonly transition: (context: DoneContext<States, Events, Emits, StateId, InputEvents, ParentEvents>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => HandlerResult<States, any, any>;
3003
3136
  };
3004
3137
  readonly on?: {
3005
- readonly [EventTag in TagOf<Events[number]>]?: ((context: HandlerContext<States, Events, Emits, StateId, EventTag, E, R>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => HandlerResult<States, any, any>) | {
3138
+ readonly [EventTag in TagOf<Events[number]>]?: ((context: HandlerContext<States, Events, Emits, StateId, EventTag, E, R, InputEvents, ParentEvents>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => HandlerResult<States, any, any>) | {
3006
3139
  readonly reenter?: boolean;
3007
3140
  /**
3008
3141
  * Upper bound of state or history paths this handler may target.
3009
- * Returning `void` is always permitted. Declaring a parent state also
3142
+ * Returning `target.none()` is always permitted. Declaring a parent state also
3010
3143
  * permits concrete descendant targets below it.
3011
3144
  */
3012
3145
  readonly targets?: ReadonlyArray<StateNodeIdentifier<States>>;
3013
- readonly transition: (context: HandlerContext<States, Events, Emits, StateId, EventTag, E, R>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => HandlerResult<States, any, any>;
3146
+ readonly transition: (context: HandlerContext<States, Events, Emits, StateId, EventTag, E, R, InputEvents, ParentEvents>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => HandlerResult<States, any, any>;
3014
3147
  };
3015
3148
  };
3016
- readonly initial?: StateInitialHandler<States, Events, Emits, StateId>;
3149
+ readonly initial?: StateInitialHandler<States, Events, Emits, StateId, InputEvents, ParentEvents>;
3017
3150
  } & ActiveOutputHandlerConfig<States, Events, StateId>;
3018
3151
  /** Values supplied when a statechart implicitly enters a state's initial children. */
3019
3152
  type StateInitialValue<States extends StateSchemas, StateId extends StateIdentifier<States>> = NodeByIdentifier<States, StateId> extends infer Node ? Node extends {
@@ -3026,14 +3159,14 @@ export declare namespace Machine {
3026
3159
  readonly initial: infer Initial;
3027
3160
  } ? Initial extends ActiveStateKey<Children> ? NodeSchema<Children[Initial]> extends never ? never : NodeValue<Children[Initial]> : never : never : never;
3028
3161
  /** Context passed to an implicit child-state initializer. */
3029
- type StateInitialContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>> = StateActionContext<States, Events, Emits, StateId>;
3162
+ type StateInitialContext<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 []> = StateActionContext<States, Events, Emits, StateId, InputEvents, ParentEvents>;
3030
3163
  /** Initial child value implementation for a compound or parallel state. */
3031
- type StateInitialHandler<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>> = (context: StateInitialContext<States, Events, Emits, StateId>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => StateInitialValue<States, StateId>;
3164
+ type StateInitialHandler<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> = (context: StateInitialContext<States, Events, Emits, StateId, InputEvents, ParentEvents>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => StateInitialValue<States, StateId>;
3032
3165
  /** Context used only when a history node has no previously captured record. */
3033
3166
  interface HistoryDefaultContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, ParentId extends StateIdentifier<States>> {
3034
3167
  readonly event: LifecycleEvent<Events>;
3035
3168
  readonly target: HistoryDefaultTargetBuilder<States, ParentId>;
3036
- readonly parent: ParentId;
3169
+ readonly owner: ParentId;
3037
3170
  }
3038
3171
  /**
3039
3172
  * Typed fallback evaluated when a history node has no record yet.
@@ -3050,11 +3183,11 @@ export declare namespace Machine {
3050
3183
  };
3051
3184
  };
3052
3185
  /** Required implementation for a choice pseudo-state. */
3053
- interface ChoiceStateConfig<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, ChoiceId extends ChoiceIdentifier<States>> {
3186
+ interface ChoiceStateConfig<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, ChoiceId extends ChoiceIdentifier<States>, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> {
3054
3187
  readonly choice: {
3055
3188
  /** Statically inspectable upper bound of every possible target. */
3056
3189
  readonly targets: readonly [StateNodeIdentifier<States>, ...ReadonlyArray<StateNodeIdentifier<States>>];
3057
- readonly transition: (context: ChoiceContext<States, Events, Emits, ChoiceId>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => ChoiceResult<States, any, any>;
3190
+ readonly transition: (context: ChoiceContext<States, Events, Emits, ChoiceId, InputEvents, ParentEvents>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => ChoiceResult<States, any, any>;
3058
3191
  };
3059
3192
  readonly entry?: never;
3060
3193
  readonly exit?: never;
@@ -3071,8 +3204,8 @@ export declare namespace Machine {
3071
3204
  * @category models
3072
3205
  * @since 0.4.0
3073
3206
  */
3074
- type FinalStateConfig<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>> = {
3075
- readonly entry?: (context: StateActionContext<States, Events, Emits, StateId>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => StateActionResult<any, any>;
3207
+ type FinalStateConfig<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> = {
3208
+ readonly entry?: (context: StateActionContext<States, Events, Emits, StateId, InputEvents, ParentEvents>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => StateActionResult<any, any>;
3076
3209
  readonly exit?: never;
3077
3210
  readonly always?: never;
3078
3211
  readonly onDone?: never;
@@ -3084,10 +3217,10 @@ export declare namespace Machine {
3084
3217
  * @category models
3085
3218
  * @since 0.4.0
3086
3219
  */
3087
- type HandlerConfig<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, E, R> = NodeByIdentifier<States, StateId> extends {
3220
+ type HandlerConfig<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, E, R, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> = NodeByIdentifier<States, StateId> extends {
3088
3221
  readonly type: "final";
3089
- } ? FinalStateConfig<States, Events, Emits, StateId> : ActiveStateConfig<States, Events, Emits, StateId, E, R>;
3090
- type HandlerNodeConfig<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Path extends StateNodeIdentifier<States>, E, R> = Path extends ChoiceIdentifier<States> ? ChoiceStateConfig<States, Events, Emits, Path> : Path extends StateIdentifier<States> ? HandlerConfig<States, Events, Emits, Path, E, R> : never;
3222
+ } ? FinalStateConfig<States, Events, Emits, StateId, InputEvents, ParentEvents> : ActiveStateConfig<States, Events, Emits, StateId, E, R, InputEvents, ParentEvents>;
3223
+ type HandlerNodeConfig<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Path extends StateNodeIdentifier<States>, E, R, InputEvents extends ReadonlyArray<TaggedSchema>, ParentEvents extends ReadonlyArray<TaggedSchema>> = Path extends ChoiceIdentifier<States> ? ChoiceStateConfig<States, Events, Emits, Path, InputEvents, ParentEvents> : Path extends StateIdentifier<States> ? HandlerConfig<States, Events, Emits, Path, E, R, InputEvents, ParentEvents> : never;
3091
3224
  type HandlerChildren<Node> = Node extends {
3092
3225
  readonly states: infer Children extends StateSchemas;
3093
3226
  } ? Children : never;
@@ -3115,21 +3248,21 @@ export declare namespace Machine {
3115
3248
  } : {
3116
3249
  readonly [Key in Path]?: Validation;
3117
3250
  };
3118
- type HandlerNode<AllStates extends StateSchemas, Node, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, E, R, StateId extends StateNodeIdentifier<AllStates>> = HandlerNodeConfig<AllStates, Events, Emits, StateId, E, R> & (StateId extends ChoiceIdentifier<AllStates> ? {
3251
+ type HandlerNode<AllStates extends StateSchemas, Node, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, E, R, InputEvents extends ReadonlyArray<TaggedSchema>, ParentEvents extends ReadonlyArray<TaggedSchema>, StateId extends StateNodeIdentifier<AllStates>> = HandlerNodeConfig<AllStates, Events, Emits, StateId, E, R, InputEvents, ParentEvents> & (StateId extends ChoiceIdentifier<AllStates> ? {
3119
3252
  readonly states?: never;
3120
3253
  readonly history?: never;
3121
3254
  } : HandlerChildren<Node> extends infer Children extends StateSchemas ? [Children] extends [never] ? {
3122
3255
  readonly states?: never;
3123
3256
  readonly history?: never;
3124
3257
  } : {
3125
- readonly states?: HandlerTree<AllStates, Children, Events, Emits, E, R, Extract<StateId, StateIdentifier<AllStates>>>;
3258
+ readonly states?: HandlerTree<AllStates, Children, Events, Emits, E, R, InputEvents, ParentEvents, Extract<StateId, StateIdentifier<AllStates>>>;
3126
3259
  readonly history?: HistoryDefaultConfig<AllStates, Events, Emits, Extract<StateId, StateIdentifier<AllStates>>, Children>;
3127
3260
  } : {
3128
3261
  readonly states?: never;
3129
3262
  readonly history?: never;
3130
3263
  });
3131
- type HandlerTree<AllStates extends StateSchemas, States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, E, R, Prefix extends string> = {
3132
- readonly [Key in ActiveStateKey<States> | ChoiceStateKey<States>]?: HandlerNode<AllStates, States[Key], Events, Emits, E, R, HandlerNodeId<AllStates, JoinPath<Prefix, Key>>>;
3264
+ type HandlerTree<AllStates extends StateSchemas, States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, E, R, InputEvents extends ReadonlyArray<TaggedSchema>, ParentEvents extends ReadonlyArray<TaggedSchema>, Prefix extends string> = {
3265
+ readonly [Key in ActiveStateKey<States> | ChoiceStateKey<States>]?: HandlerNode<AllStates, States[Key], Events, Emits, E, R, InputEvents, ParentEvents, HandlerNodeId<AllStates, JoinPath<Prefix, Key>>>;
3133
3266
  };
3134
3267
  type HandlerNodeConfigKey = "always" | "choice" | "entry" | "exit" | "history" | "initial" | "invoke" | "on" | "onDone" | "output" | "states";
3135
3268
  type HandlerValidationError<Message extends string, Path extends string, Detail = unknown> = {
@@ -3210,7 +3343,7 @@ export declare namespace Machine {
3210
3343
  ] extends [never] ? unknown : {
3211
3344
  readonly output: HandlerValidationError<"Handler config is missing a region output implementation required by parallel output", StateId, Exclude<RequiredParallelOutputStates<AllStates, StateId>, AvailableOutputStates>>;
3212
3345
  } : unknown : unknown);
3213
- type HandlerNodeValidation<AllStates extends StateSchemas, Node, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateNodeIdentifier<AllStates>, Config, AvailableOutputStates extends StateIdentifier<AllStates>> = StateId extends ChoiceIdentifier<AllStates> ? HandlerChoiceUnknownConfigKeyValidation<StateId, Config> & HandlerChoiceTargetValidation<StateId, Config> & HandlerRuntimeValidation<Events, Emits, StateId, Config> : StateId extends StateIdentifier<AllStates> ? HandlerUnknownConfigKeyValidation<StateId, Config> & HandlerOnKeyValidation<Events, StateId, Config> & HandlerOnTargetValidation<StateId, Config> & HandlerDirectTargetValidation<StateId, Config, "always"> & HandlerDirectTargetValidation<StateId, Config, "onDone"> & HandlerInvokeEmitsValidation<Events, StateId, Config> & HandlerChildrenValidation<Node, StateId, Config> & HandlerOutputRequirementValidation<AllStates, StateId, AvailableOutputStates, Config> & HandlerRuntimeValidation<Events, Emits, StateId, Config> : unknown;
3346
+ type HandlerNodeValidation<AllStates extends StateSchemas, Node, Events extends ReadonlyArray<TaggedSchema>, InputEvents extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateNodeIdentifier<AllStates>, Config, AvailableOutputStates extends StateIdentifier<AllStates>> = StateId extends ChoiceIdentifier<AllStates> ? HandlerChoiceUnknownConfigKeyValidation<StateId, Config> & HandlerChoiceTargetValidation<StateId, Config> & HandlerRuntimeValidation<Events, Emits, StateId, Config> : StateId extends StateIdentifier<AllStates> ? HandlerUnknownConfigKeyValidation<StateId, Config> & HandlerOnKeyValidation<Events, StateId, Config> & HandlerOnTargetValidation<StateId, Config> & HandlerDirectTargetValidation<StateId, Config, "always"> & HandlerDirectTargetValidation<StateId, Config, "onDone"> & HandlerInvokeParentEventsValidation<InputEvents, StateId, Config> & HandlerChildrenValidation<Node, StateId, Config> & HandlerOutputRequirementValidation<AllStates, StateId, AvailableOutputStates, Config> & HandlerRuntimeValidation<Events, Emits, StateId, Config> : unknown;
3214
3347
  type HandlerChoiceUnknownConfigKeyValidation<StateId extends string, Config, UnknownKeys extends string = Exclude<Extract<keyof Config, string>, "choice">> = [UnknownKeys] extends [never] ? unknown : {
3215
3348
  readonly [Key in UnknownKeys]: HandlerValidationError<"Choice handler config contains an invalid key", StateId, Key>;
3216
3349
  };
@@ -3219,13 +3352,13 @@ export declare namespace Machine {
3219
3352
  } ? [UndeclaredTransitionTarget<Choice>] extends [never] ? unknown : {
3220
3353
  readonly choice: HandlerValidationError<"Choice resolver returns a target not listed in targets", StateId, UndeclaredTransitionTarget<Choice>>;
3221
3354
  } : unknown;
3222
- type HandlerInvokeEmitsValidation<Events extends ReadonlyArray<TaggedSchema>, StateId extends string, Config> = [InvokeReturn<Config>] extends [never] ? unknown : [Exclude<InvokeEmits<InvokeReturn<Config>>, EventOf<Events>>] extends [never] ? unknown : {
3223
- readonly invoke: HandlerValidationError<"Invoked child emits events not accepted by the parent machine", StateId, Exclude<InvokeEmits<InvokeReturn<Config>>, EventOf<Events>>>;
3355
+ type HandlerInvokeParentEventsValidation<Events extends ReadonlyArray<TaggedSchema>, StateId extends string, Config> = [InvokeReturn<Config>] extends [never] ? unknown : [Exclude<InvokeParentEvents<InvokeReturn<Config>>, EventOf<Events>>] extends [never] ? unknown : {
3356
+ readonly invoke: HandlerValidationError<"Invoked child expects parent events not accepted by this machine", StateId, Exclude<InvokeParentEvents<InvokeReturn<Config>>, EventOf<Events>>>;
3224
3357
  };
3225
3358
  type HandlerRuntimeValidation<Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends string, Config, Incompatible = IncompatibleRuntime<ConfigServices<HandlerConfigPart<Config>>, EventOf<Events>, EmitOf<Emits>>> = [Incompatible] extends [never] ? unknown : HandlerValidationError<"Handler config requires an incompatible machine runtime", StateId, Incompatible>;
3226
- type HandlerNodeValidationAtPath<AllStates extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Config, AvailableOutputStates extends StateIdentifier<AllStates>, StateId extends StateNodeIdentifier<AllStates>, NodeConfig = HandlerConfigAtPath<Config, StateId>> = [NodeConfig] extends [never] ? never : HandlerNodeValidation<AllStates, HandlerNodeByPath<AllStates, StateId>, Events, Emits, StateId, NodeConfig, AvailableOutputStates> extends infer Validation ? unknown extends Validation ? never : HandlerValidationAtPath<StateId, Validation> : never;
3227
- type HandlerTreeNodeValidations<AllStates extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Config, AvailableOutputStates extends StateIdentifier<AllStates>> = Types.UnionToIntersection<StateNodeIdentifier<AllStates> extends infer StateId extends StateNodeIdentifier<AllStates> ? StateId extends StateNodeIdentifier<AllStates> ? HandlerNodeValidationAtPath<AllStates, Events, Emits, Config, AvailableOutputStates, StateId> : never : never>;
3228
- type HandlerTreeValidation<AllStates extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Config, AvailableOutputStates extends StateIdentifier<AllStates>> = HandlerUnknownStateKeyValidation<AllStates, "", Config> & HandlerTreeNodeValidations<AllStates, Events, Emits, Config, AvailableOutputStates>;
3359
+ type HandlerNodeValidationAtPath<AllStates extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, InputEvents extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Config, AvailableOutputStates extends StateIdentifier<AllStates>, StateId extends StateNodeIdentifier<AllStates>, NodeConfig = HandlerConfigAtPath<Config, StateId>> = [NodeConfig] extends [never] ? never : HandlerNodeValidation<AllStates, HandlerNodeByPath<AllStates, StateId>, Events, InputEvents, Emits, StateId, NodeConfig, AvailableOutputStates> extends infer Validation ? unknown extends Validation ? never : HandlerValidationAtPath<StateId, Validation> : never;
3360
+ type HandlerTreeNodeValidations<AllStates extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, InputEvents extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Config, AvailableOutputStates extends StateIdentifier<AllStates>> = Types.UnionToIntersection<StateNodeIdentifier<AllStates> extends infer StateId extends StateNodeIdentifier<AllStates> ? StateId extends StateNodeIdentifier<AllStates> ? HandlerNodeValidationAtPath<AllStates, Events, InputEvents, Emits, Config, AvailableOutputStates, StateId> : never : never>;
3361
+ type HandlerTreeValidation<AllStates extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, InputEvents extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Config, AvailableOutputStates extends StateIdentifier<AllStates>> = HandlerUnknownStateKeyValidation<AllStates, "", Config> & HandlerTreeNodeValidations<AllStates, Events, InputEvents, Emits, Config, AvailableOutputStates>;
3229
3362
  type HandlerHasRequiredInitial<AllStates extends StateSchemas, StateId extends StateIdentifier<AllStates>, Config> = StateId extends RequiredHistoryInitializers<AllStates> ? "initial" extends keyof Config ? true : false : true;
3230
3363
  type HandlerHasRequiredHistoryDefaults<Node, Config> = Node extends {
3231
3364
  readonly states: infer Children extends StateSchemas;
@@ -3250,15 +3383,15 @@ export declare namespace Machine {
3250
3383
  readonly outputState: StateId extends StateIdentifier<AllStates> ? HandlerOutputStates<AllStates, StateId, HandlerConfigPart<NodeConfig>> : never;
3251
3384
  };
3252
3385
  type HandlerTreeEvidence<AllStates extends StateSchemas, Config> = StateNodeIdentifier<AllStates> extends infer StateId extends StateNodeIdentifier<AllStates> ? StateId extends StateNodeIdentifier<AllStates> ? HandlerNodeEvidence<AllStates, Config, StateId> : never : never;
3253
- type HandleTreeResult<AllStates extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Input extends Schema.Top, UnhandledStates extends StateIdentifier<AllStates>, E, R, InitialE, InitialR, FinalStates extends StateIdentifier<AllStates>, Output, OutputStates extends StateIdentifier<AllStates>, InputEvents extends ReadonlyArray<TaggedSchema>, Config> = Machine<AllStates, Events, Input, Exclude<UnhandledStates, HandlerTreeEvidence<AllStates, Config>["stateId"]>, E | HandlerTreeEvidence<AllStates, Config>["error"], ExcludeCompatibleRuntime<R | HandlerTreeEvidence<AllStates, Config>["services"], EventOf<Events>, EmitOf<Emits>>, InitialE, InitialR, FinalStates, Output, Emits, OutputStates | Extract<HandlerTreeEvidence<AllStates, Config>["outputState"], StateIdentifier<AllStates>>, InputEvents>;
3386
+ type HandleTreeResult<AllStates extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Input extends Schema.Top, UnhandledStates extends StateIdentifier<AllStates>, E, R, InitialE, InitialR, FinalStates extends StateIdentifier<AllStates>, Output, OutputStates extends StateIdentifier<AllStates>, InputEvents extends ReadonlyArray<TaggedSchema>, ParentEvents extends ReadonlyArray<TaggedSchema>, Config> = Machine<AllStates, Events, Input, Exclude<UnhandledStates, HandlerTreeEvidence<AllStates, Config>["stateId"]>, E | HandlerTreeEvidence<AllStates, Config>["error"], ExcludeCompatibleRuntime<R | HandlerTreeEvidence<AllStates, Config>["services"], EventOf<Events>, EmitOf<Emits>>, InitialE, InitialR, FinalStates, Output, Emits, OutputStates | Extract<HandlerTreeEvidence<AllStates, Config>["outputState"], StateIdentifier<AllStates>>, InputEvents, ParentEvents>;
3254
3387
  /**
3255
3388
  * Adds state handlers from a root state object.
3256
3389
  *
3257
3390
  * @category combinators
3258
3391
  * @since 0.4.0
3259
3392
  */
3260
- interface Handler<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Input extends Schema.Top, UnhandledStates extends StateIdentifier<States>, E, R, InitialE, InitialR, FinalStates extends StateIdentifier<States>, Output, OutputStates extends StateIdentifier<States>, InputEvents extends ReadonlyArray<TaggedSchema>> {
3261
- <const Config extends HandlerTree<States, States, Events, Emits, E, R, "">>(config: Config & HandlerInvokeContexts<States, Events, Emits, NoInfer<Config>> & HandlerTreeValidation<States, Events, Emits, NoInfer<Config>, OutputStates | Extract<HandlerTreeEvidence<States, NoInfer<Config>>["outputState"], StateIdentifier<States>>>): HandleTreeResult<States, Events, Emits, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, OutputStates, InputEvents, Config>;
3393
+ interface Handler<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Input extends Schema.Top, UnhandledStates extends StateIdentifier<States>, E, R, InitialE, InitialR, FinalStates extends StateIdentifier<States>, Output, OutputStates extends StateIdentifier<States>, InputEvents extends ReadonlyArray<TaggedSchema>, ParentEvents extends ReadonlyArray<TaggedSchema>> {
3394
+ <const Config extends HandlerTree<States, States, Events, Emits, E, R, InputEvents, ParentEvents, "">>(config: Config & HandlerInvokeContexts<States, Events, Emits, NoInfer<Config>> & HandlerTreeValidation<States, Events, InputEvents, Emits, NoInfer<Config>, OutputStates | Extract<HandlerTreeEvidence<States, NoInfer<Config>>["outputState"], StateIdentifier<States>>>): HandleTreeResult<States, Events, Emits, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, OutputStates, InputEvents, ParentEvents, Config>;
3262
3395
  }
3263
3396
  /**
3264
3397
  * Any state config.
@@ -3321,7 +3454,7 @@ export declare const isMachine: (u: unknown) => u is Machine.Any;
3321
3454
  * @category guards
3322
3455
  * @since 0.4.0
3323
3456
  */
3324
- 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>(machine: Machine<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents>, state: Machine.Snapshot<States>) => state is Machine.SnapshotContainingFinal<States, FinalStates>;
3457
+ 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>;
3325
3458
  /**
3326
3459
  * Defines a state tree while preserving literal state paths.
3327
3460
  *
@@ -3350,7 +3483,7 @@ export declare const isFinal: <const States extends Machine.StateSchemas, const
3350
3483
  *
3351
3484
  * Machine.make({
3352
3485
  * states: States.states,
3353
- * events: [],
3486
+ * events: Machine.events(),
3354
3487
  * initial: () => States.initial.idle.from()
3355
3488
  * })
3356
3489
  * ```
@@ -3359,19 +3492,20 @@ export declare const isFinal: <const States extends Machine.StateSchemas, const
3359
3492
  * @since 0.4.0
3360
3493
  */
3361
3494
  export declare const defineStates: DefineStates;
3362
- type MakeConfig<States extends Machine.StateSchemas, InputEvents extends ReadonlyArray<Machine.TaggedSchema>, Emits extends ReadonlyArray<Machine.TaggedSchema>, Input extends Schema.Top, InitialE, InitialR, InternalEvents extends ReadonlyArray<Machine.TaggedSchema>> = {
3495
+ type MakeConfig<States extends Machine.StateSchemas, InputEvents extends ReadonlyArray<Machine.TaggedSchema>, Emits extends ReadonlyArray<Machine.TaggedSchema>, Input extends Schema.Top, InitialE, InitialR, InternalEvents extends ReadonlyArray<Machine.TaggedSchema>, ParentEvents extends ReadonlyArray<Machine.TaggedSchema>> = {
3363
3496
  readonly id?: string;
3364
3497
  readonly states: States & DefineStateTreeInput<NoInfer<States>>;
3365
- readonly events: InputEvents & ValidateInputEventProtocol<NoInfer<InputEvents>>;
3366
- readonly internalEvents?: InternalEvents & ValidateInternalEventProtocol<NoInfer<InputEvents>, NoInfer<InternalEvents>>;
3367
- readonly emits?: Emits;
3498
+ readonly events: Machine.EventProtocol<"public", InputEvents> & ValidateInputEventProtocol<NoInfer<InputEvents>>;
3499
+ readonly internalEvents?: Machine.EventProtocol<"internal", InternalEvents> & ValidateInternalEventProtocol<NoInfer<InputEvents>, NoInfer<InternalEvents>>;
3500
+ readonly emittedEvents?: Machine.EventProtocol<"emitted", Emits>;
3501
+ readonly parentEvents?: Machine.EventProtocol<"public", ParentEvents>;
3368
3502
  readonly input?: Input;
3369
3503
  readonly initial: (...args: [...Machine.InputArgs<Input>]) => Machine.InitialResult<States, InitialE, InitialR>;
3370
3504
  };
3371
- 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>> = Machine<States, readonly [...InputEvents, ...InternalEvents], Input, Machine.StateIdentifier<States>, never, never, InitialE, InitialR, Machine.FinalStateFromDefinition<States>, Machine.TerminalOutput<States>, Emits, never, InputEvents>;
3505
+ 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>;
3372
3506
  interface Make {
3373
- <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 []>(config: MakeConfig<States, InputEvents, Emits, Input, InitialE, InitialR, InternalEvents>, ..._validation: ValidateDefinedStates<NoInfer<States>>): MakeResult<States, InputEvents, Emits, Input, InitialE, InitialR, InternalEvents>;
3374
- <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 []>(config: Omit<MakeConfig<States, InputEvents, Emits, Input, InitialE, InitialR, InternalEvents>, "states"> & {
3507
+ <const States extends Machine.StateSchemas, const InputEvents extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const Input extends Schema.Top = typeof Schema.Void, InitialE = never, InitialR = never, const InternalEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(config: MakeConfig<States, InputEvents, Emits, Input, InitialE, InitialR, InternalEvents, ParentEvents>, ..._validation: ValidateDefinedStates<NoInfer<States>>): MakeResult<States, InputEvents, Emits, Input, InitialE, InitialR, InternalEvents, ParentEvents>;
3508
+ <const States extends Machine.StateSchemas, const InputEvents extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const Input extends Schema.Top = typeof Schema.Void, InitialE = never, InitialR = never, const InternalEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(config: Omit<MakeConfig<States, InputEvents, Emits, Input, InitialE, InitialR, InternalEvents, ParentEvents>, "states"> & {
3375
3509
  readonly states: InvalidDefinedStateTreeInput<States>;
3376
3510
  }): never;
3377
3511
  }
@@ -3386,10 +3520,13 @@ interface Make {
3386
3520
  * `defineStates` or is passed inline. Call `handle` on the returned definition
3387
3521
  * to implement state behavior with ordinary TypeScript control flow.
3388
3522
  *
3389
- * Schemas in `events` define the public input protocol. Schemas in
3390
- * `internalEvents` are added to the complete handler protocol for raised
3391
- * events, child emissions, and other machine-local deliveries. Their tags
3392
- * must be disjoint.
3523
+ * `Machine.events` defines the public input protocol. `Machine.internalEvents`
3524
+ * adds raised events and other machine-local deliveries.
3525
+ * `Machine.emittedEvents` defines outward ephemeral notifications, while
3526
+ * `parentEvents` declares the inputs a child may explicitly send to its owning
3527
+ * actor. All descriptors expose deferred constructors while retaining their
3528
+ * schemas opaquely for runtime validation. Public and internal tags must be
3529
+ * disjoint.
3393
3530
  *
3394
3531
  * **Example** (Typed counter machine)
3395
3532
  *
@@ -3406,10 +3543,11 @@ interface Make {
3406
3543
  * }) {}
3407
3544
  *
3408
3545
  * const States = Machine.defineStates({ Count })
3546
+ * const Events = Machine.events(Increment)
3409
3547
  *
3410
3548
  * const counter = Machine.make({
3411
3549
  * states: States.states,
3412
- * events: [Increment],
3550
+ * events: Events,
3413
3551
  * initial: () => States.initial.Count(new Count({ value: 0 }))
3414
3552
  * }).handle({
3415
3553
  * Count: {
@@ -3426,54 +3564,16 @@ interface Make {
3426
3564
  * @since 0.4.0
3427
3565
  */
3428
3566
  export declare const make: Make;
3429
- type EventConstructorArgs<EventSchema extends Machine.TaggedSchema> = {} extends EventSchema["~type.make.in"] ? [
3430
- input?: EventSchema["~type.make.in"]
3431
- ] : [input: EventSchema["~type.make.in"]];
3432
3567
  /**
3433
- * Constructs an event from a schema owned by a machine's protocol.
3434
- *
3435
- * **Details**
3436
- *
3437
- * The schema constructor runs exactly once. The resulting decoded event is
3438
- * trusted by this machine and definitions derived from it with `handle`, so
3439
- * repeated delivery does not decode the same already-constructed value again.
3440
- * Events supplied through ordinary `send` and `plan` calls remain untrusted
3441
- * and continue through full runtime schema validation.
3442
- * Treat the returned event as immutable after construction.
3443
- * This eager low-level constructor throws `MachineSchemaDecodeError` when
3444
- * construction fails. Prefer {@link events} and {@link internalEvents} for
3445
- * ordinary delivery so construction remains inside the machine error channel.
3446
- *
3447
- * The schema must be one of the machine's configured public or internal event
3448
- * schemas, or a case schema belonging to a configured `Schema.TaggedUnion`.
3449
- *
3450
- * **Example**
3451
- *
3452
- * ```ts
3453
- * import { Schema } from "effect"
3454
- * import { Machine } from "@typeonce/effect-machine"
3455
- *
3456
- * class Idle extends Schema.TaggedClass<Idle>("Idle")("Idle", {}) {}
3457
- * class Increment extends Schema.TaggedClass<Increment>("Increment")("Increment", {
3458
- * by: Schema.Number
3459
- * }) {}
3460
- *
3461
- * const States = Machine.defineStates({ Idle })
3462
- * const counter = Machine.make({
3463
- * states: States.states,
3464
- * events: [Increment],
3465
- * initial: () => States.initial.Idle.from()
3466
- * }).handle({ Idle: { on: { Increment: () => States.initial.Idle.from() } } })
3568
+ * Extracts the decoded event union carried by an event protocol descriptor.
3467
3569
  *
3468
- * const increment = Machine.event(counter, Increment, { by: 1 })
3469
- * ```
3470
- *
3471
- * @category constructors
3472
- * @since 0.4.0
3570
+ * @category utility types
3571
+ * @since 0.10.0
3473
3572
  */
3474
- export declare const event: <const M extends Machine.Any, const EventSchema extends Machine.TaggedSchema>(machine: M, schema: EventSchema & ([EventSchema["Type"]] extends [Machine.Event<M>] ? unknown : never), ...args: EventConstructorArgs<EventSchema>) => EventSchema["Type"];
3573
+ export type EventOf<Protocol extends Machine.EventProtocol.Any> = Machine.EventOf<Machine.EventProtocolSchemas<Protocol>>;
3475
3574
  /**
3476
- * Returns deferred constructors for every public event in a machine protocol.
3575
+ * Defines a public event protocol and returns deferred constructors for every
3576
+ * statically finite configured event tag.
3477
3577
  *
3478
3578
  * Constructor inputs retain their schema-derived required fields, defaults,
3479
3579
  * and transformations. Construction is deferred until delivery so failures
@@ -3483,26 +3583,56 @@ export declare const event: <const M extends Machine.Any, const EventSchema exte
3483
3583
  * **Example**
3484
3584
  *
3485
3585
  * ```ts
3486
- * const Event = Machine.events(counter)
3487
- * yield* ref.send(Event.Increment({ by: 1 }))
3586
+ * const Events = Machine.events(Increment, Reset)
3587
+ * const machine = Machine.make({ events: Events, ... })
3588
+ * yield* ref.send(Events.Increment({ by: 1 }))
3488
3589
  * ```
3489
3590
  *
3490
3591
  * @category constructors
3491
- * @since 0.9.0
3592
+ * @since 0.10.0
3492
3593
  */
3493
- export declare const events: <const M extends Machine.Any>(machine: M) => Machine.EventConstructors<Machine.InputEvents<M>>;
3594
+ export declare const events: {
3595
+ <const Schemas extends ReadonlyArray<Machine.TaggedSchema>>(...schemas: Schemas & ValidateInputEventProtocol<NoInfer<Schemas>>): Machine.EventProtocol<"public", readonly [...Schemas]>;
3596
+ <const Inputs extends ReadonlyArray<Machine.EventProtocolInput<"public">>>(...inputs: Inputs & ValidateEventProtocolBuilder<"public", Inputs>): Machine.EventProtocol<"public", Machine.EventProtocolInputSchemasOf<"public", Inputs>>;
3597
+ };
3494
3598
  /**
3495
- * Returns deferred constructors for every internal event in a machine
3496
- * protocol.
3599
+ * Defines an internal event protocol and returns deferred constructors for
3600
+ * every statically finite configured event tag.
3497
3601
  *
3498
3602
  * Use these constructors for raised events and other machine-local deliveries.
3499
3603
  * Construction failures are reported through the
3500
3604
  * owning machine's `MachineSchemaDecodeError` channel.
3501
3605
  *
3606
+ * **Example**
3607
+ *
3608
+ * ```ts
3609
+ * const InternalEvents = Machine.internalEvents(Loaded, Failed)
3610
+ * const machine = Machine.make({ internalEvents: InternalEvents, ... })
3611
+ *
3612
+ * // Inside a transition callback:
3613
+ * enqueue.raise(InternalEvents.Loaded({ value }))
3614
+ * ```
3615
+ *
3502
3616
  * @category constructors
3503
- * @since 0.9.0
3617
+ * @since 0.10.0
3504
3618
  */
3505
- export declare const internalEvents: <const M extends Machine.Any>(machine: M) => Machine.EventConstructors<Machine.InternalEvents<M>>;
3619
+ export declare const internalEvents: {
3620
+ <const Schemas extends ReadonlyArray<Machine.TaggedSchema>>(...schemas: Schemas & ValidateInternalEventProtocol<readonly [], NoInfer<Schemas>>): Machine.EventProtocol<"internal", readonly [...Schemas]>;
3621
+ <const Inputs extends ReadonlyArray<Machine.EventProtocolInput<"internal">>>(...inputs: Inputs & ValidateEventProtocolBuilder<"internal", Inputs>): Machine.EventProtocol<"internal", Machine.EventProtocolInputSchemasOf<"internal", Inputs>>;
3622
+ };
3623
+ /**
3624
+ * Defines the ephemeral notifications a machine may publish to external
3625
+ * observers. Emitted events are separate from actor input and are never sent
3626
+ * implicitly to a parent actor. Observe them through `MachineRef.emissions` or
3627
+ * the AtomMachine emission stream adapters.
3628
+ *
3629
+ * @category constructors
3630
+ * @since 0.10.0
3631
+ */
3632
+ export declare const emittedEvents: {
3633
+ <const Schemas extends ReadonlyArray<Machine.TaggedSchema>>(...schemas: Schemas & ValidateEmittedEventProtocol<NoInfer<Schemas>>): Machine.EventProtocol<"emitted", readonly [...Schemas]>;
3634
+ <const Inputs extends ReadonlyArray<Machine.EventProtocolInput<"emitted">>>(...inputs: Inputs & ValidateEventProtocolBuilder<"emitted", Inputs>): Machine.EventProtocol<"emitted", Machine.EventProtocolInputSchemasOf<"emitted", Inputs>>;
3635
+ };
3506
3636
  /**
3507
3637
  * Encodes a decoded machine snapshot into a normalized data representation.
3508
3638
  *
@@ -3536,7 +3666,7 @@ export declare const internalEvents: <const M extends Machine.Any>(machine: M) =
3536
3666
  * const States = Machine.defineStates({ Idle })
3537
3667
  * const machine = Machine.make({
3538
3668
  * states: States.states,
3539
- * events: [],
3669
+ * events: Machine.events(),
3540
3670
  * initial: () => States.initial.Idle.from()
3541
3671
  * }).handle({ Idle: {} })
3542
3672
  *
@@ -3550,7 +3680,7 @@ export declare const internalEvents: <const M extends Machine.Any>(machine: M) =
3550
3680
  * @category encoding
3551
3681
  * @since 0.4.0
3552
3682
  */
3553
- export declare const encodeSnapshot: <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>(machine: Machine<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents>, snapshot: Machine.Snapshot<States>) => Effect.Effect<Machine.EncodedSnapshot, MachineSchemaEncodeError, Machine.SnapshotEncodingServices<States>>;
3683
+ export declare const encodeSnapshot: <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>, snapshot: Machine.Snapshot<States>) => Effect.Effect<Machine.EncodedSnapshot, MachineSchemaEncodeError, Machine.SnapshotEncodingServices<States>>;
3554
3684
  /**
3555
3685
  * Decodes a normalized data representation into a validated machine snapshot.
3556
3686
  *
@@ -3580,7 +3710,7 @@ export declare const encodeSnapshot: <const States extends Machine.StateSchemas,
3580
3710
  * const States = Machine.defineStates({ Idle })
3581
3711
  * const machine = Machine.make({
3582
3712
  * states: States.states,
3583
- * events: [],
3713
+ * events: Machine.events(),
3584
3714
  * initial: () => States.initial.Idle.from()
3585
3715
  * }).handle({ Idle: {} })
3586
3716
  *
@@ -3595,7 +3725,7 @@ export declare const encodeSnapshot: <const States extends Machine.StateSchemas,
3595
3725
  * @category decoding
3596
3726
  * @since 0.4.0
3597
3727
  */
3598
- 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>(machine: Machine<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents>, encoded: unknown) => Effect.Effect<Machine.Snapshot<States>, MachineSchemaDecodeError, Machine.SnapshotDecodingServices<States>>;
3728
+ 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>>;
3599
3729
  type DynamicEffectInvokeSource<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>) => Effect.Effect<unknown, unknown, unknown>> = {
3600
3730
  readonly id: InvokeLifecycleId;
3601
3731
  readonly effect: Source;
@@ -3669,42 +3799,8 @@ export declare const invoke: {
3669
3799
  <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>): Config & Machine.InvokeOwned<States, Events, Emits, StateId> & Machine.InvokeTyped<void, never, never, never>;
3670
3800
  <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>) => Logic<ChildState, ChildEvent, ChildError, ChildRequirements, ChildOutput, ChildInitialError>>): Machine.InvokeConfig<States, Events, Emits, StateId> & Machine.InvokeTyped<ChildOutput, ChildError, ChildRequirements, ChildInitialError>;
3671
3801
  <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>): Config & Machine.InvokeOwned<States, Events, Emits, StateId> & Machine.InvokeTyped<ChildOutput, ChildError, ChildRequirements, ChildInitialError>;
3672
- <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>): 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"]>>;
3673
- };
3674
- type RetagFields<Target extends Machine.TaggedSchema> = Omit<Target["~type.make.in"], "_tag">;
3675
- type RetagTargetCompatibility<Target extends Machine.TaggedSchema> = Target extends {
3676
- readonly fields: Schema.Struct.Fields;
3677
- } ? "_tag" extends keyof Target["~type.make.in"] ? {} extends Pick<Target["~type.make.in"], "_tag"> ? unknown : {
3678
- readonly "~effect/Machine/RetagTargetError": "Target schema must supply its discriminator when make is called";
3679
- } : unknown : {
3680
- readonly "~effect/Machine/RetagTargetError": "Target schema must be one tagged struct or tagged class";
3802
+ <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>): 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"]>>>;
3681
3803
  };
3682
- type RequiredKeys<A> = {
3683
- readonly [Key in keyof A]-?: {} extends Pick<A, Key> ? never : Key;
3684
- }[keyof A];
3685
- type CompatibleSourceKeys<Fields, Source> = {
3686
- readonly [Key in Extract<keyof Fields, keyof Source>]: Source[Key] extends Fields[Key] ? Key : never;
3687
- }[Extract<keyof Fields, keyof Source>];
3688
- type RetagPatch<Target extends Machine.TaggedSchema, Source> = Partial<RetagFields<Target>> & Pick<RetagFields<Target>, Exclude<RequiredKeys<RetagFields<Target>>, CompatibleSourceKeys<RetagFields<Target>, Source>>>;
3689
- type RetagArgs<Target extends Machine.TaggedSchema, Source> = [
3690
- Exclude<RequiredKeys<RetagFields<Target>>, CompatibleSourceKeys<RetagFields<Target>, Source>>
3691
- ] extends [never] ? [patch?: RetagPatch<Target, Source>] : [patch: RetagPatch<Target, Source>];
3692
- /**
3693
- * Constructs another tagged case from compatible source fields.
3694
- *
3695
- * The target must be one tagged struct or tagged class whose discriminator is
3696
- * supplied by its constructor. Union wrappers are rejected because their
3697
- * `make` operation cannot select a member after the source discriminator has
3698
- * been discarded. Missing or incompatible required target fields must be
3699
- * supplied by the patch, and the target schema's normal `make` validation
3700
- * remains authoritative at runtime.
3701
- *
3702
- * @category constructors
3703
- * @since 0.4.0
3704
- */
3705
- export declare const retag: <const Target extends Machine.TaggedSchema, const Source extends {
3706
- readonly _tag: PropertyKey;
3707
- }>(target: Target & RetagTargetCompatibility<Target>, source: Source, ...args: RetagArgs<Target, Source>) => Target["Type"];
3708
3804
  /**
3709
3805
  * Plans the initial state for a machine without executing actor commands.
3710
3806
  *
@@ -3733,7 +3829,7 @@ export declare const retag: <const Target extends Machine.TaggedSchema, const So
3733
3829
  * const States = Machine.defineStates({ Idle })
3734
3830
  * const machine = Machine.make({
3735
3831
  * states: States.states,
3736
- * events: [],
3832
+ * events: Machine.events(),
3737
3833
  * initial: () => States.initial.Idle.from()
3738
3834
  * }).handle({ Idle: {} })
3739
3835
  *
@@ -3745,7 +3841,7 @@ export declare const retag: <const Target extends Machine.TaggedSchema, const So
3745
3841
  * @category constructors
3746
3842
  * @since 0.4.0
3747
3843
  */
3748
- export declare const planInitial: <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const Input extends Schema.Top = typeof Schema.Void, UnhandledStates extends Machine.StateIdentifier<States> = Machine.StateIdentifier<States>, E = never, R = never, InitialE = never, InitialR = never, FinalStates extends Machine.StateIdentifier<States> = never, Output = never, OutputStates extends Machine.StateIdentifier<States> = never, InputEvents extends ReadonlyArray<Machine.TaggedSchema> = Events>(machine: Machine<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents> & EnsureExecutable<States, UnhandledStates, OutputStates>, ...args: [...Machine.InputArgs<Input>]) => Effect.Effect<{
3844
+ export declare const planInitial: <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const Input extends Schema.Top = typeof Schema.Void, UnhandledStates extends Machine.StateIdentifier<States> = Machine.StateIdentifier<States>, E = never, R = never, InitialE = never, InitialR = never, FinalStates extends Machine.StateIdentifier<States> = never, Output = never, OutputStates extends Machine.StateIdentifier<States> = never, InputEvents extends ReadonlyArray<Machine.TaggedSchema> = Events, ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(machine: Machine<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents, ParentEvents> & EnsureExecutable<States, UnhandledStates, OutputStates>, ...args: [...Machine.InputArgs<Input>]) => Effect.Effect<{
3749
3845
  readonly startingState: Machine.Snapshot<States>;
3750
3846
  readonly initialEntryPaths: ReadonlyArray<Machine.StateIdentifier<States>>;
3751
3847
  readonly state: Machine.Snapshot<States>;
@@ -3831,7 +3927,7 @@ export declare const configuration: <M extends Machine.Any>(machine: M, state: M
3831
3927
  * @category getters
3832
3928
  * @since 0.4.0
3833
3929
  */
3834
- export declare const enabled: <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>(machine: Machine<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents>, state: Machine.Snapshot<States>) => ReadonlyArray<Machine.TagOf<Events[number]>>;
3930
+ export declare const enabled: <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>) => ReadonlyArray<Machine.TagOf<Events[number]>>;
3835
3931
  /**
3836
3932
  * Plans the next state snapshot synchronously.
3837
3933
  *
@@ -3861,7 +3957,7 @@ export declare const enabled: <const States extends Machine.StateSchemas, const
3861
3957
  * const States = Machine.defineStates({ Off, On })
3862
3958
  * const machine = Machine.make({
3863
3959
  * states: States.states,
3864
- * events: [Toggle],
3960
+ * events: Machine.events(Toggle),
3865
3961
  * initial: () => States.initial.Off.from()
3866
3962
  * }).handle({ Off: { on: { Toggle: () => States.initial.On.from() } }, On: {} })
3867
3963
  *
@@ -3876,7 +3972,7 @@ export declare const enabled: <const States extends Machine.StateSchemas, const
3876
3972
  * @category combinators
3877
3973
  * @since 0.4.0
3878
3974
  */
3879
- export declare const plan: <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const Input extends Schema.Top = typeof Schema.Void, UnhandledStates extends Machine.StateIdentifier<States> = Machine.StateIdentifier<States>, E = never, R = never, InitialE = never, InitialR = never, FinalStates extends Machine.StateIdentifier<States> = never, Output = never, OutputStates extends Machine.StateIdentifier<States> = never, InputEvents extends ReadonlyArray<Machine.TaggedSchema> = Events>(machine: Machine<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents> & EnsureExecutable<States, UnhandledStates, OutputStates>, state: Machine.Snapshot<States>, event: Machine.EventInputOf<InputEvents>) => Effect.Effect<{
3975
+ export declare const plan: <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const Input extends Schema.Top = typeof Schema.Void, UnhandledStates extends Machine.StateIdentifier<States> = Machine.StateIdentifier<States>, E = never, R = never, InitialE = never, InitialR = never, FinalStates extends Machine.StateIdentifier<States> = never, Output = never, OutputStates extends Machine.StateIdentifier<States> = never, InputEvents extends ReadonlyArray<Machine.TaggedSchema> = Events, ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(machine: Machine<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents, ParentEvents> & EnsureExecutable<States, UnhandledStates, OutputStates>, state: Machine.Snapshot<States>, event: Machine.EventInputOf<InputEvents>) => Effect.Effect<{
3880
3976
  readonly next: Machine.Snapshot<States>;
3881
3977
  readonly commands: ReadonlyArray<Command>;
3882
3978
  readonly emittedEvents: ReadonlyArray<Machine.EmitOf<Emits>>;
@@ -4063,7 +4159,7 @@ export declare const watch: <State, Event, Error = never, Output = never>(ref: M
4063
4159
  * const States = Machine.defineStates({ Idle })
4064
4160
  * const machine = Machine.make({
4065
4161
  * states: States.states,
4066
- * events: [],
4162
+ * events: Machine.events(),
4067
4163
  * initial: () => States.initial.Idle.from()
4068
4164
  * }).handle({ Idle: {} })
4069
4165
  *
@@ -4078,7 +4174,7 @@ export declare const watch: <State, Event, Error = never, Output = never>(ref: M
4078
4174
  * @category constructors
4079
4175
  * @since 0.4.0
4080
4176
  */
4081
- export declare const start: <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const Input extends Schema.Top = typeof Schema.Void, UnhandledStates extends Machine.StateIdentifier<States> = Machine.StateIdentifier<States>, E = never, R = never, InitialE = never, InitialR = never, FinalStates extends Machine.StateIdentifier<States> = never, Output = never, OutputStates extends Machine.StateIdentifier<States> = never, InputEvents extends ReadonlyArray<Machine.TaggedSchema> = Events>(machine: Machine<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents> & EnsureExecutable<States, UnhandledStates, OutputStates>, ...args: [...Machine.InputArgs<Input>]) => Effect.Effect<MachineRef<Machine.Snapshot<States>, Machine.EventInputOf<InputEvents>, E | ActionError<R> | InfiniteTransitionError | MachineSchemaDecodeError | StoppedError, Output>, InitialE | E | ActionError<InitialR | R> | InfiniteTransitionError | MachineSchemaDecodeError | StartupError | StoppedError, ExcludeCompatibleRuntime<ExecutionServices<InitialR | R>, Machine.EventOf<Events>, Machine.EmitOf<Emits>>>;
4177
+ export declare const start: <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const Input extends Schema.Top = typeof Schema.Void, UnhandledStates extends Machine.StateIdentifier<States> = Machine.StateIdentifier<States>, E = never, R = never, InitialE = never, InitialR = never, FinalStates extends Machine.StateIdentifier<States> = never, Output = never, OutputStates extends Machine.StateIdentifier<States> = never, InputEvents extends ReadonlyArray<Machine.TaggedSchema> = Events, ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(machine: Machine<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents, ParentEvents> & EnsureExecutable<States, UnhandledStates, OutputStates>, ...args: [...Machine.InputArgs<Input>]) => Effect.Effect<MachineRef<Machine.Snapshot<States>, Machine.EventInputOf<InputEvents>, E | ActionError<R> | InfiniteTransitionError | MachineSchemaDecodeError | StoppedError, Output, Machine.EmittedEventOf<Emits>>, InitialE | E | ActionError<InitialR | R> | InfiniteTransitionError | MachineSchemaDecodeError | StartupError | StoppedError, ExcludeCompatibleRuntime<ExecutionServices<InitialR | R>, Machine.EventOf<Events>, Machine.EmitOf<Emits>>>;
4082
4178
  /**
4083
4179
  * Starts a fresh managed runtime from a decoded logical snapshot.
4084
4180
  *
@@ -4113,7 +4209,7 @@ export declare const start: <const States extends Machine.StateSchemas, const Ev
4113
4209
  * const States = Machine.defineStates({ Idle })
4114
4210
  * const machine = Machine.make({
4115
4211
  * states: States.states,
4116
- * events: [],
4212
+ * events: Machine.events(),
4117
4213
  * initial: () => States.initial.Idle.from()
4118
4214
  * }).handle({ Idle: {} })
4119
4215
  *
@@ -4130,5 +4226,5 @@ export declare const start: <const States extends Machine.StateSchemas, const Ev
4130
4226
  * @category constructors
4131
4227
  * @since 0.4.0
4132
4228
  */
4133
- export declare const resume: <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const Input extends Schema.Top = typeof Schema.Void, UnhandledStates extends Machine.StateIdentifier<States> = Machine.StateIdentifier<States>, E = never, R = never, InitialE = never, InitialR = never, FinalStates extends Machine.StateIdentifier<States> = never, Output = never, OutputStates extends Machine.StateIdentifier<States> = never, InputEvents extends ReadonlyArray<Machine.TaggedSchema> = Events>(machine: Machine<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents> & EnsureExecutable<States, UnhandledStates, OutputStates>, snapshot: Machine.Snapshot<States>) => Effect.Effect<MachineRef<Machine.Snapshot<States>, Machine.EventInputOf<InputEvents>, E | ActionError<R> | InfiniteTransitionError | MachineSchemaDecodeError | StoppedError, Output>, MachineSchemaDecodeError, ExcludeCompatibleRuntime<ExecutionServices<R>, Machine.EventOf<Events>, Machine.EmitOf<Emits>>>;
4229
+ export declare const resume: <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const Input extends Schema.Top = typeof Schema.Void, UnhandledStates extends Machine.StateIdentifier<States> = Machine.StateIdentifier<States>, E = never, R = never, InitialE = never, InitialR = never, FinalStates extends Machine.StateIdentifier<States> = never, Output = never, OutputStates extends Machine.StateIdentifier<States> = never, InputEvents extends ReadonlyArray<Machine.TaggedSchema> = Events, ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(machine: Machine<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents, ParentEvents> & EnsureExecutable<States, UnhandledStates, OutputStates>, snapshot: Machine.Snapshot<States>) => Effect.Effect<MachineRef<Machine.Snapshot<States>, Machine.EventInputOf<InputEvents>, E | ActionError<R> | InfiniteTransitionError | MachineSchemaDecodeError | StoppedError, Output, Machine.EmittedEventOf<Emits>>, MachineSchemaDecodeError, ExcludeCompatibleRuntime<ExecutionServices<R>, Machine.EventOf<Events>, Machine.EmitOf<Emits>>>;
4134
4230
  //# sourceMappingURL=Machine.d.ts.map