Skip to content

a small utility tool to create unique and sanitized names

Notifications You must be signed in to change notification settings

krzysztofradomski/compadre

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

49 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Compadre

A random name generator, giving you a unique and sanitized two-piece name for your web app needs. It should work in both browser and node javascript applications. Only 7kb minified and gzipped!

Install

$ npm install compadre

Quickstart

import compadre from 'compadre';
// alternatively: const compadre = require('compadre');
const nameGenerator = new compadre();
const name = nameGenerator.generate();
console.log(name); // funky_swordfish

Methods and config

The important functions are constructor itself and generate(). There's also seed(word) and kill(). Method seed() is optional and allows you to push new words into noun dictionary, it can be useful e.g. when you use a short list of custom names and want to recycle the used ones back into the pool. Method kill is for when you really want to help out the garbage collector.

Optionally, when instancing a new generator, config object can be passed with any or all of these overrides (non-existing keys will be ignored):

Option Type Default Description
adjectives Array Included A list of curated adjectives, around 520 entries long.
nouns Array Included A list of curated nouns, around 1150 entries long.
prefix String null A prefix.
suffix String null A suffix.
glue String _ When a name is generated, all the words will be glued together using this string (default is underscore).
unique Boolean false Names can be unique, not like in some other generators! Set to true to have the generated names unique.
fallback Function function() { return Date.now() * Math.random() + '.fallback'} Unique names means you can run out of dictionary! If you use custom lists and unique names, be sure to provide a good fallback word/phrase returning function, else this here will be used.
up Boolean false Whether or not the nouns and adjectives will be uppercased.
maxLen Integer null Max length of the output string. There is no default limit. Be carful when using with unique names and fallbacks.

Basic usage

The constructor creates a class instance with a generate() method. Default settings will generate random two-piece name.

import compadre from 'compadre';
// alternatively: const compadre = require('compadre');

const compadre1 = new compadre();
const name1 = compadre1.generate();    // blue_swede

const compadre2 = new compadre({prefix: 'l33t'});
const name2 = compadre2.generate();    // l33t_silver_surfer

const compadre3 = new compadre({glue: '**'});
const name3 = compadre3.generate();     // big**boss

etc...

Advanced usage

Compadre includes two lists of neutral and non-offensive words: nouns and adjectives, but you can provide your own instead. Provided lists will overwrite the included lists, you can override one or both. Note that only adjectives can be an empty list. Generally, it is wise to use config other options if your lists are not very long. See example below:

import compadre from 'compadre';
// alternatively: const compadre = require('compadre');

const superheroes = {
  adjectives: ['super', 'captain', 'awesome'],
  nouns: ['metal', 'gear', 'solid'],
  suffix: 'Man',
  glue: '',
  unique: false,
  up: true,
};

const c = new compadre(superheroes);

const name1 = c.generate(); // CaptainMetalMan
const name2 = c.generate(); // SuperMetalMan
const name3 = c.generate(); // SuperSolidMan

Fallback word and recycling words

Unique names come at a price - the noun dictionary can be depleted. To make sure each generated name is unique, you need a fallback option - a timestamp by default. You can provide your own string generating function to act as a fallback. You can also recycle used words, e.g. you create objects that need unique display names, but after you delete such an object, you can push their name back into the noun pool.

import compadre from 'compadre';
// alternatively: const compadre = require('compadre');
const basic = {
  adjectives: [],
  nouns: ['man', 'Bear', 'pig'],
  up: true,
  unique: true,
  fallback: () => `${Date.now()}-Anon`,
};
const c = new compadre(basic);

for (let index = 0; index <= 5; index++) {
  let word = c.generate();
  if (/Anon/.test(word)) {
    c.seed('annie');
  }
  console.log(word);
};
  // Man
  // Pig
  // Bear
  // timestamp-Anon (nouns depleted, using fallback, plus condition met and 'annie' pushed into nouns)
  // Annie (dictionary has a new entry, so it is used now)
  // timestamp-Anon (dictionary depleted again)

Demo

npm run demo

Tests

A good spot you can contribute to by a making your first pr!

npm run test

Dependencies

None, except for some testing dev dependencies.

Credits

Inspired by the lack of such libs and then finding Goby.

License

MIT.

Releases

No releases published

Packages

No packages published