vitest 0.19.0 → 0.20.1

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 (35) hide show
  1. package/dist/browser.d.ts +43 -3
  2. package/dist/browser.mjs +9 -7
  3. package/dist/{chunk-api-setup.0cf2c96a.mjs → chunk-api-setup.7c4c8879.mjs} +7 -6
  4. package/dist/{chunk-constants.38b43a44.mjs → chunk-constants.16825f0c.mjs} +3 -2
  5. package/dist/{chunk-defaults.408a0cfe.mjs → chunk-defaults.1c51d585.mjs} +10 -7
  6. package/dist/chunk-integrations-globals.56a11010.mjs +26 -0
  7. package/dist/{chunk-utils-global.2aa95025.mjs → chunk-mock-date.9160e13b.mjs} +6 -36
  8. package/dist/{chunk-node-git.9058b82a.mjs → chunk-node-git.43dbdd42.mjs} +1 -1
  9. package/dist/{chunk-runtime-chain.1e1aabb3.mjs → chunk-runtime-chain.b6c2cdbc.mjs} +20 -4
  10. package/dist/{chunk-runtime-error.d82dd2cf.mjs → chunk-runtime-error.0aa0dc06.mjs} +17 -13
  11. package/dist/{chunk-runtime-hooks.db398170.mjs → chunk-runtime-hooks.3ee34848.mjs} +7 -4
  12. package/dist/{chunk-runtime-mocker.dfdfd57b.mjs → chunk-runtime-mocker.0a8f7c5e.mjs} +23 -17
  13. package/dist/{chunk-runtime-rpc.45d8ee19.mjs → chunk-runtime-rpc.dbf0b31d.mjs} +3 -1
  14. package/dist/chunk-utils-global.fa20c2f6.mjs +5 -0
  15. package/dist/{chunk-utils-source-map.8b066ce2.mjs → chunk-utils-source-map.8198ebd9.mjs} +1 -1
  16. package/dist/chunk-utils-timers.b48455ed.mjs +27 -0
  17. package/dist/chunk-vite-node-client.a247c2c2.mjs +320 -0
  18. package/dist/chunk-vite-node-debug.c5887932.mjs +76 -0
  19. package/dist/{chunk-vite-node-externalize.a2813ad7.mjs → chunk-vite-node-externalize.fce5b934.mjs} +72 -19
  20. package/dist/{chunk-vite-node-utils.ad73f2ab.mjs → chunk-vite-node-utils.9dfd1e3f.mjs} +4 -323
  21. package/dist/cli.mjs +9 -7
  22. package/dist/config.cjs +3 -2
  23. package/dist/config.d.ts +1 -0
  24. package/dist/config.mjs +3 -2
  25. package/dist/entry.mjs +10 -8
  26. package/dist/index.d.ts +44 -4
  27. package/dist/index.mjs +7 -5
  28. package/dist/loader.mjs +35 -0
  29. package/dist/node.d.ts +44 -3
  30. package/dist/node.mjs +10 -7
  31. package/dist/suite.mjs +6 -4
  32. package/dist/worker.mjs +9 -6
  33. package/package.json +6 -5
  34. package/suppress-warnings.cjs +20 -0
  35. package/dist/chunk-integrations-globals.803277be.mjs +0 -24
@@ -1,12 +1,10 @@
1
- import { builtinModules, createRequire } from 'module';
2
- import { pathToFileURL, fileURLToPath as fileURLToPath$1, URL as URL$1 } from 'url';
3
- import vm from 'vm';
4
- import { C as resolve$1, d as dirname, F as isAbsolute$1, S as extname$1 } from './chunk-utils-global.2aa95025.mjs';
1
+ import { builtinModules } from 'module';
5
2
  import path from 'path';
3
+ import { pathToFileURL, fileURLToPath as fileURLToPath$1, URL as URL$1 } from 'url';
6
4
  import fs, { promises, statSync, existsSync, realpathSync, Stats } from 'fs';
7
5
  import assert from 'assert';
8
6
  import { format, inspect } from 'util';
9
- import createDebug from 'debug';
7
+ import { y as resolve$1 } from './chunk-mock-date.9160e13b.mjs';
10
8
 
