UNPKG

hastily

Version:

express middleware to simulate fastly cdn

110 lines 9.61 kB
/** * Only partial compatibility is achieved here. Notes: * * - Cannot do percentage-based dimension changes using our streaming strategy * - Same for percentage-based crops and aspect-ratio-based crops */ 'use strict'; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const accepts_1 = __importDefault(require("accepts")); const background_flatten_1 = __importDefault(require("./mappers/background-flatten")); const blur_1 = __importDefault(require("./mappers/blur")); const extend_1 = __importDefault(require("./mappers/extend")); const extract_crop_1 = __importDefault(require("./mappers/extract-crop")); const orient_1 = __importDefault(require("./mappers/orient")); const resize_1 = __importDefault(require("./mappers/resize")); const resize_canvas_1 = __importDefault(require("./mappers/resize-canvas")); const unsupported_1 = __importDefault(require("./mappers/unsupported")); const mappers = [ ['width', resize_1.default], ['height', resize_1.default], ['dpr', resize_1.default], ['fit', resize_1.default], ['disable', resize_1.default], ['enable', resize_1.default], ['resize-filter', resize_1.default], ['crop', extract_crop_1.default], ['canvas', resize_canvas_1.default], ['pad', extend_1.default], ['orient', orient_1.default], ['bg-color', background_flatten_1.default], ['blur', blur_1.default], ['brightness', unsupported_1.default('brightness', 'absolute brightness adjustment')], ['contrast', unsupported_1.default('contrast', 'absolute contrast adjustment')], ['saturation', unsupported_1.default('saturation', 'absolute saturation adjustment')], ['sharpen', unsupported_1.default('sharpen', 'unsharp mask')], ['trim', unsupported_1.default('trim', 'relative trimming from all four sides')], ]; const formatters = { gif: unsupported_1.default('format', 'GIF output unsupported by node-hastily'), jpg: (transform, params) => transform.jpeg({ quality: params.quality }), pjpg: (transform, params) => transform.jpeg({ quality: params.quality, progressive: true }), png: (transform, params) => transform.png({ quality: params.quality }), png8: (transform, params) => transform.png({ palette: true, quality: params.quality }), webp: (transform, params) => transform.webp({ quality: params.quality }), webpll: (transform, params) => transform.webp({ quality: params.quality, lossless: true }), webply: (transform, params) => transform.webp({ quality: params.quality }), }; /** * @hidden */ function supportsWebP(req) { const types = accepts_1.default(req).types(); if (!types || (typeof types === 'string' && types !== 'image/webp')) { return false; } return types.includes('image/webp'); } /** * @hidden */ function optoToSharp(params, sharpStream) { const applied = new Set(); const { req, res, log } = params; const { query } = req; let transform = sharpStream; for (const [name, mapper] of mappers) { if (query.hasOwnProperty(name) && !applied.has(mapper)) { log.debug('running mapper for %s', name); const out = mapper(transform, params); if (out) { applied.add(mapper); transform = out; } } } if (query.auto === 'webp' && supportsWebP(req)) { log.debug('returning webp'); res.type('image/webp'); return formatters.webp(transform, params); } const arguedFormat = query.format; const tryJpeg = (xform, { quality }) => { if (applied.size === 0) { log.debug('no mappers or formatters applied, doing nothing'); return false; } return xform.jpeg({ force: false, quality, }); }; if (!arguedFormat) { log.debug('no format argument, returning jpeg or whatever'); res.type('image/jpeg'); return tryJpeg(transform, params); } const mapFormat = formatters[arguedFormat]; if (typeof mapFormat !== 'function') { log.debug('bad format argument %s, returning jpeg', arguedFormat); return tryJpeg(transform, params); } log.debug('attempting "%s" transform', arguedFormat); res.type(`image/${arguedFormat}`); return mapFormat(transform, params); } exports.default = optoToSharp; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLW9wdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL21hcC1vcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBRUgsWUFBWSxDQUFDOzs7OztBQUViLHNEQUE4QjtBQUs5QixzRkFBcUQ7QUFDckQsMERBQWtDO0FBQ2xDLDhEQUFzQztBQUN0QywwRUFBaUQ7QUFDakQsOERBQXNDO0FBQ3RDLDhEQUFzQztBQUN0Qyw0RUFBbUQ7QUFDbkQsd0VBQWdEO0FBRWhELE1BQU0sT0FBTyxHQUFzQjtJQUNqQyxDQUFDLE9BQU8sRUFBRSxnQkFBTSxDQUFDO0lBQ2pCLENBQUMsUUFBUSxFQUFFLGdCQUFNLENBQUM7SUFDbEIsQ0FBQyxLQUFLLEVBQUUsZ0JBQU0sQ0FBQztJQUNmLENBQUMsS0FBSyxFQUFFLGdCQUFNLENBQUM7SUFDZixDQUFDLFNBQVMsRUFBRSxnQkFBTSxDQUFDO0lBQ25CLENBQUMsUUFBUSxFQUFFLGdCQUFNLENBQUM7SUFDbEIsQ0FBQyxlQUFlLEVBQUUsZ0JBQU0sQ0FBQztJQUN6QixDQUFDLE1BQU0sRUFBRSxzQkFBVyxDQUFDO0lBQ3JCLENBQUMsUUFBUSxFQUFFLHVCQUFZLENBQUM7SUFDeEIsQ0FBQyxLQUFLLEVBQUUsZ0JBQU0sQ0FBQztJQUNmLENBQUMsUUFBUSxFQUFFLGdCQUFNLENBQUM7SUFDbEIsQ0FBQyxVQUFVLEVBQUUsNEJBQVMsQ0FBQztJQUN2QixDQUFDLE1BQU0sRUFBRSxjQUFJLENBQUM7SUFDZCxDQUFDLFlBQVksRUFBRSxxQkFBVyxDQUFDLFlBQVksRUFBRSxnQ0FBZ0MsQ0FBQyxDQUFDO0lBQzNFLENBQUMsVUFBVSxFQUFFLHFCQUFXLENBQUMsVUFBVSxFQUFFLDhCQUE4QixDQUFDLENBQUM7SUFDckUsQ0FBQyxZQUFZLEVBQUUscUJBQVcsQ0FBQyxZQUFZLEVBQUUsZ0NBQWdDLENBQUMsQ0FBQztJQUMzRSxDQUFDLFNBQVMsRUFB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