vitest 3.2.0-beta.2 → 3.2.0-beta.3

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 (67) hide show
  1. package/dist/browser.d.ts +3 -3
  2. package/dist/browser.js +1 -1
  3. package/dist/chunks/{base.DwtwORaC.js → base.D4119yLM.js} +4 -3
  4. package/dist/chunks/{benchmark.BoF7jW0Q.js → benchmark.Cf_PACH1.js} +1 -1
  5. package/dist/chunks/{cac.I9MLYfT-.js → cac.DWaWHIIE.js} +18 -15
  6. package/dist/chunks/{cli-api.d6IK1pnk.js → cli-api.CnmEXkxs.js} +250 -49
  7. package/dist/chunks/{config.d.UqE-KR0o.d.ts → config.d.D2ROskhv.d.ts} +2 -0
  8. package/dist/chunks/{console.K1NMVOSc.js → console.Cwr-MFPV.js} +3 -2
  9. package/dist/chunks/{constants.BZZyIeIE.js → constants.DnKduX2e.js} +1 -0
  10. package/dist/chunks/{coverage.OGU09Jbh.js → coverage.C73DaDgS.js} +116 -12
  11. package/dist/chunks/{creator.DGAdZ4Hj.js → creator.C8WKy2eW.js} +10 -7
  12. package/dist/chunks/{date.CDOsz-HY.js → date.ByMsSlOr.js} +25 -0
  13. package/dist/chunks/{defaults.DSxsTG0h.js → defaults.DpVH7vbg.js} +1 -0
  14. package/dist/chunks/{environment.d.D8YDy2v5.d.ts → environment.d.cL3nLXbE.d.ts} +1 -0
  15. package/dist/chunks/{execute.JlGHLJZT.js → execute.B3q-2LPV.js} +25 -0
  16. package/dist/chunks/{global.d.BPa1eL3O.d.ts → global.d.BNLIi6yo.d.ts} +3 -1
  17. package/dist/chunks/{globals.CpxW8ccg.js → globals.CI21aWXF.js} +7 -6
  18. package/dist/chunks/{index.DFXFpH3w.js → index.2jgTs_Q5.js} +19 -1
  19. package/dist/chunks/{index.CV36oG_L.js → index.Bter3jj9.js} +83 -16
  20. package/dist/chunks/{index.DswW_LEs.js → index.CbT4iuwc.js} +7 -4
  21. package/dist/chunks/index.D3XRDfWc.js +213 -0
  22. package/dist/chunks/{index.CfXMNXHg.js → index.DNgLEKsQ.js} +4 -2
  23. package/dist/chunks/{index.CmC5OK9L.js → index.JOzufsrU.js} +2 -1
  24. package/dist/chunks/{inspector.DbDkSkFn.js → inspector.BFsh5KO0.js} +3 -0
  25. package/dist/chunks/{node.3xsWotC9.js → node.Be-ntJnD.js} +1 -1
  26. package/dist/chunks/{reporters.d.CLC9rhKy.d.ts → reporters.d.Bt4IGtsa.d.ts} +24 -6
  27. package/dist/chunks/{rpc.D9_013TY.js → rpc.BKExFSRG.js} +2 -1
  28. package/dist/chunks/{runBaseTests.Dn2vyej_.js → runBaseTests.B_M1TTsK.js} +19 -10
  29. package/dist/chunks/{setup-common.CYo3Y0dD.js → setup-common.CF-O-dZX.js} +2 -1
  30. package/dist/chunks/{typechecker.DnTrplSJ.js → typechecker.BgzF-6iO.js} +78 -21
  31. package/dist/chunks/{utils.CgTj3MsC.js → utils.BlI4TC7Y.js} +1 -0
  32. package/dist/chunks/{utils.BfxieIyZ.js → utils.DPCq3gzW.js} +3 -0
  33. package/dist/chunks/{vi.BFR5YIgu.js → vi.pkoYCV6A.js} +25 -2
  34. package/dist/chunks/{vite.d.CBZ3M_ru.d.ts → vite.d.B-Kx3KCF.d.ts} +3 -1
  35. package/dist/chunks/{vm.C1HHjtNS.js → vm.DPYem2so.js} +72 -4
  36. package/dist/chunks/{worker.d.CoCI7hzP.d.ts → worker.d.BKbBp2ga.d.ts} +2 -2
  37. package/dist/chunks/{worker.d.D5Xdi-Zr.d.ts → worker.d.Bl1O4kuf.d.ts} +1 -1
  38. package/dist/cli.js +4 -4
  39. package/dist/config.cjs +2 -0
  40. package/dist/config.d.ts +7 -6
  41. package/dist/config.js +2 -2
  42. package/dist/coverage.d.ts +4 -4
  43. package/dist/coverage.js +5 -5
  44. package/dist/environments.d.ts +6 -2
  45. package/dist/environments.js +1 -1
  46. package/dist/execute.d.ts +9 -3
  47. package/dist/execute.js +1 -1
  48. package/dist/index.d.ts +24 -12
  49. package/dist/index.js +5 -5
  50. package/dist/node.d.ts +18 -10
  51. package/dist/node.js +14 -12
  52. package/dist/reporters.d.ts +4 -4
  53. package/dist/reporters.js +3 -3
  54. package/dist/runners.d.ts +1 -1
  55. package/dist/runners.js +13 -5
  56. package/dist/snapshot.js +2 -2
  57. package/dist/suite.js +2 -2
  58. package/dist/worker.js +9 -5
  59. package/dist/workers/forks.js +6 -4
  60. package/dist/workers/runVmTests.js +14 -9
  61. package/dist/workers/threads.js +4 -4
  62. package/dist/workers/vmForks.js +6 -6
  63. package/dist/workers/vmThreads.js +6 -6
  64. package/dist/workers.d.ts +4 -4
  65. package/dist/workers.js +10 -10
  66. package/package.json +18 -18
  67. package/dist/chunks/index.CK1YOQaa.js +0 -143
