You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
87 lines
3.0 KiB
87 lines
3.0 KiB
2 years ago
|
import { promises } from 'node:fs';
|
||
|
import { g as getWorkerState, a as resetModules } from './chunk-mock-date.a1c85759.js';
|
||
|
import { v as vi } from './chunk-utils-import.2baa69a9.js';
|
||
|
import { a as envs } from './chunk-env-node.b3664da2.js';
|
||
|
import { a as setupGlobalEnv, s as startTests, w as withEnv } from './chunk-runtime-setup.731b2b04.js';
|
||
|
import 'node:path';
|
||
|
import 'picocolors';
|
||
|
import 'local-pkg';
|
||
|
import './chunk-utils-env.b861e3a0.js';
|
||
|
import 'node:url';
|
||
|
import 'path';
|
||
|
import './chunk-runtime-chain.6df5a66b.js';
|
||
|
import 'util';
|
||
|
import 'chai';
|
||
|
import './vendor-_commonjsHelpers.addc3445.js';
|
||
|
import './chunk-utils-timers.52534f96.js';
|
||
|
import './vendor-index.723a074f.js';
|
||
|
import 'tinyspy';
|
||
|
import './chunk-utils-source-map.60562959.js';
|
||
|
import './chunk-runtime-rpc.7f83c8a9.js';
|
||
|
import 'fs';
|
||
|
import 'node:console';
|
||
|
import 'perf_hooks';
|
||
|
import './chunk-integrations-coverage.44413252.js';
|
||
|
import './chunk-runtime-error.fad2c32b.js';
|
||
|
import 'vite-node/source-map';
|
||
|
|
||
|
function groupBy(collection, iteratee) {
|
||
|
return collection.reduce((acc, item) => {
|
||
|
const key = iteratee(item);
|
||
|
acc[key] || (acc[key] = []);
|
||
|
acc[key].push(item);
|
||
|
return acc;
|
||
|
}, {});
|
||
|
}
|
||
|
async function run(files, config) {
|
||
|
await setupGlobalEnv(config);
|
||
|
const workerState = getWorkerState();
|
||
|
if (config.browser) {
|
||
|
workerState.mockMap.clear();
|
||
|
await startTests(files, config);
|
||
|
return;
|
||
|
}
|
||
|
const filesWithEnv = await Promise.all(files.map(async (file) => {
|
||
|
var _a, _b;
|
||
|
const code = await promises.readFile(file, "utf-8");
|
||
|
const env = ((_a = code.match(/@(?:vitest|jest)-environment\s+?([\w-]+)\b/)) == null ? void 0 : _a[1]) || config.environment || "node";
|
||
|
const envOptions = JSON.parse(((_b = code.match(/@(?:vitest|jest)-environment-options\s+?(.+)/)) == null ? void 0 : _b[1]) || "null");
|
||
|
return {
|
||
|
file,
|
||
|
env,
|
||
|
envOptions: envOptions ? { [env]: envOptions } : null
|
||
|
};
|
||
|
}));
|
||
|
const filesByEnv = groupBy(filesWithEnv, ({ env }) => env);
|
||
|
const orderedEnvs = envs.concat(
|
||
|
Object.keys(filesByEnv).filter((env) => !envs.includes(env))
|
||
|
);
|
||
|
for (const env of orderedEnvs) {
|
||
|
const environment = env;
|
||
|
const files2 = filesByEnv[environment];
|
||
|
if (!files2 || !files2.length)
|
||
|
continue;
|
||
|
globalThis.__vitest_environment__ = environment;
|
||
|
const filesByOptions = groupBy(files2, ({ envOptions }) => JSON.stringify(envOptions));
|
||
|
for (const options of Object.keys(filesByOptions)) {
|
||
|
const files3 = filesByOptions[options];
|
||
|
if (!files3 || !files3.length)
|
||
|
continue;
|
||
|
await withEnv(environment, files3[0].envOptions || config.environmentOptions || {}, async () => {
|
||
|
for (const { file } of files3) {
|
||
|
if (config.isolate) {
|
||
|
workerState.mockMap.clear();
|
||
|
resetModules(workerState.moduleCache, true);
|
||
|
}
|
||
|
workerState.filepath = file;
|
||
|
await startTests([file], config);
|
||
|
workerState.filepath = void 0;
|
||
|
vi.resetConfig();
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
export { run };
|