hastily
Version:
express middleware to simulate fastly cdn
84 lines • 6.17 kB
JavaScript
export const optoFitToSharp = {
bounds: 'inside',
cover: 'outside',
crop: 'cover',
};
// sharp supports mitchell interpolation and not bilinear,
// but who's gonna notice?
export const optoResizeFilterToSharp = {
bicubic: 'cubic',
bilinear: 'mitchell',
cubic: 'cubic',
lanczos: 'lanczos3',
lanczos2: 'lanczos2',
lanczos3: 'lanczos3',
linear: 'mitchell',
nearest: 'nearest',
};
/**
* @hidden
*/
const resize = (sharp, params) => {
if (!params.has('width')) {
params.warn('unsupported', 'width', 'resize without width param. Will not resize.');
return false;
}
const nums = params.toNumbers(['width', 'height', 'dpr']);
const width = nums[0];
let height = nums[1];
const dpr = nums[2];
for (const [name, param] of [
['width', width],
['height', height],
]) {
if (param < 1 && param > 0) {
params.warn('unsupported', name, 'ratio-based resize/crop. Will not apply.');
return false;
}
}
if (isNaN(width)) {
params.warn('invalid', 'width', 'resize with non-numeric width param');
return false;
}
if (isNaN(height)) {
height = undefined;
}
const { log } = params;
log.debug('width %s, height %s, dpr %s', width, height, dpr);
const options = {
withoutEnlargement: true,
};
if (params.has('fit')) {
const fitOpt = params.get('fit');
const fit = optoFitToSharp[fitOpt];
if (fit) {
options.fit = fit;
}
else {
params.warn('unsupported', 'fit');
}
log.debug('mapped options.fit from %s -> %s', fitOpt, options.fit);
}
else if (typeof height === 'number' && height > 0) {
options.fit = 'fill';
}
if (params.get('enable') === 'true' || params.get('disable') === 'false') {
log.debug('overriding withoutEnlargement to false, yucky enlargement enabled');
options.withoutEnlargement = false;
}
if (params.has('resize-filter')) {
const filterOpt = params.get('resize-filter');
const kernel = optoResizeFilterToSharp[filterOpt];
if (kernel) {
options.kernel = kernel;
}
else {
params.warn('unsupported', 'fit');
}
log.debug('mapped options.resize-filter from %s -> %s', filterOpt, options.kernel);
}
log.debug('sharp.resize(%s, %s, %o)', width, height, options);
return sharp.resize(width, height, options);
};
export default resize;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXplLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9tYXBwZXJzL3Jlc2l6ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQWtDO0lBQzNELE1BQU0sRUFBRSxRQUFRO0lBQ2hCLEtBQUssRUFBRSxTQUFTO0lBQ2hCLElBQUksRUFBRSxPQUFPO0NBQ2QsQ0FBQztBQUVGLDBEQUEwRDtBQUMxRCwwQkFBMEI7QUFDMUIsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQXFDO0lBQ3ZFLE9BQU8sRUFBRSxPQUFPO0lBQ2hCLFFBQVEsRUFBRSxVQUFVO0lBQ3BCLEtBQUssRUFBRSxPQUFPO0lBQ2QsT0FBTyxFQUFFLFVBQVU7SUFDbkIsUUFBUSxFQUFFLFVBQVU7SUFDcEIsUUFBUSxFQUFFLFVBQVU7SUFDcEIsTUFBTSxFQUFFLFVBQVU7SUFDbEIsT0FBTyxFQUFFLFNBQVM7Q0FDbkIsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSxNQUFNLEdBQVcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUU7SUFDdkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDeEIsTUFBTSxDQUFDLElBQUksQ0FDVCxhQUFhLEVBQ2IsT0FBTyxFQUNQLDhDQUE4QyxDQUMvQyxDQUFDO1FBQ0YsT0FBTyxLQUFLLENBQUM7S0FDZDtJQUNELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDMUQsTUFBTSxLQUFLLEdBQVcsSUFBSSxDQUFDLENBQUMsQ0FBVyxDQUFDO0lBQ3hDLElBQUksTUFBTSxHQUF1QixJQUFJLENBQUMsQ0FBQyxDQUFXLENBQUM7SUFDbkQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BCLEtBQUss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