kor-lunar 1.5.0 → 1.5.2

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.
package/README.md CHANGED
@@ -35,7 +35,7 @@ npm install kor-lunar
35
35
  ### 브라우저 CDN
36
36
 
37
37
  ```html
38
- <script src="https://cdn.jsdelivr.net/npm/kor-lunar@1.4/dist/kor-lunar.min.js"></script>
38
+ <script src="https://cdn.jsdelivr.net/npm/kor-lunar@1.5/dist/kor-lunar.min.js"></script>
39
39
  ```
40
40
 
41
41
  CDN 사용 시 전역 변수 `korLunar`로 접근할 수 있습니다.
@@ -1,7 +1,5 @@
1
1
  var toInt = function (num) {
2
- if (typeof num === "string" || typeof num === "number")
3
- return ~~num;
4
- return num;
2
+ return ~~num;
5
3
  };
6
4
 
7
5
  /**
@@ -47,7 +45,7 @@ var MAX_DAY$1 = 18;
47
45
  var MAX_VALUE$1 = MAX_YEAR$1 * 10000 + MAX_MONTH$1 * 100 + MAX_DAY$1;
48
46
  var SMALL_MONTH_DAY = 29;
49
47
  var BIG_MONTH_DAY = 30;
50
- var totalDaysBeforeYear$1 = {};
48
+ var totalDaysBeforeYear$1 = [];
51
49
  var getYearData = function (year) {
52
50
  year = toInt(year);
53
51
  return LUN_TABLE[year - BASE_YEAR$1];
@@ -113,9 +111,10 @@ var getYearDays$1 = function (year) {
113
111
  * 연도별 누적 일 수를 초기에 룩업 테이블로 생성하여
114
112
  * O(1)으로 누적 일 수를 가져오게 변환함
115
113
  */
116
- totalDaysBeforeYear$1[BASE_YEAR$1] = 0;
114
+ totalDaysBeforeYear$1[0] = 0;
117
115
  for (var y$1 = BASE_YEAR$1 + 1; y$1 <= MAX_YEAR$1; y$1++) {
118
- totalDaysBeforeYear$1[y$1] = totalDaysBeforeYear$1[y$1 - 1] + getYearDays$1(y$1 - 1);
116
+ var idx$1 = y$1 - BASE_YEAR$1;
117
+ totalDaysBeforeYear$1[idx$1] = totalDaysBeforeYear$1[idx$1 - 1] + getYearDays$1(y$1 - 1);
119
118
  }
120
119
  /**
121
120
  * 1890년부터 해당 연도 전까지의 누적 일 수를 반환합니다.
@@ -124,8 +123,7 @@ for (var y$1 = BASE_YEAR$1 + 1; y$1 <= MAX_YEAR$1; y$1++) {
124
123
  */
125
124
  var getTotalDaysBeforeYear$1 = function (year) {
126
125
  year = toInt(year);
127
- var days = totalDaysBeforeYear$1[year];
128
- return days;
126
+ return totalDaysBeforeYear$1[year - BASE_YEAR$1];
129
127
  };
130
128
  /**
131
129
  * 해당 연도 내에서 해당 월 (및 윤달 포함) 전까지의 누적 일 수를 반환합니다.
@@ -136,16 +134,16 @@ var getTotalDaysBeforeYear$1 = function (year) {
136
134
  */
