vite-plugin-lqip
Version:
Low-quality image placeholder (LQIP) plugin for Vite.
46 lines (45 loc) • 3.1 kB
JavaScript
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==