UNPKG

image-asset-manager

Version:

A comprehensive image asset management tool for frontend projects

162 lines 6.59 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); exports.UsageAnalysisIntegration = void 0; const path = __importStar(require("path")); const types_1 = require("../types"); const CodeScanner_1 = require("./CodeScanner"); const ImageAnalyzer_1 = require("./ImageAnalyzer"); /** * Class for integrating usage analysis functionality * This class provides methods for analyzing image usage in a project, * identifying unused files, and generating reports and suggestions */ class UsageAnalysisIntegration { constructor() { this.codeScanner = new CodeScanner_1.CodeScanner(); this.imageAnalyzer = new ImageAnalyzer_1.ImageAnalyzerImpl(); } /** * Analyze usage of image files in the project * @param projectPath Path to the project root * @param imageFiles Array of image files to analyze * @returns UsageAnalysis object containing usage information */ async analyzeUsage(projectPath, imageFiles) { try { return await this.imageAnalyzer.analyzeUsage(projectPath, imageFiles); } catch (error) { throw new types_1.ImageAssetError(types_1.ErrorCode.FILE_NOT_FOUND, `Failed to analyze image usage in project: ${projectPath}`, error, true); } } /** * Get detailed usage statistics for the project * @param usageAnalysis The usage analysis object * @returns Statistics about image usage in the project */ getUsageStatistics(usageAnalysis) { return this.imageAnalyzer.getUsageStatistics(usageAnalysis); } /** * Generate safe deletion suggestions for unused files * @param unusedFiles Array of unused image files * @param projectPath Path to the project root * @returns Array of deletion suggestions with risk assessment */ async generateSafeDeletionSuggestions(unusedFiles, projectPath) { return await this.imageAnalyzer.generateSafeDeletionSuggestions(unusedFiles, projectPath); } /** * Get detailed usage report for a specific file * @param fileId ID of the image file * @param usageAnalysis The usage analysis object * @returns Detailed report of how the file is used */ getFileUsageReport(fileId, usageAnalysis) { return this.imageAnalyzer.getFileUsageReport(fileId, usageAnalysis); } /** * Get files that are likely candidates for cleanup * @param usageAnalysis The usage analysis object * @param options Options for filtering cleanup candidates * @returns Object containing unused and low-usage files */ async getCleanupCandidates(usageAnalysis, options = {}) { const candidates = this.imageAnalyzer.getCleanupCandidates(usageAnalysis, options); // Generate safe deletion suggestions for unused files if (candidates.unused.length > 0) { candidates.suggestions = await this.imageAnalyzer.generateSafeDeletionSuggestions(candidates.unused, "" // Project path is not used in this context ); } return candidates; } /** * Analyze usage patterns across the project * @param usageAnalysis The usage analysis object * @returns Analysis of usage patterns in the project */ analyzeUsagePatterns(usageAnalysis) { return this.imageAnalyzer.analyzeUsagePatterns(usageAnalysis); } /** * Find potentially related files based on naming patterns * @param targetFile The target image file * @param allFiles Array of all image files * @returns Array of related image files */ findRelatedFiles(targetFile, allFiles) { return this.imageAnalyzer.findRelatedFiles(targetFile, allFiles); } /** * Batch process all unused files to generate deletion recommendations * @param usageAnalysis The usage analysis object * @returns Object with detailed recommendations for each unused file */ async generateUnusedFilesReport(usageAnalysis) { const { unusedFiles } = usageAnalysis; // Generate safe deletion suggestions const recommendations = await this.imageAnalyzer.generateSafeDeletionSuggestions(unusedFiles, "" // Project path is not used in this context ); // Calculate total size of unused files const totalSize = unusedFiles.reduce((sum, file) => sum + file.size, 0); // Group by risk level const byRiskLevel = { low: 0, medium: 0, high: 0, }; // Group by directory const byDirectory = {}; // Process each recommendation for (const rec of recommendations) { // Count by risk level byRiskLevel[rec.riskLevel]++; // Count by directory const directory = path.dirname(rec.file.relativePath); byDirectory[directory] = (byDirectory[directory] || 0) + 1; } return { unusedCount: unusedFiles.length, totalSize, recommendations, byRiskLevel, byDirectory, }; } } exports.UsageAnalysisIntegration = UsageAnalysisIntegration; //# sourceMappingURL=UsageAnalysisIntegration.js.map