space-slug
Version:
Generate unique slugs, usernames, numbers and more. If you need a unique string that looks like this `hyperspace-4812` or `blue-whimsical-summer` using an intuitive api with zero dependencies.
246 lines (175 loc) • 5.8 kB
Markdown
Get a unique string that looks like this `wonderful-jabba` or this `hyperspace-4812`.
Generate unique slugs, usernames, numbers, custom words, and more using an intuitive api with zero dependencies.
```tsx
const { spaceSlug } from 'space-slug';
const slug = spaceSlug();
// Returns: joyful-illusion-30
```
```console
npm install space-slug
yarn add space-slug
pnpm add space-slug
```
> 👋 Hello there! Follow me [@linesofcode](https://twitter.com/linesofcode) or visit [linesofcode.dev](https://linesofcode.dev) for more cool projects like this one.
```ts
const { spaceSlug, adjective, color, digits, noun } from 'space-slug';
const slug = spaceSlug([color(), adjective(), noun(1), digits(3)], {
separator: '_'
});
// Returns: blue_celestial_labyrinth_718
```
```ts
const { spaceSlug, word, SpaceSlugDictionary } from 'space-slug';
const dictionary: SpaceSlugDictionary = {
en: {
starwars: ['jabba', 'ezra'],
},
};
const slug = spaceSlug([word('starwars')(2), digits(2)], {
dictionary,
locale: 'en',
});
/// Returns: jabba-ezra-39
```
```ts
const { uniqueSpaceSlug, color, digits } from 'space-slug';
const slug = await uniqueSpaceSlug([
color(1),
digits(4),
], {
usedSlugs: ['orange-3918']
});
// Returns: a slug that is not orange-3918
```
```ts
const { uniqueSpaceSlug } from 'space-slug';
await uniqueSpaceSlug([], {
maxAttempts: 10, // default is 10 attempts before throwing an error
isUnique: async (slug) => {
// check database to see if slug is unique
return true;
}
});
// Returns: a slug that you have verified is unique
```
```ts
await uniqueSpaceSlug(['jabba'], {
isUnique: async (slug) => {
// a db lookup to see if slug is unique
return false;
},
makeUnique: async (slug) => {
// somehow make the slug unique
return slug + '-hutt';
}
});
```
```tsx
const { spaceSlug } from 'space-slug';
await spaceSlug([], {
transform: (x) => x.toUpperCase()
});
// Returns: QUAINT-HORIZON-1293
```
```tsx
const { spaceSlug, color, digits } from 'space-slug';
spaceSlug([
'jabba',
digits(),
];
// Returns: jabba-1293
spaceSlug([
color(),
['jabba', 'hutt'],
digits(),
];
// Returns: red-jabba-hutt-3979
```
<!-- TSDOC_START -->
- [word](
- [digits](
- [cleanString](
- [uniqueSpaceSlug](
- [spaceSlug](
| Function | Type |
| ---------- | ---------- |
| `word` | `(type: string) => (count?: number or undefined, _words?: string[] or undefined) => (options: SpaceSlugOptions) => Set<string>` |
| Function | Type |
| ---------- | ---------- |
| `digits` | `(count?: number or undefined, noConsecutive?: boolean or undefined) => (options: SpaceSlugOptions) => string` |
| Function | Type |
| ---------- | ---------- |
| `cleanString` | `(inputString: string, separator: string) => string` |
| Function | Type |
| ---------- | ---------- |
| `uniqueSpaceSlug` | `(spaceSlugFn: SpaceSlugInput[], options?: SpaceSlugOptions and UniqueSpaceSlugOptions) => Promise<string>` |
| Function | Type |
| ---------- | ---------- |
| `spaceSlug` | `(spaceSlugInputs?: SpaceSlugInput[] or undefined, options?: SpaceSlugOptions) => string` |
- [spaceSlugDefaultDictionary](
- [spaceSlugDefaultOptions](
- [noun](
- [adjective](
- [color](
- [season](
- [emoji](
- [verb](
- [animal](
- [cosmos](
| Constant | Type |
| ---------- | ---------- |
| `spaceSlugDefaultDictionary` | `SpaceSlugDictionary` |
| Constant | Type |
| ---------- | ---------- |
| `spaceSlugDefaultOptions` | `Partial<SpaceSlugOptions>` |
| Constant | Type |
| ---------- | ---------- |
| `noun` | `(count?: number or undefined, _words?: string[] or undefined) => (options: SpaceSlugOptions) => Set<string>` |
| Constant | Type |
| ---------- | ---------- |
| `adjective` | `(count?: number or undefined, _words?: string[] or undefined) => (options: SpaceSlugOptions) => Set<string>` |
| Constant | Type |
| ---------- | ---------- |
| `color` | `(count?: number or undefined, _words?: string[] or undefined) => (options: SpaceSlugOptions) => Set<string>` |
| Constant | Type |
| ---------- | ---------- |
| `season` | `(count?: number or undefined, _words?: string[] or undefined) => (options: SpaceSlugOptions) => Set<string>` |
| Constant | Type |
| ---------- | ---------- |
| `emoji` | `(count?: number or undefined, _words?: string[] or undefined) => (options: SpaceSlugOptions) => Set<string>` |
| Constant | Type |
| ---------- | ---------- |
| `verb` | `(count?: number or undefined, _words?: string[] or undefined) => (options: SpaceSlugOptions) => Set<string>` |
| Constant | Type |
| ---------- | ---------- |
| `animal` | `(count?: number or undefined, _words?: string[] or undefined) => (options: SpaceSlugOptions) => Set<string>` |
| Constant | Type |
| ---------- | ---------- |
| `cosmos` | `(count?: number or undefined, _words?: string[] or undefined) => (options: SpaceSlugOptions) => Set<string>` |
<!-- TSDOC_END -->