UNPKG

remark-docx

Version:

remark plugin to compile markdown to docx (Microsoft Word, Office Open XML).

89 lines (88 loc) 2.35 kB
import { n as e, t } from "../../utils-BBifD5si.js"; import { visit as n } from "unist-util-visit"; import { imageSize as r } from "image-size"; //#region src/plugins/image/index.ts var i = async (e) => (await fetch(e)).arrayBuffer(), a = async ({ buffer: e, width: t, height: n }) => { let r = new Blob([e], { type: "image/svg+xml" }), i = URL.createObjectURL(r); try { let e = new Image(); e.src = i, await e.decode(); let r = window.devicePixelRatio, a = document.createElement("canvas"), o = t * r, s = n * r; return a.width = o, a.height = s, a.getContext("2d").drawImage(e, 0, 0, o, s), new Promise((e) => { a.toBlob((t) => { t.arrayBuffer().then(e); }, "image/png"); }); } finally { URL.revokeObjectURL(i); } }, o = ({ load: o = i, fallbackSvg: s = a } = {}) => { let c = /* @__PURE__ */ new Map(); return async ({ root: i, definition: a, images: l }) => { let u = []; if (n(i, "image", (e) => { u.push(e); }), n(i, "imageReference", (e) => { let t = a(e.identifier); t && u.push(t); }), u.length !== 0) { let n = /* @__PURE__ */ new Map(); u.forEach(({ url: i }) => { if (!l.has(i)) { if (c.has(i)) { l.set(i, c.get(i)); return; } n.has(i) || n.set(i, (async () => { let n; try { n = await o(i); } catch (t) { e(`Failed to load image: ${i} ${t}`); return; } let { width: a, height: u, type: d } = r(new Uint8Array(n)); if (!t(d)) { e(`Not supported image type: ${d}`); return; } if (d === "svg") try { let e = await s({ buffer: n, width: a, height: u }), t = { type: d, width: a, height: u, data: n, fallback: e }; l.set(i, t), c.set(i, t); } catch (t) { e(`Failed to create fallback image: ${i} ${t}`); return; } else { let e = { type: d, width: a, height: u, data: n }; l.set(i, e), c.set(i, e); } })()); } }), await Promise.all(n.values()); } if (c.size > 100) { let e = c.size - 100; for (let t of c.keys()) if (c.delete(t), e--, e <= 0) break; } return {}; }; }; //#endregion export { a as browserSvgToPng, o as imagePlugin }; //# sourceMappingURL=index.js.map