UNPKG

@cf-wasm/og

Version:

Generate Open Graph Images dynamically from HTML/CSS without a browser.

53 lines (52 loc) 2.06 kB
const require_maps = require("./maps.cjs"); const require_font = require("./font.cjs"); const require_emoji = require("./emoji.cjs"); const require_language = require("./language.cjs"); //#region src/core/asset.ts /** Font detector */ const DETECTOR = new require_language.FontDetector(); /** Loads dynamic asset requested by satori without caching */ async function loadSatoriAsset(languageCode, segment, emoji) { if (languageCode === "emoji") return `data:image/svg+xml;base64,${btoa(await require_emoji.loadEmoji(require_emoji.getIconCode(segment), emoji))}`; const codes = languageCode.split("|"); const names = codes.map((code) => require_language.LANGUAGE_FONT_MAP[code]).filter(Boolean).flat(); if (names.length !== 0) try { const textByFont = await DETECTOR.detect(segment, names); const fonts = Object.keys(textByFont); return (await Promise.all(fonts.map((font) => require_font.loadGoogleFont(font, { text: textByFont[font], weight: 400 })))).map((data, index) => ({ name: `satori_${codes[index]}_fallback_${segment}`, data, weight: 400, style: "normal", lang: codes[index] === "unknown" ? void 0 : codes[index] })); } catch (e) { console.warn(`(@cf-wasm/og) [ WARN ] Failed to load dynamic font for segment \`${segment}\`.\n`, e); } return []; } /** * Loads dynamic assets requested by satori * * @param languageCode The language code * @param segment The text * @param emoji The {@link EmojiType} * * @returns On success, the asset as either string or {@link Font} */ async function loadDynamicAsset(languageCode, segment, emoji) { /** Get a key from input */ const key = JSON.stringify([languageCode, segment]); if (require_maps.ASSET_CACHE_MAP.has(key)) return require_maps.ASSET_CACHE_MAP.get(key) ?? []; const asset = await loadSatoriAsset(languageCode, segment, emoji); require_maps.ASSET_CACHE_MAP.set(key, asset); return asset; } //#endregion exports.DETECTOR = DETECTOR; exports.loadDynamicAsset = loadDynamicAsset; exports.loadSatoriAsset = loadSatoriAsset; //# sourceMappingURL=asset.cjs.map