From c7a7ce8ce71ae5112bd5ddc85a01ce82098c0056 Mon Sep 17 00:00:00 2001 From: Echo Date: Tue, 11 Nov 2025 11:03:06 +0100 Subject: [PATCH] [Glitch] Emoji: Load emoji with hash in URL Port 9ae0464e8f140ca89b0f1f2c549b797f7f621e07 to glitch-soc Signed-off-by: Claire --- .../flavours/glitch/features/emoji/loader.ts | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/app/javascript/flavours/glitch/features/emoji/loader.ts b/app/javascript/flavours/glitch/features/emoji/loader.ts index 3196b28b9c..67c027bc39 100644 --- a/app/javascript/flavours/glitch/features/emoji/loader.ts +++ b/app/javascript/flavours/glitch/features/emoji/loader.ts @@ -1,5 +1,5 @@ import { flattenEmojiData } from 'emojibase'; -import type { CompactEmoji, FlatCompactEmoji } from 'emojibase'; +import type { CompactEmoji, FlatCompactEmoji, Locale } from 'emojibase'; import { putEmojiData, @@ -43,9 +43,8 @@ async function fetchAndCheckEtag( if (locale === 'custom') { url.pathname = '/api/v1/custom_emojis'; } else { - // This doesn't use isDevelopment() as that module loads initial state - // which breaks workers, as they cannot access the DOM. - url.pathname = `/packs${import.meta.env.DEV ? '-dev' : ''}/emoji/${locale}.json`; + const modulePath = await localeToPath(locale); + url.pathname = modulePath; } const oldEtag = await loadLatestEtag(locale); @@ -80,3 +79,18 @@ async function fetchAndCheckEtag( return data; } + +const modules = import.meta.glob( + '../../../../../../node_modules/emojibase-data/**/compact.json', + { + as: 'url', + }, +); + +function localeToPath(locale: Locale) { + const key = `../../../../../../node_modules/emojibase-data/${locale}/compact.json`; + if (!modules[key] || typeof modules[key] !== 'function') { + throw new Error(`Unsupported locale: ${locale}`); + } + return modules[key](); +}