effect-machine 0.17.1 → 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.
- package/LICENSE +21 -0
- package/README.md +50 -54
- package/dist/actor.d.ts +8 -45
- package/dist/actor.js +157 -231
- package/dist/cluster/adapters/in-memory.d.ts +0 -1
- package/dist/cluster/adapters/in-memory.js +10 -5
- package/dist/cluster/entity-actor-ref.d.ts +2 -3
- package/dist/cluster/entity-actor-ref.js +14 -17
- package/dist/cluster/entity-machine.d.ts +2 -8
- package/dist/cluster/entity-machine.js +57 -34
- package/dist/cluster/index.js +1 -1
- package/dist/cluster/persistence.d.ts +0 -1
- package/dist/cluster/to-entity.d.ts +19 -21
- package/dist/cluster/to-entity.js +18 -19
- package/dist/errors.d.ts +11 -37
- package/dist/errors.js +12 -30
- package/dist/index.d.ts +4 -5
- package/dist/index.js +4 -5
- package/dist/inspection.d.ts +0 -1
- package/dist/inspection.js +24 -13
- package/dist/internal/brands.d.ts +0 -1
- package/dist/internal/event-advancement.d.ts +50 -0
- package/dist/internal/event-advancement.js +79 -0
- package/dist/internal/inspection.d.ts +5 -9
- package/dist/internal/inspection.js +31 -10
- package/dist/internal/machine-definition.d.ts +16 -0
- package/dist/internal/runtime.d.ts +1 -161
- package/dist/internal/runtime.js +191 -150
- package/dist/internal/transition.d.ts +4 -135
- package/dist/internal/transition.js +82 -157
- package/dist/internal/utils.d.ts +3 -40
- package/dist/internal/utils.js +2 -2
- package/dist/machine.d.ts +47 -137
- package/dist/machine.js +147 -215
- package/dist/schema.d.ts +42 -21
- package/dist/schema.js +28 -18
- package/dist/supervision.d.ts +1 -24
- package/dist/supervision.js +2 -3
- package/dist/testing.d.ts +15 -29
- package/dist/testing.js +76 -95
- package/package.json +19 -38
- package/dist/slot.d.ts +0 -159
- package/dist/slot.js +0 -165
- package/v3/dist/_virtual/_rolldown/runtime.js +0 -13
- package/v3/dist/actor.d.ts +0 -250
- package/v3/dist/actor.js +0 -577
- package/v3/dist/cluster/adapters/in-memory.d.ts +0 -15
- package/v3/dist/cluster/adapters/in-memory.js +0 -62
- package/v3/dist/cluster/entity-actor-ref.d.ts +0 -49
- package/v3/dist/cluster/entity-actor-ref.js +0 -19
- package/v3/dist/cluster/entity-machine.d.ts +0 -74
- package/v3/dist/cluster/entity-machine.js +0 -166
- package/v3/dist/cluster/index.d.ts +0 -6
- package/v3/dist/cluster/index.js +0 -6
- package/v3/dist/cluster/persistence.d.ts +0 -48
- package/v3/dist/cluster/persistence.js +0 -14
- package/v3/dist/cluster/to-entity.d.ts +0 -69
- package/v3/dist/cluster/to-entity.js +0 -59
- package/v3/dist/errors.d.ts +0 -95
- package/v3/dist/errors.js +0 -54
- package/v3/dist/index.d.ts +0 -11
- package/v3/dist/index.js +0 -9
- package/v3/dist/inspection.d.ts +0 -151
- package/v3/dist/inspection.js +0 -128
- package/v3/dist/internal/brands.d.ts +0 -50
- package/v3/dist/internal/inspection.d.ts +0 -11
- package/v3/dist/internal/inspection.js +0 -20
- package/v3/dist/internal/runtime.d.ts +0 -161
- package/v3/dist/internal/runtime.js +0 -360
- package/v3/dist/internal/transition.d.ts +0 -190
- package/v3/dist/internal/transition.js +0 -278
- package/v3/dist/internal/utils.d.ts +0 -101
- package/v3/dist/internal/utils.js +0 -75
- package/v3/dist/machine.d.ts +0 -398
- package/v3/dist/machine.js +0 -487
- package/v3/dist/schema.d.ts +0 -174
- package/v3/dist/schema.js +0 -206
- package/v3/dist/slot.d.ts +0 -158
- package/v3/dist/slot.js +0 -165
- package/v3/dist/supervision.d.ts +0 -97
- package/v3/dist/supervision.js +0 -42
- package/v3/dist/testing.d.ts +0 -151
- package/v3/dist/testing.js +0 -189
- /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,
|
|
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 {
|
|
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
|
|
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:
|
|
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
|
|
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
|
|
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,
|
|
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,
|
|
63
|
-
|
|
64
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
readonly
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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,
|
|
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
|
|
319
|
-
final<NS extends VariantsUnion<_SD> & BrandedState>(state: TaggedOrConstructor<NS>): Machine<State, Event, R, _SD, _ED
|
|
320
|
-
static make<SD extends Record<string, Schema.Struct.Fields>, ED extends Record<string, Schema.Struct.Fields>, S extends BrandedState, E extends BrandedEvent
|
|
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>,
|
|
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
|
|
326
|
-
on<NE extends VariantsUnion<_ED> & BrandedEvent, RS extends VariantsUnion<_SD> & BrandedState>(event: TaggedOrConstructor<NE>, handler: TransitionHandler<SelectedState, NE, RS,
|
|
327
|
-
reenter<NE extends VariantsUnion<_ED> & BrandedEvent, RS extends VariantsUnion<_SD> & BrandedState>(event: TaggedOrConstructor<NE>, handler: TransitionHandler<SelectedState, NE, RS,
|
|
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
|
|
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
|
|
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:
|
|
396
|
-
declare const deferReply:
|
|
305
|
+
declare const reply: typeof makeReply;
|
|
306
|
+
declare const deferReply: typeof makeDeferReply;
|
|
397
307
|
//#endregion
|
|
398
|
-
export {
|
|
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 };
|