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,606 @@
1
+ "use strict";
2
+ /**
3
+ * BaZi Core Calculator
4
+ * Enhanced with taro-bazi astronomical calculations
5
+ * Language-agnostic core calculations
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.BaziCore = void 0;
9
+ const bazi_1 = require("../../core/constants/bazi");
10
+ const TrueSolarTime_1 = require("./TrueSolarTime");
11
+ const SolarTermCalculator_1 = require("./SolarTermCalculator");
12
+ const lunar_javascript_1 = require("lunar-javascript");
13
+ class BaziCore {
14
+ constructor() {
15
+ // PreciseCalendar uses static methods, no need to instantiate
16
+ }
17
+ /**
18
+ * Main calculation method
19
+ * Calculates the four pillars based on birth information
20
+ */
21
+ async calculate(input) {
22
+ // Step 1: Create date object
23
+ let birthDate = new Date(input.year, input.month - 1, input.day, input.hour, input.minute || 0);
24
+ // Step 2: Apply true solar time if longitude provided
25
+ let trueSolarTime;
26
+ let trueSolarTimeStr;
27
+ if (input.longitude !== undefined) {
28
+ trueSolarTimeStr = (0, SolarTermCalculator_1.getTrueSolarTime)(input.year, input.month, input.day, `${input.hour}:${input.minute || 0}:0`, input.longitude);
29
+ // Parse true solar time string back to adjust birth date
30
+ trueSolarTime = TrueSolarTime_1.TrueSolarTime.adjust(birthDate, input.longitude);
31
+ birthDate = trueSolarTime;
32
+ }
33
+ // Step 3: Calculate solar terms using lunar-javascript
34
+ const solar = lunar_javascript_1.Solar.fromYmdHms(birthDate.getFullYear(), birthDate.getMonth() + 1, birthDate.getDate(), birthDate.getHours(), birthDate.getMinutes(), birthDate.getSeconds());
35
+ const lunar = solar.getLunar();
36
+ // Get the previous Jie to determine the current month
37
+ const prevJie = lunar.getPrevJie();
38
+ const solarTerm = prevJie ? prevJie.getName() : '立春'; // Default to LiChun if no term found
39
+ // Calculate if it's current month solar term
40
+ const monthZhi = SolarTermCalculator_1.SOLAR_TERM_TO_ZHI[solarTerm] || '卯';
41
+ const isCurrentMonthSolarTerm = true; // Simplified for now
42
+ // Get adjacent solar term times (simplified)
43
+ const adjacentSolarTermTime = {
44
+ previous: '',
45
+ next: ''
46
+ };
47
+ // Step 4: Calculate four pillars with solar term consideration
48
+ const chart = this.calculateHoroscope(input.year, input.month, input.day, input.hour, solarTerm, isCurrentMonthSolarTerm);
49
+ // Step 5: Get lunar date (already calculated above)
50
+ const rawMonth = lunar.getMonth();
51
+ const lunarDate = {
52
+ year: lunar.getYear(),
53
+ month: Math.abs(rawMonth),
54
+ day: lunar.getDay(),
55
+ hour: solar.getHour(),
56
+ isLeapMonth: rawMonth < 0,
57
+ monthName: lunar.getMonthInChinese(),
58
+ dayName: lunar.getDayInChinese()
59
+ };
60
+ // Step 6: Calculate derived information
61
+ const dayMasterElement = this.getStemElement(chart.day.stem);
62
+ const zodiac = this.getZodiac(chart.year.branch);
63
+ const naYin = this.getNaYin(chart.year);
64
+ const fiveElements = this.calculateFiveElements(chart);
65
+ // Step 7: Calculate additional features from taro-bazi
66
+ const voidBranches = this.calculateVoidBranches(chart.day);
67
+ const twelveGrowthStages = await this.calculateTwelveGrowthStages(chart);
68
+ return {
69
+ chart,
70
+ birthInfo: {
71
+ solar: birthDate,
72
+ lunar: lunarDate,
73
+ trueSolarTime,
74
+ solarTerm,
75
+ adjacentSolarTermTime
76
+ },
77
+ zodiac,
78
+ dayMasterElement,
79
+ naYin,
80
+ fiveElements,
81
+ voidBranches,
82
+ twelveGrowthStages
83
+ };
84
+ }
85
+ /**
86
+ * Calculate four pillars based on taro-bazi logic
87
+ */
88
+ calculateHoroscope(year, month, day, hour, solarTerm, isCurrentMonthSolarTerm) {
89
+ // Calculate year pillar
90
+ const { yearGan, yearZhi } = this.calculateYearPillar(year, month, isCurrentMonthSolarTerm);
91
+ // Calculate month pillar
92
+ const { monthGan, monthZhi } = this.calculateMonthPillar(yearGan, month, solarTerm, isCurrentMonthSolarTerm);
93
+ // Calculate day pillar
94
+ const { dayGan, dayZhi } = this.calculateDayPillar(year, month, day, hour);
95
+ // Calculate hour pillar
96
+ const { hourGan, hourZhi } = this.calculateHourPillar(dayGan, hour);
97
+ // Create pillars - each calculates its own void branches
98
+ const chart = {
99
+ year: this.createPillar(yearGan, yearZhi),
100
+ month: this.createPillar(monthGan, monthZhi),
101
+ day: this.createPillar(dayGan, dayZhi),
102
+ hour: this.createPillar(hourGan, hourZhi)
103
+ };
104
+ // Update self-sitting for each pillar using its OWN stem
105
+ chart.year.selfSitting = this.calculateSelfSitting(yearGan, yearZhi);
106
+ chart.month.selfSitting = this.calculateSelfSitting(monthGan, monthZhi);
107
+ chart.day.selfSitting = this.calculateSelfSitting(dayGan, dayZhi);
108
+ chart.hour.selfSitting = this.calculateSelfSitting(hourGan, hourZhi);
109
+ return chart;
110
+ }
111
+ /**
112
+ * Calculate year pillar using lunar-javascript
113
+ */
114
+ calculateYearPillar(year, month, isCurrentMonthSolarTerm) {
115
+ // Get year GanZhi from lunar-javascript
116
+ const solar = lunar_javascript_1.Solar.fromYmd(year, month, 15); // Use middle of month
117
+ const lunar = solar.getLunar();
118
+ // Get year GanZhi
119
+ const yearGanZhi = lunar.getYearInGanZhi();
120
+ return {
121
+ yearGan: yearGanZhi.substring(0, 1),
122
+ yearZhi: yearGanZhi.substring(1, 2)
123
+ };
124
+ }
125
+ /**
126
+ * Calculate month pillar based on solar term
127
+ */
128
+ calculateMonthPillar(yearGan, month, solarTerm, isCurrentMonthSolarTerm) {
129
+ // Normalize solar term to simplified form to avoid zh-TW/zh-CN mismatch
130
+ const normalizedTerm = this.normalizeSolarTerm(solarTerm);
131
+ // Get the month branch from solar term (fallback to 丑 if unknown)
132
+ const monthZhi = SolarTermCalculator_1.SOLAR_TERM_TO_ZHI[normalizedTerm] || bazi_1.EARTHLY_BRANCHES[1].name;
133
+ // Map branch to solar term month index (寅=0, 卯=1, ..., 丑=11)
134
+ const zhiToMonthIndex = {
135
+ '寅': 0, '卯': 1, '辰': 2, '巳': 3,
136
+ '午': 4, '未': 5, '申': 6, '酉': 7,
137
+ '戌': 8, '亥': 9, '子': 10, '丑': 11
138
+ };
139
+ const solarTermMonthIndex = zhiToMonthIndex[monthZhi] ?? 1;
140
+ // Five Tigers Escape (五虎遁) for month stem
141
+ const fiveTigersDict = {
142
+ '甲': '丙', '己': '丙',
143
+ '乙': '戊', '庚': '戊',
144
+ '丙': '庚', '辛': '庚',
145
+ '丁': '壬', '壬': '壬',
146
+ '戊': '甲', '癸': '甲'
147
+ };
148
+ const startGan = fiveTigersDict[yearGan];
149
+ const startGanIndex = bazi_1.HEAVENLY_STEMS.findIndex(s => s.name === startGan);
150
+ // Calculate month stem based on solar term month
151
+ const ganIndex = (startGanIndex + solarTermMonthIndex) % 10;
152
+ return {
153
+ monthGan: bazi_1.HEAVENLY_STEMS[ganIndex].name,
154
+ monthZhi: monthZhi
155
+ };
156
+ }
157
+ /**
158
+ * Normalize solar term names to simplified Chinese keys used by SOLAR_TERM_TO_ZHI
159
+ */
160
+ normalizeSolarTerm(term) {
161
+ // Quick exit for exact matches
162
+ if (SolarTermCalculator_1.SOLAR_TERM_TO_ZHI[term])
163
+ return term;
164
+ const map = {
165
+ '驚蟄': '惊蛰',
166
+ '處暑': '处暑',
167
+ '穀雨': '谷雨',
168
+ '小滿': '小满',
169
+ '大雪': '大雪',
170
+ '小雪': '小雪',
171
+ '霜降': '霜降',
172
+ '白露': '白露',
173
+ '秋分': '秋分',
174
+ '寒露': '寒露',
175
+ '立冬': '立冬',
176
+ '小寒': '小寒',
177
+ '大寒': '大寒',
178
+ '立春': '立春',
179
+ '雨水': '雨水',
180
+ '春分': '春分',
181
+ '清明': '清明',
182
+ '立夏': '立夏',
183
+ '芒種': '芒种',
184
+ '夏至': '夏至',
185
+ '小暑': '小暑',
186
+ '大暑': '大暑',
187
+ '立秋': '立秋',
188
+ '冬至': '冬至'
189
+ };
190
+ // Remove whitespace and normalize punctuation
191
+ const clean = term.replace(/\s+/g, '');
192
+ return map[clean] || clean;
193
+ }
194
+ /**
195
+ * Calculate day pillar
196
+ */
197
+ calculateDayPillar(year, month, day, hour) {
198
+ // Use lunar-javascript for accurate day pillar calculation
199
+ const solar = lunar_javascript_1.Solar.fromYmd(year, month, day);
200
+ const lunar = solar.getLunar();
201
+ // Get day GanZhi directly from lunar-javascript
202
+ const dayGanZhi = lunar.getDayInGanZhi();
203
+ // Split GanZhi into Gan and Zhi
204
+ const dayGan = dayGanZhi.substring(0, 1);
205
+ const dayZhi = dayGanZhi.substring(1, 2);
206
+ return {
207
+ dayGan,
208
+ dayZhi
209
+ };
210
+ }
211
+ /**
212
+ * Calculate hour pillar
213
+ */
214
+ calculateHourPillar(dayGan, hour) {
215
+ // Five Rats Escape (五鼠遁) for hour stem
216
+ const fiveRatsDict = {
217
+ '甲': '甲', '己': '甲',
218
+ '乙': '丙', '庚': '丙',
219
+ '丙': '戊', '辛': '戊',
220
+ '丁': '庚', '壬': '庚',
221
+ '戊': '壬', '癸': '壬'
222
+ };
223
+ const startGan = fiveRatsDict[dayGan];
224
+ const startGanIndex = bazi_1.HEAVENLY_STEMS.findIndex(s => s.name === startGan);
225
+ const zhiIndex = Math.ceil(hour / 2) % 12;
226
+ const ganIndex = (startGanIndex + zhiIndex) % 10;
227
+ return {
228
+ hourGan: bazi_1.HEAVENLY_STEMS[ganIndex].name,
229
+ hourZhi: bazi_1.EARTHLY_BRANCHES[zhiIndex].name
230
+ };
231
+ }
232
+ /**
233
+ * Create a pillar with hidden stems and Na Yin
234
+ */
235
+ createPillar(stem, branch) {
236
+ const hiddenStems = this.getHiddenStems(branch);
237
+ const naYin = bazi_1.NA_YIN[`${stem}${branch}`] || '';
238
+ // Self-sitting will be calculated later based on day stem
239
+ const selfSitting = '';
240
+ // Calculate void branches for this pillar
241
+ const voidBranches = this.calculateVoidBranches({ stem, branch });
242
+ const isVoid = voidBranches.includes(branch);
243
+ return {
244
+ stem,
245
+ branch,
246
+ hiddenStems,
247
+ naYin,
248
+ selfSitting,
249
+ void: isVoid,
250
+ voidBranches
251
+ };
252
+ }
253
+ /**
254
+ * Get hidden stems for a branch
255
+ */
256
+ getHiddenStems(branch) {
257
+ const stems = bazi_1.HIDDEN_STEMS[branch];
258
+ if (!stems)
259
+ return [];
260
+ return stems.map((stem, index) => ({
261
+ stem: stem.stem,
262
+ power: stem.power,
263
+ isMain: index === 0
264
+ }));
265
+ }
266
+ /**
267
+ * Get element of a heavenly stem
268
+ */
269
+ getStemElement(stem) {
270
+ const stemData = bazi_1.HEAVENLY_STEMS.find(s => s.name === stem);
271
+ return stemData?.element || '';
272
+ }
273
+ /**
274
+ * Get element of an earthly branch
275
+ */
276
+ getBranchElement(branch) {
277
+ const branchData = bazi_1.EARTHLY_BRANCHES.find(b => b.name === branch);
278
+ return branchData?.element || '';
279
+ }
280
+ /**
281
+ * Get zodiac animal for a branch
282
+ */
283
+ getZodiac(branch) {
284
+ const branchData = bazi_1.EARTHLY_BRANCHES.find(b => b.name === branch);
285
+ return branchData?.zodiac || branch;
286
+ }
287
+ /**
288
+ * Get Na Yin information
289
+ */
290
+ getNaYin(pillar) {
291
+ const naYinName = pillar.naYin || '';
292
+ const element = this.extractNaYinElement(naYinName);
293
+ return {
294
+ name: naYinName,
295
+ element,
296
+ meaning: this.getNaYinMeaning(naYinName)
297
+ };
298
+ }
299
+ /**
300
+ * Extract element from Na Yin name
301
+ */
302
+ extractNaYinElement(naYin) {
303
+ for (const element of bazi_1.FIVE_ELEMENTS) {
304
+ if (naYin.includes(element.name)) {
305
+ return element.name;
306
+ }
307
+ }
308
+ return '';
309
+ }
310
+ /**
311
+ * Get Na Yin meaning
312
+ */
313
+ getNaYinMeaning(naYin) {
314
+ // Simplified - in real implementation, would have detailed meanings
315
+ const meanings = {
316
+ '海中金': '海中之金,深藏不露',
317
+ '爐中火': '爐中之火,煉化萬物',
318
+ '大林木': '大林之木,挺拔向上',
319
+ '路旁土': '路旁之土,承載萬物',
320
+ '劍鋒金': '劍鋒之金,鋒芒畢露',
321
+ // ... more meanings
322
+ };
323
+ return meanings[naYin] || naYin;
324
+ }
325
+ /**
326
+ * Calculate five elements distribution
327
+ */
328
+ calculateFiveElements(chart) {
329
+ const count = {
330
+ 木: 0,
331
+ 火: 0,
332
+ 土: 0,
333
+ 金: 0,
334
+ 水: 0
335
+ };
336
+ // Count stems
337
+ const stems = [chart.year.stem, chart.month.stem, chart.day.stem, chart.hour.stem];
338
+ stems.forEach(stem => {
339
+ const element = this.getStemElement(stem);
340
+ if (element)
341
+ count[element]++;
342
+ });
343
+ // Count branches (main qi)
344
+ const branches = [chart.year.branch, chart.month.branch, chart.day.branch, chart.hour.branch];
345
+ branches.forEach(branch => {
346
+ const element = this.getBranchElement(branch);
347
+ if (element)
348
+ count[element]++;
349
+ });
350
+ // Count hidden stems
351
+ const allPillars = [chart.year, chart.month, chart.day, chart.hour];
352
+ allPillars.forEach(pillar => {
353
+ if (pillar.hiddenStems) {
354
+ pillar.hiddenStems.forEach(hidden => {
355
+ const element = this.getStemElement(hidden.stem);
356
+ if (element)
357
+ count[element] += hidden.power;
358
+ });
359
+ }
360
+ });
361
+ // Calculate total and balance
362
+ const total = Object.values(count).reduce((sum, val) => sum + val, 0);
363
+ const elements = Object.entries(count).map(([elem, val]) => ({ element: elem, count: val }));
364
+ const sorted = elements.sort((a, b) => b.count - a.count);
365
+ const missing = bazi_1.FIVE_ELEMENTS
366
+ .filter(e => count[e.name] === 0)
367
+ .map(e => e.name);
368
+ const balance = {
369
+ strongest: sorted[0].element,
370
+ weakest: sorted[sorted.length - 1].element,
371
+ missing,
372
+ distribution: this.evaluateDistribution(count, total)
373
+ };
374
+ return {
375
+ 木: count['木'],
376
+ 火: count['火'],
377
+ 土: count['土'],
378
+ 金: count['金'],
379
+ 水: count['水'],
380
+ total,
381
+ balance
382
+ };
383
+ }
384
+ /**
385
+ * Evaluate element distribution
386
+ */
387
+ evaluateDistribution(count, total) {
388
+ const values = Object.values(count);
389
+ const avg = total / 5;
390
+ const deviations = values.map(v => Math.abs(v - avg));
391
+ const maxDeviation = Math.max(...deviations);
392
+ if (maxDeviation < avg * 0.5)
393
+ return '平衡';
394
+ if (maxDeviation < avg * 1.0)
395
+ return '失衡';
396
+ return '严重失衡';
397
+ }
398
+ /**
399
+ * Calculate twelve growth stages based on taro-bazi logic
400
+ */
401
+ async calculateTwelveGrowthStages(chart) {
402
+ const dayGan = chart.day.stem;
403
+ const dayGanIndex = bazi_1.HEAVENLY_STEMS.findIndex(s => s.name === dayGan);
404
+ const twelveGrowInfo = {};
405
+ const twelvegGrowthStages = [
406
+ '長生', '沐浴', '冠帶', '臨官', '帝旺', '衰',
407
+ '病', '死', '墓', '絕', '胎', '養'
408
+ ];
409
+ // Yang stems go forward, Yin stems go backward
410
+ if (dayGanIndex % 2 === 0) {
411
+ // Yang day master - forward
412
+ const offsetMap = {
413
+ '甲': 1, // 木 starts at 亥
414
+ '丙': -2, // 火 starts at 寅
415
+ '戊': -2, // 土 starts at 寅
416
+ '庚': -5, // 金 starts at 巳
417
+ '壬': -8 // 水 starts at 申
418
+ };
419
+ const offset = offsetMap[dayGan] || 0;
420
+ bazi_1.EARTHLY_BRANCHES.forEach((branch, index) => {
421
+ const stageIndex = (index + offset + 12) % 12;
422
+ twelveGrowInfo[branch.name] = twelvegGrowthStages[stageIndex];
423
+ });
424
+ }
425
+ else {
426
+ // Yin day master - backward
427
+ const offsetMap = {
428
+ '乙': -6, // 木 starts at 午
429
+ '丁': -3, // 火 starts at 酉
430
+ '己': -3, // 土 starts at 酉
431
+ '辛': 0, // 金 starts at 子
432
+ '癸': 3 // 水 starts at 卯
433
+ };
434
+ const offset = offsetMap[dayGan] || 0;
435
+ bazi_1.EARTHLY_BRANCHES.forEach((branch, index) => {
436
+ const stageIndex = ((-index + offset + 12) % 12 + 12) % 12;
437
+ twelveGrowInfo[branch.name] = twelvegGrowthStages[stageIndex];
438
+ });
439
+ }
440
+ // Build result for each pillar
441
+ const branches = [
442
+ { branch: chart.year.branch, position: 'year' },
443
+ { branch: chart.month.branch, position: 'month' },
444
+ { branch: chart.day.branch, position: 'day' },
445
+ { branch: chart.hour.branch, position: 'hour' }
446
+ ];
447
+ return branches.map(({ branch, position }) => {
448
+ const stage = twelveGrowInfo[branch];
449
+ const stageInfo = this.getGrowthStageInfo(stage);
450
+ return {
451
+ stage,
452
+ element: this.getStemElement(dayGan),
453
+ branch,
454
+ meaning: stageInfo.meaning,
455
+ strength: stageInfo.strength
456
+ };
457
+ });
458
+ }
459
+ /**
460
+ * Get growth stage information
461
+ */
462
+ getGrowthStageInfo(stage) {
463
+ const stageInfo = {
464
+ '長生': { meaning: 'Birth - New beginning', strength: 0.8 },
465
+ '沐浴': { meaning: 'Bath - Cleansing', strength: 0.6 },
466
+ '冠帶': { meaning: 'Crown - Coming of age', strength: 0.9 },
467
+ '臨官': { meaning: 'Official - Peak career', strength: 1.0 },
468
+ '帝旺': { meaning: 'Emperor - Maximum power', strength: 1.2 },
469
+ '衰': { meaning: 'Decline - Weakening', strength: 0.7 },
470
+ '病': { meaning: 'Sick - Illness', strength: 0.5 },
471
+ '死': { meaning: 'Death - End', strength: 0.3 },
472
+ '墓': { meaning: 'Tomb - Storage', strength: 0.4 },
473
+ '絕': { meaning: 'Extinction - Void', strength: 0.2 },
474
+ '胎': { meaning: 'Embryo - Conception', strength: 0.5 },
475
+ '養': { meaning: 'Nurture - Growth', strength: 0.6 }
476
+ };
477
+ return stageInfo[stage] || { meaning: stage, strength: 0.5 };
478
+ }
479
+ /**
480
+ * Calculate self-sitting relationship (自坐)
481
+ * Uses the twelve growth stages (十二长生) system
482
+ * Based on taro-bazi implementation
483
+ */
484
+ calculateSelfSitting(stem, branch) {
485
+ // Twelve growth stages in order
486
+ const twelveGrowthStages = [
487
+ '长生', '沐浴', '冠带', '临官', '帝旺',
488
+ '衰', '病', '死', '墓', '绝', '胎', '养'
489
+ ];
490
+ // Get branch index
491
+ const branchIndex = bazi_1.EARTHLY_BRANCHES.findIndex(b => b.name === branch);
492
+ if (branchIndex === -1)
493
+ return '';
494
+ // Get stem index to determine offset
495
+ const stemIndex = bazi_1.HEAVENLY_STEMS.findIndex(s => s.name === stem);
496
+ if (stemIndex === -1)
497
+ return '';
498
+ // Use taro-bazi offsets for twelve growth stages calculation
499
+ // These offsets have been verified to produce correct results
500
+ const offsetMap = {
501
+ '甲': 1, // Yang Wood
502
+ '乙': -6, // Yin Wood
503
+ '丙': -2, // Yang Fire
504
+ '丁': -3, // Yin Fire
505
+ '戊': -2, // Yang Earth (same as Yang Fire)
506
+ '己': -3, // Yin Earth (same as Yin Fire)
507
+ '庚': -5, // Yang Metal
508
+ '辛': 0, // Yin Metal
509
+ '壬': -8, // Yang Water
510
+ '癸': 3 // Yin Water
511
+ };
512
+ const offset = offsetMap[stem] || 0;
513
+ // Calculate stage index
514
+ let stageIndex;
515
+ if (stemIndex % 2 === 0) {
516
+ // Yang stems (even index) - forward progression
517
+ stageIndex = (branchIndex + offset + 12) % 12;
518
+ }
519
+ else {
520
+ // Yin stems (odd index) - reverse progression
521
+ stageIndex = ((-branchIndex + offset + 12) % 12 + 12) % 12;
522
+ }
523
+ return twelveGrowthStages[stageIndex];
524
+ }
525
+ /**
526
+ * Calculate void branches (空亡) based on taro-bazi logic
527
+ */
528
+ calculateVoidBranches(pillar) {
529
+ const gan = pillar.stem;
530
+ const zhi = pillar.branch;
531
+ const ganIndex = bazi_1.HEAVENLY_STEMS.findIndex(s => s.name === gan);
532
+ const zhiIndex = bazi_1.EARTHLY_BRANCHES.findIndex(b => b.name === zhi);
533
+ if (ganIndex === -1 || zhiIndex === -1)
534
+ return [];
535
+ let diffIndex = zhiIndex - ganIndex;
536
+ diffIndex = diffIndex < 0 ? diffIndex + 11 : diffIndex;
537
+ // Determine void branches based on JiaZi cycle pattern
538
+ if (diffIndex === 0 || diffIndex === 11)
539
+ return ['戌', '亥']; // 甲子旬
540
+ if (diffIndex === 9 || diffIndex === 10)
541
+ return ['申', '酉']; // 甲戌旬
542
+ if (diffIndex === 7 || diffIndex === 8)
543
+ return ['午', '未']; // 甲申旬
544
+ if (diffIndex === 5 || diffIndex === 6)
545
+ return ['辰', '巳']; // 甲午旬
546
+ if (diffIndex === 3 || diffIndex === 4)
547
+ return ['寅', '卯']; // 甲辰旬
548
+ if (diffIndex === 1 || diffIndex === 2)
549
+ return ['子', '丑']; // 甲寅旬
550
+ return [];
551
+ }
552
+ /**
553
+ * Calculate month strength
554
+ */
555
+ calculateMonthStrength(chart, birthInfo) {
556
+ const monthBranch = chart.month.branch;
557
+ const season = this.getSeason(monthBranch);
558
+ const dayMasterElement = this.getStemElement(chart.day.stem);
559
+ // Calculate strength based on seasonal support
560
+ let strength = 1.0;
561
+ // Element-season relationships
562
+ const seasonSupport = {
563
+ '春': { '木': 1.5, '火': 1.2, '土': 0.8, '金': 0.6, '水': 0.9 },
564
+ '夏': { '木': 0.9, '火': 1.5, '土': 1.2, '金': 0.7, '水': 0.6 },
565
+ '秋': { '木': 0.6, '火': 0.8, '土': 1.1, '金': 1.5, '水': 1.2 },
566
+ '冬': { '木': 1.2, '火': 0.6, '土': 0.9, '金': 0.8, '水': 1.5 }
567
+ };
568
+ if (seasonSupport[season] && seasonSupport[season][dayMasterElement]) {
569
+ strength = seasonSupport[season][dayMasterElement];
570
+ }
571
+ return strength;
572
+ }
573
+ /**
574
+ * Get season from month branch
575
+ */
576
+ getSeason(monthBranch) {
577
+ const branchSeasons = {
578
+ '寅': '春', '卯': '春', '辰': '春',
579
+ '巳': '夏', '午': '夏', '未': '夏',
580
+ '申': '秋', '酉': '秋', '戌': '秋',
581
+ '亥': '冬', '子': '冬', '丑': '冬'
582
+ };
583
+ return branchSeasons[monthBranch] || '春';
584
+ }
585
+ /**
586
+ * Get birth info for other calculations
587
+ */
588
+ async getBirthInfo(year, month, day, hour) {
589
+ const solar = lunar_javascript_1.Solar.fromYmdHms(year, month, day, hour, 0, 0);
590
+ const lunar = solar.getLunar();
591
+ const rawMonth = lunar.getMonth();
592
+ return {
593
+ solar: new Date(year, month - 1, day, hour),
594
+ lunar: {
595
+ year: lunar.getYear(),
596
+ month: Math.abs(rawMonth),
597
+ day: lunar.getDay(),
598
+ isLeapMonth: rawMonth < 0,
599
+ monthName: lunar.getMonthInChinese(),
600
+ dayName: lunar.getDayInChinese()
601
+ }
602
+ };
603
+ }
604
+ }
605
+ exports.BaziCore = BaziCore;
606
+ //# sourceMappingURL=BaziCore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaziCore.js","sourceRoot":"","sources":["../../../src/core/bazi/BaziCore.ts"],"names":[],"mappings":"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"}