@depup/vitest 4.1.1-depup.0 → 4.1.2-depup.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.
Files changed (53) hide show
  1. package/README.md +4 -4
  2. package/changes.json +6 -6
  3. package/dist/browser.d.ts +1 -1
  4. package/dist/browser.js +1 -1
  5. package/dist/chunks/{base.C9_VThnT.js → base.BPik1OqN.js} +7 -7
  6. package/dist/chunks/{benchmark.D0SlKNbZ.js → benchmark.CX_oY03V.js} +1 -1
  7. package/dist/chunks/{browser.d.X3SXoOCV.d.ts → browser.d.BMOr_Kmk.d.ts} +1 -1
  8. package/dist/chunks/{cac.CHfKU_gf.js → cac.DRKYQDPl.js} +10 -8
  9. package/dist/chunks/{cli-api.BUXBO6jS.js → cli-api.Bxr1Nn49.js} +8 -6
  10. package/dist/chunks/{config.d.EJLVE3es.d.ts → config.d.Cz9kPrQs.d.ts} +1 -0
  11. package/dist/chunks/{coverage.CJ2HXVIG.js → coverage.kqM80boz.js} +12 -3
  12. package/dist/chunks/{defaults.CdU2lD-q.js → defaults.9aQKnqFk.js} +13 -5
  13. package/dist/chunks/{globals.8mibwXRO.js → globals.CVqIbOyt.js} +3 -3
  14. package/dist/chunks/{index.DXMFO5MJ.js → index.0GYC6HAu.js} +627 -586
  15. package/dist/chunks/{index.Dkvtd-Ku.js → index.DOa3dzoN.js} +2 -2
  16. package/dist/chunks/{index.6q6giCZO.js → index.nZ2xqFgD.js} +2 -2
  17. package/dist/chunks/{init-forks.B4YYSIj4.js → init-forks.UV3ZQGQH.js} +1 -1
  18. package/dist/chunks/{init-threads.Bd2Hsaex.js → init-threads.D3eCsY76.js} +1 -1
  19. package/dist/chunks/{init.BVxhC4nR.js → init.D98-gwRW.js} +3 -1
  20. package/dist/chunks/{nativeModuleMocker.Dd1Q1VIw.js → nativeModuleMocker.BRN2oBJd.js} +1 -1
  21. package/dist/chunks/{plugin.d.Dx0ozo6e.d.ts → plugin.d.BWbK_Jpw.d.ts} +1 -1
  22. package/dist/chunks/{reporters.d.CZ5E0GCT.d.ts → reporters.d.B0uk8id2.d.ts} +6 -8
  23. package/dist/chunks/{setup-common.CB31_KSV.js → setup-common.2wZXQUjS.js} +1 -1
  24. package/dist/chunks/{startVitestModuleRunner.C3FXk5Gv.js → startVitestModuleRunner.bRl2_oI_.js} +16 -2
  25. package/dist/chunks/{test.CBQUpOM3.js → test.p_J6dB8a.js} +1 -1
  26. package/dist/chunks/utils.DK8FXp4T.js +189 -0
  27. package/dist/chunks/{vm.DId8XBJa.js → vm.BvVhnZPV.js} +2 -2
  28. package/dist/chunks/{worker.d.B84sVRy0.d.ts → worker.d.BT5j8dyR.d.ts} +1 -1
  29. package/dist/cli.js +2 -20
  30. package/dist/config.cjs +13 -5
  31. package/dist/config.d.ts +8 -8
  32. package/dist/config.js +1 -1
  33. package/dist/coverage.d.ts +4 -4
  34. package/dist/coverage.js +2 -2
  35. package/dist/index.d.ts +6 -6
  36. package/dist/index.js +3 -3
  37. package/dist/node.d.ts +7 -7
  38. package/dist/node.js +8 -8
  39. package/dist/reporters.d.ts +4 -4
  40. package/dist/reporters.js +6 -6
  41. package/dist/runners.d.ts +1 -1
  42. package/dist/runners.js +2 -2
  43. package/dist/runtime.js +1 -1
  44. package/dist/suite.js +1 -1
  45. package/dist/worker.d.ts +2 -2
  46. package/dist/worker.js +9 -8
  47. package/dist/workers/forks.js +10 -9
  48. package/dist/workers/runVmTests.js +5 -5
  49. package/dist/workers/threads.js +10 -9
  50. package/dist/workers/vmForks.js +5 -5
  51. package/dist/workers/vmThreads.js +5 -5
  52. package/package.json +22 -22
  53. package/dist/chunks/index.CEzQDJGb.js +0 -231
@@ -1,5 +1,5 @@
1
- import { v as vi, N as NodeBenchmarkRunner, T as TestRunner, a as assert, c as createExpect, g as globalExpect, i as inject, s as should, b as vitest } from './test.CBQUpOM3.js';
2
- import { b as bench } from './benchmark.D0SlKNbZ.js';
1
+ import { v as vi, N as NodeBenchmarkRunner, T as TestRunner, a as assert, c as createExpect, g as globalExpect, i as inject, s as should, b as vitest } from './test.p_J6dB8a.js';
2
+ import { b as bench } from './benchmark.CX_oY03V.js';
3
3
  import { V as VitestEvaluatedModules } from './evaluatedModules.Dg1zASAC.js';
4
4
  import { expectTypeOf } from 'expect-type';
5
5
  import { afterAll, afterEach, aroundAll, aroundEach, beforeAll, beforeEach, describe, it, onTestFailed, onTestFinished, recordArtifact, suite, test } from '@vitest/runner';
@@ -1,9 +1,9 @@
1
1
  import { chai } from '@vitest/expect';
2
2
  import { createHook } from 'node:async_hooks';
3
- import { l as loadDiffConfig, a as loadSnapshotSerializers, t as takeCoverageInsideWorker } from './setup-common.CB31_KSV.js';
3
+ import { l as loadDiffConfig, a as loadSnapshotSerializers, t as takeCoverageInsideWorker } from './setup-common.2wZXQUjS.js';
4
4
  import { r as rpc } from './rpc.MzXet3jl.js';
5
5
  import { g as getWorkerState } from './utils.BX5Fg8C4.js';
6
- import { T as TestRunner, N as NodeBenchmarkRunner } from './test.CBQUpOM3.js';
6
+ import { T as TestRunner, N as NodeBenchmarkRunner } from './test.p_J6dB8a.js';
7
7
 
