vitest 2.1.0-beta.5 → 2.1.0-beta.7

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 (62) hide show
  1. package/LICENSE.md +59 -320
  2. package/dist/browser.d.ts +6 -3
  3. package/dist/browser.js +2 -2
  4. package/dist/chunks/{RandomSequencer.B4M2ux5b.js → RandomSequencer.Bh5-tlNJ.js} +77 -58
  5. package/dist/chunks/{base.BH-FAiX7.js → base.BlXpj3e_.js} +1 -29
  6. package/dist/chunks/{base.BYvKfYzm.js → base.CchlWrnV.js} +2 -4
  7. package/dist/chunks/{cac.DosbLiJg.js → cac.B5XYKv2_.js} +26 -17
  8. package/dist/chunks/{cli-api.D8zgNrBU.js → cli-api.ByZPnilx.js} +7419 -7959
  9. package/dist/chunks/{constants.CaAN7icJ.js → constants.fzPh7AOq.js} +1 -1
  10. package/dist/chunks/{coverage.CqfT4xaf.js → coverage.zlNdAMHK.js} +5 -3
  11. package/dist/chunks/{creator.COdKw_ZN.js → creator.zfBZSJzo.js} +9 -9
  12. package/dist/chunks/{environment.0M5R1SX_.d.ts → environment.C5eAp3K6.d.ts} +1 -1
  13. package/dist/chunks/{execute.DT9BA6zp.js → execute._eQQfgI8.js} +322 -232
  14. package/dist/chunks/{git.ZtkbKc8u.js → git.B5SDxu-n.js} +5 -5
  15. package/dist/chunks/{globals.DRPLtPOv.js → globals.jM7MxN2t.js} +4 -4
  16. package/dist/chunks/{index.CM5UI-4O.js → index.Bn75ITYg.js} +3 -3
  17. package/dist/chunks/index.CPD77dLA.js +133 -0
  18. package/dist/chunks/{index.CxWPpGJz.js → index.CSjyR2-v.js} +2 -2
  19. package/dist/chunks/{index.Dx3f477d.js → index.DpJO1tkB.js} +1110 -1104
  20. package/dist/chunks/{index.CNZXZ9PJ.js → index.xm8OIiKD.js} +1 -1
  21. package/dist/chunks/mocker.cRtM890J.d.ts +17 -0
  22. package/dist/chunks/{reporters.DbwOGCsU.d.ts → reporters.WnPwkmgA.d.ts} +154 -129
  23. package/dist/chunks/{resolveConfig.RHsAM2_Q.js → resolveConfig.-K5hHm0S.js} +56 -34
  24. package/dist/chunks/{runBaseTests.BAhL8UH_.js → runBaseTests.Cztfoflv.js} +7 -7
  25. package/dist/chunks/{setup-common.KBrCO5LJ.js → setup-common.fGBFoQKJ.js} +1 -1
  26. package/dist/chunks/{utils.C3_cBsyn.js → utils.Cn0zI1t3.js} +16 -3
  27. package/dist/chunks/{utils.DO38lwfj.js → utils.Dbnmsfq1.js} +1 -1
  28. package/dist/chunks/{vi.B6QZ938s.js → vi.DGgiNzJE.js} +46 -37
  29. package/dist/chunks/vite.D2yAwzwa.d.ts +11 -0
  30. package/dist/chunks/{vm.kl9T_5ai.js → vm.CPXwWp4C.js} +1 -2
  31. package/dist/chunks/{worker.Cx2xE71X.d.ts → worker.Bws9Zuxu.d.ts} +1 -1
  32. package/dist/chunks/{worker.BANO5ak1.d.ts → worker.CmPmTxgH.d.ts} +2 -14
  33. package/dist/cli.js +3 -3
  34. package/dist/config.cjs +1 -0
  35. package/dist/config.d.ts +70 -2
  36. package/dist/config.js +1 -0
  37. package/dist/coverage.d.ts +4 -3
  38. package/dist/coverage.js +29 -5
  39. package/dist/environments.d.ts +2 -2
  40. package/dist/execute.d.ts +13 -14
  41. package/dist/execute.js +3 -2
  42. package/dist/index.d.ts +23 -16
  43. package/dist/index.js +4 -4
  44. package/dist/mocker.d.ts +1 -0
  45. package/dist/mocker.js +1 -0
  46. package/dist/node.d.ts +27 -9
  47. package/dist/node.js +44 -39
  48. package/dist/reporters.d.ts +2 -2
  49. package/dist/reporters.js +8 -8
  50. package/dist/runners.js +2 -2
  51. package/dist/utils.d.ts +1 -0
  52. package/dist/worker.js +3 -2
  53. package/dist/workers/forks.js +5 -4
  54. package/dist/workers/runVmTests.js +6 -6
  55. package/dist/workers/threads.js +5 -4
  56. package/dist/workers/vmForks.js +4 -4
  57. package/dist/workers/vmThreads.js +4 -4
  58. package/dist/workers.d.ts +4 -16
  59. package/dist/workers.js +6 -5
  60. package/mocker.d.ts +1 -0
  61. package/package.json +22 -17
  62. package/dist/chunks/index.DNUmWFkO.js +0 -319
