#!/usr/bin/env node /** * build-brand-mark.mjs — 构建 Kole UI 项目品牌图标。 * * 真源:.design_library/kole-ui/brand/brand-mark.json * 产物:site/assets/kole-mark.svg、site/assets/kole-mark-mono.svg、 * site/brand-mark.generated.json */ import path from 'node:path'; import { atomicWrite, generatedData, readBrandSpec, renderFaviconSvg, renderMonoSvg, validateBrandSpec, BRAND_ASSET_REL, BRAND_DATA_REL, BRAND_MONO_REL, } from './lib/brand-mark.mjs'; const ROOT = process.cwd(); const spec = readBrandSpec(ROOT); const errors = validateBrandSpec(spec); if (errors.length) { console.error('[build-brand] FAIL'); errors.forEach((error) => console.error(' - ' + error)); process.exit(1); } const favicon = renderFaviconSvg(spec); const mono = renderMonoSvg(spec); const data = generatedData(spec); atomicWrite(path.join(ROOT, BRAND_ASSET_REL), favicon + '\n'); atomicWrite(path.join(ROOT, BRAND_MONO_REL), mono + '\n'); atomicWrite(path.join(ROOT, BRAND_DATA_REL), JSON.stringify(data, null, 2) + '\n'); console.log('[build-brand] OK'); console.log(` name : ${spec.name}`); const paint = spec.geometry.mode === 'stroke' ? `${spec.geometry.strokeWidth}px 描边` : `实心${spec.geometry.opacities ? `(${spec.geometry.opacities.length} 层透明度)` : ''}`; console.log(` geometry : ${spec.geometry.paths.length} 个模块 · ${paint} @24`); console.log(` favicon : ${BRAND_ASSET_REL}`); console.log(` mono : ${BRAND_MONO_REL}`); console.log(` generated : ${BRAND_DATA_REL}`);