{"version":3,"file":"index.esm.mjs","sources":["../src/fsm.error.ts","../src/symbols.ts","../src/heplers.ts","../src/transition.ts","../src/fsm.ts","../src/nested.ts"],"sourcesContent":["import { AllowedNames } from './types';\n\nexport class StateMachineTransitionError extends Error {\n  constructor(\n    id: string,\n    from: AllowedNames,\n    event: AllowedNames,\n    cause?: unknown,\n  ) {\n    super(\n      `Event ${String(event)} is not allowed in state ${String(from)} of ${id}`,\n    );\n    this.name = 'StateMachineTransitionError';\n    this.cause = cause;\n  }\n}\n\nexport const isStateMachineTransitionError = (\n  error: unknown,\n): error is StateMachineTransitionError =>\n  error instanceof StateMachineTransitionError;\n","/**\n * Symbol that can be used to represent all states or events.\n */\nexport const All = Symbol('All') as any;\n","import { All } from './symbols';\nimport {\n  AllowedNames,\n  FsmContext,\n  IInternalTransition,\n  StateMachineParameters,\n  Transition,\n  Subscribers,\n  Callback,\n  Nested,\n} from './types';\n\nexport const InitialEvent = Symbol('InitialEvent') as any;\n\nexport function capitalize(parameter: string) {\n  return parameter.charAt(0).toUpperCase() + parameter.slice(1);\n}\n\nconst SpecialSymbols = new Set([All, InitialEvent]);\n\nexport function initialTransition<\n  State extends AllowedNames,\n  Event extends AllowedNames,\n  Context extends FsmContext<unknown> = FsmContext<never>,\n>(state: State): IInternalTransition<State, Event, Context> {\n  return {\n    from: state,\n    event: InitialEvent,\n    to: state,\n    _original: {\n      from: state,\n      event: InitialEvent,\n      to: state,\n    },\n  };\n}\n\nexport function addIsChecker(this: any, state: AllowedNames) {\n  if (typeof state !== 'string') {\n    return;\n  }\n\n  const capitalized = capitalize(state);\n\n  this[`is${capitalized}`] = () => this.is(state);\n}\n\nexport function prepareStates<State extends AllowedNames>(\n  this: any,\n  parameters: StateMachineParameters<any, any, any>,\n) {\n  const states = new Map<State, Nested | null>();\n  const statesFromParameters = parameters.states?.(parameters) ?? {};\n\n  for (const { from, to } of parameters.transitions ?? []) {\n    if (Array.isArray(from)) {\n      for (const state of from) {\n        states.set(state, null);\n      }\n    } else {\n      states.set(from, null);\n    }\n    states.set(to, null);\n  }\n\n  for (const [state, nested] of Object.entries(statesFromParameters)) {\n    if (!nested) {\n      continue;\n    }\n\n    (nested as any)._parent = this;\n    states.set(state as State, nested);\n  }\n\n  return states;\n}\n\nexport function prepareTransitions(\n  this: any,\n  transitions: Array<Transition<AllowedNames, AllowedNames, any>> = [],\n) {\n  return transitions.reduce((accumulator, transition) => {\n    const { from, event } = transition;\n    const froms = Array.isArray(from) ? from : [from];\n\n    if (!accumulator.has(event)) {\n      accumulator.set(event, new Map());\n    }\n\n    const transitionsByState = accumulator.get(event);\n\n    for (const from of froms) {\n      if (!transitionsByState?.has(from)) {\n        transitionsByState?.set(from, []);\n      }\n\n      transitionsByState?.get(from)?.push(this.bindToCallbacks(transition));\n    }\n\n    return accumulator;\n  }, new Map());\n}\n\nexport function prepareSubscribers<\n  Event extends AllowedNames,\n  Context extends FsmContext<unknown>,\n>(this: any, subscribers?: Subscribers<Event, Context>) {\n  const subscribersMap = new Map<\n    Event,\n    Map<Callback<Context>, Callback<Context>>\n  >();\n\n  if (!subscribers) {\n    return subscribersMap;\n  }\n\n  if (All in subscribers) {\n    for (const callback of subscribers[All as keyof typeof subscribers]!) {\n      subscribersMap.set(All, new Map());\n      subscribersMap.get(All)?.set(callback, callback.bind(this));\n    }\n  }\n\n  for (const [event, callbacks] of Object.entries(subscribers)) {\n    if (!subscribersMap.has(event as Event)) {\n      subscribersMap.set(event as Event, new Map());\n    }\n\n    for (const callback of callbacks as Array<Callback<Context>>) {\n      subscribersMap.get(event as Event)?.set(callback, callback.bind(this));\n    }\n  }\n\n  return subscribersMap;\n}\n\nexport function populateEventMethods(\n  this: any,\n  parameters: StateMachineParameters<any, any, any>,\n) {\n  const nestedEvents = this.nested.flatMap((nested: Nested) => {\n    if (nested.type === 'parallel') {\n      return nested.machines.flatMap((m) => m.events);\n    }\n\n    return nested.events;\n  });\n\n  const events = new Set([\n    ...(parameters.transitions?.map((t) => t.event) ?? []),\n    ...nestedEvents,\n  ]);\n\n  for (const event of events) {\n    if (SpecialSymbols.has(event)) {\n      continue;\n    }\n\n    addEventMethods.call(this, event);\n  }\n}\n\nexport function populateCheckers(\n  this: any,\n  parameters: StateMachineParameters<any, any, any>,\n) {\n  const nestedStates = this.nested.flatMap((nested: Nested) => {\n    if (nested.type === 'parallel') {\n      return nested.machines.flatMap((m) => m.states);\n    }\n\n    return nested.states;\n  });\n\n  const states = new Set([\n    ...(parameters.transitions?.map((t) => t.from) ?? []),\n    ...(parameters.transitions?.map((t) => t.to) ?? []),\n    ...nestedStates,\n  ]);\n\n  for (const state of states) {\n    if (SpecialSymbols.has(state)) {\n      continue;\n    }\n\n    addIsChecker.call(this, state);\n  }\n}\n\nexport function addEventMethods<Event extends AllowedNames>(\n  this: any,\n  event: Event,\n) {\n  if (typeof event !== 'string') {\n    // this could happen if the `event` is `All` or `IdentityEvent`\n    return;\n  }\n\n  const capitalizedEvent = capitalize(event);\n\n  this[event] = async (...arguments_: Array<unknown>) => {\n    await this.transition(event, ...arguments_);\n  };\n\n  this[`can${capitalizedEvent}`] = (...arguments_: Array<unknown>) =>\n    this.can(event, ...arguments_);\n}\n","import { AllowedNames, Callback, Guard, Transition, FsmContext } from './types';\n\nexport interface TransitionOptions<Context extends FsmContext<unknown>> {\n  onExit?: Callback<Context>;\n  onEnter?: Callback<Context>;\n  onLeave?: Callback<Context>;\n  guard?: Guard<Context>;\n}\n\n/**\n * Creates a new transition.\n *\n * @param from - From state.\n * @param event - Event name.\n * @param to - To state.\n * @param guard - Guard function.\n *\n * @overload\n * @param from - From state.\n * @param event - Event name.\n * @param to - To state.\n * @param options - Transition options.\n */\nexport const t = <\n  const State extends AllowedNames,\n  const Event extends AllowedNames,\n  Context extends FsmContext<unknown> = FsmContext<unknown>,\n>(\n  from: ReadonlyArray<State> | State,\n  event: Event,\n  to: State,\n  guardOrOptions: Guard<Context> | TransitionOptions<Context> = {},\n): Transition<State, Event, Context> => {\n  if (typeof guardOrOptions === 'function') {\n    return {\n      from,\n      event,\n      to,\n      guard: guardOrOptions,\n    };\n  }\n  const { onExit, onEnter, onLeave, guard, ...rest } = guardOrOptions;\n\n  return {\n    ...rest,\n    from,\n    event,\n    to,\n    onLeave,\n    onExit,\n    onEnter,\n    guard,\n  };\n};\n","import {\n  StateMachineTransitionError,\n  isStateMachineTransitionError,\n} from './fsm.error';\nimport {\n  initialTransition,\n  prepareStates,\n  prepareTransitions,\n  prepareSubscribers,\n  populateEventMethods,\n  populateCheckers,\n  addIsChecker,\n  addEventMethods,\n} from './heplers';\nimport { All } from './symbols';\nimport { TransitionOptions, t } from './transition';\nimport {\n  AllowedNames,\n  Callback,\n  Transition,\n  FsmContext,\n  Guard,\n  IStateMachine,\n  ParallelState,\n  INestedStateMachine,\n  HydratedState,\n  Nested,\n  StateMachineConstructor,\n  StateMachineParameters,\n  States,\n  TransitionsStorage,\n  IStateMachineInspectRepresentation,\n  TransitionInspectRepresentation,\n} from './types';\n\nexport class _StateMachine<\n  const State extends AllowedNames,\n  const Event extends AllowedNames,\n  Context extends FsmContext<unknown>,\n> {\n  protected _context = {} as Context;\n\n  constructor(parameters: StateMachineParameters<State, Event, Context>) {\n    this.#initialParameters = parameters;\n    this.#id = parameters.id ?? 'fsm';\n    this.#last = initialTransition(parameters.initial);\n\n    this.#states = (prepareStates<State>).call(this, parameters);\n\n    this.#transitions = prepareTransitions.call(this, parameters.transitions);\n    this.#subscribers = (prepareSubscribers<Event, Context>).call(\n      this,\n      parameters.subscribers,\n    );\n\n    populateEventMethods.call(this, parameters);\n    populateCheckers.call(this, parameters);\n    this.populateContext(parameters);\n  }\n\n  #last: Transition<State, Event, Context>;\n  #id: string;\n  #contextPromise: Promise<Context> | null = null;\n  #boundTo: any = this;\n  #dataPromise: Promise<Context['data']> | null = null;\n\n  /**\n   * Active nested state machine.\n   */\n  #activeChild: INestedStateMachine<any, any, any> | null = null;\n  /**\n   * Active parallel state machine.\n   */\n  #activeParallelState: ParallelState<any, any, any> | null = null;\n\n  /**\n   * Map of nested states.\n   */\n  #states: States<State>;\n\n  /**\n   * Map of transitions by event and from-state.\n   */\n  #transitions: TransitionsStorage<State, Event, Context>;\n\n  #subscribers = new Map<\n    Event,\n    /**\n     * Map of original callbacks by bound callbacks.\n     */\n    Map<Callback<Context>, Callback<Context>>\n  >();\n\n  /**\n   * We're saving initial parameters mostly for nested states when history = none\n   */\n  #initialParameters: StateMachineParameters<State, Event, Context>;\n\n  get context(): Context {\n    return this._context;\n  }\n\n  /**\n   * Current state.\n   */\n  get current(): State {\n    return this.#last.to;\n  }\n\n  /**\n   * Data object.\n   */\n  get data(): Context['data'] {\n    return this._context.data;\n  }\n\n  /**\n   * Active child state machine.\n   */\n  get child() {\n    return this.#activeChild;\n  }\n\n  /**\n   * All events in the state machine.\n   */\n  get events(): Array<Event> {\n    return Array.from(this.#transitions.keys());\n  }\n\n  /**\n   * All states in the state machine.\n   */\n  get states(): Array<State> {\n    return Array.from(this.#states.keys());\n  }\n\n  get nested(): Array<Nested> {\n    return Array.from(this.#states.values()).filter(\n      (v) => v !== null,\n    ) as Array<Nested>;\n  }\n\n  /**\n   * Add transition to the state machine.\n   *\n   * @param transition - Transition to add.\n   * @returns New state machine.\n   */\n  addTransition<const NewState extends State, const NewEvent extends Event>(\n    from: ReadonlyArray<NewState> | NewState,\n    event: Event,\n    to: NewState,\n    guardOrOptions?: Guard<Context> | TransitionOptions<Context>,\n  ) {\n    const transition = t(from, event, to, guardOrOptions);\n    const states = new Set(Array.isArray(from) ? [...from] : [from]);\n\n    addEventMethods.call(this, event);\n\n    const eventMap = this.#transitions.get(event) ?? new Map();\n\n    for (const state of states) {\n      this.#states.set(state, null);\n      addIsChecker.call(this, state);\n\n      if (!eventMap?.has(state)) {\n        eventMap?.set(state, []);\n      }\n      eventMap?.get(state)?.push(this.bindToCallbacks(transition));\n    }\n\n    this.#transitions.set(event, eventMap);\n\n    return this as unknown as IStateMachine<\n      State | NewState,\n      Event | NewEvent,\n      Context\n    >;\n  }\n\n  /**\n   * Add nested state machine.\n   *\n   * @param state - State to add.\n   * @param nestedState - Nested state machine.\n   */\n  addNestedMachine(state: State, nestedState: Nested) {\n    this.#states.set(state, nestedState);\n\n    if (nestedState.type === 'parallel') {\n      return this;\n    }\n\n    (nestedState as any)._parent = this;\n\n    const nestedEvents = nestedState.events;\n\n    for (const event of nestedEvents) {\n      addEventMethods.call(this, event);\n    }\n\n    const nestedStates = nestedState.states;\n\n    for (const nestedState of nestedStates) {\n      addIsChecker.call(this, nestedState as State);\n    }\n\n    return this;\n  }\n\n  /**\n   * Removes all nested state machines by state.\n   *\n   * @param state - State to remove.\n   */\n  removeState(state: State) {\n    if (this.current === state) {\n      this.#activeChild = null;\n      this.#activeParallelState = null;\n    }\n\n    this.#states.delete(state);\n\n    return this;\n  }\n\n  /**\n   * Checks if the state machine is in the given state.\n   *\n   * @param state - State to check.\n   */\n  is(state: State): boolean {\n    if (this.#activeChild?.is(state)) {\n      return true;\n    }\n\n    return this.current === state;\n  }\n\n  /**\n   * Checks if the event can be triggered in the current state.\n   *\n   * @param event - Event to check.\n   */\n  async can<Arguments extends Array<unknown> = Array<unknown>>(\n    event: Event,\n    ...arguments_: Arguments\n  ) {\n    if (await this.#activeChild?.can(event, ...arguments_)) {\n      return true;\n    }\n\n    const transitionsByState = this.#transitions.get(event);\n\n    // check has from: all\n    if (transitionsByState?.has(All)) {\n      for (const t of transitionsByState.get(All) ?? []) {\n        const result = await (t.guard?.(this._context, ...arguments_) ?? true);\n\n        if (result) {\n          return true;\n        }\n      }\n    }\n\n    if (!transitionsByState?.has(this.current)) {\n      return false;\n    }\n\n    const transitions = transitionsByState.get(this.current) ?? [];\n\n    for (const transition of transitions) {\n      const { guard } = transition;\n\n      const result = await (guard?.(this._context, ...arguments_) ?? true);\n\n      if (result) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  /**\n   * Subscribe to event. Will execute after transition.\n   *\n   * @param event - Event to subscribe to.\n   * @param callback - Callback to execute.\n   *\n   * @overload\n   * Without providing event will subscribe to `All` event.\n   *\n   * @param callback - Callback to execute.\n   */\n  on(event: Event, callback: Callback<Context>): this;\n  on(callback: Callback<Context>): this;\n  on(eventOrCallback: Event | Callback<Context>, callback?: Callback<Context>) {\n    if (typeof eventOrCallback === 'function') {\n      return this.on(All, eventOrCallback);\n    }\n\n    const event = eventOrCallback;\n\n    if (!this.#subscribers.has(event)) {\n      this.#subscribers.set(event, new Map());\n    }\n\n    const callbacks = this.#subscribers.get(event);\n    if (callback) {\n      callbacks?.set(callback, callback.bind(this.#boundTo));\n    }\n\n    return this;\n  }\n\n  /**\n   * Unsubscribe from event.\n   *\n   * @param event - Event to unsubscribe from.\n   * @param callback - Callback to unsubscribe.\n   *\n   * @overload\n   * Unsubscribe from `All` event.\n   *\n   * @param callback - Callback to unsubscribe.\n   */\n  off(event: Event, callback: Callback<Context>): this;\n  off(callback: Callback<Context>): this;\n  off(\n    eventOrCallback: Event | Callback<Context>,\n    callback?: Callback<Context>,\n  ) {\n    if (typeof eventOrCallback === 'function') {\n      return this.off(All, eventOrCallback);\n    }\n\n    const event = eventOrCallback;\n    if (!this.#subscribers.has(event)) {\n      return;\n    }\n\n    const callbacks = this.#subscribers.get(event);\n    callbacks?.delete(callback!);\n\n    return this;\n  }\n\n  /**\n   * Transitions the state machine to the next state.\n   *\n   * @param event - Event to trigger.\n   * @param arguments_ - Arguments to pass to lifecycle hooks.\n   */\n  async transition<Arguments extends Array<unknown> = Array<unknown>>(\n    event: Event,\n    ...arguments_: Arguments\n  ): Promise<this> {\n    // check nested state machine\n    if (await this.makeNestedTransition(event, ...arguments_)) {\n      return this;\n    }\n    // propagate to parent\n\n    if (!(await this.can(event, ...arguments_))) {\n      throw new StateMachineTransitionError(this.#id, this.current, event);\n    }\n\n    const transition = (await this.getAllowedTransition(event, ...arguments_))!;\n\n    if (this.#contextPromise) {\n      for (const [key, value] of Object.entries(await this.#contextPromise)) {\n        this._context[key as keyof Context] = value as Context[keyof Context];\n      }\n      this.#contextPromise = null;\n    }\n\n    if (this.#dataPromise) {\n      this._context.data = await this.#dataPromise;\n      this.#dataPromise = null;\n    }\n\n    await this.executeTransition(transition, ...arguments_);\n\n    return this;\n  }\n\n  /**\n   * Tries to transition the state machine to the next state.\n   * Returns `false` if the transition is not allowed instead of throwing an error.\n   */\n  async tryTransition<Arguments extends Array<unknown> = Array<unknown>>(\n    event: Event,\n    ...arguments_: Arguments\n  ): Promise<boolean> {\n    try {\n      await this.transition(event, ...arguments_);\n      return true;\n    } catch (error) {\n      if (isStateMachineTransitionError(error)) {\n        return false;\n      }\n      throw error;\n    }\n  }\n\n  /**\n   * Will remove all transitions with the given from, to and event.\n   */\n  removeTransition(from: State, event: Event, to: State) {\n    const transitions = this.#transitions.get(event)?.get(from);\n\n    if (!transitions) {\n      return this;\n    }\n\n    const newTransitions = transitions.filter((t) => t.to !== to);\n    this.#transitions.get(event)?.set(from, newTransitions);\n\n    return this;\n  }\n\n  /**\n   * Binds external context to the state machine callbacks.\n   *\n   * @param this - Context to bind.\n   * @returns state machine instance.\n   */\n  bind<T>(_this: T) {\n    for (const callbacks of this.#subscribers.values()) {\n      for (const callback of callbacks.keys()) {\n        callbacks.set(callback, callback.bind(_this));\n      }\n    }\n\n    for (const transitionsByState of this.#transitions.values()) {\n      for (const transition of transitionsByState.values()) {\n        for (const t of transition) {\n          t.onEnter = t._original.onEnter?.bind(_this);\n          t.onExit = t._original.onExit?.bind(_this);\n          t.onLeave = t._original.onLeave?.bind(_this);\n          t.guard = t._original.guard?.bind(_this);\n        }\n      }\n    }\n\n    this.#boundTo = _this;\n\n    return this;\n  }\n\n  /**\n   * Injects service into the state machine context.\n   */\n  inject<const Key extends keyof Omit<Context, 'data'>>(\n    key: Key,\n    service: Context[Key],\n  ) {\n    this._context[key] = service;\n\n    return this;\n  }\n\n  /**\n   * Injects service into the state machine context using factory function.\n   *\n   * @param key - Key to inject.\n   * @param service - Service factory function.\n   */\n  injectAsync<const Key extends keyof Omit<Context, 'data'>>(\n    key: Key,\n    service: (fsm: this) => Promise<Context[Key]> | Context[Key],\n  ) {\n    const contextValue = service(this);\n\n    if (contextValue instanceof Promise) {\n      this.#contextPromise ??= Promise.resolve({} as Context);\n      this.#contextPromise.then((context) => {\n        return contextValue.then((value) => {\n          context[key as keyof Context] = value;\n          return context;\n        });\n      });\n    } else {\n      this._context[key as keyof Context] = contextValue;\n    }\n\n    return this;\n  }\n\n  /**\n   * Hydrates the state machine to plain object.\n   *\n   * @returns Hydrated JSON.\n   */\n  dehydrate(): HydratedState<State, Context['data']> {\n    const hydrated: HydratedState<State, Context['data']> = {\n      current: this.current,\n      data: this._context.data,\n    };\n\n    if (this.#activeChild) {\n      hydrated.nested = this.#activeChild.dehydrate();\n    }\n\n    return hydrated;\n  }\n\n  /**\n   * Apply hydrated plain object to the state machine.\n   *\n   * @param hydrated - Hydrated JSON.\n   */\n  hydrate(hydrated: HydratedState<State, Context['data']>) {\n    this.#last = initialTransition(hydrated.current);\n    this._context.data = hydrated.data;\n\n    if (this.#activeChild && hydrated.nested) {\n      this.#activeChild.hydrate(hydrated.nested);\n    }\n\n    return this;\n  }\n\n  /**\n   * Inspects the state machine.\n   *\n   * @returns representation of the state machine.\n   */\n  inspect(): IStateMachineInspectRepresentation {\n    const transitions = [];\n    for (const [event, transitions_] of this.#transitions.entries()) {\n      for (const [from, transitions__] of transitions_.entries()) {\n        for (const transition of transitions__) {\n          const t: TransitionInspectRepresentation = {\n            from,\n            event,\n            to: transition.to,\n            hasGuard: Boolean(transition.guard),\n            hasOnEnter: Boolean(transition.onEnter),\n            hasOnExit: Boolean(transition.onExit),\n            hasOnLeave: Boolean(transition.onLeave),\n          };\n\n          transitions.push(t);\n        }\n      }\n    }\n\n    return {\n      currentState: this.current.toString(),\n      transitions,\n      id: this.#id,\n      states: this.states,\n      data: this._context.data,\n    };\n  }\n\n  protected populateContext(parameters: StateMachineParameters<any, any, any>) {\n    this.#contextPromise = Promise.resolve({} as Context);\n\n    for (const [key, value] of Object.entries(parameters.inject ?? {})) {\n      const contextValue =\n        typeof value === 'function'\n          ? value(this as IStateMachine<any, any, any>)\n          : value;\n\n      if (contextValue instanceof Promise) {\n        this.#contextPromise = this.#contextPromise.then((context: any) => {\n          return contextValue.then((value) => {\n            context[key] = value;\n            return context;\n          });\n        });\n      } else {\n        this._context[key as keyof Context] = contextValue;\n      }\n    }\n\n    const data = parameters.data?.(parameters) ?? {};\n\n    if (data instanceof Promise) {\n      this.#dataPromise = data;\n      this._context.data = {};\n    } else {\n      this._context.data = data;\n    }\n  }\n\n  private async makeNestedTransition(\n    event: Event,\n    ...arguments_: Array<unknown>\n  ) {\n    let hasExecuted = false;\n\n    if (!this.#activeChild && !this.#activeParallelState) {\n      return hasExecuted;\n    }\n\n    const children = this.#activeParallelState?.machines ?? [this.#activeChild];\n\n    for (const child of children) {\n      if (child && (await child.can(event, ...arguments_))) {\n        const _child = child;\n\n        this.#activeChild = _child;\n        await child?.transition(event, ...arguments_);\n        hasExecuted = true;\n      }\n    }\n\n    return hasExecuted;\n  }\n\n  private async getAllowedTransition(\n    event: Event,\n    ...arguments_: Array<unknown>\n  ) {\n    const transitionsByState = this.#transitions.get(event);\n\n    if (!transitionsByState) {\n      return null;\n    }\n\n    const transitions = transitionsByState.get(this.current);\n\n    if (transitions) {\n      for (const t of transitions) {\n        const { guard } = t;\n\n        const result = await (guard?.(this._context, ...arguments_) ?? true);\n\n        if (result) {\n          return t;\n        }\n      }\n    }\n\n    // Handle from All\n    const allTransitions = transitionsByState.get(All);\n    if (allTransitions) {\n      for (const t of allTransitions) {\n        const result = await (t.guard?.(this._context, ...arguments_) ?? true);\n\n        if (result) {\n          return t;\n        }\n      }\n    }\n\n    return null;\n  }\n\n  /**\n   * This method binds the callbacks of the transition to the state machine instance.\n   * It useful in case if we need to access the state machine instance from the callbacks.\n   */\n  private bindToCallbacks(transition: Transition<State, Event, Context>) {\n    return {\n      ...transition,\n      onLeave: transition.onLeave?.bind(this.#boundTo),\n      onEnter: transition.onEnter?.bind(this.#boundTo),\n      onExit: transition.onExit?.bind(this.#boundTo),\n      guard: transition.guard?.bind(this.#boundTo),\n      _original: transition,\n    };\n  }\n\n  private switchNestedState(transition: Transition<State, Event, Context>) {\n    let child = this.#states.get(transition.to);\n\n    if (!child) {\n      this.#activeChild = null;\n      this.#activeParallelState = null;\n      return;\n    }\n\n    if (child.type === 'parallel') {\n      this.#activeParallelState = child;\n\n      // we start processing from the first nested machine\n      child = child.machines[0];\n\n      return;\n    }\n\n    switch (child.history) {\n      case 'none': {\n        this.#activeChild = new (child as any).constructor(\n          child.#initialParameters,\n          this,\n        );\n        break;\n      }\n      case 'deep': {\n        this.#activeChild = child;\n      }\n    }\n  }\n\n  private makeTransition(transition: Transition<State, Event, Context>) {\n    this.#last = transition ?? this.#last;\n  }\n\n  private async executeTransition<\n    Arguments extends Array<unknown> = Array<unknown>,\n  >(transition: Transition<State, Event, Context>, ...arguments_: Arguments) {\n    const { onEnter, onExit, event } = transition ?? {};\n\n    const subscribers = this.#subscribers.get(event);\n    const allSubscribers = this.#subscribers.get(All);\n\n    await this.#last.onLeave?.(this.context, ...arguments_);\n    await onEnter?.(this.context, ...arguments_);\n    this.makeTransition(transition);\n    this.switchNestedState(transition);\n\n    for (const subscriber of subscribers?.values() ?? []) {\n      await subscriber(this.context, ...arguments_);\n    }\n\n    for (const subscriber of allSubscribers?.values() ?? []) {\n      await subscriber(this.context, ...arguments_);\n    }\n\n    await onExit?.(this.context, ...arguments_);\n  }\n}\n\n/**\n * Creates a new state machine.\n *\n * @param parameters - State machine parameters.\n * @param parameters.id - State machine id. Used in error messages.\n * @param parameters.initial - Initial state.\n * @param parameters.ctx - Context object.\n * @param parameters.transitions - Transitions.\n * @param parameters.transitions[].from - From state.\n * @param parameters.transitions[].from[] - From states.\n * @param parameters.transitions[].event - Event name.\n * @param parameters.transitions[].to - To state.\n * @param parameters.transitions[].onEnter - Callback to execute on enter.\n * @param parameters.transitions[].onExit - Callback to execute on exit.\n * @param parameters.transitions[].onLeave - Callback to execute on transition to the next state.\n * @param parameters.transitions[].guard - Guard function.\n *\n * @example\n * const stateMachine = new StateMachine({\n *   id: '1',\n *   initial: State.idle,\n *   transitions: [\n *    t(State.idle, Event.fetch, State.pending),\n *    t(State.pending, Event.resolve, State.idle),\n *   ],\n * });\n *\n * @returns New state machine.\n *\n */\nexport const StateMachine = _StateMachine as unknown as StateMachineConstructor;\n","import { _StateMachine } from './fsm';\nimport {\n  AllowedNames,\n  FsmContext,\n  HistoryTypes,\n  INestedStateMachine,\n  INestedStateMachineParameters,\n  NestedStateMachineConstructor,\n  ParallelState,\n} from './types';\n\ntype NestedStateMachineParent = _StateMachine<any, any, any>;\n\nexport class _NestedStateMachine<\n  const State extends AllowedNames,\n  const Event extends AllowedNames,\n  Context extends FsmContext<unknown>,\n> extends _StateMachine<State, Event, Context> {\n  readonly type = 'nested';\n  readonly history: HistoryTypes;\n\n  constructor(\n    parameters: INestedStateMachineParameters<State, Event, Context>,\n    protected _parent: NestedStateMachineParent | null = null,\n  ) {\n    super(parameters);\n    this.history = parameters.history ?? 'deep';\n  }\n\n  get context(): Context {\n    return { ...this._parent?.context, ...this._context };\n  }\n}\n\nexport const NestedStateMachine =\n  _NestedStateMachine as unknown as NestedStateMachineConstructor;\n\n/**\n * Creates a nested state machine.\n *\n * @param machineParameters The parameters of the nested state machine.\n * @param options The options of the nested state machine.\n * @returns A nested state machine.\n */\nexport function nested<\n  const State extends AllowedNames,\n  const Event extends AllowedNames,\n  Context extends FsmContext<unknown>,\n>(\n  machineParameters: INestedStateMachineParameters<State, Event, Context>,\n): INestedStateMachine<State, Event, Context> {\n  return new NestedStateMachine(machineParameters);\n}\n\n/**\n * Creates a parallel state. Parallel states execute all nested state machines at the same time.\n *\n * @param nested The nested state machines.\n */\nexport function parallel<\n  NestedMachines extends ReadonlyArray<\n    INestedStateMachine<State, Event, Context>\n  >,\n  const State extends AllowedNames = NestedMachines[number]['current'],\n  const Event extends AllowedNames = NestedMachines[number]['events'][number],\n  Context extends FsmContext<unknown> = NestedMachines[number]['context'],\n>(...nested: NestedMachines): ParallelState<State, Event, Context> {\n  return {\n    type: 'parallel',\n    machines: nested,\n  };\n}\n"],"names":["StateMachineTransitionError","_Error","id","from","event","cause","_this","call","String","name","_inheritsLoose","_wrapNativeSuper","Error","isStateMachineTransitionError","error","All","Symbol","InitialEvent","capitalize","parameter","charAt","toUpperCase","slice","SpecialSymbols","Set","initialTransition","state","to","_original","addIsChecker","_this2","this","is","prepareStates","parameters","_parameters$states","_step","states","Map","statesFromParameters","_iterator","_createForOfIteratorHelperLoose","_parameters$transitio","transitions","done","_step$value","value","Array","isArray","_step2","_iterator2","set","_i","_Object$entries","Object","entries","length","_Object$entries$_i","nested","_parent","prepareTransitions","_this3","reduce","accumulator","transition","froms","has","_step3","transitionsByState","get","_iterator3","_transitionsByState$g","push","bindToCallbacks","prepareSubscribers","subscribers","subscribersMap","_iterator4","_step4","_subscribersMap$get","callback","bind","_i2","_Object$entries2","_Object$entries2$_i","callbacks","_step5","_iterator5","_subscribersMap$get2","populateEventMethods","_parameters$transitio2","_parameters$transitio3","_step6","nestedEvents","flatMap","type","machines","m","events","concat","map","t","_iterator6","addEventMethods","populateCheckers","_parameters$transitio4","_parameters$transitio5","_parameters$transitio6","_parameters$transitio7","_step7","nestedStates","_iterator7","capitalizedEvent","Promise","resolve","apply","arguments","then","e","reject","can","guardOrOptions","guard","onExit","onEnter","onLeave","_extends","_objectWithoutPropertiesLoose","_excluded","_iteratorSymbol","iterator","_settle","pact","_Pact","s","o","v","observer","prototype","onFulfilled","onRejected","result","thenable","_last","_classPrivateFieldLooseKey","_forOf","target","body","check","step","_cycle","next","_isSettledPact","_fixup","TypeError","values","i","array","_forTo","_id","_StateMachine","_parameters$id","_context","defineProperty","writable","_contextPromise","_boundTo","_dataPromise","_activeChild","_activeParallelState","_states","_transitions","_subscribers","_initialParameters","_classPrivateFieldLooseBase","initial","populateContext","_proto","addTransition","_classPrivateFieldLoo","eventMap","_eventMap$get","addNestedMachine","nestedState","removeState","current","_classPrivateFieldLoo2","_classPrivateFieldLoo4","arguments_","_classPrivateFieldLoo3","_exit2","_temp3","_result2","_exit3","_temp","_guard","_result3","_temp2","_transitionsByState$g2","_t$guard","on","eventOrCallback","off","_exit4","makeNestedTransition","_this3$makeNestedTran","_this3$can","getAllowedTransition","_temp9","_temp7","executeTransition","_temp6","_classPrivateFieldLoo6","data","_temp8","_temp5","_classPrivateFieldLoo5","_temp4","_ref","tryTransition","_this4","_arguments3","_catch","removeTransition","_classPrivateFieldLoo7","_classPrivateFieldLoo8","newTransitions","filter","keys","_step8","_iterator8","_t$_original$onEnter","_t$_original$onExit","_t$_original$onLeave","_t$_original$guard","inject","key","service","injectAsync","_classPrivateFieldLoo9","contextValue","_classPrivateFieldLoo10","context","dehydrate","hydrated","hydrate","inspect","_step9","_iterator9","_step10","_step9$value","transitions_","_iterator10","_step11","_step10$value","transitions__","_iterator11","hasGuard","Boolean","hasOnEnter","hasOnExit","hasOnLeave","currentState","toString","_parameters$data","_this5","_loop","_parameters$inject","_classPrivateFieldLoo11","_classPrivateFieldLoo12","_this6","hasExecuted","_temp12","child","_child$can","_child","_temp17","_exit6","_result5","_exit7","allTransitions","_temp15","_t$guard2","_this7","_result7","_temp16","_guard2","_transition$onLeave","_transition$onEnter","_transition$onExit","_transition$guard","switchNestedState","history","constructor","makeTransition","_classPrivateFieldLoo13","_classPrivateFieldLoo14","_this8","_ref2","allSubscribers","_subscribers$values","_temp21","_allSubscribers$value","_temp19","_temp18","subscriber","_temp20","_createClass","StateMachine","NestedStateMachine","_StateMachine2","_NestedStateMachine","_parameters$history","_this$_parent","machineParameters","parallel"],"mappings":"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"}