version 2

This commit is contained in:
cupcakearmy 2020-02-05 21:21:51 +01:00
parent 9cb4060617
commit 133447baa7
No known key found for this signature in database
GPG Key ID: D28129AE5654D9D9
13 changed files with 126 additions and 95 deletions

16
.gitignore vendored
View File

@ -1,6 +1,14 @@
node_modules/
package-lock.json
# Editors
.vscode
.idea
test/bundle.js
lib
# Node
node_modules/
package-lock.json
yarn.lock
# Build
lib
dist
.cache
src/*.js

View File

@ -1,3 +1,2 @@
*
!lib/index.js
!lib/canihazusername.d.ts
!lib/*

1
generate/wordlist Submodule

@ -0,0 +1 @@
Subproject commit 7cec9b716babec59b68075abf27fdfae90f51871

41
generate/wordlist.js Normal file
View File

@ -0,0 +1,41 @@
/* jshint esversion: 8, asi: true */
const fs = require('fs')
const path = require('path')
const util = require('util')
const endsWithTxt = /^.*\.txt$/
function walkDir(dir, callback) {
fs.readdirSync(dir).forEach(f => {
const dirPath = path.join(dir, f)
const isDirectory = fs.statSync(dirPath).isDirectory()
isDirectory
? walkDir(dirPath, callback)
: callback(path.join(dir, f))
})
}
function convertAndSaveWordlistAsJSON() {
const wordlist = {}
walkDir('./generate/wordlist', (filename) => {
// Not a txt file
if (!endsWithTxt.test(filename)) return
// Read the file
const file = fs.readFileSync(filename, 'utf-8')
// Each line of the file to an array removing the empty lines
const lines = file.split('\n').filter(entry => entry !== '').map(entry => entry.trim())
// Remove duplicates
const set = new Set(lines)
const name = path.basename(filename, 'utf-8').slice(0, -4)
wordlist[name] = [...set]
})
fs.writeFileSync('./src/wordlist.json', JSON.stringify(wordlist))
}
convertAndSaveWordlistAsJSON()

View File

@ -1,21 +1,25 @@
{
"name": "canihazusername",
"version": "1.0.3",
"description": "Username Generator",
"description": "username generator. typed, simple and customizable",
"main": "./lib/index.js",
"types": "./lib/canihazusername.d.ts",
"types": "./lib/index.d.ts",
"scripts": {
"generate": "git -C ./generate/wordlist pull && node ./generate/wordlist.js",
"dev": "webpack -d -w",
"build": "webpack -p",
"test": "mocha",
"prepublish": "npm run build && npm run test"
"prepublishOnly": "npm run build && npm run test"
},
"repository": {
"type": "git",
"url": "git+https://github.com/CupCakeArmy/canihazusername.git"
},
"keywords": [
"UI"
"username",
"generator",
"types",
"customizable"
],
"author": "Niccolo Borgioli",
"license": "MIT",
@ -25,12 +29,8 @@
"homepage": "https://github.com/CupCakeArmy/canihazusername#readme",
"dependencies": {},
"devDependencies": {
"awesome-typescript-loader": "^5.2.1",
"dts-bundle": "^0.7.3",
"dts-bundle-webpack": "^1.0.2",
"mocha": "^5.2.0",
"typescript": "^3.2.4",
"webpack": "^4.29.0",
"webpack-cli": "^3.2.1"
"parcel-bundler": "^1.12.4",
"ts-node-dev": "^1.0.0-pre.44",
"typescript": "3.7"
}
}
}

View File

