@typeonce/effect-machine 0.9.0 → 0.11.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 (93) hide show
  1. package/README.md +167 -28
  2. package/dist/Machine.d.ts +491 -283
  3. package/dist/Machine.d.ts.map +1 -1
  4. package/dist/Machine.js +74 -76
  5. package/dist/Machine.js.map +1 -1
  6. package/dist/internal/machine/atom.d.ts +7 -3
  7. package/dist/internal/machine/atom.d.ts.map +1 -1
  8. package/dist/internal/machine/atom.js +42 -6
  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 +15 -19
  32. package/dist/internal/machine/machine.d.ts.map +1 -1
  33. package/dist/internal/machine/machine.js +16 -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 +3 -0
  40. package/dist/internal/machine/process.d.ts.map +1 -1
  41. package/dist/internal/machine/process.js +11 -8
  42. package/dist/internal/machine/process.js.map +1 -1
  43. package/dist/internal/machine/protocol.d.ts +7 -13
  44. package/dist/internal/machine/protocol.d.ts.map +1 -1
  45. package/dist/internal/machine/protocol.js +128 -50
  46. package/dist/internal/machine/protocol.js.map +1 -1
  47. package/dist/internal/machine/runtime.d.ts +22 -2
  48. package/dist/internal/machine/runtime.d.ts.map +1 -1
  49. package/dist/internal/machine/runtime.js +138 -10
  50. package/dist/internal/machine/runtime.js.map +1 -1
  51. package/dist/internal/machine/topology.d.ts +7 -0
  52. package/dist/internal/machine/topology.d.ts.map +1 -1
  53. package/dist/internal/machine/topology.js +6 -0
  54. package/dist/internal/machine/topology.js.map +1 -1
  55. package/dist/internal/testing/machine/finiteModel.js +1 -1
  56. package/dist/internal/testing/machine/finiteModel.js.map +1 -1
  57. package/dist/internal/testing/machine/runtime.d.ts.map +1 -1
  58. package/dist/internal/testing/machine/runtime.js +2 -1
  59. package/dist/internal/testing/machine/runtime.js.map +1 -1
  60. package/dist/internal/testing/machine/verification.d.ts.map +1 -1
  61. package/dist/internal/testing/machine/verification.js +5 -3
  62. package/dist/internal/testing/machine/verification.js.map +1 -1
  63. package/dist/testing/MachineTest.d.ts +7 -7
  64. package/dist/testing/MachineTest.js +7 -7
  65. package/dist/unstable/cluster/ClusterMachine.d.ts +1 -1
  66. package/dist/unstable/cluster/ClusterMachine.js +1 -1
  67. package/dist/unstable/reactivity/AtomMachine.d.ts +27 -8
  68. package/dist/unstable/reactivity/AtomMachine.d.ts.map +1 -1
  69. package/dist/unstable/reactivity/AtomMachine.js +20 -3
  70. package/dist/unstable/reactivity/AtomMachine.js.map +1 -1
  71. package/docs/agent-guide.md +191 -54
  72. package/package.json +1 -1
  73. package/src/Machine.ts +1220 -360
  74. package/src/internal/machine/atom.ts +76 -53
  75. package/src/internal/machine/cluster.ts +2 -1
  76. package/src/internal/machine/command.ts +2 -2
  77. package/src/internal/machine/commandRuntime.ts +9 -4
  78. package/src/internal/machine/configuration.ts +23 -5
  79. package/src/internal/machine/errors.ts +1 -1
  80. package/src/internal/machine/executionPlan.ts +74 -29
  81. package/src/internal/machine/invocation.ts +3 -2
  82. package/src/internal/machine/machine.ts +74 -49
  83. package/src/internal/machine/planner.ts +68 -24
  84. package/src/internal/machine/process.ts +75 -8
  85. package/src/internal/machine/protocol.ts +207 -68
  86. package/src/internal/machine/runtime.ts +266 -11
  87. package/src/internal/machine/topology.ts +15 -0
  88. package/src/internal/testing/machine/finiteModel.ts +1 -1
  89. package/src/internal/testing/machine/runtime.ts +2 -1
  90. package/src/internal/testing/machine/verification.ts +5 -3
  91. package/src/testing/MachineTest.ts +7 -7
  92. package/src/unstable/cluster/ClusterMachine.ts +1 -1
  93. package/src/unstable/reactivity/AtomMachine.ts +44 -10
