Emoji Generator
Simple generator of random emoji, with a memory to avoid duplicates.
Example Usage
randomEmojiCreator
Every time is called returns a random emoji.
Internally keeps track of previously used emoji, in order to avoid duplicates.
Tip
The check for duplicates is limited to 100 attempts, if it's reached and the emoji is already used, it will return it anyway (duplicate).
You can adjust the limit by changing the MAX_ATTEMPT value directly in the utility file.
import { randomEmojiCreator } from './emoji-generator'
randomEmojiCreator.generateOne(); // '๐
randomEmojiCreator.generateOne(); // '๐จ'
randomEmojiCreator.generateOne(); // '๐'
// ...Dependencies
npm@sefinek/random-emoji
Auto Install
npx shadcn@latest add https://shadcn-registry-ts.vercel.app/r/util-emojy-generator.json
Manual Install
emoji-generator.ts
import getRandomEmoji from '@sefinek/random-emoji';
type EmojyItem = ReturnType<typeof getRandomEmoji.emojis>['content'];
const MAX_ATTEMPT = 100;
/**
* Generator of random emoji string, with an internal memory that track already used emoji in order to not return them again.
* The generator will return a random emoji that is not already used if possible, otherwise it will return a previously used emoji.
* The memory is limited to {@link MAX_ATTEMPT} attempts.
*/
export const randomEmojiCreator = {
/** in memory state that track every emojy already used */
emojiCreatedNames: new Set<EmojyItem>(),
/** Generate a random emoji, that is not already used */
generateOne: (): EmojyItem => {
let attempt = 0;
while (true) {
attempt++;
const outputEmoji = getRandomEmoji.emojis().content;
// check if emoji is already used
const isAlreadyUsed = randomEmojiCreator.emojiCreatedNames.has(outputEmoji);
if (!isAlreadyUsed) {
randomEmojiCreator.emojiCreatedNames.add(outputEmoji);
return outputEmoji;
}
if (isAlreadyUsed && attempt === MAX_ATTEMPT) {
randomEmojiCreator.emojiCreatedNames.add(outputEmoji);
return outputEmoji;
}
// othrwise, try again
}
}
};Test
emoji-generator.test.ts
import { describe, it, expect } from 'vitest';
import { repeatSyncFn } from '../utility-framework/vitest.utils';
import { randomEmojiCreator } from './emoji-generator';
describe('emoji-generator - randomEmojiCreator', () => {
it('do it', () => {
repeatSyncFn(10_000, () => {
const emoji = randomEmojiCreator.generateOne();
expect(emoji).toBeTypeOf('string');
});
});
});Command Palette
Search for a command to run...