2023-11-27 23:35:18 +01:00
|
|
|
import Joi from "joi";
|
|
|
|
import { PdfFile } from "./PdfFile";
|
|
|
|
|
2023-12-28 01:56:01 +01:00
|
|
|
export const JoiPDFFileSchema = Joi.custom((value: Express.Multer.File[] /* <- also handles single files */ | PdfFile[] | PdfFile, helpers) => {
|
2023-12-21 22:52:05 +01:00
|
|
|
if (Array.isArray(value)) {
|
|
|
|
if(isPdfFileArray(value))
|
2023-12-21 16:42:00 +01:00
|
|
|
return value;
|
2023-12-21 22:52:05 +01:00
|
|
|
else { // File(s)
|
|
|
|
if(value.some(f => f.mimetype != "application/pdf"))
|
|
|
|
throw new Error("at least one of the files provided doesn't seem to be a PDF.");
|
|
|
|
|
|
|
|
return PdfFile.fromMulterFiles(value);
|
|
|
|
}
|
2023-12-21 16:42:00 +01:00
|
|
|
}
|
|
|
|
else {
|
2023-12-21 22:52:05 +01:00
|
|
|
if (value instanceof PdfFile) {
|
|
|
|
return value;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
throw new Error("an invalid type (unhandeled, non-file-type) was provided to pdf validation process. Please report this to maintainers.");
|
2023-11-27 23:35:18 +01:00
|
|
|
}
|
|
|
|
}
|
2023-12-21 22:52:05 +01:00
|
|
|
}, "pdffile validation");
|
|
|
|
|
|
|
|
function isPdfFileArray(value: any): value is PdfFile[] {
|
2023-12-27 19:33:32 -05:00
|
|
|
return value.every((e: PdfFile) => e instanceof PdfFile)
|
|
|
|
}
|