From cc723134f7fe4d803bf03ccd9df1d21a77229d3e Mon Sep 17 00:00:00 2001 From: Daniel Lockyer Date: Tue, 12 Mar 2024 16:02:54 +0100 Subject: [PATCH] Refactored handle-image-sizes middleware to async-await - this is much easier to read and reason about --- .../web/middleware/handle-image-sizes.js | 50 +++++++++---------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/ghost/core/core/frontend/web/middleware/handle-image-sizes.js b/ghost/core/core/frontend/web/middleware/handle-image-sizes.js index a887cc43423c..f1fdbbb32b6b 100644 --- a/ghost/core/core/frontend/web/middleware/handle-image-sizes.js +++ b/ghost/core/core/frontend/web/middleware/handle-image-sizes.js @@ -110,35 +110,35 @@ module.exports = function handleImageSizes(req, res, next) { return redirectToOriginal(); } - storageInstance.exists(req.url).then((exists) => { + storageInstance.exists(req.url).then(async (exists) => { if (exists) { return; } - return imageSize.getOriginalImagePath(imagePath) - .then((storagePath) => { - return storageInstance.read({path: storagePath}); - }) - .then((originalImageBuffer) => { - if (originalImageBuffer.length <= 0) { - throw new NoContentError(); - } - return imageTransform.resizeFromBuffer(originalImageBuffer, {withoutEnlargement: requestUrlFileExtension !== '.svg', ...imageDimensionConfig, format}); - }) - .then((resizedImageBuffer) => { - return storageInstance.saveRaw(resizedImageBuffer, req.url); - }); - }).then(() => { - if (format) { - // File extension won't match the new format, so we need to update the Content-Type header manually here - // Express JS still uses an out of date mime package, which doesn't support avif - res.type(format === 'avif' ? 'image/avif' : format); - } - next(); - }).catch(function (err) { - if (err.code === 'SHARP_INSTALLATION' || err.code === 'IMAGE_PROCESSING' || err.errorType === 'NoContentError') { - return redirectToOriginal(); + try { + const storagePath = await imageSize.getOriginalImagePath(imagePath); + const originalImageBuffer = await storageInstance.read({path: storagePath}); + + if (originalImageBuffer.length <= 0) { + throw new NoContentError(); + } + + const resizedImageBuffer = await imageTransform.resizeFromBuffer(originalImageBuffer, {withoutEnlargement: requestUrlFileExtension !== '.svg', ...imageDimensionConfig, format}); + + await storageInstance.saveRaw(resizedImageBuffer, req.url); + + if (format) { + // File extension won't match the new format, so we need to update the Content-Type header manually here + // Express JS still uses an out of date mime package, which doesn't support avif + res.type(format === 'avif' ? 'image/avif' : format); + } + + next(); + } catch (err) { + if (err.code === 'SHARP_INSTALLATION' || err.code === 'IMAGE_PROCESSING' || err.errorType === 'NoContentError') { + return redirectToOriginal(); + } + next(err); } - next(err); }); };