@@ -7,6 +7,7 @@
7
7
  import type * as Option from "effect/Option"
8
8
  import type * as Schema from "effect/Schema"
9
9
  import type * as Scope from "effect/Scope"
10
+ import type * as Stream from "effect/Stream"
10
11
  import type { AsyncResult, Atom, AtomRegistry } from "effect/unstable/reactivity"
11
12
  import * as internal from "../../internal/machine/atom.js"
12
13
  import type { ChildNotActiveError, NotReadyError } from "../../internal/machine/atom.js"
@@ -89,14 +90,14 @@ type MachineStartError<InitialE, E, InitialR, R, RuntimeError = never> =
89
90
  * @category models
90
91
  * @since 0.4.0
91
92
  */
92
- export interface MachineAtom<State, Event, Error = never, Output = never, StartError = never> {
93
+ export interface MachineAtom<State, Event, Error = never, Output = never, StartError = never, Emitted = never> {
93
94
  /**
94
95
  * Atom containing the running machine handle once startup succeeds.
95
96
  *
96
97
  * @since 0.4.0
97
98
  */
98
99
  readonly ref: Atom.Atom<
99
- AsyncResult.AsyncResult<Machine.MachineRef<State, Event, Error, Output>, StartError>
100
+ AsyncResult.AsyncResult<Machine.MachineRef<State, Event, Error, Output, Emitted>, StartError>
100
101
  >
101
102
 
102
103
  /**
@@ -163,6 +164,34 @@ type RefState<Ref> = Ref extends Machine.MachineRef<infer State, any, any, any>
163
164
  type RefError<Ref> = Ref extends Machine.MachineRef<any, any, infer Error, any> ? Error : never
164
165
 
165
166
  type RefOutput<Ref> = Ref extends Machine.MachineRef<any, any, any, infer Output> ? Output : never
167
+ type RefEmitted<Ref> = Ref extends Machine.MachineRef<any, any, any, any, infer Emitted> ? Emitted : never
168
+
169
+ /**
170
+ * Observes ephemeral notifications from the running machine owned by a machine
171
+ * atom. When this stream activates a fresh bridge, it subscribes before machine
172
+ * initialization and observes initial-entry emissions. It never replays
173
+ * emissions from a machine that was already running.
174
+ *
175
+ * @category getters
176
+ * @since 0.10.0
177
+ */
178
+ export const emissions: <State, Event, Error, Output, StartError, Emitted>(
179
+ self: MachineAtom<State, Event, Error, Output, StartError, Emitted>
180
+ ) => Stream.Stream<Emitted, StartError, AtomRegistry.AtomRegistry> = internal.emissions
181
+
182
+ /**
183
+ * Observes emissions from each active instance selected by a child bridge.
184
+ *
185
+ * @category getters
186
+ * @since 0.10.0
187
+ */
188
+ export const childEmissions: <Child extends Machine.ChildMachine.Any, StartError>(
189
+ self: ChildMachineAtom<Child, StartError>
190
+ ) => Stream.Stream<
191
+ RefEmitted<Machine.ChildMachine.Ref<Child>>,
192
+ StartError,
193
+ AtomRegistry.AtomRegistry
194
+ > = internal.childEmissions
166
195
 
167
196
  /**
168
197
  * Reactive access to one invoked child machine selected by its descriptor.
@@ -328,7 +357,7 @@ type ChildState<Child extends Machine.ChildMachine.Any> = RefState<Machine.Child
328
357
  * const States = Machine.defineStates({ Count })
329
358
  * const machine = Machine.make({
330
359
  * states: States.states,
331
- * events: [],
360
+ * events: Machine.events(),
332
361
  * initial: () => States.initial.Count(new Count({ value: 0 }))
333
362
  * }).handle({ Count: {} })
334
363
  * const machineAtom = AtomMachine.make(machine)
@@ -439,7 +468,7 @@ export const selectSnapshotChild: <
439
468
  * const States = Machine.defineStates({ Idle })
440
469
  * const machine = Machine.make({
441
470
  * states: States.states,
442
- * events: [],
471
+ * events: Machine.events(),
443
472
  * initial: () => States.initial.Idle.from()
444
473
  * }).handle({ Idle: {} })
445
474
  * const machineAtom = AtomMachine.make(machine)
@@ -546,7 +575,8 @@ type MachineAtomOf<M extends Machine.Machine.Any, RuntimeError> = MachineAtom<
546
575
  Machine.Machine.InitialServices<M>,
547
576
  Machine.Machine.Services<M>,
548
577
  RuntimeError
549
- >
578
+ >,
579
+ Machine.Machine.EmittedEvent<M>
550
580
  >
551
581
 
552
582
  type ResumedMachineAtomOf<M extends Machine.Machine.Any, RuntimeError> = MachineAtom<
@@ -554,7 +584,8 @@ type ResumedMachineAtomOf<M extends Machine.Machine.Any, RuntimeError> = Machine
554
584
  Machine.Machine.EventInput<Machine.Machine.InputEvent<M>>,
555
585
  MachineRuntimeError<Machine.Machine.Error<M>, Machine.Machine.Services<M>>,
556
586
  Machine.Machine.Output<M>,
557
- Machine.MachineSchemaDecodeError | RuntimeError
587
+ Machine.MachineSchemaDecodeError | RuntimeError,
588
+ Machine.Machine.EmittedEvent<M>
558
589
  >
559
590
 
560
591
  /**
@@ -607,7 +638,7 @@ export interface Bound<Services, RuntimeError = never> {
607
638
  * const States = Machine.defineStates({ Idle })
608
639
  * const machine = Machine.make({
609
640
  * states: States.states,
610
- * events: [],
641
+ * events: Machine.events(),
611
642
  * initial: () => States.initial.Idle.from()
612
643
  * }).handle({ Idle: {} })
613
644
  *
@@ -631,7 +662,8 @@ export const make: {
631
662
  FinalStates extends Machine.Machine.StateIdentifier<States> = never,
632
663
  Output = never,
633
664
  OutputStates extends Machine.Machine.StateIdentifier<States> = never,
634
- InputEvents extends ReadonlyArray<Machine.Machine.TaggedSchema> = Events
665
+ InputEvents extends ReadonlyArray<Machine.Machine.TaggedSchema> = Events,
666
+ ParentEvents extends ReadonlyArray<Machine.Machine.TaggedSchema> = readonly []
635
667
  >(
636
668
  machine:
637
669
  & Machine.Machine<
@@ -647,7 +679,8 @@ export const make: {
647
679
  Output,
648
680
  Emits,
649
681
  OutputStates,
650
- InputEvents
682
+ InputEvents,
683
+ ParentEvents
651
684
  >
652
685
  & EnsureNoExternalRequirements<
653
686
  MachineRequirements<
@@ -664,7 +697,8 @@ export const make: {
664
697
  Machine.Machine.EventInputOf<InputEvents>,
665
698
  MachineRuntimeError<E, R>,
666
699
  Output,
667
- MachineStartError<InitialE, E, InitialR, R>
700
+ MachineStartError<InitialE, E, InitialR, R>,
701
+ Machine.Machine.EmittedEventOf<Emits>
668
702
  >
669
703
  } = internal.make
670
704