kor-lunar 1.5.3 → 1.5.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -514,4 +514,4 @@ exports.SolarTable = SolarTable;
514
514
  exports.default = korLunar;
515
515
  exports.toLunar = toLunar;
516
516
  exports.toSolar = toSolar;
517
- //# sourceMappingURL=kor-lunar.js.map
517
+ //# sourceMappingURL=kor-lunar.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kor-lunar.cjs","sources":["../src/utils.ts","../src/lunar-table.ts","../src/solar-table.ts","../src/kor-lunar.ts","../src/index.ts"],"sourcesContent":["export const toInt = (num: string | number): number => {\n return ~~num;\n};\n","import { toInt } from \"./utils\";\n\n/**\n * 음력 테이블\n *\n * 9b (17-25): 해당 해의 총 음력 일 수 (예: 384)\n *\n * 1b ( 16): 윤달의 크기 (0: 29일, 1: 30일)\n *\n * 4b (12-15): 윤달 위치 (1-12, 윤달이 없으면 0)\n *\n * 12b ( 0-11): 각 월의 크기 (0: 29일, 1: 30일)\n */\nconst LUN_TABLE = [\n /* 0 1 2 3 4 5 6 7 8 9 */\n /*1890*/ 0x3002ab6, 0x2c60daa, 0x3006ee4, 0x2c40ea4, 0x2c40d4a, 0x2fe5555, 0x2c60a97, 0x2c40556, 0x300355d, 0x2c60ad5,\n /*1900*/ 0x3008bd2, 0x2c40752, 0x2c60ea5, 0x2fe5b2a, 0x2c4064b, 0x2c60a9b, 0x3014aa6, 0x2c4056a, 0x2c60b59, 0x3002baa,\n /*1910*/ 0x2c40752, 0x3006da5, 0x2c40b25, 0x2c40a4b, 0x300595b, 0x2c60aad, 0x2c4056a, 0x30025b5, 0x2c60ba9, 0x3007dd2,\n /*1920*/ 0x2c40d92, 0x2c40d25, 0x3005d2d, 0x2c40956, 0x2c402b5, 0x3024add, 0x2c406d4, 0x2c60da9, 0x3002eca, 0x2c40e92,\n /*1930*/ 0x2fe66a6, 0x2c40527, 0x2c60a57, 0x3015956, 0x2c60ada, 0x2c406d4, 0x3013751, 0x2c40749, 0x3017b13, 0x2c40a93,\n /*1940*/ 0x2c4052b, 0x301651b, 0x2c6096d, 0x2c60b6a, 0x3014da4, 0x2c40ba4, 0x2c40b49, 0x3002d4b, 0x2c40a95, 0x3007aab,\n /*1950*/ 0x2c4052d, 0x2c60aad, 0x3015aaa, 0x2c60db2, 0x2c40da4, 0x3013ea1, 0x2c40d4a, 0x3008d95, 0x2c40a96, 0x2c40556,\n /*1960*/ 0x3006575, 0x2c60ad5, 0x2c406d2, 0x3004755, 0x2c60ea5, 0x2c40e4a, 0x2fe364e, 0x2c60a9b, 0x3007ad6, 0x2c4056a,\n /*1970*/ 0x2c60b59, 0x3005bb2, 0x2c40752, 0x2c40725, 0x3004b2b, 0x2c40a4b, 0x30089ab, 0x2c402ad, 0x2c6056b, 0x30165a9,\n /*1980*/ 0x2c60da9, 0x2c40d92, 0x3004d95, 0x2c40d25, 0x300ae4d, 0x2c40a56, 0x2c402b6, 0x3026aed, 0x2c406d4, 0x2c60da9,\n /*1990*/ 0x3005ed2, 0x2c40e92, 0x2c40d26, 0x2fe352e, 0x2c60a57, 0x30089b6, 0x2c60b5a, 0x2c406d4, 0x3005769, 0x2c40749,\n /*2000*/ 0x2c40693, 0x3004a97, 0x2c4052b, 0x2c60a5b, 0x3002aae, 0x2c4036a, 0x3027dd5, 0x2c40ba4, 0x2c40b49, 0x3005d53,\n /*2010*/ 0x2c40a95, 0x2c4052d, 0x301352d, 0x2c60aad, 0x3009baa, 0x2c405d2, 0x2c60da5, 0x3005eaa, 0x2c40d4a, 0x2c40a95,\n /*2020*/ 0x3004a9d, 0x2c40556, 0x2c60ab5, 0x3002ad6, 0x2c406d2, 0x3006765, 0x2c60ea5, 0x2c40e4a, 0x2fe5656, 0x2c60c9b,\n /*2030*/ 0x2c4055a, 0x300356d, 0x2c60b69, 0x300bf52, 0x2c40752, 0x2c40b25, 0x3016b0b, 0x2c40a4b, 0x2c404ab, 0x30052bb,\n /*2040*/ 0x2c6056d, 0x2c60b69, 0x3002daa, 0x2c40d92, 0x3007ea5, 0x2c40d25, 0x2c40a4d, 0x3015a4d, 0x2c402b6, 0x2c605b5,\n /*2050*/ 0x00136d1 /* 11월 18일 까지라 데이터 부족 */,\n];\n\nconst gan = [\"갑\", \"을\", \"병\", \"정\", \"무\", \"기\", \"경\", \"신\", \"임\", \"계\"];\nconst ji = [\"자\", \"축\", \"인\", \"묘\", \"진\", \"사\", \"오\", \"미\", \"신\", \"유\", \"술\", \"해\"];\n\nexport const BASE_YEAR = 1890;\nexport const BASE_MONTH = 1;\nexport const BASE_DAY = 1;\nexport const BASE_VALUE = BASE_YEAR * 10000 + BASE_MONTH * 100 + BASE_DAY;\n\nexport const MAX_YEAR = 2050;\nexport const MAX_MONTH = 11;\nexport const MAX_DAY = 18;\nexport const MAX_VALUE = MAX_YEAR * 10000 + MAX_MONTH * 100 + MAX_DAY;\n\nconst SMALL_MONTH_DAY = 29;\nconst BIG_MONTH_DAY = 30;\n\nconst totalDaysBeforeYear: number[] = [];\n\nconst getYearData = (year: number): number => {\n year = toInt(year);\n return LUN_TABLE[year - BASE_YEAR];\n};\n\n/**\n * 해당 월 (평달)의 일 수를 반환합니다.\n * @param year 1890년 ~ 2050년\n * @param month 1월 ~ 12월\n * @returns 월의 일 수 (29 또는 30)\n */\nexport const getMonthDays = (year: number, month: number): number => {\n month = toInt(month);\n const monthType = (getYearData(year) >> (month - 1)) & 0x1;\n return monthType === 0 ? SMALL_MONTH_DAY : BIG_MONTH_DAY;\n};\n\n/**\n * 해당 연도의 윤달을 반환합니다.\n * @param year 1890년 ~ 2050년\n * @returns 윤달 월 (1월 ~ 12월), 없으면 0\n */\nexport const getLeapMonth = (year: number): number => {\n return (getYearData(year) >> 12) & 0xf;\n};\n\n/**\n * 해당 연도에 윤달이 있는지를 반환합니다.\n * @param year 1890년 ~ 2050년\n * @return 윤달이 있으면 true\n */\nexport const hasLeapMonth = (year: number): boolean => {\n return getLeapMonth(year) !== 0;\n};\n\n/**\n * 해당 월이 윤달인지를 반환합니다.\n * @param year 1890년 ~ 2050년\n * @param month 1월 ~ 12월\n * @returns 윤달이면 true\n */\nexport const isLeapMonth = (year: number, month: number): boolean => {\n month = toInt(month);\n return month === getLeapMonth(year);\n};\n\n/**\n * 해당 월 (윤달)의 일 수를 반환합니다.\n * @param year 1890년 ~ 2050년\n * @param month 1월 ~ 12월\n * @returns 윤달의 일 수 (29 또는 30), 윤달이 아니면 0\n */\nexport const getLeapMonthDays = (year: number, month: number): number => {\n if (!isLeapMonth(year, month)) return 0;\n const monthType = (getYearData(year) >> 16) & 0x1;\n return monthType === 0 ? SMALL_MONTH_DAY : BIG_MONTH_DAY;\n};\n\n/**\n * 해당 연도의 총 일 수를 반환합니다.\n * @param year 1890년 ~ 2050년\n * @return 해당 연도의 총 일 수\n */\nexport const getYearDays = (year: number): number => {\n return (getYearData(year) >> 17) & 0x1ff;\n};\n\n/**\n * 연도별 누적 일 수를 초기에 룩업 테이블로 생성하여\n * O(1)으로 누적 일 수를 가져오게 변환함\n */\ntotalDaysBeforeYear[0] = 0;\nfor (let y = BASE_YEAR + 1; y <= MAX_YEAR; y++) {\n const idx = y - BASE_YEAR;\n totalDaysBeforeYear[idx] = totalDaysBeforeYear[idx - 1] + getYearDays(y - 1);\n}\n\n/**\n * 1890년부터 해당 연도 전까지의 누적 일 수를 반환합니다.\n * @param year 1890년 ~ 2050년\n * @return 해당 연도 전까지의 누적 일 수\n */\nexport const getTotalDaysBeforeYear = (year: number): number => {\n year = toInt(year);\n return totalDaysBeforeYear[year - BASE_YEAR];\n};\n\n/**\n * 해당 연도 내에서 해당 월 (및 윤달 포함) 전까지의 누적 일 수를 반환합니다.\n * @param year 1890년 ~ 2050년\n * @param month 1월 ~ 12월\n * @param isLeapMonth 대상이 윤달이면 true\n * @returns 해당 연도 내, 해당 월 전까지의 누적 일 수\n */\nexport const getTotalDaysBeforeMonth = (year: number, month: number, isLeapMonth: boolean): number => {\n month = toInt(month);\n const leapMonth = getLeapMonth(year);\n let days = 0;\n // 해당 월 전까지 윤달을 포함하여 누적\n for (let m = 1; m < month; m++) {\n days += getMonthDays(year, m);\n if (m === leapMonth) {\n days += getLeapMonthDays(year, m);\n }\n }\n // 대상이 윤달이면, 앞에 있는 평달을 누적\n if (isLeapMonth && leapMonth === month) {\n days += getMonthDays(year, month);\n }\n return days;\n};\n\n/**\n * 1890년부터 해당 연도, 월, 일 (및 윤달 포함) 까지의 누적 일 수를 반환합니다.\n * @param year 1890년 ~ 2050년\n * @param month 1월 ~ 12월\n * @param day 일자\n * @param isLeapMonth 대상이 윤달이면 true\n * @returns 총 누적 일 수\n */\nexport const getTotalDays = (year: number, month: number, day: number, isLeapMonth: boolean): number => {\n day = toInt(day);\n let days = getTotalDaysBeforeYear(year) + getTotalDaysBeforeMonth(year, month, isLeapMonth) + day;\n return days;\n};\n\nexport const getSecha = (year: number): string => {\n year = toInt(year);\n const g = gan[(year + 6) % gan.length];\n const j = ji[(year + 8) % ji.length];\n return g + j;\n};\n\nexport const getWolgeon = (year: number, month: number): string => {\n year = toInt(year);\n month = toInt(month);\n const g = gan[(year * 2 + month + 3) % gan.length];\n const j = ji[(month + 1) % ji.length];\n return g + j;\n};\n\nexport const getIljinByJulianDay = (julianDay: number): string => {\n julianDay = toInt(julianDay);\n const g = gan[(julianDay - 1) % gan.length];\n const j = ji[(julianDay + 1) % ji.length];\n return g + j;\n};\n\nexport const getIljin = (year: number, month: number, day: number, isLeapMonth: boolean): string => {\n const days = getTotalDays(year, month, day, isLeapMonth);\n return getIljinByJulianDay(days - 1);\n};\n\n/**\n * 날짜가 지원하는 범위 내에 있는지를 반환합니다.\n * 날짜의 유효성 (존재 여부)은 검사하지 않습니다.\n * @returns 날짜가 범위 내에 있으면 true\n */\nexport const isDateInRange = (year: number, month: number, day: number): boolean => {\n year = toInt(year);\n month = toInt(month);\n day = toInt(day);\n const value = year * 10000 + month * 100 + day;\n return value >= BASE_VALUE && value <= MAX_VALUE;\n};\n\n/**\n * 실제로 존재하는 유효한 날짜인지를 반환합니다.\n * @returns 유효한 날짜이면 true\n */\nexport const isValidDate = (year: number, month: number, day: number, isLeapMonth: boolean): boolean => {\n year = toInt(year);\n month = toInt(month);\n day = toInt(day);\n if (year < BASE_YEAR || year > MAX_YEAR) return false;\n\n if (year === BASE_YEAR) {\n if (month < BASE_MONTH) return false;\n if (month === BASE_MONTH && day < BASE_DAY) return false;\n }\n\n if (year === MAX_YEAR) {\n if (month > MAX_MONTH) return false;\n if (month === MAX_MONTH && day > MAX_DAY) return false;\n }\n\n if (month < 1 || month > 12) return false;\n if (day < 1) return false;\n\n const endDay = isLeapMonth ? getLeapMonthDays(year, month) : getMonthDays(year, month);\n return day <= endDay;\n};\n\n/**\n * 해당 월의 0-based 연속적인 월 인덱스를 반환합니다.\n * @param year 1890년 ~ 2050년\n * @param month 1월 ~ 12월\n * @param isLeapMonth 대상이 윤달이면 true\n * @returns 윤달이 있는 해는 0 ~ 12 (13개월), 없는 해는 0 ~ 11 (12개월)\n */\nexport const getMonthIndex = (year: number, month: number, isLeapMonth: boolean): number => {\n month = toInt(month);\n let index = month;\n if (hasLeapMonth(year)) {\n const leapMonth = getLeapMonth(year);\n if ((isLeapMonth && month === leapMonth) || month > leapMonth) {\n index++;\n }\n }\n return index - 1;\n};\n\n/**\n * 0-based 연속적인 월 인덱스에 해당하는 월과 윤달 여부를 반환합니다.\n * @param year 1890년 ~ 2050년\n * @param monthIndex 윤달이 있는 해는 0 ~ 12 (13개월), 없는 해는 0 ~ 11 (12개월)\n * @returns month (1~12)와 isLeapMonth 여부\n */\nexport const getMonthFromIndex = (year: number, monthIndex: number): { month: number; isLeapMonth: boolean } => {\n const leapMonth = getLeapMonth(year);\n let isLeapMonth = false;\n let index = monthIndex;\n if (leapMonth > 0) {\n if (index === leapMonth) {\n isLeapMonth = true;\n }\n if (index >= leapMonth) {\n index--;\n }\n }\n return { month: index + 1, isLeapMonth };\n};\n","import { toInt } from \"./utils\";\n\nconst MONTH_DAYS = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n\nconst LEAP_FEBRUARY_DAY = 29;\n\nconst YEAR_DAY = 365;\nconst LEAP_YEAR_DAY = 366;\n\nexport const BASE_YEAR = 1890;\nexport const BASE_MONTH = 1;\nexport const BASE_DAY = 21;\nexport const BASE_VALUE = BASE_YEAR * 10000 + BASE_MONTH * 100 + BASE_DAY;\n\nexport const MAX_YEAR = 2050;\nexport const MAX_MONTH = 12;\nexport const MAX_DAY = 31;\nexport const MAX_VALUE = MAX_YEAR * 10000 + MAX_MONTH * 100 + MAX_DAY;\n\nconst totalDaysBeforeYear: number[] = [];\n\nexport const isLeapYear = (year: number): boolean => {\n year = toInt(year);\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n};\n\nexport const getMonthDays = (year: number, month: number): number => {\n month = toInt(month);\n let day = month === 2 && isLeapYear(year) ? LEAP_FEBRUARY_DAY : MONTH_DAYS[month - 1];\n return day;\n};\n\nexport const getYearDays = (year: number): number => {\n let day = isLeapYear(year) ? LEAP_YEAR_DAY : YEAR_DAY;\n return day;\n};\n\n/**\n * 연도별 누적 일 수를 초기에 룩업 테이블로 생성하여\n * O(1)으로 누적 일 수를 가져오게 변환함\n */\ntotalDaysBeforeYear[0] = 0;\nfor (let y = BASE_YEAR + 1; y <= MAX_YEAR; y++) {\n const idx = y - BASE_YEAR;\n totalDaysBeforeYear[idx] = totalDaysBeforeYear[idx - 1] + getYearDays(y - 1);\n}\n\nexport const getTotalDaysBeforeYear = (year: number): number => {\n year = toInt(year);\n return totalDaysBeforeYear[year - BASE_YEAR];\n};\n\nexport const getTotalDaysBeforeMonth = (year: number, month: number): number => {\n let day = 0;\n for (let m = 1; m < month; m++) {\n day += getMonthDays(year, m);\n }\n return day;\n};\n\nexport const getTotalDays = (year: number, month: number, day: number): number => {\n let days = getTotalDaysBeforeYear(year) + getTotalDaysBeforeMonth(year, month) + day;\n return days;\n};\n\n/**\n * 날짜가 지원하는 범위 내에 있는지를 반환합니다.\n * 날짜의 유효성 (존재 여부)은 검사하지 않습니다.\n * @returns 날짜가 범위 내에 있으면 true\n */\nexport const isDateInRange = (year: number, month: number, day: number): boolean => {\n year = toInt(year);\n month = toInt(month);\n day = toInt(day);\n const value = year * 10000 + month * 100 + day;\n return value >= BASE_VALUE && value <= MAX_VALUE;\n};\n\n/**\n * 실제로 존재하는 유효한 날짜인지를 반환합니다.\n * @returns 유효한 날짜이면 true\n */\nexport const isValidDate = (year: number, month: number, day: number): boolean => {\n year = toInt(year);\n month = toInt(month);\n day = toInt(day);\n if (year < BASE_YEAR || year > MAX_YEAR) return false;\n\n if (year === BASE_YEAR) {\n if (month < BASE_MONTH) return false;\n if (month === BASE_MONTH && day < BASE_DAY) return false;\n }\n\n if (year === MAX_YEAR) {\n if (month > MAX_MONTH) return false;\n if (month === MAX_MONTH && day > MAX_DAY) return false;\n }\n\n if (month < 1 || month > 12) return false;\n if (day < 1) return false;\n\n const endDay = getMonthDays(year, month);\n return day <= endDay;\n};\n","import * as LunarTable from \"./lunar-table\";\nimport * as SolarTable from \"./solar-table\";\nimport { toInt } from \"./utils\";\n\nconst SOLAR_LUNAR_DAY_DIFF = 20;\nconst JULIAN_DAY_DIFF = 2411389;\n\nexport interface LunarDate {\n year: number;\n month: number;\n day: number;\n isLeapMonth: boolean;\n secha: string;\n wolgeon: string;\n iljin: string;\n julianDay: number;\n dayOfWeek: number;\n}\n\nexport interface SolarDate {\n year: number;\n month: number;\n day: number;\n}\n\n/**\n * 양력을 음력으로 변환합니다.\n * 양력 지원 날짜 범위: 1890년 1월 21일 ~ 2050년 12월 31일\n * @param solYear 양력 연도\n * @param solMonth 양력 월\n * @param solDay 양력 일\n * @returns 음력 날짜\n */\nexport const toLunar = (solYear: number, solMonth: number, solDay: number): LunarDate => {\n solYear = toInt(solYear);\n solMonth = toInt(solMonth);\n solDay = toInt(solDay);\n\n if (!SolarTable.isDateInRange(solYear, solMonth, solDay)) {\n throw new RangeError(`지원되지 않는 날짜입니다. 입력한 날짜: ${solYear}-${solMonth}-${solDay}`);\n }\n\n let year = Math.min(solYear, LunarTable.MAX_YEAR);\n let month = solYear > LunarTable.MAX_YEAR ? LunarTable.MAX_MONTH : solMonth;\n let day = 1;\n\n const lunTotalDays = LunarTable.getTotalDays(year, month, day, true);\n const solTotalDays = SolarTable.getTotalDays(solYear, solMonth, solDay);\n\n const diffDays = solTotalDays - SOLAR_LUNAR_DAY_DIFF - lunTotalDays;\n day += diffDays;\n\n let day2 = solTotalDays - SOLAR_LUNAR_DAY_DIFF;\n\n let julianDay = JULIAN_DAY_DIFF + day2 - 1;\n let dayOfWeek = (day2 + 1) % 7;\n\n let isLeapMonth = month === LunarTable.getLeapMonth(year);\n let monthDays;\n\n while (day < 1) {\n if (isLeapMonth) {\n isLeapMonth = false;\n } else {\n month--;\n\n if (month === 0) {\n month = 12;\n year--;\n }\n\n isLeapMonth = month === LunarTable.getLeapMonth(year);\n }\n\n monthDays = isLeapMonth ? LunarTable.getLeapMonthDays(year, month) : LunarTable.getMonthDays(year, month);\n day += monthDays;\n }\n\n return {\n year,\n month,\n day,\n isLeapMonth,\n secha: LunarTable.getSecha(year),\n wolgeon: isLeapMonth ? \"\" : LunarTable.getWolgeon(year, month),\n iljin: LunarTable.getIljinByJulianDay(julianDay),\n julianDay,\n dayOfWeek,\n };\n};\n\n/**\n * 음력을 양력으로 변환합니다.\n * 음력 지원 날짜 범위: 1890년 1월 1일 ~ 2050년 11월 18일\n * @param lunYear 음력 연도\n * @param lunMonth 음력 월\n * @param lunDay 음력 일\n * @param isLeapMonth 음력 윤달 여부, 윤달이면 true\n * @returns 양력 날짜\n */\nexport const toSolar = (lunYear: number, lunMonth: number, lunDay: number, isLeapMonth: boolean): SolarDate => {\n lunYear = toInt(lunYear);\n lunMonth = toInt(lunMonth);\n lunDay = toInt(lunDay);\n\n if (!LunarTable.isDateInRange(lunYear, lunMonth, lunDay)) {\n throw new RangeError(`지원되지 않는 날짜입니다. 입력한 날짜: ${lunYear}-${lunMonth}-${lunDay}`);\n }\n\n const lunTotalDays = LunarTable.getTotalDays(lunYear, lunMonth, lunDay, isLeapMonth);\n const solTotalDays = SolarTable.getTotalDays(lunYear, lunMonth, lunDay);\n\n const diffDays = lunTotalDays - (solTotalDays - SOLAR_LUNAR_DAY_DIFF);\n\n let year = lunYear;\n let month = lunMonth;\n let day = lunDay + diffDays;\n\n let monthDays = SolarTable.getMonthDays(year, month);\n\n while (day > monthDays) {\n day -= monthDays;\n month++;\n\n if (month > 12) {\n month = 1;\n year++;\n }\n\n monthDays = SolarTable.getMonthDays(year, month);\n }\n\n return { year, month, day };\n};\n\nexport { LunarTable, SolarTable };\n\n/** @deprecated `LunarData`는 `LunarTable`로 이름이 변경되었습니다. */\nexport const LunarData = LunarTable;\n/** @deprecated `SolarData`는 `SolarTable`로 이름이 변경되었습니다. */\nexport const SolarData = SolarTable;\n","import { toLunar, toSolar, LunarTable, SolarTable, LunarData, SolarData, LunarDate, SolarDate } from \"./kor-lunar\";\n\nconst korLunar = { toLunar, toSolar, LunarTable, SolarTable, LunarData, SolarData };\nexport default korLunar;\nexport { toLunar, toSolar, LunarTable, SolarTable, LunarData, SolarData, LunarDate, SolarDate };\n"],"names":["BASE_YEAR","BASE_MONTH","BASE_DAY","BASE_VALUE","MAX_YEAR","MAX_MONTH","MAX_DAY","MAX_VALUE","totalDaysBeforeYear","getMonthDays","getYearDays","y","idx","getTotalDaysBeforeYear","getTotalDaysBeforeMonth","getTotalDays","isDateInRange","isValidDate","SolarTable.isDateInRange","LunarTable.MAX_YEAR","LunarTable.MAX_MONTH","LunarTable.getTotalDays","SolarTable.getTotalDays","LunarTable.getLeapMonth","LunarTable.getLeapMonthDays","LunarTable.getMonthDays","LunarTable.getSecha","LunarTable.getWolgeon","LunarTable.getIljinByJulianDay","LunarTable.isDateInRange","SolarTable.getMonthDays"],"mappings":"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"}
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "kor-lunar",
3
- "version": "1.5.3",
3
+ "version": "1.5.4",
4
4
  "type": "module",