@@ -9,16 +9,16 @@ import assert from 'node:assert';
9
9
  import v8 from 'node:v8';
10
10
  import { format, inspect } from 'node:util';
11
11
  import c from 'tinyrainbow';
12
- import { e as extraInlineDeps, d as defaultPort, a as defaultBrowserPort, b as defaultInspectPort } from './constants.CaAN7icJ.js';
12
+ import { e as extraInlineDeps, d as defaultPort, a as defaultBrowserPort, b as defaultInspectPort } from './constants.fzPh7AOq.js';
13
13
  import * as nodeos from 'node:os';
14
14
  import nodeos__default from 'node:os';
15
15
  import { i as isWindows } from './env.CmHVDJnw.js';
16
16
  import { isCI, provider } from 'std-env';
17
17
  import { hasFailed } from '@vitest/runner/utils';
18
- import { b as groupBy, A as AggregateErrorPonyfill, a as slash, t as toArray } from './base.BH-FAiX7.js';
18
+ import { g as groupBy, A as AggregateErrorPonyfill, a as slash, t as toArray } from './base.BlXpj3e_.js';
19
19
  import { createDefer } from '@vitest/utils';
20
20
  import crypto, { createHash } from 'node:crypto';
21
- import { w as wrapSerializableConfig, T as Typechecker, R as RandomSequencer, B as BaseSequencer } from './RandomSequencer.B4M2ux5b.js';
21
+ import { w as wrapSerializableConfig, T as Typechecker, R as RandomSequencer, B as BaseSequencer } from './RandomSequencer.Bh5-tlNJ.js';
22
22
  import { g as getDefaultExportFromCjs } from './_commonjsHelpers.BFTU3MAI.js';
23
23
  import require$$0 from 'util';
24
24
  import p from 'path';
@@ -4010,7 +4010,9 @@ function getTransformMode(patterns, filename) {
4010
4010
  }
