mingpan 0.1.1 → 0.1.3

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 (239) hide show
  1. package/README.md +116 -42
  2. package/dist/core/bazi/types.d.ts +0 -1
  3. package/dist/core/bazi/types.d.ts.map +1 -1
  4. package/dist/core/qimen/FlyingRule.d.ts +60 -0
  5. package/dist/core/qimen/FlyingRule.d.ts.map +1 -0
  6. package/dist/core/qimen/FlyingRule.js +94 -0
  7. package/dist/core/qimen/FlyingRule.js.map +1 -0
  8. package/dist/core/qimen/GongMapping.d.ts +29 -0
  9. package/dist/core/qimen/GongMapping.d.ts.map +1 -0
  10. package/dist/core/qimen/GongMapping.js +83 -0
  11. package/dist/core/qimen/GongMapping.js.map +1 -0
  12. package/dist/core/qimen/RotatingRule.d.ts +76 -0
  13. package/dist/core/qimen/RotatingRule.d.ts.map +1 -0
  14. package/dist/core/qimen/RotatingRule.js +126 -0
  15. package/dist/core/qimen/RotatingRule.js.map +1 -0
  16. package/dist/core/qimen/YinYangDunCalculator.d.ts +28 -0
  17. package/dist/core/qimen/YinYangDunCalculator.d.ts.map +1 -0
  18. package/dist/core/qimen/YinYangDunCalculator.js +79 -0
  19. package/dist/core/qimen/YinYangDunCalculator.js.map +1 -0
  20. package/dist/core/qimen/index.d.ts +10 -0
  21. package/dist/core/qimen/index.d.ts.map +1 -0
  22. package/dist/core/qimen/index.js +58 -0
  23. package/dist/core/qimen/index.js.map +1 -0
  24. package/dist/core/qimen/types.d.ts +19 -0
  25. package/dist/core/qimen/types.d.ts.map +1 -0
  26. package/dist/core/qimen/types.js +7 -0
  27. package/dist/core/qimen/types.js.map +1 -0
  28. package/dist/index.js +665 -164
  29. package/dist/index.js.map +1 -1
  30. package/dist/output/daliurenTextRenderer.d.ts +23 -0
  31. package/dist/output/daliurenTextRenderer.d.ts.map +1 -0
  32. package/dist/output/daliurenTextRenderer.js +109 -0
  33. package/dist/output/daliurenTextRenderer.js.map +1 -0
  34. package/dist/output/liuyaoTextRenderer.d.ts +12 -0
  35. package/dist/output/liuyaoTextRenderer.d.ts.map +1 -0
  36. package/dist/output/liuyaoTextRenderer.js +148 -0
  37. package/dist/output/liuyaoTextRenderer.js.map +1 -0
  38. package/dist/output/meihuaTextRenderer.d.ts +12 -0
  39. package/dist/output/meihuaTextRenderer.d.ts.map +1 -0
  40. package/dist/output/meihuaTextRenderer.js +53 -0
  41. package/dist/output/meihuaTextRenderer.js.map +1 -0
  42. package/dist/output/qimenTextRenderer.d.ts +40 -0
  43. package/dist/output/qimenTextRenderer.d.ts.map +1 -0
  44. package/dist/output/qimenTextRenderer.js +363 -0
  45. package/dist/output/qimenTextRenderer.js.map +1 -0
  46. package/dist/services/bazi/types.d.ts +0 -2
  47. package/dist/services/bazi/types.d.ts.map +1 -1
  48. package/dist/services/bazi/types.js.map +1 -1
  49. package/dist/services/daliuren/DaliurenService.d.ts +24 -0
  50. package/dist/services/daliuren/DaliurenService.d.ts.map +1 -0
  51. package/dist/services/daliuren/DaliurenService.js +67 -0
  52. package/dist/services/daliuren/DaliurenService.js.map +1 -0
  53. package/dist/services/daliuren/calculators/SanChuanCalculator.d.ts +87 -0
  54. package/dist/services/daliuren/calculators/SanChuanCalculator.d.ts.map +1 -0
  55. package/dist/services/daliuren/calculators/SanChuanCalculator.js +443 -0
  56. package/dist/services/daliuren/calculators/SanChuanCalculator.js.map +1 -0
  57. package/dist/services/daliuren/calculators/ShenShaCalculator.d.ts +33 -0
  58. package/dist/services/daliuren/calculators/ShenShaCalculator.d.ts.map +1 -0
  59. package/dist/services/daliuren/calculators/ShenShaCalculator.js +92 -0
  60. package/dist/services/daliuren/calculators/ShenShaCalculator.js.map +1 -0
  61. package/dist/services/daliuren/calculators/SiKeCalculator.d.ts +35 -0
  62. package/dist/services/daliuren/calculators/SiKeCalculator.d.ts.map +1 -0
  63. package/dist/services/daliuren/calculators/SiKeCalculator.js +121 -0
  64. package/dist/services/daliuren/calculators/SiKeCalculator.js.map +1 -0
  65. package/dist/services/daliuren/calculators/TianDiPanCalculator.d.ts +41 -0
  66. package/dist/services/daliuren/calculators/TianDiPanCalculator.d.ts.map +1 -0
  67. package/dist/services/daliuren/calculators/TianDiPanCalculator.js +138 -0
  68. package/dist/services/daliuren/calculators/TianDiPanCalculator.js.map +1 -0
  69. package/dist/services/daliuren/data/constants.d.ts +62 -0
  70. package/dist/services/daliuren/data/constants.d.ts.map +1 -0
  71. package/dist/services/daliuren/data/constants.js +240 -0
  72. package/dist/services/daliuren/data/constants.js.map +1 -0
  73. package/dist/services/daliuren/index.d.ts +11 -0
  74. package/dist/services/daliuren/index.d.ts.map +1 -0
  75. package/dist/services/daliuren/index.js +33 -0
  76. package/dist/services/daliuren/index.js.map +1 -0
  77. package/dist/services/daliuren/types.d.ts +152 -0
  78. package/dist/services/daliuren/types.d.ts.map +1 -0
  79. package/dist/services/daliuren/types.js +17 -0
  80. package/dist/services/daliuren/types.js.map +1 -0
  81. package/dist/services/liuyao/LiuyaoService.d.ts +37 -0
  82. package/dist/services/liuyao/LiuyaoService.d.ts.map +1 -0
  83. package/dist/services/liuyao/LiuyaoService.js +214 -0
  84. package/dist/services/liuyao/LiuyaoService.js.map +1 -0
  85. package/dist/services/liuyao/calculators/FushenCalculator.d.ts +40 -0
  86. package/dist/services/liuyao/calculators/FushenCalculator.d.ts.map +1 -0
  87. package/dist/services/liuyao/calculators/FushenCalculator.js +124 -0
  88. package/dist/services/liuyao/calculators/FushenCalculator.js.map +1 -0
  89. package/dist/services/liuyao/calculators/JintuishenCalculator.d.ts +37 -0
  90. package/dist/services/liuyao/calculators/JintuishenCalculator.d.ts.map +1 -0
  91. package/dist/services/liuyao/calculators/JintuishenCalculator.js +86 -0
  92. package/dist/services/liuyao/calculators/JintuishenCalculator.js.map +1 -0
  93. package/dist/services/liuyao/calculators/LiuqinCalculator.d.ts +24 -0
  94. package/dist/services/liuyao/calculators/LiuqinCalculator.d.ts.map +1 -0
  95. package/dist/services/liuyao/calculators/LiuqinCalculator.js +75 -0
  96. package/dist/services/liuyao/calculators/LiuqinCalculator.js.map +1 -0
  97. package/dist/services/liuyao/calculators/LiushenCalculator.d.ts +29 -0
  98. package/dist/services/liuyao/calculators/LiushenCalculator.d.ts.map +1 -0
  99. package/dist/services/liuyao/calculators/LiushenCalculator.js +58 -0
  100. package/dist/services/liuyao/calculators/LiushenCalculator.js.map +1 -0
  101. package/dist/services/liuyao/calculators/NajiaCalculator.d.ts +55 -0
  102. package/dist/services/liuyao/calculators/NajiaCalculator.d.ts.map +1 -0
  103. package/dist/services/liuyao/calculators/NajiaCalculator.js +87 -0
  104. package/dist/services/liuyao/calculators/NajiaCalculator.js.map +1 -0
  105. package/dist/services/liuyao/calculators/WangshuaiCalculator.d.ts +43 -0
  106. package/dist/services/liuyao/calculators/WangshuaiCalculator.d.ts.map +1 -0
  107. package/dist/services/liuyao/calculators/WangshuaiCalculator.js +100 -0
  108. package/dist/services/liuyao/calculators/WangshuaiCalculator.js.map +1 -0
  109. package/dist/services/liuyao/calculators/XunkongCalculator.d.ts +30 -0
  110. package/dist/services/liuyao/calculators/XunkongCalculator.d.ts.map +1 -0
  111. package/dist/services/liuyao/calculators/XunkongCalculator.js +58 -0
  112. package/dist/services/liuyao/calculators/XunkongCalculator.js.map +1 -0
  113. package/dist/services/liuyao/data/guagong.d.ts +94 -0
  114. package/dist/services/liuyao/data/guagong.d.ts.map +1 -0
  115. package/dist/services/liuyao/data/guagong.js +317 -0
  116. package/dist/services/liuyao/data/guagong.js.map +1 -0
  117. package/dist/services/liuyao/index.d.ts +13 -0
  118. package/dist/services/liuyao/index.d.ts.map +1 -0
  119. package/dist/services/liuyao/index.js +29 -0
  120. package/dist/services/liuyao/index.js.map +1 -0
  121. package/dist/services/liuyao/types.d.ts +154 -0
  122. package/dist/services/liuyao/types.d.ts.map +1 -0
  123. package/dist/services/liuyao/types.js +11 -0
  124. package/dist/services/liuyao/types.js.map +1 -0
  125. package/dist/services/meihua/MeihuaService.d.ts +32 -0
  126. package/dist/services/meihua/MeihuaService.d.ts.map +1 -0
  127. package/dist/services/meihua/MeihuaService.js +176 -0
  128. package/dist/services/meihua/MeihuaService.js.map +1 -0
  129. package/dist/services/meihua/calculators/BianguaCalculator.d.ts +21 -0
  130. package/dist/services/meihua/calculators/BianguaCalculator.d.ts.map +1 -0
  131. package/dist/services/meihua/calculators/BianguaCalculator.js +46 -0
  132. package/dist/services/meihua/calculators/BianguaCalculator.js.map +1 -0
  133. package/dist/services/meihua/calculators/HuguaCalculator.d.ts +22 -0
  134. package/dist/services/meihua/calculators/HuguaCalculator.d.ts.map +1 -0
  135. package/dist/services/meihua/calculators/HuguaCalculator.js +46 -0
  136. package/dist/services/meihua/calculators/HuguaCalculator.js.map +1 -0
  137. package/dist/services/meihua/calculators/QiguaCalculator.d.ts +40 -0
  138. package/dist/services/meihua/calculators/QiguaCalculator.d.ts.map +1 -0
  139. package/dist/services/meihua/calculators/QiguaCalculator.js +105 -0
  140. package/dist/services/meihua/calculators/QiguaCalculator.js.map +1 -0
  141. package/dist/services/meihua/calculators/TiyongCalculator.d.ts +34 -0
  142. package/dist/services/meihua/calculators/TiyongCalculator.d.ts.map +1 -0
  143. package/dist/services/meihua/calculators/TiyongCalculator.js +105 -0
  144. package/dist/services/meihua/calculators/TiyongCalculator.js.map +1 -0
  145. package/dist/services/meihua/data/bagua.d.ts +19 -0
  146. package/dist/services/meihua/data/bagua.d.ts.map +1 -0
  147. package/dist/services/meihua/data/bagua.js +81 -0
  148. package/dist/services/meihua/data/bagua.js.map +1 -0
  149. package/dist/services/meihua/index.d.ts +11 -0
  150. package/dist/services/meihua/index.d.ts.map +1 -0
  151. package/dist/services/meihua/index.js +27 -0
  152. package/dist/services/meihua/index.js.map +1 -0
  153. package/dist/services/meihua/types.d.ts +95 -0
  154. package/dist/services/meihua/types.d.ts.map +1 -0
  155. package/dist/services/meihua/types.js +6 -0
  156. package/dist/services/meihua/types.js.map +1 -0
  157. package/dist/services/qimen/QimenService.d.ts +93 -0
  158. package/dist/services/qimen/QimenService.d.ts.map +1 -0
  159. package/dist/services/qimen/QimenService.js +427 -0
  160. package/dist/services/qimen/QimenService.js.map +1 -0
  161. package/dist/services/qimen/calculators/BaMenCalculator.d.ts +53 -0
  162. package/dist/services/qimen/calculators/BaMenCalculator.d.ts.map +1 -0
  163. package/dist/services/qimen/calculators/BaMenCalculator.js +105 -0
  164. package/dist/services/qimen/calculators/BaMenCalculator.js.map +1 -0
  165. package/dist/services/qimen/calculators/BaShenCalculator.d.ts +34 -0
  166. package/dist/services/qimen/calculators/BaShenCalculator.d.ts.map +1 -0
  167. package/dist/services/qimen/calculators/BaShenCalculator.js +57 -0
  168. package/dist/services/qimen/calculators/BaShenCalculator.js.map +1 -0
  169. package/dist/services/qimen/calculators/GeJuCalculator.d.ts +141 -0
  170. package/dist/services/qimen/calculators/GeJuCalculator.d.ts.map +1 -0
  171. package/dist/services/qimen/calculators/GeJuCalculator.js +711 -0
  172. package/dist/services/qimen/calculators/GeJuCalculator.js.map +1 -0
  173. package/dist/services/qimen/calculators/JiuGongCalculator.d.ts +56 -0
  174. package/dist/services/qimen/calculators/JiuGongCalculator.d.ts.map +1 -0
  175. package/dist/services/qimen/calculators/JiuGongCalculator.js +98 -0
  176. package/dist/services/qimen/calculators/JiuGongCalculator.js.map +1 -0
  177. package/dist/services/qimen/calculators/JiuXingCalculator.d.ts +54 -0
  178. package/dist/services/qimen/calculators/JiuXingCalculator.d.ts.map +1 -0
  179. package/dist/services/qimen/calculators/JiuXingCalculator.js +117 -0
  180. package/dist/services/qimen/calculators/JiuXingCalculator.js.map +1 -0
  181. package/dist/services/qimen/calculators/JuShuCalculator.d.ts +57 -0
  182. package/dist/services/qimen/calculators/JuShuCalculator.d.ts.map +1 -0
  183. package/dist/services/qimen/calculators/JuShuCalculator.js +115 -0
  184. package/dist/services/qimen/calculators/JuShuCalculator.js.map +1 -0
  185. package/dist/services/qimen/calculators/PanTypeCalculator.d.ts +117 -0
  186. package/dist/services/qimen/calculators/PanTypeCalculator.d.ts.map +1 -0
  187. package/dist/services/qimen/calculators/PanTypeCalculator.js +237 -0
  188. package/dist/services/qimen/calculators/PanTypeCalculator.js.map +1 -0
  189. package/dist/services/qimen/calculators/SanQiLiuYiCalculator.d.ts +50 -0
  190. package/dist/services/qimen/calculators/SanQiLiuYiCalculator.d.ts.map +1 -0
  191. package/dist/services/qimen/calculators/SanQiLiuYiCalculator.js +86 -0
  192. package/dist/services/qimen/calculators/SanQiLiuYiCalculator.js.map +1 -0
  193. package/dist/services/qimen/calculators/ShenShaCalculator.d.ts +80 -0
  194. package/dist/services/qimen/calculators/ShenShaCalculator.d.ts.map +1 -0
  195. package/dist/services/qimen/calculators/ShenShaCalculator.js +300 -0
  196. package/dist/services/qimen/calculators/ShenShaCalculator.js.map +1 -0
  197. package/dist/services/qimen/calculators/YongShenCalculator.d.ts +78 -0
  198. package/dist/services/qimen/calculators/YongShenCalculator.d.ts.map +1 -0
  199. package/dist/services/qimen/calculators/YongShenCalculator.js +497 -0
  200. package/dist/services/qimen/calculators/YongShenCalculator.js.map +1 -0
  201. package/dist/services/qimen/calculators/ZeRiCalculator.d.ts +78 -0
  202. package/dist/services/qimen/calculators/ZeRiCalculator.d.ts.map +1 -0
  203. package/dist/services/qimen/calculators/ZeRiCalculator.js +431 -0
  204. package/dist/services/qimen/calculators/ZeRiCalculator.js.map +1 -0
  205. package/dist/services/qimen/calculators/ZhuanPanCalculator.d.ts +118 -0
  206. package/dist/services/qimen/calculators/ZhuanPanCalculator.d.ts.map +1 -0
  207. package/dist/services/qimen/calculators/ZhuanPanCalculator.js +260 -0
  208. package/dist/services/qimen/calculators/ZhuanPanCalculator.js.map +1 -0
  209. package/dist/services/qimen/data/constants.d.ts +105 -0
  210. package/dist/services/qimen/data/constants.d.ts.map +1 -0
  211. package/dist/services/qimen/data/constants.js +295 -0
  212. package/dist/services/qimen/data/constants.js.map +1 -0
  213. package/dist/services/qimen/data/shensha-rules.d.ts +177 -0
  214. package/dist/services/qimen/data/shensha-rules.d.ts.map +1 -0
  215. package/dist/services/qimen/data/shensha-rules.js +397 -0
  216. package/dist/services/qimen/data/shensha-rules.js.map +1 -0
  217. package/dist/services/qimen/data/yongshen-rules.d.ts +115 -0
  218. package/dist/services/qimen/data/yongshen-rules.d.ts.map +1 -0
  219. package/dist/services/qimen/data/yongshen-rules.js +365 -0
  220. package/dist/services/qimen/data/yongshen-rules.js.map +1 -0
  221. package/dist/services/qimen/index.d.ts +20 -0
  222. package/dist/services/qimen/index.d.ts.map +1 -0
  223. package/dist/services/qimen/index.js +43 -0
  224. package/dist/services/qimen/index.js.map +1 -0
  225. package/dist/services/qimen/types.d.ts +390 -0
  226. package/dist/services/qimen/types.d.ts.map +1 -0
  227. package/dist/services/qimen/types.js +20 -0
  228. package/dist/services/qimen/types.js.map +1 -0
  229. package/dist/services/qimen/utils/gongUtils.d.ts +80 -0
  230. package/dist/services/qimen/utils/gongUtils.d.ts.map +1 -0
  231. package/dist/services/qimen/utils/gongUtils.js +164 -0
  232. package/dist/services/qimen/utils/gongUtils.js.map +1 -0
  233. package/dist/shared/types.d.ts +0 -1
  234. package/dist/shared/types.d.ts.map +1 -1
  235. package/dist/utils/timeNormalization.d.ts +48 -0
  236. package/dist/utils/timeNormalization.d.ts.map +1 -0
  237. package/dist/utils/timeNormalization.js +69 -0
  238. package/dist/utils/timeNormalization.js.map +1 -0
  239. package/package.json +1 -1