8
8
  function setupChaiConfig(config) {
9
9
  Object.assign(chai.config, config);
@@ -1,4 +1,4 @@
1
- import { i as init } from './init.BVxhC4nR.js';
1
+ import { i as init } from './init.D98-gwRW.js';
2
2
 
3
3
  if (!process.send) throw new Error("Expected worker to be run in node:child_process");
4
4
  // Store globals in case tests overwrite them
@@ -1,5 +1,5 @@
1
1
  import { isMainThread, parentPort } from 'node:worker_threads';
2
- import { i as init } from './init.BVxhC4nR.js';
2
+ import { i as init } from './init.D98-gwRW.js';
3
3
 
4
4
  if (isMainThread || !parentPort) throw new Error("Expected worker to be run in node:worker_threads");
5
5
  function workerInit(options) {
@@ -3,10 +3,11 @@ import { isBuiltin } from 'node:module';
3
3
  import { pathToFileURL } from 'node:url';
4
4
  import { resolve } from 'pathe';
5
5
  import { ModuleRunner, EvaluatedModules } from 'vite/module-runner';
6
- import { b as VitestTransport } from './startVitestModuleRunner.C3FXk5Gv.js';
6
+ import { b as VitestTransport } from './startVitestModuleRunner.bRl2_oI_.js';
7
7
  import { e as environments } from './index.DC7d2Pf8.js';
8
8
  import { serializeValue } from '@vitest/utils/serialize';
9
9
  import { serializeError } from '@vitest/utils/error';
10
+ import { disableDefaultColors } from 'tinyrainbow';
10
11
  import { T as Traces } from './traces.DT5aQ62U.js';
11
12
  import { o as onCancel, a as rpcDone, c as createRuntimeRpc } from './rpc.MzXet3jl.js';
12
13
  import { createStackString, parseStacktrace } from '@vitest/utils/source-map';
@@ -215,6 +216,7 @@ function init(worker) {
215
216
  process.env.VITEST_POOL_ID = String(message.poolId);
216
217
  process.env.VITEST_WORKER_ID = String(message.workerId);
217
218
  reportMemory = message.options.reportMemory;
219
+ if (message.context.config.isAgent) disableDefaultColors();
218
220
  traces ??= await new Traces({
219
221
  enabled: message.traces.enabled,
220
222
  sdkPath: message.traces.sdkPath
@@ -5,7 +5,7 @@ import { cleanUrl, createDefer } from '@vitest/utils/helpers';
5
5
  import { p as parse } from './acorn.B2iPLyUM.js';
6
6
  import { isAbsolute } from 'pathe';
7
7
  import { t as toBuiltin } from './modules.BJuCwlRJ.js';
8
- import { B as BareModuleMocker, n as normalizeModuleId } from './startVitestModuleRunner.C3FXk5Gv.js';
8
+ import { B as BareModuleMocker, n as normalizeModuleId } from './startVitestModuleRunner.bRl2_oI_.js';
9
9
  import 'node:fs';
10
10
  import './utils.BX5Fg8C4.js';
11
11
  import '@vitest/utils/timers';
@@ -1,5 +1,5 @@
1
1
  import { DevEnvironment } from 'vite';
2
- import { V as Vitest, T as TestProject, a as TestProjectConfiguration } from './reporters.d.CZ5E0GCT.js';
2
+ import { V as Vitest, T as TestProject, a as TestProjectConfiguration } from './reporters.d.B0uk8id2.js';
3
3
 
4
4
  /**
5
5
  * Generate a unique cache identifier.
@@ -3,14 +3,14 @@ import { TestError, SerializedError, Arrayable, ParsedStack, Awaitable } from '@
3
3
  import { A as AfterSuiteRunMeta, U as UserConsoleLog, b as AsyncLeak, P as ProvidedContext, L as LabelColor } from './rpc.d.BFMWpdph.js';
4
4
  import { Writable } from 'node:stream';
5
5
  import { DevEnvironment, TransformResult as TransformResult$1, ViteDevServer, Plugin, UserConfig as UserConfig$1, DepOptimizationConfig, ServerOptions, ConfigEnv, AliasOptions } from 'vite';
6
- import { S as SerializedTestSpecification, c as SourceModuleDiagnostic, B as BrowserTesterOptions } from './browser.d.X3SXoOCV.js';
7
- import { B as BrowserTraceViewMode, S as SerializedConfig, F as FakeTimerInstallOpts } from './config.d.EJLVE3es.js';
6
+ import { S as SerializedTestSpecification, c as SourceModuleDiagnostic, B as BrowserTesterOptions } from './browser.d.BMOr_Kmk.js';
7
+ import { B as BrowserTraceViewMode, S as SerializedConfig, F as FakeTimerInstallOpts } from './config.d.Cz9kPrQs.js';
8
8
  import { PrettyFormatOptions } from '@vitest/pretty-format';
9
9
  import { SnapshotSummary, SnapshotStateOptions } from '@vitest/snapshot';
10
10
  import { SerializedDiffOptions } from '@vitest/utils/diff';
11
11
  import { chai } from '@vitest/expect';
12
12
  import { happyDomTypes, jsdomTypes } from 'vitest/optional-types.js';
13
- import { c as ContextTestEnvironment, d as WorkerExecuteContext, e as WorkerTestEnvironment } from './worker.d.B84sVRy0.js';
13
+ import { c as ContextTestEnvironment, d as WorkerExecuteContext, e as WorkerTestEnvironment } from './worker.d.BT5j8dyR.js';
14
14
  import { O as OTELCarrier } from './traces.d.402V_yFI.js';
15
15
  import { B as BenchmarkResult } from './benchmark.d.DAaHLpsq.js';
16
16
  import { MockedModule } from '@vitest/mocker';
@@ -694,7 +694,7 @@ interface CoverageProviderModule extends RuntimeCoverageProviderModule {
694
694
  type CoverageReporter = keyof ReportOptions | (string & {});
695
695
  type CoverageReporterWithOptions<ReporterName extends CoverageReporter = CoverageReporter> = ReporterName extends keyof ReportOptions ? ReportOptions[ReporterName] extends never ? [ReporterName, object] : [ReporterName, Partial<ReportOptions[ReporterName]>] : [ReporterName, Record<string, unknown>];
696
696
  /** Fields that have default values. Internally these will always be defined. */
697
- type FieldsWithDefaultValues = "provider" | "enabled" | "clean" | "cleanOnRerun" | "reportsDirectory" | "exclude" | "reportOnFailure" | "allowExternal" | "processingConcurrency";
697
+ type FieldsWithDefaultValues = "provider" | "enabled" | "clean" | "cleanOnRerun" | "reportsDirectory" | "exclude" | "reportOnFailure" | "allowExternal" | "processingConcurrency" | "reporter" | "excludeAfterRemap" | "ignoreClassMethods" | "skipFull" | "watermarks";
698
698
  type ResolvedCoverageOptions = CoverageOptions & Required<Pick<CoverageOptions, FieldsWithDefaultValues>> & {
699
699
  reporter: CoverageReporterWithOptions[];
700
700
  htmlDir?: string;
@@ -835,8 +835,6 @@ interface CoverageOptions {
835
835
  /**
836
836
  * Collect coverage only for files changed since a specified commit or branch.
837
837
  * Inherits the default value from `test.changed`.
838
- *
839
- * @default false
840
838
  */
841
839
  changed?: boolean | string;
842
840
  /**
@@ -3539,5 +3537,5 @@ type TestProjectInlineConfiguration = (UserWorkspaceConfig & {
3539
3537
  });
3540
3538
  type TestProjectConfiguration = string | TestProjectInlineConfiguration | Promise<UserWorkspaceConfig> | UserProjectConfigFn;
3541
3539
 
3542
- export { DefaultReporter as $, Logger as L, TestProject as T, Vitest as V, DotReporter as a1, GithubActionsReporter as a3, HangingProcessReporter as a5, JUnitReporter as a7, TestModule as aB, TestSuite as aM, VerboseBenchmarkReporter as aR, VerboseReporter as aS, VitestPackageInstaller as aU, experimental_getRunnerTask as aX, CoverageMap as aY, JsonReporter as aa, ReportersMap as ap, TapFlatReporter as av, TapReporter as aw, TestCase as ay, TestCollection as az, TestSpecification as i, AgentReporter as m, BaseReporter as n, BenchmarkReporter as p, BenchmarkReportsMap as q };
3543
- export type { ApiConfig as A, BaseCoverageOptions as B, CoverageV8Options as C, BrowserProviderOption as D, BrowserScript as E, BrowserServerFactory as F, BrowserServerOptions as G, BrowserServerState as H, InlineConfig as I, BrowserServerStateSession as J, BuiltinEnvironment as K, BuiltinReporterOptions as M, BuiltinReporters as N, CSSModuleScopeStrategy as O, PoolWorker as P, CoverageIstanbulOptions as Q, ResolvedCoverageOptions as R, CoverageOptions as S, UserWorkspaceConfig as U, WatcherTriggerPattern as W, CoverageProvider as X, CoverageProviderModule as Y, CoverageReporter as Z, CustomProviderOptions as _, TestProjectConfiguration as a, DepsOptimizationOptions as a0, EnvironmentOptions as a2, HTMLOptions as a4, JUnitOptions as a6, JsonAssertionResult as a8, JsonOptions as a9, TestDiagnostic as aA, TestModuleState as aC, TestResult as aD, TestResultFailed as aE, TestResultPassed as aF, TestResultSkipped as aG, TestRunEndReason as aH, TestRunResult as aI, TestSequencerConstructor as aJ, TestSpecificationOptions as aK, TestState as aL, TestSuiteState as aN, ToMatchScreenshotComparators as aO, ToMatchScreenshotOptions as aP, TypecheckConfig as aQ, VitestEnvironment as aT, WorkerResponse as aV, _BrowserNames as aW, JsonTestResult as ab, JsonTestResults as ac, ModuleDiagnostic as ad, OnServerRestartHandler as ae, OnTestsRerunHandler as af, ParentProjectBrowser as ag, Pool as ah, PoolRunnerInitializer as ai, PoolTask as aj, ProjectBrowser as ak, ProjectConfig as al, ReportContext as am, ReportedHookContext as an, Reporter as ao, ResolveSnapshotPathHandler as aq, ResolveSnapshotPathHandlerContext as ar, ResolvedBrowserOptions as as, ResolvedProjectConfig as at, SerializedTestProject as au, TaskOptions as ax, UserProjectConfigFn as b, UserProjectConfigExport as c, TestProjectInlineConfiguration as d, UserConfig as e, ResolvedConfig as f, VitestRunMode as g, VitestOptions as h, PoolOptions as j, WorkerRequest as k, TestSequencer as l, BenchmarkBuiltinReporters as o, BenchmarkUserOptions as r, BrowserBuiltinProvider as s, BrowserCommand as t, BrowserCommandContext as u, BrowserConfigOptions as v, BrowserInstanceOption as w, BrowserModuleMocker as x, BrowserOrchestrator as y, BrowserProvider as z };
3540
+ export { DefaultReporter as $, Logger as L, TestProject as T, Vitest as V, DotReporter as a1, GithubActionsReporter as a3, HangingProcessReporter as a5, JUnitReporter as a7, TestCollection as aA, TestModule as aC, TestSuite as aN, VerboseBenchmarkReporter as aS, VerboseReporter as aT, VitestPackageInstaller as aV, experimental_getRunnerTask as aY, CoverageMap as aZ, JsonReporter as aa, ReportersMap as ap, TapFlatReporter as aw, TapReporter as ax, TestCase as az, TestSpecification as h, AgentReporter as l, BaseReporter as m, BenchmarkReporter as o, BenchmarkReportsMap as p };
3541
+ export type { ApiConfig as A, BaseCoverageOptions as B, CoverageOptions as C, BrowserScript as D, BrowserServerFactory as E, FieldsWithDefaultValues as F, BrowserServerOptions as G, BrowserServerState as H, InlineConfig as I, BrowserServerStateSession as J, BuiltinEnvironment as K, BuiltinReporterOptions as M, BuiltinReporters as N, CSSModuleScopeStrategy as O, PoolWorker as P, CoverageIstanbulOptions as Q, ResolvedConfig as R, CoverageProvider as S, UserWorkspaceConfig as U, WatcherTriggerPattern as W, CoverageProviderModule as X, CoverageReporter as Y, CoverageV8Options as Z, CustomProviderOptions as _, TestProjectConfiguration as a, DepsOptimizationOptions as a0, EnvironmentOptions as a2, HTMLOptions as a4, JUnitOptions as a6, JsonAssertionResult as a8, JsonOptions as a9, TestDiagnostic as aB, TestModuleState as aD, TestResult as aE, TestResultFailed as aF, TestResultPassed as aG, TestResultSkipped as aH, TestRunEndReason as aI, TestRunResult as aJ, TestSequencerConstructor as aK, TestSpecificationOptions as aL, TestState as aM, TestSuiteState as aO, ToMatchScreenshotComparators as aP, ToMatchScreenshotOptions as aQ, TypecheckConfig as aR, VitestEnvironment as aU, WorkerResponse as aW, _BrowserNames as aX, JsonTestResult as ab, JsonTestResults as ac, ModuleDiagnostic as ad, OnServerRestartHandler as ae, OnTestsRerunHandler as af, ParentProjectBrowser as ag, Pool as ah, PoolRunnerInitializer as ai, PoolTask as aj, ProjectBrowser as ak, ProjectConfig as al, ReportContext as am, ReportedHookContext as an, Reporter as ao, ResolveSnapshotPathHandler as aq, ResolveSnapshotPathHandlerContext as ar, ResolvedBrowserOptions as as, ResolvedCoverageOptions as at, ResolvedProjectConfig as au, SerializedTestProject as av, TaskOptions as ay, UserProjectConfigFn as b, UserProjectConfigExport as c, TestProjectInlineConfiguration as d, UserConfig as e, VitestRunMode as f, VitestOptions as g, PoolOptions as i, WorkerRequest as j, TestSequencer as k, BenchmarkBuiltinReporters as n, BenchmarkUserOptions as q, BrowserBuiltinProvider as r, BrowserCommand as s, BrowserCommandContext as t, BrowserConfigOptions as u, BrowserInstanceOption as v, BrowserModuleMocker as w, BrowserOrchestrator as x, BrowserProvider as y, BrowserProviderOption as z };
@@ -26,7 +26,7 @@ async function setupCommonEnv(config) {
26
26
  if (globalSetup) return;
27
27
  globalSetup = true;
28
28
  setSafeTimers();
29
- if (config.globals) (await import('./globals.8mibwXRO.js')).registerApiGlobally();
29
+ if (config.globals) (await import('./globals.CVqIbOyt.js')).registerApiGlobally();
30
30
  }
31
31
  function setupDefines(config) {
32
32
  for (const key in config.defines) globalThis[key] = config.defines[key];
@@ -102,11 +102,16 @@ class BareModuleMocker {
102
102
  }
103
103
  async resolveMocks() {
104
104
  if (!BareModuleMocker.pendingIds.length) return;
105
- await Promise.all(BareModuleMocker.pendingIds.map(async (mock) => {
105
+ const resolveMock = async (mock) => {
106
106
  const { id, url, external } = await this.resolveId(mock.id, mock.importer);
107
107
  if (mock.action === "unmock") this.unmockPath(id);
108
108
  if (mock.action === "mock") this.mockPath(mock.id, id, url, external, mock.type, mock.factory);
109
- }));
109
+ };
110
+ // group consecutive mocks of the same action type together,
111
+ // resolve in parallel inside each group, but run groups sequentially
112
+ // to preserve mock/unmock ordering
113
+ const groups = groupByConsecutiveAction(BareModuleMocker.pendingIds);
114
+ for (const group of groups) await Promise.all(group.map(resolveMock));
110
115
  BareModuleMocker.pendingIds = [];
111
116
  }
112
117
  // public method to avoid circular dependency
@@ -212,6 +217,15 @@ const windowsSlashRE = /\\/g;
212
217
  function slash(p) {
213
218
  return p.replace(windowsSlashRE, "/");
214
219
  }
220
+ function groupByConsecutiveAction(mocks) {
221
+ const groups = [];
222
+ for (const mock of mocks) {
223
+ const last = groups.at(-1);
224
+ if (last?.[0].action === mock.action) last.push(mock);
225
+ else groups.push([mock]);
226
+ }
227
+ return groups;
228
+ }
215
229
  const multipleSlashRe = /^\/+/;
216
230
  // module-runner incorrectly replaces file:///path with `///path`
217
231
  function fixLeadingSlashes(id) {
@@ -1,7 +1,7 @@
1
1
  import { getCurrentTest, updateTask, createTaskCollector, getCurrentSuite, getHooks, getFn } from '@vitest/runner';
2
2
  import { assertTypes, createSimpleStackTrace, createDefer } from '@vitest/utils/helpers';
3
3
  import { getSafeTimers, delay } from '@vitest/utils/timers';
4
- import { a as getBenchOptions, g as getBenchFn } from './benchmark.D0SlKNbZ.js';
4
+ import { a as getBenchOptions, g as getBenchFn } from './benchmark.CX_oY03V.js';
5
5
  import { g as getWorkerState, i as isChildProcess, w as waitForImportsToResolve, r as resetModules } from './utils.BX5Fg8C4.js';
6
6
  import { chai, wrapAssertion, recordAsyncExpect, createAssertionMessage, equals, iterableEquality, subsetEquality, JestExtend, JestChaiExpect, ChaiStyleAssertions, JestAsymmetricMatchers, GLOBAL_EXPECT, ASYMMETRIC_MATCHERS_OBJECT, getState, setState, addCustomEqualityTesters, customMatchers } from '@vitest/expect';
7
7
  import { getNames, getTests, getTestName, createChainable, matchesTags } from '@vitest/runner/utils';
@@ -0,0 +1,189 @@
1
+ import { stripVTControlCharacters } from 'node:util';
2
+ import { slash } from '@vitest/utils/helpers';
3
+ import { isAbsolute, relative, dirname, basename } from 'pathe';
4
+ import c from 'tinyrainbow';
5
+
6
+ const F_RIGHT = "→";
7
+ const F_DOWN = "↓";
8
+ const F_DOWN_RIGHT = "↳";
9
+ const F_POINTER = "❯";
10
+ const F_DOT = "·";
11
+ const F_CHECK = "✓";
12
+ const F_CROSS = "×";
13
+ const F_LONG_DASH = "⎯";
14
+ const F_TODO = "□";
15
+ const F_TREE_NODE_MIDDLE = "├──";
16
+ const F_TREE_NODE_END = "└──";
17
+
18
+ const pointer = c.yellow(F_POINTER);
19
+ const skipped = c.dim(c.gray(F_DOWN));
20
+ const todo = c.dim(c.gray(F_TODO));
21
+ const benchmarkPass = c.green(F_DOT);
22
+ const testPass = c.green(F_CHECK);
23
+ const taskFail = c.red(F_CROSS);
24
+ const suiteFail = c.red(F_POINTER);
25
+ const pending = c.gray("·");
26
+ const separator = c.dim(" > ");
27
+ const labelDefaultColors = [
28
+ c.bgYellow,
29
+ c.bgCyan,
30
+ c.bgGreen,
31
+ c.bgMagenta
32
+ ];
33
+ function getCols(delta = 0) {
34
+ let length = process.stdout?.columns;
35
+ if (!length || Number.isNaN(length)) length = 30;
36
+ return Math.max(length + delta, 0);
37
+ }
38
+ function errorBanner(message) {
39
+ return divider(c.bold(c.bgRed(` ${message} `)), null, null, c.red);
40
+ }
41
+ function divider(text, left, right, color) {
42
+ const cols = getCols();
43
+ const c = color || ((text) => text);
44
+ if (text) {
45
+ const textLength = stripVTControlCharacters(text).length;
46
+ if (left == null && right != null) left = cols - textLength - right;
47
+ else {
48
+ left = left ?? Math.floor((cols - textLength) / 2);
49
+ right = cols - textLength - left;
50
+ }
51
+ left = Math.max(0, left);
52
+ right = Math.max(0, right);
53
+ return `${c(F_LONG_DASH.repeat(left))}${text}${c(F_LONG_DASH.repeat(right))}`;
54
+ }
55
+ return F_LONG_DASH.repeat(cols);
56
+ }
57
+ function formatTestPath(root, path) {
58
+ if (isAbsolute(path)) path = relative(root, path);
59
+ const dir = dirname(path);
60
+ const ext = path.match(/(\.(spec|test)\.[cm]?[tj]sx?)$/)?.[0] || "";
61
+ const base = basename(path, ext);
62
+ return slash(c.dim(`${dir}/`) + c.bold(base)) + c.dim(ext);
63
+ }
64
+ function renderSnapshotSummary(rootDir, snapshots) {
65
+ const summary = [];
66
+ if (snapshots.added) summary.push(c.bold(c.green(`${snapshots.added} written`)));
67
+ if (snapshots.unmatched) summary.push(c.bold(c.red(`${snapshots.unmatched} failed`)));
68
+ if (snapshots.updated) summary.push(c.bold(c.green(`${snapshots.updated} updated `)));
69
+ if (snapshots.filesRemoved) if (snapshots.didUpdate) summary.push(c.bold(c.green(`${snapshots.filesRemoved} files removed `)));
70
+ else summary.push(c.bold(c.yellow(`${snapshots.filesRemoved} files obsolete `)));
71
+ if (snapshots.filesRemovedList && snapshots.filesRemovedList.length) {
72
+ const [head, ...tail] = snapshots.filesRemovedList;
73
+ summary.push(`${c.gray(F_DOWN_RIGHT)} ${formatTestPath(rootDir, head)}`);
74
+ tail.forEach((key) => {
75
+ summary.push(` ${c.gray(F_DOT)} ${formatTestPath(rootDir, key)}`);
76
+ });
77
+ }
78
+ if (snapshots.unchecked) {
79
+ if (snapshots.didUpdate) summary.push(c.bold(c.green(`${snapshots.unchecked} removed`)));
80
+ else summary.push(c.bold(c.yellow(`${snapshots.unchecked} obsolete`)));
81
+ snapshots.uncheckedKeysByFile.forEach((uncheckedFile) => {
82
+ summary.push(`${c.gray(F_DOWN_RIGHT)} ${formatTestPath(rootDir, uncheckedFile.filePath)}`);
83
+ uncheckedFile.keys.forEach((key) => summary.push(` ${c.gray(F_DOT)} ${key}`));
84
+ });
85
+ }
86
+ return summary;
87
+ }
88
+ function countTestErrors(tasks) {
89
+ return tasks.reduce((c, i) => c + (i.result?.errors?.length || 0), 0);
90
+ }
91
+ function getStateString(tasks, name = "tests", showTotal = true) {
92
+ if (tasks.length === 0) return c.dim(`no ${name}`);
93
+ const passed = tasks.reduce((acc, i) => {
94
+ // Exclude expected failures from passed count
95
+ if (i.result?.state === "pass" && i.type === "test" && i.fails) return acc;
96
+ return i.result?.state === "pass" ? acc + 1 : acc;
97
+ }, 0);
98
+ const failed = tasks.reduce((acc, i) => i.result?.state === "fail" ? acc + 1 : acc, 0);
99
+ const skipped = tasks.reduce((acc, i) => i.mode === "skip" ? acc + 1 : acc, 0);
100
+ const todo = tasks.reduce((acc, i) => i.mode === "todo" ? acc + 1 : acc, 0);
101
+ const expectedFail = tasks.reduce((acc, i) => {
102
+ // Count tests that are marked as .fails and passed (which means they failed as expected)
103
+ if (i.result?.state === "pass" && i.type === "test" && i.fails) return acc + 1;
104
+ return acc;
105
+ }, 0);
106
+ return [
107
+ failed ? c.bold(c.red(`${failed} failed`)) : null,
108
+ passed ? c.bold(c.green(`${passed} passed`)) : null,
109
+ expectedFail ? c.cyan(`${expectedFail} expected fail`) : null,
110
+ skipped ? c.yellow(`${skipped} skipped`) : null,
111
+ todo ? c.gray(`${todo} todo`) : null
112
+ ].filter(Boolean).join(c.dim(" | ")) + (showTotal ? c.gray(` (${tasks.length})`) : "");
113
+ }
114
+ function getStateSymbol(task) {
115
+ if (task.mode === "todo") return todo;
116
+ if (task.mode === "skip") return skipped;
117
+ if (!task.result) return pending;
118
+ if (task.result.state === "run" || task.result.state === "queued") {
119
+ if (task.type === "suite") return pointer;
120
+ }
121
+ if (task.result.state === "pass") return task.meta?.benchmark ? benchmarkPass : testPass;
122
+ if (task.result.state === "fail") return task.type === "suite" ? suiteFail : taskFail;
123
+ return " ";
124
+ }
125
+ function formatTimeString(date) {
126
+ return date.toTimeString().split(" ")[0];
127
+ }
128
+ function formatTime(time) {
129
+ if (time > 1e3) return `${(time / 1e3).toFixed(2)}s`;
130
+ return `${Math.round(time)}ms`;
131
+ }
132
+ function formatProjectName(project, suffix = " ") {
133
+ if (!project?.name) return "";
134
+ if (!c.isColorSupported) return `|${project.name}|${suffix}`;
135
+ let background = project.color && c[`bg${capitalize(project.color)}`];
136
+ if (!background) background = labelDefaultColors[project.name.split("").reduce((acc, v, idx) => acc + v.charCodeAt(0) + idx, 0) % labelDefaultColors.length];
137
+ return c.black(background(` ${project.name} `)) + suffix;
138
+ }
139
+ function withLabel(color, label, message) {
140
+ const bgColor = `bg${color.charAt(0).toUpperCase()}${color.slice(1)}`;
141
+ return `${c.bold(c[bgColor](` ${label} `))} ${message ? c[color](message) : ""}`;
142
+ }
143
+ function padSummaryTitle(str) {
144
+ return c.dim(`${str.padStart(11)} `);
145
+ }
146
+ function truncateString(text, maxLength) {
147
+ const plainText = stripVTControlCharacters(text);
148
+ if (plainText.length <= maxLength) return text;
149
+ return `${plainText.slice(0, maxLength - 1)}…`;
150
+ }
151
+ function capitalize(text) {
152
+ return `${text[0].toUpperCase()}${text.slice(1)}`;
153
+ }
154
+ /**
155
+ * Returns the singular or plural form of a word based on the count.
156
+ */
157
+ function noun(count, singular, plural) {
158
+ if (count === 1) return singular;
159
+ return plural;
160
+ }
161
+
162
+ var utils = /*#__PURE__*/Object.freeze({
163
+ __proto__: null,
164
+ benchmarkPass: benchmarkPass,
165
+ countTestErrors: countTestErrors,
166
+ divider: divider,
167
+ errorBanner: errorBanner,
168
+ formatProjectName: formatProjectName,
169
+ formatTestPath: formatTestPath,
170
+ formatTime: formatTime,
171
+ formatTimeString: formatTimeString,
172
+ getStateString: getStateString,
173
+ getStateSymbol: getStateSymbol,
174
+ noun: noun,
175
+ padSummaryTitle: padSummaryTitle,
176
+ pending: pending,
177
+ pointer: pointer,
178
+ renderSnapshotSummary: renderSnapshotSummary,
179
+ separator: separator,
180
+ skipped: skipped,
181
+ suiteFail: suiteFail,
182
+ taskFail: taskFail,
183
+ testPass: testPass,
184
+ todo: todo,
185
+ truncateString: truncateString,
186
+ withLabel: withLabel
187
+ });
188
+
189
+ export { F_POINTER as F, taskFail as a, F_CHECK as b, F_DOWN_RIGHT as c, divider as d, errorBanner as e, formatTimeString as f, formatProjectName as g, getStateSymbol as h, getStateString as i, formatTime as j, countTestErrors as k, F_TREE_NODE_END as l, F_TREE_NODE_MIDDLE as m, noun as n, F_RIGHT as o, padSummaryTitle as p, renderSnapshotSummary as r, separator as s, truncateString as t, utils as u, withLabel as w };
@@ -1,7 +1,7 @@
1
1
  import { fileURLToPath, pathToFileURL } from 'node:url';
2
2
  import vm, { isContext, runInContext } from 'node:vm';
3
3
  import { dirname, basename, extname, normalize, resolve } from 'pathe';
4
- import { l as loadEnvironment, a as listenForErrors, e as emitModuleRunner } from './init.BVxhC4nR.js';
4
+ import { l as loadEnvironment, a as listenForErrors, e as emitModuleRunner } from './init.D98-gwRW.js';
5
5
  import { distDir } from '../path.js';
6
6
  import { createCustomConsole } from './console.3WNpx0tS.js';
7
7
  import fs from 'node:fs';
@@ -11,7 +11,7 @@ import { findNearestPackageData } from '@vitest/utils/resolver';
11
11
  import { dirname as dirname$1 } from 'node:path';
12
12
  import { CSS_LANGS_RE, KNOWN_ASSET_RE } from '@vitest/utils/constants';
13
13
  import { getDefaultRequestStubs } from '../module-evaluator.js';
14
- import { s as startVitestModuleRunner, V as VITEST_VM_CONTEXT_SYMBOL, c as createNodeImportMeta } from './startVitestModuleRunner.C3FXk5Gv.js';
14
+ import { s as startVitestModuleRunner, V as VITEST_VM_CONTEXT_SYMBOL, c as createNodeImportMeta } from './startVitestModuleRunner.bRl2_oI_.js';
15
15
  import { p as provideWorkerState } from './utils.BX5Fg8C4.js';
16
16
 
17
17
  function interopCommonJsModule(interopDefault, mod) {
@@ -1,6 +1,6 @@
1
1
  import { FileSpecification, Task, CancelReason } from '@vitest/runner';
2
2
  import { EvaluatedModules } from 'vite/module-runner';
3
- import { S as SerializedConfig } from './config.d.EJLVE3es.js';
3
+ import { S as SerializedConfig } from './config.d.Cz9kPrQs.js';
4
4
  import { E as Environment } from './environment.d.CrsxCzP1.js';
5
5
  import { R as RuntimeRPC, a as RunnerRPC } from './rpc.d.BFMWpdph.js';
6
6
 
package/dist/cli.js CHANGED
@@ -1,29 +1,11 @@
1
- import { c as createCLI } from './chunks/cac.CHfKU_gf.js';
1
+ import { c as createCLI } from './chunks/cac.DRKYQDPl.js';
2
2
  import '@vitest/utils/helpers';
3
3
  import 'events';
4
4
  import 'pathe';
5
5
  import 'tinyrainbow';
6
- import './chunks/constants.CPYnjOGj.js';
7
- import './chunks/index.DXMFO5MJ.js';
8
- import 'node:fs';
9
- import 'node:perf_hooks';
10
- import '@vitest/runner/utils';
11
- import '@vitest/utils/source-map';
12
6
  import './chunks/env.D4Lgay0q.js';
13
7
  import 'std-env';
14
- import 'node:console';
15
- import 'node:stream';
16
- import 'node:util';
17
- import '@vitest/utils/display';
18
- import 'node:os';
19
- import 'tinyexec';
20
- import './path.js';
21
- import 'node:path';
22
- import 'node:url';
23
- import 'vite';
24
- import '@vitest/utils/offset';
25
- import 'node:fs/promises';
26
- import 'node:module';
8
+ import './chunks/constants.CPYnjOGj.js';
27
9
  import 'node:assert';
28
10
 
29
11
  createCLI().parse();
package/dist/config.cjs CHANGED
@@ -24,14 +24,22 @@ const coverageConfigDefaults = {
24
24
  exclude: [],
25
25
  reportOnFailure: false,
26
26
  reporter: [
27
- ["text", {}],
28
- ["html", {}],
29
- ["clover", {}],
30
- ["json", {}]
27
+ "text",
28
+ "html",
29
+ "clover",
30
+ "json"
31
31
  ],
32
32
  allowExternal: false,
33
33
  excludeAfterRemap: false,
34
- processingConcurrency: Math.min(20, os.availableParallelism?.() ?? os.cpus().length)
34
+ processingConcurrency: Math.min(20, os.availableParallelism?.() ?? os.cpus().length),
35
+ ignoreClassMethods: [],
36
+ skipFull: false,
37
+ watermarks: {
38
+ statements: [50, 80],
39
+ functions: [50, 80],
40
+ branches: [50, 80],
41
+ lines: [50, 80]
42
+ }
35
43
  };
36
44
  const fakeTimersDefaults = {
37
45
  loopLimit: 1e4,
package/dist/config.d.ts CHANGED
@@ -1,9 +1,9 @@
1
1
  import { HookHandler, UserConfig, ConfigEnv } from 'vite';
2
2
  export { ConfigEnv, Plugin, UserConfig as ViteUserConfig, mergeConfig } from 'vite';
3
- import { I as InlineConfig, C as CoverageV8Options, R as ResolvedCoverageOptions, U as UserWorkspaceConfig, b as UserProjectConfigFn, c as UserProjectConfigExport } from './chunks/reporters.d.CZ5E0GCT.js';
4
- export { a as TestProjectConfiguration, d as TestProjectInlineConfiguration, e as TestUserConfig, W as WatcherTriggerPattern } from './chunks/reporters.d.CZ5E0GCT.js';
5
- import { V as VitestPluginContext } from './chunks/plugin.d.Dx0ozo6e.js';
6
- import { F as FakeTimerInstallOpts } from './chunks/config.d.EJLVE3es.js';
3
+ import { I as InlineConfig, C as CoverageOptions, F as FieldsWithDefaultValues, U as UserWorkspaceConfig, b as UserProjectConfigFn, c as UserProjectConfigExport } from './chunks/reporters.d.B0uk8id2.js';
4
+ export { a as TestProjectConfiguration, d as TestProjectInlineConfiguration, e as TestUserConfig, W as WatcherTriggerPattern } from './chunks/reporters.d.B0uk8id2.js';
5
+ import { V as VitestPluginContext } from './chunks/plugin.d.BWbK_Jpw.js';
6
+ import { F as FakeTimerInstallOpts } from './chunks/config.d.Cz9kPrQs.js';
7
7
  export { TestTagDefinition } from '@vitest/runner';
8
8
  import '@vitest/utils';
9
9
  import './chunks/rpc.d.BFMWpdph.js';
@@ -11,8 +11,8 @@ import '@vitest/snapshot';
11
11
  import 'vite/module-runner';
12
12
  import './chunks/traces.d.402V_yFI.js';
13
13
  import 'node:stream';
14
- import './chunks/browser.d.X3SXoOCV.js';
15
- import './chunks/worker.d.B84sVRy0.js';
14
+ import './chunks/browser.d.BMOr_Kmk.js';
15
+ import './chunks/worker.d.BT5j8dyR.js';
16
16
  import './chunks/environment.d.CrsxCzP1.js';
17
17
  import '@vitest/pretty-format';
18
18
  import '@vitest/utils/diff';
@@ -46,7 +46,7 @@ declare const defaultBrowserPort = 63315;
46
46
 
47
47
  declare const defaultInclude: string[];
48
48
  declare const defaultExclude: string[];
49
- declare const coverageConfigDefaults: ResolvedCoverageOptions;
49
+ declare const coverageConfigDefaults: Required<Pick<CoverageOptions, FieldsWithDefaultValues>>;
50
50
  declare const configDefaults: Readonly<{
51
51
  allowOnly: boolean;
52
52
  isolate: boolean;
@@ -73,7 +73,7 @@ declare const configDefaults: Readonly<{
73
73
  css: {
74
74
  include: never[];
75
75
  };
76
- coverage: CoverageV8Options;
76
+ coverage: CoverageOptions;
77
77
  fakeTimers: FakeTimerInstallOpts;
78
78
  maxConcurrency: number;
79
79
  dangerouslyIgnoreUnhandledErrors: boolean;
package/dist/config.js CHANGED
@@ -1,4 +1,4 @@
1
- export { c as configDefaults, a as coverageConfigDefaults, d as defaultExclude, b as defaultInclude } from './chunks/defaults.CdU2lD-q.js';
1
+ export { c as configDefaults, a as coverageConfigDefaults, d as defaultExclude, b as defaultInclude } from './chunks/defaults.9aQKnqFk.js';
2
2
  export { mergeConfig } from 'vite';
3
3
  export { d as defaultBrowserPort } from './chunks/constants.CPYnjOGj.js';
4
4
  import 'node:os';
@@ -1,14 +1,14 @@
1
- import { V as Vitest, R as ResolvedCoverageOptions, aY as CoverageMap, am as ReportContext, T as TestProject } from './chunks/reporters.d.CZ5E0GCT.js';
1
+ import { V as Vitest, at as ResolvedCoverageOptions, aZ as CoverageMap, am as ReportContext, T as TestProject } from './chunks/reporters.d.B0uk8id2.js';
2
2
  import { TransformResult } from 'vite';
3
3
  import { A as AfterSuiteRunMeta } from './chunks/rpc.d.BFMWpdph.js';
4
4
  import '@vitest/runner';
5
5
  import '@vitest/utils';
6
6
  import 'node:stream';
7
- import './chunks/browser.d.X3SXoOCV.js';
7
+ import './chunks/browser.d.BMOr_Kmk.js';
8
8
  import './chunks/traces.d.402V_yFI.js';
9
- import './chunks/worker.d.B84sVRy0.js';
9
+ import './chunks/worker.d.BT5j8dyR.js';
10
10
  import 'vite/module-runner';
11
- import './chunks/config.d.EJLVE3es.js';
11
+ import './chunks/config.d.Cz9kPrQs.js';
12
12
  import '@vitest/pretty-format';
13
13
  import '@vitest/snapshot';
14
14
  import '@vitest/utils/diff';
package/dist/coverage.js CHANGED
@@ -1,4 +1,4 @@
1
- export { B as BaseCoverageProvider } from './chunks/coverage.CJ2HXVIG.js';
1
+ export { B as BaseCoverageProvider } from './chunks/coverage.kqM80boz.js';
2
2
  import 'node:fs';
3
3
  import 'node:module';
4
4
  import 'node:path';
@@ -8,7 +8,7 @@ import 'pathe';
8
8
  import 'picomatch';
9
9
  import 'tinyglobby';
10
10
  import 'tinyrainbow';
11
- import './chunks/defaults.CdU2lD-q.js';
11
+ import './chunks/defaults.9aQKnqFk.js';
12
12
  import 'node:os';
13
13
  import './chunks/env.D4Lgay0q.js';
14
14
  import 'std-env';
package/dist/index.d.ts CHANGED
@@ -1,14 +1,14 @@
1
- import { M as ModuleDefinitionDurationsDiagnostic, U as UntrackedModuleDefinitionDiagnostic, S as SerializedTestSpecification, a as ModuleDefinitionDiagnostic, b as ModuleDefinitionLocation, c as SourceModuleDiagnostic, d as SourceModuleLocations } from './chunks/browser.d.X3SXoOCV.js';
2
- export { B as BrowserTesterOptions } from './chunks/browser.d.X3SXoOCV.js';
1
+ import { M as ModuleDefinitionDurationsDiagnostic, U as UntrackedModuleDefinitionDiagnostic, S as SerializedTestSpecification, a as ModuleDefinitionDiagnostic, b as ModuleDefinitionLocation, c as SourceModuleDiagnostic, d as SourceModuleLocations } from './chunks/browser.d.BMOr_Kmk.js';
2
+ export { B as BrowserTesterOptions } from './chunks/browser.d.BMOr_Kmk.js';
3
3
  import './chunks/global.d.x-ILCfAE.js';
4
4
  import { File, TestAnnotation, TestArtifact, TaskResultPack, TaskEventPack, Test, TaskPopulated } from '@vitest/runner';
5
5
  export { CancelReason, ImportDuration, OnTestFailedHandler, OnTestFinishedHandler, RunMode, Task as RunnerTask, TaskBase as RunnerTaskBase, TaskEventPack as RunnerTaskEventPack, TaskResult as RunnerTaskResult, TaskResultPack as RunnerTaskResultPack, Test as RunnerTestCase, File as RunnerTestFile, Suite as RunnerTestSuite, SuiteAPI, SuiteCollector, SuiteFactory, SuiteOptions, TaskCustomOptions, TaskMeta, TaskState, TestAPI, TestAnnotation, TestAnnotationArtifact, TestArtifact, TestArtifactBase, TestArtifactLocation, TestArtifactRegistry, TestAttachment, TestContext, TestFunction, TestOptions, VitestRunnerConfig as TestRunnerConfig, TestTags, VitestRunner as VitestTestRunner, afterAll, afterEach, aroundAll, aroundEach, beforeAll, beforeEach, describe, it, onTestFailed, onTestFinished, recordArtifact, suite, test } from '@vitest/runner';
6
6
  import { Awaitable } from '@vitest/utils';
7
7
  export { ParsedStack, SerializedError, TestError } from '@vitest/utils';
8
- import { b as BirpcReturn } from './chunks/worker.d.B84sVRy0.js';
9
- export { C as ContextRPC, c as ContextTestEnvironment, T as TestExecutionMethod, W as WorkerGlobalState } from './chunks/worker.d.B84sVRy0.js';
10
- import { S as SerializedConfig, F as FakeTimerInstallOpts, R as RuntimeOptions } from './chunks/config.d.EJLVE3es.js';
11
- export { b as RuntimeConfig, a as SerializedCoverageConfig } from './chunks/config.d.EJLVE3es.js';
8
+ import { b as BirpcReturn } from './chunks/worker.d.BT5j8dyR.js';
9
+ export { C as ContextRPC, c as ContextTestEnvironment, T as TestExecutionMethod, W as WorkerGlobalState } from './chunks/worker.d.BT5j8dyR.js';
10
+ import { S as SerializedConfig, F as FakeTimerInstallOpts, R as RuntimeOptions } from './chunks/config.d.Cz9kPrQs.js';
11
+ export { b as RuntimeConfig, a as SerializedCoverageConfig } from './chunks/config.d.Cz9kPrQs.js';
12
12
  import { U as UserConsoleLog, L as LabelColor, M as ModuleGraphData, P as ProvidedContext } from './chunks/rpc.d.BFMWpdph.js';
13
13
  export { A as AfterSuiteRunMeta, a as RunnerRPC, R as RuntimeRPC } from './chunks/rpc.d.BFMWpdph.js';
14
14
  import { ExpectStatic } from '@vitest/expect';
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
- export { N as BenchmarkRunner, T as TestRunner, a as assert, c as createExpect, g as expect, i as inject, s as should, v as vi, b as vitest } from './chunks/test.CBQUpOM3.js';
2
- export { b as bench } from './chunks/benchmark.D0SlKNbZ.js';
1
+ export { N as BenchmarkRunner, T as TestRunner, a as assert, c as createExpect, g as expect, i as inject, s as should, v as vi, b as vitest } from './chunks/test.p_J6dB8a.js';
2
+ export { b as bench } from './chunks/benchmark.CX_oY03V.js';
3
3
  export { V as EvaluatedModules } from './chunks/evaluatedModules.Dg1zASAC.js';
4
- export { a as assertType } from './chunks/index.Dkvtd-Ku.js';
4
+ export { a as assertType } from './chunks/index.DOa3dzoN.js';
5
5
  export { expectTypeOf } from 'expect-type';
6
6
  export { afterAll, afterEach, aroundAll, aroundEach, beforeAll, beforeEach, describe, it, onTestFailed, onTestFinished, recordArtifact, suite, test } from '@vitest/runner';
7
7
  export { chai } from '@vitest/expect';