@nx/angular-rsbuild
Version:
Rsbuild Plugin for building Angular.
74 lines (73 loc) • 2.6 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.deleteOutputDir = deleteOutputDir;
exports.getOutputHashFormat = getOutputHashFormat;
const promises_1 = require("node:fs/promises");
const node_path_1 = require("node:path");
/**
* Delete an output directory, but error out if it's the root of the project.
*/
async function deleteOutputDir(root, outputPath, emptyOnlyDirectories) {
const resolvedOutputPath = (0, node_path_1.resolve)(root, outputPath);
if (resolvedOutputPath === root) {
throw new Error('Output path MUST not be project root directory!');
}
const directoriesToEmpty = emptyOnlyDirectories
? new Set(emptyOnlyDirectories.map((directory) => (0, node_path_1.join)(resolvedOutputPath, directory)))
: undefined;
// Avoid removing the actual directory to avoid errors in cases where the output
// directory is mounted or symlinked. Instead the contents are removed.
let entries;
try {
entries = await (0, promises_1.readdir)(resolvedOutputPath);
}
catch (error) {
if (error instanceof Error && 'code' in error && error.code === 'ENOENT') {
return;
}
throw error;
}
for (const entry of entries) {
const fullEntry = (0, node_path_1.join)(resolvedOutputPath, entry);
// Leave requested directories. This allows symlinks to continue to function.
if (directoriesToEmpty?.has(fullEntry)) {
await deleteOutputDir(resolvedOutputPath, fullEntry);
continue;
}
await (0, promises_1.rm)(fullEntry, { force: true, recursive: true, maxRetries: 3 });
}
}
function getOutputHashFormat(outputHashing = 'none', length = 8) {
const hashTemplate = `.[contenthash:${length}]`;
switch (outputHashing) {
case 'media':
return {
chunk: '',
extract: '',
file: hashTemplate,
script: '',
};
case 'bundles':
return {
chunk: hashTemplate,
extract: hashTemplate,
file: '',
script: hashTemplate,
};
case 'all':
return {
chunk: hashTemplate,
extract: hashTemplate,
file: hashTemplate,
script: hashTemplate,
};
case 'none':
default:
return {
chunk: '',
extract: '',
file: '',
script: '',
};
}
}