UNPKG

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