UNPKG

@good-ghosting/random-name-generator

Version:

Generate a random, unique, heroku-like name for your app/project/server etc. e.g. "resonant-silence". Extends the original package from Akash Kurdekar (git://github.com/aceakash/project-name-generator.git) by allowing custom adjectives and nouns.

52 lines (42 loc) 1.28 kB
const _ = require('lodash'); const nouns = require('./nouns'); const adjectives = require('./adjectives'); module.exports = generate; generate.generate = generate; function generate(options) { var defaults = { number: false, words: 2, alliterative: false, }; options = _.merge(defaults, options || {}); var raw = getRawProjName(options); return { raw: raw, dashed: raw.join('-'), spaced: raw.join(' ') }; } function getRawProjName(options) { var raw = []; const usedAdjectives = options?.adjectives || adjectives; const usedNouns = options?.nouns || nouns; _.times(options.words - 1, function () { if (options.alliterative && raw.length) raw.push(_.sample(getAlliterativeMatches(usedAdjectives, raw[0].substring(0, 1)))); else raw.push(_.sample(usedAdjectives).toLowerCase()); }); if (options.alliterative) raw.push(_.sample(getAlliterativeMatches(usedNouns, raw[0].substring(0, 1)))); else raw.push(_.sample(usedNouns).toLowerCase()); if (options.number) { raw.push(_.random(1, 9999)); } return raw; } function getAlliterativeMatches(arr, letter) { var check = letter.toLowerCase(); return _.filter(arr, function(elm) { return elm.substring(0, 1).toLowerCase() === check; }); }