From fd6177d479db5bb889470fdee3d97a4992e53ede Mon Sep 17 00:00:00 2001 From: Cheng Zhou Date: Wed, 4 Mar 2026 16:23:31 +0800 Subject: [PATCH] chore(ui): add enterprise ui contract checks --- frontend/package.json | 3 ++- frontend/scripts/verify-ui-contract.mjs | 31 +++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 frontend/scripts/verify-ui-contract.mjs diff --git a/frontend/package.json b/frontend/package.json index 0bd25545..9621bd0c 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -7,7 +7,8 @@ "dev": "vite", "build": "vite build", "preview": "vite preview", - "type-check": "vue-tsc --noEmit" + "type-check": "vue-tsc --noEmit", + "ui:contract": "node scripts/verify-ui-contract.mjs" }, "dependencies": { "axios": "^1.6.8", diff --git a/frontend/scripts/verify-ui-contract.mjs b/frontend/scripts/verify-ui-contract.mjs new file mode 100644 index 00000000..60743884 --- /dev/null +++ b/frontend/scripts/verify-ui-contract.mjs @@ -0,0 +1,31 @@ +import { readFileSync } from "node:fs"; + +const main = readFileSync("src/styles/main.css", "utf8"); +const unified = readFileSync("src/styles/unified-page.css", "utf8"); + +const requiredMainTokens = [ + "--ctms-primary", + "--ctms-text-main", + "--ctms-bg-base", + "--ctms-radius", + "--ctms-shadow" +]; + +const requiredUnifiedTokens = [ + "--unified-shell-bg", + "--unified-shell-radius", + ".unified-action-bar", + ".unified-section" +]; + +const missing = [ + ...requiredMainTokens.filter((t) => !main.includes(t)), + ...requiredUnifiedTokens.filter((t) => !unified.includes(t)) +]; + +if (missing.length) { + console.error("UI contract check failed. Missing:", missing.join(", ")); + process.exit(1); +} + +console.log("UI contract check passed");