package/dist/worker.js CHANGED
@@ -4,11 +4,11 @@ import { workerId } from 'tinypool';
4
4
  import { ViteNodeRunner, ModuleCacheMap } from 'vite-node/client';
5
5
  import { readFileSync } from 'node:fs';
6
6
  import { resolve, normalize } from 'pathe';
7
- import { e as environments } from './chunks/index.DFXFpH3w.js';
8
- import { s as setupInspect } from './chunks/inspector.DbDkSkFn.js';
9
- import { c as createRuntimeRpc, a as rpcDone } from './chunks/rpc.D9_013TY.js';
10
- import { i as isChildProcess, s as setProcessTitle } from './chunks/utils.CgTj3MsC.js';
11
- import { d as disposeInternalListeners } from './chunks/utils.BfxieIyZ.js';
7
+ import { e as environments } from './chunks/index.2jgTs_Q5.js';
8
+ import { s as setupInspect } from './chunks/inspector.BFsh5KO0.js';
9
+ import { c as createRuntimeRpc, a as rpcDone } from './chunks/rpc.BKExFSRG.js';
10
+ import { i as isChildProcess, s as setProcessTitle } from './chunks/utils.BlI4TC7Y.js';
11
+ import { d as disposeInternalListeners } from './chunks/utils.DPCq3gzW.js';
12
12
  import 'node:console';
13
13
  import 'node:module';
14
14
  import '@vitest/utils';
@@ -59,11 +59,13 @@ if (isChildProcess()) {
59
59
  setProcessTitle(`vitest ${workerId}`);
60
60
  const isProfiling = process.execArgv.some((execArg) => execArg.startsWith("--prof") || execArg.startsWith("--cpu-prof") || execArg.startsWith("--heap-prof") || execArg.startsWith("--diagnostic-dir"));
61
61
  if (isProfiling) {
62
+ // Work-around for nodejs/node#55094
62
63
  process.on("SIGTERM", () => {
63
64
  process.exit();
64
65
  });
65
66
  }
66
67
  }
