{"version":3,"file":"IsolateSerializer-CXcv6SZC.mjs","names":["machine: TStateMachine<IsolateStatus>","found: Nullable<TIsolate>","current: Nullable<TIsolate>","found: TIsolate[]","result: { value: T } | null","Walker.findClosest","VestRuntime.useHistoryIsolateAtCurrentPosition","VestRuntime.useReconciler","VestRuntime.useIsolate","VestRuntime.useHistoryIsolate","VestRuntime.useIsolate","VestRuntime.useHistoryIsolateAtCurrentPosition","VestRuntime.useRuntimeRoot","VestRuntime.Run","VestRuntime.persist"],"sources":["../src/Isolate/IsolateStatus.ts","../src/Isolate/IsolateInspector.ts","../src/Isolate/IsolateStateMachine.ts","../src/Isolate/IsolateMutator.ts","../src/IsolateWalker.ts","../src/Isolate/IsolateTransient.ts","../src/Isolate/IsolateFocused.ts","../src/errors/ErrorStrings.ts","../src/Orchestrator/RuntimeStates.ts","../src/VestRuntime.ts","../src/Bus.ts","../src/Isolate/IsolateIndexer.ts","../src/Isolate/IsolateSelectors.ts","../src/Reconciler.ts","../src/Isolate/Isolate.ts","../src/exports/IsolateSerializer.ts"],"sourcesContent":["export const IsolateStatus = {\n  DONE: 'DONE',\n  HAS_PENDING: 'HAS_PENDING',\n  INITIAL: 'INITIAL',\n  PENDING: 'PENDING',\n} as const;\n\nexport type IsolateStatus = (typeof IsolateStatus)[keyof typeof IsolateStatus];\n","import { Nullable, isNotNullish, isNullish } from 'vest-utils';\n\nimport { TIsolate } from './Isolate';\nimport { IsolateStatus } from './IsolateStatus';\n\nexport class IsolateInspector {\n  static at(isolate: Nullable<TIsolate>, at: number): Nullable<TIsolate> {\n    if (isNullish(isolate)) {\n      return null;\n    }\n    return isolate.children?.[at] ?? null;\n  }\n\n  static cursor(isolate: Nullable<TIsolate>): number {\n    if (isNullish(isolate)) {\n      return 0;\n    }\n    return isolate.children?.length ?? 0;\n  }\n\n  static canReorder<I extends TIsolate>(isolate: Nullable<I>): boolean {\n    if (isNullish(isolate)) {\n      return false;\n    }\n\n    return IsolateInspector.allowsReorder(isolate.parent);\n  }\n\n  static allowsReorder<I extends Record<any, any>>(\n    isolate: Nullable<I>,\n  ): boolean {\n    return isolate?.allowReorder === true;\n  }\n\n  static usesKey(isolate: Nullable<TIsolate>): boolean {\n    if (isNullish(isolate)) {\n      return false;\n    }\n    return isNotNullish(isolate.key);\n  }\n\n  static getChildByKey(\n    isolate: Nullable<TIsolate>,\n    key: string,\n  ): Nullable<TIsolate> {\n    if (isNullish(isolate)) {\n      return null;\n    }\n    return isolate.keys?.[key] ?? null;\n  }\n\n  static getStatus(isolate: Nullable<TIsolate>): IsolateStatus {\n    if (isNullish(isolate)) {\n      return IsolateStatus.INITIAL;\n    }\n    return isolate.status ?? IsolateStatus.INITIAL;\n  }\n\n  static statusEquals(\n    isolate: Nullable<TIsolate>,\n    status: IsolateStatus,\n  ): boolean {\n    return IsolateInspector.getStatus(isolate) === status;\n  }\n\n  static isPending(isolate: Nullable<TIsolate>): boolean {\n    return IsolateInspector.statusEquals(isolate, IsolateStatus.PENDING);\n  }\n\n  static isHasPending(isolate: Nullable<TIsolate>): boolean {\n    return IsolateInspector.statusEquals(isolate, IsolateStatus.HAS_PENDING);\n  }\n\n  static hasPending(isolate: Nullable<TIsolate>): boolean {\n    return (\n      IsolateInspector.isPending(isolate) ||\n      IsolateInspector.isHasPending(isolate)\n    );\n  }\n\n  static hasActiveChildren(isolate: Nullable<TIsolate>): boolean {\n    if (isNullish(isolate) || isNullish(isolate.children)) {\n      return false;\n    }\n\n    // Check if ANY immediate child is currently PENDING or HAS_PENDING\n    return isolate.children.some(child => IsolateInspector.hasPending(child));\n  }\n\n  static getParent(isolate: Nullable<TIsolate>): Nullable<TIsolate> {\n    return isolate?.parent ?? null;\n  }\n}\n","import { StateMachine, TStateMachine } from 'vest-utils';\n\nimport { TIsolate } from './Isolate';\nimport { IsolateInspector } from './IsolateInspector';\n\nimport { IsolateStatus } from './IsolateStatus';\n\nconst machine: TStateMachine<IsolateStatus> = {\n  initial: IsolateStatus.INITIAL,\n  states: {\n    [IsolateStatus.DONE]: {},\n    [IsolateStatus.INITIAL]: {\n      [IsolateStatus.PENDING]: IsolateStatus.PENDING,\n      [IsolateStatus.HAS_PENDING]: IsolateStatus.HAS_PENDING,\n      [IsolateStatus.DONE]: IsolateStatus.DONE,\n    },\n    [IsolateStatus.PENDING]: {\n      [IsolateStatus.DONE]: IsolateStatus.DONE,\n    },\n    [IsolateStatus.HAS_PENDING]: {\n      [IsolateStatus.DONE]: [\n        IsolateStatus.DONE,\n        (isolate: TIsolate) => !IsolateInspector.hasActiveChildren(isolate),\n      ],\n      [IsolateStatus.PENDING]: IsolateStatus.PENDING,\n    },\n  },\n};\n\nexport const IsolateStateMachine = StateMachine(machine);\n","import {\n  Nullable,\n  invariant,\n  isNullish,\n  makeResult,\n  Result,\n  isFailure,\n} from 'vest-utils';\n\nimport { RuntimeApi } from '../VestRuntime';\n\nimport { IsolateStateMachine } from './IsolateStateMachine';\nimport { IsolateStatus } from './IsolateStatus';\nimport { IsolateInspector } from './IsolateInspector';\n\nimport { TIsolate } from './Isolate';\n\nfunction bubbleUpPending(isolate: Nullable<TIsolate>): void {\n  if (isNullish(isolate)) {\n    return;\n  }\n  // If parent is already HAS_PENDING, we can stop the upward traversal.\n  if (IsolateInspector.isHasPending(isolate)) {\n    return;\n  }\n\n  const result = IsolateMutator.setHasPending(isolate);\n\n  if (isFailure(result)) {\n    return;\n  }\n\n  bubbleUpPending(isolate.parent);\n}\n\nfunction bubbleUpDone(isolate: Nullable<TIsolate>): void {\n  if (isNullish(isolate)) {\n    return;\n  }\n\n  if (!IsolateInspector.isHasPending(isolate)) {\n    return;\n  }\n\n  const result = IsolateMutator.setStatus(isolate, IsolateStatus.DONE, isolate);\n\n  if (isFailure(result)) {\n    return;\n  }\n\n  bubbleUpDone(isolate.parent);\n}\n\nexport class IsolateMutator {\n  static setParent(isolate: TIsolate, parent: Nullable<TIsolate>): TIsolate {\n    isolate.parent = parent;\n    return isolate;\n  }\n\n  static saveOutput(isolate: TIsolate, output: any): TIsolate {\n    isolate.output = output;\n    return isolate;\n  }\n\n  static setKey(isolate: TIsolate, key: Nullable<string>): TIsolate {\n    isolate.key = key;\n    return isolate;\n  }\n\n  static addChild(isolate: TIsolate, child: TIsolate): void {\n    invariant(isolate);\n\n    isolate.children = isolate.children ?? [];\n\n    isolate.children.push(child);\n    IsolateMutator.setParent(child, isolate);\n\n    if (IsolateInspector.hasPending(child)) {\n      bubbleUpPending(isolate);\n    }\n  }\n\n  static removeChild(isolate: TIsolate, node: TIsolate): void {\n    isolate.children =\n      isolate.children?.filter(child => child !== node) ?? null;\n  }\n\n  static addChildKey(isolate: TIsolate, key: string, node: TIsolate): void {\n    invariant(isolate);\n\n    isolate.keys = isolate.keys ?? {};\n\n    isolate.keys[key] = node;\n  }\n\n  static slice(isolate: TIsolate, at: number): void {\n    if (isNullish(isolate.children)) {\n      return;\n    }\n    isolate.children.length = at;\n  }\n\n  static setData(isolate: TIsolate, data: any): void {\n    isolate.data = data;\n  }\n\n  static abort(isolate: TIsolate, reason?: string): void {\n    if (isNullish(isolate.abortController)) {\n      return;\n    }\n    isolate.abortController.abort(reason);\n  }\n\n  static setStatus(\n    isolate: TIsolate,\n    status: IsolateStatus,\n    payload?: any,\n  ): Result<IsolateStatus, string> {\n    if (isolate.status === status) {\n      return makeResult.Err(`Isolate status is already ${status}`);\n    }\n\n    const currentStatus = isolate.status ?? IsolateStatus.INITIAL;\n    const nextStatus = IsolateStateMachine.staticTransition(\n      currentStatus,\n      status,\n      payload,\n    ) as IsolateStatus;\n\n    if (nextStatus === currentStatus) {\n      return makeResult.Err(\n        `Transition from ${currentStatus} to ${status} was rejected`,\n      );\n    }\n\n    isolate.status = nextStatus;\n    return makeResult.Ok(isolate.status);\n  }\n\n  static setPending(isolate: TIsolate): void {\n    const result = IsolateMutator.setStatus(isolate, IsolateStatus.PENDING);\n\n    if (isFailure(result)) {\n      return;\n    }\n\n    RuntimeApi.registerPending(isolate);\n\n    // Bubble up the HAS_PENDING status to all ancestors.\n    bubbleUpPending(isolate.parent);\n  }\n\n  static setHasPending(isolate: TIsolate): Result<IsolateStatus, string> {\n    return IsolateMutator.setStatus(isolate, IsolateStatus.HAS_PENDING);\n  }\n\n  static setDone(isolate: TIsolate): void {\n    const result = IsolateMutator.setStatus(\n      isolate,\n      IsolateStatus.DONE,\n      isolate,\n    );\n\n    if (isFailure(result)) {\n      return;\n    }\n\n    // Bubble up the DONE status to ancestors if no other children are pending.\n    bubbleUpDone(isolate.parent);\n\n    RuntimeApi.removePending(isolate);\n  }\n}\n","import {\n  Nullable,\n  isNullish,\n  dynamicValue,\n  Result,\n  makeResult,\n  isFailure,\n} from 'vest-utils';\n\nimport { IsolateInspector } from './Isolate/IsolateInspector';\nimport { type TIsolate } from './Isolate/Isolate';\nimport { IsolateMutator } from './Isolate/IsolateMutator';\n\ntype VisitOnlyPredicate = (isolate: TIsolate) => boolean;\n\n/**\n * Walks the isolate tree starting from the given node.\n * @param startNode - The starting node for the traversal.\n * @param callback - The callback function to be called for each visited node.\n * @param visitOnly - Optional predicate to filter which nodes to visit.\n */\nexport function walk(\n  startNode: TIsolate,\n  callback: (isolate: TIsolate) => Result<void>,\n  visitOnly?: VisitOnlyPredicate,\n): Result<void> {\n  if (!startNode) return makeResult.Ok(undefined);\n\n  const stack = [startNode];\n\n  while (stack.length > 0) {\n    const node = stack.pop()!;\n\n    const res = visit(node, visitOnly, callback);\n\n    if (isFailure(res)) {\n      return res;\n    }\n\n    if (node.children) {\n      pushChildren(stack, node.children);\n    }\n  }\n\n  return makeResult.Ok(undefined);\n}\n\nfunction visit(\n  node: TIsolate,\n  visitOnly: VisitOnlyPredicate | undefined,\n  callback: (isolate: TIsolate) => Result<void>,\n): Result<void> {\n  if (shouldVisit(node, visitOnly)) {\n    return callback(node);\n  }\n  return makeResult.Ok(undefined);\n}\n\nfunction pushChildren(stack: TIsolate[], children: TIsolate[]): void {\n  for (let i = children.length - 1; i >= 0; i--) {\n    stack.push(children[i]);\n  }\n}\n\nfunction shouldVisit(node: TIsolate, visitOnly?: VisitOnlyPredicate): boolean {\n  return isNullish(visitOnly) || dynamicValue(visitOnly, node);\n}\n\n/**\n * Reduces the isolate tree to a single value.\n * @param startNode - The starting node for the traversal.\n * @param callback - The reducer function.\n * @param initialValue - The initial value for the accumulator.\n * @param visitOnly - Optional predicate to filter which nodes to visit.\n * @returns The final accumulated value.\n */\nexport function reduce<T>(\n  startNode: TIsolate,\n  callback: (acc: T, isolate: TIsolate) => Result<T>,\n  initialValue: T,\n  visitOnly?: VisitOnlyPredicate,\n): T {\n  let acc = initialValue;\n\n  walk(\n    startNode,\n    node => {\n      const res = callback(acc, node);\n\n      if (isFailure(res)) {\n        return makeResult.Err(res.error);\n      }\n      acc = res.unwrap();\n      return makeResult.Ok(undefined);\n    },\n    visitOnly,\n  );\n\n  return acc;\n}\n\n/**\n * Checks if any node in the tree satisfies the predicate.\n * @param startNode - The starting node for the traversal.\n * @param predicate - The predicate function to test each node.\n * @param visitOnly - Optional predicate to filter which nodes to visit.\n * @returns True if any node satisfies the predicate, false otherwise.\n */\nexport function some(\n  startNode: TIsolate,\n  predicate: (node: TIsolate) => boolean,\n  visitOnly?: VisitOnlyPredicate,\n): boolean {\n  let hasMatch = false;\n\n  // Call the walk function with a callback function that sets hasMatch to true if the predicate is satisfied.\n  walk(\n    startNode,\n    node => {\n      if (predicate(node)) {\n        hasMatch = true;\n        return makeResult.Err(undefined);\n      }\n      return makeResult.Ok(undefined);\n    },\n    visitOnly,\n  );\n\n  return hasMatch;\n}\n\n/**\n * Checks if the tree contains a node that matches the predicate.\n * @param startNode - The starting node for the traversal.\n * @param match - The predicate function to match nodes.\n * @returns True if a matching node is found, false otherwise.\n */\nexport function has(startNode: TIsolate, match: VisitOnlyPredicate): boolean {\n  return some(startNode, () => true, match);\n}\n\n/**\n * Traverses up the tree to find the closest ancestor that satisfies the predicate,\n * then returns the first direct descendant of that ancestor that satisfies the predicate.\n * @param startNode - The starting node.\n * @param predicate - The predicate to match.\n * @returns The found node or null.\n */\nexport function findClosest<I extends TIsolate = TIsolate>(\n  startNode: TIsolate,\n  predicate: (node: TIsolate) => boolean,\n): Nullable<I> {\n  let found: Nullable<TIsolate> = null;\n  let current: Nullable<TIsolate> = startNode;\n\n  while (current) {\n    found = current.children?.find(predicate) ?? null;\n\n    if (found) {\n      break;\n    }\n\n    current = current.parent;\n  }\n\n  return found as Nullable<I>;\n}\n\n/**\n * Finds the first node in the tree that satisfies the predicate.\n * @param startNode - The starting node.\n * @param predicate - The predicate to match.\n * @param visitOnly - Optional predicate to filter which nodes to visit.\n * @returns The found node or null.\n */\nexport function find(\n  startNode: TIsolate,\n  predicate: (node: TIsolate) => boolean,\n  visitOnly?: VisitOnlyPredicate,\n): Nullable<TIsolate> {\n  let found = null;\n\n  walk(\n    startNode,\n    node => {\n      if (predicate(node)) {\n        found = node;\n        return makeResult.Err(undefined);\n      }\n      return makeResult.Ok(undefined);\n    },\n    visitOnly,\n  );\n\n  return found;\n}\n\n/**\n * Finds all nodes in the tree that satisfy the predicate.\n * @param startNode - The starting node.\n * @param predicate - The predicate to match.\n * @param visitOnly - Optional predicate to filter which nodes to visit.\n * @returns An array of found nodes.\n */\nexport function findAll(\n  startNode: TIsolate,\n  predicate: (node: TIsolate) => boolean,\n  visitOnly?: VisitOnlyPredicate,\n): TIsolate[] {\n  const found: TIsolate[] = [];\n\n  walk(\n    startNode,\n    node => {\n      if (predicate(node)) {\n        found.push(node);\n      }\n      return makeResult.Ok(undefined);\n    },\n    visitOnly,\n  );\n\n  return found;\n}\n\n/**\n * Checks if every node in the tree satisfies the predicate.\n * @param startNode - The starting node.\n * @param predicate - The predicate to match.\n * @param visitOnly - Optional predicate to filter which nodes to visit.\n * @returns True if all nodes satisfy the predicate, false otherwise.\n */\nexport function every(\n  startNode: TIsolate,\n  predicate: (node: TIsolate) => boolean,\n  visitOnly?: VisitOnlyPredicate,\n): boolean {\n  let hasMatch = true;\n  walk(\n    startNode,\n    node => {\n      if (!predicate(node)) {\n        hasMatch = false;\n        return makeResult.Err(undefined);\n      }\n      return makeResult.Ok(undefined);\n    },\n    visitOnly,\n  );\n\n  return hasMatch;\n}\n\n/**\n * Removes nodes from the tree that satisfy the predicate.\n * @param startNode - The starting node.\n * @param predicate - The predicate to match nodes to remove.\n * @param visitOnly - Optional predicate to filter which nodes to visit.\n */\nexport function pluck(\n  startNode: TIsolate,\n  predicate: (node: TIsolate) => boolean,\n  visitOnly?: VisitOnlyPredicate,\n): void {\n  walk(\n    startNode,\n    node => {\n      if (predicate(node) && node.parent) {\n        IsolateMutator.removeChild(node.parent, node);\n      }\n      return makeResult.Ok(undefined);\n    },\n    visitOnly,\n  );\n}\n\n/**\n * Finds the closest ancestor of the startNode that satisfies the predicate.\n * @param startNode - The starting node.\n * @param predicate - The predicate to match.\n * @returns The found ancestor or null.\n */\nexport function closest<I extends TIsolate = TIsolate>(\n  startNode: TIsolate,\n  predicate: (node: TIsolate) => boolean,\n): Nullable<I> {\n  let current: Nullable<TIsolate> = startNode;\n  do {\n    if (predicate(current)) {\n      return current as I;\n    }\n    current = current.parent;\n  } while (current);\n  return null;\n}\n\n/**\n * Checks if an ancestor satisfying the predicate exists.\n * @param startNode - The starting node.\n * @param predicate - The predicate to match.\n * @returns True if such an ancestor exists, false otherwise.\n */\nexport function closestExists(\n  startNode: TIsolate,\n  predicate: (node: TIsolate) => boolean,\n): boolean {\n  return !!closest(startNode, predicate);\n}\n\n/**\n * Traverses the tree and returns the first non-nullish value returned by the callback.\n * It optimizes traversal by only visiting nodes that have pending isolates or are pending themselves.\n */\nexport function mapFirst<T>(\n  startNode: TIsolate,\n  callback: (isolate: TIsolate, breakout: (value: T) => void) => void,\n): T | null {\n  const stack = [startNode];\n  let result: { value: T } | null = null;\n  const breakout = (value: T) => (result = { value });\n\n  while (stack.length > 0) {\n    if (result) {\n      break;\n    }\n\n    const node = stack.pop()!;\n    processNode(node, stack, callback, breakout);\n  }\n\n  return (result as { value: T } | null)?.value ?? null;\n}\n\nfunction processNode<T>(\n  node: TIsolate,\n  stack: TIsolate[],\n  callback: (isolate: TIsolate, breakout: (value: T) => void) => void,\n  breakout: (value: T) => void,\n): void {\n  if (!IsolateInspector.hasPending(node)) {\n    return;\n  }\n\n  runCallback(node, callback, breakout);\n\n  if (node.children) {\n    pushChildren(stack, node.children);\n  }\n}\n\nfunction runCallback<T>(\n  node: TIsolate,\n  callback: (isolate: TIsolate, breakout: (value: T) => void) => void,\n  breakout: (value: T) => void,\n): void {\n  if (IsolateInspector.isPending(node)) {\n    callback(node, breakout);\n  }\n}\n","import { CB } from 'vest-utils';\n\nimport { Isolate } from './Isolate';\nimport type { IsolatePayload, TIsolate } from './IsolateTypes';\n\n/**\n * Creates a transient isolate.\n *\n * Transient isolates are isolates that:\n * 1. Do not persist in the history tree.\n * 2. Are not reconciled with previous runs.\n * 3. Do not appear in the serialized suite dump.\n * 4. Do not interfere with the index of their siblings (they are skipped by the reconciler).\n *\n * This is useful for \"structural\" isolates that are used for control flow or grouping\n * but do not hold state that needs to be preserved between runs, such as `focused` (skip/only) isolates.\n */\nexport function IsolateTransient<Payload extends IsolatePayload>(\n  callback: CB,\n  type = 'Transient',\n  payload: Payload = {} as Payload,\n): TIsolate<Payload> {\n  return Isolate.create<Payload>(type, callback, {\n    ...payload,\n    transient: true,\n  });\n}\n","import {\n  asArray,\n  Maybe,\n  Nullish,\n  OneOrMoreOf,\n  noop,\n  isNotEmpty,\n  isStringValue,\n} from 'vest-utils';\n\nimport { IsolateTransient } from './IsolateTransient';\nimport { TIsolate } from './Isolate';\nimport { IsolateKeys } from './IsolateKeys';\n\nexport const VestIsolateTypeFocused = 'Focused';\n\nexport enum FocusModes {\n  SKIP = 'skip',\n  ONLY = 'only',\n}\n\nexport type FocusMatchExclusion = Maybe<OneOrMoreOf<string>>;\n\nexport type TIsolateFocused = TIsolate<IsolateFocusedPayload>;\n\ntype IsolateFocusedPayload = {\n  focusMode: FocusModes;\n  match: FocusMatchExclusion;\n  matchAll: boolean;\n};\n\n/**\n * Creates a focused isolate.\n * Focused isolates are transient because they only affect the current run\n * and do not need to be preserved in history or appearing in the suite result.\n */\nexport function IsolateFocused(\n  focusMode: FocusModes,\n  match?: true | FocusMatchExclusion,\n): TIsolateFocused | undefined {\n  const matchedFields = asArray(match).filter(isStringValue).filter(isNotEmpty);\n\n  const matchAll = match === true;\n\n  // If there are no fields to match and matchAll is false,\n  // skip creating the isolate entirely — it would be a no-op.\n  if (!isNotEmpty(matchedFields) && !matchAll) {\n    return undefined;\n  }\n\n  return IsolateTransient<IsolateFocusedPayload>(noop, VestIsolateTypeFocused, {\n    focusMode,\n    match: matchedFields,\n    matchAll,\n  });\n}\n\nexport class FocusSelectors {\n  static isSkipFocused(\n    focus: Nullish<TIsolateFocused>,\n    fieldName?: string,\n  ): boolean {\n    if (!focus) return false;\n    const data = focus.data;\n    if (!data || data.focusMode !== FocusModes.SKIP) return false;\n    if (data.matchAll) return true;\n    return hasFocus(focus, fieldName);\n  }\n  static isOnlyFocused(\n    focus: Nullish<TIsolateFocused>,\n    fieldName?: string,\n  ): boolean {\n    if (!focus) return false;\n    const data = focus.data;\n    if (!data || data.focusMode !== FocusModes.ONLY) return false;\n    if (data.matchAll) return true;\n    return hasFocus(focus, fieldName);\n  }\n\n  static isIsolateFocused(isolate: TIsolate): isolate is TIsolateFocused {\n    return isolate[IsolateKeys.Type] === VestIsolateTypeFocused;\n  }\n}\n\nfunction hasFocus(\n  focus: Nullish<TIsolateFocused>,\n  fieldName?: string,\n): boolean {\n  const match = asArray(focus?.data?.match);\n  if (!match.length) return false;\n\n  return !fieldName || match.includes(fieldName as string);\n}\n","export enum ErrorStrings {\n  NO_ACTIVE_ISOLATE = 'Not within an active isolate',\n  UNABLE_TO_PICK_NEXT_ISOLATE = 'Unable to pick next isolate. This is a bug, please report it to the Vest maintainers.',\n  ENCOUNTERED_THE_SAME_KEY_TWICE = `Encountered the same key \"{key}\" twice. This may lead to inconsistent or overriding of results.`,\n  INVALID_ISOLATE_CANNOT_PARSE = `Invalid isolate was passed to IsolateSerializer. Cannot proceed.`,\n}\n","export enum RuntimeState {\n  PENDING = 'PENDING',\n  STABLE = 'STABLE',\n}\n","import { createCascade } from 'context';\nimport { RuntimeEvents } from './RuntimeEvents';\nimport {\n  invariant,\n  deferThrow,\n  isNullish,\n  assign,\n  TinyState,\n  text,\n  dynamicValue,\n  createTinyState,\n  BusType,\n  createBus,\n  Nullable,\n  DynamicValue,\n  asArray,\n} from 'vest-utils';\n\nimport * as Walker from './IsolateWalker';\nimport {\n  TIsolateFocused,\n  FocusSelectors,\n  FocusModes,\n} from './Isolate/IsolateFocused';\nimport { TIsolate } from './Isolate/Isolate';\nimport { IsolateInspector } from './Isolate/IsolateInspector';\nimport { IsolateMutator } from './Isolate/IsolateMutator';\nimport { IReconciler } from './Reconciler';\nimport { ErrorStrings } from './errors/ErrorStrings';\nimport { RuntimeState } from './Orchestrator/RuntimeStates';\n\ntype CTXType = StateRefType & {\n  historyNode: Nullable<TIsolate>;\n  runtimeNode: Nullable<TIsolate>;\n  runtimeRoot: Nullable<TIsolate>;\n  stateRef: StateRefType;\n};\n\n/**\n * The state reference type for the Vest runtime.\n * Holds all mutable state for the runtime instance.\n */\nexport type StateRefType = {\n  Bus: BusType<RuntimeEvents>;\n  appData: Record<string, any>;\n  historyRoot: TinyState<Nullable<TIsolate>>;\n  Reconciler: IReconciler;\n  implicitOnlyNodes: Set<TIsolate>;\n};\n\nconst PersistedContext = createCascade<CTXType>((stateRef, parentContext) => {\n  if (parentContext) {\n    return null;\n  }\n\n  invariant(stateRef.historyRoot);\n\n  const ref = stateRef as StateRefType;\n\n  const [historyRootNode] = ref.historyRoot();\n\n  // Clear the implicit-only registry from any previous run.\n  // The Set lives on stateRef (persisted across runs), so stale\n  // entries would cause hasImplicitOnly() false positives.\n  ref.implicitOnlyNodes.clear();\n\n  const ctxRef = {} as CTXType;\n\n  assign(ctxRef, {\n    historyNode: historyRootNode,\n    runtimeNode: null,\n    runtimeRoot: null,\n    stateRef,\n  });\n\n  return ctxRef;\n});\n\n/**\n * Runs a function within the Vest runtime context.\n * This is the main entry point for executing Vest suites.\n */\nexport const Run = PersistedContext.run;\n\n/**\n * Retrieves the current runtime state (e.g., STABLE, PENDING).\n */\nexport function useRuntimeState() {\n  return useIsStable() ? RuntimeState.STABLE : RuntimeState.PENDING;\n}\n\n/**\n * Checks if the runtime is currently stable (no pending tests).\n */\nexport function useIsStable() {\n  const root = useAvailableRoot();\n\n  if (!root) {\n    return true;\n  }\n\n  return !IsolateInspector.hasPending(root);\n}\n\n/**\n * Retrieves the application-specific data stored in the runtime.\n */\nexport function useXAppData<T = object>() {\n  return useX().stateRef.appData as T;\n}\n\n/**\n * Creates a new state reference for such as the history root, pending isolates, and the current runtime state.\n */\nexport function createRef(\n  Reconciler: IReconciler,\n  setter: DynamicValue<Record<string, any>>,\n): StateRefType {\n  const ref = Object.freeze({\n    Bus: createBus<RuntimeEvents>(),\n    Reconciler,\n    appData: dynamicValue(setter),\n    historyRoot: createTinyState<Nullable<TIsolate>>(null),\n    implicitOnlyNodes: new Set<TIsolate>(),\n  });\n\n  return ref;\n}\n\n/**\n * Dispatches a runtime event to the internal Bus.\n * This is used to trigger state changes and notifications.\n */\nexport function dispatch<T extends keyof RuntimeEvents>(\n  event: RuntimeEvents[T] extends void\n    ? { type: T; payload?: void }\n    : { type: T; payload: RuntimeEvents[T] },\n) {\n  const { type, payload } = event as { type: T; payload: RuntimeEvents[T] };\n  useX().stateRef.Bus.emit(type, payload);\n}\n\n/**\n * Registers an isolate as pending.\n * This is used to track async tests and other async operations.\n */\nexport function registerPending(isolate: TIsolate) {\n  dispatch({ type: 'ISOLATE_PENDING', payload: isolate });\n}\n\n/**\n * Removes an isolate from the pending set.\n * This is used when an async test or operation completes.\n */\nexport function removePending(isolate: TIsolate) {\n  dispatch({ type: 'ISOLATE_DONE', payload: isolate });\n}\n\n/**\n * Retrieves the Reconciler used by the current runtime.\n */\nexport function useReconciler() {\n  return useX().stateRef.Reconciler;\n}\n\n/**\n * Persists the current runtime context to a callback function.\n * This allows the callback to be executed later (e.g. in an async operation)\n * while still having access to the correct runtime context.\n */\nexport function persist<T extends (...args: any[]) => any>(cb: T): T {\n  const prev = PersistedContext.useX();\n\n  return ((...args: Parameters<T>): ReturnType<T> => {\n    const ctxToUse = PersistedContext.use() ?? prev;\n    return PersistedContext.run(ctxToUse.stateRef, () => cb(...args));\n  }) as T;\n}\n/**\n * Retrieves the current runtime context.\n * Throws if called outside of a Vest runtime.\n */\nexport function useX<T = object>(): CTXType & T {\n  return PersistedContext.useX() as CTXType & T;\n}\n\n/**\n * Retrieves the history root state.\n */\nexport function useHistoryRoot() {\n  return useX().stateRef.historyRoot();\n}\n\n/**\n * Retrieves the current history isolate (the one matching the current runtime isolate).\n */\nexport function useHistoryIsolate() {\n  return useX().historyNode;\n}\n\n/**\n * Returns the history isolate at the current position.\n * If there is a parent isolate, it returns the history node from the parent's children.\n * Otherwise, it returns the history node.\n * @returns {Nullable<TIsolate>} The history isolate at the current position.\n */\nexport function useHistoryIsolateAtCurrentPosition() {\n  const parent = useIsolate();\n  const historyNode = useHistoryIsolate();\n\n  if (!parent) {\n    return historyNode;\n  }\n\n  if (isNullish(historyNode)) {\n    return null;\n  }\n\n  const nonTransientIndex = countNonTransientBefore(\n    parent.children || [],\n    IsolateInspector.cursor(parent),\n  );\n\n  return findNthNonTransient(historyNode.children || [], nonTransientIndex);\n}\n\n/**\n * Counts non-transient children before the given cursor position.\n */\nfunction countNonTransientBefore(siblings: TIsolate[], cursor: number): number {\n  let count = 0;\n  for (let i = 0; i < cursor; i++) {\n    if (!siblings[i]?.transient) {\n      count++;\n    }\n  }\n  return count;\n}\n\n/**\n * Finds the Nth non-transient child in a children array.\n * This is used to align the reconciler cursor, skipping over\n * transient nodes that should not affect the index of stateful nodes.\n */\nfunction findNthNonTransient(\n  children: TIsolate[],\n  n: number,\n): Nullable<TIsolate> {\n  return children.filter(child => child && !child.transient)[n] ?? null;\n}\n\n/**\n * Sets the history root for the runtime.\n * This is used to hydrate the runtime with previous results.\n */\nexport function useSetHistoryRoot(history: TIsolate) {\n  const [, setHistoryRoot] = useHistoryRoot();\n  setHistoryRoot(history);\n}\n\n/**\n * Retrieves a child isolate from the history tree by its key.\n */\nexport function useHistoryKey(key?: Nullable<string>): Nullable<TIsolate> {\n  if (isNullish(key)) {\n    return null;\n  }\n\n  const historyNode = useX().historyNode;\n\n  return IsolateInspector.getChildByKey(historyNode, key);\n}\n\n/**\n * Retrieves the currently active isolate in the runtime tree.\n */\nexport function useIsolate() {\n  return useX().runtimeNode ?? null;\n}\n\n/**\n * Retrieves the current cursor position within the active isolate.\n */\nexport function useCurrentCursor() {\n  const isolate = useIsolate();\n  return isolate ? IsolateInspector.cursor(isolate) : 0;\n}\n\n/**\n * Retrieves the root of the current runtime tree.\n */\nexport function useRuntimeRoot() {\n  return useX().runtimeRoot;\n}\n\n/**\n * Adds a child isolate to the current isolate and sets the parent-child relationship.\n */\nexport function useSetNextIsolateChild(child: TIsolate): void {\n  const currentIsolate = useIsolate();\n\n  invariant(currentIsolate, ErrorStrings.NO_ACTIVE_ISOLATE);\n\n  IsolateMutator.addChild(currentIsolate, child);\n  IsolateMutator.setParent(child, currentIsolate);\n\n  if (\n    FocusSelectors.isIsolateFocused(child) &&\n    child.data?.focusMode === FocusModes.ONLY\n  ) {\n    useX().stateRef.implicitOnlyNodes.add(currentIsolate);\n  }\n}\n\n/**\n * Sets a key for a child isolate within the current isolate.\n * Throws if the key is already taken.\n */\nexport function useSetIsolateKey(key: Nullable<string>, node: TIsolate): void {\n  if (!key) {\n    return;\n  }\n\n  const currentIsolate = useIsolate();\n\n  invariant(currentIsolate, ErrorStrings.NO_ACTIVE_ISOLATE);\n\n  if (isNullish(IsolateInspector.getChildByKey(currentIsolate, key))) {\n    IsolateMutator.addChildKey(currentIsolate, key, node);\n\n    return;\n  }\n\n  deferThrow(text(ErrorStrings.ENCOUNTERED_THE_SAME_KEY_TWICE, { key }));\n}\n/**\n * Returns the available root isolate.\n * If a runtime root exists (i.e. we are currently running a suite), it returns that.\n * Otherwise, it returns the history root (i.e. the result of the last run).\n */\nexport function useAvailableRoot<I extends TIsolate = TIsolate>(): I {\n  const root = useRuntimeRoot();\n\n  if (root) {\n    return root as I;\n  }\n\n  const [historyRoot] = useHistoryRoot();\n\n  return historyRoot as I;\n}\n\n/**\n * Checks whether a specific key is heavily focused out.\n */\nexport function useIsFocusedOut(key?: string): boolean {\n  const current = useIsolate();\n  if (!current) return false;\n\n  const focusMatch = Walker.findClosest<TIsolateFocused>(\n    current,\n    (child: TIsolate): boolean => {\n      if (!FocusSelectors.isIsolateFocused(child)) return false;\n      const data = child.data;\n      if (!data) return false;\n      if (data.matchAll) return true;\n\n      if (isNullish(key)) return false;\n      return asArray(data.match).includes(key);\n    },\n  );\n\n  if (focusMatch) {\n    if (FocusSelectors.isSkipFocused(focusMatch, key)) return true;\n    if (FocusSelectors.isOnlyFocused(focusMatch, key)) return false;\n  }\n\n  return hasImplicitOnly();\n}\n\nfunction hasImplicitOnly(): boolean {\n  let current = useIsolate();\n  const registry = useX().stateRef.implicitOnlyNodes;\n\n  while (current) {\n    if (registry.has(current)) {\n      return true;\n    }\n    current = current.parent;\n  }\n\n  return false;\n}\n\n/**\n * Resets the history root.\n */\nexport function reset() {\n  const [, , resetHistoryRoot] = useHistoryRoot();\n\n  resetHistoryRoot();\n}\n\nexport const RuntimeApi = {\n  Run,\n  createRef,\n  dispatch,\n  hasImplicitOnly,\n  persist,\n  registerPending,\n  removePending,\n  reset,\n  useAvailableRoot,\n  useCurrentCursor,\n  useHistoryRoot,\n  useIsFocusedOut,\n  useIsStable,\n  useRuntimeState,\n  useSetHistoryRoot,\n  useSetNextIsolateChild,\n  useXAppData,\n};\n","import { BusType, isNullish } from 'vest-utils';\n\nimport { persist, useX } from './VestRuntime';\nimport { RuntimeEvents } from './RuntimeEvents';\n\nexport function useBus<\n  E extends Record<string, any> = RuntimeEvents,\n>(): BusType<E> {\n  return useX().stateRef.Bus as unknown as BusType<E>;\n}\n\n/*\n  Returns an emitter, but it also has a shortcut for emitting an event immediately\n  by passing an event name.\n*/\n\nexport function useEmit<\n  E extends Record<string, any> = RuntimeEvents,\n  T extends keyof E = keyof E,\n>(\n  event: T,\n  ...args: E[T] extends void ? [payload?: E[T]] : [payload: E[T]]\n): void;\nexport function useEmit<_E extends Record<string, any> = RuntimeEvents>(): (\n  event: string,\n  data?: any,\n) => void;\nexport function useEmit(event?: string, data?: any): any {\n  const emit = useBus().emit;\n\n  if (!isNullish(event)) {\n    // @ts-ignore - We're allowing any event name here because the bus might be extended\n    emit(event, data);\n  }\n\n  return persist(emit);\n}\n\nexport function usePrepareEmitter<\n  E extends Record<string, any> = RuntimeEvents,\n  T extends keyof E = keyof E,\n>(event: T): (arg: E[T]) => void {\n  const emit = useEmit<E>();\n\n  return (arg: E[T]) => emit(event as string, arg);\n}\n","import { isNullish, Nullable } from 'vest-utils';\n\nimport { TIsolate } from './IsolateTypes';\n\nexport function createHistoryIndex(\n  children: Nullable<TIsolate[]>,\n): Map<string, TIsolate | TIsolate[]> {\n  const index = new Map<string, TIsolate | TIsolate[]>();\n\n  if (!children) {\n    return index;\n  }\n\n  for (const child of children) {\n    addToIndex(index, child);\n  }\n\n  return index;\n}\n\nfunction addToIndex(\n  index: Map<string, TIsolate | TIsolate[]>,\n  isolate: TIsolate,\n): void {\n  const { key } = isolate;\n\n  if (isNullish(key)) {\n    return;\n  }\n\n  const existing = index.get(key);\n\n  if (existing) {\n    if (Array.isArray(existing)) {\n      existing.push(isolate);\n    } else {\n      index.set(key, [existing, isolate]);\n    }\n  } else {\n    index.set(key, isolate);\n  }\n}\n","import { Maybe } from 'vest-utils';\n\nimport { TIsolate } from './Isolate';\nimport { IsolateKeys } from './IsolateKeys';\n\nexport function isIsolateType<I extends TIsolate>(\n  node: Maybe<TIsolate>,\n  type: string,\n): node is I {\n  return node?.[IsolateKeys.Type] === type;\n}\n\nexport function isSameIsolateType<A extends TIsolate, B extends TIsolate>(\n  a: A,\n  b: B,\n): boolean {\n  return isIsolateType(a, b[IsolateKeys.Type]);\n}\n\nexport function isSameIsolateIdentity<A extends TIsolate, B extends TIsolate>(\n  a: A,\n  b: B,\n): boolean {\n  return Object.is(a, b) || (isSameIsolateType(a, b) && a.key === b.key);\n}\n","import {\n  Maybe,\n  Nullable,\n  invariant,\n  isNullish,\n  dynamicValue,\n} from 'vest-utils';\n\nimport { type TIsolate } from './Isolate/Isolate';\nimport { createHistoryIndex } from './Isolate/IsolateIndexer';\nimport { IsolateInspector } from './Isolate/IsolateInspector';\nimport { IsolateMutator } from './Isolate/IsolateMutator';\nimport { isSameIsolateType } from './Isolate/IsolateSelectors';\nimport * as VestRuntime from './VestRuntime';\nimport { ErrorStrings } from './errors/ErrorStrings';\n// import { isSameIsolateType } from 'IsolateSelectors';\n\n// I would rather not use `any` here, but instead use `Isolate`.\n// The problem is that it breaks the actual implementation of `Isolate` in `IsolateTest`\n// As it is not properly extending `Isolate`.\nexport interface IReconciler<I = any> {\n  (currentNode: I, historyNode: I): Nullable<I>;\n}\n\nfunction BaseReconciler(\n  currentNode: TIsolate,\n  historyNode: TIsolate,\n): TIsolate {\n  if (isNullish(historyNode)) {\n    return currentNode;\n  }\n  return currentNode;\n}\n\nexport class Reconciler {\n  /**\n   * Reconciles the current isolate with the history isolate.\n   * If the current isolate is of a different type than the history isolate,\n   * the current isolate is returned.\n   * Otherwise, the reconciler function is called to determine the next isolate.\n   * If the reconciler function returns null or undefined, the base reconciler is used.\n   * If no history isolate exists, the current isolate is returned.\n   * @param node The current isolate to reconcile.\n   * @returns The next isolate after reconciliation.\n   */\n  static reconcile(node: TIsolate): TIsolate {\n    // If the node is transient, it should not be reconciled with history\n    // and should not consume the history cursor.\n    // This allows us to insert/remove transient nodes without affecting\n    // the stable identity of their siblings.\n    if (node.transient) {\n      return node;\n    }\n\n    const localHistoryNode = VestRuntime.useHistoryIsolateAtCurrentPosition();\n\n    const nextNodeResult = pickNextNode(node, localHistoryNode);\n\n    invariant(nextNodeResult, ErrorStrings.UNABLE_TO_PICK_NEXT_ISOLATE);\n\n    return nextNodeResult;\n  }\n\n  static dropNextNodesOnReorder<I extends TIsolate>(\n    reorderLogic: (newNode: I, prevNode: Maybe<TIsolate>) => boolean,\n    newNode: I,\n    prevNode: Maybe<TIsolate>,\n  ): boolean {\n    const didReorder = reorderLogic(newNode, prevNode);\n\n    if (didReorder) {\n      removeAllNextNodesInIsolate();\n    }\n\n    return didReorder;\n  }\n\n  static handleIsolateNodeWithKey<I extends TIsolate>(\n    node: TIsolate,\n\n    // The revoke function allows the caller to revoke the previous node\n    revoke: ((node: I) => boolean) | false,\n  ): TIsolate {\n    invariant(IsolateInspector.usesKey(node));\n\n    const prevNodeByKey = getNodeByKey(node.key);\n    let nextNode = node;\n\n    if (!isNullish(prevNodeByKey) && !dynamicValue(revoke, prevNodeByKey)) {\n      nextNode = prevNodeByKey;\n    }\n\n    VestRuntime.useSetIsolateKey(node.key, nextNode);\n\n    return nextNode;\n  }\n}\n\nfunction pickNextNode(\n  currentNode: TIsolate,\n  historyNode: Nullable<TIsolate>,\n): TIsolate {\n  if (isNullish(historyNode)) {\n    return handleNoHistoryNode(currentNode);\n  }\n\n  if (!isSameIsolateType(currentNode, historyNode)) {\n    return currentNode;\n  }\n\n  const reconciler = VestRuntime.useReconciler();\n\n  return (\n    reconciler(currentNode, historyNode) ??\n    BaseReconciler(currentNode, historyNode)\n  );\n}\n\nfunction handleNoHistoryNode<I extends TIsolate>(newNode: I): I {\n  if (IsolateInspector.usesKey(newNode)) {\n    return Reconciler.handleIsolateNodeWithKey(newNode, false) as I;\n  }\n\n  return newNode;\n}\n\nfunction removeAllNextNodesInIsolate() {\n  const currentNode = VestRuntime.useIsolate();\n  const historyNode = VestRuntime.useHistoryIsolate();\n\n  if (!historyNode || !currentNode) {\n    // This is probably unreachable, but TS is not convinced.\n    // Let's play it safe.\n    /* istanbul ignore next */\n    return;\n  }\n\n  IsolateMutator.slice(historyNode, IsolateInspector.cursor(currentNode));\n}\n\nconst historyIndexCache = new WeakMap<\n  TIsolate,\n  Map<string, TIsolate | TIsolate[]>\n>();\n\nfunction getNodeByKey(key: Nullable<string>): Nullable<TIsolate> {\n  const historyParent = VestRuntime.useHistoryIsolate();\n\n  if (isNullish(key) || !historyParent) {\n    return null;\n  }\n\n  const index = getHistoryIndex(historyParent);\n  const match = index.get(key);\n\n  if (!match) {\n    return null;\n  }\n\n  if (Array.isArray(match)) {\n    return match[0];\n  }\n\n  return match;\n}\n\nfunction getHistoryIndex(\n  historyParent: TIsolate,\n): Map<string, TIsolate | TIsolate[]> {\n  let index = historyIndexCache.get(historyParent);\n\n  if (!index) {\n    index = createHistoryIndex(historyParent.children);\n    historyIndexCache.set(historyParent, index);\n  }\n\n  return index;\n}\n","import { CB, Maybe, Nullable, isNotNullish, isPromise } from 'vest-utils';\n\nimport { useEmit } from '../Bus';\nimport { Reconciler } from '../Reconciler';\nimport * as VestRuntime from '../VestRuntime';\n\nimport { IsolateKeys } from './IsolateKeys';\nimport { IsolateMutator } from './IsolateMutator';\nimport { IsolateStatus } from './IsolateStatus';\nimport type { IsolateKey, IsolatePayload, TIsolate } from './IsolateTypes';\n\nexport { IsolateKey, TIsolate };\n\nexport class Isolate {\n  // eslint-disable-next-line max-statements\n  static create<Payload extends IsolatePayload>(\n    type: string,\n    callback: CB,\n    payload: Maybe<Payload> = undefined,\n    key?: IsolateKey,\n  ): TIsolate<Payload> {\n    const parent = VestRuntime.useIsolate();\n\n    const newCreatedNode = IsolateMutator.setParent(\n      baseIsolate(type, payload, key),\n      parent,\n    );\n\n    const nextIsolateChild = Reconciler.reconcile(newCreatedNode);\n\n    const localHistoryNode = VestRuntime.useHistoryIsolateAtCurrentPosition();\n\n    const shouldRunNew = Object.is(nextIsolateChild, newCreatedNode);\n\n    if (parent) {\n      // We are within an isolate context. This means that\n      // we need to set the new node to be the child of this parent node.\n      VestRuntime.useSetNextIsolateChild(nextIsolateChild);\n    }\n\n    let output;\n\n    if (shouldRunNew) {\n      output = useRunAsNew(localHistoryNode, newCreatedNode, callback);\n    } else {\n      const emit = useEmit();\n      output = nextIsolateChild.output;\n      emit('ISOLATE_RECONCILED', nextIsolateChild);\n    }\n\n    IsolateMutator.saveOutput(nextIsolateChild, output);\n\n    if (!parent) {\n      // We're exiting the node, and there is no parent. This means\n      // that we're at the top level and this node should be set\n      // as the new root of the history tree.\n      VestRuntime.useSetHistoryRoot(nextIsolateChild);\n    }\n\n    return nextIsolateChild as TIsolate<Payload>;\n  }\n\n  static isIsolate(node: any): node is TIsolate {\n    return isNotNullish(node) && node[IsolateKeys.Type];\n  }\n}\n\n/**\n * Creates a new child isolate context where the local history node is the current history node, thus advancing the history cursor.\n * Runs the callback function and returns its output.\n * @param localHistoryNode The local history node.\n * @param current The current isolate.\n * @param callback The callback function to execute.\n * @returns The output of the callback function.\n */\nfunction useRunAsNew<Callback extends CB = CB>(\n  localHistoryNode: Nullable<TIsolate>,\n  current: TIsolate,\n  callback: CB,\n): ReturnType<Callback> {\n  const runtimeRoot = VestRuntime.useRuntimeRoot();\n\n  // We're creating a new child isolate context where the local history node\n  // is the current history node, thus advancing the history cursor.\n  const output = VestRuntime.Run(\n    {\n      historyNode: localHistoryNode,\n      runtimeNode: current,\n      ...(!runtimeRoot && { runtimeRoot: current }),\n    },\n    () => useRunAsNewCallback(current, callback),\n  );\n\n  current.output = output;\n  return output;\n}\n\nfunction useRunAsNewCallback(current: TIsolate, callback: CB): any {\n  const emit = useEmit();\n  emit('ISOLATE_ENTER', current);\n  const output = callback(current);\n\n  if (isPromise(output)) {\n    emit('ISOLATE_PENDING', current);\n    IsolateMutator.setPending(current);\n    output.then(\n      VestRuntime.persist(iso => {\n        if (Isolate.isIsolate(iso)) {\n          IsolateMutator.addChild(current, iso);\n        }\n\n        IsolateMutator.setDone(current);\n        emit('ASYNC_ISOLATE_DONE', current);\n      }),\n      VestRuntime.persist(() => {\n        IsolateMutator.setDone(current);\n        emit('ASYNC_ISOLATE_DONE', current);\n      }),\n    );\n  } else {\n    IsolateMutator.setDone(current);\n  }\n\n  return output;\n}\n\nclass IsolateInstance implements TIsolate {\n  [IsolateKeys.Type]: string;\n  children: Nullable<TIsolate[]> = null;\n  [IsolateKeys.Keys]: Nullable<Record<string, TIsolate>> = null;\n  [IsolateKeys.Parent]: Nullable<TIsolate> = null;\n  output: any = null;\n  key: IsolateKey = null;\n  [IsolateKeys.AllowReorder]: Maybe<boolean> = undefined;\n  [IsolateKeys.Transient]: Maybe<boolean> = undefined;\n  [IsolateKeys.Status]: IsolateStatus = IsolateStatus.INITIAL;\n  [IsolateKeys.AbortController]: Nullable<AbortController> = null;\n  [IsolateKeys.Data]: Maybe<any>;\n\n  constructor(\n    type: string,\n    payload: Maybe<IsolatePayload> = undefined,\n    key: IsolateKey = null,\n  ) {\n    this[IsolateKeys.Type] = type;\n    this.key = key;\n    const { allowReorder, transient, status, ...data } = payload ?? {};\n    this[IsolateKeys.AllowReorder] = allowReorder;\n    this[IsolateKeys.Transient] = transient;\n    if (status) {\n      this[IsolateKeys.Status] = status;\n    }\n    this[IsolateKeys.Data] = data;\n  }\n}\n\nfunction baseIsolate(\n  type: string,\n  payload: Maybe<IsolatePayload> = undefined,\n  key: IsolateKey = null,\n): TIsolate {\n  return new IsolateInstance(type, payload, key);\n}\n","import {\n  Nullable,\n  hasOwnProperty,\n  isNullish,\n  isStringValue,\n  isFailure,\n  text,\n  makeResult,\n  Result,\n  isUnsafeKey,\n} from 'vest-utils';\nimport { expandObject, minifyObject } from 'vest-utils/minifyObject';\n\nimport { TIsolate } from '../Isolate/Isolate';\nimport { ExcludedFromDump, IsolateKeys } from '../Isolate/IsolateKeys';\nimport { IsolateMutator } from '../Isolate/IsolateMutator';\nimport { ErrorStrings } from '../errors/ErrorStrings';\n\nexport class IsolateSerializer {\n  static safeDeserialize(\n    node: Record<string, any> | TIsolate | string,\n  ): Result<TIsolate, Error> {\n    try {\n      const expanded = expandNode(node);\n      if (isFailure(IsolateSerializer.validateIsolate(expanded))) {\n        return makeResult.Err(\n          new Error(ErrorStrings.INVALID_ISOLATE_CANNOT_PARSE),\n        );\n      }\n      return makeResult.Ok(hydrateIsolate(expanded));\n    } catch (error) {\n      return makeResult.Err(\n        error instanceof Error ? error : new Error(String(error)),\n      );\n    }\n  }\n\n  static deserialize(node: Record<string, any> | TIsolate | string): TIsolate {\n    const result = IsolateSerializer.safeDeserialize(node);\n    return result.unwrap();\n  }\n\n  static serialize(\n    isolate: Nullable<TIsolate>,\n    replacer?: (value: any, key: string) => any,\n  ): string {\n    if (isNullish(isolate)) {\n      return '';\n    }\n\n    const minified = minifyObject(isolate, (value: any, key: string) => {\n      if (ExcludedFromDump.has(key)) {\n        return undefined;\n      }\n\n      // Drop transient nodes — returning undefined causes\n      // minifyObject to skip the entry entirely.\n      // Transient nodes are not part of the persistent state\n      // and should not be serialized.\n      if (value?.transient) {\n        return undefined;\n      }\n\n      if (replacer) {\n        return replacer(value, key);\n      }\n      return value;\n    });\n\n    return JSON.stringify(minified);\n  }\n\n  static validateIsolate(\n    node: Record<string, any> | TIsolate,\n  ): Result<TIsolate, string> {\n    return hasOwnProperty(node, IsolateKeys.Type)\n      ? makeResult.Ok(node as TIsolate)\n      : makeResult.Err(text(ErrorStrings.INVALID_ISOLATE_CANNOT_PARSE));\n  }\n}\n\nfunction processChildren(current: TIsolate, queue: TIsolate[]): void {\n  const children = current.children;\n\n  if (!children) {\n    return;\n  }\n\n  current.children = children.map(child => {\n    const nextChild = { ...child };\n\n    IsolateMutator.setParent(nextChild, current);\n    queue.push(nextChild);\n\n    if (nextChild.key) {\n      current.keys = current.keys ?? {};\n      current.keys[nextChild.key] = nextChild;\n    }\n\n    return nextChild;\n  });\n}\n\nfunction hydrateIsolate(root: TIsolate): TIsolate {\n  const queue = [root];\n\n  while (queue.length) {\n    const current = queue.shift();\n    if (current) {\n      processChildren(current, queue);\n    }\n  }\n\n  return root;\n}\n\nfunction expandNode(node: Record<string, any> | TIsolate | string): TIsolate {\n  const parsed = isStringValue(node)\n    ? JSON.parse(node, safeReviver)\n    : ({ ...node } as TIsolate);\n  const root = Array.isArray(parsed) ? parsed : [parsed, {}];\n  const expanded = expandObject(root[0], root[1]);\n  return expanded as TIsolate;\n}\n\nfunction safeReviver(key: string, value: any): any {\n  if (isUnsafeKey(key)) {\n    return;\n  }\n  return value;\n}\n"],"mappings":"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"}