23 lines
683 B
TypeScript
23 lines
683 B
TypeScript
|
// Copyright 2021 Signal Messenger, LLC
|
||
|
// SPDX-License-Identifier: AGPL-3.0-only
|
||
|
|
||
|
import emojiRegex from 'emoji-regex/es2015/RGI_Emoji';
|
||
|
import { getGraphemes } from '../util/grapheme';
|
||
|
import { take, size } from '../util/iterables';
|
||
|
|
||
|
export function isValidReactionEmoji(value: unknown): value is string {
|
||
|
if (typeof value !== 'string') {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
// This is effectively `countGraphemes(value) === 1`, but doesn't require iterating
|
||
|
// through an extremely long string.
|
||
|
const graphemes = getGraphemes(value);
|
||
|
const truncatedGraphemes = take(graphemes, 2);
|
||
|
if (size(truncatedGraphemes) !== 1) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
return emojiRegex().test(value);
|
||
|
}
|