/**
 * ### File Rule
 *
 * Validates that the field under validation is a file object.
 *
 * @example
 * ```typescript
 * // Class validation
 * class UploadForm {
 *   @IsRequired
 *   @IsFile
 *   document: File;
 * }
 * ```
 *
 * @param options - Validation options containing value and context
 * @returns Promise resolving to true if valid, rejecting with error message if invalid
 *
 * @since 1.22.0
 * @public
 */
export declare const IsFile: PropertyDecorator;
/**
 * ### MaxFileSize Rule
 *
 * Validates that the file size does not exceed the specified maximum size in bytes.
 *
 * #### Parameters
 * - Maximum file size in bytes (number)
 *
 * @example
 * ```typescript
 * // Class validation - 5MB max
 * class UploadForm {
 *   @MaxFileSize(5242880) // 5MB in bytes
 *   document: File;
 * }
 * ```
 *
 * @param options - Validation options with rule parameters
 * @param options.ruleParams - Array containing maximum file size in bytes
 * @returns Promise resolving to true if valid, rejecting with error message if invalid
 *
 * @since 1.22.0
 * @public
 */
export declare const MaxFileSize: (ruleParameters: [size: number]) => PropertyDecorator;
/**
 * ### FileType Rule
 *
 * Validates that the file has one of the specified MIME types.
 *
 * #### Parameters
 * - Allowed MIME types (array of strings)
 *
 * @example
 * ```typescript
 * // Class validation
 * class ImageUpload {
 *   @IsFileType(['image/jpeg', 'image/png', 'image/gif'])
 *   image: File;
 * }
 * ```
 *
 * @param options - Validation options with rule parameters
 * @param options.ruleParams - Array of allowed MIME types
 * @returns Promise resolving to true if valid, rejecting with error message if invalid
 *
 * @since 1.22.0
 * @public
 */
export declare const IsFileType: (ruleParameters: string[]) => PropertyDecorator;
/**
 * ### Image Rule
 *
 * Validates that the file is an image (checks MIME type).
 *
 * @example
 * ```typescript
 * // Class validation
 * class ProfilePicture {
 *   @IsImage
 *   avatar: File;
 * }
 * ```
 *
 * @param options - Validation options containing value and context
 * @returns Promise resolving to true if valid, rejecting with error message if invalid
 *
 * @since 1.22.0
 * @public
 */
export declare const IsImage: PropertyDecorator;
/**
 * ### FileExtension Rule
 *
 * Validates that the file has one of the specified extensions.
 *
 * #### Parameters
 * - Allowed file extensions (array of strings, without dots)
 *
 * @example
 * ```typescript
 * // Class validation
 * class DocumentUpload {
 *   @IsFileExtension(['pdf', 'doc', 'docx'])
 *   document: File;
 * }
 * ```
 *
 * @param options - Validation options with rule parameters
 * @param options.ruleParams - Array of allowed file extensions
 * @returns Promise resolving to true if valid, rejecting with error message if invalid
 *
 * @since 1.22.0
 * @public
 */
export declare const IsFileExtension: (ruleParameters: string[]) => PropertyDecorator;
/**
 * ### MinFileSize Rule
 *
 * Validates that the file size is at least the specified minimum size in bytes.
 *
 * #### Parameters
 * - Minimum file size in bytes (number)
 *
 * @example
 * ```typescript
 * // Class validation - minimum 1KB
 * class UploadForm {
 *   @MinFileSize(1024) // 1KB in bytes
 *   document: File;
 * }
 * ```
 *
 * @param options - Validation options with rule parameters
 * @param options.ruleParams - Array containing minimum file size in bytes
 * @returns Promise resolving to true if valid, rejecting with error message if invalid
 *
 * @since 1.22.0
 * @public
 */
