svelte-firebase-upload
Version:
Enterprise-grade file upload manager for Svelte with Firebase Storage integration, featuring concurrent uploads, resumable transfers, validation, health monitoring, and plugin system
69 lines (68 loc) • 2.18 kB
TypeScript
import type { ValidationRule, ValidationResult } from '../types.js';
/**
* Comprehensive file validation utility with security and performance features.
*
* Features:
* - File size and type validation
* - Content-based duplicate detection using SHA-256 hashing
* - Image dimension extraction
* - Video duration detection
* - Security checks for dangerous file types
* - Custom validation rules support
* - Batch validation with error recovery
*
* @example
* ```typescript
* const validator = new FileValidator();
*
* // Validate single file
* const result = await validator.validateFile(file, {
* maxSize: 10 * 1024 * 1024, // 10MB
* allowedTypes: ['image/*', '.pdf']
* });
*
* // Batch validate files
* const results = await validator.validateFiles(files, {
* maxSize: 5 * 1024 * 1024,
* allowedTypes: ['image/jpeg', 'image/png']
* });
*
* // Detect duplicates
* const duplicates = await validator.detectDuplicates(files);
* ```
*/
export declare class FileValidator {
private _objectUrls;
private static readonly FILE_SIGNATURES;
constructor();
private _defaultRules;
validateFile(file: File, rules?: Partial<ValidationRule>): Promise<ValidationResult>;
validateFiles(files: File[], rules?: Partial<ValidationRule>): Promise<Map<File, ValidationResult>>;
detectDuplicates(files: File[]): Promise<Map<string, File[]>>;
calculateFileHash(file: File, algorithm?: 'SHA-1' | 'SHA-256'): Promise<string>;
getFileMetadata(file: File): Promise<{
size: number;
type: string;
lastModified: number;
hash: string;
dimensions?: {
width: number;
height: number;
};
duration?: number;
}>;
private isFileTypeAllowed;
private performAdditionalChecks;
private getImageDimensions;
private getVideoDuration;
private validateFileContent;
private readFileHeader;
private readTextSample;
private detectFileTypeFromSignature;
private matchesSignature;
private isDangerousFileType;
private containsExecutableSignature;
private containsScriptContent;
destroy(): void;
private formatBytes;
}