rehype-probe-image-size
Version:
Rehype plugin to set the size of img elements.
44 lines (33 loc) • 1.03 kB
JavaScript
const visit = require("unist-util-visit");
const probe = require("probe-image-size");
const path = require("path");
module.exports = rehypeProbeImageSize;
function rehypeProbeImageSize(opt) {
const o = opt || {};
const staticDir = o.staticDir;
return transformer;
async function transformer(tree, _file) {
const promises = [];
visit(tree, "element", visitor);
await Promise.all(promises);
function visitor(node) {
if (node.tagName !== "img") {
return;
}
let src = node.properties.src;
const isRemote = src.startsWith("http");
if (staticDir && src.startsWith("/")) {
src = path.join(staticDir, src);
}
const promise = setImageSize(src, node, isRemote);
promises.push(promise);
}
}
}
async function setImageSize(src, node, isRemote) {
const result = isRemote
? await probe(src)
: await probe(require("fs").createReadStream(src));
node.properties.width = result.width;
node.properties.height = result.height;
}