mingpan 0.1.1 → 0.1.2

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 (135) hide show
  1. package/README.md +53 -7
  2. package/dist/core/bazi/types.d.ts +0 -1
  3. package/dist/core/bazi/types.d.ts.map +1 -1
  4. package/dist/index.js +398 -164
  5. package/dist/index.js.map +1 -1
  6. package/dist/output/daliurenTextRenderer.d.ts +23 -0
  7. package/dist/output/daliurenTextRenderer.d.ts.map +1 -0
  8. package/dist/output/daliurenTextRenderer.js +109 -0
  9. package/dist/output/daliurenTextRenderer.js.map +1 -0
  10. package/dist/output/liuyaoTextRenderer.d.ts +12 -0
  11. package/dist/output/liuyaoTextRenderer.d.ts.map +1 -0
  12. package/dist/output/liuyaoTextRenderer.js +148 -0
  13. package/dist/output/liuyaoTextRenderer.js.map +1 -0
  14. package/dist/output/meihuaTextRenderer.d.ts +12 -0
  15. package/dist/output/meihuaTextRenderer.d.ts.map +1 -0
  16. package/dist/output/meihuaTextRenderer.js +53 -0
  17. package/dist/output/meihuaTextRenderer.js.map +1 -0
  18. package/dist/services/bazi/types.d.ts +0 -2
  19. package/dist/services/bazi/types.d.ts.map +1 -1
  20. package/dist/services/bazi/types.js.map +1 -1
  21. package/dist/services/daliuren/DaliurenService.d.ts +24 -0
  22. package/dist/services/daliuren/DaliurenService.d.ts.map +1 -0
  23. package/dist/services/daliuren/DaliurenService.js +67 -0
  24. package/dist/services/daliuren/DaliurenService.js.map +1 -0
  25. package/dist/services/daliuren/calculators/SanChuanCalculator.d.ts +87 -0
  26. package/dist/services/daliuren/calculators/SanChuanCalculator.d.ts.map +1 -0
  27. package/dist/services/daliuren/calculators/SanChuanCalculator.js +443 -0
  28. package/dist/services/daliuren/calculators/SanChuanCalculator.js.map +1 -0
  29. package/dist/services/daliuren/calculators/ShenShaCalculator.d.ts +33 -0
  30. package/dist/services/daliuren/calculators/ShenShaCalculator.d.ts.map +1 -0
  31. package/dist/services/daliuren/calculators/ShenShaCalculator.js +92 -0
  32. package/dist/services/daliuren/calculators/ShenShaCalculator.js.map +1 -0
  33. package/dist/services/daliuren/calculators/SiKeCalculator.d.ts +35 -0
  34. package/dist/services/daliuren/calculators/SiKeCalculator.d.ts.map +1 -0
  35. package/dist/services/daliuren/calculators/SiKeCalculator.js +121 -0
  36. package/dist/services/daliuren/calculators/SiKeCalculator.js.map +1 -0
  37. package/dist/services/daliuren/calculators/TianDiPanCalculator.d.ts +41 -0
  38. package/dist/services/daliuren/calculators/TianDiPanCalculator.d.ts.map +1 -0
  39. package/dist/services/daliuren/calculators/TianDiPanCalculator.js +138 -0
  40. package/dist/services/daliuren/calculators/TianDiPanCalculator.js.map +1 -0
  41. package/dist/services/daliuren/data/constants.d.ts +62 -0
  42. package/dist/services/daliuren/data/constants.d.ts.map +1 -0
  43. package/dist/services/daliuren/data/constants.js +240 -0
  44. package/dist/services/daliuren/data/constants.js.map +1 -0
  45. package/dist/services/daliuren/index.d.ts +11 -0
  46. package/dist/services/daliuren/index.d.ts.map +1 -0
  47. package/dist/services/daliuren/index.js +33 -0
  48. package/dist/services/daliuren/index.js.map +1 -0
  49. package/dist/services/daliuren/types.d.ts +152 -0
  50. package/dist/services/daliuren/types.d.ts.map +1 -0
  51. package/dist/services/daliuren/types.js +17 -0
  52. package/dist/services/daliuren/types.js.map +1 -0
  53. package/dist/services/liuyao/LiuyaoService.d.ts +37 -0
  54. package/dist/services/liuyao/LiuyaoService.d.ts.map +1 -0
  55. package/dist/services/liuyao/LiuyaoService.js +214 -0
  56. package/dist/services/liuyao/LiuyaoService.js.map +1 -0
  57. package/dist/services/liuyao/calculators/FushenCalculator.d.ts +40 -0
  58. package/dist/services/liuyao/calculators/FushenCalculator.d.ts.map +1 -0
  59. package/dist/services/liuyao/calculators/FushenCalculator.js +124 -0
  60. package/dist/services/liuyao/calculators/FushenCalculator.js.map +1 -0
  61. package/dist/services/liuyao/calculators/JintuishenCalculator.d.ts +37 -0
  62. package/dist/services/liuyao/calculators/JintuishenCalculator.d.ts.map +1 -0
  63. package/dist/services/liuyao/calculators/JintuishenCalculator.js +86 -0
  64. package/dist/services/liuyao/calculators/JintuishenCalculator.js.map +1 -0
  65. package/dist/services/liuyao/calculators/LiuqinCalculator.d.ts +24 -0
  66. package/dist/services/liuyao/calculators/LiuqinCalculator.d.ts.map +1 -0
  67. package/dist/services/liuyao/calculators/LiuqinCalculator.js +75 -0
  68. package/dist/services/liuyao/calculators/LiuqinCalculator.js.map +1 -0
  69. package/dist/services/liuyao/calculators/LiushenCalculator.d.ts +29 -0
  70. package/dist/services/liuyao/calculators/LiushenCalculator.d.ts.map +1 -0
  71. package/dist/services/liuyao/calculators/LiushenCalculator.js +58 -0
  72. package/dist/services/liuyao/calculators/LiushenCalculator.js.map +1 -0
  73. package/dist/services/liuyao/calculators/NajiaCalculator.d.ts +55 -0
  74. package/dist/services/liuyao/calculators/NajiaCalculator.d.ts.map +1 -0
  75. package/dist/services/liuyao/calculators/NajiaCalculator.js +87 -0
  76. package/dist/services/liuyao/calculators/NajiaCalculator.js.map +1 -0
  77. package/dist/services/liuyao/calculators/WangshuaiCalculator.d.ts +43 -0
  78. package/dist/services/liuyao/calculators/WangshuaiCalculator.d.ts.map +1 -0
  79. package/dist/services/liuyao/calculators/WangshuaiCalculator.js +100 -0
  80. package/dist/services/liuyao/calculators/WangshuaiCalculator.js.map +1 -0
  81. package/dist/services/liuyao/calculators/XunkongCalculator.d.ts +30 -0
  82. package/dist/services/liuyao/calculators/XunkongCalculator.d.ts.map +1 -0
  83. package/dist/services/liuyao/calculators/XunkongCalculator.js +58 -0
  84. package/dist/services/liuyao/calculators/XunkongCalculator.js.map +1 -0
  85. package/dist/services/liuyao/data/guagong.d.ts +94 -0
  86. package/dist/services/liuyao/data/guagong.d.ts.map +1 -0
  87. package/dist/services/liuyao/data/guagong.js +317 -0
  88. package/dist/services/liuyao/data/guagong.js.map +1 -0
  89. package/dist/services/liuyao/index.d.ts +13 -0
  90. package/dist/services/liuyao/index.d.ts.map +1 -0
  91. package/dist/services/liuyao/index.js +29 -0
  92. package/dist/services/liuyao/index.js.map +1 -0
  93. package/dist/services/liuyao/types.d.ts +154 -0
  94. package/dist/services/liuyao/types.d.ts.map +1 -0
  95. package/dist/services/liuyao/types.js +11 -0
  96. package/dist/services/liuyao/types.js.map +1 -0
  97. package/dist/services/meihua/MeihuaService.d.ts +32 -0
  98. package/dist/services/meihua/MeihuaService.d.ts.map +1 -0
  99. package/dist/services/meihua/MeihuaService.js +176 -0
  100. package/dist/services/meihua/MeihuaService.js.map +1 -0
  101. package/dist/services/meihua/calculators/BianguaCalculator.d.ts +21 -0
  102. package/dist/services/meihua/calculators/BianguaCalculator.d.ts.map +1 -0
  103. package/dist/services/meihua/calculators/BianguaCalculator.js +46 -0
  104. package/dist/services/meihua/calculators/BianguaCalculator.js.map +1 -0
  105. package/dist/services/meihua/calculators/HuguaCalculator.d.ts +22 -0
  106. package/dist/services/meihua/calculators/HuguaCalculator.d.ts.map +1 -0
  107. package/dist/services/meihua/calculators/HuguaCalculator.js +46 -0
  108. package/dist/services/meihua/calculators/HuguaCalculator.js.map +1 -0
  109. package/dist/services/meihua/calculators/QiguaCalculator.d.ts +40 -0
  110. package/dist/services/meihua/calculators/QiguaCalculator.d.ts.map +1 -0
  111. package/dist/services/meihua/calculators/QiguaCalculator.js +105 -0
  112. package/dist/services/meihua/calculators/QiguaCalculator.js.map +1 -0
  113. package/dist/services/meihua/calculators/TiyongCalculator.d.ts +34 -0
  114. package/dist/services/meihua/calculators/TiyongCalculator.d.ts.map +1 -0
  115. package/dist/services/meihua/calculators/TiyongCalculator.js +105 -0
  116. package/dist/services/meihua/calculators/TiyongCalculator.js.map +1 -0
  117. package/dist/services/meihua/data/bagua.d.ts +19 -0
  118. package/dist/services/meihua/data/bagua.d.ts.map +1 -0
  119. package/dist/services/meihua/data/bagua.js +81 -0
  120. package/dist/services/meihua/data/bagua.js.map +1 -0
  121. package/dist/services/meihua/index.d.ts +11 -0
  122. package/dist/services/meihua/index.d.ts.map +1 -0
  123. package/dist/services/meihua/index.js +27 -0
  124. package/dist/services/meihua/index.js.map +1 -0
  125. package/dist/services/meihua/types.d.ts +95 -0
  126. package/dist/services/meihua/types.d.ts.map +1 -0
  127. package/dist/services/meihua/types.js +6 -0
  128. package/dist/services/meihua/types.js.map +1 -0
  129. package/dist/shared/types.d.ts +0 -1
  130. package/dist/shared/types.d.ts.map +1 -1
  131. package/dist/utils/timeNormalization.d.ts +48 -0
  132. package/dist/utils/timeNormalization.d.ts.map +1 -0
  133. package/dist/utils/timeNormalization.js +69 -0
  134. package/dist/utils/timeNormalization.js.map +1 -0
  135. package/package.json +1 -1
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ /**
3
+ * 大六壬服務模組導出
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
17
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
18
+ };
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.ShenShaCalculator = exports.SanChuanCalculator = exports.SiKeCalculator = exports.TianDiPanCalculator = exports.DaliurenService = void 0;
21
+ var DaliurenService_1 = require("./DaliurenService");
22
+ Object.defineProperty(exports, "DaliurenService", { enumerable: true, get: function () { return DaliurenService_1.DaliurenService; } });
23
+ __exportStar(require("./types"), exports);
24
+ __exportStar(require("./data/constants"), exports);
25
+ var TianDiPanCalculator_1 = require("./calculators/TianDiPanCalculator");
26
+ Object.defineProperty(exports, "TianDiPanCalculator", { enumerable: true, get: function () { return TianDiPanCalculator_1.TianDiPanCalculator; } });
27
+ var SiKeCalculator_1 = require("./calculators/SiKeCalculator");
28
+ Object.defineProperty(exports, "SiKeCalculator", { enumerable: true, get: function () { return SiKeCalculator_1.SiKeCalculator; } });
29
+ var SanChuanCalculator_1 = require("./calculators/SanChuanCalculator");
30
+ Object.defineProperty(exports, "SanChuanCalculator", { enumerable: true, get: function () { return SanChuanCalculator_1.SanChuanCalculator; } });
31
+ var ShenShaCalculator_1 = require("./calculators/ShenShaCalculator");
32
+ Object.defineProperty(exports, "ShenShaCalculator", { enumerable: true, get: function () { return ShenShaCalculator_1.ShenShaCalculator; } });
33
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/daliuren/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;AAEH,qDAAoD;AAA3C,kHAAA,eAAe,OAAA;AACxB,0CAAwB;AACxB,mDAAiC;AACjC,yEAAwE;AAA/D,0HAAA,mBAAmB,OAAA;AAC5B,+DAA8D;AAArD,gHAAA,cAAc,OAAA;AACvB,uEAAsE;AAA7D,wHAAA,kBAAkB,OAAA;AAC3B,qEAAoE;AAA3D,sHAAA,iBAAiB,OAAA"}
@@ -0,0 +1,152 @@
1
+ /**
2
+ * 大六壬服務類型定義
3
+ *
4
+ * 設計原則:
5
+ * - 排盤層:MCP 負責,輸出確定性結構
6
+ * - 斷課層:交給 Agent/LLM
7
+ * - 參考來源:kentang2017/kinliuren (MIT License)
8
+ *
9
+ * 大六壬核心概念:
10
+ * - 天地盤:以月將加時辰起盤
11
+ * - 四課:由日干支推演
12
+ * - 三傳:由四課通過九宗門推演
13
+ * - 十二天將:貴人起點順逆排布
14
+ */
15
+ /** 天干 */
16
+ export type TianGan = '甲' | '乙' | '丙' | '丁' | '戊' | '己' | '庚' | '辛' | '壬' | '癸';
17
+ /** 地支 */
18
+ export type DiZhi = '子' | '丑' | '寅' | '卯' | '辰' | '巳' | '午' | '未' | '申' | '酉' | '戌' | '亥';
19
+ /** 五行 */
20
+ export type WuXing = '金' | '木' | '水' | '火' | '土';
21
+ /** 六親 */
22
+ export type LiuQin = '父母' | '兄弟' | '子孫' | '妻財' | '官鬼';
23
+ /** 十二天將 */
24
+ export type TianJiang = '貴人' | '螣蛇' | '朱雀' | '六合' | '勾陳' | '青龍' | '天空' | '白虎' | '太常' | '玄武' | '太陰' | '天后';
25
+ /** 十二天將簡稱 */
26
+ export type TianJiangShort = '貴' | '蛇' | '雀' | '合' | '勾' | '龍' | '空' | '虎' | '常' | '玄' | '陰' | '后';
27
+ /** 月將(十二神) */
28
+ export type YueJiang = '登明' | '河魁' | '從魁' | '傳送' | '小吉' | '勝光' | '太乙' | '天罡' | '太沖' | '功曹' | '大吉' | '神後';
29
+ /** 課式格局 */
30
+ export type GeJu = '賊尅' | '比用' | '涉害' | '遙尅' | '昴星' | '別責' | '八專' | '伏吟' | '返吟';
31
+ /** 課式細分 */
32
+ export type GeJuDetail = '元首' | '重審' | '知一' | '涉害' | '蒿矢' | '彈射' | '虎視' | '冬蛇掩目' | '帷簿' | '自任' | '杜傳' | '無依' | '無親' | string;
33
+ /** 陰陽 */
34
+ export type YinYang = '陽' | '陰';
35
+ /** 晝夜 */
36
+ export type DayNight = '晝' | '夜';
37
+ export interface DaliurenInput {
38
+ /** 節氣(用於確定月將) */
39
+ jieqi: string;
40
+ /** 農曆月份(用於輔助判斷) */
41
+ lunarMonth: number;
42
+ /** 日干支 */
43
+ dayGanZhi: string;
44
+ /** 時干支 */
45
+ hourGanZhi: string;
46
+ /** 貴人起法:0=標準, 1=另一種 */
47
+ guirenMethod?: 0 | 1;
48
+ }
49
+ export interface TianDiPan {
50
+ /** 天盤(十二地支,從時辰起) */
51
+ tianPan: DiZhi[];
52
+ /** 地盤(固定十二地支) */
53
+ diPan: DiZhi[];
54
+ /** 天將(十二天將排布) */
55
+ tianJiang: TianJiangShort[];
56
+ /** 月將 */
57
+ yueJiang: DiZhi;
58
+ /** 月將名稱 */
59
+ yueJiangName: YueJiang;
60
+ /** 地支對應天盤 */
61
+ diToTian: Record<DiZhi, DiZhi>;
62
+ /** 地支對應天將 */
63
+ diToJiang: Record<DiZhi, TianJiangShort>;
64
+ }
65
+ export interface SiKe {
66
+ /** 課位(一課到四課) */
67
+ position: 1 | 2 | 3 | 4;
68
+ /** 上神(天盤地支) */
69
+ shangShen: DiZhi;
70
+ /** 下神(地盤地支或日干寄宮) */
71
+ xiaShen: string;
72
+ /** 天將 */
73
+ tianJiang: TianJiangShort;
74
+ /** 上下關係 */
75
+ relation: '上尅下' | '下賊上' | '比和' | '上生下' | '下生上';
76
+ }
77
+ export interface SiKeInfo {
78
+ /** 四課列表(一課到四課) */
79
+ list: [SiKe, SiKe, SiKe, SiKe];
80
+ /** 日干 */
81
+ dayGan: TianGan;
82
+ /** 日支 */
83
+ dayZhi: DiZhi;
84
+ /** 日干寄宮 */
85
+ dayGanJiGong: DiZhi;
86
+ }
87
+ export interface ChuanInfo {
88
+ /** 傳位(初傳/中傳/末傳) */
89
+ position: '初傳' | '中傳' | '末傳';
90
+ /** 地支 */
91
+ diZhi: DiZhi;
92
+ /** 天將 */
93
+ tianJiang: TianJiangShort;
94
+ /** 六親(相對於日干) */
95
+ liuQin: string;
96
+ /** 旬空(空亡干支) */
97
+ xunKong: string | null;
98
+ }
99
+ export interface SanChuan {
100
+ /** 初傳 */
101
+ chuChuan: ChuanInfo;
102
+ /** 中傳 */
103
+ zhongChuan: ChuanInfo;
104
+ /** 末傳 */
105
+ moChuan: ChuanInfo;
106
+ /** 格局 */
107
+ geJu: GeJu;
108
+ /** 格局細分 */
109
+ geJuDetail: GeJuDetail;
110
+ }
111
+ export interface ShenSha {
112
+ /** 日馬 */
113
+ riMa: DiZhi;
114
+ /** 月馬 */
115
+ yueMa: DiZhi;
116
+ /** 丁馬 */
117
+ dingMa: DiZhi;
118
+ /** 華蓋 */
119
+ huaGai: DiZhi;
120
+ /** 閃電 */
121
+ shanDian: DiZhi;
122
+ /** 其他神煞 */
123
+ others?: Record<string, DiZhi>;
124
+ }
125
+ export interface DaliurenResult {
126
+ /** 基本信息 */
127
+ basicInfo: {
128
+ /** 節氣 */
129
+ jieqi: string;
130
+ /** 農曆月 */
131
+ lunarMonth: string;
132
+ /** 日干支 */
133
+ dayGanZhi: string;
134
+ /** 時干支 */
135
+ hourGanZhi: string;
136
+ /** 晝夜 */
137
+ dayNight: DayNight;
138
+ };
139
+ /** 天地盤 */
140
+ tianDiPan: TianDiPan;
141
+ /** 四課 */
142
+ siKe: SiKeInfo;
143
+ /** 三傳 */
144
+ sanChuan: SanChuan;
145
+ /** 神煞 */
146
+ shenSha: ShenSha;
147
+ }
148
+ export interface DaliurenServiceConfig {
149
+ /** 是否啟用調試模式 */
150
+ debug?: boolean;
151
+ }
152
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/services/daliuren/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ /**
3
+ * 大六壬服務類型定義
4
+ *
5
+ * 設計原則:
6
+ * - 排盤層:MCP 負責,輸出確定性結構
7
+ * - 斷課層:交給 Agent/LLM
8
+ * - 參考來源:kentang2017/kinliuren (MIT License)
9
+ *
10
+ * 大六壬核心概念:
11
+ * - 天地盤:以月將加時辰起盤
12
+ * - 四課:由日干支推演
13
+ * - 三傳:由四課通過九宗門推演
14
+ * - 十二天將:貴人起點順逆排布
15
+ */
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/services/daliuren/types.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;GAaG"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * 六爻服務主類
3
+ *
4
+ * 提供統一的六爻排盤接口
5
+ *
6
+ * 設計原則:
7
+ * - 排盤層:輸出確定性結構
8
+ * - 斷卦層:交給 Agent/LLM
9
+ * - v1 只支持手動輸入爻值
10
+ */
11
+ import { LiuyaoInput, LiuyaoResult, LiuyaoServiceConfig } from './types';
12
+ export declare class LiuyaoService {
13
+ private config;
14
+ constructor(config?: LiuyaoServiceConfig);
15
+ /**
16
+ * 計算六爻排盤
17
+ */
18
+ calculate(input: LiuyaoInput): LiuyaoResult;
19
+ /**
20
+ * 計算時間信息
21
+ */
22
+ private calculateTimeInfo;
23
+ /**
24
+ * 計算六爻詳細信息
25
+ */
26
+ private calculateYaoList;
27
+ /**
28
+ * 根據陰陽數組獲取上下卦
29
+ *
30
+ * 八卦二進制:下爻是最高位 (bit 2)
31
+ * 例如:震 = 0b100 = 4,表示下爻阳(1)、中爻阴(0)、上爻阴(0)
32
+ * 計算方式:下爻*4 + 中爻*2 + 上爻*1
33
+ */
34
+ private getGuaFromYinYang;
35
+ }
36
+ export declare const liuyaoService: LiuyaoService;
37
+ //# sourceMappingURL=LiuyaoService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LiuyaoService.d.ts","sourceRoot":"","sources":["../../../src/services/liuyao/LiuyaoService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EACL,WAAW,EACX,YAAY,EACZ,mBAAmB,EAUpB,MAAM,SAAS,CAAC;AAgBjB,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAsB;gBAExB,MAAM,GAAE,mBAAwB;IAO5C;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,WAAW,GAAG,YAAY;IAwG3C;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA6BzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA0DxB;;;;;;OAMG;IACH,OAAO,CAAC,iBAAiB;CAqB1B;AAGD,eAAO,MAAM,aAAa,eAAsB,CAAC"}
@@ -0,0 +1,214 @@
1
+ "use strict";
2
+ /**
3
+ * 六爻服務主類
4
+ *
5
+ * 提供統一的六爻排盤接口
6
+ *
7
+ * 設計原則:
8
+ * - 排盤層:輸出確定性結構
9
+ * - 斷卦層:交給 Agent/LLM
10
+ * - v1 只支持手動輸入爻值
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.liuyaoService = exports.LiuyaoService = void 0;
14
+ const lunar_javascript_1 = require("lunar-javascript");
15
+ const NajiaCalculator_1 = require("./calculators/NajiaCalculator");
16
+ const LiuqinCalculator_1 = require("./calculators/LiuqinCalculator");
17
+ const LiushenCalculator_1 = require("./calculators/LiushenCalculator");
18
+ const XunkongCalculator_1 = require("./calculators/XunkongCalculator");
19
+ const FushenCalculator_1 = require("./calculators/FushenCalculator");
20
+ const JintuishenCalculator_1 = require("./calculators/JintuishenCalculator");
21
+ const WangshuaiCalculator_1 = require("./calculators/WangshuaiCalculator");
22
+ const guagong_1 = require("./data/guagong");
23
+ const timeNormalization_1 = require("../../utils/timeNormalization");
24
+ class LiuyaoService {
25
+ config;
26
+ constructor(config = {}) {
27
+ this.config = {
28
+ debug: false,
29
+ ...config,
30
+ };
31
+ }
32
+ /**
33
+ * 計算六爻排盤
34
+ */
35
+ calculate(input) {
36
+ // 1. 處理時間(農曆轉公曆)
37
+ const normalizedTime = (0, timeNormalization_1.normalizeBirthDateTime)({
38
+ year: input.year,
39
+ month: input.month,
40
+ day: input.day,
41
+ hour: input.hour,
42
+ isLunar: input.isLunar,
43
+ });
44
+ // 2. 獲取時間信息
45
+ const timeInfo = this.calculateTimeInfo(normalizedTime.year, normalizedTime.month, normalizedTime.day, normalizedTime.hour);
46
+ // 3. 計算本卦
47
+ const { upper: benUpper, lower: benLower } = NajiaCalculator_1.NajiaCalculator.getGuaFromYaoValues(input.yaoValues);
48
+ const benGuaData = (0, guagong_1.getGua64Info)(benUpper, benLower);
49
+ const benGua = {
50
+ name: benGuaData.name,
51
+ upperGua: benGuaData.upper,
52
+ lowerGua: benGuaData.lower,
53
+ gong: benGuaData.gong,
54
+ gongWuXing: guagong_1.BAGUA_WUXING[benGuaData.gong],
55
+ shiYaoPosition: benGuaData.shiYao,
56
+ yingYaoPosition: benGuaData.yingYao,
57
+ guaXu: benGuaData.guaXu,
58
+ isYouHun: benGuaData.guaXu === 7,
59
+ isGuiHun: benGuaData.guaXu === 8,
60
+ };
61
+ // 4. 計算動爻和變卦
62
+ const movingYaoPositions = [];
63
+ const changedYaoYinYang = [];
64
+ for (let i = 0; i < 6; i++) {
65
+ const yaoValue = input.yaoValues[i];
66
+ const isMoving = NajiaCalculator_1.NajiaCalculator.isMoving(yaoValue);
67
+ const isYang = yaoValue === 7 || yaoValue === 9;
68
+ if (isMoving) {
69
+ movingYaoPositions.push(i + 1);
70
+ changedYaoYinYang.push(!isYang); // 動爻陰陽反轉
71
+ }
72
+ else {
73
+ changedYaoYinYang.push(isYang);
74
+ }
75
+ }
76
+ // 5. 計算變卦(如果有動爻)
77
+ let bianGua;
78
+ if (movingYaoPositions.length > 0) {
79
+ const { upper: bianUpper, lower: bianLower } = this.getGuaFromYinYang(changedYaoYinYang);
80
+ const bianGuaData = (0, guagong_1.getGua64Info)(bianUpper, bianLower);
81
+ bianGua = {
82
+ name: bianGuaData.name,
83
+ upperGua: bianGuaData.upper,
84
+ lowerGua: bianGuaData.lower,
85
+ gong: bianGuaData.gong,
86
+ gongWuXing: guagong_1.BAGUA_WUXING[bianGuaData.gong],
87
+ shiYaoPosition: bianGuaData.shiYao,
88
+ yingYaoPosition: bianGuaData.yingYao,
89
+ guaXu: bianGuaData.guaXu,
90
+ isYouHun: bianGuaData.guaXu === 7,
91
+ isGuiHun: bianGuaData.guaXu === 8,
92
+ };
93
+ }
94
+ // 6. 計算六爻詳細信息
95
+ const yaoList = this.calculateYaoList(input.yaoValues, benGua, bianGua, timeInfo.dayStem, timeInfo.monthBranch, timeInfo.dayGanZhi.charAt(1));
96
+ // 7. 計算伏神
97
+ const presentLiuQin = yaoList.map(y => y.liuQin);
98
+ const benGuaNaJia = yaoList.map(y => ({ diZhi: y.naJia, wuXing: y.naJiaWuXing }));
99
+ const dayBranch = timeInfo.dayGanZhi.charAt(1);
100
+ const fuShenList = FushenCalculator_1.FushenCalculator.calculate(benGua.gongWuXing, benGua.gong, presentLiuQin, benGuaNaJia, timeInfo.monthBranch, dayBranch);
101
+ return {
102
+ timeInfo,
103
+ benGua,
104
+ bianGua,
105
+ yaoList,
106
+ movingYaoPositions,
107
+ fuShenList,
108
+ };
109
+ }
110
+ /**
111
+ * 計算時間信息
112
+ */
113
+ calculateTimeInfo(year, month, day, hour) {
114
+ const solar = lunar_javascript_1.Solar.fromYmdHms(year, month, day, hour, 0, 0);
115
+ const lunar = solar.getLunar();
116
+ const eightChar = lunar.getEightChar();
117
+ const yearGanZhi = eightChar.getYear();
118
+ const monthGanZhi = eightChar.getMonth();
119
+ const dayGanZhi = eightChar.getDay();
120
+ const hourGanZhi = eightChar.getTime();
121
+ const dayStem = dayGanZhi.charAt(0);
122
+ const dayBranch = dayGanZhi.charAt(1);
123
+ const monthBranch = monthGanZhi.charAt(1);
124
+ const xunKong = XunkongCalculator_1.XunkongCalculator.calculate(dayStem, dayBranch);
125
+ return {
126
+ solarDate: `${year}年${month}月${day}日`,
127
+ lunarDate: lunar.toString(),
128
+ yearGanZhi,
129
+ monthGanZhi,
130
+ dayGanZhi,
131
+ hourGanZhi,
132
+ dayStem,
133
+ monthBranch,
134
+ xunKong,
135
+ };
136
+ }
137
+ /**
138
+ * 計算六爻詳細信息
139
+ */
140
+ calculateYaoList(yaoValues, benGua, bianGua, dayStem, monthBranch, dayBranch) {
141
+ const yaoList = [];
142
+ const liuShenList = LiushenCalculator_1.LiushenCalculator.calculateAll(dayStem);
143
+ const naJiaList = NajiaCalculator_1.NajiaCalculator.calculateAll(benGua.upperGua, benGua.lowerGua);
144
+ for (let i = 0; i < 6; i++) {
145
+ const position = i + 1;
146
+ const yaoValue = yaoValues[i];
147
+ const isMoving = NajiaCalculator_1.NajiaCalculator.isMoving(yaoValue);
148
+ const yinYang = NajiaCalculator_1.NajiaCalculator.getYinYang(yaoValue);
149
+ const changedYinYang = NajiaCalculator_1.NajiaCalculator.getChangedYinYang(yaoValue);
150
+ const naJia = naJiaList[i];
151
+ const liuQin = LiuqinCalculator_1.LiuqinCalculator.calculate(benGua.gongWuXing, naJia.wuXing);
152
+ // 計算變爻納甲和進退神(如果是動爻)
153
+ let changedNaJia;
154
+ let jinTuiShen = undefined;
155
+ if (isMoving && bianGua) {
156
+ const bianNaJiaList = NajiaCalculator_1.NajiaCalculator.calculateAll(bianGua.upperGua, bianGua.lowerGua);
157
+ changedNaJia = bianNaJiaList[i].diZhi;
158
+ // 計算進退神
159
+ jinTuiShen = JintuishenCalculator_1.JintuishenCalculator.calculate(naJia.diZhi, changedNaJia);
160
+ }
161
+ // 計算旺衰
162
+ const wangShuaiByMonth = WangshuaiCalculator_1.WangshuaiCalculator.calculate(naJia.wuXing, monthBranch);
163
+ const wangShuaiByDay = WangshuaiCalculator_1.WangshuaiCalculator.calculate(naJia.wuXing, dayBranch);
164
+ yaoList.push({
165
+ position,
166
+ value: yaoValue,
167
+ yinYang,
168
+ isMoving,
169
+ changedYinYang,
170
+ naJia: naJia.diZhi,
171
+ naJiaWuXing: naJia.wuXing,
172
+ changedNaJia,
173
+ liuQin,
174
+ liuShen: liuShenList[i],
175
+ isShiYao: position === benGua.shiYaoPosition,
176
+ isYingYao: position === benGua.yingYaoPosition,
177
+ jinTuiShen,
178
+ wangShuaiByMonth,
179
+ wangShuaiByDay,
180
+ });
181
+ }
182
+ return yaoList;
183
+ }
184
+ /**
185
+ * 根據陰陽數組獲取上下卦
186
+ *
187
+ * 八卦二進制:下爻是最高位 (bit 2)
188
+ * 例如:震 = 0b100 = 4,表示下爻阳(1)、中爻阴(0)、上爻阴(0)
189
+ * 計算方式:下爻*4 + 中爻*2 + 上爻*1
190
+ */
191
+ getGuaFromYinYang(yinYang) {
192
+ const BINARY_TO_BAGUA = {
193
+ 0b000: '坤',
194
+ 0b001: '艮',
195
+ 0b010: '坎',
196
+ 0b011: '巽',
197
+ 0b100: '震',
198
+ 0b101: '離',
199
+ 0b110: '兌',
200
+ 0b111: '乾',
201
+ };
202
+ // 下爻是最高位 (bit 2),上爻是最低位 (bit 0)
203
+ const lowerBinary = (yinYang[0] ? 4 : 0) + (yinYang[1] ? 2 : 0) + (yinYang[2] ? 1 : 0);
204
+ const upperBinary = (yinYang[3] ? 4 : 0) + (yinYang[4] ? 2 : 0) + (yinYang[5] ? 1 : 0);
205
+ return {
206
+ upper: BINARY_TO_BAGUA[upperBinary],
207
+ lower: BINARY_TO_BAGUA[lowerBinary],
208
+ };
209
+ }
210
+ }
211
+ exports.LiuyaoService = LiuyaoService;
212
+ // 導出單例
213
+ exports.liuyaoService = new LiuyaoService();
214
+ //# sourceMappingURL=LiuyaoService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LiuyaoService.js","sourceRoot":"","sources":["../../../src/services/liuyao/LiuyaoService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * 伏神/飛神計算器
3
+ *
4
+ * 理論來源:《增刪卜易》第35章「飛伏神章」、《卜筮正宗》
5
+ *
6
+ * 核心規則:
7
+ * - 用神不現於卦中時,從本宮首卦(八純卦)尋找伏神
8
+ * - 飛神 = 本卦該爻位的納甲地支
9
+ * - 伏神 = 本宮首卦該爻位的納甲地支
10
+ * - 飛伏關係:飛生伏(吉)、飛克伏(凶)、伏生飛(洩)、伏克飛(有力)
11
+ */
12
+ import { BaGua, DiZhi, WuXing, LiuQin, FuShenInfo } from '../types';
13
+ export declare class FushenCalculator {
14
+ /**
15
+ * 計算伏神列表
16
+ *
17
+ * @param gongWuXing 卦宮五行(用於計算六親)
18
+ * @param gong 卦宮(用於找本宮首卦)
19
+ * @param presentLiuQin 卦中已出現的六親列表(每爻的六親)
20
+ * @param benGuaNaJia 本卦六爻納甲(作為飛神)
21
+ * @param monthBranch 月建地支(用於旺衰計算)
22
+ * @param dayBranch 日辰地支(用於旺衰計算)
23
+ */
24
+ static calculate(gongWuXing: WuXing, gong: BaGua, presentLiuQin: LiuQin[], benGuaNaJia: {
25
+ diZhi: DiZhi;
26
+ wuXing: WuXing;
27
+ }[], monthBranch?: DiZhi, dayBranch?: DiZhi): FuShenInfo[];
28
+ /**
29
+ * 獲取本宮首卦(八純卦)的納甲
30
+ */
31
+ private static getShouGuaNaJia;
32
+ /**
33
+ * 計算飛伏關係
34
+ *
35
+ * @param feiWuXing 飛神五行
36
+ * @param fuWuXing 伏神五行
37
+ */
38
+ private static calculateRelation;
39
+ }
40
+ //# sourceMappingURL=FushenCalculator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FushenCalculator.d.ts","sourceRoot":"","sources":["../../../../src/services/liuyao/calculators/FushenCalculator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAmB,UAAU,EAAkB,MAAM,UAAU,CAAC;AAQrG,qBAAa,gBAAgB;IAC3B;;;;;;;;;OASG;IACH,MAAM,CAAC,SAAS,CACd,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,KAAK,EACX,aAAa,EAAE,MAAM,EAAE,EACvB,WAAW,EAAE;QAAE,KAAK,EAAE,KAAK,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,EAC/C,WAAW,CAAC,EAAE,KAAK,EACnB,SAAS,CAAC,EAAE,KAAK,GAChB,UAAU,EAAE;IA0Df;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IAgB9B;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,iBAAiB;CA6BjC"}
@@ -0,0 +1,124 @@
1
+ "use strict";
2
+ /**
3
+ * 伏神/飛神計算器
4
+ *
5
+ * 理論來源:《增刪卜易》第35章「飛伏神章」、《卜筮正宗》
6
+ *
7
+ * 核心規則:
8
+ * - 用神不現於卦中時,從本宮首卦(八純卦)尋找伏神
9
+ * - 飛神 = 本卦該爻位的納甲地支
10
+ * - 伏神 = 本宮首卦該爻位的納甲地支
11
+ * - 飛伏關係:飛生伏(吉)、飛克伏(凶)、伏生飛(洩)、伏克飛(有力)
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.FushenCalculator = void 0;
15
+ const guagong_1 = require("../data/guagong");
16
+ const LiuqinCalculator_1 = require("./LiuqinCalculator");
17
+ const WangshuaiCalculator_1 = require("./WangshuaiCalculator");
18
+ /** 六親列表 */
19
+ const ALL_LIUQIN = ['父母', '兄弟', '子孫', '妻財', '官鬼'];
20
+ class FushenCalculator {
21
+ /**
22
+ * 計算伏神列表
23
+ *
24
+ * @param gongWuXing 卦宮五行(用於計算六親)
25
+ * @param gong 卦宮(用於找本宮首卦)
26
+ * @param presentLiuQin 卦中已出現的六親列表(每爻的六親)
27
+ * @param benGuaNaJia 本卦六爻納甲(作為飛神)
28
+ * @param monthBranch 月建地支(用於旺衰計算)
29
+ * @param dayBranch 日辰地支(用於旺衰計算)
30
+ */
31
+ static calculate(gongWuXing, gong, presentLiuQin, benGuaNaJia, monthBranch, dayBranch) {
32
+ // 找出卦中缺失的六親
33
+ const presentSet = new Set(presentLiuQin);
34
+ const missingLiuQin = ALL_LIUQIN.filter(lq => !presentSet.has(lq));
35
+ if (missingLiuQin.length === 0) {
36
+ return []; // 六親俱全,無伏神
37
+ }
38
+ // 獲取本宮首卦(八純卦)的納甲
39
+ const shouGuaNaJia = this.getShouGuaNaJia(gong);
40
+ // 計算本宮首卦每爻的六親
41
+ const shouGuaLiuQin = shouGuaNaJia.map(nj => LiuqinCalculator_1.LiuqinCalculator.calculate(gongWuXing, nj.wuXing));
42
+ const fuShenList = [];
43
+ for (const missingLq of missingLiuQin) {
44
+ // 在本宮首卦中找到該六親的位置
45
+ const position = shouGuaLiuQin.findIndex(lq => lq === missingLq);
46
+ if (position === -1) {
47
+ // 理論上不應該發生,因為八純卦六親必定俱全
48
+ continue;
49
+ }
50
+ const fuShenNaJia = shouGuaNaJia[position];
51
+ const feiShenNaJia = benGuaNaJia[position];
52
+ // 計算飛伏關係
53
+ const relation = this.calculateRelation(feiShenNaJia.wuXing, fuShenNaJia.wuXing);
54
+ const fuShenInfo = {
55
+ liuQin: missingLq,
56
+ diZhi: fuShenNaJia.diZhi,
57
+ wuXing: fuShenNaJia.wuXing,
58
+ position: position + 1, // 轉為 1-6
59
+ feiShenDiZhi: feiShenNaJia.diZhi,
60
+ feiShenWuXing: feiShenNaJia.wuXing,
61
+ relation,
62
+ };
63
+ // 計算旺衰
64
+ if (monthBranch) {
65
+ fuShenInfo.wangShuaiByMonth = WangshuaiCalculator_1.WangshuaiCalculator.calculate(fuShenNaJia.wuXing, monthBranch);
66
+ }
67
+ if (dayBranch) {
68
+ fuShenInfo.wangShuaiByDay = WangshuaiCalculator_1.WangshuaiCalculator.calculate(fuShenNaJia.wuXing, dayBranch);
69
+ }
70
+ fuShenList.push(fuShenInfo);
71
+ }
72
+ return fuShenList;
73
+ }
74
+ /**
75
+ * 獲取本宮首卦(八純卦)的納甲
76
+ */
77
+ static getShouGuaNaJia(gong) {
78
+ const naJiaData = guagong_1.NAJIA_TABLE[gong];
79
+ const result = [];
80
+ // 內卦(初爻到三爻)
81
+ for (const dz of naJiaData.inner) {
82
+ result.push({ diZhi: dz, wuXing: guagong_1.DIZHI_WUXING[dz] });
83
+ }
84
+ // 外卦(四爻到上爻)
85
+ for (const dz of naJiaData.outer) {
86
+ result.push({ diZhi: dz, wuXing: guagong_1.DIZHI_WUXING[dz] });
87
+ }
88
+ return result;
89
+ }
90
+ /**
91
+ * 計算飛伏關係
92
+ *
93
+ * @param feiWuXing 飛神五行
94
+ * @param fuWuXing 伏神五行
95
+ */
96
+ static calculateRelation(feiWuXing, fuWuXing) {
97
+ if (feiWuXing === fuWuXing) {
98
+ return '比和';
99
+ }
100
+ // 五行生剋關係
101
+ const SHENG = {
102
+ '金': '水', '水': '木', '木': '火', '火': '土', '土': '金',
103
+ };
104
+ const KE = {
105
+ '金': '木', '木': '土', '土': '水', '水': '火', '火': '金',
106
+ };
107
+ if (SHENG[feiWuXing] === fuWuXing) {
108
+ return '飛生伏'; // 飛神生伏神,伏神得生,吉
109
+ }
110
+ if (KE[feiWuXing] === fuWuXing) {
111
+ return '飛克伏'; // 飛神克伏神,伏神受制,凶
112
+ }
113
+ if (SHENG[fuWuXing] === feiWuXing) {
114
+ return '伏生飛'; // 伏神生飛神,伏神洩氣
115
+ }
116
+ if (KE[fuWuXing] === feiWuXing) {
117
+ return '伏克飛'; // 伏神克飛神,伏神有力
118
+ }
119
+ // 不應該到這裡
120
+ return '比和';
121
+ }
122
+ }
123
+ exports.FushenCalculator = FushenCalculator;
124
+ //# sourceMappingURL=FushenCalculator.js.map