{"version":3,"sources":["../src/constant.ts","../src/isJong.ts","../src/isCho.ts","../src/isJung.ts","../src/isHangul.ts","../src/isJamo.ts","../src/divide.ts","../src/utils.ts","../src/combine.ts","../src/choseong.ts","../src/hasJongseong.ts","../src/replaceJamo.ts","../src/extract.ts","../src/includesByCho.ts","../src/hangulSearch.ts","../src/sortHangul.ts","../src/formatNumber.ts","../src/hangulToNumber.ts","../src/nativeKoreanToNumber.ts","../src/nativeNumber.ts","../src/formatDate.ts","../src/days.ts","../src/josa.ts","../src/banmal.ts","../src/speechLevel.ts","../src/pronounce.ts","../src/romanize.ts","../src/normalize.ts","../src/convertKey.ts","../src/typing.ts","../src/hangulSlice.ts","../src/frequency.ts","../src/distance.ts","../src/getLocal.ts","../src/encode.ts"],"names":["n","JAMO_START","JAMO_END","keys","x","a","b","format","_a","josa","s"],"mappings":"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","file":"index.mjs","sourcesContent":["export const CHO_HANGUL = [\n  'ㄱ', 'ㄲ', 'ㄴ', 'ㄷ', 'ㄸ',\n  'ㄹ', 'ㅁ', 'ㅂ','ㅃ', 'ㅅ',\n  'ㅆ', 'ㅇ', 'ㅈ', 'ㅉ', 'ㅊ',\n  'ㅋ', 'ㅌ', 'ㅍ', 'ㅎ',\n];\nexport const JUNG_HANGUL = [\n  'ㅏ', 'ㅐ', 'ㅑ', 'ㅒ', 'ㅓ', 'ㅔ', \n  'ㅕ', 'ㅖ', 'ㅗ', 'ㅘ', 'ㅙ', 'ㅚ', \n  'ㅛ', 'ㅜ', 'ㅝ', 'ㅞ', 'ㅟ', \n  'ㅠ', 'ㅡ', 'ㅢ', 'ㅣ',\n];\nexport const JONG_HANGUL = [\n  '', 'ㄱ', 'ㄲ', 'ㄳ', 'ㄴ', 'ㄵ', 'ㄶ', \n  'ㄷ', 'ㄹ', 'ㄺ', 'ㄻ', 'ㄼ', 'ㄽ', 'ㄾ', \n  'ㄿ', 'ㅀ', 'ㅁ', 'ㅂ', 'ㅄ', 'ㅅ', 'ㅆ', \n  'ㅇ', 'ㅈ', 'ㅊ', 'ㅋ', 'ㅌ', 'ㅍ','ㅎ',\n];\n\nexport const JUNG_COMPLETE_HANGUL: Record<string, string> = {\n  ㅘ: 'ㅗㅏ',\n  ㅙ: 'ㅗㅐ',\n  ㅚ: 'ㅗㅣ',\n  ㅝ: 'ㅜㅓ',\n  ㅞ: 'ㅜㅔ',\n  ㅟ: 'ㅜㅣ',\n  ㅢ: 'ㅡㅣ',\n};\n\nexport const JONG_COMPLETE_HANGUL: Record<string, string> = {\n  ㄳ: 'ㄱㅅ',\n  ㄵ: 'ㄴㅈ',\n  ㄶ: 'ㄴㅎ',\n  ㄺ: 'ㄹㄱ',\n  ㄻ: 'ㄹㅁ',\n  ㄼ: 'ㄹㅂ',\n  ㄽ: 'ㄹㅅ',\n  ㄾ: 'ㄹㅌ',\n  ㄿ: 'ㄹㅍ',\n  ㅀ: 'ㄹㅎ',\n  ㅄ: 'ㅂㅅ',\n};\n\nexport const JUNG_START_CHARCODE = JUNG_HANGUL[0].charCodeAt(0);\nexport const JUNG_END_CHARCODE = JUNG_HANGUL[JUNG_HANGUL.length-1].charCodeAt(0);\n\nexport const JONG_START_CHARCODE = JONG_HANGUL[1].charCodeAt(0);\nexport const JONG_END_CHARCODE = JONG_HANGUL[JONG_HANGUL.length-1].charCodeAt(0);\n\nexport const HANGUL_START_CHARCODE = '가'.charCodeAt(0);\nexport const HANGUL_END_CHARCODE = '힣'.charCodeAt(0);\n\nexport const CHO_PERIOD = '까'.charCodeAt(0) - '가'.charCodeAt(0);\nexport const JONG_PERIOD = '개'.charCodeAt(0) - '가'.charCodeAt(0);\n\n// use covertKey function\nexport const KEY_MAPS: Record<string, string> = {\n  ㅂ: \"q\", ㅃ: \"Q\", ㅈ: \"w\", ㅉ: \"W\",\n  ㄷ: \"e\", ㄸ: \"E\", ㄱ: \"r\", ㄲ: \"R\",\n  ㅅ: \"t\", ㅆ: \"T\", ㅛ: \"y\", ㅕ: \"u\",\n  ㅑ: \"i\", ㅐ: \"o\", ㅒ: \"O\", ㅔ: \"p\", \n  ㅖ: \"P\", ㅁ: \"a\", ㄴ: \"s\",ㅇ: \"d\",\n  ㄹ: \"f\", ㅎ: \"g\", ㅗ: \"h\",ㅓ: \"j\",\n  ㅏ: \"k\", ㅣ: \"l\", ㅋ: \"z\", ㅌ: \"x\",\n  ㅊ: \"c\", ㅍ: \"v\", ㅠ: \"b\", ㅜ: \"n\",\n  ㅡ: \"m\",\n};\n\n// use formatNumber function\nexport const numberUnits = [\"\", \"일\", \"이\", \"삼\", \"사\", \"오\", \"육\", \"칠\", \"팔\", \"구\"];\n\nexport const tenUnits = [\"\", \"십\", \"백\", \"천\"];\n\nexport const thousandUnits = [\n  \"\",\n  \"만\",\n  \"억\",\n  \"조\",\n  \"경\",\n  \"해\",\n  \"자\",\n  \"양\",\n  \"구\",\n  \"간\",\n  \"정\",\n  \"재\",\n  \"극\",\n  \"항하사\",\n  \"아승기\",\n  \"나유타\",\n  \"불가사의\",\n  \"무량대수\",\n];\n\nexport const OVER_DIGIT = thousandUnits.length * tenUnits.length;\n\n// use formatDate function\nexport const WEEK_DAY = [\"일\", \"월\", \"화\", \"수\", \"목\", \"금\", \"토\"];\n\n// use josa function\nexport const JOSA_LIST: Record<string, string> = {\n  이: \"이/가\",\n  가: \"이/가\",\n  을: \"을/를\",\n  를: \"을/를\",\n  은: \"은/는\",\n  는: \"은/는\",\n  으로: \"으로/로\",\n  로: \"으로/로\",\n  와: \"와/과\",\n  과: \"와/과\",\n  이나: \"이나/나\",\n  나: \"이나/나\",\n  이에: \"이에/에\",\n  에: \"이에/에\",\n  이란: \"이란/란\",\n  란: \"이란/란\",\n  아: \"아/야\",\n  야: \"아/야\",\n  이여: \"이여/여\",\n  여: \"이여/여\",\n  이든: \"이든/든\",\n  든: \"이든/든\",\n  이랑: \"이랑/랑\",\n  랑: \"이랑/랑\",\n  이나마: \"이나마/나마\",\n  나마: \"이나마/나마\",\n  이야말로: \"이야말로/야말로\",\n  야말로: \"이야말로/야말로\",\n  이며: \"이며/며\",\n  며: \"이며/며\",\n  이라도: \"이라도/라도\",\n  라도: \"이라도/라도\",\n  이라면: \"이라면/라면\",\n  라면: \"이라면/라면\",\n  이라고: \"이라고/라고\",\n  라고: \"이라고/라고\",\n}\n\n// use normalize function\nexport const NORMALIZE_CHO = [\n  \"g\", \"gg\", \"n\", \"d\", \"dd\",\n  \"r\", \"m\", \"b\", \"bb\", \"s\",\n  \"ss\", \"\", \"j\", \"jj\", \"c\",\n  \"k\", \"t\", \"p\", \"h\"\n];\n\nexport const NORMALIZE_JUNG = [\n \"a\", \"ae\", \"ya\", \"yae\", \"eo\",\n \"e\", \"yeo\", \"ye\", \"o\", \"wa\",\n \"wae\", \"oe\", \"yo\", \"u\", \"weo\",\n \"we\", \"wi\", \"yu\", \"eu\", \"eui\",\n \"i\"\n]\nexport const NORMALIZE_JONG = [\n  \"\", \"g\", \"gg\", \"gs\", \"n\", \"nj\",\n  \"nh\", \"d\", \"r\", \"rk\", \"rm\", \n  \"rb\", \"rs\", \"rt\", \"rp\", \"rh\", \n  \"m\", \"b\", \"bs\", \"s\", \"ss\", \n  \"ng\", \"j\", \"c\", \"k\", \"t\", \n  \"p\", \"h\"\n]","import { JONG_START_CHARCODE, JONG_END_CHARCODE } from \"./constant\";\n\nexport function isJongByCode(jong: number = 0) {\n  return JONG_START_CHARCODE <= jong && jong <= JONG_END_CHARCODE;\n}\n\nexport function isJong(word: string = \"\") {\n  for (let index = 0; index < word.length; index++) {\n    if (!isJongByCode(word.charCodeAt(index))) return false;\n  }\n\n  return !!word;\n}\n\nexport function isJongByGroups(word: string = \"\") {\n  const result: boolean[] = [];\n\n  for (let index = 0; index < word.length; index++) {\n    result.push(isJongByCode(word.charCodeAt(index)));\n  }\n\n  return result;\n}\n","import { JONG_COMPLETE_HANGUL } from \"./constant\";\nimport { isJongByCode } from \"./isJong\";\n\nexport function isChoByChar(cho: string = \"\") {\n  return isJongByCode(cho.charCodeAt(0)) && !JONG_COMPLETE_HANGUL[cho];\n}\n\nexport function isCho(word: string = \"\") {\n  for (let index = 0; index < word.length; index++) {\n    if (!isChoByChar(word[index])) return false;\n  }\n\n  return !!word;\n}\n\nexport function isChoByGroups(word: string = \"\") {\n  return word.toString().split(\"\").map(isChoByChar);\n}\n","import { JUNG_START_CHARCODE, JUNG_END_CHARCODE } from \"./constant\";\n\nexport function isJungByCode(jung: number = 0) {\n  return JUNG_START_CHARCODE <= jung && jung <= JUNG_END_CHARCODE;\n}\n\nexport function isJung(word: string = \"\") {\n  for (let index = 0; index < word.length; index++) {\n    if (!isJungByCode(word.charCodeAt(index))) return false;\n  }\n\n  return !!word;\n}\n\nexport function isJungByGroups(word: string = \"\") {\n  const result: boolean[] = [];\n\n  for (let index = 0; index < word.length; index++) {\n    result.push(isJungByCode(word.charCodeAt(index)));\n  }\n\n  return result;\n}\n","import { HANGUL_END_CHARCODE, HANGUL_START_CHARCODE } from \"./constant\";\n\nexport function isHangulByCode(hangul: number = 0) {\n  return HANGUL_START_CHARCODE <= hangul && hangul <= HANGUL_END_CHARCODE;\n}\n\nexport function isHangul(word: string = \"\") {\n  for (let index = 0; index < word.length; index++) {\n    if (!isHangulByCode(word.charCodeAt(index))) return false;\n  }\n\n  return !!word;\n}\n\nexport function isHangulByGroups(word: string = \"\") {\n  const result: boolean[] = [];\n\n  for (let index = 0; index < word.length; index++) {\n    result.push(isHangulByCode(word.charCodeAt(index)));\n  }\n\n  return result;\n}\n","import { HANGUL_START_CHARCODE, HANGUL_END_CHARCODE } from \"./constant\";\n\nconst JAMO_START = 0x3131; // ㄱ\nconst JAMO_END = 0x3163;   // ㅣ\nconst CONSONANT_START = 0x3131; // ㄱ\nconst CONSONANT_END = 0x314E;   // ㅎ\nconst VOWEL_START = 0x314F; // ㅏ\nconst VOWEL_END = 0x3163;   // ㅣ\n\n/**\n * 자모(ㄱ-ㅣ)인지 확인\n * @example isJamo(\"ㄱ\") → true\n * @example isJamo(\"가\") → false\n */\nexport function isJamo(word: string = \"\"): boolean {\n  if (!word) return false;\n  for (let i = 0; i < word.length; i++) {\n    const code = word.charCodeAt(i);\n    if (code < JAMO_START || code > JAMO_END) return false;\n  }\n  return true;\n}\n\n/**\n * 각 글자가 자모인지 배열로 반환\n */\nexport function isJamoByGroups(word: string = \"\"): boolean[] {\n  return word.split(\"\").map((char) => {\n    const code = char.charCodeAt(0);\n    return code >= JAMO_START && code <= JAMO_END;\n  });\n}\n\n/**\n * 자음(ㄱ-ㅎ)인지 확인\n * @example isConsonant(\"ㄱ\") → true\n * @example isConsonant(\"ㅏ\") → false\n */\nexport function isConsonant(word: string = \"\"): boolean {\n  if (!word) return false;\n  for (let i = 0; i < word.length; i++) {\n    const code = word.charCodeAt(i);\n    if (code < CONSONANT_START || code > CONSONANT_END) return false;\n  }\n  return true;\n}\n\n/**\n * 모음(ㅏ-ㅣ)인지 확인\n * @example isVowel(\"ㅏ\") → true\n * @example isVowel(\"ㄱ\") → false\n */\nexport function isVowel(word: string = \"\"): boolean {\n  if (!word) return false;\n  for (let i = 0; i < word.length; i++) {\n    const code = word.charCodeAt(i);\n    if (code < VOWEL_START || code > VOWEL_END) return false;\n  }\n  return true;\n}\n\n/**\n * 완성형 한글(가-힣)인지 확인 (자모 제외)\n * @example isCompleteHangul(\"가\") → true\n * @example isCompleteHangul(\"ㄱ\") → false\n */\nexport function isCompleteHangul(word: string = \"\"): boolean {\n  if (!word) return false;\n  for (let i = 0; i < word.length; i++) {\n    const code = word.charCodeAt(i);\n    if (code < HANGUL_START_CHARCODE || code > HANGUL_END_CHARCODE) return false;\n  }\n  return true;\n}\n\n/**\n * 각 글자가 완성형 한글인지 배열로 반환\n */\nexport function isCompleteHangulByGroups(word: string = \"\"): boolean[] {\n  return word.split(\"\").map((char) => {\n    const code = char.charCodeAt(0);\n    return code >= HANGUL_START_CHARCODE && code <= HANGUL_END_CHARCODE;\n  });\n}\n\n/**\n * 쌍자음인지 확인\n * @example isDoubleConsonant(\"ㄲ\") → true\n * @example isDoubleConsonant(\"ㄱ\") → false\n */\nconst doubles = new Set([\"ㄲ\", \"ㄸ\", \"ㅃ\", \"ㅆ\", \"ㅉ\"]);\n\nexport function isDoubleConsonant(word: string = \"\"): boolean {\n  if (!word) return false;\n  for (let i = 0; i < word.length; i++) {\n    if (!doubles.has(word[i])) return false;\n  }\n  return true;\n}\n","import {\n  CHO_HANGUL,\n  JUNG_HANGUL,\n  JONG_HANGUL,\n  JUNG_COMPLETE_HANGUL,\n  JONG_COMPLETE_HANGUL,\n  CHO_PERIOD,\n  JONG_PERIOD,\n  HANGUL_START_CHARCODE,\n} from \"./constant\";\n\nimport { isHangulByCode } from \"./isHangul\";\nimport { DivideOptionTypes } from \"./types\";\n\nexport function divide(word: string = \"\", option: DivideOptionTypes = {}) {\n  const { isSplit, resultType } = option;\n\n  const wordCode = word.charCodeAt(0);\n  const charCode = wordCode - HANGUL_START_CHARCODE;\n\n  if (!isHangulByCode(wordCode)) {\n    return [word[0]];\n  }\n\n  const choIndex = Math.floor(charCode / CHO_PERIOD);\n  const jungIndex = Math.floor((charCode % CHO_PERIOD) / JONG_PERIOD);\n  const jongIndex = charCode % JONG_PERIOD;\n\n  const cho = CHO_HANGUL[choIndex] || \"\";\n  const jung = JUNG_HANGUL[jungIndex] || \"\";\n  const jong = JONG_HANGUL[jongIndex] || \"\";\n\n  // 더 세분하게 분리하기 ㅙ -> ㅗㅐ\n  const dividedJung = isSplit ? divideByJung(jung) : jung;\n  const dividedJong = isSplit ? divideByJong(jong) : jong;\n\n  if (resultType === \"index\") {\n    return { cho: choIndex, jung: jungIndex, jong: jongIndex };\n  }\n\n  if (resultType === \"object\") {\n    return { cho, jung: dividedJung, jong: dividedJong };\n  }\n\n  if (resultType === \"string\") {\n    return cho + dividedJung + dividedJong;\n  }\n\n  return (cho + dividedJung + dividedJong).split(\"\");\n}\n\nexport function divideHangulByGroups(\n  word: string = \"\",\n  option: DivideOptionTypes = {}\n) {\n  const isSplit = option?.isSplit ?? true;\n  const resultType = option?.resultType ?? \"array\";\n\n  return word\n    .toString()\n    .split(\"\")\n    .map((char) => divide(char, { isSplit, resultType }));\n}\n\nexport function divideHangul(word: string = \"\", isSplit: boolean = true) {\n  const str = word.toString();\n  const result: string[] = [];\n\n  for (let i = 0; i < str.length; i++) {\n    const divided = divide(str[i], { isSplit, resultType: \"string\" }) as string;\n    for (let j = 0; j < divided.length; j++) result.push(divided[j]);\n  }\n\n  return result;\n}\n\nexport function divideByJung(jung: string) {\n  return JUNG_COMPLETE_HANGUL[jung] || jung;\n}\n\nexport function divideByJong(jong: string) {\n  return JONG_COMPLETE_HANGUL[jong] || jong;\n}\n","export function isNumber(input: any) {\n  return typeof input === \"number\" && !isNaN(input);\n}\n\nexport function splitByKey(key: string = \"\"): string[] {\n  return key.match(/[ㄱ-힣a-zA-Z0-9]+/g) ?? ([] as any);\n}\n\nexport function getNestedProperty(\n  key: string[] | string = [],\n  object: any = {}\n) {\n  const _key = typeof key === \"string\" ? splitByKey(key) : key;\n\n  if (!_key.length) return undefined;\n\n  return _key?.reduce((acc, v) => acc?.[v], object);\n}\n\nexport function zeroPad(\n  string: number | string = \"\",\n  pow: number = 0,\n  pad: string = \"0\"\n) {\n  const result = string.toString();\n  const count = pow - result.length;\n\n  if (count <= 0) return result;\n\n  return pad.toString().repeat(count) + result;\n}\n\nexport function chunkAtEnd(value: string = \"\", n: number = 1) {\n  const result: string[] = [];\n\n  let start = value.length;\n\n  while ((start -= n) > 0) {\n    result.push(value.substring(start, start + n));\n  }\n\n  if (start > -n) {\n    result.push(value.substring(0, start + n));\n  }\n\n  return result;\n}\n\nexport function makePercentByObject(object: any) {\n  const result: Record<string, number> = {};\n\n  let sum = 0;\n\n  for (const key in object) {\n    sum += object[key];\n  }\n\n  for (const key in object) {\n    if (isNumber(object[key])) {\n      result[key] = Number(((object[key] / sum) * 100).toFixed(2));\n    }\n  }\n\n  return result;\n}\n\nexport function reverseByObject(object: any) {\n  const result: Record<string | number, string> = {};\n\n  for (const key in object) {\n    result[object[key]] = key;\n  }\n\n  return result;\n}\n\nexport function reverseByArray(array: any) {\n  const result: any = [];\n\n  for (let index = array.length - 1; index >= 0; index--) {\n    if (Array.isArray(array[index])) {\n      array[index] = reverseByArray(array[index]);\n    }\n\n    result.push(array[index]);\n  }\n\n  return result;\n}\n","import {\n  CHO_HANGUL,\n  CHO_PERIOD,\n  HANGUL_START_CHARCODE,\n  JONG_COMPLETE_HANGUL,\n  JONG_HANGUL,\n  JUNG_COMPLETE_HANGUL,\n  JUNG_HANGUL,\n  JONG_PERIOD,\n} from \"./constant\";\n\nimport { reverseByObject } from \"./utils\";\n\nimport { isCho } from \"./isCho\";\nimport { isJung } from \"./isJung\";\nimport { isJong } from \"./isJong\";\nimport { isHangulByCode } from \"./isHangul\";\n\nconst fromCharCodeMemo: Record<number, string> = {};\n\nexport function combineByCode(\n  cho: number = 0,\n  jung: number = 0,\n  jong: number = 0\n) {\n  const hangulCode =\n    HANGUL_START_CHARCODE + cho * CHO_PERIOD + jung * JONG_PERIOD + jong;\n\n  if (!isHangulByCode(hangulCode)) {\n    return \"\";\n  }\n\n  if (!fromCharCodeMemo[hangulCode]) {\n    fromCharCodeMemo[hangulCode] = String.fromCharCode(hangulCode);\n  }\n\n  return fromCharCodeMemo[hangulCode];\n}\n\nexport function combine(\n  cho: string = \"\",\n  jung: string = \"\",\n  jong: string = \"\"\n) {\n  const combineJung = combineByJung(jung);\n  const combineJong = combineByJong(jong);\n\n  const choIndex = CHO_HANGUL.indexOf(cho);\n  const jungIndex = JUNG_HANGUL.indexOf(combineJung);\n  const jongIndex = JONG_HANGUL.indexOf(combineJong);\n\n  if (choIndex === -1 || jungIndex === -1 || jongIndex === -1) {\n    return cho || combineJung || combineJong;\n  }\n\n  return combineByCode(choIndex, jungIndex, jongIndex);\n}\n\nfunction combineLoop(wordList: string[]) {\n  let index = 0;\n  const result: string[] = [];\n\n  while (index < wordList.length) {\n    const first = wordList[index++];\n\n    const cho = isCho(first) ? first : \"\";\n\n    const jung = cho && isJung(wordList[index]) ? wordList[index++] : \"\";\n\n    // 초성 또는 중성 합쳐지지 않고, 종성 의미 X,\n    if (!cho || !jung) {\n      result.push(first);\n      continue;\n    }\n\n    // 중성이 없으면 소용 X\n    const subJung = JUNG_COMPLETE_HANGUL[combineByJung(jung + wordList[index])]\n      ? wordList[index++]\n      : \"\";\n\n    // 다음 문자에 모음이 안오는 경우 (합쳐질 가능성 존재)\n    const jong =\n      isJong(wordList[index]) && !isJung(wordList[index + 1])\n        ? wordList[index++]\n        : \"\";\n\n    // 두 문자 모두 초성이면서 (이미 합쳐진 문자 X - ㅄ, ㄺ X)\n    // 다음 문자에 모음이 안오는 경우 (합쳐질 가능성 존재)\n    const subJong =\n      JONG_COMPLETE_HANGUL[combineByJong(jong + wordList[index])] &&\n      !isJung(wordList[index + 1])\n        ? wordList[index++]\n        : \"\";\n\n    result.push(combine(cho, jung + subJung, jong + subJong));\n  }\n\n  return result.join(\"\");\n}\n\nexport function combineHangul(str: string | (string | string[])[] = \"\") {\n  const word = typeof str === \"string\" ? str.toString().split(\"\") : str;\n\n  // Group 형식일 때, [ ['ㄱㅏ'], 'ㄴㅏ', ['ㄷ', 'ㅏ'] ]\n  const result: string[] = [];\n  const _temp: string[] = [];\n\n  for (let index = 0; index < word.length; index++) {\n    const item = word[index];\n\n    if (typeof item === \"string\") {\n      _temp.push(...item.toString().split(\"\"));\n    } else {\n      result.push(\n        combineLoop(_temp.splice(0)).concat(\n          combineLoop(item.join(\"\").split(\"\"))\n        )\n      );\n    }\n  }\n\n  result.push(combineLoop(_temp));\n\n  return result.join(\"\");\n}\n\nconst REVERSE_JUNG_COMPLETE = reverseByObject(JUNG_COMPLETE_HANGUL);\nconst REVERSE_JONG_COMPLETE = reverseByObject(JONG_COMPLETE_HANGUL);\n\nexport function combineByJung(jung: string) {\n  return REVERSE_JUNG_COMPLETE[jung] || jung;\n}\n\nexport function combineByJong(jong: string) {\n  return REVERSE_JONG_COMPLETE[jong] || jong;\n}\n","import {\n  CHO_HANGUL,\n  JUNG_HANGUL,\n  JONG_HANGUL,\n  CHO_PERIOD,\n  JONG_PERIOD,\n  HANGUL_START_CHARCODE,\n} from \"./constant\";\nimport { isHangulByCode } from \"./isHangul\";\n\n/**\n * 문자열에서 초성만 추출\n * @example getChoseong(\"프로그래밍\") → \"ㅍㄹㄱㄹㅁ\"\n */\nexport function getChoseong(word: string = \"\"): string {\n  return word\n    .split(\"\")\n    .map((char) => {\n      const code = char.charCodeAt(0);\n      if (!isHangulByCode(code)) return char;\n      const choIndex = Math.floor((code - HANGUL_START_CHARCODE) / CHO_PERIOD);\n      return CHO_HANGUL[choIndex];\n    })\n    .join(\"\");\n}\n\n/**\n * 문자열에서 중성만 추출\n * @example getJungseong(\"프로그래밍\") → \"ㅡㅗㅡㅐㅣ\"\n */\nexport function getJungseong(word: string = \"\"): string {\n  return word\n    .split(\"\")\n    .map((char) => {\n      const code = char.charCodeAt(0);\n      if (!isHangulByCode(code)) return char;\n      const charCode = code - HANGUL_START_CHARCODE;\n      const jungIndex = Math.floor((charCode % CHO_PERIOD) / JONG_PERIOD);\n      return JUNG_HANGUL[jungIndex];\n    })\n    .join(\"\");\n}\n\n/**\n * 문자열에서 종성만 추출 (종성 없으면 빈 문자열)\n * @example getJongseong(\"한글\") → \"ㄴㄹ\"\n */\nexport function getJongseong(word: string = \"\"): string {\n  return word\n    .split(\"\")\n    .map((char) => {\n      const code = char.charCodeAt(0);\n      if (!isHangulByCode(code)) return char;\n      const jongIndex = (code - HANGUL_START_CHARCODE) % JONG_PERIOD;\n      return JONG_HANGUL[jongIndex];\n    })\n    .join(\"\");\n}\n","import { HANGUL_START_CHARCODE, JONG_PERIOD } from \"./constant\";\nimport { isHangulByCode } from \"./isHangul\";\n\n/**\n * 마지막 글자에 받침(종성)이 있는지 확인\n * @example hasJongseong(\"한\") → true\n * @example hasJongseong(\"하\") → false\n */\nexport function hasJongseong(word: string = \"\"): boolean {\n  if (!word) return false;\n  const lastChar = word.charCodeAt(word.length - 1);\n  if (!isHangulByCode(lastChar)) return false;\n  return (lastChar - HANGUL_START_CHARCODE) % JONG_PERIOD > 0;\n}\n\n/**\n * 각 글자의 받침 유무를 배열로 반환\n * @example hasJongseongByGroups(\"한글아\") → [true, true, false]\n */\nexport function hasJongseongByGroups(word: string = \"\"): boolean[] {\n  return word.split(\"\").map((char) => {\n    const code = char.charCodeAt(0);\n    if (!isHangulByCode(code)) return false;\n    return (code - HANGUL_START_CHARCODE) % JONG_PERIOD > 0;\n  });\n}\n","import {\n  CHO_HANGUL,\n  JUNG_HANGUL,\n  JONG_HANGUL,\n  CHO_PERIOD,\n  JONG_PERIOD,\n  HANGUL_START_CHARCODE,\n} from \"./constant\";\nimport { isHangulByCode } from \"./isHangul\";\nimport { combineByCode } from \"./combine\";\n\nfunction decomposeChar(code: number) {\n  const charCode = code - HANGUL_START_CHARCODE;\n  return {\n    cho: Math.floor(charCode / CHO_PERIOD),\n    jung: Math.floor((charCode % CHO_PERIOD) / JONG_PERIOD),\n    jong: charCode % JONG_PERIOD,\n  };\n}\n\n/**\n * 종성을 제거\n * @example removeJongseong(\"한글\") → \"하그\"\n */\nexport function removeJongseong(word: string = \"\"): string {\n  return word\n    .split(\"\")\n    .map((char) => {\n      const code = char.charCodeAt(0);\n      if (!isHangulByCode(code)) return char;\n      const { cho, jung } = decomposeChar(code);\n      return combineByCode(cho, jung, 0);\n    })\n    .join(\"\");\n}\n\n/**\n * 초성을 교체\n * @example replaceChoseong(\"한글\", (cho) => \"ㅁ\") → \"만믈\"\n */\nexport function replaceChoseong(\n  word: string = \"\",\n  replacer: (cho: string, index: number) => string\n): string {\n  return word\n    .split(\"\")\n    .map((char, i) => {\n      const code = char.charCodeAt(0);\n      if (!isHangulByCode(code)) return char;\n      const { cho, jung, jong } = decomposeChar(code);\n      const newCho = replacer(CHO_HANGUL[cho], i);\n      const newChoIndex = CHO_HANGUL.indexOf(newCho);\n      if (newChoIndex === -1) return char;\n      return combineByCode(newChoIndex, jung, jong);\n    })\n    .join(\"\");\n}\n\n/**\n * 중성을 교체\n * @example replaceJungseong(\"한글\", (jung) => \"ㅜ\") → \"훈굴\"\n */\nexport function replaceJungseong(\n  word: string = \"\",\n  replacer: (jung: string, index: number) => string\n): string {\n  return word\n    .split(\"\")\n    .map((char, i) => {\n      const code = char.charCodeAt(0);\n      if (!isHangulByCode(code)) return char;\n      const { cho, jung, jong } = decomposeChar(code);\n      const newJung = replacer(JUNG_HANGUL[jung], i);\n      const newJungIndex = JUNG_HANGUL.indexOf(newJung);\n      if (newJungIndex === -1) return char;\n      return combineByCode(cho, newJungIndex, jong);\n    })\n    .join(\"\");\n}\n\n/**\n * 종성을 교체\n * @example replaceJongseong(\"한글\", (jong) => \"ㅁ\") → \"함긂\"\n */\nexport function replaceJongseong(\n  word: string = \"\",\n  replacer: (jong: string, index: number) => string\n): string {\n  return word\n    .split(\"\")\n    .map((char, i) => {\n      const code = char.charCodeAt(0);\n      if (!isHangulByCode(code)) return char;\n      const { cho, jung, jong } = decomposeChar(code);\n      const newJong = replacer(JONG_HANGUL[jong], i);\n      const newJongIndex = JONG_HANGUL.indexOf(newJong);\n      if (newJongIndex === -1) return char;\n      return combineByCode(cho, jung, newJongIndex);\n    })\n    .join(\"\");\n}\n","import { HANGUL_START_CHARCODE, HANGUL_END_CHARCODE } from \"./constant\";\n\nconst JAMO_START = 0x3131;\nconst JAMO_END = 0x3163;\n\nfunction isHangulChar(code: number): boolean {\n  return (\n    (code >= HANGUL_START_CHARCODE && code <= HANGUL_END_CHARCODE) ||\n    (code >= JAMO_START && code <= JAMO_END)\n  );\n}\n\n/**\n * 문자열에서 한글만 추출\n * @example extractHangul(\"hello안녕world세계\") → \"안녕세계\"\n */\nexport function extractHangul(word: string = \"\"): string {\n  return word\n    .split(\"\")\n    .filter((char) => isHangulChar(char.charCodeAt(0)))\n    .join(\"\");\n}\n\n/**\n * 문자열에 한글이 포함되어 있는지 확인\n * @example containsHangul(\"hello안녕\") → true\n * @example containsHangul(\"hello\") → false\n */\nexport function containsHangul(word: string = \"\"): boolean {\n  for (let i = 0; i < word.length; i++) {\n    if (isHangulChar(word.charCodeAt(i))) return true;\n  }\n  return false;\n}\n\n/**\n * 문자열에서 한글을 제거\n * @example removeHangul(\"hello안녕world\") → \"helloworld\"\n */\nexport function removeHangul(word: string = \"\"): string {\n  return word\n    .split(\"\")\n    .filter((char) => !isHangulChar(char.charCodeAt(0)))\n    .join(\"\");\n}\n\n/**\n * 문자열에서 한글 글자 수를 반환\n * @example hangulLength(\"hello안녕\") → 2\n */\nexport function hangulLength(word: string = \"\"): number {\n  let count = 0;\n  for (let i = 0; i < word.length; i++) {\n    if (isHangulChar(word.charCodeAt(i))) count++;\n  }\n  return count;\n}\n","import { combineByCode } from \"./combine\";\nimport { CHO_HANGUL } from \"./constant\";\n\nexport function makeRegexByCho(search: string = \"\") {\n  const regex = CHO_HANGUL.reduce(\n    (acc: string, cho: string, index: number) =>\n      acc.replace(\n        new RegExp(cho, \"g\"),\n        `[${combineByCode(index, 0, 0)}-${combineByCode(index + 1, 0, -1)}]`\n      ),\n    search\n  );\n\n  return new RegExp(`(${regex})`, \"g\");\n}\n\nexport function includesByCho(search: string = \"\", word: string = \"\") {\n  return makeRegexByCho(search).test(word);\n}\n","import { makeRegexByCho } from \"./includesByCho\";\nimport { CHO_HANGUL } from \"./constant\";\n\nfunction hasChoChar(str: string): boolean {\n  for (let i = 0; i < str.length; i++) {\n    if (CHO_HANGUL.includes(str[i])) return true;\n  }\n  return false;\n}\n\n/**\n * 초성 검색을 포함한 한글 검색\n * @example hangulIncludes(\"프로그래밍\", \"ㅍㄹㄱ\") → true\n * @example hangulIncludes(\"프로그래밍\", \"프로\") → true\n */\nexport function hangulIncludes(word: string, search: string): boolean {\n  if (!word || !search) return false;\n  if (word.includes(search)) return true;\n\n  if (hasChoChar(search)) {\n    return makeRegexByCho(search).test(word);\n  }\n\n  return false;\n}\n\n/**\n * 초성 검색을 포함한 startsWith\n * @example hangulStartsWith(\"프로그래밍\", \"ㅍㄹ\") → true\n */\nexport function hangulStartsWith(word: string, search: string): boolean {\n  if (!word || !search) return false;\n  if (word.startsWith(search)) return true;\n\n  if (hasChoChar(search)) {\n    const choRegex = makeRegexByCho(search);\n    const startRegex = new RegExp(\"^\" + choRegex.source);\n    return startRegex.test(word);\n  }\n\n  return false;\n}\n\n/**\n * 초성 검색을 포함한 endsWith\n * @example hangulEndsWith(\"프로그래밍\", \"래밍\") → true\n */\nexport function hangulEndsWith(word: string, search: string): boolean {\n  if (!word || !search) return false;\n  if (word.endsWith(search)) return true;\n\n  if (hasChoChar(search)) {\n    const regex = new RegExp(makeRegexByCho(search).source, \"g\");\n    const matches = [...word.matchAll(regex)];\n    if (matches.length === 0) return false;\n    const lastMatch = matches[matches.length - 1];\n    return lastMatch.index! + lastMatch[0].length === word.length;\n  }\n\n  return false;\n}\n\n/**\n * 초성 검색으로 배열 필터링\n * @example hangulFilter([\"사과\", \"바나나\", \"수박\"], \"ㅅ\") → [\"사과\", \"수박\"]\n */\nexport function hangulFilter(list: string[], search: string): string[] {\n  if (!search) return list;\n  return list.filter((item) => hangulIncludes(item, search));\n}\n\n/**\n * 초성 검색으로 일치하는 부분을 하이라이트 정보 반환\n * @example hangulHighlight(\"프로그래밍\", \"ㅍㄹ\") → { matched: true, ranges: [[0, 2]] }\n */\nexport function hangulHighlight(\n  word: string,\n  search: string\n): { matched: boolean; ranges: [number, number][] } {\n  if (!word || !search) return { matched: false, ranges: [] };\n\n  const regex = hasChoChar(search)\n    ? new RegExp(makeRegexByCho(search).source, \"g\")\n    : new RegExp(`(${search.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")})`, \"g\");\n\n  const ranges: [number, number][] = [];\n  let match: RegExpExecArray | null;\n\n  while ((match = regex.exec(word)) !== null) {\n    ranges.push([match.index, match.index + match[0].length]);\n  }\n\n  return { matched: ranges.length > 0, ranges };\n}\n","import { splitByKey, getNestedProperty, reverseByObject } from \"./utils\";\n\nconst intlCollator = Intl.Collator(\"ko\");\n\nfunction baseCompare(str1: any, str2: any, orderASC: boolean) {\n  if (orderASC) {\n    return intlCollator.compare(str1, str2);\n  }\n\n  return intlCollator.compare(str2, str1);\n}\n\nfunction baseSortBy(\n  array: any[] = [],\n  compare?: string[] | string,\n  orderASC: boolean = true\n) {\n  if (Array.isArray(compare)) {\n    const keys = compare.map((x) => splitByKey(x));\n\n    return array.sort((a, b) => {\n      for (let i = 0; i < compare.length; i++) {\n        const result = baseCompare(\n          getNestedProperty(keys[i], a),\n          getNestedProperty(keys[i], b),\n          orderASC\n        );\n\n        if (result !== 0) return result;\n      }\n\n      return 0;\n    });\n  }\n\n  if (!compare) {\n    return array.sort((a, b) => baseCompare(a, b, orderASC));\n  }\n\n  const keys = splitByKey(compare);\n\n  return array.sort((a, b) =>\n    baseCompare(\n      getNestedProperty(keys, a),\n      getNestedProperty(keys, b),\n      orderASC\n    )\n  );\n}\n\nexport function sortByASC(array: any[] = [], compare?: string[] | string) {\n  return baseSortBy(array, compare, true);\n}\n\nexport function sortByDESC(array: any[] = [], compare?: string[] | string) {\n  return baseSortBy(array, compare, false);\n}\n\n/**\n * orderASC: true -> 오름차순\n * orderASC: false -> 내림차순\n */\nexport function sortByGroups(\n  array: any[] = [],\n  groups: (number | string)[] = [],\n  orderASC: boolean = true,\n  compare?: string\n) {\n  const objectBygroup: any = reverseByObject(groups);\n\n  const keys = splitByKey(compare);\n\n  const mapped = array.map((item, index) => {\n    return { index, value: compare ? getNestedProperty(keys, item) : item };\n  });\n\n  const baseSortByGroups = (a: any, b: any) => {\n    const status1 = objectBygroup[a.value] ?? -1;\n    const status2 = objectBygroup[b.value] ?? -1;\n\n    const condition1 = orderASC ? status1 - status2 : status2 - status1;\n    const condition2 = baseCompare(a.value, b.value, orderASC);\n\n    if (status1 === status2) {\n      return condition2 || 0;\n    }\n    if (status1 === -1) {\n      return orderASC ? 1 : -1;\n    }\n    if (status2 === -1) {\n      return orderASC ? -1 : 1;\n    }\n\n    return condition1 || condition2 || 0;\n  };\n\n  return mapped.sort(baseSortByGroups).map((item) => array[item.index]);\n}\n","import { chunkAtEnd, isNumber, zeroPad } from \"./utils\";\nimport { numberUnits, tenUnits, thousandUnits, OVER_DIGIT } from \"./constant\";\n\nexport function formatNumber(format: number | string | null = \"\") {\n  const formatter = (format: number | string | null = \"\") => {\n    if (!isNumber(Number(format))) {\n      return \"\";\n    }\n\n    return chunkAtEnd(String(format), 4)\n      .reduce((acc, item, index) => {\n        const unit = thousandUnits[index] ?? \"\";\n\n        if (!Number(item)) {\n          return acc;\n        }\n\n        return `${Number(item)}${unit} ${acc}`;\n      }, \"\")\n      .trim();\n  };\n\n  if (String(format).length > OVER_DIGIT) {\n    return \"범위초과\";\n  }\n\n  const parts = format?.toString?.()?.replace(/,/g, \"\")?.split?.(\".\") || [];\n\n  const result = [];\n\n  for (let i = 0; i < parts.length; i++) {\n    result.push(formatter(parts[i]));\n  }\n\n  return parts?.map?.(formatter)?.join?.(\" 점 \")?.trim?.() || \"\";\n}\n\nexport function formatNumberAll(format: number | string | null = \"\") {\n  const formatter = (format: number | string | null = \"\") => {\n    if (!isNumber(Number(format))) {\n      return \"\";\n    }\n\n    return chunkAtEnd(String(format), 4)\n      .reduce((acc, item, index) => {\n        if (!Number(item)) {\n          return acc;\n        }\n\n        let numberUnit = \"\";\n\n        const zeroItem = zeroPad(item, 4);\n\n        for (let i = 0; i < 4; i++) {\n          const number = Number(zeroItem[i]);\n\n          if (number) {\n            const unit = tenUnits[3 - i];\n\n            numberUnit += `${\n              unit && number === 1 ? \"\" : numberUnits[number]\n            }${unit}`;\n          }\n        }\n\n        const thousandUnit = thousandUnits[index] ?? \"\";\n\n        return `${numberUnit}${numberUnit ? thousandUnit : \"\"} ${acc}`;\n      }, \"\")\n      .trim();\n  };\n\n  if (String(format).length > OVER_DIGIT) {\n    return \"범위초과\";\n  }\n\n  const parts = format?.toString?.()?.replace(/,/g, \"\")?.split?.(\".\") || [];\n\n  return parts?.map?.(formatter)?.join?.(\" 점 \")?.trim?.() || \"\";\n}\n","import { numberUnits, thousandUnits } from \"./constant\";\n\nconst SINO_DIGIT_MAP: Record<string, number> = {};\nnumberUnits.forEach((unit, i) => {\n  if (unit) SINO_DIGIT_MAP[unit] = i;\n});\n\nconst TEN_UNIT_MAP: Record<string, number> = {\n  십: 10,\n  백: 100,\n  천: 1000,\n};\n\nconst THOUSAND_UNIT_MAP: Record<string, number> = {};\nthousandUnits.forEach((unit, i) => {\n  if (unit) THOUSAND_UNIT_MAP[unit] = Math.pow(10000, i);\n});\n\nconst LARGE_UNITS = thousandUnits.filter((u) => u).reverse();\n\nfunction parseSmallHangul(hangul: string): number {\n  let result = 0;\n  let current = 0;\n\n  for (let i = 0; i < hangul.length; i++) {\n    const char = hangul[i];\n\n    if (SINO_DIGIT_MAP[char] !== undefined) {\n      current = SINO_DIGIT_MAP[char];\n    } else if (TEN_UNIT_MAP[char] !== undefined) {\n      if (current === 0) current = 1;\n      result += current * TEN_UNIT_MAP[char];\n      current = 0;\n    }\n  }\n\n  result += current;\n  return result;\n}\n\n/**\n * 한글 숫자를 숫자로 변환\n * @example hangulToNumber(\"백이십삼\") → 123\n * @example hangulToNumber(\"삼만 오천\") → 35000\n * @example hangulToNumber(\"일억 이천삼백만\") → 123000000\n */\nexport function hangulToNumber(hangul: string = \"\"): number {\n  const cleaned = hangul.replace(/\\s/g, \"\");\n\n  if (!cleaned) return 0;\n\n  let result = 0;\n  let remaining = cleaned;\n\n  for (const unit of LARGE_UNITS) {\n    const unitIndex = remaining.indexOf(unit);\n    if (unitIndex === -1) continue;\n\n    const before = remaining.substring(0, unitIndex);\n    remaining = remaining.substring(unitIndex + unit.length);\n\n    const value = before ? parseSmallHangul(before) : 1;\n    result += value * THOUSAND_UNIT_MAP[unit];\n  }\n\n  if (remaining) {\n    result += parseSmallHangul(remaining);\n  }\n\n  return result;\n}\n","const NATIVE_TO_NUM: Record<string, number> = {\n  하나: 1, 둘: 2, 셋: 3, 넷: 4, 다섯: 5,\n  여섯: 6, 일곱: 7, 여덟: 8, 아홉: 9, 열: 10,\n  스물: 20, 서른: 30, 마흔: 40, 쉰: 50,\n  예순: 60, 일흔: 70, 여든: 80, 아흔: 90,\n};\n\n// 수 관형사 형태도 지원\nconst COUNTER_TO_NUM: Record<string, number> = {\n  한: 1, 두: 2, 세: 3, 네: 4, 다섯: 5,\n  여섯: 6, 일곱: 7, 여덟: 8, 아홉: 9, 열: 10,\n  스물: 20, 스무: 20, 서른: 30, 마흔: 40, 쉰: 50,\n  예순: 60, 일흔: 70, 여든: 80, 아흔: 90,\n};\n\n// 십의 자리 (긴 것부터 매칭)\nconst TENS = [\"스물\", \"스무\", \"서른\", \"마흔\", \"예순\", \"일흔\", \"여든\", \"아흔\", \"쉰\", \"열\"];\nconst ONES = [\"하나\", \"둘\", \"셋\", \"넷\", \"다섯\", \"여섯\", \"일곱\", \"여덟\", \"아홉\"];\nconst COUNTER_ONES = [\"한\", \"두\", \"세\", \"네\", \"다섯\", \"여섯\", \"일곱\", \"여덟\", \"아홉\"];\n\n/**\n * 고유어 수사를 숫자로 변환 (1~99)\n * @example nativeKoreanToNumber(\"하나\") → 1\n * @example nativeKoreanToNumber(\"스물다섯\") → 25\n * @example nativeKoreanToNumber(\"아흔아홉\") → 99\n * @example nativeKoreanToNumber(\"세\") → 3  (수 관형사도 지원)\n */\nexport function nativeKoreanToNumber(word: string = \"\"): number {\n  const cleaned = word.trim();\n  if (!cleaned) return 0;\n\n  // 단일 매칭 (기본형)\n  if (NATIVE_TO_NUM[cleaned] !== undefined) return NATIVE_TO_NUM[cleaned];\n  if (COUNTER_TO_NUM[cleaned] !== undefined) return COUNTER_TO_NUM[cleaned];\n\n  // 십의 자리 + 일의 자리 분해\n  let result = 0;\n  let remaining = cleaned;\n\n  // 십의 자리 찾기\n  for (const ten of TENS) {\n    if (remaining.startsWith(ten)) {\n      result += NATIVE_TO_NUM[ten] ?? COUNTER_TO_NUM[ten] ?? 0;\n      remaining = remaining.slice(ten.length);\n      break;\n    }\n  }\n\n  if (!remaining) return result;\n\n  // 일의 자리 찾기 (기본형)\n  for (const one of ONES) {\n    if (remaining === one) {\n      result += NATIVE_TO_NUM[one];\n      return result;\n    }\n  }\n\n  // 일의 자리 찾기 (관형사형)\n  for (const one of COUNTER_ONES) {\n    if (remaining === one) {\n      result += COUNTER_TO_NUM[one];\n      return result;\n    }\n  }\n\n  return result || 0;\n}\n","import { numberUnits, tenUnits, thousandUnits } from \"./constant\";\n\nconst NATIVE_NUMBERS: Record<number, string> = {\n  1: \"하나\", 2: \"둘\", 3: \"셋\", 4: \"넷\", 5: \"다섯\",\n  6: \"여섯\", 7: \"일곱\", 8: \"여덟\", 9: \"아홉\", 10: \"열\",\n  20: \"스물\", 30: \"서른\", 40: \"마흔\", 50: \"쉰\",\n  60: \"예순\", 70: \"일흔\", 80: \"여든\", 90: \"아흔\",\n};\n\nconst NATIVE_COUNTER: Record<number, string> = {\n  1: \"한\", 2: \"두\", 3: \"세\", 4: \"네\", 5: \"다섯\",\n  6: \"여섯\", 7: \"일곱\", 8: \"여덟\", 9: \"아홉\", 10: \"열\",\n  20: \"스물\", 30: \"서른\", 40: \"마흔\", 50: \"쉰\",\n  60: \"예순\", 70: \"일흔\", 80: \"여든\", 90: \"아흔\",\n};\n\n/**\n * 숫자를 고유어 수사로 변환 (1~99)\n * @example nativeKoreanNumber(1) → \"하나\"\n * @example nativeKoreanNumber(25) → \"스물다섯\"\n */\nexport function nativeKoreanNumber(n: number): string {\n  if (n <= 0 || n > 99 || !Number.isInteger(n)) return \"\";\n\n  if (n <= 10) return NATIVE_NUMBERS[n];\n\n  const tens = Math.floor(n / 10) * 10;\n  const ones = n % 10;\n\n  return (NATIVE_NUMBERS[tens] || \"\") + (ones ? NATIVE_NUMBERS[ones] : \"\");\n}\n\n/**\n * 숫자 + 단위명사 (수 관형사 형태)\n * @example counter(3, \"개\") → \"세 개\"\n * @example counter(1, \"명\") → \"한 명\"\n * @example counter(20, \"살\") → \"스무 살\"\n */\nexport function counter(n: number, unit: string = \"\"): string {\n  if (n <= 0 || n > 99 || !Number.isInteger(n)) return \"\";\n\n  let numStr: string;\n\n  if (n === 20) {\n    numStr = \"스무\";\n  } else if (n <= 10) {\n    numStr = NATIVE_COUNTER[n];\n  } else {\n    const tens = Math.floor(n / 10) * 10;\n    const ones = n % 10;\n    numStr = (NATIVE_COUNTER[tens] || \"\") + (ones ? NATIVE_COUNTER[ones] : \"\");\n  }\n\n  return unit ? `${numStr} ${unit}` : numStr;\n}\n\n/**\n * 서수사 반환\n * @example ordinal(1) → \"첫째\"\n * @example ordinal(3) → \"셋째\"\n * @example ordinal(11) → \"열하나째\"\n */\nexport function ordinal(n: number): string {\n  if (n <= 0 || !Number.isInteger(n)) return \"\";\n\n  if (n === 1) return \"첫째\";\n\n  const native = nativeKoreanNumber(n);\n  return native ? native + \"째\" : \"\";\n}\n\n/**\n * 숫자를 한자어 수사(순한글)로 변환\n * @example sinoKoreanNumber(123) → \"백이십삼\"\n * @example sinoKoreanNumber(10000) → \"만\"\n * @example sinoKoreanNumber(0) → \"영\"\n */\nexport function sinoKoreanNumber(n: number): string {\n  if (!Number.isInteger(n) || n < 0) return \"\";\n  if (n === 0) return \"영\";\n\n  const str = String(n);\n  const chunks: string[] = [];\n  let start = str.length;\n\n  while (start > 0) {\n    const end = start;\n    start = Math.max(0, start - 4);\n    chunks.unshift(str.substring(start, end));\n  }\n\n  chunks.reverse();\n\n  const parts: string[] = [];\n\n  for (let i = chunks.length - 1; i >= 0; i--) {\n    const chunk = chunks[i];\n    const chunkNum = Number(chunk);\n    if (chunkNum === 0) continue;\n\n    let chunkStr = \"\";\n    const padded = chunk.padStart(4, \"0\");\n\n    for (let j = 0; j < 4; j++) {\n      const digit = Number(padded[j]);\n      if (digit === 0) continue;\n\n      const tenUnit = tenUnits[3 - j];\n      if (tenUnit && digit === 1) {\n        chunkStr += tenUnit;\n      } else {\n        chunkStr += numberUnits[digit] + tenUnit;\n      }\n    }\n\n    parts.push(chunkStr + thousandUnits[i]);\n  }\n\n  return parts.join(\"\");\n}\n","import { zeroPad } from \"./utils\";\nimport { WEEK_DAY } from \"./constant\";\n\nconst DATE_REGEXER = /Y{2,4}|M{1,2}|D{1,2}|d{1,2}|H{1,2}|m{1,2}|s{1,2}/g;\n\n/**\n * @example\n * YY - 22, YYYY - 2022\n * M: 2, MM: 02,\n * D: 2, DD: 02,\n * d: 3, dd: '화',\n * H: 2, HH: 02,\n * m: 2, mm: 02,\n * s: 2, ss: 02,\n */\nexport function formatDate(\n  _date: string | Date = new Date(),\n  formatStyle: string = \"YYYY년MM월DD일 HH시mm분ss초\"\n) {\n  const date = new Date(_date);\n\n  const year = zeroPad(date.getFullYear(), 4, \"0\");\n  const month = date.getMonth() + 1;\n  const day = date.getDate();\n  const hour = date.getHours();\n  const minute = date.getMinutes();\n  const second = date.getSeconds();\n  const week = date.getDay();\n\n  function matcher(match: string): any {\n    return (\n      {\n        YY: year.slice(-2),\n        YYYY: year,\n        M: month,\n        MM: zeroPad(month, 2, \"0\"),\n        D: day,\n        DD: zeroPad(day, 2, \"0\"),\n        d: week,\n        dd: WEEK_DAY[week],\n        H: hour,\n        HH: zeroPad(hour, 2, \"0\"),\n        m: minute,\n        mm: zeroPad(minute, 2, \"0\"),\n        s: second,\n        ss: zeroPad(second, 2, \"0\"),\n      }[match] || match\n    );\n  }\n\n  return (\n    formatStyle\n      .replace(DATE_REGEXER, matcher)\n      // \"년년\" 방지 -> \"년\"\n      .replace(/(년|월|일|시|분|초{1})(년|월|일|시|분|초{1})+/g, \"$1\")\n      .replace(/\\s+/g, \" \")\n  );\n}\n","const NATIVE_DAYS: Record<number, string> = {\n  1: \"하루\",\n  2: \"이틀\",\n  3: \"사흘\",\n  4: \"나흘\",\n  5: \"닷새\",\n  6: \"엿새\",\n  7: \"이레\",\n  8: \"여드레\",\n  9: \"아흐레\",\n  10: \"열흘\",\n  11: \"열하루\",\n  12: \"열이틀\",\n  13: \"열사흘\",\n  14: \"열나흘\",\n  15: \"보름\",\n  16: \"열엿새\",\n  17: \"열이레\",\n  18: \"열여드레\",\n  19: \"열아흐레\",\n  20: \"스무날\",\n  21: \"스무하루\",\n  22: \"스무이틀\",\n  23: \"스무사흘\",\n  24: \"스무나흘\",\n  25: \"스무닷새\",\n  26: \"스무엿새\",\n  27: \"스무이레\",\n  28: \"스무여드레\",\n  29: \"스무아흐레\",\n  30: \"그믐\",\n};\n\nconst KOREAN_MONTHS: Record<number, string> = {\n  1: \"일월\",\n  2: \"이월\",\n  3: \"삼월\",\n  4: \"사월\",\n  5: \"오월\",\n  6: \"유월\",\n  7: \"칠월\",\n  8: \"팔월\",\n  9: \"구월\",\n  10: \"시월\",\n  11: \"십일월\",\n  12: \"십이월\",\n};\n\n/**\n * 고유어 날짜 이름 (1~30)\n * @example days(1) → \"하루\"\n * @example days(3) → \"사흘\"\n * @example days(15) → \"보름\"\n */\nexport function days(n: number): string {\n  return NATIVE_DAYS[n] || \"\";\n}\n\n/**\n * 한국어 월 이름 (1~12)\n * @example months(6) → \"유월\"\n * @example months(10) → \"시월\"\n */\nexport function months(n: number): string {\n  return KOREAN_MONTHS[n] || \"\";\n}\n","import { HANGUL_START_CHARCODE, JONG_PERIOD, JOSA_LIST } from \"./constant\";\n\nexport function josa(letter: string = \"\", _josa: string = \"이\") {\n  const hasJong =\n    (letter.charCodeAt(letter.length - 1) - HANGUL_START_CHARCODE) %\n      JONG_PERIOD >\n    0;\n  const josaIndex = hasJong ? 0 : 1;\n\n  const josa = _josa.replace(/\\[|\\]/g, \"\");\n\n  const josaCase = getJosaCasc(josa.split(\"/\")[0]) || josa;\n\n  return josaCase.split(\"/\")[josaIndex] ?? josa;\n}\n\n// 오늘[은/는] 사과[이/가]\nexport function formatJosa(letter: string = \"\") {\n  return letter.replace(\n    /[가-힣]\\[[가-힣]+\\/[가-힣]+\\]/g,\n    (match) => match[0] + josa(match[0], match.slice(1))\n  );\n}\n\nfunction getJosaCasc(josa: string = \"\") {\n  return JOSA_LIST[josa] ?? josa;\n}\n","import { reverseByArray } from \"./utils\";\n\nconst FIRST_REGEX = /(\\s)?(^[가-힣]{0,3}|[가-힣]{1,3})(\\s*)/;\nconst LAST_REGEX = /([\\.|\\,|\\s])/;\n\nconst formater = [\n  [[\"습니다\"], [\"다\"]],\n  [[\"주세요\"], [\"라\"]],\n  [[\"입니다\"], [\"이다\"]],\n  [[\"합니다\"], [\"하다\"]],\n  [[\"옵니다\"], [\"온다\"]],\n  [[\"됩니다\"], [\"된다\"]],\n  [[\"갑니다\"], [\"간다\"]],\n  [[\"깁니다\"], [\"긴다\"]],\n  [[\"십니다\"], [\"신다\"]],\n  [[\"랍니다\"], [\"란다\"]],\n  [[\"저는\"], [\"나는\"]],\n];\n\nconst makeRegByFormater = (array: any) => {\n  const result: string[] = [];\n\n  array.forEach((caseList: any) => {\n    const case1List = caseList[0].map(\n      (case1: string) =>\n        new RegExp(FIRST_REGEX.source + case1 + LAST_REGEX.source, \"g\")\n    );\n\n    const list = case1List.reduce(\n      (acc2: RegExp[], regex: RegExp) =>\n        acc2.concat(\n          caseList[1].map((case2: string) => [\n            regex,\n            `$1;$2;$3;${case2.split(\"\").join(\";\")};$4`,\n          ])\n        ),\n      []\n    );\n\n    result.push(...list);\n  });\n\n  return result;\n};\n\nconst BANMAL_REGEX_LIST = makeRegByFormater(formater);\nconst HONORIFIC_REGEX_LIST = makeRegByFormater(reverseByArray(formater));\n\nexport function toBanmal(string: string) {\n  return BANMAL_REGEX_LIST.reduce(\n    (acc: string, [$1, $2]: any) => acc.replace($1, $2),\n    string\n  ).replace(/;/g, \"\");\n}\n\nexport function toHonorific(string: string) {\n  return HONORIFIC_REGEX_LIST.reduce(\n    (acc: string, [$1, $2]: any) => acc.replace($1, $2),\n    string\n  ).replace(/;/g, \"\");\n}\n","type SpeechLevel = \"formal\" | \"polite\" | \"informal\" | \"plain\" | \"unknown\";\n\n// [어미, 레벨] 쌍 — 긴 어미부터 정렬하여 가장 구체적인 것이 먼저 매칭\nconst ENDINGS: [string, SpeechLevel][] = [\n  // 합쇼체 (격식 높임) — ㅂ니다/습니다 계열\n  [\"습니까\", \"formal\"],\n  [\"습니다\", \"formal\"],\n  [\"십시오\", \"formal\"],\n  [\"옵소서\", \"formal\"],\n  [\"니까\", \"formal\"],\n  [\"니다\", \"formal\"],\n  // 해요체 (비격식 높임)\n  [\"겠어요\", \"polite\"],\n  [\"거예요\", \"polite\"],\n  [\"이에요\", \"polite\"],\n  [\"세요\", \"polite\"],\n  [\"에요\", \"polite\"],\n  [\"어요\", \"polite\"],\n  [\"아요\", \"polite\"],\n  [\"여요\", \"polite\"],\n  [\"해요\", \"polite\"],\n  [\"워요\", \"polite\"],\n  [\"지요\", \"polite\"],\n  [\"네요\", \"polite\"],\n  [\"데요\", \"polite\"],\n  [\"래요\", \"polite\"],\n  [\"나요\", \"polite\"],\n  [\"가요\", \"polite\"],\n  [\"죠\", \"polite\"],\n  // 해라체 (격식 낮춤) — 긴 것부터\n  [\"리로다\", \"plain\"],\n  [\"겠다\", \"plain\"],\n  [\"었다\", \"plain\"],\n  [\"았다\", \"plain\"],\n  [\"한다\", \"plain\"],\n  [\"는다\", \"plain\"],\n  [\"인다\", \"plain\"],\n  [\"이다\", \"plain\"],\n  [\"더라\", \"plain\"],\n  [\"도다\", \"plain\"],\n  [\"느냐\", \"plain\"],\n  [\"는가\", \"plain\"],\n  [\"리라\", \"plain\"],\n  [\"다\", \"plain\"],\n  // 해체 (비격식 낮춤)\n  [\"잖아\", \"informal\"],\n  [\"는데\", \"informal\"],\n  [\"나봐\", \"informal\"],\n  [\"거든\", \"informal\"],\n  [\"어\", \"informal\"],\n  [\"아\", \"informal\"],\n  [\"여\", \"informal\"],\n  [\"워\", \"informal\"],\n  [\"해\", \"informal\"],\n  [\"래\", \"informal\"],\n  [\"게\", \"informal\"],\n  [\"지\", \"informal\"],\n  [\"냐\", \"informal\"],\n  [\"니\", \"informal\"],\n  [\"야\", \"informal\"],\n  [\"가\", \"informal\"],\n];\n\n// 긴 어미부터 매칭하도록 정렬\nconst SORTED_ENDINGS = [...ENDINGS].sort((a, b) => b[0].length - a[0].length);\n\nfunction cleanSentence(text: string): string {\n  return text.replace(/[.!?~,\\s]+$/, \"\").trim();\n}\n\n/**\n * 문장의 존댓말 레벨을 감지\n * @example detectSpeechLevel(\"감사합니다\") → \"formal\"\n * @example detectSpeechLevel(\"감사해요\") → \"polite\"\n * @example detectSpeechLevel(\"감사해\") → \"informal\"\n * @example detectSpeechLevel(\"감사하다\") → \"plain\"\n */\nexport function detectSpeechLevel(text: string = \"\"): SpeechLevel {\n  const cleaned = cleanSentence(text);\n  if (!cleaned) return \"unknown\";\n\n  for (const [ending, level] of SORTED_ENDINGS) {\n    if (cleaned.endsWith(ending)) return level;\n  }\n\n  return \"unknown\";\n}\n\n/**\n * 문장이 존댓말인지 확인\n * @example isFormal(\"감사합니다\") → true\n * @example isFormal(\"감사해\") → false\n */\nexport function isFormal(text: string = \"\"): boolean {\n  const level = detectSpeechLevel(text);\n  return level === \"formal\" || level === \"polite\";\n}\n\n/**\n * 문장이 반말인지 확인\n * @example isInformal(\"고마워\") → true\n * @example isInformal(\"감사합니다\") → false\n */\nexport function isInformal(text: string = \"\"): boolean {\n  const level = detectSpeechLevel(text);\n  return level === \"informal\" || level === \"plain\";\n}\n","import {\n  CHO_PERIOD,\n  JONG_PERIOD,\n  HANGUL_START_CHARCODE,\n} from \"./constant\";\nimport { isHangulByCode } from \"./isHangul\";\n\ninterface Syllable {\n  cho: number;\n  jung: number;\n  jong: number;\n}\n\nfunction decompose(code: number): Syllable {\n  const charCode = code - HANGUL_START_CHARCODE;\n  return {\n    cho: Math.floor(charCode / CHO_PERIOD),\n    jung: Math.floor((charCode % CHO_PERIOD) / JONG_PERIOD),\n    jong: charCode % JONG_PERIOD,\n  };\n}\n\nfunction compose(s: Syllable): string {\n  return String.fromCharCode(\n    HANGUL_START_CHARCODE + s.cho * CHO_PERIOD + s.jung * JONG_PERIOD + s.jong\n  );\n}\n\n// 종성 index → 초성 index 매핑 (연음용)\nconst JONG_TO_CHO: Record<number, number> = {\n  1: 0,    // ㄱ\n  2: 1,    // ㄲ\n  4: 2,    // ㄴ\n  7: 3,    // ㄷ\n  8: 5,    // ㄹ\n  16: 6,   // ㅁ\n  17: 7,   // ㅂ\n  19: 9,   // ㅅ\n  20: 10,  // ㅆ\n  21: 11,  // ㅇ\n  22: 12,  // ㅈ\n  23: 14,  // ㅊ\n  24: 15,  // ㅋ\n  25: 16,  // ㅌ\n  26: 17,  // ㅍ\n  27: 18,  // ㅎ\n};\n\n// 비음화: 장애음 종성 → 비음 (ㄴ,ㅁ 앞)\nconst NASALIZATION_JONG: Record<number, number> = {\n  1: 21,   // ㄱ → ㅇ\n  2: 21,   // ㄲ → ㅇ\n  24: 21,  // ㅋ → ㅇ\n  7: 4,    // ㄷ → ㄴ\n  19: 4,   // ㅅ → ㄴ\n  20: 4,   // ㅆ → ㄴ\n  22: 4,   // ㅈ → ㄴ\n  23: 4,   // ㅊ → ㄴ\n  25: 4,   // ㅌ → ㄴ\n  17: 16,  // ㅂ → ㅁ\n  26: 16,  // ㅍ → ㅁ\n};\n\n// 경음화 대상 종성\nconst FORTITION_JONG = new Set([1, 2, 24, 3, 9, 7, 19, 20, 22, 23, 25, 17, 26, 11, 18]);\n\n// 경음화: 초성 → 경음\nconst FORTITION_MAP: Record<number, number> = {\n  0: 1,    // ㄱ → ㄲ\n  3: 4,    // ㄷ → ㄸ\n  7: 8,    // ㅂ → ㅃ\n  9: 10,   // ㅅ → ㅆ\n  12: 13,  // ㅈ → ㅉ\n};\n\n// 격음화: 초성 + ㅎ → 격음\nconst H_ASPIRATE: Record<number, number> = {\n  0: 15,   // ㄱ + ㅎ → ㅋ\n  3: 16,   // ㄷ + ㅎ → ㅌ\n  7: 17,   // ㅂ + ㅎ → ㅍ\n  12: 14,  // ㅈ + ㅎ → ㅊ\n};\n\n// 종성 index → 초성 index (격음화 역방향 매핑용)\nconst JONG_TO_CHO_FOR_ASPIRATE: Record<number, number> = {\n  1: 0,    // ㄱ\n  7: 3,    // ㄷ\n  17: 7,   // ㅂ\n  22: 12,  // ㅈ\n};\n\n// 복합 종성 분리\nconst COMPOUND_JONG: Record<number, [number, number]> = {\n  3: [1, 19],    // ㄳ → ㄱ, ㅅ\n  5: [4, 22],    // ㄵ → ㄴ, ㅈ\n  6: [4, 27],    // ㄶ → ㄴ, ㅎ\n  9: [8, 1],     // ㄺ → ㄹ, ㄱ\n  10: [8, 16],   // ㄻ → ㄹ, ㅁ\n  11: [8, 17],   // ㄼ → ㄹ, ㅂ\n  12: [8, 19],   // ㄽ → ㄹ, ㅅ\n  13: [8, 25],   // ㄾ → ㄹ, ㅌ\n  14: [8, 26],   // ㄿ → ㄹ, ㅍ\n  15: [8, 27],   // ㅀ → ㄹ, ㅎ\n  18: [17, 19],  // ㅄ → ㅂ, ㅅ\n};\n\n// 대표음 (7종성법)\nconst REPRESENTATIVE_JONG: Record<number, number> = {\n  2: 1,    // ㄲ → ㄱ\n  24: 1,   // ㅋ → ㄱ\n  19: 7,   // ㅅ → ㄷ\n  20: 7,   // ㅆ → ㄷ\n  22: 7,   // ㅈ → ㄷ\n  23: 7,   // ㅊ → ㄷ\n  25: 7,   // ㅌ → ㄷ\n  27: 7,   // ㅎ → ㄷ\n  26: 17,  // ㅍ → ㅂ\n};\n\n// 비음 초성 (ㄴ=2, ㅁ=6)\nconst NASAL_CHO = new Set([2, 6]);\n\nconst JONG_H = 27;\nconst CHO_H = 18;\nconst L_JONG = 8;\nconst L_CHO = 5;\nconst N_JONG = 4;\nconst N_CHO = 2;\nconst IEUNG_CHO = 11;\n\n/**\n * 한글 발음 변환 (표준 발음법)\n * 연음, 비음화, 경음화, 격음화, 유음화, 구개음화 등 적용\n * @example pronounce(\"먹어\") → \"머거\"\n * @example pronounce(\"국물\") → \"궁물\"\n * @example pronounce(\"학교\") → \"학꾜\"\n * @example pronounce(\"좋아\") → \"조아\"\n * @example pronounce(\"신라\") → \"실라\"\n */\nexport function pronounce(text: string): string {\n  const chars = text.split(\"\");\n  const syllables: (Syllable | null)[] = [];\n  const nonHangul: (string | null)[] = [];\n\n  for (let i = 0; i < chars.length; i++) {\n    const code = chars[i].charCodeAt(0);\n    if (isHangulByCode(code)) {\n      syllables.push({ ...decompose(code) });\n      nonHangul.push(null);\n    } else {\n      syllables.push(null);\n      nonHangul.push(chars[i]);\n    }\n  }\n\n  for (let i = 0; i < syllables.length - 1; i++) {\n    const curr = syllables[i];\n    const next = syllables[i + 1];\n\n    if (!curr || !next) continue;\n    if (curr.jong === 0) continue;\n\n    // 1. 복합 종성 처리\n    if (COMPOUND_JONG[curr.jong]) {\n      const [first, second] = COMPOUND_JONG[curr.jong];\n\n      // 복합종성 + ㅇ초성 → 연음\n      if (next.cho === IEUNG_CHO) {\n        curr.jong = first;\n        next.cho = JONG_TO_CHO[second] ?? next.cho;\n        continue;\n      }\n\n      // 복합종성의 ㅎ + 초성 → 격음화\n      if (second === JONG_H && H_ASPIRATE[next.cho] !== undefined) {\n        curr.jong = first;\n        next.cho = H_ASPIRATE[next.cho];\n        continue;\n      }\n\n      // 종성 + ㅎ초성 → 격음화\n      if (next.cho === CHO_H && JONG_TO_CHO_FOR_ASPIRATE[second] !== undefined) {\n        curr.jong = first;\n        next.cho = H_ASPIRATE[JONG_TO_CHO_FOR_ASPIRATE[second]];\n        continue;\n      }\n    }\n\n    // 2. 연음법칙: 종성 + ㅇ초성\n    if (next.cho === IEUNG_CHO) {\n      // ㅎ종성 + ㅇ → ㅎ탈락\n      if (curr.jong === JONG_H) {\n        curr.jong = 0;\n        continue;\n      }\n      next.cho = JONG_TO_CHO[curr.jong] ?? next.cho;\n      curr.jong = 0;\n      continue;\n    }\n\n    // 3. 격음화: ㅎ종성 + ㄱ,ㄷ,ㅂ,ㅈ → 격음\n    if (curr.jong === JONG_H && H_ASPIRATE[next.cho] !== undefined) {\n      curr.jong = 0;\n      next.cho = H_ASPIRATE[next.cho];\n      continue;\n    }\n\n    // 4. 격음화: 종성 + ㅎ초성\n    if (next.cho === CHO_H && JONG_TO_CHO_FOR_ASPIRATE[curr.jong] !== undefined) {\n      next.cho = H_ASPIRATE[JONG_TO_CHO_FOR_ASPIRATE[curr.jong]];\n      curr.jong = 0;\n      continue;\n    }\n\n    // 5. 구개음화: ㄷ/ㅌ종성 + ㅣ모음 → ㅈ/ㅊ\n    if (next.jung === 20 && next.cho === IEUNG_CHO) { // ㅣ\n      if (curr.jong === 7) { // ㄷ\n        curr.jong = 0;\n        next.cho = 12; // ㅈ\n        continue;\n      }\n      if (curr.jong === 25) { // ㅌ\n        curr.jong = 0;\n        next.cho = 14; // ㅊ\n        continue;\n      }\n    }\n\n    // 6. 비음화: 장애음 + ㄴ,ㅁ\n    if (NASAL_CHO.has(next.cho) && NASALIZATION_JONG[curr.jong] !== undefined) {\n      curr.jong = NASALIZATION_JONG[curr.jong];\n      continue;\n    }\n\n    // 7. 유음화: ㄴ+ㄹ → ㄹ+ㄹ, ㄹ+ㄴ → ㄹ+ㄹ\n    if (curr.jong === N_JONG && next.cho === L_CHO) {\n      curr.jong = L_JONG;\n      continue;\n    }\n    if (curr.jong === L_JONG && next.cho === N_CHO) {\n      next.cho = L_CHO;\n      continue;\n    }\n\n    // 8. 경음화\n    if (FORTITION_JONG.has(curr.jong) && FORTITION_MAP[next.cho] !== undefined) {\n      next.cho = FORTITION_MAP[next.cho];\n      continue;\n    }\n  }\n\n  // 어말 대표음 처리\n  for (let i = 0; i < syllables.length; i++) {\n    const s = syllables[i];\n    if (!s || s.jong === 0) continue;\n\n    const isWordFinal = i === syllables.length - 1 || syllables[i + 1] === null;\n\n    if (isWordFinal) {\n      if (COMPOUND_JONG[s.jong]) {\n        s.jong = COMPOUND_JONG[s.jong][0];\n      }\n      if (REPRESENTATIVE_JONG[s.jong] !== undefined) {\n        s.jong = REPRESENTATIVE_JONG[s.jong];\n      }\n    }\n  }\n\n  const result: string[] = [];\n  for (let i = 0; i < syllables.length; i++) {\n    if (syllables[i]) {\n      result.push(compose(syllables[i]!));\n    } else {\n      result.push(nonHangul[i]!);\n    }\n  }\n\n  return result.join(\"\");\n}\n","import {\n  CHO_PERIOD,\n  JONG_PERIOD,\n  HANGUL_START_CHARCODE,\n} from \"./constant\";\nimport { isHangulByCode } from \"./isHangul\";\n\n// 국립국어원 로마자 표기법 (Revised Romanization of Korean)\n\n// 초성 (어두)\nconst ROMANIZE_CHO = [\n  \"g\", \"kk\", \"n\", \"d\", \"tt\",\n  \"r\", \"m\", \"b\", \"pp\", \"s\",\n  \"ss\", \"\", \"j\", \"jj\", \"ch\",\n  \"k\", \"t\", \"p\", \"h\",\n];\n\n// 초성 (어두 대문자)\nconst ROMANIZE_CHO_INITIAL = [\n  \"G\", \"Kk\", \"N\", \"D\", \"Tt\",\n  \"R\", \"M\", \"B\", \"Pp\", \"S\",\n  \"Ss\", \"\", \"J\", \"Jj\", \"Ch\",\n  \"K\", \"T\", \"P\", \"H\",\n];\n\n// 중성\nconst ROMANIZE_JUNG = [\n  \"a\", \"ae\", \"ya\", \"yae\", \"eo\",\n  \"e\", \"yeo\", \"ye\", \"o\", \"wa\",\n  \"wae\", \"oe\", \"yo\", \"u\", \"wo\",\n  \"we\", \"wi\", \"yu\", \"eu\", \"ui\",\n  \"i\",\n];\n\n// 종성\nconst ROMANIZE_JONG = [\n  \"\", \"k\", \"k\", \"k\", \"n\", \"n\",\n  \"n\", \"t\", \"l\", \"k\", \"m\",\n  \"p\", \"l\", \"l\", \"l\", \"l\",\n  \"m\", \"p\", \"p\", \"t\", \"t\",\n  \"ng\", \"t\", \"t\", \"k\", \"t\",\n  \"p\", \"t\",\n];\n\ninterface RomanizeOptions {\n  capitalize?: boolean;\n  separator?: string;\n}\n\n/**\n * 국립국어원 로마자 표기법에 따른 로마자 변환\n * @example romanize(\"한글\") → \"hangeul\"\n * @example romanize(\"대한민국\") → \"daehanminguk\"\n * @example romanize(\"서울\", { capitalize: true }) → \"Seoul\"\n */\nexport function romanize(text: string, options: RomanizeOptions = {}): string {\n  const { capitalize = false, separator = \"\" } = options;\n  const result: string[] = [];\n  let isWordStart = true;\n\n  for (let i = 0; i < text.length; i++) {\n    const code = text.charCodeAt(i);\n\n    if (!isHangulByCode(code)) {\n      result.push(text[i]);\n      if (text[i] === \" \" || text[i] === \"\\n\" || text[i] === \"\\t\") {\n        isWordStart = true;\n      }\n      continue;\n    }\n\n    const charCode = code - HANGUL_START_CHARCODE;\n    const cho = Math.floor(charCode / CHO_PERIOD);\n    const jung = Math.floor((charCode % CHO_PERIOD) / JONG_PERIOD);\n    const jong = charCode % JONG_PERIOD;\n\n    if (separator && result.length > 0 && result[result.length - 1] !== \" \") {\n      const lastChar = result[result.length - 1];\n      if (lastChar && /[a-zA-Z]/.test(lastChar)) {\n        result.push(separator);\n      }\n    }\n\n    const choStr = capitalize && isWordStart\n      ? ROMANIZE_CHO_INITIAL[cho]\n      : ROMANIZE_CHO[cho];\n\n    result.push(choStr);\n    result.push(ROMANIZE_JUNG[jung]);\n\n    if (jong !== 0) {\n      result.push(ROMANIZE_JONG[jong]);\n    }\n\n    isWordStart = false;\n  }\n\n  return result.join(\"\");\n}\n","import { NORMALIZE_CHO, NORMALIZE_JUNG, NORMALIZE_JONG } from \"./constant\";\nimport { divide } from \"./divide\";\n\ntype recordTypes = { cho: number; jung: number; jong: number };\n\nexport function normalize(text: string, isSpace: boolean = true) {\n  const space = isSpace ? \" \" : \"\";\n  let result = \"\";\n\n  for (let i = 0; i < text.length; i++) {\n    const hangul = divide(text[i], {\n      isSplit: false,\n      resultType: \"index\",\n    }) as recordTypes;\n\n    const char =\n      NORMALIZE_CHO[hangul.cho] +\n      NORMALIZE_JUNG[hangul.jung] +\n      NORMALIZE_JONG[hangul.jong];\n\n    result += char ? char + space : hangul;\n  }\n\n  return result.replace(/\\s{2,}/g, ' ').trim();\n}\n","import { combineHangul } from \"./combine\";\nimport { KEY_MAPS } from \"./constant\";\nimport { divideHangul } from \"./divide\";\nimport { LocalTypes } from \"./types\";\nimport { reverseByObject } from \"./utils\";\n\nconst REVERSE_MAPS: Record<string, string> = reverseByObject(KEY_MAPS);\n\nfunction toKo(english: string = \"\") {\n  const str = english.toString();\n  let result = \"\";\n  for (let i = 0; i < str.length; i++) {\n    result += REVERSE_MAPS[str[i]] || str[i];\n  }\n  return result;\n}\n\nfunction toEn(korean: string = \"\") {\n  const str = korean.toString();\n  let result = \"\";\n  for (let i = 0; i < str.length; i++) {\n    result += KEY_MAPS[str[i]] || str[i];\n  }\n  return result;\n}\n\nexport function convertKey(\n  word: string = \"\",\n  toLanguage: LocalTypes = \"ko\",\n  isCombine: boolean = true\n) {\n  const hangul = (\n    isCombine ? divideHangul(word) : word.toString().split(\"\")\n  ).join(\"\");\n\n  // 한타로 변환\n  if (toLanguage === \"ko\") {\n    return isCombine ? combineHangul(toKo(hangul)) : toKo(hangul);\n  }\n\n  // 영타로 변환\n  if (toLanguage === \"en\") {\n    return toEn(hangul);\n  }\n\n  return word;\n}\n","import {\n  CHO_HANGUL,\n  JUNG_HANGUL,\n  JONG_HANGUL,\n  JUNG_COMPLETE_HANGUL,\n  JONG_COMPLETE_HANGUL,\n  CHO_PERIOD,\n  JONG_PERIOD,\n  HANGUL_START_CHARCODE,\n} from \"./constant\";\nimport { isHangulByCode } from \"./isHangul\";\nimport { combineByCode } from \"./combine\";\n\n/**\n * 타이핑 효과를 위한 한글 분해 (각 자모가 추가되는 중간 과정 생성)\n * @example disassembleForTyping(\"한\") → [\"ㅎ\", \"하\", \"한\"]\n * @example disassembleForTyping(\"한글\") → [\"ㅎ\", \"하\", \"한\", \"한ㄱ\", \"한그\", \"한글\"]\n */\nexport function disassembleForTyping(text: string): string[] {\n  const result: string[] = [];\n  let accumulated = \"\";\n\n  for (let i = 0; i < text.length; i++) {\n    const char = text[i];\n    const code = char.charCodeAt(0);\n\n    if (!isHangulByCode(code)) {\n      accumulated += char;\n      result.push(accumulated);\n      continue;\n    }\n\n    const charCode = code - HANGUL_START_CHARCODE;\n    const choIndex = Math.floor(charCode / CHO_PERIOD);\n    const jungIndex = Math.floor((charCode % CHO_PERIOD) / JONG_PERIOD);\n    const jongIndex = charCode % JONG_PERIOD;\n\n    // Step 1: 초성\n    result.push(accumulated + CHO_HANGUL[choIndex]);\n\n    // Step 2: 복합 중성이면 중간 단계 추가\n    const jungStr = JUNG_HANGUL[jungIndex];\n    const jungCompound = JUNG_COMPLETE_HANGUL[jungStr];\n\n    if (jungCompound) {\n      const firstJung = jungCompound[0];\n      const firstJungIndex = JUNG_HANGUL.indexOf(firstJung);\n      if (firstJungIndex !== -1) {\n        result.push(accumulated + combineByCode(choIndex, firstJungIndex, 0));\n      }\n    }\n\n    // Step 3: 초성 + 중성\n    result.push(accumulated + combineByCode(choIndex, jungIndex, 0));\n\n    // Step 4: 종성\n    if (jongIndex !== 0) {\n      const jongStr = JONG_HANGUL[jongIndex];\n      const jongCompound = JONG_COMPLETE_HANGUL[jongStr];\n\n      if (jongCompound) {\n        const firstJong = jongCompound[0];\n        const firstJongIndex = JONG_HANGUL.indexOf(firstJong);\n        if (firstJongIndex !== -1) {\n          result.push(\n            accumulated + combineByCode(choIndex, jungIndex, firstJongIndex)\n          );\n        }\n      }\n\n      result.push(accumulated + char);\n    }\n\n    accumulated += char;\n  }\n\n  return result;\n}\n","import {\n  CHO_HANGUL,\n  JUNG_HANGUL,\n  JONG_HANGUL,\n  JUNG_COMPLETE_HANGUL,\n  JONG_COMPLETE_HANGUL,\n  CHO_PERIOD,\n  JONG_PERIOD,\n  HANGUL_START_CHARCODE,\n} from \"./constant\";\nimport { isHangulByCode } from \"./isHangul\";\nimport { combineByCode } from \"./combine\";\n\nconst reverseJung: Record<string, string> = {};\nfor (const [k, v] of Object.entries(JUNG_COMPLETE_HANGUL)) {\n  reverseJung[v] = k;\n}\n\nconst reverseJong: Record<string, string> = {};\nfor (const [k, v] of Object.entries(JONG_COMPLETE_HANGUL)) {\n  reverseJong[v] = k;\n}\n\n/**\n * 한글을 자모 단위로 분해하여 배열 반환 (타이핑/슬라이스용)\n * 복합 모음/자음도 분해\n * @example hangulToJamo(\"한\") → [\"ㅎ\", \"ㅏ\", \"ㄴ\"]\n * @example hangulToJamo(\"뷁\") → [\"ㅂ\", \"ㅜ\", \"ㅔ\", \"ㄹ\", \"ㄱ\"]\n */\nexport function hangulToJamo(text: string): string[] {\n  const result: string[] = [];\n\n  for (let i = 0; i < text.length; i++) {\n    const code = text.charCodeAt(i);\n\n    if (!isHangulByCode(code)) {\n      result.push(text[i]);\n      continue;\n    }\n\n    const charCode = code - HANGUL_START_CHARCODE;\n    const choIndex = Math.floor(charCode / CHO_PERIOD);\n    const jungIndex = Math.floor((charCode % CHO_PERIOD) / JONG_PERIOD);\n    const jongIndex = charCode % JONG_PERIOD;\n\n    result.push(CHO_HANGUL[choIndex]);\n\n    const jung = JUNG_HANGUL[jungIndex];\n    const jungSplit = JUNG_COMPLETE_HANGUL[jung];\n    if (jungSplit) {\n      result.push(...jungSplit.split(\"\"));\n    } else {\n      result.push(jung);\n    }\n\n    if (jongIndex !== 0) {\n      const jong = JONG_HANGUL[jongIndex];\n      const jongSplit = JONG_COMPLETE_HANGUL[jong];\n      if (jongSplit) {\n        result.push(...jongSplit.split(\"\"));\n      } else {\n        result.push(jong);\n      }\n    }\n  }\n\n  return result;\n}\n\n/**\n * 자모 단위로 문자열을 슬라이스 (잘린 한글이 부분적으로 보임)\n * @example hangulSlice(\"한글\", 0, 2) → \"하\"  (ㅎ,ㅏ까지만)\n * @example hangulSlice(\"한글\", 0, 3) → \"한\"  (ㅎ,ㅏ,ㄴ까지)\n * @example hangulSlice(\"한글\", 0, 4) → \"한ㄱ\" (ㅎ,ㅏ,ㄴ,ㄱ까지)\n * @example hangulSlice(\"한글\", 0, 5) → \"한그\" (ㅎ,ㅏ,ㄴ,ㄱ,ㅡ까지)\n */\nexport function hangulSlice(text: string, start: number = 0, end?: number): string {\n  const jamos = hangulToJamo(text);\n  const sliced = jamos.slice(start, end);\n\n  // 자모들을 다시 한글로 합치기\n  return assembleJamos(sliced);\n}\n\n/**\n * 자모 배열의 길이 반환 (자모 단위 길이)\n * @example hangulJamoLength(\"한글\") → 6 (ㅎ,ㅏ,ㄴ,ㄱ,ㅡ,ㄹ)\n */\nexport function hangulJamoLength(text: string): number {\n  return hangulToJamo(text).length;\n}\n\nfunction assembleJamos(jamos: string[]): string {\n  let result = \"\";\n  let i = 0;\n\n  while (i < jamos.length) {\n    const char = jamos[i];\n\n    // 초성이 될 수 있는지 확인\n    const choIndex = CHO_HANGUL.indexOf(char);\n    if (choIndex === -1) {\n      result += char;\n      i++;\n      continue;\n    }\n\n    // 다음이 중성인지 확인\n    if (i + 1 >= jamos.length) {\n      result += char;\n      i++;\n      continue;\n    }\n\n    const nextChar = jamos[i + 1];\n    let jungIndex = JUNG_HANGUL.indexOf(nextChar);\n\n    if (jungIndex === -1) {\n      result += char;\n      i++;\n      continue;\n    }\n\n    i += 2;\n\n    // 복합 중성 확인\n    if (i < jamos.length) {\n      const combined = nextChar + jamos[i];\n      if (reverseJung[combined]) {\n        const combJungIndex = JUNG_HANGUL.indexOf(reverseJung[combined]);\n        if (combJungIndex !== -1) {\n          jungIndex = combJungIndex;\n          i++;\n        }\n      }\n    }\n\n    // 종성 확인\n    let jongIndex = 0;\n\n    if (i < jamos.length) {\n      const jongChar = jamos[i];\n      const tempJongIndex = JONG_HANGUL.indexOf(jongChar);\n\n      if (tempJongIndex > 0) {\n        // 다음 글자가 중성이면 이 자음은 다음 글자의 초성\n        if (i + 1 < jamos.length && JUNG_HANGUL.indexOf(jamos[i + 1]) !== -1) {\n          // 종성 없이 마무리\n        } else {\n          jongIndex = tempJongIndex;\n          i++;\n\n          // 복합 종성 확인\n          if (i < jamos.length) {\n            const nextJong = jongChar + jamos[i];\n            if (reverseJong[nextJong]) {\n              const combJongIndex = JONG_HANGUL.indexOf(reverseJong[nextJong]);\n              if (combJongIndex !== -1) {\n                // 복합 종성 뒤에 중성이 오면 두번째 자음은 다음 초성\n                if (i + 1 < jamos.length && JUNG_HANGUL.indexOf(jamos[i + 1]) !== -1) {\n                  // 복합 종성의 첫번째만 종성, 두번째는 다음 초성\n                } else {\n                  jongIndex = combJongIndex;\n                  i++;\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n\n    result += combineByCode(choIndex, jungIndex, jongIndex);\n  }\n\n  return result;\n}\n","import {\n  CHO_HANGUL,\n  JUNG_HANGUL,\n  JONG_HANGUL,\n  CHO_PERIOD,\n  JONG_PERIOD,\n  HANGUL_START_CHARCODE,\n} from \"./constant\";\nimport { isHangulByCode } from \"./isHangul\";\n\ninterface FrequencyResult {\n  cho: Record<string, number>;\n  jung: Record<string, number>;\n  jong: Record<string, number>;\n  total: number;\n}\n\n/**\n * 한글 텍스트의 자모 빈도수 분석\n * @example\n * hangulFrequency(\"안녕하세요\")\n * // { cho: { ㅇ: 2, ㄴ: 1, ㅎ: 1, ㅅ: 1 }, jung: { ... }, jong: { ... }, total: 5 }\n */\nexport function hangulFrequency(text: string): FrequencyResult {\n  const cho: Record<string, number> = {};\n  const jung: Record<string, number> = {};\n  const jong: Record<string, number> = {};\n  let total = 0;\n\n  for (let i = 0; i < text.length; i++) {\n    const code = text.charCodeAt(i);\n    if (!isHangulByCode(code)) continue;\n\n    const charCode = code - HANGUL_START_CHARCODE;\n    const choIndex = Math.floor(charCode / CHO_PERIOD);\n    const jungIndex = Math.floor((charCode % CHO_PERIOD) / JONG_PERIOD);\n    const jongIndex = charCode % JONG_PERIOD;\n\n    const choChar = CHO_HANGUL[choIndex];\n    const jungChar = JUNG_HANGUL[jungIndex];\n    const jongChar = JONG_HANGUL[jongIndex];\n\n    cho[choChar] = (cho[choChar] || 0) + 1;\n    jung[jungChar] = (jung[jungChar] || 0) + 1;\n    if (jongChar) {\n      jong[jongChar] = (jong[jongChar] || 0) + 1;\n    }\n\n    total++;\n  }\n\n  return { cho, jung, jong, total };\n}\n\n/**\n * 텍스트에서 가장 많이 사용된 초성 반환\n * @example mostFrequentChoseong(\"사과 수박 사탕 시금치\") → \"ㅅ\"\n */\nexport function mostFrequentChoseong(text: string): string {\n  const { cho } = hangulFrequency(text);\n  let maxChar = \"\";\n  let maxCount = 0;\n\n  for (const [char, count] of Object.entries(cho)) {\n    if (count > maxCount) {\n      maxCount = count;\n      maxChar = char;\n    }\n  }\n\n  return maxChar;\n}\n","import { divideHangul } from \"./divide\";\nimport { sortByASC } from \"./sortHangul\";\n\nfunction minBy(x1: number, x2: number, x3: number) {\n  return x1 > x2 ? (x2 > x3 ? x3 : x2) : x3 > x1 ? x1 : x3;\n}\n\nconst memo: any = {};\n\n// levenshtein distance\nexport function getDistance(first: string, second: string): number {\n  if (first === second) return 0;\n  if (!first) return second.length;\n  if (!second) return first.length;\n\n  const key = first + '||' + second;\n  if (memo[key]) return memo[key];\n\n  const m = first.length;\n  const n = second.length;\n\n  let prev = new Array(n + 1);\n  let curr = new Array(n + 1);\n\n  for (let j = 0; j <= n; j++) prev[j] = j;\n\n  for (let i = 1; i <= m; i++) {\n    curr[0] = i;\n    for (let j = 1; j <= n; j++) {\n      curr[j] = minBy(\n        prev[j] + 1,\n        curr[j - 1] + 1,\n        prev[j - 1] + (first[i - 1] === second[j - 1] ? 0 : 1)\n      );\n    }\n    const tmp = prev;\n    prev = curr;\n    curr = tmp;\n  }\n\n  memo[key] = prev[n];\n  return prev[n];\n}\n\nexport function correctByDistance(\n  word: string,\n  list: string[],\n  option?: { distance?: number; maxSlice?: number; isSplit?: boolean }\n) {\n  const distance = option?.distance ?? Math.max(word.length / 2, 2);\n  const maxSlice = option?.maxSlice ?? 10;\n  const isSplit = option?.isSplit ?? true;\n\n  const minDist = [];\n\n  const dividedWord = divideHangul(word, true).join(\"\");\n\n  for (let index = 0; index < list.length; index++) {\n    const dist = isSplit\n      ? getDistance(dividedWord, divideHangul(list[index], true).join(\"\"))\n      : getDistance(word, list[index]);\n\n    if (dist <= distance) {\n      minDist.push({ dist, word: list[index] });\n    }\n  }\n\n  return sortByASC(minDist, \"dist\")\n    .slice(0, maxSlice)\n    .map((item) => item.word);\n}\n","import { LocalTypes } from \"./types\";\nimport { makePercentByObject } from \"./utils\";\n\nconst LANGUAGE_REGEXP: Record<LocalTypes, RegExp> = {\n  ko: /^[가-힣|ㄱ-ㅎ|ㅏ-ㅣ|\\s]+$/,\n  en: /^[a-zA-Z|\\s]+$/,\n  number: /^[0-9]+$/,\n  special: /^[\\`\\~\\!\\@\\#\\$\\%\\^\\&\\*\\(\\)\\_\\+\\-\\=\\\\\\|\\{\\}\\[\\]\\;\\:\\'\\\"\\<\\,\\.\\>\\/\\?\\s]+$/,\n  etc: /.*/,\n};\n\nexport function getLocal(word: string = \"\") {\n  if (LANGUAGE_REGEXP[\"special\"].test(word)) {\n    return \"special\";\n  }\n\n  if (LANGUAGE_REGEXP[\"ko\"].test(word)) {\n    return \"ko\";\n  }\n\n  if (LANGUAGE_REGEXP[\"en\"].test(word)) {\n    return \"en\";\n  }\n\n  if (LANGUAGE_REGEXP[\"number\"].test(word)) {\n    return \"number\";\n  }\n\n  return \"etc\";\n}\n\nfunction getLocalByCode(code: number): LocalTypes {\n  if (\n    (code >= 0xAC00 && code <= 0xD7A3) ||\n    (code >= 0x3131 && code <= 0x314E) ||\n    (code >= 0x314F && code <= 0x3163)\n  ) return \"ko\";\n  if ((code >= 65 && code <= 90) || (code >= 97 && code <= 122)) return \"en\";\n  if (code >= 48 && code <= 57) return \"number\";\n  if (\n    code === 32 || code === 9 || code === 10 || code === 13 ||\n    (code >= 33 && code <= 47) || (code >= 58 && code <= 64) ||\n    (code >= 91 && code <= 96) || (code >= 123 && code <= 126)\n  ) return \"special\";\n  return \"etc\";\n}\n\nexport function getLocalByGroups(\n  word: string = \"\",\n  isPercent: boolean = false,\n) {\n  const countObject = {\n    ko: 0,\n    en: 0,\n    number: 0,\n    special: 0,\n    etc: 0,\n  };\n\n  const result: string[] = [];\n\n  for (let index = 0; index < word.length; index++) {\n    const language = getLocalByCode(word.charCodeAt(index));\n\n    if (isPercent) {\n      countObject[language]++;\n    } else {\n      result.push(language);\n    }\n  }\n\n  if (isPercent) {\n    return makePercentByObject(countObject);\n  }\n\n  return result;\n}\n","import { chunkAtEnd } from \"./utils\";\n\nconst a = [\n  escape,\n  (t: string) => chunkAtEnd(chunkAtEnd(t).join(\"\"), 3).join(\"\"),\n  (t: string) => chunkAtEnd(chunkAtEnd(t).join(\"\"), 4).join(\"\"),\n  (t: string) => chunkAtEnd(t).join(\"\"),\n  (t: string) =>\n    t\n      .split(\"\")\n      .map((v, i) => (i % 3 === 0 ? v + w() : v))\n      .join(\"\"),\n  (t: string) =>\n    t.slice(Math.floor(t.length / 2), t.length) +\n    t.slice(0, Math.floor(t.length / 2)),\n];\nconst s = JSON.stringify;\nconst b = btoa;\nconst e = encodeURI;\nconst w = (): any => Math.floor(Math.random() * (a.length));\n\nexport function encode(t: any = \"\", l: number = 0): any {\n  const _t = w();\n\n  const c = l % 3 === 0 ? b(e(s(t))) : a[_t](t);\n\n  return l === 5\n    ? _t + b(e(c))\n    : encode((l % 2 === 1 ? _t : \"\") + c + (l % 2 === 0 ? _t : \"\"), l + 1);\n}\n\nconst n = [\n  unescape,\n  (t: string) => chunkAtEnd(chunkAtEnd(t).join(\"\"), 3).join(\"\"),\n  (t: string) => chunkAtEnd(chunkAtEnd(t).join(\"\"), 4).join(\"\"),\n  (t: string) => chunkAtEnd(t).join(\"\"),\n  (t: string) =>\n    t\n      .split(\"\")\n      .map((v, i) => ((i - 1) % 4 === 0 ? \"\" : v))\n      .join(\"\"),\n  (t: string) =>\n    t.slice(Math.ceil(t.length / 2), t.length) +\n    t.slice(0, Math.ceil(t.length / 2)),\n];\nconst x = atob;\nconst d = decodeURI;\nconst p = JSON.parse;\n\nexport function decode(t: any = \"\", l: number = 5): any {\n  const _t =\n    l % 2 === 1\n      ? [t.slice(1, t.length), t[0]]\n      : [t.slice(0, t.length - 1), t[t.length - 1]];\n\n  const h = l === 5 ? d(x(_t[0])) : _t[0];\n\n  const c = l % 3 === 0 ? p(d(x(h))) : n[_t[1]](h);\n\n  return l === 0 ? c : decode(c, l - 1);\n}\n"]}