import { startTests } from '@vitest/runner'; import { resolve } from 'pathe'; import { r as resetModules } from './chunk-utils-env.6b856dbf.js'; import { R as RealDate, g as globalExpect, a as vi } from './chunk-utils-import.e488ace3.js'; import { d as distDir } from './chunk-paths.e36446b4.js'; import { a as startCoverageInsideWorker, t as takeCoverageInsideWorker, s as stopCoverageInsideWorker } from './chunk-integrations-coverage.d93ee824.js'; import { createRequire } from 'node:module'; import { isatty } from 'node:tty'; import { installSourcemapsSupport } from 'vite-node/source-map'; import { setupColors, createColors, getSafeTimers } from '@vitest/utils'; import { e as environments } from './chunk-env-node.affdd278.js'; import { i as index } from './chunk-integrations-utils.23c19408.js'; import { s as setupSnapshotEnvironment } from './chunk-snapshot-env.a347d647.js'; import { promises, existsSync } from 'node:fs'; import { r as rpc } from './chunk-runtime-rpc.d6aa57f8.js'; import { s as setupCommonEnv } from './chunk-runtime-setup.5d504677.js'; import { g as getWorkerState } from './chunk-utils-global.fd174983.js'; import 'std-env'; import '@vitest/runner/utils'; import 'chai'; import './vendor-_commonjsHelpers.addc3445.js'; import '@vitest/expect'; import './chunk-utils-base.b5ddfcc9.js'; import './chunk-utils-tasks.8781fd71.js'; import 'util'; import '@vitest/spy'; import 'node:url'; import 'node:console'; import 'local-pkg'; import './chunk-integrations-run-once.ea614f17.js'; class NodeSnapshotEnvironment { resolvePath(filepath) { return rpc().resolveSnapshotPath(filepath); } async prepareDirectory(filepath) { await promises.mkdir(filepath, { recursive: true }); } async saveSnapshotFile(filepath, snapshot) { await promises.writeFile(filepath, snapshot, "utf-8"); } async readSnapshotFile(filepath) { if (!existsSync(filepath)) return null; return promises.readFile(filepath, "utf-8"); } async removeSnapshotFile(filepath) { if (existsSync(filepath)) await promises.unlink(filepath); } } let globalSetup = false; async function setupGlobalEnv(config) { await setupCommonEnv(config); Object.defineProperty(globalThis, "__vitest_index__", { value: index, enumerable: false }); if (globalSetup) return; globalSetup = true; setupSnapshotEnvironment(new NodeSnapshotEnvironment()); setupColors(createColors(isatty(1))); const _require = createRequire(import.meta.url); _require.extensions[".css"] = () => ({}); _require.extensions[".scss"] = () => ({}); _require.extensions[".sass"] = () => ({}); const state = getWorkerState(); installSourcemapsSupport({ getSourceMap: (source) => state.moduleCache.getSourceMap(source) }); await setupConsoleLogSpy(); } async function setupConsoleLogSpy() { const stdoutBuffer = /* @__PURE__ */ new Map(); const stderrBuffer = /* @__PURE__ */ new Map(); const timers = /* @__PURE__ */ new Map(); const unknownTestId = "__vitest__unknown_test__"; const { Writable } = await import('node:stream'); const { Console } = await import('node:console'); const { setTimeout, clearTimeout } = getSafeTimers(); function schedule(taskId) { const timer = timers.get(taskId); const { stdoutTime, stderrTime } = timer; clearTimeout(timer.timer); timer.timer = setTimeout(() => { if (stderrTime < stdoutTime) { sendStderr(taskId); sendStdout(taskId); } else { sendStdout(taskId); sendStderr(taskId); } }); } function sendStdout(taskId) { const buffer = stdoutBuffer.get(taskId); if (!buffer) return; const content = buffer.map((i) => String(i)).join(""); const timer = timers.get(taskId); rpc().onUserConsoleLog({ type: "stdout", content: content || "", taskId, time: timer.stdoutTime || RealDate.now(), size: buffer.length }); stdoutBuffer.set(taskId, []); timer.stdoutTime = 0; } function sendStderr(taskId) { const buffer = stderrBuffer.get(taskId); if (!buffer) return; const content = buffer.map((i) => String(i)).join(""); const timer = timers.get(taskId); rpc().onUserConsoleLog({ type: "stderr", content: content || "", taskId, time: timer.stderrTime || RealDate.now(), size: buffer.length }); stderrBuffer.set(taskId, []); timer.stderrTime = 0; } const stdout = new Writable({ write(data, encoding, callback) { var _a, _b; const id = ((_b = (_a = getWorkerState()) == null ? void 0 : _a.current) == null ? void 0 : _b.id) ?? unknownTestId; let timer = timers.get(id); if (timer) { timer.stdoutTime = timer.stdoutTime || RealDate.now(); } else { timer = { stdoutTime: RealDate.now(), stderrTime: RealDate.now(), timer: 0 }; timers.set(id, timer); } let buffer = stdoutBuffer.get(id); if (!buffer) { buffer = []; stdoutBuffer.set(id, buffer); } buffer.push(data); schedule(id); callback(); } }); const stderr = new Writable({ write(data, encoding, callback) { var _a, _b; const id = ((_b = (_a = getWorkerState()) == null ? void 0 : _a.current) == null ? void 0 : _b.id) ?? unknownTestId; let timer = timers.get(id); if (timer) { timer.stderrTime = timer.stderrTime || RealDate.now(); } else { timer = { stderrTime: RealDate.now(), stdoutTime: RealDate.now(), timer: 0 }; timers.set(id, timer); } let buffer = stderrBuffer.get(id); if (!buffer) { buffer = []; stderrBuffer.set(id, buffer); } buffer.push(data); schedule(id); callback(); } }); globalThis.console = new Console({ stdout, stderr, colorMode: true, groupIndentation: 2 }); } async function loadEnvironment(name, executor) { const pkg = await executor.executeId(`vitest-environment-${name}`); if (!pkg || !pkg.default || typeof pkg.default !== "object" || typeof pkg.default.setup !== "function") { throw new Error( `Environment "${name}" is not a valid environment. Package "vitest-environment-${name}" should have default export with "setup" method.` ); } return pkg.default; } async function withEnv(name, options, executor, fn) { const config = environments[name] || await loadEnvironment(name, executor); globalThis.__vitest_environment__ = config.name || name; globalExpect.setState({ environment: config.name || name || "node" }); const env = await config.setup(globalThis, options); try { await fn(); } finally { const { setTimeout } = getSafeTimers(); await new Promise((resolve) => setTimeout(resolve)); await env.teardown(globalThis); } } const runnersFile = resolve(distDir, "runners.js"); async function getTestRunnerConstructor(config, executor) { if (!config.runner) { const { VitestTestRunner, NodeBenchmarkRunner } = await executor.executeFile(runnersFile); return config.mode === "test" ? VitestTestRunner : NodeBenchmarkRunner; } const mod = await executor.executeId(config.runner); if (!mod.default && typeof mod.default !== "function") throw new Error(`Runner must export a default function, but got ${typeof mod.default} imported from ${config.runner}`); return mod.default; } async function getTestRunner(config, executor) { const TestRunner = await getTestRunnerConstructor(config, executor); const testRunner = new TestRunner(config); Object.defineProperty(testRunner, "__vitest_executor", { value: executor, enumerable: false, configurable: false }); if (!testRunner.config) testRunner.config = config; if (!testRunner.importFile) throw new Error('Runner must implement "importFile" method.'); const originalOnTaskUpdate = testRunner.onTaskUpdate; testRunner.onTaskUpdate = async (task) => { const p = rpc().onTaskUpdate(task); await (originalOnTaskUpdate == null ? void 0 : originalOnTaskUpdate.call(testRunner, task)); return p; }; const originalOnCollected = testRunner.onCollected; testRunner.onCollected = async (files) => { rpc().onCollected(files); await (originalOnCollected == null ? void 0 : originalOnCollected.call(testRunner, files)); }; const originalOnAfterRun = testRunner.onAfterRun; testRunner.onAfterRun = async (files) => { const coverage = await takeCoverageInsideWorker(config.coverage, executor); rpc().onAfterSuiteRun({ coverage }); await (originalOnAfterRun == null ? void 0 : originalOnAfterRun.call(testRunner, files)); }; return testRunner; } async function run(files, config, environment, executor) { await setupGlobalEnv(config); await startCoverageInsideWorker(config.coverage, executor); const workerState = getWorkerState(); const runner = await getTestRunner(config, executor); globalThis.__vitest_environment__ = environment; await withEnv(environment.name, environment.options || config.environmentOptions || {}, executor, async () => { for (const file of files) { if (config.isolate) { workerState.mockMap.clear(); resetModules(workerState.moduleCache, true); } workerState.filepath = file; await startTests([file], runner); workerState.filepath = void 0; vi.resetConfig(); vi.restoreAllMocks(); } await stopCoverageInsideWorker(config.coverage, executor); }); workerState.environmentTeardownRun = true; } export { run };