@ -1,12 +1,32 @@
const animals: string[] = ['Aardvark', 'Abyssinian', 'Affenpinscher', 'Akbash', 'Akita', 'Albatross', 'Alligator', 'Alpaca', 'Angelfish', 'Ant', 'Anteater', 'Antelope', 'Ape', 'Armadillo', 'Ass', 'Avocet', 'Axolotl', 'Baboon', 'Badger', 'Balinese', 'Bandicoot', 'Barb', 'Barnacle', 'Barracuda', 'Bat', 'Beagle', 'Bear', 'Beaver', 'Bee', 'Beetle', 'Binturong', 'Bird', 'Birman', 'Bison', 'Bloodhound', 'Boar', 'Bobcat', 'Bombay', 'Bongo', 'Bonobo', 'Booby', 'Budgerigar', 'Buffalo', 'Bulldog', 'Bullfrog', 'Burmese', 'Butterfly', 'Caiman', 'Camel', 'Capybara', 'Caracal', 'Caribou', 'Cassowary', 'Cat', 'Caterpillar', 'Catfish', 'Cattle', 'Centipede', 'Chameleon', 'Chamois', 'Cheetah', 'Chicken', 'Chihuahua', 'Chimpanzee', 'Chinchilla', 'Chinook', 'Chipmunk', 'Chough', 'Cichlid', 'Clam', 'Coati', 'Cobra', 'Cockroach', 'Cod', 'Collie', 'Coral', 'Cormorant', 'Cougar', 'Cow', 'Coyote', 'Crab', 'Crane', 'Crocodile', 'Crow', 'Curlew', 'Cuscus', 'Cuttlefish', 'Dachshund', 'Dalmatian', 'Deer', 'Dhole', 'Dingo', 'Dinosaur', 'Discus', 'Dodo', 'Dog', 'Dogfish', 'Dolphin', 'Donkey', 'Dormouse', 'Dotterel', 'Dove', 'Dragonfly', 'Drever', 'Duck', 'Dugong', 'Dunker', 'Dunlin', 'Eagle', 'Earwig', 'Echidna', 'Eel', 'Eland', 'Elephant', 'Elephant seal', 'Elk', 'Emu', 'Falcon', 'Ferret', 'Finch', 'Fish', 'Flamingo', 'Flounder', 'Fly', 'Fossa', 'Fox', 'Frigatebird', 'Frog', 'Galago', 'Gar', 'Gaur', 'Gazelle', 'Gecko', 'Gerbil', 'Gharial', 'Giant Panda', 'Gibbon', 'Giraffe', 'Gnat', 'Gnu', 'Goat', 'Goldfinch', 'Goldfish', 'Goose', 'Gopher', 'Gorilla', 'Goshawk', 'Grasshopper', 'Greyhound', 'Grouse', 'Guanaco', 'Guinea fowl', 'Guinea pig', 'Gull', 'Guppy', 'Hamster', 'Hare', 'Harrier', 'Havanese', 'Hawk', 'Hedgehog', 'Heron', 'Herring', 'Himalayan', 'Hippopotamus', 'Hornet', 'Horse', 'Human', 'Hummingbird', 'Hyena', 'Ibis', 'Iguana', 'Impala', 'Indri', 'Insect', 'Jackal', 'Jaguar', 'Javanese', 'Jay', 'Jay, Blue', 'Jellyfish', 'Kakapo', 'Kangaroo', 'Kingfisher', 'Kiwi', 'Koala', 'Komodo dragon', 'Kouprey', 'Kudu', 'Labradoodle', 'Ladybird', 'Lapwing', 'Lark', 'Lemming', 'Lemur', 'Leopard', 'Liger', 'Lion', 'Lionfish', 'Lizard', 'Llama', 'Lobster', 'Locust', 'Loris', 'Louse', 'Lynx', 'Lyrebird', 'Macaw', 'Magpie', 'Mallard', 'Maltese', 'Manatee', 'Mandrill', 'Markhor', 'Marten', 'Mastiff', 'Mayfly', 'Meerkat', 'Millipede', 'Mink', 'Mole', 'Molly', 'Mongoose', 'Mongrel', 'Monkey', 'Moorhen', 'Moose', 'Mosquito', 'Moth', 'Mouse', 'Mule', 'Narwhal', 'Neanderthal', 'Newfoundland', 'Newt', 'Nightingale', 'Numbat', 'Ocelot', 'Octopus', 'Okapi', 'Olm', 'Opossum', 'Orang-utan', 'Oryx', 'Ostrich', 'Otter', 'Owl', 'Ox', 'Oyster', 'Pademelon', 'Panther', 'Parrot', 'Partridge', 'Peacock', 'Peafowl', 'Pekingese', 'Pelican', 'Penguin', 'Persian', 'Pheasant', 'Pig', 'Pigeon', 'Pika', 'Pike', 'Piranha', 'Platypus', 'Pointer', 'Pony', 'Poodle', 'Porcupine', 'Porpoise', 'Possum', 'Prairie Dog', 'Prawn', 'Puffin', 'Pug', 'Puma', 'Quail', 'Quelea', 'Quetzal', 'Quokka', 'Quoll', 'Rabbit', 'Raccoon', 'Ragdoll', 'Rail', 'Ram', 'Rat', 'Rattlesnake', 'Raven', 'Red deer', 'Red panda', 'Reindeer', 'Rhinoceros', 'Robin', 'Rook', 'Rottweiler', 'Ruff', 'Salamander', 'Salmon', 'Sand Dollar', 'Sandpiper', 'Saola', 'Sardine', 'Scorpion', 'Sea lion', 'Sea Urchin', 'Seahorse', 'Seal', 'Serval', 'Shark', 'Sheep', 'Shrew', 'Shrimp', 'Siamese', 'Siberian', 'Skunk', 'Sloth', 'Snail', 'Snake', 'Snowshoe', 'Somali', 'Sparrow', 'Spider', 'Sponge', 'Squid', 'Squirrel', 'Starfish', 'Starling', 'Stingray', 'Stinkbug', 'Stoat', 'Stork', 'Swallow', 'Swan', 'Tang', 'Tapir', 'Tarsier', 'Termite', 'Tetra', 'Tiffany', 'Tiger', 'Toad', 'Tortoise', 'Toucan', 'Tropicbird', 'Trout', 'Tuatara', 'Turkey', 'Turtle', 'Uakari', 'Uguisu', 'Umbrellabird', 'Vicuña', 'Viper', 'Vulture', 'Wallaby', 'Walrus', 'Warthog', 'Wasp', 'Water buffalo', 'Weasel', 'Whale', 'Whippet', 'Wildebeest', 'Wolf', 'Wolverine', 'Wombat', 'Woodcock', 'Woodlouse', 'Woodpecker', 'Worm', 'Wrasse', 'Wren', 'Yak', 'Zebra', 'Zebu', 'Zonkey', 'Zorse']
// const colors = ['amber', 'ash', 'asphalt', 'auburn', 'avocado', 'aquamarine', 'azure', 'beige', 'bisque', 'black', 'blue', 'bone', 'bordeaux', 'brass', 'bronze', 'brown', 'burgundy', 'camel', 'caramel', 'canary', 'celeste', 'cerulean', 'champagne', 'charcoal', 'chartreuse', 'chestnut', 'chocolate', 'citron', 'claret', 'coal', 'cobalt', 'coffee', 'coral', 'corn', 'cream', 'crimson', 'cyan', 'denim', 'desert', 'ebony', 'ecru', 'emerald', 'feldspar', 'fuchsia', 'gold', 'gray', 'green', 'heather', 'indigo', 'ivory', 'jet', 'khaki', 'lime', 'magenta', 'maroon', 'mint', 'navy', 'olive', 'orange', 'pink', 'plum', 'purple', 'red', 'rust', 'salmon', 'sienna', 'silver', 'snow', 'steel', 'tan', 'teal', 'tomato', 'violet', 'white', 'yellow']
const characters: string[] = ['accepting', 'adventurous', 'affable', 'ambitious', 'amiable', 'amicable', 'annoying', 'bold', 'brave', 'bright', 'brutal', 'brute', 'callous', 'calm', 'careful', 'cautious', 'charitable', 'cheerful', 'clever', 'courtly', 'creative', 'cruel', 'curious', 'daring', 'devout', 'eager', 'elegant', 'energetic', 'excited', 'ferocious', 'forgiving', 'free', 'friendly', 'funny', 'generous', 'genteel', 'gentle', 'graceful', 'grim', 'grouchy', 'happy', 'heartless', 'helpful', 'honest', 'humane', 'humble', 'impulsive', 'independent', 'indulgent', 'intense', 'inventive', 'kind', 'lazy', 'lenient', 'loyal', 'meek', 'merciless', 'merry', 'messy', 'mild', 'neat', 'nervous', 'obliging', 'obnoxious', 'odious', 'patient', 'plain', 'pleasant', 'polite', 'proper', 'proud', 'quick', 'quiet', 'refined', 'relaxed', 'religious', 'respectful', 'rude', 'savage', 'selfish', 'sensitive', 'serious', 'shrewd', 'silly', 'simple', 'smart', 'soft', 'sophisticated', 'sophisticated', 'stern', 'strong', 'stubborn', 'tender', 'tense', 'timid', 'tough', 'trusting', 'urbane', 'vain', 'vicious', 'violent', 'warm', 'wise', 'witty']
import wordlist from './wordlist.json'
const randomElementFromArray = <T>(arr: T[]): T => arr[Math.floor(Math.random() * arr.length)]
const safeString = (s: string): string => s.toLowerCase().replace(/ /, '')
const canIHazUsername = (delimiter: string = '-'): string => {
return safeString(randomElementFromArray(characters) + delimiter + randomElementFromArray(animals))
export const showAvailableLists = () => {
const keys = Object.keys(wordlist)
console.log(keys)
return keys
}
export default canIHazUsername
export const generate = (format: string = '{character}_{english}', maxReformats = 16): string => {
for (let i = 0; i < maxReformats; i++) {
const match = /\{.*?\}/.exec(format)
if (match === null) break
const keys = match[0]
.slice(1, -1)
.split('|')
.map(key => key.trim())
.filter(key => key !== '') as [keyof typeof wordlist]
const lists = keys.map(key => Array.isArray(wordlist[key]) ? wordlist[key] : [])
const flatteded = lists.reduce((acc, val) => acc.concat(val), []);
const value: string = flatteded.length > 0
? randomElementFromArray(flatteded)
: ''
format = format.replace(match[0], value)
}
return format
}
export default generate

View File

@ -1,34 +0,0 @@
const webpack = require('webpack')
const path = require('path')
const DtsBundleWebpack = require('dts-bundle-webpack')
module.exports = {
context: `${__dirname}`,
target: 'node',
entry: [
`./index.ts`,
],
output: {
path: `${__dirname}/../lib`,
filename: 'index.js',
libraryTarget: 'umd',
},
resolve: {
extensions: ['.js', '.jsx', '.ts', '.tsx'],
},
optimization: {
minimize: true,
},
module: {
rules: [{
test: /\.tsx?$/,
loader: 'awesome-typescript-loader'
}, ],
},
plugins: [
new DtsBundleWebpack({
name: 'canihazusername',
main: `./lib/index.d.ts`
})
],
}

1
src/wordlist.json Normal file

File diff suppressed because one or more lines are too long

View File

@ -1,8 +0,0 @@
const assert = require('assert')
const cihu = require('../lib/index').default
describe('Array', () => {
it('Should return a string', () => {
assert.equal(typeof cihu(), 'string')
})
})

View File

@ -1,21 +1,30 @@
{
"compilerOptions": {
"outDir": "./lib",
"target": "es6",
"module": "commonjs",
"declaration": true,
"declarationMap": false,
"sourceMap": false,
"outDir": "./lib",
"rootDir": "./src",
"removeComments": true,
"strict": true,
"noImplicitAny": true,
"strictNullChecks": true,
"removeComments": true,
"declaration": true,
"sourceMap": true,
"noEmit": true,
"jsx": "react"
"strictFunctionTypes": true,
"strictBindCallApply": true,
"strictPropertyInitialization": true,
"noImplicitThis": true,
"alwaysStrict": true,
// "noUnusedLocals": true,
// "noUnusedParameters": true,
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": true,
"esModuleInterop": true,
"resolveJsonModule": true,
"forceConsistentCasingInFileNames": true
},
"include": [
"./src/**/*.tsx",
"./src/**/*.ts"
],
"exclude": [
"node_modules"
"./src"
]
}

View File

@ -1,17 +0,0 @@
const common = {
stats: {
assets: true,
assetsSort: 'size',
all: false,
errors: true,
colors: true,
performance: true,
timings: true,
},
}
const src = require('./src/webpack.config.js')
module.exports = [
Object.assign({}, common, src),
]

8
website/index.html Normal file
View File

@ -0,0 +1,8 @@
<!DOCTYPE html>
<html>
<body>
<script src="./main.ts"></script>
</body>
</html>

3
website/main.ts Normal file
View File

@ -0,0 +1,3 @@
import cihu from '../'
console.log(cihu())