mingpan 0.1.2 → 0.1.4
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/README.md +120 -47
- package/dist/core/bazi/BaziCore.d.ts +7 -1
- package/dist/core/bazi/BaziCore.d.ts.map +1 -1
- package/dist/core/bazi/BaziCore.js +37 -11
- package/dist/core/bazi/BaziCore.js.map +1 -1
- package/dist/core/bazi/types.d.ts +4 -0
- package/dist/core/bazi/types.d.ts.map +1 -1
- package/dist/core/qimen/FlyingRule.d.ts +60 -0
- package/dist/core/qimen/FlyingRule.d.ts.map +1 -0
- package/dist/core/qimen/FlyingRule.js +94 -0
- package/dist/core/qimen/FlyingRule.js.map +1 -0
- package/dist/core/qimen/GongMapping.d.ts +29 -0
- package/dist/core/qimen/GongMapping.d.ts.map +1 -0
- package/dist/core/qimen/GongMapping.js +83 -0
- package/dist/core/qimen/GongMapping.js.map +1 -0
- package/dist/core/qimen/RotatingRule.d.ts +76 -0
- package/dist/core/qimen/RotatingRule.d.ts.map +1 -0
- package/dist/core/qimen/RotatingRule.js +126 -0
- package/dist/core/qimen/RotatingRule.js.map +1 -0
- package/dist/core/qimen/YinYangDunCalculator.d.ts +28 -0
- package/dist/core/qimen/YinYangDunCalculator.d.ts.map +1 -0
- package/dist/core/qimen/YinYangDunCalculator.js +79 -0
- package/dist/core/qimen/YinYangDunCalculator.js.map +1 -0
- package/dist/core/qimen/index.d.ts +10 -0
- package/dist/core/qimen/index.d.ts.map +1 -0
- package/dist/core/qimen/index.js +58 -0
- package/dist/core/qimen/index.js.map +1 -0
- package/dist/core/qimen/types.d.ts +19 -0
- package/dist/core/qimen/types.d.ts.map +1 -0
- package/dist/core/qimen/types.js +7 -0
- package/dist/core/qimen/types.js.map +1 -0
- package/dist/index.d.ts +10 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -1311
- package/dist/index.js.map +1 -1
- package/dist/output/fortuneTextRenderer.d.ts +8 -7
- package/dist/output/fortuneTextRenderer.d.ts.map +1 -1
- package/dist/output/fortuneTextRenderer.js +83 -21
- package/dist/output/fortuneTextRenderer.js.map +1 -1
- package/dist/output/qimenTextRenderer.d.ts +36 -0
- package/dist/output/qimenTextRenderer.d.ts.map +1 -0
- package/dist/output/qimenTextRenderer.js +230 -0
- package/dist/output/qimenTextRenderer.js.map +1 -0
- package/dist/server.d.ts +11 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +33 -0
- package/dist/server.js.map +1 -0
- package/dist/services/bazi/BaziService.d.ts +1 -17
- package/dist/services/bazi/BaziService.d.ts.map +1 -1
- package/dist/services/bazi/BaziService.js +9 -194
- package/dist/services/bazi/BaziService.js.map +1 -1
- package/dist/services/bazi/analyzers/TenGodsAnalyzer.js +12 -12
- package/dist/services/bazi/analyzers/TenGodsAnalyzer.js.map +1 -1
- package/dist/services/bazi/index.d.ts +0 -2
- package/dist/services/bazi/index.d.ts.map +1 -1
- package/dist/services/bazi/index.js +1 -5
- package/dist/services/bazi/index.js.map +1 -1
- package/dist/services/bazi/types.d.ts +4 -112
- package/dist/services/bazi/types.d.ts.map +1 -1
- package/dist/services/bazi/types.js +3 -102
- package/dist/services/bazi/types.js.map +1 -1
- package/dist/services/daliuren/DaliurenService.d.ts +11 -1
- package/dist/services/daliuren/DaliurenService.d.ts.map +1 -1
- package/dist/services/daliuren/DaliurenService.js +30 -0
- package/dist/services/daliuren/DaliurenService.js.map +1 -1
- package/dist/services/daliuren/calculators/TianDiPanCalculator.d.ts.map +1 -1
- package/dist/services/daliuren/calculators/TianDiPanCalculator.js +3 -4
- package/dist/services/daliuren/calculators/TianDiPanCalculator.js.map +1 -1
- package/dist/services/daliuren/data/constants.d.ts +7 -0
- package/dist/services/daliuren/data/constants.d.ts.map +1 -1
- package/dist/services/daliuren/data/constants.js +17 -1
- package/dist/services/daliuren/data/constants.js.map +1 -1
- package/dist/services/daliuren/types.d.ts +13 -0
- package/dist/services/daliuren/types.d.ts.map +1 -1
- package/dist/services/meihua/calculators/TiyongCalculator.d.ts.map +1 -1
- package/dist/services/meihua/calculators/TiyongCalculator.js +6 -5
- package/dist/services/meihua/calculators/TiyongCalculator.js.map +1 -1
- package/dist/services/qimen/QimenService.d.ts +76 -0
- package/dist/services/qimen/QimenService.d.ts.map +1 -0
- package/dist/services/qimen/QimenService.js +393 -0
- package/dist/services/qimen/QimenService.js.map +1 -0
- package/dist/services/qimen/calculators/BaMenCalculator.d.ts +45 -0
- package/dist/services/qimen/calculators/BaMenCalculator.d.ts.map +1 -0
- package/dist/services/qimen/calculators/BaMenCalculator.js +87 -0
- package/dist/services/qimen/calculators/BaMenCalculator.js.map +1 -0
- package/dist/services/qimen/calculators/BaShenCalculator.d.ts +34 -0
- package/dist/services/qimen/calculators/BaShenCalculator.d.ts.map +1 -0
- package/dist/services/qimen/calculators/BaShenCalculator.js +57 -0
- package/dist/services/qimen/calculators/BaShenCalculator.js.map +1 -0
- package/dist/services/qimen/calculators/GeJuCalculator.d.ts +141 -0
- package/dist/services/qimen/calculators/GeJuCalculator.d.ts.map +1 -0
- package/dist/services/qimen/calculators/GeJuCalculator.js +711 -0
- package/dist/services/qimen/calculators/GeJuCalculator.js.map +1 -0
- package/dist/services/qimen/calculators/JiuGongCalculator.d.ts +49 -0
- package/dist/services/qimen/calculators/JiuGongCalculator.d.ts.map +1 -0
- package/dist/services/qimen/calculators/JiuGongCalculator.js +68 -0
- package/dist/services/qimen/calculators/JiuGongCalculator.js.map +1 -0
- package/dist/services/qimen/calculators/JiuXingCalculator.d.ts +44 -0
- package/dist/services/qimen/calculators/JiuXingCalculator.d.ts.map +1 -0
- package/dist/services/qimen/calculators/JiuXingCalculator.js +72 -0
- package/dist/services/qimen/calculators/JiuXingCalculator.js.map +1 -0
- package/dist/services/qimen/calculators/JuShuCalculator.d.ts +60 -0
- package/dist/services/qimen/calculators/JuShuCalculator.d.ts.map +1 -0
- package/dist/services/qimen/calculators/JuShuCalculator.js +110 -0
- package/dist/services/qimen/calculators/JuShuCalculator.js.map +1 -0
- package/dist/services/qimen/calculators/PanTypeCalculator.d.ts +117 -0
- package/dist/services/qimen/calculators/PanTypeCalculator.d.ts.map +1 -0
- package/dist/services/qimen/calculators/PanTypeCalculator.js +237 -0
- package/dist/services/qimen/calculators/PanTypeCalculator.js.map +1 -0
- package/dist/services/qimen/calculators/SanQiLiuYiCalculator.d.ts +41 -0
- package/dist/services/qimen/calculators/SanQiLiuYiCalculator.d.ts.map +1 -0
- package/dist/services/qimen/calculators/SanQiLiuYiCalculator.js +73 -0
- package/dist/services/qimen/calculators/SanQiLiuYiCalculator.js.map +1 -0
- package/dist/services/qimen/calculators/ShenShaCalculator.d.ts +80 -0
- package/dist/services/qimen/calculators/ShenShaCalculator.d.ts.map +1 -0
- package/dist/services/qimen/calculators/ShenShaCalculator.js +300 -0
- package/dist/services/qimen/calculators/ShenShaCalculator.js.map +1 -0
- package/dist/services/qimen/calculators/YongShenCalculator.d.ts +78 -0
- package/dist/services/qimen/calculators/YongShenCalculator.d.ts.map +1 -0
- package/dist/services/qimen/calculators/YongShenCalculator.js +497 -0
- package/dist/services/qimen/calculators/YongShenCalculator.js.map +1 -0
- package/dist/services/qimen/calculators/ZhuanPanCalculator.d.ts +111 -0
- package/dist/services/qimen/calculators/ZhuanPanCalculator.d.ts.map +1 -0
- package/dist/services/qimen/calculators/ZhuanPanCalculator.js +232 -0
- package/dist/services/qimen/calculators/ZhuanPanCalculator.js.map +1 -0
- package/dist/services/qimen/data/constants.d.ts +105 -0
- package/dist/services/qimen/data/constants.d.ts.map +1 -0
- package/dist/services/qimen/data/constants.js +295 -0
- package/dist/services/qimen/data/constants.js.map +1 -0
- package/dist/services/qimen/data/shensha-rules.d.ts +177 -0
- package/dist/services/qimen/data/shensha-rules.d.ts.map +1 -0
- package/dist/services/qimen/data/shensha-rules.js +397 -0
- package/dist/services/qimen/data/shensha-rules.js.map +1 -0
- package/dist/services/qimen/data/yongshen-rules.d.ts +115 -0
- package/dist/services/qimen/data/yongshen-rules.d.ts.map +1 -0
- package/dist/services/qimen/data/yongshen-rules.js +365 -0
- package/dist/services/qimen/data/yongshen-rules.js.map +1 -0
- package/dist/services/qimen/index.d.ts +20 -0
- package/dist/services/qimen/index.d.ts.map +1 -0
- package/dist/services/qimen/index.js +43 -0
- package/dist/services/qimen/index.js.map +1 -0
- package/dist/services/qimen/types.d.ts +316 -0
- package/dist/services/qimen/types.d.ts.map +1 -0
- package/dist/services/qimen/types.js +21 -0
- package/dist/services/qimen/types.js.map +1 -0
- package/dist/services/qimen/utils/gongUtils.d.ts +80 -0
- package/dist/services/qimen/utils/gongUtils.d.ts.map +1 -0
- package/dist/services/qimen/utils/gongUtils.js +164 -0
- package/dist/services/qimen/utils/gongUtils.js.map +1 -0
- package/dist/shared/logger.d.ts +5 -0
- package/dist/shared/logger.d.ts.map +1 -1
- package/dist/shared/logger.js +11 -4
- package/dist/shared/logger.js.map +1 -1
- package/dist/tools/baziTools.d.ts +13 -0
- package/dist/tools/baziTools.d.ts.map +1 -0
- package/dist/tools/baziTools.js +331 -0
- package/dist/tools/baziTools.js.map +1 -0
- package/dist/tools/divinationTools.d.ts +9 -0
- package/dist/tools/divinationTools.d.ts.map +1 -0
- package/dist/tools/divinationTools.js +209 -0
- package/dist/tools/divinationTools.js.map +1 -0
- package/dist/tools/qimenTools.d.ts +10 -0
- package/dist/tools/qimenTools.d.ts.map +1 -0
- package/dist/tools/qimenTools.js +132 -0
- package/dist/tools/qimenTools.js.map +1 -0
- package/dist/tools/schemas.d.ts +99 -0
- package/dist/tools/schemas.d.ts.map +1 -0
- package/dist/tools/schemas.js +162 -0
- package/dist/tools/schemas.js.map +1 -0
- package/dist/tools/ziweiTools.d.ts +14 -0
- package/dist/tools/ziweiTools.d.ts.map +1 -0
- package/dist/tools/ziweiTools.js +483 -0
- package/dist/tools/ziweiTools.js.map +1 -0
- package/dist/utils/timeNormalization.d.ts +42 -17
- package/dist/utils/timeNormalization.d.ts.map +1 -1
- package/dist/utils/timeNormalization.js +99 -41
- package/dist/utils/timeNormalization.js.map +1 -1
- package/package.json +15 -9
- package/dist/services/bazi/analyzers/HiddenStemsAnalyzer.d.ts +0 -16
- package/dist/services/bazi/analyzers/HiddenStemsAnalyzer.d.ts.map +0 -1
- package/dist/services/bazi/analyzers/HiddenStemsAnalyzer.js +0 -60
- package/dist/services/bazi/analyzers/HiddenStemsAnalyzer.js.map +0 -1
- package/dist/services/bazi/analyzers/NaYinAnalyzer.d.ts +0 -33
- package/dist/services/bazi/analyzers/NaYinAnalyzer.d.ts.map +0 -1
- package/dist/services/bazi/analyzers/NaYinAnalyzer.js +0 -209
- package/dist/services/bazi/analyzers/NaYinAnalyzer.js.map +0 -1
- package/dist/services/bazi/analyzers/ShenShaAnalyzer.d.ts +0 -236
- package/dist/services/bazi/analyzers/ShenShaAnalyzer.d.ts.map +0 -1
- package/dist/services/bazi/analyzers/ShenShaAnalyzer.js +0 -2079
- package/dist/services/bazi/analyzers/ShenShaAnalyzer.js.map +0 -1
- package/dist/services/bazi/analyzers/TraditionalAnalyzer.d.ts +0 -46
- package/dist/services/bazi/analyzers/TraditionalAnalyzer.d.ts.map +0 -1
- package/dist/services/bazi/analyzers/TraditionalAnalyzer.js +0 -260
- package/dist/services/bazi/analyzers/TraditionalAnalyzer.js.map +0 -1
|
@@ -3,67 +3,125 @@
|
|
|
3
3
|
* 時間歸一化工具
|
|
4
4
|
*
|
|
5
5
|
* 設計原則:
|
|
6
|
-
* 1.
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
6
|
+
* 1. 可複現性優先:內部規範表示為北京時間(UTC+8)壁鐘時間,
|
|
7
|
+
* 所有曆法計算(農曆、節氣、干支)均基於北京時間壁鐘分量
|
|
8
|
+
* 2. 輸入層負責歸一化:農曆轉公曆、時區換算都在入口層一次完成
|
|
9
|
+
* 3. 多時區支持(M4):timezone 為 IANA 時區名(如 America/New_York),
|
|
10
|
+
* 僅對公曆輸入生效;農曆輸入為曆法日期(無時區語義),忽略 timezone
|
|
11
|
+
* 4. 零額外依賴:時區換算基於 Intl.DateTimeFormat(宿主環境無關,跨機器確定性)
|
|
12
12
|
*/
|
|
13
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
14
|
exports.BEIJING_TZ = void 0;
|
|
15
|
+
exports.validateTimezone = validateTimezone;
|
|
16
|
+
exports.convertToBeijingWallClock = convertToBeijingWallClock;
|
|
15
17
|
exports.normalizeBirthDateTime = normalizeBirthDateTime;
|
|
16
18
|
const lunar_javascript_1 = require("lunar-javascript");
|
|
17
19
|
// ============================================
|
|
18
20
|
// Constants
|
|
19
21
|
// ============================================
|
|
20
|
-
/** 北京時區 IANA
|
|
22
|
+
/** 北京時區 IANA 標識(內部規範時區) */
|
|
21
23
|
exports.BEIJING_TZ = 'Asia/Shanghai';
|
|
22
24
|
// ============================================
|
|
23
|
-
//
|
|
25
|
+
// Timezone conversion (Intl-based, no deps)
|
|
24
26
|
// ============================================
|
|
27
|
+
/** 校驗 IANA 時區名,非法時拋出明確錯誤 */
|
|
28
|
+
function validateTimezone(timeZone) {
|
|
29
|
+
try {
|
|
30
|
+
new Intl.DateTimeFormat('en-US', { timeZone });
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
throw new Error(`無效的時區標識: ${timeZone}(需為 IANA 名稱,如 America/New_York)`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/** 取某時刻在指定時區的 UTC 偏移量(毫秒,東八區為 +8h) */
|
|
37
|
+
function tzOffsetMs(instant, timeZone) {
|
|
38
|
+
const dtf = new Intl.DateTimeFormat('en-US', {
|
|
39
|
+
timeZone,
|
|
40
|
+
hour12: false,
|
|
41
|
+
year: 'numeric',
|
|
42
|
+
month: '2-digit',
|
|
43
|
+
day: '2-digit',
|
|
44
|
+
hour: '2-digit',
|
|
45
|
+
minute: '2-digit',
|
|
46
|
+
second: '2-digit',
|
|
47
|
+
});
|
|
48
|
+
const parts = dtf.formatToParts(instant);
|
|
49
|
+
const get = (type) => {
|
|
50
|
+
const p = parts.find(x => x.type === type);
|
|
51
|
+
if (!p)
|
|
52
|
+
throw new Error(`時區偏移解析失敗: ${timeZone}`);
|
|
53
|
+
return Number(p.value);
|
|
54
|
+
};
|
|
55
|
+
const asUTC = Date.UTC(get('year'), get('month') - 1, get('day'), get('hour') % 24, get('minute'), get('second'));
|
|
56
|
+
return asUTC - instant.getTime();
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* 取某時刻的北京標準時間(UTC+8 平太陽時)壁鐘分量
|
|
60
|
+
*
|
|
61
|
+
* 命理口徑說明:內部規範表示採用固定 UTC+8,而非 Intl 的 Asia/Shanghai 顯示時間。
|
|
62
|
+
* 中國在 1986-1991 年實行過夏令時(夏季 UTC+9),主流排盤實務對夏令時期間的
|
|
63
|
+
* 出生時刻回撥一小時按標準時排盤;固定 +8 算術即這一口徑,且與
|
|
64
|
+
* lunar-javascript 的曆法換算假設一致。
|
|
65
|
+
*/
|
|
66
|
+
function beijingStandardWallClock(instant) {
|
|
67
|
+
const t = new Date(instant.getTime() + 8 * 3600 * 1000);
|
|
68
|
+
return {
|
|
69
|
+
year: t.getUTCFullYear(),
|
|
70
|
+
month: t.getUTCMonth() + 1,
|
|
71
|
+
day: t.getUTCDate(),
|
|
72
|
+
hour: t.getUTCHours(),
|
|
73
|
+
minute: t.getUTCMinutes(),
|
|
74
|
+
};
|
|
75
|
+
}
|
|
25
76
|
/**
|
|
26
|
-
*
|
|
77
|
+
* 將指定時區的壁鐘時間換算為北京標準時間(UTC+8)壁鐘分量
|
|
27
78
|
*
|
|
28
|
-
*
|
|
79
|
+
* 演算法:先假設輸入為 UTC 得到猜測時刻,再用該時刻的實際偏移量迭代修正
|
|
80
|
+
* (兩輪即可收斂至秒級偏移,第三輪兜底 DST 邊界)。
|
|
81
|
+
* 輸入側使用 Intl(正確處理各國歷史夏令時,如 1986-1991 中國夏令時),
|
|
82
|
+
* 輸出側使用固定 +8(命理標準時口徑),全程與宿主機時區無關。
|
|
83
|
+
*/
|
|
84
|
+
function convertToBeijingWallClock(input, timeZone) {
|
|
85
|
+
validateTimezone(timeZone);
|
|
86
|
+
const asUTC = Date.UTC(input.year, input.month - 1, input.day, input.hour, input.minute);
|
|
87
|
+
let guess = asUTC;
|
|
88
|
+
for (let i = 0; i < 3; i++) {
|
|
89
|
+
guess = asUTC - tzOffsetMs(new Date(guess), timeZone);
|
|
90
|
+
}
|
|
91
|
+
return beijingStandardWallClock(new Date(guess));
|
|
92
|
+
}
|
|
93
|
+
// ============================================
|
|
94
|
+
// Normalization
|
|
95
|
+
// ============================================
|
|
96
|
+
/**
|
|
97
|
+
* 歸一化出生(起卦)日期時間至北京時間規範表示
|
|
98
|
+
*
|
|
99
|
+
* 處理順序:
|
|
29
100
|
* 1. 補齊 minute 默認值
|
|
30
|
-
* 2.
|
|
101
|
+
* 2. 農曆輸入:轉換為公曆(農曆為曆法日期,忽略 timezone)
|
|
102
|
+
* 3. 公曆輸入且提供 timezone:換算為北京時間壁鐘
|
|
31
103
|
*
|
|
32
104
|
* @example
|
|
33
|
-
* //
|
|
34
|
-
* normalizeBirthDateTime({ year: 1990, month:
|
|
35
|
-
* //
|
|
36
|
-
*
|
|
37
|
-
* // 農曆輸入
|
|
38
|
-
* normalizeBirthDateTime({ year: 1990, month: 4, day: 21, hour: 10, isLunar: true })
|
|
39
|
-
* // { year: 1990, month: 5, day: 15, hour: 10, minute: 0, isLunarInput: true }
|
|
105
|
+
* // 紐約出生,真實出生時刻 1990-06-15 20:30 EDT
|
|
106
|
+
* normalizeBirthDateTime({ year: 1990, month: 6, day: 15, hour: 20, minute: 30, timezone: 'America/New_York' })
|
|
107
|
+
* // => 北京時間 1990-06-16 08:30(次日),用於排盤
|
|
40
108
|
*/
|
|
41
109
|
function normalizeBirthDateTime(input) {
|
|
42
110
|
const minute = input.minute ?? 0;
|
|
43
111
|
const isLunarInput = !!input.isLunar;
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
minute,
|
|
52
|
-
isLunarInput,
|
|
53
|
-
};
|
|
112
|
+
let solar = { year: input.year, month: input.month, day: input.day, hour: input.hour, minute };
|
|
113
|
+
// 農曆輸入:轉換為公曆(曆法日期無時區語義)
|
|
114
|
+
if (isLunarInput) {
|
|
115
|
+
const lunar = lunar_javascript_1.Lunar.fromYmd(input.year, input.month, input.day);
|
|
116
|
+
const s = lunar.getSolar();
|
|
117
|
+
solar = { year: s.getYear(), month: s.getMonth(), day: s.getDay(), hour: input.hour, minute };
|
|
118
|
+
return { ...solar, isLunarInput };
|
|
54
119
|
}
|
|
55
|
-
//
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
return {
|
|
61
|
-
year: solar.getYear(),
|
|
62
|
-
month: solar.getMonth(),
|
|
63
|
-
day: solar.getDay(),
|
|
64
|
-
hour: input.hour,
|
|
65
|
-
minute,
|
|
66
|
-
isLunarInput,
|
|
67
|
-
};
|
|
120
|
+
// 公曆輸入:時區換算(含北京時區歷史夏令時的歸一化)
|
|
121
|
+
if (input.timezone) {
|
|
122
|
+
solar = convertToBeijingWallClock(solar, input.timezone);
|
|
123
|
+
return { ...solar, isLunarInput, sourceTimezone: input.timezone };
|
|
124
|
+
}
|
|
125
|
+
return { ...solar, isLunarInput };
|
|
68
126
|
}
|
|
69
127
|
//# sourceMappingURL=timeNormalization.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timeNormalization.js","sourceRoot":"","sources":["../../src/utils/timeNormalization.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;
|
|
1
|
+
{"version":3,"file":"timeNormalization.js","sourceRoot":"","sources":["../../src/utils/timeNormalization.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mingpan",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"description": "MCP service for
|
|
3
|
+
"version": "0.1.4",
|
|
4
|
+
"description": "MCP service for Chinese metaphysics chart calculations: BaZi, ZiWei Dou Shu, LiuYao, MeiHua YiShu, DaLiuRen, and QiMen DunJia",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"bin": {
|
|
@@ -30,18 +30,24 @@
|
|
|
30
30
|
"mcp",
|
|
31
31
|
"bazi",
|
|
32
32
|
"ziwei",
|
|
33
|
+
"liuyao",
|
|
34
|
+
"meihua",
|
|
35
|
+
"daliuren",
|
|
36
|
+
"qimen",
|
|
37
|
+
"qimen-dunjia",
|
|
33
38
|
"fortune-telling",
|
|
34
39
|
"chinese-astrology",
|
|
40
|
+
"i-ching",
|
|
41
|
+
"divination",
|
|
35
42
|
"model-context-protocol"
|
|
36
43
|
],
|
|
37
|
-
"author": "",
|
|
44
|
+
"author": "ChesterRa",
|
|
38
45
|
"license": "Apache-2.0",
|
|
39
46
|
"dependencies": {
|
|
40
|
-
"@modelcontextprotocol/sdk": "^1.
|
|
41
|
-
"iztro": "^2.
|
|
42
|
-
"lunar-javascript": "^1.7.
|
|
43
|
-
"zod": "^
|
|
44
|
-
"zod-to-json-schema": "^3.25.0"
|
|
47
|
+
"@modelcontextprotocol/sdk": "^1.30.0",
|
|
48
|
+
"iztro": "^2.6.0",
|
|
49
|
+
"lunar-javascript": "^1.7.7",
|
|
50
|
+
"zod": "^4.4.3"
|
|
45
51
|
},
|
|
46
52
|
"devDependencies": {
|
|
47
53
|
"@types/node": "^20.11.17",
|
|
@@ -49,6 +55,6 @@
|
|
|
49
55
|
"vitest": "^1.6.1"
|
|
50
56
|
},
|
|
51
57
|
"engines": {
|
|
52
|
-
"node": ">=
|
|
58
|
+
"node": ">=20.0.0"
|
|
53
59
|
}
|
|
54
60
|
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Hidden Stems Analyzer
|
|
3
|
-
* Analyzes hidden stems (藏干) in earthly branches
|
|
4
|
-
*/
|
|
5
|
-
import { BaziChart, HiddenStemsAnalysis } from '../types';
|
|
6
|
-
export declare class HiddenStemsAnalyzer {
|
|
7
|
-
/**
|
|
8
|
-
* Analyze hidden stems in the BaZi chart
|
|
9
|
-
*/
|
|
10
|
-
static analyze(chart: BaziChart): HiddenStemsAnalysis;
|
|
11
|
-
/**
|
|
12
|
-
* Get element of a stem
|
|
13
|
-
*/
|
|
14
|
-
private static getStemElement;
|
|
15
|
-
}
|
|
16
|
-
//# sourceMappingURL=HiddenStemsAnalyzer.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"HiddenStemsAnalyzer.d.ts","sourceRoot":"","sources":["../../../../src/services/bazi/analyzers/HiddenStemsAnalyzer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAG1D,qBAAa,mBAAmB;IAC9B;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,GAAG,mBAAmB;IA2CrD;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;CAI9B"}
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Hidden Stems Analyzer
|
|
4
|
-
* Analyzes hidden stems (藏干) in earthly branches
|
|
5
|
-
*/
|
|
6
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.HiddenStemsAnalyzer = void 0;
|
|
8
|
-
const bazi_1 = require("../../../core/constants/bazi");
|
|
9
|
-
class HiddenStemsAnalyzer {
|
|
10
|
-
/**
|
|
11
|
-
* Analyze hidden stems in the BaZi chart
|
|
12
|
-
*/
|
|
13
|
-
static analyze(chart) {
|
|
14
|
-
const byElement = {
|
|
15
|
-
[bazi_1.FIVE_ELEMENTS_ARRAY[0]]: 0, // 木 (wood)
|
|
16
|
-
[bazi_1.FIVE_ELEMENTS_ARRAY[1]]: 0, // 火 (fire)
|
|
17
|
-
[bazi_1.FIVE_ELEMENTS_ARRAY[2]]: 0, // 土 (earth)
|
|
18
|
-
[bazi_1.FIVE_ELEMENTS_ARRAY[3]]: 0, // 金 (metal)
|
|
19
|
-
[bazi_1.FIVE_ELEMENTS_ARRAY[4]]: 0 // 水 (water)
|
|
20
|
-
};
|
|
21
|
-
const mainQi = [];
|
|
22
|
-
const residualQi = [];
|
|
23
|
-
let total = 0;
|
|
24
|
-
// Analyze each pillar
|
|
25
|
-
const pillars = [chart.year, chart.month, chart.day, chart.hour];
|
|
26
|
-
pillars.forEach(pillar => {
|
|
27
|
-
if (pillar.hiddenStems && pillar.hiddenStems.length > 0) {
|
|
28
|
-
pillar.hiddenStems.forEach((hidden, index) => {
|
|
29
|
-
const element = this.getStemElement(hidden.stem);
|
|
30
|
-
if (element) {
|
|
31
|
-
byElement[element] += hidden.power;
|
|
32
|
-
total += hidden.power;
|
|
33
|
-
}
|
|
34
|
-
// First hidden stem is main qi (本氣)
|
|
35
|
-
if (index === 0) {
|
|
36
|
-
mainQi.push(hidden.stem);
|
|
37
|
-
}
|
|
38
|
-
else {
|
|
39
|
-
residualQi.push(hidden.stem);
|
|
40
|
-
}
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
});
|
|
44
|
-
return {
|
|
45
|
-
total,
|
|
46
|
-
byElement,
|
|
47
|
-
mainQi,
|
|
48
|
-
residualQi
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Get element of a stem
|
|
53
|
-
*/
|
|
54
|
-
static getStemElement(stem) {
|
|
55
|
-
const stemData = bazi_1.HEAVENLY_STEMS.find(s => s.name === stem);
|
|
56
|
-
return stemData?.element || '';
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
exports.HiddenStemsAnalyzer = HiddenStemsAnalyzer;
|
|
60
|
-
//# sourceMappingURL=HiddenStemsAnalyzer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"HiddenStemsAnalyzer.js","sourceRoot":"","sources":["../../../../src/services/bazi/analyzers/HiddenStemsAnalyzer.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAGH,uDAAmF;AAEnF,MAAa,mBAAmB;IAC9B;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,KAAgB;QAC7B,MAAM,SAAS,GAA2B;YACxC,CAAC,0BAAmB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAG,WAAW;YACzC,CAAC,0BAAmB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAG,WAAW;YACzC,CAAC,0BAAmB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAG,YAAY;YAC1C,CAAC,0BAAmB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAG,YAAY;YAC1C,CAAC,0BAAmB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAG,YAAY;SAC3C,CAAC;QAEF,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,UAAU,GAAa,EAAE,CAAC;QAChC,IAAI,KAAK,GAAG,CAAC,CAAC;QAEd,sBAAsB;QACtB,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAEjE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YACvB,IAAI,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxD,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;oBAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBACjD,IAAI,OAAO,EAAE,CAAC;wBACZ,SAAS,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC;wBACnC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC;oBACxB,CAAC;oBAED,oCAAoC;oBACpC,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;wBAChB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBAC3B,CAAC;yBAAM,CAAC;wBACN,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBAC/B,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO;YACL,KAAK;YACL,SAAS;YACT,MAAM;YACN,UAAU;SACX,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,cAAc,CAAC,IAAY;QACxC,MAAM,QAAQ,GAAG,qBAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QAC3D,OAAO,QAAQ,EAAE,OAAO,IAAI,EAAE,CAAC;IACjC,CAAC;CACF;AAtDD,kDAsDC"}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { BaziChart } from '../types';
|
|
2
|
-
export interface NaYinElement {
|
|
3
|
-
name: string;
|
|
4
|
-
element: string;
|
|
5
|
-
quality: string;
|
|
6
|
-
description: string;
|
|
7
|
-
}
|
|
8
|
-
export interface NaYinAnalysis {
|
|
9
|
-
year: NaYinElement;
|
|
10
|
-
month: NaYinElement;
|
|
11
|
-
day: NaYinElement;
|
|
12
|
-
hour: NaYinElement | null;
|
|
13
|
-
summary: {
|
|
14
|
-
dominantElement: string;
|
|
15
|
-
characteristics: string[];
|
|
16
|
-
interactions: string[];
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
export declare class NaYinAnalyzer {
|
|
20
|
-
/**
|
|
21
|
-
* Get NaYin element for a stem-branch combination
|
|
22
|
-
*/
|
|
23
|
-
private static getNaYin;
|
|
24
|
-
/**
|
|
25
|
-
* Analyze element interactions between NaYin elements
|
|
26
|
-
*/
|
|
27
|
-
private static analyzeInteractions;
|
|
28
|
-
/**
|
|
29
|
-
* Analyze NaYin elements for a BaZi chart
|
|
30
|
-
*/
|
|
31
|
-
static analyze(chart: BaziChart): NaYinAnalysis;
|
|
32
|
-
}
|
|
33
|
-
//# sourceMappingURL=NaYinAnalyzer.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"NaYinAnalyzer.d.ts","sourceRoot":"","sources":["../../../../src/services/bazi/analyzers/NaYinAnalyzer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AA6GrC,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,YAAY,CAAC;IACnB,KAAK,EAAE,YAAY,CAAC;IACpB,GAAG,EAAE,YAAY,CAAC;IAClB,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE;QACP,eAAe,EAAE,MAAM,CAAC;QACxB,eAAe,EAAE,MAAM,EAAE,CAAC;QAC1B,YAAY,EAAE,MAAM,EAAE,CAAC;KACxB,CAAC;CACH;AAED,qBAAa,aAAa;IACxB;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ;IAevB;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAwDlC;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,GAAG,aAAa;CAqChD"}
|
|
@@ -1,209 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.NaYinAnalyzer = void 0;
|
|
4
|
-
/**
|
|
5
|
-
* 六十甲子纳音五行表
|
|
6
|
-
* Each pair of stems and branches has a specific NaYin element
|
|
7
|
-
*/
|
|
8
|
-
const NAYIN_MAP = {
|
|
9
|
-
// 甲子乙丑海中金
|
|
10
|
-
'甲子': '海中金', '乙丑': '海中金',
|
|
11
|
-
// 丙寅丁卯炉中火
|
|
12
|
-
'丙寅': '炉中火', '丁卯': '炉中火',
|
|
13
|
-
// 戊辰己巳大林木
|
|
14
|
-
'戊辰': '大林木', '己巳': '大林木',
|
|
15
|
-
// 庚午辛未路旁土
|
|
16
|
-
'庚午': '路旁土', '辛未': '路旁土',
|
|
17
|
-
// 壬申癸酉剑锋金
|
|
18
|
-
'壬申': '剑锋金', '癸酉': '剑锋金',
|
|
19
|
-
// 甲戌乙亥山头火
|
|
20
|
-
'甲戌': '山头火', '乙亥': '山头火',
|
|
21
|
-
// 丙子丁丑涧下水
|
|
22
|
-
'丙子': '涧下水', '丁丑': '涧下水',
|
|
23
|
-
// 戊寅己卯城头土
|
|
24
|
-
'戊寅': '城头土', '己卯': '城头土',
|
|
25
|
-
// 庚辰辛巳白蜡金
|
|
26
|
-
'庚辰': '白蜡金', '辛巳': '白蜡金',
|
|
27
|
-
// 壬午癸未杨柳木
|
|
28
|
-
'壬午': '杨柳木', '癸未': '杨柳木',
|
|
29
|
-
// 甲申乙酉泉中水
|
|
30
|
-
'甲申': '泉中水', '乙酉': '泉中水',
|
|
31
|
-
// 丙戌丁亥屋上土
|
|
32
|
-
'丙戌': '屋上土', '丁亥': '屋上土',
|
|
33
|
-
// 戊子己丑霹雳火
|
|
34
|
-
'戊子': '霹雳火', '己丑': '霹雳火',
|
|
35
|
-
// 庚寅辛卯松柏木
|
|
36
|
-
'庚寅': '松柏木', '辛卯': '松柏木',
|
|
37
|
-
// 壬辰癸巳长流水
|
|
38
|
-
'壬辰': '长流水', '癸巳': '长流水',
|
|
39
|
-
// 甲午乙未沙中金
|
|
40
|
-
'甲午': '沙中金', '乙未': '沙中金',
|
|
41
|
-
// 丙申丁酉山下火
|
|
42
|
-
'丙申': '山下火', '丁酉': '山下火',
|
|
43
|
-
// 戊戌己亥平地木
|
|
44
|
-
'戊戌': '平地木', '己亥': '平地木',
|
|
45
|
-
// 庚子辛丑壁上土
|
|
46
|
-
'庚子': '壁上土', '辛丑': '壁上土',
|
|
47
|
-
// 壬寅癸卯金箔金
|
|
48
|
-
'壬寅': '金箔金', '癸卯': '金箔金',
|
|
49
|
-
// 甲辰乙巳覆灯火
|
|
50
|
-
'甲辰': '覆灯火', '乙巳': '覆灯火',
|
|
51
|
-
// 丙午丁未天河水
|
|
52
|
-
'丙午': '天河水', '丁未': '天河水',
|
|
53
|
-
// 戊申己酉大驿土
|
|
54
|
-
'戊申': '大驿土', '己酉': '大驿土',
|
|
55
|
-
// 庚戌辛亥钗钏金
|
|
56
|
-
'庚戌': '钗钏金', '辛亥': '钗钏金',
|
|
57
|
-
// 壬子癸丑桑柘木
|
|
58
|
-
'壬子': '桑柘木', '癸丑': '桑柘木',
|
|
59
|
-
// 甲寅乙卯大溪水
|
|
60
|
-
'甲寅': '大溪水', '乙卯': '大溪水',
|
|
61
|
-
// 丙辰丁巳沙中土
|
|
62
|
-
'丙辰': '沙中土', '丁巳': '沙中土',
|
|
63
|
-
// 戊午己未天上火
|
|
64
|
-
'戊午': '天上火', '己未': '天上火',
|
|
65
|
-
// 庚申辛酉石榴木
|
|
66
|
-
'庚申': '石榴木', '辛酉': '石榴木',
|
|
67
|
-
// 壬戌癸亥大海水
|
|
68
|
-
'壬戌': '大海水', '癸亥': '大海水'
|
|
69
|
-
};
|
|
70
|
-
/**
|
|
71
|
-
* NaYin element characteristics
|
|
72
|
-
*/
|
|
73
|
-
const NAYIN_CHARACTERISTICS = {
|
|
74
|
-
'海中金': { element: '金', quality: '深藏', description: '金在海中,宝藏深藏,需要挖掘' },
|
|
75
|
-
'炉中火': { element: '火', quality: '炼化', description: '炉中之火,可炼金成器' },
|
|
76
|
-
'大林木': { element: '木', quality: '茂盛', description: '大林之木,枝繁叶茂' },
|
|
77
|
-
'路旁土': { element: '土', quality: '承载', description: '路旁之土,承载万物' },
|
|
78
|
-
'剑锋金': { element: '金', quality: '锋利', description: '剑锋之金,锋芒毕露' },
|
|
79
|
-
'山头火': { element: '火', quality: '光明', description: '山头之火,照亮四方' },
|
|
80
|
-
'涧下水': { element: '水', quality: '清澈', description: '涧下之水,清澈见底' },
|
|
81
|
-
'城头土': { element: '土', quality: '坚固', description: '城头之土,固若金汤' },
|
|
82
|
-
'白蜡金': { element: '金', quality: '精纯', description: '白蜡之金,纯净精致' },
|
|
83
|
-
'杨柳木': { element: '木', quality: '柔韧', description: '杨柳之木,柔韧多姿' },
|
|
84
|
-
'泉中水': { element: '水', quality: '涌动', description: '泉中之水,源源不断' },
|
|
85
|
-
'屋上土': { element: '土', quality: '庇护', description: '屋上之土,遮风挡雨' },
|
|
86
|
-
'霹雳火': { element: '火', quality: '迅猛', description: '霹雳之火,雷厉风行' },
|
|
87
|
-
'松柏木': { element: '木', quality: '坚韧', description: '松柏之木,傲雪凌霜' },
|
|
88
|
-
'长流水': { element: '水', quality: '绵延', description: '长流之水,绵延不绝' },
|
|
89
|
-
'沙中金': { element: '金', quality: '散布', description: '沙中之金,需要淘洗' },
|
|
90
|
-
'山下火': { element: '火', quality: '温暖', description: '山下之火,温暖如春' },
|
|
91
|
-
'平地木': { element: '木', quality: '平稳', description: '平地之木,根基稳固' },
|
|
92
|
-
'壁上土': { element: '土', quality: '装饰', description: '壁上之土,美化环境' },
|
|
93
|
-
'金箔金': { element: '金', quality: '华丽', description: '金箔之金,华丽装饰' },
|
|
94
|
-
'覆灯火': { element: '火', quality: '照明', description: '覆灯之火,照亮前程' },
|
|
95
|
-
'天河水': { element: '水', quality: '浩瀚', description: '天河之水,浩瀚无垠' },
|
|
96
|
-
'大驿土': { element: '土', quality: '通达', description: '大驿之土,四通八达' },
|
|
97
|
-
'钗钏金': { element: '金', quality: '精美', description: '钗钏之金,精美饰品' },
|
|
98
|
-
'桑柘木': { element: '木', quality: '实用', description: '桑柘之木,养蚕织布' },
|
|
99
|
-
'大溪水': { element: '水', quality: '汇聚', description: '大溪之水,百川汇聚' },
|
|
100
|
-
'沙中土': { element: '土', quality: '松软', description: '沙中之土,松软易变' },
|
|
101
|
-
'天上火': { element: '火', quality: '崇高', description: '天上之火,高不可攀' },
|
|
102
|
-
'石榴木': { element: '木', quality: '多子', description: '石榴之木,多子多福' },
|
|
103
|
-
'大海水': { element: '水', quality: '包容', description: '大海之水,包容万物' }
|
|
104
|
-
};
|
|
105
|
-
class NaYinAnalyzer {
|
|
106
|
-
/**
|
|
107
|
-
* Get NaYin element for a stem-branch combination
|
|
108
|
-
*/
|
|
109
|
-
static getNaYin(stem, branch) {
|
|
110
|
-
const key = stem + branch;
|
|
111
|
-
const nayin = NAYIN_MAP[key];
|
|
112
|
-
if (!nayin)
|
|
113
|
-
return null;
|
|
114
|
-
const characteristics = NAYIN_CHARACTERISTICS[nayin];
|
|
115
|
-
return {
|
|
116
|
-
name: nayin,
|
|
117
|
-
element: characteristics.element,
|
|
118
|
-
quality: characteristics.quality,
|
|
119
|
-
description: characteristics.description
|
|
120
|
-
};
|
|
121
|
-
}
|
|
122
|
-
/**
|
|
123
|
-
* Analyze element interactions between NaYin elements
|
|
124
|
-
*/
|
|
125
|
-
static analyzeInteractions(elements) {
|
|
126
|
-
const interactions = [];
|
|
127
|
-
const validElements = elements.filter(e => e !== null);
|
|
128
|
-
// Check for same element reinforcement
|
|
129
|
-
const elementCounts = {};
|
|
130
|
-
validElements.forEach(e => {
|
|
131
|
-
elementCounts[e.element] = (elementCounts[e.element] || 0) + 1;
|
|
132
|
-
});
|
|
133
|
-
Object.entries(elementCounts).forEach(([element, count]) => {
|
|
134
|
-
if (count >= 3) {
|
|
135
|
-
interactions.push(`strong_${element}_convergence`);
|
|
136
|
-
}
|
|
137
|
-
else if (count === 2) {
|
|
138
|
-
interactions.push(`${element}_reinforcement`);
|
|
139
|
-
}
|
|
140
|
-
});
|
|
141
|
-
// Check generation cycles
|
|
142
|
-
const generationMap = {
|
|
143
|
-
'木': '火',
|
|
144
|
-
'火': '土',
|
|
145
|
-
'土': '金',
|
|
146
|
-
'金': '水',
|
|
147
|
-
'水': '木'
|
|
148
|
-
};
|
|
149
|
-
for (let i = 0; i < validElements.length - 1; i++) {
|
|
150
|
-
const current = validElements[i];
|
|
151
|
-
const next = validElements[i + 1];
|
|
152
|
-
if (generationMap[current.element] === next.element) {
|
|
153
|
-
interactions.push(`${current.element}_generates_${next.element}`);
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
// Check control cycles
|
|
157
|
-
const controlMap = {
|
|
158
|
-
'木': '土',
|
|
159
|
-
'土': '水',
|
|
160
|
-
'水': '火',
|
|
161
|
-
'火': '金',
|
|
162
|
-
'金': '木'
|
|
163
|
-
};
|
|
164
|
-
for (let i = 0; i < validElements.length; i++) {
|
|
165
|
-
for (let j = i + 1; j < validElements.length; j++) {
|
|
166
|
-
if (controlMap[validElements[i].element] === validElements[j].element) {
|
|
167
|
-
interactions.push(`${validElements[i].element}_controls_${validElements[j].element}`);
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
return interactions;
|
|
172
|
-
}
|
|
173
|
-
/**
|
|
174
|
-
* Analyze NaYin elements for a BaZi chart
|
|
175
|
-
*/
|
|
176
|
-
static analyze(chart) {
|
|
177
|
-
const yearNaYin = this.getNaYin(chart.year.stem, chart.year.branch);
|
|
178
|
-
const monthNaYin = this.getNaYin(chart.month.stem, chart.month.branch);
|
|
179
|
-
const dayNaYin = this.getNaYin(chart.day.stem, chart.day.branch);
|
|
180
|
-
const hourNaYin = chart.hour ?
|
|
181
|
-
this.getNaYin(chart.hour.stem, chart.hour.branch) : null;
|
|
182
|
-
const allElements = [yearNaYin, monthNaYin, dayNaYin, hourNaYin];
|
|
183
|
-
const validElements = allElements.filter(e => e !== null);
|
|
184
|
-
// Find dominant element
|
|
185
|
-
const elementCounts = {};
|
|
186
|
-
validElements.forEach(e => {
|
|
187
|
-
elementCounts[e.element] = (elementCounts[e.element] || 0) + 1;
|
|
188
|
-
});
|
|
189
|
-
const dominantElement = Object.entries(elementCounts)
|
|
190
|
-
.sort(([, a], [, b]) => b - a)[0][0];
|
|
191
|
-
// Collect unique characteristics
|
|
192
|
-
const characteristics = [...new Set(validElements.map(e => e.quality))];
|
|
193
|
-
// Analyze interactions
|
|
194
|
-
const interactions = this.analyzeInteractions(allElements);
|
|
195
|
-
return {
|
|
196
|
-
year: yearNaYin,
|
|
197
|
-
month: monthNaYin,
|
|
198
|
-
day: dayNaYin,
|
|
199
|
-
hour: hourNaYin,
|
|
200
|
-
summary: {
|
|
201
|
-
dominantElement,
|
|
202
|
-
characteristics,
|
|
203
|
-
interactions
|
|
204
|
-
}
|
|
205
|
-
};
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
exports.NaYinAnalyzer = NaYinAnalyzer;
|
|
209
|
-
//# sourceMappingURL=NaYinAnalyzer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"NaYinAnalyzer.js","sourceRoot":"","sources":["../../../../src/services/bazi/analyzers/NaYinAnalyzer.ts"],"names":[],"mappings":";;;AAEA;;;GAGG;AACH,MAAM,SAAS,GAA2B;IACxC,UAAU;IACV,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK;IACxB,UAAU;IACV,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK;IACxB,UAAU;IACV,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK;IACxB,UAAU;IACV,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK;IACxB,UAAU;IACV,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK;IACxB,UAAU;IACV,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK;IACxB,UAAU;IACV,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK;IACxB,UAAU;IACV,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK;IACxB,UAAU;IACV,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK;IACxB,UAAU;IACV,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK;IACxB,UAAU;IACV,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK;IACxB,UAAU;IACV,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK;IACxB,UAAU;IACV,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK;IACxB,UAAU;IACV,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK;IACxB,UAAU;IACV,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK;IACxB,UAAU;IACV,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK;IACxB,UAAU;IACV,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK;IACxB,UAAU;IACV,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK;IACxB,UAAU;IACV,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK;IACxB,UAAU;IACV,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK;IACxB,UAAU;IACV,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK;IACxB,UAAU;IACV,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK;IACxB,UAAU;IACV,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK;IACxB,UAAU;IACV,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK;IACxB,UAAU;IACV,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK;IACxB,UAAU;IACV,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK;IACxB,UAAU;IACV,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK;IACxB,UAAU;IACV,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK;IACxB,UAAU;IACV,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK;IACxB,UAAU;IACV,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK;CACzB,CAAC;AAEF;;GAEG;AACH,MAAM,qBAAqB,GAItB;IACH,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,gBAAgB,EAAE;IACrE,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE;IACjE,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE;IAChE,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE;IAChE,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE;IAChE,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE;IAChE,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE;IAChE,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE;IAChE,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE;IAChE,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE;IAChE,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE;IAChE,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE;IAChE,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE;IAChE,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE;IAChE,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE;IAChE,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE;IAChE,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE;IAChE,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE;IAChE,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE;IAChE,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE;IAChE,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE;IAChE,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE;IAChE,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE;IAChE,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE;IAChE,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,OAA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"}
|