@webcontainer/test
Version:
Utilities for testing applications in WebContainers
56 lines (54 loc) • 1.58 kB
JavaScript
// src/commands/index.ts
import { resolve } from "node:path";
import { snapshot } from "@webcontainer/snapshot";
var readDirectory = async (context, directory) => {
const root = context.project.config.root;
const resolved = resolve(root, directory);
if (!resolved.startsWith(root)) {
throw new Error(
`[vitest:webcontainers] Cannot read files outside project root:
${JSON.stringify(
{ directory, resolved },
null,
2
)}`
);
}
const tree = await snapshot(directory);
return tree.toString("base64");
};
// src/plugin.ts
var COEP = "Cross-Origin-Embedder-Policy";
var COOP = "Cross-Origin-Opener-Policy";
function vitestWebContainers() {
return {
name: "vitest:webcontainers",
config(config, env) {
if (env.mode !== "test") {
return;
}
config.test ||= {};
config.test.browser ||= {};
config.test.browser.commands ||= {};
config.test.browser.commands.readDirectory = readDirectory;
config.server ||= {};
config.server.headers ||= {};
const headers = config.server.headers;
if (headers[COEP] && headers[COEP] !== "require-corp") {
console.warn(
`[vitest:webcontainers] Overriding ${COEP} header during test run`
);
}
if (headers[COOP] && headers[COOP] !== "same-origin") {
console.warn(
`[vitest:webcontainers] Overriding ${COOP} header during test run`
);
}
headers[COEP] = "require-corp";
headers[COOP] = "same-origin";
}
};
}
export {
vitestWebContainers
};