UNPKG

x-satori

Version:

use Vue or Astro file to generate SVG image using Satori

52 lines (50 loc) 1.56 kB
import { defineSatoriConfig, genSatoriSVG } from "./chunk-JDONRD3H.mjs"; // src/astro.ts import crypto from "crypto"; import fs from "fs"; import { dirname, resolve } from "path"; import { fileURLToPath } from "url"; import { transform } from "@astrojs/compiler"; import { experimental_AstroContainer as AstroContainer } from "astro/container"; async function satoriAstro(opts, astroTemplateStr) { const ___dirname = dirname(fileURLToPath(import.meta.url)); const rawHash = crypto.createHash("md5").update(astroTemplateStr).digest("hex"); const tmpFile = resolve( ___dirname, ".tmp", `x-satori-${rawHash}.js` ); if (!fs.existsSync(tmpFile)) { const { code: tsCode } = await transform( astroTemplateStr, { filename: tmpFile, sourcemap: "external", internalURL: "astro/runtime/server/index.js", resolvePath: async (s) => s } ); const { transformSync } = await import("esbuild"); const { code: jsCode } = transformSync(tsCode, { loader: "ts" }); fs.mkdirSync(resolve(___dirname, ".tmp"), { recursive: true }); fs.writeFileSync(tmpFile, jsCode, "utf-8"); } const templateComponent = await (await import(tmpFile)).default; const container = await AstroContainer.create(); const renderedHtmlStr = await container.renderToString( templateComponent, { props: opts.props } ); return await genSatoriSVG(opts, renderedHtmlStr); } var astro_default = satoriAstro; export { astro_default as default, defineSatoriConfig, satoriAstro };