11
9
  function normalizeWindowsPath(input = "") {
12
10
  if (!input.includes("\\")) {
@@ -1113,321 +1111,4 @@ function toArray(array) {
1113
1111
  return [array];
1114
1112
  }
1115
1113
 
1116
- const debugExecute = createDebug("vite-node:client:execute");
1117
- const debugNative = createDebug("vite-node:client:native");
1118
- const DEFAULT_REQUEST_STUBS = {
1119
- "/@vite/client": {
1120
- injectQuery: (id) => id,
1121
- createHotContext() {
1122
- return {
1123
- accept: () => {
1124
- },
1125
- prune: () => {
1126
- },
1127
- dispose: () => {
1128
- },
1129
- decline: () => {
1130
- },
1131
- invalidate: () => {
1132
- },
1133
- on: () => {
1134
- }
1135
- };
1136
- },
1137
- updateStyle(id, css) {
1138
- if (typeof document === "undefined")
1139
- return;
1140
- const element = document.getElementById(id);
1141
- if (element)
1142
- element.remove();
1143
- const head = document.querySelector("head");
1144
- const style = document.createElement("style");
1145
- style.setAttribute("type", "text/css");
1146
- style.id = id;
1147
- style.innerHTML = css;
1148
- head == null ? void 0 : head.appendChild(style);
1149
- }
1150
- }
1151
- };
1152
- class ModuleCacheMap extends Map {
1153
- normalizePath(fsPath) {
1154
- return normalizeModuleId(fsPath);
1155
- }
1156
- set(fsPath, mod) {
1157
- fsPath = this.normalizePath(fsPath);
1158
- if (!super.has(fsPath))
1159
- super.set(fsPath, mod);
1160
- else
1161
- Object.assign(super.get(fsPath), mod);
1162
- return this;
1163
- }
1164
- get(fsPath) {
1165
- fsPath = this.normalizePath(fsPath);
1166
- return super.get(fsPath);
1167
- }
1168
- delete(fsPath) {
1169
- fsPath = this.normalizePath(fsPath);
1170
- return super.delete(fsPath);
1171
- }
1172
- }
1173
- class ViteNodeRunner {
1174
- constructor(options) {
1175
- this.options = options;
1176
- this.root = options.root ?? process.cwd();
1177
- this.moduleCache = options.moduleCache ?? new ModuleCacheMap();
1178
- this.debug = options.debug ?? (typeof process !== "undefined" ? !!process.env.VITE_NODE_DEBUG : false);
1179
- }
1180
- async executeFile(file) {
1181
- return await this.cachedRequest(`/@fs/${slash(resolve$1(file))}`, []);
1182
- }
1183
- async executeId(id) {
1184
- return await this.cachedRequest(id, []);
1185
- }
1186
- async cachedRequest(rawId, callstack) {
1187
- var _a, _b, _c, _d;
1188
- const id = normalizeRequestId(rawId, this.options.base);
1189
- const fsPath = toFilePath(id, this.root);
1190
- if (callstack.includes(fsPath) && ((_a = this.moduleCache.get(fsPath)) == null ? void 0 : _a.exports))
1191
- return (_b = this.moduleCache.get(fsPath)) == null ? void 0 : _b.exports;
1192
- if ((_c = this.moduleCache.get(fsPath)) == null ? void 0 : _c.promise)
1193
- return (_d = this.moduleCache.get(fsPath)) == null ? void 0 : _d.promise;
1194
- const promise = this.directRequest(id, fsPath, callstack);
1195
- this.moduleCache.set(fsPath, { promise });
1196
- return await promise;
1197
- }
1198
- async directRequest(id, fsPath, _callstack) {
1199
- const callstack = [..._callstack, fsPath];
1200
- const request = async (dep) => {
1201
- var _a;
1202
- const fsPath2 = toFilePath(normalizeRequestId(dep, this.options.base), this.root);
1203
- const getStack = () => {
1204
- return `stack:
1205
- ${[...callstack, fsPath2].reverse().map((p) => `- ${p}`).join("\n")}`;
1206
- };
1207
- let debugTimer;
1208
- if (this.debug)
1209
- debugTimer = setTimeout(() => this.debugLog(() => `module ${fsPath2} takes over 2s to load.
1210
- ${getStack()}`), 2e3);
1211
- try {
1212
- if (callstack.includes(fsPath2)) {
1213
- this.debugLog(() => `circular dependency, ${getStack()}`);
1214
- const depExports = (_a = this.moduleCache.get(fsPath2)) == null ? void 0 : _a.exports;
1215
- if (depExports)
1216
- return depExports;
1217
- throw new Error(`[vite-node] Failed to resolve circular dependency, ${getStack()}`);
1218
- }
1219
- const mod = await this.cachedRequest(dep, callstack);
1220
- return mod;
1221
- } finally {
1222
- if (debugTimer)
1223
- clearTimeout(debugTimer);
1224
- }
1225
- };
1226
- Object.defineProperty(request, "callstack", { get: () => callstack });
1227
- const resolveId = async (dep, callstackPosition = 1) => {
1228
- if (this.options.resolveId && this.shouldResolveId(dep)) {
1229
- let importer = callstack[callstack.length - callstackPosition];
1230
- if (importer && importer.startsWith("mock:"))
1231
- importer = importer.slice(5);
1232
- const { id: id2 } = await this.options.resolveId(dep, importer) || {};
1233
- dep = id2 && isAbsolute$1(id2) ? mergeSlashes(`/@fs/${id2}`) : id2 || dep;
1234
- }
1235
- return dep;
1236
- };
1237
- id = await resolveId(id, 2);
1238
- const requestStubs = this.options.requestStubs || DEFAULT_REQUEST_STUBS;
1239
- if (id in requestStubs)
1240
- return requestStubs[id];
1241
- let { code: transformed, externalize } = await this.options.fetchModule(id);
1242
- if (externalize) {
1243
- debugNative(externalize);
1244
- const mod = await this.interopedImport(externalize);
1245
- this.moduleCache.set(fsPath, { exports: mod });
1246
- return mod;
1247
- }
1248
- if (transformed == null)
1249
- throw new Error(`[vite-node] Failed to load ${id}`);
1250
- const url = pathToFileURL(fsPath).href;
1251
- const meta = { url };
1252
- const exports = /* @__PURE__ */ Object.create(null);
1253
- exports[Symbol.toStringTag] = "Module";
1254
- this.moduleCache.set(fsPath, { code: transformed, exports });
1255
- const __filename = fileURLToPath$1(url);
1256
- const moduleProxy = {
1257
- set exports(value) {
1258
- exportAll(exports, value);
1259
- exports.default = value;
1260
- },
1261
- get exports() {
1262
- return exports;
1263
- }
1264
- };
1265
- let hotContext;
1266
- if (this.options.createHotContext) {
1267
- Object.defineProperty(meta, "hot", {
1268
- enumerable: true,
1269
- get: () => {
1270
- var _a, _b;
1271
- hotContext || (hotContext = (_b = (_a = this.options).createHotContext) == null ? void 0 : _b.call(_a, this, `/@fs/${fsPath}`));
1272
- return hotContext;
1273
- }
1274
- });
1275
- }
1276
- const context = this.prepareContext({
1277
- __vite_ssr_import__: request,
1278
- __vite_ssr_dynamic_import__: request,
1279
- __vite_ssr_exports__: exports,
1280
- __vite_ssr_exportAll__: (obj) => exportAll(exports, obj),
1281
- __vite_ssr_import_meta__: meta,
1282
- __vitest_resolve_id__: resolveId,
1283
- require: createRequire(url),
1284
- exports,
1285
- module: moduleProxy,
1286
- __filename,
1287
- __dirname: dirname(__filename)
1288
- });
1289
- debugExecute(__filename);
1290
- if (transformed[0] === "#")
1291
- transformed = transformed.replace(/^\#\!.*/, (s) => " ".repeat(s.length));
1292
- const fn = vm.runInThisContext(`'use strict';async (${Object.keys(context).join(",")})=>{{${transformed}
1293
- }}`, {
1294
- filename: fsPath,
1295
- lineOffset: 0
1296
- });
1297
- await fn(...Object.values(context));
1298
- return exports;
1299
- }
1300
- prepareContext(context) {
1301
- return context;
1302
- }
1303
- shouldResolveId(dep) {
1304
- if (isNodeBuiltin(dep) || dep in (this.options.requestStubs || DEFAULT_REQUEST_STUBS) || dep.startsWith("/@vite"))
1305
- return false;
1306
- return !isAbsolute$1(dep) || !extname$1(dep);
1307
- }
1308
- shouldInterop(path, mod) {
1309
- if (this.options.interopDefault === false)
1310
- return false;
1311
- return !path.endsWith(".mjs") && "default" in mod;
1312
- }
1313
- async interopedImport(path) {
1314
- const mod = await import(path);
1315
- if (this.shouldInterop(path, mod)) {
1316
- const tryDefault = this.hasNestedDefault(mod);
1317
- return new Proxy(mod, {
1318
- get: proxyMethod("get", tryDefault),
1319
- set: proxyMethod("set", tryDefault),
1320
- has: proxyMethod("has", tryDefault),
1321
- deleteProperty: proxyMethod("deleteProperty", tryDefault)
1322
- });
1323
- }
1324
- return mod;
1325
- }
1326
- hasNestedDefault(target) {
1327
- return "__esModule" in target && target.__esModule && "default" in target.default;
1328
- }
1329
- debugLog(msg) {
1330
- if (this.debug)
1331
- console.log(`[vite-node] ${msg()}`);
1332
- }
1333
- }
1334
- function proxyMethod(name, tryDefault) {
1335
- return function(target, key, ...args) {
1336
- const result = Reflect[name](target, key, ...args);
1337
- if (isPrimitive(target.default))
1338
- return result;
1339
- if (tryDefault && key === "default" || typeof result === "undefined")
1340
- return Reflect[name](target.default, key, ...args);
1341
- return result;
1342
- };
1343
- }
1344
- function exportAll(exports, sourceModule) {
1345
- if (exports === sourceModule)
1346
- return;
1347
- for (const key in sourceModule) {
1348
- if (key !== "default") {
1349
- try {
1350
- Object.defineProperty(exports, key, {
1351
- enumerable: true,
1352
- configurable: true,
1353
- get() {
1354
- return sourceModule[key];
1355
- }
1356
- });
1357
- } catch (_err) {
1358
- }
1359
- }
1360
- }
1361
- }
1362
-
1363
- const DEFAULT_TIMEOUT = 6e4;
1364
- function createBirpc(functions, options) {
1365
- const {
1366
- post,
1367
- on,
1368
- eventNames = [],
1369
- serialize = (i) => i,
1370
- deserialize = (i) => i,
1371
- timeout = DEFAULT_TIMEOUT
1372
- } = options;
1373
- const rpcPromiseMap = /* @__PURE__ */ new Map();
1374
- const rpc = new Proxy({}, {
1375
- get(_, method) {
1376
- const sendEvent = (...args) => {
1377
- post(serialize({ m: method, a: args, t: "q" }));
1378
- };
1379
- if (eventNames.includes(method)) {
1380
- sendEvent.asEvent = sendEvent;
1381
- return sendEvent;
1382
- }
1383
- const sendCall = (...args) => {
1384
- return new Promise((resolve, reject) => {
1385
- const id = nanoid();
1386
- rpcPromiseMap.set(id, { resolve, reject });
1387
- post(serialize({ m: method, a: args, i: id, t: "q" }));
1388
- if (timeout >= 0) {
1389
- setTimeout(() => {
1390
- reject(new Error(`[birpc] timeout on calling "${method}"`));
1391
- rpcPromiseMap.delete(id);
1392
- }, timeout);
1393
- }
1394
- });
1395
- };
1396
- sendCall.asEvent = sendEvent;
1397
- return sendCall;
1398
- }
1399
- });
1400
- on(async (data, ...extra) => {
1401
- const msg = deserialize(data);
1402
- if (msg.t === "q") {
1403
- const { m: method, a: args } = msg;
1404
- let result, error;
1405
- try {
1406
- result = await functions[method].apply(rpc, args);
1407
- } catch (e) {
1408
- error = e;
1409
- }
1410
- if (msg.i)
1411
- post(serialize({ t: "s", i: msg.i, r: result, e: error }), ...extra);
1412
- } else {
1413
- const { i: ack, r: result, e: error } = msg;
1414
- const promise = rpcPromiseMap.get(ack);
1415
- if (error)
1416
- promise?.reject(error);
1417
- else
1418
- promise?.resolve(result);
1419
- rpcPromiseMap.delete(ack);
1420
- }
1421
- });
1422
- return rpc;
1423
- }
1424
- const urlAlphabet = "useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";
1425
- function nanoid(size = 21) {
1426
- let id = "";
1427
- let i = size;
1428
- while (i--)
1429
- id += urlAlphabet[Math.random() * 64 | 0];
1430
- return id;
1431
- }
1432
-
1433
- export { ModuleCacheMap as M, ViteNodeRunner as V, isValidNodeImport as a, toFilePath as b, createBirpc as c, isNodeBuiltin as i, normalizeRequestId as n, slash as s, toArray as t, withInlineSourcemap as w };
1114
+ export { isValidNodeImport as a, toFilePath as b, isPrimitive as c, normalizeModuleId as d, isNodeBuiltin as i, mergeSlashes as m, normalizeRequestId as n, slash as s, toArray as t, withInlineSourcemap as w };
package/dist/cli.mjs CHANGED
@@ -1,28 +1,30 @@
1
1
  import { EventEmitter } from 'events';
2
- import { p as picocolors } from './chunk-utils-global.2aa95025.mjs';
3
- import { v as version, s as startVitest, d as divider } from './chunk-vite-node-externalize.a2813ad7.mjs';
2
+ import { p as picocolors } from './chunk-mock-date.9160e13b.mjs';
3
+ import { v as version, s as startVitest, d as divider } from './chunk-vite-node-externalize.fce5b934.mjs';
4
4
  import 'path';
5
5
  import 'tty';
6
6
  import 'local-pkg';
7
- import './chunk-defaults.408a0cfe.mjs';
7
+ import './chunk-defaults.1c51d585.mjs';
8
8
  import 'fs';
9
9
  import 'module';
10
10
  import 'url';
11
11
  import 'vite';
12
12
  import 'process';
13
- import './chunk-constants.38b43a44.mjs';
13
+ import './chunk-constants.16825f0c.mjs';
14
14
  import 'os';
15
15
  import 'util';
16
16
  import 'stream';
17
17
  import './vendor-_commonjsHelpers.4da45ef5.mjs';
18
- import './chunk-vite-node-utils.ad73f2ab.mjs';
18
+ import './chunk-vite-node-client.a247c2c2.mjs';
19
19
  import 'vm';
20
+ import './chunk-vite-node-utils.9dfd1e3f.mjs';
20
21
  import 'assert';
21
22
  import 'debug';
22
23
  import 'worker_threads';
23
24
  import 'tinypool';
24
25
  import 'perf_hooks';
25
- import './chunk-utils-source-map.8b066ce2.mjs';
26
+ import './chunk-utils-source-map.8198ebd9.mjs';
27
+ import './chunk-utils-timers.b48455ed.mjs';
26
28
  import 'crypto';
27
29
  import './vendor-index.61438b77.mjs';
28
30
  import './chunk-magic-string.efe26975.mjs';
@@ -643,7 +645,7 @@ class CAC extends EventEmitter {
643
645
  const cac = (name = "") => new CAC(name);
644
646
 
645
647
  const cli = cac("vitest");
646
- cli.version(version).option("-r, --root <path>", "root path").option("-c, --config <path>", "path to config file").option("-u, --update", "update snapshot").option("-w, --watch", "watch mode").option("-t, --testNamePattern <pattern>", "run tests with full names matching the specified pattern").option("--dir <path>", "base directory to scan for the test files").option("--ui", "enable UI").option("--open", "open UI automatically (default: !process.env.CI))").option("--api [api]", "serve API, available options: --api.port <port>, --api.host [host] and --api.strictPort").option("--threads", "enabled threads (default: true)").option("--silent", "silent console output from tests").option("--isolate", "isolate environment for each test file (default: true)").option("--reporter <name>", "reporter").option("--outputTruncateLength <length>", "diff output length (default: 80)").option("--outputDiffLines <lines>", "number of diff output lines (default: 15)").option("--outputFile <filename/-s>", "write test results to a file when the --reporter=json or --reporter=junit option is also specified, use cac's dot notation for individual outputs of mutliple reporters").option("--coverage", "use c8 for coverage").option("--run", "do not watch").option("--mode <name>", "override Vite mode (default: test)").option("--globals", "inject apis globally").option("--dom", "mock browser api with happy-dom").option("--browser", "run tests in browser").option("--environment <env>", "runner environment (default: node)").option("--passWithNoTests", "pass when no tests found").option("--allowOnly", "Allow tests and suites that are marked as only (default: !process.env.CI)").option("--shard <shard>", "Test suite shard to execute in a format of <index>/<count>").option("--changed [since]", "Run tests that are affected by the changed files (default: false)").option("--sequence <options>", "Define in what order to run tests (use --sequence.shuffle to run tests in random order)").help();
648
+ cli.version(version).option("-r, --root <path>", "root path").option("-c, --config <path>", "path to config file").option("-u, --update", "update snapshot").option("-w, --watch", "watch mode").option("-t, --testNamePattern <pattern>", "run tests with full names matching the specified pattern").option("--dir <path>", "base directory to scan for the test files").option("--ui", "enable UI").option("--open", "open UI automatically (default: !process.env.CI))").option("--api [api]", "serve API, available options: --api.port <port>, --api.host [host] and --api.strictPort").option("--threads", "enabled threads (default: true)").option("--silent", "silent console output from tests").option("--isolate", "isolate environment for each test file (default: true)").option("--reporter <name>", "reporter").option("--outputTruncateLength <length>", "diff output length (default: 80)").option("--outputDiffLines <lines>", "number of diff output lines (default: 15)").option("--outputFile <filename/-s>", "write test results to a file when the --reporter=json or --reporter=junit option is also specified, use cac's dot notation for individual outputs of mutliple reporters").option("--coverage", "use c8 for coverage").option("--run", "do not watch").option("--mode <name>", "override Vite mode (default: test)").option("--globals", "inject apis globally").option("--dom", "mock browser api with happy-dom").option("--browser", "run tests in browser").option("--environment <env>", "runner environment (default: node)").option("--passWithNoTests", "pass when no tests found").option("--allowOnly", "Allow tests and suites that are marked as only (default: !process.env.CI)").option("--dangerouslyIgnoreUnhandledErrors", "Ignore any unhandled errors that occur").option("--shard <shard>", "Test suite shard to execute in a format of <index>/<count>").option("--changed [since]", "Run tests that are affected by the changed files (default: false)").option("--sequence <options>", "Define in what order to run tests (use --sequence.shuffle to run tests in random order)").help();
647
649
  cli.command("run [...filters]").action(run);
648
650
  cli.command("related [...filters]").action(runRelated);
649
651
  cli.command("watch [...filters]").action(start);
package/dist/config.cjs CHANGED
@@ -25,7 +25,7 @@ const coverageConfigDefaults = {
25
25
  reportsDirectory: "./coverage",
26
26
  excludeNodeModules: true,
27
27
  exclude: defaultCoverageExcludes,
28
- reporter: ["text", "html"],
28
+ reporter: ["text", "html", "clover"],
29
29
  allowExternal: false,
30
30
  extension: [".js", ".cjs", ".mjs", ".ts", ".tsx", ".jsx", ".vue", ".svelte"]
31
31
  };
@@ -75,7 +75,8 @@ const config = {
75
75
  },
76
76
  coverage: coverageConfigDefaults,
77
77
  fakeTimers: fakeTimersDefaults,
78
- maxConcurrency: 5
78
+ maxConcurrency: 5,
79
+ dangerouslyIgnoreUnhandledErrors: false
79
80
  };
80
81
  const configDefaults = Object.freeze(config);
81
82
 
package/dist/config.d.ts CHANGED
@@ -98,6 +98,7 @@ declare const config: {
98
98
  coverage: ResolvedC8Options;
99
99
  fakeTimers: FakeTimerInstallOpts;
100
100
  maxConcurrency: number;
101
+ dangerouslyIgnoreUnhandledErrors: boolean;
101
102
  };
102
103
  declare const configDefaults: Required<Pick<UserConfig$1, keyof typeof config>>;
103
104
 
package/dist/config.mjs CHANGED
@@ -21,7 +21,7 @@ const coverageConfigDefaults = {
21
21
  reportsDirectory: "./coverage",
22
22
  excludeNodeModules: true,
23
23
  exclude: defaultCoverageExcludes,
24
- reporter: ["text", "html"],
24
+ reporter: ["text", "html", "clover"],
25
25
  allowExternal: false,
26
26
  extension: [".js", ".cjs", ".mjs", ".ts", ".tsx", ".jsx", ".vue", ".svelte"]
27
27
  };
@@ -71,7 +71,8 @@ const config = {
71
71
  },
72
72
  coverage: coverageConfigDefaults,
73
73
  fakeTimers: fakeTimersDefaults,
74
- maxConcurrency: 5
74
+ maxConcurrency: 5,
75
+ dangerouslyIgnoreUnhandledErrors: false
75
76
  };
76
77
  const configDefaults = Object.freeze(config);
77
78
 
package/dist/entry.mjs CHANGED
@@ -1,19 +1,21 @@
1
1
  import { promises } from 'fs';
2
- import { g as getWorkerState, a as resetModules } from './chunk-utils-global.2aa95025.mjs';
3
- import { f as envs } from './chunk-defaults.408a0cfe.mjs';
4
- import { a as setupGlobalEnv, s as startTests, w as withEnv } from './chunk-runtime-error.d82dd2cf.mjs';
2
+ import { a as resetModules } from './chunk-mock-date.9160e13b.mjs';
3
+ import { f as envs } from './chunk-defaults.1c51d585.mjs';
4
+ import { a as setupGlobalEnv, s as startTests, w as withEnv } from './chunk-runtime-error.0aa0dc06.mjs';
5
+ import { g as getWorkerState } from './chunk-utils-global.fa20c2f6.mjs';
5
6
  import 'path';
6
7
  import 'tty';
7
8
  import 'local-pkg';
8
9
  import 'module';
9
10
  import 'url';
10
- import './chunk-runtime-hooks.db398170.mjs';
11
- import './chunk-runtime-chain.1e1aabb3.mjs';
11
+ import './chunk-runtime-hooks.3ee34848.mjs';
12
+ import './chunk-runtime-chain.b6c2cdbc.mjs';
12
13
  import 'util';
13
14
  import 'chai';
14
15
  import './vendor-_commonjsHelpers.4da45ef5.mjs';
15
- import './chunk-runtime-rpc.45d8ee19.mjs';
16
- import './chunk-utils-source-map.8b066ce2.mjs';
16
+ import './chunk-runtime-rpc.dbf0b31d.mjs';
17
+ import './chunk-utils-timers.b48455ed.mjs';
18
+ import './chunk-utils-source-map.8198ebd9.mjs';
17
19
  import './spy.mjs';
18
20
  import 'tinyspy';
19
21
 
@@ -49,7 +51,7 @@ async function run(files, config) {
49
51
  await withEnv(environment, config.environmentOptions || {}, async () => {
50
52
  for (const file of files2) {
51
53
  workerState.mockMap.clear();
52
- resetModules();
54
+ resetModules(workerState.moduleCache, true);
53
55
  workerState.filepath = file;
54
56
  await startTests([file], config);
55
57
  workerState.filepath = void 0;
package/dist/index.d.ts CHANGED
@@ -266,7 +266,6 @@ declare class ViteNodeRunner {
266
266
  */
267
267
  interopedImport(path: string): Promise<any>;
268
268
  hasNestedDefault(target: any): any;
269
- private debugLog;
270
269
  }
271
270
  interface DepsHandlingOptions {
272
271
  external?: (string | RegExp)[];
@@ -337,6 +336,33 @@ interface ViteNodeServerOptions {
337
336
  ssr?: RegExp[];
338
337
  web?: RegExp[];
339
338
  };
339
+ debug?: DebuggerOptions;
340
+ }
341
+ interface DebuggerOptions {
342
+ /**
343
+ * Dump the transformed module to filesystem
344
+ * Passing a string will dump to the specified path
345
+ */
346
+ dumpModules?: boolean | string;
347
+ /**
348
+ * Read dumpped module from filesystem whenever exists.
349
+ * Useful for debugging by modifying the dump result from the filesystem.
350
+ */
351
+ loadDumppedModules?: boolean;
352
+ }
353
+
354
+ declare class Debugger {
355
+ options: DebuggerOptions;
356
+ dumpDir: string | undefined;
357
+ initPromise: Promise<void> | undefined;
358
+ externalizeMap: Map<string, string>;
359
+ constructor(root: string, options: DebuggerOptions);
360
+ clearDump(): Promise<void>;
361
+ encodeId(id: string): string;
362
+ recordExternalize(id: string, path: string): Promise<void>;
363
+ dumpFile(id: string, result: TransformResult | null): Promise<void>;
364
+ loadDump(id: string): Promise<TransformResult | null>;
365
+ writeInfo(): Promise<void>;
340
366
  }
341
367
 
342
368
  declare class ViteNodeServer {
@@ -348,6 +374,8 @@ declare class ViteNodeServer {
348
374
  timestamp: number;
349
375
  result: FetchResult;
350
376
  }>;
377
+ externalizeCache: Map<string, Promise<string | false>>;
378
+ debugger?: Debugger;
351
379
  constructor(server: ViteDevServer, options?: ViteNodeServerOptions);
352
380
  shouldExternalize(id: string): Promise<string | false>;
353
381
  resolveId(id: string, importer?: string): Promise<ViteNodeResolveId | null>;
@@ -374,16 +402,23 @@ interface WorkerPool {
374
402
  close: () => Promise<void>;
375
403
  }
376
404
 
405
+ interface CollectingPromise {
406
+ promise: Promise<void>;
407
+ resolve: () => void;
408
+ }
377
409
  declare class StateManager {
378
410
  filesMap: Map<string, File>;
379
411
  pathsSet: Set<string>;
412
+ collectingPromise: CollectingPromise | undefined;
380
413
  idMap: Map<string, Task>;
381
414
  taskFileMap: WeakMap<Task, File>;
382
415
  errorsSet: Set<unknown>;
383
416
  catchError(err: unknown, type: string): void;
384
417
  clearErrors(): void;
385
418
  getUnhandledErrors(): unknown[];
386
- getPaths(): string[];
419
+ startCollectingPaths(): void;
420
+ finishCollectingPaths(): void;
421
+ getPaths(): Promise<string[]>;
387
422
  getFiles(keys?: string[]): File[];
388
423
  getFilepaths(): string[];
389
424
  getFailedFilepaths(): string[];
@@ -892,6 +927,7 @@ interface Suite extends TaskBase {
892
927
  interface File extends Suite {
893
928
  filepath: string;
894
929
  collectDuration?: number;
930
+ setupDuration?: number;
895
931
  }
896
932
  interface Test<ExtraContext = {}> extends TaskBase {
897
933
  type: 'test';
@@ -1387,6 +1423,10 @@ interface InlineConfig {
1387
1423
  * Will be merged with the default aliases inside `resolve.alias`.
1388
1424
  */
1389
1425
  alias?: AliasOptions;
1426
+ /**
1427
+ * Ignore any unhandled errors that occur
1428
+ */
1429
+ dangerouslyIgnoreUnhandledErrors?: boolean;
1390
1430
  }
1391
1431
  interface UserConfig extends InlineConfig {
1392
1432
  /**
@@ -1831,7 +1871,7 @@ declare type MaybeMocked<T> = T extends Procedure ? MockedFunction<T> : T extend
1831
1871
  interface Constructable {
1832
1872
  new (...args: any[]): any;
1833
1873
  }
1834
- declare type MockedClass<T extends Constructable> = MockInstance<InstanceType<T>, T extends new (...args: infer P) => any ? P : never> & {
1874
+ declare type MockedClass<T extends Constructable> = MockInstance<T extends new (...args: infer P) => any ? P : never, InstanceType<T>> & {
1835
1875
  prototype: T extends {
1836
1876
  prototype: any;
1837
1877
  } ? Mocked<T['prototype']> : never;
@@ -1994,7 +2034,7 @@ interface WebSocketHandlers {
1994
2034
  onCollected(files?: File[]): Promise<void>;
1995
2035
  onTaskUpdate(packs: TaskResultPack[]): void;
1996
2036
  getFiles(): File[];
1997
- getPaths(): string[];
2037
+ getPaths(): Promise<string[]>;
1998
2038
  getConfig(): ResolvedConfig;
1999
2039
  getModuleGraph(id: string): Promise<ModuleGraphData>;
2000
2040
  getTransformResult(id: string): Promise<TransformResultWithSource | undefined>;
package/dist/index.mjs CHANGED
@@ -1,16 +1,18 @@
1
- export { c as createExpect, d as describe, b as expect, i as it, s as suite, t as test } from './chunk-runtime-chain.1e1aabb3.mjs';
2
- export { a as afterAll, d as afterEach, b as beforeAll, c as beforeEach, h as getRunningMode, f as isFirstRun, j as isWatchMode, e as runOnce, v as vi, g as vitest, w as withCallback } from './chunk-runtime-hooks.db398170.mjs';
1
+ export { c as createExpect, d as describe, b as expect, i as it, s as suite, t as test } from './chunk-runtime-chain.b6c2cdbc.mjs';
2
+ export { a as afterAll, d as afterEach, b as beforeAll, c as beforeEach, h as getRunningMode, f as isFirstRun, j as isWatchMode, e as runOnce, v as vi, g as vitest, w as withCallback } from './chunk-runtime-hooks.3ee34848.mjs';
3
3
  import * as chai from 'chai';
4
4
  export { chai };
5
5
  export { assert, should } from 'chai';
6
6
  import 'util';
7
- import './chunk-utils-global.2aa95025.mjs';
7
+ import './chunk-mock-date.9160e13b.mjs';
8
8
  import 'path';
9
9
  import 'tty';
10
10
  import 'local-pkg';
11
11
  import './vendor-_commonjsHelpers.4da45ef5.mjs';
12
- import './chunk-runtime-rpc.45d8ee19.mjs';
12
+ import './chunk-runtime-rpc.dbf0b31d.mjs';
13
+ import './chunk-utils-global.fa20c2f6.mjs';
14
+ import './chunk-utils-timers.b48455ed.mjs';
13
15
  import 'fs';
14
- import './chunk-utils-source-map.8b066ce2.mjs';
16
+ import './chunk-utils-source-map.8198ebd9.mjs';
15
17
  import './spy.mjs';
16
18
  import 'tinyspy';
@@ -0,0 +1,35 @@
1
+ import { pathToFileURL } from 'url';
2
+ import { i as isNodeBuiltin, d as normalizeModuleId } from './chunk-vite-node-utils.9dfd1e3f.mjs';
3
+ import './chunk-mock-date.9160e13b.mjs';
4
+ import { g as getWorkerState } from './chunk-utils-global.fa20c2f6.mjs';
5
+ import 'module';
6
+ import 'path';
7
+ import 'fs';
8
+ import 'assert';
9
+ import 'util';
10
+ import 'tty';
11
+ import 'local-pkg';
12
+
13
+ const resolve = async (url, context, next) => {
14
+ const { parentURL } = context;
15
+ if (!parentURL || !parentURL.includes("node_modules") || isNodeBuiltin(url))
16
+ return next(url, context, next);
17
+ const id = normalizeModuleId(url);
18
+ const importer = normalizeModuleId(parentURL);
19
+ const state = getWorkerState();
20
+ const resolver = state == null ? void 0 : state.rpc.resolveId;
21
+ if (resolver) {
22
+ const resolved = await resolver(id, importer);
23
+ if (resolved) {
24
+ return {
25
+ url: pathToFileURL(resolved.id).toString()
26
+ };
27
+ }
28
+ }
29
+ return next(url, context, next);
30
+ };
31
+ const load = (url, context, next) => {
32
+ return next(url, context, next);
33
+ };
34
+
35
+ export { load, resolve };