68
+ // this is what every pool executes when running tests
67
69
  async function execute(method, ctx) {
68
70
  disposeInternalListeners();
69
71
  const prepareStart = performance.now();
@@ -71,6 +73,7 @@ async function execute(method, ctx) {
71
73
  process.env.VITEST_WORKER_ID = String(ctx.workerId);
72
74
  process.env.VITEST_POOL_ID = String(workerId);
73
75
  try {
76
+ // worker is a filepath or URL to a file that exposes a default export with "getRpcOptions" and "runTests" methods
74
77
  if (ctx.worker[0] === ".") {
75
78
  throw new Error(`Path to the test runner cannot be relative, received "${ctx.worker}"`);
76
79
  }
@@ -83,6 +86,7 @@ async function execute(method, ctx) {
83
86
  if (!worker.getRpcOptions || typeof worker.getRpcOptions !== "function") {
84
87
  throw new TypeError(`Test worker should expose "getRpcOptions" method. Received "${typeof worker.getRpcOptions}".`);
85
88
  }
89
+ // RPC is used to communicate between worker (be it a thread worker or child process or a custom implementation) and the main thread
86
90
  const { rpc, onCancel } = createRuntimeRpc(worker.getRpcOptions(ctx));
87
91
  const beforeEnvironmentTime = performance.now();
88
92
  const environment = await loadEnvironment(ctx, rpc);
@@ -1,8 +1,8 @@
1
1
  import v8 from 'node:v8';
2
- import { r as runBaseTests } from '../chunks/base.DwtwORaC.js';
3
- import { c as createForksRpcOptions, u as unwrapSerializableConfig } from '../chunks/utils.BfxieIyZ.js';
2
+ import { r as runBaseTests } from '../chunks/base.D4119yLM.js';
3
+ import { c as createForksRpcOptions, u as unwrapSerializableConfig } from '../chunks/utils.DPCq3gzW.js';
4
4
  import 'vite-node/client';
5
- import '../chunks/execute.JlGHLJZT.js';
5
+ import '../chunks/execute.B3q-2LPV.js';
6
6
  import 'node:fs';
7
7
  import 'node:url';
8
8
  import 'node:vm';
@@ -14,13 +14,15 @@ import 'node:path';
14
14
  import '@vitest/mocker';
15
15
  import 'node:module';
16
16
  import '@vitest/utils';
17
- import '../chunks/utils.CgTj3MsC.js';
17
+ import '../chunks/utils.BlI4TC7Y.js';
18
18
 
19
19
  class ForksBaseWorker {
20
20
  getRpcOptions() {
21
21
  return createForksRpcOptions(v8);
22
22
  }
23
23
  async executeTests(method, state) {
24
+ // TODO: don't rely on reassigning process.exit
25
+ // https://github.com/vitest-dev/vitest/pull/4441#discussion_r1443771486
24
26
  const exit = process.exit;
25
27
  state.ctx.config = unwrapSerializableConfig(state.ctx.config);
26
28
  try {
@@ -6,29 +6,29 @@ import util from 'node:util';
6
6
  import { startTests, collectTests } from '@vitest/runner';
7
7
  import { KNOWN_ASSET_TYPES } from 'vite-node/constants';
8
8
  import { installSourcemapsSupport } from 'vite-node/source-map';
9
- import { s as setupChaiConfig, r as resolveTestRunner, a as resolveSnapshotEnvironment } from '../chunks/index.DswW_LEs.js';
10
- import { c as setupCommonEnv, s as startCoverageInsideWorker, a as stopCoverageInsideWorker } from '../chunks/setup-common.CYo3Y0dD.js';
11
- import { V as VitestIndex } from '../chunks/index.CfXMNXHg.js';
12
- import { c as closeInspector } from '../chunks/inspector.DbDkSkFn.js';
13
- import { g as getWorkerState } from '../chunks/utils.CgTj3MsC.js';
9
+ import { s as setupChaiConfig, r as resolveTestRunner, a as resolveSnapshotEnvironment } from '../chunks/index.CbT4iuwc.js';
10
+ import { c as setupCommonEnv, s as startCoverageInsideWorker, a as stopCoverageInsideWorker } from '../chunks/setup-common.CF-O-dZX.js';
11
+ import { V as VitestIndex } from '../chunks/index.DNgLEKsQ.js';
12
+ import { c as closeInspector } from '../chunks/inspector.BFsh5KO0.js';
13
+ import { g as getWorkerState } from '../chunks/utils.BlI4TC7Y.js';
14
14
  import 'chai';
15
15
  import 'node:path';
16
16
  import '../path.js';
17
17
  import 'node:url';
18
- import '../chunks/rpc.D9_013TY.js';
18
+ import '../chunks/rpc.BKExFSRG.js';
19
19
  import '@vitest/utils';
20
20
  import '../chunks/index.CJ0plNrh.js';
21
21
  import '../chunks/coverage.0iPg4Wrz.js';
22
22
  import '@vitest/snapshot';
23
- import '../chunks/vi.BFR5YIgu.js';
23
+ import '../chunks/vi.pkoYCV6A.js';
24
24
  import '@vitest/expect';
25
25
  import '@vitest/runner/utils';
26
26
  import '../chunks/_commonjsHelpers.BFTU3MAI.js';
27
27
  import '@vitest/utils/error';
28
28
  import '@vitest/spy';
29
29
  import '@vitest/utils/source-map';
30
- import '../chunks/date.CDOsz-HY.js';
31
- import '../chunks/benchmark.BoF7jW0Q.js';
30
+ import '../chunks/date.ByMsSlOr.js';
31
+ import '../chunks/benchmark.Cf_PACH1.js';
32
32
  import 'expect-type';
33
33
 
34
34
  async function run(method, files, config, executor) {
@@ -40,10 +40,12 @@ async function run(method, files, config, executor) {
40
40
  });
41
41
  if (workerState.environment.transformMode === "web") {
42
42
  const _require = createRequire(import.meta.url);
43
+ // always mock "required" `css` files, because we cannot process them
43
44
  _require.extensions[".css"] = resolveCss;
44
45
  _require.extensions[".scss"] = resolveCss;
45
46
  _require.extensions[".sass"] = resolveCss;
46
47
  _require.extensions[".less"] = resolveCss;
48
+ // since we are using Vite, we can assume how these will be resolved
47
49
  KNOWN_ASSET_TYPES.forEach((type) => {
48
50
  _require.extensions[`.${type}`] = resolveAsset;
49
51
  });
@@ -51,6 +53,7 @@ async function run(method, files, config, executor) {
51
53
  } else {
52
54
  process.env.SSR = "1";
53
55
  }
56
+ // @ts-expect-error not typed global for patched timers
54
57
  globalThis.__vitest_required__ = {
55
58
  util,
56
59
  timers,
@@ -76,7 +79,9 @@ async function run(method, files, config, executor) {
76
79
  } else {
77
80
  await collectTests([file], runner);
78
81
  }
82
+ // reset after tests, because user might call `vi.setConfig` in setupFile
79
83
  vi.resetConfig();
84
+ // mocks should not affect different files
80
85
  vi.restoreAllMocks();
81
86
  }
82
87
  await stopCoverageInsideWorker(config.coverage, executor, { isolate: false });
@@ -1,7 +1,7 @@
1
- import { r as runBaseTests } from '../chunks/base.DwtwORaC.js';
2
- import { a as createThreadsRpcOptions } from '../chunks/utils.BfxieIyZ.js';
1
+ import { r as runBaseTests } from '../chunks/base.D4119yLM.js';
2
+ import { a as createThreadsRpcOptions } from '../chunks/utils.DPCq3gzW.js';
3
3
  import 'vite-node/client';
4
- import '../chunks/execute.JlGHLJZT.js';
4
+ import '../chunks/execute.B3q-2LPV.js';
5
5
  import 'node:fs';
6
6
  import 'node:url';
7
7
  import 'node:vm';
@@ -13,7 +13,7 @@ import 'node:path';
13
13
  import '@vitest/mocker';
14
14
  import 'node:module';
15
15
  import '@vitest/utils';
16
- import '../chunks/utils.CgTj3MsC.js';
16
+ import '../chunks/utils.BlI4TC7Y.js';
17
17
 
18
18
  class ThreadsBaseWorker {
19
19
  getRpcOptions(ctx) {
@@ -1,19 +1,19 @@
1
1
  import v8 from 'node:v8';
2
- import { c as createForksRpcOptions, u as unwrapSerializableConfig } from '../chunks/utils.BfxieIyZ.js';
3
- import { r as runVmTests } from '../chunks/vm.C1HHjtNS.js';
2
+ import { c as createForksRpcOptions, u as unwrapSerializableConfig } from '../chunks/utils.DPCq3gzW.js';
3
+ import { r as runVmTests } from '../chunks/vm.DPYem2so.js';
4
4
  import '@vitest/utils';
5
5
  import 'node:url';
6
6
  import 'node:vm';
7
7
  import 'pathe';
8
8
  import '../path.js';
9
9
  import 'node:path';
10
- import '../chunks/console.K1NMVOSc.js';
10
+ import '../chunks/console.Cwr-MFPV.js';
11
11
  import 'node:console';
12
12
  import 'node:stream';
13
13
  import 'tinyrainbow';
14
- import '../chunks/date.CDOsz-HY.js';
15
- import '../chunks/utils.CgTj3MsC.js';
16
- import '../chunks/execute.JlGHLJZT.js';
14
+ import '../chunks/date.ByMsSlOr.js';
15
+ import '../chunks/utils.BlI4TC7Y.js';
16
+ import '../chunks/execute.B3q-2LPV.js';
17
17
  import 'node:fs';
18
18
  import '@vitest/utils/error';
19
19
  import 'vite-node/client';
@@ -1,18 +1,18 @@
1
- import { a as createThreadsRpcOptions } from '../chunks/utils.BfxieIyZ.js';
2
- import { r as runVmTests } from '../chunks/vm.C1HHjtNS.js';
1
+ import { a as createThreadsRpcOptions } from '../chunks/utils.DPCq3gzW.js';
2
+ import { r as runVmTests } from '../chunks/vm.DPYem2so.js';
3
3
  import '@vitest/utils';
4
4
  import 'node:url';
5
5
  import 'node:vm';
6
6
  import 'pathe';
7
7
  import '../path.js';
8
8
  import 'node:path';
9
- import '../chunks/console.K1NMVOSc.js';
9
+ import '../chunks/console.Cwr-MFPV.js';
10
10
  import 'node:console';
11
11
  import 'node:stream';
12
12
  import 'tinyrainbow';
13
- import '../chunks/date.CDOsz-HY.js';
14
- import '../chunks/utils.CgTj3MsC.js';
15
- import '../chunks/execute.JlGHLJZT.js';
13
+ import '../chunks/date.ByMsSlOr.js';
14
+ import '../chunks/utils.BlI4TC7Y.js';
15
+ import '../chunks/execute.B3q-2LPV.js';
16
16
  import 'node:fs';
17
17
  import '@vitest/utils/error';
18
18
  import 'vite-node/client';
package/dist/workers.d.ts CHANGED
@@ -1,11 +1,11 @@
1
- import { W as WorkerGlobalState, C as ContextRPC, B as BirpcOptions, R as RuntimeRPC } from './chunks/worker.d.CoCI7hzP.js';
1
+ import { W as WorkerGlobalState, C as ContextRPC, B as BirpcOptions, R as RuntimeRPC } from './chunks/worker.d.BKbBp2ga.js';
2
2
  import { Awaitable } from '@vitest/utils';
3
3
  import * as v8 from 'v8';
4
- import { a as SerializedConfig } from './chunks/config.d.UqE-KR0o.js';
5
- import { W as WorkerContext } from './chunks/worker.d.D5Xdi-Zr.js';
4
+ import { a as SerializedConfig } from './chunks/config.d.D2ROskhv.js';
5
+ import { W as WorkerContext } from './chunks/worker.d.Bl1O4kuf.js';
6
6
  import '@vitest/runner';
7
7
  import 'vite-node';
8
- import './chunks/environment.d.D8YDy2v5.js';
8
+ import './chunks/environment.d.cL3nLXbE.js';
9
9
  import 'vitest/optional-types.js';
10
10
  import '@vitest/snapshot';
11
11
  import '@vitest/pretty-format';
package/dist/workers.js CHANGED
@@ -1,8 +1,8 @@
1
- export { p as provideWorkerState } from './chunks/utils.CgTj3MsC.js';
1
+ export { p as provideWorkerState } from './chunks/utils.BlI4TC7Y.js';
2
2
  export { collect as collectVitestWorkerTests, run as runVitestWorker } from './worker.js';
3
- export { r as runBaseTests } from './chunks/base.DwtwORaC.js';
4
- export { c as createForksRpcOptions, a as createThreadsRpcOptions, u as unwrapSerializableConfig } from './chunks/utils.BfxieIyZ.js';
5
- export { r as runVmTests } from './chunks/vm.C1HHjtNS.js';
3
+ export { r as runBaseTests } from './chunks/base.D4119yLM.js';
4
+ export { c as createForksRpcOptions, a as createThreadsRpcOptions, u as unwrapSerializableConfig } from './chunks/utils.DPCq3gzW.js';
5
+ export { r as runVmTests } from './chunks/vm.DPYem2so.js';
6
6
  import '@vitest/utils';
7
7
  import 'node:url';
8
8
  import '@vitest/utils/source-map';
@@ -10,21 +10,21 @@ import 'tinypool';
10
10
  import 'vite-node/client';
11
11
  import 'node:fs';
12
12
  import 'pathe';
13
- import './chunks/index.DFXFpH3w.js';
13
+ import './chunks/index.2jgTs_Q5.js';
14
14
  import 'node:console';
15
- import './chunks/inspector.DbDkSkFn.js';
15
+ import './chunks/inspector.BFsh5KO0.js';
16
16
  import 'node:module';
17
- import './chunks/rpc.D9_013TY.js';
17
+ import './chunks/rpc.BKExFSRG.js';
18
18
  import './chunks/index.CJ0plNrh.js';
19
- import './chunks/execute.JlGHLJZT.js';
19
+ import './chunks/execute.B3q-2LPV.js';
20
20
  import 'node:vm';
21
21
  import '@vitest/utils/error';
22
22
  import 'vite-node/utils';
23
23
  import './path.js';
24
24
  import 'node:path';
25
25
  import '@vitest/mocker';
26
- import './chunks/console.K1NMVOSc.js';
26
+ import './chunks/console.Cwr-MFPV.js';
27
27
  import 'node:stream';
28
28
  import 'tinyrainbow';
29
- import './chunks/date.CDOsz-HY.js';
29
+ import './chunks/date.ByMsSlOr.js';
30
30
  import 'vite-node/constants';
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "vitest",
3
3
  "type": "module",
4
- "version": "3.2.0-beta.2",
4
+ "version": "3.2.0-beta.3",
5
5
  "description": "Next generation testing framework powered by Vite",
6
6
  "author": "Anthony Fu <anthonyfu117@hotmail.com>",
7
7
  "license": "MIT",
@@ -119,8 +119,8 @@
119
119
  "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
120
120
  "happy-dom": "*",
121
121
  "jsdom": "*",
122
- "@vitest/browser": "3.2.0-beta.2",
123
- "@vitest/ui": "3.2.0-beta.2"
122
+ "@vitest/browser": "3.2.0-beta.3",
123
+ "@vitest/ui": "3.2.0-beta.3"
124
124
  },
125
125
  "peerDependenciesMeta": {
126
126
  "@edge-runtime/vm": {
@@ -148,7 +148,7 @@
148
148
  "dependencies": {
149
149
  "@types/chai": "^5.2.2",
150
150
  "chai": "^5.2.0",
151
- "debug": "^4.4.0",
151
+ "debug": "^4.4.1",
152
152
  "expect-type": "^1.2.1",
153
153
  "magic-string": "^0.30.17",
154
154
  "pathe": "^2.0.3",
@@ -156,23 +156,23 @@
156
156
  "std-env": "^3.9.0",
157
157
  "tinybench": "^2.9.0",
158
158
  "tinyexec": "^0.3.2",
159
- "tinyglobby": "^0.2.13",
159
+ "tinyglobby": "^0.2.14",
160
160
  "tinypool": "^1.0.2",
161
161
  "tinyrainbow": "^2.0.0",
162
- "vite": "^5.0.0 || ^6.0.0",
162
+ "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0",
163
163
  "why-is-node-running": "^2.3.0",
164
- "@vitest/mocker": "3.2.0-beta.2",
165
- "@vitest/pretty-format": "^3.2.0-beta.2",
166
- "@vitest/expect": "3.2.0-beta.2",
167
- "@vitest/runner": "3.2.0-beta.2",
168
- "@vitest/spy": "3.2.0-beta.2",
169
- "vite-node": "3.2.0-beta.2",
170
- "@vitest/utils": "3.2.0-beta.2",
171
- "@vitest/snapshot": "3.2.0-beta.2"
164
+ "@vitest/expect": "3.2.0-beta.3",
165
+ "@vitest/mocker": "3.2.0-beta.3",
166
+ "@vitest/snapshot": "3.2.0-beta.3",
167
+ "@vitest/utils": "3.2.0-beta.3",
168
+ "@vitest/spy": "3.2.0-beta.3",
169
+ "vite-node": "3.2.0-beta.3",
170
+ "@vitest/pretty-format": "^3.2.0-beta.3",
171
+ "@vitest/runner": "3.2.0-beta.3"
172
172
  },
173
173
  "devDependencies": {
174
174
  "@ampproject/remapping": "^2.3.0",
175
- "@antfu/install-pkg": "^1.0.0",
175
+ "@antfu/install-pkg": "^1.1.0",
176
176
  "@edge-runtime/vm": "^5.0.0",
177
177
  "@sinonjs/fake-timers": "14.0.0",
178
178
  "@types/debug": "^4.1.12",
@@ -180,7 +180,7 @@
180
180
  "@types/istanbul-lib-coverage": "^2.0.6",
181
181
  "@types/istanbul-reports": "^3.0.4",
182
182
  "@types/jsdom": "^21.1.7",
183
- "@types/node": "^22.14.1",
183
+ "@types/node": "^22.15.21",
184
184
  "@types/picomatch": "^4.0.0",
185
185
  "@types/prompts": "^2.4.9",
186
186
  "@types/sinonjs__fake-timers": "^8.1.5",
@@ -190,13 +190,13 @@
190
190
  "chai-subset": "^1.6.0",
191
191
  "find-up": "^6.3.0",
192
192
  "flatted": "^3.3.3",
193
- "happy-dom": "^17.4.4",
193
+ "happy-dom": "^17.4.7",
194
194
  "jsdom": "^26.1.0",
195
195
  "local-pkg": "^1.1.1",
196
196
  "pretty-format": "^29.7.0",
197
197
  "prompts": "^2.4.2",
198
198
  "strip-literal": "^3.0.0",
199
- "ws": "^8.18.1"
199
+ "ws": "^8.18.2"
200
200
  },
201
201
  "scripts": {
202
202
  "build": "rimraf dist && rollup -c",
@@ -1,143 +0,0 @@
1
- import process from 'node:process';
2
- import fs, { existsSync } from 'node:fs';
3
- import fsPromises from 'node:fs/promises';
4
- import path, { resolve } from 'node:path';
5
- import { x } from 'tinyexec';
6
-
7
- const AGENTS = [
8
- "npm",
9
- "yarn",
10
- "yarn@berry",
11
- "pnpm",
12
- "pnpm@6",
13
- "bun",
14
- "deno"
15
- ];
16
- const LOCKS = {
17
- "bun.lock": "bun",
18
- "bun.lockb": "bun",
19
- "deno.lock": "deno",
20
- "pnpm-lock.yaml": "pnpm",
21
- "yarn.lock": "yarn",
22
- "package-lock.json": "npm",
23
- "npm-shrinkwrap.json": "npm"
24
- };
25
-
26
- async function detect(options = {}) {
27
- const { cwd, onUnknown } = options;
28
- for (const directory of lookup(cwd)) {
29
- for (const lock of Object.keys(LOCKS)) {
30
- if (await fileExists(path.join(directory, lock))) {
31
- const name = LOCKS[lock];
32
- const result2 = await parsePackageJson(path.join(directory, "package.json"), onUnknown);
33
- if (result2)
34
- return result2;
35
- else
36
- return { name, agent: name };
37
- }
38
- }
39
- const result = await parsePackageJson(path.join(directory, "package.json"), onUnknown);
40
- if (result)
41
- return result;
42
- }
43
- return null;
44
- }
45
- function* lookup(cwd = process.cwd()) {
46
- let directory = path.resolve(cwd);
47
- const { root } = path.parse(directory);
48
- while (directory && directory !== root) {
49
- yield directory;
50
- directory = path.dirname(directory);
51
- }
52
- }
53
- async function parsePackageJson(filepath, onUnknown) {
54
- return !filepath || !await fileExists(filepath) ? null : handlePackageManager(filepath, onUnknown);
55
- }
56
- function handlePackageManager(filepath, onUnknown) {
57
- try {
58
- const pkg = JSON.parse(fs.readFileSync(filepath, "utf8"));
59
- let agent;
60
- if (typeof pkg.packageManager === "string") {
61
- const [name, ver] = pkg.packageManager.replace(/^\^/, "").split("@");
62
- let version = ver;
63
- if (name === "yarn" && Number.parseInt(ver) > 1) {
64
- agent = "yarn@berry";
65
- version = "berry";
66
- return { name, agent, version };
67
- } else if (name === "pnpm" && Number.parseInt(ver) < 7) {
68
- agent = "pnpm@6";
69
- return { name, agent, version };
70
- } else if (AGENTS.includes(name)) {
71
- agent = name;
72
- return { name, agent, version };
73
- } else {
74
- return onUnknown?.(pkg.packageManager) ?? null;
75
- }
76
- }
77
- } catch {
78
- }
79
- return null;
80
- }
81
- async function fileExists(filePath) {
82
- try {
83
- const stats = await fsPromises.stat(filePath);
84
- if (stats.isFile()) {
85
- return true;
86
- }
87
- } catch {
88
- }
89
- return false;
90
- }
91
-
92
- // src/detect.ts
93
- async function detectPackageManager(cwd = process.cwd()) {
94
- const result = await detect({
95
- cwd,
96
- onUnknown(packageManager) {
97
- console.warn("[@antfu/install-pkg] Unknown packageManager:", packageManager);
98
- return void 0;
99
- }
100
- });
101
- return result?.agent || null;
102
- }
103
- async function installPackage(names, options = {}) {
104
- const detectedAgent = options.packageManager || await detectPackageManager(options.cwd) || "npm";
105
- const [agent] = detectedAgent.split("@");
106
- if (!Array.isArray(names))
107
- names = [names];
108
- const args = (typeof options.additionalArgs === "function" ? options.additionalArgs(agent, detectedAgent) : options.additionalArgs) || [];
109
- if (options.preferOffline) {
110
- if (detectedAgent === "yarn@berry")
111
- args.unshift("--cached");
112
- else
113
- args.unshift("--prefer-offline");
114
- }
115
- if (agent === "pnpm" && existsSync(resolve(options.cwd ?? process.cwd(), "pnpm-workspace.yaml"))) {
116
- args.unshift(
117
- "-w",
118
- /**
119
- * Prevent pnpm from removing installed devDeps while `NODE_ENV` is `production`
120
- * @see https://pnpm.io/cli/install#--prod--p
121
- */
122
- "--prod=false"
123
- );
124
- }
125
- return x(
126
- agent,
127
- [
128
- agent === "yarn" ? "add" : "install",
129
- options.dev ? "-D" : "",
130
- ...args,
131
- ...names
132
- ].filter(Boolean),
133
- {
134
- nodeOptions: {
135
- stdio: options.silent ? "ignore" : "inherit",
136
- cwd: options.cwd
137
- },
138
- throwOnError: true
139
- }
140
- );
141
- }
142
-
143
- export { detectPackageManager, installPackage };