mirror of
https://github.com/cupcakearmy/canihazusername.git
synced 2024-11-16 18:11:39 +01:00
customize the lists
This commit is contained in:
parent
31d6d4447f
commit
3709f8c0f3
24
README.md
24
README.md
@ -53,6 +53,30 @@ const username = generate('{quantity|age|cats|}')
|
|||||||
|
|
||||||
This example will choose a random word between the `quantity`, `age` and `cats` list.
|
This example will choose a random word between the `quantity`, `age` and `cats` list.
|
||||||
|
|
||||||
|
### ✒️ Use you own lists
|
||||||
|
|
||||||
|
You can also add your own lists or owerwrite the built in one.
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
import { generate } from 'canihazusername'
|
||||||
|
|
||||||
|
const gits = ['gitlab', 'github', 'gitea']
|
||||||
|
const username = generate('{gits}', { lists: { gits } })
|
||||||
|
```
|
||||||
|
|
||||||
|
### 🔐 Reformats limit
|
||||||
|
|
||||||
|
For security reasons the default limit for the maximum reformats/insertions is set to 16.
|
||||||
|
|
||||||
|
If you use more than 16 `{}` you can increase them with the `maxReformats` option.
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
import { generate } from 'canihazusername'
|
||||||
|
|
||||||
|
const username = generate('{1} {2} ... {17}', { maxReformats: 16 }) // ❌ The last one will not be replaced
|
||||||
|
const username = generate('{1} {2} ... {17}', { maxReformats: 20 }) // ✅
|
||||||
|
```
|
||||||
|
|
||||||
## 🗂 Lists
|
## 🗂 Lists
|
||||||
|
|
||||||
- age
|
- age
|
||||||
|
16
src/index.ts
16
src/index.ts
@ -1,11 +1,19 @@
|
|||||||
import wordlist from './wordlist.json'
|
import wordlist from './wordlist.json'
|
||||||
|
|
||||||
|
const DEFAULT_OPTIONS = {
|
||||||
|
maxReformats: 16,
|
||||||
|
lists: {} as { [name: string]: string[] }
|
||||||
|
}
|
||||||
|
|
||||||
const randomElementFromArray = <T>(arr: T[]): T => arr[Math.floor(Math.random() * arr.length)]
|
const randomElementFromArray = <T>(arr: T[]): T => arr[Math.floor(Math.random() * arr.length)]
|
||||||
|
|
||||||
export const showAvailableLists = () => Object.keys(wordlist)
|
export const showAvailableLists = () => Object.keys(wordlist)
|
||||||
|
|
||||||
export const generate = (format: string = '{character}_{english}', maxReformats = 16): string => {
|
export const generate = (format: string = '{character}_{english}', options: Partial<typeof DEFAULT_OPTIONS> = {}): string => {
|
||||||
for (let i = 0; i < maxReformats; i++) {
|
const opt: typeof DEFAULT_OPTIONS = Object.assign(DEFAULT_OPTIONS, options)
|
||||||
|
const combined = Object.assign(wordlist, options.lists)
|
||||||
|
|
||||||
|
for (let i = 0; i < opt.maxReformats; i++) {
|
||||||
const match = /\{.*?\}/.exec(format)
|
const match = /\{.*?\}/.exec(format)
|
||||||
if (match === null) break
|
if (match === null) break
|
||||||
|
|
||||||
@ -13,8 +21,8 @@ export const generate = (format: string = '{character}_{english}', maxReformats
|
|||||||
.slice(1, -1)
|
.slice(1, -1)
|
||||||
.split('|')
|
.split('|')
|
||||||
.map(key => key.trim())
|
.map(key => key.trim())
|
||||||
.filter(key => key !== '') as [keyof typeof wordlist]
|
.filter(key => key !== '') as [keyof typeof combined]
|
||||||
const lists = keys.map(key => Array.isArray(wordlist[key]) ? wordlist[key] : [])
|
const lists = keys.map(key => Array.isArray(combined[key]) ? combined[key] : [])
|
||||||
const flatteded = lists.reduce((acc, val) => acc.concat(val), []);
|
const flatteded = lists.reduce((acc, val) => acc.concat(val), []);
|
||||||
const value: string = flatteded.length > 0
|
const value: string = flatteded.length > 0
|
||||||
? randomElementFromArray(flatteded)
|
? randomElementFromArray(flatteded)
|
||||||
|
Loading…
Reference in New Issue
Block a user