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,139 @@
1
+ "use strict";
2
+ /**
3
+ * 流时计算器
4
+ * 计算指定时辰的流时信息
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.HourlyCalculator = void 0;
8
+ const types_1 = require("../../../services/ziwei/types");
9
+ class HourlyCalculator {
10
+ // 时辰名称
11
+ static HOUR_NAMES = ['子', '丑', '寅', '卯', '辰', '巳', '午', '未', '申', '酉', '戌', '亥'];
12
+ // 时辰时间范围
13
+ static HOUR_RANGES = [
14
+ '23:00-01:00', '01:00-03:00', '03:00-05:00', '05:00-07:00',
15
+ '07:00-09:00', '09:00-11:00', '11:00-13:00', '13:00-15:00',
16
+ '15:00-17:00', '17:00-19:00', '19:00-21:00', '21:00-23:00'
17
+ ];
18
+ /**
19
+ * 计算指定时辰的流时信息(使用新的流時算法)
20
+ *
21
+ * 新流時法:
22
+ * 1. 找到本命盤中「子」宮的位置(哪個宮位)
23
+ * 2. 這個宮位就是「日斗君」
24
+ * 3. 流日的這個宮位就是「子時命宮」
25
+ * 4. 其他時辰順時針推算
26
+ */
27
+ static calculate(adapter, year, month, day, hour // 0-23
28
+ ) {
29
+ try {
30
+ const dateStr = `${year}-${month.toString().padStart(2, '0')}-${day.toString().padStart(2, '0')}`;
31
+ const hourIndex = types_1.HOUR_TO_INDEX[hour] || 0;
32
+ // 獲取本命盤的所有宮位
33
+ const palaces = adapter.getPalaces();
34
+ if (!palaces || palaces.length === 0) {
35
+ return null;
36
+ }
37
+ // 找到本命盤中「子」宮的位置(哪個宮位)
38
+ const ziPalace = palaces.find(p => p.earthlyBranch === '子');
39
+ if (!ziPalace) {
40
+ console.error('找不到子宮');
41
+ return null;
42
+ }
43
+ // 獲取「日斗君」- 即子宮所在的宮位名稱
44
+ const riDouJun = ziPalace.name; // 例如:兄弟宮
45
+ // 獲取流日信息
46
+ const horoscope = adapter.getHoroscope(dateStr);
47
+ if (!horoscope?.daily) {
48
+ return null;
49
+ }
50
+ // 獲取流日的宮位名稱(用於顯示)
51
+ const dailyPalaceNames = horoscope.daily.palaceNames || [];
52
+ // 找到日斗君(riDouJun)在流日盤中的索引
53
+ // riDouJun 是本命盤子宮的名稱(比如"官祿宮")
54
+ // 我們需要在流日盤中找到這個宮位的索引
55
+ const riDouJunIndexInDaily = dailyPalaceNames.indexOf(riDouJun);
56
+ if (riDouJunIndexInDaily === -1) {
57
+ console.error('在流日盤中找不到日斗君宮位:', riDouJun);
58
+ return null;
59
+ }
60
+ // 計算流時命宮索引
61
+ // riDouJunIndexInDaily 是子時命宮的位置
62
+ // 其他時辰順時針推算
63
+ const hourlyPalaceIndex = (riDouJunIndexInDaily + hourIndex) % 12;
64
+ // 獲取流時的天干地支
65
+ const hourlyBranch = this.HOUR_NAMES[hourIndex];
66
+ // 計算時干(需要日干來推算)
67
+ const dayStem = horoscope.daily?.heavenlyStem || '';
68
+ const hourlyStem = this.calculateHourlyStem(dayStem, hourIndex);
69
+ // 計算流時四化
70
+ const hourlyMutagen = adapter.getMutagenByStem(hourlyStem);
71
+ const mutagenList = [
72
+ `化祿:${hourlyMutagen.lu}`,
73
+ `化權:${hourlyMutagen.quan}`,
74
+ `化科:${hourlyMutagen.ke}`,
75
+ `化忌:${hourlyMutagen.ji}`
76
+ ];
77
+ // 計算流時的宮位名稱
78
+ // hourlyPalaceIndex 是流時命宮的位置
79
+ const PALACE_ORDER = ['命宮', '父母宮', '福德宮', '田宅宮', '官祿宮', '僕役宮', '遷移宮', '疾厄宮', '財帛宮', '子女宮', '夫妻宮', '兄弟宮'];
80
+ const hourlyPalaceNames = new Array(12);
81
+ for (let i = 0; i < 12; i++) {
82
+ // 從流時命宮開始,順時針排列宮位名稱
83
+ const palaceOrderIndex = (i - hourlyPalaceIndex + 12) % 12;
84
+ hourlyPalaceNames[i] = PALACE_ORDER[palaceOrderIndex];
85
+ }
86
+ return {
87
+ year,
88
+ month,
89
+ day,
90
+ hour,
91
+ heavenlyStem: hourlyStem,
92
+ earthlyBranch: hourlyBranch,
93
+ palaceIndex: hourlyPalaceIndex,
94
+ mutagen: mutagenList,
95
+ palaceNames: hourlyPalaceNames,
96
+ timeRange: this.HOUR_RANGES[hourIndex] || ''
97
+ };
98
+ }
99
+ catch (error) {
100
+ console.error('计算流时失败:', error);
101
+ return null;
102
+ }
103
+ }
104
+ /**
105
+ * 根據日干計算時干
106
+ * 使用五虎遁法
107
+ */
108
+ static calculateHourlyStem(dayStem, hourIndex) {
109
+ const stemCycle = ['甲', '乙', '丙', '丁', '戊', '己', '庚', '辛', '壬', '癸'];
110
+ // 五虎遁起始干支對照表
111
+ const startStemMap = {
112
+ '甲': 0, '己': 0, // 甲己起甲子
113
+ '乙': 2, '庚': 2, // 乙庚起丙子
114
+ '丙': 4, '辛': 4, // 丙辛起戊子
115
+ '丁': 6, '壬': 6, // 丁壬起庚子
116
+ '戊': 8, '癸': 8 // 戊癸起壬子
117
+ };
118
+ const startIndex = startStemMap[dayStem] || 0;
119
+ const stemIndex = (startIndex + hourIndex) % 10;
120
+ return stemCycle[stemIndex];
121
+ }
122
+ /**
123
+ * 获取一天的所有时辰信息
124
+ */
125
+ static calculateDay(adapter, year, month, day) {
126
+ const hours = [];
127
+ // 12个时辰
128
+ const hourMapping = [23, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21];
129
+ for (const hour of hourMapping) {
130
+ const hourlyInfo = this.calculate(adapter, year, month, day, hour);
131
+ if (hourlyInfo) {
132
+ hours.push(hourlyInfo);
133
+ }
134
+ }
135
+ return hours;
136
+ }
137
+ }
138
+ exports.HourlyCalculator = HourlyCalculator;
139
+ //# sourceMappingURL=HourlyCalculator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HourlyCalculator.js","sourceRoot":"","sources":["../../../../src/services/ziwei/calculators/HourlyCalculator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * 小限计算器
3
+ * 计算指定年份或年龄范围的小限信息
4
+ *
5
+ * 小限规则:
6
+ * - 以出生年支确定起始宫位
7
+ * - 男顺女逆运行
8
+ * - 每年一宫,12年一轮回
9
+ */
10
+ import { IztroAdapter } from '../../../core/ziwei/IztroAdapter';
11
+ import { Palace } from '../types';
12
+ export interface MinorLimitInfo {
13
+ age: number;
14
+ year: number;
15
+ palaceIndex: number;
16
+ heavenlyStem: string;
17
+ earthlyBranch: string;
18
+ palaceNames?: string[];
19
+ mutagen?: string[];
20
+ }
21
+ export declare class MinorLimitCalculator {
22
+ private static readonly MINOR_LIMIT_START;
23
+ static calculate(adapter: IztroAdapter, birthYear: number, targetYear: number): MinorLimitInfo | null;
24
+ static calculateRange(adapter: IztroAdapter, birthYear: number, startAge: number, endAge: number): MinorLimitInfo[];
25
+ static calculateByYearRange(adapter: IztroAdapter, birthYear: number, startYear: number, endYear: number): MinorLimitInfo[];
26
+ static calculateAll(adapter: IztroAdapter, birthYear: number, maxAge?: number): MinorLimitInfo[];
27
+ static getStartBranch(yearBranch: string): string;
28
+ static getMinorLimitPalaceIndex(yearBranch: string, gender: 'male' | 'female', age: number, palaces: Palace[]): number;
29
+ }
30
+ //# sourceMappingURL=MinorLimitCalculator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MinorLimitCalculator.d.ts","sourceRoot":"","sources":["../../../../src/services/ziwei/calculators/MinorLimitCalculator.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,MAAM,EAAoC,MAAM,UAAU,CAAC;AAGpE,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAKvC;IAEF,MAAM,CAAC,SAAS,CACd,OAAO,EAAE,YAAY,EACrB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GACjB,cAAc,GAAG,IAAI;IA0BxB,MAAM,CAAC,cAAc,CACnB,OAAO,EAAE,YAAY,EACrB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,cAAc,EAAE;IAcnB,MAAM,CAAC,oBAAoB,CACzB,OAAO,EAAE,YAAY,EACrB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,cAAc,EAAE;IAanB,MAAM,CAAC,YAAY,CACjB,OAAO,EAAE,YAAY,EACrB,SAAS,EAAE,MAAM,EACjB,MAAM,GAAE,MAAW,GAClB,cAAc,EAAE;IAInB,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAIjD,MAAM,CAAC,wBAAwB,CAC7B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GAAG,QAAQ,EACzB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EAAE,GAChB,MAAM;CAoBV"}
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ /**
3
+ * 小限计算器
4
+ * 计算指定年份或年龄范围的小限信息
5
+ *
6
+ * 小限规则:
7
+ * - 以出生年支确定起始宫位
8
+ * - 男顺女逆运行
9
+ * - 每年一宫,12年一轮回
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.MinorLimitCalculator = void 0;
13
+ const types_1 = require("../types");
14
+ class MinorLimitCalculator {
15
+ static MINOR_LIMIT_START = {
16
+ '寅': '辰', '午': '辰', '戌': '辰',
17
+ '申': '戌', '子': '戌', '辰': '戌',
18
+ '巳': '未', '酉': '未', '丑': '未',
19
+ '亥': '丑', '卯': '丑', '未': '丑'
20
+ };
21
+ static calculate(adapter, birthYear, targetYear) {
22
+ try {
23
+ const dateStr = `${targetYear}-06-15`;
24
+ const horoscope = adapter.getHoroscope(dateStr);
25
+ if (!horoscope?.age) {
26
+ return null;
27
+ }
28
+ const age = horoscope.age;
29
+ return {
30
+ age: age.nominalAge,
31
+ year: targetYear,
32
+ palaceIndex: age.index,
33
+ heavenlyStem: age.heavenlyStem || '',
34
+ earthlyBranch: age.earthlyBranch || '',
35
+ palaceNames: age.palaceNames || [],
36
+ mutagen: age.mutagen || []
37
+ };
38
+ }
39
+ catch (error) {
40
+ console.error('计算小限失败:', error);
41
+ return null;
42
+ }
43
+ }
44
+ static calculateRange(adapter, birthYear, startAge, endAge) {
45
+ const results = [];
46
+ for (let age = startAge; age <= endAge; age++) {
47
+ const targetYear = birthYear + age - 1;
48
+ const info = this.calculate(adapter, birthYear, targetYear);
49
+ if (info) {
50
+ results.push(info);
51
+ }
52
+ }
53
+ return results;
54
+ }
55
+ static calculateByYearRange(adapter, birthYear, startYear, endYear) {
56
+ const results = [];
57
+ for (let year = startYear; year <= endYear; year++) {
58
+ const info = this.calculate(adapter, birthYear, year);
59
+ if (info) {
60
+ results.push(info);
61
+ }
62
+ }
63
+ return results;
64
+ }
65
+ static calculateAll(adapter, birthYear, maxAge = 96) {
66
+ return this.calculateRange(adapter, birthYear, 1, maxAge);
67
+ }
68
+ static getStartBranch(yearBranch) {
69
+ return this.MINOR_LIMIT_START[yearBranch] || '辰';
70
+ }
71
+ static getMinorLimitPalaceIndex(yearBranch, gender, age, palaces) {
72
+ const startBranch = this.getStartBranch(yearBranch);
73
+ const startIndex = types_1.EARTHLY_BRANCHES.indexOf(startBranch);
74
+ if (startIndex === -1)
75
+ return 0;
76
+ const offset = (age - 1) % 12;
77
+ let targetBranchIndex;
78
+ if (gender === 'male') {
79
+ targetBranchIndex = (startIndex + offset) % 12;
80
+ }
81
+ else {
82
+ targetBranchIndex = (startIndex - offset + 12) % 12;
83
+ }
84
+ const targetBranch = types_1.EARTHLY_BRANCHES[targetBranchIndex];
85
+ const palaceIndex = palaces.findIndex(p => p.earthlyBranch === targetBranch);
86
+ return palaceIndex !== -1 ? palaceIndex : 0;
87
+ }
88
+ }
89
+ exports.MinorLimitCalculator = MinorLimitCalculator;
90
+ //# sourceMappingURL=MinorLimitCalculator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MinorLimitCalculator.js","sourceRoot":"","sources":["../../../../src/services/ziwei/calculators/MinorLimitCalculator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * 流月计算器
3
+ * 计算指定年月的流月信息
4
+ */
5
+ import { IztroAdapter } from '../../../core/ziwei/IztroAdapter';
6
+ export interface MonthlyInfo {
7
+ year: number;
8
+ month: number;
9
+ isLeapMonth?: boolean;
10
+ heavenlyStem: string;
11
+ earthlyBranch: string;
12
+ palaceIndex: number;
13
+ mutagen?: string[];
14
+ palaceNames?: string[];
15
+ startDate?: Date;
16
+ endDate?: Date;
17
+ }
18
+ export declare class MonthlyCalculator {
19
+ /**
20
+ * 计算指定年月的流月信息
21
+ * @param adapter - Iztro适配器
22
+ * @param year - 公历年份
23
+ * @param monthIndex - 农历月份索引(包含闰月的月份数组索引)
24
+ * @param lunarMonth - 农历月份号(1-12)
25
+ * @param isLeapMonth - 是否闰月
26
+ */
27
+ static calculate(adapter: IztroAdapter, year: number, monthIndex: number, lunarMonth?: number, isLeapMonth?: boolean): MonthlyInfo | null;
28
+ /**
29
+ * 获取指定农历年的闰月(如果有的话)
30
+ * @returns 闰月月份(1-12),如果没有闰月返回0
31
+ */
32
+ static getLeapMonth(year: number): number;
33
+ /**
34
+ * 批量计算一年的流月信息(农历月,包含闰月)
35
+ * 紫微斗数流月使用农历月,从正月到腊月,如有闰月则包含在内
36
+ */
37
+ static calculateYear(adapter: IztroAdapter, year: number): MonthlyInfo[];
38
+ }
39
+ //# sourceMappingURL=MonthlyCalculator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MonthlyCalculator.d.ts","sourceRoot":"","sources":["../../../../src/services/ziwei/calculators/MonthlyCalculator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAGhE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,OAAO,CAAC,EAAE,IAAI,CAAC;CAChB;AAED,qBAAa,iBAAiB;IAC5B;;;;;;;OAOG;IACH,MAAM,CAAC,SAAS,CACd,OAAO,EAAE,YAAY,EACrB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,UAAU,CAAC,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,OAAO,GACpB,WAAW,GAAG,IAAI;IAwErB;;;OAGG;IACH,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAkBzC;;;OAGG;IACH,MAAM,CAAC,aAAa,CAClB,OAAO,EAAE,YAAY,EACrB,IAAI,EAAE,MAAM,GACX,WAAW,EAAE;CAoBjB"}
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+ /**
3
+ * 流月计算器
4
+ * 计算指定年月的流月信息
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.MonthlyCalculator = void 0;
8
+ const lunar_javascript_1 = require("lunar-javascript");
9
+ class MonthlyCalculator {
10
+ /**
11
+ * 计算指定年月的流月信息
12
+ * @param adapter - Iztro适配器
13
+ * @param year - 公历年份
14
+ * @param monthIndex - 农历月份索引(包含闰月的月份数组索引)
15
+ * @param lunarMonth - 农历月份号(1-12)
16
+ * @param isLeapMonth - 是否闰月
17
+ */
18
+ static calculate(adapter, year, monthIndex, lunarMonth, isLeapMonth) {
19
+ try {
20
+ if (lunarMonth === undefined) {
21
+ const dateStr = `${year}-${(monthIndex + 1).toString().padStart(2, '0')}-15`;
22
+ const horoscope = adapter.getHoroscope(dateStr);
23
+ if (!horoscope?.monthly) {
24
+ return null;
25
+ }
26
+ const monthly = horoscope.monthly;
27
+ const palaceIndex = monthly.index !== undefined ? monthly.index : 0;
28
+ const startDate = new Date(year, monthIndex, 1);
29
+ const endDate = new Date(year, monthIndex + 1, 0);
30
+ return {
31
+ year,
32
+ month: monthIndex + 1,
33
+ isLeapMonth: false,
34
+ heavenlyStem: monthly.heavenlyStem || '',
35
+ earthlyBranch: monthly.earthlyBranch || '',
36
+ palaceIndex,
37
+ mutagen: monthly.mutagen || [],
38
+ palaceNames: monthly.palaceNames || [],
39
+ startDate,
40
+ endDate
41
+ };
42
+ }
43
+ const lunarYear = year;
44
+ const monthParam = isLeapMonth ? -lunarMonth : lunarMonth;
45
+ const lunarDate = lunar_javascript_1.Lunar.fromYmd(lunarYear, monthParam, 15);
46
+ const solarDate = lunarDate.getSolar();
47
+ const dateStr = `${solarDate.getYear()}-${solarDate.getMonth().toString().padStart(2, '0')}-${solarDate.getDay().toString().padStart(2, '0')}`;
48
+ const horoscope = adapter.getHoroscope(dateStr);
49
+ if (!horoscope?.monthly) {
50
+ return null;
51
+ }
52
+ const monthly = horoscope.monthly;
53
+ const palaceIndex = monthly.index !== undefined ? monthly.index : 0;
54
+ const firstDay = lunar_javascript_1.Lunar.fromYmd(lunarYear, monthParam, 1).getSolar();
55
+ let lastDayNum = 29;
56
+ try {
57
+ lunar_javascript_1.Lunar.fromYmd(lunarYear, monthParam, 30);
58
+ lastDayNum = 30;
59
+ }
60
+ catch {
61
+ // 只有29天
62
+ }
63
+ const lastDay = lunar_javascript_1.Lunar.fromYmd(lunarYear, monthParam, lastDayNum).getSolar();
64
+ return {
65
+ year,
66
+ month: lunarMonth,
67
+ isLeapMonth: isLeapMonth || false,
68
+ heavenlyStem: monthly.heavenlyStem || '',
69
+ earthlyBranch: monthly.earthlyBranch || '',
70
+ palaceIndex: palaceIndex !== -1 ? palaceIndex : 0,
71
+ mutagen: monthly.mutagen || [],
72
+ palaceNames: monthly.palaceNames || [],
73
+ startDate: new Date(firstDay.getYear(), firstDay.getMonth() - 1, firstDay.getDay()),
74
+ endDate: new Date(lastDay.getYear(), lastDay.getMonth() - 1, lastDay.getDay())
75
+ };
76
+ }
77
+ catch (error) {
78
+ console.error('计算流月失败:', error);
79
+ return null;
80
+ }
81
+ }
82
+ /**
83
+ * 获取指定农历年的闰月(如果有的话)
84
+ * @returns 闰月月份(1-12),如果没有闰月返回0
85
+ */
86
+ static getLeapMonth(year) {
87
+ try {
88
+ const lunar = lunar_javascript_1.Lunar.fromYmd(year, 1, 1);
89
+ const lunarYear = lunar.getYear();
90
+ for (let m = 1; m <= 12; m++) {
91
+ try {
92
+ lunar_javascript_1.Lunar.fromYmd(lunarYear, -m, 1);
93
+ return m;
94
+ }
95
+ catch {
96
+ // 该月没有闰月
97
+ }
98
+ }
99
+ return 0;
100
+ }
101
+ catch {
102
+ return 0;
103
+ }
104
+ }
105
+ /**
106
+ * 批量计算一年的流月信息(农历月,包含闰月)
107
+ * 紫微斗数流月使用农历月,从正月到腊月,如有闰月则包含在内
108
+ */
109
+ static calculateYear(adapter, year) {
110
+ const months = [];
111
+ const leapMonth = this.getLeapMonth(year);
112
+ for (let lunarMonth = 1; lunarMonth <= 12; lunarMonth++) {
113
+ const monthlyInfo = this.calculate(adapter, year, lunarMonth - 1, lunarMonth, false);
114
+ if (monthlyInfo) {
115
+ months.push(monthlyInfo);
116
+ }
117
+ if (leapMonth === lunarMonth) {
118
+ const leapMonthInfo = this.calculate(adapter, year, lunarMonth - 1, lunarMonth, true);
119
+ if (leapMonthInfo) {
120
+ months.push(leapMonthInfo);
121
+ }
122
+ }
123
+ }
124
+ return months;
125
+ }
126
+ }
127
+ exports.MonthlyCalculator = MonthlyCalculator;
128
+ //# sourceMappingURL=MonthlyCalculator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MonthlyCalculator.js","sourceRoot":"","sources":["../../../../src/services/ziwei/calculators/MonthlyCalculator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * 四化计算器
3
+ * 负责计算本命、大限、流年的四化信息
4
+ */
5
+ import { MutagenInfo, CompleteMutagenInfo, Palace } from '../types';
6
+ export declare class MutagenCalculator {
7
+ /**
8
+ * 根据天干获取四化(代理到核心系统)
9
+ */
10
+ static getMutagenByStem(stem: string): MutagenInfo;
11
+ /**
12
+ * 计算完整的四化信息
13
+ */
14
+ static calculateCompleteMutagen(natalStem: string, decadalStem?: string, yearlyStem?: string, language?: string, monthlyStem?: string, dailyStem?: string, hourlyStem?: string): CompleteMutagenInfo;
15
+ /**
16
+ * 为宫位中的星曜添加四化标记
17
+ */
18
+ static applyMutagenToPalaces(palaces: Palace[], mutagenInfo: CompleteMutagenInfo): Palace[];
19
+ }
20
+ //# sourceMappingURL=MutagenCalculator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MutagenCalculator.d.ts","sourceRoot":"","sources":["../../../../src/services/ziwei/calculators/MutagenCalculator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,MAAM,EACP,MAAM,UAAU,CAAC;AAGlB,qBAAa,iBAAiB;IAC5B;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW;IAIlD;;OAEG;IACH,MAAM,CAAC,wBAAwB,CAC7B,SAAS,EAAE,MAAM,EACjB,WAAW,CAAC,EAAE,MAAM,EACpB,UAAU,CAAC,EAAE,MAAM,EACnB,QAAQ,GAAE,MAAgB,EAC1B,WAAW,CAAC,EAAE,MAAM,EACpB,SAAS,CAAC,EAAE,MAAM,EAClB,UAAU,CAAC,EAAE,MAAM,GAClB,mBAAmB;IAiEtB;;OAEG;IACH,MAAM,CAAC,qBAAqB,CAC1B,OAAO,EAAE,MAAM,EAAE,EACjB,WAAW,EAAE,mBAAmB,GAC/B,MAAM,EAAE;CAyCZ"}
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+ /**
3
+ * 四化计算器
4
+ * 负责计算本命、大限、流年的四化信息
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.MutagenCalculator = void 0;
8
+ const MutagenCore_1 = require("../../../core/ziwei/MutagenCore");
9
+ class MutagenCalculator {
10
+ /**
11
+ * 根据天干获取四化(代理到核心系统)
12
+ */
13
+ static getMutagenByStem(stem) {
14
+ return MutagenCore_1.MutagenCore.getMutagen(stem) || { lu: '', quan: '', ke: '', ji: '' };
15
+ }
16
+ /**
17
+ * 计算完整的四化信息
18
+ */
19
+ static calculateCompleteMutagen(natalStem, decadalStem, yearlyStem, language = 'zh-CN', monthlyStem, dailyStem, hourlyStem) {
20
+ // 获取四化基本信息
21
+ const mutagenData = MutagenCore_1.MutagenCore.getCompleteMutagenInfo(natalStem, decadalStem, yearlyStem);
22
+ // 计算流月、流日、流时的四化
23
+ const monthlyMutagen = monthlyStem ? this.getMutagenByStem(monthlyStem) : undefined;
24
+ const dailyMutagen = dailyStem ? this.getMutagenByStem(dailyStem) : undefined;
25
+ const hourlyMutagen = hourlyStem ? this.getMutagenByStem(hourlyStem) : undefined;
26
+ // 获取语言相关的名称
27
+ const prefixes = MutagenCore_1.MutagenCore.getMutagenPrefixes(language);
28
+ const typeNames = MutagenCore_1.MutagenCore.getMutagenTypeNames(language);
29
+ // 扩展prefixes以支持流月、流日、流时
30
+ const extendedPrefixes = {
31
+ ...prefixes,
32
+ monthly: language === 'zh-CN' || language === 'zh-TW' ? '月' : 'M-',
33
+ daily: language === 'zh-CN' || language === 'zh-TW' ? '日' : 'D-',
34
+ hourly: language === 'zh-CN' || language === 'zh-TW' ? '時' : 'H-'
35
+ };
36
+ // 合并四化信息
37
+ const combined = new Map();
38
+ // 添加四化信息到map
39
+ const addMutagen = (mutagenInfo, prefix) => {
40
+ if (!mutagenInfo)
41
+ return;
42
+ if (mutagenInfo.lu) {
43
+ const existing = combined.get(mutagenInfo.lu) || [];
44
+ combined.set(mutagenInfo.lu, [...existing, `${prefix}${typeNames.lu}`]);
45
+ }
46
+ if (mutagenInfo.quan) {
47
+ const existing = combined.get(mutagenInfo.quan) || [];
48
+ combined.set(mutagenInfo.quan, [...existing, `${prefix}${typeNames.quan}`]);
49
+ }
50
+ if (mutagenInfo.ke) {
51
+ const existing = combined.get(mutagenInfo.ke) || [];
52
+ combined.set(mutagenInfo.ke, [...existing, `${prefix}${typeNames.ke}`]);
53
+ }
54
+ if (mutagenInfo.ji) {
55
+ const existing = combined.get(mutagenInfo.ji) || [];
56
+ combined.set(mutagenInfo.ji, [...existing, `${prefix}${typeNames.ji}`]);
57
+ }
58
+ };
59
+ // 添加各层级四化
60
+ addMutagen(mutagenData.natal, prefixes.natal);
61
+ if (mutagenData.decade)
62
+ addMutagen(mutagenData.decade, prefixes.decade);
63
+ if (mutagenData.yearly)
64
+ addMutagen(mutagenData.yearly, prefixes.yearly);
65
+ if (monthlyMutagen)
66
+ addMutagen(monthlyMutagen, extendedPrefixes.monthly);
67
+ if (dailyMutagen)
68
+ addMutagen(dailyMutagen, extendedPrefixes.daily);
69
+ if (hourlyMutagen)
70
+ addMutagen(hourlyMutagen, extendedPrefixes.hourly);
71
+ return {
72
+ natal: mutagenData.natal,
73
+ decadal: mutagenData.decade,
74
+ yearly: mutagenData.yearly,
75
+ monthly: monthlyMutagen,
76
+ daily: dailyMutagen,
77
+ hourly: hourlyMutagen,
78
+ combined
79
+ };
80
+ }
81
+ /**
82
+ * 为宫位中的星曜添加四化标记
83
+ */
84
+ static applyMutagenToPalaces(palaces, mutagenInfo) {
85
+ return palaces.map((palace) => {
86
+ // 处理主星
87
+ const majorStars = palace.majorStars.map(star => {
88
+ // Try to find mutagen for this star
89
+ let mutagens = mutagenInfo.combined.get(star.name) || [];
90
+ // Also try normalized name if no direct match
91
+ if (mutagens.length === 0) {
92
+ const normalizedName = MutagenCore_1.MutagenCore.normalizeStarName(star.name);
93
+ if (normalizedName !== star.name) {
94
+ mutagens = mutagenInfo.combined.get(normalizedName) || [];
95
+ }
96
+ }
97
+ return { ...star, mutagen: mutagens };
98
+ });
99
+ // 处理辅星
100
+ const minorStars = palace.minorStars.map(star => {
101
+ // Try to find mutagen for this star
102
+ let mutagens = mutagenInfo.combined.get(star.name) || [];
103
+ // Also try normalized name if no direct match
104
+ if (mutagens.length === 0) {
105
+ const normalizedName = MutagenCore_1.MutagenCore.normalizeStarName(star.name);
106
+ if (normalizedName !== star.name) {
107
+ mutagens = mutagenInfo.combined.get(normalizedName) || [];
108
+ }
109
+ }
110
+ return { ...star, mutagen: mutagens };
111
+ });
112
+ return {
113
+ ...palace,
114
+ majorStars,
115
+ minorStars
116
+ };
117
+ });
118
+ }
119
+ }
120
+ exports.MutagenCalculator = MutagenCalculator;
121
+ //# sourceMappingURL=MutagenCalculator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MutagenCalculator.js","sourceRoot":"","sources":["../../../../src/services/ziwei/calculators/MutagenCalculator.ts"],"names":[],"mappings":"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"}