@typeonce/effect-machine 0.10.0 → 0.12.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 (58) hide show
  1. package/README.md +76 -13
  2. package/dist/Machine.d.ts +202 -90
  3. package/dist/Machine.d.ts.map +1 -1
  4. package/dist/Machine.js +38 -9
  5. package/dist/Machine.js.map +1 -1
  6. package/dist/internal/machine/atom.d.ts +1 -1
  7. package/dist/internal/machine/atom.d.ts.map +1 -1
  8. package/dist/internal/machine/atom.js +38 -7
  9. package/dist/internal/machine/atom.js.map +1 -1
  10. package/dist/internal/machine/cluster.js +2 -2
  11. package/dist/internal/machine/cluster.js.map +1 -1
  12. package/dist/internal/machine/commandRuntime.d.ts.map +1 -1
  13. package/dist/internal/machine/commandRuntime.js +2 -2
  14. package/dist/internal/machine/commandRuntime.js.map +1 -1
  15. package/dist/internal/machine/configuration.d.ts +7 -7
  16. package/dist/internal/machine/configuration.d.ts.map +1 -1
  17. package/dist/internal/machine/configuration.js +3 -3
  18. package/dist/internal/machine/configuration.js.map +1 -1
  19. package/dist/internal/machine/executionPlan.d.ts +3 -3
  20. package/dist/internal/machine/executionPlan.d.ts.map +1 -1
  21. package/dist/internal/machine/executionPlan.js +25 -25
  22. package/dist/internal/machine/executionPlan.js.map +1 -1
  23. package/dist/internal/machine/invocation.js +1 -1
  24. package/dist/internal/machine/invocation.js.map +1 -1
  25. package/dist/internal/machine/machine.d.ts +1 -0
  26. package/dist/internal/machine/machine.d.ts.map +1 -1
  27. package/dist/internal/machine/machine.js +4 -0
  28. package/dist/internal/machine/machine.js.map +1 -1
  29. package/dist/internal/machine/planner.d.ts +2 -2
  30. package/dist/internal/machine/planner.d.ts.map +1 -1
  31. package/dist/internal/machine/planner.js +20 -20
  32. package/dist/internal/machine/planner.js.map +1 -1
  33. package/dist/internal/machine/process.d.ts +3 -0
  34. package/dist/internal/machine/process.d.ts.map +1 -1
  35. package/dist/internal/machine/process.js +6 -3
  36. package/dist/internal/machine/process.js.map +1 -1
  37. package/dist/internal/machine/runtime.d.ts +17 -3
  38. package/dist/internal/machine/runtime.d.ts.map +1 -1
  39. package/dist/internal/machine/runtime.js +82 -32
  40. package/dist/internal/machine/runtime.js.map +1 -1
  41. package/dist/unstable/reactivity/AtomMachine.d.ts +4 -2
  42. package/dist/unstable/reactivity/AtomMachine.d.ts.map +1 -1
  43. package/dist/unstable/reactivity/AtomMachine.js +4 -2
  44. package/dist/unstable/reactivity/AtomMachine.js.map +1 -1
  45. package/docs/agent-guide.md +78 -19
  46. package/package.json +1 -1
  47. package/src/Machine.ts +704 -96
  48. package/src/internal/machine/atom.ts +50 -52
  49. package/src/internal/machine/cluster.ts +2 -2
  50. package/src/internal/machine/commandRuntime.ts +4 -2
  51. package/src/internal/machine/configuration.ts +10 -10
  52. package/src/internal/machine/executionPlan.ts +35 -35
  53. package/src/internal/machine/invocation.ts +1 -1
  54. package/src/internal/machine/machine.ts +6 -0
  55. package/src/internal/machine/planner.ts +30 -24
  56. package/src/internal/machine/process.ts +60 -3
  57. package/src/internal/machine/runtime.ts +176 -47
  58. package/src/unstable/reactivity/AtomMachine.ts +4 -2
package/src/Machine.ts CHANGED
@@ -175,18 +175,18 @@ export interface Machine<
175
175
  >
176
176
 
177
177
  /**
178
- * Ephemeral outward notifications published to this actor's observers.
179
- * Emissions are never delivered implicitly to an owning actor.
178
+ * Ephemeral outward notifications published to this machine's observers.
179
+ * Emissions are never delivered implicitly to an owning machine.
180
180
  *
181
181
  * @since 0.4.0
182
182
  */
183
183
  readonly emittedEvents: Machine.EventProtocol<"emitted", Emits>
184
184
 
185
185
  /**
186
- * Public input events accepted by an owning actor when this machine is
186
+ * Public input events accepted by an owning machine when this machine is
187
187
  * running as a child.
188
188
  *
189
- * The protocol types the optional `parent` actor reference exposed to
189
+ * The protocol types the optional `parent` machine target exposed to
190
190
  * handlers and is checked against a concrete parent's public events at
191
191
  * composition boundaries.
192
192
  *
@@ -246,6 +246,15 @@ export interface Machine<
246
246
  ParentEvents
247
247
  >
248
248
 
249
+ /**
250
+ * Preserves invocation inference with this machine's public input and parent
251
+ * protocols. Prefer this bound constructor when an invocation source or
252
+ * lifecycle handler uses `self` or `parent`.
253
+ *
254
+ * @since 0.11.0
255
+ */
256
+ readonly invoke: Invoker<States, Events, Emits, InputEvents, ParentEvents>
257
+
249
258
  /** @internal */
250
259
  readonly initial: (...args: [...Machine.InputArgs<Input>]) => Machine.InitialResult<States, InitialE, InitialR>
251
260
  }
