1
Fork 0
ingeli-design-system/5-build/build-css.js

91 lines
2.3 KiB
JavaScript

import fs from "fs";
import path from "path";
import { stripBOM } from "./utils/fs-utils.js";
const [ , , clientName, variantName ] = process.argv;
if (!clientName || !variantName) {
console.error("❌ Usage: node build-css.js <client> <variant>");
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 += stripBOM(fs.readFileSync(file, "utf8"));
}
fs.writeFileSync(OUTPUT_FILE, output, "utf8");
console.log(`✅ CSS generated: ${OUTPUT_FILE}`);