diff --git a/server/api/gallery.get.ts b/server/api/gallery.get.ts index a9605f8..0d85e3e 100644 --- a/server/api/gallery.get.ts +++ b/server/api/gallery.get.ts @@ -29,38 +29,43 @@ export default defineCachedEventHandler( /\.(jpg|jpeg|png|webp)$/i.test(file), ); - const imagesWithExif = await Promise.all( - imageFiles.map(async (filename) => { - const filePath = join(galleryDir, filename); - const rawExif = await exifr.parse(filePath, { - tiff: true, - exif: true, - gps: false, - interop: false, - ifd1: false, - }); + const imagesWithExif = ( + await Promise.all( + imageFiles.map(async (filename) => { + const filePath = join(galleryDir, filename); + const rawExif = await exifr.parse(filePath, { + tiff: true, + exif: true, + gps: false, + interop: false, + ifd1: false, + }); - const exif = exifSchema.parse(rawExif); + if (!rawExif) return null; + const parsed = exifSchema.safeParse(rawExif); + if (!parsed.success) return null; + const exif = parsed.data; - return { - filename, - url: `/gallery/${filename}`, - width: exif.ExifImageWidth, - height: exif.ExifImageHeight, - exif: { - date: exif.DateTimeOriginal, - camera: `${exif.Make} ${exif.Model}`, - lens: exif.LensModel, - settings: { - aperture: `f/${exif.FNumber}`, - shutter: `1/${Math.round(1 / exif.ExposureTime)}s`, - iso: String(exif.ISO), - focalLength: `${exif.FocalLength}mm`, + return { + filename, + url: `/gallery/${filename}`, + width: exif.ExifImageWidth, + height: exif.ExifImageHeight, + exif: { + date: exif.DateTimeOriginal, + camera: `${exif.Make} ${exif.Model}`, + lens: exif.LensModel, + settings: { + aperture: `f/${exif.FNumber}`, + shutter: `1/${Math.round(1 / exif.ExposureTime)}s`, + iso: String(exif.ISO), + focalLength: `${exif.FocalLength}mm`, + }, }, - }, - }; - }), - ); + }; + }), + ) + ).filter((img) => img !== null); return imagesWithExif; } catch (err) {