effect-machine 0.17.0 → 0.18.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 (84) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +50 -54
  3. package/dist/actor.d.ts +8 -45
  4. package/dist/actor.js +157 -231
  5. package/dist/cluster/adapters/in-memory.d.ts +0 -1
  6. package/dist/cluster/adapters/in-memory.js +10 -5
  7. package/dist/cluster/entity-actor-ref.d.ts +2 -3
  8. package/dist/cluster/entity-actor-ref.js +14 -17
  9. package/dist/cluster/entity-machine.d.ts +2 -8
  10. package/dist/cluster/entity-machine.js +57 -34
  11. package/dist/cluster/index.js +2 -2
  12. package/dist/cluster/persistence.d.ts +0 -1
  13. package/dist/cluster/to-entity.d.ts +19 -21
  14. package/dist/cluster/to-entity.js +18 -19
  15. package/dist/errors.d.ts +11 -37
  16. package/dist/errors.js +12 -30
  17. package/dist/index.d.ts +4 -5
  18. package/dist/index.js +4 -5
  19. package/dist/inspection.d.ts +0 -1
  20. package/dist/inspection.js +24 -13
  21. package/dist/internal/brands.d.ts +0 -1
  22. package/dist/internal/event-advancement.d.ts +50 -0
  23. package/dist/internal/event-advancement.js +79 -0
  24. package/dist/internal/inspection.d.ts +5 -9
  25. package/dist/internal/inspection.js +31 -10
  26. package/dist/internal/machine-definition.d.ts +16 -0
  27. package/dist/internal/runtime.d.ts +1 -161
  28. package/dist/internal/runtime.js +191 -150
  29. package/dist/internal/transition.d.ts +4 -135
  30. package/dist/internal/transition.js +82 -157
  31. package/dist/internal/utils.d.ts +3 -40
  32. package/dist/internal/utils.js +2 -2
  33. package/dist/machine.d.ts +47 -137
  34. package/dist/machine.js +147 -215
  35. package/dist/schema.d.ts +42 -21
  36. package/dist/schema.js +28 -18
  37. package/dist/supervision.d.ts +1 -24
  38. package/dist/supervision.js +2 -3
  39. package/dist/testing.d.ts +15 -29
  40. package/dist/testing.js +76 -95
  41. package/package.json +19 -38
  42. package/dist/slot.d.ts +0 -159
  43. package/dist/slot.js +0 -165
  44. package/v3/dist/_virtual/_rolldown/runtime.js +0 -13
  45. package/v3/dist/actor.d.ts +0 -250
  46. package/v3/dist/actor.js +0 -577
  47. package/v3/dist/cluster/adapters/in-memory.d.ts +0 -15
  48. package/v3/dist/cluster/adapters/in-memory.js +0 -62
  49. package/v3/dist/cluster/entity-actor-ref.d.ts +0 -49
  50. package/v3/dist/cluster/entity-actor-ref.js +0 -19
  51. package/v3/dist/cluster/entity-machine.d.ts +0 -74
  52. package/v3/dist/cluster/entity-machine.js +0 -166
  53. package/v3/dist/cluster/index.d.ts +0 -6
  54. package/v3/dist/cluster/index.js +0 -6
  55. package/v3/dist/cluster/persistence.d.ts +0 -48
  56. package/v3/dist/cluster/persistence.js +0 -14
  57. package/v3/dist/cluster/to-entity.d.ts +0 -69
  58. package/v3/dist/cluster/to-entity.js +0 -59
  59. package/v3/dist/errors.d.ts +0 -95
  60. package/v3/dist/errors.js +0 -54
  61. package/v3/dist/index.d.ts +0 -11
  62. package/v3/dist/index.js +0 -9
  63. package/v3/dist/inspection.d.ts +0 -151
  64. package/v3/dist/inspection.js +0 -128
  65. package/v3/dist/internal/brands.d.ts +0 -50
  66. package/v3/dist/internal/inspection.d.ts +0 -11
  67. package/v3/dist/internal/inspection.js +0 -20
  68. package/v3/dist/internal/runtime.d.ts +0 -161
  69. package/v3/dist/internal/runtime.js +0 -360
  70. package/v3/dist/internal/transition.d.ts +0 -190
  71. package/v3/dist/internal/transition.js +0 -278
  72. package/v3/dist/internal/utils.d.ts +0 -101
  73. package/v3/dist/internal/utils.js +0 -75
  74. package/v3/dist/machine.d.ts +0 -398
  75. package/v3/dist/machine.js +0 -487
  76. package/v3/dist/schema.d.ts +0 -174
  77. package/v3/dist/schema.js +0 -206
  78. package/v3/dist/slot.d.ts +0 -158
  79. package/v3/dist/slot.js +0 -165
  80. package/v3/dist/supervision.d.ts +0 -97
  81. package/v3/dist/supervision.js +0 -42
  82. package/v3/dist/testing.d.ts +0 -151
  83. package/v3/dist/testing.js +0 -189
  84. /package/{v3/dist/internal/brands.js → dist/internal/machine-definition.js} +0 -0
