Files
qinglong/scripts/ql3-clean-package-artifacts.cjs
T

62 lines
2.1 KiB
JavaScript

#!/usr/bin/env node
const fs = require('node:fs');
const path = require('node:path');
function removeEmittedSourceArtifacts(sourceDirectory) {
if (!fs.existsSync(sourceDirectory)) return;
const pending = [sourceDirectory];
while (pending.length > 0) {
const directory = pending.pop();
for (const entry of fs.readdirSync(directory, { withFileTypes: true })) {
const target = path.join(directory, entry.name);
if (entry.isDirectory()) {
pending.push(target);
continue;
}
if (!entry.isFile()) continue;
const source = target.replace(
/\.d\.ts(?:\.map)?$|\.js(?:\.map)?$/,
'.ts',
);
if (source === target || !fs.existsSync(source)) continue;
fs.rmSync(target);
}
}
}
function cleanQingLong3PackageArtifacts(root) {
const packagesDirectory = path.join(root, 'packages');
const removed = [];
for (const entry of fs.readdirSync(packagesDirectory, {
withFileTypes: true,
})) {
if (!entry.isDirectory() || !entry.name.startsWith('ql3-')) continue;
const packageDirectory = path.join(packagesDirectory, entry.name);
const manifestPath = path.join(packageDirectory, 'package.json');
if (!fs.existsSync(manifestPath)) continue;
const artifactDirectory = path.join(packageDirectory, 'dist');
const relativeArtifactDirectory = path.relative(root, artifactDirectory);
if (
relativeArtifactDirectory === '..' ||
relativeArtifactDirectory.startsWith(`..${path.sep}`) ||
path.basename(artifactDirectory) !== 'dist'
) {
throw new Error('Refusing to clean an invalid QL3 artifact directory');
}
fs.rmSync(artifactDirectory, { force: true, recursive: true });
removeEmittedSourceArtifacts(path.join(packageDirectory, 'src'));
removed.push(relativeArtifactDirectory);
}
return Object.freeze(removed.sort());
}
module.exports = { cleanQingLong3PackageArtifacts };
if (require.main === module) {
const removed = cleanQingLong3PackageArtifacts(process.cwd());
process.stdout.write(
`${JSON.stringify({ schemaVersion: 1, removed, compatible: true })}\n`,
);
}