UNPKG

codebase-asset-optimizer

Version:

Professional CLI development tool for optimizing and managing assets in codebases. Detects unused assets, optimizes images to WebP, optimizes videos, and automatically replaces asset references. GIFs are preserved unchanged to maintain animation functiona

109 lines 3.4 kB
import path from "path"; import fs from "fs"; /** * Default configuration for the asset optimizer */ export function createDefaultConfig(projectRoot) { return { projectRoot, publicDir: path.join(projectRoot, "public"), sourceDir: projectRoot, imageExtensions: [ ".png", ".jpg", ".jpeg", ".webp", ".ico", ".bmp", ".tiff", ".svg", ".gif", ], videoExtensions: [".mp4", ".webm", ".mov", ".avi", ".mkv", ".m4v"], excludePatterns: [ "node_modules", ".git", ".next", "dist", "build", ".DS_Store", "Thumbs.db", "*.log", ".env*", "coverage", ".nyc_output", ], largeFileThreshold: 500 * 1024, // 500KB reportFile: path.join(projectRoot, "asset-audit-report.json"), backupDir: path.join(projectRoot, ".asset-backup"), optimization: { images: { targetFormat: "webp", quality: 90, // Higher quality to preserve image fidelity maxWidth: 2048, maxHeight: 2048, onlyIfSmaller: true, // Critical: only optimize if it reduces size }, videos: { targetFormats: ["mp4", "webm"], // MP4 first for better browser compatibility quality: "medium", maxWidth: 1920, maxHeight: 1080, onlyIfSmaller: true, // Critical: only optimize if it reduces size }, }, }; } /** * Load configuration from file or use defaults */ export function loadConfig(projectRoot, configPath) { const defaultConfig = createDefaultConfig(projectRoot); if (configPath) { try { // TODO: Implement config file loading // const userConfig = require(configPath); // return { ...defaultConfig, ...userConfig }; } catch (error) { console.warn(`Could not load config from ${configPath}, using defaults`); } } return defaultConfig; } /** * Detect project structure and adjust config accordingly */ export function detectProjectStructure(projectRoot) { const adjustments = {}; // Check for common public directory names const publicDirCandidates = [ "public", "assets", "static", "dist/public", "build/public", "src/assets", "public/assets", ]; for (const candidate of publicDirCandidates) { const candidatePath = path.join(projectRoot, candidate); if (fs.existsSync(candidatePath) && fs.statSync(candidatePath).isDirectory()) { adjustments.publicDir = candidatePath; break; } } // Check for common source directory structures const sourceDirCandidates = ["src", "source", "app", "lib"]; for (const candidate of sourceDirCandidates) { const candidatePath = path.join(projectRoot, candidate); if (fs.existsSync(candidatePath) && fs.statSync(candidatePath).isDirectory()) { adjustments.sourceDir = candidatePath; break; } } return adjustments; } //# sourceMappingURL=config.js.map