Download src/utils/file-validation.ts from SaylorTwift/openhands: direct link, hf CLI and curl.
- Browser
- Download file 1.91 kB
-
https://huggingface.co/SaylorTwift/openhands/resolve/main/src/utils/file-validation.ts
- Command line
-
hf download hf://SaylorTwift/openhands/src/utils/file-validation.ts
-
curl -L -o file-validation.ts https://huggingface.co/SaylorTwift/openhands/resolve/main/src/utils/file-validation.ts
1.91 kB
| const MAX_FILE_SIZE = 3 * 1024 * 1024; // 3MB maximum file size | |
| const MAX_TOTAL_SIZE = 3 * 1024 * 1024; // 3MB maximum total size for all files combined | |
| export interface FileValidationResult { | |
| isValid: boolean; | |
| errorMessage?: string; | |
| oversizedFiles?: string[]; | |
| } | |
| /** | |
| * Validates individual file sizes | |
| */ | |
| export function validateIndividualFileSizes( | |
| files: File[], | |
| ): FileValidationResult { | |
| const oversizedFiles = files.filter((file) => file.size > MAX_FILE_SIZE); | |
| if (oversizedFiles.length > 0) { | |
| const fileNames = oversizedFiles.map((f) => f.name); | |
| return { | |
| isValid: false, | |
| errorMessage: `Files exceeding 3MB are not allowed: ${fileNames.join(", ")}`, | |
| oversizedFiles: fileNames, | |
| }; | |
| } | |
| return { isValid: true }; | |
| } | |
| /** | |
| * Validates total file size including existing files | |
| */ | |
| export function validateTotalFileSize( | |
| newFiles: File[], | |
| existingFiles: File[] = [], | |
| ): FileValidationResult { | |
| const currentTotalSize = existingFiles.reduce( | |
| (sum, file) => sum + file.size, | |
| 0, | |
| ); | |
| const newFilesSize = newFiles.reduce((sum, file) => sum + file.size, 0); | |
| const totalSize = currentTotalSize + newFilesSize; | |
| if (totalSize > MAX_TOTAL_SIZE) { | |
| const totalSizeMB = (totalSize / (1024 * 1024)).toFixed(1); | |
| return { | |
| isValid: false, | |
| errorMessage: `Total file size would be ${totalSizeMB}MB, exceeding the 3MB limit. Please select fewer or smaller files.`, | |
| }; | |
| } | |
| return { isValid: true }; | |
| } | |
| /** | |
| * Validates both individual and total file sizes | |
| */ | |
| export function validateFiles( | |
| newFiles: File[], | |
| existingFiles: File[] = [], | |
| ): FileValidationResult { | |
| // First check individual file sizes | |
| const individualValidation = validateIndividualFileSizes(newFiles); | |
| if (!individualValidation.isValid) { | |
| return individualValidation; | |
| } | |
| // Then check total size | |
| return validateTotalFileSize(newFiles, existingFiles); | |
| } | |