52 lines
1.9 KiB
Plaintext
52 lines
1.9 KiB
Plaintext
import { fileURLToPath } from 'node:url';
|
|
import { resolve, basename } from 'pathe';
|
|
import sirv from 'sirv';
|
|
import { coverageConfigDefaults } from 'vitest/config';
|
|
|
|
var index = (ctx) => {
|
|
return {
|
|
name: "vitest:ui",
|
|
apply: "serve",
|
|
configureServer(server) {
|
|
const uiOptions = ctx.config;
|
|
const base = uiOptions.uiBase;
|
|
const coverageFolder = resolveCoverageFolder(ctx);
|
|
const coveragePath = coverageFolder ? coverageFolder[1] : void 0;
|
|
if (coveragePath && base === coveragePath)
|
|
throw new Error(`The ui base path and the coverage path cannot be the same: ${base}, change coverage.reportsDirectory`);
|
|
coverageFolder && server.middlewares.use(coveragePath, sirv(coverageFolder[0], {
|
|
single: true,
|
|
dev: true,
|
|
setHeaders: (res) => {
|
|
res.setHeader("Cache-Control", "public,max-age=0,must-revalidate");
|
|
}
|
|
}));
|
|
const clientDist = resolve(fileURLToPath(import.meta.url), "../client");
|
|
server.middlewares.use(base, sirv(clientDist, {
|
|
single: true,
|
|
dev: true
|
|
}));
|
|
}
|
|
};
|
|
};
|
|
function resolveCoverageFolder(ctx) {
|
|
const options = ctx.config;
|
|
const htmlReporter = options.api?.port && options.coverage?.enabled ? options.coverage.reporter.find((reporter) => {
|
|
if (typeof reporter === "string")
|
|
return reporter === "html";
|
|
return reporter[0] === "html";
|
|
}) : void 0;
|
|
if (!htmlReporter)
|
|
return void 0;
|
|
const root = resolve(
|
|
ctx.config?.root || options.root || process.cwd(),
|
|
options.coverage.reportsDirectory || coverageConfigDefaults.reportsDirectory
|
|
);
|
|
const subdir = Array.isArray(htmlReporter) && htmlReporter.length > 1 && "subdir" in htmlReporter[1] ? htmlReporter[1].subdir : void 0;
|
|
if (!subdir || typeof subdir !== "string")
|
|
return [root, `/${basename(root)}/`];
|
|
return [resolve(root, subdir), `/${basename(root)}/${subdir}/`];
|
|
}
|
|
|
|
export { index as default };
|