TonyBrobston/jpegasus

View on GitHub
src/index.ts

Summary

Maintainability
A
45 mins
Test Coverage
import exifService from './services/exifService';
import fileService from './services/fileService';
import optionService from './services/optionService';
import qualityService from './services/qualityService';
import scaleService from './services/scaleService';
import {InputOptions} from './types/InputOptions';

export const compress = async (file: File, inputOptions: InputOptions = {}): Promise<File|Blob> => {
    const options = optionService.override(inputOptions);

    try {
        if (fileService.validate(file)) {
            const canvas = await scaleService.toCanvas(file, options);
            const compressedFile = qualityService.toFile(file, canvas, options);
            if (!(options.returnOriginalIfCompressedFileIsLarger && file.size < compressedFile.size)) {
                return compressedFile;
            }
        } else if (!options.returnOriginalOnFailure) {
            throw new Error('The File you have entered is not valid.');
        }
    } catch (error) {
        if (!options.returnOriginalOnFailure) {
            throw error;
        }
    }

    return file;
};

export const determineOrientation = exifService.determineOrientation;