Untitled

 avatar
unknown
javascript
5 months ago
2.0 kB
6
Indexable
import webp from 'webp-converter';
import { Buffer } from 'buffer';

export default async function convertToWebp({ imageBuffer, mimeType }, { logging }) {
    let isSuccess = true;
    try {
        const maxBufferSize = 10485760; // 10MB

        // Log input buffer type and size for debugging
        logging.log(`Input buffer type: ${typeof imageBuffer}`);
        logging.log(`Input buffer size: ${Buffer.byteLength(imageBuffer)} bytes`);

        if (Buffer.byteLength(imageBuffer) > maxBufferSize) {
            throw new Error('Input buffer size exceeds the limit of 10MB.');
        }

        // Determine the file type from the mimeType
        const fileType = mimeType.split('/')[1];

        // Convert buffer to WebP format using webp-converter's buffer2webpbuffer
        const result = await webp.buffer2webpbuffer(imageBuffer, fileType, "-q 80")
            .then((res) => {
                if (typeof res === 'string') {
                    logging.log('WebP conversion finished.');
                    return Buffer.from(res, 'base64');
                } else {
                    throw new Error('WebP conversion returned an unexpected result format.');
                }
            })
            .catch((error) => {
                logging.log(`WebP conversion promise rejected: ${error.message}`);
                throw new Error('WebP conversion failed.');
            });

        // Additional validation for the result buffer
        if (!result || !Buffer.isBuffer(result)) {
            logging.log('WebP conversion returned an invalid buffer.');
            throw new Error('WebP conversion failed or did not return a valid buffer.');
        }

        logging.log('WebP conversion successful.');

        return { webpBuffer: result, isSuccess };
    } catch (error) {
        isSuccess = false;
        logging.log(`WebP conversion error: ${error.message}`);
        return { webpBuffer: null, isSuccess };
    }
}
Editor is loading...
Leave a Comment