@meshflow/core 0.1.3 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +39 -3
- package/index.js +1 -1
- package/index.mjs +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -30,17 +30,53 @@
|
|
|
30
30
|
* **⚡ 最小受影响路径**:触发变更时无需遍历全局,仅针对受影响的“下游子图”进行动态增量计算。
|
|
31
31
|
* **🚨 循环依赖检测**:在节点定义阶段实时进行 $O(V+E)$ 的环检测,提前发现逻辑死循环。
|
|
32
32
|
* **📦 极简轻量**:零依赖,体积仅 ~7kB(zipped),适配任何 JavaScript 运行时。
|
|
33
|
-
|
|
33
|
+
* **🔌 插件化架构 (New)**:支持生命周期拦截与监听(如官方调试插件 `@meshflow/logger`)。
|
|
34
34
|
---
|
|
35
35
|
|
|
36
36
|
## 🚀 快速上手
|
|
37
37
|
|
|
38
|
-
|
|
38
|
+
#### 安装
|
|
39
39
|
|
|
40
40
|
```bash
|
|
41
41
|
npm install @meshflow/core
|
|
42
42
|
```
|
|
43
|
-
|
|
43
|
+
#### 定义节点
|
|
44
|
+
```typescript
|
|
45
|
+
import { useMeshFlow } from "@meshflow/core";
|
|
46
|
+
const schema = {
|
|
47
|
+
type: 'group',
|
|
48
|
+
name: 'billing',
|
|
49
|
+
label: '计费与汇总',
|
|
50
|
+
children: [
|
|
51
|
+
{ type: 'number', name: 'totalPrice', label: '预估月度总价', defaultValue: 0, },
|
|
52
|
+
{ type: 'input', name: 'priceDetail', label: '计费项说明', defaultValue: '基础配置费用'}
|
|
53
|
+
]
|
|
54
|
+
};
|
|
55
|
+
const engine = useMeshFlow<Ref<number,number>,AllPath>('main',schema, {
|
|
56
|
+
signalCreateor: () => ref(0),
|
|
57
|
+
signalTrigger(signal) {
|
|
58
|
+
signal.value++;
|
|
59
|
+
},
|
|
60
|
+
});
|
|
61
|
+
```
|
|
62
|
+
#### 添加联动依赖
|
|
63
|
+
```typescript
|
|
64
|
+
//声明联动规则:当总价 > 2000 时,自动修改描述与主题
|
|
65
|
+
engine.config.SetRule("billing.totalPrice", "billing.priceDetail", "defaultValue", {
|
|
66
|
+
logic: ({ slot }) => {
|
|
67
|
+
const [total] = slot.triggerTargets; // 从触发目标中解构出 totalPrice
|
|
68
|
+
return total > 2000 ? "大客户折扣" : undefined;
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
engine.config.SetRule( "billing.totalPrice", "billing.priceDetail", "theme", {
|
|
72
|
+
logic: (api) => {
|
|
73
|
+
const [value] = api.slot.triggerTargets;
|
|
74
|
+
return total > 2000 ? "warning" : undefined;
|
|
75
|
+
},
|
|
76
|
+
});
|
|
77
|
+
//触发首屏计算
|
|
78
|
+
engine.config.notifyAll();
|
|
79
|
+
```
|
|
44
80
|
|
|
45
81
|
## 🛠️ 为什么选择 MeshFlow?
|
|
46
82
|
|
package/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
'use strict';var Q=class{computedRules=[];store={OR:async(e,r)=>{let t,i,n=this.computedRules;for(let c of n){let o=await c.logic(e);if(c.entityId==="__base__"){i=o;continue}if(o){t=c.value;break}}return typeof t>"u"&&(t=i),{res:t,version:r}},PRIORITY:async(e,r)=>{let t=null,i=this.computedRules;try{for(let n of i){let c=await n.logic(e);if(c!==void 0){t=c;break}}}catch(n){throw n}return {res:t,version:r}}};CurrentStrategy=()=>{};CurrentStrategyType="PRIORITY";getRules=()=>{};constructor(e){this.getRules=e,this.CurrentStrategy=this.store.PRIORITY,this.updateComputedRules();}updateComputedRules(){let e=this.getRules();this.CurrentStrategyType==="PRIORITY"?this.computedRules=Array.from(e.values()).map(r=>Array.from(r)).flat().sort((r,t)=>t.priority-r.priority):this.computedRules=Array.from(e.values()).map(r=>Array.from(r)).flat();}setStrategy(e){this.CurrentStrategy=this.store[e],this.updateComputedRules();}evaluate(e,r){return this.CurrentStrategy(e,r)}},$=class{path;strategy;contract;rules=new Map;isDefaultValue=false;id=0;cache=void 0;pendingPromise=null;version=0;deps=new Map;_forceNotify=false;promiseToken=null;globalCalcCount=0;constructor(e,r,t){let i=()=>this.rules;this.strategy=new Q(i),this.path=t,this.isDefaultValue=r==="defaultValue",this.contract=this.inferType(e),this.cache=e,this.setRule({priority:0,entityId:"__base__",logic:()=>e});}forceNotify(){this._forceNotify=true;}isForceNotify(){return this._forceNotify}setStrategy(e){this.strategy.setStrategy(e);}updateInputValueRule(e){this.isDefaultValue&&this.setRule({priority:1,entityId:"__input_value__",logic:()=>e});}setDefaultRule(e){let r=new Set;r.add(e),this.rules.set(e.id,r);}setRules(e,r){r&&this.updateDeps(r);let t=++this.id,i={...e,entityId:t};for(let n of e.triggerPaths)this.rules.has(n)||this.rules.set(n,new Set),this.rules.get(n).add(i);return this.strategy.updateComputedRules(),()=>{for(let n of e.triggerPaths){let c=this.rules.get(n);c&&(c.delete(i),c.size===0&&(this.rules.delete(n),this.deps.delete(n)));}this.strategy.updateComputedRules();}}updateDeps(e){for(let[r,t]of e)this.deps.set(r,t);}setRule(e,r){if(r&&this.updateDeps(r),typeof e.entityId=="string"){this.setDefaultRule(e);return}let t=++this.id,i={...e,entityId:t};if(e)for(let n of e.triggerPaths)this.rules.has(n)||this.rules.set(n,new Set),this.rules.get(n).add(i);return this.strategy.updateComputedRules(),()=>{for(let n of e.triggerPaths){let c=this.rules.get(n);c&&(c.delete(i),c.size===0&&(this.rules.delete(n),this.deps.delete(n)));}this.strategy.updateComputedRules();}}async evaluate(e){let r=null;if(e.GetToken&&(r=e.GetToken()),this.pendingPromise&&this.promiseToken!==r&&(this.pendingPromise=null,this.promiseToken=null),this.pendingPromise)return this.pendingPromise;this.promiseToken=r;let t=++this.version;return this.pendingPromise=(async()=>{try{await Promise.resolve();let i=!1;if(typeof e.triggerPath=="string"){i=!0;let o=this.deps.get(e.triggerPath),p=e.GetValueByPath(e.triggerPath);if(typeof o=="object"||typeof p=="object")i=!1;else {let u=Array.from(this.deps.keys());for(let l of u){let a=this.deps.get(l),h=e.GetValueByPath(l);if(a!==h){i=!1;break}}}}if(i)return this.cache;let{res:n,version:c}=await this.strategy.evaluate(e,t);if(r!==this.promiseToken)return this.cache;if(c<this.version)return this.cache;if(this.inferType(n)!==this.contract&&`${this.contract}`,this.cache=n,r===this.promiseToken){let o=Array.from(this.deps.keys());for(let p of o){let u=e.GetValueByPath(p);this.deps.set(p,u);}}return n}catch(i){throw {path:this.path,info:i}}finally{this.promiseToken===r&&(this.pendingPromise=null,this.promiseToken=null);}})(),this.pendingPromise}inferType(e){return Array.isArray(e)?"array":typeof e}},z=class{validators=[];defaultValidators=[];path="";constructor(e){this.path=e,this.SetDefaultValidators();}setValidators(e){this.validators.push(e);}SetDefaultValidators(){let e={logic:t=>t||typeof t=="number"?true:`${this.path}\u4E0D\u80FD\u4E3A\u7A7A`,condition:t=>!!t.required},r={logic:function(t){return t.length>this.options.maxLength?`\u8D85\u51FA\u6700\u5927\u957F\u5EA6\uFF0C\u6700\u5927\u957F\u5EA6\u4E3A${this.options.maxLength}`:true},condition:function(t){return typeof t.maxLength!="number"?false:(r.options={maxLength:t.maxLength},t.type==="input"&&t.hidden===false)},options:{}};this.defaultValidators.push(e),this.defaultValidators.push(r);}evaluate(e,r){let t=true,i=[...this.defaultValidators,...this.validators];for(let n of i){if(!n.condition(r))continue;let o=n.logic(e);if(typeof o!="boolean"){t=o;break}}return t}};function J(s,e,r,t,i){let n=new Map;return (o,p)=>{let l=Symbol("token");n.set(o,l);let a=false,h=new Set,y=new Set,m=new Set(s.GetAllNextDependency(o));m.add(o);let x=new Map,R=new Map,O=performance.now(),A=s.GetPathToLevelMap(),E=A.get(o)??0;m.forEach(v=>{if(v===o||p.includes(v))return;let d=s.GetPrevDependency(v).filter(f=>m.has(f)).length;d>0&&R.set(v,d);}),h.add(o);let G=Array.from(p).map(v=>(x.set(v,(x.get(v)||0)+1),{target:v,trigger:o,isReleased:false}));e.pushExecution([...Array.from(p),o],true),`${o}${l.description}`,t.callOnStart({path:o});let B=async v=>{let{target:g,trigger:d}=v;try{if(n.get(o)!==l)return;let f=!1,T=!1,S=r.GetRenderSchemaByPath(g);t.emit("node:start",{path:g});for(let F in S.nodeBucket){let w=S.nodeBucket[F],V=await w.evaluate({affectKey:F,triggerPath:d,GetRenderSchemaByPath:r.GetRenderSchemaByPath,GetValueByPath:P=>r.GetRenderSchemaByPath(P).defaultValue,GetToken:()=>l});if(n.get(o)!==l){t.emit("node:intercept",{path:g,reason:`\u4EE4\u724C\u8FC7\u671F\uFF0C\u4E22\u5F03${g}\u65E7\u4EFB\u52A1\u8BA1\u7B97\u7ED3\u679C`});return}F==="options"&&(V.some(b=>b.value==S.defaultValue)||(S.defaultValue=void 0,f=!0)),V!==S[F]&&(S[F]=V,f=!0,t.emit("node:bucket:success",{path:g,key:F,value:V})),w.isForceNotify()&&(T=!0),f&&i.flushPathSet.add(g);let I=s.GetNextDependency(g);(f||T)&&s.GetAllNextDependency(g).forEach(b=>m.add(b));for(let P of I){if(h.has(P)){t.emit("node:intercept",{path:P,reason:` \u4E0B\u6E38 ${P} \u5DF2\u7531\u5176\u4ED6\u8DEF\u5F84\u5904\u7406`});continue}if(f||T){if(!R.has(P)&&!h.has(P)&&!x.has(P)){let H=s.GetPrevDependency(P).filter(U=>m.has(U)).length;R.set(P,H);}let b=R.get(P)??0,C=Math.max(0,b-1);C<=0?(R.delete(P),G.push({target:P,trigger:g,isReleased:!0}),x.set(P,1),e.pushExecution([P]),t.emit("node:release",{path:P,reason:` \u4E0A\u6E38${g} \u503C\u53D8\u4E86`})):R.set(P,C);}else t.emit("node:stagnate",{path:P,reason:` \u4E0A\u6E38${g} \u503C\u672A\u53D8`});}}if(t.emit("node:success",{path:g}),h.add(g),performance.now()-O>16&&(await new Promise(F=>requestAnimationFrame(F)),O=performance.now(),n.get(o)!==l))return;n.get(o)===l&&i.requestUpdate();}catch(f){t.emit("node:error",{path:g,error:f});let T=Symbol("abort");n.set(o,T),G.length=0,R.clear(),y.clear(),e.markError(g),t.callOnError(f);}finally{n.get(o)===l&&(y.delete(g),e.popExecution([g]),a||(t.emit("flow:fire",{path:g,reason:"\u4EFB\u52A1\u5F52\u822A"}),D()));}},D=async()=>{if(n.get(o)!==l){a=false;return}a=true;try{for(;(G.length>0||R.size>0)&&n.get(o)===l;){if(G.length>0){if(y.size>=20){a=!1;return}let v=G.shift(),{target:g}=v;if(h.has(g)){t.emit("node:intercept",{path:g,reason:` \u62D2\u7EDD\u91CD\u5165${g},\u5DF2\u8BA1\u7B97\u5B8C\u6210`});continue}let d=x.get(g)||0;d<=1?x.delete(g):x.set(g,d-1);let f=A.get(g)??0;if(f>E+1&&!v.isReleased){t.emit("node:intercept",{path:g,reason:` ${g} \u5C42\u7EA7\u592A\u6DF1(${f})\uFF0C\u5F53\u524D\u6C34\u4F4D(${E})`}),R.set(g,1);continue}y.add(g),t.emit("node:processing",{path:g}),e.pushExecution([g]),B(v);continue}if(y.size>0){t.emit("flow:wait",{reason:`\u961F\u5217\u5DF2\u7A7A,\u7184\u706B\u7B49\u5F85\uFF0C\u7B49\u5F85\u5F02\u6B65\u4EFB\u52A1\u5F52\u822A | \u98DE\u884C\u4E2D: ${Array.from(y).join(",")} | `}),a=!1;return}if(R.size>0){let v=!1,g=[];for(let[d]of R)s.GetPrevDependency(d).some(S=>h.has(S)?!1:y.has(S)||x.has(S)||m.has(S)?!0:(A.get(S)??0)>E)||g.push(d);if(g.length>0&&(g.forEach(d=>{R.delete(d),G.push({target:d,trigger:o,isReleased:!0}),x.set(d,1),e.pushExecution([d]);}),v=!0),v)continue;if(Array.from(R.keys()).some(f=>s.GetPrevDependency(f).some(S=>m.has(S)&&!h.has(S)))){t.emit("flow:wait",{reason:"\u5C1A\u6709\u6D3B\u8DC3\u4F9D\u8D56 \u672A\u5B8C\u6210,\u7184\u706B\u7B49\u5F85"}),a=!1;return}if(E++,E>2e3)break;continue}}}finally{R.size,y.size,G.length,a=false,t.emit("flow:wait",{reason:"\u7184\u706B\u9759\u9ED8"}),Promise.resolve().then(()=>{R.size===0&&y.size===0&&G.length===0&&t.callOnSuccess();});}};D();}}function Z(s,e,r,t,i,n){let c=me(s),o=0,p=new Map,u=new Map,l=new Map,a=false,h=new Set,y=d=>{let f=p.get(d);return u.get(f)},m=d=>l.get(d),x=async()=>{let d=Array.from(h);h.clear();for(let f of d){let T=y(f);n.signalTrigger(T.dirtySignal);}},R=()=>{a||(a=true,Promise.resolve().then(()=>{try{for(;h.size>0;)x();}finally{a=false;}}));},O=()=>{let d=(f,T,S)=>{if(typeof f!="object"||f===null||Array.isArray(f)){if(S.length>0){let w=S[S.length-1];T[w]=y(S.join(".")).defaultValue;}return}let F=Object.getOwnPropertyNames(f);for(let w of F)S.push(w),d(f[w],f,S),S.pop();};return d(c,null,[]),c},A=J(e,r,{GetRenderSchemaByPath:y},i,{requestUpdate:R,flushPathSet:h}),L=async()=>{let d=e.GetDependencyOrder().flat();try{for(let f of d){let T=y(f);for(let S in T.nodeBucket){let F=await T.nodeBucket[S].evaluate({affectKey:S,triggerPath:void 0,GetRenderSchemaByPath:y,GetValueByPath:w=>y(w).defaultValue,isSameToken:()=>!1});if(S==="options"){let w=!1,V=T.defaultValue;for(let I of F)I.value==V&&(w=!0);w||(T.defaultValue=void 0,R());}F!==T[S]&&(T[S]=F,h.add(f),R());}}}catch(f){i.callOnError(f);}},E=async d=>{if(!d)throw Error("\u6CA1\u6709\u8DEF\u5F84");if(!y(d))throw Error("\u8DEF\u5F84\u9519\u8BEF\uFF0C\u6CA1\u6709\u5BF9\u5E94\u7684\u8282\u70B9");h.add(d),R();let T=e.GetNextDependency(d);G(T,d),r.popExecution([d],true);};async function G(d,f){A(f,d);}let B=d=>{if(!d)throw Error("\u6CA1\u6709\u8DEF\u5F84");let f=y(d);f.nodeBucket.defaultValue&&f.nodeBucket.defaultValue.updateInputValueRule(f.defaultValue);},D=(d,f="")=>{let T="name"in d?d.name:void 0,S=T?f===""?T:`${f}.${T}`:f,F=n.signalCreateor(),w=o++,V={getRenderSchema:b=>y(b)},I=async(b,C)=>{let H=b(C),U=y(C.path),W=t.createHistoryAction([{path:C.path,value:U.defaultValue},{path:C.path,value:H}],async K=>{let j=y(K.path);j.defaultValue=K.value,B(K.path),await E(K.path);});U.defaultValue=H,t.pushIntoHistory(W),B(C.path),await E(C.path);},P={...d,disabled:!!d.disabled,hidden:"hidden"in d?d.hidden:false,readonly:"readonly"in d?d.readonly:false,required:"required"in d?d.required:false,path:S,dirtySignal:F,uid:w,nodeBucket:{},validators:new z(S),theme:"secondary",dependOn:async b=>await I(b,{...V,path:S})};return d.type==="group"&&(delete P.nodeBucket,delete P.validators,P.children=d.children.map(b=>D(b,S)),l.set(P.path,P)),p.set(P.path,P.uid),u.set(P.uid,P),P};return {schema:D(s),GetFormData:()=>O(),GetRenderSchemaByPath:y,GetGroupByPath:m,notifyAll:L,convertToRenderSchema:D}}function me(s,e={}){let r=n=>{if(n.type=="group")return {key:n.name||"",isGroup:true,val:n.children.reduce((c,o)=>[...c,r(o)],[])};if(n.type=="input"||n.type=="number"||n.type=="select"||n.type=="checkbox")return {key:n.name,isGroup:false,val:n.defaultValue};throw Error(`\u672A\u5B9A\u4E49\u7684\u7C7B\u578B:${n.type}`)},t=(n,c)=>{if(c.isGroup){let o={};c.key===""?o=n:n[c.key]=o,c.val.forEach(p=>{t(o,p);});}else n[c.key]=c.val;},i=r(s);return t(e,i),e}var ee=(s,e,r)=>{let i=n=>{let c=r.triggerPaths.map(u=>n.GetValueByPath(u)),o=Object.create(null);return Object.defineProperty(o,"triggerTargets",{get:()=>c}),Object.defineProperty(o,"affectedTatget",{get:()=>n.GetRenderSchemaByPath(s)[e]}),r.logic({slot:o})};return {value:r.value,targetPath:s,triggerPaths:r.triggerPaths,priority:r.priority??10,logic:i}},te=(s,e,r)=>{if(!s)throw Error("");let t=s,i=(o,p)=>{e.has(o)||e.set(o,new Set),e.get(o).add(p),r.has(p)||r.set(p,new Set),r.get(p).add(o);};return {SetRule:(o,p,u,l={logic:a=>{}})=>{let a=t(p),h=ee(p,u,{...l,triggerPaths:[o]}),y=[o].map(m=>[m,t(m).defaultValue]);if(i(o,p),a.nodeBucket[u])a.nodeBucket[u].setRule(h,y);else {let m=new $(a[u],u,p);m.setRule(h,y),a.nodeBucket[u]=m;}l.forceNotify&&a.nodeBucket[u].forceNotify();},SetRules:(o,p,u,l={logic:a=>{}})=>{let a=t(p);for(let m of o)i(m,p);let h=ee(p,u,{...l,triggerPaths:o}),y=o.map(m=>[m,t(m).defaultValue]);if(a.nodeBucket[u])a.nodeBucket[u].setRules(h,y);else {let m=new $(a[u],u,p);m.setRules(h,y),a.nodeBucket[u]=m;}l.forceNotify&&a.nodeBucket[u].forceNotify();}}},ne=s=>{let e=s||void 0;if(!e)throw Error("");return {SetStrategy:(t,i,n)=>{e(t).nodeBucket[i].setStrategy(n);}}};var re=s=>{let e=s||void 0;return {SetValidators:(t,i)=>{let n=e(t),c=(p,u,l)=>p(u,l),o=(p,u,l)=>p(u,l);if(!n.validators)throw Error("validator\u6876\u672A\u521D\u59CB\u5316");n.validators.setValidators({logic:p=>c(i.logic,p,e),condition:typeof i.condition=="function"?p=>o(i.condition,p,e):()=>true});}}};function ae(s){let e=new Map,r=new Map,t=new Set,i=(u,l)=>{if(e.get(u)===l)return;e.set(u,l);let a=r.get(u);a&&a(l);};return {pushExecution:(u,l)=>{l&&(t.forEach(a=>i(a,"idle")),t.clear(),e.clear()),u.length!==0&&u.forEach(a=>{t.has(a)||t.add(a),i(a,"calculating"),s(a).forEach(y=>{t.has(y)||(t.add(y),e.has(y)||i(y,"pending"));});});},popExecution:u=>{u.forEach(l=>{i(l,"calculated");});},markError:u=>{i(u,"error"),t.forEach(l=>{let a=e.get(l);l!==u&&(a==="pending"||a==="calculating")&&i(l,"canceled");});},SetTrace:(u,l,a)=>{r.set(u,l);let h=e.get(u)||"idle";return l(h),()=>{r.delete(u);}}}}function oe(s,e,r,t){let i=l=>{let a=s(),h=e(),y=new Set;return a.get(l)?.forEach(m=>y.add(m)),y.size===0?[]:Array.from(y).filter(m=>{let x=h.get(m)||new Set;return !Array.from(x).some(A=>y.has(A))})};return {GetNextDependency:l=>{let a=t();return Array.from(a.get(l)||[])},GetPrevDependency:l=>{let a=r();return Array.from(a.get(l)||[])},GetAllPrevDependency:l=>{let a=e();return Array.from(a.get(l)||[])},GetAllNextDependency:l=>{let a=s();return Array.from(a.get(l)||[])},rebuildDirectDependencyMaps:l=>{let a=new Map,h=new Map;for(let y of l){let m=i(y);a.set(y,new Set(m));for(let x of m)h.has(x)||h.set(x,new Set),h.get(x).add(y);}return {directNextMap:a,directPrevMap:h}}}}function se(s){let e=t=>{let i=[],n=[],c=new Map,o=t.size,p=0,u=0;for(let[l,a]of t)a===0&&n.push(l);if(n.length===0&&o>0)throw Error("\u521D\u59CB\u5165\u5EA6\u6CA1\u6709\u4E3A0\u7684path, \u4F9D\u8D56\u7EDF\u8BA1\u6709\u8BEF\u6216\u5B58\u5728\u73AF");for(;n.length>0;){i.push([...n]);let l=[];for(let a of n){p++,c.set(a,u);let h=s.get(a);if(h)for(let y of h){let m=t.get(y)-1;t.set(y,m),m===0&&l.push(y);}}n=l,u++;}if(p<o)throw Error("\u68C0\u6D4B\u5230\u5FAA\u73AF\u4F9D\u8D56\uFF01");return {steps:i,levelMap:c}};return ()=>{let t=new Map;for(let i of s.keys()){let n=Array.from(s.get(i)||[]);t.has(i)||t.set(i,0);for(let c of n){let o=t.get(c)||0;t.set(c,++o);}}return e(t)}}function ie(){let s=[],e=[],t={canRedo:()=>{},canUndo:()=>{}},i=()=>{if(!s.length)return;let a=s.pop();a?.undoAction(),p(a);},n=()=>{if(!e.length)return;let a=e.pop();a?.redoAction(),u(a,false);},c=a=>{t.canUndo=()=>a(s.length);},o=a=>{t.canRedo=()=>a(e.length);},p=a=>{e.push(a),e.length>100&&e.shift(),t.canRedo(),t.canUndo();},u=(a,h=true)=>{h&&(e.length=0),s.push(a),s.length>100&&s.shift(),t.canUndo(),t.canRedo();};return {Undo:i,Redo:n,PushIntoHistory:u,CreateHistoryAction:(a,h)=>{let[y,m]=a;return {undoAction:()=>h(y),redoAction:()=>h(m)}},initCanUndo:c,initCanRedo:o}}var _=()=>{let s=[];return {on:e=>(s.push(e),()=>{let r=s.indexOf(e);r>-1&&s.splice(r,1);}),call:e=>s.forEach(r=>r(e))}};function le(){let{on:s,call:e}=_();return {onError:s,callOnError:e}}function ce(){let{on:s,call:e}=_();return {onSuccess:s,callOnSuccess:e}}var ue=()=>{let s=new Set,e=new Map,r=(n,c)=>{e.get(n)?.forEach(o=>o(c));},t=(n,c)=>(e.has(n)||e.set(n,new Set),e.get(n).add(c),()=>e.get(n).delete(c));return {usePlugin:n=>(n.apply({on:t}),()=>{s.delete(n);}),emit:r}};function de(){let{on:s,call:e}=_();return {onStart:s,callOnStart:e}}function pe(s,e){let r=false,t=false,i=new Map,n=new Map,c=new Map,o=new Map,p=[],u=new Map,{GetNextDependency:l,GetPrevDependency:a,GetAllPrevDependency:h,GetAllNextDependency:y,rebuildDirectDependencyMaps:m}=oe(()=>i,()=>n,()=>o,()=>c),{SetTrace:x,pushExecution:R,popExecution:O,markError:A}=ae(l),{Undo:L,Redo:E,PushIntoHistory:G,CreateHistoryAction:B,initCanUndo:D,initCanRedo:v}=ie(),{onError:g,callOnError:d}=le(),{onSuccess:f,callOnSuccess:T}=ce(),{onStart:S,callOnStart:F}=de(),{emit:w,usePlugin:V}=ue(),{schema:I,GetFormData:P,GetRenderSchemaByPath:b,GetGroupByPath:C,notifyAll:H,convertToRenderSchema:U}=Z(s,{GetDependencyOrder:()=>p,GetAllNextDependency:y,GetNextDependency:l,GetPrevDependency:a,GetAllPrevDependency:h,GetPathToLevelMap:()=>u},{pushExecution:R,popExecution:O,markError:A},{pushIntoHistory:G,createHistoryAction:B},{callOnError:d,callOnSuccess:T,callOnStart:F,emit:w},e),W=(M,k)=>{let N=C(M),X=U(k,M);return N.children.push(X),N.dirtySignal.value++,X},{SetRule:K,SetRules:j}=te(b,i,n),{SetStrategy:ye}=ne(b),{SetValidators:fe}=re(b),he=se(i),Y=()=>{let M=he();p=M.steps,u=M.levelMap;};return {schema:I,SetRule:(...M)=>{K.apply(null,M),r=true,!t&&new Promise((k,N)=>{t=true,k();}).then(()=>{if(Y(),r){let{directNextMap:k,directPrevMap:N}=m(p.flat());c=k,o=N;}}).finally(()=>{t=false,r=false;});},SetRules:(...M)=>{j.apply(null,M),r=true,!t&&new Promise((k,N)=>{t=true,k();}).then(()=>{if(Y(),r){let{directNextMap:k,directPrevMap:N}=m(p.flat());c=k,o=N;}}).finally(()=>{t=false,r=false;});},SetStrategy:ye,SetValidators:fe,SetTrace:x,usePlugin:V,SetValue:(M,k)=>{b(M).dependOn(()=>k);},GetFormData:P,notifyAll:()=>{Y(),H();},AddNewSchema:W,GetAllDependency:()=>i,GetDependencyOrder:()=>p,Undo:L,Redo:E,initCanUndo:D,initCanRedo:v,onError:g,onSuccess:f,onStart:S}}var q=new Map,ge=(s,e,r)=>{try{if(typeof r.signalCreateor!="function"||typeof r.signalTrigger!="function")throw Error("\u9700\u8981\u5B9A\u4E49signal\u6765\u901A\u77E5ui");if(q.has(s))throw Error("engineID\u91CD\u590D,\u4FEE\u6539id\u6216\u8005\u4F7F\u7528symbol");let t=pe(e,r),{schema:i,GetFormData:n,SetRule:c,SetRules:o,SetStrategy:p,SetValidators:u,SetValue:l,usePlugin:a,notifyAll:h,SetTrace:y,GetAllDependency:m,GetDependencyOrder:x,AddNewSchema:R,Undo:O,Redo:A,initCanUndo:L,initCanRedo:E,onError:G,onSuccess:B,onStart:D}=t,v={config:{SetRule:c,SetRules:o,SetStrategy:p,SetValidators:u,notifyAll:h,SetTrace:y,usePlugin:a},data:{schema:i,GetFormData:n,AddNewSchema:R,SetValue:l},history:{Undo:O,Redo:A,initCanUndo:L,initCanRedo:E},dependency:{GetAllDependency:m,GetDependencyOrder:x},hooks:{onError:G,onSuccess:B,onStart:D}};return q.set(s,v),v}catch(t){throw Error(t)}},st=s=>{if(q.has(s))return q.get(s);throw Error("\u4E0D\u5B58\u5728\u7684id")},it=s=>{q.delete(s);},lt=ge;exports.deleteEngine=it;exports.useEngine=st;exports.useEngineManager=ge;exports.useMeshFlow=lt;
|
|
1
|
+
'use strict';var Q=class{computedRules=[];store={OR:async(e,r)=>{let t,l,n=this.computedRules;for(let c of n){let o=await c.logic(e);if(c.entityId==="__base__"){l=o;continue}if(o){t=c.value;break}}return typeof t>"u"&&(t=l),{res:t,version:r}},PRIORITY:async(e,r)=>{let t=null,l=this.computedRules;try{for(let n of l){let c=await n.logic(e);if(c!==void 0){t=c;break}}}catch(n){throw n}return {res:t,version:r}}};CurrentStrategy=()=>{};CurrentStrategyType="PRIORITY";getRules=()=>{};constructor(e){this.getRules=e,this.CurrentStrategy=this.store.PRIORITY,this.updateComputedRules();}updateComputedRules(){let e=this.getRules();this.CurrentStrategyType==="PRIORITY"?this.computedRules=Array.from(e.values()).map(r=>Array.from(r)).flat().sort((r,t)=>t.priority-r.priority):this.computedRules=Array.from(e.values()).map(r=>Array.from(r)).flat();}setStrategy(e){this.CurrentStrategy=this.store[e],this.updateComputedRules();}evaluate(e,r){return this.CurrentStrategy(e,r)}},$=class{path;strategy;contract;rules=new Map;isDefaultValue=false;id=0;cache=void 0;pendingPromise=null;version=0;deps=new Map;_forceNotify=false;promiseToken=null;globalCalcCount=0;constructor(e,r,t){let l=()=>this.rules;this.strategy=new Q(l),this.path=t,this.isDefaultValue=r==="defaultValue",this.contract=this.inferType(e),this.cache=e,this.setRule({priority:0,entityId:"__base__",logic:()=>e});}forceNotify(){this._forceNotify=true;}isForceNotify(){return this._forceNotify}setStrategy(e){this.strategy.setStrategy(e);}updateInputValueRule(e){this.isDefaultValue&&this.setRule({priority:1,entityId:"__input_value__",logic:()=>e});}setDefaultRule(e){let r=new Set;r.add(e),this.rules.set(e.id,r);}setRules(e,r){r&&this.updateDeps(r);let t=++this.id,l={...e,entityId:t};for(let n of e.triggerPaths)this.rules.has(n)||this.rules.set(n,new Set),this.rules.get(n).add(l);return this.strategy.updateComputedRules(),()=>{for(let n of e.triggerPaths){let c=this.rules.get(n);c&&(c.delete(l),c.size===0&&(this.rules.delete(n),this.deps.delete(n)));}this.strategy.updateComputedRules();}}updateDeps(e){for(let[r,t]of e)this.deps.set(r,t);}setRule(e,r){if(r&&this.updateDeps(r),typeof e.entityId=="string"){this.setDefaultRule(e);return}let t=++this.id,l={...e,entityId:t};if(e)for(let n of e.triggerPaths)this.rules.has(n)||this.rules.set(n,new Set),this.rules.get(n).add(l);return this.strategy.updateComputedRules(),()=>{for(let n of e.triggerPaths){let c=this.rules.get(n);c&&(c.delete(l),c.size===0&&(this.rules.delete(n),this.deps.delete(n)));}this.strategy.updateComputedRules();}}async evaluate(e){let r=null;if(e.GetToken&&(r=e.GetToken()),this.pendingPromise&&this.promiseToken!==r&&(this.pendingPromise=null,this.promiseToken=null),this.pendingPromise)return this.pendingPromise;this.promiseToken=r;let t=++this.version;return this.pendingPromise=(async()=>{try{await Promise.resolve();let l=!1;if(typeof e.triggerPath=="string"){l=!0;let o=this.deps.get(e.triggerPath),d=e.GetValueByPath(e.triggerPath);if(typeof o=="object"||typeof d=="object")l=!1;else {let u=Array.from(this.deps.keys());for(let i of u){let a=this.deps.get(i),h=e.GetValueByPath(i);if(a!==h){l=!1;break}}}}if(l)return this.cache;let{res:n,version:c}=await this.strategy.evaluate(e,t);if(r!==this.promiseToken)return this.cache;if(c<this.version)return this.cache;if(this.inferType(n)!==this.contract&&`${this.contract}`,this.cache=n,r===this.promiseToken){let o=Array.from(this.deps.keys());for(let d of o){let u=e.GetValueByPath(d);this.deps.set(d,u);}}return n}catch(l){throw {path:this.path,info:l}}finally{this.promiseToken===r&&(this.pendingPromise=null,this.promiseToken=null);}})(),this.pendingPromise}inferType(e){return Array.isArray(e)?"array":typeof e}},z=class{validators=[];defaultValidators=[];path="";constructor(e){this.path=e,this.SetDefaultValidators();}setValidators(e){this.validators.push(e);}SetDefaultValidators(){let e={logic:t=>t||typeof t=="number"?true:`${this.path}\u4E0D\u80FD\u4E3A\u7A7A`,condition:t=>!!t.required},r={logic:function(t){return t.length>this.options.maxLength?`\u8D85\u51FA\u6700\u5927\u957F\u5EA6\uFF0C\u6700\u5927\u957F\u5EA6\u4E3A${this.options.maxLength}`:true},condition:function(t){return typeof t.maxLength!="number"?false:(r.options={maxLength:t.maxLength},t.type==="input"&&t.hidden===false)},options:{}};this.defaultValidators.push(e),this.defaultValidators.push(r);}evaluate(e,r){let t=true,l=[...this.defaultValidators,...this.validators];for(let n of l){if(!n.condition(r))continue;let o=n.logic(e);if(typeof o!="boolean"){t=o;break}}return t}};function J(s,e,r,t,l){let n=new Map;return (o,d)=>{let i=Symbol("token");n.set(o,i);let a=false,h=new Set,y=new Set,m=new Set(s.GetAllNextDependency(o));m.add(o);let v=new Map,R=new Map,V=performance.now(),A=s.GetPathToLevelMap(),E=A.get(o)??0;m.forEach(x=>{if(x===o||d.includes(x))return;let p=s.GetPrevDependency(x).filter(f=>m.has(f)).length;p>0&&R.set(x,p);}),h.add(o);let G=Array.from(d).map(x=>(v.set(x,(v.get(x)||0)+1),{target:x,trigger:o,isReleased:false}));e.pushExecution([...Array.from(d),o],true),`${o}${i.description}`,t.callOnStart({path:o});let B=async x=>{let{target:g,trigger:p}=x;try{if(n.get(o)!==i)return;let f=!1,T=!1,S=r.GetRenderSchemaByPath(g);t.emit("node:start",{path:g});for(let F in S.nodeBucket){let w=S.nodeBucket[F],O=await w.evaluate({affectKey:F,triggerPath:p,GetRenderSchemaByPath:r.GetRenderSchemaByPath,GetValueByPath:P=>r.GetRenderSchemaByPath(P).defaultValue,GetToken:()=>i});if(n.get(o)!==i){t.emit("node:intercept",{path:g,reason:`\u4EE4\u724C\u8FC7\u671F\uFF0C\u4E22\u5F03${g}\u65E7\u4EFB\u52A1\u8BA1\u7B97\u7ED3\u679C`});return}F==="options"&&(O.some(b=>b.value==S.defaultValue)||(S.defaultValue=void 0,f=!0)),O!==S[F]&&(S[F]=O,f=!0,t.emit("node:bucket:success",{path:g,key:F,value:O})),w.isForceNotify()&&(T=!0),f&&l.flushPathSet.add(g);let I=s.GetNextDependency(g);(f||T)&&s.GetAllNextDependency(g).forEach(b=>m.add(b));for(let P of I){if(h.has(P)){t.emit("node:intercept",{path:P,reason:` \u4E0B\u6E38 ${P} \u5DF2\u7531\u5176\u4ED6\u8DEF\u5F84\u5904\u7406`});continue}if(f||T){if(!R.has(P)&&!h.has(P)&&!v.has(P)){let H=s.GetPrevDependency(P).filter(U=>m.has(U)).length;R.set(P,H);}let b=R.get(P)??0,C=Math.max(0,b-1);C<=0?(R.delete(P),G.push({target:P,trigger:g,isReleased:!0}),v.set(P,1),e.pushExecution([P]),t.emit("node:release",{path:P,reason:` \u4E0A\u6E38${g} \u503C\u53D8\u4E86`})):R.set(P,C);}else t.emit("node:stagnate",{path:P,reason:` \u4E0A\u6E38${g} \u503C\u672A\u53D8`});}}if(t.emit("node:success",{path:g}),h.add(g),performance.now()-V>16&&(await new Promise(F=>requestAnimationFrame(F)),V=performance.now(),n.get(o)!==i))return;n.get(o)===i&&l.requestUpdate();}catch(f){t.emit("node:error",{path:g,error:f});let T=Symbol("abort");n.set(o,T),G.length=0,R.clear(),y.clear(),e.markError(g),t.callOnError(f);}finally{n.get(o)===i&&(y.delete(g),e.popExecution([g]),a||(t.emit("flow:fire",{path:g,reason:"\u4EFB\u52A1\u5F52\u822A"}),D()));}},D=async()=>{if(n.get(o)!==i){a=false;return}a=true;try{for(;(G.length>0||R.size>0)&&n.get(o)===i;){if(G.length>0){if(y.size>=20){a=!1;return}let x=G.shift(),{target:g}=x;if(h.has(g)){t.emit("node:intercept",{path:g,reason:` \u62D2\u7EDD\u91CD\u5165${g},\u5DF2\u8BA1\u7B97\u5B8C\u6210`});continue}let p=v.get(g)||0;p<=1?v.delete(g):v.set(g,p-1);let f=A.get(g)??0;if(f>E+1&&!x.isReleased){t.emit("node:intercept",{path:g,reason:` ${g} \u5C42\u7EA7\u592A\u6DF1(${f})\uFF0C\u5F53\u524D\u6C34\u4F4D(${E})`}),R.set(g,1);continue}y.add(g),t.emit("node:processing",{path:g}),e.pushExecution([g]),B(x);continue}if(y.size>0){t.emit("flow:wait",{reason:`\u961F\u5217\u5DF2\u7A7A,\u7184\u706B\u7B49\u5F85\uFF0C\u7B49\u5F85\u5F02\u6B65\u4EFB\u52A1\u5F52\u822A | \u98DE\u884C\u4E2D: ${Array.from(y).join(",")} | `}),a=!1;return}if(R.size>0){let x=!1,g=[];for(let[p]of R)s.GetPrevDependency(p).some(S=>h.has(S)?!1:y.has(S)||v.has(S)||m.has(S)?!0:(A.get(S)??0)>E)||g.push(p);if(g.length>0&&(g.forEach(p=>{R.delete(p),G.push({target:p,trigger:o,isReleased:!0}),v.set(p,1),e.pushExecution([p]);}),x=!0),x)continue;if(Array.from(R.keys()).some(f=>s.GetPrevDependency(f).some(S=>m.has(S)&&!h.has(S)))){t.emit("flow:wait",{reason:"\u5C1A\u6709\u6D3B\u8DC3\u4F9D\u8D56 \u672A\u5B8C\u6210,\u7184\u706B\u7B49\u5F85"}),a=!1;return}if(E++,E>2e3)break;continue}}}finally{R.size,y.size,G.length,a=false,t.emit("flow:wait",{reason:"\u7184\u706B\u9759\u9ED8"}),Promise.resolve().then(()=>{R.size===0&&y.size===0&&G.length===0&&t.callOnSuccess();});}};D();}}function Z(s,e,r,t,l,n){let c=me(s),o=0,d=new Map,u=new Map,i=new Map,a=false,h=new Set,y=p=>{let f=d.get(p);return u.get(f)},m=p=>i.get(p),v=async()=>{let p=Array.from(h);h.clear();for(let f of p){let T=y(f);n.signalTrigger(T.dirtySignal);}},R=()=>{a||(a=true,Promise.resolve().then(()=>{try{for(;h.size>0;)v();}finally{a=false;}}));},V=()=>{let p=(f,T,S)=>{if(typeof f!="object"||f===null||Array.isArray(f)){if(S.length>0){let w=S[S.length-1];T[w]=y(S.join(".")).defaultValue;}return}let F=Object.getOwnPropertyNames(f);for(let w of F)S.push(w),p(f[w],f,S),S.pop();};return p(c,null,[]),c},A=J(e,r,{GetRenderSchemaByPath:y},l,{requestUpdate:R,flushPathSet:h}),L=async()=>{let p=e.GetDependencyOrder().flat();try{for(let f of p){let T=y(f);for(let S in T.nodeBucket){let F=await T.nodeBucket[S].evaluate({affectKey:S,triggerPath:void 0,GetRenderSchemaByPath:y,GetValueByPath:w=>y(w).defaultValue,isSameToken:()=>!1});if(S==="options"){let w=!1,O=T.defaultValue;for(let I of F)I.value==O&&(w=!0);w||(T.defaultValue=void 0,R());}F!==T[S]&&(T[S]=F,h.add(f),R());}}}catch(f){l.callOnError(f);}},E=async p=>{if(!p)throw Error("\u6CA1\u6709\u8DEF\u5F84");if(!y(p))throw Error("\u8DEF\u5F84\u9519\u8BEF\uFF0C\u6CA1\u6709\u5BF9\u5E94\u7684\u8282\u70B9");h.add(p),R();let T=e.GetNextDependency(p);G(T,p),r.popExecution([p],true);};async function G(p,f){A(f,p);}let B=p=>{if(!p)throw Error("\u6CA1\u6709\u8DEF\u5F84");let f=y(p);f.nodeBucket.defaultValue&&f.nodeBucket.defaultValue.updateInputValueRule(f.defaultValue);},D=(p,f="")=>{let T="name"in p?p.name:void 0,S=T?f===""?T:`${f}.${T}`:f,F=n.signalCreateor(),w=o++,O={getRenderSchema:b=>y(b)},I=async(b,C)=>{let H=b(C),U=y(C.path),W=t.createHistoryAction([{path:C.path,value:U.defaultValue},{path:C.path,value:H}],async K=>{let j=y(K.path);j.defaultValue=K.value,B(K.path),await E(K.path);});U.defaultValue=H,t.pushIntoHistory(W),B(C.path),await E(C.path);},P={...p,disabled:!!p.disabled,hidden:"hidden"in p?p.hidden:false,readonly:"readonly"in p?p.readonly:false,required:"required"in p?p.required:false,path:S,dirtySignal:F,uid:w,nodeBucket:{},validators:new z(S),theme:"secondary",dependOn:async b=>await I(b,{...O,path:S})};return p.type==="group"&&(delete P.nodeBucket,delete P.validators,P.children=p.children.map(b=>D(b,S)),i.set(P.path,P)),d.set(P.path,P.uid),u.set(P.uid,P),P};return {schema:D(s),GetFormData:()=>V(),GetRenderSchemaByPath:y,GetGroupByPath:m,notifyAll:L,convertToRenderSchema:D}}function me(s,e={}){let r=n=>{if(n.type=="group")return {key:n.name||"",isGroup:true,val:n.children.reduce((c,o)=>[...c,r(o)],[])};if(n.type=="input"||n.type=="number"||n.type=="select"||n.type=="checkbox")return {key:n.name,isGroup:false,val:n.defaultValue};throw Error(`\u672A\u5B9A\u4E49\u7684\u7C7B\u578B:${n.type}`)},t=(n,c)=>{if(c.isGroup){let o={};c.key===""?o=n:n[c.key]=o,c.val.forEach(d=>{t(o,d);});}else n[c.key]=c.val;},l=r(s);return t(e,l),e}var ee=(s,e,r)=>{let l=n=>{let c=r.triggerPaths.map(u=>n.GetValueByPath(u)),o=Object.create(null);return Object.defineProperty(o,"triggerTargets",{get:()=>c}),Object.defineProperty(o,"affectedTatget",{get:()=>n.GetRenderSchemaByPath(s)[e]}),r.logic({slot:o})};return {value:r.value,targetPath:s,triggerPaths:r.triggerPaths,priority:r.priority??10,logic:l}},te=(s,e,r)=>{if(!s)throw Error("");let t=s,l=(o,d)=>{e.has(o)||e.set(o,new Set),e.get(o).add(d),r.has(d)||r.set(d,new Set),r.get(d).add(o);};return {SetRule:(o,d,u,i={logic:a=>{}})=>{let a=t(d),h=ee(d,u,{...i,triggerPaths:[o]}),y=[o].map(m=>[m,t(m).defaultValue]);if(l(o,d),a.nodeBucket[u])a.nodeBucket[u].setRule(h,y);else {let m=new $(a[u],u,d);m.setRule(h,y),a.nodeBucket[u]=m;}i.forceNotify&&a.nodeBucket[u].forceNotify();},SetRules:(o,d,u,i={logic:a=>{}})=>{let a=t(d);for(let m of o)l(m,d);let h=ee(d,u,{...i,triggerPaths:o}),y=o.map(m=>[m,t(m).defaultValue]);if(a.nodeBucket[u])a.nodeBucket[u].setRules(h,y);else {let m=new $(a[u],u,d);m.setRules(h,y),a.nodeBucket[u]=m;}i.forceNotify&&a.nodeBucket[u].forceNotify();}}},ne=s=>{let e=s||void 0;if(!e)throw Error("");return {SetStrategy:(t,l,n)=>{e(t).nodeBucket[l].setStrategy(n);}}};var re=s=>{let e=s||void 0;return {SetValidators:(t,l)=>{let n=e(t),c=(d,u,i)=>d(u,i),o=(d,u,i)=>d(u,i);if(!n.validators)throw Error("validator\u6876\u672A\u521D\u59CB\u5316");n.validators.setValidators({logic:d=>c(l.logic,d,e),condition:typeof l.condition=="function"?d=>o(l.condition,d,e):()=>true});}}};function ae(s){let e=new Map,r=new Map,t=new Set,l=(u,i)=>{if(e.get(u)===i)return;e.set(u,i);let a=r.get(u);a&&a(i);};return {pushExecution:(u,i)=>{i&&(t.forEach(a=>l(a,"idle")),t.clear(),e.clear()),u.length!==0&&u.forEach(a=>{t.has(a)||t.add(a),l(a,"calculating"),s(a).forEach(y=>{t.has(y)||(t.add(y),e.has(y)||l(y,"pending"));});});},popExecution:u=>{u.forEach(i=>{l(i,"calculated");});},markError:u=>{l(u,"error"),t.forEach(i=>{let a=e.get(i);i!==u&&(a==="pending"||a==="calculating")&&l(i,"canceled");});},SetTrace:(u,i,a)=>{r.set(u,i);let h=e.get(u)||"idle";return i(h),()=>{r.delete(u);}}}}function oe(s,e,r,t){let l=i=>{let a=s(),h=e(),y=new Set;return a.get(i)?.forEach(m=>y.add(m)),y.size===0?[]:Array.from(y).filter(m=>{let v=h.get(m)||new Set;return !Array.from(v).some(A=>y.has(A))})};return {GetNextDependency:i=>{let a=t();return Array.from(a.get(i)||[])},GetPrevDependency:i=>{let a=r();return Array.from(a.get(i)||[])},GetAllPrevDependency:i=>{let a=e();return Array.from(a.get(i)||[])},GetAllNextDependency:i=>{let a=s();return Array.from(a.get(i)||[])},rebuildDirectDependencyMaps:i=>{let a=new Map,h=new Map;for(let y of i){let m=l(y);a.set(y,new Set(m));for(let v of m)h.has(v)||h.set(v,new Set),h.get(v).add(y);}return {directNextMap:a,directPrevMap:h}}}}function se(s){let e=t=>{let l=[],n=[],c=new Map,o=t.size,d=0,u=0;for(let[i,a]of t)a===0&&n.push(i);if(n.length===0&&o>0)throw Error("\u521D\u59CB\u5165\u5EA6\u6CA1\u6709\u4E3A0\u7684path, \u4F9D\u8D56\u7EDF\u8BA1\u6709\u8BEF\u6216\u5B58\u5728\u73AF");for(;n.length>0;){l.push([...n]);let i=[];for(let a of n){d++,c.set(a,u);let h=s.get(a);if(h)for(let y of h){let m=t.get(y)-1;t.set(y,m),m===0&&i.push(y);}}n=i,u++;}if(d<o)throw Error("\u68C0\u6D4B\u5230\u5FAA\u73AF\u4F9D\u8D56\uFF01");return {steps:l,levelMap:c}};return ()=>{let t=new Map;for(let l of s.keys()){let n=Array.from(s.get(l)||[]);t.has(l)||t.set(l,0);for(let c of n){let o=t.get(c)||0;t.set(c,++o);}}return e(t)}}function ie(){let s=[],e=[],t={canRedo:()=>{},canUndo:()=>{}},l=()=>{if(!s.length)return;let a=s.pop();a?.undoAction(),d(a);},n=()=>{if(!e.length)return;let a=e.pop();a?.redoAction(),u(a,false);},c=a=>{t.canUndo=()=>a(s.length);},o=a=>{t.canRedo=()=>a(e.length);},d=a=>{e.push(a),e.length>100&&e.shift(),t.canRedo(),t.canUndo();},u=(a,h=true)=>{h&&(e.length=0),s.push(a),s.length>100&&s.shift(),t.canUndo(),t.canRedo();};return {Undo:l,Redo:n,PushIntoHistory:u,CreateHistoryAction:(a,h)=>{let[y,m]=a;return {undoAction:()=>h(y),redoAction:()=>h(m)}},initCanUndo:c,initCanRedo:o}}var _=()=>{let s=[];return {on:e=>(s.push(e),()=>{let r=s.indexOf(e);r>-1&&s.splice(r,1);}),call:e=>s.forEach(r=>r(e))}};function le(){let{on:s,call:e}=_();return {onError:s,callOnError:e}}function ce(){let{on:s,call:e}=_();return {onSuccess:s,callOnSuccess:e}}var ue=()=>{let s=new Set,e=new Map,r=(n,c)=>{e.get(n)?.forEach(o=>o(c));},t=(n,c)=>(e.has(n)||e.set(n,new Set),e.get(n).add(c),()=>e.get(n).delete(c));return {usePlugin:n=>{let c=new Set,o=(d,u)=>{let i=t(d,u);return c.add(i),i};return n.apply({on:o}),s.add(n),()=>{c.forEach(d=>d()),c.clear(),s.delete(n);}},emit:r}};function de(){let{on:s,call:e}=_();return {onStart:s,callOnStart:e}}function pe(s,e){let r=false,t=false,l=new Map,n=new Map,c=new Map,o=new Map,d=[],u=new Map,{GetNextDependency:i,GetPrevDependency:a,GetAllPrevDependency:h,GetAllNextDependency:y,rebuildDirectDependencyMaps:m}=oe(()=>l,()=>n,()=>o,()=>c),{SetTrace:v,pushExecution:R,popExecution:V,markError:A}=ae(i),{Undo:L,Redo:E,PushIntoHistory:G,CreateHistoryAction:B,initCanUndo:D,initCanRedo:x}=ie(),{onError:g,callOnError:p}=le(),{onSuccess:f,callOnSuccess:T}=ce(),{onStart:S,callOnStart:F}=de(),{emit:w,usePlugin:O}=ue(),{schema:I,GetFormData:P,GetRenderSchemaByPath:b,GetGroupByPath:C,notifyAll:H,convertToRenderSchema:U}=Z(s,{GetDependencyOrder:()=>d,GetAllNextDependency:y,GetNextDependency:i,GetPrevDependency:a,GetAllPrevDependency:h,GetPathToLevelMap:()=>u},{pushExecution:R,popExecution:V,markError:A},{pushIntoHistory:G,createHistoryAction:B},{callOnError:p,callOnSuccess:T,callOnStart:F,emit:w},e),W=(M,k)=>{let N=C(M),X=U(k,M);return N.children.push(X),N.dirtySignal.value++,X},{SetRule:K,SetRules:j}=te(b,l,n),{SetStrategy:ye}=ne(b),{SetValidators:fe}=re(b),he=se(l),Y=()=>{let M=he();d=M.steps,u=M.levelMap;};return {schema:I,SetRule:(...M)=>{K.apply(null,M),r=true,!t&&new Promise((k,N)=>{t=true,k();}).then(()=>{if(Y(),r){let{directNextMap:k,directPrevMap:N}=m(d.flat());c=k,o=N;}}).finally(()=>{t=false,r=false;});},SetRules:(...M)=>{j.apply(null,M),r=true,!t&&new Promise((k,N)=>{t=true,k();}).then(()=>{if(Y(),r){let{directNextMap:k,directPrevMap:N}=m(d.flat());c=k,o=N;}}).finally(()=>{t=false,r=false;});},SetStrategy:ye,SetValidators:fe,SetTrace:v,usePlugin:O,SetValue:(M,k)=>{b(M).dependOn(()=>k);},GetFormData:P,notifyAll:()=>{Y(),H();},AddNewSchema:W,GetAllDependency:()=>l,GetDependencyOrder:()=>d,Undo:L,Redo:E,initCanUndo:D,initCanRedo:x,onError:g,onSuccess:f,onStart:S}}var q=new Map,ge=(s,e,r)=>{try{if(typeof r.signalCreateor!="function"||typeof r.signalTrigger!="function")throw Error("\u9700\u8981\u5B9A\u4E49signal\u6765\u901A\u77E5ui");if(q.has(s))throw Error("engineID\u91CD\u590D,\u4FEE\u6539id\u6216\u8005\u4F7F\u7528symbol");let t=pe(e,r),{schema:l,GetFormData:n,SetRule:c,SetRules:o,SetStrategy:d,SetValidators:u,SetValue:i,usePlugin:a,notifyAll:h,SetTrace:y,GetAllDependency:m,GetDependencyOrder:v,AddNewSchema:R,Undo:V,Redo:A,initCanUndo:L,initCanRedo:E,onError:G,onSuccess:B,onStart:D}=t,x={config:{SetRule:c,SetRules:o,SetStrategy:d,SetValidators:u,notifyAll:h,SetTrace:y,usePlugin:a},data:{schema:l,GetFormData:n,AddNewSchema:R,SetValue:i},history:{Undo:V,Redo:A,initCanUndo:L,initCanRedo:E},dependency:{GetAllDependency:m,GetDependencyOrder:v},hooks:{onError:G,onSuccess:B,onStart:D}};return q.set(s,x),x}catch(t){throw Error(t)}},st=s=>{if(q.has(s))return q.get(s);throw Error("\u4E0D\u5B58\u5728\u7684id")},it=s=>{q.delete(s);},lt=ge;exports.deleteEngine=it;exports.useEngine=st;exports.useEngineManager=ge;exports.useMeshFlow=lt;
|
package/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var Q=class{computedRules=[];store={OR:async(e,r)=>{let t,i,n=this.computedRules;for(let c of n){let o=await c.logic(e);if(c.entityId==="__base__"){i=o;continue}if(o){t=c.value;break}}return typeof t>"u"&&(t=i),{res:t,version:r}},PRIORITY:async(e,r)=>{let t=null,i=this.computedRules;try{for(let n of i){let c=await n.logic(e);if(c!==void 0){t=c;break}}}catch(n){throw n}return {res:t,version:r}}};CurrentStrategy=()=>{};CurrentStrategyType="PRIORITY";getRules=()=>{};constructor(e){this.getRules=e,this.CurrentStrategy=this.store.PRIORITY,this.updateComputedRules();}updateComputedRules(){let e=this.getRules();this.CurrentStrategyType==="PRIORITY"?this.computedRules=Array.from(e.values()).map(r=>Array.from(r)).flat().sort((r,t)=>t.priority-r.priority):this.computedRules=Array.from(e.values()).map(r=>Array.from(r)).flat();}setStrategy(e){this.CurrentStrategy=this.store[e],this.updateComputedRules();}evaluate(e,r){return this.CurrentStrategy(e,r)}},$=class{path;strategy;contract;rules=new Map;isDefaultValue=false;id=0;cache=void 0;pendingPromise=null;version=0;deps=new Map;_forceNotify=false;promiseToken=null;globalCalcCount=0;constructor(e,r,t){let i=()=>this.rules;this.strategy=new Q(i),this.path=t,this.isDefaultValue=r==="defaultValue",this.contract=this.inferType(e),this.cache=e,this.setRule({priority:0,entityId:"__base__",logic:()=>e});}forceNotify(){this._forceNotify=true;}isForceNotify(){return this._forceNotify}setStrategy(e){this.strategy.setStrategy(e);}updateInputValueRule(e){this.isDefaultValue&&this.setRule({priority:1,entityId:"__input_value__",logic:()=>e});}setDefaultRule(e){let r=new Set;r.add(e),this.rules.set(e.id,r);}setRules(e,r){r&&this.updateDeps(r);let t=++this.id,i={...e,entityId:t};for(let n of e.triggerPaths)this.rules.has(n)||this.rules.set(n,new Set),this.rules.get(n).add(i);return this.strategy.updateComputedRules(),()=>{for(let n of e.triggerPaths){let c=this.rules.get(n);c&&(c.delete(i),c.size===0&&(this.rules.delete(n),this.deps.delete(n)));}this.strategy.updateComputedRules();}}updateDeps(e){for(let[r,t]of e)this.deps.set(r,t);}setRule(e,r){if(r&&this.updateDeps(r),typeof e.entityId=="string"){this.setDefaultRule(e);return}let t=++this.id,i={...e,entityId:t};if(e)for(let n of e.triggerPaths)this.rules.has(n)||this.rules.set(n,new Set),this.rules.get(n).add(i);return this.strategy.updateComputedRules(),()=>{for(let n of e.triggerPaths){let c=this.rules.get(n);c&&(c.delete(i),c.size===0&&(this.rules.delete(n),this.deps.delete(n)));}this.strategy.updateComputedRules();}}async evaluate(e){let r=null;if(e.GetToken&&(r=e.GetToken()),this.pendingPromise&&this.promiseToken!==r&&(this.pendingPromise=null,this.promiseToken=null),this.pendingPromise)return this.pendingPromise;this.promiseToken=r;let t=++this.version;return this.pendingPromise=(async()=>{try{await Promise.resolve();let i=!1;if(typeof e.triggerPath=="string"){i=!0;let o=this.deps.get(e.triggerPath),p=e.GetValueByPath(e.triggerPath);if(typeof o=="object"||typeof p=="object")i=!1;else {let u=Array.from(this.deps.keys());for(let l of u){let a=this.deps.get(l),h=e.GetValueByPath(l);if(a!==h){i=!1;break}}}}if(i)return this.cache;let{res:n,version:c}=await this.strategy.evaluate(e,t);if(r!==this.promiseToken)return this.cache;if(c<this.version)return this.cache;if(this.inferType(n)!==this.contract&&`${this.contract}`,this.cache=n,r===this.promiseToken){let o=Array.from(this.deps.keys());for(let p of o){let u=e.GetValueByPath(p);this.deps.set(p,u);}}return n}catch(i){throw {path:this.path,info:i}}finally{this.promiseToken===r&&(this.pendingPromise=null,this.promiseToken=null);}})(),this.pendingPromise}inferType(e){return Array.isArray(e)?"array":typeof e}},z=class{validators=[];defaultValidators=[];path="";constructor(e){this.path=e,this.SetDefaultValidators();}setValidators(e){this.validators.push(e);}SetDefaultValidators(){let e={logic:t=>t||typeof t=="number"?true:`${this.path}\u4E0D\u80FD\u4E3A\u7A7A`,condition:t=>!!t.required},r={logic:function(t){return t.length>this.options.maxLength?`\u8D85\u51FA\u6700\u5927\u957F\u5EA6\uFF0C\u6700\u5927\u957F\u5EA6\u4E3A${this.options.maxLength}`:true},condition:function(t){return typeof t.maxLength!="number"?false:(r.options={maxLength:t.maxLength},t.type==="input"&&t.hidden===false)},options:{}};this.defaultValidators.push(e),this.defaultValidators.push(r);}evaluate(e,r){let t=true,i=[...this.defaultValidators,...this.validators];for(let n of i){if(!n.condition(r))continue;let o=n.logic(e);if(typeof o!="boolean"){t=o;break}}return t}};function J(s,e,r,t,i){let n=new Map;return (o,p)=>{let l=Symbol("token");n.set(o,l);let a=false,h=new Set,y=new Set,m=new Set(s.GetAllNextDependency(o));m.add(o);let x=new Map,R=new Map,O=performance.now(),A=s.GetPathToLevelMap(),E=A.get(o)??0;m.forEach(v=>{if(v===o||p.includes(v))return;let d=s.GetPrevDependency(v).filter(f=>m.has(f)).length;d>0&&R.set(v,d);}),h.add(o);let G=Array.from(p).map(v=>(x.set(v,(x.get(v)||0)+1),{target:v,trigger:o,isReleased:false}));e.pushExecution([...Array.from(p),o],true),`${o}${l.description}`,t.callOnStart({path:o});let B=async v=>{let{target:g,trigger:d}=v;try{if(n.get(o)!==l)return;let f=!1,T=!1,S=r.GetRenderSchemaByPath(g);t.emit("node:start",{path:g});for(let F in S.nodeBucket){let w=S.nodeBucket[F],V=await w.evaluate({affectKey:F,triggerPath:d,GetRenderSchemaByPath:r.GetRenderSchemaByPath,GetValueByPath:P=>r.GetRenderSchemaByPath(P).defaultValue,GetToken:()=>l});if(n.get(o)!==l){t.emit("node:intercept",{path:g,reason:`\u4EE4\u724C\u8FC7\u671F\uFF0C\u4E22\u5F03${g}\u65E7\u4EFB\u52A1\u8BA1\u7B97\u7ED3\u679C`});return}F==="options"&&(V.some(b=>b.value==S.defaultValue)||(S.defaultValue=void 0,f=!0)),V!==S[F]&&(S[F]=V,f=!0,t.emit("node:bucket:success",{path:g,key:F,value:V})),w.isForceNotify()&&(T=!0),f&&i.flushPathSet.add(g);let I=s.GetNextDependency(g);(f||T)&&s.GetAllNextDependency(g).forEach(b=>m.add(b));for(let P of I){if(h.has(P)){t.emit("node:intercept",{path:P,reason:` \u4E0B\u6E38 ${P} \u5DF2\u7531\u5176\u4ED6\u8DEF\u5F84\u5904\u7406`});continue}if(f||T){if(!R.has(P)&&!h.has(P)&&!x.has(P)){let H=s.GetPrevDependency(P).filter(U=>m.has(U)).length;R.set(P,H);}let b=R.get(P)??0,C=Math.max(0,b-1);C<=0?(R.delete(P),G.push({target:P,trigger:g,isReleased:!0}),x.set(P,1),e.pushExecution([P]),t.emit("node:release",{path:P,reason:` \u4E0A\u6E38${g} \u503C\u53D8\u4E86`})):R.set(P,C);}else t.emit("node:stagnate",{path:P,reason:` \u4E0A\u6E38${g} \u503C\u672A\u53D8`});}}if(t.emit("node:success",{path:g}),h.add(g),performance.now()-O>16&&(await new Promise(F=>requestAnimationFrame(F)),O=performance.now(),n.get(o)!==l))return;n.get(o)===l&&i.requestUpdate();}catch(f){t.emit("node:error",{path:g,error:f});let T=Symbol("abort");n.set(o,T),G.length=0,R.clear(),y.clear(),e.markError(g),t.callOnError(f);}finally{n.get(o)===l&&(y.delete(g),e.popExecution([g]),a||(t.emit("flow:fire",{path:g,reason:"\u4EFB\u52A1\u5F52\u822A"}),D()));}},D=async()=>{if(n.get(o)!==l){a=false;return}a=true;try{for(;(G.length>0||R.size>0)&&n.get(o)===l;){if(G.length>0){if(y.size>=20){a=!1;return}let v=G.shift(),{target:g}=v;if(h.has(g)){t.emit("node:intercept",{path:g,reason:` \u62D2\u7EDD\u91CD\u5165${g},\u5DF2\u8BA1\u7B97\u5B8C\u6210`});continue}let d=x.get(g)||0;d<=1?x.delete(g):x.set(g,d-1);let f=A.get(g)??0;if(f>E+1&&!v.isReleased){t.emit("node:intercept",{path:g,reason:` ${g} \u5C42\u7EA7\u592A\u6DF1(${f})\uFF0C\u5F53\u524D\u6C34\u4F4D(${E})`}),R.set(g,1);continue}y.add(g),t.emit("node:processing",{path:g}),e.pushExecution([g]),B(v);continue}if(y.size>0){t.emit("flow:wait",{reason:`\u961F\u5217\u5DF2\u7A7A,\u7184\u706B\u7B49\u5F85\uFF0C\u7B49\u5F85\u5F02\u6B65\u4EFB\u52A1\u5F52\u822A | \u98DE\u884C\u4E2D: ${Array.from(y).join(",")} | `}),a=!1;return}if(R.size>0){let v=!1,g=[];for(let[d]of R)s.GetPrevDependency(d).some(S=>h.has(S)?!1:y.has(S)||x.has(S)||m.has(S)?!0:(A.get(S)??0)>E)||g.push(d);if(g.length>0&&(g.forEach(d=>{R.delete(d),G.push({target:d,trigger:o,isReleased:!0}),x.set(d,1),e.pushExecution([d]);}),v=!0),v)continue;if(Array.from(R.keys()).some(f=>s.GetPrevDependency(f).some(S=>m.has(S)&&!h.has(S)))){t.emit("flow:wait",{reason:"\u5C1A\u6709\u6D3B\u8DC3\u4F9D\u8D56 \u672A\u5B8C\u6210,\u7184\u706B\u7B49\u5F85"}),a=!1;return}if(E++,E>2e3)break;continue}}}finally{R.size,y.size,G.length,a=false,t.emit("flow:wait",{reason:"\u7184\u706B\u9759\u9ED8"}),Promise.resolve().then(()=>{R.size===0&&y.size===0&&G.length===0&&t.callOnSuccess();});}};D();}}function Z(s,e,r,t,i,n){let c=me(s),o=0,p=new Map,u=new Map,l=new Map,a=false,h=new Set,y=d=>{let f=p.get(d);return u.get(f)},m=d=>l.get(d),x=async()=>{let d=Array.from(h);h.clear();for(let f of d){let T=y(f);n.signalTrigger(T.dirtySignal);}},R=()=>{a||(a=true,Promise.resolve().then(()=>{try{for(;h.size>0;)x();}finally{a=false;}}));},O=()=>{let d=(f,T,S)=>{if(typeof f!="object"||f===null||Array.isArray(f)){if(S.length>0){let w=S[S.length-1];T[w]=y(S.join(".")).defaultValue;}return}let F=Object.getOwnPropertyNames(f);for(let w of F)S.push(w),d(f[w],f,S),S.pop();};return d(c,null,[]),c},A=J(e,r,{GetRenderSchemaByPath:y},i,{requestUpdate:R,flushPathSet:h}),L=async()=>{let d=e.GetDependencyOrder().flat();try{for(let f of d){let T=y(f);for(let S in T.nodeBucket){let F=await T.nodeBucket[S].evaluate({affectKey:S,triggerPath:void 0,GetRenderSchemaByPath:y,GetValueByPath:w=>y(w).defaultValue,isSameToken:()=>!1});if(S==="options"){let w=!1,V=T.defaultValue;for(let I of F)I.value==V&&(w=!0);w||(T.defaultValue=void 0,R());}F!==T[S]&&(T[S]=F,h.add(f),R());}}}catch(f){i.callOnError(f);}},E=async d=>{if(!d)throw Error("\u6CA1\u6709\u8DEF\u5F84");if(!y(d))throw Error("\u8DEF\u5F84\u9519\u8BEF\uFF0C\u6CA1\u6709\u5BF9\u5E94\u7684\u8282\u70B9");h.add(d),R();let T=e.GetNextDependency(d);G(T,d),r.popExecution([d],true);};async function G(d,f){A(f,d);}let B=d=>{if(!d)throw Error("\u6CA1\u6709\u8DEF\u5F84");let f=y(d);f.nodeBucket.defaultValue&&f.nodeBucket.defaultValue.updateInputValueRule(f.defaultValue);},D=(d,f="")=>{let T="name"in d?d.name:void 0,S=T?f===""?T:`${f}.${T}`:f,F=n.signalCreateor(),w=o++,V={getRenderSchema:b=>y(b)},I=async(b,C)=>{let H=b(C),U=y(C.path),W=t.createHistoryAction([{path:C.path,value:U.defaultValue},{path:C.path,value:H}],async K=>{let j=y(K.path);j.defaultValue=K.value,B(K.path),await E(K.path);});U.defaultValue=H,t.pushIntoHistory(W),B(C.path),await E(C.path);},P={...d,disabled:!!d.disabled,hidden:"hidden"in d?d.hidden:false,readonly:"readonly"in d?d.readonly:false,required:"required"in d?d.required:false,path:S,dirtySignal:F,uid:w,nodeBucket:{},validators:new z(S),theme:"secondary",dependOn:async b=>await I(b,{...V,path:S})};return d.type==="group"&&(delete P.nodeBucket,delete P.validators,P.children=d.children.map(b=>D(b,S)),l.set(P.path,P)),p.set(P.path,P.uid),u.set(P.uid,P),P};return {schema:D(s),GetFormData:()=>O(),GetRenderSchemaByPath:y,GetGroupByPath:m,notifyAll:L,convertToRenderSchema:D}}function me(s,e={}){let r=n=>{if(n.type=="group")return {key:n.name||"",isGroup:true,val:n.children.reduce((c,o)=>[...c,r(o)],[])};if(n.type=="input"||n.type=="number"||n.type=="select"||n.type=="checkbox")return {key:n.name,isGroup:false,val:n.defaultValue};throw Error(`\u672A\u5B9A\u4E49\u7684\u7C7B\u578B:${n.type}`)},t=(n,c)=>{if(c.isGroup){let o={};c.key===""?o=n:n[c.key]=o,c.val.forEach(p=>{t(o,p);});}else n[c.key]=c.val;},i=r(s);return t(e,i),e}var ee=(s,e,r)=>{let i=n=>{let c=r.triggerPaths.map(u=>n.GetValueByPath(u)),o=Object.create(null);return Object.defineProperty(o,"triggerTargets",{get:()=>c}),Object.defineProperty(o,"affectedTatget",{get:()=>n.GetRenderSchemaByPath(s)[e]}),r.logic({slot:o})};return {value:r.value,targetPath:s,triggerPaths:r.triggerPaths,priority:r.priority??10,logic:i}},te=(s,e,r)=>{if(!s)throw Error("");let t=s,i=(o,p)=>{e.has(o)||e.set(o,new Set),e.get(o).add(p),r.has(p)||r.set(p,new Set),r.get(p).add(o);};return {SetRule:(o,p,u,l={logic:a=>{}})=>{let a=t(p),h=ee(p,u,{...l,triggerPaths:[o]}),y=[o].map(m=>[m,t(m).defaultValue]);if(i(o,p),a.nodeBucket[u])a.nodeBucket[u].setRule(h,y);else {let m=new $(a[u],u,p);m.setRule(h,y),a.nodeBucket[u]=m;}l.forceNotify&&a.nodeBucket[u].forceNotify();},SetRules:(o,p,u,l={logic:a=>{}})=>{let a=t(p);for(let m of o)i(m,p);let h=ee(p,u,{...l,triggerPaths:o}),y=o.map(m=>[m,t(m).defaultValue]);if(a.nodeBucket[u])a.nodeBucket[u].setRules(h,y);else {let m=new $(a[u],u,p);m.setRules(h,y),a.nodeBucket[u]=m;}l.forceNotify&&a.nodeBucket[u].forceNotify();}}},ne=s=>{let e=s||void 0;if(!e)throw Error("");return {SetStrategy:(t,i,n)=>{e(t).nodeBucket[i].setStrategy(n);}}};var re=s=>{let e=s||void 0;return {SetValidators:(t,i)=>{let n=e(t),c=(p,u,l)=>p(u,l),o=(p,u,l)=>p(u,l);if(!n.validators)throw Error("validator\u6876\u672A\u521D\u59CB\u5316");n.validators.setValidators({logic:p=>c(i.logic,p,e),condition:typeof i.condition=="function"?p=>o(i.condition,p,e):()=>true});}}};function ae(s){let e=new Map,r=new Map,t=new Set,i=(u,l)=>{if(e.get(u)===l)return;e.set(u,l);let a=r.get(u);a&&a(l);};return {pushExecution:(u,l)=>{l&&(t.forEach(a=>i(a,"idle")),t.clear(),e.clear()),u.length!==0&&u.forEach(a=>{t.has(a)||t.add(a),i(a,"calculating"),s(a).forEach(y=>{t.has(y)||(t.add(y),e.has(y)||i(y,"pending"));});});},popExecution:u=>{u.forEach(l=>{i(l,"calculated");});},markError:u=>{i(u,"error"),t.forEach(l=>{let a=e.get(l);l!==u&&(a==="pending"||a==="calculating")&&i(l,"canceled");});},SetTrace:(u,l,a)=>{r.set(u,l);let h=e.get(u)||"idle";return l(h),()=>{r.delete(u);}}}}function oe(s,e,r,t){let i=l=>{let a=s(),h=e(),y=new Set;return a.get(l)?.forEach(m=>y.add(m)),y.size===0?[]:Array.from(y).filter(m=>{let x=h.get(m)||new Set;return !Array.from(x).some(A=>y.has(A))})};return {GetNextDependency:l=>{let a=t();return Array.from(a.get(l)||[])},GetPrevDependency:l=>{let a=r();return Array.from(a.get(l)||[])},GetAllPrevDependency:l=>{let a=e();return Array.from(a.get(l)||[])},GetAllNextDependency:l=>{let a=s();return Array.from(a.get(l)||[])},rebuildDirectDependencyMaps:l=>{let a=new Map,h=new Map;for(let y of l){let m=i(y);a.set(y,new Set(m));for(let x of m)h.has(x)||h.set(x,new Set),h.get(x).add(y);}return {directNextMap:a,directPrevMap:h}}}}function se(s){let e=t=>{let i=[],n=[],c=new Map,o=t.size,p=0,u=0;for(let[l,a]of t)a===0&&n.push(l);if(n.length===0&&o>0)throw Error("\u521D\u59CB\u5165\u5EA6\u6CA1\u6709\u4E3A0\u7684path, \u4F9D\u8D56\u7EDF\u8BA1\u6709\u8BEF\u6216\u5B58\u5728\u73AF");for(;n.length>0;){i.push([...n]);let l=[];for(let a of n){p++,c.set(a,u);let h=s.get(a);if(h)for(let y of h){let m=t.get(y)-1;t.set(y,m),m===0&&l.push(y);}}n=l,u++;}if(p<o)throw Error("\u68C0\u6D4B\u5230\u5FAA\u73AF\u4F9D\u8D56\uFF01");return {steps:i,levelMap:c}};return ()=>{let t=new Map;for(let i of s.keys()){let n=Array.from(s.get(i)||[]);t.has(i)||t.set(i,0);for(let c of n){let o=t.get(c)||0;t.set(c,++o);}}return e(t)}}function ie(){let s=[],e=[],t={canRedo:()=>{},canUndo:()=>{}},i=()=>{if(!s.length)return;let a=s.pop();a?.undoAction(),p(a);},n=()=>{if(!e.length)return;let a=e.pop();a?.redoAction(),u(a,false);},c=a=>{t.canUndo=()=>a(s.length);},o=a=>{t.canRedo=()=>a(e.length);},p=a=>{e.push(a),e.length>100&&e.shift(),t.canRedo(),t.canUndo();},u=(a,h=true)=>{h&&(e.length=0),s.push(a),s.length>100&&s.shift(),t.canUndo(),t.canRedo();};return {Undo:i,Redo:n,PushIntoHistory:u,CreateHistoryAction:(a,h)=>{let[y,m]=a;return {undoAction:()=>h(y),redoAction:()=>h(m)}},initCanUndo:c,initCanRedo:o}}var _=()=>{let s=[];return {on:e=>(s.push(e),()=>{let r=s.indexOf(e);r>-1&&s.splice(r,1);}),call:e=>s.forEach(r=>r(e))}};function le(){let{on:s,call:e}=_();return {onError:s,callOnError:e}}function ce(){let{on:s,call:e}=_();return {onSuccess:s,callOnSuccess:e}}var ue=()=>{let s=new Set,e=new Map,r=(n,c)=>{e.get(n)?.forEach(o=>o(c));},t=(n,c)=>(e.has(n)||e.set(n,new Set),e.get(n).add(c),()=>e.get(n).delete(c));return {usePlugin:n=>(n.apply({on:t}),()=>{s.delete(n);}),emit:r}};function de(){let{on:s,call:e}=_();return {onStart:s,callOnStart:e}}function pe(s,e){let r=false,t=false,i=new Map,n=new Map,c=new Map,o=new Map,p=[],u=new Map,{GetNextDependency:l,GetPrevDependency:a,GetAllPrevDependency:h,GetAllNextDependency:y,rebuildDirectDependencyMaps:m}=oe(()=>i,()=>n,()=>o,()=>c),{SetTrace:x,pushExecution:R,popExecution:O,markError:A}=ae(l),{Undo:L,Redo:E,PushIntoHistory:G,CreateHistoryAction:B,initCanUndo:D,initCanRedo:v}=ie(),{onError:g,callOnError:d}=le(),{onSuccess:f,callOnSuccess:T}=ce(),{onStart:S,callOnStart:F}=de(),{emit:w,usePlugin:V}=ue(),{schema:I,GetFormData:P,GetRenderSchemaByPath:b,GetGroupByPath:C,notifyAll:H,convertToRenderSchema:U}=Z(s,{GetDependencyOrder:()=>p,GetAllNextDependency:y,GetNextDependency:l,GetPrevDependency:a,GetAllPrevDependency:h,GetPathToLevelMap:()=>u},{pushExecution:R,popExecution:O,markError:A},{pushIntoHistory:G,createHistoryAction:B},{callOnError:d,callOnSuccess:T,callOnStart:F,emit:w},e),W=(M,k)=>{let N=C(M),X=U(k,M);return N.children.push(X),N.dirtySignal.value++,X},{SetRule:K,SetRules:j}=te(b,i,n),{SetStrategy:ye}=ne(b),{SetValidators:fe}=re(b),he=se(i),Y=()=>{let M=he();p=M.steps,u=M.levelMap;};return {schema:I,SetRule:(...M)=>{K.apply(null,M),r=true,!t&&new Promise((k,N)=>{t=true,k();}).then(()=>{if(Y(),r){let{directNextMap:k,directPrevMap:N}=m(p.flat());c=k,o=N;}}).finally(()=>{t=false,r=false;});},SetRules:(...M)=>{j.apply(null,M),r=true,!t&&new Promise((k,N)=>{t=true,k();}).then(()=>{if(Y(),r){let{directNextMap:k,directPrevMap:N}=m(p.flat());c=k,o=N;}}).finally(()=>{t=false,r=false;});},SetStrategy:ye,SetValidators:fe,SetTrace:x,usePlugin:V,SetValue:(M,k)=>{b(M).dependOn(()=>k);},GetFormData:P,notifyAll:()=>{Y(),H();},AddNewSchema:W,GetAllDependency:()=>i,GetDependencyOrder:()=>p,Undo:L,Redo:E,initCanUndo:D,initCanRedo:v,onError:g,onSuccess:f,onStart:S}}var q=new Map,ge=(s,e,r)=>{try{if(typeof r.signalCreateor!="function"||typeof r.signalTrigger!="function")throw Error("\u9700\u8981\u5B9A\u4E49signal\u6765\u901A\u77E5ui");if(q.has(s))throw Error("engineID\u91CD\u590D,\u4FEE\u6539id\u6216\u8005\u4F7F\u7528symbol");let t=pe(e,r),{schema:i,GetFormData:n,SetRule:c,SetRules:o,SetStrategy:p,SetValidators:u,SetValue:l,usePlugin:a,notifyAll:h,SetTrace:y,GetAllDependency:m,GetDependencyOrder:x,AddNewSchema:R,Undo:O,Redo:A,initCanUndo:L,initCanRedo:E,onError:G,onSuccess:B,onStart:D}=t,v={config:{SetRule:c,SetRules:o,SetStrategy:p,SetValidators:u,notifyAll:h,SetTrace:y,usePlugin:a},data:{schema:i,GetFormData:n,AddNewSchema:R,SetValue:l},history:{Undo:O,Redo:A,initCanUndo:L,initCanRedo:E},dependency:{GetAllDependency:m,GetDependencyOrder:x},hooks:{onError:G,onSuccess:B,onStart:D}};return q.set(s,v),v}catch(t){throw Error(t)}},st=s=>{if(q.has(s))return q.get(s);throw Error("\u4E0D\u5B58\u5728\u7684id")},it=s=>{q.delete(s);},lt=ge;export{it as deleteEngine,st as useEngine,ge as useEngineManager,lt as useMeshFlow};
|
|
1
|
+
var Q=class{computedRules=[];store={OR:async(e,r)=>{let t,l,n=this.computedRules;for(let c of n){let o=await c.logic(e);if(c.entityId==="__base__"){l=o;continue}if(o){t=c.value;break}}return typeof t>"u"&&(t=l),{res:t,version:r}},PRIORITY:async(e,r)=>{let t=null,l=this.computedRules;try{for(let n of l){let c=await n.logic(e);if(c!==void 0){t=c;break}}}catch(n){throw n}return {res:t,version:r}}};CurrentStrategy=()=>{};CurrentStrategyType="PRIORITY";getRules=()=>{};constructor(e){this.getRules=e,this.CurrentStrategy=this.store.PRIORITY,this.updateComputedRules();}updateComputedRules(){let e=this.getRules();this.CurrentStrategyType==="PRIORITY"?this.computedRules=Array.from(e.values()).map(r=>Array.from(r)).flat().sort((r,t)=>t.priority-r.priority):this.computedRules=Array.from(e.values()).map(r=>Array.from(r)).flat();}setStrategy(e){this.CurrentStrategy=this.store[e],this.updateComputedRules();}evaluate(e,r){return this.CurrentStrategy(e,r)}},$=class{path;strategy;contract;rules=new Map;isDefaultValue=false;id=0;cache=void 0;pendingPromise=null;version=0;deps=new Map;_forceNotify=false;promiseToken=null;globalCalcCount=0;constructor(e,r,t){let l=()=>this.rules;this.strategy=new Q(l),this.path=t,this.isDefaultValue=r==="defaultValue",this.contract=this.inferType(e),this.cache=e,this.setRule({priority:0,entityId:"__base__",logic:()=>e});}forceNotify(){this._forceNotify=true;}isForceNotify(){return this._forceNotify}setStrategy(e){this.strategy.setStrategy(e);}updateInputValueRule(e){this.isDefaultValue&&this.setRule({priority:1,entityId:"__input_value__",logic:()=>e});}setDefaultRule(e){let r=new Set;r.add(e),this.rules.set(e.id,r);}setRules(e,r){r&&this.updateDeps(r);let t=++this.id,l={...e,entityId:t};for(let n of e.triggerPaths)this.rules.has(n)||this.rules.set(n,new Set),this.rules.get(n).add(l);return this.strategy.updateComputedRules(),()=>{for(let n of e.triggerPaths){let c=this.rules.get(n);c&&(c.delete(l),c.size===0&&(this.rules.delete(n),this.deps.delete(n)));}this.strategy.updateComputedRules();}}updateDeps(e){for(let[r,t]of e)this.deps.set(r,t);}setRule(e,r){if(r&&this.updateDeps(r),typeof e.entityId=="string"){this.setDefaultRule(e);return}let t=++this.id,l={...e,entityId:t};if(e)for(let n of e.triggerPaths)this.rules.has(n)||this.rules.set(n,new Set),this.rules.get(n).add(l);return this.strategy.updateComputedRules(),()=>{for(let n of e.triggerPaths){let c=this.rules.get(n);c&&(c.delete(l),c.size===0&&(this.rules.delete(n),this.deps.delete(n)));}this.strategy.updateComputedRules();}}async evaluate(e){let r=null;if(e.GetToken&&(r=e.GetToken()),this.pendingPromise&&this.promiseToken!==r&&(this.pendingPromise=null,this.promiseToken=null),this.pendingPromise)return this.pendingPromise;this.promiseToken=r;let t=++this.version;return this.pendingPromise=(async()=>{try{await Promise.resolve();let l=!1;if(typeof e.triggerPath=="string"){l=!0;let o=this.deps.get(e.triggerPath),d=e.GetValueByPath(e.triggerPath);if(typeof o=="object"||typeof d=="object")l=!1;else {let u=Array.from(this.deps.keys());for(let i of u){let a=this.deps.get(i),h=e.GetValueByPath(i);if(a!==h){l=!1;break}}}}if(l)return this.cache;let{res:n,version:c}=await this.strategy.evaluate(e,t);if(r!==this.promiseToken)return this.cache;if(c<this.version)return this.cache;if(this.inferType(n)!==this.contract&&`${this.contract}`,this.cache=n,r===this.promiseToken){let o=Array.from(this.deps.keys());for(let d of o){let u=e.GetValueByPath(d);this.deps.set(d,u);}}return n}catch(l){throw {path:this.path,info:l}}finally{this.promiseToken===r&&(this.pendingPromise=null,this.promiseToken=null);}})(),this.pendingPromise}inferType(e){return Array.isArray(e)?"array":typeof e}},z=class{validators=[];defaultValidators=[];path="";constructor(e){this.path=e,this.SetDefaultValidators();}setValidators(e){this.validators.push(e);}SetDefaultValidators(){let e={logic:t=>t||typeof t=="number"?true:`${this.path}\u4E0D\u80FD\u4E3A\u7A7A`,condition:t=>!!t.required},r={logic:function(t){return t.length>this.options.maxLength?`\u8D85\u51FA\u6700\u5927\u957F\u5EA6\uFF0C\u6700\u5927\u957F\u5EA6\u4E3A${this.options.maxLength}`:true},condition:function(t){return typeof t.maxLength!="number"?false:(r.options={maxLength:t.maxLength},t.type==="input"&&t.hidden===false)},options:{}};this.defaultValidators.push(e),this.defaultValidators.push(r);}evaluate(e,r){let t=true,l=[...this.defaultValidators,...this.validators];for(let n of l){if(!n.condition(r))continue;let o=n.logic(e);if(typeof o!="boolean"){t=o;break}}return t}};function J(s,e,r,t,l){let n=new Map;return (o,d)=>{let i=Symbol("token");n.set(o,i);let a=false,h=new Set,y=new Set,m=new Set(s.GetAllNextDependency(o));m.add(o);let v=new Map,R=new Map,V=performance.now(),A=s.GetPathToLevelMap(),E=A.get(o)??0;m.forEach(x=>{if(x===o||d.includes(x))return;let p=s.GetPrevDependency(x).filter(f=>m.has(f)).length;p>0&&R.set(x,p);}),h.add(o);let G=Array.from(d).map(x=>(v.set(x,(v.get(x)||0)+1),{target:x,trigger:o,isReleased:false}));e.pushExecution([...Array.from(d),o],true),`${o}${i.description}`,t.callOnStart({path:o});let B=async x=>{let{target:g,trigger:p}=x;try{if(n.get(o)!==i)return;let f=!1,T=!1,S=r.GetRenderSchemaByPath(g);t.emit("node:start",{path:g});for(let F in S.nodeBucket){let w=S.nodeBucket[F],O=await w.evaluate({affectKey:F,triggerPath:p,GetRenderSchemaByPath:r.GetRenderSchemaByPath,GetValueByPath:P=>r.GetRenderSchemaByPath(P).defaultValue,GetToken:()=>i});if(n.get(o)!==i){t.emit("node:intercept",{path:g,reason:`\u4EE4\u724C\u8FC7\u671F\uFF0C\u4E22\u5F03${g}\u65E7\u4EFB\u52A1\u8BA1\u7B97\u7ED3\u679C`});return}F==="options"&&(O.some(b=>b.value==S.defaultValue)||(S.defaultValue=void 0,f=!0)),O!==S[F]&&(S[F]=O,f=!0,t.emit("node:bucket:success",{path:g,key:F,value:O})),w.isForceNotify()&&(T=!0),f&&l.flushPathSet.add(g);let I=s.GetNextDependency(g);(f||T)&&s.GetAllNextDependency(g).forEach(b=>m.add(b));for(let P of I){if(h.has(P)){t.emit("node:intercept",{path:P,reason:` \u4E0B\u6E38 ${P} \u5DF2\u7531\u5176\u4ED6\u8DEF\u5F84\u5904\u7406`});continue}if(f||T){if(!R.has(P)&&!h.has(P)&&!v.has(P)){let H=s.GetPrevDependency(P).filter(U=>m.has(U)).length;R.set(P,H);}let b=R.get(P)??0,C=Math.max(0,b-1);C<=0?(R.delete(P),G.push({target:P,trigger:g,isReleased:!0}),v.set(P,1),e.pushExecution([P]),t.emit("node:release",{path:P,reason:` \u4E0A\u6E38${g} \u503C\u53D8\u4E86`})):R.set(P,C);}else t.emit("node:stagnate",{path:P,reason:` \u4E0A\u6E38${g} \u503C\u672A\u53D8`});}}if(t.emit("node:success",{path:g}),h.add(g),performance.now()-V>16&&(await new Promise(F=>requestAnimationFrame(F)),V=performance.now(),n.get(o)!==i))return;n.get(o)===i&&l.requestUpdate();}catch(f){t.emit("node:error",{path:g,error:f});let T=Symbol("abort");n.set(o,T),G.length=0,R.clear(),y.clear(),e.markError(g),t.callOnError(f);}finally{n.get(o)===i&&(y.delete(g),e.popExecution([g]),a||(t.emit("flow:fire",{path:g,reason:"\u4EFB\u52A1\u5F52\u822A"}),D()));}},D=async()=>{if(n.get(o)!==i){a=false;return}a=true;try{for(;(G.length>0||R.size>0)&&n.get(o)===i;){if(G.length>0){if(y.size>=20){a=!1;return}let x=G.shift(),{target:g}=x;if(h.has(g)){t.emit("node:intercept",{path:g,reason:` \u62D2\u7EDD\u91CD\u5165${g},\u5DF2\u8BA1\u7B97\u5B8C\u6210`});continue}let p=v.get(g)||0;p<=1?v.delete(g):v.set(g,p-1);let f=A.get(g)??0;if(f>E+1&&!x.isReleased){t.emit("node:intercept",{path:g,reason:` ${g} \u5C42\u7EA7\u592A\u6DF1(${f})\uFF0C\u5F53\u524D\u6C34\u4F4D(${E})`}),R.set(g,1);continue}y.add(g),t.emit("node:processing",{path:g}),e.pushExecution([g]),B(x);continue}if(y.size>0){t.emit("flow:wait",{reason:`\u961F\u5217\u5DF2\u7A7A,\u7184\u706B\u7B49\u5F85\uFF0C\u7B49\u5F85\u5F02\u6B65\u4EFB\u52A1\u5F52\u822A | \u98DE\u884C\u4E2D: ${Array.from(y).join(",")} | `}),a=!1;return}if(R.size>0){let x=!1,g=[];for(let[p]of R)s.GetPrevDependency(p).some(S=>h.has(S)?!1:y.has(S)||v.has(S)||m.has(S)?!0:(A.get(S)??0)>E)||g.push(p);if(g.length>0&&(g.forEach(p=>{R.delete(p),G.push({target:p,trigger:o,isReleased:!0}),v.set(p,1),e.pushExecution([p]);}),x=!0),x)continue;if(Array.from(R.keys()).some(f=>s.GetPrevDependency(f).some(S=>m.has(S)&&!h.has(S)))){t.emit("flow:wait",{reason:"\u5C1A\u6709\u6D3B\u8DC3\u4F9D\u8D56 \u672A\u5B8C\u6210,\u7184\u706B\u7B49\u5F85"}),a=!1;return}if(E++,E>2e3)break;continue}}}finally{R.size,y.size,G.length,a=false,t.emit("flow:wait",{reason:"\u7184\u706B\u9759\u9ED8"}),Promise.resolve().then(()=>{R.size===0&&y.size===0&&G.length===0&&t.callOnSuccess();});}};D();}}function Z(s,e,r,t,l,n){let c=me(s),o=0,d=new Map,u=new Map,i=new Map,a=false,h=new Set,y=p=>{let f=d.get(p);return u.get(f)},m=p=>i.get(p),v=async()=>{let p=Array.from(h);h.clear();for(let f of p){let T=y(f);n.signalTrigger(T.dirtySignal);}},R=()=>{a||(a=true,Promise.resolve().then(()=>{try{for(;h.size>0;)v();}finally{a=false;}}));},V=()=>{let p=(f,T,S)=>{if(typeof f!="object"||f===null||Array.isArray(f)){if(S.length>0){let w=S[S.length-1];T[w]=y(S.join(".")).defaultValue;}return}let F=Object.getOwnPropertyNames(f);for(let w of F)S.push(w),p(f[w],f,S),S.pop();};return p(c,null,[]),c},A=J(e,r,{GetRenderSchemaByPath:y},l,{requestUpdate:R,flushPathSet:h}),L=async()=>{let p=e.GetDependencyOrder().flat();try{for(let f of p){let T=y(f);for(let S in T.nodeBucket){let F=await T.nodeBucket[S].evaluate({affectKey:S,triggerPath:void 0,GetRenderSchemaByPath:y,GetValueByPath:w=>y(w).defaultValue,isSameToken:()=>!1});if(S==="options"){let w=!1,O=T.defaultValue;for(let I of F)I.value==O&&(w=!0);w||(T.defaultValue=void 0,R());}F!==T[S]&&(T[S]=F,h.add(f),R());}}}catch(f){l.callOnError(f);}},E=async p=>{if(!p)throw Error("\u6CA1\u6709\u8DEF\u5F84");if(!y(p))throw Error("\u8DEF\u5F84\u9519\u8BEF\uFF0C\u6CA1\u6709\u5BF9\u5E94\u7684\u8282\u70B9");h.add(p),R();let T=e.GetNextDependency(p);G(T,p),r.popExecution([p],true);};async function G(p,f){A(f,p);}let B=p=>{if(!p)throw Error("\u6CA1\u6709\u8DEF\u5F84");let f=y(p);f.nodeBucket.defaultValue&&f.nodeBucket.defaultValue.updateInputValueRule(f.defaultValue);},D=(p,f="")=>{let T="name"in p?p.name:void 0,S=T?f===""?T:`${f}.${T}`:f,F=n.signalCreateor(),w=o++,O={getRenderSchema:b=>y(b)},I=async(b,C)=>{let H=b(C),U=y(C.path),W=t.createHistoryAction([{path:C.path,value:U.defaultValue},{path:C.path,value:H}],async K=>{let j=y(K.path);j.defaultValue=K.value,B(K.path),await E(K.path);});U.defaultValue=H,t.pushIntoHistory(W),B(C.path),await E(C.path);},P={...p,disabled:!!p.disabled,hidden:"hidden"in p?p.hidden:false,readonly:"readonly"in p?p.readonly:false,required:"required"in p?p.required:false,path:S,dirtySignal:F,uid:w,nodeBucket:{},validators:new z(S),theme:"secondary",dependOn:async b=>await I(b,{...O,path:S})};return p.type==="group"&&(delete P.nodeBucket,delete P.validators,P.children=p.children.map(b=>D(b,S)),i.set(P.path,P)),d.set(P.path,P.uid),u.set(P.uid,P),P};return {schema:D(s),GetFormData:()=>V(),GetRenderSchemaByPath:y,GetGroupByPath:m,notifyAll:L,convertToRenderSchema:D}}function me(s,e={}){let r=n=>{if(n.type=="group")return {key:n.name||"",isGroup:true,val:n.children.reduce((c,o)=>[...c,r(o)],[])};if(n.type=="input"||n.type=="number"||n.type=="select"||n.type=="checkbox")return {key:n.name,isGroup:false,val:n.defaultValue};throw Error(`\u672A\u5B9A\u4E49\u7684\u7C7B\u578B:${n.type}`)},t=(n,c)=>{if(c.isGroup){let o={};c.key===""?o=n:n[c.key]=o,c.val.forEach(d=>{t(o,d);});}else n[c.key]=c.val;},l=r(s);return t(e,l),e}var ee=(s,e,r)=>{let l=n=>{let c=r.triggerPaths.map(u=>n.GetValueByPath(u)),o=Object.create(null);return Object.defineProperty(o,"triggerTargets",{get:()=>c}),Object.defineProperty(o,"affectedTatget",{get:()=>n.GetRenderSchemaByPath(s)[e]}),r.logic({slot:o})};return {value:r.value,targetPath:s,triggerPaths:r.triggerPaths,priority:r.priority??10,logic:l}},te=(s,e,r)=>{if(!s)throw Error("");let t=s,l=(o,d)=>{e.has(o)||e.set(o,new Set),e.get(o).add(d),r.has(d)||r.set(d,new Set),r.get(d).add(o);};return {SetRule:(o,d,u,i={logic:a=>{}})=>{let a=t(d),h=ee(d,u,{...i,triggerPaths:[o]}),y=[o].map(m=>[m,t(m).defaultValue]);if(l(o,d),a.nodeBucket[u])a.nodeBucket[u].setRule(h,y);else {let m=new $(a[u],u,d);m.setRule(h,y),a.nodeBucket[u]=m;}i.forceNotify&&a.nodeBucket[u].forceNotify();},SetRules:(o,d,u,i={logic:a=>{}})=>{let a=t(d);for(let m of o)l(m,d);let h=ee(d,u,{...i,triggerPaths:o}),y=o.map(m=>[m,t(m).defaultValue]);if(a.nodeBucket[u])a.nodeBucket[u].setRules(h,y);else {let m=new $(a[u],u,d);m.setRules(h,y),a.nodeBucket[u]=m;}i.forceNotify&&a.nodeBucket[u].forceNotify();}}},ne=s=>{let e=s||void 0;if(!e)throw Error("");return {SetStrategy:(t,l,n)=>{e(t).nodeBucket[l].setStrategy(n);}}};var re=s=>{let e=s||void 0;return {SetValidators:(t,l)=>{let n=e(t),c=(d,u,i)=>d(u,i),o=(d,u,i)=>d(u,i);if(!n.validators)throw Error("validator\u6876\u672A\u521D\u59CB\u5316");n.validators.setValidators({logic:d=>c(l.logic,d,e),condition:typeof l.condition=="function"?d=>o(l.condition,d,e):()=>true});}}};function ae(s){let e=new Map,r=new Map,t=new Set,l=(u,i)=>{if(e.get(u)===i)return;e.set(u,i);let a=r.get(u);a&&a(i);};return {pushExecution:(u,i)=>{i&&(t.forEach(a=>l(a,"idle")),t.clear(),e.clear()),u.length!==0&&u.forEach(a=>{t.has(a)||t.add(a),l(a,"calculating"),s(a).forEach(y=>{t.has(y)||(t.add(y),e.has(y)||l(y,"pending"));});});},popExecution:u=>{u.forEach(i=>{l(i,"calculated");});},markError:u=>{l(u,"error"),t.forEach(i=>{let a=e.get(i);i!==u&&(a==="pending"||a==="calculating")&&l(i,"canceled");});},SetTrace:(u,i,a)=>{r.set(u,i);let h=e.get(u)||"idle";return i(h),()=>{r.delete(u);}}}}function oe(s,e,r,t){let l=i=>{let a=s(),h=e(),y=new Set;return a.get(i)?.forEach(m=>y.add(m)),y.size===0?[]:Array.from(y).filter(m=>{let v=h.get(m)||new Set;return !Array.from(v).some(A=>y.has(A))})};return {GetNextDependency:i=>{let a=t();return Array.from(a.get(i)||[])},GetPrevDependency:i=>{let a=r();return Array.from(a.get(i)||[])},GetAllPrevDependency:i=>{let a=e();return Array.from(a.get(i)||[])},GetAllNextDependency:i=>{let a=s();return Array.from(a.get(i)||[])},rebuildDirectDependencyMaps:i=>{let a=new Map,h=new Map;for(let y of i){let m=l(y);a.set(y,new Set(m));for(let v of m)h.has(v)||h.set(v,new Set),h.get(v).add(y);}return {directNextMap:a,directPrevMap:h}}}}function se(s){let e=t=>{let l=[],n=[],c=new Map,o=t.size,d=0,u=0;for(let[i,a]of t)a===0&&n.push(i);if(n.length===0&&o>0)throw Error("\u521D\u59CB\u5165\u5EA6\u6CA1\u6709\u4E3A0\u7684path, \u4F9D\u8D56\u7EDF\u8BA1\u6709\u8BEF\u6216\u5B58\u5728\u73AF");for(;n.length>0;){l.push([...n]);let i=[];for(let a of n){d++,c.set(a,u);let h=s.get(a);if(h)for(let y of h){let m=t.get(y)-1;t.set(y,m),m===0&&i.push(y);}}n=i,u++;}if(d<o)throw Error("\u68C0\u6D4B\u5230\u5FAA\u73AF\u4F9D\u8D56\uFF01");return {steps:l,levelMap:c}};return ()=>{let t=new Map;for(let l of s.keys()){let n=Array.from(s.get(l)||[]);t.has(l)||t.set(l,0);for(let c of n){let o=t.get(c)||0;t.set(c,++o);}}return e(t)}}function ie(){let s=[],e=[],t={canRedo:()=>{},canUndo:()=>{}},l=()=>{if(!s.length)return;let a=s.pop();a?.undoAction(),d(a);},n=()=>{if(!e.length)return;let a=e.pop();a?.redoAction(),u(a,false);},c=a=>{t.canUndo=()=>a(s.length);},o=a=>{t.canRedo=()=>a(e.length);},d=a=>{e.push(a),e.length>100&&e.shift(),t.canRedo(),t.canUndo();},u=(a,h=true)=>{h&&(e.length=0),s.push(a),s.length>100&&s.shift(),t.canUndo(),t.canRedo();};return {Undo:l,Redo:n,PushIntoHistory:u,CreateHistoryAction:(a,h)=>{let[y,m]=a;return {undoAction:()=>h(y),redoAction:()=>h(m)}},initCanUndo:c,initCanRedo:o}}var _=()=>{let s=[];return {on:e=>(s.push(e),()=>{let r=s.indexOf(e);r>-1&&s.splice(r,1);}),call:e=>s.forEach(r=>r(e))}};function le(){let{on:s,call:e}=_();return {onError:s,callOnError:e}}function ce(){let{on:s,call:e}=_();return {onSuccess:s,callOnSuccess:e}}var ue=()=>{let s=new Set,e=new Map,r=(n,c)=>{e.get(n)?.forEach(o=>o(c));},t=(n,c)=>(e.has(n)||e.set(n,new Set),e.get(n).add(c),()=>e.get(n).delete(c));return {usePlugin:n=>{let c=new Set,o=(d,u)=>{let i=t(d,u);return c.add(i),i};return n.apply({on:o}),s.add(n),()=>{c.forEach(d=>d()),c.clear(),s.delete(n);}},emit:r}};function de(){let{on:s,call:e}=_();return {onStart:s,callOnStart:e}}function pe(s,e){let r=false,t=false,l=new Map,n=new Map,c=new Map,o=new Map,d=[],u=new Map,{GetNextDependency:i,GetPrevDependency:a,GetAllPrevDependency:h,GetAllNextDependency:y,rebuildDirectDependencyMaps:m}=oe(()=>l,()=>n,()=>o,()=>c),{SetTrace:v,pushExecution:R,popExecution:V,markError:A}=ae(i),{Undo:L,Redo:E,PushIntoHistory:G,CreateHistoryAction:B,initCanUndo:D,initCanRedo:x}=ie(),{onError:g,callOnError:p}=le(),{onSuccess:f,callOnSuccess:T}=ce(),{onStart:S,callOnStart:F}=de(),{emit:w,usePlugin:O}=ue(),{schema:I,GetFormData:P,GetRenderSchemaByPath:b,GetGroupByPath:C,notifyAll:H,convertToRenderSchema:U}=Z(s,{GetDependencyOrder:()=>d,GetAllNextDependency:y,GetNextDependency:i,GetPrevDependency:a,GetAllPrevDependency:h,GetPathToLevelMap:()=>u},{pushExecution:R,popExecution:V,markError:A},{pushIntoHistory:G,createHistoryAction:B},{callOnError:p,callOnSuccess:T,callOnStart:F,emit:w},e),W=(M,k)=>{let N=C(M),X=U(k,M);return N.children.push(X),N.dirtySignal.value++,X},{SetRule:K,SetRules:j}=te(b,l,n),{SetStrategy:ye}=ne(b),{SetValidators:fe}=re(b),he=se(l),Y=()=>{let M=he();d=M.steps,u=M.levelMap;};return {schema:I,SetRule:(...M)=>{K.apply(null,M),r=true,!t&&new Promise((k,N)=>{t=true,k();}).then(()=>{if(Y(),r){let{directNextMap:k,directPrevMap:N}=m(d.flat());c=k,o=N;}}).finally(()=>{t=false,r=false;});},SetRules:(...M)=>{j.apply(null,M),r=true,!t&&new Promise((k,N)=>{t=true,k();}).then(()=>{if(Y(),r){let{directNextMap:k,directPrevMap:N}=m(d.flat());c=k,o=N;}}).finally(()=>{t=false,r=false;});},SetStrategy:ye,SetValidators:fe,SetTrace:v,usePlugin:O,SetValue:(M,k)=>{b(M).dependOn(()=>k);},GetFormData:P,notifyAll:()=>{Y(),H();},AddNewSchema:W,GetAllDependency:()=>l,GetDependencyOrder:()=>d,Undo:L,Redo:E,initCanUndo:D,initCanRedo:x,onError:g,onSuccess:f,onStart:S}}var q=new Map,ge=(s,e,r)=>{try{if(typeof r.signalCreateor!="function"||typeof r.signalTrigger!="function")throw Error("\u9700\u8981\u5B9A\u4E49signal\u6765\u901A\u77E5ui");if(q.has(s))throw Error("engineID\u91CD\u590D,\u4FEE\u6539id\u6216\u8005\u4F7F\u7528symbol");let t=pe(e,r),{schema:l,GetFormData:n,SetRule:c,SetRules:o,SetStrategy:d,SetValidators:u,SetValue:i,usePlugin:a,notifyAll:h,SetTrace:y,GetAllDependency:m,GetDependencyOrder:v,AddNewSchema:R,Undo:V,Redo:A,initCanUndo:L,initCanRedo:E,onError:G,onSuccess:B,onStart:D}=t,x={config:{SetRule:c,SetRules:o,SetStrategy:d,SetValidators:u,notifyAll:h,SetTrace:y,usePlugin:a},data:{schema:l,GetFormData:n,AddNewSchema:R,SetValue:i},history:{Undo:V,Redo:A,initCanUndo:L,initCanRedo:E},dependency:{GetAllDependency:m,GetDependencyOrder:v},hooks:{onError:G,onSuccess:B,onStart:D}};return q.set(s,x),x}catch(t){throw Error(t)}},st=s=>{if(q.has(s))return q.get(s);throw Error("\u4E0D\u5B58\u5728\u7684id")},it=s=>{q.delete(s);},lt=ge;export{it as deleteEngine,st as useEngine,ge as useEngineManager,lt as useMeshFlow};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@meshflow/core",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4",
|
|
4
4
|
"description": "A logic orchestration engine utilizing topological scheduling and watermark control to resolve asynchronous race conditions in complex dependency linkages.”",
|
|
5
5
|
"main": "./index.cjs",
|
|
6
6
|
"module": "./index.js",
|