@@ -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":";AAAA;;;;;;;;;GASG;;;AAEH,uDAAgD;AAehD,mEAAgE;AAChE,qEAAkE;AAClE,uEAAoE;AACpE,uEAAoE;AACpE,qEAAkE;AAClE,6EAA0E;AAC1E,2EAAwE;AACxE,4CAKwB;AACxB,qEAAuE;AAEvE,MAAa,aAAa;IAChB,MAAM,CAAsB;IAEpC,YAAY,SAA8B,EAAE;QAC1C,IAAI,CAAC,MAAM,GAAG;YACZ,KAAK,EAAE,KAAK;YACZ,GAAG,MAAM;SACV,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,KAAkB;QAC1B,iBAAiB;QACjB,MAAM,cAAc,GAAG,IAAA,0CAAsB,EAAC;YAC5C,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB,CAAC,CAAC;QAEH,YAAY;QACZ,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CACrC,cAAc,CAAC,IAAI,EACnB,cAAc,CAAC,KAAK,EACpB,cAAc,CAAC,GAAG,EAClB,cAAc,CAAC,IAAI,CACpB,CAAC;QAEF,UAAU;QACV,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,iCAAe,CAAC,mBAAmB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAClG,MAAM,UAAU,GAAG,IAAA,sBAAY,EAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACpD,MAAM,MAAM,GAAY;YACtB,IAAI,EAAE,UAAU,CAAC,IAAI;YACrB,QAAQ,EAAE,UAAU,CAAC,KAAK;YAC1B,QAAQ,EAAE,UAAU,CAAC,KAAK;YAC1B,IAAI,EAAE,UAAU,CAAC,IAAI;YACrB,UAAU,EAAE,sBAAY,CAAC,UAAU,CAAC,IAAI,CAAC;YACzC,cAAc,EAAE,UAAU,CAAC,MAAM;YACjC,eAAe,EAAE,UAAU,CAAC,OAAO;YACnC,KAAK,EAAE,UAAU,CAAC,KAAK;YACvB,QAAQ,EAAE,UAAU,CAAC,KAAK,KAAK,CAAC;YAChC,QAAQ,EAAE,UAAU,CAAC,KAAK,KAAK,CAAC;SACjC,CAAC;QAEF,aAAa;QACb,MAAM,kBAAkB,GAAa,EAAE,CAAC;QACxC,MAAM,iBAAiB,GAAc,EAAE,CAAC;QAExC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YACpC,MAAM,QAAQ,GAAG,iCAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACpD,MAAM,MAAM,GAAG,QAAQ,KAAK,CAAC,IAAI,QAAQ,KAAK,CAAC,CAAC;YAEhD,IAAI,QAAQ,EAAE,CAAC;gBACb,kBAAkB,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC/B,iBAAiB,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;YAC5C,CAAC;iBAAM,CAAC;gBACN,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;QAED,iBAAiB;QACjB,IAAI,OAA4B,CAAC;QACjC,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;YACzF,MAAM,WAAW,GAAG,IAAA,sBAAY,EAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YACvD,OAAO,GAAG;gBACR,IAAI,EAAE,WAAW,CAAC,IAAI;gBACtB,QAAQ,EAAE,WAAW,CAAC,KAAK;gBAC3B,QAAQ,EAAE,WAAW,CAAC,KAAK;gBAC3B,IAAI,EAAE,WAAW,CAAC,IAAI;gBACtB,UAAU,EAAE,sBAAY,CAAC,WAAW,CAAC,IAAI,CAAC;gBAC1C,cAAc,EAAE,WAAW,CAAC,MAAM;gBAClC,eAAe,EAAE,WAAW,CAAC,OAAO;gBACpC,KAAK,EAAE,WAAW,CAAC,KAAK;gBACxB,QAAQ,EAAE,WAAW,CAAC,KAAK,KAAK,CAAC;gBACjC,QAAQ,EAAE,WAAW,CAAC,KAAK,KAAK,CAAC;aAClC,CAAC;QACJ,CAAC;QAED,cAAc;QACd,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CACnC,KAAK,CAAC,SAAS,EACf,MAAM,EACN,OAAO,EACP,QAAQ,CAAC,OAAO,EAChB,QAAQ,CAAC,WAAW,EACpB,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAU,CACtC,CAAC;QAEF,UAAU;QACV,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACjD,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QAClF,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAU,CAAC;QAExD,MAAM,UAAU,GAAG,mCAAgB,CAAC,SAAS,CAC3C,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,IAAI,EACX,aAAa,EACb,WAAW,EACX,QAAQ,CAAC,WAAW,EACpB,SAAS,CACV,CAAC;QAEF,OAAO;YACL,QAAQ;YACR,MAAM;YACN,OAAO;YACP,OAAO;YACP,kBAAkB;YAClB,UAAU;SACX,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,iBAAiB,CAAC,IAAY,EAAE,KAAa,EAAE,GAAW,EAAE,IAAY;QAC9E,MAAM,KAAK,GAAG,wBAAK,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7D,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC/B,MAAM,SAAS,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC;QAEvC,MAAM,UAAU,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC;QACvC,MAAM,WAAW,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC;QACzC,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC;QACrC,MAAM,UAAU,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC;QAEvC,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAY,CAAC;QAC/C,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAU,CAAC;QAC/C,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAU,CAAC;QAEnD,MAAM,OAAO,GAAG,qCAAiB,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAEhE,OAAO;YACL,SAAS,EAAE,GAAG,IAAI,IAAI,KAAK,IAAI,GAAG,GAAG;YACrC,SAAS,EAAE,KAAK,CAAC,QAAQ,EAAE;YAC3B,UAAU;YACV,WAAW;YACX,SAAS;YACT,UAAU;YACV,OAAO;YACP,WAAW;YACX,OAAO;SACR,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,gBAAgB,CACtB,SAAqB,EACrB,MAAe,EACf,OAA4B,EAC5B,OAAgB,EAChB,WAAkB,EAClB,SAAgB;QAEhB,MAAM,OAAO,GAAc,EAAE,CAAC;QAC9B,MAAM,WAAW,GAAG,qCAAiB,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAC5D,MAAM,SAAS,GAAG,iCAAe,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QAEjF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC;YACvB,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YAC9B,MAAM,QAAQ,GAAG,iCAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACpD,MAAM,OAAO,GAAG,iCAAe,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YACrD,MAAM,cAAc,GAAG,iCAAe,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;YAEnE,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YAC3B,MAAM,MAAM,GAAG,mCAAgB,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;YAE3E,oBAAoB;YACpB,IAAI,YAA+B,CAAC;YACpC,IAAI,UAAU,GAAG,SAAS,CAAC;YAC3B,IAAI,QAAQ,IAAI,OAAO,EAAE,CAAC;gBACxB,MAAM,aAAa,GAAG,iCAAe,CAAC,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;gBACvF,YAAY,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;gBACtC,QAAQ;gBACR,UAAU,GAAG,2CAAoB,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;YACzE,CAAC;YAED,OAAO;YACP,MAAM,gBAAgB,GAAG,yCAAmB,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YAClF,MAAM,cAAc,GAAG,yCAAmB,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAE9E,OAAO,CAAC,IAAI,CAAC;gBACX,QAAQ;gBACR,KAAK,EAAE,QAAQ;gBACf,OAAO;gBACP,QAAQ;gBACR,cAAc;gBACd,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,WAAW,EAAE,KAAK,CAAC,MAAM;gBACzB,YAAY;gBACZ,MAAM;gBACN,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;gBACvB,QAAQ,EAAE,QAAQ,KAAK,MAAM,CAAC,cAAc;gBAC5C,SAAS,EAAE,QAAQ,KAAK,MAAM,CAAC,eAAe;gBAC9C,UAAU;gBACV,gBAAgB;gBAChB,cAAc;aACf,CAAC,CAAC;QACL,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;;;;OAMG;IACK,iBAAiB,CAAC,OAAkB;QAC1C,MAAM,eAAe,GAA0B;YAC7C,KAAK,EAAE,GAAG;YACV,KAAK,EAAE,GAAG;YACV,KAAK,EAAE,GAAG;YACV,KAAK,EAAE,GAAG;YACV,KAAK,EAAE,GAAG;YACV,KAAK,EAAE,GAAG;YACV,KAAK,EAAE,GAAG;YACV,KAAK,EAAE,GAAG;SACX,CAAC;QAEF,gCAAgC;QAChC,MAAM,WAAW,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvF,MAAM,WAAW,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEvF,OAAO;YACL,KAAK,EAAE,eAAe,CAAC,WAAW,CAAC;YACnC,KAAK,EAAE,eAAe,CAAC,WAAW,CAAC;SACpC,CAAC;IACJ,CAAC;CACF;AA9OD,sCA8OC;AAED,OAAO;AACM,QAAA,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC"}
@@ -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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FushenCalculator.js","sourceRoot":"","sources":["../../../../src/services/liuyao/calculators/FushenCalculator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * 進神/退神計算器
3
+ *
4
+ * 理論來源:《增刪卜易》第36章「進神退神章」
5
+ *
6
+ * 核心規則:
7
+ * - 進神:動爻變化後地支順進(如亥化子、寅化卯)
8
+ * - 退神:動爻變化後地支逆退(如子化亥、卯化寅)
9
+ *
10
+ * 進神規則(地支順進):
11
+ * - 亥化子、寅化卯、巳化午、申化酉(四正進)
12
+ * - 丑化辰、辰化未、未化戌、戌化丑(四墓進)
13
+ *
14
+ * 退神規則(地支逆退):
15
+ * - 子化亥、卯化寅、午化巳、酉化申(四正退)
16
+ * - 辰化丑、未化辰、戌化未、丑化戌(四墓退)
17
+ */
18
+ import { DiZhi, JinTuiShenType } from '../types';
19
+ export declare class JintuishenCalculator {
20
+ /**
21
+ * 判斷動爻變化是否為進神或退神
22
+ *
23
+ * @param originalDiZhi 原地支(本卦納甲)
24
+ * @param changedDiZhi 變化後地支(變卦納甲)
25
+ * @returns 進神/退神/null
26
+ */
27
+ static calculate(originalDiZhi: DiZhi, changedDiZhi: DiZhi): JinTuiShenType;
28
+ /**
29
+ * 獲取進神說明
30
+ */
31
+ static getJinShenDescription(): string;
32
+ /**
33
+ * 獲取退神說明
34
+ */
35
+ static getTuiShenDescription(): string;
36
+ }
37
+ //# sourceMappingURL=JintuishenCalculator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JintuishenCalculator.d.ts","sourceRoot":"","sources":["../../../../src/services/liuyao/calculators/JintuishenCalculator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAoCjD,qBAAa,oBAAoB;IAC/B;;;;;;OAMG;IACH,MAAM,CAAC,SAAS,CAAC,aAAa,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,GAAG,cAAc;IAc3E;;OAEG;IACH,MAAM,CAAC,qBAAqB,IAAI,MAAM;IAItC;;OAEG;IACH,MAAM,CAAC,qBAAqB,IAAI,MAAM;CAGvC"}
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ /**
3
+ * 進神/退神計算器
4
+ *
5
+ * 理論來源:《增刪卜易》第36章「進神退神章」
6
+ *
7
+ * 核心規則:
8
+ * - 進神:動爻變化後地支順進(如亥化子、寅化卯)
9
+ * - 退神:動爻變化後地支逆退(如子化亥、卯化寅)
10
+ *
11
+ * 進神規則(地支順進):
12
+ * - 亥化子、寅化卯、巳化午、申化酉(四正進)
13
+ * - 丑化辰、辰化未、未化戌、戌化丑(四墓進)
14
+ *
15
+ * 退神規則(地支逆退):
16
+ * - 子化亥、卯化寅、午化巳、酉化申(四正退)
17
+ * - 辰化丑、未化辰、戌化未、丑化戌(四墓退)
18
+ */
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.JintuishenCalculator = void 0;
21
+ /** 進神對照表:原地支 -> 變化後地支 */
22
+ const JIN_SHEN_MAP = {
23
+ '亥': '子',
24
+ '寅': '卯',
25
+ '巳': '午',
26
+ '申': '酉',
27
+ '丑': '辰',
28
+ '辰': '未',
29
+ '未': '戌',
30
+ '戌': '丑',
31
+ // 以下不構成進神
32
+ '子': '子', // placeholder
33
+ '卯': '卯',
34
+ '午': '午',
35
+ '酉': '酉',
36
+ };
37
+ /** 退神對照表:原地支 -> 變化後地支 */
38
+ const TUI_SHEN_MAP = {
39
+ '子': '亥',
40
+ '卯': '寅',
41
+ '午': '巳',
42
+ '酉': '申',
43
+ '辰': '丑',
44
+ '未': '辰',
45
+ '戌': '未',
46
+ '丑': '戌',
47
+ // 以下不構成退神
48
+ '亥': '亥', // placeholder
49
+ '寅': '寅',
50
+ '巳': '巳',
51
+ '申': '申',
52
+ };
53
+ class JintuishenCalculator {
54
+ /**
55
+ * 判斷動爻變化是否為進神或退神
56
+ *
57
+ * @param originalDiZhi 原地支(本卦納甲)
58
+ * @param changedDiZhi 變化後地支(變卦納甲)
59
+ * @returns 進神/退神/null
60
+ */
61
+ static calculate(originalDiZhi, changedDiZhi) {
62
+ // 檢查是否為進神
63
+ if (JIN_SHEN_MAP[originalDiZhi] === changedDiZhi) {
64
+ return '進神';
65
+ }
66
+ // 檢查是否為退神
67
+ if (TUI_SHEN_MAP[originalDiZhi] === changedDiZhi) {
68
+ return '退神';
69
+ }
70
+ return null;
71
+ }
72
+ /**
73
+ * 獲取進神說明
74
+ */
75
+ static getJinShenDescription() {
76
+ return '進神:亥→子、寅→卯、巳→午、申→酉、丑→辰、辰→未、未→戌、戌→丑';
77
+ }
78
+ /**
79
+ * 獲取退神說明
80
+ */
81
+ static getTuiShenDescription() {
82
+ return '退神:子→亥、卯→寅、午→巳、酉→申、辰→丑、未→辰、戌→未、丑→戌';
83
+ }
84
+ }
85
+ exports.JintuishenCalculator = JintuishenCalculator;
86
+ //# sourceMappingURL=JintuishenCalculator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JintuishenCalculator.js","sourceRoot":"","sources":["../../../../src/services/liuyao/calculators/JintuishenCalculator.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;GAgBG;;;AAIH,yBAAyB;AACzB,MAAM,YAAY,GAAyB;IACzC,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,GAAG;IACR,UAAU;IACV,GAAG,EAAE,GAAG,EAAE,cAAc;IACxB,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,GAAG;CACT,CAAC;AAEF,yBAAyB;AACzB,MAAM,YAAY,GAAyB;IACzC,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,GAAG;IACR,UAAU;IACV,GAAG,EAAE,GAAG,EAAE,cAAc;IACxB,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,GAAG;CACT,CAAC;AAEF,MAAa,oBAAoB;IAC/B;;;;;;OAMG;IACH,MAAM,CAAC,SAAS,CAAC,aAAoB,EAAE,YAAmB;QACxD,UAAU;QACV,IAAI,YAAY,CAAC,aAAa,CAAC,KAAK,YAAY,EAAE,CAAC;YACjD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,UAAU;QACV,IAAI,YAAY,CAAC,aAAa,CAAC,KAAK,YAAY,EAAE,CAAC;YACjD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,qBAAqB;QAC1B,OAAO,oCAAoC,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,qBAAqB;QAC1B,OAAO,oCAAoC,CAAC;IAC9C,CAAC;CACF;AAnCD,oDAmCC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * 六親計算器
3
+ *
4
+ * 六親推導規則(以卦宮五行為「我」):
5
+ * - 生我者為父母
6
+ * - 我生者為子孫
7
+ * - 克我者為官鬼
8
+ * - 我克者為妻財
9
+ * - 同我者為兄弟
10
+ */
11
+ import { WuXing, LiuQin } from '../types';
12
+ export declare class LiuqinCalculator {
13
+ /**
14
+ * 計算六親
15
+ * @param gongWuXing 卦宮五行(作為「我」)
16
+ * @param yaoWuXing 爻的五行
17
+ */
18
+ static calculate(gongWuXing: WuXing, yaoWuXing: WuXing): LiuQin;
19
+ /**
20
+ * 獲取六親簡稱
21
+ */
22
+ static getShortName(liuQin: LiuQin): string;
23
+ }
24
+ //# sourceMappingURL=LiuqinCalculator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LiuqinCalculator.d.ts","sourceRoot":"","sources":["../../../../src/services/liuyao/calculators/LiuqinCalculator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAoB1C,qBAAa,gBAAgB;IAC3B;;;;OAIG;IACH,MAAM,CAAC,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;IA8B/D;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;CAU5C"}
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ /**
3
+ * 六親計算器
4
+ *
5
+ * 六親推導規則(以卦宮五行為「我」):
6
+ * - 生我者為父母
7
+ * - 我生者為子孫
8
+ * - 克我者為官鬼
9
+ * - 我克者為妻財
10
+ * - 同我者為兄弟
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.LiuqinCalculator = void 0;
14
+ /** 五行相生關係:key 生 value */
15
+ const WUXING_SHENG = {
16
+ '木': '火',
17
+ '火': '土',
18
+ '土': '金',
19
+ '金': '水',
20
+ '水': '木',
21
+ };
22
+ /** 五行相剋關係:key 剋 value */
23
+ const WUXING_KE = {
24
+ '木': '土',
25
+ '土': '水',
26
+ '水': '火',
27
+ '火': '金',
28
+ '金': '木',
29
+ };
30
+ class LiuqinCalculator {
31
+ /**
32
+ * 計算六親
33
+ * @param gongWuXing 卦宮五行(作為「我」)
34
+ * @param yaoWuXing 爻的五行
35
+ */
36
+ static calculate(gongWuXing, yaoWuXing) {
37
+ // 同我者為兄弟
38
+ if (gongWuXing === yaoWuXing) {
39
+ return '兄弟';
40
+ }
41
+ // 生我者為父母
42
+ if (WUXING_SHENG[yaoWuXing] === gongWuXing) {
43
+ return '父母';
44
+ }
45
+ // 我生者為子孫
46
+ if (WUXING_SHENG[gongWuXing] === yaoWuXing) {
47
+ return '子孫';
48
+ }
49
+ // 克我者為官鬼
50
+ if (WUXING_KE[yaoWuXing] === gongWuXing) {
51
+ return '官鬼';
52
+ }
53
+ // 我克者為妻財
54
+ if (WUXING_KE[gongWuXing] === yaoWuXing) {
55
+ return '妻財';
56
+ }
57
+ // 理論上不會到這裡
58
+ return '兄弟';
59
+ }
60
+ /**
61
+ * 獲取六親簡稱
62
+ */
63
+ static getShortName(liuQin) {
64
+ const SHORT_NAMES = {
65
+ '父母': '父',
66
+ '兄弟': '兄',
67
+ '子孫': '子',
68
+ '妻財': '財',
69
+ '官鬼': '官',
70
+ };
71
+ return SHORT_NAMES[liuQin];
72
+ }
73
+ }
74
+ exports.LiuqinCalculator = LiuqinCalculator;
75
+ //# sourceMappingURL=LiuqinCalculator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LiuqinCalculator.js","sourceRoot":"","sources":["../../../../src/services/liuyao/calculators/LiuqinCalculator.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;AAIH,yBAAyB;AACzB,MAAM,YAAY,GAA2B;IAC3C,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,GAAG;CACT,CAAC;AAEF,yBAAyB;AACzB,MAAM,SAAS,GAA2B;IACxC,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,GAAG;CACT,CAAC;AAEF,MAAa,gBAAgB;IAC3B;;;;OAIG;IACH,MAAM,CAAC,SAAS,CAAC,UAAkB,EAAE,SAAiB;QACpD,SAAS;QACT,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,SAAS;QACT,IAAI,YAAY,CAAC,SAAS,CAAC,KAAK,UAAU,EAAE,CAAC;YAC3C,OAAO,IAAI,CAAC;QACd,CAAC;QAED,SAAS;QACT,IAAI,YAAY,CAAC,UAAU,CAAC,KAAK,SAAS,EAAE,CAAC;YAC3C,OAAO,IAAI,CAAC;QACd,CAAC;QAED,SAAS;QACT,IAAI,SAAS,CAAC,SAAS,CAAC,KAAK,UAAU,EAAE,CAAC;YACxC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,SAAS;QACT,IAAI,SAAS,CAAC,UAAU,CAAC,KAAK,SAAS,EAAE,CAAC;YACxC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,WAAW;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,MAAc;QAChC,MAAM,WAAW,GAA2B;YAC1C,IAAI,EAAE,GAAG;YACT,IAAI,EAAE,GAAG;YACT,IAAI,EAAE,GAAG;YACT,IAAI,EAAE,GAAG;YACT,IAAI,EAAE,GAAG;SACV,CAAC;QACF,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;CACF;AAjDD,4CAiDC"}