UNPKG

@cf-wasm/og

Version:

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

1 lines 4.83 kB
{"version":3,"file":"emoji.cjs","names":["EMOJI_CACHE_MAP","cache","FetchError"],"sources":["../../src/core/emoji.ts"],"sourcesContent":["import { cache } from './cache';\nimport { FetchError } from './errors';\nimport { EMOJI_CACHE_MAP } from './maps';\n\n/** Apis for loading emoji svg */\nexport const EMOJI_APIS = {\n\topenmoji: (code: string) =>\n\t\t`https://cdn.jsdelivr.net/npm/@svgmoji/openmoji@2.0.0/svg/${code.toUpperCase()}.svg`,\n\tblobmoji: (code: string) =>\n\t\t`https://cdn.jsdelivr.net/npm/@svgmoji/blob@2.0.0/svg/${code.toUpperCase()}.svg`,\n\tnoto: (code: string) =>\n\t\t`https://cdn.jsdelivr.net/gh/svgmoji/svgmoji/packages/svgmoji__noto/svg/${code.toUpperCase()}.svg`,\n\ttwemoji: (code: string) =>\n\t\t`https://cdn.jsdelivr.net/gh/twitter/twemoji@14.0.2/assets/svg/${code.toLowerCase()}.svg`,\n\tfluent: (code: string) =>\n\t\t`https://cdn.jsdelivr.net/gh/shuding/fluentui-emoji-unicode/assets/${code.toLowerCase()}_color.svg`,\n\tfluentFlat: (code: string) =>\n\t\t`https://cdn.jsdelivr.net/gh/shuding/fluentui-emoji-unicode/assets/${code.toLowerCase()}_flat.svg`,\n};\n\n/** Represents type of emoji */\nexport type EmojiType = keyof typeof EMOJI_APIS;\n\nexport function toCodePoint(unicodeSurrogates: string): string {\n\tconst r: string[] = [];\n\tlet c = 0;\n\tlet p = 0;\n\tlet i = 0;\n\twhile (i < unicodeSurrogates.length) {\n\t\tc = unicodeSurrogates.charCodeAt(i);\n\t\ti += 1;\n\t\tif (p) {\n\t\t\tr.push((65536 + ((p - 55296) << 10) + (c - 56320)).toString(16));\n\t\t\tp = 0;\n\t\t} else if (55296 <= c && c <= 56319) {\n\t\t\tp = c;\n\t\t} else {\n\t\t\tr.push(c.toString(16));\n\t\t}\n\t}\n\treturn r.join('-');\n}\n\nconst U200D = String.fromCharCode(8205);\nconst UFE0Fg = /\\uFE0F/g;\n\nexport function getIconCode(char: string): string {\n\treturn toCodePoint(char.indexOf(U200D) < 0 ? char.replace(UFE0Fg, '') : char);\n}\n\n/** Default emoji type */\nexport const DEFAULT_EMOJI_TYPE: EmojiType = 'twemoji';\n\n/**\n * A helper function for loading emoji svg\n *\n * @param code The emoji code\n * @param type The {@link EmojiType}\n * @param cacheStore The Cache to be used for caching svg responses\n *\n * @returns The emoji's svg as string\n */\nexport async function loadEmoji(\n\tcode: string,\n\ttype?: EmojiType,\n): Promise<string> {\n\tconst apiType = !type || !EMOJI_APIS[type] ? DEFAULT_EMOJI_TYPE : type;\n\tconst api = EMOJI_APIS[apiType];\n\n\tconst svgUrl = api(code);\n\n\t// Check if cache map has this emoji\n\tconst fromMap = EMOJI_CACHE_MAP.get(svgUrl);\n\n\tif (fromMap) {\n\t\treturn fromMap;\n\t}\n\n\tconst response = await cache.serve(svgUrl, () =>\n\t\tfetch(svgUrl)\n\t\t\t.then((res) => {\n\t\t\t\tif (!res.ok) {\n\t\t\t\t\tthrow new FetchError(\n\t\t\t\t\t\t`Response was not successful (status: \\`${res.status}\\`, statusText: \\`${res.statusText}\\`)`,\n\t\t\t\t\t\t{ response: res },\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn res;\n\t\t\t})\n\t\t\t.catch((e) => {\n\t\t\t\tthrow new FetchError(`An error ocurred while fetching \\`${svgUrl}\\``, {\n\t\t\t\t\tcause: e,\n\t\t\t\t\tresponse: e instanceof FetchError ? e.response : undefined,\n\t\t\t\t});\n\t\t\t}),\n\t);\n\n\t// To suppress warnings in cloudflare devtools\n\tresponse.headers.set('content-type', 'text/xml');\n\n\tconst svgCode = await response.text();\n\n\t// Put it to cache map\n\tEMOJI_CACHE_MAP.set(svgUrl, svgCode);\n\n\treturn svgCode;\n}\n"],"mappings":";;;;;AAKA,MAAa,aAAa;CACzB,WAAW,SACV,4DAA4D,KAAK,YAAY,EAAE;CAChF,WAAW,SACV,wDAAwD,KAAK,YAAY,EAAE;CAC5E,OAAO,SACN,0EAA0E,KAAK,YAAY,EAAE;CAC9F,UAAU,SACT,iEAAiE,KAAK,YAAY,EAAE;CACrF,SAAS,SACR,qEAAqE,KAAK,YAAY,EAAE;CACzF,aAAa,SACZ,qEAAqE,KAAK,YAAY,EAAE;AAC1F;AAKA,SAAgB,YAAY,mBAAmC;CAC9D,MAAM,IAAc,CAAC;CACrB,IAAI,IAAI;CACR,IAAI,IAAI;CACR,IAAI,IAAI;CACR,OAAO,IAAI,kBAAkB,QAAQ;EACpC,IAAI,kBAAkB,WAAW,CAAC;EAClC,KAAK;EACL,IAAI,GAAG;GACN,EAAE,MAAM,SAAU,IAAI,SAAU,OAAO,IAAI,OAAA,CAAQ,SAAS,EAAE,CAAC;GAC/D,IAAI;EACL,OAAO,IAAI,SAAS,KAAK,KAAK,OAC7B,IAAI;OAEJ,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;CAEvB;CACA,OAAO,EAAE,KAAK,GAAG;AAClB;AAEA,MAAM,QAAQ,OAAO,aAAa,IAAI;AACtC,MAAM,SAAS;AAEf,SAAgB,YAAY,MAAsB;CACjD,OAAO,YAAY,KAAK,QAAQ,KAAK,IAAI,IAAI,KAAK,QAAQ,QAAQ,EAAE,IAAI,IAAI;AAC7E;;AAGA,MAAa,qBAAgC;;;;;;;;;;AAW7C,eAAsB,UACrB,MACA,MACkB;CAClB,MAAM,UAAU,CAAC,QAAQ,CAAC,WAAW,QAAQ,qBAAqB;CAClE,MAAM,MAAM,WAAW;CAEvB,MAAM,SAAS,IAAI,IAAI;CAGvB,MAAM,UAAUA,aAAAA,gBAAgB,IAAI,MAAM;CAE1C,IAAI,SACH,OAAO;CAGR,MAAM,WAAW,MAAMC,cAAAA,MAAM,MAAM,cAClC,MAAM,MAAM,CAAC,CACX,MAAM,QAAQ;EACd,IAAI,CAAC,IAAI,IACR,MAAM,IAAIC,eAAAA,WACT,0CAA0C,IAAI,OAAO,oBAAoB,IAAI,WAAW,MACxF,EAAE,UAAU,IAAI,CACjB;EAED,OAAO;CACR,CAAC,CAAC,CACD,OAAO,MAAM;EACb,MAAM,IAAIA,eAAAA,WAAW,qCAAqC,OAAO,KAAK;GACrE,OAAO;GACP,UAAU,aAAaA,eAAAA,aAAa,EAAE,WAAW,KAAA;EAClD,CAAC;CACF,CAAC,CACH;CAGA,SAAS,QAAQ,IAAI,gBAAgB,UAAU;CAE/C,MAAM,UAAU,MAAM,SAAS,KAAK;CAGpC,aAAA,gBAAgB,IAAI,QAAQ,OAAO;CAEnC,OAAO;AACR"}