init
This commit is contained in:
+800
@@ -0,0 +1,800 @@
|
||||
/**
|
||||
* Random word slug generator for plan IDs
|
||||
* Inspired by https://github.com/nas5w/random-word-slugs
|
||||
* with Claude-flavored words
|
||||
*/
|
||||
import { randomBytes } from 'crypto'
|
||||
|
||||
// Adjectives for slug generation - whimsical and delightful
|
||||
const ADJECTIVES = [
|
||||
// Classic pleasant adjectives
|
||||
'abundant',
|
||||
'ancient',
|
||||
'bright',
|
||||
'calm',
|
||||
'cheerful',
|
||||
'clever',
|
||||
'cozy',
|
||||
'curious',
|
||||
'dapper',
|
||||
'dazzling',
|
||||
'deep',
|
||||
'delightful',
|
||||
'eager',
|
||||
'elegant',
|
||||
'enchanted',
|
||||
'fancy',
|
||||
'fluffy',
|
||||
'gentle',
|
||||
'gleaming',
|
||||
'golden',
|
||||
'graceful',
|
||||
'happy',
|
||||
'hidden',
|
||||
'humble',
|
||||
'jolly',
|
||||
'joyful',
|
||||
'keen',
|
||||
'kind',
|
||||
'lively',
|
||||
'lovely',
|
||||
'lucky',
|
||||
'luminous',
|
||||
'magical',
|
||||
'majestic',
|
||||
'mellow',
|
||||
'merry',
|
||||
'mighty',
|
||||
'misty',
|
||||
'noble',
|
||||
'peaceful',
|
||||
'playful',
|
||||
'polished',
|
||||
'precious',
|
||||
'proud',
|
||||
'quiet',
|
||||
'quirky',
|
||||
'radiant',
|
||||
'rosy',
|
||||
'serene',
|
||||
'shiny',
|
||||
'silly',
|
||||
'sleepy',
|
||||
'smooth',
|
||||
'snazzy',
|
||||
'snug',
|
||||
'snuggly',
|
||||
'soft',
|
||||
'sparkling',
|
||||
'spicy',
|
||||
'splendid',
|
||||
'sprightly',
|
||||
'starry',
|
||||
'steady',
|
||||
'sunny',
|
||||
'swift',
|
||||
'tender',
|
||||
'tidy',
|
||||
'toasty',
|
||||
'tranquil',
|
||||
'twinkly',
|
||||
'valiant',
|
||||
'vast',
|
||||
'velvet',
|
||||
'vivid',
|
||||
'warm',
|
||||
'whimsical',
|
||||
'wild',
|
||||
'wise',
|
||||
'witty',
|
||||
'wondrous',
|
||||
'zany',
|
||||
'zesty',
|
||||
'zippy',
|
||||
// Whimsical / magical
|
||||
'breezy',
|
||||
'bubbly',
|
||||
'buzzing',
|
||||
'cheeky',
|
||||
'cosmic',
|
||||
'cozy',
|
||||
'crispy',
|
||||
'crystalline',
|
||||
'cuddly',
|
||||
'drifting',
|
||||
'dreamy',
|
||||
'effervescent',
|
||||
'ethereal',
|
||||
'fizzy',
|
||||
'flickering',
|
||||
'floating',
|
||||
'floofy',
|
||||
'fluttering',
|
||||
'foamy',
|
||||
'frolicking',
|
||||
'fuzzy',
|
||||
'giggly',
|
||||
'glimmering',
|
||||
'glistening',
|
||||
'glittery',
|
||||
'glowing',
|
||||
'goofy',
|
||||
'groovy',
|
||||
'harmonic',
|
||||
'hazy',
|
||||
'humming',
|
||||
'iridescent',
|
||||
'jaunty',
|
||||
'jazzy',
|
||||
'jiggly',
|
||||
'melodic',
|
||||
'moonlit',
|
||||
'mossy',
|
||||
'nifty',
|
||||
'peppy',
|
||||
'prancy',
|
||||
'purrfect',
|
||||
'purring',
|
||||
'quizzical',
|
||||
'rippling',
|
||||
'rustling',
|
||||
'shimmering',
|
||||
'shimmying',
|
||||
'snappy',
|
||||
'snoopy',
|
||||
'squishy',
|
||||
'swirling',
|
||||
'ticklish',
|
||||
'tingly',
|
||||
'twinkling',
|
||||
'velvety',
|
||||
'wiggly',
|
||||
'wobbly',
|
||||
'woolly',
|
||||
'zazzy',
|
||||
// Programming concepts
|
||||
'abstract',
|
||||
'adaptive',
|
||||
'agile',
|
||||
'async',
|
||||
'atomic',
|
||||
'binary',
|
||||
'cached',
|
||||
'compiled',
|
||||
'composed',
|
||||
'compressed',
|
||||
'concurrent',
|
||||
'cryptic',
|
||||
'curried',
|
||||
'declarative',
|
||||
'delegated',
|
||||
'distributed',
|
||||
'dynamic',
|
||||
'eager',
|
||||
'elegant',
|
||||
'encapsulated',
|
||||
'enumerated',
|
||||
'eventual',
|
||||
'expressive',
|
||||
'federated',
|
||||
'functional',
|
||||
'generic',
|
||||
'greedy',
|
||||
'hashed',
|
||||
'idempotent',
|
||||
'immutable',
|
||||
'imperative',
|
||||
'indexed',
|
||||
'inherited',
|
||||
'iterative',
|
||||
'lazy',
|
||||
'lexical',
|
||||
'linear',
|
||||
'linked',
|
||||
'logical',
|
||||
'memoized',
|
||||
'modular',
|
||||
'mutable',
|
||||
'nested',
|
||||
'optimized',
|
||||
'parallel',
|
||||
'parsed',
|
||||
'partitioned',
|
||||
'piped',
|
||||
'polymorphic',
|
||||
'pure',
|
||||
'reactive',
|
||||
'recursive',
|
||||
'refactored',
|
||||
'reflective',
|
||||
'replicated',
|
||||
'resilient',
|
||||
'robust',
|
||||
'scalable',
|
||||
'sequential',
|
||||
'serialized',
|
||||
'sharded',
|
||||
'sorted',
|
||||
'staged',
|
||||
'stateful',
|
||||
'stateless',
|
||||
'streamed',
|
||||
'structured',
|
||||
'synchronous',
|
||||
'synthetic',
|
||||
'temporal',
|
||||
'transient',
|
||||
'typed',
|
||||
'unified',
|
||||
'validated',
|
||||
'vectorized',
|
||||
'virtual',
|
||||
] as const
|
||||
|
||||
// Nouns for slug generation - whimsical creatures, nature, and fun objects
|
||||
const NOUNS = [
|
||||
// Nature & cosmic
|
||||
'aurora',
|
||||
'avalanche',
|
||||
'blossom',
|
||||
'breeze',
|
||||
'brook',
|
||||
'bubble',
|
||||
'canyon',
|
||||
'cascade',
|
||||
'cloud',
|
||||
'clover',
|
||||
'comet',
|
||||
'coral',
|
||||
'cosmos',
|
||||
'creek',
|
||||
'crescent',
|
||||
'crystal',
|
||||
'dawn',
|
||||
'dewdrop',
|
||||
'dusk',
|
||||
'eclipse',
|
||||
'ember',
|
||||
'feather',
|
||||
'fern',
|
||||
'firefly',
|
||||
'flame',
|
||||
'flurry',
|
||||
'fog',
|
||||
'forest',
|
||||
'frost',
|
||||
'galaxy',
|
||||
'garden',
|
||||
'glacier',
|
||||
'glade',
|
||||
'grove',
|
||||
'harbor',
|
||||
'horizon',
|
||||
'island',
|
||||
'lagoon',
|
||||
'lake',
|
||||
'leaf',
|
||||
'lightning',
|
||||
'meadow',
|
||||
'meteor',
|
||||
'mist',
|
||||
'moon',
|
||||
'moonbeam',
|
||||
'mountain',
|
||||
'nebula',
|
||||
'nova',
|
||||
'ocean',
|
||||
'orbit',
|
||||
'pebble',
|
||||
'petal',
|
||||
'pine',
|
||||
'planet',
|
||||
'pond',
|
||||
'puddle',
|
||||
'quasar',
|
||||
'rain',
|
||||
'rainbow',
|
||||
'reef',
|
||||
'ripple',
|
||||
'river',
|
||||
'shore',
|
||||
'sky',
|
||||
'snowflake',
|
||||
'spark',
|
||||
'spring',
|
||||
'star',
|
||||
'stardust',
|
||||
'starlight',
|
||||
'storm',
|
||||
'stream',
|
||||
'summit',
|
||||
'sun',
|
||||
'sunbeam',
|
||||
'sunrise',
|
||||
'sunset',
|
||||
'thunder',
|
||||
'tide',
|
||||
'twilight',
|
||||
'valley',
|
||||
'volcano',
|
||||
'waterfall',
|
||||
'wave',
|
||||
'willow',
|
||||
'wind',
|
||||
// Cute creatures
|
||||
'alpaca',
|
||||
'axolotl',
|
||||
'badger',
|
||||
'bear',
|
||||
'beaver',
|
||||
'bee',
|
||||
'bird',
|
||||
'bumblebee',
|
||||
'bunny',
|
||||
'cat',
|
||||
'chipmunk',
|
||||
'crab',
|
||||
'crane',
|
||||
'deer',
|
||||
'dolphin',
|
||||
'dove',
|
||||
'dragon',
|
||||
'dragonfly',
|
||||
'duckling',
|
||||
'eagle',
|
||||
'elephant',
|
||||
'falcon',
|
||||
'finch',
|
||||
'flamingo',
|
||||
'fox',
|
||||
'frog',
|
||||
'giraffe',
|
||||
'goose',
|
||||
'hamster',
|
||||
'hare',
|
||||
'hedgehog',
|
||||
'hippo',
|
||||
'hummingbird',
|
||||
'jellyfish',
|
||||
'kitten',
|
||||
'koala',
|
||||
'ladybug',
|
||||
'lark',
|
||||
'lemur',
|
||||
'llama',
|
||||
'lobster',
|
||||
'lynx',
|
||||
'manatee',
|
||||
'meerkat',
|
||||
'moth',
|
||||
'narwhal',
|
||||
'newt',
|
||||
'octopus',
|
||||
'otter',
|
||||
'owl',
|
||||
'panda',
|
||||
'parrot',
|
||||
'peacock',
|
||||
'pelican',
|
||||
'penguin',
|
||||
'phoenix',
|
||||
'piglet',
|
||||
'platypus',
|
||||
'pony',
|
||||
'porcupine',
|
||||
'puffin',
|
||||
'puppy',
|
||||
'quail',
|
||||
'quokka',
|
||||
'rabbit',
|
||||
'raccoon',
|
||||
'raven',
|
||||
'robin',
|
||||
'salamander',
|
||||
'seahorse',
|
||||
'seal',
|
||||
'sloth',
|
||||
'snail',
|
||||
'sparrow',
|
||||
'sphinx',
|
||||
'squid',
|
||||
'squirrel',
|
||||
'starfish',
|
||||
'swan',
|
||||
'tiger',
|
||||
'toucan',
|
||||
'turtle',
|
||||
'unicorn',
|
||||
'walrus',
|
||||
'whale',
|
||||
'wolf',
|
||||
'wombat',
|
||||
'wren',
|
||||
'yeti',
|
||||
'zebra',
|
||||
// Fun objects & concepts
|
||||
'acorn',
|
||||
'anchor',
|
||||
'balloon',
|
||||
'beacon',
|
||||
'biscuit',
|
||||
'blanket',
|
||||
'bonbon',
|
||||
'book',
|
||||
'boot',
|
||||
'cake',
|
||||
'candle',
|
||||
'candy',
|
||||
'castle',
|
||||
'charm',
|
||||
'clock',
|
||||
'cocoa',
|
||||
'cookie',
|
||||
'crayon',
|
||||
'crown',
|
||||
'cupcake',
|
||||
'donut',
|
||||
'dream',
|
||||
'fairy',
|
||||
'fiddle',
|
||||
'flask',
|
||||
'flute',
|
||||
'fountain',
|
||||
'gadget',
|
||||
'gem',
|
||||
'gizmo',
|
||||
'globe',
|
||||
'goblet',
|
||||
'hammock',
|
||||
'harp',
|
||||
'haven',
|
||||
'hearth',
|
||||
'honey',
|
||||
'journal',
|
||||
'kazoo',
|
||||
'kettle',
|
||||
'key',
|
||||
'kite',
|
||||
'lantern',
|
||||
'lemon',
|
||||
'lighthouse',
|
||||
'locket',
|
||||
'lollipop',
|
||||
'mango',
|
||||
'map',
|
||||
'marble',
|
||||
'marshmallow',
|
||||
'melody',
|
||||
'mitten',
|
||||
'mochi',
|
||||
'muffin',
|
||||
'music',
|
||||
'nest',
|
||||
'noodle',
|
||||
'oasis',
|
||||
'origami',
|
||||
'pancake',
|
||||
'parasol',
|
||||
'peach',
|
||||
'pearl',
|
||||
'pebble',
|
||||
'pie',
|
||||
'pillow',
|
||||
'pinwheel',
|
||||
'pixel',
|
||||
'pizza',
|
||||
'plum',
|
||||
'popcorn',
|
||||
'pretzel',
|
||||
'prism',
|
||||
'pudding',
|
||||
'pumpkin',
|
||||
'puzzle',
|
||||
'quiche',
|
||||
'quill',
|
||||
'quilt',
|
||||
'riddle',
|
||||
'rocket',
|
||||
'rose',
|
||||
'scone',
|
||||
'scroll',
|
||||
'shell',
|
||||
'sketch',
|
||||
'snowglobe',
|
||||
'sonnet',
|
||||
'sparkle',
|
||||
'spindle',
|
||||
'sprout',
|
||||
'sundae',
|
||||
'swing',
|
||||
'taco',
|
||||
'teacup',
|
||||
'teapot',
|
||||
'thimble',
|
||||
'toast',
|
||||
'token',
|
||||
'tome',
|
||||
'tower',
|
||||
'treasure',
|
||||
'treehouse',
|
||||
'trinket',
|
||||
'truffle',
|
||||
'tulip',
|
||||
'umbrella',
|
||||
'waffle',
|
||||
'wand',
|
||||
'whisper',
|
||||
'whistle',
|
||||
'widget',
|
||||
'wreath',
|
||||
'zephyr',
|
||||
// Computer scientists
|
||||
'abelson',
|
||||
'adleman',
|
||||
'aho',
|
||||
'allen',
|
||||
'babbage',
|
||||
'bachman',
|
||||
'backus',
|
||||
'barto',
|
||||
'bengio',
|
||||
'bentley',
|
||||
'blum',
|
||||
'boole',
|
||||
'brooks',
|
||||
'catmull',
|
||||
'cerf',
|
||||
'cherny',
|
||||
'church',
|
||||
'clarke',
|
||||
'cocke',
|
||||
'codd',
|
||||
'conway',
|
||||
'cook',
|
||||
'corbato',
|
||||
'cray',
|
||||
'curry',
|
||||
'dahl',
|
||||
'diffie',
|
||||
'dijkstra',
|
||||
'dongarra',
|
||||
'eich',
|
||||
'emerson',
|
||||
'engelbart',
|
||||
'feigenbaum',
|
||||
'floyd',
|
||||
'gosling',
|
||||
'graham',
|
||||
'gray',
|
||||
'hamming',
|
||||
'hanrahan',
|
||||
'hartmanis',
|
||||
'hejlsberg',
|
||||
'hellman',
|
||||
'hennessy',
|
||||
'hickey',
|
||||
'hinton',
|
||||
'hoare',
|
||||
'hollerith',
|
||||
'hopcroft',
|
||||
'hopper',
|
||||
'iverson',
|
||||
'kahan',
|
||||
'kahn',
|
||||
'karp',
|
||||
'kay',
|
||||
'kernighan',
|
||||
'knuth',
|
||||
'kurzweil',
|
||||
'lamport',
|
||||
'lampson',
|
||||
'lecun',
|
||||
'lerdorf',
|
||||
'liskov',
|
||||
'lovelace',
|
||||
'matsumoto',
|
||||
'mccarthy',
|
||||
'metcalfe',
|
||||
'micali',
|
||||
'milner',
|
||||
'minsky',
|
||||
'moler',
|
||||
'moore',
|
||||
'naur',
|
||||
'neumann',
|
||||
'newell',
|
||||
'nygaard',
|
||||
'papert',
|
||||
'parnas',
|
||||
'pascal',
|
||||
'patterson',
|
||||
'pearl',
|
||||
'perlis',
|
||||
'pike',
|
||||
'pnueli',
|
||||
'rabin',
|
||||
'reddy',
|
||||
'ritchie',
|
||||
'rivest',
|
||||
'rossum',
|
||||
'russell',
|
||||
'scott',
|
||||
'sedgewick',
|
||||
'shamir',
|
||||
'shannon',
|
||||
'sifakis',
|
||||
'simon',
|
||||
'stallman',
|
||||
'stearns',
|
||||
'steele',
|
||||
'stonebraker',
|
||||
'stroustrup',
|
||||
'sutherland',
|
||||
'sutton',
|
||||
'tarjan',
|
||||
'thacker',
|
||||
'thompson',
|
||||
'torvalds',
|
||||
'turing',
|
||||
'ullman',
|
||||
'valiant',
|
||||
'wadler',
|
||||
'wall',
|
||||
'wigderson',
|
||||
'wilkes',
|
||||
'wilkinson',
|
||||
'wirth',
|
||||
'wozniak',
|
||||
'yao',
|
||||
] as const
|
||||
|
||||
// Verbs for the middle word - whimsical action words
|
||||
const VERBS = [
|
||||
'baking',
|
||||
'beaming',
|
||||
'booping',
|
||||
'bouncing',
|
||||
'brewing',
|
||||
'bubbling',
|
||||
'chasing',
|
||||
'churning',
|
||||
'coalescing',
|
||||
'conjuring',
|
||||
'cooking',
|
||||
'crafting',
|
||||
'crunching',
|
||||
'cuddling',
|
||||
'dancing',
|
||||
'dazzling',
|
||||
'discovering',
|
||||
'doodling',
|
||||
'dreaming',
|
||||
'drifting',
|
||||
'enchanting',
|
||||
'exploring',
|
||||
'finding',
|
||||
'floating',
|
||||
'fluttering',
|
||||
'foraging',
|
||||
'forging',
|
||||
'frolicking',
|
||||
'gathering',
|
||||
'giggling',
|
||||
'gliding',
|
||||
'greeting',
|
||||
'growing',
|
||||
'hatching',
|
||||
'herding',
|
||||
'honking',
|
||||
'hopping',
|
||||
'hugging',
|
||||
'humming',
|
||||
'imagining',
|
||||
'inventing',
|
||||
'jingling',
|
||||
'juggling',
|
||||
'jumping',
|
||||
'kindling',
|
||||
'knitting',
|
||||
'launching',
|
||||
'leaping',
|
||||
'mapping',
|
||||
'marinating',
|
||||
'meandering',
|
||||
'mixing',
|
||||
'moseying',
|
||||
'munching',
|
||||
'napping',
|
||||
'nibbling',
|
||||
'noodling',
|
||||
'orbiting',
|
||||
'painting',
|
||||
'percolating',
|
||||
'petting',
|
||||
'plotting',
|
||||
'pondering',
|
||||
'popping',
|
||||
'prancing',
|
||||
'purring',
|
||||
'puzzling',
|
||||
'questing',
|
||||
'riding',
|
||||
'roaming',
|
||||
'rolling',
|
||||
'sauteeing',
|
||||
'scribbling',
|
||||
'seeking',
|
||||
'shimmying',
|
||||
'singing',
|
||||
'skipping',
|
||||
'sleeping',
|
||||
'snacking',
|
||||
'sniffing',
|
||||
'snuggling',
|
||||
'soaring',
|
||||
'sparking',
|
||||
'spinning',
|
||||
'splashing',
|
||||
'sprouting',
|
||||
'squishing',
|
||||
'stargazing',
|
||||
'stirring',
|
||||
'strolling',
|
||||
'swimming',
|
||||
'swinging',
|
||||
'tickling',
|
||||
'tinkering',
|
||||
'toasting',
|
||||
'tumbling',
|
||||
'twirling',
|
||||
'waddling',
|
||||
'wandering',
|
||||
'watching',
|
||||
'weaving',
|
||||
'whistling',
|
||||
'wibbling',
|
||||
'wiggling',
|
||||
'wishing',
|
||||
'wobbling',
|
||||
'wondering',
|
||||
'yawning',
|
||||
'zooming',
|
||||
] as const
|
||||
|
||||
/**
|
||||
* Generate a cryptographically random integer in the range [0, max)
|
||||
*/
|
||||
function randomInt(max: number): number {
|
||||
// Use crypto.randomBytes for better randomness than Math.random
|
||||
const bytes = randomBytes(4)
|
||||
const value = bytes.readUInt32BE(0)
|
||||
return value % max
|
||||
}
|
||||
|
||||
/**
|
||||
* Pick a random element from an array
|
||||
*/
|
||||
function pickRandom<T>(array: readonly T[]): T {
|
||||
return array[randomInt(array.length)]!
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate a random word slug in the format "adjective-verb-noun"
|
||||
* Example: "gleaming-brewing-phoenix", "cosmic-pondering-lighthouse"
|
||||
*/
|
||||
export function generateWordSlug(): string {
|
||||
const adjective = pickRandom(ADJECTIVES)
|
||||
const verb = pickRandom(VERBS)
|
||||
const noun = pickRandom(NOUNS)
|
||||
return `${adjective}-${verb}-${noun}`
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate a shorter random word slug in the format "adjective-noun"
|
||||
* Example: "graceful-unicorn", "cosmic-lighthouse"
|
||||
*/
|
||||
export function generateShortWordSlug(): string {
|
||||
const adjective = pickRandom(ADJECTIVES)
|
||||
const noun = pickRandom(NOUNS)
|
||||
return `${adjective}-${noun}`
|
||||
}
|
||||
Reference in New Issue
Block a user