UNPKG

@fe-fast/unused-css-pruner

Version:

A powerful CSS pruning tool that removes unused styles with support for dynamic class names, CSS-in-JS, and component-level analysis

69 lines (61 loc) 2.64 kB
const { analyzeCSSUsage, cleanCSS } = require('../index.js'); const path = require('path'); const fs = require('fs/promises'); class CSSPrunerPlugin { constructor(options = {}) { this.options = { cssFiles: ['dist/**/*.css'], sourceDirectories: ['src'], outputDir: 'dist', mode: 'analyze', config: {}, onAnalysisComplete: () => { }, ...options }; } apply(compiler) { const pluginName = 'CSSPrunerPlugin'; compiler.hooks.afterEmit.tapAsync(pluginName, async (compilation, callback) => { try { console.log('🔍 CSS Pruner: Starting analysis...'); const { cssFiles, sourceDirectories, outputDir, mode, config, onAnalysisComplete } = this.options; if (mode === 'analyze') { const result = await analyzeCSSUsage({ cssFiles, sourceDirectories, config }); console.log(`📊 Analysis complete: ${result.unusedSelectors.length} unused selectors found`); if (onAnalysisComplete) { onAnalysisComplete(result); } // Generate report if (config.reportFormat === 'json' && config.outputFile) { await fs.writeFile(path.resolve(config.outputFile), JSON.stringify(result, null, 2)); console.log(`📄 Report saved to: ${config.outputFile}`); } } else if (mode === 'clean') { const { result, cleanedFiles } = await cleanCSS({ cssFiles, sourceDirectories, outputDir, config }); console.log(`✨ CSS cleaned: ${result.unusedSelectors.length} selectors removed`); console.log(`📁 Files processed: ${cleanedFiles.length}`); if (onAnalysisComplete) { onAnalysisComplete({ result, cleanedFiles }); } } callback(); } catch (error) { console.error('❌ CSS Pruner error:', error); callback(error); } }); } } module.exports = { CSSPrunerPlugin }; module.exports.default = CSSPrunerPlugin;