@typeonce/effect-machine 0.12.0 → 0.13.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 (80) hide show
  1. package/README.md +56 -4
  2. package/dist/Machine.d.ts +353 -84
  3. package/dist/Machine.d.ts.map +1 -1
  4. package/dist/Machine.js +12 -10
  5. package/dist/Machine.js.map +1 -1
  6. package/dist/internal/machine/atom.d.ts +1 -0
  7. package/dist/internal/machine/atom.d.ts.map +1 -1
  8. package/dist/internal/machine/atom.js +23 -0
  9. package/dist/internal/machine/atom.js.map +1 -1
  10. package/dist/internal/machine/commandRuntime.d.ts.map +1 -1
  11. package/dist/internal/machine/commandRuntime.js +2 -5
  12. package/dist/internal/machine/commandRuntime.js.map +1 -1
  13. package/dist/internal/machine/configuration.d.ts +5 -0
  14. package/dist/internal/machine/configuration.d.ts.map +1 -1
  15. package/dist/internal/machine/configuration.js +6 -2
  16. package/dist/internal/machine/configuration.js.map +1 -1
  17. package/dist/internal/machine/executionPlan.d.ts +1 -0
  18. package/dist/internal/machine/executionPlan.d.ts.map +1 -1
  19. package/dist/internal/machine/executionPlan.js +43 -18
  20. package/dist/internal/machine/executionPlan.js.map +1 -1
  21. package/dist/internal/machine/initialization.d.ts +5 -0
  22. package/dist/internal/machine/initialization.d.ts.map +1 -0
  23. package/dist/internal/machine/initialization.js +61 -0
  24. package/dist/internal/machine/initialization.js.map +1 -0
  25. package/dist/internal/machine/inspectionRuntime.d.ts +25 -0
  26. package/dist/internal/machine/inspectionRuntime.d.ts.map +1 -0
  27. package/dist/internal/machine/inspectionRuntime.js +79 -0
  28. package/dist/internal/machine/inspectionRuntime.js.map +1 -0
  29. package/dist/internal/machine/invocation.d.ts +2 -1
  30. package/dist/internal/machine/invocation.d.ts.map +1 -1
  31. package/dist/internal/machine/invocation.js +17 -10
  32. package/dist/internal/machine/invocation.js.map +1 -1
  33. package/dist/internal/machine/machine.d.ts +1 -2
  34. package/dist/internal/machine/machine.d.ts.map +1 -1
  35. package/dist/internal/machine/machine.js +21 -6
  36. package/dist/internal/machine/machine.js.map +1 -1
  37. package/dist/internal/machine/planner.d.ts +15 -0
  38. package/dist/internal/machine/planner.d.ts.map +1 -1
  39. package/dist/internal/machine/planner.js +117 -44
  40. package/dist/internal/machine/planner.js.map +1 -1
  41. package/dist/internal/machine/process.d.ts.map +1 -1
  42. package/dist/internal/machine/process.js +4 -2
  43. package/dist/internal/machine/process.js.map +1 -1
  44. package/dist/internal/machine/runtime.d.ts +27 -3
  45. package/dist/internal/machine/runtime.d.ts.map +1 -1
  46. package/dist/internal/machine/runtime.js +440 -64
  47. package/dist/internal/machine/runtime.js.map +1 -1
  48. package/dist/internal/machine/symbols.d.ts +2 -0
  49. package/dist/internal/machine/symbols.d.ts.map +1 -1
  50. package/dist/internal/machine/symbols.js +2 -0
  51. package/dist/internal/machine/symbols.js.map +1 -1
  52. package/dist/internal/machine/topology.d.ts +13 -0
  53. package/dist/internal/machine/topology.d.ts.map +1 -1
  54. package/dist/internal/machine/topology.js +9 -0
  55. package/dist/internal/machine/topology.js.map +1 -1
  56. package/dist/internal/testing/machine/finiteModel.d.ts.map +1 -1
  57. package/dist/internal/testing/machine/finiteModel.js +3 -3
  58. package/dist/internal/testing/machine/finiteModel.js.map +1 -1
  59. package/dist/unstable/reactivity/AtomMachine.d.ts +9 -0
  60. package/dist/unstable/reactivity/AtomMachine.d.ts.map +1 -1
  61. package/dist/unstable/reactivity/AtomMachine.js +9 -0
  62. package/dist/unstable/reactivity/AtomMachine.js.map +1 -1
  63. package/docs/agent-guide.md +102 -9
  64. package/package.json +5 -5
  65. package/src/Machine.ts +505 -174
  66. package/src/internal/machine/atom.ts +26 -0
  67. package/src/internal/machine/commandRuntime.ts +2 -9
  68. package/src/internal/machine/configuration.ts +28 -3
  69. package/src/internal/machine/executionPlan.ts +50 -17
  70. package/src/internal/machine/initialization.ts +73 -0
  71. package/src/internal/machine/inspectionRuntime.ts +102 -0
  72. package/src/internal/machine/invocation.ts +37 -12
  73. package/src/internal/machine/machine.ts +31 -6
  74. package/src/internal/machine/planner.ts +136 -42
  75. package/src/internal/machine/process.ts +4 -2
  76. package/src/internal/machine/runtime.ts +661 -89
  77. package/src/internal/machine/symbols.ts +3 -0
  78. package/src/internal/machine/topology.ts +27 -0
  79. package/src/internal/testing/machine/finiteModel.ts +8 -7
  80. package/src/unstable/reactivity/AtomMachine.ts +12 -0
