UNPKG

@cf-wasm/og

Version:

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

101 lines (99 loc) 3.75 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/emoji.ts var emoji_exports = {}; __export(emoji_exports, { DEFAULT_EMOJI_TYPE: () => DEFAULT_EMOJI_TYPE, EMOJI_APIS: () => EMOJI_APIS, EMOJI_CACHE_MAP: () => EMOJI_CACHE_MAP, getIconCode: () => getIconCode, loadEmoji: () => loadEmoji, toCodePoint: () => toCodePoint }); module.exports = __toCommonJS(emoji_exports); var import_cache = require("./cache.js"); var import_errors = require("./errors.js"); var EMOJI_APIS = { openmoji: (code) => `https://cdn.jsdelivr.net/npm/@svgmoji/openmoji@2.0.0/svg/${code.toUpperCase()}.svg`, blobmoji: (code) => `https://cdn.jsdelivr.net/npm/@svgmoji/blob@2.0.0/svg/${code.toUpperCase()}.svg`, noto: (code) => `https://cdn.jsdelivr.net/gh/svgmoji/svgmoji/packages/svgmoji__noto/svg/${code.toUpperCase()}.svg`, twemoji: (code) => `https://cdn.jsdelivr.net/gh/twitter/twemoji@14.0.2/assets/svg/${code.toLowerCase()}.svg`, fluent: (code) => `https://cdn.jsdelivr.net/gh/shuding/fluentui-emoji-unicode/assets/${code.toLowerCase()}_color.svg`, fluentFlat: (code) => `https://cdn.jsdelivr.net/gh/shuding/fluentui-emoji-unicode/assets/${code.toLowerCase()}_flat.svg` }; var toCodePoint = (unicodeSurrogates) => { const r = []; let c = 0; let p = 0; let i = 0; while (i < unicodeSurrogates.length) { c = unicodeSurrogates.charCodeAt(i); i += 1; if (p) { r.push((65536 + (p - 55296 << 10) + (c - 56320)).toString(16)); p = 0; } else if (55296 <= c && c <= 56319) { p = c; } else { r.push(c.toString(16)); } } return r.join("-"); }; var U200D = String.fromCharCode(8205); var UFE0Fg = /\uFE0F/g; var getIconCode = (char) => toCodePoint(char.indexOf(U200D) < 0 ? char.replace(UFE0Fg, "") : char); var EMOJI_CACHE_MAP = /* @__PURE__ */ new Map(); var DEFAULT_EMOJI_TYPE = "twemoji"; var loadEmoji = async (code, type) => { const apiType = !type || !EMOJI_APIS[type] ? DEFAULT_EMOJI_TYPE : type; const api = EMOJI_APIS[apiType]; const svgUrl = api(code); const fromMap = EMOJI_CACHE_MAP.get(svgUrl); if (fromMap) { return fromMap; } const response = await import_cache.cache.serve( svgUrl, () => fetch(svgUrl).then((res) => { if (!res.ok) { throw new import_errors.FetchError(`Response was not successful (status: \`${res.status}\`, statusText: \`${res.statusText}\`)`, { response: res }); } return res; }).catch((e) => { throw new import_errors.FetchError(`An error ocurred while fetching \`${svgUrl}\``, { cause: e, response: e instanceof import_errors.FetchError ? e.response : void 0 }); }) ); response.headers.set("content-type", "text/xml"); const svgCode = await response.text(); EMOJI_CACHE_MAP.set(svgUrl, svgCode); return svgCode; }; // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { DEFAULT_EMOJI_TYPE, EMOJI_APIS, EMOJI_CACHE_MAP, getIconCode, loadEmoji, toCodePoint });