@rytass/file-converter-adapter-image-transcoder
Version:
Rytass Utils Storages Images Converter
40 lines (36 loc) • 1.16 kB
JavaScript
;
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;