@@ -378,7 +387,7 @@ export interface Runtime<in Events, in Emits> {
378
387
  readonly raise: (event: Machine.EventInput<Events>) => Effect.Effect<void, MachineSchemaDecodeError | StoppedError>
379
388
 
380
389
  /**
381
- * Publishes an ephemeral notification to the running actor's observers.
390
+ * Publishes an ephemeral notification to the running machine's observers.
382
391
  *
383
392
  * @since 0.4.0
384
393
  */
@@ -388,37 +397,37 @@ export interface Runtime<in Events, in Emits> {
388
397
  }
389
398
 
390
399
  /**
391
- * Minimal typed reference accepted by targeted actor commands.
400
+ * Minimal typed target accepted by inter-machine send commands.
392
401
  *
393
402
  * @category models
394
- * @since 0.10.0
403
+ * @since 0.12.0
395
404
  */
396
- export interface ActorRef<in Event> {
405
+ export interface MachineTarget<in Event> {
397
406
  readonly id: string
398
407
  readonly sessionId: string
399
408
  readonly send: (event: Event) => Effect.Effect<void, StoppedError>
400
409
  }
401
410
 
402
411
  /**
403
- * Actor references available while evaluating machine behavior.
412
+ * Machine targets available while evaluating machine behavior.
404
413
  *
405
414
  * @category models
406
- * @since 0.10.0
415
+ * @since 0.12.0
407
416
  */
408
- export interface ActorContext<
417
+ export interface MachineReferences<
409
418
  InputEvents extends ReadonlyArray<Machine.TaggedSchema>,
410
419
  ParentEvents extends ReadonlyArray<Machine.TaggedSchema>
411
420
  > {
412
- /** Reference to the current actor. Sending queues a later mailbox event. */
413
- readonly self: ActorRef<Machine.EventInputOf<InputEvents>>
421
+ /** Target for the current machine. Sending queues a later mailbox event. */
422
+ readonly self: MachineTarget<Machine.EventInputOf<InputEvents>>
414
423
 
415
- /** Reference to the owning actor, or `undefined` when running as a root. */
416
- readonly parent: ActorRef<Machine.EventInputOf<ParentEvents>> | undefined
424
+ /** Target for the owning machine, or `undefined` when running as a root. */
425
+ readonly parent: MachineTarget<Machine.EventInputOf<ParentEvents>> | undefined
417
426
  }
418
427
 
419
428
  /**
420
429
  * Synchronous commands available while a machine transition is being
421
- * selected. Enqueuing only records statechart and actor operations; it never
430
+ * selected. Enqueuing only records statechart and machine operations; it never
422
431
  * executes an Effect.
423
432
  *
424
433
  * @category models
@@ -428,12 +437,12 @@ export interface Enqueue<in Events, in Emits> {
428
437
  /** Raises an event inside the current macrostep. */
429
438
  readonly raise: (event: Machine.EventInput<Events>) => void
430
439
 
431
- /** Publishes an ephemeral notification to this actor's observers. */
440
+ /** Publishes an ephemeral notification to this machine's observers. */
432
441
  readonly emit: (event: Machine.EmittedEventInput<Emits>) => void
433
442
 
434
443
  /** Sends an event to an invoked child after the transition is selected. */
435
444
  readonly sendTo: {
436
- <Event>(target: ActorRef<Event>, event: Event): void
445
+ <Event>(target: MachineTarget<Event>, event: Event): void
437
446
  <Child extends ChildMachine.Any>(child: Child, event: ChildMachine.Event<Child>): void
438
447
  <Address extends ChildAddress<never>>(child: Address, event: ChildAddress.Event<Address>): void
439
448
  }
@@ -446,7 +455,7 @@ export interface Enqueue<in Events, in Emits> {
446
455
  }
447
456
 
448
457
  /**
449
- * A closed actor command recorded by a synchronous machine transition.
458
+ * A closed machine command recorded by a synchronous transition.
450
459
  *
451
460
  * @category models
452
461
  * @since 0.4.0
@@ -454,7 +463,7 @@ export interface Enqueue<in Events, in Emits> {
454
463
  export type Command =
455
464
  | {
456
465
  readonly _tag: "SendTo"
457
- readonly target: ActorRef<unknown> | ChildMachine.Any | ChildAddress<never>
466
+ readonly target: MachineTarget<unknown> | ChildMachine.Any | ChildAddress<never>
458
467
  readonly event: unknown
459
468
  }
460
469
  | {
@@ -1694,6 +1703,33 @@ export type RuntimeOutcome<State, Error = never, Output = never> =
1694
1703
  readonly snapshot: Extract<RuntimeSnapshot<State, Error, Output>, { readonly status: "stopped" }>
1695
1704
  }
1696
1705
 
1706
+ /**
1707
+ * A fresh machine whose observable streams exist before initialization.
1708
+ *
1709
+ * Subscribe to `emissions` before evaluating `start` when initial-entry
1710
+ * emissions must be observed. `start` is one-shot: concurrent and repeated
1711
+ * evaluations share the same initialization and running reference.
1712
+ *
1713
+ * @category models
1714
+ * @since 0.11.0
1715
+ */
1716
+ export interface Prepared<out State, in Event, out Error, out Output, out Emitted, out StartError, StartRequirements> {
1717
+ /** Stable machine definition id, or a generated fallback when none was declared. */
1718
+ readonly id: string
1719
+
1720
+ /** Unique identity reserved for this prepared machine instance. */
1721
+ readonly sessionId: string
1722
+
1723
+ /** Waits for startup, then streams the initial lifecycle snapshot and later changes. */
1724
+ readonly changes: Stream.Stream<RuntimeSnapshot<State, Error, Output>, StartError>
1725
+
1726
+ /** Streams ephemeral notifications published after subscription. */
1727
+ readonly emissions: Stream.Stream<Emitted>
1728
+
1729
+ /** Initializes this machine once and returns its running reference. */
1730
+ readonly start: Effect.Effect<MachineRef<State, Event, Error, Output, Emitted>, StartError, StartRequirements>
1731
+ }
1732
+
1697
1733
  /**
1698
1734
  * Provides access to a running machine's state, lifecycle, event input, and
1699
1735
  * termination operations.
@@ -1709,7 +1745,7 @@ export type RuntimeOutcome<State, Error = never, Output = never> =
1709
1745
  * @since 0.4.0
1710
1746
  */
1711
1747
  export interface MachineRef<out State, in Event, out Error = never, out Output = never, out Emitted = never>
1712
- extends ActorRef<Event>
1748
+ extends MachineTarget<Event>
1713
1749
  {
1714
1750
  /** Stable machine definition id, or a generated fallback when none was declared. */
1715
1751
  readonly id: string
@@ -1728,7 +1764,7 @@ export interface MachineRef<out State, in Event, out Error = never, out Output =
1728
1764
 
1729
1765
  /**
1730
1766
  * Streams ephemeral notifications published after subscription. Emissions
1731
- * are not retained or replayed; the stream completes when the actor stops.
1767
+ * are not retained or replayed; the stream completes when the machine stops.
1732
1768
  */
1733
1769
  readonly emissions: Stream.Stream<Emitted>
1734
1770
 
@@ -1856,9 +1892,9 @@ export declare namespace Logic {
1856
1892
  /** Starts a child process owned by this scope. */
1857
1893
  readonly spawn: Spawn
1858
1894
 
1859
- /** Sends an event to an actor reference or typed parent-local child address. */
1895
+ /** Sends an event to a machine target or typed parent-local child address. */
1860
1896
  readonly sendTo: {
1861
- <TargetEvent>(target: ActorRef<TargetEvent>, event: TargetEvent): Effect.Effect<void, StoppedError>
1897
+ <TargetEvent>(target: MachineTarget<TargetEvent>, event: TargetEvent): Effect.Effect<void, StoppedError>
1862
1898
  <Address extends ChildAddress<never>>(
1863
1899
  id: Address,
1864
1900
  event: ChildAddress.Event<Address>
@@ -2128,6 +2164,8 @@ export declare namespace Machine {
2128
2164
  /** @internal */
2129
2165
  readonly handle: any
2130
2166
  /** @internal */
2167
+ readonly invoke: any
2168
+ /** @internal */
2131
2169
  readonly initial: any
2132
2170
  }
2133
2171
 
@@ -2238,7 +2276,7 @@ export declare namespace Machine {
2238
2276
  */
2239
2277
  export type InputEvents<M extends Any> = M[typeof MachineTypeId]["inputEvents"]
2240
2278
 
2241
- /** Extracts the public input protocol required from an owning actor. */
2279
+ /** Extracts the public input protocol required from an owning machine. */
2242
2280
  export type ParentEvents<M extends Any> = M[typeof MachineTypeId]["parentEvents"]
2243
2281
 
2244
2282
  /** Extracts an internal event schema tuple from the complete and public protocols. */
@@ -3973,7 +4011,7 @@ export declare namespace Machine {
3973
4011
  R,
3974
4012
  InputEvents extends ReadonlyArray<TaggedSchema> = Events,
3975
4013
  ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []
3976
- > extends ActorContext<InputEvents, ParentEvents> {
4014
+ > extends MachineReferences<InputEvents, ParentEvents> {
3977
4015
  readonly state: StateByIdentifier<States, StateId>
3978
4016
  readonly containingState: ParentStateValue<States, StateId>
3979
4017
  readonly ancestors: ParentStateValues<States, StateId>
@@ -4003,7 +4041,7 @@ export declare namespace Machine {
4003
4041
  StateId extends StateIdentifier<States>,
4004
4042
  InputEvents extends ReadonlyArray<TaggedSchema> = Events,
4005
4043
  ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []
4006
- > extends ActorContext<InputEvents, ParentEvents> {
4044
+ > extends MachineReferences<InputEvents, ParentEvents> {
4007
4045
  readonly state: StateByIdentifier<States, StateId>
4008
4046
  readonly containingState: ParentStateValue<States, StateId>
4009
4047
  readonly ancestors: ParentStateValues<States, StateId>
@@ -4023,7 +4061,7 @@ export declare namespace Machine {
4023
4061
  StateId extends StateIdentifier<States>,
4024
4062
  InputEvents extends ReadonlyArray<TaggedSchema> = Events,
4025
4063
  ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []
4026
- > extends ActorContext<InputEvents, ParentEvents> {
4064
+ > extends MachineReferences<InputEvents, ParentEvents> {
4027
4065
  readonly state: StateByIdentifier<States, StateId>
4028
4066
  readonly containingState: ParentStateValue<States, StateId>
4029
4067
  readonly ancestors: ParentStateValues<States, StateId>
@@ -4046,7 +4084,7 @@ export declare namespace Machine {
4046
4084
  Output,
4047
4085
  InputEvents extends ReadonlyArray<TaggedSchema> = Events,
4048
4086
  ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []
4049
- > extends ActorContext<InputEvents, ParentEvents> {
4087
+ > extends MachineReferences<InputEvents, ParentEvents> {
4050
4088
  readonly id: string
4051
4089
  readonly state: StateByIdentifier<States, StateId>
4052
4090
  readonly containingState: ParentStateValue<States, StateId>
@@ -4069,7 +4107,7 @@ export declare namespace Machine {
4069
4107
  Output,
4070
4108
  InputEvents extends ReadonlyArray<TaggedSchema> = Events,
4071
4109
  ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []
4072
- > extends ActorContext<InputEvents, ParentEvents> {
4110
+ > extends MachineReferences<InputEvents, ParentEvents> {
4073
4111
  readonly id: string
4074
4112
  readonly state: StateByIdentifier<States, StateId>
4075
4113
  readonly containingState: ParentStateValue<States, StateId>
@@ -4088,7 +4126,7 @@ export declare namespace Machine {
4088
4126
  Error,
4089
4127
  InputEvents extends ReadonlyArray<TaggedSchema> = Events,
4090
4128
  ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []
4091
- > extends ActorContext<InputEvents, ParentEvents> {
4129
+ > extends MachineReferences<InputEvents, ParentEvents> {
4092
4130
  readonly id: string
4093
4131
  readonly state: StateByIdentifier<States, StateId>
4094
4132
  readonly containingState: ParentStateValue<States, StateId>
@@ -4111,7 +4149,7 @@ export declare namespace Machine {
4111
4149
  StateId extends StateIdentifier<States>,
4112
4150
  InputEvents extends ReadonlyArray<TaggedSchema> = Events,
4113
4151
  ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []
4114
- > extends ActorContext<InputEvents, ParentEvents> {
4152
+ > extends MachineReferences<InputEvents, ParentEvents> {
4115
4153
  readonly state: StateByIdentifier<States, StateId>
4116
4154
  readonly containingState: ParentStateValue<States, StateId>
4117
4155
  readonly ancestors: ParentStateValues<States, StateId>
@@ -4142,7 +4180,7 @@ export declare namespace Machine {
4142
4180
  StateId extends StateIdentifier<States>,
4143
4181
  InputEvents extends ReadonlyArray<TaggedSchema> = Events,
4144
4182
  ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []
4145
- > extends ActorContext<InputEvents, ParentEvents> {
4183
+ > extends MachineReferences<InputEvents, ParentEvents> {
4146
4184
  readonly state: StateByIdentifier<States, StateId>
4147
4185
  readonly containingState: ParentStateValue<States, StateId>
4148
4186
  readonly ancestors: ParentStateValues<States, StateId>
@@ -4169,7 +4207,7 @@ export declare namespace Machine {
4169
4207
  ChoiceId extends ChoiceIdentifier<States>,
4170
4208
  InputEvents extends ReadonlyArray<TaggedSchema> = Events,
4171
4209
  ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []
4172
- > extends ActorContext<InputEvents, ParentEvents> {
4210
+ > extends MachineReferences<InputEvents, ParentEvents> {
4173
4211
  readonly containingState: StateByIdentifier<
4174
4212
  States,
4175
4213
  Extract<ImmediateParentStateIdentifier<ChoiceId>, StateIdentifier<States>>
@@ -4616,13 +4654,18 @@ export declare namespace Machine {
4616
4654
  States extends StateSchemas,
4617
4655
  Events extends ReadonlyArray<TaggedSchema>,
4618
4656
  Emits extends ReadonlyArray<TaggedSchema>,
4619
- StateId extends StateIdentifier<States>
4657
+ StateId extends StateIdentifier<States>,
4658
+ InputEvents extends ReadonlyArray<TaggedSchema> = Events,
4659
+ ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []
4620
4660
  > =
4621
4661
  & InvokeOwned<States, Events, Emits, StateId>
4622
4662
  & (
4623
4663
  | {
4624
4664
  readonly id: string
4625
- readonly effect: InvokeSource<Effect.Effect<any, any, any>, InvokeContext<States, Events, Emits, StateId>>
4665
+ readonly effect: InvokeSource<
4666
+ Effect.Effect<any, any, any>,
4667
+ InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>
4668
+ >
4626
4669
  readonly after?: never
4627
4670
  readonly logic?: never
4628
4671
  readonly child?: never
@@ -4633,7 +4676,10 @@ export declare namespace Machine {
4633
4676
  }
4634
4677
  | {
4635
4678
  readonly id: string
4636
- readonly after: InvokeSource<Duration.Input, InvokeContext<States, Events, Emits, StateId>>
4679
+ readonly after: InvokeSource<
4680
+ Duration.Input,
4681
+ InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>
4682
+ >
4637
4683
  readonly effect?: never
4638
4684
  readonly logic?: never
4639
4685
  readonly child?: never
@@ -4645,7 +4691,10 @@ export declare namespace Machine {
4645
4691
  | {
4646
4692
  readonly id: string
4647
4693
  readonly address: string
4648
- readonly logic: InvokeSource<AnyLogicSource, InvokeContext<States, Events, Emits, StateId>>
4694
+ readonly logic: InvokeSource<
4695
+ AnyLogicSource,
4696
+ InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>
4697
+ >
4649
4698
  readonly effect?: never
4650
4699
  readonly after?: never
4651
4700
  readonly child?: never
@@ -4655,7 +4704,10 @@ export declare namespace Machine {
4655
4704
  }
4656
4705
  | {
4657
4706
  readonly child: ChildMachine.Any
4658
- readonly input?: {} | null | ((context: InvokeContext<States, Events, Emits, StateId>) => unknown)
4707
+ readonly input?:
4708
+ | {}
4709
+ | null
4710
+ | ((context: InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>) => unknown)
4659
4711
  readonly id?: never
4660
4712
  readonly address?: never
4661
4713
  readonly effect?: never
@@ -4672,10 +4724,16 @@ export declare namespace Machine {
4672
4724
  States extends StateSchemas,
4673
4725
  Events extends ReadonlyArray<TaggedSchema>,
4674
4726
  Emits extends ReadonlyArray<TaggedSchema>,
4675
- StateId extends StateIdentifier<States>
4727
+ StateId extends StateIdentifier<States>,
4728
+ InputEvents extends ReadonlyArray<TaggedSchema> = Events,
4729
+ ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []
4676
4730
  > =
4677
- | InvokeConfig<States, Events, Emits, StateId>
4678
- | ReadonlyArray<InvokeConfig<States, Events, Emits, StateId>>
4731
+ | InvokeConfig<States, Events, Emits, StateId, InputEvents, ParentEvents>
4732
+ | ReadonlyArray<InvokeConfig<States, Events, Emits, StateId, InputEvents, ParentEvents>>
4733
+
4734
+ type TypedInvokeDefinition =
4735
+ | InvokeTyped<any, any, any, any, any, any>
4736
+ | ReadonlyArray<InvokeTyped<any, any, any, any, any, any>>
4679
4737
 
4680
4738
  type InvokeHandlerRequirement<Value, Handler> = IsAny<Value> extends true ? { readonly handler: Handler }
4681
4739
  : [Value] extends [never] ? { readonly handler?: never }
@@ -4697,7 +4755,9 @@ export declare namespace Machine {
4697
4755
  Emits extends ReadonlyArray<TaggedSchema>,
4698
4756
  StateId extends StateIdentifier<States>,
4699
4757
  Fx extends Effect.Effect<any, any, any>,
4700
- Source = Fx
4758
+ Source = Fx,
4759
+ InputEvents extends ReadonlyArray<TaggedSchema> = Events,
4760
+ ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []
4701
4761
  > =
4702
4762
  & {
4703
4763
  readonly id: InvokeLifecycleId
@@ -4714,7 +4774,15 @@ export declare namespace Machine {
4714
4774
  States,
4715
4775
  Events,
4716
4776
  Emits,
4717
- InvokeDoneContext<States, Events, Emits, StateId, Effect.Success<NoInfer<Fx>>>
4777
+ InvokeDoneContext<
4778
+ States,
4779
+ Events,
4780
+ Emits,
4781
+ StateId,
4782
+ Effect.Success<NoInfer<Fx>>,
4783
+ InputEvents,
4784
+ ParentEvents
4785
+ >
4718
4786
  >
4719
4787
  >
4720
4788
  & InvokeFailureRequirement<
@@ -4723,7 +4791,15 @@ export declare namespace Machine {
4723
4791
  States,
4724
4792
  Events,
4725
4793
  Emits,
4726
- InvokeFailureContext<States, Events, Emits, StateId, Effect.Error<NoInfer<Fx>>>
4794
+ InvokeFailureContext<
4795
+ States,
4796
+ Events,
4797
+ Emits,
4798
+ StateId,
4799
+ Effect.Error<NoInfer<Fx>>,
4800
+ InputEvents,
4801
+ ParentEvents
4802
+ >
4727
4803
  >
4728
4804
  >
4729
4805
 
@@ -4731,10 +4807,15 @@ export declare namespace Machine {
4731
4807
  States extends StateSchemas,
4732
4808
  Events extends ReadonlyArray<TaggedSchema>,
4733
4809
  Emits extends ReadonlyArray<TaggedSchema>,
4734
- StateId extends StateIdentifier<States>
4810
+ StateId extends StateIdentifier<States>,
4811
+ InputEvents extends ReadonlyArray<TaggedSchema> = Events,
4812
+ ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []
4735
4813
  > = {
4736
4814
  readonly id: InvokeLifecycleId
4737
- readonly after: InvokeSource<Duration.Input, InvokeContext<States, Events, Emits, StateId>>
4815
+ readonly after: InvokeSource<
4816
+ Duration.Input,
4817
+ InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>
4818
+ >
4738
4819
  readonly effect?: never
4739
4820
  readonly logic?: never
4740
4821
  readonly child?: never
@@ -4745,7 +4826,7 @@ export declare namespace Machine {
4745
4826
  States,
4746
4827
  Events,
4747
4828
  Emits,
4748
- InvokeDoneContext<States, Events, Emits, StateId, void>
4829
+ InvokeDoneContext<States, Events, Emits, StateId, void, InputEvents, ParentEvents>
4749
4830
  >
4750
4831
  }
4751
4832
 
@@ -4761,7 +4842,9 @@ export declare namespace Machine {
4761
4842
  ChildOutput,
4762
4843
  ChildInitialError,
4763
4844
  Address extends ChildAddress<never>,
4764
- Source = Logic<ChildState, ChildEvent, ChildError, ChildRequirements, ChildOutput, ChildInitialError>
4845
+ Source = Logic<ChildState, ChildEvent, ChildError, ChildRequirements, ChildOutput, ChildInitialError>,
4846
+ InputEvents extends ReadonlyArray<TaggedSchema> = Events,
4847
+ ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []
4765
4848
  > =
4766
4849
  & {
4767
4850
  readonly id: InvokeLifecycleId
@@ -4774,16 +4857,36 @@ export declare namespace Machine {
4774
4857
  States,
4775
4858
  Events,
4776
4859
  Emits,
4777
- InvokeSnapshotContext<States, Events, Emits, StateId, ChildState, ChildError, ChildOutput>
4860
+ InvokeSnapshotContext<
4861
+ States,
4862
+ Events,
4863
+ Emits,
4864
+ StateId,
4865
+ ChildState,
4866
+ ChildError,
4867
+ ChildOutput,
4868
+ InputEvents,
4869
+ ParentEvents
4870
+ >
4778
4871
  >
4779
4872
  }
4780
4873
  & InvokeDoneRequirement<
4781
4874
  ChildOutput,
4782
- InvokeTransition<States, Events, Emits, InvokeDoneContext<States, Events, Emits, StateId, ChildOutput>>
4875
+ InvokeTransition<
4876
+ States,
4877
+ Events,
4878
+ Emits,
4879
+ InvokeDoneContext<States, Events, Emits, StateId, ChildOutput, InputEvents, ParentEvents>
4880
+ >
4783
4881
  >
4784
4882
  & InvokeFailureRequirement<
4785
4883
  ChildError,
4786
- InvokeTransition<States, Events, Emits, InvokeFailureContext<States, Events, Emits, StateId, ChildError>>
4884
+ InvokeTransition<
4885
+ States,
4886
+ Events,
4887
+ Emits,
4888
+ InvokeFailureContext<States, Events, Emits, StateId, ChildError, InputEvents, ParentEvents>
4889
+ >
4787
4890
  >
4788
4891
 
4789
4892
  export type ChildInvokeArgs<
@@ -4792,7 +4895,9 @@ export declare namespace Machine {
4792
4895
  Emits extends ReadonlyArray<TaggedSchema>,
4793
4896
  StateId extends StateIdentifier<States>,
4794
4897
  ChildDefinition extends Machine.Any,
4795
- Child extends ChildMachine<string, ChildDefinition>
4898
+ Child extends ChildMachine<string, ChildDefinition>,
4899
+ InputEvents extends ReadonlyArray<TaggedSchema> = Events,
4900
+ ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []
4796
4901
  > =
4797
4902
  & {
4798
4903
  readonly child:
@@ -4819,12 +4924,17 @@ export declare namespace Machine {
4819
4924
  StateId,
4820
4925
  Snapshot<Machine.States<ChildDefinition>>,
4821
4926
  Error<ChildDefinition>,
4822
- Output<ChildDefinition>
4927
+ Output<ChildDefinition>,
4928
+ InputEvents,
4929
+ ParentEvents
4823
4930
  >
4824
4931
  >
4825
4932
  }
4826
4933
  & (Input<ChildDefinition> extends typeof Schema.Void ? { readonly input?: never } : {
4827
- readonly input: InvokeSource<Input<ChildDefinition>["Type"], InvokeContext<States, Events, Emits, StateId>>
4934
+ readonly input: InvokeSource<
4935
+ Input<ChildDefinition>["Type"],
4936
+ InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>
4937
+ >
4828
4938
  })
4829
4939
  & InvokeDoneRequirement<
4830
4940
  Output<ChildDefinition>,
@@ -4832,7 +4942,15 @@ export declare namespace Machine {
4832
4942
  States,
4833
4943
  Events,
4834
4944
  Emits,
4835
- InvokeDoneContext<States, Events, Emits, StateId, Output<ChildDefinition>>
4945
+ InvokeDoneContext<
4946
+ States,
4947
+ Events,
4948
+ Emits,
4949
+ StateId,
4950
+ Output<ChildDefinition>,
4951
+ InputEvents,
4952
+ ParentEvents
4953
+ >
4836
4954
  >
4837
4955
  >
4838
4956
  & InvokeFailureRequirement<
@@ -4846,7 +4964,9 @@ export declare namespace Machine {
4846
4964
  Events,
4847
4965
  Emits,
4848
4966
  StateId,
4849
- Error<ChildDefinition> | ActionError<Services<ChildDefinition>>
4967
+ Error<ChildDefinition> | ActionError<Services<ChildDefinition>>,
4968
+ InputEvents,
4969
+ ParentEvents
4850
4970
  >
4851
4971
  >
4852
4972
  >
@@ -4863,6 +4983,8 @@ export declare namespace Machine {
4863
4983
  Events extends ReadonlyArray<TaggedSchema>,
4864
4984
  Emits extends ReadonlyArray<TaggedSchema>,
4865
4985
  StateId extends StateIdentifier<States>,
4986
+ InputEvents extends ReadonlyArray<TaggedSchema>,
4987
+ ParentEvents extends ReadonlyArray<TaggedSchema>,
4866
4988
  Raw
4867
4989
  > = Raw extends InvokeTyped<any, any, any, any, any> ? unknown
4868
4990
  : Raw extends { readonly effect: infer Source } ?
@@ -4873,7 +4995,7 @@ export declare namespace Machine {
4873
4995
  States,
4874
4996
  Events,
4875
4997
  Emits,
4876
- InvokeDoneContext<States, Events, Emits, StateId, Effect.Success<Fx>>
4998
+ InvokeDoneContext<States, Events, Emits, StateId, Effect.Success<Fx>, InputEvents, ParentEvents>
4877
4999
  >
4878
5000
  >
4879
5001
  & InvokeFailureRequirement<
@@ -4882,7 +5004,7 @@ export declare namespace Machine {
4882
5004
  States,
4883
5005
  Events,
4884
5006
  Emits,
4885
- InvokeFailureContext<States, Events, Emits, StateId, Effect.Error<Fx>>
5007
+ InvokeFailureContext<States, Events, Emits, StateId, Effect.Error<Fx>, InputEvents, ParentEvents>
4886
5008
  >
4887
5009
  >
4888
5010
  & { readonly onSnapshot?: never }
@@ -4892,7 +5014,7 @@ export declare namespace Machine {
4892
5014
  States,
4893
5015
  Events,
4894
5016
  Emits,
4895
- InvokeDoneContext<States, Events, Emits, StateId, void>
5017
+ InvokeDoneContext<States, Events, Emits, StateId, void, InputEvents, ParentEvents>
4896
5018
  >
4897
5019
  readonly onFailure?: never
4898
5020
  readonly onSnapshot?: never
@@ -4905,7 +5027,7 @@ export declare namespace Machine {
4905
5027
  States,
4906
5028
  Events,
4907
5029
  Emits,
4908
- InvokeDoneContext<States, Events, Emits, StateId, InvokeOutput<Raw>>
5030
+ InvokeDoneContext<States, Events, Emits, StateId, InvokeOutput<Raw>, InputEvents, ParentEvents>
4909
5031
  >
4910
5032
  >
4911
5033
  & InvokeFailureRequirement<
@@ -4914,7 +5036,15 @@ export declare namespace Machine {
4914
5036
  States,
4915
5037
  Events,
4916
5038
  Emits,
4917
- InvokeFailureContext<States, Events, Emits, StateId, InvokeRuntimeError<Raw>>
5039
+ InvokeFailureContext<
5040
+ States,
5041
+ Events,
5042
+ Emits,
5043
+ StateId,
5044
+ InvokeRuntimeError<Raw>,
5045
+ InputEvents,
5046
+ ParentEvents
5047
+ >
4918
5048
  >
4919
5049
  >
4920
5050
  & {
@@ -4935,7 +5065,9 @@ export declare namespace Machine {
4935
5065
  StateId,
4936
5066
  ChildLogic extends Logic<infer ChildState, any, any, any, any, any> ? ChildState : never,
4937
5067
  InvokeRuntimeError<Raw>,
4938
- InvokeOutput<Raw>
5068
+ InvokeOutput<Raw>,
5069
+ InputEvents,
5070
+ ParentEvents
4939
5071
  >
4940
5072
  >
4941
5073
  }
@@ -4948,7 +5080,15 @@ export declare namespace Machine {
4948
5080
  States,
4949
5081
  Events,
4950
5082
  Emits,
4951
- InvokeDoneContext<States, Events, Emits, StateId, Output<ChildDefinition>>
5083
+ InvokeDoneContext<
5084
+ States,
5085
+ Events,
5086
+ Emits,
5087
+ StateId,
5088
+ Output<ChildDefinition>,
5089
+ InputEvents,
5090
+ ParentEvents
5091
+ >
4952
5092
  >
4953
5093
  >
4954
5094
  & InvokeFailureRequirement<
@@ -4962,12 +5102,17 @@ export declare namespace Machine {
4962
5102
  Events,
4963
5103
  Emits,
4964
5104
  StateId,
4965
- Error<ChildDefinition> | ActionError<Services<ChildDefinition>>
5105
+ Error<ChildDefinition> | ActionError<Services<ChildDefinition>>,
5106
+ InputEvents,
5107
+ ParentEvents
4966
5108
  >
4967
5109
  >
4968
5110
  >
4969
5111
  & (Input<ChildDefinition> extends typeof Schema.Void ? { readonly input?: never } : {
4970
- readonly input: InvokeSource<Input<ChildDefinition>["Type"], InvokeContext<States, Events, Emits, StateId>>
5112
+ readonly input: InvokeSource<
5113
+ Input<ChildDefinition>["Type"],
5114
+ InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>
5115
+ >
4971
5116
  })
4972
5117
  & {
4973
5118
  readonly onSnapshot?: InvokeTransition<
@@ -4981,7 +5126,9 @@ export declare namespace Machine {
4981
5126
  StateId,
4982
5127
  Snapshot<Machine.States<ChildDefinition>>,
4983
5128
  Error<ChildDefinition>,
4984
- Output<ChildDefinition>
5129
+ Output<ChildDefinition>,
5130
+ InputEvents,
5131
+ ParentEvents
4985
5132
  >
4986
5133
  >
4987
5134
  }
@@ -4993,11 +5140,21 @@ export declare namespace Machine {
4993
5140
  Events extends ReadonlyArray<TaggedSchema>,
4994
5141
  Emits extends ReadonlyArray<TaggedSchema>,
4995
5142
  StateId extends StateIdentifier<States>,
5143
+ InputEvents extends ReadonlyArray<TaggedSchema>,
5144
+ ParentEvents extends ReadonlyArray<TaggedSchema>,
4996
5145
  Raw
4997
5146
  > = Raw extends ReadonlyArray<any> ? {
4998
- readonly [Index in keyof Raw]: ContextualInvokeConfig<States, Events, Emits, StateId, Raw[Index]>
5147
+ readonly [Index in keyof Raw]: ContextualInvokeConfig<
5148
+ States,
5149
+ Events,
5150
+ Emits,
5151
+ StateId,
5152
+ InputEvents,
5153
+ ParentEvents,
5154
+ Raw[Index]
5155
+ >
4999
5156
  }
5000
- : ContextualInvokeConfig<States, Events, Emits, StateId, Raw>
5157
+ : ContextualInvokeConfig<States, Events, Emits, StateId, InputEvents, ParentEvents, Raw>
5001
5158
 
5002
5159
  type OutputHandlerConfig<
5003
5160
  States extends StateSchemas,
@@ -5049,7 +5206,9 @@ export declare namespace Machine {
5049
5206
  context: StateActionContext<States, Events, Emits, StateId, InputEvents, ParentEvents>,
5050
5207
  enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>
5051
5208
  ) => StateActionResult<any, any>
5052
- readonly invoke?: InvokeDefinition<States, Events, Emits, StateId>
5209
+ readonly invoke?:
5210
+ | InvokeDefinition<States, Events, Emits, StateId, InputEvents, ParentEvents>
5211
+ | TypedInvokeDefinition
5053
5212
  readonly always?:
5054
5213
  | ((
5055
5214
  context: AlwaysContext<States, Events, Emits, StateId, InputEvents, ParentEvents>,
@@ -5300,14 +5459,26 @@ export declare namespace Machine {
5300
5459
  type HandlerInvokeContextAtPath<
5301
5460
  AllStates extends StateSchemas,
5302
5461
  Events extends ReadonlyArray<TaggedSchema>,
5462
+ InputEvents extends ReadonlyArray<TaggedSchema>,
5303
5463
  Emits extends ReadonlyArray<TaggedSchema>,
5464
+ ParentEvents extends ReadonlyArray<TaggedSchema>,
5304
5465
  Config,
5305
5466
  StateId extends StateNodeIdentifier<AllStates>,
5306
5467
  NodeConfig = HandlerConfigAtPath<Config, StateId>
5307
5468
  > = StateId extends StateIdentifier<AllStates> ?
5308
5469
  NodeConfig extends { readonly invoke: infer Invoke } ? HandlerValidationAtPath<
5309
5470
  StateId,
5310
- { readonly invoke: ContextualInvokeDefinition<AllStates, Events, Emits, StateId, Invoke> }
5471
+ {
5472
+ readonly invoke: ContextualInvokeDefinition<
5473
+ AllStates,
5474
+ Events,
5475
+ Emits,
5476
+ StateId,
5477
+ InputEvents,
5478
+ ParentEvents,
5479
+ Invoke
5480
+ >
5481
+ }
5311
5482
  >
5312
5483
  : unknown
5313
5484
  : unknown
@@ -5315,14 +5486,18 @@ export declare namespace Machine {
5315
5486
  type HandlerInvokeContexts<
5316
5487
  AllStates extends StateSchemas,
5317
5488
  Events extends ReadonlyArray<TaggedSchema>,
5489
+ InputEvents extends ReadonlyArray<TaggedSchema>,
5318
5490
  Emits extends ReadonlyArray<TaggedSchema>,
5491
+ ParentEvents extends ReadonlyArray<TaggedSchema>,
5319
5492
  Config
5320
5493
  > = Types.UnionToIntersection<
5321
5494
  StateNodeIdentifier<AllStates> extends infer StateId extends StateNodeIdentifier<AllStates> ?
5322
5495
  StateId extends StateNodeIdentifier<AllStates> ? HandlerInvokeContextAtPath<
5323
5496
  AllStates,
5324
5497
  Events,
5498
+ InputEvents,
5325
5499
  Emits,
5500
+ ParentEvents,
5326
5501
  Config,
5327
5502
  StateId
5328
5503
  >
@@ -5919,7 +6094,7 @@ export declare namespace Machine {
5919
6094
  >(
5920
6095
  config:
5921
6096
  & Config
5922
- & HandlerInvokeContexts<States, Events, Emits, NoInfer<Config>>
6097
+ & HandlerInvokeContexts<States, Events, InputEvents, Emits, ParentEvents, NoInfer<Config>>
5923
6098
  & HandlerTreeValidation<
5924
6099
  States,
5925
6100
  Events,
@@ -6256,7 +6431,7 @@ interface Make {
6256
6431
  * adds raised events and other machine-local deliveries.
6257
6432
  * `Machine.emittedEvents` defines outward ephemeral notifications, while
6258
6433
  * `parentEvents` declares the inputs a child may explicitly send to its owning
6259
- * actor. All descriptors expose deferred constructors while retaining their
6434
+ * machine. All descriptors expose deferred constructors while retaining their
6260
6435
  * schemas opaquely for runtime validation. Public and internal tags must be
6261
6436
  * disjoint.
6262
6437
  *
@@ -6368,8 +6543,8 @@ export const internalEvents: {
6368
6543
 
6369
6544
  /**
6370
6545
  * Defines the ephemeral notifications a machine may publish to external
6371
- * observers. Emitted events are separate from actor input and are never sent
6372
- * implicitly to a parent actor. Observe them through `MachineRef.emissions` or
6546
+ * observers. Emitted events are separate from machine input and are never sent
6547
+ * implicitly to a parent machine. Observe them through `MachineRef.emissions` or
6373
6548
  * the AtomMachine emission stream adapters.
6374
6549
  *
6375
6550
  * @category constructors
@@ -6559,7 +6734,7 @@ type DynamicEffectInvokeSource<
6559
6734
  Emits extends ReadonlyArray<Machine.TaggedSchema>,
6560
6735
  StateId extends Machine.StateIdentifier<States>,
6561
6736
  Source extends (
6562
- context: Machine.InvokeContext<States, Events, Emits, StateId>
6737
+ context: Machine.InvokeContext<States, Events, Emits, StateId, readonly [], readonly []>
6563
6738
  ) => Effect.Effect<unknown, unknown, unknown>
6564
6739
  > = {
6565
6740
  readonly id: InvokeLifecycleId
@@ -6581,7 +6756,15 @@ type DynamicEffectDoneHandler<
6581
6756
  States,
6582
6757
  Events,
6583
6758
  Emits,
6584
- Machine.InvokeDoneContext<States, Events, Emits, StateId, Effect.Success<ReturnType<NoInfer<Source>>>>
6759
+ Machine.InvokeDoneContext<
6760
+ States,
6761
+ Events,
6762
+ Emits,
6763
+ StateId,
6764
+ Effect.Success<ReturnType<NoInfer<Source>>>,
6765
+ readonly [],
6766
+ readonly []
6767
+ >
6585
6768
  >
6586
6769
 
6587
6770
  type DynamicEffectFailureHandler<
@@ -6594,7 +6777,15 @@ type DynamicEffectFailureHandler<
6594
6777
  States,
6595
6778
  Events,
6596
6779
  Emits,
6597
- Machine.InvokeFailureContext<States, Events, Emits, StateId, Effect.Error<ReturnType<NoInfer<Source>>>>
6780
+ Machine.InvokeFailureContext<
6781
+ States,
6782
+ Events,
6783
+ Emits,
6784
+ StateId,
6785
+ Effect.Error<ReturnType<NoInfer<Source>>>,
6786
+ readonly [],
6787
+ readonly []
6788
+ >
6598
6789
  >
6599
6790
 
6600
6791
  type DynamicEffectInvokeResult<
@@ -6604,7 +6795,7 @@ type DynamicEffectInvokeResult<
6604
6795
  StateId extends Machine.StateIdentifier<States>,
6605
6796
  Source extends (...args: ReadonlyArray<never>) => Effect.Effect<unknown, unknown, unknown>
6606
6797
  > =
6607
- & Machine.InvokeConfig<States, Events, Emits, StateId>
6798
+ & Machine.InvokeConfig<States, Events, Emits, StateId, readonly [], readonly []>
6608
6799
  & Machine.InvokeTyped<
6609
6800
  Effect.Success<ReturnType<Source>>,
6610
6801
  Effect.Error<ReturnType<Source>>,
@@ -6614,6 +6805,325 @@ type DynamicEffectInvokeResult<
6614
6805
 
6615
6806
  type InvokeChannelIsNever<Value> = IsAny<Value> extends true ? false : [Value] extends [never] ? true : false
6616
6807
 
6808
+ type BoundDynamicEffectInvokeSource<
6809
+ States extends Machine.StateSchemas,
6810
+ Events extends ReadonlyArray<Machine.TaggedSchema>,
6811
+ Emits extends ReadonlyArray<Machine.TaggedSchema>,
6812
+ InputEvents extends ReadonlyArray<Machine.TaggedSchema>,
6813
+ ParentEvents extends ReadonlyArray<Machine.TaggedSchema>,
6814
+ StateId extends Machine.StateIdentifier<States>,
6815
+ Source extends (
6816
+ context: Machine.InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>
6817
+ ) => Effect.Effect<unknown, unknown, unknown>
6818
+ > = {
6819
+ readonly id: InvokeLifecycleId
6820
+ readonly effect: Source
6821
+ readonly after?: never
6822
+ readonly logic?: never
6823
+ readonly child?: never
6824
+ readonly address?: never
6825
+ readonly onSnapshot?: never
6826
+ }
6827
+
6828
+ type BoundDynamicEffectDoneHandler<
6829
+ States extends Machine.StateSchemas,
6830
+ Events extends ReadonlyArray<Machine.TaggedSchema>,
6831
+ Emits extends ReadonlyArray<Machine.TaggedSchema>,
6832
+ InputEvents extends ReadonlyArray<Machine.TaggedSchema>,
6833
+ ParentEvents extends ReadonlyArray<Machine.TaggedSchema>,
6834
+ StateId extends Machine.StateIdentifier<States>,
6835
+ Source extends (...args: ReadonlyArray<never>) => Effect.Effect<unknown, unknown, unknown>
6836
+ > = Machine.InvokeTransition<
6837
+ States,
6838
+ Events,
6839
+ Emits,
6840
+ Machine.InvokeDoneContext<
6841
+ States,
6842
+ Events,
6843
+ Emits,
6844
+ StateId,
6845
+ Effect.Success<ReturnType<NoInfer<Source>>>,
6846
+ InputEvents,
6847
+ ParentEvents
6848
+ >
6849
+ >
6850
+
6851
+ type BoundDynamicEffectFailureHandler<
6852
+ States extends Machine.StateSchemas,
6853
+ Events extends ReadonlyArray<Machine.TaggedSchema>,
6854
+ Emits extends ReadonlyArray<Machine.TaggedSchema>,
6855
+ InputEvents extends ReadonlyArray<Machine.TaggedSchema>,
6856
+ ParentEvents extends ReadonlyArray<Machine.TaggedSchema>,
6857
+ StateId extends Machine.StateIdentifier<States>,
6858
+ Source extends (...args: ReadonlyArray<never>) => Effect.Effect<unknown, unknown, unknown>
6859
+ > = Machine.InvokeTransition<
6860
+ States,
6861
+ Events,
6862
+ Emits,
6863
+ Machine.InvokeFailureContext<
6864
+ States,
6865
+ Events,
6866
+ Emits,
6867
+ StateId,
6868
+ Effect.Error<ReturnType<NoInfer<Source>>>,
6869
+ InputEvents,
6870
+ ParentEvents
6871
+ >
6872
+ >
6873
+
6874
+ type BoundDynamicEffectInvokeResult<
6875
+ States extends Machine.StateSchemas,
6876
+ Events extends ReadonlyArray<Machine.TaggedSchema>,
6877
+ Emits extends ReadonlyArray<Machine.TaggedSchema>,
6878
+ InputEvents extends ReadonlyArray<Machine.TaggedSchema>,
6879
+ ParentEvents extends ReadonlyArray<Machine.TaggedSchema>,
6880
+ StateId extends Machine.StateIdentifier<States>,
6881
+ Source extends (...args: ReadonlyArray<never>) => Effect.Effect<unknown, unknown, unknown>
6882
+ > =
6883
+ & Machine.InvokeConfig<States, Events, Emits, StateId, InputEvents, ParentEvents>
6884
+ & Machine.InvokeTyped<
6885
+ Effect.Success<ReturnType<Source>>,
6886
+ Effect.Error<ReturnType<Source>>,
6887
+ Effect.Services<ReturnType<Source>>,
6888
+ never
6889
+ >
6890
+
6891
+ /**
6892
+ * Machine-bound invocation constructor that preserves the owning machine's
6893
+ * public input and parent protocols in every invocation callback.
6894
+ *
6895
+ * @category constructors
6896
+ * @since 0.11.0
6897
+ */
6898
+ export interface Invoker<
6899
+ States extends Machine.StateSchemas,
6900
+ Events extends ReadonlyArray<Machine.TaggedSchema>,
6901
+ Emits extends ReadonlyArray<Machine.TaggedSchema>,
6902
+ InputEvents extends ReadonlyArray<Machine.TaggedSchema>,
6903
+ ParentEvents extends ReadonlyArray<Machine.TaggedSchema>
6904
+ > {
6905
+ <
6906
+ StateId extends Machine.StateIdentifier<States>,
6907
+ const Source extends (
6908
+ context: Machine.InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>
6909
+ ) => Effect.Effect<unknown, unknown, unknown>
6910
+ >(
6911
+ config:
6912
+ & BoundDynamicEffectInvokeSource<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>
6913
+ & {
6914
+ readonly onDone: BoundDynamicEffectDoneHandler<
6915
+ States,
6916
+ Events,
6917
+ Emits,
6918
+ InputEvents,
6919
+ ParentEvents,
6920
+ StateId,
6921
+ Source
6922
+ >
6923
+ readonly onFailure: BoundDynamicEffectFailureHandler<
6924
+ States,
6925
+ Events,
6926
+ Emits,
6927
+ InputEvents,
6928
+ ParentEvents,
6929
+ StateId,
6930
+ Source
6931
+ >
6932
+ },
6933
+ ..._validation: InvokeChannelIsNever<Effect.Success<ReturnType<Source>>> extends true ? [
6934
+ "onDone must be omitted when the Effect output is never"
6935
+ ]
6936
+ : InvokeChannelIsNever<Effect.Error<ReturnType<Source>>> extends true ? [
6937
+ "onFailure must be omitted when the Effect error is never"
6938
+ ]
6939
+ : []
6940
+ ): BoundDynamicEffectInvokeResult<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>
6941
+ <
6942
+ StateId extends Machine.StateIdentifier<States>,
6943
+ const Source extends (
6944
+ context: Machine.InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>
6945
+ ) => Effect.Effect<unknown, never, unknown>
6946
+ >(
6947
+ config:
6948
+ & BoundDynamicEffectInvokeSource<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>
6949
+ & {
6950
+ readonly onDone: BoundDynamicEffectDoneHandler<
6951
+ States,
6952
+ Events,
6953
+ Emits,
6954
+ InputEvents,
6955
+ ParentEvents,
6956
+ StateId,
6957
+ Source
6958
+ >
6959
+ readonly onFailure?: never
6960
+ },
6961
+ ..._validation: InvokeChannelIsNever<Effect.Success<ReturnType<Source>>> extends true ? [
6962
+ "onDone must be omitted when the Effect output is never"
6963
+ ]
6964
+ : []
6965
+ ): BoundDynamicEffectInvokeResult<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>
6966
+ <
6967
+ StateId extends Machine.StateIdentifier<States>,
6968
+ const Source extends (
6969
+ context: Machine.InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>
6970
+ ) => Effect.Effect<never, unknown, unknown>
6971
+ >(
6972
+ config:
6973
+ & BoundDynamicEffectInvokeSource<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>
6974
+ & {
6975
+ readonly onDone?: never
6976
+ readonly onFailure: BoundDynamicEffectFailureHandler<
6977
+ States,
6978
+ Events,
6979
+ Emits,
6980
+ InputEvents,
6981
+ ParentEvents,
6982
+ StateId,
6983
+ Source
6984
+ >
6985
+ },
6986
+ ..._validation: InvokeChannelIsNever<Effect.Error<ReturnType<Source>>> extends true ? [
6987
+ "onFailure must be omitted when the Effect error is never"
6988
+ ]
6989
+ : []
6990
+ ): BoundDynamicEffectInvokeResult<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>
6991
+ <
6992
+ StateId extends Machine.StateIdentifier<States>,
6993
+ const Source extends (
6994
+ context: Machine.InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>
6995
+ ) => Effect.Effect<never, never, unknown>
6996
+ >(
6997
+ config:
6998
+ & BoundDynamicEffectInvokeSource<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>
6999
+ & {
7000
+ readonly onDone?: never
7001
+ readonly onFailure?: never
7002
+ }
7003
+ ): BoundDynamicEffectInvokeResult<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>
7004
+ <
7005
+ StateId extends Machine.StateIdentifier<States>,
7006
+ const Fx extends Effect.Effect<any, any, any>,
7007
+ const Config extends object
7008
+ >(
7009
+ config:
7010
+ & Config
7011
+ & Machine.EffectInvokeArgs<
7012
+ States,
7013
+ Events,
7014
+ Emits,
7015
+ StateId,
7016
+ Fx,
7017
+ Fx,
7018
+ InputEvents,
7019
+ ParentEvents
7020
+ >
7021
+ ):
7022
+ & Config
7023
+ & Machine.InvokeOwned<States, Events, Emits, StateId>
7024
+ & Machine.InvokeTyped<Effect.Success<Fx>, Effect.Error<Fx>, Effect.Services<Fx>, never>
7025
+ <StateId extends Machine.StateIdentifier<States>, const Config extends object>(
7026
+ config: Config & Machine.TimerInvokeArgs<States, Events, Emits, StateId, InputEvents, ParentEvents>
7027
+ ): Config & Machine.InvokeOwned<States, Events, Emits, StateId> & Machine.InvokeTyped<void, never, never, never>
7028
+ <
7029
+ StateId extends Machine.StateIdentifier<States>,
7030
+ ChildState,
7031
+ ChildEvent,
7032
+ ChildError,
7033
+ ChildRequirements,
7034
+ ChildOutput,
7035
+ ChildInitialError,
7036
+ Address extends ChildAddress<never>
7037
+ >(
7038
+ config: Machine.LogicInvokeArgs<
7039
+ States,
7040
+ Events,
7041
+ Emits,
7042
+ StateId,
7043
+ ChildState,
7044
+ ChildEvent,
7045
+ ChildError,
7046
+ ChildRequirements,
7047
+ ChildOutput,
7048
+ ChildInitialError,
7049
+ Address,
7050
+ (context: Machine.InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>) => Logic<
7051
+ ChildState,
7052
+ ChildEvent,
7053
+ ChildError,
7054
+ ChildRequirements,
7055
+ ChildOutput,
7056
+ ChildInitialError
7057
+ >,
7058
+ InputEvents,
7059
+ ParentEvents
7060
+ >
7061
+ ):
7062
+ & Machine.InvokeConfig<States, Events, Emits, StateId, InputEvents, ParentEvents>
7063
+ & Machine.InvokeTyped<ChildOutput, ChildError, ChildRequirements, ChildInitialError>
7064
+ <
7065
+ StateId extends Machine.StateIdentifier<States>,
7066
+ ChildState,
7067
+ ChildEvent,
7068
+ ChildError,
7069
+ ChildRequirements,
7070
+ ChildOutput,
7071
+ ChildInitialError,
7072
+ Address extends ChildAddress<never>,
7073
+ const Config extends object
7074
+ >(
7075
+ config:
7076
+ & Config
7077
+ & Machine.LogicInvokeArgs<
7078
+ States,
7079
+ Events,
7080
+ Emits,
7081
+ StateId,
7082
+ ChildState,
7083
+ ChildEvent,
7084
+ ChildError,
7085
+ ChildRequirements,
7086
+ ChildOutput,
7087
+ ChildInitialError,
7088
+ Address,
7089
+ Logic<ChildState, ChildEvent, ChildError, ChildRequirements, ChildOutput, ChildInitialError>,
7090
+ InputEvents,
7091
+ ParentEvents
7092
+ >
7093
+ ):
7094
+ & Config
7095
+ & Machine.InvokeOwned<States, Events, Emits, StateId>
7096
+ & Machine.InvokeTyped<ChildOutput, ChildError, ChildRequirements, ChildInitialError>
7097
+ <
7098
+ StateId extends Machine.StateIdentifier<States>,
7099
+ const Child extends ChildMachine.Any,
7100
+ const Config extends object
7101
+ >(
7102
+ config:
7103
+ & Config
7104
+ & Machine.ChildInvokeArgs<
7105
+ States,
7106
+ Events,
7107
+ Emits,
7108
+ StateId,
7109
+ Child["machine"],
7110
+ Child,
7111
+ InputEvents,
7112
+ ParentEvents
7113
+ >
7114
+ ):
7115
+ & Config
7116
+ & Machine.InvokeOwned<States, Events, Emits, StateId>
7117
+ & Machine.InvokeTyped<
7118
+ Machine.Output<Child["machine"]>,
7119
+ Machine.Error<Child["machine"]> | ActionError<Machine.Services<Child["machine"]>>,
7120
+ Machine.Services<Child["machine"]>,
7121
+ Machine.InitialError<Child["machine"]>,
7122
+ Machine.Emit<Child["machine"]>,
7123
+ Machine.EventOf<Machine.ParentEvents<Child["machine"]>>
7124
+ >
7125
+ }
7126
+
6617
7127
  /**
6618
7128
  * Preserves inference for a state-owned invocation configuration.
6619
7129
  *
@@ -6630,6 +7140,12 @@ type InvokeChannelIsNever<Value> = IsAny<Value> extends true ? false : [Value] e
6630
7140
  * lifecycle `id` and a typed communication `address`. Child descriptors already
6631
7141
  * own their identity, so `id` and `address` must not be repeated.
6632
7142
  *
7143
+ * Owner references are intentionally non-sendable here because this standalone
7144
+ * constructor does not know the owning definition. When a callback sends to
7145
+ * `self` or `parent`, use the bound constructor on the owning definition
7146
+ * (`definition.invoke(...)`) so the exact public input and `parentEvents`
7147
+ * protocols are available.
7148
+ *
6633
7149
  * ```ts
6634
7150
  * invoke: Machine.invoke({
6635
7151
  * id: "load",
@@ -6652,7 +7168,7 @@ export const invoke: {
6652
7168
  const Emits extends ReadonlyArray<Machine.TaggedSchema>,
6653
7169
  StateId extends Machine.StateIdentifier<States>,
6654
7170
  const Source extends (
6655
- context: Machine.InvokeContext<States, Events, Emits, StateId>
7171
+ context: Machine.InvokeContext<States, Events, Emits, StateId, readonly [], readonly []>
6656
7172
  ) => Effect.Effect<unknown, unknown, unknown>
6657
7173
  >(
6658
7174
  config:
@@ -6675,7 +7191,7 @@ export const invoke: {
6675
7191
  const Emits extends ReadonlyArray<Machine.TaggedSchema>,
6676
7192
  StateId extends Machine.StateIdentifier<States>,
6677
7193
  const Source extends (
6678
- context: Machine.InvokeContext<States, Events, Emits, StateId>
7194
+ context: Machine.InvokeContext<States, Events, Emits, StateId, readonly [], readonly []>
6679
7195
  ) => Effect.Effect<unknown, never, unknown>
6680
7196
  >(
6681
7197
  config:
@@ -6695,7 +7211,7 @@ export const invoke: {
6695
7211
  const Emits extends ReadonlyArray<Machine.TaggedSchema>,
6696
7212
  StateId extends Machine.StateIdentifier<States>,
6697
7213
  const Source extends (
6698
- context: Machine.InvokeContext<States, Events, Emits, StateId>
7214
+ context: Machine.InvokeContext<States, Events, Emits, StateId, readonly [], readonly []>
6699
7215
  ) => Effect.Effect<never, unknown, unknown>
6700
7216
  >(
6701
7217
  config:
@@ -6715,7 +7231,7 @@ export const invoke: {
6715
7231
  const Emits extends ReadonlyArray<Machine.TaggedSchema>,
6716
7232
  StateId extends Machine.StateIdentifier<States>,
6717
7233
  const Source extends (
6718
- context: Machine.InvokeContext<States, Events, Emits, StateId>
7234
+ context: Machine.InvokeContext<States, Events, Emits, StateId, readonly [], readonly []>
6719
7235
  ) => Effect.Effect<never, never, unknown>
6720
7236
  >(
6721
7237
  config:
@@ -6733,7 +7249,9 @@ export const invoke: {
6733
7249
  const Fx extends Effect.Effect<any, any, any>,
6734
7250
  const Config extends object
6735
7251
  >(
6736
- config: Config & Machine.EffectInvokeArgs<States, Events, Emits, StateId, Fx>
7252
+ config:
7253
+ & Config
7254
+ & Machine.EffectInvokeArgs<States, Events, Emits, StateId, Fx, Fx, readonly [], readonly []>
6737
7255
  ):
6738
7256
  & Config
6739
7257
  & Machine.InvokeOwned<States, Events, Emits, StateId>
@@ -6750,7 +7268,7 @@ export const invoke: {
6750
7268
  StateId extends Machine.StateIdentifier<States>,
6751
7269
  const Config extends object
6752
7270
  >(
6753
- config: Config & Machine.TimerInvokeArgs<States, Events, Emits, StateId>
7271
+ config: Config & Machine.TimerInvokeArgs<States, Events, Emits, StateId, readonly [], readonly []>
6754
7272
  ): Config & Machine.InvokeOwned<States, Events, Emits, StateId> & Machine.InvokeTyped<void, never, never, never>
6755
7273
  <
6756
7274
  const States extends Machine.StateSchemas,
@@ -6777,17 +7295,19 @@ export const invoke: {
6777
7295
  ChildOutput,
6778
7296
  ChildInitialError,
6779
7297
  Address,
6780
- (context: Machine.InvokeContext<States, Events, Emits, StateId>) => Logic<
7298
+ (context: Machine.InvokeContext<States, Events, Emits, StateId, readonly [], readonly []>) => Logic<
6781
7299
  ChildState,
6782
7300
  ChildEvent,
6783
7301
  ChildError,
6784
7302
  ChildRequirements,
6785
7303
  ChildOutput,
6786
7304
  ChildInitialError
6787
- >
7305
+ >,
7306
+ readonly [],
7307
+ readonly []
6788
7308
  >
6789
7309
  ):
6790
- & Machine.InvokeConfig<States, Events, Emits, StateId>
7310
+ & Machine.InvokeConfig<States, Events, Emits, StateId, readonly [], readonly []>
6791
7311
  & Machine.InvokeTyped<
6792
7312
  ChildOutput,
6793
7313
  ChildError,
@@ -6821,7 +7341,10 @@ export const invoke: {
6821
7341
  ChildRequirements,
6822
7342
  ChildOutput,
6823
7343
  ChildInitialError,
6824
- Address
7344
+ Address,
7345
+ Logic<ChildState, ChildEvent, ChildError, ChildRequirements, ChildOutput, ChildInitialError>,
7346
+ readonly [],
7347
+ readonly []
6825
7348
  >
6826
7349
  ):
6827
7350
  & Config
@@ -6840,7 +7363,9 @@ export const invoke: {
6840
7363
  const Child extends ChildMachine.Any,
6841
7364
  const Config extends object
6842
7365
  >(
6843
- config: Config & Machine.ChildInvokeArgs<States, Events, Emits, StateId, Child["machine"], Child>
7366
+ config:
7367
+ & Config
7368
+ & Machine.ChildInvokeArgs<States, Events, Emits, StateId, Child["machine"], Child, readonly [], readonly []>
6844
7369
  ):
6845
7370
  & Config
6846
7371
  & Machine.InvokeOwned<States, Events, Emits, StateId>
@@ -6854,11 +7379,11 @@ export const invoke: {
6854
7379
  >
6855
7380
  } = ((config: unknown) => config) as any
6856
7381
  /**
6857
- * Plans the initial state for a machine without executing actor commands.
7382
+ * Plans the initial state for a machine without executing machine commands.
6858
7383
  *
6859
7384
  * **Details**
6860
7385
  *
6861
- * The returned plan contains the settled initial snapshot, actor commands,
7386
+ * The returned plan contains the settled initial snapshot, machine commands,
6862
7387
  * emitted events, optional final output, and every startup microstep. Planning
6863
7388
  * may evaluate transition logic and follow completion, eventless, and
6864
7389
  * raised-event steps. Transition callbacks are evaluated synchronously.
@@ -6867,8 +7392,8 @@ export const invoke: {
6867
7392
  *
6868
7393
  * **Gotchas**
6869
7394
  *
6870
- * `start` executes the closed command list as part of the managed actor commit
6871
- * protocol. Manual planners may inspect commands but need a running actor scope
7395
+ * `start` executes the closed command list as part of the managed machine commit
7396
+ * protocol. Manual planners may inspect commands but need running machine targets
6872
7397
  * to execute child-addressed operations.
6873
7398
  *
6874
7399
  * **Example**
@@ -7103,7 +7628,7 @@ export const enabled: <
7103
7628
  *
7104
7629
  * **Gotchas**
7105
7630
  *
7106
- * `plan` returns data; it does not implement the actor commit protocol.
7631
+ * `plan` returns data; it does not implement the managed machine commit protocol.
7107
7632
  * `start` executes child commands, publishes `next`, and then delivers
7108
7633
  * `emittedEvents`. Events with no enabled transition are ignored and produce
7109
7634
  * an unchanged plan.
@@ -7410,6 +7935,89 @@ export const watch: <State, Event, Error = never, Output = never>(
7410
7935
  ref: MachineRef<State, Event, Error, Output>
7411
7936
  ) => Stream.Stream<RuntimeOutcome<State, Error, Output>> = internal.watch
7412
7937
 
7938
+ /**
7939
+ * Prepares a fresh machine without initializing it.
7940
+ *
7941
+ * Use this constructor when observation must be composed before initial-entry
7942
+ * actions run. Subscribe to `prepared.emissions`, then evaluate
7943
+ * `prepared.start`. Ordinary callers can continue to use {@link start}, which
7944
+ * starts directly and does not allocate the prepared lifecycle boundary.
7945
+ *
7946
+ * ```ts
7947
+ * const prepared = yield* Machine.prepare(machine)
7948
+ *
7949
+ * yield* prepared.emissions.pipe(
7950
+ * Stream.runForEach(handleEmission),
7951
+ * Effect.forkScoped({ startImmediately: true })
7952
+ * )
7953
+ *
7954
+ * const ref = yield* prepared.start
7955
+ * ```
7956
+ *
7957
+ * @category constructors
7958
+ * @since 0.11.0
7959
+ */
7960
+ export const prepare: <
7961
+ const States extends Machine.StateSchemas,
7962
+ const Events extends ReadonlyArray<Machine.TaggedSchema>,
7963
+ const Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [],
7964
+ const Input extends Schema.Top = typeof Schema.Void,
7965
+ UnhandledStates extends Machine.StateIdentifier<States> = Machine.StateIdentifier<States>,
7966
+ E = never,
7967
+ R = never,
7968
+ InitialE = never,
7969
+ InitialR = never,
7970
+ FinalStates extends Machine.StateIdentifier<States> = never,
7971
+ Output = never,
7972
+ OutputStates extends Machine.StateIdentifier<States> = never,
7973
+ InputEvents extends ReadonlyArray<Machine.TaggedSchema> = Events,
7974
+ ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []
7975
+ >(
7976
+ machine:
7977
+ & Machine<
7978
+ States,
7979
+ Events,
7980
+ Input,
7981
+ UnhandledStates,
7982
+ E,
7983
+ R,
7984
+ InitialE,
7985
+ InitialR,
7986
+ FinalStates,
7987
+ Output,
7988
+ Emits,
7989
+ OutputStates,
7990
+ InputEvents,
7991
+ ParentEvents
7992
+ >
7993
+ & EnsureExecutable<States, UnhandledStates, OutputStates>,
7994
+ ...args: [...Machine.InputArgs<Input>]
7995
+ ) => Effect.Effect<
7996
+ Prepared<
7997
+ Machine.Snapshot<States>,
7998
+ Machine.EventInputOf<InputEvents>,
7999
+ | E
8000
+ | ActionError<R>
8001
+ | InfiniteTransitionError
8002
+ | MachineSchemaDecodeError
8003
+ | StoppedError,
8004
+ Output,
8005
+ Machine.EmittedEventOf<Emits>,
8006
+ | InitialE
8007
+ | E
8008
+ | ActionError<InitialR | R>
8009
+ | InfiniteTransitionError
8010
+ | MachineSchemaDecodeError
8011
+ | StartupError
8012
+ | StoppedError,
8013
+ ExcludeCompatibleRuntime<
8014
+ ExecutionServices<InitialR | R>,
8015
+ Machine.EventOf<Events>,
8016
+ Machine.EmitOf<Emits>
8017
+ >
8018
+ >
8019
+ > = internal.prepare as any
8020
+
7413
8021
  /**
7414
8022
  * Starts a machine.
7415
8023
  *
@@ -7421,7 +8029,7 @@ export const watch: <State, Event, Error = never, Output = never>(
7421
8029
  * **Details**
7422
8030
  *
7423
8031
  * For each accepted event the runtime plans the complete synchronous
7424
- * macrostep, executes closed actor commands, stops invokes for exited states,
8032
+ * macrostep, executes closed machine commands, stops invokes for exited states,
7425
8033
  * publishes the new state, delivers emitted events, and then starts invokes
7426
8034
  * for entered states.
7427
8035
  *