mirror of
https://github.com/CharaChorder/DeviceManager.git
synced 2026-01-19 08:22:53 +00:00
123 lines
4.1 KiB
JavaScript
123 lines
4.1 KiB
JavaScript
import { pathToFileURL } from 'node:url';
|
|
import { performance } from 'node:perf_hooks';
|
|
import { isContext } from 'node:vm';
|
|
import { ModuleCacheMap } from 'vite-node/client';
|
|
import { workerId } from 'tinypool';
|
|
import { c as createBirpc } from './vendor-index.b271ebe4.js';
|
|
import { resolve } from 'pathe';
|
|
import { installSourcemapsSupport } from 'vite-node/source-map';
|
|
import { d as distDir } from './vendor-paths.84fc7a99.js';
|
|
import { l as loadEnvironment } from './vendor-environments.c9c96bf7.js';
|
|
import { b as startVitestExecutor } from './vendor-execute.a63e187f.js';
|
|
import { createCustomConsole } from './chunk-runtime-console.ea222ffb.js';
|
|
import { c as createSafeRpc } from './vendor-rpc.cbd8e972.js';
|
|
import './vendor-index.0b5b3600.js';
|
|
import 'acorn';
|
|
import 'node:module';
|
|
import 'node:fs';
|
|
import 'node:assert';
|
|
import 'node:process';
|
|
import 'node:path';
|
|
import 'node:v8';
|
|
import 'node:util';
|
|
import 'node:console';
|
|
import 'local-pkg';
|
|
import 'vite-node/utils';
|
|
import '@vitest/utils/error';
|
|
import './vendor-global.97e4527c.js';
|
|
import '@vitest/utils';
|
|
import './vendor-base.9c08bbd0.js';
|
|
import 'vite-node/constants';
|
|
import 'node:stream';
|
|
import './vendor-date.6e993429.js';
|
|
|
|
const entryFile = pathToFileURL(resolve(distDir, "entry-vm.js")).href;
|
|
async function run(ctx) {
|
|
var _a;
|
|
const moduleCache = new ModuleCacheMap();
|
|
const mockMap = /* @__PURE__ */ new Map();
|
|
const { config, port } = ctx;
|
|
let setCancel = (_reason) => {
|
|
};
|
|
const onCancel = new Promise((resolve2) => {
|
|
setCancel = resolve2;
|
|
});
|
|
const rpc = createBirpc(
|
|
{
|
|
onCancel: setCancel
|
|
},
|
|
{
|
|
eventNames: ["onUserConsoleLog", "onFinished", "onCollected", "onWorkerExit"],
|
|
post(v) {
|
|
port.postMessage(v);
|
|
},
|
|
on(fn) {
|
|
port.addListener("message", fn);
|
|
}
|
|
}
|
|
);
|
|
const environment = await loadEnvironment(ctx.environment.name, ctx.config.root);
|
|
if (!environment.setupVM) {
|
|
const envName = ctx.environment.name;
|
|
const packageId = envName[0] === "." ? envName : `vitest-environment-${envName}`;
|
|
throw new TypeError(
|
|
`Environment "${ctx.environment.name}" is not a valid environment. Path "${packageId}" doesn't support vm environment because it doesn't provide "setupVM" method.`
|
|
);
|
|
}
|
|
const state = {
|
|
ctx,
|
|
moduleCache,
|
|
config,
|
|
mockMap,
|
|
onCancel,
|
|
environment,
|
|
durations: {
|
|
environment: performance.now(),
|
|
prepare: performance.now()
|
|
},
|
|
rpc: createSafeRpc(rpc)
|
|
};
|
|
installSourcemapsSupport({
|
|
getSourceMap: (source) => moduleCache.getSourceMap(source)
|
|
});
|
|
const vm = await environment.setupVM(ctx.environment.options || ctx.config.environmentOptions || {});
|
|
state.durations.environment = performance.now() - state.durations.environment;
|
|
process.env.VITEST_WORKER_ID = String(ctx.workerId);
|
|
process.env.VITEST_POOL_ID = String(workerId);
|
|
process.env.VITEST_VM_POOL = "1";
|
|
if (!vm.getVmContext)
|
|
throw new TypeError(`Environment ${ctx.environment.name} doesn't provide "getVmContext" method. It should return a context created by "vm.createContext" method.`);
|
|
const context = vm.getVmContext();
|
|
if (!isContext(context))
|
|
throw new TypeError(`Environment ${ctx.environment.name} doesn't provide a valid context. It should be created by "vm.createContext" method.`);
|
|
context.__vitest_worker__ = state;
|
|
context.process = process;
|
|
context.global = context;
|
|
context.console = createCustomConsole(state);
|
|
context.setImmediate = setImmediate;
|
|
context.clearImmediate = clearImmediate;
|
|
if (ctx.invalidates) {
|
|
ctx.invalidates.forEach((fsPath) => {
|
|
moduleCache.delete(fsPath);
|
|
moduleCache.delete(`mock:${fsPath}`);
|
|
});
|
|
}
|
|
ctx.files.forEach((i) => moduleCache.delete(i));
|
|
const executor = await startVitestExecutor({
|
|
context,
|
|
moduleCache,
|
|
mockMap,
|
|
state
|
|
});
|
|
context.__vitest_mocker__ = executor.mocker;
|
|
const { run: run2 } = await executor.importExternalModule(entryFile);
|
|
try {
|
|
await run2(ctx.files, ctx.config, executor);
|
|
} finally {
|
|
await ((_a = vm.teardown) == null ? void 0 : _a.call(vm));
|
|
state.environmentTeardownRun = true;
|
|
}
|
|
}
|
|
|
|
export { run };
|