import { VineMultipartFile } from '@adonisjs/core/vine' import { OptionalModifier } from '@vinejs/vine/schema/base/literal' import vine from '@vinejs/vine' /** * Creates a reusable upload file schema that requires either: * - `ref` (reference to an existing file), or * - `file` (new uploaded file). * * At least one field must be present. When `ref` is missing, `file` * becomes required. When `file` is missing, `ref` becomes required. * * @param fileScheme Custom optional file validation schema. * @returns Vine object schema with mutually dependent `ref` and `file` fields. */ export default function createFileInputSchema( fileScheme: OptionalModifier = vine.file({ size: '5mb' }).optional() ) { return vine.object({ ref: vine.string().optional().requiredIfMissing('file'), file: fileScheme.requiredIfMissing('ref'), }) }