@manifest-network/manifest-mcp-core 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__test-utils__/callTool.d.ts +29 -0
- package/dist/__test-utils__/callTool.d.ts.map +1 -0
- package/dist/__test-utils__/callTool.js +45 -0
- package/dist/__test-utils__/callTool.js.map +1 -0
- package/dist/__test-utils__/mocks.d.ts +125 -0
- package/dist/__test-utils__/mocks.d.ts.map +1 -0
- package/dist/__test-utils__/mocks.js +146 -0
- package/dist/__test-utils__/mocks.js.map +1 -0
- package/dist/client.d.ts +67 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +209 -0
- package/dist/client.js.map +1 -0
- package/dist/config.d.ts +30 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +127 -0
- package/dist/config.js.map +1 -0
- package/dist/cosmos.d.ts +24 -0
- package/dist/cosmos.d.ts.map +1 -0
- package/dist/cosmos.js +85 -0
- package/dist/cosmos.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.js +20 -0
- package/dist/lcd-adapter.d.ts +15 -0
- package/dist/lcd-adapter.d.ts.map +1 -0
- package/dist/lcd-adapter.js +98 -0
- package/dist/lcd-adapter.js.map +1 -0
- package/dist/logger.d.ts +20 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +43 -0
- package/dist/logger.js.map +1 -0
- package/dist/modules.d.ts +63 -0
- package/dist/modules.d.ts.map +1 -0
- package/dist/modules.js +759 -0
- package/dist/modules.js.map +1 -0
- package/dist/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.js +78 -0
- package/dist/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.js.map +1 -0
- package/dist/node_modules/@vitest/expect/dist/index.d.ts +802 -0
- package/dist/node_modules/@vitest/expect/dist/index.d.ts.map +1 -0
- package/dist/node_modules/@vitest/expect/dist/index.js +1457 -0
- package/dist/node_modules/@vitest/expect/dist/index.js.map +1 -0
- package/dist/node_modules/@vitest/pretty-format/dist/index.d.ts +95 -0
- package/dist/node_modules/@vitest/pretty-format/dist/index.d.ts.map +1 -0
- package/dist/node_modules/@vitest/pretty-format/dist/index.js +877 -0
- package/dist/node_modules/@vitest/pretty-format/dist/index.js.map +1 -0
- package/dist/node_modules/@vitest/runner/dist/chunk-tasks.js +91 -0
- package/dist/node_modules/@vitest/runner/dist/chunk-tasks.js.map +1 -0
- package/dist/node_modules/@vitest/runner/dist/index.js +1381 -0
- package/dist/node_modules/@vitest/runner/dist/index.js.map +1 -0
- package/dist/node_modules/@vitest/runner/dist/tasks.d-D2GKpdwQ.d.ts +540 -0
- package/dist/node_modules/@vitest/runner/dist/tasks.d-D2GKpdwQ.d.ts.map +1 -0
- package/dist/node_modules/@vitest/runner/dist/utils.js +1 -0
- package/dist/node_modules/@vitest/snapshot/dist/environment.d-DOJxxZV9.d.ts +16 -0
- package/dist/node_modules/@vitest/snapshot/dist/environment.d-DOJxxZV9.d.ts.map +1 -0
- package/dist/node_modules/@vitest/snapshot/dist/index.d.ts +89 -0
- package/dist/node_modules/@vitest/snapshot/dist/index.d.ts.map +1 -0
- package/dist/node_modules/@vitest/snapshot/dist/index.js +649 -0
- package/dist/node_modules/@vitest/snapshot/dist/index.js.map +1 -0
- package/dist/node_modules/@vitest/snapshot/dist/rawSnapshot.d-U2kJUxDr.d.ts +40 -0
- package/dist/node_modules/@vitest/snapshot/dist/rawSnapshot.d-U2kJUxDr.d.ts.map +1 -0
- package/dist/node_modules/@vitest/spy/dist/index.d.ts +343 -0
- package/dist/node_modules/@vitest/spy/dist/index.d.ts.map +1 -0
- package/dist/node_modules/@vitest/spy/dist/index.js +386 -0
- package/dist/node_modules/@vitest/spy/dist/index.js.map +1 -0
- package/dist/node_modules/@vitest/utils/dist/chunk-pathe.M-eThtNZ.js +82 -0
- package/dist/node_modules/@vitest/utils/dist/chunk-pathe.M-eThtNZ.js.map +1 -0
- package/dist/node_modules/@vitest/utils/dist/diff.d.ts +14 -0
- package/dist/node_modules/@vitest/utils/dist/diff.d.ts.map +1 -0
- package/dist/node_modules/@vitest/utils/dist/diff.js +1297 -0
- package/dist/node_modules/@vitest/utils/dist/diff.js.map +1 -0
- package/dist/node_modules/@vitest/utils/dist/display.d.ts +15 -0
- package/dist/node_modules/@vitest/utils/dist/display.d.ts.map +1 -0
- package/dist/node_modules/@vitest/utils/dist/display.js +558 -0
- package/dist/node_modules/@vitest/utils/dist/display.js.map +1 -0
- package/dist/node_modules/@vitest/utils/dist/error.js +30 -0
- package/dist/node_modules/@vitest/utils/dist/error.js.map +1 -0
- package/dist/node_modules/@vitest/utils/dist/helpers.js +181 -0
- package/dist/node_modules/@vitest/utils/dist/helpers.js.map +1 -0
- package/dist/node_modules/@vitest/utils/dist/offset.js +27 -0
- package/dist/node_modules/@vitest/utils/dist/offset.js.map +1 -0
- package/dist/node_modules/@vitest/utils/dist/serialize.js +77 -0
- package/dist/node_modules/@vitest/utils/dist/serialize.js.map +1 -0
- package/dist/node_modules/@vitest/utils/dist/source-map.js +367 -0
- package/dist/node_modules/@vitest/utils/dist/source-map.js.map +1 -0
- package/dist/node_modules/@vitest/utils/dist/timers.js +37 -0
- package/dist/node_modules/@vitest/utils/dist/timers.js.map +1 -0
- package/dist/node_modules/@vitest/utils/dist/types.d-BCElaP-c.d.ts +38 -0
- package/dist/node_modules/@vitest/utils/dist/types.d-BCElaP-c.d.ts.map +1 -0
- package/dist/node_modules/@vitest/utils/dist/types.d.ts +25 -0
- package/dist/node_modules/@vitest/utils/dist/types.d.ts.map +1 -0
- package/dist/node_modules/chai/index.js +2875 -0
- package/dist/node_modules/chai/index.js.map +1 -0
- package/dist/node_modules/magic-string/dist/magic-string.es.js +939 -0
- package/dist/node_modules/magic-string/dist/magic-string.es.js.map +1 -0
- package/dist/node_modules/pathe/dist/shared/pathe.M-eThtNZ.js +85 -0
- package/dist/node_modules/pathe/dist/shared/pathe.M-eThtNZ.js.map +1 -0
- package/dist/node_modules/tinybench/dist/index.d.ts +91 -0
- package/dist/node_modules/tinybench/dist/index.d.ts.map +1 -0
- package/dist/node_modules/tinyrainbow/dist/index.d.ts +9 -0
- package/dist/node_modules/tinyrainbow/dist/index.d.ts.map +1 -0
- package/dist/node_modules/tinyrainbow/dist/index.js +86 -0
- package/dist/node_modules/tinyrainbow/dist/index.js.map +1 -0
- package/dist/node_modules/vitest/dist/chunks/_commonjsHelpers.D26ty3Ew.js +6 -0
- package/dist/node_modules/vitest/dist/chunks/_commonjsHelpers.D26ty3Ew.js.map +1 -0
- package/dist/node_modules/vitest/dist/chunks/benchmark.D0SlKNbZ.js +41 -0
- package/dist/node_modules/vitest/dist/chunks/benchmark.D0SlKNbZ.js.map +1 -0
- package/dist/node_modules/vitest/dist/chunks/benchmark.d.DAaHLpsq.d.ts +12 -0
- package/dist/node_modules/vitest/dist/chunks/benchmark.d.DAaHLpsq.d.ts.map +1 -0
- package/dist/node_modules/vitest/dist/chunks/global.d.x-ILCfAE.d.ts +100 -0
- package/dist/node_modules/vitest/dist/chunks/global.d.x-ILCfAE.d.ts.map +1 -0
- package/dist/node_modules/vitest/dist/chunks/rpc.MzXet3jl.js +57 -0
- package/dist/node_modules/vitest/dist/chunks/rpc.MzXet3jl.js.map +1 -0
- package/dist/node_modules/vitest/dist/chunks/rpc.d.BFMWpdph.d.ts +13 -0
- package/dist/node_modules/vitest/dist/chunks/rpc.d.BFMWpdph.d.ts.map +1 -0
- package/dist/node_modules/vitest/dist/chunks/test.CTcmp4Su.js +2791 -0
- package/dist/node_modules/vitest/dist/chunks/test.CTcmp4Su.js.map +1 -0
- package/dist/node_modules/vitest/dist/chunks/utils.BX5Fg8C4.js +44 -0
- package/dist/node_modules/vitest/dist/chunks/utils.BX5Fg8C4.js.map +1 -0
- package/dist/node_modules/vitest/dist/index.d.ts +9 -0
- package/dist/queries/auth.d.ts +15 -0
- package/dist/queries/auth.d.ts.map +1 -0
- package/dist/queries/auth.js +58 -0
- package/dist/queries/auth.js.map +1 -0
- package/dist/queries/bank.d.ts +15 -0
- package/dist/queries/bank.d.ts.map +1 -0
- package/dist/queries/bank.js +93 -0
- package/dist/queries/bank.js.map +1 -0
- package/dist/queries/billing.d.ts +15 -0
- package/dist/queries/billing.d.ts.map +1 -0
- package/dist/queries/billing.js +114 -0
- package/dist/queries/billing.js.map +1 -0
- package/dist/queries/distribution.d.ts +15 -0
- package/dist/queries/distribution.d.ts.map +1 -0
- package/dist/queries/distribution.js +73 -0
- package/dist/queries/distribution.js.map +1 -0
- package/dist/queries/gov.d.ts +15 -0
- package/dist/queries/gov.d.ts.map +1 -0
- package/dist/queries/gov.js +98 -0
- package/dist/queries/gov.js.map +1 -0
- package/dist/queries/group.d.ts +15 -0
- package/dist/queries/group.d.ts.map +1 -0
- package/dist/queries/group.js +159 -0
- package/dist/queries/group.js.map +1 -0
- package/dist/queries/index.d.ts +10 -0
- package/dist/queries/index.js +10 -0
- package/dist/queries/sku.d.ts +16 -0
- package/dist/queries/sku.d.ts.map +1 -0
- package/dist/queries/sku.js +85 -0
- package/dist/queries/sku.js.map +1 -0
- package/dist/queries/staking.d.ts +15 -0
- package/dist/queries/staking.d.ts.map +1 -0
- package/dist/queries/staking.js +127 -0
- package/dist/queries/staking.js.map +1 -0
- package/dist/queries/utils.d.ts +54 -0
- package/dist/queries/utils.d.ts.map +1 -0
- package/dist/queries/utils.js +74 -0
- package/dist/queries/utils.js.map +1 -0
- package/dist/retry.d.ts +48 -0
- package/dist/retry.d.ts.map +1 -0
- package/dist/retry.js +106 -0
- package/dist/retry.js.map +1 -0
- package/dist/server-utils.d.ts +61 -0
- package/dist/server-utils.d.ts.map +1 -0
- package/dist/server-utils.js +156 -0
- package/dist/server-utils.js.map +1 -0
- package/dist/tools/fundCredits.d.ts +8 -0
- package/dist/tools/fundCredits.d.ts.map +1 -0
- package/dist/tools/fundCredits.js +9 -0
- package/dist/tools/fundCredits.js.map +1 -0
- package/dist/tools/getBalance.d.ts +26 -0
- package/dist/tools/getBalance.d.ts.map +1 -0
- package/dist/tools/getBalance.js +59 -0
- package/dist/tools/getBalance.js.map +1 -0
- package/dist/tools/stopApp.d.ts +13 -0
- package/dist/tools/stopApp.d.ts.map +1 -0
- package/dist/tools/stopApp.js +15 -0
- package/dist/tools/stopApp.js.map +1 -0
- package/dist/transactions/bank.d.ts +11 -0
- package/dist/transactions/bank.d.ts.map +1 -0
- package/dist/transactions/bank.js +75 -0
- package/dist/transactions/bank.js.map +1 -0
- package/dist/transactions/billing.d.ts +11 -0
- package/dist/transactions/billing.d.ts.map +1 -0
- package/dist/transactions/billing.js +189 -0
- package/dist/transactions/billing.js.map +1 -0
- package/dist/transactions/distribution.d.ts +11 -0
- package/dist/transactions/distribution.d.ts.map +1 -0
- package/dist/transactions/distribution.js +60 -0
- package/dist/transactions/distribution.js.map +1 -0
- package/dist/transactions/gov.d.ts +11 -0
- package/dist/transactions/gov.d.ts.map +1 -0
- package/dist/transactions/gov.js +108 -0
- package/dist/transactions/gov.js.map +1 -0
- package/dist/transactions/group.d.ts +11 -0
- package/dist/transactions/group.d.ts.map +1 -0
- package/dist/transactions/group.js +347 -0
- package/dist/transactions/group.js.map +1 -0
- package/dist/transactions/index.d.ts +10 -0
- package/dist/transactions/index.js +10 -0
- package/dist/transactions/manifest.d.ts +11 -0
- package/dist/transactions/manifest.d.ts.map +1 -0
- package/dist/transactions/manifest.js +59 -0
- package/dist/transactions/manifest.js.map +1 -0
- package/dist/transactions/sku.d.ts +11 -0
- package/dist/transactions/sku.d.ts.map +1 -0
- package/dist/transactions/sku.js +191 -0
- package/dist/transactions/sku.js.map +1 -0
- package/dist/transactions/staking.d.ts +11 -0
- package/dist/transactions/staking.d.ts.map +1 -0
- package/dist/transactions/staking.js +79 -0
- package/dist/transactions/staking.js.map +1 -0
- package/dist/transactions/utils.d.ts +161 -0
- package/dist/transactions/utils.d.ts.map +1 -0
- package/dist/transactions/utils.js +272 -0
- package/dist/transactions/utils.js.map +1 -0
- package/dist/types.d.ts +390 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +45 -0
- package/dist/types.js.map +1 -0
- package/dist/validation.d.ts +30 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +53 -0
- package/dist/validation.js.map +1 -0
- package/dist/version.d.ts +5 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +6 -0
- package/dist/version.js.map +1 -0
- package/dist/wallet/index.d.ts +4 -0
- package/dist/wallet/index.js +3 -0
- package/dist/wallet/mnemonic.d.ts +47 -0
- package/dist/wallet/mnemonic.d.ts.map +1 -0
- package/dist/wallet/mnemonic.js +97 -0
- package/dist/wallet/mnemonic.js.map +1 -0
- package/dist/wallet/sign-arbitrary.d.ts +12 -0
- package/dist/wallet/sign-arbitrary.d.ts.map +1 -0
- package/dist/wallet/sign-arbitrary.js +36 -0
- package/dist/wallet/sign-arbitrary.js.map +1 -0
- package/package.json +72 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../../../../node_modules/@vitest/runner/dist/index.js"],"sourcesContent":["import { processError } from '@vitest/utils/error';\nimport { isObject, filterOutComments, ordinal, createDefer, assertTypes, toArray, isNegativeNaN, unique, objectAttr, shuffle } from '@vitest/utils/helpers';\nimport { getSafeTimers } from '@vitest/utils/timers';\nimport { format, formatRegExp, objDisplay } from '@vitest/utils/display';\nimport { w as getChainableContext, a as createChainable, v as validateTags, e as createTaskName, x as createNoTagsError, f as findTestFileStackTrace, d as createTagsFilter, b as createFileTask, c as calculateSuiteHash, u as someTasksAreOnly, q as interpretTaskModes, s as limitConcurrency, t as partitionSuiteChildren, p as hasTests, o as hasFailed } from './chunk-tasks.js';\nimport '@vitest/utils/source-map';\nimport 'pathe';\n\nclass PendingError extends Error {\n\tcode = \"VITEST_PENDING\";\n\ttaskId;\n\tconstructor(message, task, note) {\n\t\tsuper(message);\n\t\tthis.message = message;\n\t\tthis.note = note;\n\t\tthis.taskId = task.id;\n\t}\n}\nclass TestRunAbortError extends Error {\n\tname = \"TestRunAbortError\";\n\treason;\n\tconstructor(message, reason) {\n\t\tsuper(message);\n\t\tthis.reason = reason;\n\t}\n}\nclass FixtureDependencyError extends Error {\n\tname = \"FixtureDependencyError\";\n}\nclass FixtureAccessError extends Error {\n\tname = \"FixtureAccessError\";\n}\nclass FixtureParseError extends Error {\n\tname = \"FixtureParseError\";\n}\nclass AroundHookSetupError extends Error {\n\tname = \"AroundHookSetupError\";\n}\nclass AroundHookTeardownError extends Error {\n\tname = \"AroundHookTeardownError\";\n}\nclass AroundHookMultipleCallsError extends Error {\n\tname = \"AroundHookMultipleCallsError\";\n}\n\n// use WeakMap here to make the Test and Suite object serializable\nconst fnMap = new WeakMap();\nconst testFixtureMap = new WeakMap();\nconst hooksMap = new WeakMap();\nfunction setFn(key, fn) {\n\tfnMap.set(key, fn);\n}\nfunction getFn(key) {\n\treturn fnMap.get(key);\n}\nfunction setTestFixture(key, fixture) {\n\ttestFixtureMap.set(key, fixture);\n}\nfunction getTestFixtures(key) {\n\treturn testFixtureMap.get(key);\n}\nfunction setHooks(key, hooks) {\n\thooksMap.set(key, hooks);\n}\nfunction getHooks(key) {\n\treturn hooksMap.get(key);\n}\n\nclass TestFixtures {\n\t_suiteContexts;\n\t_overrides = new WeakMap();\n\t_registrations;\n\tstatic _definitions = [];\n\tstatic _builtinFixtures = [\n\t\t\"task\",\n\t\t\"signal\",\n\t\t\"onTestFailed\",\n\t\t\"onTestFinished\",\n\t\t\"skip\",\n\t\t\"annotate\"\n\t];\n\tstatic _fixtureOptionKeys = [\n\t\t\"auto\",\n\t\t\"injected\",\n\t\t\"scope\"\n\t];\n\tstatic _fixtureScopes = [\n\t\t\"test\",\n\t\t\"file\",\n\t\t\"worker\"\n\t];\n\tstatic _workerContextSuite = { type: \"worker\" };\n\tstatic clearDefinitions() {\n\t\tTestFixtures._definitions.length = 0;\n\t}\n\tstatic getWorkerContexts() {\n\t\treturn TestFixtures._definitions.map((f) => f.getWorkerContext());\n\t}\n\tstatic getFileContexts(file) {\n\t\treturn TestFixtures._definitions.map((f) => f.getFileContext(file));\n\t}\n\tconstructor(registrations) {\n\t\tthis._registrations = registrations ?? new Map();\n\t\tthis._suiteContexts = new WeakMap();\n\t\tTestFixtures._definitions.push(this);\n\t}\n\textend(runner, userFixtures) {\n\t\tconst { suite } = getCurrentSuite();\n\t\tconst isTopLevel = !suite || suite.file === suite;\n\t\tconst registrations = this.parseUserFixtures(runner, userFixtures, isTopLevel);\n\t\treturn new TestFixtures(registrations);\n\t}\n\tget(suite) {\n\t\tlet currentSuite = suite;\n\t\twhile (currentSuite) {\n\t\t\tconst overrides = this._overrides.get(currentSuite);\n\t\t\t// return the closest override\n\t\t\tif (overrides) {\n\t\t\t\treturn overrides;\n\t\t\t}\n\t\t\tif (currentSuite === currentSuite.file) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcurrentSuite = currentSuite.suite || currentSuite.file;\n\t\t}\n\t\treturn this._registrations;\n\t}\n\toverride(runner, userFixtures) {\n\t\tconst { suite: currentSuite, file } = getCurrentSuite();\n\t\tconst suite = currentSuite || file;\n\t\tconst isTopLevel = !currentSuite || currentSuite.file === currentSuite;\n\t\t// Create a copy of the closest parent's registrations to avoid modifying them\n\t\t// For chained calls, this.get(suite) returns this suite's overrides; for first call, returns parent's\n\t\tconst suiteRegistrations = new Map(this.get(suite));\n\t\tconst registrations = this.parseUserFixtures(runner, userFixtures, isTopLevel, suiteRegistrations);\n\t\t// If defined in top-level, just override all registrations\n\t\t// We don't support overriding suite-level fixtures anyway (it will throw an error)\n\t\tif (isTopLevel) {\n\t\t\tthis._registrations = registrations;\n\t\t} else {\n\t\t\tthis._overrides.set(suite, registrations);\n\t\t}\n\t}\n\tgetFileContext(file) {\n\t\tif (!this._suiteContexts.has(file)) {\n\t\t\tthis._suiteContexts.set(file, Object.create(null));\n\t\t}\n\t\treturn this._suiteContexts.get(file);\n\t}\n\tgetWorkerContext() {\n\t\tif (!this._suiteContexts.has(TestFixtures._workerContextSuite)) {\n\t\t\tthis._suiteContexts.set(TestFixtures._workerContextSuite, Object.create(null));\n\t\t}\n\t\treturn this._suiteContexts.get(TestFixtures._workerContextSuite);\n\t}\n\tparseUserFixtures(runner, userFixtures, supportNonTest, registrations = new Map(this._registrations)) {\n\t\tconst errors = [];\n\t\tObject.entries(userFixtures).forEach(([name, fn]) => {\n\t\t\tlet options;\n\t\t\tlet value;\n\t\t\tlet _options;\n\t\t\tif (Array.isArray(fn) && fn.length >= 2 && isObject(fn[1]) && Object.keys(fn[1]).some((key) => TestFixtures._fixtureOptionKeys.includes(key))) {\n\t\t\t\t_options = fn[1];\n\t\t\t\toptions = {\n\t\t\t\t\tauto: _options.auto ?? false,\n\t\t\t\t\tscope: _options.scope ?? \"test\",\n\t\t\t\t\tinjected: _options.injected ?? false\n\t\t\t\t};\n\t\t\t\tvalue = options.injected ? runner.injectValue?.(name) ?? fn[0] : fn[0];\n\t\t\t} else {\n\t\t\t\tvalue = fn;\n\t\t\t}\n\t\t\tconst parent = registrations.get(name);\n\t\t\tif (parent && options) {\n\t\t\t\tif (parent.scope !== options.scope) {\n\t\t\t\t\terrors.push(new FixtureDependencyError(`The \"${name}\" fixture was already registered with a \"${options.scope}\" scope.`));\n\t\t\t\t}\n\t\t\t\tif (parent.auto !== options.auto) {\n\t\t\t\t\terrors.push(new FixtureDependencyError(`The \"${name}\" fixture was already registered as { auto: ${options.auto} }.`));\n\t\t\t\t}\n\t\t\t} else if (parent) {\n\t\t\t\toptions = {\n\t\t\t\t\tauto: parent.auto,\n\t\t\t\t\tscope: parent.scope,\n\t\t\t\t\tinjected: parent.injected\n\t\t\t\t};\n\t\t\t} else if (!options) {\n\t\t\t\toptions = {\n\t\t\t\t\tauto: false,\n\t\t\t\t\tinjected: false,\n\t\t\t\t\tscope: \"test\"\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (options.scope && !TestFixtures._fixtureScopes.includes(options.scope)) {\n\t\t\t\terrors.push(new FixtureDependencyError(`The \"${name}\" fixture has unknown scope \"${options.scope}\".`));\n\t\t\t}\n\t\t\tif (!supportNonTest && options.scope !== \"test\") {\n\t\t\t\terrors.push(new FixtureDependencyError(`The \"${name}\" fixture cannot be defined with a ${options.scope} scope${!_options?.scope && parent?.scope ? \" (inherited from the base fixture)\" : \"\"} inside the describe block. Define it at the top level of the file instead.`));\n\t\t\t}\n\t\t\tconst deps = isFixtureFunction(value) ? getUsedProps(value) : new Set();\n\t\t\tconst item = {\n\t\t\t\tname,\n\t\t\t\tvalue,\n\t\t\t\tauto: options.auto ?? false,\n\t\t\t\tinjected: options.injected ?? false,\n\t\t\t\tscope: options.scope ?? \"test\",\n\t\t\t\tdeps,\n\t\t\t\tparent\n\t\t\t};\n\t\t\tregistrations.set(name, item);\n\t\t\tif (item.scope === \"worker\" && (runner.pool === \"vmThreads\" || runner.pool === \"vmForks\")) {\n\t\t\t\titem.scope = \"file\";\n\t\t\t}\n\t\t});\n\t\t// validate fixture dependency scopes\n\t\tfor (const fixture of registrations.values()) {\n\t\t\tfor (const depName of fixture.deps) {\n\t\t\t\tif (TestFixtures._builtinFixtures.includes(depName)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst dep = registrations.get(depName);\n\t\t\t\tif (!dep) {\n\t\t\t\t\terrors.push(new FixtureDependencyError(`The \"${fixture.name}\" fixture depends on unknown fixture \"${depName}\".`));\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (depName === fixture.name && !fixture.parent) {\n\t\t\t\t\terrors.push(new FixtureDependencyError(`The \"${fixture.name}\" fixture depends on itself, but does not have a base implementation.`));\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (TestFixtures._fixtureScopes.indexOf(fixture.scope) > TestFixtures._fixtureScopes.indexOf(dep.scope)) {\n\t\t\t\t\terrors.push(new FixtureDependencyError(`The ${fixture.scope} \"${fixture.name}\" fixture cannot depend on a ${dep.scope} fixture \"${dep.name}\".`));\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (errors.length === 1) {\n\t\t\tthrow errors[0];\n\t\t} else if (errors.length > 1) {\n\t\t\tthrow new AggregateError(errors, \"Cannot resolve user fixtures. See errors for more information.\");\n\t\t}\n\t\treturn registrations;\n\t}\n}\nconst cleanupFnArrayMap = new WeakMap();\nasync function callFixtureCleanup(context) {\n\tconst cleanupFnArray = cleanupFnArrayMap.get(context) ?? [];\n\tfor (const cleanup of cleanupFnArray.reverse()) {\n\t\tawait cleanup();\n\t}\n\tcleanupFnArrayMap.delete(context);\n}\n/**\n* Returns the current number of cleanup functions registered for the context.\n* This can be used as a checkpoint to later clean up only fixtures added after this point.\n*/\nfunction getFixtureCleanupCount(context) {\n\treturn cleanupFnArrayMap.get(context)?.length ?? 0;\n}\n/**\n* Cleans up only fixtures that were added after the given checkpoint index.\n* This is used by aroundEach to clean up fixtures created inside runTest()\n* while preserving fixtures that were created for aroundEach itself.\n*/\nasync function callFixtureCleanupFrom(context, fromIndex) {\n\tconst cleanupFnArray = cleanupFnArrayMap.get(context);\n\tif (!cleanupFnArray || cleanupFnArray.length <= fromIndex) {\n\t\treturn;\n\t}\n\t// Get items added after the checkpoint\n\tconst toCleanup = cleanupFnArray.slice(fromIndex);\n\t// Clean up in reverse order\n\tfor (const cleanup of toCleanup.reverse()) {\n\t\tawait cleanup();\n\t}\n\t// Remove cleaned up items from the array, keeping items before checkpoint\n\tcleanupFnArray.length = fromIndex;\n}\nconst contextHasFixturesCache = new WeakMap();\nfunction withFixtures(fn, options) {\n\tconst collector = getCurrentSuite();\n\tconst suite = options?.suite || collector.suite || collector.file;\n\treturn async (hookContext) => {\n\t\tconst context = hookContext || options?.context;\n\t\tif (!context) {\n\t\t\tif (options?.suiteHook) {\n\t\t\t\tvalidateSuiteHook(fn, options.suiteHook, options.stackTraceError);\n\t\t\t}\n\t\t\treturn fn({});\n\t\t}\n\t\tconst fixtures = options?.fixtures || getTestFixtures(context);\n\t\tif (!fixtures) {\n\t\t\treturn fn(context);\n\t\t}\n\t\tconst registrations = fixtures.get(suite);\n\t\tif (!registrations.size) {\n\t\t\treturn fn(context);\n\t\t}\n\t\tconst usedFixtures = [];\n\t\tconst usedProps = getUsedProps(fn);\n\t\tfor (const fixture of registrations.values()) {\n\t\t\tif (fixture.auto || usedProps.has(fixture.name)) {\n\t\t\t\tusedFixtures.push(fixture);\n\t\t\t}\n\t\t}\n\t\tif (!usedFixtures.length) {\n\t\t\treturn fn(context);\n\t\t}\n\t\tif (!cleanupFnArrayMap.has(context)) {\n\t\t\tcleanupFnArrayMap.set(context, []);\n\t\t}\n\t\tconst cleanupFnArray = cleanupFnArrayMap.get(context);\n\t\tconst pendingFixtures = resolveDeps(usedFixtures, registrations);\n\t\tif (!pendingFixtures.length) {\n\t\t\treturn fn(context);\n\t\t}\n\t\t// Check if suite-level hook is trying to access test-scoped fixtures\n\t\t// Suite hooks (beforeAll/afterAll/aroundAll) can only access file/worker scoped fixtures\n\t\tif (options?.suiteHook) {\n\t\t\tconst testScopedFixtures = pendingFixtures.filter((f) => f.scope === \"test\");\n\t\t\tif (testScopedFixtures.length > 0) {\n\t\t\t\tconst fixtureNames = testScopedFixtures.map((f) => `\"${f.name}\"`).join(\", \");\n\t\t\t\tconst alternativeHook = {\n\t\t\t\t\taroundAll: \"aroundEach\",\n\t\t\t\t\tbeforeAll: \"beforeEach\",\n\t\t\t\t\tafterAll: \"afterEach\"\n\t\t\t\t};\n\t\t\t\tconst error = new FixtureDependencyError(`Test-scoped fixtures cannot be used inside ${options.suiteHook} hook. ` + `The following fixtures are test-scoped: ${fixtureNames}. ` + `Use { scope: 'file' } or { scope: 'worker' } fixtures instead, or move the logic to ${alternativeHook[options.suiteHook]} hook.`);\n\t\t\t\t// Use stack trace from hook registration for better error location\n\t\t\t\tif (options.stackTraceError?.stack) {\n\t\t\t\t\terror.stack = error.message + options.stackTraceError.stack.replace(options.stackTraceError.message, \"\");\n\t\t\t\t}\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t\tif (!contextHasFixturesCache.has(context)) {\n\t\t\tcontextHasFixturesCache.set(context, new WeakSet());\n\t\t}\n\t\tconst cachedFixtures = contextHasFixturesCache.get(context);\n\t\tfor (const fixture of pendingFixtures) {\n\t\t\tif (fixture.scope === \"test\") {\n\t\t\t\t// fixture could be already initialized during \"before\" hook\n\t\t\t\t// we can't check \"fixture.name\" in context because context may\n\t\t\t\t// access the parent fixture ({ a: ({ a }) => {} })\n\t\t\t\tif (cachedFixtures.has(fixture)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tcachedFixtures.add(fixture);\n\t\t\t\tconst resolvedValue = await resolveTestFixtureValue(fixture, context, cleanupFnArray);\n\t\t\t\tcontext[fixture.name] = resolvedValue;\n\t\t\t\tcleanupFnArray.push(() => {\n\t\t\t\t\tcachedFixtures.delete(fixture);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconst resolvedValue = await resolveScopeFixtureValue(fixtures, suite, fixture);\n\t\t\t\tcontext[fixture.name] = resolvedValue;\n\t\t\t}\n\t\t}\n\t\treturn fn(context);\n\t};\n}\nfunction isFixtureFunction(value) {\n\treturn typeof value === \"function\";\n}\nfunction resolveTestFixtureValue(fixture, context, cleanupFnArray) {\n\tif (!isFixtureFunction(fixture.value)) {\n\t\treturn fixture.value;\n\t}\n\treturn resolveFixtureFunction(fixture.value, context, cleanupFnArray);\n}\nconst scopedFixturePromiseCache = new WeakMap();\nasync function resolveScopeFixtureValue(fixtures, suite, fixture) {\n\tconst workerContext = fixtures.getWorkerContext();\n\tconst fileContext = fixtures.getFileContext(suite.file);\n\tconst fixtureContext = fixture.scope === \"worker\" ? workerContext : fileContext;\n\tif (!isFixtureFunction(fixture.value)) {\n\t\tfixtureContext[fixture.name] = fixture.value;\n\t\treturn fixture.value;\n\t}\n\tif (fixture.name in fixtureContext) {\n\t\treturn fixtureContext[fixture.name];\n\t}\n\tif (scopedFixturePromiseCache.has(fixture)) {\n\t\treturn scopedFixturePromiseCache.get(fixture);\n\t}\n\tif (!cleanupFnArrayMap.has(fixtureContext)) {\n\t\tcleanupFnArrayMap.set(fixtureContext, []);\n\t}\n\tconst cleanupFnFileArray = cleanupFnArrayMap.get(fixtureContext);\n\tconst promise = resolveFixtureFunction(fixture.value, fixture.scope === \"file\" ? {\n\t\t...workerContext,\n\t\t...fileContext\n\t} : fixtureContext, cleanupFnFileArray).then((value) => {\n\t\tfixtureContext[fixture.name] = value;\n\t\tscopedFixturePromiseCache.delete(fixture);\n\t\treturn value;\n\t});\n\tscopedFixturePromiseCache.set(fixture, promise);\n\treturn promise;\n}\nasync function resolveFixtureFunction(fixtureFn, context, cleanupFnArray) {\n\t// wait for `use` call to extract fixture value\n\tconst useFnArgPromise = createDefer();\n\tlet isUseFnArgResolved = false;\n\tconst fixtureReturn = fixtureFn(context, async (useFnArg) => {\n\t\t// extract `use` argument\n\t\tisUseFnArgResolved = true;\n\t\tuseFnArgPromise.resolve(useFnArg);\n\t\t// suspend fixture teardown by holding off `useReturnPromise` resolution until cleanup\n\t\tconst useReturnPromise = createDefer();\n\t\tcleanupFnArray.push(async () => {\n\t\t\t// start teardown by resolving `use` Promise\n\t\t\tuseReturnPromise.resolve();\n\t\t\t// wait for finishing teardown\n\t\t\tawait fixtureReturn;\n\t\t});\n\t\tawait useReturnPromise;\n\t}).catch((e) => {\n\t\t// treat fixture setup error as test failure\n\t\tif (!isUseFnArgResolved) {\n\t\t\tuseFnArgPromise.reject(e);\n\t\t\treturn;\n\t\t}\n\t\t// otherwise re-throw to avoid silencing error during cleanup\n\t\tthrow e;\n\t});\n\treturn useFnArgPromise;\n}\nfunction resolveDeps(usedFixtures, registrations, depSet = new Set(), pendingFixtures = []) {\n\tusedFixtures.forEach((fixture) => {\n\t\tif (pendingFixtures.includes(fixture)) {\n\t\t\treturn;\n\t\t}\n\t\tif (!isFixtureFunction(fixture.value) || !fixture.deps) {\n\t\t\tpendingFixtures.push(fixture);\n\t\t\treturn;\n\t\t}\n\t\tif (depSet.has(fixture)) {\n\t\t\tif (fixture.parent) {\n\t\t\t\tfixture = fixture.parent;\n\t\t\t} else {\n\t\t\t\tthrow new Error(`Circular fixture dependency detected: ${fixture.name} <- ${[...depSet].reverse().map((d) => d.name).join(\" <- \")}`);\n\t\t\t}\n\t\t}\n\t\tdepSet.add(fixture);\n\t\tresolveDeps([...fixture.deps].map((n) => n === fixture.name ? fixture.parent : registrations.get(n)).filter((n) => !!n), registrations, depSet, pendingFixtures);\n\t\tpendingFixtures.push(fixture);\n\t\tdepSet.clear();\n\t});\n\treturn pendingFixtures;\n}\nfunction validateSuiteHook(fn, hook, suiteError) {\n\tconst usedProps = getUsedProps(fn, {\n\t\tsourceError: suiteError,\n\t\tsuiteHook: hook\n\t});\n\tif (usedProps.size) {\n\t\tconst error = new FixtureAccessError(`The ${hook} hook uses fixtures \"${[...usedProps].join(\"\\\", \\\"\")}\", but has no access to context. ` + `Did you forget to call it as \"test.${hook}()\" instead of \"${hook}()\"?\\n` + `If you used internal \"suite\" task as the first argument previously, access it in the second argument instead. ` + `See https://vitest.dev/guide/test-context#suite-level-hooks`);\n\t\tif (suiteError) {\n\t\t\terror.stack = suiteError.stack?.replace(suiteError.message, error.message);\n\t\t}\n\t\tthrow error;\n\t}\n}\nconst kPropsSymbol = Symbol(\"$vitest:fixture-props\");\nconst kPropNamesSymbol = Symbol(\"$vitest:fixture-prop-names\");\nfunction configureProps(fn, options) {\n\tObject.defineProperty(fn, kPropsSymbol, {\n\t\tvalue: options,\n\t\tenumerable: false\n\t});\n}\nfunction memoProps(fn, props) {\n\tfn[kPropNamesSymbol] = props;\n\treturn props;\n}\nfunction getUsedProps(fn, { sourceError, suiteHook } = {}) {\n\tif (kPropNamesSymbol in fn) {\n\t\treturn fn[kPropNamesSymbol];\n\t}\n\tconst { index: fixturesIndex = 0, original: implementation = fn } = kPropsSymbol in fn ? fn[kPropsSymbol] : {};\n\tlet fnString = filterOutComments(implementation.toString());\n\t// match lowered async function and strip it off\n\t// example code on esbuild-try https://esbuild.github.io/try/#YgAwLjI0LjAALS1zdXBwb3J0ZWQ6YXN5bmMtYXdhaXQ9ZmFsc2UAZQBlbnRyeS50cwBjb25zdCBvID0gewogIGYxOiBhc3luYyAoKSA9PiB7fSwKICBmMjogYXN5bmMgKGEpID0+IHt9LAogIGYzOiBhc3luYyAoYSwgYikgPT4ge30sCiAgZjQ6IGFzeW5jIGZ1bmN0aW9uKGEpIHt9LAogIGY1OiBhc3luYyBmdW5jdGlvbiBmZihhKSB7fSwKICBhc3luYyBmNihhKSB7fSwKCiAgZzE6IGFzeW5jICgpID0+IHt9LAogIGcyOiBhc3luYyAoeyBhIH0pID0+IHt9LAogIGczOiBhc3luYyAoeyBhIH0sIGIpID0+IHt9LAogIGc0OiBhc3luYyBmdW5jdGlvbiAoeyBhIH0pIHt9LAogIGc1OiBhc3luYyBmdW5jdGlvbiBnZyh7IGEgfSkge30sCiAgYXN5bmMgZzYoeyBhIH0pIHt9LAoKICBoMTogYXN5bmMgKCkgPT4ge30sCiAgLy8gY29tbWVudCBiZXR3ZWVuCiAgaDI6IGFzeW5jIChhKSA9PiB7fSwKfQ\n\t// __async(this, null, function*\n\t// __async(this, arguments, function*\n\t// __async(this, [_0, _1], function*\n\tif (/__async\\((?:this|null), (?:null|arguments|\\[[_0-9, ]*\\]), function\\*/.test(fnString)) {\n\t\tfnString = fnString.split(/__async\\((?:this|null),/)[1];\n\t}\n\tconst match = fnString.match(/[^(]*\\(([^)]*)/);\n\tif (!match) {\n\t\treturn memoProps(fn, new Set());\n\t}\n\tconst args = splitByComma(match[1]);\n\tif (!args.length) {\n\t\treturn memoProps(fn, new Set());\n\t}\n\tconst fixturesArgument = args[fixturesIndex];\n\tif (!fixturesArgument) {\n\t\treturn memoProps(fn, new Set());\n\t}\n\tif (!(fixturesArgument[0] === \"{\" && fixturesArgument.endsWith(\"}\"))) {\n\t\tconst ordinalArgument = ordinal(fixturesIndex + 1);\n\t\tconst error = new FixtureParseError(`The ${ordinalArgument} argument inside a fixture must use object destructuring pattern, e.g. ({ task } => {}). ` + `Instead, received \"${fixturesArgument}\".` + `${suiteHook ? ` If you used internal \"suite\" task as the ${ordinalArgument} argument previously, access it in the ${ordinal(fixturesIndex + 2)} argument instead.` : \"\"}`);\n\t\tif (sourceError) {\n\t\t\terror.stack = sourceError.stack?.replace(sourceError.message, error.message);\n\t\t}\n\t\tthrow error;\n\t}\n\tconst _first = fixturesArgument.slice(1, -1).replace(/\\s/g, \"\");\n\tconst props = splitByComma(_first).map((prop) => {\n\t\treturn prop.replace(/:.*|=.*/g, \"\");\n\t});\n\tconst last = props.at(-1);\n\tif (last && last.startsWith(\"...\")) {\n\t\tconst error = new FixtureParseError(`Rest parameters are not supported in fixtures, received \"${last}\".`);\n\t\tif (sourceError) {\n\t\t\terror.stack = sourceError.stack?.replace(sourceError.message, error.message);\n\t\t}\n\t\tthrow error;\n\t}\n\treturn memoProps(fn, new Set(props));\n}\nfunction splitByComma(s) {\n\tconst result = [];\n\tconst stack = [];\n\tlet start = 0;\n\tfor (let i = 0; i < s.length; i++) {\n\t\tif (s[i] === \"{\" || s[i] === \"[\") {\n\t\t\tstack.push(s[i] === \"{\" ? \"}\" : \"]\");\n\t\t} else if (s[i] === stack.at(-1)) {\n\t\t\tstack.pop();\n\t\t} else if (!stack.length && s[i] === \",\") {\n\t\t\tconst token = s.substring(start, i).trim();\n\t\t\tif (token) {\n\t\t\t\tresult.push(token);\n\t\t\t}\n\t\t\tstart = i + 1;\n\t\t}\n\t}\n\tconst lastToken = s.substring(start).trim();\n\tif (lastToken) {\n\t\tresult.push(lastToken);\n\t}\n\treturn result;\n}\n\nlet _test;\nfunction setCurrentTest(test) {\n\t_test = test;\n}\nfunction getCurrentTest() {\n\treturn _test;\n}\nconst tests = [];\nfunction addRunningTest(test) {\n\ttests.push(test);\n\treturn () => {\n\t\ttests.splice(tests.indexOf(test));\n\t};\n}\nfunction getRunningTests() {\n\treturn tests;\n}\n\nfunction getDefaultHookTimeout() {\n\treturn getRunner().config.hookTimeout;\n}\nconst CLEANUP_TIMEOUT_KEY = Symbol.for(\"VITEST_CLEANUP_TIMEOUT\");\nconst CLEANUP_STACK_TRACE_KEY = Symbol.for(\"VITEST_CLEANUP_STACK_TRACE\");\nconst AROUND_TIMEOUT_KEY = Symbol.for(\"VITEST_AROUND_TIMEOUT\");\nconst AROUND_STACK_TRACE_KEY = Symbol.for(\"VITEST_AROUND_STACK_TRACE\");\nfunction getBeforeHookCleanupCallback(hook, result, context) {\n\tif (typeof result === \"function\") {\n\t\tconst timeout = CLEANUP_TIMEOUT_KEY in hook && typeof hook[CLEANUP_TIMEOUT_KEY] === \"number\" ? hook[CLEANUP_TIMEOUT_KEY] : getDefaultHookTimeout();\n\t\tconst stackTraceError = CLEANUP_STACK_TRACE_KEY in hook && hook[CLEANUP_STACK_TRACE_KEY] instanceof Error ? hook[CLEANUP_STACK_TRACE_KEY] : undefined;\n\t\treturn withTimeout(result, timeout, true, stackTraceError, (_, error) => {\n\t\t\tif (context) {\n\t\t\t\tabortContextSignal(context, error);\n\t\t\t}\n\t\t});\n\t}\n}\n/**\n* Registers a callback function to be executed once before all tests within the current suite.\n* This hook is useful for scenarios where you need to perform setup operations that are common to all tests in a suite, such as initializing a database connection or setting up a test environment.\n*\n* **Note:** The `beforeAll` hooks are executed in the order they are defined one after another. You can configure this by changing the `sequence.hooks` option in the config file.\n*\n* @param {Function} fn - The callback function to be executed before all tests.\n* @param {number} [timeout] - Optional timeout in milliseconds for the hook. If not provided, the default hook timeout from the runner's configuration is used.\n* @returns {void}\n* @example\n* ```ts\n* // Example of using beforeAll to set up a database connection\n* beforeAll(async () => {\n* await database.connect();\n* });\n* ```\n*/\nfunction beforeAll(fn, timeout = getDefaultHookTimeout()) {\n\tassertTypes(fn, \"\\\"beforeAll\\\" callback\", [\"function\"]);\n\tconst stackTraceError = new Error(\"STACK_TRACE_ERROR\");\n\tconst context = getChainableContext(this);\n\treturn getCurrentSuite().on(\"beforeAll\", Object.assign(withTimeout(withSuiteFixtures(\"beforeAll\", fn, context, stackTraceError), timeout, true, stackTraceError), {\n\t\t[CLEANUP_TIMEOUT_KEY]: timeout,\n\t\t[CLEANUP_STACK_TRACE_KEY]: stackTraceError\n\t}));\n}\n/**\n* Registers a callback function to be executed once after all tests within the current suite have completed.\n* This hook is useful for scenarios where you need to perform cleanup operations after all tests in a suite have run, such as closing database connections or cleaning up temporary files.\n*\n* **Note:** The `afterAll` hooks are running in reverse order of their registration. You can configure this by changing the `sequence.hooks` option in the config file.\n*\n* @param {Function} fn - The callback function to be executed after all tests.\n* @param {number} [timeout] - Optional timeout in milliseconds for the hook. If not provided, the default hook timeout from the runner's configuration is used.\n* @returns {void}\n* @example\n* ```ts\n* // Example of using afterAll to close a database connection\n* afterAll(async () => {\n* await database.disconnect();\n* });\n* ```\n*/\nfunction afterAll(fn, timeout) {\n\tassertTypes(fn, \"\\\"afterAll\\\" callback\", [\"function\"]);\n\tconst context = getChainableContext(this);\n\tconst stackTraceError = new Error(\"STACK_TRACE_ERROR\");\n\treturn getCurrentSuite().on(\"afterAll\", withTimeout(withSuiteFixtures(\"afterAll\", fn, context, stackTraceError), timeout ?? getDefaultHookTimeout(), true, stackTraceError));\n}\n/**\n* Registers a callback function to be executed before each test within the current suite.\n* This hook is useful for scenarios where you need to reset or reinitialize the test environment before each test runs, such as resetting database states, clearing caches, or reinitializing variables.\n*\n* **Note:** The `beforeEach` hooks are executed in the order they are defined one after another. You can configure this by changing the `sequence.hooks` option in the config file.\n*\n* @param {Function} fn - The callback function to be executed before each test. This function receives an `TestContext` parameter if additional test context is needed.\n* @param {number} [timeout] - Optional timeout in milliseconds for the hook. If not provided, the default hook timeout from the runner's configuration is used.\n* @returns {void}\n* @example\n* ```ts\n* // Example of using beforeEach to reset a database state\n* beforeEach(async () => {\n* await database.reset();\n* });\n* ```\n*/\nfunction beforeEach(fn, timeout = getDefaultHookTimeout()) {\n\tassertTypes(fn, \"\\\"beforeEach\\\" callback\", [\"function\"]);\n\tconst stackTraceError = new Error(\"STACK_TRACE_ERROR\");\n\tconst wrapper = (context, suite) => {\n\t\tconst fixtureResolver = withFixtures(fn, { suite });\n\t\treturn fixtureResolver(context);\n\t};\n\treturn getCurrentSuite().on(\"beforeEach\", Object.assign(withTimeout(wrapper, timeout ?? getDefaultHookTimeout(), true, stackTraceError, abortIfTimeout), {\n\t\t[CLEANUP_TIMEOUT_KEY]: timeout,\n\t\t[CLEANUP_STACK_TRACE_KEY]: stackTraceError\n\t}));\n}\n/**\n* Registers a callback function to be executed after each test within the current suite has completed.\n* This hook is useful for scenarios where you need to clean up or reset the test environment after each test runs, such as deleting temporary files, clearing test-specific database entries, or resetting mocked functions.\n*\n* **Note:** The `afterEach` hooks are running in reverse order of their registration. You can configure this by changing the `sequence.hooks` option in the config file.\n*\n* @param {Function} fn - The callback function to be executed after each test. This function receives an `TestContext` parameter if additional test context is needed.\n* @param {number} [timeout] - Optional timeout in milliseconds for the hook. If not provided, the default hook timeout from the runner's configuration is used.\n* @returns {void}\n* @example\n* ```ts\n* // Example of using afterEach to delete temporary files created during a test\n* afterEach(async () => {\n* await fileSystem.deleteTempFiles();\n* });\n* ```\n*/\nfunction afterEach(fn, timeout) {\n\tassertTypes(fn, \"\\\"afterEach\\\" callback\", [\"function\"]);\n\tconst wrapper = (context, suite) => {\n\t\tconst fixtureResolver = withFixtures(fn, { suite });\n\t\treturn fixtureResolver(context);\n\t};\n\treturn getCurrentSuite().on(\"afterEach\", withTimeout(wrapper, timeout ?? getDefaultHookTimeout(), true, new Error(\"STACK_TRACE_ERROR\"), abortIfTimeout));\n}\n/**\n* Registers a callback function to be executed when a test fails within the current suite.\n* This function allows for custom actions to be performed in response to test failures, such as logging, cleanup, or additional diagnostics.\n*\n* **Note:** The `onTestFailed` hooks are running in reverse order of their registration. You can configure this by changing the `sequence.hooks` option in the config file.\n*\n* @param {Function} fn - The callback function to be executed upon a test failure. The function receives the test result (including errors).\n* @param {number} [timeout] - Optional timeout in milliseconds for the hook. If not provided, the default hook timeout from the runner's configuration is used.\n* @throws {Error} Throws an error if the function is not called within a test.\n* @returns {void}\n* @example\n* ```ts\n* // Example of using onTestFailed to log failure details\n* onTestFailed(({ errors }) => {\n* console.log(`Test failed: ${test.name}`, errors);\n* });\n* ```\n*/\nconst onTestFailed = createTestHook(\"onTestFailed\", (test, handler, timeout) => {\n\ttest.onFailed ||= [];\n\ttest.onFailed.push(withTimeout(handler, timeout ?? getDefaultHookTimeout(), true, new Error(\"STACK_TRACE_ERROR\"), abortIfTimeout));\n});\n/**\n* Registers a callback function to be executed when the current test finishes, regardless of the outcome (pass or fail).\n* This function is ideal for performing actions that should occur after every test execution, such as cleanup, logging, or resetting shared resources.\n*\n* This hook is useful if you have access to a resource in the test itself and you want to clean it up after the test finishes. It is a more compact way to clean up resources than using the combination of `beforeEach` and `afterEach`.\n*\n* **Note:** The `onTestFinished` hooks are running in reverse order of their registration. You can configure this by changing the `sequence.hooks` option in the config file.\n*\n* **Note:** The `onTestFinished` hook is not called if the test is canceled with a dynamic `ctx.skip()` call.\n*\n* @param {Function} fn - The callback function to be executed after a test finishes. The function can receive parameters providing details about the completed test, including its success or failure status.\n* @param {number} [timeout] - Optional timeout in milliseconds for the hook. If not provided, the default hook timeout from the runner's configuration is used.\n* @throws {Error} Throws an error if the function is not called within a test.\n* @returns {void}\n* @example\n* ```ts\n* // Example of using onTestFinished for cleanup\n* const db = await connectToDatabase();\n* onTestFinished(async () => {\n* await db.disconnect();\n* });\n* ```\n*/\nconst onTestFinished = createTestHook(\"onTestFinished\", (test, handler, timeout) => {\n\ttest.onFinished ||= [];\n\ttest.onFinished.push(withTimeout(handler, timeout ?? getDefaultHookTimeout(), true, new Error(\"STACK_TRACE_ERROR\"), abortIfTimeout));\n});\n/**\n* Registers a callback function that wraps around all tests within the current suite.\n* The callback receives a `runSuite` function that must be called to run the suite's tests.\n* This hook is useful for scenarios where you need to wrap an entire suite in a context\n* (e.g., starting a server, opening a database connection that all tests share).\n*\n* **Note:** When multiple `aroundAll` hooks are registered, they are nested inside each other.\n* The first registered hook is the outermost wrapper.\n*\n* @param {Function} fn - The callback function that wraps the suite. Must call `runSuite()` to run the tests.\n* @param {number} [timeout] - Optional timeout in milliseconds for the hook. If not provided, the default hook timeout from the runner's configuration is used.\n* @returns {void}\n* @example\n* ```ts\n* // Example of using aroundAll to wrap suite in a tracing span\n* aroundAll(async (runSuite) => {\n* await tracer.trace('test-suite', runSuite);\n* });\n* ```\n* @example\n* ```ts\n* // Example of using aroundAll with fixtures\n* aroundAll(async (runSuite, { db }) => {\n* await db.transaction(() => runSuite());\n* });\n* ```\n*/\nfunction aroundAll(fn, timeout) {\n\tassertTypes(fn, \"\\\"aroundAll\\\" callback\", [\"function\"]);\n\tconst stackTraceError = new Error(\"STACK_TRACE_ERROR\");\n\tconst resolvedTimeout = timeout ?? getDefaultHookTimeout();\n\tconst context = getChainableContext(this);\n\treturn getCurrentSuite().on(\"aroundAll\", Object.assign(withSuiteFixtures(\"aroundAll\", fn, context, stackTraceError, 1), {\n\t\t[AROUND_TIMEOUT_KEY]: resolvedTimeout,\n\t\t[AROUND_STACK_TRACE_KEY]: stackTraceError\n\t}));\n}\n/**\n* Registers a callback function that wraps around each test within the current suite.\n* The callback receives a `runTest` function that must be called to run the test.\n* This hook is useful for scenarios where you need to wrap tests in a context (e.g., database transactions).\n*\n* **Note:** When multiple `aroundEach` hooks are registered, they are nested inside each other.\n* The first registered hook is the outermost wrapper.\n*\n* @param {Function} fn - The callback function that wraps the test. Must call `runTest()` to run the test.\n* @param {number} [timeout] - Optional timeout in milliseconds for the hook. If not provided, the default hook timeout from the runner's configuration is used.\n* @returns {void}\n* @example\n* ```ts\n* // Example of using aroundEach to wrap tests in a database transaction\n* aroundEach(async (runTest) => {\n* await database.transaction(() => runTest());\n* });\n* ```\n* @example\n* ```ts\n* // Example of using aroundEach with fixtures\n* aroundEach(async (runTest, { db }) => {\n* await db.transaction(() => runTest());\n* });\n* ```\n*/\nfunction aroundEach(fn, timeout) {\n\tassertTypes(fn, \"\\\"aroundEach\\\" callback\", [\"function\"]);\n\tconst stackTraceError = new Error(\"STACK_TRACE_ERROR\");\n\tconst resolvedTimeout = timeout ?? getDefaultHookTimeout();\n\tconst wrapper = (runTest, context, suite) => {\n\t\tconst innerFn = (ctx) => fn(runTest, ctx, suite);\n\t\tconfigureProps(innerFn, {\n\t\t\tindex: 1,\n\t\t\toriginal: fn\n\t\t});\n\t\tconst fixtureResolver = withFixtures(innerFn, { suite });\n\t\treturn fixtureResolver(context);\n\t};\n\treturn getCurrentSuite().on(\"aroundEach\", Object.assign(wrapper, {\n\t\t[AROUND_TIMEOUT_KEY]: resolvedTimeout,\n\t\t[AROUND_STACK_TRACE_KEY]: stackTraceError\n\t}));\n}\nfunction withSuiteFixtures(suiteHook, fn, context, stackTraceError, contextIndex = 0) {\n\treturn (...args) => {\n\t\tconst suite = args.at(-1);\n\t\tconst prefix = args.slice(0, -1);\n\t\tconst wrapper = (ctx) => fn(...prefix, ctx, suite);\n\t\tconfigureProps(wrapper, {\n\t\t\tindex: contextIndex,\n\t\t\toriginal: fn\n\t\t});\n\t\tconst fixtures = context?.getFixtures();\n\t\tconst fileContext = fixtures?.getFileContext(suite.file);\n\t\tconst fixtured = withFixtures(wrapper, {\n\t\t\tsuiteHook,\n\t\t\tfixtures,\n\t\t\tcontext: fileContext,\n\t\t\tstackTraceError\n\t\t});\n\t\treturn fixtured();\n\t};\n}\nfunction getAroundHookTimeout(hook) {\n\treturn AROUND_TIMEOUT_KEY in hook && typeof hook[AROUND_TIMEOUT_KEY] === \"number\" ? hook[AROUND_TIMEOUT_KEY] : getDefaultHookTimeout();\n}\nfunction getAroundHookStackTrace(hook) {\n\treturn AROUND_STACK_TRACE_KEY in hook && hook[AROUND_STACK_TRACE_KEY] instanceof Error ? hook[AROUND_STACK_TRACE_KEY] : undefined;\n}\nfunction createTestHook(name, handler) {\n\treturn (fn, timeout) => {\n\t\tassertTypes(fn, `\"${name}\" callback`, [\"function\"]);\n\t\tconst current = getCurrentTest();\n\t\tif (!current) {\n\t\t\tthrow new Error(`Hook ${name}() can only be called inside a test`);\n\t\t}\n\t\treturn handler(current, fn, timeout);\n\t};\n}\n\n/**\n* Creates a suite of tests, allowing for grouping and hierarchical organization of tests.\n* Suites can contain both tests and other suites, enabling complex test structures.\n*\n* @param {string} name - The name of the suite, used for identification and reporting.\n* @param {Function} fn - A function that defines the tests and suites within this suite.\n* @example\n* ```ts\n* // Define a suite with two tests\n* suite('Math operations', () => {\n* test('should add two numbers', () => {\n* expect(add(1, 2)).toBe(3);\n* });\n*\n* test('should subtract two numbers', () => {\n* expect(subtract(5, 2)).toBe(3);\n* });\n* });\n* ```\n* @example\n* ```ts\n* // Define nested suites\n* suite('String operations', () => {\n* suite('Trimming', () => {\n* test('should trim whitespace from start and end', () => {\n* expect(' hello '.trim()).toBe('hello');\n* });\n* });\n*\n* suite('Concatenation', () => {\n* test('should concatenate two strings', () => {\n* expect('hello' + ' ' + 'world').toBe('hello world');\n* });\n* });\n* });\n* ```\n*/\nconst suite = createSuite();\n/**\n* Defines a test case with a given name and test function. The test function can optionally be configured with test options.\n*\n* @param {string | Function} name - The name of the test or a function that will be used as a test name.\n* @param {TestOptions | TestFunction} [optionsOrFn] - Optional. The test options or the test function if no explicit name is provided.\n* @param {number | TestOptions | TestFunction} [optionsOrTest] - Optional. The test function or options, depending on the previous parameters.\n* @throws {Error} If called inside another test function.\n* @example\n* ```ts\n* // Define a simple test\n* test('should add two numbers', () => {\n* expect(add(1, 2)).toBe(3);\n* });\n* ```\n* @example\n* ```ts\n* // Define a test with options\n* test('should subtract two numbers', { retry: 3 }, () => {\n* expect(subtract(5, 2)).toBe(3);\n* });\n* ```\n*/\nconst test = createTest(function(name, optionsOrFn, optionsOrTest) {\n\tif (getCurrentTest()) {\n\t\tthrow new Error(\"Calling the test function inside another test function is not allowed. Please put it inside \\\"describe\\\" or \\\"suite\\\" so it can be properly collected.\");\n\t}\n\tgetCurrentSuite().test.fn.call(this, formatName(name), optionsOrFn, optionsOrTest);\n});\n/**\n* Creates a suite of tests, allowing for grouping and hierarchical organization of tests.\n* Suites can contain both tests and other suites, enabling complex test structures.\n*\n* @param {string} name - The name of the suite, used for identification and reporting.\n* @param {Function} fn - A function that defines the tests and suites within this suite.\n* @example\n* ```ts\n* // Define a suite with two tests\n* describe('Math operations', () => {\n* test('should add two numbers', () => {\n* expect(add(1, 2)).toBe(3);\n* });\n*\n* test('should subtract two numbers', () => {\n* expect(subtract(5, 2)).toBe(3);\n* });\n* });\n* ```\n* @example\n* ```ts\n* // Define nested suites\n* describe('String operations', () => {\n* describe('Trimming', () => {\n* test('should trim whitespace from start and end', () => {\n* expect(' hello '.trim()).toBe('hello');\n* });\n* });\n*\n* describe('Concatenation', () => {\n* test('should concatenate two strings', () => {\n* expect('hello' + ' ' + 'world').toBe('hello world');\n* });\n* });\n* });\n* ```\n*/\nconst describe = suite;\n/**\n* Defines a test case with a given name and test function. The test function can optionally be configured with test options.\n*\n* @param {string | Function} name - The name of the test or a function that will be used as a test name.\n* @param {TestOptions | TestFunction} [optionsOrFn] - Optional. The test options or the test function if no explicit name is provided.\n* @param {number | TestOptions | TestFunction} [optionsOrTest] - Optional. The test function or options, depending on the previous parameters.\n* @throws {Error} If called inside another test function.\n* @example\n* ```ts\n* // Define a simple test\n* it('adds two numbers', () => {\n* expect(add(1, 2)).toBe(3);\n* });\n* ```\n* @example\n* ```ts\n* // Define a test with options\n* it('subtracts two numbers', { retry: 3 }, () => {\n* expect(subtract(5, 2)).toBe(3);\n* });\n* ```\n*/\nconst it = test;\nlet runner;\nlet defaultSuite;\nlet currentTestFilepath;\nfunction assert(condition, message) {\n\tif (!condition) {\n\t\tthrow new Error(`Vitest failed to find ${message}. One of the following is possible:` + \"\\n- \\\"vitest\\\" is imported directly without running \\\"vitest\\\" command\" + \"\\n- \\\"vitest\\\" is imported inside \\\"globalSetup\\\" (to fix this, use \\\"setupFiles\\\" instead, because \\\"globalSetup\\\" runs in a different context)\" + \"\\n- \\\"vitest\\\" is imported inside Vite / Vitest config file\" + \"\\n- Otherwise, it might be a Vitest bug. Please report it to https://github.com/vitest-dev/vitest/issues\\n\");\n\t}\n}\nfunction getDefaultSuite() {\n\tassert(defaultSuite, \"the default suite\");\n\treturn defaultSuite;\n}\nfunction getRunner() {\n\tassert(runner, \"the runner\");\n\treturn runner;\n}\nfunction createDefaultSuite(runner) {\n\tconst config = runner.config.sequence;\n\tconst options = {};\n\tif (config.concurrent != null) {\n\t\toptions.concurrent = config.concurrent;\n\t}\n\tconst collector = suite(\"\", options, () => {});\n\t// no parent suite for top-level tests\n\tdelete collector.suite;\n\treturn collector;\n}\nfunction clearCollectorContext(file, currentRunner) {\n\tcurrentTestFilepath = file.filepath;\n\trunner = currentRunner;\n\tif (!defaultSuite) {\n\t\tdefaultSuite = createDefaultSuite(currentRunner);\n\t}\n\tdefaultSuite.file = file;\n\tcollectorContext.tasks.length = 0;\n\tdefaultSuite.clear();\n\tcollectorContext.currentSuite = defaultSuite;\n}\nfunction getCurrentSuite() {\n\tconst currentSuite = collectorContext.currentSuite || defaultSuite;\n\tassert(currentSuite, \"the current suite\");\n\treturn currentSuite;\n}\nfunction createSuiteHooks() {\n\treturn {\n\t\tbeforeAll: [],\n\t\tafterAll: [],\n\t\tbeforeEach: [],\n\t\tafterEach: [],\n\t\taroundEach: [],\n\t\taroundAll: []\n\t};\n}\nconst POSITIVE_INFINITY = Number.POSITIVE_INFINITY;\nfunction parseArguments(optionsOrFn, timeoutOrTest) {\n\tif (timeoutOrTest != null && typeof timeoutOrTest === \"object\") {\n\t\tthrow new TypeError(`Signature \"test(name, fn, { ... })\" was deprecated in Vitest 3 and removed in Vitest 4. Please, provide options as a second argument instead.`);\n\t}\n\tlet options = {};\n\tlet fn;\n\t// it('', () => {}, 1000)\n\tif (typeof timeoutOrTest === \"number\") {\n\t\toptions = { timeout: timeoutOrTest };\n\t} else if (typeof optionsOrFn === \"object\") {\n\t\toptions = optionsOrFn;\n\t}\n\tif (typeof optionsOrFn === \"function\") {\n\t\tif (typeof timeoutOrTest === \"function\") {\n\t\t\tthrow new TypeError(\"Cannot use two functions as arguments. Please use the second argument for options.\");\n\t\t}\n\t\tfn = optionsOrFn;\n\t} else if (typeof timeoutOrTest === \"function\") {\n\t\tfn = timeoutOrTest;\n\t}\n\treturn {\n\t\toptions,\n\t\thandler: fn\n\t};\n}\n// implementations\nfunction createSuiteCollector(name, factory = () => {}, mode, each, suiteOptions) {\n\tconst tasks = [];\n\tlet suite;\n\tinitSuite(true);\n\tconst task = function(name = \"\", options = {}) {\n\t\tconst currentSuite = collectorContext.currentSuite?.suite;\n\t\tconst parentTask = currentSuite ?? collectorContext.currentSuite?.file;\n\t\tconst parentTags = parentTask?.tags || [];\n\t\tconst testTags = unique([...parentTags, ...toArray(options.tags)]);\n\t\tconst tagsOptions = testTags.map((tag) => {\n\t\t\tconst tagDefinition = runner.config.tags?.find((t) => t.name === tag);\n\t\t\tif (!tagDefinition && runner.config.strictTags) {\n\t\t\t\tthrow createNoTagsError(runner.config.tags, tag);\n\t\t\t}\n\t\t\treturn tagDefinition;\n\t\t}).filter((r) => r != null).sort((tag1, tag2) => (tag2.priority ?? POSITIVE_INFINITY) - (tag1.priority ?? POSITIVE_INFINITY)).reduce((acc, tag) => {\n\t\t\tconst { name, description, priority, meta, ...options } = tag;\n\t\t\tObject.assign(acc, options);\n\t\t\tif (meta) {\n\t\t\t\tacc.meta = Object.assign(acc.meta ?? Object.create(null), meta);\n\t\t\t}\n\t\t\treturn acc;\n\t\t}, {});\n\t\tconst testOwnMeta = options.meta;\n\t\toptions = {\n\t\t\t...tagsOptions,\n\t\t\t...options\n\t\t};\n\t\tconst timeout = options.timeout ?? runner.config.testTimeout;\n\t\tconst parentMeta = currentSuite?.meta;\n\t\tconst tagMeta = tagsOptions.meta;\n\t\tconst testMeta = Object.create(null);\n\t\tif (tagMeta) {\n\t\t\tObject.assign(testMeta, tagMeta);\n\t\t}\n\t\tif (parentMeta) {\n\t\t\tObject.assign(testMeta, parentMeta);\n\t\t}\n\t\tif (testOwnMeta) {\n\t\t\tObject.assign(testMeta, testOwnMeta);\n\t\t}\n\t\tconst task = {\n\t\t\tid: \"\",\n\t\t\tname,\n\t\t\tfullName: createTaskName([currentSuite?.fullName ?? collectorContext.currentSuite?.file?.fullName, name]),\n\t\t\tfullTestName: createTaskName([currentSuite?.fullTestName, name]),\n\t\t\tsuite: currentSuite,\n\t\t\teach: options.each,\n\t\t\tfails: options.fails,\n\t\t\tcontext: undefined,\n\t\t\ttype: \"test\",\n\t\t\tfile: currentSuite?.file ?? collectorContext.currentSuite?.file,\n\t\t\ttimeout,\n\t\t\tretry: options.retry ?? runner.config.retry,\n\t\t\trepeats: options.repeats,\n\t\t\tmode: options.only ? \"only\" : options.skip ? \"skip\" : options.todo ? \"todo\" : \"run\",\n\t\t\tmeta: testMeta,\n\t\t\tannotations: [],\n\t\t\tartifacts: [],\n\t\t\ttags: testTags\n\t\t};\n\t\tconst handler = options.handler;\n\t\tif (task.mode === \"run\" && !handler) {\n\t\t\ttask.mode = \"todo\";\n\t\t}\n\t\tif (options.concurrent || !options.sequential && runner.config.sequence.concurrent) {\n\t\t\ttask.concurrent = true;\n\t\t}\n\t\ttask.shuffle = suiteOptions?.shuffle;\n\t\tconst context = createTestContext(task, runner);\n\t\t// create test context\n\t\tObject.defineProperty(task, \"context\", {\n\t\t\tvalue: context,\n\t\t\tenumerable: false\n\t\t});\n\t\tsetTestFixture(context, options.fixtures ?? new TestFixtures());\n\t\tconst limit = Error.stackTraceLimit;\n\t\tError.stackTraceLimit = 10;\n\t\tconst stackTraceError = new Error(\"STACK_TRACE_ERROR\");\n\t\tError.stackTraceLimit = limit;\n\t\tif (handler) {\n\t\t\tsetFn(task, withTimeout(withCancel(withAwaitAsyncAssertions(withFixtures(handler, { context }), task), task.context.signal), timeout, false, stackTraceError, (_, error) => abortIfTimeout([context], error)));\n\t\t}\n\t\tif (runner.config.includeTaskLocation) {\n\t\t\tconst error = stackTraceError.stack;\n\t\t\tconst stack = findTestFileStackTrace(currentTestFilepath, error);\n\t\t\tif (stack) {\n\t\t\t\ttask.location = {\n\t\t\t\t\tline: stack.line,\n\t\t\t\t\tcolumn: stack.column\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\ttasks.push(task);\n\t\treturn task;\n\t};\n\tconst test = createTest(function(name, optionsOrFn, timeoutOrTest) {\n\t\tlet { options, handler } = parseArguments(optionsOrFn, timeoutOrTest);\n\t\t// inherit repeats, retry, timeout from suite\n\t\tif (typeof suiteOptions === \"object\") {\n\t\t\toptions = Object.assign({}, suiteOptions, options);\n\t\t}\n\t\t// inherit concurrent / sequential from suite\n\t\tconst concurrent = this.concurrent ?? (!this.sequential && options?.concurrent);\n\t\tif (options.concurrent != null && concurrent != null) {\n\t\t\toptions.concurrent = concurrent;\n\t\t}\n\t\tconst sequential = this.sequential ?? (!this.concurrent && options?.sequential);\n\t\tif (options.sequential != null && sequential != null) {\n\t\t\toptions.sequential = sequential;\n\t\t}\n\t\tconst test = task(formatName(name), {\n\t\t\t...this,\n\t\t\t...options,\n\t\t\thandler\n\t\t});\n\t\ttest.type = \"test\";\n\t});\n\tconst collector = {\n\t\ttype: \"collector\",\n\t\tname,\n\t\tmode,\n\t\tsuite,\n\t\toptions: suiteOptions,\n\t\ttest,\n\t\tfile: suite.file,\n\t\ttasks,\n\t\tcollect,\n\t\ttask,\n\t\tclear,\n\t\ton: addHook\n\t};\n\tfunction addHook(name, ...fn) {\n\t\tgetHooks(suite)[name].push(...fn);\n\t}\n\tfunction initSuite(includeLocation) {\n\t\tif (typeof suiteOptions === \"number\") {\n\t\t\tsuiteOptions = { timeout: suiteOptions };\n\t\t}\n\t\tconst currentSuite = collectorContext.currentSuite?.suite;\n\t\tconst parentTask = currentSuite ?? collectorContext.currentSuite?.file;\n\t\tconst suiteTags = toArray(suiteOptions?.tags);\n\t\tvalidateTags(runner.config, suiteTags);\n\t\tsuite = {\n\t\t\tid: \"\",\n\t\t\ttype: \"suite\",\n\t\t\tname,\n\t\t\tfullName: createTaskName([currentSuite?.fullName ?? collectorContext.currentSuite?.file?.fullName, name]),\n\t\t\tfullTestName: createTaskName([currentSuite?.fullTestName, name]),\n\t\t\tsuite: currentSuite,\n\t\t\tmode,\n\t\t\teach,\n\t\t\tfile: currentSuite?.file ?? collectorContext.currentSuite?.file,\n\t\t\tshuffle: suiteOptions?.shuffle,\n\t\t\ttasks: [],\n\t\t\tmeta: suiteOptions?.meta ?? Object.create(null),\n\t\t\tconcurrent: suiteOptions?.concurrent,\n\t\t\ttags: unique([...parentTask?.tags || [], ...suiteTags])\n\t\t};\n\t\tif (runner && includeLocation && runner.config.includeTaskLocation) {\n\t\t\tconst limit = Error.stackTraceLimit;\n\t\t\tError.stackTraceLimit = 15;\n\t\t\tconst error = new Error(\"stacktrace\").stack;\n\t\t\tError.stackTraceLimit = limit;\n\t\t\tconst stack = findTestFileStackTrace(currentTestFilepath, error);\n\t\t\tif (stack) {\n\t\t\t\tsuite.location = {\n\t\t\t\t\tline: stack.line,\n\t\t\t\t\tcolumn: stack.column\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\tsetHooks(suite, createSuiteHooks());\n\t}\n\tfunction clear() {\n\t\ttasks.length = 0;\n\t\tinitSuite(false);\n\t}\n\tasync function collect(file) {\n\t\tif (!file) {\n\t\t\tthrow new TypeError(\"File is required to collect tasks.\");\n\t\t}\n\t\tif (factory) {\n\t\t\tawait runWithSuite(collector, () => factory(test));\n\t\t}\n\t\tconst allChildren = [];\n\t\tfor (const i of tasks) {\n\t\t\tallChildren.push(i.type === \"collector\" ? await i.collect(file) : i);\n\t\t}\n\t\tsuite.tasks = allChildren;\n\t\treturn suite;\n\t}\n\tcollectTask(collector);\n\treturn collector;\n}\nfunction withAwaitAsyncAssertions(fn, task) {\n\treturn (async (...args) => {\n\t\tconst fnResult = await fn(...args);\n\t\t// some async expect will be added to this array, in case user forget to await them\n\t\tif (task.promises) {\n\t\t\tconst result = await Promise.allSettled(task.promises);\n\t\t\tconst errors = result.map((r) => r.status === \"rejected\" ? r.reason : undefined).filter(Boolean);\n\t\t\tif (errors.length) {\n\t\t\t\tthrow errors;\n\t\t\t}\n\t\t}\n\t\treturn fnResult;\n\t});\n}\nfunction createSuite() {\n\tfunction suiteFn(name, factoryOrOptions, optionsOrFactory) {\n\t\tif (getCurrentTest()) {\n\t\t\tthrow new Error(\"Calling the suite function inside test function is not allowed. It can be only called at the top level or inside another suite function.\");\n\t\t}\n\t\tconst currentSuite = collectorContext.currentSuite || defaultSuite;\n\t\tlet { options, handler: factory } = parseArguments(factoryOrOptions, optionsOrFactory);\n\t\tconst isConcurrentSpecified = options.concurrent || this.concurrent || options.sequential === false;\n\t\tconst isSequentialSpecified = options.sequential || this.sequential || options.concurrent === false;\n\t\tconst { meta: parentMeta, ...parentOptions } = currentSuite?.options || {};\n\t\t// inherit options from current suite\n\t\toptions = {\n\t\t\t...parentOptions,\n\t\t\t...options\n\t\t};\n\t\tconst shuffle = this.shuffle ?? options.shuffle ?? currentSuite?.options?.shuffle ?? runner?.config.sequence.shuffle;\n\t\tif (shuffle != null) {\n\t\t\toptions.shuffle = shuffle;\n\t\t}\n\t\tlet mode = this.only ?? options.only ? \"only\" : this.skip ?? options.skip ? \"skip\" : this.todo ?? options.todo ? \"todo\" : \"run\";\n\t\t// passed as test(name), assume it's a \"todo\"\n\t\tif (mode === \"run\" && !factory) {\n\t\t\tmode = \"todo\";\n\t\t}\n\t\t// inherit concurrent / sequential from suite\n\t\tconst isConcurrent = isConcurrentSpecified || options.concurrent && !isSequentialSpecified;\n\t\tconst isSequential = isSequentialSpecified || options.sequential && !isConcurrentSpecified;\n\t\tif (isConcurrent != null) {\n\t\t\toptions.concurrent = isConcurrent && !isSequential;\n\t\t}\n\t\tif (isSequential != null) {\n\t\t\toptions.sequential = isSequential && !isConcurrent;\n\t\t}\n\t\tif (parentMeta) {\n\t\t\toptions.meta = Object.assign(Object.create(null), parentMeta, options.meta);\n\t\t}\n\t\treturn createSuiteCollector(formatName(name), factory, mode, this.each, options);\n\t}\n\tsuiteFn.each = function(cases, ...args) {\n\t\tconst context = getChainableContext(this);\n\t\tconst suite = context.withContext();\n\t\tcontext.setContext(\"each\", true);\n\t\tif (Array.isArray(cases) && args.length) {\n\t\t\tcases = formatTemplateString(cases, args);\n\t\t}\n\t\treturn (name, optionsOrFn, fnOrOptions) => {\n\t\t\tconst _name = formatName(name);\n\t\t\tconst arrayOnlyCases = cases.every(Array.isArray);\n\t\t\tconst { options, handler } = parseArguments(optionsOrFn, fnOrOptions);\n\t\t\tconst fnFirst = typeof optionsOrFn === \"function\";\n\t\t\tcases.forEach((i, idx) => {\n\t\t\t\tconst items = Array.isArray(i) ? i : [i];\n\t\t\t\tif (fnFirst) {\n\t\t\t\t\tif (arrayOnlyCases) {\n\t\t\t\t\t\tsuite(formatTitle(_name, items, idx), handler ? () => handler(...items) : undefined, options.timeout);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsuite(formatTitle(_name, items, idx), handler ? () => handler(i) : undefined, options.timeout);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (arrayOnlyCases) {\n\t\t\t\t\t\tsuite(formatTitle(_name, items, idx), options, handler ? () => handler(...items) : undefined);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsuite(formatTitle(_name, items, idx), options, handler ? () => handler(i) : undefined);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tcontext.setContext(\"each\", undefined);\n\t\t};\n\t};\n\tsuiteFn.for = function(cases, ...args) {\n\t\tif (Array.isArray(cases) && args.length) {\n\t\t\tcases = formatTemplateString(cases, args);\n\t\t}\n\t\treturn (name, optionsOrFn, fnOrOptions) => {\n\t\t\tconst name_ = formatName(name);\n\t\t\tconst { options, handler } = parseArguments(optionsOrFn, fnOrOptions);\n\t\t\tcases.forEach((item, idx) => {\n\t\t\t\tsuite(formatTitle(name_, toArray(item), idx), options, handler ? () => handler(item) : undefined);\n\t\t\t});\n\t\t};\n\t};\n\tsuiteFn.skipIf = (condition) => condition ? suite.skip : suite;\n\tsuiteFn.runIf = (condition) => condition ? suite : suite.skip;\n\treturn createChainable([\n\t\t\"concurrent\",\n\t\t\"sequential\",\n\t\t\"shuffle\",\n\t\t\"skip\",\n\t\t\"only\",\n\t\t\"todo\"\n\t], suiteFn);\n}\nfunction createTaskCollector(fn) {\n\tconst taskFn = fn;\n\ttaskFn.each = function(cases, ...args) {\n\t\tconst context = getChainableContext(this);\n\t\tconst test = context.withContext();\n\t\tcontext.setContext(\"each\", true);\n\t\tif (Array.isArray(cases) && args.length) {\n\t\t\tcases = formatTemplateString(cases, args);\n\t\t}\n\t\treturn (name, optionsOrFn, fnOrOptions) => {\n\t\t\tconst _name = formatName(name);\n\t\t\tconst arrayOnlyCases = cases.every(Array.isArray);\n\t\t\tconst { options, handler } = parseArguments(optionsOrFn, fnOrOptions);\n\t\t\tconst fnFirst = typeof optionsOrFn === \"function\";\n\t\t\tcases.forEach((i, idx) => {\n\t\t\t\tconst items = Array.isArray(i) ? i : [i];\n\t\t\t\tif (fnFirst) {\n\t\t\t\t\tif (arrayOnlyCases) {\n\t\t\t\t\t\ttest(formatTitle(_name, items, idx), handler ? () => handler(...items) : undefined, options.timeout);\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttest(formatTitle(_name, items, idx), handler ? () => handler(i) : undefined, options.timeout);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (arrayOnlyCases) {\n\t\t\t\t\t\ttest(formatTitle(_name, items, idx), options, handler ? () => handler(...items) : undefined);\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttest(formatTitle(_name, items, idx), options, handler ? () => handler(i) : undefined);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tcontext.setContext(\"each\", undefined);\n\t\t};\n\t};\n\ttaskFn.for = function(cases, ...args) {\n\t\tconst context = getChainableContext(this);\n\t\tconst test = context.withContext();\n\t\tif (Array.isArray(cases) && args.length) {\n\t\t\tcases = formatTemplateString(cases, args);\n\t\t}\n\t\treturn (name, optionsOrFn, fnOrOptions) => {\n\t\t\tconst _name = formatName(name);\n\t\t\tconst { options, handler } = parseArguments(optionsOrFn, fnOrOptions);\n\t\t\tcases.forEach((item, idx) => {\n\t\t\t\t// monkey-patch handler to allow parsing fixture\n\t\t\t\tconst handlerWrapper = handler ? (ctx) => handler(item, ctx) : undefined;\n\t\t\t\tif (handlerWrapper) {\n\t\t\t\t\tconfigureProps(handlerWrapper, {\n\t\t\t\t\t\tindex: 1,\n\t\t\t\t\t\toriginal: handler\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\ttest(formatTitle(_name, toArray(item), idx), options, handlerWrapper);\n\t\t\t});\n\t\t};\n\t};\n\ttaskFn.skipIf = function(condition) {\n\t\treturn condition ? this.skip : this;\n\t};\n\ttaskFn.runIf = function(condition) {\n\t\treturn condition ? this : this.skip;\n\t};\n\t/**\n\t* Parse builder pattern arguments into a fixtures object.\n\t* Handles both builder pattern (name, options?, value) and object syntax.\n\t*/\n\tfunction parseBuilderFixtures(fixturesOrName, optionsOrFn, maybeFn) {\n\t\t// Object syntax: just return as-is\n\t\tif (typeof fixturesOrName !== \"string\") {\n\t\t\treturn fixturesOrName;\n\t\t}\n\t\tconst fixtureName = fixturesOrName;\n\t\tlet fixtureOptions;\n\t\tlet fixtureValue;\n\t\tif (maybeFn !== undefined) {\n\t\t\t// (name, options, value) or (name, options, fn)\n\t\t\tfixtureOptions = optionsOrFn;\n\t\t\tfixtureValue = maybeFn;\n\t\t} else {\n\t\t\t// (name, value) or (name, fn)\n\t\t\t// Check if optionsOrFn looks like fixture options (has scope or auto)\n\t\t\tif (optionsOrFn !== null && typeof optionsOrFn === \"object\" && !Array.isArray(optionsOrFn) && (\"scope\" in optionsOrFn || \"auto\" in optionsOrFn)) {\n\t\t\t\t// (name, options) with no value - treat as empty object fixture\n\t\t\t\tfixtureOptions = optionsOrFn;\n\t\t\t\tfixtureValue = {};\n\t\t\t} else {\n\t\t\t\t// (name, value) or (name, fn)\n\t\t\t\tfixtureOptions = undefined;\n\t\t\t\tfixtureValue = optionsOrFn;\n\t\t\t}\n\t\t}\n\t\t// Function value: wrap with onCleanup pattern\n\t\tif (typeof fixtureValue === \"function\") {\n\t\t\tconst builderFn = fixtureValue;\n\t\t\t// Wrap builder pattern function (returns value) to use() pattern\n\t\t\tconst fixture = async (ctx, use) => {\n\t\t\t\tlet cleanup;\n\t\t\t\tconst onCleanup = (fn) => {\n\t\t\t\t\tif (cleanup !== undefined) {\n\t\t\t\t\t\tthrow new Error(`onCleanup can only be called once per fixture. ` + `Define separate fixtures if you need multiple cleanup functions.`);\n\t\t\t\t\t}\n\t\t\t\t\tcleanup = fn;\n\t\t\t\t};\n\t\t\t\tconst value = await builderFn(ctx, { onCleanup });\n\t\t\t\tawait use(value);\n\t\t\t\tif (cleanup) {\n\t\t\t\t\tawait cleanup();\n\t\t\t\t}\n\t\t\t};\n\t\t\tconfigureProps(fixture, { original: builderFn });\n\t\t\tif (fixtureOptions) {\n\t\t\t\treturn { [fixtureName]: [fixture, fixtureOptions] };\n\t\t\t}\n\t\t\treturn { [fixtureName]: fixture };\n\t\t}\n\t\t// Non-function value: use directly\n\t\tif (fixtureOptions) {\n\t\t\treturn { [fixtureName]: [fixtureValue, fixtureOptions] };\n\t\t}\n\t\treturn { [fixtureName]: fixtureValue };\n\t}\n\ttaskFn.override = function(fixturesOrName, optionsOrFn, maybeFn) {\n\t\tconst userFixtures = parseBuilderFixtures(fixturesOrName, optionsOrFn, maybeFn);\n\t\tgetChainableContext(this).getFixtures().override(runner, userFixtures);\n\t\treturn this;\n\t};\n\ttaskFn.scoped = function(fixtures) {\n\t\tconsole.warn(`test.scoped() is deprecated and will be removed in future versions. Please use test.override() instead.`);\n\t\treturn this.override(fixtures);\n\t};\n\ttaskFn.extend = function(fixturesOrName, optionsOrFn, maybeFn) {\n\t\tconst userFixtures = parseBuilderFixtures(fixturesOrName, optionsOrFn, maybeFn);\n\t\tconst fixtures = getChainableContext(this).getFixtures().extend(runner, userFixtures);\n\t\tconst _test = createTest(function(name, optionsOrFn, optionsOrTest) {\n\t\t\tfn.call(this, formatName(name), optionsOrFn, optionsOrTest);\n\t\t});\n\t\tgetChainableContext(_test).mergeContext({ fixtures });\n\t\treturn _test;\n\t};\n\ttaskFn.describe = suite;\n\ttaskFn.suite = suite;\n\ttaskFn.beforeEach = beforeEach;\n\ttaskFn.afterEach = afterEach;\n\ttaskFn.beforeAll = beforeAll;\n\ttaskFn.afterAll = afterAll;\n\ttaskFn.aroundEach = aroundEach;\n\ttaskFn.aroundAll = aroundAll;\n\tconst _test = createChainable([\n\t\t\"concurrent\",\n\t\t\"sequential\",\n\t\t\"skip\",\n\t\t\"only\",\n\t\t\"todo\",\n\t\t\"fails\"\n\t], taskFn, { fixtures: new TestFixtures() });\n\treturn _test;\n}\nfunction createTest(fn) {\n\treturn createTaskCollector(fn);\n}\nfunction formatName(name) {\n\treturn typeof name === \"string\" ? name : typeof name === \"function\" ? name.name || \"<anonymous>\" : String(name);\n}\nfunction formatTitle(template, items, idx) {\n\tif (template.includes(\"%#\") || template.includes(\"%$\")) {\n\t\t// '%#' match index of the test case\n\t\ttemplate = template.replace(/%%/g, \"__vitest_escaped_%__\").replace(/%#/g, `${idx}`).replace(/%\\$/g, `${idx + 1}`).replace(/__vitest_escaped_%__/g, \"%%\");\n\t}\n\tconst count = template.split(\"%\").length - 1;\n\tif (template.includes(\"%f\")) {\n\t\tconst placeholders = template.match(/%f/g) || [];\n\t\tplaceholders.forEach((_, i) => {\n\t\t\tif (isNegativeNaN(items[i]) || Object.is(items[i], -0)) {\n\t\t\t\t// Replace the i-th occurrence of '%f' with '-%f'\n\t\t\t\tlet occurrence = 0;\n\t\t\t\ttemplate = template.replace(/%f/g, (match) => {\n\t\t\t\t\toccurrence++;\n\t\t\t\t\treturn occurrence === i + 1 ? \"-%f\" : match;\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\tconst isObjectItem = isObject(items[0]);\n\tfunction formatAttribute(s) {\n\t\treturn s.replace(/\\$([$\\w.]+)/g, (_, key) => {\n\t\t\tconst isArrayKey = /^\\d+$/.test(key);\n\t\t\tif (!isObjectItem && !isArrayKey) {\n\t\t\t\treturn `$${key}`;\n\t\t\t}\n\t\t\tconst arrayElement = isArrayKey ? objectAttr(items, key) : undefined;\n\t\t\tconst value = isObjectItem ? objectAttr(items[0], key, arrayElement) : arrayElement;\n\t\t\treturn objDisplay(value, { truncate: runner?.config?.chaiConfig?.truncateThreshold });\n\t\t});\n\t}\n\tlet output = \"\";\n\tlet i = 0;\n\thandleRegexMatch(\n\t\ttemplate,\n\t\tformatRegExp,\n\t\t// format \"%\"\n\t\t(match) => {\n\t\t\tif (i < count) {\n\t\t\t\toutput += format(match[0], items[i++]);\n\t\t\t} else {\n\t\t\t\toutput += match[0];\n\t\t\t}\n\t\t},\n\t\t// format \"$\"\n\t\t(nonMatch) => {\n\t\t\toutput += formatAttribute(nonMatch);\n\t\t}\n\t);\n\treturn output;\n}\n// based on https://github.com/unocss/unocss/blob/2e74b31625bbe3b9c8351570749aa2d3f799d919/packages/autocomplete/src/parse.ts#L11\nfunction handleRegexMatch(input, regex, onMatch, onNonMatch) {\n\tlet lastIndex = 0;\n\tfor (const m of input.matchAll(regex)) {\n\t\tif (lastIndex < m.index) {\n\t\t\tonNonMatch(input.slice(lastIndex, m.index));\n\t\t}\n\t\tonMatch(m);\n\t\tlastIndex = m.index + m[0].length;\n\t}\n\tif (lastIndex < input.length) {\n\t\tonNonMatch(input.slice(lastIndex));\n\t}\n}\nfunction formatTemplateString(cases, args) {\n\tconst header = cases.join(\"\").trim().replace(/ /g, \"\").split(\"\\n\").map((i) => i.split(\"|\"))[0];\n\tconst res = [];\n\tfor (let i = 0; i < Math.floor(args.length / header.length); i++) {\n\t\tconst oneCase = {};\n\t\tfor (let j = 0; j < header.length; j++) {\n\t\t\toneCase[header[j]] = args[i * header.length + j];\n\t\t}\n\t\tres.push(oneCase);\n\t}\n\treturn res;\n}\n\nconst now$2 = globalThis.performance ? globalThis.performance.now.bind(globalThis.performance) : Date.now;\nconst collectorContext = {\n\ttasks: [],\n\tcurrentSuite: null\n};\nfunction collectTask(task) {\n\tcollectorContext.currentSuite?.tasks.push(task);\n}\nasync function runWithSuite(suite, fn) {\n\tconst prev = collectorContext.currentSuite;\n\tcollectorContext.currentSuite = suite;\n\tawait fn();\n\tcollectorContext.currentSuite = prev;\n}\nfunction withTimeout(fn, timeout, isHook = false, stackTraceError, onTimeout) {\n\tif (timeout <= 0 || timeout === Number.POSITIVE_INFINITY) {\n\t\treturn fn;\n\t}\n\tconst { setTimeout, clearTimeout } = getSafeTimers();\n\t// this function name is used to filter error in test/cli/test/fails.test.ts\n\treturn (function runWithTimeout(...args) {\n\t\tconst startTime = now$2();\n\t\tconst runner = getRunner();\n\t\trunner._currentTaskStartTime = startTime;\n\t\trunner._currentTaskTimeout = timeout;\n\t\treturn new Promise((resolve_, reject_) => {\n\t\t\tconst timer = setTimeout(() => {\n\t\t\t\tclearTimeout(timer);\n\t\t\t\trejectTimeoutError();\n\t\t\t}, timeout);\n\t\t\t// `unref` might not exist in browser\n\t\t\ttimer.unref?.();\n\t\t\tfunction rejectTimeoutError() {\n\t\t\t\tconst error = makeTimeoutError(isHook, timeout, stackTraceError);\n\t\t\t\tonTimeout?.(args, error);\n\t\t\t\treject_(error);\n\t\t\t}\n\t\t\tfunction resolve(result) {\n\t\t\t\trunner._currentTaskStartTime = undefined;\n\t\t\t\trunner._currentTaskTimeout = undefined;\n\t\t\t\tclearTimeout(timer);\n\t\t\t\t// if test/hook took too long in microtask, setTimeout won't be triggered,\n\t\t\t\t// but we still need to fail the test, see\n\t\t\t\t// https://github.com/vitest-dev/vitest/issues/2920\n\t\t\t\tif (now$2() - startTime >= timeout) {\n\t\t\t\t\trejectTimeoutError();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tresolve_(result);\n\t\t\t}\n\t\t\tfunction reject(error) {\n\t\t\t\trunner._currentTaskStartTime = undefined;\n\t\t\t\trunner._currentTaskTimeout = undefined;\n\t\t\t\tclearTimeout(timer);\n\t\t\t\treject_(error);\n\t\t\t}\n\t\t\t// sync test/hook will be caught by try/catch\n\t\t\ttry {\n\t\t\t\tconst result = fn(...args);\n\t\t\t\t// the result is a thenable, we don't wrap this in Promise.resolve\n\t\t\t\t// to avoid creating new promises\n\t\t\t\tif (typeof result === \"object\" && result != null && typeof result.then === \"function\") {\n\t\t\t\t\tresult.then(resolve, reject);\n\t\t\t\t} else {\n\t\t\t\t\tresolve(result);\n\t\t\t\t}\n\t\t\t} \n\t\t\t// user sync test/hook throws an error\ncatch (error) {\n\t\t\t\treject(error);\n\t\t\t}\n\t\t});\n\t});\n}\nfunction withCancel(fn, signal) {\n\treturn (function runWithCancel(...args) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tsignal.addEventListener(\"abort\", () => reject(signal.reason));\n\t\t\ttry {\n\t\t\t\tconst result = fn(...args);\n\t\t\t\tif (typeof result === \"object\" && result != null && typeof result.then === \"function\") {\n\t\t\t\t\tresult.then(resolve, reject);\n\t\t\t\t} else {\n\t\t\t\t\tresolve(result);\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\treject(error);\n\t\t\t}\n\t\t});\n\t});\n}\nconst abortControllers = new WeakMap();\nfunction abortIfTimeout([context], error) {\n\tif (context) {\n\t\tabortContextSignal(context, error);\n\t}\n}\nfunction abortContextSignal(context, error) {\n\tconst abortController = abortControllers.get(context);\n\tabortController?.abort(error);\n}\nfunction createTestContext(test, runner) {\n\tconst context = function() {\n\t\tthrow new Error(\"done() callback is deprecated, use promise instead\");\n\t};\n\tlet abortController = abortControllers.get(context);\n\tif (!abortController) {\n\t\tabortController = new AbortController();\n\t\tabortControllers.set(context, abortController);\n\t}\n\tcontext.signal = abortController.signal;\n\tcontext.task = test;\n\tcontext.skip = (condition, note) => {\n\t\tif (condition === false) {\n\t\t\t// do nothing\n\t\t\treturn undefined;\n\t\t}\n\t\ttest.result ??= { state: \"skip\" };\n\t\ttest.result.pending = true;\n\t\tthrow new PendingError(\"test is skipped; abort execution\", test, typeof condition === \"string\" ? condition : note);\n\t};\n\tcontext.annotate = ((message, type, attachment) => {\n\t\tif (test.result && test.result.state !== \"run\") {\n\t\t\tthrow new Error(`Cannot annotate tests outside of the test run. The test \"${test.name}\" finished running with the \"${test.result.state}\" state already.`);\n\t\t}\n\t\tconst annotation = {\n\t\t\tmessage,\n\t\t\ttype: typeof type === \"object\" || type === undefined ? \"notice\" : type\n\t\t};\n\t\tconst annotationAttachment = typeof type === \"object\" ? type : attachment;\n\t\tif (annotationAttachment) {\n\t\t\tannotation.attachment = annotationAttachment;\n\t\t\tmanageArtifactAttachment(annotation.attachment);\n\t\t}\n\t\treturn recordAsyncOperation(test, recordArtifact(test, {\n\t\t\ttype: \"internal:annotation\",\n\t\t\tannotation\n\t\t}).then(async ({ annotation }) => {\n\t\t\tif (!runner.onTestAnnotate) {\n\t\t\t\tthrow new Error(`Test runner doesn't support test annotations.`);\n\t\t\t}\n\t\t\tawait finishSendTasksUpdate(runner);\n\t\t\tconst resolvedAnnotation = await runner.onTestAnnotate(test, annotation);\n\t\t\ttest.annotations.push(resolvedAnnotation);\n\t\t\treturn resolvedAnnotation;\n\t\t}));\n\t});\n\tcontext.onTestFailed = (handler, timeout) => {\n\t\ttest.onFailed ||= [];\n\t\ttest.onFailed.push(withTimeout(handler, timeout ?? runner.config.hookTimeout, true, new Error(\"STACK_TRACE_ERROR\"), (_, error) => abortController.abort(error)));\n\t};\n\tcontext.onTestFinished = (handler, timeout) => {\n\t\ttest.onFinished ||= [];\n\t\ttest.onFinished.push(withTimeout(handler, timeout ?? runner.config.hookTimeout, true, new Error(\"STACK_TRACE_ERROR\"), (_, error) => abortController.abort(error)));\n\t};\n\treturn runner.extendTaskContext?.(context) || context;\n}\nfunction makeTimeoutError(isHook, timeout, stackTraceError) {\n\tconst message = `${isHook ? \"Hook\" : \"Test\"} timed out in ${timeout}ms.\\nIf this is a long-running ${isHook ? \"hook\" : \"test\"}, pass a timeout value as the last argument or configure it globally with \"${isHook ? \"hookTimeout\" : \"testTimeout\"}\".`;\n\tconst error = new Error(message);\n\tif (stackTraceError?.stack) {\n\t\terror.stack = stackTraceError.stack.replace(error.message, stackTraceError.message);\n\t}\n\treturn error;\n}\n\nasync function runSetupFiles(config, files, runner) {\n\tif (config.sequence.setupFiles === \"parallel\") {\n\t\tawait Promise.all(files.map(async (fsPath) => {\n\t\t\tawait runner.importFile(fsPath, \"setup\");\n\t\t}));\n\t} else {\n\t\tfor (const fsPath of files) {\n\t\t\tawait runner.importFile(fsPath, \"setup\");\n\t\t}\n\t}\n}\n\nconst now$1 = globalThis.performance ? globalThis.performance.now.bind(globalThis.performance) : Date.now;\nasync function collectTests(specs, runner) {\n\tconst files = [];\n\tconst config = runner.config;\n\tconst $ = runner.trace;\n\tlet defaultTagsFilter;\n\tfor (const spec of specs) {\n\t\tconst filepath = typeof spec === \"string\" ? spec : spec.filepath;\n\t\tawait $(\"collect_spec\", { \"code.file.path\": filepath }, async () => {\n\t\t\tconst testLocations = typeof spec === \"string\" ? undefined : spec.testLocations;\n\t\t\tconst testNamePattern = typeof spec === \"string\" ? undefined : spec.testNamePattern;\n\t\t\tconst testIds = typeof spec === \"string\" ? undefined : spec.testIds;\n\t\t\tconst testTagsFilter = typeof spec === \"object\" && spec.testTagsFilter ? createTagsFilter(spec.testTagsFilter, config.tags) : undefined;\n\t\t\tconst fileTags = typeof spec === \"string\" ? [] : spec.fileTags || [];\n\t\t\tconst file = createFileTask(filepath, config.root, config.name, runner.pool, runner.viteEnvironment);\n\t\t\tfile.tags = fileTags;\n\t\t\tfile.shuffle = config.sequence.shuffle;\n\t\t\ttry {\n\t\t\t\tvalidateTags(runner.config, fileTags);\n\t\t\t\trunner.onCollectStart?.(file);\n\t\t\t\tclearCollectorContext(file, runner);\n\t\t\t\tconst setupFiles = toArray(config.setupFiles);\n\t\t\t\tif (setupFiles.length) {\n\t\t\t\t\tconst setupStart = now$1();\n\t\t\t\t\tawait runSetupFiles(config, setupFiles, runner);\n\t\t\t\t\tconst setupEnd = now$1();\n\t\t\t\t\tfile.setupDuration = setupEnd - setupStart;\n\t\t\t\t} else {\n\t\t\t\t\tfile.setupDuration = 0;\n\t\t\t\t}\n\t\t\t\tconst collectStart = now$1();\n\t\t\t\tawait runner.importFile(filepath, \"collect\");\n\t\t\t\tconst durations = runner.getImportDurations?.();\n\t\t\t\tif (durations) {\n\t\t\t\t\tfile.importDurations = durations;\n\t\t\t\t}\n\t\t\t\tconst defaultTasks = await getDefaultSuite().collect(file);\n\t\t\t\tconst fileHooks = createSuiteHooks();\n\t\t\t\tmergeHooks(fileHooks, getHooks(defaultTasks));\n\t\t\t\tfor (const c of [...defaultTasks.tasks, ...collectorContext.tasks]) {\n\t\t\t\t\tif (c.type === \"test\" || c.type === \"suite\") {\n\t\t\t\t\t\tfile.tasks.push(c);\n\t\t\t\t\t} else if (c.type === \"collector\") {\n\t\t\t\t\t\tconst suite = await c.collect(file);\n\t\t\t\t\t\tif (suite.name || suite.tasks.length) {\n\t\t\t\t\t\t\tmergeHooks(fileHooks, getHooks(suite));\n\t\t\t\t\t\t\tfile.tasks.push(suite);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// check that types are exhausted\n\t\t\t\t\t\tc;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tsetHooks(file, fileHooks);\n\t\t\t\tfile.collectDuration = now$1() - collectStart;\n\t\t\t} catch (e) {\n\t\t\t\tconst errors = e instanceof AggregateError ? e.errors.map((e) => processError(e, runner.config.diffOptions)) : [processError(e, runner.config.diffOptions)];\n\t\t\t\tfile.result = {\n\t\t\t\t\tstate: \"fail\",\n\t\t\t\t\terrors\n\t\t\t\t};\n\t\t\t\tconst durations = runner.getImportDurations?.();\n\t\t\t\tif (durations) {\n\t\t\t\t\tfile.importDurations = durations;\n\t\t\t\t}\n\t\t\t}\n\t\t\tcalculateSuiteHash(file);\n\t\t\tconst hasOnlyTasks = someTasksAreOnly(file);\n\t\t\tif (!testTagsFilter && !defaultTagsFilter && config.tagsFilter) {\n\t\t\t\tdefaultTagsFilter = createTagsFilter(config.tagsFilter, config.tags);\n\t\t\t}\n\t\t\tinterpretTaskModes(file, testNamePattern ?? config.testNamePattern, testLocations, testIds, testTagsFilter ?? defaultTagsFilter, hasOnlyTasks, false, config.allowOnly);\n\t\t\tif (file.mode === \"queued\") {\n\t\t\t\tfile.mode = \"run\";\n\t\t\t}\n\t\t\tfiles.push(file);\n\t\t});\n\t}\n\treturn files;\n}\nfunction mergeHooks(baseHooks, hooks) {\n\tfor (const _key in hooks) {\n\t\tconst key = _key;\n\t\tbaseHooks[key].push(...hooks[key]);\n\t}\n\treturn baseHooks;\n}\n\nconst now = globalThis.performance ? globalThis.performance.now.bind(globalThis.performance) : Date.now;\nconst unixNow = Date.now;\nconst { clearTimeout, setTimeout } = getSafeTimers();\nlet limitMaxConcurrency;\n/**\n* Normalizes retry configuration to extract individual values.\n* Handles both number and object forms.\n*/\nfunction getRetryCount(retry) {\n\tif (retry === undefined) {\n\t\treturn 0;\n\t}\n\tif (typeof retry === \"number\") {\n\t\treturn retry;\n\t}\n\treturn retry.count ?? 0;\n}\nfunction getRetryDelay(retry) {\n\tif (retry === undefined) {\n\t\treturn 0;\n\t}\n\tif (typeof retry === \"number\") {\n\t\treturn 0;\n\t}\n\treturn retry.delay ?? 0;\n}\nfunction getRetryCondition(retry) {\n\tif (retry === undefined) {\n\t\treturn undefined;\n\t}\n\tif (typeof retry === \"number\") {\n\t\treturn undefined;\n\t}\n\treturn retry.condition;\n}\nfunction updateSuiteHookState(task, name, state, runner) {\n\tif (!task.result) {\n\t\ttask.result = { state: \"run\" };\n\t}\n\tif (!task.result.hooks) {\n\t\ttask.result.hooks = {};\n\t}\n\tconst suiteHooks = task.result.hooks;\n\tif (suiteHooks) {\n\t\tsuiteHooks[name] = state;\n\t\tlet event = state === \"run\" ? \"before-hook-start\" : \"before-hook-end\";\n\t\tif (name === \"afterAll\" || name === \"afterEach\") {\n\t\t\tevent = state === \"run\" ? \"after-hook-start\" : \"after-hook-end\";\n\t\t}\n\t\tupdateTask(event, task, runner);\n\t}\n}\nfunction getSuiteHooks(suite, name, sequence) {\n\tconst hooks = getHooks(suite)[name];\n\tif (sequence === \"stack\" && (name === \"afterAll\" || name === \"afterEach\")) {\n\t\treturn hooks.slice().reverse();\n\t}\n\treturn hooks;\n}\nasync function callTestHooks(runner, test, hooks, sequence) {\n\tif (sequence === \"stack\") {\n\t\thooks = hooks.slice().reverse();\n\t}\n\tif (!hooks.length) {\n\t\treturn;\n\t}\n\tconst context = test.context;\n\tconst onTestFailed = test.context.onTestFailed;\n\tconst onTestFinished = test.context.onTestFinished;\n\tcontext.onTestFailed = () => {\n\t\tthrow new Error(`Cannot call \"onTestFailed\" inside a test hook.`);\n\t};\n\tcontext.onTestFinished = () => {\n\t\tthrow new Error(`Cannot call \"onTestFinished\" inside a test hook.`);\n\t};\n\tif (sequence === \"parallel\") {\n\t\ttry {\n\t\t\tawait Promise.all(hooks.map((fn) => limitMaxConcurrency(() => fn(test.context))));\n\t\t} catch (e) {\n\t\t\tfailTask(test.result, e, runner.config.diffOptions);\n\t\t}\n\t} else {\n\t\tfor (const fn of hooks) {\n\t\t\ttry {\n\t\t\t\tawait limitMaxConcurrency(() => fn(test.context));\n\t\t\t} catch (e) {\n\t\t\t\tfailTask(test.result, e, runner.config.diffOptions);\n\t\t\t}\n\t\t}\n\t}\n\tcontext.onTestFailed = onTestFailed;\n\tcontext.onTestFinished = onTestFinished;\n}\nasync function callSuiteHook(suite, currentTask, name, runner, args) {\n\tconst sequence = runner.config.sequence.hooks;\n\tconst callbacks = [];\n\t// stop at file level\n\tconst parentSuite = \"filepath\" in suite ? null : suite.suite || suite.file;\n\tif (name === \"beforeEach\" && parentSuite) {\n\t\tcallbacks.push(...await callSuiteHook(parentSuite, currentTask, name, runner, args));\n\t}\n\tconst hooks = getSuiteHooks(suite, name, sequence);\n\tif (hooks.length > 0) {\n\t\tupdateSuiteHookState(currentTask, name, \"run\", runner);\n\t}\n\tasync function runHook(hook) {\n\t\treturn limitMaxConcurrency(async () => {\n\t\t\treturn getBeforeHookCleanupCallback(hook, await hook(...args), name === \"beforeEach\" ? args[0] : undefined);\n\t\t});\n\t}\n\tif (sequence === \"parallel\") {\n\t\tcallbacks.push(...await Promise.all(hooks.map((hook) => runHook(hook))));\n\t} else {\n\t\tfor (const hook of hooks) {\n\t\t\tcallbacks.push(await runHook(hook));\n\t\t}\n\t}\n\tif (hooks.length > 0) {\n\t\tupdateSuiteHookState(currentTask, name, \"pass\", runner);\n\t}\n\tif (name === \"afterEach\" && parentSuite) {\n\t\tcallbacks.push(...await callSuiteHook(parentSuite, currentTask, name, runner, args));\n\t}\n\treturn callbacks;\n}\nfunction getAroundEachHooks(suite) {\n\tconst hooks = [];\n\tconst parentSuite = \"filepath\" in suite ? null : suite.suite || suite.file;\n\tif (parentSuite) {\n\t\thooks.push(...getAroundEachHooks(parentSuite));\n\t}\n\thooks.push(...getHooks(suite).aroundEach);\n\treturn hooks;\n}\nfunction getAroundAllHooks(suite) {\n\treturn getHooks(suite).aroundAll;\n}\nfunction makeAroundHookTimeoutError(hookName, phase, timeout, stackTraceError) {\n\tconst message = `The ${phase} phase of \"${hookName}\" hook timed out after ${timeout}ms.`;\n\tconst ErrorClass = phase === \"setup\" ? AroundHookSetupError : AroundHookTeardownError;\n\tconst error = new ErrorClass(message);\n\tif (stackTraceError?.stack) {\n\t\terror.stack = stackTraceError.stack.replace(stackTraceError.message, error.message);\n\t}\n\treturn error;\n}\nasync function callAroundHooks(runInner, options) {\n\tconst { hooks, hookName, callbackName, onTimeout, invokeHook } = options;\n\tif (!hooks.length) {\n\t\tawait runInner();\n\t\treturn;\n\t}\n\tconst hookErrors = [];\n\tconst createTimeoutPromise = (timeout, phase, stackTraceError) => {\n\t\tlet timer;\n\t\tlet timedout = false;\n\t\tconst promise = new Promise((_, reject) => {\n\t\t\tif (timeout > 0 && timeout !== Number.POSITIVE_INFINITY) {\n\t\t\t\ttimer = setTimeout(() => {\n\t\t\t\t\ttimedout = true;\n\t\t\t\t\tconst error = makeAroundHookTimeoutError(hookName, phase, timeout, stackTraceError);\n\t\t\t\t\tonTimeout?.(error);\n\t\t\t\t\treject(error);\n\t\t\t\t}, timeout);\n\t\t\t\ttimer.unref?.();\n\t\t\t}\n\t\t});\n\t\tconst clear = () => {\n\t\t\tif (timer) {\n\t\t\t\tclearTimeout(timer);\n\t\t\t\ttimer = undefined;\n\t\t\t}\n\t\t};\n\t\treturn {\n\t\t\tpromise,\n\t\t\tclear,\n\t\t\tisTimedOut: () => timedout\n\t\t};\n\t};\n\tconst runNextHook = async (index) => {\n\t\tif (index >= hooks.length) {\n\t\t\treturn runInner();\n\t\t}\n\t\tconst hook = hooks[index];\n\t\tconst timeout = getAroundHookTimeout(hook);\n\t\tconst stackTraceError = getAroundHookStackTrace(hook);\n\t\tlet useCalled = false;\n\t\tlet setupTimeout;\n\t\tlet teardownTimeout;\n\t\tlet setupLimitConcurrencyRelease;\n\t\tlet teardownLimitConcurrencyRelease;\n\t\t// Promise that resolves when use() is called (setup phase complete)\n\t\tlet resolveUseCalled;\n\t\tconst useCalledPromise = new Promise((resolve) => {\n\t\t\tresolveUseCalled = resolve;\n\t\t});\n\t\t// Promise that resolves when use() returns (inner hooks complete, teardown phase starts)\n\t\tlet resolveUseReturned;\n\t\tconst useReturnedPromise = new Promise((resolve) => {\n\t\t\tresolveUseReturned = resolve;\n\t\t});\n\t\t// Promise that resolves when hook completes\n\t\tlet resolveHookComplete;\n\t\tlet rejectHookComplete;\n\t\tconst hookCompletePromise = new Promise((resolve, reject) => {\n\t\t\tresolveHookComplete = resolve;\n\t\t\trejectHookComplete = reject;\n\t\t});\n\t\tconst use = async () => {\n\t\t\t// shouldn't continue to next (runTest/Suite or inner aroundEach/All) when aroundEach/All setup timed out.\n\t\t\tif (setupTimeout.isTimedOut()) {\n\t\t\t\t// we can throw any error to bail out.\n\t\t\t\t// this error is not seen by end users since `runNextHook` already rejected with timeout error\n\t\t\t\t// and this error is caught by `rejectHookComplete`.\n\t\t\t\tthrow new Error(\"__VITEST_INTERNAL_AROUND_HOOK_ABORT__\");\n\t\t\t}\n\t\t\tif (useCalled) {\n\t\t\t\tthrow new AroundHookMultipleCallsError(`The \\`${callbackName}\\` callback was called multiple times in the \\`${hookName}\\` hook. ` + `The callback can only be called once per hook.`);\n\t\t\t}\n\t\t\tuseCalled = true;\n\t\t\tresolveUseCalled();\n\t\t\t// Setup phase completed - clear setup timer\n\t\t\tsetupTimeout.clear();\n\t\t\tsetupLimitConcurrencyRelease?.();\n\t\t\t// Run inner hooks - don't time this against our teardown timeout\n\t\t\tawait runNextHook(index + 1).catch((e) => hookErrors.push(e));\n\t\t\tteardownLimitConcurrencyRelease = await limitMaxConcurrency.acquire();\n\t\t\t// Start teardown timer after inner hooks complete - only times this hook's teardown code\n\t\t\tteardownTimeout = createTimeoutPromise(timeout, \"teardown\", stackTraceError);\n\t\t\t// Signal that use() is returning (teardown phase starting)\n\t\t\tresolveUseReturned();\n\t\t};\n\t\tsetupLimitConcurrencyRelease = await limitMaxConcurrency.acquire();\n\t\t// Start setup timeout\n\t\tsetupTimeout = createTimeoutPromise(timeout, \"setup\", stackTraceError);\n\t\t(async () => {\n\t\t\ttry {\n\t\t\t\tawait invokeHook(hook, use);\n\t\t\t\tif (!useCalled) {\n\t\t\t\t\tthrow new AroundHookSetupError(`The \\`${callbackName}\\` callback was not called in the \\`${hookName}\\` hook. ` + `Make sure to call \\`${callbackName}\\` to run the ${hookName === \"aroundEach\" ? \"test\" : \"suite\"}.`);\n\t\t\t\t}\n\t\t\t\tresolveHookComplete();\n\t\t\t} catch (error) {\n\t\t\t\trejectHookComplete(error);\n\t\t\t} finally {\n\t\t\t\tsetupLimitConcurrencyRelease?.();\n\t\t\t\tteardownLimitConcurrencyRelease?.();\n\t\t\t}\n\t\t})();\n\t\t// Wait for either: use() to be called OR hook to complete (error) OR setup timeout\n\t\ttry {\n\t\t\tawait Promise.race([\n\t\t\t\tuseCalledPromise,\n\t\t\t\thookCompletePromise,\n\t\t\t\tsetupTimeout.promise\n\t\t\t]);\n\t\t} finally {\n\t\t\tsetupLimitConcurrencyRelease?.();\n\t\t\tsetupTimeout.clear();\n\t\t}\n\t\t// Wait for use() to return (inner hooks complete) OR hook to complete (error during inner hooks)\n\t\tawait Promise.race([useReturnedPromise, hookCompletePromise]);\n\t\t// Now teardownTimeout is guaranteed to be set\n\t\t// Wait for hook to complete (teardown) OR teardown timeout\n\t\ttry {\n\t\t\tawait Promise.race([hookCompletePromise, teardownTimeout?.promise]);\n\t\t} finally {\n\t\t\tteardownLimitConcurrencyRelease?.();\n\t\t\tteardownTimeout?.clear();\n\t\t}\n\t};\n\tawait runNextHook(0).catch((e) => hookErrors.push(e));\n\tif (hookErrors.length > 0) {\n\t\tthrow hookErrors;\n\t}\n}\nasync function callAroundAllHooks(suite, runSuiteInner) {\n\tawait callAroundHooks(runSuiteInner, {\n\t\thooks: getAroundAllHooks(suite),\n\t\thookName: \"aroundAll\",\n\t\tcallbackName: \"runSuite()\",\n\t\tinvokeHook: (hook, use) => hook(use, suite)\n\t});\n}\nasync function callAroundEachHooks(suite, test, runTest) {\n\tawait callAroundHooks(\n\t\t// Take checkpoint right before runTest - at this point all aroundEach fixtures\n\t\t// have been resolved, so we can correctly identify which fixtures belong to\n\t\t// aroundEach (before checkpoint) vs inside runTest (after checkpoint)\n\t\t() => runTest(getFixtureCleanupCount(test.context)),\n\t\t{\n\t\t\thooks: getAroundEachHooks(suite),\n\t\t\thookName: \"aroundEach\",\n\t\t\tcallbackName: \"runTest()\",\n\t\t\tonTimeout: (error) => abortContextSignal(test.context, error),\n\t\t\tinvokeHook: (hook, use) => hook(use, test.context, suite)\n\t\t}\n\t);\n}\nconst packs = new Map();\nconst eventsPacks = [];\nconst pendingTasksUpdates = [];\nfunction sendTasksUpdate(runner) {\n\tif (packs.size) {\n\t\tconst taskPacks = Array.from(packs).map(([id, task]) => {\n\t\t\treturn [\n\t\t\t\tid,\n\t\t\t\ttask[0],\n\t\t\t\ttask[1]\n\t\t\t];\n\t\t});\n\t\tconst p = runner.onTaskUpdate?.(taskPacks, eventsPacks);\n\t\tif (p) {\n\t\t\tpendingTasksUpdates.push(p);\n\t\t\t// remove successful promise to not grow array indefnitely,\n\t\t\t// but keep rejections so finishSendTasksUpdate can handle them\n\t\t\tp.then(() => pendingTasksUpdates.splice(pendingTasksUpdates.indexOf(p), 1), () => {});\n\t\t}\n\t\teventsPacks.length = 0;\n\t\tpacks.clear();\n\t}\n}\nasync function finishSendTasksUpdate(runner) {\n\tsendTasksUpdate(runner);\n\tawait Promise.all(pendingTasksUpdates);\n}\nfunction throttle(fn, ms) {\n\tlet last = 0;\n\tlet pendingCall;\n\treturn function call(...args) {\n\t\tconst now = unixNow();\n\t\tif (now - last > ms) {\n\t\t\tlast = now;\n\t\t\tclearTimeout(pendingCall);\n\t\t\tpendingCall = undefined;\n\t\t\treturn fn.apply(this, args);\n\t\t}\n\t\t// Make sure fn is still called even if there are no further calls\n\t\tpendingCall ??= setTimeout(() => call.bind(this)(...args), ms);\n\t};\n}\n// throttle based on summary reporter's DURATION_UPDATE_INTERVAL_MS\nconst sendTasksUpdateThrottled = throttle(sendTasksUpdate, 100);\nfunction updateTask(event, task, runner) {\n\teventsPacks.push([\n\t\ttask.id,\n\t\tevent,\n\t\tundefined\n\t]);\n\tpacks.set(task.id, [task.result, task.meta]);\n\tsendTasksUpdateThrottled(runner);\n}\nasync function callCleanupHooks(runner, cleanups) {\n\tconst sequence = runner.config.sequence.hooks;\n\tif (sequence === \"stack\") {\n\t\tcleanups = cleanups.slice().reverse();\n\t}\n\tif (sequence === \"parallel\") {\n\t\tawait Promise.all(cleanups.map(async (fn) => {\n\t\t\tif (typeof fn !== \"function\") {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait limitMaxConcurrency(() => fn());\n\t\t}));\n\t} else {\n\t\tfor (const fn of cleanups) {\n\t\t\tif (typeof fn !== \"function\") {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tawait limitMaxConcurrency(() => fn());\n\t\t}\n\t}\n}\n/**\n* Determines if a test should be retried based on its retryCondition configuration\n*/\nfunction passesRetryCondition(test, errors) {\n\tconst condition = getRetryCondition(test.retry);\n\tif (!errors || errors.length === 0) {\n\t\treturn false;\n\t}\n\tif (!condition) {\n\t\treturn true;\n\t}\n\tconst error = errors[errors.length - 1];\n\tif (condition instanceof RegExp) {\n\t\treturn condition.test(error.message || \"\");\n\t} else if (typeof condition === \"function\") {\n\t\treturn condition(error);\n\t}\n\treturn false;\n}\nasync function runTest(test, runner) {\n\tawait runner.onBeforeRunTask?.(test);\n\tif (test.mode !== \"run\" && test.mode !== \"queued\") {\n\t\tupdateTask(\"test-prepare\", test, runner);\n\t\tupdateTask(\"test-finished\", test, runner);\n\t\treturn;\n\t}\n\tif (test.result?.state === \"fail\") {\n\t\t// should not be possible to get here, I think this is just copy pasted from suite\n\t\t// TODO: maybe someone fails tests in `beforeAll` hooks?\n\t\t// https://github.com/vitest-dev/vitest/pull/7069\n\t\tupdateTask(\"test-failed-early\", test, runner);\n\t\treturn;\n\t}\n\tconst start = now();\n\ttest.result = {\n\t\tstate: \"run\",\n\t\tstartTime: unixNow(),\n\t\tretryCount: 0\n\t};\n\tupdateTask(\"test-prepare\", test, runner);\n\tconst cleanupRunningTest = addRunningTest(test);\n\tsetCurrentTest(test);\n\tconst suite = test.suite || test.file;\n\tconst $ = runner.trace;\n\tconst repeats = test.repeats ?? 0;\n\tfor (let repeatCount = 0; repeatCount <= repeats; repeatCount++) {\n\t\tconst retry = getRetryCount(test.retry);\n\t\tfor (let retryCount = 0; retryCount <= retry; retryCount++) {\n\t\t\tlet beforeEachCleanups = [];\n\t\t\t// fixtureCheckpoint is passed by callAroundEachHooks - it represents the count\n\t\t\t// of fixture cleanup functions AFTER all aroundEach fixtures have been resolved\n\t\t\t// but BEFORE the test runs. This allows us to clean up only fixtures created\n\t\t\t// inside runTest while preserving aroundEach fixtures for teardown.\n\t\t\tawait callAroundEachHooks(suite, test, async (fixtureCheckpoint) => {\n\t\t\t\ttry {\n\t\t\t\t\tawait runner.onBeforeTryTask?.(test, {\n\t\t\t\t\t\tretry: retryCount,\n\t\t\t\t\t\trepeats: repeatCount\n\t\t\t\t\t});\n\t\t\t\t\ttest.result.repeatCount = repeatCount;\n\t\t\t\t\tbeforeEachCleanups = await $(\"test.beforeEach\", () => callSuiteHook(suite, test, \"beforeEach\", runner, [test.context, suite]));\n\t\t\t\t\tif (runner.runTask) {\n\t\t\t\t\t\tawait $(\"test.callback\", () => limitMaxConcurrency(() => runner.runTask(test)));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst fn = getFn(test);\n\t\t\t\t\t\tif (!fn) {\n\t\t\t\t\t\t\tthrow new Error(\"Test function is not found. Did you add it using `setFn`?\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\tawait $(\"test.callback\", () => limitMaxConcurrency(() => fn()));\n\t\t\t\t\t}\n\t\t\t\t\tawait runner.onAfterTryTask?.(test, {\n\t\t\t\t\t\tretry: retryCount,\n\t\t\t\t\t\trepeats: repeatCount\n\t\t\t\t\t});\n\t\t\t\t\tif (test.result.state !== \"fail\") {\n\t\t\t\t\t\ttest.result.state = \"pass\";\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {\n\t\t\t\t\tfailTask(test.result, e, runner.config.diffOptions);\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tawait runner.onTaskFinished?.(test);\n\t\t\t\t} catch (e) {\n\t\t\t\t\tfailTask(test.result, e, runner.config.diffOptions);\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tawait $(\"test.afterEach\", () => callSuiteHook(suite, test, \"afterEach\", runner, [test.context, suite]));\n\t\t\t\t\tif (beforeEachCleanups.length) {\n\t\t\t\t\t\tawait $(\"test.cleanup\", () => callCleanupHooks(runner, beforeEachCleanups));\n\t\t\t\t\t}\n\t\t\t\t\t// Only clean up fixtures created inside runTest (after the checkpoint)\n\t\t\t\t\t// Fixtures created for aroundEach will be cleaned up after aroundEach teardown\n\t\t\t\t\tawait callFixtureCleanupFrom(test.context, fixtureCheckpoint);\n\t\t\t\t} catch (e) {\n\t\t\t\t\tfailTask(test.result, e, runner.config.diffOptions);\n\t\t\t\t}\n\t\t\t\tif (test.onFinished?.length) {\n\t\t\t\t\tawait $(\"test.onFinished\", () => callTestHooks(runner, test, test.onFinished, \"stack\"));\n\t\t\t\t}\n\t\t\t\tif (test.result.state === \"fail\" && test.onFailed?.length) {\n\t\t\t\t\tawait $(\"test.onFailed\", () => callTestHooks(runner, test, test.onFailed, runner.config.sequence.hooks));\n\t\t\t\t}\n\t\t\t\ttest.onFailed = undefined;\n\t\t\t\ttest.onFinished = undefined;\n\t\t\t\tawait runner.onAfterRetryTask?.(test, {\n\t\t\t\t\tretry: retryCount,\n\t\t\t\t\trepeats: repeatCount\n\t\t\t\t});\n\t\t\t}).catch((error) => {\n\t\t\t\tfailTask(test.result, error, runner.config.diffOptions);\n\t\t\t});\n\t\t\t// Clean up fixtures that were created for aroundEach (before the checkpoint)\n\t\t\t// This runs after aroundEach teardown has completed\n\t\t\ttry {\n\t\t\t\tawait callFixtureCleanup(test.context);\n\t\t\t} catch (e) {\n\t\t\t\tfailTask(test.result, e, runner.config.diffOptions);\n\t\t\t}\n\t\t\t// skipped with new PendingError\n\t\t\tif (test.result?.pending || test.result?.state === \"skip\") {\n\t\t\t\ttest.mode = \"skip\";\n\t\t\t\ttest.result = {\n\t\t\t\t\tstate: \"skip\",\n\t\t\t\t\tnote: test.result?.note,\n\t\t\t\t\tpending: true,\n\t\t\t\t\tduration: now() - start\n\t\t\t\t};\n\t\t\t\tupdateTask(\"test-finished\", test, runner);\n\t\t\t\tsetCurrentTest(undefined);\n\t\t\t\tcleanupRunningTest();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (test.result.state === \"pass\") {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (retryCount < retry) {\n\t\t\t\tconst shouldRetry = passesRetryCondition(test, test.result.errors);\n\t\t\t\tif (!shouldRetry) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\ttest.result.state = \"run\";\n\t\t\t\ttest.result.retryCount = (test.result.retryCount ?? 0) + 1;\n\t\t\t\tconst delay = getRetryDelay(test.retry);\n\t\t\t\tif (delay > 0) {\n\t\t\t\t\tawait new Promise((resolve) => setTimeout(resolve, delay));\n\t\t\t\t}\n\t\t\t}\n\t\t\t// update retry info\n\t\t\tupdateTask(\"test-retried\", test, runner);\n\t\t}\n\t}\n\t// if test is marked to be failed, flip the result\n\tif (test.fails) {\n\t\tif (test.result.state === \"pass\") {\n\t\t\tconst error = processError(new Error(\"Expect test to fail\"));\n\t\t\ttest.result.state = \"fail\";\n\t\t\ttest.result.errors = [error];\n\t\t} else {\n\t\t\ttest.result.state = \"pass\";\n\t\t\ttest.result.errors = undefined;\n\t\t}\n\t}\n\tcleanupRunningTest();\n\tsetCurrentTest(undefined);\n\ttest.result.duration = now() - start;\n\tawait runner.onAfterRunTask?.(test);\n\tupdateTask(\"test-finished\", test, runner);\n}\nfunction failTask(result, err, diffOptions) {\n\tif (err instanceof PendingError) {\n\t\tresult.state = \"skip\";\n\t\tresult.note = err.note;\n\t\tresult.pending = true;\n\t\treturn;\n\t}\n\tif (err instanceof TestRunAbortError) {\n\t\tresult.state = \"skip\";\n\t\tresult.note = err.message;\n\t\treturn;\n\t}\n\tresult.state = \"fail\";\n\tconst errors = Array.isArray(err) ? err : [err];\n\tfor (const e of errors) {\n\t\tconst errors = e instanceof AggregateError ? e.errors.map((e) => processError(e, diffOptions)) : [processError(e, diffOptions)];\n\t\tresult.errors ??= [];\n\t\tresult.errors.push(...errors);\n\t}\n}\nfunction markTasksAsSkipped(suite, runner) {\n\tsuite.tasks.forEach((t) => {\n\t\tt.mode = \"skip\";\n\t\tt.result = {\n\t\t\t...t.result,\n\t\t\tstate: \"skip\"\n\t\t};\n\t\tupdateTask(\"test-finished\", t, runner);\n\t\tif (t.type === \"suite\") {\n\t\t\tmarkTasksAsSkipped(t, runner);\n\t\t}\n\t});\n}\nfunction markPendingTasksAsSkipped(suite, runner, note) {\n\tsuite.tasks.forEach((t) => {\n\t\tif (!t.result || t.result.state === \"run\") {\n\t\t\tt.mode = \"skip\";\n\t\t\tt.result = {\n\t\t\t\t...t.result,\n\t\t\t\tstate: \"skip\",\n\t\t\t\tnote\n\t\t\t};\n\t\t\tupdateTask(\"test-cancel\", t, runner);\n\t\t}\n\t\tif (t.type === \"suite\") {\n\t\t\tmarkPendingTasksAsSkipped(t, runner, note);\n\t\t}\n\t});\n}\nasync function runSuite(suite, runner) {\n\tawait runner.onBeforeRunSuite?.(suite);\n\tif (suite.result?.state === \"fail\") {\n\t\tmarkTasksAsSkipped(suite, runner);\n\t\t// failed during collection\n\t\tupdateTask(\"suite-failed-early\", suite, runner);\n\t\treturn;\n\t}\n\tconst start = now();\n\tconst mode = suite.mode;\n\tsuite.result = {\n\t\tstate: mode === \"skip\" || mode === \"todo\" ? mode : \"run\",\n\t\tstartTime: unixNow()\n\t};\n\tconst $ = runner.trace;\n\tupdateTask(\"suite-prepare\", suite, runner);\n\tlet beforeAllCleanups = [];\n\tif (suite.mode === \"skip\") {\n\t\tsuite.result.state = \"skip\";\n\t\tupdateTask(\"suite-finished\", suite, runner);\n\t} else if (suite.mode === \"todo\") {\n\t\tsuite.result.state = \"todo\";\n\t\tupdateTask(\"suite-finished\", suite, runner);\n\t} else {\n\t\tlet suiteRan = false;\n\t\ttry {\n\t\t\tawait callAroundAllHooks(suite, async () => {\n\t\t\t\tsuiteRan = true;\n\t\t\t\ttry {\n\t\t\t\t\t// beforeAll\n\t\t\t\t\ttry {\n\t\t\t\t\t\tbeforeAllCleanups = await $(\"suite.beforeAll\", () => callSuiteHook(suite, suite, \"beforeAll\", runner, [suite]));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tfailTask(suite.result, e, runner.config.diffOptions);\n\t\t\t\t\t\tmarkTasksAsSkipped(suite, runner);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t// run suite children\n\t\t\t\t\tif (runner.runSuite) {\n\t\t\t\t\t\tawait runner.runSuite(suite);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfor (let tasksGroup of partitionSuiteChildren(suite)) {\n\t\t\t\t\t\t\tif (tasksGroup[0].concurrent === true) {\n\t\t\t\t\t\t\t\tawait Promise.all(tasksGroup.map((c) => runSuiteChild(c, runner)));\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tconst { sequence } = runner.config;\n\t\t\t\t\t\t\t\tif (suite.shuffle) {\n\t\t\t\t\t\t\t\t\t// run describe block independently from tests\n\t\t\t\t\t\t\t\t\tconst suites = tasksGroup.filter((group) => group.type === \"suite\");\n\t\t\t\t\t\t\t\t\tconst tests = tasksGroup.filter((group) => group.type === \"test\");\n\t\t\t\t\t\t\t\t\tconst groups = shuffle([suites, tests], sequence.seed);\n\t\t\t\t\t\t\t\t\ttasksGroup = groups.flatMap((group) => shuffle(group, sequence.seed));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tfor (const c of tasksGroup) {\n\t\t\t\t\t\t\t\t\tawait runSuiteChild(c, runner);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} finally {\n\t\t\t\t\t// afterAll runs even if beforeAll or suite children fail\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait $(\"suite.afterAll\", () => callSuiteHook(suite, suite, \"afterAll\", runner, [suite]));\n\t\t\t\t\t\tif (beforeAllCleanups.length) {\n\t\t\t\t\t\t\tawait $(\"suite.cleanup\", () => callCleanupHooks(runner, beforeAllCleanups));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (suite.file === suite) {\n\t\t\t\t\t\t\tconst contexts = TestFixtures.getFileContexts(suite.file);\n\t\t\t\t\t\t\tawait Promise.all(contexts.map((context) => callFixtureCleanup(context)));\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tfailTask(suite.result, e, runner.config.diffOptions);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t} catch (e) {\n\t\t\t// mark tasks as skipped if aroundAll failed before the suite callback was executed\n\t\t\tif (!suiteRan) {\n\t\t\t\tmarkTasksAsSkipped(suite, runner);\n\t\t\t}\n\t\t\tfailTask(suite.result, e, runner.config.diffOptions);\n\t\t}\n\t\tif (suite.mode === \"run\" || suite.mode === \"queued\") {\n\t\t\tif (!runner.config.passWithNoTests && !hasTests(suite)) {\n\t\t\t\tsuite.result.state = \"fail\";\n\t\t\t\tif (!suite.result.errors?.length) {\n\t\t\t\t\tconst error = processError(new Error(`No test found in suite ${suite.name}`));\n\t\t\t\t\tsuite.result.errors = [error];\n\t\t\t\t}\n\t\t\t} else if (hasFailed(suite)) {\n\t\t\t\tsuite.result.state = \"fail\";\n\t\t\t} else {\n\t\t\t\tsuite.result.state = \"pass\";\n\t\t\t}\n\t\t}\n\t\tsuite.result.duration = now() - start;\n\t\tawait runner.onAfterRunSuite?.(suite);\n\t\tupdateTask(\"suite-finished\", suite, runner);\n\t}\n}\nasync function runSuiteChild(c, runner) {\n\tconst $ = runner.trace;\n\tif (c.type === \"test\") {\n\t\treturn $(\"run.test\", {\n\t\t\t\"vitest.test.id\": c.id,\n\t\t\t\"vitest.test.name\": c.name,\n\t\t\t\"vitest.test.mode\": c.mode,\n\t\t\t\"vitest.test.timeout\": c.timeout,\n\t\t\t\"code.file.path\": c.file.filepath,\n\t\t\t\"code.line.number\": c.location?.line,\n\t\t\t\"code.column.number\": c.location?.column\n\t\t}, () => runTest(c, runner));\n\t} else if (c.type === \"suite\") {\n\t\treturn $(\"run.suite\", {\n\t\t\t\"vitest.suite.id\": c.id,\n\t\t\t\"vitest.suite.name\": c.name,\n\t\t\t\"vitest.suite.mode\": c.mode,\n\t\t\t\"code.file.path\": c.file.filepath,\n\t\t\t\"code.line.number\": c.location?.line,\n\t\t\t\"code.column.number\": c.location?.column\n\t\t}, () => runSuite(c, runner));\n\t}\n}\nasync function runFiles(files, runner) {\n\tlimitMaxConcurrency ??= limitConcurrency(runner.config.maxConcurrency);\n\tfor (const file of files) {\n\t\tif (!file.tasks.length && !runner.config.passWithNoTests) {\n\t\t\tif (!file.result?.errors?.length) {\n\t\t\t\tconst error = processError(new Error(`No test suite found in file ${file.filepath}`));\n\t\t\t\tfile.result = {\n\t\t\t\t\tstate: \"fail\",\n\t\t\t\t\terrors: [error]\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\tawait runner.trace(\"run.spec\", {\n\t\t\t\"code.file.path\": file.filepath,\n\t\t\t\"vitest.suite.tasks.length\": file.tasks.length\n\t\t}, () => runSuite(file, runner));\n\t}\n}\nconst workerRunners = new WeakSet();\nfunction defaultTrace(_, attributes, cb) {\n\tif (typeof attributes === \"function\") {\n\t\treturn attributes();\n\t}\n\treturn cb();\n}\nasync function startTests(specs, runner) {\n\trunner.trace ??= defaultTrace;\n\tconst cancel = runner.cancel?.bind(runner);\n\t// Ideally, we need to have an event listener for this, but only have a runner here.\n\t// Adding another onCancel felt wrong (maybe it needs to be refactored)\n\trunner.cancel = (reason) => {\n\t\t// We intentionally create only one error since there is only one test run that can be cancelled\n\t\tconst error = new TestRunAbortError(\"The test run was aborted by the user.\", reason);\n\t\tgetRunningTests().forEach((test) => {\n\t\t\tabortContextSignal(test.context, error);\n\t\t\tmarkPendingTasksAsSkipped(test.file, runner, error.message);\n\t\t});\n\t\treturn cancel?.(reason);\n\t};\n\tif (!workerRunners.has(runner)) {\n\t\trunner.onCleanupWorkerContext?.(async () => {\n\t\t\tawait Promise.all([...TestFixtures.getWorkerContexts()].map((context) => callFixtureCleanup(context))).finally(() => {\n\t\t\t\tTestFixtures.clearDefinitions();\n\t\t\t});\n\t\t});\n\t\tworkerRunners.add(runner);\n\t}\n\ttry {\n\t\tconst paths = specs.map((f) => typeof f === \"string\" ? f : f.filepath);\n\t\tawait runner.onBeforeCollect?.(paths);\n\t\tconst files = await collectTests(specs, runner);\n\t\tawait runner.onCollected?.(files);\n\t\tawait runner.onBeforeRunFiles?.(files);\n\t\tawait runFiles(files, runner);\n\t\tawait runner.onAfterRunFiles?.(files);\n\t\tawait finishSendTasksUpdate(runner);\n\t\treturn files;\n\t} finally {\n\t\trunner.cancel = cancel;\n\t}\n}\nasync function publicCollect(specs, runner) {\n\trunner.trace ??= defaultTrace;\n\tconst paths = specs.map((f) => typeof f === \"string\" ? f : f.filepath);\n\tawait runner.onBeforeCollect?.(paths);\n\tconst files = await collectTests(specs, runner);\n\tawait runner.onCollected?.(files);\n\treturn files;\n}\n\n/**\n* @experimental\n* @advanced\n*\n* Records a custom test artifact during test execution.\n*\n* This function allows you to attach structured data, files, or metadata to a test.\n*\n* Vitest automatically injects the source location where the artifact was created and manages any attachments you include.\n*\n* **Note:** artifacts must be recorded before the task is reported. Any artifacts recorded after that will not be included in the task.\n*\n* @param task - The test task context, typically accessed via `this.task` in custom matchers or `context.task` in tests\n* @param artifact - The artifact to record. Must extend {@linkcode TestArtifactBase}\n*\n* @returns A promise that resolves to the recorded artifact with location injected\n*\n* @throws {Error} If the test runner doesn't support artifacts\n*\n* @example\n* ```ts\n* // In a custom assertion\n* async function toHaveValidSchema(this: MatcherState, actual: unknown) {\n* const validation = validateSchema(actual)\n*\n* await recordArtifact(this.task, {\n* type: 'my-plugin:schema-validation',\n* passed: validation.valid,\n* errors: validation.errors,\n* })\n*\n* return { pass: validation.valid, message: () => '...' }\n* }\n* ```\n*/\nasync function recordArtifact(task, artifact) {\n\tconst runner = getRunner();\n\tconst stack = findTestFileStackTrace(task.file.filepath, new Error(\"STACK_TRACE\").stack);\n\tif (stack) {\n\t\tartifact.location = {\n\t\t\tfile: stack.file,\n\t\t\tline: stack.line,\n\t\t\tcolumn: stack.column\n\t\t};\n\t\tif (artifact.type === \"internal:annotation\") {\n\t\t\tartifact.annotation.location = artifact.location;\n\t\t}\n\t}\n\tif (Array.isArray(artifact.attachments)) {\n\t\tfor (const attachment of artifact.attachments) {\n\t\t\tmanageArtifactAttachment(attachment);\n\t\t}\n\t}\n\t// annotations won't resolve as artifacts for backwards compatibility until next major\n\tif (artifact.type === \"internal:annotation\") {\n\t\treturn artifact;\n\t}\n\tif (!runner.onTestArtifactRecord) {\n\t\tthrow new Error(`Test runner doesn't support test artifacts.`);\n\t}\n\tawait finishSendTasksUpdate(runner);\n\tconst resolvedArtifact = await runner.onTestArtifactRecord(task, artifact);\n\ttask.artifacts.push(resolvedArtifact);\n\treturn resolvedArtifact;\n}\nconst table = [];\nfor (let i = 65; i < 91; i++) {\n\ttable.push(String.fromCharCode(i));\n}\nfor (let i = 97; i < 123; i++) {\n\ttable.push(String.fromCharCode(i));\n}\nfor (let i = 0; i < 10; i++) {\n\ttable.push(i.toString(10));\n}\ntable.push(\"+\", \"/\");\nfunction encodeUint8Array(bytes) {\n\tlet base64 = \"\";\n\tconst len = bytes.byteLength;\n\tfor (let i = 0; i < len; i += 3) {\n\t\tif (len === i + 1) {\n\t\t\tconst a = (bytes[i] & 252) >> 2;\n\t\t\tconst b = (bytes[i] & 3) << 4;\n\t\t\tbase64 += table[a];\n\t\t\tbase64 += table[b];\n\t\t\tbase64 += \"==\";\n\t\t} else if (len === i + 2) {\n\t\t\tconst a = (bytes[i] & 252) >> 2;\n\t\t\tconst b = (bytes[i] & 3) << 4 | (bytes[i + 1] & 240) >> 4;\n\t\t\tconst c = (bytes[i + 1] & 15) << 2;\n\t\t\tbase64 += table[a];\n\t\t\tbase64 += table[b];\n\t\t\tbase64 += table[c];\n\t\t\tbase64 += \"=\";\n\t\t} else {\n\t\t\tconst a = (bytes[i] & 252) >> 2;\n\t\t\tconst b = (bytes[i] & 3) << 4 | (bytes[i + 1] & 240) >> 4;\n\t\t\tconst c = (bytes[i + 1] & 15) << 2 | (bytes[i + 2] & 192) >> 6;\n\t\t\tconst d = bytes[i + 2] & 63;\n\t\t\tbase64 += table[a];\n\t\t\tbase64 += table[b];\n\t\t\tbase64 += table[c];\n\t\t\tbase64 += table[d];\n\t\t}\n\t}\n\treturn base64;\n}\n/**\n* Records an async operation associated with a test task.\n*\n* This function tracks promises that should be awaited before a test completes.\n* The promise is automatically removed from the test's promise list once it settles.\n*/\nfunction recordAsyncOperation(test, promise) {\n\t// if promise is explicitly awaited, remove it from the list\n\tpromise = promise.finally(() => {\n\t\tif (!test.promises) {\n\t\t\treturn;\n\t\t}\n\t\tconst index = test.promises.indexOf(promise);\n\t\tif (index !== -1) {\n\t\t\ttest.promises.splice(index, 1);\n\t\t}\n\t});\n\t// record promise\n\tif (!test.promises) {\n\t\ttest.promises = [];\n\t}\n\ttest.promises.push(promise);\n\treturn promise;\n}\n/**\n* Validates and prepares a test attachment for serialization.\n*\n* This function ensures attachments have either `body` or `path` set (but not both), and converts `Uint8Array` bodies to base64-encoded strings for easier serialization.\n*\n* @param attachment - The attachment to validate and prepare\n*\n* @throws {TypeError} If neither `body` nor `path` is provided\n* @throws {TypeError} If both `body` and `path` are provided\n*/\nfunction manageArtifactAttachment(attachment) {\n\tif (attachment.body == null && !attachment.path) {\n\t\tthrow new TypeError(`Test attachment requires \"body\" or \"path\" to be set. Both are missing.`);\n\t}\n\tif (attachment.body && attachment.path) {\n\t\tthrow new TypeError(`Test attachment requires only one of \"body\" or \"path\" to be set. Both are specified.`);\n\t}\n\t// convert to a string so it's easier to serialise\n\tif (attachment.body instanceof Uint8Array) {\n\t\tattachment.body = encodeUint8Array(attachment.body);\n\t}\n}\n\nexport { afterAll, afterEach, aroundAll, aroundEach, beforeAll, beforeEach, publicCollect as collectTests, createTaskCollector, describe, getCurrentSuite, getCurrentTest, getFn, getHooks, it, onTestFailed, onTestFinished, recordArtifact, setFn, setHooks, startTests, suite, test, updateTask };\n"],"x_google_ignoreList":[0],"mappings":"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"}
|