{"version":3,"file":"index.cjs","sources":["../../src/vitepress/constants.ts","../../src/vitepress/options.ts","../../src/vitepress/utils/emoji.ts","../../src/vitepress/utils/svg/escape.ts","../../src/vitepress/utils/svg/render.ts","../../src/vitepress/utils/task.ts","../../src/vitepress/utils/vitepress/locales.ts","../../src/vitepress/utils/vitepress/sidebar.ts","../../src/vitepress/index.ts"],"sourcesContent":["import { cyan, gray } from 'colorette'\n\nexport const logModulePrefix = `${cyan(`@nolebase/vitepress-plugin-og-image`)}${gray(':')}`\n","import type { SiteConfig } from 'vitepress'\n\nimport type { BuildEndGenerateOpenGraphImagesOptionsCategory, PageItem } from './types'\n\nimport { dirname, resolve } from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nimport fs from 'fs-extra'\n\nimport { red, yellow } from 'colorette'\n\nimport { logModulePrefix } from './constants'\n\nexport async function tryToLocateTemplateSVGFile(siteConfig: SiteConfig, configTemplateSvgPath?: string): Promise<string | undefined> {\n  if (configTemplateSvgPath != null)\n    return resolve(siteConfig.srcDir, configTemplateSvgPath)\n\n  const templateSvgPathUnderPublicDir = resolve(siteConfig.srcDir, 'public', 'og-template.svg')\n  if (await fs.pathExists(templateSvgPathUnderPublicDir))\n    return templateSvgPathUnderPublicDir\n\n  const __dirname = dirname(fileURLToPath(import.meta.url))\n  const templateSvgPathUnderRootDir = resolve(__dirname, 'assets', 'og-template.svg')\n  if (await fs.pathExists(templateSvgPathUnderRootDir))\n    return templateSvgPathUnderRootDir\n}\n\nexport async function tryToLocateFontFile(siteConfig: SiteConfig): Promise<string | undefined> {\n  const fontPathUnderPublicDir = resolve(siteConfig.srcDir, 'public', 'SourceHanSansSC.otf')\n  if (await fs.pathExists(fontPathUnderPublicDir))\n    return fontPathUnderPublicDir\n\n  const __dirname = dirname(fileURLToPath(import.meta.url))\n  const fontPathUnderRootDir = resolve(__dirname, 'assets', 'SourceHanSansSC.otf')\n  if (await fs.pathExists(fontPathUnderRootDir))\n    return fontPathUnderRootDir\n}\n\nexport async function applyCategoryText(pageItem: PageItem, categoryOptions?: BuildEndGenerateOpenGraphImagesOptionsCategory): Promise<string | void> {\n  if (typeof categoryOptions?.byCustomGetter !== 'undefined') {\n    const gotTextMaybePromise = categoryOptions.byCustomGetter({ ...pageItem })\n\n    if (typeof gotTextMaybePromise !== 'undefined') {\n      if (gotTextMaybePromise instanceof Promise)\n        return await gotTextMaybePromise\n\n      if (gotTextMaybePromise)\n        return gotTextMaybePromise\n    }\n  }\n\n  if (typeof categoryOptions?.byPathPrefix !== 'undefined') {\n    for (const { prefix, text } of categoryOptions.byPathPrefix) {\n      if (pageItem.normalizedSourceFilePath.startsWith(prefix)) {\n        if (!text) {\n          console.warn(\n            `${logModulePrefix} ${yellow('[WARN]')} empty text for prefix ${prefix} when processing ${pageItem.sourceFilePath} with categoryOptions.byPathPrefix, will ignore...`,\n          )\n\n          return\n        }\n\n        return text\n      }\n      if (pageItem.normalizedSourceFilePath.startsWith(`/${prefix}`)) {\n        if (!text) {\n          console.warn(\n            `${logModulePrefix} ${yellow('[WARN]')} empty text for prefix ${prefix} when processing ${pageItem.sourceFilePath} with categoryOptions.byPathPrefix, will ignore...`,\n          )\n\n          return\n        }\n\n        return text\n      }\n    }\n\n    console.warn(\n      `${logModulePrefix} ${yellow('[WARN]')} no path prefix matched for ${pageItem.sourceFilePath} with categoryOptions.byPathPrefix, will ignore...`,\n    )\n\n    return\n  }\n\n  if (typeof categoryOptions?.byLevel !== 'undefined') {\n    const level = Number.parseInt(String(categoryOptions?.byLevel ?? 0))\n    if (Number.isNaN(level)) {\n      console.warn(\n        `${logModulePrefix} ${yellow('[ERROR]')} byLevel must be a number, but got ${categoryOptions.byLevel} instead when processing ${pageItem.sourceFilePath} with categoryOptions.byLevel, will ignore...`,\n      )\n      return\n    }\n\n    const dirs = pageItem.sourceFilePath.split('/')\n    if (dirs.length > level)\n      return dirs[level]\n\n    console.warn(`${logModulePrefix} ${red(`[ERROR] byLevel is out of range for ${pageItem.sourceFilePath} with categoryOptions.byLevel.`)} will ignore...`)\n  }\n}\n\nexport async function applyCategoryTextWithFallback(pageItem: PageItem, categoryOptions?: BuildEndGenerateOpenGraphImagesOptionsCategory): Promise<string> {\n  const customText = await applyCategoryText(pageItem, categoryOptions)\n  if (customText)\n    return customText\n\n  const fallbackWithFrontmatter = typeof categoryOptions?.fallbackWithFrontmatter === 'undefined'\n    ? true\n    : categoryOptions.fallbackWithFrontmatter\n\n  if (fallbackWithFrontmatter\n    && 'category' in pageItem.frontmatter\n    && pageItem.frontmatter.category\n    && typeof pageItem.frontmatter.category === 'string'\n  ) {\n    return (pageItem.frontmatter as { category?: string }).category ?? ''\n  }\n\n  console.warn(`${logModulePrefix} ${yellow('[WARN]')} no category text found for ${pageItem.sourceFilePath} with categoryOptions ${JSON.stringify(categoryOptions)}.}`)\n  return 'Un-categorized'\n}\n","import regexCreator from 'emoji-regex'\n\nconst emojiRegex = regexCreator()\n\nexport function removeEmoji(str: string) {\n  return str.replace(emojiRegex, '')\n}\n","// miketheprogrammer/xml-escape: Escape XML in javascript (NodeJS)\n// https://github.com/miketheprogrammer/xml-escape\n\nconst escapeMap: Record<string, string> = {\n  '<': '&lt;',\n  '>': '&gt;',\n  '\\'': '&apos;',\n  '\"': '&quot;',\n  '&': '&amp;',\n}\n\nexport function escape(content: string, ignore?: string): string {\n  ignore = (ignore || '').replace(/[^&\"<>']/g, '')\n  const pattern = '([&\"<>\\'])'.replace(new RegExp(`[${ignore}]`, 'g'), '')\n\n  return content.replace(new RegExp(pattern, 'g'), (_, item) => {\n    return escapeMap[item]\n  })\n}\n","import type { BuildEndGenerateOpenGraphImagesOptions } from '../../../vitepress/types'\n\nimport { Buffer } from 'node:buffer'\nimport { readFile } from 'node:fs/promises'\nimport { createRequire } from 'node:module'\n\nimport { initWasm, Resvg } from '@resvg/resvg-wasm'\n\nimport { removeEmoji } from '../emoji'\nimport { escape } from './escape'\n\nconst imageBuffers = new Map<string, Promise<Buffer>>()\n\nexport function templateSVG(siteName: string, siteDescription: string, title: string, category: string, ogTemplate: string, maxCharactersPerLine?: number): string {\n  maxCharactersPerLine ??= 17\n\n  // Remove emoji and split lines\n  const lines = removeEmoji(title)\n    .trim()\n    .replaceAll('\\r\\n', '\\n')\n    .split('\\n')\n    .map(line => line.trim())\n\n  // Restricted `maxCharactersPerLine` characters per line\n  for (let i = 0; i < lines.length; i++) {\n    const val = lines[i].trim()\n\n    if (val.length > maxCharactersPerLine) {\n      // attempt to break at a space\n      let breakPoint = val.lastIndexOf(' ', maxCharactersPerLine)\n\n      // attempt to break before before a capital letter\n      if (breakPoint < 0) {\n        for (let j = Math.min(val.length - 1, maxCharactersPerLine); j > 0; j--) {\n          if (val[j] === val[j].toUpperCase()) {\n            breakPoint = j\n            break\n          }\n        }\n      }\n      if (breakPoint < 0)\n        breakPoint = maxCharactersPerLine\n\n      lines[i] = val.slice(0, breakPoint)\n      lines[i + 1] = `${val.slice(lines[i].length)}${lines[i + 1] || ''}`\n    }\n    lines[i] = lines[i].trim()\n  }\n\n  const categoryStr = category ? removeEmoji(category).trim() : ''\n\n  const data = {\n    siteName,\n    siteDescription,\n    category: categoryStr,\n    line1: lines[0] || '',\n    line2: lines[1] || '',\n    line3: `${lines[2] || ''}${lines[3] ? '...' : ''}`,\n  }\n\n  return ogTemplate.replace(/\\{\\{([^}]+)\\}\\}/g, (_, name) => {\n    if (!name || typeof name !== 'string' || !(name in data))\n      return ''\n\n    const nameKeyOf = name as keyof typeof data\n    return escape(data[nameKeyOf])\n  })\n}\n\nlet resvgInit = false\n\nexport async function initSVGRenderer() {\n  try {\n    if (!resvgInit) {\n      const wasm = readFile(createRequire(import.meta.url).resolve('@resvg/resvg-wasm/index_bg.wasm'))\n      await initWasm(wasm)\n      resvgInit = true\n    }\n  }\n  catch (err) {\n    throw new Error(`Failed to init resvg wasm due to ${err}`)\n  }\n}\n\nlet fontBuffer: Uint8Array\n\nexport async function initFontBuffer(options?: { fontPath?: string }): Promise<Uint8Array | undefined> {\n  if (!options?.fontPath)\n    return\n  if (fontBuffer)\n    return fontBuffer\n\n  try {\n    fontBuffer = await readFile(options.fontPath)\n  }\n  catch (err) {\n    throw new Error(`Failed to read font file due to ${err}`)\n  }\n\n  return fontBuffer\n}\n\nexport async function renderSVG(\n  svgContent: string,\n  fontBuffer?: Uint8Array,\n  imageUrlResolver?: BuildEndGenerateOpenGraphImagesOptions['svgImageUrlResolver'],\n  additionalFontBuffers?: Uint8Array[],\n  resultImageWidth?: number,\n): Promise<{\n  png: Uint8Array\n  width: number\n  height: number\n}> {\n  try {\n    const resvg = new Resvg(\n      svgContent,\n      {\n        fitTo: { mode: 'width', value: resultImageWidth ?? 1200 },\n        font: {\n          fontBuffers: fontBuffer\n            ? [fontBuffer, ...(additionalFontBuffers ?? [])]\n            : (additionalFontBuffers ?? []),\n          // Load system fonts might cost more time\n          loadSystemFonts: false,\n        },\n      },\n    )\n\n    try {\n      const resolvedImages = await Promise.all(\n        resvg.imagesToResolve().map(async (url) => {\n          return {\n            url,\n            buffer: await resolveImageUrlWithCache(url, imageUrlResolver),\n          }\n        }),\n      )\n\n      for (const { url, buffer } of resolvedImages)\n        resvg.resolveImage(url, buffer)\n\n      const res = resvg.render()\n\n      return {\n        png: res.asPng(),\n        width: res.width,\n        height: res.height,\n      }\n    }\n    catch (err) {\n      throw new Error(`Failed to render open graph images on path due to ${err}`)\n    }\n  }\n  catch (err) {\n    throw new Error(`Failed to initiate Resvg instance to render open graph images due to ${err}`)\n  }\n}\n\nfunction resolveImageUrlWithCache(url: string, imageUrlResolver?: BuildEndGenerateOpenGraphImagesOptions['svgImageUrlResolver']): Promise<Buffer> {\n  if (imageBuffers.has(url))\n    return imageBuffers.get(url)!\n\n  const result = resolveImageUrl(url, imageUrlResolver)\n  imageBuffers.set(url, result)\n\n  return result\n}\n\nasync function resolveImageUrl(url: string, imageUrlResolver?: BuildEndGenerateOpenGraphImagesOptions['svgImageUrlResolver']) {\n  if (imageUrlResolver != null) {\n    const res = await imageUrlResolver(url)\n    if (res != null)\n      return res\n  }\n\n  const res = await fetch(url)\n  const buffer = await res.arrayBuffer()\n  return Buffer.from(buffer)\n}\n","// vitepress/src/node/utils/task.ts at df8753bd927c2b57b9188fb292c1429e9c3c8ab6 · vuejs/vitepress\n// https://github.com/vuejs/vitepress/blob/df8753bd927c2b57b9188fb292c1429e9c3c8ab6/src/node/utils/task.ts\n\nimport type { SiteConfig } from 'vitepress'\n\nimport { relative } from 'node:path'\n\nimport ora from 'ora'\n\nimport { cyan, gray, green, red, yellow } from 'colorette'\n\ninterface TaskResultSuccess {\n  status: 'success'\n  filePath: string\n}\n\ninterface TaskResultSkipped {\n  status: 'skipped'\n  reason: string\n  filePath: string\n}\n\ninterface TaskResultErrored {\n  status: 'errored'\n  reason: string\n  filePath: string\n}\n\nexport type TaskResult = TaskResultSuccess | TaskResultSkipped | TaskResultErrored\n\nexport const okMark = green('✓')\nexport const failMark = red('✖')\n\nexport async function task(taskName: string, task: () => Promise<string | undefined>) {\n  const startsAt = Date.now()\n\n  const moduleNamePrefix = cyan('@nolebase/vitepress-plugin-og-image')\n  const grayPrefix = gray(':')\n  const spinnerPrefix = `${moduleNamePrefix}${grayPrefix}`\n\n  const spinner = ora({ discardStdin: false })\n  spinner.start(`${spinnerPrefix} ${taskName}...`)\n\n  let result: string | undefined\n\n  try {\n    result = await task()\n  }\n  catch (e) {\n    spinner.stopAndPersist({ symbol: failMark })\n    throw e\n  }\n\n  const elapsed = Date.now() - startsAt\n  const suffixText = `${gray(`(${elapsed}ms)`)} ${result || ''}`\n\n  spinner.stopAndPersist({ symbol: okMark, suffixText })\n}\n\nexport function renderTaskResultsSummary(results: TaskResult[], siteConfig: SiteConfig) {\n  const successCount = results.filter(item => item.status === 'success') as TaskResultSuccess[]\n  const skippedCount = results.filter(item => item.status === 'skipped') as TaskResultSkipped[]\n  const erroredCount = results.filter(item => item.status === 'errored') as TaskResultErrored[]\n\n  const stats = `${green(`${successCount.length} generated`)}, ${yellow(`${skippedCount.length} skipped`)}, ${red(`${erroredCount.length} errored`)}`\n  const skippedList = ` - ${yellow('Following files were skipped')}:\\n\\n${skippedCount.map((item) => {\n    return gray(`    - ${relative(siteConfig.root, item.filePath)}: ${item.reason}`)\n  }).join('\\n')}`\n  const erroredList = ` - ${red('Following files encountered errors')}\\n\\n${erroredCount.map((item) => {\n    return gray(`    - ${relative(siteConfig.root, item.filePath)}: ${item.reason}`)\n  }).join('\\n')}`\n\n  const overallResults = [stats]\n\n  if (skippedCount.length > 0)\n    overallResults.push(skippedList)\n  if (erroredCount.length > 0)\n    overallResults.push(erroredList)\n\n  return overallResults.join('\\n\\n')\n}\n","import type { DefaultTheme, SiteData } from 'vitepress'\n\nexport function getLocales(siteData: SiteData<DefaultTheme.Config>) {\n  const locales: string[] = []\n  locales.push(siteData.lang ?? 'root')\n\n  if (Object.keys(siteData.locales).length === 0)\n    return locales\n\n  for (const locale in siteData.locales) {\n    if (locale !== siteData.lang)\n      locales.push(locale)\n  }\n\n  return locales\n}\n\nexport function getTitleWithLocales(siteData: SiteData<DefaultTheme.Config>, locale: string): string {\n  if (Object.keys(siteData.locales).length > 0) {\n    const title = siteData.locales[locale]?.title\n    if (title)\n      return title\n    if (siteData.locales.root.title)\n      return siteData.locales.root.title\n    return siteData.title\n  }\n\n  return siteData.title\n}\n\nexport function getDescriptionWithLocales(siteData: SiteData<DefaultTheme.Config>, locale: string): string {\n  if (Object.keys(siteData.locales).length > 0) {\n    const description = siteData.locales[locale]?.description\n    if (description)\n      return description\n    if (siteData.locales.root.description)\n      return siteData.locales.root.description\n    return siteData.description\n  }\n\n  return siteData.description\n}\n","import type { DefaultTheme, SiteData } from 'vitepress'\n\nimport { getLocales } from './locales'\n\ninterface AggregatedSidebar {\n  defaultLocale: string\n  locales: string[]\n  sidebar: Record<string, DefaultTheme.SidebarItem[]>\n}\n\n/**\n * Search for available sidebars in both the default locale and other locales over the site data and theme config.\n *\n * @param {SiteConfig<DefaultTheme.Config>} siteData Site data\n * @param {DefaultTheme.Config} themeConfig Theme config\n * @returns {AggregatedSidebar} Aggregated sidebar\n */\nexport function getSidebar(siteData: SiteData<DefaultTheme.Config>, themeConfig: DefaultTheme.Config): AggregatedSidebar {\n  const locales = getLocales(siteData)\n\n  if (locales.length === 0) {\n    return {\n      defaultLocale: siteData.lang,\n      locales: locales || [],\n      sidebar: {\n        [siteData.lang]: flattenThemeConfigSidebar(themeConfig.sidebar) || [],\n      },\n    }\n  }\n\n  const sidebar: AggregatedSidebar = {\n    defaultLocale: siteData.lang,\n    locales,\n    sidebar: {},\n  }\n\n  for (const locale of locales) {\n    let themeConfigSidebar: DefaultTheme.Sidebar = []\n    if (typeof siteData.locales[locale]?.themeConfig?.sidebar !== 'undefined') {\n      if (Array.isArray(siteData.locales[locale]?.themeConfig?.sidebar)) {\n        themeConfigSidebar = siteData.locales[locale]?.themeConfig?.sidebar || []\n      }\n      else {\n        themeConfigSidebar = siteData.locales[locale]?.themeConfig?.sidebar as DefaultTheme.Sidebar\n      }\n    }\n    else if (typeof siteData.themeConfig?.sidebar !== 'undefined') {\n      themeConfigSidebar = siteData.themeConfig?.sidebar || []\n    }\n    else if (typeof themeConfig.sidebar !== 'undefined') {\n      themeConfigSidebar = themeConfig.sidebar\n    }\n    else {\n      themeConfigSidebar = []\n    }\n\n    sidebar.sidebar[locale] = flattenThemeConfigSidebar(themeConfigSidebar) || []\n  }\n\n  return sidebar\n}\n\n/**\n * Since sidebar is possible to be either items or multi-sidebars, we need to flatten it to a single array.\n * @param {DefaultTheme.Sidebar} sidebar\n * @returns {DefaultTheme.Sidebar} Flattened sidebar\n */\nfunction flattenThemeConfigSidebar(sidebar?: DefaultTheme.Sidebar): DefaultTheme.SidebarItem[] {\n  if (!sidebar)\n    return []\n\n  if (Array.isArray(sidebar))\n    return sidebar\n\n  return Object.keys(sidebar).reduce((prev, curr) => {\n    const items = sidebar[curr]\n    return prev.concat(items)\n  }, [] as DefaultTheme.SidebarItem[])\n}\n\nexport function flattenSidebar(sidebar: DefaultTheme.SidebarItem[], base?: string): DefaultTheme.SidebarItem[] {\n  return sidebar.reduce((prev, curr) => {\n    if (curr.items) {\n      return prev.concat(\n        flattenSidebar(\n          curr.items.map(item => addBaseToItem(item, curr.base ?? base)),\n          curr.base ?? base,\n        )\n          .concat(\n            curr.link == null\n              ? []\n              : [{\n                  ...curr,\n                  items: undefined,\n                  link: curr.link != null\n                    ? ((curr.base ?? '') + curr.link)\n                    : curr.link,\n                }],\n          ),\n      )\n    }\n\n    return prev.concat(curr)\n  }, [] as DefaultTheme.SidebarItem[])\n}\n\nfunction addBaseToItem(item: DefaultTheme.SidebarItem, base?: string) {\n  if (base == null || base === '')\n    return item\n\n  return {\n    ...item,\n    link: item.link != null\n      ? (base + item.link)\n      : item.link,\n  }\n}\n","import type { Buffer } from 'node:buffer'\n\nimport type { DefaultTheme, SiteConfig } from 'vitepress'\n\nimport type { BuildEndGenerateOpenGraphImagesOptions, PageItem } from './types'\nimport type { TaskResult } from './utils/task'\n\nimport { basename, dirname, join, relative, sep } from 'node:path'\nimport { sep as posixSep } from 'node:path/posix'\n\nimport fs from 'fs-extra'\nimport GrayMatter from 'gray-matter'\nimport RehypeMeta from 'rehype-meta'\nimport RehypeParse from 'rehype-parse'\nimport RehypeStringify from 'rehype-stringify'\n\nimport { gray, green, red, yellow } from 'colorette'\nimport { defu } from 'defu'\nimport { glob } from 'tinyglobby'\nimport { unified } from 'unified'\nimport { visit } from 'unist-util-visit'\n\nimport { logModulePrefix } from './constants'\nimport { applyCategoryTextWithFallback, tryToLocateFontFile, tryToLocateTemplateSVGFile } from './options'\nimport { initFontBuffer, initSVGRenderer, renderSVG, templateSVG } from './utils/svg/render'\nimport { renderTaskResultsSummary, task } from './utils/task'\nimport { getDescriptionWithLocales, getTitleWithLocales } from './utils/vitepress/locales'\nimport { flattenSidebar, getSidebar } from './utils/vitepress/sidebar'\n\n/**\n * Render SVG and rewrite HTML\n *\n * Will always save the rendered Open Graph image as PNG under the same directory as the HTML file with\n * the name `og-${fileName of rendered HTML}.png`.\n *\n * @param {SiteConfig} siteConfig - Site configuration\n * @param {string} siteTitle - Site title\n * @param {string} siteDescription - Site description\n * @param {PageItem} page - Page item\n * @param {string} file - File path\n * @param {string} ogImageTemplateSvg - Open Graph image template SVG\n * @param {string} ogImageTemplateSvgPath - Open Graph image template SVG path\n * @param {string} domain - Domain\n * @param {BuildEndGenerateOpenGraphImagesOptions['svgImageUrlResolver']} imageUrlResolver - SVG image URL resolver\n * @param {Buffer[]} additionalFontBuffers - Additional font buffers\n * @param {number} resultImageWidth - Result image width\n * @param {number} maxCharactersPerLine - Max characters per line\n * @param {boolean} overrideExistingMetaTags - Whether to override existing meta tags\n * @returns {Promise<TaskResult>} Task result\n */\nasync function renderSVGAndRewriteHTML(\n  siteConfig: SiteConfig,\n  siteTitle: string,\n  siteDescription: string,\n  page: PageItem,\n  file: string,\n  ogImageTemplateSvg: string,\n  ogImageTemplateSvgPath: string,\n  domain: string,\n  imageUrlResolver: BuildEndGenerateOpenGraphImagesOptions['svgImageUrlResolver'],\n  additionalFontBuffers?: Buffer[],\n  resultImageWidth?: number,\n  maxCharactersPerLine?: number,\n  overrideExistingMetaTags?: boolean,\n): Promise<TaskResult> {\n  const fileName = basename(file, '.html')\n  const ogImageFilePathBaseName = `og-${fileName}.png`\n  const ogImageFilePathFullName = `${dirname(file)}/${ogImageFilePathBaseName}`\n\n  const html = await fs.readFile(file, 'utf-8')\n  const parsedHtml = unified()\n    .use(RehypeParse, { fragment: true })\n    .parse(html)\n\n  let hasOgImage: string | false = false\n  visit(parsedHtml, 'element', (node) => {\n    if (node.tagName === 'meta' && (node.properties?.name === 'og:image' || node.properties?.name === 'twitter:image'))\n      hasOgImage = node.properties.name\n    else\n      return true\n  })\n\n  if (hasOgImage && !overrideExistingMetaTags) {\n    return {\n      filePath: file,\n      status: 'skipped',\n      reason: `already has ${hasOgImage} meta tag`,\n    }\n  }\n\n  const templatedOgImageSvg = templateSVG(\n    siteTitle,\n    siteDescription,\n    page.title,\n    page.category ?? '',\n    ogImageTemplateSvg,\n    maxCharactersPerLine,\n  )\n\n  let width: number\n  let height: number\n  try {\n    const res = await renderSVGAndSavePNG(\n      templatedOgImageSvg,\n      ogImageFilePathFullName,\n      ogImageTemplateSvgPath,\n      relative(siteConfig.srcDir, file),\n      { fontPath: await tryToLocateFontFile(siteConfig), imageUrlResolver, additionalFontBuffers, resultImageWidth },\n    )\n    width = res.width\n    height = res.height\n  }\n  catch (err) {\n    return {\n      filePath: file,\n      status: 'errored',\n      reason: String(err),\n    }\n  }\n\n  const result = await unified()\n    .use(RehypeParse)\n    .use(RehypeMeta, {\n      og: true,\n      twitter: true,\n      image: {\n        url: `${domain}/${\n          relative(siteConfig.outDir, ogImageFilePathFullName)\n            .split(sep)\n            .map(item => encodeURIComponent(item))\n            .join('/')\n        }`,\n        width,\n        height,\n      },\n    })\n    .use(RehypeStringify)\n    .process(html)\n\n  try {\n    await fs.writeFile(file, String(result), 'utf-8')\n  }\n  catch (err) {\n    console.error(\n      `${logModulePrefix} `,\n      `${red('[ERROR] ✗')} failed to write transformed HTML on path [${relative(siteConfig.srcDir, file)}] due to ${err}`,\n      `\\n${red((err as Error).message)}\\n${gray(String((err as Error).stack))}`,\n    )\n    return {\n      filePath: file,\n      status: 'errored',\n      reason: String(err),\n    }\n  }\n\n  return {\n    filePath: file,\n    status: 'success',\n  }\n}\n\nasync function renderSVGAndSavePNG(\n  svgContent: string,\n  saveAs: string,\n  forSvgSource: string,\n  forFile: string,\n  options: {\n    fontPath?: string\n    imageUrlResolver?: BuildEndGenerateOpenGraphImagesOptions['svgImageUrlResolver']\n    additionalFontBuffers?: Buffer[]\n    resultImageWidth?: number\n  },\n) {\n  try {\n    const { png: pngBuffer, width, height } = await renderSVG(svgContent, await initFontBuffer(options), options.imageUrlResolver, options.additionalFontBuffers, options.resultImageWidth)\n\n    try {\n      await fs.writeFile(saveAs, pngBuffer, 'binary')\n    }\n    catch (err) {\n      console.error(\n        `${logModulePrefix} `,\n        `${red('[ERROR] ✗')} open graph image rendered successfully, but failed to write generated open graph image on path [${saveAs}] due to ${err}`,\n        `\\n${red((err as Error).message)}\\n${gray(String((err as Error).stack))}`,\n      )\n\n      throw err\n    }\n\n    return {\n      width,\n      height,\n    }\n  }\n  catch (err) {\n    console.error(\n      `${logModulePrefix} `,\n      `${red('[ERROR] ✗')} failed to generate open graph image as ${green(`[${saveAs}]`)} with ${green(`[${forSvgSource}]`)} due to ${red(String(err))}`,\n      `skipped open graph image generation for ${green(`[${forFile}]`)}`,\n      `\\n\\nSVG Content:\\n\\n${svgContent}`,\n      `\\n\\nDetailed stack information bellow:\\n\\n${red((err as Error).message)}\\n${gray(String((err as Error).stack))}`,\n    )\n\n    throw err\n  }\n}\n\n/**\n * Build end generate open graph images.\n * @param {BuildEndGenerateOpenGraphImagesOptions} options - Options used for generating open graph images.\n * @returns Build end hook for VitePress\n */\nexport function buildEndGenerateOpenGraphImages(options: BuildEndGenerateOpenGraphImagesOptions) {\n  options = defu(options, {\n    resultImageWidth: 1200,\n    maxCharactersPerLine: 17,\n    overrideExistingMetaTags: true,\n  } satisfies Omit<BuildEndGenerateOpenGraphImagesOptions, 'baseUrl'>)\n\n  return async (siteConfig: SiteConfig) => {\n    await initSVGRenderer()\n\n    const ogImageTemplateSvgPath = await tryToLocateTemplateSVGFile(siteConfig, options.templateSvgPath)\n\n    await task('rendering open graph images', async (): Promise<string | undefined> => {\n      const themeConfig = siteConfig.site.themeConfig as unknown as DefaultTheme.Config\n      const sidebar = getSidebar(siteConfig.site, themeConfig)\n\n      // Flatten sidebar\n      let pages: PageItem[] = []\n\n      for (const locale of sidebar.locales) {\n        const flattenedSidebar = flattenSidebar(sidebar.sidebar[locale])\n        const items: PageItem[] = []\n\n        for (const item of flattenedSidebar) {\n          const relativeLink = item.link ?? ''\n          const sourceFilePath = relativeLink.endsWith('/')\n            ? `${relativeLink}index.md`\n            : relativeLink.endsWith('.md')\n              ? relativeLink\n              : `${relativeLink}.md`\n\n          const sourceFileContent = fs.readFileSync(`${join(siteConfig.srcDir, sourceFilePath)}`, 'utf-8')\n          const { data } = GrayMatter(sourceFileContent)\n          const res: PageItem = {\n            ...item,\n            title: item.text ?? (item as any).title ?? 'Untitled',\n            category: '',\n            locale,\n            frontmatter: data,\n            sourceFilePath,\n            normalizedSourceFilePath: sourceFilePath.split(sep).join(posixSep),\n          }\n\n          res.category = await applyCategoryTextWithFallback(res, options.category)\n\n          items.push(res)\n        }\n\n        pages = pages.concat(items)\n      }\n\n      const files = await glob(`${siteConfig.outDir}/**/*.html`, { onlyFiles: true })\n\n      if (!ogImageTemplateSvgPath) {\n        return ''\n          + `${green(`${0} generated`)}, `\n          + `${yellow(`${files.length} (all) skipped`)}, `\n          + `${red(`${0} errored`)}.`\n          + `\\n\\n`\n          + ` - ${red('Failed to locate')} og-template.svg ${red('under public or plugin directory')}, did you forget to put it? will skip open graph image generation.`\n      }\n\n      const ogImageTemplateSvg = fs.readFileSync(ogImageTemplateSvgPath, 'utf-8')\n      const generatedForFiles = await Promise.all(files.map(async (file): Promise<TaskResult> => {\n        const relativePath = relative(siteConfig.outDir, file)\n\n        const link = `/${\n          relativePath\n            .slice(0, relativePath.lastIndexOf('.'))\n            .replaceAll(sep, '/')\n        }`.split('/index')[0]\n\n        const page = pages.find((item) => {\n          let itemLink = item.link\n          if (itemLink?.endsWith('.md'))\n            itemLink = itemLink.slice(0, -'.md'.length)\n\n          if (itemLink === link)\n            return true\n\n          if (itemLink === `${link}/`)\n            return true\n\n          return false\n        })\n        if (!page) {\n          return {\n            filePath: file,\n            status: 'skipped',\n            reason: 'correspond Markdown page not found in sidebar',\n          }\n        }\n\n        const siteTitle = getTitleWithLocales(siteConfig.site, page.locale)\n        const siteDescription = getDescriptionWithLocales(siteConfig.site, page.locale)\n\n        return await renderSVGAndRewriteHTML(\n          siteConfig,\n          siteTitle,\n          siteDescription,\n          page,\n          file,\n          ogImageTemplateSvg,\n          ogImageTemplateSvgPath,\n          options.baseUrl,\n          options.svgImageUrlResolver,\n          options.svgFontBuffers,\n          options.resultImageWidth,\n          options.maxCharactersPerLine,\n          options.overrideExistingMetaTags,\n        )\n      }))\n\n      return renderTaskResultsSummary(generatedForFiles, siteConfig)\n    })\n  }\n}\n"],"names":["cyan","gray","resolve","fs","dirname","fileURLToPath","yellow","red","regexCreator","readFile","createRequire","initWasm","fontBuffer","Resvg","res","Buffer","green","task","ora","relative","basename","unified","RehypeParse","visit","RehypeMeta","sep","RehypeStringify","defu","join","GrayMatter","posixSep","glob"],"mappings":"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"}