{"version":3,"file":"vest-C_ndMBdJ.mjs","names":["RegistryPredicates: Record<IsolateCategory, RegistryCategoryConfig>","test","stateRef: StateExtra","VestReconciler","output: FailureMessages","group","fieldName","fieldName: F","message: string | undefined","groupName: G | undefined","summary","group","mode","reconcilers: IsolateReconciler[]","payload: IsolateTestPayload","VestRuntimeIsolateFocused","conditionRef: IncludeConditionRef<F, G>","skip","only","only"],"sources":["../src/errors/ErrorStrings.ts","../src/hooks/optional/Modes.ts","../src/core/context/SuiteContext.ts","../src/core/test/TestRegistry.ts","../src/suiteResult/Severity.ts","../src/core/isolate/VestIsolateType.ts","../src/core/isolate/IsolateTest/VestTest.ts","../src/suiteResult/SuiteResultTypes.ts","../src/core/isolate/registerTests.ts","../src/core/Runtime.ts","../src/core/test/helpers/matchingFieldName.ts","../src/suiteResult/selectors/collectFailures.ts","../src/suiteResult/selectors/suiteSelectors.ts","../src/suiteResult/SummaryFailure.ts","../src/core/isolate/IsolateSuite/IsolateSuite.ts","../src/hooks/optional/OptionalTypes.ts","../src/hooks/optional/optional.ts","../src/core/selectors/useIsPending.ts","../src/suiteResult/selectors/useSetValidProperty.ts","../src/suiteResult/selectors/useProduceSuiteSummary.ts","../src/suiteResult/suiteResult.ts","../src/suiteResult/selectors/LazyDraft.ts","../src/isolates/skipWhen.ts","../src/hooks/focused/useIsExcluded.ts","../src/core/test/helpers/nonMatchingSeverityProfile.ts","../src/suiteResult/selectors/hasFailuresByTestObjects.ts","../src/hooks/optional/mode.ts","../src/core/test/testLevelFlowControl/verifyTestRun.ts","../src/core/isolate/IsolateTest/isSameProfileTest.ts","../src/core/isolate/IsolateTest/cancelOverriddenPendingTest.ts","../src/core/isolate/IsolateTest/TestWalker.ts","../src/hooks/optional/omitOptionalFields.ts","../src/suite/runCallbacks.ts","../src/core/VestBus/VestBus.ts","../src/core/isolate/IsolateTest/IsolateTestReconciler.ts","../src/core/isolate/VestReconciler.ts","../src/core/isolate/IsolateTest/IsolateTest.ts","../src/core/test/helpers/shouldUseErrorMessage.ts","../src/core/test/Abortable.ts","../src/core/test/testLevelFlowControl/runTest.ts","../src/core/test/validateTestParams.ts","../src/core/test/test.ts","../src/hooks/focused/focused.ts","../src/hooks/focused/useHasOnliedTests.ts","../src/hooks/include.ts","../src/hooks/useWarn.ts","../src/hooks/warn.ts","../src/core/isolate/IsolateEach/IsolateEach.ts","../src/isolates/each.ts","../src/isolates/group.ts","../src/isolates/omitWhen.ts","../src/suite/after/deferDoneCallback.ts","../src/suite/getStandardSchema.ts","../src/suite/getTypedMethods.ts","../src/suite/useCreateSuiteRunner.ts","../src/suite/useCreateSuiteMethods.ts","../src/suite/validateSuiteCallback/validateSuiteCallback.ts","../src/suite/createSuite.ts"],"sourcesContent":["export enum ErrorStrings {\n  HOOK_CALLED_OUTSIDE = 'hook called outside of a running suite.',\n  EXPECTED_VEST_TEST = 'Expected value to be an instance of IsolateTest',\n  FIELD_NAME_REQUIRED = 'Field name must be passed',\n  SUITE_MUST_BE_INITIALIZED_WITH_FUNCTION = 'Suite must be initialized with a function',\n  PARSER_EXPECT_RESULT_OBJECT = \"Vest parser: expected argument at position 0 to be Vest's result object.\",\n  WARN_MUST_BE_CALLED_FROM_TEST = 'Warn must be called from within the body of a test function',\n  USE_WARN_MUST_BE_CALLED_FROM_TEST = 'useWarn must be called from within the body of a test function',\n  EACH_CALLBACK_MUST_BE_A_FUNCTION = 'Each must be called with a function',\n  INVALID_PARAM_PASSED_TO_FUNCTION = 'Incompatible params passed to {fn_name} function. \"{param}\" must be of type {expected}',\n  TESTS_CALLED_IN_DIFFERENT_ORDER = `Vest Critical Error: Tests called in different order than previous run.\n    expected: {fieldName}\n    received: {prevName}\n    This can happen on one of two reasons:\n    1. You're using if/else statements to conditionally select tests. Instead, use \"skipWhen\".\n    2. You are iterating over a list of tests, and their order changed. Use \"each\" and a custom key prop so that Vest retains their state.`,\n  UNEXPECTED_TEST_REGISTRATION_ERROR = `Unexpected error encountered during test registration.\n      Please report this issue to Vest's Github repository.\n      Test Object: {testObject}.\n      Error: {error}.`,\n  UNEXPECTED_TEST_RUN_ERROR = `Unexpected error encountered during test run. Please report this issue to Vest's Github repository.\n      Test Object: {testObject}.`,\n  INCLUDE_SELF = 'Trying to call include.when on the same field.',\n}\n","export enum Modes {\n  EAGER = 'EAGER',\n  ALL = 'ALL',\n  ONE = 'ONE',\n}\n","import { createCascade } from 'context';\nimport { assign, TinyState, createTinyState, DynamicValue } from 'vest-utils';\n\nimport { Modes } from '../../hooks/optional/Modes';\nimport { SuiteModifiers } from '../../suite/SuiteTypes';\nimport { TFieldName, TSchema } from '../../suiteResult/SuiteResultTypes';\nimport { TIsolateTest } from '../isolate/IsolateTest/IsolateTest';\n\nexport const SuiteContext = createCascade<CTXType>((ctxRef, parentContext) => {\n  if (parentContext) {\n    return null;\n  }\n\n  return assign(\n    {\n      inclusion: {},\n      mode: createTinyState<Modes>(Modes.EAGER),\n      modifiers: {\n        onlyGroup: new Set<string>(),\n        skipGroup: new Set<string>(),\n      },\n      schema: null,\n      suiteParams: [],\n    },\n    ctxRef,\n  );\n});\n\ntype CTXType = {\n  inclusion: Record<string, DynamicValue<boolean>>;\n  mode: TinyState<Modes>;\n  suiteParams: any[];\n  currentTest?: TIsolateTest;\n  skipped?: boolean;\n  schema: TSchema;\n  modifiers: TInternalModifiers<TFieldName>;\n};\n\nexport type TInternalModifiers<F extends TFieldName = TFieldName> = Omit<\n  SuiteModifiers<F>,\n  'onlyGroup' | 'skipGroup'\n> & {\n  onlyGroup: Set<string>;\n  skipGroup: Set<string>;\n};\n\nexport function useCurrentTest(msg?: string) {\n  return SuiteContext.useX(msg).currentTest;\n}\n\nexport function useInclusion() {\n  return SuiteContext.useX().inclusion;\n}\n\nexport function useMode() {\n  return SuiteContext.useX().mode();\n}\n\nexport function useSkipped() {\n  return SuiteContext.useX().skipped ?? false;\n}\n\nexport function useSuiteParams() {\n  return SuiteContext.useX().suiteParams;\n}\n","import {\n  IsolateRegistry,\n  RegistryCategoryConfig,\n  TIsolate,\n} from 'vestjs-runtime';\n\nimport { TIsolateTest } from '../isolate/IsolateTest/IsolateTest';\nimport { VestTest } from '../isolate/IsolateTest/VestTest';\nimport { TFieldName } from '../../suiteResult/SuiteResultTypes';\n\n/**\n * Represents the categories of isolates tracked within the registry.\n */\nexport type IsolateCategory =\n  | 'all'\n  | 'failed'\n  | 'omitted'\n  | 'passing'\n  | 'pending'\n  | 'tested'\n  | 'valid'\n  | 'warning';\n\n/**\n * A predicate function used to determine if an isolate belongs to a given category.\n */\ntype IsolatePredicate = (isolate: TIsolate) => boolean;\n\n/**\n * Helper to extract field name from test isolate.\n */\nconst getFieldName = (isolate: TIsolate): TFieldName =>\n  (isolate as TIsolateTest).data?.fieldName;\n\n/**\n * Helper to create a predicate that first checks if an isolate is a VestTest.\n */\nconst isTestAnd =\n  (predicate: (isolate: TIsolateTest) => boolean): IsolatePredicate =>\n  (isolate: TIsolate) =>\n    VestTest.is(isolate) && predicate(isolate as TIsolateTest);\n\n/**\n * Set of predicates used to categorize isolates.\n */\nconst RegistryPredicates: Record<IsolateCategory, RegistryCategoryConfig> = {\n  all: {\n    getKey: getFieldName,\n    predicate: isTestAnd(() => true),\n  },\n  failed: {\n    getKey: getFieldName,\n    predicate: isTestAnd(isolate => VestTest.isFailing(isolate).unwrap()),\n  },\n  omitted: {\n    getKey: getFieldName,\n    predicate: isTestAnd(isolate => VestTest.isOmitted(isolate).unwrap()),\n  },\n  passing: {\n    getKey: getFieldName,\n    predicate: isTestAnd(isolate => VestTest.isPassing(isolate).unwrap()),\n  },\n  pending: {\n    getKey: getFieldName,\n    predicate: isTestAnd(isolate => VestTest.isStarted(isolate).unwrap()),\n  },\n  tested: {\n    getKey: getFieldName,\n    predicate: isTestAnd(isolate => VestTest.isTested(isolate).unwrap()),\n  },\n  valid: {\n    getKey: getFieldName,\n    predicate: isTestAnd(\n      isolate =>\n        VestTest.isPassing(isolate).unwrap() ||\n        VestTest.isWarning(isolate).unwrap(),\n    ),\n  },\n  warning: {\n    getKey: getFieldName,\n    predicate: isTestAnd(isolate => VestTest.isWarning(isolate).unwrap()),\n  },\n};\n\n/**\n * Updates the registration of an isolate in all relevant characteristic indices.\n *\n * This function is called reactively whenever an isolate is registered or its state changes.\n * It re-evaluates all known predicates and ensures the isolate is correctly added to or\n * removed from the corresponding registry maps.\n *\n * @param isolate - The isolate node to update in the registry.\n */\nexport function useUpdateRegistry(isolate: TIsolate) {\n  IsolateRegistry.useUpdateRegistry(isolate, RegistryPredicates);\n}\n\n/**\n * Accessor for the registry. Retrieves isolates indexed under a specific characteristic.\n *\n * @param category - The characteristic category to look up (e.g., 'failed', 'pending').\n * @param fieldName - Optional field name to filter the results by.\n * @returns A Set containing the isolates that currently match the characteristic.\n *\n * @example\n * ```typescript\n * // Get all failed tests for the 'email' field\n * const failedEmailTests = useGetFromRegistry('failed', 'email');\n * ```\n */\nexport function useGetFromRegistry(\n  category: IsolateCategory,\n  fieldName?: string,\n): Set<TIsolate> {\n  return IsolateRegistry.useGetFromRegistry(category, fieldName);\n}\n\n/**\n * Checks if the registry contains any isolates for a given category and optional field name.\n *\n * @param category - The category to check for.\n * @param fieldName - The name of the field to check for.\n * @returns true if the registry contains matching isolates.\n */\nexport function useHasFromRegistry(\n  category: IsolateCategory,\n  fieldName?: string,\n): boolean {\n  return IsolateRegistry.useHasFromRegistry(category, fieldName);\n}\n\n/**\n * Removes all entries for a specific field name from the registry.\n * This is useful when a field is removed from the suite and its state should be cleared.\n *\n * @param fieldName - The name of the field to remove from the registry.\n */\nexport function useRemoveFieldFromRegistry(fieldName: string): void {\n  IsolateRegistry.useRemoveFieldFromRegistry(fieldName);\n}\n\n/**\n * Initializes registry event listeners.\n *\n * @param bus - The event bus to subscribe to.\n */\nexport function useRegistryBusEvents(bus: any) {\n  // We're listening to the REMOVE_FIELD event to ensure the registry\n  // stays in sync when a field is removed from the suite.\n  bus.on('REMOVE_FIELD', (fieldName: string) => {\n    useRemoveFieldFromRegistry(fieldName);\n  });\n}\n\n/**\n * Clears all registry indices from the root isolate.\n * This is primarily used during tree reprocessing to ensure a clean slate\n * before rebuilding the registry from the current tree state.\n *\n * @param root - The suite's root isolate containing the registry.\n */\nexport function useClearRegistry(root: TIsolate) {\n  IsolateRegistry.useClearRegistry(root);\n}\n","export enum Severity {\n  WARNINGS = 'warnings',\n  ERRORS = 'errors',\n}\n\nexport enum SeverityCount {\n  ERROR_COUNT = 'errorCount',\n  WARN_COUNT = 'warnCount',\n}\n\nexport function countKeyBySeverity(severity: Severity): SeverityCount {\n  return severity === Severity.ERRORS\n    ? SeverityCount.ERROR_COUNT\n    : SeverityCount.WARN_COUNT;\n}\n\nexport enum TestSeverity {\n  Error = 'error',\n  Warning = 'warning',\n}\n","import { CB } from 'vest-utils';\nimport { Isolate, IsolateKey, TIsolate } from 'vestjs-runtime';\n\nimport { TIsolateTest } from './IsolateTest/IsolateTest';\n\nexport const VestIsolateType = {\n  Each: 'Each',\n  Focused: 'Focused',\n  Group: 'Group',\n  OmitWhen: 'OmitWhen',\n  Reorderable: 'Reorderable',\n  SkipWhen: 'SkipWhen',\n  Suite: 'Suite',\n  Test: 'Test',\n};\n\nexport type TVestIsolate<P = void> = TIsolate<\n  P & {\n    tests: TIsolateTest[];\n  }\n>;\n\nexport function createVestIsolate<Payload = Record<string, any>>(\n  type: string,\n  cb: CB,\n  payload: Payload,\n  key?: IsolateKey,\n): TVestIsolate<Payload> {\n  return Isolate.create(\n    type,\n    cb,\n    {\n      ...payload,\n      tests: [],\n    },\n    key,\n  );\n}\n\nexport function isVestIsolate(\n  isolate: TIsolate | null,\n): isolate is TVestIsolate {\n  return Array.isArray(isolate?.data?.tests);\n}\n","import {\n  Maybe,\n  invariant,\n  isPromise,\n  dynamicValue,\n  makeResult,\n  Result,\n} from 'vest-utils';\nimport {\n  IsolateMutator,\n  IsolateSelectors,\n  TIsolate,\n  Walker,\n} from 'vestjs-runtime';\n\nimport { useUpdateRegistry } from '../../test/TestRegistry';\n\nimport { ErrorStrings } from '../../../errors/ErrorStrings';\nimport { TIsolateGroup } from '../../../isolates/group';\nimport { TestSeverity } from '../../../suiteResult/Severity';\nimport { TFieldName, TGroupName } from '../../../suiteResult/SuiteResultTypes';\nimport {\n  IsolateTestStateMachine,\n  TestAction,\n  TestStatus,\n} from '../../StateMachines/IsolateTestStateMachine';\nimport { VestIsolateType } from '../VestIsolateType';\n\nimport type { TIsolateTest } from './IsolateTest';\n\nexport class VestTest {\n  static stateMachine = IsolateTestStateMachine;\n\n  // Read\n  /**\n   * Retrieves the data object from the test isolate.\n   */\n  static getData<F extends TFieldName = TFieldName>(test: TIsolateTest<F>) {\n    invariant(test.data);\n    return test.data;\n  }\n\n  /**\n   * Retrieves the current status of the test.\n   */\n  static getStatus(test: TIsolateTest): TestStatus {\n    const data = VestTest.getData(test);\n    return data.testStatus;\n  }\n\n  /**\n   * Sets the status of the test, triggering a state machine transition.\n   */\n  static setStatus(\n    test: TIsolateTest,\n    status: TestStatus,\n    payload?: any,\n  ): void {\n    const currentStatus = VestTest.getStatus(test);\n    const nextStatus = VestTest.stateMachine.staticTransition(\n      currentStatus,\n      status,\n      payload,\n    );\n\n    VestTest.setData(test, current => ({\n      ...current,\n      testStatus: nextStatus,\n    }));\n\n    useUpdateRegistry(test);\n  }\n\n  static getGroupName<G extends TGroupName>(test: TIsolateTest): Maybe<G> {\n    const group = Walker.closest<TIsolateGroup<G>>(test, i =>\n      IsolateSelectors.isIsolateType(i, VestIsolateType.Group),\n    );\n    return group?.data.groupName;\n  }\n\n  /**\n   * Checks if the given isolate is a VestTest isolate.\n   */\n  static is(isolate?: Maybe<TIsolate>): isolate is TIsolateTest {\n    return IsolateSelectors.isIsolateType<TIsolateTest>(\n      isolate,\n      VestIsolateType.Test,\n    );\n  }\n\n  static cast<F extends TFieldName = TFieldName>(\n    isolate?: Maybe<TIsolate>,\n  ): Result<TIsolateTest<F>, string> {\n    return VestTest.is(isolate)\n      ? makeResult.Ok(isolate as TIsolateTest<F>)\n      : makeResult.Err(ErrorStrings.EXPECTED_VEST_TEST);\n  }\n\n  static statusEquals(test: TIsolateTest, status: TestStatus): boolean {\n    return VestTest.getStatus(test) === status;\n  }\n\n  static warns(test: TIsolateTest): Result<boolean> {\n    return makeResult.Ok(\n      VestTest.getData(test).severity === TestSeverity.Warning,\n    );\n  }\n\n  static isOmitted(test: TIsolateTest): Result<boolean> {\n    return makeResult.Ok(VestTest.statusEquals(test, TestStatus.OMITTED));\n  }\n\n  static isUntested(test: TIsolateTest): Result<boolean> {\n    return makeResult.Ok(VestTest.statusEquals(test, TestStatus.UNTESTED));\n  }\n\n  static isFailing(test: TIsolateTest): Result<boolean> {\n    return makeResult.Ok(VestTest.statusEquals(test, TestStatus.FAILED));\n  }\n\n  static isCanceled(test: TIsolateTest): Result<boolean> {\n    return makeResult.Ok(VestTest.statusEquals(test, TestStatus.CANCELED));\n  }\n\n  static isSkipped(test: TIsolateTest): Result<boolean> {\n    return makeResult.Ok(VestTest.statusEquals(test, TestStatus.SKIPPED));\n  }\n\n  static isPassing(test: TIsolateTest): Result<boolean> {\n    return makeResult.Ok(VestTest.statusEquals(test, TestStatus.PASSING));\n  }\n\n  static isWarning(test: TIsolateTest): Result<boolean> {\n    return makeResult.Ok(VestTest.statusEquals(test, TestStatus.WARNING));\n  }\n\n  /**\n   * Checks if the test has failed or has a warning.\n   */\n  static hasFailures(test: TIsolateTest): Result<boolean> {\n    return makeResult.Ok(\n      VestTest.isFailing(test).unwrap() || VestTest.isWarning(test).unwrap(),\n    );\n  }\n\n  static isNonActionable(test: TIsolateTest): Result<boolean> {\n    return makeResult.Ok(\n      VestTest.isSkipped(test).unwrap() ||\n        VestTest.isOmitted(test).unwrap() ||\n        VestTest.isCanceled(test).unwrap(),\n    );\n  }\n\n  /**\n   * Checks if the test has been run and completed (passed or failed).\n   */\n  static isTested(test: TIsolateTest): Result<boolean> {\n    return makeResult.Ok(\n      VestTest.hasFailures(test).unwrap() || VestTest.isPassing(test).unwrap(),\n    );\n  }\n\n  static isStartedStatus(test: TIsolateTest): boolean {\n    return VestTest.statusEquals(test, TestStatus.STARTED);\n  }\n\n  static isStarted(test: TIsolateTest): Result<boolean> {\n    return makeResult.Ok(VestTest.isStartedStatus(test));\n  }\n\n  /**\n   * Checks if the test is awaiting resolution (skipped, untested, or started).\n   */\n  static awaitsResolution(test: TIsolateTest): Result<boolean> {\n    // Is the test in a state where it can still be run, or complete running\n    // and its final status is indeterminate?\n    return makeResult.Ok(\n      VestTest.isSkipped(test).unwrap() ||\n        VestTest.isUntested(test).unwrap() ||\n        VestTest.isStartedStatus(test),\n    );\n  }\n\n  /**\n   * Checks if the test is asynchronous.\n   */\n  static isAsyncTest(test: TIsolateTest): boolean {\n    return isPromise(VestTest.getData(test).asyncTest);\n  }\n\n  // Mutate\n\n  static setStarted(test: TIsolateTest) {\n    VestTest.setStatus(test, TestStatus.STARTED);\n  }\n\n  static fail(test: TIsolateTest): void {\n    VestTest.setStatus(\n      test,\n      VestTest.warns(test).unwrap() ? TestStatus.WARNING : TestStatus.FAILED,\n    );\n  }\n\n  static pass(test: TIsolateTest): void {\n    VestTest.setStatus(test, TestStatus.PASSING);\n  }\n\n  static warn(test: TIsolateTest): void {\n    VestTest.setData(test, current => ({\n      ...current,\n      severity: TestSeverity.Warning,\n    }));\n  }\n\n  // VestTest.setSeverity intentionally skips useUpdateRegistry; severity is consumed by fail() -> VestTest.setStatus(), which calls useUpdateRegistry and avoids intermediate registry updates.\n  static setSeverity(test: TIsolateTest, severity: TestSeverity): void {\n    if (VestTest.isTested(test).unwrap()) {\n      return;\n    }\n\n    VestTest.setData(test, current => ({\n      ...current,\n      severity,\n    }));\n  }\n\n  static setData(\n    test: TIsolateTest,\n    setter:\n      | ((current: TIsolateTest['data']) => TIsolateTest['data'])\n      | TIsolateTest['data'],\n  ): void {\n    test.data = dynamicValue(setter, VestTest.getData(test));\n  }\n\n  static skip(test: TIsolateTest, force?: boolean): void {\n    // Without this force flag, the test will be marked as skipped even if it is pending.\n    // This means that it will not be counted in \"allIncomplete\" and its done callbacks\n    // will not be called, or will be called prematurely.\n    // What this mostly say is that when we have a pending test for one field, and we then\n    // start typing in a different field - the pending test will be canceled, which\n    // is usually an unwanted behavior.\n    // The only scenario in which we DO want to cancel the async test regardless\n    // is when we specifically skip a test with `skipWhen`, which is handled by the\n    // \"force\" boolean flag.\n    // I am not a fan of this flag, but it gets the job done.\n    VestTest.setStatus(test, TestStatus.SKIPPED, force);\n  }\n\n  static cancel(test: TIsolateTest): void {\n    VestTest.setStatus(test, TestStatus.CANCELED);\n    IsolateMutator.abort(test, TestStatus.CANCELED);\n  }\n\n  static omit(test: TIsolateTest): void {\n    VestTest.setStatus(test, TestStatus.OMITTED);\n  }\n\n  static reset(test: TIsolateTest): void {\n    VestTest.setStatus(test, TestAction.RESET);\n  }\n}\n","import { CB, Nullable } from 'vest-utils';\nimport { StandardSchemaV1 } from 'vest-utils/standardSchemaSpec';\n\nimport { TIsolateSuite } from '../core/isolate/IsolateSuite/IsolateSuite';\n\nimport { Severity } from './Severity';\nimport { SummaryFailure } from './SummaryFailure';\nimport { SuiteSelectors } from './selectors/suiteSelectors';\nimport { SuiteModifiers } from '../suite/SuiteTypes';\n\nexport class SummaryBase {\n  public errorCount = 0;\n  public warnCount = 0;\n  public testCount = 0;\n  public pendingCount = 0;\n}\n\nexport class SuiteSummary<\n  F extends TFieldName,\n  G extends TGroupName,\n  D = unknown,\n  S extends TSchema = undefined,\n> extends SummaryBase {\n  public [Severity.ERRORS]: SummaryFailure<F, G>[] = [];\n  public [Severity.WARNINGS]: SummaryFailure<F, G>[] = [];\n  public groups: Groups<G, F> = {} as Groups<G, F>;\n  public tests: Tests<F> = {} as Tests<F>;\n  public run!: {\n    data: {\n      raw: D | undefined;\n      parsed: Partial<InferSchemaOutput<S>> | undefined;\n    };\n    time: Date;\n    focus?: SuiteModifiers<F, G>;\n  };\n  public valid: Nullable<boolean> = null;\n\n  constructor() {\n    super();\n\n    Object.defineProperty(this, 'run', {\n      configurable: true,\n      enumerable: false,\n      value: {\n        data: {\n          raw: undefined,\n          parsed: undefined,\n        },\n        time: new Date(0),\n      },\n      writable: true,\n    });\n  }\n}\n\nexport type TestsContainer<F extends TFieldName, _G extends TGroupName> =\n  | Group<F>\n  | Tests<F>;\n\nexport type Groups<G extends TGroupName, F extends TFieldName> = {\n  [key in G]: Group<F>;\n};\ntype Group<F extends TFieldName> = {\n  [key in F]: SingleTestSummary;\n} & ValidProperty;\nexport type Tests<F extends TFieldName> = { [key in F]: SingleTestSummary };\n\nexport type SingleTestSummary = SummaryBase &\n  CommonSummaryProperties &\n  ValidProperty;\n\ntype ValidProperty = {\n  valid: Nullable<boolean>;\n};\n\nexport type CommonSummaryProperties = SummaryBase & {\n  errors: string[];\n  warnings: string[];\n};\n\nexport type GetFailuresResponse = FailureMessages | string[];\n\nexport type FailureMessages = Record<string, string[]>;\nexport type TSchema = any;\n\nexport type InferSchemaData<S> = S extends {\n  '~standard': { types: { input: infer I } };\n}\n  ? I\n  : S extends { infer: infer T }\n    ? { [K in keyof T]: T[K] } & NonNullable<unknown>\n    : any;\n\nexport type InferSchemaOutput<S> = S extends {\n  '~standard': { types: { output: infer O } };\n}\n  ? O\n  : S extends { infer: infer T }\n    ? { [K in keyof T]: T[K] } & NonNullable<unknown>\n    : any;\n\ntype SuiteResultData<\n  F extends TFieldName,\n  G extends TGroupName,\n  S extends TSchema = undefined,\n  D = unknown,\n> =\n  | (Omit<SuiteSummary<F, G, D, S>, 'valid'> &\n      SuiteSelectors<F, G> & {\n        valid: true;\n        value: InferSchemaOutput<S>;\n        issues?: undefined;\n      })\n  | (Omit<SuiteSummary<F, G, D, S>, 'valid'> &\n      SuiteSelectors<F, G> & {\n        valid: false;\n        issues: ReadonlyArray<StandardSchemaV1.Issue>;\n        value?: undefined;\n      })\n  | (Omit<SuiteSummary<F, G, D, S>, 'valid'> &\n      SuiteSelectors<F, G> & {\n        valid: null;\n        issues?: undefined;\n        value?: undefined;\n      });\n\ntype BrandedFieldName<F extends string> = F & TFieldName;\ntype BrandedGroupName<G extends string> = G & TGroupName;\n\nexport type SuiteResult<\n  F extends string = TFieldName,\n  G extends string = TGroupName,\n  S extends TSchema = undefined,\n  D = unknown,\n> = SuiteResultData<BrandedFieldName<F>, BrandedGroupName<G>, S, D> & {\n  dump: CB<TIsolateSuite>;\n  types: S extends undefined\n    ? undefined\n    : { input: InferSchemaData<S>; output: InferSchemaOutput<S> };\n};\n\n// Public-facing aliases remain plain strings; internals can still brand via FieldName/GroupName.\nexport type TFieldName = string;\nexport type TGroupName = string;\n","import { dynamicValue } from 'vest-utils';\nimport { VestRuntime, TIsolate } from 'vestjs-runtime';\n\nimport { TIsolateTest } from './IsolateTest/IsolateTest';\nimport { VestTest } from './IsolateTest/VestTest';\nimport { useUpdateRegistry, useClearRegistry } from '../test/TestRegistry';\n\nexport function useTestObjects(): [\n  TIsolateTest[],\n  (tests: TIsolateTest[] | ((prev: TIsolateTest[]) => TIsolateTest[])) => void,\n] {\n  const root = VestRuntime.useAvailableRoot();\n\n  if (!root) {\n    return [[], () => {}];\n  }\n\n  return [root.data.tests || [], setTests];\n\n  function setTests(\n    tests: TIsolateTest[] | ((prev: TIsolateTest[]) => TIsolateTest[]),\n  ) {\n    if (!root) return;\n    root.data.tests = dynamicValue(tests, root.data.tests || []);\n  }\n}\n\nconst registeredTestsCache = new WeakMap<TIsolate, WeakSet<TIsolateTest>>();\n\nfunction getRegisteredTestsSet(root: TIsolate): WeakSet<TIsolateTest> {\n  let set = registeredTestsCache.get(root);\n\n  if (!set) {\n    set = new WeakSet();\n    registeredTestsCache.set(root, set);\n  }\n\n  return set;\n}\n\nexport function useAddTestToRoot(testObject: TIsolateTest) {\n  const root = VestRuntime.useAvailableRoot();\n\n  if (!root) return;\n\n  const registeredSet = getRegisteredTestsSet(root);\n\n  if (registeredSet.has(testObject)) {\n    return;\n  }\n\n  registeredSet.add(testObject);\n\n  const [, setTests] = useTestObjects();\n\n  setTests(prev => {\n    // Update characteristic registry\n    useUpdateRegistry(testObject);\n\n    prev.push(testObject);\n    return prev;\n  });\n}\n\nexport function useOnTestStart(testObject: TIsolateTest) {\n  useAddTestToRoot(testObject);\n}\n\nexport function useRegisterSubtree(isolate: TIsolate) {\n  if (VestTest.is(isolate)) {\n    useAddTestToRoot(isolate);\n    // Populate characteristics correctly\n    useUpdateRegistry(isolate);\n  }\n\n  if (isolate.children) {\n    for (const child of isolate.children) {\n      useRegisterSubtree(child);\n    }\n  }\n}\n\nexport function useReprocessTree(rootNode: TIsolate): void {\n  const root = VestRuntime.useAvailableRoot();\n\n  if (root) {\n    useClearTestIndexes(root);\n  }\n  useRegisterSubtree(rootNode);\n}\n\nfunction useClearTestIndexes(root: TIsolate) {\n  if (root.data.testIndex) {\n    root.data.testIndex.clear();\n  }\n  useClearRegistry(root);\n}\n","import {\n  CB,\n  CacheApi,\n  TinyState,\n  cache,\n  seq,\n  createTinyState,\n} from 'vest-utils';\nimport { IReconciler, VestRuntime } from 'vestjs-runtime';\n\nimport {\n  SuiteResult,\n  TFieldName,\n  TGroupName,\n  TSchema,\n} from '../suiteResult/SuiteResultTypes';\n\nimport { TIsolateSuite } from './isolate/IsolateSuite/IsolateSuite';\nimport { useReprocessTree } from './isolate/registerTests';\n\nexport type DoneCallback = (res: SuiteResult<TFieldName, TGroupName>) => void;\ntype FieldCallbacks = Record<string, DoneCallbacks>;\n\ntype DoneCallbacks = Array<DoneCallback>;\n\ntype StateExtra = {\n  doneCallbacks: TinyState<DoneCallbacks>;\n  fieldCallbacks: TinyState<FieldCallbacks>;\n  suiteId: string;\n  suiteResultCache: CacheApi<SuiteResult<TFieldName, TGroupName, TSchema>>;\n};\nconst createSuiteResultCache = () =>\n  cache<SuiteResult<TFieldName, TGroupName, TSchema>>();\n\nexport function useCreateVestState({\n  VestReconciler,\n}: {\n  VestReconciler: IReconciler;\n}) {\n  const stateRef: StateExtra = {\n    doneCallbacks: createTinyState<DoneCallbacks>(() => []),\n    fieldCallbacks: createTinyState<FieldCallbacks>(() => ({})),\n    suiteId: seq(),\n    suiteResultCache: createSuiteResultCache(),\n  };\n\n  return VestRuntime.createRef(VestReconciler, stateRef);\n}\n\nfunction useVestState() {\n  return VestRuntime.useXAppData<StateExtra>();\n}\n\nexport function useDoneCallbacks() {\n  return useVestState().doneCallbacks();\n}\n\nexport function useFieldCallbacks() {\n  return useVestState().fieldCallbacks();\n}\n\nfunction useSuiteId() {\n  return useVestState().suiteId;\n}\n\nexport function useSuiteResultCache<\n  F extends TFieldName,\n  G extends TGroupName,\n  S extends TSchema = undefined,\n  D = unknown,\n>(action: CB<SuiteResult<F, G, S, D>>): SuiteResult<F, G, S, D> {\n  const suiteResultCache = useVestState().suiteResultCache;\n\n  return suiteResultCache([useSuiteId()], action) as SuiteResult<F, G, S, D>;\n}\n\nexport function usePreviousSuiteResult<\n  F extends TFieldName,\n  G extends TGroupName,\n  S extends TSchema = undefined,\n  D = unknown,\n>(): SuiteResult<F, G, S, D> | undefined {\n  const suiteResultCache = useVestState().suiteResultCache;\n  return suiteResultCache.get([useSuiteId()])?.[1] as unknown as\n    | SuiteResult<F, G, S, D>\n    | undefined;\n}\n\nexport function useExpireSuiteResultCache() {\n  const suiteResultCache = useVestState().suiteResultCache;\n  suiteResultCache.invalidate([useSuiteId()]);\n}\n\nexport function useResetCallbacks() {\n  const [, , resetDoneCallbacks] = useDoneCallbacks();\n  const [, , resetFieldCallbacks] = useFieldCallbacks();\n\n  resetDoneCallbacks();\n  resetFieldCallbacks();\n}\n\nexport function useResetSuite() {\n  useExpireSuiteResultCache();\n  useResetCallbacks();\n  VestRuntime.reset();\n}\n\nexport function useLoadSuite(rootNode: TIsolateSuite): void {\n  VestRuntime.useSetHistoryRoot(rootNode);\n\n  useReprocessTree(rootNode);\n\n  useExpireSuiteResultCache();\n}\n","import { Maybe, makeResult, Result } from 'vest-utils';\n\nimport { TFieldName } from '../../../suiteResult/SuiteResultTypes';\nimport { WithFieldName } from '../TestTypes';\n\nexport function nonMatchingFieldName(\n  WithFieldName: WithFieldName<TFieldName>,\n  fieldName?: Maybe<TFieldName>,\n): Result<boolean> {\n  return makeResult.Ok(\n    !!fieldName && !matchingFieldName(WithFieldName, fieldName).unwrap(),\n  );\n}\n\nexport default function matchingFieldName(\n  WithFieldName: WithFieldName<TFieldName>,\n  fieldName?: Maybe<TFieldName>,\n): Result<boolean> {\n  return makeResult.Ok(!!(fieldName && WithFieldName.fieldName === fieldName));\n}\n","import { isPositive, makeResult, Result } from 'vest-utils';\n\nimport { countKeyBySeverity, Severity } from '../Severity';\nimport {\n  FailureMessages,\n  TestsContainer,\n  TFieldName,\n  TGroupName,\n} from '../SuiteResultTypes';\n\n// calls collectAll or getByFieldName depending on whether fieldName is provided\n\nexport function gatherFailures(\n  testGroup: TestsContainer<TFieldName, TGroupName>,\n  severityKey: Severity,\n  fieldName?: TFieldName,\n): string[] | FailureMessages {\n  return (\n    fieldName\n      ? getByFieldName(testGroup, severityKey, fieldName)\n      : collectAll(testGroup, severityKey)\n  ).unwrap();\n}\n\nfunction getByFieldName(\n  testGroup: TestsContainer<TFieldName, TGroupName>,\n  severityKey: Severity,\n  fieldName: TFieldName,\n): Result<string[]> {\n  return makeResult.Ok(testGroup?.[fieldName]?.[severityKey] || []);\n}\n\nfunction collectAll(\n  testGroup: TestsContainer<TFieldName, TGroupName>,\n  severityKey: Severity,\n): Result<FailureMessages> {\n  const output: FailureMessages = {};\n\n  const countKey = countKeyBySeverity(severityKey);\n\n  for (const field in testGroup) {\n    if (isPositive(testGroup[field as TFieldName][countKey])) {\n      // We will probably never get to the fallback array\n      // leaving it just in case the implementation changes\n      output[field] = testGroup[field as TFieldName][severityKey] || [];\n    }\n  }\n\n  return makeResult.Ok(output);\n}\n","import {\n  Maybe,\n  greaterThan,\n  isPositive,\n  isStringValue,\n  makeBrand,\n  makeResult,\n  Result,\n} from 'vest-utils';\n\nimport matchingFieldName from '../../core/test/helpers/matchingFieldName';\nimport { Severity, SeverityCount } from '../Severity';\nimport {\n  FailureMessages,\n  GetFailuresResponse,\n  SuiteResult,\n  SuiteSummary,\n  TFieldName,\n  TGroupName,\n  TSchema,\n} from '../SuiteResultTypes';\nimport { SummaryFailure } from '../SummaryFailure';\n\nimport { gatherFailures } from './collectFailures';\n\ntype InputFieldName<F extends TFieldName> = F;\ntype InputGroupName<G extends TGroupName> = G;\n\nexport function bindSuiteSelectors<\n  F extends TFieldName,\n  G extends TGroupName,\n  S extends TSchema = undefined,\n>(get: () => SuiteResult<F, G, S>): SuiteSelectors<F, G> {\n  return {\n    getError: (...args: Parameters<SuiteSelectors<F, G>['getError']>) =>\n      get().getError(...args),\n    getErrors: (...args: Parameters<SuiteSelectors<F, G>['getErrors']>) =>\n      get().getErrors(...args),\n    getErrorsByGroup: (\n      ...args: Parameters<SuiteSelectors<F, G>['getErrorsByGroup']>\n    ) => get().getErrorsByGroup(...args),\n    getMessage: (...args: Parameters<SuiteSelectors<F, G>['getMessage']>) =>\n      get().getMessage(...args),\n    getWarning: (...args: Parameters<SuiteSelectors<F, G>['getWarning']>) =>\n      get().getWarning(...args),\n    getWarnings: (...args: Parameters<SuiteSelectors<F, G>['getWarnings']>) =>\n      get().getWarnings(...args),\n    getWarningsByGroup: (\n      ...args: Parameters<SuiteSelectors<F, G>['getWarningsByGroup']>\n    ) => get().getWarningsByGroup(...args),\n    hasErrors: (...args: Parameters<SuiteSelectors<F, G>['hasErrors']>) =>\n      get().hasErrors(...args),\n    hasErrorsByGroup: (\n      ...args: Parameters<SuiteSelectors<F, G>['hasErrorsByGroup']>\n    ) => get().hasErrorsByGroup(...args),\n    hasWarnings: (...args: Parameters<SuiteSelectors<F, G>['hasWarnings']>) =>\n      get().hasWarnings(...args),\n    hasWarningsByGroup: (\n      ...args: Parameters<SuiteSelectors<F, G>['hasWarningsByGroup']>\n    ) => get().hasWarningsByGroup(...args),\n    isPending: (...args: Parameters<SuiteSelectors<F, G>['isPending']>) =>\n      get().isPending(...args),\n    isTested: (...args: Parameters<SuiteSelectors<F, G>['isTested']>) =>\n      get().isTested(...args),\n    isValid: (...args: Parameters<SuiteSelectors<F, G>['isValid']>) =>\n      get().isValid(...args),\n    isValidByGroup: (\n      ...args: Parameters<SuiteSelectors<F, G>['isValidByGroup']>\n    ) => get().isValidByGroup(...args),\n  } as SuiteSelectors<F, G>;\n}\n\n// eslint-disable-next-line max-lines-per-function, max-statements\nexport function suiteSelectors<F extends TFieldName, G extends TGroupName>(\n  summary: SuiteSummary<F, G>,\n): SuiteSelectors<F, G> {\n  const selectors = {\n    getError,\n    getErrors,\n    getErrorsByGroup,\n    getMessage,\n    getWarning,\n    getWarnings,\n    getWarningsByGroup,\n    hasErrors,\n    hasErrorsByGroup,\n    hasWarnings,\n    hasWarningsByGroup,\n    isPending,\n    isTested,\n    isValid,\n    isValidByGroup,\n  };\n\n  return selectors;\n\n  function asFieldName(fieldName?: InputFieldName<F>): F | undefined {\n    if (isStringValue(fieldName)) {\n      return makeBrand<TFieldName>(fieldName) as F;\n    }\n\n    return fieldName;\n  }\n\n  function asGroupName(groupName: InputGroupName<G>): G {\n    if (isStringValue(groupName)) {\n      return makeBrand<TGroupName>(groupName) as G;\n    }\n\n    return groupName;\n  }\n\n  // Booleans\n\n  function isValid(fieldName?: InputFieldName<F>): boolean {\n    const targetFieldName = asFieldName(fieldName);\n\n    return Boolean(\n      targetFieldName ? summary.tests[targetFieldName]?.valid : summary.valid,\n    );\n  }\n\n  // eslint-disable-next-line max-statements, complexity\n  function isValidByGroup(\n    groupName: InputGroupName<G>,\n    fieldName?: InputFieldName<F>,\n  ): boolean {\n    if (\n      summary.valid === null ||\n      (!summary.testCount &&\n        !Object.keys(summary.tests).length &&\n        !Object.keys(summary.groups).length)\n    ) {\n      return false;\n    }\n\n    const safeGroupName = asGroupName(groupName);\n    const safeFieldName = asFieldName(fieldName);\n    const group = summary.groups[safeGroupName];\n\n    // If the group doesn't exist, it is vacuously valid in this selector.\n    if (!group) {\n      return true;\n    }\n\n    // If checking a specific field within the group\n    if (safeFieldName) {\n      const fieldSummary = group[safeFieldName];\n      // If field doesn't exist in group, it's invalid (test was never run)\n      if (!fieldSummary) {\n        return false;\n      }\n      return !!fieldSummary.valid;\n    }\n\n    // Check all fields in the group\n    let hasAnyFields = false;\n    for (const fieldName of Object.keys(group) as F[]) {\n      hasAnyFields = true;\n      if (!group[fieldName]?.valid) {\n        return false;\n      }\n    }\n\n    return hasAnyFields;\n  }\n\n  function hasErrors(fieldName?: InputFieldName<F>): boolean {\n    return hasFailures(\n      summary,\n      SeverityCount.ERROR_COUNT,\n      asFieldName(fieldName),\n    ).unwrap();\n  }\n\n  function hasWarnings(fieldName?: InputFieldName<F>): boolean {\n    return hasFailures(\n      summary,\n      SeverityCount.WARN_COUNT,\n      asFieldName(fieldName),\n    ).unwrap();\n  }\n\n  function isTested(fieldName: InputFieldName<F>): boolean {\n    const safeFieldName = asFieldName(fieldName);\n\n    return safeFieldName\n      ? isPositive(summary.tests[safeFieldName]?.testCount)\n      : false;\n  }\n\n  function hasWarningsByGroup(\n    groupName: InputGroupName<G>,\n    fieldName?: InputFieldName<F>,\n  ): boolean {\n    return hasFailuresByGroup(\n      summary,\n      SeverityCount.WARN_COUNT,\n      asGroupName(groupName),\n      asFieldName(fieldName),\n    ).unwrap();\n  }\n\n  function hasErrorsByGroup(\n    groupName: InputGroupName<G>,\n    fieldName?: InputFieldName<F>,\n  ): boolean {\n    return hasFailuresByGroup(\n      summary,\n      SeverityCount.ERROR_COUNT,\n      asGroupName(groupName),\n      asFieldName(fieldName),\n    ).unwrap();\n  }\n\n  // Responses\n\n  function getWarnings(): FailureMessages;\n  function getWarnings(fieldName: InputFieldName<F>): string[];\n  function getWarnings(fieldName?: InputFieldName<F>): GetFailuresResponse {\n    return getFailures(\n      summary,\n      Severity.WARNINGS,\n      asFieldName(fieldName),\n    ).unwrap();\n  }\n\n  function getWarning(): Maybe<SummaryFailure<F, G>>;\n  function getWarning(fieldName: InputFieldName<F>): Maybe<string>;\n  function getWarning(\n    fieldName?: InputFieldName<F>,\n  ): Maybe<SummaryFailure<F, G> | string> {\n    const safeFieldName = asFieldName(fieldName);\n\n    return (\n      safeFieldName\n        ? getFailure<F, G>(Severity.WARNINGS, summary, safeFieldName)\n        : getFailure<F, G>(Severity.WARNINGS, summary)\n    ).unwrap();\n  }\n\n  function getErrors(): FailureMessages;\n  function getErrors(fieldName: InputFieldName<F>): string[];\n  function getErrors(fieldName?: InputFieldName<F>): GetFailuresResponse {\n    return getFailures(\n      summary,\n      Severity.ERRORS,\n      asFieldName(fieldName),\n    ).unwrap();\n  }\n\n  function getError(): Maybe<SummaryFailure<F, G>>;\n  function getError(fieldName: InputFieldName<F>): Maybe<string>;\n  function getError(\n    fieldName?: InputFieldName<F>,\n  ): Maybe<SummaryFailure<F, G> | string> {\n    const safeFieldName = asFieldName(fieldName);\n\n    return (\n      safeFieldName\n        ? getFailure<F, G>(Severity.ERRORS, summary, safeFieldName)\n        : getFailure<F, G>(Severity.ERRORS, summary)\n    ).unwrap();\n  }\n\n  function getErrorsByGroup(groupName: InputGroupName<G>): FailureMessages;\n  function getErrorsByGroup(\n    groupName: InputGroupName<G>,\n    fieldName: InputFieldName<F>,\n  ): string[];\n  function getErrorsByGroup(\n    groupName: InputGroupName<G>,\n    fieldName?: InputFieldName<F>,\n  ): GetFailuresResponse {\n    return getFailuresByGroup(\n      summary,\n      Severity.ERRORS,\n      asGroupName(groupName),\n      asFieldName(fieldName),\n    ).unwrap();\n  }\n\n  function getMessage(fieldName: InputFieldName<F>): Maybe<string> {\n    return getError(fieldName) || getWarning(fieldName);\n  }\n\n  function getWarningsByGroup(groupName: InputGroupName<G>): FailureMessages;\n  function getWarningsByGroup(\n    groupName: InputGroupName<G>,\n    fieldName: InputFieldName<F>,\n  ): string[];\n  function getWarningsByGroup(\n    groupName: InputGroupName<G>,\n    fieldName?: InputFieldName<F>,\n  ): GetFailuresResponse {\n    return getFailuresByGroup(\n      summary,\n      Severity.WARNINGS,\n      asGroupName(groupName),\n      asFieldName(fieldName),\n    ).unwrap();\n  }\n\n  function isPending(fieldName?: InputFieldName<F>): boolean {\n    const safeFieldName = asFieldName(fieldName);\n\n    return safeFieldName\n      ? greaterThan(summary.tests[safeFieldName]?.pendingCount, 0)\n      : greaterThan(summary.pendingCount, 0);\n  }\n}\n\nexport interface SuiteSelectors<F extends TFieldName, G extends TGroupName> {\n  getWarning(): SummaryFailure<F, G> | undefined;\n  getWarning(fieldName: InputFieldName<F>): string | undefined;\n  getWarning(\n    fieldName?: InputFieldName<F>,\n  ): SummaryFailure<F, G> | string | undefined;\n  getError(): SummaryFailure<F, G> | undefined;\n  getError(fieldName: InputFieldName<F>): string | undefined;\n  getError(\n    fieldName?: InputFieldName<F>,\n  ): SummaryFailure<F, G> | string | undefined;\n  getMessage(fieldName: InputFieldName<F>): string | undefined;\n  getErrors(): FailureMessages;\n  getErrors(fieldName: InputFieldName<F>): string[];\n  getErrors(fieldName?: InputFieldName<F>): string[] | FailureMessages;\n  getWarnings(): FailureMessages;\n  getWarnings(fieldName: InputFieldName<F>): string[];\n  getWarnings(fieldName?: InputFieldName<F>): string[] | FailureMessages;\n  getErrorsByGroup(groupName: InputGroupName<G>): FailureMessages;\n  getErrorsByGroup(\n    groupName: InputGroupName<G>,\n    fieldName: InputFieldName<F>,\n  ): string[];\n  getErrorsByGroup(\n    groupName: InputGroupName<G>,\n    fieldName?: InputFieldName<F>,\n  ): string[] | FailureMessages;\n  getWarningsByGroup(groupName: InputGroupName<G>): FailureMessages;\n  getWarningsByGroup(\n    groupName: InputGroupName<G>,\n    fieldName: InputFieldName<F>,\n  ): string[];\n  getWarningsByGroup(\n    groupName: InputGroupName<G>,\n    fieldName?: InputFieldName<F>,\n  ): string[] | FailureMessages;\n  hasErrors(fieldName?: InputFieldName<F>): boolean;\n  hasWarnings(fieldName?: InputFieldName<F>): boolean;\n  hasErrorsByGroup(\n    groupName: InputGroupName<G>,\n    fieldName?: InputFieldName<F>,\n  ): boolean;\n  hasWarningsByGroup(\n    groupName: InputGroupName<G>,\n    fieldName?: InputFieldName<F>,\n  ): boolean;\n  isTested(fieldName: InputFieldName<F>): boolean;\n  isPending(fieldName?: InputFieldName<F>): boolean;\n  isValid(fieldName?: InputFieldName<F>): boolean;\n  isValidByGroup(\n    groupName: InputGroupName<G>,\n    fieldName?: InputFieldName<F>,\n  ): boolean;\n}\n\n// Gathers all failures of a given severity\n// With a fieldName, it will only gather failures for that field\nfunction getFailures<F extends TFieldName, G extends TGroupName>(\n  summary: SuiteSummary<F, G>,\n  severityKey: Severity,\n): Result<FailureMessages>;\nfunction getFailures<F extends TFieldName, G extends TGroupName>(\n  summary: SuiteSummary<F, G>,\n  severityKey: Severity,\n  fieldName?: TFieldName,\n): Result<string[]>;\nfunction getFailures<F extends TFieldName, G extends TGroupName>(\n  summary: SuiteSummary<F, G>,\n  severityKey: Severity,\n  fieldName?: TFieldName,\n): Result<GetFailuresResponse> {\n  return makeResult.Ok(gatherFailures(summary.tests, severityKey, fieldName));\n}\n\n// Gathers all failures of a given severity within a group\n// With a fieldName, it will only gather failures for that field\nfunction getFailuresByGroup(\n  summary: SuiteSummary<TFieldName, TGroupName>,\n  severityKey: Severity,\n  groupName: TGroupName,\n  fieldName?: TFieldName,\n): Result<GetFailuresResponse> {\n  return makeResult.Ok(\n    gatherFailures(summary.groups[groupName], severityKey, fieldName),\n  );\n}\n\n// Checks if a there are any failures of a given severity within a group\n// If a fieldName is provided, it will only check for failures within that field\n// eslint-disable-next-line complexity\nfunction hasFailuresByGroup<F extends TFieldName, G extends TGroupName>(\n  summary: SuiteSummary<F, G>,\n  severityCount: SeverityCount,\n  groupName: G,\n  fieldName?: F,\n): Result<boolean> {\n  const group = summary.groups[groupName];\n\n  if (!group) {\n    return makeResult.Ok(false);\n  }\n\n  if (fieldName) {\n    return makeResult.Ok(isPositive(group[fieldName]?.[severityCount]));\n  }\n\n  for (const field in group) {\n    if (isPositive(group[field as unknown as F]?.[severityCount])) {\n      return makeResult.Ok(true);\n    }\n  }\n\n  return makeResult.Ok(false);\n}\n\n// Checks if there are any failures of a given severity\n// If a fieldName is provided, it will only check for failures within that field\nfunction hasFailures(\n  summary: SuiteSummary<TFieldName, TGroupName>,\n  countKey: SeverityCount,\n  fieldName?: TFieldName,\n): Result<boolean> {\n  const failureCount = fieldName\n    ? summary.tests[fieldName]?.[countKey]\n    : summary[countKey] || 0;\n\n  return makeResult.Ok(isPositive(failureCount));\n}\n\nfunction getFailure<F extends TFieldName, G extends TGroupName>(\n  severity: Severity,\n  summary: SuiteSummary<F, G>,\n): Result<Maybe<SummaryFailure<F, G>>>;\nfunction getFailure<F extends TFieldName, G extends TGroupName>(\n  severity: Severity,\n  summary: SuiteSummary<F, G>,\n  fieldName: F,\n): Result<Maybe<string>>;\nfunction getFailure<F extends TFieldName, G extends TGroupName>(\n  severity: Severity,\n  summary: SuiteSummary<F, G>,\n  fieldName?: F,\n): Result<Maybe<SummaryFailure<F, G> | string>> {\n  const summaryKey = summary[severity];\n\n  if (!fieldName) {\n    return makeResult.Ok(summaryKey[0]);\n  }\n\n  return makeResult.Ok(\n    summaryKey.find((summaryFailure: SummaryFailure<TFieldName, TGroupName>) =>\n      matchingFieldName(summaryFailure, fieldName).unwrap(),\n    )?.message,\n  );\n}\n","import { TIsolateTest } from '../core/isolate/IsolateTest/IsolateTest';\nimport { VestTest } from '../core/isolate/IsolateTest/VestTest';\nimport { WithFieldName } from '../core/test/TestTypes';\n\nimport { TFieldName, TGroupName } from './SuiteResultTypes';\n\nexport class SummaryFailure<\n  F extends TFieldName,\n  G extends TGroupName,\n> implements WithFieldName<F> {\n  constructor(\n    public fieldName: F,\n    public message: string | undefined,\n    public groupName: G | undefined,\n  ) {}\n\n  static fromTestObject<F extends TFieldName, G extends TGroupName>(\n    testObject: TIsolateTest<F>,\n  ): SummaryFailure<F, G> {\n    const { fieldName, message } = VestTest.getData(testObject);\n    const groupName = VestTest.getGroupName<G>(testObject);\n\n    return new SummaryFailure<F, G>(fieldName, message, groupName);\n  }\n}\n","import { CB, assign } from 'vest-utils';\nimport { RegistryIndex } from 'vestjs-runtime';\n\nimport {\n  OptionalFieldDeclaration,\n  OptionalFields,\n} from '../../../hooks/optional/OptionalTypes';\nimport {\n  SuiteResult,\n  TFieldName,\n  TGroupName,\n} from '../../../suiteResult/SuiteResultTypes';\nimport {\n  createVestIsolate,\n  TVestIsolate,\n  VestIsolateType,\n} from '../VestIsolateType';\n\nexport type TIsolateSuite = TVestIsolate<{\n  optional: OptionalFields;\n  resolver: CB<SuiteResult<TFieldName, TGroupName, any>>;\n  // Registry indices (populated by IsolateRegistry)\n  registry_all?: RegistryIndex;\n  registry_failed?: RegistryIndex;\n  registry_omitted?: RegistryIndex;\n  registry_passing?: RegistryIndex;\n  registry_pending?: RegistryIndex;\n  registry_tested?: RegistryIndex;\n  registry_valid?: RegistryIndex;\n  registry_warning?: RegistryIndex;\n}>;\n\nexport function IsolateSuite<Callback extends CB = CB>(\n  callback: Callback,\n  resolver: CB<SuiteResult<TFieldName, TGroupName, any>>,\n): TIsolateSuite {\n  return createVestIsolate(VestIsolateType.Suite, callback, {\n    optional: {},\n    resolver,\n  });\n}\n\nexport class SuiteOptionalFields {\n  static setOptionalField(\n    suite: TIsolateSuite,\n    fieldName: TFieldName,\n    setter: (current: OptionalFieldDeclaration) => OptionalFieldDeclaration,\n  ): void {\n    const current = suite.data.optional;\n    const currentField = current[fieldName];\n\n    assign(current, {\n      [fieldName]: assign({}, currentField, setter(currentField)),\n    });\n  }\n\n  static getOptionalField(\n    suite: TIsolateSuite,\n    fieldName: TFieldName,\n  ): OptionalFieldDeclaration {\n    return (\n      SuiteOptionalFields.getOptionalFields(suite)[fieldName] ??\n      ({} as OptionalFieldDeclaration)\n    );\n  }\n\n  static getOptionalFields(suite: TIsolateSuite): OptionalFields {\n    return suite.data?.optional ?? {};\n  }\n}\n","import { DynamicValue, OneOrMoreOf } from 'vest-utils';\n\nexport type OptionalFields = Record<string, OptionalFieldDeclaration>;\n\nexport type OptionalsInput<F extends string = string> =\n  | OneOrMoreOf<F>\n  | OptionalsObject<F>;\n\ntype OptionalsObject<F extends string> = Record<F, TOptionalRule | any>;\n\ntype ImmediateOptionalFieldDeclaration = {\n  type: OptionalFieldTypes.CUSTOM_LOGIC;\n  rule: TOptionalRule;\n  applied: boolean;\n};\n\ntype DelayedOptionalFieldDeclaration = {\n  type: OptionalFieldTypes.AUTO;\n  applied: boolean;\n  rule: null;\n};\n\ntype TOptionalRule = DynamicValue<boolean>;\n\nexport type OptionalFieldDeclaration =\n  | ImmediateOptionalFieldDeclaration\n  | DelayedOptionalFieldDeclaration;\n\nexport enum OptionalFieldTypes {\n  CUSTOM_LOGIC,\n  AUTO,\n}\n","import { enforce } from 'n4s';\nimport {\n  asArray,\n  hasOwnProperty,\n  isArray,\n  isStringValue,\n  makeBrand,\n  makeResult,\n  Result,\n} from 'vest-utils';\nimport { VestRuntime } from 'vestjs-runtime';\n\nimport { useSuiteParams } from '../../core/context/SuiteContext';\nimport {\n  SuiteOptionalFields,\n  TIsolateSuite,\n} from '../../core/isolate/IsolateSuite/IsolateSuite';\nimport { TFieldName } from '../../suiteResult/SuiteResultTypes';\n\nimport { OptionalFieldTypes, OptionalsInput } from './OptionalTypes';\n\n// @vx-allow use-use\n// eslint-disable-next-line complexity\nexport function optional<F extends string>(optionals: OptionalsInput<F>): void {\n  const suiteRoot = VestRuntime.useAvailableRoot<TIsolateSuite>();\n\n  const suiteParams = useSuiteParams();\n  const dataObject = suiteParams?.[0] ?? {};\n\n  // There are two types of optional field declarations:\n\n  // 1 AUTO: Vest will automatically determine whether the field should be omitted\n  // Based on the current run. Vest will omit \"auto\" added fields without any\n  // configuration if their tests did not run at all in the suite, or if the data object\n  // contains a blank value for the field.\n  //\n  // 2 Custom logic: Vest will determine whether they should fail based on the custom\n  // logic supplied by the developer.\n  // If the developer supplies a function - when the function returns true, the field will be omitted.\n  // If the developer supplies a boolean - the field will be omitted if the value is true.\n  // If the developer supplies a value - the field will be omitted if the value is blank.\n\n  // AUTO case (field name)\n  if (isArray(optionals) || isStringValue(optionals)) {\n    asArray(optionals)\n      .map(makeBrand<TFieldName>)\n      .forEach(optionalField => {\n        SuiteOptionalFields.setOptionalField(suiteRoot, optionalField, () => ({\n          type: OptionalFieldTypes.AUTO,\n          applied: hasOwnProperty(dataObject, optionalField)\n            ? enforce.isBlank().test(dataObject?.[optionalField])\n            : false,\n          rule: null,\n        }));\n      });\n  } else {\n    // CUSTOM_LOGIC case (function or boolean)\n    const optionalsObject = optionals as Record<string, any>;\n\n    for (const field in optionalsObject) {\n      const value = optionalsObject[field];\n      const optionalField = makeBrand<TFieldName>(field);\n\n      SuiteOptionalFields.setOptionalField(suiteRoot, optionalField, () => ({\n        type: OptionalFieldTypes.CUSTOM_LOGIC,\n        rule: value,\n        applied: enforce.isBlank().test(value) || value === true,\n      }));\n    }\n  }\n}\n\nexport function useIsOptionalFieldApplied(\n  fieldName?: TFieldName,\n): Result<boolean> {\n  if (!fieldName) {\n    return makeResult.Ok(false);\n  }\n\n  const root = VestRuntime.useAvailableRoot<TIsolateSuite>();\n\n  return makeResult.Ok(\n    SuiteOptionalFields.getOptionalField(root, fieldName)?.applied ?? false,\n  );\n}\n","import {\n  IsolateInspector,\n  TIsolate,\n  VestRuntime,\n  Walker,\n} from 'vestjs-runtime';\n\nimport { useHasFromRegistry } from '../test/TestRegistry';\n\n/**\n * Checks if there are any pending isolates.\n * If a fieldName is provided, it checks if there are any pending isolates for that specific field.\n */\nexport function useIsPending(fieldName?: string): boolean {\n  return useHasFromRegistry('pending', fieldName);\n}\n\n/**\n * Iterates over the pending isolates and applies a callback to each.\n * The callback receives the isolate and a breakout function.\n * Calling the breakout function stops the iteration and returns the value passed to it.\n * If the iteration completes without calling breakout, it returns null.\n */\nexport function useMapFirstPending<T>(\n  callback: (isolate: TIsolate, breakout: (value: T) => void) => void,\n): T | null {\n  const root = VestRuntime.useAvailableRoot();\n\n  if (!IsolateInspector.hasPending(root)) {\n    return null;\n  }\n\n  return Walker.mapFirst(root, callback);\n}\n","import { TIsolate, VestRuntime, Walker } from 'vestjs-runtime';\n\nimport {\n  SuiteOptionalFields,\n  TIsolateSuite,\n} from '../../core/isolate/IsolateSuite/IsolateSuite';\nimport { TIsolateTest } from '../../core/isolate/IsolateTest/IsolateTest';\nimport { VestTest } from '../../core/isolate/IsolateTest/VestTest';\nimport { isVestIsolate } from '../../core/isolate/VestIsolateType';\nimport { nonMatchingFieldName } from '../../core/test/helpers/matchingFieldName';\nimport { OptionalFieldTypes } from '../../hooks/optional/OptionalTypes';\nimport { useIsOptionalFieldApplied } from '../../hooks/optional/optional';\nimport { TFieldName, TGroupName } from '../SuiteResultTypes';\n\nimport { useMapFirstPending } from '../../core/selectors/useIsPending';\nimport {\n  useGetFromRegistry,\n  useHasFromRegistry,\n} from '../../core/test/TestRegistry';\n\n/**\n * Determines if a field (or field within a group) should be marked as \"valid\".\n *\n * This module answers the question: \"Is this field ready to be submitted?\"\n *\n * ## What makes a field valid?\n *\n * A field is valid when ALL of these conditions are met:\n * 1. The field has no errors (failures)\n * 2. All tests for the field have completed (not pending)\n * 3. All tests for the field have run (not skipped or missing)\n *\n * ## Special cases:\n *\n * - **Optional fields**: If a field is marked as optional AND the optional condition\n *   is met, it's automatically valid regardless of test results. The optional condition\n *   can be:\n *   - AUTO: Tests never ran, OR the field value is blank (empty string, null, undefined)\n *   - CUSTOM: A boolean or function provided to `optional()` evaluates to true\n *\n * - **Empty groups**: If checking a group that has no tests for a field, it's\n *   considered valid (you can't fail tests that don't exist).\n *\n * - **Empty fields**: If checking a field at the top level that has no tests,\n *   it's considered INVALID (incomplete validation).\n *\n * ## Usage:\n *\n * ```typescript\n * // Check if a field is valid at the suite level\n * const isEmailValid = useSetValidProperty('email');\n *\n * // Check if a field is valid within a specific group\n * const isEmailValidInGroup = useSetValidPropertyImpl('email', 'contactInfo');\n * ```\n */\n\n/**\n * Checks if a field is valid at the top level (across all tests in the suite).\n *\n * @param fieldName - The name of the field to check. If undefined, checks entire suite.\n * @returns `true` if the field is valid, `false` otherwise.\n *\n * @example\n * ```typescript\n * // Check if the 'username' field is valid\n * const isValid = useSetValidProperty('username');\n * // Returns true only if:\n * // - All 'username' tests passed (no errors)\n * // - All 'username' tests completed (not pending)\n * // - All 'username' tests ran (not skipped)\n * ```\n */\nexport function useSetValidProperty(fieldName?: TFieldName): boolean {\n  return useSetValidPropertyImpl(fieldName);\n}\n\n/**\n * Shared implementation for validity checking with optional group scoping.\n *\n * This is the core logic that determines validity. It can check:\n * - A field across the entire suite (when groupName is undefined)\n * - A field within a specific group (when groupName is provided)\n *\n * @param fieldName - The field to check. If undefined, checks all fields.\n * @param groupName - Optional group name to scope the check to tests within that group only.\n * @returns `true` if valid, `false` otherwise.\n *\n * @example\n * ```typescript\n * // Check if 'email' is valid across entire suite\n * useSetValidPropertyImpl('email'); // groupName = undefined\n *\n * // Check if 'email' is valid within 'shippingAddress' group\n * useSetValidPropertyImpl('email', 'shippingAddress');\n * ```\n *\n * ## How it works (step by step):\n *\n * 1. **Check if optional**: If the field is optional and the optional condition\n *    is applied, immediately return `true`. Optional fields are valid when:\n *    - AUTO type: Tests never ran OR field value is blank ('', null, undefined)\n *    - CUSTOM type: The boolean/function provided to `optional()` returns true\n *\n * 2. **Check for errors**: If any test for this field has errors, return `false`.\n *    A field with errors cannot be valid.\n *\n * 3. **Check for pending tests**: If any non-optional test for this field is\n *    still running (pending), return `false`. We can't say a field is valid\n *    until all its tests complete.\n *\n * 4. **Check for missing tests**: If any test for this field was skipped or\n *    didn't run, return `false`. We need all tests to run to confirm validity.\n *\n * 5. **All checks passed**: Return `true`. The field is valid!\n */\nexport function useSetValidPropertyImpl(\n  fieldName?: TFieldName,\n  groupName?: TGroupName,\n): boolean {\n  // Step 1: Is the field optional, and the optional condition is applied?\n  if (useIsOptionalFieldApplied(fieldName).unwrap()) {\n    return true;\n  }\n\n  // Step 2: Does the field have any tests with errors?\n  if (useHasErrors(fieldName, groupName)) {\n    return false;\n  }\n\n  // Step 3: Does the given field have any pending tests that are not optional?\n  if (useHasNonOptionalIncomplete(fieldName, groupName)) {\n    return false;\n  }\n\n  // Step 4: Did all required tests for the field run?\n  const noMissing = useNoMissingTests(fieldName, groupName);\n  return noMissing;\n}\n\n/**\n * Helper function to check if a field has errors.\n *\n * Decides whether to check errors globally or within a specific group.\n *\n * @param fieldName - The field to check for errors\n * @param groupName - Optional group to scope the check\n * @returns `true` if the field has errors, `false` otherwise\n *\n * @example\n * ```typescript\n * // Check if 'email' has errors anywhere in the suite\n * useHasErrors('email'); // Checks all tests for 'email'\n *\n * // Check if 'email' has errors only in 'billingInfo' group\n * useHasErrors('email', 'billingInfo'); // Only checks 'email' tests in that group\n * ```\n */\nfunction useHasErrors(\n  fieldName: TFieldName | undefined,\n  groupName?: TGroupName,\n): boolean {\n  if (groupName) {\n    return hasErrorsByTestObjectsInGroup(fieldName, groupName);\n  }\n\n  return useHasFromRegistry('failed', fieldName);\n}\n\n/**\n * Checks if a specific field has errors within a specific group.\n *\n * This function looks through all test objects and finds ones that:\n * - Belong to the specified group\n * - Test the specified field\n * - Have failed (have errors)\n *\n * @param fieldName - The field to check\n * @param groupName - The group to check within\n * @returns `true` if any test for this field in this group has failed\n *\n * @example\n * ```typescript\n * // Imagine you have:\n * group('contactInfo', () => {\n *   test('email', 'Invalid email', () => false); // This test fails\n *   test('phone', () => true);\n * });\n *\n * hasErrorsByTestObjectsInGroup('email', 'contactInfo'); // true (test failed)\n * hasErrorsByTestObjectsInGroup('phone', 'contactInfo'); // false (test passed)\n * hasErrorsByTestObjectsInGroup('email', 'otherGroup');  // false (not in that group)\n * ```\n */\nfunction hasErrorsByTestObjectsInGroup(\n  fieldName: TFieldName | undefined,\n  groupName: TGroupName,\n): boolean {\n  const root = VestRuntime.useAvailableRoot();\n\n  if (!isVestIsolate(root)) {\n    return false;\n  }\n\n  const tests = root.data.tests;\n\n  return tests.some(testObject => {\n    // Skip tests that aren't in our target group\n    if (VestTest.getGroupName(testObject) !== groupName) {\n      return false;\n    }\n\n    // Skip tests that didn't fail (errors, not warnings)\n    if (!VestTest.isFailing(testObject).unwrap()) {\n      return false;\n    }\n\n    // Skip tests that aren't for our target field\n    if (\n      nonMatchingFieldName(VestTest.getData(testObject), fieldName).unwrap()\n    ) {\n      return false;\n    }\n\n    // This test is in our group, for our field, and it failed!\n    return true;\n  });\n}\n\n/**\n * Checks if a field has any pending (incomplete) tests that are not optional.\n *\n * A test is \"pending\" when it started running but hasn't finished yet.\n * This commonly happens with async tests.\n *\n * @param fieldName - The field to check\n * @param groupName - Optional group to scope the check\n * @returns `true` if there are pending non-optional tests\n *\n * @example\n * ```typescript\n * // Imagine you have:\n * test('email', async () => {\n *   await checkEmailWithServer(email); // This takes 2 seconds\n *   return result;\n * });\n *\n * // Right after calling suite.run():\n * useHasNonOptionalIncomplete('email'); // true (test still running)\n *\n * // After 2 seconds:\n * useHasNonOptionalIncomplete('email'); // false (test completed)\n * ```\n *\n * ## Why ignore optional fields?\n *\n * If a field is optional and the condition is applied, we don't care if its\n * tests are pending. Optional fields are valid by definition when:\n * - The field is blank (AUTO type)\n * - The custom condition returns true (CUSTOM type)\n * - The tests never ran (AUTO type)\n */\nfunction useHasNonOptionalIncomplete(\n  fieldName?: TFieldName,\n  groupName?: TGroupName,\n) {\n  if (groupName) {\n    return (\n      useMapFirstPending(\n        (isolate: TIsolate, breakout: (value: boolean) => void) => {\n          const testObject = isolate as TIsolateTest;\n          if (useIsPendingTestRelevant(testObject, fieldName, groupName)) {\n            breakout(true);\n          }\n        },\n      ) ?? false\n    );\n  }\n\n  const pendingTests = useGetFromRegistry(\n    'pending',\n    fieldName,\n  ) as Set<TIsolateTest>;\n\n  for (const testObject of pendingTests) {\n    if (useIsPendingTestRelevant(testObject, fieldName)) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\n/**\n * Determines if a pending test is relevant to the current validity check.\n *\n * A pending test is relevant if:\n * 1. It belongs to the target group (if a group is specified)\n * 2. It belongs to the target field (if a field is specified)\n * 3. The field is NOT optional (optional fields are valid even if pending)\n *\n * @param testObject - The test to check\n * @param fieldName - The field being validated\n * @param groupName - The group being validated\n * @returns `true` if the pending test prevents the field from being valid\n */\nfunction useIsPendingTestRelevant(\n  testObject: TIsolateTest,\n  fieldName?: TFieldName,\n  groupName?: TGroupName,\n): boolean {\n  if (groupName && VestTest.getGroupName(testObject) !== groupName) {\n    return false;\n  }\n\n  if (nonMatchingFieldName(VestTest.getData(testObject), fieldName).unwrap()) {\n    return false;\n  }\n\n  if (useIsOptionalFieldApplied(fieldName).unwrap()) {\n    return false;\n  }\n\n  return true;\n}\n\n/**\n * Checks if all required tests for a field have run.\n *\n * A test is \"missing\" if it was defined but:\n * - Skipped (using skip() or skipWhen())\n * - Never executed (mode filters prevented it)\n * - Still pending (hasn't finished yet)\n *\n * @param fieldName - The field to check\n * @param groupName - Optional group to scope the check\n * @returns `true` if all tests ran, `false` if any are missing\n *\n * @example\n * ```typescript\n * // Imagine you have:\n * test('username', () => true);  // Runs\n * skipWhen(someCondition, () => {\n *   test('username', () => true);  // Skipped\n * });\n *\n * // If someCondition is true:\n * useNoMissingTests('username'); // false (one test was skipped)\n *\n * // If someCondition is false:\n * useNoMissingTests('username'); // true (all tests ran)\n * ```\n *\n * ## Empty field handling:\n *\n * What if no tests exist for a field?\n * - **In a group**: Returns `true` (empty group is valid - can't fail tests that don't exist)\n * - **At top level**: Returns `false` (no tests means incomplete validation)\n *\n * This distinction is important:\n * - `group('emptyGroup', () => {})` - valid (intentionally empty)\n * - `create(() => {})` - invalid (you forgot to add tests)\n */\nfunction useNoMissingTests(\n  fieldName?: TFieldName,\n  groupName?: TGroupName,\n): boolean {\n  if (groupName) {\n    return useNoMissingTestsInGroup(fieldName, groupName);\n  }\n\n  return useNoMissingTestsInSuite(fieldName);\n}\n\nfunction useNoMissingTestsInGroup(\n  fieldName: TFieldName | undefined,\n  groupName: TGroupName,\n): boolean {\n  let hasAnyTestsForField = false;\n  const root = VestRuntime.useAvailableRoot();\n\n  const result = Walker.every(\n    root,\n    isolate => {\n      const testObject = isolate as TIsolateTest;\n\n      if (VestTest.getGroupName(testObject) !== groupName) {\n        return true;\n      }\n\n      if (\n        nonMatchingFieldName(VestTest.getData(testObject), fieldName).unwrap()\n      ) {\n        return true;\n      }\n\n      hasAnyTestsForField = true;\n\n      return useNoMissingTestsLogic(testObject, fieldName);\n    },\n    VestTest.is,\n  );\n\n  return !hasAnyTestsForField || result;\n}\n\nfunction useNoMissingTestsInSuite(fieldName?: TFieldName): boolean {\n  const tests = useGetFieldTests(fieldName);\n\n  if (tests.length === 0) {\n    return false;\n  }\n\n  // Optimized path: All tests have explicitly finished or were omitted\n  if (useAllTestsFinished(tests.length, fieldName)) {\n    return true;\n  }\n\n  // Fallback: If we have pending tests, we need to check if they are optional async tests\n  // that are allowed to be \"missing\".\n  return tests.every((testObject: TIsolateTest) =>\n    useNoMissingTestsLogic(testObject, fieldName),\n  );\n}\n\n/**\n * Retrieves all test isolates for a given field name, or all tests in the suite\n * if no field name is provided.\n *\n * @param fieldName - The field name to look up.\n * @returns An array of test isolates.\n */\nfunction useGetFieldTests(fieldName?: TFieldName): TIsolateTest[] {\n  return Array.from(useGetFromRegistry('all', fieldName) as Set<TIsolateTest>);\n}\n\n/**\n * Checks if all tests for a field (or the entire suite) have reached a final\n * state (either tested or omitted).\n *\n * This is an O(1) optimization using the registry's set sizes.\n *\n * @param totalTests - The total number of tests expected for the field.\n * @param fieldName - The field name.\n * @returns `true` if all tests have finished/omitted.\n */\nfunction useAllTestsFinished(\n  totalTests: number,\n  fieldName?: TFieldName,\n): boolean {\n  const testedCount = useGetFromRegistry('tested', fieldName).size;\n  const omittedCount = useGetFromRegistry('omitted', fieldName).size;\n\n  return testedCount + omittedCount === totalTests;\n}\n\n/**\n * Checks if a single test should be considered \"not missing\".\n *\n * A test is \"not missing\" if it:\n * 1. Already ran and completed (tested)\n * 2. Was intentionally omitted (e.g., optional field is blank: '', null, or undefined)\n * 3. Is an AUTO optional async test that's still running but hasn't finished\n *\n * @param testObject - The test to check\n * @param fieldName - The field being validated\n * @returns `true` if the test is not missing, `false` if it's missing\n *\n * @example\n * ```typescript\n * // Test ran and completed\n * test('email', () => true);\n * useNoMissingTestsLogic(testObject); // true\n *\n * // Test was skipped\n * skip('email');\n * test('email', () => true);\n * useNoMissingTestsLogic(testObject); // false\n *\n * // Test was omitted (optional field is blank)\n * optional('email');\n * test('email', () => false);\n * useNoMissingTestsLogic(testObject); // true (intentionally omitted)\n * ```\n */\nexport function useNoMissingTestsLogic(\n  testObject: TIsolateTest,\n  fieldName?: TFieldName,\n): boolean {\n  if (nonMatchingFieldName(VestTest.getData(testObject), fieldName).unwrap()) {\n    return true;\n  }\n\n  /**\n   * Why check for optional fields here?\n   *\n   * Optional fields have a special rule: if they're marked as AUTO optional\n   * (e.g., \"optional when blank\") and the test hasn't finished yet, we still\n   * consider it \"not missing\".\n   *\n   * This is different from the omitOptionalFields check, which uses a boolean\n   * condition. Here, we only care about whether the test has been tested already.\n   *\n   * A test is \"not missing\" if:\n   * 1. It already ran (isTested) - we have results\n   * 2. It was intentionally omitted (isOmitted) - we don't need results\n   * 3. It's an optional AUTO field that's still running - we'll accept its absence\n   */\n\n  const isOmitted = VestTest.isOmitted(testObject).unwrap();\n  const isTested = VestTest.isTested(testObject).unwrap();\n  const awaitsResolution = useOptionalTestAwaitsResolution(testObject);\n\n  return isOmitted || isTested || awaitsResolution;\n}\n\n/**\n * Checks if a test belongs to an AUTO optional field that's still running.\n *\n * AUTO optional fields are fields marked as optional without a custom condition:\n * ```typescript\n * optional('email'); // AUTO type\n * optional(['email', 'phone']); // Multiple AUTO fields\n * ```\n *\n * AUTO optional behavior (per documentation):\n * - If tests never ran (e.g., skipped via only()), field is optional\n * - If field value is blank ('', null, undefined) in data object, field is optional\n *\n * When a field is AUTO optional and blank, its tests are typically omitted.\n * But if the test is async and started before we knew the field would be blank,\n * we give it a pass - we don't consider it \"missing\" even if it hasn't finished.\n *\n * @param testObject - The test to check\n * @returns `true` if this is an AUTO optional field with a pending test\n *\n * @example\n * ```typescript\n * optional('email'); // AUTO optional\n *\n * test('email', async () => {\n *   // User clears the email field while this is running\n *   await validateEmail(email);\n *   return result;\n * });\n *\n * // While test is still running:\n * useOptionalTestAwaitsResolution(testObject); // true\n * // We don't consider this test \"missing\" even though it's not done\n * ```\n */\nfunction useOptionalTestAwaitsResolution(testObject: TIsolateTest): boolean {\n  const root = VestRuntime.useAvailableRoot<TIsolateSuite>();\n\n  const { fieldName } = VestTest.getData(testObject);\n\n  return (\n    SuiteOptionalFields.getOptionalField(root, fieldName).type ===\n      OptionalFieldTypes.AUTO && VestTest.awaitsResolution(testObject).unwrap()\n  );\n}\n","import { defaultTo, isEmpty, Maybe, assign } from 'vest-utils';\nimport { VestRuntime } from 'vestjs-runtime';\n\nimport { TIsolateSuite } from '../../core/isolate/IsolateSuite/IsolateSuite';\nimport { TIsolateTest } from '../../core/isolate/IsolateTest/IsolateTest';\nimport { VestTest } from '../../core/isolate/IsolateTest/VestTest';\nimport { isVestIsolate } from '../../core/isolate/VestIsolateType';\nimport { countKeyBySeverity, Severity } from '../Severity';\nimport {\n  CommonSummaryProperties,\n  Groups,\n  SingleTestSummary,\n  SuiteSummary,\n  SummaryBase,\n  Tests,\n  TFieldName,\n  TGroupName,\n  TSchema,\n} from '../SuiteResultTypes';\nimport { SummaryFailure } from '../SummaryFailure';\n\nimport {\n  useNoMissingTestsLogic,\n  useSetValidProperty,\n} from './useSetValidProperty';\n\nexport function useProduceSuiteSummary<\n  F extends TFieldName,\n  G extends TGroupName,\n  D = unknown,\n  S extends TSchema = undefined,\n>(): SuiteSummary<F, G, D, S> {\n  const root = VestRuntime.useAvailableRoot<TIsolateSuite>();\n\n  const summary = new SuiteSummary<F, G, D, S>();\n\n  if (isVestIsolate(root)) {\n    useProcessTests(root.data.tests, summary);\n  }\n\n  if (summary.valid !== false) {\n    summary.valid = useSetValidProperty();\n  }\n\n  return summary;\n}\n\nfunction useProcessTests<F extends TFieldName, G extends TGroupName>(\n  tests: TIsolateTest<F>[],\n  summary: SuiteSummary<F, G>,\n): SuiteSummary<F, G> {\n  if (isEmpty(tests)) {\n    // early bail for empty test arrays\n    summary.valid = false;\n    return summary;\n  }\n\n  tests.reduce((summary, testObject) => {\n    const { fieldName } = VestTest.getData(testObject);\n\n    summary.tests[fieldName] = useAppendToTest(summary.tests, testObject);\n    summary.groups = useAppendToGroup(summary.groups, testObject);\n\n    if (VestTest.isOmitted(testObject).unwrap()) {\n      return summary;\n    }\n\n    return addSummaryStats(testObject, summary);\n  }, summary);\n\n  // After we have all the tests bucketed, we decide on the final validity\n  // of the suite.\n  // We iterate over all the fields we've seen, and if any of them is not valid,\n  // the suite is not valid.\n  for (const fieldName in summary.tests) {\n    if (summary.tests[fieldName].valid === false) {\n      summary.valid = false;\n      break;\n    }\n  }\n\n  return summary;\n}\n\nfunction useAppendToGroup<F extends TFieldName, G extends TGroupName>(\n  groups: Groups<G, F>,\n  testObject: TIsolateTest<F>,\n): Groups<G, F> {\n  const groupName = VestTest.getGroupName<G>(testObject);\n\n  if (!groupName) {\n    return groups;\n  }\n\n  const group = ensureGroup<F, G>(groups, groupName);\n\n  const { fieldName } = VestTest.getData<F>(testObject);\n\n  const nextGroupEntry = useAppendTestSummaryObject(\n    group[fieldName],\n    testObject,\n  );\n  (group as Record<string, SingleTestSummary>)[fieldName] = nextGroupEntry;\n\n  return groups;\n}\n\nfunction ensureGroup<F extends TFieldName, G extends TGroupName>(\n  groups: Groups<G, F>,\n  groupName: G,\n): Groups<G, F>[G] {\n  groups[groupName] =\n    groups[groupName] || ({} as Groups<G, F>[typeof groupName]);\n  return groups[groupName];\n}\n\nfunction useAppendToTest<F extends TFieldName>(\n  tests: Tests<F>,\n  testObject: TIsolateTest<F>,\n): SingleTestSummary {\n  const fieldName = VestTest.getData<F>(testObject).fieldName;\n\n  const test = useAppendTestSummaryObject(tests[fieldName], testObject);\n  return test;\n}\n\nfunction addSummaryStats<F extends TFieldName, G extends TGroupName>(\n  testObject: TIsolateTest<F>,\n  summary: SuiteSummary<F, G>,\n): SuiteSummary<F, G> {\n  if (VestTest.isWarning(testObject).unwrap()) {\n    summary.warnCount++;\n    summary.warnings.push(SummaryFailure.fromTestObject(testObject));\n  } else if (VestTest.isFailing(testObject).unwrap()) {\n    summary.errorCount++;\n    summary.errors.push(SummaryFailure.fromTestObject(testObject));\n  }\n\n  if (VestTest.isStartedStatus(testObject)) {\n    summary.pendingCount++;\n  }\n\n  if (shouldCountTestRun(testObject)) {\n    summary.testCount++;\n  }\n\n  return summary;\n}\n\nfunction useAppendTestSummaryObject(\n  summaryKey: Maybe<SingleTestSummary>,\n  testObject: TIsolateTest,\n): SingleTestSummary {\n  const nextSummaryKey = createNewSummaryKey(summaryKey) as SingleTestSummary;\n\n  const isNoMissing = useNoMissingTestsLogic(testObject);\n\n  if (nextSummaryKey.valid !== false) {\n    nextSummaryKey.valid = isNoMissing;\n  }\n\n  return updateSummaryWithTestResults(nextSummaryKey, testObject);\n}\n\nfunction createNewSummaryKey<S extends CommonSummaryProperties>(\n  summaryKey: Maybe<S>,\n): S {\n  return defaultTo<S>(summaryKey ? { ...summaryKey } : null, baseTestStats);\n}\n\nfunction updateSummaryWithTestResults(\n  nextSummaryKey: SingleTestSummary,\n  testObject: TIsolateTest,\n): SingleTestSummary {\n  const isStarted = VestTest.isStartedStatus(testObject);\n  const isFailing = VestTest.isFailing(testObject).unwrap();\n\n  if (isStarted) {\n    nextSummaryKey.pendingCount++;\n  }\n\n  updateFailures(nextSummaryKey, testObject, isFailing);\n\n  if (isStarted || isFailing) {\n    nextSummaryKey.valid = false;\n  }\n\n  if (shouldCountTestRun(testObject)) {\n    nextSummaryKey.testCount++;\n  }\n\n  return nextSummaryKey;\n}\n\nfunction updateFailures(\n  nextSummaryKey: SingleTestSummary,\n  testObject: TIsolateTest,\n  isFailing: boolean,\n): void {\n  const { message } = VestTest.getData(testObject);\n\n  if (isFailing) {\n    incrementFailures(nextSummaryKey, Severity.ERRORS, message);\n  } else if (VestTest.isWarning(testObject).unwrap()) {\n    incrementFailures(nextSummaryKey, Severity.WARNINGS, message);\n  }\n}\n\nfunction incrementFailures<S extends CommonSummaryProperties>(\n  summaryKey: S,\n  severity: Severity,\n  message?: string,\n): void {\n  const countKey = countKeyBySeverity(severity);\n  summaryKey[countKey]++;\n  if (message) {\n    summaryKey[severity] = (summaryKey[severity] || []).concat(message);\n  }\n}\n\nfunction baseTestStats<S extends CommonSummaryProperties>(): S {\n  return assign(new SummaryBase(), {\n    errors: [],\n    warnings: [],\n  }) as unknown as S;\n}\n\nfunction shouldCountTestRun<F extends TFieldName>(\n  testObject: TIsolateTest<F>,\n): boolean {\n  return (\n    VestTest.isTested(testObject).unwrap() ||\n    VestTest.isStartedStatus(testObject)\n  );\n}\n","import { assign } from 'vest-utils';\nimport { StandardSchemaV1 } from 'vest-utils/standardSchemaSpec';\nimport { VestRuntime } from 'vestjs-runtime';\n\nimport { useSuiteResultCache } from '../core/Runtime';\nimport { TIsolateSuite } from '../core/isolate/IsolateSuite/IsolateSuite';\nimport { SuiteModifiers } from '../suite/SuiteTypes';\n\nimport { Severity } from './Severity';\nimport {\n  SuiteResult,\n  SuiteSummary,\n  TFieldName,\n  TGroupName,\n  TSchema,\n  InferSchemaOutput,\n} from './SuiteResultTypes';\nimport { suiteSelectors } from './selectors/suiteSelectors';\nimport { useProduceSuiteSummary } from './selectors/useProduceSuiteSummary';\n\nexport function useCreateSuiteResult<\n  F extends TFieldName,\n  G extends TGroupName,\n  S extends TSchema = undefined,\n  D = unknown,\n>(\n  schema?: S,\n  outputData?: any,\n  inputData?: D,\n  runTime: Date = new Date(),\n  parsedData?: Partial<InferSchemaOutput<S>>,\n  focus?: SuiteModifiers<F, G>,\n): SuiteResult<F, G, S, D> {\n  return useSuiteResultCache<F, G, S, D>(() => {\n    // @vx-allow use-use\n    const summary = useProduceSuiteSummary<F, G, D, S>();\n    summary.run = {\n      data: {\n        raw: inputData,\n        parsed: parsedData,\n      },\n      focus,\n      time: runTime,\n    };\n\n    const resultBody = constructSuiteResultObject<F, G, S, D>(\n      summary,\n      outputData,\n    );\n\n    const result = assign(resultBody as SuiteResult<F, G, S, D>, {\n      dump: VestRuntime.persist(VestRuntime.useAvailableRoot<TIsolateSuite>),\n      types: (schema\n        ? { input: inputData, output: outputData }\n        : undefined) as SuiteResult<F, G, S, D>['types'],\n    }) as SuiteResult<F, G, S, D>;\n\n    const runMeta = Object.freeze({ ...summary.run });\n\n    Object.defineProperty(result, 'run', {\n      configurable: true,\n      enumerable: false,\n      value: runMeta,\n      writable: true,\n    });\n\n    return Object.freeze(result);\n  });\n}\n\nexport function constructSuiteResultObject<\n  F extends TFieldName,\n  G extends TGroupName,\n  S extends TSchema = undefined,\n  D = unknown,\n>(\n  summary: SuiteSummary<F, G, D, S>,\n  outputData?: any,\n): Omit<SuiteResult<F, G, S, D>, 'dump' | 'types'> {\n  const { valid, ...summaryWithoutValid } = summary;\n  const selectors = suiteSelectors<F, G>(summary);\n\n  const common = assign(summaryWithoutValid, selectors);\n\n  if (valid === true) {\n    return {\n      ...common,\n      valid: true,\n      value: outputData,\n    };\n  } else if (valid === false) {\n    const issues = summary[Severity.ERRORS].reduce((acc, failure) => {\n      if (failure.message) {\n        acc.push({\n          message: failure.message,\n          path: [failure.fieldName],\n        });\n      }\n      return acc;\n    }, [] as StandardSchemaV1.Issue[]);\n\n    return {\n      ...common,\n      valid: false,\n      issues,\n    };\n  }\n\n  // valid is null\n  return {\n    ...common,\n    valid: null as null,\n  };\n}\n","import {\n  SuiteResult,\n  SuiteSummary,\n  TFieldName,\n  TGroupName,\n} from '../SuiteResultTypes';\nimport {\n  constructSuiteResultObject,\n  useCreateSuiteResult,\n} from '../suiteResult';\n\n// @vx-allow use-use\nexport function LazyDraft<\n  F extends TFieldName,\n  G extends TGroupName,\n>(): SuiteResult<F, G> {\n  const emptySummary = constructSuiteResultObject(new SuiteSummary<F, G>());\n\n  return new Proxy(emptySummary, {\n    get: (_, prop) => {\n      const result = useCreateSuiteResult<F, G>();\n\n      return result[prop as keyof SuiteResult<F, G>];\n    },\n  }) as SuiteResult<F, G>;\n}\n","import { CB, dynamicValue } from 'vest-utils';\nimport { TIsolate } from 'vestjs-runtime';\n\nimport { SuiteContext, useSkipped } from '../core/context/SuiteContext';\nimport {\n  createVestIsolate,\n  VestIsolateType,\n} from '../core/isolate/VestIsolateType';\nimport { TDraftCondition } from '../suite/getTypedMethods';\nimport { TFieldName, TGroupName } from '../suiteResult/SuiteResultTypes';\nimport { LazyDraft } from '../suiteResult/selectors/LazyDraft';\n\n/**\n * Conditionally skips running tests within the callback.\n *\n * Unlike `omitWhen`, skipped tests **retain their previous result** from\n * the last run. Use `skipWhen` when you want to avoid re-evaluating\n * tests that already have a known result (e.g., skip an async uniqueness\n * check while the field still has synchronous validation errors).\n *\n * @example\n *\n * // Skip the async check while there are sync errors on the field\n * skipWhen(res => res.hasErrors('username'), () => {\n *   test('username', 'User already taken', async () => await doesUserExist(username));\n * });\n */\n// @vx-allow use-use\nexport function skipWhen<F extends TFieldName, G extends TGroupName>(\n  condition: TDraftCondition<F, G>,\n  callback: CB,\n): TIsolate {\n  return createVestIsolate(\n    VestIsolateType.SkipWhen,\n    () => {\n      SuiteContext.run(\n        {\n          skipped:\n            // Checking for nested conditional. If we're in a nested skipWhen,\n            // we should skip the test if the parent conditional is true.\n            useIsExcludedIndividually() ||\n            // Otherwise, we should skip the test if the conditional is true.\n            dynamicValue(condition, LazyDraft<F, G>()),\n        },\n        callback,\n      );\n    },\n    {\n      tests: [],\n    },\n  );\n}\n\nexport function useIsExcludedIndividually(): boolean {\n  return useSkipped();\n}\n","import { asArray, dynamicValue, isNotEmptySet } from 'vest-utils';\nimport {\n  TIsolate,\n  Walker,\n  FocusSelectors,\n  TIsolateFocused,\n  VestRuntime,\n} from 'vestjs-runtime';\n\nimport { SuiteContext, useInclusion } from '../../core/context/SuiteContext';\nimport { TIsolateTest } from '../../core/isolate/IsolateTest/IsolateTest';\nimport { VestTest } from '../../core/isolate/IsolateTest/VestTest';\nimport { useIsExcludedIndividually } from '../../isolates/skipWhen';\n\n/**\n * Finds the closest focus isolate that matches a given field name.\n *\n * Uses `Walker.findClosest` starting from `testObject`. Since `findClosest`\n * walks UP through ancestors and searches each level's CHILDREN (siblings),\n * starting from the test ensures we correctly find sibling `IsolateFocused`\n * nodes created by `only()` and `skip()`.\n *\n * Starting from `useIsolate()` (the parent context) would be one level too\n * high, missing focus isolates at the test's own sibling level.\n */\nfunction useClosestMatchingFocus(\n  testObject: TIsolateTest,\n  fieldName: string,\n): TIsolateFocused | null {\n  return Walker.findClosest<TIsolateFocused>(testObject, (child: TIsolate) => {\n    if (!FocusSelectors.isIsolateFocused(child)) return false;\n\n    const data = child.data;\n    if (!data) return false;\n\n    return data.matchAll || asArray(data.match).includes(fieldName);\n  });\n}\n\n/**\n * Checks whether a specific test profile should be excluded by any of the exclusion conditions.\n *\n * Evaluates in order:\n * 1. `skipWhen` rule.\n * 2. Group targeting (`onlyGroup` excluding top level tests).\n * 3. Field targeting (`only` / `skip`).\n *\n * @param {TIsolateTest} testObject - The test node to evaluate.\n * @returns {boolean} `true` if the test should jump straight to a skipped status.\n */\nexport function useIsExcluded(testObject: TIsolateTest): boolean {\n  if (useIsExcludedIndividually()) return true;\n\n  if (useIsExcludedByGroup(testObject)) return true;\n\n  return useIsExcludedByField(testObject);\n}\n\n/**\n * Checks if a specific test should be excluded because it does not belong to a targeted group.\n *\n * When `suite.focus({ onlyGroup: 'groupName' })` is used, ANY test that is NOT inside\n * the targeted group(s) must be skipped. This function specifically handles tests\n * that have NO group at all (top-level tests). Tests inside other groups are handled\n * collectively at the group isolate level in `group.ts`.\n *\n * @param {TIsolateTest} testObject - The test node to evaluate.\n * @returns {boolean} `true` if the test is outside of `onlyGroup` targeting.\n */\nfunction useIsExcludedByGroup(testObject: TIsolateTest): boolean {\n  const groupName = VestTest.getGroupName(testObject);\n  const { modifiers } = SuiteContext.useX();\n\n  // If `onlyGroup` is applied, ANY test outside of a group is excluded.\n  return isNotEmptySet(modifiers.onlyGroup) && !groupName;\n}\n\n/**\n * Checks if a specific test should be excluded by field-level focus rules.\n *\n * 1. Explicit focus: find the closest `IsolateFocused` sibling from the test's\n *    perspective. If found, skip/only takes immediate effect.\n * 2. Implicit only: if no explicit match was found, query the centralized\n *    `implicitOnlyNodes` registry on the runtime StateRef. If an ancestor\n *    has been flagged (because it contains an ONLY child), the test is excluded\n *    unless it has a matching `include()` rule.\n */\nfunction useIsExcludedByField(testObject: TIsolateTest): boolean {\n  const { fieldName } = VestTest.getData(testObject);\n  const focusMatch = useClosestMatchingFocus(testObject, fieldName);\n\n  if (FocusSelectors.isSkipFocused(focusMatch, fieldName)) return true;\n  if (FocusSelectors.isOnlyFocused(focusMatch, fieldName)) return false;\n\n  // No explicit focus match for this field.\n  // Check the centralized runtime registry for implicit ONLY exclusion.\n  if (VestRuntime.hasImplicitOnly()) {\n    const inclusion = useInclusion();\n    return !dynamicValue(inclusion[fieldName], testObject);\n  }\n\n  return false;\n}\n","import { either, makeResult, Result } from 'vest-utils';\n\nimport { Severity } from '../../../suiteResult/Severity';\nimport { TIsolateTest } from '../../isolate/IsolateTest/IsolateTest';\nimport { VestTest } from '../../isolate/IsolateTest/VestTest';\n\n/**\n * Checks that a given test object matches the currently specified severity level\n */\nexport function nonMatchingSeverityProfile(\n  severity: Severity,\n  testObject: TIsolateTest,\n): Result<boolean> {\n  return makeResult.Ok(\n    either(severity === Severity.WARNINGS, VestTest.warns(testObject).unwrap()),\n  );\n}\n","import { VestRuntime } from 'vestjs-runtime';\n\nimport { TIsolateTest } from '../../core/isolate/IsolateTest/IsolateTest';\nimport { VestTest } from '../../core/isolate/IsolateTest/VestTest';\nimport { isVestIsolate } from '../../core/isolate/VestIsolateType';\nimport { nonMatchingFieldName } from '../../core/test/helpers/matchingFieldName';\nimport { nonMatchingSeverityProfile } from '../../core/test/helpers/nonMatchingSeverityProfile';\nimport { useHasFromRegistry } from '../../core/test/TestRegistry';\nimport { Severity } from '../Severity';\nimport { TFieldName } from '../SuiteResultTypes';\n\n/**\n * Checks if a specific field (or the entire suite) has error-severity failures.\n *\n * @param fieldName - Optional field name to check.\n * @returns `true` if failures exist.\n */\nexport function useHasErrorsByTestObjects(fieldName?: TFieldName): boolean {\n  return useHasFailuresByTestObjects(Severity.ERRORS, fieldName);\n}\n\n/**\n * Shared logic to check for failures of a specific severity.\n *\n * @param severityKey - The severity to check (ERRORS or WARNINGS).\n * @param fieldName - Optional field name to check.\n */\nfunction useHasFailuresByTestObjects(\n  severityKey: Severity,\n  fieldName?: TFieldName,\n): boolean {\n  // First, check the reactive status indices for an instant result\n  if (useIsFailing(severityKey, fieldName)) {\n    return true;\n  }\n\n  // Fallback: If not found in indices, check all tests (handles edge cases\n  // where indices might not yet be fully populated or during reprocessing).\n  return useAllFailuresByTestObjects(severityKey, fieldName);\n}\n\n/**\n * Checks if any test has the specified failure status using the TestRegistry.\n */\nfunction useIsFailing(severityKey: Severity, fieldName?: TFieldName): boolean {\n  if (severityKey === Severity.ERRORS) {\n    return useHasFromRegistry('failed', fieldName);\n  }\n\n  if (severityKey === Severity.WARNINGS) {\n    return useHasFromRegistry('warning', fieldName);\n  }\n\n  return false;\n}\n\n/**\n * Iterates through all tests in the root isolate to find failures matching the criteria.\n * This is used as a fallback or for more complex checks that indices don't cover.\n */\nfunction useAllFailuresByTestObjects(\n  severityKey: Severity,\n  fieldName?: TFieldName,\n): boolean {\n  const root = VestRuntime.useAvailableRoot();\n\n  if (!isVestIsolate(root)) {\n    return false;\n  }\n\n  const tests = root.data.tests;\n\n  return tests.some(testObject => {\n    return hasFailuresByTestObject(testObject, severityKey, fieldName);\n  });\n}\n\n/**\n * Determines whether a specific test object matches the failure criteria\n * (field name and severity profile).\n */\nexport function hasFailuresByTestObject(\n  testObject: TIsolateTest,\n  severityKey: Severity,\n  fieldName?: TFieldName,\n): boolean {\n  if (!VestTest.hasFailures(testObject).unwrap()) {\n    return false;\n  }\n\n  if (nonMatchingFieldName(VestTest.getData(testObject), fieldName).unwrap()) {\n    return false;\n  }\n\n  if (nonMatchingSeverityProfile(severityKey, testObject).unwrap()) {\n    return false;\n  }\n\n  return true;\n}\n","import { makeResult, Result } from 'vest-utils';\n\nimport { useMode } from '../../core/context/SuiteContext';\nimport { WithFieldName } from '../../core/test/TestTypes';\nimport { useHasErrorsByTestObjects } from '../../suiteResult/selectors/hasFailuresByTestObjects';\n\nimport { Modes } from './Modes';\n\n/**\n * Sets the current execution mode for the current suite.\n *\n * Supported modes:\n * - `EAGER` - (default) Runs all tests, but stops on first failure for each given field.\n * - `ALL` - Runs all tests, regardless of failures.\n * - `ONE` - Stops suite execution on first failure of any field.\n *\n * @example\n * ```js\n * import {Modes, create} from 'vest';\n *\n * const suite = create('suite_name', () => {\n *  vest.mode(Modes.ALL);\n *\n *  // ...\n * });\n * ```\n * @param 'ALL' | 'EAGER' | 'ONE' mode - The mode to set.\n */\n\n// @vx-allow use-use\nexport function mode(mode: Modes): void {\n  const [, setMode] = useMode();\n\n  setMode(mode);\n}\n\nfunction useIsMode(mode: Modes): Result<boolean> {\n  const [currentMode] = useMode();\n\n  return makeResult.Ok(currentMode === mode);\n}\n\nfunction useIsEager(): Result<boolean> {\n  return useIsMode(Modes.EAGER);\n}\n\nfunction useIsOne(): Result<boolean> {\n  return useIsMode(Modes.ONE);\n}\n\nexport function useShouldSkipBasedOnMode(testData: WithFieldName): boolean {\n  if (useIsOne().unwrap()) {\n    return useHasErrorsByTestObjects();\n  }\n\n  if (useIsEager().unwrap()) {\n    return useHasErrorsByTestObjects(testData.fieldName);\n  }\n\n  return false;\n}\n","import { makeResult, Result } from 'vest-utils';\n\nimport { useIsExcluded } from '../../../hooks/focused/useIsExcluded';\nimport { useShouldSkipBasedOnMode } from '../../../hooks/optional/mode';\nimport { useIsOptionalFieldApplied } from '../../../hooks/optional/optional';\nimport { useIsExcludedIndividually } from '../../../isolates/skipWhen';\nimport { TFieldName } from '../../../suiteResult/SuiteResultTypes';\nimport { TIsolateTest } from '../../isolate/IsolateTest/IsolateTest';\nimport { VestTest } from '../../isolate/IsolateTest/VestTest';\n\n// eslint-disable-next-line complexity\nexport function useVerifyTestRun(\n  testObject: TIsolateTest,\n  collisionResult: TIsolateTest = testObject,\n): TIsolateTest {\n  const testData = VestTest.getData(testObject);\n  if (VestTest.isStartedStatus(testObject)) {\n    // If the test is pending, we don't want to run it again.\n    // We just return the test object as is.\n    return testObject;\n  }\n\n  if (useShouldSkipBasedOnMode(testData)) {\n    return skipTestAndReturn(testObject).unwrap();\n  }\n\n  if (useShouldOmit(testData.fieldName).unwrap()) {\n    return omitTestAndReturn(testObject).unwrap();\n  }\n\n  if (useIsExcluded(testObject)) {\n    return useForceSkipIfInSkipWhen(collisionResult).unwrap();\n  }\n\n  return testObject;\n}\n\nfunction useShouldOmit(fieldName: TFieldName): Result<boolean> {\n  return makeResult.Ok(useIsOptionalFieldApplied(fieldName).unwrap());\n}\n\nfunction skipTestAndReturn(testNode: TIsolateTest): Result<TIsolateTest> {\n  VestTest.skip(testNode);\n  return makeResult.Ok(testNode);\n}\n\nfunction omitTestAndReturn(testNode: TIsolateTest): Result<TIsolateTest> {\n  VestTest.omit(testNode);\n  return makeResult.Ok(testNode);\n}\n\nfunction useForceSkipIfInSkipWhen(\n  testNode: TIsolateTest,\n): Result<TIsolateTest> {\n  // We're forcing skipping the pending test\n  // if we're directly within a skipWhen block\n  // This mostly means that we're probably giving\n  // up on this async test intentionally.\n  VestTest.skip(testNode, useIsExcludedIndividually());\n  return makeResult.Ok(testNode);\n}\n","import { makeResult, Result } from 'vest-utils';\n\nimport matchingFieldName from '../../test/helpers/matchingFieldName';\n\nimport { TIsolateTest } from './IsolateTest';\nimport { VestTest } from './VestTest';\n\nexport function isSameProfileTest(\n  testObject1: TIsolateTest,\n  testObject2: TIsolateTest,\n): Result<boolean> {\n  const gn1 = VestTest.getGroupName(testObject1);\n  const { fieldName: fn2 } = VestTest.getData(testObject2);\n  const gn2 = VestTest.getGroupName(testObject2);\n  return makeResult.Ok(\n    matchingFieldName(VestTest.getData(testObject1), fn2).unwrap() &&\n      gn1 === gn2 &&\n      // Specifically using == here. The reason is that when serializing\n      // suite result, empty key gets removed, but it can also be null.\n      testObject1.key == testObject2.key,\n  );\n}\n","import { makeResult, Result } from 'vest-utils';\n\nimport { TIsolateTest } from './IsolateTest';\nimport { VestTest } from './VestTest';\nimport { isSameProfileTest } from './isSameProfileTest';\n\nexport default function cancelOverriddenPendingTest(\n  prevRunTestObject: TIsolateTest,\n  currentRunTestObject: TIsolateTest,\n): Result<void> {\n  if (\n    currentRunTestObject !== prevRunTestObject &&\n    isSameProfileTest(prevRunTestObject, currentRunTestObject).unwrap() &&\n    VestTest.isStartedStatus(prevRunTestObject)\n  ) {\n    VestTest.cancel(prevRunTestObject);\n  }\n  return makeResult.Ok(undefined);\n}\n","import { Nullable, makeResult } from 'vest-utils';\nimport { Walker, VestRuntime, TIsolate } from 'vestjs-runtime';\n\nimport { TFieldName } from '../../../suiteResult/SuiteResultTypes';\nimport matchingFieldName from '../../test/helpers/matchingFieldName';\n\nimport { TIsolateTest } from './IsolateTest';\nimport { VestTest } from './VestTest';\n\nimport { useTestObjects } from '../registerTests';\n\ntype MaybeRoot = Nullable<TIsolate>;\n\nexport class TestWalker {\n  static defaultRoot = VestRuntime.useAvailableRoot;\n\n  static someTests(\n    predicate: (test: TIsolateTest) => boolean,\n    root: MaybeRoot = TestWalker.defaultRoot(),\n  ): boolean {\n    if (!root) return false;\n    return Walker.some(\n      root,\n      isolate => {\n        const test = VestTest.cast(isolate).unwrap();\n\n        return predicate(test);\n      },\n      VestTest.is,\n    );\n  }\n\n  static walkTests<F extends TFieldName>(\n    callback: (test: TIsolateTest<F>, breakout: () => void) => void,\n    root: MaybeRoot = TestWalker.defaultRoot(),\n  ): void {\n    if (!root) return;\n    Walker.walk(\n      root,\n      isolate => {\n        let broken = false;\n        callback(VestTest.cast<F>(isolate).unwrap(), () => {\n          broken = true;\n        });\n        if (broken) {\n          return makeResult.Err(undefined);\n        }\n        return makeResult.Ok(undefined);\n      },\n      VestTest.is,\n    );\n  }\n\n  static pluckTests(\n    predicate: (test: TIsolateTest) => boolean,\n    root: MaybeRoot = TestWalker.defaultRoot(),\n  ): void {\n    if (!root) return;\n    Walker.pluck(\n      root,\n      isolate => {\n        const test = VestTest.cast(isolate).unwrap();\n\n        return predicate(test);\n      },\n      VestTest.is,\n    );\n  }\n\n  static resetField(fieldName: TFieldName): void {\n    TestWalker.walkTests(testObject => {\n      if (matchingFieldName(VestTest.getData(testObject), fieldName).unwrap()) {\n        VestTest.reset(testObject);\n      }\n    }, TestWalker.defaultRoot());\n  }\n\n  static removeTestByFieldName(\n    fieldName: TFieldName,\n    root: MaybeRoot = TestWalker.defaultRoot(),\n  ): void {\n    TestWalker.pluckTests(testObject => {\n      return matchingFieldName(\n        VestTest.getData(testObject),\n        fieldName,\n      ).unwrap();\n    }, root);\n\n    const [, setTests] = useTestObjects();\n\n    setTests(tests =>\n      tests.filter((testObject: TIsolateTest) => {\n        return (\n          !VestTest.is(testObject) ||\n          !matchingFieldName(VestTest.getData(testObject), fieldName).unwrap()\n        );\n      }),\n    );\n  }\n}\n","import { isEmpty, dynamicValue } from 'vest-utils';\nimport { useEmit } from '../../core/VestBus/VestBus';\nimport { VestRuntime } from 'vestjs-runtime';\n\nimport {\n  SuiteOptionalFields,\n  TIsolateSuite,\n} from '../../core/isolate/IsolateSuite/IsolateSuite';\nimport { TIsolateTest } from '../../core/isolate/IsolateTest/IsolateTest';\nimport { TestWalker } from '../../core/isolate/IsolateTest/TestWalker';\nimport { VestTest } from '../../core/isolate/IsolateTest/VestTest';\n\n/**\n * This module gets triggered once the suite is done running its sync tests.\n *\n * It goes over all the tests in the state, and checks if they need to be omitted.\n */\n\nexport function useOmitOptionalFields(): void {\n  const root = VestRuntime.useAvailableRoot<TIsolateSuite>();\n\n  const optionalFields = SuiteOptionalFields.getOptionalFields(root);\n\n  // If there are no optional fields, we don't need to do anything\n  if (isEmpty(optionalFields)) {\n    return;\n  }\n\n  // Create an object to store the fields that need to be omitted\n  const shouldOmit = new Set<string>();\n\n  // iterate over each of the tests in the state\n  TestWalker.walkTests(testObject => {\n    if (VestTest.isStartedStatus(testObject)) {\n      return;\n    }\n    const { fieldName } = VestTest.getData(testObject);\n\n    // If we already added the current field (not this test specifically)\n    // no need for further checks, go and omit the test\n    if (shouldOmit.has(fieldName)) {\n      verifyAndOmit(testObject);\n    } else {\n      // check if the field has an optional function\n      // if so, run it and verify/omit the test\n      runOptionalConfig(testObject);\n    }\n  });\n\n  useEmit('DONE_TEST_OMISSION_PASS');\n\n  function verifyAndOmit(testObject: TIsolateTest) {\n    const { fieldName } = VestTest.getData(testObject);\n    if (shouldOmit.has(fieldName)) {\n      VestTest.omit(testObject);\n      SuiteOptionalFields.setOptionalField(root, fieldName, current => ({\n        ...current,\n        applied: true,\n      }));\n    }\n  }\n\n  function runOptionalConfig(testObject: TIsolateTest) {\n    const { fieldName } = VestTest.getData(testObject);\n\n    // Ge the optional configuration for the given field\n    const optionalConfig = SuiteOptionalFields.getOptionalField(\n      root,\n      fieldName,\n    );\n\n    // If the optional was set to a function or a boolean, run it and verify/omit the test\n    if (dynamicValue(optionalConfig.rule) === true) {\n      shouldOmit.add(fieldName);\n    }\n\n    verifyAndOmit(testObject);\n  }\n}\n","import { isArray, callEach, greaterThan } from 'vest-utils';\n\nimport { useDoneCallbacks, useFieldCallbacks } from '../core/Runtime';\nimport { TFieldName } from '../suiteResult/SuiteResultTypes';\nimport { useCreateSuiteResult } from '../suiteResult/suiteResult';\n\n/**\n * Runs done callback per field when async tests are finished running.\n */\nexport function useRunFieldCallbacks(fieldName: TFieldName): void {\n  const [fieldCallbacks] = useFieldCallbacks();\n\n  if (isArray(fieldCallbacks[fieldName])) {\n    callEach(fieldCallbacks[fieldName]);\n  }\n}\n\n/**\n * Runs field callbacks (done callbacks) that can be executed immediately.\n * This happens when a field has non-pending tests (synchronous tests).\n */\nexport function useRunSyncFieldCallbacks(): void {\n  const [fieldCallbacks] = useFieldCallbacks();\n  const result = useCreateSuiteResult();\n\n  // Iterate over all fields that have registered done callbacks\n  for (const fieldName in fieldCallbacks) {\n    // Get the array of callbacks for the current field\n    const callbacks = fieldCallbacks[fieldName];\n\n    if (isArray(callbacks)) {\n      // Get the summary stats for this field from the suite result\n      const testSummary = result.tests[fieldName];\n\n      // Check if the field has any tests that are NOT pending.\n      // testCount is the total number of tests for the field.\n      // pendingCount is the number of tests currently running (async).\n      // If testCount > pendingCount, it means there is at least one test\n      // that has already finished (synchronous), so we can run the callbacks.\n      if (\n        testSummary &&\n        greaterThan(testSummary.testCount, testSummary.pendingCount)\n      ) {\n        // Execute all registered callbacks for this field.\n        // This is the \"nested loop\" that iterates over the callbacks array.\n        callEach(callbacks);\n      }\n    }\n  }\n}\n\n/**\n * Runs unlabelled done callback when async tests are finished running.\n */\nexport function useRunDoneCallbacks() {\n  const [doneCallbacks] = useDoneCallbacks();\n\n  callEach(doneCallbacks);\n}\n","import { CB, BusType, Failure, deferThrow } from 'vest-utils';\nimport { Bus, RuntimeEvents, TIsolate, VestRuntime } from 'vestjs-runtime';\n\nimport { useOmitOptionalFields } from '../../hooks/optional/omitOptionalFields';\nimport { TIsolateSuite } from '../isolate/IsolateSuite/IsolateSuite';\nimport {\n  useRunDoneCallbacks,\n  useRunFieldCallbacks,\n  useRunSyncFieldCallbacks,\n} from '../../suite/runCallbacks';\nimport { TFieldName } from '../../suiteResult/SuiteResultTypes';\nimport {\n  useExpireSuiteResultCache,\n  useResetCallbacks,\n  useResetSuite,\n} from '../Runtime';\nimport { TestWalker } from '../isolate/IsolateTest/TestWalker';\nimport { VestTest } from '../isolate/IsolateTest/VestTest';\n\nimport { useOnTestStart, useRegisterSubtree } from '../isolate/registerTests';\nimport { useRegistryBusEvents } from '../test/TestRegistry';\n\nimport { Events } from './BusEvents';\n\n// eslint-disable-next-line max-statements, max-lines-per-function\nexport function useInitVestBus() {\n  const VestBus = Bus.useBus<VestEvents>();\n\n  useRegistryBusEvents(VestBus);\n\n  // Invalidate suite result cache on test start to prevent stale cache from\n  // affecting test exclusion logic (see https://github.com/ealush/vest/issues/1157).\n  VestBus.on('TEST_RUN_STARTED', () => {\n    useExpireSuiteResultCache();\n  });\n\n  VestBus.on('ISOLATE_ENTER', (isolate: TIsolate) => {\n    if (VestTest.is(isolate)) {\n      useOnTestStart(isolate);\n    }\n  });\n\n  VestBus.on('ISOLATE_RECONCILED', (isolate: TIsolate) => {\n    useRegisterSubtree(isolate);\n  });\n\n  VestBus.on('ISOLATE_DONE', (isolate: TIsolate) => {\n    if (VestTest.is(isolate)) {\n      VestBus.emit('TEST_COMPLETED', isolate);\n    }\n  });\n\n  VestBus.on('TEST_COMPLETED', () => {\n    useExpireSuiteResultCache();\n  });\n\n  VestBus.on('ASYNC_ISOLATE_DONE', (isolate: TIsolate) => {\n    if (VestTest.is(isolate)) {\n      if (!VestTest.isCanceled(isolate).unwrap()) {\n        const { fieldName } = VestTest.getData(isolate);\n\n        useRunFieldCallbacks(fieldName);\n        useRunDoneCallbacks();\n      }\n    }\n\n    if (VestRuntime.useIsStable()) {\n      // When no more async tests are running, emit the done event\n      VestBus.emit('ALL_RUNNING_TESTS_FINISHED');\n    }\n  });\n\n  VestBus.on('DONE_TEST_OMISSION_PASS', () => {\n    /* We NEED to refresh the cache here. Don't ask */\n    useExpireSuiteResultCache();\n  });\n\n  // Called when all the tests, including async, are done running\n  VestBus.on('ALL_RUNNING_TESTS_FINISHED', () => {\n    // Small optimization. We don't need to run this if there are no async tests\n    // The reason is that we run this function immediately after the suite callback\n    // is run, so if the suite is only comprised of sync tests, we don't need to\n    // run this function twice since we know for a fact the state is up to date\n    if (TestWalker.someTests(VestTest.isAsyncTest)) {\n      useOmitOptionalFields();\n    }\n\n    // resolve the suite's promise\n    const root = VestRuntime.useAvailableRoot<TIsolateSuite>();\n    if (root) {\n      root.data.resolver();\n    }\n  });\n\n  VestBus.on('DEFER_THROW', (failure: Failure<any, any>) => {\n    failure.mapError(deferThrow);\n  });\n\n  VestBus.on('RESET_FIELD', (fieldName: TFieldName) => {\n    useExpireSuiteResultCache();\n\n    TestWalker.resetField(fieldName);\n  });\n\n  VestBus.on('SUITE_RUN_STARTED', () => {});\n\n  VestBus.on('INITIALIZING_CALLBACKS', () => {\n    useExpireSuiteResultCache();\n    useResetCallbacks();\n  });\n\n  VestBus.on('SUITE_CALLBACK_RUN_FINISHED', () => {\n    useExpireSuiteResultCache();\n\n    if (VestRuntime.useIsStable()) {\n      // When no more async tests are running, emit the done event\n      VestBus.emit('ALL_RUNNING_TESTS_FINISHED');\n    }\n\n    useOmitOptionalFields();\n    useRunSyncFieldCallbacks();\n    useRunDoneCallbacks();\n  });\n\n  VestBus.on('REMOVE_FIELD', (fieldName: TFieldName) => {\n    useExpireSuiteResultCache();\n\n    TestWalker.removeTestByFieldName(fieldName);\n  });\n\n  VestBus.on('RESET_SUITE', () => {\n    useResetSuite();\n  });\n\n  return {\n    subscribe,\n  };\n\n  function subscribe<T extends keyof VestEvents>(\n    event: T,\n    cb: (payload: VestEvents[T]) => void,\n  ): CB<void>;\n  function subscribe(cb: CB): CB<void>;\n  function subscribe(\n    ...args: [event: keyof VestEvents, cb: CB] | [cb: CB]\n  ): CB<void> {\n    const [cb, event] = args.reverse() as [CB, keyof VestEvents];\n\n    // @ts-ignore - Argument type mismatch due to wildcard handling complexity\n    return VestBus.on(event ?? '*', () => {\n      cb();\n    }).off;\n  }\n}\n\nexport function useEmit(): BusType<VestEvents>['emit'];\nexport function useEmit<T extends keyof VestEvents>(\n  event: T,\n  ...args: VestEvents[T] extends void\n    ? [payload?: VestEvents[T]]\n    : [payload: VestEvents[T]]\n): void;\nexport function useEmit(event?: keyof VestEvents, data?: any): any {\n  return Bus.useEmit<VestEvents>(event!, data);\n}\n\nexport function usePrepareEmitter<T extends keyof VestEvents>(\n  event: T,\n): (arg: VestEvents[T]) => void {\n  return Bus.usePrepareEmitter<VestEvents>(event);\n}\n\nexport type VestEvents = Events & RuntimeEvents;\n\nexport type Subscribe = {\n  <T extends keyof VestEvents>(\n    event: T,\n    cb: (payload: VestEvents[T]) => void,\n  ): CB<void>;\n  (cb: CB): CB<void>;\n};\n","import { Maybe, Result, makeResult, text } from 'vest-utils';\nimport { IsolateInspector, Reconciler } from 'vestjs-runtime';\nimport type { TIsolate } from 'vestjs-runtime';\n\nimport { ErrorStrings } from '../../../errors/ErrorStrings';\nimport { useIsExcluded } from '../../../hooks/focused/useIsExcluded';\nimport { useVerifyTestRun } from '../../test/testLevelFlowControl/verifyTestRun';\n\nimport type { TIsolateTest } from './IsolateTest';\nimport { VestTest } from './VestTest';\nimport cancelOverriddenPendingTest from './cancelOverriddenPendingTest';\nimport { isSameProfileTest } from './isSameProfileTest';\nimport { useEmit } from '../../VestBus/VestBus';\n\nexport class IsolateTestReconciler {\n  static match(currentNode: TIsolate, historyNode: TIsolate): boolean {\n    return VestTest.is(currentNode) && VestTest.is(historyNode);\n  }\n\n  static reconcile(\n    currentNode: TIsolateTest,\n    historyNode: TIsolateTest,\n  ): TIsolateTest {\n    const reconcilerOutput = usePickNode(currentNode, historyNode).unwrap();\n\n    const nextNode = useVerifyTestRun(currentNode, reconcilerOutput);\n\n    cancelOverriddenPendingTestOnTestReRun(nextNode, currentNode, historyNode);\n\n    return nextNode;\n  }\n}\n\n// eslint-disable-next-line max-statements\nfunction usePickNode(\n  newNode: TIsolateTest,\n  prevNode: TIsolateTest,\n): Result<TIsolateTest> {\n  if (IsolateInspector.usesKey(newNode)) {\n    return useHandleTestWithKey(newNode);\n  }\n\n  const newNodeResult = makeResult.Ok(newNode);\n\n  if (\n    Reconciler.dropNextNodesOnReorder(nodeReorderDetected, newNode, prevNode)\n  ) {\n    useOrderResult(newNode, prevNode);\n    return newNodeResult;\n  }\n\n  if (!VestTest.is(prevNode)) {\n    // I believe we cannot actually reach this point.\n    // Because it should already be handled by nodeReorderDetected.\n    /* istanbul ignore next */\n    return newNodeResult;\n  }\n\n  // Re-run previously omitted tests to avoid stale \"optional\" identification.\n  // An omitted test has no result, so reusing it would cause the optional\n  // system to incorrectly treat the field as optional (since no test ran).\n  // Re-evaluation is conservative but correct.\n  if (VestTest.isOmitted(prevNode).unwrap()) {\n    return newNodeResult;\n  }\n\n  return makeResult.Ok(prevNode);\n}\n\nfunction useHandleTestWithKey(newNode: TIsolateTest): Result<TIsolateTest> {\n  return VestTest.cast(\n    Reconciler.handleIsolateNodeWithKey(newNode, (prevNode: TIsolateTest) => {\n      // This is the revoke callback. it determines whether we should revoke the previous node and use the new one.\n      if (VestTest.isNonActionable(prevNode).unwrap()) {\n        return true;\n      }\n\n      if (useIsExcluded(newNode)) {\n        return false;\n      }\n\n      return true;\n    }),\n  );\n}\n\nfunction cancelOverriddenPendingTestOnTestReRun(\n  nextNode: TIsolate,\n  currentNode: TIsolate,\n  prevTestObject: TIsolateTest,\n) {\n  if (nextNode === currentNode && VestTest.is(currentNode)) {\n    cancelOverriddenPendingTest(prevTestObject, currentNode).unwrap();\n  }\n}\n\nfunction nodeReorderDetected(\n  newNode: TIsolateTest,\n  prevNode: Maybe<TIsolate>,\n): boolean {\n  return (\n    VestTest.is(prevNode) && !isSameProfileTest(prevNode, newNode).unwrap()\n  );\n}\n\nfunction useOrderResult(\n  newNode: TIsolateTest,\n  prevNode: Maybe<TIsolate>,\n): Result<void> {\n  if (IsolateInspector.canReorder(newNode)) {\n    return makeResult.Ok(undefined);\n  }\n\n  const err = makeResult.Err(\n    text(ErrorStrings.TESTS_CALLED_IN_DIFFERENT_ORDER, {\n      fieldName: VestTest.getData(newNode).fieldName,\n      prevName: VestTest.is(prevNode)\n        ? VestTest.getData(prevNode).fieldName\n        : undefined,\n    }),\n  );\n\n  useEmit('DEFER_THROW', err);\n  return err;\n}\n","import { Nullable } from 'vest-utils';\nimport { TIsolate } from 'vestjs-runtime';\n\nimport { IsolateTestReconciler } from './IsolateTest/IsolateTestReconciler';\n\nconst reconcilers: IsolateReconciler[] = [IsolateTestReconciler];\n\nexport function registerReconciler(reconciler: IsolateReconciler) {\n  if (reconcilers.includes(reconciler)) {\n    return;\n  }\n\n  reconcilers.push(reconciler);\n}\n\nexport function VestReconciler(\n  currentNode: TIsolate,\n  historyNode: TIsolate,\n): Nullable<TIsolate> {\n  return (\n    reconcilers\n      .find(reconciler => reconciler.match(currentNode, historyNode))\n      ?.reconcile(currentNode, historyNode) ?? null\n  );\n}\n\ntype IsolateReconciler = {\n  match(currentNode: TIsolate, historyNode: TIsolate): boolean;\n  reconcile(currentNode: TIsolate, historyNode: TIsolate): TIsolate;\n};\n","import { CB, Maybe } from 'vest-utils';\nimport { TIsolate, Isolate, IsolateKey } from 'vestjs-runtime';\n\nimport { TestSeverity } from '../../../suiteResult/Severity';\nimport { TFieldName } from '../../../suiteResult/SuiteResultTypes';\nimport {\n  IsolateTestStateMachine,\n  TestStatus,\n} from '../../StateMachines/IsolateTestStateMachine';\nimport { AsyncTest, TestFn } from '../../test/TestTypes';\nimport { VestIsolateType } from '../VestIsolateType';\n\nexport type TIsolateTest<F extends TFieldName = TFieldName> = TIsolate<\n  CommonTestFields<F> & IsolateTestPayload\n>;\n\nexport function IsolateTest<F extends TFieldName = TFieldName>(\n  callback: CB,\n  input: CommonTestFields<F>,\n  key?: IsolateKey,\n): TIsolateTest<F> {\n  const payload: IsolateTestPayload = {\n    ...IsolateTestBase(),\n    fieldName: input.fieldName,\n    testFn: input.testFn,\n  };\n\n  if (input.message) {\n    payload.message = input.message;\n  }\n\n  const isolate = Isolate.create<IsolateTestPayload>(\n    VestIsolateType.Test,\n    callback,\n    payload,\n    key ?? null,\n  );\n\n  return isolate as TIsolateTest<F>;\n}\n\nexport function IsolateTestBase() {\n  return {\n    severity: TestSeverity.Error,\n    testStatus: IsolateTestStateMachine.initial(),\n  };\n}\n\nexport type IsolateTestPayload<F extends TFieldName = TFieldName> =\n  CommonTestFields<F> & {\n    severity: TestSeverity;\n    testStatus: TestStatus;\n    asyncTest?: AsyncTest;\n  };\n\ntype CommonTestFields<F extends TFieldName = TFieldName> = {\n  message?: Maybe<string>;\n  fieldName: F;\n  testFn: TestFn;\n};\n","import {\n  Maybe,\n  isStringValue,\n  isUndefined,\n  makeResult,\n  Result,\n} from 'vest-utils';\n\nexport function shouldUseErrorAsMessage(\n  message: Maybe<string>,\n  error: unknown,\n): Result<boolean> {\n  // kind of cheating with this safe guard, but it does the job\n  return makeResult.Ok(isUndefined(message) && isStringValue(error));\n}\n","import { TIsolate } from 'vestjs-runtime';\n\nimport { TIsolateTest } from '../isolate/IsolateTest/IsolateTest';\n\nconst TEST_REF = Symbol('vest_test_ref');\n\ntype AbortSignalWithTestRef = AbortSignal & {\n  [TEST_REF]?: TIsolateTest;\n};\n\nexport function getAbortController(isolate: TIsolate): AbortController {\n  if (isolate.abortController) {\n    return isolate.abortController;\n  }\n\n  isolate.abortController = new AbortController();\n\n  (isolate.abortController.signal as AbortSignalWithTestRef)[TEST_REF] =\n    isolate as TIsolateTest;\n\n  return isolate.abortController;\n}\n\nexport function getTestFromAbortSignal(\n  signal?: AbortSignal,\n): TIsolateTest | undefined {\n  return (signal as AbortSignalWithTestRef | undefined)?.[TEST_REF];\n}\n","import {\n  isPromise,\n  isStringValue,\n  text,\n  deferThrow,\n  makeResult,\n  Result,\n  isUndefined,\n} from 'vest-utils';\nimport { VestRuntime } from 'vestjs-runtime';\n\nimport { ErrorStrings } from '../../../errors/ErrorStrings';\nimport { SuiteContext } from '../../context/SuiteContext';\nimport { TIsolateTest } from '../../isolate/IsolateTest/IsolateTest';\nimport { VestTest } from '../../isolate/IsolateTest/VestTest';\nimport { TestResult } from '../TestTypes';\nimport { shouldUseErrorAsMessage } from '../helpers/shouldUseErrorMessage';\nimport { getAbortController } from '../Abortable';\n\nimport { useVerifyTestRun } from './verifyTestRun';\n\n/**\n * Attempts to run a test.\n * This function verifies if the test should run, and if so, runs it.\n * @param testObject - The test isolate to run.\n */\nexport function useAttemptRunTest(testObject: TIsolateTest) {\n  useVerifyTestRun(testObject);\n\n  if (VestTest.isUntested(testObject).unwrap()) {\n    return useRunTest(testObject).unwrap();\n  }\n\n  if (!VestTest.isNonActionable(testObject).unwrap()) {\n    // Probably unreachable. If we get here, it means that\n    // something was really wrong and should be reported.\n    /* istanbul ignore next */\n    deferThrow(\n      text(ErrorStrings.UNEXPECTED_TEST_REGISTRATION_ERROR, {\n        testObject: JSON.stringify(testObject),\n      }),\n    );\n  }\n}\n\n/**\n * Runs a synchronous test.\n * @param testObject - The test isolate to run.\n * @returns The result of the test run.\n */\nfunction useRunSyncTest(testObject: TIsolateTest): Result<TestResult> {\n  return makeResult.Ok(\n    SuiteContext.run({ currentTest: testObject }, () => {\n      const result = runTestCallback(testObject);\n\n      if (result === false) {\n        VestTest.fail(testObject);\n      }\n\n      return result;\n    }),\n  );\n}\n\nfunction runTestCallback(testObject: TIsolateTest): TestResult {\n  const { message, testFn } = VestTest.getData(testObject);\n\n  try {\n    return testFn({ signal: getAbortController(testObject).signal });\n  } catch (error) {\n    if (shouldUseErrorAsMessage(message, error).unwrap()) {\n      VestTest.getData(testObject).message = error as string;\n    }\n    return false;\n  }\n}\n\n/**\n * Runs a test, handling both synchronous and asynchronous tests.\n * If the test returns a promise, it is marked as async and added to the pending list.\n * @param testObject - The test isolate to run.\n * @returns A promise if the test is async, or undefined if it's sync.\n */\nfunction useRunTest(\n  testObject: TIsolateTest,\n): Result<Promise<void> | undefined> {\n  // Run test callback.\n  // If a promise is returned, set as async and\n  // Move to pending list.\n  const result = useRunSyncTest(testObject).unwrap();\n  try {\n    // try catch for safe property access\n    // in case object is an enforce chain\n    if (isPromise(result)) {\n      VestTest.getData(testObject).asyncTest = result;\n      return useRunAsyncTest(testObject);\n    }\n\n    onTestCompleted(testObject).unwrap();\n    return makeResult.Ok(undefined);\n  } catch (e) {\n    // Probably unreachable. If we get here, it means that\n    // something was really wrong and should be reported.\n    /* istanbul ignore next */\n    throw new Error(\n      text(ErrorStrings.UNEXPECTED_TEST_REGISTRATION_ERROR, {\n        testObject: JSON.stringify(testObject),\n        error: e,\n      }),\n    );\n  }\n}\n\n/**\n * Runs an asynchronous test.\n * Sets up the success and failure callbacks for the promise.\n * @param testObject - The test isolate to run.\n * @returns The promise of the async test.\n */\nfunction useRunAsyncTest(\n  testObject: TIsolateTest,\n): Result<Promise<void> | undefined> {\n  const { asyncTest, message } = VestTest.getData(testObject);\n\n  if (!isPromise(asyncTest)) return makeResult.Ok(undefined);\n  VestTest.setStarted(testObject);\n\n  const done = VestRuntime.persist(() => {\n    onTestCompleted(testObject).unwrap();\n  });\n  const fail = VestRuntime.persist((rejectionMessage?: unknown) => {\n    if (VestTest.isCanceled(testObject).unwrap()) {\n      return;\n    }\n\n    const errorMessage = isStringValue(rejectionMessage)\n      ? rejectionMessage\n      : rejectionMessage instanceof Error\n        ? rejectionMessage.message\n        : undefined;\n\n    VestTest.getData(testObject).message = isUndefined(message)\n      ? errorMessage\n      : message;\n    VestTest.fail(testObject);\n\n    done();\n  });\n\n  return makeResult.Ok(asyncTest.then(done, fail));\n}\n\nfunction onTestCompleted(testObject: TIsolateTest): Result<void> {\n  // Attempts passing if the test is not already failed.\n  // or is not canceled/omitted.\n  VestTest.pass(testObject);\n  return makeResult.Ok(undefined);\n}\n","import {\n  isFunction,\n  isStringValue,\n  makeBrand,\n  makeResult,\n  Result,\n  text,\n} from 'vest-utils';\nimport { IsolateKey } from 'vestjs-runtime';\n\nimport { ErrorStrings } from '../../errors/ErrorStrings';\nimport { TFieldName } from '../../suiteResult/SuiteResultTypes';\n\nimport { TestFn, TestMessage } from './TestTypes';\n\nexport type TestParams<F extends TFieldName = TFieldName> = {\n  fieldName: F;\n  key?: IsolateKey;\n  message?: TestMessage;\n  testFn: TestFn;\n};\n\nexport function validateTestParams(\n  fieldName: string,\n  ...rest: any[]\n): Result<TestParams, string> {\n  if (!isStringValue(fieldName)) {\n    return makeResult.Err(\n      text(ErrorStrings.INVALID_PARAM_PASSED_TO_FUNCTION, {\n        fn_name: 'test',\n        param: 'fieldName',\n        expected: 'string',\n      }),\n    );\n  }\n\n  const [message, testFn, key] = (\n    isFunction(rest[1]) ? rest : [undefined, ...rest]\n  ) as [TestMessage, TestFn, IsolateKey | undefined];\n\n  if (!isFunction(testFn)) {\n    return makeResult.Err(\n      text(ErrorStrings.INVALID_PARAM_PASSED_TO_FUNCTION, {\n        fn_name: 'test',\n        param: 'callback',\n        expected: 'function',\n      }),\n    );\n  }\n\n  return makeResult.Ok({\n    fieldName: makeBrand<TFieldName>(fieldName),\n    key,\n    message,\n    testFn,\n  });\n}\n","import { IsolateKey } from 'vestjs-runtime';\nimport { useEmit } from '../VestBus/VestBus';\n\nimport { IsolateTest, TIsolateTest } from '../isolate/IsolateTest/IsolateTest';\n\nimport { TestFn, TestMessage } from './TestTypes';\nimport { useAttemptRunTest } from './testLevelFlowControl/runTest';\nimport { validateTestParams } from './validateTestParams';\n\nfunction vestTest(\n  fieldName: string,\n  message: TestMessage,\n  cb: TestFn,\n): TIsolateTest;\nfunction vestTest(fieldName: string, cb: TestFn): TIsolateTest;\nfunction vestTest(\n  fieldName: string,\n  message: TestMessage,\n  cb: TestFn,\n  key: IsolateKey,\n): TIsolateTest;\nfunction vestTest(fieldName: string, cb: TestFn, key: IsolateKey): TIsolateTest;\n// eslint-disable-next-line vest-internal/use-use\nfunction vestTest(\n  fieldName: string,\n  ...args:\n    | [message: TestMessage, cb: TestFn]\n    | [cb: TestFn]\n    | [message: TestMessage, cb: TestFn, key: IsolateKey]\n    | [cb: TestFn, key: IsolateKey]\n): TIsolateTest {\n  const {\n    fieldName: safeFieldName,\n    message,\n    testFn,\n    key,\n  } = validateTestParams(fieldName, ...args).unwrap();\n\n  const testObjectInput = { fieldName: safeFieldName, message, testFn };\n\n  // This invalidates the suite cache.\n  useEmit('TEST_RUN_STARTED');\n\n  return IsolateTest(useAttemptRunTest, testObjectInput, key);\n}\n\nexport const test = vestTest;\n","import { Maybe, OneOrMoreOf, Result, makeResult } from 'vest-utils';\nimport {\n  IsolateFocused as VestRuntimeIsolateFocused,\n  FocusModes,\n  FocusSelectors,\n  type TIsolateFocused,\n} from 'vestjs-runtime';\n\nimport { TFieldName } from '../../suiteResult/SuiteResultTypes';\n\nexport { FocusModes, FocusSelectors, type TIsolateFocused };\n\nexport type FieldExclusion<F extends string = TFieldName> = Maybe<\n  OneOrMoreOf<F>\n>;\n\n/**\n * Adds a field or a list of fields into the inclusion list\n *\n * @example\n *\n * only('username');\n */\nexport function only(match: FieldExclusion<string> | false) {\n  return VestRuntimeIsolateFocused(\n    FocusModes.ONLY,\n    defaultMatch(match).unwrap(),\n  );\n}\n/**\n * Adds a field or a list of fields into the exclusion list\n *\n * @example\n *\n * skip('username');\n */\nexport function skip(match: FieldExclusion<string> | boolean) {\n  return VestRuntimeIsolateFocused(\n    FocusModes.SKIP,\n    defaultMatch(match).unwrap(),\n  );\n}\n\nfunction defaultMatch(\n  match: FieldExclusion<string> | boolean,\n): Result<FieldExclusion<string> | true> {\n  return makeResult.Ok(match === false ? [] : match);\n}\n","import { isNotNullish } from 'vest-utils';\nimport {\n  TIsolate,\n  Walker,\n  FocusSelectors,\n  TIsolateFocused,\n} from 'vestjs-runtime';\n\nimport { TIsolateTest } from '../../core/isolate/IsolateTest/IsolateTest';\n\n/**\n * Checks if context has included tests\n */\nexport function useHasOnliedTests(\n  testObject: TIsolateTest,\n  fieldName?: string,\n): boolean {\n  return isNotNullish(\n    Walker.findClosest<TIsolateFocused>(testObject, (child: TIsolate) => {\n      if (!FocusSelectors.isIsolateFocused(child)) return false;\n\n      return FocusSelectors.isOnlyFocused(child, fieldName);\n    }),\n  );\n}\n","import { dynamicValue, invariant, isStringValue, makeBrand } from 'vest-utils';\nimport { IsolateTransient, type TIsolate } from 'vestjs-runtime';\n\nimport { useInclusion } from '../core/context/SuiteContext';\nimport { TIsolateTest } from '../core/isolate/IsolateTest/IsolateTest';\nimport { ErrorStrings } from '../errors/ErrorStrings';\nimport { TDraftCondition } from '../suite/getTypedMethods';\nimport { TFieldName, TGroupName } from '../suiteResult/SuiteResultTypes';\nimport { useCreateSuiteResult } from '../suiteResult/suiteResult';\n\nimport { useHasOnliedTests } from './focused/useHasOnliedTests';\n\nconst INCLUDE_UNSET = Symbol('include_unset');\n\n/**\n * Conditionally includes a field for testing, based on specified criteria.\n *\n * @param {string} fieldName - The name of the field to include for testing.\n *\n * @example\n * include('confirm').when('password');\n * // Includes the \"confirm\" field for testing when the \"password\" field is included\n *\n * include('confirm').when(someValue);\n * // Includes the \"confirm\" field for testing when the value of `someValue` is true\n *\n * include('confirm').when(() => someValue);\n * // Includes the \"confirm\" field for testing when the callback function returns true\n *\n * include('username').when(result => result.hasErrors('username'));\n * // Includes the \"username\" field for testing when there are errors associated with it in the current suite result\n */\n// @vx-allow use-use\nexport function include<F extends TFieldName, G extends TGroupName>(\n  fieldName: F | string,\n): {\n  when: (condition: F | string | TFieldName | TDraftCondition<F, G>) => void;\n} {\n  invariant(isStringValue(fieldName));\n  const safeFieldName = makeBrand<TFieldName>(fieldName);\n  const conditionRef: IncludeConditionRef<F, G> = {\n    current: INCLUDE_UNSET,\n  };\n\n  IsolateTransient(useSetIncluded, 'Include', {\n    conditionRef,\n    fieldName: safeFieldName,\n  });\n\n  return { when };\n\n  /**\n   * Specifies the inclusion criteria for the field in `include` function.\n   */\n  function when(\n    condition: F | string | TFieldName | TDraftCondition<F, G>,\n  ): void {\n    invariant(condition !== fieldName, ErrorStrings.INCLUDE_SELF);\n\n    conditionRef.current = condition;\n  }\n}\n\ntype IncludeCondition<F extends TFieldName, G extends TGroupName> =\n  | F\n  | string\n  | TFieldName\n  | TDraftCondition<F, G>;\n\ntype IncludeConditionRef<F extends TFieldName, G extends TGroupName> = {\n  current: IncludeCondition<F, G> | typeof INCLUDE_UNSET;\n};\n\ntype IncludePayload<F extends TFieldName, G extends TGroupName> = {\n  conditionRef: IncludeConditionRef<F, G>;\n  fieldName: TFieldName;\n};\n\nfunction useSetIncluded<F extends TFieldName, G extends TGroupName>(\n  isolate: TIsolate<IncludePayload<F, G>>,\n): void {\n  const inclusion = useInclusion();\n  const { fieldName, conditionRef } = isolate.data;\n\n  // This callback will run as part of the \"isExcluded\" series of checks\n  inclusion[fieldName] = function isIncluded(\n    currentNode: TIsolateTest,\n  ): boolean {\n    const condition = conditionRef.current;\n\n    if (condition === INCLUDE_UNSET) {\n      return true;\n    }\n\n    if (isStringValue(condition)) {\n      return useHasOnliedTests(currentNode, makeBrand<TFieldName>(condition));\n    }\n\n    return dynamicValue(condition, () =>\n      useCreateSuiteResult(undefined, undefined),\n    );\n  };\n}\n","import { invariant } from 'vest-utils';\n\nimport { useCurrentTest } from '../core/context/SuiteContext';\nimport { VestTest } from '../core/isolate/IsolateTest/VestTest';\nimport { ErrorStrings } from '../errors/ErrorStrings';\nimport { TestSeverity } from '../suiteResult/Severity';\n\nexport function useWarn() {\n  const currentTest = useCurrentTest(ErrorStrings.HOOK_CALLED_OUTSIDE);\n\n  invariant(currentTest, ErrorStrings.USE_WARN_MUST_BE_CALLED_FROM_TEST);\n\n  return function setWarn(): void {\n    VestTest.setSeverity(currentTest, TestSeverity.Warning);\n  };\n}\n","import { useWarn } from './useWarn';\n\n/**\n * Sets the severity level of a test to `warn`, allowing it to fail without marking the suite as invalid.\n * Use this function within the body of a test to create warn-only tests.\n *\n * @returns {void}\n *\n * @example\n *   test('password', 'Your password strength is: WEAK', () => {\n *     warn();\n *\n *     enforce(data.password).matches(/0-9/);\n *   });\n *\n * @limitations\n * - The `warn` function should only be used within the body of a `test` function.\n * - When using `warn()` in an async test, it should be called in the synchronous portion of the test, not after an `await` call or in the Promise body (see `useWarn`).\n * - It is recommended to call `warn()` at the top of the test function.\n */\n// @vx-allow use-use\nexport function warn(): void {\n  const setWarn = useWarn();\n  setWarn();\n}\n","import { CB } from 'vest-utils';\n\nimport { IsolateReorderable } from 'vestjs-runtime';\n\nimport { TVestIsolate, VestIsolateType } from '../VestIsolateType';\n\nexport type TIsolateEach = TVestIsolate;\n\nexport function IsolateEach<Callback extends CB = CB>(\n  callback: Callback,\n): TIsolateEach {\n  return IsolateReorderable(callback, VestIsolateType.Each, {\n    tests: [],\n  }) as TIsolateEach;\n}\n","import { invariant, isFunction } from 'vest-utils';\n\nimport {\n  IsolateEach,\n  TIsolateEach,\n} from '../core/isolate/IsolateEach/IsolateEach';\nimport { ErrorStrings } from '../errors/ErrorStrings';\n\n/**\n * Iterates over an array of items, allowing to run tests individually per item.\n *\n * Requires setting a \"key\" property on each item tested.\n *\n * @example\n *\n * each(itemsArray, (item) => {\n *  test(item.name, 'Item value must not be empty', () => {\n *    enforce(item.value).isNotEmpty();\n *  }, item.id)\n * })\n */\nexport function each<T>(\n  list: T[],\n  callback: (arg: T, index: number) => void,\n): TIsolateEach {\n  invariant(\n    isFunction(callback),\n    ErrorStrings.EACH_CALLBACK_MUST_BE_A_FUNCTION,\n  );\n\n  return IsolateEach(() => {\n    list.forEach((arg, index) => {\n      callback(arg, index);\n    });\n  });\n}\n","import { CB, makeBrand, isNotEmptySet } from 'vest-utils';\nimport { TIsolate } from 'vestjs-runtime';\n\nimport { SuiteContext } from '../core/context/SuiteContext';\nimport {\n  createVestIsolate,\n  TVestIsolate,\n  VestIsolateType,\n} from '../core/isolate/VestIsolateType';\nimport { skip } from '../hooks/focused/focused';\nimport { TGroupName } from '../suiteResult/SuiteResultTypes';\n\nexport function group(groupName: string, callback: CB<void>): TIsolate;\nexport function group(callback: CB<void>): TIsolate;\nexport function group(\n  ...args: [groupName: string, callback: CB<void>] | [callback: CB<void>]\n): TIsolateGroup<TGroupName> {\n  const [callback, groupName] = args.reverse() as [\n    CB<void>,\n    string | undefined,\n  ];\n  const safeGroupName =\n    groupName === undefined ? undefined : makeBrand<TGroupName>(groupName);\n\n  return createVestIsolate(\n    VestIsolateType.Group,\n    () => {\n      // When `skipGroup` is set via `suite.focus({ skipGroup: ... })`, inject\n      // a `skip(true)` call at the top of the matching group's callback.\n      // This creates a transient Focused isolate inside the group scope with\n      // `matchAll: true`, causing all tests in this group to be excluded.\n      // Because the isolate is transient, it is not persisted in the suite\n      // state and adds zero overhead between runs.\n      if (groupName && shouldSkipGroup(groupName)) {\n        skip(true);\n      }\n      callback();\n    },\n    {\n      groupName: safeGroupName as TGroupName,\n    },\n  );\n}\n\n/**\n * Evaluates whether an entire group should be skipped based on `suite.focus()` modifiers.\n *\n * This function enforces the precedence rules: `skipGroup` > `onlyGroup`.\n *\n * 1. If `skipGroup` contains the group name, it is unconditionally skipped (destructive block-list).\n * 2. If `onlyGroup` is active (has items), and the group name is NOT in it, it is skipped (constructive allow-list).\n * 3. Otherwise, the group is allowed to run.\n *\n * @param {string} groupName - The name of the group being evaluated.\n * @returns {boolean} `true` if the group should be skipped, `false` otherwise.\n */\nfunction shouldSkipGroup(groupName: string): boolean {\n  const { modifiers } = SuiteContext.useX();\n\n  // 1. Destructive block-list takes absolute precedence\n  if (\n    isNotEmptySet(modifiers.skipGroup) &&\n    modifiers.skipGroup.has(groupName)\n  ) {\n    return true;\n  }\n\n  // 2. Constructive allow-list pruning\n  if (\n    isNotEmptySet(modifiers.onlyGroup) &&\n    !modifiers.onlyGroup.has(groupName)\n  ) {\n    return true;\n  }\n\n  return false;\n}\n\nexport type TIsolateGroup<G extends TGroupName = TGroupName> = TVestIsolate<{\n  groupName: G;\n}>;\n","import type { CB } from 'vest-utils';\nimport { dynamicValue } from 'vest-utils';\nimport { TIsolate } from 'vestjs-runtime';\n\nimport {\n  createVestIsolate,\n  VestIsolateType,\n} from '../core/isolate/VestIsolateType';\nimport { TDraftCondition } from '../suite/getTypedMethods';\nimport { TFieldName, TGroupName } from '../suiteResult/SuiteResultTypes';\nimport { LazyDraft } from '../suiteResult/selectors/LazyDraft';\n\n/**\n * Conditionally omits tests from the suite.\n *\n * Unlike `skipWhen`, omitted tests are **completely removed** from the\n * result — they do not retain their previous state and are not counted\n * in `testCount`, `errorCount`, or validity checks. Use `omitWhen` when\n * the tests are irrelevant to the current form state (e.g., omit\n * \"confirm password\" tests when the password field is empty).\n *\n * @example\n *\n * // Don't validate confirmation when password is empty\n * omitWhen(!data.password, () => {\n *   test('confirm', 'Passwords do not match', () => {\n *     enforce(data.confirm).equals(data.password);\n *   });\n * });\n */\n// @vx-allow use-use\nexport function omitWhen<F extends TFieldName, G extends TGroupName>(\n  conditional: TDraftCondition<F, G>,\n  callback: CB,\n): TIsolate {\n  return createVestIsolate(\n    VestIsolateType.OmitWhen,\n    () => {\n      const isOmitted = dynamicValue(conditional, LazyDraft<F, G>());\n\n      if (!isOmitted) {\n        callback();\n      }\n    },\n    {\n      tests: [],\n    },\n  );\n}\n","import { assign } from 'vest-utils';\n\nimport {\n  DoneCallback,\n  useDoneCallbacks,\n  useFieldCallbacks,\n} from '../../core/Runtime';\nimport { TFieldName } from '../../suiteResult/SuiteResultTypes';\n\nexport function useDeferDoneCallback(\n  doneCallback: DoneCallback,\n  fieldName?: TFieldName,\n): void {\n  const [, setFieldCallbacks] = useFieldCallbacks();\n  const [, setDoneCallbacks] = useDoneCallbacks();\n\n  if (fieldName) {\n    setFieldCallbacks(fieldCallbacks =>\n      assign(fieldCallbacks, {\n        [fieldName]: (fieldCallbacks[fieldName] || []).concat(doneCallback),\n      }),\n    );\n\n    return;\n  }\n\n  setDoneCallbacks(doneCallbacks => doneCallbacks.concat(doneCallback));\n}\n","import { StandardSchemaV1 } from 'vest-utils/standardSchemaSpec';\n\nimport { InferSchemaData, TSchema } from '../suiteResult/SuiteResultTypes';\n\nexport function getStandardSchema<S extends TSchema = undefined>(\n  staticRunner: any,\n): StandardSchemaV1.Props<InferSchemaData<S>, InferSchemaData<S>> {\n  return {\n    types: undefined,\n    validate: (value: unknown) => {\n      const result = staticRunner(value);\n      if (!result.hasErrors()) {\n        return { value: value as InferSchemaData<S> };\n      }\n      return {\n        issues: result.errors.map((error: any) => ({\n          ...(error.message === undefined ? {} : { message: error.message }),\n          path: error.fieldName ? error.fieldName.split('.') : undefined,\n        })),\n      };\n    },\n    vendor: 'vest',\n    version: 1,\n  };\n}\n","import { CB, DynamicValue } from 'vest-utils';\nimport { TIsolate, IsolateKey } from 'vestjs-runtime';\n\nimport { TIsolateTest } from '../core/isolate/IsolateTest/IsolateTest';\nimport { TestFn, TestMessage } from '../core/test/TestTypes';\nimport { test } from '../core/test/test';\nimport { FieldExclusion, only, skip } from '../hooks/focused/focused';\nimport { include } from '../hooks/include';\nimport { OptionalsInput } from '../hooks/optional/OptionalTypes';\nimport { optional } from '../hooks/optional/optional';\nimport { group } from '../isolates/group';\nimport { omitWhen } from '../isolates/omitWhen';\nimport { skipWhen } from '../isolates/skipWhen';\nimport {\n  SuiteResult,\n  TFieldName,\n  TGroupName,\n} from '../suiteResult/SuiteResultTypes';\n\nexport function getTypedMethods<\n  F extends TFieldName,\n  G extends TGroupName,\n>(): TTypedMethods<F, G> {\n  return {\n    group,\n    include,\n    omitWhen,\n    only,\n    optional,\n    skip,\n    skipWhen,\n    test,\n  };\n}\n\nexport type TTypedMethods<F extends TFieldName, G extends TGroupName> = {\n  include: (fieldName: F) => {\n    when: (condition: F | TDraftCondition<F, G>) => void;\n  };\n\n  omitWhen: (conditional: TDraftCondition<F, G>, callback: CB) => void;\n  only: {\n    (item: FieldExclusion<F>): void;\n  };\n  optional: (optionals: OptionalsInput<F>) => void;\n  skip: {\n    (item: FieldExclusion<F>): void;\n  };\n  skipWhen: (condition: TDraftCondition<F, G>, callback: CB) => void;\n  test: {\n    (fieldName: F, message: TestMessage, cb: TestFn): TIsolateTest;\n    (fieldName: F, cb: TestFn): TIsolateTest;\n    (\n      fieldName: F,\n      message: TestMessage,\n      cb: TestFn,\n      key: IsolateKey,\n    ): TIsolateTest;\n    (fieldName: F, cb: TestFn, key: IsolateKey): TIsolateTest;\n  };\n  group: {\n    (callback: () => void): TIsolate;\n    (groupName: G, callback: () => void): TIsolate;\n  };\n};\n\nexport type TDraftCondition<\n  F extends TFieldName,\n  G extends TGroupName,\n> = DynamicValue<boolean, [draft: SuiteResult<F, G>]>;\n","import { enforce } from 'n4s';\nimport {\n  assign,\n  asArray,\n  CB,\n  freezeAssign,\n  isArray,\n  isFunction,\n  isObject,\n  withResolvers,\n} from 'vest-utils';\n\nimport { useEmit } from '../core/VestBus/VestBus';\n\nimport { SuiteContext } from '../core/context/SuiteContext';\nimport { IsolateReorderable } from 'vestjs-runtime';\nimport { IsolateSuite } from '../core/isolate/IsolateSuite/IsolateSuite';\nimport { test } from '../core/test/test';\nimport { only, skip } from '../hooks/focused/focused';\nimport {\n  SuiteResult,\n  TFieldName,\n  TGroupName,\n  InferSchemaData,\n  TSchema,\n  InferSchemaOutput,\n} from '../suiteResult/SuiteResultTypes';\nimport { useCreateSuiteResult } from '../suiteResult/suiteResult';\n\nimport { SuiteModifiers, SuiteCallbackWithSchema } from './SuiteTypes';\n\ntype SchemaRunResult = {\n  readonly message?: string;\n  readonly pass: boolean;\n  readonly path?: readonly string[];\n  readonly type?: unknown;\n};\n\n/**\n * Creates the suite runner bound to a callback, modifiers and (optional) schema.\n *\n * The runner performs schema preprocessing once per run, stores the original input\n * and parsed output, and then executes the suite callback within SuiteContext.\n */\n// eslint-disable-next-line max-lines-per-function\nexport function useCreateSuiteRunner<\n  F extends TFieldName,\n  G extends TGroupName,\n  T extends CB = CB,\n  S extends TSchema = undefined,\n>(\n  suiteCallback: SuiteCallbackWithSchema<S, T>,\n  modifiers: SuiteModifiers<F, G>,\n  schema?: S,\n) {\n  const transformedModifiers = useTransformedModifiers<F, G>(modifiers);\n\n  return function runSuite(\n    ...args: S extends undefined\n      ? Parameters<T>\n      : [data: InferSchemaData<S>, ...args: any[]]\n  ): SuiteResult<F, G, S> {\n    const runTime = new Date();\n    const { resolve, promise } = withResolvers<SuiteResult<F, G, S>>();\n\n    const schemaInput = args[0];\n    const schemaRunResult = shouldRunSchema(schema)\n      ? runSchemaWithParse(schema, schemaInput, transformedModifiers)\n      : undefined;\n\n    const parsedDataChunk = getParsedDataChunk(schemaRunResult);\n\n    const parsedData = (\n      schema ? snapshotParsedData(parsedDataChunk) : undefined\n    ) as Partial<InferSchemaOutput<S>> | undefined;\n\n    const callbackInput = getCallbackInput(schemaRunResult, schemaInput);\n    const callbackArgs = [callbackInput, ...args.slice(1)] as Parameters<T>;\n    const runData = callbackInput;\n\n    const suiteResult = SuiteContext.run(\n      {\n        suiteParams: callbackArgs,\n        schema,\n        modifiers: transformedModifiers,\n      },\n      () => {\n        useEmit('SUITE_RUN_STARTED');\n\n        const useResolver = () => {\n          const result = useCreateSuiteResult<F, G, S>(\n            schema,\n            callbackInput,\n            runData,\n            runTime,\n            parsedData,\n            snapshotFocus(transformedModifiers),\n          );\n\n          if (!result.isPending()) {\n            resolve(result);\n          }\n\n          return result;\n        };\n\n        return IsolateSuite(\n          useRunSuiteCallback<F, T, S, G>({\n            args: callbackArgs,\n            modifiers: transformedModifiers,\n            schema,\n            schemaRunResult,\n            suiteCallback,\n            useResolver,\n          }),\n          useResolver,\n        ).output;\n      },\n    );\n\n    return bindSuiteResultMethods(promise, suiteResult, runData, runTime);\n  };\n}\n\n/**\n * Resolves the partial parsed data chunk from the schema run payload.\n */\nfunction getParsedDataChunk(\n  schemaRunResult: SchemaRunResult[] | undefined,\n): unknown {\n  if (!schemaRunResult || schemaRunResult.some(result => !result.pass)) {\n    return {};\n  }\n\n  const [firstResult] = schemaRunResult;\n  return firstResult?.type ?? {};\n}\n\n/**\n * Creates a defensive snapshot of the parsed data to prevent mutations\n * in the suite callback from affecting the result object.\n */\nfunction snapshotParsedData(data: unknown): unknown {\n  if (isArray(data)) {\n    return Object.freeze([...(data as unknown[])]);\n  }\n  if (isObject(data)) {\n    return freezeAssign({}, data as object);\n  }\n  return data;\n}\n\n/**\n * Resolves the value that should be passed into the suite callback.\n */\nfunction getCallbackInput(\n  schemaRunResult: SchemaRunResult[] | undefined,\n  fallback: unknown,\n): unknown {\n  if (!schemaRunResult || schemaRunResult.some(result => !result.pass)) {\n    return fallback;\n  }\n\n  const [firstResult] = schemaRunResult;\n  return firstResult?.type ?? fallback;\n}\n\n/**\n * Wraps suite callback execution and schema failure emission into an isolate callback.\n */\nfunction useRunSuiteCallback<\n  F extends TFieldName,\n  T extends CB = CB,\n  S extends TSchema = undefined,\n  G extends TGroupName = TGroupName,\n  D = unknown,\n>(params: {\n  args: any[];\n  modifiers: ReturnType<typeof useTransformedModifiers<F, G>>;\n  schema: S | undefined;\n  schemaRunResult?: SchemaRunResult[];\n  suiteCallback: SuiteCallbackWithSchema<S, T>;\n  useResolver: () => SuiteResult<F, G, S, D>;\n}) {\n  const {\n    args,\n    modifiers,\n    schema,\n    schemaRunResult,\n    suiteCallback,\n    useResolver,\n  } = params;\n\n  return () => {\n    // Focused modifiers are applied before user callback so every test in this run\n    // observes the same focus context.\n    only(modifiers.only);\n    skip(modifiers.skip);\n    (suiteCallback as CB)(...args);\n\n    IsolateReorderable(\n      runSchemaValidation(schema, schemaRunResult),\n      undefined,\n      {\n        tests: [],\n      },\n    );\n\n    useEmit('SUITE_CALLBACK_RUN_FINISHED');\n    return useResolver();\n  };\n}\n\n/**\n * Normalizes user-provided modifiers into deterministic sets for O(1) membership checks.\n */\nfunction useTransformedModifiers<F extends TFieldName, G extends TGroupName>(\n  modifiers: SuiteModifiers<F, G>,\n) {\n  return {\n    ...modifiers,\n    onlyGroup: new Set(modifiers.onlyGroup ? asArray(modifiers.onlyGroup) : []),\n    skipGroup: new Set(modifiers.skipGroup ? asArray(modifiers.skipGroup) : []),\n  };\n}\n\n/**\n * Normalizes internal focus Sets back into the external Array representation\n * and freezes the structure explicitly for immutability in the results.\n */\nfunction snapshotFocus<F extends TFieldName, G extends TGroupName>(\n  modifiers: ReturnType<typeof useTransformedModifiers<F, G>>,\n): SuiteModifiers<F, G> {\n  return freezeAssign<SuiteModifiers<F, G>>(\n    {},\n    snapshotField(modifiers, 'only'),\n    snapshotField(modifiers, 'skip'),\n    snapshotGroup(modifiers, 'onlyGroup'),\n    snapshotGroup(modifiers, 'skipGroup'),\n  );\n}\n\nfunction snapshotField<F extends TFieldName, G extends TGroupName>(\n  modifiers: ReturnType<typeof useTransformedModifiers<F, G>>,\n  key: 'only' | 'skip',\n): Partial<SuiteModifiers<F, G>> {\n  const original = modifiers[key];\n\n  if (!original) {\n    return {};\n  }\n  const value = asArray(original);\n  return value.length > 0 ? { [key]: Object.freeze([...value]) } : {};\n}\n\nfunction snapshotGroup<F extends TFieldName, G extends TGroupName>(\n  modifiers: ReturnType<typeof useTransformedModifiers<F, G>>,\n  key: 'onlyGroup' | 'skipGroup',\n): Partial<SuiteModifiers<F, G>> {\n  const value = modifiers[key];\n  return value.size > 0 ? { [key]: Object.freeze([...value]) } : {};\n}\n\n/**\n * Emits schema failures into vest test tree.\n */\nfunction runSchemaValidation<S extends TSchema = undefined>(\n  schema: S | undefined,\n  schemaRunResult?: SchemaRunResult[],\n) {\n  // eslint-disable-next-line complexity\n  return () => {\n    if (!shouldRunSchema(schema) || !schemaRunResult) {\n      return;\n    }\n\n    for (let i = 0; i < schemaRunResult.length; i++) {\n      const error = schemaRunResult[i];\n      if (error.pass) {\n        continue;\n      }\n\n      const fieldName = error.path?.length ? error.path.join('.') : '__root__';\n      const testKey = `${fieldName}_${i}`;\n      test(fieldName, error.message, () => false, testKey);\n    }\n  };\n}\n\n/**\n * Attempts to parse the schema. Returns null if parse fails gracefully,\n * so the caller can fall back to schema.run.\n */\nfunction tryParseSchema(\n  executableSchema: any,\n  data: unknown,\n): SchemaRunResult[] | null {\n  if (!isFunction(executableSchema.parse)) return null;\n\n  try {\n    const parsedValue = executableSchema.parse(data);\n\n    return shouldRunAfterParse(executableSchema)\n      ? normalizeSchemaRunResult(executableSchema.run(parsedValue), parsedValue)\n      : [{ pass: true, type: parsedValue }];\n  } catch (error) {\n    if (isExpectedSchemaParseError(error)) return null;\n    throw error;\n  }\n}\n\n/**\n * Runs schema parsing/validation in a safe order:\n * 1) try parse\n * 2) if parse succeeds, treat it as the authoritative validation output\n * 3) on expected parse validation failures, fallback to run(raw)\n */\nfunction runSchemaWithParse(\n  schema: any,\n  data: unknown,\n  modifiers: { only?: unknown; skip?: unknown },\n): SchemaRunResult[] {\n  const executableSchema = applySchemaFocus(schema, modifiers);\n\n  const parseResult = tryParseSchema(executableSchema, data);\n  if (parseResult) {\n    return parseResult;\n  }\n\n  if (isFunction(executableSchema.run)) {\n    return normalizeSchemaRunResult(executableSchema.run(data), data);\n  }\n\n  return [\n    {\n      pass: true,\n      type: data,\n    },\n  ];\n}\n\nconst N4S_VENDOR = 'n4s';\n\nfunction isN4sSchema(schema: any): boolean {\n  return schema?.['~standard']?.vendor === N4S_VENDOR && !!schema?.__schema;\n}\n\nfunction applySchemaFocus(\n  schema: any,\n  modifiers: { only?: unknown; skip?: unknown },\n): any {\n  if (!isN4sSchema(schema)) {\n    return schema;\n  }\n\n  const only = buildArrayProp(modifiers.only);\n  const skip = buildArrayProp(modifiers.skip);\n\n  return buildFocusedSchemaInstance(schema, only, skip);\n}\n\nfunction buildArrayProp(prop: unknown): string[] | null {\n  if (!prop) return null;\n  const arr = asArray(prop) as string[];\n  return arr.length > 0 ? arr : null;\n}\n\nfunction buildIntersectedSchemaInstance(\n  schema: any,\n  only: string[],\n  skip: string[],\n): any {\n  const skipSet = new Set(skip);\n  return enforce.pick(\n    schema.__schema,\n    only.filter(f => !skipSet.has(f)),\n  );\n}\n\nfunction buildFocusedSchemaInstance(\n  schema: any,\n  only: string[] | null,\n  skip: string[] | null,\n): any {\n  if (only) {\n    return skip\n      ? buildIntersectedSchemaInstance(schema, only, skip)\n      : enforce.pick(schema.__schema, only);\n  }\n\n  return skip ? enforce.omit(schema.__schema, skip) : schema;\n}\n\n/**\n * Converts unknown schema.run return value into a stable internal representation.\n */\nfunction normalizeSchemaRunResult(\n  candidate: unknown,\n  fallbackType: unknown,\n): SchemaRunResult[] {\n  if (isArray(candidate)) {\n    return candidate.map(entry =>\n      normalizeSingleSchemaRunResult(entry, fallbackType),\n    );\n  }\n\n  return [normalizeSingleSchemaRunResult(candidate, fallbackType)];\n}\n\n/**\n * Converts a single unknown run payload into a safe result shape.\n */\nfunction normalizeSingleSchemaRunResult(\n  candidate: unknown,\n  fallbackType: unknown,\n): SchemaRunResult {\n  if (!isSchemaRunResult(candidate)) {\n    return {\n      pass: false,\n      type: fallbackType,\n    };\n  }\n\n  return {\n    message: candidate.message,\n    pass: candidate.pass,\n    path: candidate.path,\n    type: candidate.type ?? fallbackType,\n  };\n}\n\n/**\n * Runtime type guard for schema run payloads.\n */\nfunction isSchemaRunResult(candidate: unknown): candidate is SchemaRunResult {\n  if (!isObject(candidate)) {\n    return false;\n  }\n\n  const value = candidate as Partial<SchemaRunResult>;\n\n  const hasPass = typeof value.pass === 'boolean';\n  const hasPath =\n    value.path === undefined ||\n    (isArray(value.path) && value.path.every(item => typeof item === 'string'));\n\n  return hasPass && hasPath;\n}\n\n/**\n * Detects parse errors that represent expected validation failures.\n */\nfunction isExpectedSchemaParseError(error: unknown): boolean {\n  if (error instanceof TypeError) {\n    return true;\n  }\n\n  if (!isObject(error)) {\n    return false;\n  }\n\n  const typedError = error as { isValidation?: unknown; name?: unknown };\n  return typedError.isValidation === true || typedError.name === 'TypeError';\n}\n\n/**\n * Determines whether schema.run should execute after a successful parse call.\n *\n * For n4s StandardSchema-backed rules, parse already performs full validation.\n * Re-running run(parsed) can break coercion chains where post-parse types differ\n * from pre-parse input expectations.\n */\nfunction shouldRunAfterParse(schema: any): boolean {\n  if (!isFunction(schema.run)) {\n    return false;\n  }\n\n  return schema?.['~standard']?.vendor !== N4S_VENDOR;\n}\n\nfunction shouldRunSchema(schema: unknown): boolean {\n  return !!schema;\n}\n\nfunction bindSuiteResultMethods<\n  F extends TFieldName,\n  G extends TGroupName,\n  S extends TSchema,\n>(\n  promise: Promise<SuiteResult<F, G, S>>,\n  suiteResult: SuiteResult<F, G, S>,\n  runData: unknown,\n  runTime: Date,\n): SuiteResult<F, G, S> {\n  const result = assign(promise, suiteResult);\n\n  Object.defineProperty(result, 'run', {\n    configurable: true,\n    enumerable: false,\n    value: Object.freeze({\n      data: Object.freeze({\n        raw: runData,\n        parsed: suiteResult.run.data.parsed,\n      }),\n      focus: suiteResult.run.focus,\n      time: runTime,\n    }),\n    writable: true,\n  });\n\n  return result;\n}\n","import { CB, makeBrand, withCatch } from 'vest-utils';\nimport { VestRuntime } from 'vestjs-runtime';\n\nimport { useEmit, usePrepareEmitter, Subscribe } from '../core/VestBus/VestBus';\n\nimport { useLoadSuite } from '../core/Runtime';\nimport { TIsolateSuite } from '../core/isolate/IsolateSuite/IsolateSuite';\nimport {\n  TFieldName,\n  TGroupName,\n  TSchema,\n  InferSchemaData,\n} from '../suiteResult/SuiteResultTypes';\nimport { bindSuiteSelectors } from '../suiteResult/selectors/suiteSelectors';\nimport { useCreateSuiteResult } from '../suiteResult/suiteResult';\n\nimport { SuiteModifiers, SuiteCallbackWithSchema } from './SuiteTypes';\nimport { useDeferDoneCallback } from './after/deferDoneCallback';\nimport { createSuite } from './createSuite';\nimport { getStandardSchema } from './getStandardSchema';\nimport { getTypedMethods } from './getTypedMethods';\nimport { useCreateSuiteRunner } from './useCreateSuiteRunner';\n\n/**\n * Creates the methods available on the Suite object (e.g., run, get, reset).\n *\n * @param {Function} suiteCallback - The body of the suite.\n * @param {Object} modifiers - The modifiers for the suite (e.g., only).\n * @param {Function} subscribe - The subscribe function for the suite bus.\n * @returns {Object} - The suite methods.\n */\nexport function useCreateSuiteMethods<\n  F extends TFieldName,\n  G extends TGroupName,\n  T extends CB = CB,\n  S extends TSchema = undefined,\n>(\n  suiteCallback: SuiteCallbackWithSchema<S, T>,\n  modifiers: SuiteModifiers<F, G>,\n  subscribe: Subscribe,\n  schema?: S,\n) {\n  const persistedRun = VestRuntime.persist(\n    useCreateSuiteRunner<F, G, T, S>(suiteCallback, modifiers, schema),\n  );\n  const staticRunner = VestRuntime.persist(\n    createStaticRunner<F, G, T, S>(suiteCallback, schema),\n  );\n\n  return useCreateSuiteMethodsHelper({\n    modifiers,\n    persistedRun,\n    schema,\n    staticRunner,\n    subscribe,\n    suiteCallback,\n  });\n}\n\nfunction useCreateSuiteMethodsHelper<\n  F extends TFieldName,\n  G extends TGroupName,\n  T extends CB = CB,\n  S extends TSchema = undefined,\n>(ctx: {\n  suiteCallback: SuiteCallbackWithSchema<S, T>;\n  modifiers: SuiteModifiers<F, G>;\n  subscribe: Subscribe;\n  schema?: S;\n  persistedRun: any;\n  staticRunner: any;\n}): ReturnType<typeof useGetSuiteMethods<F, G, T, S>> & {\n  '~standard': ReturnType<typeof getStandardSchema<S>>;\n} {\n  const suiteMethods = useGetSuiteMethods<F, G, T, S>(ctx);\n\n  return {\n    ...suiteMethods,\n    '~standard': getStandardSchema<S>(ctx.staticRunner),\n  };\n}\n\nfunction useGetSuiteMethods<\n  F extends TFieldName,\n  G extends TGroupName,\n  T extends CB = CB,\n  S extends TSchema = undefined,\n>(ctx: {\n  suiteCallback: SuiteCallbackWithSchema<S, T>;\n  modifiers: SuiteModifiers<F, G>;\n  subscribe: Subscribe;\n  schema?: S;\n  persistedRun: any;\n  staticRunner: any;\n}): any {\n  const { suiteCallback, modifiers, subscribe, schema } = ctx;\n\n  const get = VestRuntime.persist(() => useCreateSuiteResult<F, G, S>(schema));\n  return {\n    ...useGetLifecycleMethods(ctx),\n    dump: VestRuntime.persist(VestRuntime.useAvailableRoot<TIsolateSuite>),\n    get,\n    ...bindSuiteSelectors<F, G, S>(get),\n    ...getTypedMethods<F, G>(),\n    // focus and only must come after the spreads to prevent spread keys from overriding them\n    focus: VestRuntime.persist(\n      useCreateFocus<F, G, T, S>(suiteCallback, modifiers, subscribe, schema),\n    ),\n    only: VestRuntime.persist(\n      useCreateOnly<F, G, T, S>(suiteCallback, modifiers, subscribe, schema),\n    ),\n  };\n}\n\nfunction useGetLifecycleMethods<\n  F extends TFieldName,\n  G extends TGroupName,\n  T extends CB = CB,\n  S extends TSchema = undefined,\n>(ctx: {\n  suiteCallback: SuiteCallbackWithSchema<S, T>;\n  modifiers: SuiteModifiers<F, G>;\n  subscribe: Subscribe;\n  schema?: S;\n  persistedRun: any;\n  staticRunner: any;\n}) {\n  const { persistedRun, staticRunner, subscribe } = ctx;\n\n  return {\n    afterEach: VestRuntime.persist((cb: CB) =>\n      useAddAfterHelper<F, G, T, S>(ctx, cb),\n    ),\n    afterField: VestRuntime.persist((fieldName: F | string, cb: CB) =>\n      useAddAfterHelper<F, G, T, S>(\n        ctx,\n        cb,\n        makeBrand<TFieldName>(fieldName) as F,\n      ),\n    ),\n    remove: VestRuntime.persist((fieldName: F | string) =>\n      useEmit('REMOVE_FIELD', makeBrand<TFieldName>(fieldName)),\n    ),\n    reset: VestRuntime.persist(usePrepareEmitter('RESET_SUITE')),\n    resetField: VestRuntime.persist((fieldName: F | string) =>\n      useEmit('RESET_FIELD', makeBrand<TFieldName>(fieldName)),\n    ),\n    resume: VestRuntime.persist(useLoadSuite),\n    run: persistedRun,\n    runStatic: staticRunner,\n    subscribe,\n    validate: createValidate<T, S>(staticRunner),\n  };\n}\n\nfunction useAddAfterHelper<\n  F extends TFieldName,\n  G extends TGroupName,\n  T extends CB = CB,\n  S extends TSchema = undefined,\n>(\n  ctx: {\n    suiteCallback: SuiteCallbackWithSchema<S, T>;\n    modifiers: SuiteModifiers<F, G>;\n    subscribe: Subscribe;\n    schema?: S;\n    persistedRun: any;\n    staticRunner: any;\n  },\n  cb: CB,\n  fieldName?: F,\n): any {\n  useDeferDoneCallback(withCatch(cb), fieldName);\n  return useCreateSuiteMethodsHelper(ctx);\n}\n\n/**\n * Binds the lifecycle methods to the suite methods.\n * e.g. after, afterField, run...\n *\n * @param {Object} methods - The suite methods.\n * @returns {Object} - The suite methods with lifecycle methods bound.\n */\nexport function useBindSuiteLifecycle<\n  F extends TFieldName,\n  G extends TGroupName,\n  T extends CB = CB,\n  S extends TSchema = undefined,\n>(\n  methods: ReturnType<typeof useCreateSuiteMethods<F, G, T, S>>,\n): ReturnType<typeof useCreateSuiteMethods<F, G, T, S>> {\n  return {\n    ...methods,\n    afterEach: VestRuntime.persist(useInitCallback(methods.afterEach)),\n    afterField: VestRuntime.persist(useInitCallback(methods.afterField)),\n    run: VestRuntime.persist(useInitCallback(methods.run)),\n  };\n}\n\n/**\n * Creates a focus function that can be used to create a focused suite.\n *\n * @param {Function} suiteCallback - The body of the suite.\n * @param {Object} modifiers - The modifiers for the suite (e.g., only).\n * @param {Function} subscribe - The subscribe function for the suite bus.\n * @param {Object} schema - The optional schema for the suite.\n * @returns {Function} - The focus function.\n */\nfunction useCreateFocus<\n  F extends TFieldName,\n  G extends TGroupName,\n  T extends CB = CB,\n  S extends TSchema = undefined,\n>(\n  suiteCallback: SuiteCallbackWithSchema<S, T>,\n  modifiers: SuiteModifiers<F, G>,\n  subscribe: Subscribe,\n  schema?: S,\n) {\n  return function focus(config: SuiteModifiers<F, G>) {\n    return useCreateSuiteMethods<F, G, T, S>(\n      suiteCallback,\n      { ...modifiers, ...config },\n      subscribe,\n      schema,\n    );\n  };\n}\n\n/**\n * Creates an only function that can be used to create a focused suite on a specific field.\n * This is a shorthand for suite.focus({ only: 'fieldName' }).\n *\n * @param {Function} suiteCallback - The body of the suite.\n * @param {Object} modifiers - The modifiers for the suite (e.g., only).\n * @param {Function} subscribe - The subscribe function for the suite bus.\n * @param {Object} schema - The optional schema for the suite.\n * @returns {Function} - The only function.\n */\nfunction useCreateOnly<\n  F extends TFieldName,\n  G extends TGroupName,\n  T extends CB = CB,\n  S extends TSchema = undefined,\n>(\n  suiteCallback: SuiteCallbackWithSchema<S, T>,\n  modifiers: SuiteModifiers<F, G>,\n  subscribe: Subscribe,\n  schema?: S,\n) {\n  const focus = useCreateFocus<F, G, T, S>(\n    suiteCallback,\n    modifiers,\n    subscribe,\n    schema,\n  );\n  return function only(onlyField: NonNullable<SuiteModifiers<F, G>['only']>) {\n    return focus({ only: onlyField });\n  };\n}\n\n/**\n * Creates a static runner for the suite.\n *\n * @param {Function} suiteCallback - The body of the suite.\n * @param {Object} schema - The optional schema for the suite.\n * @returns {Function} - The static runner.\n */\nfunction createStaticRunner<\n  F extends TFieldName,\n  G extends TGroupName,\n  T extends CB = CB,\n  S extends TSchema = undefined,\n>(suiteCallback: SuiteCallbackWithSchema<S, T>, schema?: S) {\n  return function runStatic(\n    ...runArgs: S extends undefined\n      ? Parameters<T>\n      : [data: InferSchemaData<S>, ...args: any[]]\n  ) {\n    const suite = createSuite<F, G, T, S>(suiteCallback, schema);\n    return suite.run(...(runArgs as Parameters<typeof suite.run>));\n  };\n}\n\n/**\n * Wraps a callback to emit the 'INITIALIZING_CALLBACKS' event before execution.\n * This is used to ensure that any previous callbacks are cleared or handled correctly\n * before the new one runs.\n *\n * @param {Function} cb - The callback to wrap.\n * @returns {Function} - The wrapped callback.\n */\nfunction useInitCallback<U extends (...args: any[]) => any>(cb: U): U {\n  return ((...args: Parameters<U>) => {\n    useEmit('INITIALIZING_CALLBACKS');\n    return cb(...args);\n  }) as U;\n}\n\nfunction createValidate<T extends CB = CB, S extends TSchema = undefined>(\n  staticRunner: any,\n) {\n  return (\n    ...args: S extends undefined\n      ? [value: Parameters<T>[0]]\n      : [data: InferSchemaData<S>, ...args: any[]]\n  ) => (staticRunner as (...args: any[]) => any)(...args);\n}\n","import { CB, isFunction, makeResult, Result } from 'vest-utils';\n\nimport { ErrorStrings } from '../../errors/ErrorStrings';\n\nexport function validateSuiteCallback<T extends CB>(\n  suiteCallback: T,\n): Result<T, string> {\n  if (!isFunction(suiteCallback)) {\n    return makeResult.Err(ErrorStrings.SUITE_MUST_BE_INITIALIZED_WITH_FUNCTION);\n  }\n\n  return makeResult.Ok(suiteCallback);\n}\n","import { CB, makeResult, Result } from 'vest-utils';\nimport { VestRuntime } from 'vestjs-runtime';\n\nimport { useCreateVestState } from '../core/Runtime';\nimport { useInitVestBus } from '../core/VestBus/VestBus';\nimport { VestReconciler } from '../core/isolate/VestReconciler';\nimport {\n  InferSchemaOutput,\n  TFieldName,\n  TGroupName,\n  TSchema,\n} from '../suiteResult/SuiteResultTypes';\n\nimport { Suite, SuiteCallbackWithSchema } from './SuiteTypes';\nimport {\n  useBindSuiteLifecycle,\n  useCreateSuiteMethods,\n} from './useCreateSuiteMethods';\nimport { validateSuiteCallback } from './validateSuiteCallback/validateSuiteCallback';\n\nexport type SuiteConfig = {\n  fields: string;\n  groups?: string;\n};\n\n// @vx-allow use-use\nfunction createSuite<_Escape>(\n  suiteCallback: [_Escape] extends [null] ? CB : never,\n  schema?: any,\n): [_Escape] extends [null] ? Suite<TFieldName, TGroupName, CB, any> : never;\n// @vx-allow use-use\nfunction createSuite<\n  C extends SuiteConfig,\n  Data = any,\n  T extends (data: Data, ...args: any[]) => void = (\n    data: Data,\n    ...args: any[]\n  ) => void,\n>(\n  suiteCallback: T,\n  schema?: undefined,\n): Suite<\n  C['fields'],\n  C['groups'] extends string ? C['groups'] : string,\n  T,\n  undefined\n>;\n// @vx-allow use-use\nfunction createSuite<\n  S extends TSchema,\n  T extends (data: InferSchemaOutput<S>, ...args: any[]) => void = (\n    data: InferSchemaOutput<S>,\n    ...args: any[]\n  ) => void,\n>(\n  suiteCallback: T,\n  schema: S,\n): Suite<Extract<keyof InferSchemaOutput<S>, string>, TGroupName, T, S>;\n// @vx-allow use-use\nfunction createSuite<\n  F extends TFieldName = TFieldName,\n  G extends TGroupName = TGroupName,\n  T extends CB = CB,\n  S extends TSchema = undefined,\n>(suiteCallback: SuiteCallbackWithSchema<S, T>, schema?: S): Suite<F, G, T, S>;\n// @vx-allow use-use\nfunction createSuite<\n  F extends TFieldName = TFieldName,\n  G extends TGroupName = TGroupName,\n  T extends CB = CB,\n  S extends TSchema = undefined,\n>(suiteCallback: T, schema?: S): Suite<F, G, T, S> {\n  const suiteCallbackResult = validateSuiteCallback(suiteCallback).unwrap();\n\n  const stateRef = useCreateVestState({ VestReconciler });\n\n  return VestRuntime.Run(stateRef, () => {\n    const VestBus = useInitVestBus();\n\n    return createSuiteInstance().unwrap();\n\n    function createSuiteInstance(): Result<Suite<F, G, T, S>> {\n      const methods = useCreateSuiteMethods<F, G, T, S>(\n        suiteCallbackResult as SuiteCallbackWithSchema<S, T>,\n        {},\n        VestBus.subscribe,\n        schema,\n      );\n\n      return makeResult.Ok(useBindSuiteLifecycle(methods));\n    }\n  });\n}\n\nexport { createSuite };\n"],"mappings":"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"}