4011
4011
  async function groupFilesByEnv(files) {
4012
4012
  const filesWithEnv = await Promise.all(
4013
- files.map(async ([project, file]) => {
4013
+ files.map(async (spec) => {
4014
+ const file = spec.moduleId;
4015
+ const project = spec.project.workspaceProject;
4014
4016
  const code = await promises$1.readFile(file, "utf-8");
4015
4017
  let env = code.match(/@(?:vitest|jest)-environment\s+([\w-]+)\b/)?.[1];
4016
4018
  if (!env) {
@@ -4237,16 +4239,18 @@ function createForksPool(ctx, { execArgv, env }) {
4237
4239
  return config;
4238
4240
  };
4239
4241
  const workspaceMap = /* @__PURE__ */ new Map();
4240
- for (const [project, file] of specs) {
4242
+ for (const spec of specs) {
4243
+ const file = spec.moduleId;
4244
+ const project = spec.project.workspaceProject;
4241
4245
  const workspaceFiles = workspaceMap.get(file) ?? [];
4242
4246
  workspaceFiles.push(project);
4243
4247
  workspaceMap.set(file, workspaceFiles);
4244
4248
  }
4245
4249
  const singleFork = specs.filter(
4246
- ([project]) => project.config.poolOptions?.forks?.singleFork
4250
+ (spec) => spec.project.config.poolOptions?.forks?.singleFork
4247
4251
  );
4248
4252
  const multipleForks = specs.filter(
4249
- ([project]) => !project.config.poolOptions?.forks?.singleFork
4253
+ (spec) => !spec.project.config.poolOptions?.forks?.singleFork
4250
4254
  );
4251
4255
  if (multipleForks.length) {
4252
4256
  const filesByEnv = await groupFilesByEnv(multipleForks);
@@ -4439,10 +4443,10 @@ See https://vitest.dev/guide/common-errors.html#failed-to-terminate-worker for t
4439
4443
  workspaceMap.set(file, workspaceFiles);
4440
4444
  }
4441
4445
  const singleThreads = specs.filter(
4442
- ([project]) => project.config.poolOptions?.threads?.singleThread
4446
+ (spec) => spec.project.config.poolOptions?.threads?.singleThread
4443
4447
  );
4444
4448
  const multipleThreads = specs.filter(
4445
- ([project]) => !project.config.poolOptions?.threads?.singleThread
4449
+ (spec) => !spec.project.config.poolOptions?.threads?.singleThread
4446
4450
  );
4447
4451
  if (multipleThreads.length) {
4448
4452
  const filesByEnv = await groupFilesByEnv(multipleThreads);
@@ -4740,7 +4744,7 @@ function getMemoryLimit$1(config) {
4740
4744
 
4741
4745
  function createTypecheckPool(ctx) {
4742
4746
  const promisesMap = /* @__PURE__ */ new WeakMap();
4743
- const rerunTriggered = /* @__PURE__ */ new WeakMap();
4747
+ const rerunTriggered = /* @__PURE__ */ new WeakSet();
4744
4748
  async function onParseEnd(project, { files, sourceErrors }) {
4745
4749
  const checker = project.typechecker;
4746
4750
  await ctx.report("onTaskUpdate", checker.getTestPacks());
@@ -4756,7 +4760,7 @@ function createTypecheckPool(ctx) {
4756
4760
  ctx.state.catchError(error, "Typecheck Error");
4757
4761
  }
4758
4762
  promisesMap.get(project)?.resolve();
4759
- rerunTriggered.set(project, false);
4763
+ rerunTriggered.delete(project);
4760
4764
  if (ctx.config.watch && !ctx.runningPromise) {
4761
4765
  await ctx.report("onFinished", files, []);
4762
4766
  await ctx.report("onWatcherStart", files, [
@@ -4778,7 +4782,7 @@ function createTypecheckPool(ctx) {
4778
4782
  });
4779
4783
  checker.onParseEnd((result) => onParseEnd(project, result));
4780
4784
  checker.onWatcherRerun(async () => {
4781
- rerunTriggered.set(project, true);
4785
+ rerunTriggered.add(project);
4782
4786
  if (!ctx.runningPromise) {
4783
4787
  ctx.state.clearErrors();
4784
4788
  await ctx.report(
@@ -4804,19 +4808,19 @@ function createTypecheckPool(ctx) {
4804
4808
  await checker.start();
4805
4809
  }
4806
4810
  async function collectTests(specs) {
4807
- const specsByProject = groupBy(specs, ([project]) => project.getName());
4811
+ const specsByProject = groupBy(specs, (spec) => spec.project.name);
4808
4812
  for (const name in specsByProject) {
4809
- const project = specsByProject[name][0][0];
4810
- const files = specsByProject[name].map(([_, file]) => file);
4811
- const checker = await createWorkspaceTypechecker(project, files);
4813
+ const project = specsByProject[name][0].project;
4814
+ const files = specsByProject[name].map((spec) => spec.moduleId);
4815
+ const checker = await createWorkspaceTypechecker(project.workspaceProject, files);
4812
4816
  checker.setFiles(files);
4813
4817
  await checker.collectTests();
4814
- ctx.state.collectFiles(project, checker.getTestFiles());
4818
+ ctx.state.collectFiles(project.workspaceProject, checker.getTestFiles());
4815
4819
  await ctx.report("onCollected");
4816
4820
  }
4817
4821
  }
4818
4822
  async function runTests(specs) {
4819
- const specsByProject = groupBy(specs, ([project]) => project.getName());
4823
+ const specsByProject = groupBy(specs, (spec) => spec.project.name);
4820
4824
  const promises = [];
4821
4825
  for (const name in specsByProject) {
4822
4826
  const project = specsByProject[name][0][0];
@@ -4824,7 +4828,7 @@ function createTypecheckPool(ctx) {
4824
4828
  const promise = createDefer();
4825
4829
  const _p = new Promise((resolve) => {
4826
4830
  const _i = setInterval(() => {
4827
- if (!project.typechecker || rerunTriggered.get(project)) {
4831
+ if (!project.typechecker || rerunTriggered.has(project)) {
4828
4832
  resolve(true);
4829
4833
  clearInterval(_i);
4830
4834
  }
@@ -5013,14 +5017,7 @@ const builtinPools = [
5013
5017
  "vmForks",
5014
5018
  "typescript"
5015
5019
  ];
5016
- function getDefaultPoolName(project, file) {
5017
- if (project.config.typecheck.enabled) {
5018
- for (const glob of project.config.typecheck.include) {
5019
- if (mm.isMatch(file, glob, { cwd: project.config.root })) {
5020
- return "typescript";
5021
- }
5022
- }
5023
- }
5020
+ function getDefaultPoolName(project) {
5024
5021
  if (project.config.browser.enabled) {
5025
5022
  return "browser";
5026
5023
  }
@@ -5037,7 +5034,7 @@ function getFilePoolName(project, file) {
5037
5034
  return pool;
5038
5035
  }
5039
5036
  }
5040
- return getDefaultPoolName(project, file);
5037
+ return getDefaultPoolName(project);
5041
5038
  }
5042
5039
  function createPool(ctx) {
5043
5040
  const pools = {
@@ -5122,7 +5119,7 @@ function createPool(ctx) {
5122
5119
  typescript: () => createTypecheckPool(ctx)
5123
5120
  };
5124
5121
  for (const spec of files) {
5125
- const pool = getFilePoolName(spec[0], spec[1]);
5122
+ const { pool } = spec[2];
5126
5123
  filesByPool[pool] ??= [];
5127
5124
  filesByPool[pool].push(spec);
5128
5125
  }
@@ -7337,6 +7334,7 @@ const coverageConfigDefaults = {
7337
7334
  ".marko"
7338
7335
  ],
7339
7336
  allowExternal: false,
7337
+ excludeAfterRemap: false,
7340
7338
  ignoreEmptyLines: true,
7341
7339
  processingConcurrency: Math.min(
7342
7340
  20,
@@ -7669,10 +7667,34 @@ function resolveConfig(mode, options, viteConfig, logger) {
7669
7667
  );
7670
7668
  }
7671
7669
  }
7672
- if (resolved.coverage.provider === "v8" && resolved.coverage.enabled && isBrowserEnabled(resolved)) {
7673
- throw new Error(
7674
- "@vitest/coverage-v8 does not work with --browser. Use @vitest/coverage-istanbul instead"
7675
- );
7670
+ if (resolved.browser.enabled && !(resolved.browser.provider === "playwright" && resolved.browser.name === "chromium")) {
7671
+ const browserConfig = { browser: { provider: resolved.browser.provider, name: resolved.browser.name } };
7672
+ if (resolved.coverage.enabled && resolved.coverage.provider === "v8") {
7673
+ throw new Error(
7674
+ `@vitest/coverage-v8 does not work with
7675
+ ${JSON.stringify(browserConfig, null, 2)}
7676
+
7677
+ Use either:
7678
+ ${JSON.stringify({ browser: { provider: "playwright", name: "chromium" } }, null, 2)}
7679
+
7680
+ ...or change your coverage provider to:
7681
+ ${JSON.stringify({ coverage: { provider: "istanbul" } }, null, 2)}
7682
+ `
7683
+ );
7684
+ }
7685
+ if (resolved.inspect || resolved.inspectBrk) {
7686
+ const inspectOption = `--inspect${resolved.inspectBrk ? "-brk" : ""}`;
7687
+ throw new Error(
7688
+ `${inspectOption} does not work with
7689
+ ${JSON.stringify(browserConfig, null, 2)}
7690
+
7691
+ Use either:
7692
+ ${JSON.stringify({ browser: { provider: "playwright", name: "chromium" } }, null, 2)}
7693
+
7694
+ ...or disable ${inspectOption}
7695
+ `
7696
+ );
7697
+ }
7676
7698
  }
7677
7699
  resolved.coverage.reporter = resolveCoverageReporters(resolved.coverage.reporter);
7678
7700
  if (resolved.coverage.enabled && resolved.coverage.reportsDirectory) {
@@ -8118,4 +8140,4 @@ function resolveCoverageReporters(configReporters) {
8118
8140
  return resolvedReporters;
8119
8141
  }
8120
8142
 
8121
- export { VitestCache as V, resolveConfig as a, resolveCoverageReporters as b, createMethodsRPC as c, braces_1 as d, configDefaults as e, isPackageExists as f, getFilePoolName as g, createPool as h, isBrowserEnabled as i, coverageConfigDefaults as j, mm as m, picomatch$1 as p, resolveApiServerConfig as r, utils$4 as u };
8143
+ export { VitestCache as V, resolveApiServerConfig as a, resolveConfig as b, createMethodsRPC as c, configDefaults as d, isPackageExists as e, createPool as f, getFilePoolName as g, coverageConfigDefaults as h, isBrowserEnabled as i, mm as m, resolveCoverageReporters as r };
@@ -5,16 +5,16 @@ import '@vitest/runner/utils';
5
5
  import { getSafeTimers } from '@vitest/utils';
6
6
  import { g as getWorkerState } from './utils.Ck2hJTRs.js';
7
7
  import './env.CmHVDJnw.js';
8
- import { a as globalExpect, r as resetModules, v as vi } from './vi.B6QZ938s.js';
9
- import { a as startCoverageInsideWorker, s as stopCoverageInsideWorker } from './coverage.CqfT4xaf.js';
10
- import { a as resolveSnapshotEnvironment, s as setupChaiConfig, r as resolveTestRunner } from './index.CxWPpGJz.js';
8
+ import { a as globalExpect, r as resetModules, v as vi } from './vi.DGgiNzJE.js';
9
+ import { a as startCoverageInsideWorker, s as stopCoverageInsideWorker } from './coverage.zlNdAMHK.js';
10
+ import { a as resolveSnapshotEnvironment, s as setupChaiConfig, r as resolveTestRunner } from './index.CSjyR2-v.js';
11
11
  import { createRequire } from 'node:module';
12
12
  import util from 'node:util';
13
13
  import timers from 'node:timers';
14
14
  import { installSourcemapsSupport } from 'vite-node/source-map';
15
15
  import { KNOWN_ASSET_TYPES } from 'vite-node/constants';
16
- import { V as VitestIndex } from './index.CNZXZ9PJ.js';
17
- import { s as setupCommonEnv } from './setup-common.KBrCO5LJ.js';
16
+ import { V as VitestIndex } from './index.xm8OIiKD.js';
17
+ import { s as setupCommonEnv } from './setup-common.fGBFoQKJ.js';
18
18
  import { c as closeInspector } from './inspector.70d6emsh.js';
19
19
  import 'std-env';
20
20
  import 'chai';
@@ -24,7 +24,7 @@ import '@vitest/snapshot';
24
24
  import '@vitest/utils/error';
25
25
  import './tasks.BZnCS9aT.js';
26
26
  import '@vitest/utils/source-map';
27
- import './base.BH-FAiX7.js';
27
+ import './base.BlXpj3e_.js';
28
28
  import './date.W2xKR2qe.js';
29
29
  import '@vitest/spy';
30
30
  import '../path.js';
@@ -122,7 +122,7 @@ async function run(method, files, config, environment, executor) {
122
122
  const isIsolatedThreads = config.pool === "threads" && (config.poolOptions?.threads?.isolate ?? true);
123
123
  const isIsolatedForks = config.pool === "forks" && (config.poolOptions?.forks?.isolate ?? true);
124
124
  if (isIsolatedThreads || isIsolatedForks) {
125
- workerState.mockMap.clear();
125
+ executor.mocker.reset();
126
126
  resetModules(workerState.moduleCache, true);
127
127
  }
128
128
  workerState.filepath = file;
@@ -13,7 +13,7 @@ async function setupCommonEnv(config) {
13
13
  globalSetup = true;
14
14
  setSafeTimers();
15
15
  if (config.globals) {
16
- (await import('./globals.DRPLtPOv.js')).registerApiGlobally();
16
+ (await import('./globals.jM7MxN2t.js')).registerApiGlobally();
17
17
  }
18
18
  }
19
19
  function setupDefines(defines) {
@@ -3,6 +3,8 @@ import { parseRegexp } from '@vitest/utils';
3
3
  const REGEXP_WRAP_PREFIX = "$$vitest:";
4
4
  const processSend = process.send?.bind(process);
5
5
  const processOn = process.on?.bind(process);
6
+ const processOff = process.off?.bind(process);
7
+ const dispose = [];
6
8
  function createThreadsRpcOptions({
7
9
  port
8
10
  }) {
@@ -15,6 +17,15 @@ function createThreadsRpcOptions({
15
17
  }
16
18
  };
17
19
  }
20
+ function disposeInternalListeners() {
21
+ for (const fn of dispose) {
22
+ try {
23
+ fn();
24
+ } catch {
25
+ }
26
+ }
27
+ dispose.length = 0;
28
+ }
18
29
  function createForksRpcOptions(nodeV8) {
19
30
  return {
20
31
  serialize: nodeV8.serialize,
@@ -23,12 +34,14 @@ function createForksRpcOptions(nodeV8) {
23
34
  processSend(v);
24
35
  },
25
36
  on(fn) {
26
- processOn("message", (message, ...extras) => {
37
+ const handler = (message, ...extras) => {
27
38
  if (message?.__tinypool_worker_message__) {
28
39
  return;
29
40
  }
30
41
  return fn(message, ...extras);
31
- });
42
+ };
43
+ processOn("message", handler);
44
+ dispose.push(() => processOff("message", handler));
32
45
  }
33
46
  };
34
47
  }
@@ -52,4 +65,4 @@ function unwrapSerializableConfig(config) {
52
65
  return config;
53
66
  }
54
67
 
55
- export { createThreadsRpcOptions as a, createForksRpcOptions as c, unwrapSerializableConfig as u };
68
+ export { createThreadsRpcOptions as a, createForksRpcOptions as c, disposeInternalListeners as d, unwrapSerializableConfig as u };
@@ -1,6 +1,6 @@
1
1
  import { isAbsolute, relative, dirname, basename } from 'pathe';
2
2
  import c from 'tinyrainbow';
3
- import { a as slash } from './base.BH-FAiX7.js';
3
+ import { a as slash } from './base.BlXpj3e_.js';
4
4
 
5
5
  const F_RIGHT = "\u2192";
6
6
  const F_DOWN = "\u2193";
@@ -11,7 +11,7 @@ import { getSafeTimers, assertTypes, createSimpleStackTrace } from '@vitest/util
11
11
  import 'pathe';
12
12
  import './env.CmHVDJnw.js';
13
13
  import { parseSingleStack } from '@vitest/utils/source-map';
14
- import { i as isChildProcess } from './base.BH-FAiX7.js';
14
+ import { i as isChildProcess } from './base.BlXpj3e_.js';
15
15
  import { R as RealDate, r as resetDate, m as mockDate } from './date.W2xKR2qe.js';
16
16
  import { spyOn, fn, isMockFunction, mocks } from '@vitest/spy';
17
17
 
@@ -191,16 +191,16 @@ function getError(expected, promise) {
191
191
  }
192
192
  throw new Error("snapshot function didn't throw");
193
193
  }
194
- const SnapshotPlugin = (chai, utils) => {
195
- const getTestNames = (test) => {
196
- if (!test) {
197
- return {};
198
- }
199
- return {
200
- filepath: test.file.filepath,
201
- name: getNames(test).slice(1).join(" > ")
202
- };
194
+ function getTestNames(test) {
195
+ if (!test) {
196
+ return {};
197
+ }
198
+ return {
199
+ filepath: test.file.filepath,
200
+ name: getNames(test).slice(1).join(" > ")
203
201
  };
202
+ }
203
+ const SnapshotPlugin = (chai, utils) => {
204
204
  for (const key of ["matchSnapshot", "toMatchSnapshot"]) {
205
205
  utils.addMethod(
206
206
  chai.Assertion.prototype,
@@ -3228,6 +3228,11 @@ class FakeTimers {
3228
3228
  await this._clock.tickAsync(msToRun);
3229
3229
  }
3230
3230
  }
3231
+ advanceTimersToNextFrame() {
3232
+ if (this._checkFakeTimers()) {
3233
+ this._clock.runToFrame();
3234
+ }
3235
+ }
3231
3236
  runAllTicks() {
3232
3237
  if (this._checkFakeTimers()) {
3233
3238
  this._clock.runMicrotasks();
@@ -3464,18 +3469,6 @@ function waitUntil(callback, options = {}) {
3464
3469
  function createVitest() {
3465
3470
  let _mockedDate = null;
3466
3471
  let _config = null;
3467
- function _mocker() {
3468
- return typeof __vitest_mocker__ !== "undefined" ? __vitest_mocker__ : new Proxy(
3469
- {},
3470
- {
3471
- get(_, name) {
3472
- throw new Error(
3473
- `Vitest mocker was not initialized in this environment. vi.${String(name)}() is forbidden.`
3474
- );
3475
- }
3476
- }
3477
- );
3478
- }
3479
3472
  const workerState = getWorkerState();
3480
3473
  let _timers;
3481
3474
  const timers = () => _timers ||= new FakeTimers({
@@ -3485,15 +3478,6 @@ function createVitest() {
3485
3478
  const _stubsGlobal = /* @__PURE__ */ new Map();
3486
3479
  const _stubsEnv = /* @__PURE__ */ new Map();
3487
3480
  const _envBooleans = ["PROD", "DEV", "SSR"];
3488
- const getImporter = (name) => {
3489
- const stackTrace = createSimpleStackTrace({ stackTraceLimit: 5 });
3490
- const stackArray = stackTrace.split("\n");
3491
- const importerStackIndex = stackArray.findIndex((stack2) => {
3492
- return stack2.includes(` at Object.${name}`) || stack2.includes(`${name}@`);
3493
- });
3494
- const stack = parseSingleStack(stackArray[importerStackIndex + 1]);
3495
- return stack?.file || "";
3496
- };
3497
3481
  const utils = {
3498
3482
  useFakeTimers(config) {
3499
3483
  if (isChildProcess()) {
@@ -3555,6 +3539,10 @@ function createVitest() {
3555
3539
  await timers().advanceTimersToNextTimerAsync();
3556
3540
  return utils;
3557
3541
  },
3542
+ advanceTimersToNextFrame() {
3543
+ timers().advanceTimersToNextFrame();
3544
+ return utils;
3545
+ },
3558
3546
  getTimerCount() {
3559
3547
  return timers().getTimerCount();
3560
3548
  },
@@ -3593,14 +3581,13 @@ function createVitest() {
3593
3581
  _mocker().queueMock(
3594
3582
  path,
3595
3583
  importer,
3596
- factory ? () => factory(
3584
+ typeof factory === "function" ? () => factory(
3597
3585
  () => _mocker().importActual(
3598
3586
  path,
3599
3587
  importer,
3600
3588
  _mocker().getMockContext().callstack
3601
3589
  )
3602
- ) : void 0,
3603
- true
3590
+ ) : factory
3604
3591
  );
3605
3592
  },
3606
3593
  unmock(path) {
@@ -3621,14 +3608,13 @@ function createVitest() {
3621
3608
  _mocker().queueMock(
3622
3609
  path,
3623
3610
  importer,
3624
- factory ? () => factory(
3611
+ typeof factory === "function" ? () => factory(
3625
3612
  () => _mocker().importActual(
3626
3613
  path,
3627
3614
  importer,
3628
3615
  _mocker().getMockContext().callstack
3629
3616
  )
3630
- ) : void 0,
3631
- false
3617
+ ) : factory
3632
3618
  );
3633
3619
  },
3634
3620
  doUnmock(path) {
@@ -3689,6 +3675,8 @@ function createVitest() {
3689
3675
  }
3690
3676
  if (_envBooleans.includes(name)) {
3691
3677
  process.env[name] = value ? "1" : "";
3678
+ } else if (value === void 0) {
3679
+ delete process.env[name];
3692
3680
  } else {
3693
3681
  process.env[name] = String(value);
3694
3682
  }
@@ -3739,5 +3727,26 @@ function createVitest() {
3739
3727
  }
3740
3728
  const vitest = createVitest();
3741
3729
  const vi = vitest;
3730
+ function _mocker() {
3731
+ return typeof __vitest_mocker__ !== "undefined" ? __vitest_mocker__ : new Proxy(
3732
+ {},
3733
+ {
3734
+ get(_, name) {
3735
+ throw new Error(
3736
+ `Vitest mocker was not initialized in this environment. vi.${String(name)}() is forbidden.`
3737
+ );
3738
+ }
3739
+ }
3740
+ );
3741
+ }
3742
+ function getImporter(name) {
3743
+ const stackTrace = createSimpleStackTrace({ stackTraceLimit: 5 });
3744
+ const stackArray = stackTrace.split("\n");
3745
+ const importerStackIndex = stackArray.findIndex((stack2) => {
3746
+ return stack2.includes(` at Object.${name}`) || stack2.includes(`${name}@`);
3747
+ });
3748
+ const stack = parseSingleStack(stackArray[importerStackIndex + 1]);
3749
+ return stack?.file || "";
3750
+ }
3742
3751
 
3743
3752
  export { globalExpect as a, vitest as b, createExpect as c, getSnapshotClient as g, resetModules as r, vi as v };
@@ -0,0 +1,11 @@
1
+ import { I as InlineConfig } from './reporters.WnPwkmgA.js';
2
+
3
+ type VitestInlineConfig = InlineConfig;
4
+ declare module 'vite' {
5
+ interface UserConfig {
6
+ /**
7
+ * Options for Vitest
8
+ */
9
+ test?: VitestInlineConfig;
10
+ }
11
+ }
@@ -2,7 +2,7 @@ import vm, { isContext } from 'node:vm';
2
2
  import { fileURLToPath, pathToFileURL } from 'node:url';
3
3
  import { dirname, basename, extname, normalize, join, resolve } from 'pathe';
4
4
  import { createCustomConsole } from './console.DI3gHgtH.js';
5
- import { g as getDefaultRequestStubs, s as startVitestExecutor } from './execute.DT9BA6zp.js';
5
+ import { g as getDefaultRequestStubs, s as startVitestExecutor } from './execute._eQQfgI8.js';
6
6
  import { distDir } from '../path.js';
7
7
  import { dirname as dirname$1 } from 'node:path';
8
8
  import fs from 'node:fs';
@@ -822,7 +822,6 @@ async function runVmTests(method, state) {
822
822
  const executor = await startVitestExecutor({
823
823
  context,
824
824
  moduleCache: state.moduleCache,
825
- mockMap: state.mockMap,
826
825
  state,
827
826
  externalModulesExecutor,
828
827
  requestStubs: stubs
@@ -1,5 +1,5 @@
1
1
  import { MessagePort } from 'node:worker_threads';
2
- import { C as ContextRPC } from './worker.BANO5ak1.js';
2
+ import { C as ContextRPC } from './worker.CmPmTxgH.js';
3
3
 
4
4
  interface WorkerContext extends ContextRPC {
5
5
  port: MessagePort;
@@ -2,18 +2,7 @@ import { FetchResult, ViteNodeResolveId, RawSourceMap, ModuleCacheMap } from 'vi
2
2
  import { File, TaskResultPack, CancelReason, Task } from '@vitest/runner';
3
3
  import { S as SerializedConfig } from './config.CHuotKvS.js';
4
4
  import { SnapshotResult } from '@vitest/snapshot';
5
- import { T as TransformMode, U as UserConsoleLog, A as AfterSuiteRunMeta, E as Environment } from './environment.0M5R1SX_.js';
6
-
7
- type MockFactoryWithHelper<M = unknown> = (importOriginal: <T extends M>() => Promise<T>) => any;
8
- type MockFactory = () => any;
9
- type MockMap = Map<string, Record<string, string | null | MockFactory>>;
10
- interface PendingSuiteMock {
11
- id: string;
12
- importer: string;
13
- type: 'mock' | 'unmock';
14
- throwIfCached: boolean;
15
- factory?: MockFactory;
16
- }
5
+ import { T as TransformMode, U as UserConsoleLog, A as AfterSuiteRunMeta, E as Environment } from './environment.C5eAp3K6.js';
17
6
 
18
7
  interface RuntimeRPC {
19
8
  fetch: (id: string, transformMode: TransformMode) => Promise<{
@@ -133,7 +122,6 @@ interface WorkerGlobalState {
133
122
  environmentTeardownRun?: boolean;
134
123
  onCancel: Promise<CancelReason>;
135
124
  moduleCache: ModuleCacheMap;
136
- mockMap: MockMap;
137
125
  providedContext: Record<string, any>;
138
126
  durations: {
139
127
  environment: number;
@@ -141,4 +129,4 @@ interface WorkerGlobalState {
141
129
  };
142
130
  }
143
131
 
144
- export type { BirpcOptions as B, ContextRPC as C, MockFactoryWithHelper as M, PendingSuiteMock as P, RuntimeRPC as R, WorkerGlobalState as W, BirpcReturn as a, RunnerRPC as b, ResolveIdFunction as c, WorkerRPC as d, ContextTestEnvironment as e, MockFactory as f, MockMap as g };
132
+ export type { BirpcOptions as B, ContextRPC as C, RuntimeRPC as R, WorkerGlobalState as W, BirpcReturn as a, RunnerRPC as b, ResolveIdFunction as c, WorkerRPC as d, ContextTestEnvironment as e };
package/dist/cli.js CHANGED
@@ -1,9 +1,9 @@
1
- import { c as createCLI } from './chunks/cac.DosbLiJg.js';
1
+ import { c as createCLI } from './chunks/cac.B5XYKv2_.js';
2
2
  import 'pathe';
3
3
  import 'events';
4
4
  import 'tinyrainbow';
5
- import './chunks/base.BH-FAiX7.js';
5
+ import './chunks/base.BlXpj3e_.js';
6
6
  import '@vitest/utils';
7
- import './chunks/constants.CaAN7icJ.js';
7
+ import './chunks/constants.fzPh7AOq.js';
8
8
 
9
9
  createCLI().parse();
package/dist/config.cjs CHANGED
@@ -71,6 +71,7 @@ const coverageConfigDefaults = {
71
71
  ".marko"
72
72
  ],
73
73
  allowExternal: false,
74
+ excludeAfterRemap: false,
74
75
  ignoreEmptyLines: true,
75
76
  processingConcurrency: Math.min(
76
77
  20,
package/dist/config.d.ts CHANGED
@@ -1,12 +1,14 @@
1
- export { ap as UserConfigExport, ao as UserConfigFn, am as UserConfigFnObject, an as UserConfigFnPromise, ar as UserProjectConfigExport, aq as UserProjectConfigFn, z as UserWorkspaceConfig, aw as configDefaults, az as coverageConfigDefaults, av as defaultBrowserPort, ay as defaultExclude, ax as defaultInclude, as as defineConfig, at as defineProject, au as defineWorkspace, aA as extraInlineDeps } from './chunks/reporters.DbwOGCsU.js';
1
+ import './chunks/vite.D2yAwzwa.js';
2
+ import { ConfigEnv, UserConfig } from 'vite';
2
3
  export { ConfigEnv, Plugin, UserConfig, mergeConfig } from 'vite';
4
+ import { R as ResolvedCoverageOptions, b as CoverageV8Options, U as UserWorkspaceConfig, c as UserProjectConfigFn, d as UserProjectConfigExport, W as WorkspaceProjectConfiguration } from './chunks/reporters.WnPwkmgA.js';
3
5
  import '@vitest/runner';
4
6
  import '@vitest/pretty-format';
5
7
  import './chunks/config.CHuotKvS.js';
6
8
  import '@vitest/snapshot';
7
9
  import '@vitest/snapshot/environment';
8
10
  import 'vite-node';
9
- import './chunks/environment.0M5R1SX_.js';
11
+ import './chunks/environment.C5eAp3K6.js';
10
12
  import 'node:stream';
11
13
  import 'vite-node/client';
12
14
  import '@vitest/snapshot/manager';
@@ -18,3 +20,69 @@ import 'chai';
18
20
  import './chunks/benchmark.puBFxyfE.js';
19
21
  import '@vitest/runner/utils';
20
22
  import 'tinybench';
23
+
24
+ declare const defaultBrowserPort = 63315;
25
+ declare const extraInlineDeps: RegExp[];
26
+
27
+ declare const defaultInclude: string[];
28
+ declare const defaultExclude: string[];
29
+ declare const coverageConfigDefaults: ResolvedCoverageOptions;
30
+ declare const configDefaults: Readonly<{
31
+ allowOnly: boolean;
32
+ isolate: true;
33
+ watch: boolean;
34
+ globals: false;
35
+ environment: "node";
36
+ pool: "forks";
37
+ clearMocks: false;
38
+ restoreMocks: false;
39
+ mockReset: false;
40
+ unstubGlobals: false;
41
+ unstubEnvs: false;
42
+ include: string[];
43
+ exclude: string[];
44
+ teardownTimeout: number;
45
+ forceRerunTriggers: string[];
46
+ update: false;
47
+ reporters: never[];
48
+ silent: false;
49
+ hideSkippedTests: false;
50
+ api: false;
51
+ ui: false;
52
+ uiBase: string;
53
+ open: boolean;
54
+ css: {
55
+ include: never[];
56
+ };
57
+ coverage: CoverageV8Options;
58
+ fakeTimers: {
59
+ loopLimit: number;
60
+ shouldClearNativeTimers: true;
61
+ toFake: ("setTimeout" | "setInterval" | "clearInterval" | "clearTimeout" | "setImmediate" | "clearImmediate" | "Date")[];
62
+ };
63
+ maxConcurrency: number;
64
+ dangerouslyIgnoreUnhandledErrors: false;
65
+ typecheck: {
66
+ checker: "tsc";
67
+ include: string[];
68
+ exclude: string[];
69
+ };
70
+ slowTestThreshold: number;
71
+ disableConsoleIntercept: false;
72
+ }>;
73
+
74
+ type UserConfigFnObject = (env: ConfigEnv) => UserConfig;
75
+ type UserConfigFnPromise = (env: ConfigEnv) => Promise<UserConfig>;
76
+ type UserConfigFn = (env: ConfigEnv) => UserConfig | Promise<UserConfig>;
77
+ type UserConfigExport = UserConfig | Promise<UserConfig> | UserConfigFnObject | UserConfigFnPromise | UserConfigFn;
78
+ declare function defineConfig(config: UserConfig): UserConfig;
79
+ declare function defineConfig(config: Promise<UserConfig>): Promise<UserConfig>;
80
+ declare function defineConfig(config: UserConfigFnObject): UserConfigFnObject;
81
+ declare function defineConfig(config: UserConfigExport): UserConfigExport;
82
+ declare function defineProject(config: UserWorkspaceConfig): UserWorkspaceConfig;
83
+ declare function defineProject(config: Promise<UserWorkspaceConfig>): Promise<UserWorkspaceConfig>;
84
+ declare function defineProject(config: UserProjectConfigFn): UserProjectConfigFn;
85
+ declare function defineProject(config: UserProjectConfigExport): UserProjectConfigExport;
86
+ declare function defineWorkspace(config: WorkspaceProjectConfiguration[]): WorkspaceProjectConfiguration[];
87
+
88
+ export { type UserConfigExport, type UserConfigFn, type UserConfigFnObject, type UserConfigFnPromise, UserProjectConfigExport, UserProjectConfigFn, UserWorkspaceConfig, WorkspaceProjectConfiguration, configDefaults, coverageConfigDefaults, defaultBrowserPort, defaultExclude, defaultInclude, defineConfig, defineProject, defineWorkspace, extraInlineDeps };
package/dist/config.js CHANGED
@@ -69,6 +69,7 @@ const coverageConfigDefaults = {
69
69
  ".marko"
70
70
  ],
71
71
  allowExternal: false,
72
+ excludeAfterRemap: false,
72
73
  ignoreEmptyLines: true,
73
74
  processingConcurrency: Math.min(
74
75
  20,