/friendly-ids

Generate human readable unique identifiers.

Primary LanguageTypeScriptMIT LicenseMIT

@corentinth/friendly-ids

@corentinth/friendly-ids is a lib that generates human-readable IDs for your projects. It is designed to be simple, fast, and easy to use.

import { generateId } from '@corentinth/friendly-ids';

const id = generateId();

console.log(id);
// fierce-zebra-456

Features

  • 78,648,000 combinations: The default generator can generate up to 78,648,000 unique IDs (348 nouns x 226 adjectives x 1000 numbers).
  • Customizable: You can create your own generator with a custom separator and random int generator.
  • No dependencies: The lib has no dependencies and is lightweight.
  • TypeScript support: The lib is written in TypeScript and comes with type definitions.
  • Tree-shakable: The lib is tree-shakable and only includes the code you use.
  • Datasets: Each words is strictly letters, no special characters.

Installation

To install the package, use npm or yarn:

pnpm install @corentinth/friendly-ids

npm install @corentinth/friendly-ids

yarn add @corentinth/friendly-ids

Usage

Generate a friendly ID

import { generateId } from '@corentinth/friendly-ids';

const id = generateId();

console.log(id);
// fierce-zebra-456

Create a custom generator

import { createIdGenerator } from '@corentinth/friendly-ids';

const generateId = createIdGenerator();
const id = generateId();

console.log(id);
// fierce-zebra-456

With a custom separator:

import { createIdGenerator } from '@corentinth/friendly-ids';

const generateId = createIdGenerator({ separator: '_' });
const id = generateId();

console.log(id);
// brave_horse_537

All options:

import { createIdGenerator, adjectives } from '@corentinth/friendly-ids';

const generateId = createIdGenerator({
  separator: '~',
  // A list of chunks generators, each generator is a function that provides random helpers and expects a string or number as a return value
  chunks: [
    ({ getRandomItem }) => getRandomItem(adjectives),
    ({ getRandomItem }) => getRandomItem(['foo', 'bar', 'baz']),
    ({ getRandomInt }) => getRandomInt({ min: 50, max: 100 }),
    ({ getRandomItem }) => getRandomItem(['a', 'b', 'c']),
  ],
  // A custom implementation of the random int generator, by default based on Math.random
  getRandomInt: ({ min, max }) => /* your implementation */,
});

const id = generateId();

console.log(id);
// fierce~foo~78~b

Datasets

The lib comes with two datasets: adjectives and animals. You can use them to customize your generator:

import { animals, adjectives } from '@corentinth/friendly-ids';

console.log(adjectives);
// [ 'adaptable', 'adventurous', 'affable', 'affectionate', 'afraid', ... ]

console.log(animals);
// [ 'albatross', 'alligator', 'alpaca', 'ant', 'anteater', ... ]

Contributing

Contributions are welcome! Feel free to open issues or submit pull requests.

Testing

You can run the tests with the following command:

# one shot
pnpm run test

# watch mode
pnpm run test:watch

License

This project is licensed under the MIT License. See the LICENSE file for more information.

Credits and Acknowledgements

This project is crafted with ❤️ by Corentin Thomasset. If you find this project helpful, please consider supporting my work.