UNPKG

@cf-wasm/og

Version:

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

83 lines (81 loc) 2.93 kB
"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/core/asset.ts var asset_exports = {}; __export(asset_exports, { ASSET_CACHE_MAP: () => ASSET_CACHE_MAP, DETECTOR: () => DETECTOR, loadDynamicAsset: () => loadDynamicAsset, loadSatoriAsset: () => loadSatoriAsset }); module.exports = __toCommonJS(asset_exports); var import_emoji = require("./emoji.js"); var import_font = require("./font.js"); var import_language = require("./language.js"); var DETECTOR = new import_language.FontDetector(); var ASSET_CACHE_MAP = /* @__PURE__ */ new Map(); var loadSatoriAsset = async (languageCode, segment, emoji) => { if (languageCode === "emoji") { return `data:image/svg+xml;base64,${btoa(await (0, import_emoji.loadEmoji)((0, import_emoji.getIconCode)(segment), emoji))}`; } const codes = languageCode.split("|"); const names = codes.map((code) => import_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); const fontData = await Promise.all( fonts.map( (font) => (0, import_font.loadGoogleFont)(font, { text: textByFont[font], weight: 400 }) ) ); return fontData.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}\`. `, e); } } return []; }; var loadDynamicAsset = async (languageCode, segment, emoji) => { const key = `${languageCode}:${segment}`; if (ASSET_CACHE_MAP.has(key)) { const cache = ASSET_CACHE_MAP.get(key); return cache ?? []; } const asset = await loadSatoriAsset(languageCode, segment, emoji); ASSET_CACHE_MAP.set(key, asset); return asset; }; // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { ASSET_CACHE_MAP, DETECTOR, loadDynamicAsset, loadSatoriAsset });