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,635 @@
1
+ "use strict";
2
+ /**
3
+ * BaZi Service Main Class
4
+ * Unified entry point for all BaZi calculations
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.baziService = exports.BaziService = void 0;
8
+ const types_1 = require("./types");
9
+ const bazi_1 = require("../../core/bazi");
10
+ const bazi_2 = require("../../core/constants/bazi");
11
+ const StrengthAnalyzer_1 = require("./analyzers/StrengthAnalyzer");
12
+ const HiddenStemsAnalyzer_1 = require("./analyzers/HiddenStemsAnalyzer");
13
+ const ClimateAnalyzer_1 = require("./analyzers/ClimateAnalyzer");
14
+ const LuckCycleCalculator_1 = require("./calculators/LuckCycleCalculator");
15
+ const TenGodsAnalyzer_1 = require("./analyzers/TenGodsAnalyzer");
16
+ const ShenShaAnalyzer_1 = require("./analyzers/ShenShaAnalyzer");
17
+ const TraditionalAnalyzer_1 = require("./analyzers/TraditionalAnalyzer");
18
+ const YongShenAnalyzer_1 = require("./analyzers/YongShenAnalyzer");
19
+ const PatternAnalyzer_1 = require("./analyzers/PatternAnalyzer");
20
+ const RelationsAnalyzer_1 = require("./analyzers/RelationsAnalyzer");
21
+ const DaYunCalculator_1 = require("./calculators/DaYunCalculator");
22
+ const LiuNianCalculator_1 = require("./calculators/LiuNianCalculator");
23
+ const LiuYueCalculator_1 = require("./calculators/LiuYueCalculator");
24
+ const LiuRiCalculator_1 = require("./calculators/LiuRiCalculator");
25
+ const NaYinAnalyzer_1 = require("./analyzers/NaYinAnalyzer");
26
+ const logger_1 = require("../../shared/logger");
27
+ // Create stem-element mapping
28
+ const STEM_ELEMENTS = bazi_2.HEAVENLY_STEMS.reduce((acc, stem) => {
29
+ acc[stem.name] = stem.element;
30
+ return acc;
31
+ }, {});
32
+ class BaziService {
33
+ /**
34
+ * Map numeric strength to rating string
35
+ */
36
+ static mapStrengthToRating(strength) {
37
+ if (strength >= 9)
38
+ return '优秀';
39
+ if (strength >= 7)
40
+ return '良好';
41
+ if (strength >= 5)
42
+ return '一般';
43
+ if (strength >= 3)
44
+ return '挑战';
45
+ return '困难';
46
+ }
47
+ config;
48
+ core;
49
+ cache = new Map();
50
+ logger;
51
+ constructor(config = {}) {
52
+ this.config = {
53
+ defaultLanguage: 'zh-TW',
54
+ enableCaching: true,
55
+ debug: false,
56
+ lenient: false,
57
+ ...config
58
+ };
59
+ this.core = new bazi_1.BaziCore();
60
+ this.logger = new logger_1.Logger('BaziService');
61
+ }
62
+ /**
63
+ * Debug logging helper
64
+ */
65
+ debug(message, data) {
66
+ this.logger.debug(message, data);
67
+ }
68
+ /**
69
+ * Main calculation method
70
+ * Performs all BaZi calculations based on input and options
71
+ */
72
+ async calculate(input) {
73
+ const startTime = Date.now();
74
+ // 入口日志:记录开始计算
75
+ this.logger.info('开始八字计算', {
76
+ type: '八字',
77
+ input: logger_1.LogMasker.maskObject(input, ['name', 'birthDate']),
78
+ hasLocation: !!input.longitude
79
+ });
80
+ try {
81
+ this.debug('Starting calculation with input:', input);
82
+ // Generate cache key
83
+ const cacheKey = this.generateCacheKey(input);
84
+ // Check cache if enabled
85
+ if (this.config.enableCaching && this.cache.has(cacheKey)) {
86
+ const cached = this.cache.get(cacheKey);
87
+ this.debug('Returning cached result for key:', cacheKey);
88
+ // 性能日志:缓存命中
89
+ this.logger.info('八字计算完成(缓存命中)', {
90
+ duration: Date.now() - startTime,
91
+ cached: true
92
+ });
93
+ return this.maybeTranslate(cached, input.options?.language);
94
+ }
95
+ // Merge options with defaults
96
+ const options = {
97
+ includeEnhanced: true,
98
+ includeShenSha: true,
99
+ includeTraditional: true,
100
+ ...input.options
101
+ };
102
+ // Step 1: Core calculation
103
+ this.debug('Step 1: Starting core calculation');
104
+ const coreResult = await this.core.calculate({
105
+ year: input.year,
106
+ month: input.month,
107
+ day: input.day,
108
+ hour: input.hour,
109
+ minute: input.minute,
110
+ gender: input.gender,
111
+ longitude: input.longitude
112
+ });
113
+ this.debug(`Core calculation completed in ${Date.now() - startTime}ms`, {
114
+ chart: coreResult.chart,
115
+ zodiac: coreResult.zodiac,
116
+ dayMasterElement: coreResult.dayMasterElement
117
+ });
118
+ // Step 2: Basic analysis (always included)
119
+ const naYinAnalysis = NaYinAnalyzer_1.NaYinAnalyzer.analyze(coreResult.chart);
120
+ const basic = {
121
+ zodiac: coreResult.zodiac || '',
122
+ dayMaster: coreResult.chart.day.stem,
123
+ dayMasterElement: coreResult.dayMasterElement || '',
124
+ naYin: coreResult.naYin,
125
+ naYinAnalysis, // Add detailed NaYin analysis
126
+ fiveElements: coreResult.fiveElements,
127
+ tenGods: TenGodsAnalyzer_1.TenGodsAnalyzer.analyze(coreResult.chart, coreResult.chart.day.stem),
128
+ shenSha: options.includeShenSha
129
+ ? (() => {
130
+ const shenShaResult = ShenShaAnalyzer_1.ShenShaAnalyzer.analyze(coreResult.chart, input.gender || 'male');
131
+ return shenShaResult;
132
+ })()
133
+ : undefined
134
+ };
135
+ // Step 3: Enhanced analysis (optional but needed for traditional)
136
+ let enhanced;
137
+ let advancedRelations;
138
+ let patternAnalysis;
139
+ if (options.includeEnhanced || options.includeTraditional) {
140
+ const [strengthAnalysis, hiddenStems, twelveGrowthStages, voidBranches, climate, monthStrength] = await Promise.all([
141
+ StrengthAnalyzer_1.StrengthAnalyzer.analyze(coreResult.chart, coreResult.birthInfo),
142
+ HiddenStemsAnalyzer_1.HiddenStemsAnalyzer.analyze(coreResult.chart),
143
+ this.core.calculateTwelveGrowthStages(coreResult.chart),
144
+ this.core.calculateVoidBranches(coreResult.chart.day),
145
+ ClimateAnalyzer_1.ClimateAnalyzer.analyze(coreResult.chart, coreResult.birthInfo),
146
+ this.core.calculateMonthStrength(coreResult.chart, coreResult.birthInfo)
147
+ ]);
148
+ // Use RelationsAnalyzer for comprehensive branch relations
149
+ advancedRelations = RelationsAnalyzer_1.RelationsAnalyzer.analyze(coreResult.chart);
150
+ // Pattern analysis
151
+ this.debug('Starting pattern analysis', coreResult.chart);
152
+ try {
153
+ const rawPatternAnalysis = PatternAnalyzer_1.PatternAnalyzer.analyze(coreResult.chart, advancedRelations, strengthAnalysis);
154
+ this.debug('Pattern analysis result', rawPatternAnalysis);
155
+ // Keep the raw pattern analysis format that the component expects
156
+ patternAnalysis = rawPatternAnalysis;
157
+ }
158
+ catch (paErr) {
159
+ if (!this.config.lenient) {
160
+ throw paErr;
161
+ }
162
+ // Share/lenient mode: fallback to a safe default
163
+ this.logger.warn('Pattern analysis failed, using fallback pattern (lenient)', paErr);
164
+ patternAnalysis = {
165
+ primaryPattern: {
166
+ type: '正格',
167
+ subtype: undefined,
168
+ strength: 5,
169
+ description: '標準格局,五行較為平衡',
170
+ priority: 3,
171
+ characteristics: ['平衡穩定', '發展均衡']
172
+ },
173
+ secondaryPatterns: [],
174
+ chartStructure: {
175
+ dayMasterType: '平衡',
176
+ usefulGods: [],
177
+ avoidGods: [],
178
+ structureScore: 50,
179
+ balanceType: '平衡'
180
+ },
181
+ specialFeatures: [],
182
+ recommendations: {
183
+ favorableElements: [],
184
+ unfavorableElements: [],
185
+ careerSuggestions: [],
186
+ lifestyleSuggestions: []
187
+ }
188
+ };
189
+ }
190
+ enhanced = {
191
+ strengthAnalysis,
192
+ hiddenStems,
193
+ twelveGrowthStages,
194
+ voidBranches,
195
+ branchRelations: advancedRelations,
196
+ climate,
197
+ monthStrength,
198
+ patternAnalysis
199
+ };
200
+ }
201
+ // Step 4: Traditional analysis with enhanced YongShen (optional)
202
+ let traditional;
203
+ if (options.includeTraditional && coreResult.dayMasterElement && enhanced) {
204
+ // Use basic traditional analyzer for GeJu
205
+ const basicTraditional = TraditionalAnalyzer_1.TraditionalAnalyzer.analyze(coreResult.chart, coreResult.fiveElements, coreResult.dayMasterElement);
206
+ // Use enhanced YongShen analyzer
207
+ const yongShenAnalysis = YongShenAnalyzer_1.YongShenAnalyzer.analyze(coreResult.chart, enhanced.strengthAnalysis, patternAnalysis, enhanced.climate);
208
+ // Keep pattern analysis and yongShen analysis separate as the component expects
209
+ traditional = {
210
+ yongShen: yongShenAnalysis,
211
+ geJu: basicTraditional.geJu,
212
+ strength: basicTraditional.strength
213
+ };
214
+ }
215
+ // Step 5: Time-based analysis
216
+ // Calculate full lifetime Da Yun periods (typically 8-10 periods covering 80-100 years)
217
+ const birthYear = input.year;
218
+ const timeRange = options.timeRange || {
219
+ startYear: birthYear,
220
+ endYear: birthYear + 100 // Cover full lifetime
221
+ };
222
+ // Calculate luck sequence information
223
+ const birthDate = coreResult.birthInfo.solar instanceof Date
224
+ ? coreResult.birthInfo.solar
225
+ : new Date(coreResult.birthInfo.solar);
226
+ let luckSequence = undefined;
227
+ try {
228
+ luckSequence = LuckCycleCalculator_1.LuckCycleCalculator.calLuckyAge(birthDate, input.gender || 'male', coreResult.chart.year.stem);
229
+ }
230
+ catch (lsErr) {
231
+ if (!this.config.lenient) {
232
+ throw lsErr;
233
+ }
234
+ this.logger.warn('Luck sequence calculation failed; continuing without it (lenient)', lsErr);
235
+ }
236
+ let daYun = [];
237
+ try {
238
+ daYun = DaYunCalculator_1.DaYunCalculator.calculate(coreResult.chart, coreResult.birthInfo, input.gender || 'male', timeRange);
239
+ }
240
+ catch (dyErr) {
241
+ if (!this.config.lenient) {
242
+ throw dyErr;
243
+ }
244
+ this.logger.warn('DaYun calculation failed; returning empty list (lenient)', dyErr);
245
+ daYun = [];
246
+ }
247
+ // Add void branches to each DaYun period
248
+ daYun.forEach(period => {
249
+ period.voidBranches = LuckCycleCalculator_1.LuckCycleCalculator.calculateVoidBranches(period.stem, period.branch);
250
+ });
251
+ const currentYear = new Date().getFullYear();
252
+ const currentAge = currentYear - input.year + 1;
253
+ const currentDaYun = daYun.find(d => currentAge >= d.startAge && currentAge <= d.endAge);
254
+ let liuNian;
255
+ let currentLiuNian;
256
+ // Always calculate LiuNian for the full DaYun range if time range is specified
257
+ if (timeRange.startYear && timeRange.endYear) {
258
+ try {
259
+ liuNian = LiuNianCalculator_1.LiuNianCalculator.calculate(coreResult.chart, input.year, timeRange.startYear, timeRange.endYear, coreResult.birthInfo, input.gender || 'male');
260
+ currentLiuNian = liuNian.find(l => l.year === currentYear);
261
+ }
262
+ catch (lnErr) {
263
+ if (!this.config.lenient) {
264
+ throw lnErr;
265
+ }
266
+ this.logger.warn('LiuNian calculation failed; continuing without yearly list (lenient)', lnErr);
267
+ liuNian = undefined;
268
+ currentLiuNian = undefined;
269
+ }
270
+ }
271
+ // Step 5b: Liu Yue (Monthly) calculations
272
+ let liuYue;
273
+ let currentLiuYue;
274
+ if (options.includeLiuYue && options.liuYueOptions) {
275
+ const liuYueYear = options.liuYueOptions.year || currentYear;
276
+ // Use the getLiuYue method we created
277
+ const liuYueResults = await this.getLiuYue(input, liuYueYear);
278
+ liuYue = liuYueResults.map(ly => ({
279
+ year: liuYueYear,
280
+ month: ly.month,
281
+ stem: ly.stem,
282
+ branch: ly.branch,
283
+ tenGod: '', // To be calculated if needed
284
+ element: STEM_ELEMENTS[ly.stem],
285
+ season: '', // To be calculated based on month
286
+ analysis: {
287
+ overall: ly.fortune,
288
+ career: { rating: ly.rating / 10, trend: '稳定', description: '' },
289
+ wealth: { rating: ly.rating / 10, trend: '稳定', description: '' },
290
+ relationships: { rating: ly.rating / 10, trend: '稳定', description: '' },
291
+ health: {
292
+ stressLevel: (ly.rating < 40 ? 'high' : ly.rating < 70 ? 'moderate' : 'low'),
293
+ vulnerableAreas: ly.healthFocus,
294
+ preventiveMeasures: ly.recommendations,
295
+ energyLevel: ly.rating / 10
296
+ },
297
+ luckyDays: ly.luckyDays,
298
+ unluckyDays: [],
299
+ activities: [],
300
+ elementBalance: {
301
+ dominant: STEM_ELEMENTS[ly.stem],
302
+ trend: '稳定',
303
+ impact: ''
304
+ },
305
+ monthlyTheme: ly.mainInfluences[0] || ''
306
+ }
307
+ }));
308
+ // Find current month if calculating for current year
309
+ if (liuYueYear === currentYear) {
310
+ const currentMonth = new Date().getMonth() + 1;
311
+ currentLiuYue = liuYue.find(m => m.month === currentMonth);
312
+ }
313
+ }
314
+ // Step 5c: Liu Ri (Daily) calculations
315
+ let liuRi;
316
+ let todayLiuRi;
317
+ if (options.includeLiuRi && options.liuRiOptions) {
318
+ const liuRiYear = options.liuRiOptions.year || currentYear;
319
+ const liuRiMonth = options.liuRiOptions.month || new Date().getMonth() + 1;
320
+ if (options.liuRiOptions.singleDate) {
321
+ // Calculate for single date only - we'll implement this later
322
+ todayLiuRi = undefined;
323
+ }
324
+ else {
325
+ // Calculate for entire month
326
+ const liuRiResults = await this.getLiuRi(input, liuRiYear, liuRiMonth);
327
+ liuRi = liuRiResults.map(lr => ({
328
+ date: lr.date,
329
+ stem: lr.stem,
330
+ branch: lr.branch,
331
+ tenGod: '', // To be calculated if needed
332
+ element: STEM_ELEMENTS[lr.stem],
333
+ analysis: {
334
+ rating: lr.rating,
335
+ quality: lr.fortune,
336
+ activities: lr.activities.favorable.map(a => ({
337
+ activity: a,
338
+ suitability: '宜',
339
+ reason: ''
340
+ })),
341
+ hourlyAnalysis: lr.hourlyFortunes.map((hf, idx) => ({
342
+ hour: idx,
343
+ stem: '',
344
+ branch: hf.branch,
345
+ quality: hf.rating >= 70 ? '优秀' : hf.rating >= 50 ? '良好' : hf.rating >= 30 ? '中性' : '较差',
346
+ activities: [hf.activity]
347
+ })),
348
+ almanacInfo: {
349
+ suitable: lr.activities.favorable,
350
+ avoid: lr.activities.avoid,
351
+ auspiciousHours: lr.luckyHours,
352
+ inauspiciousHours: []
353
+ },
354
+ quickTips: lr.opportunities,
355
+ elementalFlow: {
356
+ dominant: STEM_ELEMENTS[lr.stem],
357
+ interaction: '中性',
358
+ advice: ''
359
+ },
360
+ biorhythm: {
361
+ physical: lr.rating / 10,
362
+ emotional: lr.rating / 10,
363
+ intellectual: lr.rating / 10,
364
+ overall: lr.rating / 10
365
+ }
366
+ }
367
+ }));
368
+ // Find today if calculating for current month
369
+ const today = new Date();
370
+ if (liuRiYear === today.getFullYear() && liuRiMonth === today.getMonth() + 1) {
371
+ todayLiuRi = liuRi.find(d => d.date.getDate() === today.getDate());
372
+ }
373
+ }
374
+ }
375
+ // Step 6: Assemble result
376
+ const result = {
377
+ chart: coreResult.chart,
378
+ birthInfo: {
379
+ solar: coreResult.birthInfo.solar,
380
+ lunar: coreResult.birthInfo.lunar,
381
+ trueSolarTime: coreResult.birthInfo.trueSolarTime,
382
+ solarTerm: coreResult.birthInfo.solarTerm,
383
+ adjacentSolarTermTime: coreResult.birthInfo.adjacentSolarTermTime
384
+ },
385
+ basic,
386
+ traditional,
387
+ enhanced,
388
+ timeBased: {
389
+ daYun,
390
+ currentDaYun,
391
+ liuNian,
392
+ currentLiuNian,
393
+ liuYue,
394
+ currentLiuYue,
395
+ liuRi,
396
+ todayLiuRi
397
+ },
398
+ meta: {
399
+ calculatedAt: new Date(),
400
+ version: '2.0.0',
401
+ options,
402
+ luckSequence
403
+ }
404
+ };
405
+ // Cache result if enabled
406
+ if (this.config.enableCaching) {
407
+ this.cache.set(cacheKey, result);
408
+ }
409
+ // Step 7: Translate if needed
410
+ const finalResult = this.maybeTranslate(result, options.language);
411
+ // 成功出口日志
412
+ this.logger.info('八字计算完成', {
413
+ duration: Date.now() - startTime,
414
+ complexity: {
415
+ shenShaCount: finalResult.basic?.shenSha?.length || 0,
416
+ tenGodsCount: finalResult.basic?.tenGods?.length || 0
417
+ }
418
+ });
419
+ return finalResult;
420
+ }
421
+ catch (error) {
422
+ // 错误日志
423
+ this.logger.error('八字计算失败', error, {
424
+ duration: Date.now() - startTime,
425
+ input: logger_1.LogMasker.maskObject(input, ['name', 'birthDate'])
426
+ });
427
+ if (error instanceof types_1.BaziCalculationError) {
428
+ throw error;
429
+ }
430
+ this.debug('❌ Original error in calculation', error);
431
+ throw new types_1.BaziCalculationError('BaZi calculation failed', 'CALCULATION_FAILED', error);
432
+ }
433
+ }
434
+ /**
435
+ * Analyze specific features
436
+ * Allows selective analysis for performance optimization
437
+ */
438
+ async analyze(input, features) {
439
+ // Implementation for selective analysis
440
+ // This allows components to request only specific features
441
+ const fullResult = await this.calculate({
442
+ ...input,
443
+ options: {
444
+ ...input.options,
445
+ includeEnhanced: features.includes('enhanced'),
446
+ includeShenSha: features.includes('shenSha'),
447
+ includeTraditional: features.includes('traditional')
448
+ }
449
+ });
450
+ // Return only requested features
451
+ const result = {
452
+ chart: fullResult.chart,
453
+ birthInfo: fullResult.birthInfo,
454
+ meta: fullResult.meta
455
+ };
456
+ if (features.includes('basic')) {
457
+ result.basic = fullResult.basic;
458
+ }
459
+ if (features.includes('traditional')) {
460
+ result.traditional = fullResult.traditional;
461
+ }
462
+ if (features.includes('enhanced')) {
463
+ result.enhanced = fullResult.enhanced;
464
+ }
465
+ if (features.includes('timeBased')) {
466
+ result.timeBased = fullResult.timeBased;
467
+ }
468
+ return result;
469
+ }
470
+ /**
471
+ * Get Da Yun for specific age range
472
+ */
473
+ async getDaYun(chart, birthYear, gender, startAge, endAge) {
474
+ const birthInfo = await this.core.getBirthInfo(birthYear, 1, 1, 0); // Simplified
475
+ return DaYunCalculator_1.DaYunCalculator.calculate(chart, birthInfo, gender, { startYear: birthYear + startAge, endYear: birthYear + endAge });
476
+ }
477
+ /**
478
+ * Get Liu Nian for specific years
479
+ */
480
+ async getLiuNian(chart, birthYear, targetYears) {
481
+ const startYear = Math.min(...targetYears);
482
+ const endYear = Math.max(...targetYears);
483
+ const allLiuNian = LiuNianCalculator_1.LiuNianCalculator.calculate(chart, birthYear, startYear, endYear);
484
+ return allLiuNian.filter(ln => targetYears.includes(ln.year));
485
+ }
486
+ /**
487
+ * Get Liu Yue (monthly fortune) for a specific year
488
+ */
489
+ async getLiuYue(input, year) {
490
+ const result = await this.calculate({
491
+ ...input,
492
+ options: {
493
+ ...input.options,
494
+ includeTraditional: true // Need yongShen analysis
495
+ }
496
+ });
497
+ const yearStemBranch = this.getYearStemBranch(year);
498
+ const calculator = new LiuYueCalculator_1.LiuYueCalculator();
499
+ return calculator.calculateLiuYue(yearStemBranch.stem, yearStemBranch.branch, result.basic.dayMasterElement, result.traditional?.yongShen.yongShen || [], {
500
+ year: input.year,
501
+ month: input.month,
502
+ day: input.day,
503
+ hour: input.hour,
504
+ minute: input.minute
505
+ }, year);
506
+ }
507
+ /**
508
+ * Get Liu Ri (daily fortune) for a specific month
509
+ */
510
+ async getLiuRi(input, year, month) {
511
+ const result = await this.calculate({
512
+ ...input,
513
+ options: {
514
+ ...input.options,
515
+ includeTraditional: true // Need yongShen analysis
516
+ }
517
+ });
518
+ const yearStemBranch = this.getYearStemBranch(year);
519
+ const monthStemBranch = this.getMonthStemBranch(year, month);
520
+ const calculator = new LiuRiCalculator_1.LiuRiCalculator();
521
+ return calculator.calculateLiuRi(monthStemBranch.stem, monthStemBranch.branch, yearStemBranch.stem, yearStemBranch.branch, result.basic.dayMasterElement, result.traditional?.yongShen.yongShen || [], year, month);
522
+ }
523
+ // TODO: Implement getTodayFortune and getMonthlyOverview using new calculators
524
+ // These methods are temporarily disabled during refactoring
525
+ /**
526
+ * Clear cache
527
+ */
528
+ clearCache() {
529
+ this.cache.clear();
530
+ }
531
+ /**
532
+ * Generate cache key from input
533
+ */
534
+ generateCacheKey(input) {
535
+ const { year, month, day, hour, minute = 0, gender = 'male', longitude = 0, options = {} } = input;
536
+ return `${year}-${month}-${day}-${hour}:${minute}-${gender}-${longitude}-${JSON.stringify(options)}`;
537
+ }
538
+ /**
539
+ * Translate result if language is specified
540
+ */
541
+ maybeTranslate(result, language) {
542
+ // Translation now handled at component level with useT()
543
+ return result;
544
+ }
545
+ /**
546
+ * Validate input
547
+ */
548
+ validateInput(input) {
549
+ const errors = [];
550
+ if (!input.year || input.year < 1900 || input.year > 2100) {
551
+ errors.push('Invalid year (must be between 1900 and 2100)');
552
+ }
553
+ if (!input.month || input.month < 1 || input.month > 12) {
554
+ errors.push('Invalid month (must be between 1 and 12)');
555
+ }
556
+ if (!input.day || input.day < 1 || input.day > 31) {
557
+ errors.push('Invalid day (must be between 1 and 31)');
558
+ }
559
+ if (input.hour === undefined || input.hour < 0 || input.hour > 23) {
560
+ errors.push('Invalid hour (must be between 0 and 23)');
561
+ }
562
+ if (input.longitude !== undefined && (input.longitude < -180 || input.longitude > 180)) {
563
+ errors.push('Invalid longitude (must be between -180 and 180)');
564
+ }
565
+ return errors;
566
+ }
567
+ /**
568
+ * Get service configuration
569
+ */
570
+ getConfig() {
571
+ return { ...this.config };
572
+ }
573
+ /**
574
+ * Update service configuration
575
+ */
576
+ updateConfig(config) {
577
+ this.config = { ...this.config, ...config };
578
+ }
579
+ /**
580
+ * Get year stem and branch for a given year
581
+ */
582
+ getYearStemBranch(year) {
583
+ const STEMS = ['甲', '乙', '丙', '丁', '戊', '己', '庚', '辛', '壬', '癸'];
584
+ const BRANCHES = ['子', '丑', '寅', '卯', '辰', '巳', '午', '未', '申', '酉', '戌', '亥'];
585
+ // Year 1984 is 甲子年 (stem index 0, branch index 0)
586
+ const baseYear = 1984;
587
+ const yearDiff = year - baseYear;
588
+ const stemIndex = ((yearDiff % 10) + 10) % 10;
589
+ const branchIndex = ((yearDiff % 12) + 12) % 12;
590
+ return {
591
+ stem: STEMS[stemIndex],
592
+ branch: BRANCHES[branchIndex]
593
+ };
594
+ }
595
+ /**
596
+ * Get month stem and branch for a given year and month
597
+ * 注意:这里的month是节气月序号(1-12),不是公历月份
598
+ * month=1 -> 寅月, month=2 -> 卯月, ..., month=11 -> 子月, month=12 -> 丑月
599
+ * 这与 LiuYueCalculator 中的 (i + 2) % 12 逻辑一致
600
+ */
601
+ getMonthStemBranch(year, month) {
602
+ const STEMS = ['甲', '乙', '丙', '丁', '戊', '己', '庚', '辛', '壬', '癸'];
603
+ const BRANCHES = ['子', '丑', '寅', '卯', '辰', '巳', '午', '未', '申', '酉', '戌', '亥'];
604
+ // 月支计算:(month + 1) % 12
605
+ // month=1 -> 寅(2), month=11 -> 子(0), month=12 -> 丑(1)
606
+ const monthBranch = BRANCHES[(month + 1) % 12];
607
+ // Month stem depends on year stem
608
+ const yearStem = this.getYearStemBranch(year).stem;
609
+ const yearStemIndex = STEMS.indexOf(yearStem);
610
+ // Rules for first month stem based on year stem
611
+ // 五虎遁年起月诀
612
+ const firstMonthStemMap = {
613
+ 0: 2, // 甲年 -> 丙寅月
614
+ 1: 4, // 乙年 -> 戊寅月
615
+ 2: 6, // 丙年 -> 庚寅月
616
+ 3: 8, // 丁年 -> 壬寅月
617
+ 4: 0, // 戊年 -> 甲寅月
618
+ 5: 2, // 己年 -> 丙寅月
619
+ 6: 4, // 庚年 -> 戊寅月
620
+ 7: 6, // 辛年 -> 庚寅月
621
+ 8: 8, // 壬年 -> 壬寅月
622
+ 9: 0 // 癸年 -> 甲寅月
623
+ };
624
+ const firstMonthStemIndex = firstMonthStemMap[yearStemIndex];
625
+ const monthStemIndex = (firstMonthStemIndex + month - 1) % 10;
626
+ return {
627
+ stem: STEMS[monthStemIndex],
628
+ branch: monthBranch
629
+ };
630
+ }
631
+ }
632
+ exports.BaziService = BaziService;
633
+ // Export singleton instance for convenience
634
+ exports.baziService = new BaziService();
635
+ //# sourceMappingURL=BaziService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaziService.js","sourceRoot":"","sources":["../../../src/services/bazi/BaziService.ts"],"names":[],"mappings":"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"}