UNPKG

vite-plugin-lqip

Version:

Low-quality image placeholder (LQIP) plugin for Vite.

46 lines (45 loc) 3.1 kB
import mime from 'mime'; import path from 'node:path'; import sharp from 'sharp'; export default function vitePluginLqip(options) { return { name: 'vite-plugin-lqip', enforce: 'pre', async load(id) { const [base, search] = id.split('?'); if (!search) { return null; } const s = new URLSearchParams(search); if (!s.has('lqip')) { return null; } const img = sharp(base); const metadata = await img.metadata(); const output = await img .toFormat('webp', { smartSubsample: true, ...options?.sharp?.webp, }) .blur(1.25) .resize({ width: 32, height: 32, fit: 'inside', kernel: sharp.kernel.cubic, ...options?.sharp?.resize, }) .toBuffer(); const lqip = `data:${mime.getType(path.extname(base))};base64,${output.toString('base64')}`; return `import src from '${base}?url'; export default { lqip: \`${lqip}\`, src, width: ${metadata.width ?? -1}, height: ${metadata.height ?? -1}, }; `; }, }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQ3hCLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUM3QixPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFvQjFCLE1BQU0sQ0FBQyxPQUFPLFVBQVUsY0FBYyxDQUFDLE9BQTJCO0lBQ2pFLE9BQU87UUFDTixJQUFJLEVBQUUsa0JBQWtCO1FBQ3hCLE9BQU8sRUFBRSxLQUFLO1FBQ2QsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ1osTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDYixPQUFPLElBQUksQ0FBQztZQUNiLENBQUM7WUFDRCxNQUFNLENBQUMsR0FBRyxJQUFJLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN0QyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUNwQixPQUFPLElBQUksQ0FBQztZQUNiLENBQUM7WUFFRCxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEIsTUFBTSxRQUFRLEdBQUcsTUFBTSxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDdEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxHQUFHO2lCQUN0QixRQUFRLENBQUMsTUFBTSxFQUFFO2dCQUNqQixjQUFjLEVBQUUsSUFBSTtnQkFDcEIsR0FBRyxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUk7YUFDdkIsQ0FBQztpQkFDRCxJQUFJLENBQUMsSUFBSSxDQUFDO2lCQUNWLE1BQU0sQ0FBQztnQkFDUCxLQUFLLEVBQUUsRUFBRTtnQkFDVCxNQUFNLEVBQUUsRUFBRTtnQkFDVixHQUFHLEVBQUUsUUFBUTtnQkFDYixNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLO2dCQUMxQixHQUFHLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTTthQUN6QixDQUFDO2lCQUNELFFBQVEsRUFBRSxDQUFDO1lBQ2IsTUFBTSxJQUFJLEdBQUcsUUFBUSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSyxDQUFDLENBQUMsV0FBVyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFFN0YsT0FBTyxvQkFBb0IsSUFBSTs7O1lBR3RCLElBQUk7O1dBRUwsUUFBUSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7WUFDbkIsUUFBUSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7O0lBRTdCLENBQUM7UUFDSCxDQUFDO0tBQ0QsQ0FBQztBQUNILENBQUMifQ==