dsh-metaphysics 0.62.0 → 0.62.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -2
- package/client.almanac.js +14 -14
- package/client.bazi.js +36 -36
- package/client.chenggu.js +1 -1
- package/client.convert.js +16 -16
- package/client.daliuren.js +22 -22
- package/client.fengshui.js +26 -26
- package/client.hepan.js +1 -1
- package/client.js +1 -1
- package/client.liuyao.js +36 -36
- package/client.mbti.js +22 -22
- package/client.name.js +35 -35
- package/client.numerology.js +42 -42
- package/client.qimen.js +90 -90
- package/client.star.js +24 -24
- package/client.tarot.js +28 -28
- package/client.trend.js +30 -30
- package/client.xiaoliuren.js +7 -7
- package/client.zeri.js +7 -7
- package/client.ziwei.js +1 -1
- package/engine/fengshui.js +6 -2
- package/engine/index.js +6 -0
- package/engine/mbti.js +1 -0
- package/engine/name.js +3 -0
- package/engine/numerology.js +3 -3
- package/engine/qimen.js +9 -1
- package/engine/star.js +3 -3
- package/engine/trend.js +3 -0
- package/package.json +1 -1
- package//345/221/275/347/220/206/346/216/222/347/233/230.html +37 -12
package/client.hepan.js
CHANGED
|
@@ -150,7 +150,7 @@ ${i.summary}`);const v=Zn(a.detail);if(a.withInterpret&&(i.interpret=X(i,{questi
|
|
|
150
150
|
规则·${ie.gist}〔${ie.statusLabel}〕${ie.detail} 出处:${ie.source}${ie.note?` 注:${ie.note}`:""}`).join("");v.push(`${de.label}:${le}${de.text}${de.advice?` 建议:${de.advice}`:""}${Y}${j}`)}const se=e.sections||[],Ke=l?se.filter(de=>String(de.text||"").length>i):[];for(const de of se)l&&String(de.text||"").length>i||v.push(`${de.label}:${de.text}`);Ke.length&&v.push(`(另有 ${Ke.length} 节长论述未展开:${Ke.map(de=>de.label).join("、")}。需要原文与出处时传 detail:"full")`);for(const de of e.tables||[])!Array.isArray(de.rows)||!de.rows.length||(v.push(`【${de.title}】`),v.push([de.columns.join(" | "),...de.rows.map(Y=>Y.join(" | "))].join(`
|
|
151
151
|
`)));return Array.isArray(e.followups)&&e.followups.length&&v.push("还可以这样追问:"+e.followups.map(de=>`「${de}」`).join(" ")),Array.isArray(e.glossary)&&e.glossary.length&&v.push("名词解释:"+e.glossary.map(de=>`${de.term}=${de.plain}`).join(" ")),Array.isArray(e.limits)&&e.limits.length&&v.push("【本插件不回答什么】"+e.limits.map(de=>`${de.title}——${de.text}`).join(`
|
|
152
152
|
`)),e.disclaimer&&v.push(e.disclaimer),v.join(`
|
|
153
|
-
`)}const Hn=["cross","verifyPast","withInterpret","detail","question","direction","ask","geocode","rectify","events","shadow","trace"];function Cn(e={},a={}){const l=a.system||e.system,i=a.switches||Gn[l]||[];if(!i.length)return{system:l,switches:[],affected:0,total:0};const v={...e};for(const W of Hn)delete v[W];const p=i.map(W=>{const se=W.read(v),Ke=W.alt(se);let de=[],Y="",le=null,j=null;try{le=Tn({...v,[W.key]:se}),j=Tn({...v,[W.key]:Ke}),de=ne(le,j)}catch(cn){Y=cn&&cn.message||String(cn)}const ie=Xe(de.filter(cn=>Mn(cn.path))).map(cn=>({path:cn.path,label:Rn(cn.path),from:gn(cn.from),to:gn(cn.to)})),Ie=new Map;for(const cn of de){const fn=Wn(cn.path)||"其他";Ie.set(fn,(Ie.get(fn)||0)+1)}const pn=[...Ie.entries()].map(([cn,fn])=>({name:cn,count:fn})).sort((cn,fn)=>fn.count-cn.count||cn.name.localeCompare(fn.name,"zh-Hans-CN"));return{key:W.key,title:W.title,short:W.short,current:se,alt:Ke,currentLabel:W.label(se),altLabel:W.label(Ke),total:de.length,summary:Y?"":xe(de),views:Y?[]:Yn(l,le,j),roots:ie,categories:pn,error:Y}});return{system:l,switches:p,affected:p.filter(W=>!W.error&&W.total>0).length,total:p.reduce((W,se)=>W+se.total,0)}}const Pe=["chaibu","chaoshen","zhirun"],rn=[1,3,5],zn=["same-day","next-day"];function Nn(e,a=""){if(e==null||e==="")return;const l=a?`${a}的`:"";let i;if(typeof e=="number")i=e;else if(typeof e=="string"){const v=e.trim();if(!/^[+-]?(\d+(\.\d*)?|\.\d+)$/.test(v))throw G("E_RANGE",`${l}经度不是十进制数字:收到「${e}」。经度写数字即可,例如北京 116.4`);i=Number(v)}else throw G("E_RANGE",`${l}经度必须是数字或数字字符串,收到 ${Array.isArray(e)?"array":typeof e}`);if(!Number.isFinite(i))throw G("E_RANGE",`${l}经度不是有限数值:收到「${e}」。经度写十进制数字即可,例如北京 116.4`);if(i<-180||i>180)throw G("E_RANGE",`${l}经度要在 −180 到 180 之间(东经为正),收到 ${i}`);return i}function On(e){const a=Nn(e.longitude,""),l=e.partner&&typeof e.partner=="object"?Nn(e.partner.longitude,"对方"):void 0,i=e.partner2&&typeof e.partner2=="object"?Nn(e.partner2.longitude,"第三方"):void 0;if(!(a!==void 0&&e.longitude!==a||l!==void 0&&e.partner.longitude!==l||i!==void 0&&e.partner2.longitude!==i))return e;const p={...e};return a!==void 0&&(p.longitude=a),l!==void 0&&(p.partner={...p.partner,longitude:l}),i!==void 0&&(p.partner2={...p.partner2,longitude:i}),p}function Zn(e){if(e==null||e===""||e==="full")return"full";if(e==="lean")return"lean";throw G("E_INPUT",`detail 只能是 'full' 或 'lean':收到「${String(e).slice(0,24)}」`)}function Dn(e){if(e==null||typeof e=="string"&&!e.trim())return;const a=S(e);if(!a)throw G("E_ASOF",`无法解析 asOf:「${e}」,请用 2026-10-22T16:00 这种格式`);const{year:l,month:i,day:v,hour:p,minute:W}=a;if(!(i>=1&&i<=12)||!(v>=1&&v<=Oe(l,i)))throw G("E_ASOF",`asOf 指向的日期不存在:${e}`);if(p!==void 0&&!(p>=0&&p<=23))throw G("E_ASOF",`asOf 的小时要在 0–23 之间:${e}`);if(W!==void 0&&!(W>=0&&W<=59))throw G("E_ASOF",`asOf 的分钟要在 0–59 之间:${e}`);return a}function Xn(e={}){const a=e.system;if(e.mode!==void 0&&e.mode!==null&&e.mode!==""){const l={convert:["solar2lunar","lunar2solar"],meihua:["time","number"],xiaoliuren:["time","number"]},i=l[a];if(!i)throw G("E_INPUT",`mode 只用于 ${Object.keys(l).join(" / ")};${a||"当前体系"} 不收 mode`);if(!i.includes(e.mode))throw G("E_INPUT",`${a} 的 mode 只能是 ${i.join(" / ")},收到「${String(e.mode).slice(0,24)}」`)}if(e.fortuneYear!==void 0&&e.fortuneYear!==null&&e.fortuneYear!==""){const l=Number(e.fortuneYear);if(!Number.isInteger(l))throw G("E_INPUT",`fortuneYear 要是整数年份,收到「${e.fortuneYear}」`);e={...e,fortuneYear:l}}if(a==="bazi"){const l=C(e.datetime),i=Dn(e.asOf),v=H({...l,gender:Z(e.gender),longitude:typeof e.longitude=="number"?e.longitude:void 0,address:typeof e.address=="string"?e.address:void 0,geo:e.geo&&typeof e.geo=="object"?e.geo:void 0,lateZi:e.lateZi!==!1,trueSolar:e.trueSolar!==!1,dst:e.dst!==!1,nowYear:i?i.year:void 0,hourUnknown:e.hourUnknown===!0});return{...v,...i?{asOf:i}:{},precision:l.precision,summary:Le(v)}}if(a==="ziwei"){if(e.hourUnknown===!0)throw G("HOUR_UNKNOWN","紫微必须有出生时刻:命宫由生月与生时支定,时支未知则整盘不成立。请补上出生时刻,或改用八字三柱模式只看年/月/日。");e.lateZi!==void 0&&e.lateZishi===void 0&&(e={...e,lateZishi:e.lateZi===!1?"current-day":"next-day"});const l=C(e.datetime),i=Dn(e.asOf),v=b({...l,gender:Z(e.gender),leapMonth:e.leapMonth,leapAsNext:e.leapAsNext===!0,...F(e),longitude:typeof e.longitude=="number"?e.longitude:void 0,address:typeof e.address=="string"?e.address:void 0,geo:e.geo&&typeof e.geo=="object"?e.geo:void 0,trueSolar:e.trueSolar,dst:e.dst!==!1,asOf:i});return{...v,...i?{asOf:i}:{},precision:l.precision,summary:ye(v)}}if(a==="tarot"){const l=e.count===void 0||e.count===null||e.count===""?3:Number(e.count);if(!rn.includes(l))throw G("E_COUNT",`塔罗张数只能是 1 / 3 / 5,收到「${e.count}」`);if(!$e(e.seed))throw G("E_INPUT",`seed 必须是数字,收到「${e.seed}」`);const i=Dn(e.asOf),v=E({count:l,question:e.question,at:e.asOf,random:ue(e.seed)});return e.seed!==void 0&&e.seed!==null&&e.seed!==""&&(v.seed=Number(e.seed)),{...v,...i?{asOf:i}:{},summary:Ce(v)}}if(a==="daliuren"){const l=C(e.datetime),i=e.lateZi!==!1,v=ee({...l,lateZi:i});return v.lateZi=i,{...v,precision:l.precision,summary:hn(v)}}if(a==="qimen"){const l=C(e.datetime);if(e.juMethod!==void 0&&!Pe.includes(e.juMethod))throw G("E_INPUT",`juMethod 只能是 chaibu / chaoshen / zhirun,收到「${e.juMethod}」`);const i=e.lateZiHourMode!==void 0?e.lateZiHourMode:e.lateZi===!0?"next-day":e.lateZi===!1?"same-day":void 0;if(i!==void 0&&!zn.includes(i))throw G("E_INPUT",`lateZiHourMode 只能是 same-day / next-day,收到「${i}」`);const v=i==="next-day"?"next-day":"same-day",p=r({...l,lateZiHourMode:v,juMethod:e.juMethod});return p.lateZiHourMode=v,{...p,summary:T(p)}}if(a==="hepan"){if(e.hourUnknown===!0||e.partner&&e.partner.hourUnknown===!0)throw G("HOUR_UNKNOWN","合盘需要双方都有出生时刻:夫妻宫与大运都依赖时支。请补齐时刻后再看,或用八字三柱模式各自看年/月/日。");const l=e.partner;if(!l||typeof l!="object")throw G("E_PARTNER","合盘需要 partner:{ datetime, gender, address? },其中 partner.datetime 是对方的公历出生时间");if(!l.datetime)throw G("E_PARTNER",'缺少 partner.datetime(对方的公历出生时间),例如 partner: {"datetime":"1992-03-03T10:00","gender":"female"}');const i=e.partner2;if(i!=null){if(typeof i!="object"||Array.isArray(i))throw G("E_PARTNER","partner2 需要 { datetime, gender, address? };不想看三方就整段省略(null 视同未传)");if(!i.datetime)throw G("E_PARTNER",'缺少 partner2.datetime(第三方的公历出生时间),例如 partner2: {"datetime":"1988-09-09T08:00","gender":"male"}')}const v=e.chart==="ziwei"?"ziwei":"bazi",p=(Y,le)=>({...C(Y.datetime),gender:Z(Y.gender,le),trueSolar:Y.trueSolar,lateZi:Y.lateZi,dst:Y.dst!==!1,address:typeof Y.address=="string"?Y.address:void 0,longitude:typeof Y.longitude=="number"?Y.longitude:void 0,geo:Y.geo&&typeof Y.geo=="object"?Y.geo:void 0}),W=p(e,"你(主方)"),se=p(l,"对方"),Ke=(Y,le)=>v==="ziwei"?t({a:Y,b:le}):f({a:Y,b:le}),de=Ke(W,se);if(i){const Y=p(i,"第三方");de.triple=c([{key:"a-b",a:"你",b:"对方",result:de},{key:"a-c",a:"你",b:"第三方",result:Ke(W,Y)},{key:"b-c",a:"对方",b:"第三方",result:Ke(se,Y)}])}return{...de,summary:ke(de)}}if(a==="meihua"){let l;e.mode!=="number"&&C(e.datetime);try{l=V({mode:e.mode==="number"?"number":"time",datetime:e.datetime,upper:e.upper,lower:e.lower,changing:e.changing,lateZi:e.lateZi})}catch(i){const v=i&&i.message||String(i);throw G(i&&i.code||"E_INPUT",i&&i.code?v:`梅花起卦参数不完整:${v}`)}return{...l,summary:he(l)}}if(a==="liuyao"){if(!$e(e.seed))throw G("E_INPUT",`seed 必须是数字,收到「${e.seed}」`);let l;if(e.lines===void 0||e.lines===null)l=pe(ue(e.seed));else{if(!Array.isArray(e.lines))throw G("E_LINES","lines 必须是数组:自下而上 6 个爻值(6 老阴 / 7 少阳 / 8 少阴 / 9 老阳)");if(e.lines.length!==6)throw G("E_LINES",`六爻需要正好 6 个爻值(自下而上),收到 ${e.lines.length} 个;留空则由引擎随机摇卦`);l=e.lines.map(Number)}let i,v=null;const p=e.datetime?C(e.datetime):Dn(e.asOf);if(p){e.datetime||(v=p);const le=g(O($(p.year,p.month,p.day)));i={stem:le.stem,branch:le.branch,name:le.name}}let W;try{W=A({lines:l,question:e.question,dayGanZhi:i})}catch(le){throw G(le&&le.code||"E_LINES",le&&le.message?le.message:le)}const se=fe(W,{direction:e.direction,gender:e.gender});se.liuqin&&(W.useGod=se);let Ke=null;if(p)try{Ke=(n({year:p.year,month:p.month,day:p.day,hour:p.hour,minute:p.minute}).monthGanZhi||"")[1]||null}catch{Ke=null}const de=o(W,{monthBranch:Ke,dayBranch:W.dayGanZhi.branch});de&&(W.hexStrength=de);const Y=q(W,{monthBranch:Ke,dayBranch:W.dayGanZhi.branch});if(Y&&(W.jinTuiPower=Y),se.liuqin){const le=U(W,se,{monthBranch:Ke,dayBranch:W.dayGanZhi.branch});le&&(W.useGodStrength=le);const j=K(W,se,{monthBranch:Ke,dayBranch:W.dayGanZhi.branch});j&&(W.fushenAccess=j);const ie=_(W,se,{monthBranch:Ke});ie&&(W.yingqi=ie)}return e.seed!==void 0&&e.seed!==null&&e.seed!==""&&(W.seed=Number(e.seed)),{...W,...v?{asOf:v}:{},summary:tn(W)}}if(a==="almanac"){const l=C(e.datetime),i=We({year:l.year,month:l.month,day:l.day});return{...i,summary:Qn(i)}}if(a==="zeri"){if(!(e.candidates!==void 0&&e.candidates!==null)&&(typeof e.startDate!="string"||!e.startDate.trim()))throw G("E_INPUT",'择日需要 startDate(公历 YYYY-MM-DD,起算日);可另给 days(1–60,默认 30)与 shengXiao(当事人属相)。只想比几天,改给 candidates: ["2026-12-01","2026-12-08"]');let i;try{i=Ge({task:e.task,startDate:e.startDate,days:e.days,shengXiao:e.shengXiao,candidates:e.candidates})}catch(v){throw G(v&&v.code||"E_INPUT",v&&v.message||String(v))}return{...i,summary:et(i)}}if(a==="chenggu"){const l=C(e.datetime),i=/[T\s]\d{1,2}:\d{1,2}/.test(String(e.datetime)),v=Number.isInteger(e.hour)?e.hour:i?l.hour:null;if(v===null||v<0||v>23)throw G("E_INPUT","称骨必须给时辰:datetime 带时分(如 1990-08-15T10:00),或额外给 hour(0–23)——缺时辰四柱不齐");const p=Fe({year:l.year,month:l.month,day:l.day,hour:v,minute:i?l.minute:0,lateZi:e.lateZi});return{...p,summary:wn(p)}}if(a==="convert"){const l=e.mode==="lunar2solar"?"lunar2solar":"solar2lunar";let i;if(l==="lunar2solar"){if(e.lunarYear==null||e.lunarMonth==null||e.lunarDay==null)throw G("E_INPUT","农历转公历需要 lunarYear / lunarMonth / lunarDay(闰月另加 isLeapMonth: true)");i=ce({mode:l,lunarYear:Number(e.lunarYear),lunarMonth:Number(e.lunarMonth),lunarDay:Number(e.lunarDay),isLeapMonth:e.isLeapMonth===!0})}else{const v=C(e.datetime);i=ce({mode:l,year:v.year,month:v.month,day:v.day})}return{...i,summary:Ee(i)}}if(a==="xiaoliuren"){const l=e.datetime?C(e.datetime):null,i=Qe({mode:e.mode==="number"?"number":"time",date:typeof e.date=="string"&&e.date.trim()?e.date:l?`${l.year}-${l.month}-${l.day}`:void 0,hour:Number.isInteger(e.hour)?e.hour:l&&/[T\s]\d{1,2}:\d{1,2}/.test(String(e.datetime))?l.hour:void 0,num1:e.num1,num2:e.num2,num3:e.num3,question:e.question,lateZi:e.lateZi});return{...i,summary:Vn(i)}}if(a==="star"){const l=C(e.datetime),i=De({year:l.year,month:l.month,day:l.day});return{...i,summary:te(i)}}if(a==="numerology"){const l=C(e.datetime),i=He({year:l.year,month:l.month,day:l.day});return{...i,summary:dn(i)}}if(a==="mbti"){if(e.answers===void 0||e.answers===null){const i=Je();return{...i,summary:In(i)}}const l=Ze({answers:e.answers});return{...l,summary:En(l)}}if(a==="trend"){const l=C(e.datetime),i=e.asOf?Dn(e.asOf):void 0,v=rt({...l,nowYear:i?i.year:void 0,gender:Z(e.gender),toAge:e.toAge,lateZi:e.lateZi!==!1,trueSolar:e.trueSolar!==!1,dst:e.dst!==!1,longitude:typeof e.longitude=="number"?e.longitude:void 0,address:typeof e.address=="string"?e.address:void 0,geo:e.geo&&typeof e.geo=="object"?e.geo:void 0,hourUnknown:e.hourUnknown===!0});return{...v,...e.hourUnknown===!0?{hourUnknown:!0,hourPrecision:"day"}:{},precision:l.precision,summary:jn(v)}}if(a==="fengshui"){const l=e.action==="advise"?"advise":e.action==="xuankong"?"xuankong":"natal";if(l==="xuankong"){const p=nt({action:l,sitting:e.sitting,facing:e.facing,...e.period!==void 0?{period:e.period}:{},...e.fortuneYear!==void 0?{fortuneYear:e.fortuneYear}:{},...typeof e.sittingOffset=="number"?{sittingOffset:e.sittingOffset}:{},...typeof e.sittingDegree=="number"?{sittingDegree:e.sittingDegree}:{},...typeof e.facingOffset=="number"?{facingOffset:e.facingOffset}:{},...typeof e.facingDegree=="number"?{facingDegree:e.facingDegree}:{},...typeof e.fortuneDate=="string"?{fortuneDate:e.fortuneDate}:{},...typeof e.fortuneTime=="string"?{fortuneTime:e.fortuneTime}:{},dst:e.dst!==!1});return{...p,summary:Pn(p)}}if(l==="advise"){const p=nt({action:l,sitting:e.sitting,facing:e.facing,...e.datetime?C(e.datetime):{},...e.gender==="male"||e.gender==="female"?{gender:e.gender}:{},dst:e.dst!==!1});return{...p,summary:Pn(p)}}const i=C(e.datetime),v=nt({action:"natal",year:i.year,month:i.month,day:i.day,gender:Z(e.gender),fortuneYear:e.fortuneYear,dst:e.dst!==!1});return{...v,summary:Pn(v)}}if(a==="name"){const l=e.action==="generate"?"generate":"assess",i=e.datetime?C(e.datetime):Number.isInteger(e.year)&&Number.isInteger(e.month)&&Number.isInteger(e.day)?{year:e.year,month:e.month,day:e.day,...Number.isInteger(e.hour)?{hour:e.hour}:{},...Number.isInteger(e.minute)?{minute:e.minute}:{}}:{},v=ot({action:l,surname:e.surname,givenName:e.givenName,limit:e.limit,charElements:e.charElements&&typeof e.charElements=="object"?e.charElements:void 0,strokeOverrides:e.strokeOverrides&&typeof e.strokeOverrides=="object"?e.strokeOverrides:void 0,surnameStrokes:e.surnameStrokes&&typeof e.surnameStrokes=="object"?e.surnameStrokes:void 0,...i,...e.gender==="male"||e.gender==="female"?{gender:e.gender}:{},...e.datetime?{lateZi:e.lateZi!==!1,trueSolar:e.trueSolar!==!1,dst:e.dst!==!1,longitude:typeof e.longitude=="number"?e.longitude:void 0,address:typeof e.address=="string"?e.address:void 0,geo:e.geo&&typeof e.geo=="object"?e.geo:void 0}:{}});return{...v,summary:Bn(v)}}throw a?G("E_SYSTEM",`未知体系「${a}」,可选:bazi(四柱八字)、ziwei(紫微斗数)、liuyao(六爻)、meihua(梅花易数)、daliuren(大六壬)、qimen(奇门遁甲)、hepan(合盘)、tarot(塔罗)、almanac(黄历)、zeri(择日)、chenggu(称骨)、xiaoliuren(小六壬)、star(星座)、numerology(生命数字)、mbti(十六型人格问卷)、trend(人生 K 线)、fengshui(风水)、name(起名)、convert(公农历互转)。`):G("E_INPUT","缺少 system,可选:bazi(四柱八字)、ziwei(紫微斗数)、liuyao(六爻)、meihua(梅花易数)、daliuren(大六壬)、qimen(奇门遁甲)、hepan(合盘)、tarot(塔罗)、almanac(黄历)、zeri(择日)、chenggu(称骨)、xiaoliuren(小六壬)、star(星座)、numerology(生命数字)、mbti(十六型人格问卷)、trend(人生 K 线)、fengshui(风水)、name(起名)、convert(公农历互转)。")}function Qn(e){const a=e.ganzhi,l=e.jieQi&&e.jieQi.next?` 下一节:${e.jieQi.next.name} ${e.jieQi.next.date}`:"",i=e.dayGod?`值日:${e.dayGod.name}(${e.dayGod.type}·${e.dayGod.luck})`:"",v=e.xiu?`二十八宿:${e.xiu.name}宿(${e.xiu.luck}·${e.xiu.zheng}·${e.xiu.animal})`:"",p=e.taiShen?`胎神:${e.taiShen}`:"",W=e.positions?`吉神方位:喜神${e.positions.xiShen||"—"} 财神${e.positions.caiShen||"—"} 福神${e.positions.fuShen?e.positions.fuShen.dir:"—"} 阳贵${e.positions.yangGui?e.positions.yangGui.dir:"—"} 阴贵${e.positions.yinGui?e.positions.yinGui.dir:"—"}`:"",se=e.lucky?`吉配生肖:六合${e.lucky.liuhe||"—"} 三合${(e.lucky.sanhe||[]).join("、")||"—"}`:"",Ke=e.nayin&&e.nayin.day?`日柱纳音:${e.nayin.day.name}`:"",de=(e.hours||[]).map(Y=>`${Y.zhi}${Y.ganZhi.slice(0,1)}·${Y.shen}${Y.luck==="吉"?"吉":"凶"}`).join(" ");return[`【黄历】${e.meta.date} ${e.meta.weekday} ${e.lunar.text}`,`干支:${a.year}年 ${a.month}月 ${a.day}日 属${a.shengXiao}`,...e.meta.boundaryNote?[` ${e.meta.boundaryNote}`]:[],`建除:${e.zhiXing}日 冲:${e.chong.text}${e.chong.sha?`(${e.chong.sha})`:""} ${i}`,[v,Ke,p].filter(Boolean).join(" "),`宜:${e.yi.join("、")}`,`忌:${e.ji.join("、")}`,W,se,de?`时辰吉凶:${de}`:"",`节气:上一节 ${e.jieQi.prev?`${e.jieQi.prev.name} ${e.jieQi.prev.date}`:"—"}${l}`,e.dailyHexagram?`每日一卦:${e.dailyHexagram.name} ${e.dailyHexagram.meaning||""}`:"",`口径:${e.meta.scope}`].filter(Boolean).join(`
|
|
153
|
+
`)}const Hn=["cross","verifyPast","withInterpret","detail","question","direction","ask","geocode","rectify","events","shadow","trace"];function Cn(e={},a={}){const l=a.system||e.system,i=a.switches||Gn[l]||[];if(!i.length)return{system:l,switches:[],affected:0,total:0};const v={...e};for(const W of Hn)delete v[W];const p=i.map(W=>{const se=W.read(v),Ke=W.alt(se);let de=[],Y="",le=null,j=null;try{le=Tn({...v,[W.key]:se}),j=Tn({...v,[W.key]:Ke}),de=ne(le,j)}catch(cn){Y=cn&&cn.message||String(cn)}const ie=Xe(de.filter(cn=>Mn(cn.path))).map(cn=>({path:cn.path,label:Rn(cn.path),from:gn(cn.from),to:gn(cn.to)})),Ie=new Map;for(const cn of de){const fn=Wn(cn.path)||"其他";Ie.set(fn,(Ie.get(fn)||0)+1)}const pn=[...Ie.entries()].map(([cn,fn])=>({name:cn,count:fn})).sort((cn,fn)=>fn.count-cn.count||cn.name.localeCompare(fn.name,"zh-Hans-CN"));return{key:W.key,title:W.title,short:W.short,current:se,alt:Ke,currentLabel:W.label(se),altLabel:W.label(Ke),total:de.length,summary:Y?"":xe(de),views:Y?[]:Yn(l,le,j),roots:ie,categories:pn,error:Y}});return{system:l,switches:p,affected:p.filter(W=>!W.error&&W.total>0).length,total:p.reduce((W,se)=>W+se.total,0)}}const Pe=["chaibu","chaoshen","zhirun"],rn=[1,3,5],zn=["same-day","next-day"];function Nn(e,a=""){if(e==null||e==="")return;const l=a?`${a}的`:"";let i;if(typeof e=="number")i=e;else if(typeof e=="string"){const v=e.trim();if(!/^[+-]?(\d+(\.\d*)?|\.\d+)$/.test(v))throw G("E_RANGE",`${l}经度不是十进制数字:收到「${e}」。经度写数字即可,例如北京 116.4`);i=Number(v)}else throw G("E_RANGE",`${l}经度必须是数字或数字字符串,收到 ${Array.isArray(e)?"array":typeof e}`);if(!Number.isFinite(i))throw G("E_RANGE",`${l}经度不是有限数值:收到「${e}」。经度写十进制数字即可,例如北京 116.4`);if(i<-180||i>180)throw G("E_RANGE",`${l}经度要在 −180 到 180 之间(东经为正),收到 ${i}`);return i}function On(e){const a=Nn(e.longitude,""),l=e.partner&&typeof e.partner=="object"?Nn(e.partner.longitude,"对方"):void 0,i=e.partner2&&typeof e.partner2=="object"?Nn(e.partner2.longitude,"第三方"):void 0;if(!(a!==void 0&&e.longitude!==a||l!==void 0&&e.partner.longitude!==l||i!==void 0&&e.partner2.longitude!==i))return e;const p={...e};return a!==void 0&&(p.longitude=a),l!==void 0&&(p.partner={...p.partner,longitude:l}),i!==void 0&&(p.partner2={...p.partner2,longitude:i}),p}function Zn(e){if(e==null||e===""||e==="full")return"full";if(e==="lean")return"lean";throw G("E_INPUT",`detail 只能是 'full' 或 'lean':收到「${String(e).slice(0,24)}」`)}function Dn(e){if(e==null||typeof e=="string"&&!e.trim())return;const a=S(e);if(!a)throw G("E_ASOF",`无法解析 asOf:「${e}」,请用 2026-10-22T16:00 这种格式`);const{year:l,month:i,day:v,hour:p,minute:W}=a;if(!(i>=1&&i<=12)||!(v>=1&&v<=Oe(l,i)))throw G("E_ASOF",`asOf 指向的日期不存在:${e}`);if(p!==void 0&&!(p>=0&&p<=23))throw G("E_ASOF",`asOf 的小时要在 0–23 之间:${e}`);if(W!==void 0&&!(W>=0&&W<=59))throw G("E_ASOF",`asOf 的分钟要在 0–59 之间:${e}`);return a}function Xn(e={}){const a=e.system;if(e.mode!==void 0&&e.mode!==null&&e.mode!==""){const l={convert:["solar2lunar","lunar2solar"],meihua:["time","number"],xiaoliuren:["time","number"]},i=l[a];if(!i)throw G("E_INPUT",`mode 只用于 ${Object.keys(l).join(" / ")};${a||"当前体系"} 不收 mode`);if(!i.includes(e.mode))throw G("E_INPUT",`${a} 的 mode 只能是 ${i.join(" / ")},收到「${String(e.mode).slice(0,24)}」`)}if(e.fortuneYear!==void 0&&e.fortuneYear!==null&&e.fortuneYear!==""){const l=Number(e.fortuneYear);if(!Number.isInteger(l))throw G("E_INPUT",`fortuneYear 要是整数年份,收到「${e.fortuneYear}」`);e={...e,fortuneYear:l}}if(a==="bazi"){const l=C(e.datetime),i=Dn(e.asOf),v=H({...l,gender:Z(e.gender),longitude:typeof e.longitude=="number"?e.longitude:void 0,address:typeof e.address=="string"?e.address:void 0,geo:e.geo&&typeof e.geo=="object"?e.geo:void 0,lateZi:e.lateZi!==!1,trueSolar:e.trueSolar!==!1,dst:e.dst!==!1,nowYear:i?i.year:void 0,hourUnknown:e.hourUnknown===!0});return{...v,...i?{asOf:i}:{},precision:l.precision,summary:Le(v)}}if(a==="ziwei"){if(e.hourUnknown===!0)throw G("HOUR_UNKNOWN","紫微必须有出生时刻:命宫由生月与生时支定,时支未知则整盘不成立。请补上出生时刻,或改用八字三柱模式只看年/月/日。");e.lateZi!==void 0&&e.lateZishi===void 0&&(e={...e,lateZishi:e.lateZi===!1?"current-day":"next-day"});const l=C(e.datetime),i=Dn(e.asOf),v=b({...l,gender:Z(e.gender),leapMonth:e.leapMonth,leapAsNext:e.leapAsNext===!0,...F(e),longitude:typeof e.longitude=="number"?e.longitude:void 0,address:typeof e.address=="string"?e.address:void 0,geo:e.geo&&typeof e.geo=="object"?e.geo:void 0,trueSolar:e.trueSolar,dst:e.dst!==!1,asOf:i});return{...v,...i?{asOf:i}:{},precision:l.precision,summary:ye(v)}}if(a==="tarot"){const l=e.count===void 0||e.count===null||e.count===""?3:Number(e.count);if(!rn.includes(l))throw G("E_COUNT",`塔罗张数只能是 1 / 3 / 5,收到「${e.count}」`);if(!$e(e.seed))throw G("E_INPUT",`seed 必须是数字,收到「${e.seed}」`);const i=Dn(e.asOf),v=E({count:l,question:e.question,at:e.asOf,random:ue(e.seed)});return e.seed!==void 0&&e.seed!==null&&e.seed!==""&&(v.seed=Number(e.seed)),{...v,...i?{asOf:i}:{},summary:Ce(v)}}if(a==="daliuren"){const l=C(e.datetime),i=e.lateZi!==!1,v=ee({...l,lateZi:i});return v.lateZi=i,{...v,precision:l.precision,summary:hn(v)}}if(a==="qimen"){const l=C(e.datetime);if(e.juMethod!==void 0&&!Pe.includes(e.juMethod))throw G("E_INPUT",`juMethod 只能是 chaibu / chaoshen / zhirun,收到「${e.juMethod}」`);const i=e.lateZiHourMode!==void 0?e.lateZiHourMode:e.lateZi===!0?"next-day":e.lateZi===!1?"same-day":void 0;if(i!==void 0&&!zn.includes(i))throw G("E_INPUT",`lateZiHourMode 只能是 same-day / next-day,收到「${i}」`);const v=i==="next-day"?"next-day":"same-day",p=r({...l,lateZiHourMode:v,juMethod:e.juMethod});return p.lateZiHourMode=v,{...p,summary:T(p)}}if(a==="hepan"){if(e.hourUnknown===!0||e.partner&&e.partner.hourUnknown===!0)throw G("HOUR_UNKNOWN","合盘需要双方都有出生时刻:夫妻宫与大运都依赖时支。请补齐时刻后再看,或用八字三柱模式各自看年/月/日。");const l=e.partner;if(!l||typeof l!="object")throw G("E_PARTNER","合盘需要 partner:{ datetime, gender, address? },其中 partner.datetime 是对方的公历出生时间");if(!l.datetime)throw G("E_PARTNER",'缺少 partner.datetime(对方的公历出生时间),例如 partner: {"datetime":"1992-03-03T10:00","gender":"female"}');const i=e.partner2;if(i!=null){if(typeof i!="object"||Array.isArray(i))throw G("E_PARTNER","partner2 需要 { datetime, gender, address? };不想看三方就整段省略(null 视同未传)");if(!i.datetime)throw G("E_PARTNER",'缺少 partner2.datetime(第三方的公历出生时间),例如 partner2: {"datetime":"1988-09-09T08:00","gender":"male"}')}const v=e.chart==="ziwei"?"ziwei":"bazi",p=(Y,le)=>({...C(Y.datetime),gender:Z(Y.gender,le),trueSolar:Y.trueSolar,lateZi:Y.lateZi,dst:Y.dst!==!1,address:typeof Y.address=="string"?Y.address:void 0,longitude:typeof Y.longitude=="number"?Y.longitude:void 0,geo:Y.geo&&typeof Y.geo=="object"?Y.geo:void 0}),W=p(e,"你(主方)"),se=p(l,"对方"),Ke=(Y,le)=>v==="ziwei"?t({a:Y,b:le}):f({a:Y,b:le}),de=Ke(W,se);if(i){const Y=p(i,"第三方");de.triple=c([{key:"a-b",a:"你",b:"对方",result:de},{key:"a-c",a:"你",b:"第三方",result:Ke(W,Y)},{key:"b-c",a:"对方",b:"第三方",result:Ke(se,Y)}])}return{...de,summary:ke(de)}}if(a==="meihua"){let l;e.mode!=="number"&&C(e.datetime);try{l=V({mode:e.mode==="number"?"number":"time",datetime:e.datetime,upper:e.upper,lower:e.lower,changing:e.changing,lateZi:e.lateZi})}catch(i){const v=i&&i.message||String(i);throw G(i&&i.code||"E_INPUT",i&&i.code?v:`梅花起卦参数不完整:${v}`)}return{...l,summary:he(l)}}if(a==="liuyao"){if(!$e(e.seed))throw G("E_INPUT",`seed 必须是数字,收到「${e.seed}」`);let l;if(e.lines===void 0||e.lines===null)l=pe(ue(e.seed));else{if(!Array.isArray(e.lines))throw G("E_LINES","lines 必须是数组:自下而上 6 个爻值(6 老阴 / 7 少阳 / 8 少阴 / 9 老阳)");if(e.lines.length!==6)throw G("E_LINES",`六爻需要正好 6 个爻值(自下而上),收到 ${e.lines.length} 个;留空则由引擎随机摇卦`);l=e.lines.map(Number)}let i,v=null;const p=e.datetime?C(e.datetime):Dn(e.asOf);if(p){e.datetime||(v=p);const le=g(O($(p.year,p.month,p.day)));i={stem:le.stem,branch:le.branch,name:le.name}}let W;try{W=A({lines:l,question:e.question,dayGanZhi:i})}catch(le){throw G(le&&le.code||"E_LINES",le&&le.message?le.message:le)}const se=fe(W,{direction:e.direction,gender:e.gender});se.liuqin&&(W.useGod=se);let Ke=null;if(p)try{Ke=(n({year:p.year,month:p.month,day:p.day,hour:p.hour,minute:p.minute}).monthGanZhi||"")[1]||null}catch{Ke=null}const de=o(W,{monthBranch:Ke,dayBranch:W.dayGanZhi.branch});de&&(W.hexStrength=de);const Y=q(W,{monthBranch:Ke,dayBranch:W.dayGanZhi.branch});if(Y&&(W.jinTuiPower=Y),se.liuqin){const le=U(W,se,{monthBranch:Ke,dayBranch:W.dayGanZhi.branch});le&&(W.useGodStrength=le);const j=K(W,se,{monthBranch:Ke,dayBranch:W.dayGanZhi.branch});j&&(W.fushenAccess=j);const ie=_(W,se,{monthBranch:Ke});ie&&(W.yingqi=ie)}return e.seed!==void 0&&e.seed!==null&&e.seed!==""&&(W.seed=Number(e.seed)),{...W,...v?{asOf:v}:{},summary:tn(W)}}if(a==="almanac"){const l=C(e.datetime),i=We({year:l.year,month:l.month,day:l.day});return{...i,summary:Qn(i)}}if(a==="zeri"){if(!(e.candidates!==void 0&&e.candidates!==null)&&(typeof e.startDate!="string"||!e.startDate.trim()))throw G("E_INPUT",'择日需要 startDate(公历 YYYY-MM-DD,起算日);可另给 days(1–60,默认 30)与 shengXiao(当事人属相)。只想比几天,改给 candidates: ["2026-12-01","2026-12-08"]');let i;try{i=Ge({task:e.task,startDate:e.startDate,days:e.days,shengXiao:e.shengXiao,candidates:e.candidates})}catch(v){throw G(v&&v.code||"E_INPUT",v&&v.message||String(v))}return{...i,summary:et(i)}}if(a==="chenggu"){const l=C(e.datetime),i=/[T\s]\d{1,2}:\d{1,2}/.test(String(e.datetime)),v=Number.isInteger(e.hour)?e.hour:i?l.hour:null;if(v===null||v<0||v>23)throw G("E_INPUT","称骨必须给时辰:datetime 带时分(如 1990-08-15T10:00),或额外给 hour(0–23)——缺时辰四柱不齐");const p=Fe({year:l.year,month:l.month,day:l.day,hour:v,minute:i?l.minute:0,lateZi:e.lateZi});return{...p,summary:wn(p)}}if(a==="convert"){const l=e.mode==="lunar2solar"?"lunar2solar":"solar2lunar";let i;if(l==="lunar2solar"){if(e.lunarYear==null||e.lunarMonth==null||e.lunarDay==null)throw G("E_INPUT","农历转公历需要 lunarYear / lunarMonth / lunarDay(闰月另加 isLeapMonth: true)");i=ce({mode:l,lunarYear:Number(e.lunarYear),lunarMonth:Number(e.lunarMonth),lunarDay:Number(e.lunarDay),isLeapMonth:e.isLeapMonth===!0})}else{const v=C(e.datetime);i=ce({mode:l,year:v.year,month:v.month,day:v.day})}return{...i,summary:Ee(i)}}if(a==="xiaoliuren"){const l=e.datetime?C(e.datetime):null,i=Qe({mode:e.mode==="number"?"number":"time",date:typeof e.date=="string"&&e.date.trim()?e.date:l?`${l.year}-${l.month}-${l.day}`:void 0,hour:Number.isInteger(e.hour)?e.hour:l&&/[T\s]\d{1,2}:\d{1,2}/.test(String(e.datetime))?l.hour:void 0,num1:e.num1,num2:e.num2,num3:e.num3,question:e.question,lateZi:e.lateZi});return{...i,summary:Vn(i)}}if(a==="star"){const l=C(e.datetime),i=De({year:l.year,month:l.month,day:l.day});return{...i,summary:te(i)}}if(a==="numerology"){const l=C(e.datetime),i=He({year:l.year,month:l.month,day:l.day});return{...i,summary:dn(i)}}if(a==="mbti"){if(e.answers===void 0||e.answers===null){const i=Je();return{...i,summary:In(i)}}const l=Ze({answers:e.answers});return{...l,summary:En(l)}}if(a==="trend"){const l=C(e.datetime),i=e.asOf?Dn(e.asOf):void 0,v=rt({...l,nowYear:i?i.year:void 0,gender:Z(e.gender),toAge:e.toAge,lateZi:e.lateZi!==!1,trueSolar:e.trueSolar!==!1,dst:e.dst!==!1,longitude:typeof e.longitude=="number"?e.longitude:void 0,address:typeof e.address=="string"?e.address:void 0,geo:e.geo&&typeof e.geo=="object"?e.geo:void 0,hourUnknown:e.hourUnknown===!0});return{...v,...e.hourUnknown===!0?{hourUnknown:!0,hourPrecision:"day"}:{},precision:l.precision,summary:jn(v)}}if(a==="fengshui"){if(e.action!=null&&!["natal","advise","xuankong"].includes(e.action))throw G("E_INPUT",`风水 action 只能是 natal / advise / xuankong,收到「${String(e.action).slice(0,24)}」`);const l=e.action==="advise"?"advise":e.action==="xuankong"?"xuankong":"natal";if(l==="xuankong"){const p=nt({action:l,sitting:e.sitting,facing:e.facing,...e.period!==void 0?{period:e.period}:{},...e.fortuneYear!==void 0?{fortuneYear:e.fortuneYear}:{},...typeof e.sittingOffset=="number"?{sittingOffset:e.sittingOffset}:{},...typeof e.sittingDegree=="number"?{sittingDegree:e.sittingDegree}:{},...typeof e.facingOffset=="number"?{facingOffset:e.facingOffset}:{},...typeof e.facingDegree=="number"?{facingDegree:e.facingDegree}:{},...typeof e.fortuneDate=="string"?{fortuneDate:e.fortuneDate}:{},...typeof e.fortuneTime=="string"?{fortuneTime:e.fortuneTime}:{},dst:e.dst!==!1});return{...p,summary:Pn(p)}}if(l==="advise"){const p=nt({action:l,sitting:e.sitting,facing:e.facing,...e.datetime?C(e.datetime):{},...e.gender==="male"||e.gender==="female"?{gender:e.gender}:{},dst:e.dst!==!1});return{...p,summary:Pn(p)}}const i=C(e.datetime),v=nt({action:"natal",year:i.year,month:i.month,day:i.day,gender:Z(e.gender),fortuneYear:e.fortuneYear,dst:e.dst!==!1});return{...v,summary:Pn(v)}}if(a==="name"){if(e.action!=null&&!["assess","generate"].includes(e.action))throw G("E_INPUT",`起名 action 只能是 assess / generate,收到「${String(e.action).slice(0,24)}」`);const l=e.action==="generate"?"generate":"assess",i=e.datetime?C(e.datetime):Number.isInteger(e.year)&&Number.isInteger(e.month)&&Number.isInteger(e.day)?{year:e.year,month:e.month,day:e.day,...Number.isInteger(e.hour)?{hour:e.hour}:{},...Number.isInteger(e.minute)?{minute:e.minute}:{}}:{},v=ot({action:l,surname:e.surname,givenName:e.givenName,limit:e.limit,charElements:e.charElements&&typeof e.charElements=="object"?e.charElements:void 0,strokeOverrides:e.strokeOverrides&&typeof e.strokeOverrides=="object"?e.strokeOverrides:void 0,surnameStrokes:e.surnameStrokes&&typeof e.surnameStrokes=="object"?e.surnameStrokes:void 0,...i,...e.gender==="male"||e.gender==="female"?{gender:e.gender}:{},...e.datetime?{lateZi:e.lateZi!==!1,trueSolar:e.trueSolar!==!1,dst:e.dst!==!1,longitude:typeof e.longitude=="number"?e.longitude:void 0,address:typeof e.address=="string"?e.address:void 0,geo:e.geo&&typeof e.geo=="object"?e.geo:void 0}:{}});return{...v,summary:Bn(v)}}throw a?G("E_SYSTEM",`未知体系「${a}」,可选:bazi(四柱八字)、ziwei(紫微斗数)、liuyao(六爻)、meihua(梅花易数)、daliuren(大六壬)、qimen(奇门遁甲)、hepan(合盘)、tarot(塔罗)、almanac(黄历)、zeri(择日)、chenggu(称骨)、xiaoliuren(小六壬)、star(星座)、numerology(生命数字)、mbti(十六型人格问卷)、trend(人生 K 线)、fengshui(风水)、name(起名)、convert(公农历互转)。`):G("E_INPUT","缺少 system,可选:bazi(四柱八字)、ziwei(紫微斗数)、liuyao(六爻)、meihua(梅花易数)、daliuren(大六壬)、qimen(奇门遁甲)、hepan(合盘)、tarot(塔罗)、almanac(黄历)、zeri(择日)、chenggu(称骨)、xiaoliuren(小六壬)、star(星座)、numerology(生命数字)、mbti(十六型人格问卷)、trend(人生 K 线)、fengshui(风水)、name(起名)、convert(公农历互转)。")}function Qn(e){const a=e.ganzhi,l=e.jieQi&&e.jieQi.next?` 下一节:${e.jieQi.next.name} ${e.jieQi.next.date}`:"",i=e.dayGod?`值日:${e.dayGod.name}(${e.dayGod.type}·${e.dayGod.luck})`:"",v=e.xiu?`二十八宿:${e.xiu.name}宿(${e.xiu.luck}·${e.xiu.zheng}·${e.xiu.animal})`:"",p=e.taiShen?`胎神:${e.taiShen}`:"",W=e.positions?`吉神方位:喜神${e.positions.xiShen||"—"} 财神${e.positions.caiShen||"—"} 福神${e.positions.fuShen?e.positions.fuShen.dir:"—"} 阳贵${e.positions.yangGui?e.positions.yangGui.dir:"—"} 阴贵${e.positions.yinGui?e.positions.yinGui.dir:"—"}`:"",se=e.lucky?`吉配生肖:六合${e.lucky.liuhe||"—"} 三合${(e.lucky.sanhe||[]).join("、")||"—"}`:"",Ke=e.nayin&&e.nayin.day?`日柱纳音:${e.nayin.day.name}`:"",de=(e.hours||[]).map(Y=>`${Y.zhi}${Y.ganZhi.slice(0,1)}·${Y.shen}${Y.luck==="吉"?"吉":"凶"}`).join(" ");return[`【黄历】${e.meta.date} ${e.meta.weekday} ${e.lunar.text}`,`干支:${a.year}年 ${a.month}月 ${a.day}日 属${a.shengXiao}`,...e.meta.boundaryNote?[` ${e.meta.boundaryNote}`]:[],`建除:${e.zhiXing}日 冲:${e.chong.text}${e.chong.sha?`(${e.chong.sha})`:""} ${i}`,[v,Ke,p].filter(Boolean).join(" "),`宜:${e.yi.join("、")}`,`忌:${e.ji.join("、")}`,W,se,de?`时辰吉凶:${de}`:"",`节气:上一节 ${e.jieQi.prev?`${e.jieQi.prev.name} ${e.jieQi.prev.date}`:"—"}${l}`,e.dailyHexagram?`每日一卦:${e.dailyHexagram.name} ${e.dailyHexagram.meaning||""}`:"",`口径:${e.meta.scope}`].filter(Boolean).join(`
|
|
154
154
|
`)}function et(e){const a=e.compare&&e.compare.mode==="candidates",l=a?`【择日·${e.meta.task}】候选 ${e.meta.days} 天:${e.meta.candidates.join("、")}${e.meta.shengXiao?` 当事人属${e.meta.shengXiao}`:"(未给属相,未做冲煞排除)"}`:`【择日·${e.meta.task}】${e.meta.startDate} 起 ${e.meta.days} 天${e.meta.shengXiao?` 当事人属${e.meta.shengXiao}`:"(未给属相,未做冲煞排除)"}`,i=e.days.slice().sort((p,W)=>W.score-p.score).slice(0,a?12:5).map(p=>{const W=p.grade?`,卷十${p.grade.label}·${p.grade.decision}`:"";return`· ${p.date} ${p.weekday} ${p.verdict}(${p.score}分${W}) 宜${p.yi.slice(0,3).join("/")} ${p.reasons.join(";")||"无特别加减分"}`}),v=a?e.compare.best?`这一组里最优:${e.compare.best.date}(${e.compare.best.score}分,${e.compare.best.verdict})`+(e.compare.best.ties.length>1?`;同分:${e.compare.best.ties.filter(p=>p!==e.compare.best.date).join("、")}`:""):"这一组都因冲属相被排除,没有可用的日子":`推荐日:${e.best.length?e.best.join("、"):"本期无(都不够推荐分)"}`;return[l,v,`推荐日:${e.best.length?e.best.join("、"):"无"}`,`可用日:${e.usable.length?e.usable.join("、"):"无"}`,`回避日:${e.avoid.length?e.avoid.slice(0,6).join("、"):"无"}`,a?"候选日逐日:":"逐日排序:",...i,...a?[`比较口径:${e.compare.note}`]:[],`神煞依据:${e.shenshaRef.text};起法 ${e.shenshaRef.volumes.join("、")}。未实现起法:${e.shenshaRef.unsupported.join("、")}(不计分,逐日 shensha.unsupported 列出)。`,...e.shenshaRef.juan10?[`卷十依据:${e.shenshaRef.juan10.text}(${e.shenshaRef.juan10.corpusLines});${e.shenshaRef.juan10.thresholdsNote}`]:[],`口径:${e.meta.scope}`].join(`
|
|
155
155
|
`)}function wn(e){const a=e.song||{};return[`【称骨】${e.input.solar} ${e.lunar.text}`,`四项:${e.weights.year.label} ${e.weights.month.label} ${e.weights.day.label} ${e.weights.hour.label}`,`合计:${e.total.label}(${e.verdict.band})`,`歌诀(${e.total.label}):${a.text||"—"}`,`释义:${a.plain||"—"}`,`分档白话:${e.verdict.text}`,"口径:骨重与歌诀为通行本口径(各版本歌诀有异文),释义为白话自撰,属民俗娱乐参考。"].join(`
|
|
156
156
|
`)}function Vn(e){return[`【小六壬·${e.meta.mode}】${e.meta.question?`所问:${e.meta.question}`:""}`,e.meta.originText,`落宫:${e.steps.join(" → ")}`,`断语:${e.result.palace}(${e.result.luck}) ${e.result.text}`].join(`
|
package/client.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.62.
|
|
1
|
+
window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.62.1",factory(Fa){const ya=(function(){try{return Fa("react")}catch{return globalThis.React}})();if(!ya)return{inject:[],apply(){}};const p=ya.createElement,Mt={bazi:"client.bazi.js",ziwei:"client.ziwei.js",hepan:"client.hepan.js",trend:"client.trend.js",name:"client.name.js",fengshui:"client.fengshui.js",liuyao:"client.liuyao.js",meihua:"client.liuyao.js",qimen:"client.qimen.js",daliuren:"client.daliuren.js",tarot:"client.tarot.js",almanac:"client.almanac.js",convert:"client.convert.js",zeri:"client.zeri.js",chenggu:"client.chenggu.js",xiaoliuren:"client.xiaoliuren.js",star:"client.star.js",numerology:"client.numerology.js",mbti:"client.mbti.js"},Nt=[{key:"general",label:"综合",dim:null,focus:""},{key:"wealth",label:"财运",dim:"work",focus:"钱财进出的落点主要看「工作与职业选择」与「事业发展」这两条。"},{key:"career",label:"事业",dim:"career",focus:"事业发展这条与你的问题最直接。"},{key:"love",label:"感情",dim:"love",focus:"感情这条与你的问题最直接。"},{key:"health",label:"健康",dim:"health",focus:"健康这条与你的问题最直接;下面只作提醒,不作任何诊断。"},{key:"study",label:"学业",dim:"career",focus:"学业与考试更贴近「事业发展」这条,讲的是长期积累与阶段进展。"},{key:"travel",label:"出行",dim:"overall",focus:"出行与迁动更贴近「整体运势」这条,看的是当下这一段的大环境。"}];window.__MP_VER="0.62.1",window.__MPGroups=[{title:"问一件事",hint:"心里有一件具体的事,起一卦再决定",items:[{k:"liuyao",label:"六爻",tip:"摇六次,问一件事"},{k:"meihua",label:"梅花",tip:"见闻起卦,看当下"},{k:"tarot",label:"塔罗",tip:"抽牌,看关系与选择"},{k:"qimen",label:"奇门",tip:"看方位、时机与取舍"},{k:"daliuren",label:"六壬",tip:"占事,断来意与结果"},{k:"xiaoliuren",label:"小六壬",tip:"掐指一算,快速断"}]},{title:"看一个人",hint:"看自己或身边人的性情、格局与运程",items:[{k:"bazi",label:"八字",tip:"四柱看一生格局"},{k:"ziwei",label:"紫微",tip:"十二宫细看"},{k:"hepan",label:"合盘",tip:"两个人合不合"},{k:"mbti",label:"人格",tip:"16 型性格问卷"},{k:"chenggu",label:"称骨",tip:"按生辰称命重"},{k:"numerology",label:"数字",tip:"生日数字看性格"},{k:"trend",label:"人生K",tip:"一生高低走势",wide:!0}]},{title:"查日子",hint:"挑时间、换农历,顺带看看家里和名字",items:[{k:"almanac",label:"黄历",tip:"今天宜忌、时辰吉凶"},{k:"zeri",label:"择日",tip:"挑个办事的好日子"},{k:"convert",label:"农历",tip:"公历农历互转"},{k:"star",label:"星座",tip:"星座性格与今日运"},{k:"fengshui",label:"风水",tip:"房屋朝向与布置"},{k:"name",label:"起名",tip:"按八字选字"}]}],window.__MP_UNRELEASED=[];const K={};K.DIRECTIONS=Nt,K.compute=()=>{throw new Error("命理引擎尚未加载")};const At=Object.create(null),dt=Object.create(null);function Ni(s){return Mt[s]||Mt.bazi||"client.bazi.js"}const Lt=()=>typeof performance<"u"&&performance.now?performance.now():Date.now();async function Ai(s){const n=Ni(s);let k=At[n];const I=!!k,X=Lt();if(!k){if(!Fa||typeof Fa.async!="function")throw new Error("当前宿主不支持客户端分块加载(require.async 缺失),请升级 DeepSeek Harness");let te=dt[n];te||(te=Fa.async(`./${n}`).then(re=>{const se=re&&(re.Engine||re.default);if(!se||typeof se.compute!="function")throw new Error(`命理引擎分块 ${n} 未返回 Engine`);return At[n]=se,se}),dt[n]=te,te.catch(()=>{}).then(()=>{delete dt[n]})),k=await te}for(const te of Object.keys(k))k[te]!==void 0&&(K[te]=k[te]);return Array.isArray(K.DIRECTIONS)||(K.DIRECTIONS=Nt),window.Engine=K,window.__MP_ENGINE_READY__=!0,window.__MP_LAST_LOAD={tab:s,chunk:n,cached:I,ms:Math.round((Lt()-X)*10)/10},K}window.__mpEnsureEngine=Ai,window.Engine=K,(function(){const s={liuyao:!0,meihua:!0,daliuren:!0,tarot:!0},n=Q=>!!s[Q],k={general:"other",wealth:"business",career:"career",love:"love",health:"other",study:"career",travel:"action"},I=Q=>k[Q]||"other",X="#ffffff",te="#1c1a15";function re(Q){const ee=String(Q??"").match(/rgba?\(([^)]+)\)/i);if(!ee)return null;const G=ee[1].split(/[,\s/]+/).filter(Boolean).map(Number);return G.length<3||G.slice(0,3).some(B=>!Number.isFinite(B))||G.length>3&&Number.isFinite(G[3])&&G[3]<.95?null:[G[0],G[1],G[2]]}function se(Q){const ee=String(Q||"").replace("#",""),G=ee.length===3?ee.split("").map(B=>B+B).join(""):ee;return/^[0-9a-f]{6}$/i.test(G)?[0,2,4].map(B=>parseInt(G.slice(B,B+2),16)):null}function t(Q){const ee=G=>{const B=G/255;return B<=.03928?B/12.92:Math.pow((B+.055)/1.055,2.4)};return .2126*ee(Q[0])+.7152*ee(Q[1])+.0722*ee(Q[2])}function ce(Q,ee){const G=t(Q),B=t(ee),he=Math.max(G,B),ca=Math.min(G,B);return(he+.05)/(ca+.05)}function Z(Q){const ee=typeof Q=="string"?re(Q):Q;return ee?ce(ee,se(X))>=ce(ee,se(te))?X:te:""}function le(Q){const ee=String(Q??"").trim();if(!ee)return{lines:null,warning:""};const G=ee.split(/[^0-9]+/).filter(Boolean).map(Number),B=G.filter(he=>![6,7,8,9].includes(he));return G.length===6&&B.length===0?{lines:G,warning:""}:{lines:null,warning:G.length!==6?`爻值需要正好 6 个数字(当前 ${G.length} 个),本次按随机摇卦。`:`爻值只能是 6/7/8/9(收到 ${B.join("/")}),本次按随机摇卦。`}}function ge(Q){const ee=String(Q??"").trim();if(!ee)return null;const G=Number(ee);return Number.isFinite(G)?G:null}function ve(Q){const ee=Q instanceof Date?Q:new Date,G=B=>String(B).padStart(2,"0");return`${ee.getFullYear()}-${G(ee.getMonth()+1)}-${G(ee.getDate())}`}window.__MPCore={NEED_ASK:s,needAsk:n,parseLines:le,toNumber:ge,parseRGB:re,hexToRGB:se,luminance:t,contrastRatio:ce,pickOnColor:Z,ON_DARK:X,ON_LIGHT:te,kindOfDirection:I,todayStamp:ve}})(),(function(){const s=`
|
|
2
2
|
.pp,.mp-it,.mp-al,.mp-cg,.mp-cl,.mp-cli,.mp-kline,.mp-mb,.mp-mb-paper,.mp-nm,.mp-quick,.mp-cdiff,.mp-shadow,.mp-trace-card,.mp-trace-layer,.mp-prof{--ink:#1b1b1b;--ink2:#3f3a33;--muted:#6f6a60;--label:#8a8378;--faint:#a9a296;
|
|
3
3
|
--line:#c8c1b2;--dimline:#b9b2a4;--hair:#e9e2d3;
|
|
4
4
|
/* 底色略沉作「桌面」,--card 跳到近白:原先 bg 与 card 只差 1/255,卡片感等于零。
|