@cf-wasm/og
Version:
Generate Open Graph Images dynamically from HTML/CSS without a browser.
101 lines (99 loc) • 3.75 kB
JavaScript
;
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
});