5
5
  "description": "한국 음력 변환 유틸 / Korean lunar calendar converter",
6
- "main": "dist/kor-lunar.js",
6
+ "main": "dist/kor-lunar.cjs",
7
7
  "module": "dist/kor-lunar.esm.js",
8
8
  "browser": "dist/kor-lunar.min.js",
9
9
  "types": "dist/kor-lunar.d.ts",
@@ -15,10 +15,10 @@
15
15
  },
16
16
  "require": {
17
17
  "types": "./dist/kor-lunar.d.cts",
18
- "default": "./dist/kor-lunar.js"
18
+ "default": "./dist/kor-lunar.cjs"
19
19
  },
20
20
  "types": "./dist/kor-lunar.d.ts",
21
- "default": "./dist/kor-lunar.js"
21
+ "default": "./dist/kor-lunar.cjs"
22
22
  }
23
23
  },
24
24
  "files": [
@@ -1 +0,0 @@
1
- {"version":3,"file":"kor-lunar.js","sources":["../src/utils.ts","../src/lunar-table.ts","../src/solar-table.ts","../src/kor-lunar.ts","../src/index.ts"],"sourcesContent":["export const toInt = (num: string | number): number => {\n return ~~num;\n};\n","import { toInt } from \"./utils\";\n\n/**\n * 음력 테이블\n *\n * 9b (17-25): 해당 해의 총 음력 일 수 (예: 384)\n *\n * 1b ( 16): 윤달의 크기 (0: 29일, 1: 30일)\n *\n * 4b (12-15): 윤달 위치 (1-12, 윤달이 없으면 0)\n *\n * 12b ( 0-11): 각 월의 크기 (0: 29일, 1: 30일)\n */\nconst LUN_TABLE = [\n /* 0 1 2 3 4 5 6 7 8 9 */\n /*1890*/ 0x3002ab6, 0x2c60daa, 0x3006ee4, 0x2c40ea4, 0x2c40d4a, 0x2fe5555, 0x2c60a97, 0x2c40556, 0x300355d, 0x2c60ad5,\n /*1900*/ 0x3008bd2, 0x2c40752, 0x2c60ea5, 0x2fe5b2a, 0x2c4064b, 0x2c60a9b, 0x3014aa6, 0x2c4056a, 0x2c60b59, 0x3002baa,\n /*1910*/ 0x2c40752, 0x3006da5, 0x2c40b25, 0x2c40a4b, 0x300595b, 0x2c60aad, 0x2c4056a, 0x30025b5, 0x2c60ba9, 0x3007dd2,\n /*1920*/ 0x2c40d92, 0x2c40d25, 0x3005d2d, 0x2c40956, 0x2c402b5, 0x3024add, 0x2c406d4, 0x2c60da9, 0x3002eca, 0x2c40e92,\n /*1930*/ 0x2fe66a6, 0x2c40527, 0x2c60a57, 0x3015956, 0x2c60ada, 0x2c406d4, 0x3013751, 0x2c40749, 0x3017b13, 0x2c40a93,\n /*1940*/ 0x2c4052b, 0x301651b, 0x2c6096d, 0x2c60b6a, 0x3014da4, 0x2c40ba4, 0x2c40b49, 0x3002d4b, 0x2c40a95, 0x3007aab,\n /*1950*/ 0x2c4052d, 0x2c60aad, 0x3015aaa, 0x2c60db2, 0x2c40da4, 0x3013ea1, 0x2c40d4a, 0x3008d95, 0x2c40a96, 0x2c40556,\n /*1960*/ 0x3006575, 0x2c60ad5, 0x2c406d2, 0x3004755, 0x2c60ea5, 0x2c40e4a, 0x2fe364e, 0x2c60a9b, 0x3007ad6, 0x2c4056a,\n /*1970*/ 0x2c60b59, 0x3005bb2, 0x2c40752, 0x2c40725, 0x3004b2b, 0x2c40a4b, 0x30089ab, 0x2c402ad, 0x2c6056b, 0x30165a9,\n /*1980*/ 0x2c60da9, 0x2c40d92, 0x3004d95, 0x2c40d25, 0x300ae4d, 0x2c40a56, 0x2c402b6, 0x3026aed, 0x2c406d4, 0x2c60da9,\n /*1990*/ 0x3005ed2, 0x2c40e92, 0x2c40d26, 0x2fe352e, 0x2c60a57, 0x30089b6, 0x2c60b5a, 0x2c406d4, 0x3005769, 0x2c40749,\n /*2000*/ 0x2c40693, 0x3004a97, 0x2c4052b, 0x2c60a5b, 0x3002aae, 0x2c4036a, 0x3027dd5, 0x2c40ba4, 0x2c40b49, 0x3005d53,\n /*2010*/ 0x2c40a95, 0x2c4052d, 0x301352d, 0x2c60aad, 0x3009baa, 0x2c405d2, 0x2c60da5, 0x3005eaa, 0x2c40d4a, 0x2c40a95,\n /*2020*/ 0x3004a9d, 0x2c40556, 0x2c60ab5, 0x3002ad6, 0x2c406d2, 0x3006765, 0x2c60ea5, 0x2c40e4a, 0x2fe5656, 0x2c60c9b,\n /*2030*/ 0x2c4055a, 0x300356d, 0x2c60b69, 0x300bf52, 0x2c40752, 0x2c40b25, 0x3016b0b, 0x2c40a4b, 0x2c404ab, 0x30052bb,\n /*2040*/ 0x2c6056d, 0x2c60b69, 0x3002daa, 0x2c40d92, 0x3007ea5, 0x2c40d25, 0x2c40a4d, 0x3015a4d, 0x2c402b6, 0x2c605b5,\n /*2050*/ 0x00136d1 /* 11월 18일 까지라 데이터 부족 */,\n];\n\nconst gan = [\"갑\", \"을\", \"병\", \"정\", \"무\", \"기\", \"경\", \"신\", \"임\", \"계\"];\nconst ji = [\"자\", \"축\", \"인\", \"묘\", \"진\", \"사\", \"오\", \"미\", \"신\", \"유\", \"술\", \"해\"];\n\nexport const BASE_YEAR = 1890;\nexport const BASE_MONTH = 1;\nexport const BASE_DAY = 1;\nexport const BASE_VALUE = BASE_YEAR * 10000 + BASE_MONTH * 100 + BASE_DAY;\n\nexport const MAX_YEAR = 2050;\nexport const MAX_MONTH = 11;\nexport const MAX_DAY = 18;\nexport const MAX_VALUE = MAX_YEAR * 10000 + MAX_MONTH * 100 + MAX_DAY;\n\nconst SMALL_MONTH_DAY = 29;\nconst BIG_MONTH_DAY = 30;\n\nconst totalDaysBeforeYear: number[] = [];\n\nconst getYearData = (year: number): number => {\n year = toInt(year);\n return LUN_TABLE[year - BASE_YEAR];\n};\n\n/**\n * 해당 월 (평달)의 일 수를 반환합니다.\n * @param year 1890년 ~ 2050년\n * @param month 1월 ~ 12월\n * @returns 월의 일 수 (29 또는 30)\n */\nexport const getMonthDays = (year: number, month: number): number => {\n month = toInt(month);\n const monthType = (getYearData(year) >> (month - 1)) & 0x1;\n return monthType === 0 ? SMALL_MONTH_DAY : BIG_MONTH_DAY;\n};\n\n/**\n * 해당 연도의 윤달을 반환합니다.\n * @param year 1890년 ~ 2050년\n * @returns 윤달 월 (1월 ~ 12월), 없으면 0\n */\nexport const getLeapMonth = (year: number): number => {\n return (getYearData(year) >> 12) & 0xf;\n};\n\n/**\n * 해당 연도에 윤달이 있는지를 반환합니다.\n * @param year 1890년 ~ 2050년\n * @return 윤달이 있으면 true\n */\nexport const hasLeapMonth = (year: number): boolean => {\n return getLeapMonth(year) !== 0;\n};\n\n/**\n * 해당 월이 윤달인지를 반환합니다.\n * @param year 1890년 ~ 2050년\n * @param month 1월 ~ 12월\n * @returns 윤달이면 true\n */\nexport const isLeapMonth = (year: number, month: number): boolean => {\n month = toInt(month);\n return month === getLeapMonth(year);\n};\n\n/**\n * 해당 월 (윤달)의 일 수를 반환합니다.\n * @param year 1890년 ~ 2050년\n * @param month 1월 ~ 12월\n * @returns 윤달의 일 수 (29 또는 30), 윤달이 아니면 0\n */\nexport const getLeapMonthDays = (year: number, month: number): number => {\n if (!isLeapMonth(year, month)) return 0;\n const monthType = (getYearData(year) >> 16) & 0x1;\n return monthType === 0 ? SMALL_MONTH_DAY : BIG_MONTH_DAY;\n};\n\n/**\n * 해당 연도의 총 일 수를 반환합니다.\n * @param year 1890년 ~ 2050년\n * @return 해당 연도의 총 일 수\n */\nexport const getYearDays = (year: number): number => {\n return (getYearData(year) >> 17) & 0x1ff;\n};\n\n/**\n * 연도별 누적 일 수를 초기에 룩업 테이블로 생성하여\n * O(1)으로 누적 일 수를 가져오게 변환함\n */\ntotalDaysBeforeYear[0] = 0;\nfor (let y = BASE_YEAR + 1; y <= MAX_YEAR; y++) {\n const idx = y - BASE_YEAR;\n totalDaysBeforeYear[idx] = totalDaysBeforeYear[idx - 1] + getYearDays(y - 1);\n}\n\n/**\n * 1890년부터 해당 연도 전까지의 누적 일 수를 반환합니다.\n * @param year 1890년 ~ 2050년\n * @return 해당 연도 전까지의 누적 일 수\n */\nexport const getTotalDaysBeforeYear = (year: number): number => {\n year = toInt(year);\n return totalDaysBeforeYear[year - BASE_YEAR];\n};\n\n/**\n * 해당 연도 내에서 해당 월 (및 윤달 포함) 전까지의 누적 일 수를 반환합니다.\n * @param year 1890년 ~ 2050년\n * @param month 1월 ~ 12월\n * @param isLeapMonth 대상이 윤달이면 true\n * @returns 해당 연도 내, 해당 월 전까지의 누적 일 수\n */\nexport const getTotalDaysBeforeMonth = (year: number, month: number, isLeapMonth: boolean): number => {\n month = toInt(month);\n const leapMonth = getLeapMonth(year);\n let days = 0;\n // 해당 월 전까지 윤달을 포함하여 누적\n for (let m = 1; m < month; m++) {\n days += getMonthDays(year, m);\n if (m === leapMonth) {\n days += getLeapMonthDays(year, m);\n }\n }\n // 대상이 윤달이면, 앞에 있는 평달을 누적\n if (isLeapMonth && leapMonth === month) {\n days += getMonthDays(year, month);\n }\n return days;\n};\n\n/**\n * 1890년부터 해당 연도, 월, 일 (및 윤달 포함) 까지의 누적 일 수를 반환합니다.\n * @param year 1890년 ~ 2050년\n * @param month 1월 ~ 12월\n * @param day 일자\n * @param isLeapMonth 대상이 윤달이면 true\n * @returns 총 누적 일 수\n */\nexport const getTotalDays = (year: number, month: number, day: number, isLeapMonth: boolean): number => {\n day = toInt(day);\n let days = getTotalDaysBeforeYear(year) + getTotalDaysBeforeMonth(year, month, isLeapMonth) + day;\n return days;\n};\n\nexport const getSecha = (year: number): string => {\n year = toInt(year);\n const g = gan[(year + 6) % gan.length];\n const j = ji[(year + 8) % ji.length];\n return g + j;\n};\n\nexport const getWolgeon = (year: number, month: number): string => {\n year = toInt(year);\n month = toInt(month);\n const g = gan[(year * 2 + month + 3) % gan.length];\n const j = ji[(month + 1) % ji.length];\n return g + j;\n};\n\nexport const getIljinByJulianDay = (julianDay: number): string => {\n julianDay = toInt(julianDay);\n const g = gan[(julianDay - 1) % gan.length];\n const j = ji[(julianDay + 1) % ji.length];\n return g + j;\n};\n\nexport const getIljin = (year: number, month: number, day: number, isLeapMonth: boolean): string => {\n const days = getTotalDays(year, month, day, isLeapMonth);\n return getIljinByJulianDay(days - 1);\n};\n\n/**\n * 날짜가 지원하는 범위 내에 있는지를 반환합니다.\n * 날짜의 유효성 (존재 여부)은 검사하지 않습니다.\n * @returns 날짜가 범위 내에 있으면 true\n */\nexport const isDateInRange = (year: number, month: number, day: number): boolean => {\n year = toInt(year);\n month = toInt(month);\n day = toInt(day);\n const value = year * 10000 + month * 100 + day;\n return value >= BASE_VALUE && value <= MAX_VALUE;\n};\n\n/**\n * 실제로 존재하는 유효한 날짜인지를 반환합니다.\n * @returns 유효한 날짜이면 true\n */\nexport const isValidDate = (year: number, month: number, day: number, isLeapMonth: boolean): boolean => {\n year = toInt(year);\n month = toInt(month);\n day = toInt(day);\n if (year < BASE_YEAR || year > MAX_YEAR) return false;\n\n if (year === BASE_YEAR) {\n if (month < BASE_MONTH) return false;\n if (month === BASE_MONTH && day < BASE_DAY) return false;\n }\n\n if (year === MAX_YEAR) {\n if (month > MAX_MONTH) return false;\n if (month === MAX_MONTH && day > MAX_DAY) return false;\n }\n\n if (month < 1 || month > 12) return false;\n if (day < 1) return false;\n\n const endDay = isLeapMonth ? getLeapMonthDays(year, month) : getMonthDays(year, month);\n return day <= endDay;\n};\n\n/**\n * 해당 월의 0-based 연속적인 월 인덱스를 반환합니다.\n * @param year 1890년 ~ 2050년\n * @param month 1월 ~ 12월\n * @param isLeapMonth 대상이 윤달이면 true\n * @returns 윤달이 있는 해는 0 ~ 12 (13개월), 없는 해는 0 ~ 11 (12개월)\n */\nexport const getMonthIndex = (year: number, month: number, isLeapMonth: boolean): number => {\n month = toInt(month);\n let index = month;\n if (hasLeapMonth(year)) {\n const leapMonth = getLeapMonth(year);\n if ((isLeapMonth && month === leapMonth) || month > leapMonth) {\n index++;\n }\n }\n return index - 1;\n};\n\n/**\n * 0-based 연속적인 월 인덱스에 해당하는 월과 윤달 여부를 반환합니다.\n * @param year 1890년 ~ 2050년\n * @param monthIndex 윤달이 있는 해는 0 ~ 12 (13개월), 없는 해는 0 ~ 11 (12개월)\n * @returns month (1~12)와 isLeapMonth 여부\n */\nexport const getMonthFromIndex = (year: number, monthIndex: number): { month: number; isLeapMonth: boolean } => {\n const leapMonth = getLeapMonth(year);\n let isLeapMonth = false;\n let index = monthIndex;\n if (leapMonth > 0) {\n if (index === leapMonth) {\n isLeapMonth = true;\n }\n if (index >= leapMonth) {\n index--;\n }\n }\n return { month: index + 1, isLeapMonth };\n};\n","import { toInt } from \"./utils\";\n\nconst MONTH_DAYS = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n\nconst LEAP_FEBRUARY_DAY = 29;\n\nconst YEAR_DAY = 365;\nconst LEAP_YEAR_DAY = 366;\n\nexport const BASE_YEAR = 1890;\nexport const BASE_MONTH = 1;\nexport const BASE_DAY = 21;\nexport const BASE_VALUE = BASE_YEAR * 10000 + BASE_MONTH * 100 + BASE_DAY;\n\nexport const MAX_YEAR = 2050;\nexport const MAX_MONTH = 12;\nexport const MAX_DAY = 31;\nexport const MAX_VALUE = MAX_YEAR * 10000 + MAX_MONTH * 100 + MAX_DAY;\n\nconst totalDaysBeforeYear: number[] = [];\n\nexport const isLeapYear = (year: number): boolean => {\n year = toInt(year);\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n};\n\nexport const getMonthDays = (year: number, month: number): number => {\n month = toInt(month);\n let day = month === 2 && isLeapYear(year) ? LEAP_FEBRUARY_DAY : MONTH_DAYS[month - 1];\n return day;\n};\n\nexport const getYearDays = (year: number): number => {\n let day = isLeapYear(year) ? LEAP_YEAR_DAY : YEAR_DAY;\n return day;\n};\n\n/**\n * 연도별 누적 일 수를 초기에 룩업 테이블로 생성하여\n * O(1)으로 누적 일 수를 가져오게 변환함\n */\ntotalDaysBeforeYear[0] = 0;\nfor (let y = BASE_YEAR + 1; y <= MAX_YEAR; y++) {\n const idx = y - BASE_YEAR;\n totalDaysBeforeYear[idx] = totalDaysBeforeYear[idx - 1] + getYearDays(y - 1);\n}\n\nexport const getTotalDaysBeforeYear = (year: number): number => {\n year = toInt(year);\n return totalDaysBeforeYear[year - BASE_YEAR];\n};\n\nexport const getTotalDaysBeforeMonth = (year: number, month: number): number => {\n let day = 0;\n for (let m = 1; m < month; m++) {\n day += getMonthDays(year, m);\n }\n return day;\n};\n\nexport const getTotalDays = (year: number, month: number, day: number): number => {\n let days = getTotalDaysBeforeYear(year) + getTotalDaysBeforeMonth(year, month) + day;\n return days;\n};\n\n/**\n * 날짜가 지원하는 범위 내에 있는지를 반환합니다.\n * 날짜의 유효성 (존재 여부)은 검사하지 않습니다.\n * @returns 날짜가 범위 내에 있으면 true\n */\nexport const isDateInRange = (year: number, month: number, day: number): boolean => {\n year = toInt(year);\n month = toInt(month);\n day = toInt(day);\n const value = year * 10000 + month * 100 + day;\n return value >= BASE_VALUE && value <= MAX_VALUE;\n};\n\n/**\n * 실제로 존재하는 유효한 날짜인지를 반환합니다.\n * @returns 유효한 날짜이면 true\n */\nexport const isValidDate = (year: number, month: number, day: number): boolean => {\n year = toInt(year);\n month = toInt(month);\n day = toInt(day);\n if (year < BASE_YEAR || year > MAX_YEAR) return false;\n\n if (year === BASE_YEAR) {\n if (month < BASE_MONTH) return false;\n if (month === BASE_MONTH && day < BASE_DAY) return false;\n }\n\n if (year === MAX_YEAR) {\n if (month > MAX_MONTH) return false;\n if (month === MAX_MONTH && day > MAX_DAY) return false;\n }\n\n if (month < 1 || month > 12) return false;\n if (day < 1) return false;\n\n const endDay = getMonthDays(year, month);\n return day <= endDay;\n};\n","import * as LunarTable from \"./lunar-table\";\nimport * as SolarTable from \"./solar-table\";\nimport { toInt } from \"./utils\";\n\nconst SOLAR_LUNAR_DAY_DIFF = 20;\nconst JULIAN_DAY_DIFF = 2411389;\n\nexport interface LunarDate {\n year: number;\n month: number;\n day: number;\n isLeapMonth: boolean;\n secha: string;\n wolgeon: string;\n iljin: string;\n julianDay: number;\n dayOfWeek: number;\n}\n\nexport interface SolarDate {\n year: number;\n month: number;\n day: number;\n}\n\n/**\n * 양력을 음력으로 변환합니다.\n * 양력 지원 날짜 범위: 1890년 1월 21일 ~ 2050년 12월 31일\n * @param solYear 양력 연도\n * @param solMonth 양력 월\n * @param solDay 양력 일\n * @returns 음력 날짜\n */\nexport const toLunar = (solYear: number, solMonth: number, solDay: number): LunarDate => {\n solYear = toInt(solYear);\n solMonth = toInt(solMonth);\n solDay = toInt(solDay);\n\n if (!SolarTable.isDateInRange(solYear, solMonth, solDay)) {\n throw new RangeError(`지원되지 않는 날짜입니다. 입력한 날짜: ${solYear}-${solMonth}-${solDay}`);\n }\n\n let year = Math.min(solYear, LunarTable.MAX_YEAR);\n let month = solYear > LunarTable.MAX_YEAR ? LunarTable.MAX_MONTH : solMonth;\n let day = 1;\n\n const lunTotalDays = LunarTable.getTotalDays(year, month, day, true);\n const solTotalDays = SolarTable.getTotalDays(solYear, solMonth, solDay);\n\n const diffDays = solTotalDays - SOLAR_LUNAR_DAY_DIFF - lunTotalDays;\n day += diffDays;\n\n let day2 = solTotalDays - SOLAR_LUNAR_DAY_DIFF;\n\n let julianDay = JULIAN_DAY_DIFF + day2 - 1;\n let dayOfWeek = (day2 + 1) % 7;\n\n let isLeapMonth = month === LunarTable.getLeapMonth(year);\n let monthDays;\n\n while (day < 1) {\n if (isLeapMonth) {\n isLeapMonth = false;\n } else {\n month--;\n\n if (month === 0) {\n month = 12;\n year--;\n }\n\n isLeapMonth = month === LunarTable.getLeapMonth(year);\n }\n\n monthDays = isLeapMonth ? LunarTable.getLeapMonthDays(year, month) : LunarTable.getMonthDays(year, month);\n day += monthDays;\n }\n\n return {\n year,\n month,\n day,\n isLeapMonth,\n secha: LunarTable.getSecha(year),\n wolgeon: isLeapMonth ? \"\" : LunarTable.getWolgeon(year, month),\n iljin: LunarTable.getIljinByJulianDay(julianDay),\n julianDay,\n dayOfWeek,\n };\n};\n\n/**\n * 음력을 양력으로 변환합니다.\n * 음력 지원 날짜 범위: 1890년 1월 1일 ~ 2050년 11월 18일\n * @param lunYear 음력 연도\n * @param lunMonth 음력 월\n * @param lunDay 음력 일\n * @param isLeapMonth 음력 윤달 여부, 윤달이면 true\n * @returns 양력 날짜\n */\nexport const toSolar = (lunYear: number, lunMonth: number, lunDay: number, isLeapMonth: boolean): SolarDate => {\n lunYear = toInt(lunYear);\n lunMonth = toInt(lunMonth);\n lunDay = toInt(lunDay);\n\n if (!LunarTable.isDateInRange(lunYear, lunMonth, lunDay)) {\n throw new RangeError(`지원되지 않는 날짜입니다. 입력한 날짜: ${lunYear}-${lunMonth}-${lunDay}`);\n }\n\n const lunTotalDays = LunarTable.getTotalDays(lunYear, lunMonth, lunDay, isLeapMonth);\n const solTotalDays = SolarTable.getTotalDays(lunYear, lunMonth, lunDay);\n\n const diffDays = lunTotalDays - (solTotalDays - SOLAR_LUNAR_DAY_DIFF);\n\n let year = lunYear;\n let month = lunMonth;\n let day = lunDay + diffDays;\n\n let monthDays = SolarTable.getMonthDays(year, month);\n\n while (day > monthDays) {\n day -= monthDays;\n month++;\n\n if (month > 12) {\n month = 1;\n year++;\n }\n\n monthDays = SolarTable.getMonthDays(year, month);\n }\n\n return { year, month, day };\n};\n\nexport { LunarTable, SolarTable };\n\n/** @deprecated `LunarData`는 `LunarTable`로 이름이 변경되었습니다. */\nexport const LunarData = LunarTable;\n/** @deprecated `SolarData`는 `SolarTable`로 이름이 변경되었습니다. */\nexport const SolarData = SolarTable;\n","import { toLunar, toSolar, LunarTable, SolarTable, LunarData, SolarData, LunarDate, SolarDate } from \"./kor-lunar\";\n\nconst korLunar = { toLunar, toSolar, LunarTable, SolarTable, LunarData, SolarData };\nexport default korLunar;\nexport { toLunar, toSolar, LunarTable, SolarTable, LunarData, SolarData, LunarDate, SolarDate };\n"],"names":["BASE_YEAR","BASE_MONTH","BASE_DAY","BASE_VALUE","MAX_YEAR","MAX_MONTH","MAX_DAY","MAX_VALUE","totalDaysBeforeYear","getMonthDays","getYearDays","y","idx","getTotalDaysBeforeYear","getTotalDaysBeforeMonth","getTotalDays","isDateInRange","isValidDate","SolarTable.isDateInRange","LunarTable.MAX_YEAR","LunarTable.MAX_MONTH","LunarTable.getTotalDays","SolarTable.getTotalDays","LunarTable.getLeapMonth","LunarTable.getLeapMonthDays","LunarTable.getMonthDays","LunarTable.getSecha","LunarTable.getWolgeon","LunarTable.getIljinByJulianDay","LunarTable.isDateInRange","SolarTable.getMonthDays"],"mappings":"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"}