import fs from "fs"; import path from "path"; const [ , , clientName, variantName ] = process.argv; if (!clientName || !variantName) { console.error("❌ Usage: node build-css.js "); process.exit(1); } const ROOT = process.cwd(); const DIST_DIR = path.join( ROOT, "dist", clientName, variantName ); const OUTPUT_FILE = path.join(DIST_DIR, "min.css"); const SOURCES = [ // 1. Tokens "2-tokens/2-generated", "2-tokens/overrides.css", // 2. Framework "3-styles/ingeli-std/1-behaviors", "3-styles/ingeli-std/2-components", "3-styles/ingeli-std/utilities", "3-styles/ingeli-ils/1-behaviors", "3-styles/ingeli-ils/2-components", "3-styles/ingeli-ils/utilities", "3-styles/cloud-engine/1-behaviors", "3-styles/cloud-engine/2-components", "3-styles/cloud-engine/utilities", // 3. Client commons `4-clients/${clientName}/1-commons/styles`, // 4. Client apps `4-clients/${clientName}/app-*/styles`, // 5. Variant (last override) `4-clients/${clientName}/variants/${variantName}` ]; function collectCssFiles(entry) { const fullPath = path.join(ROOT, entry); if (!fs.existsSync(fullPath)) return []; const stat = fs.statSync(fullPath); if (stat.isFile() && entry.endsWith(".css")) { return [fullPath]; } if (stat.isDirectory()) { return fs.readdirSync(fullPath) .flatMap(f => collectCssFiles(path.join(entry, f))); } return []; } // --- Build --- console.log(`🔨 Building CSS`); console.log(` Client : ${clientName}`); console.log(` Variant : ${variantName}`); fs.mkdirSync(DIST_DIR, { recursive: true }); const files = SOURCES.flatMap(collectCssFiles); let output = `/* Ingeli Design System */\n`; output += `/* Client: ${clientName} */\n`; output += `/* Variant: ${variantName} */\n\n`; for (const file of files) { console.log(" +", path.relative(ROOT, file)); output += `\n/* === ${path.relative(ROOT, file)} === */\n`; output += fs.readFileSync(file, "utf8"); } fs.writeFileSync(OUTPUT_FILE, output, "utf8"); console.log(`✅ CSS generated: ${OUTPUT_FILE}`);