@typeonce/effect-machine 0.9.0 → 0.10.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/README.md +128 -28
- package/dist/Machine.d.ts +334 -238
- package/dist/Machine.d.ts.map +1 -1
- package/dist/Machine.js +45 -76
- package/dist/Machine.js.map +1 -1
- package/dist/internal/machine/atom.d.ts +6 -2
- package/dist/internal/machine/atom.d.ts.map +1 -1
- package/dist/internal/machine/atom.js +5 -0
- package/dist/internal/machine/atom.js.map +1 -1
- package/dist/internal/machine/cluster.d.ts.map +1 -1
- package/dist/internal/machine/cluster.js +2 -1
- package/dist/internal/machine/cluster.js.map +1 -1
- package/dist/internal/machine/command.js +2 -2
- package/dist/internal/machine/command.js.map +1 -1
- package/dist/internal/machine/commandRuntime.d.ts.map +1 -1
- package/dist/internal/machine/commandRuntime.js +6 -3
- package/dist/internal/machine/commandRuntime.js.map +1 -1
- package/dist/internal/machine/configuration.d.ts +8 -1
- package/dist/internal/machine/configuration.d.ts.map +1 -1
- package/dist/internal/machine/configuration.js +9 -4
- package/dist/internal/machine/configuration.js.map +1 -1
- package/dist/internal/machine/errors.d.ts +1 -1
- package/dist/internal/machine/errors.d.ts.map +1 -1
- package/dist/internal/machine/executionPlan.d.ts +3 -3
- package/dist/internal/machine/executionPlan.d.ts.map +1 -1
- package/dist/internal/machine/executionPlan.js +50 -25
- package/dist/internal/machine/executionPlan.js.map +1 -1
- package/dist/internal/machine/invocation.d.ts.map +1 -1
- package/dist/internal/machine/invocation.js +3 -2
- package/dist/internal/machine/invocation.js.map +1 -1
- package/dist/internal/machine/machine.d.ts +14 -19
- package/dist/internal/machine/machine.d.ts.map +1 -1
- package/dist/internal/machine/machine.js +12 -10
- package/dist/internal/machine/machine.js.map +1 -1
- package/dist/internal/machine/planner.d.ts +2 -1
- package/dist/internal/machine/planner.d.ts.map +1 -1
- package/dist/internal/machine/planner.js +61 -24
- package/dist/internal/machine/planner.js.map +1 -1
- package/dist/internal/machine/process.d.ts.map +1 -1
- package/dist/internal/machine/process.js +8 -8
- package/dist/internal/machine/process.js.map +1 -1
- package/dist/internal/machine/protocol.d.ts +7 -13
- package/dist/internal/machine/protocol.d.ts.map +1 -1
- package/dist/internal/machine/protocol.js +128 -50
- package/dist/internal/machine/protocol.js.map +1 -1
- package/dist/internal/machine/runtime.d.ts +8 -2
- package/dist/internal/machine/runtime.d.ts.map +1 -1
- package/dist/internal/machine/runtime.js +86 -8
- package/dist/internal/machine/runtime.js.map +1 -1
- package/dist/internal/machine/topology.d.ts +7 -0
- package/dist/internal/machine/topology.d.ts.map +1 -1
- package/dist/internal/machine/topology.js +6 -0
- package/dist/internal/machine/topology.js.map +1 -1
- package/dist/internal/testing/machine/finiteModel.js +1 -1
- package/dist/internal/testing/machine/finiteModel.js.map +1 -1
- package/dist/internal/testing/machine/runtime.d.ts.map +1 -1
- package/dist/internal/testing/machine/runtime.js +2 -1
- package/dist/internal/testing/machine/runtime.js.map +1 -1
- package/dist/internal/testing/machine/verification.d.ts.map +1 -1
- package/dist/internal/testing/machine/verification.js +5 -3
- package/dist/internal/testing/machine/verification.js.map +1 -1
- package/dist/testing/MachineTest.d.ts +7 -7
- package/dist/testing/MachineTest.js +7 -7
- package/dist/unstable/cluster/ClusterMachine.d.ts +1 -1
- package/dist/unstable/cluster/ClusterMachine.js +1 -1
- package/dist/unstable/reactivity/AtomMachine.d.ts +25 -8
- package/dist/unstable/reactivity/AtomMachine.d.ts.map +1 -1
- package/dist/unstable/reactivity/AtomMachine.js +18 -3
- package/dist/unstable/reactivity/AtomMachine.js.map +1 -1
- package/docs/agent-guide.md +143 -48
- package/package.json +1 -1
- package/src/Machine.ts +559 -307
- package/src/internal/machine/atom.ts +35 -10
- package/src/internal/machine/cluster.ts +2 -1
- package/src/internal/machine/command.ts +2 -2
- package/src/internal/machine/commandRuntime.ts +9 -4
- package/src/internal/machine/configuration.ts +23 -5
- package/src/internal/machine/errors.ts +1 -1
- package/src/internal/machine/executionPlan.ts +74 -29
- package/src/internal/machine/invocation.ts +3 -2
- package/src/internal/machine/machine.ts +68 -49
- package/src/internal/machine/planner.ts +68 -24
- package/src/internal/machine/process.ts +18 -8
- package/src/internal/machine/protocol.ts +207 -68
- package/src/internal/machine/runtime.ts +135 -9
- package/src/internal/machine/topology.ts +15 -0
- package/src/internal/testing/machine/finiteModel.ts +1 -1
- package/src/internal/testing/machine/runtime.ts +2 -1
- package/src/internal/testing/machine/verification.ts +5 -3
- package/src/testing/MachineTest.ts +7 -7
- package/src/unstable/cluster/ClusterMachine.ts +1 -1
- package/src/unstable/reactivity/AtomMachine.ts +42 -10
package/dist/Machine.d.ts
CHANGED
|
@@ -38,6 +38,8 @@ export declare const TypeId: TypeId;
|
|
|
38
38
|
declare const MachineOutputStatesTypeId: unique symbol;
|
|
39
39
|
declare const MachineTypeId: unique symbol;
|
|
40
40
|
declare const EventConstructionTypeId: unique symbol;
|
|
41
|
+
declare const EmittedEventConstructionTypeId: unique symbol;
|
|
42
|
+
declare const EventProtocolTypeId: unique symbol;
|
|
41
43
|
declare const ChildMachineLogicTypeId: typeof internal.ChildMachineLogicTypeId;
|
|
42
44
|
/**
|
|
43
45
|
* Type identifier used for the synthetic event passed to startup lifecycle
|
|
@@ -92,10 +94,10 @@ type IsAny<A> = 0 extends (1 & A) ? true : false;
|
|
|
92
94
|
* @category models
|
|
93
95
|
* @since 0.4.0
|
|
94
96
|
*/
|
|
95
|
-
export interface Machine<States extends Machine.StateSchemas, Events extends ReadonlyArray<Machine.TaggedSchema>, Input extends Schema.Top = typeof Schema.Void, UnhandledStates extends Machine.StateIdentifier<States> = Machine.StateIdentifier<States>, E = never, R = never, InitialE = never, InitialR = never, FinalStates extends Machine.StateIdentifier<States> = never, Output = never, Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [], OutputStates extends Machine.StateIdentifier<States> = never, InputEvents extends ReadonlyArray<Machine.TaggedSchema> = Events> extends Pipeable {
|
|
97
|
+
export interface Machine<States extends Machine.StateSchemas, Events extends ReadonlyArray<Machine.TaggedSchema>, Input extends Schema.Top = typeof Schema.Void, UnhandledStates extends Machine.StateIdentifier<States> = Machine.StateIdentifier<States>, E = never, R = never, InitialE = never, InitialR = never, FinalStates extends Machine.StateIdentifier<States> = never, Output = never, Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [], OutputStates extends Machine.StateIdentifier<States> = never, InputEvents extends ReadonlyArray<Machine.TaggedSchema> = Events, ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []> extends Pipeable {
|
|
96
98
|
readonly [TypeId]: TypeId;
|
|
97
99
|
/** @internal Stable type-level carrier for machine protocol extraction. */
|
|
98
|
-
readonly [MachineTypeId]: Machine.TypeCarrier<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents>;
|
|
100
|
+
readonly [MachineTypeId]: Machine.TypeCarrier<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents, ParentEvents>;
|
|
99
101
|
/** @internal Prevents output implementation evidence from being widened. */
|
|
100
102
|
readonly [MachineOutputStatesTypeId]: Readonly<Record<OutputStates, true>>;
|
|
101
103
|
/**
|
|
@@ -109,20 +111,31 @@ export interface Machine<States extends Machine.StateSchemas, Events extends Rea
|
|
|
109
111
|
*
|
|
110
112
|
* @since 0.4.0
|
|
111
113
|
*/
|
|
112
|
-
readonly events: InputEvents
|
|
114
|
+
readonly events: Machine.EventProtocol<"public", InputEvents>;
|
|
113
115
|
/**
|
|
114
|
-
* Events reserved for raised events
|
|
115
|
-
* work.
|
|
116
|
+
* Events reserved for raised events and other machine-local work.
|
|
116
117
|
*
|
|
117
118
|
* @since 0.4.0
|
|
118
119
|
*/
|
|
119
|
-
readonly internalEvents:
|
|
120
|
+
readonly internalEvents: Machine.EventProtocol<"internal", Machine.InternalEventSchemas<Events, InputEvents>>;
|
|
120
121
|
/**
|
|
121
|
-
*
|
|
122
|
+
* Ephemeral outward notifications published to this actor's observers.
|
|
123
|
+
* Emissions are never delivered implicitly to an owning actor.
|
|
122
124
|
*
|
|
123
125
|
* @since 0.4.0
|
|
124
126
|
*/
|
|
125
|
-
readonly
|
|
127
|
+
readonly emittedEvents: Machine.EventProtocol<"emitted", Emits>;
|
|
128
|
+
/**
|
|
129
|
+
* Public input events accepted by an owning actor when this machine is
|
|
130
|
+
* running as a child.
|
|
131
|
+
*
|
|
132
|
+
* The protocol types the optional `parent` actor reference exposed to
|
|
133
|
+
* handlers and is checked against a concrete parent's public events at
|
|
134
|
+
* composition boundaries.
|
|
135
|
+
*
|
|
136
|
+
* @since 0.10.0
|
|
137
|
+
*/
|
|
138
|
+
readonly parentEvents: Machine.EventProtocol<"public", ParentEvents>;
|
|
126
139
|
/**
|
|
127
140
|
* Optional schema used to decode the machine input before initialization.
|
|
128
141
|
*
|
|
@@ -151,7 +164,7 @@ export interface Machine<States extends Machine.StateSchemas, Events extends Rea
|
|
|
151
164
|
*
|
|
152
165
|
* @since 0.4.0
|
|
153
166
|
*/
|
|
154
|
-
readonly handle: Machine.Handler<States, Events, Emits, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, OutputStates, InputEvents>;
|
|
167
|
+
readonly handle: Machine.Handler<States, Events, Emits, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, OutputStates, InputEvents, ParentEvents>;
|
|
155
168
|
/** @internal */
|
|
156
169
|
readonly initial: (...args: [...Machine.InputArgs<Input>]) => Machine.InitialResult<States, InitialE, InitialR>;
|
|
157
170
|
}
|
|
@@ -257,7 +270,8 @@ export type PlanningServices<Requirements> = Exclude<Requirements, ActionRequire
|
|
|
257
270
|
*/
|
|
258
271
|
export type ExecutionServices<Requirements> = Exclude<PlanningServices<Requirements>, MachineRuntimeRequirement> | Exclude<ActionServices<Requirements>, MachineRuntimeRequirement>;
|
|
259
272
|
/**
|
|
260
|
-
* Managed runtime capability used to deliver raised and
|
|
273
|
+
* Managed runtime capability used to deliver raised events and publish
|
|
274
|
+
* emitted notifications.
|
|
261
275
|
*
|
|
262
276
|
* @category models
|
|
263
277
|
* @since 0.4.0
|
|
@@ -270,11 +284,34 @@ export interface Runtime<in Events, in Emits> {
|
|
|
270
284
|
*/
|
|
271
285
|
readonly raise: (event: Machine.EventInput<Events>) => Effect.Effect<void, MachineSchemaDecodeError | StoppedError>;
|
|
272
286
|
/**
|
|
273
|
-
*
|
|
287
|
+
* Publishes an ephemeral notification to the running actor's observers.
|
|
274
288
|
*
|
|
275
289
|
* @since 0.4.0
|
|
276
290
|
*/
|
|
277
|
-
readonly
|
|
291
|
+
readonly emit: (event: Machine.EmittedEventInput<Emits>) => Effect.Effect<void, MachineSchemaDecodeError | StoppedError>;
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Minimal typed reference accepted by targeted actor commands.
|
|
295
|
+
*
|
|
296
|
+
* @category models
|
|
297
|
+
* @since 0.10.0
|
|
298
|
+
*/
|
|
299
|
+
export interface ActorRef<in Event> {
|
|
300
|
+
readonly id: string;
|
|
301
|
+
readonly sessionId: string;
|
|
302
|
+
readonly send: (event: Event) => Effect.Effect<void, StoppedError>;
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Actor references available while evaluating machine behavior.
|
|
306
|
+
*
|
|
307
|
+
* @category models
|
|
308
|
+
* @since 0.10.0
|
|
309
|
+
*/
|
|
310
|
+
export interface ActorContext<InputEvents extends ReadonlyArray<Machine.TaggedSchema>, ParentEvents extends ReadonlyArray<Machine.TaggedSchema>> {
|
|
311
|
+
/** Reference to the current actor. Sending queues a later mailbox event. */
|
|
312
|
+
readonly self: ActorRef<Machine.EventInputOf<InputEvents>>;
|
|
313
|
+
/** Reference to the owning actor, or `undefined` when running as a root. */
|
|
314
|
+
readonly parent: ActorRef<Machine.EventInputOf<ParentEvents>> | undefined;
|
|
278
315
|
}
|
|
279
316
|
/**
|
|
280
317
|
* Synchronous commands available while a machine transition is being
|
|
@@ -287,10 +324,11 @@ export interface Runtime<in Events, in Emits> {
|
|
|
287
324
|
export interface Enqueue<in Events, in Emits> {
|
|
288
325
|
/** Raises an event inside the current macrostep. */
|
|
289
326
|
readonly raise: (event: Machine.EventInput<Events>) => void;
|
|
290
|
-
/**
|
|
291
|
-
readonly emit: (event: Emits) => void;
|
|
327
|
+
/** Publishes an ephemeral notification to this actor's observers. */
|
|
328
|
+
readonly emit: (event: Machine.EmittedEventInput<Emits>) => void;
|
|
292
329
|
/** Sends an event to an invoked child after the transition is selected. */
|
|
293
330
|
readonly sendTo: {
|
|
331
|
+
<Event>(target: ActorRef<Event>, event: Event): void;
|
|
294
332
|
<Child extends ChildMachine.Any>(child: Child, event: ChildMachine.Event<Child>): void;
|
|
295
333
|
<Address extends ChildAddress<never>>(child: Address, event: ChildAddress.Event<Address>): void;
|
|
296
334
|
};
|
|
@@ -308,7 +346,7 @@ export interface Enqueue<in Events, in Emits> {
|
|
|
308
346
|
*/
|
|
309
347
|
export type Command = {
|
|
310
348
|
readonly _tag: "SendTo";
|
|
311
|
-
readonly
|
|
349
|
+
readonly target: ActorRef<unknown> | ChildMachine.Any | ChildAddress<never>;
|
|
312
350
|
readonly event: unknown;
|
|
313
351
|
} | {
|
|
314
352
|
readonly _tag: "Stop";
|
|
@@ -451,9 +489,11 @@ type EventProtocolError<Message extends string, Tag extends PropertyKey = never>
|
|
|
451
489
|
type DuplicateEventTag<Events extends ReadonlyArray<Machine.TaggedSchema>, Seen extends PropertyKey = never> = number extends Events["length"] ? never : Events extends readonly [
|
|
452
490
|
infer Head extends Machine.TaggedSchema,
|
|
453
491
|
...infer Tail extends ReadonlyArray<Machine.TaggedSchema>
|
|
454
|
-
] ? Machine.TagOf<Head> extends infer Tag extends PropertyKey ? Tag
|
|
492
|
+
] ? Machine.TagOf<Head> extends infer Tag extends PropertyKey ? Extract<Tag, Seen> | DuplicateEventTag<Tail, Seen | Tag> : never : never;
|
|
455
493
|
type ValidateInputEventProtocol<InputEvents extends ReadonlyArray<Machine.TaggedSchema>, DuplicateInput extends PropertyKey = DuplicateEventTag<InputEvents>> = [DuplicateInput] extends [never] ? unknown : EventProtocolError<"Public event tags must be unique", DuplicateInput>;
|
|
494
|
+
type ValidateEmittedEventProtocol<EmittedEvents extends ReadonlyArray<Machine.TaggedSchema>, DuplicateEmitted extends PropertyKey = DuplicateEventTag<EmittedEvents>> = [DuplicateEmitted] extends [never] ? unknown : EventProtocolError<"Emitted event tags must be unique", DuplicateEmitted>;
|
|
456
495
|
type ValidateInternalEventProtocol<InputEvents extends ReadonlyArray<Machine.TaggedSchema>, InternalEvents extends ReadonlyArray<Machine.TaggedSchema>, DuplicateInternal extends PropertyKey = DuplicateEventTag<InternalEvents>, Overlap extends PropertyKey = Extract<Machine.TagOf<InputEvents[number]>, Machine.TagOf<InternalEvents[number]>>> = [DuplicateInternal] extends [never] ? [Overlap] extends [never] ? unknown : EventProtocolError<"Public and internal event tags must be disjoint", Overlap> : EventProtocolError<"Internal event tags must be unique", DuplicateInternal>;
|
|
496
|
+
type ValidateEventProtocolBuilder<Kind extends Machine.EventProtocolKind, Inputs extends ReadonlyArray<Machine.EventProtocolInput<Kind>>, Schemas extends ReadonlyArray<Machine.TaggedSchema> = Machine.EventProtocolInputSchemasOf<Kind, Inputs>, Duplicate extends PropertyKey = DuplicateEventTag<Schemas>> = [Duplicate] extends [never] ? unknown : EventProtocolError<"Event protocol tags must be unique", Duplicate>;
|
|
457
497
|
declare const SnapshotBuilderStateTypeId: typeof internal.SnapshotBuilderStateTypeId;
|
|
458
498
|
declare const SnapshotBuilderConstructionTypeId: unique symbol;
|
|
459
499
|
type SnapshotBuilderComplete<Regions, Constructed extends boolean = false> = {
|
|
@@ -825,7 +865,7 @@ export type RuntimeOutcome<State, Error = never, Output = never> = {
|
|
|
825
865
|
* @category models
|
|
826
866
|
* @since 0.4.0
|
|
827
867
|
*/
|
|
828
|
-
export interface MachineRef<out State, in Event, out Error = never, out Output = never> {
|
|
868
|
+
export interface MachineRef<out State, in Event, out Error = never, out Output = never, out Emitted = never> extends ActorRef<Event> {
|
|
829
869
|
/** Stable machine definition id, or a generated fallback when none was declared. */
|
|
830
870
|
readonly id: string;
|
|
831
871
|
/** Unique identity for this running machine instance. */
|
|
@@ -834,8 +874,13 @@ export interface MachineRef<out State, in Event, out Error = never, out Output =
|
|
|
834
874
|
readonly state: Effect.Effect<State>;
|
|
835
875
|
/** Reads the latest lifecycle snapshot. */
|
|
836
876
|
readonly snapshot: Effect.Effect<RuntimeSnapshot<State, Error, Output>>;
|
|
837
|
-
/** Streams lifecycle
|
|
877
|
+
/** Streams the current lifecycle snapshot followed by later changes. */
|
|
838
878
|
readonly changes: Stream.Stream<RuntimeSnapshot<State, Error, Output>>;
|
|
879
|
+
/**
|
|
880
|
+
* Streams ephemeral notifications published after subscription. Emissions
|
|
881
|
+
* are not retained or replayed; the stream completes when the actor stops.
|
|
882
|
+
*/
|
|
883
|
+
readonly emissions: Stream.Stream<Emitted>;
|
|
839
884
|
/** Waits for machine output or fails when execution fails or is stopped. */
|
|
840
885
|
readonly join: Effect.Effect<Output, Error | StoppedError>;
|
|
841
886
|
/** Stops this machine instance and its owned child processes. */
|
|
@@ -903,13 +948,6 @@ export declare namespace Logic {
|
|
|
903
948
|
/**
|
|
904
949
|
* Machine-local capabilities available while process logic initializes.
|
|
905
950
|
*
|
|
906
|
-
* **Gotchas**
|
|
907
|
-
*
|
|
908
|
-
* `sendParent` accepts `unknown` because process logic is independent from
|
|
909
|
-
* the parent that eventually owns it. Prefer typed process output or an
|
|
910
|
-
* invocation lifecycle transition when either can represent the
|
|
911
|
-
* communication.
|
|
912
|
-
*
|
|
913
951
|
* @category models
|
|
914
952
|
* @since 0.4.0
|
|
915
953
|
*/
|
|
@@ -920,10 +958,11 @@ export declare namespace Logic {
|
|
|
920
958
|
readonly parent: Address<unknown> | undefined;
|
|
921
959
|
/** Starts a child process owned by this scope. */
|
|
922
960
|
readonly spawn: Spawn;
|
|
923
|
-
/** Sends an
|
|
924
|
-
readonly
|
|
925
|
-
|
|
926
|
-
|
|
961
|
+
/** Sends an event to an actor reference or typed parent-local child address. */
|
|
962
|
+
readonly sendTo: {
|
|
963
|
+
<TargetEvent>(target: ActorRef<TargetEvent>, event: TargetEvent): Effect.Effect<void, StoppedError>;
|
|
964
|
+
<Address extends ChildAddress<never>>(id: Address, event: ChildAddress.Event<Address>): Effect.Effect<void, StoppedError>;
|
|
965
|
+
};
|
|
927
966
|
/** Stops a child process selected by its parent-local address. */
|
|
928
967
|
readonly stopChild: <Event>(id: ChildAddress<Event>) => Effect.Effect<void>;
|
|
929
968
|
}
|
|
@@ -992,14 +1031,14 @@ export declare namespace ChildMachine {
|
|
|
992
1031
|
* @category utility types
|
|
993
1032
|
* @since 0.4.0
|
|
994
1033
|
*/
|
|
995
|
-
type Ref<Child> = Child extends ChildMachine<string, infer M> ? MachineRef<Machine.Snapshot<Machine.States<M>>, Machine.EventInput<Machine.InputEvent<M>>, Machine.Error<M> | ActionError<Machine.Services<M>> | InfiniteTransitionError | MachineSchemaDecodeError | StoppedError, Machine.Output<M>> : never;
|
|
1034
|
+
type Ref<Child> = Child extends ChildMachine<string, infer M> ? MachineRef<Machine.Snapshot<Machine.States<M>>, Machine.EventInput<Machine.InputEvent<M>>, Machine.Error<M> | ActionError<Machine.Services<M>> | InfiniteTransitionError | MachineSchemaDecodeError | StoppedError, Machine.Output<M>, Machine.EmittedEvent<M>> : never;
|
|
996
1035
|
/**
|
|
997
1036
|
* Event accepted by the child selected by a descriptor.
|
|
998
1037
|
*
|
|
999
1038
|
* @category utility types
|
|
1000
1039
|
* @since 0.4.0
|
|
1001
1040
|
*/
|
|
1002
|
-
type Event<Child> =
|
|
1041
|
+
type Event<Child> = Child extends ChildMachine<string, infer M> ? Machine.EventInput<Machine.InputEvent<M>> : never;
|
|
1003
1042
|
}
|
|
1004
1043
|
/**
|
|
1005
1044
|
* Parent-local address for a child process that can receive events.
|
|
@@ -1089,7 +1128,7 @@ export declare namespace Machine {
|
|
|
1089
1128
|
*
|
|
1090
1129
|
* @internal
|
|
1091
1130
|
*/
|
|
1092
|
-
interface TypeCarrier<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Input extends Schema.Top, UnhandledStates extends StateIdentifier<States>, E, R, InitialE, InitialR, FinalStates extends StateIdentifier<States>, Output, Emits extends ReadonlyArray<TaggedSchema>, OutputStates extends StateIdentifier<States>, InputEvents extends ReadonlyArray<TaggedSchema>> {
|
|
1131
|
+
interface TypeCarrier<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Input extends Schema.Top, UnhandledStates extends StateIdentifier<States>, E, R, InitialE, InitialR, FinalStates extends StateIdentifier<States>, Output, Emits extends ReadonlyArray<TaggedSchema>, OutputStates extends StateIdentifier<States>, InputEvents extends ReadonlyArray<TaggedSchema>, ParentEvents extends ReadonlyArray<TaggedSchema>> {
|
|
1093
1132
|
readonly states: States;
|
|
1094
1133
|
readonly events: Events;
|
|
1095
1134
|
readonly input: Input;
|
|
@@ -1100,9 +1139,10 @@ export declare namespace Machine {
|
|
|
1100
1139
|
readonly initialServices: InitialR;
|
|
1101
1140
|
readonly finalStates: FinalStates;
|
|
1102
1141
|
readonly output: Output;
|
|
1103
|
-
readonly
|
|
1142
|
+
readonly emittedEvents: Emits;
|
|
1104
1143
|
readonly outputStates: OutputStates;
|
|
1105
1144
|
readonly inputEvents: InputEvents;
|
|
1145
|
+
readonly parentEvents: ParentEvents;
|
|
1106
1146
|
}
|
|
1107
1147
|
/**
|
|
1108
1148
|
* Any schema-first machine.
|
|
@@ -1119,11 +1159,12 @@ export declare namespace Machine {
|
|
|
1119
1159
|
interface Any extends Pipeable {
|
|
1120
1160
|
readonly [TypeId]: TypeId;
|
|
1121
1161
|
/** @internal */
|
|
1122
|
-
readonly [MachineTypeId]: TypeCarrier<any, any, any, any, any, any, any, any, any, any, any, any, any>;
|
|
1162
|
+
readonly [MachineTypeId]: TypeCarrier<any, any, any, any, any, any, any, any, any, any, any, any, any, any>;
|
|
1123
1163
|
readonly states: StateSchemas;
|
|
1124
|
-
readonly events:
|
|
1125
|
-
readonly internalEvents:
|
|
1126
|
-
readonly
|
|
1164
|
+
readonly events: EventProtocol.Any<"public">;
|
|
1165
|
+
readonly internalEvents: EventProtocol.Any<"internal">;
|
|
1166
|
+
readonly emittedEvents: EventProtocol.Any<"emitted">;
|
|
1167
|
+
readonly parentEvents: EventProtocol.Any<"public">;
|
|
1127
1168
|
readonly input: Schema.Top | undefined;
|
|
1128
1169
|
readonly id: string | undefined;
|
|
1129
1170
|
/** @internal */
|
|
@@ -1213,7 +1254,9 @@ export declare namespace Machine {
|
|
|
1213
1254
|
* @category utility types
|
|
1214
1255
|
* @since 0.4.0
|
|
1215
1256
|
*/
|
|
1216
|
-
type
|
|
1257
|
+
type EmittedEvents<M extends Any> = M[typeof MachineTypeId]["emittedEvents"];
|
|
1258
|
+
/** @deprecated Use {@link EmittedEvents}. */
|
|
1259
|
+
type Emits<M extends Any> = EmittedEvents<M>;
|
|
1217
1260
|
/**
|
|
1218
1261
|
* Extracts state paths with implemented output handlers.
|
|
1219
1262
|
*
|
|
@@ -1228,11 +1271,15 @@ export declare namespace Machine {
|
|
|
1228
1271
|
* @since 0.4.0
|
|
1229
1272
|
*/
|
|
1230
1273
|
type InputEvents<M extends Any> = M[typeof MachineTypeId]["inputEvents"];
|
|
1231
|
-
/** Extracts the
|
|
1232
|
-
type
|
|
1233
|
-
|
|
1274
|
+
/** Extracts the public input protocol required from an owning actor. */
|
|
1275
|
+
type ParentEvents<M extends Any> = M[typeof MachineTypeId]["parentEvents"];
|
|
1276
|
+
/** Extracts an internal event schema tuple from the complete and public protocols. */
|
|
1277
|
+
type InternalEventSchemas<Events extends ReadonlyArray<TaggedSchema>, InputEvents extends ReadonlyArray<TaggedSchema>> = Events extends readonly [
|
|
1278
|
+
...InputEvents,
|
|
1234
1279
|
...infer Internal extends ReadonlyArray<TaggedSchema>
|
|
1235
|
-
] ? Internal : readonly [];
|
|
1280
|
+
] ? readonly [...Internal] : readonly [];
|
|
1281
|
+
/** Extracts the internal event schema tuple carried by a machine definition. */
|
|
1282
|
+
type InternalEvents<M extends Any> = InternalEventSchemas<Events<M>, InputEvents<M>>;
|
|
1236
1283
|
/**
|
|
1237
1284
|
* Extracts the complete event protocol handled inside a machine.
|
|
1238
1285
|
*
|
|
@@ -1260,34 +1307,83 @@ export declare namespace Machine {
|
|
|
1260
1307
|
readonly [EventConstructionTypeId]: Event;
|
|
1261
1308
|
readonly _tag: Event["_tag"];
|
|
1262
1309
|
}
|
|
1310
|
+
/** Opaque construction returned by {@link emittedEvents}. */
|
|
1311
|
+
interface EmittedEventConstruction<out Event extends {
|
|
1312
|
+
readonly _tag: PropertyKey;
|
|
1313
|
+
}> {
|
|
1314
|
+
readonly [EmittedEventConstructionTypeId]: Event;
|
|
1315
|
+
readonly _tag: Event["_tag"];
|
|
1316
|
+
}
|
|
1263
1317
|
/** A decoded event or a deferred machine-bound construction of that event. */
|
|
1264
1318
|
type EventInput<Event> = Event | (Event extends {
|
|
1265
1319
|
readonly _tag: PropertyKey;
|
|
1266
1320
|
} ? EventConstruction<Event> : never);
|
|
1321
|
+
/** A decoded emitted event or a deferred emitted-event construction. */
|
|
1322
|
+
type EmittedEventInput<Event> = Event | (Event extends {
|
|
1323
|
+
readonly _tag: PropertyKey;
|
|
1324
|
+
} ? EmittedEventConstruction<Event> : never);
|
|
1267
1325
|
/** Event inputs accepted for a schema tuple at machine delivery boundaries. */
|
|
1268
1326
|
type EventInputOf<Events extends ReadonlyArray<TaggedSchema>> = EventInput<EventOf<Events>>;
|
|
1327
|
+
/** Identifies whether an event protocol is accepted publicly or only inside a machine. */
|
|
1328
|
+
type EventProtocolKind = "public" | "internal" | "emitted";
|
|
1269
1329
|
type EventConstructorInput<EventSchema extends TaggedSchema> = Omit<EventSchema["~type.make.in"], "_tag">;
|
|
1270
|
-
type EventConstructor<EventSchema extends TaggedSchema, Tag extends EventSchema["Type"]["_tag"]> = {} extends EventConstructorInput<EventSchema> ? (input?: EventConstructorInput<EventSchema>) => EventConstruction<EventByTag<readonly [EventSchema], Tag>> : (input: EventConstructorInput<EventSchema>) => EventConstruction<EventByTag<readonly [EventSchema], Tag>>;
|
|
1271
|
-
type
|
|
1330
|
+
type EventConstructor<EventSchema extends TaggedSchema, Tag extends EventSchema["Type"]["_tag"], Kind extends EventProtocolKind> = {} extends EventConstructorInput<EventSchema> ? (input?: EventConstructorInput<EventSchema>) => Kind extends "emitted" ? EmittedEventConstruction<EventByTag<readonly [EventSchema], Tag>> : EventConstruction<EventByTag<readonly [EventSchema], Tag>> : (input: EventConstructorInput<EventSchema>) => Kind extends "emitted" ? EmittedEventConstruction<EventByTag<readonly [EventSchema], Tag>> : EventConstruction<EventByTag<readonly [EventSchema], Tag>>;
|
|
1331
|
+
type FiniteEventTag<Tag extends PropertyKey> = string extends Tag ? never : number extends Tag ? never : symbol extends Tag ? never : Tag;
|
|
1332
|
+
type EventConstructorsForSchema<EventSchema extends TaggedSchema, Kind extends EventProtocolKind> = EventSchema extends {
|
|
1272
1333
|
readonly cases: infer Cases extends Readonly<Record<PropertyKey, TaggedSchema>>;
|
|
1273
1334
|
} ? {
|
|
1274
|
-
readonly [Tag in keyof Cases]: Tag extends Cases[Tag]["Type"]["_tag"] ? EventConstructor<Cases[Tag], Tag> : never;
|
|
1335
|
+
readonly [Tag in keyof Cases]: Tag extends Cases[Tag]["Type"]["_tag"] ? EventConstructor<Cases[Tag], Tag, Kind> : never;
|
|
1275
1336
|
} : EventSchema extends {
|
|
1276
1337
|
readonly members: infer Members extends ReadonlyArray<TaggedSchema>;
|
|
1277
|
-
} ? Types.UnionToIntersection<EventConstructorsForSchema<Members[number]>> : {
|
|
1278
|
-
readonly [Tag in EventSchema["Type"]["_tag"]]: EventConstructor<EventSchema, Tag>;
|
|
1338
|
+
} ? Types.UnionToIntersection<EventConstructorsForSchema<Members[number], Kind>> : {
|
|
1339
|
+
readonly [Tag in FiniteEventTag<EventSchema["Type"]["_tag"]>]: EventConstructor<EventSchema, Tag, Kind>;
|
|
1279
1340
|
};
|
|
1280
1341
|
/** Protocol-bound constructors keyed by each configured event tag. */
|
|
1281
|
-
type EventConstructors<Events extends ReadonlyArray<TaggedSchema
|
|
1282
|
-
readonly [Tag in keyof Types.UnionToIntersection<EventConstructorsForSchema<Events[number]>>]: Types.UnionToIntersection<EventConstructorsForSchema<Events[number]>>[Tag];
|
|
1342
|
+
type EventConstructors<Events extends ReadonlyArray<TaggedSchema>, Kind extends EventProtocolKind = "public"> = {
|
|
1343
|
+
readonly [Tag in keyof Types.UnionToIntersection<EventConstructorsForSchema<Events[number], Kind>>]: Types.UnionToIntersection<EventConstructorsForSchema<Events[number], Kind>>[Tag];
|
|
1344
|
+
};
|
|
1345
|
+
/**
|
|
1346
|
+
* A schema-backed event protocol exposing only deferred event constructors.
|
|
1347
|
+
*
|
|
1348
|
+
* The schema tuple is retained opaquely for machine runtime validation and
|
|
1349
|
+
* type inference. It is not exposed as a runtime property.
|
|
1350
|
+
*
|
|
1351
|
+
* @since 0.10.0
|
|
1352
|
+
*/
|
|
1353
|
+
type EventProtocol<Kind extends EventProtocolKind, Schemas extends ReadonlyArray<TaggedSchema>> = EventConstructors<Schemas, Kind> & {
|
|
1354
|
+
readonly [EventProtocolTypeId]: {
|
|
1355
|
+
readonly kind: Kind;
|
|
1356
|
+
readonly schemas: Schemas;
|
|
1357
|
+
};
|
|
1283
1358
|
};
|
|
1359
|
+
namespace EventProtocol {
|
|
1360
|
+
/** An erased event protocol descriptor retaining its kind and schema carrier. */
|
|
1361
|
+
interface Any<Kind extends EventProtocolKind = EventProtocolKind> {
|
|
1362
|
+
readonly [EventProtocolTypeId]: {
|
|
1363
|
+
readonly kind: Kind;
|
|
1364
|
+
readonly schemas: ReadonlyArray<TaggedSchema>;
|
|
1365
|
+
};
|
|
1366
|
+
}
|
|
1367
|
+
}
|
|
1368
|
+
/** A schema or an existing protocol accepted by an event builder. */
|
|
1369
|
+
type EventProtocolInput<Kind extends EventProtocolKind> = TaggedSchema | EventProtocol.Any<Kind>;
|
|
1370
|
+
type EventProtocolInputSchemas<Kind extends EventProtocolKind, Input extends EventProtocolInput<Kind>> = Input extends EventProtocol<Kind, infer Schemas> ? Schemas : Input extends TaggedSchema ? readonly [Input] : readonly [];
|
|
1371
|
+
/** Flattens schema and protocol inputs into one owned schema tuple. */
|
|
1372
|
+
type EventProtocolInputSchemasOf<Kind extends EventProtocolKind, Inputs extends ReadonlyArray<EventProtocolInput<Kind>>> = Inputs extends readonly [
|
|
1373
|
+
infer Head extends EventProtocolInput<Kind>,
|
|
1374
|
+
...infer Tail extends ReadonlyArray<EventProtocolInput<Kind>>
|
|
1375
|
+
] ? readonly [...EventProtocolInputSchemas<Kind, Head>, ...EventProtocolInputSchemasOf<Kind, Tail>] : readonly [];
|
|
1376
|
+
/** @internal Extracts the schema tuple carried opaquely by an event protocol. */
|
|
1377
|
+
type EventProtocolSchemas<Protocol extends EventProtocol.Any> = Protocol[typeof EventProtocolTypeId]["schemas"];
|
|
1284
1378
|
/**
|
|
1285
1379
|
* Extracts the event protocol emitted by a machine.
|
|
1286
1380
|
*
|
|
1287
1381
|
* @category utility types
|
|
1288
1382
|
* @since 0.4.0
|
|
1289
1383
|
*/
|
|
1290
|
-
type
|
|
1384
|
+
type EmittedEvent<M extends Any> = EmittedEventOf<Emits<M>>;
|
|
1385
|
+
/** @deprecated Use {@link EmittedEvent}. */
|
|
1386
|
+
type Emit<M extends Any> = EmittedEvent<M>;
|
|
1291
1387
|
/**
|
|
1292
1388
|
* A schema whose decoded value contains a `_tag` discriminator.
|
|
1293
1389
|
*
|
|
@@ -1860,7 +1956,9 @@ export declare namespace Machine {
|
|
|
1860
1956
|
* @category utility types
|
|
1861
1957
|
* @since 0.4.0
|
|
1862
1958
|
*/
|
|
1863
|
-
type
|
|
1959
|
+
type EmittedEventOf<Emits extends ReadonlyArray<TaggedSchema>> = Emits[number]["Type"];
|
|
1960
|
+
/** @deprecated Use {@link EmittedEventOf}. */
|
|
1961
|
+
type EmitOf<Emits extends ReadonlyArray<TaggedSchema>> = EmittedEventOf<Emits>;
|
|
1864
1962
|
/**
|
|
1865
1963
|
* Event values received by lifecycle callbacks.
|
|
1866
1964
|
*
|
|
@@ -2260,6 +2358,20 @@ export declare namespace Machine {
|
|
|
2260
2358
|
readonly [AncestorStateId in ValuedStateIdentifier<States>]: StateByIdentifier<States, AncestorStateId>;
|
|
2261
2359
|
}>;
|
|
2262
2360
|
}
|
|
2361
|
+
/**
|
|
2362
|
+
* Opaque result returned by an explicitly targetless transition.
|
|
2363
|
+
*
|
|
2364
|
+
* The transition remains handled and retains its queued commands, raised
|
|
2365
|
+
* events, and emitted events, but selects no concrete destination. Declared
|
|
2366
|
+
* `targets` constrain only concrete destinations, so this result is always
|
|
2367
|
+
* permitted from ordinary transition handlers.
|
|
2368
|
+
*
|
|
2369
|
+
* @category models
|
|
2370
|
+
* @since 0.10.0
|
|
2371
|
+
*/
|
|
2372
|
+
interface NoTarget {
|
|
2373
|
+
readonly [Topology.NoTargetTypeId]: typeof Topology.NoTargetTypeId;
|
|
2374
|
+
}
|
|
2263
2375
|
/**
|
|
2264
2376
|
* Transition instruction that restores a history pseudo-state's parent.
|
|
2265
2377
|
*
|
|
@@ -2336,9 +2448,9 @@ export declare namespace Machine {
|
|
|
2336
2448
|
*
|
|
2337
2449
|
* **Details**
|
|
2338
2450
|
*
|
|
2339
|
-
* `
|
|
2340
|
-
*
|
|
2341
|
-
* snapshots for any root.
|
|
2451
|
+
* `none()` handles without selecting a destination, `local` targets the
|
|
2452
|
+
* nearest compound scope for the source state, `branch` targets descendants
|
|
2453
|
+
* of the source root, and `full` builds complete snapshots for any root.
|
|
2342
2454
|
*
|
|
2343
2455
|
* These builders control how the next active configuration is assembled; they
|
|
2344
2456
|
* do not directly control state re-entry. Exit and entry paths are derived
|
|
@@ -2351,6 +2463,17 @@ export declare namespace Machine {
|
|
|
2351
2463
|
* @since 0.4.0
|
|
2352
2464
|
*/
|
|
2353
2465
|
interface TargetBuilder<States extends StateSchemas, Source extends StateNodeIdentifier<States>> {
|
|
2466
|
+
/**
|
|
2467
|
+
* Selects an explicitly targetless transition.
|
|
2468
|
+
*
|
|
2469
|
+
* The event or lifecycle outcome is handled and queued operations are
|
|
2470
|
+
* retained, while the current state configuration remains the transition
|
|
2471
|
+
* result. This remains valid when the handler declares concrete `targets`,
|
|
2472
|
+
* because those paths are an upper bound rather than an exhaustive result.
|
|
2473
|
+
*
|
|
2474
|
+
* @since 0.10.0
|
|
2475
|
+
*/
|
|
2476
|
+
readonly none: () => NoTarget;
|
|
2354
2477
|
/**
|
|
2355
2478
|
* Moves to another state in the same local group. The value of the state
|
|
2356
2479
|
* containing that group, and values in other active branches, are kept.
|
|
@@ -2388,10 +2511,10 @@ export declare namespace Machine {
|
|
|
2388
2511
|
* @category models
|
|
2389
2512
|
* @since 0.4.0
|
|
2390
2513
|
*/
|
|
2391
|
-
interface HandlerContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, EventTag extends TagOf<Events[number]>, E, R> {
|
|
2514
|
+
interface HandlerContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, EventTag extends TagOf<Events[number]>, E, R, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> extends ActorContext<InputEvents, ParentEvents> {
|
|
2392
2515
|
readonly state: StateByIdentifier<States, StateId>;
|
|
2393
|
-
readonly
|
|
2394
|
-
readonly
|
|
2516
|
+
readonly containingState: ParentStateValue<States, StateId>;
|
|
2517
|
+
readonly ancestors: ParentStateValues<States, StateId>;
|
|
2395
2518
|
/** Complete logical configuration captured at the start of this microstep. */
|
|
2396
2519
|
readonly snapshot: Snapshot<States>;
|
|
2397
2520
|
readonly event: EventByTag<Events, EventTag>;
|
|
@@ -2409,10 +2532,10 @@ export declare namespace Machine {
|
|
|
2409
2532
|
* @category models
|
|
2410
2533
|
* @since 0.4.0
|
|
2411
2534
|
*/
|
|
2412
|
-
interface StateActionContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States
|
|
2535
|
+
interface StateActionContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> extends ActorContext<InputEvents, ParentEvents> {
|
|
2413
2536
|
readonly state: StateByIdentifier<States, StateId>;
|
|
2414
|
-
readonly
|
|
2415
|
-
readonly
|
|
2537
|
+
readonly containingState: ParentStateValue<States, StateId>;
|
|
2538
|
+
readonly ancestors: ParentStateValues<States, StateId>;
|
|
2416
2539
|
readonly event: LifecycleEvent<Events>;
|
|
2417
2540
|
}
|
|
2418
2541
|
/**
|
|
@@ -2421,10 +2544,10 @@ export declare namespace Machine {
|
|
|
2421
2544
|
* @category models
|
|
2422
2545
|
* @since 0.4.0
|
|
2423
2546
|
*/
|
|
2424
|
-
interface InvokeContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States
|
|
2547
|
+
interface InvokeContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> extends ActorContext<InputEvents, ParentEvents> {
|
|
2425
2548
|
readonly state: StateByIdentifier<States, StateId>;
|
|
2426
|
-
readonly
|
|
2427
|
-
readonly
|
|
2549
|
+
readonly containingState: ParentStateValue<States, StateId>;
|
|
2550
|
+
readonly ancestors: ParentStateValues<States, StateId>;
|
|
2428
2551
|
readonly event: LifecycleEvent<Events>;
|
|
2429
2552
|
}
|
|
2430
2553
|
/**
|
|
@@ -2433,11 +2556,11 @@ export declare namespace Machine {
|
|
|
2433
2556
|
* @category models
|
|
2434
2557
|
* @since 0.4.0
|
|
2435
2558
|
*/
|
|
2436
|
-
interface InvokeSnapshotContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, State, Error, Output> {
|
|
2559
|
+
interface InvokeSnapshotContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, State, Error, Output, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> extends ActorContext<InputEvents, ParentEvents> {
|
|
2437
2560
|
readonly id: string;
|
|
2438
2561
|
readonly state: StateByIdentifier<States, StateId>;
|
|
2439
|
-
readonly
|
|
2440
|
-
readonly
|
|
2562
|
+
readonly containingState: ParentStateValue<States, StateId>;
|
|
2563
|
+
readonly ancestors: ParentStateValues<States, StateId>;
|
|
2441
2564
|
readonly target: TargetBuilder<States, StateId>;
|
|
2442
2565
|
readonly snapshot: Extract<RuntimeSnapshot<State, Error, Output>, {
|
|
2443
2566
|
readonly status: "active";
|
|
@@ -2449,21 +2572,21 @@ export declare namespace Machine {
|
|
|
2449
2572
|
* @category models
|
|
2450
2573
|
* @since 0.4.0
|
|
2451
2574
|
*/
|
|
2452
|
-
interface InvokeDoneContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, Output> {
|
|
2575
|
+
interface InvokeDoneContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, Output, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> extends ActorContext<InputEvents, ParentEvents> {
|
|
2453
2576
|
readonly id: string;
|
|
2454
2577
|
readonly state: StateByIdentifier<States, StateId>;
|
|
2455
|
-
readonly
|
|
2456
|
-
readonly
|
|
2578
|
+
readonly containingState: ParentStateValue<States, StateId>;
|
|
2579
|
+
readonly ancestors: ParentStateValues<States, StateId>;
|
|
2457
2580
|
readonly snapshot: Snapshot<States>;
|
|
2458
2581
|
readonly target: TargetBuilder<States, StateId>;
|
|
2459
2582
|
readonly output: Output;
|
|
2460
2583
|
}
|
|
2461
2584
|
/** Context passed to an invocation typed-failure transition. */
|
|
2462
|
-
interface InvokeFailureContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, Error> {
|
|
2585
|
+
interface InvokeFailureContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, Error, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> extends ActorContext<InputEvents, ParentEvents> {
|
|
2463
2586
|
readonly id: string;
|
|
2464
2587
|
readonly state: StateByIdentifier<States, StateId>;
|
|
2465
|
-
readonly
|
|
2466
|
-
readonly
|
|
2588
|
+
readonly containingState: ParentStateValue<States, StateId>;
|
|
2589
|
+
readonly ancestors: ParentStateValues<States, StateId>;
|
|
2467
2590
|
readonly snapshot: Snapshot<States>;
|
|
2468
2591
|
readonly target: TargetBuilder<States, StateId>;
|
|
2469
2592
|
readonly error: Error;
|
|
@@ -2474,10 +2597,10 @@ export declare namespace Machine {
|
|
|
2474
2597
|
* @category models
|
|
2475
2598
|
* @since 0.4.0
|
|
2476
2599
|
*/
|
|
2477
|
-
interface AlwaysContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States
|
|
2600
|
+
interface AlwaysContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> extends ActorContext<InputEvents, ParentEvents> {
|
|
2478
2601
|
readonly state: StateByIdentifier<States, StateId>;
|
|
2479
|
-
readonly
|
|
2480
|
-
readonly
|
|
2602
|
+
readonly containingState: ParentStateValue<States, StateId>;
|
|
2603
|
+
readonly ancestors: ParentStateValues<States, StateId>;
|
|
2481
2604
|
/** Complete logical configuration captured at the start of this microstep. */
|
|
2482
2605
|
readonly snapshot: Snapshot<States>;
|
|
2483
2606
|
readonly event: LifecycleEvent<Events>;
|
|
@@ -2496,10 +2619,10 @@ export declare namespace Machine {
|
|
|
2496
2619
|
* @category models
|
|
2497
2620
|
* @since 0.4.0
|
|
2498
2621
|
*/
|
|
2499
|
-
interface DoneContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States
|
|
2622
|
+
interface DoneContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> extends ActorContext<InputEvents, ParentEvents> {
|
|
2500
2623
|
readonly state: StateByIdentifier<States, StateId>;
|
|
2501
|
-
readonly
|
|
2502
|
-
readonly
|
|
2624
|
+
readonly containingState: ParentStateValue<States, StateId>;
|
|
2625
|
+
readonly ancestors: ParentStateValues<States, StateId>;
|
|
2503
2626
|
/** Complete logical configuration captured at the start of this microstep. */
|
|
2504
2627
|
readonly snapshot: Snapshot<States>;
|
|
2505
2628
|
readonly event: LifecycleEvent<Events>;
|
|
@@ -2514,9 +2637,9 @@ export declare namespace Machine {
|
|
|
2514
2637
|
readonly target: TargetBuilder<States, StateId>;
|
|
2515
2638
|
}
|
|
2516
2639
|
/** Context passed to a transient choice resolver. There is no `state` value. */
|
|
2517
|
-
interface ChoiceContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, ChoiceId extends ChoiceIdentifier<States
|
|
2518
|
-
readonly
|
|
2519
|
-
readonly
|
|
2640
|
+
interface ChoiceContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, ChoiceId extends ChoiceIdentifier<States>, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> extends ActorContext<InputEvents, ParentEvents> {
|
|
2641
|
+
readonly containingState: StateByIdentifier<States, Extract<ImmediateParentStateIdentifier<ChoiceId>, StateIdentifier<States>>>;
|
|
2642
|
+
readonly ancestors: {
|
|
2520
2643
|
readonly [Parent in Extract<ParentStateIdentifier<ChoiceId>, ValuedStateIdentifier<States>>]: StateByIdentifier<States, Parent>;
|
|
2521
2644
|
};
|
|
2522
2645
|
readonly event: LifecycleEvent<Events>;
|
|
@@ -2530,8 +2653,8 @@ export declare namespace Machine {
|
|
|
2530
2653
|
*/
|
|
2531
2654
|
interface FinalOutputContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>> {
|
|
2532
2655
|
readonly state: StateByIdentifier<States, StateId>;
|
|
2533
|
-
readonly
|
|
2534
|
-
readonly
|
|
2656
|
+
readonly containingState: ParentStateValue<States, StateId>;
|
|
2657
|
+
readonly ancestors: ParentStateValues<States, StateId>;
|
|
2535
2658
|
readonly event: LifecycleEvent<Events>;
|
|
2536
2659
|
}
|
|
2537
2660
|
/**
|
|
@@ -2554,8 +2677,8 @@ export declare namespace Machine {
|
|
|
2554
2677
|
*/
|
|
2555
2678
|
interface ParallelOutputContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>> {
|
|
2556
2679
|
readonly state: StateByIdentifier<States, StateId>;
|
|
2557
|
-
readonly
|
|
2558
|
-
readonly
|
|
2680
|
+
readonly containingState: ParentStateValue<States, StateId>;
|
|
2681
|
+
readonly ancestors: ParentStateValues<States, StateId>;
|
|
2559
2682
|
readonly event: LifecycleEvent<Events>;
|
|
2560
2683
|
readonly outputs: ParallelOutputRegions<States, StateId>;
|
|
2561
2684
|
}
|
|
@@ -2582,14 +2705,15 @@ export declare namespace Machine {
|
|
|
2582
2705
|
*
|
|
2583
2706
|
* **Details**
|
|
2584
2707
|
*
|
|
2585
|
-
* Handlers return snapshots for complete state replacement
|
|
2586
|
-
* results for path-safe partial transitions
|
|
2587
|
-
*
|
|
2708
|
+
* Handlers return snapshots for complete state replacement, target builder
|
|
2709
|
+
* results for path-safe partial transitions, or `target.none()` for an
|
|
2710
|
+
* explicitly targetless transition. Raw decoded state values and `void` are
|
|
2711
|
+
* not accepted at transition boundaries.
|
|
2588
2712
|
*
|
|
2589
2713
|
* @category utility types
|
|
2590
2714
|
* @since 0.4.0
|
|
2591
2715
|
*/
|
|
2592
|
-
type HandlerResult<States extends StateSchemas, E, R> = Snapshot<States> | Target<States, StateIdentifier<States>> | HistoryTarget<States, HistoryIdentifier<States>> | ChoiceTarget<States, ChoiceIdentifier<States>> | StateConstruction<Snapshot<States> | Target<States, StateIdentifier<States>> | HistoryTarget<States, HistoryIdentifier<States>> | ChoiceTarget<States, ChoiceIdentifier<States>>> |
|
|
2716
|
+
type HandlerResult<States extends StateSchemas, E, R> = Snapshot<States> | Target<States, StateIdentifier<States>> | HistoryTarget<States, HistoryIdentifier<States>> | ChoiceTarget<States, ChoiceIdentifier<States>> | StateConstruction<Snapshot<States> | Target<States, StateIdentifier<States>> | HistoryTarget<States, HistoryIdentifier<States>> | ChoiceTarget<States, ChoiceIdentifier<States>>> | NoTarget;
|
|
2593
2717
|
/** A choice resolver must always select a typed target synchronously. */
|
|
2594
2718
|
type ChoiceResult<States extends StateSchemas, E, R> = Snapshot<States> | Target<States, StateIdentifier<States>> | HistoryTarget<States, HistoryIdentifier<States>> | ChoiceTarget<States, ChoiceIdentifier<States>> | StateConstruction<Snapshot<States> | Target<States, StateIdentifier<States>> | HistoryTarget<States, HistoryIdentifier<States>> | ChoiceTarget<States, ChoiceIdentifier<States>>>;
|
|
2595
2719
|
/**
|
|
@@ -2748,6 +2872,14 @@ export declare namespace Machine {
|
|
|
2748
2872
|
} ? Emitted : Invoke extends {
|
|
2749
2873
|
readonly child: ChildMachine<string, infer M>;
|
|
2750
2874
|
} ? Emit<M> : never;
|
|
2875
|
+
/** Public parent inputs required by an invoked child machine. */
|
|
2876
|
+
type InvokeParentEvents<Invoke> = Invoke extends {
|
|
2877
|
+
readonly [InvokeTypeId]: {
|
|
2878
|
+
readonly parentEvents: Types.Covariant<infer ParentEvent>;
|
|
2879
|
+
};
|
|
2880
|
+
} ? ParentEvent : IsAny<Invoke> extends true ? never : Invoke extends {
|
|
2881
|
+
readonly child: ChildMachine<string, infer M>;
|
|
2882
|
+
} ? EventOf<ParentEvents<M>> : never;
|
|
2751
2883
|
/** Extracts transition results returned by invocation lifecycle handlers. */
|
|
2752
2884
|
type InvokeOutcomeReturn<Invoke> = Invoke extends unknown ? (Invoke extends {
|
|
2753
2885
|
readonly onDone?: infer Handler;
|
|
@@ -2819,13 +2951,14 @@ export declare namespace Machine {
|
|
|
2819
2951
|
readonly "~effect/Machine/InvokeOwner"?: Types.Covariant<readonly [States, Events, Emits, StateId]>;
|
|
2820
2952
|
}
|
|
2821
2953
|
/** Type evidence retained by {@link invoke} without affecting runtime data. */
|
|
2822
|
-
interface InvokeTyped<Output, Error, Requirements, InitialError, Emits = never> {
|
|
2954
|
+
interface InvokeTyped<Output, Error, Requirements, InitialError, Emits = never, ParentEvent = never> {
|
|
2823
2955
|
readonly [InvokeTypeId]: {
|
|
2824
2956
|
readonly output: Types.Covariant<Output>;
|
|
2825
2957
|
readonly error: Types.Covariant<Error>;
|
|
2826
2958
|
readonly requirements: Types.Covariant<Requirements>;
|
|
2827
2959
|
readonly initialError: Types.Covariant<InitialError>;
|
|
2828
2960
|
readonly emits: Types.Covariant<Emits>;
|
|
2961
|
+
readonly parentEvents: Types.Covariant<ParentEvent>;
|
|
2829
2962
|
};
|
|
2830
2963
|
}
|
|
2831
2964
|
type InvokeConfig<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>> = InvokeOwned<States, Events, Emits, StateId> & ({
|
|
@@ -2987,33 +3120,33 @@ export declare namespace Machine {
|
|
|
2987
3120
|
* @category models
|
|
2988
3121
|
* @since 0.4.0
|
|
2989
3122
|
*/
|
|
2990
|
-
type ActiveStateConfig<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, E, R> = {
|
|
2991
|
-
readonly entry?: (context: StateActionContext<States, Events, Emits, StateId>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => StateActionResult<any, any>;
|
|
2992
|
-
readonly exit?: (context: StateActionContext<States, Events, Emits, StateId>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => StateActionResult<any, any>;
|
|
3123
|
+
type ActiveStateConfig<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, E, R, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> = {
|
|
3124
|
+
readonly entry?: (context: StateActionContext<States, Events, Emits, StateId, InputEvents, ParentEvents>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => StateActionResult<any, any>;
|
|
3125
|
+
readonly exit?: (context: StateActionContext<States, Events, Emits, StateId, InputEvents, ParentEvents>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => StateActionResult<any, any>;
|
|
2993
3126
|
readonly invoke?: InvokeDefinition<States, Events, Emits, StateId>;
|
|
2994
|
-
readonly always?: ((context: AlwaysContext<States, Events, Emits, StateId>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => HandlerResult<States, any, any>) | {
|
|
3127
|
+
readonly always?: ((context: AlwaysContext<States, Events, Emits, StateId, InputEvents, ParentEvents>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => HandlerResult<States, any, any>) | {
|
|
2995
3128
|
/** Statically declared upper bound of possible target paths. */
|
|
2996
3129
|
readonly targets?: ReadonlyArray<StateNodeIdentifier<States>>;
|
|
2997
|
-
readonly transition: (context: AlwaysContext<States, Events, Emits, StateId>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => HandlerResult<States, any, any>;
|
|
3130
|
+
readonly transition: (context: AlwaysContext<States, Events, Emits, StateId, InputEvents, ParentEvents>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => HandlerResult<States, any, any>;
|
|
2998
3131
|
};
|
|
2999
|
-
readonly onDone?: ((context: DoneContext<States, Events, Emits, StateId>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => HandlerResult<States, any, any>) | {
|
|
3132
|
+
readonly onDone?: ((context: DoneContext<States, Events, Emits, StateId, InputEvents, ParentEvents>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => HandlerResult<States, any, any>) | {
|
|
3000
3133
|
/** Statically declared upper bound of possible target paths. */
|
|
3001
3134
|
readonly targets?: ReadonlyArray<StateNodeIdentifier<States>>;
|
|
3002
|
-
readonly transition: (context: DoneContext<States, Events, Emits, StateId>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => HandlerResult<States, any, any>;
|
|
3135
|
+
readonly transition: (context: DoneContext<States, Events, Emits, StateId, InputEvents, ParentEvents>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => HandlerResult<States, any, any>;
|
|
3003
3136
|
};
|
|
3004
3137
|
readonly on?: {
|
|
3005
|
-
readonly [EventTag in TagOf<Events[number]>]?: ((context: HandlerContext<States, Events, Emits, StateId, EventTag, E, R>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => HandlerResult<States, any, any>) | {
|
|
3138
|
+
readonly [EventTag in TagOf<Events[number]>]?: ((context: HandlerContext<States, Events, Emits, StateId, EventTag, E, R, InputEvents, ParentEvents>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => HandlerResult<States, any, any>) | {
|
|
3006
3139
|
readonly reenter?: boolean;
|
|
3007
3140
|
/**
|
|
3008
3141
|
* Upper bound of state or history paths this handler may target.
|
|
3009
|
-
* Returning `
|
|
3142
|
+
* Returning `target.none()` is always permitted. Declaring a parent state also
|
|
3010
3143
|
* permits concrete descendant targets below it.
|
|
3011
3144
|
*/
|
|
3012
3145
|
readonly targets?: ReadonlyArray<StateNodeIdentifier<States>>;
|
|
3013
|
-
readonly transition: (context: HandlerContext<States, Events, Emits, StateId, EventTag, E, R>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => HandlerResult<States, any, any>;
|
|
3146
|
+
readonly transition: (context: HandlerContext<States, Events, Emits, StateId, EventTag, E, R, InputEvents, ParentEvents>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => HandlerResult<States, any, any>;
|
|
3014
3147
|
};
|
|
3015
3148
|
};
|
|
3016
|
-
readonly initial?: StateInitialHandler<States, Events, Emits, StateId>;
|
|
3149
|
+
readonly initial?: StateInitialHandler<States, Events, Emits, StateId, InputEvents, ParentEvents>;
|
|
3017
3150
|
} & ActiveOutputHandlerConfig<States, Events, StateId>;
|
|
3018
3151
|
/** Values supplied when a statechart implicitly enters a state's initial children. */
|
|
3019
3152
|
type StateInitialValue<States extends StateSchemas, StateId extends StateIdentifier<States>> = NodeByIdentifier<States, StateId> extends infer Node ? Node extends {
|
|
@@ -3026,14 +3159,14 @@ export declare namespace Machine {
|
|
|
3026
3159
|
readonly initial: infer Initial;
|
|
3027
3160
|
} ? Initial extends ActiveStateKey<Children> ? NodeSchema<Children[Initial]> extends never ? never : NodeValue<Children[Initial]> : never : never : never;
|
|
3028
3161
|
/** Context passed to an implicit child-state initializer. */
|
|
3029
|
-
type StateInitialContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States
|
|
3162
|
+
type StateInitialContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> = StateActionContext<States, Events, Emits, StateId, InputEvents, ParentEvents>;
|
|
3030
3163
|
/** Initial child value implementation for a compound or parallel state. */
|
|
3031
|
-
type StateInitialHandler<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States
|
|
3164
|
+
type StateInitialHandler<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> = (context: StateInitialContext<States, Events, Emits, StateId, InputEvents, ParentEvents>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => StateInitialValue<States, StateId>;
|
|
3032
3165
|
/** Context used only when a history node has no previously captured record. */
|
|
3033
3166
|
interface HistoryDefaultContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, ParentId extends StateIdentifier<States>> {
|
|
3034
3167
|
readonly event: LifecycleEvent<Events>;
|
|
3035
3168
|
readonly target: HistoryDefaultTargetBuilder<States, ParentId>;
|
|
3036
|
-
readonly
|
|
3169
|
+
readonly owner: ParentId;
|
|
3037
3170
|
}
|
|
3038
3171
|
/**
|
|
3039
3172
|
* Typed fallback evaluated when a history node has no record yet.
|
|
@@ -3050,11 +3183,11 @@ export declare namespace Machine {
|
|
|
3050
3183
|
};
|
|
3051
3184
|
};
|
|
3052
3185
|
/** Required implementation for a choice pseudo-state. */
|
|
3053
|
-
interface ChoiceStateConfig<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, ChoiceId extends ChoiceIdentifier<States
|
|
3186
|
+
interface ChoiceStateConfig<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, ChoiceId extends ChoiceIdentifier<States>, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> {
|
|
3054
3187
|
readonly choice: {
|
|
3055
3188
|
/** Statically inspectable upper bound of every possible target. */
|
|
3056
3189
|
readonly targets: readonly [StateNodeIdentifier<States>, ...ReadonlyArray<StateNodeIdentifier<States>>];
|
|
3057
|
-
readonly transition: (context: ChoiceContext<States, Events, Emits, ChoiceId>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => ChoiceResult<States, any, any>;
|
|
3190
|
+
readonly transition: (context: ChoiceContext<States, Events, Emits, ChoiceId, InputEvents, ParentEvents>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => ChoiceResult<States, any, any>;
|
|
3058
3191
|
};
|
|
3059
3192
|
readonly entry?: never;
|
|
3060
3193
|
readonly exit?: never;
|
|
@@ -3071,8 +3204,8 @@ export declare namespace Machine {
|
|
|
3071
3204
|
* @category models
|
|
3072
3205
|
* @since 0.4.0
|
|
3073
3206
|
*/
|
|
3074
|
-
type FinalStateConfig<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States
|
|
3075
|
-
readonly entry?: (context: StateActionContext<States, Events, Emits, StateId>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => StateActionResult<any, any>;
|
|
3207
|
+
type FinalStateConfig<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> = {
|
|
3208
|
+
readonly entry?: (context: StateActionContext<States, Events, Emits, StateId, InputEvents, ParentEvents>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => StateActionResult<any, any>;
|
|
3076
3209
|
readonly exit?: never;
|
|
3077
3210
|
readonly always?: never;
|
|
3078
3211
|
readonly onDone?: never;
|
|
@@ -3084,10 +3217,10 @@ export declare namespace Machine {
|
|
|
3084
3217
|
* @category models
|
|
3085
3218
|
* @since 0.4.0
|
|
3086
3219
|
*/
|
|
3087
|
-
type HandlerConfig<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, E, R> = NodeByIdentifier<States, StateId> extends {
|
|
3220
|
+
type HandlerConfig<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, E, R, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> = NodeByIdentifier<States, StateId> extends {
|
|
3088
3221
|
readonly type: "final";
|
|
3089
|
-
} ? FinalStateConfig<States, Events, Emits, StateId> : ActiveStateConfig<States, Events, Emits, StateId, E, R>;
|
|
3090
|
-
type HandlerNodeConfig<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Path extends StateNodeIdentifier<States>, E, R
|
|
3222
|
+
} ? FinalStateConfig<States, Events, Emits, StateId, InputEvents, ParentEvents> : ActiveStateConfig<States, Events, Emits, StateId, E, R, InputEvents, ParentEvents>;
|
|
3223
|
+
type HandlerNodeConfig<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Path extends StateNodeIdentifier<States>, E, R, InputEvents extends ReadonlyArray<TaggedSchema>, ParentEvents extends ReadonlyArray<TaggedSchema>> = Path extends ChoiceIdentifier<States> ? ChoiceStateConfig<States, Events, Emits, Path, InputEvents, ParentEvents> : Path extends StateIdentifier<States> ? HandlerConfig<States, Events, Emits, Path, E, R, InputEvents, ParentEvents> : never;
|
|
3091
3224
|
type HandlerChildren<Node> = Node extends {
|
|
3092
3225
|
readonly states: infer Children extends StateSchemas;
|
|
3093
3226
|
} ? Children : never;
|
|
@@ -3115,21 +3248,21 @@ export declare namespace Machine {
|
|
|
3115
3248
|
} : {
|
|
3116
3249
|
readonly [Key in Path]?: Validation;
|
|
3117
3250
|
};
|
|
3118
|
-
type HandlerNode<AllStates extends StateSchemas, Node, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, E, R, StateId extends StateNodeIdentifier<AllStates>> = HandlerNodeConfig<AllStates, Events, Emits, StateId, E, R> & (StateId extends ChoiceIdentifier<AllStates> ? {
|
|
3251
|
+
type HandlerNode<AllStates extends StateSchemas, Node, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, E, R, InputEvents extends ReadonlyArray<TaggedSchema>, ParentEvents extends ReadonlyArray<TaggedSchema>, StateId extends StateNodeIdentifier<AllStates>> = HandlerNodeConfig<AllStates, Events, Emits, StateId, E, R, InputEvents, ParentEvents> & (StateId extends ChoiceIdentifier<AllStates> ? {
|
|
3119
3252
|
readonly states?: never;
|
|
3120
3253
|
readonly history?: never;
|
|
3121
3254
|
} : HandlerChildren<Node> extends infer Children extends StateSchemas ? [Children] extends [never] ? {
|
|
3122
3255
|
readonly states?: never;
|
|
3123
3256
|
readonly history?: never;
|
|
3124
3257
|
} : {
|
|
3125
|
-
readonly states?: HandlerTree<AllStates, Children, Events, Emits, E, R, Extract<StateId, StateIdentifier<AllStates>>>;
|
|
3258
|
+
readonly states?: HandlerTree<AllStates, Children, Events, Emits, E, R, InputEvents, ParentEvents, Extract<StateId, StateIdentifier<AllStates>>>;
|
|
3126
3259
|
readonly history?: HistoryDefaultConfig<AllStates, Events, Emits, Extract<StateId, StateIdentifier<AllStates>>, Children>;
|
|
3127
3260
|
} : {
|
|
3128
3261
|
readonly states?: never;
|
|
3129
3262
|
readonly history?: never;
|
|
3130
3263
|
});
|
|
3131
|
-
type HandlerTree<AllStates extends StateSchemas, States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, E, R, Prefix extends string> = {
|
|
3132
|
-
readonly [Key in ActiveStateKey<States> | ChoiceStateKey<States>]?: HandlerNode<AllStates, States[Key], Events, Emits, E, R, HandlerNodeId<AllStates, JoinPath<Prefix, Key>>>;
|
|
3264
|
+
type HandlerTree<AllStates extends StateSchemas, States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, E, R, InputEvents extends ReadonlyArray<TaggedSchema>, ParentEvents extends ReadonlyArray<TaggedSchema>, Prefix extends string> = {
|
|
3265
|
+
readonly [Key in ActiveStateKey<States> | ChoiceStateKey<States>]?: HandlerNode<AllStates, States[Key], Events, Emits, E, R, InputEvents, ParentEvents, HandlerNodeId<AllStates, JoinPath<Prefix, Key>>>;
|
|
3133
3266
|
};
|
|
3134
3267
|
type HandlerNodeConfigKey = "always" | "choice" | "entry" | "exit" | "history" | "initial" | "invoke" | "on" | "onDone" | "output" | "states";
|
|
3135
3268
|
type HandlerValidationError<Message extends string, Path extends string, Detail = unknown> = {
|
|
@@ -3210,7 +3343,7 @@ export declare namespace Machine {
|
|
|
3210
3343
|
] extends [never] ? unknown : {
|
|
3211
3344
|
readonly output: HandlerValidationError<"Handler config is missing a region output implementation required by parallel output", StateId, Exclude<RequiredParallelOutputStates<AllStates, StateId>, AvailableOutputStates>>;
|
|
3212
3345
|
} : unknown : unknown);
|
|
3213
|
-
type HandlerNodeValidation<AllStates extends StateSchemas, Node, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateNodeIdentifier<AllStates>, Config, AvailableOutputStates extends StateIdentifier<AllStates>> = StateId extends ChoiceIdentifier<AllStates> ? HandlerChoiceUnknownConfigKeyValidation<StateId, Config> & HandlerChoiceTargetValidation<StateId, Config> & HandlerRuntimeValidation<Events, Emits, StateId, Config> : StateId extends StateIdentifier<AllStates> ? HandlerUnknownConfigKeyValidation<StateId, Config> & HandlerOnKeyValidation<Events, StateId, Config> & HandlerOnTargetValidation<StateId, Config> & HandlerDirectTargetValidation<StateId, Config, "always"> & HandlerDirectTargetValidation<StateId, Config, "onDone"> &
|
|
3346
|
+
type HandlerNodeValidation<AllStates extends StateSchemas, Node, Events extends ReadonlyArray<TaggedSchema>, InputEvents extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateNodeIdentifier<AllStates>, Config, AvailableOutputStates extends StateIdentifier<AllStates>> = StateId extends ChoiceIdentifier<AllStates> ? HandlerChoiceUnknownConfigKeyValidation<StateId, Config> & HandlerChoiceTargetValidation<StateId, Config> & HandlerRuntimeValidation<Events, Emits, StateId, Config> : StateId extends StateIdentifier<AllStates> ? HandlerUnknownConfigKeyValidation<StateId, Config> & HandlerOnKeyValidation<Events, StateId, Config> & HandlerOnTargetValidation<StateId, Config> & HandlerDirectTargetValidation<StateId, Config, "always"> & HandlerDirectTargetValidation<StateId, Config, "onDone"> & HandlerInvokeParentEventsValidation<InputEvents, StateId, Config> & HandlerChildrenValidation<Node, StateId, Config> & HandlerOutputRequirementValidation<AllStates, StateId, AvailableOutputStates, Config> & HandlerRuntimeValidation<Events, Emits, StateId, Config> : unknown;
|
|
3214
3347
|
type HandlerChoiceUnknownConfigKeyValidation<StateId extends string, Config, UnknownKeys extends string = Exclude<Extract<keyof Config, string>, "choice">> = [UnknownKeys] extends [never] ? unknown : {
|
|
3215
3348
|
readonly [Key in UnknownKeys]: HandlerValidationError<"Choice handler config contains an invalid key", StateId, Key>;
|
|
3216
3349
|
};
|
|
@@ -3219,13 +3352,13 @@ export declare namespace Machine {
|
|
|
3219
3352
|
} ? [UndeclaredTransitionTarget<Choice>] extends [never] ? unknown : {
|
|
3220
3353
|
readonly choice: HandlerValidationError<"Choice resolver returns a target not listed in targets", StateId, UndeclaredTransitionTarget<Choice>>;
|
|
3221
3354
|
} : unknown;
|
|
3222
|
-
type
|
|
3223
|
-
readonly invoke: HandlerValidationError<"Invoked child
|
|
3355
|
+
type HandlerInvokeParentEventsValidation<Events extends ReadonlyArray<TaggedSchema>, StateId extends string, Config> = [InvokeReturn<Config>] extends [never] ? unknown : [Exclude<InvokeParentEvents<InvokeReturn<Config>>, EventOf<Events>>] extends [never] ? unknown : {
|
|
3356
|
+
readonly invoke: HandlerValidationError<"Invoked child expects parent events not accepted by this machine", StateId, Exclude<InvokeParentEvents<InvokeReturn<Config>>, EventOf<Events>>>;
|
|
3224
3357
|
};
|
|
3225
3358
|
type HandlerRuntimeValidation<Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends string, Config, Incompatible = IncompatibleRuntime<ConfigServices<HandlerConfigPart<Config>>, EventOf<Events>, EmitOf<Emits>>> = [Incompatible] extends [never] ? unknown : HandlerValidationError<"Handler config requires an incompatible machine runtime", StateId, Incompatible>;
|
|
3226
|
-
type HandlerNodeValidationAtPath<AllStates extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Config, AvailableOutputStates extends StateIdentifier<AllStates>, StateId extends StateNodeIdentifier<AllStates>, NodeConfig = HandlerConfigAtPath<Config, StateId>> = [NodeConfig] extends [never] ? never : HandlerNodeValidation<AllStates, HandlerNodeByPath<AllStates, StateId>, Events, Emits, StateId, NodeConfig, AvailableOutputStates> extends infer Validation ? unknown extends Validation ? never : HandlerValidationAtPath<StateId, Validation> : never;
|
|
3227
|
-
type HandlerTreeNodeValidations<AllStates extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Config, AvailableOutputStates extends StateIdentifier<AllStates>> = Types.UnionToIntersection<StateNodeIdentifier<AllStates> extends infer StateId extends StateNodeIdentifier<AllStates> ? StateId extends StateNodeIdentifier<AllStates> ? HandlerNodeValidationAtPath<AllStates, Events, Emits, Config, AvailableOutputStates, StateId> : never : never>;
|
|
3228
|
-
type HandlerTreeValidation<AllStates extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Config, AvailableOutputStates extends StateIdentifier<AllStates>> = HandlerUnknownStateKeyValidation<AllStates, "", Config> & HandlerTreeNodeValidations<AllStates, Events, Emits, Config, AvailableOutputStates>;
|
|
3359
|
+
type HandlerNodeValidationAtPath<AllStates extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, InputEvents extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Config, AvailableOutputStates extends StateIdentifier<AllStates>, StateId extends StateNodeIdentifier<AllStates>, NodeConfig = HandlerConfigAtPath<Config, StateId>> = [NodeConfig] extends [never] ? never : HandlerNodeValidation<AllStates, HandlerNodeByPath<AllStates, StateId>, Events, InputEvents, Emits, StateId, NodeConfig, AvailableOutputStates> extends infer Validation ? unknown extends Validation ? never : HandlerValidationAtPath<StateId, Validation> : never;
|
|
3360
|
+
type HandlerTreeNodeValidations<AllStates extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, InputEvents extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Config, AvailableOutputStates extends StateIdentifier<AllStates>> = Types.UnionToIntersection<StateNodeIdentifier<AllStates> extends infer StateId extends StateNodeIdentifier<AllStates> ? StateId extends StateNodeIdentifier<AllStates> ? HandlerNodeValidationAtPath<AllStates, Events, InputEvents, Emits, Config, AvailableOutputStates, StateId> : never : never>;
|
|
3361
|
+
type HandlerTreeValidation<AllStates extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, InputEvents extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Config, AvailableOutputStates extends StateIdentifier<AllStates>> = HandlerUnknownStateKeyValidation<AllStates, "", Config> & HandlerTreeNodeValidations<AllStates, Events, InputEvents, Emits, Config, AvailableOutputStates>;
|
|
3229
3362
|
type HandlerHasRequiredInitial<AllStates extends StateSchemas, StateId extends StateIdentifier<AllStates>, Config> = StateId extends RequiredHistoryInitializers<AllStates> ? "initial" extends keyof Config ? true : false : true;
|
|
3230
3363
|
type HandlerHasRequiredHistoryDefaults<Node, Config> = Node extends {
|
|
3231
3364
|
readonly states: infer Children extends StateSchemas;
|
|
@@ -3250,15 +3383,15 @@ export declare namespace Machine {
|
|
|
3250
3383
|
readonly outputState: StateId extends StateIdentifier<AllStates> ? HandlerOutputStates<AllStates, StateId, HandlerConfigPart<NodeConfig>> : never;
|
|
3251
3384
|
};
|
|
3252
3385
|
type HandlerTreeEvidence<AllStates extends StateSchemas, Config> = StateNodeIdentifier<AllStates> extends infer StateId extends StateNodeIdentifier<AllStates> ? StateId extends StateNodeIdentifier<AllStates> ? HandlerNodeEvidence<AllStates, Config, StateId> : never : never;
|
|
3253
|
-
type HandleTreeResult<AllStates extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Input extends Schema.Top, UnhandledStates extends StateIdentifier<AllStates>, E, R, InitialE, InitialR, FinalStates extends StateIdentifier<AllStates>, Output, OutputStates extends StateIdentifier<AllStates>, InputEvents extends ReadonlyArray<TaggedSchema>, Config> = Machine<AllStates, Events, Input, Exclude<UnhandledStates, HandlerTreeEvidence<AllStates, Config>["stateId"]>, E | HandlerTreeEvidence<AllStates, Config>["error"], ExcludeCompatibleRuntime<R | HandlerTreeEvidence<AllStates, Config>["services"], EventOf<Events>, EmitOf<Emits>>, InitialE, InitialR, FinalStates, Output, Emits, OutputStates | Extract<HandlerTreeEvidence<AllStates, Config>["outputState"], StateIdentifier<AllStates>>, InputEvents>;
|
|
3386
|
+
type HandleTreeResult<AllStates extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Input extends Schema.Top, UnhandledStates extends StateIdentifier<AllStates>, E, R, InitialE, InitialR, FinalStates extends StateIdentifier<AllStates>, Output, OutputStates extends StateIdentifier<AllStates>, InputEvents extends ReadonlyArray<TaggedSchema>, ParentEvents extends ReadonlyArray<TaggedSchema>, Config> = Machine<AllStates, Events, Input, Exclude<UnhandledStates, HandlerTreeEvidence<AllStates, Config>["stateId"]>, E | HandlerTreeEvidence<AllStates, Config>["error"], ExcludeCompatibleRuntime<R | HandlerTreeEvidence<AllStates, Config>["services"], EventOf<Events>, EmitOf<Emits>>, InitialE, InitialR, FinalStates, Output, Emits, OutputStates | Extract<HandlerTreeEvidence<AllStates, Config>["outputState"], StateIdentifier<AllStates>>, InputEvents, ParentEvents>;
|
|
3254
3387
|
/**
|
|
3255
3388
|
* Adds state handlers from a root state object.
|
|
3256
3389
|
*
|
|
3257
3390
|
* @category combinators
|
|
3258
3391
|
* @since 0.4.0
|
|
3259
3392
|
*/
|
|
3260
|
-
interface Handler<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Input extends Schema.Top, UnhandledStates extends StateIdentifier<States>, E, R, InitialE, InitialR, FinalStates extends StateIdentifier<States>, Output, OutputStates extends StateIdentifier<States>, InputEvents extends ReadonlyArray<TaggedSchema>> {
|
|
3261
|
-
<const Config extends HandlerTree<States, States, Events, Emits, E, R, "">>(config: Config & HandlerInvokeContexts<States, Events, Emits, NoInfer<Config>> & HandlerTreeValidation<States, Events, Emits, NoInfer<Config>, OutputStates | Extract<HandlerTreeEvidence<States, NoInfer<Config>>["outputState"], StateIdentifier<States>>>): HandleTreeResult<States, Events, Emits, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, OutputStates, InputEvents, Config>;
|
|
3393
|
+
interface Handler<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Input extends Schema.Top, UnhandledStates extends StateIdentifier<States>, E, R, InitialE, InitialR, FinalStates extends StateIdentifier<States>, Output, OutputStates extends StateIdentifier<States>, InputEvents extends ReadonlyArray<TaggedSchema>, ParentEvents extends ReadonlyArray<TaggedSchema>> {
|
|
3394
|
+
<const Config extends HandlerTree<States, States, Events, Emits, E, R, InputEvents, ParentEvents, "">>(config: Config & HandlerInvokeContexts<States, Events, Emits, NoInfer<Config>> & HandlerTreeValidation<States, Events, InputEvents, Emits, NoInfer<Config>, OutputStates | Extract<HandlerTreeEvidence<States, NoInfer<Config>>["outputState"], StateIdentifier<States>>>): HandleTreeResult<States, Events, Emits, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, OutputStates, InputEvents, ParentEvents, Config>;
|
|
3262
3395
|
}
|
|
3263
3396
|
/**
|
|
3264
3397
|
* Any state config.
|
|
@@ -3321,7 +3454,7 @@ export declare const isMachine: (u: unknown) => u is Machine.Any;
|
|
|
3321
3454
|
* @category guards
|
|
3322
3455
|
* @since 0.4.0
|
|
3323
3456
|
*/
|
|
3324
|
-
export declare const isFinal: <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, const Input extends Schema.Top = typeof Schema.Void, UnhandledStates extends Machine.StateIdentifier<States> = Machine.StateIdentifier<States>, E = never, R = never, InitialE = never, InitialR = never, FinalStates extends Machine.StateIdentifier<States> = never, Output = never, OutputStates extends Machine.StateIdentifier<States> = never, InputEvents extends ReadonlyArray<Machine.TaggedSchema> = Events>(machine: Machine<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents>, state: Machine.Snapshot<States>) => state is Machine.SnapshotContainingFinal<States, FinalStates>;
|
|
3457
|
+
export declare const isFinal: <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, const Input extends Schema.Top = typeof Schema.Void, UnhandledStates extends Machine.StateIdentifier<States> = Machine.StateIdentifier<States>, E = never, R = never, InitialE = never, InitialR = never, FinalStates extends Machine.StateIdentifier<States> = never, Output = never, OutputStates extends Machine.StateIdentifier<States> = never, InputEvents extends ReadonlyArray<Machine.TaggedSchema> = Events, ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(machine: Machine<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents, ParentEvents>, state: Machine.Snapshot<States>) => state is Machine.SnapshotContainingFinal<States, FinalStates>;
|
|
3325
3458
|
/**
|
|
3326
3459
|
* Defines a state tree while preserving literal state paths.
|
|
3327
3460
|
*
|
|
@@ -3350,7 +3483,7 @@ export declare const isFinal: <const States extends Machine.StateSchemas, const
|
|
|
3350
3483
|
*
|
|
3351
3484
|
* Machine.make({
|
|
3352
3485
|
* states: States.states,
|
|
3353
|
-
* events:
|
|
3486
|
+
* events: Machine.events(),
|
|
3354
3487
|
* initial: () => States.initial.idle.from()
|
|
3355
3488
|
* })
|
|
3356
3489
|
* ```
|
|
@@ -3359,19 +3492,20 @@ export declare const isFinal: <const States extends Machine.StateSchemas, const
|
|
|
3359
3492
|
* @since 0.4.0
|
|
3360
3493
|
*/
|
|
3361
3494
|
export declare const defineStates: DefineStates;
|
|
3362
|
-
type MakeConfig<States extends Machine.StateSchemas, InputEvents extends ReadonlyArray<Machine.TaggedSchema>, Emits extends ReadonlyArray<Machine.TaggedSchema>, Input extends Schema.Top, InitialE, InitialR, InternalEvents extends ReadonlyArray<Machine.TaggedSchema>> = {
|
|
3495
|
+
type MakeConfig<States extends Machine.StateSchemas, InputEvents extends ReadonlyArray<Machine.TaggedSchema>, Emits extends ReadonlyArray<Machine.TaggedSchema>, Input extends Schema.Top, InitialE, InitialR, InternalEvents extends ReadonlyArray<Machine.TaggedSchema>, ParentEvents extends ReadonlyArray<Machine.TaggedSchema>> = {
|
|
3363
3496
|
readonly id?: string;
|
|
3364
3497
|
readonly states: States & DefineStateTreeInput<NoInfer<States>>;
|
|
3365
|
-
readonly events: InputEvents & ValidateInputEventProtocol<NoInfer<InputEvents>>;
|
|
3366
|
-
readonly internalEvents?: InternalEvents & ValidateInternalEventProtocol<NoInfer<InputEvents>, NoInfer<InternalEvents>>;
|
|
3367
|
-
readonly
|
|
3498
|
+
readonly events: Machine.EventProtocol<"public", InputEvents> & ValidateInputEventProtocol<NoInfer<InputEvents>>;
|
|
3499
|
+
readonly internalEvents?: Machine.EventProtocol<"internal", InternalEvents> & ValidateInternalEventProtocol<NoInfer<InputEvents>, NoInfer<InternalEvents>>;
|
|
3500
|
+
readonly emittedEvents?: Machine.EventProtocol<"emitted", Emits>;
|
|
3501
|
+
readonly parentEvents?: Machine.EventProtocol<"public", ParentEvents>;
|
|
3368
3502
|
readonly input?: Input;
|
|
3369
3503
|
readonly initial: (...args: [...Machine.InputArgs<Input>]) => Machine.InitialResult<States, InitialE, InitialR>;
|
|
3370
3504
|
};
|
|
3371
|
-
type MakeResult<States extends Machine.StateSchemas, InputEvents extends ReadonlyArray<Machine.TaggedSchema>, Emits extends ReadonlyArray<Machine.TaggedSchema>, Input extends Schema.Top, InitialE, InitialR, InternalEvents extends ReadonlyArray<Machine.TaggedSchema>> = Machine<States, readonly [...InputEvents, ...InternalEvents], Input, Machine.StateIdentifier<States>, never, never, InitialE, InitialR, Machine.FinalStateFromDefinition<States>, Machine.TerminalOutput<States>, Emits, never, InputEvents>;
|
|
3505
|
+
type MakeResult<States extends Machine.StateSchemas, InputEvents extends ReadonlyArray<Machine.TaggedSchema>, Emits extends ReadonlyArray<Machine.TaggedSchema>, Input extends Schema.Top, InitialE, InitialR, InternalEvents extends ReadonlyArray<Machine.TaggedSchema>, ParentEvents extends ReadonlyArray<Machine.TaggedSchema>> = Machine<States, readonly [...InputEvents, ...InternalEvents], Input, Machine.StateIdentifier<States>, never, never, InitialE, InitialR, Machine.FinalStateFromDefinition<States>, Machine.TerminalOutput<States>, Emits, never, InputEvents, ParentEvents>;
|
|
3372
3506
|
interface Make {
|
|
3373
|
-
<const States extends Machine.StateSchemas, const InputEvents extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const Input extends Schema.Top = typeof Schema.Void, InitialE = never, InitialR = never, const InternalEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(config: MakeConfig<States, InputEvents, Emits, Input, InitialE, InitialR, InternalEvents>, ..._validation: ValidateDefinedStates<NoInfer<States>>): MakeResult<States, InputEvents, Emits, Input, InitialE, InitialR, InternalEvents>;
|
|
3374
|
-
<const States extends Machine.StateSchemas, const InputEvents extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const Input extends Schema.Top = typeof Schema.Void, InitialE = never, InitialR = never, const InternalEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(config: Omit<MakeConfig<States, InputEvents, Emits, Input, InitialE, InitialR, InternalEvents>, "states"> & {
|
|
3507
|
+
<const States extends Machine.StateSchemas, const InputEvents extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const Input extends Schema.Top = typeof Schema.Void, InitialE = never, InitialR = never, const InternalEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(config: MakeConfig<States, InputEvents, Emits, Input, InitialE, InitialR, InternalEvents, ParentEvents>, ..._validation: ValidateDefinedStates<NoInfer<States>>): MakeResult<States, InputEvents, Emits, Input, InitialE, InitialR, InternalEvents, ParentEvents>;
|
|
3508
|
+
<const States extends Machine.StateSchemas, const InputEvents extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const Input extends Schema.Top = typeof Schema.Void, InitialE = never, InitialR = never, const InternalEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(config: Omit<MakeConfig<States, InputEvents, Emits, Input, InitialE, InitialR, InternalEvents, ParentEvents>, "states"> & {
|
|
3375
3509
|
readonly states: InvalidDefinedStateTreeInput<States>;
|
|
3376
3510
|
}): never;
|
|
3377
3511
|
}
|
|
@@ -3386,10 +3520,13 @@ interface Make {
|
|
|
3386
3520
|
* `defineStates` or is passed inline. Call `handle` on the returned definition
|
|
3387
3521
|
* to implement state behavior with ordinary TypeScript control flow.
|
|
3388
3522
|
*
|
|
3389
|
-
*
|
|
3390
|
-
*
|
|
3391
|
-
*
|
|
3392
|
-
*
|
|
3523
|
+
* `Machine.events` defines the public input protocol. `Machine.internalEvents`
|
|
3524
|
+
* adds raised events and other machine-local deliveries.
|
|
3525
|
+
* `Machine.emittedEvents` defines outward ephemeral notifications, while
|
|
3526
|
+
* `parentEvents` declares the inputs a child may explicitly send to its owning
|
|
3527
|
+
* actor. All descriptors expose deferred constructors while retaining their
|
|
3528
|
+
* schemas opaquely for runtime validation. Public and internal tags must be
|
|
3529
|
+
* disjoint.
|
|
3393
3530
|
*
|
|
3394
3531
|
* **Example** (Typed counter machine)
|
|
3395
3532
|
*
|
|
@@ -3406,10 +3543,11 @@ interface Make {
|
|
|
3406
3543
|
* }) {}
|
|
3407
3544
|
*
|
|
3408
3545
|
* const States = Machine.defineStates({ Count })
|
|
3546
|
+
* const Events = Machine.events(Increment)
|
|
3409
3547
|
*
|
|
3410
3548
|
* const counter = Machine.make({
|
|
3411
3549
|
* states: States.states,
|
|
3412
|
-
* events:
|
|
3550
|
+
* events: Events,
|
|
3413
3551
|
* initial: () => States.initial.Count(new Count({ value: 0 }))
|
|
3414
3552
|
* }).handle({
|
|
3415
3553
|
* Count: {
|
|
@@ -3426,54 +3564,16 @@ interface Make {
|
|
|
3426
3564
|
* @since 0.4.0
|
|
3427
3565
|
*/
|
|
3428
3566
|
export declare const make: Make;
|
|
3429
|
-
type EventConstructorArgs<EventSchema extends Machine.TaggedSchema> = {} extends EventSchema["~type.make.in"] ? [
|
|
3430
|
-
input?: EventSchema["~type.make.in"]
|
|
3431
|
-
] : [input: EventSchema["~type.make.in"]];
|
|
3432
3567
|
/**
|
|
3433
|
-
*
|
|
3434
|
-
*
|
|
3435
|
-
* **Details**
|
|
3436
|
-
*
|
|
3437
|
-
* The schema constructor runs exactly once. The resulting decoded event is
|
|
3438
|
-
* trusted by this machine and definitions derived from it with `handle`, so
|
|
3439
|
-
* repeated delivery does not decode the same already-constructed value again.
|
|
3440
|
-
* Events supplied through ordinary `send` and `plan` calls remain untrusted
|
|
3441
|
-
* and continue through full runtime schema validation.
|
|
3442
|
-
* Treat the returned event as immutable after construction.
|
|
3443
|
-
* This eager low-level constructor throws `MachineSchemaDecodeError` when
|
|
3444
|
-
* construction fails. Prefer {@link events} and {@link internalEvents} for
|
|
3445
|
-
* ordinary delivery so construction remains inside the machine error channel.
|
|
3446
|
-
*
|
|
3447
|
-
* The schema must be one of the machine's configured public or internal event
|
|
3448
|
-
* schemas, or a case schema belonging to a configured `Schema.TaggedUnion`.
|
|
3449
|
-
*
|
|
3450
|
-
* **Example**
|
|
3451
|
-
*
|
|
3452
|
-
* ```ts
|
|
3453
|
-
* import { Schema } from "effect"
|
|
3454
|
-
* import { Machine } from "@typeonce/effect-machine"
|
|
3455
|
-
*
|
|
3456
|
-
* class Idle extends Schema.TaggedClass<Idle>("Idle")("Idle", {}) {}
|
|
3457
|
-
* class Increment extends Schema.TaggedClass<Increment>("Increment")("Increment", {
|
|
3458
|
-
* by: Schema.Number
|
|
3459
|
-
* }) {}
|
|
3460
|
-
*
|
|
3461
|
-
* const States = Machine.defineStates({ Idle })
|
|
3462
|
-
* const counter = Machine.make({
|
|
3463
|
-
* states: States.states,
|
|
3464
|
-
* events: [Increment],
|
|
3465
|
-
* initial: () => States.initial.Idle.from()
|
|
3466
|
-
* }).handle({ Idle: { on: { Increment: () => States.initial.Idle.from() } } })
|
|
3568
|
+
* Extracts the decoded event union carried by an event protocol descriptor.
|
|
3467
3569
|
*
|
|
3468
|
-
*
|
|
3469
|
-
*
|
|
3470
|
-
*
|
|
3471
|
-
* @category constructors
|
|
3472
|
-
* @since 0.4.0
|
|
3570
|
+
* @category utility types
|
|
3571
|
+
* @since 0.10.0
|
|
3473
3572
|
*/
|
|
3474
|
-
export
|
|
3573
|
+
export type EventOf<Protocol extends Machine.EventProtocol.Any> = Machine.EventOf<Machine.EventProtocolSchemas<Protocol>>;
|
|
3475
3574
|
/**
|
|
3476
|
-
*
|
|
3575
|
+
* Defines a public event protocol and returns deferred constructors for every
|
|
3576
|
+
* statically finite configured event tag.
|
|
3477
3577
|
*
|
|
3478
3578
|
* Constructor inputs retain their schema-derived required fields, defaults,
|
|
3479
3579
|
* and transformations. Construction is deferred until delivery so failures
|
|
@@ -3483,26 +3583,56 @@ export declare const event: <const M extends Machine.Any, const EventSchema exte
|
|
|
3483
3583
|
* **Example**
|
|
3484
3584
|
*
|
|
3485
3585
|
* ```ts
|
|
3486
|
-
* const
|
|
3487
|
-
*
|
|
3586
|
+
* const Events = Machine.events(Increment, Reset)
|
|
3587
|
+
* const machine = Machine.make({ events: Events, ... })
|
|
3588
|
+
* yield* ref.send(Events.Increment({ by: 1 }))
|
|
3488
3589
|
* ```
|
|
3489
3590
|
*
|
|
3490
3591
|
* @category constructors
|
|
3491
|
-
* @since 0.
|
|
3592
|
+
* @since 0.10.0
|
|
3492
3593
|
*/
|
|
3493
|
-
export declare const events:
|
|
3594
|
+
export declare const events: {
|
|
3595
|
+
<const Schemas extends ReadonlyArray<Machine.TaggedSchema>>(...schemas: Schemas & ValidateInputEventProtocol<NoInfer<Schemas>>): Machine.EventProtocol<"public", readonly [...Schemas]>;
|
|
3596
|
+
<const Inputs extends ReadonlyArray<Machine.EventProtocolInput<"public">>>(...inputs: Inputs & ValidateEventProtocolBuilder<"public", Inputs>): Machine.EventProtocol<"public", Machine.EventProtocolInputSchemasOf<"public", Inputs>>;
|
|
3597
|
+
};
|
|
3494
3598
|
/**
|
|
3495
|
-
*
|
|
3496
|
-
*
|
|
3599
|
+
* Defines an internal event protocol and returns deferred constructors for
|
|
3600
|
+
* every statically finite configured event tag.
|
|
3497
3601
|
*
|
|
3498
3602
|
* Use these constructors for raised events and other machine-local deliveries.
|
|
3499
3603
|
* Construction failures are reported through the
|
|
3500
3604
|
* owning machine's `MachineSchemaDecodeError` channel.
|
|
3501
3605
|
*
|
|
3606
|
+
* **Example**
|
|
3607
|
+
*
|
|
3608
|
+
* ```ts
|
|
3609
|
+
* const InternalEvents = Machine.internalEvents(Loaded, Failed)
|
|
3610
|
+
* const machine = Machine.make({ internalEvents: InternalEvents, ... })
|
|
3611
|
+
*
|
|
3612
|
+
* // Inside a transition callback:
|
|
3613
|
+
* enqueue.raise(InternalEvents.Loaded({ value }))
|
|
3614
|
+
* ```
|
|
3615
|
+
*
|
|
3502
3616
|
* @category constructors
|
|
3503
|
-
* @since 0.
|
|
3617
|
+
* @since 0.10.0
|
|
3504
3618
|
*/
|
|
3505
|
-
export declare const internalEvents:
|
|
3619
|
+
export declare const internalEvents: {
|
|
3620
|
+
<const Schemas extends ReadonlyArray<Machine.TaggedSchema>>(...schemas: Schemas & ValidateInternalEventProtocol<readonly [], NoInfer<Schemas>>): Machine.EventProtocol<"internal", readonly [...Schemas]>;
|
|
3621
|
+
<const Inputs extends ReadonlyArray<Machine.EventProtocolInput<"internal">>>(...inputs: Inputs & ValidateEventProtocolBuilder<"internal", Inputs>): Machine.EventProtocol<"internal", Machine.EventProtocolInputSchemasOf<"internal", Inputs>>;
|
|
3622
|
+
};
|
|
3623
|
+
/**
|
|
3624
|
+
* Defines the ephemeral notifications a machine may publish to external
|
|
3625
|
+
* observers. Emitted events are separate from actor input and are never sent
|
|
3626
|
+
* implicitly to a parent actor. Observe them through `MachineRef.emissions` or
|
|
3627
|
+
* the AtomMachine emission stream adapters.
|
|
3628
|
+
*
|
|
3629
|
+
* @category constructors
|
|
3630
|
+
* @since 0.10.0
|
|
3631
|
+
*/
|
|
3632
|
+
export declare const emittedEvents: {
|
|
3633
|
+
<const Schemas extends ReadonlyArray<Machine.TaggedSchema>>(...schemas: Schemas & ValidateEmittedEventProtocol<NoInfer<Schemas>>): Machine.EventProtocol<"emitted", readonly [...Schemas]>;
|
|
3634
|
+
<const Inputs extends ReadonlyArray<Machine.EventProtocolInput<"emitted">>>(...inputs: Inputs & ValidateEventProtocolBuilder<"emitted", Inputs>): Machine.EventProtocol<"emitted", Machine.EventProtocolInputSchemasOf<"emitted", Inputs>>;
|
|
3635
|
+
};
|
|
3506
3636
|
/**
|
|
3507
3637
|
* Encodes a decoded machine snapshot into a normalized data representation.
|
|
3508
3638
|
*
|
|
@@ -3536,7 +3666,7 @@ export declare const internalEvents: <const M extends Machine.Any>(machine: M) =
|
|
|
3536
3666
|
* const States = Machine.defineStates({ Idle })
|
|
3537
3667
|
* const machine = Machine.make({
|
|
3538
3668
|
* states: States.states,
|
|
3539
|
-
* events:
|
|
3669
|
+
* events: Machine.events(),
|
|
3540
3670
|
* initial: () => States.initial.Idle.from()
|
|
3541
3671
|
* }).handle({ Idle: {} })
|
|
3542
3672
|
*
|
|
@@ -3550,7 +3680,7 @@ export declare const internalEvents: <const M extends Machine.Any>(machine: M) =
|
|
|
3550
3680
|
* @category encoding
|
|
3551
3681
|
* @since 0.4.0
|
|
3552
3682
|
*/
|
|
3553
|
-
export declare const encodeSnapshot: <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const Input extends Schema.Top = typeof Schema.Void, UnhandledStates extends Machine.StateIdentifier<States> = Machine.StateIdentifier<States>, E = never, R = never, InitialE = never, InitialR = never, FinalStates extends Machine.StateIdentifier<States> = never, Output = never, OutputStates extends Machine.StateIdentifier<States> = never, InputEvents extends ReadonlyArray<Machine.TaggedSchema> = Events>(machine: Machine<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents>, snapshot: Machine.Snapshot<States>) => Effect.Effect<Machine.EncodedSnapshot, MachineSchemaEncodeError, Machine.SnapshotEncodingServices<States>>;
|
|
3683
|
+
export declare const encodeSnapshot: <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const Input extends Schema.Top = typeof Schema.Void, UnhandledStates extends Machine.StateIdentifier<States> = Machine.StateIdentifier<States>, E = never, R = never, InitialE = never, InitialR = never, FinalStates extends Machine.StateIdentifier<States> = never, Output = never, OutputStates extends Machine.StateIdentifier<States> = never, InputEvents extends ReadonlyArray<Machine.TaggedSchema> = Events, ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(machine: Machine<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents, ParentEvents>, snapshot: Machine.Snapshot<States>) => Effect.Effect<Machine.EncodedSnapshot, MachineSchemaEncodeError, Machine.SnapshotEncodingServices<States>>;
|
|
3554
3684
|
/**
|
|
3555
3685
|
* Decodes a normalized data representation into a validated machine snapshot.
|
|
3556
3686
|
*
|
|
@@ -3580,7 +3710,7 @@ export declare const encodeSnapshot: <const States extends Machine.StateSchemas,
|
|
|
3580
3710
|
* const States = Machine.defineStates({ Idle })
|
|
3581
3711
|
* const machine = Machine.make({
|
|
3582
3712
|
* states: States.states,
|
|
3583
|
-
* events:
|
|
3713
|
+
* events: Machine.events(),
|
|
3584
3714
|
* initial: () => States.initial.Idle.from()
|
|
3585
3715
|
* }).handle({ Idle: {} })
|
|
3586
3716
|
*
|
|
@@ -3595,7 +3725,7 @@ export declare const encodeSnapshot: <const States extends Machine.StateSchemas,
|
|
|
3595
3725
|
* @category decoding
|
|
3596
3726
|
* @since 0.4.0
|
|
3597
3727
|
*/
|
|
3598
|
-
export declare const decodeSnapshot: <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const Input extends Schema.Top = typeof Schema.Void, UnhandledStates extends Machine.StateIdentifier<States> = Machine.StateIdentifier<States>, E = never, R = never, InitialE = never, InitialR = never, FinalStates extends Machine.StateIdentifier<States> = never, Output = never, OutputStates extends Machine.StateIdentifier<States> = never, InputEvents extends ReadonlyArray<Machine.TaggedSchema> = Events>(machine: Machine<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents>, encoded: unknown) => Effect.Effect<Machine.Snapshot<States>, MachineSchemaDecodeError, Machine.SnapshotDecodingServices<States>>;
|
|
3728
|
+
export declare const decodeSnapshot: <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const Input extends Schema.Top = typeof Schema.Void, UnhandledStates extends Machine.StateIdentifier<States> = Machine.StateIdentifier<States>, E = never, R = never, InitialE = never, InitialR = never, FinalStates extends Machine.StateIdentifier<States> = never, Output = never, OutputStates extends Machine.StateIdentifier<States> = never, InputEvents extends ReadonlyArray<Machine.TaggedSchema> = Events, ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(machine: Machine<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents, ParentEvents>, encoded: unknown) => Effect.Effect<Machine.Snapshot<States>, MachineSchemaDecodeError, Machine.SnapshotDecodingServices<States>>;
|
|
3599
3729
|
type DynamicEffectInvokeSource<States extends Machine.StateSchemas, Events extends ReadonlyArray<Machine.TaggedSchema>, Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, Source extends (context: Machine.InvokeContext<States, Events, Emits, StateId>) => Effect.Effect<unknown, unknown, unknown>> = {
|
|
3600
3730
|
readonly id: InvokeLifecycleId;
|
|
3601
3731
|
readonly effect: Source;
|
|
@@ -3669,42 +3799,8 @@ export declare const invoke: {
|
|
|
3669
3799
|
<const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, const Config extends object>(config: Config & Machine.TimerInvokeArgs<States, Events, Emits, StateId>): Config & Machine.InvokeOwned<States, Events, Emits, StateId> & Machine.InvokeTyped<void, never, never, never>;
|
|
3670
3800
|
<const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, ChildState, ChildEvent, ChildError, ChildRequirements, ChildOutput, ChildInitialError, Address extends ChildAddress<never>>(config: Machine.LogicInvokeArgs<States, Events, Emits, StateId, ChildState, ChildEvent, ChildError, ChildRequirements, ChildOutput, ChildInitialError, Address, (context: Machine.InvokeContext<States, Events, Emits, StateId>) => Logic<ChildState, ChildEvent, ChildError, ChildRequirements, ChildOutput, ChildInitialError>>): Machine.InvokeConfig<States, Events, Emits, StateId> & Machine.InvokeTyped<ChildOutput, ChildError, ChildRequirements, ChildInitialError>;
|
|
3671
3801
|
<const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, ChildState, ChildEvent, ChildError, ChildRequirements, ChildOutput, ChildInitialError, Address extends ChildAddress<never>, const Config extends object>(config: Config & Machine.LogicInvokeArgs<States, Events, Emits, StateId, ChildState, ChildEvent, ChildError, ChildRequirements, ChildOutput, ChildInitialError, Address>): Config & Machine.InvokeOwned<States, Events, Emits, StateId> & Machine.InvokeTyped<ChildOutput, ChildError, ChildRequirements, ChildInitialError>;
|
|
3672
|
-
<const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, const Child extends ChildMachine.Any, const Config extends object>(config: Config & Machine.ChildInvokeArgs<States, Events, Emits, StateId, Child["machine"], Child>): Config & Machine.InvokeOwned<States, Events, Emits, StateId> & Machine.InvokeTyped<Machine.Output<Child["machine"]>, Machine.Error<Child["machine"]> | ActionError<Machine.Services<Child["machine"]>>, Machine.Services<Child["machine"]>, Machine.InitialError<Child["machine"]>, Machine.Emit<Child["machine"]
|
|
3673
|
-
};
|
|
3674
|
-
type RetagFields<Target extends Machine.TaggedSchema> = Omit<Target["~type.make.in"], "_tag">;
|
|
3675
|
-
type RetagTargetCompatibility<Target extends Machine.TaggedSchema> = Target extends {
|
|
3676
|
-
readonly fields: Schema.Struct.Fields;
|
|
3677
|
-
} ? "_tag" extends keyof Target["~type.make.in"] ? {} extends Pick<Target["~type.make.in"], "_tag"> ? unknown : {
|
|
3678
|
-
readonly "~effect/Machine/RetagTargetError": "Target schema must supply its discriminator when make is called";
|
|
3679
|
-
} : unknown : {
|
|
3680
|
-
readonly "~effect/Machine/RetagTargetError": "Target schema must be one tagged struct or tagged class";
|
|
3802
|
+
<const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, const Child extends ChildMachine.Any, const Config extends object>(config: Config & Machine.ChildInvokeArgs<States, Events, Emits, StateId, Child["machine"], Child>): Config & Machine.InvokeOwned<States, Events, Emits, StateId> & Machine.InvokeTyped<Machine.Output<Child["machine"]>, Machine.Error<Child["machine"]> | ActionError<Machine.Services<Child["machine"]>>, Machine.Services<Child["machine"]>, Machine.InitialError<Child["machine"]>, Machine.Emit<Child["machine"]>, Machine.EventOf<Machine.ParentEvents<Child["machine"]>>>;
|
|
3681
3803
|
};
|
|
3682
|
-
type RequiredKeys<A> = {
|
|
3683
|
-
readonly [Key in keyof A]-?: {} extends Pick<A, Key> ? never : Key;
|
|
3684
|
-
}[keyof A];
|
|
3685
|
-
type CompatibleSourceKeys<Fields, Source> = {
|
|
3686
|
-
readonly [Key in Extract<keyof Fields, keyof Source>]: Source[Key] extends Fields[Key] ? Key : never;
|
|
3687
|
-
}[Extract<keyof Fields, keyof Source>];
|
|
3688
|
-
type RetagPatch<Target extends Machine.TaggedSchema, Source> = Partial<RetagFields<Target>> & Pick<RetagFields<Target>, Exclude<RequiredKeys<RetagFields<Target>>, CompatibleSourceKeys<RetagFields<Target>, Source>>>;
|
|
3689
|
-
type RetagArgs<Target extends Machine.TaggedSchema, Source> = [
|
|
3690
|
-
Exclude<RequiredKeys<RetagFields<Target>>, CompatibleSourceKeys<RetagFields<Target>, Source>>
|
|
3691
|
-
] extends [never] ? [patch?: RetagPatch<Target, Source>] : [patch: RetagPatch<Target, Source>];
|
|
3692
|
-
/**
|
|
3693
|
-
* Constructs another tagged case from compatible source fields.
|
|
3694
|
-
*
|
|
3695
|
-
* The target must be one tagged struct or tagged class whose discriminator is
|
|
3696
|
-
* supplied by its constructor. Union wrappers are rejected because their
|
|
3697
|
-
* `make` operation cannot select a member after the source discriminator has
|
|
3698
|
-
* been discarded. Missing or incompatible required target fields must be
|
|
3699
|
-
* supplied by the patch, and the target schema's normal `make` validation
|
|
3700
|
-
* remains authoritative at runtime.
|
|
3701
|
-
*
|
|
3702
|
-
* @category constructors
|
|
3703
|
-
* @since 0.4.0
|
|
3704
|
-
*/
|
|
3705
|
-
export declare const retag: <const Target extends Machine.TaggedSchema, const Source extends {
|
|
3706
|
-
readonly _tag: PropertyKey;
|
|
3707
|
-
}>(target: Target & RetagTargetCompatibility<Target>, source: Source, ...args: RetagArgs<Target, Source>) => Target["Type"];
|
|
3708
3804
|
/**
|
|
3709
3805
|
* Plans the initial state for a machine without executing actor commands.
|
|
3710
3806
|
*
|
|
@@ -3733,7 +3829,7 @@ export declare const retag: <const Target extends Machine.TaggedSchema, const So
|
|
|
3733
3829
|
* const States = Machine.defineStates({ Idle })
|
|
3734
3830
|
* const machine = Machine.make({
|
|
3735
3831
|
* states: States.states,
|
|
3736
|
-
* events:
|
|
3832
|
+
* events: Machine.events(),
|
|
3737
3833
|
* initial: () => States.initial.Idle.from()
|
|
3738
3834
|
* }).handle({ Idle: {} })
|
|
3739
3835
|
*
|
|
@@ -3745,7 +3841,7 @@ export declare const retag: <const Target extends Machine.TaggedSchema, const So
|
|
|
3745
3841
|
* @category constructors
|
|
3746
3842
|
* @since 0.4.0
|
|
3747
3843
|
*/
|
|
3748
|
-
export declare const planInitial: <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const Input extends Schema.Top = typeof Schema.Void, UnhandledStates extends Machine.StateIdentifier<States> = Machine.StateIdentifier<States>, E = never, R = never, InitialE = never, InitialR = never, FinalStates extends Machine.StateIdentifier<States> = never, Output = never, OutputStates extends Machine.StateIdentifier<States> = never, InputEvents extends ReadonlyArray<Machine.TaggedSchema> = Events>(machine: Machine<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents> & EnsureExecutable<States, UnhandledStates, OutputStates>, ...args: [...Machine.InputArgs<Input>]) => Effect.Effect<{
|
|
3844
|
+
export declare const planInitial: <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const Input extends Schema.Top = typeof Schema.Void, UnhandledStates extends Machine.StateIdentifier<States> = Machine.StateIdentifier<States>, E = never, R = never, InitialE = never, InitialR = never, FinalStates extends Machine.StateIdentifier<States> = never, Output = never, OutputStates extends Machine.StateIdentifier<States> = never, InputEvents extends ReadonlyArray<Machine.TaggedSchema> = Events, ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(machine: Machine<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents, ParentEvents> & EnsureExecutable<States, UnhandledStates, OutputStates>, ...args: [...Machine.InputArgs<Input>]) => Effect.Effect<{
|
|
3749
3845
|
readonly startingState: Machine.Snapshot<States>;
|
|
3750
3846
|
readonly initialEntryPaths: ReadonlyArray<Machine.StateIdentifier<States>>;
|
|
3751
3847
|
readonly state: Machine.Snapshot<States>;
|
|
@@ -3831,7 +3927,7 @@ export declare const configuration: <M extends Machine.Any>(machine: M, state: M
|
|
|
3831
3927
|
* @category getters
|
|
3832
3928
|
* @since 0.4.0
|
|
3833
3929
|
*/
|
|
3834
|
-
export declare const enabled: <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, const Input extends Schema.Top = typeof Schema.Void, UnhandledStates extends Machine.StateIdentifier<States> = Machine.StateIdentifier<States>, E = never, R = never, InitialE = never, InitialR = never, FinalStates extends Machine.StateIdentifier<States> = never, Output = never, OutputStates extends Machine.StateIdentifier<States> = never, InputEvents extends ReadonlyArray<Machine.TaggedSchema> = Events>(machine: Machine<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents>, state: Machine.Snapshot<States>) => ReadonlyArray<Machine.TagOf<Events[number]>>;
|
|
3930
|
+
export declare const enabled: <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, const Input extends Schema.Top = typeof Schema.Void, UnhandledStates extends Machine.StateIdentifier<States> = Machine.StateIdentifier<States>, E = never, R = never, InitialE = never, InitialR = never, FinalStates extends Machine.StateIdentifier<States> = never, Output = never, OutputStates extends Machine.StateIdentifier<States> = never, InputEvents extends ReadonlyArray<Machine.TaggedSchema> = Events, ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(machine: Machine<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents, ParentEvents>, state: Machine.Snapshot<States>) => ReadonlyArray<Machine.TagOf<Events[number]>>;
|
|
3835
3931
|
/**
|
|
3836
3932
|
* Plans the next state snapshot synchronously.
|
|
3837
3933
|
*
|
|
@@ -3861,7 +3957,7 @@ export declare const enabled: <const States extends Machine.StateSchemas, const
|
|
|
3861
3957
|
* const States = Machine.defineStates({ Off, On })
|
|
3862
3958
|
* const machine = Machine.make({
|
|
3863
3959
|
* states: States.states,
|
|
3864
|
-
* events:
|
|
3960
|
+
* events: Machine.events(Toggle),
|
|
3865
3961
|
* initial: () => States.initial.Off.from()
|
|
3866
3962
|
* }).handle({ Off: { on: { Toggle: () => States.initial.On.from() } }, On: {} })
|
|
3867
3963
|
*
|
|
@@ -3876,7 +3972,7 @@ export declare const enabled: <const States extends Machine.StateSchemas, const
|
|
|
3876
3972
|
* @category combinators
|
|
3877
3973
|
* @since 0.4.0
|
|
3878
3974
|
*/
|
|
3879
|
-
export declare const plan: <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const Input extends Schema.Top = typeof Schema.Void, UnhandledStates extends Machine.StateIdentifier<States> = Machine.StateIdentifier<States>, E = never, R = never, InitialE = never, InitialR = never, FinalStates extends Machine.StateIdentifier<States> = never, Output = never, OutputStates extends Machine.StateIdentifier<States> = never, InputEvents extends ReadonlyArray<Machine.TaggedSchema> = Events>(machine: Machine<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents> & EnsureExecutable<States, UnhandledStates, OutputStates>, state: Machine.Snapshot<States>, event: Machine.EventInputOf<InputEvents>) => Effect.Effect<{
|
|
3975
|
+
export declare const plan: <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const Input extends Schema.Top = typeof Schema.Void, UnhandledStates extends Machine.StateIdentifier<States> = Machine.StateIdentifier<States>, E = never, R = never, InitialE = never, InitialR = never, FinalStates extends Machine.StateIdentifier<States> = never, Output = never, OutputStates extends Machine.StateIdentifier<States> = never, InputEvents extends ReadonlyArray<Machine.TaggedSchema> = Events, ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(machine: Machine<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents, ParentEvents> & EnsureExecutable<States, UnhandledStates, OutputStates>, state: Machine.Snapshot<States>, event: Machine.EventInputOf<InputEvents>) => Effect.Effect<{
|
|
3880
3976
|
readonly next: Machine.Snapshot<States>;
|
|
3881
3977
|
readonly commands: ReadonlyArray<Command>;
|
|
3882
3978
|
readonly emittedEvents: ReadonlyArray<Machine.EmitOf<Emits>>;
|
|
@@ -4063,7 +4159,7 @@ export declare const watch: <State, Event, Error = never, Output = never>(ref: M
|
|
|
4063
4159
|
* const States = Machine.defineStates({ Idle })
|
|
4064
4160
|
* const machine = Machine.make({
|
|
4065
4161
|
* states: States.states,
|
|
4066
|
-
* events:
|
|
4162
|
+
* events: Machine.events(),
|
|
4067
4163
|
* initial: () => States.initial.Idle.from()
|
|
4068
4164
|
* }).handle({ Idle: {} })
|
|
4069
4165
|
*
|
|
@@ -4078,7 +4174,7 @@ export declare const watch: <State, Event, Error = never, Output = never>(ref: M
|
|
|
4078
4174
|
* @category constructors
|
|
4079
4175
|
* @since 0.4.0
|
|
4080
4176
|
*/
|
|
4081
|
-
export declare const start: <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const Input extends Schema.Top = typeof Schema.Void, UnhandledStates extends Machine.StateIdentifier<States> = Machine.StateIdentifier<States>, E = never, R = never, InitialE = never, InitialR = never, FinalStates extends Machine.StateIdentifier<States> = never, Output = never, OutputStates extends Machine.StateIdentifier<States> = never, InputEvents extends ReadonlyArray<Machine.TaggedSchema> = Events>(machine: Machine<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents> & EnsureExecutable<States, UnhandledStates, OutputStates>, ...args: [...Machine.InputArgs<Input>]) => Effect.Effect<MachineRef<Machine.Snapshot<States>, Machine.EventInputOf<InputEvents>, E | ActionError<R> | InfiniteTransitionError | MachineSchemaDecodeError | StoppedError, Output
|
|
4177
|
+
export declare const start: <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const Input extends Schema.Top = typeof Schema.Void, UnhandledStates extends Machine.StateIdentifier<States> = Machine.StateIdentifier<States>, E = never, R = never, InitialE = never, InitialR = never, FinalStates extends Machine.StateIdentifier<States> = never, Output = never, OutputStates extends Machine.StateIdentifier<States> = never, InputEvents extends ReadonlyArray<Machine.TaggedSchema> = Events, ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(machine: Machine<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents, ParentEvents> & EnsureExecutable<States, UnhandledStates, OutputStates>, ...args: [...Machine.InputArgs<Input>]) => Effect.Effect<MachineRef<Machine.Snapshot<States>, Machine.EventInputOf<InputEvents>, E | ActionError<R> | InfiniteTransitionError | MachineSchemaDecodeError | StoppedError, Output, Machine.EmittedEventOf<Emits>>, InitialE | E | ActionError<InitialR | R> | InfiniteTransitionError | MachineSchemaDecodeError | StartupError | StoppedError, ExcludeCompatibleRuntime<ExecutionServices<InitialR | R>, Machine.EventOf<Events>, Machine.EmitOf<Emits>>>;
|
|
4082
4178
|
/**
|
|
4083
4179
|
* Starts a fresh managed runtime from a decoded logical snapshot.
|
|
4084
4180
|
*
|
|
@@ -4113,7 +4209,7 @@ export declare const start: <const States extends Machine.StateSchemas, const Ev
|
|
|
4113
4209
|
* const States = Machine.defineStates({ Idle })
|
|
4114
4210
|
* const machine = Machine.make({
|
|
4115
4211
|
* states: States.states,
|
|
4116
|
-
* events:
|
|
4212
|
+
* events: Machine.events(),
|
|
4117
4213
|
* initial: () => States.initial.Idle.from()
|
|
4118
4214
|
* }).handle({ Idle: {} })
|
|
4119
4215
|
*
|
|
@@ -4130,5 +4226,5 @@ export declare const start: <const States extends Machine.StateSchemas, const Ev
|
|
|
4130
4226
|
* @category constructors
|
|
4131
4227
|
* @since 0.4.0
|
|
4132
4228
|
*/
|
|
4133
|
-
export declare const resume: <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const Input extends Schema.Top = typeof Schema.Void, UnhandledStates extends Machine.StateIdentifier<States> = Machine.StateIdentifier<States>, E = never, R = never, InitialE = never, InitialR = never, FinalStates extends Machine.StateIdentifier<States> = never, Output = never, OutputStates extends Machine.StateIdentifier<States> = never, InputEvents extends ReadonlyArray<Machine.TaggedSchema> = Events>(machine: Machine<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents> & EnsureExecutable<States, UnhandledStates, OutputStates>, snapshot: Machine.Snapshot<States>) => Effect.Effect<MachineRef<Machine.Snapshot<States>, Machine.EventInputOf<InputEvents>, E | ActionError<R> | InfiniteTransitionError | MachineSchemaDecodeError | StoppedError, Output
|
|
4229
|
+
export declare const resume: <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const Input extends Schema.Top = typeof Schema.Void, UnhandledStates extends Machine.StateIdentifier<States> = Machine.StateIdentifier<States>, E = never, R = never, InitialE = never, InitialR = never, FinalStates extends Machine.StateIdentifier<States> = never, Output = never, OutputStates extends Machine.StateIdentifier<States> = never, InputEvents extends ReadonlyArray<Machine.TaggedSchema> = Events, ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(machine: Machine<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents, ParentEvents> & EnsureExecutable<States, UnhandledStates, OutputStates>, snapshot: Machine.Snapshot<States>) => Effect.Effect<MachineRef<Machine.Snapshot<States>, Machine.EventInputOf<InputEvents>, E | ActionError<R> | InfiniteTransitionError | MachineSchemaDecodeError | StoppedError, Output, Machine.EmittedEventOf<Emits>>, MachineSchemaDecodeError, ExcludeCompatibleRuntime<ExecutionServices<R>, Machine.EventOf<Events>, Machine.EmitOf<Emits>>>;
|
|
4134
4230
|
//# sourceMappingURL=Machine.d.ts.map
|