Files
upstream-mirror bcf6ef63ad
Some checks failed
📦 Build / build (push) Has been cancelled
🧪 CI Test / test shard (1/4) (push) Has been cancelled
🧪 CI Test / test shard (2/4) (push) Has been cancelled
🧪 CI Test / test shard (3/4) (push) Has been cancelled
🧪 CI Test / test shard (4/4) (push) Has been cancelled
🧪 CI Test / test (push) Has been cancelled
🧪 CI Test / eslint (push) Has been cancelled
🧪 CI Test / typecheck (push) Has been cancelled
🔫 Sync to Pro / dispatch-sync (push) Has been cancelled
🔮 Sync Mirror / sync (push) Has been cancelled
snapshot of https://github.com/dream-num/univer.git (dev, 2026-09-16; blobs > 131072B omitted)
2026-09-16 05:09:45 +05:00

59 lines
1.9 KiB
TypeScript

import type { IPresetPackageJson } from './types.ts';
import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
import path from 'node:path';
function getDependencyDir(packageDir: string, dependencyName: string) {
return path.join(packageDir, 'node_modules', dependencyName);
}
function getBuiltStyleDependencyCssFiles(packageDir: string, packageJson: IPresetPackageJson) {
return Object.keys(packageJson.dependencies ?? {})
.flatMap((dependencyName) => {
if (!dependencyName.startsWith('@univerjs')) {
return [];
}
const dependencyDir = getDependencyDir(packageDir, dependencyName);
const sourceGlobalCss = path.join(dependencyDir, 'src/global.css');
const builtCss = path.join(dependencyDir, 'lib/index.css');
if (!existsSync(sourceGlobalCss)) {
return [];
}
if (!existsSync(builtCss)) {
throw new Error(`Missing built CSS for ${dependencyName}. Build dependency packages before building preset CSS.`);
}
return [builtCss];
});
}
function writePresetCss(packageDir: string, cssFiles: string[]) {
const outputFile = path.join(packageDir, 'lib/index.css');
mkdirSync(path.dirname(outputFile), { recursive: true });
const content = cssFiles
.map((cssFile) => readFileSync(cssFile, 'utf8').trimEnd())
.filter(Boolean)
.join('\n');
writeFileSync(outputFile, `${content}\n`);
}
export async function buildPresetStyles(options: {
packageDir: string;
packageJson: IPresetPackageJson;
}) {
const { packageDir, packageJson } = options;
const cssFiles = getBuiltStyleDependencyCssFiles(packageDir, packageJson);
if (cssFiles.length === 0) {
rmSync(path.join(packageDir, 'lib/index.css'), { force: true });
return;
}
writePresetCss(packageDir, cssFiles);
}