mingpan 0.1.1

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.
Files changed (231) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +118 -0
  3. package/dist/core/bazi/BaziCore.d.ts +112 -0
  4. package/dist/core/bazi/BaziCore.d.ts.map +1 -0
  5. package/dist/core/bazi/BaziCore.js +606 -0
  6. package/dist/core/bazi/BaziCore.js.map +1 -0
  7. package/dist/core/bazi/SolarTermCalculator.d.ts +46 -0
  8. package/dist/core/bazi/SolarTermCalculator.d.ts.map +1 -0
  9. package/dist/core/bazi/SolarTermCalculator.js +452 -0
  10. package/dist/core/bazi/SolarTermCalculator.js.map +1 -0
  11. package/dist/core/bazi/TrueSolarTime.d.ts +64 -0
  12. package/dist/core/bazi/TrueSolarTime.d.ts.map +1 -0
  13. package/dist/core/bazi/TrueSolarTime.js +210 -0
  14. package/dist/core/bazi/TrueSolarTime.js.map +1 -0
  15. package/dist/core/bazi/ephemerisData.d.ts +10 -0
  16. package/dist/core/bazi/ephemerisData.d.ts.map +1 -0
  17. package/dist/core/bazi/ephemerisData.js +88 -0
  18. package/dist/core/bazi/ephemerisData.js.map +1 -0
  19. package/dist/core/bazi/index.d.ts +8 -0
  20. package/dist/core/bazi/index.d.ts.map +1 -0
  21. package/dist/core/bazi/index.js +30 -0
  22. package/dist/core/bazi/index.js.map +1 -0
  23. package/dist/core/bazi/types.d.ts +116 -0
  24. package/dist/core/bazi/types.d.ts.map +1 -0
  25. package/dist/core/bazi/types.js +7 -0
  26. package/dist/core/bazi/types.js.map +1 -0
  27. package/dist/core/calendar/SolarTermsCalculator.d.ts +33 -0
  28. package/dist/core/calendar/SolarTermsCalculator.d.ts.map +1 -0
  29. package/dist/core/calendar/SolarTermsCalculator.js +111 -0
  30. package/dist/core/calendar/SolarTermsCalculator.js.map +1 -0
  31. package/dist/core/calendar/astronomicalCalendar.d.ts +74 -0
  32. package/dist/core/calendar/astronomicalCalendar.d.ts.map +1 -0
  33. package/dist/core/calendar/astronomicalCalendar.js +276 -0
  34. package/dist/core/calendar/astronomicalCalendar.js.map +1 -0
  35. package/dist/core/calendar/calendar.d.ts +81 -0
  36. package/dist/core/calendar/calendar.d.ts.map +1 -0
  37. package/dist/core/calendar/calendar.js +223 -0
  38. package/dist/core/calendar/calendar.js.map +1 -0
  39. package/dist/core/calendar/constants.d.ts +151 -0
  40. package/dist/core/calendar/constants.d.ts.map +1 -0
  41. package/dist/core/calendar/constants.js +97 -0
  42. package/dist/core/calendar/constants.js.map +1 -0
  43. package/dist/core/calendar/julian.d.ts +54 -0
  44. package/dist/core/calendar/julian.d.ts.map +1 -0
  45. package/dist/core/calendar/julian.js +142 -0
  46. package/dist/core/calendar/julian.js.map +1 -0
  47. package/dist/core/calendar/lunarCalendar.d.ts +79 -0
  48. package/dist/core/calendar/lunarCalendar.d.ts.map +1 -0
  49. package/dist/core/calendar/lunarCalendar.js +164 -0
  50. package/dist/core/calendar/lunarCalendar.js.map +1 -0
  51. package/dist/core/calendar/solarTerms.d.ts +105 -0
  52. package/dist/core/calendar/solarTerms.d.ts.map +1 -0
  53. package/dist/core/calendar/solarTerms.js +487 -0
  54. package/dist/core/calendar/solarTerms.js.map +1 -0
  55. package/dist/core/constants/bazi.d.ts +138 -0
  56. package/dist/core/constants/bazi.d.ts.map +1 -0
  57. package/dist/core/constants/bazi.js +332 -0
  58. package/dist/core/constants/bazi.js.map +1 -0
  59. package/dist/core/constants/index.d.ts +6 -0
  60. package/dist/core/constants/index.d.ts.map +1 -0
  61. package/dist/core/constants/index.js +37 -0
  62. package/dist/core/constants/index.js.map +1 -0
  63. package/dist/core/constants/positions.d.ts +27 -0
  64. package/dist/core/constants/positions.d.ts.map +1 -0
  65. package/dist/core/constants/positions.js +39 -0
  66. package/dist/core/constants/positions.js.map +1 -0
  67. package/dist/core/ziwei/BrightnessSystem.d.ts +53 -0
  68. package/dist/core/ziwei/BrightnessSystem.d.ts.map +1 -0
  69. package/dist/core/ziwei/BrightnessSystem.js +278 -0
  70. package/dist/core/ziwei/BrightnessSystem.js.map +1 -0
  71. package/dist/core/ziwei/IztroAdapter.d.ts +78 -0
  72. package/dist/core/ziwei/IztroAdapter.d.ts.map +1 -0
  73. package/dist/core/ziwei/IztroAdapter.js +314 -0
  74. package/dist/core/ziwei/IztroAdapter.js.map +1 -0
  75. package/dist/core/ziwei/MutagenCore.d.ts +81 -0
  76. package/dist/core/ziwei/MutagenCore.d.ts.map +1 -0
  77. package/dist/core/ziwei/MutagenCore.js +246 -0
  78. package/dist/core/ziwei/MutagenCore.js.map +1 -0
  79. package/dist/index.d.ts +13 -0
  80. package/dist/index.d.ts.map +1 -0
  81. package/dist/index.js +1101 -0
  82. package/dist/index.js.map +1 -0
  83. package/dist/output/fortuneTextRenderer.d.ts +63 -0
  84. package/dist/output/fortuneTextRenderer.d.ts.map +1 -0
  85. package/dist/output/fortuneTextRenderer.js +384 -0
  86. package/dist/output/fortuneTextRenderer.js.map +1 -0
  87. package/dist/output/listTextRenderer.d.ts +298 -0
  88. package/dist/output/listTextRenderer.d.ts.map +1 -0
  89. package/dist/output/listTextRenderer.js +942 -0
  90. package/dist/output/listTextRenderer.js.map +1 -0
  91. package/dist/services/bazi/BaziService.d.ts +83 -0
  92. package/dist/services/bazi/BaziService.d.ts.map +1 -0
  93. package/dist/services/bazi/BaziService.js +635 -0
  94. package/dist/services/bazi/BaziService.js.map +1 -0
  95. package/dist/services/bazi/analyzers/ClimateAnalyzer.d.ts +31 -0
  96. package/dist/services/bazi/analyzers/ClimateAnalyzer.d.ts.map +1 -0
  97. package/dist/services/bazi/analyzers/ClimateAnalyzer.js +194 -0
  98. package/dist/services/bazi/analyzers/ClimateAnalyzer.js.map +1 -0
  99. package/dist/services/bazi/analyzers/HiddenStemsAnalyzer.d.ts +16 -0
  100. package/dist/services/bazi/analyzers/HiddenStemsAnalyzer.d.ts.map +1 -0
  101. package/dist/services/bazi/analyzers/HiddenStemsAnalyzer.js +60 -0
  102. package/dist/services/bazi/analyzers/HiddenStemsAnalyzer.js.map +1 -0
  103. package/dist/services/bazi/analyzers/NaYinAnalyzer.d.ts +33 -0
  104. package/dist/services/bazi/analyzers/NaYinAnalyzer.d.ts.map +1 -0
  105. package/dist/services/bazi/analyzers/NaYinAnalyzer.js +209 -0
  106. package/dist/services/bazi/analyzers/NaYinAnalyzer.js.map +1 -0
  107. package/dist/services/bazi/analyzers/PatternAnalyzer.d.ts +159 -0
  108. package/dist/services/bazi/analyzers/PatternAnalyzer.d.ts.map +1 -0
  109. package/dist/services/bazi/analyzers/PatternAnalyzer.js +1150 -0
  110. package/dist/services/bazi/analyzers/PatternAnalyzer.js.map +1 -0
  111. package/dist/services/bazi/analyzers/RelationsAnalyzer.d.ts +114 -0
  112. package/dist/services/bazi/analyzers/RelationsAnalyzer.d.ts.map +1 -0
  113. package/dist/services/bazi/analyzers/RelationsAnalyzer.js +704 -0
  114. package/dist/services/bazi/analyzers/RelationsAnalyzer.js.map +1 -0
  115. package/dist/services/bazi/analyzers/ShenShaAnalyzer.d.ts +236 -0
  116. package/dist/services/bazi/analyzers/ShenShaAnalyzer.d.ts.map +1 -0
  117. package/dist/services/bazi/analyzers/ShenShaAnalyzer.js +2079 -0
  118. package/dist/services/bazi/analyzers/ShenShaAnalyzer.js.map +1 -0
  119. package/dist/services/bazi/analyzers/StrengthAnalyzer.d.ts +181 -0
  120. package/dist/services/bazi/analyzers/StrengthAnalyzer.d.ts.map +1 -0
  121. package/dist/services/bazi/analyzers/StrengthAnalyzer.js +1119 -0
  122. package/dist/services/bazi/analyzers/StrengthAnalyzer.js.map +1 -0
  123. package/dist/services/bazi/analyzers/TenGodsAnalyzer.d.ts +78 -0
  124. package/dist/services/bazi/analyzers/TenGodsAnalyzer.d.ts.map +1 -0
  125. package/dist/services/bazi/analyzers/TenGodsAnalyzer.js +383 -0
  126. package/dist/services/bazi/analyzers/TenGodsAnalyzer.js.map +1 -0
  127. package/dist/services/bazi/analyzers/TraditionalAnalyzer.d.ts +46 -0
  128. package/dist/services/bazi/analyzers/TraditionalAnalyzer.d.ts.map +1 -0
  129. package/dist/services/bazi/analyzers/TraditionalAnalyzer.js +260 -0
  130. package/dist/services/bazi/analyzers/TraditionalAnalyzer.js.map +1 -0
  131. package/dist/services/bazi/analyzers/YongShenAnalyzer.d.ts +70 -0
  132. package/dist/services/bazi/analyzers/YongShenAnalyzer.d.ts.map +1 -0
  133. package/dist/services/bazi/analyzers/YongShenAnalyzer.js +858 -0
  134. package/dist/services/bazi/analyzers/YongShenAnalyzer.js.map +1 -0
  135. package/dist/services/bazi/calculators/DaYunCalculator.d.ts +71 -0
  136. package/dist/services/bazi/calculators/DaYunCalculator.d.ts.map +1 -0
  137. package/dist/services/bazi/calculators/DaYunCalculator.js +496 -0
  138. package/dist/services/bazi/calculators/DaYunCalculator.js.map +1 -0
  139. package/dist/services/bazi/calculators/LiuNianCalculator.d.ts +88 -0
  140. package/dist/services/bazi/calculators/LiuNianCalculator.d.ts.map +1 -0
  141. package/dist/services/bazi/calculators/LiuNianCalculator.js +546 -0
  142. package/dist/services/bazi/calculators/LiuNianCalculator.js.map +1 -0
  143. package/dist/services/bazi/calculators/LiuRiCalculator.d.ts +66 -0
  144. package/dist/services/bazi/calculators/LiuRiCalculator.d.ts.map +1 -0
  145. package/dist/services/bazi/calculators/LiuRiCalculator.js +497 -0
  146. package/dist/services/bazi/calculators/LiuRiCalculator.js.map +1 -0
  147. package/dist/services/bazi/calculators/LiuYueCalculator.d.ts +50 -0
  148. package/dist/services/bazi/calculators/LiuYueCalculator.d.ts.map +1 -0
  149. package/dist/services/bazi/calculators/LiuYueCalculator.js +338 -0
  150. package/dist/services/bazi/calculators/LiuYueCalculator.js.map +1 -0
  151. package/dist/services/bazi/calculators/LuckCycleCalculator.d.ts +123 -0
  152. package/dist/services/bazi/calculators/LuckCycleCalculator.d.ts.map +1 -0
  153. package/dist/services/bazi/calculators/LuckCycleCalculator.js +414 -0
  154. package/dist/services/bazi/calculators/LuckCycleCalculator.js.map +1 -0
  155. package/dist/services/bazi/index.d.ts +21 -0
  156. package/dist/services/bazi/index.d.ts.map +1 -0
  157. package/dist/services/bazi/index.js +83 -0
  158. package/dist/services/bazi/index.js.map +1 -0
  159. package/dist/services/bazi/types.d.ts +597 -0
  160. package/dist/services/bazi/types.d.ts.map +1 -0
  161. package/dist/services/bazi/types.js +123 -0
  162. package/dist/services/bazi/types.js.map +1 -0
  163. package/dist/services/ziwei/ZiweiService.d.ts +86 -0
  164. package/dist/services/ziwei/ZiweiService.d.ts.map +1 -0
  165. package/dist/services/ziwei/ZiweiService.js +343 -0
  166. package/dist/services/ziwei/ZiweiService.js.map +1 -0
  167. package/dist/services/ziwei/calculators/BrightnessCalculator.d.ts +38 -0
  168. package/dist/services/ziwei/calculators/BrightnessCalculator.d.ts.map +1 -0
  169. package/dist/services/ziwei/calculators/BrightnessCalculator.js +142 -0
  170. package/dist/services/ziwei/calculators/BrightnessCalculator.js.map +1 -0
  171. package/dist/services/ziwei/calculators/DailyCalculator.d.ts +27 -0
  172. package/dist/services/ziwei/calculators/DailyCalculator.d.ts.map +1 -0
  173. package/dist/services/ziwei/calculators/DailyCalculator.js +55 -0
  174. package/dist/services/ziwei/calculators/DailyCalculator.js.map +1 -0
  175. package/dist/services/ziwei/calculators/DecadeCalculator.d.ts +46 -0
  176. package/dist/services/ziwei/calculators/DecadeCalculator.d.ts.map +1 -0
  177. package/dist/services/ziwei/calculators/DecadeCalculator.js +181 -0
  178. package/dist/services/ziwei/calculators/DecadeCalculator.js.map +1 -0
  179. package/dist/services/ziwei/calculators/HoroscopeStarsCalculator.d.ts +28 -0
  180. package/dist/services/ziwei/calculators/HoroscopeStarsCalculator.d.ts.map +1 -0
  181. package/dist/services/ziwei/calculators/HoroscopeStarsCalculator.js +84 -0
  182. package/dist/services/ziwei/calculators/HoroscopeStarsCalculator.js.map +1 -0
  183. package/dist/services/ziwei/calculators/HourlyCalculator.d.ts +41 -0
  184. package/dist/services/ziwei/calculators/HourlyCalculator.d.ts.map +1 -0
  185. package/dist/services/ziwei/calculators/HourlyCalculator.js +139 -0
  186. package/dist/services/ziwei/calculators/HourlyCalculator.js.map +1 -0
  187. package/dist/services/ziwei/calculators/MinorLimitCalculator.d.ts +30 -0
  188. package/dist/services/ziwei/calculators/MinorLimitCalculator.d.ts.map +1 -0
  189. package/dist/services/ziwei/calculators/MinorLimitCalculator.js +90 -0
  190. package/dist/services/ziwei/calculators/MinorLimitCalculator.js.map +1 -0
  191. package/dist/services/ziwei/calculators/MonthlyCalculator.d.ts +39 -0
  192. package/dist/services/ziwei/calculators/MonthlyCalculator.d.ts.map +1 -0
  193. package/dist/services/ziwei/calculators/MonthlyCalculator.js +128 -0
  194. package/dist/services/ziwei/calculators/MonthlyCalculator.js.map +1 -0
  195. package/dist/services/ziwei/calculators/MutagenCalculator.d.ts +20 -0
  196. package/dist/services/ziwei/calculators/MutagenCalculator.d.ts.map +1 -0
  197. package/dist/services/ziwei/calculators/MutagenCalculator.js +121 -0
  198. package/dist/services/ziwei/calculators/MutagenCalculator.js.map +1 -0
  199. package/dist/services/ziwei/calculators/PalaceDynamicCalculator.d.ts +35 -0
  200. package/dist/services/ziwei/calculators/PalaceDynamicCalculator.d.ts.map +1 -0
  201. package/dist/services/ziwei/calculators/PalaceDynamicCalculator.js +55 -0
  202. package/dist/services/ziwei/calculators/PalaceDynamicCalculator.js.map +1 -0
  203. package/dist/services/ziwei/calculators/YearlyCalculator.d.ts +35 -0
  204. package/dist/services/ziwei/calculators/YearlyCalculator.d.ts.map +1 -0
  205. package/dist/services/ziwei/calculators/YearlyCalculator.js +119 -0
  206. package/dist/services/ziwei/calculators/YearlyCalculator.js.map +1 -0
  207. package/dist/services/ziwei/index.d.ts +15 -0
  208. package/dist/services/ziwei/index.d.ts.map +1 -0
  209. package/dist/services/ziwei/index.js +48 -0
  210. package/dist/services/ziwei/index.js.map +1 -0
  211. package/dist/services/ziwei/transformers/PalaceTransformer.d.ts +62 -0
  212. package/dist/services/ziwei/transformers/PalaceTransformer.d.ts.map +1 -0
  213. package/dist/services/ziwei/transformers/PalaceTransformer.js +153 -0
  214. package/dist/services/ziwei/transformers/PalaceTransformer.js.map +1 -0
  215. package/dist/services/ziwei/types.d.ts +185 -0
  216. package/dist/services/ziwei/types.d.ts.map +1 -0
  217. package/dist/services/ziwei/types.js +54 -0
  218. package/dist/services/ziwei/types.js.map +1 -0
  219. package/dist/shared/logger.d.ts +51 -0
  220. package/dist/shared/logger.d.ts.map +1 -0
  221. package/dist/shared/logger.js +136 -0
  222. package/dist/shared/logger.js.map +1 -0
  223. package/dist/shared/types.d.ts +91 -0
  224. package/dist/shared/types.d.ts.map +1 -0
  225. package/dist/shared/types.js +7 -0
  226. package/dist/shared/types.js.map +1 -0
  227. package/dist/utils/ageCalculator.d.ts +30 -0
  228. package/dist/utils/ageCalculator.d.ts.map +1 -0
  229. package/dist/utils/ageCalculator.js +51 -0
  230. package/dist/utils/ageCalculator.js.map +1 -0
  231. package/package.json +54 -0
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+ /**
3
+ * 節氣計算器
4
+ * 用於確定日期所屬的節氣月份
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.SolarTermsCalculator = void 0;
8
+ class SolarTermsCalculator {
9
+ // 24節氣名稱
10
+ static SOLAR_TERMS = [
11
+ '立春', '雨水', '驚蟄', '春分', '清明', '穀雨',
12
+ '立夏', '小滿', '芒種', '夏至', '小暑', '大暑',
13
+ '立秋', '處暑', '白露', '秋分', '寒露', '霜降',
14
+ '立冬', '小雪', '大雪', '冬至', '小寒', '大寒'
15
+ ];
16
+ // 節氣基準數據(2000年的節氣時刻,單位:分鐘)
17
+ // 這是簡化版本,實際應該使用更精確的天文算法
18
+ static BASE_MINUTES_2000 = [
19
+ 318663, 333795, 349066, 364618, 380057, 395317,
20
+ 410841, 426569, 442303, 458174, 473964, 489528,
21
+ 504978, 520435, 535914, 551476, 567087, 582633,
22
+ 598067, 613506, 628960, 644509, 660096, 675611
23
+ ];
24
+ /**
25
+ * 獲取指定日期所屬的節氣月份
26
+ */
27
+ static getSolarTermMonth(year, month, day) {
28
+ const date = new Date(year, month - 1, day);
29
+ // 計算該年的所有節氣日期
30
+ const solarTermDates = this.calculateYearSolarTerms(year);
31
+ // 找出日期所屬的節氣區間
32
+ for (let i = 0; i < solarTermDates.length; i++) {
33
+ const currentTerm = solarTermDates[i];
34
+ const nextTerm = solarTermDates[(i + 1) % 24];
35
+ const nextTermDate = i < 23 ? nextTerm.date : this.calculateYearSolarTerms(year + 1)[0].date;
36
+ if (date >= currentTerm.date && date < nextTermDate) {
37
+ return {
38
+ termIndex: i,
39
+ termName: currentTerm.name,
40
+ termDate: currentTerm.date,
41
+ nextTerm: nextTerm.name,
42
+ nextTermDate: nextTermDate
43
+ };
44
+ }
45
+ }
46
+ // 如果日期在大寒之後,屬於下一年的立春
47
+ return {
48
+ termIndex: 0,
49
+ termName: '立春',
50
+ termDate: this.calculateYearSolarTerms(year + 1)[0].date,
51
+ nextTerm: '雨水',
52
+ nextTermDate: this.calculateYearSolarTerms(year + 1)[1].date
53
+ };
54
+ }
55
+ /**
56
+ * 計算指定年份的所有節氣日期
57
+ * 使用簡化算法,實際應用中應該使用更精確的天文算法
58
+ */
59
+ static calculateYearSolarTerms(year) {
60
+ const terms = [];
61
+ // 簡化算法:基於經驗公式計算節氣日期
62
+ // 實際應該使用天文算法或查表
63
+ const yearDiff = year - 2000;
64
+ const leapYears = Math.floor(yearDiff / 4) - Math.floor(yearDiff / 100) + Math.floor(yearDiff / 400);
65
+ for (let i = 0; i < 24; i++) {
66
+ // 基準分鐘數 + 年份調整
67
+ const baseMinutes = this.BASE_MINUTES_2000[i];
68
+ const adjustedMinutes = baseMinutes + yearDiff * 365.2422 * 24 * 60 / 24;
69
+ // 轉換為日期
70
+ const termDate = new Date(2000, 0, 1);
71
+ termDate.setMinutes(termDate.getMinutes() + adjustedMinutes);
72
+ // 根據節氣索引調整日期(這是簡化版本)
73
+ const month = Math.floor(i / 2);
74
+ const isFirstHalf = i % 2 === 0;
75
+ // 節氣通常在每月的5-7日(節)和20-22日(氣)
76
+ const day = isFirstHalf ?
77
+ (4 + Math.round((year - 2000) * 0.242)) :
78
+ (19 + Math.round((year - 2000) * 0.242));
79
+ const actualDate = new Date(year, month, day);
80
+ // 微調:立春通常在2月3-5日
81
+ if (i === 0) {
82
+ actualDate.setMonth(1);
83
+ actualDate.setDate(4);
84
+ }
85
+ terms.push({
86
+ name: this.SOLAR_TERMS[i],
87
+ date: actualDate
88
+ });
89
+ }
90
+ return terms;
91
+ }
92
+ /**
93
+ * 判斷某個日期是否是節氣日
94
+ */
95
+ static isSolarTermDay(year, month, day) {
96
+ const terms = this.calculateYearSolarTerms(year);
97
+ const dateStr = `${year}-${String(month).padStart(2, '0')}-${String(day).padStart(2, '0')}`;
98
+ return terms.some(term => {
99
+ const termDateStr = `${term.date.getFullYear()}-${String(term.date.getMonth() + 1).padStart(2, '0')}-${String(term.date.getDate()).padStart(2, '0')}`;
100
+ return termDateStr === dateStr;
101
+ });
102
+ }
103
+ /**
104
+ * 獲取節氣名稱
105
+ */
106
+ static getSolarTermName(index) {
107
+ return this.SOLAR_TERMS[index] || '';
108
+ }
109
+ }
110
+ exports.SolarTermsCalculator = SolarTermsCalculator;
111
+ //# sourceMappingURL=SolarTermsCalculator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SolarTermsCalculator.js","sourceRoot":"","sources":["../../../src/core/calendar/SolarTermsCalculator.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAUH,MAAa,oBAAoB;IAC/B,SAAS;IACD,MAAM,CAAU,WAAW,GAAG;QACpC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;QAClC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;QAClC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;QAClC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;KACnC,CAAC;IAEF,2BAA2B;IAC3B,wBAAwB;IAChB,MAAM,CAAU,iBAAiB,GAAG;QAC1C,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9C,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9C,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9C,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;KAC/C,CAAC;IAEF;;OAEG;IACH,MAAM,CAAC,iBAAiB,CAAC,IAAY,EAAE,KAAa,EAAE,GAAW;QAC/D,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;QAE5C,cAAc;QACd,MAAM,cAAc,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;QAE1D,cAAc;QACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/C,MAAM,WAAW,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;YACtC,MAAM,QAAQ,GAAG,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;YAC9C,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAE7F,IAAI,IAAI,IAAI,WAAW,CAAC,IAAI,IAAI,IAAI,GAAG,YAAY,EAAE,CAAC;gBACpD,OAAO;oBACL,SAAS,EAAE,CAAC;oBACZ,QAAQ,EAAE,WAAW,CAAC,IAAI;oBAC1B,QAAQ,EAAE,WAAW,CAAC,IAAI;oBAC1B,QAAQ,EAAE,QAAQ,CAAC,IAAI;oBACvB,YAAY,EAAE,YAAY;iBAC3B,CAAC;YACJ,CAAC;QACH,CAAC;QAED,qBAAqB;QACrB,OAAO;YACL,SAAS,EAAE,CAAC;YACZ,QAAQ,EAAE,IAAI;YACd,QAAQ,EAAE,IAAI,CAAC,uBAAuB,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;YACxD,QAAQ,EAAE,IAAI;YACd,YAAY,EAAE,IAAI,CAAC,uBAAuB,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;SAC7D,CAAC;IACJ,CAAC;IAED;;;OAGG;IACK,MAAM,CAAC,uBAAuB,CAAC,IAAY;QACjD,MAAM,KAAK,GAAsC,EAAE,CAAC;QAEpD,oBAAoB;QACpB,gBAAgB;QAChB,MAAM,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC;QAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC;QAErG,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5B,eAAe;YACf,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;YAC9C,MAAM,eAAe,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;YAEzE,QAAQ;YACR,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACtC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,EAAE,GAAG,eAAe,CAAC,CAAC;YAE7D,qBAAqB;YACrB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAChC,MAAM,WAAW,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAEhC,4BAA4B;YAC5B,MAAM,GAAG,GAAG,WAAW,CAAC,CAAC;gBACvB,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACzC,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;YAE3C,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;YAE9C,iBAAiB;YACjB,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACZ,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACvB,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YACxB,CAAC;YAED,KAAK,CAAC,IAAI,CAAC;gBACT,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;gBACzB,IAAI,EAAE,UAAU;aACjB,CAAC,CAAC;QACL,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,IAAY,EAAE,KAAa,EAAE,GAAW;QAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;QACjD,MAAM,OAAO,GAAG,GAAG,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;QAE5F,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACvB,MAAM,WAAW,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;YACtJ,OAAO,WAAW,KAAK,OAAO,CAAC;QACjC,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,KAAa;QACnC,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IACvC,CAAC;;AAvHH,oDAwHC"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Astronomical Calendar Calculations
3
+ * Based on taro-bazi's high-precision algorithms
4
+ * Implements calculations from 寿星万年历 (Longevity Star Calendar)
5
+ */
6
+ /**
7
+ * Convert Gregorian date to Julian Day Number
8
+ * Valid from 100 CE onwards
9
+ */
10
+ export declare function gregorianToJulianDay(year: number, month: number, day: number, hour?: number, minute?: number, second?: number): number;
11
+ /**
12
+ * Convert Julian Day Number to Gregorian date
13
+ */
14
+ export declare function julianDayToGregorian(jd: number): {
15
+ year: number;
16
+ month: number;
17
+ day: number;
18
+ hour: number;
19
+ minute: number;
20
+ second: number;
21
+ };
22
+ /**
23
+ * Calculate Earth's nutation parameters
24
+ * Returns nutation in longitude (Δψ) and obliquity (Δε) in degrees
25
+ */
26
+ export declare function getEarthNutationParameter(jd: number): {
27
+ longitude: number;
28
+ obliquity: number;
29
+ };
30
+ /**
31
+ * Calculate the aberration of light
32
+ * Returns correction in degrees
33
+ */
34
+ export declare function getLightAberration(jd: number): number;
35
+ /**
36
+ * Calculate the apparent solar longitude
37
+ * Includes corrections for nutation and aberration
38
+ */
39
+ export declare function getSolarLongitude(jd: number): number;
40
+ /**
41
+ * Find the exact moment of a solar term
42
+ * Uses Newton-Raphson iteration for precision
43
+ */
44
+ export declare function findSolarTermTime(year: number, targetLongitude: number): Date;
45
+ /**
46
+ * Get all 24 solar terms for a given year
47
+ */
48
+ export declare function getSolarTermsForYear(year: number): Array<{
49
+ name: string;
50
+ date: Date;
51
+ longitude: number;
52
+ }>;
53
+ /**
54
+ * Calculate the precise moment of new moon
55
+ * Used for lunar calendar calculations
56
+ */
57
+ export declare function getNewMoonTime(k: number): number;
58
+ /**
59
+ * Constants for precise calculations
60
+ */
61
+ export declare const ASTRONOMICAL_CONSTANTS: {
62
+ J2000: number;
63
+ DAYS_PER_CENTURY: number;
64
+ MEAN_SOLAR_DAY: number;
65
+ SYNODIC_MONTH: number;
66
+ TROPICAL_YEAR: number;
67
+ ABERRATION_CONSTANT: number;
68
+ EARTH_OBLIQUITY_J2000: number;
69
+ };
70
+ /**
71
+ * Export utility function to check calculation validity
72
+ */
73
+ export declare function isValidDate(year: number, month: number, day: number): boolean;
74
+ //# sourceMappingURL=astronomicalCalendar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"astronomicalCalendar.d.ts","sourceRoot":"","sources":["../../../src/core/calendar/astronomicalCalendar.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,MAAU,EAChB,MAAM,GAAE,MAAU,EAClB,MAAM,GAAE,MAAU,GACjB,MAAM,CAoBR;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,CAgCA;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,EAAE,EAAE,MAAM,GAAG;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAsC9F;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAgBrD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CA+BpD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,IAAI,CA2B7E;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,IAAI,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CA0BzG;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CA4ChD;AAED;;GAEG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;CAQlC,CAAC;AAEF;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAc7E"}
@@ -0,0 +1,276 @@
1
+ "use strict";
2
+ /**
3
+ * Astronomical Calendar Calculations
4
+ * Based on taro-bazi's high-precision algorithms
5
+ * Implements calculations from 寿星万年历 (Longevity Star Calendar)
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.ASTRONOMICAL_CONSTANTS = void 0;
9
+ exports.gregorianToJulianDay = gregorianToJulianDay;
10
+ exports.julianDayToGregorian = julianDayToGregorian;
11
+ exports.getEarthNutationParameter = getEarthNutationParameter;
12
+ exports.getLightAberration = getLightAberration;
13
+ exports.getSolarLongitude = getSolarLongitude;
14
+ exports.findSolarTermTime = findSolarTermTime;
15
+ exports.getSolarTermsForYear = getSolarTermsForYear;
16
+ exports.getNewMoonTime = getNewMoonTime;
17
+ exports.isValidDate = isValidDate;
18
+ /**
19
+ * Convert Gregorian date to Julian Day Number
20
+ * Valid from 100 CE onwards
21
+ */
22
+ function gregorianToJulianDay(year, month, day, hour = 0, minute = 0, second = 0) {
23
+ // Handle calendar reform (Gregorian calendar adopted Oct 15, 1582)
24
+ const a = Math.floor((14 - month) / 12);
25
+ const y = year + 4800 - a;
26
+ const m = month + 12 * a - 3;
27
+ let jd;
28
+ if (year > 1582 || (year === 1582 && month > 10) || (year === 1582 && month === 10 && day >= 15)) {
29
+ // Gregorian calendar
30
+ jd = day + Math.floor((153 * m + 2) / 5) + 365 * y + Math.floor(y / 4) - Math.floor(y / 100) + Math.floor(y / 400) - 32045;
31
+ }
32
+ else {
33
+ // Julian calendar
34
+ jd = day + Math.floor((153 * m + 2) / 5) + 365 * y + Math.floor(y / 4) - 32083;
35
+ }
36
+ // Add time as fraction of day
37
+ const timeFraction = (hour + minute / 60 + second / 3600) / 24;
38
+ return jd + timeFraction;
39
+ }
40
+ /**
41
+ * Convert Julian Day Number to Gregorian date
42
+ */
43
+ function julianDayToGregorian(jd) {
44
+ const jdi = Math.floor(jd);
45
+ const jdf = jd - jdi;
46
+ let a, b;
47
+ if (jdi >= 2299161) {
48
+ // Gregorian calendar
49
+ a = Math.floor((jdi - 1867216.25) / 36524.25);
50
+ b = jdi + 1 + a - Math.floor(a / 4);
51
+ }
52
+ else {
53
+ // Julian calendar
54
+ b = jdi;
55
+ }
56
+ const c = b + 1524;
57
+ const d = Math.floor((c - 122.1) / 365.25);
58
+ const e = Math.floor(365.25 * d);
59
+ const m = Math.floor((c - e) / 30.6001);
60
+ const day = c - e - Math.floor(30.6001 * m);
61
+ const month = m < 14 ? m - 1 : m - 13;
62
+ const year = month > 2 ? d - 4716 : d - 4715;
63
+ // Extract time from fractional part
64
+ const hours = jdf * 24;
65
+ const hour = Math.floor(hours);
66
+ const minutes = (hours - hour) * 60;
67
+ const minute = Math.floor(minutes);
68
+ const second = Math.floor((minutes - minute) * 60);
69
+ return { year, month, day, hour, minute, second };
70
+ }
71
+ /**
72
+ * Calculate Earth's nutation parameters
73
+ * Returns nutation in longitude (Δψ) and obliquity (Δε) in degrees
74
+ */
75
+ function getEarthNutationParameter(jd) {
76
+ const T = (jd - 2451545.0) / 36525.0;
77
+ const T2 = T * T;
78
+ const T3 = T2 * T;
79
+ // Mean anomaly of the Moon
80
+ const M = 134.96298 + 477198.867398 * T + 0.0086972 * T2 + T3 / 56250;
81
+ // Mean anomaly of the Sun
82
+ const M_ = 357.52772 + 35999.050340 * T - 0.0001603 * T2 - T3 / 300000;
83
+ // Moon's argument of latitude
84
+ const F = 93.27191 + 483202.017538 * T - 0.0036825 * T2 + T3 / 327270;
85
+ // Longitude of ascending node of Moon's orbit
86
+ const Omega = 125.04452 - 1934.136261 * T + 0.0020708 * T2 + T3 / 450000;
87
+ // Convert to radians
88
+ const rad = Math.PI / 180;
89
+ const MRad = M * rad;
90
+ const M_Rad = M_ * rad;
91
+ const FRad = F * rad;
92
+ const OmegaRad = Omega * rad;
93
+ // Nutation in longitude (simplified, most significant terms only)
94
+ const deltaPsi = -17.20 * Math.sin(OmegaRad)
95
+ - 1.32 * Math.sin(2 * FRad - 2 * OmegaRad)
96
+ - 0.23 * Math.sin(2 * FRad + 2 * OmegaRad);
97
+ // Nutation in obliquity
98
+ const deltaEpsilon = 9.20 * Math.cos(OmegaRad)
99
+ + 0.57 * Math.cos(2 * FRad - 2 * OmegaRad)
100
+ + 0.10 * Math.cos(2 * FRad + 2 * OmegaRad);
101
+ return {
102
+ longitude: deltaPsi / 3600, // Convert arcseconds to degrees
103
+ obliquity: deltaEpsilon / 3600
104
+ };
105
+ }
106
+ /**
107
+ * Calculate the aberration of light
108
+ * Returns correction in degrees
109
+ */
110
+ function getLightAberration(jd) {
111
+ const T = (jd - 2451545.0) / 36525.0;
112
+ // Mean longitude of the Sun
113
+ const L = 280.46646 + 36000.76983 * T + 0.0003032 * T * T;
114
+ // Convert to radians
115
+ const LRad = (L % 360) * Math.PI / 180;
116
+ // Aberration constant (in arcseconds)
117
+ const k = 20.49552;
118
+ // Calculate aberration
119
+ const aberration = -k * Math.cos(LRad) / 3600;
120
+ return aberration;
121
+ }
122
+ /**
123
+ * Calculate the apparent solar longitude
124
+ * Includes corrections for nutation and aberration
125
+ */
126
+ function getSolarLongitude(jd) {
127
+ const T = (jd - 2451545.0) / 36525.0;
128
+ const T2 = T * T;
129
+ const T3 = T2 * T;
130
+ // Mean longitude of the Sun
131
+ const L0 = 280.46646 + 36000.76983 * T + 0.0003032 * T2;
132
+ // Mean anomaly of the Sun
133
+ const M = 357.52911 + 35999.05029 * T - 0.0001537 * T2;
134
+ const MRad = M * Math.PI / 180;
135
+ // Equation of center
136
+ const C = (1.914602 - 0.004817 * T - 0.000014 * T2) * Math.sin(MRad)
137
+ + (0.019993 - 0.000101 * T) * Math.sin(2 * MRad)
138
+ + 0.000289 * Math.sin(3 * MRad);
139
+ // True longitude
140
+ const trueLongitude = L0 + C;
141
+ // Get nutation correction
142
+ const nutation = getEarthNutationParameter(jd);
143
+ // Get aberration correction
144
+ const aberration = getLightAberration(jd);
145
+ // Apparent longitude
146
+ const apparentLongitude = trueLongitude + nutation.longitude + aberration;
147
+ // Normalize to 0-360 degrees
148
+ return ((apparentLongitude % 360) + 360) % 360;
149
+ }
150
+ /**
151
+ * Find the exact moment of a solar term
152
+ * Uses Newton-Raphson iteration for precision
153
+ */
154
+ function findSolarTermTime(year, targetLongitude) {
155
+ // Initial guess: approximate date based on mean solar motion
156
+ const meanDaysPerDegree = 365.2422 / 360;
157
+ const dayOfYear = targetLongitude * meanDaysPerDegree;
158
+ let jd = gregorianToJulianDay(year, 1, 1) + dayOfYear;
159
+ // Newton-Raphson iteration
160
+ const maxIterations = 10;
161
+ const tolerance = 0.00001; // About 0.86 seconds
162
+ for (let i = 0; i < maxIterations; i++) {
163
+ const currentLongitude = getSolarLongitude(jd);
164
+ let diff = targetLongitude - currentLongitude;
165
+ // Handle wraparound at 360/0 degrees
166
+ if (diff > 180)
167
+ diff -= 360;
168
+ if (diff < -180)
169
+ diff += 360;
170
+ if (Math.abs(diff) < tolerance)
171
+ break;
172
+ // Adjust JD based on difference
173
+ // Sun moves approximately 0.9856 degrees per day
174
+ jd += diff / 0.9856;
175
+ }
176
+ const date = julianDayToGregorian(jd);
177
+ return new Date(date.year, date.month - 1, date.day, date.hour, date.minute, date.second);
178
+ }
179
+ /**
180
+ * Get all 24 solar terms for a given year
181
+ */
182
+ function getSolarTermsForYear(year) {
183
+ const solarTermNames = [
184
+ '立春', '雨水', '惊蛰', '春分', '清明', '谷雨',
185
+ '立夏', '小满', '芒种', '夏至', '小暑', '大暑',
186
+ '立秋', '处暑', '白露', '秋分', '寒露', '霜降',
187
+ '立冬', '小雪', '大雪', '冬至', '小寒', '大寒'
188
+ ];
189
+ const terms = [];
190
+ for (let i = 0; i < 24; i++) {
191
+ const longitude = (315 + i * 15) % 360; // Start from 立春 at 315°
192
+ const date = findSolarTermTime(year, longitude);
193
+ // IMPORTANT: Adjust for Beijing time (UTC+8)
194
+ // The astronomical calculations return UTC time, but BaZi uses Beijing time
195
+ const beijingDate = new Date(date.getTime() + 8 * 60 * 60 * 1000);
196
+ terms.push({
197
+ name: solarTermNames[i],
198
+ date: beijingDate,
199
+ longitude
200
+ });
201
+ }
202
+ return terms;
203
+ }
204
+ /**
205
+ * Calculate the precise moment of new moon
206
+ * Used for lunar calendar calculations
207
+ */
208
+ function getNewMoonTime(k) {
209
+ // k is the lunation number (0 = Jan 6, 2000)
210
+ const T = k / 1236.85;
211
+ const T2 = T * T;
212
+ const T3 = T2 * T;
213
+ const T4 = T3 * T;
214
+ // Mean new moon
215
+ const JDE = 2451550.09766 + 29.530588861 * k
216
+ + 0.00015437 * T2
217
+ - 0.000000150 * T3
218
+ + 0.00000000073 * T4;
219
+ // Sun's mean anomaly
220
+ const M = 2.5534 + 29.10535670 * k
221
+ - 0.0000014 * T2
222
+ - 0.00000011 * T3;
223
+ // Moon's mean anomaly
224
+ const Mp = 201.5643 + 385.81693528 * k
225
+ + 0.0107582 * T2
226
+ + 0.00001238 * T3
227
+ - 0.000000058 * T4;
228
+ // Moon's argument of latitude
229
+ const F = 160.7108 + 390.67050284 * k
230
+ - 0.0016118 * T2
231
+ - 0.00000227 * T3
232
+ + 0.000000011 * T4;
233
+ // Convert to radians
234
+ const rad = Math.PI / 180;
235
+ const MRad = M * rad;
236
+ const MpRad = Mp * rad;
237
+ const FRad = F * rad;
238
+ // Corrections (simplified, main terms only)
239
+ const correction = -0.40720 * Math.sin(MpRad)
240
+ + 0.17241 * Math.sin(MRad)
241
+ + 0.01608 * Math.sin(2 * MpRad)
242
+ + 0.01039 * Math.sin(2 * FRad)
243
+ + 0.00739 * Math.sin(MpRad - MRad);
244
+ return JDE + correction;
245
+ }
246
+ /**
247
+ * Constants for precise calculations
248
+ */
249
+ exports.ASTRONOMICAL_CONSTANTS = {
250
+ J2000: 2451545.0, // Julian day for J2000.0 epoch
251
+ DAYS_PER_CENTURY: 36525.0, // Days in a Julian century
252
+ MEAN_SOLAR_DAY: 0.9856473354, // Mean solar motion in degrees per day
253
+ SYNODIC_MONTH: 29.530588861, // Mean synodic month in days
254
+ TROPICAL_YEAR: 365.2421897, // Tropical year in days
255
+ ABERRATION_CONSTANT: 20.49552, // Aberration constant in arcseconds
256
+ EARTH_OBLIQUITY_J2000: 23.43929111 // Earth's obliquity at J2000.0 in degrees
257
+ };
258
+ /**
259
+ * Export utility function to check calculation validity
260
+ */
261
+ function isValidDate(year, month, day) {
262
+ // Support dates from 100 CE as per taro-bazi
263
+ if (year < 100 || year > 3000)
264
+ return false;
265
+ if (month < 1 || month > 12)
266
+ return false;
267
+ const daysInMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
268
+ // Check for leap year
269
+ if (month === 2) {
270
+ const isLeap = (year % 4 === 0 && year % 100 !== 0) || (year % 400 === 0);
271
+ if (isLeap)
272
+ daysInMonth[1] = 29;
273
+ }
274
+ return day >= 1 && day <= daysInMonth[month - 1];
275
+ }
276
+ //# sourceMappingURL=astronomicalCalendar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"astronomicalCalendar.js","sourceRoot":"","sources":["../../../src/core/calendar/astronomicalCalendar.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,81 @@
1
+ export interface PreciseBaziPillar {
2
+ stem: string;
3
+ branch: string;
4
+ nayin: string;
5
+ wuxing: string;
6
+ hiddenStems: string[];
7
+ }
8
+ export interface PreciseBaziChart {
9
+ year: PreciseBaziPillar;
10
+ month: PreciseBaziPillar;
11
+ day: PreciseBaziPillar;
12
+ hour: PreciseBaziPillar;
13
+ dayMaster: string;
14
+ solarTermInfo: {
15
+ current: {
16
+ name: string;
17
+ date: Date;
18
+ } | null;
19
+ next: {
20
+ name: string;
21
+ date: Date;
22
+ } | null;
23
+ monthName: string;
24
+ };
25
+ julianDay: number;
26
+ lunarDate?: {
27
+ year: number;
28
+ month: number;
29
+ day: number;
30
+ isLeap: boolean;
31
+ };
32
+ }
33
+ export declare class PreciseCalendar {
34
+ /**
35
+ * 计算精确的八字四柱
36
+ * @param date 公历日期
37
+ * @param hour 小时 (0-23)
38
+ * @param minute 分钟 (0-59)
39
+ * @returns 精确的八字信息
40
+ */
41
+ static calculatePreciseBazi(date: Date, hour?: number, minute?: number): PreciseBaziChart;
42
+ /**
43
+ * 计算年柱(以立春为分界点)
44
+ */
45
+ private static calculateYearPillar;
46
+ /**
47
+ * 计算月柱(以节气为分界点)
48
+ */
49
+ private static calculateMonthPillar;
50
+ /**
51
+ * 计算日柱(基于儒略日)
52
+ */
53
+ private static calculateDayPillar;
54
+ /**
55
+ * 计算时柱
56
+ */
57
+ private static calculateHourPillar;
58
+ /**
59
+ * 创建柱子对象
60
+ */
61
+ private static createPillar;
62
+ /**
63
+ * 获取某日的详细节气信息
64
+ */
65
+ static getDetailedSolarTermInfo(date: Date): {
66
+ currentTerm: string;
67
+ nextTerm: string;
68
+ daysToNext: number;
69
+ monthName: string;
70
+ season: string;
71
+ };
72
+ /**
73
+ * 验证计算结果的准确性
74
+ */
75
+ static validateCalculation(date: Date, result: PreciseBaziChart): {
76
+ isValid: boolean;
77
+ warnings: string[];
78
+ confidence: number;
79
+ };
80
+ }
81
+ //# sourceMappingURL=calendar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calendar.d.ts","sourceRoot":"","sources":["../../../src/core/calendar/calendar.ts"],"names":[],"mappings":"AAwBA,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,iBAAiB,CAAC;IACxB,KAAK,EAAE,iBAAiB,CAAC;IACzB,GAAG,EAAE,iBAAiB,CAAC;IACvB,IAAI,EAAE,iBAAiB,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE;QACb,OAAO,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,IAAI,CAAA;SAAE,GAAG,IAAI,CAAC;QAC7C,IAAI,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,IAAI,CAAA;SAAE,GAAG,IAAI,CAAC;QAC1C,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE;QACV,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,OAAO,CAAC;KACjB,CAAC;CACH;AAED,qBAAa,eAAe;IAC1B;;;;;;OAMG;IACH,MAAM,CAAC,oBAAoB,CACzB,IAAI,EAAE,IAAI,EACV,IAAI,GAAE,MAAwB,EAC9B,MAAM,GAAE,MAA0B,GACjC,gBAAgB;IAyDnB;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,mBAAmB;IA2BlC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,oBAAoB;IA2CnC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAQjC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,mBAAmB;IA6BlC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,YAAY;IAiB3B;;OAEG;IACH,MAAM,CAAC,wBAAwB,CAAC,IAAI,EAAE,IAAI,GAAG;QAC3C,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;KAChB;IAyBD;;OAEG;IACH,MAAM,CAAC,mBAAmB,CACxB,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,gBAAgB,GACvB;QACD,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;KACpB;CAiCF"}