import { spawnSync } from "node:child_process"; const packageByModule = { access: "@govoplan/access-webui", admin: "@govoplan/admin-webui", audit: "@govoplan/audit-webui", campaigns: "@govoplan/campaign-webui", dashboard: "@govoplan/dashboard-webui", docs: "@govoplan/docs-webui", files: "@govoplan/files-webui", idm: "@govoplan/idm-webui", mail: "@govoplan/mail-webui", organizations: "@govoplan/organizations-webui", ops: "@govoplan/ops-webui", policy: "@govoplan/policy-webui", scheduling: "@govoplan/scheduling-webui" }; const cases = [ { name: "core-only", modules: [] }, { name: "access-only", modules: ["access"] }, { name: "admin-only", modules: ["admin"] }, { name: "access-with-admin", modules: ["access", "admin"] }, { name: "admin-with-policy-and-audit", modules: ["access", "admin", "policy", "audit"] }, { name: "dashboard-only", modules: ["dashboard"] }, { name: "files-only", modules: ["files"] }, { name: "mail-only", modules: ["mail"] }, { name: "organizations-only", modules: ["organizations"] }, { name: "idm-with-organizations", modules: ["organizations", "idm"] }, { name: "campaign-only", modules: ["campaigns"] }, { name: "campaign-with-files-no-mail", modules: ["campaigns", "files"] }, { name: "campaign-with-mail-no-files", modules: ["campaigns", "mail"] }, { name: "scheduling-only", modules: ["scheduling"] }, { name: "scheduling-with-calendar", modules: ["scheduling", "calendar"] }, { name: "docs-and-ops", modules: ["access", "docs", "ops"] }, { name: "full-product", modules: ["access", "admin", "policy", "audit", "dashboard", "organizations", "idm", "campaigns", "files", "mail", "docs", "ops", "scheduling"] } ]; const npmExec = process.env.npm_execpath; const command = npmExec ? process.execPath : (process.platform === "win32" ? "npm.cmd" : "npm"); const baseArgs = npmExec ? [npmExec, "run", "build"] : ["run", "build"]; for (const testCase of cases) { const packages = testCase.modules.map((moduleId) => packageByModule[moduleId]).join(","); const env = { ...process.env, GOVOPLAN_WEBUI_MODULE_PACKAGES: packages }; delete env.npm_config_tmp; delete env.NPM_CONFIG_TMP; if (process.env.GOVOPLAN_NPM_USERCONFIG) { env.NPM_CONFIG_USERCONFIG = process.env.GOVOPLAN_NPM_USERCONFIG; delete env.npm_config_userconfig; } console.log(`\n== WebUI module permutation: ${testCase.name} ==`); const result = spawnSync(command, baseArgs, { cwd: new URL("..", import.meta.url), env, stdio: "inherit" }); if (result.status !== 0) { process.exit(result.status ?? 1); } }