in source/use_cases/aws-serverless-image-handler/lib/lambda/image-handler/image-request.js [23:64]
async setup(event) {
try {
this.requestType = this.parseRequestType(event);
this.bucket = this.parseImageBucket(event, this.requestType);
this.key = this.parseImageKey(event, this.requestType);
this.edits = this.parseImageEdits(event, this.requestType);
this.originalImage = await this.getOriginalImage(this.bucket, this.key);
/* Decide the output format of the image.
* 1) If the format is provided, the output format is the provided format.
* 2) If headers contain "Accept: image/webp", the output format is webp.
* 3) Use the default image format for the rest of cases.
*/
let outputFormat = this.getOutputFormat(event);
if (this.edits && this.edits.toFormat) {
this.outputFormat = this.edits.toFormat;
} else if (outputFormat) {
this.outputFormat = outputFormat;
}
// Fix quality for Thumbor and Custom request type if outputFormat is different from quality type.
if (this.outputFormat) {
const requestType = ['Custom', 'Thumbor'];
const acceptedValues = ['jpeg', 'png', 'webp', 'tiff', 'heif'];
this.ContentType = `image/${this.outputFormat}`;
if (requestType.includes(this.requestType) && acceptedValues.includes(this.outputFormat)) {
let qualityKey = Object.keys(this.edits).filter(key => acceptedValues.includes(key))[0];
if (qualityKey && (qualityKey !== this.outputFormat)) {
const qualityValue = this.edits[qualityKey];
this.edits[this.outputFormat] = qualityValue;
delete this.edits[qualityKey];
}
}
}
return Promise.resolve(this);
} catch (err) {
return Promise.reject(err);
}
}