vite-plugin-lqip
Version:
Low-quality image placeholder (LQIP) plugin for Vite.
52 lines (51 loc) • 3.4 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const mime_1 = __importDefault(require("mime"));
const node_path_1 = __importDefault(require("node:path"));
const sharp_1 = __importDefault(require("sharp"));
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 = (0, sharp_1.default)(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_1.default.kernel.cubic,
...options?.sharp?.resize,
})
.toBuffer();
const lqip = `data:${mime_1.default.getType(node_path_1.default.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},
};
`;
},
};
}
exports.default = vitePluginLqip;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxnREFBd0I7QUFDeEIsMERBQTZCO0FBQzdCLGtEQUEwQjtBQW9CMUIsU0FBd0IsY0FBYyxDQUFDLE9BQTJCO0lBQ2pFLE9BQU87UUFDTixJQUFJLEVBQUUsa0JBQWtCO1FBQ3hCLE9BQU8sRUFBRSxLQUFLO1FBQ2QsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ1osTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDYixPQUFPLElBQUksQ0FBQztZQUNiLENBQUM7WUFDRCxNQUFNLENBQUMsR0FBRyxJQUFJLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN0QyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUNwQixPQUFPLElBQUksQ0FBQztZQUNiLENBQUM7WUFFRCxNQUFNLEdBQUcsR0FBRyxJQUFBLGVBQUssRUFBQyxJQUFJLENBQUMsQ0FBQztZQUN4QixNQUFNLFFBQVEsR0FBRyxNQUFNLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN0QyxNQUFNLE1BQU0sR0FBRyxNQUFNLEdBQUc7aUJBQ3RCLFFBQVEsQ0FBQyxNQUFNLEVBQUU7Z0JBQ2pCLGNBQWMsRUFBRSxJQUFJO2dCQUNwQixHQUFHLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSTthQUN2QixDQUFDO2lCQUNELElBQUksQ0FBQyxJQUFJLENBQUM7aUJBQ1YsTUFBTSxDQUFDO2dCQUNQLEtBQUssRUFBRSxFQUFFO2dCQUNULE1BQU0sRUFBRSxFQUFFO2dCQUNWLEdBQUcsRUFBRSxRQUFRO2dCQUNiLE1BQU0sRUFBRSxlQUFLLENBQUMsTUFBTSxDQUFDLEtBQUs7Z0JBQzFCLEdBQUcsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNO2FBQ3pCLENBQUM7aUJBQ0QsUUFBUSxFQUFFLENBQUM7WUFDYixNQUFNLElBQUksR0FBRyxRQUFRLGNBQUksQ0FBQyxPQUFPLENBQUMsbUJBQUksQ0FBQyxPQUFPLENBQUMsSUFBSyxDQUFDLENBQUMsV0FBVyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFFN0YsT0FBTyxvQkFBb0IsSUFBSTs7O1lBR3RCLElBQUk7O1dBRUwsUUFBUSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7WUFDbkIsUUFBUSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7O0lBRTdCLENBQUM7UUFDSCxDQUFDO0tBQ0QsQ0FBQztBQUNILENBQUM7QUEzQ0QsaUNBMkNDIn0=