@@ -1,5 +1,8 @@
1
1
  /** @internal */
2
2
  export const InitialEventTypeId: unique symbol = Symbol("effect/Machine/InitialEvent")
3
3
 
4
+ /** @internal */
5
+ export const SnapshotBuilderStateTypeId: unique symbol = Symbol("effect/Machine/SnapshotBuilderState")
6
+
4
7
  /** @internal Returns process logic for a child descriptor and optional input. */
5
8
  export const ChildMachineLogicTypeId: unique symbol = Symbol("effect/Machine/ChildMachineLogic")
@@ -19,6 +19,8 @@ export const StateConstructionTypeId: unique symbol = Symbol("effect/Machine/Sta
19
19
 
20
20
  export const HistoryTargetTypeId: unique symbol = Symbol("effect/Machine/HistoryTarget")
21
21
 
22
+ export const InitialTargetTypeId: unique symbol = Symbol("effect/Machine/InitialTarget")
23
+
22
24
  export const ChoiceTargetTypeId: unique symbol = Symbol("effect/Machine/ChoiceTarget")
23
25
 
24
26
  export const NoTargetTypeId: unique symbol = Symbol("effect/Machine/NoTarget")
@@ -36,6 +38,17 @@ export interface HistoryTarget {
36
38
  readonly parent: string
37
39
  }
38
40
 
41
+ /** Internal instruction that enters the selected state's declared initial
42
+ * configuration. The planner supplies implicit child values through the
43
+ * owning states' `initialize` handlers. */
44
+ export interface InitialTarget {
45
+ readonly [InitialTargetTypeId]: typeof InitialTargetTypeId
46
+ readonly _tag: "InitialTarget"
47
+ readonly path: string
48
+ readonly value: unknown
49
+ readonly values?: Readonly<Record<string, unknown>>
50
+ }
51
+
39
52
  /** Internal target produced by a choice target builder. */
40
53
  export interface ChoiceTarget {
41
54
  readonly [ChoiceTargetTypeId]: typeof ChoiceTargetTypeId
@@ -65,6 +78,20 @@ export const makeHistoryTarget = (path: string, parent: string): HistoryTarget =
65
78
 
66
79
  export const isHistoryTarget = (u: unknown): u is HistoryTarget => hasProperty(u, HistoryTargetTypeId)
67
80
 
81
+ export const makeInitialTarget = (
82
+ path: string,
83
+ value: unknown,
84
+ values?: Readonly<Record<string, unknown>>
85
+ ): InitialTarget => ({
86
+ [InitialTargetTypeId]: InitialTargetTypeId,
87
+ _tag: "InitialTarget",
88
+ path,
89
+ value,
90
+ ...(values === undefined ? {} : { values })
91
+ })
92
+
93
+ export const isInitialTarget = (u: unknown): u is InitialTarget => hasProperty(u, InitialTargetTypeId)
94
+
68
95
  export const makeChoiceTarget = (
69
96
  path: string,
70
97
  parent: string,
@@ -1449,15 +1449,16 @@ const makeHandlers = (
1449
1449
  ...(Object.keys(history).length === 0 ? {} : { history }),
1450
1450
  ...(node._tag === "Compound"
1451
1451
  ? {
1452
- initial: () => stateValue(byPath.get(`${path}.${node.initial}`)!)
1452
+ initialize: ({ builder }: any) => builder(stateValue(byPath.get(`${path}.${node.initial}`)!))
1453
1453
  }
1454
1454
  : {
1455
- initial: () =>
1456
- Object.fromEntries(
1457
- node.states
1458
- .filter((child) => child._tag !== "History" && child._tag !== "Choice")
1459
- .map((child) => [child.key, stateValue(byPath.get(`${path}.${child.key}`)!)])
1460
- )
1455
+ initialize: ({ builder }: any) =>
1456
+ node.states
1457
+ .filter((child) => child._tag !== "History" && child._tag !== "Choice")
1458
+ .reduce(
1459
+ (current: any, child) => current[child.key](stateValue(byPath.get(`${path}.${child.key}`)!)),
1460
+ builder
1461
+ )
1461
1462
  }),
1462
1463
  states: makeHandlers(node.states, path, byPath, transitions)
1463
1464
  }
@@ -179,6 +179,18 @@ export const emissions: <State, Event, Error, Output, StartError, Emitted>(
179
179
  self: MachineAtom<State, Event, Error, Output, StartError, Emitted>
180
180
  ) => Stream.Stream<Emitted, StartError, AtomRegistry.AtomRegistry> = internal.emissions
181
181
 
182
+ /**
183
+ * Observes the ordered local inspection records for the machine atom's root
184
+ * ownership tree. The stream starts before machine initialization, is hot and
185
+ * non-replayed, and completes with the root machine.
186
+ *
187
+ * @category getters
188
+ * @since 0.13.0
189
+ */
190
+ export const inspection: <State, Event, Error, Output, StartError, Emitted>(
191
+ self: MachineAtom<State, Event, Error, Output, StartError, Emitted>
192
+ ) => Stream.Stream<Machine.Inspection.Event, StartError, AtomRegistry.AtomRegistry> = internal.inspection
193
+
182
194
  /**
183
195
  * Observes emissions from each active instance selected by a child bridge.
184
196
  *