xstate 5.0.0-beta.22 → 5.0.0-beta.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/actions/dist/xstate-actions.cjs.js +1 -1
  2. package/actions/dist/xstate-actions.development.cjs.js +1 -1
  3. package/actions/dist/xstate-actions.development.esm.js +1 -1
  4. package/actions/dist/xstate-actions.esm.js +1 -1
  5. package/actions/dist/xstate-actions.umd.min.js +1 -1
  6. package/actions/dist/xstate-actions.umd.min.js.map +1 -1
  7. package/actors/dist/xstate-actors.cjs.js +1 -1
  8. package/actors/dist/xstate-actors.development.cjs.js +1 -1
  9. package/actors/dist/xstate-actors.development.esm.js +1 -1
  10. package/actors/dist/xstate-actors.esm.js +1 -1
  11. package/actors/dist/xstate-actors.umd.min.js.map +1 -1
  12. package/dist/{actions-d4305983.development.esm.js → actions-194e6dcc.development.esm.js} +100 -144
  13. package/dist/{actions-4b70fc8d.development.cjs.js → actions-43f7d40e.development.cjs.js} +99 -144
  14. package/dist/{actions-8f2e997e.cjs.js → actions-6a8cda73.cjs.js} +95 -148
  15. package/dist/{actions-fb7384f8.esm.js → actions-7b182232.esm.js} +96 -148
  16. package/dist/declarations/src/Machine.d.ts +2 -2
  17. package/dist/declarations/src/State.d.ts +5 -5
  18. package/dist/declarations/src/StateMachine.d.ts +27 -19
  19. package/dist/declarations/src/StateNode.d.ts +9 -9
  20. package/dist/declarations/src/actions/assign.d.ts +6 -6
  21. package/dist/declarations/src/actions/cancel.d.ts +7 -7
  22. package/dist/declarations/src/actions/choose.d.ts +4 -10
  23. package/dist/declarations/src/actions/log.d.ts +7 -7
  24. package/dist/declarations/src/actions/pure.d.ts +6 -17
  25. package/dist/declarations/src/actions/raise.d.ts +3 -3
  26. package/dist/declarations/src/actions/send.d.ts +22 -22
  27. package/dist/declarations/src/actions/stop.d.ts +7 -7
  28. package/dist/declarations/src/guards.d.ts +17 -8
  29. package/dist/declarations/src/interpreter.d.ts +1 -1
  30. package/dist/declarations/src/stateUtils.d.ts +12 -12
  31. package/dist/declarations/src/typegenTypes.d.ts +6 -2
  32. package/dist/declarations/src/types.d.ts +130 -192
  33. package/dist/declarations/src/utils.d.ts +8 -8
  34. package/dist/xstate.cjs.js +10 -7
  35. package/dist/xstate.development.cjs.js +10 -7
  36. package/dist/xstate.development.esm.js +11 -8
  37. package/dist/xstate.esm.js +11 -8
  38. package/dist/xstate.umd.min.js +1 -1
  39. package/dist/xstate.umd.min.js.map +1 -1
  40. package/guards/dist/xstate-guards.cjs.js +1 -2
  41. package/guards/dist/xstate-guards.cjs.mjs +1 -2
  42. package/guards/dist/xstate-guards.development.cjs.js +1 -2
  43. package/guards/dist/xstate-guards.development.cjs.mjs +1 -2
  44. package/guards/dist/xstate-guards.development.esm.js +1 -1
  45. package/guards/dist/xstate-guards.esm.js +1 -1
  46. package/guards/dist/xstate-guards.umd.min.js +1 -1
  47. package/guards/dist/xstate-guards.umd.min.js.map +1 -1
  48. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"xstate-actors.umd.min.js","sources":["../../src/Mailbox.ts","../../src/types.ts","../../src/actions.ts","../../src/dev/index.ts","../../src/reportUnhandledError.ts","../../src/symbolObservable.ts","../../src/interpreter.ts","../../src/system.ts","../../src/utils.ts","../../src/actors/transition.ts","../../src/actors/promise.ts","../../src/actors/index.ts","../../src/actors/callback.ts","../../src/actors/observable.ts"],"sourcesContent":["interface MailboxItem<T> {\n value: T;\n next: MailboxItem<T> | null;\n}\n\nexport class Mailbox<T> {\n private _active: boolean = false;\n private _current: MailboxItem<T> | null = null;\n private _last: MailboxItem<T> | null = null;\n\n constructor(private _process: (ev: T) => void) {}\n\n public start() {\n this._active = true;\n this.flush();\n }\n\n public clear(): void {\n // we can't set _current to null because we might be currently processing\n // and enqueue following clear shouldnt start processing the enqueued item immediately\n if (this._current) {\n this._current.next = null;\n this._last = this._current;\n }\n }\n\n // TODO: rethink this design\n public prepend(event: T): void {\n if (!this._current) {\n this.enqueue(event);\n return;\n }\n\n // we know that something is already queued up\n // so the mailbox is already flushing or it's inactive\n // therefore the only thing that we need to do is to reassign `this._current`\n this._current = {\n value: event,\n next: this._current\n };\n }\n\n public enqueue(event: T): void {\n const enqueued = {\n value: event,\n next: null\n };\n\n if (this._current) {\n this._last!.next = enqueued;\n this._last = enqueued;\n return;\n }\n\n this._current = enqueued;\n this._last = enqueued;\n\n if (this._active) {\n this.flush();\n }\n }\n\n private flush() {\n while (this._current) {\n // atm the given _process is responsible for implementing proper try/catch handling\n // we assume here that this won't throw in a way that can affect this mailbox\n const consumed = this._current;\n this._process(consumed.value);\n // something could have been prepended in the meantime\n // so we need to be defensive here to avoid skipping over a prepended item\n if (consumed === this._current) {\n this._current = this._current.next;\n }\n }\n this._last = null;\n }\n}\n","import type { StateNode } from './StateNode.ts';\nimport type { State } from './State.ts';\nimport type { ActorStatus, Clock, Actor } from './interpreter.ts';\nimport type { StateMachine } from './StateMachine.ts';\nimport {\n TypegenDisabled,\n ResolveTypegenMeta,\n TypegenConstraint,\n MarkAllImplementationsAsProvided,\n AreAllImplementationsAssumedToBeProvided\n} from './typegenTypes.ts';\nimport { PromiseActorLogic } from './actors/promise.ts';\n\n/**\n * `T | unknown` reduces to `unknown` and that can be problematic when it comes to contextual typing.\n * It especially is a problem when the union has a function member, like here:\n *\n * ```ts\n * declare function test(cbOrVal: ((arg: number) => unknown) | unknown): void;\n * test((arg) => {}) // oops, implicit any\n * ```\n *\n * This type can be used to avoid this problem. This union represents the same value space as `unknown`.\n */\nexport type NonReducibleUnknown = {} | null | undefined;\nexport type AnyFunction = (...args: any[]) => any;\n\ntype ReturnTypeOrValue<T> = T extends AnyFunction ? ReturnType<T> : T;\n\n// https://github.com/microsoft/TypeScript/issues/23182#issuecomment-379091887\nexport type IsNever<T> = [T] extends [never] ? true : false;\n\nexport type Compute<A extends any> = { [K in keyof A]: A[K] } & unknown;\nexport type Prop<T, K> = K extends keyof T ? T[K] : never;\nexport type Values<T> = T[keyof T];\nexport type Merge<M, N> = Omit<M, keyof N> & N;\nexport type IndexByProp<T extends Record<P, string>, P extends keyof T> = {\n [E in T as E[P]]: E;\n};\n\nexport type IndexByType<T extends { type: string }> = IndexByProp<T, 'type'>;\n\nexport type Equals<A1 extends any, A2 extends any> = (<A>() => A extends A2\n ? true\n : false) extends <A>() => A extends A1 ? true : false\n ? true\n : false;\nexport type IsAny<T> = Equals<T, any>;\nexport type Cast<A, B> = A extends B ? A : B;\nexport type NoInfer<T> = [T][T extends any ? 0 : any];\nexport type LowInfer<T> = T & {};\n\nexport type EventType = string;\nexport type ActionType = string;\nexport type MetaObject = Record<string, any>;\n\nexport type Lazy<T> = () => T;\nexport type MaybeLazy<T> = T | Lazy<T>;\n\n/**\n * The full definition of an event, with a string `type`.\n */\nexport interface EventObject {\n /**\n * The type of event that is sent.\n */\n type: string;\n}\n\nexport interface AnyEventObject extends EventObject {\n [key: string]: any;\n}\n\nexport interface ParameterizedObject {\n type: string;\n params?: Record<string, any>;\n}\n\nexport interface UnifiedArg<\n TContext extends MachineContext,\n TEvent extends EventObject\n> {\n context: TContext;\n event: TEvent;\n self: ActorRef<TEvent>;\n system: ActorSystem<any>;\n}\n\nexport type MachineContext = Record<string, any>;\n\nexport interface ActionArgs<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TAction extends ParameterizedObject = ParameterizedObject\n> extends UnifiedArg<TContext, TEvent> {\n action: TAction;\n}\n\nexport type InputFrom<T extends AnyActorLogic> = T extends StateMachine<\n infer _TContext,\n infer _TEvent,\n infer _TActions,\n infer _TActors,\n infer TInput,\n infer _TResolvedTypesMeta\n>\n ? TInput\n : T extends ActorLogic<\n infer _TEvent,\n infer _TSnapshot,\n infer _TInternalState,\n infer _TPersisted,\n infer _TSystem,\n infer TInput\n >\n ? TInput\n : never;\n\nexport type OutputFrom<T extends AnyActorLogic> = T extends ActorLogic<\n infer _TEvent,\n infer _TSnapshot,\n infer _TInternalState,\n infer _TPersisted,\n infer _TSystem,\n infer _TInput,\n infer TOutput\n>\n ? TOutput\n : never;\n\n// TODO: do not accept machines without all implementations\n// we should also accept a raw machine as actor logic here\n// or just make machine actor logic\nexport type Spawner = <T extends AnyActorLogic | string>( // TODO: read string from machine logic keys\n logic: T,\n options?: Partial<{\n id: string;\n systemId?: string;\n input: T extends AnyActorLogic ? InputFrom<T> : any;\n }>\n) => ActorRefFrom<T>;\n\nexport interface AssignArgs<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject\n> extends ActionArgs<TContext, TExpressionEvent> {\n spawn: Spawner;\n}\n\nexport type ActionFunction<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TEvent extends EventObject,\n TAction extends ParameterizedObject = ParameterizedObject\n> = {\n (args: ActionArgs<TContext, TExpressionEvent, TAction>): void;\n _out_TEvent?: TEvent;\n};\n\nexport interface ChooseBranch<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TEvent extends EventObject = TExpressionEvent\n> {\n guard?: GuardConfig<TContext, TExpressionEvent>;\n actions: Actions<TContext, TExpressionEvent, TEvent>;\n}\n\nexport type Action<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TEvent extends EventObject = TExpressionEvent\n> =\n | ActionType\n | ParameterizedObject\n | ActionFunction<TContext, TExpressionEvent, TEvent, ParameterizedObject>;\n\nexport type Actions<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TEvent extends EventObject = TExpressionEvent\n> = SingleOrArray<Action<TContext, TExpressionEvent, TEvent>>;\n\nexport type StateKey = string | AnyState;\n\nexport interface StateValueMap {\n [key: string]: StateValue;\n}\n\n/**\n * The string or object representing the state value relative to the parent state node.\n *\n * - For a child atomic state node, this is a string, e.g., `\"pending\"`.\n * - For complex state nodes, this is an object, e.g., `{ success: \"someChildState\" }`.\n */\nexport type StateValue = string | StateValueMap;\n\nexport type GuardPredicate<\n TContext extends MachineContext,\n TEvent extends EventObject\n> = (\n args: {\n context: TContext;\n event: TEvent;\n } & GuardArgs<TContext, TEvent>\n) => boolean;\n\nexport interface DefaultGuardObject<\n TContext extends MachineContext,\n TEvent extends EventObject\n> extends ParameterizedObject {\n /**\n * Nested guards\n */\n children?: Array<GuardObject<TContext, TEvent>>;\n predicate?: GuardPredicate<TContext, TEvent>;\n}\n\nexport type GuardEvaluator<\n TContext extends MachineContext,\n TEvent extends EventObject\n> = (\n guard: GuardDefinition<TContext, TEvent>,\n context: TContext,\n event: TEvent,\n state: State<TContext, TEvent, TODO>\n) => boolean;\n\nexport interface GuardArgs<\n TContext extends MachineContext,\n TEvent extends EventObject\n> {\n state: State<TContext, TEvent, TODO>;\n guard: GuardDefinition<TContext, TEvent>;\n evaluate: GuardEvaluator<TContext, TEvent>;\n}\n\nexport type GuardConfig<\n TContext extends MachineContext,\n TEvent extends EventObject\n> = string | GuardPredicate<TContext, TEvent> | GuardObject<TContext, TEvent>;\n\nexport type GuardObject<\n TContext extends MachineContext,\n TEvent extends EventObject\n> = BooleanGuardObject<TContext, TEvent> | DefaultGuardObject<TContext, TEvent>;\n\nexport interface GuardDefinition<\n TContext extends MachineContext,\n TEvent extends EventObject\n> {\n type: string;\n children?: Array<GuardDefinition<TContext, TEvent>>;\n predicate?: GuardPredicate<TContext, TEvent>;\n params: { [key: string]: any };\n}\n\nexport interface BooleanGuardObject<\n TContext extends MachineContext,\n TEvent extends EventObject\n> extends ParameterizedObject {\n type: 'xstate.boolean';\n children: Array<GuardConfig<TContext, TEvent>>;\n params: {\n op: 'and' | 'or' | 'not';\n };\n predicate: undefined;\n}\n\nexport interface BooleanGuardDefinition<\n TContext extends MachineContext,\n TEvent extends EventObject\n> extends GuardDefinition<TContext, TEvent> {\n type: 'xstate.boolean';\n params: {\n op: 'and' | 'or' | 'not';\n };\n}\n\nexport type TransitionTarget = SingleOrArray<string>;\n\nexport interface TransitionConfig<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TEvent extends EventObject = TExpressionEvent,\n TAction extends ParameterizedObject = ParameterizedObject\n> {\n guard?: GuardConfig<TContext, TExpressionEvent>;\n actions?: Actions<TContext, TExpressionEvent, TEvent>;\n reenter?: boolean;\n target?: TransitionTarget | undefined;\n meta?: Record<string, any>;\n description?: string;\n}\n\nexport interface TargetTransitionConfig<\n TContext extends MachineContext,\n TEvent extends EventObject\n> extends TransitionConfig<TContext, TEvent> {\n target: TransitionTarget; // TODO: just make this non-optional\n}\n\nexport type ConditionalTransitionConfig<\n TContext extends MachineContext,\n TEvent extends EventObject = EventObject\n> = Array<TransitionConfig<TContext, TEvent>>;\n\nexport interface InitialTransitionConfig<\n TContext extends MachineContext,\n TEvent extends EventObject\n> extends TransitionConfig<TContext, TEvent> {\n guard?: never;\n target: TransitionTarget;\n}\n\nexport type Transition<\n TContext extends MachineContext,\n TEvent extends EventObject = EventObject\n> =\n | string\n | TransitionConfig<TContext, TEvent>\n | ConditionalTransitionConfig<TContext, TEvent>;\n\ntype ExtractWithSimpleSupport<T extends { type: string }> = T extends any\n ? { type: T['type'] } extends T\n ? T\n : never\n : never;\n\nexport interface InvokeMeta {\n src: string;\n meta: MetaObject | undefined;\n}\n\nexport interface InvokeDefinition<\n TContext extends MachineContext,\n TEvent extends EventObject\n> {\n id: string;\n\n systemId: string | undefined;\n /**\n * The source of the actor logic to be invoked\n */\n src: string;\n\n input?: Mapper<TContext, TEvent, NonReducibleUnknown> | NonReducibleUnknown;\n /**\n * The transition to take upon the invoked child machine reaching its final top-level state.\n */\n onDone?:\n | string\n | SingleOrArray<TransitionConfig<TContext, DoneInvokeEvent<any>>>;\n /**\n * The transition to take upon the invoked child machine sending an error event.\n */\n onError?: string | SingleOrArray<TransitionConfig<TContext, ErrorEvent<any>>>;\n\n onSnapshot?:\n | string\n | SingleOrArray<TransitionConfig<TContext, SnapshotEvent<any>>>;\n\n toJSON: () => Omit<\n InvokeDefinition<TContext, TEvent>,\n 'onDone' | 'onError' | 'toJSON'\n >;\n meta: MetaObject | undefined;\n}\n\nexport interface Delay {\n id: string;\n /**\n * The time to delay the event, in milliseconds.\n */\n delay: number;\n}\n\nexport type DelayedTransitions<\n TContext extends MachineContext,\n TEvent extends EventObject\n> =\n | Record<\n string | number,\n string | SingleOrArray<TransitionConfig<TContext, TEvent>>\n >\n | Array<\n TransitionConfig<TContext, TEvent> & {\n delay:\n | number\n | string\n | ((args: UnifiedArg<TContext, TEvent>) => number);\n }\n >;\n\nexport type StateTypes =\n | 'atomic'\n | 'compound'\n | 'parallel'\n | 'final'\n | 'history'\n | string; // TODO: remove once TS fixes this type-widening issue\n\nexport type SingleOrArray<T> = T[] | T;\n\nexport type StateNodesConfig<\n TContext extends MachineContext,\n TEvent extends EventObject\n> = {\n [K in string]: StateNode<TContext, TEvent>;\n};\n\nexport type StatesConfig<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TAction extends ParameterizedObject,\n TActor extends ProvidedActor\n> = {\n [K in string]: StateNodeConfig<TContext, TEvent, TAction, TActor>;\n};\n\nexport type StatesDefinition<\n TContext extends MachineContext,\n TEvent extends EventObject\n> = {\n [K in string]: StateNodeDefinition<TContext, TEvent>;\n};\n\nexport type TransitionConfigTarget = string | undefined;\n\nexport type TransitionConfigOrTarget<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TEvent extends EventObject = TExpressionEvent\n> = SingleOrArray<\n TransitionConfigTarget | TransitionConfig<TContext, TExpressionEvent, TEvent>\n>;\n\nexport type TransitionsConfig<\n TContext extends MachineContext,\n TEvent extends EventObject\n> = {\n // TODO: this doesn't support partial descriptors\n [K in TEvent['type'] | '*']?: K extends '*'\n ? TransitionConfigOrTarget<TContext, TEvent>\n : TransitionConfigOrTarget<TContext, ExtractEvent<TEvent, K>, TEvent>;\n};\n\ntype IsLiteralString<T extends string> = string extends T ? false : true;\n\ntype DistributeActors<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TActor extends ProvidedActor\n> = TActor extends { src: infer TSrc }\n ? Compute<\n {\n systemId?: string;\n /**\n * The source of the machine to be invoked, or the machine itself.\n */\n src: TSrc;\n\n input?:\n | Mapper<TContext, TEvent, InputFrom<TActor['logic']>>\n | InputFrom<TActor['logic']>;\n /**\n * The transition to take upon the invoked child machine reaching its final top-level state.\n */\n onDone?:\n | string\n | SingleOrArray<\n TransitionConfigOrTarget<\n TContext,\n DoneInvokeEvent<OutputFrom<TActor['logic']>>,\n TEvent\n >\n >;\n /**\n * The transition to take upon the invoked child machine sending an error event.\n */\n onError?:\n | string\n | SingleOrArray<\n TransitionConfigOrTarget<TContext, ErrorEvent<any>, TEvent>\n >;\n\n onSnapshot?:\n | string\n | SingleOrArray<\n TransitionConfigOrTarget<TContext, SnapshotEvent<any>, TEvent>\n >;\n /**\n * Meta data related to this invocation\n */\n meta?: MetaObject;\n } & (TActor['id'] extends string\n ? {\n /**\n * The unique identifier for the invoked machine. If not specified, this\n * will be the machine's own `id`, or the URL (from `src`).\n */\n id: TActor['id'];\n }\n : {\n /**\n * The unique identifier for the invoked machine. If not specified, this\n * will be the machine's own `id`, or the URL (from `src`).\n */\n id?: string;\n })\n >\n : never;\n\nexport type InvokeConfig<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TActor extends ProvidedActor\n> = IsLiteralString<TActor['src']> extends true\n ? DistributeActors<TContext, TEvent, TActor>\n : {\n /**\n * The unique identifier for the invoked machine. If not specified, this\n * will be the machine's own `id`, or the URL (from `src`).\n */\n id?: string;\n\n systemId?: string;\n /**\n * The source of the machine to be invoked, or the machine itself.\n */\n src: AnyActorLogic | string; // TODO: fix types\n\n input?:\n | Mapper<TContext, TEvent, NonReducibleUnknown>\n | NonReducibleUnknown;\n /**\n * The transition to take upon the invoked child machine reaching its final top-level state.\n */\n onDone?:\n | string\n | SingleOrArray<\n TransitionConfigOrTarget<TContext, DoneInvokeEvent<any>, TEvent>\n >;\n /**\n * The transition to take upon the invoked child machine sending an error event.\n */\n onError?:\n | string\n | SingleOrArray<\n TransitionConfigOrTarget<TContext, ErrorEvent<any>, TEvent>\n >;\n\n onSnapshot?:\n | string\n | SingleOrArray<\n TransitionConfigOrTarget<TContext, SnapshotEvent<any>, TEvent>\n >;\n /**\n * Meta data related to this invocation\n */\n meta?: MetaObject;\n };\n\nexport interface StateNodeConfig<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TAction extends ParameterizedObject,\n TActor extends ProvidedActor\n> {\n /**\n * The initial state transition.\n */\n initial?:\n | InitialTransitionConfig<TContext, TEvent>\n | SingleOrArray<string>\n | undefined;\n /**\n * The type of this state node:\n *\n * - `'atomic'` - no child state nodes\n * - `'compound'` - nested child state nodes (XOR)\n * - `'parallel'` - orthogonal nested child state nodes (AND)\n * - `'history'` - history state node\n * - `'final'` - final state node\n */\n type?: 'atomic' | 'compound' | 'parallel' | 'final' | 'history';\n /**\n * Indicates whether the state node is a history state node, and what\n * type of history:\n * shallow, deep, true (shallow), false (none), undefined (none)\n */\n history?: 'shallow' | 'deep' | boolean | undefined;\n /**\n * The mapping of state node keys to their state node configurations (recursive).\n */\n states?: StatesConfig<TContext, TEvent, TAction, TActor> | undefined;\n /**\n * The services to invoke upon entering this state node. These services will be stopped upon exiting this state node.\n */\n invoke?: SingleOrArray<\n TActor['src'] | InvokeConfig<TContext, TEvent, TActor>\n >;\n /**\n * The mapping of event types to their potential transition(s).\n */\n on?: TransitionsConfig<TContext, TEvent>;\n /**\n * The action(s) to be executed upon entering the state node.\n */\n entry?: Actions<TContext, TEvent, TEvent>;\n /**\n * The action(s) to be executed upon exiting the state node.\n */\n exit?: Actions<TContext, TEvent, TEvent>;\n /**\n * The potential transition(s) to be taken upon reaching a final child state node.\n *\n * This is equivalent to defining a `[done(id)]` transition on this state node's `on` property.\n */\n onDone?:\n | string\n | SingleOrArray<TransitionConfig<TContext, DoneEventObject>>\n | undefined;\n /**\n * The mapping (or array) of delays (in milliseconds) to their potential transition(s).\n * The delayed transitions are taken after the specified delay in an interpreter.\n */\n after?: DelayedTransitions<TContext, TEvent>;\n\n /**\n * An eventless transition that is always taken when this state node is active.\n */\n always?: TransitionConfigOrTarget<TContext, TEvent>;\n /**\n * @private\n */\n parent?: StateNode<TContext, TEvent>;\n /**\n * The meta data associated with this state node, which will be returned in State instances.\n */\n meta?: any;\n /**\n * The output data sent with the \"done.state._id_\" event if this is a final state node.\n *\n * The output data will be evaluated with the current `context` and placed on the `.data` property\n * of the event.\n */\n output?: Mapper<TContext, TEvent, any> | NonReducibleUnknown;\n /**\n * The unique ID of the state node, which can be referenced as a transition target via the\n * `#id` syntax.\n */\n id?: string | undefined;\n /**\n * The order this state node appears. Corresponds to the implicit document order.\n */\n order?: number;\n\n /**\n * The tags for this state node, which are accumulated into the `state.tags` property.\n */\n tags?: SingleOrArray<string>;\n /**\n * A text description of the state node\n */\n description?: string;\n\n /**\n * A default target for a history state\n */\n target?: string;\n}\n\nexport interface StateNodeDefinition<\n TContext extends MachineContext,\n TEvent extends EventObject\n> {\n id: string;\n version?: string | undefined;\n key: string;\n type: 'atomic' | 'compound' | 'parallel' | 'final' | 'history';\n initial: InitialTransitionDefinition<TContext, TEvent> | undefined;\n history: boolean | 'shallow' | 'deep' | undefined;\n states: StatesDefinition<TContext, TEvent>;\n on: TransitionDefinitionMap<TContext, TEvent>;\n transitions: Array<TransitionDefinition<TContext, TEvent>>;\n // TODO: establish what a definition really is\n entry: Action<any, any, any>[];\n exit: Action<any, any, any>[];\n meta: any;\n order: number;\n output?: FinalStateNodeConfig<TContext, TEvent>['output'];\n invoke: Array<InvokeDefinition<TContext, TEvent>>;\n description?: string;\n tags: string[];\n}\n\nexport interface StateMachineDefinition<\n TContext extends MachineContext,\n TEvent extends EventObject\n> extends StateNodeDefinition<TContext, TEvent> {}\n\nexport type AnyStateNode = StateNode<any, any>;\n\nexport type AnyStateNodeDefinition = StateNodeDefinition<any, any>;\n\nexport type AnyState = State<any, any, any, any>;\n\nexport type AnyStateMachine = StateMachine<any, any, any, any, any, any>;\n\nexport type AnyStateConfig = StateConfig<any, AnyEventObject>;\n\nexport interface AtomicStateNodeConfig<\n TContext extends MachineContext,\n TEvent extends EventObject\n> extends StateNodeConfig<TContext, TEvent, TODO, TODO> {\n initial?: undefined;\n parallel?: false | undefined;\n states?: undefined;\n onDone?: undefined;\n}\n\nexport interface HistoryStateNodeConfig<\n TContext extends MachineContext,\n TEvent extends EventObject\n> extends AtomicStateNodeConfig<TContext, TEvent> {\n history: 'shallow' | 'deep' | true;\n target: string | undefined;\n}\n\nexport interface FinalStateNodeConfig<\n TContext extends MachineContext,\n TEvent extends EventObject\n> extends AtomicStateNodeConfig<TContext, TEvent> {\n type: 'final';\n /**\n * The data to be sent with the \"done.state.<id>\" event. The data can be\n * static or dynamic (based on assigners).\n */\n output?: Mapper<TContext, TEvent, any>;\n}\n\nexport type SimpleOrStateNodeConfig<\n TContext extends MachineContext,\n TEvent extends EventObject\n> =\n | AtomicStateNodeConfig<TContext, TEvent>\n | StateNodeConfig<TContext, TEvent, TODO, TODO>;\n\nexport type ActionFunctionMap<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TAction extends ParameterizedObject = ParameterizedObject\n> = {\n [K in TAction['type']]?: ActionFunction<\n TContext,\n TEvent,\n TEvent,\n TAction extends { type: K } ? TAction : never\n >;\n};\n\nexport type DelayFunctionMap<\n TContext extends MachineContext,\n TEvent extends EventObject\n> = Record<string, DelayConfig<TContext, TEvent>>;\n\nexport type DelayConfig<\n TContext extends MachineContext,\n TEvent extends EventObject\n> = number | DelayExpr<TContext, TEvent>;\n\n// TODO: possibly refactor this somehow, use even a simpler type, and maybe even make `machine.options` private or something\nexport interface MachineImplementationsSimplified<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TAction extends ParameterizedObject = ParameterizedObject\n> {\n guards: Record<string, GuardPredicate<TContext, TEvent>>;\n actions: ActionFunctionMap<TContext, TEvent, TAction>;\n actors: Record<\n string,\n | AnyActorLogic\n | { src: AnyActorLogic; input: Mapper<TContext, TEvent, any> | any }\n >;\n delays: DelayFunctionMap<TContext, TEvent>;\n}\n\ntype MachineImplementationsActions<\n TContext extends MachineContext,\n TResolvedTypesMeta,\n TEventsCausingActions = Prop<\n Prop<TResolvedTypesMeta, 'resolved'>,\n 'eventsCausingActions'\n >,\n TIndexedEvents = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedEvents'>\n> = {\n [K in keyof TEventsCausingActions]?: ActionFunction<\n TContext,\n Cast<Prop<TIndexedEvents, TEventsCausingActions[K]>, EventObject>,\n Cast<Prop<TIndexedEvents, keyof TIndexedEvents>, EventObject>,\n ParameterizedObject // TODO: when bringing back parametrized actions this should accept something like `Cast<Prop<TIndexedActions, K>, ParameterizedObject>`\n >;\n};\n\ntype MachineImplementationsActors<\n TContext extends MachineContext,\n TResolvedTypesMeta,\n TEventsCausingActors = Prop<\n Prop<TResolvedTypesMeta, 'resolved'>,\n 'eventsCausingActors'\n >,\n TIndexedActors = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedActors'>,\n TIndexedEvents = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedEvents'>,\n _TInvokeSrcNameMap = Prop<\n Prop<TResolvedTypesMeta, 'resolved'>,\n 'invokeSrcNameMap'\n >\n> = {\n // TODO: this should require `{ src, input }` for required inputs\n [K in keyof TIndexedActors]?:\n | Cast<Prop<TIndexedActors[K], 'logic'>, AnyActorLogic>\n | {\n src: Cast<Prop<TIndexedActors[K], 'logic'>, AnyActorLogic>;\n input:\n | Mapper<\n TContext,\n Cast<\n Prop<\n TIndexedEvents,\n K extends keyof TEventsCausingActors\n ? TEventsCausingActors[K]\n : TIndexedEvents[keyof TIndexedEvents]\n >,\n EventObject\n >,\n InputFrom<Cast<Prop<TIndexedActors[K], 'logic'>, AnyActorLogic>>\n >\n | InputFrom<Cast<Prop<TIndexedActors[K], 'logic'>, AnyActorLogic>>;\n };\n};\n\ntype MachineImplementationsDelays<\n TContext extends MachineContext,\n TResolvedTypesMeta,\n TEventsCausingDelays = Prop<\n Prop<TResolvedTypesMeta, 'resolved'>,\n 'eventsCausingDelays'\n >,\n TIndexedEvents = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedEvents'>\n> = {\n [K in keyof TEventsCausingDelays]?: DelayConfig<\n TContext,\n Cast<Prop<TIndexedEvents, TEventsCausingDelays[K]>, EventObject>\n >;\n};\n\ntype MachineImplementationsGuards<\n TContext extends MachineContext,\n TResolvedTypesMeta,\n TEventsCausingGuards = Prop<\n Prop<TResolvedTypesMeta, 'resolved'>,\n 'eventsCausingGuards'\n >,\n TIndexedEvents = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedEvents'>\n> = {\n [K in keyof TEventsCausingGuards]?:\n | GuardPredicate<\n TContext,\n Cast<Prop<TIndexedEvents, TEventsCausingGuards[K]>, EventObject>\n >\n | GuardConfig<\n TContext,\n Cast<Prop<TIndexedEvents, TEventsCausingGuards[K]>, EventObject>\n >;\n};\n\ntype MakeKeysRequired<T extends string> = { [K in T]: unknown };\n\ntype MaybeMakeMissingImplementationsRequired<\n TImplementationType,\n TMissingImplementationsForType,\n TRequireMissingImplementations\n> = TRequireMissingImplementations extends true\n ? IsNever<TMissingImplementationsForType> extends true\n ? {}\n : {\n [K in Cast<TImplementationType, string>]: MakeKeysRequired<\n Cast<TMissingImplementationsForType, string>\n >;\n }\n : {};\n\ntype GenerateActionsImplementationsPart<\n TContext extends MachineContext,\n TResolvedTypesMeta,\n TRequireMissingImplementations,\n TMissingImplementations\n> = Compute<\n MaybeMakeMissingImplementationsRequired<\n 'actions',\n Prop<TMissingImplementations, 'actions'>,\n TRequireMissingImplementations\n > & {\n actions?: MachineImplementationsActions<TContext, TResolvedTypesMeta>;\n }\n>;\n\ntype GenerateActorsImplementationsPart<\n TContext extends MachineContext,\n TResolvedTypesMeta,\n TRequireMissingImplementations,\n TMissingImplementations\n> = Compute<\n MaybeMakeMissingImplementationsRequired<\n 'actors',\n Prop<TMissingImplementations, 'actors'>,\n TRequireMissingImplementations\n > & {\n actors?: MachineImplementationsActors<TContext, TResolvedTypesMeta>;\n }\n>;\n\ntype GenerateDelaysImplementationsPart<\n TContext extends MachineContext,\n TResolvedTypesMeta,\n TRequireMissingImplementations,\n TMissingImplementations\n> = Compute<\n MaybeMakeMissingImplementationsRequired<\n 'delays',\n Prop<TMissingImplementations, 'delays'>,\n TRequireMissingImplementations\n > & {\n delays?: MachineImplementationsDelays<TContext, TResolvedTypesMeta>;\n }\n>;\n\ntype GenerateGuardsImplementationsPart<\n TContext extends MachineContext,\n TResolvedTypesMeta,\n TRequireMissingImplementations,\n TMissingImplementations\n> = Compute<\n MaybeMakeMissingImplementationsRequired<\n 'guards',\n Prop<TMissingImplementations, 'guards'>,\n TRequireMissingImplementations\n > & {\n guards?: MachineImplementationsGuards<TContext, TResolvedTypesMeta>;\n }\n>;\n\nexport type InternalMachineImplementations<\n TContext extends MachineContext,\n TEvent extends EventObject,\n _TAction extends ParameterizedObject,\n TActor extends ProvidedActor,\n TResolvedTypesMeta,\n TRequireMissingImplementations extends boolean = false,\n TMissingImplementations = Prop<\n Prop<TResolvedTypesMeta, 'resolved'>,\n 'missingImplementations'\n >\n> =\n // TODO: remove per-Generate* Computes\n Compute<\n GenerateActionsImplementationsPart<\n TContext,\n TResolvedTypesMeta,\n TRequireMissingImplementations,\n TMissingImplementations\n > &\n GenerateActorsImplementationsPart<\n TContext,\n TResolvedTypesMeta,\n TRequireMissingImplementations,\n TMissingImplementations\n > &\n GenerateDelaysImplementationsPart<\n TContext,\n TResolvedTypesMeta,\n TRequireMissingImplementations,\n TMissingImplementations\n > &\n GenerateGuardsImplementationsPart<\n TContext,\n TResolvedTypesMeta,\n TRequireMissingImplementations,\n TMissingImplementations\n >\n >;\n\nexport type MachineImplementations<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TAction extends ParameterizedObject = ParameterizedObject,\n TActor extends ProvidedActor = ProvidedActor,\n TTypesMeta extends TypegenConstraint = TypegenDisabled\n> = InternalMachineImplementations<\n TContext,\n TEvent,\n TAction,\n TActor,\n ResolveTypegenMeta<TTypesMeta, TEvent, TAction, TActor>\n>;\n\ntype InitialContext<TContext extends MachineContext, TInput> =\n | TContext\n | ContextFactory<TContext, TInput>;\n\nexport type ContextFactory<TContext extends MachineContext, TInput> = ({\n spawn,\n input\n}: {\n spawn: Spawner;\n input: TInput;\n}) => TContext;\n\nexport type MachineConfig<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TAction extends ParameterizedObject = ParameterizedObject,\n TActor extends ProvidedActor = ProvidedActor,\n TInput = any,\n TTypesMeta = TypegenDisabled\n> = (StateNodeConfig<\n NoInfer<TContext>,\n NoInfer<TEvent>,\n NoInfer<TAction>,\n NoInfer<TActor>\n> & {\n /**\n * The initial context (extended state)\n */\n /**\n * The machine's own version.\n */\n version?: string;\n types?: MachineTypes<TContext, TEvent, TActor, TInput, TTypesMeta>;\n}) &\n (Equals<TContext, MachineContext> extends true\n ? { context?: InitialContext<LowInfer<TContext>, TInput> }\n : { context: InitialContext<LowInfer<TContext>, TInput> });\n\nexport interface ProvidedActor {\n src: string;\n logic: AnyActorLogic;\n id?: string;\n}\n\nexport interface MachineTypes<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TActor extends ProvidedActor,\n TInput,\n TTypesMeta = TypegenDisabled\n> {\n context?: TContext;\n actions?: { type: string; [key: string]: any };\n actors?: TActor;\n events?: TEvent;\n guards?: { type: string; [key: string]: any };\n typegen?: TTypesMeta;\n input?: TInput;\n}\n\nexport interface HistoryStateNode<TContext extends MachineContext>\n extends StateNode<TContext> {\n history: 'shallow' | 'deep';\n target: string | undefined;\n}\n\nexport type HistoryValue<\n TContext extends MachineContext,\n TEvent extends EventObject\n> = Record<string, Array<StateNode<TContext, TEvent>>>;\n\nexport type AnyHistoryValue = HistoryValue<any, any>;\n\nexport type StateFrom<\n T extends AnyStateMachine | ((...args: any[]) => AnyStateMachine)\n> = T extends AnyStateMachine\n ? ReturnType<T['transition']>\n : T extends (...args: any[]) => AnyStateMachine\n ? ReturnType<ReturnType<T>['transition']>\n : never;\n\nexport type Transitions<\n TContext extends MachineContext,\n TEvent extends EventObject\n> = Array<TransitionDefinition<TContext, TEvent>>;\n\nexport enum ConstantPrefix {\n After = 'xstate.after',\n DoneState = 'done.state',\n DoneInvoke = 'done.invoke',\n ErrorExecution = 'error.execution',\n ErrorCommunication = 'error.communication',\n ErrorPlatform = 'error.platform',\n ErrorCustom = 'xstate.error'\n}\n\nexport interface DoneInvokeEvent<TOutput> {\n type: `done.invoke.${string}`;\n output: TOutput;\n}\n\nexport interface ErrorEvent<TErrorData> {\n type: `error.${string}`;\n data: TErrorData;\n}\n\nexport interface SnapshotEvent<TData> {\n type: `xstate.snapshot.${string}`;\n data: TData;\n}\n\nexport interface ErrorExecutionEvent extends EventObject {\n src: string;\n type: ConstantPrefix.ErrorExecution;\n data: any;\n}\n\nexport interface ErrorPlatformEvent extends EventObject {\n data: any;\n}\n\nexport interface DoneEventObject extends EventObject {\n output?: any;\n toString(): string;\n}\n\nexport type DoneEvent = DoneEventObject & string;\n\nexport type DelayExpr<\n TContext extends MachineContext,\n TEvent extends EventObject\n> = (args: UnifiedArg<TContext, TEvent>) => number;\n\nexport type LogExpr<\n TContext extends MachineContext,\n TEvent extends EventObject\n> = (args: UnifiedArg<TContext, TEvent>) => unknown;\n\nexport type SendExpr<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TSentEvent extends EventObject = AnyEventObject\n> = (args: UnifiedArg<TContext, TExpressionEvent>) => TSentEvent;\n\nexport enum SpecialTargets {\n Parent = '#_parent',\n Internal = '#_internal'\n}\n\nexport interface SendToActionOptions<\n TContext extends MachineContext,\n TEvent extends EventObject\n> extends RaiseActionOptions<TContext, TEvent> {}\n\nexport interface RaiseActionOptions<\n TContext extends MachineContext,\n TEvent extends EventObject\n> {\n id?: string;\n delay?: number | string | DelayExpr<TContext, TEvent>;\n}\n\nexport interface RaiseActionParams<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TEvent extends EventObject\n> extends RaiseActionOptions<TContext, TExpressionEvent> {\n event: TEvent | SendExpr<TContext, TExpressionEvent, TEvent>;\n}\n\nexport interface SendToActionParams<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TSentEvent extends EventObject = EventObject\n> extends SendToActionOptions<TContext, TEvent> {\n event: TSentEvent | SendExpr<TContext, TEvent, TSentEvent>;\n}\n\nexport type Assigner<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject\n> = (args: AssignArgs<TContext, TExpressionEvent>) => Partial<TContext>;\n\nexport type PartialAssigner<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TKey extends keyof TContext\n> = (args: AssignArgs<TContext, TExpressionEvent>) => TContext[TKey];\n\nexport type PropertyAssigner<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject\n> = {\n [K in keyof TContext]?:\n | PartialAssigner<TContext, TExpressionEvent, K>\n | TContext[K];\n};\n\nexport type Mapper<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TParams\n> = (args: {\n context: TContext;\n event: TEvent;\n self: ActorRef<TEvent>;\n}) => TParams;\n\nexport type PropertyMapper<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TParams extends {}\n> = {\n [K in keyof TParams]?: Mapper<TContext, TEvent, TParams[K]> | TParams[K];\n};\n\nexport interface TransitionDefinition<\n TContext extends MachineContext,\n TEvent extends EventObject\n> extends Omit<TransitionConfig<TContext, TEvent>, 'target'> {\n target: Array<StateNode<TContext, TEvent>> | undefined;\n source: StateNode<TContext, TEvent>;\n actions: Action<any, any, any>[];\n reenter: boolean;\n guard?: GuardDefinition<TContext, TEvent>;\n eventType: TEvent['type'] | '*';\n toJSON: () => {\n target: string[] | undefined;\n source: string;\n actions: Action<any, any, any>[];\n guard?: GuardDefinition<TContext, TEvent>;\n eventType: TEvent['type'] | '*';\n meta?: Record<string, any>;\n };\n}\n\nexport type AnyTransitionDefinition = TransitionDefinition<any, any>;\n\nexport interface InitialTransitionDefinition<\n TContext extends MachineContext,\n TEvent extends EventObject\n> extends TransitionDefinition<TContext, TEvent> {\n target: Array<StateNode<TContext, TEvent>>;\n guard?: never;\n}\n\nexport type TransitionDefinitionMap<\n TContext extends MachineContext,\n TEvent extends EventObject\n> = {\n [K in TEvent['type'] | '*']: Array<\n TransitionDefinition<\n TContext,\n K extends TEvent['type'] ? Extract<TEvent, { type: K }> : EventObject\n >\n >;\n};\n\nexport interface DelayedTransitionDefinition<\n TContext extends MachineContext,\n TEvent extends EventObject\n> extends TransitionDefinition<TContext, TEvent> {\n delay: number | string | DelayExpr<TContext, TEvent>;\n}\n\nexport interface Edge<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TEventType extends TEvent['type'] = string\n> {\n event: TEventType;\n source: StateNode<TContext, TEvent>;\n target: StateNode<TContext, TEvent>;\n cond?: GuardConfig<TContext, TEvent & { type: TEventType }>;\n actions: Array<Action<TContext, TEvent>>;\n meta?: MetaObject;\n transition: TransitionDefinition<TContext, TEvent>;\n}\nexport interface NodesAndEdges<\n TContext extends MachineContext,\n TEvent extends EventObject\n> {\n nodes: StateNode[];\n edges: Array<Edge<TContext, TEvent, TEvent['type']>>;\n}\n\nexport interface Segment<\n TContext extends MachineContext,\n TEvent extends EventObject\n> {\n /**\n * From state.\n */\n state: State<TContext, TEvent, TODO>;\n /**\n * Event from state.\n */\n event: TEvent;\n}\n\nexport interface StateLike<TContext extends MachineContext> {\n value: StateValue;\n context: TContext;\n event: EventObject;\n}\n\nexport interface StateConfig<\n TContext extends MachineContext,\n TEvent extends EventObject\n> {\n value: StateValue;\n context: TContext;\n historyValue?: HistoryValue<TContext, TEvent>;\n meta?: any;\n configuration?: Array<StateNode<TContext, TEvent>>;\n children: Record<string, ActorRef<any>>;\n done?: boolean;\n output?: any;\n error?: unknown;\n tags?: Set<string>;\n machine?: StateMachine<TContext, TEvent, any, any, any, any>;\n _internalQueue?: Array<TEvent>;\n}\n\nexport interface ActorOptions<TLogic extends AnyActorLogic> {\n /**\n * Whether state actions should be executed immediately upon transition. Defaults to `true`.\n */\n execute?: boolean;\n clock?: Clock;\n logger?: (...args: any[]) => void;\n parent?: ActorRef<any>;\n /**\n * If `true`, defers processing of sent events until the service\n * is initialized (`.start()`). Otherwise, an error will be thrown\n * for events sent to an uninitialized service.\n *\n * Default: `true`\n */\n deferEvents?: boolean;\n /**\n * The custom `id` for referencing this service.\n */\n id?: string;\n /**\n * If `true`, states and events will be logged to Redux DevTools.\n *\n * Default: `false`\n */\n devTools?: boolean | DevToolsAdapter; // TODO: add enhancer options\n\n sync?: boolean;\n\n /**\n * The system ID to register this actor under\n */\n systemId?: string;\n /**\n * The input data to pass to the actor.\n */\n input?: InputFrom<TLogic>;\n\n // state?:\n // | PersistedStateFrom<TActorLogic>\n // | InternalStateFrom<TActorLogic>;\n state?: any;\n\n /**\n * The source definition.\n */\n src?: string;\n}\n\nexport type AnyActor = Actor<any, any>;\n\n/**\n * @deprecated Use `AnyActor` instead.\n */\nexport type AnyInterpreter = AnyActor;\n\n// Based on RxJS types\nexport type Observer<T> = {\n next?: (value: T) => void;\n error?: (err: any) => void;\n complete?: () => void;\n};\n\nexport interface Subscription {\n unsubscribe(): void;\n}\n\nexport interface InteropObservable<T> {\n [Symbol.observable]: () => InteropSubscribable<T>;\n}\n\nexport interface InteropSubscribable<T> {\n subscribe(observer: Observer<T>): Subscription;\n}\n\nexport interface Subscribable<T> extends InteropSubscribable<T> {\n subscribe(observer: Observer<T>): Subscription;\n subscribe(\n next: (value: T) => void,\n error?: (error: any) => void,\n complete?: () => void\n ): Subscription;\n}\n\nexport type ExtractEvent<\n TEvent extends EventObject,\n TEventType extends TEvent['type']\n> = TEvent extends any\n ? TEventType extends TEvent['type']\n ? TEvent\n : never\n : never;\n\nexport interface BaseActorRef<TEvent extends EventObject> {\n send: (event: TEvent) => void;\n}\n\nexport interface ActorLike<TCurrent, TEvent extends EventObject>\n extends Subscribable<TCurrent> {\n send: (event: TEvent) => void;\n}\n\nexport interface ActorRef<TEvent extends EventObject, TSnapshot = any>\n extends Subscribable<TSnapshot>,\n InteropObservable<TSnapshot> {\n /**\n * The unique identifier for this actor relative to its parent.\n */\n id: string;\n sessionId: string;\n send: (event: TEvent) => void;\n // TODO: should this be optional?\n start?: () => void;\n getSnapshot: () => TSnapshot;\n // TODO: this should return some sort of TPersistedState, not any\n getPersistedState?: () => any;\n stop: () => void;\n toJSON?: () => any;\n // TODO: figure out how to hide this externally as `sendTo(ctx => ctx.actorRef._parent._parent._parent._parent)` shouldn't be allowed\n _parent?: ActorRef<any, any>;\n system?: ActorSystem<any>;\n status: ActorStatus;\n src?: string;\n}\n\nexport type AnyActorRef = ActorRef<any, any>;\n\nexport type ActorLogicFrom<T> = ReturnTypeOrValue<T> extends infer R\n ? R extends StateMachine<any, any, any, any, any>\n ? R\n : R extends Promise<infer U>\n ? PromiseActorLogic<U>\n : never\n : never;\n\nexport type ActorRefFrom<T> = ReturnTypeOrValue<T> extends infer R\n ? R extends StateMachine<\n infer TContext,\n infer TEvent,\n any,\n any,\n any,\n infer TResolvedTypesMeta\n >\n ? ActorRef<\n TEvent,\n State<\n TContext,\n TEvent,\n TODO,\n AreAllImplementationsAssumedToBeProvided<TResolvedTypesMeta> extends false\n ? MarkAllImplementationsAsProvided<TResolvedTypesMeta>\n : TResolvedTypesMeta\n >\n >\n : R extends Promise<infer U>\n ? ActorRefFrom<PromiseActorLogic<U>>\n : R extends ActorLogic<\n infer TEvent,\n infer TSnapshot,\n infer _,\n infer __,\n infer ___,\n infer ____,\n infer _____\n >\n ? ActorRef<TEvent, TSnapshot>\n : never\n : never;\n\nexport type DevToolsAdapter = (service: AnyActor) => void;\n\n/**\n * @deprecated Use `Actor<T>` instead.\n */\nexport type InterpreterFrom<\n T extends AnyStateMachine | ((...args: any[]) => AnyStateMachine)\n> = ReturnTypeOrValue<T> extends StateMachine<\n infer TContext,\n infer TEvent,\n infer _TAction,\n infer TActor,\n infer TInput,\n infer TResolvedTypesMeta\n>\n ? Actor<\n ActorLogic<\n TEvent,\n State<TContext, TEvent, TActor, TResolvedTypesMeta>,\n State<TContext, TEvent, TActor, TResolvedTypesMeta>,\n PersistedMachineState<\n State<TContext, TEvent, TActor, TResolvedTypesMeta>\n >,\n ActorSystem<any>,\n TInput\n >\n >\n : never;\n\nexport type MachineImplementationsFrom<\n T extends AnyStateMachine | ((...args: any[]) => AnyStateMachine),\n TRequireMissingImplementations extends boolean = false\n> = ReturnTypeOrValue<T> extends StateMachine<\n infer TContext,\n infer TEvent,\n infer TAction,\n infer TActor,\n infer _TInput,\n infer TResolvedTypesMeta\n>\n ? InternalMachineImplementations<\n TContext,\n TEvent,\n TAction,\n TActor,\n TResolvedTypesMeta,\n TRequireMissingImplementations\n >\n : never;\n\n// only meant to be used internally for debugging purposes\nexport type __ResolvedTypesMetaFrom<T> = T extends StateMachine<\n any,\n any,\n any,\n any,\n any,\n infer TResolvedTypesMeta\n>\n ? TResolvedTypesMeta\n : never;\n\nexport type EventOfMachine<TMachine extends AnyStateMachine> =\n TMachine extends StateMachine<any, infer E, any, any, any, any> ? E : never;\n\nexport interface ActorContext<\n TEvent extends EventObject,\n TSnapshot,\n TSystem extends ActorSystem<any> = ActorSystem<any>\n> {\n self: ActorRef<TEvent, TSnapshot>;\n id: string;\n sessionId: string;\n logger: (...args: any[]) => void;\n defer: (fn: () => void) => void;\n system: TSystem;\n stopChild: (child: AnyActorRef) => void;\n}\n\nexport type AnyActorContext = ActorContext<any, any, any>;\n\nexport interface ActorLogic<\n TEvent extends EventObject,\n TSnapshot = any,\n TInternalState = TSnapshot,\n /**\n * Serialized internal state used for persistence & restoration\n */\n TPersisted = TInternalState,\n TSystem extends ActorSystem<any> = ActorSystem<any>,\n TInput = any,\n TOutput = unknown\n> {\n config?: unknown;\n transition: (\n state: TInternalState,\n message: TEvent,\n ctx: ActorContext<TEvent, TSnapshot, TSystem>\n ) => TInternalState;\n getInitialState: (\n actorCtx: ActorContext<TEvent, TSnapshot, TSystem>,\n input: TInput\n ) => TInternalState;\n restoreState?: (\n persistedState: TPersisted,\n actorCtx: ActorContext<TEvent, TSnapshot>\n ) => TInternalState;\n getSnapshot?: (state: TInternalState) => TSnapshot;\n getStatus?: (state: TInternalState) => { status: string; data?: any };\n start?: (\n state: TInternalState,\n actorCtx: ActorContext<TEvent, TSnapshot>\n ) => void;\n /**\n * @returns Persisted state\n */\n getPersistedState?: (state: TInternalState) => TPersisted;\n _out_TOutput?: TOutput; // temp hack to use this type param so we can error properly, ideally this should appear somewhere in the type, perhaps in the `getStatus`?\n}\n\nexport type AnyActorLogic = ActorLogic<\n any, // event\n any, // snapshot\n any, // internal state\n any, // persisted state\n any, // system\n any, // input\n any // output\n>;\n\nexport type SnapshotFrom<T> = ReturnTypeOrValue<T> extends infer R\n ? R extends ActorRef<infer _, infer TSnapshot>\n ? TSnapshot\n : R extends Actor<infer TLogic>\n ? SnapshotFrom<TLogic>\n : R extends StateMachine<\n infer _,\n infer __,\n infer ___,\n infer ____,\n infer _____,\n infer ______\n >\n ? StateFrom<R>\n : R extends ActorLogic<\n infer _,\n infer TSnapshot,\n infer __,\n infer ___,\n infer ____\n >\n ? TSnapshot\n : R extends ActorContext<infer _, infer TSnapshot, infer __>\n ? TSnapshot\n : never\n : never;\n\nexport type EventFromLogic<TLogic extends ActorLogic<any, any>> =\n TLogic extends ActorLogic<\n infer TEvent,\n infer _,\n infer __,\n infer ___,\n infer ____\n >\n ? TEvent\n : never;\n\nexport type PersistedStateFrom<TLogic extends ActorLogic<any, any>> =\n TLogic extends ActorLogic<\n infer _TEvent,\n infer _TSnapshot,\n infer _TInternalState,\n infer TPersisted\n >\n ? TPersisted\n : never;\n\nexport type InternalStateFrom<TLogic extends ActorLogic<any, any>> =\n TLogic extends ActorLogic<\n infer _TEvent,\n infer _TSnapshot,\n infer TInternalState,\n infer _TPersisted\n >\n ? TInternalState\n : never;\n\ntype ResolveEventType<T> = ReturnTypeOrValue<T> extends infer R\n ? R extends StateMachine<\n infer _,\n infer TEvent,\n infer __,\n infer ___,\n infer ____,\n infer _____\n >\n ? TEvent\n : R extends State<\n infer _TContext,\n infer TEvent,\n infer _TAction,\n infer _TActor\n >\n ? TEvent\n : R extends ActorRef<infer TEvent, infer _>\n ? TEvent\n : never\n : never;\n\nexport type EventFrom<\n T,\n K extends Prop<TEvent, 'type'> = never,\n TEvent extends EventObject = ResolveEventType<T>\n> = IsNever<K> extends true ? TEvent : ExtractEvent<TEvent, K>;\n\nexport type ContextFrom<T> = ReturnTypeOrValue<T> extends infer R\n ? R extends StateMachine<\n infer TContext,\n infer _,\n infer __,\n infer ___,\n infer ____,\n infer _____\n >\n ? TContext\n : R extends State<\n infer TContext,\n infer _TEvent,\n infer _TAction,\n infer _TActor\n >\n ? TContext\n : R extends Actor<infer TActorLogic>\n ? TActorLogic extends StateMachine<\n infer TContext,\n infer _TEvent,\n infer _TActions,\n infer _TActors,\n infer _TInput,\n infer _TTypesMeta\n >\n ? TContext\n : never\n : never\n : never;\n\nexport type InferEvent<E extends EventObject> = {\n [T in E['type']]: { type: T } & Extract<E, { type: T }>;\n}[E['type']];\n\nexport type TODO = any;\n\nexport type StateValueFrom<TMachine extends AnyStateMachine> = Parameters<\n StateFrom<TMachine>['matches']\n>[0];\n\nexport type TagsFrom<TMachine extends AnyStateMachine> = Parameters<\n StateFrom<TMachine>['hasTag']\n>[0];\n\nexport interface ActorSystemInfo {\n actors: Record<string, AnyActorRef>;\n}\n\nexport interface ActorSystem<T extends ActorSystemInfo> {\n _bookId: () => string;\n _register: (sessionId: string, actorRef: AnyActorRef) => string;\n _unregister: (actorRef: AnyActorRef) => void;\n _set: <K extends keyof T['actors']>(key: K, actorRef: T['actors'][K]) => void;\n get: <K extends keyof T['actors']>(key: K) => T['actors'][K] | undefined;\n}\n\nexport type AnyActorSystem = ActorSystem<any>;\n\nexport type PersistedMachineState<TState extends AnyState> = Pick<\n TState,\n 'value' | 'output' | 'error' | 'context' | 'done' | 'historyValue'\n> & {\n children: {\n [K in keyof TState['children']]: {\n state: any; // TODO: fix (should be state from actorref)\n src?: string;\n };\n };\n};\n","import {\n ConstantPrefix,\n DoneEvent,\n ErrorPlatformEvent,\n DoneEventObject\n} from './types.ts';\nimport * as constantPrefixes from './constantPrefixes.ts';\nimport { INIT_TYPE } from './constants.ts';\nexport { sendTo, sendParent, forwardTo, escalate } from './actions/send.ts';\n\nexport { stop } from './actions/stop.ts';\nexport { log } from './actions/log.ts';\nexport { cancel } from './actions/cancel.ts';\nexport { assign } from './actions/assign.ts';\nexport { raise } from './actions/raise.ts';\nexport { choose } from './actions/choose.ts';\nexport { pure } from './actions/pure.ts';\nexport { constantPrefixes };\n\n/**\n * Returns an event type that represents an implicit event that\n * is sent after the specified `delay`.\n *\n * @param delayRef The delay in milliseconds\n * @param id The state node ID where this event is handled\n */\nexport function after(delayRef: number | string, id?: string) {\n const idSuffix = id ? `#${id}` : '';\n return `${ConstantPrefix.After}(${delayRef})${idSuffix}`;\n}\n\n/**\n * Returns an event that represents that a final state node\n * has been reached in the parent state node.\n *\n * @param id The final state node's parent state node `id`\n * @param output The data to pass into the event\n */\nexport function done(id: string, output?: any): DoneEventObject {\n const type = `${ConstantPrefix.DoneState}.${id}`;\n const eventObject = {\n type,\n output\n };\n\n eventObject.toString = () => type;\n\n return eventObject as DoneEvent;\n}\n\n/**\n * Returns an event that represents that an invoked service has terminated.\n *\n * An invoked service is terminated when it has reached a top-level final state node,\n * but not when it is canceled.\n *\n * @param invokeId The invoked service ID\n * @param output The data to pass into the event\n */\nexport function doneInvoke(invokeId: string, output?: any): DoneEvent {\n const type = `${ConstantPrefix.DoneInvoke}.${invokeId}`;\n const eventObject = {\n type,\n output\n };\n\n eventObject.toString = () => type;\n\n return eventObject as DoneEvent;\n}\n\nexport function error(id: string, data?: any): ErrorPlatformEvent & string {\n const type = `${ConstantPrefix.ErrorPlatform}.${id}`;\n const eventObject = { type, data };\n\n eventObject.toString = () => type;\n\n return eventObject as ErrorPlatformEvent & string;\n}\n\nexport function createInitEvent(input: unknown) {\n return { type: INIT_TYPE, input } as const;\n}\n","import isDevelopment from '#is-development';\nimport { AnyActor, DevToolsAdapter } from '../types.ts';\n\ninterface DevInterface {\n services: Set<AnyActor>;\n register(service: AnyActor): void;\n onRegister(listener: ServiceListener): void;\n}\ntype ServiceListener = (service: AnyActor) => void;\n\nexport interface XStateDevInterface {\n register: (service: AnyActor) => void;\n unregister: (service: AnyActor) => void;\n onRegister: (listener: ServiceListener) => {\n unsubscribe: () => void;\n };\n services: Set<AnyActor>;\n}\n\n// From https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/globalThis\nexport function getGlobal(): typeof globalThis | undefined {\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n }\n if (typeof self !== 'undefined') {\n return self;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof global !== 'undefined') {\n return global;\n }\n if (isDevelopment) {\n console.warn(\n 'XState could not find a global object in this environment. Please let the maintainers know and raise an issue here: https://github.com/statelyai/xstate/issues'\n );\n }\n}\n\nfunction getDevTools(): DevInterface | undefined {\n const w = getGlobal();\n if (!!(w as any).__xstate__) {\n return (w as any).__xstate__;\n }\n\n return undefined;\n}\n\nexport function registerService(service: AnyActor) {\n if (typeof window === 'undefined') {\n return;\n }\n\n const devTools = getDevTools();\n\n if (devTools) {\n devTools.register(service);\n }\n}\n\nexport const devToolsAdapter: DevToolsAdapter = (service) => {\n if (typeof window === 'undefined') {\n return;\n }\n\n const devTools = getDevTools();\n\n if (devTools) {\n devTools.register(service);\n }\n};\n","/**\n * This function makes sure that unhandled errors are thrown in a separate macrotask.\n * It allows those errors to be detected by global error handlers and reported to bug tracking services\n * without interrupting our own stack of execution.\n *\n * @param err error to be thrown\n */\nexport function reportUnhandledError(err: unknown) {\n setTimeout(() => {\n throw err;\n });\n}\n","export const symbolObservable: typeof Symbol.observable = (() =>\n (typeof Symbol === 'function' && Symbol.observable) ||\n '@@observable')() as any;\n","import isDevelopment from '#is-development';\nimport { Mailbox } from './Mailbox.ts';\nimport { doneInvoke, error } from './actions.ts';\nimport { stopSignalType } from './actors/index.ts';\nimport { devToolsAdapter } from './dev/index.ts';\nimport { reportUnhandledError } from './reportUnhandledError.ts';\nimport { symbolObservable } from './symbolObservable.ts';\nimport { createSystem } from './system.ts';\nimport {\n AreAllImplementationsAssumedToBeProvided,\n MissingImplementationsError\n} from './typegenTypes.ts';\nimport type {\n ActorLogic,\n ActorContext,\n ActorSystem,\n AnyActorLogic,\n AnyStateMachine,\n EventFromLogic,\n PersistedStateFrom,\n SnapshotFrom,\n AnyActorRef\n} from './types.ts';\nimport {\n ActorRef,\n DoneEvent,\n EventObject,\n InteropSubscribable,\n ActorOptions,\n Observer,\n Subscription\n} from './types.ts';\nimport { toObserver } from './utils.ts';\n\nexport type SnapshotListener<TLogic extends AnyActorLogic> = (\n state: SnapshotFrom<TLogic>\n) => void;\n\nexport type EventListener<TEvent extends EventObject = EventObject> = (\n event: TEvent\n) => void;\n\nexport type Listener = () => void;\nexport type ErrorListener = (error: any) => void;\n\nexport interface Clock {\n setTimeout(fn: (...args: any[]) => void, timeout: number): any;\n clearTimeout(id: any): void;\n}\n\nexport enum ActorStatus {\n NotStarted,\n Running,\n Stopped\n}\n\n/**\n * @deprecated Use `ActorStatus` instead.\n */\nexport const InterpreterStatus = ActorStatus;\n\nconst defaultOptions = {\n deferEvents: true,\n clock: {\n setTimeout: (fn, ms) => {\n return setTimeout(fn, ms);\n },\n clearTimeout: (id) => {\n return clearTimeout(id);\n }\n } as Clock,\n logger: console.log.bind(console),\n devTools: false\n};\n\ntype InternalStateFrom<TLogic extends ActorLogic<any, any, any>> =\n TLogic extends ActorLogic<infer _, infer __, infer TInternalState>\n ? TInternalState\n : never;\n\nexport class Actor<\n TLogic extends AnyActorLogic,\n TEvent extends EventObject = EventFromLogic<TLogic>\n> implements ActorRef<TEvent, SnapshotFrom<TLogic>>\n{\n /**\n * The current internal state of the actor.\n */\n private _state!: InternalStateFrom<TLogic>;\n /**\n * The clock that is responsible for setting and clearing timeouts, such as delayed events and transitions.\n */\n public clock: Clock;\n public options: Readonly<ActorOptions<TLogic>>;\n\n /**\n * The unique identifier for this actor relative to its parent.\n */\n public id: string;\n\n private mailbox: Mailbox<TEvent> = new Mailbox(this._process.bind(this));\n\n private delayedEventsMap: Record<string, unknown> = {};\n\n private observers: Set<Observer<SnapshotFrom<TLogic>>> = new Set();\n private logger: (...args: any[]) => void;\n /**\n * Whether the service is started.\n */\n public status: ActorStatus = ActorStatus.NotStarted;\n\n // Actor Ref\n public _parent?: ActorRef<any>;\n public ref: ActorRef<TEvent>;\n // TODO: add typings for system\n private _actorContext: ActorContext<TEvent, SnapshotFrom<TLogic>, any>;\n\n private _systemId: string | undefined;\n\n /**\n * The globally unique process ID for this invocation.\n */\n public sessionId: string;\n\n public system: ActorSystem<any>;\n private _doneEvent?: DoneEvent;\n\n public src?: string;\n\n /**\n * Creates a new actor instance for the given logic with the provided options, if any.\n *\n * @param logic The logic to create an actor from\n * @param options Actor options\n */\n constructor(public logic: TLogic, options?: ActorOptions<TLogic>) {\n const resolvedOptions = {\n ...defaultOptions,\n ...options\n };\n\n const { clock, logger, parent, id, systemId } = resolvedOptions;\n const self = this;\n\n this.system = parent?.system ?? createSystem();\n\n if (systemId) {\n this._systemId = systemId;\n this.system._set(systemId, this);\n }\n\n this.sessionId = this.system._bookId();\n this.id = id ?? this.sessionId;\n this.logger = logger;\n this.clock = clock;\n this._parent = parent;\n this.options = resolvedOptions;\n this.src = resolvedOptions.src;\n this.ref = this;\n this._actorContext = {\n self,\n id: this.id,\n sessionId: this.sessionId,\n logger: this.logger,\n defer: (fn) => {\n this._deferred.push(fn);\n },\n system: this.system,\n stopChild: (child) => {\n if (child._parent !== this) {\n throw new Error(\n `Cannot stop child actor ${child.id} of ${this.id} because it is not a child`\n );\n }\n (child as any)._stop();\n }\n };\n\n // Ensure that the send method is bound to this Actor instance\n // if destructured\n this.send = this.send.bind(this);\n this._initState();\n }\n\n private _initState() {\n this._state = this.options.state\n ? this.logic.restoreState\n ? this.logic.restoreState(this.options.state, this._actorContext)\n : this.options.state\n : this.logic.getInitialState(this._actorContext, this.options?.input);\n }\n\n // array of functions to defer\n private _deferred: Array<() => void> = [];\n\n private update(state: InternalStateFrom<TLogic>): void {\n // Update state\n this._state = state;\n const snapshot = this.getSnapshot();\n\n // Execute deferred effects\n let deferredFn: (typeof this._deferred)[number] | undefined;\n\n while ((deferredFn = this._deferred.shift())) {\n deferredFn();\n }\n\n for (const observer of this.observers) {\n // TODO: should observers be notified in case of the error?\n try {\n observer.next?.(snapshot);\n } catch (err) {\n reportUnhandledError(err);\n }\n }\n\n const status = this.logic.getStatus?.(state);\n\n switch (status?.status) {\n case 'done':\n this._stopProcedure();\n this._complete();\n this._doneEvent = doneInvoke(this.id, status.data);\n this._parent?.send(this._doneEvent as any);\n break;\n case 'error':\n this._stopProcedure();\n this._error(status.data);\n this._parent?.send(error(this.id, status.data));\n break;\n }\n }\n\n public subscribe(observer: Observer<SnapshotFrom<TLogic>>): Subscription;\n public subscribe(\n nextListener?: (state: SnapshotFrom<TLogic>) => void,\n errorListener?: (error: any) => void,\n completeListener?: () => void\n ): Subscription;\n public subscribe(\n nextListenerOrObserver?:\n | ((state: SnapshotFrom<TLogic>) => void)\n | Observer<SnapshotFrom<TLogic>>,\n errorListener?: (error: any) => void,\n completeListener?: () => void\n ): Subscription {\n const observer = toObserver(\n nextListenerOrObserver,\n errorListener,\n completeListener\n );\n\n if (this.status !== ActorStatus.Stopped) {\n this.observers.add(observer);\n } else {\n try {\n observer.complete?.();\n } catch (err) {\n reportUnhandledError(err);\n }\n }\n\n return {\n unsubscribe: () => {\n this.observers.delete(observer);\n }\n };\n }\n\n /**\n * Starts the Actor from the initial state\n */\n public start(): this {\n if (this.status === ActorStatus.Running) {\n // Do not restart the service if it is already started\n return this;\n }\n\n this.system._register(this.sessionId, this);\n if (this._systemId) {\n this.system._set(this._systemId, this);\n }\n this.status = ActorStatus.Running;\n\n const status = this.logic.getStatus?.(this._state);\n\n switch (status?.status) {\n case 'done':\n // a state machine can be \"done\" upon intialization (it could reach a final state using initial microsteps)\n // we still need to complete observers, flush deferreds etc\n this.update(this._state);\n // fallthrough\n case 'error':\n // TODO: rethink cleanup of observers, mailbox, etc\n return this;\n }\n\n if (this.logic.start) {\n try {\n this.logic.start(this._state, this._actorContext);\n } catch (err) {\n this._stopProcedure();\n this._error(err);\n this._parent?.send(error(this.id, err));\n return this;\n }\n }\n\n // TODO: this notifies all subscribers but usually this is redundant\n // there is no real change happening here\n // we need to rethink if this needs to be refactored\n this.update(this._state);\n\n if (this.options.devTools) {\n this.attachDevTools();\n }\n\n this.mailbox.start();\n\n return this;\n }\n\n private _process(event: TEvent) {\n // TODO: reexamine what happens when an action (or a guard or smth) throws\n let nextState;\n let caughtError;\n try {\n nextState = this.logic.transition(this._state, event, this._actorContext);\n } catch (err) {\n // we wrap it in a box so we can rethrow it later even if falsy value gets caught here\n caughtError = { err };\n }\n\n if (caughtError) {\n const { err } = caughtError;\n\n this._stopProcedure();\n this._error(err);\n this._parent?.send(error(this.id, err));\n return;\n }\n\n this.update(nextState);\n if (event.type === stopSignalType) {\n this._stopProcedure();\n this._complete();\n }\n }\n\n private _stop(): this {\n if (this.status === ActorStatus.Stopped) {\n return this;\n }\n this.mailbox.clear();\n if (this.status === ActorStatus.NotStarted) {\n this.status = ActorStatus.Stopped;\n return this;\n }\n this.mailbox.enqueue({ type: stopSignalType } as any);\n\n return this;\n }\n\n /**\n * Stops the Actor and unsubscribe all listeners.\n */\n public stop(): this {\n if (this._parent) {\n throw new Error('A non-root actor cannot be stopped directly.');\n }\n return this._stop();\n }\n private _complete(): void {\n for (const observer of this.observers) {\n try {\n observer.complete?.();\n } catch (err) {\n reportUnhandledError(err);\n }\n }\n this.observers.clear();\n }\n private _error(err: unknown): void {\n if (!this.observers.size) {\n if (!this._parent) {\n reportUnhandledError(err);\n }\n return;\n }\n let reportError = false;\n\n for (const observer of this.observers) {\n const errorListener = observer.error;\n reportError ||= !errorListener;\n try {\n errorListener?.(err);\n } catch (err2) {\n reportUnhandledError(err2);\n }\n }\n this.observers.clear();\n if (reportError) {\n reportUnhandledError(err);\n }\n }\n private _stopProcedure(): this {\n if (this.status !== ActorStatus.Running) {\n // Actor already stopped; do nothing\n return this;\n }\n\n // Cancel all delayed events\n for (const key of Object.keys(this.delayedEventsMap)) {\n this.clock.clearTimeout(this.delayedEventsMap[key]);\n }\n\n // TODO: mailbox.reset\n this.mailbox.clear();\n // TODO: after `stop` we must prepare ourselves for receiving events again\n // events sent *after* stop signal must be queued\n // it seems like this should be the common behavior for all of our consumers\n // so perhaps this should be unified somehow for all of them\n this.mailbox = new Mailbox(this._process.bind(this));\n\n this.status = ActorStatus.Stopped;\n this.system._unregister(this);\n\n return this;\n }\n\n /**\n * Sends an event to the running Actor to trigger a transition.\n *\n * @param event The event to send\n */\n public send(event: TEvent) {\n if (typeof event === 'string') {\n throw new Error(\n `Only event objects may be sent to actors; use .send({ type: \"${event}\" }) instead`\n );\n }\n\n if (this.status === ActorStatus.Stopped) {\n // do nothing\n if (isDevelopment) {\n const eventString = JSON.stringify(event);\n\n console.warn(\n `Event \"${event.type.toString()}\" was sent to stopped actor \"${\n this.id\n } (${\n this.sessionId\n })\". This actor has already reached its final state, and will not transition.\\nEvent: ${eventString}`\n );\n }\n return;\n }\n\n if (this.status !== ActorStatus.Running && !this.options.deferEvents) {\n throw new Error(\n `Event \"${event.type}\" was sent to uninitialized actor \"${\n this.id\n // tslint:disable-next-line:max-line-length\n }\". Make sure .start() is called for this actor, or set { deferEvents: true } in the actor options.\\nEvent: ${JSON.stringify(\n event\n )}`\n );\n }\n\n this.mailbox.enqueue(event);\n }\n\n // TODO: make private (and figure out a way to do this within the machine)\n public delaySend({\n event,\n id,\n delay,\n to\n }: {\n event: EventObject;\n id: string | undefined;\n delay: number;\n to?: AnyActorRef;\n }): void {\n const timerId = this.clock.setTimeout(() => {\n if (to) {\n to.send(event);\n } else {\n this.send(event as TEvent);\n }\n }, delay);\n\n // TODO: consider the rehydration story here\n if (id) {\n this.delayedEventsMap[id] = timerId;\n }\n }\n\n // TODO: make private (and figure out a way to do this within the machine)\n public cancel(sendId: string | number): void {\n this.clock.clearTimeout(this.delayedEventsMap[sendId]);\n delete this.delayedEventsMap[sendId];\n }\n\n private attachDevTools(): void {\n const { devTools } = this.options;\n if (devTools) {\n const resolvedDevToolsAdapter =\n typeof devTools === 'function' ? devTools : devToolsAdapter;\n\n resolvedDevToolsAdapter(this);\n }\n }\n public toJSON() {\n return {\n id: this.id\n };\n }\n\n public getPersistedState(): PersistedStateFrom<TLogic> | undefined {\n return this.logic.getPersistedState?.(this._state);\n }\n\n public [symbolObservable](): InteropSubscribable<SnapshotFrom<TLogic>> {\n return this;\n }\n\n public getSnapshot(): SnapshotFrom<TLogic> {\n return this.logic.getSnapshot\n ? this.logic.getSnapshot(this._state)\n : this._state;\n }\n}\n\n/**\n * Creates a new `ActorRef` instance for the given machine with the provided options, if any.\n *\n * @param machine The machine to create an actor from\n * @param options `ActorRef` options\n */\nexport function createActor<TMachine extends AnyStateMachine>(\n machine: AreAllImplementationsAssumedToBeProvided<\n TMachine['__TResolvedTypesMeta']\n > extends true\n ? TMachine\n : MissingImplementationsError<TMachine['__TResolvedTypesMeta']>,\n options?: ActorOptions<TMachine>\n): Actor<TMachine>;\nexport function createActor<TLogic extends AnyActorLogic>(\n logic: TLogic,\n options?: ActorOptions<TLogic>\n): Actor<TLogic>;\nexport function createActor(logic: any, options?: ActorOptions<any>): any {\n const interpreter = new Actor(logic, options);\n\n return interpreter;\n}\n\n/**\n * Creates a new Interpreter instance for the given machine with the provided options, if any.\n *\n * @deprecated Use `createActor` instead\n */\nexport const interpret = createActor;\n\n/**\n * @deprecated Use `Actor` instead.\n */\nexport type Interpreter = typeof Actor;\n","import { ActorSystem, ActorSystemInfo, AnyActorRef } from './types.js';\n\nexport function createSystem<T extends ActorSystemInfo>(): ActorSystem<T> {\n let sessionIdCounter = 0;\n const children = new Map<string, AnyActorRef>();\n const keyedActors = new Map<keyof T['actors'], AnyActorRef | undefined>();\n const reverseKeyedActors = new WeakMap<AnyActorRef, keyof T['actors']>();\n\n const system: ActorSystem<T> = {\n _bookId: () => `x:${sessionIdCounter++}`,\n _register: (sessionId, actorRef) => {\n children.set(sessionId, actorRef);\n return sessionId;\n },\n _unregister: (actorRef) => {\n children.delete(actorRef.sessionId);\n const systemId = reverseKeyedActors.get(actorRef);\n\n if (systemId !== undefined) {\n keyedActors.delete(systemId);\n reverseKeyedActors.delete(actorRef);\n }\n },\n get: (systemId) => {\n return keyedActors.get(systemId) as T['actors'][any];\n },\n _set: (systemId, actorRef) => {\n const existing = keyedActors.get(systemId);\n if (existing && existing !== actorRef) {\n throw new Error(\n `Actor with system ID '${systemId as string}' already exists.`\n );\n }\n\n keyedActors.set(systemId, actorRef);\n reverseKeyedActors.set(actorRef, systemId);\n }\n };\n\n return system;\n}\n","import isDevelopment from '#is-development';\nimport { AnyActorLogic, AnyState } from './index.ts';\nimport { errorExecution, errorPlatform } from './constantPrefixes.ts';\nimport { STATE_DELIMITER, TARGETLESS_KEY } from './constants.ts';\nimport type { StateNode } from './StateNode.ts';\nimport type {\n ActorLogic,\n AnyEventObject,\n EventObject,\n EventType,\n InvokeConfig,\n MachineContext,\n Mapper,\n Observer,\n PropertyMapper,\n ErrorEvent,\n SingleOrArray,\n StateLike,\n StateValue,\n Subscribable,\n TransitionConfig,\n TransitionConfigTarget,\n TODO,\n AnyActorRef\n} from './types.ts';\n\nexport function keys<T extends object>(value: T): Array<keyof T & string> {\n return Object.keys(value) as Array<keyof T & string>;\n}\n\nexport function matchesState(\n parentStateId: StateValue,\n childStateId: StateValue\n): boolean {\n const parentStateValue = toStateValue(parentStateId);\n const childStateValue = toStateValue(childStateId);\n\n if (typeof childStateValue === 'string') {\n if (typeof parentStateValue === 'string') {\n return childStateValue === parentStateValue;\n }\n\n // Parent more specific than child\n return false;\n }\n\n if (typeof parentStateValue === 'string') {\n return parentStateValue in childStateValue;\n }\n\n return Object.keys(parentStateValue).every((key) => {\n if (!(key in childStateValue)) {\n return false;\n }\n\n return matchesState(parentStateValue[key], childStateValue[key]);\n });\n}\n\nexport function toStatePath(stateId: string | string[]): string[] {\n try {\n if (isArray(stateId)) {\n return stateId;\n }\n\n return stateId.toString().split(STATE_DELIMITER);\n } catch (e) {\n throw new Error(`'${stateId}' is not a valid state path.`);\n }\n}\n\nexport function isStateLike(state: any): state is AnyState {\n return (\n typeof state === 'object' &&\n 'value' in state &&\n 'context' in state &&\n 'event' in state\n );\n}\n\nexport function toStateValue(\n stateValue: StateLike<any> | StateValue | string[]\n): StateValue {\n if (isStateLike(stateValue)) {\n return stateValue.value;\n }\n\n if (isArray(stateValue)) {\n return pathToStateValue(stateValue);\n }\n\n if (typeof stateValue !== 'string') {\n return stateValue as StateValue;\n }\n\n const statePath = toStatePath(stateValue as string);\n\n return pathToStateValue(statePath);\n}\n\nexport function pathToStateValue(statePath: string[]): StateValue {\n if (statePath.length === 1) {\n return statePath[0];\n }\n\n const value: StateValue = {};\n let marker = value;\n\n for (let i = 0; i < statePath.length - 1; i++) {\n if (i === statePath.length - 2) {\n marker[statePath[i]] = statePath[i + 1];\n } else {\n const previous = marker;\n marker = {};\n previous[statePath[i]] = marker;\n }\n }\n\n return value;\n}\n\nexport function mapValues<P, O extends Record<string, unknown>>(\n collection: O,\n iteratee: (item: O[keyof O], key: keyof O, collection: O, i: number) => P\n): { [key in keyof O]: P };\nexport function mapValues(\n collection: Record<string, unknown>,\n iteratee: (\n item: unknown,\n key: string,\n collection: Record<string, unknown>,\n i: number\n ) => unknown\n) {\n const result: Record<string, unknown> = {};\n\n const collectionKeys = Object.keys(collection);\n for (let i = 0; i < collectionKeys.length; i++) {\n const key = collectionKeys[i];\n result[key] = iteratee(collection[key], key, collection, i);\n }\n\n return result;\n}\n\nexport function mapFilterValues<T, P>(\n collection: { [key: string]: T },\n iteratee: (item: T, key: string, collection: { [key: string]: T }) => P,\n predicate: (item: T) => boolean\n): { [key: string]: P } {\n const result: { [key: string]: P } = {};\n\n for (const key of Object.keys(collection)) {\n const item = collection[key];\n\n if (!predicate(item)) {\n continue;\n }\n\n result[key] = iteratee(item, key, collection);\n }\n\n return result;\n}\n\n/**\n * Retrieves a value at the given path.\n * @param props The deep path to the prop of the desired value\n */\nexport function path<T extends Record<string, any>>(props: string[]): any {\n return (object: T): any => {\n let result: T = object;\n\n for (const prop of props) {\n result = result[prop as keyof typeof result];\n }\n\n return result;\n };\n}\n\nexport function toStatePaths(stateValue: StateValue | undefined): string[][] {\n if (!stateValue) {\n return [[]];\n }\n\n if (typeof stateValue === 'string') {\n return [[stateValue]];\n }\n\n const result = flatten(\n Object.keys(stateValue).map((key) => {\n const subStateValue = stateValue[key];\n\n if (\n typeof subStateValue !== 'string' &&\n (!subStateValue || !Object.keys(subStateValue).length)\n ) {\n return [[key]];\n }\n\n return toStatePaths(stateValue[key]).map((subPath) => {\n return [key].concat(subPath);\n });\n })\n );\n\n return result;\n}\n\nexport function flatten<T>(array: Array<T | T[]>): T[] {\n return ([] as T[]).concat(...array);\n}\n\nexport function toArrayStrict<T>(value: T[] | T): T[] {\n if (isArray(value)) {\n return value;\n }\n return [value];\n}\n\nexport function toArray<T>(value: T[] | T | undefined): T[] {\n if (value === undefined) {\n return [];\n }\n return toArrayStrict(value);\n}\n\nexport function mapContext<\n TContext extends MachineContext,\n TEvent extends EventObject\n>(\n mapper: Mapper<TContext, TEvent, any>,\n context: TContext,\n event: TEvent,\n self: AnyActorRef\n): any {\n if (typeof mapper === 'function') {\n return mapper({ context, event, self });\n }\n\n if (\n isDevelopment &&\n typeof mapper === 'object' &&\n Object.values(mapper).some((val) => typeof val === 'function')\n ) {\n console.warn(\n `Dynamically mapping values to individual properties is deprecated. Use a single function that returns the mapped object instead.\\nFound object containing properties whose values are possibly mapping functions: ${Object.entries(\n mapper\n )\n .filter(([key, value]) => typeof value === 'function')\n .map(\n ([key, value]) =>\n `\\n - ${key}: ${(value as () => any)\n .toString()\n .replace(/\\n\\s*/g, '')}`\n )\n .join('')}`\n );\n }\n\n return mapper;\n}\n\nexport function isBuiltInEvent(eventType: EventType): boolean {\n return /^(done|error)\\./.test(eventType);\n}\n\nexport function isPromiseLike(value: any): value is PromiseLike<any> {\n if (value instanceof Promise) {\n return true;\n }\n // Check if shape matches the Promise/A+ specification for a \"thenable\".\n if (\n value !== null &&\n (typeof value === 'function' || typeof value === 'object') &&\n typeof value.then === 'function'\n ) {\n return true;\n }\n return false;\n}\n\nexport function isActorLogic(value: any): value is ActorLogic<any, any> {\n return (\n value !== null &&\n typeof value === 'object' &&\n 'transition' in value &&\n typeof value.transition === 'function'\n );\n}\n\nexport function partition<T, A extends T, B extends T>(\n items: T[],\n predicate: (item: T) => item is A\n): [A[], B[]] {\n const [truthy, falsy] = [[], []] as [A[], B[]];\n\n for (const item of items) {\n if (predicate(item)) {\n truthy.push(item);\n } else {\n falsy.push(item as B);\n }\n }\n\n return [truthy, falsy];\n}\n\nexport function isArray(value: any): value is any[] {\n return Array.isArray(value);\n}\n\nexport function isObservable<T>(value: any): value is Subscribable<T> {\n return (\n !!value && 'subscribe' in value && typeof value.subscribe === 'function'\n );\n}\n\nexport const uniqueId = (() => {\n let currentId = 0;\n\n return () => {\n currentId++;\n return currentId.toString(16);\n };\n})();\n\nexport function isErrorEvent(event: AnyEventObject): event is ErrorEvent<any> {\n return (\n typeof event.type === 'string' &&\n (event.type === errorExecution || event.type.startsWith(errorPlatform))\n );\n}\n\nexport function toTransitionConfigArray<\n TContext extends MachineContext,\n TEvent extends EventObject\n>(\n configLike: SingleOrArray<\n TransitionConfig<TContext, TEvent> | TransitionConfigTarget\n >\n): Array<TransitionConfig<TContext, TEvent>> {\n return toArrayStrict(configLike).map((transitionLike) => {\n if (\n typeof transitionLike === 'undefined' ||\n typeof transitionLike === 'string'\n ) {\n return { target: transitionLike };\n }\n\n return transitionLike;\n });\n}\n\nexport function normalizeTarget<\n TContext extends MachineContext,\n TEvent extends EventObject\n>(\n target: SingleOrArray<string | StateNode<TContext, TEvent>> | undefined\n): Array<string | StateNode<TContext, TEvent>> | undefined {\n if (target === undefined || target === TARGETLESS_KEY) {\n return undefined;\n }\n return toArray(target);\n}\n\nexport function reportUnhandledExceptionOnInvocation(\n originalError: any,\n currentError: any,\n id: string\n) {\n if (isDevelopment) {\n const originalStackTrace = originalError.stack\n ? ` Stacktrace was '${originalError.stack}'`\n : '';\n if (originalError === currentError) {\n // tslint:disable-next-line:no-console\n console.error(\n `Missing onError handler for invocation '${id}', error was '${originalError}'.${originalStackTrace}`\n );\n } else {\n const stackTrace = currentError.stack\n ? ` Stacktrace was '${currentError.stack}'`\n : '';\n // tslint:disable-next-line:no-console\n console.error(\n `Missing onError handler and/or unhandled exception/promise rejection for invocation '${id}'. ` +\n `Original error: '${originalError}'. ${originalStackTrace} Current error is '${currentError}'.${stackTrace}`\n );\n }\n }\n}\n\nexport function toInvokeConfig<\n TContext extends MachineContext,\n TEvent extends EventObject\n>(\n invocable: InvokeConfig<TContext, TEvent, TODO> | string | AnyActorLogic,\n id: string\n): InvokeConfig<TContext, TEvent, TODO> {\n if (typeof invocable === 'object') {\n if ('src' in invocable) {\n return invocable;\n }\n\n if ('transition' in invocable) {\n return {\n id,\n src: invocable\n };\n }\n }\n\n return {\n id,\n src: invocable\n };\n}\n\nexport function toObserver<T>(\n nextHandler?: Observer<T> | ((value: T) => void),\n errorHandler?: (error: any) => void,\n completionHandler?: () => void\n): Observer<T> {\n const isObserver = typeof nextHandler === 'object';\n const self = isObserver ? nextHandler : undefined;\n\n return {\n next: (isObserver ? nextHandler.next : nextHandler)?.bind(self),\n error: (isObserver ? nextHandler.error : errorHandler)?.bind(self),\n complete: (isObserver ? nextHandler.complete : completionHandler)?.bind(\n self\n )\n };\n}\n\nexport function createInvokeId(stateNodeId: string, index: number): string {\n return `${stateNodeId}:invocation[${index}]`;\n}\n\nexport function resolveReferencedActor(\n referenced:\n | AnyActorLogic\n | { src: AnyActorLogic; input: Mapper<any, any, any> | any }\n | undefined\n) {\n return referenced\n ? 'transition' in referenced\n ? { src: referenced, input: undefined }\n : referenced\n : undefined;\n}\n","import {\n ActorLogic,\n ActorContext,\n ActorSystem,\n EventObject,\n ActorRefFrom,\n AnyActorSystem\n} from '../types';\n\nexport type TransitionActorLogic<\n TState,\n TEvent extends EventObject,\n TInput\n> = ActorLogic<TEvent, TState, TState, TState, AnyActorSystem, TInput>;\n\nexport type TransitionActorRef<\n TState,\n TEvent extends EventObject\n> = ActorRefFrom<TransitionActorLogic<TState, TEvent, unknown>>;\n\n/**\n * Returns actor logic from a transition function and its initial state.\n *\n * A transition function is a function that takes the current state and an event and returns the next state.\n *\n * @param transition The transition function that returns the next state given the current state and event.\n * @param initialState The initial state of the transition function.\n * @returns Actor logic\n */\nexport function fromTransition<\n TState,\n TEvent extends EventObject,\n TSystem extends ActorSystem<any>,\n TInput\n>(\n transition: (\n state: TState,\n event: TEvent,\n actorContext: ActorContext<TEvent, TState, TSystem>\n ) => TState,\n initialState:\n | TState\n | (({\n input,\n self\n }: {\n input: TInput;\n self: TransitionActorRef<TState, TEvent>;\n }) => TState) // TODO: type\n): TransitionActorLogic<TState, TEvent, TInput> {\n return {\n config: transition,\n transition: (state, event, actorContext) => {\n return transition(state, event as TEvent, actorContext as any);\n },\n getInitialState: (_, input) => {\n return typeof initialState === 'function'\n ? (initialState as any)({ input })\n : initialState;\n },\n getSnapshot: (state) => state,\n getPersistedState: (state) => state,\n restoreState: (state) => state\n };\n}\n","import {\n ActorLogic,\n ActorRefFrom,\n ActorSystem,\n AnyActorSystem\n} from '../types';\nimport { stopSignalType } from '../actors';\n\nexport interface PromiseInternalState<T, TInput = unknown> {\n status: 'active' | 'error' | 'done' | 'canceled';\n data: T | undefined;\n input: TInput | undefined;\n}\n\nconst resolveEventType = '$$xstate.resolve';\nconst rejectEventType = '$$xstate.reject';\n\nexport type PromiseActorEvents<T> =\n | {\n type: typeof resolveEventType;\n data: T;\n }\n | {\n type: typeof rejectEventType;\n data: any;\n }\n | {\n type: 'xstate.stop';\n };\n\nexport type PromiseActorLogic<T, TInput = unknown> = ActorLogic<\n { type: string; [k: string]: unknown },\n T | undefined,\n PromiseInternalState<T, TInput>, // internal state\n PromiseInternalState<T, TInput>, // persisted state\n ActorSystem<any>,\n TInput, // input\n T // output\n>;\n\nexport type PromiseActorRef<T> = ActorRefFrom<PromiseActorLogic<T>>;\n\nexport function fromPromise<T, TInput>(\n // TODO: add types\n promiseCreator: ({\n input,\n system\n }: {\n input: TInput;\n system: AnyActorSystem;\n self: PromiseActorRef<T>;\n }) => PromiseLike<T>\n): PromiseActorLogic<T, TInput> {\n // TODO: add event types\n const logic: PromiseActorLogic<T, TInput> = {\n config: promiseCreator,\n transition: (state, event) => {\n if (state.status !== 'active') {\n return state;\n }\n\n switch (event.type) {\n case resolveEventType:\n return {\n ...state,\n status: 'done',\n data: (event as any).data,\n input: undefined\n };\n case rejectEventType:\n return {\n ...state,\n status: 'error',\n data: (event as any).data, // TODO: if we keep this as `data` we should reflect this in the type\n input: undefined\n };\n case stopSignalType:\n return {\n ...state,\n status: 'canceled',\n input: undefined\n };\n default:\n return state;\n }\n },\n start: (state, { self, system }) => {\n // TODO: determine how to allow customizing this so that promises\n // can be restarted if necessary\n if (state.status !== 'active') {\n return;\n }\n\n const resolvedPromise = Promise.resolve(\n promiseCreator({ input: state.input!, system, self })\n );\n\n resolvedPromise.then(\n (response) => {\n // TODO: remove this condition once dead letter queue lands\n if ((self as any)._state.status !== 'active') {\n return;\n }\n self.send({ type: resolveEventType, data: response });\n },\n (errorData) => {\n // TODO: remove this condition once dead letter queue lands\n if ((self as any)._state.status !== 'active') {\n return;\n }\n self.send({ type: rejectEventType, data: errorData });\n }\n );\n },\n getInitialState: (_, input) => {\n return {\n status: 'active',\n data: undefined,\n input\n };\n },\n getSnapshot: (state) => state.data,\n getStatus: (state) => state,\n getPersistedState: (state) => state,\n restoreState: (state) => state\n };\n\n return logic;\n}\n","import { ActorStatus, createActor } from '../interpreter.ts';\nimport { symbolObservable } from '../symbolObservable.ts';\nimport type {\n ActorRef,\n AnyEventObject,\n BaseActorRef,\n EventObject\n} from '../types.ts';\nimport { fromTransition } from './transition.ts';\nexport { fromCallback, type CallbackActorLogic } from './callback.ts';\nexport { fromEventObservable, fromObservable } from './observable.ts';\nexport { fromPromise, type PromiseActorLogic } from './promise.ts';\nexport { fromTransition } from './transition.ts';\n\nexport const startSignalType = 'xstate.init';\nexport const stopSignalType = 'xstate.stop';\nexport const startSignal: StartSignal = { type: 'xstate.init' };\nexport const stopSignal: StopSignal = { type: 'xstate.stop' };\n\nexport interface StartSignal {\n type: 'xstate.init';\n}\n\nexport interface StopSignal {\n type: 'xstate.stop';\n}\n\nexport type LifecycleSignal = StartSignal | StopSignal;\nexport type LifecycleSignalType =\n | typeof startSignalType\n | typeof stopSignalType;\n\n/**\n * An object that expresses the actor logic in reaction to received events,\n * as well as an optionally emitted stream of values.\n *\n * @template TReceived The received event\n * @template TSnapshot The emitted value\n */\n\nexport function isSignal(event: EventObject): event is LifecycleSignal {\n return event.type === startSignalType || event.type === stopSignalType;\n}\n\nexport function isActorRef(item: any): item is ActorRef<any> {\n return !!item && typeof item === 'object' && typeof item.send === 'function';\n}\n\n// TODO: refactor the return type, this could be written in a better way\n// but it's best to avoid unneccessary breaking changes now\n// @deprecated use `interpret(actorLogic)` instead\nexport function toActorRef<\n TEvent extends EventObject,\n TSnapshot = any,\n TActorRefLike extends BaseActorRef<TEvent> = BaseActorRef<TEvent>\n>(\n actorRefLike: TActorRefLike\n): ActorRef<TEvent, TSnapshot> & Omit<TActorRefLike, keyof ActorRef<any, any>> {\n return {\n subscribe: () => ({ unsubscribe: () => void 0 }),\n id: 'anonymous',\n sessionId: '',\n getSnapshot: () => undefined as TSnapshot, // TODO: this isn't safe\n [symbolObservable]: function () {\n return this;\n },\n status: ActorStatus.Running,\n stop: () => void 0,\n ...actorRefLike\n };\n}\n\nconst emptyLogic = fromTransition((_) => undefined, undefined);\n\nexport function createEmptyActor(): ActorRef<AnyEventObject, undefined> {\n return createActor(emptyLogic);\n}\n","import {\n ActorLogic,\n EventObject,\n AnyActorSystem,\n AnyEventObject,\n ActorSystem,\n ActorRefFrom,\n TODO\n} from '../types';\nimport { isPromiseLike } from '../utils';\nimport { doneInvoke, error } from '../actions.ts';\nimport { startSignalType, stopSignalType, isSignal } from '../actors/index.ts';\n\nexport interface CallbackInternalState<\n TEvent extends EventObject,\n TInput = unknown\n> {\n canceled: boolean;\n receivers: Set<(e: TEvent) => void>;\n dispose: void | (() => void) | Promise<any>;\n input: TInput;\n}\n\nexport type CallbackActorLogic<\n TEvent extends EventObject,\n TInput = unknown\n> = ActorLogic<\n TEvent,\n undefined,\n CallbackInternalState<TEvent, TInput>,\n Pick<CallbackInternalState<TEvent, TInput>, 'input' | 'canceled'>,\n ActorSystem<any>,\n TInput,\n any\n>;\n\nexport type CallbackActorRef<\n TEvent extends EventObject,\n TInput = unknown\n> = ActorRefFrom<CallbackActorLogic<TEvent, TInput>>;\n\nexport type Receiver<TEvent extends EventObject> = (\n listener: {\n bivarianceHack(event: TEvent): void;\n }['bivarianceHack']\n) => void;\n\nexport type InvokeCallback<\n TEvent extends EventObject = AnyEventObject,\n TSentEvent extends EventObject = AnyEventObject,\n TInput = unknown\n> = ({\n input,\n system,\n self,\n sendBack,\n receive\n}: {\n input: TInput;\n system: AnyActorSystem;\n self: CallbackActorRef<TEvent>;\n sendBack: (event: TSentEvent) => void;\n receive: Receiver<TEvent>;\n}) => (() => void) | Promise<any> | void;\n\nexport function fromCallback<TEvent extends EventObject, TInput>(\n invokeCallback: InvokeCallback<TEvent, AnyEventObject, TInput>\n): CallbackActorLogic<TEvent, TInput> {\n return {\n config: invokeCallback,\n start: (_state, { self }) => {\n self.send({ type: startSignalType } as TEvent);\n },\n transition: (state, event, { self, id, system }) => {\n if (event.type === startSignalType) {\n const sendBack = (eventForParent: AnyEventObject) => {\n if (state.canceled) {\n return;\n }\n\n self._parent?.send(eventForParent);\n };\n\n const receive: Receiver<TEvent> = (newListener) => {\n state.receivers.add(newListener);\n };\n\n state.dispose = invokeCallback({\n input: state.input,\n system,\n self: self as TODO,\n sendBack,\n receive\n });\n\n if (isPromiseLike(state.dispose)) {\n state.dispose.then(\n (resolved) => {\n self._parent?.send(doneInvoke(id, resolved));\n state.canceled = true;\n },\n (errorData) => {\n state.canceled = true;\n self._parent?.send(error(id, errorData));\n }\n );\n }\n return state;\n }\n\n if (event.type === stopSignalType) {\n state.canceled = true;\n\n if (typeof state.dispose === 'function') {\n state.dispose();\n }\n return state;\n }\n\n if (isSignal(event)) {\n // TODO: unrecognized signal\n return state;\n }\n\n state.receivers.forEach((receiver) => receiver(event));\n\n return state;\n },\n getInitialState: (_, input) => {\n return {\n canceled: false,\n receivers: new Set(),\n dispose: undefined,\n input\n };\n },\n getSnapshot: () => undefined,\n getPersistedState: ({ input, canceled }) => ({ input, canceled })\n };\n}\n","import {\n Subscribable,\n ActorLogic,\n EventObject,\n Subscription,\n AnyActorSystem,\n ActorRefFrom\n} from '../types';\nimport { stopSignalType } from '../actors';\n\nexport interface ObservableInternalState<T, TInput = unknown> {\n subscription: Subscription | undefined;\n status: 'active' | 'done' | 'error' | 'canceled';\n data: T | undefined;\n input: TInput | undefined;\n}\n\nexport type ObservablePersistedState<T, TInput = unknown> = Omit<\n ObservableInternalState<T, TInput>,\n 'subscription'\n>;\n\nexport type ObservableActorLogic<T, TInput> = ActorLogic<\n { type: string; [k: string]: unknown },\n T | undefined,\n ObservableInternalState<T, TInput>,\n ObservablePersistedState<T, TInput>,\n AnyActorSystem,\n TInput\n>;\n\nexport type ObservableActorRef<T> = ActorRefFrom<ObservableActorLogic<T, any>>;\n\nexport function fromObservable<T, TInput>(\n observableCreator: ({\n input,\n system\n }: {\n input: TInput;\n system: AnyActorSystem;\n self: ObservableActorRef<T>;\n }) => Subscribable<T>\n): ObservableActorLogic<T, TInput> {\n const nextEventType = '$$xstate.next';\n const errorEventType = '$$xstate.error';\n const completeEventType = '$$xstate.complete';\n\n return {\n config: observableCreator,\n transition: (state, event, { self, id, defer }) => {\n if (state.status !== 'active') {\n return state;\n }\n\n switch (event.type) {\n case nextEventType:\n // match the exact timing of events sent by machines\n // send actions are not executed immediately\n defer(() => {\n self._parent?.send({\n type: `xstate.snapshot.${id}`,\n data: event.data\n });\n });\n return {\n ...state,\n data: (event as any).data\n };\n case errorEventType:\n return {\n ...state,\n status: 'error',\n input: undefined,\n data: (event as any).data, // TODO: if we keep this as `data` we should reflect this in the type\n subscription: undefined\n };\n case completeEventType:\n return {\n ...state,\n status: 'done',\n input: undefined,\n subscription: undefined\n };\n case stopSignalType:\n state.subscription!.unsubscribe();\n return {\n ...state,\n status: 'canceled',\n input: undefined,\n subscription: undefined\n };\n default:\n return state;\n }\n },\n getInitialState: (_, input) => {\n return {\n subscription: undefined,\n status: 'active',\n data: undefined,\n input\n };\n },\n start: (state, { self, system }) => {\n if (state.status === 'done') {\n // Do not restart a completed observable\n return;\n }\n state.subscription = observableCreator({\n input: state.input!,\n system,\n self\n }).subscribe({\n next: (value) => {\n self.send({ type: nextEventType, data: value });\n },\n error: (err) => {\n self.send({ type: errorEventType, data: err });\n },\n complete: () => {\n self.send({ type: completeEventType });\n }\n });\n },\n getSnapshot: (state) => state.data,\n getPersistedState: ({ status, data, input }) => ({\n status,\n data,\n input\n }),\n getStatus: (state) => state,\n restoreState: (state) => ({\n ...state,\n subscription: undefined\n })\n };\n}\n\n/**\n * Creates event observable logic that listens to an observable\n * that delivers event objects.\n *\n *\n * @param lazyObservable A function that creates an observable\n * @returns Event observable logic\n */\n\nexport function fromEventObservable<T extends EventObject, TInput>(\n lazyObservable: ({\n input,\n system\n }: {\n input: TInput;\n system: AnyActorSystem;\n self: ObservableActorRef<T>;\n }) => Subscribable<T>\n): ObservableActorLogic<T, TInput> {\n const errorEventType = '$$xstate.error';\n const completeEventType = '$$xstate.complete';\n\n // TODO: event types\n return {\n config: lazyObservable,\n transition: (state, event) => {\n if (state.status !== 'active') {\n return state;\n }\n\n switch (event.type) {\n case errorEventType:\n return {\n ...state,\n status: 'error',\n input: undefined,\n data: (event as any).data, // TODO: if we keep this as `data` we should reflect this in the type\n subscription: undefined\n };\n case completeEventType:\n return {\n ...state,\n status: 'done',\n input: undefined,\n subscription: undefined\n };\n case stopSignalType:\n state.subscription!.unsubscribe();\n return {\n ...state,\n status: 'canceled',\n input: undefined,\n subscription: undefined\n };\n default:\n return state;\n }\n },\n getInitialState: (_, input) => {\n return {\n subscription: undefined,\n status: 'active',\n data: undefined,\n input\n };\n },\n start: (state, { self, system }) => {\n if (state.status === 'done') {\n // Do not restart a completed observable\n return;\n }\n\n state.subscription = lazyObservable({\n input: state.input!,\n system,\n self\n }).subscribe({\n next: (value) => {\n self._parent?.send(value);\n },\n error: (err) => {\n self.send({ type: errorEventType, data: err });\n },\n complete: () => {\n self.send({ type: completeEventType });\n }\n });\n },\n getSnapshot: (_) => undefined,\n getPersistedState: ({ status, data, input }) => ({\n status,\n data,\n input\n }),\n getStatus: (state) => state,\n restoreState: (state) => ({\n ...state,\n subscription: undefined\n })\n };\n}\n"],"names":["Mailbox","constructor","_process","this","_active","_current","_last","start","flush","clear","next","prepend","event","value","enqueue","enqueued","consumed","ConstantPrefix","doneInvoke","invokeId","output","type","DoneInvoke","eventObject","error","id","data","ErrorPlatform","getDevTools","w","globalThis","self","window","__xstate__","devToolsAdapter","service","devTools","register","reportUnhandledError","err","setTimeout","symbolObservable","Symbol","observable","ActorStatus","defaultOptions","deferEvents","clock","fn","ms","clearTimeout","logger","console","log","bind","Actor","logic","options","_state","mailbox","delayedEventsMap","observers","Set","status","NotStarted","_parent","ref","_actorContext","_systemId","sessionId","system","_doneEvent","src","_deferred","resolvedOptions","parent","systemId","sessionIdCounter","children","Map","keyedActors","reverseKeyedActors","WeakMap","_bookId","_register","actorRef","set","_unregister","delete","get","undefined","_set","existing","Error","createSystem","defer","push","stopChild","child","_stop","send","_initState","state","restoreState","getInitialState","input","update","snapshot","getSnapshot","deferredFn","shift","observer","getStatus","_stopProcedure","_complete","_error","subscribe","nextListenerOrObserver","errorListener","completeListener","nextHandler","errorHandler","completionHandler","isObserver","complete","toObserver","Stopped","add","unsubscribe","Running","attachDevTools","nextState","caughtError","transition","stopSignalType","stop","size","reportError","err2","key","Object","keys","JSON","stringify","delaySend","delay","to","timerId","cancel","sendId","toJSON","getPersistedState","fromTransition","initialState","config","actorContext","_","resolveEventType","rejectEventType","startSignalType","isSignal","emptyLogic","invokeCallback","sendBack","eventForParent","canceled","receive","newListener","receivers","dispose","Promise","then","resolved","errorData","forEach","receiver","lazyObservable","errorEventType","completeEventType","subscription","observableCreator","nextEventType","promiseCreator","resolve","response","item","actorRefLike"],"mappings":"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"}