export declare const MinFileSize: (ruleParameters: [minSize: number]) => PropertyDecorator;
declare module "../types" {
    interface IValidatorRulesMap<Context = unknown> {
        /**
         * ### File Rule
         *
         * Validates that the field under validation is a file object.
         *
         * @example
         * ```typescript
         * // Valid file objects
         * await Validator.validate({
         *   value: { name: 'test.txt', size: 1024, type: 'text/plain' },
         *   rules: ['File']
         * }); // ✓ Valid
         *
         * // Invalid examples
         * await Validator.validate({
         *   value: 'not a file',
         *   rules: ['File']
         * }); // ✗ Invalid
         *
         * await Validator.validate({
         *   value: null,
         *   rules: ['File']
         * }); // ✗ Invalid
         *
         * // Class validation
         * class UploadForm {
         *   @Required
         *   @File
         *   document: File;
         * }
         * ```
         *
         * @param options - Validation options containing value and context
         * @returns Promise resolving to true if valid, rejecting with error message if invalid
         *
         * @since 1.22.0
         * @public
         */
        File: IValidatorRuleParams<[], Context>;
        /**
         * ### MaxFileSize Rule
         *
         * Validates that the file size does not exceed the specified maximum size in bytes.
         *
         * #### Parameters
         * - Maximum file size in bytes (number)
         *
         * @example
         * ```typescript
         * // Valid examples
         * await Validator.validate({
         *   value: { name: 'small.txt', size: 1024, type: 'text/plain' },
         *   rules: ['MaxFileSize[2048]']
         * }); // ✓ Valid (file <= 2KB)
         *
         * // Invalid examples
         * await Validator.validate({
         *   value: { name: 'large.txt', size: 5242880, type: 'text/plain' },
         *   rules: ['MaxFileSize[2048]']
         * }); // ✗ Invalid (file > 2KB)
         *
         * await Validator.validate({
         *   value: 'not a file',
         *   rules: ['MaxFileSize[2048]']
         * }); // ✗ Invalid
         *
         * // Class validation - 5MB max
         * class UploadForm {
         *   @MaxFileSize(5242880) // 5MB in bytes
         *   document: File;
         * }
         * ```
         *
         * @param options - Validation options with rule parameters
         * @param options.ruleParams - Array containing maximum file size in bytes
         * @returns Promise resolving to true if valid, rejecting with error message if invalid
         *
         * @since 1.22.0
         * @public
         */
        MaxFileSize: IValidatorRuleParams<[size: number], Context>;
        /**
         * ### FileType Rule
         *
         * Validates that the file has one of the specified MIME types.
         *
         * #### Parameters
         * - Allowed MIME types (array of strings)
         *
         * @example
         * ```typescript
         * // Valid examples
         * await Validator.validate({
         *   value: { name: 'photo.jpg', size: 1024, type: 'image/jpeg' },
         *   rules: ['FileType[image/jpeg,image/png]']
         * }); // ✓ Valid
         *
         * await Validator.validate({
         *   value: { name: 'doc.pdf', size: 1024, type: 'application/pdf' },
         *   rules: ['FileType[application/pdf]']
         * }); // ✓ Valid
         *
         * // Invalid examples
         * await Validator.validate({
         *   value: { name: 'script.js', size: 1024, type: 'application/javascript' },
         *   rules: ['FileType[image/jpeg,image/png]']
         * }); // ✗ Invalid
         *
         * // Class validation
         * class ImageUpload {
         *   @IsFileType(['image/jpeg', 'image/png', 'image/gif'])
         *   image: File;
         * }
         * ```
         *
         * @param options - Validation options with rule parameters
         * @param options.ruleParams - Array of allowed MIME types
         * @returns Promise resolving to true if valid, rejecting with error message if invalid
         *
         * @since 1.22.0
         * @public
         */
        FileType: IValidatorRuleParams<string[], Context>;
        /**
         * ### Image Rule
         *
         * Validates that the file is an image (checks MIME type).
         *
         * @example
         * ```typescript
         * // Valid examples
         * await Validator.validate({
         *   value: { name: 'photo.jpg', size: 1024, type: 'image/jpeg' },
         *   rules: ['Image']
         * }); // ✓ Valid
         *
         * await Validator.validate({
         *   value: { name: 'pic.png', size: 1024, type: 'image/png' },
         *   rules: ['Image']
         * }); // ✓ Valid
         *
         * // Invalid examples
         * await Validator.validate({
         *   value: { name: 'doc.pdf', size: 1024, type: 'application/pdf' },
         *   rules: ['Image']
         * }); // ✗ Invalid
         *
         * await Validator.validate({
         *   value: 'not a file',
         *   rules: ['Image']
         * }); // ✗ Invalid
         *
         * // Class validation
         * class ProfilePicture {
         *   @IsImage
         *   avatar: File;
         * }
         * ```
         *
         * @param options - Validation options containing value and context
         * @returns Promise resolving to true if valid, rejecting with error message if invalid
         *
         * @since 1.22.0
         * @public
         */
        Image: IValidatorRuleParams<[], Context>;
        /**
         * ### FileExtension Rule
         *
         * Validates that the file has one of the specified extensions.
         *
         * #### Parameters
         * - Allowed file extensions (array of strings, without dots)
         *
         * @example
         * ```typescript
         * // Valid examples
         * await Validator.validate({
         *   value: { name: 'document.pdf', size: 1024, type: 'application/pdf' },
         *   rules: ['FileExtension[pdf,doc,docx]']
         * }); // ✓ Valid
         *
         * await Validator.validate({
         *   value: { name: 'script.js', size: 1024, type: 'application/javascript' },
         *   rules: ['FileExtension[js,ts]']
         * }); // ✓ Valid
         *
         * // Invalid examples
         * await Validator.validate({
         *   value: { name: 'image.exe', size: 1024, type: 'application/octet-stream' },
         *   rules: ['FileExtension[pdf,doc,docx]']
         * }); // ✗ Invalid
         *
         * // Class validation
         * class DocumentUpload {
         *   @IsFileExtension(['pdf', 'doc', 'docx'])
         *   document: File;
         * }
         * ```
         *
         * @param options - Validation options with rule parameters
         * @param options.ruleParams - Array of allowed file extensions
         * @returns Promise resolving to true if valid, rejecting with error message if invalid
         *
         * @since 1.22.0
         * @public
         */
        FileExtension: IValidatorRuleParams<string[], Context>;
        /**
         * ### MinFileSize Rule
         *
         * Validates that the file size is at least the specified minimum size in bytes.
         *
         * #### Parameters
         * - Minimum file size in bytes (number)
         *
         * @example
         * ```typescript
         * // Valid examples
         * await Validator.validate({
         *   value: { name: 'file.txt', size: 2048, type: 'text/plain' },
         *   rules: ['MinFileSize[1024]']
         * }); // ✓ Valid (file >= 1KB)
         *
         * // Invalid examples
         * await Validator.validate({
         *   value: { name: 'small.txt', size: 512, type: 'text/plain' },
         *   rules: ['MinFileSize[1024]']
         * }); // ✗ Invalid (file < 1KB)
         *
         * await Validator.validate({
         *   value: 'not a file',
         *   rules: ['MinFileSize[1024]']
         * }); // ✗ Invalid
         *
         * // Class validation - minimum 1KB
         * class UploadForm {
         *   @MinFileSize(1024) // 1KB in bytes
         *   document: File;
         * }
         * ```
         *
         * @param options - Validation options with rule parameters
         * @param options.ruleParams - Array containing minimum file size in bytes
         * @returns Promise resolving to true if valid, rejecting with error message if invalid
         *
         * @since 1.22.0
         * @public
         */
        MinFileSize: IValidatorRuleParams<[minSize: number], Context>;
    }
}
