UNPKG

56.3 kBTypeScriptView Raw
1import type { MachineSnapshot } from "./State.js";
2import type { StateMachine } from "./StateMachine.js";
3import type { StateNode } from "./StateNode.js";
4import { AssignArgs } from "./actions/assign.js";
5import { PromiseActorLogic } from "./actors/promise.js";
6import { Guard, GuardPredicate, UnknownGuard } from "./guards.js";
7import type { Actor } from "./createActor.js";
8import { Spawner } from "./spawn.js";
9import { AnyActorSystem, Clock } from './system.js';
10import { InspectionEvent } from "./inspection.js";
11import { ResolveTypegenMeta, TypegenConstraint, TypegenDisabled } from "./typegenTypes.js";
12export type Identity<T> = {
13 [K in keyof T]: T[K];
14};
15export type HomomorphicPick<T, K extends keyof any> = {
16 [P in keyof T as P & K]: T[P];
17};
18export type HomomorphicOmit<T, K extends keyof any> = {
19 [P in keyof T as Exclude<P, K>]: T[P];
20};
21export type Invert<T extends Record<PropertyKey, PropertyKey>> = {
22 [K in keyof T as T[K]]: K;
23};
24export type GetParameterizedParams<T extends ParameterizedObject | undefined> = T extends any ? ('params' extends keyof T ? T['params'] : undefined) : never;
25/**
26 *
27 * @remarks
28 *
29 * `T | unknown` reduces to `unknown` and that can be problematic when it comes to contextual typing.
30 * It especially is a problem when the union has a function member, like here:
31 *
32 * ```ts
33 * declare function test(cbOrVal: ((arg: number) => unknown) | unknown): void;
34 * test((arg) => {}) // oops, implicit any
35 * ```
36 *
37 * This type can be used to avoid this problem. This union represents the same value space as `unknown`.
38 */
39export type NonReducibleUnknown = {} | null | undefined;
40export type AnyFunction = (...args: any[]) => any;
41type ReturnTypeOrValue<T> = T extends AnyFunction ? ReturnType<T> : T;
42export type IsNever<T> = [T] extends [never] ? true : false;
43export type IsNotNever<T> = [T] extends [never] ? false : true;
44export type Compute<A extends any> = {
45 [K in keyof A]: A[K];
46} & unknown;
47export type Prop<T, K> = K extends keyof T ? T[K] : never;
48export type Values<T> = T[keyof T];
49export type Elements<T> = T[keyof T & `${number}`];
50export type Merge<M, N> = Omit<M, keyof N> & N;
51export type IndexByProp<T extends Record<P, string>, P extends keyof T> = {
52 [E in T as E[P]]: E;
53};
54export type IndexByType<T extends {
55 type: string;
56}> = IndexByProp<T, 'type'>;
57export type Equals<A1 extends any, A2 extends any> = (<A>() => A extends A2 ? true : false) extends <A>() => A extends A1 ? true : false ? true : false;
58export type IsAny<T> = Equals<T, any>;
59export type Cast<A, B> = A extends B ? A : B;
60export type DoNotInfer<T> = [T][T extends any ? 0 : any];
61/**
62 * @deprecated Use the built-in `NoInfer` type instead
63 */
64export type NoInfer<T> = DoNotInfer<T>;
65export type LowInfer<T> = T & {};
66export type MetaObject = Record<string, any>;
67export type Lazy<T> = () => T;
68export type MaybeLazy<T> = T | Lazy<T>;
69/**
70 * The full definition of an event, with a string `type`.
71 */
72export type EventObject = {
73 /**
74 * The type of event that is sent.
75 */
76 type: string;
77};
78export interface AnyEventObject extends EventObject {
79 [key: string]: any;
80}
81export interface ParameterizedObject {
82 type: string;
83 params?: NonReducibleUnknown;
84}
85export interface UnifiedArg<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject> {
86 context: TContext;
87 event: TExpressionEvent;
88 self: ActorRef<MachineSnapshot<TContext, TEvent, Record<string, AnyActorRef | undefined>, // TODO: this should be replaced with `TChildren`
89 StateValue, string, unknown>, TEvent>;
90 system: AnyActorSystem;
91}
92export type MachineContext = Record<string, any>;
93export interface ActionArgs<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject> extends UnifiedArg<TContext, TExpressionEvent, TEvent> {
94}
95export type InputFrom<T> = T extends StateMachine<infer _TContext, infer _TEvent, infer _TChildren, infer _TActor, infer _TAction, infer _TGuard, infer _TDelay, infer _TStateValue, infer _TTag, infer TInput, infer _TOutput, infer _TResolvedTypesMeta> ? TInput : T extends ActorLogic<infer _TSnapshot, infer _TEvent, infer TInput, infer _TSystem, infer _TEmitted> ? TInput : never;
96export type OutputFrom<T> = T extends ActorLogic<infer TSnapshot, infer _TEvent, infer _TInput, infer _TSystem, infer _TEmitted> ? (TSnapshot & {
97 status: 'done';
98})['output'] : T extends ActorRef<infer TSnapshot, infer _TEvent> ? (TSnapshot & {
99 status: 'done';
100})['output'] : never;
101export type ActionFunction<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject, TParams extends ParameterizedObject['params'] | undefined, TActor extends ProvidedActor, TAction extends ParameterizedObject, TGuard extends ParameterizedObject, TDelay extends string, TEmitted extends EventObject> = {
102 (args: ActionArgs<TContext, TExpressionEvent, TEvent>, params: TParams): void;
103 _out_TEvent?: TEvent;
104 _out_TActor?: TActor;
105 _out_TAction?: TAction;
106 _out_TGuard?: TGuard;
107 _out_TDelay?: TDelay;
108 _out_TEmitted?: TEmitted;
109};
110export type NoRequiredParams<T extends ParameterizedObject> = T extends any ? undefined extends T['params'] ? T['type'] : never : never;
111export type ConditionalRequired<T, Condition extends boolean> = Condition extends true ? Required<T> : T;
112export type WithDynamicParams<TContext extends MachineContext, TExpressionEvent extends EventObject, T extends ParameterizedObject> = T extends any ? ConditionalRequired<{
113 type: T['type'];
114 params?: T['params'] | (({ context, event }: {
115 context: TContext;
116 event: TExpressionEvent;
117 }) => T['params']);
118}, undefined extends T['params'] ? false : true> : never;
119export type Action<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject, TParams extends ParameterizedObject['params'] | undefined, TActor extends ProvidedActor, TAction extends ParameterizedObject, TGuard extends ParameterizedObject, TDelay extends string, TEmitted extends EventObject> = NoRequiredParams<TAction> | WithDynamicParams<TContext, TExpressionEvent, TAction> | ActionFunction<TContext, TExpressionEvent, TEvent, TParams, TActor, TAction, TGuard, TDelay, TEmitted>;
120export type UnknownAction = Action<MachineContext, EventObject, EventObject, ParameterizedObject['params'] | undefined, ProvidedActor, ParameterizedObject, ParameterizedObject, string, EventObject>;
121export type Actions<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject, TParams extends ParameterizedObject['params'] | undefined, TActor extends ProvidedActor, TAction extends ParameterizedObject, TGuard extends ParameterizedObject, TDelay extends string, TEmitted extends EventObject> = SingleOrArray<Action<TContext, TExpressionEvent, TEvent, TParams, TActor, TAction, TGuard, TDelay, TEmitted>>;
122export type StateKey = string | AnyMachineSnapshot;
123export interface StateValueMap {
124 [key: string]: StateValue | undefined;
125}
126/**
127 * The string or object representing the state value relative to the parent state node.
128 *
129 * @remarks
130 *
131 * - For a child atomic state node, this is a string, e.g., `"pending"`.
132 *
133 * - For complex state nodes, this is an object, e.g., `{ success: "someChildState" }`.
134 */
135export type StateValue = string | StateValueMap;
136export type TransitionTarget = SingleOrArray<string>;
137export interface TransitionConfig<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject, TActor extends ProvidedActor, TAction extends ParameterizedObject, TGuard extends ParameterizedObject, TDelay extends string, TEmitted extends EventObject = EventObject> {
138 guard?: Guard<TContext, TExpressionEvent, undefined, TGuard>;
139 actions?: Actions<TContext, TExpressionEvent, TEvent, undefined, TActor, TAction, TGuard, TDelay, TEmitted>;
140 reenter?: boolean;
141 target?: TransitionTarget | undefined;
142 meta?: Record<string, any>;
143 description?: string;
144}
145export interface InitialTransitionConfig<TContext extends MachineContext, TEvent extends EventObject, TActor extends ProvidedActor, TAction extends ParameterizedObject, TGuard extends ParameterizedObject, TDelay extends string> extends TransitionConfig<TContext, TEvent, TEvent, TActor, TAction, TGuard, TDelay> {
146 target: string;
147}
148export type AnyTransitionConfig = TransitionConfig<any, any, any, any, any, any, any>;
149export interface InvokeDefinition<TContext extends MachineContext, TEvent extends EventObject, TActor extends ProvidedActor, TAction extends ParameterizedObject, TGuard extends ParameterizedObject, TDelay extends string> {
150 id: string;
151 systemId: string | undefined;
152 /**
153 * The source of the actor logic to be invoked
154 */
155 src: AnyActorLogic | string;
156 input?: Mapper<TContext, TEvent, NonReducibleUnknown, TEvent> | NonReducibleUnknown;
157 /**
158 * The transition to take upon the invoked child machine reaching its final top-level state.
159 */
160 onDone?: string | SingleOrArray<TransitionConfig<TContext, DoneActorEvent<unknown>, TEvent, TActor, TAction, TGuard, TDelay>>;
161 /**
162 * The transition to take upon the invoked child machine sending an error event.
163 */
164 onError?: string | SingleOrArray<TransitionConfig<TContext, ErrorActorEvent, TEvent, TActor, TAction, TGuard, TDelay>>;
165 onSnapshot?: string | SingleOrArray<TransitionConfig<TContext, SnapshotEvent, TEvent, TActor, TAction, TGuard, TDelay>>;
166 toJSON: () => Omit<InvokeDefinition<TContext, TEvent, TActor, TAction, TGuard, TDelay>, 'onDone' | 'onError' | 'toJSON'>;
167}
168type Delay<TDelay extends string> = TDelay | number;
169export type DelayedTransitions<TContext extends MachineContext, TEvent extends EventObject, TActor extends ProvidedActor, TAction extends ParameterizedObject, TGuard extends ParameterizedObject, TDelay extends string> = {
170 [K in Delay<TDelay>]?: string | SingleOrArray<TransitionConfig<TContext, TEvent, TEvent, TActor, TAction, TGuard, TDelay>>;
171};
172export type StateTypes = 'atomic' | 'compound' | 'parallel' | 'final' | 'history' | string;
173export type SingleOrArray<T> = readonly T[] | T;
174export type StateNodesConfig<TContext extends MachineContext, TEvent extends EventObject> = {
175 [K in string]: StateNode<TContext, TEvent>;
176};
177export type StatesConfig<TContext extends MachineContext, TEvent extends EventObject, TActor extends ProvidedActor, TAction extends ParameterizedObject, TGuard extends ParameterizedObject, TDelay extends string, TTag extends string, TOutput, TEmitted extends EventObject> = {
178 [K in string]: StateNodeConfig<TContext, TEvent, TActor, TAction, TGuard, TDelay, TTag, TOutput, TEmitted>;
179};
180export type StatesDefinition<TContext extends MachineContext, TEvent extends EventObject> = {
181 [K in string]: StateNodeDefinition<TContext, TEvent>;
182};
183export type TransitionConfigTarget = string | undefined;
184export type TransitionConfigOrTarget<TContext extends MachineContext, TExpressionEvent extends EventObject, TEvent extends EventObject, TActor extends ProvidedActor, TAction extends ParameterizedObject, TGuard extends ParameterizedObject, TDelay extends string, TEmitted extends EventObject> = SingleOrArray<TransitionConfigTarget | TransitionConfig<TContext, TExpressionEvent, TEvent, TActor, TAction, TGuard, TDelay, TEmitted>>;
185export type TransitionsConfig<TContext extends MachineContext, TEvent extends EventObject, TActor extends ProvidedActor, TAction extends ParameterizedObject, TGuard extends ParameterizedObject, TDelay extends string, TEmitted extends EventObject> = {
186 [K in EventDescriptor<TEvent>]?: TransitionConfigOrTarget<TContext, ExtractEvent<TEvent, K>, TEvent, TActor, TAction, TGuard, TDelay, TEmitted>;
187};
188type PartialEventDescriptor<TEventType extends string> = TEventType extends `${infer TLeading}.${infer TTail}` ? `${TLeading}.*` | `${TLeading}.${PartialEventDescriptor<TTail>}` : never;
189export type EventDescriptor<TEvent extends EventObject> = TEvent['type'] | PartialEventDescriptor<TEvent['type']> | '*';
190type NormalizeDescriptor<TDescriptor extends string> = TDescriptor extends '*' ? string : TDescriptor extends `${infer TLeading}.*` ? `${TLeading}.${string}` : TDescriptor;
191export type IsLiteralString<T extends string> = string extends T ? false : true;
192type DistributeActors<TContext extends MachineContext, TEvent extends EventObject, TActor extends ProvidedActor, TAction extends ParameterizedObject, TGuard extends ParameterizedObject, TDelay extends string, TEmitted extends EventObject, TSpecificActor extends ProvidedActor> = TSpecificActor extends {
193 src: infer TSrc;
194} ? Compute<{
195 systemId?: string;
196 /**
197 * The source of the machine to be invoked, or the machine itself.
198 */
199 src: TSrc;
200 /**
201 * The unique identifier for the invoked machine. If not specified, this
202 * will be the machine's own `id`, or the URL (from `src`).
203 */
204 id?: TSpecificActor['id'];
205 input?: Mapper<TContext, TEvent, InputFrom<TSpecificActor['logic']>, TEvent> | InputFrom<TSpecificActor['logic']>;
206 /**
207 * The transition to take upon the invoked child machine reaching its final top-level state.
208 */
209 onDone?: string | SingleOrArray<TransitionConfigOrTarget<TContext, DoneActorEvent<OutputFrom<TSpecificActor['logic']>>, TEvent, TActor, TAction, TGuard, TDelay, TEmitted>>;
210 /**
211 * The transition to take upon the invoked child machine sending an error event.
212 */
213 onError?: string | SingleOrArray<TransitionConfigOrTarget<TContext, ErrorActorEvent, TEvent, TActor, TAction, TGuard, TDelay, TEmitted>>;
214 onSnapshot?: string | SingleOrArray<TransitionConfigOrTarget<TContext, SnapshotEvent<SnapshotFrom<TSpecificActor['logic']>>, TEvent, TActor, TAction, TGuard, TDelay, TEmitted>>;
215} & {
216 [K in RequiredActorOptions<TSpecificActor>]: unknown;
217}> : never;
218export type InvokeConfig<TContext extends MachineContext, TEvent extends EventObject, TActor extends ProvidedActor, TAction extends ParameterizedObject, TGuard extends ParameterizedObject, TDelay extends string, TEmitted extends EventObject> = IsLiteralString<TActor['src']> extends true ? DistributeActors<TContext, TEvent, TActor, TAction, TGuard, TDelay, TEmitted, TActor> : {
219 /**
220 * The unique identifier for the invoked machine. If not specified, this
221 * will be the machine's own `id`, or the URL (from `src`).
222 */
223 id?: string;
224 systemId?: string;
225 /**
226 * The source of the machine to be invoked, or the machine itself.
227 */
228 src: AnyActorLogic | string;
229 input?: Mapper<TContext, TEvent, NonReducibleUnknown, TEvent> | NonReducibleUnknown;
230 /**
231 * The transition to take upon the invoked child machine reaching its final top-level state.
232 */
233 onDone?: string | SingleOrArray<TransitionConfigOrTarget<TContext, DoneActorEvent<any>, // TODO: consider replacing with `unknown`
234 TEvent, TActor, TAction, TGuard, TDelay, TEmitted>>;
235 /**
236 * The transition to take upon the invoked child machine sending an error event.
237 */
238 onError?: string | SingleOrArray<TransitionConfigOrTarget<TContext, ErrorActorEvent, TEvent, TActor, TAction, TGuard, TDelay, TEmitted>>;
239 onSnapshot?: string | SingleOrArray<TransitionConfigOrTarget<TContext, SnapshotEvent, TEvent, TActor, TAction, TGuard, TDelay, TEmitted>>;
240};
241export type AnyInvokeConfig = InvokeConfig<any, any, any, any, any, any, any>;
242export interface StateNodeConfig<TContext extends MachineContext, TEvent extends EventObject, TActor extends ProvidedActor, TAction extends ParameterizedObject, TGuard extends ParameterizedObject, TDelay extends string, TTag extends string, TOutput, TEmitted extends EventObject> {
243 /**
244 * The initial state transition.
245 */
246 initial?: InitialTransitionConfig<TContext, TEvent, TActor, TAction, TGuard, TDelay> | string | undefined;
247 /**
248 * The type of this state node:
249 *
250 * - `'atomic'` - no child state nodes
251 * - `'compound'` - nested child state nodes (XOR)
252 * - `'parallel'` - orthogonal nested child state nodes (AND)
253 * - `'history'` - history state node
254 * - `'final'` - final state node
255 */
256 type?: 'atomic' | 'compound' | 'parallel' | 'final' | 'history';
257 /**
258 * Indicates whether the state node is a history state node, and what
259 * type of history:
260 * shallow, deep, true (shallow), false (none), undefined (none)
261 */
262 history?: 'shallow' | 'deep' | boolean | undefined;
263 /**
264 * The mapping of state node keys to their state node configurations (recursive).
265 */
266 states?: StatesConfig<TContext, TEvent, TActor, TAction, TGuard, TDelay, TTag, NonReducibleUnknown, TEmitted> | undefined;
267 /**
268 * The services to invoke upon entering this state node. These services will be stopped upon exiting this state node.
269 */
270 invoke?: SingleOrArray<InvokeConfig<TContext, TEvent, TActor, TAction, TGuard, TDelay, TEmitted>>;
271 /**
272 * The mapping of event types to their potential transition(s).
273 */
274 on?: TransitionsConfig<TContext, TEvent, TActor, TAction, TGuard, TDelay, TEmitted>;
275 /**
276 * The action(s) to be executed upon entering the state node.
277 */
278 entry?: Actions<TContext, TEvent, TEvent, undefined, TActor, TAction, TGuard, TDelay, TEmitted>;
279 /**
280 * The action(s) to be executed upon exiting the state node.
281 */
282 exit?: Actions<TContext, TEvent, TEvent, undefined, TActor, TAction, TGuard, TDelay, TEmitted>;
283 /**
284 * The potential transition(s) to be taken upon reaching a final child state node.
285 *
286 * This is equivalent to defining a `[done(id)]` transition on this state node's `on` property.
287 */
288 onDone?: string | SingleOrArray<TransitionConfig<TContext, DoneStateEvent, TEvent, TActor, TAction, TGuard, TDelay>> | undefined;
289 /**
290 * The mapping (or array) of delays (in milliseconds) to their potential transition(s).
291 * The delayed transitions are taken after the specified delay in an interpreter.
292 */
293 after?: DelayedTransitions<TContext, TEvent, TActor, TAction, TGuard, TDelay>;
294 /**
295 * An eventless transition that is always taken when this state node is active.
296 */
297 always?: TransitionConfigOrTarget<TContext, TEvent, TEvent, TActor, TAction, TGuard, TDelay, TEmitted>;
298 parent?: StateNode<TContext, TEvent>;
299 /**
300 * The meta data associated with this state node, which will be returned in State instances.
301 */
302 meta?: any;
303 /**
304 * The output data sent with the "xstate.done.state._id_" event if this is a final state node.
305 *
306 * The output data will be evaluated with the current `context` and placed on the `.data` property
307 * of the event.
308 */
309 output?: Mapper<TContext, TEvent, unknown, TEvent> | NonReducibleUnknown;
310 /**
311 * The unique ID of the state node, which can be referenced as a transition target via the
312 * `#id` syntax.
313 */
314 id?: string | undefined;
315 /**
316 * The order this state node appears. Corresponds to the implicit document order.
317 */
318 order?: number;
319 /**
320 * The tags for this state node, which are accumulated into the `state.tags` property.
321 */
322 tags?: SingleOrArray<TTag>;
323 /**
324 * A text description of the state node
325 */
326 description?: string;
327 /**
328 * A default target for a history state
329 */
330 target?: string;
331}
332export type AnyStateNodeConfig = StateNodeConfig<any, any, any, any, any, any, any, any, any>;
333export interface StateNodeDefinition<TContext extends MachineContext, TEvent extends EventObject> {
334 id: string;
335 version?: string | undefined;
336 key: string;
337 type: 'atomic' | 'compound' | 'parallel' | 'final' | 'history';
338 initial: InitialTransitionDefinition<TContext, TEvent> | undefined;
339 history: boolean | 'shallow' | 'deep' | undefined;
340 states: StatesDefinition<TContext, TEvent>;
341 on: TransitionDefinitionMap<TContext, TEvent>;
342 transitions: Array<TransitionDefinition<TContext, TEvent>>;
343 entry: UnknownAction[];
344 exit: UnknownAction[];
345 meta: any;
346 order: number;
347 output?: StateNodeConfig<TContext, TEvent, ProvidedActor, ParameterizedObject, ParameterizedObject, string, string, unknown, EventObject>['output'];
348 invoke: Array<InvokeDefinition<TContext, TEvent, TODO, TODO, TODO, TODO>>;
349 description?: string;
350 tags: string[];
351}
352export interface StateMachineDefinition<TContext extends MachineContext, TEvent extends EventObject> extends StateNodeDefinition<TContext, TEvent> {
353}
354export type AnyStateNode = StateNode<any, any>;
355export type AnyStateNodeDefinition = StateNodeDefinition<any, any>;
356export type AnyMachineSnapshot = MachineSnapshot<any, any, any, any, any, any, any>;
357/** @deprecated use `AnyMachineSnapshot` instead */
358export type AnyState = AnyMachineSnapshot;
359export type AnyStateMachine = StateMachine<any, // context
360any, // event
361any, // children
362any, // actor
363any, // action
364any, // guard
365any, // delay
366any, // state value
367any, // tag
368any, // input
369any, // output
370any, // emitted
371any>;
372export type AnyStateConfig = StateConfig<any, AnyEventObject>;
373export interface AtomicStateNodeConfig<TContext extends MachineContext, TEvent extends EventObject> extends StateNodeConfig<TContext, TEvent, TODO, TODO, TODO, TODO, TODO, TODO, TODO> {
374 initial?: undefined;
375 parallel?: false | undefined;
376 states?: undefined;
377 onDone?: undefined;
378}
379export interface HistoryStateNodeConfig<TContext extends MachineContext, TEvent extends EventObject> extends AtomicStateNodeConfig<TContext, TEvent> {
380 history: 'shallow' | 'deep' | true;
381 target: string | undefined;
382}
383export type SimpleOrStateNodeConfig<TContext extends MachineContext, TEvent extends EventObject> = AtomicStateNodeConfig<TContext, TEvent> | StateNodeConfig<TContext, TEvent, TODO, TODO, TODO, TODO, TODO, TODO, TODO>;
384export type ActionFunctionMap<TContext extends MachineContext, TEvent extends EventObject, TActor extends ProvidedActor, TAction extends ParameterizedObject = ParameterizedObject, TGuard extends ParameterizedObject = ParameterizedObject, TDelay extends string = string, TEmitted extends EventObject = EventObject> = {
385 [K in TAction['type']]?: ActionFunction<TContext, TEvent, TEvent, GetParameterizedParams<TAction extends {
386 type: K;
387 } ? TAction : never>, TActor, TAction, TGuard, TDelay, TEmitted>;
388};
389type GuardMap<TContext extends MachineContext, TEvent extends EventObject, TGuard extends ParameterizedObject> = {
390 [K in TGuard['type']]?: GuardPredicate<TContext, TEvent, GetParameterizedParams<TGuard extends {
391 type: K;
392 } ? TGuard : never>, TGuard>;
393};
394export type DelayFunctionMap<TContext extends MachineContext, TEvent extends EventObject, TAction extends ParameterizedObject> = Record<string, DelayConfig<TContext, TEvent, TAction['params'], TEvent>>;
395export type DelayConfig<TContext extends MachineContext, TExpressionEvent extends EventObject, TParams extends ParameterizedObject['params'] | undefined, TEvent extends EventObject> = number | DelayExpr<TContext, TExpressionEvent, TParams, TEvent>;
396/**
397 * @hidden
398 */
399export interface MachineImplementationsSimplified<TContext extends MachineContext, TEvent extends EventObject, TActor extends ProvidedActor = ProvidedActor, TAction extends ParameterizedObject = ParameterizedObject, TGuard extends ParameterizedObject = ParameterizedObject> {
400 guards: GuardMap<TContext, TEvent, TGuard>;
401 actions: ActionFunctionMap<TContext, TEvent, TActor, TAction>;
402 actors: Record<string, AnyActorLogic | {
403 src: AnyActorLogic;
404 input: Mapper<TContext, TEvent, unknown, TEvent> | NonReducibleUnknown;
405 }>;
406 delays: DelayFunctionMap<TContext, TEvent, TAction>;
407}
408type MaybeNarrowedEvent<TIndexedEvents, TCausingLookup, K> = Cast<Prop<TIndexedEvents, K extends keyof TCausingLookup ? TCausingLookup[K] : TIndexedEvents[keyof TIndexedEvents]>, EventObject>;
409type MachineImplementationsActions<TContext extends MachineContext, TResolvedTypesMeta, TEventsCausingActions = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'eventsCausingActions'>, TIndexedEvents = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedEvents'>, TIndexedActors = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedActors'>, TIndexedActions = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedActions'>, TIndexedGuards = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedGuards'>, TIndexedDelays = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedDelays'>, TEmitted = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'emitted'>> = {
410 [K in keyof TIndexedActions]?: ActionFunction<TContext, MaybeNarrowedEvent<TIndexedEvents, TEventsCausingActions, K>, Cast<Prop<TIndexedEvents, keyof TIndexedEvents>, EventObject>, GetParameterizedParams<Cast<TIndexedActions[K], ParameterizedObject>>, Cast<Prop<TIndexedActors, keyof TIndexedActors>, ProvidedActor>, Cast<Prop<TIndexedActions, keyof TIndexedActions>, ParameterizedObject>, Cast<Prop<TIndexedGuards, keyof TIndexedGuards>, ParameterizedObject>, Cast<Prop<TIndexedDelays, keyof TIndexedDelays>, ParameterizedObject>['type'], Cast<TEmitted, EventObject>>;
411};
412type MachineImplementationsActors<_TContext extends MachineContext, TResolvedTypesMeta, TIndexedActors = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedActors'>, _TInvokeSrcNameMap = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'invokeSrcNameMap'>> = {
413 [K in keyof TIndexedActors]?: Cast<Prop<TIndexedActors[K], 'logic'>, AnyActorLogic>;
414};
415type MachineImplementationsDelays<TContext extends MachineContext, TResolvedTypesMeta, TEventsCausingDelays = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'eventsCausingDelays'>, TIndexedEvents = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedEvents'>, TIndexedActions = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedActions'>, TIndexedDelays = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedDelays'>> = {
416 [K in keyof TIndexedDelays]?: DelayConfig<TContext, MaybeNarrowedEvent<TIndexedEvents, TEventsCausingDelays, K>, Cast<Prop<Prop<TIndexedActions, keyof TIndexedActions>, 'params'>, ParameterizedObject['params'] | undefined> | undefined, Cast<Prop<TIndexedEvents, keyof TIndexedEvents>, EventObject>>;
417};
418type MachineImplementationsGuards<TContext extends MachineContext, TResolvedTypesMeta, TEventsCausingGuards = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'eventsCausingGuards'>, TIndexedEvents = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedEvents'>, TIndexedGuards = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedGuards'>> = {
419 [K in keyof TIndexedGuards]?: Guard<TContext, MaybeNarrowedEvent<TIndexedEvents, TEventsCausingGuards, K>, GetParameterizedParams<Cast<TIndexedGuards[K], ParameterizedObject | undefined>>, Cast<Prop<TIndexedGuards, keyof TIndexedGuards>, ParameterizedObject>>;
420};
421type MakeKeysRequired<T extends string> = {
422 [K in T]: unknown;
423};
424type MaybeMakeMissingImplementationsRequired<TImplementationType, TMissingImplementationsForType, TRequireMissingImplementations> = TRequireMissingImplementations extends true ? IsNever<TMissingImplementationsForType> extends true ? {} : {
425 [K in Cast<TImplementationType, string>]: MakeKeysRequired<Cast<TMissingImplementationsForType, string>>;
426} : {};
427type GenerateActionsImplementationsPart<TContext extends MachineContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> = Compute<MaybeMakeMissingImplementationsRequired<'actions', Prop<TMissingImplementations, 'actions'>, TRequireMissingImplementations> & {
428 actions?: MachineImplementationsActions<TContext, TResolvedTypesMeta>;
429}>;
430type GenerateActorsImplementationsPart<TContext extends MachineContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> = Compute<MaybeMakeMissingImplementationsRequired<'actors', Prop<TMissingImplementations, 'actors'>, TRequireMissingImplementations> & {
431 actors?: MachineImplementationsActors<TContext, TResolvedTypesMeta>;
432}>;
433type GenerateDelaysImplementationsPart<TContext extends MachineContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> = Compute<MaybeMakeMissingImplementationsRequired<'delays', Prop<TMissingImplementations, 'delays'>, TRequireMissingImplementations> & {
434 delays?: MachineImplementationsDelays<TContext, TResolvedTypesMeta>;
435}>;
436type GenerateGuardsImplementationsPart<TContext extends MachineContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> = Compute<MaybeMakeMissingImplementationsRequired<'guards', Prop<TMissingImplementations, 'guards'>, TRequireMissingImplementations> & {
437 guards?: MachineImplementationsGuards<TContext, TResolvedTypesMeta>;
438}>;
439export type InternalMachineImplementations<TContext extends MachineContext, TResolvedTypesMeta, TRequireMissingImplementations extends boolean = false, TMissingImplementations = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'missingImplementations'>> = Compute<GenerateActionsImplementationsPart<TContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> & GenerateActorsImplementationsPart<TContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> & GenerateDelaysImplementationsPart<TContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> & GenerateGuardsImplementationsPart<TContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations>>;
440export type MachineImplementations<TContext extends MachineContext, TEvent extends EventObject, TActor extends ProvidedActor = ProvidedActor, TAction extends ParameterizedObject = ParameterizedObject, TGuard extends ParameterizedObject = ParameterizedObject, TDelay extends string = string, TTag extends string = string, TTypesMeta extends TypegenConstraint = TypegenDisabled> = InternalMachineImplementations<TContext, ResolveTypegenMeta<TTypesMeta, TEvent, TActor, TAction, TGuard, TDelay, TTag>>;
441type InitialContext<TContext extends MachineContext, TActor extends ProvidedActor, TInput, TEvent extends EventObject> = TContext | ContextFactory<TContext, TActor, TInput, TEvent>;
442export type ContextFactory<TContext extends MachineContext, TActor extends ProvidedActor, TInput, TEvent extends EventObject = EventObject> = ({ spawn, input, self }: {
443 spawn: Spawner<TActor>;
444 input: TInput;
445 self: ActorRef<MachineSnapshot<TContext, TEvent, Record<string, AnyActorRef | undefined>, // TODO: this should be replaced with `TChildren`
446 StateValue, string, unknown>, TEvent>;
447}) => TContext;
448export type MachineConfig<TContext extends MachineContext, TEvent extends EventObject, TActor extends ProvidedActor = ProvidedActor, TAction extends ParameterizedObject = ParameterizedObject, TGuard extends ParameterizedObject = ParameterizedObject, TDelay extends string = string, TTag extends string = string, TInput = any, TOutput = unknown, TEmitted extends EventObject = EventObject, TTypesMeta = TypegenDisabled> = (Omit<StateNodeConfig<DoNotInfer<TContext>, DoNotInfer<TEvent>, DoNotInfer<TActor>, DoNotInfer<TAction>, DoNotInfer<TGuard>, DoNotInfer<TDelay>, DoNotInfer<TTag>, DoNotInfer<TOutput>, DoNotInfer<TEmitted>>, 'output'> & {
449 /**
450 * The initial context (extended state)
451 */
452 /**
453 * The machine's own version.
454 */
455 version?: string;
456 output?: Mapper<TContext, DoneStateEvent, TOutput, TEvent> | TOutput;
457}) & (MachineContext extends TContext ? {
458 context?: InitialContext<LowInfer<TContext>, TActor, TInput, TEvent>;
459} : {
460 context: InitialContext<LowInfer<TContext>, TActor, TInput, TEvent>;
461});
462export type UnknownMachineConfig = MachineConfig<MachineContext, EventObject>;
463export interface ProvidedActor {
464 src: string;
465 logic: UnknownActorLogic;
466 id?: string;
467}
468export interface SetupTypes<TContext extends MachineContext, TEvent extends EventObject, TChildrenMap extends Record<string, string>, TTag extends string, TInput, TOutput, TEmitted extends EventObject> {
469 context?: TContext;
470 events?: TEvent;
471 children?: TChildrenMap;
472 tags?: TTag;
473 input?: TInput;
474 output?: TOutput;
475 emitted?: TEmitted;
476}
477export interface MachineTypes<TContext extends MachineContext, TEvent extends EventObject, TActor extends ProvidedActor, TAction extends ParameterizedObject, TGuard extends ParameterizedObject, TDelay extends string, TTag extends string, TInput, TOutput, TEmitted extends EventObject, TTypesMeta = TypegenDisabled> extends SetupTypes<TContext, TEvent, never, TTag, TInput, TOutput, TEmitted> {
478 actors?: TActor;
479 actions?: TAction;
480 guards?: TGuard;
481 delays?: TDelay;
482 typegen?: TTypesMeta;
483}
484export interface HistoryStateNode<TContext extends MachineContext> extends StateNode<TContext> {
485 history: 'shallow' | 'deep';
486 target: string | undefined;
487}
488export type HistoryValue<TContext extends MachineContext, TEvent extends EventObject> = Record<string, Array<StateNode<TContext, TEvent>>>;
489export type AnyHistoryValue = HistoryValue<any, any>;
490export type StateFrom<T extends AnyStateMachine | ((...args: any[]) => AnyStateMachine)> = T extends AnyStateMachine ? ReturnType<T['transition']> : T extends (...args: any[]) => AnyStateMachine ? ReturnType<ReturnType<T>['transition']> : never;
491export type Transitions<TContext extends MachineContext, TEvent extends EventObject> = Array<TransitionDefinition<TContext, TEvent>>;
492export interface DoneActorEvent<TOutput = unknown> {
493 type: `xstate.done.actor.${string}`;
494 output: TOutput;
495}
496export interface ErrorActorEvent<TErrorData = unknown> extends EventObject {
497 type: `xstate.error.actor.${string}`;
498 error: TErrorData;
499}
500export interface SnapshotEvent<TSnapshot extends Snapshot<unknown> = Snapshot<unknown>> extends EventObject {
501 type: `xstate.snapshot.${string}`;
502 snapshot: TSnapshot;
503}
504export interface DoneStateEvent<TOutput = unknown> extends EventObject {
505 type: `xstate.done.state.${string}`;
506 output: TOutput;
507}
508export type DelayExpr<TContext extends MachineContext, TExpressionEvent extends EventObject, TParams extends ParameterizedObject['params'] | undefined, TEvent extends EventObject> = (args: ActionArgs<TContext, TExpressionEvent, TEvent>, params: TParams) => number;
509export type LogExpr<TContext extends MachineContext, TExpressionEvent extends EventObject, TParams extends ParameterizedObject['params'] | undefined, TEvent extends EventObject> = (args: ActionArgs<TContext, TExpressionEvent, TEvent>, params: TParams) => unknown;
510export type SendExpr<TContext extends MachineContext, TExpressionEvent extends EventObject, TParams extends ParameterizedObject['params'] | undefined, TSentEvent extends EventObject, TEvent extends EventObject> = (args: ActionArgs<TContext, TExpressionEvent, TEvent>, params: TParams) => TSentEvent;
511export declare enum SpecialTargets {
512 Parent = "#_parent",
513 Internal = "#_internal"
514}
515export interface SendToActionOptions<TContext extends MachineContext, TExpressionEvent extends EventObject, TParams extends ParameterizedObject['params'] | undefined, TEvent extends EventObject, TDelay extends string> extends RaiseActionOptions<TContext, TExpressionEvent, TParams, TEvent, TDelay> {
516}
517export interface RaiseActionOptions<TContext extends MachineContext, TExpressionEvent extends EventObject, TParams extends ParameterizedObject['params'] | undefined, TEvent extends EventObject, TDelay extends string> {
518 id?: string;
519 delay?: Delay<TDelay> | DelayExpr<TContext, TExpressionEvent, TParams, TEvent>;
520}
521export interface RaiseActionParams<TContext extends MachineContext, TExpressionEvent extends EventObject, TParams extends ParameterizedObject['params'] | undefined, TEvent extends EventObject, TDelay extends string> extends RaiseActionOptions<TContext, TExpressionEvent, TParams, TEvent, TDelay> {
522 event: TEvent | SendExpr<TContext, TExpressionEvent, TParams, TEvent, TEvent>;
523}
524export interface SendToActionParams<TContext extends MachineContext, TExpressionEvent extends EventObject, TParams extends ParameterizedObject['params'] | undefined, TSentEvent extends EventObject, TEvent extends EventObject, TDelay extends string> extends SendToActionOptions<TContext, TExpressionEvent, TParams, TEvent, TDelay> {
525 event: TSentEvent | SendExpr<TContext, TExpressionEvent, TParams, TSentEvent, TEvent>;
526}
527export type Assigner<TContext extends MachineContext, TExpressionEvent extends EventObject, TParams extends ParameterizedObject['params'] | undefined, TEvent extends EventObject, TActor extends ProvidedActor> = (args: AssignArgs<TContext, TExpressionEvent, TEvent, TActor>, params: TParams) => Partial<TContext>;
528export type PartialAssigner<TContext extends MachineContext, TExpressionEvent extends EventObject, TParams extends ParameterizedObject['params'] | undefined, TEvent extends EventObject, TActor extends ProvidedActor, TKey extends keyof TContext> = (args: AssignArgs<TContext, TExpressionEvent, TEvent, TActor>, params: TParams) => TContext[TKey];
529export type PropertyAssigner<TContext extends MachineContext, TExpressionEvent extends EventObject, TParams extends ParameterizedObject['params'] | undefined, TEvent extends EventObject, TActor extends ProvidedActor> = {
530 [K in keyof TContext]?: PartialAssigner<TContext, TExpressionEvent, TParams, TEvent, TActor, K> | TContext[K];
531};
532export type Mapper<TContext extends MachineContext, TExpressionEvent extends EventObject, TResult, TEvent extends EventObject> = (args: {
533 context: TContext;
534 event: TExpressionEvent;
535 self: ActorRef<MachineSnapshot<TContext, TEvent, Record<string, AnyActorRef>, // TODO: this should be replaced with `TChildren`
536 StateValue, string, unknown>, TEvent>;
537}) => TResult;
538export interface TransitionDefinition<TContext extends MachineContext, TEvent extends EventObject> extends Omit<TransitionConfig<TContext, TEvent, TEvent, TODO, TODO, TODO, TODO>, 'target' | 'guard'> {
539 target: ReadonlyArray<StateNode<TContext, TEvent>> | undefined;
540 source: StateNode<TContext, TEvent>;
541 actions: readonly UnknownAction[];
542 reenter: boolean;
543 guard?: UnknownGuard;
544 eventType: EventDescriptor<TEvent>;
545 toJSON: () => {
546 target: string[] | undefined;
547 source: string;
548 actions: readonly UnknownAction[];
549 guard?: UnknownGuard;
550 eventType: EventDescriptor<TEvent>;
551 meta?: Record<string, any>;
552 };
553}
554export type AnyTransitionDefinition = TransitionDefinition<any, any>;
555export interface InitialTransitionDefinition<TContext extends MachineContext, TEvent extends EventObject> extends TransitionDefinition<TContext, TEvent> {
556 target: ReadonlyArray<StateNode<TContext, TEvent>>;
557 guard?: never;
558}
559export type TransitionDefinitionMap<TContext extends MachineContext, TEvent extends EventObject> = {
560 [K in EventDescriptor<TEvent>]: Array<TransitionDefinition<TContext, ExtractEvent<TEvent, K>>>;
561};
562export interface DelayedTransitionDefinition<TContext extends MachineContext, TEvent extends EventObject> extends TransitionDefinition<TContext, TEvent> {
563 delay: number | string | DelayExpr<TContext, TEvent, undefined, TEvent>;
564}
565export interface StateLike<TContext extends MachineContext> {
566 value: StateValue;
567 context: TContext;
568 event: EventObject;
569}
570export interface StateConfig<TContext extends MachineContext, TEvent extends EventObject> {
571 context: TContext;
572 historyValue?: HistoryValue<TContext, TEvent>;
573 children: Record<string, AnyActorRef>;
574 status: 'active' | 'done' | 'error' | 'stopped';
575 output?: any;
576 error?: unknown;
577 machine?: StateMachine<TContext, TEvent, any, any, any, any, any, any, any, any, any, any>;
578}
579export interface ActorOptions<TLogic extends AnyActorLogic> {
580 /**
581 * The clock that is responsible for setting and clearing timeouts, such as delayed events and transitions.
582 *
583 * @remarks
584 * You can create your own “clock”. The clock interface is an object with two functions/methods:
585 *
586 * - `setTimeout` - same arguments as `window.setTimeout(fn, timeout)`
587 * - `clearTimeout` - same arguments as `window.clearTimeout(id)`
588 *
589 * By default, the native `setTimeout` and `clearTimeout` functions are used.
590 *
591 * For testing, XState provides `SimulatedClock`.
592 *
593 * @see {@link Clock}
594 * @see {@link SimulatedClock}
595 */
596 clock?: Clock;
597 /**
598 * Specifies the logger to be used for `log(...)` actions. Defaults to the native `console.log(...)` method.
599 */
600 logger?: (...args: any[]) => void;
601 parent?: AnyActorRef;
602 /**
603 * The custom `id` for referencing this service.
604 */
605 id?: string;
606 /**
607 * @deprecated Use `inspect` instead.
608 */
609 devTools?: never;
610 /**
611 * The system ID to register this actor under.
612 */
613 systemId?: string;
614 /**
615 * The input data to pass to the actor.
616 */
617 input?: InputFrom<TLogic>;
618 /**
619 * Initializes actor logic from a specific persisted internal state.
620 *
621 * @remarks
622 *
623 * If the state is compatible with the actor logic, when the actor is started it will be at that persisted state.
624 * Actions from machine actors will not be re-executed, because they are assumed to have been already executed.
625 * However, invocations will be restarted, and spawned actors will be restored recursively.
626 *
627 * Can be generated with {@link Actor.getPersistedSnapshot}.
628 *
629 * @see https://stately.ai/docs/persistence
630 */
631 snapshot?: Snapshot<unknown>;
632 /**
633 * @deprecated Use `snapshot` instead.
634 */
635 state?: Snapshot<unknown>;
636 /**
637 * The source actor logic.
638 */
639 src?: string | AnyActorLogic;
640 /**
641 * A callback function or observer object which can be used to inspect actor system updates.
642 *
643 * @remarks
644 * If a callback function is provided, it can accept an inspection event argument. The types of inspection events that can be observed include:
645 *
646 * - `@xstate.actor` - An actor ref has been created in the system
647 * - `@xstate.event` - An event was sent from a source actor ref to a target actor ref in the system
648 * - `@xstate.snapshot` - An actor ref emitted a snapshot due to a received event
649 *
650 * @example
651 * ```ts
652 * import { createMachine } from 'xstate';
653 *
654 * const machine = createMachine({
655 * // ...
656 * });
657 *
658 * const actor = createActor(machine, {
659 * inspect: (inspectionEvent) => {
660 * if (inspectionEvent.actorRef === actor) {
661 * // This event is for the root actor
662 * }
663 *
664 * if (inspectionEvent.type === '@xstate.actor') {
665 * console.log(inspectionEvent.actorRef);
666 * }
667 *
668 * if (inspectionEvent.type === '@xstate.event') {
669 * console.log(inspectionEvent.sourceRef);
670 * console.log(inspectionEvent.actorRef);
671 * console.log(inspectionEvent.event);
672 * }
673 *
674 * if (inspectionEvent.type === '@xstate.snapshot') {
675 * console.log(inspectionEvent.actorRef);
676 * console.log(inspectionEvent.event);
677 * console.log(inspectionEvent.snapshot);
678 * }
679 * }
680 * });
681 * ```
682 *
683 * Alternately, an observer object (`{ next?, error?, complete? }`) can be provided:
684 *
685 * @example
686 * ```ts
687 * const actor = createActor(machine, {
688 * inspect: {
689 * next: (inspectionEvent) => {
690 * if (inspectionEvent.actorRef === actor) {
691 * // This event is for the root actor
692 * }
693 *
694 * if (inspectionEvent.type === '@xstate.actor') {
695 * console.log(inspectionEvent.actorRef);
696 * }
697 *
698 * if (inspectionEvent.type === '@xstate.event') {
699 * console.log(inspectionEvent.sourceRef);
700 * console.log(inspectionEvent.actorRef);
701 * console.log(inspectionEvent.event);
702 * }
703 *
704 * if (inspectionEvent.type === '@xstate.snapshot') {
705 * console.log(inspectionEvent.actorRef);
706 * console.log(inspectionEvent.event);
707 * console.log(inspectionEvent.snapshot);
708 * }
709 * }
710 * }
711 * });
712 * ```
713 */
714 inspect?: Observer<InspectionEvent> | ((inspectionEvent: InspectionEvent) => void);
715}
716export type AnyActor = Actor<any>;
717/**
718 * @deprecated Use `AnyActor` instead.
719 */
720export type AnyInterpreter = AnyActor;
721export type Observer<T> = {
722 next?: (value: T) => void;
723 error?: (err: unknown) => void;
724 complete?: () => void;
725};
726export interface Subscription {
727 unsubscribe(): void;
728}
729export interface InteropObservable<T> {
730 [Symbol.observable]: () => InteropSubscribable<T>;
731}
732export interface InteropSubscribable<T> {
733 subscribe(observer: Observer<T>): Subscription;
734}
735export interface Subscribable<T> extends InteropSubscribable<T> {
736 subscribe(observer: Observer<T>): Subscription;
737 subscribe(next: (value: T) => void, error?: (error: any) => void, complete?: () => void): Subscription;
738}
739type EventDescriptorMatches<TEventType extends string, TNormalizedDescriptor> = TEventType extends TNormalizedDescriptor ? true : false;
740export type ExtractEvent<TEvent extends EventObject, TDescriptor extends EventDescriptor<TEvent>> = string extends TEvent['type'] ? TEvent : NormalizeDescriptor<TDescriptor> extends infer TNormalizedDescriptor ? TEvent extends any ? true extends EventDescriptorMatches<TEvent['type'], TNormalizedDescriptor> ? TEvent : never : never : never;
741export interface BaseActorRef<TEvent extends EventObject> {
742 send: (event: TEvent) => void;
743}
744export interface ActorLike<TCurrent, TEvent extends EventObject> extends Subscribable<TCurrent> {
745 send: (event: TEvent) => void;
746}
747export interface ActorRef<TSnapshot extends Snapshot<unknown>, TEvent extends EventObject, TEmitted extends EventObject = EventObject> extends Subscribable<TSnapshot>, InteropObservable<TSnapshot> {
748 /**
749 * The unique identifier for this actor relative to its parent.
750 */
751 id: string;
752 sessionId: string;
753 send: (event: TEvent) => void;
754 start: () => void;
755 getSnapshot: () => TSnapshot;
756 getPersistedSnapshot: () => Snapshot<unknown>;
757 stop: () => void;
758 toJSON?: () => any;
759 _parent?: AnyActorRef;
760 system: AnyActorSystem;
761 src: string | AnyActorLogic;
762 on: <TType extends TEmitted['type']>(type: TType, handler: (emitted: TEmitted & {
763 type: TType;
764 }) => void) => Subscription;
765}
766export type AnyActorRef = ActorRef<any, any, any>;
767export type ActorLogicFrom<T> = ReturnTypeOrValue<T> extends infer R ? R extends StateMachine<any, any, any, any, any, any, any, any, any, any, any, any> ? R : R extends Promise<infer U> ? PromiseActorLogic<U> : never : never;
768export type ActorRefFrom<T> = ReturnTypeOrValue<T> extends infer R ? R extends StateMachine<infer TContext, infer TEvent, infer TChildren, infer _TActor, infer _TAction, infer _TGuard, infer _TDelay, infer TStateValue, infer TTag, infer _TInput, infer TOutput, infer TEmitted, infer _TResolvedTypesMeta> ? ActorRef<MachineSnapshot<TContext, TEvent, TChildren, TStateValue, TTag, TOutput>, TEvent, TEmitted> : R extends Promise<infer U> ? ActorRefFrom<PromiseActorLogic<U>> : R extends ActorLogic<infer TSnapshot, infer TEvent, infer _TInput, infer _TSystem, infer TEmitted> ? ActorRef<TSnapshot, TEvent, TEmitted> : never : never;
769export type DevToolsAdapter = (service: AnyActor) => void;
770/**
771 * @deprecated Use `Actor<T>` instead.
772 */
773export type InterpreterFrom<T extends AnyStateMachine | ((...args: any[]) => AnyStateMachine)> = ReturnTypeOrValue<T> extends StateMachine<infer TContext, infer TEvent, infer TChildren, infer _TActor, infer _TAction, infer _TGuard, infer _TDelay, infer TStateValue, infer TTag, infer TInput, infer TOutput, infer TEmitted, infer _TResolvedTypesMeta> ? Actor<ActorLogic<MachineSnapshot<TContext, TEvent, TChildren, TStateValue, TTag, TOutput>, TEvent, TInput, AnyActorSystem, TEmitted>> : never;
774export type MachineImplementationsFrom<T extends AnyStateMachine | ((...args: any[]) => AnyStateMachine), TRequireMissingImplementations extends boolean = false> = ReturnTypeOrValue<T> extends StateMachine<infer TContext, infer _TEvent, infer _TChildren, infer _TActor, infer _TAction, infer _TGuard, infer _TDelay, infer _TStateValue, infer _TTag, infer _TInput, infer _TOutput, infer _TEmitted, infer TResolvedTypesMeta> ? InternalMachineImplementations<TContext, TResolvedTypesMeta, TRequireMissingImplementations> : never;
775export type __ResolvedTypesMetaFrom<T> = T extends StateMachine<any, // context
776any, // event
777any, // children
778any, // actor
779any, // action
780any, // guard
781any, // delay
782any, // state value
783any, // tag
784any, // input
785any, // output
786any, // emitted
787infer TResolvedTypesMeta> ? TResolvedTypesMeta : never;
788export interface ActorScope<TSnapshot extends Snapshot<unknown>, TEvent extends EventObject, TSystem extends AnyActorSystem = AnyActorSystem, TEmitted extends EventObject = EventObject> {
789 self: ActorRef<TSnapshot, TEvent, TEmitted>;
790 id: string;
791 sessionId: string;
792 logger: (...args: any[]) => void;
793 defer: (fn: () => void) => void;
794 emit: (event: TEmitted) => void;
795 system: TSystem;
796 stopChild: (child: AnyActorRef) => void;
797}
798export type AnyActorScope = ActorScope<any, // TSnapshot
799any, // TEvent
800AnyActorSystem, any>;
801export type Snapshot<TOutput> = {
802 status: 'active';
803 output: undefined;
804 error: undefined;
805} | {
806 status: 'done';
807 output: TOutput;
808 error: undefined;
809} | {
810 status: 'error';
811 output: undefined;
812 error: unknown;
813} | {
814 status: 'stopped';
815 output: undefined;
816 error: undefined;
817};
818/**
819 * Represents logic which can be used by an actor.
820 *
821 * @template TSnapshot - The type of the snapshot.
822 * @template TEvent - The type of the event object.
823 * @template TInput - The type of the input.
824 * @template TSystem - The type of the actor system.
825 */
826export interface ActorLogic<in out TSnapshot extends Snapshot<unknown>, // it's invariant because it's also part of `ActorScope["self"]["getSnapshot"]`
827in out TEvent extends EventObject, // it's invariant because it's also part of `ActorScope["self"]["send"]`
828in TInput = NonReducibleUnknown, TSystem extends AnyActorSystem = AnyActorSystem, in out TEmitted extends EventObject = EventObject> {
829 /** The initial setup/configuration used to create the actor logic. */
830 config?: unknown;
831 /**
832 * Transition function that processes the current state and an incoming message
833 * to produce a new state.
834 * @param snapshot - The current state.
835 * @param message - The incoming message.
836 * @param actorScope - The actor scope.
837 * @returns The new state.
838 */
839 transition: (snapshot: TSnapshot, message: TEvent, actorScope: ActorScope<TSnapshot, TEvent, TSystem, TEmitted>) => TSnapshot;
840 /**
841 * Called to provide the initial state of the actor.
842 * @param actorScope - The actor scope.
843 * @param input - The input for the initial state.
844 * @returns The initial state.
845 */
846 getInitialSnapshot: (actorScope: ActorScope<TSnapshot, TEvent, TSystem, TEmitted>, input: TInput) => TSnapshot;
847 /**
848 * Called when Actor is created to restore the internal state of the actor given a persisted state.
849 * The persisted state can be created by `getPersistedSnapshot`.
850 * @param persistedState - The persisted state to restore from.
851 * @param actorScope - The actor scope.
852 * @returns The restored state.
853 */
854 restoreSnapshot?: (persistedState: Snapshot<unknown>, actorScope: ActorScope<TSnapshot, TEvent, AnyActorSystem, TEmitted>) => TSnapshot;
855 /**
856 * Called when the actor is started.
857 * @param snapshot - The starting state.
858 * @param actorScope - The actor scope.
859 */
860 start?: (snapshot: TSnapshot, actorScope: ActorScope<TSnapshot, TEvent, AnyActorSystem, TEmitted>) => void;
861 /**
862 * Obtains the internal state of the actor in a representation which can be be persisted.
863 * The persisted state can be restored by `restoreSnapshot`.
864 * @param snapshot - The current state.
865 * @returns The a representation of the internal state to be persisted.
866 */
867 getPersistedSnapshot: (snapshot: TSnapshot, options?: unknown) => Snapshot<unknown>;
868}
869export type AnyActorLogic = ActorLogic<any, // snapshot
870any, // event
871any, // input
872any, // system
873any>;
874export type UnknownActorLogic = ActorLogic<any, // snapshot
875any, // event
876never, // input
877AnyActorSystem, any>;
878export type SnapshotFrom<T> = ReturnTypeOrValue<T> extends infer R ? R extends ActorRef<infer TSnapshot, infer _> ? TSnapshot : R extends Actor<infer TLogic> ? SnapshotFrom<TLogic> : R extends ActorLogic<infer _TSnapshot, infer _TEvent, infer _TInput, infer _TEmitted, infer _TSystem> ? ReturnType<R['transition']> : R extends ActorScope<infer TSnapshot, infer _TEvent, infer _TEmitted, infer _TSystem> ? TSnapshot : never : never;
879export type EventFromLogic<TLogic extends AnyActorLogic> = TLogic extends ActorLogic<infer _TSnapshot, infer TEvent, infer _TInput, infer _TEmitted, infer _TSystem> ? TEvent : never;
880export type EmittedFrom<TLogic extends AnyActorLogic> = TLogic extends ActorLogic<infer _TSnapshot, infer _TEvent, infer _TInput, infer _TSystem, infer TEmitted> ? TEmitted : never;
881type ResolveEventType<T> = ReturnTypeOrValue<T> extends infer R ? R extends StateMachine<infer _TContext, infer TEvent, infer _TChildren, infer _TActor, infer _TAction, infer _TGuard, infer _TDelay, infer _TStateValue, infer _TTag, infer _TInput, infer _TOutput, infer _TEmitted, infer _TResolvedTypesMeta> ? TEvent : R extends MachineSnapshot<infer _TContext, infer TEvent, infer _TChildren, infer _TStateValue, infer _TTag, infer _TOutput> ? TEvent : R extends ActorRef<infer _, infer TEvent> ? TEvent : never : never;
882export type EventFrom<T, K extends Prop<TEvent, 'type'> = never, TEvent extends EventObject = ResolveEventType<T>> = IsNever<K> extends true ? TEvent : ExtractEvent<TEvent, K>;
883export type ContextFrom<T> = ReturnTypeOrValue<T> extends infer R ? R extends StateMachine<infer TContext, infer _TEvent, infer _TChildren, infer _TActor, infer _TAction, infer _TGuard, infer _TDelay, infer _TStateValue, infer _TTag, infer _TInput, infer _TOutput, infer _TEmitted, infer _TResolvedTypesMeta> ? TContext : R extends MachineSnapshot<infer TContext, infer _TEvent, infer _TChildren, infer _TStateValue, infer _TTag, infer _TOutput> ? TContext : R extends Actor<infer TActorLogic> ? TActorLogic extends StateMachine<infer TContext, infer _TEvent, infer _TChildren, infer _TActor, infer _TAction, infer _TGuard, infer _TDelay, infer _TTag, infer _TInput, infer _TOutput, infer _TEmitted, infer _TResolvedTypesMeta> ? TContext : never : never : never;
884export type InferEvent<E extends EventObject> = {
885 [T in E['type']]: {
886 type: T;
887 } & Extract<E, {
888 type: T;
889 }>;
890}[E['type']];
891export type TODO = any;
892export type StateValueFrom<TMachine extends AnyStateMachine> = Parameters<StateFrom<TMachine>['matches']>[0];
893export type TagsFrom<TMachine extends AnyStateMachine> = Parameters<StateFrom<TMachine>['hasTag']>[0];
894export interface ActorSystemInfo {
895 actors: Record<string, AnyActorRef>;
896}
897export type RequiredActorOptions<TActor extends ProvidedActor> = (undefined extends TActor['id'] ? never : 'id') | (undefined extends InputFrom<TActor['logic']> ? never : 'input');
898type ExtractLiteralString<T extends string | undefined> = T extends string ? string extends T ? never : T : never;
899type ToConcreteChildren<TActor extends ProvidedActor> = {
900 [A in TActor as ExtractLiteralString<A['id']>]?: ActorRefFrom<A['logic']>;
901};
902export type ToChildren<TActor extends ProvidedActor> = string extends TActor['src'] ? Record<string, AnyActorRef> : Compute<ToConcreteChildren<TActor> & {
903 include: {
904 [id: string]: TActor extends any ? ActorRefFrom<TActor['logic']> | undefined : never;
905 };
906 exclude: {};
907}[undefined extends TActor['id'] ? 'include' : string extends TActor['id'] ? 'include' : 'exclude']>;
908export type StateSchema = {
909 states?: Record<string, StateSchema>;
910};
911export {};