50 lines · 1.9 KB · TypeScript
RawDownload
// Target resolution: the vitest project sets E2E_TARGET; scenarios resolve it// once per worker. Adding a target = one factory entry here + a project in// vitest.config.ts + a globalsetup that boots (or attaches to) the instance.import type { Target } from "../src/target";import { cliTarget } from "./cli";import { cloudTarget } from "./cloud";import { cloudflareTarget } from "./cloudflare";import { desktopTarget } from "./desktop";import { localTarget } from "./local";import { selfhostTarget } from "./selfhost";import { selfhostDockerTarget } from "./selfhost-docker"; const factories: Record<string, () => Target> = {  cloud: cloudTarget,  selfhost: selfhostTarget,  "selfhost-docker": selfhostDockerTarget,  cloudflare: cloudflareTarget,  desktop: desktopTarget,  // The packaged desktop bundle launches its own app per scenario, same as  // `desktop` — no standard surfaces to carry. See desktop-packaged.globalsetup.  "desktop-packaged": desktopTarget,  // The packaged bundle inside a GUI guest (one per OS), driven over CDP from  // the host. Carries no surfaces (the scenario drives CDP itself). See  // desktop-<os>.globalsetup.  "desktop-macos": desktopTarget,  "desktop-linux": desktopTarget,  "desktop-windows": desktopTarget,  local: localTarget,  // The supervised CLI daemon inside a VM, one project per guest OS — restart()  // is a real reboot. See setup/cli.globalsetup.ts.  "cli-macos": cliTarget,  "cli-linux": cliTarget,  "cli-windows": cliTarget,}; let current: Target | undefined; export const resolveTarget = (): Target => {  if (current) return current;  const name = process.env.E2E_TARGET;  const factory = name ? factories[name] : undefined;  if (!factory) {    throw new Error(      `E2E_TARGET=${JSON.stringify(name)} — expected one of: ${Object.keys(factories).join(", ")}. ` +        `Run via the vitest projects (e.g. \`vitest run --project cloud\`).`,    );  }  current = factory();  return current;};