2024-02-05 12:15:01 -05:00
import Joi from "@stirling-tools/joi" ;
2023-11-27 23:35:18 +01:00
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" ) ;
2023-12-28 02:26:25 +01:00
function isPdfFileArray ( value : any [ ] ) : value is PdfFile [ ] { // "is" is a ts-typeguard - https://www.typescriptlang.org/docs/handbook/2/narrowing.html#using-type-predicates
2024-01-04 20:17:54 -05:00
return value . every ( ( e ) = > e instanceof PdfFile ) ;
2023-12-28 02:15:14 +01:00
}