UNPKG

54 kBTypeScriptView Raw
1import { Clock, Interpreter } from './interpreter';
2import { Model } from './model.types';
3import { State } from './State';
4import { StateNode } from './StateNode';
5import { MarkAllImplementationsAsProvided, TypegenDisabled, ResolveTypegenMeta, TypegenConstraint, AreAllImplementationsAssumedToBeProvided, TypegenEnabled } from './typegenTypes';
6export declare type AnyFunction = (...args: any[]) => any;
7declare type ReturnTypeOrValue<T> = T extends AnyFunction ? ReturnType<T> : T;
8export declare type IsNever<T> = [T] extends [never] ? true : false;
9export declare type Compute<A extends any> = {
10 [K in keyof A]: A[K];
11} & unknown;
12export declare type Prop<T, K> = K extends keyof T ? T[K] : never;
13export declare type Values<T> = T[keyof T];
14export declare type Merge<M, N> = Omit<M, keyof N> & N;
15export declare type IndexByType<T extends {
16 type: string;
17}> = {
18 [K in T['type']]: T extends any ? (K extends T['type'] ? T : never) : never;
19};
20export declare type Equals<A1 extends any, A2 extends any> = (<A>() => A extends A2 ? true : false) extends <A>() => A extends A1 ? true : false ? true : false;
21export declare type IsAny<T> = Equals<T, any>;
22export declare type Cast<A, B> = A extends B ? A : B;
23export declare type NoInfer<T> = [T][T extends any ? 0 : any];
24export declare type LowInfer<T> = T & {};
25export declare type EventType = string;
26export declare type ActionType = string;
27export declare type MetaObject = Record<string, any>;
28/**
29 * The full definition of an event, with a string `type`.
30 */
31export interface EventObject {
32 /**
33 * The type of event that is sent.
34 */
35 type: string;
36}
37export interface AnyEventObject extends EventObject {
38 [key: string]: any;
39}
40export interface BaseActionObject {
41 /**
42 * The type of action that is executed.
43 */
44 type: string;
45 [other: string]: any;
46}
47/**
48 * The full definition of an action, with a string `type` and an
49 * `exec` implementation function.
50 */
51export interface ActionObject<TContext, TEvent extends EventObject> extends BaseActionObject {
52 /**
53 * The implementation for executing the action.
54 */
55 exec?: ActionFunction<TContext, TEvent> | undefined;
56}
57export declare type DefaultContext = Record<string, any> | undefined;
58export declare type EventData = Record<string, any> & {
59 type?: never;
60};
61/**
62 * The specified string event types or the specified event objects.
63 */
64export declare type Event<TEvent extends EventObject> = TEvent['type'] | TEvent;
65export interface ActionMeta<TContext, TEvent extends EventObject, TAction extends BaseActionObject = BaseActionObject> extends StateMeta<TContext, TEvent> {
66 action: TAction;
67 _event: SCXML.Event<TEvent>;
68}
69export interface AssignMeta<TContext, TEvent extends EventObject> {
70 state?: State<TContext, TEvent>;
71 action: AssignAction<TContext, TEvent>;
72 _event: SCXML.Event<TEvent>;
73}
74export declare type ActionFunction<TContext, TEvent extends EventObject, TAction extends BaseActionObject = BaseActionObject> = {
75 bivarianceHack(context: TContext, event: TEvent, meta: ActionMeta<TContext, TEvent, TAction>): void;
76}['bivarianceHack'];
77export interface ChooseCondition<TContext, TEvent extends EventObject> {
78 cond?: Condition<TContext, TEvent>;
79 actions: Actions<TContext, TEvent>;
80}
81export declare type Action<TContext, TEvent extends EventObject> = ActionType | ActionObject<TContext, TEvent> | ActionFunction<TContext, TEvent>;
82/**
83 * Extracts action objects that have no extra properties.
84 */
85declare type SimpleActionsOf<T extends BaseActionObject> = ActionObject<any, any> extends T ? T : ExtractWithSimpleSupport<T>;
86/**
87 * Events that do not require payload
88 */
89export declare type SimpleEventsOf<TEvent extends EventObject> = ExtractWithSimpleSupport<TEvent>;
90export declare type BaseAction<TContext, TEvent extends EventObject, TAction extends BaseActionObject> = SimpleActionsOf<TAction>['type'] | TAction | RaiseAction<any> | SendAction<TContext, TEvent, any> | AssignAction<TContext, TEvent> | LogAction<TContext, TEvent> | CancelAction | StopAction<TContext, TEvent> | ChooseAction<TContext, TEvent> | ActionFunction<TContext, TEvent>;
91export declare type BaseActions<TContext, TEvent extends EventObject, TAction extends BaseActionObject> = SingleOrArray<BaseAction<TContext, TEvent, TAction>>;
92export declare type Actions<TContext, TEvent extends EventObject> = SingleOrArray<Action<TContext, TEvent>>;
93export declare type StateKey = string | AnyState;
94export interface StateValueMap {
95 [key: string]: StateValue;
96}
97/**
98 * The string or object representing the state value relative to the parent state node.
99 *
100 * - For a child atomic state node, this is a string, e.g., `"pending"`.
101 * - For complex state nodes, this is an object, e.g., `{ success: "someChildState" }`.
102 */
103export declare type StateValue = string | StateValueMap;
104export interface HistoryValue {
105 states: Record<string, HistoryValue | undefined>;
106 current: StateValue | undefined;
107}
108export declare type ConditionPredicate<TContext, TEvent extends EventObject> = (context: TContext, event: TEvent, meta: GuardMeta<TContext, TEvent>) => boolean;
109export declare type DefaultGuardType = 'xstate.guard';
110export interface GuardPredicate<TContext, TEvent extends EventObject> {
111 type: DefaultGuardType;
112 name: string | undefined;
113 predicate: ConditionPredicate<TContext, TEvent>;
114}
115export declare type Guard<TContext, TEvent extends EventObject> = GuardPredicate<TContext, TEvent> | (Record<string, any> & {
116 type: string;
117});
118export interface GuardMeta<TContext, TEvent extends EventObject> extends StateMeta<TContext, TEvent> {
119 cond: Guard<TContext, TEvent>;
120}
121export declare type Condition<TContext, TEvent extends EventObject> = string | ConditionPredicate<TContext, TEvent> | Guard<TContext, TEvent>;
122export declare type TransitionTarget<TContext, TEvent extends EventObject> = SingleOrArray<string | StateNode<TContext, any, TEvent>>;
123export declare type TransitionTargets<TContext> = Array<string | StateNode<TContext, any>>;
124export interface TransitionConfig<TContext, TEvent extends EventObject> {
125 cond?: Condition<TContext, TEvent>;
126 actions?: Actions<TContext, TEvent>;
127 in?: StateValue;
128 internal?: boolean;
129 target?: TransitionTarget<TContext, TEvent> | undefined;
130 meta?: Record<string, any>;
131 description?: string;
132}
133export interface TargetTransitionConfig<TContext, TEvent extends EventObject> extends TransitionConfig<TContext, TEvent> {
134 target: TransitionTarget<TContext, TEvent>;
135}
136export declare type ConditionalTransitionConfig<TContext, TEvent extends EventObject = EventObject> = Array<TransitionConfig<TContext, TEvent>>;
137export declare type Transition<TContext, TEvent extends EventObject = EventObject> = string | TransitionConfig<TContext, TEvent> | ConditionalTransitionConfig<TContext, TEvent>;
138export declare type DisposeActivityFunction = () => void;
139export declare type ActivityConfig<TContext, TEvent extends EventObject> = (ctx: TContext, activity: ActivityDefinition<TContext, TEvent>) => DisposeActivityFunction | void;
140export declare type Activity<TContext, TEvent extends EventObject> = string | ActivityDefinition<TContext, TEvent>;
141export interface ActivityDefinition<TContext, TEvent extends EventObject> extends ActionObject<TContext, TEvent> {
142 id: string;
143 type: string;
144}
145export declare type Sender<TEvent extends EventObject> = (event: Event<TEvent>) => void;
146declare type ExcludeType<A> = {
147 [K in Exclude<keyof A, 'type'>]: A[K];
148};
149declare type ExtractExtraParameters<A, T> = A extends {
150 type: T;
151} ? ExcludeType<A> : never;
152declare type ExtractWithSimpleSupport<T extends {
153 type: string;
154}> = T extends any ? {
155 type: T['type'];
156} extends T ? T : never : never;
157declare type NeverIfEmpty<T> = {} extends T ? never : T;
158export interface PayloadSender<TEvent extends EventObject> {
159 /**
160 * Send an event object or just the event type, if the event has no other payload
161 */
162 (event: TEvent | ExtractWithSimpleSupport<TEvent>['type']): void;
163 /**
164 * Send an event type and its payload
165 */
166 <K extends TEvent['type']>(eventType: K, payload: NeverIfEmpty<ExtractExtraParameters<TEvent, K>>): void;
167}
168export declare type Receiver<TEvent extends EventObject> = (listener: {
169 bivarianceHack(event: TEvent): void;
170}['bivarianceHack']) => void;
171export declare type InvokeCallback<TEvent extends EventObject = AnyEventObject, TSentEvent extends EventObject = AnyEventObject> = (callback: Sender<TSentEvent>, onReceive: Receiver<TEvent>) => (() => void) | Promise<any> | void;
172export interface InvokeMeta {
173 data: any;
174 src: InvokeSourceDefinition;
175 meta?: MetaObject;
176}
177/**
178 * Returns either a Promises or a callback handler (for streams of events) given the
179 * machine's current `context` and `event` that invoked the service.
180 *
181 * For Promises, the only events emitted to the parent will be:
182 * - `done.invoke.<id>` with the `data` containing the resolved payload when the promise resolves, or:
183 * - `error.platform.<id>` with the `data` containing the caught error, and `src` containing the service `id`.
184 *
185 * For callback handlers, the `callback` will be provided, which will send events to the parent service.
186 *
187 * @param context The current machine `context`
188 * @param event The event that invoked the service
189 */
190export declare type InvokeCreator<TContext, TSourceEvent extends EventObject, TFinalContext = any, TInputEvent extends EventObject = any, // keeping a slot for it here, but it's actually not used right now to ensure that the communication contract between actors is satisfied
191TOutputEvent extends EventObject = TSourceEvent> = (context: TContext, event: TSourceEvent, meta: InvokeMeta) => PromiseLike<TFinalContext> | StateMachine<TFinalContext, any, any, any, any, any, any> | Subscribable<EventObject> | InvokeCallback<TInputEvent, TOutputEvent> | Behavior<any>;
192export interface InvokeDefinition<TContext, TEvent extends EventObject> extends ActivityDefinition<TContext, TEvent> {
193 /**
194 * The source of the machine to be invoked, or the machine itself.
195 */
196 src: string | InvokeSourceDefinition;
197 /**
198 * If `true`, events sent to the parent service will be forwarded to the invoked service.
199 *
200 * Default: `false`
201 */
202 autoForward?: boolean;
203 /**
204 * @deprecated
205 *
206 * Use `autoForward` property instead of `forward`. Support for `forward` will get removed in the future.
207 */
208 forward?: boolean;
209 /**
210 * Data from the parent machine's context to set as the (partial or full) context
211 * for the invoked child machine.
212 *
213 * Data should be mapped to match the child machine's context shape.
214 */
215 data?: Mapper<TContext, TEvent, any> | PropertyMapper<TContext, TEvent, any>;
216 meta?: MetaObject;
217}
218export interface Delay {
219 id: string;
220 /**
221 * The time to delay the event, in milliseconds.
222 */
223 delay: number;
224}
225export declare type DelayedTransitions<TContext, TEvent extends EventObject> = Record<string | number, string | SingleOrArray<TransitionConfig<TContext, TEvent>>> | Array<TransitionConfig<TContext, TEvent> & {
226 delay: number | string | Expr<TContext, TEvent, number>;
227}>;
228export declare type StateTypes = 'atomic' | 'compound' | 'parallel' | 'final' | 'history' | string;
229export declare type SingleOrArray<T> = T[] | T;
230export declare type StateNodesConfig<TContext, TStateSchema extends StateSchema, TEvent extends EventObject> = {
231 [K in keyof TStateSchema['states']]: StateNode<TContext, TStateSchema['states'][K], TEvent>;
232};
233export declare type StatesConfig<TContext, TStateSchema extends StateSchema, TEvent extends EventObject, TAction extends BaseActionObject = BaseActionObject> = {
234 [K in keyof TStateSchema['states']]: StateNodeConfig<TContext, TStateSchema['states'][K], TEvent, TAction>;
235};
236export declare type StatesDefinition<TContext, TStateSchema extends StateSchema, TEvent extends EventObject> = {
237 [K in keyof TStateSchema['states']]: StateNodeDefinition<TContext, TStateSchema['states'][K], TEvent>;
238};
239export declare type TransitionConfigTarget<TContext, TEvent extends EventObject> = string | undefined | StateNode<TContext, any, TEvent>;
240export declare type TransitionConfigOrTarget<TContext, TEvent extends EventObject> = SingleOrArray<TransitionConfigTarget<TContext, TEvent> | TransitionConfig<TContext, TEvent>>;
241export declare type TransitionsConfigMap<TContext, TEvent extends EventObject> = {
242 [K in TEvent['type'] | '' | '*']?: K extends '' | '*' ? TransitionConfigOrTarget<TContext, TEvent> : TransitionConfigOrTarget<TContext, ExtractEvent<TEvent, K>>;
243};
244declare type TransitionsConfigArray<TContext, TEvent extends EventObject> = Array<(TEvent extends EventObject ? TransitionConfig<TContext, TEvent> & {
245 event: TEvent['type'];
246} : never) | (TransitionConfig<TContext, TEvent> & {
247 event: '';
248}) | (TransitionConfig<TContext, TEvent> & {
249 event: '*';
250})>;
251export declare type TransitionsConfig<TContext, TEvent extends EventObject> = TransitionsConfigMap<TContext, TEvent> | TransitionsConfigArray<TContext, TEvent>;
252export interface InvokeSourceDefinition {
253 [key: string]: any;
254 type: string;
255}
256export interface InvokeConfig<TContext, TEvent extends EventObject> {
257 /**
258 * The unique identifier for the invoked machine. If not specified, this
259 * will be the machine's own `id`, or the URL (from `src`).
260 */
261 id?: string;
262 /**
263 * The source of the machine to be invoked, or the machine itself.
264 */
265 src: string | InvokeSourceDefinition | AnyStateMachine | InvokeCreator<TContext, TEvent, any>;
266 /**
267 * If `true`, events sent to the parent service will be forwarded to the invoked service.
268 *
269 * Default: `false`
270 */
271 autoForward?: boolean;
272 /**
273 * @deprecated
274 *
275 * Use `autoForward` property instead of `forward`. Support for `forward` will get removed in the future.
276 */
277 forward?: boolean;
278 /**
279 * Data from the parent machine's context to set as the (partial or full) context
280 * for the invoked child machine.
281 *
282 * Data should be mapped to match the child machine's context shape.
283 */
284 data?: Mapper<TContext, TEvent, any> | PropertyMapper<TContext, TEvent, any>;
285 /**
286 * The transition to take upon the invoked child machine reaching its final top-level state.
287 */
288 onDone?: string | SingleOrArray<TransitionConfig<TContext, DoneInvokeEvent<any>>>;
289 /**
290 * The transition to take upon the invoked child machine sending an error event.
291 */
292 onError?: string | SingleOrArray<TransitionConfig<TContext, DoneInvokeEvent<any>>>;
293 /**
294 * Meta data related to this invocation
295 */
296 meta?: MetaObject;
297}
298export interface StateNodeConfig<TContext, TStateSchema extends StateSchema, TEvent extends EventObject, TAction extends BaseActionObject = BaseActionObject> {
299 /**
300 * The relative key of the state node, which represents its location in the overall state value.
301 * This is automatically determined by the configuration shape via the key where it was defined.
302 */
303 key?: string;
304 /**
305 * The initial state node key.
306 */
307 initial?: keyof TStateSchema['states'] | undefined;
308 /**
309 * @deprecated
310 */
311 parallel?: boolean | undefined;
312 /**
313 * The type of this state node:
314 *
315 * - `'atomic'` - no child state nodes
316 * - `'compound'` - nested child state nodes (XOR)
317 * - `'parallel'` - orthogonal nested child state nodes (AND)
318 * - `'history'` - history state node
319 * - `'final'` - final state node
320 */
321 type?: 'atomic' | 'compound' | 'parallel' | 'final' | 'history';
322 /**
323 * Indicates whether the state node is a history state node, and what
324 * type of history:
325 * shallow, deep, true (shallow), false (none), undefined (none)
326 */
327 history?: 'shallow' | 'deep' | boolean | undefined;
328 /**
329 * The mapping of state node keys to their state node configurations (recursive).
330 */
331 states?: StatesConfig<TContext, TStateSchema, TEvent, TAction> | undefined;
332 /**
333 * The services to invoke upon entering this state node. These services will be stopped upon exiting this state node.
334 */
335 invoke?: SingleOrArray<InvokeConfig<TContext, TEvent> | AnyStateMachine>;
336 /**
337 * The mapping of event types to their potential transition(s).
338 */
339 on?: TransitionsConfig<TContext, TEvent>;
340 /**
341 * The action(s) to be executed upon entering the state node.
342 *
343 * @deprecated Use `entry` instead.
344 */
345 onEntry?: Actions<TContext, TEvent>;
346 /**
347 * The action(s) to be executed upon entering the state node.
348 */
349 entry?: BaseActions<TContext, TEvent, TAction>;
350 /**
351 * The action(s) to be executed upon exiting the state node.
352 *
353 * @deprecated Use `exit` instead.
354 */
355 onExit?: Actions<TContext, TEvent>;
356 /**
357 * The action(s) to be executed upon exiting the state node.
358 */
359 exit?: BaseActions<TContext, TEvent, TAction>;
360 /**
361 * The potential transition(s) to be taken upon reaching a final child state node.
362 *
363 * This is equivalent to defining a `[done(id)]` transition on this state node's `on` property.
364 */
365 onDone?: string | SingleOrArray<TransitionConfig<TContext, DoneEventObject>> | undefined;
366 /**
367 * The mapping (or array) of delays (in milliseconds) to their potential transition(s).
368 * The delayed transitions are taken after the specified delay in an interpreter.
369 */
370 after?: DelayedTransitions<TContext, TEvent>;
371 /**
372 * An eventless transition that is always taken when this state node is active.
373 * Equivalent to a transition specified as an empty `''`' string in the `on` property.
374 */
375 always?: TransitionConfigOrTarget<TContext, TEvent>;
376 /**
377 * The activities to be started upon entering the state node,
378 * and stopped upon exiting the state node.
379 *
380 * @deprecated Use `invoke` instead.
381 */
382 activities?: SingleOrArray<Activity<TContext, TEvent>>;
383 /**
384 * @private
385 */
386 parent?: StateNode<TContext, any, TEvent>;
387 strict?: boolean | undefined;
388 /**
389 * The meta data associated with this state node, which will be returned in State instances.
390 */
391 meta?: TStateSchema extends {
392 meta: infer D;
393 } ? D : any;
394 /**
395 * The data sent with the "done.state._id_" event if this is a final state node.
396 *
397 * The data will be evaluated with the current `context` and placed on the `.data` property
398 * of the event.
399 */
400 data?: Mapper<TContext, TEvent, any> | PropertyMapper<TContext, TEvent, any>;
401 /**
402 * The unique ID of the state node, which can be referenced as a transition target via the
403 * `#id` syntax.
404 */
405 id?: string | undefined;
406 /**
407 * The string delimiter for serializing the path to a string. The default is "."
408 */
409 delimiter?: string;
410 /**
411 * The order this state node appears. Corresponds to the implicit SCXML document order.
412 */
413 order?: number;
414 /**
415 * The tags for this state node, which are accumulated into the `state.tags` property.
416 */
417 tags?: SingleOrArray<string>;
418 /**
419 * Whether actions should be called in order.
420 * When `false` (default), `assign(...)` actions are prioritized before other actions.
421 *
422 * @default false
423 */
424 preserveActionOrder?: boolean;
425 /**
426 * A text description of the state node
427 */
428 description?: string;
429}
430export interface StateNodeDefinition<TContext, TStateSchema extends StateSchema, TEvent extends EventObject> {
431 id: string;
432 version: string | undefined;
433 key: string;
434 context: TContext;
435 type: 'atomic' | 'compound' | 'parallel' | 'final' | 'history';
436 initial: StateNodeConfig<TContext, TStateSchema, TEvent>['initial'];
437 history: boolean | 'shallow' | 'deep' | undefined;
438 states: StatesDefinition<TContext, TStateSchema, TEvent>;
439 on: TransitionDefinitionMap<TContext, TEvent>;
440 transitions: Array<TransitionDefinition<TContext, TEvent>>;
441 entry: Array<ActionObject<TContext, TEvent>>;
442 exit: Array<ActionObject<TContext, TEvent>>;
443 /**
444 * @deprecated
445 */
446 activities: Array<ActivityDefinition<TContext, TEvent>>;
447 meta: any;
448 order: number;
449 data?: FinalStateNodeConfig<TContext, TEvent>['data'];
450 invoke: Array<InvokeDefinition<TContext, TEvent>>;
451 description?: string;
452 tags: string[];
453}
454export declare type AnyStateNodeDefinition = StateNodeDefinition<any, any, any>;
455export declare type AnyState = State<any, any, any, any, any>;
456export declare type AnyStateMachine = StateMachine<any, any, any, any, any, any, any>;
457export interface AtomicStateNodeConfig<TContext, TEvent extends EventObject> extends StateNodeConfig<TContext, StateSchema, TEvent> {
458 initial?: undefined;
459 parallel?: false | undefined;
460 states?: undefined;
461 onDone?: undefined;
462}
463export interface HistoryStateNodeConfig<TContext, TEvent extends EventObject> extends AtomicStateNodeConfig<TContext, TEvent> {
464 history: 'shallow' | 'deep' | true;
465 target: StateValue | undefined;
466}
467export interface FinalStateNodeConfig<TContext, TEvent extends EventObject> extends AtomicStateNodeConfig<TContext, TEvent> {
468 type: 'final';
469 /**
470 * The data to be sent with the "done.state.<id>" event. The data can be
471 * static or dynamic (based on assigners).
472 */
473 data?: Mapper<TContext, TEvent, any> | PropertyMapper<TContext, TEvent, any>;
474}
475export declare type SimpleOrStateNodeConfig<TContext, TStateSchema extends StateSchema, TEvent extends EventObject> = AtomicStateNodeConfig<TContext, TEvent> | StateNodeConfig<TContext, TStateSchema, TEvent>;
476export declare type ActionFunctionMap<TContext, TEvent extends EventObject, TAction extends BaseActionObject = BaseActionObject> = {
477 [K in TAction['type']]?: ActionObject<TContext, TEvent> | ActionFunction<TContext, TEvent, TAction extends {
478 type: K;
479 } ? TAction : never>;
480};
481export declare type DelayFunctionMap<TContext, TEvent extends EventObject> = Record<string, DelayConfig<TContext, TEvent>>;
482export declare type ServiceConfig<TContext, TEvent extends EventObject = AnyEventObject> = string | AnyStateMachine | InvokeCreator<TContext, TEvent>;
483export declare type DelayConfig<TContext, TEvent extends EventObject> = number | DelayExpr<TContext, TEvent>;
484declare type MachineOptionsActions<TContext, TResolvedTypesMeta, TEventsCausingActions = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'eventsCausingActions'>, TIndexedEvents = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedEvents'>, TIndexedActions = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedActions'>> = {
485 [K in keyof TEventsCausingActions]?: ActionObject<TContext, Cast<Prop<TIndexedEvents, TEventsCausingActions[K]>, EventObject>> | ActionFunction<TContext, Cast<Prop<TIndexedEvents, TEventsCausingActions[K]>, EventObject>, Cast<Prop<TIndexedActions, K>, BaseActionObject>>;
486};
487declare type MachineOptionsDelays<TContext, TResolvedTypesMeta, TEventsCausingDelays = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'eventsCausingDelays'>, TIndexedEvents = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedEvents'>> = {
488 [K in keyof TEventsCausingDelays]?: DelayConfig<TContext, Cast<Prop<TIndexedEvents, TEventsCausingDelays[K]>, EventObject>>;
489};
490declare type MachineOptionsGuards<TContext, TResolvedTypesMeta, TEventsCausingGuards = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'eventsCausingGuards'>, TIndexedEvents = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedEvents'>> = {
491 [K in keyof TEventsCausingGuards]?: ConditionPredicate<TContext, Cast<Prop<TIndexedEvents, TEventsCausingGuards[K]>, EventObject>>;
492};
493declare type MachineOptionsServices<TContext, TResolvedTypesMeta, TEventsCausingServices = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'eventsCausingServices'>, TIndexedEvents = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedEvents'>, TInvokeSrcNameMap = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'invokeSrcNameMap'>> = {
494 [K in keyof TEventsCausingServices]?: AnyStateMachine | InvokeCreator<TContext, Cast<Prop<TIndexedEvents, TEventsCausingServices[K]>, EventObject>, Prop<Prop<TIndexedEvents, Prop<TInvokeSrcNameMap, K>>, 'data'>, EventObject, Cast<TIndexedEvents[keyof TIndexedEvents], EventObject>>;
495};
496declare type MakeKeysRequired<T extends string> = {
497 [K in T]: unknown;
498};
499declare type MaybeMakeMissingImplementationsRequired<TImplementationType, TMissingImplementationsForType, TRequireMissingImplementations> = TRequireMissingImplementations extends true ? IsNever<TMissingImplementationsForType> extends true ? {} : {
500 [K in Cast<TImplementationType, string>]: MakeKeysRequired<Cast<TMissingImplementationsForType, string>>;
501} : {};
502declare type GenerateActionsConfigPart<TContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> = MaybeMakeMissingImplementationsRequired<'actions', Prop<TMissingImplementations, 'actions'>, TRequireMissingImplementations> & {
503 actions?: MachineOptionsActions<TContext, TResolvedTypesMeta>;
504};
505declare type GenerateDelaysConfigPart<TContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> = MaybeMakeMissingImplementationsRequired<'delays', Prop<TMissingImplementations, 'delays'>, TRequireMissingImplementations> & {
506 delays?: MachineOptionsDelays<TContext, TResolvedTypesMeta>;
507};
508declare type GenerateGuardsConfigPart<TContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> = MaybeMakeMissingImplementationsRequired<'guards', Prop<TMissingImplementations, 'guards'>, TRequireMissingImplementations> & {
509 guards?: MachineOptionsGuards<TContext, TResolvedTypesMeta>;
510};
511declare type GenerateServicesConfigPart<TContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> = MaybeMakeMissingImplementationsRequired<'services', Prop<TMissingImplementations, 'services'>, TRequireMissingImplementations> & {
512 services?: MachineOptionsServices<TContext, TResolvedTypesMeta>;
513};
514export declare type InternalMachineOptions<TContext, TEvent extends EventObject, TResolvedTypesMeta, TRequireMissingImplementations extends boolean = false, TMissingImplementations = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'missingImplementations'>> = GenerateActionsConfigPart<TContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> & GenerateDelaysConfigPart<TContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> & GenerateGuardsConfigPart<TContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> & GenerateServicesConfigPart<TContext, TResolvedTypesMeta, TRequireMissingImplementations, TMissingImplementations> & {
515 /**
516 * @deprecated Use `services` instead.
517 */
518 activities?: Record<string, ActivityConfig<TContext, TEvent>>;
519};
520export declare type MachineOptions<TContext, TEvent extends EventObject, TAction extends BaseActionObject = BaseActionObject, TServiceMap extends ServiceMap = ServiceMap, TTypesMeta extends TypegenConstraint = TypegenDisabled> = InternalMachineOptions<TContext, TEvent, ResolveTypegenMeta<TTypesMeta, TEvent, TAction, TServiceMap>>;
521export interface MachineConfig<TContext, TStateSchema extends StateSchema, TEvent extends EventObject, TAction extends BaseActionObject = BaseActionObject, TServiceMap extends ServiceMap = ServiceMap, TTypesMeta = TypegenDisabled> extends StateNodeConfig<NoInfer<TContext>, TStateSchema, NoInfer<TEvent>, TAction> {
522 /**
523 * The initial context (extended state)
524 */
525 context?: LowInfer<TContext | (() => TContext)>;
526 /**
527 * The machine's own version.
528 */
529 version?: string;
530 schema?: MachineSchema<TContext, TEvent, TServiceMap>;
531 tsTypes?: TTypesMeta;
532}
533export declare type ServiceMap = Record<string, {
534 data: any;
535}>;
536export interface MachineSchema<TContext, TEvent extends EventObject, TServiceMap extends ServiceMap = ServiceMap> {
537 context?: TContext;
538 events?: TEvent;
539 actions?: {
540 type: string;
541 [key: string]: any;
542 };
543 guards?: {
544 type: string;
545 [key: string]: any;
546 };
547 services?: TServiceMap;
548}
549export interface StandardMachineConfig<TContext, TStateSchema extends StateSchema, TEvent extends EventObject> extends StateNodeConfig<TContext, TStateSchema, TEvent> {
550}
551export interface ParallelMachineConfig<TContext, TStateSchema extends StateSchema, TEvent extends EventObject> extends StateNodeConfig<TContext, TStateSchema, TEvent> {
552 initial?: undefined;
553 type?: 'parallel';
554}
555export interface EntryExitEffectMap<TContext, TEvent extends EventObject> {
556 entry: Array<ActionObject<TContext, TEvent>>;
557 exit: Array<ActionObject<TContext, TEvent>>;
558}
559export interface HistoryStateNode<TContext> extends StateNode<TContext> {
560 history: 'shallow' | 'deep';
561 target: StateValue | undefined;
562}
563/** @ts-ignore TS complains about withConfig & withContext not being compatible here when extending StateNode */
564export interface StateMachine<TContext, TStateSchema extends StateSchema, TEvent extends EventObject, TTypestate extends Typestate<TContext> = {
565 value: any;
566 context: TContext;
567}, TAction extends BaseActionObject = BaseActionObject, TServiceMap extends ServiceMap = ServiceMap, TResolvedTypesMeta = ResolveTypegenMeta<TypegenDisabled, NoInfer<TEvent>, TAction, TServiceMap>> extends StateNode<TContext, TStateSchema, TEvent, TTypestate, TServiceMap, TResolvedTypesMeta> {
568 id: string;
569 states: StateNode<TContext, TStateSchema, TEvent, TTypestate, TServiceMap, TResolvedTypesMeta>['states'];
570 withConfig(options: InternalMachineOptions<TContext, TEvent, TResolvedTypesMeta, true>, context?: TContext | (() => TContext)): StateMachine<TContext, TStateSchema, TEvent, TTypestate, TAction, TServiceMap, AreAllImplementationsAssumedToBeProvided<TResolvedTypesMeta> extends false ? MarkAllImplementationsAsProvided<TResolvedTypesMeta> : TResolvedTypesMeta>;
571 withContext(context: TContext | (() => TContext)): StateMachine<TContext, TStateSchema, TEvent, TTypestate, TAction, TServiceMap, TResolvedTypesMeta>;
572 /** @deprecated an internal property acting as a "phantom" type, not meant to be used at runtime */
573 __TContext: TContext;
574 /** @deprecated an internal property acting as a "phantom" type, not meant to be used at runtime */
575 __TStateSchema: TStateSchema;
576 /** @deprecated an internal property acting as a "phantom" type, not meant to be used at runtime */
577 __TEvent: TEvent;
578 /** @deprecated an internal property acting as a "phantom" type, not meant to be used at runtime */
579 __TTypestate: TTypestate;
580 /** @deprecated an internal property acting as a "phantom" type, not meant to be used at runtime */
581 __TAction: TAction;
582 /** @deprecated an internal property acting as a "phantom" type, not meant to be used at runtime */
583 __TServiceMap: TServiceMap;
584 /** @deprecated an internal property acting as a "phantom" type, not meant to be used at runtime */
585 __TResolvedTypesMeta: TResolvedTypesMeta;
586}
587export declare type StateFrom<T extends AnyStateMachine | ((...args: any[]) => AnyStateMachine)> = T extends AnyStateMachine ? ReturnType<T['transition']> : T extends (...args: any[]) => AnyStateMachine ? ReturnType<ReturnType<T>['transition']> : never;
588export interface ActionMap<TContext, TEvent extends EventObject> {
589 onEntry: Array<Action<TContext, TEvent>>;
590 actions: Array<Action<TContext, TEvent>>;
591 onExit: Array<Action<TContext, TEvent>>;
592}
593export interface EntryExitStates<TContext> {
594 entry: Set<StateNode<TContext>>;
595 exit: Set<StateNode<TContext>>;
596}
597export interface EntryExitStateArrays<TContext> {
598 entry: Array<StateNode<TContext>>;
599 exit: Array<StateNode<TContext>>;
600}
601export interface ActivityMap {
602 [activityKey: string]: ActivityDefinition<any, any> | false;
603}
604export interface StateTransition<TContext, TEvent extends EventObject> {
605 transitions: Array<TransitionDefinition<TContext, TEvent>>;
606 configuration: Array<StateNode<TContext, any, TEvent, any, any, any>>;
607 entrySet: Array<StateNode<TContext, any, TEvent, any, any, any>>;
608 exitSet: Array<StateNode<TContext, any, TEvent, any, any, any>>;
609 /**
610 * The source state that preceded the transition.
611 */
612 source: State<TContext, any, any, any, any> | undefined;
613 actions: Array<ActionObject<TContext, TEvent>>;
614}
615export interface TransitionData<TContext, TEvent extends EventObject> {
616 value: StateValue | undefined;
617 actions: ActionMap<TContext, TEvent>;
618 activities?: ActivityMap;
619}
620export declare enum ActionTypes {
621 Start = "xstate.start",
622 Stop = "xstate.stop",
623 Raise = "xstate.raise",
624 Send = "xstate.send",
625 Cancel = "xstate.cancel",
626 NullEvent = "",
627 Assign = "xstate.assign",
628 After = "xstate.after",
629 DoneState = "done.state",
630 DoneInvoke = "done.invoke",
631 Log = "xstate.log",
632 Init = "xstate.init",
633 Invoke = "xstate.invoke",
634 ErrorExecution = "error.execution",
635 ErrorCommunication = "error.communication",
636 ErrorPlatform = "error.platform",
637 ErrorCustom = "xstate.error",
638 Update = "xstate.update",
639 Pure = "xstate.pure",
640 Choose = "xstate.choose"
641}
642export interface RaiseAction<TEvent extends EventObject> {
643 type: ActionTypes.Raise;
644 event: TEvent['type'];
645}
646export interface RaiseActionObject<TEvent extends EventObject> {
647 type: ActionTypes.Raise;
648 _event: SCXML.Event<TEvent>;
649}
650export interface DoneInvokeEvent<TData> extends EventObject {
651 data: TData;
652}
653export interface ErrorExecutionEvent extends EventObject {
654 src: string;
655 type: ActionTypes.ErrorExecution;
656 data: any;
657}
658export interface ErrorPlatformEvent extends EventObject {
659 data: any;
660}
661export interface DoneEventObject extends EventObject {
662 data?: any;
663 toString(): string;
664}
665export interface UpdateObject extends EventObject {
666 id: string | number;
667 state: AnyState;
668}
669export declare type DoneEvent = DoneEventObject & string;
670export interface NullEvent {
671 type: ActionTypes.NullEvent;
672}
673export interface ActivityActionObject<TContext, TEvent extends EventObject> extends ActionObject<TContext, TEvent> {
674 type: ActionTypes.Start | ActionTypes.Stop;
675 activity: ActivityDefinition<TContext, TEvent> | undefined;
676 exec: ActionFunction<TContext, TEvent> | undefined;
677}
678export interface InvokeActionObject<TContext, TEvent extends EventObject> extends ActivityActionObject<TContext, TEvent> {
679 activity: InvokeDefinition<TContext, TEvent>;
680}
681export declare type DelayExpr<TContext, TEvent extends EventObject> = ExprWithMeta<TContext, TEvent, number>;
682export declare type LogExpr<TContext, TEvent extends EventObject> = ExprWithMeta<TContext, TEvent, any>;
683export interface LogAction<TContext, TEvent extends EventObject> extends ActionObject<TContext, TEvent> {
684 label: string | undefined;
685 expr: string | LogExpr<TContext, TEvent>;
686}
687export interface LogActionObject<TContext, TEvent extends EventObject> extends LogAction<TContext, TEvent> {
688 value: any;
689}
690export interface SendAction<TContext, TEvent extends EventObject, TSentEvent extends EventObject> extends ActionObject<TContext, TEvent> {
691 to: string | number | ActorRef<any> | ExprWithMeta<TContext, TEvent, string | number | ActorRef<any>> | undefined;
692 event: TSentEvent | SendExpr<TContext, TEvent, TSentEvent>;
693 delay?: number | string | DelayExpr<TContext, TEvent>;
694 id: string | number;
695}
696export interface SendActionObject<TContext, TEvent extends EventObject, TSentEvent extends EventObject = AnyEventObject> extends SendAction<TContext, TEvent, TSentEvent> {
697 to: string | number | ActorRef<any> | undefined;
698 _event: SCXML.Event<TSentEvent>;
699 event: TSentEvent;
700 delay?: number;
701 id: string | number;
702}
703export interface StopAction<TContext, TEvent extends EventObject> extends ActionObject<TContext, TEvent> {
704 type: ActionTypes.Stop;
705 activity: string | {
706 id: string;
707 } | Expr<TContext, TEvent, string | {
708 id: string;
709 }>;
710}
711export interface StopActionObject {
712 type: ActionTypes.Stop;
713 activity: {
714 id: string;
715 };
716}
717export declare type Expr<TContext, TEvent extends EventObject, T> = (context: TContext, event: TEvent) => T;
718export declare type ExprWithMeta<TContext, TEvent extends EventObject, T> = (context: TContext, event: TEvent, meta: SCXMLEventMeta<TEvent>) => T;
719export declare type SendExpr<TContext, TEvent extends EventObject, TSentEvent extends EventObject = AnyEventObject> = ExprWithMeta<TContext, TEvent, TSentEvent>;
720export declare enum SpecialTargets {
721 Parent = "#_parent",
722 Internal = "#_internal"
723}
724export interface SendActionOptions<TContext, TEvent extends EventObject> {
725 id?: string | number;
726 delay?: number | string | DelayExpr<TContext, TEvent>;
727 to?: string | ExprWithMeta<TContext, TEvent, string | number | ActorRef<any>>;
728}
729export interface CancelAction extends ActionObject<any, any> {
730 sendId: string | number;
731}
732export declare type Assigner<TContext, TEvent extends EventObject> = (context: TContext, event: TEvent, meta: AssignMeta<TContext, TEvent>) => Partial<TContext>;
733export declare type PartialAssigner<TContext, TEvent extends EventObject, TKey extends keyof TContext> = (context: TContext, event: TEvent, meta: AssignMeta<TContext, TEvent>) => TContext[TKey];
734export declare type PropertyAssigner<TContext, TEvent extends EventObject> = {
735 [K in keyof TContext]?: PartialAssigner<TContext, TEvent, K> | TContext[K];
736};
737export declare type Mapper<TContext, TEvent extends EventObject, TParams extends {}> = (context: TContext, event: TEvent) => TParams;
738export declare type PropertyMapper<TContext, TEvent extends EventObject, TParams extends {}> = {
739 [K in keyof TParams]?: ((context: TContext, event: TEvent) => TParams[K]) | TParams[K];
740};
741export interface AnyAssignAction<TContext, TEvent extends EventObject> extends ActionObject<TContext, TEvent> {
742 type: ActionTypes.Assign;
743 assignment: any;
744}
745export interface AssignAction<TContext, TEvent extends EventObject> extends ActionObject<TContext, TEvent> {
746 type: ActionTypes.Assign;
747 assignment: Assigner<TContext, TEvent> | PropertyAssigner<TContext, TEvent>;
748}
749export interface PureAction<TContext, TEvent extends EventObject> extends ActionObject<TContext, TEvent> {
750 type: ActionTypes.Pure;
751 get: (context: TContext, event: TEvent) => SingleOrArray<ActionObject<TContext, TEvent>> | undefined;
752}
753export interface ChooseAction<TContext, TEvent extends EventObject> extends ActionObject<TContext, TEvent> {
754 type: ActionTypes.Choose;
755 conds: Array<ChooseCondition<TContext, TEvent>>;
756}
757export interface TransitionDefinition<TContext, TEvent extends EventObject> extends TransitionConfig<TContext, TEvent> {
758 target: Array<StateNode<TContext, any, TEvent>> | undefined;
759 source: StateNode<TContext, any, TEvent>;
760 actions: Array<ActionObject<TContext, TEvent>>;
761 cond?: Guard<TContext, TEvent>;
762 eventType: TEvent['type'] | NullEvent['type'] | '*';
763 toJSON: () => {
764 target: string[] | undefined;
765 source: string;
766 actions: Array<ActionObject<TContext, TEvent>>;
767 cond?: Guard<TContext, TEvent>;
768 eventType: TEvent['type'] | NullEvent['type'] | '*';
769 meta?: Record<string, any>;
770 };
771}
772export declare type TransitionDefinitionMap<TContext, TEvent extends EventObject> = {
773 [K in TEvent['type'] | NullEvent['type'] | '*']: Array<TransitionDefinition<TContext, K extends TEvent['type'] ? Extract<TEvent, {
774 type: K;
775 }> : EventObject>>;
776};
777export interface DelayedTransitionDefinition<TContext, TEvent extends EventObject> extends TransitionDefinition<TContext, TEvent> {
778 delay: number | string | DelayExpr<TContext, TEvent>;
779}
780export interface Edge<TContext, TEvent extends EventObject, TEventType extends TEvent['type'] = string> {
781 event: TEventType;
782 source: StateNode<TContext, any, TEvent>;
783 target: StateNode<TContext, any, TEvent>;
784 cond?: Condition<TContext, TEvent & {
785 type: TEventType;
786 }>;
787 actions: Array<Action<TContext, TEvent>>;
788 meta?: MetaObject;
789 transition: TransitionDefinition<TContext, TEvent>;
790}
791export interface NodesAndEdges<TContext, TEvent extends EventObject> {
792 nodes: StateNode[];
793 edges: Array<Edge<TContext, TEvent, TEvent['type']>>;
794}
795export interface Segment<TContext, TEvent extends EventObject> {
796 /**
797 * From state.
798 */
799 state: State<TContext, TEvent>;
800 /**
801 * Event from state.
802 */
803 event: TEvent;
804}
805export interface PathItem<TContext, TEvent extends EventObject> {
806 state: State<TContext, TEvent>;
807 path: Array<Segment<TContext, TEvent>>;
808 weight?: number;
809}
810export interface PathMap<TContext, TEvent extends EventObject> {
811 [key: string]: PathItem<TContext, TEvent>;
812}
813export interface PathsItem<TContext, TEvent extends EventObject> {
814 state: State<TContext, TEvent>;
815 paths: Array<Array<Segment<TContext, TEvent>>>;
816}
817export interface PathsMap<TContext, TEvent extends EventObject> {
818 [key: string]: PathsItem<TContext, TEvent>;
819}
820export interface TransitionMap {
821 state: StateValue | undefined;
822}
823export interface AdjacencyMap {
824 [stateId: string]: Record<string, TransitionMap>;
825}
826export interface ValueAdjacencyMap<TContext, TEvent extends EventObject> {
827 [stateId: string]: Record<string, State<TContext, TEvent>>;
828}
829export interface SCXMLEventMeta<TEvent extends EventObject> {
830 _event: SCXML.Event<TEvent>;
831}
832export interface StateMeta<TContext, TEvent extends EventObject> {
833 state: State<TContext, TEvent, any, any, any>;
834 _event: SCXML.Event<TEvent>;
835}
836export interface Typestate<TContext> {
837 value: StateValue;
838 context: TContext;
839}
840export interface StateLike<TContext> {
841 value: StateValue;
842 context: TContext;
843 event: EventObject;
844 _event: SCXML.Event<EventObject>;
845}
846export interface StateConfig<TContext, TEvent extends EventObject> {
847 value: StateValue;
848 context: TContext;
849 _event: SCXML.Event<TEvent>;
850 _sessionid: string | null;
851 historyValue?: HistoryValue | undefined;
852 history?: State<TContext, TEvent, any, any, any>;
853 actions?: Array<ActionObject<TContext, TEvent>>;
854 /**
855 * @deprecated
856 */
857 activities?: ActivityMap;
858 meta?: any;
859 events?: TEvent[];
860 configuration: Array<StateNode<TContext, any, TEvent>>;
861 transitions: Array<TransitionDefinition<TContext, TEvent>>;
862 children: Record<string, ActorRef<any>>;
863 done?: boolean;
864 tags?: Set<string>;
865 machine?: StateMachine<TContext, any, TEvent, any, any, any, any>;
866}
867export declare type AnyStateConfig = StateConfig<any, AnyEventObject>;
868export interface StateSchema<TC = any> {
869 meta?: any;
870 context?: Partial<TC>;
871 states?: {
872 [key: string]: StateSchema<TC>;
873 };
874}
875export interface InterpreterOptions {
876 /**
877 * Whether state actions should be executed immediately upon transition. Defaults to `true`.
878 */
879 execute?: boolean;
880 clock?: Clock;
881 logger?: (...args: any[]) => void;
882 parent?: AnyInterpreter;
883 /**
884 * If `true`, defers processing of sent events until the service
885 * is initialized (`.start()`). Otherwise, an error will be thrown
886 * for events sent to an uninitialized service.
887 *
888 * Default: `true`
889 */
890 deferEvents?: boolean;
891 /**
892 * The custom `id` for referencing this service.
893 */
894 id?: string;
895 /**
896 * If `true`, states and events will be logged to Redux DevTools.
897 *
898 * Default: `false`
899 */
900 devTools?: boolean | object;
901}
902export declare namespace SCXML {
903 interface Event<TEvent extends EventObject> {
904 /**
905 * This is a character string giving the name of the event.
906 * The SCXML Processor must set the name field to the name of this event.
907 * It is what is matched against the 'event' attribute of <transition>.
908 * Note that transitions can do additional tests by using the value of this field
909 * inside boolean expressions in the 'cond' attribute.
910 */
911 name: string;
912 /**
913 * This field describes the event type.
914 * The SCXML Processor must set it to: "platform" (for events raised by the platform itself, such as error events),
915 * "internal" (for events raised by <raise> and <send> with target '_internal')
916 * or "external" (for all other events).
917 */
918 type: 'platform' | 'internal' | 'external';
919 /**
920 * If the sending entity has specified a value for this, the Processor must set this field to that value
921 * (see C Event I/O Processors for details).
922 * Otherwise, in the case of error events triggered by a failed attempt to send an event,
923 * the Processor must set this field to the send id of the triggering <send> element.
924 * Otherwise it must leave it blank.
925 */
926 sendid?: string;
927 /**
928 * This is a URI, equivalent to the 'target' attribute on the <send> element.
929 * For external events, the SCXML Processor should set this field to a value which,
930 * when used as the value of 'target', will allow the receiver of the event to <send>
931 * a response back to the originating entity via the Event I/O Processor specified in 'origintype'.
932 * For internal and platform events, the Processor must leave this field blank.
933 */
934 origin?: string;
935 /**
936 * This is equivalent to the 'type' field on the <send> element.
937 * For external events, the SCXML Processor should set this field to a value which,
938 * when used as the value of 'type', will allow the receiver of the event to <send>
939 * a response back to the originating entity at the URI specified by 'origin'.
940 * For internal and platform events, the Processor must leave this field blank.
941 */
942 origintype?: string;
943 /**
944 * If this event is generated from an invoked child process, the SCXML Processor
945 * must set this field to the invoke id of the invocation that triggered the child process.
946 * Otherwise it must leave it blank.
947 */
948 invokeid?: string;
949 /**
950 * This field contains whatever data the sending entity chose to include in this event.
951 * The receiving SCXML Processor should reformat this data to match its data model,
952 * but must not otherwise modify it.
953 *
954 * If the conversion is not possible, the Processor must leave the field blank
955 * and must place an error 'error.execution' in the internal event queue.
956 */
957 data: TEvent;
958 /**
959 * @private
960 */
961 $$type: 'scxml';
962 }
963}
964export interface Observer<T> {
965 next: (value: T) => void;
966 error: (err: any) => void;
967 complete: () => void;
968}
969export interface Subscription {
970 unsubscribe(): void;
971}
972export interface InteropObservable<T> {
973 [Symbol.observable]: () => InteropSubscribable<T>;
974}
975export interface InteropSubscribable<T> {
976 subscribe(observer: Observer<T>): Subscription;
977}
978export interface Subscribable<T> extends InteropSubscribable<T> {
979 subscribe(observer: Observer<T>): Subscription;
980 subscribe(next: (value: T) => void, error?: (error: any) => void, complete?: () => void): Subscription;
981}
982export declare type Spawnable = AnyStateMachine | PromiseLike<any> | InvokeCallback | InteropObservable<any> | Subscribable<any> | Behavior<any>;
983export declare type ExtractEvent<TEvent extends EventObject, TEventType extends TEvent['type']> = TEvent extends any ? TEventType extends TEvent['type'] ? TEvent : never : never;
984export interface BaseActorRef<TEvent extends EventObject> {
985 send: (event: TEvent) => void;
986}
987export interface ActorRef<TEvent extends EventObject, TEmitted = any> extends Subscribable<TEmitted>, InteropObservable<TEmitted> {
988 send: Sender<TEvent>;
989 id: string;
990 getSnapshot: () => TEmitted | undefined;
991 stop?: () => void;
992 toJSON?: () => any;
993}
994export declare type AnyActorRef = ActorRef<any, any>;
995/**
996 * @deprecated Use `ActorRef` instead.
997 */
998export declare type SpawnedActorRef<TEvent extends EventObject, TEmitted = any> = ActorRef<TEvent, TEmitted>;
999export declare type ActorRefWithDeprecatedState<TContext, TEvent extends EventObject, TTypestate extends Typestate<TContext>, TResolvedTypesMeta = TypegenDisabled> = ActorRef<TEvent, State<TContext, TEvent, any, TTypestate, TResolvedTypesMeta>> & {
1000 /**
1001 * @deprecated Use `.getSnapshot()` instead.
1002 */
1003 state: State<TContext, TEvent, any, TTypestate, TResolvedTypesMeta>;
1004};
1005export declare type ActorRefFrom<T> = ReturnTypeOrValue<T> extends infer R ? R extends StateMachine<infer TContext, any, infer TEvent, infer TTypestate, any, any, infer TResolvedTypesMeta> ? ActorRefWithDeprecatedState<TContext, TEvent, TTypestate, AreAllImplementationsAssumedToBeProvided<TResolvedTypesMeta> extends false ? MarkAllImplementationsAsProvided<TResolvedTypesMeta> : TResolvedTypesMeta> : R extends Promise<infer U> ? ActorRef<never, U> : R extends Behavior<infer TEvent, infer TEmitted> ? ActorRef<TEvent, TEmitted> : never : never;
1006export declare type AnyInterpreter = Interpreter<any, any, any, any, any>;
1007export declare type InterpreterFrom<T extends AnyStateMachine | ((...args: any[]) => AnyStateMachine)> = ReturnTypeOrValue<T> extends StateMachine<infer TContext, infer TStateSchema, infer TEvent, infer TTypestate, any, any, infer TResolvedTypesMeta> ? Interpreter<TContext, TStateSchema, TEvent, TTypestate, AreAllImplementationsAssumedToBeProvided<TResolvedTypesMeta> extends false ? MarkAllImplementationsAsProvided<TResolvedTypesMeta> : TResolvedTypesMeta> : never;
1008export declare type MachineOptionsFrom<T extends AnyStateMachine | ((...args: any[]) => AnyStateMachine), TRequireMissingImplementations extends boolean = false> = ReturnTypeOrValue<T> extends StateMachine<infer TContext, any, infer TEvent, any, any, any, infer TResolvedTypesMeta> ? InternalMachineOptions<TContext, TEvent, TResolvedTypesMeta, TRequireMissingImplementations> : never;
1009export declare type __ResolvedTypesMetaFrom<T> = T extends StateMachine<any, any, any, any, any, any, infer TResolvedTypesMeta> ? TResolvedTypesMeta : never;
1010export interface ActorContext<TEvent extends EventObject, TEmitted> {
1011 parent?: ActorRef<any, any>;
1012 self: ActorRef<TEvent, TEmitted>;
1013 id: string;
1014 observers: Set<Observer<TEmitted>>;
1015}
1016export interface Behavior<TEvent extends EventObject, TEmitted = any> {
1017 transition: (state: TEmitted, event: TEvent, actorCtx: ActorContext<TEvent, TEmitted>) => TEmitted;
1018 initialState: TEmitted;
1019 start?: (actorCtx: ActorContext<TEvent, TEmitted>) => TEmitted;
1020}
1021export declare type EmittedFrom<T> = ReturnTypeOrValue<T> extends infer R ? R extends Interpreter<infer _, infer __, infer ___, infer ____, infer _____> ? R['initialState'] : R extends ActorRef<infer _, infer TEmitted> ? TEmitted : R extends Behavior<infer _, infer TEmitted> ? TEmitted : R extends ActorContext<infer _, infer TEmitted> ? TEmitted : never : never;
1022declare type ResolveEventType<T> = ReturnTypeOrValue<T> extends infer R ? R extends StateMachine<infer _, infer __, infer TEvent, infer ___, infer ____, infer _____, infer ______> ? TEvent : R extends Model<infer _, infer TEvent, infer __, infer ___> ? TEvent : R extends State<infer _, infer TEvent, infer __, infer ___, infer ____> ? TEvent : R extends Interpreter<infer _, infer __, infer TEvent, infer ___, infer ____> ? TEvent : R extends ActorRef<infer TEvent, infer _> ? TEvent : never : never;
1023export declare type EventFrom<T, K extends Prop<TEvent, 'type'> = never, TEvent extends EventObject = ResolveEventType<T>> = IsNever<K> extends true ? TEvent : ExtractEvent<TEvent, K>;
1024export declare type ContextFrom<T> = ReturnTypeOrValue<T> extends infer R ? R extends StateMachine<infer TContext, infer _, infer __, infer ___, infer ____, infer _____, infer ______> ? TContext : R extends Model<infer TContext, infer _, infer __, infer ___> ? TContext : R extends State<infer TContext, infer _, infer __, infer ___, infer ____> ? TContext : R extends Interpreter<infer TContext, infer _, infer __, infer ___, infer ____> ? TContext : never : never;
1025declare type Matches<TypegenEnabledArg, TypegenDisabledArg> = {
1026 (stateValue: TypegenEnabledArg): any;
1027 (stateValue: TypegenDisabledArg): any;
1028};
1029export declare type StateValueFrom<TMachine extends AnyStateMachine> = StateFrom<TMachine>['matches'] extends Matches<infer TypegenEnabledArg, infer TypegenDisabledArg> ? TMachine['__TResolvedTypesMeta'] extends TypegenEnabled ? TypegenEnabledArg : TypegenDisabledArg : never;
1030export {};
1031//# sourceMappingURL=types.d.ts.map
\No newline at end of file