in source/image-handler/image-request.ts [261:293]
public parseRequestType(event: ImageHandlerEvent): RequestTypes {
const { path } = event;
const matchDefault = /^(\/?)([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;
const matchThumbor = /^(\/?)((fit-in)?|(filters:.+\(.?\))?|(unsafe)?)(((.(?!(\.[^.\\/]+$)))*$)|.*(\.jpg$|.\.png$|\.webp$|\.tiff$|\.jpeg$|\.svg$))/i;
const { REWRITE_MATCH_PATTERN, REWRITE_SUBSTITUTION } = process.env;
const definedEnvironmentVariables = REWRITE_MATCH_PATTERN !== '' && REWRITE_SUBSTITUTION !== '' && REWRITE_MATCH_PATTERN !== undefined && REWRITE_SUBSTITUTION !== undefined;
// Check if path is base 64 encoded
let isBase64Encoded = true;
try {
this.decodeRequest(event);
} catch (error) {
console.error(error);
isBase64Encoded = false;
}
if (matchDefault.test(path) && isBase64Encoded) {
// use sharp
return RequestTypes.DEFAULT;
} else if (definedEnvironmentVariables) {
// use rewrite function then thumbor mappings
return RequestTypes.CUSTOM;
} else if (matchThumbor.test(path)) {
// use thumbor mappings
return RequestTypes.THUMBOR;
} else {
throw new ImageHandlerError(
StatusCodes.BAD_REQUEST,
'RequestTypeError',
'The type of request you are making could not be processed. Please ensure that your original image is of a supported file type (jpg, png, tiff, webp, svg) and that your image request is provided in the correct syntax. Refer to the documentation for additional guidance on forming image requests.'
);
}
}