Files
2026-07-13 13:18:05 +08:00

47 lines
1.6 KiB
JavaScript

import { rm } from 'node:fs/promises';
import { dirname, relative, resolve } from 'node:path';
import {
assertInsideDir,
readPackageJson,
resolvePackagePath,
resolvePackageRoot,
toPosixPath,
} from './package-utils.mjs';
const packageRoot = resolvePackageRoot();
const packageJson = readPackageJson(packageRoot);
const packageName = packageJson.name ?? packageRoot;
const targetDirs = getCleanTargetDirs(packageJson).map(target =>
resolvePackagePath(packageRoot, target, 'clean target'),
);
for (const targetDir of [...new Set(targetDirs.map(dir => resolve(dir)))]) {
assertInsideDir(packageRoot, targetDir, 'Clean target');
if (resolve(targetDir) === resolve(packageRoot)) {
throw new Error(`Refusing to clean the package root: ${targetDir}`);
}
await rm(targetDir, { recursive: true, force: true });
console.log(`[package-clean] Removed ${formatPackagePath(targetDir)} for ${packageName}.`);
}
function getCleanTargetDirs(metadata) {
const configuredTargets = metadata.aholoClean?.targets;
if (Array.isArray(configuredTargets) && configuredTargets.length > 0) {
return configuredTargets;
}
const outputDirs = [metadata.main, metadata.module, metadata.types, metadata.typings]
.filter(value => typeof value === 'string' && value.trim() !== '')
.map(filePath => dirname(filePath))
.filter(dir => dir !== '.');
return outputDirs.length > 0 ? [...new Set(outputDirs)] : ['dist'];
}
function formatPackagePath(filePath) {
return toPosixPath(relative(packageRoot, filePath));
}