UNPKG

unused-assets-cli

Version:

CLI tool to list and remove unused assets in an Angular project

45 lines (44 loc) 1.56 kB
"use strict"; 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 }; }