package/dist/machine.d.ts CHANGED
@@ -1,53 +1,45 @@
1
- import { DeferReplyResult, ReplyResult, TransitionResult } from "./internal/utils.js";
1
+ import { DeferReplyResult, ReplyResult, TransitionResult, makeDeferReply, makeReply } from "./internal/utils.js";
2
2
  import { BrandedEvent, BrandedState, ExtractReply, TaggedOrConstructor } from "./internal/brands.js";
3
3
  import { MachineEventSchema, MachineStateSchema, VariantsUnion } from "./schema.js";
4
4
  import { DuplicateActorError } from "./errors.js";
5
- import { MachineContext, MachineContextTag, ProvideSlots, SlotCalls, SlotsDef, SlotsSchema } from "./slot.js";
6
5
  import { Supervision } from "./supervision.js";
7
- import { findTransitions } from "./internal/transition.js";
8
6
  import { ActorRef, ActorSystemService } from "./actor.js";
9
- import { Cause, Context, Duration, Effect, Option, Schema, Scope } from "effect";
10
-
11
- //#region src/machine.d.ts
7
+ import { Cause, Duration, Effect, Option, Schema, Scope } from "effect";
12
8
  declare namespace machine_d_exports {
13
- export { BackgroundEffect, DeferReplyResult, Durability, DurabilityCommit, HandlerContext, Lifecycle, Machine, MachineRef, MakeConfig, Recovery, RecoveryContext, ReplyResult, SpawnEffect, StateEffectHandler, StateHandlerContext, TaskOptions, TimeoutConfig, Transition, TransitionHandler, deferReply, findTransitions, make, materializeMachine, replay, reply, scoped, spawn };
9
+ export { DeferReplyResult, Durability, DurabilityCommit, HandlerContext, Lifecycle, Machine, MachineRef, MakeConfig, Recovery, RecoveryContext, ReplyResult, StateEffectHandler, StateHandlerContext, TaskOptions, TimeoutConfig, TransitionHandler, deferReply, make, replay, reply, scoped, spawn };
14
10
  }
15
11
  /**
16
12
  * Self reference for sending events back to the machine
17
13
  */
18
14
  interface MachineRef<Event> {
19
15
  readonly send: (event: Event) => Effect.Effect<void>;
20
- /** Fire-and-forget alias for send (OTP gen_server:cast). */
21
- readonly cast: (event: Event) => Effect.Effect<void>;
22
16
  readonly spawn: <S2 extends {
23
17
  readonly _tag: string;
24
18
  }, E2 extends {
25
19
  readonly _tag: string;
26
- }, R2>(id: string, machine: Machine<S2, E2, R2, any, any, any>) => Effect.Effect<ActorRef<S2, E2>, DuplicateActorError, R2>;
20
+ }, R2>(id: string, machine: Machine<S2, E2, R2, any, any>) => Effect.Effect<ActorRef<S2, E2>, DuplicateActorError, R2>;
27
21
  /**
28
22
  * Settle a deferred reply from a spawn handler.
29
23
  * Only usable when the transition handler returned `Machine.deferReply(state)`.
30
24
  * Returns true if a pending reply was settled, false if none was pending.
31
25
  */
32
- readonly reply: (value: unknown) => Effect.Effect<boolean>;
26
+ readonly reply: <Reply>(value: Reply) => Effect.Effect<boolean>;
33
27
  }
34
28
  /**
35
29
  * Handler context passed to transition handlers
36
30
  */
