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.
- package/LICENSE +201 -0
- package/README.md +118 -0
- package/dist/core/bazi/BaziCore.d.ts +112 -0
- package/dist/core/bazi/BaziCore.d.ts.map +1 -0
- package/dist/core/bazi/BaziCore.js +606 -0
- package/dist/core/bazi/BaziCore.js.map +1 -0
- package/dist/core/bazi/SolarTermCalculator.d.ts +46 -0
- package/dist/core/bazi/SolarTermCalculator.d.ts.map +1 -0
- package/dist/core/bazi/SolarTermCalculator.js +452 -0
- package/dist/core/bazi/SolarTermCalculator.js.map +1 -0
- package/dist/core/bazi/TrueSolarTime.d.ts +64 -0
- package/dist/core/bazi/TrueSolarTime.d.ts.map +1 -0
- package/dist/core/bazi/TrueSolarTime.js +210 -0
- package/dist/core/bazi/TrueSolarTime.js.map +1 -0
- package/dist/core/bazi/ephemerisData.d.ts +10 -0
- package/dist/core/bazi/ephemerisData.d.ts.map +1 -0
- package/dist/core/bazi/ephemerisData.js +88 -0
- package/dist/core/bazi/ephemerisData.js.map +1 -0
- package/dist/core/bazi/index.d.ts +8 -0
- package/dist/core/bazi/index.d.ts.map +1 -0
- package/dist/core/bazi/index.js +30 -0
- package/dist/core/bazi/index.js.map +1 -0
- package/dist/core/bazi/types.d.ts +116 -0
- package/dist/core/bazi/types.d.ts.map +1 -0
- package/dist/core/bazi/types.js +7 -0
- package/dist/core/bazi/types.js.map +1 -0
- package/dist/core/calendar/SolarTermsCalculator.d.ts +33 -0
- package/dist/core/calendar/SolarTermsCalculator.d.ts.map +1 -0
- package/dist/core/calendar/SolarTermsCalculator.js +111 -0
- package/dist/core/calendar/SolarTermsCalculator.js.map +1 -0
- package/dist/core/calendar/astronomicalCalendar.d.ts +74 -0
- package/dist/core/calendar/astronomicalCalendar.d.ts.map +1 -0
- package/dist/core/calendar/astronomicalCalendar.js +276 -0
- package/dist/core/calendar/astronomicalCalendar.js.map +1 -0
- package/dist/core/calendar/calendar.d.ts +81 -0
- package/dist/core/calendar/calendar.d.ts.map +1 -0
- package/dist/core/calendar/calendar.js +223 -0
- package/dist/core/calendar/calendar.js.map +1 -0
- package/dist/core/calendar/constants.d.ts +151 -0
- package/dist/core/calendar/constants.d.ts.map +1 -0
- package/dist/core/calendar/constants.js +97 -0
- package/dist/core/calendar/constants.js.map +1 -0
- package/dist/core/calendar/julian.d.ts +54 -0
- package/dist/core/calendar/julian.d.ts.map +1 -0
- package/dist/core/calendar/julian.js +142 -0
- package/dist/core/calendar/julian.js.map +1 -0
- package/dist/core/calendar/lunarCalendar.d.ts +79 -0
- package/dist/core/calendar/lunarCalendar.d.ts.map +1 -0
- package/dist/core/calendar/lunarCalendar.js +164 -0
- package/dist/core/calendar/lunarCalendar.js.map +1 -0
- package/dist/core/calendar/solarTerms.d.ts +105 -0
- package/dist/core/calendar/solarTerms.d.ts.map +1 -0
- package/dist/core/calendar/solarTerms.js +487 -0
- package/dist/core/calendar/solarTerms.js.map +1 -0
- package/dist/core/constants/bazi.d.ts +138 -0
- package/dist/core/constants/bazi.d.ts.map +1 -0
- package/dist/core/constants/bazi.js +332 -0
- package/dist/core/constants/bazi.js.map +1 -0
- package/dist/core/constants/index.d.ts +6 -0
- package/dist/core/constants/index.d.ts.map +1 -0
- package/dist/core/constants/index.js +37 -0
- package/dist/core/constants/index.js.map +1 -0
- package/dist/core/constants/positions.d.ts +27 -0
- package/dist/core/constants/positions.d.ts.map +1 -0
- package/dist/core/constants/positions.js +39 -0
- package/dist/core/constants/positions.js.map +1 -0
- package/dist/core/ziwei/BrightnessSystem.d.ts +53 -0
- package/dist/core/ziwei/BrightnessSystem.d.ts.map +1 -0
- package/dist/core/ziwei/BrightnessSystem.js +278 -0
- package/dist/core/ziwei/BrightnessSystem.js.map +1 -0
- package/dist/core/ziwei/IztroAdapter.d.ts +78 -0
- package/dist/core/ziwei/IztroAdapter.d.ts.map +1 -0
- package/dist/core/ziwei/IztroAdapter.js +314 -0
- package/dist/core/ziwei/IztroAdapter.js.map +1 -0
- package/dist/core/ziwei/MutagenCore.d.ts +81 -0
- package/dist/core/ziwei/MutagenCore.d.ts.map +1 -0
- package/dist/core/ziwei/MutagenCore.js +246 -0
- package/dist/core/ziwei/MutagenCore.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1101 -0
- package/dist/index.js.map +1 -0
- package/dist/output/fortuneTextRenderer.d.ts +63 -0
- package/dist/output/fortuneTextRenderer.d.ts.map +1 -0
- package/dist/output/fortuneTextRenderer.js +384 -0
- package/dist/output/fortuneTextRenderer.js.map +1 -0
- package/dist/output/listTextRenderer.d.ts +298 -0
- package/dist/output/listTextRenderer.d.ts.map +1 -0
- package/dist/output/listTextRenderer.js +942 -0
- package/dist/output/listTextRenderer.js.map +1 -0
- package/dist/services/bazi/BaziService.d.ts +83 -0
- package/dist/services/bazi/BaziService.d.ts.map +1 -0
- package/dist/services/bazi/BaziService.js +635 -0
- package/dist/services/bazi/BaziService.js.map +1 -0
- package/dist/services/bazi/analyzers/ClimateAnalyzer.d.ts +31 -0
- package/dist/services/bazi/analyzers/ClimateAnalyzer.d.ts.map +1 -0
- package/dist/services/bazi/analyzers/ClimateAnalyzer.js +194 -0
- package/dist/services/bazi/analyzers/ClimateAnalyzer.js.map +1 -0
- package/dist/services/bazi/analyzers/HiddenStemsAnalyzer.d.ts +16 -0
- package/dist/services/bazi/analyzers/HiddenStemsAnalyzer.d.ts.map +1 -0
- package/dist/services/bazi/analyzers/HiddenStemsAnalyzer.js +60 -0
- package/dist/services/bazi/analyzers/HiddenStemsAnalyzer.js.map +1 -0
- package/dist/services/bazi/analyzers/NaYinAnalyzer.d.ts +33 -0
- package/dist/services/bazi/analyzers/NaYinAnalyzer.d.ts.map +1 -0
- package/dist/services/bazi/analyzers/NaYinAnalyzer.js +209 -0
- package/dist/services/bazi/analyzers/NaYinAnalyzer.js.map +1 -0
- package/dist/services/bazi/analyzers/PatternAnalyzer.d.ts +159 -0
- package/dist/services/bazi/analyzers/PatternAnalyzer.d.ts.map +1 -0
- package/dist/services/bazi/analyzers/PatternAnalyzer.js +1150 -0
- package/dist/services/bazi/analyzers/PatternAnalyzer.js.map +1 -0
- package/dist/services/bazi/analyzers/RelationsAnalyzer.d.ts +114 -0
- package/dist/services/bazi/analyzers/RelationsAnalyzer.d.ts.map +1 -0
- package/dist/services/bazi/analyzers/RelationsAnalyzer.js +704 -0
- package/dist/services/bazi/analyzers/RelationsAnalyzer.js.map +1 -0
- package/dist/services/bazi/analyzers/ShenShaAnalyzer.d.ts +236 -0
- package/dist/services/bazi/analyzers/ShenShaAnalyzer.d.ts.map +1 -0
- package/dist/services/bazi/analyzers/ShenShaAnalyzer.js +2079 -0
- package/dist/services/bazi/analyzers/ShenShaAnalyzer.js.map +1 -0
- package/dist/services/bazi/analyzers/StrengthAnalyzer.d.ts +181 -0
- package/dist/services/bazi/analyzers/StrengthAnalyzer.d.ts.map +1 -0
- package/dist/services/bazi/analyzers/StrengthAnalyzer.js +1119 -0
- package/dist/services/bazi/analyzers/StrengthAnalyzer.js.map +1 -0
- package/dist/services/bazi/analyzers/TenGodsAnalyzer.d.ts +78 -0
- package/dist/services/bazi/analyzers/TenGodsAnalyzer.d.ts.map +1 -0
- package/dist/services/bazi/analyzers/TenGodsAnalyzer.js +383 -0
- package/dist/services/bazi/analyzers/TenGodsAnalyzer.js.map +1 -0
- package/dist/services/bazi/analyzers/TraditionalAnalyzer.d.ts +46 -0
- package/dist/services/bazi/analyzers/TraditionalAnalyzer.d.ts.map +1 -0
- package/dist/services/bazi/analyzers/TraditionalAnalyzer.js +260 -0
- package/dist/services/bazi/analyzers/TraditionalAnalyzer.js.map +1 -0
- package/dist/services/bazi/analyzers/YongShenAnalyzer.d.ts +70 -0
- package/dist/services/bazi/analyzers/YongShenAnalyzer.d.ts.map +1 -0
- package/dist/services/bazi/analyzers/YongShenAnalyzer.js +858 -0
- package/dist/services/bazi/analyzers/YongShenAnalyzer.js.map +1 -0
- package/dist/services/bazi/calculators/DaYunCalculator.d.ts +71 -0
- package/dist/services/bazi/calculators/DaYunCalculator.d.ts.map +1 -0
- package/dist/services/bazi/calculators/DaYunCalculator.js +496 -0
- package/dist/services/bazi/calculators/DaYunCalculator.js.map +1 -0
- package/dist/services/bazi/calculators/LiuNianCalculator.d.ts +88 -0
- package/dist/services/bazi/calculators/LiuNianCalculator.d.ts.map +1 -0
- package/dist/services/bazi/calculators/LiuNianCalculator.js +546 -0
- package/dist/services/bazi/calculators/LiuNianCalculator.js.map +1 -0
- package/dist/services/bazi/calculators/LiuRiCalculator.d.ts +66 -0
- package/dist/services/bazi/calculators/LiuRiCalculator.d.ts.map +1 -0
- package/dist/services/bazi/calculators/LiuRiCalculator.js +497 -0
- package/dist/services/bazi/calculators/LiuRiCalculator.js.map +1 -0
- package/dist/services/bazi/calculators/LiuYueCalculator.d.ts +50 -0
- package/dist/services/bazi/calculators/LiuYueCalculator.d.ts.map +1 -0
- package/dist/services/bazi/calculators/LiuYueCalculator.js +338 -0
- package/dist/services/bazi/calculators/LiuYueCalculator.js.map +1 -0
- package/dist/services/bazi/calculators/LuckCycleCalculator.d.ts +123 -0
- package/dist/services/bazi/calculators/LuckCycleCalculator.d.ts.map +1 -0
- package/dist/services/bazi/calculators/LuckCycleCalculator.js +414 -0
- package/dist/services/bazi/calculators/LuckCycleCalculator.js.map +1 -0
- package/dist/services/bazi/index.d.ts +21 -0
- package/dist/services/bazi/index.d.ts.map +1 -0
- package/dist/services/bazi/index.js +83 -0
- package/dist/services/bazi/index.js.map +1 -0
- package/dist/services/bazi/types.d.ts +597 -0
- package/dist/services/bazi/types.d.ts.map +1 -0
- package/dist/services/bazi/types.js +123 -0
- package/dist/services/bazi/types.js.map +1 -0
- package/dist/services/ziwei/ZiweiService.d.ts +86 -0
- package/dist/services/ziwei/ZiweiService.d.ts.map +1 -0
- package/dist/services/ziwei/ZiweiService.js +343 -0
- package/dist/services/ziwei/ZiweiService.js.map +1 -0
- package/dist/services/ziwei/calculators/BrightnessCalculator.d.ts +38 -0
- package/dist/services/ziwei/calculators/BrightnessCalculator.d.ts.map +1 -0
- package/dist/services/ziwei/calculators/BrightnessCalculator.js +142 -0
- package/dist/services/ziwei/calculators/BrightnessCalculator.js.map +1 -0
- package/dist/services/ziwei/calculators/DailyCalculator.d.ts +27 -0
- package/dist/services/ziwei/calculators/DailyCalculator.d.ts.map +1 -0
- package/dist/services/ziwei/calculators/DailyCalculator.js +55 -0
- package/dist/services/ziwei/calculators/DailyCalculator.js.map +1 -0
- package/dist/services/ziwei/calculators/DecadeCalculator.d.ts +46 -0
- package/dist/services/ziwei/calculators/DecadeCalculator.d.ts.map +1 -0
- package/dist/services/ziwei/calculators/DecadeCalculator.js +181 -0
- package/dist/services/ziwei/calculators/DecadeCalculator.js.map +1 -0
- package/dist/services/ziwei/calculators/HoroscopeStarsCalculator.d.ts +28 -0
- package/dist/services/ziwei/calculators/HoroscopeStarsCalculator.d.ts.map +1 -0
- package/dist/services/ziwei/calculators/HoroscopeStarsCalculator.js +84 -0
- package/dist/services/ziwei/calculators/HoroscopeStarsCalculator.js.map +1 -0
- package/dist/services/ziwei/calculators/HourlyCalculator.d.ts +41 -0
- package/dist/services/ziwei/calculators/HourlyCalculator.d.ts.map +1 -0
- package/dist/services/ziwei/calculators/HourlyCalculator.js +139 -0
- package/dist/services/ziwei/calculators/HourlyCalculator.js.map +1 -0
- package/dist/services/ziwei/calculators/MinorLimitCalculator.d.ts +30 -0
- package/dist/services/ziwei/calculators/MinorLimitCalculator.d.ts.map +1 -0
- package/dist/services/ziwei/calculators/MinorLimitCalculator.js +90 -0
- package/dist/services/ziwei/calculators/MinorLimitCalculator.js.map +1 -0
- package/dist/services/ziwei/calculators/MonthlyCalculator.d.ts +39 -0
- package/dist/services/ziwei/calculators/MonthlyCalculator.d.ts.map +1 -0
- package/dist/services/ziwei/calculators/MonthlyCalculator.js +128 -0
- package/dist/services/ziwei/calculators/MonthlyCalculator.js.map +1 -0
- package/dist/services/ziwei/calculators/MutagenCalculator.d.ts +20 -0
- package/dist/services/ziwei/calculators/MutagenCalculator.d.ts.map +1 -0
- package/dist/services/ziwei/calculators/MutagenCalculator.js +121 -0
- package/dist/services/ziwei/calculators/MutagenCalculator.js.map +1 -0
- package/dist/services/ziwei/calculators/PalaceDynamicCalculator.d.ts +35 -0
- package/dist/services/ziwei/calculators/PalaceDynamicCalculator.d.ts.map +1 -0
- package/dist/services/ziwei/calculators/PalaceDynamicCalculator.js +55 -0
- package/dist/services/ziwei/calculators/PalaceDynamicCalculator.js.map +1 -0
- package/dist/services/ziwei/calculators/YearlyCalculator.d.ts +35 -0
- package/dist/services/ziwei/calculators/YearlyCalculator.d.ts.map +1 -0
- package/dist/services/ziwei/calculators/YearlyCalculator.js +119 -0
- package/dist/services/ziwei/calculators/YearlyCalculator.js.map +1 -0
- package/dist/services/ziwei/index.d.ts +15 -0
- package/dist/services/ziwei/index.d.ts.map +1 -0
- package/dist/services/ziwei/index.js +48 -0
- package/dist/services/ziwei/index.js.map +1 -0
- package/dist/services/ziwei/transformers/PalaceTransformer.d.ts +62 -0
- package/dist/services/ziwei/transformers/PalaceTransformer.d.ts.map +1 -0
- package/dist/services/ziwei/transformers/PalaceTransformer.js +153 -0
- package/dist/services/ziwei/transformers/PalaceTransformer.js.map +1 -0
- package/dist/services/ziwei/types.d.ts +185 -0
- package/dist/services/ziwei/types.d.ts.map +1 -0
- package/dist/services/ziwei/types.js +54 -0
- package/dist/services/ziwei/types.js.map +1 -0
- package/dist/shared/logger.d.ts +51 -0
- package/dist/shared/logger.d.ts.map +1 -0
- package/dist/shared/logger.js +136 -0
- package/dist/shared/logger.js.map +1 -0
- package/dist/shared/types.d.ts +91 -0
- package/dist/shared/types.d.ts.map +1 -0
- package/dist/shared/types.js +7 -0
- package/dist/shared/types.js.map +1 -0
- package/dist/utils/ageCalculator.d.ts +30 -0
- package/dist/utils/ageCalculator.d.ts.map +1 -0
- package/dist/utils/ageCalculator.js +51 -0
- package/dist/utils/ageCalculator.js.map +1 -0
- 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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"}
|