137
135
  var getTotalDaysBeforeMonth$1 = function (year, month, isLeapMonth) {
138
136
  month = toInt(month);
137
+ var leapMonth = getLeapMonth(year);
139
138
  var days = 0;
140
139
  // 해당 월 전까지 윤달을 포함하여 누적
141
140
  for (var m = 1; m < month; m++) {
142
141
  days += getMonthDays$1(year, m);
143
- if (m === getLeapMonth(year)) {
142
+ if (m === leapMonth) {
144
143
  days += getLeapMonthDays(year, m);
145
144
  }
146
145
  }
147
146
  // 대상이 윤달이면, 앞에 있는 평달을 누적
148
- var leapMonth = getLeapMonth(year);
149
147
  if (isLeapMonth && leapMonth === month) {
150
148
  days += getMonthDays$1(year, month);
151
149
  }
@@ -233,7 +231,7 @@ var isValidDate$1 = function (year, month, day, isLeapMonth) {
233
231
  * @param year 1890년 ~ 2050년
234
232
  * @param month 1월 ~ 12월
235
233
  * @param isLeapMonth 대상이 윤달이면 true
236
- * @returns 윤달이 있는 해는 0~12 (13개월), 없는 해는 0~11 (12개월)
234
+ * @returns 윤달이 있는 해는 0 ~ 12 (13개월), 없는 해는 0 ~ 11 (12개월)
237
235
  */
238
236
  var getMonthIndex = function (year, month, isLeapMonth) {
239
237
  month = toInt(month);
@@ -249,7 +247,7 @@ var getMonthIndex = function (year, month, isLeapMonth) {
249
247
  /**
250
248
  * 0-based 연속적인 월 인덱스에 해당하는 월과 윤달 여부를 반환합니다.
251
249
  * @param year 1890년 ~ 2050년
252
- * @param monthIndex 윤달이 있는 해는 0~12 (13개월), 없는 해는 0~11 (12개월)
250
+ * @param monthIndex 윤달이 있는 해는 0 ~ 12 (13개월), 없는 해는 0 ~ 11 (12개월)
253
251
  * @returns month (1~12)와 isLeapMonth 여부
254
252
  */
255
253
  var getMonthFromIndex = function (year, monthIndex) {
@@ -268,32 +266,32 @@ var getMonthFromIndex = function (year, monthIndex) {
268
266
  };
269
267
 
270
268
  var LunarTable = /*#__PURE__*/Object.freeze({
271
- __proto__: null,
272
- BASE_YEAR: BASE_YEAR$1,
273
- BASE_MONTH: BASE_MONTH$1,
274
- BASE_DAY: BASE_DAY$1,
275
- BASE_VALUE: BASE_VALUE$1,
276
- MAX_YEAR: MAX_YEAR$1,
277
- MAX_MONTH: MAX_MONTH$1,
278
- MAX_DAY: MAX_DAY$1,
279
- MAX_VALUE: MAX_VALUE$1,
280
- getMonthDays: getMonthDays$1,
281
- getLeapMonth: getLeapMonth,
282
- hasLeapMonth: hasLeapMonth,
283
- isLeapMonth: isLeapMonth,
284
- getLeapMonthDays: getLeapMonthDays,
285
- getYearDays: getYearDays$1,
286
- getTotalDaysBeforeYear: getTotalDaysBeforeYear$1,
287
- getTotalDaysBeforeMonth: getTotalDaysBeforeMonth$1,
288
- getTotalDays: getTotalDays$1,
289
- getSecha: getSecha,
290
- getWolgeon: getWolgeon,
291
- getIljinByJulianDay: getIljinByJulianDay,
292
- getIljin: getIljin,
293
- isDateInRange: isDateInRange$1,
294
- isValidDate: isValidDate$1,
295
- getMonthIndex: getMonthIndex,
296
- getMonthFromIndex: getMonthFromIndex
269
+ __proto__: null,
270
+ BASE_DAY: BASE_DAY$1,
271
+ BASE_MONTH: BASE_MONTH$1,
272
+ BASE_VALUE: BASE_VALUE$1,
273
+ BASE_YEAR: BASE_YEAR$1,
274
+ MAX_DAY: MAX_DAY$1,
275
+ MAX_MONTH: MAX_MONTH$1,
276
+ MAX_VALUE: MAX_VALUE$1,
277
+ MAX_YEAR: MAX_YEAR$1,
278
+ getIljin: getIljin,
279
+ getIljinByJulianDay: getIljinByJulianDay,
280
+ getLeapMonth: getLeapMonth,
281
+ getLeapMonthDays: getLeapMonthDays,
282
+ getMonthDays: getMonthDays$1,
283
+ getMonthFromIndex: getMonthFromIndex,
284
+ getMonthIndex: getMonthIndex,
285
+ getSecha: getSecha,
286
+ getTotalDays: getTotalDays$1,
287
+ getTotalDaysBeforeMonth: getTotalDaysBeforeMonth$1,
288
+ getTotalDaysBeforeYear: getTotalDaysBeforeYear$1,
289
+ getWolgeon: getWolgeon,
290
+ getYearDays: getYearDays$1,
291
+ hasLeapMonth: hasLeapMonth,
292
+ isDateInRange: isDateInRange$1,
293
+ isLeapMonth: isLeapMonth,
294
+ isValidDate: isValidDate$1
297
295
  });
298
296
 
299
297
  var MONTH_DAYS = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
@@ -308,7 +306,7 @@ var MAX_YEAR = 2050;
308
306
  var MAX_MONTH = 12;
309
307
  var MAX_DAY = 31;
310
308
  var MAX_VALUE = MAX_YEAR * 10000 + MAX_MONTH * 100 + MAX_DAY;
311
- var totalDaysBeforeYear = {};
309
+ var totalDaysBeforeYear = [];
312
310
  var isLeapYear = function (year) {
313
311
  year = toInt(year);
314
312
  return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
@@ -326,14 +324,14 @@ var getYearDays = function (year) {
326
324
  * 연도별 누적 일 수를 초기에 룩업 테이블로 생성하여
327
325
  * O(1)으로 누적 일 수를 가져오게 변환함
328
326
  */
329
- totalDaysBeforeYear[BASE_YEAR] = 0;
327
+ totalDaysBeforeYear[0] = 0;
330
328
  for (var y = BASE_YEAR + 1; y <= MAX_YEAR; y++) {
331
- totalDaysBeforeYear[y] = totalDaysBeforeYear[y - 1] + getYearDays(y - 1);
329
+ var idx = y - BASE_YEAR;
330
+ totalDaysBeforeYear[idx] = totalDaysBeforeYear[idx - 1] + getYearDays(y - 1);
332
331
  }
333
332
  var getTotalDaysBeforeYear = function (year) {
334
333
  year = toInt(year);
335
- var day = totalDaysBeforeYear[year];
336
- return day;
334
+ return totalDaysBeforeYear[year - BASE_YEAR];
337
335
  };
338
336
  var getTotalDaysBeforeMonth = function (year, month) {
339
337
  var day = 0;
@@ -389,23 +387,23 @@ var isValidDate = function (year, month, day) {
389
387
  };
390
388
 
391
389
  var SolarTable = /*#__PURE__*/Object.freeze({
392
- __proto__: null,
393
- BASE_YEAR: BASE_YEAR,
394
- BASE_MONTH: BASE_MONTH,
395
- BASE_DAY: BASE_DAY,
396
- BASE_VALUE: BASE_VALUE,
397
- MAX_YEAR: MAX_YEAR,
398
- MAX_MONTH: MAX_MONTH,
399
- MAX_DAY: MAX_DAY,
400
- MAX_VALUE: MAX_VALUE,
401
- isLeapYear: isLeapYear,
402
- getMonthDays: getMonthDays,
403
- getYearDays: getYearDays,
404
- getTotalDaysBeforeYear: getTotalDaysBeforeYear,
405
- getTotalDaysBeforeMonth: getTotalDaysBeforeMonth,
406
- getTotalDays: getTotalDays,
407
- isDateInRange: isDateInRange,
408
- isValidDate: isValidDate
390
+ __proto__: null,
391
+ BASE_DAY: BASE_DAY,
392
+ BASE_MONTH: BASE_MONTH,
393
+ BASE_VALUE: BASE_VALUE,
394
+ BASE_YEAR: BASE_YEAR,
395
+ MAX_DAY: MAX_DAY,
396
+ MAX_MONTH: MAX_MONTH,
397
+ MAX_VALUE: MAX_VALUE,
398
+ MAX_YEAR: MAX_YEAR,
399
+ getMonthDays: getMonthDays,
400
+ getTotalDays: getTotalDays,
401
+ getTotalDaysBeforeMonth: getTotalDaysBeforeMonth,
402
+ getTotalDaysBeforeYear: getTotalDaysBeforeYear,
403
+ getYearDays: getYearDays,
404
+ isDateInRange: isDateInRange,
405
+ isLeapYear: isLeapYear,
406
+ isValidDate: isValidDate
409
407
  });
410
408
 
411
409
  var SOLAR_LUNAR_DAY_DIFF = 20;
@@ -1 +1 @@
1
- {"version":3,"file":"kor-lunar.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"kor-lunar.esm.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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"}
package/dist/kor-lunar.js CHANGED
@@ -3,9 +3,7 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var toInt = function (num) {
6
- if (typeof num === "string" || typeof num === "number")
7
- return ~~num;
8
- return num;
6
+ return ~~num;
9
7
  };
10
8
 
11
9
  /**
@@ -51,7 +49,7 @@ var MAX_DAY$1 = 18;
51
49
  var MAX_VALUE$1 = MAX_YEAR$1 * 10000 + MAX_MONTH$1 * 100 + MAX_DAY$1;
52
50
  var SMALL_MONTH_DAY = 29;
53
51
  var BIG_MONTH_DAY = 30;
54
- var totalDaysBeforeYear$1 = {};
52
+ var totalDaysBeforeYear$1 = [];
55
53
  var getYearData = function (year) {
56
54
  year = toInt(year);
57
55
  return LUN_TABLE[year - BASE_YEAR$1];
@@ -117,9 +115,10 @@ var getYearDays$1 = function (year) {
117
115
  * 연도별 누적 일 수를 초기에 룩업 테이블로 생성하여
118
116
  * O(1)으로 누적 일 수를 가져오게 변환함
119
117
  */
120
- totalDaysBeforeYear$1[BASE_YEAR$1] = 0;
118
+ totalDaysBeforeYear$1[0] = 0;
121
119
  for (var y$1 = BASE_YEAR$1 + 1; y$1 <= MAX_YEAR$1; y$1++) {
122
- totalDaysBeforeYear$1[y$1] = totalDaysBeforeYear$1[y$1 - 1] + getYearDays$1(y$1 - 1);
120
+ var idx$1 = y$1 - BASE_YEAR$1;
121
+ totalDaysBeforeYear$1[idx$1] = totalDaysBeforeYear$1[idx$1 - 1] + getYearDays$1(y$1 - 1);
123
122
  }
124
123
  /**
125
124
  * 1890년부터 해당 연도 전까지의 누적 일 수를 반환합니다.
@@ -128,8 +127,7 @@ for (var y$1 = BASE_YEAR$1 + 1; y$1 <= MAX_YEAR$1; y$1++) {
128
127
  */
129
128
  var getTotalDaysBeforeYear$1 = function (year) {
130
129
  year = toInt(year);
131
- var days = totalDaysBeforeYear$1[year];
132
- return days;
130
+ return totalDaysBeforeYear$1[year - BASE_YEAR$1];
133
131
  };
134
132
  /**
135
133
  * 해당 연도 내에서 해당 월 (및 윤달 포함) 전까지의 누적 일 수를 반환합니다.
@@ -140,16 +138,16 @@ var getTotalDaysBeforeYear$1 = function (year) {
140
138
  */
141
139
  var getTotalDaysBeforeMonth$1 = function (year, month, isLeapMonth) {
142
140
  month = toInt(month);
141
+ var leapMonth = getLeapMonth(year);
143
142
  var days = 0;
144
143
  // 해당 월 전까지 윤달을 포함하여 누적
145
144
  for (var m = 1; m < month; m++) {
146
145
  days += getMonthDays$1(year, m);
147
- if (m === getLeapMonth(year)) {
146
+ if (m === leapMonth) {
148
147
  days += getLeapMonthDays(year, m);
149
148
  }
150
149
  }
151
150
  // 대상이 윤달이면, 앞에 있는 평달을 누적
152
- var leapMonth = getLeapMonth(year);
153
151
  if (isLeapMonth && leapMonth === month) {
154
152
  days += getMonthDays$1(year, month);
155
153
  }
@@ -237,7 +235,7 @@ var isValidDate$1 = function (year, month, day, isLeapMonth) {
237
235
  * @param year 1890년 ~ 2050년
238
236
  * @param month 1월 ~ 12월
239
237
  * @param isLeapMonth 대상이 윤달이면 true
240
- * @returns 윤달이 있는 해는 0~12 (13개월), 없는 해는 0~11 (12개월)
238
+ * @returns 윤달이 있는 해는 0 ~ 12 (13개월), 없는 해는 0 ~ 11 (12개월)
241
239
  */
242
240
  var getMonthIndex = function (year, month, isLeapMonth) {
243
241
  month = toInt(month);
@@ -253,7 +251,7 @@ var getMonthIndex = function (year, month, isLeapMonth) {
253
251
  /**
254
252
  * 0-based 연속적인 월 인덱스에 해당하는 월과 윤달 여부를 반환합니다.
255
253
  * @param year 1890년 ~ 2050년
256
- * @param monthIndex 윤달이 있는 해는 0~12 (13개월), 없는 해는 0~11 (12개월)
254
+ * @param monthIndex 윤달이 있는 해는 0 ~ 12 (13개월), 없는 해는 0 ~ 11 (12개월)
257
255
  * @returns month (1~12)와 isLeapMonth 여부
258
256
  */
259
257
  var getMonthFromIndex = function (year, monthIndex) {
@@ -272,32 +270,32 @@ var getMonthFromIndex = function (year, monthIndex) {
272
270
  };
273
271
 
274
272
  var LunarTable = /*#__PURE__*/Object.freeze({
275
- __proto__: null,
276
- BASE_YEAR: BASE_YEAR$1,
277
- BASE_MONTH: BASE_MONTH$1,
278
- BASE_DAY: BASE_DAY$1,
279
- BASE_VALUE: BASE_VALUE$1,
280
- MAX_YEAR: MAX_YEAR$1,
281
- MAX_MONTH: MAX_MONTH$1,
282
- MAX_DAY: MAX_DAY$1,
283
- MAX_VALUE: MAX_VALUE$1,
284
- getMonthDays: getMonthDays$1,
285
- getLeapMonth: getLeapMonth,
286
- hasLeapMonth: hasLeapMonth,
287
- isLeapMonth: isLeapMonth,
288
- getLeapMonthDays: getLeapMonthDays,
289
- getYearDays: getYearDays$1,
290
- getTotalDaysBeforeYear: getTotalDaysBeforeYear$1,
291
- getTotalDaysBeforeMonth: getTotalDaysBeforeMonth$1,
292
- getTotalDays: getTotalDays$1,
293
- getSecha: getSecha,
294
- getWolgeon: getWolgeon,
295
- getIljinByJulianDay: getIljinByJulianDay,
296
- getIljin: getIljin,
297
- isDateInRange: isDateInRange$1,
298
- isValidDate: isValidDate$1,
299
- getMonthIndex: getMonthIndex,
300
- getMonthFromIndex: getMonthFromIndex
273
+ __proto__: null,
274
+ BASE_DAY: BASE_DAY$1,
275
+ BASE_MONTH: BASE_MONTH$1,
276
+ BASE_VALUE: BASE_VALUE$1,
277
+ BASE_YEAR: BASE_YEAR$1,
278
+ MAX_DAY: MAX_DAY$1,
279
+ MAX_MONTH: MAX_MONTH$1,
280
+ MAX_VALUE: MAX_VALUE$1,
281
+ MAX_YEAR: MAX_YEAR$1,
282
+ getIljin: getIljin,
283
+ getIljinByJulianDay: getIljinByJulianDay,
284
+ getLeapMonth: getLeapMonth,
285
+ getLeapMonthDays: getLeapMonthDays,
286
+ getMonthDays: getMonthDays$1,
287
+ getMonthFromIndex: getMonthFromIndex,
288
+ getMonthIndex: getMonthIndex,
289
+ getSecha: getSecha,
290
+ getTotalDays: getTotalDays$1,
291
+ getTotalDaysBeforeMonth: getTotalDaysBeforeMonth$1,
292
+ getTotalDaysBeforeYear: getTotalDaysBeforeYear$1,
293
+ getWolgeon: getWolgeon,
294
+ getYearDays: getYearDays$1,
295
+ hasLeapMonth: hasLeapMonth,
296
+ isDateInRange: isDateInRange$1,
297
+ isLeapMonth: isLeapMonth,
298
+ isValidDate: isValidDate$1
301
299
  });
302
300
 
303
301
  var MONTH_DAYS = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
@@ -312,7 +310,7 @@ var MAX_YEAR = 2050;
312
310
  var MAX_MONTH = 12;
313
311
  var MAX_DAY = 31;
314
312
  var MAX_VALUE = MAX_YEAR * 10000 + MAX_MONTH * 100 + MAX_DAY;
315
- var totalDaysBeforeYear = {};
313
+ var totalDaysBeforeYear = [];
316
314
  var isLeapYear = function (year) {
317
315
  year = toInt(year);
318
316
  return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
@@ -330,14 +328,14 @@ var getYearDays = function (year) {
330
328
  * 연도별 누적 일 수를 초기에 룩업 테이블로 생성하여
331
329
  * O(1)으로 누적 일 수를 가져오게 변환함
332
330
  */
333
- totalDaysBeforeYear[BASE_YEAR] = 0;
331
+ totalDaysBeforeYear[0] = 0;
334
332
  for (var y = BASE_YEAR + 1; y <= MAX_YEAR; y++) {
335
- totalDaysBeforeYear[y] = totalDaysBeforeYear[y - 1] + getYearDays(y - 1);
333
+ var idx = y - BASE_YEAR;
334
+ totalDaysBeforeYear[idx] = totalDaysBeforeYear[idx - 1] + getYearDays(y - 1);
336
335
  }
337
336
  var getTotalDaysBeforeYear = function (year) {
338
337
  year = toInt(year);
339
- var day = totalDaysBeforeYear[year];
340
- return day;
338
+ return totalDaysBeforeYear[year - BASE_YEAR];
341
339
  };
342
340
  var getTotalDaysBeforeMonth = function (year, month) {
343
341
  var day = 0;
@@ -393,23 +391,23 @@ var isValidDate = function (year, month, day) {
393
391
  };
394
392
 
395
393
  var SolarTable = /*#__PURE__*/Object.freeze({
396
- __proto__: null,
397
- BASE_YEAR: BASE_YEAR,
398
- BASE_MONTH: BASE_MONTH,
399
- BASE_DAY: BASE_DAY,
400
- BASE_VALUE: BASE_VALUE,
401
- MAX_YEAR: MAX_YEAR,
402
- MAX_MONTH: MAX_MONTH,
403
- MAX_DAY: MAX_DAY,
404
- MAX_VALUE: MAX_VALUE,
405
- isLeapYear: isLeapYear,
406
- getMonthDays: getMonthDays,
407
- getYearDays: getYearDays,
408
- getTotalDaysBeforeYear: getTotalDaysBeforeYear,
409
- getTotalDaysBeforeMonth: getTotalDaysBeforeMonth,
410
- getTotalDays: getTotalDays,
411
- isDateInRange: isDateInRange,
412
- isValidDate: isValidDate
394
+ __proto__: null,
395
+ BASE_DAY: BASE_DAY,
396
+ BASE_MONTH: BASE_MONTH,
397
+ BASE_VALUE: BASE_VALUE,
398
+ BASE_YEAR: BASE_YEAR,
399
+ MAX_DAY: MAX_DAY,
400
+ MAX_MONTH: MAX_MONTH,
401
+ MAX_VALUE: MAX_VALUE,
402
+ MAX_YEAR: MAX_YEAR,
403
+ getMonthDays: getMonthDays,
404
+ getTotalDays: getTotalDays,
405
+ getTotalDaysBeforeMonth: getTotalDaysBeforeMonth,
406
+ getTotalDaysBeforeYear: getTotalDaysBeforeYear,
407
+ getYearDays: getYearDays,
408
+ isDateInRange: isDateInRange,
409
+ isLeapYear: isLeapYear,
410
+ isValidDate: isValidDate
413
411
  });
414
412
 
415
413
  var SOLAR_LUNAR_DAY_DIFF = 20;
@@ -513,7 +511,7 @@ exports.LunarData = LunarData;
513
511
  exports.LunarTable = LunarTable;
514
512
  exports.SolarData = SolarData;
515
513
  exports.SolarTable = SolarTable;
516
- exports["default"] = korLunar;
514
+ exports.default = korLunar;
517
515
  exports.toLunar = toLunar;
518
516
  exports.toSolar = toSolar;
519
517
  //# sourceMappingURL=kor-lunar.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"kor-lunar.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
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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"}
@@ -1,2 +1,2 @@
1
- var korLunar=function(n){"use strict";var t=function(n){return"string"==typeof n||"number"==typeof n?~~n:n},r=[50342582,46534058,50360036,46403236,46402890,50222421,46533271,46400854,50345309,46533333,50367442,46401362,46534309,50223914,46401099,46533275,50416294,46400874,46533465,50342826,46401362,50359717,46402341,46402123,50354523,46533293,46400874,50341301,46533545,50363858,46402962,46402853,50355501,46401878,46400181,50481885,46401236,46534057,50343626,46403218,50226854,46400807,46533207,50420054,46533338,46401236,50411345,46401353,50428691,46402195,46400811,50423067,46532973,46533482,50417060,46402468,46402377,50343243,46402197,50363051,46400813,46533293,50420394,46534066,46402980,50413217,46402890,50367893,46402198,46400854,50357621,46533333,46401234,50349909,46534309,46403146,50214478,46533275,50363094,46400874,46533465,50355122,46401362,46401317,50350891,46402123,50366891,46400173,46531947,50423209,46534057,46402962,50351509,46402853,50376269,46402134,46400182,50490093,46401236,46534057,50355922,46403218,46402854,50214190,46533207,50366902,46533466,46401236,50354025,46401353,46401171,50350743,46400811,46533211,50342574,46400362,50494933,46402468,46402377,50355539,46402197,46400813,50410797,46533293,50371498,46400978,46534053,50355882,46402890,46402197,50350749,46400854,46533301,50342614,46401234,50358117,46534309,46403146,50222678,46533787,46400858,50345325,46533481,50380626,46401362,46402341,50424587,46402123,46400683,50352827,46531949,46533481,50343338,46402962,50364069,46402853,46402125,50420301,46400182,46532021,79569],e=["갑","을","병","정","무","기","경","신","임","계"],a=["자","축","인","묘","진","사","오","미","신","유","술","해"],o=1890,u=18900101,i=2050,f=20501118,c={},l=function(n){return n=t(n),r[n-o]},g=function(n,r){return r=t(r),0===(l(n)>>r-1&1)?29:30},A=function(n){return l(n)>>12&15},h=function(n){return 0!==A(n)},M=function(n,r){return(r=t(r))===A(n)},_=function(n,t){return M(n,t)?0===(l(n)>>16&1)?29:30:0},s=function(n){return l(n)>>17&511};c[1890]=0;for(var D=1891;D<=i;D++)c[D]=c[D-1]+s(D-1);var y=function(n){return n=t(n),c[n]},v=function(n,r,e){r=t(r);for(var a=0,o=1;o<r;o++)a+=g(n,o),o===A(n)&&(a+=_(n,o));var u=A(n);return e&&u===r&&(a+=g(n,r)),a},E=function(n,r,e,a){return e=t(e),y(n)+v(n,r,a)+e},L=function(n){return n=t(n),e[(n+6)%e.length]+a[(n+8)%a.length]},S=function(n,r){return n=t(n),r=t(r),e[(2*n+r+3)%e.length]+a[(r+1)%a.length]},T=function(n){return n=t(n),e[(n-1)%e.length]+a[(n+1)%a.length]},B=function(n,r,e){var a=1e4*(n=t(n))+100*(r=t(r))+(e=t(e));return a>=u&&a<=f},Y=Object.freeze({__proto__:null,BASE_YEAR:o,BASE_MONTH:1,BASE_DAY:1,BASE_VALUE:u,MAX_YEAR:i,MAX_MONTH:11,MAX_DAY:18,MAX_VALUE:f,getMonthDays:g,getLeapMonth:A,hasLeapMonth:h,isLeapMonth:M,getLeapMonthDays:_,getYearDays:s,getTotalDaysBeforeYear:y,getTotalDaysBeforeMonth:v,getTotalDays:E,getSecha:L,getWolgeon:S,getIljinByJulianDay:T,getIljin:function(n,t,r,e){var a=E(n,t,r,e);return T(a-1)},isDateInRange:B,isValidDate:function(n,r,e,a){if(n=t(n),r=t(r),e=t(e),n<o||n>i)return!1;if(n===o){if(r<1)return!1;if(1===r&&e<1)return!1}if(n===i){if(r>11)return!1;if(11===r&&e>18)return!1}return!(r<1||r>12)&&(!(e<1)&&e<=(a?_(n,r):g(n,r)))},getMonthIndex:function(n,r,e){var a=r=t(r);if(h(n)){var o=A(n);(e&&r===o||r>o)&&a++}return a-1},getMonthFromIndex:function(n,t){var r=A(n),e=!1,a=t;return r>0&&(a===r&&(e=!0),a>=r&&a--),{month:a+1,isLeapMonth:e}}}),p=[31,28,31,30,31,30,31,31,30,31,30,31],d=1890,b=18900121,O=2050,R=20501231,X={},j=function(n){return(n=t(n))%4==0&&n%100!=0||n%400==0},m=function(n,r){return 2===(r=t(r))&&j(n)?29:p[r-1]},I=function(n){return j(n)?366:365};X[1890]=0;for(var V=1891;V<=O;V++)X[V]=X[V-1]+I(V-1);var w=function(n){return n=t(n),X[n]},H=function(n,t){for(var r=0,e=1;e<t;e++)r+=m(n,e);return r},N=function(n,t,r){return w(n)+H(n,t)+r},U=function(n,r,e){var a=1e4*(n=t(n))+100*(r=t(r))+(e=t(e));return a>=b&&a<=R},k=Object.freeze({__proto__:null,BASE_YEAR:d,BASE_MONTH:1,BASE_DAY:21,BASE_VALUE:b,MAX_YEAR:O,MAX_MONTH:12,MAX_DAY:31,MAX_VALUE:R,isLeapYear:j,getMonthDays:m,getYearDays:I,getTotalDaysBeforeYear:w,getTotalDaysBeforeMonth:H,getTotalDays:N,isDateInRange:U,isValidDate:function(n,r,e){if(n=t(n),r=t(r),e=t(e),n<d||n>O)return!1;if(n===d){if(r<1)return!1;if(1===r&&e<21)return!1}if(n===O){if(r>12)return!1;if(12===r&&e>31)return!1}return!(r<1||r>12)&&(!(e<1)&&e<=m(n,r))}}),x=function(n,r,e){if(n=t(n),r=t(r),e=t(e),!U(n,r,e))throw new RangeError("지원되지 않는 날짜입니다. 입력한 날짜: ".concat(n,"-").concat(r,"-").concat(e));var a=Math.min(n,i),o=n>i?11:r,u=1,f=E(a,o,u,!0),c=N(n,r,e);u+=c-20-f;for(var l=c-20,h=2411389+l-1,M=(l+1)%7,s=o===A(a);u<1;)s?s=!1:(0===--o&&(o=12,a--),s=o===A(a)),u+=s?_(a,o):g(a,o);return{year:a,month:o,day:u,isLeapMonth:s,secha:L(a),wolgeon:s?"":S(a,o),iljin:T(h),julianDay:h,dayOfWeek:M}},z=function(n,r,e,a){if(n=t(n),r=t(r),e=t(e),!B(n,r,e))throw new RangeError("지원되지 않는 날짜입니다. 입력한 날짜: ".concat(n,"-").concat(r,"-").concat(e));for(var o=n,u=r,i=e+(E(n,r,e,a)-(N(n,r,e)-20)),f=m(o,u);i>f;)i-=f,++u>12&&(u=1,o++),f=m(o,u);return{year:o,month:u,day:i}},W=Y,F=k,J={toLunar:x,toSolar:z,LunarTable:Y,SolarTable:k,LunarData:W,SolarData:F};return n.LunarData=W,n.LunarTable=Y,n.SolarData=F,n.SolarTable=k,n.default=J,n.toLunar=x,n.toSolar=z,Object.defineProperty(n,"__esModule",{value:!0}),n}({});
1
+ var korLunar=function(n){"use strict";var r=function(n){return~~n},t=[50342582,46534058,50360036,46403236,46402890,50222421,46533271,46400854,50345309,46533333,50367442,46401362,46534309,50223914,46401099,46533275,50416294,46400874,46533465,50342826,46401362,50359717,46402341,46402123,50354523,46533293,46400874,50341301,46533545,50363858,46402962,46402853,50355501,46401878,46400181,50481885,46401236,46534057,50343626,46403218,50226854,46400807,46533207,50420054,46533338,46401236,50411345,46401353,50428691,46402195,46400811,50423067,46532973,46533482,50417060,46402468,46402377,50343243,46402197,50363051,46400813,46533293,50420394,46534066,46402980,50413217,46402890,50367893,46402198,46400854,50357621,46533333,46401234,50349909,46534309,46403146,50214478,46533275,50363094,46400874,46533465,50355122,46401362,46401317,50350891,46402123,50366891,46400173,46531947,50423209,46534057,46402962,50351509,46402853,50376269,46402134,46400182,50490093,46401236,46534057,50355922,46403218,46402854,50214190,46533207,50366902,46533466,46401236,50354025,46401353,46401171,50350743,46400811,46533211,50342574,46400362,50494933,46402468,46402377,50355539,46402197,46400813,50410797,46533293,50371498,46400978,46534053,50355882,46402890,46402197,50350749,46400854,46533301,50342614,46401234,50358117,46534309,46403146,50222678,46533787,46400858,50345325,46533481,50380626,46401362,46402341,50424587,46402123,46400683,50352827,46531949,46533481,50343338,46402962,50364069,46402853,46402125,50420301,46400182,46532021,79569],e=["갑","을","병","정","무","기","경","신","임","계"],a=["자","축","인","묘","진","사","오","미","신","유","술","해"],o=1890,u=18900101,i=2050,f=20501118,c=[],l=function(n){return n=r(n),t[n-o]},g=function(n,t){return t=r(t),0===(l(n)>>t-1&1)?29:30},A=function(n){return l(n)>>12&15},h=function(n){return 0!==A(n)},M=function(n,t){return(t=r(t))===A(n)},_=function(n,r){return M(n,r)?0===(l(n)>>16&1)?29:30:0},D=function(n){return l(n)>>17&511};c[0]=0;for(var s=1891;s<=i;s++){var v=s-o;c[v]=c[v-1]+D(s-1)}var y=function(n){return n=r(n),c[n-o]},E=function(n,t,e){t=r(t);for(var a=A(n),o=0,u=1;u<t;u++)o+=g(n,u),u===a&&(o+=_(n,u));return e&&a===t&&(o+=g(n,t)),o},L=function(n,t,e,a){return e=r(e),y(n)+E(n,t,a)+e},S=function(n){return n=r(n),e[(n+6)%e.length]+a[(n+8)%a.length]},T=function(n,t){return n=r(n),t=r(t),e[(2*n+t+3)%e.length]+a[(t+1)%a.length]},B=function(n){return n=r(n),e[(n-1)%e.length]+a[(n+1)%a.length]},Y=function(n,t,e){var a=1e4*(n=r(n))+100*(t=r(t))+(e=r(e));return a>=u&&a<=f},d=Object.freeze({__proto__:null,BASE_DAY:1,BASE_MONTH:1,BASE_VALUE:u,BASE_YEAR:o,MAX_DAY:18,MAX_MONTH:11,MAX_VALUE:f,MAX_YEAR:i,getIljin:function(n,r,t,e){var a=L(n,r,t,e);return B(a-1)},getIljinByJulianDay:B,getLeapMonth:A,getLeapMonthDays:_,getMonthDays:g,getMonthFromIndex:function(n,r){var t=A(n),e=!1,a=r;return t>0&&(a===t&&(e=!0),a>=t&&a--),{month:a+1,isLeapMonth:e}},getMonthIndex:function(n,t,e){var a=t=r(t);if(h(n)){var o=A(n);(e&&t===o||t>o)&&a++}return a-1},getSecha:S,getTotalDays:L,getTotalDaysBeforeMonth:E,getTotalDaysBeforeYear:y,getWolgeon:T,getYearDays:D,hasLeapMonth:h,isDateInRange:Y,isLeapMonth:M,isValidDate:function(n,t,e,a){if(n=r(n),t=r(t),e=r(e),n<o||n>i)return!1;if(n===o){if(t<1)return!1;if(1===t&&e<1)return!1}if(n===i){if(t>11)return!1;if(11===t&&e>18)return!1}return!(t<1||t>12)&&(!(e<1)&&e<=(a?_(n,t):g(n,t)))}}),p=[31,28,31,30,31,30,31,31,30,31,30,31],O=1890,R=18900121,X=2050,b=20501231,j=[],I=function(n){return(n=r(n))%4==0&&n%100!=0||n%400==0},V=function(n,t){return 2===(t=r(t))&&I(n)?29:p[t-1]},m=function(n){return I(n)?366:365};j[0]=0;for(var w=1891;w<=X;w++){var H=w-O;j[H]=j[H-1]+m(w-1)}var N=function(n){return n=r(n),j[n-O]},U=function(n,r){for(var t=0,e=1;e<r;e++)t+=V(n,e);return t},k=function(n,r,t){return N(n)+U(n,r)+t},x=function(n,t,e){var a=1e4*(n=r(n))+100*(t=r(t))+(e=r(e));return a>=R&&a<=b},z=Object.freeze({__proto__:null,BASE_DAY:21,BASE_MONTH:1,BASE_VALUE:R,BASE_YEAR:O,MAX_DAY:31,MAX_MONTH:12,MAX_VALUE:b,MAX_YEAR:X,getMonthDays:V,getTotalDays:k,getTotalDaysBeforeMonth:U,getTotalDaysBeforeYear:N,getYearDays:m,isDateInRange:x,isLeapYear:I,isValidDate:function(n,t,e){if(n=r(n),t=r(t),e=r(e),n<O||n>X)return!1;if(n===O){if(t<1)return!1;if(1===t&&e<21)return!1}if(n===X){if(t>12)return!1;if(12===t&&e>31)return!1}return!(t<1||t>12)&&(!(e<1)&&e<=V(n,t))}}),W=function(n,t,e){if(n=r(n),t=r(t),e=r(e),!x(n,t,e))throw new RangeError("지원되지 않는 날짜입니다. 입력한 날짜: ".concat(n,"-").concat(t,"-").concat(e));var a=Math.min(n,i),o=n>i?11:t,u=1,f=L(a,o,u,!0),c=k(n,t,e);u+=c-20-f;for(var l=c-20,h=2411389+l-1,M=(l+1)%7,D=o===A(a);u<1;)D?D=!1:(0===--o&&(o=12,a--),D=o===A(a)),u+=D?_(a,o):g(a,o);return{year:a,month:o,day:u,isLeapMonth:D,secha:S(a),wolgeon:D?"":T(a,o),iljin:B(h),julianDay:h,dayOfWeek:M}},F=function(n,t,e,a){if(n=r(n),t=r(t),e=r(e),!Y(n,t,e))throw new RangeError("지원되지 않는 날짜입니다. 입력한 날짜: ".concat(n,"-").concat(t,"-").concat(e));for(var o=n,u=t,i=e+(L(n,t,e,a)-(k(n,t,e)-20)),f=V(o,u);i>f;)i-=f,++u>12&&(u=1,o++),f=V(o,u);return{year:o,month:u,day:i}},J=d,P=z,q={toLunar:W,toSolar:F,LunarTable:d,SolarTable:z,LunarData:J,SolarData:P};return n.LunarData=J,n.LunarTable=d,n.SolarData=P,n.SolarTable=z,n.default=q,n.toLunar=W,n.toSolar=F,Object.defineProperty(n,"__esModule",{value:!0}),n}({});
2
2
  //# sourceMappingURL=kor-lunar.min.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"kor-lunar.min.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
1
+ {"version":3,"file":"kor-lunar.min.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":["toInt","num","LUN_TABLE","gan","ji","BASE_YEAR","BASE_VALUE","MAX_YEAR","MAX_VALUE","totalDaysBeforeYear","getYearData","year","getMonthDays","month","getLeapMonth","hasLeapMonth","isLeapMonth","getLeapMonthDays","getYearDays","y","idx","getTotalDaysBeforeYear","getTotalDaysBeforeMonth","leapMonth","days","m","getTotalDays","day","getSecha","length","getWolgeon","getIljinByJulianDay","julianDay","isDateInRange","value","monthIndex","index","MONTH_DAYS","isLeapYear","toLunar","solYear","solMonth","solDay","SolarTable.isDateInRange","RangeError","concat","Math","min","LunarTable.MAX_YEAR","lunTotalDays","LunarTable.getTotalDays","solTotalDays","SolarTable.getTotalDays","day2","dayOfWeek","LunarTable.getLeapMonth","LunarTable.getLeapMonthDays","LunarTable.getMonthDays","secha","LunarTable.getSecha","wolgeon","LunarTable.getWolgeon","iljin","LunarTable.getIljinByJulianDay","toSolar","lunYear","lunMonth","lunDay","LunarTable.isDateInRange","monthDays","SolarTable.getMonthDays","LunarData","LunarTable","SolarData","SolarTable","korLunar"],"mappings":"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"}
@@ -88,13 +88,13 @@ export declare const isValidDate: (year: number, month: number, day: number, isL
88
88
  * @param year 1890년 ~ 2050년
89
89
  * @param month 1월 ~ 12월
90
90
  * @param isLeapMonth 대상이 윤달이면 true
91
- * @returns 윤달이 있는 해는 0~12 (13개월), 없는 해는 0~11 (12개월)
91
+ * @returns 윤달이 있는 해는 0 ~ 12 (13개월), 없는 해는 0 ~ 11 (12개월)
92
92
  */
93
93
  export declare const getMonthIndex: (year: number, month: number, isLeapMonth: boolean) => number;
94
94
  /**
95
95
  * 0-based 연속적인 월 인덱스에 해당하는 월과 윤달 여부를 반환합니다.
96
96
  * @param year 1890년 ~ 2050년
97
- * @param monthIndex 윤달이 있는 해는 0~12 (13개월), 없는 해는 0~11 (12개월)
97
+ * @param monthIndex 윤달이 있는 해는 0 ~ 12 (13개월), 없는 해는 0 ~ 11 (12개월)
98
98
  * @returns month (1~12)와 isLeapMonth 여부
99
99
  */
100
100
  export declare const getMonthFromIndex: (year: number, monthIndex: number) => {
package/package.json CHANGED
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "name": "kor-lunar",
3
- "version": "1.5.0",
3
+ "version": "1.5.2",
4
+ "type": "module",
4
5
  "description": "한국 음력 변환 유틸 / Korean lunar calendar converter",
5
6
  "main": "dist/kor-lunar.js",
6
7
  "module": "dist/kor-lunar.esm.js",
@@ -40,9 +41,10 @@
40
41
  },
41
42
  "homepage": "https://github.com/kahyou22/kor-lunar-js#readme",
42
43
  "devDependencies": {
43
- "rollup": "^2.79.2",
44
- "rollup-plugin-terser": "^7.0.2",
45
- "rollup-plugin-typescript2": "^0.36.0",
44
+ "rollup": "^4.24.0",
45
+ "@rollup/plugin-terser": "^0.4.4",
46
+ "@rollup/plugin-typescript": "^12.1.0",
47
+ "tslib": "^2.7.0",
46
48
  "typescript": "^5.8.3"
47
49
  }
48
50
  }