xstate 5.32.2 → 6.0.0-alpha.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +25 -24
- package/dist/StateMachine-0aa98f54.development.esm.js +746 -0
- package/dist/StateMachine-aef700df.cjs.js +732 -0
- package/dist/StateMachine-d4931336.esm.js +729 -0
- package/dist/StateMachine-da872dde.development.cjs.js +749 -0
- package/dist/declarations/src/State.d.ts +11 -13
- package/dist/declarations/src/StateMachine.d.ts +40 -26
- package/dist/declarations/src/StateNode.d.ts +18 -54
- package/dist/declarations/src/actions.d.ts +14 -9
- package/dist/declarations/src/actors/callback.d.ts +42 -16
- package/dist/declarations/src/actors/index.d.ts +9 -6
- package/dist/declarations/src/actors/listener.d.ts +18 -0
- package/dist/declarations/src/actors/logic.d.ts +105 -0
- package/dist/declarations/src/actors/observable.d.ts +72 -27
- package/dist/declarations/src/actors/promise.d.ts +133 -48
- package/dist/declarations/src/actors/subscription.d.ts +22 -0
- package/dist/declarations/src/createActor.d.ts +33 -34
- package/dist/declarations/src/createMachine.d.ts +38 -7
- package/dist/declarations/src/createMachineFromConfig.d.ts +177 -0
- package/dist/declarations/src/graph/graph.d.ts +6 -4
- package/dist/declarations/src/graph/shortestPaths.d.ts +2 -2
- package/dist/declarations/src/graph/simplePaths.d.ts +2 -2
- package/dist/declarations/src/index.d.ts +13 -9
- package/dist/declarations/src/inspection.d.ts +84 -30
- package/dist/declarations/src/mapState.d.ts +4 -2
- package/dist/declarations/src/schema.types.d.ts +90 -0
- package/dist/declarations/src/serialize.d.ts +50 -0
- package/dist/declarations/src/setup.d.ts +396 -136
- package/dist/declarations/src/spawn.d.ts +7 -32
- package/dist/declarations/src/stateUtils.d.ts +22 -19
- package/dist/declarations/src/system.d.ts +8 -7
- package/dist/declarations/src/transition.d.ts +8 -5
- package/dist/declarations/src/transitionActions.d.ts +4 -0
- package/dist/declarations/src/types.d.ts +494 -429
- package/dist/declarations/src/types.v6.d.ts +423 -0
- package/dist/declarations/src/utils.d.ts +5 -3
- package/dist/index-219cb621.development.cjs.js +4476 -0
- package/dist/index-2f2fbd9b.development.esm.js +4421 -0
- package/dist/index-559ceab3.cjs.js +4437 -0
- package/dist/index-8828376f.esm.js +4382 -0
- package/dist/xstate-actors.cjs.js +12 -838
- package/dist/xstate-actors.cjs.mjs +10 -5
- package/dist/xstate-actors.development.cjs.js +12 -838
- package/dist/xstate-actors.development.cjs.mjs +10 -5
- package/dist/xstate-actors.development.esm.js +1 -836
- package/dist/xstate-actors.esm.js +1 -836
- package/dist/xstate-actors.umd.min.js +1 -1
- package/dist/xstate-actors.umd.min.js.map +1 -1
- package/dist/xstate-graph.cjs.js +18 -29
- package/dist/xstate-graph.development.cjs.js +18 -29
- package/dist/xstate-graph.development.esm.js +15 -26
- package/dist/xstate-graph.esm.js +15 -26
- package/dist/xstate-graph.umd.min.js +1 -1
- package/dist/xstate-graph.umd.min.js.map +1 -1
- package/dist/xstate.cjs.js +1477 -122
- package/dist/xstate.cjs.mjs +19 -22
- package/dist/xstate.development.cjs.js +1477 -122
- package/dist/xstate.development.cjs.mjs +19 -22
- package/dist/xstate.development.esm.js +1442 -86
- package/dist/xstate.esm.js +1442 -86
- package/dist/xstate.umd.min.js +1 -1
- package/dist/xstate.umd.min.js.map +1 -1
- package/package.json +3 -47
- package/dist/StateMachine-23c204bb.development.esm.js +0 -566
- package/dist/StateMachine-67a0f463.development.cjs.js +0 -569
- package/dist/StateMachine-94d215e3.cjs.js +0 -563
- package/dist/StateMachine-d1d80308.esm.js +0 -560
- package/dist/assign-43b1b558.development.esm.js +0 -133
- package/dist/assign-54b312bc.esm.js +0 -127
- package/dist/assign-b5bc78f7.cjs.js +0 -129
- package/dist/assign-f8f66278.development.cjs.js +0 -135
- package/dist/declarations/src/actions/assign.d.ts +0 -45
- package/dist/declarations/src/actions/cancel.d.ts +0 -39
- package/dist/declarations/src/actions/emit.d.ts +0 -44
- package/dist/declarations/src/actions/enqueueActions.d.ts +0 -57
- package/dist/declarations/src/actions/log.d.ts +0 -16
- package/dist/declarations/src/actions/raise.d.ts +0 -21
- package/dist/declarations/src/actions/send.d.ts +0 -42
- package/dist/declarations/src/actions/spawnChild.d.ts +0 -34
- package/dist/declarations/src/actions/stopChild.d.ts +0 -19
- package/dist/declarations/src/actors/transition.d.ts +0 -143
- package/dist/declarations/src/dev/index.d.ts +0 -14
- package/dist/declarations/src/guards.d.ts +0 -128
- package/dist/log-9b02c355.esm.js +0 -401
- package/dist/log-c94995c7.cjs.js +0 -409
- package/dist/log-d9f3f459.development.cjs.js +0 -437
- package/dist/log-db444cad.development.esm.js +0 -429
- package/dist/raise-235108c6.esm.js +0 -2762
- package/dist/raise-45f11c00.development.esm.js +0 -2824
- package/dist/raise-c445379d.cjs.js +0 -2817
- package/dist/raise-eca73993.development.cjs.js +0 -2879
- package/dist/xstate-actions.cjs.d.mts +0 -2
- package/dist/xstate-actions.cjs.d.ts +0 -2
- package/dist/xstate-actions.cjs.js +0 -23
- package/dist/xstate-actions.cjs.mjs +0 -14
- package/dist/xstate-actions.development.cjs.js +0 -23
- package/dist/xstate-actions.development.cjs.mjs +0 -14
- package/dist/xstate-actions.development.esm.js +0 -4
- package/dist/xstate-actions.esm.js +0 -4
- package/dist/xstate-actions.umd.min.js +0 -2
- package/dist/xstate-actions.umd.min.js.map +0 -1
- package/dist/xstate-dev.cjs.d.mts +0 -2
- package/dist/xstate-dev.cjs.d.ts +0 -2
- package/dist/xstate-dev.cjs.js +0 -48
- package/dist/xstate-dev.cjs.mjs +0 -5
- package/dist/xstate-dev.development.cjs.js +0 -51
- package/dist/xstate-dev.development.cjs.mjs +0 -5
- package/dist/xstate-dev.development.esm.js +0 -45
- package/dist/xstate-dev.esm.js +0 -42
- package/dist/xstate-dev.umd.min.js +0 -2
- package/dist/xstate-dev.umd.min.js.map +0 -1
- package/dist/xstate-guards.cjs.d.mts +0 -2
- package/dist/xstate-guards.cjs.d.ts +0 -2
- package/dist/xstate-guards.cjs.js +0 -14
- package/dist/xstate-guards.cjs.mjs +0 -7
- package/dist/xstate-guards.development.cjs.js +0 -14
- package/dist/xstate-guards.development.cjs.mjs +0 -7
- package/dist/xstate-guards.development.esm.js +0 -2
- package/dist/xstate-guards.esm.js +0 -2
- package/dist/xstate-guards.umd.min.js +0 -2
- package/dist/xstate-guards.umd.min.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xstate.umd.min.js","sources":["../src/Mailbox.ts","../src/constants.ts","../src/dev/index.ts","../src/eventUtils.ts","../src/reportUnhandledError.ts","../src/symbolObservable.ts","../src/utils.ts","../src/system.ts","../src/createActor.ts","../src/actions/cancel.ts","../src/actions/spawnChild.ts","../src/actions/stopChild.ts","../src/guards.ts","../src/stateUtils.ts","../src/State.ts","../src/spawn.ts","../src/actions/assign.ts","../src/actions/emit.ts","../src/actions/raise.ts","../src/types.ts","../src/actions/send.ts","../src/actions/enqueueActions.ts","../src/actions/log.ts","../src/actors/transition.ts","../src/actors/callback.ts","../src/actors/observable.ts","../src/actors/promise.ts","../src/actors/index.ts","../src/memo.ts","../src/StateNode.ts","../src/StateMachine.ts","../src/createMachine.ts","../src/getNextSnapshot.ts","../src/waitFor.ts","../src/SimulatedClock.ts","../src/assert.ts","../src/transition.ts","../src/mapState.ts","../src/setup.ts","../src/toPromise.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 shouldn't start processing the enqueued item immediately\n if (this._current) {\n this._current.next = null;\n this._last = 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 this._current = consumed.next;\n }\n this._last = null;\n }\n}\n","export const STATE_DELIMITER = '.';\nexport const TARGETLESS_KEY = '';\nexport const NULL_EVENT = '';\nexport const STATE_IDENTIFIER = '#';\nexport const WILDCARD = '*';\nexport const XSTATE_INIT = 'xstate.init';\nexport const XSTATE_ERROR = 'xstate.error';\nexport const XSTATE_STOP = 'xstate.stop';\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","import { XSTATE_INIT } from './constants.ts';\nimport { DoneActorEvent, DoneStateEvent, ErrorActorEvent } from './types.ts';\n\n/**\n * Returns an event that represents an implicit event that is sent after the\n * 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 createAfterEvent(delayRef: number | string, id: string) {\n return { type: `xstate.after.${delayRef}.${id}` } as const;\n}\n\n/**\n * Returns an event that represents that a final state node has been reached in\n * 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 createDoneStateEvent(\n id: string,\n output?: unknown\n): DoneStateEvent {\n return {\n type: `xstate.done.state.${id}`,\n output\n };\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\n * node, 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 createDoneActorEvent(\n invokeId: string,\n output?: unknown\n): DoneActorEvent {\n return {\n type: `xstate.done.actor.${invokeId}`,\n output,\n actorId: invokeId\n };\n}\n\nexport function createErrorActorEvent(\n id: string,\n error?: unknown\n): ErrorActorEvent {\n return { type: `xstate.error.actor.${id}`, error, actorId: id };\n}\n\nexport function createInitEvent(input: unknown) {\n return { type: XSTATE_INIT, input } as const;\n}\n","/**\n * This function makes sure that unhandled errors are thrown in a separate\n * macrotask. It allows those errors to be detected by global error handlers and\n * reported to bug tracking services without interrupting our own stack of\n * 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 { isMachineSnapshot } from './State.ts';\nimport type { StateNode } from './StateNode.ts';\nimport { TARGETLESS_KEY, WILDCARD } from './constants.ts';\nimport type {\n AnyActorRef,\n AnyEventObject,\n AnyMachineSnapshot,\n AnyStateMachine,\n AnyTransitionConfig,\n ErrorActorEvent,\n EventObject,\n InvokeConfig,\n MachineContext,\n Mapper,\n NonReducibleUnknown,\n Observer,\n SingleOrArray,\n StateLike,\n StateValue,\n TransitionConfigTarget\n} from './types.ts';\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 if (isArray(stateId)) {\n return stateId;\n }\n\n const result: string[] = [];\n let segment = '';\n\n for (let i = 0; i < stateId.length; i++) {\n const char = stateId.charCodeAt(i);\n switch (char) {\n // \\\n case 92:\n // consume the next character\n segment += stateId[i + 1];\n // and skip over it\n i++;\n continue;\n // .\n case 46:\n result.push(segment);\n segment = '';\n continue;\n }\n segment += stateId[i];\n }\n\n result.push(segment);\n\n return result;\n}\n\nfunction toStateValue(stateValue: StateLike<any> | StateValue): StateValue {\n if (isMachineSnapshot(stateValue)) {\n return stateValue.value;\n }\n\n if (typeof stateValue !== 'string') {\n return stateValue as StateValue;\n }\n\n const statePath = toStatePath(stateValue);\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\nfunction 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 resolveOutput<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject\n>(\n mapper:\n | Mapper<TContext, TExpressionEvent, unknown, EventObject>\n | NonReducibleUnknown,\n context: TContext,\n event: TExpressionEvent,\n self: AnyActorRef\n): unknown {\n if (typeof mapper === 'function') {\n return mapper({ context, event, self });\n }\n\n if (\n isDevelopment &&\n !!mapper &&\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(([, 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\nfunction isArray(value: any): value is readonly any[] {\n return Array.isArray(value);\n}\n\nexport function isErrorActorEvent(\n event: AnyEventObject\n): event is ErrorActorEvent {\n return event.type.startsWith('xstate.error.actor');\n}\n\nexport function toTransitionConfigArray(\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 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 `${index}.${stateNodeId}`;\n}\n\nexport function resolveReferencedActor(machine: AnyStateMachine, src: string) {\n const match = src.match(/^xstate\\.invoke\\.(\\d+)\\.(.*)/)!;\n if (!match) {\n return machine.implementations.actors[src];\n }\n const [, indexStr, nodeId] = match;\n const node = machine.getStateNodeById(nodeId);\n const invokeConfig = node.config.invoke!;\n return (\n Array.isArray(invokeConfig)\n ? invokeConfig[indexStr as any]\n : (invokeConfig as InvokeConfig<\n any,\n any,\n any,\n any,\n any,\n any,\n any, // TEmitted\n any // TMeta\n >)\n ).src;\n}\n\nexport function getAllOwnEventDescriptors(snapshot: AnyMachineSnapshot) {\n return [...new Set([...snapshot._nodes.flatMap((sn) => sn.ownEvents)])];\n}\n\n/**\n * Checks if an event type matches an event descriptor, supporting wildcards.\n * Event descriptors can be:\n *\n * - Exact matches: \"event.type\"\n * - Wildcard: \"*\"\n * - Partial matches: \"event.*\"\n *\n * @param eventType - The actual event type string\n * @param descriptor - The event descriptor to match against\n * @returns True if the event type matches the descriptor\n */\nexport function matchesEventDescriptor(\n eventType: string,\n descriptor: string\n): boolean {\n if (descriptor === eventType) {\n return true;\n }\n\n if (descriptor === WILDCARD) {\n return true;\n }\n\n if (!descriptor.endsWith('.*')) {\n return false;\n }\n\n if (isDevelopment && /.*\\*.+/.test(descriptor)) {\n console.warn(\n `Wildcards can only be the last token of an event descriptor (e.g., \"event.*\") or the entire event descriptor (\"*\"). Check the \"${descriptor}\" event.`\n );\n }\n\n const partialEventTokens = descriptor.split('.');\n const eventTokens = eventType.split('.');\n\n for (\n let tokenIndex = 0;\n tokenIndex < partialEventTokens.length;\n tokenIndex++\n ) {\n const partialEventToken = partialEventTokens[tokenIndex];\n const eventToken = eventTokens[tokenIndex];\n\n if (partialEventToken === '*') {\n const isLastToken = tokenIndex === partialEventTokens.length - 1;\n\n if (isDevelopment && !isLastToken) {\n console.warn(\n `Infix wildcards in transition events are not allowed. Check the \"${descriptor}\" transition.`\n );\n }\n\n return isLastToken;\n }\n\n if (partialEventToken !== eventToken) {\n return false;\n }\n }\n\n return true;\n}\n","import { InspectionEvent } from './inspection.ts';\nimport {\n AnyEventObject,\n ActorSystemInfo,\n AnyActorRef,\n Observer,\n HomomorphicOmit,\n EventObject,\n Subscription\n} from './types.ts';\nimport { toObserver } from './utils.ts';\n\ninterface ScheduledEvent {\n id: string;\n event: EventObject;\n startedAt: number; // timestamp\n delay: number;\n source: AnyActorRef;\n target: AnyActorRef;\n}\n\nexport interface Clock {\n setTimeout(fn: (...args: any[]) => void, timeout: number): any;\n clearTimeout(id: any): void;\n}\n\ninterface Scheduler {\n schedule(\n source: AnyActorRef,\n target: AnyActorRef,\n event: EventObject,\n delay: number,\n id: string | undefined\n ): void;\n cancel(source: AnyActorRef, id: string): void;\n cancelAll(actorRef: AnyActorRef): void;\n}\n\ntype ScheduledEventId = string & { __scheduledEventId: never };\n\nfunction createScheduledEventId(\n actorRef: AnyActorRef,\n id: string\n): ScheduledEventId {\n return `${actorRef.sessionId}.${id}` as ScheduledEventId;\n}\n\nexport interface ActorSystem<T extends ActorSystemInfo> {\n /** @internal */\n _bookId: () => string;\n /** @internal */\n _register: (sessionId: string, actorRef: AnyActorRef) => string;\n /** @internal */\n _unregister: (actorRef: AnyActorRef) => void;\n /** @internal */\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 getAll: () => Partial<T['actors']>;\n\n inspect: (\n observer:\n | Observer<InspectionEvent>\n | ((inspectionEvent: InspectionEvent) => void)\n ) => Subscription;\n /** @internal */\n _sendInspectionEvent: (\n event: HomomorphicOmit<InspectionEvent, 'rootId'>\n ) => void;\n /** @internal */\n _relay: (\n source: AnyActorRef | undefined,\n target: AnyActorRef,\n event: AnyEventObject\n ) => void;\n scheduler: Scheduler;\n getSnapshot: () => {\n _scheduledEvents: Record<string, ScheduledEvent>;\n };\n /** @internal */\n _snapshot: {\n _scheduledEvents: Record<ScheduledEventId, ScheduledEvent>;\n };\n start: () => void;\n _clock: Clock;\n _logger: (...args: any[]) => void;\n}\n\nexport type AnyActorSystem = ActorSystem<any>;\n\nlet idCounter = 0;\nexport function createSystem<T extends ActorSystemInfo>(\n rootActor: AnyActorRef,\n options: {\n clock: Clock;\n logger: (...args: any[]) => void;\n snapshot?: unknown;\n }\n): ActorSystem<T> {\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 const inspectionObservers = new Set<Observer<InspectionEvent>>();\n const timerMap: { [id: ScheduledEventId]: number } = {};\n const { clock, logger } = options;\n\n const scheduler: Scheduler = {\n schedule: (\n source,\n target,\n event,\n delay,\n id = Math.random().toString(36).slice(2)\n ) => {\n const scheduledEvent: ScheduledEvent = {\n source,\n target,\n event,\n delay,\n id,\n startedAt: Date.now()\n };\n const scheduledEventId = createScheduledEventId(source, id);\n system._snapshot._scheduledEvents[scheduledEventId] = scheduledEvent;\n\n const timeout = clock.setTimeout(() => {\n delete timerMap[scheduledEventId];\n delete system._snapshot._scheduledEvents[scheduledEventId];\n\n system._relay(source, target, event);\n }, delay);\n\n timerMap[scheduledEventId] = timeout;\n },\n cancel: (source, id: string) => {\n const scheduledEventId = createScheduledEventId(source, id);\n const timeout = timerMap[scheduledEventId];\n\n delete timerMap[scheduledEventId];\n delete system._snapshot._scheduledEvents[scheduledEventId];\n\n if (timeout !== undefined) {\n clock.clearTimeout(timeout);\n }\n },\n cancelAll: (actorRef) => {\n for (const scheduledEventId in system._snapshot._scheduledEvents) {\n const scheduledEvent =\n system._snapshot._scheduledEvents[\n scheduledEventId as ScheduledEventId\n ];\n if (scheduledEvent.source === actorRef) {\n scheduler.cancel(actorRef, scheduledEvent.id);\n }\n }\n }\n };\n const sendInspectionEvent = (event: InspectionEvent) => {\n if (!inspectionObservers.size) {\n return;\n }\n const resolvedInspectionEvent: InspectionEvent = {\n ...event,\n rootId: rootActor.sessionId\n };\n inspectionObservers.forEach((observer) =>\n observer.next?.(resolvedInspectionEvent)\n );\n };\n\n const system: ActorSystem<T> = {\n _snapshot: {\n _scheduledEvents:\n (options?.snapshot && (options.snapshot as any).scheduler) ?? {}\n },\n _bookId: () => `x:${idCounter++}`,\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] | undefined;\n },\n getAll: () => {\n return Object.fromEntries(keyedActors.entries()) as Partial<T['actors']>;\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 inspect: (observerOrFn) => {\n const observer = toObserver(observerOrFn);\n inspectionObservers.add(observer);\n\n return {\n unsubscribe() {\n inspectionObservers.delete(observer);\n }\n };\n },\n _sendInspectionEvent: sendInspectionEvent as any,\n _relay: (source, target, event) => {\n system._sendInspectionEvent({\n type: '@xstate.event',\n sourceRef: source,\n actorRef: target,\n event\n });\n\n target._send(event);\n },\n scheduler,\n getSnapshot: () => {\n return {\n _scheduledEvents: { ...system._snapshot._scheduledEvents }\n };\n },\n start: () => {\n const scheduledEvents = system._snapshot._scheduledEvents;\n system._snapshot._scheduledEvents = {};\n for (const scheduledId in scheduledEvents) {\n const { source, target, event, delay, id } =\n scheduledEvents[scheduledId as ScheduledEventId];\n scheduler.schedule(source, target, event, delay, id);\n }\n },\n _clock: clock,\n _logger: logger\n };\n\n return system;\n}\n","import isDevelopment from '#is-development';\nimport { Mailbox } from './Mailbox.ts';\nimport { XSTATE_STOP } from './constants.ts';\nimport { devToolsAdapter } from './dev/index.ts';\nimport {\n createDoneActorEvent,\n createErrorActorEvent,\n createInitEvent\n} from './eventUtils.ts';\nimport { reportUnhandledError } from './reportUnhandledError.ts';\nimport { symbolObservable } from './symbolObservable.ts';\nimport { AnyActorSystem, Clock, createSystem } from './system.ts';\n\n// those are needed to make JSDoc `@link` work properly\nimport type {\n fromObservable,\n fromEventObservable\n} from './actors/observable.ts';\nimport type { fromCallback } from './actors/callback.ts';\nimport type { fromPromise } from './actors/promise.ts';\nimport type { fromTransition } from './actors/transition.ts';\nimport type { createMachine } from './createMachine.ts';\n\nexport let executingCustomAction: boolean = false;\n\nimport type {\n ActorScope,\n AnyActorLogic,\n AnyActorRef,\n ConditionalRequired,\n DoneActorEvent,\n EmittedFrom,\n EventFromLogic,\n InputFrom,\n IsNotNever,\n Readable,\n Snapshot,\n SnapshotFrom\n} from './types.ts';\nimport {\n ActorOptions,\n ActorRef,\n EventObject,\n InteropSubscribable,\n Observer,\n Subscription\n} from './types.ts';\nimport { toObserver } from './utils.ts';\n\nexport const $$ACTOR_TYPE = 1;\n\n// those values are currently used by @xstate/react directly so it's important to keep the assigned values in sync\nexport enum ProcessingStatus {\n NotStarted = 0,\n Running = 1,\n Stopped = 2\n}\n\nconst defaultOptions = {\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\n/**\n * An Actor is a running process that can receive events, send events and change\n * its behavior based on the events it receives, which can cause effects outside\n * of the actor. When you run a state machine, it becomes an actor.\n */\nexport class Actor<TLogic extends AnyActorLogic>\n implements\n ActorRef<SnapshotFrom<TLogic>, EventFromLogic<TLogic>, EmittedFrom<TLogic>>\n{\n /** The current internal state of the actor. */\n private _snapshot!: SnapshotFrom<TLogic>;\n /**\n * The clock that is responsible for setting and clearing timeouts, such as\n * delayed events and transitions.\n */\n public clock: Clock;\n public options: Readonly<ActorOptions<TLogic>>;\n\n /** The unique identifier for this actor relative to its parent. */\n public id: string;\n\n private mailbox: Mailbox<EventFromLogic<TLogic>> = new Mailbox(\n this._process.bind(this)\n );\n\n private observers: Set<Observer<SnapshotFrom<TLogic>>> = new Set();\n private eventListeners: Map<\n string,\n Set<(emittedEvent: EmittedFrom<TLogic>) => void>\n > = new Map();\n private logger: (...args: any[]) => void;\n\n /** @internal */\n public _processingStatus: ProcessingStatus = ProcessingStatus.NotStarted;\n\n // Actor Ref\n public _parent?: AnyActorRef;\n /** @internal */\n public _syncSnapshot?: boolean;\n public ref: ActorRef<\n SnapshotFrom<TLogic>,\n EventFromLogic<TLogic>,\n EmittedFrom<TLogic>\n >;\n // TODO: add typings for system\n private _actorScope: ActorScope<\n SnapshotFrom<TLogic>,\n EventFromLogic<TLogic>,\n AnyActorSystem,\n EmittedFrom<TLogic>\n >;\n\n public systemId: string | undefined;\n\n /** The globally unique process ID for this invocation. */\n public sessionId: string;\n\n /** The system to which this actor belongs. */\n public system: AnyActorSystem;\n private _doneEvent?: DoneActorEvent;\n\n public src: string | AnyActorLogic;\n\n /**\n * Creates a new actor instance for the given logic with the provided options,\n * if any.\n *\n * @param logic The logic to create an actor from\n * @param options Actor options\n */\n constructor(\n public logic: TLogic,\n options?: ActorOptions<TLogic>\n ) {\n const resolvedOptions = {\n ...defaultOptions,\n ...options\n };\n\n const { clock, logger, parent, syncSnapshot, id, systemId, inspect } =\n resolvedOptions;\n\n this.system = parent\n ? parent.system\n : createSystem(this, {\n clock,\n logger\n });\n\n if (inspect && !parent) {\n // Always inspect at the system-level\n this.system.inspect(toObserver(inspect));\n }\n\n this.sessionId = this.system._bookId();\n this.id = id ?? this.sessionId;\n this.logger = options?.logger ?? this.system._logger;\n this.clock = options?.clock ?? this.system._clock;\n this._parent = parent;\n this._syncSnapshot = syncSnapshot;\n this.options = resolvedOptions as ActorOptions<TLogic> &\n typeof defaultOptions;\n this.src = resolvedOptions.src ?? logic;\n this.ref = this;\n this._actorScope = {\n self: this,\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 emit: (emittedEvent) => {\n const listeners = this.eventListeners.get(emittedEvent.type);\n const wildcardListener = this.eventListeners.get('*');\n if (!listeners && !wildcardListener) {\n return;\n }\n const allListeners = [\n ...(listeners ? listeners.values() : []),\n ...(wildcardListener ? wildcardListener.values() : [])\n ];\n for (const handler of allListeners) {\n try {\n handler(emittedEvent);\n } catch (err) {\n reportUnhandledError(err);\n }\n }\n },\n actionExecutor: (action) => {\n const exec = () => {\n this._actorScope.system._sendInspectionEvent({\n type: '@xstate.action',\n actorRef: this,\n action: {\n type: action.type,\n params: action.params\n }\n });\n if (!action.exec) {\n return;\n }\n const saveExecutingCustomAction = executingCustomAction;\n try {\n executingCustomAction = true;\n action.exec(action.info, action.params);\n } finally {\n executingCustomAction = saveExecutingCustomAction;\n }\n };\n if (this._processingStatus === ProcessingStatus.Running) {\n exec();\n } else {\n this._deferred.push(exec);\n }\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\n this.system._sendInspectionEvent({\n type: '@xstate.actor',\n actorRef: this\n });\n\n if (systemId) {\n this.systemId = systemId;\n this.system._set(systemId, this);\n }\n\n this._initState(options?.snapshot ?? options?.state);\n\n if (systemId && (this._snapshot as any).status !== 'active') {\n this.system._unregister(this);\n }\n }\n\n private _initState(persistedState?: Snapshot<unknown>) {\n try {\n this._snapshot = persistedState\n ? this.logic.restoreSnapshot\n ? this.logic.restoreSnapshot(persistedState, this._actorScope)\n : persistedState\n : this.logic.getInitialSnapshot(this._actorScope, this.options?.input);\n } catch (err) {\n // if we get here then it means that we assign a value to this._snapshot that is not of the correct type\n // we can't get the true `TSnapshot & { status: 'error'; }`, it's impossible\n // so right now this is a lie of sorts\n this._snapshot = {\n status: 'error',\n output: undefined,\n error: err\n } as any;\n }\n }\n\n // array of functions to defer\n private _deferred: Array<() => void> = [];\n\n private update(snapshot: SnapshotFrom<TLogic>, event: EventObject): void {\n // Update state\n this._snapshot = snapshot;\n\n // Execute deferred effects\n let deferredFn: (typeof this._deferred)[number] | undefined;\n\n while ((deferredFn = this._deferred.shift())) {\n try {\n deferredFn();\n } catch (err) {\n // this error can only be caught when executing *initial* actions\n // it's the only time when we call actions provided by the user through those deferreds\n // when the actor is already running we always execute them synchronously while transitioning\n // no \"builtin deferred\" should actually throw an error since they are either safe\n // or the control flow is passed through the mailbox and errors should be caught by the `_process` used by the mailbox\n this._deferred.length = 0;\n this._snapshot = {\n ...(snapshot as any),\n status: 'error',\n error: err\n };\n }\n }\n\n switch ((this._snapshot as any).status) {\n case 'active':\n for (const observer of this.observers) {\n try {\n observer.next?.(snapshot);\n } catch (err) {\n reportUnhandledError(err);\n }\n }\n break;\n case 'done':\n // next observers are meant to be notified about done snapshots\n // this can be seen as something that is different from how observable work\n // but with observables `complete` callback is called without any arguments\n // it's more ergonomic for XState to treat a done snapshot as a \"next\" value\n // and the completion event as something that is separate,\n // something that merely follows emitting that done snapshot\n for (const observer of this.observers) {\n try {\n observer.next?.(snapshot);\n } catch (err) {\n reportUnhandledError(err);\n }\n }\n\n this._stopProcedure();\n this._complete();\n this._doneEvent = createDoneActorEvent(\n this.id,\n (this._snapshot as any).output\n );\n if (this._parent) {\n this.system._relay(this, this._parent, this._doneEvent);\n }\n\n break;\n case 'error':\n this._error((this._snapshot as any).error);\n break;\n }\n this.system._sendInspectionEvent({\n type: '@xstate.snapshot',\n actorRef: this,\n event,\n snapshot\n });\n }\n\n /**\n * Subscribe an observer to an actor’s snapshot values.\n *\n * @remarks\n * The observer will receive the actor’s snapshot value when it is emitted.\n * The observer can be:\n *\n * - A plain function that receives the latest snapshot, or\n * - An observer object whose `.next(snapshot)` method receives the latest\n * snapshot\n *\n * @example\n *\n * ```ts\n * // Observer as a plain function\n * const subscription = actor.subscribe((snapshot) => {\n * console.log(snapshot);\n * });\n * ```\n *\n * @example\n *\n * ```ts\n * // Observer as an object\n * const subscription = actor.subscribe({\n * next(snapshot) {\n * console.log(snapshot);\n * },\n * error(err) {\n * // ...\n * },\n * complete() {\n * // ...\n * }\n * });\n * ```\n *\n * The return value of `actor.subscribe(observer)` is a subscription object\n * that has an `.unsubscribe()` method. You can call\n * `subscription.unsubscribe()` to unsubscribe the observer:\n *\n * @example\n *\n * ```ts\n * const subscription = actor.subscribe((snapshot) => {\n * // ...\n * });\n *\n * // Unsubscribe the observer\n * subscription.unsubscribe();\n * ```\n *\n * When the actor is stopped, all of its observers will automatically be\n * unsubscribed.\n *\n * @param observer - Either a plain function that receives the latest\n * snapshot, or an observer object whose `.next(snapshot)` method receives\n * the latest snapshot\n */\n public subscribe(observer: Observer<SnapshotFrom<TLogic>>): Subscription;\n public subscribe(\n nextListener?: (snapshot: SnapshotFrom<TLogic>) => void,\n errorListener?: (error: any) => void,\n completeListener?: () => void\n ): Subscription;\n public subscribe(\n nextListenerOrObserver?:\n | ((snapshot: 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._processingStatus !== ProcessingStatus.Stopped) {\n this.observers.add(observer);\n } else {\n switch ((this._snapshot as any).status) {\n case 'done':\n try {\n observer.complete?.();\n } catch (err) {\n reportUnhandledError(err);\n }\n break;\n case 'error': {\n const err = (this._snapshot as any).error;\n if (!observer.error) {\n reportUnhandledError(err);\n } else {\n try {\n observer.error(err);\n } catch (err) {\n reportUnhandledError(err);\n }\n }\n break;\n }\n }\n }\n\n return {\n unsubscribe: () => {\n this.observers.delete(observer);\n }\n };\n }\n\n public on<TType extends EmittedFrom<TLogic>['type'] | '*'>(\n type: TType,\n handler: (\n emitted: EmittedFrom<TLogic> &\n (TType extends '*' ? unknown : { type: TType })\n ) => void\n ): Subscription {\n let listeners = this.eventListeners.get(type);\n if (!listeners) {\n listeners = new Set();\n this.eventListeners.set(type, listeners);\n }\n const wrappedHandler = handler.bind(undefined);\n listeners.add(wrappedHandler);\n\n return {\n unsubscribe: () => {\n listeners.delete(wrappedHandler);\n }\n };\n }\n\n public select<TSelected>(\n selector: (snapshot: SnapshotFrom<TLogic>) => TSelected,\n equalityFn: (a: TSelected, b: TSelected) => boolean = Object.is\n ): Readable<TSelected> {\n return {\n subscribe: (observerOrFn) => {\n const observer = toObserver(observerOrFn);\n const snapshot = this.getSnapshot();\n let previousSelected = selector(snapshot);\n\n return this.subscribe((snapshot) => {\n const nextSelected = selector(snapshot);\n if (!equalityFn(previousSelected, nextSelected)) {\n previousSelected = nextSelected;\n observer.next?.(nextSelected);\n }\n });\n },\n get: () => selector(this.getSnapshot())\n };\n }\n\n /** Starts the Actor from the initial state */\n public start(): this {\n if (this._processingStatus === ProcessingStatus.Running) {\n // Do not restart the service if it is already started\n return this;\n }\n\n if (this._syncSnapshot) {\n this.subscribe({\n next: (snapshot: Snapshot<unknown>) => {\n if (snapshot.status === 'active') {\n this.system._relay(this, this._parent!, {\n type: `xstate.snapshot.${this.id}`,\n snapshot\n });\n }\n },\n error: () => {}\n });\n }\n\n this.system._register(this.sessionId, this);\n if (this.systemId) {\n this.system._set(this.systemId, this);\n }\n this._processingStatus = ProcessingStatus.Running;\n\n // TODO: this isn't correct when rehydrating\n const initEvent = createInitEvent(this.options.input);\n\n this.system._sendInspectionEvent({\n type: '@xstate.event',\n sourceRef: this._parent,\n actorRef: this,\n event: initEvent\n });\n\n const status = (this._snapshot as any).status;\n\n switch (status) {\n case 'done':\n // a state machine can be \"done\" upon initialization (it could reach a final state using initial microsteps)\n // we still need to complete observers, flush deferreds etc\n this.update(\n this._snapshot,\n initEvent as unknown as EventFromLogic<TLogic>\n );\n // TODO: rethink cleanup of observers, mailbox, etc\n return this;\n case 'error':\n this._error((this._snapshot as any).error);\n return this;\n }\n\n if (!this._parent) {\n this.system.start();\n }\n\n if (this.logic.start) {\n try {\n this.logic.start(this._snapshot, this._actorScope);\n } catch (err) {\n this._snapshot = {\n ...(this._snapshot as any),\n status: 'error',\n error: err\n };\n this._error(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._snapshot, initEvent as unknown as EventFromLogic<TLogic>);\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: EventFromLogic<TLogic>) {\n let nextState;\n let caughtError;\n try {\n nextState = this.logic.transition(\n this._snapshot,\n event,\n this._actorScope\n );\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._snapshot = {\n ...(this._snapshot as any),\n status: 'error',\n error: err\n };\n this._error(err);\n return;\n }\n\n this.update(nextState, event);\n if (event.type === XSTATE_STOP) {\n this._stopProcedure();\n this._complete();\n }\n }\n\n private _stop(): this {\n if (this._processingStatus === ProcessingStatus.Stopped) {\n return this;\n }\n this.mailbox.clear();\n if (this._processingStatus === ProcessingStatus.NotStarted) {\n this._processingStatus = ProcessingStatus.Stopped;\n return this;\n }\n this.mailbox.enqueue({ type: XSTATE_STOP } as any);\n\n return this;\n }\n\n /** Stops the Actor and unsubscribe all listeners. */\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 this.eventListeners.clear();\n }\n private _reportError(err: unknown): void {\n if (!this.observers.size) {\n if (!this._parent) {\n reportUnhandledError(err);\n }\n this.eventListeners.clear();\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 this.eventListeners.clear();\n if (reportError) {\n reportUnhandledError(err);\n }\n }\n private _error(err: unknown): void {\n this._stopProcedure();\n this._reportError(err);\n if (this._parent) {\n this.system._relay(\n this,\n this._parent,\n createErrorActorEvent(this.id, err)\n );\n }\n }\n // TODO: atm children don't belong entirely to the actor so\n // in a way - it's not even super aware of them\n // so we can't stop them from here but we really should!\n // right now, they are being stopped within the machine's transition\n // but that could throw and leave us with \"orphaned\" active actors\n private _stopProcedure(): this {\n if (this._processingStatus !== ProcessingStatus.Running) {\n // Actor already stopped; do nothing\n return this;\n }\n\n // Cancel all delayed events\n this.system.scheduler.cancelAll(this);\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._processingStatus = ProcessingStatus.Stopped;\n this.system._unregister(this);\n\n return this;\n }\n\n /** @internal */\n public _send(event: EventFromLogic<TLogic>) {\n if (this._processingStatus === ProcessingStatus.Stopped) {\n // do nothing\n if (isDevelopment) {\n const eventString = JSON.stringify(event);\n\n console.warn(\n `Event \"${event.type}\" was sent to stopped actor \"${this.id} (${this.sessionId})\". This actor has already reached its final state, and will not transition.\\nEvent: ${eventString}`\n );\n }\n return;\n }\n\n this.mailbox.enqueue(event);\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: EventFromLogic<TLogic>) {\n if (isDevelopment && typeof event === 'string') {\n throw new Error(\n `Only event objects may be sent to actors; use .send({ type: \"${event}\" }) instead`\n );\n }\n this.system._relay(undefined, this, event);\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 xstate$$type: $$ACTOR_TYPE,\n id: this.id\n };\n }\n\n /**\n * Obtain the internal state of the actor, which can be persisted.\n *\n * @remarks\n * The internal state can be persisted from any actor, not only machines.\n *\n * Note that the persisted state is not the same as the snapshot from\n * {@link Actor.getSnapshot}. Persisted state represents the internal state of\n * the actor, while snapshots represent the actor's last emitted value.\n *\n * Can be restored with {@link ActorOptions.state}\n * @see https://stately.ai/docs/persistence\n */\n public getPersistedSnapshot(): Snapshot<unknown>;\n public getPersistedSnapshot(options?: unknown): Snapshot<unknown> {\n return this.logic.getPersistedSnapshot(this._snapshot, options);\n }\n\n public [symbolObservable](): InteropSubscribable<SnapshotFrom<TLogic>> {\n return this;\n }\n\n /**\n * Read an actor’s snapshot synchronously.\n *\n * @remarks\n * The snapshot represent an actor's last emitted value.\n *\n * When an actor receives an event, its internal state may change. An actor\n * may emit a snapshot when a state transition occurs.\n *\n * Note that some actors, such as callback actors generated with\n * `fromCallback`, will not emit snapshots.\n * @see {@link Actor.subscribe} to subscribe to an actor’s snapshot values.\n * @see {@link Actor.getPersistedSnapshot} to persist the internal state of an actor (which is more than just a snapshot).\n */\n public getSnapshot(): SnapshotFrom<TLogic> {\n if (isDevelopment && !this._snapshot) {\n throw new Error(\n `Snapshot can't be read while the actor initializes itself`\n );\n }\n return this._snapshot;\n }\n}\n\nexport type RequiredActorOptionsKeys<TLogic extends AnyActorLogic> =\n undefined extends InputFrom<TLogic> ? never : 'input';\n\n/**\n * Creates a new actor instance for the given actor logic with the provided\n * options, if any.\n *\n * @remarks\n * When you create an actor from actor logic via `createActor(logic)`, you\n * implicitly create an actor system where the created actor is the root actor.\n * Any actors spawned from this root actor and its descendants are part of that\n * actor system.\n * @example\n *\n * ```ts\n * import { createActor } from 'xstate';\n * import { someActorLogic } from './someActorLogic.ts';\n *\n * // Creating the actor, which implicitly creates an actor system with itself as the root actor\n * const actor = createActor(someActorLogic);\n *\n * actor.subscribe((snapshot) => {\n * console.log(snapshot);\n * });\n *\n * // Actors must be started by calling `actor.start()`, which will also start the actor system.\n * actor.start();\n *\n * // Actors can receive events\n * actor.send({ type: 'someEvent' });\n *\n * // You can stop root actors by calling `actor.stop()`, which will also stop the actor system and all actors in that system.\n * actor.stop();\n * ```\n *\n * @param logic - The actor logic to create an actor from. For a state machine\n * actor logic creator, see {@link createMachine}. Other actor logic creators\n * include {@link fromCallback}, {@link fromEventObservable},\n * {@link fromObservable}, {@link fromPromise}, and {@link fromTransition}.\n * @param options - Actor options\n */\nexport function createActor<TLogic extends AnyActorLogic>(\n logic: TLogic,\n ...[options]: ConditionalRequired<\n [\n options?: ActorOptions<TLogic> & {\n [K in RequiredActorOptionsKeys<TLogic>]: unknown;\n }\n ],\n IsNotNever<RequiredActorOptionsKeys<TLogic>>\n >\n): Actor<TLogic> {\n return new Actor(logic, options);\n}\n\n/**\n * Creates a new Interpreter instance for the given machine with the provided\n * options, if any.\n *\n * @deprecated Use `createActor` instead\n * @alias\n */\nexport const interpret = createActor;\n\n/**\n * @deprecated Use `Actor` instead.\n * @alias\n */\nexport type Interpreter = typeof Actor;\n","import isDevelopment from '#is-development';\nimport {\n AnyActorScope,\n AnyMachineSnapshot,\n EventObject,\n MachineContext,\n ActionArgs,\n ParameterizedObject,\n BuiltinActionResolution\n} from '../types.ts';\n\ntype ResolvableSendId<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TParams extends ParameterizedObject['params'] | undefined,\n TEvent extends EventObject\n> =\n | string\n | ((\n args: ActionArgs<TContext, TExpressionEvent, TEvent>,\n params: TParams\n ) => string);\n\nfunction resolveCancel(\n _: AnyActorScope,\n snapshot: AnyMachineSnapshot,\n actionArgs: ActionArgs<any, any, any>,\n actionParams: ParameterizedObject['params'] | undefined,\n { sendId }: { sendId: ResolvableSendId<any, any, any, any> }\n): BuiltinActionResolution {\n const resolvedSendId =\n typeof sendId === 'function' ? sendId(actionArgs, actionParams) : sendId;\n return [snapshot, { sendId: resolvedSendId }, undefined];\n}\n\nfunction executeCancel(actorScope: AnyActorScope, params: { sendId: string }) {\n actorScope.defer(() => {\n actorScope.system.scheduler.cancel(actorScope.self, params.sendId);\n });\n}\n\nexport interface CancelAction<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TParams extends ParameterizedObject['params'] | undefined,\n TEvent extends EventObject\n> {\n (args: ActionArgs<TContext, TExpressionEvent, TEvent>, params: TParams): void;\n}\n\n/**\n * Cancels a delayed `sendTo(...)` action that is waiting to be executed. The\n * canceled `sendTo(...)` action will not send its event or execute, unless the\n * `delay` has already elapsed before `cancel(...)` is called.\n *\n * @example\n *\n * ```ts\n * import { createMachine, sendTo, cancel } from 'xstate';\n *\n * const machine = createMachine({\n * // ...\n * on: {\n * sendEvent: {\n * actions: sendTo(\n * 'some-actor',\n * { type: 'someEvent' },\n * {\n * id: 'some-id',\n * delay: 1000\n * }\n * )\n * },\n * cancelEvent: {\n * actions: cancel('some-id')\n * }\n * }\n * });\n * ```\n *\n * @param sendId The `id` of the `sendTo(...)` action to cancel.\n */\nexport function cancel<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TParams extends ParameterizedObject['params'] | undefined,\n TEvent extends EventObject\n>(\n sendId: ResolvableSendId<TContext, TExpressionEvent, TParams, TEvent>\n): CancelAction<TContext, TExpressionEvent, TParams, TEvent> {\n function cancel(\n _args: ActionArgs<TContext, TExpressionEvent, TEvent>,\n _params: TParams\n ) {\n if (isDevelopment) {\n throw new Error(`This isn't supposed to be called`);\n }\n }\n\n cancel.type = 'xstate.cancel';\n cancel.sendId = sendId;\n\n cancel.resolve = resolveCancel;\n cancel.execute = executeCancel;\n\n return cancel;\n}\n","import isDevelopment from '#is-development';\nimport { cloneMachineSnapshot } from '../State.ts';\nimport { ProcessingStatus, createActor } from '../createActor.ts';\nimport {\n ActionArgs,\n ActionFunction,\n AnyActorLogic,\n AnyActorRef,\n AnyActorScope,\n AnyMachineSnapshot,\n ConditionalRequired,\n EventObject,\n InputFrom,\n IsLiteralString,\n IsNotNever,\n MachineContext,\n Mapper,\n ParameterizedObject,\n ProvidedActor,\n RequiredActorOptions,\n BuiltinActionResolution,\n UnifiedArg\n} from '../types.ts';\nimport { resolveReferencedActor } from '../utils.ts';\n\ntype ResolvableActorId<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TEvent extends EventObject,\n TId extends string | undefined\n> = TId | ((args: UnifiedArg<TContext, TExpressionEvent, TEvent>) => TId);\n\nfunction resolveSpawn(\n actorScope: AnyActorScope,\n snapshot: AnyMachineSnapshot,\n actionArgs: ActionArgs<any, any, any>,\n _actionParams: ParameterizedObject['params'] | undefined,\n {\n id,\n systemId,\n src,\n input,\n syncSnapshot\n }: {\n id: ResolvableActorId<MachineContext, EventObject, EventObject, string>;\n systemId: string | undefined;\n src: AnyActorLogic | string;\n input?: unknown;\n syncSnapshot: boolean;\n }\n): BuiltinActionResolution {\n const logic =\n typeof src === 'string'\n ? resolveReferencedActor(snapshot.machine, src)\n : src;\n const resolvedId = typeof id === 'function' ? id(actionArgs) : id;\n let actorRef: AnyActorRef | undefined;\n let resolvedInput: unknown | undefined = undefined;\n\n if (logic) {\n resolvedInput =\n typeof input === 'function'\n ? input({\n context: snapshot.context,\n event: actionArgs.event,\n self: actorScope.self\n })\n : input;\n actorRef = createActor(logic, {\n id: resolvedId,\n src,\n parent: actorScope.self,\n syncSnapshot,\n systemId,\n input: resolvedInput\n });\n }\n\n if (isDevelopment && !actorRef) {\n console.warn(\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions,@typescript-eslint/no-base-to-string\n `Actor type '${src}' not found in machine '${actorScope.id}'.`\n );\n }\n return [\n cloneMachineSnapshot(snapshot, {\n children: {\n ...snapshot.children,\n [resolvedId]: actorRef!\n }\n }),\n {\n id,\n systemId,\n actorRef,\n src,\n input: resolvedInput\n },\n undefined\n ];\n}\n\nfunction executeSpawn(\n actorScope: AnyActorScope,\n { actorRef }: { id: string; actorRef: AnyActorRef }\n) {\n if (!actorRef) {\n return;\n }\n\n actorScope.defer(() => {\n if (actorRef._processingStatus === ProcessingStatus.Stopped) {\n return;\n }\n actorRef.start();\n });\n}\n\nexport interface SpawnAction<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TParams extends ParameterizedObject['params'] | undefined,\n TEvent extends EventObject,\n TActor extends ProvidedActor\n> {\n (args: ActionArgs<TContext, TExpressionEvent, TEvent>, params: TParams): void;\n _out_TActor?: TActor;\n}\n\nexport interface SpawnActionOptions<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TEvent extends EventObject,\n TActor extends ProvidedActor\n> {\n id?: ResolvableActorId<TContext, TExpressionEvent, TEvent, TActor['id']>;\n systemId?: string;\n input?:\n | Mapper<TContext, TEvent, InputFrom<TActor['logic']>, TEvent>\n | InputFrom<TActor['logic']>;\n syncSnapshot?: boolean;\n}\n\ntype DistributeActors<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TEvent extends EventObject,\n TActor extends ProvidedActor\n> =\n | (TActor extends any\n ? ConditionalRequired<\n [\n src: TActor['src'],\n options?: SpawnActionOptions<\n TContext,\n TExpressionEvent,\n TEvent,\n TActor\n > & {\n [K in RequiredActorOptions<TActor>]: unknown;\n }\n ],\n IsNotNever<RequiredActorOptions<TActor>>\n >\n : never)\n | [\n src: AnyActorLogic,\n options?: SpawnActionOptions<\n TContext,\n TExpressionEvent,\n TEvent,\n ProvidedActor\n > & { id?: never }\n ];\n\ntype SpawnArguments<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TEvent extends EventObject,\n TActor extends ProvidedActor\n> =\n IsLiteralString<TActor['src']> extends true\n ? DistributeActors<TContext, TExpressionEvent, TEvent, TActor>\n : [\n src: string | AnyActorLogic,\n options?: {\n id?: ResolvableActorId<TContext, TExpressionEvent, TEvent, string>;\n systemId?: string;\n input?: unknown;\n syncSnapshot?: boolean;\n }\n ];\n\nexport function spawnChild<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TParams extends ParameterizedObject['params'] | undefined,\n TEvent extends EventObject,\n TActor extends ProvidedActor\n>(\n ...[\n src,\n { id, systemId, input, syncSnapshot = false } = {} as any\n ]: SpawnArguments<TContext, TExpressionEvent, TEvent, TActor>\n): ActionFunction<\n TContext,\n TExpressionEvent,\n TEvent,\n TParams,\n TActor,\n never,\n never,\n never,\n never\n> {\n function spawnChild(\n _args: ActionArgs<TContext, TExpressionEvent, TEvent>,\n _params: TParams\n ) {\n if (isDevelopment) {\n throw new Error(`This isn't supposed to be called`);\n }\n }\n\n spawnChild.type = 'xstate.spawnChild';\n spawnChild.id = id;\n spawnChild.systemId = systemId;\n spawnChild.src = src;\n spawnChild.input = input;\n spawnChild.syncSnapshot = syncSnapshot;\n\n spawnChild.resolve = resolveSpawn;\n spawnChild.execute = executeSpawn;\n\n return spawnChild;\n}\n","import isDevelopment from '#is-development';\nimport { cloneMachineSnapshot } from '../State.ts';\nimport { ProcessingStatus } from '../createActor.ts';\nimport {\n ActionArgs,\n AnyActorRef,\n AnyActorScope,\n AnyMachineSnapshot,\n EventObject,\n MachineContext,\n ParameterizedObject,\n BuiltinActionResolution\n} from '../types.ts';\n\ntype ResolvableActorRef<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TParams extends ParameterizedObject['params'] | undefined,\n TEvent extends EventObject\n> =\n | string\n | AnyActorRef\n | ((\n args: ActionArgs<TContext, TExpressionEvent, TEvent>,\n params: TParams\n ) => AnyActorRef | string);\n\nfunction resolveStop(\n _: AnyActorScope,\n snapshot: AnyMachineSnapshot,\n args: ActionArgs<any, any, any>,\n actionParams: ParameterizedObject['params'] | undefined,\n { actorRef }: { actorRef: ResolvableActorRef<any, any, any, any> }\n): BuiltinActionResolution {\n const actorRefOrString =\n typeof actorRef === 'function' ? actorRef(args, actionParams) : actorRef;\n const resolvedActorRef: AnyActorRef | undefined =\n typeof actorRefOrString === 'string'\n ? snapshot.children[actorRefOrString]\n : actorRefOrString;\n\n let children = snapshot.children;\n if (resolvedActorRef) {\n children = { ...children };\n delete children[resolvedActorRef.id];\n }\n return [\n cloneMachineSnapshot(snapshot, {\n children\n }),\n resolvedActorRef,\n undefined\n ];\n}\nfunction unregisterRecursively(\n actorScope: AnyActorScope,\n actorRef: AnyActorRef\n) {\n // unregister children first (depth-first)\n const snapshot = actorRef.getSnapshot();\n if (snapshot && 'children' in snapshot) {\n for (const child of Object.values(\n snapshot.children as Record<string, AnyActorRef>\n )) {\n unregisterRecursively(actorScope, child);\n }\n }\n actorScope.system._unregister(actorRef);\n}\n\nfunction executeStop(\n actorScope: AnyActorScope,\n actorRef: AnyActorRef | undefined\n) {\n if (!actorRef) {\n return;\n }\n\n // we need to eagerly unregister it here so a new actor with the same systemId can be registered immediately\n // since we defer actual stopping of the actor but we don't defer actor creations (and we can't do that)\n // this could throw on `systemId` collision, for example, when dealing with reentering transitions\n // we also need to recursively unregister all nested children's systemIds\n unregisterRecursively(actorScope, actorRef);\n\n // this allows us to prevent an actor from being started if it gets stopped within the same macrostep\n // this can happen, for example, when the invoking state is being exited immediately by an always transition\n if (actorRef._processingStatus !== ProcessingStatus.Running) {\n actorScope.stopChild(actorRef);\n return;\n }\n // stopping a child enqueues a stop event in the child actor's mailbox\n // we need for all of the already enqueued events to be processed before we stop the child\n // the parent itself might want to send some events to a child (for example from exit actions on the invoking state)\n // and we don't want to ignore those events\n actorScope.defer(() => {\n actorScope.stopChild(actorRef);\n });\n}\n\nexport interface StopAction<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TParams extends ParameterizedObject['params'] | undefined,\n TEvent extends EventObject\n> {\n (args: ActionArgs<TContext, TExpressionEvent, TEvent>, params: TParams): void;\n}\n\n/**\n * Stops a child actor.\n *\n * @param actorRef The actor to stop.\n */\nexport function stopChild<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TParams extends ParameterizedObject['params'] | undefined,\n TEvent extends EventObject\n>(\n actorRef: ResolvableActorRef<TContext, TExpressionEvent, TParams, TEvent>\n): StopAction<TContext, TExpressionEvent, TParams, TEvent> {\n function stop(\n _args: ActionArgs<TContext, TExpressionEvent, TEvent>,\n _params: TParams\n ) {\n if (isDevelopment) {\n throw new Error(`This isn't supposed to be called`);\n }\n }\n\n stop.type = 'xstate.stopChild';\n stop.actorRef = actorRef;\n\n stop.resolve = resolveStop;\n stop.execute = executeStop;\n\n return stop;\n}\n\n/**\n * Stops a child actor.\n *\n * @deprecated Use `stopChild(...)` instead\n * @alias\n */\nexport const stop = stopChild;\n","import isDevelopment from '#is-development';\nimport type {\n EventObject,\n StateValue,\n MachineContext,\n ParameterizedObject,\n AnyMachineSnapshot,\n NoRequiredParams,\n WithDynamicParams,\n Identity,\n Elements,\n DoNotInfer\n} from './types.ts';\nimport { isStateId } from './stateUtils.ts';\n\ntype SingleGuardArg<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TParams extends ParameterizedObject['params'] | undefined,\n TGuardArg\n> = [TGuardArg] extends [{ type: string }]\n ? Identity<TGuardArg>\n : [TGuardArg] extends [string]\n ? TGuardArg\n : GuardPredicate<TContext, TExpressionEvent, TParams, ParameterizedObject>;\n\ntype NormalizeGuardArg<TGuardArg> = TGuardArg extends { type: string }\n ? Identity<TGuardArg> & { params: unknown }\n : TGuardArg extends string\n ? { type: TGuardArg; params: undefined }\n : '_out_TGuard' extends keyof TGuardArg\n ? TGuardArg['_out_TGuard'] & ParameterizedObject\n : never;\n\ntype NormalizeGuardArgArray<TArg extends unknown[]> = Elements<{\n [K in keyof TArg]: NormalizeGuardArg<TArg[K]>;\n}>;\n\nexport type GuardPredicate<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TParams extends ParameterizedObject['params'] | undefined,\n TGuard extends ParameterizedObject\n> = {\n (args: GuardArgs<TContext, TExpressionEvent>, params: TParams): boolean;\n _out_TGuard?: TGuard;\n};\n\nexport interface GuardArgs<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject\n> {\n context: TContext;\n event: TExpressionEvent;\n}\n\nexport type Guard<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TParams extends ParameterizedObject['params'] | undefined,\n TGuard extends ParameterizedObject\n> =\n | NoRequiredParams<TGuard>\n | WithDynamicParams<TContext, TExpressionEvent, TGuard>\n | GuardPredicate<TContext, TExpressionEvent, TParams, TGuard>;\n\nexport type UnknownGuard = UnknownReferencedGuard | UnknownInlineGuard;\n\ntype UnknownReferencedGuard = Guard<\n MachineContext,\n EventObject,\n ParameterizedObject['params'],\n ParameterizedObject\n>;\n\ntype UnknownInlineGuard = Guard<\n MachineContext,\n EventObject,\n undefined,\n ParameterizedObject\n>;\n\ninterface BuiltinGuard {\n (): boolean;\n check: (\n snapshot: AnyMachineSnapshot,\n guardArgs: GuardArgs<any, any>,\n params: unknown\n ) => boolean;\n}\n\nfunction checkStateIn(\n snapshot: AnyMachineSnapshot,\n _: GuardArgs<any, any>,\n { stateValue }: { stateValue: StateValue }\n) {\n if (typeof stateValue === 'string' && isStateId(stateValue)) {\n const target = snapshot.machine.getStateNodeById(stateValue);\n return snapshot._nodes.some((sn) => sn === target);\n }\n\n return snapshot.matches(stateValue);\n}\n\nexport function stateIn<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TParams extends ParameterizedObject['params'] | undefined\n>(\n stateValue: StateValue\n): GuardPredicate<\n TContext,\n TExpressionEvent,\n TParams,\n any // TODO: recheck if we could replace this with something better here\n> {\n function stateIn() {\n if (isDevelopment) {\n throw new Error(`This isn't supposed to be called`);\n }\n return false;\n }\n\n stateIn.check = checkStateIn;\n stateIn.stateValue = stateValue;\n\n return stateIn;\n}\n\nfunction checkNot(\n snapshot: AnyMachineSnapshot,\n { context, event }: GuardArgs<any, any>,\n { guards }: { guards: readonly UnknownGuard[] }\n) {\n return !evaluateGuard(guards[0], context, event, snapshot);\n}\n\n/**\n * Higher-order guard that evaluates to `true` if the `guard` passed to it\n * evaluates to `false`.\n *\n * @category Guards\n * @example\n *\n * ```ts\n * import { setup, not } from 'xstate';\n *\n * const machine = setup({\n * guards: {\n * someNamedGuard: () => false\n * }\n * }).createMachine({\n * on: {\n * someEvent: {\n * guard: not('someNamedGuard'),\n * actions: () => {\n * // will be executed if guard in `not(...)`\n * // evaluates to `false`\n * }\n * }\n * }\n * });\n * ```\n *\n * @returns A guard\n */\nexport function not<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TArg\n>(\n guard: SingleGuardArg<TContext, TExpressionEvent, unknown, TArg>\n): GuardPredicate<\n TContext,\n TExpressionEvent,\n unknown,\n NormalizeGuardArg<DoNotInfer<TArg>>\n> {\n function not(_args: GuardArgs<TContext, TExpressionEvent>, _params: unknown) {\n if (isDevelopment) {\n throw new Error(`This isn't supposed to be called`);\n }\n return false;\n }\n\n not.check = checkNot;\n not.guards = [guard];\n\n return not;\n}\n\nfunction checkAnd(\n snapshot: AnyMachineSnapshot,\n { context, event }: GuardArgs<any, any>,\n { guards }: { guards: readonly UnknownGuard[] }\n) {\n return guards.every((guard) =>\n evaluateGuard(guard, context, event, snapshot)\n );\n}\n\n/**\n * Higher-order guard that evaluates to `true` if all `guards` passed to it\n * evaluate to `true`.\n *\n * @category Guards\n * @example\n *\n * ```ts\n * import { setup, and } from 'xstate';\n *\n * const machine = setup({\n * guards: {\n * someNamedGuard: () => true\n * }\n * }).createMachine({\n * on: {\n * someEvent: {\n * guard: and([({ context }) => context.value > 0, 'someNamedGuard']),\n * actions: () => {\n * // will be executed if all guards in `and(...)`\n * // evaluate to true\n * }\n * }\n * }\n * });\n * ```\n *\n * @returns A guard action object\n */\nexport function and<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TArg extends unknown[]\n>(\n guards: readonly [\n ...{\n [K in keyof TArg]: SingleGuardArg<\n TContext,\n TExpressionEvent,\n unknown,\n TArg[K]\n >;\n }\n ]\n): GuardPredicate<\n TContext,\n TExpressionEvent,\n unknown,\n NormalizeGuardArgArray<DoNotInfer<TArg>>\n> {\n function and(_args: GuardArgs<TContext, TExpressionEvent>, _params: unknown) {\n if (isDevelopment) {\n throw new Error(`This isn't supposed to be called`);\n }\n return false;\n }\n\n and.check = checkAnd;\n and.guards = guards;\n\n return and;\n}\n\nfunction checkOr(\n snapshot: AnyMachineSnapshot,\n { context, event }: GuardArgs<any, any>,\n { guards }: { guards: readonly UnknownGuard[] }\n) {\n return guards.some((guard) => evaluateGuard(guard, context, event, snapshot));\n}\n\n/**\n * Higher-order guard that evaluates to `true` if any of the `guards` passed to\n * it evaluate to `true`.\n *\n * @category Guards\n * @example\n *\n * ```ts\n * import { setup, or } from 'xstate';\n *\n * const machine = setup({\n * guards: {\n * someNamedGuard: () => true\n * }\n * }).createMachine({\n * on: {\n * someEvent: {\n * guard: or([({ context }) => context.value > 0, 'someNamedGuard']),\n * actions: () => {\n * // will be executed if any of the guards in `or(...)`\n * // evaluate to true\n * }\n * }\n * }\n * });\n * ```\n *\n * @returns A guard action object\n */\nexport function or<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TArg extends unknown[]\n>(\n guards: readonly [\n ...{\n [K in keyof TArg]: SingleGuardArg<\n TContext,\n TExpressionEvent,\n unknown,\n TArg[K]\n >;\n }\n ]\n): GuardPredicate<\n TContext,\n TExpressionEvent,\n unknown,\n NormalizeGuardArgArray<DoNotInfer<TArg>>\n> {\n function or(_args: GuardArgs<TContext, TExpressionEvent>, _params: unknown) {\n if (isDevelopment) {\n throw new Error(`This isn't supposed to be called`);\n }\n return false;\n }\n\n or.check = checkOr;\n or.guards = guards;\n\n return or;\n}\n\n// TODO: throw on cycles (depth check should be enough)\nexport function evaluateGuard<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject\n>(\n guard: UnknownGuard | UnknownInlineGuard,\n context: TContext,\n event: TExpressionEvent,\n snapshot: AnyMachineSnapshot\n): boolean {\n const { machine } = snapshot;\n const isInline = typeof guard === 'function';\n\n const resolved = isInline\n ? guard\n : machine.implementations.guards[\n typeof guard === 'string' ? guard : guard.type\n ];\n\n if (!isInline && !resolved) {\n throw new Error(\n `Guard '${\n typeof guard === 'string' ? guard : guard.type\n }' is not implemented.'.`\n );\n }\n\n if (typeof resolved !== 'function') {\n return evaluateGuard(resolved!, context, event, snapshot);\n }\n\n const guardArgs = {\n context,\n event\n };\n\n const guardParams =\n isInline || typeof guard === 'string'\n ? undefined\n : 'params' in guard\n ? typeof guard.params === 'function'\n ? guard.params({ context, event })\n : guard.params\n : undefined;\n\n if (!('check' in resolved)) {\n // the existing type of `.guards` assumes non-nullable `TExpressionGuard`\n // inline guards expect `TExpressionGuard` to be set to `undefined`\n // it's fine to cast this here, our logic makes sure that we call those 2 \"variants\" correctly\n return resolved(guardArgs, guardParams as never);\n }\n\n const builtinGuard = resolved as unknown as BuiltinGuard;\n\n return builtinGuard.check(\n snapshot,\n guardArgs,\n resolved // this holds all params\n );\n}\n","import isDevelopment from '#is-development';\nimport { MachineSnapshot, cloneMachineSnapshot } from './State.ts';\nimport type { StateNode } from './StateNode.ts';\nimport { raise } from './actions.ts';\nimport { createAfterEvent, createDoneStateEvent } from './eventUtils.ts';\nimport { cancel } from './actions/cancel.ts';\nimport { spawnChild } from './actions/spawnChild.ts';\nimport { stopChild } from './actions/stopChild.ts';\nimport {\n XSTATE_INIT,\n NULL_EVENT,\n STATE_DELIMITER,\n STATE_IDENTIFIER,\n XSTATE_STOP,\n WILDCARD\n} from './constants.ts';\nimport { and, evaluateGuard } from './guards.ts';\nimport { matchesEventDescriptor } from './utils.ts';\nimport {\n ActionArgs,\n AnyEventObject,\n AnyHistoryValue,\n AnyMachineSnapshot,\n AnyStateNode,\n AnyTransitionDefinition,\n DelayedTransitionDefinition,\n EventObject,\n ExecutableActionObject,\n HistoryValue,\n InitialTransitionConfig,\n InitialTransitionDefinition,\n MachineContext,\n StateValue,\n StateValueMap,\n TransitionDefinition,\n TODO,\n UnknownAction,\n ParameterizedObject,\n AnyTransitionConfig,\n AnyActorScope,\n ActionExecutor,\n AnyStateMachine\n} from './types.ts';\nimport {\n resolveOutput,\n normalizeTarget,\n toArray,\n toStatePath,\n toTransitionConfigArray,\n isErrorActorEvent\n} from './utils.ts';\n\ntype StateNodeIterable<\n TContext extends MachineContext,\n TE extends EventObject\n> = Iterable<StateNode<TContext, TE>>;\ntype AnyStateNodeIterable = StateNodeIterable<any, any>;\n\ntype AdjList = Map<AnyStateNode, Array<AnyStateNode>>;\n\nexport function isAtomicStateNode(stateNode: StateNode<any, any>): boolean {\n return stateNode.type === 'atomic' || stateNode.type === 'final';\n}\n\nfunction getChildren<TContext extends MachineContext, TE extends EventObject>(\n stateNode: StateNode<TContext, TE>\n): Array<StateNode<TContext, TE>> {\n return Object.values(stateNode.states).filter((sn) => sn.type !== 'history');\n}\n\nexport function getProperAncestors(\n stateNode: AnyStateNode,\n toStateNode: AnyStateNode | undefined\n): Array<typeof stateNode> {\n const ancestors: Array<typeof stateNode> = [];\n\n if (toStateNode === stateNode) {\n return ancestors;\n }\n\n // add all ancestors\n let m = stateNode.parent;\n while (m && m !== toStateNode) {\n ancestors.push(m);\n m = m.parent;\n }\n\n return ancestors;\n}\n\nexport function getAllStateNodes(\n stateNodes: Iterable<AnyStateNode>\n): Set<AnyStateNode> {\n const nodeSet = new Set(stateNodes);\n\n const adjList = getAdjList(nodeSet);\n\n // add descendants\n for (const s of nodeSet) {\n // if previously active, add existing child nodes\n if (s.type === 'compound' && (!adjList.get(s) || !adjList.get(s)!.length)) {\n getInitialStateNodesWithTheirAncestors(s).forEach((sn) =>\n nodeSet.add(sn)\n );\n } else {\n if (s.type === 'parallel') {\n for (const child of getChildren(s)) {\n if (child.type === 'history') {\n continue;\n }\n\n if (!nodeSet.has(child)) {\n const initialStates = getInitialStateNodesWithTheirAncestors(child);\n for (const initialStateNode of initialStates) {\n nodeSet.add(initialStateNode);\n }\n }\n }\n }\n }\n }\n\n // add all ancestors\n for (const s of nodeSet) {\n let m = s.parent;\n\n while (m) {\n nodeSet.add(m);\n m = m.parent;\n }\n }\n\n return nodeSet;\n}\n\nfunction getValueFromAdj(baseNode: AnyStateNode, adjList: AdjList): StateValue {\n const childStateNodes = adjList.get(baseNode);\n\n if (!childStateNodes) {\n return {}; // todo: fix?\n }\n\n if (baseNode.type === 'compound') {\n const childStateNode = childStateNodes[0];\n if (childStateNode) {\n if (isAtomicStateNode(childStateNode)) {\n return childStateNode.key;\n }\n } else {\n return {};\n }\n }\n\n const stateValue: StateValue = {};\n for (const childStateNode of childStateNodes) {\n stateValue[childStateNode.key] = getValueFromAdj(childStateNode, adjList);\n }\n\n return stateValue;\n}\n\nfunction getAdjList<TContext extends MachineContext, TE extends EventObject>(\n stateNodes: StateNodeIterable<TContext, TE>\n): AdjList {\n const adjList: AdjList = new Map();\n\n for (const s of stateNodes) {\n if (!adjList.has(s)) {\n adjList.set(s, []);\n }\n\n if (s.parent) {\n if (!adjList.has(s.parent)) {\n adjList.set(s.parent, []);\n }\n\n adjList.get(s.parent)!.push(s);\n }\n }\n\n return adjList;\n}\n\nexport function getStateValue(\n rootNode: AnyStateNode,\n stateNodes: AnyStateNodeIterable\n): StateValue {\n const config = getAllStateNodes(stateNodes);\n return getValueFromAdj(rootNode, getAdjList(config));\n}\n\nexport function isInFinalState(\n stateNodeSet: Set<AnyStateNode>,\n stateNode: AnyStateNode\n): boolean {\n if (stateNode.type === 'compound') {\n return getChildren(stateNode).some(\n (s) => s.type === 'final' && stateNodeSet.has(s)\n );\n }\n if (stateNode.type === 'parallel') {\n return getChildren(stateNode).every((sn) =>\n isInFinalState(stateNodeSet, sn)\n );\n }\n\n return stateNode.type === 'final';\n}\n\nexport const isStateId = (str: string) => str[0] === STATE_IDENTIFIER;\n\nexport function getCandidates<TEvent extends EventObject>(\n stateNode: StateNode<any, TEvent>,\n receivedEventType: TEvent['type']\n): Array<TransitionDefinition<any, TEvent>> {\n const exactMatch = stateNode.transitions.get(receivedEventType);\n const wildcardCandidates = [...stateNode.transitions.keys()]\n .filter(\n (eventDescriptor) =>\n eventDescriptor !== receivedEventType &&\n matchesEventDescriptor(receivedEventType, eventDescriptor)\n )\n .sort((a, b) => b.length - a.length)\n .flatMap((key) => stateNode.transitions.get(key)!);\n\n return exactMatch\n ? [...exactMatch, ...wildcardCandidates]\n : wildcardCandidates;\n}\n\n/** All delayed transitions from the config. */\nexport function getDelayedTransitions(\n stateNode: AnyStateNode\n): Array<DelayedTransitionDefinition<MachineContext, EventObject>> {\n const afterConfig = stateNode.config.after;\n if (!afterConfig) {\n return [];\n }\n\n const mutateEntryExit = (delay: string | number) => {\n const afterEvent = createAfterEvent(delay, stateNode.id);\n const eventType = afterEvent.type;\n\n stateNode.entry.push(\n raise(afterEvent, {\n id: eventType,\n delay\n })\n );\n stateNode.exit.push(cancel(eventType));\n return eventType;\n };\n\n const delayedTransitions = Object.keys(afterConfig).flatMap((delay) => {\n const configTransition = afterConfig[delay];\n const resolvedTransition =\n typeof configTransition === 'string'\n ? { target: configTransition }\n : configTransition;\n const resolvedDelay = Number.isNaN(+delay) ? delay : +delay;\n const eventType = mutateEntryExit(resolvedDelay);\n return toArray(resolvedTransition).map((transition) => ({\n ...transition,\n event: eventType,\n delay: resolvedDelay\n }));\n });\n return delayedTransitions.map((delayedTransition) => {\n const { delay } = delayedTransition;\n return {\n ...formatTransition(\n stateNode,\n delayedTransition.event,\n delayedTransition\n ),\n delay\n };\n });\n}\n\nexport function formatTransition(\n stateNode: AnyStateNode,\n descriptor: string,\n transitionConfig: AnyTransitionConfig\n): AnyTransitionDefinition {\n const normalizedTarget = normalizeTarget(transitionConfig.target);\n const reenter = transitionConfig.reenter ?? false;\n const target = resolveTarget(stateNode, normalizedTarget);\n\n // TODO: should this be part of a lint rule instead?\n if (isDevelopment && (transitionConfig as any).cond) {\n throw new Error(\n `State \"${stateNode.id}\" has declared \\`cond\\` for one of its transitions. This property has been renamed to \\`guard\\`. Please update your code.`\n );\n }\n\n const transition = {\n ...transitionConfig,\n actions: toArray(transitionConfig.actions),\n guard: transitionConfig.guard as never,\n target,\n source: stateNode,\n reenter,\n eventType: descriptor,\n toJSON: () => ({\n ...transition,\n source: `#${stateNode.id}`,\n target: target ? target.map((t) => `#${t.id}`) : undefined\n })\n };\n\n return transition;\n}\n\nexport function formatTransitions<\n TContext extends MachineContext,\n TEvent extends EventObject\n>(\n stateNode: AnyStateNode\n): Map<string, TransitionDefinition<TContext, TEvent>[]> {\n const transitions = new Map<\n string,\n TransitionDefinition<TContext, AnyEventObject>[]\n >();\n if (stateNode.config.on) {\n for (const descriptor of Object.keys(stateNode.config.on)) {\n if (descriptor === NULL_EVENT) {\n throw new Error(\n 'Null events (\"\") cannot be specified as a transition key. Use `always: { ... }` instead.'\n );\n }\n const transitionsConfig = stateNode.config.on[descriptor];\n transitions.set(\n descriptor,\n toTransitionConfigArray(transitionsConfig).map((t) =>\n formatTransition(stateNode, descriptor, t)\n )\n );\n }\n }\n if (stateNode.config.onDone) {\n const descriptor = `xstate.done.state.${stateNode.id}`;\n transitions.set(\n descriptor,\n toTransitionConfigArray(stateNode.config.onDone).map((t) =>\n formatTransition(stateNode, descriptor, t)\n )\n );\n }\n for (const invokeDef of stateNode.invoke) {\n if (invokeDef.onDone) {\n const descriptor = `xstate.done.actor.${invokeDef.id}`;\n transitions.set(\n descriptor,\n toTransitionConfigArray(invokeDef.onDone).map((t) =>\n formatTransition(stateNode, descriptor, t)\n )\n );\n }\n if (invokeDef.onError) {\n const descriptor = `xstate.error.actor.${invokeDef.id}`;\n transitions.set(\n descriptor,\n toTransitionConfigArray(invokeDef.onError).map((t) =>\n formatTransition(stateNode, descriptor, t)\n )\n );\n }\n if (invokeDef.onSnapshot) {\n const descriptor = `xstate.snapshot.${invokeDef.id}`;\n transitions.set(\n descriptor,\n toTransitionConfigArray(invokeDef.onSnapshot).map((t) =>\n formatTransition(stateNode, descriptor, t)\n )\n );\n }\n }\n for (const delayedTransition of stateNode.after) {\n let existing = transitions.get(delayedTransition.eventType);\n if (!existing) {\n existing = [];\n transitions.set(delayedTransition.eventType, existing);\n }\n existing.push(delayedTransition);\n }\n return transitions as Map<string, TransitionDefinition<TContext, any>[]>;\n}\n\n/**\n * Collects route transitions from all descendants with explicit IDs. Called\n * once on the root node to avoid O(N²) repeated traversals.\n */\nexport function formatRouteTransitions(rootStateNode: AnyStateNode): void {\n const routeTransitions: AnyTransitionDefinition[] = [];\n const collectRoutes = (states: Record<string, AnyStateNode>) => {\n Object.values(states).forEach((sn) => {\n if (sn.config.route && sn.config.id) {\n const routeId = sn.config.id;\n const userGuard = sn.config.route.guard;\n const routeMatches = ({ event }: { event: any }) =>\n event.to === `#${routeId}`;\n\n const transition: AnyTransitionConfig = {\n ...sn.config.route,\n guard: userGuard ? and([routeMatches, userGuard]) : routeMatches,\n target: `#${routeId}`\n };\n\n routeTransitions.push(\n formatTransition(rootStateNode, 'xstate.route', transition)\n );\n }\n if (sn.states) {\n collectRoutes(sn.states);\n }\n });\n };\n collectRoutes(rootStateNode.states);\n if (routeTransitions.length > 0) {\n rootStateNode.transitions.set('xstate.route', routeTransitions);\n }\n}\n\nexport function formatInitialTransition<\n TContext extends MachineContext,\n TEvent extends EventObject\n>(\n stateNode: AnyStateNode,\n _target:\n | string\n | undefined\n | InitialTransitionConfig<TContext, TEvent, TODO, TODO, TODO, TODO>\n): InitialTransitionDefinition<TContext, TEvent> {\n const resolvedTarget =\n typeof _target === 'string'\n ? stateNode.states[_target]\n : _target\n ? stateNode.states[_target.target]\n : undefined;\n if (!resolvedTarget && _target) {\n throw new Error(\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions, @typescript-eslint/no-base-to-string\n `Initial state node \"${_target}\" not found on parent state node #${stateNode.id}`\n );\n }\n const transition: InitialTransitionDefinition<TContext, TEvent> = {\n source: stateNode,\n actions:\n !_target || typeof _target === 'string' ? [] : toArray(_target.actions),\n eventType: null as any,\n reenter: false,\n target: resolvedTarget ? [resolvedTarget] : [],\n toJSON: () => ({\n ...transition,\n source: `#${stateNode.id}`,\n target: resolvedTarget ? [`#${resolvedTarget.id}`] : []\n })\n };\n\n return transition;\n}\n\nfunction resolveTarget(\n stateNode: AnyStateNode,\n targets: ReadonlyArray<string | AnyStateNode> | undefined\n): ReadonlyArray<AnyStateNode> | undefined {\n if (targets === undefined) {\n // an undefined target signals that the state node should not transition from that state when receiving that event\n return undefined;\n }\n return targets.map((target) => {\n if (typeof target !== 'string') {\n return target;\n }\n if (isStateId(target)) {\n return stateNode.machine.getStateNodeById(target);\n }\n\n const isInternalTarget = target[0] === STATE_DELIMITER;\n // If internal target is defined on machine,\n // do not include machine key on target\n if (isInternalTarget && !stateNode.parent) {\n return getStateNodeByPath(stateNode, target.slice(1));\n }\n const resolvedTarget = isInternalTarget ? stateNode.key + target : target;\n if (stateNode.parent) {\n try {\n const targetStateNode = getStateNodeByPath(\n stateNode.parent,\n resolvedTarget\n );\n return targetStateNode;\n } catch (err: any) {\n throw new Error(\n `Invalid transition definition for state node '${stateNode.id}':\\n${err.message}`\n );\n }\n } else {\n throw new Error(\n `Invalid target: \"${target}\" is not a valid target from the root node. Did you mean \".${target}\"?`\n );\n }\n });\n}\n\nfunction resolveHistoryDefaultTransition<\n TContext extends MachineContext,\n TEvent extends EventObject\n>(stateNode: AnyStateNode & { type: 'history' }) {\n const normalizedTarget = normalizeTarget<TContext, TEvent>(\n stateNode.config.target\n );\n if (!normalizedTarget) {\n return stateNode.parent!.initial;\n }\n return {\n target: normalizedTarget.map((t) =>\n typeof t === 'string' ? getStateNodeByPath(stateNode.parent!, t) : t\n )\n };\n}\n\nfunction isHistoryNode(\n stateNode: AnyStateNode\n): stateNode is AnyStateNode & { type: 'history' } {\n return stateNode.type === 'history';\n}\n\nfunction getInitialStateNodesWithTheirAncestors(stateNode: AnyStateNode) {\n const states = getInitialStateNodes(stateNode);\n for (const initialState of states) {\n for (const ancestor of getProperAncestors(initialState, stateNode)) {\n states.add(ancestor);\n }\n }\n return states;\n}\n\nfunction getInitialStateNodes(stateNode: AnyStateNode) {\n const set = new Set<AnyStateNode>();\n\n function iter(descStateNode: AnyStateNode): void {\n if (set.has(descStateNode)) {\n return;\n }\n set.add(descStateNode);\n if (descStateNode.type === 'compound') {\n iter(descStateNode.initial.target[0]);\n } else if (descStateNode.type === 'parallel') {\n for (const child of getChildren(descStateNode)) {\n iter(child);\n }\n }\n }\n\n iter(stateNode);\n\n return set;\n}\n/** Returns the child state node from its relative `stateKey`, or throws. */\nfunction getStateNode(stateNode: AnyStateNode, stateKey: string): AnyStateNode {\n if (isStateId(stateKey)) {\n return stateNode.machine.getStateNodeById(stateKey);\n }\n if (!stateNode.states) {\n throw new Error(\n `Unable to retrieve child state '${stateKey}' from '${stateNode.id}'; no child states exist.`\n );\n }\n const result = stateNode.states[stateKey];\n if (!result) {\n throw new Error(\n `Child state '${stateKey}' does not exist on '${stateNode.id}'`\n );\n }\n return result;\n}\n\n/**\n * Returns the relative state node from the given `statePath`, or throws.\n *\n * @param statePath The string or string array relative path to the state node.\n */\nexport function getStateNodeByPath(\n stateNode: AnyStateNode,\n statePath: string | string[]\n): AnyStateNode {\n if (typeof statePath === 'string' && isStateId(statePath)) {\n try {\n return stateNode.machine.getStateNodeById(statePath);\n } catch {\n // try individual paths\n // throw e;\n }\n }\n const arrayStatePath = toStatePath(statePath).slice();\n let currentStateNode: AnyStateNode = stateNode;\n while (arrayStatePath.length) {\n const key = arrayStatePath.shift()!;\n if (!key.length) {\n break;\n }\n currentStateNode = getStateNode(currentStateNode, key);\n }\n return currentStateNode;\n}\n\n/**\n * Returns the state nodes represented by the current state value.\n *\n * @param stateValue The state value or State instance\n */\nexport function getStateNodes(\n stateNode: AnyStateNode,\n stateValue: StateValue\n): Array<AnyStateNode> {\n if (typeof stateValue === 'string') {\n const childStateNode = stateNode.states[stateValue];\n if (!childStateNode) {\n throw new Error(\n `State '${stateValue}' does not exist on '${stateNode.id}'`\n );\n }\n return [stateNode, childStateNode];\n }\n\n const childStateKeys = Object.keys(stateValue);\n const childStateNodes: Array<AnyStateNode> = childStateKeys\n .map((subStateKey) => getStateNode(stateNode, subStateKey))\n .filter(Boolean);\n\n return [stateNode.machine.root, stateNode].concat(\n childStateNodes,\n childStateKeys.reduce((allSubStateNodes, subStateKey) => {\n const subStateNode = getStateNode(stateNode, subStateKey);\n if (!subStateNode) {\n return allSubStateNodes;\n }\n const subStateNodes = getStateNodes(\n subStateNode,\n stateValue[subStateKey]!\n );\n\n return allSubStateNodes.concat(subStateNodes);\n }, [] as Array<AnyStateNode>)\n );\n}\n\nfunction transitionAtomicNode<\n TContext extends MachineContext,\n TEvent extends EventObject\n>(\n stateNode: AnyStateNode,\n stateValue: string,\n snapshot: MachineSnapshot<\n TContext,\n TEvent,\n any,\n any,\n any,\n any,\n any, // TMeta\n any // TStateSchema\n >,\n event: TEvent\n): Array<TransitionDefinition<TContext, TEvent>> | undefined {\n const childStateNode = getStateNode(stateNode, stateValue);\n const next = childStateNode.next(snapshot, event);\n\n if (!next || !next.length) {\n return stateNode.next(snapshot, event);\n }\n\n return next;\n}\n\nfunction transitionCompoundNode<\n TContext extends MachineContext,\n TEvent extends EventObject\n>(\n stateNode: AnyStateNode,\n stateValue: StateValueMap,\n snapshot: MachineSnapshot<\n TContext,\n TEvent,\n any,\n any,\n any,\n any,\n any, // TMeta\n any // TStateSchema\n >,\n event: TEvent\n): Array<TransitionDefinition<TContext, TEvent>> | undefined {\n const subStateKeys = Object.keys(stateValue);\n\n const childStateNode = getStateNode(stateNode, subStateKeys[0]);\n const next = transitionNode(\n childStateNode,\n stateValue[subStateKeys[0]]!,\n snapshot,\n event\n );\n\n if (!next || !next.length) {\n return stateNode.next(snapshot, event);\n }\n\n return next;\n}\n\nfunction transitionParallelNode<\n TContext extends MachineContext,\n TEvent extends EventObject\n>(\n stateNode: AnyStateNode,\n stateValue: StateValueMap,\n snapshot: MachineSnapshot<\n TContext,\n TEvent,\n any,\n any,\n any,\n any,\n any, // TMeta\n any // TStateSchema\n >,\n event: TEvent\n): Array<TransitionDefinition<TContext, TEvent>> | undefined {\n const allInnerTransitions: Array<TransitionDefinition<TContext, TEvent>> = [];\n\n for (const subStateKey of Object.keys(stateValue)) {\n const subStateValue = stateValue[subStateKey];\n\n if (!subStateValue) {\n continue;\n }\n\n const subStateNode = getStateNode(stateNode, subStateKey);\n const innerTransitions = transitionNode(\n subStateNode,\n subStateValue,\n snapshot,\n event\n );\n if (innerTransitions) {\n allInnerTransitions.push(...innerTransitions);\n }\n }\n if (!allInnerTransitions.length) {\n return stateNode.next(snapshot, event);\n }\n\n return allInnerTransitions;\n}\n\nexport function transitionNode<\n TContext extends MachineContext,\n TEvent extends EventObject\n>(\n stateNode: AnyStateNode,\n stateValue: StateValue,\n snapshot: MachineSnapshot<\n TContext,\n TEvent,\n any,\n any,\n any,\n any,\n any,\n any // TStateSchema\n >,\n event: TEvent\n): Array<TransitionDefinition<TContext, TEvent>> | undefined {\n // leaf node\n if (typeof stateValue === 'string') {\n return transitionAtomicNode(stateNode, stateValue, snapshot, event);\n }\n\n // compound node\n if (Object.keys(stateValue).length === 1) {\n return transitionCompoundNode(stateNode, stateValue, snapshot, event);\n }\n\n // parallel node\n return transitionParallelNode(stateNode, stateValue, snapshot, event);\n}\n\nfunction getHistoryNodes(stateNode: AnyStateNode): Array<AnyStateNode> {\n return Object.keys(stateNode.states)\n .map((key) => stateNode.states[key])\n .filter((sn) => sn.type === 'history');\n}\n\nfunction isDescendant(\n childStateNode: AnyStateNode,\n parentStateNode: AnyStateNode\n): boolean {\n let marker = childStateNode;\n while (marker.parent && marker.parent !== parentStateNode) {\n marker = marker.parent;\n }\n\n return marker.parent === parentStateNode;\n}\n\nfunction hasIntersection<T>(s1: Iterable<T>, s2: Iterable<T>): boolean {\n const set1 = new Set(s1);\n const set2 = new Set(s2);\n\n for (const item of set1) {\n if (set2.has(item)) {\n return true;\n }\n }\n for (const item of set2) {\n if (set1.has(item)) {\n return true;\n }\n }\n return false;\n}\n\nfunction removeConflictingTransitions(\n enabledTransitions: Array<AnyTransitionDefinition>,\n stateNodeSet: Set<AnyStateNode>,\n historyValue: AnyHistoryValue\n): Array<AnyTransitionDefinition> {\n const filteredTransitions = new Set<AnyTransitionDefinition>();\n\n for (const t1 of enabledTransitions) {\n let t1Preempted = false;\n const transitionsToRemove = new Set<AnyTransitionDefinition>();\n for (const t2 of filteredTransitions) {\n if (\n hasIntersection(\n computeExitSet([t1], stateNodeSet, historyValue),\n computeExitSet([t2], stateNodeSet, historyValue)\n )\n ) {\n if (isDescendant(t1.source, t2.source)) {\n transitionsToRemove.add(t2);\n } else {\n t1Preempted = true;\n break;\n }\n }\n }\n if (!t1Preempted) {\n for (const t3 of transitionsToRemove) {\n filteredTransitions.delete(t3);\n }\n filteredTransitions.add(t1);\n }\n }\n\n return Array.from(filteredTransitions);\n}\n\nfunction findLeastCommonAncestor(\n stateNodes: Array<AnyStateNode>\n): AnyStateNode | undefined {\n const [head, ...tail] = stateNodes;\n for (const ancestor of getProperAncestors(head, undefined)) {\n if (tail.every((sn) => isDescendant(sn, ancestor))) {\n return ancestor;\n }\n }\n}\n\nfunction getEffectiveTargetStates(\n transition: Pick<AnyTransitionDefinition, 'target'>,\n historyValue: AnyHistoryValue\n): Array<AnyStateNode> {\n if (!transition.target) {\n return [];\n }\n\n const targets = new Set<AnyStateNode>();\n\n for (const targetNode of transition.target) {\n if (isHistoryNode(targetNode)) {\n if (historyValue[targetNode.id]) {\n for (const node of historyValue[targetNode.id]) {\n targets.add(node);\n }\n } else {\n for (const node of getEffectiveTargetStates(\n resolveHistoryDefaultTransition(targetNode),\n historyValue\n )) {\n targets.add(node);\n }\n }\n } else {\n targets.add(targetNode);\n }\n }\n\n return [...targets];\n}\n\nfunction getTransitionDomain(\n transition: AnyTransitionDefinition,\n historyValue: AnyHistoryValue\n): AnyStateNode | undefined {\n const targetStates = getEffectiveTargetStates(transition, historyValue);\n\n if (!targetStates) {\n return;\n }\n\n if (\n !transition.reenter &&\n targetStates.every(\n (target) =>\n target === transition.source || isDescendant(target, transition.source)\n )\n ) {\n return transition.source;\n }\n\n const lca = findLeastCommonAncestor(targetStates.concat(transition.source));\n\n if (lca) {\n return lca;\n }\n\n // at this point we know that it's a root transition since LCA couldn't be found\n if (transition.reenter) {\n return;\n }\n\n return transition.source.machine.root;\n}\n\nfunction computeExitSet(\n transitions: AnyTransitionDefinition[],\n stateNodeSet: Set<AnyStateNode>,\n historyValue: AnyHistoryValue\n): Array<AnyStateNode> {\n const statesToExit = new Set<AnyStateNode>();\n\n for (const t of transitions) {\n if (t.target?.length) {\n const domain = getTransitionDomain(t, historyValue);\n\n if (t.reenter && t.source === domain) {\n statesToExit.add(domain);\n }\n\n for (const stateNode of stateNodeSet) {\n if (isDescendant(stateNode, domain!)) {\n statesToExit.add(stateNode);\n }\n }\n }\n }\n\n return [...statesToExit];\n}\n\nfunction areStateNodeCollectionsEqual(\n prevStateNodes: StateNode[],\n nextStateNodeSet: Set<StateNode>\n) {\n if (prevStateNodes.length !== nextStateNodeSet.size) {\n return false;\n }\n for (const node of prevStateNodes) {\n if (!nextStateNodeSet.has(node)) {\n return false;\n }\n }\n return true;\n}\n\ntype Microstep = readonly [AnyMachineSnapshot, ExecutableActionObject[]];\n\nexport function initialMicrostep(\n root: AnyStateNode,\n preInitialState: AnyMachineSnapshot,\n actorScope: AnyActorScope,\n initEvent: AnyEventObject,\n internalQueue: AnyEventObject[]\n): Microstep {\n return microstep(\n [\n {\n target: [...getInitialStateNodes(root)],\n source: root,\n reenter: true,\n actions: [],\n eventType: null as any,\n toJSON: null as any\n }\n ],\n preInitialState,\n actorScope,\n initEvent,\n true,\n internalQueue\n );\n}\n\n/** https://www.w3.org/TR/scxml/#microstepProcedure */\nfunction microstep(\n transitions: Array<AnyTransitionDefinition>,\n currentSnapshot: AnyMachineSnapshot,\n actorScope: AnyActorScope,\n event: AnyEventObject,\n isInitial: boolean,\n internalQueue: Array<AnyEventObject>\n): Microstep {\n const actions: ExecutableActionObject[] = [];\n\n if (!transitions.length) {\n return [currentSnapshot, actions];\n }\n\n const originalExecutor = actorScope.actionExecutor;\n actorScope.actionExecutor = (action) => {\n actions.push(action);\n originalExecutor(action);\n };\n\n try {\n const mutStateNodeSet = new Set(currentSnapshot._nodes);\n let historyValue = currentSnapshot.historyValue;\n\n const filteredTransitions = removeConflictingTransitions(\n transitions,\n mutStateNodeSet,\n historyValue\n );\n\n let nextState = currentSnapshot;\n\n // Exit states\n if (!isInitial) {\n [nextState, historyValue] = exitStates(\n nextState,\n event,\n actorScope,\n filteredTransitions,\n mutStateNodeSet,\n historyValue,\n internalQueue,\n actorScope.actionExecutor\n );\n }\n\n // Execute transition content\n nextState = resolveActionsAndContext(\n nextState,\n event,\n actorScope,\n filteredTransitions.flatMap((t) => t.actions),\n internalQueue,\n undefined\n );\n\n // Enter states\n nextState = enterStates(\n nextState,\n event,\n actorScope,\n filteredTransitions,\n mutStateNodeSet,\n internalQueue,\n historyValue,\n isInitial\n );\n\n const nextStateNodes = [...mutStateNodeSet];\n\n if (nextState.status === 'done') {\n nextState = resolveActionsAndContext(\n nextState,\n event,\n actorScope,\n nextStateNodes\n .sort((a, b) => b.order - a.order)\n .flatMap((state) => state.exit),\n internalQueue,\n undefined\n );\n }\n\n // eslint-disable-next-line no-useless-catch\n try {\n if (\n historyValue === currentSnapshot.historyValue &&\n areStateNodeCollectionsEqual(currentSnapshot._nodes, mutStateNodeSet)\n ) {\n return [nextState, actions];\n }\n return [\n cloneMachineSnapshot(nextState, {\n _nodes: nextStateNodes,\n historyValue\n }),\n actions\n ];\n } catch (e) {\n // TODO: Refactor this once proper error handling is implemented.\n // See https://github.com/statelyai/rfcs/pull/4\n throw e;\n }\n } finally {\n actorScope.actionExecutor = originalExecutor;\n }\n}\n\nfunction getMachineOutput(\n snapshot: AnyMachineSnapshot,\n event: AnyEventObject,\n actorScope: AnyActorScope,\n rootNode: AnyStateNode,\n rootCompletionNode: AnyStateNode\n) {\n if (rootNode.output === undefined) {\n return;\n }\n const doneStateEvent = createDoneStateEvent(\n rootCompletionNode.id,\n rootCompletionNode.output !== undefined && rootCompletionNode.parent\n ? resolveOutput(\n rootCompletionNode.output,\n snapshot.context,\n event,\n actorScope.self\n )\n : undefined\n );\n return resolveOutput(\n rootNode.output,\n snapshot.context,\n doneStateEvent,\n actorScope.self\n );\n}\n\nfunction enterStates(\n currentSnapshot: AnyMachineSnapshot,\n event: AnyEventObject,\n actorScope: AnyActorScope,\n filteredTransitions: AnyTransitionDefinition[],\n mutStateNodeSet: Set<AnyStateNode>,\n internalQueue: AnyEventObject[],\n historyValue: HistoryValue<any, any>,\n isInitial: boolean\n) {\n let nextSnapshot = currentSnapshot;\n const statesToEnter = new Set<AnyStateNode>();\n // those are states that were directly targeted or indirectly targeted by the explicit target\n // in other words, those are states for which initial actions should be executed\n // when we target `#deep_child` initial actions of its ancestors shouldn't be executed\n const statesForDefaultEntry = new Set<AnyStateNode>();\n computeEntrySet(\n filteredTransitions,\n historyValue,\n statesForDefaultEntry,\n statesToEnter\n );\n\n // In the initial state, the root state node is \"entered\".\n if (isInitial) {\n statesForDefaultEntry.add(currentSnapshot.machine.root);\n }\n\n const completedNodes = new Set();\n\n for (const stateNodeToEnter of [...statesToEnter].sort(\n (a, b) => a.order - b.order\n )) {\n mutStateNodeSet.add(stateNodeToEnter);\n const actions: UnknownAction[] = [];\n\n // Add entry actions\n actions.push(...stateNodeToEnter.entry);\n\n for (const invokeDef of stateNodeToEnter.invoke) {\n actions.push(\n spawnChild(invokeDef.src, {\n ...invokeDef,\n syncSnapshot: !!invokeDef.onSnapshot\n })\n );\n }\n\n if (statesForDefaultEntry.has(stateNodeToEnter)) {\n const initialActions = stateNodeToEnter.initial.actions;\n actions.push(...initialActions);\n }\n\n nextSnapshot = resolveActionsAndContext(\n nextSnapshot,\n event,\n actorScope,\n actions,\n internalQueue,\n stateNodeToEnter.invoke.map((invokeDef) => invokeDef.id)\n );\n\n if (stateNodeToEnter.type === 'final') {\n const parent = stateNodeToEnter.parent;\n\n let ancestorMarker =\n parent?.type === 'parallel' ? parent : parent?.parent;\n let rootCompletionNode = ancestorMarker || stateNodeToEnter;\n\n if (parent?.type === 'compound') {\n internalQueue.push(\n createDoneStateEvent(\n parent.id,\n stateNodeToEnter.output !== undefined\n ? resolveOutput(\n stateNodeToEnter.output,\n nextSnapshot.context,\n event,\n actorScope.self\n )\n : undefined\n )\n );\n }\n while (\n ancestorMarker?.type === 'parallel' &&\n !completedNodes.has(ancestorMarker) &&\n isInFinalState(mutStateNodeSet, ancestorMarker)\n ) {\n completedNodes.add(ancestorMarker);\n internalQueue.push(createDoneStateEvent(ancestorMarker.id));\n rootCompletionNode = ancestorMarker;\n ancestorMarker = ancestorMarker.parent;\n }\n if (ancestorMarker) {\n continue;\n }\n\n nextSnapshot = cloneMachineSnapshot(nextSnapshot, {\n status: 'done',\n output: getMachineOutput(\n nextSnapshot,\n event,\n actorScope,\n nextSnapshot.machine.root,\n rootCompletionNode\n )\n });\n }\n }\n\n return nextSnapshot;\n}\n\nfunction computeEntrySet(\n transitions: Array<AnyTransitionDefinition>,\n historyValue: HistoryValue<any, any>,\n statesForDefaultEntry: Set<AnyStateNode>,\n statesToEnter: Set<AnyStateNode>\n) {\n for (const t of transitions) {\n const domain = getTransitionDomain(t, historyValue);\n\n for (const s of t.target || []) {\n if (\n !isHistoryNode(s) &&\n // if the target is different than the source then it will *definitely* be entered\n (t.source !== s ||\n // we know that the domain can't lie within the source\n // if it's different than the source then it's outside of it and it means that the target has to be entered as well\n t.source !== domain ||\n // reentering transitions always enter the target, even if it's the source itself\n t.reenter)\n ) {\n statesToEnter.add(s);\n statesForDefaultEntry.add(s);\n }\n addDescendantStatesToEnter(\n s,\n historyValue,\n statesForDefaultEntry,\n statesToEnter\n );\n }\n const targetStates = getEffectiveTargetStates(t, historyValue);\n for (const s of targetStates) {\n const ancestors = getProperAncestors(s, domain);\n if (domain?.type === 'parallel') {\n ancestors.push(domain);\n }\n addAncestorStatesToEnter(\n statesToEnter,\n historyValue,\n statesForDefaultEntry,\n ancestors,\n !t.source.parent && t.reenter ? undefined : domain\n );\n }\n }\n}\n\nfunction addDescendantStatesToEnter<\n TContext extends MachineContext,\n TEvent extends EventObject\n>(\n stateNode: AnyStateNode,\n historyValue: HistoryValue<any, any>,\n statesForDefaultEntry: Set<AnyStateNode>,\n statesToEnter: Set<AnyStateNode>\n) {\n if (isHistoryNode(stateNode)) {\n if (historyValue[stateNode.id]) {\n const historyStateNodes = historyValue[stateNode.id];\n for (const s of historyStateNodes) {\n statesToEnter.add(s);\n\n addDescendantStatesToEnter(\n s,\n historyValue,\n statesForDefaultEntry,\n statesToEnter\n );\n }\n for (const s of historyStateNodes) {\n addProperAncestorStatesToEnter(\n s,\n stateNode.parent,\n statesToEnter,\n historyValue,\n statesForDefaultEntry\n );\n }\n } else {\n const historyDefaultTransition = resolveHistoryDefaultTransition<\n TContext,\n TEvent\n >(stateNode);\n for (const s of historyDefaultTransition.target) {\n statesToEnter.add(s);\n\n if (historyDefaultTransition === stateNode.parent?.initial) {\n statesForDefaultEntry.add(stateNode.parent);\n }\n\n addDescendantStatesToEnter(\n s,\n historyValue,\n statesForDefaultEntry,\n statesToEnter\n );\n }\n\n for (const s of historyDefaultTransition.target) {\n addProperAncestorStatesToEnter(\n s,\n stateNode.parent,\n statesToEnter,\n historyValue,\n statesForDefaultEntry\n );\n }\n }\n } else {\n if (stateNode.type === 'compound') {\n const [initialState] = stateNode.initial.target;\n\n if (!isHistoryNode(initialState)) {\n statesToEnter.add(initialState);\n statesForDefaultEntry.add(initialState);\n }\n addDescendantStatesToEnter(\n initialState,\n historyValue,\n statesForDefaultEntry,\n statesToEnter\n );\n\n addProperAncestorStatesToEnter(\n initialState,\n stateNode,\n statesToEnter,\n historyValue,\n statesForDefaultEntry\n );\n } else {\n if (stateNode.type === 'parallel') {\n for (const child of getChildren(stateNode).filter(\n (sn) => !isHistoryNode(sn)\n )) {\n if (![...statesToEnter].some((s) => isDescendant(s, child))) {\n if (!isHistoryNode(child)) {\n statesToEnter.add(child);\n statesForDefaultEntry.add(child);\n }\n addDescendantStatesToEnter(\n child,\n historyValue,\n statesForDefaultEntry,\n statesToEnter\n );\n }\n }\n }\n }\n }\n}\n\nfunction addAncestorStatesToEnter(\n statesToEnter: Set<AnyStateNode>,\n historyValue: HistoryValue<any, any>,\n statesForDefaultEntry: Set<AnyStateNode>,\n ancestors: AnyStateNode[],\n reentrancyDomain?: AnyStateNode\n) {\n for (const anc of ancestors) {\n if (!reentrancyDomain || isDescendant(anc, reentrancyDomain)) {\n statesToEnter.add(anc);\n }\n if (anc.type === 'parallel') {\n for (const child of getChildren(anc).filter((sn) => !isHistoryNode(sn))) {\n if (![...statesToEnter].some((s) => isDescendant(s, child))) {\n statesToEnter.add(child);\n addDescendantStatesToEnter(\n child,\n historyValue,\n statesForDefaultEntry,\n statesToEnter\n );\n }\n }\n }\n }\n}\n\nfunction addProperAncestorStatesToEnter(\n stateNode: AnyStateNode,\n toStateNode: AnyStateNode | undefined,\n statesToEnter: Set<AnyStateNode>,\n historyValue: HistoryValue<any, any>,\n statesForDefaultEntry: Set<AnyStateNode>\n) {\n addAncestorStatesToEnter(\n statesToEnter,\n historyValue,\n statesForDefaultEntry,\n getProperAncestors(stateNode, toStateNode)\n );\n}\n\nfunction exitStates(\n currentSnapshot: AnyMachineSnapshot,\n event: AnyEventObject,\n actorScope: AnyActorScope,\n transitions: AnyTransitionDefinition[],\n mutStateNodeSet: Set<AnyStateNode>,\n historyValue: HistoryValue<any, any>,\n internalQueue: AnyEventObject[],\n _actionExecutor: ActionExecutor\n) {\n let nextSnapshot = currentSnapshot;\n const statesToExit = computeExitSet(\n transitions,\n mutStateNodeSet,\n historyValue\n );\n\n statesToExit.sort((a, b) => b.order - a.order);\n\n let changedHistory: typeof historyValue | undefined;\n\n // From SCXML algorithm: https://www.w3.org/TR/scxml/#exitStates\n for (const exitStateNode of statesToExit) {\n for (const historyNode of getHistoryNodes(exitStateNode)) {\n let predicate: (sn: AnyStateNode) => boolean;\n if (historyNode.history === 'deep') {\n predicate = (sn) =>\n isAtomicStateNode(sn) && isDescendant(sn, exitStateNode);\n } else {\n predicate = (sn) => {\n return sn.parent === exitStateNode;\n };\n }\n changedHistory ??= { ...historyValue };\n changedHistory[historyNode.id] =\n Array.from(mutStateNodeSet).filter(predicate);\n }\n }\n\n for (const s of statesToExit) {\n nextSnapshot = resolveActionsAndContext(\n nextSnapshot,\n event,\n actorScope,\n [...s.exit, ...s.invoke.map((def) => stopChild(def.id))],\n internalQueue,\n undefined\n );\n mutStateNodeSet.delete(s);\n }\n return [nextSnapshot, changedHistory || historyValue] as const;\n}\n\nexport interface BuiltinAction {\n (): void;\n type: `xstate.${string}`;\n resolve: (\n actorScope: AnyActorScope,\n snapshot: AnyMachineSnapshot,\n actionArgs: ActionArgs<any, any, any>,\n actionParams: ParameterizedObject['params'] | undefined,\n action: unknown,\n extra: unknown\n ) => [\n newState: AnyMachineSnapshot,\n params: unknown,\n actions?: UnknownAction[]\n ];\n retryResolve: (\n actorScope: AnyActorScope,\n snapshot: AnyMachineSnapshot,\n params: unknown\n ) => void;\n execute: (actorScope: AnyActorScope, params: unknown) => void;\n}\n\nfunction getAction(machine: AnyStateMachine, actionType: string) {\n return machine.implementations.actions[actionType];\n}\n\nfunction resolveAndExecuteActionsWithContext(\n currentSnapshot: AnyMachineSnapshot,\n event: AnyEventObject,\n actorScope: AnyActorScope,\n actions: UnknownAction[],\n extra: {\n internalQueue: AnyEventObject[];\n deferredActorIds: string[] | undefined;\n },\n retries: (readonly [BuiltinAction, unknown])[] | undefined\n): AnyMachineSnapshot {\n const { machine } = currentSnapshot;\n let intermediateSnapshot = currentSnapshot;\n\n for (const action of actions) {\n const isInline = typeof action === 'function';\n const resolvedAction = isInline\n ? action\n : // the existing type of `.actions` assumes non-nullable `TExpressionAction`\n // it's fine to cast this here to get a common type and lack of errors in the rest of the code\n // our logic below makes sure that we call those 2 \"variants\" correctly\n\n getAction(machine, typeof action === 'string' ? action : action.type);\n const actionArgs = {\n context: intermediateSnapshot.context,\n event,\n self: actorScope.self,\n system: actorScope.system\n };\n\n const actionParams =\n isInline || typeof action === 'string'\n ? undefined\n : 'params' in action\n ? typeof action.params === 'function'\n ? action.params({ context: intermediateSnapshot.context, event })\n : action.params\n : undefined;\n\n if (!resolvedAction || !('resolve' in resolvedAction)) {\n actorScope.actionExecutor({\n type:\n typeof action === 'string'\n ? action\n : typeof action === 'object'\n ? action.type\n : action.name || '(anonymous)',\n info: actionArgs,\n params: actionParams,\n exec: resolvedAction\n });\n continue;\n }\n\n const builtinAction = resolvedAction as BuiltinAction;\n\n const [nextState, params, actions] = builtinAction.resolve(\n actorScope,\n intermediateSnapshot,\n actionArgs,\n actionParams,\n resolvedAction, // this holds all params\n extra\n );\n intermediateSnapshot = nextState;\n\n if ('retryResolve' in builtinAction) {\n retries?.push([builtinAction, params]);\n }\n\n if ('execute' in builtinAction) {\n actorScope.actionExecutor({\n type: builtinAction.type,\n info: actionArgs,\n params,\n exec: builtinAction.execute.bind(null, actorScope, params)\n });\n }\n\n if (actions) {\n intermediateSnapshot = resolveAndExecuteActionsWithContext(\n intermediateSnapshot,\n event,\n actorScope,\n actions,\n extra,\n retries\n );\n }\n }\n\n return intermediateSnapshot;\n}\n\nexport function resolveActionsAndContext(\n currentSnapshot: AnyMachineSnapshot,\n event: AnyEventObject,\n actorScope: AnyActorScope,\n actions: UnknownAction[],\n internalQueue: AnyEventObject[],\n deferredActorIds: string[] | undefined\n): AnyMachineSnapshot {\n const retries: (readonly [BuiltinAction, unknown])[] | undefined =\n deferredActorIds ? [] : undefined;\n const nextState = resolveAndExecuteActionsWithContext(\n currentSnapshot,\n event,\n actorScope,\n actions,\n { internalQueue, deferredActorIds },\n retries\n );\n retries?.forEach(([builtinAction, params]) => {\n builtinAction.retryResolve(actorScope, nextState, params);\n });\n return nextState;\n}\n\nexport function macrostep(\n snapshot: AnyMachineSnapshot,\n event: EventObject,\n actorScope: AnyActorScope,\n internalQueue: AnyEventObject[]\n): {\n snapshot: typeof snapshot;\n microsteps: Microstep[];\n} {\n if (isDevelopment && event.type === WILDCARD) {\n throw new Error(`An event cannot have the wildcard type ('${WILDCARD}')`);\n }\n\n let nextSnapshot = snapshot;\n const microsteps: Microstep[] = [];\n\n function addMicrostep(\n step: Microstep,\n event: AnyEventObject,\n transitions: AnyTransitionDefinition[]\n ) {\n actorScope.system._sendInspectionEvent({\n type: '@xstate.microstep',\n actorRef: actorScope.self,\n event,\n snapshot: step[0],\n _transitions: transitions\n });\n microsteps.push(step);\n }\n\n // Handle stop event\n if (event.type === XSTATE_STOP) {\n nextSnapshot = cloneMachineSnapshot(\n stopChildren(nextSnapshot, event, actorScope),\n {\n status: 'stopped'\n }\n );\n addMicrostep([nextSnapshot, []], event, []);\n return {\n snapshot: nextSnapshot,\n microsteps\n };\n }\n\n let nextEvent = event;\n\n // Assume the state is at rest (no raised events)\n // Determine the next state based on the next microstep\n if (nextEvent.type !== XSTATE_INIT) {\n const currentEvent = nextEvent;\n const isErr = isErrorActorEvent(currentEvent);\n\n const transitions = selectTransitions(currentEvent, nextSnapshot);\n\n if (isErr && !transitions.length) {\n // TODO: we should likely only allow transitions selected by very explicit descriptors\n // `*` shouldn't be matched, likely `xstate.error.*` shouldn't be either\n // similarly `xstate.error.actor.*` and `xstate.error.actor.todo.*` have to be considered too\n nextSnapshot = cloneMachineSnapshot<typeof snapshot>(snapshot, {\n status: 'error',\n error: currentEvent.error\n });\n addMicrostep([nextSnapshot, []], currentEvent, []);\n return {\n snapshot: nextSnapshot,\n microsteps\n };\n }\n const step = microstep(\n transitions,\n snapshot,\n actorScope,\n nextEvent,\n false, // isInitial\n internalQueue\n );\n nextSnapshot = step[0];\n addMicrostep(step, currentEvent, transitions);\n }\n\n let shouldSelectEventlessTransitions = true;\n const maxIterations = snapshot.machine.options?.maxIterations ?? Infinity;\n let iterationCount = 0;\n\n while (nextSnapshot.status === 'active') {\n iterationCount++;\n if (iterationCount > maxIterations) {\n throw new Error(\n `Infinite loop detected: the machine has processed more than ${maxIterations} microsteps without reaching a stable state. This usually happens when there's a cycle of transitions (e.g., eventless transitions or raised events causing state A -> B -> C -> A).`\n );\n }\n\n let enabledTransitions: AnyTransitionDefinition[] =\n shouldSelectEventlessTransitions\n ? selectEventlessTransitions(nextSnapshot, nextEvent)\n : [];\n\n // eventless transitions should always be selected after selecting *regular* transitions\n // by assigning `undefined` to `previousState` we ensure that `shouldSelectEventlessTransitions` gets always computed to true in such a case\n const previousState = enabledTransitions.length ? nextSnapshot : undefined;\n\n if (!enabledTransitions.length) {\n if (!internalQueue.length) {\n break;\n }\n nextEvent = internalQueue.shift()!;\n enabledTransitions = selectTransitions(nextEvent, nextSnapshot);\n }\n\n const step = microstep(\n enabledTransitions,\n nextSnapshot,\n actorScope,\n nextEvent,\n false,\n internalQueue\n );\n nextSnapshot = step[0];\n shouldSelectEventlessTransitions = nextSnapshot !== previousState;\n addMicrostep(step, nextEvent, enabledTransitions);\n }\n\n if (nextSnapshot.status !== 'active') {\n stopChildren(nextSnapshot, nextEvent, actorScope);\n }\n\n return {\n snapshot: nextSnapshot,\n microsteps\n };\n}\n\nfunction stopChildren(\n nextState: AnyMachineSnapshot,\n event: AnyEventObject,\n actorScope: AnyActorScope\n) {\n return resolveActionsAndContext(\n nextState,\n event,\n actorScope,\n Object.values(nextState.children).map((child: any) => stopChild(child)),\n [],\n undefined\n );\n}\n\nfunction selectTransitions(\n event: AnyEventObject,\n nextState: AnyMachineSnapshot\n): AnyTransitionDefinition[] {\n return nextState.machine.getTransitionData(nextState as any, event);\n}\n\nfunction selectEventlessTransitions(\n nextState: AnyMachineSnapshot,\n event: AnyEventObject\n): AnyTransitionDefinition[] {\n const enabledTransitionSet: Set<AnyTransitionDefinition> = new Set();\n const atomicStates = nextState._nodes.filter(isAtomicStateNode);\n\n for (const stateNode of atomicStates) {\n loop: for (const s of [stateNode].concat(\n getProperAncestors(stateNode, undefined)\n )) {\n if (!s.always) {\n continue;\n }\n for (const transition of s.always) {\n if (\n transition.guard === undefined ||\n evaluateGuard(transition.guard, nextState.context, event, nextState)\n ) {\n enabledTransitionSet.add(transition);\n break loop;\n }\n }\n }\n }\n\n return removeConflictingTransitions(\n Array.from(enabledTransitionSet),\n new Set(nextState._nodes),\n nextState.historyValue\n );\n}\n\n/**\n * Resolves a partial state value with its full representation in the state\n * node's machine.\n *\n * @param stateValue The partial state value to resolve.\n */\nexport function resolveStateValue(\n rootNode: AnyStateNode,\n stateValue: StateValue\n): StateValue {\n const allStateNodes = getAllStateNodes(getStateNodes(rootNode, stateValue));\n return getStateValue(rootNode, [...allStateNodes]);\n}\n","import isDevelopment from '#is-development';\nimport { $$ACTOR_TYPE } from './createActor.ts';\nimport type { StateNode } from './StateNode.ts';\nimport type { StateMachine } from './StateMachine.ts';\nimport { getStateValue } from './stateUtils.ts';\nimport type {\n ProvidedActor,\n AnyMachineSnapshot,\n AnyStateMachine,\n EventObject,\n HistoryValue,\n MachineContext,\n StateConfig,\n StateValue,\n AnyActorRef,\n Snapshot,\n ParameterizedObject,\n IsNever,\n MetaObject,\n StateSchema,\n StateId,\n SnapshotStatus,\n PersistedHistoryValue\n} from './types.ts';\nimport { matchesState } from './utils.ts';\n\ntype ToTestStateValue<TStateValue extends StateValue> =\n TStateValue extends string\n ? TStateValue\n : IsNever<keyof TStateValue> extends true\n ? never\n :\n | keyof TStateValue\n | {\n [K in keyof TStateValue]?: ToTestStateValue<\n NonNullable<TStateValue[K]>\n >;\n };\n\nexport function isMachineSnapshot(value: unknown): value is AnyMachineSnapshot {\n return (\n !!value &&\n typeof value === 'object' &&\n 'machine' in value &&\n 'value' in value\n );\n}\n\ninterface MachineSnapshotBase<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TChildren extends Record<string, AnyActorRef | undefined>,\n TStateValue extends StateValue,\n TTag extends string,\n TOutput,\n TMeta,\n TStateSchema extends StateSchema = StateSchema\n> {\n /** The state machine that produced this state snapshot. */\n machine: StateMachine<\n TContext,\n TEvent,\n TChildren,\n ProvidedActor,\n ParameterizedObject,\n ParameterizedObject,\n string,\n TStateValue,\n TTag,\n unknown,\n TOutput,\n EventObject, // TEmitted\n any, // TMeta\n TStateSchema\n >;\n /** The tags of the active state nodes that represent the current state value. */\n tags: Set<string>;\n /**\n * The current state value.\n *\n * This represents the active state nodes in the state machine.\n *\n * - For atomic state nodes, it is a string.\n * - For compound parent state nodes, it is an object where:\n *\n * - The key is the parent state node's key\n * - The value is the current state value of the active child state node(s)\n *\n * @example\n *\n * ```ts\n * // single-level state node\n * snapshot.value; // => 'yellow'\n *\n * // nested state nodes\n * snapshot.value; // => { red: 'wait' }\n * ```\n */\n value: TStateValue;\n /** The current status of this snapshot. */\n status: SnapshotStatus;\n error: unknown;\n context: TContext;\n\n historyValue: Readonly<HistoryValue<TContext, TEvent>>;\n /** The enabled state nodes representative of the state value. */\n _nodes: Array<StateNode<TContext, TEvent>>;\n /** An object mapping actor names to spawned/invoked actors. */\n children: TChildren;\n\n /**\n * Whether the current state value is a subset of the given partial state\n * value.\n *\n * @param partialStateValue\n */\n matches: (partialStateValue: ToTestStateValue<TStateValue>) => boolean;\n\n /**\n * Whether the current state nodes has a state node with the specified `tag`.\n *\n * @param tag\n */\n hasTag: (tag: TTag) => boolean;\n\n /**\n * Determines whether sending the `event` will cause a non-forbidden\n * transition to be selected, even if the transitions have no actions nor\n * change the state value.\n *\n * @param event The event to test\n * @returns Whether the event will cause a transition\n */\n can: (event: TEvent) => boolean;\n\n getMeta: () => Record<\n StateId<TStateSchema> & string,\n TMeta | undefined // States might not have meta defined\n >;\n\n toJSON: () => unknown;\n}\n\ninterface ActiveMachineSnapshot<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TChildren extends Record<string, AnyActorRef | undefined>,\n TStateValue extends StateValue,\n TTag extends string,\n TOutput,\n TMeta extends MetaObject,\n TStateSchema extends StateSchema\n> extends MachineSnapshotBase<\n TContext,\n TEvent,\n TChildren,\n TStateValue,\n TTag,\n TOutput,\n TMeta,\n TStateSchema\n > {\n status: 'active';\n output: undefined;\n error: undefined;\n}\n\ninterface DoneMachineSnapshot<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TChildren extends Record<string, AnyActorRef | undefined>,\n TStateValue extends StateValue,\n TTag extends string,\n TOutput,\n TMeta extends MetaObject,\n TStateSchema extends StateSchema\n> extends MachineSnapshotBase<\n TContext,\n TEvent,\n TChildren,\n TStateValue,\n TTag,\n TOutput,\n TMeta,\n TStateSchema\n > {\n status: 'done';\n output: TOutput;\n error: undefined;\n}\n\ninterface ErrorMachineSnapshot<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TChildren extends Record<string, AnyActorRef | undefined>,\n TStateValue extends StateValue,\n TTag extends string,\n TOutput,\n TMeta extends MetaObject,\n TStateSchema extends StateSchema\n> extends MachineSnapshotBase<\n TContext,\n TEvent,\n TChildren,\n TStateValue,\n TTag,\n TOutput,\n TMeta,\n TStateSchema\n > {\n status: 'error';\n output: undefined;\n error: unknown;\n}\n\ninterface StoppedMachineSnapshot<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TChildren extends Record<string, AnyActorRef | undefined>,\n TStateValue extends StateValue,\n TTag extends string,\n TOutput,\n TMeta extends MetaObject,\n TStateSchema extends StateSchema\n> extends MachineSnapshotBase<\n TContext,\n TEvent,\n TChildren,\n TStateValue,\n TTag,\n TOutput,\n TMeta,\n TStateSchema\n > {\n status: 'stopped';\n output: undefined;\n error: undefined;\n}\n\nexport type MachineSnapshot<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TChildren extends Record<string, AnyActorRef | undefined>,\n TStateValue extends StateValue,\n TTag extends string,\n TOutput,\n TMeta extends MetaObject,\n TStateSchema extends StateSchema\n> =\n | ActiveMachineSnapshot<\n TContext,\n TEvent,\n TChildren,\n TStateValue,\n TTag,\n TOutput,\n TMeta,\n TStateSchema\n >\n | DoneMachineSnapshot<\n TContext,\n TEvent,\n TChildren,\n TStateValue,\n TTag,\n TOutput,\n TMeta,\n TStateSchema\n >\n | ErrorMachineSnapshot<\n TContext,\n TEvent,\n TChildren,\n TStateValue,\n TTag,\n TOutput,\n TMeta,\n TStateSchema\n >\n | StoppedMachineSnapshot<\n TContext,\n TEvent,\n TChildren,\n TStateValue,\n TTag,\n TOutput,\n TMeta,\n TStateSchema\n >;\n\nconst machineSnapshotMatches = function matches(\n this: AnyMachineSnapshot,\n testValue: StateValue\n) {\n return matchesState(testValue, this.value);\n};\n\nconst machineSnapshotHasTag = function hasTag(\n this: AnyMachineSnapshot,\n tag: string\n) {\n return this.tags.has(tag);\n};\n\nconst machineSnapshotCan = function can(\n this: AnyMachineSnapshot,\n event: EventObject\n) {\n if (isDevelopment && !this.machine) {\n console.warn(\n `state.can(...) used outside of a machine-created State object; this will always return false.`\n );\n }\n\n const transitionData = this.machine.getTransitionData(this, event);\n\n return (\n !!transitionData?.length &&\n // Check that at least one transition is not forbidden\n transitionData.some((t) => t.target !== undefined || t.actions.length)\n );\n};\n\nconst machineSnapshotToJSON = function toJSON(this: AnyMachineSnapshot) {\n const {\n _nodes: nodes,\n tags,\n machine,\n getMeta,\n toJSON,\n can,\n hasTag,\n matches,\n ...jsonValues\n } = this;\n return { ...jsonValues, tags: Array.from(tags) };\n};\n\nconst machineSnapshotGetMeta = function getMeta(this: AnyMachineSnapshot) {\n return this._nodes.reduce(\n (acc, stateNode) => {\n if (stateNode.meta !== undefined) {\n acc[stateNode.id] = stateNode.meta;\n }\n return acc;\n },\n {} as Record<string, any>\n );\n};\n\nexport function createMachineSnapshot<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TChildren extends Record<string, AnyActorRef | undefined>,\n TStateValue extends StateValue,\n TTag extends string,\n TMeta extends MetaObject,\n TStateSchema extends StateSchema\n>(\n config: StateConfig<TContext, TEvent>,\n machine: AnyStateMachine\n): MachineSnapshot<\n TContext,\n TEvent,\n TChildren,\n TStateValue,\n TTag,\n undefined,\n TMeta,\n TStateSchema\n> {\n return {\n status: config.status as never,\n output: config.output,\n error: config.error,\n machine,\n context: config.context,\n _nodes: config._nodes,\n value: getStateValue(machine.root, config._nodes) as never,\n tags: new Set(config._nodes.flatMap((sn) => sn.tags)),\n children: config.children as any,\n historyValue: config.historyValue || {},\n matches: machineSnapshotMatches as never,\n hasTag: machineSnapshotHasTag,\n can: machineSnapshotCan,\n getMeta: machineSnapshotGetMeta,\n toJSON: machineSnapshotToJSON\n };\n}\n\nexport function cloneMachineSnapshot<TState extends AnyMachineSnapshot>(\n snapshot: TState,\n config: Partial<StateConfig<any, any>> = {}\n): TState {\n return createMachineSnapshot(\n { ...snapshot, ...config } as StateConfig<any, any>,\n snapshot.machine\n ) as TState;\n}\n\nfunction serializeHistoryValue<\n TContext extends MachineContext,\n TEvent extends EventObject\n>(historyValue: HistoryValue<TContext, TEvent>): PersistedHistoryValue {\n if (typeof historyValue !== 'object' || historyValue === null) {\n return {};\n }\n const result: PersistedHistoryValue = {};\n\n for (const key in historyValue) {\n const value = historyValue[key];\n if (Array.isArray(value)) {\n result[key] = value.map((item) => ({ id: item.id }));\n }\n }\n\n return result;\n}\n\nexport function getPersistedSnapshot<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TChildren extends Record<string, AnyActorRef | undefined>,\n TStateValue extends StateValue,\n TTag extends string,\n TOutput,\n TMeta extends MetaObject\n>(\n snapshot: MachineSnapshot<\n TContext,\n TEvent,\n TChildren,\n TStateValue,\n TTag,\n TOutput,\n TMeta,\n any // state schema\n >,\n options?: unknown\n): Snapshot<unknown> {\n const {\n _nodes: nodes,\n tags,\n machine,\n children,\n context,\n can,\n hasTag,\n matches,\n getMeta,\n toJSON,\n ...jsonValues\n } = snapshot;\n\n const childrenJson: Record<string, unknown> = {};\n\n for (const id in children) {\n const child = children[id] as any;\n if (\n isDevelopment &&\n typeof child.src !== 'string' &&\n (!options || !('__unsafeAllowInlineActors' in (options as object)))\n ) {\n throw new Error('An inline child actor cannot be persisted.');\n }\n childrenJson[id as keyof typeof childrenJson] = {\n snapshot: child.getPersistedSnapshot(options),\n src: child.src,\n systemId: child.systemId,\n syncSnapshot: child._syncSnapshot\n };\n }\n\n const persisted = {\n ...jsonValues,\n context: persistContext(context) as any,\n children: childrenJson,\n historyValue: serializeHistoryValue<TContext, TEvent>(\n jsonValues.historyValue\n )\n };\n\n return persisted;\n}\n\nfunction persistContext(contextPart: Record<string, unknown>) {\n let copy: typeof contextPart | undefined;\n for (const key in contextPart) {\n const value = contextPart[key];\n if (value && typeof value === 'object') {\n if ('sessionId' in value && 'send' in value && 'ref' in value) {\n copy ??= Array.isArray(contextPart)\n ? (contextPart.slice() as typeof contextPart)\n : { ...contextPart };\n copy[key] = {\n xstate$$type: $$ACTOR_TYPE,\n id: (value as any as AnyActorRef).id\n };\n } else {\n const result = persistContext(value as typeof contextPart);\n if (result !== value) {\n copy ??= Array.isArray(contextPart)\n ? (contextPart.slice() as typeof contextPart)\n : { ...contextPart };\n copy[key] = result;\n }\n }\n }\n }\n return copy ?? contextPart;\n}\n","import { ProcessingStatus, createActor } from './createActor.ts';\nimport {\n ActorRefFromLogic,\n AnyActorLogic,\n AnyActorRef,\n AnyActorScope,\n AnyEventObject,\n AnyMachineSnapshot,\n ConditionalRequired,\n GetConcreteByKey,\n InputFrom,\n IsLiteralString,\n IsNotNever,\n ProvidedActor,\n RequiredActorOptions,\n TODO,\n type RequiredLogicInput\n} from './types.ts';\nimport { resolveReferencedActor } from './utils.ts';\n\ntype SpawnOptions<\n TActor extends ProvidedActor,\n TSrc extends TActor['src']\n> = TActor extends {\n src: TSrc;\n}\n ? ConditionalRequired<\n [\n options?: {\n id?: TActor['id'];\n systemId?: string;\n input?: InputFrom<TActor['logic']>;\n syncSnapshot?: boolean;\n } & { [K in RequiredActorOptions<TActor>]: unknown }\n ],\n IsNotNever<RequiredActorOptions<TActor>>\n >\n : never;\n\nexport type Spawner<TActor extends ProvidedActor> =\n IsLiteralString<TActor['src']> extends true\n ? {\n <TSrc extends TActor['src']>(\n logic: TSrc,\n ...[options]: SpawnOptions<TActor, TSrc>\n ): ActorRefFromLogic<GetConcreteByKey<TActor, 'src', TSrc>['logic']>;\n <TLogic extends AnyActorLogic>(\n src: TLogic,\n ...[options]: ConditionalRequired<\n [\n options?: {\n id?: never;\n systemId?: string;\n input?: InputFrom<TLogic>;\n syncSnapshot?: boolean;\n } & { [K in RequiredLogicInput<TLogic>]: unknown }\n ],\n IsNotNever<RequiredLogicInput<TLogic>>\n >\n ): ActorRefFromLogic<TLogic>;\n }\n : <TLogic extends AnyActorLogic | string>(\n src: TLogic,\n ...[options]: ConditionalRequired<\n [\n options?: {\n id?: string;\n systemId?: string;\n input?: TLogic extends string ? unknown : InputFrom<TLogic>;\n syncSnapshot?: boolean;\n } & (TLogic extends AnyActorLogic\n ? { [K in RequiredLogicInput<TLogic>]: unknown }\n : {})\n ],\n IsNotNever<\n TLogic extends AnyActorLogic ? RequiredLogicInput<TLogic> : never\n >\n >\n ) => TLogic extends AnyActorLogic\n ? ActorRefFromLogic<TLogic>\n : AnyActorRef;\n\nexport function createSpawner(\n actorScope: AnyActorScope,\n { machine, context }: AnyMachineSnapshot,\n event: AnyEventObject,\n spawnedChildren: Record<string, AnyActorRef>\n): Spawner<any> {\n const spawn: Spawner<any> = ((src, options) => {\n if (typeof src === 'string') {\n const logic = resolveReferencedActor(machine, src);\n\n if (!logic) {\n throw new Error(\n `Actor logic '${src}' not implemented in machine '${machine.id}'`\n );\n }\n\n const actorRef = createActor(logic, {\n id: options?.id,\n parent: actorScope.self,\n syncSnapshot: options?.syncSnapshot,\n input:\n typeof options?.input === 'function'\n ? options.input({\n context,\n event,\n self: actorScope.self\n })\n : options?.input,\n src,\n systemId: options?.systemId\n }) as any;\n\n spawnedChildren[actorRef.id] = actorRef;\n\n return actorRef;\n } else {\n const actorRef = createActor(src, {\n id: options?.id,\n parent: actorScope.self,\n syncSnapshot: options?.syncSnapshot,\n input: options?.input,\n src,\n systemId: options?.systemId\n });\n\n return actorRef;\n }\n }) as Spawner<any>;\n return ((src, options) => {\n const actorRef = spawn(src, options) as TODO; // TODO: fix types\n spawnedChildren[actorRef.id] = actorRef;\n actorScope.defer(() => {\n if (actorRef._processingStatus === ProcessingStatus.Stopped) {\n return;\n }\n actorRef.start();\n });\n return actorRef;\n }) as Spawner<any>;\n}\n","import isDevelopment from '#is-development';\nimport { cloneMachineSnapshot } from '../State.ts';\nimport { executingCustomAction } from '../createActor.ts';\nimport { Spawner, createSpawner } from '../spawn.ts';\nimport type {\n ActionArgs,\n AnyActorScope,\n AnyActorRef,\n AnyEventObject,\n AnyMachineSnapshot,\n Assigner,\n EventObject,\n LowInfer,\n MachineContext,\n ParameterizedObject,\n PropertyAssigner,\n ProvidedActor,\n ActionFunction,\n BuiltinActionResolution\n} from '../types.ts';\n\nexport interface AssignArgs<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TEvent extends EventObject,\n TActor extends ProvidedActor\n> extends ActionArgs<TContext, TExpressionEvent, TEvent> {\n spawn: Spawner<TActor>;\n}\n\nfunction resolveAssign(\n actorScope: AnyActorScope,\n snapshot: AnyMachineSnapshot,\n actionArgs: ActionArgs<any, any, any>,\n actionParams: ParameterizedObject['params'] | undefined,\n {\n assignment\n }: {\n assignment:\n | Assigner<any, any, any, any, any>\n | PropertyAssigner<any, any, any, any, any>;\n }\n): BuiltinActionResolution {\n if (!snapshot.context) {\n throw new Error(\n 'Cannot assign to undefined `context`. Ensure that `context` is defined in the machine config.'\n );\n }\n const spawnedChildren: Record<string, AnyActorRef> = {};\n\n const assignArgs: AssignArgs<any, any, any, any> = {\n context: snapshot.context,\n event: actionArgs.event,\n spawn: createSpawner(\n actorScope,\n snapshot,\n actionArgs.event,\n spawnedChildren\n ),\n self: actorScope.self,\n system: actorScope.system\n };\n let partialUpdate: Record<string, unknown> = {};\n if (typeof assignment === 'function') {\n partialUpdate = assignment(assignArgs, actionParams);\n } else {\n for (const key of Object.keys(assignment)) {\n const propAssignment = assignment[key];\n partialUpdate[key] =\n typeof propAssignment === 'function'\n ? propAssignment(assignArgs, actionParams)\n : propAssignment;\n }\n }\n\n const updatedContext = Object.assign({}, snapshot.context, partialUpdate);\n\n return [\n cloneMachineSnapshot(snapshot, {\n context: updatedContext,\n children: Object.keys(spawnedChildren).length\n ? {\n ...snapshot.children,\n ...spawnedChildren\n }\n : snapshot.children\n }),\n undefined,\n undefined\n ];\n}\n\nexport interface AssignAction<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TParams extends ParameterizedObject['params'] | undefined,\n TEvent extends EventObject,\n TActor extends ProvidedActor\n> {\n (args: ActionArgs<TContext, TExpressionEvent, TEvent>, params: TParams): void;\n _out_TActor?: TActor;\n}\n\n/**\n * Updates the current context of the machine.\n *\n * @example\n *\n * ```ts\n * import { createMachine, assign } from 'xstate';\n *\n * const countMachine = createMachine({\n * context: {\n * count: 0,\n * message: ''\n * },\n * on: {\n * inc: {\n * actions: assign({\n * count: ({ context }) => context.count + 1\n * })\n * },\n * updateMessage: {\n * actions: assign(({ context, event }) => {\n * return {\n * message: event.message.trim()\n * };\n * })\n * }\n * }\n * });\n * ```\n *\n * @param assignment An object that represents the partial context to update, or\n * a function that returns an object that represents the partial context to\n * update.\n */\nexport function assign<\n TContext extends MachineContext,\n TExpressionEvent extends AnyEventObject, // TODO: consider using a stricter `EventObject` here\n TParams extends ParameterizedObject['params'] | undefined,\n TEvent extends EventObject,\n TActor extends ProvidedActor\n>(\n assignment:\n | Assigner<LowInfer<TContext>, TExpressionEvent, TParams, TEvent, TActor>\n | PropertyAssigner<\n LowInfer<TContext>,\n TExpressionEvent,\n TParams,\n TEvent,\n TActor\n >\n): ActionFunction<\n TContext,\n TExpressionEvent,\n TEvent,\n TParams,\n TActor,\n never,\n never,\n never,\n never\n> {\n if (isDevelopment && executingCustomAction) {\n console.warn(\n 'Custom actions should not call `assign()` directly, as it is not imperative. See https://stately.ai/docs/actions#built-in-actions for more details.'\n );\n }\n\n function assign(\n _args: ActionArgs<TContext, TExpressionEvent, TEvent>,\n _params: TParams\n ) {\n if (isDevelopment) {\n throw new Error(`This isn't supposed to be called`);\n }\n }\n\n assign.type = 'xstate.assign';\n assign.assignment = assignment;\n\n assign.resolve = resolveAssign;\n\n return assign;\n}\n","import isDevelopment from '#is-development';\nimport { executingCustomAction } from '../createActor.ts';\nimport {\n ActionArgs,\n ActionFunction,\n AnyActorScope,\n AnyEventObject,\n AnyMachineSnapshot,\n DoNotInfer,\n EventObject,\n MachineContext,\n ParameterizedObject,\n SendExpr,\n BuiltinActionResolution\n} from '../types.ts';\n\nfunction resolveEmit(\n _: AnyActorScope,\n snapshot: AnyMachineSnapshot,\n args: ActionArgs<any, any, any>,\n actionParams: ParameterizedObject['params'] | undefined,\n {\n event: eventOrExpr\n }: {\n event:\n | EventObject\n | SendExpr<\n MachineContext,\n EventObject,\n ParameterizedObject['params'] | undefined,\n EventObject,\n EventObject\n >;\n }\n): BuiltinActionResolution {\n const resolvedEvent =\n typeof eventOrExpr === 'function'\n ? eventOrExpr(args, actionParams)\n : eventOrExpr;\n return [snapshot, { event: resolvedEvent }, undefined];\n}\n\nfunction executeEmit(\n actorScope: AnyActorScope,\n {\n event\n }: {\n event: EventObject;\n }\n) {\n actorScope.defer(() => actorScope.emit(event));\n}\n\nexport interface EmitAction<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TParams extends ParameterizedObject['params'] | undefined,\n TEvent extends EventObject,\n TEmitted extends EventObject\n> {\n (args: ActionArgs<TContext, TExpressionEvent, TEvent>, params: TParams): void;\n _out_TEmitted?: TEmitted;\n}\n\n/**\n * Emits an event to event handlers registered on the actor via `actor.on(event,\n * handler)`.\n *\n * @example\n *\n * ```ts\n * import { emit } from 'xstate';\n *\n * const machine = createMachine({\n * // ...\n * on: {\n * something: {\n * actions: emit({\n * type: 'emitted',\n * some: 'data'\n * })\n * }\n * }\n * // ...\n * });\n *\n * const actor = createActor(machine).start();\n *\n * actor.on('emitted', (event) => {\n * console.log(event);\n * });\n *\n * actor.send({ type: 'something' });\n * // logs:\n * // {\n * // type: 'emitted',\n * // some: 'data'\n * // }\n * ```\n */\nexport function emit<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TParams extends ParameterizedObject['params'] | undefined,\n TEvent extends EventObject,\n TEmitted extends AnyEventObject\n>(\n /** The event to emit, or an expression that returns an event to emit. */\n eventOrExpr:\n | DoNotInfer<TEmitted>\n | SendExpr<\n TContext,\n TExpressionEvent,\n TParams,\n DoNotInfer<TEmitted>,\n TEvent\n >\n): ActionFunction<\n TContext,\n TExpressionEvent,\n TEvent,\n TParams,\n never,\n never,\n never,\n never,\n TEmitted\n> {\n if (isDevelopment && executingCustomAction) {\n console.warn(\n 'Custom actions should not call `emit()` directly, as it is not imperative. See https://stately.ai/docs/actions#built-in-actions for more details.'\n );\n }\n\n function emit(\n _args: ActionArgs<TContext, TExpressionEvent, TEvent>,\n _params: TParams\n ) {\n if (isDevelopment) {\n throw new Error(`This isn't supposed to be called`);\n }\n }\n\n emit.type = 'xstate.emit';\n emit.event = eventOrExpr;\n\n emit.resolve = resolveEmit;\n emit.execute = executeEmit;\n\n return emit;\n}\n","import isDevelopment from '#is-development';\nimport { executingCustomAction } from '../createActor.ts';\nimport {\n ActionArgs,\n ActionFunction,\n AnyActorScope,\n AnyEventObject,\n AnyMachineSnapshot,\n DelayExpr,\n DoNotInfer,\n EventObject,\n ExecutableActionObject,\n MachineContext,\n ParameterizedObject,\n RaiseActionOptions,\n SendExpr,\n BuiltinActionResolution\n} from '../types.ts';\n\nfunction resolveRaise(\n _: AnyActorScope,\n snapshot: AnyMachineSnapshot,\n args: ActionArgs<any, any, any>,\n actionParams: ParameterizedObject['params'] | undefined,\n {\n event: eventOrExpr,\n id,\n delay\n }: {\n event:\n | EventObject\n | SendExpr<\n MachineContext,\n EventObject,\n ParameterizedObject['params'] | undefined,\n EventObject,\n EventObject\n >;\n id: string | undefined;\n delay:\n | string\n | number\n | DelayExpr<\n MachineContext,\n EventObject,\n ParameterizedObject['params'] | undefined,\n EventObject\n >\n | undefined;\n },\n { internalQueue }: { internalQueue: AnyEventObject[] }\n): BuiltinActionResolution {\n const delaysMap = snapshot.machine.implementations.delays;\n\n if (typeof eventOrExpr === 'string') {\n throw new Error(\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n `Only event objects may be used with raise; use raise({ type: \"${eventOrExpr}\" }) instead`\n );\n }\n const resolvedEvent =\n typeof eventOrExpr === 'function'\n ? eventOrExpr(args, actionParams)\n : eventOrExpr;\n\n let resolvedDelay: number | undefined;\n if (typeof delay === 'string') {\n const configDelay = delaysMap && delaysMap[delay];\n resolvedDelay =\n typeof configDelay === 'function'\n ? configDelay(args, actionParams)\n : configDelay;\n } else {\n resolvedDelay =\n typeof delay === 'function' ? delay(args, actionParams) : delay;\n }\n if (typeof resolvedDelay !== 'number') {\n internalQueue.push(resolvedEvent);\n }\n return [\n snapshot,\n {\n event: resolvedEvent,\n id,\n delay: resolvedDelay\n },\n undefined\n ];\n}\n\nfunction executeRaise(\n actorScope: AnyActorScope,\n params: {\n event: EventObject;\n id: string | undefined;\n delay: number | undefined;\n }\n) {\n const { event, delay, id } = params;\n if (typeof delay === 'number') {\n actorScope.defer(() => {\n const self = actorScope.self;\n actorScope.system.scheduler.schedule(self, self, event, delay, id);\n });\n return;\n }\n}\n\nexport interface RaiseAction<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TParams extends ParameterizedObject['params'] | undefined,\n TEvent extends EventObject,\n TDelay extends string\n> {\n (args: ActionArgs<TContext, TExpressionEvent, TEvent>, params: TParams): void;\n _out_TEvent?: TEvent;\n _out_TDelay?: TDelay;\n}\n\n/**\n * Raises an event. This places the event in the internal event queue, so that\n * the event is immediately consumed by the machine in the current step.\n *\n * @param eventType The event to raise.\n */\nexport function raise<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TEvent extends EventObject,\n TParams extends ParameterizedObject['params'] | undefined,\n TDelay extends string = never,\n TUsedDelay extends TDelay = never\n>(\n eventOrExpr:\n | DoNotInfer<TEvent>\n | SendExpr<TContext, TExpressionEvent, TParams, DoNotInfer<TEvent>, TEvent>,\n options?: RaiseActionOptions<\n TContext,\n TExpressionEvent,\n TParams,\n DoNotInfer<TEvent>,\n TUsedDelay\n >\n): ActionFunction<\n TContext,\n TExpressionEvent,\n TEvent,\n TParams,\n never,\n never,\n never,\n TDelay,\n never\n> {\n if (isDevelopment && executingCustomAction) {\n console.warn(\n 'Custom actions should not call `raise()` directly, as it is not imperative. See https://stately.ai/docs/actions#built-in-actions for more details.'\n );\n }\n\n function raise(\n _args: ActionArgs<TContext, TExpressionEvent, TEvent>,\n _params: TParams\n ) {\n if (isDevelopment) {\n throw new Error(`This isn't supposed to be called`);\n }\n }\n\n raise.type = 'xstate.raise';\n raise.event = eventOrExpr;\n raise.id = options?.id;\n raise.delay = options?.delay;\n\n raise.resolve = resolveRaise;\n raise.execute = executeRaise;\n\n return raise;\n}\n\nexport interface ExecutableRaiseAction extends ExecutableActionObject {\n type: 'xstate.raise';\n params: {\n event: EventObject;\n id: string | undefined;\n delay: number | undefined;\n };\n}\n","import type { MachineSnapshot } from './State.ts';\nimport type { StateMachine } from './StateMachine.ts';\nimport type { StateNode } from './StateNode.ts';\nimport { AssignArgs } from './actions/assign.ts';\nimport { ExecutableRaiseAction } from './actions/raise.ts';\nimport { ExecutableSendToAction } from './actions/send.ts';\nimport { PromiseActorLogic } from './actors/promise.ts';\nimport type { Actor, ProcessingStatus } from './createActor.ts';\nimport { Guard, GuardPredicate, UnknownGuard } from './guards.ts';\nimport { InspectionEvent } from './inspection.ts';\nimport { Spawner } from './spawn.ts';\nimport { AnyActorSystem, Clock } from './system.ts';\n\n// this is needed to make JSDoc `@link` work properly\nimport type { SimulatedClock } from './SimulatedClock.ts';\n\nexport type Identity<T> = { [K in keyof T]: T[K] };\n\nexport type HomomorphicPick<T, K extends keyof any> = {\n [P in keyof T as P & K]: T[P];\n};\nexport type HomomorphicOmit<T, K extends keyof any> = {\n [P in keyof T as Exclude<P, K>]: T[P];\n};\n\nexport type Invert<T extends Record<PropertyKey, PropertyKey>> = {\n [K in keyof T as T[K]]: K;\n};\n\nexport type GetParameterizedParams<T extends ParameterizedObject | undefined> =\n T extends any ? ('params' extends keyof T ? T['params'] : undefined) : never;\n\n/**\n * @remarks\n * `T | unknown` reduces to `unknown` and that can be problematic when it comes\n * to contextual typing. It especially is a problem when the union has a\n * function member, like here:\n *\n * ```ts\n * declare function test(\n * cbOrVal: ((arg: number) => unknown) | unknown\n * ): void;\n * test((arg) => {}); // oops, implicit any\n * ```\n *\n * This type can be used to avoid this problem. This union represents the same\n * 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;\nexport type IsNotNever<T> = [T] extends [never] ? false : true;\n\nexport type Compute<A> = { [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 Elements<T> = T[keyof T & `${number}`];\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, A2> =\n (<A>() => A extends A2 ? true : false) extends <A>() => A extends A1\n ? true\n : false\n ? true\n : false;\nexport type IsAny<T> = Equals<T, any>;\nexport type Cast<A, B> = A extends B ? A : B;\n// @TODO: we can't use native `NoInfer` as we need those:\n// https://github.com/microsoft/TypeScript/pull/61092\n// https://github.com/microsoft/TypeScript/pull/61077\n// but even with those fixes native NoInfer still doesn't work - further issues have to be reproduced and fixed\nexport type DoNotInfer<T> = [T][T extends any ? 0 : any];\n/** @deprecated Use the built-in `NoInfer` type instead */\nexport type NoInfer<T> = DoNotInfer<T>;\nexport type LowInfer<T> = T & NonNullable<unknown>;\n\nexport type MetaObject = Record<string, any>;\n\nexport type Lazy<T> = () => T;\nexport type MaybeLazy<T> = T | Lazy<T>;\n\n/** The full definition of an event, with a string `type`. */\nexport type EventObject = {\n /** The type of event that is sent. */\n type: string;\n};\n\nexport interface AnyEventObject extends EventObject {\n [key: string]: any;\n}\n\nexport interface ParameterizedObject {\n type: string;\n params?: NonReducibleUnknown;\n}\n\nexport interface UnifiedArg<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TEvent extends EventObject\n> {\n context: TContext;\n event: TExpressionEvent;\n self: ActorRef<\n MachineSnapshot<\n TContext,\n TEvent,\n Record<string, AnyActorRef | undefined>, // TODO: this should be replaced with `TChildren`\n StateValue,\n string,\n unknown,\n TODO, // TMeta\n TODO // State schema\n >,\n TEvent,\n AnyEventObject\n >;\n system: AnyActorSystem;\n}\n\nexport type MachineContext = Record<string, any>;\n\nexport interface ActionArgs<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TEvent extends EventObject\n> extends UnifiedArg<TContext, TExpressionEvent, TEvent> {}\n\nexport type InputFrom<T> =\n T extends StateMachine<\n infer _TContext,\n infer _TEvent,\n infer _TChildren,\n infer _TActor,\n infer _TAction,\n infer _TGuard,\n infer _TDelay,\n infer _TStateValue,\n infer _TTag,\n infer TInput,\n infer _TOutput,\n infer _TEmitted,\n infer _TMeta,\n infer _TStateSchema\n >\n ? TInput\n : T extends ActorLogic<\n infer _TSnapshot,\n infer _TEvent,\n infer TInput,\n infer _TSystem,\n infer _TEmitted\n >\n ? TInput\n : never;\n\nexport type OutputFrom<T> =\n T extends ActorLogic<\n infer TSnapshot,\n infer _TEvent,\n infer _TInput,\n infer _TSystem,\n infer _TEmitted\n >\n ? (TSnapshot & { status: 'done' })['output']\n : T extends ActorRef<infer TSnapshot, infer _TEvent, infer _TEmitted>\n ? (TSnapshot & { status: 'done' })['output']\n : never;\n\nexport type ActionFunction<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TEvent extends EventObject,\n TParams extends ParameterizedObject['params'] | undefined,\n TActor extends ProvidedActor,\n TAction extends ParameterizedObject,\n TGuard extends ParameterizedObject,\n TDelay extends string,\n TEmitted extends EventObject\n> = {\n (args: ActionArgs<TContext, TExpressionEvent, TEvent>, params: TParams): void;\n _out_TEvent?: TEvent; // TODO: it feels like we should be able to remove this since now `TEvent` is \"observable\" by `self`\n _out_TActor?: TActor;\n _out_TAction?: TAction;\n _out_TGuard?: TGuard;\n _out_TDelay?: TDelay;\n _out_TEmitted?: TEmitted;\n};\n\nexport type NoRequiredParams<T extends ParameterizedObject> = T extends any\n ? undefined extends T['params']\n ? T['type']\n : never\n : never;\n\nexport type ConditionalRequired<\n T,\n Condition extends boolean\n> = Condition extends true ? Required<T> : T;\n\nexport type WithDynamicParams<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n T extends ParameterizedObject\n> = T extends any\n ? ConditionalRequired<\n {\n type: T['type'];\n params?:\n | T['params']\n | (({\n context,\n event\n }: {\n context: TContext;\n event: TExpressionEvent;\n }) => T['params']);\n },\n undefined extends T['params'] ? false : true\n >\n : never;\n\nexport type Action<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TEvent extends EventObject,\n TParams extends ParameterizedObject['params'] | undefined,\n TActor extends ProvidedActor,\n TAction extends ParameterizedObject,\n TGuard extends ParameterizedObject,\n TDelay extends string,\n TEmitted extends EventObject\n> =\n // TODO: consider merging `NoRequiredParams` and `WithDynamicParams` into one\n // this way we could iterate over `TAction` (and `TGuard` in the `Guard` type) once and not twice\n | NoRequiredParams<TAction>\n | WithDynamicParams<TContext, TExpressionEvent, TAction>\n | ActionFunction<\n TContext,\n TExpressionEvent,\n TEvent,\n TParams,\n TActor,\n TAction,\n TGuard,\n TDelay,\n TEmitted\n >;\n\nexport type UnknownAction = Action<\n MachineContext,\n EventObject,\n EventObject,\n ParameterizedObject['params'] | undefined,\n ProvidedActor,\n ParameterizedObject,\n ParameterizedObject,\n string,\n EventObject\n>;\n\nexport type Actions<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TEvent extends EventObject,\n TParams extends ParameterizedObject['params'] | undefined,\n TActor extends ProvidedActor,\n TAction extends ParameterizedObject,\n TGuard extends ParameterizedObject,\n TDelay extends string,\n TEmitted extends EventObject\n> = SingleOrArray<\n Action<\n TContext,\n TExpressionEvent,\n TEvent,\n TParams,\n TActor,\n TAction,\n TGuard,\n TDelay,\n TEmitted\n >\n>;\n\nexport type StateKey = string | AnyMachineSnapshot;\n\nexport interface StateValueMap {\n [key: string]: StateValue | undefined;\n}\n\n/**\n * The string or object representing the state value relative to the parent\n * state node.\n *\n * @remarks\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:\n * \"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 TActor extends ProvidedActor,\n TAction extends ParameterizedObject,\n TGuard extends ParameterizedObject,\n TDelay extends string,\n TEmitted extends EventObject = EventObject,\n TMeta extends MetaObject = MetaObject\n> {\n guard?: Guard<TContext, TExpressionEvent, undefined, TGuard>;\n actions?: Actions<\n TContext,\n TExpressionEvent,\n TEvent,\n undefined,\n TActor,\n TAction,\n TGuard,\n TDelay,\n TEmitted\n >;\n reenter?: boolean;\n target?: TransitionTarget | undefined;\n meta?: TMeta;\n description?: string;\n}\n\nexport interface InitialTransitionConfig<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TActor extends ProvidedActor,\n TAction extends ParameterizedObject,\n TGuard extends ParameterizedObject,\n TDelay extends string\n> extends TransitionConfig<\n TContext,\n TEvent,\n TEvent,\n TActor,\n TAction,\n TGuard,\n TDelay,\n TODO, // TEmitted\n TODO // TMeta\n > {\n target: string;\n}\n\nexport type AnyTransitionConfig = TransitionConfig<\n any, // TContext\n any, // TExpressionEvent\n any, // TEvent\n any, // TActor\n any, // TAction\n any, // TGuard\n any, // TDelay\n any, // TEmitted\n any // TMeta\n>;\n\nexport interface InvokeDefinition<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TActor extends ProvidedActor,\n TAction extends ParameterizedObject,\n TGuard extends ParameterizedObject,\n TDelay extends string,\n TEmitted extends EventObject,\n TMeta extends MetaObject\n> {\n id: string;\n\n systemId: string | undefined;\n /** The source of the actor logic to be invoked */\n src: AnyActorLogic | string;\n\n input?:\n | Mapper<TContext, TEvent, NonReducibleUnknown, TEvent>\n | NonReducibleUnknown;\n /**\n * The transition to take upon the invoked child machine reaching its final\n * top-level state.\n */\n onDone?:\n | string\n | SingleOrArray<\n TransitionConfig<\n TContext,\n DoneActorEvent<unknown>,\n TEvent,\n TActor,\n TAction,\n TGuard,\n TDelay,\n TEmitted,\n TMeta\n >\n >;\n /**\n * The transition to take upon the invoked child machine sending an error\n * event.\n */\n onError?:\n | string\n | SingleOrArray<\n TransitionConfig<\n TContext,\n ErrorActorEvent,\n TEvent,\n TActor,\n TAction,\n TGuard,\n TDelay,\n TEmitted,\n TMeta\n >\n >;\n\n onSnapshot?:\n | string\n | SingleOrArray<\n TransitionConfig<\n TContext,\n SnapshotEvent,\n TEvent,\n TActor,\n TAction,\n TGuard,\n TDelay,\n TEmitted,\n TMeta\n >\n >;\n\n toJSON: () => Omit<\n InvokeDefinition<\n TContext,\n TEvent,\n TActor,\n TAction,\n TGuard,\n TDelay,\n TEmitted,\n TMeta\n >,\n 'onDone' | 'onError' | 'toJSON'\n >;\n}\n\ntype Delay<TDelay extends string> = TDelay | number;\n\nexport type DelayedTransitions<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TActor extends ProvidedActor,\n TAction extends ParameterizedObject,\n TGuard extends ParameterizedObject,\n TDelay extends string\n> = {\n [K in Delay<TDelay>]?:\n | string\n | SingleOrArray<\n TransitionConfig<\n TContext,\n TEvent,\n TEvent,\n TActor,\n TAction,\n TGuard,\n TDelay,\n TODO, // TEmitted\n TODO // TMeta\n >\n >;\n};\n\nexport type StateTypes =\n | 'atomic'\n | 'compound'\n | 'parallel'\n | 'final'\n | 'history'\n | ({} & string);\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 TActor extends ProvidedActor,\n TAction extends ParameterizedObject,\n TGuard extends ParameterizedObject,\n TDelay extends string,\n TTag extends string,\n TOutput,\n TEmitted extends EventObject,\n TMeta extends MetaObject\n> = {\n [K in string]: StateNodeConfig<\n TContext,\n TEvent,\n TActor,\n TAction,\n TGuard,\n TDelay,\n TTag,\n TOutput,\n TEmitted,\n TMeta\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 TActor extends ProvidedActor,\n TAction extends ParameterizedObject,\n TGuard extends ParameterizedObject,\n TDelay extends string,\n TEmitted extends EventObject,\n TMeta extends MetaObject\n> = SingleOrArray<\n | TransitionConfigTarget\n | TransitionConfig<\n TContext,\n TExpressionEvent,\n TEvent,\n TActor,\n TAction,\n TGuard,\n TDelay,\n TEmitted,\n TMeta\n >\n>;\n\nexport type TransitionsConfig<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TActor extends ProvidedActor,\n TAction extends ParameterizedObject,\n TGuard extends ParameterizedObject,\n TDelay extends string,\n TEmitted extends EventObject,\n TMeta extends MetaObject\n> = {\n [K in EventDescriptor<TEvent>]?: TransitionConfigOrTarget<\n TContext,\n ExtractEvent<TEvent, K>,\n TEvent,\n TActor,\n TAction,\n TGuard,\n TDelay,\n TEmitted,\n TMeta\n >;\n};\n\ntype PartialEventDescriptor<TEventType extends string> =\n TEventType extends `${infer TLeading}.${infer TTail}`\n ? `${TLeading}.*` | `${TLeading}.${PartialEventDescriptor<TTail>}`\n : never;\n\nexport type EventDescriptor<TEvent extends EventObject> =\n | TEvent['type']\n | PartialEventDescriptor<TEvent['type']>\n | '*';\n\ntype NormalizeDescriptor<TDescriptor extends string> = TDescriptor extends '*'\n ? string\n : TDescriptor extends `${infer TLeading}.*`\n ? `${TLeading}.${string}`\n : TDescriptor;\n\nexport type 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 TDelay extends string,\n TEmitted extends EventObject,\n TMeta extends MetaObject,\n TSpecificActor extends ProvidedActor\n> = TSpecificActor extends { src: infer TSrc }\n ?\n | Compute<\n {\n systemId?: string;\n /** The source of the machine to be invoked, or the machine itself. */\n src: TSrc;\n\n /**\n * The unique identifier for the invoked machine. If not specified,\n * this will be the machine's own `id`, or the URL (from `src`).\n */\n id?: TSpecificActor['id'];\n\n // TODO: currently we do not enforce required inputs here\n // in a sense, we shouldn't - they could be provided within the `implementations` object\n // how do we verify if the required input has been provided?\n input?:\n | Mapper<\n TContext,\n TEvent,\n InputFrom<TSpecificActor['logic']>,\n TEvent\n >\n | InputFrom<TSpecificActor['logic']>;\n /**\n * The transition to take upon the invoked child machine reaching\n * its final top-level state.\n */\n onDone?:\n | string\n | SingleOrArray<\n TransitionConfigOrTarget<\n TContext,\n DoneActorEvent<OutputFrom<TSpecificActor['logic']>>,\n TEvent,\n TActor,\n TAction,\n TGuard,\n TDelay,\n TEmitted,\n TMeta\n >\n >;\n /**\n * The transition to take upon the invoked child machine sending an\n * error event.\n */\n onError?:\n | string\n | SingleOrArray<\n TransitionConfigOrTarget<\n TContext,\n ErrorActorEvent,\n TEvent,\n TActor,\n TAction,\n TGuard,\n TDelay,\n TEmitted,\n TMeta\n >\n >;\n\n onSnapshot?:\n | string\n | SingleOrArray<\n TransitionConfigOrTarget<\n TContext,\n SnapshotEvent<SnapshotFrom<TSpecificActor['logic']>>,\n TEvent,\n TActor,\n TAction,\n TGuard,\n TDelay,\n TEmitted,\n TMeta\n >\n >;\n } & { [K in RequiredActorOptions<TSpecificActor>]: unknown }\n >\n | {\n id?: never;\n systemId?: string;\n src: AnyActorLogic;\n input?:\n | Mapper<TContext, TEvent, NonReducibleUnknown, TEvent>\n | NonReducibleUnknown;\n onDone?:\n | string\n | SingleOrArray<\n TransitionConfigOrTarget<\n TContext,\n DoneActorEvent<unknown>,\n TEvent,\n TActor,\n TAction,\n TGuard,\n TDelay,\n TEmitted,\n TMeta\n >\n >;\n onError?:\n | string\n | SingleOrArray<\n TransitionConfigOrTarget<\n TContext,\n ErrorActorEvent,\n TEvent,\n TActor,\n TAction,\n TGuard,\n TDelay,\n TEmitted,\n TMeta\n >\n >;\n\n onSnapshot?:\n | string\n | SingleOrArray<\n TransitionConfigOrTarget<\n TContext,\n SnapshotEvent,\n TEvent,\n TActor,\n TAction,\n TGuard,\n TDelay,\n TEmitted,\n TMeta\n >\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 TDelay extends string,\n TEmitted extends EventObject,\n TMeta extends MetaObject\n> =\n IsLiteralString<TActor['src']> extends true\n ? DistributeActors<\n TContext,\n TEvent,\n TActor,\n TAction,\n TGuard,\n TDelay,\n TEmitted,\n TMeta,\n TActor\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 systemId?: string;\n /** The source of the machine to be invoked, or the machine itself. */\n src: AnyActorLogic | string; // TODO: fix types\n\n input?:\n | Mapper<TContext, TEvent, NonReducibleUnknown, TEvent>\n | NonReducibleUnknown;\n /**\n * The transition to take upon the invoked child machine reaching its\n * final top-level state.\n */\n onDone?:\n | string\n | SingleOrArray<\n TransitionConfigOrTarget<\n TContext,\n DoneActorEvent<any>, // TODO: consider replacing with `unknown`\n TEvent,\n TActor,\n TAction,\n TGuard,\n TDelay,\n TEmitted,\n TMeta\n >\n >;\n /**\n * The transition to take upon the invoked child machine sending an\n * error event.\n */\n onError?:\n | string\n | SingleOrArray<\n TransitionConfigOrTarget<\n TContext,\n ErrorActorEvent,\n TEvent,\n TActor,\n TAction,\n TGuard,\n TDelay,\n TEmitted,\n TMeta\n >\n >;\n\n onSnapshot?:\n | string\n | SingleOrArray<\n TransitionConfigOrTarget<\n TContext,\n SnapshotEvent,\n TEvent,\n TActor,\n TAction,\n TGuard,\n TDelay,\n TEmitted,\n TMeta\n >\n >;\n };\n\nexport type AnyInvokeConfig = InvokeConfig<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any // TMeta\n>;\n\nexport interface StateNodeConfig<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TActor extends ProvidedActor,\n TAction extends ParameterizedObject,\n TGuard extends ParameterizedObject,\n TDelay extends string,\n TTag extends string,\n _TOutput,\n TEmitted extends EventObject,\n TMeta extends MetaObject\n> {\n /** The initial state transition. */\n initial?:\n | InitialTransitionConfig<TContext, TEvent, TActor, TAction, TGuard, TDelay>\n | 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 type of\n * history: 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\n * (recursive).\n */\n states?:\n | StatesConfig<\n TContext,\n TEvent,\n TActor,\n TAction,\n TGuard,\n TDelay,\n TTag,\n NonReducibleUnknown,\n TEmitted,\n TMeta\n >\n | undefined;\n /**\n * The services to invoke upon entering this state node. These services will\n * be stopped upon exiting this state node.\n */\n invoke?: SingleOrArray<\n InvokeConfig<\n TContext,\n TEvent,\n TActor,\n TAction,\n TGuard,\n TDelay,\n TEmitted,\n TMeta\n >\n >;\n /** The mapping of event types to their potential transition(s). */\n on?: TransitionsConfig<\n TContext,\n TEvent,\n TActor,\n TAction,\n TGuard,\n TDelay,\n TEmitted,\n TMeta\n >;\n /** The action(s) to be executed upon entering the state node. */\n entry?: Actions<\n TContext,\n TEvent,\n TEvent,\n undefined,\n TActor,\n TAction,\n TGuard,\n TDelay,\n TEmitted\n >;\n /** The action(s) to be executed upon exiting the state node. */\n exit?: Actions<\n TContext,\n TEvent,\n TEvent,\n undefined,\n TActor,\n TAction,\n TGuard,\n TDelay,\n TEmitted\n >;\n /**\n * The potential transition(s) to be taken upon reaching a final child state\n * node.\n *\n * This is equivalent to defining a `[done(id)]` transition on this state\n * node's `on` property.\n */\n onDone?:\n | string\n | SingleOrArray<\n TransitionConfig<\n TContext,\n DoneStateEvent,\n TEvent,\n TActor,\n TAction,\n TGuard,\n TDelay,\n TEmitted,\n TMeta\n >\n >\n | undefined;\n /**\n * The mapping (or array) of delays (in milliseconds) to their potential\n * transition(s). The delayed transitions are taken after the specified delay\n * in an interpreter.\n */\n after?: DelayedTransitions<TContext, TEvent, TActor, TAction, TGuard, TDelay>;\n\n /**\n * An eventless transition that is always taken when this state node is\n * active.\n */\n always?: TransitionConfigOrTarget<\n TContext,\n TEvent,\n TEvent,\n TActor,\n TAction,\n TGuard,\n TDelay,\n TEmitted,\n TMeta\n >;\n parent?: StateNode<TContext, TEvent>;\n /**\n * The meta data associated with this state node, which will be returned in\n * State instances.\n */\n meta?: TMeta;\n /**\n * The output data sent with the \"xstate.done.state._id_\" event if this is a\n * final state node.\n *\n * The output data will be evaluated with the current `context` and placed on\n * the `.data` property of the event.\n */\n output?: Mapper<TContext, TEvent, unknown, TEvent> | NonReducibleUnknown;\n /**\n * The unique ID of the state node, which can be referenced as a transition\n * target via the `#id` syntax.\n */\n id?: string | undefined;\n /**\n * The order this state node appears. Corresponds to the implicit document\n * order.\n */\n order?: number;\n\n /**\n * The tags for this state node, which are accumulated into the `state.tags`\n * property.\n */\n tags?: SingleOrArray<TTag>;\n /** A text description of the state node */\n description?: string;\n\n /** A default target for a history state */\n target?: string | undefined; // `| undefined` makes `HistoryStateNodeConfig` compatible with this interface (it extends it) under `exactOptionalPropertyTypes`\n route?: RouteTransitionConfig<\n TContext,\n TEvent,\n TEvent,\n TActor,\n TAction,\n TGuard,\n TDelay,\n TEmitted\n >;\n}\n\nexport interface RouteTransitionConfig<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TEvent extends EventObject,\n TActor extends ProvidedActor,\n TAction extends ParameterizedObject,\n TGuard extends ParameterizedObject,\n TDelay extends string,\n TEmitted extends EventObject\n> {\n guard?: Guard<TContext, TExpressionEvent, undefined, TGuard>;\n actions?: Actions<\n TContext,\n TExpressionEvent,\n TEvent,\n undefined,\n TActor,\n TAction,\n TGuard,\n TDelay,\n TEmitted\n >;\n meta?: Record<string, any>;\n description?: string;\n}\n\nexport type AnyStateNodeConfig = StateNodeConfig<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any, // emitted\n any // meta\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: UnknownAction[];\n exit: UnknownAction[];\n meta: any;\n order: number;\n output?: StateNodeConfig<\n TContext,\n TEvent,\n ProvidedActor,\n ParameterizedObject,\n ParameterizedObject,\n string,\n string,\n unknown,\n EventObject, // TEmitted\n any // TMeta\n >['output'];\n invoke: Array<\n InvokeDefinition<\n TContext,\n TEvent,\n TODO,\n TODO,\n TODO,\n TODO,\n TODO, // TEmitted\n TODO // TMeta\n >\n >;\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 AnyMachineSnapshot = MachineSnapshot<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n>;\n\n/** @deprecated Use `AnyMachineSnapshot` instead */\nexport type AnyState = AnyMachineSnapshot;\n\nexport type AnyStateMachine = StateMachine<\n any, // context\n any, // event\n any, // children\n any, // actor\n any, // action\n any, // guard\n any, // delay\n any, // state value\n any, // tag\n any, // input\n any, // output\n any, // emitted\n any, // TMeta\n any // TStateSchema\n>;\n\nexport type AnyStateConfig = StateConfig<any, AnyEventObject>;\n\nexport interface AtomicStateNodeConfig<\n TContext extends MachineContext,\n TEvent extends EventObject\n> extends StateNodeConfig<\n TContext,\n TEvent,\n TODO,\n TODO,\n TODO,\n TODO,\n TODO,\n TODO,\n TODO, // emitted\n TODO // meta\n > {\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 type SimpleOrStateNodeConfig<\n TContext extends MachineContext,\n TEvent extends EventObject\n> =\n | AtomicStateNodeConfig<TContext, TEvent>\n | StateNodeConfig<\n TContext,\n TEvent,\n TODO,\n TODO,\n TODO,\n TODO,\n TODO,\n TODO,\n TODO, // emitted\n TODO // meta\n >;\n\nexport type ActionFunctionMap<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TActor extends ProvidedActor,\n TAction extends ParameterizedObject = ParameterizedObject,\n TGuard extends ParameterizedObject = ParameterizedObject,\n TDelay extends string = string,\n TEmitted extends EventObject = EventObject\n> = {\n [K in TAction['type']]?: ActionFunction<\n TContext,\n TEvent,\n TEvent,\n GetParameterizedParams<TAction extends { type: K } ? TAction : never>,\n TActor,\n TAction,\n TGuard,\n TDelay,\n TEmitted\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 GetParameterizedParams<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['params'], TEvent>>;\n\nexport type DelayConfig<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TParams extends ParameterizedObject['params'] | undefined,\n TEvent extends EventObject\n> = number | DelayExpr<TContext, TExpressionEvent, TParams, TEvent>;\n\n// TODO: possibly refactor this somehow, use even a simpler type, and maybe even make `machine.options` private or something\n/** @ignore */\nexport interface MachineImplementationsSimplified<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TActor extends ProvidedActor = ProvidedActor,\n TAction extends ParameterizedObject = ParameterizedObject,\n TGuard extends ParameterizedObject = ParameterizedObject\n> {\n guards: GuardMap<TContext, TEvent, TGuard>;\n actions: ActionFunctionMap<TContext, TEvent, TActor, TAction>;\n actors: Record<\n string,\n | AnyActorLogic\n | {\n src: AnyActorLogic;\n input: Mapper<TContext, TEvent, unknown, TEvent> | NonReducibleUnknown;\n }\n >;\n delays: DelayFunctionMap<TContext, TEvent, TAction>;\n}\n\ntype MachineImplementationsActions<TTypes extends StateMachineTypes> = {\n [K in TTypes['actions']['type']]?: ActionFunction<\n TTypes['context'],\n TTypes['events'],\n TTypes['events'],\n GetConcreteByKey<TTypes['actions'], 'type', K>['params'],\n TTypes['actors'],\n TTypes['actions'],\n TTypes['guards'],\n TTypes['delays'],\n TTypes['emitted']\n >;\n};\n\ntype MachineImplementationsActors<TTypes extends StateMachineTypes> = {\n [K in TTypes['actors']['src']]?: GetConcreteByKey<\n TTypes['actors'],\n 'src',\n K\n >['logic'];\n};\n\ntype MachineImplementationsDelays<TTypes extends StateMachineTypes> = {\n [K in TTypes['delays']]?: DelayConfig<\n TTypes['context'],\n TTypes['events'],\n // delays in referenced send actions might use specific `TAction`\n // delays executed by auto-generated send actions related to after transitions won't have that\n // since they are effectively implicit inline actions\n undefined,\n TTypes['events']\n >;\n};\n\ntype MachineImplementationsGuards<TTypes extends StateMachineTypes> = {\n [K in TTypes['guards']['type']]?: Guard<\n TTypes['context'],\n TTypes['events'],\n GetConcreteByKey<TTypes['guards'], 'type', K>['params'],\n TTypes['guards']\n >;\n};\n\nexport type InternalMachineImplementations<TTypes extends StateMachineTypes> = {\n actions?: MachineImplementationsActions<TTypes>;\n actors?: MachineImplementationsActors<TTypes>;\n delays?: MachineImplementationsDelays<TTypes>;\n guards?: MachineImplementationsGuards<TTypes>;\n};\n\ntype InitialContext<\n TContext extends MachineContext,\n TActor extends ProvidedActor,\n TInput,\n TEvent extends EventObject\n> = TContext | ContextFactory<TContext, TActor, TInput, TEvent>;\n\nexport type ContextFactory<\n TContext extends MachineContext,\n TActor extends ProvidedActor,\n TInput,\n TEvent extends EventObject = EventObject\n> = ({\n spawn,\n input,\n self\n}: {\n spawn: Spawner<TActor>;\n input: TInput;\n self: ActorRef<\n MachineSnapshot<\n TContext,\n TEvent,\n Record<string, AnyActorRef | undefined>, // TODO: this should be replaced with `TChildren`\n StateValue,\n string,\n unknown,\n TODO, // TMeta\n TODO // State schema\n >,\n TEvent,\n AnyEventObject\n >;\n}) => TContext;\n\n/**\n * Runtime options for state machine execution.\n *\n * @example\n *\n * ```ts\n * const machine = createMachine({\n * // ... machine config\n * options: {\n * maxIterations: 5000\n * // other runtime options can be added here\n * }\n * });\n * ```\n */\nexport interface MachineOptions {\n /**\n * Maximum number of microsteps allowed before throwing an infinite loop\n * error. Defaults to `Infinity` (no limit). Set to a finite number to enable\n * infinite loop detection.\n *\n * @default Infinity\n */\n maxIterations?: number;\n}\n\nexport type MachineConfig<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TActor extends ProvidedActor = ProvidedActor,\n TAction extends ParameterizedObject = ParameterizedObject,\n TGuard extends ParameterizedObject = ParameterizedObject,\n TDelay extends string = string,\n TTag extends string = string,\n TInput = any,\n TOutput = unknown,\n TEmitted extends EventObject = EventObject,\n TMeta extends MetaObject = MetaObject\n> = (Omit<\n StateNodeConfig<\n DoNotInfer<TContext>,\n DoNotInfer<TEvent>,\n DoNotInfer<TActor>,\n DoNotInfer<TAction>,\n DoNotInfer<TGuard>,\n DoNotInfer<TDelay>,\n DoNotInfer<TTag>,\n DoNotInfer<TOutput>,\n DoNotInfer<TEmitted>,\n DoNotInfer<TMeta>\n >,\n 'output'\n> & {\n /** The initial context (extended state) */\n /** The machine's own version. */\n version?: string;\n // TODO: make it conditionally required\n output?: Mapper<TContext, DoneStateEvent, TOutput, TEvent> | TOutput;\n /** Runtime options for machine execution. */\n options?: MachineOptions;\n}) &\n (MachineContext extends TContext\n ? { context?: InitialContext<LowInfer<TContext>, TActor, TInput, TEvent> }\n : { context: InitialContext<LowInfer<TContext>, TActor, TInput, TEvent> });\n\nexport type UnknownMachineConfig = MachineConfig<MachineContext, EventObject>;\n\nexport interface ProvidedActor {\n src: string;\n logic: UnknownActorLogic;\n id?: string | undefined; // `| undefined` is required here for compatibility with `exactOptionalPropertyTypes`, see #4613\n}\n\nexport interface SetupTypes<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TChildrenMap extends Record<string, string>,\n TTag extends string,\n TInput,\n TOutput,\n TEmitted extends EventObject,\n TMeta extends MetaObject\n> {\n context?: TContext;\n events?: TEvent;\n children?: TChildrenMap;\n tags?: TTag;\n input?: TInput;\n output?: TOutput;\n emitted?: TEmitted;\n meta?: TMeta;\n}\n\nexport interface MachineTypes<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TActor extends ProvidedActor,\n TAction extends ParameterizedObject,\n TGuard extends ParameterizedObject,\n TDelay extends string,\n TTag extends string,\n TInput,\n TOutput,\n TEmitted extends EventObject,\n TMeta extends MetaObject\n> extends SetupTypes<\n TContext,\n TEvent,\n // in machine types we currently don't support `TChildren`\n // and IDs can still be configured through `TActor['id']`\n never,\n TTag,\n TInput,\n TOutput,\n TEmitted,\n TMeta\n > {\n actors?: TActor;\n actions?: TAction;\n guards?: TGuard;\n delays?: TDelay;\n meta?: TMeta;\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 PersistedHistoryValue = Record<string, Array<{ id: string }>>;\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 interface DoneActorEvent<TOutput = unknown, TId extends string = string>\n extends EventObject {\n type: `xstate.done.actor.${TId}`;\n output: TOutput;\n actorId: TId;\n}\n\nexport interface ErrorActorEvent<\n TErrorData = unknown,\n TId extends string = string\n> extends EventObject {\n type: `xstate.error.actor.${TId}`;\n error: TErrorData;\n actorId: TId;\n}\n\nexport interface SnapshotEvent<\n TSnapshot extends Snapshot<unknown> = Snapshot<unknown>\n> extends EventObject {\n type: `xstate.snapshot.${string}`;\n snapshot: TSnapshot;\n}\n\nexport interface DoneStateEvent<TOutput = unknown> extends EventObject {\n type: `xstate.done.state.${string}`;\n output: TOutput;\n}\n\nexport type DelayExpr<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TParams extends ParameterizedObject['params'] | undefined,\n TEvent extends EventObject\n> = (\n args: ActionArgs<TContext, TExpressionEvent, TEvent>,\n params: TParams\n) => number;\n\nexport type LogExpr<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TParams extends ParameterizedObject['params'] | undefined,\n TEvent extends EventObject\n> = (\n args: ActionArgs<TContext, TExpressionEvent, TEvent>,\n params: TParams\n) => unknown;\n\nexport type SendExpr<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TParams extends ParameterizedObject['params'] | undefined,\n TSentEvent extends EventObject,\n TEvent extends EventObject\n> = (\n args: ActionArgs<TContext, TExpressionEvent, TEvent>,\n params: TParams\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 TParams extends ParameterizedObject['params'] | undefined,\n TEvent extends EventObject,\n TDelay extends string\n> extends RaiseActionOptions<\n TContext,\n TExpressionEvent,\n TParams,\n TEvent,\n TDelay\n > {}\n\nexport interface RaiseActionOptions<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TParams extends ParameterizedObject['params'] | undefined,\n TEvent extends EventObject,\n TDelay extends string\n> {\n id?: string;\n delay?:\n | Delay<TDelay>\n | DelayExpr<TContext, TExpressionEvent, TParams, TEvent>;\n}\n\nexport interface RaiseActionParams<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TParams extends ParameterizedObject['params'] | undefined,\n TEvent extends EventObject,\n TDelay extends string\n> extends RaiseActionOptions<\n TContext,\n TExpressionEvent,\n TParams,\n TEvent,\n TDelay\n > {\n event: TEvent | SendExpr<TContext, TExpressionEvent, TParams, TEvent, TEvent>;\n}\n\nexport interface SendToActionParams<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TParams extends ParameterizedObject['params'] | undefined,\n TSentEvent extends EventObject,\n TEvent extends EventObject,\n TDelay extends string\n> extends SendToActionOptions<\n TContext,\n TExpressionEvent,\n TParams,\n TEvent,\n TDelay\n > {\n event:\n | TSentEvent\n | SendExpr<TContext, TExpressionEvent, TParams, TSentEvent, TEvent>;\n}\n\nexport type Assigner<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TParams extends ParameterizedObject['params'] | undefined,\n TEvent extends EventObject,\n TActor extends ProvidedActor\n> = (\n args: AssignArgs<TContext, TExpressionEvent, TEvent, TActor>,\n params: TParams\n) => Partial<TContext>;\n\nexport type PartialAssigner<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TParams extends ParameterizedObject['params'] | undefined,\n TEvent extends EventObject,\n TActor extends ProvidedActor,\n TKey extends keyof TContext\n> = (\n args: AssignArgs<TContext, TExpressionEvent, TEvent, TActor>,\n params: TParams\n) => TContext[TKey];\n\nexport type PropertyAssigner<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TParams extends ParameterizedObject['params'] | undefined,\n TEvent extends EventObject,\n TActor extends ProvidedActor\n> = {\n [K in keyof TContext]?:\n | PartialAssigner<TContext, TExpressionEvent, TParams, TEvent, TActor, K>\n | TContext[K];\n};\n\nexport type Mapper<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TResult,\n TEvent extends EventObject\n> = (args: {\n context: TContext;\n event: TExpressionEvent;\n self: ActorRef<\n MachineSnapshot<\n TContext,\n TEvent,\n Record<string, AnyActorRef>, // TODO: this should be replaced with `TChildren`\n StateValue,\n string,\n unknown,\n TODO, // TMeta\n TODO // State schema\n >,\n TEvent,\n AnyEventObject\n >;\n}) => TResult;\n\nexport interface TransitionDefinition<\n TContext extends MachineContext,\n TEvent extends EventObject\n> extends Omit<\n TransitionConfig<\n TContext,\n TEvent,\n TEvent,\n TODO,\n TODO,\n TODO,\n TODO,\n TODO, // TEmitted\n TODO // TMeta\n >,\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: EventDescriptor<TEvent>;\n toJSON: () => {\n target: string[] | undefined;\n source: string;\n actions: readonly UnknownAction[];\n guard?: UnknownGuard;\n eventType: EventDescriptor<TEvent>;\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 EventDescriptor<TEvent>]: Array<\n TransitionDefinition<TContext, ExtractEvent<TEvent, K>>\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, 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 context: TContext;\n historyValue?: HistoryValue<TContext, TEvent>;\n /** @internal */\n _nodes: Array<StateNode<TContext, TEvent>>;\n children: Record<string, AnyActorRef>;\n status: SnapshotStatus;\n output?: any;\n error?: unknown;\n machine?: StateMachine<\n TContext,\n TEvent,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any, // TMeta\n any // TStateSchema\n >;\n}\n\nexport interface ActorOptions<TLogic extends AnyActorLogic> {\n /**\n * The clock that is responsible for setting and clearing timeouts, such as\n * delayed events and transitions.\n *\n * @remarks\n * You can create your own “clock”. The clock interface is an object with two\n * functions/methods:\n *\n * - `setTimeout` - same arguments as `window.setTimeout(fn, timeout)`\n * - `clearTimeout` - same arguments as `window.clearTimeout(id)`\n *\n * By default, the native `setTimeout` and `clearTimeout` functions are used.\n *\n * For testing, XState provides `SimulatedClock`.\n * @see {@link Clock}\n * @see {@link SimulatedClock}\n */\n clock?: Clock;\n /**\n * Specifies the logger to be used for `log(...)` actions. Defaults to the\n * native `console.log(...)` method.\n */\n logger?: (...args: any[]) => void;\n parent?: AnyActorRef;\n /** @internal */\n syncSnapshot?: boolean;\n /** The custom `id` for referencing this service. */\n id?: string;\n /** @deprecated Use `inspect` instead. */\n devTools?: never;\n\n /** The system ID to register this actor under. */\n systemId?: string;\n /** The input data to pass to the actor. */\n input?: InputFrom<TLogic>;\n\n /**\n * Initializes actor logic from a specific persisted internal state.\n *\n * @remarks\n * If the state is compatible with the actor logic, when the actor is started\n * it will be at that persisted state. Actions from machine actors will not be\n * re-executed, because they are assumed to have been already executed.\n * However, invocations will be restarted, and spawned actors will be restored\n * recursively.\n *\n * Can be generated with {@link Actor.getPersistedSnapshot}.\n * @see https://stately.ai/docs/persistence\n */\n snapshot?: Snapshot<unknown>;\n\n /** @deprecated Use `snapshot` instead. */\n state?: Snapshot<unknown>;\n\n /** The source actor logic. */\n src?: string | AnyActorLogic;\n\n /**\n * A callback function or observer object which can be used to inspect actor\n * system updates.\n *\n * @remarks\n * If a callback function is provided, it can accept an inspection event\n * argument. The types of inspection events that can be observed include:\n *\n * - `@xstate.actor` - An actor ref has been created in the system\n * - `@xstate.event` - An event was sent from a source actor ref to a target\n * actor ref in the system\n * - `@xstate.snapshot` - An actor ref emitted a snapshot due to a received\n * event\n *\n * @example\n *\n * ```ts\n * import { createMachine } from 'xstate';\n *\n * const machine = createMachine({\n * // ...\n * });\n *\n * const actor = createActor(machine, {\n * inspect: (inspectionEvent) => {\n * if (inspectionEvent.actorRef === actor) {\n * // This event is for the root actor\n * }\n *\n * if (inspectionEvent.type === '@xstate.actor') {\n * console.log(inspectionEvent.actorRef);\n * }\n *\n * if (inspectionEvent.type === '@xstate.event') {\n * console.log(inspectionEvent.sourceRef);\n * console.log(inspectionEvent.actorRef);\n * console.log(inspectionEvent.event);\n * }\n *\n * if (inspectionEvent.type === '@xstate.snapshot') {\n * console.log(inspectionEvent.actorRef);\n * console.log(inspectionEvent.event);\n * console.log(inspectionEvent.snapshot);\n * }\n * }\n * });\n * ```\n *\n * Alternately, an observer object (`{ next?, error?, complete? }`) can be\n * provided:\n *\n * @example\n *\n * ```ts\n * const actor = createActor(machine, {\n * inspect: {\n * next: (inspectionEvent) => {\n * if (inspectionEvent.actorRef === actor) {\n * // This event is for the root actor\n * }\n *\n * if (inspectionEvent.type === '@xstate.actor') {\n * console.log(inspectionEvent.actorRef);\n * }\n *\n * if (inspectionEvent.type === '@xstate.event') {\n * console.log(inspectionEvent.sourceRef);\n * console.log(inspectionEvent.actorRef);\n * console.log(inspectionEvent.event);\n * }\n *\n * if (inspectionEvent.type === '@xstate.snapshot') {\n * console.log(inspectionEvent.actorRef);\n * console.log(inspectionEvent.event);\n * console.log(inspectionEvent.snapshot);\n * }\n * }\n * }\n * });\n * ```\n */\n inspect?:\n | Observer<InspectionEvent>\n | ((inspectionEvent: InspectionEvent) => void);\n}\n\nexport type AnyActor = Actor<any>;\n\n/** @deprecated Use `AnyActor` instead. */\nexport type AnyInterpreter = AnyActor;\n\n// Based on RxJS types\nexport type Observer<T> = {\n next?: (value: T) => void;\n error?: (err: unknown) => void;\n complete?: () => void;\n};\n\nexport interface Subscription {\n unsubscribe(): void;\n}\n\nexport interface Readable<T> extends Subscribable<T> {\n get: () => T;\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\ntype EventDescriptorMatches<\n TEventType extends string,\n TNormalizedDescriptor\n> = TEventType extends TNormalizedDescriptor ? true : false;\n\nexport type ExtractEvent<\n TEvent extends EventObject,\n TDescriptor extends EventDescriptor<TEvent>\n> = string extends TEvent['type']\n ? TEvent\n : NormalizeDescriptor<TDescriptor> extends infer TNormalizedDescriptor\n ? TEvent extends any\n ? // true is the check type here to match both true and boolean\n true extends EventDescriptorMatches<\n TEvent['type'],\n TNormalizedDescriptor\n >\n ? TEvent\n : never\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<\n TSnapshot extends Snapshot<unknown>,\n TEvent extends EventObject,\n TEmitted extends EventObject = EventObject\n> extends Subscribable<TSnapshot>,\n InteropObservable<TSnapshot> {\n /** The unique identifier for this actor relative to its parent. */\n id: string;\n sessionId: string;\n /** @internal */\n _send: (event: TEvent) => void;\n send: (event: TEvent) => void;\n start: () => void;\n getSnapshot: () => TSnapshot;\n getPersistedSnapshot: () => Snapshot<unknown>;\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?: AnyActorRef;\n system: AnyActorSystem;\n /** @internal */\n _processingStatus: ProcessingStatus;\n src: string | AnyActorLogic;\n // TODO: remove from ActorRef interface\n // (should only be available on Actor)\n on: <TType extends TEmitted['type'] | '*'>(\n type: TType,\n handler: (\n emitted: TEmitted & (TType extends '*' ? unknown : { type: TType })\n ) => void\n ) => Subscription;\n select<TSelected>(\n selector: (snapshot: TSnapshot) => TSelected,\n equalityFn?: (a: TSelected, b: TSelected) => boolean\n ): Readable<TSelected>;\n}\n\nexport type AnyActorRef = ActorRef<\n any,\n any, // TODO: shouldn't this be AnyEventObject?\n any\n>;\n\nexport type ActorRefLike = Pick<\n AnyActorRef,\n 'sessionId' | 'send' | 'getSnapshot'\n>;\n\nexport type UnknownActorRef = ActorRef<Snapshot<unknown>, EventObject>;\n\nexport type ActorLogicFrom<T> =\n ReturnTypeOrValue<T> extends infer R\n ? R extends StateMachine<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any, // TMeta\n any // TStateSchema\n >\n ? R\n : R extends Promise<infer U>\n ? PromiseActorLogic<U>\n : never\n : never;\n\n// TODO: in v6, this should only accept AnyActorLogic, like ActorRefFromLogic\nexport type ActorRefFrom<T> =\n ReturnTypeOrValue<T> extends infer R\n ? R extends StateMachine<\n infer TContext,\n infer TEvent,\n infer TChildren,\n infer _TActor,\n infer _TAction,\n infer _TGuard,\n infer _TDelay,\n infer TStateValue,\n infer TTag,\n infer _TInput,\n infer TOutput,\n infer TEmitted,\n infer TMeta,\n infer TStateSchema\n >\n ? ActorRef<\n MachineSnapshot<\n TContext,\n TEvent,\n TChildren,\n TStateValue,\n TTag,\n TOutput,\n TMeta,\n TStateSchema\n >,\n TEvent,\n TEmitted\n >\n : R extends Promise<infer U>\n ? ActorRefFrom<PromiseActorLogic<U>>\n : R extends ActorLogic<\n infer TSnapshot,\n infer TEvent,\n infer _TInput,\n infer _TSystem,\n infer TEmitted\n >\n ? ActorRef<TSnapshot, TEvent, TEmitted>\n : never\n : never;\n\nexport type ActorRefFromLogic<T extends AnyActorLogic> = ActorRef<\n SnapshotFrom<T>,\n EventFromLogic<T>,\n EmittedFrom<T>\n>;\n\nexport type DevToolsAdapter = (service: AnyActor) => void;\n\n/** @deprecated Use `Actor<T>` instead. */\nexport type InterpreterFrom<\n T extends AnyStateMachine | ((...args: any[]) => AnyStateMachine)\n> =\n ReturnTypeOrValue<T> extends StateMachine<\n infer TContext,\n infer TEvent,\n infer TChildren,\n infer _TActor,\n infer _TAction,\n infer _TGuard,\n infer _TDelay,\n infer TStateValue,\n infer TTag,\n infer TInput,\n infer TOutput,\n infer TEmitted,\n infer TMeta,\n infer TStateSchema\n >\n ? Actor<\n ActorLogic<\n MachineSnapshot<\n TContext,\n TEvent,\n TChildren,\n TStateValue,\n TTag,\n TOutput,\n TMeta,\n TStateSchema\n >,\n TEvent,\n TInput,\n AnyActorSystem,\n TEmitted\n >\n >\n : never;\n\nexport type MachineImplementationsFrom<\n T extends AnyStateMachine | ((...args: any[]) => AnyStateMachine)\n> =\n ReturnTypeOrValue<T> extends StateMachine<\n infer TContext,\n infer TEvent,\n infer _TChildren,\n infer TActor,\n infer TAction,\n infer TGuard,\n infer TDelay,\n infer _TStateValue,\n infer TTag,\n infer _TInput,\n infer _TOutput,\n infer TEmitted,\n infer _TMeta,\n infer _TStateSchema\n >\n ? InternalMachineImplementations<\n ResolvedStateMachineTypes<\n TContext,\n TEvent,\n TActor,\n TAction,\n TGuard,\n TDelay,\n TTag,\n TEmitted\n >\n >\n : never;\n\nexport interface ActorScope<\n TSnapshot extends Snapshot<unknown>,\n TEvent extends EventObject,\n TSystem extends AnyActorSystem = AnyActorSystem,\n TEmitted extends EventObject = EventObject\n> {\n self: ActorRef<TSnapshot, TEvent, TEmitted>;\n id: string;\n sessionId: string;\n logger: (...args: any[]) => void;\n defer: (fn: () => void) => void;\n emit: (event: TEmitted) => void;\n system: TSystem;\n stopChild: (child: AnyActorRef) => void;\n actionExecutor: ActionExecutor;\n}\n\nexport type AnyActorScope = ActorScope<\n any, // TSnapshot\n any, // TEvent\n AnyActorSystem,\n any // TEmitted\n>;\n\nexport type SnapshotStatus = 'active' | 'done' | 'error' | 'stopped';\n\nexport type Snapshot<TOutput> =\n | {\n status: 'active';\n output: undefined;\n error: undefined;\n }\n | {\n status: 'done';\n output: TOutput;\n error: undefined;\n }\n | {\n status: 'error';\n output: undefined;\n error: unknown;\n }\n | {\n status: 'stopped';\n output: undefined;\n error: undefined;\n };\n\n/**\n * Represents logic which can be used by an actor.\n *\n * @template TSnapshot - The type of the snapshot.\n * @template TEvent - The type of the event object.\n * @template TInput - The type of the input.\n * @template TSystem - The type of the actor system.\n */\nexport interface ActorLogic<\n in out TSnapshot extends Snapshot<unknown>, // it's invariant because it's also part of `ActorScope[\"self\"][\"getSnapshot\"]`\n in out TEvent extends EventObject, // it's invariant because it's also part of `ActorScope[\"self\"][\"send\"]`\n in TInput = NonReducibleUnknown,\n TSystem extends AnyActorSystem = AnyActorSystem,\n in out TEmitted extends EventObject = EventObject // it's invariant because it's also aprt of `ActorScope[\"self\"][\"on\"]`\n> {\n /** The initial setup/configuration used to create the actor logic. */\n config?: unknown;\n /**\n * Transition function that processes the current state and an incoming event\n * to produce a new state.\n *\n * @param snapshot - The current state.\n * @param event - The incoming event.\n * @param actorScope - The actor scope.\n * @returns The new state.\n */\n transition: (\n snapshot: TSnapshot,\n event: TEvent,\n actorScope: ActorScope<TSnapshot, TEvent, TSystem, TEmitted>\n ) => TSnapshot;\n /**\n * Called to provide the initial state of the actor.\n *\n * @param actorScope - The actor scope.\n * @param input - The input for the initial state.\n * @returns The initial state.\n */\n getInitialSnapshot: (\n actorScope: ActorScope<TSnapshot, TEvent, TSystem, TEmitted>,\n input: TInput\n ) => TSnapshot;\n /**\n * Called when Actor is created to restore the internal state of the actor\n * given a persisted state. The persisted state can be created by\n * `getPersistedSnapshot`.\n *\n * @param persistedState - The persisted state to restore from.\n * @param actorScope - The actor scope.\n * @returns The restored state.\n */\n restoreSnapshot?: (\n persistedState: Snapshot<unknown>,\n actorScope: ActorScope<TSnapshot, TEvent, AnyActorSystem, TEmitted>\n ) => TSnapshot;\n /**\n * Called when the actor is started.\n *\n * @param snapshot - The starting state.\n * @param actorScope - The actor scope.\n */\n start?: (\n snapshot: TSnapshot,\n actorScope: ActorScope<TSnapshot, TEvent, AnyActorSystem, TEmitted>\n ) => void;\n /**\n * Obtains the internal state of the actor in a representation which can be be\n * persisted. The persisted state can be restored by `restoreSnapshot`.\n *\n * @param snapshot - The current state.\n * @returns The a representation of the internal state to be persisted.\n */\n getPersistedSnapshot: (\n snapshot: TSnapshot,\n options?: unknown\n ) => Snapshot<unknown>;\n}\n\nexport type AnyActorLogic = ActorLogic<\n any, // snapshot\n any, // event\n any, // input\n any, // system\n any // emitted\n>;\n\nexport type UnknownActorLogic = ActorLogic<\n any, // snapshot\n any, // event\n any, // input\n AnyActorSystem,\n any // emitted\n>;\n\nexport type SnapshotFrom<T> =\n ReturnTypeOrValue<T> extends infer R\n ? R extends ActorRef<infer TSnapshot, infer _, infer __>\n ? TSnapshot\n : R extends Actor<infer TLogic>\n ? SnapshotFrom<TLogic>\n : R extends ActorLogic<\n infer _TSnapshot,\n infer _TEvent,\n infer _TInput,\n infer _TEmitted,\n infer _TSystem\n >\n ? ReturnType<R['transition']>\n : R extends ActorScope<\n infer TSnapshot,\n infer _TEvent,\n infer _TEmitted,\n infer _TSystem\n >\n ? TSnapshot\n : never\n : never;\n\nexport type EventFromLogic<TLogic extends AnyActorLogic> =\n TLogic extends ActorLogic<\n infer _TSnapshot,\n infer TEvent,\n infer _TInput,\n infer _TEmitted,\n infer _TSystem\n >\n ? TEvent\n : never;\n\nexport type EmittedFrom<TLogic extends AnyActorLogic> =\n TLogic extends ActorLogic<\n infer _TSnapshot,\n infer _TEvent,\n infer _TInput,\n infer _TSystem,\n infer TEmitted\n >\n ? TEmitted\n : never;\n\ntype ResolveEventType<T> =\n ReturnTypeOrValue<T> extends infer R\n ? R extends StateMachine<\n infer _TContext,\n infer TEvent,\n infer _TChildren,\n infer _TActor,\n infer _TAction,\n infer _TGuard,\n infer _TDelay,\n infer _TStateValue,\n infer _TTag,\n infer _TInput,\n infer _TOutput,\n infer _TEmitted,\n infer _TMeta,\n infer _TStateSchema\n >\n ? TEvent\n : R extends MachineSnapshot<\n infer _TContext,\n infer TEvent,\n infer _TChildren,\n infer _TStateValue,\n infer _TTag,\n infer _TOutput,\n infer _TMeta,\n infer _TStateSchema\n >\n ? TEvent\n : R extends ActorRef<infer _TSnapshot, infer TEvent, infer _TEmitted>\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> =\n ReturnTypeOrValue<T> extends infer R\n ? R extends StateMachine<\n infer TContext,\n infer _TEvent,\n infer _TChildren,\n infer _TActor,\n infer _TAction,\n infer _TGuard,\n infer _TDelay,\n infer _TStateValue,\n infer _TTag,\n infer _TInput,\n infer _TOutput,\n infer _TEmitted,\n infer _TMeta,\n infer _TStateSchema\n >\n ? TContext\n : R extends MachineSnapshot<\n infer TContext,\n infer _TEvent,\n infer _TChildren,\n infer _TStateValue,\n infer _TTag,\n infer _TOutput,\n infer _TMeta,\n infer _TStateSchema\n >\n ? TContext\n : R extends Actor<infer TActorLogic>\n ? TActorLogic extends StateMachine<\n infer TContext,\n infer _TEvent,\n infer _TChildren,\n infer _TActor,\n infer _TAction,\n infer _TGuard,\n infer _TDelay,\n infer _TStateValue,\n infer _TTag,\n infer _TInput,\n infer _TOutput,\n infer _TEmitted,\n infer _TMeta,\n infer _TStateSchema\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 type RequiredActorOptions<TActor extends ProvidedActor> =\n | (undefined extends TActor['id'] ? never : 'id')\n | (undefined extends InputFrom<TActor['logic']> ? never : 'input');\n\nexport type RequiredLogicInput<TLogic extends AnyActorLogic> =\n undefined extends InputFrom<TLogic> ? never : 'input';\n\ntype ExtractLiteralString<T extends string | undefined> = T extends string\n ? string extends T\n ? never\n : T\n : never;\n\ntype ToConcreteChildren<TActor extends ProvidedActor> = {\n [A in TActor as ExtractLiteralString<A['id']>]?: ActorRefFromLogic<\n A['logic']\n >;\n};\n\n// Actors that don't have literal string IDs — these are the only ones\n// that should appear in the index signature fallback, since actors with\n// literal IDs are already covered by ToConcreteChildren.\ntype NonConcreteActors<TActor extends ProvidedActor> = TActor extends any\n ? ExtractLiteralString<TActor['id']> extends never\n ? TActor\n : never\n : never;\n\nexport type ToChildren<TActor extends ProvidedActor> =\n // only proceed further if all configured `src`s are literal strings\n string extends TActor['src']\n ? // TODO: replace `AnyActorRef` with `UnknownActorRef`~\n // or maybe even `TActor[\"logic\"]` since it's possible to configure `{ src: string; logic: SomeConcreteLogic }`\n // TODO: consider adding `| undefined` here\n Record<string, AnyActorRef>\n : Compute<\n ToConcreteChildren<TActor> &\n {\n include: {\n [id: string]: NonConcreteActors<TActor> extends never\n ? AnyActorRef | undefined\n : NonConcreteActors<TActor> extends any\n ?\n | ActorRefFromLogic<NonConcreteActors<TActor>['logic']>\n | undefined\n : never;\n };\n exclude: unknown;\n }[NonConcreteActors<TActor> extends never ? 'exclude' : 'include']\n >;\n\nexport type StateSchema = {\n id?: string;\n route?: unknown;\n states?: Record<string, StateSchema>;\n\n // Other types\n // Needed because TS treats objects with all optional properties as a \"weak\" object\n // https://github.com/statelyai/xstate/issues/5031\n type?: unknown;\n invoke?: unknown;\n on?: unknown;\n entry?: unknown;\n exit?: unknown;\n onDone?: unknown;\n after?: unknown;\n always?: unknown;\n meta?: unknown;\n output?: unknown;\n tags?: unknown;\n description?: unknown;\n};\n\nexport type StateSchemaFrom<T extends AnyStateMachine> =\n T extends StateMachine<\n infer _TContext,\n infer _TEvent,\n infer _TChildren,\n infer _TActor,\n infer _TAction,\n infer _TGuard,\n infer _TDelay,\n infer _TStateValue,\n infer _TTag,\n infer _TInput,\n infer _TOutput,\n infer _TEmitted,\n infer _TMeta,\n infer TStateSchema\n >\n ? TStateSchema\n : never;\n\nexport type StateId<\n TSchema extends StateSchema,\n TKey extends string = '(machine)',\n TParentKey extends string | null = null\n> =\n | (TSchema extends { id: string }\n ? TSchema['id']\n : TParentKey extends null\n ? TKey\n : `${TParentKey}.${TKey}`)\n | (TSchema['states'] extends Record<string, any>\n ? Values<{\n [K in keyof TSchema['states'] & string]: StateId<\n TSchema['states'][K],\n K,\n TParentKey extends string\n ? `${TParentKey}.${TKey}`\n : TSchema['id'] extends string\n ? TSchema['id']\n : TKey\n >;\n }>\n : never);\n\nexport type RoutableStateId<TSchema extends StateSchema> =\n | (TSchema extends { route: any; id: string } ? `#${TSchema['id']}` : never)\n | (TSchema['states'] extends Record<string, any>\n ? Values<{\n [K in keyof TSchema['states'] & string]: RoutableStateId<\n TSchema['states'][K]\n >;\n }>\n : never);\n\nexport interface StateMachineTypes {\n context: MachineContext;\n events: EventObject;\n actors: ProvidedActor;\n actions: ParameterizedObject;\n guards: ParameterizedObject;\n delays: string;\n tags: string;\n emitted: EventObject;\n}\n\n/** @deprecated */\nexport interface ResolvedStateMachineTypes<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TActor extends ProvidedActor,\n TAction extends ParameterizedObject,\n TGuard extends ParameterizedObject,\n TDelay extends string,\n TTag extends string,\n TEmitted extends EventObject = EventObject\n> {\n context: TContext;\n events: TEvent;\n actors: TActor;\n actions: TAction;\n guards: TGuard;\n delays: TDelay;\n tags: TTag;\n emitted: TEmitted;\n}\n\nexport type GetConcreteByKey<\n T,\n TKey extends keyof T,\n TValue extends T[TKey]\n> = T & Record<TKey, TValue>;\n\ntype _GroupStateKeys<\n T extends StateSchema,\n S extends keyof T['states']\n> = S extends any\n ? T['states'][S] extends { type: 'history' }\n ? [never, never]\n : T extends { type: 'parallel' }\n ? [S, never]\n : 'states' extends keyof T['states'][S]\n ? [S, never]\n : [never, S]\n : never;\n\ntype GroupStateKeys<T extends StateSchema, S extends keyof T['states']> = {\n nonLeaf: _GroupStateKeys<T, S & string>[0];\n leaf: _GroupStateKeys<T, S & string>[1];\n};\n\nexport type ToStateValue<T extends StateSchema> = T extends {\n states: Record<infer S, any>;\n}\n ? IsNever<S> extends true\n ? {}\n :\n | GroupStateKeys<T, S>['leaf']\n | (IsNever<GroupStateKeys<T, S>['nonLeaf']> extends false\n ? T extends { type: 'parallel' }\n ? {\n [K in GroupStateKeys<T, S>['nonLeaf']]: ToStateValue<\n T['states'][K]\n >;\n }\n : Compute<\n Values<{\n [K in GroupStateKeys<T, S>['nonLeaf']]: {\n [StateKey in K]: ToStateValue<T['states'][K]>;\n };\n }>\n >\n : never)\n : {};\n\nexport interface ExecutableActionObject {\n type: string;\n info: ActionArgs<MachineContext, EventObject, EventObject>;\n params: NonReducibleUnknown;\n exec:\n | ((info: ActionArgs<any, any, any>, params: unknown) => void)\n | undefined;\n}\n\nexport interface ToExecutableAction<T extends ParameterizedObject>\n extends ExecutableActionObject {\n type: T['type'];\n params: T['params'];\n exec: undefined;\n}\n\nexport interface ExecutableSpawnAction extends ExecutableActionObject {\n type: 'xstate.spawnChild';\n info: ActionArgs<MachineContext, EventObject, EventObject>;\n params: {\n id: string;\n actorRef: AnyActorRef | undefined;\n src: string | AnyActorLogic;\n };\n}\n\n// TODO: cover all that can be actually returned\nexport type SpecialExecutableAction =\n | ExecutableSpawnAction\n | ExecutableRaiseAction\n | ExecutableSendToAction;\n\nexport type ExecutableActionsFrom<T extends AnyActorLogic> =\n T extends StateMachine<\n infer _TContext,\n infer _TEvent,\n infer _TChildren,\n infer _TActor,\n infer TAction,\n infer _TGuard,\n infer _TDelay,\n infer _TStateValue,\n infer _TTag,\n infer _TInput,\n infer _TOutput,\n infer _TEmitted,\n infer _TMeta,\n infer _TStateSchema\n >\n ?\n | SpecialExecutableAction\n | (string extends TAction['type'] ? never : ToExecutableAction<TAction>)\n : never;\n\nexport type ActionExecutor = (actionToExecute: ExecutableActionObject) => void;\n\nexport type BuiltinActionResolution = [\n AnyMachineSnapshot,\n NonReducibleUnknown, // params\n UnknownAction[] | undefined\n];\n","import isDevelopment from '#is-development';\nimport { XSTATE_ERROR } from '../constants.ts';\nimport { createErrorActorEvent } from '../eventUtils.ts';\nimport { executingCustomAction } from '../createActor.ts';\nimport {\n ActionArgs,\n ActionFunction,\n AnyActorRef,\n AnyActorScope,\n AnyEventObject,\n AnyMachineSnapshot,\n Cast,\n DelayExpr,\n DoNotInfer,\n EventFrom,\n EventObject,\n ExecutableActionObject,\n InferEvent,\n MachineContext,\n ParameterizedObject,\n SendExpr,\n SendToActionOptions,\n BuiltinActionResolution,\n SpecialTargets,\n UnifiedArg\n} from '../types.ts';\n\nfunction resolveSendTo(\n actorScope: AnyActorScope,\n snapshot: AnyMachineSnapshot,\n args: ActionArgs<any, any, any>,\n actionParams: ParameterizedObject['params'] | undefined,\n {\n to,\n event: eventOrExpr,\n id,\n delay\n }: {\n to:\n | AnyActorRef\n | string\n | ((\n args: UnifiedArg<MachineContext, EventObject, EventObject>,\n params: ParameterizedObject['params'] | undefined\n ) => AnyActorRef | string);\n event:\n | EventObject\n | SendExpr<\n MachineContext,\n EventObject,\n ParameterizedObject['params'] | undefined,\n EventObject,\n EventObject\n >;\n id: string | undefined;\n delay:\n | string\n | number\n | DelayExpr<\n MachineContext,\n EventObject,\n ParameterizedObject['params'] | undefined,\n EventObject\n >\n | undefined;\n },\n extra: { deferredActorIds: string[] | undefined }\n): BuiltinActionResolution {\n const delaysMap = snapshot.machine.implementations.delays;\n\n if (typeof eventOrExpr === 'string') {\n throw new Error(\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n `Only event objects may be used with sendTo; use sendTo({ type: \"${eventOrExpr}\" }) instead`\n );\n }\n const resolvedEvent =\n typeof eventOrExpr === 'function'\n ? eventOrExpr(args, actionParams)\n : eventOrExpr;\n\n let resolvedDelay: number | undefined;\n if (typeof delay === 'string') {\n const configDelay = delaysMap && delaysMap[delay];\n resolvedDelay =\n typeof configDelay === 'function'\n ? configDelay(args, actionParams)\n : configDelay;\n } else {\n resolvedDelay =\n typeof delay === 'function' ? delay(args, actionParams) : delay;\n }\n\n const resolvedTarget = typeof to === 'function' ? to(args, actionParams) : to;\n let targetActorRef: AnyActorRef | string | undefined;\n\n if (typeof resolvedTarget === 'string') {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison\n if (resolvedTarget === SpecialTargets.Parent) {\n targetActorRef = actorScope.self._parent;\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison\n else if (resolvedTarget === SpecialTargets.Internal) {\n targetActorRef = actorScope.self;\n } else if (resolvedTarget.startsWith('#_')) {\n // SCXML compatibility: https://www.w3.org/TR/scxml/#SCXMLEventProcessor\n // #_invokeid. If the target is the special term '#_invokeid', where invokeid is the invokeid of an SCXML session that the sending session has created by <invoke>, the Processor must add the event to the external queue of that session.\n targetActorRef = snapshot.children[resolvedTarget.slice(2)];\n } else {\n targetActorRef = extra.deferredActorIds?.includes(resolvedTarget)\n ? resolvedTarget\n : snapshot.children[resolvedTarget];\n }\n if (!targetActorRef) {\n throw new Error(\n `Unable to send event to actor '${resolvedTarget}' from machine '${snapshot.machine.id}'.`\n );\n }\n } else {\n targetActorRef = resolvedTarget || actorScope.self;\n }\n\n return [\n snapshot,\n {\n to: targetActorRef,\n targetId: typeof resolvedTarget === 'string' ? resolvedTarget : undefined,\n event: resolvedEvent,\n id,\n delay: resolvedDelay\n },\n undefined\n ];\n}\n\nfunction retryResolveSendTo(\n _: AnyActorScope,\n snapshot: AnyMachineSnapshot,\n params: {\n to: AnyActorRef;\n event: EventObject;\n id: string | undefined;\n delay: number | undefined;\n }\n) {\n if (typeof params.to === 'string') {\n params.to = snapshot.children[params.to];\n }\n}\n\nfunction executeSendTo(\n actorScope: AnyActorScope,\n params: {\n to: AnyActorRef;\n event: EventObject;\n id: string | undefined;\n delay: number | undefined;\n }\n) {\n // this forms an outgoing events queue\n // thanks to that the recipient actors are able to read the *updated* snapshot value of the sender\n actorScope.defer(() => {\n const { to, event, delay, id } = params;\n if (typeof delay === 'number') {\n actorScope.system.scheduler.schedule(\n actorScope.self,\n to,\n event,\n delay,\n id\n );\n return;\n }\n actorScope.system._relay(\n actorScope.self,\n // at this point, in a deferred task, it should already be mutated by retryResolveSendTo\n // if it initially started as a string\n to,\n event.type === XSTATE_ERROR\n ? createErrorActorEvent(actorScope.self.id, (event as any).data)\n : event\n );\n });\n}\n\nexport interface SendToAction<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TParams extends ParameterizedObject['params'] | undefined,\n TEvent extends EventObject,\n TDelay extends string\n> {\n (args: ActionArgs<TContext, TExpressionEvent, TEvent>, params: TParams): void;\n _out_TDelay?: TDelay;\n}\n\n/**\n * Sends an event to an actor.\n *\n * @param actor The `ActorRef` to send the event to.\n * @param event The event to send, or an expression that evaluates to the event\n * to send\n * @param options Send action options\n *\n * - `id` - The unique send event identifier (used with `cancel()`).\n * - `delay` - The number of milliseconds to delay the sending of the event.\n */\nexport function sendTo<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TParams extends ParameterizedObject['params'] | undefined,\n TTargetActor extends AnyActorRef,\n TEvent extends EventObject,\n TDelay extends string = never,\n TUsedDelay extends TDelay = never\n>(\n to: SendToActionTarget<\n TContext,\n TExpressionEvent,\n TParams,\n TTargetActor,\n TEvent\n >,\n eventOrExpr:\n | EventFrom<TTargetActor>\n | SendExpr<\n TContext,\n TExpressionEvent,\n TParams,\n InferEvent<Cast<EventFrom<TTargetActor>, EventObject>>,\n TEvent\n >,\n options?: SendToActionOptions<\n TContext,\n TExpressionEvent,\n TParams,\n DoNotInfer<TEvent>,\n TUsedDelay\n >\n): ActionFunction<\n TContext,\n TExpressionEvent,\n TEvent,\n TParams,\n never,\n never,\n never,\n TDelay,\n never\n> {\n if (isDevelopment && executingCustomAction) {\n console.warn(\n 'Custom actions should not call `sendTo()` directly, as it is not imperative. See https://stately.ai/docs/actions#built-in-actions for more details.'\n );\n }\n\n function sendTo(\n _args: ActionArgs<TContext, TExpressionEvent, TEvent>,\n _params: TParams\n ) {\n if (isDevelopment) {\n throw new Error(`This isn't supposed to be called`);\n }\n }\n\n sendTo.type = 'xstate.sendTo';\n sendTo.to = to;\n sendTo.event = eventOrExpr;\n sendTo.id = options?.id;\n sendTo.delay = options?.delay;\n\n sendTo.resolve = resolveSendTo;\n sendTo.retryResolve = retryResolveSendTo;\n sendTo.execute = executeSendTo;\n\n return sendTo;\n}\n\n/**\n * Sends an event to this machine's parent.\n *\n * @param event The event to send to the parent machine.\n * @param options Options to pass into the send event.\n */\nexport function sendParent<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TParams extends ParameterizedObject['params'] | undefined,\n TSentEvent extends EventObject = AnyEventObject,\n TEvent extends EventObject = AnyEventObject,\n TDelay extends string = never,\n TUsedDelay extends TDelay = never\n>(\n event:\n | TSentEvent\n | SendExpr<TContext, TExpressionEvent, TParams, TSentEvent, TEvent>,\n options?: SendToActionOptions<\n TContext,\n TExpressionEvent,\n TParams,\n TEvent,\n TUsedDelay\n >\n) {\n return sendTo<\n TContext,\n TExpressionEvent,\n TParams,\n AnyActorRef,\n TEvent,\n TDelay,\n TUsedDelay\n >(SpecialTargets.Parent, event, options as any);\n}\n\ntype SendToActionTarget<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TParams extends ParameterizedObject['params'] | undefined,\n TTargetActor extends AnyActorRef,\n TEvent extends EventObject\n> =\n | string\n | TTargetActor\n | ((\n args: ActionArgs<TContext, TExpressionEvent, TEvent>,\n params: TParams\n ) => string | TTargetActor);\n\n/**\n * Forwards (sends) an event to the `target` actor.\n *\n * @param target The target actor to forward the event to.\n * @param options Options to pass into the send action creator.\n */\nexport function forwardTo<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TParams extends ParameterizedObject['params'] | undefined,\n TEvent extends EventObject,\n TDelay extends string = never,\n TUsedDelay extends TDelay = never\n>(\n target: SendToActionTarget<\n TContext,\n TExpressionEvent,\n TParams,\n AnyActorRef,\n TEvent\n >,\n options?: SendToActionOptions<\n TContext,\n TExpressionEvent,\n TParams,\n TEvent,\n TUsedDelay\n >\n) {\n if (isDevelopment && (!target || typeof target === 'function')) {\n const originalTarget = target;\n target = (...args) => {\n const resolvedTarget =\n typeof originalTarget === 'function'\n ? originalTarget(...args)\n : originalTarget;\n if (!resolvedTarget) {\n throw new Error(\n `Attempted to forward event to undefined actor. This risks an infinite loop in the sender.`\n );\n }\n return resolvedTarget;\n };\n }\n return sendTo<\n TContext,\n TExpressionEvent,\n TParams,\n AnyActorRef,\n TEvent,\n TDelay,\n TUsedDelay\n >(target, ({ event }: any) => event, options);\n}\n\nexport interface ExecutableSendToAction extends ExecutableActionObject {\n type: 'xstate.sendTo';\n params: {\n event: EventObject;\n id: string | undefined;\n delay: number | undefined;\n to: AnyActorRef;\n };\n}\n","import isDevelopment from '#is-development';\nimport { Guard, evaluateGuard } from '../guards.ts';\nimport {\n Action,\n ActionArgs,\n ActionFunction,\n AnyActorRef,\n AnyActorScope,\n AnyEventObject,\n AnyMachineSnapshot,\n EventObject,\n MachineContext,\n ParameterizedObject,\n ProvidedActor,\n BuiltinActionResolution,\n UnifiedArg\n} from '../types.ts';\nimport { assign } from './assign.ts';\nimport { cancel } from './cancel.ts';\nimport { emit } from './emit.ts';\nimport { raise } from './raise.ts';\nimport { sendParent, sendTo } from './send.ts';\nimport { spawnChild } from './spawnChild.ts';\nimport { stopChild } from './stopChild.ts';\n\ninterface ActionEnqueuer<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TEvent extends EventObject,\n TActor extends ProvidedActor,\n TAction extends ParameterizedObject,\n TGuard extends ParameterizedObject,\n TDelay extends string,\n TEmitted extends EventObject\n> {\n (\n action: Action<\n TContext,\n TExpressionEvent,\n TEvent,\n undefined,\n TActor,\n TAction,\n TGuard,\n TDelay,\n TEmitted\n >\n ): void;\n assign: (\n ...args: Parameters<\n typeof assign<TContext, TExpressionEvent, undefined, TEvent, TActor>\n >\n ) => void;\n cancel: (\n ...args: Parameters<\n typeof cancel<TContext, TExpressionEvent, undefined, TEvent>\n >\n ) => void;\n raise: (\n ...args: Parameters<\n typeof raise<\n TContext,\n TExpressionEvent,\n TEvent,\n undefined,\n TDelay,\n TDelay\n >\n >\n ) => void;\n sendTo: <TTargetActor extends AnyActorRef>(\n ...args: Parameters<\n typeof sendTo<\n TContext,\n TExpressionEvent,\n undefined,\n TTargetActor,\n TEvent,\n TDelay,\n TDelay\n >\n >\n ) => void;\n sendParent: (\n ...args: Parameters<\n typeof sendParent<\n TContext,\n TExpressionEvent,\n undefined,\n AnyEventObject,\n TEvent,\n TDelay,\n TDelay\n >\n >\n ) => void;\n spawnChild: (\n ...args: Parameters<\n typeof spawnChild<TContext, TExpressionEvent, undefined, TEvent, TActor>\n >\n ) => void;\n stopChild: (\n ...args: Parameters<\n typeof stopChild<TContext, TExpressionEvent, undefined, TEvent>\n >\n ) => void;\n emit: (\n ...args: Parameters<\n typeof emit<TContext, TExpressionEvent, undefined, TEvent, TEmitted>\n >\n ) => void;\n}\n\nfunction resolveEnqueueActions(\n actorScope: AnyActorScope,\n snapshot: AnyMachineSnapshot,\n args: ActionArgs<any, any, any>,\n actionParams: ParameterizedObject['params'] | undefined,\n {\n collect\n }: {\n collect: CollectActions<\n MachineContext,\n EventObject,\n ParameterizedObject['params'] | undefined,\n EventObject,\n ProvidedActor,\n ParameterizedObject,\n ParameterizedObject,\n string,\n EventObject\n >;\n }\n): BuiltinActionResolution {\n const actions: any[] = [];\n const enqueue: Parameters<typeof collect>[0]['enqueue'] = function enqueue(\n action\n ) {\n actions.push(action);\n };\n enqueue.assign = (...args) => {\n actions.push(assign(...args));\n };\n enqueue.cancel = (...args) => {\n actions.push(cancel(...args));\n };\n enqueue.raise = (...args) => {\n // for some reason it fails to infer `TDelay` from `...args` here and picks its default (`never`)\n // then it fails to typecheck that because `...args` use `string` in place of `TDelay`\n actions.push((raise as typeof enqueue.raise)(...args));\n };\n enqueue.sendTo = (...args) => {\n // for some reason it fails to infer `TDelay` from `...args` here and picks its default (`never`)\n // then it fails to typecheck that because `...args` use `string` in place of `TDelay\n actions.push((sendTo as typeof enqueue.sendTo)(...args));\n };\n enqueue.sendParent = (...args) => {\n actions.push((sendParent as typeof enqueue.sendParent)(...args));\n };\n enqueue.spawnChild = (...args) => {\n actions.push(spawnChild(...args));\n };\n enqueue.stopChild = (...args) => {\n actions.push(stopChild(...args));\n };\n enqueue.emit = (...args) => {\n actions.push(emit(...args));\n };\n\n collect(\n {\n context: args.context,\n event: args.event,\n enqueue,\n check: (guard) =>\n evaluateGuard(guard, snapshot.context, args.event, snapshot),\n self: actorScope.self,\n system: actorScope.system\n },\n actionParams\n );\n\n return [snapshot, undefined, actions];\n}\n\nexport interface EnqueueActionsAction<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TParams extends ParameterizedObject['params'] | undefined,\n TEvent extends EventObject,\n TActor extends ProvidedActor,\n TAction extends ParameterizedObject,\n TGuard extends ParameterizedObject,\n TDelay extends string\n> {\n (args: ActionArgs<TContext, TExpressionEvent, TEvent>, params: TParams): void;\n _out_TEvent?: TEvent;\n _out_TActor?: TActor;\n _out_TAction?: TAction;\n _out_TGuard?: TGuard;\n _out_TDelay?: TDelay;\n}\n\ninterface CollectActionsArg<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TEvent extends EventObject,\n TActor extends ProvidedActor,\n TAction extends ParameterizedObject,\n TGuard extends ParameterizedObject,\n TDelay extends string,\n TEmitted extends EventObject\n> extends UnifiedArg<TContext, TExpressionEvent, TEvent> {\n check: (\n guard: Guard<TContext, TExpressionEvent, undefined, TGuard>\n ) => boolean;\n enqueue: ActionEnqueuer<\n TContext,\n TExpressionEvent,\n TEvent,\n TActor,\n TAction,\n TGuard,\n TDelay,\n TEmitted\n >;\n}\n\ntype CollectActions<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TParams extends ParameterizedObject['params'] | undefined,\n TEvent extends EventObject,\n TActor extends ProvidedActor,\n TAction extends ParameterizedObject,\n TGuard extends ParameterizedObject,\n TDelay extends string,\n TEmitted extends EventObject\n> = (\n {\n context,\n event,\n check,\n enqueue,\n self\n }: CollectActionsArg<\n TContext,\n TExpressionEvent,\n TEvent,\n TActor,\n TAction,\n TGuard,\n TDelay,\n TEmitted\n >,\n params: TParams\n) => void;\n\n/**\n * Creates an action object that will execute actions that are queued by the\n * `enqueue(action)` function.\n *\n * @example\n *\n * ```ts\n * import { createMachine, enqueueActions } from 'xstate';\n *\n * const machine = createMachine({\n * entry: enqueueActions(({ enqueue, check }) => {\n * enqueue.assign({ count: 0 });\n *\n * if (check('someGuard')) {\n * enqueue.assign({ count: 1 });\n * }\n *\n * enqueue('someAction');\n * })\n * });\n * ```\n */\nexport function enqueueActions<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TParams extends ParameterizedObject['params'] | undefined,\n TEvent extends EventObject = TExpressionEvent,\n TActor extends ProvidedActor = ProvidedActor,\n TAction extends ParameterizedObject = ParameterizedObject,\n TGuard extends ParameterizedObject = ParameterizedObject,\n TDelay extends string = never,\n TEmitted extends EventObject = EventObject\n>(\n collect: CollectActions<\n TContext,\n TExpressionEvent,\n TParams,\n TEvent,\n TActor,\n TAction,\n TGuard,\n TDelay,\n TEmitted\n >\n): ActionFunction<\n TContext,\n TExpressionEvent,\n TEvent,\n TParams,\n TActor,\n TAction,\n TGuard,\n TDelay,\n TEmitted\n> {\n function enqueueActions(\n _args: ActionArgs<TContext, TExpressionEvent, TEvent>,\n _params: unknown\n ) {\n if (isDevelopment) {\n throw new Error(`This isn't supposed to be called`);\n }\n }\n\n enqueueActions.type = 'xstate.enqueueActions';\n enqueueActions.collect = collect;\n enqueueActions.resolve = resolveEnqueueActions;\n\n return enqueueActions;\n}\n","import isDevelopment from '#is-development';\nimport {\n ActionArgs,\n AnyActorScope,\n AnyMachineSnapshot,\n EventObject,\n LogExpr,\n MachineContext,\n ParameterizedObject,\n BuiltinActionResolution\n} from '../types.ts';\n\ntype ResolvableLogValue<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TParams extends ParameterizedObject['params'] | undefined,\n TEvent extends EventObject\n> = string | LogExpr<TContext, TExpressionEvent, TParams, TEvent>;\n\nfunction resolveLog(\n _: AnyActorScope,\n snapshot: AnyMachineSnapshot,\n actionArgs: ActionArgs<any, any, any>,\n actionParams: ParameterizedObject['params'] | undefined,\n {\n value,\n label\n }: {\n value: ResolvableLogValue<any, any, any, any>;\n label: string | undefined;\n }\n): BuiltinActionResolution {\n return [\n snapshot,\n {\n value:\n typeof value === 'function' ? value(actionArgs, actionParams) : value,\n label\n },\n undefined\n ];\n}\n\nfunction executeLog(\n { logger }: AnyActorScope,\n { value, label }: { value: unknown; label: string | undefined }\n) {\n if (label) {\n logger(label, value);\n } else {\n logger(value);\n }\n}\n\nexport interface LogAction<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TParams extends ParameterizedObject['params'] | undefined,\n TEvent extends EventObject\n> {\n (args: ActionArgs<TContext, TExpressionEvent, TEvent>, params: TParams): void;\n}\n\n/**\n * @param expr The expression function to evaluate which will be logged. Takes\n * in 2 arguments:\n *\n * - `ctx` - the current state context\n * - `event` - the event that caused this action to be executed.\n *\n * @param label The label to give to the logged expression.\n */\nexport function log<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TParams extends ParameterizedObject['params'] | undefined,\n TEvent extends EventObject\n>(\n value: ResolvableLogValue<TContext, TExpressionEvent, TParams, TEvent> = ({\n context,\n event\n }) => ({ context, event }),\n label?: string\n): LogAction<TContext, TExpressionEvent, TParams, TEvent> {\n function log(\n _args: ActionArgs<TContext, TExpressionEvent, TEvent>,\n _params: TParams\n ) {\n if (isDevelopment) {\n throw new Error(`This isn't supposed to be called`);\n }\n }\n\n log.type = 'xstate.log';\n log.value = value;\n log.label = label;\n\n log.resolve = resolveLog;\n log.execute = executeLog;\n\n return log;\n}\n","import { AnyActorSystem } from '../system.ts';\nimport {\n ActorLogic,\n ActorRefFromLogic,\n ActorScope,\n EventObject,\n NonReducibleUnknown,\n Snapshot\n} from '../types.ts';\n\nexport type TransitionSnapshot<TContext> = Snapshot<undefined> & {\n context: TContext;\n};\n\nexport type TransitionActorLogic<\n TContext,\n TEvent extends EventObject,\n TInput extends NonReducibleUnknown,\n TEmitted extends EventObject = EventObject\n> = ActorLogic<\n TransitionSnapshot<TContext>,\n TEvent,\n TInput,\n AnyActorSystem,\n TEmitted\n>;\n\n/**\n * Represents an actor created by `fromTransition`.\n *\n * The type of `self` within the actor's logic.\n *\n * @example\n *\n * ```ts\n * import {\n * fromTransition,\n * createActor,\n * type AnyActorSystem\n * } from 'xstate';\n *\n * //* The actor's stored context.\n * type Context = {\n * // The current count.\n * count: number;\n * // The amount to increase `count` by.\n * step: number;\n * };\n * // The events the actor receives.\n * type Event = { type: 'increment' };\n * // The actor's input.\n * type Input = { step?: number };\n *\n * // Actor logic that increments `count` by `step` when it receives an event of\n * // type `increment`.\n * const logic = fromTransition<Context, Event, AnyActorSystem, Input>(\n * (state, event, actorScope) => {\n * actorScope.self;\n * // ^? TransitionActorRef<Context, Event>\n *\n * if (event.type === 'increment') {\n * return {\n * ...state,\n * count: state.count + state.step\n * };\n * }\n * return state;\n * },\n * ({ input, self }) => {\n * self;\n * // ^? TransitionActorRef<Context, Event>\n *\n * return {\n * count: 0,\n * step: input.step ?? 1\n * };\n * }\n * );\n *\n * const actor = createActor(logic, { input: { step: 10 } });\n * // ^? TransitionActorRef<Context, Event>\n * ```\n *\n * @see {@link fromTransition}\n */\nexport type TransitionActorRef<\n TContext,\n TEvent extends EventObject\n> = ActorRefFromLogic<\n TransitionActorLogic<TransitionSnapshot<TContext>, TEvent, unknown>\n>;\n\n/**\n * Returns actor logic given a transition function and its initial state.\n *\n * A “transition function” is a function that takes the current `state` and\n * received `event` object as arguments, and returns the next state, similar to\n * a reducer.\n *\n * Actors created from transition logic (“transition actors”) can:\n *\n * - Receive events\n * - Emit snapshots of its state\n *\n * The transition function’s `state` is used as its transition actor’s\n * `context`.\n *\n * Note that the \"state\" for a transition function is provided by the initial\n * state argument, and is not the same as the State object of an actor or a\n * state within a machine configuration.\n *\n * @example\n *\n * ```ts\n * const transitionLogic = fromTransition(\n * (state, event) => {\n * if (event.type === 'increment') {\n * return {\n * ...state,\n * count: state.count + 1\n * };\n * }\n * return state;\n * },\n * { count: 0 }\n * );\n *\n * const transitionActor = createActor(transitionLogic);\n * transitionActor.subscribe((snapshot) => {\n * console.log(snapshot);\n * });\n * transitionActor.start();\n * // => {\n * // status: 'active',\n * // context: { count: 0 },\n * // ...\n * // }\n *\n * transitionActor.send({ type: 'increment' });\n * // => {\n * // status: 'active',\n * // context: { count: 1 },\n * // ...\n * // }\n * ```\n *\n * @param transition The transition function used to describe the transition\n * logic. It should return the next state given the current state and event.\n * It receives the following arguments:\n *\n * - `state` - the current state.\n * - `event` - the received event.\n * - `actorScope` - the actor scope object, with properties like `self` and\n * `system`.\n *\n * @param initialContext The initial state of the transition function, either an\n * object representing the state, or a function which returns a state object.\n * If a function, it will receive as its only argument an object with the\n * following properties:\n *\n * - `input` - the `input` provided to its parent transition actor.\n * - `self` - a reference to its parent transition actor.\n *\n * @returns Actor logic\n * @see {@link https://stately.ai/docs/input | Input docs} for more information about how input is passed\n */\nexport function fromTransition<\n TContext,\n TEvent extends EventObject,\n TSystem extends AnyActorSystem,\n TInput extends NonReducibleUnknown,\n TEmitted extends EventObject = EventObject\n>(\n transition: (\n snapshot: TContext,\n event: TEvent,\n actorScope: ActorScope<\n TransitionSnapshot<TContext>,\n TEvent,\n TSystem,\n TEmitted\n >\n ) => TContext,\n initialContext:\n | TContext\n | (({\n input,\n self\n }: {\n input: TInput;\n self: TransitionActorRef<TContext, TEvent>;\n }) => TContext) // TODO: type\n): TransitionActorLogic<TContext, TEvent, TInput, TEmitted> {\n return {\n config: transition,\n transition: (snapshot, event, actorScope) => {\n return {\n ...snapshot,\n context: transition(snapshot.context, event, actorScope as any)\n };\n },\n getInitialSnapshot: (_, input) => {\n return {\n status: 'active',\n output: undefined,\n error: undefined,\n context:\n typeof initialContext === 'function'\n ? (initialContext as any)({ input })\n : initialContext\n };\n },\n getPersistedSnapshot: (snapshot) => snapshot,\n restoreSnapshot: (snapshot: any) => snapshot\n };\n}\n","import { XSTATE_STOP } from '../constants.ts';\nimport { AnyActorSystem } from '../system.ts';\nimport {\n ActorLogic,\n ActorRefFromLogic,\n AnyActorRef,\n AnyEventObject,\n EventObject,\n NonReducibleUnknown,\n Snapshot\n} from '../types';\n\ninterface CallbackInstanceState<TEvent extends EventObject> {\n receivers: Set<(e: TEvent) => void> | undefined;\n dispose: (() => void) | void;\n}\n\nconst instanceStates = /* #__PURE__ */ new WeakMap<\n AnyActorRef,\n CallbackInstanceState<any>\n>();\n\nexport type CallbackSnapshot<TInput> = Snapshot<undefined> & {\n input: TInput;\n};\n\nexport type CallbackActorLogic<\n TEvent extends EventObject,\n TInput = NonReducibleUnknown,\n TEmitted extends EventObject = EventObject\n> = ActorLogic<\n CallbackSnapshot<TInput>,\n TEvent,\n TInput,\n AnyActorSystem,\n TEmitted\n>;\n\n/**\n * Represents an actor created by `fromCallback`.\n *\n * The type of `self` within the actor's logic.\n *\n * @example\n *\n * ```ts\n * import { fromCallback, createActor } from 'xstate';\n *\n * // The events the actor receives.\n * type Event = { type: 'someEvent' };\n * // The actor's input.\n * type Input = { name: string };\n *\n * // Actor logic that logs whenever it receives an event of type `someEvent`.\n * const logic = fromCallback<Event, Input>(({ self, input, receive }) => {\n * self;\n * // ^? CallbackActorRef<Event, Input>\n *\n * receive((event) => {\n * if (event.type === 'someEvent') {\n * console.log(`${input.name}: received \"someEvent\" event`);\n * // logs 'myActor: received \"someEvent\" event'\n * }\n * });\n * });\n *\n * const actor = createActor(logic, { input: { name: 'myActor' } });\n * // ^? CallbackActorRef<Event, Input>\n * ```\n *\n * @see {@link fromCallback}\n */\nexport type CallbackActorRef<\n TEvent extends EventObject,\n TInput = NonReducibleUnknown\n> = ActorRefFromLogic<CallbackActorLogic<TEvent, TInput>>;\n\ntype Receiver<TEvent extends EventObject> = (\n listener: {\n bivarianceHack(event: TEvent): void;\n }['bivarianceHack']\n) => void;\n\nexport type CallbackLogicFunction<\n TEvent extends EventObject = AnyEventObject,\n TSentEvent extends EventObject = AnyEventObject,\n TInput = NonReducibleUnknown,\n TEmitted extends EventObject = EventObject\n> = ({\n input,\n system,\n self,\n sendBack,\n receive,\n emit\n}: {\n /**\n * Data that was provided to the callback actor\n *\n * @see {@link https://stately.ai/docs/input | Input docs}\n */\n input: TInput;\n /** The actor system to which the callback actor belongs */\n system: AnyActorSystem;\n /** The parent actor of the callback actor */\n self: CallbackActorRef<TEvent>;\n /** A function that can send events back to the parent actor */\n sendBack: (event: TSentEvent) => void;\n /**\n * A function that can be called with a listener function argument; the\n * listener is then called whenever events are received by the callback actor\n */\n receive: Receiver<TEvent>;\n emit: (emitted: TEmitted) => void;\n}) => (() => void) | void;\n\n/**\n * An actor logic creator which returns callback logic as defined by a callback\n * function.\n *\n * @remarks\n * Useful for subscription-based or other free-form logic that can send events\n * back to the parent actor.\n *\n * Actors created from callback logic (“callback actors”) can:\n *\n * - Receive events via the `receive` function\n * - Send events to the parent actor via the `sendBack` function\n *\n * Callback actors are a bit different from other actors in that they:\n *\n * - Do not work with `onDone`\n * - Do not produce a snapshot using `.getSnapshot()`\n * - Do not emit values when used with `.subscribe()`\n * - Can not be stopped with `.stop()`\n *\n * @example\n *\n * ```typescript\n * const callbackLogic = fromCallback(({ sendBack, receive }) => {\n * let lockStatus = 'unlocked';\n *\n * const handler = (event) => {\n * if (lockStatus === 'locked') {\n * return;\n * }\n * sendBack(event);\n * };\n *\n * receive((event) => {\n * if (event.type === 'lock') {\n * lockStatus = 'locked';\n * } else if (event.type === 'unlock') {\n * lockStatus = 'unlocked';\n * }\n * });\n *\n * document.body.addEventListener('click', handler);\n *\n * return () => {\n * document.body.removeEventListener('click', handler);\n * };\n * });\n * ```\n *\n * @param callback - The callback function used to describe the callback logic\n * The callback function is passed an object with the following properties:\n *\n * - `receive` - A function that can send events back to the parent actor; the\n * listener is then called whenever events are received by the callback\n * actor\n * - `sendBack` - A function that can send events back to the parent actor\n * - `input` - Data that was provided to the callback actor\n * - `self` - The parent actor of the callback actor\n * - `system` - The actor system to which the callback actor belongs The callback\n * function can (optionally) return a cleanup function, which is called\n * when the actor is stopped.\n *\n * @returns Callback logic\n * @see {@link CallbackLogicFunction} for more information about the callback function and its object argument\n * @see {@link https://stately.ai/docs/input | Input docs} for more information about how input is passed\n */\nexport function fromCallback<\n TEvent extends EventObject,\n TInput = NonReducibleUnknown,\n TEmitted extends EventObject = EventObject\n>(\n callback: CallbackLogicFunction<TEvent, AnyEventObject, TInput, TEmitted>\n): CallbackActorLogic<TEvent, TInput, TEmitted> {\n const logic: CallbackActorLogic<TEvent, TInput, TEmitted> = {\n config: callback,\n start: (state, actorScope) => {\n const { self, system, emit } = actorScope;\n\n const callbackState: CallbackInstanceState<TEvent> = {\n receivers: undefined,\n dispose: undefined\n };\n\n instanceStates.set(self, callbackState);\n\n callbackState.dispose = callback({\n input: state.input,\n system,\n self,\n sendBack: (event) => {\n if (self.getSnapshot().status === 'stopped') {\n return;\n }\n if (self._parent) {\n system._relay(self, self._parent, event);\n }\n },\n receive: (listener) => {\n callbackState.receivers ??= new Set();\n callbackState.receivers.add(listener);\n },\n emit\n });\n },\n transition: (state, event, actorScope) => {\n const callbackState: CallbackInstanceState<TEvent> = instanceStates.get(\n actorScope.self\n )!;\n\n if (event.type === XSTATE_STOP) {\n state = {\n ...state,\n status: 'stopped',\n error: undefined\n };\n\n instanceStates.delete(actorScope.self);\n callbackState.receivers?.clear();\n callbackState.dispose?.();\n return state;\n }\n\n callbackState.receivers?.forEach((receiver) => receiver(event));\n\n return state;\n },\n getInitialSnapshot: (_, input) => {\n return {\n status: 'active',\n output: undefined,\n error: undefined,\n input\n };\n },\n getPersistedSnapshot: (snapshot) => snapshot,\n restoreSnapshot: (snapshot: any) => snapshot\n };\n\n return logic;\n}\n","import { XSTATE_STOP } from '../constants';\nimport { AnyActorSystem } from '../system.ts';\nimport {\n ActorLogic,\n ActorRefFromLogic,\n EventObject,\n NonReducibleUnknown,\n Snapshot,\n Subscribable,\n Subscription\n} from '../types';\n\nconst XSTATE_OBSERVABLE_NEXT = 'xstate.observable.next';\nconst XSTATE_OBSERVABLE_ERROR = 'xstate.observable.error';\nconst XSTATE_OBSERVABLE_COMPLETE = 'xstate.observable.complete';\n\nexport type ObservableSnapshot<\n TContext,\n TInput extends NonReducibleUnknown\n> = Snapshot<undefined> & {\n context: TContext | undefined;\n input: TInput | undefined;\n _subscription: Subscription | undefined;\n};\n\nexport type ObservableActorLogic<\n TContext,\n TInput extends NonReducibleUnknown,\n TEmitted extends EventObject = EventObject\n> = ActorLogic<\n ObservableSnapshot<TContext, TInput>,\n { type: string; [k: string]: unknown },\n TInput,\n AnyActorSystem,\n TEmitted\n>;\n\n/**\n * Represents an actor created by `fromObservable` or `fromEventObservable`.\n *\n * The type of `self` within the actor's logic.\n *\n * @example\n *\n * ```ts\n * import { fromObservable, createActor } from 'xstate';\n * import { interval } from 'rxjs';\n *\n * // The type of the value observed by the actor's logic.\n * type Context = number;\n * // The actor's input.\n * type Input = { period?: number };\n *\n * // Actor logic that observes a number incremented every `input.period`\n * // milliseconds (default: 1_000).\n * const logic = fromObservable<Context, Input>(({ input, self }) => {\n * self;\n * // ^? ObservableActorRef<Event, Input>\n *\n * return interval(input.period ?? 1_000);\n * });\n *\n * const actor = createActor(logic, { input: { period: 2_000 } });\n * // ^? ObservableActorRef<Event, Input>\n * ```\n *\n * @see {@link fromObservable}\n * @see {@link fromEventObservable}\n */\nexport type ObservableActorRef<TContext> = ActorRefFromLogic<\n ObservableActorLogic<TContext, any>\n>;\n\n/**\n * Observable actor logic is described by an observable stream of values. Actors\n * created from observable logic (“observable actors”) can:\n *\n * - Emit snapshots of the observable’s emitted value\n *\n * The observable’s emitted value is used as its observable actor’s `context`.\n *\n * Sending events to observable actors will have no effect.\n *\n * @example\n *\n * ```ts\n * import { fromObservable, createActor } from 'xstate';\n * import { interval } from 'rxjs';\n *\n * const logic = fromObservable((obj) => interval(1000));\n *\n * const actor = createActor(logic);\n *\n * actor.subscribe((snapshot) => {\n * console.log(snapshot.context);\n * });\n *\n * actor.start();\n * // At every second:\n * // Logs 0\n * // Logs 1\n * // Logs 2\n * // ...\n * ```\n *\n * @param observableCreator A function that creates an observable. It receives\n * one argument, an object with the following properties:\n *\n * - `input` - Data that was provided to the observable actor\n * - `self` - The parent actor\n * - `system` - The actor system to which the observable actor belongs\n *\n * It should return a {@link Subscribable}, which is compatible with an RxJS\n * Observable, although RxJS is not required to create them.\n * @see {@link https://rxjs.dev} for documentation on RxJS Observable and observable creators.\n * @see {@link Subscribable} interface in XState, which is based on and compatible with RxJS Observable.\n */\nexport function fromObservable<\n TContext,\n TInput extends NonReducibleUnknown,\n TEmitted extends EventObject = EventObject\n>(\n observableCreator: ({\n input,\n system,\n self\n }: {\n input: TInput;\n system: AnyActorSystem;\n self: ObservableActorRef<TContext>;\n emit: (emitted: TEmitted) => void;\n }) => Subscribable<TContext>\n): ObservableActorLogic<TContext, TInput, TEmitted> {\n // TODO: add event types\n const logic: ObservableActorLogic<TContext, TInput, TEmitted> = {\n config: observableCreator,\n transition: (snapshot, event) => {\n if (snapshot.status !== 'active') {\n return snapshot;\n }\n\n switch (event.type) {\n case XSTATE_OBSERVABLE_NEXT: {\n const newSnapshot = {\n ...snapshot,\n context: event.data as TContext\n };\n return newSnapshot;\n }\n case XSTATE_OBSERVABLE_ERROR:\n return {\n ...snapshot,\n status: 'error',\n error: (event as any).data,\n input: undefined,\n _subscription: undefined\n };\n case XSTATE_OBSERVABLE_COMPLETE:\n return {\n ...snapshot,\n status: 'done',\n input: undefined,\n _subscription: undefined\n };\n case XSTATE_STOP:\n snapshot._subscription!.unsubscribe();\n return {\n ...snapshot,\n status: 'stopped',\n input: undefined,\n _subscription: undefined\n };\n default:\n return snapshot;\n }\n },\n getInitialSnapshot: (_, input) => {\n return {\n status: 'active',\n output: undefined,\n error: undefined,\n context: undefined,\n input,\n _subscription: undefined\n };\n },\n start: (state, { self, system, emit }) => {\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 emit\n }).subscribe({\n next: (value) => {\n system._relay(self, self, {\n type: XSTATE_OBSERVABLE_NEXT,\n data: value\n });\n },\n error: (err) => {\n system._relay(self, self, {\n type: XSTATE_OBSERVABLE_ERROR,\n data: err\n });\n },\n complete: () => {\n system._relay(self, self, { type: XSTATE_OBSERVABLE_COMPLETE });\n }\n });\n },\n getPersistedSnapshot: ({ _subscription, ...state }) => state,\n restoreSnapshot: (state) => ({\n ...(state as any),\n _subscription: undefined\n })\n };\n\n return logic;\n}\n\n/**\n * Creates event observable logic that listens to an observable that delivers\n * event objects.\n *\n * Event observable actor logic is described by an observable stream of\n * {@link https://stately.ai/docs/transitions#event-objects | event objects}.\n * Actors created from event observable logic (“event observable actors”) can:\n *\n * - Implicitly send events to its parent actor\n * - Emit snapshots of its emitted event objects\n *\n * Sending events to event observable actors will have no effect.\n *\n * @example\n *\n * ```ts\n * import {\n * fromEventObservable,\n * Subscribable,\n * EventObject,\n * createMachine,\n * createActor\n * } from 'xstate';\n * import { fromEvent } from 'rxjs';\n *\n * const mouseClickLogic = fromEventObservable(\n * () => fromEvent(document.body, 'click') as Subscribable<EventObject>\n * );\n *\n * const canvasMachine = createMachine({\n * invoke: {\n * // Will send mouse `click` events to the canvas actor\n * src: mouseClickLogic\n * }\n * });\n *\n * const canvasActor = createActor(canvasMachine);\n * canvasActor.start();\n * ```\n *\n * @param lazyObservable A function that creates an observable that delivers\n * event objects. It receives one argument, an object with the following\n * properties:\n *\n * - `input` - Data that was provided to the event observable actor\n * - `self` - The parent actor\n * - `system` - The actor system to which the event observable actor belongs.\n *\n * It should return a {@link Subscribable}, which is compatible with an RxJS\n * Observable, although RxJS is not required to create them.\n */\nexport function fromEventObservable<\n TEvent extends EventObject,\n TInput extends NonReducibleUnknown,\n TEmitted extends EventObject = EventObject\n>(\n lazyObservable: ({\n input,\n system,\n self,\n emit\n }: {\n input: TInput;\n system: AnyActorSystem;\n self: ObservableActorRef<TEvent>;\n emit: (emitted: TEmitted) => void;\n }) => Subscribable<TEvent>\n): ObservableActorLogic<TEvent, TInput, TEmitted> {\n // TODO: event types\n const logic: ObservableActorLogic<TEvent, TInput, TEmitted> = {\n config: lazyObservable,\n transition: (state, event) => {\n if (state.status !== 'active') {\n return state;\n }\n\n switch (event.type) {\n case XSTATE_OBSERVABLE_ERROR:\n return {\n ...state,\n status: 'error',\n error: (event as any).data,\n input: undefined,\n _subscription: undefined\n };\n case XSTATE_OBSERVABLE_COMPLETE:\n return {\n ...state,\n status: 'done',\n input: undefined,\n _subscription: undefined\n };\n case XSTATE_STOP:\n state._subscription!.unsubscribe();\n return {\n ...state,\n status: 'stopped',\n input: undefined,\n _subscription: undefined\n };\n default:\n return state;\n }\n },\n getInitialSnapshot: (_, input) => {\n return {\n status: 'active',\n output: undefined,\n error: undefined,\n context: undefined,\n input,\n _subscription: undefined\n };\n },\n start: (state, { self, system, emit }) => {\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 emit\n }).subscribe({\n next: (value) => {\n if (self._parent) {\n system._relay(self, self._parent, value);\n }\n },\n error: (err) => {\n system._relay(self, self, {\n type: XSTATE_OBSERVABLE_ERROR,\n data: err\n });\n },\n complete: () => {\n system._relay(self, self, { type: XSTATE_OBSERVABLE_COMPLETE });\n }\n });\n },\n getPersistedSnapshot: ({ _subscription, ...snapshot }) => snapshot,\n restoreSnapshot: (snapshot: any) => ({\n ...snapshot,\n _subscription: undefined\n })\n };\n\n return logic;\n}\n","import { XSTATE_STOP } from '../constants.ts';\nimport { AnyActorSystem } from '../system.ts';\nimport {\n ActorLogic,\n ActorRefFromLogic,\n AnyActorRef,\n EventObject,\n NonReducibleUnknown,\n Snapshot\n} from '../types.ts';\n\nexport type PromiseSnapshot<TOutput, TInput> = Snapshot<TOutput> & {\n input: TInput | undefined;\n};\n\nconst XSTATE_PROMISE_RESOLVE = 'xstate.promise.resolve';\nconst XSTATE_PROMISE_REJECT = 'xstate.promise.reject';\n\nexport type PromiseActorLogic<\n TOutput,\n TInput = unknown,\n TEmitted extends EventObject = EventObject\n> = ActorLogic<\n PromiseSnapshot<TOutput, TInput>,\n { type: string; [k: string]: unknown },\n TInput, // input\n AnyActorSystem,\n TEmitted // TEmitted\n>;\n\n/**\n * Represents an actor created by `fromPromise`.\n *\n * The type of `self` within the actor's logic.\n *\n * @example\n *\n * ```ts\n * import { fromPromise, createActor } from 'xstate';\n *\n * // The actor's resolved output\n * type Output = string;\n * // The actor's input.\n * type Input = { message: string };\n *\n * // Actor logic that fetches the url of an image of a cat saying `input.message`.\n * const logic = fromPromise<Output, Input>(async ({ input, self }) => {\n * self;\n * // ^? PromiseActorRef<Output, Input>\n *\n * const data = await fetch(\n * `https://cataas.com/cat/says/${input.message}`\n * );\n * const url = await data.json();\n * return url;\n * });\n *\n * const actor = createActor(logic, { input: { message: 'hello world' } });\n * // ^? PromiseActorRef<Output, Input>\n * ```\n *\n * @see {@link fromPromise}\n */\nexport type PromiseActorRef<TOutput> = ActorRefFromLogic<\n PromiseActorLogic<TOutput, unknown>\n>;\n\nconst controllerMap = new WeakMap<AnyActorRef, AbortController>();\n\n/**\n * An actor logic creator which returns promise logic as defined by an async\n * process that resolves or rejects after some time.\n *\n * Actors created from promise actor logic (“promise actors”) can:\n *\n * - Emit the resolved value of the promise\n * - Output the resolved value of the promise\n *\n * Sending events to promise actors will have no effect.\n *\n * @example\n *\n * ```ts\n * const promiseLogic = fromPromise(async () => {\n * const result = await fetch('https://example.com/...').then((data) =>\n * data.json()\n * );\n *\n * return result;\n * });\n *\n * const promiseActor = createActor(promiseLogic);\n * promiseActor.subscribe((snapshot) => {\n * console.log(snapshot);\n * });\n * promiseActor.start();\n * // => {\n * // output: undefined,\n * // status: 'active'\n * // ...\n * // }\n *\n * // After promise resolves\n * // => {\n * // output: { ... },\n * // status: 'done',\n * // ...\n * // }\n * ```\n *\n * @param promiseCreator A function which returns a Promise, and accepts an\n * object with the following properties:\n *\n * - `input` - Data that was provided to the promise actor\n * - `self` - The parent actor of the promise actor\n * - `system` - The actor system to which the promise actor belongs\n *\n * @see {@link https://stately.ai/docs/input | Input docs} for more information about how input is passed\n */\nexport function fromPromise<\n TOutput,\n TInput = NonReducibleUnknown,\n TEmitted extends EventObject = EventObject\n>(\n promiseCreator: ({\n input,\n system,\n self,\n signal,\n emit\n }: {\n /** Data that was provided to the promise actor */\n input: TInput;\n /** The actor system to which the promise actor belongs */\n system: AnyActorSystem;\n /** The parent actor of the promise actor */\n self: PromiseActorRef<TOutput>;\n signal: AbortSignal;\n emit: (emitted: TEmitted) => void;\n }) => PromiseLike<TOutput>\n): PromiseActorLogic<TOutput, TInput, TEmitted> {\n const logic: PromiseActorLogic<TOutput, TInput, TEmitted> = {\n config: promiseCreator,\n transition: (state, event, scope) => {\n if (state.status !== 'active') {\n return state;\n }\n\n switch (event.type) {\n case XSTATE_PROMISE_RESOLVE: {\n const resolvedValue = (event as any).data;\n return {\n ...state,\n status: 'done',\n output: resolvedValue,\n input: undefined\n };\n }\n case XSTATE_PROMISE_REJECT:\n return {\n ...state,\n status: 'error',\n error: (event as any).data,\n input: undefined\n };\n case XSTATE_STOP: {\n controllerMap.get(scope.self)?.abort();\n controllerMap.delete(scope.self);\n return {\n ...state,\n status: 'stopped',\n input: undefined\n };\n }\n default:\n return state;\n }\n },\n start: (state, { self, system, emit }) => {\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 const controller = new AbortController();\n controllerMap.set(self, controller);\n const resolvedPromise = Promise.resolve(\n promiseCreator({\n input: state.input!,\n system,\n self,\n signal: controller.signal,\n emit\n })\n );\n\n resolvedPromise.then(\n (response) => {\n if (self.getSnapshot().status !== 'active') {\n return;\n }\n controllerMap.delete(self);\n system._relay(self, self, {\n type: XSTATE_PROMISE_RESOLVE,\n data: response\n });\n },\n (errorData) => {\n if (self.getSnapshot().status !== 'active') {\n return;\n }\n controllerMap.delete(self);\n system._relay(self, self, {\n type: XSTATE_PROMISE_REJECT,\n data: errorData\n });\n }\n );\n },\n getInitialSnapshot: (_, input) => {\n return {\n status: 'active',\n output: undefined,\n error: undefined,\n input\n };\n },\n getPersistedSnapshot: (snapshot) => snapshot,\n restoreSnapshot: (snapshot: any) => snapshot\n };\n\n return logic;\n}\n","import { createActor } from '../createActor.ts';\nimport type { ActorRef, AnyEventObject, Snapshot } from '../types.ts';\nimport { fromTransition } from './transition.ts';\nexport {\n fromCallback,\n type CallbackActorLogic,\n type CallbackActorRef,\n type CallbackSnapshot,\n type CallbackLogicFunction\n} from './callback.ts';\nexport {\n fromEventObservable,\n fromObservable,\n type ObservableActorLogic,\n type ObservableActorRef,\n type ObservableSnapshot\n} from './observable.ts';\nexport {\n fromPromise,\n type PromiseActorLogic,\n type PromiseActorRef,\n type PromiseSnapshot\n} from './promise.ts';\nexport {\n fromTransition,\n type TransitionActorLogic,\n type TransitionActorRef,\n type TransitionSnapshot\n} from './transition.ts';\n\nconst emptyLogic = fromTransition((_) => undefined, undefined);\n\nexport function createEmptyActor(): ActorRef<\n Snapshot<undefined>,\n AnyEventObject,\n AnyEventObject\n> {\n return createActor(emptyLogic);\n}\n","const cache = new WeakMap<any, any>();\n\nexport function memo<T>(object: any, key: string, fn: () => T): T {\n let memoizedData = cache.get(object);\n\n if (!memoizedData) {\n memoizedData = { [key]: fn() };\n cache.set(object, memoizedData);\n } else if (!(key in memoizedData)) {\n memoizedData[key] = fn();\n }\n\n return memoizedData[key];\n}\n","import { MachineSnapshot } from './State.ts';\nimport type { StateMachine } from './StateMachine.ts';\nimport { NULL_EVENT, STATE_DELIMITER } from './constants.ts';\nimport { evaluateGuard } from './guards.ts';\nimport { memo } from './memo.ts';\nimport {\n BuiltinAction,\n formatInitialTransition,\n formatTransition,\n formatTransitions,\n getCandidates,\n getDelayedTransitions\n} from './stateUtils.ts';\nimport type {\n DelayedTransitionDefinition,\n EventObject,\n InitialTransitionDefinition,\n InvokeDefinition,\n MachineContext,\n Mapper,\n StateNodeConfig,\n StateNodeDefinition,\n StateNodesConfig,\n StatesDefinition,\n TransitionDefinition,\n TransitionDefinitionMap,\n TODO,\n UnknownAction,\n ParameterizedObject,\n AnyStateMachine,\n AnyStateNodeConfig,\n ProvidedActor,\n NonReducibleUnknown,\n EventDescriptor\n} from './types.ts';\nimport {\n createInvokeId,\n mapValues,\n toArray,\n toTransitionConfigArray\n} from './utils.ts';\n\nconst EMPTY_OBJECT = {};\n\nconst toSerializableAction = (action: UnknownAction) => {\n if (typeof action === 'string') {\n return { type: action };\n }\n if (typeof action === 'function') {\n if ('resolve' in action) {\n return { type: (action as BuiltinAction).type };\n }\n return {\n type: action.name\n };\n }\n return action;\n};\n\ninterface StateNodeOptions<\n TContext extends MachineContext,\n TEvent extends EventObject\n> {\n _key: string;\n _parent?: StateNode<TContext, TEvent>;\n _machine: AnyStateMachine;\n}\n\nexport class StateNode<\n TContext extends MachineContext = MachineContext,\n TEvent extends EventObject = EventObject\n> {\n /**\n * The relative key of the state node, which represents its location in the\n * overall state value.\n */\n public key: string;\n /** The unique ID of the state node. */\n public id: string;\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 public type: 'atomic' | 'compound' | 'parallel' | 'final' | 'history';\n /** The string path from the root machine node to this node. */\n public path: string[];\n /** The child state nodes. */\n public states: StateNodesConfig<TContext, TEvent>;\n /**\n * The type of history on this state node. Can be:\n *\n * - `'shallow'` - recalls only top-level historical state value\n * - `'deep'` - recalls historical state value at all levels\n */\n public history: false | 'shallow' | 'deep';\n /** The action(s) to be executed upon entering the state node. */\n public entry: UnknownAction[];\n /** The action(s) to be executed upon exiting the state node. */\n public exit: UnknownAction[];\n /** The parent state node. */\n public parent?: StateNode<TContext, TEvent>;\n /** The root machine node. */\n public machine: StateMachine<\n TContext,\n TEvent,\n any, // children\n any, // actor\n any, // action\n any, // guard\n any, // delay\n any, // state value\n any, // tag\n any, // input\n any, // output\n any, // emitted\n any, // meta\n any // state schema\n >;\n /**\n * The meta data associated with this state node, which will be returned in\n * State instances.\n */\n public meta?: any;\n /**\n * The output data sent with the \"xstate.done.state._id_\" event if this is a\n * final state node.\n */\n public output?:\n | Mapper<MachineContext, EventObject, unknown, EventObject>\n | NonReducibleUnknown;\n\n /**\n * The order this state node appears. Corresponds to the implicit document\n * order.\n */\n public order: number = -1;\n\n public description?: string;\n\n public tags: string[] = [];\n public transitions!: Map<string, TransitionDefinition<TContext, TEvent>[]>;\n public always?: Array<TransitionDefinition<TContext, TEvent>>;\n\n constructor(\n /** The raw config used to create the machine. */\n public config: StateNodeConfig<\n TContext,\n TEvent,\n TODO, // actors\n TODO, // actions\n TODO, // guards\n TODO, // delays\n TODO, // tags\n TODO, // output\n TODO, // emitted\n TODO // meta\n >,\n options: StateNodeOptions<TContext, TEvent>\n ) {\n this.parent = options._parent;\n this.key = options._key;\n this.machine = options._machine;\n this.path = this.parent ? this.parent.path.concat(this.key) : [];\n this.id =\n this.config.id || [this.machine.id, ...this.path].join(STATE_DELIMITER);\n this.type =\n this.config.type ||\n (this.config.states && Object.keys(this.config.states).length\n ? 'compound'\n : this.config.history\n ? 'history'\n : 'atomic');\n this.description = this.config.description;\n\n this.order = this.machine.idMap.size;\n this.machine.idMap.set(this.id, this);\n\n this.states = (\n this.config.states\n ? mapValues(\n this.config.states,\n (stateConfig: AnyStateNodeConfig, key) => {\n const stateNode = new StateNode(stateConfig, {\n _parent: this,\n _key: key,\n _machine: this.machine\n });\n return stateNode;\n }\n )\n : EMPTY_OBJECT\n ) as StateNodesConfig<TContext, TEvent>;\n\n if (this.type === 'compound' && !this.config.initial) {\n throw new Error(\n `No initial state specified for compound state node \"#${\n this.id\n }\". Try adding { initial: \"${\n Object.keys(this.states)[0]\n }\" } to the state config.`\n );\n }\n\n // History config\n this.history =\n this.config.history === true ? 'shallow' : this.config.history || false;\n\n this.entry = toArray(this.config.entry).slice();\n this.exit = toArray(this.config.exit).slice();\n\n this.meta = this.config.meta;\n this.output =\n this.type === 'final' || !this.parent ? this.config.output : undefined;\n this.tags = toArray(config.tags).slice();\n }\n\n /** @internal */\n public _initialize() {\n this.transitions = formatTransitions(this);\n if (this.config.always) {\n this.always = toTransitionConfigArray(this.config.always).map((t) =>\n formatTransition(this, NULL_EVENT, t)\n );\n }\n\n Object.keys(this.states).forEach((key) => {\n this.states[key]._initialize();\n });\n }\n\n /** The well-structured state node definition. */\n public get definition(): StateNodeDefinition<TContext, TEvent> {\n return {\n id: this.id,\n key: this.key,\n version: this.machine.version,\n type: this.type,\n initial: this.initial\n ? {\n target: this.initial.target,\n source: this,\n actions: this.initial.actions.map(toSerializableAction),\n eventType: null as any,\n reenter: false,\n toJSON: () => ({\n target: this.initial.target.map((t) => `#${t.id}`),\n source: `#${this.id}`,\n actions: this.initial.actions.map(toSerializableAction),\n eventType: null as any\n })\n }\n : undefined,\n history: this.history,\n states: mapValues(this.states, (state: StateNode<TContext, TEvent>) => {\n return state.definition;\n }) as StatesDefinition<TContext, TEvent>,\n on: this.on,\n transitions: [...this.transitions.values()].flat().map((t) => ({\n ...t,\n actions: t.actions.map(toSerializableAction)\n })),\n entry: this.entry.map(toSerializableAction),\n exit: this.exit.map(toSerializableAction),\n meta: this.meta,\n order: this.order || -1,\n output: this.output,\n invoke: this.invoke,\n description: this.description,\n tags: this.tags\n };\n }\n\n /** @internal */\n public toJSON() {\n return this.definition;\n }\n\n /** The logic invoked as actors by this state node. */\n public get invoke(): Array<\n InvokeDefinition<\n TContext,\n TEvent,\n ProvidedActor,\n ParameterizedObject,\n ParameterizedObject,\n string,\n TODO, // TEmitted\n TODO // TMeta\n >\n > {\n return memo(this, 'invoke', () =>\n toArray(this.config.invoke).map((invokeConfig, i) => {\n const { src, systemId } = invokeConfig;\n const resolvedId = invokeConfig.id ?? createInvokeId(this.id, i);\n const sourceName =\n typeof src === 'string'\n ? src\n : `xstate.invoke.${createInvokeId(this.id, i)}`;\n\n return {\n ...invokeConfig,\n src: sourceName,\n id: resolvedId,\n systemId: systemId,\n toJSON() {\n const { onDone, onError, ...invokeDefValues } = invokeConfig;\n return {\n ...invokeDefValues,\n type: 'xstate.invoke',\n src: sourceName,\n id: resolvedId\n };\n }\n } as InvokeDefinition<\n TContext,\n TEvent,\n ProvidedActor,\n ParameterizedObject,\n ParameterizedObject,\n string,\n TODO, // TEmitted\n TODO // TMeta\n >;\n })\n );\n }\n\n /** The mapping of events to transitions. */\n public get on(): TransitionDefinitionMap<TContext, TEvent> {\n return memo(this, 'on', () => {\n const transitions = this.transitions;\n\n return [...transitions]\n .flatMap(([descriptor, t]) => t.map((t) => [descriptor, t] as const))\n .reduce(\n (map: any, [descriptor, transition]) => {\n map[descriptor] = map[descriptor] || [];\n map[descriptor].push(transition);\n return map;\n },\n {} as TransitionDefinitionMap<TContext, TEvent>\n );\n });\n }\n\n public get after(): Array<DelayedTransitionDefinition<TContext, TEvent>> {\n return memo(\n this,\n 'delayedTransitions',\n () => getDelayedTransitions(this) as any\n );\n }\n\n public get initial(): InitialTransitionDefinition<TContext, TEvent> {\n return memo(this, 'initial', () =>\n formatInitialTransition(this, this.config.initial)\n );\n }\n\n /** @internal */\n public next(\n snapshot: MachineSnapshot<\n TContext,\n TEvent,\n any,\n any,\n any,\n any,\n any, // TMeta\n any // TStateSchema\n >,\n event: TEvent\n ): TransitionDefinition<TContext, TEvent>[] | undefined {\n const eventType = event.type;\n const actions: UnknownAction[] = [];\n\n let selectedTransition: TransitionDefinition<TContext, TEvent> | undefined;\n\n const candidates: Array<TransitionDefinition<TContext, TEvent>> = memo(\n this,\n `candidates-${eventType}`,\n () => getCandidates(this, eventType)\n );\n\n for (const candidate of candidates) {\n const { guard } = candidate;\n const resolvedContext = snapshot.context;\n\n let guardPassed = false;\n\n try {\n guardPassed =\n !guard ||\n evaluateGuard<TContext, TEvent>(\n guard,\n resolvedContext,\n event,\n snapshot\n );\n } catch (err: any) {\n const guardType =\n typeof guard === 'string'\n ? guard\n : typeof guard === 'object'\n ? guard.type\n : undefined;\n throw new Error(\n `Unable to evaluate guard ${\n guardType ? `'${guardType}' ` : ''\n }in transition for event '${eventType}' in state node '${\n this.id\n }':\\n${err.message}`\n );\n }\n\n if (guardPassed) {\n actions.push(...candidate.actions);\n selectedTransition = candidate;\n break;\n }\n }\n\n return selectedTransition ? [selectedTransition] : undefined;\n }\n\n /** All the event types accepted by this state node and its descendants. */\n public get events(): Array<EventDescriptor<TEvent>> {\n return memo(this, 'events', () => {\n const { states } = this;\n const events = new Set(this.ownEvents);\n\n if (states) {\n for (const stateId of Object.keys(states)) {\n const state = states[stateId];\n if (state.states) {\n for (const event of state.events) {\n events.add(`${event}`);\n }\n }\n }\n }\n\n return Array.from(events);\n });\n }\n\n /**\n * All the events that have transitions directly from this state node.\n *\n * Excludes any inert events.\n */\n public get ownEvents(): Array<EventDescriptor<TEvent>> {\n const keys = Object.keys(Object.fromEntries(this.transitions));\n const events = new Set(\n keys.filter((descriptor) => {\n return this.transitions\n .get(descriptor)!\n .some(\n (transition) =>\n !(\n !transition.target &&\n !transition.actions.length &&\n !transition.reenter\n )\n );\n })\n );\n\n return Array.from(events);\n }\n}\n","import isDevelopment from '#is-development';\nimport { assign } from './actions.ts';\nimport { $$ACTOR_TYPE, createActor } from './createActor.ts';\nimport { createInitEvent } from './eventUtils.ts';\nimport {\n createMachineSnapshot,\n getPersistedSnapshot,\n MachineSnapshot\n} from './State.ts';\nimport { StateNode } from './StateNode.ts';\nimport {\n formatRouteTransitions,\n getAllStateNodes,\n getStateNodeByPath,\n getStateNodes,\n initialMicrostep,\n isInFinalState,\n isStateId,\n macrostep,\n resolveActionsAndContext,\n resolveStateValue,\n transitionNode\n} from './stateUtils.ts';\nimport { AnyActorSystem } from './system.ts';\nimport type {\n ActorLogic,\n ActorScope,\n AnyActorLogic,\n AnyActorRef,\n AnyActorScope,\n AnyEventObject,\n DoNotInfer,\n Equals,\n EventDescriptor,\n EventObject,\n HistoryValue,\n InternalMachineImplementations,\n MachineConfig,\n MachineContext,\n MachineImplementationsSimplified,\n MachineOptions,\n MetaObject,\n ParameterizedObject,\n ProvidedActor,\n Snapshot,\n SnapshotFrom,\n StateMachineDefinition,\n StateValue,\n TransitionDefinition,\n ResolvedStateMachineTypes,\n StateSchema,\n SnapshotStatus\n} from './types.ts';\nimport { resolveReferencedActor, toStatePath } from './utils.ts';\n\nconst STATE_IDENTIFIER = '#';\n\nexport class StateMachine<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TChildren extends Record<string, AnyActorRef | undefined>,\n TActor extends ProvidedActor,\n TAction extends ParameterizedObject,\n TGuard extends ParameterizedObject,\n TDelay extends string,\n TStateValue extends StateValue,\n TTag extends string,\n TInput,\n TOutput,\n TEmitted extends EventObject,\n TMeta extends MetaObject,\n TStateSchema extends StateSchema\n> implements\n ActorLogic<\n MachineSnapshot<\n TContext,\n TEvent,\n TChildren,\n TStateValue,\n TTag,\n TOutput,\n TMeta,\n TStateSchema\n >,\n TEvent,\n TInput,\n AnyActorSystem,\n TEmitted\n >\n{\n /** The machine's own version. */\n public version?: string;\n\n public schemas: unknown;\n\n public implementations: MachineImplementationsSimplified<TContext, TEvent>;\n\n /** Runtime options for machine execution. */\n public options: MachineOptions;\n\n /** @internal */\n public __xstatenode = true as const;\n\n /** @internal */\n public idMap: Map<string, StateNode<TContext, TEvent>> = new Map();\n\n public root: StateNode<TContext, TEvent>;\n\n public id: string;\n\n public states: StateNode<TContext, TEvent>['states'];\n public events: Array<EventDescriptor<TEvent>>;\n\n constructor(\n /** The raw config used to create the machine. */\n public config: MachineConfig<\n TContext,\n TEvent,\n any,\n any,\n any,\n any,\n any,\n any,\n TOutput,\n any, // TEmitted\n any // TMeta\n > & {\n schemas?: unknown;\n },\n implementations?: MachineImplementationsSimplified<TContext, TEvent>\n ) {\n this.id = config.id || '(machine)';\n this.implementations = {\n actors: implementations?.actors ?? {},\n actions: implementations?.actions ?? {},\n delays: implementations?.delays ?? {},\n guards: implementations?.guards ?? {}\n };\n this.version = this.config.version;\n this.schemas = this.config.schemas;\n this.options = {\n maxIterations: Infinity,\n ...this.config.options\n };\n\n this.transition = this.transition.bind(this);\n this.getInitialSnapshot = this.getInitialSnapshot.bind(this);\n this.getPersistedSnapshot = this.getPersistedSnapshot.bind(this);\n this.restoreSnapshot = this.restoreSnapshot.bind(this);\n this.start = this.start.bind(this);\n\n this.root = new StateNode(config, {\n _key: this.id,\n _machine: this as any\n });\n\n this.root._initialize();\n formatRouteTransitions(this.root);\n\n this.states = this.root.states; // TODO: remove!\n this.events = this.root.events;\n\n if (\n isDevelopment &&\n !('output' in this.root) &&\n Object.values(this.states).some(\n (state) => state.type === 'final' && 'output' in state\n )\n ) {\n console.warn(\n 'Missing `machine.output` declaration (top-level final state with output detected)'\n );\n }\n }\n\n /**\n * Clones this state machine with the provided implementations.\n *\n * @param implementations Options (`actions`, `guards`, `actors`, `delays`) to\n * recursively merge with the existing options.\n * @returns A new `StateMachine` instance with the provided implementations.\n */\n public provide(\n implementations: InternalMachineImplementations<\n ResolvedStateMachineTypes<\n TContext,\n DoNotInfer<TEvent>,\n TActor,\n TAction,\n TGuard,\n TDelay,\n TTag,\n TEmitted\n >\n >\n ): StateMachine<\n TContext,\n TEvent,\n TChildren,\n TActor,\n TAction,\n TGuard,\n TDelay,\n TStateValue,\n TTag,\n TInput,\n TOutput,\n TEmitted,\n TMeta,\n TStateSchema\n > {\n const { actions, guards, actors, delays } = this.implementations;\n\n return new StateMachine(this.config, {\n actions: { ...actions, ...implementations.actions },\n guards: { ...guards, ...implementations.guards },\n actors: { ...actors, ...implementations.actors },\n delays: { ...delays, ...implementations.delays }\n });\n }\n\n public resolveState(\n config: {\n value: StateValue;\n context?: TContext;\n historyValue?: HistoryValue<TContext, TEvent>;\n status?: SnapshotStatus;\n output?: TOutput;\n error?: unknown;\n } & (Equals<TContext, MachineContext> extends false\n ? { context: unknown }\n : {})\n ): MachineSnapshot<\n TContext,\n TEvent,\n TChildren,\n TStateValue,\n TTag,\n TOutput,\n TMeta,\n TStateSchema\n > {\n const resolvedStateValue = resolveStateValue(this.root, config.value);\n const nodeSet = getAllStateNodes(\n getStateNodes(this.root, resolvedStateValue)\n );\n\n return createMachineSnapshot(\n {\n _nodes: [...nodeSet],\n context: config.context || ({} as TContext),\n children: {},\n status: isInFinalState(nodeSet, this.root)\n ? 'done'\n : config.status || 'active',\n output: config.output,\n error: config.error,\n historyValue: config.historyValue\n },\n this\n ) as MachineSnapshot<\n TContext,\n TEvent,\n TChildren,\n TStateValue,\n TTag,\n TOutput,\n TMeta,\n TStateSchema\n >;\n }\n\n /**\n * Determines the next snapshot given the current `snapshot` and received\n * `event`. Calculates a full macrostep from all microsteps.\n *\n * @param snapshot The current snapshot\n * @param event The received event\n */\n public transition(\n snapshot: MachineSnapshot<\n TContext,\n TEvent,\n TChildren,\n TStateValue,\n TTag,\n TOutput,\n TMeta,\n TStateSchema\n >,\n event: TEvent,\n actorScope: ActorScope<typeof snapshot, TEvent, AnyActorSystem, TEmitted>\n ): MachineSnapshot<\n TContext,\n TEvent,\n TChildren,\n TStateValue,\n TTag,\n TOutput,\n TMeta,\n TStateSchema\n > {\n return macrostep(snapshot, event, actorScope, [])\n .snapshot as typeof snapshot;\n }\n\n /**\n * Determines the next state given the current `state` and `event`. Calculates\n * a microstep.\n *\n * @param state The current state\n * @param event The received event\n */\n public microstep(\n snapshot: MachineSnapshot<\n TContext,\n TEvent,\n TChildren,\n TStateValue,\n TTag,\n TOutput,\n TMeta,\n TStateSchema\n >,\n event: TEvent,\n actorScope: AnyActorScope\n ): Array<\n MachineSnapshot<\n TContext,\n TEvent,\n TChildren,\n TStateValue,\n TTag,\n TOutput,\n TMeta,\n TStateSchema\n >\n > {\n return macrostep(snapshot, event, actorScope, []).microsteps.map(\n ([s]) => s\n );\n }\n\n public getTransitionData(\n snapshot: MachineSnapshot<\n TContext,\n TEvent,\n TChildren,\n TStateValue,\n TTag,\n TOutput,\n TMeta,\n TStateSchema\n >,\n event: TEvent\n ): Array<TransitionDefinition<TContext, TEvent>> {\n return transitionNode(this.root, snapshot.value, snapshot, event) || [];\n }\n\n /**\n * The initial state _before_ evaluating any microsteps. This \"pre-initial\"\n * state is provided to initial actions executed in the initial state.\n *\n * @internal\n */\n _getPreInitialState(\n actorScope: AnyActorScope,\n initEvent: any,\n internalQueue: AnyEventObject[]\n ): MachineSnapshot<\n TContext,\n TEvent,\n TChildren,\n TStateValue,\n TTag,\n TOutput,\n TMeta,\n TStateSchema\n > {\n const { context } = this.config;\n\n const preInitial = createMachineSnapshot(\n {\n context:\n typeof context !== 'function' && context ? context : ({} as TContext),\n _nodes: [this.root],\n children: {},\n status: 'active'\n },\n this\n );\n\n if (typeof context === 'function') {\n const assignment = ({ spawn, event, self }: any) =>\n context({ spawn, input: event.input, self });\n return resolveActionsAndContext(\n preInitial,\n initEvent,\n actorScope,\n [assign(assignment)],\n internalQueue,\n undefined\n ) as SnapshotFrom<this>;\n }\n\n return preInitial as SnapshotFrom<this>;\n }\n\n /**\n * Returns the initial `State` instance, with reference to `self` as an\n * `ActorRef`.\n */\n public getInitialSnapshot(\n actorScope: ActorScope<\n MachineSnapshot<\n TContext,\n TEvent,\n TChildren,\n TStateValue,\n TTag,\n TOutput,\n TMeta,\n TStateSchema\n >,\n TEvent,\n AnyActorSystem,\n TEmitted\n >,\n input?: TInput\n ): MachineSnapshot<\n TContext,\n TEvent,\n TChildren,\n TStateValue,\n TTag,\n TOutput,\n TMeta,\n TStateSchema\n > {\n const initEvent = createInitEvent(input) as unknown as TEvent; // TODO: fix;\n const internalQueue: AnyEventObject[] = [];\n const preInitialState = this._getPreInitialState(\n actorScope,\n initEvent,\n internalQueue\n );\n const [nextState] = initialMicrostep(\n this.root,\n preInitialState,\n actorScope,\n initEvent,\n internalQueue\n );\n\n const { snapshot: macroState } = macrostep(\n nextState,\n initEvent as AnyEventObject,\n actorScope,\n internalQueue\n );\n\n return macroState as SnapshotFrom<this>;\n }\n\n public start(\n snapshot: MachineSnapshot<\n TContext,\n TEvent,\n TChildren,\n TStateValue,\n TTag,\n TOutput,\n TMeta,\n TStateSchema\n >\n ): void {\n Object.values(snapshot.children as Record<string, AnyActorRef>).forEach(\n (child: any) => {\n if (child.getSnapshot().status === 'active') {\n child.start();\n }\n }\n );\n }\n\n public getStateNodeById(stateId: string): StateNode<TContext, TEvent> {\n const fullPath = toStatePath(stateId);\n const relativePath = fullPath.slice(1);\n const resolvedStateId = isStateId(fullPath[0])\n ? fullPath[0].slice(STATE_IDENTIFIER.length)\n : fullPath[0];\n\n const stateNode = this.idMap.get(resolvedStateId);\n if (!stateNode) {\n throw new Error(\n `Child state node '#${resolvedStateId}' does not exist on machine '${this.id}'`\n );\n }\n return getStateNodeByPath(stateNode, relativePath);\n }\n\n public get definition(): StateMachineDefinition<TContext, TEvent> {\n return this.root.definition;\n }\n\n public toJSON() {\n return this.definition;\n }\n\n public getPersistedSnapshot(\n snapshot: MachineSnapshot<\n TContext,\n TEvent,\n TChildren,\n TStateValue,\n TTag,\n TOutput,\n TMeta,\n TStateSchema\n >,\n options?: unknown\n ) {\n return getPersistedSnapshot(snapshot, options);\n }\n\n public restoreSnapshot(\n snapshot: Snapshot<unknown>,\n _actorScope: ActorScope<\n MachineSnapshot<\n TContext,\n TEvent,\n TChildren,\n TStateValue,\n TTag,\n TOutput,\n TMeta,\n TStateSchema\n >,\n TEvent,\n AnyActorSystem,\n TEmitted\n >\n ): MachineSnapshot<\n TContext,\n TEvent,\n TChildren,\n TStateValue,\n TTag,\n TOutput,\n TMeta,\n TStateSchema\n > {\n const children: Record<string, AnyActorRef> = {};\n const snapshotChildren: Record<\n string,\n {\n src: string | AnyActorLogic;\n snapshot: Snapshot<unknown>;\n syncSnapshot?: boolean;\n systemId?: string;\n }\n > = (snapshot as any).children;\n\n Object.keys(snapshotChildren).forEach((actorId) => {\n const actorData = snapshotChildren[actorId];\n const childState = actorData.snapshot;\n const src = actorData.src;\n\n const logic =\n typeof src === 'string' ? resolveReferencedActor(this, src) : src;\n\n if (!logic) {\n return;\n }\n\n const actorRef = createActor(logic, {\n id: actorId,\n parent: _actorScope.self,\n syncSnapshot: actorData.syncSnapshot,\n snapshot: childState,\n src,\n systemId: actorData.systemId\n });\n\n children[actorId] = actorRef;\n });\n\n function resolveHistoryReferencedState(\n root: StateNode<TContext, TEvent>,\n referenced: { id: string } | StateNode<TContext, TEvent>\n ) {\n if (referenced instanceof StateNode) {\n return referenced;\n }\n try {\n return root.machine.getStateNodeById(referenced.id);\n } catch {\n if (isDevelopment) {\n console.warn(`Could not resolve StateNode for id: ${referenced.id}`);\n }\n }\n }\n\n function reviveHistoryValue(\n root: StateNode<TContext, TEvent>,\n historyValue: Record<\n string,\n ({ id: string } | StateNode<TContext, TEvent>)[]\n >\n ): HistoryValue<TContext, TEvent> {\n if (!historyValue || typeof historyValue !== 'object') {\n return {};\n }\n const revived: HistoryValue<TContext, TEvent> = {};\n for (const key in historyValue) {\n const arr = historyValue[key];\n\n for (const item of arr) {\n const resolved = resolveHistoryReferencedState(root, item);\n\n if (!resolved) {\n continue;\n }\n\n revived[key] ??= [];\n revived[key].push(resolved);\n }\n }\n return revived;\n }\n\n const revivedHistoryValue = reviveHistoryValue(\n this.root,\n (snapshot as any).historyValue\n );\n\n const restoredSnapshot = createMachineSnapshot(\n {\n ...(snapshot as any),\n children,\n _nodes: Array.from(\n getAllStateNodes(getStateNodes(this.root, (snapshot as any).value))\n ),\n historyValue: revivedHistoryValue\n },\n this\n ) as MachineSnapshot<\n TContext,\n TEvent,\n TChildren,\n TStateValue,\n TTag,\n TOutput,\n TMeta,\n TStateSchema\n >;\n\n const seen = new Set();\n\n function reviveContext(\n contextPart: Record<string, unknown>,\n children: Record<string, AnyActorRef>\n ) {\n if (seen.has(contextPart)) {\n return;\n }\n seen.add(contextPart);\n for (const key in contextPart) {\n const value: unknown = contextPart[key];\n\n if (value && typeof value === 'object') {\n if ('xstate$$type' in value && value.xstate$$type === $$ACTOR_TYPE) {\n contextPart[key] = children[(value as any).id];\n continue;\n }\n reviveContext(value as typeof contextPart, children);\n }\n }\n }\n\n reviveContext(restoredSnapshot.context, children);\n\n return restoredSnapshot;\n }\n}\n","import { StateMachine } from './StateMachine.ts';\nimport {\n ResolvedStateMachineTypes,\n TODO,\n AnyActorRef,\n EventObject,\n AnyEventObject,\n Cast,\n InternalMachineImplementations,\n MachineConfig,\n MachineContext,\n MachineTypes,\n NonReducibleUnknown,\n ParameterizedObject,\n ProvidedActor,\n StateValue,\n ToChildren,\n MetaObject\n} from './types.ts';\n\ntype TestValue =\n | string\n | {\n [k: string]: TestValue | undefined;\n };\n\ntype _GroupTestValues<TTestValue extends string | TestValue> =\n TTestValue extends string\n ? TTestValue extends `${string}.${string}`\n ? [never, never]\n : [TTestValue, never]\n : [never, TTestValue];\n\n/**\n * Creates a state machine (statechart) with the given configuration.\n *\n * The state machine represents the pure logic of a state machine actor.\n *\n * @example\n *\n * ```ts\n * import { createMachine } from 'xstate';\n *\n * const lightMachine = createMachine({\n * id: 'light',\n * initial: 'green',\n * states: {\n * green: {\n * on: {\n * TIMER: { target: 'yellow' }\n * }\n * },\n * yellow: {\n * on: {\n * TIMER: { target: 'red' }\n * }\n * },\n * red: {\n * on: {\n * TIMER: { target: 'green' }\n * }\n * }\n * }\n * });\n *\n * const lightActor = createActor(lightMachine);\n * lightActor.start();\n *\n * lightActor.send({ type: 'TIMER' });\n * ```\n *\n * @param config The state machine configuration.\n * @param options DEPRECATED: use `setup({ ... })` or `machine.provide({ ... })`\n * to provide machine implementations instead.\n */\nexport function createMachine<\n TContext extends MachineContext,\n TEvent extends AnyEventObject, // TODO: consider using a stricter `EventObject` here\n TActor extends ProvidedActor,\n TAction extends ParameterizedObject,\n TGuard extends ParameterizedObject,\n TDelay extends string,\n TTag extends string,\n TInput,\n TOutput extends NonReducibleUnknown,\n TEmitted extends EventObject,\n TMeta extends MetaObject,\n // it's important to have at least one default type parameter here\n // it allows us to benefit from contextual type instantiation as it makes us to pass the hasInferenceCandidatesOrDefault check in the compiler\n // we should be able to remove this when we start inferring TConfig, with it we'll always have an inference candidate\n _ = any\n>(\n config: {\n types?: MachineTypes<\n TContext,\n TEvent,\n TActor,\n TAction,\n TGuard,\n TDelay,\n TTag,\n TInput,\n TOutput,\n TEmitted,\n TMeta\n >;\n schemas?: unknown;\n } & MachineConfig<\n TContext,\n TEvent,\n TActor,\n TAction,\n TGuard,\n TDelay,\n TTag,\n TInput,\n TOutput,\n TEmitted,\n TMeta\n >,\n implementations?: InternalMachineImplementations<\n ResolvedStateMachineTypes<\n TContext,\n TEvent,\n TActor,\n TAction,\n TGuard,\n TDelay,\n TTag,\n TEmitted\n >\n >\n): StateMachine<\n TContext,\n TEvent,\n Cast<ToChildren<TActor>, Record<string, AnyActorRef | undefined>>,\n TActor,\n TAction,\n TGuard,\n TDelay,\n StateValue,\n TTag & string,\n TInput,\n TOutput,\n TEmitted,\n TMeta, // TMeta\n TODO // TStateSchema\n> {\n return new StateMachine<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any, // TEmitted\n any, // TMeta\n any // TStateSchema\n >(config as any, implementations as any);\n}\n","import { createActor } from './createActor.ts';\nimport {\n ActorScope,\n AnyActorLogic,\n AnyActorScope,\n EmittedFrom,\n EventFromLogic,\n InputFrom,\n SnapshotFrom\n} from './types.ts';\n\n/** @internal */\nexport function createInertActorScope<T extends AnyActorLogic>(\n actorLogic: T\n): AnyActorScope {\n const self = createActor(actorLogic as AnyActorLogic);\n const inertActorScope: ActorScope<\n SnapshotFrom<T>,\n EventFromLogic<T>,\n any,\n EmittedFrom<T>\n > = {\n self,\n defer: () => {},\n id: '',\n logger: () => {},\n sessionId: '',\n stopChild: () => {},\n system: self.system,\n emit: () => {},\n actionExecutor: () => {}\n };\n\n return inertActorScope;\n}\n\n/** @deprecated Use `initialTransition(…)` instead. */\nexport function getInitialSnapshot<T extends AnyActorLogic>(\n actorLogic: T,\n ...[input]: undefined extends InputFrom<T>\n ? [input?: InputFrom<T>]\n : [input: InputFrom<T>]\n): SnapshotFrom<T> {\n const actorScope = createInertActorScope(actorLogic);\n return actorLogic.getInitialSnapshot(actorScope, input);\n}\n\n/**\n * Determines the next snapshot for the given `actorLogic` based on the given\n * `snapshot` and `event`.\n *\n * If the `snapshot` is `undefined`, the initial snapshot of the `actorLogic` is\n * used.\n *\n * @deprecated Use `transition(…)` instead.\n * @example\n *\n * ```ts\n * import { getNextSnapshot } from 'xstate';\n * import { trafficLightMachine } from './trafficLightMachine.ts';\n *\n * const nextSnapshot = getNextSnapshot(\n * trafficLightMachine, // actor logic\n * undefined, // snapshot (or initial state if undefined)\n * { type: 'TIMER' }\n * ); // event object\n *\n * console.log(nextSnapshot.value);\n * // => 'yellow'\n *\n * const nextSnapshot2 = getNextSnapshot(\n * trafficLightMachine, // actor logic\n * nextSnapshot, // snapshot\n * { type: 'TIMER' }\n * ); // event object\n *\n * console.log(nextSnapshot2.value);\n * // =>'red'\n * ```\n */\nexport function getNextSnapshot<T extends AnyActorLogic>(\n actorLogic: T,\n snapshot: SnapshotFrom<T>,\n event: EventFromLogic<T>\n): SnapshotFrom<T> {\n const inertActorScope = createInertActorScope(actorLogic);\n (inertActorScope.self as any)._snapshot = snapshot;\n return actorLogic.transition(snapshot, event, inertActorScope);\n}\n","import isDevelopment from '#is-development';\nimport { AnyActorRef, SnapshotFrom, Subscription } from './types.ts';\n\ninterface WaitForOptions {\n /**\n * How long to wait before rejecting, if no emitted state satisfies the\n * predicate.\n *\n * @defaultValue Infinity\n */\n timeout: number;\n\n /** A signal which stops waiting when aborted. */\n signal?: AbortSignal;\n}\n\nconst defaultWaitForOptions: WaitForOptions = {\n timeout: Infinity // much more than 10 seconds\n};\n\n/**\n * Subscribes to an actor ref and waits for its emitted value to satisfy a\n * predicate, and then resolves with that value. Will throw if the desired state\n * is not reached after an optional timeout. (defaults to Infinity).\n *\n * @example\n *\n * ```js\n * const state = await waitFor(someService, (state) => {\n * return state.hasTag('loaded');\n * });\n *\n * state.hasTag('loaded'); // true\n * ```\n *\n * @param actorRef The actor ref to subscribe to\n * @param predicate Determines if a value matches the condition to wait for\n * @param options\n * @returns A promise that eventually resolves to the emitted value that matches\n * the condition\n */\nexport function waitFor<TActorRef extends AnyActorRef>(\n actorRef: TActorRef,\n predicate: (emitted: SnapshotFrom<TActorRef>) => boolean,\n options?: Partial<WaitForOptions>\n): Promise<SnapshotFrom<TActorRef>> {\n const resolvedOptions: WaitForOptions = {\n ...defaultWaitForOptions,\n ...options\n };\n return new Promise((res, rej) => {\n const { signal } = resolvedOptions;\n if (signal?.aborted) {\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n rej(signal.reason);\n return;\n }\n let done = false;\n if (isDevelopment && resolvedOptions.timeout < 0) {\n console.error(\n '`timeout` passed to `waitFor` is negative and it will reject its internal promise immediately.'\n );\n }\n const handle =\n resolvedOptions.timeout === Infinity\n ? undefined\n : setTimeout(() => {\n dispose();\n rej(new Error(`Timeout of ${resolvedOptions.timeout} ms exceeded`));\n }, resolvedOptions.timeout);\n\n const dispose = () => {\n clearTimeout(handle);\n done = true;\n sub?.unsubscribe();\n if (abortListener) {\n signal!.removeEventListener('abort', abortListener);\n }\n };\n\n function checkEmitted(emitted: SnapshotFrom<TActorRef>) {\n if (predicate(emitted)) {\n dispose();\n res(emitted);\n }\n }\n\n /**\n * If the `signal` option is provided, this will be the listener for its\n * `abort` event\n */\n let abortListener: () => void | undefined;\n // eslint-disable-next-line prefer-const\n let sub: Subscription | undefined; // avoid TDZ when disposing synchronously\n\n // See if the current snapshot already matches the predicate\n checkEmitted(actorRef.getSnapshot());\n if (done) {\n return;\n }\n\n // only define the `abortListener` if the `signal` option is provided\n if (signal) {\n abortListener = () => {\n dispose();\n // XState does not \"own\" the signal, so we should reject with its reason (if any)\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n rej(signal.reason);\n };\n signal.addEventListener('abort', abortListener);\n }\n\n sub = actorRef.subscribe({\n next: checkEmitted,\n error: (err) => {\n dispose();\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n rej(err);\n },\n complete: () => {\n dispose();\n rej(new Error(`Actor terminated without satisfying predicate`));\n }\n });\n if (done) {\n sub.unsubscribe();\n }\n });\n}\n","import { Clock } from './system.ts';\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging\nexport interface SimulatedClock extends Clock {\n start(speed: number): void;\n increment(ms: number): void;\n set(ms: number): void;\n}\n\ninterface SimulatedTimeout {\n start: number;\n timeout: number;\n fn: (...args: any[]) => void;\n}\n// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging\nexport class SimulatedClock implements SimulatedClock {\n private timeouts: Map<number, SimulatedTimeout> = new Map();\n private _now: number = 0;\n private _id: number = 0;\n private _flushing = false;\n private _flushingInvalidated = false;\n\n public now() {\n return this._now;\n }\n private getId() {\n return this._id++;\n }\n public setTimeout(fn: (...args: any[]) => void, timeout: number) {\n this._flushingInvalidated = this._flushing;\n const id = this.getId();\n this.timeouts.set(id, {\n start: this.now(),\n timeout,\n fn\n });\n return id;\n }\n public clearTimeout(id: number) {\n this._flushingInvalidated = this._flushing;\n this.timeouts.delete(id);\n }\n public set(time: number) {\n if (this._now > time) {\n throw new Error('Unable to travel back in time');\n }\n\n this._now = time;\n this.flushTimeouts();\n }\n private flushTimeouts() {\n if (this._flushing) {\n this._flushingInvalidated = true;\n return;\n }\n this._flushing = true;\n\n const sorted = [...this.timeouts].sort(\n ([_idA, timeoutA], [_idB, timeoutB]) => {\n const endA = timeoutA.start + timeoutA.timeout;\n const endB = timeoutB.start + timeoutB.timeout;\n return endB > endA ? -1 : 1;\n }\n );\n\n for (const [id, timeout] of sorted) {\n if (this._flushingInvalidated) {\n this._flushingInvalidated = false;\n this._flushing = false;\n this.flushTimeouts();\n return;\n }\n if (this.now() - timeout.start >= timeout.timeout) {\n this.timeouts.delete(id);\n timeout.fn.call(null);\n }\n }\n\n this._flushing = false;\n }\n public increment(ms: number): void {\n this._now += ms;\n this.flushTimeouts();\n }\n}\n","import { EventDescriptor, EventObject, ExtractEvent } from './types.ts';\nimport { matchesEventDescriptor, toArray } from './utils.ts';\n\n/**\n * Asserts that the given event object is of the specified type or types. Throws\n * an error if the event object is not of the specified types.\n *\n * @example\n *\n * ```ts\n * // ...\n * entry: ({ event }) => {\n * assertEvent(event, 'doNothing');\n * // event is { type: 'doNothing' }\n * },\n * // ...\n * exit: ({ event }) => {\n * assertEvent(event, 'greet');\n * // event is { type: 'greet'; message: string }\n *\n * assertEvent(event, ['greet', 'notify']);\n * // event is { type: 'greet'; message: string }\n * // or { type: 'notify'; message: string; level: 'info' | 'error' }\n * },\n * ```\n */\nexport function assertEvent<\n TEvent extends EventObject,\n TAssertedDescriptor extends EventDescriptor<TEvent>\n>(\n event: TEvent,\n type: TAssertedDescriptor | readonly TAssertedDescriptor[]\n): asserts event is ExtractEvent<TEvent, TAssertedDescriptor> {\n const types = toArray(type);\n\n const matches = types.some((descriptor) =>\n matchesEventDescriptor(event.type, descriptor as string)\n );\n\n if (!matches) {\n const typesText =\n types.length === 1\n ? `type matching \"${types[0]}\"`\n : `one of types matching \"${types.join('\", \"')}\"`;\n throw new Error(\n `Expected event ${JSON.stringify(event)} to have ${typesText}`\n );\n }\n}\n","import { createInitEvent } from './eventUtils';\nimport { createInertActorScope } from './getNextSnapshot';\nimport {\n getProperAncestors,\n initialMicrostep,\n isAtomicStateNode,\n macrostep\n} from './stateUtils';\nimport {\n AnyActorLogic,\n AnyEventObject,\n AnyStateMachine,\n EventFromLogic,\n InputFrom,\n SnapshotFrom,\n ExecutableActionsFrom,\n AnyTransitionDefinition,\n AnyMachineSnapshot\n} from './types';\n\n/**\n * Given actor `logic`, a `snapshot`, and an `event`, returns a tuple of the\n * `nextSnapshot` and `actions` to execute.\n *\n * This is a pure function that does not execute `actions`.\n */\nexport function transition<T extends AnyActorLogic>(\n logic: T,\n snapshot: SnapshotFrom<T>,\n event: EventFromLogic<T>\n): [nextSnapshot: SnapshotFrom<T>, actions: ExecutableActionsFrom<T>[]] {\n const executableActions = [] as ExecutableActionsFrom<T>[];\n\n const actorScope = createInertActorScope(logic);\n actorScope.actionExecutor = (action) => {\n executableActions.push(action as ExecutableActionsFrom<T>);\n };\n\n const nextSnapshot = logic.transition(snapshot, event, actorScope);\n\n return [nextSnapshot, executableActions];\n}\n\n/**\n * Given actor `logic` and optional `input`, returns a tuple of the\n * `nextSnapshot` and `actions` to execute from the initial transition (no\n * previous state).\n *\n * This is a pure function that does not execute `actions`.\n */\nexport function initialTransition<T extends AnyActorLogic>(\n logic: T,\n ...[input]: undefined extends InputFrom<T>\n ? [input?: InputFrom<T>]\n : [input: InputFrom<T>]\n): [SnapshotFrom<T>, ExecutableActionsFrom<T>[]] {\n const executableActions = [] as ExecutableActionsFrom<T>[];\n\n const actorScope = createInertActorScope(logic);\n actorScope.actionExecutor = (action) => {\n executableActions.push(action as ExecutableActionsFrom<T>);\n };\n\n const nextSnapshot = logic.getInitialSnapshot(\n actorScope,\n input\n ) as SnapshotFrom<T>;\n\n return [nextSnapshot, executableActions];\n}\n\n/**\n * Given a state `machine`, a `snapshot`, and an `event`, returns an array of\n * microsteps, where each microstep is a tuple of `[snapshot, actions]`.\n *\n * This is a pure function that does not execute `actions`.\n */\nexport function getMicrosteps<T extends AnyStateMachine>(\n machine: T,\n snapshot: SnapshotFrom<T>,\n event: EventFromLogic<T>\n): Array<[SnapshotFrom<T>, ExecutableActionsFrom<T>[]]> {\n const actorScope = createInertActorScope(machine);\n\n const { microsteps } = macrostep(snapshot, event, actorScope, []);\n\n return microsteps as Array<[SnapshotFrom<T>, ExecutableActionsFrom<T>[]]>;\n}\n\n/**\n * Given a state `machine` and optional `input`, returns an array of microsteps\n * from the initial transition, where each microstep is a tuple of `[snapshot,\n * actions]`.\n *\n * This is a pure function that does not execute `actions`.\n */\nexport function getInitialMicrosteps<T extends AnyStateMachine>(\n machine: T,\n ...[input]: undefined extends InputFrom<T>\n ? [input?: InputFrom<T>]\n : [input: InputFrom<T>]\n): Array<[SnapshotFrom<T>, ExecutableActionsFrom<T>[]]> {\n const actorScope = createInertActorScope(machine);\n const initEvent = createInitEvent(input);\n const internalQueue: AnyEventObject[] = [];\n\n const preInitialSnapshot = machine._getPreInitialState(\n actorScope,\n initEvent,\n internalQueue\n );\n\n const first = initialMicrostep(\n machine.root,\n preInitialSnapshot,\n actorScope,\n initEvent,\n internalQueue\n );\n\n const { microsteps } = macrostep(\n first[0],\n initEvent,\n actorScope,\n internalQueue\n );\n\n return [first, ...microsteps] as Array<\n [SnapshotFrom<T>, ExecutableActionsFrom<T>[]]\n >;\n}\n\n/**\n * Gets all potential next transitions from the current state.\n *\n * Returns all transitions that are available from the current state, including:\n *\n * - All transitions from atomic states (leaf states in the current state\n * configuration)\n * - All transitions from ancestor states (parent states that may handle events)\n * - All guarded transitions (regardless of whether their guards would pass)\n * - Always (eventless) transitions\n * - After (delayed) transitions\n *\n * The order of transitions is deterministic:\n *\n * 1. Atomic states are processed in document order\n * 2. For each atomic state, transitions are collected from the state itself first,\n * then its ancestors\n * 3. Within each state node, transitions are in the order they appear in the state\n * definition\n *\n * @param state - The current machine snapshot\n * @returns Array of transition definitions from the current state, in\n * deterministic order\n */\nexport function getNextTransitions(\n state: AnyMachineSnapshot\n): AnyTransitionDefinition[] {\n const potentialTransitions: AnyTransitionDefinition[] = [];\n const atomicStates = state._nodes.filter(isAtomicStateNode);\n const visited = new Set();\n\n // Collect all transitions from atomic states and their ancestors\n // Process atomic states in document order (as they appear in state._nodes)\n for (const stateNode of atomicStates) {\n // For each atomic state, process the state itself first, then its ancestors\n // This ensures child state transitions come before parent state transitions\n for (const s of [stateNode].concat(\n getProperAncestors(stateNode, undefined)\n )) {\n if (visited.has(s.id)) {\n continue;\n }\n visited.add(s.id);\n\n // Get all transitions for each event type\n // Include ALL transitions, even if the same event type appears in multiple state nodes\n // This is important for guarded transitions - all are \"potential\" regardless of guard evaluation\n for (const [, transitions] of s.transitions) {\n potentialTransitions.push(...transitions);\n }\n\n // Also include always (eventless) transitions\n if (s.always) {\n potentialTransitions.push(...s.always);\n }\n }\n }\n\n return potentialTransitions;\n}\n","import { isAtomicStateNode } from './stateUtils.ts';\nimport {\n AnyMachineSnapshot,\n AnyStateNode,\n StateSchema,\n StateSchemaFrom\n} from './types.ts';\n\n/**\n * A mapper object that defines how to transform a snapshot based on its state.\n * Can be nested to match the state hierarchy of the machine.\n */\ntype StateSchemaMapper<\n TSnapshot extends AnyMachineSnapshot,\n T extends StateSchema,\n TResult\n> = {\n /** Maps the snapshot to a value when this state is active. */\n map?: (snapshot: TSnapshot) => TResult;\n /** Nested mappers for child states. */\n states?: {\n [K in keyof T['states']]?: T['states'][K] extends StateSchema\n ? StateSchemaMapper<TSnapshot, T['states'][K], TResult>\n : never;\n };\n};\n\n/**\n * Maps a machine snapshot to an array of result objects based on active states.\n *\n * Traverses all active state nodes (from atomic/leaf states up to root) and\n * collects results from matching `map` functions in the mapper object. Results\n * are ordered leaf-to-root (most specific state first).\n */\nexport function mapState<T extends AnyMachineSnapshot, TResult>(\n snapshot: T,\n mapper: StateSchemaMapper<T, StateSchemaFrom<T['machine']>, TResult>\n): { stateNode: AnyStateNode; result: TResult }[] {\n const results: { stateNode: AnyStateNode; result: TResult }[] = [];\n\n const findMapper = (\n currentMapper: StateSchemaMapper<T, StateSchemaFrom<T['machine']>, TResult>,\n nodePath: string[]\n ): StateSchemaMapper<T, any, TResult> | undefined => {\n let mapper: StateSchemaMapper<T, any, TResult> | undefined = currentMapper;\n\n for (const key of nodePath) {\n if (!mapper?.states) {\n return undefined;\n }\n const states = mapper.states as Record<\n string,\n StateSchemaMapper<T, any, TResult>\n >;\n if (!(key in states)) {\n return undefined;\n }\n mapper = states[key];\n }\n\n return mapper;\n };\n\n const visited = new Set<AnyStateNode>();\n\n for (const atomicNode of snapshot._nodes.filter(isAtomicStateNode)) {\n let current: AnyStateNode | undefined = atomicNode;\n while (current && !visited.has(current)) {\n visited.add(current);\n\n const nodeMapper = findMapper(mapper, current.path);\n if (nodeMapper?.map) {\n results.push({ stateNode: current, result: nodeMapper.map(snapshot) });\n }\n\n current = current.parent;\n }\n }\n\n return results;\n}\n","import { StateMachine } from './StateMachine';\nimport { assign } from './actions/assign';\nimport { cancel } from './actions/cancel';\nimport { emit } from './actions/emit';\nimport { enqueueActions } from './actions/enqueueActions';\nimport { log } from './actions/log';\nimport { raise } from './actions/raise';\nimport { sendTo } from './actions/send';\nimport { spawnChild } from './actions/spawnChild';\nimport { stopChild } from './actions/stopChild';\nimport { createMachine } from './createMachine';\nimport { GuardPredicate } from './guards';\n\nimport {\n ActionFunction,\n AnyActorRef,\n AnyEventObject,\n Cast,\n DelayConfig,\n EventObject,\n Invert,\n IsNever,\n MachineConfig,\n MachineContext,\n MetaObject,\n NonReducibleUnknown,\n ParameterizedObject,\n RoutableStateId,\n SetupTypes,\n StateNodeConfig,\n StateSchema,\n ToChildren,\n ToStateValue,\n UnknownActorLogic,\n Values\n} from './types';\n\ntype ToParameterizedObject<\n TParameterizedMap extends Record<\n string,\n ParameterizedObject['params'] | undefined\n >\n> = Values<{\n [K in keyof TParameterizedMap as K & string]: {\n type: K & string;\n params: TParameterizedMap[K];\n };\n}>;\n\n// at the moment we allow extra actors - ones that are not specified by `children`\n// this could be reconsidered in the future\ntype ToProvidedActor<\n TChildrenMap extends Record<string, string>,\n TActors extends Record<string, UnknownActorLogic>\n> = Values<{\n [K in keyof TActors as K & string]: {\n src: K & string;\n logic: TActors[K];\n id: IsNever<TChildrenMap> extends true\n ? string | undefined\n : K extends keyof Invert<TChildrenMap>\n ? Invert<TChildrenMap>[K] & string\n : string | undefined;\n };\n}>;\n\n// used to keep only StateSchema relevant keys\n// this helps with type serialization as it makes the inferred type much shorter when dealing with huge configs\ntype ToStateSchema<TSchema extends StateSchema> = {\n -readonly [K in keyof TSchema as K & ('id' | 'states')]: K extends 'states'\n ? {\n [SK in keyof TSchema['states']]: ToStateSchema<\n NonNullable<TSchema['states'][SK]>\n >;\n }\n : TSchema[K];\n};\n\ntype RequiredSetupKeys<TChildrenMap> =\n IsNever<keyof TChildrenMap> extends true ? never : 'actors';\n\n// Extract { [invokeId]: src } mappings from a machine config's invoke entries.\n// This allows createMachine to infer TChildrenMap from the invoke config\n// when types.children is not explicitly provided.\ntype ExtractInvokeEntry<T> = T extends {\n id: infer TId extends string;\n src: infer TSrc extends string;\n}\n ? { [K in TId]: TSrc }\n : {};\n\ntype ExtractInvokeChildren<T> = T extends readonly (infer E)[]\n ? UnionToIntersection<ExtractInvokeEntry<E>>\n : ExtractInvokeEntry<T>;\n\ntype UnionToIntersection<U> = (U extends any ? (x: U) => void : never) extends (\n x: infer I\n) => void\n ? I\n : never;\n\ntype ExtractConfigChildren<TConfig> = TConfig extends {\n invoke: infer TInvoke;\n}\n ? ExtractInvokeChildren<TInvoke>\n : {};\n\ntype MergeChildrenMap<\n TExplicit extends Record<string, string>,\n TInferred extends Record<string, string>\n> = IsNever<keyof TExplicit> extends true ? TInferred : TExplicit;\n\nexport type SetupReturn<\n TContext extends MachineContext,\n TEvent extends AnyEventObject,\n TActors extends Record<string, UnknownActorLogic>,\n TChildrenMap extends Record<string, string>,\n TActions extends Record<string, ParameterizedObject['params'] | undefined>,\n TGuards extends Record<string, ParameterizedObject['params'] | undefined>,\n TDelay extends string,\n TTag extends string,\n TInput,\n TOutput extends NonReducibleUnknown,\n TEmitted extends EventObject,\n TMeta extends MetaObject\n> = {\n extend: <\n TExtendActions extends Record<\n string,\n ParameterizedObject['params'] | undefined\n > = {},\n TExtendGuards extends Record<\n string,\n ParameterizedObject['params'] | undefined\n > = {},\n TExtendDelays extends string = never\n >({\n actions,\n guards,\n delays\n }: {\n actions?: {\n [K in keyof TExtendActions]: ActionFunction<\n TContext,\n TEvent,\n TEvent,\n TExtendActions[K],\n ToProvidedActor<TChildrenMap, TActors>,\n ToParameterizedObject<TActions & TExtendActions>,\n ToParameterizedObject<TGuards & TExtendGuards>,\n TDelay | TExtendDelays,\n TEmitted\n >;\n };\n guards?: {\n [K in keyof TExtendGuards]: GuardPredicate<\n TContext,\n TEvent,\n TExtendGuards[K],\n ToParameterizedObject<TGuards & TExtendGuards>\n >;\n };\n delays?: {\n [K in TExtendDelays]: DelayConfig<\n TContext,\n TEvent,\n ToParameterizedObject<TActions & TExtendActions>['params'],\n TEvent\n >;\n };\n }) => SetupReturn<\n TContext,\n TEvent,\n TActors,\n TChildrenMap,\n TActions & TExtendActions,\n TGuards & TExtendGuards,\n TDelay | TExtendDelays,\n TTag,\n TInput,\n TOutput,\n TEmitted,\n TMeta\n >;\n /**\n * Creates a state config that is strongly typed. This state config can be\n * used to create a machine.\n *\n * @example\n *\n * ```ts\n * const lightMachineSetup = setup({\n * // ...\n * });\n *\n * const green = lightMachineSetup.createStateConfig({\n * on: {\n * timer: {\n * actions: 'doSomething'\n * }\n * }\n * });\n *\n * const machine = lightMachineSetup.createMachine({\n * initial: 'green',\n * states: {\n * green,\n * yellow,\n * red\n * }\n * });\n * ```\n */\n createStateConfig: <\n TStateConfig extends StateNodeConfig<\n TContext,\n TEvent,\n ToProvidedActor<TChildrenMap, TActors>,\n ToParameterizedObject<TActions>,\n ToParameterizedObject<TGuards>,\n TDelay,\n TTag,\n unknown,\n TEmitted,\n TMeta\n >\n >(\n config: TStateConfig\n ) => TStateConfig;\n /**\n * Creates a type-safe action.\n *\n * @example\n *\n * ```ts\n * const machineSetup = setup({\n * // ...\n * });\n *\n * const action = machineSetup.createAction(({ context, event }) => {\n * console.log(context.count, event.value);\n * });\n *\n * const incrementAction = machineSetup.createAction(\n * assign({ count: ({ context }) => context.count + 1 })\n * );\n *\n * const machine = machineSetup.createMachine({\n * context: { count: 0 },\n * entry: [action, incrementAction]\n * });\n * ```\n */\n createAction: (\n action: ActionFunction<\n TContext,\n TEvent,\n TEvent,\n unknown,\n ToProvidedActor<TChildrenMap, TActors>,\n ToParameterizedObject<TActions>,\n ToParameterizedObject<TGuards>,\n TDelay,\n TEmitted\n >\n ) => typeof action;\n\n createMachine: <\n const TConfig extends MachineConfig<\n TContext,\n TEvent,\n ToProvidedActor<TChildrenMap, TActors>,\n ToParameterizedObject<TActions>,\n ToParameterizedObject<TGuards>,\n TDelay,\n TTag,\n TInput,\n TOutput,\n TEmitted,\n TMeta\n >,\n TResolvedChildren extends Record<string, string> = MergeChildrenMap<\n TChildrenMap,\n Cast<ExtractConfigChildren<TConfig>, Record<string, string>>\n >\n >(\n config: TConfig\n ) => StateMachine<\n TContext,\n | TEvent\n | ([RoutableStateId<TConfig>] extends [never]\n ? never\n : {\n type: 'xstate.route';\n to: RoutableStateId<TConfig>;\n }),\n Cast<\n ToChildren<ToProvidedActor<TResolvedChildren, TActors>>,\n Record<string, AnyActorRef | undefined>\n >,\n ToProvidedActor<TResolvedChildren, TActors>,\n ToParameterizedObject<TActions>,\n ToParameterizedObject<TGuards>,\n TDelay,\n ToStateValue<TConfig>,\n TTag,\n TInput,\n TOutput,\n TEmitted,\n TMeta,\n ToStateSchema<TConfig>\n >;\n\n assign: typeof assign<\n TContext,\n TEvent,\n undefined,\n TEvent,\n ToProvidedActor<TChildrenMap, TActors>\n >;\n sendTo: <TTargetActor extends AnyActorRef>(\n ...args: Parameters<\n typeof sendTo<\n TContext,\n TEvent,\n undefined,\n TTargetActor,\n TEvent,\n TDelay,\n TDelay\n >\n >\n ) => ReturnType<\n typeof sendTo<\n TContext,\n TEvent,\n undefined,\n TTargetActor,\n TEvent,\n TDelay,\n TDelay\n >\n >;\n raise: typeof raise<TContext, TEvent, TEvent, undefined, TDelay, TDelay>;\n log: typeof log<TContext, TEvent, undefined, TEvent>;\n cancel: typeof cancel<TContext, TEvent, undefined, TEvent>;\n stopChild: typeof stopChild<TContext, TEvent, undefined, TEvent>;\n enqueueActions: typeof enqueueActions<\n TContext,\n TEvent,\n undefined,\n TEvent,\n ToProvidedActor<TChildrenMap, TActors>,\n ToParameterizedObject<TActions>,\n ToParameterizedObject<TGuards>,\n TDelay,\n TEmitted\n >;\n emit: typeof emit<TContext, TEvent, undefined, TEvent, TEmitted>;\n spawnChild: typeof spawnChild<\n TContext,\n TEvent,\n undefined,\n TEvent,\n ToProvidedActor<TChildrenMap, TActors>\n >;\n};\n\nexport function setup<\n TContext extends MachineContext,\n TEvent extends AnyEventObject, // TODO: consider using a stricter `EventObject` here\n TActors extends Record<string, UnknownActorLogic> = {},\n TChildrenMap extends Record<string, string> = {},\n TActions extends Record<\n string,\n ParameterizedObject['params'] | undefined\n > = {},\n TGuards extends Record<\n string,\n ParameterizedObject['params'] | undefined\n > = {},\n TDelay extends string = never,\n TTag extends string = string,\n TInput = NonReducibleUnknown,\n TOutput extends NonReducibleUnknown = NonReducibleUnknown,\n TEmitted extends EventObject = EventObject,\n TMeta extends MetaObject = MetaObject\n>({\n schemas,\n actors,\n actions,\n guards,\n delays\n}: {\n schemas?: unknown;\n types?: SetupTypes<\n TContext,\n TEvent,\n TChildrenMap,\n TTag,\n TInput,\n TOutput,\n TEmitted,\n TMeta\n >;\n actors?: {\n // union here enforces that all configured children have to be provided in actors\n // it makes those values required here\n [K in keyof TActors | Values<TChildrenMap>]: K extends keyof TActors\n ? TActors[K]\n : never;\n };\n actions?: {\n [K in keyof TActions]: ActionFunction<\n TContext,\n TEvent,\n TEvent,\n TActions[K],\n ToProvidedActor<TChildrenMap, TActors>,\n ToParameterizedObject<TActions>,\n ToParameterizedObject<TGuards>,\n TDelay,\n TEmitted\n >;\n };\n guards?: {\n [K in keyof TGuards]: GuardPredicate<\n TContext,\n TEvent,\n TGuards[K],\n ToParameterizedObject<TGuards>\n >;\n };\n delays?: {\n [K in TDelay]: DelayConfig<\n TContext,\n TEvent,\n ToParameterizedObject<TActions>['params'],\n TEvent\n >;\n };\n} & {\n [K in RequiredSetupKeys<TChildrenMap>]: unknown;\n}): SetupReturn<\n TContext,\n TEvent,\n TActors,\n TChildrenMap,\n TActions,\n TGuards,\n TDelay,\n TTag,\n TInput,\n TOutput,\n TEmitted,\n TMeta\n> {\n return {\n assign,\n sendTo,\n raise,\n log,\n cancel,\n stopChild,\n enqueueActions,\n emit,\n spawnChild,\n createStateConfig: (config) => config,\n createAction: (fn) => fn,\n createMachine: (config) =>\n (createMachine as any)(\n { ...config, schemas },\n {\n actors,\n actions,\n guards,\n delays\n }\n ),\n extend: (extended) =>\n setup({\n schemas,\n actors,\n actions: { ...actions, ...extended.actions },\n guards: { ...guards, ...extended.guards },\n delays: { ...delays, ...extended.delays }\n } as any)\n };\n}\n","import { AnyActorRef, OutputFrom } from './types.ts';\n\n/**\n * Returns a promise that resolves to the `output` of the actor when it is done.\n *\n * @example\n *\n * ```ts\n * const machine = createMachine({\n * // ...\n * output: {\n * count: 42\n * }\n * });\n *\n * const actor = createActor(machine);\n *\n * actor.start();\n *\n * const output = await toPromise(actor);\n *\n * console.log(output);\n * // logs { count: 42 }\n * ```\n */\nexport function toPromise<T extends AnyActorRef>(\n actor: T\n): Promise<OutputFrom<T>> {\n return new Promise((resolve, reject) => {\n actor.subscribe({\n complete: () => {\n resolve(actor.getSnapshot().output);\n },\n error: reject\n });\n });\n}\n"],"names":["Mailbox","constructor","_process","this","_active","_current","_last","start","flush","clear","next","enqueue","event","enqueued","value","consumed","XSTATE_INIT","XSTATE_STOP","getDevTools","w","globalThis","self","window","__xstate__","devToolsAdapter","service","devTools","register","createDoneStateEvent","id","output","type","createErrorActorEvent","error","actorId","createInitEvent","input","reportUnhandledError","err","setTimeout","symbolObservable","Symbol","observable","matchesState","parentStateId","childStateId","parentStateValue","toStateValue","childStateValue","Object","keys","every","key","toStatePath","stateId","isArray","result","segment","i","length","charCodeAt","push","stateValue","isMachineSnapshot","pathToStateValue","statePath","marker","previous","mapValues","collection","iteratee","collectionKeys","toArrayStrict","toArray","undefined","resolveOutput","mapper","context","Array","toTransitionConfigArray","configLike","map","transitionLike","target","normalizeTarget","toObserver","nextHandler","errorHandler","completionHandler","isObserver","bind","complete","createInvokeId","stateNodeId","index","resolveReferencedActor","machine","src","match","implementations","actors","indexStr","nodeId","invokeConfig","getStateNodeById","config","invoke","matchesEventDescriptor","eventType","descriptor","endsWith","partialEventTokens","split","eventTokens","tokenIndex","partialEventToken","eventToken","createScheduledEventId","actorRef","sessionId","idCounter","executingCustomAction","ProcessingStatus","defaultOptions","clock","fn","ms","clearTimeout","logger","console","log","Actor","logic","options","_snapshot","mailbox","observers","Set","eventListeners","Map","_processingStatus","NotStarted","_parent","_syncSnapshot","ref","_actorScope","systemId","system","_doneEvent","_deferred","resolvedOptions","parent","syncSnapshot","inspect","rootActor","children","keyedActors","reverseKeyedActors","WeakMap","inspectionObservers","timerMap","scheduler","schedule","source","delay","Math","random","toString","slice","scheduledEvent","startedAt","Date","now","scheduledEventId","_scheduledEvents","timeout","_relay","cancel","cancelAll","snapshot","_bookId","_register","set","_unregister","delete","get","getAll","fromEntries","entries","_set","existing","Error","observerOrFn","observer","add","unsubscribe","_sendInspectionEvent","size","resolvedInspectionEvent","rootId","forEach","sourceRef","_send","getSnapshot","scheduledEvents","scheduledId","_clock","_logger","createSystem","defer","stopChild","child","_stop","emit","emittedEvent","listeners","wildcardListener","allListeners","values","handler","actionExecutor","action","exec","params","saveExecutingCustomAction","info","Running","send","_initState","state","status","persistedState","restoreSnapshot","getInitialSnapshot","update","deferredFn","shift","_stopProcedure","_complete","invokeId","_error","subscribe","nextListenerOrObserver","errorListener","completeListener","Stopped","on","wrappedHandler","select","selector","equalityFn","is","previousSelected","nextSelected","initEvent","attachDevTools","nextState","caughtError","transition","stop","_reportError","reportError","err2","toJSON","xstate$$type","getPersistedSnapshot","createActor","interpret","resolveCancel","_","actionArgs","actionParams","sendId","executeCancel","actorScope","_args","_params","resolve","execute","resolveSpawn","_actionParams","resolvedId","resolvedInput","cloneMachineSnapshot","executeSpawn","spawnChild","resolveStop","args","actorRefOrString","resolvedActorRef","unregisterRecursively","executeStop","checkStateIn","isStateId","_nodes","some","sn","matches","checkNot","guards","evaluateGuard","checkAnd","guard","and","check","checkOr","isInline","resolved","guardArgs","guardParams","isAtomicStateNode","stateNode","getChildren","states","filter","getProperAncestors","toStateNode","ancestors","m","getAllStateNodes","stateNodes","nodeSet","adjList","getAdjList","s","has","initialStates","getInitialStateNodesWithTheirAncestors","initialStateNode","getValueFromAdj","baseNode","childStateNodes","childStateNode","getStateValue","rootNode","isInFinalState","stateNodeSet","str","getDelayedTransitions","afterConfig","after","delayedTransitions","flatMap","configTransition","resolvedTransition","resolvedDelay","Number","isNaN","afterEvent","delayRef","entry","raise","exit","mutateEntryExit","delayedTransition","formatTransition","transitionConfig","normalizedTarget","reenter","targets","isInternalTarget","getStateNodeByPath","resolvedTarget","message","resolveTarget","actions","t","resolveHistoryDefaultTransition","initial","isHistoryNode","getInitialStateNodes","initialState","ancestor","iter","descStateNode","getStateNode","stateKey","arrayStatePath","currentStateNode","getStateNodes","childStateKeys","subStateKey","Boolean","root","concat","reduce","allSubStateNodes","subStateNode","subStateNodes","transitionNode","transitionAtomicNode","subStateKeys","transitionCompoundNode","allInnerTransitions","subStateValue","innerTransitions","transitionParallelNode","getHistoryNodes","isDescendant","parentStateNode","hasIntersection","s1","s2","set1","set2","item","removeConflictingTransitions","enabledTransitions","historyValue","filteredTransitions","t1","t1Preempted","transitionsToRemove","t2","computeExitSet","t3","from","getEffectiveTargetStates","targetNode","node","getTransitionDomain","targetStates","lca","head","tail","findLeastCommonAncestor","transitions","statesToExit","domain","initialMicrostep","preInitialState","internalQueue","microstep","currentSnapshot","isInitial","originalExecutor","mutStateNodeSet","nextSnapshot","changedHistory","sort","a","b","order","exitStateNode","historyNode","predicate","history","resolveActionsAndContext","def","exitStates","statesToEnter","statesForDefaultEntry","addDescendantStatesToEnter","addAncestorStatesToEnter","computeEntrySet","completedNodes","stateNodeToEnter","invokeDef","onSnapshot","initialActions","ancestorMarker","rootCompletionNode","getMachineOutput","enterStates","nextStateNodes","prevStateNodes","nextStateNodeSet","areStateNodeCollectionsEqual","e","doneStateEvent","historyStateNodes","addProperAncestorStatesToEnter","historyDefaultTransition","reentrancyDomain","anc","getAction","actionType","resolveAndExecuteActionsWithContext","extra","retries","intermediateSnapshot","resolvedAction","name","builtinAction","deferredActorIds","retryResolve","macrostep","microsteps","addMicrostep","step","_transitions","stopChildren","nextEvent","currentEvent","isErr","startsWith","isErrorActorEvent","selectTransitions","shouldSelectEventlessTransitions","maxIterations","Infinity","iterationCount","selectEventlessTransitions","previousState","getTransitionData","enabledTransitionSet","atomicStates","loop","always","machineSnapshotMatches","testValue","machineSnapshotHasTag","tag","tags","machineSnapshotCan","transitionData","machineSnapshotToJSON","nodes","getMeta","can","hasTag","jsonValues","machineSnapshotGetMeta","acc","meta","createMachineSnapshot","serializeHistoryValue","persistContext","contextPart","copy","createSpawner","spawnedChildren","spawn","resolveAssign","assignment","assignArgs","partialUpdate","propAssignment","assign","resolveEmit","eventOrExpr","executeEmit","resolveRaise","delaysMap","delays","resolvedEvent","configDelay","executeRaise","SpecialTargets","resolveSendTo","to","targetActorRef","Parent","Internal","includes","targetId","retryResolveSendTo","executeSendTo","data","sendTo","sendParent","resolveEnqueueActions","collect","enqueueActions","resolveLog","label","executeLog","fromTransition","initialContext","instanceStates","XSTATE_OBSERVABLE_NEXT","XSTATE_OBSERVABLE_ERROR","XSTATE_OBSERVABLE_COMPLETE","XSTATE_PROMISE_RESOLVE","XSTATE_PROMISE_REJECT","controllerMap","emptyLogic","cache","memo","object","memoizedData","EMPTY_OBJECT","toSerializableAction","StateNode","path","description","_key","_machine","join","idMap","stateConfig","_initialize","transitionsConfig","onDone","onError","formatTransitions","definition","version","flat","sourceName","invokeDefValues","_target","formatInitialTransition","selectedTransition","candidates","receivedEventType","exactMatch","wildcardCandidates","eventDescriptor","getCandidates","candidate","resolvedContext","guardPassed","guardType","events","ownEvents","StateMachine","schemas","__xstatenode","rootStateNode","routeTransitions","collectRoutes","route","routeId","userGuard","routeMatches","formatRouteTransitions","provide","resolveState","resolvedStateValue","_getPreInitialState","preInitial","macroState","fullPath","relativePath","resolvedStateId","STATE_IDENTIFIER","childrenJson","snapshotChildren","resolveHistoryReferencedState","referenced","actorData","childState","revivedHistoryValue","revived","arr","reviveHistoryValue","restoredSnapshot","seen","reviveContext","createMachine","createInertActorScope","actorLogic","defaultWaitForOptions","timeouts","_now","_id","_flushing","_flushingInvalidated","getId","time","flushTimeouts","sorted","_idA","timeoutA","_idB","timeoutB","endA","call","increment","types","typesText","JSON","stringify","callback","callbackState","receivers","dispose","sendBack","receive","listener","receiver","lazyObservable","_subscription","observableCreator","promiseCreator","scope","resolvedValue","abort","controller","AbortController","Promise","signal","then","response","errorData","preInitialSnapshot","first","inertActorScope","potentialTransitions","visited","executableActions","results","findMapper","currentMapper","nodePath","atomicNode","current","nodeMapper","not","or","setup","createStateConfig","createAction","extend","extended","stateIn","actor","reject","res","rej","aborted","reason","done","handle","sub","abortListener","removeEventListener","checkEmitted","emitted","addEventListener"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"xstate.umd.min.js","sources":["../src/Mailbox.ts","../src/constants.ts","../src/eventUtils.ts","../src/reportUnhandledError.ts","../src/symbolObservable.ts","../src/actions.ts","../src/actors/attached.ts","../src/actors/listener.ts","../src/actors/subscription.ts","../src/transitionActions.ts","../src/delay.ts","../src/stateUtils.ts","../src/utils.ts","../src/State.ts","../src/system.ts","../src/actors/logic.ts","../src/createActor.ts","../src/actors/callback.ts","../src/actors/observable.ts","../src/actors/promise.ts","../src/actors/index.ts","../src/spawn.ts","../src/memo.ts","../src/StateNode.ts","../src/StateMachine.ts","../src/createMachine.ts","../src/createMachineFromConfig.ts","../src/serialize.ts","../src/setup.ts","../src/getNextSnapshot.ts","../src/types.ts","../src/waitFor.ts","../src/SimulatedClock.ts","../src/assert.ts","../src/transition.ts","../src/schema.types.ts","../src/mapState.ts","../src/toPromise.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 shouldn't start processing the enqueued item immediately\n if (this._current) {\n this._current.next = null;\n this._last = 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 this._current = consumed.next;\n }\n this._last = null;\n }\n}\n","export const STATE_DELIMITER = '.';\nexport const TARGETLESS_KEY = '';\nexport const NULL_EVENT = '';\nexport const STATE_IDENTIFIER = '#';\nexport const WILDCARD = '*';\nexport const XSTATE_INIT = '@xstate.init';\nexport const XSTATE_STOP = '@xstate.stop';\n","import { XSTATE_INIT } from './constants.ts';\nimport { DoneActorEvent, DoneStateEvent, ErrorActorEvent } from './types.ts';\n\n/**\n * Returns an event that represents an implicit event that is sent after the\n * 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 createAfterEvent(delayRef: number | string, id: string) {\n return { type: `xstate.after.${delayRef}.${id}` } as const;\n}\n\n/**\n * Returns an event that represents an implicit state-level timeout. Fired when\n * a state's `timeout` duration elapses without the state being exited.\n *\n * @param id The state node ID where this timeout is configured\n */\nexport function createTimeoutEvent(id: string) {\n return { type: `xstate.timeout.${id}` } as const;\n}\n\n/**\n * Returns an event that represents an implicit invoke-level timeout. Fired when\n * an invoked actor has not completed within its `timeout` duration.\n *\n * @param invokeId The invoked actor's ID\n */\nexport function createInvokeTimeoutEvent(invokeId: string) {\n return { type: `xstate.timeout.actor.${invokeId}` } as const;\n}\n\n/**\n * Returns an event that represents that a final state node has been reached in\n * 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 createDoneStateEvent(\n id: string,\n output?: unknown\n): DoneStateEvent {\n return {\n type: `xstate.done.state.${id}`,\n output\n };\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\n * node, 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 createDoneActorEvent(\n invokeId: string,\n output?: unknown\n): DoneActorEvent {\n return {\n type: `xstate.done.actor.${invokeId}`,\n output,\n actorId: invokeId\n };\n}\n\nexport function createErrorActorEvent(\n id: string,\n error?: unknown\n): ErrorActorEvent {\n return { type: `xstate.error.actor.${id}`, error, actorId: id };\n}\n\nexport function createInitEvent(input: unknown) {\n return { type: XSTATE_INIT, input } as const;\n}\n","/**\n * This function makes sure that unhandled errors are thrown in a separate\n * macrotask. It allows those errors to be detected by global error handlers and\n * reported to bug tracking services without interrupting our own stack of\n * 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 { AnyActor, AnyActorScope, EventObject } from './types';\n\nexport const builtInActions = {\n ['@xstate.start']: (actor: AnyActor) => {\n actor.start();\n },\n ['@xstate.raise']: (\n actorScope: AnyActorScope,\n event: EventObject,\n options: { id?: string; delay?: number }\n ) => {\n actorScope.system.scheduler.schedule(\n actorScope.self,\n actorScope.self,\n event,\n options?.delay ?? 0,\n options?.id\n );\n },\n ['@xstate.sendTo']: (\n actorScope: AnyActorScope,\n actor: AnyActor,\n event: EventObject,\n options: { id?: string; delay?: number }\n ) => {\n if (typeof event === 'string') {\n throw new Error(\n isDevelopment\n ? // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n `Only event objects may be used with sendTo; use sendTo({ type: \"${event}\" }) instead`\n : `Only event objects may be used with sendTo`\n );\n }\n if (options?.delay !== undefined) {\n actorScope.system.scheduler.schedule(\n actorScope.self,\n actor,\n event,\n options?.delay ?? 0,\n options?.id\n );\n } else {\n actorScope.defer(() => {\n actorScope.system._relay(actorScope.self, actor, event);\n });\n }\n },\n ['@xstate.cancel']: (actorScope: AnyActorScope, sendId: string) => {\n actorScope.system.scheduler.cancel(actorScope.self, sendId);\n },\n ['@xstate.stop']: (actorScope: AnyActorScope, actor: AnyActor) => {\n actorScope.stopChild(actor);\n }\n};\n","import { XSTATE_STOP } from '../constants.ts';\nimport type { AnyActorSystem } from '../system.ts';\nimport type {\n AnyActor,\n EventObject,\n Snapshot,\n Subscription\n} from '../types.ts';\n\nconst subscriptions = /* #__PURE__ */ new WeakMap<AnyActor, Subscription>();\n\n/**\n * Internal factory for actor logic that attaches to another actor on start\n * (`enq.listen()` / `enq.subscribeTo()`) and detaches when stopped.\n */\nexport function createAttachedLogic(\n attach: (\n input: any,\n scope: { self: AnyActor; system: AnyActorSystem }\n ) => Subscription | undefined\n): any {\n const initialTransition = (input: unknown, _: unknown) =>\n [\n {\n status: 'active',\n output: undefined,\n error: undefined,\n input\n },\n []\n ] as const;\n\n return {\n start: (state: any, { self, system }: any) => {\n // Don't attach if the target doesn't exist or is stopped.\n const target = state.input.actor;\n if (!target || target.getSnapshot().status === 'stopped') {\n return;\n }\n const subscription = attach(state.input, { self, system });\n if (!subscription) {\n return;\n }\n\n // Attached actors are not registered as children (their `input` holds\n // non-serializable function mappers), so a parent stop does not cascade\n // to them. Subscribe to the parent and tear down when it stops/errors,\n // so the subscription never relays to a stopped parent or leaks the\n // source subscription.\n let parentSubscription: Subscription | undefined;\n let torndown = false;\n const teardown = () => {\n if (torndown) {\n return;\n }\n torndown = true;\n subscription.unsubscribe();\n parentSubscription?.unsubscribe();\n };\n\n const parent: AnyActor | undefined = self._parent;\n if (parent) {\n parentSubscription = parent.subscribe({\n complete: teardown,\n error: teardown\n });\n }\n\n subscriptions.set(self, { unsubscribe: teardown });\n },\n transition: (state: any, event: EventObject, { self }: any) => {\n if (event.type === XSTATE_STOP) {\n subscriptions.get(self)?.unsubscribe();\n subscriptions.delete(self);\n return [\n {\n ...state,\n status: 'stopped',\n error: undefined\n },\n []\n ];\n }\n return [state, []];\n },\n initialTransition,\n getInitialSnapshot: (actorScope: unknown, input: unknown) =>\n initialTransition(input, actorScope)[0],\n getPersistedSnapshot: (snapshot: Snapshot<unknown>) => snapshot,\n restoreSnapshot: (snapshot: Snapshot<unknown>) => snapshot\n };\n}\n\n/**\n * Relays a mapped event to the attached actor's parent, unless the attached\n * actor has been stopped (the mapper is not called in that case).\n */\nexport function relayMappedToParent(\n self: AnyActor,\n system: AnyActorSystem,\n getEvent: () => EventObject\n): void {\n if (self.getSnapshot().status === 'stopped' || !self._parent) {\n return;\n }\n system._relay(self, self._parent, getEvent());\n}\n","import { AnyActorSystem } from '../system.ts';\nimport { matchesEventDescriptor } from '../utils.ts';\nimport {\n ActorLogic,\n ActorRefFromLogic,\n AnyActor,\n EventObject,\n Snapshot\n} from '../types';\nimport { createAttachedLogic, relayMappedToParent } from './attached.ts';\n\nexport type ListenerSnapshot = Snapshot<undefined> & {\n input: ListenerInput<any, any>;\n};\n\nexport interface ListenerInput<\n TEmitted extends EventObject,\n TMappedEvent extends EventObject\n> {\n actor: AnyActor;\n eventType: string;\n mapper: (event: TEmitted) => TMappedEvent;\n}\n\nexport type ListenerActorLogic<\n TEmitted extends EventObject = EventObject,\n TMappedEvent extends EventObject = EventObject\n> = ActorLogic<\n ListenerSnapshot,\n EventObject,\n ListenerInput<TEmitted, TMappedEvent>,\n AnyActorSystem,\n EventObject\n>;\n\nexport type ListenerActorRef<\n TEmitted extends EventObject = EventObject,\n TMappedEvent extends EventObject = EventObject\n> = ActorRefFromLogic<ListenerActorLogic<TEmitted, TMappedEvent>>;\n\n/**\n * Creates actor logic for listening to emitted events from another actor. Used\n * internally by `enq.listen()`.\n */\nexport function createListenerLogic<\n TEmitted extends EventObject = EventObject,\n TMappedEvent extends EventObject = EventObject\n>(): ListenerActorLogic<TEmitted, TMappedEvent> {\n return createAttachedLogic(\n (\n { actor, eventType, mapper }: ListenerInput<TEmitted, TMappedEvent>,\n { self, system }\n ) => {\n // Determine the subscription type:\n // - For exact matches or '*', subscribe directly\n // - For partial wildcards ('data.*'), subscribe to '*' and filter\n const isPartialWildcard = eventType !== '*' && eventType.endsWith('.*');\n\n return actor.on(isPartialWildcard ? '*' : eventType, (emittedEvent) => {\n if (\n isPartialWildcard &&\n !matchesEventDescriptor(emittedEvent.type, eventType)\n ) {\n return;\n }\n relayMappedToParent(self, system, () =>\n mapper(emittedEvent as TEmitted)\n );\n });\n }\n );\n}\n\n// Singleton logic instance\nexport const listenerLogic = /* #__PURE__ */ createListenerLogic();\n","import { AnyActorSystem } from '../system.ts';\nimport {\n ActorLogic,\n ActorRefFromLogic,\n AnyActorRef,\n EventObject,\n Snapshot\n} from '../types';\nimport { createAttachedLogic, relayMappedToParent } from './attached.ts';\n\nexport type SubscriptionSnapshot = Snapshot<undefined> & {\n input: SubscriptionInput<any, any, any, any>;\n};\n\nexport interface SubscriptionMappers<\n TSnapshot extends Snapshot<unknown>,\n TOutput,\n TMappedEvent extends EventObject\n> {\n snapshot?: (snapshot: TSnapshot) => TMappedEvent;\n done?: (output: TOutput) => TMappedEvent;\n error?: (error: unknown) => TMappedEvent;\n}\n\nexport interface SubscriptionInput<\n TSnapshot extends Snapshot<unknown>,\n TOutput,\n TMappedEvent extends EventObject,\n TMappers extends SubscriptionMappers<TSnapshot, TOutput, TMappedEvent>\n> {\n actor: AnyActorRef;\n mappers: TMappers;\n}\n\nexport type SubscriptionActorLogic<\n TSnapshot extends Snapshot<unknown> = Snapshot<unknown>,\n TOutput = unknown,\n TMappedEvent extends EventObject = EventObject\n> = ActorLogic<\n SubscriptionSnapshot,\n EventObject,\n SubscriptionInput<\n TSnapshot,\n TOutput,\n TMappedEvent,\n SubscriptionMappers<TSnapshot, TOutput, TMappedEvent>\n >,\n AnyActorSystem,\n EventObject\n>;\n\nexport type SubscriptionActorRef<\n TSnapshot extends Snapshot<unknown> = Snapshot<unknown>,\n TOutput = unknown,\n TMappedEvent extends EventObject = EventObject\n> = ActorRefFromLogic<SubscriptionActorLogic<TSnapshot, TOutput, TMappedEvent>>;\n\n/**\n * Creates actor logic for subscribing to lifecycle events (done/error/snapshot)\n * from another actor. Used internally by `enq.subscribeTo()`.\n */\nexport function createSubscriptionLogic<\n TSnapshot extends Snapshot<unknown> = Snapshot<unknown>,\n TOutput = unknown,\n TMappedEvent extends EventObject = EventObject\n>(): SubscriptionActorLogic<TSnapshot, TOutput, TMappedEvent> {\n return createAttachedLogic(({ actor, mappers }, { self, system }) => {\n const { done, error, snapshot: onSnapshot } = mappers;\n\n return actor.subscribe({\n next: (snapshot: TSnapshot) => {\n if (snapshot.status === 'done' && done) {\n relayMappedToParent(self, system, () =>\n done(snapshot.output as TOutput)\n );\n } else if (snapshot.status === 'error' && error) {\n relayMappedToParent(self, system, () => error(snapshot.error));\n } else if (snapshot.status === 'active' && onSnapshot) {\n relayMappedToParent(self, system, () => onSnapshot(snapshot));\n }\n },\n error: (err: unknown) => {\n if (error) {\n relayMappedToParent(self, system, () => error(err));\n }\n },\n complete: () => {\n // Actor completed without output (stopped); no action needed\n }\n });\n });\n}\n\n// Singleton logic instance\nexport const subscriptionLogic = /* #__PURE__ */ createSubscriptionLogic();\n","import isDevelopment from '#is-development';\nimport { builtInActions } from './actions.ts';\nimport { listenerLogic, type ListenerInput } from './actors/listener.ts';\nimport {\n subscriptionLogic,\n type SubscriptionInput,\n type SubscriptionMappers\n} from './actors/subscription.ts';\nimport { createActor } from './createActor.ts';\nimport { cloneMachineSnapshot } from './State.ts';\nimport { getEventOutput } from './utils.ts';\nimport type {\n Action,\n AnyAction,\n AnyActor,\n AnyActorScope,\n AnyEventObject,\n AnyMachineSnapshot,\n EnqueueObject,\n EventObject,\n ExecutableActionObject,\n MachineContext,\n SpecialExecutableAction\n} from './types.ts';\n\nfunction mergeContextPatch(\n context: MachineContext,\n patch: MachineContext\n): MachineContext {\n return { ...context, ...patch };\n}\n\nfunction pushBuiltInAction(actions: any[], action: any, ...args: any[]) {\n actions.push({ action, args } as AnyAction);\n}\n\nfunction registerSpawnedChild(actor: AnyActor, id: string) {\n return Object.assign(\n function registerChild(args: { children: Record<string, AnyActor> }) {\n return { children: { ...args.children, [id]: actor } };\n },\n { _special: true }\n );\n}\n\nfunction unregisterChild(actor: AnyActor) {\n return Object.assign(\n function removeChild(args: {\n children: Record<string, AnyActor | undefined>;\n }) {\n const children = { ...args.children };\n for (const key of Object.keys(children)) {\n if (children[key] === actor) {\n delete children[key];\n }\n }\n return { children };\n },\n { _special: true }\n );\n}\n\nfunction pushStartedChild(\n actions: any[],\n actor: AnyActor,\n id: string | undefined\n) {\n pushBuiltInAction(actions, builtInActions['@xstate.start'], actor);\n actions.push(registerSpawnedChild(actor, id ?? actor.id));\n}\n\nexport function createTransitionEnqueue(\n actorScope: AnyActorScope,\n actions: any[],\n internalEvents: EventObject[],\n actorSubscriptions = false\n) {\n const props: Partial<EnqueueObject<any, any>> = {\n cancel: (id: string) => {\n pushBuiltInAction(\n actions,\n builtInActions['@xstate.cancel'],\n actorScope,\n id\n );\n },\n emit: (emittedEvent) => {\n actions.push(emittedEvent);\n },\n log: (...args) => {\n pushBuiltInAction(actions, actorScope.logger, ...args);\n },\n raise: (raisedEvent, options) => {\n if (typeof raisedEvent === 'string') {\n throw new Error(\n isDevelopment\n ? `Only event objects may be used with raise; use raise({ type: \"${raisedEvent}\" }) instead`\n : `Only event objects may be used with raise`\n );\n }\n if (options?.delay !== undefined) {\n pushBuiltInAction(\n actions,\n builtInActions['@xstate.raise'],\n actorScope,\n raisedEvent,\n options\n );\n } else {\n internalEvents.push(raisedEvent);\n }\n },\n spawn: (logic, options) => {\n const actor = createActor(logic, {\n ...options,\n parent: actorScope.self\n });\n pushStartedChild(actions, actor, options?.id);\n return actor;\n },\n sendTo: (actor, event, options) => {\n if (actor) {\n pushBuiltInAction(\n actions,\n builtInActions['@xstate.sendTo'],\n actorScope,\n actor,\n event,\n options\n );\n }\n },\n stop: (actor) => {\n if (actor) {\n pushBuiltInAction(\n actions,\n builtInActions['@xstate.stop'],\n actorScope,\n actor\n );\n actions.push(unregisterChild(actor));\n }\n }\n };\n\n if (actorSubscriptions) {\n Object.assign(props, {\n listen: (actor: any, eventType: string, mapper: any) => {\n const input: ListenerInput<any, any> = {\n actor,\n eventType,\n mapper\n };\n const listenerActor = createActor(listenerLogic, {\n input,\n parent: actorScope.self\n });\n pushBuiltInAction(\n actions,\n builtInActions['@xstate.start'],\n listenerActor\n );\n return listenerActor;\n },\n subscribeTo: (actor: any, mappers: any) => {\n const normalizedMappers: SubscriptionMappers<any, any, any> =\n typeof mappers === 'function' ? { snapshot: mappers } : mappers;\n\n const input: SubscriptionInput<any, any, any, any> = {\n actor,\n mappers: normalizedMappers\n };\n const subscriptionActor = createActor(subscriptionLogic, {\n input,\n parent: actorScope.self\n });\n pushBuiltInAction(\n actions,\n builtInActions['@xstate.start'],\n subscriptionActor\n );\n return subscriptionActor;\n }\n });\n }\n\n return createEnqueueObject(props, (action, ...args) => {\n pushBuiltInAction(actions, action, ...args);\n });\n}\n\nfunction getBuiltInActionFields(\n action: (...args: any[]) => void,\n args: unknown[]\n): Partial<SpecialExecutableAction> | undefined {\n switch (action) {\n case builtInActions['@xstate.start']: {\n const [actor] = args as Parameters<\n (typeof builtInActions)['@xstate.start']\n >;\n return {\n actor,\n id: actor.id,\n logic: (actor as any).logic,\n src: actor.src,\n input: (actor as any).options?.input\n };\n }\n case builtInActions['@xstate.raise']: {\n const [, event, options] = args as Parameters<\n (typeof builtInActions)['@xstate.raise']\n >;\n return {\n event,\n id: options?.id,\n delay: options?.delay\n };\n }\n case builtInActions['@xstate.sendTo']: {\n const [, target, event, options] = args as Parameters<\n (typeof builtInActions)['@xstate.sendTo']\n >;\n return {\n target,\n event,\n id: options?.id,\n delay: options?.delay\n };\n }\n case builtInActions['@xstate.cancel']: {\n const [, id] = args as Parameters<\n (typeof builtInActions)['@xstate.cancel']\n >;\n return { id };\n }\n case builtInActions['@xstate.stop']: {\n const [, actor] = args as Parameters<\n (typeof builtInActions)['@xstate.stop']\n >;\n return { actor };\n }\n default:\n return undefined;\n }\n}\n\nexport function isBuiltInExecutableAction(\n action: ExecutableActionObject\n): action is SpecialExecutableAction {\n return Object.prototype.hasOwnProperty.call(builtInActions, action.type);\n}\n\nexport function resolveActionsWithContext(\n currentSnapshot: AnyMachineSnapshot,\n event: AnyEventObject,\n actorScope: AnyActorScope,\n actions: AnyAction[]\n): [AnyMachineSnapshot, ExecutableActionObject[]] {\n let intermediateSnapshot = currentSnapshot;\n const executableActions: ExecutableActionObject[] = [];\n\n for (const action of actions) {\n const isInline = typeof action === 'function';\n\n const resolvedAction = isInline\n ? action\n : typeof action === 'object' &&\n 'action' in action &&\n typeof action.action === 'function'\n ? action.action.bind(null, ...action.args)\n : false;\n\n const actionArgs = {\n context: intermediateSnapshot.context,\n event,\n output: getEventOutput(event),\n self: actorScope.self,\n system: actorScope.system,\n children: intermediateSnapshot.children,\n parent: actorScope.self._parent,\n actions: currentSnapshot.machine.implementations.actions,\n actorSources: currentSnapshot.machine.implementations.actorSources\n };\n\n let actionParams = undefined;\n\n if (typeof action === 'object' && action !== null) {\n const { type: _, ...emittedEventParams } = action as any;\n actionParams = emittedEventParams;\n }\n\n if (resolvedAction && '_special' in resolvedAction) {\n executableActions.push({\n type:\n typeof action === 'object'\n ? 'action' in action && typeof action.action === 'function'\n ? (action.action.name ?? '(anonymous)')\n : ((action as any).type ?? '(anonymous)')\n : action.name || '(anonymous)',\n params: actionParams,\n args: [],\n exec: undefined\n });\n\n const specialAction = resolvedAction as unknown as Action<\n any,\n any,\n any,\n any,\n any,\n any,\n any\n >;\n\n const res = specialAction(actionArgs as any, emptyEnqueueObject);\n\n if (res && ('context' in res || 'children' in res)) {\n intermediateSnapshot = cloneMachineSnapshot(intermediateSnapshot, {\n ...(res.context !== undefined\n ? {\n context: mergeContextPatch(\n intermediateSnapshot.context,\n res.context\n )\n }\n : {}),\n ...('children' in res ? { children: res.children } : {})\n });\n }\n continue;\n }\n\n if (!resolvedAction || !('resolve' in resolvedAction)) {\n const builtInFields =\n typeof action === 'object' &&\n action !== null &&\n 'action' in action &&\n typeof action.action === 'function'\n ? getBuiltInActionFields(action.action, action.args)\n : undefined;\n\n executableActions.push({\n type:\n typeof action === 'object'\n ? 'action' in action && typeof action.action === 'function'\n ? (action.action.name ?? '(anonymous)')\n : (action as AnyEventObject).type\n : action.name || '(anonymous)',\n params: actionParams,\n args:\n typeof action === 'object' && 'action' in action ? action.args : [],\n exec:\n resolvedAction ||\n (typeof action === 'object' && action !== null\n ? () => actorScope.defer(() => actorScope.emit(action))\n : undefined),\n ...builtInFields\n });\n continue;\n }\n }\n\n return [intermediateSnapshot, executableActions];\n}\n\nfunction createEnqueueObject(\n props: Partial<EnqueueObject<any, any>>,\n action: <T extends (...args: any[]) => any>(\n fn: T,\n ...args: Parameters<T>\n ) => void\n): EnqueueObject<any, any> {\n const enqueueFn = (\n fn: (...args: any[]) => any,\n ...args: Parameters<typeof fn>\n ) => {\n action(fn, ...args);\n };\n\n Object.assign(enqueueFn, {\n cancel: () => {},\n emit: () => {},\n log: () => {},\n raise: () => {},\n spawn: () => ({}) as any,\n sendTo: () => {},\n stop: () => {},\n listen: () => ({}) as any,\n subscribeTo: () => ({}) as any,\n ...props\n });\n\n return enqueueFn as any;\n}\n\nconst emptyEnqueueObject = createEnqueueObject({}, () => {});\n","export function parseDurationToMilliseconds(\n duration: string\n): number | undefined {\n const normalizedDuration = duration.trim();\n\n const millisecondsMatch = normalizedDuration.match(/^(\\d+)ms$/i);\n if (millisecondsMatch) {\n return parseInt(millisecondsMatch[1], 10);\n }\n\n const secondsMatch = normalizedDuration.match(/^(\\d*)(\\.?)(\\d*)s$/i);\n if (secondsMatch) {\n const wholePart = secondsMatch[1] ? parseInt(secondsMatch[1], 10) : 0;\n const hasDecimal = !!secondsMatch[2];\n const fracPart = secondsMatch[3]\n ? parseInt(secondsMatch[3].padEnd(3, '0').slice(0, 3), 10)\n : 0;\n\n return wholePart * 1000 + (hasDecimal ? fracPart : 0);\n }\n\n const iso8601DurationMatch = normalizedDuration.match(\n /^P(?:(?<weeks>\\d+(?:[.,]\\d+)?)W)?(?:(?<days>\\d+(?:[.,]\\d+)?)D)?(?:T(?:(?<hours>\\d+(?:[.,]\\d+)?)H)?(?:(?<minutes>\\d+(?:[.,]\\d+)?)M)?(?:(?<seconds>\\d+(?:[.,]\\d+)?)S)?)?$/i\n );\n\n if (!iso8601DurationMatch?.groups) {\n return undefined;\n }\n\n const { weeks, days, hours, minutes, seconds } = iso8601DurationMatch.groups;\n if (!weeks && !days && !hours && !minutes && !seconds) {\n return undefined;\n }\n\n const toNumber = (value: string | undefined) =>\n value ? Number(value.replace(',', '.')) : 0;\n\n return (\n toNumber(weeks) * 7 * 24 * 60 * 60 * 1000 +\n toNumber(days) * 24 * 60 * 60 * 1000 +\n toNumber(hours) * 60 * 60 * 1000 +\n toNumber(minutes) * 60 * 1000 +\n toNumber(seconds) * 1000\n );\n}\n\nexport function parseDelayToMilliseconds(\n delay: string | number | undefined\n): number | undefined {\n if (delay === undefined) {\n return undefined;\n }\n\n if (typeof delay === 'number') {\n return delay;\n }\n\n return parseDurationToMilliseconds(delay);\n}\n","import isDevelopment from '#is-development';\nimport { MachineSnapshot, cloneMachineSnapshot } from './State.ts';\nimport type { StateNode } from './StateNode.ts';\nimport {\n createAfterEvent,\n createDoneStateEvent,\n createInvokeTimeoutEvent,\n createTimeoutEvent\n} from './eventUtils.ts';\nimport {\n XSTATE_INIT,\n STATE_DELIMITER,\n STATE_IDENTIFIER,\n XSTATE_STOP\n} from './constants.ts';\nimport { getEventOutput, matchesEventDescriptor } from './utils.ts';\nimport {\n AnyEventObject,\n AnyMachineSnapshot,\n AnyStateNode,\n AnyTransitionDefinition,\n DelayedTransitionDefinition,\n EventObject,\n ExecutableActionObject,\n HistoryValue,\n MachineContext,\n StateValue,\n TransitionDefinition,\n AnyAction,\n AnyTransitionConfig,\n AnyActor,\n AnyActorScope,\n EnqueueObject,\n DoneStateEvent\n} from './types.ts';\nimport {\n resolveOutput,\n normalizeTarget,\n toArray,\n toStatePath,\n isErrorActorEvent,\n resolveReferencedActor,\n toTransitionConfigArray\n} from './utils.ts';\nimport { createActor } from './createActor.ts';\nimport { builtInActions } from './actions.ts';\nimport {\n createTransitionEnqueue,\n resolveActionsWithContext\n} from './transitionActions.ts';\nimport { parseDurationToMilliseconds } from './delay.ts';\n\ntype AnyStateNodeIterable = Iterable<AnyStateNode>;\n\nfunction getConfiguredDelayValue(\n delay: number | string,\n delaySource: Record<string, any>\n) {\n if (typeof delay !== 'string') {\n return delay;\n }\n\n const referencedDelay = delaySource[delay];\n if (referencedDelay !== undefined) {\n return referencedDelay;\n }\n\n return parseDurationToMilliseconds(delay) ?? delay;\n}\n\nfunction resolveDelay(\n delay: number | string | ((args: any) => number),\n delaySource: Record<string, any>,\n args: {\n context: MachineContext;\n event: EventObject;\n stateNode: AnyStateNode;\n }\n) {\n if (typeof delay === 'function') {\n return delay(args);\n }\n\n const configuredDelay = getConfiguredDelayValue(delay, delaySource);\n if (typeof configuredDelay === 'function') {\n return configuredDelay(args);\n }\n\n return configuredDelay;\n}\n\nexport function isAtomicStateNode(stateNode: AnyStateNode) {\n return (\n stateNode.type === 'atomic' ||\n stateNode.type === 'final' ||\n stateNode.type === 'choice'\n );\n}\n\nfunction getChildren(stateNode: AnyStateNode): Array<AnyStateNode> {\n return Object.values(stateNode.states).filter((sn) => sn.type !== 'history');\n}\n\nexport function getProperAncestors(\n stateNode: AnyStateNode,\n toStateNode: AnyStateNode | undefined\n): Array<typeof stateNode> {\n const ancestors: Array<typeof stateNode> = [];\n\n if (toStateNode === stateNode) {\n return ancestors;\n }\n\n // add all ancestors\n let m = stateNode.parent;\n while (m && m !== toStateNode) {\n ancestors.push(m);\n m = m.parent;\n }\n\n return ancestors;\n}\n\nexport function getAllStateNodes(\n stateNodes: Iterable<AnyStateNode>\n): Set<AnyStateNode> {\n const nodeSet = new Set(stateNodes);\n const activeParentSet = new Set<AnyStateNode>();\n for (const stateNode of nodeSet) {\n if (stateNode.parent) {\n activeParentSet.add(stateNode.parent);\n }\n }\n\n // add descendants\n for (const s of nodeSet) {\n // if previously active, add existing child nodes\n if (s.type === 'compound' && !activeParentSet.has(s)) {\n for (const sn of getInitialStateNodes(s)) {\n nodeSet.add(sn);\n }\n continue;\n }\n\n if (s.type === 'parallel') {\n for (const child of getChildren(s)) {\n if (!nodeSet.has(child)) {\n const initialStates = getInitialStateNodes(child);\n for (const initialStateNode of initialStates) {\n nodeSet.add(initialStateNode);\n }\n }\n }\n }\n }\n\n // add all ancestors\n // Stop walking up as soon as we hit a node already in the set: its own\n // ancestor chain is guaranteed to be added when it is visited by this loop\n // (Set iteration visits elements added during iteration), so shared ancestor\n // chains are never re-walked once per descendant.\n for (const s of nodeSet) {\n let m = s.parent;\n\n while (m && !nodeSet.has(m)) {\n nodeSet.add(m);\n m = m.parent;\n }\n }\n\n return nodeSet;\n}\n\nexport function getStateValue(\n rootNode: AnyStateNode,\n stateNodes: AnyStateNodeIterable\n): StateValue {\n const config = getAllStateNodes(stateNodes);\n const adjList = new Map<AnyStateNode, Array<AnyStateNode>>();\n\n for (const s of config) {\n if (!adjList.has(s)) {\n adjList.set(s, []);\n }\n\n if (!s.parent) {\n continue;\n }\n\n if (!adjList.has(s.parent)) {\n adjList.set(s.parent, []);\n }\n\n adjList.get(s.parent)!.push(s);\n }\n\n const getValueFromAdj = (baseNode: AnyStateNode): StateValue => {\n const childStateNodes = adjList.get(baseNode);\n\n if (!childStateNodes) {\n return {}; // todo: fix?\n }\n\n if (baseNode.type === 'compound') {\n const childStateNode = childStateNodes[0];\n if (!childStateNode) {\n return {};\n }\n if (isAtomicStateNode(childStateNode)) {\n return childStateNode.key;\n }\n }\n\n const stateValue: StateValue = {};\n for (const childStateNode of childStateNodes) {\n stateValue[childStateNode.key] = getValueFromAdj(childStateNode);\n }\n\n return stateValue;\n };\n\n return getValueFromAdj(rootNode);\n}\n\nexport function isInFinalState(\n stateNodeSet: Set<AnyStateNode>,\n stateNode: AnyStateNode\n): boolean {\n if (stateNode.type === 'compound') {\n return getChildren(stateNode).some(\n (s) => s.type === 'final' && stateNodeSet.has(s)\n );\n }\n if (stateNode.type === 'parallel') {\n return getChildren(stateNode).every((sn) =>\n isInFinalState(stateNodeSet, sn)\n );\n }\n\n return stateNode.type === 'final';\n}\n\nexport const isStateId = (str: string) => str[0] === STATE_IDENTIFIER;\n\nexport function getCandidates<TEvent extends EventObject>(\n stateNode: StateNode<any, TEvent>,\n receivedEventType: TEvent['type']\n): Array<TransitionDefinition<any, TEvent>> {\n const exactMatch = stateNode.transitions.get(receivedEventType);\n const wildcardCandidates = [...stateNode.transitions.keys()]\n .filter(\n (eventDescriptor) =>\n eventDescriptor !== receivedEventType &&\n matchesEventDescriptor(receivedEventType, eventDescriptor)\n )\n .sort((a, b) => b.length - a.length)\n .flatMap((key) => stateNode.transitions.get(key)!);\n\n return exactMatch\n ? [...exactMatch, ...wildcardCandidates]\n : wildcardCandidates;\n}\n\nfunction scheduleDelayedEvent(\n stateNode: AnyStateNode,\n event: AnyEventObject,\n resolveScheduledDelay: (x: {\n context: MachineContext;\n event: EventObject;\n delays: Record<string, any>;\n }) => any\n) {\n const eventType = event.type;\n const oldEntry = stateNode.entry;\n stateNode.entry = (x: any, enq: any) => {\n enq.raise(event as any, {\n id: eventType,\n delay: resolveScheduledDelay(x)\n });\n return typeof oldEntry === 'function' ? oldEntry(x, enq) : undefined;\n };\n const oldExit = stateNode.exit;\n stateNode.exit = (_: any, enq: any) => {\n enq.cancel(eventType);\n return typeof oldExit === 'function' ? oldExit(_, enq) : undefined;\n };\n\n return eventType;\n}\n\n/** All delayed transitions from the config. */\nexport function getDelayedTransitions(\n stateNode: AnyStateNode\n): Array<DelayedTransitionDefinition<MachineContext, EventObject>> {\n const afterConfig = stateNode.config.after;\n const timeoutConfig = (stateNode.config as any).timeout;\n const onTimeoutConfig = (stateNode.config as any).onTimeout;\n const invokeDefs = stateNode.invoke.filter(\n (invokeDef) => invokeDef.timeout !== undefined\n );\n\n if (!afterConfig && timeoutConfig === undefined && invokeDefs.length === 0) {\n return [];\n }\n\n if (isDevelopment && timeoutConfig !== undefined && !onTimeoutConfig) {\n throw new Error(\n `State \"${stateNode.id}\" has \\`timeout\\` but no \\`onTimeout\\` transition.`\n );\n }\n\n if (isDevelopment) {\n for (const invokeDef of invokeDefs) {\n if (!invokeDef.onTimeout) {\n throw new Error(\n `Invoke on state \"${stateNode.id}\" has \\`timeout\\` but no \\`onTimeout\\` transition.`\n );\n }\n }\n }\n\n // Every delayed transition — `after`, state-level `timeout`/`onTimeout`, and\n // invoke-level `timeout`/`onTimeout` — has the same shape: an event raised on\n // entry (and cancelled on exit) plus a transition that catches it. They\n // differ only in the event raised, the transition(s) caught, and whether the\n // delay resolves against the machine's `delays` map (invoke timeouts do not).\n //\n // `xstate.timeout.<id>` is a dedicated event so a state-level `timeout` cannot\n // collide with an explicit `after` entry on the same state. Invoke timeouts\n // are scheduled on the enclosing state; completion transitions cancel the\n // timer separately, so it clears even when the parent state stays active.\n const sources: Array<{\n event: AnyEventObject;\n delay: any;\n transitions: unknown;\n fromDelaysMap: boolean;\n }> = [];\n\n if (afterConfig) {\n for (const key of Object.keys(afterConfig)) {\n const delay = Number.isNaN(+key) ? key : +key;\n sources.push({\n event: createAfterEvent(delay, stateNode.id),\n delay,\n transitions: afterConfig[key],\n fromDelaysMap: true\n });\n }\n }\n\n if (timeoutConfig !== undefined && onTimeoutConfig) {\n sources.push({\n event: createTimeoutEvent(stateNode.id),\n delay: timeoutConfig,\n transitions: onTimeoutConfig,\n fromDelaysMap: true\n });\n }\n\n for (const invokeDef of invokeDefs) {\n sources.push({\n event: createInvokeTimeoutEvent(invokeDef.id),\n delay: invokeDef.timeout!,\n transitions: invokeDef.onTimeout,\n fromDelaysMap: false\n });\n }\n\n // `delay` here is the raw config value, retained only as metadata on the\n // transition definition — the live delay is resolved at runtime in the\n // scheduled entry action, so no eager resolution is needed.\n const delayedTransitions: Array<\n AnyTransitionConfig & { event: string; delay: any }\n > = [];\n\n for (const { event, delay, transitions, fromDelaysMap } of sources) {\n const eventType = scheduleDelayedEvent(stateNode, event, (x) =>\n resolveDelay(delay, fromDelaysMap ? x.delays : {}, {\n context: x.context,\n event: x.event,\n stateNode\n })\n );\n for (const transition of toTransitionConfigArray(transitions as any)) {\n delayedTransitions.push({ ...transition, event: eventType, delay });\n }\n }\n\n return delayedTransitions.map((delayedTransition) => ({\n ...formatTransition(\n stateNode,\n delayedTransition.event,\n delayedTransition as AnyTransitionConfig\n ),\n delay: delayedTransition.delay\n }));\n}\n\nexport function formatTransition(\n stateNode: AnyStateNode,\n descriptor: string,\n transitionConfig: AnyTransitionConfig\n): AnyTransitionDefinition {\n const normalizedTarget = normalizeTarget(transitionConfig.target);\n const reenter = transitionConfig.reenter ?? false;\n const target = resolveTarget(stateNode, normalizedTarget);\n\n const transition = {\n ...transitionConfig,\n target,\n source: stateNode,\n reenter,\n eventType: descriptor,\n toJSON: () => ({\n ...transition,\n source: `#${stateNode.id}`,\n target: target ? target.map((t) => `#${t.id}`) : undefined\n })\n };\n\n return transition;\n}\n\n/**\n * Collects route transitions from all descendants with explicit IDs. Called\n * once on the root node to avoid O(N²) repeated traversals.\n */\nexport function formatRouteTransitions(rootStateNode: AnyStateNode): void {\n const routeTransitions: AnyTransitionDefinition[] = [];\n const collectRoutes = (states: Record<string, AnyStateNode>) => {\n Object.values(states).forEach((sn) => {\n if (sn.config.route && sn.config.id) {\n const routeId = sn.config.id;\n const routeConfig = sn.config.route;\n const routeMatches = ({ event }: { event: any }) =>\n event.to === `#${routeId}`;\n\n if (typeof routeConfig === 'function') {\n // Transition-style route: the function is the guard and resolver.\n // Returning undefined/false blocks the route; returning true or a\n // config object allows it.\n routeTransitions.push(\n formatTransition(rootStateNode, 'xstate.route', {\n guard: routeMatches,\n to: (args: any) => {\n const result = routeConfig(args);\n if (!result) {\n return undefined;\n }\n return {\n ...(result === true ? {} : result),\n target: `#${routeId}`\n };\n }\n } as AnyTransitionConfig)\n );\n if (sn.states) {\n collectRoutes(sn.states);\n }\n return;\n }\n\n if ('$unserializable' in routeConfig) {\n throw new Error(\n `State \"${sn.id}\" has a route that is not serializable. Re-provide the route function when reviving this machine.`\n );\n }\n\n const { guard: _guard, ...routeOptions } = routeConfig as any;\n const transition: AnyTransitionConfig = {\n ...routeOptions,\n guard: routeMatches,\n target: `#${routeId}`\n };\n\n routeTransitions.push(\n formatTransition(rootStateNode, 'xstate.route', transition)\n );\n }\n if (sn.states) {\n collectRoutes(sn.states);\n }\n });\n };\n collectRoutes(rootStateNode.states);\n if (routeTransitions.length > 0) {\n rootStateNode.transitions.set('xstate.route', routeTransitions as any);\n }\n}\n\nfunction resolveTarget(\n stateNode: AnyStateNode,\n targets: ReadonlyArray<string | AnyStateNode> | undefined\n): ReadonlyArray<AnyStateNode> | undefined {\n if (targets === undefined) {\n // an undefined target signals that the state node should not transition from that state when receiving that event\n return undefined;\n }\n return targets.map((target) => {\n if (typeof target !== 'string') {\n return target;\n }\n if (isStateId(target)) {\n return stateNode.machine.getStateNodeById(target);\n }\n\n const isInternalTarget = target[0] === STATE_DELIMITER;\n // If internal target is defined on machine,\n // do not include machine key on target\n if (isInternalTarget && !stateNode.parent) {\n return getStateNodeByPath(stateNode, target.slice(1));\n }\n const resolvedTarget = isInternalTarget ? stateNode.key + target : target;\n if (stateNode.parent) {\n try {\n const targetStateNode = getStateNodeByPath(\n stateNode.parent,\n resolvedTarget\n );\n return targetStateNode;\n } catch (err: any) {\n throw new Error(\n `Invalid transition definition for state node '${stateNode.id}':\\n${err.message}`\n );\n }\n } else {\n throw new Error(\n isDevelopment\n ? `Invalid target: \"${target}\" is not a valid target from the root node. Did you mean \".${target}\"?`\n : `Invalid target: \"${target}\"`\n );\n }\n });\n}\n\nfunction resolveHistoryDefaultTransition(\n stateNode: AnyStateNode & { type: 'history' }\n): AnyTransitionDefinition {\n const normalizedTarget = normalizeTarget(stateNode.config.target);\n if (!normalizedTarget) {\n return stateNode.parent!.initial as AnyTransitionDefinition;\n }\n return {\n target: normalizedTarget.map((t) =>\n typeof t === 'string' ? getStateNodeByPath(stateNode.parent!, t) : t\n ),\n source: stateNode,\n reenter: false,\n eventType: '' as any\n };\n}\n\nfunction isHistoryNode(\n stateNode: AnyStateNode\n): stateNode is AnyStateNode & { type: 'history' } {\n return stateNode.type === 'history';\n}\n\nfunction getInitialStateNodes(stateNode: AnyStateNode) {\n const set = new Set<AnyStateNode>();\n\n function iter(descStateNode: AnyStateNode): void {\n if (set.has(descStateNode)) {\n return;\n }\n set.add(descStateNode);\n if (descStateNode.type === 'compound') {\n iter(descStateNode.initial.target![0]);\n } else if (descStateNode.type === 'parallel') {\n for (const child of getChildren(descStateNode)) {\n iter(child);\n }\n }\n }\n\n iter(stateNode);\n for (const initialState of set) {\n for (const ancestor of getProperAncestors(initialState, stateNode)) {\n set.add(ancestor);\n }\n }\n\n return set;\n}\n\n/** Returns the child state node from its relative `stateKey`, or throws. */\nfunction getStateNode(stateNode: AnyStateNode, stateKey: string): AnyStateNode {\n if (isStateId(stateKey)) {\n return stateNode.machine.getStateNodeById(stateKey);\n }\n if (!stateNode.states) {\n throw new Error(\n `Unable to retrieve child state '${stateKey}' from '${stateNode.id}'; no child states exist.`\n );\n }\n const result = stateNode.states[stateKey];\n if (!result) {\n throw new Error(\n `Child state '${stateKey}' does not exist on '${stateNode.id}'`\n );\n }\n return result;\n}\n\n/**\n * Returns the relative state node from the given `statePath`, or throws.\n *\n * @param statePath The string or string array relative path to the state node.\n */\nexport function getStateNodeByPath(\n stateNode: AnyStateNode,\n statePath: string | string[]\n): AnyStateNode {\n if (typeof statePath === 'string' && isStateId(statePath)) {\n try {\n return stateNode.machine.getStateNodeById(statePath);\n } catch {\n // try individual paths\n // throw e;\n }\n }\n const arrayStatePath = toStatePath(statePath).slice();\n let currentStateNode: AnyStateNode = stateNode;\n while (arrayStatePath.length) {\n const key = arrayStatePath.shift()!;\n if (!key.length) {\n break;\n }\n currentStateNode = getStateNode(currentStateNode, key);\n }\n return currentStateNode;\n}\n\n/**\n * Returns the state nodes represented by the current state value.\n *\n * @param stateValue The state value or State instance\n */\nexport function getStateNodes(\n stateNode: AnyStateNode,\n stateValue: StateValue\n): Array<AnyStateNode> {\n if (typeof stateValue === 'string') {\n const childStateNode = stateNode.states[stateValue];\n if (!childStateNode) {\n throw new Error(\n `State '${stateValue}' does not exist on '${stateNode.id}'`\n );\n }\n return [stateNode, childStateNode];\n }\n\n const childStateKeys = Object.keys(stateValue);\n const childStateNodes = new Array<AnyStateNode>(childStateKeys.length);\n const allStateNodes: Array<AnyStateNode> = [\n stateNode.machine.root,\n stateNode\n ];\n\n for (let i = 0; i < childStateKeys.length; i++) {\n const subStateNode = getStateNode(stateNode, childStateKeys[i]);\n childStateNodes[i] = subStateNode;\n allStateNodes.push(subStateNode);\n }\n\n for (let i = 0; i < childStateKeys.length; i++) {\n allStateNodes.push(\n ...getStateNodes(childStateNodes[i], stateValue[childStateKeys[i]]!)\n );\n }\n\n return allStateNodes;\n}\n\nexport function transitionNode<\n TContext extends MachineContext,\n TEvent extends EventObject\n>(\n stateNode: AnyStateNode,\n stateValue: StateValue,\n snapshot: MachineSnapshot<\n TContext,\n TEvent,\n any,\n any,\n any,\n any,\n any,\n any // TStateSchema\n >,\n event: TEvent,\n self: AnyActor\n): Array<TransitionDefinition<TContext, TEvent>> | undefined {\n // leaf node\n if (typeof stateValue === 'string') {\n const childStateNode = getStateNode(stateNode, stateValue);\n const next = childStateNode.next(snapshot, event, self);\n\n if (!next || !next.length) {\n return stateNode.next(snapshot, event, self);\n }\n\n return next;\n }\n\n const subStateKeys = Object.keys(stateValue);\n const subStateKey = subStateKeys[0];\n\n if (subStateKeys.length === 1) {\n const childStateNode = getStateNode(stateNode, subStateKey);\n const next = transitionNode(\n childStateNode,\n stateValue[subStateKey]!,\n snapshot,\n event,\n self\n );\n\n if (!next || !next.length) {\n return stateNode.next(snapshot, event, self);\n }\n\n return next;\n }\n\n const allInnerTransitions: Array<TransitionDefinition<TContext, TEvent>> = [];\n\n for (const subStateKey of subStateKeys) {\n const subStateValue = stateValue[subStateKey];\n\n if (!subStateValue) {\n continue;\n }\n\n const subStateNode = getStateNode(stateNode, subStateKey);\n const innerTransitions = transitionNode(\n subStateNode,\n subStateValue,\n snapshot,\n event,\n self\n );\n if (innerTransitions) {\n allInnerTransitions.push(...innerTransitions);\n }\n }\n\n if (!allInnerTransitions.length) {\n return stateNode.next(snapshot, event, self);\n }\n\n return allInnerTransitions;\n}\n\nfunction isDescendant(\n childStateNode: AnyStateNode,\n parentStateNode: AnyStateNode\n): boolean {\n let marker = childStateNode;\n while (marker.parent && marker.parent !== parentStateNode) {\n marker = marker.parent;\n }\n\n return marker.parent === parentStateNode;\n}\n\nfunction hasDescendantState(\n stateNodes: Set<AnyStateNode>,\n parentStateNode: AnyStateNode\n): boolean {\n for (const stateNode of stateNodes) {\n if (isDescendant(stateNode, parentStateNode)) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction hasIntersection<T>(s1: Iterable<T>, s2: Iterable<T>): boolean {\n const s1Size =\n s1 instanceof Set ? s1.size : Array.isArray(s1) ? s1.length : undefined;\n const s2Size =\n s2 instanceof Set ? s2.size : Array.isArray(s2) ? s2.length : undefined;\n\n if (s1Size !== undefined && s2Size !== undefined && s2Size < s1Size) {\n [s1, s2] = [s2, s1];\n }\n\n const set1 = s1 instanceof Set ? s1 : new Set(s1);\n for (const item of s2) {\n if (set1.has(item)) {\n return true;\n }\n }\n return false;\n}\n\nfunction removeConflictingTransitions(\n enabledTransitions: Array<AnyTransitionDefinition>,\n stateNodeSet: Set<AnyStateNode>,\n snapshot: AnyMachineSnapshot,\n event: AnyEventObject,\n actorScope: AnyActorScope\n): Array<AnyTransitionDefinition> {\n const filteredTransitions = new Set<AnyTransitionDefinition>();\n const exitSets = new Map<AnyTransitionDefinition, Array<AnyStateNode>>();\n\n const getExitSet = (transition: AnyTransitionDefinition) => {\n let exitSet = exitSets.get(transition);\n if (!exitSet) {\n exitSet = computeExitSet(\n [transition],\n stateNodeSet,\n snapshot,\n event,\n actorScope\n );\n exitSets.set(transition, exitSet);\n }\n\n return exitSet;\n };\n\n for (const t1 of enabledTransitions) {\n let t1Preempted = false;\n const transitionsToRemove = new Set<AnyTransitionDefinition>();\n for (const t2 of filteredTransitions) {\n if (hasIntersection(getExitSet(t1), getExitSet(t2))) {\n if (isDescendant(t1.source, t2.source)) {\n transitionsToRemove.add(t2);\n } else {\n t1Preempted = true;\n break;\n }\n }\n }\n if (!t1Preempted) {\n for (const t3 of transitionsToRemove) {\n filteredTransitions.delete(t3);\n }\n filteredTransitions.add(t1);\n }\n }\n\n return Array.from(filteredTransitions);\n}\n\nfunction getEffectiveTargetStates(\n transition: Pick<AnyTransitionDefinition, 'target' | 'source'>,\n snapshot: AnyMachineSnapshot,\n event: AnyEventObject,\n actorScope: AnyActorScope\n): Array<AnyStateNode> {\n const historyValue = snapshot.historyValue;\n const { targets } = getTransitionResult(\n transition,\n snapshot,\n event,\n actorScope\n );\n if (!targets) {\n return [];\n }\n\n const targetSet = new Set<AnyStateNode>();\n\n for (const targetNode of targets) {\n if (isHistoryNode(targetNode)) {\n if (historyValue[targetNode.id]) {\n for (const node of historyValue[targetNode.id]) {\n targetSet.add(node);\n }\n } else {\n for (const node of getEffectiveTargetStates(\n resolveHistoryDefaultTransition(targetNode),\n snapshot,\n event,\n actorScope\n )) {\n targetSet.add(node);\n }\n }\n } else {\n targetSet.add(targetNode);\n }\n }\n\n return [...targetSet];\n}\n\nfunction getTransitionDomain(\n transition: AnyTransitionDefinition,\n snapshot: AnyMachineSnapshot,\n event: AnyEventObject,\n actorScope: AnyActorScope\n): AnyStateNode | undefined {\n const targetStates = getEffectiveTargetStates(\n transition,\n snapshot,\n event,\n actorScope\n );\n\n const { reenter } = getTransitionResult(\n transition,\n snapshot,\n event,\n actorScope\n );\n\n if (\n !reenter &&\n targetStates.every(\n (target) =>\n target === transition.source || isDescendant(target, transition.source)\n )\n ) {\n return transition.source;\n }\n\n const [head, ...tail] = targetStates.concat(transition.source);\n // Find the least common ancestor (LCA) of the source and effective targets.\n for (const ancestor of getProperAncestors(head, undefined)) {\n if (tail.every((sn) => isDescendant(sn, ancestor))) {\n return ancestor;\n }\n }\n\n // at this point we know that it's a root transition since LCA couldn't be found\n if (reenter) {\n return;\n }\n\n return transition.source.machine.root;\n}\n\nfunction computeExitSet(\n transitions: Array<AnyTransitionDefinition>,\n stateNodeSet: Set<AnyStateNode>,\n snapshot: AnyMachineSnapshot,\n event: AnyEventObject,\n actorScope: AnyActorScope\n): Array<AnyStateNode> {\n const statesToExit = new Set<AnyStateNode>();\n for (const transition of transitions) {\n const { targets } = getTransitionResult(\n transition,\n snapshot,\n event,\n actorScope\n );\n\n if (targets?.length) {\n const domain = getTransitionDomain(\n transition,\n snapshot,\n event,\n actorScope\n );\n\n if (transition.reenter && transition.source === domain) {\n statesToExit.add(domain);\n }\n\n for (const stateNode of stateNodeSet) {\n if (isDescendant(stateNode, domain!)) {\n statesToExit.add(stateNode);\n }\n }\n }\n }\n\n return [...statesToExit];\n}\n\ntype Microstep = readonly [AnyMachineSnapshot, ExecutableActionObject[]];\n\nexport function initialMicrostep(\n root: AnyStateNode,\n preInitialState: AnyMachineSnapshot,\n actorScope: AnyActorScope,\n initEvent: AnyEventObject,\n internalQueue: AnyEventObject[]\n): Microstep {\n return microstep(\n [\n {\n target: [...getInitialStateNodes(root)],\n source: root,\n reenter: true,\n eventType: null as any,\n toJSON: null as any\n } as AnyTransitionDefinition\n ],\n preInitialState,\n actorScope,\n initEvent,\n true,\n internalQueue\n );\n}\n\nfunction mergeContextPatch(\n context: MachineContext,\n patch: MachineContext\n): MachineContext {\n return { ...context, ...patch };\n}\n\n/** https://www.w3.org/TR/scxml/#microstepProcedure */\nfunction microstep(\n transitions: Array<AnyTransitionDefinition>,\n currentSnapshot: AnyMachineSnapshot,\n actorScope: AnyActorScope,\n event: AnyEventObject,\n isInitial: boolean,\n internalQueue: Array<AnyEventObject>\n): Microstep {\n const executableActions: ExecutableActionObject[] = [];\n\n if (!transitions.length) {\n return [currentSnapshot, executableActions];\n }\n\n {\n const mutStateNodeSet = new Set(currentSnapshot._nodes as StateNode[]);\n let historyValue = currentSnapshot.historyValue;\n const originalContext = currentSnapshot.context;\n\n const filteredTransitions = removeConflictingTransitions(\n transitions,\n mutStateNodeSet,\n currentSnapshot,\n event,\n actorScope\n );\n const getCurrentTransitionResult = (\n transition: Parameters<typeof getTransitionResult>[0]\n ) => getTransitionResult(transition, currentSnapshot, event, actorScope);\n const getStateActionsAndContext = (\n transitionFn: any,\n context: MachineContext,\n children: AnyMachineSnapshot['children'],\n input: Record<string, unknown> | undefined\n ): [\n actions: any[],\n context: MachineContext | undefined,\n internalEvents: EventObject[] | undefined\n ] => {\n if (transitionFn.length === 2) {\n // enqueue action; retrieve\n const actions: any[] = [];\n const internalEvents: EventObject[] = [];\n let updatedContext: MachineContext | undefined;\n\n const enqueue = createTransitionEnqueue(\n actorScope,\n actions,\n internalEvents,\n true\n );\n\n const res = transitionFn(\n {\n context,\n event,\n parent: actorScope.self._parent,\n self: actorScope.self,\n children,\n system: actorScope.system,\n actions: currentSnapshot.machine.implementations.actions,\n actorSources: currentSnapshot.machine.implementations.actorSources,\n guards: currentSnapshot.machine.implementations.guards,\n delays: currentSnapshot.machine.implementations.delays,\n input\n },\n enqueue\n );\n\n if (res?.context !== undefined) {\n updatedContext = mergeContextPatch(context, res.context);\n }\n\n return [actions, updatedContext, internalEvents];\n }\n\n // For 1-argument actions, wrap them to include input\n // Preserve _special flag if present (for entry/exit actions)\n const wrappedAction = Object.assign(\n (args: any, enqueue: any) => transitionFn({ ...args, input }, enqueue),\n '_special' in transitionFn ? { _special: true } : {}\n );\n return [[wrappedAction], undefined, undefined];\n };\n\n let nextState = currentSnapshot;\n const exitStates = () => {\n const statesToExit = computeExitSet(\n filteredTransitions,\n mutStateNodeSet,\n currentSnapshot,\n event,\n actorScope\n );\n\n statesToExit.sort((a, b) => b.order - a.order);\n\n let changedHistory: HistoryValue | undefined;\n const currentStateNodes = [...mutStateNodeSet];\n\n // From SCXML algorithm: https://www.w3.org/TR/scxml/#exitStates\n for (const exitStateNode of statesToExit) {\n for (const historyNode of Object.values(exitStateNode.states)) {\n if (historyNode.type !== 'history') {\n continue;\n }\n\n const predicate =\n historyNode.history === 'deep'\n ? (sn: AnyStateNode) =>\n isAtomicStateNode(sn) && isDescendant(sn, exitStateNode)\n : (sn: AnyStateNode) => sn.parent === exitStateNode;\n\n changedHistory ??= { ...historyValue };\n changedHistory[historyNode.id] = currentStateNodes.filter(predicate);\n }\n }\n\n for (const exitStateNode of statesToExit) {\n const stateInput = currentSnapshot._stateInputs?.[exitStateNode.id];\n\n const [exitActions, nextContext, internalEvents] = exitStateNode.exit\n ? getStateActionsAndContext(\n exitStateNode.exit,\n nextState.context,\n currentSnapshot.children,\n stateInput\n )\n : [[]];\n if (internalEvents?.length) {\n internalQueue.push(...internalEvents);\n }\n if (nextContext) {\n nextState = cloneMachineSnapshot(nextState, {\n context: nextContext\n });\n }\n const [resolvedState, resolvedActions] = resolveActionsWithContext(\n nextState,\n event,\n actorScope,\n exitActions\n );\n nextState = resolvedState;\n executableActions.push(...resolvedActions);\n for (const def of exitStateNode.invoke) {\n const childActor = nextState.children[def.id];\n if (childActor && !childActor._isExternal) {\n actorScope.stopChild(childActor);\n }\n delete nextState.children[def.id];\n }\n\n mutStateNodeSet.delete(exitStateNode);\n }\n\n historyValue = changedHistory || historyValue;\n };\n\n // Exit states\n if (!isInitial) {\n exitStates();\n }\n\n let context = nextState.context;\n const transitionActions: AnyAction[] = [];\n const internalEvents: EventObject[] = [];\n\n for (const t of filteredTransitions) {\n if (t.actions) {\n transitionActions.push(...toArray(t.actions));\n }\n const res = getCurrentTransitionResult(t);\n if (res.context !== undefined) {\n context = mergeContextPatch(context, res.context);\n }\n if (res.actions) {\n transitionActions.push(...res.actions);\n }\n if (res.internalEvents) {\n internalEvents.push(...res.internalEvents);\n }\n }\n\n if (internalEvents.length) {\n internalQueue.push(...internalEvents);\n }\n\n const enterStates = () => {\n const getMachineOutput = (rootCompletionNode: AnyStateNode) => {\n const rootNode = nextState.machine.root;\n if (rootNode.output === undefined) {\n return;\n }\n\n let completionOutput: unknown;\n if (\n rootCompletionNode.output !== undefined &&\n rootCompletionNode.parent\n ) {\n completionOutput = resolveOutput(\n rootCompletionNode.output,\n nextState.context,\n event,\n actorScope.self\n );\n } else if (rootCompletionNode.type === 'parallel') {\n const parallelDoneType = `xstate.done.state.${rootCompletionNode.id}`;\n const parallelDoneEvent = internalQueue.find(\n (e) => e.type === parallelDoneType\n ) as DoneStateEvent | undefined;\n completionOutput = parallelDoneEvent?.output;\n }\n\n return resolveOutput(\n rootNode.output,\n nextState.context,\n createDoneStateEvent(rootCompletionNode.id, completionOutput),\n actorScope.self\n );\n };\n\n const statesToEnter = new Set<AnyStateNode>();\n // those are states that were directly targeted or indirectly targeted by the explicit target\n // in other words, those are states for which initial actions should be executed\n // when we target `#deep_child` initial actions of its ancestors shouldn't be executed\n const statesForDefaultEntry = new Set<AnyStateNode>();\n const addAncestorStatesToEnter = (\n ancestors: AnyStateNode[],\n reentrancyDomain: AnyStateNode | undefined\n ) => {\n for (const anc of ancestors) {\n if (!reentrancyDomain || isDescendant(anc, reentrancyDomain)) {\n statesToEnter.add(anc);\n }\n if (anc.type === 'parallel') {\n for (const child of getChildren(anc)) {\n if (!hasDescendantState(statesToEnter, child)) {\n statesToEnter.add(child);\n addDescendantStatesToEnter(child);\n }\n }\n }\n }\n };\n\n const addDescendantStatesToEnter = (stateNode: AnyStateNode) => {\n if (isHistoryNode(stateNode)) {\n if (historyValue[stateNode.id]) {\n const historyStateNodes = historyValue[stateNode.id];\n for (const s of historyStateNodes) {\n statesToEnter.add(s);\n addDescendantStatesToEnter(s);\n }\n for (const s of historyStateNodes) {\n addAncestorStatesToEnter(\n getProperAncestors(s, stateNode.parent),\n undefined\n );\n }\n } else {\n const historyDefaultTransition =\n resolveHistoryDefaultTransition(stateNode);\n const { targets } = getCurrentTransitionResult(\n historyDefaultTransition\n );\n for (const s of targets ?? []) {\n statesToEnter.add(s);\n\n if (historyDefaultTransition === stateNode.parent?.initial) {\n statesForDefaultEntry.add(stateNode.parent);\n }\n\n addDescendantStatesToEnter(s);\n }\n\n for (const s of targets ?? []) {\n addAncestorStatesToEnter(\n getProperAncestors(s, stateNode.parent),\n undefined\n );\n }\n }\n return;\n }\n\n if (stateNode.type === 'compound') {\n const [initialState] = getCurrentTransitionResult(\n stateNode.initial\n ).targets!;\n\n if (!isHistoryNode(initialState)) {\n statesToEnter.add(initialState);\n statesForDefaultEntry.add(initialState);\n }\n addDescendantStatesToEnter(initialState);\n addAncestorStatesToEnter(\n getProperAncestors(initialState, stateNode),\n undefined\n );\n return;\n }\n\n if (stateNode.type === 'parallel') {\n for (const child of getChildren(stateNode)) {\n if (!hasDescendantState(statesToEnter, child)) {\n statesToEnter.add(child);\n statesForDefaultEntry.add(child);\n addDescendantStatesToEnter(child);\n }\n }\n }\n };\n\n for (const transition of filteredTransitions) {\n const domain = getTransitionDomain(\n transition,\n currentSnapshot,\n event,\n actorScope\n );\n\n const { targets, reenter } = getCurrentTransitionResult(transition);\n\n for (const targetNode of targets ?? []) {\n if (\n !isHistoryNode(targetNode) &&\n (transition.source !== targetNode ||\n transition.source !== domain ||\n reenter)\n ) {\n statesToEnter.add(targetNode);\n statesForDefaultEntry.add(targetNode);\n }\n addDescendantStatesToEnter(targetNode);\n }\n const targetStates = getEffectiveTargetStates(\n transition,\n currentSnapshot,\n event,\n actorScope\n );\n for (const s of targetStates) {\n const ancestors = getProperAncestors(s, domain);\n if (domain?.type === 'parallel') {\n ancestors.push(domain);\n }\n addAncestorStatesToEnter(\n ancestors,\n !transition.source.parent && reenter ? undefined : domain\n );\n }\n }\n\n if (isInitial) {\n statesForDefaultEntry.add(currentSnapshot.machine.root);\n }\n\n const stateInputMap: Record<string, Record<string, unknown>> = {\n ...currentSnapshot._stateInputs\n };\n for (const transition of filteredTransitions) {\n const { targets, input } = getCurrentTransitionResult(transition);\n if (input && targets) {\n for (const targetNode of targets) {\n stateInputMap[targetNode.id] = input;\n }\n }\n }\n\n const completedNodes = new Set<AnyStateNode>();\n const children = { ...currentSnapshot.children };\n for (const stateNodeToEnter of [...statesToEnter].sort(\n (a, b) => a.order - b.order\n )) {\n mutStateNodeSet.add(stateNodeToEnter);\n const actions: AnyAction[] = [];\n\n let invoked = false;\n for (const invokeDef of stateNodeToEnter.invoke) {\n invoked = true;\n\n let src = invokeDef.logic;\n if (typeof src === 'function') {\n src = src({\n actorSources:\n currentSnapshot.machine.implementations.actorSources,\n context: nextState.context,\n event,\n self: actorScope.self\n });\n }\n\n const logic =\n typeof src === 'string'\n ? resolveReferencedActor(currentSnapshot.machine, src)\n : src;\n\n if (!logic) {\n throw new Error(\n `Actor logic '${typeof src === 'string' ? src : 'inline'}' not implemented in machine '${currentSnapshot.machine.id}'`\n );\n }\n\n const input =\n typeof invokeDef.input === 'function'\n ? invokeDef.input({\n self: actorScope.self,\n context: nextState.context,\n event,\n output: getEventOutput(event)\n })\n : invokeDef.input;\n\n const actor = createActor(logic, {\n ...invokeDef,\n input,\n parent: actorScope.self,\n syncSnapshot: !!invokeDef.onSnapshot\n });\n\n actions.push({\n action: builtInActions['@xstate.start'],\n args: [actor]\n });\n\n if (invokeDef.id) {\n children[invokeDef.id] = actor;\n }\n }\n\n if (invoked) {\n nextState = cloneMachineSnapshot(nextState, { children });\n }\n let context = nextState.context;\n let contextChangedByEntry = false;\n\n const stateInput = stateInputMap[stateNodeToEnter.id];\n\n if (stateNodeToEnter.entry) {\n const [resultActions, nextContext, nextInternalEvents] =\n getStateActionsAndContext(\n stateNodeToEnter.entry,\n context,\n children,\n stateInput\n );\n actions.push(...resultActions);\n if (nextInternalEvents?.length) {\n internalQueue.push(...nextInternalEvents);\n }\n if (nextContext) {\n context = nextContext;\n contextChangedByEntry = true;\n }\n }\n\n if (contextChangedByEntry) {\n nextState.context = context;\n }\n\n if (statesForDefaultEntry.has(stateNodeToEnter)) {\n const { actions: initialActions, input: initialInput } =\n getTransitionResult(\n stateNodeToEnter.initial,\n nextState,\n event,\n actorScope\n );\n if (initialActions) {\n actions.push(...initialActions);\n }\n if (initialInput && stateNodeToEnter.initial?.target) {\n for (const targetNode of stateNodeToEnter.initial.target) {\n stateInputMap[targetNode.id] = initialInput;\n }\n }\n }\n\n const [resolvedState, resolvedActions] = resolveActionsWithContext(\n nextState,\n event,\n actorScope,\n actions\n );\n nextState = resolvedState;\n actions.length = 0;\n executableActions.push(...resolvedActions);\n\n if (stateNodeToEnter.type !== 'final') {\n continue;\n }\n\n const parent = stateNodeToEnter.parent;\n let ancestorMarker =\n parent?.type === 'parallel' ? parent : parent?.parent;\n let rootCompletionNode = ancestorMarker || stateNodeToEnter;\n\n if (parent?.type === 'compound') {\n internalQueue.push(\n createDoneStateEvent(\n parent.id,\n stateNodeToEnter.output !== undefined\n ? resolveOutput(\n stateNodeToEnter.output,\n nextState.context,\n event,\n actorScope.self\n )\n : undefined\n )\n );\n }\n\n while (\n ancestorMarker?.type === 'parallel' &&\n !completedNodes.has(ancestorMarker) &&\n isInFinalState(mutStateNodeSet, ancestorMarker)\n ) {\n completedNodes.add(ancestorMarker);\n const regionOutput: Record<string, unknown> = {};\n for (const region of getChildren(ancestorMarker)) {\n if (region.type === 'final') {\n regionOutput[region.key] =\n region.output !== undefined\n ? resolveOutput(\n region.output,\n nextState.context,\n event,\n actorScope.self\n )\n : undefined;\n continue;\n }\n\n if (region.type === 'parallel') {\n const regionDoneType = `xstate.done.state.${region.id}`;\n const regionDoneEvent = internalQueue.find(\n (e) => e.type === regionDoneType\n ) as DoneStateEvent | undefined;\n regionOutput[region.key] = regionDoneEvent?.output;\n continue;\n }\n\n const finalChild = getChildren(region).find(\n (s) => s.type === 'final' && mutStateNodeSet.has(s)\n );\n regionOutput[region.key] =\n finalChild?.output !== undefined\n ? resolveOutput(\n finalChild.output,\n nextState.context,\n event,\n actorScope.self\n )\n : undefined;\n }\n internalQueue.push(\n createDoneStateEvent(ancestorMarker.id, regionOutput)\n );\n rootCompletionNode = ancestorMarker;\n ancestorMarker = ancestorMarker.parent;\n }\n if (ancestorMarker) {\n continue;\n }\n\n nextState = cloneMachineSnapshot(nextState, {\n status: 'done',\n output: getMachineOutput(rootCompletionNode)\n });\n }\n\n const inputChanged =\n JSON.stringify(stateInputMap) !==\n JSON.stringify(currentSnapshot._stateInputs || {});\n if (inputChanged) {\n nextState = cloneMachineSnapshot(nextState, {\n _stateInputs: stateInputMap\n });\n }\n };\n\n // Execute transition content\n const [resolvedTransitionState, transitionExecutableActions] =\n resolveActionsWithContext(\n nextState,\n event,\n actorScope,\n transitionActions\n );\n nextState = resolvedTransitionState;\n executableActions.push(...transitionExecutableActions);\n if (context && context !== currentSnapshot.context) {\n nextState = cloneMachineSnapshot(nextState, { context });\n }\n\n // Enter states\n enterStates();\n\n const nextStateNodes = [...mutStateNodeSet];\n\n if (nextState.status === 'done') {\n const allExitActions: AnyAction[] = [];\n const nextStateNodesToExit = nextStateNodes.sort(\n (a, b) => b.order - a.order\n );\n\n nextStateNodesToExit.forEach((stateNode) => {\n if (stateNode.exit) {\n const stateInput = nextState._stateInputs?.[stateNode.id];\n const [exitActions, , nextInternalEvents] = getStateActionsAndContext(\n stateNode.exit,\n nextState.context,\n nextState.children,\n stateInput\n );\n allExitActions.push(...exitActions);\n if (nextInternalEvents?.length) {\n internalQueue.push(...nextInternalEvents);\n }\n }\n });\n const [resolvedState, resolvedActions] = resolveActionsWithContext(\n nextState,\n event,\n actorScope,\n allExitActions\n );\n nextState = resolvedState;\n executableActions.push(...resolvedActions);\n }\n\n if (\n historyValue === currentSnapshot.historyValue &&\n currentSnapshot._nodes.length === mutStateNodeSet.size &&\n currentSnapshot._nodes.every((node) =>\n mutStateNodeSet.has(node as StateNode)\n )\n ) {\n // If context was changed (e.g. by entry actions during self-transition),\n // clone to ensure reference inequality for eventless transition re-evaluation\n if (nextState.context !== originalContext) {\n return [cloneMachineSnapshot(nextState), executableActions];\n }\n return [nextState, executableActions];\n }\n\n return [\n cloneMachineSnapshot(nextState, {\n _nodes: nextStateNodes,\n historyValue\n }),\n executableActions\n ];\n }\n}\n\n/**\n * Gets the transition result for a given transition without executing the\n * transition.\n */\nexport function getTransitionResult(\n transition: Pick<AnyTransitionDefinition, 'target' | 'to' | 'source'> & {\n reenter?: AnyTransitionDefinition['reenter'];\n input?: AnyTransitionDefinition['input'];\n context?: AnyTransitionDefinition['context'];\n },\n snapshot: AnyMachineSnapshot,\n event: AnyEventObject,\n actorScope: AnyActorScope\n): {\n targets: Readonly<AnyStateNode[]> | undefined;\n context: MachineContext | undefined;\n actions: AnyAction[] | undefined;\n reenter?: boolean;\n internalEvents: EventObject[] | undefined;\n input: Record<string, unknown> | undefined;\n} {\n if (transition.to) {\n const actions: AnyAction[] = [];\n const internalEvents: EventObject[] = [];\n const enqueue = createTransitionEnqueue(\n actorScope,\n actions,\n internalEvents\n );\n\n const res = transition.to(\n {\n context: snapshot.context,\n event,\n output: getEventOutput(event),\n value: snapshot.value,\n children: snapshot.children,\n system: actorScope.system,\n parent: actorScope.self._parent,\n self: actorScope.self,\n actions: snapshot.machine.implementations.actions,\n actorSources: snapshot.machine.implementations.actorSources,\n guards: snapshot.machine.implementations.guards,\n delays: snapshot.machine.implementations.delays\n },\n enqueue\n );\n\n const targets = res?.target\n ? resolveTarget(transition.source, toArray(res.target) as string[])\n : undefined;\n // Resolve input for .to transitions\n const resolvedInput =\n typeof transition.input === 'function'\n ? transition.input({\n context: snapshot.context,\n event,\n output: getEventOutput(event)\n })\n : transition.input;\n\n return {\n targets: targets,\n context: res?.context,\n reenter: res?.reenter,\n actions,\n internalEvents,\n input: resolvedInput\n };\n }\n\n // Resolve input for regular transitions\n const resolvedInput =\n typeof transition.input === 'function'\n ? transition.input({\n context: snapshot.context,\n event,\n output: getEventOutput(event)\n })\n : transition.input;\n\n return {\n targets: transition.target as AnyStateNode[] | undefined,\n context: transition.context,\n reenter: transition.reenter,\n actions: undefined,\n internalEvents: undefined,\n input: resolvedInput\n };\n}\n\nexport function macrostep(\n snapshot: AnyMachineSnapshot,\n event: EventObject,\n actorScope: AnyActorScope,\n internalQueue: AnyEventObject[]\n): {\n snapshot: typeof snapshot;\n microsteps: Microstep[];\n} {\n let nextSnapshot = snapshot;\n const microsteps: Microstep[] = [];\n\n function addMicrostep(\n step: Microstep,\n transitions: AnyTransitionDefinition[]\n ) {\n // collect microsteps; surfaced on the enclosing '@xstate.transition' event\n // via its `microsteps[]` facet (there is no standalone microstep event)\n const collectedMicrosteps =\n ((actorScope.self as any)._collectedMicrosteps as any[]) || [];\n collectedMicrosteps.push(...transitions);\n (actorScope.self as any)._collectedMicrosteps = collectedMicrosteps;\n microsteps.push(step);\n }\n\n // Handle stop event\n if (event.type === XSTATE_STOP) {\n nextSnapshot = cloneMachineSnapshot(\n stopChildren(nextSnapshot, actorScope),\n {\n status: 'stopped'\n }\n );\n addMicrostep([nextSnapshot, []], []);\n return {\n snapshot: nextSnapshot,\n microsteps\n };\n }\n\n let nextEvent = event;\n\n // Assume the state is at rest (no raised events)\n // Determine the next state based on the next microstep\n if (nextEvent.type !== XSTATE_INIT) {\n const currentEvent = nextEvent;\n const isErr = isErrorActorEvent(currentEvent);\n\n const transitions = nextSnapshot.machine.getTransitionData(\n nextSnapshot as any,\n currentEvent,\n actorScope.self\n );\n\n if (isErr && !transitions.length) {\n // TODO: we should likely only allow transitions selected by very explicit descriptors\n // `*` shouldn't be matched, likely `xstate.error.*` shouldn't be either\n // similarly `xstate.error.actor.*` and `xstate.error.actor.todo.*` have to be considered too\n nextSnapshot = cloneMachineSnapshot<typeof snapshot>(snapshot, {\n status: 'error',\n error: currentEvent.error\n });\n addMicrostep([nextSnapshot, []], []);\n return {\n snapshot: nextSnapshot,\n microsteps\n };\n }\n const step = microstep(\n transitions,\n snapshot,\n actorScope,\n nextEvent,\n false, // isInitial\n internalQueue\n );\n nextSnapshot = step[0];\n addMicrostep(step, transitions);\n }\n\n let shouldSelectEventlessTransitions = true;\n const maxIterations = snapshot.machine.options?.maxIterations ?? Infinity;\n let iterationCount = 0;\n\n let microstepCount = 0;\n while (nextSnapshot.status === 'active') {\n microstepCount++;\n if (microstepCount > 1000) {\n throw new Error('Microstep count exceeded 1000');\n }\n iterationCount++;\n if (iterationCount > maxIterations) {\n throw new Error(\n isDevelopment\n ? `Infinite loop detected: the machine has processed more than ${maxIterations} microsteps without reaching a stable state. This usually happens when there's a cycle of transitions (e.g., eventless transitions or raised events causing state A -> B -> C -> A).`\n : `Infinite loop detected (>${maxIterations} microsteps)`\n );\n }\n\n let enabledTransitions: AnyTransitionDefinition[] =\n shouldSelectEventlessTransitions\n ? selectEventlessTransitions(nextSnapshot, nextEvent, actorScope)\n : [];\n\n // eventless transitions should always be selected after selecting *regular* transitions\n // by assigning `undefined` to `previousState` we ensure that `shouldSelectEventlessTransitions` gets always computed to true in such a case\n const previousState = enabledTransitions.length ? nextSnapshot : undefined;\n\n if (!enabledTransitions.length) {\n if (!internalQueue.length) {\n break;\n }\n nextEvent = internalQueue.shift()!;\n enabledTransitions = nextSnapshot.machine.getTransitionData(\n nextSnapshot as any,\n nextEvent,\n actorScope.self\n );\n }\n\n const step = microstep(\n enabledTransitions,\n nextSnapshot,\n actorScope,\n nextEvent,\n false,\n internalQueue\n );\n nextSnapshot = step[0];\n shouldSelectEventlessTransitions = nextSnapshot !== previousState;\n addMicrostep(step, enabledTransitions);\n }\n\n if (nextSnapshot.status !== 'active' && nextSnapshot.children) {\n stopChildren(nextSnapshot, actorScope);\n }\n\n return {\n snapshot: nextSnapshot,\n microsteps\n };\n}\n\n/**\n * Resolves a partial state value with its full representation in the state\n * node's machine.\n *\n * @param stateValue The partial state value to resolve.\n */\nexport function resolveStateValue(\n rootNode: AnyStateNode,\n stateValue: StateValue\n): StateValue {\n const allStateNodes = getAllStateNodes(getStateNodes(rootNode, stateValue));\n return getStateValue(rootNode, allStateNodes);\n}\n\nfunction createEnqueueObject(\n props: Partial<EnqueueObject<any, any>>,\n action: <T extends (...args: any[]) => any>(\n fn: T,\n ...args: Parameters<T>\n ) => void\n): EnqueueObject<any, any> {\n const enqueueFn = (\n fn: (...args: any[]) => any,\n ...args: Parameters<typeof fn>\n ) => {\n action(fn, ...args);\n };\n\n Object.assign(enqueueFn, {\n cancel: () => {},\n emit: () => {},\n log: () => {},\n raise: () => {},\n spawn: () => ({}) as any,\n sendTo: () => {},\n stop: () => {},\n listen: () => ({}) as any,\n subscribeTo: () => ({}) as any,\n ...props\n });\n\n return enqueueFn as any;\n}\n\nexport function hasEffect(\n transition: AnyTransitionDefinition,\n context: MachineContext,\n event: EventObject,\n snapshot: AnyMachineSnapshot,\n self: AnyActor\n): boolean {\n if (transition.to) {\n return transitionToHasEffect(\n transition.to,\n context,\n event,\n snapshot,\n self,\n snapshot.machine.implementations\n );\n }\n\n return false;\n}\n\nfunction transitionToHasEffect(\n transitionTo: NonNullable<AnyTransitionDefinition['to']>,\n context: MachineContext,\n event: EventObject,\n snapshot: AnyMachineSnapshot,\n self: AnyActor,\n implementations: AnyMachineSnapshot['machine']['implementations']\n) {\n let hasEffect = false;\n let res;\n\n try {\n const triggerEffect = () => {\n hasEffect = true;\n throw new Error('Effect triggered');\n };\n res = transitionTo(\n {\n context,\n event,\n output: getEventOutput(event),\n self,\n system: self.system,\n value: snapshot.value,\n children: snapshot.children,\n parent: {\n send: triggerEffect\n } as any,\n actions: implementations.actions,\n actorSources: implementations.actorSources,\n guards: implementations.guards,\n delays: implementations.delays\n },\n createEnqueueObject(\n {\n emit: triggerEffect,\n cancel: triggerEffect,\n log: triggerEffect,\n raise: triggerEffect,\n spawn: triggerEffect,\n sendTo: triggerEffect,\n stop: triggerEffect\n },\n triggerEffect\n )\n );\n } catch (err) {\n if (hasEffect) {\n return true;\n }\n throw err;\n }\n\n return res !== undefined;\n}\n\nfunction stopChildren(\n snapshot: AnyMachineSnapshot,\n actorScope: AnyActorScope\n): AnyMachineSnapshot {\n let children: AnyActor[];\n if (\n !snapshot.children ||\n (children = Object.values(snapshot.children).filter(Boolean) as AnyActor[])\n .length === 0\n ) {\n return snapshot;\n }\n for (const child of children) {\n actorScope.stopChild(child);\n }\n return cloneMachineSnapshot(snapshot, {\n children: {}\n });\n}\n\nfunction selectEventlessTransitions(\n snapshot: AnyMachineSnapshot,\n event: AnyEventObject,\n actorScope: AnyActorScope\n) {\n const enabledTransitionSet: Set<AnyTransitionDefinition> = new Set();\n const atomicStates = snapshot._nodes.filter(isAtomicStateNode);\n\n for (const atomicStateNode of atomicStates) {\n loop: for (\n let stateNode: AnyStateNode | undefined = atomicStateNode;\n stateNode;\n stateNode = stateNode.parent\n ) {\n if (!stateNode.always) {\n continue;\n }\n for (const transition of stateNode.always) {\n if (\n evaluateCandidate(\n transition,\n event,\n snapshot,\n stateNode,\n actorScope.self\n )\n ) {\n enabledTransitionSet.add(transition);\n break loop;\n }\n }\n }\n }\n\n return removeConflictingTransitions(\n Array.from(enabledTransitionSet),\n new Set(snapshot._nodes),\n snapshot,\n event,\n actorScope\n );\n}\n\nexport function evaluateCandidate(\n candidate: AnyTransitionDefinition,\n event: EventObject,\n snapshot: AnyMachineSnapshot,\n stateNode: AnyStateNode,\n self: AnyActor\n): boolean {\n if (candidate.guard) {\n const guardArgs = {\n context: snapshot.context,\n event,\n output: getEventOutput(event),\n self,\n parent: self._parent,\n children: snapshot.children,\n actions: stateNode.machine.implementations.actions,\n actorSources: stateNode.machine.implementations.actorSources,\n guards: stateNode.machine.implementations.guards,\n delays: stateNode.machine.implementations.delays,\n _snapshot: snapshot\n };\n if (!(candidate.guard as (args: typeof guardArgs) => boolean)(guardArgs)) {\n return false;\n }\n }\n\n if (candidate.to) {\n return transitionToHasEffect(\n candidate.to,\n snapshot.context,\n event,\n snapshot,\n self,\n stateNode.machine.implementations\n );\n }\n\n return true;\n}\n","import isDevelopment from '#is-development';\nimport { isMachineSnapshot } from './State.ts';\nimport type { StateNode } from './StateNode.ts';\nimport { TARGETLESS_KEY, WILDCARD } from './constants.ts';\nimport { isStateId } from './stateUtils.ts';\nimport type {\n AnyActor,\n AnyEventObject,\n AnyMachineSnapshot,\n AnyStateMachine,\n AnyTransitionConfig,\n AnyTransitionConfigFunction,\n ErrorActorEvent,\n EventObject,\n InvokeConfig,\n MachineContext,\n Mapper,\n NonReducibleUnknown,\n Observer,\n OutputArg,\n SingleOrArray,\n StateLike,\n StateValue,\n TransitionConfigTarget\n} from './types.ts';\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 checkStateIn(\n snapshot: AnyMachineSnapshot,\n stateValue: StateValue\n) {\n if (typeof stateValue === 'string' && isStateId(stateValue)) {\n const target = snapshot.machine.getStateNodeById(stateValue);\n return snapshot._nodes.some((sn) => sn === target);\n }\n\n return snapshot.matches(stateValue);\n}\n\nexport function toStatePath(stateId: string | string[]): string[] {\n if (isArray(stateId)) {\n return stateId;\n }\n\n const result: string[] = [];\n let segment = '';\n\n for (let i = 0; i < stateId.length; i++) {\n const char = stateId.charCodeAt(i);\n switch (char) {\n // \\\n case 92:\n // consume the next character\n segment += stateId[i + 1];\n // and skip over it\n i++;\n continue;\n // .\n case 46:\n result.push(segment);\n segment = '';\n continue;\n }\n segment += stateId[i];\n }\n\n result.push(segment);\n\n return result;\n}\n\nfunction toStateValue(stateValue: StateLike<any> | StateValue): StateValue {\n if (isMachineSnapshot(stateValue)) {\n return stateValue.value;\n }\n\n if (typeof stateValue !== 'string') {\n return stateValue as StateValue;\n }\n\n const statePath = toStatePath(stateValue);\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\nfunction 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 resolveOutput<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject\n>(\n mapper:\n | Mapper<TContext, TExpressionEvent, unknown, EventObject>\n | NonReducibleUnknown,\n context: TContext,\n event: TExpressionEvent,\n self: AnyActor\n): unknown {\n if (typeof mapper === 'function') {\n const outputMapper = mapper as Mapper<\n TContext,\n TExpressionEvent,\n unknown,\n EventObject\n >;\n const args = {\n context,\n event,\n output: getEventOutput(event),\n self\n } as unknown as Parameters<typeof outputMapper>[0];\n\n return outputMapper(args);\n }\n\n if (\n isDevelopment &&\n !!mapper &&\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(([, 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 getEventOutput<TEvent extends EventObject>(\n event: TEvent\n): OutputArg<TEvent>['output'] {\n if (isDoneEvent(event)) {\n const doneEvent = event as unknown as EventObject & { output: unknown };\n return doneEvent.output as OutputArg<TEvent>['output'];\n }\n\n return undefined as OutputArg<TEvent>['output'];\n}\n\nfunction isDoneEvent(event: EventObject): boolean {\n return (\n event.type.startsWith('xstate.done.actor.') ||\n event.type.startsWith('xstate.done.state.')\n );\n}\n\nfunction isArray(value: any): value is readonly any[] {\n return Array.isArray(value);\n}\n\nexport function isErrorActorEvent(\n event: AnyEventObject\n): event is ErrorActorEvent {\n return event.type.startsWith('xstate.error.actor');\n}\n\nexport function toTransitionConfigArray(\n configLike: SingleOrArray<\n AnyTransitionConfig | TransitionConfigTarget | AnyTransitionConfigFunction\n >\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 if (typeof transitionLike === 'function') {\n return { to: 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 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 `${index}.${stateNodeId}`;\n}\n\nexport function resolveReferencedActor(machine: AnyStateMachine, src: string) {\n const match = src.match(/^xstate\\.invoke\\.(\\d+)\\.(.*)/)!;\n if (!match) {\n return machine.implementations.actorSources[src];\n }\n const [, indexStr, nodeId] = match;\n const node = machine.getStateNodeById(nodeId);\n const invokeConfig = node.config.invoke!;\n const configSrc = (\n Array.isArray(invokeConfig)\n ? invokeConfig[indexStr as any]\n : (invokeConfig as InvokeConfig<\n any,\n any,\n any,\n any,\n any,\n any,\n any, // TEmitted\n any // TMeta\n >)\n ).src;\n // A referenced actor may itself be registered by name.\n return typeof configSrc === 'string'\n ? machine.implementations.actorSources[configSrc]\n : configSrc;\n}\n\nexport function getAllOwnEventDescriptors(snapshot: AnyMachineSnapshot) {\n return [...new Set([...snapshot._nodes.flatMap((sn) => sn.ownEvents)])];\n}\n\n/**\n * Checks if an event type matches an event descriptor, supporting wildcards.\n * Event descriptors can be:\n *\n * - Exact matches: \"event.type\"\n * - Wildcard: \"*\"\n * - Partial matches: \"event.*\"\n *\n * @param eventType - The actual event type string\n * @param descriptor - The event descriptor to match against\n * @returns True if the event type matches the descriptor\n */\nexport function matchesEventDescriptor(\n eventType: string,\n descriptor: string\n): boolean {\n if (descriptor === eventType) {\n return true;\n }\n\n if (descriptor === WILDCARD) {\n return true;\n }\n\n if (!descriptor.endsWith('.*')) {\n return false;\n }\n\n if (isDevelopment && /.*\\*.+/.test(descriptor)) {\n console.warn(\n `Wildcards can only be the last token of an event descriptor (e.g., \"event.*\") or the entire event descriptor (\"*\"). Check the \"${descriptor}\" event.`\n );\n }\n\n const partialEventTokens = descriptor.split('.');\n const eventTokens = eventType.split('.');\n\n for (\n let tokenIndex = 0;\n tokenIndex < partialEventTokens.length;\n tokenIndex++\n ) {\n const partialEventToken = partialEventTokens[tokenIndex];\n const eventToken = eventTokens[tokenIndex];\n\n if (partialEventToken === '*') {\n const isLastToken = tokenIndex === partialEventTokens.length - 1;\n\n if (isDevelopment && !isLastToken) {\n console.warn(\n `Infix wildcards in transition events are not allowed. Check the \"${descriptor}\" transition.`\n );\n }\n\n return isLastToken;\n }\n\n if (partialEventToken !== eventToken) {\n return false;\n }\n }\n\n return true;\n}\n","import isDevelopment from '#is-development';\nimport { $$ACTOR_TYPE } from './createActor.ts';\nimport { getStateValue, getTransitionResult, hasEffect } from './stateUtils.ts';\nimport type {\n AnyActorScope,\n AnyActor,\n AnyMachineSnapshot,\n AnyStateMachine,\n EventObject,\n HistoryValue,\n MachineContext,\n StateConfig,\n StateValue,\n AnyActorRef,\n Snapshot,\n MetaObject,\n StateSchema,\n StateId,\n StateIdInputs,\n StateContextFromStateValue,\n SnapshotStatus,\n PersistedHistoryValue,\n AnyStateNode\n} from './types.ts';\nimport { matchesState } from './utils.ts';\nimport { createEmptyActor } from './actors/index.ts';\n\nexport function isMachineSnapshot(value: unknown): value is AnyMachineSnapshot {\n return (\n !!value &&\n typeof value === 'object' &&\n 'machine' in value &&\n 'value' in value\n );\n}\n\nlet emptyCanActor: AnyActor | undefined;\nlet emptyCanActorScope: AnyActorScope | undefined;\n\nfunction getEmptyCanActor() {\n return (emptyCanActor ??= createEmptyActor());\n}\n\nfunction getEmptyCanActorScope(): AnyActorScope {\n if (emptyCanActorScope) {\n return emptyCanActorScope;\n }\n\n const actor = getEmptyCanActor();\n emptyCanActorScope = {\n self: actor,\n logger: () => {},\n id: '',\n sessionId: '',\n defer: () => {},\n system: actor.system,\n stopChild: () => {},\n emit: () => {},\n actionExecutor: () => {}\n };\n return emptyCanActorScope;\n}\n\ninterface MachineSnapshotBase<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TChildren extends Record<string, AnyActorRef | undefined>,\n TStateValue extends StateValue,\n TTag extends string,\n _TOutput,\n TMeta extends MetaObject,\n TStateSchema extends StateSchema = StateSchema\n> {\n /** The state machine that produced this state snapshot. */\n machine: AnyStateMachine;\n /** The tags of the active state nodes that represent the current state value. */\n tags: Set<string>;\n /**\n * The current state value.\n *\n * This represents the active state nodes in the state machine.\n *\n * - For atomic state nodes, it is a string.\n * - For compound parent state nodes, it is an object where:\n *\n * - The key is the parent state node's key\n * - The value is the current state value of the active child state node(s)\n *\n * @example\n *\n * ```ts\n * // single-level state node\n * snapshot.value; // => 'yellow'\n *\n * // nested state nodes\n * snapshot.value; // => { red: 'wait' }\n * ```\n */\n value: TStateValue;\n /** The current status of this snapshot. */\n status: SnapshotStatus;\n error: unknown;\n context: TContext;\n\n historyValue: Readonly<HistoryValue>;\n /** The enabled state nodes representative of the state value. */\n _nodes: Array<AnyStateNode>;\n /** An object mapping actor names to spawned/invoked actors. */\n children: TChildren;\n /** @internal */\n _stateInputs: Record<string, Record<string, unknown>>;\n\n /**\n * Whether the current state value is a subset of the given partial state\n * value.\n *\n * @param partialStateValue\n */\n matches<const TTestStateValue extends StateValue>(\n partialStateValue: TTestStateValue\n ): this is MachineSnapshot<\n StateContextFromStateValue<TStateSchema, TContext, TTestStateValue>,\n TEvent,\n TChildren,\n TStateValue,\n TTag,\n _TOutput,\n TMeta,\n TStateSchema\n >;\n\n /**\n * Whether the current state nodes has a state node with the specified `tag`.\n *\n * @param tag\n */\n hasTag: (tag: TTag) => boolean;\n\n /**\n * Determines whether sending the `event` will cause a non-forbidden\n * transition to be selected, even if the transitions have no actions nor\n * change the state value.\n *\n * @param event The event to test\n * @returns Whether the event will cause a transition\n */\n can: (event: TEvent) => boolean;\n\n getMeta: () => Record<\n StateId<TStateSchema> & string,\n TMeta | undefined // States might not have meta defined\n >;\n\n /**\n * Returns the inputs for the current active state nodes, keyed by state node\n * id.\n */\n getInputs: () => StateIdInputs<TStateSchema>;\n\n toJSON: () => unknown;\n}\n\ninterface ActiveMachineSnapshot<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TChildren extends Record<string, AnyActorRef | undefined>,\n TStateValue extends StateValue,\n TTag extends string,\n TOutput,\n TMeta extends MetaObject,\n TStateSchema extends StateSchema\n> extends MachineSnapshotBase<\n TContext,\n TEvent,\n TChildren,\n TStateValue,\n TTag,\n TOutput,\n TMeta,\n TStateSchema\n > {\n status: 'active';\n output: undefined;\n error: undefined;\n}\n\ninterface DoneMachineSnapshot<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TChildren extends Record<string, AnyActorRef | undefined>,\n TStateValue extends StateValue,\n TTag extends string,\n TOutput,\n TMeta extends MetaObject,\n TStateSchema extends StateSchema\n> extends MachineSnapshotBase<\n TContext,\n TEvent,\n TChildren,\n TStateValue,\n TTag,\n TOutput,\n TMeta,\n TStateSchema\n > {\n status: 'done';\n output: TOutput;\n error: undefined;\n}\n\ninterface ErrorMachineSnapshot<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TChildren extends Record<string, AnyActorRef | undefined>,\n TStateValue extends StateValue,\n TTag extends string,\n TOutput,\n TMeta extends MetaObject,\n TStateSchema extends StateSchema\n> extends MachineSnapshotBase<\n TContext,\n TEvent,\n TChildren,\n TStateValue,\n TTag,\n TOutput,\n TMeta,\n TStateSchema\n > {\n status: 'error';\n output: undefined;\n error: unknown;\n}\n\ninterface StoppedMachineSnapshot<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TChildren extends Record<string, AnyActorRef | undefined>,\n TStateValue extends StateValue,\n TTag extends string,\n TOutput,\n TMeta extends MetaObject,\n TStateSchema extends StateSchema\n> extends MachineSnapshotBase<\n TContext,\n TEvent,\n TChildren,\n TStateValue,\n TTag,\n TOutput,\n TMeta,\n TStateSchema\n > {\n status: 'stopped';\n output: undefined;\n error: undefined;\n}\n\nexport type MachineSnapshot<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TChildren extends Record<string, AnyActorRef | undefined>,\n TStateValue extends StateValue,\n TTag extends string,\n TOutput,\n TMeta extends MetaObject,\n TStateSchema extends StateSchema\n> =\n | ActiveMachineSnapshot<\n TContext,\n TEvent,\n TChildren,\n TStateValue,\n TTag,\n TOutput,\n TMeta,\n TStateSchema\n >\n | DoneMachineSnapshot<\n TContext,\n TEvent,\n TChildren,\n TStateValue,\n TTag,\n TOutput,\n TMeta,\n TStateSchema\n >\n | ErrorMachineSnapshot<\n TContext,\n TEvent,\n TChildren,\n TStateValue,\n TTag,\n TOutput,\n TMeta,\n TStateSchema\n >\n | StoppedMachineSnapshot<\n TContext,\n TEvent,\n TChildren,\n TStateValue,\n TTag,\n TOutput,\n TMeta,\n TStateSchema\n >;\n\nconst machineSnapshotMatches = function matches(\n this: AnyMachineSnapshot,\n testValue: StateValue\n) {\n return matchesState(testValue, this.value);\n};\n\nconst machineSnapshotHasTag = function hasTag(\n this: AnyMachineSnapshot,\n tag: string\n) {\n return this.tags.has(tag);\n};\n\nconst machineSnapshotCan = function can(\n this: AnyMachineSnapshot,\n event: EventObject\n) {\n if (isDevelopment && !this.machine) {\n console.warn(\n `state.can(...) used outside of a machine-created State object; this will always return false.`\n );\n }\n\n const emptyActor = getEmptyCanActor();\n const emptyActorScope = getEmptyCanActorScope();\n const transitionData = this.machine.getTransitionData(\n this,\n event,\n emptyActor\n );\n\n if (!transitionData?.length) {\n return false;\n }\n\n // Check that at least one transition is not forbidden\n for (const transition of transitionData) {\n if (transition.target !== undefined) {\n return true;\n }\n\n const res = getTransitionResult(transition, this, event, emptyActorScope);\n if (\n res.targets?.length ||\n res.context ||\n hasEffect(transition, this.context, event, this, emptyActor)\n ) {\n return true;\n }\n }\n\n return false;\n};\n\nconst machineSnapshotToJSON = function toJSON(this: AnyMachineSnapshot) {\n const {\n _nodes: nodes,\n _stateInputs,\n tags,\n machine,\n getMeta,\n getInputs,\n toJSON,\n can,\n hasTag,\n matches,\n ...jsonValues\n } = this;\n return { ...jsonValues, tags: Array.from(tags) };\n};\n\nconst machineSnapshotGetMeta = function getMeta(this: AnyMachineSnapshot) {\n const meta: Record<string, any> = {};\n for (const stateNode of this._nodes) {\n if (stateNode.meta !== undefined) {\n meta[stateNode.id] = stateNode.meta;\n }\n }\n return meta;\n};\n\nconst machineSnapshotGetInputs = function getInputs(this: AnyMachineSnapshot) {\n return this._stateInputs as any;\n};\n\nfunction collectTags(stateNodes: Array<AnyStateNode>): Set<string> {\n const tags = new Set<string>();\n for (const stateNode of stateNodes) {\n for (const tag of stateNode.tags) {\n tags.add(tag);\n }\n }\n return tags;\n}\n\nexport function createMachineSnapshot<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TChildren extends Record<string, AnyActorRef | undefined>,\n TStateValue extends StateValue,\n TTag extends string,\n TMeta extends MetaObject,\n TStateSchema extends StateSchema\n>(\n config: StateConfig<TContext, TEvent>,\n machine: AnyStateMachine\n): MachineSnapshot<\n TContext,\n TEvent,\n TChildren,\n TStateValue,\n TTag,\n undefined,\n TMeta,\n TStateSchema\n> {\n return {\n status: config.status as never,\n output: config.output,\n error: config.error,\n machine,\n context: config.context,\n _nodes: config._nodes,\n value: (config.value ??\n getStateValue(machine.root, config._nodes)) as never,\n tags: collectTags(config._nodes),\n children: config.children as any,\n historyValue: config.historyValue || {},\n _stateInputs: config._stateInputs || {},\n matches: machineSnapshotMatches as never,\n hasTag: machineSnapshotHasTag,\n can: machineSnapshotCan,\n getMeta: machineSnapshotGetMeta,\n getInputs: machineSnapshotGetInputs,\n toJSON: machineSnapshotToJSON\n };\n}\n\nexport function cloneMachineSnapshot<TState extends AnyMachineSnapshot>(\n snapshot: TState,\n config: Partial<StateConfig<any, any>> = {}\n): TState {\n const configWithSnapshot = {\n ...snapshot,\n ...config\n } as StateConfig<any, any>;\n\n if ((config._nodes ?? snapshot._nodes) === snapshot._nodes) {\n return {\n status: configWithSnapshot.status as never,\n output: configWithSnapshot.output,\n error: configWithSnapshot.error,\n machine: snapshot.machine,\n context: configWithSnapshot.context,\n _nodes: snapshot._nodes,\n value: snapshot.value,\n tags: snapshot.tags,\n children: configWithSnapshot.children as any,\n historyValue: configWithSnapshot.historyValue || {},\n _stateInputs: configWithSnapshot._stateInputs || {},\n matches: machineSnapshotMatches as never,\n hasTag: machineSnapshotHasTag,\n can: machineSnapshotCan,\n getMeta: machineSnapshotGetMeta,\n getInputs: machineSnapshotGetInputs,\n toJSON: machineSnapshotToJSON\n } as unknown as TState;\n }\n\n return createMachineSnapshot(\n {\n ...configWithSnapshot,\n value: undefined\n },\n snapshot.machine\n ) as TState;\n}\n\nfunction serializeHistoryValue(\n historyValue: HistoryValue\n): PersistedHistoryValue {\n const result: PersistedHistoryValue = {};\n\n for (const key in historyValue) {\n const value = historyValue[key];\n if (Array.isArray(value)) {\n result[key] = value.map((item) => ({ id: item.id }));\n }\n }\n\n return result;\n}\n\nexport function getPersistedSnapshot<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TChildren extends Record<string, AnyActorRef | undefined>,\n TStateValue extends StateValue,\n TTag extends string,\n TOutput,\n TMeta extends MetaObject\n>(\n snapshot: MachineSnapshot<\n TContext,\n TEvent,\n TChildren,\n TStateValue,\n TTag,\n TOutput,\n TMeta,\n any // state schema\n >,\n options?: unknown\n): Snapshot<unknown> {\n const {\n _nodes: nodes,\n _stateInputs,\n tags,\n machine,\n children,\n context,\n can,\n hasTag,\n matches,\n getMeta,\n getInputs,\n toJSON,\n ...jsonValues\n } = snapshot;\n\n const childrenJson: Record<string, unknown> = {};\n\n for (const id in children) {\n const child = children[id] as any;\n if (\n isDevelopment &&\n typeof child.src !== 'string' &&\n (!options || !('__unsafeAllowInlineActors' in (options as object)))\n ) {\n throw new Error('An inline child actor cannot be persisted.');\n }\n childrenJson[id as keyof typeof childrenJson] = {\n snapshot: child.getPersistedSnapshot(options),\n src: child.src,\n registryKey: child.registryKey,\n syncSnapshot: child._syncSnapshot\n };\n }\n\n const persisted: Record<string, unknown> = {\n ...jsonValues,\n context: persistContext(context) as any,\n children: childrenJson,\n historyValue: serializeHistoryValue(jsonValues.historyValue)\n };\n\n if (machine.version !== undefined) {\n persisted.version = machine.version;\n }\n\n return persisted as Snapshot<unknown>;\n}\n\nfunction persistContext(contextPart: Record<string, unknown>) {\n let copy: typeof contextPart | undefined;\n for (const key in contextPart) {\n const value = contextPart[key];\n if (value && typeof value === 'object') {\n if ('sessionId' in value && 'send' in value && 'ref' in value) {\n copy ??= Array.isArray(contextPart)\n ? (contextPart.slice() as typeof contextPart)\n : { ...contextPart };\n copy[key] = {\n xstate$$type: $$ACTOR_TYPE,\n id: (value as any as AnyActor).id\n };\n } else {\n const result = persistContext(value as typeof contextPart);\n if (result !== value) {\n copy ??= Array.isArray(contextPart)\n ? (contextPart.slice() as typeof contextPart)\n : { ...contextPart };\n copy[key] = result;\n }\n }\n }\n }\n return copy ?? contextPart;\n}\n","import { InspectionEvent } from './inspection.ts';\nimport {\n AnyEventObject,\n ActorSystemInfo,\n AnyActor,\n Observer,\n HomomorphicOmit,\n EventObject,\n Subscription,\n TimersRestoreStrategy\n} from './types.ts';\nimport { toObserver } from './utils.ts';\n\ninterface ScheduledEvent {\n id: string;\n event: EventObject;\n startedAt: number; // timestamp\n delay: number;\n source: AnyActor;\n target: AnyActor;\n}\n\nexport interface Clock {\n setTimeout(fn: (...args: any[]) => void, timeout: number): any;\n clearTimeout(id: any): void;\n}\n\ninterface Scheduler {\n schedule(\n source: AnyActor,\n target: AnyActor,\n event: EventObject,\n delay: number,\n id: string | undefined\n ): void;\n cancel(source: AnyActor, id: string): void;\n cancelAll(actor: AnyActor): void;\n}\n\ntype ScheduledEventId = string & { __scheduledEventId: never };\n\nfunction createScheduledEventId(actor: AnyActor, id: string): ScheduledEventId {\n return `${actor.sessionId}.${id}` as ScheduledEventId;\n}\n\nexport interface ActorSystem<T extends ActorSystemInfo> {\n /** @internal */\n children: Map<string, AnyActor>;\n /** @internal */\n reverseKeyedActors: WeakMap<AnyActor, keyof T['actors']>;\n /** @internal */\n keyedActors: Map<keyof T['actors'], AnyActor | undefined>;\n /** @internal */\n _bookId: () => string;\n /** @internal */\n _register: (sessionId: string, actor: AnyActor) => string;\n /** @internal */\n _unregister: (actor: AnyActor) => void;\n /** @internal */\n _set: <K extends keyof T['actors']>(key: K, actor: AnyActor) => void;\n get: <K extends keyof T['actors']>(key: K) => T['actors'][K] | undefined;\n getAll: () => Partial<T['actors']>;\n\n inspect: (\n observer:\n | Observer<InspectionEvent>\n | ((inspectionEvent: InspectionEvent) => void)\n ) => Subscription;\n /** @internal */\n _sendInspectionEvent: (\n event: HomomorphicOmit<InspectionEvent, 'rootId'>\n ) => void;\n /** @internal */\n _relay: (\n source: AnyActor | undefined,\n target: AnyActor,\n event: AnyEventObject\n ) => void;\n scheduler: Scheduler;\n getSnapshot: () => {\n _scheduledEvents: Record<string, ScheduledEvent>;\n };\n /** @internal */\n _snapshot: {\n _scheduledEvents: Record<ScheduledEventId, ScheduledEvent>;\n };\n start: () => void;\n _clock: Clock;\n _logger: (...args: any[]) => void;\n /**\n * How rehydrated actors in this system restore persisted timers.\n *\n * @internal\n */\n _timerStrategy?: TimersRestoreStrategy;\n}\n\nexport type AnyActorSystem = ActorSystem<any>;\n\nexport function createRuntimeSystem<T extends ActorSystemInfo>(\n rootActor: AnyActor,\n options: {\n clock: Clock;\n logger: (...args: any[]) => void;\n snapshot?: unknown;\n timers?: TimersRestoreStrategy;\n }\n): ActorSystem<T> {\n let idCounter = 0;\n const children = new Map<string, AnyActor>();\n const keyedActors = new Map<keyof T['actors'], AnyActor | undefined>();\n const reverseKeyedActors = new WeakMap<AnyActor, keyof T['actors']>();\n const inspectionObservers = new Set<Observer<InspectionEvent>>();\n const timerMap: { [id: ScheduledEventId]: number } = {};\n const { clock, logger } = options;\n\n // Records a send on the *sender's* transition for the `sent[]` inspection\n // facet. Captures the send when it is initiated (including delayed sends that\n // may never deliver), keyed to the source actor's in-flight transition.\n const recordSent = (\n source: AnyActor | undefined,\n target: AnyActor,\n event: AnyEventObject,\n delay?: number,\n id?: string\n ) => {\n if (!inspectionObservers.size || !source) {\n return;\n }\n const collected = ((source as any)._collectedSent ??= []);\n collected.push({\n targetRef: target,\n targetId: target.id,\n event,\n delay,\n id\n });\n };\n\n const scheduler: Scheduler = {\n schedule: (\n source,\n target,\n event,\n delay,\n id = Math.random().toString(36).slice(2)\n ) => {\n recordSent(source, target, event, delay, id);\n const scheduledEvent: ScheduledEvent = {\n source,\n target,\n event,\n delay,\n id,\n startedAt: Date.now()\n };\n const scheduledEventId = createScheduledEventId(source, id);\n system._snapshot._scheduledEvents[scheduledEventId] = scheduledEvent;\n\n const timeout = clock.setTimeout(() => {\n delete timerMap[scheduledEventId];\n delete system._snapshot._scheduledEvents[scheduledEventId];\n\n // The send was already recorded at schedule time on the sender's\n // transition, so deliver without re-recording.\n deliver(source, target, event);\n }, delay);\n\n timerMap[scheduledEventId] = timeout;\n },\n cancel: (source, id: string) => {\n const scheduledEventId = createScheduledEventId(source, id);\n const timeout = timerMap[scheduledEventId];\n\n delete timerMap[scheduledEventId];\n delete system._snapshot._scheduledEvents[scheduledEventId];\n\n if (timeout !== undefined) {\n clock.clearTimeout(timeout);\n }\n },\n cancelAll: (actor) => {\n for (const scheduledEventId in system._snapshot._scheduledEvents) {\n const scheduledEvent =\n system._snapshot._scheduledEvents[\n scheduledEventId as ScheduledEventId\n ];\n if (scheduledEvent.source === actor) {\n scheduler.cancel(actor, scheduledEvent.id);\n }\n }\n }\n };\n // Delivers an event to the target actor. Used by both `_relay` (which also\n // records the send) and the scheduler's timer (which already recorded it).\n const deliver = (\n source: AnyActor | undefined,\n target: AnyActor,\n event: AnyEventObject\n ) => {\n const targetMachine = (target as any).logic;\n const isInternalEvent =\n typeof targetMachine?.isInternalEventType === 'function' &&\n targetMachine.isInternalEventType(event.type);\n\n if (isInternalEvent && source !== target) {\n throw new Error(\n `Internal event \"${event.type}\" cannot be sent to actor \"${target.id}\" from outside.`\n );\n }\n\n // remember the last source for unified transition inspect event\n (target as any)._lastSourceRef = source;\n target._send(event);\n };\n\n const sendInspectionEvent = (event: InspectionEvent) => {\n if (!inspectionObservers.size) {\n return;\n }\n const resolvedInspectionEvent: InspectionEvent = {\n ...event,\n rootId: rootActor.sessionId!\n };\n inspectionObservers.forEach((observer) =>\n observer.next?.(resolvedInspectionEvent)\n );\n };\n\n const system: ActorSystem<T> = {\n children,\n reverseKeyedActors,\n keyedActors,\n _snapshot: {\n _scheduledEvents:\n (options?.snapshot && (options.snapshot as any).scheduler) ?? {}\n },\n _bookId: () => `x:${idCounter++}`,\n _register: (sessionId, actor) => {\n children.set(sessionId, actor);\n return sessionId;\n },\n _unregister: (actor) => {\n children.delete(actor.sessionId!);\n const registryKey = reverseKeyedActors.get(actor);\n\n if (registryKey !== undefined) {\n keyedActors.delete(registryKey);\n reverseKeyedActors.delete(actor);\n }\n },\n get: (registryKey) => {\n return keyedActors.get(registryKey) as T['actors'][any] | undefined;\n },\n getAll: () => {\n return Object.fromEntries(keyedActors.entries()) as Partial<T['actors']>;\n },\n _set: (registryKey, actor) => {\n const existing = keyedActors.get(registryKey);\n if (existing && existing !== actor) {\n throw new Error(\n `Actor with registry key '${registryKey as string}' already exists.`\n );\n }\n\n keyedActors.set(registryKey, actor);\n reverseKeyedActors.set(actor, registryKey);\n },\n inspect: (observerOrFn) => {\n const observer = toObserver(observerOrFn);\n inspectionObservers.add(observer);\n\n return {\n unsubscribe() {\n inspectionObservers.delete(observer);\n }\n };\n },\n _sendInspectionEvent: sendInspectionEvent as any,\n _relay: (source, target, event) => {\n recordSent(source, target, event);\n deliver(source, target, event);\n },\n scheduler,\n getSnapshot: () => {\n return {\n _scheduledEvents: { ...system._snapshot._scheduledEvents }\n };\n },\n start: () => {\n const scheduledEvents = system._snapshot._scheduledEvents;\n system._snapshot._scheduledEvents = {};\n for (const scheduledId in scheduledEvents) {\n const { source, target, event, delay, id } =\n scheduledEvents[scheduledId as ScheduledEventId];\n scheduler.schedule(source, target, event, delay, id);\n }\n },\n _clock: clock,\n _logger: logger,\n _timerStrategy: options.timers\n };\n\n return system;\n}\n","import { XSTATE_STOP } from '../constants.ts';\nimport { createInitEvent } from '../eventUtils.ts';\nimport { StandardSchemaV1 } from '../schema.types.ts';\nimport { AnyActorSystem } from '../system.ts';\nimport {\n ActorLogic,\n ActorRefFromLogic,\n ActorScope,\n AnyActorRef,\n EventObject,\n NonReducibleUnknown,\n Snapshot\n} from '../types.ts';\n\nexport type LogicSnapshot<TContext, TOutput, TInput> = Snapshot<TOutput> & {\n context: TContext;\n input: TInput | undefined;\n effects?: Record<string, LogicEffectState>;\n};\n\nexport type LogicEffectState =\n | { status: 'active' }\n | { status: 'done'; output?: unknown }\n | { status: 'error'; error: unknown };\n\nexport interface LogicArgs<TContext, TEvent extends EventObject, TInput> {\n context: TContext;\n event: TEvent;\n input: TInput;\n system: AnyActorSystem;\n self: LogicActorRef<TContext, unknown, TEvent, TInput>;\n}\n\nexport type LogicEffect<\n TEvent extends EventObject,\n TEmitted extends EventObject\n> =\n | { type: 'emit'; event: TEmitted }\n | { type: 'sendBack'; event: EventObject }\n | { type: 'raise'; event: TEvent }\n | { type: 'effect'; key?: string; exec: () => void | (() => void) }\n | { type: 'cleanupEffects' };\n\nexport interface LogicEnqueue<\n TEvent extends EventObject,\n TEmitted extends EventObject\n> {\n emit: (emitted: TEmitted) => void;\n sendBack: (event: EventObject) => void;\n raise: (event: TEvent) => void;\n effect: {\n (exec: () => void | (() => void)): void;\n (key: string, exec: () => void | (() => void)): void;\n };\n}\n\nexport type LogicPatch<TContext, TOutput, TInput> = Partial<{\n context: TContext;\n input: TInput | undefined;\n status: LogicSnapshot<TContext, TOutput, TInput>['status'];\n output: TOutput;\n error: unknown;\n effects: Record<string, LogicEffectState>;\n}>;\n\nexport type LogicFunction<\n TContext,\n TOutput,\n TEvent extends EventObject,\n TInput,\n TEmitted extends EventObject\n> = (\n args: LogicArgs<TContext, TEvent, TInput>,\n enq: LogicEnqueue<TEvent, TEmitted>\n) => void | LogicPatch<TContext, TOutput, TInput>;\n\nexport interface LogicConfig<\n TContext,\n TOutput,\n TEvent extends EventObject,\n TInput,\n TEmitted extends EventObject,\n TInputSchema extends StandardSchemaV1 = StandardSchemaV1,\n TOutputSchema extends StandardSchemaV1 = StandardSchemaV1\n> {\n id?: string;\n schemas?: {\n input?: TInputSchema;\n output?: TOutputSchema;\n };\n context: TContext | ((args: { input: TInput }) => TContext);\n run: LogicFunction<TContext, TOutput, TEvent, TInput, TEmitted>;\n}\n\ninterface LogicTransition<\n TContext,\n TOutput,\n TEvent extends EventObject,\n TInput,\n TEmitted extends EventObject\n> {\n (\n snapshot: LogicSnapshot<TContext, TOutput, TInput>,\n event: TEvent,\n actorScope: ActorScope<\n LogicSnapshot<TContext, TOutput, TInput>,\n TEvent,\n AnyActorSystem,\n TEmitted\n >\n ): [\n LogicSnapshot<TContext, TOutput, TInput>,\n LogicEffect<TEvent, TEmitted>[]\n ];\n (\n snapshot: LogicSnapshot<TContext, TOutput, TInput>,\n event: TEvent,\n actorScope: ActorScope<\n LogicSnapshot<TContext, TOutput, TInput>,\n TEvent,\n AnyActorSystem,\n TEmitted\n >\n ): LogicSnapshot<TContext, TOutput, TInput>;\n}\n\nexport type LogicActorLogic<\n TContext,\n TOutput,\n TEvent extends EventObject = EventObject,\n TInput = NonReducibleUnknown,\n TEmitted extends EventObject = EventObject\n> = Omit<\n ActorLogic<\n LogicSnapshot<TContext, TOutput, TInput>,\n TEvent,\n TInput,\n AnyActorSystem,\n TEmitted\n >,\n 'transition'\n> & {\n id?: string;\n transition: LogicTransition<TContext, TOutput, TEvent, TInput, TEmitted>;\n};\n\nexport type LogicActorRef<\n TContext,\n TOutput,\n TEvent extends EventObject,\n TInput\n> = ActorRefFromLogic<LogicActorLogic<TContext, TOutput, TEvent, TInput>>;\n\nconst effectStates = new WeakMap<\n AnyActorRef,\n Map<PropertyKey, { cleanup?: () => void }>\n>();\n\nexport const XSTATE_LOGIC_EFFECT_RESOLVE = 'xstate.logic.effect.resolve';\nexport const XSTATE_LOGIC_EFFECT_REJECT = 'xstate.logic.effect.reject';\nexport const XSTATE_LOGIC_EFFECT_START = 'xstate.logic.effect.start';\n\nfunction getEffectState(self: AnyActorRef) {\n let state = effectStates.get(self);\n if (!state) {\n state = new Map();\n effectStates.set(self, state);\n }\n return state;\n}\n\nexport function executeLogicEffects(\n effects: readonly unknown[] | undefined,\n actorScope: ActorScope<any, any, any, any>\n) {\n if (!effects?.length) {\n return;\n }\n\n for (const effect of effects as LogicEffect<EventObject, EventObject>[]) {\n switch (effect.type) {\n case 'emit':\n actorScope.emit(effect.event);\n break;\n case 'sendBack': {\n const parent = (actorScope.self as any)._parent;\n if (parent) {\n actorScope.system._relay(actorScope.self, parent, effect.event);\n }\n break;\n }\n case 'raise':\n actorScope.system._relay(\n actorScope.self,\n actorScope.self,\n effect.event\n );\n break;\n case 'effect': {\n if (!effect.key) {\n const cleanup = effect.exec();\n if (typeof cleanup === 'function') {\n getEffectState(actorScope.self).set(Symbol(), { cleanup });\n }\n break;\n }\n\n const state = getEffectState(actorScope.self);\n if (state.has(effect.key)) {\n break;\n }\n const cleanup = effect.exec();\n state.set(effect.key, {\n cleanup: typeof cleanup === 'function' ? cleanup : undefined\n });\n break;\n }\n case 'cleanupEffects': {\n const state = effectStates.get(actorScope.self);\n if (!state) {\n break;\n }\n for (const { cleanup } of state.values()) {\n cleanup?.();\n }\n effectStates.delete(actorScope.self);\n break;\n }\n }\n }\n}\n\nfunction resolveContext<TContext, TInput>(\n context: TContext | ((args: { input: TInput }) => TContext),\n input: TInput\n) {\n return typeof context === 'function'\n ? (context as (args: { input: TInput }) => TContext)({ input })\n : context;\n}\n\nexport function createLogic<\n TContext,\n const TInputSchema extends StandardSchemaV1,\n const TOutputSchema extends StandardSchemaV1,\n TEvent extends EventObject = EventObject,\n TEmitted extends EventObject = EventObject\n>(\n config: LogicConfig<\n TContext,\n StandardSchemaV1.InferOutput<TOutputSchema>,\n TEvent,\n StandardSchemaV1.InferOutput<TInputSchema>,\n TEmitted,\n TInputSchema,\n TOutputSchema\n > & {\n schemas: {\n input: TInputSchema;\n output: TOutputSchema;\n };\n }\n): LogicActorLogic<\n TContext,\n StandardSchemaV1.InferOutput<TOutputSchema>,\n TEvent,\n StandardSchemaV1.InferOutput<TInputSchema>,\n TEmitted\n>;\nexport function createLogic<\n TContext,\n TOutput,\n const TInputSchema extends StandardSchemaV1,\n TEvent extends EventObject = EventObject,\n TEmitted extends EventObject = EventObject\n>(\n config: LogicConfig<\n TContext,\n TOutput,\n TEvent,\n StandardSchemaV1.InferOutput<TInputSchema>,\n TEmitted,\n TInputSchema\n > & {\n schemas: {\n input: TInputSchema;\n output?: undefined;\n };\n }\n): LogicActorLogic<\n TContext,\n TOutput,\n TEvent,\n StandardSchemaV1.InferOutput<TInputSchema>,\n TEmitted\n>;\nexport function createLogic<\n TContext,\n const TOutputSchema extends StandardSchemaV1,\n TEvent extends EventObject = EventObject,\n TInput = NonReducibleUnknown,\n TEmitted extends EventObject = EventObject\n>(\n config: LogicConfig<\n TContext,\n StandardSchemaV1.InferOutput<TOutputSchema>,\n TEvent,\n TInput,\n TEmitted,\n StandardSchemaV1,\n TOutputSchema\n > & {\n schemas: {\n input?: undefined;\n output: TOutputSchema;\n };\n }\n): LogicActorLogic<\n TContext,\n StandardSchemaV1.InferOutput<TOutputSchema>,\n TEvent,\n TInput,\n TEmitted\n>;\nexport function createLogic<\n TContext,\n TOutput = unknown,\n TEvent extends EventObject = EventObject,\n TInput = NonReducibleUnknown,\n TEmitted extends EventObject = EventObject\n>(\n config: LogicConfig<TContext, TOutput, TEvent, TInput, TEmitted>\n): LogicActorLogic<TContext, TOutput, TEvent, TInput, TEmitted>;\nexport function createLogic<\n TContext,\n TOutput = unknown,\n TEvent extends EventObject = EventObject,\n TInput = NonReducibleUnknown,\n TEmitted extends EventObject = EventObject\n>(\n config: LogicConfig<TContext, TOutput, TEvent, TInput, TEmitted>\n): LogicActorLogic<TContext, TOutput, TEvent, TInput, TEmitted> {\n const transition = ((snapshot, event, actorScope) => {\n if (snapshot.status !== 'active') {\n return [snapshot, []];\n }\n\n if (event.type === XSTATE_STOP) {\n return [\n {\n ...snapshot,\n status: 'stopped',\n input: undefined\n },\n [{ type: 'cleanupEffects' }]\n ];\n }\n\n if (event.type === XSTATE_LOGIC_EFFECT_START) {\n return [\n {\n ...snapshot,\n effects: {\n ...snapshot.effects,\n [(event as any).key]: { status: 'active' }\n }\n },\n []\n ];\n }\n\n if (event.type === XSTATE_LOGIC_EFFECT_RESOLVE) {\n return [\n {\n ...snapshot,\n effects: {\n ...snapshot.effects,\n [(event as any).key]: {\n status: 'done',\n output: (event as any).output\n }\n }\n },\n []\n ];\n }\n\n if (event.type === XSTATE_LOGIC_EFFECT_REJECT) {\n return [\n {\n ...snapshot,\n effects: {\n ...snapshot.effects,\n [(event as any).key]: {\n status: 'error',\n error: (event as any).error\n }\n }\n },\n []\n ];\n }\n\n const effects: LogicEffect<TEvent, TEmitted>[] = [];\n const trackedEffects: Record<string, LogicEffectState> = {};\n const enqueueEffect = (key: string, exec: () => void | (() => void)) => {\n if (snapshot.effects?.[key]) {\n return;\n }\n effects.push({ type: 'effect', key, exec });\n trackedEffects[key] = { status: 'active' };\n };\n const enq: LogicEnqueue<TEvent, TEmitted> = {\n emit: (emitted) => {\n effects.push({ type: 'emit', event: emitted });\n },\n sendBack: (sentEvent) => {\n effects.push({ type: 'sendBack', event: sentEvent });\n },\n raise: (raisedEvent) => {\n effects.push({ type: 'raise', event: raisedEvent });\n },\n effect: ((keyOrExec, maybeExec) => {\n if (typeof keyOrExec === 'string') {\n enqueueEffect(keyOrExec, maybeExec);\n return;\n }\n effects.push({ type: 'effect', exec: keyOrExec });\n }) as LogicEnqueue<TEvent, TEmitted>['effect']\n };\n\n const patch = config.run(\n {\n context: snapshot.context,\n event,\n input: snapshot.input!,\n system: actorScope.system,\n self: actorScope.self as any,\n emit: actorScope.emit\n } as LogicArgs<TContext, TEvent, TInput>,\n enq\n );\n\n const nextSnapshot = {\n ...snapshot,\n ...(patch || {})\n };\n\n if ('context' in snapshot || patch?.context !== undefined) {\n (nextSnapshot as any).context = patch?.context ?? snapshot.context;\n }\n if (patch?.effects || Object.keys(trackedEffects).length) {\n (nextSnapshot as any).effects = {\n ...snapshot.effects,\n ...patch?.effects,\n ...trackedEffects\n };\n }\n\n return [nextSnapshot, effects];\n }) as LogicTransition<TContext, TOutput, TEvent, TInput, TEmitted>;\n\n const logic: LogicActorLogic<TContext, TOutput, TEvent, TInput, TEmitted> = {\n id: config.id,\n config,\n transition,\n start: (snapshot, actorScope) => {\n const [nextSnapshot, effects] = transition(\n snapshot,\n createInitEvent(snapshot.input) as unknown as TEvent,\n actorScope\n );\n Object.assign(snapshot, nextSnapshot);\n executeLogicEffects(effects, actorScope);\n },\n initialTransition: (input, _) => {\n const context = resolveContext(config.context, input);\n const snapshot = {\n status: 'active' as const,\n output: undefined,\n error: undefined,\n input\n };\n\n if (context !== undefined) {\n (snapshot as any).context = context;\n }\n\n return [\n {\n ...snapshot\n } as LogicSnapshot<TContext, TOutput, TInput>,\n []\n ];\n },\n getInitialSnapshot: (actorScope, input) =>\n logic.initialTransition(input, actorScope)[0],\n getPersistedSnapshot: (snapshot) => snapshot,\n restoreSnapshot: (snapshot: any) => snapshot\n };\n\n return logic;\n}\n","import isDevelopment from '#is-development';\nimport type { ActionRecord, SentRecord } from './inspection.ts';\nimport { Mailbox } from './Mailbox.ts';\nimport { XSTATE_STOP } from './constants.ts';\nimport {\n createDoneActorEvent,\n createErrorActorEvent,\n createInitEvent\n} from './eventUtils.ts';\nimport { reportUnhandledError } from './reportUnhandledError.ts';\nimport { symbolObservable } from './symbolObservable.ts';\nimport { AnyActorSystem, Clock, createRuntimeSystem } from './system.ts';\nimport { executeLogicEffects } from './actors/logic.ts';\n\n// those are needed to make JSDoc `@link` work properly\nimport type {\n createObservableLogic,\n createEventObservableLogic\n} from './actors/observable.ts';\nimport type { createCallbackLogic } from './actors/callback.ts';\nimport type { createLogic } from './actors/logic.ts';\nimport type { createAsyncLogic } from './actors/promise.ts';\nimport type { createMachine } from './createMachine.ts';\n\nlet executingCustomAction: boolean = false;\n\nimport type {\n ActorScope,\n AnyActor,\n AnyActorLogic,\n EmittedFrom,\n EventFromLogic,\n SendableEventFromLogic,\n InputFrom,\n Snapshot,\n SnapshotFrom,\n AnyTransitionDefinition,\n ExecutableActionObject,\n Readable\n} from './types.ts';\nimport {\n ActorOptions,\n ActorInstance,\n ActorRef,\n EventObject,\n InteropSubscribable,\n Observer,\n PendingEffect,\n Subscription,\n TimersRestoreStrategy\n} from './types.ts';\nimport { toObserver } from './utils.ts';\n\nexport const $$ACTOR_TYPE = 1;\n\n// those values are currently used by @xstate/react directly so it's important to keep the assigned values in sync\nexport enum ProcessingStatus {\n NotStarted = 0,\n Running = 1,\n Stopped = 2\n}\n\nconst defaultOptions = {\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};\n\nfunction isExecutableActionObject(\n effect: unknown\n): effect is ExecutableActionObject {\n return (\n typeof effect === 'object' &&\n effect !== null &&\n 'args' in effect &&\n 'exec' in effect\n );\n}\n\nfunction executeExecutableEffects(\n effects: readonly unknown[] | undefined,\n actorScope: ActorScope<any, any, any, any>\n): unknown[] {\n if (!effects?.length) {\n return [];\n }\n\n const logicEffects = [];\n for (const effect of effects) {\n if (isExecutableActionObject(effect)) {\n actorScope.actionExecutor(effect);\n } else {\n logicEffects.push(effect);\n }\n }\n return logicEffects;\n}\n\n/**\n * An Actor is a running process that can receive events, send events and change\n * its behavior based on the events it receives, which can cause effects outside\n * of the actor. When you run a state machine, it becomes an actor.\n *\n * An `Actor` is the concrete runtime instance with lifecycle methods and\n * system-owned internals. It also satisfies the narrower `ActorRef` contract,\n * so consumer APIs should accept `ActorRef` when they only need to send events\n * or read snapshots.\n */\nexport class Actor<TLogic extends AnyActorLogic>\n implements\n ActorInstance<\n SnapshotFrom<TLogic>,\n EventFromLogic<TLogic>,\n EmittedFrom<TLogic>,\n SendableEventFromLogic<TLogic>\n >\n{\n /** The current internal state of the actor. */\n private _snapshot!: SnapshotFrom<TLogic>;\n /**\n * The clock that is responsible for setting and clearing timeouts, such as\n * delayed events and transitions.\n */\n public clock: Clock;\n public options: Readonly<ActorOptions<TLogic>>;\n\n /** The unique identifier for this actor relative to its parent. */\n public id: string;\n\n private readonly _boundProcess = this._process.bind(this);\n\n private mailbox: Mailbox<EventFromLogic<TLogic>> = new Mailbox(\n this._boundProcess\n );\n\n private observers: Set<Observer<SnapshotFrom<TLogic>>> = new Set();\n private eventListeners: Map<\n string,\n Set<(emittedEvent: EmittedFrom<TLogic>) => void>\n > = new Map();\n private logger: (...args: any[]) => void;\n\n /** @internal */\n public _processingStatus: ProcessingStatus = ProcessingStatus.NotStarted;\n private _forceDeferredActions = false;\n\n // Actor Ref\n public _parent?: AnyActor;\n /** @internal */\n public _syncSnapshot?: boolean;\n public ref: ActorRef<\n SnapshotFrom<TLogic>,\n EventFromLogic<TLogic>,\n EmittedFrom<TLogic>,\n SendableEventFromLogic<TLogic>\n >;\n // TODO: add typings for system\n private _actorScope: ActorScope<\n SnapshotFrom<TLogic>,\n EventFromLogic<TLogic>,\n AnyActorSystem,\n EmittedFrom<TLogic>,\n SendableEventFromLogic<TLogic>\n >;\n\n /** @internal */\n public _lastSourceRef?: AnyActor;\n /** @internal */\n public _collectedMicrosteps: AnyTransitionDefinition[] = [] as any;\n /** @internal Actions executed during the in-flight transition. */\n public _collectedActions: ActionRecord[] = [];\n /** @internal Events relayed to other actors during the in-flight transition. */\n public _collectedSent: SentRecord[] = [];\n private _initialEffects: unknown[] | undefined;\n public registryKey: string | undefined;\n\n /** The globally unique process ID for this invocation. */\n public sessionId: string;\n\n /** The system to which this actor belongs. */\n public system: AnyActorSystem;\n\n public trigger: {\n [K in SendableEventFromLogic<TLogic>['type']]: {} extends Omit<\n Extract<SendableEventFromLogic<TLogic>, { type: K }>,\n 'type'\n >\n ? () => void\n : (\n payload: Omit<\n Extract<SendableEventFromLogic<TLogic>, { type: K }>,\n 'type'\n >\n ) => void;\n };\n\n public src: string | AnyActorLogic;\n\n /**\n * Creates a new actor instance for the given logic with the provided options,\n * if any.\n *\n * @param logic The logic to create an actor from\n * @param options Actor options\n */\n constructor(\n public logic: TLogic,\n options?: ActorOptions<TLogic>\n ) {\n const resolvedOptions = {\n ...defaultOptions,\n ...options\n };\n\n const { clock, logger, parent, syncSnapshot, id, registryKey, inspect } =\n resolvedOptions;\n\n this.system = parent\n ? parent.system\n : (resolvedOptions._systemRef?.current ??\n createRuntimeSystem(this, {\n clock,\n logger,\n timers: resolvedOptions.timers\n }));\n\n if (\n !parent &&\n resolvedOptions._systemRef &&\n !resolvedOptions._systemRef.current\n ) {\n resolvedOptions._systemRef.current = this.system;\n }\n\n if (inspect && !parent) {\n // Always inspect at the system-level\n this.system.inspect(toObserver(inspect));\n }\n\n this.sessionId = this.system._bookId();\n this.id = id ?? this.sessionId;\n this.logger = options?.logger ?? this.system._logger;\n this.clock = options?.clock ?? this.system._clock;\n this._parent = parent;\n this._syncSnapshot = syncSnapshot;\n this.options = resolvedOptions as ActorOptions<TLogic> &\n typeof defaultOptions;\n this.src = resolvedOptions.src ?? logic;\n this.ref = this;\n this._actorScope = {\n self: this,\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 Actor<AnyActorLogic>)._stop();\n },\n emit: (emittedEvent) => {\n const listeners = this.eventListeners.get(emittedEvent.type);\n const wildcardListener = this.eventListeners.get('*');\n if (!listeners && !wildcardListener) {\n return;\n }\n if (listeners) {\n for (const handler of listeners) {\n try {\n handler(emittedEvent);\n } catch (err) {\n reportUnhandledError(err);\n }\n }\n }\n if (!wildcardListener) {\n return;\n }\n for (const handler of wildcardListener) {\n try {\n handler(emittedEvent);\n } catch (err) {\n reportUnhandledError(err);\n }\n }\n },\n actionExecutor: (action) => {\n const exec = () => {\n // Record every executed action for the '@xstate.transition' inspection\n // event's `actions[]` facet (replaces the v5 '@xstate.action' event).\n this._collectedActions.push({\n type: action.type,\n params: action.params\n });\n if (!action.exec) {\n return;\n }\n const saveExecutingCustomAction = executingCustomAction;\n try {\n executingCustomAction = true;\n\n action.exec();\n } finally {\n executingCustomAction = saveExecutingCustomAction;\n }\n };\n if (\n this._processingStatus === ProcessingStatus.Running &&\n !this._forceDeferredActions\n ) {\n exec();\n } else {\n this._deferred.push(exec);\n }\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.trigger = new Proxy({} as Actor<TLogic>['trigger'], {\n get: (_, eventType: string) => {\n return (payload?: any) => {\n this.send({ ...payload, type: eventType });\n };\n }\n });\n\n // unified '@xstate.transition' event replaces '@xstate.actor'\n\n const resolvedRegistryKey = registryKey;\n\n if (resolvedRegistryKey) {\n this.registryKey = resolvedRegistryKey;\n this.system._set(resolvedRegistryKey, this);\n }\n\n // prepare to collect initial microsteps during initialTransition\n this._collectedMicrosteps = [] as any;\n let persistedState = options?.snapshot ?? options?.state;\n if (\n persistedState &&\n typeof persistedState === 'object' &&\n '_pendingEffects' in persistedState\n ) {\n // Pending effects are restored by this actor on `start()`; the logic\n // only sees the rest of the persisted snapshot.\n const { _pendingEffects, ...rest } = persistedState as any;\n this._pendingEffects = _pendingEffects;\n persistedState = rest;\n }\n try {\n if (persistedState) {\n this._snapshot = this.logic.restoreSnapshot\n ? this.logic.restoreSnapshot(persistedState, this._actorScope)\n : persistedState;\n } else {\n const [snapshot, effects] = this.logic.initialTransition(\n this.options?.input,\n this._actorScope\n );\n this._snapshot = snapshot;\n this._initialEffects = effects;\n }\n } catch (err) {\n // if we get here then it means that we assign a value to this._snapshot that is not of the correct type\n // we can't get the true `TSnapshot & { status: 'error'; }`, it's impossible\n // so right now this is a lie of sorts\n this._snapshot = {\n status: 'error',\n output: undefined,\n error: err\n } as any;\n // discard any functions deferred during the failed initial snapshot\n // computation so they can't run against an inconsistent actor\n this._deferred.length = 0;\n }\n\n if (resolvedRegistryKey && (this._snapshot as any).status !== 'active') {\n this.system._unregister(this);\n }\n\n // Announce actor topology: emitted once for every actor (root and every\n // spawned/invoked child) so the actor graph can be drawn before any\n // transitions occur. This is the only place actor identity is announced.\n this.system._sendInspectionEvent({\n type: '@xstate.actor',\n actorRef: this as any,\n parentRef: this._parent,\n id: this.id,\n src: this.src,\n snapshot: this._snapshot\n });\n }\n\n // array of functions to defer\n private _deferred: Array<() => void> = [];\n\n // pending effects (timers) from a persisted snapshot, rescheduled on `start()`\n private _pendingEffects?: PendingEffect[];\n\n private _setErrorSnapshot(\n err: unknown,\n snapshot: SnapshotFrom<TLogic> = this._snapshot\n ) {\n this._snapshot = {\n ...(snapshot as any),\n status: 'error',\n error: err\n };\n }\n\n private _next(snapshot: SnapshotFrom<TLogic>) {\n for (const observer of this.observers) {\n try {\n observer.next?.(snapshot);\n } catch (err) {\n reportUnhandledError(err);\n }\n }\n }\n\n private update(snapshot: SnapshotFrom<TLogic>, event: EventObject): void {\n // Update state\n this._snapshot = snapshot;\n\n // Execute deferred effects\n for (let i = 0; i < this._deferred.length; i++) {\n const deferredFn = this._deferred[i];\n try {\n deferredFn();\n } catch (err) {\n // this error can only be caught when executing *initial* actions\n // it's the only time when we call actions provided by the user through those deferreds\n // when the actor is already running we always execute them synchronously while transitioning\n // no \"builtin deferred\" should actually throw an error since they are either safe\n // or the control flow is passed through the mailbox and errors should be caught by the `_process` used by the mailbox\n this._deferred.length = 0;\n this._setErrorSnapshot(err, snapshot);\n break;\n }\n }\n this._deferred.length = 0;\n\n switch ((this._snapshot as any).status) {\n case 'active':\n this._next(snapshot);\n break;\n case 'done': {\n // next observers are meant to be notified about done snapshots\n // this can be seen as something that is different from how observable work\n // but with observables `complete` callback is called without any arguments\n // it's more ergonomic for XState to treat a done snapshot as a \"next\" value\n // and the completion event as something that is separate,\n // something that merely follows emitting that done snapshot\n this._next(snapshot);\n\n this._stopProcedure();\n this._complete();\n const doneEvent = createDoneActorEvent(\n this.id,\n (this._snapshot as any).output\n );\n if (this._parent) {\n this.system._relay(this, this._parent, doneEvent);\n }\n\n break;\n }\n case 'error':\n this._error((this._snapshot as any).error);\n break;\n }\n this.system._sendInspectionEvent({\n type: '@xstate.transition',\n actorRef: this as any,\n event,\n sourceRef: this._lastSourceRef,\n targetRef: this as any,\n snapshot,\n microsteps: this._collectedMicrosteps as any,\n actions: this._collectedActions,\n sent: this._collectedSent,\n eventType: event.type\n });\n // reset facets after emission\n this._collectedMicrosteps = [] as any;\n this._collectedActions = [];\n this._collectedSent = [];\n }\n\n private _flushInitialEffects(): boolean {\n if (!this._initialEffects) {\n return true;\n }\n this._forceDeferredActions = true;\n try {\n const logicEffects = executeExecutableEffects(\n this._initialEffects,\n this._actorScope\n );\n executeLogicEffects(logicEffects, this._actorScope);\n this._initialEffects = undefined;\n return true;\n } catch (err) {\n this._initialEffects = undefined;\n this._deferred.length = 0;\n this._setErrorSnapshot(err);\n this._error(err);\n return false;\n } finally {\n this._forceDeferredActions = false;\n }\n }\n\n /**\n * Subscribe an observer to an actor’s snapshot values.\n *\n * @remarks\n * The observer will receive the actor’s snapshot value when it is emitted.\n * The observer can be:\n *\n * - A plain function that receives the latest snapshot, or\n * - An observer object whose `.next(snapshot)` method receives the latest\n * snapshot\n *\n * @example\n *\n * ```ts\n * // Observer as a plain function\n * const subscription = actor.subscribe((snapshot) => {\n * console.log(snapshot);\n * });\n * ```\n *\n * @example\n *\n * ```ts\n * // Observer as an object\n * const subscription = actor.subscribe({\n * next(snapshot) {\n * console.log(snapshot);\n * },\n * error(err) {\n * // ...\n * },\n * complete() {\n * // ...\n * }\n * });\n * ```\n *\n * The return value of `actor.subscribe(observer)` is a subscription object\n * that has an `.unsubscribe()` method. You can call\n * `subscription.unsubscribe()` to unsubscribe the observer:\n *\n * @example\n *\n * ```ts\n * const subscription = actor.subscribe((snapshot) => {\n * // ...\n * });\n *\n * // Unsubscribe the observer\n * subscription.unsubscribe();\n * ```\n *\n * When the actor is stopped, all of its observers will automatically be\n * unsubscribed.\n *\n * @param observer - Either a plain function that receives the latest\n * snapshot, or an observer object whose `.next(snapshot)` method receives\n * the latest snapshot\n */\n public subscribe(observer: Observer<SnapshotFrom<TLogic>>): Subscription;\n public subscribe(\n nextListener?: (snapshot: SnapshotFrom<TLogic>) => void,\n errorListener?: (error: any) => void,\n completeListener?: () => void\n ): Subscription;\n public subscribe(\n nextListenerOrObserver?:\n | ((snapshot: 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._processingStatus !== ProcessingStatus.Stopped) {\n this.observers.add(observer);\n } else {\n switch ((this._snapshot as any).status) {\n case 'done':\n try {\n observer.complete?.();\n } catch (err) {\n reportUnhandledError(err);\n }\n break;\n case 'error': {\n const err = (this._snapshot as any).error;\n if (!observer.error) {\n reportUnhandledError(err);\n } else {\n try {\n observer.error(err);\n } catch (err) {\n reportUnhandledError(err);\n }\n }\n break;\n }\n }\n }\n\n return {\n unsubscribe: () => {\n this.observers.delete(observer);\n }\n };\n }\n\n public on<TType extends EmittedFrom<TLogic>['type'] | '*'>(\n type: TType,\n handler: (\n emitted: EmittedFrom<TLogic> &\n (TType extends '*' ? unknown : { type: TType })\n ) => void\n ): Subscription {\n let listeners = this.eventListeners.get(type);\n if (!listeners) {\n listeners = new Set();\n this.eventListeners.set(type, listeners);\n }\n listeners.add(handler);\n\n return {\n unsubscribe: () => {\n listeners.delete(handler);\n }\n };\n }\n\n public select<TSelected>(\n selector: (snapshot: SnapshotFrom<TLogic>) => TSelected,\n equalityFn: (a: TSelected, b: TSelected) => boolean = Object.is\n ): Readable<TSelected> {\n return {\n subscribe: (\n observerOrFn:\n | Observer<TSelected>\n | ((value: TSelected) => void)\n | undefined,\n errorListener?: (error: any) => void,\n completeListener?: () => void\n ) => {\n const observer = toObserver(\n observerOrFn,\n errorListener,\n completeListener\n );\n let selected = selector(this.getSnapshot());\n return this.subscribe({\n next: (snapshot) => {\n const next = selector(snapshot);\n if (!equalityFn(selected, next)) {\n selected = next;\n observer.next?.(next);\n }\n },\n error: observer.error,\n complete: observer.complete\n });\n },\n get: () => selector(this.getSnapshot())\n };\n }\n\n /** Starts the Actor from the initial state */\n public start(): this {\n if (this._processingStatus === ProcessingStatus.Running) {\n // Do not restart the service if it is already started\n return this;\n }\n\n if (this._syncSnapshot) {\n this.subscribe({\n next: (snapshot: Snapshot<unknown>) => {\n if (snapshot.status === 'active') {\n this.system._relay(this, this._parent!, {\n type: `xstate.snapshot.${this.id}`,\n snapshot\n });\n }\n },\n error: () => {}\n });\n }\n\n this.system._register(this.sessionId, this);\n if (this.registryKey) {\n this.system._set(this.registryKey, this);\n }\n this._processingStatus = ProcessingStatus.Running;\n\n // TODO: this isn't correct when rehydrating\n const initEvent = createInitEvent(this.options.input);\n // remember source of init as parent for unified transition event\n this._lastSourceRef = this._parent;\n\n const status = (this._snapshot as any).status;\n\n switch (status) {\n case 'done':\n // a state machine can be \"done\" upon initialization (it could reach a final state using initial microsteps)\n // we still need to complete observers, flush deferreds etc\n if (!this._flushInitialEffects()) {\n return this;\n }\n this.update(\n this._snapshot,\n initEvent as unknown as EventFromLogic<TLogic>\n );\n // TODO: rethink cleanup of observers, mailbox, etc\n return this;\n case 'error':\n this._error((this._snapshot as any).error);\n return this;\n }\n\n if (!this._parent) {\n this.system.start();\n }\n\n if (this.logic.start) {\n try {\n this.logic.start(this._snapshot, this._actorScope);\n } catch (err) {\n this._setErrorSnapshot(err);\n this._error(err);\n return this;\n }\n }\n\n if (!this._flushInitialEffects()) {\n return this;\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._snapshot, initEvent as unknown as EventFromLogic<TLogic>);\n\n if (this._pendingEffects) {\n const strategy =\n this.options.timers ?? this.system._timerStrategy ?? 'resume';\n for (const effect of this._pendingEffects) {\n // Re-execute the pending effect with its remaining delay. Only\n // self-targeted raises exist today; other effect types are ignored.\n if (effect.type === '@xstate.raise') {\n this.system.scheduler.schedule(\n this,\n this,\n effect.event,\n resolveRestoredTimerDelay(strategy, effect),\n effect.id\n );\n }\n }\n this._pendingEffects = undefined;\n }\n\n this.mailbox.start();\n\n return this;\n }\n\n private _process(event: EventFromLogic<TLogic>) {\n let nextState: any;\n let caughtError;\n try {\n nextState = this.logic.transition(\n this._snapshot,\n event,\n this._actorScope\n );\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._setErrorSnapshot(err);\n this._error(err);\n return;\n }\n\n try {\n const [snapshot, effects] = nextState;\n const logicEffects = executeExecutableEffects(effects, this._actorScope);\n this.update(snapshot, event);\n executeLogicEffects(logicEffects, this._actorScope);\n } catch (err) {\n this._setErrorSnapshot(err);\n this._error(err);\n return;\n }\n\n if (event.type === XSTATE_STOP) {\n this._stopProcedure();\n this._complete();\n }\n }\n\n /** @internal */\n public _stop(): this {\n if (this._processingStatus === ProcessingStatus.Stopped) {\n return this;\n }\n this.mailbox.clear();\n if (this._processingStatus === ProcessingStatus.NotStarted) {\n this._processingStatus = ProcessingStatus.Stopped;\n return this;\n }\n this.mailbox.enqueue({ type: XSTATE_STOP } as any);\n this.system._unregister(this);\n\n return this;\n }\n\n /** Stops the Actor and unsubscribe all listeners. */\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 this.eventListeners.clear();\n }\n\n private _error(err: unknown): void {\n this._stopProcedure();\n if (!this.observers.size) {\n if (!this._parent) {\n reportUnhandledError(err);\n }\n this.eventListeners.clear();\n } else {\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 this.eventListeners.clear();\n if (reportError) {\n reportUnhandledError(err);\n }\n }\n\n if (this._parent) {\n this.system._relay(\n this,\n this._parent,\n createErrorActorEvent(this.id, err)\n );\n }\n }\n // TODO: atm children don't belong entirely to the actor so\n // in a way - it's not even super aware of them\n // so we can't stop them from here but we really should!\n // right now, they are being stopped within the machine's transition\n // but that could throw and leave us with \"orphaned\" active actors\n private _stopProcedure(): void {\n if (this._processingStatus !== ProcessingStatus.Running) {\n // Actor already stopped; do nothing\n return;\n }\n\n // Cancel all delayed events\n this.system.scheduler.cancelAll(this);\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._boundProcess);\n\n this._processingStatus = ProcessingStatus.Stopped;\n this.system._unregister(this);\n }\n\n /** @internal */\n public _send(event: EventFromLogic<TLogic>) {\n if (this._processingStatus === ProcessingStatus.Stopped) {\n // do nothing\n if (isDevelopment) {\n // TODO: circular serialization issues\n // const eventString = ''; //JSON.stringify(event);\n\n console.warn(\n `Event \"${event.type}\" was sent to stopped actor \"${this.id} (${this.sessionId})\". This actor has already reached its final state, and will not transition.`\n );\n }\n return;\n }\n\n this.mailbox.enqueue(event);\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: SendableEventFromLogic<TLogic>) {\n if (isDevelopment && typeof event === 'string') {\n throw new Error(\n `Only event objects may be sent to actors; use .send({ type: \"${event}\" }) instead`\n );\n }\n this.system._relay(undefined, this, event);\n }\n\n public toJSON() {\n return {\n xstate$$type: $$ACTOR_TYPE,\n id: this.id\n };\n }\n\n /**\n * Obtain the internal state of the actor, which can be persisted.\n *\n * @remarks\n * The internal state can be persisted from any actor, not only machines.\n *\n * Note that the persisted state is not the same as the snapshot from\n * {@link Actor.getSnapshot}. Persisted state represents the internal state of\n * the actor, while snapshots represent the actor's last emitted value.\n *\n * Can be restored with {@link ActorOptions.state}\n * @see https://stately.ai/docs/persistence\n */\n public getPersistedSnapshot(): Snapshot<unknown>;\n public getPersistedSnapshot(options?: unknown): Snapshot<unknown> {\n const persisted = this.logic.getPersistedSnapshot(this._snapshot, options);\n\n // Capture this actor's pending self-targeted effects (delayed\n // events/transitions) as serialized action descriptors plus their\n // runtime progress, so they can be restored on `start()`.\n const scheduledEvents = this.system._snapshot._scheduledEvents;\n let pendingEffects: PendingEffect[] | undefined;\n const now = Date.now();\n for (const key in scheduledEvents) {\n const scheduled = scheduledEvents[key as keyof typeof scheduledEvents];\n if (scheduled.source === this && scheduled.target === this) {\n (pendingEffects ??= []).push({\n type: '@xstate.raise',\n event: scheduled.event,\n id: scheduled.id,\n delay: scheduled.delay,\n startedAt: scheduled.startedAt,\n elapsed: Math.max(0, now - scheduled.startedAt)\n });\n }\n }\n\n // If this actor was restored but not yet started, its pending effects\n // are not in the scheduler yet — carry them through as-is.\n pendingEffects ??= this._pendingEffects;\n\n return pendingEffects\n ? ({\n ...(persisted as any),\n _pendingEffects: pendingEffects\n } as Snapshot<unknown>)\n : persisted;\n }\n\n public [symbolObservable](): InteropSubscribable<SnapshotFrom<TLogic>> {\n return this;\n }\n\n /**\n * Read an actor’s snapshot synchronously.\n *\n * @remarks\n * The snapshot represent an actor's last emitted value.\n *\n * When an actor receives an event, its internal state may change. An actor\n * may emit a snapshot when a state transition occurs.\n *\n * Note that some actors, such as callback actors generated with\n * `createCallbackLogic`, will not emit snapshots.\n * @see {@link Actor.subscribe} to subscribe to an actor’s snapshot values.\n * @see {@link Actor.getPersistedSnapshot} to persist the internal state of an actor (which is more than just a snapshot).\n */\n public getSnapshot(): SnapshotFrom<TLogic> {\n if (isDevelopment && !this._snapshot) {\n throw new Error(\n `Snapshot can't be read while the actor initializes itself`\n );\n }\n return this._snapshot;\n }\n}\n\nfunction resolveRestoredTimerDelay(\n strategy: TimersRestoreStrategy,\n effect: PendingEffect\n): number {\n if (typeof strategy === 'function') {\n return strategy(effect);\n }\n switch (strategy) {\n case 'restart':\n return effect.delay;\n case 'absolute':\n return Math.max(0, effect.startedAt + effect.delay - Date.now());\n case 'resume':\n default:\n return Math.max(0, effect.delay - effect.elapsed);\n }\n}\n\nexport type RequiredActorOptionsKeys<TLogic extends AnyActorLogic> =\n undefined extends InputFrom<TLogic> ? never : 'input';\n\n/**\n * Creates a new actor instance for the given actor logic with the provided\n * options, if any.\n *\n * @remarks\n * When you create an actor from actor logic via `createActor(logic)`, you\n * implicitly create an actor system where the created actor is the root actor.\n * Any actors spawned from this root actor and its descendants are part of that\n * actor system.\n * @example\n *\n * ```ts\n * import { createActor } from 'xstate';\n * import { someActorLogic } from './someActorLogic.ts';\n *\n * // Creating the actor, which implicitly creates an actor system with itself as the root actor\n * const actor = createActor(someActorLogic);\n *\n * actor.subscribe((snapshot) => {\n * console.log(snapshot);\n * });\n *\n * // Actors must be started by calling `actor.start()`, which will also start the actor system.\n * actor.start();\n *\n * // Actors can receive events\n * actor.send({ type: 'someEvent' });\n *\n * // You can stop root actors by calling `actor.stop()`, which will also stop the actor system and all actors in that system.\n * actor.stop();\n * ```\n *\n * @param logic - The actor logic to create an actor from. For a state machine\n * actor logic creator, see {@link createMachine}. Other actor logic creators\n * include {@link createCallbackLogic}, {@link createEventObservableLogic},\n * {@link createObservableLogic}, {@link createLogic}, and\n * {@link createAsyncLogic}.\n * @param options - Actor options\n */\nexport function createActor<TLogic extends AnyActorLogic>(\n logic: TLogic,\n options?: ActorOptions<TLogic> & {\n [K in RequiredActorOptionsKeys<TLogic>]: unknown;\n }\n): Actor<TLogic> {\n return new Actor(logic, options);\n}\n","import { AnyActorSystem } from '../system.ts';\nimport {\n ActorLogic,\n ActorRefFromLogic,\n AnyActorRef,\n AnyEventObject,\n EventObject,\n NonReducibleUnknown,\n Snapshot\n} from '../types';\nimport { StandardSchemaV1 } from '../schema.types.ts';\nimport { createLogic as createBaseLogic } from './logic.ts';\n\ninterface CallbackInstanceState<TEvent extends EventObject> {\n receivers: Set<(e: TEvent) => void> | undefined;\n dispose: (() => void) | void;\n}\n\nconst instanceStates = /* #__PURE__ */ new WeakMap<\n AnyActorRef,\n CallbackInstanceState<any>\n>();\n\nexport type CallbackSnapshot<TInput> = Snapshot<undefined> & {\n input: TInput;\n effects?: Record<\n string,\n | { status: 'active' }\n | { status: 'done'; output?: unknown }\n | { status: 'error'; error: unknown }\n >;\n};\n\nexport type CallbackActorLogic<\n TEvent extends EventObject,\n TInput = NonReducibleUnknown,\n TEmitted extends EventObject = EventObject\n> = ActorLogic<\n CallbackSnapshot<TInput>,\n TEvent,\n TInput,\n AnyActorSystem,\n TEmitted\n>;\n\n/**\n * Represents an actor created by `createCallbackLogic`.\n *\n * The type of `self` within the actor's logic.\n *\n * @example\n *\n * ```ts\n * import { createCallbackLogic, createActor } from 'xstate';\n *\n * // The events the actor receives.\n * type Event = { type: 'someEvent' };\n * // The actor's input.\n * type Input = { name: string };\n *\n * // Actor logic that logs whenever it receives an event of type `someEvent`.\n * const logic = createCallbackLogic<Event, Input>(\n * ({ self, input, receive }) => {\n * self;\n * // ^? CallbackActorRef<Event, Input>\n *\n * receive((event) => {\n * if (event.type === 'someEvent') {\n * console.log(`${input.name}: received \"someEvent\" event`);\n * // logs 'myActor: received \"someEvent\" event'\n * }\n * });\n * }\n * );\n *\n * const actor = createActor(logic, { input: { name: 'myActor' } });\n * // ^? CallbackActorRef<Event, Input>\n * ```\n *\n * @see {@link createCallbackLogic}\n */\nexport type CallbackActorRef<\n TEvent extends EventObject,\n TInput = NonReducibleUnknown\n> = ActorRefFromLogic<CallbackActorLogic<TEvent, TInput>>;\n\ntype Receiver<TEvent extends EventObject> = (\n listener: {\n bivarianceHack(event: TEvent): void;\n }['bivarianceHack']\n) => void;\n\nexport type CallbackLogicFunction<\n TEvent extends EventObject = AnyEventObject,\n TSentEvent extends EventObject = AnyEventObject,\n TInput = NonReducibleUnknown,\n TEmitted extends EventObject = EventObject\n> = ({\n input,\n system,\n self,\n sendBack,\n receive,\n emit\n}: {\n /**\n * Data that was provided to the callback actor\n *\n * @see {@link https://stately.ai/docs/input | Input docs}\n */\n input: TInput;\n /** The actor system to which the callback actor belongs */\n system: AnyActorSystem;\n /** The parent actor of the callback actor */\n self: CallbackActorRef<TEvent>;\n /** A function that can send events back to the parent actor */\n sendBack: (event: TSentEvent) => void;\n /**\n * A function that can be called with a listener function argument; the\n * listener is then called whenever events are received by the callback actor\n */\n receive: Receiver<TEvent>;\n emit: (emitted: TEmitted) => void;\n}) => (() => void) | void;\n\nexport interface CallbackLogicConfig<\n TEvent extends EventObject = AnyEventObject,\n TSentEvent extends EventObject = AnyEventObject,\n TInput = NonReducibleUnknown,\n TEmitted extends EventObject = EventObject,\n TInputSchema extends StandardSchemaV1 = StandardSchemaV1\n> {\n schemas?: {\n input?: TInputSchema;\n };\n run: CallbackLogicFunction<TEvent, TSentEvent, TInput, TEmitted>;\n}\n\n/**\n * An actor logic creator which returns callback logic as defined by a callback\n * function.\n *\n * @remarks\n * Useful for subscription-based or other free-form logic that can send events\n * back to the parent actor.\n *\n * Actors created from callback logic (“callback actors”) can:\n *\n * - Receive events via the `receive` function\n * - Send events to the parent actor via the `sendBack` function\n *\n * Callback actors are a bit different from other actors in that they:\n *\n * - Do not work with `onDone`\n * - Do not produce a snapshot using `.getSnapshot()`\n * - Do not emit values when used with `.subscribe()`\n * - Can not be stopped with `.stop()`\n *\n * @example\n *\n * ```typescript\n * const callbackLogic = createCallbackLogic(({ sendBack, receive }) => {\n * let lockStatus = 'unlocked';\n *\n * const handler = (event) => {\n * if (lockStatus === 'locked') {\n * return;\n * }\n * sendBack(event);\n * };\n *\n * receive((event) => {\n * if (event.type === 'lock') {\n * lockStatus = 'locked';\n * } else if (event.type === 'unlock') {\n * lockStatus = 'unlocked';\n * }\n * });\n *\n * document.body.addEventListener('click', handler);\n *\n * return () => {\n * document.body.removeEventListener('click', handler);\n * };\n * });\n * ```\n *\n * @param callback - The callback function used to describe the callback logic\n * The callback function is passed an object with the following properties:\n *\n * - `receive` - A function that can send events back to the parent actor; the\n * listener is then called whenever events are received by the callback\n * actor\n * - `sendBack` - A function that can send events back to the parent actor\n * - `input` - Data that was provided to the callback actor\n * - `self` - The parent actor of the callback actor\n * - `system` - The actor system to which the callback actor belongs The callback\n * function can (optionally) return a cleanup function, which is called\n * when the actor is stopped.\n *\n * @returns Callback logic\n * @see {@link CallbackLogicFunction} for more information about the callback function and its object argument\n * @see {@link https://stately.ai/docs/input | Input docs} for more information about how input is passed\n */\nexport function createCallbackLogic<\n TEvent extends EventObject,\n const TInputSchema extends StandardSchemaV1,\n TEmitted extends EventObject = EventObject\n>(\n config: CallbackLogicConfig<\n TEvent,\n AnyEventObject,\n StandardSchemaV1.InferOutput<TInputSchema>,\n TEmitted,\n TInputSchema\n > & {\n schemas: {\n input: TInputSchema;\n };\n }\n): CallbackActorLogic<\n TEvent,\n StandardSchemaV1.InferOutput<TInputSchema>,\n TEmitted\n>;\nexport function createCallbackLogic<\n TEvent extends EventObject,\n TInput = NonReducibleUnknown,\n TEmitted extends EventObject = EventObject\n>(\n config: CallbackLogicConfig<TEvent, AnyEventObject, TInput, TEmitted> & {\n schemas?: undefined;\n }\n): CallbackActorLogic<TEvent, TInput, TEmitted>;\nexport function createCallbackLogic<\n TEvent extends EventObject,\n TInput = NonReducibleUnknown,\n TEmitted extends EventObject = EventObject\n>(\n callback: CallbackLogicFunction<TEvent, AnyEventObject, TInput, TEmitted>\n): CallbackActorLogic<TEvent, TInput, TEmitted>;\nexport function createCallbackLogic<\n TEvent extends EventObject,\n TInput = NonReducibleUnknown,\n TEmitted extends EventObject = EventObject\n>(\n callbackOrConfig:\n | CallbackLogicFunction<TEvent, AnyEventObject, TInput, TEmitted>\n | CallbackLogicConfig<TEvent, AnyEventObject, TInput, TEmitted>\n): CallbackActorLogic<TEvent, TInput, TEmitted> {\n const callback =\n typeof callbackOrConfig === 'function'\n ? callbackOrConfig\n : callbackOrConfig.run;\n const schemas =\n typeof callbackOrConfig === 'function'\n ? undefined\n : callbackOrConfig.schemas;\n\n return createBaseLogic<undefined, undefined, TEvent, TInput, TEmitted>({\n schemas,\n context: undefined,\n run: (args, enq) => {\n const { event, input, self, system } = args;\n const emit = (args as any).emit as (emitted: TEmitted) => void;\n const callbackState = instanceStates.get(self as any);\n callbackState?.receivers?.forEach((receiver) => receiver(event));\n\n enq.effect('callback', () => {\n const callbackState: CallbackInstanceState<TEvent> = {\n receivers: undefined,\n dispose: undefined\n };\n\n instanceStates.set(self as any, callbackState);\n\n callbackState.dispose = callback({\n input,\n system,\n self: self as any,\n sendBack: (event) => {\n if (self.getSnapshot().status === 'stopped') {\n return;\n }\n const parent = (self as any)._parent;\n if (parent) {\n system._relay(self as any, parent, event);\n }\n },\n receive: (listener) => {\n callbackState.receivers ??= new Set();\n callbackState.receivers.add(listener);\n },\n emit: emit as (emitted: TEmitted) => void\n });\n\n return () => {\n instanceStates.delete(self as any);\n callbackState.receivers?.clear();\n callbackState.dispose?.();\n };\n });\n }\n }) as unknown as CallbackActorLogic<TEvent, TInput, TEmitted>;\n}\n","import { XSTATE_STOP } from '../constants';\nimport { StandardSchemaV1 } from '../schema.types.ts';\nimport { AnyActorSystem } from '../system.ts';\nimport {\n ActorLogic,\n ActorFromLogic,\n ActorRefFromLogic,\n AnyActor,\n EventObject,\n NonReducibleUnknown,\n Snapshot,\n Subscribable,\n Subscription\n} from '../types';\nimport { createLogic as createBaseLogic } from './logic.ts';\n\nconst XSTATE_OBSERVABLE_NEXT = 'xstate.observable.next';\nconst XSTATE_OBSERVABLE_ERROR = 'xstate.observable.error';\nconst XSTATE_OBSERVABLE_COMPLETE = 'xstate.observable.complete';\n\nexport type ObservableSnapshot<\n TContext,\n TInput extends NonReducibleUnknown\n> = Snapshot<undefined> & {\n context: TContext | undefined;\n input: TInput | undefined;\n effects?: Record<\n string,\n | { status: 'active' }\n | { status: 'done'; output?: unknown }\n | { status: 'error'; error: unknown }\n >;\n _subscription: Subscription | undefined;\n};\n\nexport type ObservableActorLogic<\n TContext,\n TInput extends NonReducibleUnknown,\n TEmitted extends EventObject = EventObject\n> = ActorLogic<\n ObservableSnapshot<TContext, TInput>,\n { type: string; [k: string]: unknown },\n TInput,\n AnyActorSystem,\n TEmitted\n>;\n\n/**\n * Represents an actor created by `createObservableLogic` or\n * `createEventObservableLogic`.\n *\n * The type of `self` within the actor's logic.\n *\n * @example\n *\n * ```ts\n * import { createObservableLogic, createActor } from 'xstate';\n * import { interval } from 'rxjs';\n *\n * // The type of the value observed by the actor's logic.\n * type Context = number;\n * // The actor's input.\n * type Input = { period?: number };\n *\n * // Actor logic that observes a number incremented every `input.period`\n * // milliseconds (default: 1_000).\n * const logic = createObservableLogic<Context, Input>(\n * ({ input, self }) => {\n * self;\n * // ^? ObservableActor<Event, Input>\n *\n * return interval(input.period ?? 1_000);\n * }\n * );\n *\n * const actor = createActor(logic, { input: { period: 2_000 } });\n * // ^? ObservableActor<Event, Input>\n * ```\n *\n * @see {@link createObservableLogic}\n * @see {@link createEventObservableLogic}\n */\nexport type ObservableActorRef<TContext> = ActorRefFromLogic<\n ObservableActorLogic<TContext, any>\n>;\n\ntype ObservableActor<\n TContext,\n TInput extends NonReducibleUnknown = any,\n TEmitted extends EventObject = EventObject\n> = ActorFromLogic<ObservableActorLogic<TContext, TInput, TEmitted>>;\n\nexport type ObservableLogicFunction<\n TContext,\n TInput extends NonReducibleUnknown,\n TEmitted extends EventObject = EventObject\n> = ({\n input,\n system,\n self,\n emit\n}: {\n input: TInput;\n system: AnyActorSystem;\n self: ObservableActor<TContext, TInput, TEmitted>;\n emit: (emitted: TEmitted) => void;\n}) => Subscribable<TContext>;\n\nexport interface ObservableLogicConfig<\n TContext,\n TInput extends NonReducibleUnknown,\n TEmitted extends EventObject = EventObject,\n TInputSchema extends StandardSchemaV1 = StandardSchemaV1\n> {\n schemas?: {\n input?: TInputSchema;\n };\n run: ObservableLogicFunction<TContext, TInput, TEmitted>;\n}\n\nexport type EventObservableLogicFunction<\n TEvent extends EventObject,\n TInput extends NonReducibleUnknown,\n TEmitted extends EventObject = EventObject\n> = ({\n input,\n system,\n self,\n emit\n}: {\n input: TInput;\n system: AnyActorSystem;\n self: ObservableActor<TEvent, TInput, TEmitted>;\n emit: (emitted: TEmitted) => void;\n}) => Subscribable<TEvent>;\n\nexport interface EventObservableLogicConfig<\n TEvent extends EventObject,\n TInput extends NonReducibleUnknown,\n TEmitted extends EventObject = EventObject,\n TInputSchema extends StandardSchemaV1 = StandardSchemaV1\n> {\n schemas?: {\n input?: TInputSchema;\n };\n run: EventObservableLogicFunction<TEvent, TInput, TEmitted>;\n}\n\n/**\n * Observable actor logic is described by an observable stream of values. Actors\n * created from observable logic (“observable actors”) can:\n *\n * - Emit snapshots of the observable’s emitted value\n *\n * The observable’s emitted value is used as its observable actor’s `context`.\n *\n * Sending events to observable actors will have no effect.\n *\n * @example\n *\n * ```ts\n * import { createObservableLogic, createActor } from 'xstate';\n * import { interval } from 'rxjs';\n *\n * const logic = createObservableLogic((obj) => interval(1000));\n *\n * const actor = createActor(logic);\n *\n * actor.subscribe((snapshot) => {\n * console.log(snapshot.context);\n * });\n *\n * actor.start();\n * // At every second:\n * // Logs 0\n * // Logs 1\n * // Logs 2\n * // ...\n * ```\n *\n * @param observableCreator A function that creates an observable. It receives\n * one argument, an object with the following properties:\n *\n * - `input` - Data that was provided to the observable actor\n * - `self` - The parent actor\n * - `system` - The actor system to which the observable actor belongs\n *\n * It should return a {@link Subscribable}, which is compatible with an RxJS\n * Observable, although RxJS is not required to create them.\n * @see {@link https://rxjs.dev} for documentation on RxJS Observable and observable creators.\n * @see {@link Subscribable} interface in XState, which is based on and compatible with RxJS Observable.\n */\nexport function createObservableLogic<\n TContext,\n const TInputSchema extends StandardSchemaV1,\n TEmitted extends EventObject = EventObject\n>(\n config: ObservableLogicConfig<\n TContext,\n StandardSchemaV1.InferOutput<TInputSchema>,\n TEmitted,\n TInputSchema\n > & {\n schemas: {\n input: TInputSchema;\n };\n }\n): ObservableActorLogic<\n TContext,\n StandardSchemaV1.InferOutput<TInputSchema>,\n TEmitted\n>;\nexport function createObservableLogic<\n TContext,\n TInput extends NonReducibleUnknown,\n TEmitted extends EventObject = EventObject\n>(\n config: ObservableLogicConfig<TContext, TInput, TEmitted> & {\n schemas?: undefined;\n }\n): ObservableActorLogic<TContext, TInput, TEmitted>;\nexport function createObservableLogic<\n TContext,\n TInput extends NonReducibleUnknown,\n TEmitted extends EventObject = EventObject\n>(\n observableCreator: ObservableLogicFunction<TContext, TInput, TEmitted>\n): ObservableActorLogic<TContext, TInput, TEmitted>;\nexport function createObservableLogic<\n TContext,\n TInput extends NonReducibleUnknown,\n TEmitted extends EventObject = EventObject\n>(\n observableCreatorOrConfig:\n | ObservableLogicFunction<TContext, TInput, TEmitted>\n | ObservableLogicConfig<TContext, TInput, TEmitted>\n): ObservableActorLogic<TContext, TInput, TEmitted> {\n const observableCreator =\n typeof observableCreatorOrConfig === 'function'\n ? observableCreatorOrConfig\n : observableCreatorOrConfig.run;\n const schemas =\n typeof observableCreatorOrConfig === 'function'\n ? undefined\n : observableCreatorOrConfig.schemas;\n\n return createBaseLogic<\n TContext | undefined,\n undefined,\n { type: string; [k: string]: unknown },\n TInput,\n TEmitted\n >({\n schemas,\n context: undefined,\n run: (args, enq) => {\n const { event, input, self, system } = args;\n const emit = (args as any).emit as (emitted: TEmitted) => void;\n switch (event.type) {\n case XSTATE_OBSERVABLE_NEXT: {\n return {\n context: event.data as TContext\n };\n }\n case XSTATE_OBSERVABLE_ERROR:\n return {\n status: 'error',\n error: (event as any).data,\n input: undefined as TInput | undefined,\n effects: {\n observable: { status: 'error', error: (event as any).data }\n }\n };\n case XSTATE_OBSERVABLE_COMPLETE:\n return {\n status: 'done',\n input: undefined as TInput | undefined,\n effects: {\n observable: { status: 'done' }\n }\n };\n }\n\n enq.effect('observable', () => {\n const actorSelf = self as unknown as AnyActor;\n const subscription = observableCreator({\n input,\n system,\n self: self as any,\n emit: emit as (emitted: TEmitted) => void\n }).subscribe({\n next: (value) => {\n system._relay(actorSelf, actorSelf, {\n type: XSTATE_OBSERVABLE_NEXT,\n data: value\n });\n },\n error: (err) => {\n system._relay(actorSelf, actorSelf, {\n type: XSTATE_OBSERVABLE_ERROR,\n data: err\n });\n },\n complete: () => {\n system._relay(actorSelf, actorSelf, {\n type: XSTATE_OBSERVABLE_COMPLETE\n });\n }\n });\n\n return () => subscription.unsubscribe();\n });\n }\n }) as unknown as ObservableActorLogic<TContext, TInput, TEmitted>;\n}\n\n/**\n * Creates event observable logic that listens to an observable that delivers\n * event objects.\n *\n * Event observable actor logic is described by an observable stream of\n * {@link https://stately.ai/docs/transitions#event-objects | event objects}.\n * Actors created from event observable logic (“event observable actors”) can:\n *\n * - Implicitly send events to its parent actor\n * - Emit snapshots of its emitted event objects\n *\n * Sending events to event observable actors will have no effect.\n *\n * @example\n *\n * ```ts\n * import {\n * createEventObservableLogic,\n * Subscribable,\n * EventObject,\n * createMachine,\n * createActor\n * } from 'xstate';\n * import { fromEvent } from 'rxjs';\n *\n * const mouseClickLogic = createEventObservableLogic(\n * () => fromEvent(document.body, 'click') as Subscribable<EventObject>\n * );\n *\n * const canvasMachine = createMachine({\n * invoke: {\n * // Will send mouse `click` events to the canvas actor\n * src: mouseClickLogic\n * }\n * });\n *\n * const canvasActor = createActor(canvasMachine);\n * canvasActor.start();\n * ```\n *\n * @param lazyObservable A function that creates an observable that delivers\n * event objects. It receives one argument, an object with the following\n * properties:\n *\n * - `input` - Data that was provided to the event observable actor\n * - `self` - The parent actor\n * - `system` - The actor system to which the event observable actor belongs.\n *\n * It should return a {@link Subscribable}, which is compatible with an RxJS\n * Observable, although RxJS is not required to create them.\n */\nexport function createEventObservableLogic<\n TEvent extends EventObject,\n const TInputSchema extends StandardSchemaV1,\n TEmitted extends EventObject = EventObject\n>(\n config: EventObservableLogicConfig<\n TEvent,\n StandardSchemaV1.InferOutput<TInputSchema>,\n TEmitted,\n TInputSchema\n > & {\n schemas: {\n input: TInputSchema;\n };\n }\n): ObservableActorLogic<\n TEvent,\n StandardSchemaV1.InferOutput<TInputSchema>,\n TEmitted\n>;\nexport function createEventObservableLogic<\n TEvent extends EventObject,\n TInput extends NonReducibleUnknown,\n TEmitted extends EventObject = EventObject\n>(\n config: EventObservableLogicConfig<TEvent, TInput, TEmitted> & {\n schemas?: undefined;\n }\n): ObservableActorLogic<TEvent, TInput, TEmitted>;\nexport function createEventObservableLogic<\n TEvent extends EventObject,\n TInput extends NonReducibleUnknown,\n TEmitted extends EventObject = EventObject\n>(\n lazyObservable: EventObservableLogicFunction<TEvent, TInput, TEmitted>\n): ObservableActorLogic<TEvent, TInput, TEmitted>;\nexport function createEventObservableLogic<\n TEvent extends EventObject,\n TInput extends NonReducibleUnknown,\n TEmitted extends EventObject = EventObject\n>(\n lazyObservableOrConfig:\n | EventObservableLogicFunction<TEvent, TInput, TEmitted>\n | EventObservableLogicConfig<TEvent, TInput, TEmitted>\n): ObservableActorLogic<TEvent, TInput, TEmitted> {\n const lazyObservable =\n typeof lazyObservableOrConfig === 'function'\n ? lazyObservableOrConfig\n : lazyObservableOrConfig.run;\n\n // TODO: event types\n const logic: ObservableActorLogic<TEvent, TInput, TEmitted> = {\n config: lazyObservable,\n transition: (state, event) => {\n if (state.status !== 'active') {\n return [state, []];\n }\n\n switch (event.type) {\n case XSTATE_OBSERVABLE_ERROR:\n return [\n {\n ...state,\n status: 'error',\n error: (event as any).data,\n input: undefined,\n _subscription: undefined\n },\n []\n ];\n case XSTATE_OBSERVABLE_COMPLETE:\n return [\n {\n ...state,\n status: 'done',\n input: undefined,\n _subscription: undefined\n },\n []\n ];\n case XSTATE_STOP:\n state._subscription!.unsubscribe();\n return [\n {\n ...state,\n status: 'stopped',\n input: undefined,\n _subscription: undefined\n },\n []\n ];\n default:\n return [state, []];\n }\n },\n initialTransition: (input, _) => [\n {\n status: 'active',\n output: undefined,\n error: undefined,\n context: undefined,\n input,\n _subscription: undefined\n },\n []\n ],\n getInitialSnapshot: (actorScope, input) =>\n logic.initialTransition(input, actorScope)[0],\n start: (state, { self, system, emit }) => {\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 emit\n }).subscribe({\n next: (value) => {\n if (self._parent) {\n system._relay(self, self._parent, value);\n }\n },\n error: (err) => {\n system._relay(self, self, {\n type: XSTATE_OBSERVABLE_ERROR,\n data: err\n });\n },\n complete: () => {\n system._relay(self, self, { type: XSTATE_OBSERVABLE_COMPLETE });\n }\n });\n },\n getPersistedSnapshot: ({ _subscription, ...snapshot }) => snapshot,\n restoreSnapshot: (snapshot: any) => ({\n ...snapshot,\n _subscription: undefined\n })\n };\n\n return logic;\n}\n","import { parseDelayToMilliseconds } from '../delay.ts';\nimport { XSTATE_INIT } from '../constants.ts';\nimport { StandardSchemaV1 } from '../schema.types.ts';\nimport { AnyActorSystem } from '../system.ts';\nimport {\n ActorLogic,\n ActorFromLogic,\n ActorRefFromLogic,\n AnyActor,\n EventObject,\n NonReducibleUnknown,\n Snapshot\n} from '../types.ts';\nimport {\n XSTATE_LOGIC_EFFECT_REJECT,\n XSTATE_LOGIC_EFFECT_RESOLVE,\n XSTATE_LOGIC_EFFECT_START,\n createLogic as createBaseLogic\n} from './logic.ts';\n\nexport type AsyncSnapshot<TOutput, TInput> = Snapshot<TOutput> & {\n input: TInput | undefined;\n effects?: Record<\n string,\n | { status: 'active' }\n | { status: 'done'; output?: unknown }\n | { status: 'error'; error: unknown }\n >;\n};\n\nconst XSTATE_ASYNC_RESOLVE = 'xstate.async.resolve';\nconst XSTATE_ASYNC_REJECT = 'xstate.async.reject';\n\nexport type AsyncActorLogic<\n TOutput,\n TInput = unknown,\n TEmitted extends EventObject = EventObject\n> = ActorLogic<\n AsyncSnapshot<TOutput, TInput>,\n { type: string; [k: string]: unknown },\n TInput,\n AnyActorSystem,\n TEmitted\n>;\n\nexport type AsyncActorRef<TOutput> = ActorRefFromLogic<\n AsyncActorLogic<TOutput, unknown>\n>;\n\ntype AsyncActor<\n TOutput,\n TInput = unknown,\n TEmitted extends EventObject = EventObject\n> = ActorFromLogic<AsyncActorLogic<TOutput, TInput, TEmitted>>;\n\nexport interface LogicArgs<TOutput, TInput> {\n /** Data that was provided to the async actor. */\n input: TInput;\n /** The actor system to which the async actor belongs. */\n system: AnyActorSystem;\n /** The async actor. */\n self: AsyncActor<TOutput, TInput>;\n /** Aborted when the async actor is stopped or times out. */\n signal: AbortSignal;\n}\n\nexport interface LogicEnqueue<TEmitted extends EventObject> {\n /** Emits an event that can be observed with `actor.on(...)`. */\n emit: (emitted: TEmitted) => void;\n /**\n * Executes async work as a durable effect keyed by `key`.\n *\n * @experimental The durability semantics (step journaling, replay, and\n * resumption across persistence) are not finalized and may change.\n */\n step: <TStepOutput>(\n key: string,\n exec: () => TStepOutput | PromiseLike<TStepOutput>\n ) => Promise<TStepOutput>;\n}\n\nexport type LogicFunction<\n TOutput,\n TInput = NonReducibleUnknown,\n TEmitted extends EventObject = EventObject\n> = (\n args: LogicArgs<TOutput, TInput>,\n enq: LogicEnqueue<TEmitted>\n) => PromiseLike<TOutput>;\n\nexport interface LogicConfig<\n TOutput,\n TInput = NonReducibleUnknown,\n TEmitted extends EventObject = EventObject,\n TInputSchema extends StandardSchemaV1 = StandardSchemaV1,\n TOutputSchema extends StandardSchemaV1 = StandardSchemaV1\n> {\n /**\n * Stable identifier for this async logic. This identifies the logic, not a\n * particular actor instance.\n */\n id?: string;\n /** Schemas for inferring async logic types. */\n schemas?: {\n input?: TInputSchema;\n output?: TOutputSchema;\n };\n /** Maximum time this async logic may run before it is aborted and errors. */\n timeout?: number | string;\n /** The async work to execute when the actor starts. */\n run: LogicFunction<TOutput, TInput, TEmitted>;\n}\n\nexport class TimeoutError extends Error {\n constructor(timeout: number | string) {\n super(`Async logic timed out after ${timeout}.`);\n this.name = 'TimeoutError';\n }\n}\n\n/**\n * Represents an actor created by `createAsyncLogic`.\n *\n * The type of `self` within the actor's logic.\n *\n * @example\n *\n * ```ts\n * import { createAsyncLogic, createActor } from 'xstate';\n *\n * // The actor's resolved output\n * type Output = string;\n * // The actor's input.\n * type Input = { message: string };\n *\n * // Actor logic that fetches the url of an image of a cat saying `input.message`.\n * const logic = createAsyncLogic<Output, Input>({\n * run: async ({ input, self }, enq) => {\n * self;\n * // ^? AsyncActor<Output, Input>\n * enq.emit({ type: 'request.start' });\n *\n * const data = await fetch(\n * `https://cataas.com/cat/says/${input.message}`\n * );\n * const url = await data.json();\n * return url;\n * }\n * });\n *\n * const actor = createActor(logic, { input: { message: 'hello world' } });\n * // ^? AsyncActor<Output, Input>\n * ```\n *\n * @see {@link createAsyncLogic}\n */\n\n/**\n * An actor logic creator which returns async logic as defined by an async\n * process that resolves or rejects after some time.\n *\n * Actors created from async actor logic can:\n *\n * - Output the resolved value of the async process\n * - Error with the rejected value of the async process\n * - Abort when stopped or timed out\n *\n * Sending events to async actors will have no effect.\n *\n * @example\n *\n * ```ts\n * const asyncLogic = createAsyncLogic({\n * id: 'fetch-user',\n * timeout: '30s',\n * run: async ({ signal }, enq) => {\n * enq.emit({ type: 'request.start' });\n * const result = await fetch('https://example.com/...', {\n * signal\n * }).then((data) => data.json());\n *\n * return result;\n * }\n * });\n *\n * const asyncActor = createActor(asyncLogic);\n * asyncActor.subscribe((snapshot) => {\n * console.log(snapshot);\n * });\n * asyncActor.start();\n * // => {\n * // output: undefined,\n * // status: 'active'\n * // ...\n * // }\n *\n * // After promise resolves\n * // => {\n * // output: { ... },\n * // status: 'done',\n * // ...\n * // }\n * ```\n *\n * @param asyncLogic A config object with a `run` function which returns a\n * Promise, and accepts an object with the following properties:\n *\n * - `input` - Data that was provided to the async actor\n * - `self` - The async actor ref\n * - `system` - The actor system to which the async actor belongs\n * - `signal` - An abort signal for cancellation\n *\n * `run` also receives an `enq` object with the following properties:\n *\n * - `emit` - Emits an event that can be observed with `actor.on(...)`\n *\n * @see {@link https://stately.ai/docs/input | Input docs} for more information about how input is passed\n */\nexport function createAsyncLogic<\n const TInputSchema extends StandardSchemaV1,\n const TOutputSchema extends StandardSchemaV1,\n TEmitted extends EventObject = EventObject\n>(\n asyncLogic: LogicConfig<\n StandardSchemaV1.InferOutput<TOutputSchema>,\n StandardSchemaV1.InferOutput<TInputSchema>,\n TEmitted,\n TInputSchema,\n TOutputSchema\n > & {\n schemas: {\n input: TInputSchema;\n output: TOutputSchema;\n };\n }\n): AsyncActorLogic<\n StandardSchemaV1.InferOutput<TOutputSchema>,\n StandardSchemaV1.InferOutput<TInputSchema>,\n TEmitted\n> & { id?: string };\nexport function createAsyncLogic<\n TOutput,\n const TInputSchema extends StandardSchemaV1,\n TEmitted extends EventObject = EventObject\n>(\n asyncLogic: LogicConfig<\n TOutput,\n StandardSchemaV1.InferOutput<TInputSchema>,\n TEmitted,\n TInputSchema\n > & {\n schemas: {\n input: TInputSchema;\n output?: never;\n };\n }\n): AsyncActorLogic<\n TOutput,\n StandardSchemaV1.InferOutput<TInputSchema>,\n TEmitted\n> & { id?: string };\nexport function createAsyncLogic<\n const TOutputSchema extends StandardSchemaV1,\n TInput = NonReducibleUnknown,\n TEmitted extends EventObject = EventObject\n>(\n asyncLogic: LogicConfig<\n StandardSchemaV1.InferOutput<TOutputSchema>,\n TInput,\n TEmitted,\n StandardSchemaV1,\n TOutputSchema\n > & {\n schemas: {\n input?: never;\n output: TOutputSchema;\n };\n }\n): AsyncActorLogic<\n StandardSchemaV1.InferOutput<TOutputSchema>,\n TInput,\n TEmitted\n> & { id?: string };\nexport function createAsyncLogic<\n TOutput,\n TInput = NonReducibleUnknown,\n TEmitted extends EventObject = EventObject\n>(\n asyncLogic: Omit<LogicConfig<TOutput, TInput, TEmitted>, 'schemas'> & {\n schemas?: undefined;\n }\n): AsyncActorLogic<TOutput, TInput, TEmitted> & { id?: string };\nexport function createAsyncLogic<\n TOutput,\n TInput = NonReducibleUnknown,\n TEmitted extends EventObject = EventObject\n>(\n asyncLogic: LogicConfig<TOutput, TInput, TEmitted>\n): AsyncActorLogic<TOutput, TInput, TEmitted> & { id?: string } {\n const config = asyncLogic;\n\n function waitForEffect<TStepOutput>(\n self: AsyncActorRef<TOutput>,\n key: string\n ): Promise<TStepOutput> {\n return new Promise((resolve, reject) => {\n const subscription = self.subscribe((snapshot) => {\n const effect = snapshot.effects?.[key];\n\n if (effect?.status === 'done') {\n subscription.unsubscribe();\n resolve(effect.output as TStepOutput);\n } else if (effect?.status === 'error') {\n subscription.unsubscribe();\n reject(effect.error as Error);\n }\n });\n });\n }\n\n return createBaseLogic<\n undefined,\n TOutput,\n { type: string; [k: string]: unknown },\n TInput,\n TEmitted\n >({\n id: config.id,\n schemas: config.schemas,\n context: undefined,\n run: ({ event, input, self, system }, enq) => {\n switch (event.type) {\n case XSTATE_ASYNC_RESOLVE: {\n const resolvedValue = (event as any).data ?? (event as any).output;\n return {\n status: 'done',\n output: resolvedValue,\n input: undefined as TInput | undefined,\n effects: {\n async: { status: 'done', output: resolvedValue }\n }\n };\n }\n case XSTATE_ASYNC_REJECT: {\n const error = (event as any).data ?? (event as any).error;\n return {\n status: 'error',\n error,\n input: undefined as TInput | undefined,\n effects: {\n async: { status: 'error', error }\n }\n };\n }\n }\n\n if (event.type !== XSTATE_INIT) {\n return;\n }\n\n enq.effect(() => {\n const actorSelf = self as unknown as AnyActor;\n const controller = new AbortController();\n const timeout = config.timeout;\n const timeoutMs = parseDelayToMilliseconds(timeout);\n const timeoutId =\n timeoutMs === undefined\n ? undefined\n : system._clock.setTimeout(() => {\n if (self.getSnapshot().status !== 'active') {\n return;\n }\n controller.abort();\n system._relay(actorSelf, actorSelf, {\n type: XSTATE_ASYNC_REJECT,\n data: new TimeoutError(timeout!)\n });\n }, timeoutMs);\n\n const clearTimeout = () => {\n if (timeoutId !== undefined) {\n system._clock.clearTimeout(timeoutId);\n }\n };\n\n const resolvedPromise = Promise.resolve(\n config.run(\n {\n input,\n system,\n self: self as any,\n signal: controller.signal\n },\n {\n emit: enq.emit,\n step: async (key, exec) => {\n const effect = self.getSnapshot().effects?.[key];\n\n if (effect?.status === 'done') {\n return effect.output as any;\n }\n\n if (effect?.status === 'error') {\n throw effect.error;\n }\n\n if (effect?.status === 'active') {\n return waitForEffect(self as any, key) as any;\n }\n\n system._relay(actorSelf, actorSelf, {\n type: XSTATE_LOGIC_EFFECT_START,\n key\n });\n\n try {\n const output = await exec();\n system._relay(actorSelf, actorSelf, {\n type: XSTATE_LOGIC_EFFECT_RESOLVE,\n key,\n output\n });\n return output;\n } catch (error) {\n system._relay(actorSelf, actorSelf, {\n type: XSTATE_LOGIC_EFFECT_REJECT,\n key,\n error\n });\n throw error;\n }\n }\n }\n )\n );\n\n resolvedPromise.then(\n (response) => {\n clearTimeout();\n if (self.getSnapshot().status !== 'active') {\n return;\n }\n system._relay(actorSelf, actorSelf, {\n type: XSTATE_ASYNC_RESOLVE,\n data: response\n });\n },\n (errorData) => {\n clearTimeout();\n if (self.getSnapshot().status !== 'active') {\n return;\n }\n system._relay(actorSelf, actorSelf, {\n type: XSTATE_ASYNC_REJECT,\n data: errorData\n });\n }\n );\n\n return () => {\n controller.abort();\n clearTimeout();\n };\n });\n\n return {\n effects: {\n async: { status: 'active' }\n }\n };\n }\n }) as unknown as AsyncActorLogic<TOutput, TInput, TEmitted> & { id?: string };\n}\n","import { createActor } from '../createActor.ts';\nimport type { ActorFromLogic } from '../types.ts';\nimport { createLogic } from './logic.ts';\nexport {\n createCallbackLogic,\n type CallbackActorLogic,\n type CallbackActorRef,\n type CallbackLogicConfig,\n type CallbackSnapshot,\n type CallbackLogicFunction\n} from './callback.ts';\nexport {\n createObservableLogic,\n createEventObservableLogic,\n type EventObservableLogicConfig,\n type EventObservableLogicFunction,\n type ObservableActorLogic,\n type ObservableActorRef,\n type ObservableLogicConfig,\n type ObservableLogicFunction,\n type ObservableSnapshot\n} from './observable.ts';\nexport {\n createLogic,\n type LogicActorLogic,\n type LogicActorRef,\n type LogicArgs,\n type LogicConfig,\n type LogicEffect,\n type LogicEffectState,\n type LogicEnqueue,\n type LogicFunction,\n type LogicPatch,\n type LogicSnapshot\n} from './logic.ts';\nexport {\n createAsyncLogic,\n type AsyncActorLogic,\n type AsyncActorRef,\n type AsyncSnapshot,\n type LogicArgs as AsyncLogicArgs,\n type LogicConfig as AsyncLogicConfig,\n type LogicEnqueue as AsyncLogicEnqueue,\n type LogicFunction as AsyncLogicFunction,\n TimeoutError\n} from './promise.ts';\nexport {\n createListenerLogic,\n listenerLogic,\n type ListenerActorLogic,\n type ListenerActorRef,\n type ListenerSnapshot,\n type ListenerInput\n} from './listener.ts';\nexport {\n createSubscriptionLogic,\n subscriptionLogic,\n type SubscriptionActorLogic,\n type SubscriptionActorRef,\n type SubscriptionSnapshot,\n type SubscriptionInput,\n type SubscriptionMappers\n} from './subscription.ts';\n\nconst emptyLogic = /* #__PURE__ */ createLogic<undefined, undefined>({\n context: undefined,\n run: () => undefined\n});\n\nexport function createEmptyActor(): ActorFromLogic<typeof emptyLogic> {\n return createActor(emptyLogic);\n}\n","import { ProcessingStatus, createActor } from './createActor.ts';\nimport {\n ActorFromLogic,\n AnyActorLogic,\n AnyActorRef,\n AnyActorScope,\n AnyEventObject,\n AnyMachineSnapshot,\n ConditionalRequired,\n InputFrom,\n IsNotNever,\n RegistryKeyForLogic,\n SystemRegistry,\n TODO,\n type RequiredLogicInput\n} from './types.ts';\nimport { resolveReferencedActor } from './utils.ts';\n\nexport type Spawner<TSystemRegistry extends SystemRegistry = SystemRegistry> = <\n TLogic extends AnyActorLogic\n>(\n src: TLogic,\n ...[options]: ConditionalRequired<\n [\n options?: {\n id?: string;\n registryKey?: RegistryKeyForLogic<TLogic, TSystemRegistry>;\n input?: TLogic extends string ? unknown : InputFrom<TLogic>;\n syncSnapshot?: boolean;\n } & { [K in RequiredLogicInput<TLogic>]: unknown }\n ],\n IsNotNever<RequiredLogicInput<TLogic>>\n >\n) => ActorFromLogic<TLogic>;\n\nexport function createSpawner(\n actorScope: AnyActorScope,\n { machine, context }: AnyMachineSnapshot,\n event: AnyEventObject,\n spawnedChildren: Record<string, AnyActorRef>\n): Spawner {\n const spawn: Spawner = ((src, options) => {\n if (typeof src === 'string') {\n const logic = resolveReferencedActor(machine, src);\n\n if (!logic) {\n throw new Error(\n `Actor logic '${src as string}' not implemented in machine '${machine.id}'`\n );\n }\n\n const actor = createActor(logic, {\n id: options?.id,\n parent: actorScope.self,\n syncSnapshot: options?.syncSnapshot,\n input:\n typeof options?.input === 'function'\n ? options.input({\n context,\n event,\n self: actorScope.self\n })\n : options?.input,\n src,\n registryKey: options?.registryKey\n }) as any;\n\n spawnedChildren[actor.id] = actor;\n\n return actor;\n } else {\n const actor = createActor(src, {\n id: options?.id,\n parent: actorScope.self,\n syncSnapshot: options?.syncSnapshot,\n input: options?.input,\n src,\n registryKey: options?.registryKey\n });\n\n return actor;\n }\n }) as Spawner;\n return ((src, options) => {\n const actor = spawn(src, options) as TODO; // TODO: fix types\n spawnedChildren[actor.id] = actor;\n actorScope.defer(() => {\n if (actor._processingStatus === ProcessingStatus.Stopped) {\n return;\n }\n actor.start();\n });\n return actor;\n }) as Spawner;\n}\n","const cache = new WeakMap<any, any>();\n\nexport function memo<T>(object: any, key: string, fn: () => T): T {\n let memoizedData = cache.get(object);\n\n if (!memoizedData) {\n memoizedData = { [key]: fn() };\n cache.set(object, memoizedData);\n } else if (!(key in memoizedData)) {\n memoizedData[key] = fn();\n }\n\n return memoizedData[key];\n}\n","import isDevelopment from '#is-development';\nimport { NULL_EVENT, STATE_DELIMITER } from './constants.ts';\nimport { createInvokeTimeoutEvent } from './eventUtils.ts';\nimport { memo } from './memo.ts';\nimport {\n evaluateCandidate,\n formatTransition,\n getCandidates,\n getDelayedTransitions\n} from './stateUtils.ts';\nimport type {\n DelayedTransitionDefinition,\n EventObject,\n InitialTransitionDefinition,\n MachineContext,\n Mapper,\n StateNodesConfig,\n TransitionDefinition,\n TransitionDefinitionMap,\n AnyStateMachine,\n AnyStateNodeConfig,\n NonReducibleUnknown,\n EventDescriptor,\n AnyActor,\n AnyStateNode,\n AnyEventObject,\n AnyAction,\n AnyTransitionConfig,\n AnyTransitionDefinition,\n AnyMachineSnapshot,\n AnyInvokeDefinition\n} from './types.ts';\nimport {\n createInvokeId,\n mapValues,\n toArray,\n toTransitionConfigArray\n} from './utils.ts';\n\nconst EMPTY_OBJECT = {};\nconst CHOICE_CONFIG_KEYS = [\n 'invoke',\n 'after',\n 'on',\n 'entry',\n 'exit',\n 'always',\n 'states',\n 'initial',\n 'onDone',\n 'timeout',\n 'onTimeout',\n 'history',\n 'target',\n 'output'\n] as const;\n\ninterface StateNodeOptions<\n TContext extends MachineContext,\n TEvent extends EventObject\n> {\n _key: string;\n _parent?: StateNode<TContext, TEvent>;\n _machine: AnyStateMachine;\n}\n\nexport class StateNode<\n TContext extends MachineContext = MachineContext,\n TEvent extends EventObject = EventObject\n> {\n /**\n * The relative key of the state node, which represents its location in the\n * overall state value.\n */\n public key: string;\n /** The unique ID of the state node. */\n public id: string;\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 * - `'choice'` - pure routing decision state node\n * - `'final'` - final state node\n */\n public type:\n | 'atomic'\n | 'compound'\n | 'parallel'\n | 'final'\n | 'history'\n | 'choice';\n /** The string path from the root machine node to this node. */\n public path: string[];\n /** The child state nodes. */\n public states: StateNodesConfig<any, any>;\n /**\n * The type of history on this state node. Can be:\n *\n * - `'shallow'` - recalls only top-level historical state value\n * - `'deep'` - recalls historical state value at all levels\n */\n public history: false | 'shallow' | 'deep';\n /** The action(s) to be executed upon entering the state node. */\n public entry: AnyAction | undefined;\n /** The action(s) to be executed upon exiting the state node. */\n public exit: AnyAction | undefined;\n /** The parent state node. */\n public parent?: StateNode<any, any>;\n /** The root machine node. */\n public machine: AnyStateMachine;\n /**\n * The meta data associated with this state node, which will be returned in\n * State instances.\n */\n public meta?: any;\n /**\n * The output data sent with the \"xstate.done.state._id_\" event if this is a\n * final state node.\n */\n public output?:\n | Mapper<MachineContext, EventObject, unknown, EventObject>\n | NonReducibleUnknown;\n\n /**\n * The order this state node appears. Corresponds to the implicit document\n * order.\n */\n public order: number = -1;\n\n public description?: string;\n\n public tags: string[] = [];\n public transitions!: Map<string, AnyTransitionDefinition[]>;\n public always?: Array<AnyTransitionDefinition>;\n public invoke: Array<AnyInvokeDefinition>;\n public on!: TransitionDefinitionMap<any, any>;\n public after!: Array<DelayedTransitionDefinition<any, any>>;\n public events!: Array<EventDescriptor<any>>;\n public ownEvents!: Array<EventDescriptor<any>>;\n\n constructor(\n /** The raw config used to create the machine. */\n public config: AnyStateNodeConfig,\n options: StateNodeOptions<TContext, TEvent>\n ) {\n this.parent = options._parent;\n this.key = options._key;\n this.machine = options._machine;\n this.path = this.parent ? this.parent.path.concat(this.key) : [];\n const firstStateKey = this.config.states\n ? Object.keys(this.config.states)[0]\n : undefined;\n this.id =\n this.config.id || [this.machine.id, ...this.path].join(STATE_DELIMITER);\n this.type =\n this.config.type ||\n (firstStateKey !== undefined\n ? 'compound'\n : this.config.history\n ? 'history'\n : 'atomic');\n this.description = this.config.description;\n\n validateStateNodeConfig(this);\n\n this.order = this.machine.idMap.size;\n this.machine.idMap.set(this.id, this);\n\n this.states = (\n this.config.states\n ? mapValues(\n this.config.states,\n (stateConfig: AnyStateNodeConfig, key) => {\n const stateNode = new StateNode(stateConfig, {\n _parent: this,\n _key: key,\n _machine: this.machine\n });\n return stateNode;\n }\n )\n : EMPTY_OBJECT\n ) as StateNodesConfig<TContext, TEvent>;\n\n if (this.type === 'compound' && !this.config.initial) {\n throw new Error(\n isDevelopment\n ? `No initial state specified for compound state node \"#${\n this.id\n }\". Try adding { initial: \"${firstStateKey}\" } to the state config.`\n : `No initial state specified for compound state node \"#${this.id}\".`\n );\n }\n\n // History config\n this.history =\n this.config.history === true ? 'shallow' : this.config.history || false;\n\n this.entry = this.config.entry as AnyAction | undefined;\n this.exit = this.config.exit as AnyAction | undefined;\n\n if (this.entry) {\n // @ts-expect-error _special is an internal marker not on the Action type\n this.entry._special = true;\n }\n\n if (this.exit) {\n // @ts-expect-error _special is an internal marker not on the Action type\n this.exit._special = true;\n }\n\n this.meta = this.config.meta;\n this.output =\n this.type === 'final' || !this.parent ? this.config.output : undefined;\n this.tags = toArray(config.tags).slice();\n this.invoke = toArray(this.config.invoke).map((invokeConfig, i) => {\n const { src, registryKey } = invokeConfig;\n const invokeId = createInvokeId(this.id, i);\n const resolvedId = invokeConfig.id ?? invokeId;\n // Referenced (string) actors keep their logical name so persisted\n // snapshots reference `src: 'fetchUser'` rather than a positional id;\n // only inline logic gets the synthetic source name.\n const sourceName =\n typeof src === 'string' ? src : `xstate.invoke.${invokeId}`;\n\n return {\n ...invokeConfig,\n src: sourceName,\n logic: src,\n id: resolvedId,\n registryKey\n } as AnyInvokeDefinition;\n });\n }\n\n /** @internal */\n public _initialize() {\n this.after = getDelayedTransitions(this) as any;\n this.transitions = formatTransitions(this);\n if (this.type === 'choice') {\n this.always = formatChoiceTransitions(this);\n } else if (this.config.always) {\n this.always = mapTransitionConfigs(this.config.always, (transition) =>\n formatTransition(this, NULL_EVENT, transition)\n );\n }\n\n for (const key of Object.keys(this.states)) {\n this.states[key]._initialize();\n }\n\n this._refreshEventMetadata();\n }\n\n /** @internal */\n public _refreshEventMetadata() {\n const on = {} as TransitionDefinitionMap<TContext, TEvent>;\n const ownEvents: EventDescriptor<any>[] = [];\n for (const [descriptor, transitions] of this.transitions) {\n (on as any)[descriptor] = transitions.slice();\n if (\n transitions.some(\n (transition) =>\n transition.target || transition.reenter || transition.to\n )\n ) {\n ownEvents.push(descriptor);\n }\n }\n this.on = on;\n this.ownEvents = ownEvents;\n\n const events = new Set<EventDescriptor<any>>(ownEvents);\n for (const state of Object.values(this.states)) {\n for (const event of state.events) {\n events.add(event);\n }\n }\n this.events = Array.from(events);\n }\n\n public get initial(): InitialTransitionDefinition {\n return memo(this, 'initial', () =>\n formatInitialTransition(this, this.config.initial)\n );\n }\n\n /** @internal */\n public next(\n snapshot: AnyMachineSnapshot,\n event: AnyEventObject,\n self: AnyActor\n ): Array<AnyTransitionDefinition> | undefined {\n const eventType = event.type;\n const candidates: Array<AnyTransitionDefinition> = memo(\n this,\n `candidates-${eventType}`,\n () => getCandidates(this, eventType)\n );\n\n for (const candidate of candidates) {\n const guardPassed = evaluateCandidate(\n candidate,\n event,\n snapshot,\n this,\n self\n );\n\n if (guardPassed) {\n return [candidate];\n }\n }\n\n return undefined;\n }\n}\n\nfunction validateStateNodeConfig(stateNode: AnyStateNode) {\n const config = stateNode.config as any;\n\n if (stateNode.type !== 'choice') {\n if (config.choice !== undefined) {\n throw new Error(\n `State \"${stateNode.id}\" has \\`choice\\`, but \\`choice\\` can only be used with \\`type: 'choice'\\`.`\n );\n }\n return;\n }\n\n if (typeof config.choice !== 'function') {\n throw new Error(\n `Choice state \"${stateNode.id}\" must declare a \\`choice\\` function.`\n );\n }\n\n for (const key of CHOICE_CONFIG_KEYS) {\n if (config[key] !== undefined) {\n throw new Error(\n `Choice state \"${stateNode.id}\" cannot declare \\`${key}\\`.`\n );\n }\n }\n}\n\nfunction formatChoiceTransitions(\n stateNode: AnyStateNode\n): AnyTransitionDefinition[] {\n const choice = (stateNode.config as any).choice;\n const validateChoiceResult = (result: any): AnyTransitionConfig => {\n if (!result || result.target === undefined) {\n throw new Error(\n `Choice state \"${stateNode.id}\" must resolve to a target.`\n );\n }\n for (const key of ['actions', 'to', 'context'] as const) {\n if (result[key] !== undefined) {\n throw new Error(\n `Choice state \"${stateNode.id}\" cannot declare \\`${key}\\` on a choice.`\n );\n }\n }\n return result;\n };\n\n return [\n formatTransition(stateNode, NULL_EVENT, {\n to: (args: any) => validateChoiceResult(choice(args))\n } as AnyTransitionConfig)\n ];\n}\n\nfunction mapTransitionConfigs<T>(\n transitionsConfig: unknown,\n mapper: (transition: AnyTransitionConfig) => T\n): T[] {\n const transitionConfigs = toTransitionConfigArray(transitionsConfig as any);\n const transitions = new Array<T>(transitionConfigs.length);\n\n for (let i = 0; i < transitionConfigs.length; i++) {\n transitions[i] = mapper(transitionConfigs[i]);\n }\n\n return transitions;\n}\n\nfunction formatTransitions<\n TContext extends MachineContext,\n TEvent extends EventObject\n>(\n stateNode: AnyStateNode\n): Map<string, TransitionDefinition<TContext, TEvent>[]> {\n const transitions = new Map<\n string,\n TransitionDefinition<TContext, AnyEventObject>[]\n >();\n if (stateNode.config.on) {\n for (const descriptor of Object.keys(stateNode.config.on)) {\n if (descriptor === NULL_EVENT) {\n throw new Error(\n 'Null events (\"\") cannot be specified as a transition key. Use `always: { ... }` instead.'\n );\n }\n const transitionsConfig = stateNode.config.on[descriptor];\n transitions.set(\n descriptor,\n mapTransitionConfigs(transitionsConfig, (transition) =>\n formatTransition(stateNode, descriptor, transition)\n )\n );\n }\n }\n if (stateNode.config.onDone) {\n const descriptor = `xstate.done.state.${stateNode.id}`;\n transitions.set(\n descriptor,\n mapTransitionConfigs(stateNode.config.onDone, (transition) =>\n formatTransition(stateNode, descriptor, transition)\n )\n );\n }\n const createCancelInvokeTimeoutTransition = (\n descriptor: string,\n timeoutEventType: string\n ): AnyTransitionDefinition =>\n formatTransition(stateNode, descriptor, {\n to: (_args: any, enq: any) => {\n enq.cancel(timeoutEventType);\n return {};\n }\n } as AnyTransitionConfig);\n const formatInvokeCompletionTransition = (\n descriptor: string,\n transitionConfig: AnyTransitionConfig,\n timeoutEventType: string\n ): AnyTransitionDefinition => {\n const { target, to, reenter, ...rest } = transitionConfig;\n\n return formatTransition(stateNode, descriptor, {\n ...rest,\n reenter,\n to: (args: any, enq: any) => {\n if (to) {\n let didEnqueue = false;\n const trackingEnqueue = new Proxy(enq, {\n apply(target, thisArg, argArray) {\n didEnqueue = true;\n return Reflect.apply(target, thisArg, argArray);\n },\n get(target, prop, receiver) {\n const value = Reflect.get(target, prop, receiver);\n\n if (typeof value !== 'function') {\n return value;\n }\n\n return (...argArray: any[]) => {\n didEnqueue = true;\n return value.apply(target, argArray);\n };\n }\n });\n const result = to(args, trackingEnqueue);\n\n if (result !== undefined || didEnqueue) {\n enq.cancel(timeoutEventType);\n }\n\n return result;\n }\n\n enq.cancel(timeoutEventType);\n return {\n target,\n reenter\n };\n }\n } as AnyTransitionConfig);\n };\n for (const invokeDef of stateNode.invoke) {\n const invokeTimeoutEventType =\n invokeDef.timeout !== undefined\n ? createInvokeTimeoutEvent(invokeDef.id).type\n : undefined;\n\n if (invokeDef.onDone) {\n const descriptor = `xstate.done.actor.${invokeDef.id}`;\n const invokeDoneTransitions = mapTransitionConfigs(\n invokeDef.onDone,\n (transition) =>\n invokeTimeoutEventType\n ? formatInvokeCompletionTransition(\n descriptor,\n transition,\n invokeTimeoutEventType\n )\n : formatTransition(stateNode, descriptor, transition)\n );\n\n if (invokeTimeoutEventType) {\n invokeDoneTransitions.push(\n createCancelInvokeTimeoutTransition(\n descriptor,\n invokeTimeoutEventType\n )\n );\n }\n\n transitions.set(descriptor, invokeDoneTransitions);\n } else if (invokeTimeoutEventType) {\n const descriptor = `xstate.done.actor.${invokeDef.id}`;\n transitions.set(descriptor, [\n createCancelInvokeTimeoutTransition(descriptor, invokeTimeoutEventType)\n ]);\n }\n if (invokeDef.onError) {\n const descriptor = `xstate.error.actor.${invokeDef.id}`;\n transitions.set(\n descriptor,\n mapTransitionConfigs(invokeDef.onError, (transition) =>\n invokeTimeoutEventType\n ? formatInvokeCompletionTransition(\n descriptor,\n transition,\n invokeTimeoutEventType\n )\n : formatTransition(stateNode, descriptor, transition)\n )\n );\n }\n if (invokeDef.onSnapshot) {\n const descriptor = `xstate.snapshot.${invokeDef.id}`;\n transitions.set(\n descriptor,\n mapTransitionConfigs(invokeDef.onSnapshot, (transition) =>\n formatTransition(stateNode, descriptor, transition)\n )\n );\n }\n }\n for (const delayedTransition of stateNode.after) {\n let existing = transitions.get(delayedTransition.eventType);\n if (!existing) {\n existing = [];\n transitions.set(delayedTransition.eventType, existing);\n }\n existing.push(\n delayedTransition as TransitionDefinition<TContext, AnyEventObject>\n );\n }\n return transitions as Map<string, TransitionDefinition<TContext, any>[]>;\n}\n\nfunction formatInitialTransition(\n stateNode: AnyStateNode,\n _target: string | { target: string; input?: any } | undefined\n): InitialTransitionDefinition {\n const targetString =\n typeof _target === 'object' && _target !== null ? _target.target : _target;\n const input =\n typeof _target === 'object' && _target !== null ? _target.input : undefined;\n const resolvedTarget =\n typeof targetString === 'string'\n ? stateNode.states[targetString]\n : undefined;\n if (!resolvedTarget && targetString) {\n throw new Error(\n `Initial state node \"${targetString}\" not found on parent state node #${stateNode.id}`\n );\n }\n const transition: InitialTransitionDefinition = {\n source: stateNode,\n target: resolvedTarget ? [resolvedTarget] : undefined,\n input\n };\n\n return transition;\n}\n","import isDevelopment from '#is-development';\nimport { $$ACTOR_TYPE, createActor } from './createActor.ts';\nimport { createInitEvent } from './eventUtils.ts';\n\nimport { createSpawner } from './spawn.ts';\nimport {\n createMachineSnapshot,\n getPersistedSnapshot,\n MachineSnapshot\n} from './State.ts';\nimport { StateNode } from './StateNode.ts';\nimport {\n formatRouteTransitions,\n getAllStateNodes,\n getStateNodeByPath,\n getStateNodes,\n initialMicrostep,\n isInFinalState,\n isStateId,\n macrostep,\n resolveStateValue,\n transitionNode\n} from './stateUtils.ts';\nimport { resolveActionsWithContext } from './transitionActions.ts';\nimport { AnyActorSystem } from './system.ts';\nimport type {\n ActorLogic,\n ActorLogicTransitionResult,\n ActorScope,\n AnyActor,\n AnyActorLogic,\n AnyActorRef,\n AnyActorScope,\n AnyEventObject,\n AnyTransitionDefinition,\n Equals,\n EventDescriptor,\n EmittedFrom,\n EventObject,\n EventFromLogic,\n ExecutableActionObjectFromLogic,\n HistoryValue,\n InputFrom,\n IsAny,\n MachineContext,\n MetaObject,\n OutputFrom,\n Snapshot,\n SnapshotFrom,\n StateValue,\n StateSchema,\n SnapshotStatus,\n AnyStateNode\n} from './types.ts';\nimport {\n AnyMachineSchemas,\n Implementations,\n Next_MachineConfig,\n MachineOptions\n} from './types.v6.ts';\nimport {\n matchesEventDescriptor,\n resolveReferencedActor,\n toStatePath\n} from './utils.ts';\n\nconst STATE_IDENTIFIER = '#';\n\ntype CompatibleProvidedActorSource<\n TExpected extends AnyActorLogic,\n TActual extends AnyActorLogic\n> =\n IsAny<TActual> extends true\n ? TActual\n : [OutputFrom<TActual>] extends [OutputFrom<TExpected>]\n ? [Omit<SnapshotFrom<TActual>, 'input'>] extends [\n Omit<SnapshotFrom<TExpected>, 'input'>\n ]\n ? [InputFrom<TExpected>] extends [InputFrom<TActual>]\n ? [EventFromLogic<TExpected>] extends [EventFromLogic<TActual>]\n ? [EmittedFrom<TActual>] extends [EmittedFrom<TExpected>]\n ? TActual\n : never\n : never\n : never\n : never\n : never;\n\ntype ProvidedActorSources<\n TExpectedActorMap extends Implementations['actorSources'],\n TProvidedActorMap extends Partial<\n Record<keyof TExpectedActorMap & string, AnyActorLogic>\n >\n> = {\n [K in keyof TProvidedActorMap]: K extends keyof TExpectedActorMap\n ? TProvidedActorMap[K] extends AnyActorLogic\n ? CompatibleProvidedActorSource<\n TExpectedActorMap[K],\n TProvidedActorMap[K]\n >\n : never\n : never;\n};\n\nexport class StateMachine<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TChildren extends Record<string, AnyActorRef | undefined>,\n TStateValue extends StateValue,\n TTag extends string,\n TInput,\n TOutput,\n TEmitted extends EventObject,\n TMeta extends MetaObject,\n TConfig extends StateSchema,\n TActionMap extends Implementations['actions'],\n TActorMap extends Implementations['actorSources'],\n TGuardMap extends Implementations['guards'],\n TDelayMap extends Implementations['delays']\n> implements\n ActorLogic<\n MachineSnapshot<\n TContext,\n TEvent,\n TChildren,\n TStateValue,\n TTag,\n TOutput,\n TMeta,\n TConfig\n >,\n TEvent,\n TInput,\n AnyActorSystem,\n TEmitted\n >\n{\n /** The machine's own version. */\n public version?: string;\n\n public schemas: AnyMachineSchemas | undefined;\n\n public implementations: Implementations;\n\n /** Runtime options for machine execution. */\n public options: MachineOptions;\n\n /** @internal */\n public idMap: Map<string, AnyStateNode> = new Map();\n\n public root: StateNode<TContext, TEvent>;\n\n public id: string;\n\n public states: StateNode<TContext, TEvent>['states'];\n public events: Array<EventDescriptor<TEvent>>;\n public internalEventDescriptors: ReadonlyArray<string>;\n constructor(\n /** The raw config used to create the machine. */\n public config: Next_MachineConfig<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any // TEmitted\n > & {\n schemas?: AnyMachineSchemas;\n internalEvents?: readonly string[];\n },\n implementations?: Implementations\n ) {\n this.id = config.id || '(machine)';\n this.implementations = {\n actorSources: config.actorSources ?? {},\n actions: config.actions ?? {},\n delays: (config.delays ?? {}) as Implementations['delays'],\n guards: config.guards ?? {},\n ...implementations\n };\n if (isDevelopment) {\n // The `@xstate.` prefix is reserved for built-in serialized action and\n // guard descriptors — user implementation names must not collide.\n for (const kind of [\n 'actions',\n 'guards',\n 'actorSources',\n 'delays'\n ] as const) {\n for (const key of Object.keys(this.implementations[kind])) {\n if (key.startsWith('@xstate.')) {\n throw new Error(\n `Invalid ${kind} name '${key}': the '@xstate.' prefix is reserved for built-in descriptors.`\n );\n }\n }\n }\n }\n this.version = this.config.version;\n this.schemas = this.config.schemas;\n this.internalEventDescriptors = this.config.internalEvents ?? [];\n this.options = {\n maxIterations: Infinity,\n ...this.config.options\n };\n\n this.transition = this.transition.bind(this);\n this.initialTransition = this.initialTransition.bind(this);\n this.getInitialSnapshot = this.getInitialSnapshot.bind(this);\n this.getPersistedSnapshot = this.getPersistedSnapshot.bind(this);\n this.restoreSnapshot = this.restoreSnapshot.bind(this);\n this.start = this.start.bind(this);\n\n this.root = new StateNode(config as any, {\n _key: this.id,\n _machine: this as any\n });\n\n this.root._initialize();\n formatRouteTransitions(this.root);\n this.root._refreshEventMetadata();\n\n this.states = this.root.states; // TODO: remove!\n this.events = this.root.events;\n\n if (\n isDevelopment &&\n !('output' in this.root) &&\n Object.values(this.states).some(\n (state) => state.type === 'final' && 'output' in state\n )\n ) {\n console.warn(\n 'Missing `machine.output` declaration (top-level final state with output detected)'\n );\n }\n }\n\n /**\n * Clones this state machine with the provided implementations.\n *\n * @param implementations Options (`actions`, `guards`, `actorSources`,\n * `delays`) to recursively merge with the existing options.\n * @returns A new `StateMachine` instance with the provided implementations.\n */\n public provide<\n const TProvidedActorMap extends Partial<\n Record<keyof TActorMap & string, AnyActorLogic>\n > = {}\n >(implementations: {\n actions?: Partial<TActionMap>;\n actorSources?: TProvidedActorMap &\n ProvidedActorSources<TActorMap, TProvidedActorMap>;\n guards?: Partial<TGuardMap>;\n delays?: Partial<TDelayMap>;\n }): StateMachine<\n TContext,\n TEvent,\n TChildren,\n TStateValue,\n TTag,\n TInput,\n TOutput,\n TEmitted,\n TMeta,\n TConfig,\n TActionMap,\n TActorMap,\n TGuardMap,\n TDelayMap\n > {\n const { actions, guards, actorSources, delays } = this.implementations;\n\n const provided = new StateMachine(this.config, {\n actions: {\n ...actions,\n ...implementations.actions\n } as Implementations['actions'],\n guards: {\n ...guards,\n ...implementations.guards\n } as Implementations['guards'],\n actorSources: {\n ...actorSources,\n ...implementations.actorSources\n } as Implementations['actorSources'],\n delays: {\n ...delays,\n ...implementations.delays\n } as Implementations['delays']\n }) as unknown as this;\n // Providing implementations does not change the serializable definition.\n provided._json = this._json;\n return provided;\n }\n\n public resolveState(\n config: {\n value: StateValue;\n context?: TContext;\n historyValue?: HistoryValue;\n status?: SnapshotStatus;\n output?: TOutput;\n error?: unknown;\n } & ([TContext] extends [never]\n ? {}\n : Equals<TContext, MachineContext> extends false\n ? { context: unknown }\n : {})\n ): MachineSnapshot<\n TContext,\n TEvent,\n TChildren,\n TStateValue,\n TTag,\n TOutput,\n TMeta,\n TConfig\n > {\n const resolvedStateValue = resolveStateValue(this.root, config.value);\n const nodeSet = getAllStateNodes(\n getStateNodes(this.root, resolvedStateValue)\n );\n const nodes = [...nodeSet];\n\n return createMachineSnapshot(\n {\n _nodes: nodes,\n value: resolvedStateValue,\n context: config.context || ({} as TContext),\n children: {},\n status: isInFinalState(nodeSet, this.root)\n ? 'done'\n : config.status || 'active',\n output: config.output,\n error: config.error,\n historyValue: config.historyValue\n },\n this\n ) as MachineSnapshot<\n TContext,\n TEvent,\n TChildren,\n TStateValue,\n TTag,\n TOutput,\n TMeta,\n TConfig\n >;\n }\n\n /**\n * Determines the next snapshot given the current `snapshot` and received\n * `event`. Calculates a full macrostep from all microsteps.\n *\n * @param snapshot The current snapshot\n * @param event The received event\n */\n public transition(\n snapshot: MachineSnapshot<\n TContext,\n TEvent,\n TChildren,\n TStateValue,\n TTag,\n TOutput,\n TMeta,\n TConfig\n >,\n event: TEvent,\n actorScope: ActorScope<typeof snapshot, TEvent, AnyActorSystem, TEmitted>\n ): ActorLogicTransitionResult<\n MachineSnapshot<\n TContext,\n TEvent,\n TChildren,\n TStateValue,\n TTag,\n TOutput,\n TMeta,\n TConfig\n >,\n ExecutableActionObjectFromLogic<this>\n > {\n const { snapshot: nextSnapshot, microsteps } = macrostep(\n snapshot,\n event,\n actorScope,\n []\n );\n\n return [\n nextSnapshot,\n microsteps.flatMap(\n ([, actions]) => actions\n ) as ExecutableActionObjectFromLogic<this>[]\n ];\n }\n\n /**\n * Determines the next state given the current `state` and `event`. Calculates\n * a microstep.\n *\n * @param state The current state\n * @param event The received event\n */\n public microstep(\n snapshot: MachineSnapshot<\n TContext,\n TEvent,\n TChildren,\n TStateValue,\n TTag,\n TOutput,\n TMeta,\n TConfig\n >,\n event: TEvent,\n actorScope: AnyActorScope\n ): Array<\n MachineSnapshot<\n TContext,\n TEvent,\n TChildren,\n TStateValue,\n TTag,\n TOutput,\n TMeta,\n TConfig\n >\n > {\n const { microsteps } = macrostep(snapshot, event, actorScope, []);\n const snapshots = new Array(microsteps.length);\n\n for (let i = 0; i < microsteps.length; i++) {\n snapshots[i] = microsteps[i][0];\n }\n\n return snapshots;\n }\n\n public getTransitionData(\n snapshot: MachineSnapshot<\n TContext,\n TEvent,\n TChildren,\n TStateValue,\n TTag,\n TOutput,\n TMeta,\n TConfig\n >,\n event: TEvent,\n self: AnyActor\n ): Array<AnyTransitionDefinition> {\n return (\n transitionNode(this.root, snapshot.value, snapshot, event, self) || []\n );\n }\n\n public isInternalEventType(eventType: string): boolean {\n for (const descriptor of this.internalEventDescriptors) {\n if (matchesEventDescriptor(eventType, descriptor)) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * The initial state _before_ evaluating any microsteps. This \"pre-initial\"\n * state is provided to initial actions executed in the initial state.\n *\n * @internal\n */\n _getPreInitialState(\n actorScope: AnyActorScope,\n initEvent: any\n ): MachineSnapshot<\n TContext,\n TEvent,\n TChildren,\n TStateValue,\n TTag,\n TOutput,\n TMeta,\n TConfig\n > {\n const { context } = this.config;\n\n const preInitial = createMachineSnapshot(\n {\n context:\n typeof context !== 'function' && context ? context : ({} as TContext),\n _nodes: [this.root],\n children: {},\n status: 'active'\n },\n this\n );\n\n if (typeof context === 'function') {\n const children = {};\n const spawn = createSpawner(actorScope, preInitial, initEvent, children);\n const resolvedContext = context({\n spawn,\n input: initEvent.input,\n self: actorScope.self,\n actorSources: this.implementations.actorSources\n });\n const [nextState] = resolveActionsWithContext(\n preInitial,\n initEvent,\n actorScope,\n []\n ) as any;\n if (resolvedContext) {\n nextState.context = resolvedContext;\n }\n if (Object.keys(children).length > 0) {\n nextState.children = {\n ...nextState.children,\n ...children\n };\n }\n return nextState as SnapshotFrom<this>;\n }\n\n return preInitial as SnapshotFrom<this>;\n }\n\n /**\n * Returns the initial `State` instance, with reference to `self` as an\n * `ActorRef`.\n */\n public getInitialSnapshot(\n actorScope: ActorScope<\n MachineSnapshot<\n TContext,\n TEvent,\n TChildren,\n TStateValue,\n TTag,\n TOutput,\n TMeta,\n TConfig\n >,\n TEvent,\n AnyActorSystem,\n TEmitted\n >,\n input?: TInput\n ): MachineSnapshot<\n TContext,\n TEvent,\n TChildren,\n TStateValue,\n TTag,\n TOutput,\n TMeta,\n TConfig\n > {\n return this.initialTransition(input, actorScope)[0];\n }\n\n public initialTransition(\n input: TInput | undefined,\n actorScope: ActorScope<\n MachineSnapshot<\n TContext,\n TEvent,\n TChildren,\n TStateValue,\n TTag,\n TOutput,\n TMeta,\n TConfig\n >,\n TEvent,\n AnyActorSystem,\n TEmitted\n >\n ): ActorLogicTransitionResult<\n MachineSnapshot<\n TContext,\n TEvent,\n TChildren,\n TStateValue,\n TTag,\n TOutput,\n TMeta,\n TConfig\n >,\n ExecutableActionObjectFromLogic<this>\n > {\n const initEvent = createInitEvent(input) as unknown as TEvent; // TODO: fix;\n const internalQueue: AnyEventObject[] = [];\n const preInitialState = this._getPreInitialState(actorScope, initEvent);\n const [nextState, initialActions] = initialMicrostep(\n this.root,\n preInitialState,\n actorScope,\n initEvent,\n internalQueue\n );\n\n const { snapshot: macroState, microsteps } = macrostep(\n nextState,\n initEvent as AnyEventObject,\n actorScope,\n internalQueue\n );\n\n return [\n macroState as SnapshotFrom<this>,\n [\n ...initialActions,\n ...microsteps.flatMap(([, actions]) => actions)\n ] as ExecutableActionObjectFromLogic<this>[]\n ];\n }\n\n public start(\n snapshot?: MachineSnapshot<\n TContext,\n TEvent,\n TChildren,\n TStateValue,\n TTag,\n TOutput,\n TMeta,\n TConfig\n >\n ): void {\n // Start rehydrated children that were active when persisted. Freshly\n // invoked/spawned children are NOT started here — they start via deferred\n // `@xstate.start` actions so sync start errors route to `onError`.\n if (!snapshot?.children) {\n return;\n }\n for (const child of Object.values(\n snapshot.children as unknown as Record<string, AnyActor>\n )) {\n if (\n (child as any)._rehydrated &&\n (child as any).getSnapshot?.().status === 'active'\n ) {\n (child as any).start();\n }\n }\n }\n\n public getStateNodeById(stateId: string): StateNode<TContext, TEvent> {\n const fullPath = toStatePath(stateId);\n const relativePath = fullPath.slice(1);\n const resolvedStateId = isStateId(fullPath[0])\n ? fullPath[0].slice(STATE_IDENTIFIER.length)\n : fullPath[0];\n\n const stateNode = this.idMap.get(resolvedStateId);\n if (!stateNode) {\n throw new Error(\n `Child state node '#${resolvedStateId}' does not exist on machine '${this.id}'`\n );\n }\n return getStateNodeByPath(stateNode, relativePath) as StateNode<\n TContext,\n TEvent\n >;\n }\n\n public getPersistedSnapshot(\n snapshot: MachineSnapshot<\n TContext,\n TEvent,\n TChildren,\n TStateValue,\n TTag,\n TOutput,\n TMeta,\n TConfig\n >,\n options?: unknown\n ) {\n return getPersistedSnapshot(snapshot, options);\n }\n\n /**\n * The original JSON definition this machine was created from (set by\n * `createMachineFromConfig`), if any. Used by `serializeMachine` for lossless\n * round-trips.\n *\n * @internal\n */\n public _json?: Record<string, unknown>;\n\n public restoreSnapshot(\n snapshot: Snapshot<unknown>,\n _actorScope: ActorScope<\n MachineSnapshot<\n TContext,\n TEvent,\n TChildren,\n TStateValue,\n TTag,\n TOutput,\n TMeta,\n TConfig\n >,\n TEvent,\n AnyActorSystem,\n TEmitted\n >\n ): MachineSnapshot<\n TContext,\n TEvent,\n TChildren,\n TStateValue,\n TTag,\n TOutput,\n TMeta,\n TConfig\n > {\n const persistedVersion: string | undefined = (snapshot as any).version;\n if (persistedVersion !== this.version) {\n const migrate = (this.config as any).migrate;\n if (typeof migrate !== 'function') {\n throw new Error(\n isDevelopment\n ? `Persisted snapshot version '${persistedVersion}' does not match machine version '${this.version}' for machine '${this.id}'. Provide a \\`migrate(persistedSnapshot, fromVersion)\\` function in the machine config to migrate old snapshots.`\n : `Persisted snapshot version '${persistedVersion}' does not match machine version '${this.version}'.`\n );\n }\n snapshot = migrate(snapshot, persistedVersion);\n }\n\n const snapshotData = snapshot as any;\n const children: Record<string, AnyActor> = {};\n const snapshotChildren: Record<\n string,\n {\n src: string | AnyActorLogic;\n snapshot: Snapshot<unknown>;\n syncSnapshot?: boolean;\n registryKey?: string;\n }\n > = snapshotData.children;\n\n for (const actorId of Object.keys(snapshotChildren)) {\n const actorData = snapshotChildren[actorId];\n const childState = actorData.snapshot;\n const src = actorData.src;\n\n const logic =\n typeof src === 'string' ? resolveReferencedActor(this, src) : src;\n\n if (!logic) {\n continue;\n }\n\n const actor = createActor(logic, {\n id: actorId,\n parent: _actorScope.self,\n syncSnapshot: actorData.syncSnapshot,\n snapshot: childState,\n src,\n registryKey: actorData.registryKey\n });\n // Mark so `start()` knows to start this child (freshly invoked/spawned\n // children are started via deferred `@xstate.start` actions instead).\n (actor as any)._rehydrated = true;\n\n children[actorId] = actor;\n }\n\n const reviveHistoryValue = (\n historyValue: Record<\n string,\n ({ id: string } | StateNode<TContext, TEvent>)[]\n >\n ): HistoryValue => {\n if (!historyValue || typeof historyValue !== 'object') {\n return {};\n }\n const revived: HistoryValue = {};\n for (const key of Object.keys(historyValue)) {\n const arr = historyValue[key];\n\n for (const item of arr) {\n let resolved: StateNode<TContext, TEvent> | undefined;\n\n if (item instanceof StateNode) {\n resolved = item;\n } else {\n try {\n resolved = this.root.machine.getStateNodeById(item.id);\n } catch {\n if (isDevelopment) {\n console.warn(`Could not resolve StateNode for id: ${item.id}`);\n }\n }\n }\n\n if (!resolved) {\n continue;\n }\n\n revived[key] ??= [];\n revived[key].push(resolved);\n }\n }\n return revived;\n };\n\n const revivedHistoryValue = reviveHistoryValue(snapshotData.historyValue);\n const nodes = Array.from(\n getAllStateNodes(getStateNodes(this.root, snapshotData.value))\n );\n\n const { version: _persistedSnapshotVersion, ...persistedRest } =\n snapshot as any;\n const restoredSnapshot = createMachineSnapshot(\n {\n ...persistedRest,\n children,\n _nodes: nodes,\n value: snapshotData.value,\n historyValue: revivedHistoryValue\n },\n this\n ) as MachineSnapshot<\n TContext,\n TEvent,\n TChildren,\n TStateValue,\n TTag,\n TOutput,\n TMeta,\n TConfig\n >;\n\n const seen = new WeakSet<Record<string, unknown>>();\n\n function reviveContext(contextPart: Record<string, unknown>) {\n if (seen.has(contextPart)) {\n return;\n }\n seen.add(contextPart);\n for (const key of Object.keys(contextPart)) {\n const value: unknown = contextPart[key];\n\n if (value && typeof value === 'object') {\n if ('xstate$$type' in value && value.xstate$$type === $$ACTOR_TYPE) {\n contextPart[key] = children[(value as any).id];\n continue;\n }\n reviveContext(value as typeof contextPart);\n }\n }\n }\n\n reviveContext(restoredSnapshot.context);\n\n return restoredSnapshot;\n }\n}\n","import { StandardSchemaV1 } from './schema.types.ts';\nimport { StateMachine } from './StateMachine.ts';\nimport {\n AnyActorRef,\n EventObject,\n AnyEventObject,\n Cast,\n MachineContext,\n ProvidedActor,\n StateValue,\n ToChildren,\n MetaObject,\n StateSchema,\n DoNotInfer,\n RoutableStateId,\n Compute\n} from './types.ts';\nimport {\n Implementations,\n DelayMapFromNames,\n InferChildren,\n InferOutput,\n InferEvents,\n Next_MachineConfig,\n Next_StateNodeConfig,\n ValidateDelayReferences,\n WidenLiterals,\n WithDefault\n} from './types.v6.ts';\n\ntype MergeChildren<\n TChildren extends Record<string, AnyActorRef | undefined>,\n TActor extends ProvidedActor\n> = [keyof TChildren] extends [never]\n ? Compute<ToChildren<TActor>>\n : Compute<TChildren>;\n\ntype TestValue =\n | string\n | {\n [k: string]: TestValue | undefined;\n };\n\ntype _GroupTestValues<TTestValue extends string | TestValue> =\n TTestValue extends string\n ? TTestValue extends `${string}.${string}`\n ? [never, never]\n : [TTestValue, never]\n : [never, TTestValue];\n\n/**\n * Creates a state machine (statechart) with the given configuration.\n *\n * The state machine represents the pure logic of a state machine actor.\n *\n * @example\n *\n * ```ts\n * import { createMachine } from 'xstate';\n *\n * const lightMachine = createMachine({\n * id: 'light',\n * initial: 'green',\n * states: {\n * green: {\n * on: {\n * TIMER: { target: 'yellow' }\n * }\n * },\n * yellow: {\n * on: {\n * TIMER: { target: 'red' }\n * }\n * },\n * red: {\n * on: {\n * TIMER: { target: 'green' }\n * }\n * }\n * }\n * });\n *\n * const lightActor = createActor(lightMachine);\n * lightActor.start();\n *\n * lightActor.send({ type: 'TIMER' });\n * ```\n *\n * @param config The state machine configuration.\n * @param options DEPRECATED: use `setup({ ... })` or `machine.provide({ ... })`\n * to provide machine implementations instead.\n */\n// Overload 1: With schemas.context — context type inferred from schema\nexport function createMachine<\n TContextSchema extends StandardSchemaV1,\n const TEventSchemaMap extends Record<string, StandardSchemaV1>,\n TEmittedSchemaMap extends Record<string, StandardSchemaV1>,\n TInputSchema extends StandardSchemaV1,\n TOutputSchema extends StandardSchemaV1,\n TMetaSchema extends StandardSchemaV1,\n TTagSchema extends StandardSchemaV1,\n const TChildrenSchemaMap extends Record<string, StandardSchemaV1>,\n _TEvent extends EventObject,\n TActor extends ProvidedActor,\n TActionMap extends Implementations['actions'],\n TActorMap extends Implementations['actorSources'],\n TGuardMap extends Implementations['guards'],\n TDelayMap extends Implementations['delays'],\n TDelays extends string,\n TTag extends StandardSchemaV1.InferOutput<TTagSchema> & string,\n TInput,\n const TSS extends StateSchema\n>(\n config: TSS &\n ValidateDelayReferences<TSS> &\n Next_MachineConfig<\n TContextSchema,\n TEventSchemaMap,\n TEmittedSchemaMap,\n TInputSchema,\n TOutputSchema,\n TMetaSchema,\n TTagSchema,\n TChildrenSchemaMap,\n InferOutput<TContextSchema, MachineContext>,\n InferEvents<TEventSchemaMap>,\n Cast<\n MergeChildren<InferChildren<TChildrenSchemaMap>, TActor>,\n Record<string, AnyActorRef | undefined>\n >,\n TDelays,\n TTag,\n TActionMap,\n TActorMap,\n TGuardMap,\n TDelayMap\n > & {\n schemas: { context: TContextSchema; children?: TChildrenSchemaMap };\n }\n): StateMachine<\n InferOutput<TContextSchema, MachineContext>,\n | InferEvents<TEventSchemaMap>\n | ([RoutableStateId<TSS>] extends [never]\n ? never\n : {\n type: 'xstate.route';\n to: RoutableStateId<TSS>;\n }),\n Cast<\n MergeChildren<InferChildren<TChildrenSchemaMap>, TActor>,\n Record<string, AnyActorRef | undefined>\n >,\n StateValue,\n TTag & string,\n TInput,\n InferOutput<TOutputSchema, unknown>,\n WithDefault<InferEvents<TEmittedSchemaMap>, AnyEventObject>,\n InferOutput<TMetaSchema, MetaObject>, // TMeta\n TSS, // TStateSchema\n TActionMap,\n TActorMap,\n TGuardMap,\n DelayMapFromNames<TDelays, TDelayMap>\n> & {\n states: TSS;\n};\n\n// Overload 2: Without schemas.context — context type inferred from config.context\nexport function createMachine<\n TContext extends MachineContext = never,\n const TEventSchemaMap extends Record<string, StandardSchemaV1> = Record<\n string,\n StandardSchemaV1\n >,\n TEmittedSchemaMap extends Record<string, StandardSchemaV1> = Record<\n string,\n StandardSchemaV1\n >,\n TInputSchema extends StandardSchemaV1 = StandardSchemaV1,\n TOutputSchema extends StandardSchemaV1 = StandardSchemaV1,\n TMetaSchema extends StandardSchemaV1 = StandardSchemaV1,\n TTagSchema extends StandardSchemaV1 = StandardSchemaV1,\n const TChildrenSchemaMap extends Record<string, StandardSchemaV1> = Record<\n string,\n StandardSchemaV1\n >,\n _TEvent extends EventObject = EventObject,\n TActor extends ProvidedActor = ProvidedActor,\n TActionMap extends Implementations['actions'] = Implementations['actions'],\n TActorMap extends\n Implementations['actorSources'] = Implementations['actorSources'],\n TGuardMap extends Implementations['guards'] = Implementations['guards'],\n TDelayMap extends Implementations['delays'] = Implementations['delays'],\n TDelays extends string = string,\n TTag extends StandardSchemaV1.InferOutput<TTagSchema> &\n string = StandardSchemaV1.InferOutput<TTagSchema> & string,\n TInput = unknown,\n const TSS extends StateSchema = StateSchema\n>(\n config: TSS &\n ValidateDelayReferences<TSS> &\n Next_MachineConfig<\n StandardSchemaV1,\n TEventSchemaMap,\n TEmittedSchemaMap,\n TInputSchema,\n TOutputSchema,\n TMetaSchema,\n TTagSchema,\n TChildrenSchemaMap,\n WidenLiterals<TContext>,\n InferEvents<TEventSchemaMap>,\n Cast<\n MergeChildren<InferChildren<TChildrenSchemaMap>, TActor>,\n Record<string, AnyActorRef | undefined>\n >,\n TDelays,\n TTag,\n TActionMap,\n TActorMap,\n TGuardMap,\n TDelayMap,\n false\n > & {\n schemas?: { context?: never };\n // TContext inference site: the `const` state-schema inference above\n // suppresses literal widening, so context is widened explicitly via\n // WidenLiterals before being consumed by handlers and the snapshot.\n context?:\n | TContext\n | ((_: {\n spawn: any;\n actorSources: TActorMap;\n input: InferOutput<TInputSchema, unknown>;\n self: any;\n }) => TContext);\n }\n): StateMachine<\n WidenLiterals<TContext>,\n | InferEvents<TEventSchemaMap>\n | ([RoutableStateId<TSS>] extends [never]\n ? never\n : {\n type: 'xstate.route';\n to: RoutableStateId<TSS>;\n }),\n Cast<\n MergeChildren<InferChildren<TChildrenSchemaMap>, TActor>,\n Record<string, AnyActorRef | undefined>\n >,\n StateValue,\n TTag & string,\n TInput,\n InferOutput<TOutputSchema, unknown>,\n WithDefault<InferEvents<TEmittedSchemaMap>, AnyEventObject>,\n InferOutput<TMetaSchema, MetaObject>, // TMeta\n TSS, // TStateSchema\n TActionMap,\n TActorMap,\n TGuardMap,\n DelayMapFromNames<TDelays, TDelayMap>\n> & {\n states: TSS;\n};\n\n// Implementation\nexport function createMachine(config: any): any {\n return new StateMachine<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any, // TEmitted\n any, // TMeta\n any, // TStateSchema\n any,\n any,\n any,\n any\n >(config) as any;\n}\n\nexport function createStateConfig<\n TContextSchema extends StandardSchemaV1,\n TEventSchema extends StandardSchemaV1,\n TEmittedSchema extends StandardSchemaV1,\n _TInputSchema extends StandardSchemaV1,\n TOutputSchema extends StandardSchemaV1,\n TMetaSchema extends StandardSchemaV1,\n TTagSchema extends StandardSchemaV1,\n // TContext extends MachineContext,\n _TEvent extends StandardSchemaV1.InferOutput<TEventSchema> & EventObject, // TODO: consider using a stricter `EventObject` here\n _TActor extends ProvidedActor,\n TActionMap extends Implementations['actions'],\n TActorMap extends Implementations['actorSources'],\n TGuardMap extends Implementations['guards'],\n TDelayMap extends Implementations['delays'],\n TDelays extends string,\n _TTag extends StandardSchemaV1.InferOutput<TTagSchema> & string,\n _TInput,\n const TSS extends StateSchema\n>(\n config: TSS &\n Next_StateNodeConfig<\n InferOutput<TContextSchema, MachineContext>,\n DoNotInfer<StandardSchemaV1.InferOutput<TEventSchema> & EventObject>,\n DoNotInfer<TDelays>,\n DoNotInfer<StandardSchemaV1.InferOutput<TTagSchema> & string>,\n DoNotInfer<StandardSchemaV1.InferOutput<TOutputSchema>>,\n DoNotInfer<StandardSchemaV1.InferOutput<TEmittedSchema> & EventObject>,\n DoNotInfer<InferOutput<TMetaSchema, MetaObject>>,\n DoNotInfer<Record<string, AnyActorRef | undefined>>,\n DoNotInfer<TActionMap>,\n DoNotInfer<TActorMap>,\n DoNotInfer<TGuardMap>,\n DoNotInfer<TDelayMap>\n >\n): typeof config {\n return config;\n}\n","import {\n Action,\n AnyActorLogic,\n AnyActorRef,\n AnyEventObject,\n AnyStateMachine,\n EventObject,\n MachineContext,\n MetaObject\n} from './types';\nimport {\n Next_StateNodeConfig,\n Next_TransitionConfigOrTarget\n} from './types.v6';\nimport { createMachine } from './createMachine';\nimport { parseDelayToMilliseconds } from './delay';\n\nfunction delayToMs(delay: string | number): number {\n const parsedDelay = parseDelayToMilliseconds(delay);\n if (parsedDelay !== undefined) return parsedDelay;\n return typeof delay === 'string' ? parseFloat(delay) || 0 : delay;\n}\n\nexport interface RaiseJSON {\n type: '@xstate.raise';\n event: EventObject;\n id?: string;\n delay?: number;\n}\n\nexport interface CancelJSON {\n type: '@xstate.cancel';\n id: string;\n}\n\nexport interface LogJSON {\n type: '@xstate.log';\n args: any[];\n}\n\ninterface EmitJSON {\n type: '@xstate.emit';\n event: AnyEventObject;\n}\n\ninterface AssignJSON {\n type: '@xstate.assign';\n context: MachineContext;\n}\n\ninterface ScxmlAssignJSON {\n type: 'scxml.assign';\n /** SCXML location attribute - the context property to assign to */\n location: string;\n /** SCXML expr attribute - expression to evaluate */\n expr: string;\n}\n\nexport interface ScxmlRaiseJSON {\n type: 'scxml.raise';\n /** Event type, or undefined if using eventexpr */\n event?: string;\n /** Expression to evaluate for event type */\n eventexpr?: string;\n /** Params with expressions to evaluate */\n params?: Array<{ name: string; expr: string }>;\n id?: string;\n delay?: number;\n /** Expression for delay */\n delayexpr?: string;\n /** Static target (e.g. '#_parent') */\n target?: string;\n /** Expression for target */\n targetexpr?: string;\n}\n\ninterface ScxmlScriptJSON {\n type: 'scxml.script';\n /** The script code to execute */\n code: string;\n}\n\nexport interface ScxmlForeachJSON {\n type: 'scxml.foreach';\n array: string;\n item: string;\n index?: string;\n actions: ActionJSON[];\n}\n\nexport interface ScxmlCancelJSON {\n type: 'scxml.cancel';\n sendidexpr: string;\n}\n\nexport interface ScxmlDonedataJSON {\n params?: Array<{ name: string; expr: string }>;\n contentExpr?: string;\n contentText?: string;\n}\n\n/**\n * Isolated executable-content block. Errors in nested actions stop this block\n * but do not propagate to the surrounding action list. Used to model SCXML's\n * separate <onentry>/<onexit> blocks: each is its own block per spec.\n */\ninterface ScxmlBlockJSON {\n type: 'scxml.block';\n actions: ActionJSON[];\n}\n\ninterface ScxmlIfJSON {\n type: 'scxml.if';\n branches: Array<{\n cond?: string;\n actions: ActionJSON[];\n }>;\n}\n\ntype BuiltInActionJSON =\n | RaiseJSON\n | CancelJSON\n | LogJSON\n | EmitJSON\n | AssignJSON;\n\ninterface CustomActionJSON {\n type: string;\n params?: Record<string, unknown>;\n}\n\nexport type ActionJSON =\n | CustomActionJSON\n | RaiseJSON\n | CancelJSON\n | LogJSON\n | EmitJSON\n | AssignJSON\n | ScxmlAssignJSON\n | ScxmlRaiseJSON\n | ScxmlScriptJSON\n | ScxmlIfJSON\n | ScxmlForeachJSON\n | ScxmlCancelJSON\n | ScxmlBlockJSON;\n\nexport interface GuardJSON {\n type: string;\n params?: Record<string, unknown>;\n}\n\nexport interface InvokeJSON {\n id?: string;\n registryKey?: string;\n src: string | UnserializableMarker;\n input?: unknown;\n onDone?: TransitionJSON | TransitionJSON[];\n onError?: TransitionJSON | TransitionJSON[];\n onSnapshot?: TransitionJSON | TransitionJSON[];\n timeout?: number | string;\n onTimeout?: TransitionJSON | TransitionJSON[];\n}\n\nexport interface TransitionJSON {\n target?: string | string[];\n context?: MachineContext;\n actions?: ActionJSON[];\n guard?: GuardJSON;\n description?: string;\n reenter?: boolean;\n meta?: MetaObject;\n input?: unknown;\n}\n\nexport interface StateNodeJSON {\n id?: string;\n key?: string;\n type?: 'atomic' | 'compound' | 'parallel' | 'final' | 'history' | 'choice';\n initial?: string;\n states?: Record<string, StateNodeJSON>;\n on?: Record<string, TransitionJSON | TransitionJSON[]>;\n after?: Record<string, TransitionJSON | TransitionJSON[]>;\n always?: TransitionJSON | TransitionJSON[];\n choice?: TransitionJSON;\n /**\n * JSON route config. Unlike the authoring API (a function), the JSON layer\n * allows an object form whose `guard` may be a named guard reference (string)\n * resolved against the machine's `guards` implementations.\n */\n route?: {\n description?: string;\n reenter?: boolean;\n meta?: MetaObject;\n guard?: string;\n input?: Record<string, unknown>;\n };\n invoke?: InvokeJSON | InvokeJSON[];\n entry?: ActionJSON[];\n exit?: ActionJSON[];\n meta?: MetaObject;\n description?: string;\n tags?: string[];\n input?: unknown;\n timeout?: number | string;\n onTimeout?: TransitionJSON | TransitionJSON[];\n history?: 'shallow' | 'deep';\n target?: string;\n output?: unknown;\n context?: Record<string, unknown>;\n _scxmlDonedata?: ScxmlDonedataJSON;\n}\nexport interface MachineJSON extends StateNodeJSON {\n version?: string;\n actions?: Record<string, unknown>;\n guards?: Record<string, unknown>;\n actorSources?: Record<string, unknown>;\n delays?: Record<string, unknown>;\n schemas?: Record<string, unknown>;\n}\n\ninterface UnserializableMarker {\n $unserializable: 'function' | 'actor' | 'schema' | 'value';\n id?: string;\n}\n\ninterface MachineImplementations {\n actions?: Record<string, (...args: any[]) => unknown>;\n guards?: Record<string, (...args: any[]) => boolean>;\n actorSources?: Record<string, AnyActorLogic>;\n delays?: Record<string, number | ((...args: any[]) => number)>;\n}\n\ntype ProvidedImplementations = Required<MachineImplementations>;\n\nfunction isUnserializableMarker(value: unknown): value is UnserializableMarker {\n return (\n !!value &&\n typeof value === 'object' &&\n '$unserializable' in value &&\n typeof (value as any).$unserializable === 'string'\n );\n}\n\nfunction assertNoUnresolvedMarkers(value: unknown, path = '$'): void {\n if (isUnserializableMarker(value)) {\n if (value.$unserializable === 'actor' && path.endsWith('.src')) {\n return;\n }\n throw new Error(`Unresolved ${value.$unserializable} at ${path}`);\n }\n if (!value || typeof value !== 'object') {\n return;\n }\n if (Array.isArray(value)) {\n value.forEach((item, index) =>\n assertNoUnresolvedMarkers(item, `${path}[${index}]`)\n );\n return;\n }\n for (const key of Object.keys(value)) {\n const child = (value as Record<string, unknown>)[key];\n const isImplementationMarker =\n path === '$' &&\n (key === 'actions' ||\n key === 'guards' ||\n key === 'actorSources' ||\n key === 'delays' ||\n key === 'schemas');\n if (isImplementationMarker) {\n continue;\n }\n assertNoUnresolvedMarkers(child, `${path}.${key}`);\n }\n}\n\nfunction assertRootImplementationMarkers(\n json: MachineJSON,\n implementations: MachineImplementations\n): void {\n for (const kind of ['actions', 'guards', 'actorSources', 'delays'] as const) {\n const map = json[kind];\n if (!map) {\n continue;\n }\n for (const key of Object.keys(map)) {\n const value = map[key];\n if (!isUnserializableMarker(value)) {\n continue;\n }\n if (\n !(implementations[kind] as Record<string, unknown> | undefined)?.[key]\n ) {\n throw new Error(`Missing ${kind}.${key}`);\n }\n }\n }\n}\n\nfunction extractSerializableDelays(\n delays: Record<string, unknown> | undefined\n): Record<string, number> {\n const result: Record<string, number> = {};\n if (!delays) {\n return result;\n }\n for (const key of Object.keys(delays)) {\n const value = delays[key];\n if (typeof value === 'number') {\n result[key] = value;\n }\n }\n return result;\n}\n\nfunction mergeImplementations(\n json: MachineJSON,\n implementations: MachineImplementations\n): ProvidedImplementations {\n return {\n actions: implementations.actions ?? {},\n guards: implementations.guards ?? {},\n actorSources: implementations.actorSources ?? {},\n delays: {\n ...extractSerializableDelays(json.delays),\n ...(implementations.delays ?? {})\n }\n };\n}\n\nlet _scxmlSessionId = 'session_' + Math.random().toString(36).slice(2);\nlet _scxmlMachineName = '';\n\n/** Evaluates an SCXML expression with context variables available via `with`. */\nfunction evaluateExpr(\n context: MachineContext,\n expr: string,\n event: AnyEventObject | null,\n self?: AnyActorRef\n): unknown {\n const fnBody = `\nwith (context) {\n return (${expr});\n}\n `.trim();\n // eslint-disable-next-line @typescript-eslint/no-implied-eval\n const fn = new Function(\n 'context',\n '_event',\n '_sessionid',\n '_name',\n '_ioprocessors',\n 'In',\n fnBody\n );\n const In = (stateId: string) => {\n if (!self) return false;\n try {\n const snap = (self as any).getSnapshot?.();\n if (snap?._nodes) {\n const sanitized = stateId.replace(/\\./g, '$');\n return snap._nodes.some(\n (node: any) =>\n node.id === sanitized || node.id.endsWith('.' + sanitized)\n );\n }\n } catch {\n // ignore\n }\n return false;\n };\n const SCXML_ORIGIN = '#_scxml_session';\n const SCXML_ORIGIN_TYPE = 'http://www.w3.org/TR/scxml/#SCXMLEventProcessor';\n const isExternal = event && (event as any)._scxmlExternal;\n const isInitEvent = event && event.type === '@xstate.init';\n // Per SCXML spec, _event has these fields. Fields that don't apply to a\n // particular event are present with value `undefined` (so `'name' in _event`\n // is true but `typeof _event.name === 'undefined'` for unset fields).\n // For xstate.done.* events, _event.data is the `output` payload (matches\n // SCXML's done event semantics where data is the donedata).\n const isDoneEvent =\n event &&\n typeof event.type === 'string' &&\n event.type.startsWith('xstate.done.');\n const explicitType =\n event && ((event as any)._scxmlEventType as string | undefined);\n const scxmlEvent =\n event && !isInitEvent\n ? {\n name: event.type,\n type: explicitType || (isExternal ? 'external' : 'internal'),\n sendid: (event as any)._scxmlSendId as string | undefined,\n origin: isExternal ? SCXML_ORIGIN : undefined,\n origintype: isExternal ? SCXML_ORIGIN_TYPE : undefined,\n invokeid: (event as any)._scxmlInvokeId as string | undefined,\n data: isDoneEvent\n ? (event as any).output\n : (event as any)._scxmlEventData !== undefined\n ? (event as any)._scxmlEventData\n : event\n }\n : undefined;\n const result = fn(\n context,\n scxmlEvent,\n _scxmlSessionId,\n _scxmlMachineName,\n { scxml: { location: `#_scxml_${_scxmlSessionId}` } },\n In\n );\n\n return result;\n}\n\n/** Executes an SCXML script block and returns updated context values. */\nfunction executeScript(\n context: MachineContext,\n code: string\n): Record<string, unknown> {\n // Create a proxy to track which properties are modified\n const updates: Record<string, unknown> = {};\n const contextKeys = Object.keys(context);\n\n // Build variable declarations and reassignment capture\n const varDeclarations = contextKeys\n .map((k) => `let ${k} = context.${k};`)\n .join('\\n');\n const captureUpdates = contextKeys\n .map((k) => `updates.${k} = ${k};`)\n .join('\\n');\n\n const fnBody = `\n${varDeclarations}\n${code}\n${captureUpdates}\nreturn updates;\n `;\n // eslint-disable-next-line @typescript-eslint/no-implied-eval\n const fn = new Function('context', 'updates', fnBody);\n return fn(context, updates);\n}\n\nexport function createMachineFromConfig(\n json: MachineJSON,\n implementations: MachineImplementations = {}\n): AnyStateMachine {\n assertRootImplementationMarkers(json, implementations);\n assertNoUnresolvedMarkers(json);\n const resolvedImplementations = mergeImplementations(json, implementations);\n\n // Pending transition actions: set by .to functions, consumed by entry functions.\n // This bridges SCXML's exit→transition→entry action ordering with XState's\n // .to function receiving pre-exit context.\n // Map keyed by target state ID so parallel transitions don't overwrite each other.\n const pendingTransitionActionsMap: Record<string, ActionJSON[]> = {};\n\n // Ordered queue of ALL transition actions (targeted + targetless) for parallel\n // context sharing. In SCXML, all transition actions execute sequentially in\n // document order with a shared evolving data model.\n const allTransitionActions: ActionJSON[][] = [];\n // Pre-transition context saved when a targetless .to executes. Used by entry\n // functions to re-execute all transition actions from scratch when parallel\n // targetless transitions coexist with targeted transitions.\n let contextBeforeTargetless: MachineContext | null = null;\n // Platform errors collected during transition selection (e.g., failing\n // <transition cond>). Drained by the next state's entry into the internal\n // event queue so they're processed before any external events.\n const pendingPlatformErrors: Array<Record<string, unknown>> = [];\n\n function getMissingGuardMessage(type: string, guards: Record<string, any>) {\n return `Guard '${type}' is not implemented in machine '${json.id ?? '(machine)'}'. Available guards: ${\n Object.keys(guards)\n .map((key) => `'${key}'`)\n .join(', ') || '(none)'\n }.`;\n }\n\n function resolveGuardConfig(guard: GuardJSON | undefined) {\n if (!guard) {\n return undefined;\n }\n return (args: any) => {\n const guardImpl = args.guards?.[guard.type];\n if (!guardImpl) {\n throw new Error(getMissingGuardMessage(guard.type, args.guards ?? {}));\n }\n return guardImpl(args, guard.params);\n };\n }\n\n function resolveRouteConfig(route: StateNodeJSON['route']) {\n if (!route || typeof route === 'function') {\n return route;\n }\n const { guard, ...routeConfig } = route;\n if (!guard) {\n return routeConfig;\n }\n const resolvedGuard = resolveGuardConfig({ type: guard });\n return (args: any) => (resolvedGuard!(args) ? routeConfig : undefined);\n }\n\n function iterNode(node: StateNodeJSON, nodeKey?: string) {\n const originalEntryActions = node.entry;\n const stateId = node.id || nodeKey;\n\n // Wrap entry to first execute any pending transition actions, then normal entry.\n // This ensures SCXML execution order: exit → transition_actions → entry_actions\n // because pending transition actions are set by .to (before exit) but executed\n // in entry (after exit), thus seeing post-exit context.\n const entryFn: Action<any, any, any, any, any, any, any> | undefined = (\n x,\n enq\n ) => {\n // Drain any platform errors queued during transition selection (e.g.,\n // failing <transition cond=\"...\"> evaluations). These must be raised\n // internally so they're processed before subsequent external events.\n while (pendingPlatformErrors.length) {\n const err = pendingPlatformErrors.shift()!;\n enq.raise({\n type: 'error.execution',\n _scxmlEventType: 'platform',\n _scxmlEventData: err\n } as AnyEventObject);\n }\n\n let context: MachineContext | undefined;\n\n // If targetless transitions were interleaved with targeted transitions\n // (parallel state), re-execute ALL transition actions from the original\n // pre-transition context. This overrides any .to-produced context with\n // the correct SCXML document-order sequential execution.\n // Only trigger when BOTH targeted (pending in map) and targetless fired\n // in the same microstep — prevents stale data from previous events.\n if (\n contextBeforeTargetless &&\n allTransitionActions.length > 0 &&\n Object.keys(pendingTransitionActionsMap).length > 0\n ) {\n let ctx = contextBeforeTargetless;\n for (const actions of allTransitionActions) {\n const mergedX = { ...x, context: ctx };\n const result = executeActions(actions, mergedX, enq);\n if (result.context) {\n ctx = result.context;\n }\n }\n allTransitionActions.length = 0;\n contextBeforeTargetless = null;\n // Clear per-target map since we re-processed everything\n for (const key of Object.keys(pendingTransitionActionsMap)) {\n delete pendingTransitionActionsMap[key];\n }\n context = ctx;\n } else {\n // Normal path: consume pending transition actions for THIS state.\n // In parallel states, each target gets its own pending actions.\n const transActions = stateId\n ? pendingTransitionActionsMap[stateId]\n : undefined;\n if (transActions) {\n delete pendingTransitionActionsMap[stateId!];\n const result = executeActions(transActions, x, enq);\n if (result.context) {\n context = result.context;\n }\n }\n // Clear stale targetless data from previous microsteps\n contextBeforeTargetless = null;\n allTransitionActions.length = 0;\n }\n\n // Execute normal entry actions\n if (originalEntryActions?.length) {\n const mergedX = context ? { ...x, context } : x;\n const result = executeActions(originalEntryActions, mergedX, enq);\n if (result.context) {\n context = result.context;\n }\n }\n\n return { context };\n };\n\n const nodeConfig: any = {\n id: node.id,\n initial: node.initial,\n type: node.type,\n history: node.history,\n target: node.target,\n description: node.description,\n tags: node.tags,\n input: node.input,\n timeout: node.timeout,\n states: node.states\n ? Object.entries(node.states).reduce(\n (acc, [key, value]) => {\n acc[key] = iterNode(value, key);\n return acc;\n },\n {} as Record<\n string,\n Next_StateNodeConfig<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n >\n >\n )\n : undefined,\n on: node.on\n ? Object.entries(node.on).reduce(\n (acc, [key, value]) => {\n acc[key] = getTransitionConfig(value);\n return acc;\n },\n {} as Record<\n string,\n Next_TransitionConfigOrTarget<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n >\n >\n )\n : undefined,\n always: node.always ? getTransitionConfig(node.always) : undefined,\n choice: node.choice ? getTransitionConfig(node.choice) : undefined,\n route: resolveRouteConfig(node.route),\n after: node.after\n ? Object.entries(node.after).reduce(\n (acc, [key, value]) => {\n acc[key] = getTransitionConfig(value);\n return acc;\n },\n {} as Record<string, any>\n )\n : undefined,\n onTimeout: node.onTimeout\n ? getTransitionConfig(node.onTimeout)\n : undefined,\n entry: entryFn as any,\n exit: node.exit ? (iterActions(node.exit) as any) : undefined,\n invoke: node.invoke ? iterInvokeConfigs(node.invoke) : undefined,\n meta: node.meta,\n output: node._scxmlDonedata\n ? makeDonedataOutput(node._scxmlDonedata)\n : node.output\n };\n\n return nodeConfig;\n }\n\n function makeDonedataOutput(donedata: ScxmlDonedataJSON) {\n return ({ context, event, self }: any) => {\n try {\n if (donedata.params && donedata.params.length) {\n const out: Record<string, unknown> = {};\n for (const param of donedata.params) {\n out[param.name] = evaluateExpr(context, param.expr, event, self);\n }\n return out;\n }\n if (donedata.contentExpr !== undefined) {\n return evaluateExpr(context, donedata.contentExpr, event, self);\n }\n if (donedata.contentText !== undefined) {\n // Try parsing as a JS expression (number/object/array literals);\n // fall back to the raw string.\n try {\n return evaluateExpr(context, donedata.contentText, event, self);\n } catch {\n return donedata.contentText;\n }\n }\n } catch (err) {\n // Per SCXML, donedata expression errors raise error.execution and\n // result in undefined event.data. Queue for the next entry to drain.\n const message =\n err instanceof Error\n ? err.message\n : typeof err === 'string'\n ? err\n : 'unknown error';\n pendingPlatformErrors.push({\n tagname: 'donedata',\n message,\n line: NaN,\n column: NaN,\n reason: message\n });\n }\n return undefined;\n };\n }\n\n function iterInvokeConfigs(invokes: InvokeJSON | InvokeJSON[]): any {\n const invokeArray = Array.isArray(invokes) ? invokes : [invokes];\n return invokeArray.map((inv) => {\n const extInv = inv as InvokeJSON & { _nestedMachineJSON?: MachineJSON };\n // Create child machine from nested SCXML JSON\n let src: any;\n if (extInv._nestedMachineJSON) {\n src = createMachineFromConfig(\n extInv._nestedMachineJSON,\n resolvedImplementations\n );\n } else if (isUnserializableMarker(inv.src)) {\n src = inv.src.id\n ? resolvedImplementations.actorSources[inv.src.id]\n : undefined;\n if (!src) {\n throw new Error(`Missing actorSources.${inv.src.id ?? ''}`);\n }\n } else {\n src = inv.src;\n }\n return {\n src,\n id: inv.id,\n registryKey: inv.registryKey,\n input: inv.input,\n onDone: inv.onDone ? getTransitionConfig(inv.onDone) : undefined,\n onError: inv.onError ? getTransitionConfig(inv.onError) : undefined,\n onSnapshot: inv.onSnapshot\n ? getTransitionConfig(inv.onSnapshot)\n : undefined,\n timeout: inv.timeout,\n onTimeout: inv.onTimeout\n ? getTransitionConfig(inv.onTimeout)\n : undefined\n };\n });\n }\n\n /**\n * Raise an SCXML error.execution platform event onto the internal queue. Per\n * spec, error.execution is type='platform' and _event.data contains error\n * info. The surrounding block of executable content stops.\n */\n function raiseErrorExecution(\n state: ExecState,\n tagname: string,\n err: unknown\n ) {\n const message =\n err instanceof Error\n ? err.message\n : typeof err === 'string'\n ? err\n : 'unknown error';\n state.enq.raise({\n type: 'error.execution',\n _scxmlEventType: 'platform',\n _scxmlEventData: {\n tagname,\n message,\n line: NaN,\n column: NaN,\n reason: message\n }\n } as AnyEventObject);\n state.errored = true;\n }\n\n interface ExecState {\n enq: any;\n errored: boolean;\n }\n\n /** Execute an array of SCXML action JSON descriptors with context and enqueue. */\n function executeActions(\n actions: ActionJSON[],\n x: any,\n enq: any,\n parentState?: ExecState\n ): { context: MachineContext | undefined; errored: boolean } {\n const state: ExecState = parentState ?? { enq, errored: false };\n let context: MachineContext | undefined;\n for (const action of actions) {\n if (state.errored) break;\n if (isBuiltInActionJSON(action)) {\n switch (action.type) {\n case '@xstate.raise': {\n // Tag as external if it has a delay (from <send>, not <raise>).\n // Attach _scxmlSendId so _event.sendid can be read in expressions.\n const isExternal = action.delay !== undefined;\n const event =\n isExternal || action.id !== undefined\n ? {\n ...action.event,\n ...(isExternal ? { _scxmlExternal: true } : {}),\n ...(action.id !== undefined\n ? { _scxmlSendId: action.id }\n : {})\n }\n : action.event;\n enq.raise(event, {\n id: action.id,\n delay: action.delay\n });\n break;\n }\n case '@xstate.cancel':\n enq.cancel(action.id);\n break;\n case '@xstate.log':\n enq.log(...action.args);\n break;\n case '@xstate.emit':\n enq.emit(action.event);\n break;\n case '@xstate.assign':\n context ??= {};\n Object.assign(context, action.context);\n break;\n default:\n throw new Error(`Unknown built-in action: ${(action as any).type}`);\n }\n } else if (action.type === 'scxml.assign') {\n const scxmlAction = action as ScxmlAssignJSON;\n const mergedContext = { ...x.context, ...context };\n let value: unknown;\n try {\n value = evaluateExpr(\n mergedContext,\n scxmlAction.expr,\n x.event,\n x.self\n );\n } catch (err) {\n raiseErrorExecution(state, 'assign', err);\n continue;\n }\n // Per SCXML, assigning to a location that doesn't exist on the\n // datamodel is an error. Allow setting an own property via context;\n // detect deep paths (a.b.c) which we don't support.\n if (scxmlAction.location.includes('.')) {\n raiseErrorExecution(\n state,\n 'assign',\n new Error(`Invalid assign location: ${scxmlAction.location}`)\n );\n continue;\n }\n context ??= {};\n context[scxmlAction.location] = value;\n } else if (action.type === 'scxml.raise') {\n const scxmlAction = action as ScxmlRaiseJSON;\n const mergedContext = { ...x.context, ...context };\n\n let eventType: string;\n let eventData: Record<string, unknown>;\n let target: string | undefined;\n let delay: number | undefined;\n try {\n eventType = scxmlAction.eventexpr\n ? (evaluateExpr(\n mergedContext,\n scxmlAction.eventexpr,\n x.event,\n x.self\n ) as string)\n : scxmlAction.event || 'unknown';\n\n eventData = { type: eventType };\n if (scxmlAction.params) {\n for (const param of scxmlAction.params) {\n eventData[param.name] = evaluateExpr(\n mergedContext,\n param.expr,\n x.event,\n x.self\n );\n }\n }\n\n target = scxmlAction.targetexpr\n ? (evaluateExpr(\n mergedContext,\n scxmlAction.targetexpr,\n x.event,\n x.self\n ) as string)\n : scxmlAction.target;\n\n const isInternalTarget = target === '#_internal';\n delay = scxmlAction.delayexpr\n ? delayToMs(\n evaluateExpr(\n mergedContext,\n scxmlAction.delayexpr,\n x.event,\n x.self\n ) as string | number\n )\n : isInternalTarget\n ? undefined\n : scxmlAction.delay;\n } catch (err) {\n raiseErrorExecution(state, 'send', err);\n continue;\n }\n\n const isInternalTarget = target === '#_internal';\n const isParentTarget = target === '#_parent';\n\n // Validate target. SCXML targets must be '#_internal', '#_parent',\n // or '#_<id>'. A bare string without the '#_' prefix is invalid and\n // raises error.execution.\n if (\n typeof target === 'string' &&\n target.length > 0 &&\n !target.startsWith('#_')\n ) {\n raiseErrorExecution(\n state,\n 'send',\n new Error(`Invalid send target: ${target}`)\n );\n continue;\n }\n // Attach send id so _event.sendid can be read in expressions.\n if (scxmlAction.id !== undefined) {\n (eventData as any)._scxmlSendId = scxmlAction.id;\n }\n // Resolve target at runtime: parent, child, or self\n if (isParentTarget && x.parent) {\n // Send to parent via sendTo; pass delay if present\n enq.sendTo(\n x.parent,\n eventData as AnyEventObject,\n delay !== undefined ? { delay } : undefined\n );\n } else if (\n typeof target === 'string' &&\n target.startsWith('#_') &&\n !isParentTarget &&\n !isInternalTarget\n ) {\n // #_<invokeId> → try to send to child actor, fall back to self-raise\n const childId = target.slice(2); // strip '#_'\n const childRef = x.children?.[childId];\n if (childRef) {\n enq.sendTo(childRef, eventData as AnyEventObject);\n } else {\n // Not a known child (e.g. #_scxml_sessionid) → self-raise\n if (delay !== undefined) {\n (eventData as any)._scxmlExternal = true;\n }\n enq.raise(eventData as AnyEventObject, {\n id: scxmlAction.id,\n delay\n });\n }\n } else {\n // Self-send or no special target: raise as external event\n if (delay !== undefined) {\n (eventData as any)._scxmlExternal = true;\n }\n enq.raise(eventData as AnyEventObject, {\n id: scxmlAction.id,\n delay\n });\n }\n } else if (action.type === 'scxml.cancel') {\n const scxmlAction = action as ScxmlCancelJSON;\n const mergedContext = { ...x.context, ...context };\n try {\n const sendId = evaluateExpr(\n mergedContext,\n scxmlAction.sendidexpr,\n x.event,\n x.self\n ) as string;\n if (sendId) {\n enq.cancel(sendId);\n }\n } catch {\n // ignore evaluation errors\n }\n } else if (action.type === 'scxml.script') {\n const scxmlAction = action as ScxmlScriptJSON;\n const mergedContext = { ...x.context, ...context };\n try {\n const updatedContext = executeScript(mergedContext, scxmlAction.code);\n context ??= {};\n Object.assign(context, updatedContext);\n } catch (err) {\n raiseErrorExecution(state, 'script', err);\n }\n } else if (action.type === 'scxml.foreach') {\n const scxmlAction = action as ScxmlForeachJSON;\n const mergedContext = { ...x.context, ...context };\n // SCXML: `item` (and `index` if present) must be valid datamodel\n // locations — i.e. legal identifiers. Reject things like 'continue'\n // (string literal) or '7' (number).\n const isLegalIdentifier = (s: string) =>\n /^[$_a-zA-Z][$_a-zA-Z0-9]*$/.test(s);\n if (\n !isLegalIdentifier(scxmlAction.item) ||\n (scxmlAction.index && !isLegalIdentifier(scxmlAction.index))\n ) {\n raiseErrorExecution(\n state,\n 'foreach',\n new Error('foreach item/index is not a legal location')\n );\n continue;\n }\n let arr: unknown;\n try {\n arr = evaluateExpr(mergedContext, scxmlAction.array, x.event, x.self);\n } catch (err) {\n raiseErrorExecution(state, 'foreach', err);\n continue;\n }\n if (!Array.isArray(arr)) {\n raiseErrorExecution(\n state,\n 'foreach',\n new Error('foreach array is not iterable')\n );\n continue;\n }\n context ??= {};\n for (let i = 0; i < arr.length; i++) {\n context[scxmlAction.item] = arr[i];\n if (scxmlAction.index) {\n context[scxmlAction.index] = i;\n }\n const iterX = { ...x, context: { ...x.context, ...context } };\n const iterResult = executeActions(\n scxmlAction.actions,\n iterX,\n enq,\n state\n );\n if (iterResult.context) {\n Object.assign(context, iterResult.context);\n }\n if (state.errored) break;\n }\n } else if (action.type === 'scxml.block') {\n const scxmlAction = action as ScxmlBlockJSON;\n const blockX = { ...x, context: { ...x.context, ...context } };\n // Block has its own ExecState — errors don't propagate to parent.\n const blockResult = executeActions(scxmlAction.actions, blockX, enq);\n if (blockResult.context) {\n context ??= {};\n for (const key of Object.keys(blockResult.context)) {\n if (blockResult.context[key] !== x.context[key]) {\n context[key] = blockResult.context[key];\n }\n }\n }\n } else if (action.type === 'scxml.if') {\n const scxmlAction = action as ScxmlIfJSON;\n const mergedContext = { ...x.context, ...context };\n for (const branch of scxmlAction.branches) {\n let condResult: boolean;\n if (branch.cond) {\n try {\n condResult = !!evaluateExpr(\n mergedContext,\n branch.cond,\n x.event,\n x.self\n );\n } catch (err) {\n raiseErrorExecution(state, 'if', err);\n condResult = false;\n }\n } else {\n condResult = true;\n }\n if (condResult) {\n if (branch.actions.length) {\n const branchX = { ...x, context: mergedContext };\n const branchResult = executeActions(\n branch.actions,\n branchX,\n enq,\n state\n );\n if (branchResult.context) {\n context ??= {};\n for (const key of Object.keys(branchResult.context)) {\n if (branchResult.context[key] !== x.context[key]) {\n context[key] = branchResult.context[key];\n }\n }\n }\n }\n break;\n }\n }\n } else {\n enq(x.actions[action.type], (action as CustomActionJSON).params);\n }\n }\n return {\n context: context ? { ...x.context, ...context } : undefined,\n errored: state.errored\n };\n }\n\n function iterActions(\n actions: ActionJSON[]\n ): Action<any, any, any, any, any, any, any> {\n return (x, enq) => executeActions(actions, x, enq);\n }\n\n function getTransitionConfig(\n transition: TransitionJSON | TransitionJSON[]\n ): any {\n const transitions = Array.isArray(transition) ? transition : [transition];\n\n // Return an array of transition configs. Each SCXML transition becomes\n // a separate XState transition with its own guard and optional .to.\n // This ensures guards are evaluated by XState's evaluateCandidate (once,\n // with pre-exit context) and NOT re-evaluated in computeEntrySet.\n return transitions.map((t) => {\n const target = Array.isArray(t.target) ? t.target[0] : t.target;\n const targetConfig = t.target;\n const guard = resolveGuardConfig(t.guard);\n\n // No guard and no actions: simple static config\n if (!guard && !t.actions?.length) {\n return {\n target: targetConfig,\n description: t.description,\n reenter: t.reenter,\n meta: t.meta,\n input: t.input\n };\n }\n\n // Guard but no actions: static config with guard\n if (guard && !t.actions?.length) {\n return {\n target: targetConfig,\n guard,\n description: t.description,\n reenter: t.reenter,\n meta: t.meta,\n input: t.input\n };\n }\n\n // Targetless transitions: execute actions directly in .to AND track for\n // parallel re-execution. For non-parallel, .to result is used directly.\n // For parallel (entries exist), first entry re-executes all in document order.\n if (!target) {\n return {\n guard,\n description: t.description,\n reenter: t.reenter,\n meta: t.meta,\n input: t.input,\n to: (x: any, enq: any) => {\n if (t.actions?.length) {\n // Track for parallel re-execution (dedup by reference)\n if (!allTransitionActions.includes(t.actions)) {\n allTransitionActions.push(t.actions);\n }\n // Save pre-transition context for parallel override\n contextBeforeTargetless ??= x.context;\n // Execute immediately (fallback for non-parallel case)\n const result = executeActions(t.actions, x, enq);\n if (result.context) {\n return { context: result.context };\n }\n }\n return {};\n }\n };\n }\n\n // Has target + actions: use guard (for XState evaluation) + .to (for pending actions).\n // The .to function does NOT re-check the guard — XState's evaluateCandidate\n // already validated it. The .to just stores actions for entry to execute.\n // Map by target state ID so parallel transitions each get their own actions.\n return {\n guard,\n description: t.description,\n reenter: t.reenter,\n meta: t.meta,\n input: t.input,\n to: (_x: any, _enq: any) => {\n if (t.actions?.length) {\n const targetId = target.replace(/^#/, '');\n pendingTransitionActionsMap[targetId] = t.actions;\n // Track for parallel re-execution (dedup by reference)\n if (!allTransitionActions.includes(t.actions)) {\n allTransitionActions.push(t.actions);\n }\n }\n return {\n target: targetConfig,\n reenter: t.reenter\n };\n }\n };\n });\n }\n\n const rootNodeConfig = iterNode(json);\n const contextConfig = json.context ? { context: json.context } : {};\n\n _scxmlMachineName = json.id || '';\n _scxmlSessionId = 'session_' + Math.random().toString(36).slice(2);\n\n const machine = createMachine({\n ...rootNodeConfig,\n ...contextConfig,\n version: json.version\n }) as unknown as AnyStateMachine;\n\n // Register SCXML guard implementations\n const providedGuards: Record<string, (args: any, params: any) => boolean> = {\n 'scxml.cond': ({ context, event, self }: any, params: any) => {\n const expr = params?.expr as string;\n if (!expr) return true;\n try {\n return !!evaluateExpr(context, expr, event, self);\n } catch (err) {\n // Per SCXML spec, a cond that fails to evaluate is treated as false\n // AND raises error.execution. We can't enqueue from a guard, so\n // queue it for the next entry to drain.\n const message =\n err instanceof Error\n ? err.message\n : typeof err === 'string'\n ? err\n : 'unknown error';\n pendingPlatformErrors.push({\n tagname: 'cond',\n message,\n line: NaN,\n column: NaN,\n reason: message\n });\n return false;\n }\n },\n 'xstate.stateIn': (args: any, params: any) => {\n const stateId = params?.stateId as string;\n if (!stateId) return false;\n const normalizedId = stateId.replace(/^#/, '');\n const snapshot = args._snapshot;\n if (snapshot?._nodes) {\n return snapshot._nodes.some((node: any) => node.id === normalizedId);\n }\n return false;\n },\n 'xstate.not': (args: any, params: any) => {\n const inner = params?.guard;\n const innerImpl = inner && args.guards?.[inner.type];\n if (!innerImpl) {\n throw new Error(\n `Guard '${inner?.type}' referenced by 'xstate.not' is not implemented.`\n );\n }\n return !innerImpl(args, inner.params);\n }\n };\n const provided = machine.provide({\n actions: resolvedImplementations.actions,\n actorSources: resolvedImplementations.actorSources,\n guards: {\n ...providedGuards,\n ...resolvedImplementations.guards\n },\n delays: resolvedImplementations.delays\n }) as AnyStateMachine;\n\n // Keep the original JSON so `serializeMachine(machine)`\n // round-trip losslessly.\n (provided as any)._json = json;\n return provided;\n}\n\nfunction isBuiltInActionJSON(action: ActionJSON): action is BuiltInActionJSON {\n return action.type.startsWith('@xstate.');\n}\n","/**\n * Machine-definition serialization.\n *\n * `machineConfigToJSON` converts a machine config into a JSON-safe structure\n * (the `MachineJSON` shape accepted by `createMachineFromConfig`). The boundary\n * between serializable structure and runtime implementations is explicit:\n * functions are represented as code expressions, while actor logic, runtime\n * schemas, and other non-code runtime values are replaced with an `{\n * \"$unserializable\": <kind> }` marker rather than silently dropped.\n *\n * A machine definition is fully portable iff its JSON contains no\n * `$unserializable` markers; reviving a definition that has markers requires\n * re-providing those implementations (e.g. via `machine.provide(...)` or the\n * `actions`/`guards`/`actorSources` maps on `createMachineFromConfig`\n * revival).\n */\n\nimport type { AnyStateMachine } from './types.ts';\n\nexport interface UnserializableMarker {\n $unserializable: 'function' | 'actor' | 'schema' | 'value';\n /** Best-effort identifier (function name, actor logic id) for diagnostics. */\n id?: string;\n}\n\nexport interface CodeExpression {\n '@type': 'code';\n lang: 'ts';\n expr: string;\n}\n\n/**\n * Returns the JSON-serializable definition of a machine.\n *\n * Inline functions are represented as `{ \"@type\": \"code\", lang: \"ts\", expr }`.\n * Actor logic and runtime schemas appear as `{ \"$unserializable\": ... }`\n * markers. A machine created via `createMachineFromConfig` returns its original\n * JSON config (lossless round-trip):\n *\n * ```ts\n * import { serializeMachine, createMachineFromConfig } from 'xstate';\n *\n * const json = serializeMachine(machine);\n * const revived = createMachineFromConfig(\n * JSON.parse(JSON.stringify(json))\n * );\n * ```\n */\nexport function serializeMachine(\n machine: AnyStateMachine\n): Record<string, unknown> {\n return (machine as any)._json ?? machineConfigToJSON(machine.config as any);\n}\n\nfunction marker(\n kind: UnserializableMarker['$unserializable'],\n id?: string\n): UnserializableMarker {\n const m: UnserializableMarker = { $unserializable: kind };\n if (id) {\n m.id = id;\n }\n return m;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\nfunction codeExpression(fn: Function): CodeExpression {\n return {\n '@type': 'code',\n lang: 'ts',\n expr: fn.toString()\n };\n}\n\nfunction isActorLogic(value: unknown): value is { id?: string } {\n return (\n !!value &&\n typeof value === 'object' &&\n typeof (value as any).transition === 'function' &&\n typeof (value as any).getInitialSnapshot === 'function'\n );\n}\n\nfunction isRuntimeSchema(value: unknown): boolean {\n return !!value && typeof value === 'object' && '~standard' in value;\n}\n\n/** JSON-safe deep copy of a plain value; functions become code expressions. */\nfunction valueToJSON(value: unknown): unknown {\n if (typeof value === 'function') {\n return codeExpression(value);\n }\n if (value === null || typeof value !== 'object') {\n return typeof value === 'bigint' || typeof value === 'symbol'\n ? marker('value')\n : value;\n }\n if (isActorLogic(value)) {\n return marker('actor', value.id);\n }\n if (isRuntimeSchema(value)) {\n return marker('schema');\n }\n if (Array.isArray(value)) {\n return value.map(valueToJSON);\n }\n if (value.constructor !== Object && value.constructor !== undefined) {\n // Class instances (actor logic, schemas, dates, ...) are not portable.\n return marker('value');\n }\n const result: Record<string, unknown> = {};\n for (const key of Object.keys(value)) {\n const v = (value as Record<string, unknown>)[key];\n if (v !== undefined) {\n result[key] = valueToJSON(v);\n }\n }\n return result;\n}\n\nfunction invokeToJSON(invoke: unknown): unknown {\n if (Array.isArray(invoke)) {\n return invoke.map(invokeToJSON);\n }\n const def = invoke as Record<string, unknown>;\n const result: Record<string, unknown> = {};\n for (const key of Object.keys(def)) {\n const value = def[key];\n if (value === undefined) {\n continue;\n }\n result[key] =\n key === 'src' && typeof value !== 'string'\n ? // Actor logic keeps its dedicated marker kind so revival knows the\n // contract is an actor, not a plain function.\n marker('actor', (value as { id?: string }).id)\n : valueToJSON(value);\n }\n return result;\n}\n\nfunction implementationsToJSON(\n map: Record<string, unknown> | undefined,\n kind: UnserializableMarker['$unserializable']\n): Record<string, unknown> | undefined {\n if (!map) {\n return undefined;\n }\n // Keys are preserved — they are the contract a revived machine must\n // fulfill via provide() — while values become markers (or stay, for\n // JSON-safe values like numeric delays).\n const result: Record<string, unknown> = {};\n for (const key of Object.keys(map)) {\n const value = map[key];\n if (kind === 'schema') {\n result[key] = marker('schema', key);\n } else if (typeof value === 'function') {\n result[key] = codeExpression(value);\n } else if (kind === 'actor' && value && typeof value === 'object') {\n result[key] = marker('actor', key);\n } else {\n result[key] = valueToJSON(value);\n }\n }\n return result;\n}\n\nfunction stateNodeConfigToJSON(\n config: Record<string, unknown>\n): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n\n for (const key of Object.keys(config)) {\n if (key === 'states' || key === 'invoke') {\n continue;\n }\n const value = config[key];\n if (value !== undefined) {\n result[key] = valueToJSON(value);\n }\n }\n if (config.invoke !== undefined) {\n result.invoke = invokeToJSON(config.invoke);\n }\n if (config.states) {\n const states: Record<string, unknown> = {};\n for (const key of Object.keys(config.states as object)) {\n states[key] = stateNodeConfigToJSON(\n (config.states as Record<string, Record<string, unknown>>)[key]\n );\n }\n result.states = states;\n }\n\n return result;\n}\n\n/**\n * Converts a machine config (as passed to `createMachine`) to its JSON-safe\n * definition. See module docs for the `$unserializable` marker contract.\n */\nexport function machineConfigToJSON(\n config: Record<string, unknown>\n): Record<string, unknown> {\n const result = stateNodeConfigToJSON(config);\n\n if (config.internalEvents !== undefined) {\n result.internalEvents = valueToJSON(config.internalEvents);\n }\n if (config.schemas) {\n const schemas: Record<string, unknown> = {};\n for (const key of Object.keys(config.schemas as object)) {\n const value = (config.schemas as Record<string, unknown>)[key];\n if (value && typeof value === 'object' && !('~standard' in value)) {\n // Map-form schemas (events/emitted): preserve event-type keys.\n schemas[key] = implementationsToJSON(\n value as Record<string, unknown>,\n 'schema'\n );\n } else {\n schemas[key] = marker('schema', key);\n }\n }\n result.schemas = schemas;\n }\n for (const key of ['actions', 'guards', 'actorSources', 'delays'] as const) {\n if (config[key]) {\n result[key] = implementationsToJSON(\n config[key] as Record<string, unknown>,\n key === 'actorSources' ? 'actor' : 'function'\n );\n }\n }\n\n return result;\n}\n","import { StandardSchemaV1 } from './schema.types.ts';\nimport { StateMachine } from './StateMachine.ts';\nimport {\n createActor as createActorFromLogic,\n type Actor,\n type RequiredActorOptionsKeys\n} from './createActor.ts';\nimport {\n AnyActorRef,\n AnyActorLogic,\n ActorRefFromLogic,\n AnyStateNode,\n EventObject,\n AnyEventObject,\n EventDescriptor,\n ExtractEvent,\n MachineContext,\n ProvidedActor,\n RoutableStateId,\n StateSchema,\n StateValue,\n ToChildren,\n MetaObject,\n Cast,\n Compute,\n EnqueueObject,\n SystemRegistry,\n RegistryKeyForLogic,\n ActorOptions,\n Observer,\n Subscription,\n OutputArg\n} from './types.ts';\nimport { AnyActorSystem } from './system.ts';\nimport { InspectionEvent } from './inspection.ts';\nimport {\n DelayMapFromNames,\n InferChildren,\n Implementations,\n InferOutput,\n InferEvents,\n Next_MachineConfig,\n Next_StateNodeConfig,\n WithDefault\n} from './types.v6.ts';\n\nexport type SetupConfig<\n TSchemas extends SetupSchemas,\n TStates extends Record<string, SetupStateSchema>,\n TActionMap extends Implementations['actions'],\n TActorMap extends Implementations['actorSources'],\n TGuardMap extends Implementations['guards'],\n TDelayMap extends Implementations['delays']\n> = {\n schemas?: TSchemas & SetupSchemas;\n states?: TStates;\n actions?: TActionMap;\n actorSources?: TActorMap;\n guards?: TGuardMap;\n delays?: TDelayMap;\n};\n\nexport type AnySetupConfig = SetupConfig<\n SetupSchemas,\n Record<string, SetupStateSchema>,\n Implementations['actions'],\n Implementations['actorSources'],\n Implementations['guards'],\n Implementations['delays']\n>;\n\nexport type SystemConfig<TSystemRegistry extends SystemRegistry> = {\n registry?: TSystemRegistry;\n};\n\nexport type SystemActorMap<TSystemRegistry extends SystemRegistry> = {\n [K in keyof TSystemRegistry & string]: ActorRefFromLogic<TSystemRegistry[K]>;\n};\n\nexport type SystemRuntime<TSystemRegistry extends SystemRegistry> = Omit<\n AnyActorSystem,\n 'get' | 'getAll'\n> & {\n get<K extends keyof SystemActorMap<TSystemRegistry> & string>(\n key: K\n ): SystemActorMap<TSystemRegistry>[K] | undefined;\n getAll(): Partial<SystemActorMap<TSystemRegistry>>;\n};\n\ntype LogicMatchesRegistryKey<TLogic, TSystemLogic> =\n TLogic extends AnyActorLogic\n ? TSystemLogic extends AnyActorLogic\n ? [TLogic] extends [TSystemLogic]\n ? true\n : [TSystemLogic] extends [TLogic]\n ? true\n : ActorRefFromLogic<TLogic> extends ActorRefFromLogic<TSystemLogic>\n ? true\n : false\n : false\n : false;\n\ntype RegistryKeyMatchesSrc<\n TKey extends string,\n TSrc,\n TSystemRegistry extends SystemRegistry,\n TActorMap extends Implementations['actorSources']\n> = TKey extends keyof TSystemRegistry & string\n ? TSrc extends keyof TActorMap & string\n ? LogicMatchesRegistryKey<TActorMap[TSrc], TSystemRegistry[TKey]>\n : TSrc extends AnyActorLogic\n ? LogicMatchesRegistryKey<TSrc, TSystemRegistry[TKey]>\n : true\n : false;\n\ntype ValidateSystemInvoke<\n TInvoke,\n TSystemRegistry extends SystemRegistry,\n TActorMap extends Implementations['actorSources']\n> = TInvoke extends readonly unknown[]\n ? {\n [K in keyof TInvoke]: TInvoke[K] &\n ValidateSystemInvoke<TInvoke[K], TSystemRegistry, TActorMap>;\n }\n : TInvoke extends { registryKey: infer TKey }\n ? TKey extends string\n ? TInvoke extends { src: infer TSrc }\n ? RegistryKeyMatchesSrc<\n TKey,\n TSrc,\n TSystemRegistry,\n TActorMap\n > extends true\n ? unknown\n : { registryKey: never }\n : TKey extends keyof TSystemRegistry & string\n ? unknown\n : { registryKey: never }\n : { registryKey: never }\n : unknown;\n\ntype ValidateRegistryKeys<\n TConfig,\n TSystemRegistry extends SystemRegistry,\n TActorMap extends Implementations['actorSources']\n> = string extends keyof TSystemRegistry\n ? unknown\n : (TConfig extends { invoke: infer TInvoke }\n ? {\n invoke: TInvoke &\n ValidateSystemInvoke<TInvoke, TSystemRegistry, TActorMap>;\n }\n : unknown) &\n (TConfig extends { states: infer TStates }\n ? {\n states: {\n [K in keyof TStates]: TStates[K] &\n ValidateRegistryKeys<TStates[K], TSystemRegistry, TActorMap>;\n };\n }\n : unknown);\n\nexport type SetupStateSchemas = {\n context?: StandardSchemaV1;\n input?: StandardSchemaV1;\n};\n\nexport type SetupSchemas = {\n context?: StandardSchemaV1;\n events?: Record<string, StandardSchemaV1>;\n emitted?: Record<string, StandardSchemaV1>;\n input?: StandardSchemaV1;\n output?: StandardSchemaV1;\n meta?: StandardSchemaV1;\n tags?: StandardSchemaV1;\n children?: Record<string, StandardSchemaV1>;\n};\n\n/** State schema with optional schemas.input and nested states */\nexport interface SetupStateSchema {\n schemas?: SetupStateSchemas;\n states?: Record<string, SetupStateSchema>;\n}\n\ntype SetupSchema<\n TSchemas,\n TKey extends keyof SetupSchemas\n> = TKey extends keyof TSchemas\n ? TSchemas[TKey] extends StandardSchemaV1\n ? TSchemas[TKey]\n : never\n : never;\n\ntype SetupSchemaMap<\n TSchemas,\n TKey extends 'events' | 'emitted' | 'children'\n> = TKey extends keyof TSchemas\n ? TSchemas[TKey] extends Record<string, StandardSchemaV1>\n ? TSchemas[TKey]\n : never\n : never;\n\ntype SetupOrConfigSchema<\n TSchemas,\n TKey extends Exclude<keyof SetupSchemas, 'events' | 'emitted'>,\n TConfigSchema extends StandardSchemaV1\n> = [SetupSchema<TSchemas, TKey>] extends [never]\n ? TConfigSchema\n : SetupSchema<TSchemas, TKey>;\n\ntype SetupOrConfigSchemaMap<\n TSchemas,\n TKey extends 'events' | 'emitted' | 'children',\n TConfigSchemaMap extends Record<string, StandardSchemaV1>\n> = [SetupSchemaMap<TSchemas, TKey>] extends [never]\n ? TConfigSchemaMap\n : SetupSchemaMap<TSchemas, TKey>;\n\ntype SetupStateKeys<TStateSchemas extends Record<string, SetupStateSchema>> =\n keyof TStateSchemas & string;\n\ntype SetupStateKey<TStateSchemas extends Record<string, SetupStateSchema>> =\n string extends SetupStateKeys<TStateSchemas>\n ? string\n : [SetupStateKeys<TStateSchemas>] extends [never]\n ? string\n : SetupStateKeys<TStateSchemas>;\n\ntype SetupStateTarget<TStateSchemas extends Record<string, SetupStateSchema>> =\n string extends SetupStateKeys<TStateSchemas>\n ? string\n : [SetupStateKeys<TStateSchemas>] extends [never]\n ? string\n : SetupStateKeys<TStateSchemas> | `.${string}` | `#${string}`;\n\ntype InvalidSetupStateKeys<\n TConfig,\n TStateSchemas extends Record<string, SetupStateSchema>\n> =\n string extends SetupStateKeys<TStateSchemas>\n ? never\n : [SetupStateKeys<TStateSchemas>] extends [never]\n ? never\n : TConfig extends { states: infer TStates }\n ? Exclude<keyof TStates & string, SetupStateKeys<TStateSchemas>>\n : never;\n\ntype ValidateSetupStateKeys<\n TConfig,\n TStateSchemas extends Record<string, SetupStateSchema>\n> = [InvalidSetupStateKeys<TConfig, TStateSchemas>] extends [never]\n ? unknown\n : {\n states: {\n [K in InvalidSetupStateKeys<TConfig, TStateSchemas>]: never;\n };\n };\n\ntype ValidateNestedSetupStateKeys<\n TConfig,\n TStateSchemas extends Record<string, SetupStateSchema>\n> = TConfig extends { states: infer TConfigStates }\n ? TConfigStates extends Record<string, unknown>\n ? {\n states: {\n [K in keyof TConfigStates &\n keyof TStateSchemas &\n string]: TStateSchemas[K] extends {\n states: infer TChildStateSchemas;\n }\n ? TChildStateSchemas extends Record<string, SetupStateSchema>\n ? TConfigStates[K] &\n ValidateSetupStateKeys<TConfigStates[K], TChildStateSchemas> &\n ValidateNestedSetupStateKeys<\n TConfigStates[K],\n TChildStateSchemas\n >\n : TConfigStates[K]\n : TConfigStates[K];\n };\n }\n : unknown\n : unknown;\n\ntype SetupContext<TSchemas, TContextSchema extends StandardSchemaV1> = [\n SetupSchema<TSchemas, 'context'>\n] extends [never]\n ? unknown extends StandardSchemaV1.InferOutput<TContextSchema>\n ? MachineContext\n : StandardSchemaV1.InferOutput<TContextSchema> & MachineContext\n : StandardSchemaV1.InferOutput<SetupSchema<TSchemas, 'context'>> &\n MachineContext;\n\ntype SetupContextShape<\n TSchemas,\n TContextSchema extends StandardSchemaV1,\n TFallbackContext\n> = [SetupSchema<TSchemas, 'context'>] extends [never]\n ? unknown extends StandardSchemaV1.InferOutput<TContextSchema>\n ? TFallbackContext\n : StandardSchemaV1.InferOutput<TContextSchema>\n : StandardSchemaV1.InferOutput<SetupSchema<TSchemas, 'context'>>;\n\ntype SetupContextRequired<TSchemas, TContextSchema extends StandardSchemaV1> = [\n SetupSchema<TSchemas, 'context'>\n] extends [never]\n ? unknown extends StandardSchemaV1.InferOutput<TContextSchema>\n ? false\n : true\n : true;\n\ntype SetupEvents<\n TSchemas,\n TEventSchemaMap extends Record<string, StandardSchemaV1>\n> = [SetupSchemaMap<TSchemas, 'events'>] extends [never]\n ? InferEvents<TEventSchemaMap>\n : InferEvents<SetupSchemaMap<TSchemas, 'events'>>;\n\ntype SetupTags<TSchemas, TTagSchema extends StandardSchemaV1> = [\n SetupSchema<TSchemas, 'tags'>\n] extends [never]\n ? StandardSchemaV1.InferOutput<TTagSchema> & string\n : StandardSchemaV1.InferOutput<SetupSchema<TSchemas, 'tags'>> & string;\n\ntype SetupInput<TSchemas, TInputSchema extends StandardSchemaV1> = [\n SetupSchema<TSchemas, 'input'>\n] extends [never]\n ? InferOutput<TInputSchema, unknown>\n : InferOutput<SetupSchema<TSchemas, 'input'>, unknown>;\n\ntype SetupOutput<TSchemas, TOutputSchema extends StandardSchemaV1> = [\n SetupSchema<TSchemas, 'output'>\n] extends [never]\n ? InferOutput<TOutputSchema, unknown>\n : InferOutput<SetupSchema<TSchemas, 'output'>, unknown>;\n\ntype SetupEmitted<\n TSchemas,\n TEmittedSchemaMap extends Record<string, StandardSchemaV1>\n> = [SetupSchemaMap<TSchemas, 'emitted'>] extends [never]\n ? WithDefault<InferEvents<TEmittedSchemaMap>, AnyEventObject>\n : WithDefault<\n InferEvents<SetupSchemaMap<TSchemas, 'emitted'>>,\n AnyEventObject\n >;\n\ntype SetupMeta<TSchemas, TMetaSchema extends StandardSchemaV1> = [\n SetupSchema<TSchemas, 'meta'>\n] extends [never]\n ? InferOutput<TMetaSchema, MetaObject>\n : InferOutput<SetupSchema<TSchemas, 'meta'>, MetaObject>;\n\ntype SetupChildren<\n TSchemas,\n TChildrenSchemaMap extends Record<string, StandardSchemaV1>\n> = [SetupSchemaMap<TSchemas, 'children'>] extends [never]\n ? InferChildren<TChildrenSchemaMap>\n : InferChildren<SetupSchemaMap<TSchemas, 'children'>>;\n\ntype MergeChildren<\n TChildren extends Record<string, AnyActorRef | undefined>,\n TActor extends ProvidedActor\n> = [keyof TChildren] extends [never]\n ? Compute<ToChildren<TActor>>\n : Compute<TChildren>;\n\ntype MergeImplementationMaps<\n TBase extends Record<string, unknown>,\n TExtension extends Record<string, unknown>\n> = Compute<TBase & TExtension>;\n\ntype DelayNamesFromConfigOrString<TConfig> = TConfig extends {\n delays: infer TDelays;\n}\n ? Extract<keyof TDelays, string>\n : string;\n\ntype DelayNamesFromConfig<TConfig> = TConfig extends { delays: infer TDelays }\n ? Extract<keyof TDelays, string>\n : never;\n\ntype InvalidDelayReferences<TConfig, TDelays extends string> =\n | (TConfig extends { after: infer TAfter }\n ? Exclude<Extract<keyof TAfter, string>, TDelays>\n : never)\n | (TConfig extends { timeout: infer TTimeout }\n ? TTimeout extends string\n ? TTimeout extends TDelays\n ? never\n : TTimeout\n : never\n : never)\n | (TConfig extends { states: infer TStates }\n ? TStates extends Record<string, unknown>\n ? {\n [K in keyof TStates]: InvalidDelayReferences<TStates[K], TDelays>;\n }[keyof TStates]\n : never\n : never);\n\ntype ValidateSetupDelayReferences<\n TConfig,\n TSetupDelays extends string\n> = string extends (\n [TSetupDelays] extends [never]\n ? DelayNamesFromConfigOrString<TConfig>\n : TSetupDelays | DelayNamesFromConfig<TConfig>\n)\n ? unknown\n : InvalidDelayReferences<\n TConfig,\n [TSetupDelays] extends [never]\n ? DelayNamesFromConfigOrString<TConfig>\n : TSetupDelays | DelayNamesFromConfig<TConfig>\n > extends never\n ? unknown\n : never;\n\n/** Extracts input type from a state schema */\ntype StateInput<TStateSchema extends SetupStateSchema> =\n TStateSchema['schemas'] extends { input: infer TInputSchema }\n ? TInputSchema extends StandardSchemaV1\n ? StandardSchemaV1.InferOutput<TInputSchema>\n : undefined\n : undefined;\n\ntype StateContext<\n TStateSchema extends SetupStateSchema,\n TFallbackContext extends MachineContext\n> = TStateSchema['schemas'] extends { context: infer TContextSchema }\n ? TContextSchema extends StandardSchemaV1\n ? StandardSchemaV1.InferOutput<TContextSchema> & MachineContext\n : TFallbackContext\n : TFallbackContext;\n\ntype StateContextShape<\n TStateSchema extends SetupStateSchema,\n TFallbackContext\n> = TStateSchema['schemas'] extends { context: infer TContextSchema }\n ? TContextSchema extends StandardSchemaV1\n ? StandardSchemaV1.InferOutput<TContextSchema>\n : TFallbackContext\n : TFallbackContext;\n\ntype WithNestedStates<TConfig, TNestedStates> = TConfig extends {\n type: 'choice';\n}\n ? TConfig\n : Omit<TConfig, 'states'> & { states?: TNestedStates };\n\n/**\n * Converts SetupStateSchema to StateSchema with input types included. This\n * allows getInputs() to be strongly typed.\n */\ntype SetupStateSchemaToStateSchema<TSetupSchema extends SetupStateSchema> = {\n input: StateInput<TSetupSchema>;\n contextSchema: TSetupSchema['schemas'] extends {\n context: infer TContextSchema;\n }\n ? TContextSchema extends StandardSchemaV1\n ? TContextSchema\n : undefined\n : undefined;\n states: TSetupSchema['states'] extends Record<string, SetupStateSchema>\n ? {\n [K in keyof TSetupSchema['states'] &\n string]: SetupStateSchemaToStateSchema<TSetupSchema['states'][K]>;\n }\n : undefined;\n};\n\n/** Converts the root setup states config to a StateSchema. */\ntype SetupStatesToStateSchema<\n TStates extends Record<string, SetupStateSchema>\n> = {\n states: {\n [K in keyof TStates & string]: SetupStateSchemaToStateSchema<TStates[K]>;\n };\n};\n\ntype EmptyStateSchema = {\n input: undefined;\n states: undefined;\n};\n\ntype StateSchemaInput<\n TConfig extends StateSchema,\n TSetup extends StateSchema\n> = TSetup extends { input: infer TInput }\n ? TInput\n : TConfig extends { input: infer TInput }\n ? TInput\n : undefined;\n\ntype StateSchemaContextSchema<\n TConfig extends StateSchema,\n TSetup extends StateSchema\n> = TSetup extends { contextSchema: infer TContextSchema }\n ? TContextSchema extends StandardSchemaV1\n ? TContextSchema\n : undefined\n : TConfig extends { contextSchema: infer TContextSchema }\n ? TContextSchema extends StandardSchemaV1\n ? TContextSchema\n : undefined\n : undefined;\n\ntype StateSchemaChild<\n TSetup extends StateSchema,\n K extends string\n> = TSetup extends { states: infer TStates }\n ? K extends keyof TStates\n ? Cast<TStates[K], StateSchema>\n : EmptyStateSchema\n : EmptyStateSchema;\n\ntype MergeStateSchema<\n TConfig extends StateSchema,\n TSetup extends StateSchema\n> = Omit<TConfig, 'contextSchema' | 'input' | 'states'> & {\n contextSchema: StateSchemaContextSchema<TConfig, TSetup>;\n input: StateSchemaInput<TConfig, TSetup>;\n states: TConfig extends { states: infer TStates }\n ? TStates extends Record<string, StateSchema>\n ? {\n [K in keyof TStates & string]: MergeStateSchema<\n TStates[K],\n StateSchemaChild<TSetup, K>\n >;\n }\n : undefined\n : undefined;\n};\n\n/** Machine config with typed state input */\ntype SetupMachineConfig<\n TStateSchemas extends Record<string, SetupStateSchema>,\n TSchemas extends SetupSchemas,\n TContextSchema extends StandardSchemaV1,\n TEventSchemaMap extends Record<string, StandardSchemaV1>,\n TEmittedSchemaMap extends Record<string, StandardSchemaV1>,\n TInputSchema extends StandardSchemaV1,\n TOutputSchema extends StandardSchemaV1,\n TMetaSchema extends StandardSchemaV1,\n TTagSchema extends StandardSchemaV1,\n TChildrenSchemaMap extends Record<string, StandardSchemaV1>,\n TContext extends MachineContext,\n TEvent extends EventObject,\n TChildren extends Record<string, AnyActorRef | undefined>,\n TDelays extends string,\n TTag extends string,\n TEmitted extends EventObject,\n TMeta extends MetaObject,\n TActionMap extends Implementations['actions'],\n TActorMap extends Implementations['actorSources'],\n TGuardMap extends Implementations['guards'],\n TDelayMap extends Implementations['delays'],\n TSystemRegistry extends SystemRegistry,\n TContextRequired extends boolean,\n TRootDelays extends string = TDelays,\n TRootActionMap extends Implementations['actions'] = TActionMap,\n TRootActorMap extends Implementations['actorSources'] = TActorMap,\n TRootGuardMap extends Implementations['guards'] = TGuardMap\n> = Omit<\n Next_MachineConfig<\n SetupOrConfigSchema<TSchemas, 'context', TContextSchema>,\n SetupOrConfigSchemaMap<TSchemas, 'events', TEventSchemaMap>,\n SetupOrConfigSchemaMap<TSchemas, 'emitted', TEmittedSchemaMap>,\n SetupOrConfigSchema<TSchemas, 'input', TInputSchema>,\n SetupOrConfigSchema<TSchemas, 'output', TOutputSchema>,\n SetupOrConfigSchema<TSchemas, 'meta', TMetaSchema>,\n SetupOrConfigSchema<TSchemas, 'tags', TTagSchema>,\n SetupOrConfigSchemaMap<TSchemas, 'children', TChildrenSchemaMap>,\n TContext,\n TEvent,\n TChildren,\n TDelays,\n TTag,\n TActionMap,\n TActorMap,\n TGuardMap,\n TDelayMap,\n TContextRequired,\n TSystemRegistry\n >,\n | 'states'\n | 'initial'\n | 'on'\n | 'always'\n | 'actions'\n | 'actorSources'\n | 'guards'\n | 'delays'\n> & {\n actions?: TRootActionMap;\n actorSources?: TRootActorMap;\n guards?: TRootGuardMap;\n delays?: {\n [K in TRootDelays | number]?:\n | number\n | (({\n context,\n event,\n stateNode\n }: {\n context: TContext;\n event: TEvent;\n stateNode: AnyStateNode;\n }) => number);\n };\n initial?:\n | SetupStateKey<TStateSchemas>\n | InitialTransitionWithInput<TStateSchemas, TContext, TEvent>\n | undefined;\n on?: StateTransitions<\n TStateSchemas,\n TContext,\n SetupContextShape<TSchemas, TContextSchema, TContext>,\n TEvent,\n TEmitted,\n TChildren,\n TMeta,\n TActionMap,\n TActorMap,\n TGuardMap,\n TDelayMap,\n TSystemRegistry\n >;\n always?: StateTransitionConfigOrTarget<\n TStateSchemas,\n TContext,\n SetupContextShape<TSchemas, TContextSchema, TContext>,\n TEvent,\n TEvent,\n TEmitted,\n TChildren,\n TMeta,\n TActionMap,\n TActorMap,\n TGuardMap,\n TDelayMap,\n TSystemRegistry\n >;\n states?: StatesWithInput<\n TStateSchemas,\n TStateSchemas,\n TContext,\n SetupContextShape<TSchemas, TContextSchema, TContext>,\n TEvent,\n TChildren,\n TDelays,\n TTag,\n TEmitted,\n TMeta,\n TActionMap,\n TActorMap,\n TGuardMap,\n TDelayMap,\n TSystemRegistry\n >;\n};\n\n/** States config type that provides typed input for known states */\ntype StatesWithInput<\n TRootStateSchemas extends Record<string, SetupStateSchema>,\n TStateSchemas extends Record<string, SetupStateSchema>,\n TContext extends MachineContext,\n TContextShape,\n TEvent extends EventObject,\n TChildren extends Record<string, AnyActorRef | undefined>,\n TDelays extends string,\n TTag extends string,\n TEmitted extends EventObject,\n TMeta extends MetaObject,\n TActionMap extends Implementations['actions'],\n TActorMap extends Implementations['actorSources'],\n TGuardMap extends Implementations['guards'],\n TDelayMap extends Implementations['delays'],\n TSystemRegistry extends SystemRegistry\n> = {\n [K in keyof TStateSchemas & string]?: StateNodeConfigWithNestedInput<\n TRootStateSchemas,\n TStateSchemas[K],\n TContext,\n TContextShape,\n TEvent,\n TChildren,\n TDelays,\n TTag,\n TEmitted,\n TMeta,\n TActionMap,\n TActorMap,\n TGuardMap,\n TDelayMap,\n TSystemRegistry\n >;\n};\n\n/** State node config that recursively applies typed input for nested states */\ntype StateNodeConfigWithNestedInput<\n TSiblingStateSchemas extends Record<string, SetupStateSchema>,\n TStateSchema extends SetupStateSchema,\n TContext extends MachineContext,\n TContextShape,\n TEvent extends EventObject,\n TChildren extends Record<string, AnyActorRef | undefined>,\n TDelays extends string,\n TTag extends string,\n TEmitted extends EventObject,\n TMeta extends MetaObject,\n TActionMap extends Implementations['actions'],\n TActorMap extends Implementations['actorSources'],\n TGuardMap extends Implementations['guards'],\n TDelayMap extends Implementations['delays'],\n TSystemRegistry extends SystemRegistry\n> = WithNestedStates<\n Omit<\n Next_StateNodeConfig<\n StateContext<TStateSchema, TContext>,\n TEvent,\n TDelays,\n TTag,\n any,\n TEmitted,\n TMeta,\n TChildren,\n TActionMap,\n TActorMap,\n TGuardMap,\n TDelayMap,\n StateInput<TStateSchema>,\n Record<string, unknown>,\n TSystemRegistry\n >,\n 'on' | 'always' | 'initial'\n > & {\n initial?: TStateSchema['states'] extends Record<string, SetupStateSchema>\n ?\n | SetupStateKey<TStateSchema['states']>\n | InitialTransitionWithInput<\n TStateSchema['states'],\n StateContext<TStateSchema, TContext>,\n TEvent\n >\n :\n | string\n | {\n target: string;\n input?: Record<string, unknown>;\n }\n | undefined;\n on?: StateTransitions<\n TSiblingStateSchemas,\n StateContext<TStateSchema, TContext>,\n StateContextShape<TStateSchema, TContextShape>,\n TEvent,\n TEmitted,\n TChildren,\n TMeta,\n TActionMap,\n TActorMap,\n TGuardMap,\n TDelayMap,\n TSystemRegistry\n >;\n always?: StateTransitionConfigOrTarget<\n TSiblingStateSchemas,\n StateContext<TStateSchema, TContext>,\n StateContextShape<TStateSchema, TContextShape>,\n TEvent,\n TEvent,\n TEmitted,\n TChildren,\n TMeta,\n TActionMap,\n TActorMap,\n TGuardMap,\n TDelayMap,\n TSystemRegistry\n >;\n },\n TStateSchema['states'] extends Record<string, SetupStateSchema>\n ? StatesWithInput<\n TStateSchema['states'],\n TStateSchema['states'],\n TContext,\n StateContextShape<TStateSchema, TContextShape>,\n TEvent,\n TChildren,\n TDelays,\n TTag,\n TEmitted,\n TMeta,\n TActionMap,\n TActorMap,\n TGuardMap,\n TDelayMap,\n TSystemRegistry\n >\n : {\n [K in string]?: Next_StateNodeConfig<\n TContext,\n TEvent,\n TDelays,\n TTag,\n any,\n TEmitted,\n TMeta,\n TChildren,\n TActionMap,\n TActorMap,\n TGuardMap,\n TDelayMap,\n undefined,\n Record<string, unknown>,\n TSystemRegistry\n >;\n }\n>;\n\ntype StateTransitions<\n TStateSchemas extends Record<string, SetupStateSchema>,\n TContext extends MachineContext,\n TContextShape,\n TEvent extends EventObject,\n TEmitted extends EventObject,\n TChildren extends Record<string, AnyActorRef | undefined>,\n TMeta extends MetaObject,\n TActionMap extends Implementations['actions'],\n TActorMap extends Implementations['actorSources'],\n TGuardMap extends Implementations['guards'],\n TDelayMap extends Implementations['delays'],\n TSystemRegistry extends SystemRegistry\n> = {\n [K in EventDescriptor<TEvent>]?: StateTransitionConfigOrTarget<\n TStateSchemas,\n TContext,\n TContextShape,\n ExtractEvent<TEvent, K>,\n TEvent,\n TEmitted,\n TChildren,\n TMeta,\n TActionMap,\n TActorMap,\n TGuardMap,\n TDelayMap,\n TSystemRegistry\n >;\n};\n\ntype StateTransitionConfigOrTarget<\n TStateSchemas extends Record<string, SetupStateSchema>,\n TContext extends MachineContext,\n TContextShape,\n TExpressionEvent extends EventObject,\n TEvent extends EventObject,\n TEmitted extends EventObject,\n TChildren extends Record<string, AnyActorRef | undefined>,\n TMeta extends MetaObject,\n TActionMap extends Implementations['actions'],\n TActorMap extends Implementations['actorSources'],\n TGuardMap extends Implementations['guards'],\n TDelayMap extends Implementations['delays'],\n TSystemRegistry extends SystemRegistry\n> =\n | undefined\n | StateTransitionObjectConfig<\n TStateSchemas,\n TContext,\n TContextShape,\n TExpressionEvent,\n TMeta\n >\n | StateTransitionFunction<\n TStateSchemas,\n TContext,\n TContextShape,\n TExpressionEvent,\n TEvent,\n TEmitted,\n TChildren,\n TMeta,\n TActionMap,\n TActorMap,\n TGuardMap,\n TDelayMap,\n TSystemRegistry\n >;\n\ntype StateTransitionObjectConfig<\n TStateSchemas extends Record<string, SetupStateSchema>,\n TContext extends MachineContext,\n TContextShape,\n TExpressionEvent extends EventObject,\n TMeta extends MetaObject\n> =\n | (StateTransitionResult<TStateSchemas, TContext, TContextShape, TMeta> & {\n description?: string;\n })\n | {\n target: SetupStateTarget<TStateSchemas>[];\n context?: ContextPatch<TContextShape, TContextShape, TContext>;\n description?: string;\n reenter?: boolean;\n meta?: TMeta;\n input?:\n | Record<string, unknown>\n | ((\n args: {\n context: TContext;\n event: TExpressionEvent;\n } & OutputArg<TExpressionEvent>\n ) => Record<string, unknown>);\n };\n\ntype StateTransitionFunction<\n TStateSchemas extends Record<string, SetupStateSchema>,\n TContext extends MachineContext,\n TContextShape,\n TExpressionEvent extends EventObject,\n TEvent extends EventObject,\n TEmitted extends EventObject,\n TChildren extends Record<string, AnyActorRef | undefined>,\n TMeta extends MetaObject,\n TActionMap extends Implementations['actions'],\n TActorMap extends Implementations['actorSources'],\n TGuardMap extends Implementations['guards'],\n TDelayMap extends Implementations['delays'],\n TSystemRegistry extends SystemRegistry\n> = (\n args: {\n context: TContext;\n event: TExpressionEvent;\n self: AnyActorRef;\n parent: AnyActorRef | undefined;\n value: StateValue;\n children: TChildren;\n system: SystemRuntime<TSystemRegistry>;\n actions: TActionMap;\n actorSources: TActorMap;\n guards: TGuardMap;\n delays: TDelayMap;\n } & OutputArg<TExpressionEvent>,\n enq: EnqueueObject<TEvent, TEmitted, TSystemRegistry>\n) => StateTransitionResult<\n TStateSchemas,\n TContext,\n TContextShape,\n TMeta\n> | void;\n\ntype StateTransitionResult<\n TStateSchemas extends Record<string, SetupStateSchema>,\n TContext extends MachineContext,\n TContextShape,\n TMeta extends MetaObject\n> =\n | {\n target?: never;\n context?: ContextPatch<TContextShape, TContextShape, TContext>;\n reenter?: boolean;\n meta?: TMeta;\n }\n | {\n [K in keyof TStateSchemas & string]: {\n target: K;\n reenter?: boolean;\n meta?: TMeta;\n input?:\n | StateInput<TStateSchemas[K]>\n | ((\n args: {\n context: TContext;\n event: EventObject;\n } & OutputArg<EventObject>\n ) => StateInput<TStateSchemas[K]>);\n } & ([TContextShape] extends [\n StateContextShape<TStateSchemas[K], TContextShape>\n ]\n ? {\n context?: ContextPatch<\n TContextShape,\n StateContextShape<TStateSchemas[K], TContextShape>,\n StateContext<TStateSchemas[K], TContext>\n >;\n }\n : {\n context: ContextPatch<\n TContextShape,\n StateContextShape<TStateSchemas[K], TContextShape>,\n StateContext<TStateSchemas[K], TContext>\n >;\n });\n }[keyof TStateSchemas & string]\n | {\n target: Exclude<\n SetupStateTarget<TStateSchemas>,\n keyof TStateSchemas & string\n >;\n context?: ContextPatch<TContextShape, TContextShape, TContext>;\n reenter?: boolean;\n meta?: TMeta;\n };\n\ntype ContextPatch<\n TCurrentContext,\n TTargetContext,\n TResolvedTargetContext extends MachineContext\n> = Compute<\n Partial<TResolvedTargetContext> &\n Pick<\n TResolvedTargetContext,\n Extract<RequiredContextKeys<TCurrentContext, TTargetContext>, string>\n >\n>;\n\ntype RequiredContextKeys<TCurrentContext, TTargetContext> = {\n [K in keyof TTargetContext]-?: K extends keyof TCurrentContext\n ? [TCurrentContext[K]] extends [TTargetContext[K]]\n ? never\n : K\n : K;\n}[keyof TTargetContext];\n\n/** Initial transition with typed input based on target state */\ntype InitialTransitionWithInput<\n TStateSchemas extends Record<string, SetupStateSchema>,\n TContext extends MachineContext,\n TEvent extends EventObject\n> = {\n [K in keyof TStateSchemas & string]: {\n target: K;\n input?:\n | StateInput<TStateSchemas[K]>\n | ((args: {\n context: TContext;\n event: TEvent;\n }) => StateInput<TStateSchemas[K]>);\n };\n}[keyof TStateSchemas & string];\n\n/** Return type of setup() */\nexport interface SetupReturn<\n TStates extends Record<string, SetupStateSchema> = Record<\n string,\n SetupStateSchema\n >,\n TSchemas extends SetupSchemas = {},\n TSetupActionMap extends Implementations['actions'] = {},\n TSetupActorMap extends Implementations['actorSources'] = {},\n TSetupGuardMap extends Implementations['guards'] = {},\n TSetupDelayMap extends Implementations['delays'] = {},\n TSetupDelays extends string = Extract<keyof TSetupDelayMap, string>,\n TSystemRegistry extends SystemRegistry = SystemRegistry\n> {\n /** Extends the setup configuration */\n extend<\n const TExtendSchemas extends SetupSchemas = {},\n const TExtendStates extends Record<string, SetupStateSchema> = {},\n TExtendActionMap extends Implementations['actions'] = {},\n TExtendActorMap extends Implementations['actorSources'] = {},\n TExtendGuardMap extends Implementations['guards'] = {},\n TExtendDelayMap extends Implementations['delays'] = {}\n >(\n config: SetupConfig<\n TExtendSchemas,\n TExtendStates,\n TExtendActionMap,\n TExtendActorMap,\n TExtendGuardMap,\n TExtendDelayMap\n >\n ): SetupReturn<\n MergeImplementationMaps<TStates, TExtendStates>,\n MergeImplementationMaps<TSchemas, TExtendSchemas>,\n MergeImplementationMaps<TSetupActionMap, TExtendActionMap>,\n MergeImplementationMaps<TSetupActorMap, TExtendActorMap>,\n MergeImplementationMaps<TSetupGuardMap, TExtendGuardMap>,\n MergeImplementationMaps<TSetupDelayMap, TExtendDelayMap>,\n TSetupDelays | Extract<keyof TExtendDelayMap, string>,\n TSystemRegistry\n >;\n\n /** Creates a state machine with the setup configuration */\n createMachine<\n TContextSchema extends StandardSchemaV1 = StandardSchemaV1,\n const TEventSchemaMap extends Record<string, StandardSchemaV1> = Record<\n string,\n StandardSchemaV1\n >,\n TEmittedSchemaMap extends Record<string, StandardSchemaV1> = Record<\n string,\n StandardSchemaV1\n >,\n TInputSchema extends StandardSchemaV1 = StandardSchemaV1,\n TOutputSchema extends StandardSchemaV1 = StandardSchemaV1,\n TMetaSchema extends StandardSchemaV1 = StandardSchemaV1,\n TTagSchema extends StandardSchemaV1 = StandardSchemaV1,\n const TChildrenSchemaMap extends Record<string, StandardSchemaV1> = Record<\n string,\n StandardSchemaV1\n >,\n _TEvent extends EventObject = EventObject,\n TActor extends ProvidedActor = ProvidedActor,\n TActionMap extends Implementations['actions'] = {},\n TActorMap extends Implementations['actorSources'] = {},\n TGuardMap extends Implementations['guards'] = {},\n TDelayMap extends Implementations['delays'] = {},\n TDelays extends string = Extract<keyof TDelayMap, string>,\n TTag extends SetupTags<TSchemas, TTagSchema> = SetupTags<\n TSchemas,\n TTagSchema\n >,\n TInput = unknown,\n TConfig extends SetupMachineConfig<\n TStates,\n TSchemas,\n TContextSchema,\n TEventSchemaMap,\n TEmittedSchemaMap,\n TInputSchema,\n TOutputSchema,\n TMetaSchema,\n TTagSchema,\n TChildrenSchemaMap,\n SetupContext<TSchemas, TContextSchema>,\n SetupEvents<TSchemas, TEventSchemaMap>,\n Cast<\n MergeChildren<SetupChildren<TSchemas, TChildrenSchemaMap>, TActor>,\n Record<string, AnyActorRef | undefined>\n >,\n TSetupDelays | TDelays,\n TTag,\n SetupEmitted<TSchemas, TEmittedSchemaMap>,\n SetupMeta<TSchemas, TMetaSchema>,\n MergeImplementationMaps<TSetupActionMap, TActionMap>,\n MergeImplementationMaps<TSetupActorMap, TActorMap>,\n MergeImplementationMaps<TSetupGuardMap, TGuardMap>,\n MergeImplementationMaps<TSetupDelayMap, TDelayMap>,\n TSystemRegistry,\n SetupContextRequired<TSchemas, TContextSchema>,\n TDelays,\n TActionMap,\n TActorMap,\n TGuardMap\n > = SetupMachineConfig<\n TStates,\n TSchemas,\n TContextSchema,\n TEventSchemaMap,\n TEmittedSchemaMap,\n TInputSchema,\n TOutputSchema,\n TMetaSchema,\n TTagSchema,\n TChildrenSchemaMap,\n SetupContext<TSchemas, TContextSchema>,\n SetupEvents<TSchemas, TEventSchemaMap>,\n Cast<\n MergeChildren<SetupChildren<TSchemas, TChildrenSchemaMap>, TActor>,\n Record<string, AnyActorRef | undefined>\n >,\n TSetupDelays | TDelays,\n TTag,\n SetupEmitted<TSchemas, TEmittedSchemaMap>,\n SetupMeta<TSchemas, TMetaSchema>,\n MergeImplementationMaps<TSetupActionMap, TActionMap>,\n MergeImplementationMaps<TSetupActorMap, TActorMap>,\n MergeImplementationMaps<TSetupGuardMap, TGuardMap>,\n MergeImplementationMaps<TSetupDelayMap, TDelayMap>,\n TSystemRegistry,\n SetupContextRequired<TSchemas, TContextSchema>,\n TDelays,\n TActionMap,\n TActorMap,\n TGuardMap\n >\n >(\n config: {\n schemas?: {\n events?: TEventSchemaMap;\n context?: TContextSchema;\n emitted?: TEmittedSchemaMap;\n input?: TInputSchema;\n output?: TOutputSchema;\n meta?: TMetaSchema;\n tags?: TTagSchema;\n children?: TChildrenSchemaMap;\n };\n actions?: TActionMap;\n actorSources?: TActorMap;\n guards?: TGuardMap;\n delays?: TDelayMap;\n } & TConfig &\n ValidateSetupStateKeys<TConfig, TStates> &\n ValidateNestedSetupStateKeys<TConfig, TStates> &\n ValidateSetupDelayReferences<TConfig, TSetupDelays> &\n ValidateRegistryKeys<\n TConfig,\n TSystemRegistry,\n MergeImplementationMaps<TSetupActorMap, TActorMap>\n >\n ): StateMachine<\n SetupContext<TSchemas, TContextSchema>,\n | SetupEvents<TSchemas, TEventSchemaMap>\n | ([RoutableStateId<Cast<TConfig, StateSchema>>] extends [never]\n ? never\n : {\n type: 'xstate.route';\n to: RoutableStateId<Cast<TConfig, StateSchema>>;\n }),\n Cast<\n MergeChildren<SetupChildren<TSchemas, TChildrenSchemaMap>, TActor>,\n Record<string, AnyActorRef | undefined>\n >,\n StateValue,\n TTag & string,\n [SetupSchema<TSchemas, 'input'>] extends [never]\n ? TInput\n : SetupInput<TSchemas, TInputSchema>,\n SetupOutput<TSchemas, TOutputSchema>,\n SetupEmitted<TSchemas, TEmittedSchemaMap>,\n SetupMeta<TSchemas, TMetaSchema>,\n MergeStateSchema<\n Cast<TConfig, StateSchema>,\n SetupStatesToStateSchema<TStates>\n >,\n MergeImplementationMaps<TSetupActionMap, TActionMap>,\n MergeImplementationMaps<TSetupActorMap, TActorMap>,\n MergeImplementationMaps<TSetupGuardMap, TGuardMap>,\n DelayMapFromNames<\n TSetupDelays | TDelays,\n MergeImplementationMaps<TSetupDelayMap, TDelayMap>\n >\n >;\n\n /** Creates a state node config with the setup configuration */\n createStateConfig<\n const TConfig extends StateNodeConfigWithNestedInput<\n TStates,\n SetupStateSchema,\n SetupContext<TSchemas, StandardSchemaV1>,\n SetupContextShape<\n TSchemas,\n StandardSchemaV1,\n SetupContext<TSchemas, StandardSchemaV1>\n >,\n SetupEvents<TSchemas, Record<string, StandardSchemaV1>>,\n Cast<\n SetupChildren<TSchemas, Record<string, StandardSchemaV1>>,\n Record<string, AnyActorRef | undefined>\n >,\n string,\n SetupTags<TSchemas, StandardSchemaV1>,\n SetupEmitted<TSchemas, Record<string, StandardSchemaV1>>,\n SetupMeta<TSchemas, StandardSchemaV1>,\n TSetupActionMap,\n TSetupActorMap,\n TSetupGuardMap,\n TSetupDelayMap,\n TSystemRegistry\n >\n >(\n config: TConfig\n ): TConfig;\n\n /** State input schemas from setup config */\n states: TStates;\n}\n\ntype SetupConfigSchemas<TConfig> = TConfig extends { schemas?: infer TSchemas }\n ? TSchemas extends SetupSchemas\n ? TSchemas\n : {}\n : {};\n\ntype SetupConfigStates<TConfig> = TConfig extends { states?: infer TStates }\n ? TStates extends Record<string, SetupStateSchema>\n ? TStates\n : Record<string, SetupStateSchema>\n : Record<string, SetupStateSchema>;\n\ntype SetupConfigActions<TConfig> = TConfig extends { actions?: infer TActions }\n ? TActions extends Implementations['actions']\n ? TActions\n : {}\n : {};\n\ntype SetupConfigActorSources<TConfig> = TConfig extends {\n actorSources?: infer TActorSources;\n}\n ? TActorSources extends Implementations['actorSources']\n ? TActorSources\n : {}\n : {};\n\ntype SetupConfigGuards<TConfig> = TConfig extends { guards?: infer TGuards }\n ? TGuards extends Implementations['guards']\n ? TGuards\n : {}\n : {};\n\ntype SetupConfigDelays<TConfig> = TConfig extends { delays?: infer TDelays }\n ? TDelays extends Implementations['delays']\n ? TDelays\n : {}\n : {};\n\nexport type SetupReturnFromConfig<TConfig extends AnySetupConfig> = SetupReturn<\n SetupConfigStates<TConfig>,\n SetupConfigSchemas<TConfig>,\n SetupConfigActions<TConfig>,\n SetupConfigActorSources<TConfig>,\n SetupConfigGuards<TConfig>,\n SetupConfigDelays<TConfig>\n>;\n\n/**\n * Sets up a state machine with state input schemas and other configuration.\n *\n * @example\n *\n * ```ts\n * import { setup } from 'xstate';\n * import z from 'zod';\n *\n * const s = setup({\n * states: {\n * loading: {\n * schemas: {\n * input: z.object({\n * userId: z.string()\n * })\n * }\n * }\n * }\n * });\n *\n * const machine = s.createMachine({\n * initial: {\n * target: 'loading',\n * input: { userId: '123' }\n * },\n * states: {\n * loading: {\n * entry: ({ input }) => {\n * console.log(input.userId);\n * }\n * }\n * }\n * });\n * ```\n */\nexport function setup(): SetupReturn;\nexport function setup<\n const TSchemas extends SetupSchemas = {},\n const TStates extends Record<string, SetupStateSchema> = Record<\n string,\n SetupStateSchema\n >,\n TActionMap extends Implementations['actions'] = {},\n TActorMap extends Implementations['actorSources'] = {},\n TGuardMap extends Implementations['guards'] = {},\n TDelayMap extends Implementations['delays'] = {}\n>(\n config: SetupConfig<\n TSchemas,\n TStates,\n TActionMap,\n TActorMap,\n TGuardMap,\n TDelayMap\n >\n): SetupReturn<TStates, TSchemas, TActionMap, TActorMap, TGuardMap, TDelayMap>;\nexport function setup<const TConfig extends AnySetupConfig>(\n config: TConfig\n): SetupReturnFromConfig<TConfig>;\nexport function setup<\n const TSchemas extends SetupSchemas = {},\n const TStates extends Record<string, SetupStateSchema> = Record<\n string,\n SetupStateSchema\n >,\n TActionMap extends Implementations['actions'] = {},\n TActorMap extends Implementations['actorSources'] = {},\n TGuardMap extends Implementations['guards'] = {},\n TDelayMap extends Implementations['delays'] = {}\n>(\n config: SetupConfig<\n TSchemas,\n TStates,\n TActionMap,\n TActorMap,\n TGuardMap,\n TDelayMap\n > = {}\n): SetupReturn<TStates, TSchemas, TActionMap, TActorMap, TGuardMap, TDelayMap> {\n const {\n states = {} as TStates,\n schemas,\n actions,\n actorSources,\n guards,\n delays\n } = config;\n\n return {\n extend<\n const TExtendSchemas extends SetupSchemas = {},\n const TExtendStates extends Record<string, SetupStateSchema> = {},\n TExtendActionMap extends Implementations['actions'] = {},\n TExtendActorMap extends Implementations['actorSources'] = {},\n TExtendGuardMap extends Implementations['guards'] = {},\n TExtendDelayMap extends Implementations['delays'] = {}\n >(\n extension: SetupConfig<\n TExtendSchemas,\n TExtendStates,\n TExtendActionMap,\n TExtendActorMap,\n TExtendGuardMap,\n TExtendDelayMap\n >\n ) {\n return setup(mergeSetupConfigs(config, extension)) as SetupReturn<\n MergeImplementationMaps<TStates, TExtendStates>,\n MergeImplementationMaps<TSchemas, TExtendSchemas>,\n MergeImplementationMaps<TActionMap, TExtendActionMap>,\n MergeImplementationMaps<TActorMap, TExtendActorMap>,\n MergeImplementationMaps<TGuardMap, TExtendGuardMap>,\n MergeImplementationMaps<TDelayMap, TExtendDelayMap>,\n | Extract<keyof TDelayMap, string>\n | Extract<keyof TExtendDelayMap, string>\n >;\n },\n createMachine(machineConfig) {\n const configSchemas = machineConfig.schemas;\n const mergedSchemas = mergeSchemas(configSchemas, schemas);\n const mergedActions = mergeMaps(actions, machineConfig.actions);\n const mergedActorSources = mergeMaps(\n actorSources,\n machineConfig.actorSources\n );\n const mergedGuards = mergeMaps(guards, machineConfig.guards);\n const mergedDelays = mergeMaps(delays, machineConfig.delays);\n\n return new StateMachine({\n ...machineConfig,\n ...(mergedSchemas ? { schemas: mergedSchemas } : undefined),\n ...(mergedActions ? { actions: mergedActions } : undefined),\n ...(mergedActorSources\n ? { actorSources: mergedActorSources }\n : undefined),\n ...(mergedGuards ? { guards: mergedGuards } : undefined),\n ...(mergedDelays ? { delays: mergedDelays } : undefined)\n } as any);\n },\n createStateConfig(stateConfig) {\n return stateConfig;\n },\n states\n };\n}\n\ntype SystemBuilder<TSystemRegistry extends SystemRegistry> = {\n createActor<TLogic extends AnyActorLogic>(\n logic: TLogic,\n options?: Omit<ActorOptions<TLogic>, 'registryKey'> & {\n registryKey?: RegistryKeyForLogic<TLogic, TSystemRegistry>;\n } & {\n [K in RequiredActorOptionsKeys<TLogic>]: unknown;\n }\n ): Actor<TLogic>;\n get: SystemRuntime<TSystemRegistry>['get'];\n getAll: SystemRuntime<TSystemRegistry>['getAll'];\n inspect(\n observer:\n | Observer<InspectionEvent>\n | ((inspectionEvent: InspectionEvent) => void)\n ): Subscription;\n setup<\n const TSchemas extends SetupSchemas = {},\n const TStates extends Record<string, SetupStateSchema> = Record<\n string,\n SetupStateSchema\n >,\n TActionMap extends Implementations['actions'] = {},\n TActorMap extends Implementations['actorSources'] = {},\n TGuardMap extends Implementations['guards'] = {},\n TDelayMap extends Implementations['delays'] = {}\n >(\n config?: SetupConfig<\n TSchemas,\n TStates,\n TActionMap,\n TActorMap,\n TGuardMap,\n TDelayMap\n >\n ): SetupReturn<\n TStates,\n TSchemas,\n TActionMap,\n TActorMap,\n TGuardMap,\n TDelayMap,\n Extract<keyof TDelayMap, string>,\n TSystemRegistry\n >;\n};\n\nexport function createSystem<const TSystemRegistry extends SystemRegistry = {}>(\n _config: SystemConfig<TSystemRegistry> = {}\n): SystemBuilder<TSystemRegistry> {\n const runtimeRef: { current?: AnyActorSystem } = {};\n const pendingObservers: Array<{\n observer: Parameters<AnyActorSystem['inspect']>[0];\n subscription?: Subscription;\n active: boolean;\n }> = [];\n\n const flushObservers = () => {\n const runtime = runtimeRef.current;\n if (!runtime) {\n return;\n }\n\n for (const entry of pendingObservers) {\n if (entry.active && !entry.subscription) {\n entry.subscription = runtime.inspect(entry.observer);\n }\n }\n };\n\n return {\n createActor(logic, options) {\n const actor = createActorFromLogic(logic, {\n ...options,\n _systemRef: runtimeRef\n } as any);\n flushObservers();\n return actor as any;\n },\n get(key) {\n return runtimeRef.current?.get(key as any);\n },\n getAll() {\n return (runtimeRef.current?.getAll() ?? {}) as Partial<\n SystemActorMap<TSystemRegistry>\n >;\n },\n inspect(observer) {\n const runtime = runtimeRef.current;\n\n if (runtime) {\n return runtime.inspect(observer as any);\n }\n\n const entry: (typeof pendingObservers)[number] = {\n observer: observer as Parameters<AnyActorSystem['inspect']>[0],\n active: true\n };\n pendingObservers.push(entry);\n\n return {\n unsubscribe() {\n entry.active = false;\n entry.subscription?.unsubscribe();\n }\n };\n },\n setup(config) {\n return (config ? setup(config) : setup()) as any;\n }\n };\n}\n\nfunction mergeMaps<TLeft, TRight>(\n left: TLeft | undefined,\n right: TRight | undefined\n): (TLeft & TRight) | undefined {\n return left || right ? ({ ...left, ...right } as TLeft & TRight) : undefined;\n}\n\nfunction mergeSchemas(\n left: SetupSchemas | undefined,\n right: SetupSchemas | undefined\n): SetupSchemas | undefined {\n if (!left && !right) {\n return undefined;\n }\n\n return {\n ...left,\n ...right,\n events: mergeMaps(left?.events, right?.events),\n emitted: mergeMaps(left?.emitted, right?.emitted),\n children: mergeMaps(left?.children, right?.children)\n };\n}\n\nfunction mergeSetupConfigs<\n TBase extends SetupConfig<any, any, any, any, any, any>,\n TExtension extends SetupConfig<any, any, any, any, any, any>\n>(base: TBase, extension: TExtension): TBase & TExtension {\n return {\n ...base,\n ...extension,\n schemas: mergeSchemas(base.schemas, extension.schemas),\n states: mergeMaps(base.states, extension.states),\n actions: mergeMaps(base.actions, extension.actions),\n actorSources: mergeMaps(base.actorSources, extension.actorSources),\n guards: mergeMaps(base.guards, extension.guards),\n delays: mergeMaps(base.delays, extension.delays)\n } as TBase & TExtension;\n}\n","import { createActor } from './createActor.ts';\nimport {\n ActorScope,\n AnyActorLogic,\n AnyActorScope,\n EmittedFrom,\n EventFromLogic,\n InputFrom,\n SnapshotFrom\n} from './types.ts';\n\n/** @internal */\nexport function createInertActorScope<T extends AnyActorLogic>(\n actorLogic: T\n): AnyActorScope {\n const self = createActor(actorLogic as AnyActorLogic);\n const inertActorScope: ActorScope<\n SnapshotFrom<T>,\n EventFromLogic<T>,\n any,\n EmittedFrom<T>\n > = {\n self: self as any,\n defer: () => {},\n id: '',\n logger: () => {},\n sessionId: '',\n stopChild: () => {},\n system: self.system,\n emit: () => {},\n actionExecutor: () => {}\n };\n\n return inertActorScope;\n}\n\n/** @deprecated Use `initialTransition(…)` instead. */\nexport function getInitialSnapshot<T extends AnyActorLogic>(\n actorLogic: T,\n ...[input]: undefined extends InputFrom<T>\n ? [input?: InputFrom<T>]\n : [input: InputFrom<T>]\n): SnapshotFrom<T> {\n const actorScope = createInertActorScope(actorLogic);\n return actorLogic.initialTransition(input, actorScope)[0];\n}\n\n/**\n * Determines the next snapshot for the given `actorLogic` based on the given\n * `snapshot` and `event`.\n *\n * If the `snapshot` is `undefined`, the initial snapshot of the `actorLogic` is\n * used.\n *\n * @deprecated Use `transition(…)` instead.\n * @example\n *\n * ```ts\n * import { getNextSnapshot } from 'xstate';\n * import { trafficLightMachine } from './trafficLightMachine.ts';\n *\n * const nextSnapshot = getNextSnapshot(\n * trafficLightMachine, // actor logic\n * undefined, // snapshot (or initial state if undefined)\n * { type: 'TIMER' }\n * ); // event object\n *\n * console.log(nextSnapshot.value);\n * // => 'yellow'\n *\n * const nextSnapshot2 = getNextSnapshot(\n * trafficLightMachine, // actor logic\n * nextSnapshot, // snapshot\n * { type: 'TIMER' }\n * ); // event object\n *\n * console.log(nextSnapshot2.value);\n * // =>'red'\n * ```\n */\nexport function getNextSnapshot<T extends AnyActorLogic>(\n actorLogic: T,\n snapshot: SnapshotFrom<T>,\n event: EventFromLogic<T>\n): SnapshotFrom<T> {\n const inertActorScope = createInertActorScope(actorLogic);\n (inertActorScope.self as any)._snapshot = snapshot;\n const transitionResult = actorLogic.transition(\n snapshot,\n event,\n inertActorScope\n );\n return Array.isArray(transitionResult)\n ? transitionResult[0]\n : transitionResult;\n}\n","import type { MachineSnapshot } from './State.ts';\nimport type { StateMachine } from './StateMachine.ts';\nimport type { StateNode } from './StateNode.ts';\nimport { AsyncActorLogic } from './actors/promise.ts';\nimport type { Actor, ProcessingStatus } from './createActor.ts';\nimport { InspectionEvent } from './inspection.ts';\nimport { Spawner } from './spawn.ts';\nimport { AnyActorSystem, Clock } from './system.ts';\n\n// this is needed to make JSDoc `@link` work properly\nimport type { SimulatedClock } from './SimulatedClock.ts';\nimport { Implementations, Next_StateNodeConfig } from './types.v6.ts';\nimport { StandardSchemaV1 } from './schema.types.ts';\nimport { builtInActions } from './actions.ts';\n\nexport type Identity<T> = { [K in keyof T]: T[K] };\n\nexport type HomomorphicPick<T, K extends keyof any> = {\n [P in keyof T as P & K]: T[P];\n};\nexport type HomomorphicOmit<T, K extends keyof any> = {\n [P in keyof T as Exclude<P, K>]: T[P];\n};\n\nexport type Invert<T extends Record<PropertyKey, PropertyKey>> = {\n [K in keyof T as T[K]]: K;\n};\n\nexport type GetParameterizedParams<T extends ParameterizedObject | undefined> =\n T extends any ? ('params' extends keyof T ? T['params'] : undefined) : never;\n\n/**\n * @remarks\n * `T | unknown` reduces to `unknown` and that can be problematic when it comes\n * to contextual typing. It especially is a problem when the union has a\n * function member, like here:\n *\n * ```ts\n * declare function test(\n * cbOrVal: ((arg: number) => unknown) | unknown\n * ): void;\n * test((arg) => {}); // oops, implicit any\n * ```\n *\n * This type can be used to avoid this problem. This union represents the same\n * 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;\nexport type IsNotNever<T> = [T] extends [never] ? false : true;\n\nexport type Compute<A> = { [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 Elements<T> = T[keyof T & `${number}`];\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 IsEmptyObject<T> = keyof T extends never ? true : false;\n\nexport type Equals<A1, A2> =\n (<A>() => A extends A2 ? true : false) extends <A>() => A extends A1\n ? true\n : false\n ? true\n : false;\nexport type IsAny<T> = Equals<T, any>;\nexport type Cast<A, B> = A extends B ? A : B;\n// @TODO: we can't use native `NoInfer` as we need those:\n// https://github.com/microsoft/TypeScript/pull/61092\n// https://github.com/microsoft/TypeScript/pull/61077\n// but even with those fixes native NoInfer still doesn't work - further issues have to be reproduced and fixed\nexport type DoNotInfer<T> = [T][T extends any ? 0 : any];\n/** @deprecated Use the built-in `NoInfer` type instead */\nexport type NoInfer<T> = DoNotInfer<T>;\nexport type LowInfer<T> = T & NonNullable<unknown>;\n\nexport type MetaObject = Record<string, any>;\n\nexport type Lazy<T> = () => T;\nexport type MaybeLazy<T> = T | Lazy<T>;\n\n/** The full definition of an event, with a string `type`. */\nexport type EventObject = {\n /** The type of event that is sent. */\n type: string;\n};\n\nexport interface AnyEventObject extends EventObject {\n [key: string]: any;\n}\n\nexport interface ParameterizedObject {\n type: string;\n params?: NonReducibleUnknown;\n}\n\nexport type UnifiedArg<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TEvent extends EventObject\n> = {\n context: TContext;\n event: TExpressionEvent;\n self: ActorSelf<\n MachineSnapshot<\n TContext,\n TEvent,\n Record<string, AnyActorRef | undefined>, // TODO: this should be replaced with `TChildren`\n StateValue,\n string,\n unknown,\n TODO, // TMeta\n TODO // State schema\n >,\n TEvent,\n AnyEventObject\n >;\n system: AnyActorSystem;\n} & OutputArg<TExpressionEvent>;\n\nexport type MachineContext = Record<string, any>;\n\ntype DoneEventType =\n | `xstate.done.actor.${string}`\n | `xstate.done.state.${string}`;\n\nexport type OutputArg<TEvent extends EventObject> = TEvent extends {\n type: DoneEventType;\n output: infer TOutput;\n}\n ? { output: TOutput }\n : { output: undefined };\n\nexport type ActionArgs<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TEvent extends EventObject\n> = UnifiedArg<TContext, TExpressionEvent, TEvent> & {\n children: Record<string, AnyActor>;\n};\n\nexport type InputFrom<T> =\n T extends StateMachine<\n infer _TContext,\n infer _TEvent,\n infer _TChildren,\n infer _TStateValue,\n infer _TTag,\n infer TInput,\n infer _TOutput,\n infer _TEmitted,\n infer _TMeta,\n infer _TStateSchema,\n infer _TActionMap,\n infer _TActorMap,\n infer _TGuardMap,\n infer _TDelayMap\n >\n ? TInput\n : T extends ActorLogic<\n infer _TSnapshot,\n infer _TEvent,\n infer TInput,\n infer _TSystem,\n infer _TEmitted\n >\n ? TInput\n : never;\n\nexport type OutputFrom<T> =\n T extends ActorLogic<\n infer TSnapshot,\n infer _TEvent,\n infer _TInput,\n infer _TSystem,\n infer _TEmitted\n >\n ? (TSnapshot & { status: 'done' })['output']\n : T extends ActorRef<infer TSnapshot, infer _TEvent, infer _TEmitted>\n ? (TSnapshot & { status: 'done' })['output']\n : never;\n\nexport type NoRequiredParams<T extends ParameterizedObject> = T extends any\n ? undefined extends T['params']\n ? T['type']\n : never\n : never;\n\nexport type ConditionalRequired<\n T,\n Condition extends boolean\n> = Condition extends true ? Required<T> : T;\n\nexport type WithDynamicParams<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n T extends ParameterizedObject\n> = T extends any\n ? ConditionalRequired<\n {\n type: T['type'];\n params?:\n | T['params']\n | (({\n context,\n event,\n output\n }: {\n context: TContext;\n event: TExpressionEvent;\n } & OutputArg<TExpressionEvent>) => T['params']);\n },\n undefined extends T['params'] ? false : true\n >\n : never;\n\nexport type StateKey = string | AnyMachineSnapshot;\n\nexport interface StateValueMap {\n [key: string]: StateValue | undefined;\n}\n\n/**\n * The string or object representing the state value relative to the parent\n * state node.\n *\n * @remarks\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:\n * \"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 TEmitted extends EventObject,\n TMeta extends MetaObject,\n TActionMap extends Implementations['actions'],\n TActorMap extends Implementations['actorSources'],\n TGuardMap extends Implementations['guards'],\n TDelayMap extends Implementations['delays']\n> {\n actions?: never;\n guard?: unknown;\n reenter?: boolean;\n target?: TransitionTarget | undefined;\n context?: Partial<TContext>;\n to?: TransitionConfigFunction<\n TContext,\n TExpressionEvent,\n TEvent,\n TEmitted,\n TActionMap,\n TActorMap,\n TGuardMap,\n TDelayMap,\n TMeta\n >;\n meta?: TMeta;\n description?: string;\n}\n\nexport interface InitialTransitionConfig<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TEmitted extends EventObject,\n TMeta extends MetaObject,\n TActionMap extends Implementations['actions'],\n TActorMap extends Implementations['actorSources'],\n TGuardMap extends Implementations['guards'],\n TDelayMap extends Implementations['delays']\n> extends TransitionConfig<\n TContext,\n TEvent,\n TEvent,\n TEmitted,\n TMeta,\n TActionMap,\n TActorMap,\n TGuardMap,\n TDelayMap\n > {\n target: string;\n}\n\nexport type AnyTransitionConfig = TransitionConfig<\n any, // TContext\n any, // TExpressionEvent\n any, // TEvent\n any, // TEmitted\n any, // TMeta\n any, // TActionMap\n any, // TActorMap\n any, // TGuardMap\n any // TDelayMap\n>;\n\nexport interface InvokeDefinition<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TEmitted extends EventObject,\n TMeta extends MetaObject,\n TActionMap extends Implementations['actions'],\n TActorMap extends Implementations['actorSources'],\n TGuardMap extends Implementations['guards'],\n TDelayMap extends Implementations['delays']\n> {\n id: string;\n\n registryKey: string | undefined;\n\n logic:\n | string\n | AnyActorLogic\n | (({\n actorSources,\n context,\n event,\n self\n }: {\n actorSources: TActorMap;\n context: TContext;\n event: TEvent;\n self: AnyActorRef;\n }) => string | AnyActorLogic);\n /** The source of the actor logic to be invoked */\n src: AnyActorLogic | string;\n\n input?:\n | Mapper<TContext, TEvent, NonReducibleUnknown, TEvent>\n | NonReducibleUnknown;\n /**\n * The transition to take upon the invoked child machine reaching its final\n * top-level state.\n */\n onDone?:\n | string\n | SingleOrArray<\n TransitionConfig<\n TContext,\n DoneActorEvent<unknown>,\n TEvent,\n TEmitted,\n TMeta,\n TActionMap,\n TActorMap,\n TGuardMap,\n TDelayMap\n >\n >;\n /**\n * The transition to take upon the invoked child machine sending an error\n * event.\n */\n onError?:\n | string\n | SingleOrArray<\n TransitionConfig<\n TContext,\n ErrorActorEvent,\n TEvent,\n TEmitted,\n TMeta,\n TActionMap,\n TActorMap,\n TGuardMap,\n TDelayMap\n >\n >;\n\n onSnapshot?:\n | string\n | SingleOrArray<\n TransitionConfig<\n TContext,\n SnapshotEvent,\n TEvent,\n TEmitted,\n TMeta,\n TActionMap,\n TActorMap,\n TGuardMap,\n TDelayMap\n >\n >;\n /**\n * The duration (in ms) after which this invocation times out if it has not\n * completed.\n */\n timeout?: number | ((args: { context: TContext; event: TEvent }) => number);\n /** The transition to take when the invoke-level `timeout` expires. */\n onTimeout?:\n | string\n | SingleOrArray<\n TransitionConfig<\n TContext,\n TEvent,\n TEvent,\n TEmitted,\n TMeta,\n TActionMap,\n TActorMap,\n TGuardMap,\n TDelayMap\n >\n >;\n}\n\nexport type AnyInvokeDefinition = InvokeDefinition<\n MachineContext,\n EventObject,\n EventObject,\n MetaObject,\n Implementations['actions'],\n Implementations['actorSources'],\n Implementations['guards'],\n Implementations['delays']\n>;\n\ntype Delay<TDelay extends string> = TDelay | number;\n\nexport type DelayedTransitions<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TEmitted extends EventObject,\n TMeta extends MetaObject,\n TActionMap extends Implementations['actions'],\n TActorMap extends Implementations['actorSources'],\n TGuardMap extends Implementations['guards'],\n TDelayMap extends Implementations['delays']\n> = {\n [K in Delay<keyof TDelayMap & string>]?:\n | string\n | SingleOrArray<\n TransitionConfig<\n TContext,\n TEvent,\n TEvent,\n TEmitted,\n TMeta,\n TActionMap,\n TActorMap,\n TGuardMap,\n TDelayMap\n >\n >\n | TransitionConfigFunction<\n TContext,\n TEvent,\n TEvent,\n TODO,\n any,\n any,\n any,\n any,\n any\n >;\n};\n\nexport type StateTypes =\n | 'atomic'\n | 'compound'\n | 'parallel'\n | 'final'\n | 'choice'\n | 'history'\n | ({} & string);\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 TransitionConfigTarget = string | undefined;\n\nexport type TransitionConfigOrTarget<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TEvent extends EventObject,\n TEmitted extends EventObject,\n TMeta extends MetaObject,\n TActionMap extends Implementations['actions'],\n TActorMap extends Implementations['actorSources'],\n TGuardMap extends Implementations['guards'],\n TDelayMap extends Implementations['delays']\n> = SingleOrArray<\n | TransitionConfigTarget\n | TransitionConfig<\n TContext,\n TExpressionEvent,\n TEvent,\n TEmitted,\n TMeta,\n TActionMap,\n TActorMap,\n TGuardMap,\n TDelayMap\n >\n | TransitionConfigFunction<\n TContext,\n TExpressionEvent,\n TEvent,\n TEmitted,\n TActionMap,\n TActorMap,\n TGuardMap,\n TDelayMap,\n TMeta\n >\n>;\n\nexport type TransitionConfigFunction<\n TContext extends MachineContext,\n TCurrentEvent extends EventObject,\n TEvent extends EventObject,\n TEmitted extends EventObject,\n TActionMap extends Implementations['actions'],\n TActorMap extends Implementations['actorSources'],\n TGuardMap extends Implementations['guards'],\n TDelayMap extends Implementations['delays'],\n TMeta extends MetaObject,\n _TCtx = [TContext] extends [never] ? any : TContext\n> = (\n args: TransitionFunctionArgs<\n _TCtx,\n TCurrentEvent,\n TEvent,\n TActionMap,\n TActorMap,\n TGuardMap,\n TDelayMap\n >,\n enq: EnqueueObject<TEvent, TEmitted>\n) => {\n target?: string | string[];\n // target?: keyof TSS['states'];\n context?: Partial<_TCtx>;\n reenter?: boolean;\n meta?: TMeta;\n} | void;\n\ntype TransitionFunctionArgs<\n TContext,\n TCurrentEvent extends EventObject,\n TEvent extends EventObject,\n TActionMap extends Implementations['actions'],\n TActorMap extends Implementations['actorSources'],\n TGuardMap extends Implementations['guards'],\n TDelayMap extends Implementations['delays']\n> = {\n context: TContext;\n event: TCurrentEvent;\n self: ActorSelf<\n MachineSnapshot<\n TContext & MachineContext,\n TEvent,\n TODO,\n TODO,\n TODO,\n TODO,\n TODO,\n TODO\n >,\n TEvent\n >;\n parent: UnknownActorRef | undefined;\n value: StateValue;\n children: Record<string, AnyActor>;\n system: AnyActorSystem;\n actions: TActionMap;\n actorSources: TActorMap;\n guards: TGuardMap;\n delays: TDelayMap;\n} & OutputArg<TCurrentEvent>;\n\nexport type AnyTransitionConfigFunction = TransitionConfigFunction<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n>;\n\nexport type TransitionsConfig<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TEmitted extends EventObject,\n TMeta extends MetaObject,\n TActionMap extends Implementations['actions'],\n TActorMap extends Implementations['actorSources'],\n TGuardMap extends Implementations['guards'],\n TDelayMap extends Implementations['delays']\n> = {\n [K in EventDescriptor<TEvent>]?: TransitionConfigOrTarget<\n TContext,\n ExtractEvent<TEvent, K>,\n TEvent,\n TEmitted,\n TMeta,\n TActionMap,\n TActorMap,\n TGuardMap,\n TDelayMap\n >;\n};\n\ntype PartialEventDescriptor<TEventType extends string> =\n TEventType extends `${infer TLeading}.${infer TTail}`\n ? `${TLeading}.*` | `${TLeading}.${PartialEventDescriptor<TTail>}`\n : never;\n\nexport type EventDescriptor<TEvent extends EventObject> =\n | TEvent['type']\n | PartialEventDescriptor<TEvent['type']>\n | '*';\n\nexport type NormalizeDescriptor<TDescriptor extends string> =\n TDescriptor extends '*'\n ? string\n : TDescriptor extends `${infer TLeading}.*`\n ? `${TLeading}.${string}`\n : TDescriptor;\n\ntype EventTypeMatchesDescriptor<\n TEventType extends string,\n TDescriptor extends string\n> = TEventType extends NormalizeDescriptor<TDescriptor> ? true : false;\n\ntype IsInternalEventType<\n TEventType extends string,\n TDescriptors extends string\n> = true extends (\n TDescriptors extends any\n ? EventTypeMatchesDescriptor<TEventType, TDescriptors>\n : never\n)\n ? true\n : false;\n\ntype ExcludeInternalEvents<\n TEvent extends EventObject,\n TDescriptors extends string\n> = TEvent extends any\n ? IsInternalEventType<TEvent['type'], TDescriptors> extends true\n ? never\n : TEvent\n : never;\n\nexport type IsLiteralString<T extends string> = string extends T ? false : true;\n\ntype ActorImplementationsBySrc<TActor extends ProvidedActor> = {\n [A in TActor as A['src']]: A['logic'];\n};\n\ntype DistributeActors<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TActor extends ProvidedActor,\n _TAction extends ParameterizedObject,\n _TGuard extends ParameterizedObject,\n _TDelay extends string,\n TEmitted extends EventObject,\n TMeta extends MetaObject,\n TSpecificActor extends ProvidedActor\n> = TSpecificActor extends { src: infer TSrc }\n ?\n | Compute<\n {\n registryKey?: string;\n /** The source of the machine to be invoked, or the machine itself. */\n src:\n | TSrc\n | (({\n actorSources,\n context,\n event,\n self\n }: {\n actorSources: ActorImplementationsBySrc<TActor>;\n context: TContext;\n event: TEvent;\n self: AnyActorRef;\n }) => TSrc | TSpecificActor['logic']);\n\n /**\n * The unique identifier for the invoked machine. If not specified,\n * this will be the machine's own `id`, or the URL (from `src`).\n */\n id?: TSpecificActor['id'];\n\n // TODO: currently we do not enforce required inputs here\n // in a sense, we shouldn't - they could be provided within the `implementations` object\n // how do we verify if the required input has been provided?\n input?:\n | Mapper<\n TContext,\n TEvent,\n InputFrom<TSpecificActor['logic']>,\n TEvent\n >\n | InputFrom<TSpecificActor['logic']>;\n /**\n * The transition to take upon the invoked child machine reaching\n * its final top-level state.\n */\n onDone?:\n | string\n | SingleOrArray<\n TransitionConfigOrTarget<\n TContext,\n DoneActorEvent<OutputFrom<TSpecificActor['logic']>>,\n TEvent,\n TEmitted,\n TMeta,\n any,\n any,\n any,\n any\n >\n >;\n /**\n * The transition to take upon the invoked child machine sending an\n * error event.\n */\n onError?:\n | string\n | SingleOrArray<\n TransitionConfigOrTarget<\n TContext,\n ErrorActorEvent,\n TEvent,\n TEmitted,\n TMeta,\n any,\n any,\n any,\n any\n >\n >;\n\n onSnapshot?:\n | string\n | SingleOrArray<\n TransitionConfigOrTarget<\n TContext,\n SnapshotEvent<SnapshotFrom<TSpecificActor['logic']>>,\n TEvent,\n TEmitted,\n TMeta,\n any,\n any,\n any,\n any\n >\n >;\n timeout?:\n | number\n | ((args: { context: TContext; event: TEvent }) => number);\n onTimeout?:\n | string\n | SingleOrArray<\n TransitionConfigOrTarget<\n TContext,\n TEvent,\n TEvent,\n TEmitted,\n TMeta,\n any,\n any,\n any,\n any\n >\n >;\n } & { [K in RequiredActorOptions<TSpecificActor>]: unknown }\n >\n | {\n id?: never;\n registryKey?: string;\n src:\n | string\n | AnyActorLogic\n | (({\n actorSources,\n context,\n event,\n self\n }: {\n actorSources: ActorImplementationsBySrc<TActor>;\n context: TContext;\n event: TEvent;\n self: AnyActorRef;\n }) => string | AnyActorLogic);\n input?:\n | Mapper<TContext, TEvent, NonReducibleUnknown, TEvent>\n | NonReducibleUnknown;\n onDone?:\n | string\n | SingleOrArray<\n TransitionConfigOrTarget<\n TContext,\n DoneActorEvent<unknown>,\n TEvent,\n TEmitted,\n TMeta,\n any,\n any,\n any,\n any\n >\n >;\n onError?:\n | string\n | SingleOrArray<\n TransitionConfigOrTarget<\n TContext,\n ErrorActorEvent,\n TEvent,\n TEmitted,\n TMeta,\n any,\n any,\n any,\n any\n >\n >;\n\n onSnapshot?:\n | string\n | SingleOrArray<\n TransitionConfigOrTarget<\n TContext,\n SnapshotEvent,\n TEvent,\n TEmitted,\n TMeta,\n any,\n any,\n any,\n any\n >\n >;\n timeout?:\n | number\n | ((args: { context: TContext; event: TEvent }) => number);\n onTimeout?:\n | string\n | SingleOrArray<\n TransitionConfigOrTarget<\n TContext,\n TEvent,\n TEvent,\n TEmitted,\n TMeta,\n any,\n any,\n any,\n any\n >\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 TDelay extends string,\n TEmitted extends EventObject,\n TMeta extends MetaObject\n> =\n IsLiteralString<TActor['src']> extends true\n ? DistributeActors<\n TContext,\n TEvent,\n TActor,\n TAction,\n TGuard,\n TDelay,\n TEmitted,\n TMeta,\n TActor\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 registryKey?: string;\n /** The source of the machine to be invoked, or the machine itself. */\n src:\n | string\n | AnyActorLogic\n | (({\n actorSources,\n context,\n event,\n self\n }: {\n actorSources: ActorImplementationsBySrc<TActor>;\n context: TContext;\n event: TEvent;\n self: AnyActorRef;\n }) => string | AnyActorLogic);\n\n input?:\n | Mapper<TContext, TEvent, NonReducibleUnknown, TEvent>\n | NonReducibleUnknown;\n /**\n * The transition to take upon the invoked child machine reaching its\n * final top-level state.\n */\n onDone?:\n | string\n | SingleOrArray<\n TransitionConfigOrTarget<\n TContext,\n DoneActorEvent<unknown>,\n TEvent,\n TEmitted,\n TMeta,\n any,\n any,\n any,\n any\n >\n >;\n /**\n * The transition to take upon the invoked child machine sending an\n * error event.\n */\n onError?:\n | string\n | SingleOrArray<\n TransitionConfigOrTarget<\n TContext,\n ErrorActorEvent,\n TEvent,\n TEmitted,\n TMeta,\n any,\n any,\n any,\n any\n >\n >;\n\n onSnapshot?:\n | string\n | SingleOrArray<\n TransitionConfigOrTarget<\n TContext,\n SnapshotEvent,\n TEvent,\n TEmitted,\n TMeta,\n any,\n any,\n any,\n any\n >\n >;\n timeout?:\n | number\n | ((args: { context: TContext; event: TEvent }) => number);\n onTimeout?:\n | string\n | SingleOrArray<\n TransitionConfigOrTarget<\n TContext,\n TEvent,\n TEvent,\n TEmitted,\n TMeta,\n any,\n any,\n any,\n any\n >\n >;\n };\n\nexport type AnyInvokeConfig = InvokeConfig<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any // TMeta\n>;\n\nexport type AnyStateNodeConfig = Next_StateNodeConfig<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n>;\n\n// Accept any StateNode instance regardless of generic parameters\n// Using a union type to handle variance issues with machine.resolveState\nexport type AnyStateNode =\n | StateNode<any, any>\n | StateNode<never, EventObject>\n | StateNode<any, EventObject>\n | StateNode<never, any>;\n\nexport type AnyMachineSnapshot = MachineSnapshot<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n>;\n\nexport type AnyStateMachine = StateMachine<\n any, // context\n any, // event\n any, // children\n any, // state value\n any, // tag\n any, // input\n any, // output\n any, // emitted\n any, // TMeta\n any, // TStateSchema,\n any, // TActionMap,\n any, // TActorMap\n any, // TGuardMap\n any // TDelayMap\n>;\n\nexport type AnyStateConfig = StateConfig<any, AnyEventObject>;\n\nexport type DelayConfig<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject\n> = number | DelayExpr<TContext, TExpressionEvent>;\n\nexport type InitialContext<\n TContext extends MachineContext,\n TActorMap extends Implementations['actorSources'],\n TInput,\n TEvent extends EventObject\n> = TContext | ContextFactory<TContext, TActorMap, TInput, TEvent>;\n\nexport type ContextFactory<\n TContext extends MachineContext,\n TActorMap extends Implementations['actorSources'],\n TInput,\n TEvent extends EventObject = EventObject\n> = ({\n spawn,\n actorSources,\n input,\n self\n}: {\n spawn: Spawner;\n actorSources: TActorMap;\n input: TInput;\n self: ActorSelf<\n MachineSnapshot<\n [TContext] extends [never] ? any : TContext,\n TEvent,\n Record<string, AnyActorRef | undefined>, // TODO: this should be replaced with `TChildren`\n StateValue,\n string,\n unknown,\n TODO, // TMeta\n TODO // State schema\n >,\n TEvent,\n AnyEventObject\n >;\n}) => [TContext] extends [never] ? MachineContext : TContext;\n\nexport interface ProvidedActor {\n src: string;\n logic: UnknownActorLogic;\n id?: string | undefined; // `| undefined` is required here for compatibility with `exactOptionalPropertyTypes`, see #4613\n}\n\nexport interface SetupTypes<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TChildrenMap extends Record<string, string>,\n TTag extends string,\n TInput,\n TOutput,\n TEmitted extends EventObject,\n TMeta extends MetaObject\n> {\n context?: TContext;\n events?: TEvent;\n children?: TChildrenMap;\n tags?: TTag;\n input?: TInput;\n output?: TOutput;\n emitted?: TEmitted;\n meta?: TMeta;\n}\n\nexport interface MachineTypes<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TActor extends ProvidedActor,\n TAction extends ParameterizedObject,\n TGuard extends ParameterizedObject,\n TDelay extends string,\n TTag extends string,\n TInput,\n TOutput,\n TEmitted extends EventObject,\n TMeta extends MetaObject\n> extends SetupTypes<\n TContext,\n TEvent,\n // in machine types we currently don't support `TChildren`\n // and IDs can still be configured through `TActor['id']`\n never,\n TTag,\n TInput,\n TOutput,\n TEmitted,\n TMeta\n > {\n actorSources?: TActor;\n actions?: TAction;\n guards?: TGuard;\n delays?: TDelay;\n meta?: TMeta;\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 = Record<string, Array<AnyStateNode>>;\n\nexport type PersistedHistoryValue = Record<string, Array<{ id: string }>>;\n\nexport type AnyHistoryValue = HistoryValue;\n\nexport type StateFrom<\n T extends AnyStateMachine | ((...args: any[]) => AnyStateMachine)\n> = T extends AnyStateMachine\n ? SnapshotFrom<T>\n : T extends (...args: any[]) => AnyStateMachine\n ? SnapshotFrom<ReturnType<T>>\n : never;\n\nexport interface DoneActorEvent<TOutput = unknown, TId extends string = string>\n extends EventObject {\n type: `xstate.done.actor.${TId}`;\n output: TOutput;\n actorId: TId;\n}\n\nexport interface ErrorActorEvent<\n TErrorData = unknown,\n TId extends string = string\n> extends EventObject {\n type: `xstate.error.actor.${TId}`;\n error: TErrorData;\n actorId: TId;\n}\n\nexport interface SnapshotEvent<\n TSnapshot extends Snapshot<unknown> = Snapshot<unknown>\n> extends EventObject {\n type: `xstate.snapshot.${string}`;\n snapshot: TSnapshot;\n}\n\nexport interface DoneStateEvent<TOutput = unknown> extends EventObject {\n type: `xstate.done.state.${string}`;\n output: TOutput;\n}\n\nexport enum SpecialTargets {\n Internal = '#_internal'\n}\n\nexport type Mapper<\n TContext extends MachineContext,\n TExpressionEvent extends EventObject,\n TResult,\n TEvent extends EventObject,\n _TCtx = [TContext] extends [never] ? any : TContext\n> = (\n args: {\n context: _TCtx;\n event: TExpressionEvent;\n self: ActorSelf<\n MachineSnapshot<\n _TCtx & MachineContext,\n TEvent,\n Record<string, AnyActorRef>, // TODO: this should be replaced with `TChildren`\n StateValue,\n string,\n unknown,\n TODO, // TMeta\n TODO // State schema\n >,\n TEvent,\n AnyEventObject\n >;\n } & OutputArg<TExpressionEvent>\n) => TResult;\n\nexport interface TransitionDefinition<\n TContext extends MachineContext,\n TEvent extends EventObject\n> extends Omit<\n TransitionConfig<\n TContext,\n TEvent,\n TEvent,\n TODO,\n TODO,\n TODO,\n TODO,\n TODO, // TEmitted\n TODO // TMeta\n >,\n 'target' | 'to'\n > {\n target: ReadonlyArray<AnyStateNode> | undefined;\n source: AnyStateNode;\n reenter: boolean;\n eventType: EventDescriptor<TEvent>;\n to?: ((...args: any[]) => any) | undefined;\n input?:\n | Record<string, unknown>\n | ((args: {\n context: any;\n event: any;\n output: any;\n }) => Record<string, unknown>);\n}\n\nexport type AnyTransitionDefinition = TransitionDefinition<any, any>;\n\nexport type InitialTransitionDefinition = {\n source: AnyStateNode;\n target: AnyStateNode[] | undefined;\n reenter?: boolean;\n eventType?: EventDescriptor<any>;\n input?:\n | Record<string, unknown>\n | ((args: {\n context: MachineContext;\n event: EventObject;\n }) => Record<string, unknown>);\n};\n\nexport type TransitionDefinitionMap<\n TContext extends MachineContext,\n TEvent extends EventObject\n> = {\n [K in EventDescriptor<TEvent>]: Array<\n TransitionDefinition<TContext, ExtractEvent<TEvent, K>>\n >;\n};\n\nexport type DelayExpr<\n TContext extends MachineContext,\n TEvent extends EventObject\n> = (args: {\n context: [TContext] extends [never] ? any : TContext;\n event: TEvent;\n stateNode: AnyStateNode;\n}) => number;\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 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 context: TContext;\n historyValue?: HistoryValue;\n /** @internal */\n _nodes: Array<AnyStateNode>;\n /** @internal */\n value?: StateValue;\n children: Record<string, AnyActorRef | undefined>;\n status: SnapshotStatus;\n output?: any;\n error?: unknown;\n /** @internal */\n _stateInputs?: Record<string, Record<string, unknown>>;\n machine?: StateMachine<\n TContext,\n TEvent,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n >;\n}\n\n/**\n * A pending effect (delayed event/transition that has not fired yet) captured\n * in a persisted snapshot — a serialized built-in action descriptor plus its\n * runtime progress, with enough information to restore it under any strategy.\n */\nexport interface PendingEffect {\n /** The serialized built-in action type for this effect. */\n type: '@xstate.raise';\n event: EventObject;\n id: string;\n /** The original delay (in ms) the effect was scheduled with. */\n delay: number;\n /** Wall-clock timestamp (ms) when the effect was scheduled. */\n startedAt: number;\n /** Wall-clock time (ms) that had elapsed when the snapshot was persisted. */\n elapsed: number;\n}\n\n/**\n * How pending effects (timers) from a persisted snapshot are restored on\n * `actor.start()`:\n *\n * - `'resume'` (default) — the clock was \"frozen\" while persisted: a 5-minute\n * timer persisted with 1 minute elapsed fires after 4 more minutes.\n * - `'restart'` — timers start over with their full delay.\n * - `'absolute'` — timers honor the original wall-clock expiry (`startedAt +\n * delay`); already-expired timers fire immediately.\n * - A custom function receiving the pending effect and returning the remaining\n * delay in ms.\n */\nexport type TimersRestoreStrategy =\n | 'resume'\n | 'restart'\n | 'absolute'\n | ((pendingEffect: PendingEffect) => number);\n\nexport interface ActorOptions<TLogic extends AnyActorLogic> {\n /**\n * How pending timers (delayed events/transitions) from a persisted `snapshot`\n * are restored when the actor starts. Applies to this actor and (when this is\n * the root) all rehydrated child actors.\n *\n * @default 'resume'\n */\n timers?: TimersRestoreStrategy;\n /**\n * The clock that is responsible for setting and clearing timeouts, such as\n * delayed events and transitions.\n *\n * @remarks\n * You can create your own “clock”. The clock interface is an object with two\n * functions/methods:\n *\n * - `setTimeout` - same arguments as `window.setTimeout(fn, timeout)`\n * - `clearTimeout` - same arguments as `window.clearTimeout(id)`\n *\n * By default, the native `setTimeout` and `clearTimeout` functions are used.\n *\n * For testing, XState provides `SimulatedClock`.\n * @see {@link Clock}\n * @see {@link SimulatedClock}\n */\n clock?: Clock;\n /**\n * Specifies the logger to be used for `log(...)` actions. Defaults to the\n * native `console.log(...)` method.\n */\n logger?: (...args: any[]) => void;\n parent?: AnyActor;\n /** @internal */\n syncSnapshot?: boolean;\n /** @internal */\n _systemRef?: { current?: AnyActorSystem };\n /** The custom `id` for referencing this service. */\n id?: string;\n /** @deprecated Use `inspect` instead. */\n devTools?: never;\n\n /** The registry key to register this actor under. */\n registryKey?: string;\n /** The input data to pass to the actor. */\n input?: InputFrom<TLogic>;\n\n /**\n * Initializes actor logic from a specific persisted internal state.\n *\n * @remarks\n * If the state is compatible with the actor logic, when the actor is started\n * it will be at that persisted state. Actions from machine actors will not be\n * re-executed, because they are assumed to have been already executed.\n * However, invocations will be restarted, and spawned actors will be restored\n * recursively.\n *\n * Can be generated with {@link Actor.getPersistedSnapshot}.\n * @see https://stately.ai/docs/persistence\n */\n snapshot?: Snapshot<unknown>;\n\n /** @deprecated Use `snapshot` instead. */\n state?: Snapshot<unknown>;\n\n /** The source actor logic. */\n src?: string | AnyActorLogic;\n\n /**\n * A callback function or observer object which can be used to inspect actor\n * system updates.\n *\n * @remarks\n * If a callback function is provided, it can accept an inspection event\n * argument. The inspection protocol has two event types:\n *\n * - `@xstate.actor` - An actor ref was created in the system (announces actor\n * topology: identity + parent).\n * - `@xstate.transition` - An actor transitioned. Carries every facet of the\n * transition with flat, always-present fields: `event`, `snapshot`,\n * `sourceRef`, `microsteps`, executed `actions`, and `sent`/scheduled\n * events.\n *\n * @example\n *\n * ```ts\n * import { createMachine } from 'xstate';\n *\n * const machine = createMachine({\n * // ...\n * });\n *\n * const actor = createActor(machine, {\n * inspect: (inspectionEvent) => {\n * if (inspectionEvent.actorRef === actor) {\n * // This event is for the root actor\n * }\n *\n * if (inspectionEvent.type === '@xstate.actor') {\n * console.log(inspectionEvent.actorRef, inspectionEvent.parentRef);\n * }\n *\n * if (inspectionEvent.type === '@xstate.transition') {\n * console.log(inspectionEvent.sourceRef);\n * console.log(inspectionEvent.actorRef);\n * console.log(inspectionEvent.event);\n * console.log(inspectionEvent.snapshot);\n * // flat, always-present facets — no narrowing required\n * console.log(inspectionEvent.actions);\n * console.log(inspectionEvent.sent);\n * console.log(inspectionEvent.microsteps);\n * }\n * }\n * });\n * ```\n *\n * Alternately, an observer object (`{ next?, error?, complete? }`) can be\n * provided:\n *\n * @example\n *\n * ```ts\n * const actor = createActor(machine, {\n * inspect: {\n * next: (inspectionEvent) => {\n * if (inspectionEvent.actorRef === actor) {\n * // This event is for the root actor\n * }\n *\n * if (inspectionEvent.type === '@xstate.actor') {\n * console.log(\n * inspectionEvent.actorRef,\n * inspectionEvent.parentRef\n * );\n * }\n *\n * if (inspectionEvent.type === '@xstate.transition') {\n * console.log(inspectionEvent.sourceRef);\n * console.log(inspectionEvent.actorRef);\n * console.log(inspectionEvent.event);\n * console.log(inspectionEvent.snapshot);\n * console.log(inspectionEvent.actions);\n * console.log(inspectionEvent.sent);\n * console.log(inspectionEvent.microsteps);\n * }\n * }\n * }\n * });\n * ```\n */\n inspect?:\n | Observer<InspectionEvent>\n | ((inspectionEvent: InspectionEvent) => void);\n}\n\nexport type AnyActor = ActorInstance<any, any, any, any>;\n\n/** @deprecated Use `AnyActor` instead. */\nexport type AnyInterpreter = AnyActor;\n\n// Based on RxJS types\nexport type Observer<T> = {\n next?: (value: T) => void;\n error?: (err: unknown) => void;\n complete?: () => void;\n};\n\nexport interface Subscription {\n unsubscribe(): void;\n}\n\nexport interface Readable<T> extends Subscribable<T> {\n get: () => T;\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\ntype EventDescriptorMatches<\n TEventType extends string,\n TNormalizedDescriptor\n> = TEventType extends TNormalizedDescriptor ? true : false;\n\nexport type ExtractEvent<\n TEvent extends EventObject,\n TDescriptor extends EventDescriptor<TEvent>\n> = string extends TEvent['type']\n ? TEvent\n : NormalizeDescriptor<TDescriptor> extends infer TNormalizedDescriptor\n ? TEvent extends any\n ? // true is the check type here to match both true and boolean\n true extends EventDescriptorMatches<\n TEvent['type'],\n TNormalizedDescriptor\n >\n ? TEvent\n : never\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\n/**\n * A consumer-facing actor handle.\n *\n * `ActorRef` describes the contract a consumer needs: which events can be sent\n * to the actor, which snapshot it publishes for observation, and which emitted\n * events can be listened to. It intentionally does not expose lifecycle control\n * or runtime internals. A concrete `Actor` satisfies this interface, so APIs\n * should accept `ActorRef` whenever they only need to send events, read\n * snapshots, or listen to emitted events.\n */\nexport interface ActorRef<\n TSnapshot extends Snapshot<unknown>,\n TEvent extends EventObject,\n TEmitted extends EventObject = EventObject,\n TSendEvent extends EventObject = TEvent\n> extends Subscribable<TSnapshot>,\n InteropObservable<TSnapshot> {\n send: (event: TSendEvent) => void;\n getSnapshot: () => TSnapshot;\n on: <TType extends TEmitted['type'] | '*'>(\n type: TType,\n handler: (\n emitted: TEmitted & (TType extends '*' ? unknown : { type: TType })\n ) => void\n ) => Subscription;\n}\n\n/**\n * Runtime-only actor capabilities.\n *\n * These members are needed by the interpreter, scheduler, inspection, and child\n * management code. Public consumer APIs should prefer `ActorRef` unless they\n * genuinely need lifecycle control such as starting, stopping, or accessing\n * system-owned runtime state.\n */\nexport interface ActorRuntime<\n TSnapshot extends Snapshot<unknown>,\n TEvent extends EventObject,\n _TEmitted extends EventObject = EventObject\n> {\n /** The unique identifier for this actor relative to its parent. */\n id: string;\n /**\n * The globally unique process ID for this invocation.\n *\n * @remarks\n * This is only defined once the actor is started.\n */\n sessionId: string | undefined;\n /** @internal */\n _send: (event: TEvent) => void;\n start: () => this;\n getPersistedSnapshot: () => Snapshot<unknown>;\n stop: () => void;\n toJSON?: () => any;\n _parent?: any;\n system: any;\n /** @internal */\n _processingStatus: ProcessingStatus;\n src: string | AnyActorLogic;\n trigger: any;\n select<TSelected>(\n selector: (snapshot: TSnapshot) => TSelected,\n equalityFn?: (a: TSelected, b: TSelected) => boolean\n ): Readable<TSelected>;\n}\n\n/**\n * A concrete actor instance type.\n *\n * `ActorInstance` combines the consumer `ActorRef` contract with runtime\n * lifecycle capabilities. Values returned by `createActor(...)` and\n * `spawn(...)` naturally satisfy narrower `ActorRef` contracts.\n */\nexport interface ActorInstance<\n TSnapshot extends Snapshot<unknown>,\n TEvent extends EventObject,\n TEmitted extends EventObject = EventObject,\n TSendEvent extends EventObject = TEvent\n> extends ActorRuntime<TSnapshot, TEvent, TEmitted>,\n ActorRef<TSnapshot, TEvent, TEmitted, TSendEvent> {}\n\n/**\n * The actor's own full self handle.\n *\n * Internals and action/guard implementations receive this shape because `self`\n * can participate in runtime-owned behavior while still being usable wherever\n * an `ActorRef` is expected.\n */\nexport type ActorSelf<\n TSnapshot extends Snapshot<unknown>,\n TEvent extends EventObject,\n TEmitted extends EventObject = EventObject,\n TSendEvent extends EventObject = TEvent\n> = ActorRuntime<TSnapshot, TEvent, TEmitted> &\n ActorRef<TSnapshot, TEvent, TEmitted, TSendEvent>;\n\n// TODO: in v6, this should only accept AnyActorLogic, like ActorRefFromLogic\nexport type ActorRefFrom<T> =\n T extends StateMachine<\n infer TContext,\n infer TEvent,\n infer TChildren,\n infer TStateValue,\n infer TTag,\n infer _TInput,\n infer TOutput,\n infer TEmitted,\n infer TMeta,\n infer TConfig,\n infer _TActionMap,\n infer _TActorMap,\n infer _TGuardMap,\n infer _TDelayMap\n >\n ? TConfig extends {\n internalEvents?: readonly EventDescriptor<TEvent>[];\n }\n ? ActorRef<\n MachineSnapshot<\n TContext,\n TEvent,\n TChildren,\n TStateValue,\n TTag,\n TOutput,\n TMeta,\n any //TStateSchema\n >,\n TEvent,\n TEmitted,\n ExcludeInternalEvents<\n TEvent,\n TConfig['internalEvents'] extends readonly EventDescriptor<TEvent>[]\n ? TConfig['internalEvents'] extends readonly (infer TDesc)[]\n ? Extract<TDesc, string>\n : never\n : never\n >\n >\n : ActorRef<\n MachineSnapshot<\n TContext,\n TEvent,\n TChildren,\n TStateValue,\n TTag,\n TOutput,\n TMeta,\n any //TStateSchema\n >,\n TEvent,\n TEmitted\n >\n : T extends Promise<infer U>\n ? ActorRefFrom<AsyncActorLogic<U>>\n : T extends ActorLogic<\n infer TSnapshot,\n infer TEvent,\n infer _TInput,\n infer _TSystem,\n infer TEmitted\n >\n ? ActorRef<TSnapshot, TEvent, TEmitted>\n : never;\n\nexport type SendableEventFromLogic<TLogic extends AnyActorLogic> =\n TLogic extends StateMachine<\n infer _TContext,\n infer TEvent,\n infer _TChildren,\n infer _TStateValue,\n infer _TTag,\n infer _TInput,\n infer _TOutput,\n infer _TEmitted,\n infer _TMeta,\n infer TConfig,\n infer _TActionMap,\n infer _TActorMap,\n infer _TGuardMap,\n infer _TDelayMap\n >\n ? TConfig extends {\n internalEvents?: readonly EventDescriptor<TEvent>[];\n }\n ? ExcludeInternalEvents<\n TEvent,\n TConfig['internalEvents'] extends readonly EventDescriptor<TEvent>[]\n ? TConfig['internalEvents'] extends readonly (infer TDesc)[]\n ? Extract<TDesc, string>\n : never\n : never\n >\n : TEvent\n : EventFromLogic<TLogic>;\n\ntype OpaqueMachineSnapshot<TSnapshot extends Snapshot<unknown>> =\n TSnapshot extends MachineSnapshot<\n infer TContext,\n infer TEvent,\n infer TChildren,\n infer TStateValue,\n infer TTag,\n infer TOutput,\n infer TMeta,\n infer _TStateSchema\n >\n ? MachineSnapshot<\n TContext,\n TEvent,\n TChildren,\n TStateValue,\n TTag,\n TOutput,\n TMeta,\n any\n >\n : TSnapshot;\n\nexport type ActorRefFromLogic<T extends AnyActorLogic> = ActorRef<\n OpaqueMachineSnapshot<SnapshotFrom<T>>,\n EventFromLogic<T>,\n EmittedFrom<T>,\n SendableEventFromLogic<T>\n>;\n\nexport type AnyActorRef = ActorRef<any, any, any, any>;\n\n/** The concrete actor instance type produced from actor logic. */\nexport type ActorFromLogic<T extends AnyActorLogic> = ActorInstance<\n SnapshotFrom<T>,\n EventFromLogic<T>,\n EmittedFrom<T>,\n SendableEventFromLogic<T>\n>;\n\ntype SendableEventFromActorRef<\n TActorRef,\n TFallback extends EventObject = AnyEventObject\n> = [NonNullable<TActorRef>] extends [never]\n ? TFallback\n : NonNullable<TActorRef> extends infer TNonNullableActorRef\n ? TNonNullableActorRef extends { send: (event: infer TEvent) => void }\n ? [TEvent] extends [never]\n ? TFallback\n : TEvent extends EventObject\n ? TEvent\n : TFallback\n : never\n : never;\n\nexport type ActorRefLike = Pick<AnyActor, 'sessionId' | 'send' | 'getSnapshot'>;\n\nexport type UnknownActorRef = ActorRef<Snapshot<unknown>, EventObject>;\n\n// TODO: in v6, this should only accept AnyActorLogic, like ActorRefFromLogic\nexport type DevToolsAdapter = (service: AnyActor) => void;\n\nexport type MachineImplementationsFrom<\n T extends AnyStateMachine | ((...args: any[]) => AnyStateMachine)\n> =\n T extends StateMachine<\n infer _TContext,\n infer _TEvent,\n infer _TChildren,\n infer _TStateValue,\n infer _TTag,\n infer _TInput,\n infer _TOutput,\n infer _TEmitted,\n infer _TMeta,\n infer _TConfig,\n infer TActionMap,\n infer TActorMap,\n infer TGuardMap,\n infer TDelayMap\n >\n ? {\n actions: TActionMap;\n actorSources: TActorMap;\n guards: TGuardMap;\n delays: TDelayMap;\n }\n : never;\n\nexport interface ActorScope<\n TSnapshot extends Snapshot<unknown>,\n TEvent extends EventObject,\n TSystem extends AnyActorSystem = AnyActorSystem,\n TEmitted extends EventObject = EventObject,\n TSendEvent extends EventObject = TEvent\n> {\n self: ActorSelf<TSnapshot, TEvent, TEmitted, TSendEvent>;\n id: string;\n sessionId: string;\n logger: (...args: any[]) => void;\n defer: (fn: () => void) => void;\n emit: (event: TEmitted) => void;\n system: TSystem;\n stopChild: (child: AnyActor) => void;\n actionExecutor: ActionExecutor;\n}\n\nexport type AnyActorScope = ActorScope<\n any, // TSnapshot\n any, // TEvent\n AnyActorSystem,\n any, // TEmitted\n any // TSendEvent\n>;\n\nexport type SnapshotStatus = 'active' | 'done' | 'error' | 'stopped';\n\nexport type Snapshot<TOutput> =\n | {\n status: 'active';\n output: undefined;\n error: undefined;\n }\n | {\n status: 'done';\n output: TOutput;\n error: undefined;\n }\n | {\n status: 'error';\n output: undefined;\n error: unknown;\n }\n | {\n status: 'stopped';\n output: undefined;\n error: undefined;\n };\n\nexport type ActorLogicTransitionResult<\n TSnapshot extends Snapshot<unknown>,\n TEffect = unknown\n> = [nextSnapshot: TSnapshot, effects: TEffect[]];\n\n/**\n * Represents logic which can be used by an actor.\n *\n * @template TSnapshot - The type of the snapshot.\n * @template TEvent - The type of the event object.\n * @template TInput - The type of the input.\n * @template TSystem - The type of the actor system.\n */\nexport interface ActorLogic<\n in out TSnapshot extends Snapshot<unknown>, // it's invariant because it's also part of `ActorScope[\"self\"][\"getSnapshot\"]`\n in out TEvent extends EventObject, // it's invariant because it's also part of `ActorScope[\"self\"][\"send\"]`\n in TInput = NonReducibleUnknown,\n TSystem extends AnyActorSystem = AnyActorSystem,\n in out TEmitted extends EventObject = EventObject // it's invariant because it's also aprt of `ActorScope[\"self\"][\"on\"]`\n> {\n /** The initial setup/configuration used to create the actor logic. */\n config?: unknown;\n /**\n * Transition function that processes the current state and an incoming event\n * to produce a new state and effects.\n *\n * @param snapshot - The current state.\n * @param event - The incoming event.\n * @param actorScope - The actor scope.\n * @returns A tuple of the next state and effects.\n */\n transition: (\n snapshot: TSnapshot,\n event: TEvent,\n actorScope: ActorScope<TSnapshot, TEvent, TSystem, TEmitted>\n ) => ActorLogicTransitionResult<TSnapshot>;\n /**\n * Transition function that produces the initial state and effects.\n *\n * @param actorScope - The actor scope.\n * @param input - The input for the initial state.\n * @returns A tuple of the initial state and effects.\n */\n initialTransition: (\n input: TInput,\n actorScope: ActorScope<TSnapshot, TEvent, TSystem, TEmitted>\n ) => ActorLogicTransitionResult<TSnapshot>;\n /**\n * Called to provide the initial state of the actor.\n *\n * @param actorScope - The actor scope.\n * @param input - The input for the initial state.\n * @returns The initial state.\n */\n getInitialSnapshot: (\n actorScope: ActorScope<TSnapshot, TEvent, TSystem, TEmitted>,\n input: TInput\n ) => TSnapshot;\n /**\n * Called when Actor is created to restore the internal state of the actor\n * given a persisted state. The persisted state can be created by\n * `getPersistedSnapshot`.\n *\n * @param persistedState - The persisted state to restore from.\n * @param actorScope - The actor scope.\n * @returns The restored state.\n */\n restoreSnapshot?: (\n persistedState: Snapshot<unknown>,\n actorScope: ActorScope<TSnapshot, TEvent, AnyActorSystem, TEmitted>\n ) => TSnapshot;\n /**\n * Called when the actor is started.\n *\n * @param snapshot - The starting state.\n * @param actorScope - The actor scope.\n */\n start?: (\n snapshot: TSnapshot,\n actorScope: ActorScope<TSnapshot, TEvent, AnyActorSystem, TEmitted>\n ) => void;\n /**\n * Obtains the internal state of the actor in a representation which can be be\n * persisted. The persisted state can be restored by `restoreSnapshot`.\n *\n * @param snapshot - The current state.\n * @returns The a representation of the internal state to be persisted.\n */\n getPersistedSnapshot: (\n snapshot: TSnapshot,\n options?: unknown\n ) => Snapshot<unknown>;\n}\n\nexport type AnyActorLogic = ActorLogic<\n any, // snapshot\n any, // event\n any, // input\n any, // system\n any // emitted\n>;\n\nexport type UnknownActorLogic = ActorLogic<\n any, // snapshot\n any, // event\n any, // input\n AnyActorSystem,\n any // emitted\n>;\n\nexport type SnapshotFrom<T> =\n ReturnTypeOrValue<T> extends infer R\n ? R extends ActorRef<infer TSnapshot, infer _, infer __>\n ? TSnapshot\n : R extends Actor<infer TLogic>\n ? SnapshotFrom<TLogic>\n : R extends ActorLogic<\n infer TSnapshot,\n infer _TEvent,\n infer _TInput,\n infer _TSystem,\n infer _TEmitted\n >\n ? TSnapshot\n : R extends ActorScope<\n infer TSnapshot,\n infer _TEvent,\n infer _TEmitted,\n infer _TSystem\n >\n ? TSnapshot\n : never\n : never;\n\nexport type EventFromLogic<TLogic extends AnyActorLogic> =\n TLogic extends ActorLogic<\n infer _TSnapshot,\n infer TEvent,\n infer _TInput,\n infer _TSystem,\n infer _TEmitted\n >\n ? TEvent\n : never;\n\nexport type EmittedFrom<TLogic extends AnyActorLogic> =\n TLogic extends ActorLogic<\n infer _TSnapshot,\n infer _TEvent,\n infer _TInput,\n infer _TSystem,\n infer TEmitted\n >\n ? TEmitted\n : never;\n\ntype ResolveEventType<T> = T extends infer R\n ? R extends StateMachine<\n infer _TContext,\n infer TEvent,\n infer _TChildren,\n infer _TStateValue,\n infer _TTag,\n infer _TInput,\n infer _TOutput,\n infer _TEmitted,\n infer _TMeta,\n infer _TConfig,\n infer _TActionMap,\n infer _TActorMap,\n infer _TGuardMap,\n infer _TDelayMap\n >\n ? TEvent\n : R extends MachineSnapshot<\n infer _TContext,\n infer TEvent,\n infer _TChildren,\n infer _TStateValue,\n infer _TTag,\n infer _TOutput,\n infer _TMeta,\n infer _TStateSchema\n >\n ? TEvent\n : R extends ActorRef<infer _TSnapshot, infer TEvent, infer _TEmitted>\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> =\n T extends StateMachine<\n infer TContext,\n infer _TEvent,\n infer _TChildren,\n infer _TStateValue,\n infer _TTag,\n infer _TInput,\n infer _TOutput,\n infer _TEmitted,\n infer _TMeta,\n infer _TConfig,\n infer _TActionMap,\n infer _TActorMap,\n infer _TGuardMap,\n infer _TDelayMap\n >\n ? TContext\n : T extends MachineSnapshot<\n infer TContext,\n infer _TEvent,\n infer _TChildren,\n infer _TStateValue,\n infer _TTag,\n infer _TOutput,\n infer _TMeta,\n infer _TStateSchema\n >\n ? TContext\n : T extends Actor<infer TActorLogic>\n ? TActorLogic extends AnyStateMachine\n ? ContextFrom<TActorLogic>\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 type SystemRegistry = Record<string, AnyActorLogic>;\n\nexport type RegistryKeyForLogic<\n TLogic extends AnyActorLogic,\n TSystemRegistry extends SystemRegistry\n> = string extends keyof TSystemRegistry\n ? string\n : Values<{\n [K in keyof TSystemRegistry &\n string]: ActorRefFromLogic<TLogic> extends ActorRefFromLogic<\n TSystemRegistry[K]\n >\n ? K\n : never;\n }>;\n\nexport type RequiredActorOptions<TActor extends ProvidedActor> =\n | (undefined extends TActor['id'] ? never : 'id')\n | (undefined extends InputFrom<TActor['logic']> ? never : 'input');\n\nexport type RequiredLogicInput<TLogic extends AnyActorLogic> =\n undefined extends InputFrom<TLogic> ? never : 'input';\n\ntype ExtractLiteralString<T extends string | undefined> = T extends string\n ? string extends T\n ? never\n : T\n : never;\n\ntype ToConcreteChildren<TActor extends ProvidedActor> = {\n [A in TActor as ExtractLiteralString<A['id']>]?: ActorFromLogic<A['logic']>;\n};\n\n// Actors that don't have literal string IDs — these are the only ones\n// that should appear in the index signature fallback, since actors with\n// literal IDs are already covered by ToConcreteChildren.\ntype NonConcreteActors<TActor extends ProvidedActor> = TActor extends any\n ? ExtractLiteralString<TActor['id']> extends never\n ? TActor\n : never\n : never;\n\nexport type ToChildren<TActor extends ProvidedActor> =\n // only proceed further if all configured `src`s are literal strings\n string extends TActor['src']\n ? // TODO: replace `AnyActorRef` with `UnknownActorRef`~\n // or maybe even `TActor[\"logic\"]` since it's possible to configure `{ src: string; logic: SomeConcreteLogic }`\n // TODO: consider adding `| undefined` here\n Record<string, AnyActor>\n : Compute<\n ToConcreteChildren<TActor> &\n {\n include: {\n [id: string]: NonConcreteActors<TActor> extends never\n ? AnyActor | undefined\n : NonConcreteActors<TActor> extends any\n ?\n | ActorFromLogic<NonConcreteActors<TActor>['logic']>\n | undefined\n : never;\n };\n exclude: unknown;\n }[NonConcreteActors<TActor> extends never ? 'exclude' : 'include']\n >;\n\nexport type StateSchema = {\n id?: string;\n route?: unknown;\n states?: Record<string, StateSchema>;\n contextSchema?: StandardSchemaV1;\n input?: unknown;\n\n // Other types\n // Needed because TS treats objects with all optional properties as a \"weak\" object\n // https://github.com/statelyai/xstate/issues/5031\n type?: unknown;\n invoke?: unknown;\n on?: unknown;\n entry?: unknown;\n exit?: unknown;\n onDone?: unknown;\n after?: unknown;\n always?: unknown;\n choice?: unknown;\n meta?: unknown;\n output?: unknown;\n tags?: unknown;\n description?: unknown;\n};\n\nexport type StateSchemaFrom<T extends AnyStateMachine> =\n T extends StateMachine<\n infer _TContext,\n infer _TEvent,\n infer _TChildren,\n infer _TStateValue,\n infer _TTag,\n infer _TInput,\n infer _TOutput,\n infer _TEmitted,\n infer _TMeta,\n infer TStateSchema,\n infer _TActionMap,\n infer _TActorMap,\n infer _TGuardMap,\n infer _TDelayMap\n >\n ? TStateSchema\n : never;\n\nexport type StateId<\n TSchema extends StateSchema,\n TKey extends string = '(machine)',\n TParentKey extends string | null = null\n> =\n | (TSchema extends { id: string }\n ? TSchema['id']\n : TParentKey extends null\n ? TKey\n : `${TParentKey}.${TKey}`)\n | (TSchema['states'] extends Record<string, any>\n ? Values<{\n [K in keyof TSchema['states'] & string]: StateId<\n TSchema['states'][K],\n K,\n TParentKey extends string\n ? `${TParentKey}.${TKey}`\n : TSchema['id'] extends string\n ? TSchema['id']\n : TKey\n >;\n }>\n : never);\n\n/** Maps state IDs to their input types based on the StateSchema. */\nexport type StateIdInputs<\n TSchema extends StateSchema,\n TKey extends string = '(machine)',\n TParentKey extends string | null = null\n> = {\n [K in TSchema extends { id: string }\n ? TSchema['id']\n : TParentKey extends null\n ? TKey\n : `${TParentKey}.${TKey}`]: TSchema['input'] extends undefined\n ? undefined\n : TSchema['input'];\n} & (TSchema['states'] extends Record<string, StateSchema>\n ? UnionToIntersection<\n Values<{\n [K in keyof TSchema['states'] & string]: StateIdInputs<\n TSchema['states'][K],\n K,\n TParentKey extends string\n ? `${TParentKey}.${TKey}`\n : TSchema['id'] extends string\n ? TSchema['id']\n : TKey\n >;\n }>\n >\n : {});\n\ntype UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (\n k: infer I\n) => void\n ? I\n : never;\n\ntype ContextFromStateSchema<\n TSchema extends StateSchema,\n TFallbackContext extends MachineContext\n> = TSchema['contextSchema'] extends StandardSchemaV1\n ? StandardSchemaV1.InferOutput<TSchema['contextSchema']> & MachineContext\n : TFallbackContext;\n\ntype ContextFromChildStateValue<\n TChildSchema extends StateSchema,\n TFallbackContext extends MachineContext,\n TChildValue\n> = ContextFromStateSchema<TChildSchema, TFallbackContext> &\n StateContextFromStateValue<\n TChildSchema,\n ContextFromStateSchema<TChildSchema, TFallbackContext>,\n TChildValue\n >;\n\nexport type StateContextFromStateValue<\n TSchema extends StateSchema,\n TFallbackContext extends MachineContext,\n TStateValue\n> = (TSchema['states'] extends Record<string, StateSchema>\n ? TStateValue extends keyof TSchema['states'] & string\n ? ContextFromStateSchema<TSchema['states'][TStateValue], TFallbackContext>\n : TStateValue extends Record<string, unknown>\n ? UnionToIntersection<\n Values<{\n [K in keyof TStateValue &\n keyof TSchema['states'] &\n string]: ContextFromChildStateValue<\n TSchema['states'][K],\n TFallbackContext,\n NonNullable<TStateValue[K]>\n >;\n }>\n >\n : TFallbackContext\n : TFallbackContext) &\n MachineContext;\n\nexport type RoutableStateId<TSchema extends StateSchema> =\n | (TSchema extends { route: any; id: string } ? `#${TSchema['id']}` : never)\n | (TSchema['states'] extends Record<string, any>\n ? Values<{\n [K in keyof TSchema['states'] & string]: RoutableStateId<\n TSchema['states'][K]\n >;\n }>\n : never);\n\nexport interface StateMachineTypes {\n context: MachineContext;\n events: EventObject;\n actorSources: ProvidedActor;\n actions: ParameterizedObject;\n guards: ParameterizedObject;\n delays: string;\n tags: string;\n emitted: EventObject;\n}\n\n/** @deprecated */\nexport interface ResolvedStateMachineTypes<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TActor extends ProvidedActor,\n TAction extends ParameterizedObject,\n TGuard extends ParameterizedObject,\n TDelay extends string,\n TTag extends string,\n TEmitted extends EventObject = EventObject\n> {\n context: TContext;\n events: TEvent;\n actorSources: TActor;\n actions: TAction;\n guards: TGuard;\n delays: TDelay;\n tags: TTag;\n emitted: TEmitted;\n}\n\nexport type GetConcreteByKey<\n T,\n TKey extends keyof T,\n TValue extends T[TKey]\n> = T & Record<TKey, TValue>;\n\ntype _GroupStateKeys<\n T extends StateSchema,\n S extends keyof T['states']\n> = S extends any\n ? T['states'][S] extends { type: 'history' }\n ? [never, never]\n : T extends { type: 'parallel' }\n ? [S, never]\n : 'states' extends keyof T['states'][S]\n ? [S, never]\n : [never, S]\n : never;\n\ntype GroupStateKeys<T extends StateSchema, S extends keyof T['states']> = {\n nonLeaf: _GroupStateKeys<T, S & string>[0];\n leaf: _GroupStateKeys<T, S & string>[1];\n};\n\nexport type ToStateValue<T extends StateSchema> = T extends {\n states: Record<infer S, any>;\n}\n ? IsNever<S> extends true\n ? {}\n :\n | GroupStateKeys<T, S>['leaf']\n | (IsNever<GroupStateKeys<T, S>['nonLeaf']> extends false\n ? T extends { type: 'parallel' }\n ? {\n [K in GroupStateKeys<T, S>['nonLeaf']]: ToStateValue<\n T['states'][K]\n >;\n }\n : Compute<\n Values<{\n [K in GroupStateKeys<T, S>['nonLeaf']]: {\n [StateKey in K]: ToStateValue<T['states'][K]>;\n };\n }>\n >\n : never)\n : {};\n\nexport interface BaseExecutableActionObject {\n params: NonReducibleUnknown;\n args: unknown[];\n exec: (() => void) | undefined;\n}\n\nexport interface CustomExecutableActionObject<\n TType extends string = string & {}\n> extends BaseExecutableActionObject {\n type: TType;\n}\n\nexport interface StartExecutableActionObject\n extends BaseExecutableActionObject {\n type: '@xstate.start';\n actor: AnyActor;\n id: string;\n logic: AnyActorLogic;\n src: string | AnyActorLogic;\n input: unknown;\n args: Parameters<(typeof builtInActions)['@xstate.start']>;\n}\n\nexport interface RaiseExecutableActionObject\n extends BaseExecutableActionObject {\n type: '@xstate.raise';\n event: EventObject;\n id: string | undefined;\n delay: number | undefined;\n args: Parameters<(typeof builtInActions)['@xstate.raise']>;\n}\n\nexport interface SendToExecutableActionObject\n extends BaseExecutableActionObject {\n type: '@xstate.sendTo';\n target: AnyActor;\n event: EventObject;\n id: string | undefined;\n delay: number | undefined;\n args: Parameters<(typeof builtInActions)['@xstate.sendTo']>;\n}\n\nexport interface CancelExecutableActionObject\n extends BaseExecutableActionObject {\n type: '@xstate.cancel';\n id: string;\n args: Parameters<(typeof builtInActions)['@xstate.cancel']>;\n}\n\nexport interface StopExecutableActionObject extends BaseExecutableActionObject {\n type: '@xstate.stop';\n actor: AnyActor;\n args: Parameters<(typeof builtInActions)['@xstate.stop']>;\n}\n\nexport type BuiltInExecutableActionObject = Values<{\n '@xstate.start': StartExecutableActionObject;\n '@xstate.raise': RaiseExecutableActionObject;\n '@xstate.sendTo': SendToExecutableActionObject;\n '@xstate.cancel': CancelExecutableActionObject;\n '@xstate.stop': StopExecutableActionObject;\n}>;\n\nexport type SpecialExecutableAction = BuiltInExecutableActionObject;\n\ntype TransitionExecutableActionObject<TType extends string = never> =\n | BuiltInExecutableActionObject\n | CustomExecutableActionObject<TType | (string & {})>;\n\ntype KnownImplementationKeys<TImplementationMap> =\n string extends keyof TImplementationMap\n ? never\n : Extract<keyof TImplementationMap, string>;\n\nexport type ExecutableActionObjectFromLogic<T extends AnyActorLogic> =\n T extends StateMachine<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n infer TActionMap,\n any,\n any,\n any\n >\n ? TransitionExecutableActionObject<KnownImplementationKeys<TActionMap>>\n : ExecutableActionObject;\n\nexport type ExecutableActionObject<TType extends string = string & {}> =\n | BuiltInExecutableActionObject\n | CustomExecutableActionObject<TType>;\n\nexport interface ToExecutableAction<T extends ParameterizedObject>\n extends CustomExecutableActionObject<T['type']> {\n type: T['type'];\n params: T['params'];\n exec: undefined;\n}\n\nexport type ActionExecutor = (actionToExecute: ExecutableActionObject) => void;\n\n/** Mappers for subscribeTo - maps lifecycle events to machine events */\nexport interface SubscribeToMappers<\n TSnapshot extends Snapshot<unknown>,\n TOutput,\n TMappedEvent extends EventObject\n> {\n snapshot?: (snapshot: TSnapshot) => TMappedEvent;\n done?: (output: TOutput) => TMappedEvent;\n error?: (error: unknown) => TMappedEvent;\n}\n\nexport type EnqueueObject<\n TEvent extends EventObject,\n TEmittedEvent extends EventObject,\n TSystemRegistry extends SystemRegistry = SystemRegistry\n> = {\n cancel: (id: string) => void;\n raise: (ev: TEvent, options?: { id?: string; delay?: number }) => void;\n spawn: <T extends AnyActorLogic>(\n logic: T,\n options?: {\n input?: InputFrom<T>;\n id?: string;\n syncSnapshot?: boolean;\n registryKey?: RegistryKeyForLogic<T, TSystemRegistry>;\n }\n ) => ActorFromLogic<T>;\n emit: (emittedEvent: TEmittedEvent) => void;\n <T extends (...args: any[]) => any>(fn: T, ...args: Parameters<T>): void;\n log: (...args: any[]) => void;\n sendTo: <TActorRef extends { send: (...args: any[]) => void } | undefined>(\n actorRef: TActorRef,\n event: SendableEventFromActorRef<NoInfer<TActorRef>>,\n options?: { id?: string; delay?: number }\n ) => void;\n stop: (actor?: AnyActor) => void;\n /**\n * Listen to emitted events from an actor. Returns a listener actor that can\n * be stopped via `enq.stop()`.\n *\n * @param actor - The actor to listen to\n * @param eventType - The emitted event type to listen for (supports\n * wildcards: 'event._', '_')\n * @param mapper - Function to transform emitted events into machine events\n */\n listen: <TEmitted extends EventObject, TMappedEvent extends TEvent>(\n actor: AnyActor,\n eventType: string,\n mapper: (event: TEmitted) => TMappedEvent\n ) => AnyActor;\n /**\n * Subscribe to lifecycle events (done/error/snapshot) from an actor. Returns\n * a subscription actor that can be stopped via `enq.stop()`.\n *\n * @param actor - The actor to subscribe to\n * @param mappers - Object with done/error/snapshot mappers, or a single\n * snapshot mapper function\n */\n subscribeTo: {\n <TSnapshot extends Snapshot<unknown>, TOutput, TMappedEvent extends TEvent>(\n actor: AnyActor,\n mappers:\n | SubscribeToMappers<TSnapshot, TOutput, TMappedEvent>\n | ((snapshot: TSnapshot) => TMappedEvent)\n ): AnyActor;\n };\n};\n\nexport type Action<\n TContext extends MachineContext,\n TEvent extends EventObject,\n TEmittedEvent extends EventObject,\n TActionMap extends Implementations['actions'],\n TActorMap extends Implementations['actorSources'],\n TGuardMap extends Implementations['guards'],\n TDelayMap extends Implementations['delays'],\n TParams = Record<string, unknown> | undefined,\n _TCtx = [TContext] extends [never] ? any : TContext\n> = (\n _: {\n context: _TCtx;\n event: TEvent;\n parent: AnyActorRef | undefined;\n self: ActorSelf<\n MachineSnapshot<\n _TCtx & MachineContext,\n TEvent,\n TODO,\n TODO,\n TODO,\n TODO,\n TODO,\n TODO\n >,\n TEvent\n >;\n children: Record<string, AnyActor | undefined>;\n actions: TActionMap;\n actorSources: TActorMap;\n guards: TGuardMap;\n delays: TDelayMap;\n system?: AnyActorSystem;\n params: TParams;\n },\n enqueue: EnqueueObject<TEvent, TEmittedEvent>\n) => {\n context?: Partial<_TCtx>;\n children?: Record<string, AnyActor | undefined>;\n} | void;\n\nexport type AnyAction =\n | Action<\n MachineContext,\n EventObject,\n EventObject,\n Implementations['actions'],\n Implementations['actorSources'],\n Implementations['guards'],\n Implementations['delays']\n >\n | { action: (...args: any[]) => any; args: any[] }\n | AnyEventObject;\n","import isDevelopment from '#is-development';\nimport { AnyActorRef, SnapshotFrom, Subscription } from './types.ts';\n\ninterface WaitForOptions {\n /**\n * How long to wait before rejecting, if no emitted state satisfies the\n * predicate.\n *\n * @defaultValue Infinity\n */\n timeout: number;\n\n /** A signal which stops waiting when aborted. */\n signal?: AbortSignal;\n}\n\nconst defaultWaitForOptions: WaitForOptions = {\n timeout: Infinity // much more than 10 seconds\n};\n\n/**\n * Subscribes to an actor ref and waits for its emitted value to satisfy a\n * predicate, and then resolves with that value. Will throw if the desired state\n * is not reached after an optional timeout. (defaults to Infinity).\n *\n * @example\n *\n * ```js\n * const state = await waitFor(someService, (state) => {\n * return state.hasTag('loaded');\n * });\n *\n * state.hasTag('loaded'); // true\n * ```\n *\n * @param actorRef The actor ref to subscribe to\n * @param predicate Determines if a value matches the condition to wait for\n * @param options\n * @returns A promise that eventually resolves to the emitted value that matches\n * the condition\n */\nexport function waitFor<TActorRef extends AnyActorRef>(\n actorRef: TActorRef,\n predicate: (emitted: SnapshotFrom<TActorRef>) => boolean,\n options?: Partial<WaitForOptions>\n): Promise<SnapshotFrom<TActorRef>> {\n const resolvedOptions: WaitForOptions = {\n ...defaultWaitForOptions,\n ...options\n };\n return new Promise((res, rej) => {\n const { signal } = resolvedOptions;\n if (signal?.aborted) {\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n rej(signal.reason);\n return;\n }\n let done = false;\n if (isDevelopment && resolvedOptions.timeout < 0) {\n console.error(\n '`timeout` passed to `waitFor` is negative and it will reject its internal promise immediately.'\n );\n }\n const handle =\n resolvedOptions.timeout === Infinity\n ? undefined\n : setTimeout(() => {\n dispose();\n rej(new Error(`Timeout of ${resolvedOptions.timeout} ms exceeded`));\n }, resolvedOptions.timeout);\n\n const dispose = () => {\n clearTimeout(handle);\n done = true;\n sub?.unsubscribe();\n if (abortListener) {\n signal!.removeEventListener('abort', abortListener);\n }\n };\n\n function checkEmitted(emitted: SnapshotFrom<TActorRef>) {\n if (predicate(emitted)) {\n dispose();\n res(emitted);\n }\n }\n\n /**\n * If the `signal` option is provided, this will be the listener for its\n * `abort` event\n */\n let abortListener: () => void | undefined;\n // eslint-disable-next-line prefer-const\n let sub: Subscription | undefined; // avoid TDZ when disposing synchronously\n\n // See if the current snapshot already matches the predicate\n checkEmitted(actorRef.getSnapshot());\n if (done) {\n return;\n }\n\n // only define the `abortListener` if the `signal` option is provided\n if (signal) {\n abortListener = () => {\n dispose();\n // XState does not \"own\" the signal, so we should reject with its reason (if any)\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n rej(signal.reason);\n };\n signal.addEventListener('abort', abortListener);\n }\n\n sub = actorRef.subscribe({\n next: checkEmitted,\n error: (err) => {\n dispose();\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n rej(err);\n },\n complete: () => {\n dispose();\n rej(new Error(`Actor terminated without satisfying predicate`));\n }\n });\n if (done) {\n sub.unsubscribe();\n }\n });\n}\n","import { Clock } from './system.ts';\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging\nexport interface SimulatedClock extends Clock {\n start(speed: number): void;\n increment(ms: number): void;\n set(ms: number): void;\n}\n\ninterface SimulatedTimeout {\n start: number;\n timeout: number;\n fn: (...args: any[]) => void;\n}\n// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging\nexport class SimulatedClock implements SimulatedClock {\n private timeouts: Map<number, SimulatedTimeout> = new Map();\n private _now: number = 0;\n private _id: number = 0;\n private _flushing = false;\n private _flushingInvalidated = false;\n\n public now() {\n return this._now;\n }\n private getId() {\n return this._id++;\n }\n public setTimeout(fn: (...args: any[]) => void, timeout: number) {\n this._flushingInvalidated = this._flushing;\n const id = this.getId();\n this.timeouts.set(id, {\n start: this.now(),\n timeout,\n fn\n });\n return id;\n }\n public clearTimeout(id: number) {\n this._flushingInvalidated = this._flushing;\n this.timeouts.delete(id);\n }\n public set(time: number) {\n if (this._now > time) {\n throw new Error('Unable to travel back in time');\n }\n\n this._now = time;\n this.flushTimeouts();\n }\n private flushTimeouts() {\n if (this._flushing) {\n this._flushingInvalidated = true;\n return;\n }\n this._flushing = true;\n\n const sorted = [...this.timeouts].sort(\n ([_idA, timeoutA], [_idB, timeoutB]) => {\n const endA = timeoutA.start + timeoutA.timeout;\n const endB = timeoutB.start + timeoutB.timeout;\n return endB > endA ? -1 : 1;\n }\n );\n\n for (const [id, timeout] of sorted) {\n if (this._flushingInvalidated) {\n this._flushingInvalidated = false;\n this._flushing = false;\n this.flushTimeouts();\n return;\n }\n if (this.now() - timeout.start >= timeout.timeout) {\n this.timeouts.delete(id);\n timeout.fn.call(null);\n }\n }\n\n this._flushing = false;\n // Check if new timeouts were added during the last iteration\n if (this._flushingInvalidated) {\n this._flushingInvalidated = false;\n this.flushTimeouts();\n }\n }\n public increment(ms: number): void {\n this._now += ms;\n this.flushTimeouts();\n }\n}\n","import { EventDescriptor, EventObject, ExtractEvent } from './types.ts';\nimport { matchesEventDescriptor, toArray } from './utils.ts';\n\n/**\n * Asserts that the given event object is of the specified type or types. Throws\n * an error if the event object is not of the specified types.\n *\n * @example\n *\n * ```ts\n * // ...\n * entry: ({ event }) => {\n * assertEvent(event, 'doNothing');\n * // event is { type: 'doNothing' }\n * },\n * // ...\n * exit: ({ event }) => {\n * assertEvent(event, 'greet');\n * // event is { type: 'greet'; message: string }\n *\n * assertEvent(event, ['greet', 'notify']);\n * // event is { type: 'greet'; message: string }\n * // or { type: 'notify'; message: string; level: 'info' | 'error' }\n * },\n * ```\n */\nexport function assertEvent<\n TEvent extends EventObject,\n TAssertedDescriptor extends EventDescriptor<TEvent>\n>(\n event: TEvent,\n type: TAssertedDescriptor | readonly TAssertedDescriptor[]\n): asserts event is ExtractEvent<TEvent, TAssertedDescriptor> {\n const types = toArray(type);\n\n const matches = types.some((descriptor) =>\n matchesEventDescriptor(event.type, descriptor as string)\n );\n\n if (!matches) {\n const typesText =\n types.length === 1\n ? `type matching \"${types[0]}\"`\n : `one of types matching \"${types.join('\", \"')}\"`;\n throw new Error(\n `Expected event ${JSON.stringify(event)} to have ${typesText}`\n );\n }\n}\n","import { createInitEvent } from './eventUtils';\nimport { createInertActorScope } from './getNextSnapshot';\nimport {\n getProperAncestors,\n initialMicrostep,\n isAtomicStateNode,\n macrostep\n} from './stateUtils';\nimport {\n AnyActorLogic,\n AnyEventObject,\n AnyStateMachine,\n EventFromLogic,\n InputFrom,\n SnapshotFrom,\n ExecutableActionObjectFromLogic,\n AnyTransitionDefinition,\n AnyMachineSnapshot\n} from './types';\n\n/**\n * Given actor `logic`, a `snapshot`, and an `event`, returns a tuple of the\n * `nextSnapshot` and `actions` to execute.\n *\n * This is a pure function that does not execute `actions`.\n */\nexport function transition<T extends AnyActorLogic>(\n logic: T,\n snapshot: SnapshotFrom<T>,\n event: EventFromLogic<T>\n): [\n nextSnapshot: SnapshotFrom<T>,\n actions: ExecutableActionObjectFromLogic<T>[]\n] {\n const actorScope = createInertActorScope(logic);\n const [nextSnapshot, effects] = logic.transition(snapshot, event, actorScope);\n\n return [nextSnapshot, effects as ExecutableActionObjectFromLogic<T>[]];\n}\n\n/**\n * Given actor `logic` and optional `input`, returns a tuple of the\n * `nextSnapshot` and `actions` to execute from the initial transition (no\n * previous state).\n *\n * This is a pure function that does not execute `actions`.\n */\nexport function initialTransition<T extends AnyActorLogic>(\n logic: T,\n ...[input]: undefined extends InputFrom<T>\n ? [input?: InputFrom<T>]\n : [input: InputFrom<T>]\n): [SnapshotFrom<T>, ExecutableActionObjectFromLogic<T>[]] {\n const actorScope = createInertActorScope(logic);\n\n const [nextSnapshot, executableActions] = logic.initialTransition(\n input,\n actorScope\n );\n\n return [\n nextSnapshot,\n executableActions as ExecutableActionObjectFromLogic<T>[]\n ];\n}\n\n/**\n * Given a state `machine`, a `snapshot`, and an `event`, returns an array of\n * microsteps, where each microstep is a tuple of `[snapshot, actions]`.\n *\n * This is a pure function that does not execute `actions`.\n */\nexport function getMicrosteps<T extends AnyStateMachine>(\n machine: T,\n snapshot: SnapshotFrom<T>,\n event: EventFromLogic<T>\n): Array<[SnapshotFrom<T>, ExecutableActionObjectFromLogic<T>[]]> {\n const actorScope = createInertActorScope(machine);\n\n const { microsteps } = macrostep(snapshot, event, actorScope, []);\n\n return microsteps as Array<\n [SnapshotFrom<T>, ExecutableActionObjectFromLogic<T>[]]\n >;\n}\n\n/**\n * Given a state `machine` and optional `input`, returns an array of microsteps\n * from the initial transition, where each microstep is a tuple of `[snapshot,\n * actions]`.\n *\n * This is a pure function that does not execute `actions`.\n */\nexport function getInitialMicrosteps<T extends AnyStateMachine>(\n machine: T,\n ...[input]: undefined extends InputFrom<T>\n ? [input?: InputFrom<T>]\n : [input: InputFrom<T>]\n): Array<[SnapshotFrom<T>, ExecutableActionObjectFromLogic<T>[]]> {\n const actorScope = createInertActorScope(machine);\n const initEvent = createInitEvent(input);\n const internalQueue: AnyEventObject[] = [];\n\n const preInitialSnapshot = machine._getPreInitialState(actorScope, initEvent);\n\n const first = initialMicrostep(\n machine.root,\n preInitialSnapshot,\n actorScope,\n initEvent,\n internalQueue\n );\n\n const { microsteps } = macrostep(\n first[0],\n initEvent,\n actorScope,\n internalQueue\n );\n\n return [first, ...microsteps] as Array<\n [SnapshotFrom<T>, ExecutableActionObjectFromLogic<T>[]]\n >;\n}\n\n/**\n * Gets all potential next transitions from the current state.\n *\n * Returns all transitions that are available from the current state, including:\n *\n * - All transitions from atomic states (leaf states in the current state\n * configuration)\n * - All transitions from ancestor states (parent states that may handle events)\n * - All guarded transitions (regardless of whether their guards would pass)\n * - Always (eventless) transitions\n * - After (delayed) transitions\n *\n * The order of transitions is deterministic:\n *\n * 1. Atomic states are processed in document order\n * 2. For each atomic state, transitions are collected from the state itself first,\n * then its ancestors\n * 3. Within each state node, transitions are in the order they appear in the state\n * definition\n *\n * @param state - The current machine snapshot\n * @returns Array of transition definitions from the current state, in\n * deterministic order\n */\nexport function getNextTransitions(\n state: AnyMachineSnapshot\n): AnyTransitionDefinition[] {\n const potentialTransitions: AnyTransitionDefinition[] = [];\n const atomicStates = state._nodes.filter(isAtomicStateNode);\n const visited = new Set();\n\n // Collect all transitions from atomic states and their ancestors\n // Process atomic states in document order (as they appear in state._nodes)\n for (const stateNode of atomicStates) {\n // For each atomic state, process the state itself first, then its ancestors\n // This ensures child state transitions come before parent state transitions\n for (const s of [stateNode].concat(\n getProperAncestors(stateNode, undefined)\n )) {\n if (visited.has(s.id)) {\n continue;\n }\n visited.add(s.id);\n\n // Get all transitions for each event type\n // Include ALL transitions, even if the same event type appears in multiple state nodes\n // This is important for guarded transitions - all are \"potential\" regardless of guard evaluation\n for (const [, transitions] of s.transitions.entries()) {\n potentialTransitions.push(...transitions);\n }\n\n // Also include always (eventless) transitions\n if (s.always) {\n potentialTransitions.push(...s.always);\n }\n }\n }\n\n return potentialTransitions;\n}\n","/** The Standard Schema interface. */\nexport interface StandardSchemaV1<Input = unknown, Output = Input> {\n /** The Standard Schema properties. */\n readonly '~standard': StandardSchemaV1.Props<Input, Output>;\n}\n\n/** A type-only Standard Schema produced by {@link types}. */\nexport interface TypeSchema<T> extends StandardSchemaV1<T, T> {\n readonly '~standard': StandardSchemaV1.Props<T, T> & {\n readonly vendor: 'xstate.types';\n };\n}\n\n/**\n * Declares schema types for inference only — no runtime validation.\n *\n * Use in a machine's `schemas` when you want TypeScript types without pulling\n * in a schema library like Zod. The returned value is a valid Standard Schema\n * whose validation is the identity function, so it carries types but never\n * rejects input.\n *\n * @example\n *\n * ```ts\n * import { createMachine, types } from 'xstate';\n *\n * const machine = createMachine({\n * schemas: {\n * context: types<{ count: number }>(),\n * events: {\n * inc: types<{ by: number }>(),\n * reset: types<{}>()\n * }\n * },\n * context: { count: 0 }\n * // ...\n * });\n * ```\n */\nexport function types<T>(): TypeSchema<T> {\n return {\n '~standard': {\n version: 1,\n vendor: 'xstate.types',\n validate: (value) => ({ value: value as T })\n }\n };\n}\n\n/** Returns true if the value is a type-only schema created by {@link types}. */\nexport function isTypeSchema(value: unknown): value is TypeSchema<unknown> {\n return (\n !!value &&\n typeof value === 'object' &&\n '~standard' in value &&\n (value as StandardSchemaV1)['~standard'].vendor === 'xstate.types'\n );\n}\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport declare namespace StandardSchemaV1 {\n /** The Standard Schema properties interface. */\n export interface Props<Input = unknown, Output = Input> {\n /** The version number of the standard. */\n readonly version: 1;\n /** The vendor name of the schema library. */\n readonly vendor: string;\n /** Validates unknown input values. */\n readonly validate: (\n value: unknown\n ) => Result<Output> | Promise<Result<Output>>;\n /** Inferred types associated with the schema. */\n readonly types?: Types<Input, Output> | undefined;\n }\n\n /** The result interface of the validate function. */\n export type Result<Output> = SuccessResult<Output> | FailureResult;\n\n /** The result interface if validation succeeds. */\n export interface SuccessResult<Output> {\n /** The typed output value. */\n readonly value: Output;\n /** The non-existent issues. */\n readonly issues?: undefined;\n }\n\n /** The result interface if validation fails. */\n export interface FailureResult {\n /** The issues of failed validation. */\n readonly issues: ReadonlyArray<Issue>;\n }\n\n /** The issue interface of the failure output. */\n export interface Issue {\n /** The error message of the issue. */\n readonly message: string;\n /** The path of the issue, if any. */\n readonly path?: ReadonlyArray<PropertyKey | PathSegment> | undefined;\n }\n\n /** The path segment interface of the issue. */\n export interface PathSegment {\n /** The key representing a path segment. */\n readonly key: PropertyKey;\n }\n\n /** The Standard Schema types interface. */\n export interface Types<Input = unknown, Output = Input> {\n /** The input type of the schema. */\n readonly input: Input;\n /** The output type of the schema. */\n readonly output: Output;\n }\n\n /** Infers the input type of a Standard Schema. */\n export type InferInput<Schema extends StandardSchemaV1> = NonNullable<\n Schema['~standard']['types']\n >['input'];\n\n /** Infers the output type of a Standard Schema. */\n export type InferOutput<Schema extends StandardSchemaV1> = NonNullable<\n Schema['~standard']['types']\n >['output'];\n}\n","import { MachineSnapshot } from './State.ts';\nimport { isAtomicStateNode } from './stateUtils.ts';\nimport { AnyMachineSnapshot, AnyStateNode, StateSchema } from './types.ts';\n\ntype StateSchemaFromSnapshot<TSnapshot extends AnyMachineSnapshot> =\n TSnapshot extends MachineSnapshot<\n infer _TContext,\n infer _TEvent,\n infer _TChildren,\n infer _TStateValue,\n infer _TTag,\n infer _TOutput,\n infer _TMeta,\n infer TStateSchema extends StateSchema\n >\n ? TStateSchema\n : StateSchema;\n\n/**\n * A mapper object that defines how to transform a snapshot based on its state.\n * Can be nested to match the state hierarchy of the machine.\n */\ntype StateSchemaMapper<\n TSnapshot extends AnyMachineSnapshot,\n T extends StateSchema,\n TResult\n> = {\n /** Maps the snapshot to a value when this state is active. */\n map?: (snapshot: TSnapshot) => TResult;\n /** Nested mappers for child states. */\n states?: {\n [K in keyof T['states']]?: T['states'][K] extends StateSchema\n ? StateSchemaMapper<TSnapshot, T['states'][K], TResult>\n : never;\n };\n};\n\n/**\n * Maps a machine snapshot to an array of result objects based on active states.\n *\n * Traverses all active state nodes (from atomic/leaf states up to root) and\n * collects results from matching `map` functions in the mapper object. Results\n * are ordered leaf-to-root (most specific state first).\n */\nexport function mapState<T extends AnyMachineSnapshot, TResult>(\n snapshot: T,\n mapper: StateSchemaMapper<T, StateSchemaFromSnapshot<T>, TResult>\n): { stateNode: AnyStateNode; result: TResult }[] {\n const results: { stateNode: AnyStateNode; result: TResult }[] = [];\n\n const findMapper = (\n currentMapper: StateSchemaMapper<T, StateSchemaFromSnapshot<T>, TResult>,\n nodePath: string[]\n ): StateSchemaMapper<T, any, TResult> | undefined => {\n let mapper: StateSchemaMapper<T, any, TResult> | undefined = currentMapper;\n\n for (const key of nodePath) {\n if (!mapper?.states) {\n return undefined;\n }\n const states = mapper.states as Record<\n string,\n StateSchemaMapper<T, any, TResult>\n >;\n if (!(key in states)) {\n return undefined;\n }\n mapper = states[key];\n }\n\n return mapper;\n };\n\n const visited = new Set<AnyStateNode>();\n\n for (const atomicNode of snapshot._nodes.filter(isAtomicStateNode)) {\n let current: AnyStateNode | undefined = atomicNode;\n while (current && !visited.has(current)) {\n visited.add(current);\n\n const nodeMapper = findMapper(mapper, current.path);\n if (nodeMapper?.map) {\n results.push({ stateNode: current, result: nodeMapper.map(snapshot) });\n }\n\n current = current.parent;\n }\n }\n\n return results;\n}\n","import { AnyActorRef, OutputFrom } from './types.ts';\n\n/**\n * Returns a promise that resolves to the `output` of the actor when it is done.\n *\n * @example\n *\n * ```ts\n * const machine = createMachine({\n * // ...\n * output: {\n * count: 42\n * }\n * });\n *\n * const actor = createActor(machine);\n *\n * actor.start();\n *\n * const output = await toPromise(actor);\n *\n * console.log(output);\n * // logs { count: 42 }\n * ```\n */\nexport function toPromise<T extends AnyActorRef>(\n actor: T\n): Promise<OutputFrom<T>> {\n return new Promise((resolve, reject) => {\n actor.subscribe({\n complete: () => {\n resolve(actor.getSnapshot().output);\n },\n error: reject\n });\n });\n}\n"],"names":["Mailbox","constructor","_process","this","_active","_current","_last","start","flush","clear","next","enqueue","event","enqueued","value","consumed","XSTATE_INIT","XSTATE_STOP","createAfterEvent","delayRef","id","type","createInvokeTimeoutEvent","invokeId","createDoneStateEvent","output","createInitEvent","input","reportUnhandledError","err","setTimeout","symbolObservable","Symbol","observable","builtInActions","actor","@xstate.raise","actorScope","options","system","scheduler","schedule","self","delay","@xstate.sendTo","Error","undefined","defer","_relay","@xstate.cancel","sendId","cancel","@xstate.stop","stopChild","subscriptions","WeakMap","createAttachedLogic","attach","initialTransition","_","status","error","state","target","getSnapshot","subscription","parentSubscription","torndown","teardown","unsubscribe","parent","_parent","subscribe","complete","set","transition","get","delete","getInitialSnapshot","getPersistedSnapshot","snapshot","restoreSnapshot","relayMappedToParent","getEvent","createListenerLogic","eventType","mapper","isPartialWildcard","endsWith","on","emittedEvent","matchesEventDescriptor","listenerLogic","createSubscriptionLogic","mappers","done","onSnapshot","subscriptionLogic","mergeContextPatch","context","patch","pushBuiltInAction","actions","action","args","push","pushStartedChild","Object","assign","children","_special","registerSpawnedChild","createTransitionEnqueue","internalEvents","actorSubscriptions","props","emit","log","logger","raise","raisedEvent","spawn","logic","createActor","sendTo","stop","key","keys","unregisterChild","listen","listenerActor","subscribeTo","subscriptionActor","createEnqueueObject","getBuiltInActionFields","src","resolveActionsWithContext","currentSnapshot","intermediateSnapshot","executableActions","resolvedAction","bind","actionArgs","getEventOutput","machine","implementations","actorSources","actionParams","emittedEventParams","name","params","exec","res","emptyEnqueueObject","cloneMachineSnapshot","builtInFields","enqueueFn","fn","parseDurationToMilliseconds","duration","normalizedDuration","trim","millisecondsMatch","match","parseInt","secondsMatch","wholePart","hasDecimal","fracPart","padEnd","slice","iso8601DurationMatch","groups","weeks","days","hours","minutes","seconds","toNumber","Number","replace","parseDelayToMilliseconds","resolveDelay","delaySource","configuredDelay","referencedDelay","getConfiguredDelayValue","isAtomicStateNode","stateNode","getChildren","values","states","filter","sn","getProperAncestors","toStateNode","ancestors","m","getAllStateNodes","stateNodes","nodeSet","Set","activeParentSet","add","s","has","child","initialStates","getInitialStateNodes","initialStateNode","getStateValue","rootNode","config","adjList","Map","getValueFromAdj","baseNode","childStateNodes","childStateNode","stateValue","isInFinalState","stateNodeSet","some","every","isStateId","str","scheduleDelayedEvent","resolveScheduledDelay","oldEntry","entry","x","enq","oldExit","exit","formatTransition","descriptor","transitionConfig","normalizedTarget","normalizeTarget","reenter","resolveTarget","source","toJSON","map","t","targets","getStateNodeById","isInternalTarget","getStateNodeByPath","resolvedTarget","message","resolveHistoryDefaultTransition","initial","isHistoryNode","iter","descStateNode","initialState","ancestor","getStateNode","stateKey","result","statePath","arrayStatePath","toStatePath","currentStateNode","length","shift","getStateNodes","childStateKeys","Array","allStateNodes","root","i","subStateNode","transitionNode","subStateKeys","subStateKey","allInnerTransitions","subStateValue","innerTransitions","isDescendant","parentStateNode","marker","hasDescendantState","hasIntersection","s1","s2","s1Size","size","isArray","s2Size","set1","item","removeConflictingTransitions","enabledTransitions","filteredTransitions","exitSets","getExitSet","exitSet","computeExitSet","t1","t1Preempted","transitionsToRemove","t2","t3","from","getEffectiveTargetStates","historyValue","getTransitionResult","targetSet","targetNode","node","getTransitionDomain","targetStates","head","tail","concat","transitions","statesToExit","domain","initialMicrostep","preInitialState","initEvent","internalQueue","microstep","isInitial","mutStateNodeSet","_nodes","originalContext","getCurrentTransitionResult","getStateActionsAndContext","transitionFn","updatedContext","guards","delays","nextState","exitStates","changedHistory","sort","a","b","order","currentStateNodes","exitStateNode","historyNode","predicate","history","stateInput","_stateInputs","exitActions","nextContext","resolvedState","resolvedActions","def","invoke","childActor","_isExternal","transitionActions","toArray","enterStates","getMachineOutput","rootCompletionNode","completionOutput","resolveOutput","parallelDoneType","parallelDoneEvent","find","e","statesToEnter","statesForDefaultEntry","addAncestorStatesToEnter","reentrancyDomain","anc","addDescendantStatesToEnter","historyStateNodes","historyDefaultTransition","stateInputMap","completedNodes","stateNodeToEnter","invoked","invokeDef","resolveReferencedActor","syncSnapshot","contextChangedByEntry","resultActions","nextInternalEvents","initialActions","initialInput","ancestorMarker","regionOutput","region","regionDoneType","regionDoneEvent","finalChild","JSON","stringify","resolvedTransitionState","transitionExecutableActions","nextStateNodes","allExitActions","forEach","to","resolvedInput","macrostep","nextSnapshot","microsteps","addMicrostep","step","collectedMicrosteps","_collectedMicrosteps","stopChildren","nextEvent","currentEvent","isErr","startsWith","isErrorActorEvent","getTransitionData","shouldSelectEventlessTransitions","maxIterations","Infinity","iterationCount","microstepCount","selectEventlessTransitions","previousState","hasEffect","transitionToHasEffect","transitionTo","triggerEffect","send","Boolean","enabledTransitionSet","atomicStates","atomicStateNode","loop","always","evaluateCandidate","candidate","guard","guardArgs","_snapshot","isMachineSnapshot","emptyCanActor","emptyCanActorScope","getEmptyCanActor","createEmptyActor","machineSnapshotMatches","testValue","matchesState","machineSnapshotHasTag","tag","tags","machineSnapshotCan","emptyActor","emptyActorScope","sessionId","actionExecutor","getEmptyCanActorScope","transitionData","machineSnapshotToJSON","nodes","getMeta","getInputs","can","hasTag","matches","jsonValues","machineSnapshotGetMeta","meta","machineSnapshotGetInputs","collectTags","createMachineSnapshot","configWithSnapshot","serializeHistoryValue","persistContext","contextPart","copy","xstate$$type","$$ACTOR_TYPE","parentStateId","childStateId","parentStateValue","toStateValue","childStateValue","stateId","segment","charCodeAt","pathToStateValue","previous","toArrayStrict","isDoneEvent","toTransitionConfigArray","configLike","transitionLike","toObserver","nextHandler","errorHandler","completionHandler","isObserver","indexStr","nodeId","invokeConfig","configSrc","partialEventTokens","split","eventTokens","tokenIndex","partialEventToken","eventToken","createScheduledEventId","effectStates","XSTATE_LOGIC_EFFECT_RESOLVE","XSTATE_LOGIC_EFFECT_REJECT","XSTATE_LOGIC_EFFECT_START","getEffectState","executeLogicEffects","effects","effect","cleanup","createLogic","trackedEffects","emitted","sendBack","sentEvent","keyOrExec","maybeExec","enqueueEffect","run","resolveContext","executingCustomAction","ProcessingStatus","defaultOptions","clock","ms","clearTimeout","console","isExecutableActionObject","executeExecutableEffects","logicEffects","Actor","_boundProcess","mailbox","observers","eventListeners","_processingStatus","NotStarted","_forceDeferredActions","_syncSnapshot","ref","_actorScope","_lastSourceRef","_collectedActions","_collectedSent","_initialEffects","registryKey","trigger","_deferred","_pendingEffects","resolvedOptions","inspect","_systemRef","current","rootActor","idCounter","keyedActors","reverseKeyedActors","inspectionObservers","timerMap","recordSent","targetRef","targetId","Math","random","toString","scheduledEvent","startedAt","Date","now","scheduledEventId","_scheduledEvents","timeout","deliver","cancelAll","targetMachine","isInternalEventType","_send","_bookId","_register","_unregister","getAll","fromEntries","entries","_set","existing","observerOrFn","observer","_sendInspectionEvent","resolvedInspectionEvent","rootId","scheduledEvents","scheduledId","_clock","_logger","_timerStrategy","timers","createRuntimeSystem","_stop","listeners","wildcardListener","handler","saveExecutingCustomAction","Running","Proxy","payload","resolvedRegistryKey","persistedState","rest","actorRef","parentRef","_setErrorSnapshot","_next","update","deferredFn","_stopProcedure","_complete","doneEvent","actorId","_error","sourceRef","sent","_flushInitialEffects","nextListenerOrObserver","errorListener","completeListener","Stopped","select","selector","equalityFn","is","selected","strategy","resolveRestoredTimerDelay","caughtError","reportError","err2","persisted","pendingEffects","scheduled","elapsed","max","instanceStates","XSTATE_OBSERVABLE_NEXT","XSTATE_OBSERVABLE_ERROR","XSTATE_OBSERVABLE_COMPLETE","XSTATE_ASYNC_RESOLVE","XSTATE_ASYNC_REJECT","TimeoutError","super","emptyLogic","createSpawner","spawnedChildren","cache","memo","object","memoizedData","EMPTY_OBJECT","CHOICE_CONFIG_KEYS","StateNode","path","description","after","events","ownEvents","_key","_machine","firstStateKey","join","choice","validateStateNodeConfig","idMap","collection","iteratee","collectionKeys","mapValues","stateConfig","stateNodeId","resolvedId","sourceName","_initialize","afterConfig","timeoutConfig","onTimeoutConfig","onTimeout","invokeDefs","sources","isNaN","fromDelaysMap","delayedTransitions","delayedTransition","getDelayedTransitions","transitionsConfig","mapTransitionConfigs","onDone","createCancelInvokeTimeoutTransition","timeoutEventType","_args","formatInvokeCompletionTransition","didEnqueue","trackingEnqueue","apply","thisArg","argArray","Reflect","prop","receiver","invokeTimeoutEventType","invokeDoneTransitions","onError","formatTransitions","validateChoiceResult","formatChoiceTransitions","_refreshEventMetadata","_target","targetString","formatInitialTransition","candidates","receivedEventType","exactMatch","wildcardCandidates","eventDescriptor","flatMap","getCandidates","transitionConfigs","StateMachine","version","schemas","internalEventDescriptors","_json","rootStateNode","routeTransitions","collectRoutes","route","routeId","routeConfig","routeMatches","_guard","routeOptions","formatRouteTransitions","provide","provided","resolveState","resolvedStateValue","snapshots","_getPreInitialState","preInitial","resolvedContext","macroState","_rehydrated","fullPath","relativePath","resolvedStateId","STATE_IDENTIFIER","childrenJson","persistedVersion","migrate","snapshotData","snapshotChildren","actorData","childState","revivedHistoryValue","revived","arr","resolved","reviveHistoryValue","_persistedSnapshotVersion","persistedRest","restoredSnapshot","seen","WeakSet","reviveContext","createMachine","delayToMs","parsedDelay","parseFloat","isUnserializableMarker","$unserializable","assertNoUnresolvedMarkers","index","extractSerializableDelays","_scxmlSessionId","_scxmlMachineName","evaluateExpr","expr","fnBody","Function","isExternal","_scxmlExternal","isInitEvent","explicitType","_scxmlEventType","sendid","_scxmlSendId","origin","origintype","invokeid","_scxmlInvokeId","data","_scxmlEventData","scxml","location","snap","sanitized","executeScript","code","contextKeys","varDeclarations","k","captureUpdates","isBuiltInActionJSON","kind","codeExpression","lang","valueToJSON","isActorLogic","isRuntimeSchema","v","invokeToJSON","implementationsToJSON","stateNodeConfigToJSON","machineConfigToJSON","setup","extend","extension","base","mergeSchemas","mergeMaps","mergeSetupConfigs","machineConfig","mergedSchemas","mergedActions","mergedActorSources","mergedGuards","mergedDelays","createStateConfig","left","right","createInertActorScope","actorLogic","SpecialTargets","defaultWaitForOptions","timeouts","_now","_id","_flushing","_flushingInvalidated","getId","time","flushTimeouts","sorted","_idA","timeoutA","_idB","timeoutB","endA","call","increment","types","typesText","asyncLogic","createBaseLogic","resolvedValue","async","actorSelf","controller","AbortController","timeoutMs","timeoutId","abort","Promise","resolve","signal","reject","waitForEffect","then","response","errorData","callbackOrConfig","callback","callbackState","receivers","dispose","receive","listener","lazyObservableOrConfig","lazyObservable","_subscription","createMachineFromConfig","json","assertRootImplementationMarkers","resolvedImplementations","mergeImplementations","pendingTransitionActionsMap","allTransitionActions","contextBeforeTargetless","pendingPlatformErrors","resolveGuardConfig","guardImpl","resolveRouteConfig","resolvedGuard","iterInvokeConfigs","invokes","inv","extInv","_nestedMachineJSON","getTransitionConfig","raiseErrorExecution","tagname","line","NaN","column","reason","errored","executeActions","parentState","scxmlAction","mergedContext","includes","eventData","eventexpr","param","targetexpr","delayexpr","isParentTarget","childId","childRef","sendidexpr","isLegalIdentifier","test","array","iterX","iterResult","blockX","blockResult","branch","branches","condResult","cond","branchX","branchResult","targetConfig","_x","_enq","rootNodeConfig","iterNode","nodeKey","originalEntryActions","donedata","reduce","acc","entryFn","ctx","transActions","mergedX","_scxmlDonedata","out","contentExpr","contentText","contextConfig","providedGuards","scxml.cond","xstate.stateIn","normalizedId","xstate.not","inner","innerImpl","observableCreatorOrConfig","observableCreator","_config","runtimeRef","pendingObservers","createActorFromLogic","flushObservers","runtime","active","preInitialSnapshot","first","inertActorScope","transitionResult","potentialTransitions","visited","prototype","hasOwnProperty","vendor","results","findMapper","currentMapper","nodePath","atomicNode","nodeMapper","validate","rej","aborted","handle","sub","abortListener","removeEventListener","checkEmitted","addEventListener"],"mappings":"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"}
|