UNPKG

filesops

Version:

Advanced file operations library with search, type detection, size calculation, and permission utilities

300 lines (227 loc) 9.07 kB
# filesops A comprehensive Node.js library for advanced file operations including search, type detection, size calculation, and permission utilities. ## Features - **Advanced File Search**: Powerful search functionality with pattern matching, filtering, and recursive directory traversal - **File Type Detection**: Intelligent file type detection using both file extensions and magic numbers - **Size Calculation**: Comprehensive file and directory size utilities with human-readable formatting - **Permission Checking**: Cross-platform file permission analysis and validation ## Installation ```bash npm install filesops ``` ## Quick Start ```typescript import { FileSearch, FileTypeDetector, SizeCalculator, PermissionChecker } from 'filesops'; // Search for JavaScript files larger than 1MB const result = await FileSearch.search('./src', { extensions: ['.js', '.ts'], minSize: 1024 * 1024, // 1MB pattern: '*.component.*' }); // Detect file type const fileType = await FileTypeDetector.detectFromContent('./image.png'); console.log(fileType.mimeType); // 'image/png' // Calculate directory size const size = await SizeCalculator.getDirectorySize('./dist'); console.log(size.formatted); // '15.2 MB' // Check file permissions const permissions = await PermissionChecker.getPermissions('./script.sh'); console.log(permissions.executable); // true/false ``` ## API Reference ### FileSearch Advanced file searching with multiple filtering options. #### Methods - `search(path, options)` - Search for files with advanced filtering - `findByName(path, pattern, caseSensitive)` - Find files by name pattern - `findByExtension(path, extensions)` - Find files by extension - `findLargeFiles(path, minSize)` - Find files larger than specified size - `findRecentFiles(path, since)` - Find recently modified files - `exists(path)` - Check if file/directory exists #### Search Options ```typescript interface SearchOptions { pattern?: string | RegExp; // Name pattern to match extensions?: string[]; // File extensions to include maxDepth?: number; // Maximum recursion depth includeHidden?: boolean; // Include hidden files caseSensitive?: boolean; // Case sensitive pattern matching followSymlinks?: boolean; // Follow symbolic links maxSize?: number; // Maximum file size in bytes minSize?: number; // Minimum file size in bytes modifiedSince?: Date; // Files modified after this date modifiedBefore?: Date; // Files modified before this date } ``` ### FileTypeDetector Intelligent file type detection and classification. #### Methods - `detectFromPath(filePath)` - Detect type from file extension - `detectFromContent(filePath)` - Detect type from file content (magic numbers) - `isTextFile(filePath)` - Check if file is text-based - `getSupportedExtensions()` - Get all supported file extensions - `getExtensionsByCategory(category)` - Get extensions for a specific category #### File Type Information ```typescript interface FileTypeInfo { extension: string; // File extension mimeType: string; // MIME type category: string; // File category (Code, Image, Document, etc.) description: string; // Human-readable description isBinary: boolean; // Is binary file isText: boolean; // Is text file isImage: boolean; // Is image file isVideo: boolean; // Is video file isAudio: boolean; // Is audio file isArchive: boolean; // Is archive file isExecutable: boolean; // Is executable file } ``` ### SizeCalculator File and directory size calculation utilities. #### Methods - `getFileSize(filePath)` - Get file size information - `getDirectorySize(dirPath, includeHidden)` - Calculate total directory size - `getDirectoryStats(dirPath, includeHidden)` - Get comprehensive directory statistics - `findLargestFiles(dirPath, limit, includeHidden)` - Find largest files in directory - `compareItems(paths)` - Compare sizes of multiple files/directories - `getSizeByPattern(dirPath, pattern, includeHidden)` - Calculate size of files matching pattern - `formatBytes(bytes, decimals)` - Format bytes as human-readable string - `parseSize(sizeString)` - Parse human-readable size to bytes #### Size Information ```typescript interface SizeInfo { bytes: number; // Size in bytes kilobytes: number; // Size in KB megabytes: number; // Size in MB gigabytes: number; // Size in GB terabytes: number; // Size in TB formatted: string; // Human-readable format } ``` ### PermissionChecker File and directory permission utilities. #### Methods - `canAccess(filePath)` - Check if file is accessible - `canRead(filePath)` - Check if file is readable - `canWrite(filePath)` - Check if file is writable - `canExecute(filePath)` - Check if file is executable - `getPermissions(filePath)` - Get detailed permission information - `checkPermissions(filePath, permissions)` - Check multiple permissions at once - `formatPermissions(permissions)` - Format permissions as Unix-style string - `isOwner(filePath)` - Check if current user owns the file - `getDetailedInfo(filePath)` - Get comprehensive file information - `isDirectoryWritable(dirPath)` - Check if directory allows file creation #### Permission Information ```typescript interface PermissionInfo { readable: boolean; // Can current user read writable: boolean; // Can current user write executable: boolean; // Can current user execute owner: { // Owner permissions read: boolean; write: boolean; execute: boolean; }; group: { // Group permissions read: boolean; write: boolean; execute: boolean; }; others: { // Others permissions read: boolean; write: boolean; execute: boolean; }; mode: number; // Numeric mode octal: string; // Octal representation } ``` ## Utility Functions The package also provides convenient utility functions for common operations: ```typescript import * as filesops from 'filesops/filesops'; // Get comprehensive file information const info = await filesops.getFileInfo('./file.txt'); // Find files by type and size const largeImages = await filesops.findByTypeAndSize('./photos', 'Image', 1024 * 1024); // Get disk usage summary const usage = await filesops.getDiskUsage('./project'); ``` Alternatively, you can import utility functions directly: ```typescript import { getFileInfo, getDiskUsage, findByTypeAndSize } from 'filesops/filesops'; // Use functions directly const info = await getFileInfo('./file.txt'); const usage = await getDiskUsage('./project'); ``` ## Examples ### Finding Large Files ```typescript import { FileSearch, SizeCalculator } from 'filesops'; // Find files larger than 100MB const largeFiles = await FileSearch.findLargeFiles('./downloads', 100 * 1024 * 1024); // Get the top 10 largest files in a directory const largest = await SizeCalculator.findLargestFiles('./videos', 10); largest.forEach(file => { console.log(`${file.path}: ${file.size.formatted}`); }); ``` ### Analyzing Directory Structure ```typescript import { SizeCalculator, FileTypeDetector } from 'filesops'; const stats = await SizeCalculator.getDirectoryStats('./project'); console.log(`Total size: ${stats.totalSize.formatted}`); console.log(`Files: ${stats.fileCount}, Directories: ${stats.directoryCount}`); // Group files by type const searchResult = await FileSearch.search('./project'); const filesByType = new Map(); for (const file of searchResult.files) { const type = FileTypeDetector.detectFromPath(file.path); if (!filesByType.has(type.category)) { filesByType.set(type.category, []); } filesByType.get(type.category).push(file); } ``` ### Permission Auditing ```typescript import { PermissionChecker } from 'filesops'; const files = ['./script.sh', './config.json', './data.db']; const summary = await PermissionChecker.getPermissionSummary(files); summary.forEach(({ path, permissions, accessible }) => { if (accessible && permissions) { console.log(`${path}: ${PermissionChecker.formatPermissions(permissions)}`); } else { console.log(`${path}: Not accessible`); } }); ``` ## Requirements - Node.js 14.0.0 or higher - TypeScript 5.0.0 or higher (for TypeScript projects) ## Development ### Setup ```bash # Clone the repository git clone https://github.com/arsh342/filesops.git cd filesops # Install dependencies (use npm ci for exact versions) npm ci # Build the project npm run build # Run tests npm test # Run development mode (watch for changes) npm run dev ``` ### CI/CD The project includes GitHub Actions workflows for automated testing and publishing. The CI process: 1. Runs `npm ci` for exact dependency installation 2. Builds the TypeScript project 3. Runs the full test suite 4. Publishes to NPM on successful builds to main branch ## License MIT ## Contributing Contributions are welcome! Please feel free to submit a Pull Request.