2021-01-03 14:25:43 +05:30
|
|
|
|
import { initEmojiMap, EMOJI_VERSION } from '~/emoji';
|
2022-01-26 12:08:38 +05:30
|
|
|
|
import { CACHE_VERSION_KEY, CACHE_KEY } from '~/emoji/constants';
|
2021-01-03 14:25:43 +05:30
|
|
|
|
|
2022-01-26 12:08:38 +05:30
|
|
|
|
export const validEmoji = {
|
2021-01-03 14:25:43 +05:30
|
|
|
|
atom: {
|
|
|
|
|
moji: '⚛',
|
|
|
|
|
description: 'atom symbol',
|
|
|
|
|
unicodeVersion: '4.1',
|
|
|
|
|
aliases: ['atom_symbol'],
|
|
|
|
|
},
|
|
|
|
|
bomb: {
|
|
|
|
|
moji: '💣',
|
|
|
|
|
unicodeVersion: '6.0',
|
|
|
|
|
description: 'bomb',
|
|
|
|
|
},
|
|
|
|
|
construction_worker_tone5: {
|
|
|
|
|
moji: '👷🏿',
|
|
|
|
|
unicodeVersion: '8.0',
|
|
|
|
|
description: 'construction worker tone 5',
|
|
|
|
|
},
|
|
|
|
|
five: {
|
|
|
|
|
moji: '5️⃣',
|
|
|
|
|
unicodeVersion: '3.0',
|
|
|
|
|
description: 'keycap digit five',
|
|
|
|
|
},
|
|
|
|
|
grey_question: {
|
|
|
|
|
moji: '❔',
|
|
|
|
|
unicodeVersion: '6.0',
|
|
|
|
|
description: 'white question mark ornament',
|
|
|
|
|
},
|
|
|
|
|
black_heart: {
|
|
|
|
|
moji: '🖤',
|
|
|
|
|
unicodeVersion: '1.1',
|
|
|
|
|
description: 'black heart',
|
|
|
|
|
},
|
|
|
|
|
heart: {
|
|
|
|
|
moji: '❤',
|
|
|
|
|
unicodeVersion: '1.1',
|
|
|
|
|
description: 'heavy black heart',
|
|
|
|
|
},
|
|
|
|
|
custard: {
|
|
|
|
|
moji: '🍮',
|
|
|
|
|
unicodeVersion: '6.0',
|
|
|
|
|
description: 'custard',
|
|
|
|
|
},
|
|
|
|
|
star: {
|
|
|
|
|
moji: '⭐',
|
|
|
|
|
unicodeVersion: '5.1',
|
|
|
|
|
description: 'white medium star',
|
|
|
|
|
},
|
2022-01-26 12:08:38 +05:30
|
|
|
|
gay_pride_flag: {
|
|
|
|
|
moji: '🏳️🌈',
|
|
|
|
|
unicodeVersion: '7.0',
|
|
|
|
|
description: 'because it contains a zero width joiner',
|
|
|
|
|
},
|
|
|
|
|
family_mmb: {
|
|
|
|
|
moji: '👨👨👦',
|
|
|
|
|
unicodeVersion: '6.0',
|
|
|
|
|
description: 'because it contains multiple zero width joiners',
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export const invalidEmoji = {
|
2021-11-11 11:23:49 +05:30
|
|
|
|
xss: {
|
|
|
|
|
moji: '<img src=x onerror=prompt(1)>',
|
|
|
|
|
unicodeVersion: '5.1',
|
|
|
|
|
description: 'xss',
|
|
|
|
|
},
|
2022-01-26 12:08:38 +05:30
|
|
|
|
non_moji: {
|
|
|
|
|
moji: 'I am not an emoji...',
|
|
|
|
|
unicodeVersion: '9.0',
|
|
|
|
|
description: '...and should be filtered out',
|
|
|
|
|
},
|
|
|
|
|
multiple_moji: {
|
|
|
|
|
moji: '🍂🏭',
|
|
|
|
|
unicodeVersion: '9.0',
|
|
|
|
|
description: 'Multiple separate emoji that are not joined by a zero width joiner',
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export const emojiFixtureMap = {
|
|
|
|
|
...validEmoji,
|
|
|
|
|
...invalidEmoji,
|
2021-01-03 14:25:43 +05:30
|
|
|
|
};
|
|
|
|
|
|
2021-03-11 19:13:27 +05:30
|
|
|
|
export const mockEmojiData = Object.keys(emojiFixtureMap).reduce((acc, k) => {
|
|
|
|
|
const { moji: e, unicodeVersion: u, category: c, description: d } = emojiFixtureMap[k];
|
|
|
|
|
acc[k] = { name: k, e, u, c, d };
|
2021-01-03 14:25:43 +05:30
|
|
|
|
|
2021-03-11 19:13:27 +05:30
|
|
|
|
return acc;
|
|
|
|
|
}, {});
|
2021-01-03 14:25:43 +05:30
|
|
|
|
|
2022-01-26 12:08:38 +05:30
|
|
|
|
export function clearEmojiMock() {
|
|
|
|
|
localStorage.clear();
|
|
|
|
|
initEmojiMap.promise = null;
|
|
|
|
|
}
|
2021-01-03 14:25:43 +05:30
|
|
|
|
|
2022-01-26 12:08:38 +05:30
|
|
|
|
export async function initEmojiMock(mockData = mockEmojiData) {
|
|
|
|
|
clearEmojiMock();
|
|
|
|
|
localStorage.setItem(CACHE_VERSION_KEY, EMOJI_VERSION);
|
|
|
|
|
localStorage.setItem(CACHE_KEY, JSON.stringify(mockData));
|
2021-01-03 14:25:43 +05:30
|
|
|
|
await initEmojiMap();
|
|
|
|
|
}
|