UNPKG

@rytass/file-converter-adapter-image-transcoder

Version:

Rytass Utils Storages Images Converter

40 lines (36 loc) 1.16 kB
'use strict'; var sharp = require('sharp'); var stream = require('stream'); var fileType = require('file-type'); var constants = require('./constants.cjs'); var errors = require('./errors.cjs'); sharp.cache(false); class ImageTranscoder { options; constructor(options){ this.options = options; sharp.concurrency(options.concurrency ?? 1); } async convert(file) { let converter; if (file instanceof Buffer) { const extension = await fileType.fileTypeFromBuffer(file); if (!extension || !~constants.SupportSources.indexOf(extension.ext)) { throw new errors.UnsupportedSource(); } converter = sharp(file); } else { converter = sharp(); } converter.toFormat(this.options.targetFormat, this.options); // Stream cannot throw when format not supported if (file instanceof stream.Readable) { file.pipe(converter); } if (file instanceof Buffer) { return converter.toBuffer(); } return converter; } } exports.ImageTranscoder = ImageTranscoder;