emojibase
Version:
Emojibase utility functions for working with emoji characters.
53 lines (42 loc) • 1.55 kB
text/typescript
import { joinShortcodesToEmoji } from './joinShortcodesToEmoji';
import type { CompactEmoji, Emoji, EmojiLike, ShortcodesDataset } from './types';
/**
* By default, emoji skin modifications are nested under the base neutral skin tone emoji.
* To flatten the data into a single dimension array, use the `flattenEmojiData` function.
*
* If `shortcodeDatasets` is defined, it will join the shortcodes to the emoji object using
* `joinShortcodesToEmoji`.
*
* > Tags from the parent emoji will be passed down to the skin modifications.
*/
function flattenEmojiData(data: Emoji[], shortcodeDatasets?: ShortcodesDataset[]): Emoji[];
function flattenEmojiData(
data: CompactEmoji[],
shortcodeDatasets?: ShortcodesDataset[],
): CompactEmoji[];
function flattenEmojiData(
data: EmojiLike[],
shortcodeDatasets: ShortcodesDataset[] = [],
): EmojiLike[] {
const emojis: Emoji[] = [];
(data as Emoji[]).forEach((emoji) => {
if (emoji.skins) {
// Dont include nested skins array
const { skins, ...baseEmoji } = emoji;
emojis.push(joinShortcodesToEmoji(baseEmoji, shortcodeDatasets));
// Push each skin modification into the root list
skins.forEach((skin) => {
const skinEmoji = { ...skin };
// Inherit tags from parent if they exist
if (baseEmoji.tags) {
skinEmoji.tags = [...baseEmoji.tags];
}
emojis.push(joinShortcodesToEmoji(skinEmoji, shortcodeDatasets));
});
} else {
emojis.push(joinShortcodesToEmoji(emoji, shortcodeDatasets));
}
});
return emojis;
}
export { flattenEmojiData };