unused-assets-cli
Version:
CLI tool to list and remove unused assets in an Angular project
45 lines (44 loc) • 1.56 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.findUnusedAssets = findUnusedAssets;
const fast_glob_1 = __importDefault(require("fast-glob"));
const child_process_1 = require("child_process");
const path_1 = __importDefault(require("path"));
const fs_1 = require("fs");
/**
* Check if an asset is referenced in project files
* Safely matches both exact filename and name without extension
*/
function isReferenced(filePath) {
const fileName = path_1.default.basename(filePath);
const nameNoExt = path_1.default.parse(fileName).name;
// escape for regex
const esc = (str) => str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
const pattern = `\\b(${esc(nameNoExt)}(\\.[a-zA-Z0-9]+)?|${esc(fileName)})\\b`;
try {
(0, child_process_1.execSync)(`grep -R -n -E "${pattern}" src/`, { stdio: "ignore" });
return true;
}
catch {
return false;
}
}
/**
* Find unused assets matching glob patterns
*/
async function findUnusedAssets(patterns) {
console.log("🔍 Searching for unused assets...");
const assets = await (0, fast_glob_1.default)(patterns, { dot: false });
const unused = [];
let totalSize = 0;
for (const file of assets) {
if (!isReferenced(file)) {
unused.push(file);
totalSize += (0, fs_1.statSync)(file).size;
}
}
return { files: unused, totalSize };
}