random-word-slugs
Version:
A random word slug generator pre-loaded with many words
137 lines (95 loc) • 4.68 kB
Markdown
# Random Word Slugs
A handy utility to create those random word slugs (e.g., `generous-pink-biscuit`) you see all over the place.
[](https://travis-ci.org/nas5w/random-word-slugs) [](https://codecov.io/gh/nas5w/random-word-slugs/branch/master)
<hr />
# Installation
Install with npm
```bash
npm i random-word-slugs
```
Install with yarn
```bash
yarn add random-word-slugs
```
# Usage
The `random-word-slugs` package can be used without any parameters and defaults to a three-word, kebab-cased slug. **Currently, the default configuration has {{uniqueCombinations}} unique slug combinations**.
```javascript
import { generateSlug } from "random-word-slugs";
const slug = generateSlug();
console.log(slug);
// "elegant-green-coat"
```
The `generateSlug` function takes up to two arguments. The first argument is the `numberOfWords` in the slug (defaulting to three) and the second argument is the package `options`. The following example makes use of both parameters and provides an option to title-case the output:
```javascript
const slug = generateSlug(4, { format: "title" });
console.log(slug);
// "Elegant Happy Green Coat"
```
# Available Options
The `options` object can have any partial set of the following key/value pairs:
```
{
format: "kebab" | "camel" | "sentence" | "lower" | "title",
partsOfSpeech: ("adjective" | "noun")[],
categories: {
adjective: ("color" | "appearance" | etc...)[],
noun: ("people" | "animals" | etc...)[]
}
}
```
Note that, if provided, `partsOfSpeech` must be an array the same length as the number of words you're requesting. If using Typescript, the compiler will check this for you.
An example of a completed `options` object might look like this for a three-word slug:
```javascript
const options = {
format: "camel",
partsOfSpeech: ["adjective", "noun", "adjective"],
categories: {
adjective: ["color", "appearance"],
noun: ["animals"],
},
};
```
Based on these options, our output might look something like `blueBearTall`.
# Typescript Support for Options
The package exposes a `RandomWordOptions<N>` type, with `N` being the number of words in the slug. If you want to use this type to specify an options object, it might look something like this (although a `Partial` options object is certainly allowed and probably more common):
```typescript
import { RandomWordOptions } from "random-word-slugs";
const options: RandomWordOptions<3> = {
format: "title",
categories: {
noun: ["animals", "place"],
adjective: ["color", "personality"],
},
partsOfSpeech: ["adjective", "noun", "adjective"],
};
```
Importantly, the generic `3` here will enforce `partsOfSpeech` being a three-element tuple.
# Categories
The `categories` option allows you to generate your random slug from a subset of categories. Perhaps you only want colorful animals! You can specify one or many categories for the adjectives and nouns that comprise your random slug. The following is a list of categories currently in the repository:
Adjective Categories:
{{adjectiveCategories}}
Noun Categories:
{{nounCategories}}
# Assessing the Combinatorics
When using the package, you might be curious about how many different slug combinations exist. The package exposes a function to help with this called `totalUniqueSlugs`. This function can be used without arguments and will assume a three-slug `adjective-adjective-noun` format:
```javascript
import { totalUniqueSlugs } from "random-word-slugs";
const totalSlugs = totalUniqueSlugs();
console.log(totalSlugs);
// 100000
```
**Note:** The `100000` number shown here is just an example and not a representation of the total number of slugs in the package at any moment (that evolves as words are added).
You can also assess the combinatoric space if you have a different number of words, word ordering, or a subset of categories. In the following example, we'll assume a four-word slug, in the order `adjective-noun-adjective-noun`, with only color adjectives and animal nouns:
```javascript
import { totalUniqueSlugs } from "random-word-slugs";
const totalSlugs = totalUniqueSlugs(4, {
partsOfSpeech: ["adjective", "noun", "adjective", "noun"],
categories: {
adjective: ["color"],
noun: ["animals"],
},
});
console.log(totalSlugs);
// 1000
```
Again, this `1000` is just an example. Importantly, this could help you determine that you're not comfortable with this limited combinatoric space and you can choose to add additional categories.