1
+ {"version":3,"file":"xstate-actors.umd.min.js","sources":["../../src/Mailbox.ts","../../src/types.ts","../../src/actions.ts","../../src/dev/index.ts","../../src/reportUnhandledError.ts","../../src/symbolObservable.ts","../../src/interpreter.ts","../../src/system.ts","../../src/utils.ts","../../src/actors/transition.ts","../../src/actors/promise.ts","../../src/actors/index.ts","../../src/actors/callback.ts","../../src/actors/observable.ts"],"sourcesContent":["interface MailboxItem<T> {\n value: T;\n next: MailboxItem<T> | null;\n}\n\nexport class Mailbox<T> {\n private _active: boolean = false;\n private _current: MailboxItem<T> | null = null;\n private _last: MailboxItem<T> | null = null;\n\n constructor(private _process: (ev: T) => void) {}\n\n public start() {\n this._active = true;\n this.flush();\n }\n\n public clear(): void {\n // we can't set _current to null because we might be currently processing\n // and enqueue following clear shouldnt start processing the enqueued item immediately\n if (this._current) {\n this._current.next = null;\n this._last = this._current;\n }\n }\n\n // TODO: rethink this design\n public prepend(event: T): void {\n if (!this._current) {\n this.enqueue(event);\n return;\n }\n\n // we know that something is already queued up\n // so the mailbox is already flushing or it's inactive\n // therefore the only thing that we need to do is to reassign `this._current`\n this._current = {\n value: event,\n next: this._current\n };\n }\n\n public enqueue(event: T): void {\n const enqueued = {\n value: event,\n next: null\n };\n\n if (this._current) {\n this._last!.next = enqueued;\n this._last = enqueued;\n return;\n }\n\n this._current = enqueued;\n this._last = enqueued;\n\n if (this._active) {\n this.flush();\n }\n }\n\n private flush() {\n while (this._current) {\n // atm the given _process is responsible for implementing proper try/catch handling\n // we assume here that this won't throw in a way that can affect this mailbox\n const consumed = this._current;\n this._process(consumed.value);\n // something could have been prepended in the meantime\n // so we need to be defensive here to avoid skipping over a prepended item\n if (consumed === this._current) {\n this._current = this._current.next;\n }\n }\n this._last = null;\n }\n}\n","import type { StateNode } from './StateNode.ts';\nimport type { State } from './State.ts';\nimport type { ActorStatus, Clock, Actor } from './interpreter.ts';\nimport type { StateMachine } from './StateMachine.ts';\nimport {\n TypegenDisabled,\n ResolveTypegenMeta,\n TypegenConstraint,\n MarkAllImplementationsAsProvided,\n AreAllImplementationsAssumedToBeProvided\n} from './typegenTypes.ts';\nimport { PromiseActorLogic } from './actors/promise.ts';\nimport { Guard, GuardPredicate, UnknownGuard } from './guards.ts';\n\n/**\n * `T | unknown` reduces to `unknown` and that can be problematic when it comes to contextual typing.\n * It especially is a problem when the union has a function member, like here:\n *\n * ```ts\n * declare function test(cbOrVal: ((arg: number) => unknown) | unknown): void;\n * test((arg) => {}) // oops, implicit any\n * ```\n *\n * This type can be used to avoid this problem. This union represents the same value space as `unknown`.\n */\nexport type NonReducibleUnknown = {} | null | undefined;\nexport type AnyFunction = (...args: any[]) => any;\n\ntype ReturnTypeOrValue<T> = T extends AnyFunction ? ReturnType<T> : T;\n\n// https://github.com/microsoft/TypeScript/issues/23182#issuecomment-379091887\nexport type IsNever<T> = [T] extends [never] ? true : false;\n\nexport type Compute<A extends any> = { [K in keyof A]: A[K] } & unknown;\nexport type Prop<T, K> = K extends keyof T ? T[K] : never;\nexport type Values<T> = T[keyof T];\nexport type Merge<M, N> = Omit<M, keyof N> & N;\nexport type IndexByProp<T extends Record<P, string>, P extends keyof T> = {\n [E in T as E[P]]: E;\n};\n\nexport type IndexByType<T extends { type: string }> = IndexByProp<T, 'type'>;\n\nexport type Equals<A1 extends any, A2 extends any> = (<A>() => A extends A2\n ? true\n : false) extends <A>() => A extends A1 ? true : false\n ? true\n : false;\nexport type IsAny<T> = Equals<T, any>;\nexport type Cast<A, B> = A extends B ? A : B;\nexport type NoInfer<T> = [T][T extends any ? 0 : any];\nexport type LowInfer<T> = T & {};\n\nexport type MetaObject = Record<string, any>;\n\nexport type Lazy<T> = () => T;\nexport type MaybeLazy<T> = T | Lazy<T>;\n\n/**\n * The full definition of an event, with a string `type`.\n */\nexport interface EventObject {\n /**\n * The type of event that is sent.\n */\n type: string;\n}\n\nexport interface AnyEventObject extends EventObject {\n [key: string]: any;\n}\n\nexport interface ParameterizedObject {\n type: string;\n params?: Record<string, unknown>;\n}\n\nexport interface UnifiedArg<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject\n> {\n context: TContext;\n event: TExpressionEvent;\n self: ActorRef<TExpressionEvent>; // TODO: this should refer to `TEvent`\n system: ActorSystem<any>;\n}\n\nexport type MachineContext = Record<string, any>;\n\nexport interface ActionArgs<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TAction extends ParameterizedObject | undefined\n> extends UnifiedArg<TContext, TEvent> {\n action: TAction;\n}\n\nexport type InputFrom<T extends AnyActorLogic> = T extends StateMachine<\n infer _TContext,\n infer _TEvent,\n infer _TActor,\n infer _TAction,\n infer _TGuard,\n infer TInput,\n infer _TOutput,\n infer _TResolvedTypesMeta\n>\n ? TInput\n : T extends ActorLogic<\n infer _TEvent,\n infer _TSnapshot,\n infer _TInternalState,\n infer _TPersisted,\n infer _TSystem,\n infer TInput\n >\n ? TInput\n : never;\n\nexport type OutputFrom<T extends AnyActorLogic> = T extends ActorLogic<\n infer _TEvent,\n infer _TSnapshot,\n infer _TInternalState,\n infer _TPersisted,\n infer _TSystem,\n infer _TInput,\n infer TOutput\n>\n ? TOutput\n : never;\n\n// TODO: do not accept machines without all implementations\n// we should also accept a raw machine as actor logic here\n// or just make machine actor logic\nexport type Spawner = <T extends AnyActorLogic | string>( // TODO: read string from machine logic keys\n logic: T,\n options?: Partial<{\n id: string;\n systemId?: string;\n input: T extends AnyActorLogic ? InputFrom<T> : any;\n }>\n) => ActorRefFrom<T>;\n\nexport interface AssignArgs<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TExpressionAction extends ParameterizedObject | undefined\n> extends ActionArgs<TContext, TExpressionEvent, TExpressionAction> {\n spawn: Spawner;\n}\n\nexport type ActionFunction<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TEvent extends EventObject,\n TExpressionAction extends ParameterizedObject | undefined,\n TAction extends ParameterizedObject\n> = {\n (args: ActionArgs<TContext, TExpressionEvent, TExpressionAction>): void;\n _out_TEvent?: TEvent;\n _out_TAction?: TAction;\n};\n\nexport interface ChooseBranch<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TEvent extends EventObject = TExpressionEvent,\n TAction extends ParameterizedObject = ParameterizedObject,\n TExpressionGuard extends ParameterizedObject | undefined =\n | ParameterizedObject\n | undefined,\n TGuard extends ParameterizedObject = ParameterizedObject\n> {\n guard?: Guard<TContext, TExpressionEvent, TExpressionGuard, TGuard>;\n actions: Actions<TContext, TExpressionEvent, TEvent, undefined, TAction>;\n}\n\nexport type NoRequiredParams<T extends ParameterizedObject> = T extends any\n ? { type: T['type'] } extends T\n ? T['type']\n : never\n : never;\n\nexport type Action<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TEvent extends EventObject,\n TExpressionAction extends ParameterizedObject | undefined,\n TAction extends ParameterizedObject\n> =\n | NoRequiredParams<TAction>\n | TAction\n | ActionFunction<\n TContext,\n TExpressionEvent,\n TEvent,\n TExpressionAction,\n TAction\n >;\n\nexport type UnknownAction = Action<\n MachineContext,\n EventObject,\n EventObject,\n ParameterizedObject | undefined,\n ParameterizedObject\n>;\n\nexport type Actions<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TEvent extends EventObject,\n TExpressionAction extends ParameterizedObject | undefined,\n TAction extends ParameterizedObject\n> = SingleOrArray<\n Action<TContext, TExpressionEvent, TEvent, TExpressionAction, TAction>\n>;\n\nexport type StateKey = string | AnyState;\n\nexport interface StateValueMap {\n [key: string]: StateValue;\n}\n\n/**\n * The string or object representing the state value relative to the parent state node.\n *\n * - For a child atomic state node, this is a string, e.g., `\"pending\"`.\n * - For complex state nodes, this is an object, e.g., `{ success: \"someChildState\" }`.\n */\nexport type StateValue = string | StateValueMap;\n\nexport type TransitionTarget = SingleOrArray<string>;\n\nexport interface TransitionConfig<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TEvent extends EventObject,\n TAction extends ParameterizedObject,\n TGuard extends ParameterizedObject\n> {\n guard?: Guard<TContext, TExpressionEvent, undefined, TGuard>;\n actions?: Actions<TContext, TExpressionEvent, TEvent, undefined, TAction>;\n reenter?: boolean;\n target?: TransitionTarget | undefined;\n meta?: Record<string, any>;\n description?: string;\n}\n\nexport interface InitialTransitionConfig<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TAction extends ParameterizedObject,\n TGuard extends ParameterizedObject\n> extends TransitionConfig<TContext, TEvent, TEvent, TAction, TGuard> {\n target: TransitionTarget;\n}\n\nexport type AnyTransitionConfig = TransitionConfig<any, any, any, any, any>;\n\nexport interface InvokeMeta {\n src: string;\n meta: MetaObject | undefined;\n}\n\nexport interface InvokeDefinition<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TAction extends ParameterizedObject,\n TGuard extends ParameterizedObject\n> {\n id: string;\n\n systemId: string | undefined;\n /**\n * The source of the actor logic to be invoked\n */\n src: string;\n\n input?: Mapper<TContext, TEvent, NonReducibleUnknown> | NonReducibleUnknown;\n /**\n * The transition to take upon the invoked child machine reaching its final top-level state.\n */\n onDone?:\n | string\n | SingleOrArray<\n TransitionConfig<\n TContext,\n DoneInvokeEvent<any>,\n DoneInvokeEvent<any>,\n TAction,\n TGuard\n >\n >;\n /**\n * The transition to take upon the invoked child machine sending an error event.\n */\n onError?:\n | string\n | SingleOrArray<\n TransitionConfig<\n TContext,\n ErrorEvent<any>,\n ErrorEvent<any>,\n TAction,\n TGuard\n >\n >;\n\n onSnapshot?:\n | string\n | SingleOrArray<\n TransitionConfig<\n TContext,\n SnapshotEvent<any>,\n SnapshotEvent<any>,\n TAction,\n TGuard\n >\n >;\n\n toJSON: () => Omit<\n InvokeDefinition<TContext, TEvent, TAction, TGuard>,\n 'onDone' | 'onError' | 'toJSON'\n >;\n meta: MetaObject | undefined;\n}\n\nexport interface Delay {\n id: string;\n /**\n * The time to delay the event, in milliseconds.\n */\n delay: number;\n}\n\nexport type DelayedTransitions<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TAction extends ParameterizedObject,\n TGuard extends ParameterizedObject\n> =\n | Record<\n string | number,\n | string\n | SingleOrArray<\n TransitionConfig<TContext, TEvent, TEvent, TAction, TGuard>\n >\n >\n | Array<\n TransitionConfig<TContext, TEvent, TEvent, TAction, TGuard> & {\n delay:\n | number\n | string\n | ((args: UnifiedArg<TContext, TEvent>) => number);\n }\n >;\n\nexport type StateTypes =\n | 'atomic'\n | 'compound'\n | 'parallel'\n | 'final'\n | 'history'\n | string; // TODO: remove once TS fixes this type-widening issue\n\nexport type SingleOrArray<T> = readonly T[] | T;\n\nexport type StateNodesConfig<\n TContext extends MachineContext,\n TEvent extends EventObject\n> = {\n [K in string]: StateNode<TContext, TEvent>;\n};\n\nexport type StatesConfig<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TAction extends ParameterizedObject,\n TGuard extends ParameterizedObject,\n TActor extends ProvidedActor,\n TOutput\n> = {\n [K in string]: StateNodeConfig<\n TContext,\n TEvent,\n TAction,\n TGuard,\n TActor,\n TOutput\n >;\n};\n\nexport type StatesDefinition<\n TContext extends MachineContext,\n TEvent extends EventObject\n> = {\n [K in string]: StateNodeDefinition<TContext, TEvent>;\n};\n\nexport type TransitionConfigTarget = string | undefined;\n\nexport type TransitionConfigOrTarget<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TEvent extends EventObject,\n TAction extends ParameterizedObject,\n TGuard extends ParameterizedObject\n> = SingleOrArray<\n | TransitionConfigTarget\n | TransitionConfig<TContext, TExpressionEvent, TEvent, TAction, TGuard>\n>;\n\nexport type TransitionsConfig<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TAction extends ParameterizedObject,\n TGuard extends ParameterizedObject\n> = {\n // TODO: this doesn't support partial descriptors\n [K in TEvent['type'] | '*']?: K extends '*'\n ? TransitionConfigOrTarget<TContext, TEvent, TEvent, TAction, TGuard>\n : TransitionConfigOrTarget<\n TContext,\n ExtractEvent<TEvent, K>,\n TEvent,\n TAction,\n TGuard\n >;\n};\n\ntype IsLiteralString<T extends string> = string extends T ? false : true;\n\ntype DistributeActors<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TActor extends ProvidedActor,\n TAction extends ParameterizedObject,\n TGuard extends ParameterizedObject\n> = TActor extends { src: infer TSrc }\n ? Compute<\n {\n systemId?: string;\n /**\n * The source of the machine to be invoked, or the machine itself.\n */\n src: TSrc;\n\n input?:\n | Mapper<TContext, TEvent, InputFrom<TActor['logic']>>\n | InputFrom<TActor['logic']>;\n /**\n * The transition to take upon the invoked child machine reaching its final top-level state.\n */\n onDone?:\n | string\n | SingleOrArray<\n TransitionConfigOrTarget<\n TContext,\n DoneInvokeEvent<OutputFrom<TActor['logic']>>,\n TEvent,\n TAction,\n TGuard\n >\n >;\n /**\n * The transition to take upon the invoked child machine sending an error event.\n */\n onError?:\n | string\n | SingleOrArray<\n TransitionConfigOrTarget<\n TContext,\n ErrorEvent<any>,\n TEvent,\n TAction,\n TGuard\n >\n >;\n\n onSnapshot?:\n | string\n | SingleOrArray<\n TransitionConfigOrTarget<\n TContext,\n SnapshotEvent<any>,\n TEvent,\n TAction,\n TGuard\n >\n >;\n /**\n * Meta data related to this invocation\n */\n meta?: MetaObject;\n } & (TActor['id'] extends string\n ? {\n /**\n * The unique identifier for the invoked machine. If not specified, this\n * will be the machine's own `id`, or the URL (from `src`).\n */\n id: TActor['id'];\n }\n : {\n /**\n * The unique identifier for the invoked machine. If not specified, this\n * will be the machine's own `id`, or the URL (from `src`).\n */\n id?: string;\n })\n >\n : never;\n\nexport type InvokeConfig<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TActor extends ProvidedActor,\n TAction extends ParameterizedObject,\n TGuard extends ParameterizedObject\n> = IsLiteralString<TActor['src']> extends true\n ? DistributeActors<TContext, TEvent, TActor, TAction, TGuard>\n : {\n /**\n * The unique identifier for the invoked machine. If not specified, this\n * will be the machine's own `id`, or the URL (from `src`).\n */\n id?: string;\n\n systemId?: string;\n /**\n * The source of the machine to be invoked, or the machine itself.\n */\n src: AnyActorLogic | string; // TODO: fix types\n\n input?:\n | Mapper<TContext, TEvent, NonReducibleUnknown>\n | NonReducibleUnknown;\n /**\n * The transition to take upon the invoked child machine reaching its final top-level state.\n */\n onDone?:\n | string\n | SingleOrArray<\n TransitionConfigOrTarget<\n TContext,\n DoneInvokeEvent<any>,\n TEvent,\n TAction,\n TGuard\n >\n >;\n /**\n * The transition to take upon the invoked child machine sending an error event.\n */\n onError?:\n | string\n | SingleOrArray<\n TransitionConfigOrTarget<\n TContext,\n ErrorEvent<any>,\n TEvent,\n TAction,\n TGuard\n >\n >;\n\n onSnapshot?:\n | string\n | SingleOrArray<\n TransitionConfigOrTarget<\n TContext,\n SnapshotEvent<any>,\n TEvent,\n TAction,\n TGuard\n >\n >;\n /**\n * Meta data related to this invocation\n */\n meta?: MetaObject;\n };\n\nexport type AnyInvokeConfig = InvokeConfig<any, any, any, any, any>;\n\nexport interface StateNodeConfig<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TAction extends ParameterizedObject,\n TGuard extends ParameterizedObject,\n TActor extends ProvidedActor,\n TOutput\n> {\n /**\n * The initial state transition.\n */\n initial?:\n | InitialTransitionConfig<TContext, TEvent, TAction, TGuard>\n | SingleOrArray<string>\n | undefined;\n /**\n * The type of this state node:\n *\n * - `'atomic'` - no child state nodes\n * - `'compound'` - nested child state nodes (XOR)\n * - `'parallel'` - orthogonal nested child state nodes (AND)\n * - `'history'` - history state node\n * - `'final'` - final state node\n */\n type?: 'atomic' | 'compound' | 'parallel' | 'final' | 'history';\n /**\n * Indicates whether the state node is a history state node, and what\n * type of history:\n * shallow, deep, true (shallow), false (none), undefined (none)\n */\n history?: 'shallow' | 'deep' | boolean | undefined;\n /**\n * The mapping of state node keys to their state node configurations (recursive).\n */\n states?:\n | StatesConfig<\n TContext,\n TEvent,\n TAction,\n TGuard,\n TActor,\n NonReducibleUnknown\n >\n | undefined;\n /**\n * The services to invoke upon entering this state node. These services will be stopped upon exiting this state node.\n */\n invoke?: SingleOrArray<\n TActor['src'] | InvokeConfig<TContext, TEvent, TActor, TAction, TGuard>\n >;\n /**\n * The mapping of event types to their potential transition(s).\n */\n on?: TransitionsConfig<TContext, TEvent, TAction, TGuard>;\n /**\n * The action(s) to be executed upon entering the state node.\n */\n entry?: Actions<TContext, TEvent, TEvent, undefined, TAction>;\n /**\n * The action(s) to be executed upon exiting the state node.\n */\n exit?: Actions<TContext, TEvent, TEvent, undefined, TAction>;\n /**\n * The potential transition(s) to be taken upon reaching a final child state node.\n *\n * This is equivalent to defining a `[done(id)]` transition on this state node's `on` property.\n */\n onDone?:\n | string\n | SingleOrArray<\n TransitionConfig<\n TContext,\n DoneEventObject,\n DoneEventObject,\n TAction,\n TGuard\n >\n >\n | undefined;\n /**\n * The mapping (or array) of delays (in milliseconds) to their potential transition(s).\n * The delayed transitions are taken after the specified delay in an interpreter.\n */\n after?: DelayedTransitions<TContext, TEvent, TAction, TGuard>;\n\n /**\n * An eventless transition that is always taken when this state node is active.\n */\n always?: TransitionConfigOrTarget<TContext, TEvent, TEvent, TAction, TGuard>;\n /**\n * @private\n */\n parent?: StateNode<TContext, TEvent>;\n /**\n * The meta data associated with this state node, which will be returned in State instances.\n */\n meta?: any;\n /**\n * The output data sent with the \"done.state._id_\" event if this is a final state node.\n *\n * The output data will be evaluated with the current `context` and placed on the `.data` property\n * of the event.\n */\n output?: Mapper<TContext, TEvent, TOutput> | TOutput;\n /**\n * The unique ID of the state node, which can be referenced as a transition target via the\n * `#id` syntax.\n */\n id?: string | undefined;\n /**\n * The order this state node appears. Corresponds to the implicit document order.\n */\n order?: number;\n\n /**\n * The tags for this state node, which are accumulated into the `state.tags` property.\n */\n tags?: SingleOrArray<string>;\n /**\n * A text description of the state node\n */\n description?: string;\n\n /**\n * A default target for a history state\n */\n target?: string;\n}\n\nexport type AnyStateNodeConfig = StateNodeConfig<any, any, any, any, any, any>;\n\nexport interface StateNodeDefinition<\n TContext extends MachineContext,\n TEvent extends EventObject\n> {\n id: string;\n version?: string | undefined;\n key: string;\n type: 'atomic' | 'compound' | 'parallel' | 'final' | 'history';\n initial: InitialTransitionDefinition<TContext, TEvent> | undefined;\n history: boolean | 'shallow' | 'deep' | undefined;\n states: StatesDefinition<TContext, TEvent>;\n on: TransitionDefinitionMap<TContext, TEvent>;\n transitions: Array<TransitionDefinition<TContext, TEvent>>;\n // TODO: establish what a definition really is\n entry: UnknownAction[];\n exit: UnknownAction[];\n meta: any;\n order: number;\n output?: FinalStateNodeConfig<TContext, TEvent>['output'];\n invoke: Array<InvokeDefinition<TContext, TEvent, TODO, TODO>>;\n description?: string;\n tags: string[];\n}\n\nexport interface StateMachineDefinition<\n TContext extends MachineContext,\n TEvent extends EventObject\n> extends StateNodeDefinition<TContext, TEvent> {}\n\nexport type AnyStateNode = StateNode<any, any>;\n\nexport type AnyStateNodeDefinition = StateNodeDefinition<any, any>;\n\nexport type AnyState = State<any, any, any, any, any>;\n\nexport type AnyStateMachine = StateMachine<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n>;\n\nexport type AnyStateConfig = StateConfig<any, AnyEventObject>;\n\nexport interface AtomicStateNodeConfig<\n TContext extends MachineContext,\n TEvent extends EventObject\n> extends StateNodeConfig<TContext, TEvent, TODO, TODO, TODO, TODO> {\n initial?: undefined;\n parallel?: false | undefined;\n states?: undefined;\n onDone?: undefined;\n}\n\nexport interface HistoryStateNodeConfig<\n TContext extends MachineContext,\n TEvent extends EventObject\n> extends AtomicStateNodeConfig<TContext, TEvent> {\n history: 'shallow' | 'deep' | true;\n target: string | undefined;\n}\n\nexport interface FinalStateNodeConfig<\n TContext extends MachineContext,\n TEvent extends EventObject\n> extends AtomicStateNodeConfig<TContext, TEvent> {\n type: 'final';\n /**\n * The data to be sent with the \"done.state.<id>\" event. The data can be\n * static or dynamic (based on assigners).\n */\n output?: Mapper<TContext, TEvent, any>;\n}\n\nexport type SimpleOrStateNodeConfig<\n TContext extends MachineContext,\n TEvent extends EventObject\n> =\n | AtomicStateNodeConfig<TContext, TEvent>\n | StateNodeConfig<TContext, TEvent, TODO, TODO, TODO, TODO>;\n\nexport type ActionFunctionMap<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TAction extends ParameterizedObject = ParameterizedObject\n> = {\n [K in TAction['type']]?: ActionFunction<\n TContext,\n TEvent,\n TEvent,\n TAction extends { type: K } ? TAction : never,\n TAction\n >;\n};\n\ntype GuardMap<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TGuard extends ParameterizedObject\n> = {\n [K in TGuard['type']]?: GuardPredicate<\n TContext,\n TEvent,\n TGuard extends { type: K } ? TGuard : never,\n TGuard\n >;\n};\n\nexport type DelayFunctionMap<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TAction extends ParameterizedObject\n> = Record<string, DelayConfig<TContext, TEvent, TAction>>;\n\nexport type DelayConfig<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TExpressionAction extends ParameterizedObject | undefined\n> = number | DelayExpr<TContext, TExpressionEvent, TExpressionAction>;\n\n// TODO: possibly refactor this somehow, use even a simpler type, and maybe even make `machine.options` private or something\nexport interface MachineImplementationsSimplified<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TAction extends ParameterizedObject = ParameterizedObject,\n TGuard extends ParameterizedObject = ParameterizedObject\n> {\n guards: GuardMap<TContext, TEvent, TGuard>;\n actions: ActionFunctionMap<TContext, TEvent, TAction>;\n actors: Record<\n string,\n | AnyActorLogic\n | { src: AnyActorLogic; input: Mapper<TContext, TEvent, any> | any }\n >;\n delays: DelayFunctionMap<TContext, TEvent, TAction>;\n}\n\ntype MaybeNarrowedEvent<TIndexedEvents, TCausingLookup, K> = Cast<\n Prop<\n TIndexedEvents,\n K extends keyof TCausingLookup\n ? TCausingLookup[K]\n : TIndexedEvents[keyof TIndexedEvents]\n >,\n EventObject\n>;\n\ntype MachineImplementationsActions<\n TContext extends MachineContext,\n TResolvedTypesMeta,\n TEventsCausingActions = Prop<\n Prop<TResolvedTypesMeta, 'resolved'>,\n 'eventsCausingActions'\n >,\n TIndexedEvents = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedEvents'>,\n TIndexedActions = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedActions'>\n> = {\n [K in keyof TIndexedActions]?: ActionFunction<\n TContext,\n MaybeNarrowedEvent<TIndexedEvents, TEventsCausingActions, K>,\n Cast<Prop<TIndexedEvents, keyof TIndexedEvents>, EventObject>,\n Cast<TIndexedActions[K], ParameterizedObject>,\n Cast<Prop<TIndexedActions, keyof TIndexedActions>, ParameterizedObject>\n >;\n};\n\ntype MachineImplementationsActors<\n TContext extends MachineContext,\n TResolvedTypesMeta,\n TEventsCausingActors = Prop<\n Prop<TResolvedTypesMeta, 'resolved'>,\n 'eventsCausingActors'\n >,\n TIndexedActors = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedActors'>,\n TIndexedEvents = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedEvents'>,\n _TInvokeSrcNameMap = Prop<\n Prop<TResolvedTypesMeta, 'resolved'>,\n 'invokeSrcNameMap'\n >\n> = {\n // TODO: this should require `{ src, input }` for required inputs\n [K in keyof TIndexedActors]?:\n | Cast<Prop<TIndexedActors[K], 'logic'>, AnyActorLogic>\n | {\n src: Cast<Prop<TIndexedActors[K], 'logic'>, AnyActorLogic>;\n input:\n | Mapper<\n TContext,\n MaybeNarrowedEvent<TIndexedEvents, TEventsCausingActors, K>,\n InputFrom<Cast<Prop<TIndexedActors[K], 'logic'>, AnyActorLogic>>\n >\n | InputFrom<Cast<Prop<TIndexedActors[K], 'logic'>, AnyActorLogic>>;\n };\n};\n\ntype MachineImplementationsDelays<\n TContext extends MachineContext,\n TResolvedTypesMeta,\n TEventsCausingDelays = Prop<\n Prop<TResolvedTypesMeta, 'resolved'>,\n 'eventsCausingDelays'\n >,\n TIndexedEvents = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedEvents'>\n> = {\n [K in keyof TEventsCausingDelays]?: DelayConfig<\n TContext,\n Cast<Prop<TIndexedEvents, TEventsCausingDelays[K]>, EventObject>,\n ParameterizedObject | undefined\n >;\n};\n\ntype MachineImplementationsGuards<\n TContext extends MachineContext,\n TResolvedTypesMeta,\n TEventsCausingGuards = Prop<\n Prop<TResolvedTypesMeta, 'resolved'>,\n 'eventsCausingGuards'\n >,\n TIndexedEvents = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedEvents'>,\n TIndexedGuards = Prop<Prop<TResolvedTypesMeta, 'resolved'>, 'indexedGuards'>\n> = {\n [K in keyof TIndexedGuards]?: Guard<\n TContext,\n MaybeNarrowedEvent<TIndexedEvents, TEventsCausingGuards, K>,\n Cast<TIndexedGuards[K], ParameterizedObject>,\n Cast<Prop<TIndexedGuards, keyof TIndexedGuards>, ParameterizedObject>\n >;\n};\n\ntype MakeKeysRequired<T extends string> = { [K in T]: unknown };\n\ntype MaybeMakeMissingImplementationsRequired<\n TImplementationType,\n TMissingImplementationsForType,\n TRequireMissingImplementations\n> = TRequireMissingImplementations extends true\n ? IsNever<TMissingImplementationsForType> extends true\n ? {}\n : {\n [K in Cast<TImplementationType, string>]: MakeKeysRequired<\n Cast<TMissingImplementationsForType, string>\n >;\n }\n : {};\n\ntype GenerateActionsImplementationsPart<\n TContext extends MachineContext,\n TResolvedTypesMeta,\n TRequireMissingImplementations,\n TMissingImplementations\n> = Compute<\n MaybeMakeMissingImplementationsRequired<\n 'actions',\n Prop<TMissingImplementations, 'actions'>,\n TRequireMissingImplementations\n > & {\n actions?: MachineImplementationsActions<TContext, TResolvedTypesMeta>;\n }\n>;\n\ntype GenerateActorsImplementationsPart<\n TContext extends MachineContext,\n TResolvedTypesMeta,\n TRequireMissingImplementations,\n TMissingImplementations\n> = Compute<\n MaybeMakeMissingImplementationsRequired<\n 'actors',\n Prop<TMissingImplementations, 'actors'>,\n TRequireMissingImplementations\n > & {\n actors?: MachineImplementationsActors<TContext, TResolvedTypesMeta>;\n }\n>;\n\ntype GenerateDelaysImplementationsPart<\n TContext extends MachineContext,\n TResolvedTypesMeta,\n TRequireMissingImplementations,\n TMissingImplementations\n> = Compute<\n MaybeMakeMissingImplementationsRequired<\n 'delays',\n Prop<TMissingImplementations, 'delays'>,\n TRequireMissingImplementations\n > & {\n delays?: MachineImplementationsDelays<TContext, TResolvedTypesMeta>;\n }\n>;\n\ntype GenerateGuardsImplementationsPart<\n TContext extends MachineContext,\n TResolvedTypesMeta,\n TRequireMissingImplementations,\n TMissingImplementations\n> = Compute<\n MaybeMakeMissingImplementationsRequired<\n 'guards',\n Prop<TMissingImplementations, 'guards'>,\n TRequireMissingImplementations\n > & {\n guards?: MachineImplementationsGuards<TContext, TResolvedTypesMeta>;\n }\n>;\n\nexport type InternalMachineImplementations<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TActor extends ProvidedActor,\n TAction extends ParameterizedObject,\n TResolvedTypesMeta,\n TRequireMissingImplementations extends boolean = false,\n TMissingImplementations = Prop<\n Prop<TResolvedTypesMeta, 'resolved'>,\n 'missingImplementations'\n >\n> =\n // TODO: remove per-Generate* Computes\n Compute<\n GenerateActionsImplementationsPart<\n TContext,\n TResolvedTypesMeta,\n TRequireMissingImplementations,\n TMissingImplementations\n > &\n GenerateActorsImplementationsPart<\n TContext,\n TResolvedTypesMeta,\n TRequireMissingImplementations,\n TMissingImplementations\n > &\n GenerateDelaysImplementationsPart<\n TContext,\n TResolvedTypesMeta,\n TRequireMissingImplementations,\n TMissingImplementations\n > &\n GenerateGuardsImplementationsPart<\n TContext,\n TResolvedTypesMeta,\n TRequireMissingImplementations,\n TMissingImplementations\n >\n >;\n\nexport type MachineImplementations<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TActor extends ProvidedActor = ProvidedActor,\n TAction extends ParameterizedObject = ParameterizedObject,\n TGuard extends ParameterizedObject = ParameterizedObject,\n TTypesMeta extends TypegenConstraint = TypegenDisabled\n> = InternalMachineImplementations<\n TContext,\n TEvent,\n TActor,\n TAction,\n ResolveTypegenMeta<TTypesMeta, TEvent, TActor, TAction, TGuard>\n>;\n\ntype InitialContext<TContext extends MachineContext, TInput> =\n | TContext\n | ContextFactory<TContext, TInput>;\n\nexport type ContextFactory<TContext extends MachineContext, TInput> = ({\n spawn,\n input\n}: {\n spawn: Spawner;\n input: TInput;\n}) => TContext;\n\ntype RootStateNodeConfig<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TAction extends ParameterizedObject,\n TGuard extends ParameterizedObject,\n TActor extends ProvidedActor,\n TOutput\n> = Omit<\n StateNodeConfig<TContext, TEvent, TAction, TGuard, TActor, TOutput>,\n 'states'\n> & {\n states?:\n | StatesConfig<TContext, TEvent, TAction, TGuard, TActor, TOutput>\n | undefined;\n};\n\nexport type MachineConfig<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TAction extends ParameterizedObject = ParameterizedObject,\n TGuard extends ParameterizedObject = ParameterizedObject,\n TActor extends ProvidedActor = ProvidedActor,\n TInput = any,\n TOutput = unknown,\n TTypesMeta = TypegenDisabled\n> = (RootStateNodeConfig<\n NoInfer<TContext>,\n NoInfer<TEvent>,\n NoInfer<TAction>,\n NoInfer<TGuard>,\n NoInfer<TActor>,\n NoInfer<TOutput>\n> & {\n /**\n * The initial context (extended state)\n */\n /**\n * The machine's own version.\n */\n version?: string;\n types?: MachineTypes<\n TContext,\n TEvent,\n TAction,\n TGuard,\n TActor,\n TInput,\n TOutput,\n TTypesMeta\n >;\n}) &\n (Equals<TContext, MachineContext> extends true\n ? { context?: InitialContext<LowInfer<TContext>, TInput> }\n : { context: InitialContext<LowInfer<TContext>, TInput> });\n\nexport interface ProvidedActor {\n src: string;\n logic: AnyActorLogic;\n id?: string;\n}\n\nexport interface MachineTypes<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TAction extends ParameterizedObject,\n TGuard extends ParameterizedObject,\n TActor extends ProvidedActor,\n TInput,\n TOutput,\n TTypesMeta = TypegenDisabled\n> {\n context?: TContext;\n events?: TEvent;\n actors?: TActor;\n actions?: TAction;\n guards?: TGuard;\n input?: TInput;\n output?: TOutput;\n typegen?: TTypesMeta;\n}\n\nexport interface HistoryStateNode<TContext extends MachineContext>\n extends StateNode<TContext> {\n history: 'shallow' | 'deep';\n target: string | undefined;\n}\n\nexport type HistoryValue<\n TContext extends MachineContext,\n TEvent extends EventObject\n> = Record<string, Array<StateNode<TContext, TEvent>>>;\n\nexport type AnyHistoryValue = HistoryValue<any, any>;\n\nexport type StateFrom<\n T extends AnyStateMachine | ((...args: any[]) => AnyStateMachine)\n> = T extends AnyStateMachine\n ? ReturnType<T['transition']>\n : T extends (...args: any[]) => AnyStateMachine\n ? ReturnType<ReturnType<T>['transition']>\n : never;\n\nexport type Transitions<\n TContext extends MachineContext,\n TEvent extends EventObject\n> = Array<TransitionDefinition<TContext, TEvent>>;\n\nexport enum ConstantPrefix {\n After = 'xstate.after',\n DoneState = 'done.state',\n DoneInvoke = 'done.invoke',\n ErrorExecution = 'error.execution',\n ErrorCommunication = 'error.communication',\n ErrorPlatform = 'error.platform',\n ErrorCustom = 'xstate.error'\n}\n\nexport interface DoneInvokeEvent<TOutput> {\n type: `done.invoke.${string}`;\n output: TOutput;\n}\n\nexport interface ErrorEvent<TErrorData> {\n type: `error.${string}`;\n data: TErrorData;\n}\n\nexport interface SnapshotEvent<TData> {\n type: `xstate.snapshot.${string}`;\n data: TData;\n}\n\nexport interface ErrorExecutionEvent extends EventObject {\n src: string;\n type: ConstantPrefix.ErrorExecution;\n data: any;\n}\n\nexport interface ErrorPlatformEvent extends EventObject {\n data: any;\n}\n\nexport interface DoneEventObject extends EventObject {\n output?: any;\n toString(): string;\n}\n\nexport type DoneEvent = DoneEventObject & string;\n\nexport type DelayExpr<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TExpressionAction extends ParameterizedObject | undefined\n> = (args: ActionArgs<TContext, TExpressionEvent, TExpressionAction>) => number;\n\nexport type LogExpr<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TExpressionAction extends ParameterizedObject | undefined\n> = (\n args: ActionArgs<TContext, TExpressionEvent, TExpressionAction>\n) => unknown;\n\nexport type SendExpr<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TExpressionAction extends ParameterizedObject | undefined,\n TSentEvent extends EventObject\n> = (\n args: ActionArgs<TContext, TExpressionEvent, TExpressionAction>\n) => TSentEvent;\n\nexport enum SpecialTargets {\n Parent = '#_parent',\n Internal = '#_internal'\n}\n\nexport interface SendToActionOptions<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TExpressionAction extends ParameterizedObject | undefined\n> extends RaiseActionOptions<TContext, TExpressionEvent, TExpressionAction> {}\n\nexport interface RaiseActionOptions<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TExpressionAction extends ParameterizedObject | undefined\n> {\n id?: string;\n delay?:\n | number\n | string\n | DelayExpr<TContext, TExpressionEvent, TExpressionAction>;\n}\n\nexport interface RaiseActionParams<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TExpressionAction extends ParameterizedObject | undefined,\n TEvent extends EventObject\n> extends RaiseActionOptions<TContext, TExpressionEvent, TExpressionAction> {\n event:\n | TEvent\n | SendExpr<TContext, TExpressionEvent, TExpressionAction, TEvent>;\n}\n\nexport interface SendToActionParams<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TExpressionAction extends ParameterizedObject | undefined,\n TSentEvent extends EventObject\n> extends SendToActionOptions<TContext, TExpressionEvent, TExpressionAction> {\n event:\n | TSentEvent\n | SendExpr<TContext, TExpressionEvent, TExpressionAction, TSentEvent>;\n}\n\nexport type Assigner<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TExpressionAction extends ParameterizedObject | undefined\n> = (\n args: AssignArgs<TContext, TExpressionEvent, TExpressionAction>\n) => Partial<TContext>;\n\nexport type PartialAssigner<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TExpressionAction extends ParameterizedObject | undefined,\n TKey extends keyof TContext\n> = (\n args: AssignArgs<TContext, TExpressionEvent, TExpressionAction>\n) => TContext[TKey];\n\nexport type PropertyAssigner<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TExpressionAction extends ParameterizedObject | undefined\n> = {\n [K in keyof TContext]?:\n | PartialAssigner<TContext, TExpressionEvent, TExpressionAction, K>\n | TContext[K];\n};\n\nexport type Mapper<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TResult\n> = (args: {\n context: TContext;\n event: TEvent;\n self: ActorRef<TEvent>;\n}) => TResult;\n\nexport type PropertyMapper<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TParams extends {}\n> = {\n [K in keyof TParams]?: Mapper<TContext, TEvent, TParams[K]> | TParams[K];\n};\n\nexport interface TransitionDefinition<\n TContext extends MachineContext,\n TEvent extends EventObject\n> extends Omit<\n TransitionConfig<TContext, TEvent, TEvent, TODO, TODO>,\n | 'target'\n // `guard` is correctly rejected by `extends` here and `actions` should be too\n // however, `any` passed to `TransitionConfig` as `TAction` collapses its `.actions` to `any` and it's accidentally allowed here\n // it doesn't exactly have to be incorrect, we are overriding this here anyway but it looks like a lucky accident rather than smth done on purpose\n | 'guard'\n > {\n target: ReadonlyArray<StateNode<TContext, TEvent>> | undefined;\n source: StateNode<TContext, TEvent>;\n actions: readonly UnknownAction[];\n reenter: boolean;\n guard?: UnknownGuard;\n eventType: TEvent['type'] | '*';\n toJSON: () => {\n target: string[] | undefined;\n source: string;\n actions: readonly UnknownAction[];\n guard?: UnknownGuard;\n eventType: TEvent['type'] | '*';\n meta?: Record<string, any>;\n };\n}\n\nexport type AnyTransitionDefinition = TransitionDefinition<any, any>;\n\nexport interface InitialTransitionDefinition<\n TContext extends MachineContext,\n TEvent extends EventObject\n> extends TransitionDefinition<TContext, TEvent> {\n target: ReadonlyArray<StateNode<TContext, TEvent>>;\n guard?: never;\n}\n\nexport type TransitionDefinitionMap<\n TContext extends MachineContext,\n TEvent extends EventObject\n> = {\n [K in TEvent['type'] | '*']: Array<\n TransitionDefinition<\n TContext,\n K extends TEvent['type'] ? Extract<TEvent, { type: K }> : EventObject\n >\n >;\n};\n\nexport interface DelayedTransitionDefinition<\n TContext extends MachineContext,\n TEvent extends EventObject\n> extends TransitionDefinition<TContext, TEvent> {\n delay: number | string | DelayExpr<TContext, TEvent, undefined>;\n}\n\nexport interface StateLike<TContext extends MachineContext> {\n value: StateValue;\n context: TContext;\n event: EventObject;\n}\n\nexport interface StateConfig<\n TContext extends MachineContext,\n TEvent extends EventObject\n> {\n value: StateValue;\n context: TContext;\n historyValue?: HistoryValue<TContext, TEvent>;\n meta?: any;\n configuration?: Array<StateNode<TContext, TEvent>>;\n children: Record<string, ActorRef<any>>;\n done?: boolean;\n output?: any;\n error?: unknown;\n tags?: Set<string>;\n machine?: StateMachine<TContext, TEvent, any, any, any, any, any, any>;\n _internalQueue?: Array<TEvent>;\n}\n\nexport interface ActorOptions<TLogic extends AnyActorLogic> {\n /**\n * Whether state actions should be executed immediately upon transition. Defaults to `true`.\n */\n execute?: boolean;\n clock?: Clock;\n logger?: (...args: any[]) => void;\n parent?: ActorRef<any>;\n /**\n * If `true`, defers processing of sent events until the service\n * is initialized (`.start()`). Otherwise, an error will be thrown\n * for events sent to an uninitialized service.\n *\n * Default: `true`\n */\n deferEvents?: boolean;\n /**\n * The custom `id` for referencing this service.\n */\n id?: string;\n /**\n * If `true`, states and events will be logged to Redux DevTools.\n *\n * Default: `false`\n */\n devTools?: boolean | DevToolsAdapter; // TODO: add enhancer options\n\n sync?: boolean;\n\n /**\n * The system ID to register this actor under\n */\n systemId?: string;\n /**\n * The input data to pass to the actor.\n */\n input?: InputFrom<TLogic>;\n\n // state?:\n // | PersistedStateFrom<TActorLogic>\n // | InternalStateFrom<TActorLogic>;\n state?: any;\n\n /**\n * The source definition.\n */\n src?: string;\n}\n\nexport type AnyActor = Actor<any, any>;\n\n/**\n * @deprecated Use `AnyActor` instead.\n */\nexport type AnyInterpreter = AnyActor;\n\n// Based on RxJS types\nexport type Observer<T> = {\n next?: (value: T) => void;\n error?: (err: any) => void;\n complete?: () => void;\n};\n\nexport interface Subscription {\n unsubscribe(): void;\n}\n\nexport interface InteropObservable<T> {\n [Symbol.observable]: () => InteropSubscribable<T>;\n}\n\nexport interface InteropSubscribable<T> {\n subscribe(observer: Observer<T>): Subscription;\n}\n\nexport interface Subscribable<T> extends InteropSubscribable<T> {\n subscribe(observer: Observer<T>): Subscription;\n subscribe(\n next: (value: T) => void,\n error?: (error: any) => void,\n complete?: () => void\n ): Subscription;\n}\n\nexport type ExtractEvent<\n TEvent extends EventObject,\n TEventType extends TEvent['type']\n> = TEvent extends any\n ? TEventType extends TEvent['type']\n ? TEvent\n : never\n : never;\n\nexport interface BaseActorRef<TEvent extends EventObject> {\n send: (event: TEvent) => void;\n}\n\nexport interface ActorLike<TCurrent, TEvent extends EventObject>\n extends Subscribable<TCurrent> {\n send: (event: TEvent) => void;\n}\n\nexport interface ActorRef<TEvent extends EventObject, TSnapshot = any>\n extends Subscribable<TSnapshot>,\n InteropObservable<TSnapshot> {\n /**\n * The unique identifier for this actor relative to its parent.\n */\n id: string;\n sessionId: string;\n send: (event: TEvent) => void;\n // TODO: should this be optional?\n start?: () => void;\n getSnapshot: () => TSnapshot;\n // TODO: this should return some sort of TPersistedState, not any\n getPersistedState?: () => any;\n stop: () => void;\n toJSON?: () => any;\n // TODO: figure out how to hide this externally as `sendTo(ctx => ctx.actorRef._parent._parent._parent._parent)` shouldn't be allowed\n _parent?: ActorRef<any, any>;\n system?: ActorSystem<any>;\n status: ActorStatus;\n src?: string;\n}\n\nexport type AnyActorRef = ActorRef<any, any>;\n\nexport type ActorLogicFrom<T> = ReturnTypeOrValue<T> extends infer R\n ? R extends StateMachine<any, any, any, any, any, any, any, any>\n ? R\n : R extends Promise<infer U>\n ? PromiseActorLogic<U>\n : never\n : never;\n\nexport type ActorRefFrom<T> = ReturnTypeOrValue<T> extends infer R\n ? R extends StateMachine<\n infer TContext,\n infer TEvent,\n infer TActor,\n infer _TAction,\n infer _TGuard,\n infer _Tinput,\n infer TOutput,\n infer TResolvedTypesMeta\n >\n ? ActorRef<\n TEvent,\n State<\n TContext,\n TEvent,\n TActor,\n TOutput,\n AreAllImplementationsAssumedToBeProvided<TResolvedTypesMeta> extends false\n ? MarkAllImplementationsAsProvided<TResolvedTypesMeta>\n : TResolvedTypesMeta\n >\n >\n : R extends Promise<infer U>\n ? ActorRefFrom<PromiseActorLogic<U>>\n : R extends ActorLogic<\n infer TEvent,\n infer TSnapshot,\n infer _,\n infer __,\n infer ___,\n infer ____,\n infer _____\n >\n ? ActorRef<TEvent, TSnapshot>\n : never\n : never;\n\nexport type DevToolsAdapter = (service: AnyActor) => void;\n\n/**\n * @deprecated Use `Actor<T>` instead.\n */\nexport type InterpreterFrom<\n T extends AnyStateMachine | ((...args: any[]) => AnyStateMachine)\n> = ReturnTypeOrValue<T> extends StateMachine<\n infer TContext,\n infer TEvent,\n infer TActor,\n infer _TAction,\n infer _TGuard,\n infer TInput,\n infer TOutput,\n infer TResolvedTypesMeta\n>\n ? Actor<\n ActorLogic<\n TEvent,\n State<TContext, TEvent, TActor, TOutput, TResolvedTypesMeta>,\n State<TContext, TEvent, TActor, TOutput, TResolvedTypesMeta>,\n PersistedMachineState<\n State<TContext, TEvent, TActor, TOutput, TResolvedTypesMeta>\n >,\n ActorSystem<any>,\n TInput\n >\n >\n : never;\n\nexport type MachineImplementationsFrom<\n T extends AnyStateMachine | ((...args: any[]) => AnyStateMachine),\n TRequireMissingImplementations extends boolean = false\n> = ReturnTypeOrValue<T> extends StateMachine<\n infer TContext,\n infer TEvent,\n infer TActor,\n infer TAction,\n infer _TGuard,\n infer _TInput,\n infer _TOutput,\n infer TResolvedTypesMeta\n>\n ? InternalMachineImplementations<\n TContext,\n TEvent,\n TActor,\n TAction,\n TResolvedTypesMeta,\n TRequireMissingImplementations\n >\n : never;\n\n// only meant to be used internally for debugging purposes\nexport type __ResolvedTypesMetaFrom<T> = T extends StateMachine<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n infer TResolvedTypesMeta\n>\n ? TResolvedTypesMeta\n : never;\n\nexport interface ActorContext<\n TEvent extends EventObject,\n TSnapshot,\n TSystem extends ActorSystem<any> = ActorSystem<any>\n> {\n self: ActorRef<TEvent, TSnapshot>;\n id: string;\n sessionId: string;\n logger: (...args: any[]) => void;\n defer: (fn: () => void) => void;\n system: TSystem;\n stopChild: (child: AnyActorRef) => void;\n}\n\nexport type AnyActorContext = ActorContext<any, any, any>;\n\nexport interface ActorLogic<\n TEvent extends EventObject,\n TSnapshot = any,\n TInternalState = TSnapshot,\n /**\n * Serialized internal state used for persistence & restoration\n */\n TPersisted = TInternalState,\n TSystem extends ActorSystem<any> = ActorSystem<any>,\n TInput = any,\n TOutput = unknown\n> {\n config?: unknown;\n transition: (\n state: TInternalState,\n message: TEvent,\n ctx: ActorContext<TEvent, TSnapshot, TSystem>\n ) => TInternalState;\n getInitialState: (\n actorCtx: ActorContext<TEvent, TSnapshot, TSystem>,\n input: TInput\n ) => TInternalState;\n restoreState?: (\n persistedState: TPersisted,\n actorCtx: ActorContext<TEvent, TSnapshot>\n ) => TInternalState;\n getSnapshot?: (state: TInternalState) => TSnapshot;\n getStatus?: (state: TInternalState) => { status: string; data?: any };\n start?: (\n state: TInternalState,\n actorCtx: ActorContext<TEvent, TSnapshot>\n ) => void;\n /**\n * @returns Persisted state\n */\n getPersistedState?: (state: TInternalState) => TPersisted;\n _out_TOutput?: TOutput; // temp hack to use this type param so we can error properly, ideally this should appear somewhere in the type, perhaps in the `getStatus`?\n}\n\nexport type AnyActorLogic = ActorLogic<\n any, // event\n any, // snapshot\n any, // internal state\n any, // persisted state\n any, // system\n any, // input\n any // output\n>;\n\nexport type SnapshotFrom<T> = ReturnTypeOrValue<T> extends infer R\n ? R extends ActorRef<infer _, infer TSnapshot>\n ? TSnapshot\n : R extends Actor<infer TLogic>\n ? SnapshotFrom<TLogic>\n : R extends StateMachine<\n infer _,\n infer __,\n infer ___,\n infer ____,\n infer _____,\n infer ______,\n infer _______,\n infer ________\n >\n ? StateFrom<R>\n : R extends ActorLogic<\n infer _,\n infer TSnapshot,\n infer __,\n infer ___,\n infer ____\n >\n ? TSnapshot\n : R extends ActorContext<infer _, infer TSnapshot, infer __>\n ? TSnapshot\n : never\n : never;\n\nexport type EventFromLogic<TLogic extends ActorLogic<any, any>> =\n TLogic extends ActorLogic<\n infer TEvent,\n infer _,\n infer __,\n infer ___,\n infer ____\n >\n ? TEvent\n : never;\n\nexport type PersistedStateFrom<TLogic extends ActorLogic<any, any>> =\n TLogic extends ActorLogic<\n infer _TEvent,\n infer _TSnapshot,\n infer _TInternalState,\n infer TPersisted\n >\n ? TPersisted\n : never;\n\nexport type InternalStateFrom<TLogic extends ActorLogic<any, any>> =\n TLogic extends ActorLogic<\n infer _TEvent,\n infer _TSnapshot,\n infer TInternalState,\n infer _TPersisted\n >\n ? TInternalState\n : never;\n\ntype ResolveEventType<T> = ReturnTypeOrValue<T> extends infer R\n ? R extends StateMachine<\n infer _TContext,\n infer TEvent,\n infer _TActor,\n infer _TAction,\n infer _TGuard,\n infer _TInput,\n infer _TOutput,\n infer _TResolvedTypesMeta\n >\n ? TEvent\n : R extends State<\n infer _TContext,\n infer TEvent,\n infer _TActor,\n infer _TOutput,\n infer _TResolvedTypesMeta\n >\n ? TEvent\n : R extends ActorRef<infer TEvent, infer _>\n ? TEvent\n : never\n : never;\n\nexport type EventFrom<\n T,\n K extends Prop<TEvent, 'type'> = never,\n TEvent extends EventObject = ResolveEventType<T>\n> = IsNever<K> extends true ? TEvent : ExtractEvent<TEvent, K>;\n\nexport type ContextFrom<T> = ReturnTypeOrValue<T> extends infer R\n ? R extends StateMachine<\n infer TContext,\n infer _,\n infer __,\n infer ___,\n infer ____,\n infer _____,\n infer ______,\n infer _______\n >\n ? TContext\n : R extends State<\n infer TContext,\n infer _TEvent,\n infer _TActor,\n infer _TOutput,\n infer _TResolvedTypesMeta\n >\n ? TContext\n : R extends Actor<infer TActorLogic>\n ? TActorLogic extends StateMachine<\n infer TContext,\n infer _TEvent,\n infer _TActor,\n infer _TAction,\n infer _TGuard,\n infer _TInput,\n infer _TOutput,\n infer _TTypesMeta\n >\n ? TContext\n : never\n : never\n : never;\n\nexport type InferEvent<E extends EventObject> = {\n [T in E['type']]: { type: T } & Extract<E, { type: T }>;\n}[E['type']];\n\nexport type TODO = any;\n\nexport type StateValueFrom<TMachine extends AnyStateMachine> = Parameters<\n StateFrom<TMachine>['matches']\n>[0];\n\nexport type TagsFrom<TMachine extends AnyStateMachine> = Parameters<\n StateFrom<TMachine>['hasTag']\n>[0];\n\nexport interface ActorSystemInfo {\n actors: Record<string, AnyActorRef>;\n}\n\nexport interface ActorSystem<T extends ActorSystemInfo> {\n _bookId: () => string;\n _register: (sessionId: string, actorRef: AnyActorRef) => string;\n _unregister: (actorRef: AnyActorRef) => void;\n _set: <K extends keyof T['actors']>(key: K, actorRef: T['actors'][K]) => void;\n get: <K extends keyof T['actors']>(key: K) => T['actors'][K] | undefined;\n}\n\nexport type AnyActorSystem = ActorSystem<any>;\n\nexport type PersistedMachineState<TState extends AnyState> = Pick<\n TState,\n 'value' | 'output' | 'error' | 'context' | 'done' | 'historyValue'\n> & {\n children: {\n [K in keyof TState['children']]: {\n state: any; // TODO: fix (should be state from actorref)\n src?: string;\n };\n };\n};\n","import {\n ConstantPrefix,\n DoneEvent,\n ErrorPlatformEvent,\n DoneEventObject\n} from './types.ts';\nimport * as constantPrefixes from './constantPrefixes.ts';\nimport { INIT_TYPE } from './constants.ts';\nexport { sendTo, sendParent, forwardTo, escalate } from './actions/send.ts';\n\nexport { stop } from './actions/stop.ts';\nexport { log } from './actions/log.ts';\nexport { cancel } from './actions/cancel.ts';\nexport { assign } from './actions/assign.ts';\nexport { raise } from './actions/raise.ts';\nexport { choose } from './actions/choose.ts';\nexport { pure } from './actions/pure.ts';\nexport { constantPrefixes };\n\n/**\n * Returns an event type that represents an implicit event that\n * is sent after the specified `delay`.\n *\n * @param delayRef The delay in milliseconds\n * @param id The state node ID where this event is handled\n */\nexport function after(delayRef: number | string, id?: string) {\n const idSuffix = id ? `#${id}` : '';\n return `${ConstantPrefix.After}(${delayRef})${idSuffix}`;\n}\n\n/**\n * Returns an event that represents that a final state node\n * has been reached in the parent state node.\n *\n * @param id The final state node's parent state node `id`\n * @param output The data to pass into the event\n */\nexport function done(id: string, output?: any): DoneEventObject {\n const type = `${ConstantPrefix.DoneState}.${id}`;\n const eventObject = {\n type,\n output\n };\n\n eventObject.toString = () => type;\n\n return eventObject as DoneEvent;\n}\n\n/**\n * Returns an event that represents that an invoked service has terminated.\n *\n * An invoked service is terminated when it has reached a top-level final state node,\n * but not when it is canceled.\n *\n * @param invokeId The invoked service ID\n * @param output The data to pass into the event\n */\nexport function doneInvoke(invokeId: string, output?: any): DoneEvent {\n const type = `${ConstantPrefix.DoneInvoke}.${invokeId}`;\n const eventObject = {\n type,\n output\n };\n\n eventObject.toString = () => type;\n\n return eventObject as DoneEvent;\n}\n\nexport function error(id: string, data?: any): ErrorPlatformEvent & string {\n const type = `${ConstantPrefix.ErrorPlatform}.${id}`;\n const eventObject = { type, data };\n\n eventObject.toString = () => type;\n\n return eventObject as ErrorPlatformEvent & string;\n}\n\nexport function createInitEvent(input: unknown) {\n return { type: INIT_TYPE, input } as const;\n}\n","import isDevelopment from '#is-development';\nimport { AnyActor, DevToolsAdapter } from '../types.ts';\n\ninterface DevInterface {\n services: Set<AnyActor>;\n register(service: AnyActor): void;\n onRegister(listener: ServiceListener): void;\n}\ntype ServiceListener = (service: AnyActor) => void;\n\nexport interface XStateDevInterface {\n register: (service: AnyActor) => void;\n unregister: (service: AnyActor) => void;\n onRegister: (listener: ServiceListener) => {\n unsubscribe: () => void;\n };\n services: Set<AnyActor>;\n}\n\n// From https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/globalThis\nexport function getGlobal(): typeof globalThis | undefined {\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n }\n if (typeof self !== 'undefined') {\n return self;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof global !== 'undefined') {\n return global;\n }\n if (isDevelopment) {\n console.warn(\n 'XState could not find a global object in this environment. Please let the maintainers know and raise an issue here: https://github.com/statelyai/xstate/issues'\n );\n }\n}\n\nfunction getDevTools(): DevInterface | undefined {\n const w = getGlobal();\n if (!!(w as any).__xstate__) {\n return (w as any).__xstate__;\n }\n\n return undefined;\n}\n\nexport function registerService(service: AnyActor) {\n if (typeof window === 'undefined') {\n return;\n }\n\n const devTools = getDevTools();\n\n if (devTools) {\n devTools.register(service);\n }\n}\n\nexport const devToolsAdapter: DevToolsAdapter = (service) => {\n if (typeof window === 'undefined') {\n return;\n }\n\n const devTools = getDevTools();\n\n if (devTools) {\n devTools.register(service);\n }\n};\n","/**\n * This function makes sure that unhandled errors are thrown in a separate macrotask.\n * It allows those errors to be detected by global error handlers and reported to bug tracking services\n * without interrupting our own stack of execution.\n *\n * @param err error to be thrown\n */\nexport function reportUnhandledError(err: unknown) {\n setTimeout(() => {\n throw err;\n });\n}\n","export const symbolObservable: typeof Symbol.observable = (() =>\n (typeof Symbol === 'function' && Symbol.observable) ||\n '@@observable')() as any;\n","import isDevelopment from '#is-development';\nimport { Mailbox } from './Mailbox.ts';\nimport { doneInvoke, error } from './actions.ts';\nimport { stopSignalType } from './actors/index.ts';\nimport { devToolsAdapter } from './dev/index.ts';\nimport { reportUnhandledError } from './reportUnhandledError.ts';\nimport { symbolObservable } from './symbolObservable.ts';\nimport { createSystem } from './system.ts';\nimport {\n AreAllImplementationsAssumedToBeProvided,\n MissingImplementationsError\n} from './typegenTypes.ts';\nimport type {\n ActorLogic,\n ActorContext,\n ActorSystem,\n AnyActorLogic,\n AnyStateMachine,\n EventFromLogic,\n PersistedStateFrom,\n SnapshotFrom,\n AnyActorRef\n} from './types.ts';\nimport {\n ActorRef,\n DoneEvent,\n EventObject,\n InteropSubscribable,\n ActorOptions,\n Observer,\n Subscription\n} from './types.ts';\nimport { toObserver } from './utils.ts';\n\nexport type SnapshotListener<TLogic extends AnyActorLogic> = (\n state: SnapshotFrom<TLogic>\n) => void;\n\nexport type EventListener<TEvent extends EventObject = EventObject> = (\n event: TEvent\n) => void;\n\nexport type Listener = () => void;\nexport type ErrorListener = (error: any) => void;\n\nexport interface Clock {\n setTimeout(fn: (...args: any[]) => void, timeout: number): any;\n clearTimeout(id: any): void;\n}\n\nexport enum ActorStatus {\n NotStarted,\n Running,\n Stopped\n}\n\n/**\n * @deprecated Use `ActorStatus` instead.\n */\nexport const InterpreterStatus = ActorStatus;\n\nconst defaultOptions = {\n deferEvents: true,\n clock: {\n setTimeout: (fn, ms) => {\n return setTimeout(fn, ms);\n },\n clearTimeout: (id) => {\n return clearTimeout(id);\n }\n } as Clock,\n logger: console.log.bind(console),\n devTools: false\n};\n\ntype InternalStateFrom<TLogic extends ActorLogic<any, any, any>> =\n TLogic extends ActorLogic<infer _, infer __, infer TInternalState>\n ? TInternalState\n : never;\n\nexport class Actor<\n TLogic extends AnyActorLogic,\n TEvent extends EventObject = EventFromLogic<TLogic>\n> implements ActorRef<TEvent, SnapshotFrom<TLogic>>\n{\n /**\n * The current internal state of the actor.\n */\n private _state!: InternalStateFrom<TLogic>;\n /**\n * The clock that is responsible for setting and clearing timeouts, such as delayed events and transitions.\n */\n public clock: Clock;\n public options: Readonly<ActorOptions<TLogic>>;\n\n /**\n * The unique identifier for this actor relative to its parent.\n */\n public id: string;\n\n private mailbox: Mailbox<TEvent> = new Mailbox(this._process.bind(this));\n\n private delayedEventsMap: Record<string, unknown> = {};\n\n private observers: Set<Observer<SnapshotFrom<TLogic>>> = new Set();\n private logger: (...args: any[]) => void;\n /**\n * Whether the service is started.\n */\n public status: ActorStatus = ActorStatus.NotStarted;\n\n // Actor Ref\n public _parent?: ActorRef<any>;\n public ref: ActorRef<TEvent>;\n // TODO: add typings for system\n private _actorContext: ActorContext<TEvent, SnapshotFrom<TLogic>, any>;\n\n private _systemId: string | undefined;\n\n /**\n * The globally unique process ID for this invocation.\n */\n public sessionId: string;\n\n public system: ActorSystem<any>;\n private _doneEvent?: DoneEvent;\n\n public src?: string;\n\n /**\n * Creates a new actor instance for the given logic with the provided options, if any.\n *\n * @param logic The logic to create an actor from\n * @param options Actor options\n */\n constructor(public logic: TLogic, options?: ActorOptions<TLogic>) {\n const resolvedOptions = {\n ...defaultOptions,\n ...options\n };\n\n const { clock, logger, parent, id, systemId } = resolvedOptions;\n const self = this;\n\n this.system = parent?.system ?? createSystem();\n\n if (systemId) {\n this._systemId = systemId;\n this.system._set(systemId, this);\n }\n\n this.sessionId = this.system._bookId();\n this.id = id ?? this.sessionId;\n this.logger = logger;\n this.clock = clock;\n this._parent = parent;\n this.options = resolvedOptions;\n this.src = resolvedOptions.src;\n this.ref = this;\n this._actorContext = {\n self,\n id: this.id,\n sessionId: this.sessionId,\n logger: this.logger,\n defer: (fn) => {\n this._deferred.push(fn);\n },\n system: this.system,\n stopChild: (child) => {\n if (child._parent !== this) {\n throw new Error(\n `Cannot stop child actor ${child.id} of ${this.id} because it is not a child`\n );\n }\n (child as any)._stop();\n }\n };\n\n // Ensure that the send method is bound to this Actor instance\n // if destructured\n this.send = this.send.bind(this);\n this._initState();\n }\n\n private _initState() {\n this._state = this.options.state\n ? this.logic.restoreState\n ? this.logic.restoreState(this.options.state, this._actorContext)\n : this.options.state\n : this.logic.getInitialState(this._actorContext, this.options?.input);\n }\n\n // array of functions to defer\n private _deferred: Array<() => void> = [];\n\n private update(state: InternalStateFrom<TLogic>): void {\n // Update state\n this._state = state;\n const snapshot = this.getSnapshot();\n\n // Execute deferred effects\n let deferredFn: (typeof this._deferred)[number] | undefined;\n\n while ((deferredFn = this._deferred.shift())) {\n deferredFn();\n }\n\n for (const observer of this.observers) {\n // TODO: should observers be notified in case of the error?\n try {\n observer.next?.(snapshot);\n } catch (err) {\n reportUnhandledError(err);\n }\n }\n\n const status = this.logic.getStatus?.(state);\n\n switch (status?.status) {\n case 'done':\n this._stopProcedure();\n this._complete();\n this._doneEvent = doneInvoke(this.id, status.data);\n this._parent?.send(this._doneEvent as any);\n break;\n case 'error':\n this._stopProcedure();\n this._error(status.data);\n this._parent?.send(error(this.id, status.data));\n break;\n }\n }\n\n public subscribe(observer: Observer<SnapshotFrom<TLogic>>): Subscription;\n public subscribe(\n nextListener?: (state: SnapshotFrom<TLogic>) => void,\n errorListener?: (error: any) => void,\n completeListener?: () => void\n ): Subscription;\n public subscribe(\n nextListenerOrObserver?:\n | ((state: SnapshotFrom<TLogic>) => void)\n | Observer<SnapshotFrom<TLogic>>,\n errorListener?: (error: any) => void,\n completeListener?: () => void\n ): Subscription {\n const observer = toObserver(\n nextListenerOrObserver,\n errorListener,\n completeListener\n );\n\n if (this.status !== ActorStatus.Stopped) {\n this.observers.add(observer);\n } else {\n try {\n observer.complete?.();\n } catch (err) {\n reportUnhandledError(err);\n }\n }\n\n return {\n unsubscribe: () => {\n this.observers.delete(observer);\n }\n };\n }\n\n /**\n * Starts the Actor from the initial state\n */\n public start(): this {\n if (this.status === ActorStatus.Running) {\n // Do not restart the service if it is already started\n return this;\n }\n\n this.system._register(this.sessionId, this);\n if (this._systemId) {\n this.system._set(this._systemId, this);\n }\n this.status = ActorStatus.Running;\n\n const status = this.logic.getStatus?.(this._state);\n\n switch (status?.status) {\n case 'done':\n // a state machine can be \"done\" upon intialization (it could reach a final state using initial microsteps)\n // we still need to complete observers, flush deferreds etc\n this.update(this._state);\n // fallthrough\n case 'error':\n // TODO: rethink cleanup of observers, mailbox, etc\n return this;\n }\n\n if (this.logic.start) {\n try {\n this.logic.start(this._state, this._actorContext);\n } catch (err) {\n this._stopProcedure();\n this._error(err);\n this._parent?.send(error(this.id, err));\n return this;\n }\n }\n\n // TODO: this notifies all subscribers but usually this is redundant\n // there is no real change happening here\n // we need to rethink if this needs to be refactored\n this.update(this._state);\n\n if (this.options.devTools) {\n this.attachDevTools();\n }\n\n this.mailbox.start();\n\n return this;\n }\n\n private _process(event: TEvent) {\n // TODO: reexamine what happens when an action (or a guard or smth) throws\n let nextState;\n let caughtError;\n try {\n nextState = this.logic.transition(this._state, event, this._actorContext);\n } catch (err) {\n // we wrap it in a box so we can rethrow it later even if falsy value gets caught here\n caughtError = { err };\n }\n\n if (caughtError) {\n const { err } = caughtError;\n\n this._stopProcedure();\n this._error(err);\n this._parent?.send(error(this.id, err));\n return;\n }\n\n this.update(nextState);\n if (event.type === stopSignalType) {\n this._stopProcedure();\n this._complete();\n }\n }\n\n private _stop(): this {\n if (this.status === ActorStatus.Stopped) {\n return this;\n }\n this.mailbox.clear();\n if (this.status === ActorStatus.NotStarted) {\n this.status = ActorStatus.Stopped;\n return this;\n }\n this.mailbox.enqueue({ type: stopSignalType } as any);\n\n return this;\n }\n\n /**\n * Stops the Actor and unsubscribe all listeners.\n */\n public stop(): this {\n if (this._parent) {\n throw new Error('A non-root actor cannot be stopped directly.');\n }\n return this._stop();\n }\n private _complete(): void {\n for (const observer of this.observers) {\n try {\n observer.complete?.();\n } catch (err) {\n reportUnhandledError(err);\n }\n }\n this.observers.clear();\n }\n private _error(err: unknown): void {\n if (!this.observers.size) {\n if (!this._parent) {\n reportUnhandledError(err);\n }\n return;\n }\n let reportError = false;\n\n for (const observer of this.observers) {\n const errorListener = observer.error;\n reportError ||= !errorListener;\n try {\n errorListener?.(err);\n } catch (err2) {\n reportUnhandledError(err2);\n }\n }\n this.observers.clear();\n if (reportError) {\n reportUnhandledError(err);\n }\n }\n private _stopProcedure(): this {\n if (this.status !== ActorStatus.Running) {\n // Actor already stopped; do nothing\n return this;\n }\n\n // Cancel all delayed events\n for (const key of Object.keys(this.delayedEventsMap)) {\n this.clock.clearTimeout(this.delayedEventsMap[key]);\n }\n\n // TODO: mailbox.reset\n this.mailbox.clear();\n // TODO: after `stop` we must prepare ourselves for receiving events again\n // events sent *after* stop signal must be queued\n // it seems like this should be the common behavior for all of our consumers\n // so perhaps this should be unified somehow for all of them\n this.mailbox = new Mailbox(this._process.bind(this));\n\n this.status = ActorStatus.Stopped;\n this.system._unregister(this);\n\n return this;\n }\n\n /**\n * Sends an event to the running Actor to trigger a transition.\n *\n * @param event The event to send\n */\n public send(event: TEvent) {\n if (typeof event === 'string') {\n throw new Error(\n `Only event objects may be sent to actors; use .send({ type: \"${event}\" }) instead`\n );\n }\n\n if (this.status === ActorStatus.Stopped) {\n // do nothing\n if (isDevelopment) {\n const eventString = JSON.stringify(event);\n\n console.warn(\n `Event \"${event.type.toString()}\" was sent to stopped actor \"${\n this.id\n } (${\n this.sessionId\n })\". This actor has already reached its final state, and will not transition.\\nEvent: ${eventString}`\n );\n }\n return;\n }\n\n if (this.status !== ActorStatus.Running && !this.options.deferEvents) {\n throw new Error(\n `Event \"${event.type}\" was sent to uninitialized actor \"${\n this.id\n // tslint:disable-next-line:max-line-length\n }\". Make sure .start() is called for this actor, or set { deferEvents: true } in the actor options.\\nEvent: ${JSON.stringify(\n event\n )}`\n );\n }\n\n this.mailbox.enqueue(event);\n }\n\n // TODO: make private (and figure out a way to do this within the machine)\n public delaySend({\n event,\n id,\n delay,\n to\n }: {\n event: EventObject;\n id: string | undefined;\n delay: number;\n to?: AnyActorRef;\n }): void {\n const timerId = this.clock.setTimeout(() => {\n if (to) {\n to.send(event);\n } else {\n this.send(event as TEvent);\n }\n }, delay);\n\n // TODO: consider the rehydration story here\n if (id) {\n this.delayedEventsMap[id] = timerId;\n }\n }\n\n // TODO: make private (and figure out a way to do this within the machine)\n public cancel(sendId: string | number): void {\n this.clock.clearTimeout(this.delayedEventsMap[sendId]);\n delete this.delayedEventsMap[sendId];\n }\n\n private attachDevTools(): void {\n const { devTools } = this.options;\n if (devTools) {\n const resolvedDevToolsAdapter =\n typeof devTools === 'function' ? devTools : devToolsAdapter;\n\n resolvedDevToolsAdapter(this);\n }\n }\n public toJSON() {\n return {\n id: this.id\n };\n }\n\n public getPersistedState(): PersistedStateFrom<TLogic> | undefined {\n return this.logic.getPersistedState?.(this._state);\n }\n\n public [symbolObservable](): InteropSubscribable<SnapshotFrom<TLogic>> {\n return this;\n }\n\n public getSnapshot(): SnapshotFrom<TLogic> {\n return this.logic.getSnapshot\n ? this.logic.getSnapshot(this._state)\n : this._state;\n }\n}\n\n/**\n * Creates a new `ActorRef` instance for the given machine with the provided options, if any.\n *\n * @param machine The machine to create an actor from\n * @param options `ActorRef` options\n */\nexport function createActor<TMachine extends AnyStateMachine>(\n machine: AreAllImplementationsAssumedToBeProvided<\n TMachine['__TResolvedTypesMeta']\n > extends true\n ? TMachine\n : MissingImplementationsError<TMachine['__TResolvedTypesMeta']>,\n options?: ActorOptions<TMachine>\n): Actor<TMachine>;\nexport function createActor<TLogic extends AnyActorLogic>(\n logic: TLogic,\n options?: ActorOptions<TLogic>\n): Actor<TLogic>;\nexport function createActor(logic: any, options?: ActorOptions<any>): any {\n const interpreter = new Actor(logic, options);\n\n return interpreter;\n}\n\n/**\n * Creates a new Interpreter instance for the given machine with the provided options, if any.\n *\n * @deprecated Use `createActor` instead\n */\nexport const interpret = createActor;\n\n/**\n * @deprecated Use `Actor` instead.\n */\nexport type Interpreter = typeof Actor;\n","import { ActorSystem, ActorSystemInfo, AnyActorRef } from './types.js';\n\nexport function createSystem<T extends ActorSystemInfo>(): ActorSystem<T> {\n let sessionIdCounter = 0;\n const children = new Map<string, AnyActorRef>();\n const keyedActors = new Map<keyof T['actors'], AnyActorRef | undefined>();\n const reverseKeyedActors = new WeakMap<AnyActorRef, keyof T['actors']>();\n\n const system: ActorSystem<T> = {\n _bookId: () => `x:${sessionIdCounter++}`,\n _register: (sessionId, actorRef) => {\n children.set(sessionId, actorRef);\n return sessionId;\n },\n _unregister: (actorRef) => {\n children.delete(actorRef.sessionId);\n const systemId = reverseKeyedActors.get(actorRef);\n\n if (systemId !== undefined) {\n keyedActors.delete(systemId);\n reverseKeyedActors.delete(actorRef);\n }\n },\n get: (systemId) => {\n return keyedActors.get(systemId) as T['actors'][any];\n },\n _set: (systemId, actorRef) => {\n const existing = keyedActors.get(systemId);\n if (existing && existing !== actorRef) {\n throw new Error(\n `Actor with system ID '${systemId as string}' already exists.`\n );\n }\n\n keyedActors.set(systemId, actorRef);\n reverseKeyedActors.set(actorRef, systemId);\n }\n };\n\n return system;\n}\n","import isDevelopment from '#is-development';\nimport { AnyActorLogic, AnyState } from './index.ts';\nimport { errorExecution, errorPlatform } from './constantPrefixes.ts';\nimport { STATE_DELIMITER, TARGETLESS_KEY } from './constants.ts';\nimport type { StateNode } from './StateNode.ts';\nimport type {\n ActorLogic,\n AnyEventObject,\n EventObject,\n InvokeConfig,\n MachineContext,\n Mapper,\n Observer,\n ErrorEvent,\n SingleOrArray,\n StateLike,\n StateValue,\n Subscribable,\n TransitionConfig,\n TransitionConfigTarget,\n TODO,\n AnyActorRef,\n AnyTransitionConfig,\n AnyInvokeConfig\n} from './types.ts';\n\nexport function keys<T extends object>(value: T): Array<keyof T & string> {\n return Object.keys(value) as Array<keyof T & string>;\n}\n\nexport function matchesState(\n parentStateId: StateValue,\n childStateId: StateValue\n): boolean {\n const parentStateValue = toStateValue(parentStateId);\n const childStateValue = toStateValue(childStateId);\n\n if (typeof childStateValue === 'string') {\n if (typeof parentStateValue === 'string') {\n return childStateValue === parentStateValue;\n }\n\n // Parent more specific than child\n return false;\n }\n\n if (typeof parentStateValue === 'string') {\n return parentStateValue in childStateValue;\n }\n\n return Object.keys(parentStateValue).every((key) => {\n if (!(key in childStateValue)) {\n return false;\n }\n\n return matchesState(parentStateValue[key], childStateValue[key]);\n });\n}\n\nexport function toStatePath(stateId: string | string[]): string[] {\n try {\n if (isArray(stateId)) {\n return stateId;\n }\n\n return stateId.toString().split(STATE_DELIMITER);\n } catch (e) {\n throw new Error(`'${stateId}' is not a valid state path.`);\n }\n}\n\nexport function isStateLike(state: any): state is AnyState {\n return (\n typeof state === 'object' &&\n 'value' in state &&\n 'context' in state &&\n 'event' in state\n );\n}\n\nexport function toStateValue(\n stateValue: StateLike<any> | StateValue | string[]\n): StateValue {\n if (isStateLike(stateValue)) {\n return stateValue.value;\n }\n\n if (isArray(stateValue)) {\n return pathToStateValue(stateValue);\n }\n\n if (typeof stateValue !== 'string') {\n return stateValue as StateValue;\n }\n\n const statePath = toStatePath(stateValue as string);\n\n return pathToStateValue(statePath);\n}\n\nexport function pathToStateValue(statePath: string[]): StateValue {\n if (statePath.length === 1) {\n return statePath[0];\n }\n\n const value: StateValue = {};\n let marker = value;\n\n for (let i = 0; i < statePath.length - 1; i++) {\n if (i === statePath.length - 2) {\n marker[statePath[i]] = statePath[i + 1];\n } else {\n const previous = marker;\n marker = {};\n previous[statePath[i]] = marker;\n }\n }\n\n return value;\n}\n\nexport function mapValues<P, O extends Record<string, unknown>>(\n collection: O,\n iteratee: (item: O[keyof O], key: keyof O, collection: O, i: number) => P\n): { [key in keyof O]: P };\nexport function mapValues(\n collection: Record<string, unknown>,\n iteratee: (\n item: unknown,\n key: string,\n collection: Record<string, unknown>,\n i: number\n ) => unknown\n) {\n const result: Record<string, unknown> = {};\n\n const collectionKeys = Object.keys(collection);\n for (let i = 0; i < collectionKeys.length; i++) {\n const key = collectionKeys[i];\n result[key] = iteratee(collection[key], key, collection, i);\n }\n\n return result;\n}\n\nexport function mapFilterValues<T, P>(\n collection: { [key: string]: T },\n iteratee: (item: T, key: string, collection: { [key: string]: T }) => P,\n predicate: (item: T) => boolean\n): { [key: string]: P } {\n const result: { [key: string]: P } = {};\n\n for (const key of Object.keys(collection)) {\n const item = collection[key];\n\n if (!predicate(item)) {\n continue;\n }\n\n result[key] = iteratee(item, key, collection);\n }\n\n return result;\n}\n\n/**\n * Retrieves a value at the given path.\n * @param props The deep path to the prop of the desired value\n */\nexport function path<T extends Record<string, any>>(props: string[]): any {\n return (object: T): any => {\n let result: T = object;\n\n for (const prop of props) {\n result = result[prop as keyof typeof result];\n }\n\n return result;\n };\n}\n\nexport function toStatePaths(stateValue: StateValue | undefined): string[][] {\n if (!stateValue) {\n return [[]];\n }\n\n if (typeof stateValue === 'string') {\n return [[stateValue]];\n }\n\n const result = flatten(\n Object.keys(stateValue).map((key) => {\n const subStateValue = stateValue[key];\n\n if (\n typeof subStateValue !== 'string' &&\n (!subStateValue || !Object.keys(subStateValue).length)\n ) {\n return [[key]];\n }\n\n return toStatePaths(stateValue[key]).map((subPath) => {\n return [key].concat(subPath);\n });\n })\n );\n\n return result;\n}\n\nexport function flatten<T>(array: Array<T | T[]>): T[] {\n return ([] as T[]).concat(...array);\n}\n\nexport function toArrayStrict<T>(value: readonly T[] | T): readonly T[] {\n if (isArray(value)) {\n return value;\n }\n return [value];\n}\n\nexport function toArray<T>(value: readonly T[] | T | undefined): readonly T[] {\n if (value === undefined) {\n return [];\n }\n return toArrayStrict(value);\n}\n\nexport function mapContext<\n TContext extends MachineContext,\n TEvent extends EventObject\n>(\n mapper: Mapper<TContext, TEvent, any>,\n context: TContext,\n event: TEvent,\n self: AnyActorRef\n): any {\n if (typeof mapper === 'function') {\n return mapper({ context, event, self });\n }\n\n if (\n isDevelopment &&\n typeof mapper === 'object' &&\n Object.values(mapper).some((val) => typeof val === 'function')\n ) {\n console.warn(\n `Dynamically mapping values to individual properties is deprecated. Use a single function that returns the mapped object instead.\\nFound object containing properties whose values are possibly mapping functions: ${Object.entries(\n mapper\n )\n .filter(([key, value]) => typeof value === 'function')\n .map(\n ([key, value]) =>\n `\\n - ${key}: ${(value as () => any)\n .toString()\n .replace(/\\n\\s*/g, '')}`\n )\n .join('')}`\n );\n }\n\n return mapper;\n}\n\nexport function isBuiltInEvent(eventType: string): boolean {\n return /^(done|error)\\./.test(eventType);\n}\n\nexport function isPromiseLike(value: any): value is PromiseLike<any> {\n if (value instanceof Promise) {\n return true;\n }\n // Check if shape matches the Promise/A+ specification for a \"thenable\".\n if (\n value !== null &&\n (typeof value === 'function' || typeof value === 'object') &&\n typeof value.then === 'function'\n ) {\n return true;\n }\n return false;\n}\n\nexport function isActorLogic(value: any): value is ActorLogic<any, any> {\n return (\n value !== null &&\n typeof value === 'object' &&\n 'transition' in value &&\n typeof value.transition === 'function'\n );\n}\n\nexport function partition<T, A extends T, B extends T>(\n items: T[],\n predicate: (item: T) => item is A\n): [A[], B[]] {\n const [truthy, falsy] = [[], []] as [A[], B[]];\n\n for (const item of items) {\n if (predicate(item)) {\n truthy.push(item);\n } else {\n falsy.push(item as B);\n }\n }\n\n return [truthy, falsy];\n}\n\nexport function isArray(value: any): value is readonly any[] {\n return Array.isArray(value);\n}\n\nexport function isObservable<T>(value: any): value is Subscribable<T> {\n return (\n !!value && 'subscribe' in value && typeof value.subscribe === 'function'\n );\n}\n\nexport const uniqueId = (() => {\n let currentId = 0;\n\n return () => {\n currentId++;\n return currentId.toString(16);\n };\n})();\n\nexport function isErrorEvent(event: AnyEventObject): event is ErrorEvent<any> {\n return (\n typeof event.type === 'string' &&\n (event.type === errorExecution || event.type.startsWith(errorPlatform))\n );\n}\n\nexport function toTransitionConfigArray<\n TContext extends MachineContext,\n TEvent extends EventObject\n>(\n configLike: SingleOrArray<AnyTransitionConfig | TransitionConfigTarget>\n): Array<AnyTransitionConfig> {\n return toArrayStrict(configLike).map((transitionLike) => {\n if (\n typeof transitionLike === 'undefined' ||\n typeof transitionLike === 'string'\n ) {\n return { target: transitionLike };\n }\n\n return transitionLike;\n });\n}\n\nexport function normalizeTarget<\n TContext extends MachineContext,\n TEvent extends EventObject\n>(\n target: SingleOrArray<string | StateNode<TContext, TEvent>> | undefined\n): ReadonlyArray<string | StateNode<TContext, TEvent>> | undefined {\n if (target === undefined || target === TARGETLESS_KEY) {\n return undefined;\n }\n return toArray(target);\n}\n\nexport function reportUnhandledExceptionOnInvocation(\n originalError: any,\n currentError: any,\n id: string\n) {\n if (isDevelopment) {\n const originalStackTrace = originalError.stack\n ? ` Stacktrace was '${originalError.stack}'`\n : '';\n if (originalError === currentError) {\n // tslint:disable-next-line:no-console\n console.error(\n `Missing onError handler for invocation '${id}', error was '${originalError}'.${originalStackTrace}`\n );\n } else {\n const stackTrace = currentError.stack\n ? ` Stacktrace was '${currentError.stack}'`\n : '';\n // tslint:disable-next-line:no-console\n console.error(\n `Missing onError handler and/or unhandled exception/promise rejection for invocation '${id}'. ` +\n `Original error: '${originalError}'. ${originalStackTrace} Current error is '${currentError}'.${stackTrace}`\n );\n }\n }\n}\n\nexport function toInvokeConfig<\n TContext extends MachineContext,\n TEvent extends EventObject\n>(\n invocable: AnyInvokeConfig | string | AnyActorLogic,\n id: string\n): AnyInvokeConfig {\n if (typeof invocable === 'object') {\n if ('src' in invocable) {\n return invocable;\n }\n\n if ('transition' in invocable) {\n return {\n id,\n src: invocable\n };\n }\n }\n\n return {\n id,\n src: invocable\n };\n}\n\nexport function toObserver<T>(\n nextHandler?: Observer<T> | ((value: T) => void),\n errorHandler?: (error: any) => void,\n completionHandler?: () => void\n): Observer<T> {\n const isObserver = typeof nextHandler === 'object';\n const self = isObserver ? nextHandler : undefined;\n\n return {\n next: (isObserver ? nextHandler.next : nextHandler)?.bind(self),\n error: (isObserver ? nextHandler.error : errorHandler)?.bind(self),\n complete: (isObserver ? nextHandler.complete : completionHandler)?.bind(\n self\n )\n };\n}\n\nexport function createInvokeId(stateNodeId: string, index: number): string {\n return `${stateNodeId}:invocation[${index}]`;\n}\n\nexport function resolveReferencedActor(\n referenced:\n | AnyActorLogic\n | { src: AnyActorLogic; input: Mapper<any, any, any> | any }\n | undefined\n) {\n return referenced\n ? 'transition' in referenced\n ? { src: referenced, input: undefined }\n : referenced\n : undefined;\n}\n","import {\n ActorLogic,\n ActorContext,\n ActorSystem,\n EventObject,\n ActorRefFrom,\n AnyActorSystem\n} from '../types';\n\nexport type TransitionActorLogic<\n TState,\n TEvent extends EventObject,\n TInput\n> = ActorLogic<TEvent, TState, TState, TState, AnyActorSystem, TInput>;\n\nexport type TransitionActorRef<\n TState,\n TEvent extends EventObject\n> = ActorRefFrom<TransitionActorLogic<TState, TEvent, unknown>>;\n\n/**\n * Returns actor logic from a transition function and its initial state.\n *\n * A transition function is a function that takes the current state and an event and returns the next state.\n *\n * @param transition The transition function that returns the next state given the current state and event.\n * @param initialState The initial state of the transition function.\n * @returns Actor logic\n */\nexport function fromTransition<\n TState,\n TEvent extends EventObject,\n TSystem extends ActorSystem<any>,\n TInput\n>(\n transition: (\n state: TState,\n event: TEvent,\n actorContext: ActorContext<TEvent, TState, TSystem>\n ) => TState,\n initialState:\n | TState\n | (({\n input,\n self\n }: {\n input: TInput;\n self: TransitionActorRef<TState, TEvent>;\n }) => TState) // TODO: type\n): TransitionActorLogic<TState, TEvent, TInput> {\n return {\n config: transition,\n transition: (state, event, actorContext) => {\n return transition(state, event as TEvent, actorContext as any);\n },\n getInitialState: (_, input) => {\n return typeof initialState === 'function'\n ? (initialState as any)({ input })\n : initialState;\n },\n getSnapshot: (state) => state,\n getPersistedState: (state) => state,\n restoreState: (state) => state\n };\n}\n","import {\n ActorLogic,\n ActorRefFrom,\n ActorSystem,\n AnyActorSystem\n} from '../types';\nimport { stopSignalType } from '../actors';\n\nexport interface PromiseInternalState<T, TInput = unknown> {\n status: 'active' | 'error' | 'done' | 'canceled';\n data: T | undefined;\n input: TInput | undefined;\n}\n\nconst resolveEventType = '$$xstate.resolve';\nconst rejectEventType = '$$xstate.reject';\n\nexport type PromiseActorEvents<T> =\n | {\n type: typeof resolveEventType;\n data: T;\n }\n | {\n type: typeof rejectEventType;\n data: any;\n }\n | {\n type: 'xstate.stop';\n };\n\nexport type PromiseActorLogic<T, TInput = unknown> = ActorLogic<\n { type: string; [k: string]: unknown },\n T | undefined,\n PromiseInternalState<T, TInput>, // internal state\n PromiseInternalState<T, TInput>, // persisted state\n ActorSystem<any>,\n TInput, // input\n T // output\n>;\n\nexport type PromiseActorRef<T> = ActorRefFrom<PromiseActorLogic<T>>;\n\nexport function fromPromise<T, TInput>(\n // TODO: add types\n promiseCreator: ({\n input,\n system\n }: {\n input: TInput;\n system: AnyActorSystem;\n self: PromiseActorRef<T>;\n }) => PromiseLike<T>\n): PromiseActorLogic<T, TInput> {\n // TODO: add event types\n const logic: PromiseActorLogic<T, TInput> = {\n config: promiseCreator,\n transition: (state, event) => {\n if (state.status !== 'active') {\n return state;\n }\n\n switch (event.type) {\n case resolveEventType:\n return {\n ...state,\n status: 'done',\n data: (event as any).data,\n input: undefined\n };\n case rejectEventType:\n return {\n ...state,\n status: 'error',\n data: (event as any).data, // TODO: if we keep this as `data` we should reflect this in the type\n input: undefined\n };\n case stopSignalType:\n return {\n ...state,\n status: 'canceled',\n input: undefined\n };\n default:\n return state;\n }\n },\n start: (state, { self, system }) => {\n // TODO: determine how to allow customizing this so that promises\n // can be restarted if necessary\n if (state.status !== 'active') {\n return;\n }\n\n const resolvedPromise = Promise.resolve(\n promiseCreator({ input: state.input!, system, self })\n );\n\n resolvedPromise.then(\n (response) => {\n // TODO: remove this condition once dead letter queue lands\n if ((self as any)._state.status !== 'active') {\n return;\n }\n self.send({ type: resolveEventType, data: response });\n },\n (errorData) => {\n // TODO: remove this condition once dead letter queue lands\n if ((self as any)._state.status !== 'active') {\n return;\n }\n self.send({ type: rejectEventType, data: errorData });\n }\n );\n },\n getInitialState: (_, input) => {\n return {\n status: 'active',\n data: undefined,\n input\n };\n },\n getSnapshot: (state) => state.data,\n getStatus: (state) => state,\n getPersistedState: (state) => state,\n restoreState: (state) => state\n };\n\n return logic;\n}\n","import { ActorStatus, createActor } from '../interpreter.ts';\nimport { symbolObservable } from '../symbolObservable.ts';\nimport type {\n ActorRef,\n AnyEventObject,\n BaseActorRef,\n EventObject\n} from '../types.ts';\nimport { fromTransition } from './transition.ts';\nexport { fromCallback, type CallbackActorLogic } from './callback.ts';\nexport { fromEventObservable, fromObservable } from './observable.ts';\nexport { fromPromise, type PromiseActorLogic } from './promise.ts';\nexport { fromTransition } from './transition.ts';\n\nexport const startSignalType = 'xstate.init';\nexport const stopSignalType = 'xstate.stop';\nexport const startSignal: StartSignal = { type: 'xstate.init' };\nexport const stopSignal: StopSignal = { type: 'xstate.stop' };\n\nexport interface StartSignal {\n type: 'xstate.init';\n}\n\nexport interface StopSignal {\n type: 'xstate.stop';\n}\n\nexport type LifecycleSignal = StartSignal | StopSignal;\nexport type LifecycleSignalType =\n | typeof startSignalType\n | typeof stopSignalType;\n\n/**\n * An object that expresses the actor logic in reaction to received events,\n * as well as an optionally emitted stream of values.\n *\n * @template TReceived The received event\n * @template TSnapshot The emitted value\n */\n\nexport function isSignal(event: EventObject): event is LifecycleSignal {\n return event.type === startSignalType || event.type === stopSignalType;\n}\n\nexport function isActorRef(item: any): item is ActorRef<any> {\n return !!item && typeof item === 'object' && typeof item.send === 'function';\n}\n\n// TODO: refactor the return type, this could be written in a better way\n// but it's best to avoid unneccessary breaking changes now\n// @deprecated use `interpret(actorLogic)` instead\nexport function toActorRef<\n TEvent extends EventObject,\n TSnapshot = any,\n TActorRefLike extends BaseActorRef<TEvent> = BaseActorRef<TEvent>\n>(\n actorRefLike: TActorRefLike\n): ActorRef<TEvent, TSnapshot> & Omit<TActorRefLike, keyof ActorRef<any, any>> {\n return {\n subscribe: () => ({ unsubscribe: () => void 0 }),\n id: 'anonymous',\n sessionId: '',\n getSnapshot: () => undefined as TSnapshot, // TODO: this isn't safe\n [symbolObservable]: function () {\n return this;\n },\n status: ActorStatus.Running,\n stop: () => void 0,\n ...actorRefLike\n };\n}\n\nconst emptyLogic = fromTransition((_) => undefined, undefined);\n\nexport function createEmptyActor(): ActorRef<AnyEventObject, undefined> {\n return createActor(emptyLogic);\n}\n","import {\n ActorLogic,\n EventObject,\n AnyActorSystem,\n AnyEventObject,\n ActorSystem,\n ActorRefFrom,\n TODO\n} from '../types';\nimport { isPromiseLike } from '../utils';\nimport { doneInvoke, error } from '../actions.ts';\nimport { startSignalType, stopSignalType, isSignal } from '../actors/index.ts';\n\nexport interface CallbackInternalState<\n TEvent extends EventObject,\n TInput = unknown\n> {\n canceled: boolean;\n receivers: Set<(e: TEvent) => void>;\n dispose: void | (() => void) | Promise<any>;\n input: TInput;\n}\n\nexport type CallbackActorLogic<\n TEvent extends EventObject,\n TInput = unknown\n> = ActorLogic<\n TEvent,\n undefined,\n CallbackInternalState<TEvent, TInput>,\n Pick<CallbackInternalState<TEvent, TInput>, 'input' | 'canceled'>,\n ActorSystem<any>,\n TInput,\n any\n>;\n\nexport type CallbackActorRef<\n TEvent extends EventObject,\n TInput = unknown\n> = ActorRefFrom<CallbackActorLogic<TEvent, TInput>>;\n\nexport type Receiver<TEvent extends EventObject> = (\n listener: {\n bivarianceHack(event: TEvent): void;\n }['bivarianceHack']\n) => void;\n\nexport type InvokeCallback<\n TEvent extends EventObject = AnyEventObject,\n TSentEvent extends EventObject = AnyEventObject,\n TInput = unknown\n> = ({\n input,\n system,\n self,\n sendBack,\n receive\n}: {\n input: TInput;\n system: AnyActorSystem;\n self: CallbackActorRef<TEvent>;\n sendBack: (event: TSentEvent) => void;\n receive: Receiver<TEvent>;\n}) => (() => void) | Promise<any> | void;\n\nexport function fromCallback<TEvent extends EventObject, TInput>(\n invokeCallback: InvokeCallback<TEvent, AnyEventObject, TInput>\n): CallbackActorLogic<TEvent, TInput> {\n return {\n config: invokeCallback,\n start: (_state, { self }) => {\n self.send({ type: startSignalType } as TEvent);\n },\n transition: (state, event, { self, id, system }) => {\n if (event.type === startSignalType) {\n const sendBack = (eventForParent: AnyEventObject) => {\n if (state.canceled) {\n return;\n }\n\n self._parent?.send(eventForParent);\n };\n\n const receive: Receiver<TEvent> = (newListener) => {\n state.receivers.add(newListener);\n };\n\n state.dispose = invokeCallback({\n input: state.input,\n system,\n self: self as TODO,\n sendBack,\n receive\n });\n\n if (isPromiseLike(state.dispose)) {\n state.dispose.then(\n (resolved) => {\n self._parent?.send(doneInvoke(id, resolved));\n state.canceled = true;\n },\n (errorData) => {\n state.canceled = true;\n self._parent?.send(error(id, errorData));\n }\n );\n }\n return state;\n }\n\n if (event.type === stopSignalType) {\n state.canceled = true;\n\n if (typeof state.dispose === 'function') {\n state.dispose();\n }\n return state;\n }\n\n if (isSignal(event)) {\n // TODO: unrecognized signal\n return state;\n }\n\n state.receivers.forEach((receiver) => receiver(event));\n\n return state;\n },\n getInitialState: (_, input) => {\n return {\n canceled: false,\n receivers: new Set(),\n dispose: undefined,\n input\n };\n },\n getSnapshot: () => undefined,\n getPersistedState: ({ input, canceled }) => ({ input, canceled })\n };\n}\n","import {\n Subscribable,\n ActorLogic,\n EventObject,\n Subscription,\n AnyActorSystem,\n ActorRefFrom\n} from '../types';\nimport { stopSignalType } from '../actors';\n\nexport interface ObservableInternalState<T, TInput = unknown> {\n subscription: Subscription | undefined;\n status: 'active' | 'done' | 'error' | 'canceled';\n data: T | undefined;\n input: TInput | undefined;\n}\n\nexport type ObservablePersistedState<T, TInput = unknown> = Omit<\n ObservableInternalState<T, TInput>,\n 'subscription'\n>;\n\nexport type ObservableActorLogic<T, TInput> = ActorLogic<\n { type: string; [k: string]: unknown },\n T | undefined,\n ObservableInternalState<T, TInput>,\n ObservablePersistedState<T, TInput>,\n AnyActorSystem,\n TInput\n>;\n\nexport type ObservableActorRef<T> = ActorRefFrom<ObservableActorLogic<T, any>>;\n\nexport function fromObservable<T, TInput>(\n observableCreator: ({\n input,\n system\n }: {\n input: TInput;\n system: AnyActorSystem;\n self: ObservableActorRef<T>;\n }) => Subscribable<T>\n): ObservableActorLogic<T, TInput> {\n const nextEventType = '$$xstate.next';\n const errorEventType = '$$xstate.error';\n const completeEventType = '$$xstate.complete';\n\n return {\n config: observableCreator,\n transition: (state, event, { self, id, defer }) => {\n if (state.status !== 'active') {\n return state;\n }\n\n switch (event.type) {\n case nextEventType:\n // match the exact timing of events sent by machines\n // send actions are not executed immediately\n defer(() => {\n self._parent?.send({\n type: `xstate.snapshot.${id}`,\n data: event.data\n });\n });\n return {\n ...state,\n data: (event as any).data\n };\n case errorEventType:\n return {\n ...state,\n status: 'error',\n input: undefined,\n data: (event as any).data, // TODO: if we keep this as `data` we should reflect this in the type\n subscription: undefined\n };\n case completeEventType:\n return {\n ...state,\n status: 'done',\n input: undefined,\n subscription: undefined\n };\n case stopSignalType:\n state.subscription!.unsubscribe();\n return {\n ...state,\n status: 'canceled',\n input: undefined,\n subscription: undefined\n };\n default:\n return state;\n }\n },\n getInitialState: (_, input) => {\n return {\n subscription: undefined,\n status: 'active',\n data: undefined,\n input\n };\n },\n start: (state, { self, system }) => {\n if (state.status === 'done') {\n // Do not restart a completed observable\n return;\n }\n state.subscription = observableCreator({\n input: state.input!,\n system,\n self\n }).subscribe({\n next: (value) => {\n self.send({ type: nextEventType, data: value });\n },\n error: (err) => {\n self.send({ type: errorEventType, data: err });\n },\n complete: () => {\n self.send({ type: completeEventType });\n }\n });\n },\n getSnapshot: (state) => state.data,\n getPersistedState: ({ status, data, input }) => ({\n status,\n data,\n input\n }),\n getStatus: (state) => state,\n restoreState: (state) => ({\n ...state,\n subscription: undefined\n })\n };\n}\n\n/**\n * Creates event observable logic that listens to an observable\n * that delivers event objects.\n *\n *\n * @param lazyObservable A function that creates an observable\n * @returns Event observable logic\n */\n\nexport function fromEventObservable<T extends EventObject, TInput>(\n lazyObservable: ({\n input,\n system\n }: {\n input: TInput;\n system: AnyActorSystem;\n self: ObservableActorRef<T>;\n }) => Subscribable<T>\n): ObservableActorLogic<T, TInput> {\n const errorEventType = '$$xstate.error';\n const completeEventType = '$$xstate.complete';\n\n // TODO: event types\n return {\n config: lazyObservable,\n transition: (state, event) => {\n if (state.status !== 'active') {\n return state;\n }\n\n switch (event.type) {\n case errorEventType:\n return {\n ...state,\n status: 'error',\n input: undefined,\n data: (event as any).data, // TODO: if we keep this as `data` we should reflect this in the type\n subscription: undefined\n };\n case completeEventType:\n return {\n ...state,\n status: 'done',\n input: undefined,\n subscription: undefined\n };\n case stopSignalType:\n state.subscription!.unsubscribe();\n return {\n ...state,\n status: 'canceled',\n input: undefined,\n subscription: undefined\n };\n default:\n return state;\n }\n },\n getInitialState: (_, input) => {\n return {\n subscription: undefined,\n status: 'active',\n data: undefined,\n input\n };\n },\n start: (state, { self, system }) => {\n if (state.status === 'done') {\n // Do not restart a completed observable\n return;\n }\n\n state.subscription = lazyObservable({\n input: state.input!,\n system,\n self\n }).subscribe({\n next: (value) => {\n self._parent?.send(value);\n },\n error: (err) => {\n self.send({ type: errorEventType, data: err });\n },\n complete: () => {\n self.send({ type: completeEventType });\n }\n });\n },\n getSnapshot: (_) => undefined,\n getPersistedState: ({ status, data, input }) => ({\n status,\n data,\n input\n }),\n getStatus: (state) => state,\n restoreState: (state) => ({\n ...state,\n subscription: undefined\n })\n };\n}\n"],"names":["Mailbox","constructor","_process","this","_active","_current","_last","start","flush","clear","next","prepend","event","value","enqueue","enqueued","consumed","ConstantPrefix","doneInvoke","invokeId","output","type","DoneInvoke","eventObject","error","id","data","ErrorPlatform","getDevTools","w","globalThis","self","window","__xstate__","devToolsAdapter","service","devTools","register","reportUnhandledError","err","setTimeout","symbolObservable","Symbol","observable","ActorStatus","defaultOptions","deferEvents","clock","fn","ms","clearTimeout","logger","console","log","bind","Actor","logic","options","_state","mailbox","delayedEventsMap","observers","Set","status","NotStarted","_parent","ref","_actorContext","_systemId","sessionId","system","_doneEvent","src","_deferred","resolvedOptions","parent","systemId","sessionIdCounter","children","Map","keyedActors","reverseKeyedActors","WeakMap","_bookId","_register","actorRef","set","_unregister","delete","get","undefined","_set","existing","Error","createSystem","defer","push","stopChild","child","_stop","send","_initState","state","restoreState","getInitialState","input","update","snapshot","getSnapshot","deferredFn","shift","observer","getStatus","_stopProcedure","_complete","_error","subscribe","nextListenerOrObserver","errorListener","completeListener","nextHandler","errorHandler","completionHandler","isObserver","complete","toObserver","Stopped","add","unsubscribe","Running","attachDevTools","nextState","caughtError","transition","stopSignalType","stop","size","reportError","err2","key","Object","keys","JSON","stringify","delaySend","delay","to","timerId","cancel","sendId","toJSON","getPersistedState","fromTransition","initialState","config","actorContext","_","resolveEventType","rejectEventType","startSignalType","isSignal","emptyLogic","invokeCallback","sendBack","eventForParent","canceled","receive","newListener","receivers","dispose","Promise","then","resolved","errorData","forEach","receiver","lazyObservable","errorEventType","completeEventType","subscription","observableCreator","nextEventType","promiseCreator","resolve","response","item","actorRefLike"],"mappings":"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"}