Files
2025-10-12 13:42:02 +02:00

55 lines
1.4 KiB
TypeScript

// The output of this module is designed to mimic emoji-mart's
// "data" object, such that we can use it for a light version of emoji-mart's
// emojiIndex.search functionality.
import { type BaseEmoji } from "emoji-mart";
import { type Emoji } from "emoji-mart/dist-es/utils/data";
import { type Search, type ShortCodesToEmojiData } from "./emoji_compressed";
import emojiCompressed from "./emoji_compressed";
import { unicodeToUnifiedName } from "./unicode_to_unified_name";
type Emojis = {
[key in NonNullable<keyof ShortCodesToEmojiData>]: {
native: BaseEmoji["native"],
search: Search,
short_names: Emoji["short_names"],
unified: Emoji["unified"],
};
};
const [
shortCodesToEmojiData,
skins,
categories,
short_names,
_emojisWithoutShortCodes,
] = emojiCompressed;
const emojis: Emojis = {};
// decompress
Object.keys(shortCodesToEmojiData).forEach((shortCode) => {
const [_filenameData, searchData] = shortCodesToEmojiData[shortCode];
const native = searchData[0];
let short_names = searchData[1];
const search = searchData[2];
let unified = searchData[3];
if (!unified) {
// unified name can be derived from unicodeToUnifiedName
unified = unicodeToUnifiedName(native);
}
if (short_names) {
short_names = [shortCode].concat(short_names);
}
emojis[shortCode] = {
native,
search,
short_names,
unified,
};
});
export { emojis, skins, categories, short_names };