Search
โŒ˜K

Emoji Generator

Simple generator of random emoji, that do not generator emoji previously used.

Example Usage

import { randomEmojiCreator } from './emoji-generator'

// NOTE: 
// Every time you call generateOne, it will return a different emoji.
// Internally, it stores previously used emoji in memory, in order to not return them again.
randomEmojiCreator.generateOne(); //  '๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ'
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
/**
 * Source: http://localhost:3000
 */

import getRandomEmoji from '@sefinek/random-emoji';

type EmojyItem = ReturnType<typeof getRandomEmoji.emojis>['content'];
const MAX_ATTEMPT = 100;

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: () => {
    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...