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.
Files changed (194) hide show
  1. package/README.md +120 -47
  2. package/dist/core/bazi/BaziCore.d.ts +7 -1
  3. package/dist/core/bazi/BaziCore.d.ts.map +1 -1
  4. package/dist/core/bazi/BaziCore.js +37 -11
  5. package/dist/core/bazi/BaziCore.js.map +1 -1
  6. package/dist/core/bazi/types.d.ts +4 -0
  7. package/dist/core/bazi/types.d.ts.map +1 -1
  8. package/dist/core/qimen/FlyingRule.d.ts +60 -0
  9. package/dist/core/qimen/FlyingRule.d.ts.map +1 -0
  10. package/dist/core/qimen/FlyingRule.js +94 -0
  11. package/dist/core/qimen/FlyingRule.js.map +1 -0
  12. package/dist/core/qimen/GongMapping.d.ts +29 -0
  13. package/dist/core/qimen/GongMapping.d.ts.map +1 -0
  14. package/dist/core/qimen/GongMapping.js +83 -0
  15. package/dist/core/qimen/GongMapping.js.map +1 -0
  16. package/dist/core/qimen/RotatingRule.d.ts +76 -0
  17. package/dist/core/qimen/RotatingRule.d.ts.map +1 -0
  18. package/dist/core/qimen/RotatingRule.js +126 -0
  19. package/dist/core/qimen/RotatingRule.js.map +1 -0
  20. package/dist/core/qimen/YinYangDunCalculator.d.ts +28 -0
  21. package/dist/core/qimen/YinYangDunCalculator.d.ts.map +1 -0
  22. package/dist/core/qimen/YinYangDunCalculator.js +79 -0
  23. package/dist/core/qimen/YinYangDunCalculator.js.map +1 -0
  24. package/dist/core/qimen/index.d.ts +10 -0
  25. package/dist/core/qimen/index.d.ts.map +1 -0
  26. package/dist/core/qimen/index.js +58 -0
  27. package/dist/core/qimen/index.js.map +1 -0
  28. package/dist/core/qimen/types.d.ts +19 -0
  29. package/dist/core/qimen/types.d.ts.map +1 -0
  30. package/dist/core/qimen/types.js +7 -0
  31. package/dist/core/qimen/types.js.map +1 -0
  32. package/dist/index.d.ts +10 -5
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +14 -1311
  35. package/dist/index.js.map +1 -1
  36. package/dist/output/fortuneTextRenderer.d.ts +8 -7
  37. package/dist/output/fortuneTextRenderer.d.ts.map +1 -1
  38. package/dist/output/fortuneTextRenderer.js +83 -21
  39. package/dist/output/fortuneTextRenderer.js.map +1 -1
  40. package/dist/output/qimenTextRenderer.d.ts +36 -0
  41. package/dist/output/qimenTextRenderer.d.ts.map +1 -0
  42. package/dist/output/qimenTextRenderer.js +230 -0
  43. package/dist/output/qimenTextRenderer.js.map +1 -0
  44. package/dist/server.d.ts +11 -0
  45. package/dist/server.d.ts.map +1 -0
  46. package/dist/server.js +33 -0
  47. package/dist/server.js.map +1 -0
  48. package/dist/services/bazi/BaziService.d.ts +1 -17
  49. package/dist/services/bazi/BaziService.d.ts.map +1 -1
  50. package/dist/services/bazi/BaziService.js +9 -194
  51. package/dist/services/bazi/BaziService.js.map +1 -1
  52. package/dist/services/bazi/analyzers/TenGodsAnalyzer.js +12 -12
  53. package/dist/services/bazi/analyzers/TenGodsAnalyzer.js.map +1 -1
  54. package/dist/services/bazi/index.d.ts +0 -2
  55. package/dist/services/bazi/index.d.ts.map +1 -1
  56. package/dist/services/bazi/index.js +1 -5
  57. package/dist/services/bazi/index.js.map +1 -1
  58. package/dist/services/bazi/types.d.ts +4 -112
  59. package/dist/services/bazi/types.d.ts.map +1 -1
  60. package/dist/services/bazi/types.js +3 -102
  61. package/dist/services/bazi/types.js.map +1 -1
  62. package/dist/services/daliuren/DaliurenService.d.ts +11 -1
  63. package/dist/services/daliuren/DaliurenService.d.ts.map +1 -1
  64. package/dist/services/daliuren/DaliurenService.js +30 -0
  65. package/dist/services/daliuren/DaliurenService.js.map +1 -1
  66. package/dist/services/daliuren/calculators/TianDiPanCalculator.d.ts.map +1 -1
  67. package/dist/services/daliuren/calculators/TianDiPanCalculator.js +3 -4
  68. package/dist/services/daliuren/calculators/TianDiPanCalculator.js.map +1 -1
  69. package/dist/services/daliuren/data/constants.d.ts +7 -0
  70. package/dist/services/daliuren/data/constants.d.ts.map +1 -1
  71. package/dist/services/daliuren/data/constants.js +17 -1
  72. package/dist/services/daliuren/data/constants.js.map +1 -1
  73. package/dist/services/daliuren/types.d.ts +13 -0
  74. package/dist/services/daliuren/types.d.ts.map +1 -1
  75. package/dist/services/meihua/calculators/TiyongCalculator.d.ts.map +1 -1
  76. package/dist/services/meihua/calculators/TiyongCalculator.js +6 -5
  77. package/dist/services/meihua/calculators/TiyongCalculator.js.map +1 -1
  78. package/dist/services/qimen/QimenService.d.ts +76 -0
  79. package/dist/services/qimen/QimenService.d.ts.map +1 -0
  80. package/dist/services/qimen/QimenService.js +393 -0
  81. package/dist/services/qimen/QimenService.js.map +1 -0
  82. package/dist/services/qimen/calculators/BaMenCalculator.d.ts +45 -0
  83. package/dist/services/qimen/calculators/BaMenCalculator.d.ts.map +1 -0
  84. package/dist/services/qimen/calculators/BaMenCalculator.js +87 -0
  85. package/dist/services/qimen/calculators/BaMenCalculator.js.map +1 -0
  86. package/dist/services/qimen/calculators/BaShenCalculator.d.ts +34 -0
  87. package/dist/services/qimen/calculators/BaShenCalculator.d.ts.map +1 -0
  88. package/dist/services/qimen/calculators/BaShenCalculator.js +57 -0
  89. package/dist/services/qimen/calculators/BaShenCalculator.js.map +1 -0
  90. package/dist/services/qimen/calculators/GeJuCalculator.d.ts +141 -0
  91. package/dist/services/qimen/calculators/GeJuCalculator.d.ts.map +1 -0
  92. package/dist/services/qimen/calculators/GeJuCalculator.js +711 -0
  93. package/dist/services/qimen/calculators/GeJuCalculator.js.map +1 -0
  94. package/dist/services/qimen/calculators/JiuGongCalculator.d.ts +49 -0
  95. package/dist/services/qimen/calculators/JiuGongCalculator.d.ts.map +1 -0
  96. package/dist/services/qimen/calculators/JiuGongCalculator.js +68 -0
  97. package/dist/services/qimen/calculators/JiuGongCalculator.js.map +1 -0
  98. package/dist/services/qimen/calculators/JiuXingCalculator.d.ts +44 -0
  99. package/dist/services/qimen/calculators/JiuXingCalculator.d.ts.map +1 -0
  100. package/dist/services/qimen/calculators/JiuXingCalculator.js +72 -0
  101. package/dist/services/qimen/calculators/JiuXingCalculator.js.map +1 -0
  102. package/dist/services/qimen/calculators/JuShuCalculator.d.ts +60 -0
  103. package/dist/services/qimen/calculators/JuShuCalculator.d.ts.map +1 -0
  104. package/dist/services/qimen/calculators/JuShuCalculator.js +110 -0
  105. package/dist/services/qimen/calculators/JuShuCalculator.js.map +1 -0
  106. package/dist/services/qimen/calculators/PanTypeCalculator.d.ts +117 -0
  107. package/dist/services/qimen/calculators/PanTypeCalculator.d.ts.map +1 -0
  108. package/dist/services/qimen/calculators/PanTypeCalculator.js +237 -0
  109. package/dist/services/qimen/calculators/PanTypeCalculator.js.map +1 -0
  110. package/dist/services/qimen/calculators/SanQiLiuYiCalculator.d.ts +41 -0
  111. package/dist/services/qimen/calculators/SanQiLiuYiCalculator.d.ts.map +1 -0
  112. package/dist/services/qimen/calculators/SanQiLiuYiCalculator.js +73 -0
  113. package/dist/services/qimen/calculators/SanQiLiuYiCalculator.js.map +1 -0
  114. package/dist/services/qimen/calculators/ShenShaCalculator.d.ts +80 -0
  115. package/dist/services/qimen/calculators/ShenShaCalculator.d.ts.map +1 -0
  116. package/dist/services/qimen/calculators/ShenShaCalculator.js +300 -0
  117. package/dist/services/qimen/calculators/ShenShaCalculator.js.map +1 -0
  118. package/dist/services/qimen/calculators/YongShenCalculator.d.ts +78 -0
  119. package/dist/services/qimen/calculators/YongShenCalculator.d.ts.map +1 -0
  120. package/dist/services/qimen/calculators/YongShenCalculator.js +497 -0
  121. package/dist/services/qimen/calculators/YongShenCalculator.js.map +1 -0
  122. package/dist/services/qimen/calculators/ZhuanPanCalculator.d.ts +111 -0
  123. package/dist/services/qimen/calculators/ZhuanPanCalculator.d.ts.map +1 -0
  124. package/dist/services/qimen/calculators/ZhuanPanCalculator.js +232 -0
  125. package/dist/services/qimen/calculators/ZhuanPanCalculator.js.map +1 -0
  126. package/dist/services/qimen/data/constants.d.ts +105 -0
  127. package/dist/services/qimen/data/constants.d.ts.map +1 -0
  128. package/dist/services/qimen/data/constants.js +295 -0
  129. package/dist/services/qimen/data/constants.js.map +1 -0
  130. package/dist/services/qimen/data/shensha-rules.d.ts +177 -0
  131. package/dist/services/qimen/data/shensha-rules.d.ts.map +1 -0
  132. package/dist/services/qimen/data/shensha-rules.js +397 -0
  133. package/dist/services/qimen/data/shensha-rules.js.map +1 -0
  134. package/dist/services/qimen/data/yongshen-rules.d.ts +115 -0
  135. package/dist/services/qimen/data/yongshen-rules.d.ts.map +1 -0
  136. package/dist/services/qimen/data/yongshen-rules.js +365 -0
  137. package/dist/services/qimen/data/yongshen-rules.js.map +1 -0
  138. package/dist/services/qimen/index.d.ts +20 -0
  139. package/dist/services/qimen/index.d.ts.map +1 -0
  140. package/dist/services/qimen/index.js +43 -0
  141. package/dist/services/qimen/index.js.map +1 -0
  142. package/dist/services/qimen/types.d.ts +316 -0
  143. package/dist/services/qimen/types.d.ts.map +1 -0
  144. package/dist/services/qimen/types.js +21 -0
  145. package/dist/services/qimen/types.js.map +1 -0
  146. package/dist/services/qimen/utils/gongUtils.d.ts +80 -0
  147. package/dist/services/qimen/utils/gongUtils.d.ts.map +1 -0
  148. package/dist/services/qimen/utils/gongUtils.js +164 -0
  149. package/dist/services/qimen/utils/gongUtils.js.map +1 -0
  150. package/dist/shared/logger.d.ts +5 -0
  151. package/dist/shared/logger.d.ts.map +1 -1
  152. package/dist/shared/logger.js +11 -4
  153. package/dist/shared/logger.js.map +1 -1
  154. package/dist/tools/baziTools.d.ts +13 -0
  155. package/dist/tools/baziTools.d.ts.map +1 -0
  156. package/dist/tools/baziTools.js +331 -0
  157. package/dist/tools/baziTools.js.map +1 -0
  158. package/dist/tools/divinationTools.d.ts +9 -0
  159. package/dist/tools/divinationTools.d.ts.map +1 -0
  160. package/dist/tools/divinationTools.js +209 -0
  161. package/dist/tools/divinationTools.js.map +1 -0
  162. package/dist/tools/qimenTools.d.ts +10 -0
  163. package/dist/tools/qimenTools.d.ts.map +1 -0
  164. package/dist/tools/qimenTools.js +132 -0
  165. package/dist/tools/qimenTools.js.map +1 -0
  166. package/dist/tools/schemas.d.ts +99 -0
  167. package/dist/tools/schemas.d.ts.map +1 -0
  168. package/dist/tools/schemas.js +162 -0
  169. package/dist/tools/schemas.js.map +1 -0
  170. package/dist/tools/ziweiTools.d.ts +14 -0
  171. package/dist/tools/ziweiTools.d.ts.map +1 -0
  172. package/dist/tools/ziweiTools.js +483 -0
  173. package/dist/tools/ziweiTools.js.map +1 -0
  174. package/dist/utils/timeNormalization.d.ts +42 -17
  175. package/dist/utils/timeNormalization.d.ts.map +1 -1
  176. package/dist/utils/timeNormalization.js +99 -41
  177. package/dist/utils/timeNormalization.js.map +1 -1
  178. package/package.json +15 -9
  179. package/dist/services/bazi/analyzers/HiddenStemsAnalyzer.d.ts +0 -16
  180. package/dist/services/bazi/analyzers/HiddenStemsAnalyzer.d.ts.map +0 -1
  181. package/dist/services/bazi/analyzers/HiddenStemsAnalyzer.js +0 -60
  182. package/dist/services/bazi/analyzers/HiddenStemsAnalyzer.js.map +0 -1
  183. package/dist/services/bazi/analyzers/NaYinAnalyzer.d.ts +0 -33
  184. package/dist/services/bazi/analyzers/NaYinAnalyzer.d.ts.map +0 -1
  185. package/dist/services/bazi/analyzers/NaYinAnalyzer.js +0 -209
  186. package/dist/services/bazi/analyzers/NaYinAnalyzer.js.map +0 -1
  187. package/dist/services/bazi/analyzers/ShenShaAnalyzer.d.ts +0 -236
  188. package/dist/services/bazi/analyzers/ShenShaAnalyzer.d.ts.map +0 -1
  189. package/dist/services/bazi/analyzers/ShenShaAnalyzer.js +0 -2079
  190. package/dist/services/bazi/analyzers/ShenShaAnalyzer.js.map +0 -1
  191. package/dist/services/bazi/analyzers/TraditionalAnalyzer.d.ts +0 -46
  192. package/dist/services/bazi/analyzers/TraditionalAnalyzer.d.ts.map +0 -1
  193. package/dist/services/bazi/analyzers/TraditionalAnalyzer.js +0 -260
  194. package/dist/services/bazi/analyzers/TraditionalAnalyzer.js.map +0 -1
