import type { Options } from 'browser-image-compression'; import imageCompression from 'browser-image-compression'; interface BrowserImageFile extends File { isCompressed?: boolean; } export class BrowserImageCompression { static async compress(file: BrowserImageFile, args?: Options): Promise { if (file.isCompressed) { return file; } const options: Options = args || {}; options.useWebWorker = true; if (options.maxSizeMB == null) { options.maxSizeMB = 0.5; } let compressedImage: BrowserImageFile = null; try { compressedImage = await imageCompression(file, options); compressedImage.isCompressed = true; return compressedImage; } catch (error) { console.error(error); return file; } } }