Search
โŒ˜K

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.

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...