@typeonce/effect-machine 0.14.1 → 0.16.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 +99 -48
- package/dist/Machine.d.ts +436 -156
- package/dist/Machine.d.ts.map +1 -1
- package/dist/Machine.js +114 -57
- package/dist/Machine.js.map +1 -1
- package/dist/internal/machine/activities.d.ts +2 -0
- package/dist/internal/machine/activities.d.ts.map +1 -1
- package/dist/internal/machine/activities.js +4 -0
- package/dist/internal/machine/activities.js.map +1 -1
- package/dist/internal/machine/executionPlan.d.ts.map +1 -1
- package/dist/internal/machine/executionPlan.js +6 -1
- package/dist/internal/machine/executionPlan.js.map +1 -1
- package/dist/internal/machine/invocation.d.ts +1 -1
- package/dist/internal/machine/invocation.d.ts.map +1 -1
- package/dist/internal/machine/invocation.js +25 -3
- package/dist/internal/machine/invocation.js.map +1 -1
- package/dist/internal/machine/invocationEvent.d.ts +8 -0
- package/dist/internal/machine/invocationEvent.d.ts.map +1 -1
- package/dist/internal/machine/invocationEvent.js +8 -0
- package/dist/internal/machine/invocationEvent.js.map +1 -1
- package/dist/internal/machine/machine.d.ts +9 -4
- package/dist/internal/machine/machine.d.ts.map +1 -1
- package/dist/internal/machine/machine.js +131 -55
- package/dist/internal/machine/machine.js.map +1 -1
- package/dist/internal/machine/planner.d.ts +7 -0
- package/dist/internal/machine/planner.d.ts.map +1 -1
- package/dist/internal/machine/planner.js +20 -11
- package/dist/internal/machine/planner.js.map +1 -1
- package/dist/internal/machine/runtime.d.ts +1 -0
- package/dist/internal/machine/runtime.d.ts.map +1 -1
- package/dist/internal/machine/runtime.js +25 -16
- package/dist/internal/machine/runtime.js.map +1 -1
- package/dist/internal/machine/stateDefinition.d.ts +3 -1
- package/dist/internal/machine/stateDefinition.d.ts.map +1 -1
- package/dist/internal/machine/stateDefinition.js +35 -0
- package/dist/internal/machine/stateDefinition.js.map +1 -1
- package/dist/internal/machine/topology.d.ts +11 -0
- package/dist/internal/machine/topology.d.ts.map +1 -1
- package/dist/internal/machine/topology.js +17 -6
- 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/transitionCoverage.d.ts.map +1 -1
- package/dist/internal/testing/machine/transitionCoverage.js +6 -2
- package/dist/internal/testing/machine/transitionCoverage.js.map +1 -1
- package/dist/internal/testing/machine/verification.d.ts.map +1 -1
- package/dist/internal/testing/machine/verification.js +6 -0
- package/dist/internal/testing/machine/verification.js.map +1 -1
- package/dist/testing/MachineTest.d.ts +9 -8
- package/dist/testing/MachineTest.d.ts.map +1 -1
- package/dist/testing/MachineTest.js +7 -7
- package/dist/testing/MachineTest.js.map +1 -1
- package/dist/unstable/cluster/ClusterMachine.d.ts +1 -1
- package/dist/unstable/cluster/ClusterMachine.js +1 -1
- package/dist/unstable/reactivity/AtomMachine.d.ts +3 -3
- package/dist/unstable/reactivity/AtomMachine.js +3 -3
- package/docs/agent-guide.md +207 -88
- package/package.json +1 -1
- package/src/Machine.ts +871 -256
- package/src/internal/machine/activities.ts +7 -0
- package/src/internal/machine/executionPlan.ts +6 -1
- package/src/internal/machine/invocation.ts +39 -4
- package/src/internal/machine/invocationEvent.ts +16 -0
- package/src/internal/machine/machine.ts +187 -67
- package/src/internal/machine/planner.ts +17 -3
- package/src/internal/machine/runtime.ts +61 -25
- package/src/internal/machine/stateDefinition.ts +41 -1
- package/src/internal/machine/topology.ts +31 -2
- package/src/internal/testing/machine/finiteModel.ts +1 -1
- package/src/internal/testing/machine/transitionCoverage.ts +6 -2
- package/src/internal/testing/machine/verification.ts +11 -0
- package/src/testing/MachineTest.ts +9 -7
- package/src/unstable/cluster/ClusterMachine.ts +1 -1
- package/src/unstable/reactivity/AtomMachine.ts +3 -3
package/dist/Machine.d.ts
CHANGED
|
@@ -41,7 +41,6 @@ declare const MachineTypeId: unique symbol;
|
|
|
41
41
|
declare const EventConstructionTypeId: unique symbol;
|
|
42
42
|
declare const EmittedEventConstructionTypeId: unique symbol;
|
|
43
43
|
declare const EventProtocolTypeId: unique symbol;
|
|
44
|
-
declare const TransitionCaseTypeId: unique symbol;
|
|
45
44
|
declare const ChildMachineLogicTypeId: typeof internal.ChildMachineLogicTypeId;
|
|
46
45
|
/**
|
|
47
46
|
* Type identifier used for the synthetic event passed to startup lifecycle
|
|
@@ -77,7 +76,7 @@ export declare const InitialEvent: InitialEvent;
|
|
|
77
76
|
export declare const isInitialEvent: (u: unknown) => u is InitialEvent;
|
|
78
77
|
type IsAny<A> = 0 extends (1 & A) ? true : false;
|
|
79
78
|
/**
|
|
80
|
-
* A schema-first machine
|
|
79
|
+
* A schema-first machine implementation.
|
|
81
80
|
*
|
|
82
81
|
* **Details**
|
|
83
82
|
*
|
|
@@ -157,20 +156,9 @@ export interface Machine<States extends Machine.StateSchemas, Events extends Rea
|
|
|
157
156
|
/** @internal */
|
|
158
157
|
readonly handlers: Machine.StateConfigs<States, Events, Emits, UnhandledStates, Machine.TagOf<Events[number]>, E, R>;
|
|
159
158
|
/**
|
|
160
|
-
*
|
|
161
|
-
*
|
|
162
|
-
*
|
|
163
|
-
* Event dispatch maps and transition descriptors are captured by value, so
|
|
164
|
-
* later mutation of the objects supplied to this call cannot alter the
|
|
165
|
-
* resulting machine.
|
|
166
|
-
*
|
|
167
|
-
* @since 0.4.0
|
|
168
|
-
*/
|
|
169
|
-
readonly handle: Machine.Handler<States, Events, Emits, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, OutputStates, InputEvents, ParentEvents>;
|
|
170
|
-
/**
|
|
171
|
-
* Preserves invocation inference with this machine's public input and parent
|
|
172
|
-
* protocols. Prefer this bound constructor when an invocation source or
|
|
173
|
-
* lifecycle handler uses `self` or `parent`.
|
|
159
|
+
* Machine-bound equivalent of {@link invoke}. Both forms preserve this
|
|
160
|
+
* machine's public input and parent protocols in invocation callbacks;
|
|
161
|
+
* `Machine.invoke(...)` inside `handle(...)` is the canonical inline form.
|
|
174
162
|
*
|
|
175
163
|
* @since 0.11.0
|
|
176
164
|
*/
|
|
@@ -180,6 +168,48 @@ export interface Machine<States extends Machine.StateSchemas, Events extends Rea
|
|
|
180
168
|
/** @internal */
|
|
181
169
|
readonly initialDefinition: Machine.InitialDefinition;
|
|
182
170
|
}
|
|
171
|
+
/**
|
|
172
|
+
* A schema-first machine definition that can produce independent
|
|
173
|
+
* implementations.
|
|
174
|
+
*
|
|
175
|
+
* **Details**
|
|
176
|
+
*
|
|
177
|
+
* Call `handle` once for each implementation. The returned {@link Machine}
|
|
178
|
+
* does not expose `handle`, so handler configuration cannot be accumulated or
|
|
179
|
+
* replaced through chained calls. Calling `handle` multiple times on the same
|
|
180
|
+
* definition remains supported and creates independent machines.
|
|
181
|
+
*
|
|
182
|
+
* @category models
|
|
183
|
+
* @since 0.15.0
|
|
184
|
+
*/
|
|
185
|
+
export interface Definition<States extends Machine.StateSchemas, Events extends ReadonlyArray<Machine.TaggedSchema>, Input extends Schema.Top = typeof Schema.Void, InitialE = never, InitialR = never, FinalStates extends Machine.StateIdentifier<States> = never, Output = never, Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [], InputEvents extends ReadonlyArray<Machine.TaggedSchema> = Events, ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []> extends Machine<States, Events, Input, Machine.StateIdentifier<States>, never, never, InitialE, InitialR, FinalStates, Output, Emits, never, InputEvents, ParentEvents> {
|
|
186
|
+
/**
|
|
187
|
+
* Adds typed state handlers and returns an independent machine
|
|
188
|
+
* implementation. Event dispatch maps and transition descriptors are
|
|
189
|
+
* captured by value, so later mutation of the supplied objects cannot alter
|
|
190
|
+
* the resulting machine.
|
|
191
|
+
*
|
|
192
|
+
* @since 0.4.0
|
|
193
|
+
*/
|
|
194
|
+
readonly handle: Machine.Handler<States, Events, Emits, Input, Machine.StateIdentifier<States>, never, never, InitialE, InitialR, FinalStates, Output, never, InputEvents, ParentEvents>;
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Namespace containing type-level members associated with {@link Definition}.
|
|
198
|
+
*
|
|
199
|
+
* @category models
|
|
200
|
+
* @since 0.15.0
|
|
201
|
+
*/
|
|
202
|
+
export declare namespace Definition {
|
|
203
|
+
/**
|
|
204
|
+
* Any schema-first machine definition.
|
|
205
|
+
*
|
|
206
|
+
* @category models
|
|
207
|
+
* @since 0.15.0
|
|
208
|
+
*/
|
|
209
|
+
interface Any extends Machine.Any {
|
|
210
|
+
readonly handle: any;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
183
213
|
export {
|
|
184
214
|
/**
|
|
185
215
|
* Error returned by `spawn` when a child process with the same id already
|
|
@@ -467,7 +497,7 @@ type ValidateCompoundStateNode<Node extends Machine.StateNodeConfig, Children ex
|
|
|
467
497
|
readonly initial: infer Initial;
|
|
468
498
|
} ? Initial extends ActiveStateKey<Children> | ChoiceStateKey<Children> ? {
|
|
469
499
|
readonly states: ValidateStateTree<Children, true, Extract<Path, string>>;
|
|
470
|
-
} : StateDefinitionError<"Compound initial must be one of its direct child keys"
|
|
500
|
+
} : StateDefinitionError<"Compound initial must be one of its direct child keys", Path, Extract<Initial, PropertyKey>> : StateDefinitionError<"Compound states must declare an initial child", Path>;
|
|
471
501
|
type ValidateStateNodeWithoutChildren<Node extends Machine.StateNodeConfig> = "initial" extends keyof Node ? StateDefinitionError<"Atomic states cannot declare an initial child"> : Node extends {
|
|
472
502
|
readonly type: infer Type;
|
|
473
503
|
} ? Type extends "final" ? ValidateOutputSchema<Node> : Type extends "active" | undefined ? "output" extends keyof Node ? StateDefinitionError<"Only final and parallel states can declare output"> : unknown : StateDefinitionError<"State node type must be active, final, or parallel"> : "output" extends keyof Node ? StateDefinitionError<"Only final and parallel states can declare output"> : unknown;
|
|
@@ -491,7 +521,15 @@ type ValidateDefinedStates<States extends Machine.StateSchemas> = [States] exten
|
|
|
491
521
|
type InvalidDefinedStateTreeInput<States extends Machine.StateSchemas> = [States] extends [
|
|
492
522
|
Machine.ValidateStateSchemas<States>
|
|
493
523
|
] ? never : States & Machine.ValidateStateSchemas<States>;
|
|
494
|
-
|
|
524
|
+
type ReusableStateNodeConfig = Machine.AtomicStateNodeConfig | Machine.CompoundStateNodeConfig | Machine.ParallelStateNodeConfig;
|
|
525
|
+
type ReusableStateValidation<Node> = Node extends ReusableStateNodeConfig ? ValidateStateNode<Node, false, "state"> : StateDefinitionError<"Reusable states must be active state nodes", "state">;
|
|
526
|
+
type ValidateDefinedState<Node> = [Node] extends [ReusableStateValidation<Node>] ? [] : [validation: ReusableStateValidation<Node>];
|
|
527
|
+
type InvalidDefinedStateInput<Node> = [Node] extends [ReusableStateValidation<Node>] ? never : Node & ReusableStateValidation<Node>;
|
|
528
|
+
interface StateConstructor {
|
|
529
|
+
<const Node>(node: Node & DefineStateNodeInput<NoInfer<Node>>, ..._validation: ValidateDefinedState<NoInfer<Node>>): Node;
|
|
530
|
+
<const Node>(node: InvalidDefinedStateInput<Node>): never;
|
|
531
|
+
}
|
|
532
|
+
interface StatesConstructor {
|
|
495
533
|
<const States extends Machine.StateSchemas>(states: States & DefineStateTreeInput<NoInfer<States>>, ..._validation: ValidateDefinedStates<NoInfer<States>>): Machine.DefinedStates<States>;
|
|
496
534
|
<const States extends Machine.StateSchemas>(states: InvalidDefinedStateTreeInput<States>): never;
|
|
497
535
|
}
|
|
@@ -981,9 +1019,9 @@ export declare namespace Inspection {
|
|
|
981
1019
|
readonly sessionId: string;
|
|
982
1020
|
readonly owner: Subject;
|
|
983
1021
|
readonly ownerPath: string;
|
|
984
|
-
readonly kind: "Effect" | "Timer";
|
|
1022
|
+
readonly kind: "Effect" | "Stream" | "Timer";
|
|
985
1023
|
}
|
|
986
|
-
/** Announces an Effect or timer invocation starting. */
|
|
1024
|
+
/** Announces an Effect, Stream, or timer invocation starting. */
|
|
987
1025
|
interface ActivityStarted extends Base {
|
|
988
1026
|
readonly _tag: "ActivityStarted";
|
|
989
1027
|
readonly activity: Activity;
|
|
@@ -1399,8 +1437,6 @@ export declare namespace Machine {
|
|
|
1399
1437
|
/** @internal */
|
|
1400
1438
|
readonly handlers: any;
|
|
1401
1439
|
/** @internal */
|
|
1402
|
-
readonly handle: any;
|
|
1403
|
-
/** @internal */
|
|
1404
1440
|
readonly invoke: any;
|
|
1405
1441
|
/** @internal */
|
|
1406
1442
|
readonly initial: any;
|
|
@@ -1773,12 +1809,12 @@ export declare namespace Machine {
|
|
|
1773
1809
|
*/
|
|
1774
1810
|
type StateSchemas = StateTree;
|
|
1775
1811
|
/**
|
|
1776
|
-
* Builder for initial state snapshots generated by `
|
|
1812
|
+
* Builder for initial state snapshots generated by `states`.
|
|
1777
1813
|
*
|
|
1778
1814
|
* **When to use**
|
|
1779
1815
|
*
|
|
1780
1816
|
* Use when you need the type of the `initial` property returned by
|
|
1781
|
-
* `
|
|
1817
|
+
* `states` or want to expose an initial snapshot builder from a helper.
|
|
1782
1818
|
*
|
|
1783
1819
|
* **Details**
|
|
1784
1820
|
*
|
|
@@ -1790,7 +1826,7 @@ export declare namespace Machine {
|
|
|
1790
1826
|
*/
|
|
1791
1827
|
type InitialBuilder<States extends StateSchemas> = InitialSnapshotBuilderWithPrefix<States>;
|
|
1792
1828
|
/**
|
|
1793
|
-
* State definitions and snapshot access helpers returned by `
|
|
1829
|
+
* State definitions and snapshot access helpers returned by `states`.
|
|
1794
1830
|
*
|
|
1795
1831
|
* **Details**
|
|
1796
1832
|
*
|
|
@@ -1802,8 +1838,17 @@ export declare namespace Machine {
|
|
|
1802
1838
|
* @since 0.4.0
|
|
1803
1839
|
*/
|
|
1804
1840
|
interface DefinedStates<States extends StateSchemas> {
|
|
1805
|
-
/**
|
|
1841
|
+
/** Captured state tree supplied to {@link states}. */
|
|
1806
1842
|
readonly states: States;
|
|
1843
|
+
/**
|
|
1844
|
+
* Checks and preserves one active state path from this definition.
|
|
1845
|
+
*
|
|
1846
|
+
* This is useful for named path helpers, including finite template-literal
|
|
1847
|
+
* families. Every member of a path union must exist in the state tree.
|
|
1848
|
+
*
|
|
1849
|
+
* @since 0.15.0
|
|
1850
|
+
*/
|
|
1851
|
+
readonly path: <const Path extends StateIdentifier<States>>(path: Path) => Path;
|
|
1807
1852
|
/**
|
|
1808
1853
|
* Returns the decoded value for an active state path. The supplied
|
|
1809
1854
|
* snapshot may be a complete root snapshot or a snapshot previously
|
|
@@ -1968,7 +2013,7 @@ export declare namespace Machine {
|
|
|
1968
2013
|
} | {
|
|
1969
2014
|
readonly type: "invoke";
|
|
1970
2015
|
readonly id: string;
|
|
1971
|
-
readonly outcome: "done" | "failure" | "snapshot";
|
|
2016
|
+
readonly outcome: "element" | "done" | "failure" | "snapshot";
|
|
1972
2017
|
};
|
|
1973
2018
|
/** Static topology selected by a transition branch. */
|
|
1974
2019
|
interface TransitionTargetSelection<Path extends string | undefined = string | undefined, Kind extends Topology.TargetSelectionKind = Topology.TargetSelectionKind, Scope extends Topology.TargetSelectionScope | undefined = Topology.TargetSelectionScope | undefined> {
|
|
@@ -1982,14 +2027,11 @@ export declare namespace Machine {
|
|
|
1982
2027
|
readonly target: Path | undefined;
|
|
1983
2028
|
readonly selection: TransitionTargetSelection<Path | undefined>;
|
|
1984
2029
|
} | {
|
|
1985
|
-
readonly type: "
|
|
2030
|
+
readonly type: "branch";
|
|
2031
|
+
readonly key: string;
|
|
1986
2032
|
readonly title: string;
|
|
1987
2033
|
readonly target: Path | undefined;
|
|
1988
2034
|
readonly selection: TransitionTargetSelection<Path | undefined>;
|
|
1989
|
-
} | {
|
|
1990
|
-
readonly type: "otherwise";
|
|
1991
|
-
readonly target: Path | undefined;
|
|
1992
|
-
readonly selection: TransitionTargetSelection<Path | undefined>;
|
|
1993
2035
|
};
|
|
1994
2036
|
/** The statically selected root entry for machine startup. */
|
|
1995
2037
|
interface InitialDefinition<Path extends string = string> {
|
|
@@ -2001,8 +2043,8 @@ export declare namespace Machine {
|
|
|
2001
2043
|
*
|
|
2002
2044
|
* **Details**
|
|
2003
2045
|
*
|
|
2004
|
-
* Every branch exposes its selected target without executing its
|
|
2005
|
-
*
|
|
2046
|
+
* Every branch exposes its selected target without executing its resolver.
|
|
2047
|
+
* A compound local or branch target covers its descendants;
|
|
2006
2048
|
* `undefined` identifies an explicitly targetless branch.
|
|
2007
2049
|
*
|
|
2008
2050
|
* @category models
|
|
@@ -2038,6 +2080,8 @@ export declare namespace Machine {
|
|
|
2038
2080
|
readonly reenter: boolean;
|
|
2039
2081
|
/** Zero-based index of the selected static branch. */
|
|
2040
2082
|
readonly branchIndex: number;
|
|
2083
|
+
/** Stable key of a named branch, or `undefined` for a direct transition. */
|
|
2084
|
+
readonly branchKey: string | undefined;
|
|
2041
2085
|
/** Path returned by the handler, including a choice or history pseudo-state. */
|
|
2042
2086
|
readonly target: TargetPath | undefined;
|
|
2043
2087
|
/**
|
|
@@ -2898,6 +2942,16 @@ export declare namespace Machine {
|
|
|
2898
2942
|
readonly target: TargetBuilder<States, StateId>;
|
|
2899
2943
|
readonly output: Output;
|
|
2900
2944
|
}
|
|
2945
|
+
/** Context passed to a Stream invocation's element transition. */
|
|
2946
|
+
interface InvokeElementContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, Element, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> extends MachineReferences<InputEvents, ParentEvents> {
|
|
2947
|
+
readonly id: string;
|
|
2948
|
+
readonly state: StateByIdentifier<States, StateId>;
|
|
2949
|
+
readonly containingState: ParentStateValue<States, StateId>;
|
|
2950
|
+
readonly ancestors: ParentStateValues<States, StateId>;
|
|
2951
|
+
readonly snapshot: Snapshot<States>;
|
|
2952
|
+
readonly target: TargetBuilder<States, StateId>;
|
|
2953
|
+
readonly element: Element;
|
|
2954
|
+
}
|
|
2901
2955
|
/** Context passed to an invocation typed-failure transition. */
|
|
2902
2956
|
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 MachineReferences<InputEvents, ParentEvents> {
|
|
2903
2957
|
readonly id: string;
|
|
@@ -3090,13 +3144,9 @@ export declare namespace Machine {
|
|
|
3090
3144
|
* @category utility types
|
|
3091
3145
|
* @since 0.4.0
|
|
3092
3146
|
*/
|
|
3093
|
-
type EventTransitionReturn<Transition> =
|
|
3147
|
+
type EventTransitionReturn<Transition> = Transition extends {
|
|
3094
3148
|
readonly resolve?: infer Resolve;
|
|
3095
|
-
} ? NonNullable<Resolve> extends (...args: any) => infer Ret ? Ret : never : never
|
|
3096
|
-
readonly cases: infer Cases extends ReadonlyArray<unknown>;
|
|
3097
|
-
} ? EventTransitionReturn<Cases[number]> : never) | (Transition extends {
|
|
3098
|
-
readonly otherwise: infer Otherwise;
|
|
3099
|
-
} ? EventTransitionReturn<Otherwise> : never);
|
|
3149
|
+
} ? NonNullable<Resolve> extends (...args: any) => infer Ret ? Ret : never : never;
|
|
3100
3150
|
/**
|
|
3101
3151
|
* Extracts the return value from a state's event handlers.
|
|
3102
3152
|
*
|
|
@@ -3129,6 +3179,8 @@ export declare namespace Machine {
|
|
|
3129
3179
|
type InvokeLogic<Invoke> = Invoke extends {
|
|
3130
3180
|
readonly effect: infer Source;
|
|
3131
3181
|
} ? InvokeFactoryResult<Source> extends infer Fx extends Effect.Effect<any, any, any> ? Logic<void, never, Effect.Error<Fx>, Effect.Services<Fx>, Effect.Success<Fx>> : never : Invoke extends {
|
|
3182
|
+
readonly stream: infer Source;
|
|
3183
|
+
} ? InvokeFactoryResult<Source> extends infer SourceStream extends Stream.Stream<any, any, any> ? Logic<void, never, Stream.Error<SourceStream>, Stream.Services<SourceStream>, void> : never : Invoke extends {
|
|
3132
3184
|
readonly after: unknown;
|
|
3133
3185
|
} ? Logic<void, never, never, never, void> : Invoke extends {
|
|
3134
3186
|
readonly logic: infer Source;
|
|
@@ -3205,6 +3257,8 @@ export declare namespace Machine {
|
|
|
3205
3257
|
readonly onDone?: infer Handler;
|
|
3206
3258
|
} ? EventTransitionReturn<NonNullable<Handler>> : never) | (Invoke extends {
|
|
3207
3259
|
readonly onFailure?: infer Handler;
|
|
3260
|
+
} ? EventTransitionReturn<NonNullable<Handler>> : never) | (Invoke extends {
|
|
3261
|
+
readonly onElement?: infer Handler;
|
|
3208
3262
|
} ? EventTransitionReturn<NonNullable<Handler>> : never) | (Invoke extends {
|
|
3209
3263
|
readonly onSnapshot?: infer Handler;
|
|
3210
3264
|
} ? EventTransitionReturn<NonNullable<Handler>> : never) : never;
|
|
@@ -3256,7 +3310,6 @@ export declare namespace Machine {
|
|
|
3256
3310
|
* @since 0.4.0
|
|
3257
3311
|
*/
|
|
3258
3312
|
type ConfigServices<Config> = Effect.Services<EventHandlerReturn<Config>> | Effect.Services<AlwaysReturn<Config>> | Effect.Services<DoneReturn<Config>> | Effect.Services<StateActionReturn<Config, "entry">> | Effect.Services<StateActionReturn<Config, "exit">> | Effect.Services<HistoryDefaultReturn<Config>> | Effect.Services<ChoiceReturn<Config>> | InvokeRequirements<Config>;
|
|
3259
|
-
type TransitionWhenContext<Context> = Omit<Context, "target">;
|
|
3260
3313
|
/** Type evidence retained by {@link transition} without affecting runtime data. */
|
|
3261
3314
|
interface TransitionTyped<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateNodeIdentifier<States>, Context, Reenter extends boolean> {
|
|
3262
3315
|
readonly [TransitionTypeId]: {
|
|
@@ -3270,9 +3323,19 @@ export declare namespace Machine {
|
|
|
3270
3323
|
};
|
|
3271
3324
|
}
|
|
3272
3325
|
/** The only transition value accepted by machine handler APIs. */
|
|
3273
|
-
type TransitionConfig<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateNodeIdentifier<States>, Context, Reenter extends boolean = false> = (TransitionTyped<States, Events, Emits, StateId, Context, Reenter> | TargetlessTransitionTyped) & {
|
|
3326
|
+
type TransitionConfig<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateNodeIdentifier<States>, Context, Reenter extends boolean = false> = (TransitionTyped<States, Events, Emits, StateId, Context, Reenter> | TargetlessTransitionTyped | TargetlessTransitionInput<Events, Emits, Context>) & {
|
|
3274
3327
|
readonly reenter?: [Reenter] extends [true] ? boolean : never;
|
|
3275
3328
|
};
|
|
3329
|
+
/** Direct shorthand for a non-reentering targetless transition. */
|
|
3330
|
+
interface TargetlessTransitionResolver<Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Context> {
|
|
3331
|
+
<ResolvedContext extends Omit<Context, "target">>(context: ResolvedContext, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>): undefined;
|
|
3332
|
+
}
|
|
3333
|
+
type TargetlessTransitionInput<Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Context> = {
|
|
3334
|
+
readonly target: TargetlessSelector;
|
|
3335
|
+
readonly resolve?: TargetlessTransitionResolver<Events, Emits, Context>;
|
|
3336
|
+
readonly branches?: never;
|
|
3337
|
+
readonly reenter?: never;
|
|
3338
|
+
};
|
|
3276
3339
|
type SelectionBuilder<Selection> = Selection extends TargetSelection<infer Builder, any, any> ? Builder : never;
|
|
3277
3340
|
type SelectionKind<Selection> = Selection extends TargetSelection<any, any, infer Kind> ? Kind : never;
|
|
3278
3341
|
type SelectionPath<Selection> = Selection extends TargetSelection<any, infer Path, any> ? Path : never;
|
|
@@ -3280,33 +3343,61 @@ export declare namespace Machine {
|
|
|
3280
3343
|
readonly from: (...args: any) => infer Result;
|
|
3281
3344
|
} ? Result : never);
|
|
3282
3345
|
type SelectedTargetResult<Selection> = SelectionBuilder<Selection> extends infer Builder ? TargetBuilderResult<Builder> : never;
|
|
3283
|
-
type TransitionResolveContext<Context, Selection
|
|
3284
|
-
readonly match: Match;
|
|
3285
|
-
}) & (SelectionKind<Selection> extends "none" ? {} : {
|
|
3346
|
+
type TransitionResolveContext<Context, Selection> = Omit<Context, "target"> & (SelectionKind<Selection> extends "none" ? {} : {
|
|
3286
3347
|
readonly target: SelectionBuilder<Selection>;
|
|
3287
3348
|
});
|
|
3288
|
-
type TransitionResolver<Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Context, Selection
|
|
3349
|
+
type TransitionResolver<Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Context, Selection> = (context: TransitionResolveContext<Context, Selection>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => SelectionKind<Selection> extends "none" ? undefined : SelectedTargetResult<Selection> | undefined;
|
|
3289
3350
|
type TransitionDirectInput<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateNodeIdentifier<States>, Context, Reenter extends boolean, Selection extends TargetSelection<any, any, any>> = {
|
|
3290
3351
|
readonly target: (to: TargetSelector<States, StateId>) => Selection;
|
|
3291
3352
|
readonly resolve?: TransitionResolver<Events, Emits, Context, Selection>;
|
|
3292
|
-
readonly
|
|
3293
|
-
readonly otherwise?: never;
|
|
3353
|
+
readonly branches?: never;
|
|
3294
3354
|
readonly reenter?: Reenter;
|
|
3295
3355
|
};
|
|
3296
|
-
|
|
3297
|
-
|
|
3298
|
-
readonly
|
|
3299
|
-
readonly
|
|
3300
|
-
|
|
3301
|
-
|
|
3302
|
-
|
|
3303
|
-
readonly
|
|
3356
|
+
/** One named destination declared by a branching transition. */
|
|
3357
|
+
interface TransitionBranchInput<Selection extends TargetSelection<any, any, any> = TargetSelection<any, any, any>> {
|
|
3358
|
+
readonly target: Selection;
|
|
3359
|
+
readonly title?: string;
|
|
3360
|
+
}
|
|
3361
|
+
/** Opaque evidence that a branching resolver selected one declared branch. */
|
|
3362
|
+
interface SelectedBranch<out Key extends string, out Result> {
|
|
3363
|
+
readonly [Topology.SelectedBranchTypeId]: {
|
|
3364
|
+
readonly key: Types.Covariant<Key>;
|
|
3365
|
+
readonly result: Types.Covariant<Result>;
|
|
3366
|
+
};
|
|
3367
|
+
}
|
|
3368
|
+
type SelectedBranchCallable<Callable, Key extends string> = Callable extends {
|
|
3369
|
+
(...args: infer Arguments1): infer Result1;
|
|
3370
|
+
(...args: infer Arguments2): infer Result2;
|
|
3371
|
+
} ? {
|
|
3372
|
+
(...args: Arguments1): SelectedBranch<Key, Result1>;
|
|
3373
|
+
(...args: Arguments2): SelectedBranch<Key, Result2>;
|
|
3374
|
+
} : Callable extends (...args: infer Arguments) => infer Result ? (...args: Arguments) => SelectedBranch<Key, Result> : {};
|
|
3375
|
+
type SelectedBranchBuilderProperties<Builder, Key extends string> = {
|
|
3376
|
+
readonly [Property in keyof Builder]: Builder[Property] extends (...args: any) => any ? SelectedBranchCallable<Builder[Property], Key> : Builder[Property];
|
|
3304
3377
|
};
|
|
3305
|
-
|
|
3378
|
+
/** Target-specific builder that brands every construction with its branch key. */
|
|
3379
|
+
type SelectedBranchBuilder<Builder, Key extends string> = SelectedBranchCallable<Builder, Key> & SelectedBranchBuilderProperties<Builder, Key>;
|
|
3380
|
+
type BranchSelectors<Branches extends Readonly<Record<string, TransitionBranchInput>>> = {
|
|
3381
|
+
readonly [Key in Extract<keyof Branches, string>]: SelectedBranchBuilder<SelectionBuilder<Branches[Key]["target"]>, Key>;
|
|
3382
|
+
};
|
|
3383
|
+
type BranchSelectionResult<Branches extends Readonly<Record<string, TransitionBranchInput>>> = {
|
|
3384
|
+
readonly [Key in Extract<keyof Branches, string>]: SelectedBranch<Key, SelectedTargetResult<Branches[Key]["target"]>>;
|
|
3385
|
+
}[Extract<keyof Branches, string>];
|
|
3386
|
+
type TransitionBranchesResolveContext<Context, Branches extends Readonly<Record<string, TransitionBranchInput>>> = Omit<Context, "target"> & {
|
|
3387
|
+
readonly select: BranchSelectors<Branches>;
|
|
3388
|
+
};
|
|
3389
|
+
type TransitionBranchesResolver<Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Context, Branches extends Readonly<Record<string, TransitionBranchInput>>> = (context: TransitionBranchesResolveContext<Context, Branches>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => BranchSelectionResult<Branches>;
|
|
3390
|
+
type TransitionBranchesInput<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateNodeIdentifier<States>, Context, Reenter extends boolean, Branches extends Readonly<Record<string, TransitionBranchInput>>> = {
|
|
3306
3391
|
readonly target?: never;
|
|
3307
|
-
|
|
3308
|
-
|
|
3309
|
-
|
|
3392
|
+
/**
|
|
3393
|
+
* Declares every possible destination under a stable semantic key.
|
|
3394
|
+
*
|
|
3395
|
+
* Branches are captured once in ECMAScript property order. Array-index
|
|
3396
|
+
* keys are rejected so reordering ordinary named properties affects only
|
|
3397
|
+
* presentation order; the key remains the testing and inspection identity.
|
|
3398
|
+
*/
|
|
3399
|
+
readonly branches: (to: TargetSelector<States, StateId>) => Branches;
|
|
3400
|
+
readonly resolve: TransitionBranchesResolver<Events, Emits, Context, Branches>;
|
|
3310
3401
|
readonly reenter?: Reenter;
|
|
3311
3402
|
};
|
|
3312
3403
|
type InvokeTransition<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateNodeIdentifier<States>, Context> = TransitionConfig<States, Events, Emits, StateId, Context, true>;
|
|
@@ -3329,32 +3420,50 @@ export declare namespace Machine {
|
|
|
3329
3420
|
type InvokeConfig<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 []> = InvokeOwned<States, Events, Emits, StateId> & ({
|
|
3330
3421
|
readonly id: string;
|
|
3331
3422
|
readonly effect: (context: InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>) => Effect.Effect<any, any, any>;
|
|
3423
|
+
readonly stream?: never;
|
|
3332
3424
|
readonly after?: never;
|
|
3333
3425
|
readonly logic?: never;
|
|
3334
3426
|
readonly child?: never;
|
|
3335
3427
|
readonly address?: never;
|
|
3336
3428
|
readonly onDone?: unknown;
|
|
3337
3429
|
readonly onFailure?: unknown;
|
|
3430
|
+
readonly onElement?: never;
|
|
3431
|
+
readonly onSnapshot?: never;
|
|
3432
|
+
} | {
|
|
3433
|
+
readonly id: string;
|
|
3434
|
+
readonly stream: (context: InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>) => Stream.Stream<any, any, any>;
|
|
3435
|
+
readonly effect?: never;
|
|
3436
|
+
readonly after?: never;
|
|
3437
|
+
readonly logic?: never;
|
|
3438
|
+
readonly child?: never;
|
|
3439
|
+
readonly address?: never;
|
|
3440
|
+
readonly onElement?: unknown;
|
|
3441
|
+
readonly onDone: unknown;
|
|
3442
|
+
readonly onFailure?: unknown;
|
|
3338
3443
|
readonly onSnapshot?: never;
|
|
3339
3444
|
} | {
|
|
3340
3445
|
readonly id: string;
|
|
3341
3446
|
readonly after: InvokeSource<Duration.Input, InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>>;
|
|
3342
3447
|
readonly effect?: never;
|
|
3448
|
+
readonly stream?: never;
|
|
3343
3449
|
readonly logic?: never;
|
|
3344
3450
|
readonly child?: never;
|
|
3345
3451
|
readonly address?: never;
|
|
3346
3452
|
readonly onDone: unknown;
|
|
3347
3453
|
readonly onFailure?: never;
|
|
3454
|
+
readonly onElement?: never;
|
|
3348
3455
|
readonly onSnapshot?: never;
|
|
3349
3456
|
} | {
|
|
3350
3457
|
readonly id: string;
|
|
3351
3458
|
readonly address: string;
|
|
3352
3459
|
readonly logic: InvokeSource<Logic<any, any, any, any, any, any>, InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>>;
|
|
3353
3460
|
readonly effect?: never;
|
|
3461
|
+
readonly stream?: never;
|
|
3354
3462
|
readonly after?: never;
|
|
3355
3463
|
readonly child?: never;
|
|
3356
3464
|
readonly onDone?: unknown;
|
|
3357
3465
|
readonly onFailure?: unknown;
|
|
3466
|
+
readonly onElement?: never;
|
|
3358
3467
|
readonly onSnapshot?: unknown;
|
|
3359
3468
|
} | {
|
|
3360
3469
|
readonly child: ChildMachine.Any;
|
|
@@ -3362,10 +3471,12 @@ export declare namespace Machine {
|
|
|
3362
3471
|
readonly id?: never;
|
|
3363
3472
|
readonly address?: never;
|
|
3364
3473
|
readonly effect?: never;
|
|
3474
|
+
readonly stream?: never;
|
|
3365
3475
|
readonly after?: never;
|
|
3366
3476
|
readonly logic?: never;
|
|
3367
3477
|
readonly onDone?: unknown;
|
|
3368
3478
|
readonly onFailure?: unknown;
|
|
3479
|
+
readonly onElement?: never;
|
|
3369
3480
|
readonly onSnapshot?: unknown;
|
|
3370
3481
|
});
|
|
3371
3482
|
/** State-bound inline invocation configuration. */
|
|
@@ -3392,14 +3503,23 @@ export declare namespace Machine {
|
|
|
3392
3503
|
} : {
|
|
3393
3504
|
readonly onFailure?: never;
|
|
3394
3505
|
} : never;
|
|
3506
|
+
type InvokeElementRequirement<Value, Handler> = InvokeHandlerRequirement<Value, Handler> extends infer Requirement ? Requirement extends {
|
|
3507
|
+
readonly handler: infer Required;
|
|
3508
|
+
} ? {
|
|
3509
|
+
readonly onElement: Required;
|
|
3510
|
+
} : {
|
|
3511
|
+
readonly onElement?: never;
|
|
3512
|
+
} : never;
|
|
3395
3513
|
type TimerInvokeArgs<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 []> = {
|
|
3396
3514
|
readonly id: InvokeLifecycleId;
|
|
3397
3515
|
readonly after: InvokeSource<Duration.Input, InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>>;
|
|
3398
3516
|
readonly effect?: never;
|
|
3517
|
+
readonly stream?: never;
|
|
3399
3518
|
readonly logic?: never;
|
|
3400
3519
|
readonly child?: never;
|
|
3401
3520
|
readonly address?: never;
|
|
3402
3521
|
readonly onFailure?: never;
|
|
3522
|
+
readonly onElement?: never;
|
|
3403
3523
|
readonly onSnapshot?: never;
|
|
3404
3524
|
readonly onDone: InvokeTransition<States, Events, Emits, StateId, InvokeDoneContext<States, Events, Emits, StateId, void, InputEvents, ParentEvents>>;
|
|
3405
3525
|
};
|
|
@@ -3408,8 +3528,10 @@ export declare namespace Machine {
|
|
|
3408
3528
|
readonly address: Address & ChildAddress.Compatibility<Address, ChildEvent>;
|
|
3409
3529
|
readonly logic: Source;
|
|
3410
3530
|
readonly effect?: never;
|
|
3531
|
+
readonly stream?: never;
|
|
3411
3532
|
readonly after?: never;
|
|
3412
3533
|
readonly child?: never;
|
|
3534
|
+
readonly onElement?: never;
|
|
3413
3535
|
readonly onSnapshot?: InvokeTransition<States, Events, Emits, StateId, InvokeSnapshotContext<States, Events, Emits, StateId, NoInfer<ChildState>, NoInfer<ChildError>, NoInfer<ChildOutput>, InputEvents, ParentEvents>>;
|
|
3414
3536
|
} & InvokeDoneRequirement<NoInfer<ChildOutput>, InvokeTransition<States, Events, Emits, StateId, InvokeDoneContext<States, Events, Emits, StateId, NoInfer<ChildOutput>, InputEvents, ParentEvents>>> & InvokeFailureRequirement<NoInfer<ChildError>, InvokeTransition<States, Events, Emits, StateId, InvokeFailureContext<States, Events, Emits, StateId, NoInfer<ChildError>, InputEvents, ParentEvents>>>;
|
|
3415
3537
|
type ChildInvokeArgs<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, ChildDefinition extends Machine.Any, Child extends ChildMachine<string, ChildDefinition>, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> = {
|
|
@@ -3417,8 +3539,10 @@ export declare namespace Machine {
|
|
|
3417
3539
|
readonly id?: never;
|
|
3418
3540
|
readonly address?: never;
|
|
3419
3541
|
readonly effect?: never;
|
|
3542
|
+
readonly stream?: never;
|
|
3420
3543
|
readonly after?: never;
|
|
3421
3544
|
readonly logic?: never;
|
|
3545
|
+
readonly onElement?: never;
|
|
3422
3546
|
readonly onSnapshot?: InvokeTransition<States, Events, Emits, StateId, InvokeSnapshotContext<States, Events, Emits, StateId, Snapshot<Machine.States<ChildDefinition>>, Error<ChildDefinition>, Output<ChildDefinition>, InputEvents, ParentEvents>>;
|
|
3423
3547
|
} & (Input<ChildDefinition> extends typeof Schema.Void ? {
|
|
3424
3548
|
readonly input?: never;
|
|
@@ -3443,6 +3567,12 @@ export declare namespace Machine {
|
|
|
3443
3567
|
readonly effect: infer Source;
|
|
3444
3568
|
} ? InvokeFactoryResult<Source> extends infer Fx extends Effect.Effect<any, any, any> ? InvokeDoneRequirement<Effect.Success<Fx>, InvokeTransition<States, Events, Emits, StateId, InvokeDoneContext<States, Events, Emits, StateId, Effect.Success<Fx>, InputEvents, ParentEvents>>> & InvokeFailureRequirement<Effect.Error<Fx>, InvokeTransition<States, Events, Emits, StateId, InvokeFailureContext<States, Events, Emits, StateId, Effect.Error<Fx>, InputEvents, ParentEvents>>> & {
|
|
3445
3569
|
readonly onSnapshot?: never;
|
|
3570
|
+
} : never : Raw extends {
|
|
3571
|
+
readonly stream: infer Source;
|
|
3572
|
+
} ? InvokeFactoryResult<Source> extends infer SourceStream extends Stream.Stream<any, any, any> ? InvokeElementRequirement<Stream.Success<SourceStream>, InvokeTransition<States, Events, Emits, StateId, InvokeElementContext<States, Events, Emits, StateId, Stream.Success<SourceStream>, InputEvents, ParentEvents>>> & {
|
|
3573
|
+
readonly onDone: InvokeTransition<States, Events, Emits, StateId, InvokeDoneContext<States, Events, Emits, StateId, void, InputEvents, ParentEvents>>;
|
|
3574
|
+
} & InvokeFailureRequirement<Stream.Error<SourceStream>, InvokeTransition<States, Events, Emits, StateId, InvokeFailureContext<States, Events, Emits, StateId, Stream.Error<SourceStream>, InputEvents, ParentEvents>>> & {
|
|
3575
|
+
readonly onSnapshot?: never;
|
|
3446
3576
|
} : never : Raw extends {
|
|
3447
3577
|
readonly after: unknown;
|
|
3448
3578
|
} ? {
|
|
@@ -3693,7 +3823,7 @@ export declare namespace Machine {
|
|
|
3693
3823
|
readonly [Key in UnknownKeys]: HandlerValidationError<"Handler config contains an event key that does not exist", StateId, Key>;
|
|
3694
3824
|
};
|
|
3695
3825
|
} : unknown;
|
|
3696
|
-
type TransitionResultInitialTargetPath<Result> = IsAny<Result> extends true ? never : Result extends Effect.Effect<infer Success, any, any> ? TransitionResultInitialTargetPath<Success> : Result extends StateConstruction<infer Constructed> ? TransitionResultInitialTargetPath<Constructed> : Result extends {
|
|
3826
|
+
type TransitionResultInitialTargetPath<Result> = IsAny<Result> extends true ? never : Result extends Effect.Effect<infer Success, any, any> ? TransitionResultInitialTargetPath<Success> : Result extends SelectedBranch<any, infer Selected> ? TransitionResultInitialTargetPath<Selected> : Result extends StateConstruction<infer Constructed> ? TransitionResultInitialTargetPath<Constructed> : Result extends {
|
|
3697
3827
|
readonly [Topology.InitialTargetTypeId]: typeof Topology.InitialTargetTypeId;
|
|
3698
3828
|
readonly _tag: "InitialTarget";
|
|
3699
3829
|
} ? Result extends {
|
|
@@ -3818,6 +3948,13 @@ export declare namespace Machine {
|
|
|
3818
3948
|
*/
|
|
3819
3949
|
type StateConfigs<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, EventTag extends TagOf<Events[number]>, E, R> = Readonly<Record<PropertyKey, StateConfig<States, Events, Emits, StateId, EventTag, E, R> | ChoiceStateConfig<States, Events, Emits, ChoiceIdentifier<States>>>>;
|
|
3820
3950
|
}
|
|
3951
|
+
/**
|
|
3952
|
+
* Extracts the complete logical snapshot represented by a state definition.
|
|
3953
|
+
*
|
|
3954
|
+
* @category utility types
|
|
3955
|
+
* @since 0.15.0
|
|
3956
|
+
*/
|
|
3957
|
+
export type Snapshot<Defined extends Machine.DefinedStates<any>> = Defined extends Machine.DefinedStates<infer States> ? Machine.Snapshot<States> : never;
|
|
3821
3958
|
/**
|
|
3822
3959
|
* Returns `true` if a value is a `Machine`.
|
|
3823
3960
|
*
|
|
@@ -3833,7 +3970,43 @@ export declare const isMachine: (u: unknown) => u is Machine.Any;
|
|
|
3833
3970
|
*/
|
|
3834
3971
|
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>;
|
|
3835
3972
|
/**
|
|
3836
|
-
* Defines
|
|
3973
|
+
* Defines one reusable active state while preserving its exact child topology.
|
|
3974
|
+
*
|
|
3975
|
+
* Prefer declaring state nodes inline in {@link states}. Use this constructor
|
|
3976
|
+
* only when the same state definition is mounted more than once.
|
|
3977
|
+
* Tagged schemas are already reusable and do not need this constructor.
|
|
3978
|
+
*
|
|
3979
|
+
* **Example** (Repeated compound state)
|
|
3980
|
+
*
|
|
3981
|
+
* ```ts
|
|
3982
|
+
* import { Schema } from "effect"
|
|
3983
|
+
* import { Machine } from "@typeonce/effect-machine"
|
|
3984
|
+
*
|
|
3985
|
+
* const TradingState = Schema.TaggedUnion({
|
|
3986
|
+
* InSession: {},
|
|
3987
|
+
* Applying: {}
|
|
3988
|
+
* })
|
|
3989
|
+
* const TradingSlot = Machine.state({
|
|
3990
|
+
* initial: "Idle",
|
|
3991
|
+
* states: {
|
|
3992
|
+
* Idle: {},
|
|
3993
|
+
* InSession: TradingState.cases.InSession,
|
|
3994
|
+
* Applying: TradingState.cases.Applying
|
|
3995
|
+
* }
|
|
3996
|
+
* })
|
|
3997
|
+
*
|
|
3998
|
+
* const States = Machine.states({
|
|
3999
|
+
* slot1: TradingSlot,
|
|
4000
|
+
* slot2: TradingSlot
|
|
4001
|
+
* })
|
|
4002
|
+
* ```
|
|
4003
|
+
*
|
|
4004
|
+
* @category constructors
|
|
4005
|
+
* @since 0.15.0
|
|
4006
|
+
*/
|
|
4007
|
+
export declare const state: StateConstructor;
|
|
4008
|
+
/**
|
|
4009
|
+
* Defines the complete state tree while preserving literal state paths.
|
|
3837
4010
|
*
|
|
3838
4011
|
* **When to use**
|
|
3839
4012
|
*
|
|
@@ -3842,7 +4015,8 @@ export declare const isFinal: <const States extends Machine.StateSchemas, const
|
|
|
3842
4015
|
*
|
|
3843
4016
|
* **Details**
|
|
3844
4017
|
*
|
|
3845
|
-
* The returned `states` property is
|
|
4018
|
+
* The returned `states` property is an immutable structural capture of the
|
|
4019
|
+
* supplied tree.
|
|
3846
4020
|
* `Machine.make` derives its initial target selector from that tree and
|
|
3847
4021
|
* enforces compound and parallel initial-state rules. Active nodes may omit
|
|
3848
4022
|
* `schema` when they own no value and still participate fully in targeting,
|
|
@@ -3856,7 +4030,7 @@ export declare const isFinal: <const States extends Machine.StateSchemas, const
|
|
|
3856
4030
|
*
|
|
3857
4031
|
* class Idle extends Schema.TaggedClass<Idle>("Idle")("Idle", {}) {}
|
|
3858
4032
|
*
|
|
3859
|
-
* const States = Machine.
|
|
4033
|
+
* const States = Machine.states({ idle: Idle })
|
|
3860
4034
|
*
|
|
3861
4035
|
* Machine.make({
|
|
3862
4036
|
* states: States.states,
|
|
@@ -3871,7 +4045,7 @@ export declare const isFinal: <const States extends Machine.StateSchemas, const
|
|
|
3871
4045
|
* @category constructors
|
|
3872
4046
|
* @since 0.4.0
|
|
3873
4047
|
*/
|
|
3874
|
-
export declare const
|
|
4048
|
+
export declare const states: StatesConstructor;
|
|
3875
4049
|
type InitialDirectInput<States extends Machine.StateSchemas, Input, Selection extends Machine.TargetSelection<any, any, any>> = {
|
|
3876
4050
|
readonly target: (to: Machine.InitialSelector<States>) => Selection;
|
|
3877
4051
|
readonly resolve?: (context: {
|
|
@@ -3891,7 +4065,7 @@ type MakeConfig<States extends Machine.StateSchemas, InputEvents extends Readonl
|
|
|
3891
4065
|
readonly input?: Input;
|
|
3892
4066
|
readonly initial: unknown;
|
|
3893
4067
|
};
|
|
3894
|
-
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>> =
|
|
4068
|
+
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>> = Definition<States, readonly [...InputEvents, ...InternalEvents], Input, InitialE, InitialR, Machine.FinalStateFromDefinition<States>, Machine.TerminalOutput<States>, Emits, InputEvents, ParentEvents>;
|
|
3895
4069
|
interface Make {
|
|
3896
4070
|
<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 [], const InitialSelection extends Machine.TargetSelection<any, any, any> = Machine.TargetSelection<any, any, any>>(config: Omit<MakeConfig<States, InputEvents, Emits, Input, InitialE, InitialR, InternalEvents, ParentEvents>, "initial"> & {
|
|
3897
4071
|
readonly initial: InitialDirectInput<States, Input["Type"], InitialSelection>;
|
|
@@ -3908,7 +4082,7 @@ interface Make {
|
|
|
3908
4082
|
* State and event schemas provide runtime boundary validation while their
|
|
3909
4083
|
* decoded types drive handler, state, event, target, error, and service
|
|
3910
4084
|
* inference. State-tree validation is applied whether `states` comes from
|
|
3911
|
-
* `
|
|
4085
|
+
* `states` or is passed inline. Call `handle` on the returned definition
|
|
3912
4086
|
* to implement state behavior with ordinary TypeScript control flow.
|
|
3913
4087
|
*
|
|
3914
4088
|
* `Machine.events` defines the public input protocol. `Machine.internalEvents`
|
|
@@ -3933,7 +4107,7 @@ interface Make {
|
|
|
3933
4107
|
* by: Schema.Number
|
|
3934
4108
|
* }) {}
|
|
3935
4109
|
*
|
|
3936
|
-
* const States = Machine.
|
|
4110
|
+
* const States = Machine.states({ Count })
|
|
3937
4111
|
* const Events = Machine.events(Increment)
|
|
3938
4112
|
*
|
|
3939
4113
|
* const counter = Machine.make({
|
|
@@ -3956,7 +4130,7 @@ interface Make {
|
|
|
3956
4130
|
* })
|
|
3957
4131
|
* ```
|
|
3958
4132
|
*
|
|
3959
|
-
* @see {@link
|
|
4133
|
+
* @see {@link states} for typed state-tree helpers.
|
|
3960
4134
|
* @category constructors
|
|
3961
4135
|
* @since 0.4.0
|
|
3962
4136
|
*/
|
|
@@ -3980,9 +4154,14 @@ export type EventOf<Protocol extends Machine.EventProtocol.Any> = Machine.EventO
|
|
|
3980
4154
|
* **Example**
|
|
3981
4155
|
*
|
|
3982
4156
|
* ```ts
|
|
3983
|
-
* const
|
|
3984
|
-
*
|
|
3985
|
-
*
|
|
4157
|
+
* export const Event = Machine.events(
|
|
4158
|
+
* Schema.TaggedUnion({
|
|
4159
|
+
* Increment: { by: Schema.Number },
|
|
4160
|
+
* Reset: {}
|
|
4161
|
+
* })
|
|
4162
|
+
* )
|
|
4163
|
+
* const machine = Machine.make({ events: Event, ... })
|
|
4164
|
+
* yield* ref.send(Event.Increment({ by: 1 }))
|
|
3986
4165
|
* ```
|
|
3987
4166
|
*
|
|
3988
4167
|
* @category constructors
|
|
@@ -4003,11 +4182,16 @@ export declare const events: {
|
|
|
4003
4182
|
* **Example**
|
|
4004
4183
|
*
|
|
4005
4184
|
* ```ts
|
|
4006
|
-
* const
|
|
4007
|
-
*
|
|
4185
|
+
* const Internal = Machine.internalEvents(
|
|
4186
|
+
* Schema.TaggedUnion({
|
|
4187
|
+
* Loaded: { value: Schema.String },
|
|
4188
|
+
* Failed: { message: Schema.String }
|
|
4189
|
+
* })
|
|
4190
|
+
* )
|
|
4191
|
+
* const machine = Machine.make({ internalEvents: Internal, ... })
|
|
4008
4192
|
*
|
|
4009
4193
|
* // Inside a transition callback:
|
|
4010
|
-
* enqueue.raise(
|
|
4194
|
+
* enqueue.raise(Internal.Loaded({ value }))
|
|
4011
4195
|
* ```
|
|
4012
4196
|
*
|
|
4013
4197
|
* @category constructors
|
|
@@ -4023,6 +4207,17 @@ export declare const internalEvents: {
|
|
|
4023
4207
|
* implicitly to a parent machine. Observe them through `MachineRef.emissions` or
|
|
4024
4208
|
* the AtomMachine emission stream adapters.
|
|
4025
4209
|
*
|
|
4210
|
+
* **Example**
|
|
4211
|
+
*
|
|
4212
|
+
* ```ts
|
|
4213
|
+
* const Emitted = Machine.emittedEvents(
|
|
4214
|
+
* Schema.TaggedUnion({
|
|
4215
|
+
* Saved: { id: Schema.String }
|
|
4216
|
+
* })
|
|
4217
|
+
* )
|
|
4218
|
+
* const machine = Machine.make({ emittedEvents: Emitted, ... })
|
|
4219
|
+
* ```
|
|
4220
|
+
*
|
|
4026
4221
|
* @category constructors
|
|
4027
4222
|
* @since 0.10.0
|
|
4028
4223
|
*/
|
|
@@ -4060,7 +4255,7 @@ export declare const emittedEvents: {
|
|
|
4060
4255
|
* import { Machine } from "@typeonce/effect-machine"
|
|
4061
4256
|
*
|
|
4062
4257
|
* class Idle extends Schema.TaggedClass<Idle>("Idle")("Idle", {}) {}
|
|
4063
|
-
* const States = Machine.
|
|
4258
|
+
* const States = Machine.states({ Idle })
|
|
4064
4259
|
* const machine = Machine.make({
|
|
4065
4260
|
* states: States.states,
|
|
4066
4261
|
* events: Machine.events(),
|
|
@@ -4107,7 +4302,7 @@ export declare const encodeSnapshot: <const States extends Machine.StateSchemas,
|
|
|
4107
4302
|
* import { Machine } from "@typeonce/effect-machine"
|
|
4108
4303
|
*
|
|
4109
4304
|
* class Idle extends Schema.TaggedClass<Idle>("Idle")("Idle", {}) {}
|
|
4110
|
-
* const States = Machine.
|
|
4305
|
+
* const States = Machine.states({ Idle })
|
|
4111
4306
|
* const machine = Machine.make({
|
|
4112
4307
|
* states: States.states,
|
|
4113
4308
|
* events: Machine.events(),
|
|
@@ -4129,72 +4324,76 @@ export declare const encodeSnapshot: <const States extends Machine.StateSchemas,
|
|
|
4129
4324
|
* @since 0.4.0
|
|
4130
4325
|
*/
|
|
4131
4326
|
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>>;
|
|
4132
|
-
type EffectInvokeSource<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,
|
|
4327
|
+
type EffectInvokeSource<States extends Machine.StateSchemas, Events extends ReadonlyArray<Machine.TaggedSchema>, Emits extends ReadonlyArray<Machine.TaggedSchema>, InputEvents extends ReadonlyArray<Machine.TaggedSchema>, ParentEvents extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, Source extends (context: Machine.InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>) => Effect.Effect<unknown, unknown, unknown>> = {
|
|
4133
4328
|
readonly id: InvokeLifecycleId;
|
|
4134
4329
|
readonly effect: Source;
|
|
4330
|
+
readonly stream?: never;
|
|
4331
|
+
readonly after?: never;
|
|
4332
|
+
readonly logic?: never;
|
|
4333
|
+
readonly child?: never;
|
|
4334
|
+
readonly address?: never;
|
|
4335
|
+
readonly onElement?: never;
|
|
4336
|
+
readonly onSnapshot?: never;
|
|
4337
|
+
};
|
|
4338
|
+
type EffectDoneHandler<States extends Machine.StateSchemas, Events extends ReadonlyArray<Machine.TaggedSchema>, Emits extends ReadonlyArray<Machine.TaggedSchema>, InputEvents extends ReadonlyArray<Machine.TaggedSchema>, ParentEvents extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, Source extends (...args: ReadonlyArray<never>) => Effect.Effect<unknown, unknown, unknown>> = Machine.InvokeTransition<States, Events, Emits, StateId, Machine.InvokeDoneContext<States, Events, Emits, StateId, Effect.Success<ReturnType<NoInfer<Source>>>, InputEvents, ParentEvents>>;
|
|
4339
|
+
type EffectFailureHandler<States extends Machine.StateSchemas, Events extends ReadonlyArray<Machine.TaggedSchema>, Emits extends ReadonlyArray<Machine.TaggedSchema>, InputEvents extends ReadonlyArray<Machine.TaggedSchema>, ParentEvents extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, Source extends (...args: ReadonlyArray<never>) => Effect.Effect<unknown, unknown, unknown>> = Machine.InvokeTransition<States, Events, Emits, StateId, Machine.InvokeFailureContext<States, Events, Emits, StateId, Effect.Error<ReturnType<NoInfer<Source>>>, InputEvents, ParentEvents>>;
|
|
4340
|
+
type EffectInvokeResult<States extends Machine.StateSchemas, Events extends ReadonlyArray<Machine.TaggedSchema>, Emits extends ReadonlyArray<Machine.TaggedSchema>, InputEvents extends ReadonlyArray<Machine.TaggedSchema>, ParentEvents extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, Source extends (...args: ReadonlyArray<never>) => Effect.Effect<unknown, unknown, unknown>> = Machine.InvokeConfig<States, Events, Emits, StateId, InputEvents, ParentEvents> & Machine.InvokeTyped<Effect.Success<ReturnType<Source>>, Effect.Error<ReturnType<Source>>, Effect.Services<ReturnType<Source>>, never>;
|
|
4341
|
+
type StreamInvokeSource<States extends Machine.StateSchemas, Events extends ReadonlyArray<Machine.TaggedSchema>, Emits extends ReadonlyArray<Machine.TaggedSchema>, InputEvents extends ReadonlyArray<Machine.TaggedSchema>, ParentEvents extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, Source extends (...args: ReadonlyArray<any>) => unknown> = {
|
|
4342
|
+
readonly id: InvokeLifecycleId;
|
|
4343
|
+
readonly stream: Source & ((context: Machine.InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>) => unknown);
|
|
4344
|
+
readonly effect?: never;
|
|
4135
4345
|
readonly after?: never;
|
|
4136
4346
|
readonly logic?: never;
|
|
4137
4347
|
readonly child?: never;
|
|
4138
4348
|
readonly address?: never;
|
|
4139
4349
|
readonly onSnapshot?: never;
|
|
4140
4350
|
};
|
|
4141
|
-
type
|
|
4142
|
-
type
|
|
4143
|
-
type
|
|
4351
|
+
type StreamSourceResult<Source extends (...args: ReadonlyArray<any>) => unknown> = ReturnType<Source> extends infer Result extends Stream.Stream<any, any, any> ? Result : never;
|
|
4352
|
+
type StreamElementHandler<States extends Machine.StateSchemas, Events extends ReadonlyArray<Machine.TaggedSchema>, Emits extends ReadonlyArray<Machine.TaggedSchema>, InputEvents extends ReadonlyArray<Machine.TaggedSchema>, ParentEvents extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, Source extends (...args: ReadonlyArray<any>) => unknown> = Machine.InvokeTransition<States, Events, Emits, StateId, Machine.InvokeElementContext<States, Events, Emits, StateId, Stream.Success<StreamSourceResult<NoInfer<Source>>>, InputEvents, ParentEvents>>;
|
|
4353
|
+
type StreamDoneHandler<States extends Machine.StateSchemas, Events extends ReadonlyArray<Machine.TaggedSchema>, Emits extends ReadonlyArray<Machine.TaggedSchema>, InputEvents extends ReadonlyArray<Machine.TaggedSchema>, ParentEvents extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>> = Machine.InvokeTransition<States, Events, Emits, StateId, Machine.InvokeDoneContext<States, Events, Emits, StateId, void, InputEvents, ParentEvents>>;
|
|
4354
|
+
type StreamFailureHandler<States extends Machine.StateSchemas, Events extends ReadonlyArray<Machine.TaggedSchema>, Emits extends ReadonlyArray<Machine.TaggedSchema>, InputEvents extends ReadonlyArray<Machine.TaggedSchema>, ParentEvents extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, Source extends (...args: ReadonlyArray<any>) => unknown> = Machine.InvokeTransition<States, Events, Emits, StateId, Machine.InvokeFailureContext<States, Events, Emits, StateId, Stream.Error<StreamSourceResult<NoInfer<Source>>>, InputEvents, ParentEvents>>;
|
|
4355
|
+
type StreamInvokeResult<States extends Machine.StateSchemas, Events extends ReadonlyArray<Machine.TaggedSchema>, Emits extends ReadonlyArray<Machine.TaggedSchema>, InputEvents extends ReadonlyArray<Machine.TaggedSchema>, ParentEvents extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, Source extends (...args: ReadonlyArray<any>) => unknown> = Machine.InvokeConfig<States, Events, Emits, StateId, InputEvents, ParentEvents> & Machine.InvokeTyped<void, Stream.Error<StreamSourceResult<Source>>, Stream.Services<StreamSourceResult<Source>>, never>;
|
|
4144
4356
|
type InvokeChannelIsNever<Value> = IsAny<Value> extends true ? false : [Value] extends [never] ? true : false;
|
|
4145
4357
|
type BoundEffectInvokeSource<States extends Machine.StateSchemas, Events extends ReadonlyArray<Machine.TaggedSchema>, Emits extends ReadonlyArray<Machine.TaggedSchema>, InputEvents extends ReadonlyArray<Machine.TaggedSchema>, ParentEvents extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, Source extends (context: Machine.InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>) => Effect.Effect<unknown, unknown, unknown>> = {
|
|
4146
4358
|
readonly id: InvokeLifecycleId;
|
|
4147
4359
|
readonly effect: Source;
|
|
4360
|
+
readonly stream?: never;
|
|
4148
4361
|
readonly after?: never;
|
|
4149
4362
|
readonly logic?: never;
|
|
4150
4363
|
readonly child?: never;
|
|
4151
4364
|
readonly address?: never;
|
|
4365
|
+
readonly onElement?: never;
|
|
4152
4366
|
readonly onSnapshot?: never;
|
|
4153
4367
|
};
|
|
4154
4368
|
type BoundEffectDoneHandler<States extends Machine.StateSchemas, Events extends ReadonlyArray<Machine.TaggedSchema>, Emits extends ReadonlyArray<Machine.TaggedSchema>, InputEvents extends ReadonlyArray<Machine.TaggedSchema>, ParentEvents extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, Source extends (...args: ReadonlyArray<never>) => Effect.Effect<unknown, unknown, unknown>> = Machine.InvokeTransition<States, Events, Emits, StateId, Machine.InvokeDoneContext<States, Events, Emits, StateId, Effect.Success<ReturnType<NoInfer<Source>>>, InputEvents, ParentEvents>>;
|
|
4155
4369
|
type BoundEffectFailureHandler<States extends Machine.StateSchemas, Events extends ReadonlyArray<Machine.TaggedSchema>, Emits extends ReadonlyArray<Machine.TaggedSchema>, InputEvents extends ReadonlyArray<Machine.TaggedSchema>, ParentEvents extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, Source extends (...args: ReadonlyArray<never>) => Effect.Effect<unknown, unknown, unknown>> = Machine.InvokeTransition<States, Events, Emits, StateId, Machine.InvokeFailureContext<States, Events, Emits, StateId, Effect.Error<ReturnType<NoInfer<Source>>>, InputEvents, ParentEvents>>;
|
|
4156
4370
|
type BoundEffectInvokeResult<States extends Machine.StateSchemas, Events extends ReadonlyArray<Machine.TaggedSchema>, Emits extends ReadonlyArray<Machine.TaggedSchema>, InputEvents extends ReadonlyArray<Machine.TaggedSchema>, ParentEvents extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, Source extends (...args: ReadonlyArray<never>) => Effect.Effect<unknown, unknown, unknown>> = Machine.InvokeConfig<States, Events, Emits, StateId, InputEvents, ParentEvents> & Machine.InvokeTyped<Effect.Success<ReturnType<Source>>, Effect.Error<ReturnType<Source>>, Effect.Services<ReturnType<Source>>, never>;
|
|
4157
|
-
/**
|
|
4158
|
-
|
|
4159
|
-
|
|
4160
|
-
|
|
4161
|
-
|
|
4162
|
-
|
|
4163
|
-
|
|
4164
|
-
|
|
4165
|
-
/**
|
|
4166
|
-
* Captures one exact transition topology while preserving handler inference.
|
|
4167
|
-
*
|
|
4168
|
-
* @category constructors
|
|
4169
|
-
* @since 0.14.0
|
|
4170
|
-
*/
|
|
4171
|
-
type ConditionalTransitionResult<States extends Machine.StateSchemas, Events extends ReadonlyArray<Machine.TaggedSchema>, Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateNodeIdentifier<States>, Context, Reenter extends boolean, Cases extends readonly [
|
|
4172
|
-
TransitionCaseTyped,
|
|
4173
|
-
...ReadonlyArray<TransitionCaseTyped>
|
|
4174
|
-
], OtherwiseSelection extends Machine.TargetSelection<any, any, any>> = Omit<Machine.TransitionConditionalInput<States, Events, Emits, StateId, Context, Reenter, Cases, OtherwiseSelection>, "cases"> & {
|
|
4175
|
-
readonly cases: Cases;
|
|
4176
|
-
} & Machine.TransitionTyped<States, Events, Emits, StateId, Context, Reenter>;
|
|
4371
|
+
/** Captures one exact named-branch topology while preserving handler inference. */
|
|
4372
|
+
type BranchingTransitionResult<States extends Machine.StateSchemas, Events extends ReadonlyArray<Machine.TaggedSchema>, Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateNodeIdentifier<States>, Context, Reenter extends boolean, Branches extends Readonly<Record<string, Machine.TransitionBranchInput>>> = Machine.TransitionBranchesInput<States, Events, Emits, StateId, Context, Reenter, Branches> & Machine.TransitionTyped<States, Events, Emits, StateId, Context, Reenter>;
|
|
4373
|
+
type TransitionBranchRecordError<Message extends string, Key extends PropertyKey = never> = {
|
|
4374
|
+
readonly "~effect/Machine/TransitionBranchRecordError": Message;
|
|
4375
|
+
readonly key: Key;
|
|
4376
|
+
};
|
|
4377
|
+
type InvalidStaticTransitionBranchKey<Branches> = Extract<keyof Branches, "" | number | symbol>;
|
|
4378
|
+
type ValidateTransitionBranchRecord<Branches> = [keyof Branches] extends [never] ? TransitionBranchRecordError<"Branch records must contain at least one branch"> : [InvalidStaticTransitionBranchKey<Branches>] extends [never] ? unknown : TransitionBranchRecordError<"Branch keys must be non-empty, non-index strings", InvalidStaticTransitionBranchKey<Branches>>;
|
|
4177
4379
|
/**
|
|
4178
|
-
* Contextually types direct and
|
|
4380
|
+
* Contextually types direct and branching transition definitions.
|
|
4179
4381
|
*
|
|
4180
4382
|
* @category constructors
|
|
4181
4383
|
* @since 0.14.0
|
|
4182
4384
|
*/
|
|
4183
4385
|
export interface TransitionConstructor {
|
|
4184
4386
|
<const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateNodeIdentifier<States>, Context, const Selection extends Machine.TargetSelection<any, any, any>, Reenter extends boolean = never>(config: Machine.TransitionDirectInput<States, Events, Emits, StateId, Context, Reenter, Selection>): Machine.TransitionDirectInput<States, Events, Emits, StateId, Context, Reenter, Selection> & (Machine.SelectionKind<Selection> extends "none" ? Machine.TargetlessTransitionTyped : Machine.TransitionTyped<States, Events, Emits, StateId, Context, Reenter>);
|
|
4185
|
-
<const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateNodeIdentifier<States>, Context, const
|
|
4186
|
-
TransitionCaseTyped,
|
|
4187
|
-
...ReadonlyArray<TransitionCaseTyped>
|
|
4188
|
-
], const OtherwiseSelection extends Machine.TargetSelection<any, any, any>, Reenter extends boolean = never>(config: Machine.TransitionConditionalInput<States, Events, Emits, StateId, Context, Reenter, Cases, OtherwiseSelection>): ConditionalTransitionResult<States, Events, Emits, StateId, Context, Reenter, Cases, OtherwiseSelection>;
|
|
4387
|
+
<const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateNodeIdentifier<States>, Context, const Branches extends Readonly<Record<string, Machine.TransitionBranchInput>>, Reenter extends boolean = never>(config: Machine.TransitionBranchesInput<States, Events, Emits, StateId, Context, Reenter, Branches> & ValidateTransitionBranchRecord<NoInfer<Branches>>): BranchingTransitionResult<States, Events, Emits, StateId, Context, Reenter, Branches>;
|
|
4189
4388
|
}
|
|
4190
4389
|
/**
|
|
4191
4390
|
* Defines a statically inspectable transition.
|
|
4192
4391
|
*
|
|
4193
4392
|
* It is required for every event, lifecycle, choice, and invocation transition
|
|
4194
4393
|
* so the destination selected by `target` can contextually type the
|
|
4195
|
-
* corresponding resolver.
|
|
4196
|
-
*
|
|
4197
|
-
*
|
|
4394
|
+
* corresponding resolver. Branching transitions declare every possible
|
|
4395
|
+
* destination up front, then select one through ordinary TypeScript control
|
|
4396
|
+
* flow in `resolve`.
|
|
4198
4397
|
*
|
|
4199
4398
|
* ```ts
|
|
4200
4399
|
* Machine.transition({
|
|
@@ -4203,18 +4402,13 @@ export interface TransitionConstructor {
|
|
|
4203
4402
|
* })
|
|
4204
4403
|
*
|
|
4205
4404
|
* Machine.transition({
|
|
4206
|
-
*
|
|
4207
|
-
*
|
|
4208
|
-
*
|
|
4209
|
-
*
|
|
4210
|
-
*
|
|
4211
|
-
*
|
|
4212
|
-
*
|
|
4213
|
-
* ],
|
|
4214
|
-
* otherwise: {
|
|
4215
|
-
* target: (to) => to.full.Loading(),
|
|
4216
|
-
* resolve: ({ target }) => target.from()
|
|
4217
|
-
* }
|
|
4405
|
+
* branches: (to) => ({
|
|
4406
|
+
* cached: { target: to.full.Ready() },
|
|
4407
|
+
* loading: { target: to.full.Loading() }
|
|
4408
|
+
* }),
|
|
4409
|
+
* resolve: ({ event, select }) => event.cached
|
|
4410
|
+
* ? select.cached.from({ data: event.cached })
|
|
4411
|
+
* : select.loading.from()
|
|
4218
4412
|
* })
|
|
4219
4413
|
* ```
|
|
4220
4414
|
*
|
|
@@ -4222,6 +4416,39 @@ export interface TransitionConstructor {
|
|
|
4222
4416
|
* @since 0.14.0
|
|
4223
4417
|
*/
|
|
4224
4418
|
export declare const transition: TransitionConstructor;
|
|
4419
|
+
/**
|
|
4420
|
+
* Sentinel used by direct targetless transition shorthands.
|
|
4421
|
+
*
|
|
4422
|
+
* This is the concise form of `target: (to) => to.none()`.
|
|
4423
|
+
*
|
|
4424
|
+
* ```ts
|
|
4425
|
+
* onElement: {
|
|
4426
|
+
* target: Machine.targetless,
|
|
4427
|
+
* resolve: ({ element }, enqueue) => {
|
|
4428
|
+
* enqueue.raise(new MeasurementReceived({ value: element }))
|
|
4429
|
+
* }
|
|
4430
|
+
* }
|
|
4431
|
+
*
|
|
4432
|
+
* onDone: { target: Machine.targetless }
|
|
4433
|
+
* ```
|
|
4434
|
+
*
|
|
4435
|
+
* @category constructors
|
|
4436
|
+
* @since 0.16.0
|
|
4437
|
+
*/
|
|
4438
|
+
export interface TargetlessSelector {
|
|
4439
|
+
readonly "~effect/Machine/TargetlessSelector": true;
|
|
4440
|
+
<const States extends Machine.StateSchemas, StateId extends Machine.StateNodeIdentifier<States>>(to: Machine.TargetSelector<States, StateId>): ReturnType<Machine.TargetSelector<States, StateId>["none"]>;
|
|
4441
|
+
}
|
|
4442
|
+
/**
|
|
4443
|
+
* Selects no transition target while keeping enqueue operations explicit.
|
|
4444
|
+
*
|
|
4445
|
+
* Use as the `target` of a direct handler object when the handler should keep
|
|
4446
|
+
* the current state configuration and only raise, emit, or send events.
|
|
4447
|
+
*
|
|
4448
|
+
* @category constructors
|
|
4449
|
+
* @since 0.16.0
|
|
4450
|
+
*/
|
|
4451
|
+
export declare const targetless: TargetlessSelector;
|
|
4225
4452
|
/**
|
|
4226
4453
|
* Machine-bound invocation constructor that preserves the owning machine's
|
|
4227
4454
|
* public input and parent protocols in every invocation callback.
|
|
@@ -4254,6 +4481,32 @@ export interface Invoker<States extends Machine.StateSchemas, Events extends Rea
|
|
|
4254
4481
|
readonly onDone?: never;
|
|
4255
4482
|
readonly onFailure?: never;
|
|
4256
4483
|
}): BoundEffectInvokeResult<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
|
|
4484
|
+
<StateId extends Machine.StateIdentifier<States>, const Source extends (context: Machine.InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>) => Stream.Stream<unknown, unknown, any>>(config: StreamInvokeSource<States, Events, Emits, InputEvents, ParentEvents, StateId, Source> & {
|
|
4485
|
+
readonly onElement: StreamElementHandler<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
|
|
4486
|
+
readonly onDone: StreamDoneHandler<States, Events, Emits, InputEvents, ParentEvents, StateId>;
|
|
4487
|
+
readonly onFailure: StreamFailureHandler<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
|
|
4488
|
+
}, ..._validation: InvokeChannelIsNever<Stream.Success<ReturnType<Source>>> extends true ? [
|
|
4489
|
+
"onElement must be omitted when the Stream element is never"
|
|
4490
|
+
] : InvokeChannelIsNever<Stream.Error<ReturnType<Source>>> extends true ? [
|
|
4491
|
+
"onFailure must be omitted when the Stream error is never"
|
|
4492
|
+
] : []): StreamInvokeResult<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
|
|
4493
|
+
<StateId extends Machine.StateIdentifier<States>, const Source extends (context: Machine.InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>) => Stream.Stream<never, unknown, any>>(config: StreamInvokeSource<States, Events, Emits, InputEvents, ParentEvents, StateId, Source> & {
|
|
4494
|
+
readonly onElement?: never;
|
|
4495
|
+
readonly onDone: StreamDoneHandler<States, Events, Emits, InputEvents, ParentEvents, StateId>;
|
|
4496
|
+
readonly onFailure: StreamFailureHandler<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
|
|
4497
|
+
}, ..._validation: InvokeChannelIsNever<Stream.Error<ReturnType<Source>>> extends true ? [
|
|
4498
|
+
"onFailure must be omitted when the Stream error is never"
|
|
4499
|
+
] : []): StreamInvokeResult<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
|
|
4500
|
+
<StateId extends Machine.StateIdentifier<States>, const Source extends (context: Machine.InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>) => Stream.Stream<never, never, any>>(config: StreamInvokeSource<States, Events, Emits, InputEvents, ParentEvents, StateId, Source> & {
|
|
4501
|
+
readonly onElement?: never;
|
|
4502
|
+
readonly onDone: StreamDoneHandler<States, Events, Emits, InputEvents, ParentEvents, StateId>;
|
|
4503
|
+
readonly onFailure?: never;
|
|
4504
|
+
}): StreamInvokeResult<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
|
|
4505
|
+
<StateId extends Machine.StateIdentifier<States>, const Source extends (context: Machine.InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>) => Stream.Stream<unknown, never, any>>(config: StreamInvokeSource<States, Events, Emits, InputEvents, ParentEvents, StateId, Source> & {
|
|
4506
|
+
readonly onElement: StreamElementHandler<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
|
|
4507
|
+
readonly onDone: StreamDoneHandler<States, Events, Emits, InputEvents, ParentEvents, StateId>;
|
|
4508
|
+
readonly onFailure?: never;
|
|
4509
|
+
}): StreamInvokeResult<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
|
|
4257
4510
|
<StateId extends Machine.StateIdentifier<States>, const Config extends object>(config: Config & Machine.TimerInvokeArgs<States, Events, Emits, StateId, InputEvents, ParentEvents>): Config & Machine.InvokeOwned<States, Events, Emits, StateId> & Machine.InvokeTyped<void, never, never, never>;
|
|
4258
4511
|
<StateId extends Machine.StateIdentifier<States>, const Source extends (context: Machine.InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>) => unknown, Address extends ChildAddress<never>>(config: {
|
|
4259
4512
|
readonly logic: Source;
|
|
@@ -4276,25 +4529,27 @@ export interface Invoker<States extends Machine.StateSchemas, Events extends Rea
|
|
|
4276
4529
|
/**
|
|
4277
4530
|
* Preserves inference for a state-owned invocation configuration.
|
|
4278
4531
|
*
|
|
4279
|
-
* Use `effect` for one-shot work, `
|
|
4280
|
-
* reusable process logic, or `child` for a
|
|
4281
|
-
*
|
|
4282
|
-
*
|
|
4532
|
+
* Use `effect` for one-shot work, `stream` for repeated values, `after` for a
|
|
4533
|
+
* cancellable timer, `logic` for reusable process logic, or `child` for a
|
|
4534
|
+
* complete child machine. Stream elements are handled by `onElement` before
|
|
4535
|
+
* the next element is pulled. `onDone` is required whenever the source can
|
|
4536
|
+
* complete, while `onFailure` is required only when the source has a typed
|
|
4537
|
+
* failure channel.
|
|
4283
4538
|
*
|
|
4284
4539
|
* This constructor is an identity at runtime, but preserves lifecycle callback
|
|
4285
|
-
* inference through published declarations. Effect factories run
|
|
4286
|
-
* owning state is entered and infer the owner context,
|
|
4287
|
-
* service channels together without a return annotation.
|
|
4540
|
+
* inference through published declarations. Effect and Stream factories run
|
|
4541
|
+
* when their owning state is entered and infer the owner context, value,
|
|
4542
|
+
* output, error, and service channels together without a return annotation.
|
|
4543
|
+
* Durations may be
|
|
4288
4544
|
* supplied directly or derived from the owning state's entry context. Logic
|
|
4289
4545
|
* invocations require both a lifecycle `id` and a typed communication
|
|
4290
4546
|
* `address`. Child descriptors already own their identity, so `id` and
|
|
4291
4547
|
* `address` must not be repeated.
|
|
4292
4548
|
*
|
|
4293
|
-
*
|
|
4294
|
-
*
|
|
4295
|
-
* `self`
|
|
4296
|
-
*
|
|
4297
|
-
* protocols are available.
|
|
4549
|
+
* Inside `handle(...)`, the owning definition contextually supplies its public
|
|
4550
|
+
* input and `parentEvents` protocols. Invocation sources and lifecycle handlers
|
|
4551
|
+
* can therefore send through `self` and `parent` without naming the definition.
|
|
4552
|
+
* The bound `definition.invoke(...)` constructor remains an equivalent form.
|
|
4298
4553
|
*
|
|
4299
4554
|
* ```ts
|
|
4300
4555
|
* invoke: Machine.invoke({
|
|
@@ -4319,34 +4574,60 @@ export interface Invoker<States extends Machine.StateSchemas, Events extends Rea
|
|
|
4319
4574
|
* @since 0.9.0
|
|
4320
4575
|
*/
|
|
4321
4576
|
export declare const invoke: {
|
|
4322
|
-
<const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, const Source extends (context: Machine.InvokeContext<States, Events, Emits, StateId,
|
|
4323
|
-
readonly onDone: EffectDoneHandler<States, Events, Emits, StateId, Source>;
|
|
4324
|
-
readonly onFailure: EffectFailureHandler<States, Events, Emits, StateId, Source>;
|
|
4577
|
+
<const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, const Source extends (context: Machine.InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>) => Effect.Effect<unknown, unknown, unknown>, const InputEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(config: EffectInvokeSource<States, Events, Emits, InputEvents, ParentEvents, StateId, Source> & {
|
|
4578
|
+
readonly onDone: EffectDoneHandler<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
|
|
4579
|
+
readonly onFailure: EffectFailureHandler<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
|
|
4325
4580
|
}, ..._validation: InvokeChannelIsNever<Effect.Success<ReturnType<Source>>> extends true ? [
|
|
4326
4581
|
"onDone must be omitted when the Effect output is never"
|
|
4327
4582
|
] : InvokeChannelIsNever<Effect.Error<ReturnType<Source>>> extends true ? [
|
|
4328
4583
|
"onFailure must be omitted when the Effect error is never"
|
|
4329
|
-
] : []): EffectInvokeResult<States, Events, Emits, StateId, Source>;
|
|
4330
|
-
<const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, const Source extends (context: Machine.InvokeContext<States, Events, Emits, StateId,
|
|
4331
|
-
readonly onDone: EffectDoneHandler<States, Events, Emits, StateId, Source>;
|
|
4584
|
+
] : []): EffectInvokeResult<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
|
|
4585
|
+
<const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, const Source extends (context: Machine.InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>) => Effect.Effect<unknown, never, unknown>, const InputEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(config: EffectInvokeSource<States, Events, Emits, InputEvents, ParentEvents, StateId, Source> & {
|
|
4586
|
+
readonly onDone: EffectDoneHandler<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
|
|
4332
4587
|
readonly onFailure?: never;
|
|
4333
4588
|
}, ..._validation: InvokeChannelIsNever<Effect.Success<ReturnType<Source>>> extends true ? [
|
|
4334
4589
|
"onDone must be omitted when the Effect output is never"
|
|
4335
|
-
] : []): EffectInvokeResult<States, Events, Emits, StateId, Source>;
|
|
4336
|
-
<const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, const Source extends (context: Machine.InvokeContext<States, Events, Emits, StateId,
|
|
4590
|
+
] : []): EffectInvokeResult<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
|
|
4591
|
+
<const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, const Source extends (context: Machine.InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>) => Effect.Effect<never, unknown, unknown>, const InputEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(config: EffectInvokeSource<States, Events, Emits, InputEvents, ParentEvents, StateId, Source> & {
|
|
4337
4592
|
readonly onDone?: never;
|
|
4338
|
-
readonly onFailure: EffectFailureHandler<States, Events, Emits, StateId, Source>;
|
|
4593
|
+
readonly onFailure: EffectFailureHandler<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
|
|
4339
4594
|
}, ..._validation: InvokeChannelIsNever<Effect.Error<ReturnType<Source>>> extends true ? [
|
|
4340
4595
|
"onFailure must be omitted when the Effect error is never"
|
|
4341
|
-
] : []): EffectInvokeResult<States, Events, Emits, StateId, Source>;
|
|
4342
|
-
<const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, const Source extends (context: Machine.InvokeContext<States, Events, Emits, StateId,
|
|
4596
|
+
] : []): EffectInvokeResult<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
|
|
4597
|
+
<const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, const Source extends (context: Machine.InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>) => Effect.Effect<never, never, unknown>, const InputEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(config: EffectInvokeSource<States, Events, Emits, InputEvents, ParentEvents, StateId, Source> & {
|
|
4343
4598
|
readonly onDone?: never;
|
|
4344
4599
|
readonly onFailure?: never;
|
|
4345
|
-
}): EffectInvokeResult<States, Events, Emits, StateId, Source>;
|
|
4346
|
-
<const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, const
|
|
4347
|
-
|
|
4348
|
-
|
|
4349
|
-
|
|
4600
|
+
}): EffectInvokeResult<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
|
|
4601
|
+
<const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, const Source extends (context: Machine.InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>) => Stream.Stream<unknown, unknown, any>, const InputEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(config: StreamInvokeSource<States, Events, Emits, InputEvents, ParentEvents, StateId, Source> & {
|
|
4602
|
+
readonly onElement: StreamElementHandler<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
|
|
4603
|
+
readonly onDone: StreamDoneHandler<States, Events, Emits, InputEvents, ParentEvents, StateId>;
|
|
4604
|
+
readonly onFailure: StreamFailureHandler<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
|
|
4605
|
+
}, ..._validation: InvokeChannelIsNever<Stream.Success<ReturnType<Source>>> extends true ? [
|
|
4606
|
+
"onElement must be omitted when the Stream element is never"
|
|
4607
|
+
] : InvokeChannelIsNever<Stream.Error<ReturnType<Source>>> extends true ? [
|
|
4608
|
+
"onFailure must be omitted when the Stream error is never"
|
|
4609
|
+
] : []): StreamInvokeResult<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
|
|
4610
|
+
<const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, const Source extends (context: Machine.InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>) => Stream.Stream<never, unknown, any>, const InputEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(config: StreamInvokeSource<States, Events, Emits, InputEvents, ParentEvents, StateId, Source> & {
|
|
4611
|
+
readonly onElement?: never;
|
|
4612
|
+
readonly onDone: StreamDoneHandler<States, Events, Emits, InputEvents, ParentEvents, StateId>;
|
|
4613
|
+
readonly onFailure: StreamFailureHandler<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
|
|
4614
|
+
}, ..._validation: InvokeChannelIsNever<Stream.Error<ReturnType<Source>>> extends true ? [
|
|
4615
|
+
"onFailure must be omitted when the Stream error is never"
|
|
4616
|
+
] : []): StreamInvokeResult<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
|
|
4617
|
+
<const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, const Source extends (context: Machine.InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>) => Stream.Stream<never, never, any>, const InputEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(config: StreamInvokeSource<States, Events, Emits, InputEvents, ParentEvents, StateId, Source> & {
|
|
4618
|
+
readonly onElement?: never;
|
|
4619
|
+
readonly onDone: StreamDoneHandler<States, Events, Emits, InputEvents, ParentEvents, StateId>;
|
|
4620
|
+
readonly onFailure?: never;
|
|
4621
|
+
}): StreamInvokeResult<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
|
|
4622
|
+
<const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, const Source extends (context: Machine.InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>) => Stream.Stream<unknown, never, any>, const InputEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(config: StreamInvokeSource<States, Events, Emits, InputEvents, ParentEvents, StateId, Source> & {
|
|
4623
|
+
readonly onElement: StreamElementHandler<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
|
|
4624
|
+
readonly onDone: StreamDoneHandler<States, Events, Emits, InputEvents, ParentEvents, StateId>;
|
|
4625
|
+
readonly onFailure?: never;
|
|
4626
|
+
}): StreamInvokeResult<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
|
|
4627
|
+
<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, const InputEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(config: Config & Machine.TimerInvokeArgs<States, Events, Emits, StateId, InputEvents, ParentEvents>): Config & Machine.InvokeOwned<States, Events, Emits, StateId> & Machine.InvokeTyped<void, never, never, never>;
|
|
4628
|
+
<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 InputEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(config: Machine.LogicInvokeArgs<States, Events, Emits, StateId, ChildState, ChildEvent, ChildError, ChildRequirements, ChildOutput, ChildInitialError, Address, (context: Machine.InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>) => Logic<ChildState, ChildEvent, ChildError, ChildRequirements, ChildOutput, ChildInitialError>, InputEvents, ParentEvents>): Machine.InvokeConfig<States, Events, Emits, StateId, InputEvents, ParentEvents> & Machine.InvokeTyped<ChildOutput, ChildError, ChildRequirements, ChildInitialError>;
|
|
4629
|
+
<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, const InputEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(config: Config & Machine.LogicInvokeArgs<States, Events, Emits, StateId, ChildState, ChildEvent, ChildError, ChildRequirements, ChildOutput, ChildInitialError, Address, Logic<ChildState, ChildEvent, ChildError, ChildRequirements, ChildOutput, ChildInitialError>, InputEvents, ParentEvents>): Config & Machine.InvokeOwned<States, Events, Emits, StateId> & Machine.InvokeTyped<ChildOutput, ChildError, ChildRequirements, ChildInitialError>;
|
|
4630
|
+
<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, const InputEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(config: Config & Machine.ChildInvokeArgs<States, Events, Emits, StateId, Child["machine"], Child, InputEvents, ParentEvents>): 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"]>>>;
|
|
4350
4631
|
};
|
|
4351
4632
|
/**
|
|
4352
4633
|
* Plans the initial state for a machine without executing machine commands.
|
|
@@ -4373,7 +4654,7 @@ export declare const invoke: {
|
|
|
4373
4654
|
* import { Machine } from "@typeonce/effect-machine"
|
|
4374
4655
|
*
|
|
4375
4656
|
* class Idle extends Schema.TaggedClass<Idle>("Idle")("Idle", {}) {}
|
|
4376
|
-
* const States = Machine.
|
|
4657
|
+
* const States = Machine.states({ Idle })
|
|
4377
4658
|
* const machine = Machine.make({
|
|
4378
4659
|
* states: States.states,
|
|
4379
4660
|
* events: Machine.events(),
|
|
@@ -4448,9 +4729,8 @@ export declare const initialDefinition: <M extends Machine.Any>(machine: M) => M
|
|
|
4448
4729
|
*
|
|
4449
4730
|
* Event handlers retain their handler-key order within each source state and
|
|
4450
4731
|
* are followed by eventless and completion handlers. This function does not
|
|
4451
|
-
* execute
|
|
4452
|
-
*
|
|
4453
|
-
* `target` declaration.
|
|
4732
|
+
* execute resolvers. Every direct, named, and targetless branch exposes the
|
|
4733
|
+
* destination selected by its required static `target` declaration.
|
|
4454
4734
|
*
|
|
4455
4735
|
* @category getters
|
|
4456
4736
|
* @since 0.4.0
|
|
@@ -4515,7 +4795,7 @@ export declare const enabled: <const States extends Machine.StateSchemas, const
|
|
|
4515
4795
|
* class Off extends Schema.TaggedClass<Off>("Off")("Off", {}) {}
|
|
4516
4796
|
* class On extends Schema.TaggedClass<On>("On")("On", {}) {}
|
|
4517
4797
|
* class Toggle extends Schema.TaggedClass<Toggle>("Toggle")("Toggle", {}) {}
|
|
4518
|
-
* const States = Machine.
|
|
4798
|
+
* const States = Machine.states({ Off, On })
|
|
4519
4799
|
* const machine = Machine.make({
|
|
4520
4800
|
* states: States.states,
|
|
4521
4801
|
* events: Machine.events(Toggle),
|
|
@@ -4722,7 +5002,7 @@ export declare const prepare: <const States extends Machine.StateSchemas, const
|
|
|
4722
5002
|
* import { Machine } from "@typeonce/effect-machine"
|
|
4723
5003
|
*
|
|
4724
5004
|
* class Idle extends Schema.TaggedClass<Idle>("Idle")("Idle", {}) {}
|
|
4725
|
-
* const States = Machine.
|
|
5005
|
+
* const States = Machine.states({ Idle })
|
|
4726
5006
|
* const machine = Machine.make({
|
|
4727
5007
|
* states: States.states,
|
|
4728
5008
|
* events: Machine.events(),
|
|
@@ -4775,7 +5055,7 @@ export declare const start: <const States extends Machine.StateSchemas, const Ev
|
|
|
4775
5055
|
* import { Machine } from "@typeonce/effect-machine"
|
|
4776
5056
|
*
|
|
4777
5057
|
* class Idle extends Schema.TaggedClass<Idle>("Idle")("Idle", {}) {}
|
|
4778
|
-
* const States = Machine.
|
|
5058
|
+
* const States = Machine.states({ Idle })
|
|
4779
5059
|
* const machine = Machine.make({
|
|
4780
5060
|
* states: States.states,
|
|
4781
5061
|
* events: Machine.events(),
|