24 lines
872 B
TypeScript
24 lines
872 B
TypeScript
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<VineMultipartFile> = vine.file({ size: '5mb' }).optional()
|
|
) {
|
|
return vine.object({
|
|
ref: vine.string().optional().requiredIfMissing('file'),
|
|
file: fileScheme.requiredIfMissing('ref'),
|
|
})
|
|
}
|