Bluesky app fork with some witchin' additions 馃挮
at feat/tealfm 37 lines 969 B view raw
1import twemoji from 'twemoji' 2 3import {renderLogger} from './logger.js' 4 5const U200D = String.fromCharCode(0x200d) 6const UFE0F_REGEXP = /\uFE0F/g 7 8export async function loadEmojiAsSvg(chars: string) { 9 const cached = emojiCache.get(chars) 10 if (cached) return cached 11 const iconCode = twemoji.convert.toCodePoint( 12 chars.indexOf(U200D) < 0 ? chars.replace(UFE0F_REGEXP, '') : chars, 13 ) 14 const res = await fetch(getEmojiUrl(iconCode)) 15 const body = await res.arrayBuffer() 16 if (!res.ok) { 17 renderLogger.warn( 18 {status: res.status, err: Buffer.from(body).toString()}, 19 'could not fetch emoji', 20 ) 21 return 22 } 23 const svg = 24 'data:image/svg+xml;base64,' + Buffer.from(body).toString('base64') 25 emojiCache.set(chars, svg) 26 return svg 27} 28 29const emojiCache = new Map<string, string>() 30 31function getEmojiUrl(code: string) { 32 return ( 33 'https://cdnjs.cloudflare.com/ajax/libs/twemoji/16.0.1/svg/' + 34 code.toLowerCase() + 35 '.svg' 36 ) 37}