@@ -0,0 +1,393 @@
1
+ "use strict";
2
+ /**
3
+ * 奇门遁甲服务
4
+ *
5
+ * 提供奇门遁甲排盘功能,支持时盘和日盘
6
+ * 支持拆补法和茅山法两种置闰算法
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.QimenService = void 0;
10
+ const lunar_javascript_1 = require("lunar-javascript");
11
+ const JuShuCalculator_1 = require("./calculators/JuShuCalculator");
12
+ const JiuGongCalculator_1 = require("./calculators/JiuGongCalculator");
13
+ const SanQiLiuYiCalculator_1 = require("./calculators/SanQiLiuYiCalculator");
14
+ const ZhuanPanCalculator_1 = require("./calculators/ZhuanPanCalculator");
15
+ const PanTypeCalculator_1 = require("./calculators/PanTypeCalculator");
16
+ const BaMenCalculator_1 = require("./calculators/BaMenCalculator");
17
+ const JiuXingCalculator_1 = require("./calculators/JiuXingCalculator");
18
+ const BaShenCalculator_1 = require("./calculators/BaShenCalculator");
19
+ const GeJuCalculator_1 = require("./calculators/GeJuCalculator");
20
+ const YongShenCalculator_1 = require("./calculators/YongShenCalculator");
21
+ const ShenShaCalculator_1 = require("./calculators/ShenShaCalculator");
22
+ const constants_1 = require("./data/constants");
23
+ class QimenService {
24
+ config;
25
+ constructor(config = {}) {
26
+ this.config = config;
27
+ }
28
+ /**
29
+ * 验证输入参数
30
+ */
31
+ validateInput(input) {
32
+ // 验证年份
33
+ if (!Number.isInteger(input.year) || input.year < 1900 || input.year > 2100) {
34
+ throw new Error(`年份必须在 1900-2100 之间,当前值: ${input.year}`);
35
+ }
36
+ // 验证月份
37
+ if (!Number.isInteger(input.month) || input.month < 1 || input.month > 12) {
38
+ throw new Error(`月份必须在 1-12 之间,当前值: ${input.month}`);
39
+ }
40
+ // 验证日期
41
+ if (!Number.isInteger(input.day) || input.day < 1 || input.day > 31) {
42
+ throw new Error(`日期必须在 1-31 之间,当前值: ${input.day}`);
43
+ }
44
+ // 验证小时
45
+ if (!Number.isInteger(input.hour) || input.hour < 0 || input.hour > 23) {
46
+ throw new Error(`小时必须在 0-23 之间,当前值: ${input.hour}`);
47
+ }
48
+ // 验证分钟(可选)
49
+ if (input.minute !== undefined) {
50
+ if (!Number.isInteger(input.minute) || input.minute < 0 || input.minute > 59) {
51
+ throw new Error(`分钟必须在 0-59 之间,当前值: ${input.minute}`);
52
+ }
53
+ }
54
+ // 验证盘类型(可选)
55
+ const validPanTypes = ['时盘', '日盘', '月盘', '年盘'];
56
+ if (input.panType !== undefined && !validPanTypes.includes(input.panType)) {
57
+ throw new Error(`盘类型必须是 ${validPanTypes.join('/')},当前值: ${input.panType}`);
58
+ }
59
+ // 验证盘式(可选)
60
+ const validPanStyles = ['转盘', '飞盘'];
61
+ if (input.panStyle !== undefined && !validPanStyles.includes(input.panStyle)) {
62
+ throw new Error(`盘式必须是 ${validPanStyles.join('/')},当前值: ${input.panStyle}`);
63
+ }
64
+ // 验证置闰方法(可选)
65
+ if (input.zhiRunMethod !== undefined && input.zhiRunMethod !== 'chaibu' && input.zhiRunMethod !== 'maoshan') {
66
+ throw new Error(`置闰方法必须是 'chaibu' 或 'maoshan',当前值: ${input.zhiRunMethod}`);
67
+ }
68
+ }
69
+ /**
70
+ * 计算奇门遁甲盘
71
+ *
72
+ * 支持四种盘类型:时盘、日盘、月盘、年盘
73
+ * 支持两种盘式:转盘(默认)、飞盘
74
+ */
75
+ calculate(input) {
76
+ // 输入参数验证
77
+ this.validateInput(input);
78
+ const panType = input.panType || '时盘';
79
+ const panStyle = input.panStyle || '转盘';
80
+ const zhiRunMethod = input.zhiRunMethod || 'chaibu';
81
+ // 1. 处理时间,获取四柱和节气信息
82
+ const { siZhu, jieQi, jieQiDate, solarDate, lunarDate } = this.getTimeInfo(input);
83
+ // 2. 计算局数参数(阴阳遁 + 上中下元 + 局数)
84
+ let yinYangDun;
85
+ let juShu;
86
+ let yuan;
87
+ if (panType === '年盘') {
88
+ // 年盘:使用 PanTypeCalculator 计算
89
+ const yearPanResult = PanTypeCalculator_1.PanTypeCalculator.calculateYearPan({
90
+ yearGanZhi: siZhu.yearGanZhi,
91
+ currentJieQi: jieQi,
92
+ });
93
+ yinYangDun = yearPanResult.yinYangDun;
94
+ juShu = yearPanResult.juShu;
95
+ yuan = yearPanResult.yuan;
96
+ }
97
+ else if (panType === '月盘') {
98
+ // 月盘:使用 PanTypeCalculator 计算
99
+ const monthPanResult = PanTypeCalculator_1.PanTypeCalculator.calculateMonthPan({
100
+ monthGanZhi: siZhu.monthGanZhi,
101
+ });
102
+ yinYangDun = monthPanResult.yinYangDun;
103
+ juShu = monthPanResult.juShu;
104
+ yuan = monthPanResult.yuan;
105
+ }
106
+ else {
107
+ // 时盘/日盘:使用 JuShuCalculator 计算
108
+ const currentDate = new Date(input.year, input.month - 1, input.day);
109
+ const juShuResult = JuShuCalculator_1.JuShuCalculator.calculate(jieQi, siZhu.dayGanZhi, zhiRunMethod, jieQiDate, currentDate);
110
+ yinYangDun = juShuResult.yinYangDun;
111
+ juShu = juShuResult.juShu;
112
+ yuan = juShuResult.yuan;
113
+ }
114
+ // 3. 计算地盘(九宫布局)
115
+ const diPanResult = JiuGongCalculator_1.JiuGongCalculator.calculate(juShu, yinYangDun);
116
+ // 4. 确定用于计算的参考干支
117
+ const { refGanZhi, refZhi } = this.getRefGanZhi(panType, siZhu);
118
+ // 5. 计算天盘、九星、八门(根据盘式选择算法)
119
+ let tianPanResult;
120
+ let jiuXingResult;
121
+ let baMenResult;
122
+ // 5.1 先计算旬首信息(需要先用飞盘式计算初始天盘以获取ganGong)
123
+ const initialTianPan = SanQiLiuYiCalculator_1.SanQiLiuYiCalculator.calculate(diPanResult.ganGong, refGanZhi, yinYangDun);
124
+ const xunShouInfo = this.calculateXunShou(refGanZhi, diPanResult.ganGong, initialTianPan.ganGong, refZhi, yinYangDun);
125
+ // 5.2 根据盘式选择算法
126
+ // 参考干(甲用旬首仪)在地盘的落宫,为转盘/飞盘九星共用
127
+ const shiGanLuoGong = ZhuanPanCalculator_1.ZhuanPanCalculator.getShiGanLuoGong(diPanResult.ganGong, refGanZhi);
128
+ if (panStyle === '转盘') {
129
+ // 转盘式:使用 ZhuanPanCalculator
130
+ tianPanResult = ZhuanPanCalculator_1.ZhuanPanCalculator.calculateTianPan(diPanResult.ganGong, refGanZhi, yinYangDun);
131
+ jiuXingResult = ZhuanPanCalculator_1.ZhuanPanCalculator.calculateJiuXing(xunShouInfo.zhiFuGong, shiGanLuoGong, yinYangDun);
132
+ baMenResult = ZhuanPanCalculator_1.ZhuanPanCalculator.calculateBaMen(xunShouInfo.zhiFuGong, refGanZhi, yinYangDun);
133
+ }
134
+ else {
135
+ // 飞盘式:按宫位数字飞布
136
+ tianPanResult = SanQiLiuYiCalculator_1.SanQiLiuYiCalculator.calculate(diPanResult.ganGong, refGanZhi, yinYangDun);
137
+ jiuXingResult = JiuXingCalculator_1.JiuXingCalculator.calculate(xunShouInfo.zhiFuGong, shiGanLuoGong, yinYangDun);
138
+ baMenResult = BaMenCalculator_1.BaMenCalculator.calculate(xunShouInfo.zhiFuGong, refGanZhi, yinYangDun);
139
+ }
140
+ // 6. 计算八神(八神始终按固定顺序排布,不受盘式影响)
141
+ const baShenResult = BaShenCalculator_1.BaShenCalculator.calculate(jiuXingResult.zhiFuLuoGong, yinYangDun);
142
+ // 7. 组装九宫信息
143
+ const gongs = this.assembleGongs(diPanResult.gongGan, tianPanResult.gongGan, baMenResult.gongMen, jiuXingResult.gongXing, baShenResult.gongShen, xunShouInfo.kongWang, siZhu.dayZhi);
144
+ // 8. 计算日干/时干落宫
145
+ const dayGanGong = this.findGanGong(siZhu.dayGan, siZhu.dayGanZhi, tianPanResult.ganGong);
146
+ const hourGanGong = this.findGanGong(siZhu.hourGan, siZhu.hourGanZhi, tianPanResult.ganGong);
147
+ // 9. 计算格局(传入 panType 以过滤时辰相关格局)
148
+ const geJu = GeJuCalculator_1.GeJuCalculator.calculate(gongs, yinYangDun, siZhu.dayGan, panType === '时盘' ? siZhu.hourGan : null, panType === '时盘' ? siZhu.hourZhi : null, xunShouInfo, panType);
149
+ // 更新旬首信息中的值符值使落宫
150
+ const fullXunShouInfo = {
151
+ ...xunShouInfo,
152
+ zhiFuXing: jiuXingResult.zhiFuXing,
153
+ zhiFuLuoGong: jiuXingResult.zhiFuLuoGong,
154
+ zhiShiMen: baMenResult.zhiShiMen,
155
+ zhiShiLuoGong: baMenResult.zhiShiLuoGong,
156
+ };
157
+ return {
158
+ timeInfo: {
159
+ solarDate,
160
+ lunarDate,
161
+ siZhu,
162
+ jieQi,
163
+ },
164
+ panType,
165
+ panStyle,
166
+ zhiRunMethod,
167
+ yinYangDun,
168
+ juShu,
169
+ yuan,
170
+ xunShou: fullXunShouInfo,
171
+ gongs,
172
+ dayGanGong,
173
+ hourGanGong,
174
+ geJu,
175
+ };
176
+ }
177
+ /**
178
+ * 获取参考干支(根据盘类型)
179
+ */
180
+ getRefGanZhi(panType, siZhu) {
181
+ switch (panType) {
182
+ case '年盘':
183
+ return {
184
+ refGanZhi: siZhu.yearGanZhi,
185
+ refZhi: siZhu.yearGanZhi.charAt(1),
186
+ };
187
+ case '月盘':
188
+ return {
189
+ refGanZhi: siZhu.monthGanZhi,
190
+ refZhi: siZhu.monthGanZhi.charAt(1),
191
+ };
192
+ case '日盘':
193
+ return {
194
+ refGanZhi: siZhu.dayGanZhi,
195
+ refZhi: siZhu.dayZhi,
196
+ };
197
+ case '时盘':
198
+ default:
199
+ return {
200
+ refGanZhi: siZhu.hourGanZhi,
201
+ refZhi: siZhu.hourZhi,
202
+ };
203
+ }
204
+ }
205
+ /**
206
+ * 获取时间信息(四柱、节气)
207
+ */
208
+ getTimeInfo(input) {
209
+ let solar;
210
+ let lunar;
211
+ if (input.isLunar) {
212
+ // 农历转公历
213
+ lunar = lunar_javascript_1.Lunar.fromYmd(input.year, input.month, input.day);
214
+ solar = lunar.getSolar();
215
+ }
216
+ else {
217
+ // 公历
218
+ solar = lunar_javascript_1.Solar.fromYmd(input.year, input.month, input.day);
219
+ lunar = solar.getLunar();
220
+ }
221
+ // 使用 Solar 获取精确时辰信息
222
+ const hour = input.hour;
223
+ const solarWithTime = lunar_javascript_1.Solar.fromYmdHms(solar.getYear(), solar.getMonth(), solar.getDay(), hour, input.minute || 0, 0);
224
+ const lunarWithTime = solarWithTime.getLunar();
225
+ // 使用 EightChar 获取精确四柱
226
+ const eightChar = lunarWithTime.getEightChar();
227
+ const yearGanZhi = eightChar.getYear();
228
+ const monthGanZhi = eightChar.getMonth();
229
+ const dayGanZhi = eightChar.getDay();
230
+ const hourGanZhi = eightChar.getTime();
231
+ const siZhu = {
232
+ yearGanZhi,
233
+ monthGanZhi,
234
+ dayGanZhi,
235
+ hourGanZhi,
236
+ dayGan: dayGanZhi[0],
237
+ dayZhi: dayGanZhi[1],
238
+ hourGan: hourGanZhi[0],
239
+ hourZhi: hourGanZhi[1],
240
+ };
241
+ // 获取节气
242
+ const prevJieQi = lunarWithTime.getPrevJieQi();
243
+ const jieQi = prevJieQi ? prevJieQi.getName() : '冬至';
244
+ const jieQiSolar = prevJieQi ? prevJieQi.getSolar() : solar;
245
+ const jieQiDate = new Date(jieQiSolar.getYear(), jieQiSolar.getMonth() - 1, jieQiSolar.getDay());
246
+ // 格式化日期
247
+ const solarDate = `${solar.getYear()}年${solar.getMonth()}月${solar.getDay()}日`;
248
+ const lunarDate = `${lunar.getMonthInChinese()}月${lunar.getDayInChinese()}`;
249
+ return { siZhu, jieQi, jieQiDate, solarDate, lunarDate };
250
+ }
251
+ /**
252
+ * 计算旬首信息
253
+ */
254
+ calculateXunShou(refGanZhi, diPanGanGong, tianPanGanGong, refZhi, yinYangDun) {
255
+ // 获取旬首
256
+ const xunShou = (0, constants_1.getXunShou)(refGanZhi);
257
+ const fuTou = xunShou; // 符头就是旬首
258
+ // 获取旬首对应的六仪(遁甲干)
259
+ const liuYiGan = (0, constants_1.getLiuYiGan)(xunShou);
260
+ // 值符星原始宫位 = 旬首遁干在地盘的宫位
261
+ let zhiFuGong = diPanGanGong[liuYiGan];
262
+ if (zhiFuGong === 5) {
263
+ zhiFuGong = constants_1.ZHONG_GONG_JI; // 中宫寄坤二
264
+ }
265
+ // 值使门原始宫位 = 值符星原始宫位
266
+ const zhiShiGong = zhiFuGong;
267
+ // 获取空亡
268
+ const kongWang = (0, constants_1.getXunKong)(xunShou);
269
+ return {
270
+ xunShou,
271
+ fuTou,
272
+ zhiFuXing: '蓬', // 占位,后续由 JiuXingCalculator 计算
273
+ zhiFuGong,
274
+ zhiFuLuoGong: zhiFuGong, // 占位,后续更新
275
+ zhiShiMen: '休', // 占位,后续由 BaMenCalculator 计算
276
+ zhiShiGong,
277
+ zhiShiLuoGong: zhiShiGong, // 占位,后续更新
278
+ kongWang,
279
+ };
280
+ }
281
+ /**
282
+ * 组装九宫完整信息
283
+ */
284
+ assembleGongs(diPanGan, tianPanGan, gongMen, gongXing, gongShen, kongWang, dayZhi) {
285
+ const gongs = {};
286
+ // 获取马星地支
287
+ const maZhi = constants_1.MA_XING[dayZhi];
288
+ const maGong = constants_1.DI_ZHI_GONG[maZhi];
289
+ for (let g = 1; g <= 9; g++) {
290
+ const gong = g;
291
+ // 检查是否空亡(根据地支判断)
292
+ // 某些宫位对应两个地支,只要其中一个在空亡列表中即为空亡
293
+ const gongDiZhiList = this.getGongDiZhiList(gong);
294
+ const isKong = gongDiZhiList.some(dz => kongWang.includes(dz));
295
+ // 检查是否马星
296
+ const isMa = gong === maGong;
297
+ gongs[gong] = {
298
+ gong,
299
+ gongName: constants_1.GONG_NAMES[gong],
300
+ diPanGan: diPanGan[gong],
301
+ tianPanGan: tianPanGan[gong],
302
+ men: gongMen[gong],
303
+ xing: gongXing[gong],
304
+ shen: gongShen[gong],
305
+ wuXing: constants_1.GONG_WUXING[gong],
306
+ isKong,
307
+ isMa,
308
+ };
309
+ }
310
+ return gongs;
311
+ }
312
+ /**
313
+ * 获取宫位对应的所有地支
314
+ * 某些宫位对应两个地支(坤、巽、乾、艮),需要全部返回
315
+ */
316
+ getGongDiZhiList(gong) {
317
+ const gongDiZhiMap = {
318
+ 1: ['子'], // 坎宫
319
+ 2: ['未', '申'], // 坤宫
320
+ 3: ['卯'], // 震宫
321
+ 4: ['辰', '巳'], // 巽宫
322
+ 5: ['未', '申'], // 中宫寄坤二
323
+ 6: ['戌', '亥'], // 乾宫
324
+ 7: ['酉'], // 兑宫
325
+ 8: ['丑', '寅'], // 艮宫
326
+ 9: ['午'], // 离宫
327
+ };
328
+ return gongDiZhiMap[gong];
329
+ }
330
+ /**
331
+ * 根据天干找落宫
332
+ * 注意:甲遁于六仪之下,需要根据旬首找对应的六仪
333
+ *
334
+ * @param gan - 天干
335
+ * @param ganZhi - 干支(用于确定甲的旬首)
336
+ * @param ganGong - 天干落宫映射
337
+ */
338
+ findGanGong(gan, ganZhi, ganGong) {
339
+ let actualGan = gan;
340
+ // 甲遁于六仪之下,需要根据干支的旬首找对应的六仪
341
+ if (gan === '甲') {
342
+ const xunShou = (0, constants_1.getXunShou)(ganZhi);
343
+ actualGan = (0, constants_1.getLiuYiGan)(xunShou);
344
+ }
345
+ const gong = ganGong[actualGan];
346
+ if (gong === undefined) {
347
+ return constants_1.ZHONG_GONG_JI; // 默认返回坤二
348
+ }
349
+ return gong === 5 ? constants_1.ZHONG_GONG_JI : gong;
350
+ }
351
+ // ============= 用神系统 + 神煞 =============
352
+ /**
353
+ * 计算神煞信息
354
+ *
355
+ * 独立计算神煞,不影响基础排盘性能。
356
+ *
357
+ * @param result 奇门盘结果
358
+ * @returns 神煞信息列表
359
+ */
360
+ calculateShenSha(result) {
361
+ return ShenShaCalculator_1.ShenShaCalculator.calculateAll(result);
362
+ }
363
+ /**
364
+ * 带用神分析的高级排盘
365
+ *
366
+ * 在基础排盘基础上,增加用神分析、神煞计算和主客分析。
367
+ *
368
+ * @param input 排盘输入
369
+ * @param shiLei 事类
370
+ * @param options 可选配置
371
+ * @returns 扩展的奇门盘结果(含 yongShen 字段)
372
+ */
373
+ calculateWithYongShen(input, shiLei, options) {
374
+ // 基础排盘
375
+ const result = this.calculate(input);
376
+ // 用神分析
377
+ const yongShenInfo = YongShenCalculator_1.YongShenCalculator.analyze(result, shiLei, options?.nianGan);
378
+ // 附加用神信息到结果
379
+ result.yongShen = yongShenInfo;
380
+ // 可选:计算神煞并附加到各宫
381
+ if (options?.includeShenSha) {
382
+ const shenShaList = this.calculateShenSha(result);
383
+ const gongShenSha = ShenShaCalculator_1.ShenShaCalculator.distributeToGongs(shenShaList);
384
+ // 将神煞信息附加到各宫
385
+ for (const gong of [1, 2, 3, 4, 5, 6, 7, 8, 9]) {
386
+ result.gongs[gong].shenSha = gongShenSha[gong];
387
+ }
388
+ }
389
+ return result;
390
+ }
391
+ }
392
+ exports.QimenService = QimenService;
393
+ //# sourceMappingURL=QimenService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QimenService.js","sourceRoot":"","sources":["../../../src/services/qimen/QimenService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * 八门计算器(飞盘式)
3
+ * 计算八门在九宫中的飞布
4
+ */
5
+ import type { BaMen, GongWei, YinYangDun } from '../types';
6
+ export interface BaMenResult {
7
+ /** 各宫八门 (宫位 -> 门) */
8
+ gongMen: Record<GongWei, BaMen>;
9
+ /** 值使门 */
10
+ zhiShiMen: BaMen;
11
+ /** 值使门原始宫位 */
12
+ zhiShiGong: GongWei;
13
+ /** 值使门落宫 */
14
+ zhiShiLuoGong: GongWei;
15
+ }
16
+ /**
17
+ * 八门计算器(飞盘式)
18
+ * 负责计算八门的飞布
19
+ */
20
+ export declare class BaMenCalculator {
21
+ /**
22
+ * 计算飞盘式八门布局
23
+ * @param zhiFuGong 值符星原始宫位(旬首遁干在地盘的宫位,值使门原始宫与其相同)
24
+ * @param refGanZhi 参考干支(时盘为时干支,余类推)
25
+ * @param yinYangDun 阴阳遁
26
+ * @returns 八门布局
27
+ *
28
+ * 原理(飞盘式):
29
+ * 1. 值使门 = 值符星原始宫对应的门(中五宫寄坤二取死门)
30
+ * 2. 值使门落宫:从值符原始宫起,按参考干支的旬内序数(甲为0),
31
+ * 阳遁顺数宫位数字(1→2→…→9→1)、阴遁逆数;落中五宫寄坤二
32
+ * 3. 其余七门按八门原始序(休生伤杜景死惊开)自值使门起,
33
+ * 按宫位数字顺序飞布(跳过中五宫),阳遁顺飞、阴遁逆飞
34
+ */
35
+ static calculate(zhiFuGong: GongWei, refGanZhi: string, yinYangDun: YinYangDun): BaMenResult;
36
+ /**
37
+ * 根据宫位获取原始门
38
+ */
39
+ private static getMenByGong;
40
+ /**
41
+ * 根据宫位找门
42
+ */
43
+ static findMenByGong(gongMen: Record<GongWei, BaMen>, gong: GongWei): BaMen;
44
+ }
45
+ //# sourceMappingURL=BaMenCalculator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaMenCalculator.d.ts","sourceRoot":"","sources":["../../../../src/services/qimen/calculators/BaMenCalculator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAQ3D,MAAM,WAAW,WAAW;IAC1B,qBAAqB;IACrB,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAChC,UAAU;IACV,SAAS,EAAE,KAAK,CAAC;IACjB,cAAc;IACd,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY;IACZ,aAAa,EAAE,OAAO,CAAC;CACxB;AAED;;;GAGG;AACH,qBAAa,eAAe;IAC1B;;;;;;;;;;;;;OAaG;IACH,MAAM,CAAC,SAAS,CACd,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,UAAU,GACrB,WAAW;IA8Cd;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,YAAY;IAa3B;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,GAAG,KAAK;CAG5E"}
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ /**
3
+ * 八门计算器(飞盘式)
4
+ * 计算八门在九宫中的飞布
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.BaMenCalculator = void 0;
8
+ const constants_1 = require("../data/constants");
9
+ /**
10
+ * 八门计算器(飞盘式)
11
+ * 负责计算八门的飞布
12
+ */
13
+ class BaMenCalculator {
14
+ /**
15
+ * 计算飞盘式八门布局
16
+ * @param zhiFuGong 值符星原始宫位(旬首遁干在地盘的宫位,值使门原始宫与其相同)
17
+ * @param refGanZhi 参考干支(时盘为时干支,余类推)
18
+ * @param yinYangDun 阴阳遁
19
+ * @returns 八门布局
20
+ *
21
+ * 原理(飞盘式):
22
+ * 1. 值使门 = 值符星原始宫对应的门(中五宫寄坤二取死门)
23
+ * 2. 值使门落宫:从值符原始宫起,按参考干支的旬内序数(甲为0),
24
+ * 阳遁顺数宫位数字(1→2→…→9→1)、阴遁逆数;落中五宫寄坤二
25
+ * 3. 其余七门按八门原始序(休生伤杜景死惊开)自值使门起,
26
+ * 按宫位数字顺序飞布(跳过中五宫),阳遁顺飞、阴遁逆飞
27
+ */
28
+ static calculate(zhiFuGong, refGanZhi, yinYangDun) {
29
+ const isYang = yinYangDun === '阳遁';
30
+ // 1. 确定值使门(值符原始宫对应的门)
31
+ const zhiShiMen = this.getMenByGong(zhiFuGong);
32
+ const zhiShiGong = constants_1.BA_MEN_GONG[zhiShiMen];
33
+ // 2. 旬内序数:甲为0,乙为1,……癸为9
34
+ const idx = constants_1.JIA_ZI_60.indexOf(refGanZhi);
35
+ if (idx === -1) {
36
+ throw new Error(`无效的干支: ${refGanZhi}`);
37
+ }
38
+ const steps = idx % 10;
39
+ // 3. 值使门落宫(宫位数字顺逆数,落中五寄坤二)
40
+ const anchor = zhiShiGong === 5 ? constants_1.ZHONG_GONG_JI : zhiShiGong;
41
+ let luoGong = (((anchor - 1 + (isYang ? steps : -steps)) % 9) + 9) % 9 + 1;
42
+ if (luoGong === 5) {
43
+ luoGong = constants_1.ZHONG_GONG_JI;
44
+ }
45
+ // 4. 飞布序列:自值使门起,按八门原始序循环;飞宫序列跳过中五
46
+ const zhiShiIdx = constants_1.BA_MEN_ORDER.indexOf(zhiShiMen);
47
+ const flyOrder = constants_1.BA_MEN_ORDER.slice(zhiShiIdx).concat(constants_1.BA_MEN_ORDER.slice(0, zhiShiIdx));
48
+ const FLY_PALACES = [1, 2, 3, 4, 6, 7, 8, 9];
49
+ const startIdx = FLY_PALACES.indexOf(luoGong);
50
+ const gongMen = {};
51
+ for (let i = 0; i < 8; i++) {
52
+ const gongIdx = isYang
53
+ ? (startIdx + i) % 8
54
+ : ((startIdx - i) % 8 + 8) % 8;
55
+ gongMen[FLY_PALACES[gongIdx]] = flyOrder[i];
56
+ }
57
+ // 中宫寄坤二,使用坤二的门
58
+ gongMen[5] = gongMen[constants_1.ZHONG_GONG_JI];
59
+ return {
60
+ gongMen,
61
+ zhiShiMen,
62
+ zhiShiGong,
63
+ zhiShiLuoGong: luoGong,
64
+ };
65
+ }
66
+ /**
67
+ * 根据宫位获取原始门
68
+ */
69
+ static getMenByGong(gong) {
70
+ // 中宫无门,寄坤二
71
+ const actualGong = gong === 5 ? constants_1.ZHONG_GONG_JI : gong;
72
+ for (const [men, menGong] of Object.entries(constants_1.BA_MEN_GONG)) {
73
+ if (menGong === actualGong) {
74
+ return men;
75
+ }
76
+ }
77
+ return '死'; // 坤二宫默认死门
78
+ }
79
+ /**
80
+ * 根据宫位找门
81
+ */
82
+ static findMenByGong(gongMen, gong) {
83
+ return gongMen[gong === 5 ? constants_1.ZHONG_GONG_JI : gong];
84
+ }
85
+ }
86
+ exports.BaMenCalculator = BaMenCalculator;
87
+ //# sourceMappingURL=BaMenCalculator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaMenCalculator.js","sourceRoot":"","sources":["../../../../src/services/qimen/calculators/BaMenCalculator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * 八神计算器
3
+ * 计算八神在九宫中的分布
4
+ */
5
+ import type { BaShen, GongWei, YinYangDun } from '../types';
6
+ export interface BaShenResult {
7
+ /** 各宫八神 (宫位 -> 神) */
8
+ gongShen: Record<GongWei, BaShen>;
9
+ }
10
+ /**
11
+ * 八神计算器
12
+ * 负责计算八神的排布
13
+ */
14
+ export declare class BaShenCalculator {
15
+ /**
16
+ * 计算八神布局
17
+ * @param zhiFuLuoGong 值符星落宫
18
+ * @param yinYangDun 阴阳遁
19
+ * @returns 八神布局
20
+ *
21
+ * 原理:
22
+ * 1. 值符神(第一神)永远临值符星落宫
23
+ * 2. 阳遁:八神按洛书顺序顺布
24
+ * 3. 阴遁:八神按洛书顺序逆布
25
+ *
26
+ * 八神顺序:值符-腾蛇-太阴-六合-白虎-玄武-九地-九天
27
+ */
28
+ static calculate(zhiFuLuoGong: GongWei, yinYangDun: YinYangDun): BaShenResult;
29
+ /**
30
+ * 根据宫位找神
31
+ */
32
+ static findShenByGong(gongShen: Record<GongWei, BaShen>, gong: GongWei): BaShen;
33
+ }
34
+ //# sourceMappingURL=BaShenCalculator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaShenCalculator.d.ts","sourceRoot":"","sources":["../../../../src/services/qimen/calculators/BaShenCalculator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAS5D,MAAM,WAAW,YAAY;IAC3B,qBAAqB;IACrB,QAAQ,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;CACnC;AAED;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,SAAS,CACd,YAAY,EAAE,OAAO,EACrB,UAAU,EAAE,UAAU,GACrB,YAAY;IA8Bf;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM;CAGhF"}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ /**
3
+ * 八神计算器
4
+ * 计算八神在九宫中的分布
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.BaShenCalculator = void 0;
8
+ const constants_1 = require("../data/constants");
9
+ /**
10
+ * 八神计算器
11
+ * 负责计算八神的排布
12
+ */
13
+ class BaShenCalculator {
14
+ /**
15
+ * 计算八神布局
16
+ * @param zhiFuLuoGong 值符星落宫
17
+ * @param yinYangDun 阴阳遁
18
+ * @returns 八神布局
19
+ *
20
+ * 原理:
21
+ * 1. 值符神(第一神)永远临值符星落宫
22
+ * 2. 阳遁:八神按洛书顺序顺布
23
+ * 3. 阴遁:八神按洛书顺序逆布
24
+ *
25
+ * 八神顺序:值符-腾蛇-太阴-六合-白虎-玄武-九地-九天
26
+ */
27
+ static calculate(zhiFuLuoGong, yinYangDun) {
28
+ const isYang = yinYangDun === '阳遁';
29
+ const gongShen = {};
30
+ // 值符神落宫
31
+ let startGong = zhiFuLuoGong;
32
+ if (startGong === 5) {
33
+ startGong = constants_1.ZHONG_GONG_JI; // 中宫寄坤二
34
+ }
35
+ const startIdx = (0, constants_1.getLuoShuIndex)(startGong);
36
+ // 依次排列八神
37
+ for (let i = 0; i < 8; i++) {
38
+ const shen = constants_1.BA_SHEN_ORDER[i];
39
+ const gongIdx = isYang
40
+ ? (startIdx + i) % 8
41
+ : ((startIdx - i) % 8 + 8) % 8;
42
+ const gong = (0, constants_1.getLuoShuGong)(gongIdx);
43
+ gongShen[gong] = shen;
44
+ }
45
+ // 中宫寄坤二,使用坤二的神
46
+ gongShen[5] = gongShen[constants_1.ZHONG_GONG_JI];
47
+ return { gongShen };
48
+ }
49
+ /**
50
+ * 根据宫位找神
51
+ */
52
+ static findShenByGong(gongShen, gong) {
53
+ return gongShen[gong === 5 ? constants_1.ZHONG_GONG_JI : gong];
54
+ }
55
+ }
56
+ exports.BaShenCalculator = BaShenCalculator;
57
+ //# sourceMappingURL=BaShenCalculator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaShenCalculator.js","sourceRoot":"","sources":["../../../../src/services/qimen/calculators/BaShenCalculator.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAGH,iDAM2B;AAO3B;;;GAGG;AACH,MAAa,gBAAgB;IAC3B;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,SAAS,CACd,YAAqB,EACrB,UAAsB;QAEtB,MAAM,MAAM,GAAG,UAAU,KAAK,IAAI,CAAC;QACnC,MAAM,QAAQ,GAA4B,EAA6B,CAAC;QAExE,QAAQ;QACR,IAAI,SAAS,GAAG,YAAY,CAAC;QAC7B,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;YACpB,SAAS,GAAG,yBAAa,CAAC,CAAC,QAAQ;QACrC,CAAC;QAED,MAAM,QAAQ,GAAG,IAAA,0BAAc,EAAC,SAAS,CAAC,CAAC;QAE3C,SAAS;QACT,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,IAAI,GAAG,yBAAa,CAAC,CAAC,CAAC,CAAC;YAE9B,MAAM,OAAO,GAAG,MAAM;gBACpB,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC;gBACpB,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YAEjC,MAAM,IAAI,GAAG,IAAA,yBAAa,EAAC,OAAO,CAAC,CAAC;YACpC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QACxB,CAAC;QAED,eAAe;QACf,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,yBAAa,CAAC,CAAC;QAEtC,OAAO,EAAE,QAAQ,EAAE,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,QAAiC,EAAE,IAAa;QACpE,OAAO,QAAQ,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,yBAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACrD,CAAC;CACF;AArDD,4CAqDC"}