{"version":3,"file":"index.cjs","sources":["../../../src/plugins/mermaid/index.ts"],"sourcesContent":["import type { RemarkDocxPlugin } from \"../../types\";\nimport { warnOnce } from \"../../utils\";\nimport mermaid from \"mermaid\";\nimport { visit } from \"unist-util-visit\";\nimport { imageSize } from \"image-size\";\nimport { browserSvgToPng } from \"../image\";\nimport { Paragraph } from \"docx\";\n\nconst browserRender = async (value: string): Promise<string> => {\n  const element = document.createElement(\"div\");\n  element.style.visibility = \"hidden\";\n  document.body.appendChild(element);\n  try {\n    const result = await mermaid.render(\"mermaid\", value, element);\n    return result.svg;\n  } finally {\n    document.body.removeChild(element);\n  }\n};\n\n/**\n * A plugin to render Mermaid inside \"code\" nodes with \"mermaid\" language.\n */\nexport const mermaidPlugin = (): RemarkDocxPlugin => {\n  const renderSvg = browserRender;\n\n  return async ({ root, images }) => {\n    const promises: Promise<void>[] = [];\n    visit(root, \"code\", ({ lang, value }) => {\n      if (lang === \"mermaid\") {\n        if (!images.has(value)) {\n          images.set(value, null);\n\n          promises.push(\n            (async () => {\n              try {\n                const svg = await renderSvg(value);\n                const data = new TextEncoder().encode(svg);\n                const { width, height } = imageSize(data);\n                const pngBuffer = await browserSvgToPng({\n                  buffer: data.buffer,\n                  width,\n                  height,\n                });\n\n                images.set(value, {\n                  type: \"svg\",\n                  width,\n                  height,\n                  data: data.buffer,\n                  fallback: pngBuffer,\n                });\n              } catch (e) {\n                warnOnce(String(e));\n              }\n            })(),\n          );\n        }\n      }\n    });\n\n    await Promise.all(promises);\n\n    return {\n      code: ({ lang, value }, ctx) => {\n        if (lang !== \"mermaid\") {\n          return null;\n        }\n        const image = ctx.images.get(value);\n        if (image == null) {\n          return null;\n        }\n\n        return new Paragraph({\n          children: ctx.render([{ type: \"image\", url: value }]),\n        });\n      },\n    };\n  };\n};\n"],"names":["visit","imageSize","browserSvgToPng","warnOnce","Paragraph"],"mappings":";;;;;;;;;AAQA,MAAM,aAAa,GAAG,OAAO,KAAa,KAAqB;IAC7D,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC7C,IAAA,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ;AACnC,IAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;AAClC,IAAA,IAAI;AACF,QAAA,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC;QAC9D,OAAO,MAAM,CAAC,GAAG;IACnB;YAAU;AACR,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;IACpC;AACF,CAAC;AAED;;AAEG;AACI,MAAM,aAAa,GAAG,MAAuB;IAClD,MAAM,SAAS,GAAG,aAAa;IAE/B,OAAO,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAI;QAChC,MAAM,QAAQ,GAAoB,EAAE;AACpC,QAAAA,oBAAK,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAI;AACtC,YAAA,IAAI,IAAI,KAAK,SAAS,EAAE;gBACtB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AACtB,oBAAA,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC;AAEvB,oBAAA,QAAQ,CAAC,IAAI,CACX,CAAC,YAAW;AACV,wBAAA,IAAI;AACF,4BAAA,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC;4BAClC,MAAM,IAAI,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC;4BAC1C,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAGC,mBAAS,CAAC,IAAI,CAAC;AACzC,4BAAA,MAAM,SAAS,GAAG,MAAMC,mCAAe,CAAC;gCACtC,MAAM,EAAE,IAAI,CAAC,MAAM;gCACnB,KAAK;gCACL,MAAM;AACP,6BAAA,CAAC;AAEF,4BAAA,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE;AAChB,gCAAA,IAAI,EAAE,KAAK;gCACX,KAAK;gCACL,MAAM;gCACN,IAAI,EAAE,IAAI,CAAC,MAAM;AACjB,gCAAA,QAAQ,EAAE,SAAS;AACpB,6BAAA,CAAC;wBACJ;wBAAE,OAAO,CAAC,EAAE;AACV,4BAAAC,cAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;wBACrB;oBACF,CAAC,GAAG,CACL;gBACH;YACF;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;QAE3B,OAAO;YACL,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,GAAG,KAAI;AAC7B,gBAAA,IAAI,IAAI,KAAK,SAAS,EAAE;AACtB,oBAAA,OAAO,IAAI;gBACb;gBACA,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;AACnC,gBAAA,IAAI,KAAK,IAAI,IAAI,EAAE;AACjB,oBAAA,OAAO,IAAI;gBACb;gBAEA,OAAO,IAAIC,cAAS,CAAC;AACnB,oBAAA,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;AACtD,iBAAA,CAAC;YACJ,CAAC;SACF;AACH,IAAA,CAAC;AACH;;;;"}