37
- interface HandlerContext<State, Event, SD extends SlotsDef = Record<string, never>> {
31
+ interface HandlerContext<State, Event> {
38
32
  readonly state: State;
39
33
  readonly event: Event;
40
- readonly slots: SlotCalls<SD>;
41
34
  }
42
35
  /**
43
36
  * Handler context passed to state effect handlers (onEnter, spawn, background)
44
37
  */
45
- interface StateHandlerContext<State, Event, SD extends SlotsDef = Record<string, never>> {
38
+ interface StateHandlerContext<State, Event> {
46
39
  readonly actorId: string;
47
40
  readonly state: State;
48
41
  readonly event: Event;
49
42
  readonly self: MachineRef<Event>;
50
- readonly slots: SlotCalls<SD>;
51
43
  readonly system: ActorSystemService;
52
44
  }
53
45
  /**
@@ -55,36 +47,14 @@ interface StateHandlerContext<State, Event, SD extends SlotsDef = Record<string,
55
47
  * When Reply is concrete (event has a reply schema), handler must return Machine.reply().
56
48
  * When Reply is never, handler returns plain state.
57
49
  */
58
- type TransitionHandler<S, E, NewState, SD extends SlotsDef, R, Reply = never> = (ctx: HandlerContext<S, E, SD>) => TransitionResult<NewState, R, Reply>;
50
+ type TransitionHandler<S, E, NewState, R, Reply = never> = (ctx: HandlerContext<S, E>) => TransitionResult<NewState, R, Reply>;
59
51
  /**
60
52
  * State effect handler function
61
53
  */
62
- type StateEffectHandler<S, E, SD extends SlotsDef, R> = (ctx: StateHandlerContext<S, E, SD>) => Effect.Effect<void, never, R>;
63
- /**
64
- * Transition definition
65
- */
66
- interface Transition<State, Event, SD extends SlotsDef, R> {
67
- readonly stateTag: string;
68
- readonly eventTag: string;
69
- readonly handler: TransitionHandler<State, Event, State, SD, R>;
70
- readonly reenter?: boolean;
71
- }
72
- /**
73
- * Spawn effect - state-scoped forked effect
74
- */
75
- interface SpawnEffect<State, Event, SD extends SlotsDef, R> {
76
- readonly stateTag: string;
77
- readonly handler: StateEffectHandler<State, Event, SD, R>;
78
- }
79
- /**
80
- * Background effect - runs for entire machine lifetime
81
- */
82
- interface BackgroundEffect<State, Event, SD extends SlotsDef, R> {
83
- readonly handler: StateEffectHandler<State, Event, SD, R>;
84
- }
85
- interface TaskOptions<State, Event, SD extends SlotsDef, A, E1, ES, EF> {
86
- readonly onSuccess?: (value: A, ctx: StateHandlerContext<State, Event, SD>) => ES;
87
- readonly onFailure?: (cause: Cause.Cause<E1>, ctx: StateHandlerContext<State, Event, SD>) => EF;
54
+ type StateEffectHandler<S, E, R> = (ctx: StateHandlerContext<S, E>) => Effect.Effect<void, never, R>;
55
+ interface TaskOptions<State, Event, A, E1, ES, EF> {
56
+ readonly onSuccess?: (value: A, ctx: StateHandlerContext<State, Event>) => ES;
57
+ readonly onFailure?: (cause: Cause.Cause<E1>, ctx: StateHandlerContext<State, Event>) => EF;
88
58
  readonly name?: string;
89
59
  }
90
60
  /**
@@ -134,26 +104,15 @@ interface TimeoutConfig<State, Event> {
134
104
  /** Event to send when the timer fires. Static or derived from current state. */
135
105
  readonly event: Event | ((state: State) => Event);
136
106
  }
137
- interface MakeConfig<SD extends Record<string, Schema.Struct.Fields>, ED extends Record<string, Schema.Struct.Fields>, S extends BrandedState, E extends BrandedEvent, SLD extends SlotsDef = Record<string, never>> {
107
+ interface MakeConfig<SD extends Record<string, Schema.Struct.Fields>, ED extends Record<string, Schema.Struct.Fields>, S extends BrandedState, E extends BrandedEvent> {
138
108
  readonly state: MachineStateSchema<SD> & {
139
109
  Type: S;
140
110
  };
141
111
  readonly event: MachineEventSchema<ED> & {
142
112
  Type: E;
143
113
  };
144
- readonly slots?: SlotsSchema<SLD>;
145
114
  readonly initial: S;
146
- /** Validate slot inputs/outputs at runtime. Default: true. Set to false for hot paths. */
147
- readonly slotValidation?: boolean;
148
115
  }
149
- /**
150
- * Bind slot handlers to a machine, returning a fresh copy with handlers installed.
151
- * If no handlers provided and machine has no slots, returns the machine as-is.
152
- * Validates that all required slots are provided and no extra slots are given.
153
- *
154
- * @internal — used by spawn, replay, simulate, test harness, entity-machine
155
- */
156
- declare const materializeMachine: <S, E, R, SD extends SlotsDef>(machine: Machine<S, E, R, any, any, SD>, handlers?: Record<string, any>) => Machine<S, E, never, any, any, SD>;
157
116
  /**
158
117
  * Machine definition with fluent builder API.
159
118
  *
@@ -163,75 +122,35 @@ declare const materializeMachine: <S, E, R, SD extends SlotsDef>(machine: Machin
163
122
  * - `R`: Effect requirements
164
123
  * - `_SD`: State schema definition (for compile-time validation)
165
124
  * - `_ED`: Event schema definition (for compile-time validation)
166
- * - `SD`: Slot definitions
167
125
  */
168
- declare class Machine<State, Event, R = never, _SD extends Record<string, Schema.Struct.Fields> = Record<string, Schema.Struct.Fields>, _ED extends Record<string, Schema.Struct.Fields> = Record<string, Schema.Struct.Fields>, SD extends SlotsDef = Record<string, never>> {
126
+ declare class Machine<State, Event, R = never, _SD extends Record<string, Schema.Struct.Fields> = Record<string, Schema.Struct.Fields>, _ED extends Record<string, Schema.Struct.Fields> = Record<string, Schema.Struct.Fields>> {
127
+ #private;
169
128
  readonly initial: State;
170
- /** @internal */
171
- readonly _transitions: Array<Transition<State, Event, SD, R>>;
172
- /** @internal */
173
- readonly _spawnEffects: Array<SpawnEffect<State, Event, SD, R>>;
174
- /** @internal */
175
- readonly _backgroundEffects: Array<BackgroundEffect<State, Event, SD, R>>;
176
- /** @internal */
177
- readonly _finalStates: Set<string>;
178
- /** @internal */
179
- readonly _postponeRules: Array<{
180
- readonly stateTag: string;
181
- readonly eventTag: string;
182
- }>;
183
- /** @internal */
184
- readonly _slotsSchema?: SlotsSchema<SD>;
185
- /** @internal */
186
- readonly _slotHandlers: Map<string, (params: unknown) => unknown | Effect.Effect<unknown, never, R>>;
187
- /** @internal */
188
- readonly _slots: SlotCalls<SD>;
189
- /** @internal */
190
- readonly _slotValidation: boolean;
191
- readonly stateSchema?: Schema.Schema<State>;
192
- readonly eventSchema?: Schema.Schema<Event>;
193
- /** @internal */
194
- readonly _replySchemas: ReadonlyMap<string, Schema.Decoder<unknown>>;
195
- /**
196
- * Context tag for accessing machine state/event/self in slot handlers.
197
- * Uses shared module-level tag for all machines.
198
- */
199
- readonly Context: Context.Service<MachineContextTag, MachineContext<State, Event, MachineRef<Event>>>;
200
- get transitions(): ReadonlyArray<Transition<State, Event, SD, R>>;
201
- get spawnEffects(): ReadonlyArray<SpawnEffect<State, Event, SD, R>>;
202
- get backgroundEffects(): ReadonlyArray<BackgroundEffect<State, Event, SD, R>>;
203
- get finalStates(): ReadonlySet<string>;
204
- get postponeRules(): ReadonlyArray<{
205
- readonly stateTag: string;
206
- readonly eventTag: string;
207
- }>;
208
- get slotsSchema(): SlotsSchema<SD> | undefined;
209
- get replySchemas(): ReadonlyMap<string, Schema.Decoder<unknown>>;
210
- /** @internal */
211
- constructor(initial: State, stateSchema?: Schema.Schema<State>, eventSchema?: Schema.Schema<Event>, slotsSchema?: SlotsSchema<SD>, slotValidation?: boolean);
212
- from<NS extends VariantsUnion<_SD> & BrandedState, R1>(state: TaggedOrConstructor<NS>, build: (scope: TransitionScope<State, Event, R, _SD, _ED, SD, NS>) => R1): Machine<State, Event, R, _SD, _ED, SD>;
213
- from<NS extends ReadonlyArray<TaggedOrConstructor<VariantsUnion<_SD> & BrandedState>>, R1>(states: NS, build: (scope: TransitionScope<State, Event, R, _SD, _ED, SD, NS[number] extends TaggedOrConstructor<infer S extends VariantsUnion<_SD> & BrandedState> ? S : never>) => R1): Machine<State, Event, R, _SD, _ED, SD>;
214
- /** @internal */
215
- scopeTransition<NS extends VariantsUnion<_SD> & BrandedState, NE extends VariantsUnion<_ED> & BrandedEvent, RS extends VariantsUnion<_SD> & BrandedState>(states: ReadonlyArray<TaggedOrConstructor<NS>>, event: TaggedOrConstructor<NE>, handler: TransitionHandler<NS, NE, RS, SD, never, ExtractReply<NE>>, reenter: boolean): Machine<State, Event, R, _SD, _ED, SD>;
129
+ readonly stateSchema: MachineStateSchema<_SD> & {
130
+ readonly Type: State;
131
+ };
132
+ readonly eventSchema: MachineEventSchema<_ED> & {
133
+ readonly Type: Event;
134
+ };
135
+ from<NS extends VariantsUnion<_SD> & BrandedState, R1>(state: TaggedOrConstructor<NS>, build: (scope: TransitionScope<State, Event, R, _SD, _ED, NS>) => R1): Machine<State, Event, R, _SD, _ED>;
136
+ from<NS extends ReadonlyArray<TaggedOrConstructor<VariantsUnion<_SD> & BrandedState>>, R1>(states: NS, build: (scope: TransitionScope<State, Event, R, _SD, _ED, NS[number] extends TaggedOrConstructor<infer S extends VariantsUnion<_SD> & BrandedState> ? S : never>) => R1): Machine<State, Event, R, _SD, _ED>;
216
137
  /** Register transition for a single state */
217
- on<NS extends VariantsUnion<_SD> & BrandedState, NE extends VariantsUnion<_ED> & BrandedEvent, RS extends VariantsUnion<_SD> & BrandedState>(state: TaggedOrConstructor<NS>, event: TaggedOrConstructor<NE>, handler: TransitionHandler<NS, NE, RS, SD, never, ExtractReply<NE>>): Machine<State, Event, R, _SD, _ED, SD>;
138
+ on<NS extends VariantsUnion<_SD> & BrandedState, NE extends VariantsUnion<_ED> & BrandedEvent, RS extends VariantsUnion<_SD> & BrandedState>(state: TaggedOrConstructor<NS>, event: TaggedOrConstructor<NE>, handler: TransitionHandler<NS, NE, RS, never, ExtractReply<NE>>): Machine<State, Event, R, _SD, _ED>;
218
139
  /** Register transition for multiple states (handler receives union of state types) */
219
- on<NS extends ReadonlyArray<TaggedOrConstructor<VariantsUnion<_SD> & BrandedState>>, NE extends VariantsUnion<_ED> & BrandedEvent, RS extends VariantsUnion<_SD> & BrandedState>(states: NS, event: TaggedOrConstructor<NE>, handler: TransitionHandler<NS[number] extends TaggedOrConstructor<infer S> ? S : never, NE, RS, SD, never, ExtractReply<NE>>): Machine<State, Event, R, _SD, _ED, SD>;
140
+ on<NS extends ReadonlyArray<TaggedOrConstructor<VariantsUnion<_SD> & BrandedState>>, NE extends VariantsUnion<_ED> & BrandedEvent, RS extends VariantsUnion<_SD> & BrandedState>(states: NS, event: TaggedOrConstructor<NE>, handler: TransitionHandler<NS[number] extends TaggedOrConstructor<infer S> ? S : never, NE, RS, never, ExtractReply<NE>>): Machine<State, Event, R, _SD, _ED>;
220
141
  /**
221
142
  * Like `on()`, but forces onEnter/spawn to run even when transitioning to the same state tag.
222
143
  * Use this to restart timers, re-run spawned effects, or reset state-scoped effects.
223
144
  */
224
145
  /** Single state */
225
- reenter<NS extends VariantsUnion<_SD> & BrandedState, NE extends VariantsUnion<_ED> & BrandedEvent, RS extends VariantsUnion<_SD> & BrandedState>(state: TaggedOrConstructor<NS>, event: TaggedOrConstructor<NE>, handler: TransitionHandler<NS, NE, RS, SD, never, ExtractReply<NE>>): Machine<State, Event, R, _SD, _ED, SD>;
146
+ reenter<NS extends VariantsUnion<_SD> & BrandedState, NE extends VariantsUnion<_ED> & BrandedEvent, RS extends VariantsUnion<_SD> & BrandedState>(state: TaggedOrConstructor<NS>, event: TaggedOrConstructor<NE>, handler: TransitionHandler<NS, NE, RS, never, ExtractReply<NE>>): Machine<State, Event, R, _SD, _ED>;
226
147
  /** Multiple states */
227
- reenter<NS extends ReadonlyArray<TaggedOrConstructor<VariantsUnion<_SD> & BrandedState>>, NE extends VariantsUnion<_ED> & BrandedEvent, RS extends VariantsUnion<_SD> & BrandedState>(states: NS, event: TaggedOrConstructor<NE>, handler: TransitionHandler<NS[number] extends TaggedOrConstructor<infer S> ? S : never, NE, RS, SD, never, ExtractReply<NE>>): Machine<State, Event, R, _SD, _ED, SD>;
148
+ reenter<NS extends ReadonlyArray<TaggedOrConstructor<VariantsUnion<_SD> & BrandedState>>, NE extends VariantsUnion<_ED> & BrandedEvent, RS extends VariantsUnion<_SD> & BrandedState>(states: NS, event: TaggedOrConstructor<NE>, handler: TransitionHandler<NS[number] extends TaggedOrConstructor<infer S> ? S : never, NE, RS, never, ExtractReply<NE>>): Machine<State, Event, R, _SD, _ED>;
228
149
  /**
229
150
  * Register a wildcard transition that fires from any state when no specific transition matches.
230
151
  * Specific `.on()` transitions always take priority over `.onAny()`.
231
152
  */
232
- onAny<NE extends VariantsUnion<_ED> & BrandedEvent, RS extends VariantsUnion<_SD> & BrandedState>(event: TaggedOrConstructor<NE>, handler: TransitionHandler<VariantsUnion<_SD> & BrandedState, NE, RS, SD, never>): Machine<State, Event, R, _SD, _ED, SD>;
233
- /** @internal */
234
- private addTransition;
153
+ onAny<NE extends VariantsUnion<_ED> & BrandedEvent, RS extends VariantsUnion<_SD> & BrandedState>(event: TaggedOrConstructor<NE>, handler: TransitionHandler<VariantsUnion<_SD> & BrandedState, NE, RS, never>): Machine<State, Event, R, _SD, _ED>;
235
154
  /**
236
155
  * State-scoped effect that is forked on state entry and automatically cancelled on state exit.
237
156
  *
@@ -247,9 +166,10 @@ declare class Machine<State, Event, R = never, _SD extends Record<string, Schema
247
166
  * ```
248
167
  */
249
168
  /** Single state */
250
- spawn<NS extends VariantsUnion<_SD> & BrandedState>(state: TaggedOrConstructor<NS>, handler: StateEffectHandler<NS, VariantsUnion<_ED> & BrandedEvent, SD, Scope.Scope>): Machine<State, Event, R, _SD, _ED, SD>;
169
+ spawn<NS extends VariantsUnion<_SD> & BrandedState, R1>(state: TaggedOrConstructor<NS>, handler: StateEffectHandler<NS, VariantsUnion<_ED> & BrandedEvent, Scope.Scope | R1>): Machine<State, Event, R | R1, _SD, _ED>;
251
170
  /** Multiple states */
252
- spawn<NS extends ReadonlyArray<TaggedOrConstructor<VariantsUnion<_SD> & BrandedState>>>(states: NS, handler: StateEffectHandler<NS[number] extends TaggedOrConstructor<infer S> ? S : never, VariantsUnion<_ED> & BrandedEvent, SD, Scope.Scope>): Machine<State, Event, R, _SD, _ED, SD>;
171
+ spawn<NS extends ReadonlyArray<TaggedOrConstructor<VariantsUnion<_SD> & BrandedState>>, R1>(states: NS, handler: StateEffectHandler<NS[number] extends TaggedOrConstructor<infer S> ? S : never, VariantsUnion<_ED> & BrandedEvent, Scope.Scope | R1>): Machine<State, Event, R | R1, _SD, _ED>;
172
+ private registerTransition;
253
173
  /**
254
174
  * State-scoped task that runs on entry and sends success/failure events.
255
175
  * Interrupts do not emit failure events.
@@ -260,9 +180,9 @@ declare class Machine<State, Event, R = never, _SD extends Record<string, Schema
260
180
  * - `.task([State.X, State.Y], run, opts)` — multi-state
261
181
  */
262
182
  /** Single state — onSuccess optional (defaults to identity when task returns Event) */
263
- task<NS extends VariantsUnion<_SD> & BrandedState, A, E1, ES extends VariantsUnion<_ED> & BrandedEvent, EF extends VariantsUnion<_ED> & BrandedEvent>(state: TaggedOrConstructor<NS>, run: (ctx: StateHandlerContext<NS, VariantsUnion<_ED> & BrandedEvent, SD>) => Effect.Effect<A, E1, Scope.Scope>, options: TaskOptions<NS, VariantsUnion<_ED> & BrandedEvent, SD, A, E1, ES, EF>): Machine<State, Event, R, _SD, _ED, SD>;
183
+ task<NS extends VariantsUnion<_SD> & BrandedState, A, E1, R1, ES extends VariantsUnion<_ED> & BrandedEvent, EF extends VariantsUnion<_ED> & BrandedEvent>(state: TaggedOrConstructor<NS>, run: (ctx: StateHandlerContext<NS, VariantsUnion<_ED> & BrandedEvent>) => Effect.Effect<A, E1, Scope.Scope | R1>, options: TaskOptions<NS, VariantsUnion<_ED> & BrandedEvent, A, E1, ES, EF>): Machine<State, Event, R | R1, _SD, _ED>;
264
184
  /** Multiple states, explicit onSuccess */
265
- task<NS extends ReadonlyArray<TaggedOrConstructor<VariantsUnion<_SD> & BrandedState>>, A, E1, ES extends VariantsUnion<_ED> & BrandedEvent, EF extends VariantsUnion<_ED> & BrandedEvent>(states: NS, run: (ctx: StateHandlerContext<NS[number] extends TaggedOrConstructor<infer S> ? S : never, VariantsUnion<_ED> & BrandedEvent, SD>) => Effect.Effect<A, E1, Scope.Scope>, options: TaskOptions<NS[number] extends TaggedOrConstructor<infer S> ? S : never, VariantsUnion<_ED> & BrandedEvent, SD, A, E1, ES, EF>): Machine<State, Event, R, _SD, _ED, SD>;
185
+ task<NS extends ReadonlyArray<TaggedOrConstructor<VariantsUnion<_SD> & BrandedState>>, A, E1, R1, ES extends VariantsUnion<_ED> & BrandedEvent, EF extends VariantsUnion<_ED> & BrandedEvent>(states: NS, run: (ctx: StateHandlerContext<NS[number] extends TaggedOrConstructor<infer S> ? S : never, VariantsUnion<_ED> & BrandedEvent>) => Effect.Effect<A, E1, Scope.Scope | R1>, options: TaskOptions<NS[number] extends TaggedOrConstructor<infer S> ? S : never, VariantsUnion<_ED> & BrandedEvent, A, E1, ES, EF>): Machine<State, Event, R | R1, _SD, _ED>;
266
186
  /**
267
187
  * State timeout — gen_statem's `state_timeout`.
268
188
  *
@@ -284,7 +204,7 @@ declare class Machine<State, Event, R = never, _SD extends Record<string, Schema
284
204
  * })
285
205
  * ```
286
206
  */
287
- timeout<NS extends VariantsUnion<_SD> & BrandedState>(state: TaggedOrConstructor<NS>, config: TimeoutConfig<NS, VariantsUnion<_ED> & BrandedEvent>): Machine<State, Event, R, _SD, _ED, SD>;
207
+ timeout<NS extends VariantsUnion<_SD> & BrandedState>(state: TaggedOrConstructor<NS>, config: TimeoutConfig<NS, VariantsUnion<_ED> & BrandedEvent>): Machine<State, Event, R, _SD, _ED>;
288
208
  /**
289
209
  * Machine-lifetime effect that is forked on actor spawn and runs until the actor stops.
290
210
  *
@@ -297,7 +217,7 @@ declare class Machine<State, Event, R = never, _SD extends Record<string, Schema
297
217
  * );
298
218
  * ```
299
219
  */
300
- background(handler: StateEffectHandler<State, Event, SD, Scope.Scope>): Machine<State, Event, R, _SD, _ED, SD>;
220
+ background<R1>(handler: StateEffectHandler<State, Event, Scope.Scope | R1>): Machine<State, Event, R | R1, _SD, _ED>;
301
221
  /**
302
222
  * Postpone events — gen_statem's event postpone.
303
223
  *
@@ -315,33 +235,25 @@ declare class Machine<State, Event, R = never, _SD extends Record<string, Schema
315
235
  * .postpone(State.Connecting, [Event.Data, Event.Cmd]) // multiple events
316
236
  * ```
317
237
  */
318
- postpone<NS extends VariantsUnion<_SD> & BrandedState>(state: TaggedOrConstructor<NS>, events: TaggedOrConstructor<VariantsUnion<_ED> & BrandedEvent> | ReadonlyArray<TaggedOrConstructor<VariantsUnion<_ED> & BrandedEvent>>): Machine<State, Event, R, _SD, _ED, SD>;
319
- final<NS extends VariantsUnion<_SD> & BrandedState>(state: TaggedOrConstructor<NS>): Machine<State, Event, R, _SD, _ED, SD>;
320
- static make<SD extends Record<string, Schema.Struct.Fields>, ED extends Record<string, Schema.Struct.Fields>, S extends BrandedState, E extends BrandedEvent, SLD extends SlotsDef = Record<string, never>>(config: MakeConfig<SD, ED, S, E, SLD>): Machine<S, E, never, SD, ED, SLD>;
238
+ postpone<NS extends VariantsUnion<_SD> & BrandedState>(state: TaggedOrConstructor<NS>, events: TaggedOrConstructor<VariantsUnion<_ED> & BrandedEvent> | ReadonlyArray<TaggedOrConstructor<VariantsUnion<_ED> & BrandedEvent>>): Machine<State, Event, R, _SD, _ED>;
239
+ final<NS extends VariantsUnion<_SD> & BrandedState>(state: TaggedOrConstructor<NS>): Machine<State, Event, R, _SD, _ED>;
240
+ static make<SD extends Record<string, Schema.Struct.Fields>, ED extends Record<string, Schema.Struct.Fields>, S extends BrandedState, E extends BrandedEvent>(config: MakeConfig<SD, ED, S, E>): Machine<S, E, never, SD, ED>;
321
241
  }
322
- declare class TransitionScope<State, Event, R, _SD extends Record<string, Schema.Struct.Fields>, _ED extends Record<string, Schema.Struct.Fields>, SD extends SlotsDef, SelectedState extends VariantsUnion<_SD> & BrandedState> {
242
+ declare class TransitionScope<State, Event, R, _SD extends Record<string, Schema.Struct.Fields>, _ED extends Record<string, Schema.Struct.Fields>, SelectedState extends VariantsUnion<_SD> & BrandedState> {
323
243
  private readonly machine;
324
244
  private readonly states;
325
- constructor(machine: Machine<State, Event, R, _SD, _ED, SD>, states: ReadonlyArray<TaggedOrConstructor<SelectedState>>);
326
- on<NE extends VariantsUnion<_ED> & BrandedEvent, RS extends VariantsUnion<_SD> & BrandedState>(event: TaggedOrConstructor<NE>, handler: TransitionHandler<SelectedState, NE, RS, SD, never, ExtractReply<NE>>): TransitionScope<State, Event, R, _SD, _ED, SD, SelectedState>;
327
- reenter<NE extends VariantsUnion<_ED> & BrandedEvent, RS extends VariantsUnion<_SD> & BrandedState>(event: TaggedOrConstructor<NE>, handler: TransitionHandler<SelectedState, NE, RS, SD, never, ExtractReply<NE>>): TransitionScope<State, Event, R, _SD, _ED, SD, SelectedState>;
245
+ constructor(machine: Machine<State, Event, R, _SD, _ED>, states: ReadonlyArray<TaggedOrConstructor<SelectedState>>);
246
+ on<NE extends VariantsUnion<_ED> & BrandedEvent, RS extends VariantsUnion<_SD> & BrandedState>(event: TaggedOrConstructor<NE>, handler: TransitionHandler<SelectedState, NE, RS, never, ExtractReply<NE>>): TransitionScope<State, Event, R, _SD, _ED, SelectedState>;
247
+ reenter<NE extends VariantsUnion<_ED> & BrandedEvent, RS extends VariantsUnion<_SD> & BrandedState>(event: TaggedOrConstructor<NE>, handler: TransitionHandler<SelectedState, NE, RS, never, ExtractReply<NE>>): TransitionScope<State, Event, R, _SD, _ED, SelectedState>;
328
248
  }
329
249
  declare const make: typeof Machine.make;
330
250
  /**
331
251
  * Spawn an actor from a machine.
332
252
  *
333
- * For machines with slots, pass implementations via `{ slots: { ... } }`.
334
- *
335
253
  * @example
336
254
  * ```ts
337
- * // No slots
338
255
  * const actor = yield* Machine.spawn(machine);
339
256
  *
340
- * // With slots
341
- * const actor = yield* Machine.spawn(machine, {
342
- * slots: { canRetry: ({ max }) => attempts < max },
343
- * });
344
- *
345
257
  * // With lifecycle (recovery + durability)
346
258
  * const actor = yield* Machine.spawn(machine, {
347
259
  * lifecycle: {
@@ -355,10 +267,9 @@ declare const spawn: <S extends {
355
267
  readonly _tag: string;
356
268
  }, E extends {
357
269
  readonly _tag: string;
358
- }, R, SD extends SlotsDef = Record<string, never>>(machine: Machine<S, E, R, any, any, SD>, options?: string | {
270
+ }, R>(machine: Machine<S, E, R, any, any>, options?: string | {
359
271
  id?: string;
360
272
  hydrate?: S;
361
- slots?: ProvideSlots<SD, any>;
362
273
  supervision?: Supervision.Policy;
363
274
  lifecycle?: Lifecycle<S, E>;
364
275
  }) => Effect.Effect<ActorRef<S, E>, never, R>;
@@ -387,12 +298,11 @@ declare const replay: {
387
298
  readonly _tag: string;
388
299
  }, E extends {
389
300
  readonly _tag: string;
390
- }, R, SD extends SlotsDef = Record<string, never>>(machine: Machine<S, E, R, any, any, SD>, events: ReadonlyArray<E>, options?: {
301
+ }, R>(machine: Machine<S, E, R, any, any>, events: ReadonlyArray<E>, options?: {
391
302
  from?: S;
392
- slots?: ProvideSlots<SD, any>;
393
303
  }): Effect.Effect<S, never, R>;
394
304
  };
395
- declare const reply: <State, Reply>(state: State, reply: Reply) => ReplyResult<State, Reply>;
396
- declare const deferReply: <State>(state: State) => DeferReplyResult<State>;
305
+ declare const reply: typeof makeReply;
306
+ declare const deferReply: typeof makeDeferReply;
397
307
  //#endregion
398
- export { BackgroundEffect, type DeferReplyResult, Durability, DurabilityCommit, HandlerContext, Lifecycle, Machine, MachineRef, MakeConfig, Recovery, RecoveryContext, type ReplyResult, SpawnEffect, StateEffectHandler, StateHandlerContext, TaskOptions, TimeoutConfig, Transition, TransitionHandler, deferReply, findTransitions, machine_d_exports, make, materializeMachine, replay, reply, scoped, spawn };
308
+ export { type DeferReplyResult, Durability, DurabilityCommit, HandlerContext, Lifecycle, Machine, MachineRef, MakeConfig, Recovery, RecoveryContext, type ReplyResult, StateEffectHandler, StateHandlerContext, TaskOptions, TimeoutConfig, TransitionHandler, deferReply, machine_d_exports, make, replay, reply, scoped, spawn };