UNPKG

starving-orange

Version:

Random nickname generator combining Korean adjectives and fruits

289 lines (283 loc) 6.74 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); const adjectives = [ "배고픈", "상냥한", "무서운", "겁먹은", "용감한", "친절한", "귀여운", "달콤한", "신비한", "활발한", "조용한", "차분한", "유쾌한", "따뜻한", "시원한", "날카로운", "호기심많은", "놀라운", "똑똑한", "유머러스한", "발빠른", "손이큰", "코가큰", "눈부신", "애교많은", "간지러운", "매력적인", "기분좋은", "산뜻한", "상쾌한", "반짝이는", "깜찍한", "포근한", "부드러운", "시크한", "멋진", "화려한", "우아한", "당당한", "자신감있는", "여유로운", "세련된", "감성적인", "로맨틱한", "환상적인", "꿈꾸는", "열정적인", "에너제틱한", "생기있는", "긍정적인", "낙천적인", "순수한", "깔끔한", "단정한", ]; const fruits = [ "귤", "사과", "키위", "수박", "딸기", "바나나", "포도", "복숭아", "배", "자두", "체리", "망고", "오렌지", "레몬", "라임", "자몽", "멜론", "참외", "대추", "감", "석류", "용과", "두리안", "리치", "무화과", "살구", "매실", "모과", "산딸기", "오디", "다래", "감귤", "유자", "한라봉", "청귤", "천혜향", "레드향", "구아바", "앵두", "머스캣", "청포도", "거봉", "참다래", "크랜베리", "블루베리", "라즈베리", "블랙베리", "코코넛", "아보카도", ]; const vegetables = [ "토마토", "오이", "호박", "가지", "파프리카", "시금치", "상추", "양배추", "브로콜리", "당근", "고구마", "감자", "옥수수", "완두콩", "무", "배추", "콩나물", "도라지", "더덕", "마늘", "양파", "대파", "생강", "우엉", "도토리", "미나리", "깻잎", "청경채", ]; // 과일과 야채를 합쳐서 전체 명사 배열 생성 const nouns = [...fruits, ...vegetables]; /** * 간단한 시드 기반 랜덤 생성기 */ class SeededRandom { constructor(seed = Math.random() * 1000000) { this.seed = seed % 2147483647; if (this.seed <= 0) this.seed += 2147483646; } next() { this.seed = (this.seed * 16807) % 2147483647; return (this.seed - 1) / 2147483646; } } /** * 배열에서 랜덤하게 하나의 요소를 선택합니다. */ function getRandomElement(array, random) { const index = Math.floor(random.next() * array.length); return array[index]; } /** * 한글 형용사와 명사를 조합한 랜덤 닉네임을 생성합니다. * * @param options 닉네임 생성 옵션 * @returns 생성된 닉네임 정보 * * @example * ```typescript * import { generateNickname } from 'starving-orange'; * * 1. 기본 사용법 (띄어쓰기 있음) * const result = generateNickname(); * console.log(result.nickname); // "배고픈 귤" * * 2. 띄어쓰기 없는 닉네임 * const noSpaceResult = generateNickname({ noSpacing: true }); * console.log(noSpaceResult.nickname); // "배고픈귤" * * 3. 커스텀 옵션 사용 * const customResult = generateNickname({ * customAdjectives: ["멋진", "귀여운"], * customNouns: ["딸기", "바나나"], * seed: 12345, * noSpacing: true * }); * ``` */ function generateNickname(options = {}) { const { customAdjectives = adjectives, customNouns = nouns, seed, noSpacing = false, } = options; if (customAdjectives.length === 0) { throw new Error("형용사 배열이 비어있습니다."); } if (customNouns.length === 0) { throw new Error("명사 배열이 비어있습니다."); } const random = new SeededRandom(seed); const adjective = getRandomElement(customAdjectives, random); const noun = getRandomElement(customNouns, random); const separator = noSpacing ? "" : " "; return { nickname: `${adjective}${separator}${noun}`, adjective, noun, }; } /** * 여러 개의 닉네임을 한번에 생성합니다. * * @param count 생성할 닉네임 개수 * @param options 닉네임 생성 옵션 * @returns 생성된 닉네임 정보 배열 * * @example * ```typescript * import { generateMultipleNicknames } from 'starving-orange'; * * const results = generateMultipleNicknames(5); * results.forEach(result => { * console.log(result.nickname); * }); * ``` */ function generateMultipleNicknames(count, options = {}) { if (count <= 0) { throw new Error("개수는 1 이상이어야 합니다."); } const results = []; for (let i = 0; i < count; i++) { // 각 닉네임마다 다른 시드 사용 (옵션에 시드가 지정된 경우 기반으로) const seedForThisNickname = options.seed ? options.seed + i : undefined; results.push(generateNickname({ ...options, seed: seedForThisNickname, })); } return results; } /** * 사용 가능한 형용사 목록을 반환합니다. */ function getAvailableAdjectives() { return [...adjectives]; } /** * 사용 가능한 명사 목록을 반환합니다. */ function getAvailableNouns() { return [...nouns]; } /** * 사용 가능한 과일 목록을 반환합니다. * @deprecated 대신 getAvailableNouns()를 사용하세요. */ function getAvailableFruits() { return [...fruits]; } /** * 사용 가능한 야채 목록을 반환합니다. */ function getAvailableVegetables() { return [...vegetables]; } /** * 가능한 닉네임 조합의 총 개수를 반환합니다. */ function getTotalCombinations(options = {}) { const { customAdjectives = adjectives, customNouns = nouns } = options; return customAdjectives.length * customNouns.length; } exports.adjectives = adjectives; exports.default = generateNickname; exports.fruits = fruits; exports.generateMultipleNicknames = generateMultipleNicknames; exports.generateNickname = generateNickname; exports.getAvailableAdjectives = getAvailableAdjectives; exports.getAvailableFruits = getAvailableFruits; exports.getAvailableNouns = getAvailableNouns; exports.getAvailableVegetables = getAvailableVegetables; exports.getTotalCombinations = getTotalCombinations; exports.nouns = nouns; exports.vegetables = vegetables;