@virid/core 0.3.17 → 0.4.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/dist/index.cjs CHANGED
@@ -1,17 +1,17 @@
1
1
  /**
2
- * @virid/core v0.3.17
2
+ * @virid/core v0.4.1
3
3
  * A lightweight and powerful message core built using dependency injection and CCS concepts
4
4
  */
5
- var N=Object.defineProperty;var ge=Object.getOwnPropertyDescriptor;var me=Object.getOwnPropertyNames;var ue=Object.prototype.hasOwnProperty;var ye=(r,e,t)=>e in r?N(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t;var i=(r,e)=>N(r,"name",{value:e,configurable:!0});var xe=(r,e)=>{for(var t in e)N(r,t,{get:e[t],enumerable:!0})},we=(r,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of me(e))!ue.call(r,o)&&o!==t&&N(r,o,{get:()=>e[o],enumerable:!(s=ge(e,o))||s.enumerable});return r};var be=r=>we(N({},"__esModule",{value:!0}),r);var a=(r,e,t)=>ye(r,typeof e!="symbol"?e+"":e,t);var Se={};xe(Se,{BaseMessage:()=>x,Component:()=>ae,Controller:()=>$e,ErrorMessage:()=>M,EventMessage:()=>C,InfoMessage:()=>$,MessageEngine:()=>V,MessageRegistry:()=>D,MessageWriter:()=>d,Observer:()=>ve,Safe:()=>Me,SingleMessage:()=>A,System:()=>_,VIRID_METADATA:()=>y,ViridApp:()=>R,WarnMessage:()=>v,activateInstance:()=>Y,bindObservers:()=>B,createVirid:()=>Ae,defaultConfig:()=>j,handleResult:()=>S});module.exports=be(Se);var j={maxDepth:100,enableLog:!0,manual:!1};var J=null;function Y(r){J=r}i(Y,"activateInstance");function ke(r){J?J.dispatch(r):console.error("[Virid MessageWriter] No active instance found.")}i(ke,"dispatch");var q=class q{static write(e,...t){let s=typeof e=="function"?new e(...t):e;ke(s)}static error(e,t=""){this.write(new M(e,t))}static warn(e){this.write(new v(e))}static info(e){this.write(new $(e))}};i(q,"MessageWriter");var d=q;var K=class K{static send(...e){d.write(this,...e)}};i(K,"BaseMessage");var x=K,Q=class Q extends x{constructor(){super()}};i(Q,"SingleMessage");var A=Q,X=class X extends x{constructor(){super()}};i(X,"EventMessage");var C=X,Z=class Z extends C{constructor(t,s){super();a(this,"error");a(this,"context");this.error=t,this.context=s}};i(Z,"ErrorMessage");var M=Z,ee=class ee extends C{constructor(t){super();a(this,"context");this.context=t}};i(ee,"WarnMessage");var v=ee,te=class te extends C{constructor(t){super();a(this,"context");this.context=t}};i(te,"InfoMessage");var $=te;var se=class se{constructor(){a(this,"systemTaskMap",new Map)}register(e,t,s=0){let o=this.systemTaskMap.get(e)||[];if(o.findIndex(c=>c.fn.systemContext.originalMethod===t.systemContext.originalMethod)===-1)o.push({fn:t,priority:s}),o.sort((c,l)=>l.priority-c.priority),this.systemTaskMap.set(e,o);else{let c=t.methodName,l=t.targetClass;return d.error(new Error(`[Virid Error] System Already Registered: Message Class ${e.name}, Location ${l.name}.${c}`)),()=>{}}return()=>{let c=this.systemTaskMap.get(e);if(c){let l=c.findIndex(m=>m.fn===t);l!==-1&&(c.splice(l,1),c.length===0&&this.systemTaskMap.delete(e))}}}};i(se,"MessageRegistry");var D=se;var re=class re{constructor(){a(this,"signalActive",new Map);a(this,"eventActive",[]);a(this,"signalStaging",new Map);a(this,"eventStaging",[])}stage(e){if(e instanceof A){let t=e.constructor;this.signalStaging.has(t)||this.signalStaging.set(t,[]),this.signalStaging.get(t).push(e)}else e instanceof C?this.eventStaging.push(e):d.error(new Error(`[Virid Message] Invalid Message:
6
- ${e.constructor.name} must extend SingleMessage or EventMessage`))}flip(){this.signalActive=this.signalStaging,this.eventActive=this.eventStaging,this.signalStaging=new Map,this.eventStaging=[]}clearSignals(){this.signalActive=new Map}clearEvents(){this.eventActive=[]}isEmpty(){return this.signalStaging.size===0&&this.eventStaging.length===0}reset(){this.signalActive=new Map,this.signalStaging=new Map,this.eventStaging=[],this.eventActive=[]}};i(re,"Staging");var L=re;var oe=class oe{constructor(e){a(this,"maxDepth");a(this,"isRunning",!1);a(this,"globalTick",0);a(this,"internalDepth",0);a(this,"staging",new L);a(this,"tickPayload",{});a(this,"beforeExecuteHooks",[]);a(this,"afterExecuteHooks",[]);a(this,"beforeTickHooks",[]);a(this,"afterTickHooks",[]);this.maxDepth=e}addBeforeExecute(e,t,s){s?this.beforeExecuteHooks.unshift({type:e,handler:t}):this.beforeExecuteHooks.push({type:e,handler:t})}addAfterExecute(e,t,s){s?this.afterExecuteHooks.unshift({type:e,handler:t}):this.afterExecuteHooks.push({type:e,handler:t})}addBeforeTick(e,t){t?this.beforeTickHooks.unshift(e):this.beforeTickHooks.push(e)}addAfterTick(e,t){t?this.afterTickHooks.unshift(e):this.afterTickHooks.push(e)}stage(e){this.staging.stage(e)}tick(e){if(!(this.isRunning||this.staging.isEmpty())){if(this.internalDepth>this.maxDepth){this.internalDepth=0,this.staging.reset(),console.error(new Error(`[Virid Dispatcher] Deadlock: Max depth reached ${this.maxDepth}, Possible infinite loop detected. The dispatcher will stop processing this tick.`));return}this.isRunning=!0,this.internalDepth++,queueMicrotask(()=>{try{this.internalDepth==1&&(this.tickPayload={},this.executeTickHooks(this.beforeTickHooks)),this.staging.flip();let t=this.collectTasks(e);this.executeTasks(t)}catch(t){d.error(t,"[Virid Dispatcher] Unhandled Error")}finally{this.isRunning=!1,this.staging.isEmpty()?(this.staging.reset(),this.internalDepth=0,this.executeTickHooks(this.afterTickHooks),this.globalTick++):this.tick(e)}})}}tickSync(e){if(!this.staging.isEmpty()){for(this.internalDepth=0,this.tickPayload={},this.executeTickHooks(this.beforeTickHooks);!this.staging.isEmpty();){if(this.internalDepth>this.maxDepth){this.staging.reset(),this.internalDepth=0,console.error(new Error(`[Virid Dispatcher] Deadlock: Max depth reached ${this.maxDepth}, Possible infinite loop detected. Ticking aborted.`));return}this.internalDepth++;try{this.staging.flip();let t=this.collectTasks(e);this.executeTasks(t)}catch(t){d.error(t,"[Virid Dispatcher] Sub-Tick Unhandled Error");break}}this.staging.reset(),this.internalDepth=0,this.executeTickHooks(this.afterTickHooks),this.globalTick++}}collectTasks(e){let t=[];for(let s of this.staging.eventActive)(e.get(s.constructor)||[]).forEach(n=>{t.push(new G(n.fn,n.priority,s,{context:n.fn.systemContext,tick:this.globalTick,payload:{}},this.beforeExecuteHooks,this.afterExecuteHooks))});for(let[s,o]of this.staging.signalActive.entries())(e.get(s)||[]).forEach(c=>{t.push(new G(c.fn,c.priority,o,{context:c.fn.systemContext,tick:this.globalTick,payload:{}},this.beforeExecuteHooks,this.afterExecuteHooks))});return t}executeTasks(e){e.sort((t,s)=>s.priority-t.priority);for(let t of e){let s=Array.isArray(t.message)?t.message[0]:t.message;try{let o=t.execute();o instanceof Promise&&o.catch(n=>d.error(n,`[Virid Dispatcher]: Async System Error.
5
+ var N=Object.defineProperty;var ge=Object.getOwnPropertyDescriptor;var me=Object.getOwnPropertyNames;var ue=Object.prototype.hasOwnProperty;var ye=(r,e,t)=>e in r?N(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t;var i=(r,e)=>N(r,"name",{value:e,configurable:!0});var xe=(r,e)=>{for(var t in e)N(r,t,{get:e[t],enumerable:!0})},we=(r,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of me(e))!ue.call(r,o)&&o!==t&&N(r,o,{get:()=>e[o],enumerable:!(s=ge(e,o))||s.enumerable});return r};var be=r=>we(N({},"__esModule",{value:!0}),r);var a=(r,e,t)=>ye(r,typeof e!="symbol"?e+"":e,t);var Se={};xe(Se,{BaseMessage:()=>x,Component:()=>ae,Controller:()=>Ce,ErrorMessage:()=>M,EventMessage:()=>T,InfoMessage:()=>C,MessageEngine:()=>V,MessageRegistry:()=>D,MessageWriter:()=>f,Observer:()=>ve,Safe:()=>Me,SingleMessage:()=>$,System:()=>_,VIRID_METADATA:()=>y,ViridApp:()=>R,WarnMessage:()=>v,activateInstance:()=>Y,bindObservers:()=>B,createVirid:()=>$e,defaultConfig:()=>j,handleResult:()=>S});module.exports=be(Se);var j={maxDepth:100,enableLog:!0,manual:!1};var J=null;function Y(r){J=r}i(Y,"activateInstance");function ke(r){J?J.dispatch(r):console.error("[Virid MessageWriter] No active instance found.")}i(ke,"dispatch");var q=class q{static write(e,...t){let s=typeof e=="function"?new e(...t):e;ke(s)}static error(e,t=""){this.write(new M(e,t))}static warn(e){this.write(new v(e))}static info(e){this.write(new C(e))}};i(q,"MessageWriter");var f=q;var K=class K{static send(...e){f.write(this,...e)}};i(K,"BaseMessage");var x=K,Q=class Q extends x{constructor(){super()}};i(Q,"SingleMessage");var $=Q,X=class X extends x{constructor(){super()}};i(X,"EventMessage");var T=X,Z=class Z extends T{constructor(t,s){super();a(this,"error");a(this,"context");this.error=t,this.context=s}};i(Z,"ErrorMessage");var M=Z,ee=class ee extends T{constructor(t){super();a(this,"context");this.context=t}};i(ee,"WarnMessage");var v=ee,te=class te extends T{constructor(t){super();a(this,"context");this.context=t}};i(te,"InfoMessage");var C=te;var se=class se{constructor(){a(this,"systemTaskMap",new Map)}register(e,t,s=0){let o=this.systemTaskMap.get(e)||[];if(o.findIndex(c=>c.fn.systemContext.originalMethod===t.systemContext.originalMethod)===-1)o.push({fn:t,priority:s}),o.sort((c,l)=>l.priority-c.priority),this.systemTaskMap.set(e,o);else{let c=t.methodName,l=t.targetClass;return f.error(new Error(`[Virid Error] System Already Registered: Message Class ${e.name}, Location ${l.name}.${c}`)),()=>{}}return()=>{let c=this.systemTaskMap.get(e);if(c){let l=c.findIndex(m=>m.fn===t);l!==-1&&(c.splice(l,1),c.length===0&&this.systemTaskMap.delete(e))}}}};i(se,"MessageRegistry");var D=se;var re=class re{constructor(){a(this,"signalActive",new Map);a(this,"eventActive",[]);a(this,"signalStaging",new Map);a(this,"eventStaging",[])}stage(e){if(e instanceof $){let t=e.constructor;this.signalStaging.has(t)||this.signalStaging.set(t,[]),this.signalStaging.get(t).push(e)}else e instanceof T?this.eventStaging.push(e):f.error(new Error(`[Virid Message] Invalid Message:
6
+ ${e.constructor.name} must extend SingleMessage or EventMessage`))}flip(){this.signalActive=this.signalStaging,this.eventActive=this.eventStaging,this.signalStaging=new Map,this.eventStaging=[]}clearSignals(){this.signalActive=new Map}clearEvents(){this.eventActive=[]}isEmpty(){return this.signalStaging.size===0&&this.eventStaging.length===0}reset(){this.signalActive=new Map,this.signalStaging=new Map,this.eventStaging=[],this.eventActive=[]}};i(re,"Staging");var L=re;var oe=class oe{constructor(e){a(this,"maxDepth");a(this,"isRunning",!1);a(this,"globalTick",0);a(this,"internalDepth",0);a(this,"staging",new L);a(this,"tickPayload",{});a(this,"beforeExecuteHooks",[]);a(this,"afterExecuteHooks",[]);a(this,"beforeTickHooks",[]);a(this,"afterTickHooks",[]);this.maxDepth=e}addBeforeExecute(e,t,s){s?this.beforeExecuteHooks.unshift({type:e,handler:t}):this.beforeExecuteHooks.push({type:e,handler:t})}addAfterExecute(e,t,s){s?this.afterExecuteHooks.unshift({type:e,handler:t}):this.afterExecuteHooks.push({type:e,handler:t})}addBeforeTick(e,t){t?this.beforeTickHooks.unshift(e):this.beforeTickHooks.push(e)}addAfterTick(e,t){t?this.afterTickHooks.unshift(e):this.afterTickHooks.push(e)}stage(e){this.staging.stage(e)}tick(e){if(!(this.isRunning||this.staging.isEmpty())){if(this.internalDepth>this.maxDepth){this.internalDepth=0,this.staging.reset(),console.error(new Error(`[Virid Dispatcher] Deadlock: Max depth reached ${this.maxDepth}, Possible infinite loop detected. The dispatcher will stop processing this tick.`));return}this.isRunning=!0,this.internalDepth++,queueMicrotask(()=>{try{this.internalDepth==1&&(this.tickPayload={},this.executeTickHooks(this.beforeTickHooks)),this.staging.flip();let t=this.collectTasks(e);this.executeTasks(t)}catch(t){f.error(t,"[Virid Dispatcher] Unhandled Error")}finally{this.isRunning=!1,this.staging.isEmpty()?(this.staging.reset(),this.internalDepth=0,this.executeTickHooks(this.afterTickHooks),this.globalTick++):this.tick(e)}})}}tickSync(e){if(!this.staging.isEmpty()){for(this.internalDepth=0,this.tickPayload={},this.executeTickHooks(this.beforeTickHooks);!this.staging.isEmpty();){if(this.internalDepth>this.maxDepth){this.staging.reset(),this.internalDepth=0,console.error(new Error(`[Virid Dispatcher] Deadlock: Max depth reached ${this.maxDepth}, Possible infinite loop detected. Ticking aborted.`));return}this.internalDepth++;try{this.staging.flip();let t=this.collectTasks(e);this.executeTasks(t)}catch(t){f.error(t,"[Virid Dispatcher] Sub-Tick Unhandled Error");break}}this.staging.reset(),this.internalDepth=0,this.executeTickHooks(this.afterTickHooks),this.globalTick++}}collectTasks(e){let t=[];for(let s of this.staging.eventActive)(e.get(s.constructor)||[]).forEach(n=>{t.push(new G(n.fn,n.priority,s,{context:n.fn.systemContext,tick:this.globalTick,payload:{}},this.beforeExecuteHooks,this.afterExecuteHooks))});for(let[s,o]of this.staging.signalActive.entries())(e.get(s)||[]).forEach(c=>{t.push(new G(c.fn,c.priority,o,{context:c.fn.systemContext,tick:this.globalTick,payload:{}},this.beforeExecuteHooks,this.afterExecuteHooks))});return t}executeTasks(e){e.sort((t,s)=>s.priority-t.priority);for(let t of e){let s=Array.isArray(t.message)?t.message[0]:t.message;try{let o=t.execute();o instanceof Promise&&o.catch(n=>f.error(n,`[Virid Dispatcher]: Async System Error.
7
7
  SystemLocation: ${t.hookContext.context.targetClass.name}.${t.hookContext.context.methodName}
8
8
  MessageName: ${s.constructor.name}
9
- MessageData: ${JSON.stringify(t.message)}`))}catch(o){d.error(o,`[Virid Dispatcher]: Sync System Error.
9
+ MessageData: ${JSON.stringify(t.message)}`))}catch(o){f.error(o,`[Virid Dispatcher]: Sync System Error.
10
10
  SystemLocation: ${t.hookContext.context.targetClass.name}.${t.hookContext.context.methodName}
11
11
  MessageName: ${s.constructor.name}
12
- MessageData: ${JSON.stringify(t.message)}`)}}}executeTickHooks(e){let t={tick:this.globalTick,timestamp:Date.now(),payload:this.tickPayload};e.forEach(s=>s(t))}};i(oe,"Dispatcher");var W=oe,ie=class ie{constructor(e,t,s,o,n,c){a(this,"fn");a(this,"priority");a(this,"message");a(this,"hookContext");a(this,"beforeExecuteHooks");a(this,"afterExecuteHooks");a(this,"success",!0);this.fn=e,this.priority=t,this.message=s,this.hookContext=o,this.beforeExecuteHooks=n,this.afterExecuteHooks=c}triggerHooks(e){let t=Array.isArray(this.message)?this.message[0]:this.message;if(t){for(let s of e)if(t instanceof s.type)try{let o=s.handler(this.message,this.hookContext,this.success);o instanceof Promise&&o.catch(n=>{d.error(n,`[Virid Hook] Async Hook Error: It is prohibited to use asynchronous hooks within Hook: ${s.type.name}`)})}catch(o){d.error(o,`[Virid Hook] Hook Execute Failed: Triggered by: ${t.constructor.name}, Registered type: ${s.type.name}`)}}}execute(){this.triggerHooks(this.beforeExecuteHooks);let e=i(()=>this.triggerHooks(this.afterExecuteHooks),"runAfter");try{let t=this.fn(this.message);return t instanceof Promise?t.catch(()=>this.success=!1).finally(e):(e(),t)}catch(t){throw this.success=!1,e(),t}}};i(ie,"ExecutionTask");var G=ie;var ne=class ne{constructor(e,t){a(this,"dispatcher");a(this,"registry",new D);a(this,"middlewares",[]);a(this,"manual");this.dispatcher=new W(e),this.manual=t,Y(this)}useMiddleware(e,t){this.middlewares.push(e)}onBeforeExecute(e,t,s){this.dispatcher.addBeforeExecute(e,t,s)}onAfterExecute(e,t,s){this.dispatcher.addAfterExecute(e,t,s)}onBeforeTick(e,t){this.dispatcher.addBeforeTick(e,t)}onAfterTick(e,t){this.dispatcher.addAfterTick(e,t)}tick(){this.dispatcher.tickSync(this.registry.systemTaskMap)}dispatch(e){if(!(e instanceof x)){d.error(new Error(`[Virid Dispatch] Type Error: Message must be an instance of BaseMessage,message:${e}`));return}this.pipeline(e,()=>{if(!this.registry.systemTaskMap.has(e.constructor)){d.error(new Error(`[Virid Dispatch] No handler for message: ${e.constructor.name}`));return}this.dispatcher.stage(e),this.manual||this.dispatcher.tick(this.registry.systemTaskMap)})}pipeline(e,t){let s=0,o=i(()=>{s<this.middlewares.length?this.middlewares[s++](e,o):t()},"next");o()}register(e,t,s=0){return this.registry.register(e,t,s)}};i(ne,"MessageEngine");var V=ne;var y={SYSTEM:"virid:core:system",MESSAGE:"virid:core:message",CONTROLLER:"virid:core:controller",COMPONENT:"virid:core:component",SAFE:"virid:core:safe",OBSERVER:"virid:core:observer"};function S(r){if(!r)return;(Array.isArray(r)?r:[r]).forEach(t=>{t instanceof x?d.write(t):d.warn("[Virid HandleResult] Invalid Return Type: Must return Message or Message[].")})}i(S,"handleResult");function Ee(r){let e=[];if(r.forEach((t,s)=>{(t===x||t&&t.prototype instanceof x)&&e.push({type:t,idx:s})}),e.length===0)return null;if(e.length>1){let t=e.map(s=>`[Index: ${s.idx}, Name: ${s.type.name}]`).join(", ");throw new Error(`[Virid System] Multiple Messages: Multiple Message type parameters detected, this is not allowed! specific location: ${t}`)}return e[0]}i(Ee,"checkMessageParam");function _(r={messageClass:null,priority:0}){return(e,t,s)=>{if(typeof e!="function")throw new Error(`[Virid System] Method Type Error: The Method ${t} is not a static method, please check if there is a static keyword tag.`);let o=s.value,n=Reflect.getMetadata("design:paramtypes",e,t);if(!n)throw new Error('[Virid System] System Parameter Loss: Unable to recognize system parameters, please confirm if import "reflect-metadata" was introduced at the beginning.');let c=n.map((g,H)=>g===void 0?H:-1).filter(g=>g!==-1);if(c.length>0)throw new Error(`[Virid System] Parameter Metadata Loss in "${t}": One or more parameters have 'undefined' types. This usually happens when you forget to add a type annotation or due to circular dependencies. Check parameter at indices: [${c.join(", ")}]`);let l,m=-1,u=!1,w=n.indexOf(Array);if(w!==-1){if(!r.messageClass)throw new Error("[Virid System] System Parameter Loss: When using batch processing mode with Array, the messageClass parameter must be specified in decorator options.");if(!(r.messageClass.prototype instanceof A))throw new Error("[Virid System] System Parameter Loss: When using the batch processing mode, the messageClass parameter must inherit from SingleMessage.");l=r.messageClass,m=w,u=!0}else{let g=Ee(n);if(g&&r.messageClass)throw new Error(`[Virid System] Multiple Messages Are Not Allowed: Cannot specify messageClass in decorator options while already declaring it in method parameters at index ${g.idx} in ${t}.`);if(g)l=g.type,m=g.idx;else if(r.messageClass)l=r.messageClass,m=-1;else throw new Error("[Virid System] System Parameter Loss: Please declare the message type either in method parameters or via the Message decorator options.")}let E={params:n,targetClass:e,methodName:t,originalMethod:o},b={messageClass:l,messageIdx:m,priority:r.priority||0,batchMode:u};s.value.systemContext=E,s.value.systemConfig=b}}i(_,"System");function Me(){return(r,e,t)=>{let s=Reflect.getMetadata(y.SAFE,r)||new Set;s.add(e),Reflect.defineMetadata(y.SAFE,s,r)}}i(Me,"Safe");function ve(r){return(e,t)=>{let s=Reflect.getMetadata(y.OBSERVER,e)||[];s.push({propertyKey:t,callback:r}),Reflect.defineMetadata(y.OBSERVER,s,e)}}i(ve,"Observer");function $e(){return r=>{Reflect.defineMetadata(y.CONTROLLER,!0,r)}}i($e,"Controller");function ae(){return r=>{Reflect.defineMetadata(y.COMPONENT,!0,r)}}i(ae,"Component");var Ce=["push","pop","shift","unshift","splice","sort","reverse"];function B(r){return!r||typeof r!="object"||Object.prototype.hasOwnProperty.call(r,"__virid_observer_processed__")||(Object.defineProperty(r,"__virid_observer_processed__",{value:!0,enumerable:!1,configurable:!0}),(Reflect.getMetadata(y.OBSERVER,r)||[]).forEach(({propertyKey:t,callback:s})=>{let o={value:r[t]},n=new Proxy(o,{get(l,m){let u=l.value;return Array.isArray(u)&&Ce.includes(m)?(...w)=>{let E=[...u],b=u[m].apply(u,w),g=s.call(r,E,u);return S(g),b}:u},set(l,m,u){let w=l.value;if(u===w)return!0;l.value=u;let E=s.call(r,w,u);return S(E),!0}}),c=i(()=>n.value,"getter");c.__virid_box__=o,Object.defineProperty(r,t,{get:c,set:i(l=>{n.value=l},"set"),enumerable:!0,configurable:!0}),o.value&&typeof o.value=="object"&&B(o.value)}),Reflect.ownKeys(r).forEach(t=>{if(t==="__virid_observer_processed__")return;let s=Object.getOwnPropertyDescriptor(r,t);if(s&&s.get)return;let o=r[t];o&&typeof o=="object"&&B(o)})),r}i(B,"bindObservers");var ce=class ce{constructor(){a(this,"bindings",new Map);a(this,"singletonInstances",new Map);a(this,"activationHooks",[])}addActivationHook(e,t){t?this.activationHooks.unshift(e):this.activationHooks.push(e)}bind(e){if(e.length>0)throw new Error(`[Virid Container] Cannot Bind Component Or Controller: The Class ${e.name} should not have mandatory parameters.`);if(Reflect.getMetadata(y.COMPONENT,e)){let t={type:"singleton",ctor:e};this.bindings.set(e,t)}else if(Reflect.getMetadata(y.CONTROLLER,e)){let t={type:"transient",ctor:e};this.bindings.set(e,t)}else throw new Error(`[Virid Container] Cannot Bind Component Or Controller: The Class ${e.name} is not decorated with @Component or @Controller`)}spawn(e){let t=e.constructor;if(Reflect.hasMetadata(y.COMPONENT,t)){let s={type:"singleton",ctor:t};this.bindings.set(t,s),this.singletonInstances.set(t,e)}else throw new Error(`[Virid Container] Cannot spawn Component: The Class ${t.name} is not decorated with @Component`)}get(e){let t=this.bindings.get(e);if(!t)throw new Error(`[Virid Container] Cannot Get Component Or Controller: No binding found for ${e}`);let s=t.ctor;if(t.type==="singleton"){if(!this.singletonInstances.has(e)){let n=new s,c=this.handleActivation(n);this.singletonInstances.set(e,c)}return this.singletonInstances.get(e)}let o=new s;return this.handleActivation(o)}handleActivation(e){for(let t of this.activationHooks)e=t(e);return e}};i(ce,"ViridContainer");var U=ce;function Te(r,e,t,s){var o=arguments.length,n=o<3?e:s===null?s=Object.getOwnPropertyDescriptor(e,t):s,c;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")n=Reflect.decorate(r,e,t,s);else for(var l=r.length-1;l>=0;l--)(c=r[l])&&(n=(o<3?c(n):o>3?c(e,t,n):c(e,t))||n);return o>3&&n&&Object.defineProperty(e,t,n),n}i(Te,"_ts_decorate");function fe(r,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(r,e)}i(fe,"_ts_metadata");var le=class le{constructor(e,t){a(this,"container",new U);a(this,"engine");a(this,"installedPlugins",new Set);this.engine=new V(e,t),this.container.spawn(this)}onActivate(e,t=!1){this.container.addActivationHook(e,t)}tick(){this.engine.tick()}get(e){return this.container.get(e)}bind(e){this.container.bind(e)}spawn(e){this.container.spawn(e)}useMiddleware(e,t=!1){this.engine.useMiddleware(e,t)}onBeforeExecute(e,t,s=!1){this.engine.onBeforeExecute(e,t,s)}onAfterExecute(e,t,s=!1){this.engine.onAfterExecute(e,t,s)}onBeforeTick(e,t=!1){this.engine.onBeforeTick(e,t)}onAfterTick(e,t=!1){this.engine.onAfterTick(e,t)}use(e,t){if(this.installedPlugins.has(e.name))return d.warn(`[Virid Plugin] Duplicate Installation: Plugin ${e.name} has already been installed.`),this;try{e.install(this,t),this.installedPlugins.add(e.name)}catch(s){d.error(s,`[Virid Plugin]: Install Failed: ${e.name}`)}return this}register(e){let t=e.systemContext,s=e.systemConfig;if(!t||!s)throw new Error(`[Virid System] System Parameter Loss: Please declare ${e.name} using the @System decorator first.`);let{params:o,targetClass:n,originalMethod:c}=t,{messageClass:l,messageIdx:m,priority:u,batchMode:w}=s,E=typeof S=="function"?S:h=>h,b=i(h=>h instanceof Promise?h.then(E):E(h),"processResult"),g=new Array(o.length),H=!1,F=i(()=>{for(let h=0;h<o.length;h++)if(h!==m){let p=this.get(o[h]);if(!p)throw new Error(`[Virid System] Unknown Inject Data Types: ${o[h].name||o[h]} is not registered in the container for system '${e.name}'!`);g[h]=p}H=!0},"initDeps"),T;return m===-1?T=i(()=>(H||F(),b(c.apply(n,g))),"wrappedSystem"):o.length===1?w?T=i(h=>{let p=Array.isArray(h)?h:[h];if(p.length>0&&!(p[0]instanceof l))throw new Error(`[Virid System] Type Mismatch: Expected list of ${l.name}, but got ${p[0]?.constructor?.name}`);return b(c.call(n,p))},"wrappedSystem"):T=i(h=>{let p=Array.isArray(h)?h[h.length-1]:h;if(!(p instanceof l))throw new Error(`[Virid System] Type Mismatch: Expected ${l.name}, but got ${p?.constructor?.name}`);return b(c.call(n,p))},"wrappedSystem"):w?T=i(h=>{H||F();let p=Array.isArray(h)?h:[h];if(p.length>0&&!(p[0]instanceof l))throw new Error(`[Virid System] Type Mismatch: Expected list of ${l.name}, but got ${p[0]?.constructor?.name}`);let P=[...g];return P[m]=p,b(c.apply(n,P))},"wrappedSystem"):T=i(h=>{H||F();let p=Array.isArray(h)?h[h.length-1]:h;if(!(p instanceof l))throw new Error(`[Virid System] Type Mismatch: Expected ${l.name}, but got ${p?.constructor?.name}`);let P=[...g];return P[m]=p,b(c.apply(n,P))},"wrappedSystem"),T.systemContext=t,this.engine.register(l,T,u)}};i(le,"ViridApp");var R=le;R=Te([ae(),fe("design:type",Function),fe("design:paramtypes",[Number,Boolean])],R);function he(r,e,t,s){var o=arguments.length,n=o<3?e:s===null?s=Object.getOwnPropertyDescriptor(e,t):s,c;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")n=Reflect.decorate(r,e,t,s);else for(var l=r.length-1;l>=0;l--)(c=r[l])&&(n=(o<3?c(n):o>3?c(e,t,n):c(e,t))||n);return o>3&&n&&Object.defineProperty(e,t,n),n}i(he,"_ts_decorate");function k(r,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(r,e)}i(k,"_ts_metadata");var z=!0;function de(r){z=r}i(de,"toggleSwitch");var f={reset:"\x1B[0m",red:"\x1B[31m",yellow:"\x1B[33m",blue:"\x1B[34m",magenta:"\x1B[35m",cyan:"\x1B[36m",gray:"\x1B[90m",bold:"\x1B[1m",green:"\x1B[32m"},I,O=(I=class{static globalInfoHandler(e){if(!z)return;let t=`${f.green}${f.bold} \u2714 [Virid Info] ${f.reset}`,s=`${f.magenta} ${e.context} ${f.reset}`;console.log(`${t}${f.gray} Global Info Caught: ${f.reset}
13
- ${f.green} Details: ${f.reset}`,s||"unknown Info")}static globalErrorHandler(e){if(!z)return;let t=`${f.red}${f.bold} \u2716 [Virid Error] ${f.reset}`,s=`${f.magenta} ${e.context} ${f.reset}`;console.error(`${t}${f.gray} Global Error Caught: ${f.reset}
14
- ${f.red} Context: ${f.reset} ${s}
15
- ${f.red} Details: ${f.reset}`,e.error||e||"unknown Error")}static globalWarnHandler(e){if(!z)return;let t=`${f.yellow}${f.bold} \u26A0 [Virid Warn] ${f.reset}`,s=`${f.cyan} ${e.context} ${f.reset}`;console.warn(`${t}${f.gray} Global Warn Caught: ${f.reset}
16
- ${f.yellow} Context:${f.reset} ${s}`)}},i(I,"ViridLogHandler"),I);he([_(),k("design:type",Function),k("design:paramtypes",[typeof $>"u"?Object:$]),k("design:returntype",void 0)],O,"globalInfoHandler",null);he([_(),k("design:type",Function),k("design:paramtypes",[typeof M>"u"?Object:M]),k("design:returntype",void 0)],O,"globalErrorHandler",null);he([_(),k("design:type",Function),k("design:paramtypes",[typeof v>"u"?Object:v]),k("design:returntype",void 0)],O,"globalWarnHandler",null);function pe(r){r.register(O.globalInfoHandler),r.register(O.globalErrorHandler),r.register(O.globalWarnHandler)}i(pe,"registerBasicSystems");function Ae(r=j){r={...j,...r};let e=new R(r.maxDepth,r.manual);pe(e),de(r.enableLog),e.onActivate(B);let t=e;return e.spawn(t),e}i(Ae,"createVirid");0&&(module.exports={BaseMessage,Component,Controller,ErrorMessage,EventMessage,InfoMessage,MessageEngine,MessageRegistry,MessageWriter,Observer,Safe,SingleMessage,System,VIRID_METADATA,ViridApp,WarnMessage,activateInstance,bindObservers,createVirid,defaultConfig,handleResult});
12
+ MessageData: ${JSON.stringify(t.message)}`)}}}executeTickHooks(e){let t={tick:this.globalTick,timestamp:Date.now(),payload:this.tickPayload};e.forEach(s=>s(t))}};i(oe,"Dispatcher");var W=oe,ie=class ie{constructor(e,t,s,o,n,c){a(this,"fn");a(this,"priority");a(this,"message");a(this,"hookContext");a(this,"beforeExecuteHooks");a(this,"afterExecuteHooks");a(this,"success",!0);this.fn=e,this.priority=t,this.message=s,this.hookContext=o,this.beforeExecuteHooks=n,this.afterExecuteHooks=c}triggerHooks(e){let t=Array.isArray(this.message)?this.message[0]:this.message;if(t){for(let s of e)if(t instanceof s.type)try{let o=s.handler(this.message,this.hookContext,this.success);o instanceof Promise&&o.catch(n=>{f.error(n,`[Virid Hook] Async Hook Error: It is prohibited to use asynchronous hooks within Hook: ${s.type.name}`)})}catch(o){f.error(o,`[Virid Hook] Hook Execute Failed: Triggered by: ${t.constructor.name}, Registered type: ${s.type.name}`)}}}execute(){this.triggerHooks(this.beforeExecuteHooks);let e=i(()=>this.triggerHooks(this.afterExecuteHooks),"runAfter");try{let t=this.fn(this.message);return t instanceof Promise?t.catch(()=>this.success=!1).finally(e):(e(),t)}catch(t){throw this.success=!1,e(),t}}};i(ie,"ExecutionTask");var G=ie;var ne=class ne{constructor(e,t){a(this,"dispatcher");a(this,"registry",new D);a(this,"middlewares",[]);a(this,"manual");this.dispatcher=new W(e),this.manual=t,Y(this)}useMiddleware(e,t){this.middlewares.push(e)}onBeforeExecute(e,t,s){this.dispatcher.addBeforeExecute(e,t,s)}onAfterExecute(e,t,s){this.dispatcher.addAfterExecute(e,t,s)}onBeforeTick(e,t){this.dispatcher.addBeforeTick(e,t)}onAfterTick(e,t){this.dispatcher.addAfterTick(e,t)}tick(){this.dispatcher.tickSync(this.registry.systemTaskMap)}dispatch(e){if(!(e instanceof x)){f.error(new Error(`[Virid Dispatch] Type Error: Message must be an instance of BaseMessage,message:${e}`));return}this.pipeline(e,()=>{if(!this.registry.systemTaskMap.has(e.constructor)){f.error(new Error(`[Virid Dispatch] No handler for message: ${e.constructor.name}`));return}this.dispatcher.stage(e),this.manual||this.dispatcher.tick(this.registry.systemTaskMap)})}pipeline(e,t){let s=0,o=i(()=>{s<this.middlewares.length?this.middlewares[s++](e,o):t()},"next");o()}register(e,t,s=0){return this.registry.register(e,t,s)}};i(ne,"MessageEngine");var V=ne;var y={SYSTEM:"virid:core:system",MESSAGE:"virid:core:message",CONTROLLER:"virid:core:controller",COMPONENT:"virid:core:component",SAFE:"virid:core:safe",OBSERVER:"virid:core:observer"};function S(r){if(!r)return;(Array.isArray(r)?r:[r]).forEach(t=>{t instanceof x?f.write(t):f.warn("[Virid HandleResult] Invalid Return Type: Must return Message or Message[].")})}i(S,"handleResult");function Ee(r){let e=[];if(r.forEach((t,s)=>{(t===x||t&&t.prototype instanceof x)&&e.push({type:t,idx:s})}),e.length===0)return null;if(e.length>1){let t=e.map(s=>`[Index: ${s.idx}, Name: ${s.type.name}]`).join(", ");throw new Error(`[Virid System] Multiple Messages: Multiple Message type parameters detected, this is not allowed! specific location: ${t}`)}return e[0]}i(Ee,"checkMessageParam");function _(r={messageClass:null,priority:0}){return(e,t,s)=>{if(typeof e!="function")throw new Error(`[Virid System] Method Type Error: The Method ${t} is not a static method, please check if there is a static keyword tag.`);let o=s.value,n=Reflect.getMetadata("design:paramtypes",e,t);if(!n)throw new Error('[Virid System] System Parameter Loss: Unable to recognize system parameters, please confirm if import "reflect-metadata" was introduced at the beginning.');let c=n.map((g,H)=>g===void 0?H:-1).filter(g=>g!==-1);if(c.length>0)throw new Error(`[Virid System] Parameter Metadata Loss in "${t}": One or more parameters have 'undefined' types. This usually happens when you forget to add a type annotation or due to circular dependencies. Check parameter at indices: [${c.join(", ")}]`);let l,m=-1,u=!1,w=n.indexOf(Array);if(w!==-1){if(!r.messageClass)throw new Error("[Virid System] System Parameter Loss: When using batch processing mode with Array, the messageClass parameter must be specified in decorator options.");if(!(r.messageClass.prototype instanceof $))throw new Error("[Virid System] System Parameter Loss: When using the batch processing mode, the messageClass parameter must inherit from SingleMessage.");l=r.messageClass,m=w,u=!0}else{let g=Ee(n);if(g&&r.messageClass)throw new Error(`[Virid System] Multiple Messages Are Not Allowed: Cannot specify messageClass in decorator options while already declaring it in method parameters at index ${g.idx} in ${t}.`);if(g)l=g.type,m=g.idx;else if(r.messageClass)l=r.messageClass,m=-1;else throw new Error("[Virid System] System Parameter Loss: Please declare the message type either in method parameters or via the Message decorator options.")}let E={params:n,targetClass:e,methodName:t,originalMethod:o},b={messageClass:l,messageIdx:m,priority:r.priority||0,batchMode:u};s.value.systemContext=E,s.value.systemConfig=b}}i(_,"System");function Me(){return(r,e,t)=>{let s=Reflect.getMetadata(y.SAFE,r)||new Set;s.add(e),Reflect.defineMetadata(y.SAFE,s,r)}}i(Me,"Safe");function ve(r){return(e,t)=>{let s=Reflect.getMetadata(y.OBSERVER,e)||[];s.push({propertyKey:t,callback:r}),Reflect.defineMetadata(y.OBSERVER,s,e)}}i(ve,"Observer");function Ce(){return r=>{Reflect.defineMetadata(y.CONTROLLER,!0,r)}}i(Ce,"Controller");function ae(){return r=>{Reflect.defineMetadata(y.COMPONENT,!0,r)}}i(ae,"Component");var Te=["push","pop","shift","unshift","splice","sort","reverse"];function B(r){return!r||typeof r!="object"||Object.prototype.hasOwnProperty.call(r,"__virid_observer_processed__")||(Object.defineProperty(r,"__virid_observer_processed__",{value:!0,enumerable:!1,configurable:!0}),(Reflect.getMetadata(y.OBSERVER,r)||[]).forEach(({propertyKey:t,callback:s})=>{let o={value:r[t]},n=new Proxy(o,{get(l,m){let u=l.value;return Array.isArray(u)&&Te.includes(m)?(...w)=>{let E=[...u],b=u[m].apply(u,w),g=s.call(r,E,u);return S(g),b}:u},set(l,m,u){let w=l.value;if(u===w)return!0;l.value=u;let E=s.call(r,w,u);return S(E),!0}}),c=i(()=>n.value,"getter");c.__virid_box__=o,Object.defineProperty(r,t,{get:c,set:i(l=>{n.value=l},"set"),enumerable:!0,configurable:!0}),o.value&&typeof o.value=="object"&&B(o.value)}),Reflect.ownKeys(r).forEach(t=>{if(t==="__virid_observer_processed__")return;let s=Object.getOwnPropertyDescriptor(r,t);if(s&&s.get)return;let o=r[t];o&&typeof o=="object"&&B(o)})),r}i(B,"bindObservers");var ce=class ce{constructor(){a(this,"bindings",new Map);a(this,"singletonInstances",new Map);a(this,"activationHooks",[])}addActivationHook(e,t){t?this.activationHooks.unshift(e):this.activationHooks.push(e)}bind(e){if(e.length>0)throw new Error(`[Virid Container] Cannot Bind Component Or Controller: The Class ${e.name} should not have mandatory parameters.`);if(Reflect.getMetadata(y.COMPONENT,e)){let t={type:"singleton",ctor:e};this.bindings.set(e,t)}else if(Reflect.getMetadata(y.CONTROLLER,e)){let t={type:"transient",ctor:e};this.bindings.set(e,t)}else throw new Error(`[Virid Container] Cannot Bind Component Or Controller: The Class ${e.name} is not decorated with @Component or @Controller`)}spawn(e){let t=e.constructor;if(Reflect.hasMetadata(y.COMPONENT,t)){let s={type:"singleton",ctor:t};this.bindings.set(t,s),this.singletonInstances.set(t,e)}else throw new Error(`[Virid Container] Cannot spawn Component: The Class ${t.name} is not decorated with @Component`)}get(e){let t=this.bindings.get(e);if(!t)throw new Error(`[Virid Container] Cannot Get Component Or Controller: No binding found for ${e}`);let s=t.ctor;if(t.type==="singleton"){if(!this.singletonInstances.has(e)){let n=new s,c=this.handleActivation(n);this.singletonInstances.set(e,c)}return this.singletonInstances.get(e)}let o=new s;return this.handleActivation(o)}handleActivation(e){for(let t of this.activationHooks)e=t(e);return e}};i(ce,"ViridContainer");var U=ce;function Ae(r,e,t,s){var o=arguments.length,n=o<3?e:s===null?s=Object.getOwnPropertyDescriptor(e,t):s,c;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")n=Reflect.decorate(r,e,t,s);else for(var l=r.length-1;l>=0;l--)(c=r[l])&&(n=(o<3?c(n):o>3?c(e,t,n):c(e,t))||n);return o>3&&n&&Object.defineProperty(e,t,n),n}i(Ae,"_ts_decorate");function fe(r,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(r,e)}i(fe,"_ts_metadata");var le=class le{constructor(e,t){a(this,"container",new U);a(this,"engine");a(this,"installedPlugins",new Set);this.engine=new V(e,t),this.container.spawn(this)}onActivate(e,t=!1){this.container.addActivationHook(e,t)}tick(){this.engine.tick()}get(e){return this.container.get(e)}bind(e){this.container.bind(e)}spawn(e){this.container.spawn(e)}useMiddleware(e,t=!1){this.engine.useMiddleware(e,t)}onBeforeExecute(e,t,s=!1){this.engine.onBeforeExecute(e,t,s)}onAfterExecute(e,t,s=!1){this.engine.onAfterExecute(e,t,s)}onBeforeTick(e,t=!1){this.engine.onBeforeTick(e,t)}onAfterTick(e,t=!1){this.engine.onAfterTick(e,t)}use(e,t){if(this.installedPlugins.has(e.name))return f.warn(`[Virid Plugin] Duplicate Installation: Plugin ${e.name} has already been installed.`),this;try{e.install(this,t),this.installedPlugins.add(e.name)}catch(s){f.error(s,`[Virid Plugin]: Install Failed: ${e.name}`)}return this}register(e){let t=e.systemContext,s=e.systemConfig;if(!t||!s)throw new Error(`[Virid System] System Parameter Loss: Please declare ${e.name} using the @System decorator first.`);let{params:o,targetClass:n,originalMethod:c}=t,{messageClass:l,messageIdx:m,priority:u,batchMode:w}=s,E=typeof S=="function"?S:h=>h,b=i(h=>h instanceof Promise?h.then(E):E(h),"processResult"),g=new Array(o.length),H=!1,F=i(()=>{for(let h=0;h<o.length;h++)if(h!==m){let p=this.get(o[h]);if(!p)throw new Error(`[Virid System] Unknown Inject Data Types: ${o[h].name||o[h]} is not registered in the container for system '${e.name}'!`);g[h]=p}H=!0},"initDeps"),A;return m===-1?A=i(()=>(H||F(),b(c.apply(n,g))),"wrappedSystem"):o.length===1?w?A=i(h=>{let p=Array.isArray(h)?h:[h];if(p.length>0&&!(p[0]instanceof l))throw new Error(`[Virid System] Type Mismatch: Expected list of ${l.name}, but got ${p[0]?.constructor?.name}`);return b(c.call(n,p))},"wrappedSystem"):A=i(h=>{let p=Array.isArray(h)?h[h.length-1]:h;if(!(p instanceof l))throw new Error(`[Virid System] Type Mismatch: Expected ${l.name}, but got ${p?.constructor?.name}`);return b(c.call(n,p))},"wrappedSystem"):w?A=i(h=>{H||F();let p=Array.isArray(h)?h:[h];if(p.length>0&&!(p[0]instanceof l))throw new Error(`[Virid System] Type Mismatch: Expected list of ${l.name}, but got ${p[0]?.constructor?.name}`);let P=[...g];return P[m]=p,b(c.apply(n,P))},"wrappedSystem"):A=i(h=>{H||F();let p=Array.isArray(h)?h[h.length-1]:h;if(!(p instanceof l))throw new Error(`[Virid System] Type Mismatch: Expected ${l.name}, but got ${p?.constructor?.name}`);let P=[...g];return P[m]=p,b(c.apply(n,P))},"wrappedSystem"),A.systemContext=t,this.engine.register(l,A,u)}};i(le,"ViridApp");var R=le;R=Ae([ae(),fe("design:type",Function),fe("design:paramtypes",[Number,Boolean])],R);function he(r,e,t,s){var o=arguments.length,n=o<3?e:s===null?s=Object.getOwnPropertyDescriptor(e,t):s,c;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")n=Reflect.decorate(r,e,t,s);else for(var l=r.length-1;l>=0;l--)(c=r[l])&&(n=(o<3?c(n):o>3?c(e,t,n):c(e,t))||n);return o>3&&n&&Object.defineProperty(e,t,n),n}i(he,"_ts_decorate");function k(r,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(r,e)}i(k,"_ts_metadata");var z=!0;function de(r){z=r}i(de,"toggleSwitch");var d={reset:"\x1B[0m",red:"\x1B[31m",yellow:"\x1B[33m",blue:"\x1B[34m",magenta:"\x1B[35m",cyan:"\x1B[36m",gray:"\x1B[90m",bold:"\x1B[1m",green:"\x1B[32m"},I,O=(I=class{static globalInfoHandler(e){if(!z)return;let t=`${d.green}${d.bold} \u2714 [Virid Info] ${d.reset}`;console.log(`${t}${d.gray} Global Info Caught: ${d.reset}
13
+ ${d.green} Details: ${d.reset}`,e.context||"unknown Info")}static globalErrorHandler(e){if(!z)return;let t=`${d.red}${d.bold} \u2716 [Virid Error] ${d.reset}`;console.error(`${t}${d.gray} Global Error Caught: ${d.reset}
14
+ ${d.red} Context: ${d.reset} ${e.context}
15
+ ${d.red} Details: ${d.reset}`,e.error||e||"unknown Error")}static globalWarnHandler(e){if(!z)return;let t=`${d.yellow}${d.bold} \u26A0 [Virid Warn] ${d.reset}`;console.warn(`${t}${d.gray} Global Warn Caught: ${d.reset}
16
+ ${d.yellow} Context:${d.reset} ${e.context}`)}},i(I,"ViridLogHandler"),I);he([_(),k("design:type",Function),k("design:paramtypes",[typeof C>"u"?Object:C]),k("design:returntype",void 0)],O,"globalInfoHandler",null);he([_(),k("design:type",Function),k("design:paramtypes",[typeof M>"u"?Object:M]),k("design:returntype",void 0)],O,"globalErrorHandler",null);he([_(),k("design:type",Function),k("design:paramtypes",[typeof v>"u"?Object:v]),k("design:returntype",void 0)],O,"globalWarnHandler",null);function pe(r){r.register(O.globalInfoHandler),r.register(O.globalErrorHandler),r.register(O.globalWarnHandler)}i(pe,"registerBasicSystems");function $e(r=j){r={...j,...r};let e=new R(r.maxDepth,r.manual);pe(e),de(r.enableLog),e.onActivate(B);let t=e;return e.spawn(t),e}i($e,"createVirid");0&&(module.exports={BaseMessage,Component,Controller,ErrorMessage,EventMessage,InfoMessage,MessageEngine,MessageRegistry,MessageWriter,Observer,Safe,SingleMessage,System,VIRID_METADATA,ViridApp,WarnMessage,activateInstance,bindObservers,createVirid,defaultConfig,handleResult});
17
17
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/interfaces/common.ts","../src/core/io.ts","../src/core/message.ts","../src/core/registry.ts","../src/core/staging.ts","../src/core/dispatcher.ts","../src/core/engine.ts","../src/decorators/constant.ts","../src/decorators/decorator.ts","../src/decorators/bind.ts","../src/container.ts","../src/app.ts","../src/utils.ts"],"sourcesContent":["/*\n * Copyright (c) 2026-present Ailrid\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * Description: Virid Core Dispatcher - The heart of CCS Architecture.\n */\nexport * from \"./interfaces\";\nexport * from \"./core\";\nexport * from \"./decorators\";\nexport * from \"./app\";\n\nimport { ViridApp } from \"./app\";\nimport { AppConfig, defaultConfig } from \"./interfaces\";\nimport { toggleSwitch, registerBasicSystems } from \"./utils\";\nimport { bindObservers } from \"./decorators/bind\";\n\nexport function createVirid(config: AppConfig = defaultConfig): ViridApp {\n config = { ...defaultConfig, ...config };\n const app = new ViridApp(config.maxDepth!, config.manual!);\n\n registerBasicSystems(app);\n toggleSwitch(config.enableLog!);\n app.onActivate(bindObservers);\n const self = app;\n app.spawn(self);\n return app;\n}\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Core\n */\nexport type Newable<\n TInstance = unknown,\n TArgs extends unknown[] = any[],\n> = new (...args: TArgs) => TInstance;\n\nexport interface AppConfig {\n maxDepth?: number;\n enableLog?: boolean;\n manual?: boolean;\n}\n\nconst defaultConfig: AppConfig = {\n maxDepth: 100,\n enableLog: true,\n manual: false,\n};\nexport { defaultConfig };\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Core\n */\nimport { type MessageEngine } from \"./engine\";\nimport {\n type BaseMessage,\n ErrorMessage,\n InfoMessage,\n WarnMessage,\n} from \"./message\";\nimport { type Newable } from \"../interfaces\";\n\nlet activeInstance: MessageEngine | null = null;\nexport function activateInstance(instance: MessageEngine) {\n activeInstance = instance;\n}\n\nfunction dispatch(message: BaseMessage): void {\n if (activeInstance) {\n activeInstance.dispatch(message);\n } else {\n console.error(\"[Virid MessageWriter] No active instance found.\");\n }\n}\n\nexport class MessageWriter {\n public static write<T extends BaseMessage, K extends Newable<T>>(\n target: K | T,\n ...args: ConstructorParameters<K>\n ): void {\n const instance =\n typeof target === \"function\"\n ? new (target as any)(...args)\n : (target as T);\n\n dispatch(instance);\n }\n\n public static error(e: Error, context: string = \"\"): void {\n this.write(new ErrorMessage(e, context));\n }\n\n public static warn(context: string): void {\n this.write(new WarnMessage(context));\n }\n public static info(context: string): void {\n this.write(new InfoMessage(context));\n }\n}\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Core\n */\nimport { Newable } from \"../interfaces\";\nimport { MessageWriter } from \"./io\";\n\nexport abstract class BaseMessage {\n static send<T extends Newable<any>>(\n this: T,\n ...args: ConstructorParameters<T>\n ) {\n MessageWriter.write(this as any, ...args);\n }\n}\n\nexport abstract class SingleMessage extends BaseMessage {\n constructor() {\n super();\n }\n}\n\nexport abstract class EventMessage extends BaseMessage {\n constructor() {\n super();\n }\n}\n\nexport class ErrorMessage extends EventMessage {\n constructor(\n public readonly error: Error,\n public readonly context?: string,\n ) {\n super();\n }\n}\n\nexport class WarnMessage extends EventMessage {\n constructor(public readonly context: string) {\n super();\n }\n}\n\nexport class InfoMessage extends EventMessage {\n constructor(public readonly context: string) {\n super();\n }\n}\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Core\n */\nimport { type SystemTask } from \"../interfaces\";\nimport { MessageWriter } from \"./io\";\n\nexport class MessageRegistry {\n systemTaskMap = new Map<any, SystemTask[]>();\n\n /**\n * Register the message and corresponding system and return an uninstallation function\n */\n register(\n messageClass: any,\n systemFn: (...args: any[]) => any,\n priority: number = 0,\n ): () => void {\n const systems = this.systemTaskMap.get(messageClass) || [];\n const existingIndex = systems.findIndex(\n (s) =>\n (s.fn as any).systemContext.originalMethod ===\n (systemFn as any).systemContext.originalMethod,\n );\n if (existingIndex === -1) {\n systems.push({ fn: systemFn, priority });\n systems.sort((a, b) => b.priority - a.priority);\n this.systemTaskMap.set(messageClass, systems);\n } else {\n // Check for duplicate registrations\n const funcName = (systemFn as any).methodName;\n const targetClass = (systemFn as any).targetClass;\n MessageWriter.error(\n new Error(\n `[Virid Error] System Already Registered: Message Class ${messageClass.name}, Location ${targetClass.name}.${funcName}`,\n ),\n );\n return () => {};\n }\n\n return () => {\n const currentSystems = this.systemTaskMap.get(messageClass);\n if (currentSystems) {\n const index = currentSystems.findIndex((s) => s.fn === systemFn);\n if (index !== -1) {\n currentSystems.splice(index, 1);\n // 如果该消息类型没有任何监听者了,清理掉 Key,保持内存干净\n if (currentSystems.length === 0) {\n this.systemTaskMap.delete(messageClass);\n }\n }\n }\n };\n }\n}\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Core\n */\nimport { MessageWriter } from \"./io\";\nimport { type BaseMessage, EventMessage, SingleMessage } from \"./message\";\n\nexport class Staging {\n public signalActive = new Map<any, any[]>();\n public eventActive: any[] = [];\n private signalStaging = new Map<any, any[]>();\n private eventStaging: any[] = [];\n\n stage(event: BaseMessage) {\n if (event instanceof SingleMessage) {\n const type = event.constructor;\n if (!this.signalStaging.has(type)) this.signalStaging.set(type, []);\n this.signalStaging.get(type)!.push(event);\n } else if (event instanceof EventMessage) {\n this.eventStaging.push(event);\n } else {\n MessageWriter.error(\n new Error(\n `[Virid Message] Invalid Message:\\n${event.constructor.name} must extend SingleMessage or EventMessage`,\n ),\n );\n }\n }\n\n flip() {\n this.signalActive = this.signalStaging;\n this.eventActive = this.eventStaging;\n this.signalStaging = new Map();\n this.eventStaging = [];\n }\n\n clearSignals() {\n // types.forEach((type) => this.signalActive.delete(type));\n this.signalActive = new Map();\n }\n\n clearEvents() {\n this.eventActive = [];\n }\n \n isEmpty() {\n return this.signalStaging.size === 0 && this.eventStaging.length === 0;\n }\n\n /**\n * 重置所有池子\n */\n reset() {\n this.signalActive = new Map();\n this.signalStaging = new Map();\n this.eventStaging = [];\n this.eventActive = [];\n }\n}\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Core\n */\n\nimport { MessageWriter } from \"./io\";\nimport {\n type ExecuteHook,\n type ExecuteHookContext,\n type SystemTask,\n type MessageIdentifier,\n type SystemContext,\n type TickHook,\n type TickHookContext,\n} from \"../interfaces\";\nimport { type BaseMessage } from \"./message\";\nimport { Staging } from \"./staging\";\n\nexport class Dispatcher {\n constructor(private maxDepth: number) {}\n private isRunning = false;\n private globalTick = 0;\n private internalDepth = 0;\n private staging = new Staging();\n\n private tickPayload: { [key: string]: any } = {};\n\n private beforeExecuteHooks: Array<{\n type: MessageIdentifier<any>;\n handler: ExecuteHook<any>;\n }> = [];\n private afterExecuteHooks: Array<{\n type: MessageIdentifier<any>;\n handler: ExecuteHook<any>;\n }> = [];\n\n private beforeTickHooks: Array<TickHook> = [];\n private afterTickHooks: Array<TickHook> = [];\n\n public addBeforeExecute<T extends BaseMessage>(\n type: MessageIdentifier<T>,\n hook: ExecuteHook<T>,\n front: boolean,\n ) {\n if (front)\n this.beforeExecuteHooks.unshift({\n type,\n handler: hook as ExecuteHook<any>,\n });\n else\n this.beforeExecuteHooks.push({ type, handler: hook as ExecuteHook<any> });\n }\n public addAfterExecute<T extends BaseMessage>(\n type: MessageIdentifier<T>,\n hook: ExecuteHook<T>,\n front: boolean,\n ) {\n if (front)\n this.afterExecuteHooks.unshift({\n type,\n handler: hook as ExecuteHook<any>,\n });\n else\n this.afterExecuteHooks.push({ type, handler: hook as ExecuteHook<any> });\n }\n public addBeforeTick(hook: TickHook, front: boolean) {\n if (front) this.beforeTickHooks.unshift(hook);\n else this.beforeTickHooks.push(hook);\n }\n public addAfterTick(hook: TickHook, front: boolean) {\n if (front) this.afterTickHooks.unshift(hook);\n else this.afterTickHooks.push(hook);\n }\n\n /**\n * Marking dirty data, Determine which pool to enter based on the base class\n */\n public stage(message: BaseMessage) {\n this.staging.stage(message);\n }\n\n public tick(systemTaskMap: Map<any, SystemTask[]>) {\n if (this.isRunning || this.staging.isEmpty()) return;\n\n if (this.internalDepth > this.maxDepth) {\n this.internalDepth = 0;\n this.staging.reset();\n console.error(\n new Error(\n `[Virid Dispatcher] Deadlock: Max depth reached ${this.maxDepth}, Possible infinite loop detected. The dispatcher will stop processing this tick.`,\n ),\n );\n return;\n }\n\n this.isRunning = true;\n this.internalDepth++;\n\n queueMicrotask(() => {\n try {\n // Execute tick hook, only triggered on the first time\n if (this.internalDepth == 1) {\n this.tickPayload = {};\n this.executeTickHooks(this.beforeTickHooks);\n }\n // Preparing to start execution\n this.staging.flip();\n // The tasks that should be performed to collect this tick\n const tasks = this.collectTasks(systemTaskMap);\n // Execute the task for this frame\n this.executeTasks(tasks);\n } catch (e) {\n MessageWriter.error(e as Error, \"[Virid Dispatcher] Unhandled Error\");\n } finally {\n // Release the lock and attempt the next round of execution\n this.isRunning = false;\n // Enter the next round of micro tick\n if (!this.staging.isEmpty()) {\n this.tick(systemTaskMap);\n } else {\n // Reset internal status\n this.staging.reset();\n this.internalDepth = 0;\n this.executeTickHooks(this.afterTickHooks);\n this.globalTick++;\n }\n }\n });\n }\n public tickSync(systemTaskMap: Map<any, SystemTask[]>) {\n if (this.staging.isEmpty()) return;\n\n this.internalDepth = 0;\n this.tickPayload = {};\n\n this.executeTickHooks(this.beforeTickHooks);\n\n while (!this.staging.isEmpty()) {\n if (this.internalDepth > this.maxDepth) {\n this.staging.reset();\n this.internalDepth = 0;\n console.error(\n new Error(\n `[Virid Dispatcher] Deadlock: Max depth reached ${this.maxDepth}, Possible infinite loop detected. Ticking aborted.`,\n ),\n );\n return;\n }\n this.internalDepth++;\n try {\n this.staging.flip();\n const tasks = this.collectTasks(systemTaskMap);\n this.executeTasks(tasks);\n } catch (e) {\n MessageWriter.error(\n e as Error,\n \"[Virid Dispatcher] Sub-Tick Unhandled Error\",\n );\n break;\n }\n }\n\n this.staging.reset();\n this.internalDepth = 0;\n this.executeTickHooks(this.afterTickHooks);\n this.globalTick++;\n }\n\n private collectTasks(systemTaskMap: Map<any, SystemTask[]>): ExecutionTask[] {\n const tasks: ExecutionTask[] = [];\n // Collect EVENT tasks and execute all associated systems for each message from front to back\n for (const msg of this.staging.eventActive) {\n const systems = systemTaskMap.get(msg.constructor) || [];\n systems.forEach((s) => {\n tasks.push(\n new ExecutionTask(\n s.fn,\n s.priority,\n msg,\n {\n context: (s.fn as any).systemContext as SystemContext,\n tick: this.globalTick,\n payload: {},\n },\n this.beforeExecuteHooks,\n this.afterExecuteHooks,\n ),\n );\n });\n }\n // Collect SIGNAL tasks (each system only runs once for that type)\n for (const [msg, msg_list] of this.staging.signalActive.entries()) {\n const systems = systemTaskMap.get(msg) || [];\n systems.forEach((s) => {\n tasks.push(\n new ExecutionTask(\n s.fn,\n s.priority,\n msg_list,\n {\n context: (s.fn as any).systemContext as SystemContext,\n tick: this.globalTick,\n payload: {},\n },\n this.beforeExecuteHooks,\n this.afterExecuteHooks,\n ),\n );\n });\n }\n return tasks;\n }\n private executeTasks(tasks: ExecutionTask[]) {\n // Regardless of the message type, sort according to the priority defined by the System\n tasks.sort((a, b) => b.priority - a.priority);\n for (const task of tasks) {\n const msg = Array.isArray(task.message) ? task.message[0] : task.message;\n try {\n const result = task.execute();\n // If it's a Promise, just register a catch to prevent crashes, don't await it\n if (result instanceof Promise) {\n result.catch((e) =>\n MessageWriter.error(\n e,\n `[Virid Dispatcher]: Async System Error.\\n` +\n `SystemLocation: ${task.hookContext.context.targetClass.name}.${task.hookContext.context.methodName}\\n` +\n `MessageName: ${msg.constructor.name}\\n` +\n `MessageData: ${JSON.stringify(task.message)}`,\n ),\n );\n }\n } catch (e) {\n MessageWriter.error(\n e as Error,\n `[Virid Dispatcher]: Sync System Error.\\n` +\n `SystemLocation: ${task.hookContext.context.targetClass.name}.${task.hookContext.context.methodName}\\n` +\n `MessageName: ${msg.constructor.name}\\n` +\n `MessageData: ${JSON.stringify(task.message)}`,\n );\n }\n }\n }\n\n private executeTickHooks(hooks: TickHook[]) {\n const hooksContext: TickHookContext = {\n tick: this.globalTick,\n timestamp: Date.now(),\n payload: this.tickPayload,\n };\n hooks.forEach((h) => h(hooksContext));\n }\n}\n\nexport class ExecutionTask {\n public success = true;\n constructor(\n public fn: (...args: any[]) => any,\n public priority: number,\n public message: any, // T or T[]\n public hookContext: ExecuteHookContext,\n public beforeExecuteHooks: Array<{\n type: MessageIdentifier<any>;\n handler: ExecuteHook<any>;\n }>,\n public afterExecuteHooks: Array<{\n type: MessageIdentifier<any>;\n handler: ExecuteHook<any>;\n }>,\n ) {}\n\n private triggerHooks(\n hooks: Array<{\n type: MessageIdentifier<any>;\n handler: ExecuteHook<any>;\n }>,\n ) {\n const sample = Array.isArray(this.message) ? this.message[0] : this.message;\n if (!sample) return;\n\n for (const hook of hooks) {\n if (sample instanceof hook.type) {\n try {\n const result = hook.handler(\n this.message,\n this.hookContext,\n this.success,\n );\n if (result instanceof Promise) {\n result.catch((e) => {\n MessageWriter.error(\n e,\n `[Virid Hook] Async Hook Error: It is prohibited to use asynchronous hooks within Hook: ${hook.type.name}`,\n );\n });\n }\n } catch (e) {\n MessageWriter.error(\n e as Error,\n `[Virid Hook] Hook Execute Failed: Triggered by: ${sample.constructor.name}, Registered type: ${hook.type.name}`,\n );\n }\n }\n }\n }\n\n public execute(): any {\n this.triggerHooks(this.beforeExecuteHooks);\n const runAfter = () => this.triggerHooks(this.afterExecuteHooks);\n\n try {\n const result = this.fn(this.message);\n\n if (result instanceof Promise) {\n // Asynchronous mode utilizes. finally to ensure hook execution\n return result.catch(() => (this.success = false)).finally(runAfter);\n }\n // If it is synchronization, execute it directly with a post hook and return it\n runAfter();\n return result;\n } catch (e) {\n // If an error occurs, execute the post hook as well\n this.success = false;\n runAfter();\n throw e; // Try catch processing thrown to Dispatcher\n }\n }\n}\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Core\n */\n\nimport {\n type ExecuteHook,\n type TickHook,\n type MessageIdentifier,\n type Middleware,\n} from \"../interfaces\";\nimport { BaseMessage } from \"./message\";\nimport { MessageRegistry } from \"./registry\";\nimport { MessageWriter, activateInstance } from \"./io\";\nimport { Dispatcher } from \"./dispatcher\";\n\nexport class MessageEngine {\n private dispatcher: Dispatcher;\n private registry = new MessageRegistry();\n private middlewares: Middleware[] = [];\n private manual: boolean;\n\n constructor(maxDepth: number, manual: boolean) {\n this.dispatcher = new Dispatcher(maxDepth);\n this.manual = manual;\n // 修改\n activateInstance(this);\n }\n\n useMiddleware(mw: Middleware, front: boolean) {\n this.middlewares.push(mw);\n }\n onBeforeExecute<T extends BaseMessage>(\n type: MessageIdentifier<T>,\n hook: ExecuteHook<T>,\n front: boolean,\n ) {\n this.dispatcher.addBeforeExecute(type, hook, front);\n }\n onAfterExecute<T extends BaseMessage>(\n type: MessageIdentifier<T>,\n hook: ExecuteHook<T>,\n front: boolean,\n ) {\n this.dispatcher.addAfterExecute(type, hook, front);\n }\n onBeforeTick(hook: TickHook, front: boolean) {\n this.dispatcher.addBeforeTick(hook, front);\n }\n onAfterTick(hook: TickHook, front: boolean) {\n this.dispatcher.addAfterTick(hook, front);\n }\n\n tick() {\n this.dispatcher.tickSync(this.registry.systemTaskMap);\n }\n\n dispatch(message: BaseMessage) {\n if (!(message instanceof BaseMessage)) {\n MessageWriter.error(\n new Error(\n `[Virid Dispatch] Type Error: Message must be an instance of BaseMessage,message:${message}`,\n ),\n );\n return;\n }\n // 运行中间件管道\n this.pipeline(message, () => {\n //看看这个消息的处理函数在this.systemTaskMap里有吗?没有就报错\n if (!this.registry.systemTaskMap.has(message.constructor)) {\n MessageWriter.error(\n new Error(\n `[Virid Dispatch] No handler for message: ${message.constructor.name}`,\n ),\n );\n return;\n }\n this.dispatcher.stage(message);\n if (!this.manual) {\n this.dispatcher.tick(this.registry.systemTaskMap);\n }\n });\n }\n\n private pipeline(message: BaseMessage, finalAction: () => void) {\n let index = 0;\n const next = () => {\n if (index < this.middlewares.length) {\n this.middlewares[index++](message, next);\n } else {\n finalAction();\n }\n };\n next();\n }\n\n register(\n messageClass: any,\n systemFn: (...args: any[]) => any,\n priority: number = 0,\n ): () => void {\n return this.registry.register(messageClass, systemFn, priority);\n }\n}\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Core\n */\n\nexport const VIRID_METADATA = {\n SYSTEM: \"virid:core:system\",\n MESSAGE: \"virid:core:message\",\n CONTROLLER: \"virid:core:controller\",\n COMPONENT: \"virid:core:component\",\n SAFE: \"virid:core:safe\",\n OBSERVER: \"virid:core:observer\",\n} as const;\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Core\n */\nimport { BaseMessage, MessageWriter, SingleMessage } from \"../core\";\nimport { VIRID_METADATA } from \"./constant\";\nimport {\n type SystemContext,\n type Newable,\n type SystemParams,\n type ObserverMetadata,\n type SafeMetadata,\n SystemConfig,\n} from \"../interfaces\";\n\n// Unified processing of return values: System can directly return a message to achieve a chain reaction\nexport function handleResult(res: any) {\n if (!res) return;\n const messages = Array.isArray(res) ? res : [res];\n messages.forEach((m) => {\n if (m instanceof BaseMessage) {\n MessageWriter.write(m);\n } else {\n MessageWriter.warn(\n `[Virid HandleResult] Invalid Return Type: Must return Message or Message[].`,\n );\n }\n });\n}\n\n/**\n * Check if there are multiple message type parameters in the parameters\n * @param types Parameter list\n */\nfunction checkMessageParam(types: Array<any>) {\n const foundMatches: { type: any; idx: number }[] = [];\n\n types.forEach((type, idx) => {\n const isBaseMessage =\n type === BaseMessage || (type && type.prototype instanceof BaseMessage);\n\n if (isBaseMessage) {\n foundMatches.push({ type, idx });\n }\n });\n\n if (foundMatches.length === 0) {\n return null;\n }\n\n if (foundMatches.length > 1) {\n // 发现多个,把所有的错误信息组合起来抛出\n const errorDetails = foundMatches\n .map((item) => `[Index: ${item.idx}, Name: ${item.type.name}]`)\n .join(\", \");\n\n throw new Error(\n `[Virid System] Multiple Messages: Multiple Message type parameters detected, this is not allowed! specific location: ${errorDetails}`,\n );\n }\n\n return foundMatches[0];\n}\n\n/**\n * System Decorator\n * @param params Priority and MessageClass config\n */\nexport function System(\n params: SystemParams = {\n messageClass: null,\n priority: 0,\n },\n) {\n return (target: any, key: string, descriptor: PropertyDescriptor) => {\n if (typeof target !== \"function\") {\n throw new Error(\n `[Virid System] Method Type Error: The Method ${key} is not a static method, please check if there is a static keyword tag.`,\n );\n }\n\n const originalMethod = descriptor.value;\n const types: Array<any> = Reflect.getMetadata(\n \"design:paramtypes\",\n target,\n key,\n );\n\n // Verify if metadata exists\n if (!types) {\n throw new Error(\n `[Virid System] System Parameter Loss: Unable to recognize system parameters, please confirm if import \"reflect-metadata\" was introduced at the beginning.`,\n );\n }\n\n // Verify if there are undefined parameters\n const undefinedIndices = types\n .map((t, i) => (t === undefined ? i : -1))\n .filter((i) => i !== -1);\n if (undefinedIndices.length > 0) {\n throw new Error(\n `[Virid System] Parameter Metadata Loss in \"${key}\": One or more parameters have 'undefined' types. This usually happens when you forget to add a type annotation or due to circular dependencies. Check parameter at indices: [${undefinedIndices.join(\", \")}]`,\n );\n }\n\n let messageClass: Newable<BaseMessage>;\n // eslint-disable-next-line no-useless-assignment\n let messageIdx: number = -1;\n let batchMode = false;\n const listIdx = types.indexOf(Array);\n\n if (listIdx !== -1) {\n // Batch processing mode (with Array parameters)\n if (!params.messageClass) {\n throw new Error(\n `[Virid System] System Parameter Loss: When using batch processing mode with Array, the messageClass parameter must be specified in decorator options.`,\n );\n }\n if (!(params.messageClass.prototype instanceof SingleMessage)) {\n throw new Error(\n `[Virid System] System Parameter Loss: When using the batch processing mode, the messageClass parameter must inherit from SingleMessage.`,\n );\n }\n messageClass = params.messageClass;\n messageIdx = listIdx; // In batch processing mode, idx points to the position of Array\n batchMode = true;\n } else {\n // Non batch processing mode\n const matchedMessage = checkMessageParam(types); // { type: any, idx: number } | null\n\n if (matchedMessage && params.messageClass) {\n throw new Error(\n `[Virid System] Multiple Messages Are Not Allowed: Cannot specify messageClass in decorator options while already declaring it in method parameters at index ${matchedMessage.idx} in ${key}.`,\n );\n }\n\n if (matchedMessage) {\n messageClass = matchedMessage.type;\n messageIdx = matchedMessage.idx; // In single mode, idx points to the location of a specific BaseMessage subclass\n } else if (params.messageClass) {\n messageClass = params.messageClass;\n messageIdx = -1; // Only provided in the configuration, cannot be found in the parameters, set to -1\n } else {\n throw new Error(\n `[Virid System] System Parameter Loss: Please declare the message type either in method parameters or via the Message decorator options.`,\n );\n }\n }\n\n // Attach contextual information to the packaged function\n const systemContext: SystemContext = {\n params: types,\n targetClass: target,\n methodName: key,\n originalMethod: originalMethod,\n };\n const systemConfig: SystemConfig = {\n messageClass: messageClass,\n messageIdx: messageIdx,\n priority: params.priority || 0,\n batchMode: batchMode,\n };\n\n // Purely mounting data without changing the execution logic of the original method\n (descriptor.value as any).systemContext = systemContext;\n (descriptor.value as any).systemConfig = systemConfig;\n };\n}\n\n/**\n * Is the method used to identify the controller or component safe and can be directly called by other controllers\n */\nexport function Safe() {\n return (target: any, key: string, _descriptor: PropertyDescriptor) => {\n const safeMethods: SafeMetadata =\n Reflect.getMetadata(VIRID_METADATA.SAFE, target) || new Set<string>();\n safeMethods.add(key);\n Reflect.defineMetadata(VIRID_METADATA.SAFE, safeMethods, target);\n };\n}\n\n/**\n * Observer Decorator\n */\nexport function Observer(\n callback: (oldVal: any, newVale: any) => void | BaseMessage | BaseMessage[],\n) {\n return (target: any, propertyKey: string) => {\n const observerMetadata: ObserverMetadata =\n Reflect.getMetadata(VIRID_METADATA.OBSERVER, target) || [];\n observerMetadata.push({ propertyKey, callback });\n Reflect.defineMetadata(VIRID_METADATA.OBSERVER, observerMetadata, target);\n };\n}\n\n/**\n * Controller Decorator\n */\nexport function Controller() {\n return (target: any) => {\n Reflect.defineMetadata(VIRID_METADATA.CONTROLLER, true, target);\n };\n}\n/**\n * Component Decorator\n */\nexport function Component() {\n return (target: any) => {\n // 打上组件标签\n Reflect.defineMetadata(VIRID_METADATA.COMPONENT, true, target);\n };\n}\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Core\n */\nimport { type ObserverItem } from \"../interfaces\";\nimport { handleResult } from \"./decorator\";\nimport { VIRID_METADATA } from \"./constant\";\nconst ARRAY_MUTABLE_METHODS = [\n \"push\",\n \"pop\",\n \"shift\",\n \"unshift\",\n \"splice\",\n \"sort\",\n \"reverse\",\n];\nexport function bindObservers(instance: any) {\n if (!instance || typeof instance !== \"object\") return instance;\n if (\n Object.prototype.hasOwnProperty.call(\n instance,\n \"__virid_observer_processed__\",\n )\n )\n return instance;\n\n Object.defineProperty(instance, \"__virid_observer_processed__\", {\n value: true,\n enumerable: false,\n configurable: true,\n });\n\n const observerConfigs: ObserverItem[] =\n Reflect.getMetadata(VIRID_METADATA.OBSERVER, instance) || [];\n\n observerConfigs.forEach(({ propertyKey, callback }) => {\n // 创建逻辑单元:一个闭包 Box\n const box = { value: instance[propertyKey] };\n const logicProxy = new Proxy(box, {\n get(target, prop) {\n const value = target.value;\n\n // 数组变动拦截\n if (\n Array.isArray(value) &&\n ARRAY_MUTABLE_METHODS.includes(prop as string)\n ) {\n return (...args: any[]) => {\n const oldVal = [...value];\n const result = (value as any)[prop].apply(value, args);\n const observerResult = callback.call(instance, oldVal, value);\n handleResult(observerResult);\n\n return result;\n };\n }\n return value;\n },\n set(target, _prop, newVal) {\n const oldVal = target.value;\n if (newVal === oldVal) return true;\n\n target.value = newVal;\n const result = callback.call(instance, oldVal, newVal);\n handleResult(result);\n return true;\n },\n });\n // 在 bindObservers 的 forEach 内部\n const getter = () => logicProxy.value;\n (getter as any).__virid_box__ = box; // 重点:把闭包里的 box 暴露给后续插件\n\n Object.defineProperty(instance, propertyKey, {\n get: getter, // 纯转发\n set: (v) => {\n logicProxy.value = v;\n }, // 纯转发\n enumerable: true,\n configurable: true,\n });\n\n // 初次递归扫描\n if (box.value && typeof box.value === \"object\") {\n bindObservers(box.value);\n }\n });\n\n // 处理未标记但属于子组件的对象\n Reflect.ownKeys(instance).forEach((key) => {\n if (key === \"__virid_observer_processed__\") return;\n const desc = Object.getOwnPropertyDescriptor(instance, key);\n if (desc && desc.get) return;\n const val = instance[key];\n if (val && typeof val === \"object\") {\n bindObservers(val);\n }\n });\n return instance;\n}\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Core\n */\n\nimport { Newable } from \"./interfaces\";\nimport { VIRID_METADATA } from \"./decorators/constant\";\n\ninterface Binding {\n type: \"singleton\" | \"transient\";\n ctor: Newable<any>;\n}\n\nexport class ViridContainer {\n private bindings = new Map<any, Binding>();\n private singletonInstances = new Map<any, any>();\n private activationHooks: Array<(instance: any) => any> = [];\n /**\n * Register an activation hook\n * @param hook An activation hook\n * @param front Is the hook order inserted from the front or added\n */\n public addActivationHook(hook: (instance: any) => any, front: boolean) {\n if (front) this.activationHooks.unshift(hook);\n else this.activationHooks.push(hook);\n }\n /**\n * Static binding component or controller\n * @param identifier Constructor of components or controllers\n */\n public bind<T>(identifier: Newable<T>) {\n //Check if the constructor has mandatory parameters\n if (identifier.length > 0) {\n throw new Error(\n `[Virid Container] Cannot Bind Component Or Controller: The Class ${identifier.name} should not have mandatory parameters.`,\n );\n }\n if (Reflect.getMetadata(VIRID_METADATA.COMPONENT, identifier)) {\n const binding: Binding = {\n type: \"singleton\",\n ctor: identifier,\n };\n this.bindings.set(identifier, binding);\n } else if (Reflect.getMetadata(VIRID_METADATA.CONTROLLER, identifier)) {\n const binding: Binding = { type: \"transient\", ctor: identifier };\n this.bindings.set(identifier, binding);\n } else {\n throw new Error(\n `[Virid Container] Cannot Bind Component Or Controller: The Class ${identifier.name} is not decorated with @Component or @Controller`,\n );\n }\n }\n /**\n * Dynamically register a component\n * @param instance Component instance\n */\n public spawn(instance: object) {\n const identifier = instance.constructor as Newable<any>;\n if (Reflect.hasMetadata(VIRID_METADATA.COMPONENT, identifier)) {\n const binding: Binding = { type: \"singleton\", ctor: identifier };\n this.bindings.set(identifier, binding);\n this.singletonInstances.set(identifier, instance);\n } else {\n throw new Error(\n `[Virid Container] Cannot spawn Component: The Class ${identifier.name} is not decorated with @Component`,\n );\n }\n }\n /**\n * Obtain a Component or Controller instance\n * @param identifier Constructor of components or controllers\n */\n public get<T>(identifier: Newable<T>): T {\n const binding = this.bindings.get(identifier);\n if (!binding) {\n throw new Error(\n `[Virid Container] Cannot Get Component Or Controller: No binding found for ${identifier}`,\n );\n }\n const TargetCtor = binding.ctor;\n\n if (binding.type === \"singleton\") {\n if (!this.singletonInstances.has(identifier)) {\n // first creation\n const rawInstance = new TargetCtor();\n const processedInstance = this.handleActivation(rawInstance);\n this.singletonInstances.set(identifier, processedInstance);\n }\n return this.singletonInstances.get(identifier);\n }\n\n // Transient\n const instance = new TargetCtor();\n return this.handleActivation(instance);\n }\n private handleActivation<T>(instance: T): T {\n for (const hook of this.activationHooks) {\n instance = hook(instance);\n }\n return instance;\n }\n}\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Core\n */\nimport { ViridContainer } from \"./container\";\nimport {\n type ExecuteHook,\n type MessageIdentifier,\n type Middleware,\n type TickHook,\n type Newable,\n type SystemContext,\n type SystemConfig,\n} from \"./interfaces\";\nimport {\n BaseMessage,\n MessageWriter,\n MessageEngine,\n EventMessage,\n SingleMessage,\n} from \"./core\";\nimport { handleResult, Component } from \"./decorators\";\n\nexport interface ViridPlugin<T = any> {\n name: string;\n install: (app: ViridApp, options: T) => void;\n}\n\n@Component()\nexport class ViridApp {\n public container: ViridContainer = new ViridContainer();\n public engine: MessageEngine;\n private installedPlugins = new Set<string>();\n\n constructor(maxDepth: number, manual: boolean) {\n this.engine = new MessageEngine(maxDepth, manual);\n this.container.spawn(this);\n }\n\n /**\n * Register an activation hook\n * @param hook An activation hook\n * @param front Is the hook order inserted from the front or added\n */\n onActivate(hook: (instance: any) => any, front: boolean = false) {\n this.container.addActivationHook(hook, front);\n }\n\n /**\n * Opening a new tick\n */\n tick() {\n this.engine.tick();\n }\n\n /**\n * Obtain a Component or Controller instance\n * @param identifier Constructor of components or controllers\n */\n get<T>(identifier: Newable<T>): T {\n return this.container.get(identifier);\n }\n\n /**\n * Static binding component or controller\n * @param identifier Constructor of components or controllers\n */\n bind<T>(identifier: Newable<T>) {\n this.container.bind(identifier);\n }\n /**\n * Dynamically register a component\n * @param instance Component instance\n */\n spawn(instance: object) {\n this.container.spawn(instance);\n }\n useMiddleware(mw: Middleware, front = false) {\n this.engine.useMiddleware(mw, front);\n }\n onBeforeExecute<T extends BaseMessage>(\n type: MessageIdentifier<T>,\n hook: ExecuteHook<T>,\n front = false,\n ) {\n this.engine.onBeforeExecute(type, hook, front);\n }\n onAfterExecute<T extends BaseMessage>(\n type: MessageIdentifier<T>,\n hook: ExecuteHook<T>,\n front = false,\n ) {\n this.engine.onAfterExecute(type, hook, front);\n }\n onBeforeTick(hook: TickHook, front = false) {\n this.engine.onBeforeTick(hook, front);\n }\n onAfterTick(hook: TickHook, front = false) {\n this.engine.onAfterTick(hook, front);\n }\n\n use<T>(plugin: ViridPlugin<T>, options: T): this {\n if (this.installedPlugins.has(plugin.name)) {\n MessageWriter.warn(\n `[Virid Plugin] Duplicate Installation: Plugin ${plugin.name} has already been installed.`,\n );\n return this;\n }\n try {\n plugin.install(this, options);\n this.installedPlugins.add(plugin.name);\n } catch (e) {\n MessageWriter.error(\n e as Error,\n `[Virid Plugin]: Install Failed: ${plugin.name}`,\n );\n }\n return this;\n }\n /**\n * Register message to registrar\n * @param systemFn System functions\n */\n register(systemFn: (...args: any[]) => any): () => void {\n const systemContext: SystemContext = (systemFn as any).systemContext;\n const systemConfig: SystemConfig = (systemFn as any).systemConfig;\n\n if (!systemContext || !systemConfig) {\n throw new Error(\n `[Virid System] System Parameter Loss: Please declare ${systemFn.name} using the @System decorator first.`,\n );\n }\n\n const { params: types, targetClass, originalMethod } = systemContext;\n const { messageClass, messageIdx, priority, batchMode } = systemConfig;\n\n const handleResultFn =\n typeof handleResult === \"function\" ? handleResult : (res: any) => res;\n const processResult = (result: any) => {\n return result instanceof Promise\n ? result.then(handleResultFn)\n : handleResultFn(result);\n };\n\n const cachedComponents = new Array(types.length);\n let isInitialized = false;\n\n const initDeps = () => {\n for (let i = 0; i < types.length; i++) {\n if (i !== messageIdx) {\n const dep = this.get(types[i]);\n if (!dep) {\n throw new Error(\n `[Virid System] Unknown Inject Data Types: ${types[i].name || types[i]} is not registered in the container for system '${systemFn.name}'!`,\n );\n }\n cachedComponents[i] = dep;\n }\n }\n isInitialized = true;\n };\n\n let wrappedSystem: (currentMessage: EventMessage | SingleMessage[]) => any;\n\n if (messageIdx === -1) {\n wrappedSystem = () => {\n if (!isInitialized) initDeps();\n return processResult(\n originalMethod.apply(targetClass, cachedComponents),\n );\n };\n } else if (types.length === 1) {\n if (batchMode) {\n wrappedSystem = (currentMessage: EventMessage | SingleMessage[]) => {\n const payload = Array.isArray(currentMessage)\n ? currentMessage\n : [currentMessage];\n\n if (payload.length > 0 && !(payload[0] instanceof messageClass)) {\n throw new Error(\n `[Virid System] Type Mismatch: Expected list of ${messageClass.name}, but got ${payload[0]?.constructor?.name}`,\n );\n }\n\n return processResult(originalMethod.call(targetClass, payload));\n };\n } else {\n wrappedSystem = (currentMessage: EventMessage | SingleMessage[]) => {\n const payload = Array.isArray(currentMessage)\n ? currentMessage[currentMessage.length - 1]\n : currentMessage;\n\n if (!(payload instanceof messageClass)) {\n throw new Error(\n `[Virid System] Type Mismatch: Expected ${messageClass.name}, but got ${(payload as any)?.constructor?.name}`,\n );\n }\n\n return processResult(originalMethod.call(targetClass, payload));\n };\n }\n } else {\n if (batchMode) {\n wrappedSystem = (currentMessage: EventMessage | SingleMessage[]) => {\n if (!isInitialized) initDeps();\n const payload = Array.isArray(currentMessage)\n ? currentMessage\n : [currentMessage];\n\n if (payload.length > 0 && !(payload[0] instanceof messageClass)) {\n throw new Error(\n `[Virid System] Type Mismatch: Expected list of ${messageClass.name}, but got ${payload[0]?.constructor?.name}`,\n );\n }\n\n const callArgs = [...cachedComponents];\n callArgs[messageIdx] = payload;\n return processResult(originalMethod.apply(targetClass, callArgs));\n };\n } else {\n wrappedSystem = (currentMessage: EventMessage | SingleMessage[]) => {\n if (!isInitialized) initDeps();\n const payload = Array.isArray(currentMessage)\n ? currentMessage[currentMessage.length - 1]\n : currentMessage;\n\n if (!(payload instanceof messageClass)) {\n throw new Error(\n `[Virid System] Type Mismatch: Expected ${messageClass.name}, but got ${(payload as any)?.constructor?.name}`,\n );\n }\n\n const callArgs = [...cachedComponents];\n callArgs[messageIdx] = payload;\n return processResult(originalMethod.apply(targetClass, callArgs));\n };\n }\n }\n\n (wrappedSystem as any).systemContext = systemContext;\n\n return this.engine.register(messageClass, wrappedSystem, priority);\n }\n}\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Core\n */\nimport { type ViridApp } from \"./app\";\nimport { ErrorMessage, InfoMessage, WarnMessage } from \"./core\";\nimport { System } from \"./decorators\";\n\nlet globalSwitch = true;\n\nexport function toggleSwitch(enable: boolean) {\n globalSwitch = enable;\n}\n\nconst clr = {\n reset: \"\\x1b[0m\",\n red: \"\\x1b[31m\",\n yellow: \"\\x1b[33m\",\n blue: \"\\x1b[34m\",\n magenta: \"\\x1b[35m\",\n cyan: \"\\x1b[36m\",\n gray: \"\\x1b[90m\",\n bold: \"\\x1b[1m\",\n green: \"\\x1b[32m\",\n};\n\nclass ViridLogHandler {\n /**\n * Register the global default information processing system\n */\n @System()\n static globalInfoHandler(info: InfoMessage) {\n if (!globalSwitch) return;\n const header = `${clr.green}${clr.bold} ✔ [Virid Info] ${clr.reset}`;\n const context = `${clr.magenta} ${info.context} ${clr.reset}`;\n\n console.log(\n `${header}${clr.gray} Global Info Caught: ${clr.reset}\\n` +\n `${clr.green} Details: ${clr.reset}`,\n context || \"unknown Info\",\n );\n }\n\n /**\n * Register the global default error handling system\n */\n @System()\n static globalErrorHandler(err: ErrorMessage) {\n if (!globalSwitch) return;\n const header = `${clr.red}${clr.bold} ✖ [Virid Error] ${clr.reset}`;\n const context = `${clr.magenta} ${err.context} ${clr.reset}`;\n\n console.error(\n `${header}${clr.gray} Global Error Caught: ${clr.reset}\\n` +\n `${clr.red} Context: ${clr.reset} ${context}\\n` +\n `${clr.red} Details: ${clr.reset}`,\n err.error || err || \"unknown Error\",\n );\n }\n\n /**\n * Register the global default warning handling system\n */\n @System()\n static globalWarnHandler(warn: WarnMessage) {\n if (!globalSwitch) return;\n const header = `${clr.yellow}${clr.bold} ⚠ [Virid Warn] ${clr.reset}`;\n const context = `${clr.cyan} ${warn.context} ${clr.reset}`;\n\n console.warn(\n `${header}${clr.gray} Global Warn Caught: ${clr.reset}\\n` +\n `${clr.yellow} Context:${clr.reset} ${context}`,\n );\n }\n}\n\nexport function registerBasicSystems(app: ViridApp) {\n app.register(ViridLogHandler.globalInfoHandler);\n app.register(ViridLogHandler.globalErrorHandler);\n app.register(ViridLogHandler.globalWarnHandler);\n}\n"],"mappings":"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","names":["index_exports","__export","BaseMessage","Component","Controller","ErrorMessage","EventMessage","InfoMessage","MessageEngine","MessageRegistry","MessageWriter","Observer","Safe","SingleMessage","System","VIRID_METADATA","ViridApp","WarnMessage","activateInstance","bindObservers","createVirid","defaultConfig","handleResult","__toCommonJS","defaultConfig","maxDepth","enableLog","manual","activeInstance","activateInstance","instance","dispatch","message","console","error","MessageWriter","write","target","args","e","context","ErrorMessage","warn","WarnMessage","info","InfoMessage","_MessageWriter","BaseMessage","send","args","MessageWriter","write","_BaseMessage","SingleMessage","_SingleMessage","EventMessage","_EventMessage","ErrorMessage","error","context","_ErrorMessage","WarnMessage","_WarnMessage","InfoMessage","_InfoMessage","MessageRegistry","systemTaskMap","Map","register","messageClass","systemFn","priority","systems","get","findIndex","s","fn","systemContext","originalMethod","push","sort","a","b","set","funcName","methodName","targetClass","MessageWriter","error","Error","name","currentSystems","index","splice","length","delete","_MessageRegistry","Staging","signalActive","Map","eventActive","signalStaging","eventStaging","stage","event","SingleMessage","type","has","set","get","push","EventMessage","MessageWriter","error","Error","name","flip","clearSignals","clearEvents","isEmpty","size","length","reset","_Staging","Dispatcher","maxDepth","isRunning","globalTick","internalDepth","staging","Staging","tickPayload","beforeExecuteHooks","afterExecuteHooks","beforeTickHooks","afterTickHooks","addBeforeExecute","type","hook","front","unshift","handler","push","addAfterExecute","addBeforeTick","addAfterTick","stage","message","tick","systemTaskMap","isEmpty","reset","console","error","Error","queueMicrotask","executeTickHooks","flip","tasks","collectTasks","executeTasks","e","MessageWriter","tickSync","msg","eventActive","get","forEach","s","ExecutionTask","fn","priority","context","systemContext","payload","msg_list","signalActive","entries","sort","a","b","task","Array","isArray","result","execute","Promise","catch","hookContext","targetClass","name","methodName","JSON","stringify","hooks","hooksContext","timestamp","Date","now","h","_Dispatcher","success","triggerHooks","sample","runAfter","__name","finally","_ExecutionTask","MessageEngine","maxDepth","manual","dispatcher","registry","MessageRegistry","middlewares","Dispatcher","activateInstance","useMiddleware","mw","front","push","onBeforeExecute","type","hook","addBeforeExecute","onAfterExecute","addAfterExecute","onBeforeTick","addBeforeTick","onAfterTick","addAfterTick","tick","tickSync","systemTaskMap","dispatch","message","BaseMessage","MessageWriter","error","Error","pipeline","has","name","stage","finalAction","index","next","__name","length","register","messageClass","systemFn","priority","_MessageEngine","VIRID_METADATA","SYSTEM","MESSAGE","CONTROLLER","COMPONENT","SAFE","OBSERVER","handleResult","res","Array","isArray","forEach","m","BaseMessage","MessageWriter","write","warn","checkMessageParam","types","foundMatches","type","idx","prototype","push","length","errorDetails","map","item","name","join","Error","System","params","messageClass","priority","target","key","descriptor","originalMethod","value","Reflect","getMetadata","undefinedIndices","t","i","undefined","filter","messageIdx","batchMode","listIdx","indexOf","SingleMessage","matchedMessage","systemContext","targetClass","methodName","systemConfig","Safe","_descriptor","safeMethods","VIRID_METADATA","SAFE","Set","add","defineMetadata","Observer","callback","propertyKey","observerMetadata","OBSERVER","Controller","CONTROLLER","Component","COMPONENT","ARRAY_MUTABLE_METHODS","bindObservers","instance","Object","prototype","hasOwnProperty","call","defineProperty","value","enumerable","configurable","Reflect","getMetadata","VIRID_METADATA","OBSERVER","forEach","propertyKey","callback","box","logicProxy","Proxy","get","target","prop","Array","isArray","includes","args","oldVal","result","apply","observerResult","handleResult","set","_prop","newVal","getter","__name","__virid_box__","v","ownKeys","key","desc","getOwnPropertyDescriptor","val","ViridContainer","bindings","Map","singletonInstances","activationHooks","addActivationHook","hook","front","unshift","push","bind","identifier","length","Error","name","Reflect","getMetadata","VIRID_METADATA","COMPONENT","binding","type","ctor","set","CONTROLLER","spawn","instance","hasMetadata","get","TargetCtor","has","rawInstance","processedInstance","handleActivation","_ViridContainer","ViridApp","maxDepth","manual","container","ViridContainer","engine","installedPlugins","Set","MessageEngine","spawn","onActivate","hook","front","addActivationHook","tick","get","identifier","bind","instance","useMiddleware","mw","onBeforeExecute","type","onAfterExecute","onBeforeTick","onAfterTick","use","plugin","options","has","name","MessageWriter","warn","install","add","e","error","register","systemFn","systemContext","systemConfig","Error","params","types","targetClass","originalMethod","messageClass","messageIdx","priority","batchMode","handleResultFn","handleResult","res","processResult","__name","result","Promise","then","cachedComponents","Array","length","isInitialized","initDeps","i","dep","wrappedSystem","apply","currentMessage","payload","isArray","call","callArgs","_ViridApp","_ts_decorate","decorators","target","key","desc","__name","globalSwitch","toggleSwitch","enable","clr","reset","red","yellow","blue","magenta","cyan","gray","bold","green","_a","ViridLogHandler","globalInfoHandler","info","header","context","console","log","globalErrorHandler","err","error","globalWarnHandler","warn","registerBasicSystems","app","register","createVirid","config","defaultConfig","app","ViridApp","maxDepth","manual","registerBasicSystems","toggleSwitch","enableLog","onActivate","bindObservers","self","spawn"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/interfaces/common.ts","../src/core/io.ts","../src/core/message.ts","../src/core/registry.ts","../src/core/staging.ts","../src/core/dispatcher.ts","../src/core/engine.ts","../src/decorators/constant.ts","../src/decorators/decorator.ts","../src/decorators/bind.ts","../src/container.ts","../src/app.ts","../src/utils.ts"],"sourcesContent":["/*\n * Copyright (c) 2026-present Ailrid\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * Description: Virid Core Dispatcher - The heart of CCS Architecture.\n */\nexport * from \"./interfaces\";\nexport * from \"./core\";\nexport * from \"./decorators\";\nexport * from \"./app\";\n\nimport { ViridApp } from \"./app\";\nimport { AppConfig, defaultConfig } from \"./interfaces\";\nimport { toggleSwitch, registerBasicSystems } from \"./utils\";\nimport { bindObservers } from \"./decorators/bind\";\n\nexport function createVirid(config: AppConfig = defaultConfig): ViridApp {\n config = { ...defaultConfig, ...config };\n const app = new ViridApp(config.maxDepth!, config.manual!);\n\n registerBasicSystems(app);\n toggleSwitch(config.enableLog!);\n app.onActivate(bindObservers);\n const self = app;\n app.spawn(self);\n return app;\n}\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Core\n */\nexport type Newable<\n TInstance = unknown,\n TArgs extends unknown[] = any[],\n> = new (...args: TArgs) => TInstance;\n\nexport interface AppConfig {\n maxDepth?: number;\n enableLog?: boolean;\n manual?: boolean;\n}\n\nconst defaultConfig: AppConfig = {\n maxDepth: 100,\n enableLog: true,\n manual: false,\n};\nexport { defaultConfig };\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Core\n */\nimport { type MessageEngine } from \"./engine\";\nimport {\n type BaseMessage,\n ErrorMessage,\n InfoMessage,\n WarnMessage,\n} from \"./message\";\nimport { type Newable } from \"../interfaces\";\n\nlet activeInstance: MessageEngine | null = null;\nexport function activateInstance(instance: MessageEngine) {\n activeInstance = instance;\n}\n\nfunction dispatch(message: BaseMessage): void {\n if (activeInstance) {\n activeInstance.dispatch(message);\n } else {\n console.error(\"[Virid MessageWriter] No active instance found.\");\n }\n}\n\nexport class MessageWriter {\n public static write<T extends BaseMessage, K extends Newable<T>>(\n target: K | T,\n ...args: ConstructorParameters<K>\n ): void {\n const instance =\n typeof target === \"function\"\n ? new (target as any)(...args)\n : (target as T);\n\n dispatch(instance);\n }\n\n public static error(e: Error, context: string = \"\"): void {\n this.write(new ErrorMessage(e, context));\n }\n\n public static warn(context: string): void {\n this.write(new WarnMessage(context));\n }\n public static info(context: string): void {\n this.write(new InfoMessage(context));\n }\n}\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Core\n */\nimport { Newable } from \"../interfaces\";\nimport { MessageWriter } from \"./io\";\n\nexport abstract class BaseMessage {\n static send<T extends Newable<any>>(\n this: T,\n ...args: ConstructorParameters<T>\n ) {\n MessageWriter.write(this as any, ...args);\n }\n}\n\nexport abstract class SingleMessage extends BaseMessage {\n constructor() {\n super();\n }\n}\n\nexport abstract class EventMessage extends BaseMessage {\n constructor() {\n super();\n }\n}\n\nexport class ErrorMessage extends EventMessage {\n constructor(\n public readonly error: Error,\n public readonly context?: string,\n ) {\n super();\n }\n}\n\nexport class WarnMessage extends EventMessage {\n constructor(public readonly context: string) {\n super();\n }\n}\n\nexport class InfoMessage extends EventMessage {\n constructor(public readonly context: string) {\n super();\n }\n}\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Core\n */\nimport { type SystemTask } from \"../interfaces\";\nimport { MessageWriter } from \"./io\";\n\nexport class MessageRegistry {\n systemTaskMap = new Map<any, SystemTask[]>();\n\n /**\n * Register the message and corresponding system and return an uninstallation function\n */\n register(\n messageClass: any,\n systemFn: (...args: any[]) => any,\n priority: number = 0,\n ): () => void {\n const systems = this.systemTaskMap.get(messageClass) || [];\n const existingIndex = systems.findIndex(\n (s) =>\n (s.fn as any).systemContext.originalMethod ===\n (systemFn as any).systemContext.originalMethod,\n );\n if (existingIndex === -1) {\n systems.push({ fn: systemFn, priority });\n systems.sort((a, b) => b.priority - a.priority);\n this.systemTaskMap.set(messageClass, systems);\n } else {\n // Check for duplicate registrations\n const funcName = (systemFn as any).methodName;\n const targetClass = (systemFn as any).targetClass;\n MessageWriter.error(\n new Error(\n `[Virid Error] System Already Registered: Message Class ${messageClass.name}, Location ${targetClass.name}.${funcName}`,\n ),\n );\n return () => {};\n }\n\n return () => {\n const currentSystems = this.systemTaskMap.get(messageClass);\n if (currentSystems) {\n const index = currentSystems.findIndex((s) => s.fn === systemFn);\n if (index !== -1) {\n currentSystems.splice(index, 1);\n // 如果该消息类型没有任何监听者了,清理掉 Key,保持内存干净\n if (currentSystems.length === 0) {\n this.systemTaskMap.delete(messageClass);\n }\n }\n }\n };\n }\n}\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Core\n */\nimport { MessageWriter } from \"./io\";\nimport { type BaseMessage, EventMessage, SingleMessage } from \"./message\";\n\nexport class Staging {\n public signalActive = new Map<any, any[]>();\n public eventActive: any[] = [];\n private signalStaging = new Map<any, any[]>();\n private eventStaging: any[] = [];\n\n stage(event: BaseMessage) {\n if (event instanceof SingleMessage) {\n const type = event.constructor;\n if (!this.signalStaging.has(type)) this.signalStaging.set(type, []);\n this.signalStaging.get(type)!.push(event);\n } else if (event instanceof EventMessage) {\n this.eventStaging.push(event);\n } else {\n MessageWriter.error(\n new Error(\n `[Virid Message] Invalid Message:\\n${event.constructor.name} must extend SingleMessage or EventMessage`,\n ),\n );\n }\n }\n\n flip() {\n this.signalActive = this.signalStaging;\n this.eventActive = this.eventStaging;\n this.signalStaging = new Map();\n this.eventStaging = [];\n }\n\n clearSignals() {\n // types.forEach((type) => this.signalActive.delete(type));\n this.signalActive = new Map();\n }\n\n clearEvents() {\n this.eventActive = [];\n }\n \n isEmpty() {\n return this.signalStaging.size === 0 && this.eventStaging.length === 0;\n }\n\n /**\n * 重置所有池子\n */\n reset() {\n this.signalActive = new Map();\n this.signalStaging = new Map();\n this.eventStaging = [];\n this.eventActive = [];\n }\n}\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Core\n */\n\nimport { MessageWriter } from \"./io\";\nimport {\n type ExecuteHook,\n type ExecuteHookContext,\n type SystemTask,\n type MessageIdentifier,\n type SystemContext,\n type TickHook,\n type TickHookContext,\n} from \"../interfaces\";\nimport { type BaseMessage } from \"./message\";\nimport { Staging } from \"./staging\";\n\nexport class Dispatcher {\n constructor(private maxDepth: number) {}\n private isRunning = false;\n private globalTick = 0;\n private internalDepth = 0;\n private staging = new Staging();\n\n private tickPayload: { [key: string]: any } = {};\n\n private beforeExecuteHooks: Array<{\n type: MessageIdentifier<any>;\n handler: ExecuteHook<any>;\n }> = [];\n private afterExecuteHooks: Array<{\n type: MessageIdentifier<any>;\n handler: ExecuteHook<any>;\n }> = [];\n\n private beforeTickHooks: Array<TickHook> = [];\n private afterTickHooks: Array<TickHook> = [];\n\n public addBeforeExecute<T extends BaseMessage>(\n type: MessageIdentifier<T>,\n hook: ExecuteHook<T>,\n front: boolean,\n ) {\n if (front)\n this.beforeExecuteHooks.unshift({\n type,\n handler: hook as ExecuteHook<any>,\n });\n else\n this.beforeExecuteHooks.push({ type, handler: hook as ExecuteHook<any> });\n }\n public addAfterExecute<T extends BaseMessage>(\n type: MessageIdentifier<T>,\n hook: ExecuteHook<T>,\n front: boolean,\n ) {\n if (front)\n this.afterExecuteHooks.unshift({\n type,\n handler: hook as ExecuteHook<any>,\n });\n else\n this.afterExecuteHooks.push({ type, handler: hook as ExecuteHook<any> });\n }\n public addBeforeTick(hook: TickHook, front: boolean) {\n if (front) this.beforeTickHooks.unshift(hook);\n else this.beforeTickHooks.push(hook);\n }\n public addAfterTick(hook: TickHook, front: boolean) {\n if (front) this.afterTickHooks.unshift(hook);\n else this.afterTickHooks.push(hook);\n }\n\n /**\n * Marking dirty data, Determine which pool to enter based on the base class\n */\n public stage(message: BaseMessage) {\n this.staging.stage(message);\n }\n\n public tick(systemTaskMap: Map<any, SystemTask[]>) {\n if (this.isRunning || this.staging.isEmpty()) return;\n\n if (this.internalDepth > this.maxDepth) {\n this.internalDepth = 0;\n this.staging.reset();\n console.error(\n new Error(\n `[Virid Dispatcher] Deadlock: Max depth reached ${this.maxDepth}, Possible infinite loop detected. The dispatcher will stop processing this tick.`,\n ),\n );\n return;\n }\n\n this.isRunning = true;\n this.internalDepth++;\n\n queueMicrotask(() => {\n try {\n // Execute tick hook, only triggered on the first time\n if (this.internalDepth == 1) {\n this.tickPayload = {};\n this.executeTickHooks(this.beforeTickHooks);\n }\n // Preparing to start execution\n this.staging.flip();\n // The tasks that should be performed to collect this tick\n const tasks = this.collectTasks(systemTaskMap);\n // Execute the task for this frame\n this.executeTasks(tasks);\n } catch (e) {\n MessageWriter.error(e as Error, \"[Virid Dispatcher] Unhandled Error\");\n } finally {\n // Release the lock and attempt the next round of execution\n this.isRunning = false;\n // Enter the next round of micro tick\n if (!this.staging.isEmpty()) {\n this.tick(systemTaskMap);\n } else {\n // Reset internal status\n this.staging.reset();\n this.internalDepth = 0;\n this.executeTickHooks(this.afterTickHooks);\n this.globalTick++;\n }\n }\n });\n }\n public tickSync(systemTaskMap: Map<any, SystemTask[]>) {\n if (this.staging.isEmpty()) return;\n\n this.internalDepth = 0;\n this.tickPayload = {};\n\n this.executeTickHooks(this.beforeTickHooks);\n\n while (!this.staging.isEmpty()) {\n if (this.internalDepth > this.maxDepth) {\n this.staging.reset();\n this.internalDepth = 0;\n console.error(\n new Error(\n `[Virid Dispatcher] Deadlock: Max depth reached ${this.maxDepth}, Possible infinite loop detected. Ticking aborted.`,\n ),\n );\n return;\n }\n this.internalDepth++;\n try {\n this.staging.flip();\n const tasks = this.collectTasks(systemTaskMap);\n this.executeTasks(tasks);\n } catch (e) {\n MessageWriter.error(\n e as Error,\n \"[Virid Dispatcher] Sub-Tick Unhandled Error\",\n );\n break;\n }\n }\n\n this.staging.reset();\n this.internalDepth = 0;\n this.executeTickHooks(this.afterTickHooks);\n this.globalTick++;\n }\n\n private collectTasks(systemTaskMap: Map<any, SystemTask[]>): ExecutionTask[] {\n const tasks: ExecutionTask[] = [];\n // Collect EVENT tasks and execute all associated systems for each message from front to back\n for (const msg of this.staging.eventActive) {\n const systems = systemTaskMap.get(msg.constructor) || [];\n systems.forEach((s) => {\n tasks.push(\n new ExecutionTask(\n s.fn,\n s.priority,\n msg,\n {\n context: (s.fn as any).systemContext as SystemContext,\n tick: this.globalTick,\n payload: {},\n },\n this.beforeExecuteHooks,\n this.afterExecuteHooks,\n ),\n );\n });\n }\n // Collect SIGNAL tasks (each system only runs once for that type)\n for (const [msg, msg_list] of this.staging.signalActive.entries()) {\n const systems = systemTaskMap.get(msg) || [];\n systems.forEach((s) => {\n tasks.push(\n new ExecutionTask(\n s.fn,\n s.priority,\n msg_list,\n {\n context: (s.fn as any).systemContext as SystemContext,\n tick: this.globalTick,\n payload: {},\n },\n this.beforeExecuteHooks,\n this.afterExecuteHooks,\n ),\n );\n });\n }\n return tasks;\n }\n private executeTasks(tasks: ExecutionTask[]) {\n // Regardless of the message type, sort according to the priority defined by the System\n tasks.sort((a, b) => b.priority - a.priority);\n for (const task of tasks) {\n const msg = Array.isArray(task.message) ? task.message[0] : task.message;\n try {\n const result = task.execute();\n // If it's a Promise, just register a catch to prevent crashes, don't await it\n if (result instanceof Promise) {\n result.catch((e) =>\n MessageWriter.error(\n e,\n `[Virid Dispatcher]: Async System Error.\\n` +\n `SystemLocation: ${task.hookContext.context.targetClass.name}.${task.hookContext.context.methodName}\\n` +\n `MessageName: ${msg.constructor.name}\\n` +\n `MessageData: ${JSON.stringify(task.message)}`,\n ),\n );\n }\n } catch (e) {\n MessageWriter.error(\n e as Error,\n `[Virid Dispatcher]: Sync System Error.\\n` +\n `SystemLocation: ${task.hookContext.context.targetClass.name}.${task.hookContext.context.methodName}\\n` +\n `MessageName: ${msg.constructor.name}\\n` +\n `MessageData: ${JSON.stringify(task.message)}`,\n );\n }\n }\n }\n\n private executeTickHooks(hooks: TickHook[]) {\n const hooksContext: TickHookContext = {\n tick: this.globalTick,\n timestamp: Date.now(),\n payload: this.tickPayload,\n };\n hooks.forEach((h) => h(hooksContext));\n }\n}\n\nexport class ExecutionTask {\n public success = true;\n constructor(\n public fn: (...args: any[]) => any,\n public priority: number,\n public message: any, // T or T[]\n public hookContext: ExecuteHookContext,\n public beforeExecuteHooks: Array<{\n type: MessageIdentifier<any>;\n handler: ExecuteHook<any>;\n }>,\n public afterExecuteHooks: Array<{\n type: MessageIdentifier<any>;\n handler: ExecuteHook<any>;\n }>,\n ) {}\n\n private triggerHooks(\n hooks: Array<{\n type: MessageIdentifier<any>;\n handler: ExecuteHook<any>;\n }>,\n ) {\n const sample = Array.isArray(this.message) ? this.message[0] : this.message;\n if (!sample) return;\n\n for (const hook of hooks) {\n if (sample instanceof hook.type) {\n try {\n const result = hook.handler(\n this.message,\n this.hookContext,\n this.success,\n );\n if (result instanceof Promise) {\n result.catch((e) => {\n MessageWriter.error(\n e,\n `[Virid Hook] Async Hook Error: It is prohibited to use asynchronous hooks within Hook: ${hook.type.name}`,\n );\n });\n }\n } catch (e) {\n MessageWriter.error(\n e as Error,\n `[Virid Hook] Hook Execute Failed: Triggered by: ${sample.constructor.name}, Registered type: ${hook.type.name}`,\n );\n }\n }\n }\n }\n\n public execute(): any {\n this.triggerHooks(this.beforeExecuteHooks);\n const runAfter = () => this.triggerHooks(this.afterExecuteHooks);\n\n try {\n const result = this.fn(this.message);\n\n if (result instanceof Promise) {\n // Asynchronous mode utilizes. finally to ensure hook execution\n return result.catch(() => (this.success = false)).finally(runAfter);\n }\n // If it is synchronization, execute it directly with a post hook and return it\n runAfter();\n return result;\n } catch (e) {\n // If an error occurs, execute the post hook as well\n this.success = false;\n runAfter();\n throw e; // Try catch processing thrown to Dispatcher\n }\n }\n}\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Core\n */\n\nimport {\n type ExecuteHook,\n type TickHook,\n type MessageIdentifier,\n type Middleware,\n} from \"../interfaces\";\nimport { BaseMessage } from \"./message\";\nimport { MessageRegistry } from \"./registry\";\nimport { MessageWriter, activateInstance } from \"./io\";\nimport { Dispatcher } from \"./dispatcher\";\n\nexport class MessageEngine {\n private dispatcher: Dispatcher;\n private registry = new MessageRegistry();\n private middlewares: Middleware[] = [];\n private manual: boolean;\n\n constructor(maxDepth: number, manual: boolean) {\n this.dispatcher = new Dispatcher(maxDepth);\n this.manual = manual;\n // 修改\n activateInstance(this);\n }\n\n useMiddleware(mw: Middleware, front: boolean) {\n this.middlewares.push(mw);\n }\n onBeforeExecute<T extends BaseMessage>(\n type: MessageIdentifier<T>,\n hook: ExecuteHook<T>,\n front: boolean,\n ) {\n this.dispatcher.addBeforeExecute(type, hook, front);\n }\n onAfterExecute<T extends BaseMessage>(\n type: MessageIdentifier<T>,\n hook: ExecuteHook<T>,\n front: boolean,\n ) {\n this.dispatcher.addAfterExecute(type, hook, front);\n }\n onBeforeTick(hook: TickHook, front: boolean) {\n this.dispatcher.addBeforeTick(hook, front);\n }\n onAfterTick(hook: TickHook, front: boolean) {\n this.dispatcher.addAfterTick(hook, front);\n }\n\n tick() {\n this.dispatcher.tickSync(this.registry.systemTaskMap);\n }\n\n dispatch(message: BaseMessage) {\n if (!(message instanceof BaseMessage)) {\n MessageWriter.error(\n new Error(\n `[Virid Dispatch] Type Error: Message must be an instance of BaseMessage,message:${message}`,\n ),\n );\n return;\n }\n // 运行中间件管道\n this.pipeline(message, () => {\n //看看这个消息的处理函数在this.systemTaskMap里有吗?没有就报错\n if (!this.registry.systemTaskMap.has(message.constructor)) {\n MessageWriter.error(\n new Error(\n `[Virid Dispatch] No handler for message: ${message.constructor.name}`,\n ),\n );\n return;\n }\n this.dispatcher.stage(message);\n if (!this.manual) {\n this.dispatcher.tick(this.registry.systemTaskMap);\n }\n });\n }\n\n private pipeline(message: BaseMessage, finalAction: () => void) {\n let index = 0;\n const next = () => {\n if (index < this.middlewares.length) {\n this.middlewares[index++](message, next);\n } else {\n finalAction();\n }\n };\n next();\n }\n\n register(\n messageClass: any,\n systemFn: (...args: any[]) => any,\n priority: number = 0,\n ): () => void {\n return this.registry.register(messageClass, systemFn, priority);\n }\n}\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Core\n */\n\nexport const VIRID_METADATA = {\n SYSTEM: \"virid:core:system\",\n MESSAGE: \"virid:core:message\",\n CONTROLLER: \"virid:core:controller\",\n COMPONENT: \"virid:core:component\",\n SAFE: \"virid:core:safe\",\n OBSERVER: \"virid:core:observer\",\n} as const;\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Core\n */\nimport { BaseMessage, MessageWriter, SingleMessage } from \"../core\";\nimport { VIRID_METADATA } from \"./constant\";\nimport {\n type SystemContext,\n type Newable,\n type SystemParams,\n type ObserverMetadata,\n type SafeMetadata,\n SystemConfig,\n} from \"../interfaces\";\n\n// Unified processing of return values: System can directly return a message to achieve a chain reaction\nexport function handleResult(res: any) {\n if (!res) return;\n const messages = Array.isArray(res) ? res : [res];\n messages.forEach((m) => {\n if (m instanceof BaseMessage) {\n MessageWriter.write(m);\n } else {\n MessageWriter.warn(\n `[Virid HandleResult] Invalid Return Type: Must return Message or Message[].`,\n );\n }\n });\n}\n\n/**\n * Check if there are multiple message type parameters in the parameters\n * @param types Parameter list\n */\nfunction checkMessageParam(types: Array<any>) {\n const foundMatches: { type: any; idx: number }[] = [];\n\n types.forEach((type, idx) => {\n const isBaseMessage =\n type === BaseMessage || (type && type.prototype instanceof BaseMessage);\n\n if (isBaseMessage) {\n foundMatches.push({ type, idx });\n }\n });\n\n if (foundMatches.length === 0) {\n return null;\n }\n\n if (foundMatches.length > 1) {\n // 发现多个,把所有的错误信息组合起来抛出\n const errorDetails = foundMatches\n .map((item) => `[Index: ${item.idx}, Name: ${item.type.name}]`)\n .join(\", \");\n\n throw new Error(\n `[Virid System] Multiple Messages: Multiple Message type parameters detected, this is not allowed! specific location: ${errorDetails}`,\n );\n }\n\n return foundMatches[0];\n}\n\n/**\n * System Decorator\n * @param params Priority and MessageClass config\n */\nexport function System(\n params: SystemParams = {\n messageClass: null,\n priority: 0,\n },\n) {\n return (target: any, key: string, descriptor: PropertyDescriptor) => {\n if (typeof target !== \"function\") {\n throw new Error(\n `[Virid System] Method Type Error: The Method ${key} is not a static method, please check if there is a static keyword tag.`,\n );\n }\n\n const originalMethod = descriptor.value;\n const types: Array<any> = Reflect.getMetadata(\n \"design:paramtypes\",\n target,\n key,\n );\n\n // Verify if metadata exists\n if (!types) {\n throw new Error(\n `[Virid System] System Parameter Loss: Unable to recognize system parameters, please confirm if import \"reflect-metadata\" was introduced at the beginning.`,\n );\n }\n\n // Verify if there are undefined parameters\n const undefinedIndices = types\n .map((t, i) => (t === undefined ? i : -1))\n .filter((i) => i !== -1);\n if (undefinedIndices.length > 0) {\n throw new Error(\n `[Virid System] Parameter Metadata Loss in \"${key}\": One or more parameters have 'undefined' types. This usually happens when you forget to add a type annotation or due to circular dependencies. Check parameter at indices: [${undefinedIndices.join(\", \")}]`,\n );\n }\n\n let messageClass: Newable<BaseMessage>;\n // eslint-disable-next-line no-useless-assignment\n let messageIdx: number = -1;\n let batchMode = false;\n const listIdx = types.indexOf(Array);\n\n if (listIdx !== -1) {\n // Batch processing mode (with Array parameters)\n if (!params.messageClass) {\n throw new Error(\n `[Virid System] System Parameter Loss: When using batch processing mode with Array, the messageClass parameter must be specified in decorator options.`,\n );\n }\n if (!(params.messageClass.prototype instanceof SingleMessage)) {\n throw new Error(\n `[Virid System] System Parameter Loss: When using the batch processing mode, the messageClass parameter must inherit from SingleMessage.`,\n );\n }\n messageClass = params.messageClass;\n messageIdx = listIdx; // In batch processing mode, idx points to the position of Array\n batchMode = true;\n } else {\n // Non batch processing mode\n const matchedMessage = checkMessageParam(types); // { type: any, idx: number } | null\n\n if (matchedMessage && params.messageClass) {\n throw new Error(\n `[Virid System] Multiple Messages Are Not Allowed: Cannot specify messageClass in decorator options while already declaring it in method parameters at index ${matchedMessage.idx} in ${key}.`,\n );\n }\n\n if (matchedMessage) {\n messageClass = matchedMessage.type;\n messageIdx = matchedMessage.idx; // In single mode, idx points to the location of a specific BaseMessage subclass\n } else if (params.messageClass) {\n messageClass = params.messageClass;\n messageIdx = -1; // Only provided in the configuration, cannot be found in the parameters, set to -1\n } else {\n throw new Error(\n `[Virid System] System Parameter Loss: Please declare the message type either in method parameters or via the Message decorator options.`,\n );\n }\n }\n\n // Attach contextual information to the packaged function\n const systemContext: SystemContext = {\n params: types,\n targetClass: target,\n methodName: key,\n originalMethod: originalMethod,\n };\n const systemConfig: SystemConfig = {\n messageClass: messageClass,\n messageIdx: messageIdx,\n priority: params.priority || 0,\n batchMode: batchMode,\n };\n\n // Purely mounting data without changing the execution logic of the original method\n (descriptor.value as any).systemContext = systemContext;\n (descriptor.value as any).systemConfig = systemConfig;\n };\n}\n\n/**\n * Is the method used to identify the controller or component safe and can be directly called by other controllers\n */\nexport function Safe() {\n return (target: any, key: string, _descriptor: PropertyDescriptor) => {\n const safeMethods: SafeMetadata =\n Reflect.getMetadata(VIRID_METADATA.SAFE, target) || new Set<string>();\n safeMethods.add(key);\n Reflect.defineMetadata(VIRID_METADATA.SAFE, safeMethods, target);\n };\n}\n\n/**\n * Observer Decorator\n */\nexport function Observer(\n callback: (oldVal: any, newVale: any) => void | BaseMessage | BaseMessage[],\n) {\n return (target: any, propertyKey: string) => {\n const observerMetadata: ObserverMetadata =\n Reflect.getMetadata(VIRID_METADATA.OBSERVER, target) || [];\n observerMetadata.push({ propertyKey, callback });\n Reflect.defineMetadata(VIRID_METADATA.OBSERVER, observerMetadata, target);\n };\n}\n\n/**\n * Controller Decorator\n */\nexport function Controller() {\n return (target: any) => {\n Reflect.defineMetadata(VIRID_METADATA.CONTROLLER, true, target);\n };\n}\n/**\n * Component Decorator\n */\nexport function Component() {\n return (target: any) => {\n // 打上组件标签\n Reflect.defineMetadata(VIRID_METADATA.COMPONENT, true, target);\n };\n}\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Core\n */\nimport { type ObserverItem } from \"../interfaces\";\nimport { handleResult } from \"./decorator\";\nimport { VIRID_METADATA } from \"./constant\";\nconst ARRAY_MUTABLE_METHODS = [\n \"push\",\n \"pop\",\n \"shift\",\n \"unshift\",\n \"splice\",\n \"sort\",\n \"reverse\",\n];\nexport function bindObservers(instance: any) {\n if (!instance || typeof instance !== \"object\") return instance;\n if (\n Object.prototype.hasOwnProperty.call(\n instance,\n \"__virid_observer_processed__\",\n )\n )\n return instance;\n\n Object.defineProperty(instance, \"__virid_observer_processed__\", {\n value: true,\n enumerable: false,\n configurable: true,\n });\n\n const observerConfigs: ObserverItem[] =\n Reflect.getMetadata(VIRID_METADATA.OBSERVER, instance) || [];\n\n observerConfigs.forEach(({ propertyKey, callback }) => {\n // 创建逻辑单元:一个闭包 Box\n const box = { value: instance[propertyKey] };\n const logicProxy = new Proxy(box, {\n get(target, prop) {\n const value = target.value;\n\n // 数组变动拦截\n if (\n Array.isArray(value) &&\n ARRAY_MUTABLE_METHODS.includes(prop as string)\n ) {\n return (...args: any[]) => {\n const oldVal = [...value];\n const result = (value as any)[prop].apply(value, args);\n const observerResult = callback.call(instance, oldVal, value);\n handleResult(observerResult);\n\n return result;\n };\n }\n return value;\n },\n set(target, _prop, newVal) {\n const oldVal = target.value;\n if (newVal === oldVal) return true;\n\n target.value = newVal;\n const result = callback.call(instance, oldVal, newVal);\n handleResult(result);\n return true;\n },\n });\n // 在 bindObservers 的 forEach 内部\n const getter = () => logicProxy.value;\n (getter as any).__virid_box__ = box; // 重点:把闭包里的 box 暴露给后续插件\n\n Object.defineProperty(instance, propertyKey, {\n get: getter, // 纯转发\n set: (v) => {\n logicProxy.value = v;\n }, // 纯转发\n enumerable: true,\n configurable: true,\n });\n\n // 初次递归扫描\n if (box.value && typeof box.value === \"object\") {\n bindObservers(box.value);\n }\n });\n\n // 处理未标记但属于子组件的对象\n Reflect.ownKeys(instance).forEach((key) => {\n if (key === \"__virid_observer_processed__\") return;\n const desc = Object.getOwnPropertyDescriptor(instance, key);\n if (desc && desc.get) return;\n const val = instance[key];\n if (val && typeof val === \"object\") {\n bindObservers(val);\n }\n });\n return instance;\n}\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Core\n */\n\nimport { Newable } from \"./interfaces\";\nimport { VIRID_METADATA } from \"./decorators/constant\";\n\ninterface Binding {\n type: \"singleton\" | \"transient\";\n ctor: Newable<any>;\n}\n\nexport class ViridContainer {\n private bindings = new Map<any, Binding>();\n private singletonInstances = new Map<any, any>();\n private activationHooks: Array<(instance: any) => any> = [];\n /**\n * Register an activation hook\n * @param hook An activation hook\n * @param front Is the hook order inserted from the front or added\n */\n public addActivationHook(hook: (instance: any) => any, front: boolean) {\n if (front) this.activationHooks.unshift(hook);\n else this.activationHooks.push(hook);\n }\n /**\n * Static binding component or controller\n * @param identifier Constructor of components or controllers\n */\n public bind<T>(identifier: Newable<T>) {\n //Check if the constructor has mandatory parameters\n if (identifier.length > 0) {\n throw new Error(\n `[Virid Container] Cannot Bind Component Or Controller: The Class ${identifier.name} should not have mandatory parameters.`,\n );\n }\n if (Reflect.getMetadata(VIRID_METADATA.COMPONENT, identifier)) {\n const binding: Binding = {\n type: \"singleton\",\n ctor: identifier,\n };\n this.bindings.set(identifier, binding);\n } else if (Reflect.getMetadata(VIRID_METADATA.CONTROLLER, identifier)) {\n const binding: Binding = { type: \"transient\", ctor: identifier };\n this.bindings.set(identifier, binding);\n } else {\n throw new Error(\n `[Virid Container] Cannot Bind Component Or Controller: The Class ${identifier.name} is not decorated with @Component or @Controller`,\n );\n }\n }\n /**\n * Dynamically register a component\n * @param instance Component instance\n */\n public spawn(instance: object) {\n const identifier = instance.constructor as Newable<any>;\n if (Reflect.hasMetadata(VIRID_METADATA.COMPONENT, identifier)) {\n const binding: Binding = { type: \"singleton\", ctor: identifier };\n this.bindings.set(identifier, binding);\n this.singletonInstances.set(identifier, instance);\n } else {\n throw new Error(\n `[Virid Container] Cannot spawn Component: The Class ${identifier.name} is not decorated with @Component`,\n );\n }\n }\n /**\n * Obtain a Component or Controller instance\n * @param identifier Constructor of components or controllers\n */\n public get<T>(identifier: Newable<T>): T {\n const binding = this.bindings.get(identifier);\n if (!binding) {\n throw new Error(\n `[Virid Container] Cannot Get Component Or Controller: No binding found for ${identifier}`,\n );\n }\n const TargetCtor = binding.ctor;\n\n if (binding.type === \"singleton\") {\n if (!this.singletonInstances.has(identifier)) {\n // first creation\n const rawInstance = new TargetCtor();\n const processedInstance = this.handleActivation(rawInstance);\n this.singletonInstances.set(identifier, processedInstance);\n }\n return this.singletonInstances.get(identifier);\n }\n\n // Transient\n const instance = new TargetCtor();\n return this.handleActivation(instance);\n }\n private handleActivation<T>(instance: T): T {\n for (const hook of this.activationHooks) {\n instance = hook(instance);\n }\n return instance;\n }\n}\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Core\n */\nimport { ViridContainer } from \"./container\";\nimport {\n type ExecuteHook,\n type MessageIdentifier,\n type Middleware,\n type TickHook,\n type Newable,\n type SystemContext,\n type SystemConfig,\n} from \"./interfaces\";\nimport {\n BaseMessage,\n MessageWriter,\n MessageEngine,\n EventMessage,\n SingleMessage,\n} from \"./core\";\nimport { handleResult, Component } from \"./decorators\";\n\nexport interface ViridPlugin<T = any> {\n name: string;\n install: (app: ViridApp, options: T) => void;\n}\n\n@Component()\nexport class ViridApp {\n public container: ViridContainer = new ViridContainer();\n public engine: MessageEngine;\n private installedPlugins = new Set<string>();\n\n constructor(maxDepth: number, manual: boolean) {\n this.engine = new MessageEngine(maxDepth, manual);\n this.container.spawn(this);\n }\n\n /**\n * Register an activation hook\n * @param hook An activation hook\n * @param front Is the hook order inserted from the front or added\n */\n onActivate(hook: (instance: any) => any, front: boolean = false) {\n this.container.addActivationHook(hook, front);\n }\n\n /**\n * Opening a new tick\n */\n tick() {\n this.engine.tick();\n }\n\n /**\n * Obtain a Component or Controller instance\n * @param identifier Constructor of components or controllers\n */\n get<T>(identifier: Newable<T>): T {\n return this.container.get(identifier);\n }\n\n /**\n * Static binding component or controller\n * @param identifier Constructor of components or controllers\n */\n bind<T>(identifier: Newable<T>) {\n this.container.bind(identifier);\n }\n /**\n * Dynamically register a component\n * @param instance Component instance\n */\n spawn(instance: object) {\n this.container.spawn(instance);\n }\n useMiddleware(mw: Middleware, front = false) {\n this.engine.useMiddleware(mw, front);\n }\n onBeforeExecute<T extends BaseMessage>(\n type: MessageIdentifier<T>,\n hook: ExecuteHook<T>,\n front = false,\n ) {\n this.engine.onBeforeExecute(type, hook, front);\n }\n onAfterExecute<T extends BaseMessage>(\n type: MessageIdentifier<T>,\n hook: ExecuteHook<T>,\n front = false,\n ) {\n this.engine.onAfterExecute(type, hook, front);\n }\n onBeforeTick(hook: TickHook, front = false) {\n this.engine.onBeforeTick(hook, front);\n }\n onAfterTick(hook: TickHook, front = false) {\n this.engine.onAfterTick(hook, front);\n }\n\n use<T>(plugin: ViridPlugin<T>, options: T): this {\n if (this.installedPlugins.has(plugin.name)) {\n MessageWriter.warn(\n `[Virid Plugin] Duplicate Installation: Plugin ${plugin.name} has already been installed.`,\n );\n return this;\n }\n try {\n plugin.install(this, options);\n this.installedPlugins.add(plugin.name);\n } catch (e) {\n MessageWriter.error(\n e as Error,\n `[Virid Plugin]: Install Failed: ${plugin.name}`,\n );\n }\n return this;\n }\n /**\n * Register message to registrar\n * @param systemFn System functions\n */\n register(systemFn: (...args: any[]) => any): () => void {\n const systemContext: SystemContext = (systemFn as any).systemContext;\n const systemConfig: SystemConfig = (systemFn as any).systemConfig;\n\n if (!systemContext || !systemConfig) {\n throw new Error(\n `[Virid System] System Parameter Loss: Please declare ${systemFn.name} using the @System decorator first.`,\n );\n }\n\n const { params: types, targetClass, originalMethod } = systemContext;\n const { messageClass, messageIdx, priority, batchMode } = systemConfig;\n\n const handleResultFn =\n typeof handleResult === \"function\" ? handleResult : (res: any) => res;\n const processResult = (result: any) => {\n return result instanceof Promise\n ? result.then(handleResultFn)\n : handleResultFn(result);\n };\n\n const cachedComponents = new Array(types.length);\n let isInitialized = false;\n\n const initDeps = () => {\n for (let i = 0; i < types.length; i++) {\n if (i !== messageIdx) {\n const dep = this.get(types[i]);\n if (!dep) {\n throw new Error(\n `[Virid System] Unknown Inject Data Types: ${types[i].name || types[i]} is not registered in the container for system '${systemFn.name}'!`,\n );\n }\n cachedComponents[i] = dep;\n }\n }\n isInitialized = true;\n };\n\n let wrappedSystem: (currentMessage: EventMessage | SingleMessage[]) => any;\n\n if (messageIdx === -1) {\n wrappedSystem = () => {\n if (!isInitialized) initDeps();\n return processResult(\n originalMethod.apply(targetClass, cachedComponents),\n );\n };\n } else if (types.length === 1) {\n if (batchMode) {\n wrappedSystem = (currentMessage: EventMessage | SingleMessage[]) => {\n const payload = Array.isArray(currentMessage)\n ? currentMessage\n : [currentMessage];\n\n if (payload.length > 0 && !(payload[0] instanceof messageClass)) {\n throw new Error(\n `[Virid System] Type Mismatch: Expected list of ${messageClass.name}, but got ${payload[0]?.constructor?.name}`,\n );\n }\n\n return processResult(originalMethod.call(targetClass, payload));\n };\n } else {\n wrappedSystem = (currentMessage: EventMessage | SingleMessage[]) => {\n const payload = Array.isArray(currentMessage)\n ? currentMessage[currentMessage.length - 1]\n : currentMessage;\n\n if (!(payload instanceof messageClass)) {\n throw new Error(\n `[Virid System] Type Mismatch: Expected ${messageClass.name}, but got ${(payload as any)?.constructor?.name}`,\n );\n }\n\n return processResult(originalMethod.call(targetClass, payload));\n };\n }\n } else {\n if (batchMode) {\n wrappedSystem = (currentMessage: EventMessage | SingleMessage[]) => {\n if (!isInitialized) initDeps();\n const payload = Array.isArray(currentMessage)\n ? currentMessage\n : [currentMessage];\n\n if (payload.length > 0 && !(payload[0] instanceof messageClass)) {\n throw new Error(\n `[Virid System] Type Mismatch: Expected list of ${messageClass.name}, but got ${payload[0]?.constructor?.name}`,\n );\n }\n\n const callArgs = [...cachedComponents];\n callArgs[messageIdx] = payload;\n return processResult(originalMethod.apply(targetClass, callArgs));\n };\n } else {\n wrappedSystem = (currentMessage: EventMessage | SingleMessage[]) => {\n if (!isInitialized) initDeps();\n const payload = Array.isArray(currentMessage)\n ? currentMessage[currentMessage.length - 1]\n : currentMessage;\n\n if (!(payload instanceof messageClass)) {\n throw new Error(\n `[Virid System] Type Mismatch: Expected ${messageClass.name}, but got ${(payload as any)?.constructor?.name}`,\n );\n }\n\n const callArgs = [...cachedComponents];\n callArgs[messageIdx] = payload;\n return processResult(originalMethod.apply(targetClass, callArgs));\n };\n }\n }\n\n (wrappedSystem as any).systemContext = systemContext;\n\n return this.engine.register(messageClass, wrappedSystem, priority);\n }\n}\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Core\n */\nimport { type ViridApp } from \"./app\";\nimport { ErrorMessage, InfoMessage, WarnMessage } from \"./core\";\nimport { System } from \"./decorators\";\n\nlet globalSwitch = true;\n\nexport function toggleSwitch(enable: boolean) {\n globalSwitch = enable;\n}\n\nconst clr = {\n reset: \"\\x1b[0m\",\n red: \"\\x1b[31m\",\n yellow: \"\\x1b[33m\",\n blue: \"\\x1b[34m\",\n magenta: \"\\x1b[35m\",\n cyan: \"\\x1b[36m\",\n gray: \"\\x1b[90m\",\n bold: \"\\x1b[1m\",\n green: \"\\x1b[32m\",\n};\n\nclass ViridLogHandler {\n /**\n * Register the global default information processing system\n */\n @System()\n static globalInfoHandler(info: InfoMessage) {\n if (!globalSwitch) return;\n const header = `${clr.green}${clr.bold} ✔ [Virid Info] ${clr.reset}`;\n console.log(\n `${header}${clr.gray} Global Info Caught: ${clr.reset}\\n` +\n `${clr.green} Details: ${clr.reset}`,\n info.context || \"unknown Info\",\n );\n }\n\n /**\n * Register the global default error handling system\n */\n @System()\n static globalErrorHandler(err: ErrorMessage) {\n if (!globalSwitch) return;\n const header = `${clr.red}${clr.bold} ✖ [Virid Error] ${clr.reset}`;\n\n console.error(\n `${header}${clr.gray} Global Error Caught: ${clr.reset}\\n` +\n `${clr.red} Context: ${clr.reset} ${err.context}\\n` +\n `${clr.red} Details: ${clr.reset}`,\n err.error || err || \"unknown Error\",\n );\n }\n\n /**\n * Register the global default warning handling system\n */\n @System()\n static globalWarnHandler(warn: WarnMessage) {\n if (!globalSwitch) return;\n const header = `${clr.yellow}${clr.bold} ⚠ [Virid Warn] ${clr.reset}`;\n console.warn(\n `${header}${clr.gray} Global Warn Caught: ${clr.reset}\\n` +\n `${clr.yellow} Context:${clr.reset} ${warn.context}`,\n );\n }\n}\n\nexport function registerBasicSystems(app: ViridApp) {\n app.register(ViridLogHandler.globalInfoHandler);\n app.register(ViridLogHandler.globalErrorHandler);\n app.register(ViridLogHandler.globalWarnHandler);\n}\n"],"mappings":";;;;mmBAAA,IAAAA,GAAA,GAAAC,GAAAD,GAAA,iBAAAE,EAAA,cAAAC,GAAA,eAAAC,GAAA,iBAAAC,EAAA,iBAAAC,EAAA,gBAAAC,EAAA,kBAAAC,EAAA,oBAAAC,EAAA,kBAAAC,EAAA,aAAAC,GAAA,SAAAC,GAAA,kBAAAC,EAAA,WAAAC,EAAA,mBAAAC,EAAA,aAAAC,EAAA,gBAAAC,EAAA,qBAAAC,EAAA,kBAAAC,EAAA,gBAAAC,GAAA,kBAAAC,EAAA,iBAAAC,IAAA,eAAAC,GAAAvB,ICgBA,IAAMwB,EAA2B,CAC/BC,SAAU,IACVC,UAAW,GACXC,OAAQ,EACV,ECNA,IAAIC,EAAuC,KACpC,SAASC,EAAiBC,EAAuB,CACtDF,EAAiBE,CACnB,CAFgBD,EAAAA,EAAAA,oBAIhB,SAASE,GAASC,EAAoB,CAChCJ,EACFA,EAAeG,SAASC,CAAAA,EAExBC,QAAQC,MAAM,iDAAA,CAElB,CANSH,EAAAA,GAAAA,YAQF,IAAMI,EAAN,MAAMA,CAAAA,CACX,OAAcC,MACZC,KACGC,EACG,CACN,IAAMR,EACJ,OAAOO,GAAW,WACd,IAAKA,EAAAA,GAAkBC,CAAAA,EACtBD,EAEPN,GAASD,CAAAA,CACX,CAEA,OAAcI,MAAMK,EAAUC,EAAkB,GAAU,CACxD,KAAKJ,MAAM,IAAIK,EAAaF,EAAGC,CAAAA,CAAAA,CACjC,CAEA,OAAcE,KAAKF,EAAuB,CACxC,KAAKJ,MAAM,IAAIO,EAAYH,CAAAA,CAAAA,CAC7B,CACA,OAAcI,KAAKJ,EAAuB,CACxC,KAAKJ,MAAM,IAAIS,EAAYL,CAAAA,CAAAA,CAC7B,CACF,EAvBaL,EAAAA,EAAAA,iBAAN,IAAMA,EAANW,ECnBA,IAAeC,EAAf,MAAeA,CAAAA,CACpB,OAAOC,QAEFC,EACH,CACAC,EAAcC,MAAM,KAAI,GAAYF,CAAAA,CACtC,CACF,EAPsBF,EAAAA,EAAAA,eAAf,IAAeA,EAAfK,EASeC,EAAf,MAAeA,UAAsBN,CAAAA,CAC1C,aAAc,CACZ,MAAK,CACP,CACF,EAJ4CA,EAAAA,EAAAA,iBAArC,IAAeM,EAAfC,EAMeC,EAAf,MAAeA,UAAqBR,CAAAA,CACzC,aAAc,CACZ,MAAK,CACP,CACF,EAJ2CA,EAAAA,EAAAA,gBAApC,IAAeQ,EAAfC,EAMMC,EAAN,MAAMA,UAAqBF,CAAAA,CAChC,YACkBG,EACAC,EAChB,CACA,MAAK,oCAAA,KAHWD,MAAAA,EAAAA,KACAC,QAAAA,CAGlB,CACF,EAPkCJ,EAAAA,EAAAA,gBAA3B,IAAME,EAANG,EASMC,GAAN,MAAMA,WAAoBN,CAAAA,CAC/B,YAA4BI,EAAiB,CAC3C,MAAK,oBAAA,KADqBA,QAAAA,CAE5B,CACF,EAJiCJ,EAAAA,GAAAA,eAA1B,IAAMM,EAANC,GAMMC,GAAN,MAAMA,WAAoBR,CAAAA,CAC/B,YAA4BI,EAAiB,CAC3C,MAAK,oBAAA,KADqBA,QAAAA,CAE5B,CACF,EAJiCJ,EAAAA,GAAAA,eAA1B,IAAMQ,EAANC,GCpCA,IAAMC,GAAN,MAAMA,EAAAA,CAAN,cACLC,EAAAA,qBAAgB,IAAIC,KAKpBC,SACEC,EACAC,EACAC,EAAmB,EACP,CACZ,IAAMC,EAAU,KAAKN,cAAcO,IAAIJ,CAAAA,GAAiB,CAAA,EAMxD,GALsBG,EAAQE,UAC3BC,GACEA,EAAEC,GAAWC,cAAcC,iBAC3BR,EAAiBO,cAAcC,cAAc,IAE5B,GACpBN,EAAQO,KAAK,CAAEH,GAAIN,EAAUC,SAAAA,CAAS,CAAA,EACtCC,EAAQQ,KAAK,CAACC,EAAGC,IAAMA,EAAEX,SAAWU,EAAEV,QAAQ,EAC9C,KAAKL,cAAciB,IAAId,EAAcG,CAAAA,MAChC,CAEL,IAAMY,EAAYd,EAAiBe,WAC7BC,EAAehB,EAAiBgB,YACtCC,OAAAA,EAAcC,MACZ,IAAIC,MACF,0DAA0DpB,EAAaqB,IAAI,cAAcJ,EAAYI,IAAI,IAAIN,CAAAA,EAAU,CAAA,EAGpH,IAAA,CAAO,CAChB,CAEA,MAAO,IAAA,CACL,IAAMO,EAAiB,KAAKzB,cAAcO,IAAIJ,CAAAA,EAC9C,GAAIsB,EAAgB,CAClB,IAAMC,EAAQD,EAAejB,UAAWC,GAAMA,EAAEC,KAAON,CAAAA,EACnDsB,IAAU,KACZD,EAAeE,OAAOD,EAAO,CAAA,EAEzBD,EAAeG,SAAW,GAC5B,KAAK5B,cAAc6B,OAAO1B,CAAAA,EAGhC,CACF,CACF,CACF,EA/CaJ,EAAAA,GAAAA,mBAAN,IAAMA,EAAN+B,GCAA,IAAMC,GAAN,MAAMA,EAAAA,CAAN,cACEC,EAAAA,oBAAe,IAAIC,KACnBC,EAAAA,mBAAqB,CAAA,GACpBC,EAAAA,qBAAgB,IAAIF,KACpBG,EAAAA,oBAAsB,CAAA,GAE9BC,MAAMC,EAAoB,CACxB,GAAIA,aAAiBC,EAAe,CAClC,IAAMC,EAAOF,EAAM,YACd,KAAKH,cAAcM,IAAID,CAAAA,GAAO,KAAKL,cAAcO,IAAIF,EAAM,CAAA,CAAE,EAClE,KAAKL,cAAcQ,IAAIH,CAAAA,EAAOI,KAAKN,CAAAA,CACrC,MAAWA,aAAiBO,EAC1B,KAAKT,aAAaQ,KAAKN,CAAAA,EAEvBQ,EAAcC,MACZ,IAAIC,MACF;EAAqCV,EAAM,YAAYW,IAAI,4CAA4C,CAAA,CAI/G,CAEAC,MAAO,CACL,KAAKlB,aAAe,KAAKG,cACzB,KAAKD,YAAc,KAAKE,aACxB,KAAKD,cAAgB,IAAIF,IACzB,KAAKG,aAAe,CAAA,CACtB,CAEAe,cAAe,CAEb,KAAKnB,aAAe,IAAIC,GAC1B,CAEAmB,aAAc,CACZ,KAAKlB,YAAc,CAAA,CACrB,CAEAmB,SAAU,CACR,OAAO,KAAKlB,cAAcmB,OAAS,GAAK,KAAKlB,aAAamB,SAAW,CACvE,CAKAC,OAAQ,CACN,KAAKxB,aAAe,IAAIC,IACxB,KAAKE,cAAgB,IAAIF,IACzB,KAAKG,aAAe,CAAA,EACpB,KAAKF,YAAc,CAAA,CACrB,CACF,EAnDaH,EAAAA,GAAAA,WAAN,IAAMA,EAAN0B,GCWA,IAAMC,GAAN,MAAMA,EAAAA,CACX,YAAoBC,EAAkB,oBAC9BC,EAAAA,iBAAY,IACZC,EAAAA,kBAAa,GACbC,EAAAA,qBAAgB,GAChBC,EAAAA,eAAU,IAAIC,GAEdC,EAAAA,mBAAsC,CAAC,GAEvCC,EAAAA,0BAGH,CAAA,GACGC,EAAAA,yBAGH,CAAA,GAEGC,EAAAA,uBAAmC,CAAA,GACnCC,EAAAA,sBAAkC,CAAA,QAlBtBV,SAAAA,CAAmB,CAoBhCW,iBACLC,EACAC,EACAC,EACA,CACIA,EACF,KAAKP,mBAAmBQ,QAAQ,CAC9BH,KAAAA,EACAI,QAASH,CACX,CAAA,EAEA,KAAKN,mBAAmBU,KAAK,CAAEL,KAAAA,EAAMI,QAASH,CAAyB,CAAA,CAC3E,CACOK,gBACLN,EACAC,EACAC,EACA,CACIA,EACF,KAAKN,kBAAkBO,QAAQ,CAC7BH,KAAAA,EACAI,QAASH,CACX,CAAA,EAEA,KAAKL,kBAAkBS,KAAK,CAAEL,KAAAA,EAAMI,QAASH,CAAyB,CAAA,CAC1E,CACOM,cAAcN,EAAgBC,EAAgB,CAC/CA,EAAO,KAAKL,gBAAgBM,QAAQF,CAAAA,EACnC,KAAKJ,gBAAgBQ,KAAKJ,CAAAA,CACjC,CACOO,aAAaP,EAAgBC,EAAgB,CAC9CA,EAAO,KAAKJ,eAAeK,QAAQF,CAAAA,EAClC,KAAKH,eAAeO,KAAKJ,CAAAA,CAChC,CAKOQ,MAAMC,EAAsB,CACjC,KAAKlB,QAAQiB,MAAMC,CAAAA,CACrB,CAEOC,KAAKC,EAAuC,CACjD,GAAI,OAAKvB,WAAa,KAAKG,QAAQqB,QAAO,GAE1C,IAAI,KAAKtB,cAAgB,KAAKH,SAAU,CACtC,KAAKG,cAAgB,EACrB,KAAKC,QAAQsB,MAAK,EAClBC,QAAQC,MACN,IAAIC,MACF,kDAAkD,KAAK7B,QAAQ,mFAAmF,CAAA,EAGtJ,MACF,CAEA,KAAKC,UAAY,GACjB,KAAKE,gBAEL2B,eAAe,IAAA,CACb,GAAI,CAEE,KAAK3B,eAAiB,IACxB,KAAKG,YAAc,CAAC,EACpB,KAAKyB,iBAAiB,KAAKtB,eAAe,GAG5C,KAAKL,QAAQ4B,KAAI,EAEjB,IAAMC,EAAQ,KAAKC,aAAaV,CAAAA,EAEhC,KAAKW,aAAaF,CAAAA,CACpB,OAASG,EAAG,CACVC,EAAcT,MAAMQ,EAAY,oCAAA,CAClC,QAAA,CAEE,KAAKnC,UAAY,GAEZ,KAAKG,QAAQqB,QAAO,GAIvB,KAAKrB,QAAQsB,MAAK,EAClB,KAAKvB,cAAgB,EACrB,KAAK4B,iBAAiB,KAAKrB,cAAc,EACzC,KAAKR,cANL,KAAKqB,KAAKC,CAAAA,CAQd,CACF,CAAA,EACF,CACOc,SAASd,EAAuC,CACrD,GAAI,MAAKpB,QAAQqB,QAAO,EAOxB,KALA,KAAKtB,cAAgB,EACrB,KAAKG,YAAc,CAAC,EAEpB,KAAKyB,iBAAiB,KAAKtB,eAAe,EAEnC,CAAC,KAAKL,QAAQqB,QAAO,GAAI,CAC9B,GAAI,KAAKtB,cAAgB,KAAKH,SAAU,CACtC,KAAKI,QAAQsB,MAAK,EAClB,KAAKvB,cAAgB,EACrBwB,QAAQC,MACN,IAAIC,MACF,kDAAkD,KAAK7B,QAAQ,qDAAqD,CAAA,EAGxH,MACF,CACA,KAAKG,gBACL,GAAI,CACF,KAAKC,QAAQ4B,KAAI,EACjB,IAAMC,EAAQ,KAAKC,aAAaV,CAAAA,EAChC,KAAKW,aAAaF,CAAAA,CACpB,OAASG,EAAG,CACVC,EAAcT,MACZQ,EACA,6CAAA,EAEF,KACF,CACF,CAEA,KAAKhC,QAAQsB,MAAK,EAClB,KAAKvB,cAAgB,EACrB,KAAK4B,iBAAiB,KAAKrB,cAAc,EACzC,KAAKR,aACP,CAEQgC,aAAaV,EAAwD,CAC3E,IAAMS,EAAyB,CAAA,EAE/B,QAAWM,KAAO,KAAKnC,QAAQoC,aACbhB,EAAciB,IAAIF,EAAI,WAAW,GAAK,CAAA,GAC9CG,QAASC,GAAAA,CACfV,EAAMhB,KACJ,IAAI2B,EACFD,EAAEE,GACFF,EAAEG,SACFP,EACA,CACEQ,QAAUJ,EAAEE,GAAWG,cACvBzB,KAAM,KAAKrB,WACX+C,QAAS,CAAC,CACZ,EACA,KAAK1C,mBACL,KAAKC,iBAAiB,CAAA,CAG5B,CAAA,EAGF,OAAW,CAAC+B,EAAKW,CAAAA,IAAa,KAAK9C,QAAQ+C,aAAaC,QAAO,GAC7C5B,EAAciB,IAAIF,CAAAA,GAAQ,CAAA,GAClCG,QAASC,GAAAA,CACfV,EAAMhB,KACJ,IAAI2B,EACFD,EAAEE,GACFF,EAAEG,SACFI,EACA,CACEH,QAAUJ,EAAEE,GAAWG,cACvBzB,KAAM,KAAKrB,WACX+C,QAAS,CAAC,CACZ,EACA,KAAK1C,mBACL,KAAKC,iBAAiB,CAAA,CAG5B,CAAA,EAEF,OAAOyB,CACT,CACQE,aAAaF,EAAwB,CAE3CA,EAAMoB,KAAK,CAACC,EAAGC,IAAMA,EAAET,SAAWQ,EAAER,QAAQ,EAC5C,QAAWU,KAAQvB,EAAO,CACxB,IAAMM,EAAMkB,MAAMC,QAAQF,EAAKlC,OAAO,EAAIkC,EAAKlC,QAAQ,CAAA,EAAKkC,EAAKlC,QACjE,GAAI,CACF,IAAMqC,EAASH,EAAKI,QAAO,EAEvBD,aAAkBE,SACpBF,EAAOG,MAAO1B,GACZC,EAAcT,MACZQ,EACA;kBACqBoB,EAAKO,YAAYhB,QAAQiB,YAAYC,IAAI,IAAIT,EAAKO,YAAYhB,QAAQmB,UAAU;kBAChF3B,EAAI,YAAY0B,IAAI;kBACpBE,KAAKC,UAAUZ,EAAKlC,OAAO,CAAA,EAAG,CAAA,CAI3D,OAASc,EAAG,CACVC,EAAcT,MACZQ,EACA;kBACqBoB,EAAKO,YAAYhB,QAAQiB,YAAYC,IAAI,IAAIT,EAAKO,YAAYhB,QAAQmB,UAAU;kBAChF3B,EAAI,YAAY0B,IAAI;kBACpBE,KAAKC,UAAUZ,EAAKlC,OAAO,CAAA,EAAG,CAEvD,CACF,CACF,CAEQS,iBAAiBsC,EAAmB,CAC1C,IAAMC,EAAgC,CACpC/C,KAAM,KAAKrB,WACXqE,UAAWC,KAAKC,IAAG,EACnBxB,QAAS,KAAK3C,WAChB,EACA+D,EAAM3B,QAASgC,GAAMA,EAAEJ,CAAAA,CAAAA,CACzB,CACF,EAzOavE,EAAAA,GAAAA,cAAN,IAAMA,EAAN4E,GA2OM/B,GAAN,MAAMA,EAAAA,CAEX,YACSC,EACAC,EACAxB,EACAyC,EACAxD,EAIAC,EAIP,kIAdKoE,EAAAA,eAAU,SAER/B,GAAAA,OACAC,SAAAA,OACAxB,QAAAA,OACAyC,YAAAA,OACAxD,mBAAAA,OAIAC,kBAAAA,CAIN,CAEKqE,aACNR,EAIA,CACA,IAAMS,EAASrB,MAAMC,QAAQ,KAAKpC,OAAO,EAAI,KAAKA,QAAQ,CAAA,EAAK,KAAKA,QACpE,GAAKwD,GAEL,QAAWjE,KAAQwD,EACjB,GAAIS,aAAkBjE,EAAKD,KACzB,GAAI,CACF,IAAM+C,EAAS9C,EAAKG,QAClB,KAAKM,QACL,KAAKyC,YACL,KAAKa,OAAO,EAEVjB,aAAkBE,SACpBF,EAAOG,MAAO1B,GAAAA,CACZC,EAAcT,MACZQ,EACA,0FAA0FvB,EAAKD,KAAKqD,IAAI,EAAE,CAE9G,CAAA,CAEJ,OAAS7B,EAAG,CACVC,EAAcT,MACZQ,EACA,mDAAmD0C,EAAO,YAAYb,IAAI,sBAAsBpD,EAAKD,KAAKqD,IAAI,EAAE,CAEpH,EAGN,CAEOL,SAAe,CACpB,KAAKiB,aAAa,KAAKtE,kBAAkB,EACzC,IAAMwE,EAAWC,EAAA,IAAM,KAAKH,aAAa,KAAKrE,iBAAiB,EAA9C,YAEjB,GAAI,CACF,IAAMmD,EAAS,KAAKd,GAAG,KAAKvB,OAAO,EAEnC,OAAIqC,aAAkBE,QAEbF,EAAOG,MAAM,IAAO,KAAKc,QAAU,EAAA,EAAQK,QAAQF,CAAAA,GAG5DA,EAAAA,EACOpB,EACT,OAASvB,EAAG,CAEV,WAAKwC,QAAU,GACfG,EAAAA,EACM3C,CACR,CACF,CACF,EAzEaQ,EAAAA,GAAAA,iBAAN,IAAMA,EAANsC,GC7OA,IAAMC,GAAN,MAAMA,EAAAA,CAMX,YAAYC,EAAkBC,EAAiB,CALvCC,EAAAA,mBACAC,EAAAA,gBAAW,IAAIC,GACfC,EAAAA,mBAA4B,CAAA,GAC5BJ,EAAAA,eAGN,KAAKC,WAAa,IAAII,EAAWN,CAAAA,EACjC,KAAKC,OAASA,EAEdM,EAAiB,IAAI,CACvB,CAEAC,cAAcC,EAAgBC,EAAgB,CAC5C,KAAKL,YAAYM,KAAKF,CAAAA,CACxB,CACAG,gBACEC,EACAC,EACAJ,EACA,CACA,KAAKR,WAAWa,iBAAiBF,EAAMC,EAAMJ,CAAAA,CAC/C,CACAM,eACEH,EACAC,EACAJ,EACA,CACA,KAAKR,WAAWe,gBAAgBJ,EAAMC,EAAMJ,CAAAA,CAC9C,CACAQ,aAAaJ,EAAgBJ,EAAgB,CAC3C,KAAKR,WAAWiB,cAAcL,EAAMJ,CAAAA,CACtC,CACAU,YAAYN,EAAgBJ,EAAgB,CAC1C,KAAKR,WAAWmB,aAAaP,EAAMJ,CAAAA,CACrC,CAEAY,MAAO,CACL,KAAKpB,WAAWqB,SAAS,KAAKpB,SAASqB,aAAa,CACtD,CAEAC,SAASC,EAAsB,CAC7B,GAAI,EAAEA,aAAmBC,GAAc,CACrCC,EAAcC,MACZ,IAAIC,MACF,mFAAmFJ,CAAAA,EAAS,CAAA,EAGhG,MACF,CAEA,KAAKK,SAASL,EAAS,IAAA,CAErB,GAAI,CAAC,KAAKvB,SAASqB,cAAcQ,IAAIN,EAAQ,WAAW,EAAG,CACzDE,EAAcC,MACZ,IAAIC,MACF,4CAA4CJ,EAAQ,YAAYO,IAAI,EAAE,CAAA,EAG1E,MACF,CACA,KAAK/B,WAAWgC,MAAMR,CAAAA,EACjB,KAAKzB,QACR,KAAKC,WAAWoB,KAAK,KAAKnB,SAASqB,aAAa,CAEpD,CAAA,CACF,CAEQO,SAASL,EAAsBS,EAAyB,CAC9D,IAAIC,EAAQ,EACNC,EAAOC,EAAA,IAAA,CACPF,EAAQ,KAAK/B,YAAYkC,OAC3B,KAAKlC,YAAY+B,GAAAA,EAASV,EAASW,CAAAA,EAEnCF,EAAAA,CAEJ,EANa,QAObE,EAAAA,CACF,CAEAG,SACEC,EACAC,EACAC,EAAmB,EACP,CACZ,OAAO,KAAKxC,SAASqC,SAASC,EAAcC,EAAUC,CAAAA,CACxD,CACF,EAvFa5C,EAAAA,GAAAA,iBAAN,IAAMA,EAAN6C,GCXA,IAAMC,EAAiB,CAC5BC,OAAQ,oBACRC,QAAS,qBACTC,WAAY,wBACZC,UAAW,uBACXC,KAAM,kBACNC,SAAU,qBACZ,ECIO,SAASC,EAAaC,EAAQ,CACnC,GAAI,CAACA,EAAK,QACOC,MAAMC,QAAQF,CAAAA,EAAOA,EAAM,CAACA,IACpCG,QAASC,GAAAA,CACZA,aAAaC,EACfC,EAAcC,MAAMH,CAAAA,EAEpBE,EAAcE,KACZ,8EAA8E,CAGpF,CAAA,CACF,CAZgBT,EAAAA,EAAAA,gBAkBhB,SAASU,GAAkBC,EAAiB,CAC1C,IAAMC,EAA6C,CAAA,EAWnD,GATAD,EAAMP,QAAQ,CAACS,EAAMC,IAAAA,EAEjBD,IAASP,GAAgBO,GAAQA,EAAKE,qBAAqBT,IAG3DM,EAAaI,KAAK,CAAEH,KAAAA,EAAMC,IAAAA,CAAI,CAAA,CAElC,CAAA,EAEIF,EAAaK,SAAW,EAC1B,OAAO,KAGT,GAAIL,EAAaK,OAAS,EAAG,CAE3B,IAAMC,EAAeN,EAClBO,IAAKC,GAAS,WAAWA,EAAKN,GAAG,WAAWM,EAAKP,KAAKQ,IAAI,GAAG,EAC7DC,KAAK,IAAA,EAER,MAAM,IAAIC,MACR,wHAAwHL,CAAAA,EAAc,CAE1I,CAEA,OAAON,EAAa,CAAA,CACtB,CA5BSF,EAAAA,GAAAA,qBAkCF,SAASc,EACdC,EAAuB,CACrBC,aAAc,KACdC,SAAU,CACZ,EAAC,CAED,MAAO,CAACC,EAAaC,EAAaC,IAAAA,CAChC,GAAI,OAAOF,GAAW,WACpB,MAAM,IAAIL,MACR,gDAAgDM,CAAAA,yEAA4E,EAIhI,IAAME,EAAiBD,EAAWE,MAC5BrB,EAAoBsB,QAAQC,YAChC,oBACAN,EACAC,CAAAA,EAIF,GAAI,CAAClB,EACH,MAAM,IAAIY,MACR,2JAA2J,EAK/J,IAAMY,EAAmBxB,EACtBQ,IAAI,CAACiB,EAAGC,IAAOD,IAAME,OAAYD,EAAI,EAAC,EACtCE,OAAQF,GAAMA,IAAM,EAAC,EACxB,GAAIF,EAAiBlB,OAAS,EAC5B,MAAM,IAAIM,MACR,8CAA8CM,CAAAA,iLAAoLM,EAAiBb,KAAK,IAAA,CAAA,GAAQ,EAIpQ,IAAII,EAEAc,EAAqB,GACrBC,EAAY,GACVC,EAAU/B,EAAMgC,QAAQzC,KAAAA,EAE9B,GAAIwC,IAAY,GAAI,CAElB,GAAI,CAACjB,EAAOC,aACV,MAAM,IAAIH,MACR,uJAAuJ,EAG3J,GAAI,EAAEE,EAAOC,aAAaX,qBAAqB6B,GAC7C,MAAM,IAAIrB,MACR,yIAAyI,EAG7IG,EAAeD,EAAOC,aACtBc,EAAaE,EACbD,EAAY,EACd,KAAO,CAEL,IAAMI,EAAiBnC,GAAkBC,CAAAA,EAEzC,GAAIkC,GAAkBpB,EAAOC,aAC3B,MAAM,IAAIH,MACR,+JAA+JsB,EAAe/B,GAAG,OAAOe,CAAAA,GAAM,EAIlM,GAAIgB,EACFnB,EAAemB,EAAehC,KAC9B2B,EAAaK,EAAe/B,YACnBW,EAAOC,aAChBA,EAAeD,EAAOC,aACtBc,EAAa,OAEb,OAAM,IAAIjB,MACR,yIAAyI,CAG/I,CAGA,IAAMuB,EAA+B,CACnCrB,OAAQd,EACRoC,YAAanB,EACboB,WAAYnB,EACZE,eAAgBA,CAClB,EACMkB,EAA6B,CACjCvB,aAAcA,EACdc,WAAYA,EACZb,SAAUF,EAAOE,UAAY,EAC7Bc,UAAWA,CACb,EAGCX,EAAWE,MAAcc,cAAgBA,EACzChB,EAAWE,MAAciB,aAAeA,CAC3C,CACF,CAnGgBzB,EAAAA,EAAAA,UAwGT,SAAS0B,IAAAA,CACd,MAAO,CAACtB,EAAaC,EAAasB,IAAAA,CAChC,IAAMC,EACJnB,QAAQC,YAAYmB,EAAeC,KAAM1B,CAAAA,GAAW,IAAI2B,IAC1DH,EAAYI,IAAI3B,CAAAA,EAChBI,QAAQwB,eAAeJ,EAAeC,KAAMF,EAAaxB,CAAAA,CAC3D,CACF,CAPgBsB,EAAAA,GAAAA,QAYT,SAASQ,GACdC,EAA2E,CAE3E,MAAO,CAAC/B,EAAagC,IAAAA,CACnB,IAAMC,EACJ5B,QAAQC,YAAYmB,EAAeS,SAAUlC,CAAAA,GAAW,CAAA,EAC1DiC,EAAiB7C,KAAK,CAAE4C,YAAAA,EAAaD,SAAAA,CAAS,CAAA,EAC9C1B,QAAQwB,eAAeJ,EAAeS,SAAUD,EAAkBjC,CAAAA,CACpE,CACF,CATgB8B,EAAAA,GAAAA,YAcT,SAASK,IAAAA,CACd,OAAQnC,GAAAA,CACNK,QAAQwB,eAAeJ,EAAeW,WAAY,GAAMpC,CAAAA,CAC1D,CACF,CAJgBmC,EAAAA,GAAAA,cAQT,SAASE,IAAAA,CACd,OAAQrC,GAAAA,CAENK,QAAQwB,eAAeJ,EAAea,UAAW,GAAMtC,CAAAA,CACzD,CACF,CALgBqC,EAAAA,GAAAA,aCvMhB,IAAME,GAAwB,CAC5B,OACA,MACA,QACA,UACA,SACA,OACA,WAEK,SAASC,EAAcC,EAAa,CAEzC,MADI,CAACA,GAAY,OAAOA,GAAa,UAEnCC,OAAOC,UAAUC,eAAeC,KAC9BJ,EACA,8BAAA,IAKJC,OAAOI,eAAeL,EAAU,+BAAgC,CAC9DM,MAAO,GACPC,WAAY,GACZC,aAAc,EAChB,CAAA,GAGEC,QAAQC,YAAYC,EAAeC,SAAUZ,CAAAA,GAAa,CAAA,GAE5Ca,QAAQ,CAAC,CAAEC,YAAAA,EAAaC,SAAAA,CAAQ,IAAE,CAEhD,IAAMC,EAAM,CAAEV,MAAON,EAASc,CAAAA,CAAa,EACrCG,EAAa,IAAIC,MAAMF,EAAK,CAChCG,IAAIC,EAAQC,EAAI,CACd,IAAMf,EAAQc,EAAOd,MAGrB,OACEgB,MAAMC,QAAQjB,CAAAA,GACdR,GAAsB0B,SAASH,CAAAA,EAExB,IAAII,IAAAA,CACT,IAAMC,EAAS,IAAIpB,GACbqB,EAAUrB,EAAce,CAAAA,EAAMO,MAAMtB,EAAOmB,CAAAA,EAC3CI,EAAiBd,EAASX,KAAKJ,EAAU0B,EAAQpB,CAAAA,EACvDwB,OAAAA,EAAaD,CAAAA,EAENF,CACT,EAEKrB,CACT,EACAyB,IAAIX,EAAQY,EAAOC,EAAM,CACvB,IAAMP,EAASN,EAAOd,MACtB,GAAI2B,IAAWP,EAAQ,MAAO,GAE9BN,EAAOd,MAAQ2B,EACf,IAAMN,EAASZ,EAASX,KAAKJ,EAAU0B,EAAQO,CAAAA,EAC/CH,OAAAA,EAAaH,CAAAA,EACN,EACT,CACF,CAAA,EAEMO,EAASC,EAAA,IAAMlB,EAAWX,MAAjB,UACd4B,EAAeE,cAAgBpB,EAEhCf,OAAOI,eAAeL,EAAUc,EAAa,CAC3CK,IAAKe,EACLH,IAAKI,EAACE,GAAAA,CACJpB,EAAWX,MAAQ+B,CACrB,EAFK,OAGL9B,WAAY,GACZC,aAAc,EAChB,CAAA,EAGIQ,EAAIV,OAAS,OAAOU,EAAIV,OAAU,UACpCP,EAAciB,EAAIV,KAAK,CAE3B,CAAA,EAGAG,QAAQ6B,QAAQtC,CAAAA,EAAUa,QAAS0B,GAAAA,CACjC,GAAIA,IAAQ,+BAAgC,OAC5C,IAAMC,EAAOvC,OAAOwC,yBAAyBzC,EAAUuC,CAAAA,EACvD,GAAIC,GAAQA,EAAKrB,IAAK,OACtB,IAAMuB,EAAM1C,EAASuC,CAAAA,EACjBG,GAAO,OAAOA,GAAQ,UACxB3C,EAAc2C,CAAAA,CAElB,CAAA,GACO1C,CACT,CAlFgBD,EAAAA,EAAAA,iBCHT,IAAM4C,GAAN,MAAMA,EAAAA,CAAN,cACGC,EAAAA,gBAAW,IAAIC,KACfC,EAAAA,0BAAqB,IAAID,KACzBE,EAAAA,uBAAiD,CAAA,GAMlDC,kBAAkBC,EAA8BC,EAAgB,CACjEA,EAAO,KAAKH,gBAAgBI,QAAQF,CAAAA,EACnC,KAAKF,gBAAgBK,KAAKH,CAAAA,CACjC,CAKOI,KAAQC,EAAwB,CAErC,GAAIA,EAAWC,OAAS,EACtB,MAAM,IAAIC,MACR,oEAAoEF,EAAWG,IAAI,wCAAwC,EAG/H,GAAIC,QAAQC,YAAYC,EAAeC,UAAWP,CAAAA,EAAa,CAC7D,IAAMQ,EAAmB,CACvBC,KAAM,YACNC,KAAMV,CACR,EACA,KAAKV,SAASqB,IAAIX,EAAYQ,CAAAA,CAChC,SAAWJ,QAAQC,YAAYC,EAAeM,WAAYZ,CAAAA,EAAa,CACrE,IAAMQ,EAAmB,CAAEC,KAAM,YAAaC,KAAMV,CAAW,EAC/D,KAAKV,SAASqB,IAAIX,EAAYQ,CAAAA,CAChC,KACE,OAAM,IAAIN,MACR,oEAAoEF,EAAWG,IAAI,kDAAkD,CAG3I,CAKOU,MAAMC,EAAkB,CAC7B,IAAMd,EAAac,EAAS,YAC5B,GAAIV,QAAQW,YAAYT,EAAeC,UAAWP,CAAAA,EAAa,CAC7D,IAAMQ,EAAmB,CAAEC,KAAM,YAAaC,KAAMV,CAAW,EAC/D,KAAKV,SAASqB,IAAIX,EAAYQ,CAAAA,EAC9B,KAAKhB,mBAAmBmB,IAAIX,EAAYc,CAAAA,CAC1C,KACE,OAAM,IAAIZ,MACR,uDAAuDF,EAAWG,IAAI,mCAAmC,CAG/G,CAKOa,IAAOhB,EAA2B,CACvC,IAAMQ,EAAU,KAAKlB,SAAS0B,IAAIhB,CAAAA,EAClC,GAAI,CAACQ,EACH,MAAM,IAAIN,MACR,8EAA8EF,CAAAA,EAAY,EAG9F,IAAMiB,EAAaT,EAAQE,KAE3B,GAAIF,EAAQC,OAAS,YAAa,CAChC,GAAI,CAAC,KAAKjB,mBAAmB0B,IAAIlB,CAAAA,EAAa,CAE5C,IAAMmB,EAAc,IAAIF,EAClBG,EAAoB,KAAKC,iBAAiBF,CAAAA,EAChD,KAAK3B,mBAAmBmB,IAAIX,EAAYoB,CAAAA,CAC1C,CACA,OAAO,KAAK5B,mBAAmBwB,IAAIhB,CAAAA,CACrC,CAGA,IAAMc,EAAW,IAAIG,EACrB,OAAO,KAAKI,iBAAiBP,CAAAA,CAC/B,CACQO,iBAAoBP,EAAgB,CAC1C,QAAWnB,KAAQ,KAAKF,gBACtBqB,EAAWnB,EAAKmB,CAAAA,EAElB,OAAOA,CACT,CACF,EAxFazB,EAAAA,GAAAA,kBAAN,IAAMA,EAANiC,keCgBA,IAAMC,GAAN,MAAMA,EAAAA,CAKX,YAAYC,EAAkBC,EAAiB,CAJxCC,EAAAA,iBAA4B,IAAIC,GAChCC,EAAAA,eACCC,EAAAA,wBAAmB,IAAIC,KAG7B,KAAKF,OAAS,IAAIG,EAAcP,EAAUC,CAAAA,EAC1C,KAAKC,UAAUM,MAAM,IAAI,CAC3B,CAOAC,WAAWC,EAA8BC,EAAiB,GAAO,CAC/D,KAAKT,UAAUU,kBAAkBF,EAAMC,CAAAA,CACzC,CAKAE,MAAO,CACL,KAAKT,OAAOS,KAAI,CAClB,CAMAC,IAAOC,EAA2B,CAChC,OAAO,KAAKb,UAAUY,IAAIC,CAAAA,CAC5B,CAMAC,KAAQD,EAAwB,CAC9B,KAAKb,UAAUc,KAAKD,CAAAA,CACtB,CAKAP,MAAMS,EAAkB,CACtB,KAAKf,UAAUM,MAAMS,CAAAA,CACvB,CACAC,cAAcC,EAAgBR,EAAQ,GAAO,CAC3C,KAAKP,OAAOc,cAAcC,EAAIR,CAAAA,CAChC,CACAS,gBACEC,EACAX,EACAC,EAAQ,GACR,CACA,KAAKP,OAAOgB,gBAAgBC,EAAMX,EAAMC,CAAAA,CAC1C,CACAW,eACED,EACAX,EACAC,EAAQ,GACR,CACA,KAAKP,OAAOkB,eAAeD,EAAMX,EAAMC,CAAAA,CACzC,CACAY,aAAab,EAAgBC,EAAQ,GAAO,CAC1C,KAAKP,OAAOmB,aAAab,EAAMC,CAAAA,CACjC,CACAa,YAAYd,EAAgBC,EAAQ,GAAO,CACzC,KAAKP,OAAOoB,YAAYd,EAAMC,CAAAA,CAChC,CAEAc,IAAOC,EAAwBC,EAAkB,CAC/C,GAAI,KAAKtB,iBAAiBuB,IAAIF,EAAOG,IAAI,EACvCC,OAAAA,EAAcC,KACZ,iDAAiDL,EAAOG,IAAI,8BAA8B,EAErF,KAET,GAAI,CACFH,EAAOM,QAAQ,KAAML,CAAAA,EACrB,KAAKtB,iBAAiB4B,IAAIP,EAAOG,IAAI,CACvC,OAASK,EAAG,CACVJ,EAAcK,MACZD,EACA,mCAAmCR,EAAOG,IAAI,EAAE,CAEpD,CACA,OAAO,IACT,CAKAO,SAASC,EAA+C,CACtD,IAAMC,EAAgCD,EAAiBC,cACjDC,EAA8BF,EAAiBE,aAErD,GAAI,CAACD,GAAiB,CAACC,EACrB,MAAM,IAAIC,MACR,wDAAwDH,EAASR,IAAI,qCAAqC,EAI9G,GAAM,CAAEY,OAAQC,EAAOC,YAAAA,EAAaC,eAAAA,CAAc,EAAKN,EACjD,CAAEO,aAAAA,EAAcC,WAAAA,EAAYC,SAAAA,EAAUC,UAAAA,CAAS,EAAKT,EAEpDU,EACJ,OAAOC,GAAiB,WAAaA,EAAgBC,GAAaA,EAC9DC,EAAgBC,EAACC,GACdA,aAAkBC,QACrBD,EAAOE,KAAKP,CAAAA,EACZA,EAAeK,CAAAA,EAHC,iBAMhBG,EAAmB,IAAIC,MAAMhB,EAAMiB,MAAM,EAC3CC,EAAgB,GAEdC,EAAWR,EAAA,IAAA,CACf,QAASS,EAAI,EAAGA,EAAIpB,EAAMiB,OAAQG,IAChC,GAAIA,IAAMhB,EAAY,CACpB,IAAMiB,EAAM,KAAKjD,IAAI4B,EAAMoB,CAAAA,CAAE,EAC7B,GAAI,CAACC,EACH,MAAM,IAAIvB,MACR,6CAA6CE,EAAMoB,CAAAA,EAAGjC,MAAQa,EAAMoB,CAAAA,CAAE,mDAAmDzB,EAASR,IAAI,IAAI,EAG9I4B,EAAiBK,CAAAA,EAAKC,CACxB,CAEFH,EAAgB,EAClB,EAbiB,YAebI,EAEJ,OAAIlB,IAAe,GACjBkB,EAAgBX,EAAA,KACTO,GAAeC,EAAAA,EACbT,EACLR,EAAeqB,MAAMtB,EAAac,CAAAA,CAAAA,GAHtB,iBAMPf,EAAMiB,SAAW,EACtBX,EACFgB,EAAgBX,EAACa,GAAAA,CACf,IAAMC,EAAUT,MAAMU,QAAQF,CAAAA,EAC1BA,EACA,CAACA,GAEL,GAAIC,EAAQR,OAAS,GAAK,EAAEQ,EAAQ,CAAA,YAActB,GAChD,MAAM,IAAIL,MACR,kDAAkDK,EAAahB,IAAI,aAAasC,EAAQ,CAAA,GAAI,aAAatC,IAAAA,EAAM,EAInH,OAAOuB,EAAcR,EAAeyB,KAAK1B,EAAawB,CAAAA,CAAAA,CACxD,EAZgB,iBAchBH,EAAgBX,EAACa,GAAAA,CACf,IAAMC,EAAUT,MAAMU,QAAQF,CAAAA,EAC1BA,EAAeA,EAAeP,OAAS,CAAA,EACvCO,EAEJ,GAAI,EAAEC,aAAmBtB,GACvB,MAAM,IAAIL,MACR,0CAA0CK,EAAahB,IAAI,aAAcsC,GAAiB,aAAatC,IAAAA,EAAM,EAIjH,OAAOuB,EAAcR,EAAeyB,KAAK1B,EAAawB,CAAAA,CAAAA,CACxD,EAZgB,iBAednB,EACFgB,EAAgBX,EAACa,GAAAA,CACVN,GAAeC,EAAAA,EACpB,IAAMM,EAAUT,MAAMU,QAAQF,CAAAA,EAC1BA,EACA,CAACA,GAEL,GAAIC,EAAQR,OAAS,GAAK,EAAEQ,EAAQ,CAAA,YAActB,GAChD,MAAM,IAAIL,MACR,kDAAkDK,EAAahB,IAAI,aAAasC,EAAQ,CAAA,GAAI,aAAatC,IAAAA,EAAM,EAInH,IAAMyC,EAAW,IAAIb,GACrBa,OAAAA,EAASxB,CAAAA,EAAcqB,EAChBf,EAAcR,EAAeqB,MAAMtB,EAAa2B,CAAAA,CAAAA,CACzD,EAfgB,iBAiBhBN,EAAgBX,EAACa,GAAAA,CACVN,GAAeC,EAAAA,EACpB,IAAMM,EAAUT,MAAMU,QAAQF,CAAAA,EAC1BA,EAAeA,EAAeP,OAAS,CAAA,EACvCO,EAEJ,GAAI,EAAEC,aAAmBtB,GACvB,MAAM,IAAIL,MACR,0CAA0CK,EAAahB,IAAI,aAAcsC,GAAiB,aAAatC,IAAAA,EAAM,EAIjH,IAAMyC,EAAW,IAAIb,GACrBa,OAAAA,EAASxB,CAAAA,EAAcqB,EAChBf,EAAcR,EAAeqB,MAAMtB,EAAa2B,CAAAA,CAAAA,CACzD,EAfgB,iBAmBnBN,EAAsB1B,cAAgBA,EAEhC,KAAKlC,OAAOgC,SAASS,EAAcmB,EAAejB,CAAAA,CAC3D,CACF,EAtNahD,EAAAA,GAAAA,YAAN,IAAMA,EAANwE,sFC1BN,SAAAC,GAAAC,EAAAC,EAAAC,EAAAC,EAAA,kTAAAC,EAAAL,GAAA,kJAKD,IAAIM,EAAe,GAEZ,SAASC,GAAaC,EAAe,CAC1CF,EAAeE,CACjB,CAFgBD,EAAAA,GAAAA,gBAIhB,IAAME,EAAM,CACVC,MAAO,UACPC,IAAK,WACLC,OAAQ,WACRC,KAAM,WACNC,QAAS,WACTC,KAAM,WACNC,KAAM,WACNC,KAAM,UACNC,MAAO,UACT,EAzBAC,EA2BMC,GAAND,EAAA,KAAMC,CAIJ,OACOC,kBAAkBC,EAAmB,CAC1C,GAAI,CAAChB,EAAc,OACnB,IAAMiB,EAAS,GAAGd,EAAIS,KAAK,GAAGT,EAAIQ,IAAI,wBAAmBR,EAAIC,KAAK,GAClEc,QAAQC,IACN,GAAGF,CAAAA,GAASd,EAAIO,IAAI,wBAAwBP,EAAIC,KAAK;EAChDD,EAAIS,KAAK,aAAaT,EAAIC,KAAK,GACpCY,EAAKI,SAAW,cAAA,CAEpB,CAKA,OACOC,mBAAmBC,EAAmB,CAC3C,GAAI,CAACtB,EAAc,OACnB,IAAMiB,EAAS,GAAGd,EAAIE,GAAG,GAAGF,EAAIQ,IAAI,yBAAoBR,EAAIC,KAAK,GAEjEc,QAAQK,MACN,GAAGN,CAAAA,GAASd,EAAIO,IAAI,yBAAyBP,EAAIC,KAAK;EACjDD,EAAIE,GAAG,aAAaF,EAAIC,KAAK,IAAIkB,EAAIF,OAAO;EAC5CjB,EAAIE,GAAG,aAAaF,EAAIC,KAAK,GAClCkB,EAAIC,OAASD,GAAO,eAAA,CAExB,CAKA,OACOE,kBAAkBC,EAAmB,CAC1C,GAAI,CAACzB,EAAc,OACnB,IAAMiB,EAAS,GAAGd,EAAIG,MAAM,GAAGH,EAAIQ,IAAI,wBAAmBR,EAAIC,KAAK,GACnEc,QAAQO,KACN,GAAGR,CAAAA,GAASd,EAAIO,IAAI,wBAAwBP,EAAIC,KAAK;EAChDD,EAAIG,MAAM,YAAYH,EAAIC,KAAK,IAAIqB,EAAKL,OAAO,EAAE,CAE1D,CACF,EA3CMN,EAAAA,EAAAA,mBAAND,waA6CO,SAASa,GAAqBC,EAAa,CAChDA,EAAIC,SAASd,EAAgBC,iBAAiB,EAC9CY,EAAIC,SAASd,EAAgBO,kBAAkB,EAC/CM,EAAIC,SAASd,EAAgBU,iBAAiB,CAChD,CAJgBE,EAAAA,GAAAA,wBb7CT,SAASG,GAAYC,EAAoBC,EAAa,CAC3DD,EAAS,CAAE,GAAGC,EAAe,GAAGD,CAAO,EACvC,IAAME,EAAM,IAAIC,EAASH,EAAOI,SAAWJ,EAAOK,MAAM,EAExDC,GAAqBJ,CAAAA,EACrBK,GAAaP,EAAOQ,SAAS,EAC7BN,EAAIO,WAAWC,CAAAA,EACf,IAAMC,EAAOT,EACbA,OAAAA,EAAIU,MAAMD,CAAAA,EACHT,CACT,CAVgBH,EAAAA,GAAAA","names":["index_exports","__export","BaseMessage","Component","Controller","ErrorMessage","EventMessage","InfoMessage","MessageEngine","MessageRegistry","MessageWriter","Observer","Safe","SingleMessage","System","VIRID_METADATA","ViridApp","WarnMessage","activateInstance","bindObservers","createVirid","defaultConfig","handleResult","__toCommonJS","defaultConfig","maxDepth","enableLog","manual","activeInstance","activateInstance","instance","dispatch","message","console","error","MessageWriter","write","target","args","e","context","ErrorMessage","warn","WarnMessage","info","InfoMessage","_MessageWriter","BaseMessage","send","args","MessageWriter","write","_BaseMessage","SingleMessage","_SingleMessage","EventMessage","_EventMessage","ErrorMessage","error","context","_ErrorMessage","WarnMessage","_WarnMessage","InfoMessage","_InfoMessage","MessageRegistry","systemTaskMap","Map","register","messageClass","systemFn","priority","systems","get","findIndex","s","fn","systemContext","originalMethod","push","sort","a","b","set","funcName","methodName","targetClass","MessageWriter","error","Error","name","currentSystems","index","splice","length","delete","_MessageRegistry","Staging","signalActive","Map","eventActive","signalStaging","eventStaging","stage","event","SingleMessage","type","has","set","get","push","EventMessage","MessageWriter","error","Error","name","flip","clearSignals","clearEvents","isEmpty","size","length","reset","_Staging","Dispatcher","maxDepth","isRunning","globalTick","internalDepth","staging","Staging","tickPayload","beforeExecuteHooks","afterExecuteHooks","beforeTickHooks","afterTickHooks","addBeforeExecute","type","hook","front","unshift","handler","push","addAfterExecute","addBeforeTick","addAfterTick","stage","message","tick","systemTaskMap","isEmpty","reset","console","error","Error","queueMicrotask","executeTickHooks","flip","tasks","collectTasks","executeTasks","e","MessageWriter","tickSync","msg","eventActive","get","forEach","s","ExecutionTask","fn","priority","context","systemContext","payload","msg_list","signalActive","entries","sort","a","b","task","Array","isArray","result","execute","Promise","catch","hookContext","targetClass","name","methodName","JSON","stringify","hooks","hooksContext","timestamp","Date","now","h","_Dispatcher","success","triggerHooks","sample","runAfter","__name","finally","_ExecutionTask","MessageEngine","maxDepth","manual","dispatcher","registry","MessageRegistry","middlewares","Dispatcher","activateInstance","useMiddleware","mw","front","push","onBeforeExecute","type","hook","addBeforeExecute","onAfterExecute","addAfterExecute","onBeforeTick","addBeforeTick","onAfterTick","addAfterTick","tick","tickSync","systemTaskMap","dispatch","message","BaseMessage","MessageWriter","error","Error","pipeline","has","name","stage","finalAction","index","next","__name","length","register","messageClass","systemFn","priority","_MessageEngine","VIRID_METADATA","SYSTEM","MESSAGE","CONTROLLER","COMPONENT","SAFE","OBSERVER","handleResult","res","Array","isArray","forEach","m","BaseMessage","MessageWriter","write","warn","checkMessageParam","types","foundMatches","type","idx","prototype","push","length","errorDetails","map","item","name","join","Error","System","params","messageClass","priority","target","key","descriptor","originalMethod","value","Reflect","getMetadata","undefinedIndices","t","i","undefined","filter","messageIdx","batchMode","listIdx","indexOf","SingleMessage","matchedMessage","systemContext","targetClass","methodName","systemConfig","Safe","_descriptor","safeMethods","VIRID_METADATA","SAFE","Set","add","defineMetadata","Observer","callback","propertyKey","observerMetadata","OBSERVER","Controller","CONTROLLER","Component","COMPONENT","ARRAY_MUTABLE_METHODS","bindObservers","instance","Object","prototype","hasOwnProperty","call","defineProperty","value","enumerable","configurable","Reflect","getMetadata","VIRID_METADATA","OBSERVER","forEach","propertyKey","callback","box","logicProxy","Proxy","get","target","prop","Array","isArray","includes","args","oldVal","result","apply","observerResult","handleResult","set","_prop","newVal","getter","__name","__virid_box__","v","ownKeys","key","desc","getOwnPropertyDescriptor","val","ViridContainer","bindings","Map","singletonInstances","activationHooks","addActivationHook","hook","front","unshift","push","bind","identifier","length","Error","name","Reflect","getMetadata","VIRID_METADATA","COMPONENT","binding","type","ctor","set","CONTROLLER","spawn","instance","hasMetadata","get","TargetCtor","has","rawInstance","processedInstance","handleActivation","_ViridContainer","ViridApp","maxDepth","manual","container","ViridContainer","engine","installedPlugins","Set","MessageEngine","spawn","onActivate","hook","front","addActivationHook","tick","get","identifier","bind","instance","useMiddleware","mw","onBeforeExecute","type","onAfterExecute","onBeforeTick","onAfterTick","use","plugin","options","has","name","MessageWriter","warn","install","add","e","error","register","systemFn","systemContext","systemConfig","Error","params","types","targetClass","originalMethod","messageClass","messageIdx","priority","batchMode","handleResultFn","handleResult","res","processResult","__name","result","Promise","then","cachedComponents","Array","length","isInitialized","initDeps","i","dep","wrappedSystem","apply","currentMessage","payload","isArray","call","callArgs","_ViridApp","_ts_decorate","decorators","target","key","desc","__name","globalSwitch","toggleSwitch","enable","clr","reset","red","yellow","blue","magenta","cyan","gray","bold","green","_a","ViridLogHandler","globalInfoHandler","info","header","console","log","context","globalErrorHandler","err","error","globalWarnHandler","warn","registerBasicSystems","app","register","createVirid","config","defaultConfig","app","ViridApp","maxDepth","manual","registerBasicSystems","toggleSwitch","enableLog","onActivate","bindObservers","self","spawn"]}
package/dist/index.js CHANGED
@@ -1,17 +1,17 @@
1
1
  /**
2
- * @virid/core v0.3.17
2
+ * @virid/core v0.4.1
3
3
  * A lightweight and powerful message core built using dependency injection and CCS concepts
4
4
  */
5
- var ce=Object.defineProperty;var ge=(r,e,t)=>e in r?ce(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t;var o=(r,e)=>ce(r,"name",{value:e,configurable:!0});var a=(r,e,t)=>ge(r,typeof e!="symbol"?e+"":e,t);var z={maxDepth:100,enableLog:!0,manual:!1};var F=null;function le(r){F=r}o(le,"activateInstance");function me(r){F?F.dispatch(r):console.error("[Virid MessageWriter] No active instance found.")}o(me,"dispatch");var J=class J{static write(e,...t){let s=typeof e=="function"?new e(...t):e;me(s)}static error(e,t=""){this.write(new v(e,t))}static warn(e){this.write(new $(e))}static info(e){this.write(new C(e))}};o(J,"MessageWriter");var d=J;var Y=class Y{static send(...e){d.write(this,...e)}};o(Y,"BaseMessage");var w=Y,q=class q extends w{constructor(){super()}};o(q,"SingleMessage");var S=q,K=class K extends w{constructor(){super()}};o(K,"EventMessage");var T=K,Q=class Q extends T{constructor(t,s){super();a(this,"error");a(this,"context");this.error=t,this.context=s}};o(Q,"ErrorMessage");var v=Q,X=class X extends T{constructor(t){super();a(this,"context");this.context=t}};o(X,"WarnMessage");var $=X,Z=class Z extends T{constructor(t){super();a(this,"context");this.context=t}};o(Z,"InfoMessage");var C=Z;var ee=class ee{constructor(){a(this,"systemTaskMap",new Map)}register(e,t,s=0){let i=this.systemTaskMap.get(e)||[];if(i.findIndex(c=>c.fn.systemContext.originalMethod===t.systemContext.originalMethod)===-1)i.push({fn:t,priority:s}),i.sort((c,l)=>l.priority-c.priority),this.systemTaskMap.set(e,i);else{let c=t.methodName,l=t.targetClass;return d.error(new Error(`[Virid Error] System Already Registered: Message Class ${e.name}, Location ${l.name}.${c}`)),()=>{}}return()=>{let c=this.systemTaskMap.get(e);if(c){let l=c.findIndex(m=>m.fn===t);l!==-1&&(c.splice(l,1),c.length===0&&this.systemTaskMap.delete(e))}}}};o(ee,"MessageRegistry");var I=ee;var te=class te{constructor(){a(this,"signalActive",new Map);a(this,"eventActive",[]);a(this,"signalStaging",new Map);a(this,"eventStaging",[])}stage(e){if(e instanceof S){let t=e.constructor;this.signalStaging.has(t)||this.signalStaging.set(t,[]),this.signalStaging.get(t).push(e)}else e instanceof T?this.eventStaging.push(e):d.error(new Error(`[Virid Message] Invalid Message:
6
- ${e.constructor.name} must extend SingleMessage or EventMessage`))}flip(){this.signalActive=this.signalStaging,this.eventActive=this.eventStaging,this.signalStaging=new Map,this.eventStaging=[]}clearSignals(){this.signalActive=new Map}clearEvents(){this.eventActive=[]}isEmpty(){return this.signalStaging.size===0&&this.eventStaging.length===0}reset(){this.signalActive=new Map,this.signalStaging=new Map,this.eventStaging=[],this.eventActive=[]}};o(te,"Staging");var N=te;var se=class se{constructor(e){a(this,"maxDepth");a(this,"isRunning",!1);a(this,"globalTick",0);a(this,"internalDepth",0);a(this,"staging",new N);a(this,"tickPayload",{});a(this,"beforeExecuteHooks",[]);a(this,"afterExecuteHooks",[]);a(this,"beforeTickHooks",[]);a(this,"afterTickHooks",[]);this.maxDepth=e}addBeforeExecute(e,t,s){s?this.beforeExecuteHooks.unshift({type:e,handler:t}):this.beforeExecuteHooks.push({type:e,handler:t})}addAfterExecute(e,t,s){s?this.afterExecuteHooks.unshift({type:e,handler:t}):this.afterExecuteHooks.push({type:e,handler:t})}addBeforeTick(e,t){t?this.beforeTickHooks.unshift(e):this.beforeTickHooks.push(e)}addAfterTick(e,t){t?this.afterTickHooks.unshift(e):this.afterTickHooks.push(e)}stage(e){this.staging.stage(e)}tick(e){if(!(this.isRunning||this.staging.isEmpty())){if(this.internalDepth>this.maxDepth){this.internalDepth=0,this.staging.reset(),console.error(new Error(`[Virid Dispatcher] Deadlock: Max depth reached ${this.maxDepth}, Possible infinite loop detected. The dispatcher will stop processing this tick.`));return}this.isRunning=!0,this.internalDepth++,queueMicrotask(()=>{try{this.internalDepth==1&&(this.tickPayload={},this.executeTickHooks(this.beforeTickHooks)),this.staging.flip();let t=this.collectTasks(e);this.executeTasks(t)}catch(t){d.error(t,"[Virid Dispatcher] Unhandled Error")}finally{this.isRunning=!1,this.staging.isEmpty()?(this.staging.reset(),this.internalDepth=0,this.executeTickHooks(this.afterTickHooks),this.globalTick++):this.tick(e)}})}}tickSync(e){if(!this.staging.isEmpty()){for(this.internalDepth=0,this.tickPayload={},this.executeTickHooks(this.beforeTickHooks);!this.staging.isEmpty();){if(this.internalDepth>this.maxDepth){this.staging.reset(),this.internalDepth=0,console.error(new Error(`[Virid Dispatcher] Deadlock: Max depth reached ${this.maxDepth}, Possible infinite loop detected. Ticking aborted.`));return}this.internalDepth++;try{this.staging.flip();let t=this.collectTasks(e);this.executeTasks(t)}catch(t){d.error(t,"[Virid Dispatcher] Sub-Tick Unhandled Error");break}}this.staging.reset(),this.internalDepth=0,this.executeTickHooks(this.afterTickHooks),this.globalTick++}}collectTasks(e){let t=[];for(let s of this.staging.eventActive)(e.get(s.constructor)||[]).forEach(n=>{t.push(new B(n.fn,n.priority,s,{context:n.fn.systemContext,tick:this.globalTick,payload:{}},this.beforeExecuteHooks,this.afterExecuteHooks))});for(let[s,i]of this.staging.signalActive.entries())(e.get(s)||[]).forEach(c=>{t.push(new B(c.fn,c.priority,i,{context:c.fn.systemContext,tick:this.globalTick,payload:{}},this.beforeExecuteHooks,this.afterExecuteHooks))});return t}executeTasks(e){e.sort((t,s)=>s.priority-t.priority);for(let t of e){let s=Array.isArray(t.message)?t.message[0]:t.message;try{let i=t.execute();i instanceof Promise&&i.catch(n=>d.error(n,`[Virid Dispatcher]: Async System Error.
5
+ var ce=Object.defineProperty;var ge=(r,e,t)=>e in r?ce(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t;var o=(r,e)=>ce(r,"name",{value:e,configurable:!0});var a=(r,e,t)=>ge(r,typeof e!="symbol"?e+"":e,t);var z={maxDepth:100,enableLog:!0,manual:!1};var F=null;function le(r){F=r}o(le,"activateInstance");function me(r){F?F.dispatch(r):console.error("[Virid MessageWriter] No active instance found.")}o(me,"dispatch");var J=class J{static write(e,...t){let s=typeof e=="function"?new e(...t):e;me(s)}static error(e,t=""){this.write(new v(e,t))}static warn(e){this.write(new C(e))}static info(e){this.write(new T(e))}};o(J,"MessageWriter");var f=J;var Y=class Y{static send(...e){f.write(this,...e)}};o(Y,"BaseMessage");var w=Y,q=class q extends w{constructor(){super()}};o(q,"SingleMessage");var S=q,K=class K extends w{constructor(){super()}};o(K,"EventMessage");var A=K,Q=class Q extends A{constructor(t,s){super();a(this,"error");a(this,"context");this.error=t,this.context=s}};o(Q,"ErrorMessage");var v=Q,X=class X extends A{constructor(t){super();a(this,"context");this.context=t}};o(X,"WarnMessage");var C=X,Z=class Z extends A{constructor(t){super();a(this,"context");this.context=t}};o(Z,"InfoMessage");var T=Z;var ee=class ee{constructor(){a(this,"systemTaskMap",new Map)}register(e,t,s=0){let i=this.systemTaskMap.get(e)||[];if(i.findIndex(c=>c.fn.systemContext.originalMethod===t.systemContext.originalMethod)===-1)i.push({fn:t,priority:s}),i.sort((c,l)=>l.priority-c.priority),this.systemTaskMap.set(e,i);else{let c=t.methodName,l=t.targetClass;return f.error(new Error(`[Virid Error] System Already Registered: Message Class ${e.name}, Location ${l.name}.${c}`)),()=>{}}return()=>{let c=this.systemTaskMap.get(e);if(c){let l=c.findIndex(m=>m.fn===t);l!==-1&&(c.splice(l,1),c.length===0&&this.systemTaskMap.delete(e))}}}};o(ee,"MessageRegistry");var I=ee;var te=class te{constructor(){a(this,"signalActive",new Map);a(this,"eventActive",[]);a(this,"signalStaging",new Map);a(this,"eventStaging",[])}stage(e){if(e instanceof S){let t=e.constructor;this.signalStaging.has(t)||this.signalStaging.set(t,[]),this.signalStaging.get(t).push(e)}else e instanceof A?this.eventStaging.push(e):f.error(new Error(`[Virid Message] Invalid Message:
6
+ ${e.constructor.name} must extend SingleMessage or EventMessage`))}flip(){this.signalActive=this.signalStaging,this.eventActive=this.eventStaging,this.signalStaging=new Map,this.eventStaging=[]}clearSignals(){this.signalActive=new Map}clearEvents(){this.eventActive=[]}isEmpty(){return this.signalStaging.size===0&&this.eventStaging.length===0}reset(){this.signalActive=new Map,this.signalStaging=new Map,this.eventStaging=[],this.eventActive=[]}};o(te,"Staging");var N=te;var se=class se{constructor(e){a(this,"maxDepth");a(this,"isRunning",!1);a(this,"globalTick",0);a(this,"internalDepth",0);a(this,"staging",new N);a(this,"tickPayload",{});a(this,"beforeExecuteHooks",[]);a(this,"afterExecuteHooks",[]);a(this,"beforeTickHooks",[]);a(this,"afterTickHooks",[]);this.maxDepth=e}addBeforeExecute(e,t,s){s?this.beforeExecuteHooks.unshift({type:e,handler:t}):this.beforeExecuteHooks.push({type:e,handler:t})}addAfterExecute(e,t,s){s?this.afterExecuteHooks.unshift({type:e,handler:t}):this.afterExecuteHooks.push({type:e,handler:t})}addBeforeTick(e,t){t?this.beforeTickHooks.unshift(e):this.beforeTickHooks.push(e)}addAfterTick(e,t){t?this.afterTickHooks.unshift(e):this.afterTickHooks.push(e)}stage(e){this.staging.stage(e)}tick(e){if(!(this.isRunning||this.staging.isEmpty())){if(this.internalDepth>this.maxDepth){this.internalDepth=0,this.staging.reset(),console.error(new Error(`[Virid Dispatcher] Deadlock: Max depth reached ${this.maxDepth}, Possible infinite loop detected. The dispatcher will stop processing this tick.`));return}this.isRunning=!0,this.internalDepth++,queueMicrotask(()=>{try{this.internalDepth==1&&(this.tickPayload={},this.executeTickHooks(this.beforeTickHooks)),this.staging.flip();let t=this.collectTasks(e);this.executeTasks(t)}catch(t){f.error(t,"[Virid Dispatcher] Unhandled Error")}finally{this.isRunning=!1,this.staging.isEmpty()?(this.staging.reset(),this.internalDepth=0,this.executeTickHooks(this.afterTickHooks),this.globalTick++):this.tick(e)}})}}tickSync(e){if(!this.staging.isEmpty()){for(this.internalDepth=0,this.tickPayload={},this.executeTickHooks(this.beforeTickHooks);!this.staging.isEmpty();){if(this.internalDepth>this.maxDepth){this.staging.reset(),this.internalDepth=0,console.error(new Error(`[Virid Dispatcher] Deadlock: Max depth reached ${this.maxDepth}, Possible infinite loop detected. Ticking aborted.`));return}this.internalDepth++;try{this.staging.flip();let t=this.collectTasks(e);this.executeTasks(t)}catch(t){f.error(t,"[Virid Dispatcher] Sub-Tick Unhandled Error");break}}this.staging.reset(),this.internalDepth=0,this.executeTickHooks(this.afterTickHooks),this.globalTick++}}collectTasks(e){let t=[];for(let s of this.staging.eventActive)(e.get(s.constructor)||[]).forEach(n=>{t.push(new B(n.fn,n.priority,s,{context:n.fn.systemContext,tick:this.globalTick,payload:{}},this.beforeExecuteHooks,this.afterExecuteHooks))});for(let[s,i]of this.staging.signalActive.entries())(e.get(s)||[]).forEach(c=>{t.push(new B(c.fn,c.priority,i,{context:c.fn.systemContext,tick:this.globalTick,payload:{}},this.beforeExecuteHooks,this.afterExecuteHooks))});return t}executeTasks(e){e.sort((t,s)=>s.priority-t.priority);for(let t of e){let s=Array.isArray(t.message)?t.message[0]:t.message;try{let i=t.execute();i instanceof Promise&&i.catch(n=>f.error(n,`[Virid Dispatcher]: Async System Error.
7
7
  SystemLocation: ${t.hookContext.context.targetClass.name}.${t.hookContext.context.methodName}
8
8
  MessageName: ${s.constructor.name}
9
- MessageData: ${JSON.stringify(t.message)}`))}catch(i){d.error(i,`[Virid Dispatcher]: Sync System Error.
9
+ MessageData: ${JSON.stringify(t.message)}`))}catch(i){f.error(i,`[Virid Dispatcher]: Sync System Error.
10
10
  SystemLocation: ${t.hookContext.context.targetClass.name}.${t.hookContext.context.methodName}
11
11
  MessageName: ${s.constructor.name}
12
- MessageData: ${JSON.stringify(t.message)}`)}}}executeTickHooks(e){let t={tick:this.globalTick,timestamp:Date.now(),payload:this.tickPayload};e.forEach(s=>s(t))}};o(se,"Dispatcher");var _=se,re=class re{constructor(e,t,s,i,n,c){a(this,"fn");a(this,"priority");a(this,"message");a(this,"hookContext");a(this,"beforeExecuteHooks");a(this,"afterExecuteHooks");a(this,"success",!0);this.fn=e,this.priority=t,this.message=s,this.hookContext=i,this.beforeExecuteHooks=n,this.afterExecuteHooks=c}triggerHooks(e){let t=Array.isArray(this.message)?this.message[0]:this.message;if(t){for(let s of e)if(t instanceof s.type)try{let i=s.handler(this.message,this.hookContext,this.success);i instanceof Promise&&i.catch(n=>{d.error(n,`[Virid Hook] Async Hook Error: It is prohibited to use asynchronous hooks within Hook: ${s.type.name}`)})}catch(i){d.error(i,`[Virid Hook] Hook Execute Failed: Triggered by: ${t.constructor.name}, Registered type: ${s.type.name}`)}}}execute(){this.triggerHooks(this.beforeExecuteHooks);let e=o(()=>this.triggerHooks(this.afterExecuteHooks),"runAfter");try{let t=this.fn(this.message);return t instanceof Promise?t.catch(()=>this.success=!1).finally(e):(e(),t)}catch(t){throw this.success=!1,e(),t}}};o(re,"ExecutionTask");var B=re;var oe=class oe{constructor(e,t){a(this,"dispatcher");a(this,"registry",new I);a(this,"middlewares",[]);a(this,"manual");this.dispatcher=new _(e),this.manual=t,le(this)}useMiddleware(e,t){this.middlewares.push(e)}onBeforeExecute(e,t,s){this.dispatcher.addBeforeExecute(e,t,s)}onAfterExecute(e,t,s){this.dispatcher.addAfterExecute(e,t,s)}onBeforeTick(e,t){this.dispatcher.addBeforeTick(e,t)}onAfterTick(e,t){this.dispatcher.addAfterTick(e,t)}tick(){this.dispatcher.tickSync(this.registry.systemTaskMap)}dispatch(e){if(!(e instanceof w)){d.error(new Error(`[Virid Dispatch] Type Error: Message must be an instance of BaseMessage,message:${e}`));return}this.pipeline(e,()=>{if(!this.registry.systemTaskMap.has(e.constructor)){d.error(new Error(`[Virid Dispatch] No handler for message: ${e.constructor.name}`));return}this.dispatcher.stage(e),this.manual||this.dispatcher.tick(this.registry.systemTaskMap)})}pipeline(e,t){let s=0,i=o(()=>{s<this.middlewares.length?this.middlewares[s++](e,i):t()},"next");i()}register(e,t,s=0){return this.registry.register(e,t,s)}};o(oe,"MessageEngine");var P=oe;var y={SYSTEM:"virid:core:system",MESSAGE:"virid:core:message",CONTROLLER:"virid:core:controller",COMPONENT:"virid:core:component",SAFE:"virid:core:safe",OBSERVER:"virid:core:observer"};function R(r){if(!r)return;(Array.isArray(r)?r:[r]).forEach(t=>{t instanceof w?d.write(t):d.warn("[Virid HandleResult] Invalid Return Type: Must return Message or Message[].")})}o(R,"handleResult");function ue(r){let e=[];if(r.forEach((t,s)=>{(t===w||t&&t.prototype instanceof w)&&e.push({type:t,idx:s})}),e.length===0)return null;if(e.length>1){let t=e.map(s=>`[Index: ${s.idx}, Name: ${s.type.name}]`).join(", ");throw new Error(`[Virid System] Multiple Messages: Multiple Message type parameters detected, this is not allowed! specific location: ${t}`)}return e[0]}o(ue,"checkMessageParam");function j(r={messageClass:null,priority:0}){return(e,t,s)=>{if(typeof e!="function")throw new Error(`[Virid System] Method Type Error: The Method ${t} is not a static method, please check if there is a static keyword tag.`);let i=s.value,n=Reflect.getMetadata("design:paramtypes",e,t);if(!n)throw new Error('[Virid System] System Parameter Loss: Unable to recognize system parameters, please confirm if import "reflect-metadata" was introduced at the beginning.');let c=n.map((g,A)=>g===void 0?A:-1).filter(g=>g!==-1);if(c.length>0)throw new Error(`[Virid System] Parameter Metadata Loss in "${t}": One or more parameters have 'undefined' types. This usually happens when you forget to add a type annotation or due to circular dependencies. Check parameter at indices: [${c.join(", ")}]`);let l,m=-1,u=!1,x=n.indexOf(Array);if(x!==-1){if(!r.messageClass)throw new Error("[Virid System] System Parameter Loss: When using batch processing mode with Array, the messageClass parameter must be specified in decorator options.");if(!(r.messageClass.prototype instanceof S))throw new Error("[Virid System] System Parameter Loss: When using the batch processing mode, the messageClass parameter must inherit from SingleMessage.");l=r.messageClass,m=x,u=!0}else{let g=ue(n);if(g&&r.messageClass)throw new Error(`[Virid System] Multiple Messages Are Not Allowed: Cannot specify messageClass in decorator options while already declaring it in method parameters at index ${g.idx} in ${t}.`);if(g)l=g.type,m=g.idx;else if(r.messageClass)l=r.messageClass,m=-1;else throw new Error("[Virid System] System Parameter Loss: Please declare the message type either in method parameters or via the Message decorator options.")}let E={params:n,targetClass:e,methodName:t,originalMethod:i},b={messageClass:l,messageIdx:m,priority:r.priority||0,batchMode:u};s.value.systemContext=E,s.value.systemConfig=b}}o(j,"System");function st(){return(r,e,t)=>{let s=Reflect.getMetadata(y.SAFE,r)||new Set;s.add(e),Reflect.defineMetadata(y.SAFE,s,r)}}o(st,"Safe");function rt(r){return(e,t)=>{let s=Reflect.getMetadata(y.OBSERVER,e)||[];s.push({propertyKey:t,callback:r}),Reflect.defineMetadata(y.OBSERVER,s,e)}}o(rt,"Observer");function ot(){return r=>{Reflect.defineMetadata(y.CONTROLLER,!0,r)}}o(ot,"Controller");function he(){return r=>{Reflect.defineMetadata(y.COMPONENT,!0,r)}}o(he,"Component");var ye=["push","pop","shift","unshift","splice","sort","reverse"];function L(r){return!r||typeof r!="object"||Object.prototype.hasOwnProperty.call(r,"__virid_observer_processed__")||(Object.defineProperty(r,"__virid_observer_processed__",{value:!0,enumerable:!1,configurable:!0}),(Reflect.getMetadata(y.OBSERVER,r)||[]).forEach(({propertyKey:t,callback:s})=>{let i={value:r[t]},n=new Proxy(i,{get(l,m){let u=l.value;return Array.isArray(u)&&ye.includes(m)?(...x)=>{let E=[...u],b=u[m].apply(u,x),g=s.call(r,E,u);return R(g),b}:u},set(l,m,u){let x=l.value;if(u===x)return!0;l.value=u;let E=s.call(r,x,u);return R(E),!0}}),c=o(()=>n.value,"getter");c.__virid_box__=i,Object.defineProperty(r,t,{get:c,set:o(l=>{n.value=l},"set"),enumerable:!0,configurable:!0}),i.value&&typeof i.value=="object"&&L(i.value)}),Reflect.ownKeys(r).forEach(t=>{if(t==="__virid_observer_processed__")return;let s=Object.getOwnPropertyDescriptor(r,t);if(s&&s.get)return;let i=r[t];i&&typeof i=="object"&&L(i)})),r}o(L,"bindObservers");var ie=class ie{constructor(){a(this,"bindings",new Map);a(this,"singletonInstances",new Map);a(this,"activationHooks",[])}addActivationHook(e,t){t?this.activationHooks.unshift(e):this.activationHooks.push(e)}bind(e){if(e.length>0)throw new Error(`[Virid Container] Cannot Bind Component Or Controller: The Class ${e.name} should not have mandatory parameters.`);if(Reflect.getMetadata(y.COMPONENT,e)){let t={type:"singleton",ctor:e};this.bindings.set(e,t)}else if(Reflect.getMetadata(y.CONTROLLER,e)){let t={type:"transient",ctor:e};this.bindings.set(e,t)}else throw new Error(`[Virid Container] Cannot Bind Component Or Controller: The Class ${e.name} is not decorated with @Component or @Controller`)}spawn(e){let t=e.constructor;if(Reflect.hasMetadata(y.COMPONENT,t)){let s={type:"singleton",ctor:t};this.bindings.set(t,s),this.singletonInstances.set(t,e)}else throw new Error(`[Virid Container] Cannot spawn Component: The Class ${t.name} is not decorated with @Component`)}get(e){let t=this.bindings.get(e);if(!t)throw new Error(`[Virid Container] Cannot Get Component Or Controller: No binding found for ${e}`);let s=t.ctor;if(t.type==="singleton"){if(!this.singletonInstances.has(e)){let n=new s,c=this.handleActivation(n);this.singletonInstances.set(e,c)}return this.singletonInstances.get(e)}let i=new s;return this.handleActivation(i)}handleActivation(e){for(let t of this.activationHooks)e=t(e);return e}};o(ie,"ViridContainer");var W=ie;function xe(r,e,t,s){var i=arguments.length,n=i<3?e:s===null?s=Object.getOwnPropertyDescriptor(e,t):s,c;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")n=Reflect.decorate(r,e,t,s);else for(var l=r.length-1;l>=0;l--)(c=r[l])&&(n=(i<3?c(n):i>3?c(e,t,n):c(e,t))||n);return i>3&&n&&Object.defineProperty(e,t,n),n}o(xe,"_ts_decorate");function fe(r,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(r,e)}o(fe,"_ts_metadata");var ne=class ne{constructor(e,t){a(this,"container",new W);a(this,"engine");a(this,"installedPlugins",new Set);this.engine=new P(e,t),this.container.spawn(this)}onActivate(e,t=!1){this.container.addActivationHook(e,t)}tick(){this.engine.tick()}get(e){return this.container.get(e)}bind(e){this.container.bind(e)}spawn(e){this.container.spawn(e)}useMiddleware(e,t=!1){this.engine.useMiddleware(e,t)}onBeforeExecute(e,t,s=!1){this.engine.onBeforeExecute(e,t,s)}onAfterExecute(e,t,s=!1){this.engine.onAfterExecute(e,t,s)}onBeforeTick(e,t=!1){this.engine.onBeforeTick(e,t)}onAfterTick(e,t=!1){this.engine.onAfterTick(e,t)}use(e,t){if(this.installedPlugins.has(e.name))return d.warn(`[Virid Plugin] Duplicate Installation: Plugin ${e.name} has already been installed.`),this;try{e.install(this,t),this.installedPlugins.add(e.name)}catch(s){d.error(s,`[Virid Plugin]: Install Failed: ${e.name}`)}return this}register(e){let t=e.systemContext,s=e.systemConfig;if(!t||!s)throw new Error(`[Virid System] System Parameter Loss: Please declare ${e.name} using the @System decorator first.`);let{params:i,targetClass:n,originalMethod:c}=t,{messageClass:l,messageIdx:m,priority:u,batchMode:x}=s,E=typeof R=="function"?R:h=>h,b=o(h=>h instanceof Promise?h.then(E):E(h),"processResult"),g=new Array(i.length),A=!1,U=o(()=>{for(let h=0;h<i.length;h++)if(h!==m){let p=this.get(i[h]);if(!p)throw new Error(`[Virid System] Unknown Inject Data Types: ${i[h].name||i[h]} is not registered in the container for system '${e.name}'!`);g[h]=p}A=!0},"initDeps"),M;return m===-1?M=o(()=>(A||U(),b(c.apply(n,g))),"wrappedSystem"):i.length===1?x?M=o(h=>{let p=Array.isArray(h)?h:[h];if(p.length>0&&!(p[0]instanceof l))throw new Error(`[Virid System] Type Mismatch: Expected list of ${l.name}, but got ${p[0]?.constructor?.name}`);return b(c.call(n,p))},"wrappedSystem"):M=o(h=>{let p=Array.isArray(h)?h[h.length-1]:h;if(!(p instanceof l))throw new Error(`[Virid System] Type Mismatch: Expected ${l.name}, but got ${p?.constructor?.name}`);return b(c.call(n,p))},"wrappedSystem"):x?M=o(h=>{A||U();let p=Array.isArray(h)?h:[h];if(p.length>0&&!(p[0]instanceof l))throw new Error(`[Virid System] Type Mismatch: Expected list of ${l.name}, but got ${p[0]?.constructor?.name}`);let O=[...g];return O[m]=p,b(c.apply(n,O))},"wrappedSystem"):M=o(h=>{A||U();let p=Array.isArray(h)?h[h.length-1]:h;if(!(p instanceof l))throw new Error(`[Virid System] Type Mismatch: Expected ${l.name}, but got ${p?.constructor?.name}`);let O=[...g];return O[m]=p,b(c.apply(n,O))},"wrappedSystem"),M.systemContext=t,this.engine.register(l,M,u)}};o(ne,"ViridApp");var H=ne;H=xe([he(),fe("design:type",Function),fe("design:paramtypes",[Number,Boolean])],H);function ae(r,e,t,s){var i=arguments.length,n=i<3?e:s===null?s=Object.getOwnPropertyDescriptor(e,t):s,c;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")n=Reflect.decorate(r,e,t,s);else for(var l=r.length-1;l>=0;l--)(c=r[l])&&(n=(i<3?c(n):i>3?c(e,t,n):c(e,t))||n);return i>3&&n&&Object.defineProperty(e,t,n),n}o(ae,"_ts_decorate");function k(r,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(r,e)}o(k,"_ts_metadata");var G=!0;function de(r){G=r}o(de,"toggleSwitch");var f={reset:"\x1B[0m",red:"\x1B[31m",yellow:"\x1B[33m",blue:"\x1B[34m",magenta:"\x1B[35m",cyan:"\x1B[36m",gray:"\x1B[90m",bold:"\x1B[1m",green:"\x1B[32m"},V,D=(V=class{static globalInfoHandler(e){if(!G)return;let t=`${f.green}${f.bold} \u2714 [Virid Info] ${f.reset}`,s=`${f.magenta} ${e.context} ${f.reset}`;console.log(`${t}${f.gray} Global Info Caught: ${f.reset}
13
- ${f.green} Details: ${f.reset}`,s||"unknown Info")}static globalErrorHandler(e){if(!G)return;let t=`${f.red}${f.bold} \u2716 [Virid Error] ${f.reset}`,s=`${f.magenta} ${e.context} ${f.reset}`;console.error(`${t}${f.gray} Global Error Caught: ${f.reset}
14
- ${f.red} Context: ${f.reset} ${s}
15
- ${f.red} Details: ${f.reset}`,e.error||e||"unknown Error")}static globalWarnHandler(e){if(!G)return;let t=`${f.yellow}${f.bold} \u26A0 [Virid Warn] ${f.reset}`,s=`${f.cyan} ${e.context} ${f.reset}`;console.warn(`${t}${f.gray} Global Warn Caught: ${f.reset}
16
- ${f.yellow} Context:${f.reset} ${s}`)}},o(V,"ViridLogHandler"),V);ae([j(),k("design:type",Function),k("design:paramtypes",[typeof C>"u"?Object:C]),k("design:returntype",void 0)],D,"globalInfoHandler",null);ae([j(),k("design:type",Function),k("design:paramtypes",[typeof v>"u"?Object:v]),k("design:returntype",void 0)],D,"globalErrorHandler",null);ae([j(),k("design:type",Function),k("design:paramtypes",[typeof $>"u"?Object:$]),k("design:returntype",void 0)],D,"globalWarnHandler",null);function pe(r){r.register(D.globalInfoHandler),r.register(D.globalErrorHandler),r.register(D.globalWarnHandler)}o(pe,"registerBasicSystems");function Ht(r=z){r={...z,...r};let e=new H(r.maxDepth,r.manual);pe(e),de(r.enableLog),e.onActivate(L);let t=e;return e.spawn(t),e}o(Ht,"createVirid");export{w as BaseMessage,he as Component,ot as Controller,v as ErrorMessage,T as EventMessage,C as InfoMessage,P as MessageEngine,I as MessageRegistry,d as MessageWriter,rt as Observer,st as Safe,S as SingleMessage,j as System,y as VIRID_METADATA,H as ViridApp,$ as WarnMessage,le as activateInstance,L as bindObservers,Ht as createVirid,z as defaultConfig,R as handleResult};
12
+ MessageData: ${JSON.stringify(t.message)}`)}}}executeTickHooks(e){let t={tick:this.globalTick,timestamp:Date.now(),payload:this.tickPayload};e.forEach(s=>s(t))}};o(se,"Dispatcher");var _=se,re=class re{constructor(e,t,s,i,n,c){a(this,"fn");a(this,"priority");a(this,"message");a(this,"hookContext");a(this,"beforeExecuteHooks");a(this,"afterExecuteHooks");a(this,"success",!0);this.fn=e,this.priority=t,this.message=s,this.hookContext=i,this.beforeExecuteHooks=n,this.afterExecuteHooks=c}triggerHooks(e){let t=Array.isArray(this.message)?this.message[0]:this.message;if(t){for(let s of e)if(t instanceof s.type)try{let i=s.handler(this.message,this.hookContext,this.success);i instanceof Promise&&i.catch(n=>{f.error(n,`[Virid Hook] Async Hook Error: It is prohibited to use asynchronous hooks within Hook: ${s.type.name}`)})}catch(i){f.error(i,`[Virid Hook] Hook Execute Failed: Triggered by: ${t.constructor.name}, Registered type: ${s.type.name}`)}}}execute(){this.triggerHooks(this.beforeExecuteHooks);let e=o(()=>this.triggerHooks(this.afterExecuteHooks),"runAfter");try{let t=this.fn(this.message);return t instanceof Promise?t.catch(()=>this.success=!1).finally(e):(e(),t)}catch(t){throw this.success=!1,e(),t}}};o(re,"ExecutionTask");var B=re;var oe=class oe{constructor(e,t){a(this,"dispatcher");a(this,"registry",new I);a(this,"middlewares",[]);a(this,"manual");this.dispatcher=new _(e),this.manual=t,le(this)}useMiddleware(e,t){this.middlewares.push(e)}onBeforeExecute(e,t,s){this.dispatcher.addBeforeExecute(e,t,s)}onAfterExecute(e,t,s){this.dispatcher.addAfterExecute(e,t,s)}onBeforeTick(e,t){this.dispatcher.addBeforeTick(e,t)}onAfterTick(e,t){this.dispatcher.addAfterTick(e,t)}tick(){this.dispatcher.tickSync(this.registry.systemTaskMap)}dispatch(e){if(!(e instanceof w)){f.error(new Error(`[Virid Dispatch] Type Error: Message must be an instance of BaseMessage,message:${e}`));return}this.pipeline(e,()=>{if(!this.registry.systemTaskMap.has(e.constructor)){f.error(new Error(`[Virid Dispatch] No handler for message: ${e.constructor.name}`));return}this.dispatcher.stage(e),this.manual||this.dispatcher.tick(this.registry.systemTaskMap)})}pipeline(e,t){let s=0,i=o(()=>{s<this.middlewares.length?this.middlewares[s++](e,i):t()},"next");i()}register(e,t,s=0){return this.registry.register(e,t,s)}};o(oe,"MessageEngine");var P=oe;var y={SYSTEM:"virid:core:system",MESSAGE:"virid:core:message",CONTROLLER:"virid:core:controller",COMPONENT:"virid:core:component",SAFE:"virid:core:safe",OBSERVER:"virid:core:observer"};function R(r){if(!r)return;(Array.isArray(r)?r:[r]).forEach(t=>{t instanceof w?f.write(t):f.warn("[Virid HandleResult] Invalid Return Type: Must return Message or Message[].")})}o(R,"handleResult");function ue(r){let e=[];if(r.forEach((t,s)=>{(t===w||t&&t.prototype instanceof w)&&e.push({type:t,idx:s})}),e.length===0)return null;if(e.length>1){let t=e.map(s=>`[Index: ${s.idx}, Name: ${s.type.name}]`).join(", ");throw new Error(`[Virid System] Multiple Messages: Multiple Message type parameters detected, this is not allowed! specific location: ${t}`)}return e[0]}o(ue,"checkMessageParam");function j(r={messageClass:null,priority:0}){return(e,t,s)=>{if(typeof e!="function")throw new Error(`[Virid System] Method Type Error: The Method ${t} is not a static method, please check if there is a static keyword tag.`);let i=s.value,n=Reflect.getMetadata("design:paramtypes",e,t);if(!n)throw new Error('[Virid System] System Parameter Loss: Unable to recognize system parameters, please confirm if import "reflect-metadata" was introduced at the beginning.');let c=n.map((g,$)=>g===void 0?$:-1).filter(g=>g!==-1);if(c.length>0)throw new Error(`[Virid System] Parameter Metadata Loss in "${t}": One or more parameters have 'undefined' types. This usually happens when you forget to add a type annotation or due to circular dependencies. Check parameter at indices: [${c.join(", ")}]`);let l,m=-1,u=!1,x=n.indexOf(Array);if(x!==-1){if(!r.messageClass)throw new Error("[Virid System] System Parameter Loss: When using batch processing mode with Array, the messageClass parameter must be specified in decorator options.");if(!(r.messageClass.prototype instanceof S))throw new Error("[Virid System] System Parameter Loss: When using the batch processing mode, the messageClass parameter must inherit from SingleMessage.");l=r.messageClass,m=x,u=!0}else{let g=ue(n);if(g&&r.messageClass)throw new Error(`[Virid System] Multiple Messages Are Not Allowed: Cannot specify messageClass in decorator options while already declaring it in method parameters at index ${g.idx} in ${t}.`);if(g)l=g.type,m=g.idx;else if(r.messageClass)l=r.messageClass,m=-1;else throw new Error("[Virid System] System Parameter Loss: Please declare the message type either in method parameters or via the Message decorator options.")}let E={params:n,targetClass:e,methodName:t,originalMethod:i},b={messageClass:l,messageIdx:m,priority:r.priority||0,batchMode:u};s.value.systemContext=E,s.value.systemConfig=b}}o(j,"System");function st(){return(r,e,t)=>{let s=Reflect.getMetadata(y.SAFE,r)||new Set;s.add(e),Reflect.defineMetadata(y.SAFE,s,r)}}o(st,"Safe");function rt(r){return(e,t)=>{let s=Reflect.getMetadata(y.OBSERVER,e)||[];s.push({propertyKey:t,callback:r}),Reflect.defineMetadata(y.OBSERVER,s,e)}}o(rt,"Observer");function ot(){return r=>{Reflect.defineMetadata(y.CONTROLLER,!0,r)}}o(ot,"Controller");function he(){return r=>{Reflect.defineMetadata(y.COMPONENT,!0,r)}}o(he,"Component");var ye=["push","pop","shift","unshift","splice","sort","reverse"];function L(r){return!r||typeof r!="object"||Object.prototype.hasOwnProperty.call(r,"__virid_observer_processed__")||(Object.defineProperty(r,"__virid_observer_processed__",{value:!0,enumerable:!1,configurable:!0}),(Reflect.getMetadata(y.OBSERVER,r)||[]).forEach(({propertyKey:t,callback:s})=>{let i={value:r[t]},n=new Proxy(i,{get(l,m){let u=l.value;return Array.isArray(u)&&ye.includes(m)?(...x)=>{let E=[...u],b=u[m].apply(u,x),g=s.call(r,E,u);return R(g),b}:u},set(l,m,u){let x=l.value;if(u===x)return!0;l.value=u;let E=s.call(r,x,u);return R(E),!0}}),c=o(()=>n.value,"getter");c.__virid_box__=i,Object.defineProperty(r,t,{get:c,set:o(l=>{n.value=l},"set"),enumerable:!0,configurable:!0}),i.value&&typeof i.value=="object"&&L(i.value)}),Reflect.ownKeys(r).forEach(t=>{if(t==="__virid_observer_processed__")return;let s=Object.getOwnPropertyDescriptor(r,t);if(s&&s.get)return;let i=r[t];i&&typeof i=="object"&&L(i)})),r}o(L,"bindObservers");var ie=class ie{constructor(){a(this,"bindings",new Map);a(this,"singletonInstances",new Map);a(this,"activationHooks",[])}addActivationHook(e,t){t?this.activationHooks.unshift(e):this.activationHooks.push(e)}bind(e){if(e.length>0)throw new Error(`[Virid Container] Cannot Bind Component Or Controller: The Class ${e.name} should not have mandatory parameters.`);if(Reflect.getMetadata(y.COMPONENT,e)){let t={type:"singleton",ctor:e};this.bindings.set(e,t)}else if(Reflect.getMetadata(y.CONTROLLER,e)){let t={type:"transient",ctor:e};this.bindings.set(e,t)}else throw new Error(`[Virid Container] Cannot Bind Component Or Controller: The Class ${e.name} is not decorated with @Component or @Controller`)}spawn(e){let t=e.constructor;if(Reflect.hasMetadata(y.COMPONENT,t)){let s={type:"singleton",ctor:t};this.bindings.set(t,s),this.singletonInstances.set(t,e)}else throw new Error(`[Virid Container] Cannot spawn Component: The Class ${t.name} is not decorated with @Component`)}get(e){let t=this.bindings.get(e);if(!t)throw new Error(`[Virid Container] Cannot Get Component Or Controller: No binding found for ${e}`);let s=t.ctor;if(t.type==="singleton"){if(!this.singletonInstances.has(e)){let n=new s,c=this.handleActivation(n);this.singletonInstances.set(e,c)}return this.singletonInstances.get(e)}let i=new s;return this.handleActivation(i)}handleActivation(e){for(let t of this.activationHooks)e=t(e);return e}};o(ie,"ViridContainer");var W=ie;function xe(r,e,t,s){var i=arguments.length,n=i<3?e:s===null?s=Object.getOwnPropertyDescriptor(e,t):s,c;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")n=Reflect.decorate(r,e,t,s);else for(var l=r.length-1;l>=0;l--)(c=r[l])&&(n=(i<3?c(n):i>3?c(e,t,n):c(e,t))||n);return i>3&&n&&Object.defineProperty(e,t,n),n}o(xe,"_ts_decorate");function fe(r,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(r,e)}o(fe,"_ts_metadata");var ne=class ne{constructor(e,t){a(this,"container",new W);a(this,"engine");a(this,"installedPlugins",new Set);this.engine=new P(e,t),this.container.spawn(this)}onActivate(e,t=!1){this.container.addActivationHook(e,t)}tick(){this.engine.tick()}get(e){return this.container.get(e)}bind(e){this.container.bind(e)}spawn(e){this.container.spawn(e)}useMiddleware(e,t=!1){this.engine.useMiddleware(e,t)}onBeforeExecute(e,t,s=!1){this.engine.onBeforeExecute(e,t,s)}onAfterExecute(e,t,s=!1){this.engine.onAfterExecute(e,t,s)}onBeforeTick(e,t=!1){this.engine.onBeforeTick(e,t)}onAfterTick(e,t=!1){this.engine.onAfterTick(e,t)}use(e,t){if(this.installedPlugins.has(e.name))return f.warn(`[Virid Plugin] Duplicate Installation: Plugin ${e.name} has already been installed.`),this;try{e.install(this,t),this.installedPlugins.add(e.name)}catch(s){f.error(s,`[Virid Plugin]: Install Failed: ${e.name}`)}return this}register(e){let t=e.systemContext,s=e.systemConfig;if(!t||!s)throw new Error(`[Virid System] System Parameter Loss: Please declare ${e.name} using the @System decorator first.`);let{params:i,targetClass:n,originalMethod:c}=t,{messageClass:l,messageIdx:m,priority:u,batchMode:x}=s,E=typeof R=="function"?R:h=>h,b=o(h=>h instanceof Promise?h.then(E):E(h),"processResult"),g=new Array(i.length),$=!1,U=o(()=>{for(let h=0;h<i.length;h++)if(h!==m){let p=this.get(i[h]);if(!p)throw new Error(`[Virid System] Unknown Inject Data Types: ${i[h].name||i[h]} is not registered in the container for system '${e.name}'!`);g[h]=p}$=!0},"initDeps"),M;return m===-1?M=o(()=>($||U(),b(c.apply(n,g))),"wrappedSystem"):i.length===1?x?M=o(h=>{let p=Array.isArray(h)?h:[h];if(p.length>0&&!(p[0]instanceof l))throw new Error(`[Virid System] Type Mismatch: Expected list of ${l.name}, but got ${p[0]?.constructor?.name}`);return b(c.call(n,p))},"wrappedSystem"):M=o(h=>{let p=Array.isArray(h)?h[h.length-1]:h;if(!(p instanceof l))throw new Error(`[Virid System] Type Mismatch: Expected ${l.name}, but got ${p?.constructor?.name}`);return b(c.call(n,p))},"wrappedSystem"):x?M=o(h=>{$||U();let p=Array.isArray(h)?h:[h];if(p.length>0&&!(p[0]instanceof l))throw new Error(`[Virid System] Type Mismatch: Expected list of ${l.name}, but got ${p[0]?.constructor?.name}`);let O=[...g];return O[m]=p,b(c.apply(n,O))},"wrappedSystem"):M=o(h=>{$||U();let p=Array.isArray(h)?h[h.length-1]:h;if(!(p instanceof l))throw new Error(`[Virid System] Type Mismatch: Expected ${l.name}, but got ${p?.constructor?.name}`);let O=[...g];return O[m]=p,b(c.apply(n,O))},"wrappedSystem"),M.systemContext=t,this.engine.register(l,M,u)}};o(ne,"ViridApp");var H=ne;H=xe([he(),fe("design:type",Function),fe("design:paramtypes",[Number,Boolean])],H);function ae(r,e,t,s){var i=arguments.length,n=i<3?e:s===null?s=Object.getOwnPropertyDescriptor(e,t):s,c;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")n=Reflect.decorate(r,e,t,s);else for(var l=r.length-1;l>=0;l--)(c=r[l])&&(n=(i<3?c(n):i>3?c(e,t,n):c(e,t))||n);return i>3&&n&&Object.defineProperty(e,t,n),n}o(ae,"_ts_decorate");function k(r,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(r,e)}o(k,"_ts_metadata");var G=!0;function de(r){G=r}o(de,"toggleSwitch");var d={reset:"\x1B[0m",red:"\x1B[31m",yellow:"\x1B[33m",blue:"\x1B[34m",magenta:"\x1B[35m",cyan:"\x1B[36m",gray:"\x1B[90m",bold:"\x1B[1m",green:"\x1B[32m"},V,D=(V=class{static globalInfoHandler(e){if(!G)return;let t=`${d.green}${d.bold} \u2714 [Virid Info] ${d.reset}`;console.log(`${t}${d.gray} Global Info Caught: ${d.reset}
13
+ ${d.green} Details: ${d.reset}`,e.context||"unknown Info")}static globalErrorHandler(e){if(!G)return;let t=`${d.red}${d.bold} \u2716 [Virid Error] ${d.reset}`;console.error(`${t}${d.gray} Global Error Caught: ${d.reset}
14
+ ${d.red} Context: ${d.reset} ${e.context}
15
+ ${d.red} Details: ${d.reset}`,e.error||e||"unknown Error")}static globalWarnHandler(e){if(!G)return;let t=`${d.yellow}${d.bold} \u26A0 [Virid Warn] ${d.reset}`;console.warn(`${t}${d.gray} Global Warn Caught: ${d.reset}
16
+ ${d.yellow} Context:${d.reset} ${e.context}`)}},o(V,"ViridLogHandler"),V);ae([j(),k("design:type",Function),k("design:paramtypes",[typeof T>"u"?Object:T]),k("design:returntype",void 0)],D,"globalInfoHandler",null);ae([j(),k("design:type",Function),k("design:paramtypes",[typeof v>"u"?Object:v]),k("design:returntype",void 0)],D,"globalErrorHandler",null);ae([j(),k("design:type",Function),k("design:paramtypes",[typeof C>"u"?Object:C]),k("design:returntype",void 0)],D,"globalWarnHandler",null);function pe(r){r.register(D.globalInfoHandler),r.register(D.globalErrorHandler),r.register(D.globalWarnHandler)}o(pe,"registerBasicSystems");function Ht(r=z){r={...z,...r};let e=new H(r.maxDepth,r.manual);pe(e),de(r.enableLog),e.onActivate(L);let t=e;return e.spawn(t),e}o(Ht,"createVirid");export{w as BaseMessage,he as Component,ot as Controller,v as ErrorMessage,A as EventMessage,T as InfoMessage,P as MessageEngine,I as MessageRegistry,f as MessageWriter,rt as Observer,st as Safe,S as SingleMessage,j as System,y as VIRID_METADATA,H as ViridApp,C as WarnMessage,le as activateInstance,L as bindObservers,Ht as createVirid,z as defaultConfig,R as handleResult};
17
17
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/interfaces/common.ts","../src/core/io.ts","../src/core/message.ts","../src/core/registry.ts","../src/core/staging.ts","../src/core/dispatcher.ts","../src/core/engine.ts","../src/decorators/constant.ts","../src/decorators/decorator.ts","../src/decorators/bind.ts","../src/container.ts","../src/app.ts","../src/utils.ts","../src/index.ts"],"sourcesContent":["/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Core\n */\nexport type Newable<\n TInstance = unknown,\n TArgs extends unknown[] = any[],\n> = new (...args: TArgs) => TInstance;\n\nexport interface AppConfig {\n maxDepth?: number;\n enableLog?: boolean;\n manual?: boolean;\n}\n\nconst defaultConfig: AppConfig = {\n maxDepth: 100,\n enableLog: true,\n manual: false,\n};\nexport { defaultConfig };\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Core\n */\nimport { type MessageEngine } from \"./engine\";\nimport {\n type BaseMessage,\n ErrorMessage,\n InfoMessage,\n WarnMessage,\n} from \"./message\";\nimport { type Newable } from \"../interfaces\";\n\nlet activeInstance: MessageEngine | null = null;\nexport function activateInstance(instance: MessageEngine) {\n activeInstance = instance;\n}\n\nfunction dispatch(message: BaseMessage): void {\n if (activeInstance) {\n activeInstance.dispatch(message);\n } else {\n console.error(\"[Virid MessageWriter] No active instance found.\");\n }\n}\n\nexport class MessageWriter {\n public static write<T extends BaseMessage, K extends Newable<T>>(\n target: K | T,\n ...args: ConstructorParameters<K>\n ): void {\n const instance =\n typeof target === \"function\"\n ? new (target as any)(...args)\n : (target as T);\n\n dispatch(instance);\n }\n\n public static error(e: Error, context: string = \"\"): void {\n this.write(new ErrorMessage(e, context));\n }\n\n public static warn(context: string): void {\n this.write(new WarnMessage(context));\n }\n public static info(context: string): void {\n this.write(new InfoMessage(context));\n }\n}\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Core\n */\nimport { Newable } from \"../interfaces\";\nimport { MessageWriter } from \"./io\";\n\nexport abstract class BaseMessage {\n static send<T extends Newable<any>>(\n this: T,\n ...args: ConstructorParameters<T>\n ) {\n MessageWriter.write(this as any, ...args);\n }\n}\n\nexport abstract class SingleMessage extends BaseMessage {\n constructor() {\n super();\n }\n}\n\nexport abstract class EventMessage extends BaseMessage {\n constructor() {\n super();\n }\n}\n\nexport class ErrorMessage extends EventMessage {\n constructor(\n public readonly error: Error,\n public readonly context?: string,\n ) {\n super();\n }\n}\n\nexport class WarnMessage extends EventMessage {\n constructor(public readonly context: string) {\n super();\n }\n}\n\nexport class InfoMessage extends EventMessage {\n constructor(public readonly context: string) {\n super();\n }\n}\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Core\n */\nimport { type SystemTask } from \"../interfaces\";\nimport { MessageWriter } from \"./io\";\n\nexport class MessageRegistry {\n systemTaskMap = new Map<any, SystemTask[]>();\n\n /**\n * Register the message and corresponding system and return an uninstallation function\n */\n register(\n messageClass: any,\n systemFn: (...args: any[]) => any,\n priority: number = 0,\n ): () => void {\n const systems = this.systemTaskMap.get(messageClass) || [];\n const existingIndex = systems.findIndex(\n (s) =>\n (s.fn as any).systemContext.originalMethod ===\n (systemFn as any).systemContext.originalMethod,\n );\n if (existingIndex === -1) {\n systems.push({ fn: systemFn, priority });\n systems.sort((a, b) => b.priority - a.priority);\n this.systemTaskMap.set(messageClass, systems);\n } else {\n // Check for duplicate registrations\n const funcName = (systemFn as any).methodName;\n const targetClass = (systemFn as any).targetClass;\n MessageWriter.error(\n new Error(\n `[Virid Error] System Already Registered: Message Class ${messageClass.name}, Location ${targetClass.name}.${funcName}`,\n ),\n );\n return () => {};\n }\n\n return () => {\n const currentSystems = this.systemTaskMap.get(messageClass);\n if (currentSystems) {\n const index = currentSystems.findIndex((s) => s.fn === systemFn);\n if (index !== -1) {\n currentSystems.splice(index, 1);\n // 如果该消息类型没有任何监听者了,清理掉 Key,保持内存干净\n if (currentSystems.length === 0) {\n this.systemTaskMap.delete(messageClass);\n }\n }\n }\n };\n }\n}\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Core\n */\nimport { MessageWriter } from \"./io\";\nimport { type BaseMessage, EventMessage, SingleMessage } from \"./message\";\n\nexport class Staging {\n public signalActive = new Map<any, any[]>();\n public eventActive: any[] = [];\n private signalStaging = new Map<any, any[]>();\n private eventStaging: any[] = [];\n\n stage(event: BaseMessage) {\n if (event instanceof SingleMessage) {\n const type = event.constructor;\n if (!this.signalStaging.has(type)) this.signalStaging.set(type, []);\n this.signalStaging.get(type)!.push(event);\n } else if (event instanceof EventMessage) {\n this.eventStaging.push(event);\n } else {\n MessageWriter.error(\n new Error(\n `[Virid Message] Invalid Message:\\n${event.constructor.name} must extend SingleMessage or EventMessage`,\n ),\n );\n }\n }\n\n flip() {\n this.signalActive = this.signalStaging;\n this.eventActive = this.eventStaging;\n this.signalStaging = new Map();\n this.eventStaging = [];\n }\n\n clearSignals() {\n // types.forEach((type) => this.signalActive.delete(type));\n this.signalActive = new Map();\n }\n\n clearEvents() {\n this.eventActive = [];\n }\n \n isEmpty() {\n return this.signalStaging.size === 0 && this.eventStaging.length === 0;\n }\n\n /**\n * 重置所有池子\n */\n reset() {\n this.signalActive = new Map();\n this.signalStaging = new Map();\n this.eventStaging = [];\n this.eventActive = [];\n }\n}\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Core\n */\n\nimport { MessageWriter } from \"./io\";\nimport {\n type ExecuteHook,\n type ExecuteHookContext,\n type SystemTask,\n type MessageIdentifier,\n type SystemContext,\n type TickHook,\n type TickHookContext,\n} from \"../interfaces\";\nimport { type BaseMessage } from \"./message\";\nimport { Staging } from \"./staging\";\n\nexport class Dispatcher {\n constructor(private maxDepth: number) {}\n private isRunning = false;\n private globalTick = 0;\n private internalDepth = 0;\n private staging = new Staging();\n\n private tickPayload: { [key: string]: any } = {};\n\n private beforeExecuteHooks: Array<{\n type: MessageIdentifier<any>;\n handler: ExecuteHook<any>;\n }> = [];\n private afterExecuteHooks: Array<{\n type: MessageIdentifier<any>;\n handler: ExecuteHook<any>;\n }> = [];\n\n private beforeTickHooks: Array<TickHook> = [];\n private afterTickHooks: Array<TickHook> = [];\n\n public addBeforeExecute<T extends BaseMessage>(\n type: MessageIdentifier<T>,\n hook: ExecuteHook<T>,\n front: boolean,\n ) {\n if (front)\n this.beforeExecuteHooks.unshift({\n type,\n handler: hook as ExecuteHook<any>,\n });\n else\n this.beforeExecuteHooks.push({ type, handler: hook as ExecuteHook<any> });\n }\n public addAfterExecute<T extends BaseMessage>(\n type: MessageIdentifier<T>,\n hook: ExecuteHook<T>,\n front: boolean,\n ) {\n if (front)\n this.afterExecuteHooks.unshift({\n type,\n handler: hook as ExecuteHook<any>,\n });\n else\n this.afterExecuteHooks.push({ type, handler: hook as ExecuteHook<any> });\n }\n public addBeforeTick(hook: TickHook, front: boolean) {\n if (front) this.beforeTickHooks.unshift(hook);\n else this.beforeTickHooks.push(hook);\n }\n public addAfterTick(hook: TickHook, front: boolean) {\n if (front) this.afterTickHooks.unshift(hook);\n else this.afterTickHooks.push(hook);\n }\n\n /**\n * Marking dirty data, Determine which pool to enter based on the base class\n */\n public stage(message: BaseMessage) {\n this.staging.stage(message);\n }\n\n public tick(systemTaskMap: Map<any, SystemTask[]>) {\n if (this.isRunning || this.staging.isEmpty()) return;\n\n if (this.internalDepth > this.maxDepth) {\n this.internalDepth = 0;\n this.staging.reset();\n console.error(\n new Error(\n `[Virid Dispatcher] Deadlock: Max depth reached ${this.maxDepth}, Possible infinite loop detected. The dispatcher will stop processing this tick.`,\n ),\n );\n return;\n }\n\n this.isRunning = true;\n this.internalDepth++;\n\n queueMicrotask(() => {\n try {\n // Execute tick hook, only triggered on the first time\n if (this.internalDepth == 1) {\n this.tickPayload = {};\n this.executeTickHooks(this.beforeTickHooks);\n }\n // Preparing to start execution\n this.staging.flip();\n // The tasks that should be performed to collect this tick\n const tasks = this.collectTasks(systemTaskMap);\n // Execute the task for this frame\n this.executeTasks(tasks);\n } catch (e) {\n MessageWriter.error(e as Error, \"[Virid Dispatcher] Unhandled Error\");\n } finally {\n // Release the lock and attempt the next round of execution\n this.isRunning = false;\n // Enter the next round of micro tick\n if (!this.staging.isEmpty()) {\n this.tick(systemTaskMap);\n } else {\n // Reset internal status\n this.staging.reset();\n this.internalDepth = 0;\n this.executeTickHooks(this.afterTickHooks);\n this.globalTick++;\n }\n }\n });\n }\n public tickSync(systemTaskMap: Map<any, SystemTask[]>) {\n if (this.staging.isEmpty()) return;\n\n this.internalDepth = 0;\n this.tickPayload = {};\n\n this.executeTickHooks(this.beforeTickHooks);\n\n while (!this.staging.isEmpty()) {\n if (this.internalDepth > this.maxDepth) {\n this.staging.reset();\n this.internalDepth = 0;\n console.error(\n new Error(\n `[Virid Dispatcher] Deadlock: Max depth reached ${this.maxDepth}, Possible infinite loop detected. Ticking aborted.`,\n ),\n );\n return;\n }\n this.internalDepth++;\n try {\n this.staging.flip();\n const tasks = this.collectTasks(systemTaskMap);\n this.executeTasks(tasks);\n } catch (e) {\n MessageWriter.error(\n e as Error,\n \"[Virid Dispatcher] Sub-Tick Unhandled Error\",\n );\n break;\n }\n }\n\n this.staging.reset();\n this.internalDepth = 0;\n this.executeTickHooks(this.afterTickHooks);\n this.globalTick++;\n }\n\n private collectTasks(systemTaskMap: Map<any, SystemTask[]>): ExecutionTask[] {\n const tasks: ExecutionTask[] = [];\n // Collect EVENT tasks and execute all associated systems for each message from front to back\n for (const msg of this.staging.eventActive) {\n const systems = systemTaskMap.get(msg.constructor) || [];\n systems.forEach((s) => {\n tasks.push(\n new ExecutionTask(\n s.fn,\n s.priority,\n msg,\n {\n context: (s.fn as any).systemContext as SystemContext,\n tick: this.globalTick,\n payload: {},\n },\n this.beforeExecuteHooks,\n this.afterExecuteHooks,\n ),\n );\n });\n }\n // Collect SIGNAL tasks (each system only runs once for that type)\n for (const [msg, msg_list] of this.staging.signalActive.entries()) {\n const systems = systemTaskMap.get(msg) || [];\n systems.forEach((s) => {\n tasks.push(\n new ExecutionTask(\n s.fn,\n s.priority,\n msg_list,\n {\n context: (s.fn as any).systemContext as SystemContext,\n tick: this.globalTick,\n payload: {},\n },\n this.beforeExecuteHooks,\n this.afterExecuteHooks,\n ),\n );\n });\n }\n return tasks;\n }\n private executeTasks(tasks: ExecutionTask[]) {\n // Regardless of the message type, sort according to the priority defined by the System\n tasks.sort((a, b) => b.priority - a.priority);\n for (const task of tasks) {\n const msg = Array.isArray(task.message) ? task.message[0] : task.message;\n try {\n const result = task.execute();\n // If it's a Promise, just register a catch to prevent crashes, don't await it\n if (result instanceof Promise) {\n result.catch((e) =>\n MessageWriter.error(\n e,\n `[Virid Dispatcher]: Async System Error.\\n` +\n `SystemLocation: ${task.hookContext.context.targetClass.name}.${task.hookContext.context.methodName}\\n` +\n `MessageName: ${msg.constructor.name}\\n` +\n `MessageData: ${JSON.stringify(task.message)}`,\n ),\n );\n }\n } catch (e) {\n MessageWriter.error(\n e as Error,\n `[Virid Dispatcher]: Sync System Error.\\n` +\n `SystemLocation: ${task.hookContext.context.targetClass.name}.${task.hookContext.context.methodName}\\n` +\n `MessageName: ${msg.constructor.name}\\n` +\n `MessageData: ${JSON.stringify(task.message)}`,\n );\n }\n }\n }\n\n private executeTickHooks(hooks: TickHook[]) {\n const hooksContext: TickHookContext = {\n tick: this.globalTick,\n timestamp: Date.now(),\n payload: this.tickPayload,\n };\n hooks.forEach((h) => h(hooksContext));\n }\n}\n\nexport class ExecutionTask {\n public success = true;\n constructor(\n public fn: (...args: any[]) => any,\n public priority: number,\n public message: any, // T or T[]\n public hookContext: ExecuteHookContext,\n public beforeExecuteHooks: Array<{\n type: MessageIdentifier<any>;\n handler: ExecuteHook<any>;\n }>,\n public afterExecuteHooks: Array<{\n type: MessageIdentifier<any>;\n handler: ExecuteHook<any>;\n }>,\n ) {}\n\n private triggerHooks(\n hooks: Array<{\n type: MessageIdentifier<any>;\n handler: ExecuteHook<any>;\n }>,\n ) {\n const sample = Array.isArray(this.message) ? this.message[0] : this.message;\n if (!sample) return;\n\n for (const hook of hooks) {\n if (sample instanceof hook.type) {\n try {\n const result = hook.handler(\n this.message,\n this.hookContext,\n this.success,\n );\n if (result instanceof Promise) {\n result.catch((e) => {\n MessageWriter.error(\n e,\n `[Virid Hook] Async Hook Error: It is prohibited to use asynchronous hooks within Hook: ${hook.type.name}`,\n );\n });\n }\n } catch (e) {\n MessageWriter.error(\n e as Error,\n `[Virid Hook] Hook Execute Failed: Triggered by: ${sample.constructor.name}, Registered type: ${hook.type.name}`,\n );\n }\n }\n }\n }\n\n public execute(): any {\n this.triggerHooks(this.beforeExecuteHooks);\n const runAfter = () => this.triggerHooks(this.afterExecuteHooks);\n\n try {\n const result = this.fn(this.message);\n\n if (result instanceof Promise) {\n // Asynchronous mode utilizes. finally to ensure hook execution\n return result.catch(() => (this.success = false)).finally(runAfter);\n }\n // If it is synchronization, execute it directly with a post hook and return it\n runAfter();\n return result;\n } catch (e) {\n // If an error occurs, execute the post hook as well\n this.success = false;\n runAfter();\n throw e; // Try catch processing thrown to Dispatcher\n }\n }\n}\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Core\n */\n\nimport {\n type ExecuteHook,\n type TickHook,\n type MessageIdentifier,\n type Middleware,\n} from \"../interfaces\";\nimport { BaseMessage } from \"./message\";\nimport { MessageRegistry } from \"./registry\";\nimport { MessageWriter, activateInstance } from \"./io\";\nimport { Dispatcher } from \"./dispatcher\";\n\nexport class MessageEngine {\n private dispatcher: Dispatcher;\n private registry = new MessageRegistry();\n private middlewares: Middleware[] = [];\n private manual: boolean;\n\n constructor(maxDepth: number, manual: boolean) {\n this.dispatcher = new Dispatcher(maxDepth);\n this.manual = manual;\n // 修改\n activateInstance(this);\n }\n\n useMiddleware(mw: Middleware, front: boolean) {\n this.middlewares.push(mw);\n }\n onBeforeExecute<T extends BaseMessage>(\n type: MessageIdentifier<T>,\n hook: ExecuteHook<T>,\n front: boolean,\n ) {\n this.dispatcher.addBeforeExecute(type, hook, front);\n }\n onAfterExecute<T extends BaseMessage>(\n type: MessageIdentifier<T>,\n hook: ExecuteHook<T>,\n front: boolean,\n ) {\n this.dispatcher.addAfterExecute(type, hook, front);\n }\n onBeforeTick(hook: TickHook, front: boolean) {\n this.dispatcher.addBeforeTick(hook, front);\n }\n onAfterTick(hook: TickHook, front: boolean) {\n this.dispatcher.addAfterTick(hook, front);\n }\n\n tick() {\n this.dispatcher.tickSync(this.registry.systemTaskMap);\n }\n\n dispatch(message: BaseMessage) {\n if (!(message instanceof BaseMessage)) {\n MessageWriter.error(\n new Error(\n `[Virid Dispatch] Type Error: Message must be an instance of BaseMessage,message:${message}`,\n ),\n );\n return;\n }\n // 运行中间件管道\n this.pipeline(message, () => {\n //看看这个消息的处理函数在this.systemTaskMap里有吗?没有就报错\n if (!this.registry.systemTaskMap.has(message.constructor)) {\n MessageWriter.error(\n new Error(\n `[Virid Dispatch] No handler for message: ${message.constructor.name}`,\n ),\n );\n return;\n }\n this.dispatcher.stage(message);\n if (!this.manual) {\n this.dispatcher.tick(this.registry.systemTaskMap);\n }\n });\n }\n\n private pipeline(message: BaseMessage, finalAction: () => void) {\n let index = 0;\n const next = () => {\n if (index < this.middlewares.length) {\n this.middlewares[index++](message, next);\n } else {\n finalAction();\n }\n };\n next();\n }\n\n register(\n messageClass: any,\n systemFn: (...args: any[]) => any,\n priority: number = 0,\n ): () => void {\n return this.registry.register(messageClass, systemFn, priority);\n }\n}\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Core\n */\n\nexport const VIRID_METADATA = {\n SYSTEM: \"virid:core:system\",\n MESSAGE: \"virid:core:message\",\n CONTROLLER: \"virid:core:controller\",\n COMPONENT: \"virid:core:component\",\n SAFE: \"virid:core:safe\",\n OBSERVER: \"virid:core:observer\",\n} as const;\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Core\n */\nimport { BaseMessage, MessageWriter, SingleMessage } from \"../core\";\nimport { VIRID_METADATA } from \"./constant\";\nimport {\n type SystemContext,\n type Newable,\n type SystemParams,\n type ObserverMetadata,\n type SafeMetadata,\n SystemConfig,\n} from \"../interfaces\";\n\n// Unified processing of return values: System can directly return a message to achieve a chain reaction\nexport function handleResult(res: any) {\n if (!res) return;\n const messages = Array.isArray(res) ? res : [res];\n messages.forEach((m) => {\n if (m instanceof BaseMessage) {\n MessageWriter.write(m);\n } else {\n MessageWriter.warn(\n `[Virid HandleResult] Invalid Return Type: Must return Message or Message[].`,\n );\n }\n });\n}\n\n/**\n * Check if there are multiple message type parameters in the parameters\n * @param types Parameter list\n */\nfunction checkMessageParam(types: Array<any>) {\n const foundMatches: { type: any; idx: number }[] = [];\n\n types.forEach((type, idx) => {\n const isBaseMessage =\n type === BaseMessage || (type && type.prototype instanceof BaseMessage);\n\n if (isBaseMessage) {\n foundMatches.push({ type, idx });\n }\n });\n\n if (foundMatches.length === 0) {\n return null;\n }\n\n if (foundMatches.length > 1) {\n // 发现多个,把所有的错误信息组合起来抛出\n const errorDetails = foundMatches\n .map((item) => `[Index: ${item.idx}, Name: ${item.type.name}]`)\n .join(\", \");\n\n throw new Error(\n `[Virid System] Multiple Messages: Multiple Message type parameters detected, this is not allowed! specific location: ${errorDetails}`,\n );\n }\n\n return foundMatches[0];\n}\n\n/**\n * System Decorator\n * @param params Priority and MessageClass config\n */\nexport function System(\n params: SystemParams = {\n messageClass: null,\n priority: 0,\n },\n) {\n return (target: any, key: string, descriptor: PropertyDescriptor) => {\n if (typeof target !== \"function\") {\n throw new Error(\n `[Virid System] Method Type Error: The Method ${key} is not a static method, please check if there is a static keyword tag.`,\n );\n }\n\n const originalMethod = descriptor.value;\n const types: Array<any> = Reflect.getMetadata(\n \"design:paramtypes\",\n target,\n key,\n );\n\n // Verify if metadata exists\n if (!types) {\n throw new Error(\n `[Virid System] System Parameter Loss: Unable to recognize system parameters, please confirm if import \"reflect-metadata\" was introduced at the beginning.`,\n );\n }\n\n // Verify if there are undefined parameters\n const undefinedIndices = types\n .map((t, i) => (t === undefined ? i : -1))\n .filter((i) => i !== -1);\n if (undefinedIndices.length > 0) {\n throw new Error(\n `[Virid System] Parameter Metadata Loss in \"${key}\": One or more parameters have 'undefined' types. This usually happens when you forget to add a type annotation or due to circular dependencies. Check parameter at indices: [${undefinedIndices.join(\", \")}]`,\n );\n }\n\n let messageClass: Newable<BaseMessage>;\n // eslint-disable-next-line no-useless-assignment\n let messageIdx: number = -1;\n let batchMode = false;\n const listIdx = types.indexOf(Array);\n\n if (listIdx !== -1) {\n // Batch processing mode (with Array parameters)\n if (!params.messageClass) {\n throw new Error(\n `[Virid System] System Parameter Loss: When using batch processing mode with Array, the messageClass parameter must be specified in decorator options.`,\n );\n }\n if (!(params.messageClass.prototype instanceof SingleMessage)) {\n throw new Error(\n `[Virid System] System Parameter Loss: When using the batch processing mode, the messageClass parameter must inherit from SingleMessage.`,\n );\n }\n messageClass = params.messageClass;\n messageIdx = listIdx; // In batch processing mode, idx points to the position of Array\n batchMode = true;\n } else {\n // Non batch processing mode\n const matchedMessage = checkMessageParam(types); // { type: any, idx: number } | null\n\n if (matchedMessage && params.messageClass) {\n throw new Error(\n `[Virid System] Multiple Messages Are Not Allowed: Cannot specify messageClass in decorator options while already declaring it in method parameters at index ${matchedMessage.idx} in ${key}.`,\n );\n }\n\n if (matchedMessage) {\n messageClass = matchedMessage.type;\n messageIdx = matchedMessage.idx; // In single mode, idx points to the location of a specific BaseMessage subclass\n } else if (params.messageClass) {\n messageClass = params.messageClass;\n messageIdx = -1; // Only provided in the configuration, cannot be found in the parameters, set to -1\n } else {\n throw new Error(\n `[Virid System] System Parameter Loss: Please declare the message type either in method parameters or via the Message decorator options.`,\n );\n }\n }\n\n // Attach contextual information to the packaged function\n const systemContext: SystemContext = {\n params: types,\n targetClass: target,\n methodName: key,\n originalMethod: originalMethod,\n };\n const systemConfig: SystemConfig = {\n messageClass: messageClass,\n messageIdx: messageIdx,\n priority: params.priority || 0,\n batchMode: batchMode,\n };\n\n // Purely mounting data without changing the execution logic of the original method\n (descriptor.value as any).systemContext = systemContext;\n (descriptor.value as any).systemConfig = systemConfig;\n };\n}\n\n/**\n * Is the method used to identify the controller or component safe and can be directly called by other controllers\n */\nexport function Safe() {\n return (target: any, key: string, _descriptor: PropertyDescriptor) => {\n const safeMethods: SafeMetadata =\n Reflect.getMetadata(VIRID_METADATA.SAFE, target) || new Set<string>();\n safeMethods.add(key);\n Reflect.defineMetadata(VIRID_METADATA.SAFE, safeMethods, target);\n };\n}\n\n/**\n * Observer Decorator\n */\nexport function Observer(\n callback: (oldVal: any, newVale: any) => void | BaseMessage | BaseMessage[],\n) {\n return (target: any, propertyKey: string) => {\n const observerMetadata: ObserverMetadata =\n Reflect.getMetadata(VIRID_METADATA.OBSERVER, target) || [];\n observerMetadata.push({ propertyKey, callback });\n Reflect.defineMetadata(VIRID_METADATA.OBSERVER, observerMetadata, target);\n };\n}\n\n/**\n * Controller Decorator\n */\nexport function Controller() {\n return (target: any) => {\n Reflect.defineMetadata(VIRID_METADATA.CONTROLLER, true, target);\n };\n}\n/**\n * Component Decorator\n */\nexport function Component() {\n return (target: any) => {\n // 打上组件标签\n Reflect.defineMetadata(VIRID_METADATA.COMPONENT, true, target);\n };\n}\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Core\n */\nimport { type ObserverItem } from \"../interfaces\";\nimport { handleResult } from \"./decorator\";\nimport { VIRID_METADATA } from \"./constant\";\nconst ARRAY_MUTABLE_METHODS = [\n \"push\",\n \"pop\",\n \"shift\",\n \"unshift\",\n \"splice\",\n \"sort\",\n \"reverse\",\n];\nexport function bindObservers(instance: any) {\n if (!instance || typeof instance !== \"object\") return instance;\n if (\n Object.prototype.hasOwnProperty.call(\n instance,\n \"__virid_observer_processed__\",\n )\n )\n return instance;\n\n Object.defineProperty(instance, \"__virid_observer_processed__\", {\n value: true,\n enumerable: false,\n configurable: true,\n });\n\n const observerConfigs: ObserverItem[] =\n Reflect.getMetadata(VIRID_METADATA.OBSERVER, instance) || [];\n\n observerConfigs.forEach(({ propertyKey, callback }) => {\n // 创建逻辑单元:一个闭包 Box\n const box = { value: instance[propertyKey] };\n const logicProxy = new Proxy(box, {\n get(target, prop) {\n const value = target.value;\n\n // 数组变动拦截\n if (\n Array.isArray(value) &&\n ARRAY_MUTABLE_METHODS.includes(prop as string)\n ) {\n return (...args: any[]) => {\n const oldVal = [...value];\n const result = (value as any)[prop].apply(value, args);\n const observerResult = callback.call(instance, oldVal, value);\n handleResult(observerResult);\n\n return result;\n };\n }\n return value;\n },\n set(target, _prop, newVal) {\n const oldVal = target.value;\n if (newVal === oldVal) return true;\n\n target.value = newVal;\n const result = callback.call(instance, oldVal, newVal);\n handleResult(result);\n return true;\n },\n });\n // 在 bindObservers 的 forEach 内部\n const getter = () => logicProxy.value;\n (getter as any).__virid_box__ = box; // 重点:把闭包里的 box 暴露给后续插件\n\n Object.defineProperty(instance, propertyKey, {\n get: getter, // 纯转发\n set: (v) => {\n logicProxy.value = v;\n }, // 纯转发\n enumerable: true,\n configurable: true,\n });\n\n // 初次递归扫描\n if (box.value && typeof box.value === \"object\") {\n bindObservers(box.value);\n }\n });\n\n // 处理未标记但属于子组件的对象\n Reflect.ownKeys(instance).forEach((key) => {\n if (key === \"__virid_observer_processed__\") return;\n const desc = Object.getOwnPropertyDescriptor(instance, key);\n if (desc && desc.get) return;\n const val = instance[key];\n if (val && typeof val === \"object\") {\n bindObservers(val);\n }\n });\n return instance;\n}\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Core\n */\n\nimport { Newable } from \"./interfaces\";\nimport { VIRID_METADATA } from \"./decorators/constant\";\n\ninterface Binding {\n type: \"singleton\" | \"transient\";\n ctor: Newable<any>;\n}\n\nexport class ViridContainer {\n private bindings = new Map<any, Binding>();\n private singletonInstances = new Map<any, any>();\n private activationHooks: Array<(instance: any) => any> = [];\n /**\n * Register an activation hook\n * @param hook An activation hook\n * @param front Is the hook order inserted from the front or added\n */\n public addActivationHook(hook: (instance: any) => any, front: boolean) {\n if (front) this.activationHooks.unshift(hook);\n else this.activationHooks.push(hook);\n }\n /**\n * Static binding component or controller\n * @param identifier Constructor of components or controllers\n */\n public bind<T>(identifier: Newable<T>) {\n //Check if the constructor has mandatory parameters\n if (identifier.length > 0) {\n throw new Error(\n `[Virid Container] Cannot Bind Component Or Controller: The Class ${identifier.name} should not have mandatory parameters.`,\n );\n }\n if (Reflect.getMetadata(VIRID_METADATA.COMPONENT, identifier)) {\n const binding: Binding = {\n type: \"singleton\",\n ctor: identifier,\n };\n this.bindings.set(identifier, binding);\n } else if (Reflect.getMetadata(VIRID_METADATA.CONTROLLER, identifier)) {\n const binding: Binding = { type: \"transient\", ctor: identifier };\n this.bindings.set(identifier, binding);\n } else {\n throw new Error(\n `[Virid Container] Cannot Bind Component Or Controller: The Class ${identifier.name} is not decorated with @Component or @Controller`,\n );\n }\n }\n /**\n * Dynamically register a component\n * @param instance Component instance\n */\n public spawn(instance: object) {\n const identifier = instance.constructor as Newable<any>;\n if (Reflect.hasMetadata(VIRID_METADATA.COMPONENT, identifier)) {\n const binding: Binding = { type: \"singleton\", ctor: identifier };\n this.bindings.set(identifier, binding);\n this.singletonInstances.set(identifier, instance);\n } else {\n throw new Error(\n `[Virid Container] Cannot spawn Component: The Class ${identifier.name} is not decorated with @Component`,\n );\n }\n }\n /**\n * Obtain a Component or Controller instance\n * @param identifier Constructor of components or controllers\n */\n public get<T>(identifier: Newable<T>): T {\n const binding = this.bindings.get(identifier);\n if (!binding) {\n throw new Error(\n `[Virid Container] Cannot Get Component Or Controller: No binding found for ${identifier}`,\n );\n }\n const TargetCtor = binding.ctor;\n\n if (binding.type === \"singleton\") {\n if (!this.singletonInstances.has(identifier)) {\n // first creation\n const rawInstance = new TargetCtor();\n const processedInstance = this.handleActivation(rawInstance);\n this.singletonInstances.set(identifier, processedInstance);\n }\n return this.singletonInstances.get(identifier);\n }\n\n // Transient\n const instance = new TargetCtor();\n return this.handleActivation(instance);\n }\n private handleActivation<T>(instance: T): T {\n for (const hook of this.activationHooks) {\n instance = hook(instance);\n }\n return instance;\n }\n}\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Core\n */\nimport { ViridContainer } from \"./container\";\nimport {\n type ExecuteHook,\n type MessageIdentifier,\n type Middleware,\n type TickHook,\n type Newable,\n type SystemContext,\n type SystemConfig,\n} from \"./interfaces\";\nimport {\n BaseMessage,\n MessageWriter,\n MessageEngine,\n EventMessage,\n SingleMessage,\n} from \"./core\";\nimport { handleResult, Component } from \"./decorators\";\n\nexport interface ViridPlugin<T = any> {\n name: string;\n install: (app: ViridApp, options: T) => void;\n}\n\n@Component()\nexport class ViridApp {\n public container: ViridContainer = new ViridContainer();\n public engine: MessageEngine;\n private installedPlugins = new Set<string>();\n\n constructor(maxDepth: number, manual: boolean) {\n this.engine = new MessageEngine(maxDepth, manual);\n this.container.spawn(this);\n }\n\n /**\n * Register an activation hook\n * @param hook An activation hook\n * @param front Is the hook order inserted from the front or added\n */\n onActivate(hook: (instance: any) => any, front: boolean = false) {\n this.container.addActivationHook(hook, front);\n }\n\n /**\n * Opening a new tick\n */\n tick() {\n this.engine.tick();\n }\n\n /**\n * Obtain a Component or Controller instance\n * @param identifier Constructor of components or controllers\n */\n get<T>(identifier: Newable<T>): T {\n return this.container.get(identifier);\n }\n\n /**\n * Static binding component or controller\n * @param identifier Constructor of components or controllers\n */\n bind<T>(identifier: Newable<T>) {\n this.container.bind(identifier);\n }\n /**\n * Dynamically register a component\n * @param instance Component instance\n */\n spawn(instance: object) {\n this.container.spawn(instance);\n }\n useMiddleware(mw: Middleware, front = false) {\n this.engine.useMiddleware(mw, front);\n }\n onBeforeExecute<T extends BaseMessage>(\n type: MessageIdentifier<T>,\n hook: ExecuteHook<T>,\n front = false,\n ) {\n this.engine.onBeforeExecute(type, hook, front);\n }\n onAfterExecute<T extends BaseMessage>(\n type: MessageIdentifier<T>,\n hook: ExecuteHook<T>,\n front = false,\n ) {\n this.engine.onAfterExecute(type, hook, front);\n }\n onBeforeTick(hook: TickHook, front = false) {\n this.engine.onBeforeTick(hook, front);\n }\n onAfterTick(hook: TickHook, front = false) {\n this.engine.onAfterTick(hook, front);\n }\n\n use<T>(plugin: ViridPlugin<T>, options: T): this {\n if (this.installedPlugins.has(plugin.name)) {\n MessageWriter.warn(\n `[Virid Plugin] Duplicate Installation: Plugin ${plugin.name} has already been installed.`,\n );\n return this;\n }\n try {\n plugin.install(this, options);\n this.installedPlugins.add(plugin.name);\n } catch (e) {\n MessageWriter.error(\n e as Error,\n `[Virid Plugin]: Install Failed: ${plugin.name}`,\n );\n }\n return this;\n }\n /**\n * Register message to registrar\n * @param systemFn System functions\n */\n register(systemFn: (...args: any[]) => any): () => void {\n const systemContext: SystemContext = (systemFn as any).systemContext;\n const systemConfig: SystemConfig = (systemFn as any).systemConfig;\n\n if (!systemContext || !systemConfig) {\n throw new Error(\n `[Virid System] System Parameter Loss: Please declare ${systemFn.name} using the @System decorator first.`,\n );\n }\n\n const { params: types, targetClass, originalMethod } = systemContext;\n const { messageClass, messageIdx, priority, batchMode } = systemConfig;\n\n const handleResultFn =\n typeof handleResult === \"function\" ? handleResult : (res: any) => res;\n const processResult = (result: any) => {\n return result instanceof Promise\n ? result.then(handleResultFn)\n : handleResultFn(result);\n };\n\n const cachedComponents = new Array(types.length);\n let isInitialized = false;\n\n const initDeps = () => {\n for (let i = 0; i < types.length; i++) {\n if (i !== messageIdx) {\n const dep = this.get(types[i]);\n if (!dep) {\n throw new Error(\n `[Virid System] Unknown Inject Data Types: ${types[i].name || types[i]} is not registered in the container for system '${systemFn.name}'!`,\n );\n }\n cachedComponents[i] = dep;\n }\n }\n isInitialized = true;\n };\n\n let wrappedSystem: (currentMessage: EventMessage | SingleMessage[]) => any;\n\n if (messageIdx === -1) {\n wrappedSystem = () => {\n if (!isInitialized) initDeps();\n return processResult(\n originalMethod.apply(targetClass, cachedComponents),\n );\n };\n } else if (types.length === 1) {\n if (batchMode) {\n wrappedSystem = (currentMessage: EventMessage | SingleMessage[]) => {\n const payload = Array.isArray(currentMessage)\n ? currentMessage\n : [currentMessage];\n\n if (payload.length > 0 && !(payload[0] instanceof messageClass)) {\n throw new Error(\n `[Virid System] Type Mismatch: Expected list of ${messageClass.name}, but got ${payload[0]?.constructor?.name}`,\n );\n }\n\n return processResult(originalMethod.call(targetClass, payload));\n };\n } else {\n wrappedSystem = (currentMessage: EventMessage | SingleMessage[]) => {\n const payload = Array.isArray(currentMessage)\n ? currentMessage[currentMessage.length - 1]\n : currentMessage;\n\n if (!(payload instanceof messageClass)) {\n throw new Error(\n `[Virid System] Type Mismatch: Expected ${messageClass.name}, but got ${(payload as any)?.constructor?.name}`,\n );\n }\n\n return processResult(originalMethod.call(targetClass, payload));\n };\n }\n } else {\n if (batchMode) {\n wrappedSystem = (currentMessage: EventMessage | SingleMessage[]) => {\n if (!isInitialized) initDeps();\n const payload = Array.isArray(currentMessage)\n ? currentMessage\n : [currentMessage];\n\n if (payload.length > 0 && !(payload[0] instanceof messageClass)) {\n throw new Error(\n `[Virid System] Type Mismatch: Expected list of ${messageClass.name}, but got ${payload[0]?.constructor?.name}`,\n );\n }\n\n const callArgs = [...cachedComponents];\n callArgs[messageIdx] = payload;\n return processResult(originalMethod.apply(targetClass, callArgs));\n };\n } else {\n wrappedSystem = (currentMessage: EventMessage | SingleMessage[]) => {\n if (!isInitialized) initDeps();\n const payload = Array.isArray(currentMessage)\n ? currentMessage[currentMessage.length - 1]\n : currentMessage;\n\n if (!(payload instanceof messageClass)) {\n throw new Error(\n `[Virid System] Type Mismatch: Expected ${messageClass.name}, but got ${(payload as any)?.constructor?.name}`,\n );\n }\n\n const callArgs = [...cachedComponents];\n callArgs[messageIdx] = payload;\n return processResult(originalMethod.apply(targetClass, callArgs));\n };\n }\n }\n\n (wrappedSystem as any).systemContext = systemContext;\n\n return this.engine.register(messageClass, wrappedSystem, priority);\n }\n}\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Core\n */\nimport { type ViridApp } from \"./app\";\nimport { ErrorMessage, InfoMessage, WarnMessage } from \"./core\";\nimport { System } from \"./decorators\";\n\nlet globalSwitch = true;\n\nexport function toggleSwitch(enable: boolean) {\n globalSwitch = enable;\n}\n\nconst clr = {\n reset: \"\\x1b[0m\",\n red: \"\\x1b[31m\",\n yellow: \"\\x1b[33m\",\n blue: \"\\x1b[34m\",\n magenta: \"\\x1b[35m\",\n cyan: \"\\x1b[36m\",\n gray: \"\\x1b[90m\",\n bold: \"\\x1b[1m\",\n green: \"\\x1b[32m\",\n};\n\nclass ViridLogHandler {\n /**\n * Register the global default information processing system\n */\n @System()\n static globalInfoHandler(info: InfoMessage) {\n if (!globalSwitch) return;\n const header = `${clr.green}${clr.bold} ✔ [Virid Info] ${clr.reset}`;\n const context = `${clr.magenta} ${info.context} ${clr.reset}`;\n\n console.log(\n `${header}${clr.gray} Global Info Caught: ${clr.reset}\\n` +\n `${clr.green} Details: ${clr.reset}`,\n context || \"unknown Info\",\n );\n }\n\n /**\n * Register the global default error handling system\n */\n @System()\n static globalErrorHandler(err: ErrorMessage) {\n if (!globalSwitch) return;\n const header = `${clr.red}${clr.bold} ✖ [Virid Error] ${clr.reset}`;\n const context = `${clr.magenta} ${err.context} ${clr.reset}`;\n\n console.error(\n `${header}${clr.gray} Global Error Caught: ${clr.reset}\\n` +\n `${clr.red} Context: ${clr.reset} ${context}\\n` +\n `${clr.red} Details: ${clr.reset}`,\n err.error || err || \"unknown Error\",\n );\n }\n\n /**\n * Register the global default warning handling system\n */\n @System()\n static globalWarnHandler(warn: WarnMessage) {\n if (!globalSwitch) return;\n const header = `${clr.yellow}${clr.bold} ⚠ [Virid Warn] ${clr.reset}`;\n const context = `${clr.cyan} ${warn.context} ${clr.reset}`;\n\n console.warn(\n `${header}${clr.gray} Global Warn Caught: ${clr.reset}\\n` +\n `${clr.yellow} Context:${clr.reset} ${context}`,\n );\n }\n}\n\nexport function registerBasicSystems(app: ViridApp) {\n app.register(ViridLogHandler.globalInfoHandler);\n app.register(ViridLogHandler.globalErrorHandler);\n app.register(ViridLogHandler.globalWarnHandler);\n}\n","/*\n * Copyright (c) 2026-present Ailrid\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * Description: Virid Core Dispatcher - The heart of CCS Architecture.\n */\nexport * from \"./interfaces\";\nexport * from \"./core\";\nexport * from \"./decorators\";\nexport * from \"./app\";\n\nimport { ViridApp } from \"./app\";\nimport { AppConfig, defaultConfig } from \"./interfaces\";\nimport { toggleSwitch, registerBasicSystems } from \"./utils\";\nimport { bindObservers } from \"./decorators/bind\";\n\nexport function createVirid(config: AppConfig = defaultConfig): ViridApp {\n config = { ...defaultConfig, ...config };\n const app = new ViridApp(config.maxDepth!, config.manual!);\n\n registerBasicSystems(app);\n toggleSwitch(config.enableLog!);\n app.onActivate(bindObservers);\n const self = app;\n app.spawn(self);\n return app;\n}\n"],"mappings":"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","names":["defaultConfig","maxDepth","enableLog","manual","activeInstance","activateInstance","instance","dispatch","message","console","error","MessageWriter","write","target","args","e","context","ErrorMessage","warn","WarnMessage","info","InfoMessage","_MessageWriter","BaseMessage","send","args","MessageWriter","write","_BaseMessage","SingleMessage","_SingleMessage","EventMessage","_EventMessage","ErrorMessage","error","context","_ErrorMessage","WarnMessage","_WarnMessage","InfoMessage","_InfoMessage","MessageRegistry","systemTaskMap","Map","register","messageClass","systemFn","priority","systems","get","findIndex","s","fn","systemContext","originalMethod","push","sort","a","b","set","funcName","methodName","targetClass","MessageWriter","error","Error","name","currentSystems","index","splice","length","delete","_MessageRegistry","Staging","signalActive","Map","eventActive","signalStaging","eventStaging","stage","event","SingleMessage","type","has","set","get","push","EventMessage","MessageWriter","error","Error","name","flip","clearSignals","clearEvents","isEmpty","size","length","reset","_Staging","Dispatcher","maxDepth","isRunning","globalTick","internalDepth","staging","Staging","tickPayload","beforeExecuteHooks","afterExecuteHooks","beforeTickHooks","afterTickHooks","addBeforeExecute","type","hook","front","unshift","handler","push","addAfterExecute","addBeforeTick","addAfterTick","stage","message","tick","systemTaskMap","isEmpty","reset","console","error","Error","queueMicrotask","executeTickHooks","flip","tasks","collectTasks","executeTasks","e","MessageWriter","tickSync","msg","eventActive","get","forEach","s","ExecutionTask","fn","priority","context","systemContext","payload","msg_list","signalActive","entries","sort","a","b","task","Array","isArray","result","execute","Promise","catch","hookContext","targetClass","name","methodName","JSON","stringify","hooks","hooksContext","timestamp","Date","now","h","_Dispatcher","success","triggerHooks","sample","runAfter","__name","finally","_ExecutionTask","MessageEngine","maxDepth","manual","dispatcher","registry","MessageRegistry","middlewares","Dispatcher","activateInstance","useMiddleware","mw","front","push","onBeforeExecute","type","hook","addBeforeExecute","onAfterExecute","addAfterExecute","onBeforeTick","addBeforeTick","onAfterTick","addAfterTick","tick","tickSync","systemTaskMap","dispatch","message","BaseMessage","MessageWriter","error","Error","pipeline","has","name","stage","finalAction","index","next","__name","length","register","messageClass","systemFn","priority","_MessageEngine","VIRID_METADATA","SYSTEM","MESSAGE","CONTROLLER","COMPONENT","SAFE","OBSERVER","handleResult","res","Array","isArray","forEach","m","BaseMessage","MessageWriter","write","warn","checkMessageParam","types","foundMatches","type","idx","prototype","push","length","errorDetails","map","item","name","join","Error","System","params","messageClass","priority","target","key","descriptor","originalMethod","value","Reflect","getMetadata","undefinedIndices","t","i","undefined","filter","messageIdx","batchMode","listIdx","indexOf","SingleMessage","matchedMessage","systemContext","targetClass","methodName","systemConfig","Safe","_descriptor","safeMethods","VIRID_METADATA","SAFE","Set","add","defineMetadata","Observer","callback","propertyKey","observerMetadata","OBSERVER","Controller","CONTROLLER","Component","COMPONENT","ARRAY_MUTABLE_METHODS","bindObservers","instance","Object","prototype","hasOwnProperty","call","defineProperty","value","enumerable","configurable","Reflect","getMetadata","VIRID_METADATA","OBSERVER","forEach","propertyKey","callback","box","logicProxy","Proxy","get","target","prop","Array","isArray","includes","args","oldVal","result","apply","observerResult","handleResult","set","_prop","newVal","getter","__name","__virid_box__","v","ownKeys","key","desc","getOwnPropertyDescriptor","val","ViridContainer","bindings","Map","singletonInstances","activationHooks","addActivationHook","hook","front","unshift","push","bind","identifier","length","Error","name","Reflect","getMetadata","VIRID_METADATA","COMPONENT","binding","type","ctor","set","CONTROLLER","spawn","instance","hasMetadata","get","TargetCtor","has","rawInstance","processedInstance","handleActivation","_ViridContainer","ViridApp","maxDepth","manual","container","ViridContainer","engine","installedPlugins","Set","MessageEngine","spawn","onActivate","hook","front","addActivationHook","tick","get","identifier","bind","instance","useMiddleware","mw","onBeforeExecute","type","onAfterExecute","onBeforeTick","onAfterTick","use","plugin","options","has","name","MessageWriter","warn","install","add","e","error","register","systemFn","systemContext","systemConfig","Error","params","types","targetClass","originalMethod","messageClass","messageIdx","priority","batchMode","handleResultFn","handleResult","res","processResult","__name","result","Promise","then","cachedComponents","Array","length","isInitialized","initDeps","i","dep","wrappedSystem","apply","currentMessage","payload","isArray","call","callArgs","_ViridApp","_ts_decorate","decorators","target","key","desc","__name","globalSwitch","toggleSwitch","enable","clr","reset","red","yellow","blue","magenta","cyan","gray","bold","green","_a","ViridLogHandler","globalInfoHandler","info","header","context","console","log","globalErrorHandler","err","error","globalWarnHandler","warn","registerBasicSystems","app","register","createVirid","config","defaultConfig","app","ViridApp","maxDepth","manual","registerBasicSystems","toggleSwitch","enableLog","onActivate","bindObservers","self","spawn"]}
1
+ {"version":3,"sources":["../src/interfaces/common.ts","../src/core/io.ts","../src/core/message.ts","../src/core/registry.ts","../src/core/staging.ts","../src/core/dispatcher.ts","../src/core/engine.ts","../src/decorators/constant.ts","../src/decorators/decorator.ts","../src/decorators/bind.ts","../src/container.ts","../src/app.ts","../src/utils.ts","../src/index.ts"],"sourcesContent":["/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Core\n */\nexport type Newable<\n TInstance = unknown,\n TArgs extends unknown[] = any[],\n> = new (...args: TArgs) => TInstance;\n\nexport interface AppConfig {\n maxDepth?: number;\n enableLog?: boolean;\n manual?: boolean;\n}\n\nconst defaultConfig: AppConfig = {\n maxDepth: 100,\n enableLog: true,\n manual: false,\n};\nexport { defaultConfig };\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Core\n */\nimport { type MessageEngine } from \"./engine\";\nimport {\n type BaseMessage,\n ErrorMessage,\n InfoMessage,\n WarnMessage,\n} from \"./message\";\nimport { type Newable } from \"../interfaces\";\n\nlet activeInstance: MessageEngine | null = null;\nexport function activateInstance(instance: MessageEngine) {\n activeInstance = instance;\n}\n\nfunction dispatch(message: BaseMessage): void {\n if (activeInstance) {\n activeInstance.dispatch(message);\n } else {\n console.error(\"[Virid MessageWriter] No active instance found.\");\n }\n}\n\nexport class MessageWriter {\n public static write<T extends BaseMessage, K extends Newable<T>>(\n target: K | T,\n ...args: ConstructorParameters<K>\n ): void {\n const instance =\n typeof target === \"function\"\n ? new (target as any)(...args)\n : (target as T);\n\n dispatch(instance);\n }\n\n public static error(e: Error, context: string = \"\"): void {\n this.write(new ErrorMessage(e, context));\n }\n\n public static warn(context: string): void {\n this.write(new WarnMessage(context));\n }\n public static info(context: string): void {\n this.write(new InfoMessage(context));\n }\n}\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Core\n */\nimport { Newable } from \"../interfaces\";\nimport { MessageWriter } from \"./io\";\n\nexport abstract class BaseMessage {\n static send<T extends Newable<any>>(\n this: T,\n ...args: ConstructorParameters<T>\n ) {\n MessageWriter.write(this as any, ...args);\n }\n}\n\nexport abstract class SingleMessage extends BaseMessage {\n constructor() {\n super();\n }\n}\n\nexport abstract class EventMessage extends BaseMessage {\n constructor() {\n super();\n }\n}\n\nexport class ErrorMessage extends EventMessage {\n constructor(\n public readonly error: Error,\n public readonly context?: string,\n ) {\n super();\n }\n}\n\nexport class WarnMessage extends EventMessage {\n constructor(public readonly context: string) {\n super();\n }\n}\n\nexport class InfoMessage extends EventMessage {\n constructor(public readonly context: string) {\n super();\n }\n}\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Core\n */\nimport { type SystemTask } from \"../interfaces\";\nimport { MessageWriter } from \"./io\";\n\nexport class MessageRegistry {\n systemTaskMap = new Map<any, SystemTask[]>();\n\n /**\n * Register the message and corresponding system and return an uninstallation function\n */\n register(\n messageClass: any,\n systemFn: (...args: any[]) => any,\n priority: number = 0,\n ): () => void {\n const systems = this.systemTaskMap.get(messageClass) || [];\n const existingIndex = systems.findIndex(\n (s) =>\n (s.fn as any).systemContext.originalMethod ===\n (systemFn as any).systemContext.originalMethod,\n );\n if (existingIndex === -1) {\n systems.push({ fn: systemFn, priority });\n systems.sort((a, b) => b.priority - a.priority);\n this.systemTaskMap.set(messageClass, systems);\n } else {\n // Check for duplicate registrations\n const funcName = (systemFn as any).methodName;\n const targetClass = (systemFn as any).targetClass;\n MessageWriter.error(\n new Error(\n `[Virid Error] System Already Registered: Message Class ${messageClass.name}, Location ${targetClass.name}.${funcName}`,\n ),\n );\n return () => {};\n }\n\n return () => {\n const currentSystems = this.systemTaskMap.get(messageClass);\n if (currentSystems) {\n const index = currentSystems.findIndex((s) => s.fn === systemFn);\n if (index !== -1) {\n currentSystems.splice(index, 1);\n // 如果该消息类型没有任何监听者了,清理掉 Key,保持内存干净\n if (currentSystems.length === 0) {\n this.systemTaskMap.delete(messageClass);\n }\n }\n }\n };\n }\n}\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Core\n */\nimport { MessageWriter } from \"./io\";\nimport { type BaseMessage, EventMessage, SingleMessage } from \"./message\";\n\nexport class Staging {\n public signalActive = new Map<any, any[]>();\n public eventActive: any[] = [];\n private signalStaging = new Map<any, any[]>();\n private eventStaging: any[] = [];\n\n stage(event: BaseMessage) {\n if (event instanceof SingleMessage) {\n const type = event.constructor;\n if (!this.signalStaging.has(type)) this.signalStaging.set(type, []);\n this.signalStaging.get(type)!.push(event);\n } else if (event instanceof EventMessage) {\n this.eventStaging.push(event);\n } else {\n MessageWriter.error(\n new Error(\n `[Virid Message] Invalid Message:\\n${event.constructor.name} must extend SingleMessage or EventMessage`,\n ),\n );\n }\n }\n\n flip() {\n this.signalActive = this.signalStaging;\n this.eventActive = this.eventStaging;\n this.signalStaging = new Map();\n this.eventStaging = [];\n }\n\n clearSignals() {\n // types.forEach((type) => this.signalActive.delete(type));\n this.signalActive = new Map();\n }\n\n clearEvents() {\n this.eventActive = [];\n }\n \n isEmpty() {\n return this.signalStaging.size === 0 && this.eventStaging.length === 0;\n }\n\n /**\n * 重置所有池子\n */\n reset() {\n this.signalActive = new Map();\n this.signalStaging = new Map();\n this.eventStaging = [];\n this.eventActive = [];\n }\n}\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Core\n */\n\nimport { MessageWriter } from \"./io\";\nimport {\n type ExecuteHook,\n type ExecuteHookContext,\n type SystemTask,\n type MessageIdentifier,\n type SystemContext,\n type TickHook,\n type TickHookContext,\n} from \"../interfaces\";\nimport { type BaseMessage } from \"./message\";\nimport { Staging } from \"./staging\";\n\nexport class Dispatcher {\n constructor(private maxDepth: number) {}\n private isRunning = false;\n private globalTick = 0;\n private internalDepth = 0;\n private staging = new Staging();\n\n private tickPayload: { [key: string]: any } = {};\n\n private beforeExecuteHooks: Array<{\n type: MessageIdentifier<any>;\n handler: ExecuteHook<any>;\n }> = [];\n private afterExecuteHooks: Array<{\n type: MessageIdentifier<any>;\n handler: ExecuteHook<any>;\n }> = [];\n\n private beforeTickHooks: Array<TickHook> = [];\n private afterTickHooks: Array<TickHook> = [];\n\n public addBeforeExecute<T extends BaseMessage>(\n type: MessageIdentifier<T>,\n hook: ExecuteHook<T>,\n front: boolean,\n ) {\n if (front)\n this.beforeExecuteHooks.unshift({\n type,\n handler: hook as ExecuteHook<any>,\n });\n else\n this.beforeExecuteHooks.push({ type, handler: hook as ExecuteHook<any> });\n }\n public addAfterExecute<T extends BaseMessage>(\n type: MessageIdentifier<T>,\n hook: ExecuteHook<T>,\n front: boolean,\n ) {\n if (front)\n this.afterExecuteHooks.unshift({\n type,\n handler: hook as ExecuteHook<any>,\n });\n else\n this.afterExecuteHooks.push({ type, handler: hook as ExecuteHook<any> });\n }\n public addBeforeTick(hook: TickHook, front: boolean) {\n if (front) this.beforeTickHooks.unshift(hook);\n else this.beforeTickHooks.push(hook);\n }\n public addAfterTick(hook: TickHook, front: boolean) {\n if (front) this.afterTickHooks.unshift(hook);\n else this.afterTickHooks.push(hook);\n }\n\n /**\n * Marking dirty data, Determine which pool to enter based on the base class\n */\n public stage(message: BaseMessage) {\n this.staging.stage(message);\n }\n\n public tick(systemTaskMap: Map<any, SystemTask[]>) {\n if (this.isRunning || this.staging.isEmpty()) return;\n\n if (this.internalDepth > this.maxDepth) {\n this.internalDepth = 0;\n this.staging.reset();\n console.error(\n new Error(\n `[Virid Dispatcher] Deadlock: Max depth reached ${this.maxDepth}, Possible infinite loop detected. The dispatcher will stop processing this tick.`,\n ),\n );\n return;\n }\n\n this.isRunning = true;\n this.internalDepth++;\n\n queueMicrotask(() => {\n try {\n // Execute tick hook, only triggered on the first time\n if (this.internalDepth == 1) {\n this.tickPayload = {};\n this.executeTickHooks(this.beforeTickHooks);\n }\n // Preparing to start execution\n this.staging.flip();\n // The tasks that should be performed to collect this tick\n const tasks = this.collectTasks(systemTaskMap);\n // Execute the task for this frame\n this.executeTasks(tasks);\n } catch (e) {\n MessageWriter.error(e as Error, \"[Virid Dispatcher] Unhandled Error\");\n } finally {\n // Release the lock and attempt the next round of execution\n this.isRunning = false;\n // Enter the next round of micro tick\n if (!this.staging.isEmpty()) {\n this.tick(systemTaskMap);\n } else {\n // Reset internal status\n this.staging.reset();\n this.internalDepth = 0;\n this.executeTickHooks(this.afterTickHooks);\n this.globalTick++;\n }\n }\n });\n }\n public tickSync(systemTaskMap: Map<any, SystemTask[]>) {\n if (this.staging.isEmpty()) return;\n\n this.internalDepth = 0;\n this.tickPayload = {};\n\n this.executeTickHooks(this.beforeTickHooks);\n\n while (!this.staging.isEmpty()) {\n if (this.internalDepth > this.maxDepth) {\n this.staging.reset();\n this.internalDepth = 0;\n console.error(\n new Error(\n `[Virid Dispatcher] Deadlock: Max depth reached ${this.maxDepth}, Possible infinite loop detected. Ticking aborted.`,\n ),\n );\n return;\n }\n this.internalDepth++;\n try {\n this.staging.flip();\n const tasks = this.collectTasks(systemTaskMap);\n this.executeTasks(tasks);\n } catch (e) {\n MessageWriter.error(\n e as Error,\n \"[Virid Dispatcher] Sub-Tick Unhandled Error\",\n );\n break;\n }\n }\n\n this.staging.reset();\n this.internalDepth = 0;\n this.executeTickHooks(this.afterTickHooks);\n this.globalTick++;\n }\n\n private collectTasks(systemTaskMap: Map<any, SystemTask[]>): ExecutionTask[] {\n const tasks: ExecutionTask[] = [];\n // Collect EVENT tasks and execute all associated systems for each message from front to back\n for (const msg of this.staging.eventActive) {\n const systems = systemTaskMap.get(msg.constructor) || [];\n systems.forEach((s) => {\n tasks.push(\n new ExecutionTask(\n s.fn,\n s.priority,\n msg,\n {\n context: (s.fn as any).systemContext as SystemContext,\n tick: this.globalTick,\n payload: {},\n },\n this.beforeExecuteHooks,\n this.afterExecuteHooks,\n ),\n );\n });\n }\n // Collect SIGNAL tasks (each system only runs once for that type)\n for (const [msg, msg_list] of this.staging.signalActive.entries()) {\n const systems = systemTaskMap.get(msg) || [];\n systems.forEach((s) => {\n tasks.push(\n new ExecutionTask(\n s.fn,\n s.priority,\n msg_list,\n {\n context: (s.fn as any).systemContext as SystemContext,\n tick: this.globalTick,\n payload: {},\n },\n this.beforeExecuteHooks,\n this.afterExecuteHooks,\n ),\n );\n });\n }\n return tasks;\n }\n private executeTasks(tasks: ExecutionTask[]) {\n // Regardless of the message type, sort according to the priority defined by the System\n tasks.sort((a, b) => b.priority - a.priority);\n for (const task of tasks) {\n const msg = Array.isArray(task.message) ? task.message[0] : task.message;\n try {\n const result = task.execute();\n // If it's a Promise, just register a catch to prevent crashes, don't await it\n if (result instanceof Promise) {\n result.catch((e) =>\n MessageWriter.error(\n e,\n `[Virid Dispatcher]: Async System Error.\\n` +\n `SystemLocation: ${task.hookContext.context.targetClass.name}.${task.hookContext.context.methodName}\\n` +\n `MessageName: ${msg.constructor.name}\\n` +\n `MessageData: ${JSON.stringify(task.message)}`,\n ),\n );\n }\n } catch (e) {\n MessageWriter.error(\n e as Error,\n `[Virid Dispatcher]: Sync System Error.\\n` +\n `SystemLocation: ${task.hookContext.context.targetClass.name}.${task.hookContext.context.methodName}\\n` +\n `MessageName: ${msg.constructor.name}\\n` +\n `MessageData: ${JSON.stringify(task.message)}`,\n );\n }\n }\n }\n\n private executeTickHooks(hooks: TickHook[]) {\n const hooksContext: TickHookContext = {\n tick: this.globalTick,\n timestamp: Date.now(),\n payload: this.tickPayload,\n };\n hooks.forEach((h) => h(hooksContext));\n }\n}\n\nexport class ExecutionTask {\n public success = true;\n constructor(\n public fn: (...args: any[]) => any,\n public priority: number,\n public message: any, // T or T[]\n public hookContext: ExecuteHookContext,\n public beforeExecuteHooks: Array<{\n type: MessageIdentifier<any>;\n handler: ExecuteHook<any>;\n }>,\n public afterExecuteHooks: Array<{\n type: MessageIdentifier<any>;\n handler: ExecuteHook<any>;\n }>,\n ) {}\n\n private triggerHooks(\n hooks: Array<{\n type: MessageIdentifier<any>;\n handler: ExecuteHook<any>;\n }>,\n ) {\n const sample = Array.isArray(this.message) ? this.message[0] : this.message;\n if (!sample) return;\n\n for (const hook of hooks) {\n if (sample instanceof hook.type) {\n try {\n const result = hook.handler(\n this.message,\n this.hookContext,\n this.success,\n );\n if (result instanceof Promise) {\n result.catch((e) => {\n MessageWriter.error(\n e,\n `[Virid Hook] Async Hook Error: It is prohibited to use asynchronous hooks within Hook: ${hook.type.name}`,\n );\n });\n }\n } catch (e) {\n MessageWriter.error(\n e as Error,\n `[Virid Hook] Hook Execute Failed: Triggered by: ${sample.constructor.name}, Registered type: ${hook.type.name}`,\n );\n }\n }\n }\n }\n\n public execute(): any {\n this.triggerHooks(this.beforeExecuteHooks);\n const runAfter = () => this.triggerHooks(this.afterExecuteHooks);\n\n try {\n const result = this.fn(this.message);\n\n if (result instanceof Promise) {\n // Asynchronous mode utilizes. finally to ensure hook execution\n return result.catch(() => (this.success = false)).finally(runAfter);\n }\n // If it is synchronization, execute it directly with a post hook and return it\n runAfter();\n return result;\n } catch (e) {\n // If an error occurs, execute the post hook as well\n this.success = false;\n runAfter();\n throw e; // Try catch processing thrown to Dispatcher\n }\n }\n}\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Core\n */\n\nimport {\n type ExecuteHook,\n type TickHook,\n type MessageIdentifier,\n type Middleware,\n} from \"../interfaces\";\nimport { BaseMessage } from \"./message\";\nimport { MessageRegistry } from \"./registry\";\nimport { MessageWriter, activateInstance } from \"./io\";\nimport { Dispatcher } from \"./dispatcher\";\n\nexport class MessageEngine {\n private dispatcher: Dispatcher;\n private registry = new MessageRegistry();\n private middlewares: Middleware[] = [];\n private manual: boolean;\n\n constructor(maxDepth: number, manual: boolean) {\n this.dispatcher = new Dispatcher(maxDepth);\n this.manual = manual;\n // 修改\n activateInstance(this);\n }\n\n useMiddleware(mw: Middleware, front: boolean) {\n this.middlewares.push(mw);\n }\n onBeforeExecute<T extends BaseMessage>(\n type: MessageIdentifier<T>,\n hook: ExecuteHook<T>,\n front: boolean,\n ) {\n this.dispatcher.addBeforeExecute(type, hook, front);\n }\n onAfterExecute<T extends BaseMessage>(\n type: MessageIdentifier<T>,\n hook: ExecuteHook<T>,\n front: boolean,\n ) {\n this.dispatcher.addAfterExecute(type, hook, front);\n }\n onBeforeTick(hook: TickHook, front: boolean) {\n this.dispatcher.addBeforeTick(hook, front);\n }\n onAfterTick(hook: TickHook, front: boolean) {\n this.dispatcher.addAfterTick(hook, front);\n }\n\n tick() {\n this.dispatcher.tickSync(this.registry.systemTaskMap);\n }\n\n dispatch(message: BaseMessage) {\n if (!(message instanceof BaseMessage)) {\n MessageWriter.error(\n new Error(\n `[Virid Dispatch] Type Error: Message must be an instance of BaseMessage,message:${message}`,\n ),\n );\n return;\n }\n // 运行中间件管道\n this.pipeline(message, () => {\n //看看这个消息的处理函数在this.systemTaskMap里有吗?没有就报错\n if (!this.registry.systemTaskMap.has(message.constructor)) {\n MessageWriter.error(\n new Error(\n `[Virid Dispatch] No handler for message: ${message.constructor.name}`,\n ),\n );\n return;\n }\n this.dispatcher.stage(message);\n if (!this.manual) {\n this.dispatcher.tick(this.registry.systemTaskMap);\n }\n });\n }\n\n private pipeline(message: BaseMessage, finalAction: () => void) {\n let index = 0;\n const next = () => {\n if (index < this.middlewares.length) {\n this.middlewares[index++](message, next);\n } else {\n finalAction();\n }\n };\n next();\n }\n\n register(\n messageClass: any,\n systemFn: (...args: any[]) => any,\n priority: number = 0,\n ): () => void {\n return this.registry.register(messageClass, systemFn, priority);\n }\n}\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Core\n */\n\nexport const VIRID_METADATA = {\n SYSTEM: \"virid:core:system\",\n MESSAGE: \"virid:core:message\",\n CONTROLLER: \"virid:core:controller\",\n COMPONENT: \"virid:core:component\",\n SAFE: \"virid:core:safe\",\n OBSERVER: \"virid:core:observer\",\n} as const;\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Core\n */\nimport { BaseMessage, MessageWriter, SingleMessage } from \"../core\";\nimport { VIRID_METADATA } from \"./constant\";\nimport {\n type SystemContext,\n type Newable,\n type SystemParams,\n type ObserverMetadata,\n type SafeMetadata,\n SystemConfig,\n} from \"../interfaces\";\n\n// Unified processing of return values: System can directly return a message to achieve a chain reaction\nexport function handleResult(res: any) {\n if (!res) return;\n const messages = Array.isArray(res) ? res : [res];\n messages.forEach((m) => {\n if (m instanceof BaseMessage) {\n MessageWriter.write(m);\n } else {\n MessageWriter.warn(\n `[Virid HandleResult] Invalid Return Type: Must return Message or Message[].`,\n );\n }\n });\n}\n\n/**\n * Check if there are multiple message type parameters in the parameters\n * @param types Parameter list\n */\nfunction checkMessageParam(types: Array<any>) {\n const foundMatches: { type: any; idx: number }[] = [];\n\n types.forEach((type, idx) => {\n const isBaseMessage =\n type === BaseMessage || (type && type.prototype instanceof BaseMessage);\n\n if (isBaseMessage) {\n foundMatches.push({ type, idx });\n }\n });\n\n if (foundMatches.length === 0) {\n return null;\n }\n\n if (foundMatches.length > 1) {\n // 发现多个,把所有的错误信息组合起来抛出\n const errorDetails = foundMatches\n .map((item) => `[Index: ${item.idx}, Name: ${item.type.name}]`)\n .join(\", \");\n\n throw new Error(\n `[Virid System] Multiple Messages: Multiple Message type parameters detected, this is not allowed! specific location: ${errorDetails}`,\n );\n }\n\n return foundMatches[0];\n}\n\n/**\n * System Decorator\n * @param params Priority and MessageClass config\n */\nexport function System(\n params: SystemParams = {\n messageClass: null,\n priority: 0,\n },\n) {\n return (target: any, key: string, descriptor: PropertyDescriptor) => {\n if (typeof target !== \"function\") {\n throw new Error(\n `[Virid System] Method Type Error: The Method ${key} is not a static method, please check if there is a static keyword tag.`,\n );\n }\n\n const originalMethod = descriptor.value;\n const types: Array<any> = Reflect.getMetadata(\n \"design:paramtypes\",\n target,\n key,\n );\n\n // Verify if metadata exists\n if (!types) {\n throw new Error(\n `[Virid System] System Parameter Loss: Unable to recognize system parameters, please confirm if import \"reflect-metadata\" was introduced at the beginning.`,\n );\n }\n\n // Verify if there are undefined parameters\n const undefinedIndices = types\n .map((t, i) => (t === undefined ? i : -1))\n .filter((i) => i !== -1);\n if (undefinedIndices.length > 0) {\n throw new Error(\n `[Virid System] Parameter Metadata Loss in \"${key}\": One or more parameters have 'undefined' types. This usually happens when you forget to add a type annotation or due to circular dependencies. Check parameter at indices: [${undefinedIndices.join(\", \")}]`,\n );\n }\n\n let messageClass: Newable<BaseMessage>;\n // eslint-disable-next-line no-useless-assignment\n let messageIdx: number = -1;\n let batchMode = false;\n const listIdx = types.indexOf(Array);\n\n if (listIdx !== -1) {\n // Batch processing mode (with Array parameters)\n if (!params.messageClass) {\n throw new Error(\n `[Virid System] System Parameter Loss: When using batch processing mode with Array, the messageClass parameter must be specified in decorator options.`,\n );\n }\n if (!(params.messageClass.prototype instanceof SingleMessage)) {\n throw new Error(\n `[Virid System] System Parameter Loss: When using the batch processing mode, the messageClass parameter must inherit from SingleMessage.`,\n );\n }\n messageClass = params.messageClass;\n messageIdx = listIdx; // In batch processing mode, idx points to the position of Array\n batchMode = true;\n } else {\n // Non batch processing mode\n const matchedMessage = checkMessageParam(types); // { type: any, idx: number } | null\n\n if (matchedMessage && params.messageClass) {\n throw new Error(\n `[Virid System] Multiple Messages Are Not Allowed: Cannot specify messageClass in decorator options while already declaring it in method parameters at index ${matchedMessage.idx} in ${key}.`,\n );\n }\n\n if (matchedMessage) {\n messageClass = matchedMessage.type;\n messageIdx = matchedMessage.idx; // In single mode, idx points to the location of a specific BaseMessage subclass\n } else if (params.messageClass) {\n messageClass = params.messageClass;\n messageIdx = -1; // Only provided in the configuration, cannot be found in the parameters, set to -1\n } else {\n throw new Error(\n `[Virid System] System Parameter Loss: Please declare the message type either in method parameters or via the Message decorator options.`,\n );\n }\n }\n\n // Attach contextual information to the packaged function\n const systemContext: SystemContext = {\n params: types,\n targetClass: target,\n methodName: key,\n originalMethod: originalMethod,\n };\n const systemConfig: SystemConfig = {\n messageClass: messageClass,\n messageIdx: messageIdx,\n priority: params.priority || 0,\n batchMode: batchMode,\n };\n\n // Purely mounting data without changing the execution logic of the original method\n (descriptor.value as any).systemContext = systemContext;\n (descriptor.value as any).systemConfig = systemConfig;\n };\n}\n\n/**\n * Is the method used to identify the controller or component safe and can be directly called by other controllers\n */\nexport function Safe() {\n return (target: any, key: string, _descriptor: PropertyDescriptor) => {\n const safeMethods: SafeMetadata =\n Reflect.getMetadata(VIRID_METADATA.SAFE, target) || new Set<string>();\n safeMethods.add(key);\n Reflect.defineMetadata(VIRID_METADATA.SAFE, safeMethods, target);\n };\n}\n\n/**\n * Observer Decorator\n */\nexport function Observer(\n callback: (oldVal: any, newVale: any) => void | BaseMessage | BaseMessage[],\n) {\n return (target: any, propertyKey: string) => {\n const observerMetadata: ObserverMetadata =\n Reflect.getMetadata(VIRID_METADATA.OBSERVER, target) || [];\n observerMetadata.push({ propertyKey, callback });\n Reflect.defineMetadata(VIRID_METADATA.OBSERVER, observerMetadata, target);\n };\n}\n\n/**\n * Controller Decorator\n */\nexport function Controller() {\n return (target: any) => {\n Reflect.defineMetadata(VIRID_METADATA.CONTROLLER, true, target);\n };\n}\n/**\n * Component Decorator\n */\nexport function Component() {\n return (target: any) => {\n // 打上组件标签\n Reflect.defineMetadata(VIRID_METADATA.COMPONENT, true, target);\n };\n}\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Core\n */\nimport { type ObserverItem } from \"../interfaces\";\nimport { handleResult } from \"./decorator\";\nimport { VIRID_METADATA } from \"./constant\";\nconst ARRAY_MUTABLE_METHODS = [\n \"push\",\n \"pop\",\n \"shift\",\n \"unshift\",\n \"splice\",\n \"sort\",\n \"reverse\",\n];\nexport function bindObservers(instance: any) {\n if (!instance || typeof instance !== \"object\") return instance;\n if (\n Object.prototype.hasOwnProperty.call(\n instance,\n \"__virid_observer_processed__\",\n )\n )\n return instance;\n\n Object.defineProperty(instance, \"__virid_observer_processed__\", {\n value: true,\n enumerable: false,\n configurable: true,\n });\n\n const observerConfigs: ObserverItem[] =\n Reflect.getMetadata(VIRID_METADATA.OBSERVER, instance) || [];\n\n observerConfigs.forEach(({ propertyKey, callback }) => {\n // 创建逻辑单元:一个闭包 Box\n const box = { value: instance[propertyKey] };\n const logicProxy = new Proxy(box, {\n get(target, prop) {\n const value = target.value;\n\n // 数组变动拦截\n if (\n Array.isArray(value) &&\n ARRAY_MUTABLE_METHODS.includes(prop as string)\n ) {\n return (...args: any[]) => {\n const oldVal = [...value];\n const result = (value as any)[prop].apply(value, args);\n const observerResult = callback.call(instance, oldVal, value);\n handleResult(observerResult);\n\n return result;\n };\n }\n return value;\n },\n set(target, _prop, newVal) {\n const oldVal = target.value;\n if (newVal === oldVal) return true;\n\n target.value = newVal;\n const result = callback.call(instance, oldVal, newVal);\n handleResult(result);\n return true;\n },\n });\n // 在 bindObservers 的 forEach 内部\n const getter = () => logicProxy.value;\n (getter as any).__virid_box__ = box; // 重点:把闭包里的 box 暴露给后续插件\n\n Object.defineProperty(instance, propertyKey, {\n get: getter, // 纯转发\n set: (v) => {\n logicProxy.value = v;\n }, // 纯转发\n enumerable: true,\n configurable: true,\n });\n\n // 初次递归扫描\n if (box.value && typeof box.value === \"object\") {\n bindObservers(box.value);\n }\n });\n\n // 处理未标记但属于子组件的对象\n Reflect.ownKeys(instance).forEach((key) => {\n if (key === \"__virid_observer_processed__\") return;\n const desc = Object.getOwnPropertyDescriptor(instance, key);\n if (desc && desc.get) return;\n const val = instance[key];\n if (val && typeof val === \"object\") {\n bindObservers(val);\n }\n });\n return instance;\n}\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Core\n */\n\nimport { Newable } from \"./interfaces\";\nimport { VIRID_METADATA } from \"./decorators/constant\";\n\ninterface Binding {\n type: \"singleton\" | \"transient\";\n ctor: Newable<any>;\n}\n\nexport class ViridContainer {\n private bindings = new Map<any, Binding>();\n private singletonInstances = new Map<any, any>();\n private activationHooks: Array<(instance: any) => any> = [];\n /**\n * Register an activation hook\n * @param hook An activation hook\n * @param front Is the hook order inserted from the front or added\n */\n public addActivationHook(hook: (instance: any) => any, front: boolean) {\n if (front) this.activationHooks.unshift(hook);\n else this.activationHooks.push(hook);\n }\n /**\n * Static binding component or controller\n * @param identifier Constructor of components or controllers\n */\n public bind<T>(identifier: Newable<T>) {\n //Check if the constructor has mandatory parameters\n if (identifier.length > 0) {\n throw new Error(\n `[Virid Container] Cannot Bind Component Or Controller: The Class ${identifier.name} should not have mandatory parameters.`,\n );\n }\n if (Reflect.getMetadata(VIRID_METADATA.COMPONENT, identifier)) {\n const binding: Binding = {\n type: \"singleton\",\n ctor: identifier,\n };\n this.bindings.set(identifier, binding);\n } else if (Reflect.getMetadata(VIRID_METADATA.CONTROLLER, identifier)) {\n const binding: Binding = { type: \"transient\", ctor: identifier };\n this.bindings.set(identifier, binding);\n } else {\n throw new Error(\n `[Virid Container] Cannot Bind Component Or Controller: The Class ${identifier.name} is not decorated with @Component or @Controller`,\n );\n }\n }\n /**\n * Dynamically register a component\n * @param instance Component instance\n */\n public spawn(instance: object) {\n const identifier = instance.constructor as Newable<any>;\n if (Reflect.hasMetadata(VIRID_METADATA.COMPONENT, identifier)) {\n const binding: Binding = { type: \"singleton\", ctor: identifier };\n this.bindings.set(identifier, binding);\n this.singletonInstances.set(identifier, instance);\n } else {\n throw new Error(\n `[Virid Container] Cannot spawn Component: The Class ${identifier.name} is not decorated with @Component`,\n );\n }\n }\n /**\n * Obtain a Component or Controller instance\n * @param identifier Constructor of components or controllers\n */\n public get<T>(identifier: Newable<T>): T {\n const binding = this.bindings.get(identifier);\n if (!binding) {\n throw new Error(\n `[Virid Container] Cannot Get Component Or Controller: No binding found for ${identifier}`,\n );\n }\n const TargetCtor = binding.ctor;\n\n if (binding.type === \"singleton\") {\n if (!this.singletonInstances.has(identifier)) {\n // first creation\n const rawInstance = new TargetCtor();\n const processedInstance = this.handleActivation(rawInstance);\n this.singletonInstances.set(identifier, processedInstance);\n }\n return this.singletonInstances.get(identifier);\n }\n\n // Transient\n const instance = new TargetCtor();\n return this.handleActivation(instance);\n }\n private handleActivation<T>(instance: T): T {\n for (const hook of this.activationHooks) {\n instance = hook(instance);\n }\n return instance;\n }\n}\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Core\n */\nimport { ViridContainer } from \"./container\";\nimport {\n type ExecuteHook,\n type MessageIdentifier,\n type Middleware,\n type TickHook,\n type Newable,\n type SystemContext,\n type SystemConfig,\n} from \"./interfaces\";\nimport {\n BaseMessage,\n MessageWriter,\n MessageEngine,\n EventMessage,\n SingleMessage,\n} from \"./core\";\nimport { handleResult, Component } from \"./decorators\";\n\nexport interface ViridPlugin<T = any> {\n name: string;\n install: (app: ViridApp, options: T) => void;\n}\n\n@Component()\nexport class ViridApp {\n public container: ViridContainer = new ViridContainer();\n public engine: MessageEngine;\n private installedPlugins = new Set<string>();\n\n constructor(maxDepth: number, manual: boolean) {\n this.engine = new MessageEngine(maxDepth, manual);\n this.container.spawn(this);\n }\n\n /**\n * Register an activation hook\n * @param hook An activation hook\n * @param front Is the hook order inserted from the front or added\n */\n onActivate(hook: (instance: any) => any, front: boolean = false) {\n this.container.addActivationHook(hook, front);\n }\n\n /**\n * Opening a new tick\n */\n tick() {\n this.engine.tick();\n }\n\n /**\n * Obtain a Component or Controller instance\n * @param identifier Constructor of components or controllers\n */\n get<T>(identifier: Newable<T>): T {\n return this.container.get(identifier);\n }\n\n /**\n * Static binding component or controller\n * @param identifier Constructor of components or controllers\n */\n bind<T>(identifier: Newable<T>) {\n this.container.bind(identifier);\n }\n /**\n * Dynamically register a component\n * @param instance Component instance\n */\n spawn(instance: object) {\n this.container.spawn(instance);\n }\n useMiddleware(mw: Middleware, front = false) {\n this.engine.useMiddleware(mw, front);\n }\n onBeforeExecute<T extends BaseMessage>(\n type: MessageIdentifier<T>,\n hook: ExecuteHook<T>,\n front = false,\n ) {\n this.engine.onBeforeExecute(type, hook, front);\n }\n onAfterExecute<T extends BaseMessage>(\n type: MessageIdentifier<T>,\n hook: ExecuteHook<T>,\n front = false,\n ) {\n this.engine.onAfterExecute(type, hook, front);\n }\n onBeforeTick(hook: TickHook, front = false) {\n this.engine.onBeforeTick(hook, front);\n }\n onAfterTick(hook: TickHook, front = false) {\n this.engine.onAfterTick(hook, front);\n }\n\n use<T>(plugin: ViridPlugin<T>, options: T): this {\n if (this.installedPlugins.has(plugin.name)) {\n MessageWriter.warn(\n `[Virid Plugin] Duplicate Installation: Plugin ${plugin.name} has already been installed.`,\n );\n return this;\n }\n try {\n plugin.install(this, options);\n this.installedPlugins.add(plugin.name);\n } catch (e) {\n MessageWriter.error(\n e as Error,\n `[Virid Plugin]: Install Failed: ${plugin.name}`,\n );\n }\n return this;\n }\n /**\n * Register message to registrar\n * @param systemFn System functions\n */\n register(systemFn: (...args: any[]) => any): () => void {\n const systemContext: SystemContext = (systemFn as any).systemContext;\n const systemConfig: SystemConfig = (systemFn as any).systemConfig;\n\n if (!systemContext || !systemConfig) {\n throw new Error(\n `[Virid System] System Parameter Loss: Please declare ${systemFn.name} using the @System decorator first.`,\n );\n }\n\n const { params: types, targetClass, originalMethod } = systemContext;\n const { messageClass, messageIdx, priority, batchMode } = systemConfig;\n\n const handleResultFn =\n typeof handleResult === \"function\" ? handleResult : (res: any) => res;\n const processResult = (result: any) => {\n return result instanceof Promise\n ? result.then(handleResultFn)\n : handleResultFn(result);\n };\n\n const cachedComponents = new Array(types.length);\n let isInitialized = false;\n\n const initDeps = () => {\n for (let i = 0; i < types.length; i++) {\n if (i !== messageIdx) {\n const dep = this.get(types[i]);\n if (!dep) {\n throw new Error(\n `[Virid System] Unknown Inject Data Types: ${types[i].name || types[i]} is not registered in the container for system '${systemFn.name}'!`,\n );\n }\n cachedComponents[i] = dep;\n }\n }\n isInitialized = true;\n };\n\n let wrappedSystem: (currentMessage: EventMessage | SingleMessage[]) => any;\n\n if (messageIdx === -1) {\n wrappedSystem = () => {\n if (!isInitialized) initDeps();\n return processResult(\n originalMethod.apply(targetClass, cachedComponents),\n );\n };\n } else if (types.length === 1) {\n if (batchMode) {\n wrappedSystem = (currentMessage: EventMessage | SingleMessage[]) => {\n const payload = Array.isArray(currentMessage)\n ? currentMessage\n : [currentMessage];\n\n if (payload.length > 0 && !(payload[0] instanceof messageClass)) {\n throw new Error(\n `[Virid System] Type Mismatch: Expected list of ${messageClass.name}, but got ${payload[0]?.constructor?.name}`,\n );\n }\n\n return processResult(originalMethod.call(targetClass, payload));\n };\n } else {\n wrappedSystem = (currentMessage: EventMessage | SingleMessage[]) => {\n const payload = Array.isArray(currentMessage)\n ? currentMessage[currentMessage.length - 1]\n : currentMessage;\n\n if (!(payload instanceof messageClass)) {\n throw new Error(\n `[Virid System] Type Mismatch: Expected ${messageClass.name}, but got ${(payload as any)?.constructor?.name}`,\n );\n }\n\n return processResult(originalMethod.call(targetClass, payload));\n };\n }\n } else {\n if (batchMode) {\n wrappedSystem = (currentMessage: EventMessage | SingleMessage[]) => {\n if (!isInitialized) initDeps();\n const payload = Array.isArray(currentMessage)\n ? currentMessage\n : [currentMessage];\n\n if (payload.length > 0 && !(payload[0] instanceof messageClass)) {\n throw new Error(\n `[Virid System] Type Mismatch: Expected list of ${messageClass.name}, but got ${payload[0]?.constructor?.name}`,\n );\n }\n\n const callArgs = [...cachedComponents];\n callArgs[messageIdx] = payload;\n return processResult(originalMethod.apply(targetClass, callArgs));\n };\n } else {\n wrappedSystem = (currentMessage: EventMessage | SingleMessage[]) => {\n if (!isInitialized) initDeps();\n const payload = Array.isArray(currentMessage)\n ? currentMessage[currentMessage.length - 1]\n : currentMessage;\n\n if (!(payload instanceof messageClass)) {\n throw new Error(\n `[Virid System] Type Mismatch: Expected ${messageClass.name}, but got ${(payload as any)?.constructor?.name}`,\n );\n }\n\n const callArgs = [...cachedComponents];\n callArgs[messageIdx] = payload;\n return processResult(originalMethod.apply(targetClass, callArgs));\n };\n }\n }\n\n (wrappedSystem as any).systemContext = systemContext;\n\n return this.engine.register(messageClass, wrappedSystem, priority);\n }\n}\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Core\n */\nimport { type ViridApp } from \"./app\";\nimport { ErrorMessage, InfoMessage, WarnMessage } from \"./core\";\nimport { System } from \"./decorators\";\n\nlet globalSwitch = true;\n\nexport function toggleSwitch(enable: boolean) {\n globalSwitch = enable;\n}\n\nconst clr = {\n reset: \"\\x1b[0m\",\n red: \"\\x1b[31m\",\n yellow: \"\\x1b[33m\",\n blue: \"\\x1b[34m\",\n magenta: \"\\x1b[35m\",\n cyan: \"\\x1b[36m\",\n gray: \"\\x1b[90m\",\n bold: \"\\x1b[1m\",\n green: \"\\x1b[32m\",\n};\n\nclass ViridLogHandler {\n /**\n * Register the global default information processing system\n */\n @System()\n static globalInfoHandler(info: InfoMessage) {\n if (!globalSwitch) return;\n const header = `${clr.green}${clr.bold} ✔ [Virid Info] ${clr.reset}`;\n console.log(\n `${header}${clr.gray} Global Info Caught: ${clr.reset}\\n` +\n `${clr.green} Details: ${clr.reset}`,\n info.context || \"unknown Info\",\n );\n }\n\n /**\n * Register the global default error handling system\n */\n @System()\n static globalErrorHandler(err: ErrorMessage) {\n if (!globalSwitch) return;\n const header = `${clr.red}${clr.bold} ✖ [Virid Error] ${clr.reset}`;\n\n console.error(\n `${header}${clr.gray} Global Error Caught: ${clr.reset}\\n` +\n `${clr.red} Context: ${clr.reset} ${err.context}\\n` +\n `${clr.red} Details: ${clr.reset}`,\n err.error || err || \"unknown Error\",\n );\n }\n\n /**\n * Register the global default warning handling system\n */\n @System()\n static globalWarnHandler(warn: WarnMessage) {\n if (!globalSwitch) return;\n const header = `${clr.yellow}${clr.bold} ⚠ [Virid Warn] ${clr.reset}`;\n console.warn(\n `${header}${clr.gray} Global Warn Caught: ${clr.reset}\\n` +\n `${clr.yellow} Context:${clr.reset} ${warn.context}`,\n );\n }\n}\n\nexport function registerBasicSystems(app: ViridApp) {\n app.register(ViridLogHandler.globalInfoHandler);\n app.register(ViridLogHandler.globalErrorHandler);\n app.register(ViridLogHandler.globalWarnHandler);\n}\n","/*\n * Copyright (c) 2026-present Ailrid\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * Description: Virid Core Dispatcher - The heart of CCS Architecture.\n */\nexport * from \"./interfaces\";\nexport * from \"./core\";\nexport * from \"./decorators\";\nexport * from \"./app\";\n\nimport { ViridApp } from \"./app\";\nimport { AppConfig, defaultConfig } from \"./interfaces\";\nimport { toggleSwitch, registerBasicSystems } from \"./utils\";\nimport { bindObservers } from \"./decorators/bind\";\n\nexport function createVirid(config: AppConfig = defaultConfig): ViridApp {\n config = { ...defaultConfig, ...config };\n const app = new ViridApp(config.maxDepth!, config.manual!);\n\n registerBasicSystems(app);\n toggleSwitch(config.enableLog!);\n app.onActivate(bindObservers);\n const self = app;\n app.spawn(self);\n return app;\n}\n"],"mappings":";;;;4NAgBA,IAAMA,EAA2B,CAC/BC,SAAU,IACVC,UAAW,GACXC,OAAQ,EACV,ECNA,IAAIC,EAAuC,KACpC,SAASC,GAAiBC,EAAuB,CACtDF,EAAiBE,CACnB,CAFgBD,EAAAA,GAAAA,oBAIhB,SAASE,GAASC,EAAoB,CAChCJ,EACFA,EAAeG,SAASC,CAAAA,EAExBC,QAAQC,MAAM,iDAAA,CAElB,CANSH,EAAAA,GAAAA,YAQF,IAAMI,EAAN,MAAMA,CAAAA,CACX,OAAcC,MACZC,KACGC,EACG,CACN,IAAMR,EACJ,OAAOO,GAAW,WACd,IAAKA,EAAAA,GAAkBC,CAAAA,EACtBD,EAEPN,GAASD,CAAAA,CACX,CAEA,OAAcI,MAAMK,EAAUC,EAAkB,GAAU,CACxD,KAAKJ,MAAM,IAAIK,EAAaF,EAAGC,CAAAA,CAAAA,CACjC,CAEA,OAAcE,KAAKF,EAAuB,CACxC,KAAKJ,MAAM,IAAIO,EAAYH,CAAAA,CAAAA,CAC7B,CACA,OAAcI,KAAKJ,EAAuB,CACxC,KAAKJ,MAAM,IAAIS,EAAYL,CAAAA,CAAAA,CAC7B,CACF,EAvBaL,EAAAA,EAAAA,iBAAN,IAAMA,EAANW,ECnBA,IAAeC,EAAf,MAAeA,CAAAA,CACpB,OAAOC,QAEFC,EACH,CACAC,EAAcC,MAAM,KAAI,GAAYF,CAAAA,CACtC,CACF,EAPsBF,EAAAA,EAAAA,eAAf,IAAeA,EAAfK,EASeC,EAAf,MAAeA,UAAsBN,CAAAA,CAC1C,aAAc,CACZ,MAAK,CACP,CACF,EAJ4CA,EAAAA,EAAAA,iBAArC,IAAeM,EAAfC,EAMeC,EAAf,MAAeA,UAAqBR,CAAAA,CACzC,aAAc,CACZ,MAAK,CACP,CACF,EAJ2CA,EAAAA,EAAAA,gBAApC,IAAeQ,EAAfC,EAMMC,EAAN,MAAMA,UAAqBF,CAAAA,CAChC,YACkBG,EACAC,EAChB,CACA,MAAK,oCAAA,KAHWD,MAAAA,EAAAA,KACAC,QAAAA,CAGlB,CACF,EAPkCJ,EAAAA,EAAAA,gBAA3B,IAAME,EAANG,EASMC,EAAN,MAAMA,UAAoBN,CAAAA,CAC/B,YAA4BI,EAAiB,CAC3C,MAAK,oBAAA,KADqBA,QAAAA,CAE5B,CACF,EAJiCJ,EAAAA,EAAAA,eAA1B,IAAMM,EAANC,EAMMC,EAAN,MAAMA,UAAoBR,CAAAA,CAC/B,YAA4BI,EAAiB,CAC3C,MAAK,oBAAA,KADqBA,QAAAA,CAE5B,CACF,EAJiCJ,EAAAA,EAAAA,eAA1B,IAAMQ,EAANC,ECpCA,IAAMC,GAAN,MAAMA,EAAAA,CAAN,cACLC,EAAAA,qBAAgB,IAAIC,KAKpBC,SACEC,EACAC,EACAC,EAAmB,EACP,CACZ,IAAMC,EAAU,KAAKN,cAAcO,IAAIJ,CAAAA,GAAiB,CAAA,EAMxD,GALsBG,EAAQE,UAC3BC,GACEA,EAAEC,GAAWC,cAAcC,iBAC3BR,EAAiBO,cAAcC,cAAc,IAE5B,GACpBN,EAAQO,KAAK,CAAEH,GAAIN,EAAUC,SAAAA,CAAS,CAAA,EACtCC,EAAQQ,KAAK,CAACC,EAAGC,IAAMA,EAAEX,SAAWU,EAAEV,QAAQ,EAC9C,KAAKL,cAAciB,IAAId,EAAcG,CAAAA,MAChC,CAEL,IAAMY,EAAYd,EAAiBe,WAC7BC,EAAehB,EAAiBgB,YACtCC,OAAAA,EAAcC,MACZ,IAAIC,MACF,0DAA0DpB,EAAaqB,IAAI,cAAcJ,EAAYI,IAAI,IAAIN,CAAAA,EAAU,CAAA,EAGpH,IAAA,CAAO,CAChB,CAEA,MAAO,IAAA,CACL,IAAMO,EAAiB,KAAKzB,cAAcO,IAAIJ,CAAAA,EAC9C,GAAIsB,EAAgB,CAClB,IAAMC,EAAQD,EAAejB,UAAWC,GAAMA,EAAEC,KAAON,CAAAA,EACnDsB,IAAU,KACZD,EAAeE,OAAOD,EAAO,CAAA,EAEzBD,EAAeG,SAAW,GAC5B,KAAK5B,cAAc6B,OAAO1B,CAAAA,EAGhC,CACF,CACF,CACF,EA/CaJ,EAAAA,GAAAA,mBAAN,IAAMA,EAAN+B,GCAA,IAAMC,GAAN,MAAMA,EAAAA,CAAN,cACEC,EAAAA,oBAAe,IAAIC,KACnBC,EAAAA,mBAAqB,CAAA,GACpBC,EAAAA,qBAAgB,IAAIF,KACpBG,EAAAA,oBAAsB,CAAA,GAE9BC,MAAMC,EAAoB,CACxB,GAAIA,aAAiBC,EAAe,CAClC,IAAMC,EAAOF,EAAM,YACd,KAAKH,cAAcM,IAAID,CAAAA,GAAO,KAAKL,cAAcO,IAAIF,EAAM,CAAA,CAAE,EAClE,KAAKL,cAAcQ,IAAIH,CAAAA,EAAOI,KAAKN,CAAAA,CACrC,MAAWA,aAAiBO,EAC1B,KAAKT,aAAaQ,KAAKN,CAAAA,EAEvBQ,EAAcC,MACZ,IAAIC,MACF;EAAqCV,EAAM,YAAYW,IAAI,4CAA4C,CAAA,CAI/G,CAEAC,MAAO,CACL,KAAKlB,aAAe,KAAKG,cACzB,KAAKD,YAAc,KAAKE,aACxB,KAAKD,cAAgB,IAAIF,IACzB,KAAKG,aAAe,CAAA,CACtB,CAEAe,cAAe,CAEb,KAAKnB,aAAe,IAAIC,GAC1B,CAEAmB,aAAc,CACZ,KAAKlB,YAAc,CAAA,CACrB,CAEAmB,SAAU,CACR,OAAO,KAAKlB,cAAcmB,OAAS,GAAK,KAAKlB,aAAamB,SAAW,CACvE,CAKAC,OAAQ,CACN,KAAKxB,aAAe,IAAIC,IACxB,KAAKE,cAAgB,IAAIF,IACzB,KAAKG,aAAe,CAAA,EACpB,KAAKF,YAAc,CAAA,CACrB,CACF,EAnDaH,EAAAA,GAAAA,WAAN,IAAMA,EAAN0B,GCWA,IAAMC,GAAN,MAAMA,EAAAA,CACX,YAAoBC,EAAkB,oBAC9BC,EAAAA,iBAAY,IACZC,EAAAA,kBAAa,GACbC,EAAAA,qBAAgB,GAChBC,EAAAA,eAAU,IAAIC,GAEdC,EAAAA,mBAAsC,CAAC,GAEvCC,EAAAA,0BAGH,CAAA,GACGC,EAAAA,yBAGH,CAAA,GAEGC,EAAAA,uBAAmC,CAAA,GACnCC,EAAAA,sBAAkC,CAAA,QAlBtBV,SAAAA,CAAmB,CAoBhCW,iBACLC,EACAC,EACAC,EACA,CACIA,EACF,KAAKP,mBAAmBQ,QAAQ,CAC9BH,KAAAA,EACAI,QAASH,CACX,CAAA,EAEA,KAAKN,mBAAmBU,KAAK,CAAEL,KAAAA,EAAMI,QAASH,CAAyB,CAAA,CAC3E,CACOK,gBACLN,EACAC,EACAC,EACA,CACIA,EACF,KAAKN,kBAAkBO,QAAQ,CAC7BH,KAAAA,EACAI,QAASH,CACX,CAAA,EAEA,KAAKL,kBAAkBS,KAAK,CAAEL,KAAAA,EAAMI,QAASH,CAAyB,CAAA,CAC1E,CACOM,cAAcN,EAAgBC,EAAgB,CAC/CA,EAAO,KAAKL,gBAAgBM,QAAQF,CAAAA,EACnC,KAAKJ,gBAAgBQ,KAAKJ,CAAAA,CACjC,CACOO,aAAaP,EAAgBC,EAAgB,CAC9CA,EAAO,KAAKJ,eAAeK,QAAQF,CAAAA,EAClC,KAAKH,eAAeO,KAAKJ,CAAAA,CAChC,CAKOQ,MAAMC,EAAsB,CACjC,KAAKlB,QAAQiB,MAAMC,CAAAA,CACrB,CAEOC,KAAKC,EAAuC,CACjD,GAAI,OAAKvB,WAAa,KAAKG,QAAQqB,QAAO,GAE1C,IAAI,KAAKtB,cAAgB,KAAKH,SAAU,CACtC,KAAKG,cAAgB,EACrB,KAAKC,QAAQsB,MAAK,EAClBC,QAAQC,MACN,IAAIC,MACF,kDAAkD,KAAK7B,QAAQ,mFAAmF,CAAA,EAGtJ,MACF,CAEA,KAAKC,UAAY,GACjB,KAAKE,gBAEL2B,eAAe,IAAA,CACb,GAAI,CAEE,KAAK3B,eAAiB,IACxB,KAAKG,YAAc,CAAC,EACpB,KAAKyB,iBAAiB,KAAKtB,eAAe,GAG5C,KAAKL,QAAQ4B,KAAI,EAEjB,IAAMC,EAAQ,KAAKC,aAAaV,CAAAA,EAEhC,KAAKW,aAAaF,CAAAA,CACpB,OAASG,EAAG,CACVC,EAAcT,MAAMQ,EAAY,oCAAA,CAClC,QAAA,CAEE,KAAKnC,UAAY,GAEZ,KAAKG,QAAQqB,QAAO,GAIvB,KAAKrB,QAAQsB,MAAK,EAClB,KAAKvB,cAAgB,EACrB,KAAK4B,iBAAiB,KAAKrB,cAAc,EACzC,KAAKR,cANL,KAAKqB,KAAKC,CAAAA,CAQd,CACF,CAAA,EACF,CACOc,SAASd,EAAuC,CACrD,GAAI,MAAKpB,QAAQqB,QAAO,EAOxB,KALA,KAAKtB,cAAgB,EACrB,KAAKG,YAAc,CAAC,EAEpB,KAAKyB,iBAAiB,KAAKtB,eAAe,EAEnC,CAAC,KAAKL,QAAQqB,QAAO,GAAI,CAC9B,GAAI,KAAKtB,cAAgB,KAAKH,SAAU,CACtC,KAAKI,QAAQsB,MAAK,EAClB,KAAKvB,cAAgB,EACrBwB,QAAQC,MACN,IAAIC,MACF,kDAAkD,KAAK7B,QAAQ,qDAAqD,CAAA,EAGxH,MACF,CACA,KAAKG,gBACL,GAAI,CACF,KAAKC,QAAQ4B,KAAI,EACjB,IAAMC,EAAQ,KAAKC,aAAaV,CAAAA,EAChC,KAAKW,aAAaF,CAAAA,CACpB,OAASG,EAAG,CACVC,EAAcT,MACZQ,EACA,6CAAA,EAEF,KACF,CACF,CAEA,KAAKhC,QAAQsB,MAAK,EAClB,KAAKvB,cAAgB,EACrB,KAAK4B,iBAAiB,KAAKrB,cAAc,EACzC,KAAKR,aACP,CAEQgC,aAAaV,EAAwD,CAC3E,IAAMS,EAAyB,CAAA,EAE/B,QAAWM,KAAO,KAAKnC,QAAQoC,aACbhB,EAAciB,IAAIF,EAAI,WAAW,GAAK,CAAA,GAC9CG,QAASC,GAAAA,CACfV,EAAMhB,KACJ,IAAI2B,EACFD,EAAEE,GACFF,EAAEG,SACFP,EACA,CACEQ,QAAUJ,EAAEE,GAAWG,cACvBzB,KAAM,KAAKrB,WACX+C,QAAS,CAAC,CACZ,EACA,KAAK1C,mBACL,KAAKC,iBAAiB,CAAA,CAG5B,CAAA,EAGF,OAAW,CAAC+B,EAAKW,CAAAA,IAAa,KAAK9C,QAAQ+C,aAAaC,QAAO,GAC7C5B,EAAciB,IAAIF,CAAAA,GAAQ,CAAA,GAClCG,QAASC,GAAAA,CACfV,EAAMhB,KACJ,IAAI2B,EACFD,EAAEE,GACFF,EAAEG,SACFI,EACA,CACEH,QAAUJ,EAAEE,GAAWG,cACvBzB,KAAM,KAAKrB,WACX+C,QAAS,CAAC,CACZ,EACA,KAAK1C,mBACL,KAAKC,iBAAiB,CAAA,CAG5B,CAAA,EAEF,OAAOyB,CACT,CACQE,aAAaF,EAAwB,CAE3CA,EAAMoB,KAAK,CAACC,EAAGC,IAAMA,EAAET,SAAWQ,EAAER,QAAQ,EAC5C,QAAWU,KAAQvB,EAAO,CACxB,IAAMM,EAAMkB,MAAMC,QAAQF,EAAKlC,OAAO,EAAIkC,EAAKlC,QAAQ,CAAA,EAAKkC,EAAKlC,QACjE,GAAI,CACF,IAAMqC,EAASH,EAAKI,QAAO,EAEvBD,aAAkBE,SACpBF,EAAOG,MAAO1B,GACZC,EAAcT,MACZQ,EACA;kBACqBoB,EAAKO,YAAYhB,QAAQiB,YAAYC,IAAI,IAAIT,EAAKO,YAAYhB,QAAQmB,UAAU;kBAChF3B,EAAI,YAAY0B,IAAI;kBACpBE,KAAKC,UAAUZ,EAAKlC,OAAO,CAAA,EAAG,CAAA,CAI3D,OAASc,EAAG,CACVC,EAAcT,MACZQ,EACA;kBACqBoB,EAAKO,YAAYhB,QAAQiB,YAAYC,IAAI,IAAIT,EAAKO,YAAYhB,QAAQmB,UAAU;kBAChF3B,EAAI,YAAY0B,IAAI;kBACpBE,KAAKC,UAAUZ,EAAKlC,OAAO,CAAA,EAAG,CAEvD,CACF,CACF,CAEQS,iBAAiBsC,EAAmB,CAC1C,IAAMC,EAAgC,CACpC/C,KAAM,KAAKrB,WACXqE,UAAWC,KAAKC,IAAG,EACnBxB,QAAS,KAAK3C,WAChB,EACA+D,EAAM3B,QAASgC,GAAMA,EAAEJ,CAAAA,CAAAA,CACzB,CACF,EAzOavE,EAAAA,GAAAA,cAAN,IAAMA,EAAN4E,GA2OM/B,GAAN,MAAMA,EAAAA,CAEX,YACSC,EACAC,EACAxB,EACAyC,EACAxD,EAIAC,EAIP,kIAdKoE,EAAAA,eAAU,SAER/B,GAAAA,OACAC,SAAAA,OACAxB,QAAAA,OACAyC,YAAAA,OACAxD,mBAAAA,OAIAC,kBAAAA,CAIN,CAEKqE,aACNR,EAIA,CACA,IAAMS,EAASrB,MAAMC,QAAQ,KAAKpC,OAAO,EAAI,KAAKA,QAAQ,CAAA,EAAK,KAAKA,QACpE,GAAKwD,GAEL,QAAWjE,KAAQwD,EACjB,GAAIS,aAAkBjE,EAAKD,KACzB,GAAI,CACF,IAAM+C,EAAS9C,EAAKG,QAClB,KAAKM,QACL,KAAKyC,YACL,KAAKa,OAAO,EAEVjB,aAAkBE,SACpBF,EAAOG,MAAO1B,GAAAA,CACZC,EAAcT,MACZQ,EACA,0FAA0FvB,EAAKD,KAAKqD,IAAI,EAAE,CAE9G,CAAA,CAEJ,OAAS7B,EAAG,CACVC,EAAcT,MACZQ,EACA,mDAAmD0C,EAAO,YAAYb,IAAI,sBAAsBpD,EAAKD,KAAKqD,IAAI,EAAE,CAEpH,EAGN,CAEOL,SAAe,CACpB,KAAKiB,aAAa,KAAKtE,kBAAkB,EACzC,IAAMwE,EAAWC,EAAA,IAAM,KAAKH,aAAa,KAAKrE,iBAAiB,EAA9C,YAEjB,GAAI,CACF,IAAMmD,EAAS,KAAKd,GAAG,KAAKvB,OAAO,EAEnC,OAAIqC,aAAkBE,QAEbF,EAAOG,MAAM,IAAO,KAAKc,QAAU,EAAA,EAAQK,QAAQF,CAAAA,GAG5DA,EAAAA,EACOpB,EACT,OAASvB,EAAG,CAEV,WAAKwC,QAAU,GACfG,EAAAA,EACM3C,CACR,CACF,CACF,EAzEaQ,EAAAA,GAAAA,iBAAN,IAAMA,EAANsC,GC7OA,IAAMC,GAAN,MAAMA,EAAAA,CAMX,YAAYC,EAAkBC,EAAiB,CALvCC,EAAAA,mBACAC,EAAAA,gBAAW,IAAIC,GACfC,EAAAA,mBAA4B,CAAA,GAC5BJ,EAAAA,eAGN,KAAKC,WAAa,IAAII,EAAWN,CAAAA,EACjC,KAAKC,OAASA,EAEdM,GAAiB,IAAI,CACvB,CAEAC,cAAcC,EAAgBC,EAAgB,CAC5C,KAAKL,YAAYM,KAAKF,CAAAA,CACxB,CACAG,gBACEC,EACAC,EACAJ,EACA,CACA,KAAKR,WAAWa,iBAAiBF,EAAMC,EAAMJ,CAAAA,CAC/C,CACAM,eACEH,EACAC,EACAJ,EACA,CACA,KAAKR,WAAWe,gBAAgBJ,EAAMC,EAAMJ,CAAAA,CAC9C,CACAQ,aAAaJ,EAAgBJ,EAAgB,CAC3C,KAAKR,WAAWiB,cAAcL,EAAMJ,CAAAA,CACtC,CACAU,YAAYN,EAAgBJ,EAAgB,CAC1C,KAAKR,WAAWmB,aAAaP,EAAMJ,CAAAA,CACrC,CAEAY,MAAO,CACL,KAAKpB,WAAWqB,SAAS,KAAKpB,SAASqB,aAAa,CACtD,CAEAC,SAASC,EAAsB,CAC7B,GAAI,EAAEA,aAAmBC,GAAc,CACrCC,EAAcC,MACZ,IAAIC,MACF,mFAAmFJ,CAAAA,EAAS,CAAA,EAGhG,MACF,CAEA,KAAKK,SAASL,EAAS,IAAA,CAErB,GAAI,CAAC,KAAKvB,SAASqB,cAAcQ,IAAIN,EAAQ,WAAW,EAAG,CACzDE,EAAcC,MACZ,IAAIC,MACF,4CAA4CJ,EAAQ,YAAYO,IAAI,EAAE,CAAA,EAG1E,MACF,CACA,KAAK/B,WAAWgC,MAAMR,CAAAA,EACjB,KAAKzB,QACR,KAAKC,WAAWoB,KAAK,KAAKnB,SAASqB,aAAa,CAEpD,CAAA,CACF,CAEQO,SAASL,EAAsBS,EAAyB,CAC9D,IAAIC,EAAQ,EACNC,EAAOC,EAAA,IAAA,CACPF,EAAQ,KAAK/B,YAAYkC,OAC3B,KAAKlC,YAAY+B,GAAAA,EAASV,EAASW,CAAAA,EAEnCF,EAAAA,CAEJ,EANa,QAObE,EAAAA,CACF,CAEAG,SACEC,EACAC,EACAC,EAAmB,EACP,CACZ,OAAO,KAAKxC,SAASqC,SAASC,EAAcC,EAAUC,CAAAA,CACxD,CACF,EAvFa5C,EAAAA,GAAAA,iBAAN,IAAMA,EAAN6C,GCXA,IAAMC,EAAiB,CAC5BC,OAAQ,oBACRC,QAAS,qBACTC,WAAY,wBACZC,UAAW,uBACXC,KAAM,kBACNC,SAAU,qBACZ,ECIO,SAASC,EAAaC,EAAQ,CACnC,GAAI,CAACA,EAAK,QACOC,MAAMC,QAAQF,CAAAA,EAAOA,EAAM,CAACA,IACpCG,QAASC,GAAAA,CACZA,aAAaC,EACfC,EAAcC,MAAMH,CAAAA,EAEpBE,EAAcE,KACZ,8EAA8E,CAGpF,CAAA,CACF,CAZgBT,EAAAA,EAAAA,gBAkBhB,SAASU,GAAkBC,EAAiB,CAC1C,IAAMC,EAA6C,CAAA,EAWnD,GATAD,EAAMP,QAAQ,CAACS,EAAMC,IAAAA,EAEjBD,IAASP,GAAgBO,GAAQA,EAAKE,qBAAqBT,IAG3DM,EAAaI,KAAK,CAAEH,KAAAA,EAAMC,IAAAA,CAAI,CAAA,CAElC,CAAA,EAEIF,EAAaK,SAAW,EAC1B,OAAO,KAGT,GAAIL,EAAaK,OAAS,EAAG,CAE3B,IAAMC,EAAeN,EAClBO,IAAKC,GAAS,WAAWA,EAAKN,GAAG,WAAWM,EAAKP,KAAKQ,IAAI,GAAG,EAC7DC,KAAK,IAAA,EAER,MAAM,IAAIC,MACR,wHAAwHL,CAAAA,EAAc,CAE1I,CAEA,OAAON,EAAa,CAAA,CACtB,CA5BSF,EAAAA,GAAAA,qBAkCF,SAASc,EACdC,EAAuB,CACrBC,aAAc,KACdC,SAAU,CACZ,EAAC,CAED,MAAO,CAACC,EAAaC,EAAaC,IAAAA,CAChC,GAAI,OAAOF,GAAW,WACpB,MAAM,IAAIL,MACR,gDAAgDM,CAAAA,yEAA4E,EAIhI,IAAME,EAAiBD,EAAWE,MAC5BrB,EAAoBsB,QAAQC,YAChC,oBACAN,EACAC,CAAAA,EAIF,GAAI,CAAClB,EACH,MAAM,IAAIY,MACR,2JAA2J,EAK/J,IAAMY,EAAmBxB,EACtBQ,IAAI,CAACiB,EAAGC,IAAOD,IAAME,OAAYD,EAAI,EAAC,EACtCE,OAAQF,GAAMA,IAAM,EAAC,EACxB,GAAIF,EAAiBlB,OAAS,EAC5B,MAAM,IAAIM,MACR,8CAA8CM,CAAAA,iLAAoLM,EAAiBb,KAAK,IAAA,CAAA,GAAQ,EAIpQ,IAAII,EAEAc,EAAqB,GACrBC,EAAY,GACVC,EAAU/B,EAAMgC,QAAQzC,KAAAA,EAE9B,GAAIwC,IAAY,GAAI,CAElB,GAAI,CAACjB,EAAOC,aACV,MAAM,IAAIH,MACR,uJAAuJ,EAG3J,GAAI,EAAEE,EAAOC,aAAaX,qBAAqB6B,GAC7C,MAAM,IAAIrB,MACR,yIAAyI,EAG7IG,EAAeD,EAAOC,aACtBc,EAAaE,EACbD,EAAY,EACd,KAAO,CAEL,IAAMI,EAAiBnC,GAAkBC,CAAAA,EAEzC,GAAIkC,GAAkBpB,EAAOC,aAC3B,MAAM,IAAIH,MACR,+JAA+JsB,EAAe/B,GAAG,OAAOe,CAAAA,GAAM,EAIlM,GAAIgB,EACFnB,EAAemB,EAAehC,KAC9B2B,EAAaK,EAAe/B,YACnBW,EAAOC,aAChBA,EAAeD,EAAOC,aACtBc,EAAa,OAEb,OAAM,IAAIjB,MACR,yIAAyI,CAG/I,CAGA,IAAMuB,EAA+B,CACnCrB,OAAQd,EACRoC,YAAanB,EACboB,WAAYnB,EACZE,eAAgBA,CAClB,EACMkB,EAA6B,CACjCvB,aAAcA,EACdc,WAAYA,EACZb,SAAUF,EAAOE,UAAY,EAC7Bc,UAAWA,CACb,EAGCX,EAAWE,MAAcc,cAAgBA,EACzChB,EAAWE,MAAciB,aAAeA,CAC3C,CACF,CAnGgBzB,EAAAA,EAAAA,UAwGT,SAAS0B,IAAAA,CACd,MAAO,CAACtB,EAAaC,EAAasB,IAAAA,CAChC,IAAMC,EACJnB,QAAQC,YAAYmB,EAAeC,KAAM1B,CAAAA,GAAW,IAAI2B,IAC1DH,EAAYI,IAAI3B,CAAAA,EAChBI,QAAQwB,eAAeJ,EAAeC,KAAMF,EAAaxB,CAAAA,CAC3D,CACF,CAPgBsB,EAAAA,GAAAA,QAYT,SAASQ,GACdC,EAA2E,CAE3E,MAAO,CAAC/B,EAAagC,IAAAA,CACnB,IAAMC,EACJ5B,QAAQC,YAAYmB,EAAeS,SAAUlC,CAAAA,GAAW,CAAA,EAC1DiC,EAAiB7C,KAAK,CAAE4C,YAAAA,EAAaD,SAAAA,CAAS,CAAA,EAC9C1B,QAAQwB,eAAeJ,EAAeS,SAAUD,EAAkBjC,CAAAA,CACpE,CACF,CATgB8B,EAAAA,GAAAA,YAcT,SAASK,IAAAA,CACd,OAAQnC,GAAAA,CACNK,QAAQwB,eAAeJ,EAAeW,WAAY,GAAMpC,CAAAA,CAC1D,CACF,CAJgBmC,EAAAA,GAAAA,cAQT,SAASE,IAAAA,CACd,OAAQrC,GAAAA,CAENK,QAAQwB,eAAeJ,EAAea,UAAW,GAAMtC,CAAAA,CACzD,CACF,CALgBqC,EAAAA,GAAAA,aCvMhB,IAAME,GAAwB,CAC5B,OACA,MACA,QACA,UACA,SACA,OACA,WAEK,SAASC,EAAcC,EAAa,CAEzC,MADI,CAACA,GAAY,OAAOA,GAAa,UAEnCC,OAAOC,UAAUC,eAAeC,KAC9BJ,EACA,8BAAA,IAKJC,OAAOI,eAAeL,EAAU,+BAAgC,CAC9DM,MAAO,GACPC,WAAY,GACZC,aAAc,EAChB,CAAA,GAGEC,QAAQC,YAAYC,EAAeC,SAAUZ,CAAAA,GAAa,CAAA,GAE5Ca,QAAQ,CAAC,CAAEC,YAAAA,EAAaC,SAAAA,CAAQ,IAAE,CAEhD,IAAMC,EAAM,CAAEV,MAAON,EAASc,CAAAA,CAAa,EACrCG,EAAa,IAAIC,MAAMF,EAAK,CAChCG,IAAIC,EAAQC,EAAI,CACd,IAAMf,EAAQc,EAAOd,MAGrB,OACEgB,MAAMC,QAAQjB,CAAAA,GACdR,GAAsB0B,SAASH,CAAAA,EAExB,IAAII,IAAAA,CACT,IAAMC,EAAS,IAAIpB,GACbqB,EAAUrB,EAAce,CAAAA,EAAMO,MAAMtB,EAAOmB,CAAAA,EAC3CI,EAAiBd,EAASX,KAAKJ,EAAU0B,EAAQpB,CAAAA,EACvDwB,OAAAA,EAAaD,CAAAA,EAENF,CACT,EAEKrB,CACT,EACAyB,IAAIX,EAAQY,EAAOC,EAAM,CACvB,IAAMP,EAASN,EAAOd,MACtB,GAAI2B,IAAWP,EAAQ,MAAO,GAE9BN,EAAOd,MAAQ2B,EACf,IAAMN,EAASZ,EAASX,KAAKJ,EAAU0B,EAAQO,CAAAA,EAC/CH,OAAAA,EAAaH,CAAAA,EACN,EACT,CACF,CAAA,EAEMO,EAASC,EAAA,IAAMlB,EAAWX,MAAjB,UACd4B,EAAeE,cAAgBpB,EAEhCf,OAAOI,eAAeL,EAAUc,EAAa,CAC3CK,IAAKe,EACLH,IAAKI,EAACE,GAAAA,CACJpB,EAAWX,MAAQ+B,CACrB,EAFK,OAGL9B,WAAY,GACZC,aAAc,EAChB,CAAA,EAGIQ,EAAIV,OAAS,OAAOU,EAAIV,OAAU,UACpCP,EAAciB,EAAIV,KAAK,CAE3B,CAAA,EAGAG,QAAQ6B,QAAQtC,CAAAA,EAAUa,QAAS0B,GAAAA,CACjC,GAAIA,IAAQ,+BAAgC,OAC5C,IAAMC,EAAOvC,OAAOwC,yBAAyBzC,EAAUuC,CAAAA,EACvD,GAAIC,GAAQA,EAAKrB,IAAK,OACtB,IAAMuB,EAAM1C,EAASuC,CAAAA,EACjBG,GAAO,OAAOA,GAAQ,UACxB3C,EAAc2C,CAAAA,CAElB,CAAA,GACO1C,CACT,CAlFgBD,EAAAA,EAAAA,iBCHT,IAAM4C,GAAN,MAAMA,EAAAA,CAAN,cACGC,EAAAA,gBAAW,IAAIC,KACfC,EAAAA,0BAAqB,IAAID,KACzBE,EAAAA,uBAAiD,CAAA,GAMlDC,kBAAkBC,EAA8BC,EAAgB,CACjEA,EAAO,KAAKH,gBAAgBI,QAAQF,CAAAA,EACnC,KAAKF,gBAAgBK,KAAKH,CAAAA,CACjC,CAKOI,KAAQC,EAAwB,CAErC,GAAIA,EAAWC,OAAS,EACtB,MAAM,IAAIC,MACR,oEAAoEF,EAAWG,IAAI,wCAAwC,EAG/H,GAAIC,QAAQC,YAAYC,EAAeC,UAAWP,CAAAA,EAAa,CAC7D,IAAMQ,EAAmB,CACvBC,KAAM,YACNC,KAAMV,CACR,EACA,KAAKV,SAASqB,IAAIX,EAAYQ,CAAAA,CAChC,SAAWJ,QAAQC,YAAYC,EAAeM,WAAYZ,CAAAA,EAAa,CACrE,IAAMQ,EAAmB,CAAEC,KAAM,YAAaC,KAAMV,CAAW,EAC/D,KAAKV,SAASqB,IAAIX,EAAYQ,CAAAA,CAChC,KACE,OAAM,IAAIN,MACR,oEAAoEF,EAAWG,IAAI,kDAAkD,CAG3I,CAKOU,MAAMC,EAAkB,CAC7B,IAAMd,EAAac,EAAS,YAC5B,GAAIV,QAAQW,YAAYT,EAAeC,UAAWP,CAAAA,EAAa,CAC7D,IAAMQ,EAAmB,CAAEC,KAAM,YAAaC,KAAMV,CAAW,EAC/D,KAAKV,SAASqB,IAAIX,EAAYQ,CAAAA,EAC9B,KAAKhB,mBAAmBmB,IAAIX,EAAYc,CAAAA,CAC1C,KACE,OAAM,IAAIZ,MACR,uDAAuDF,EAAWG,IAAI,mCAAmC,CAG/G,CAKOa,IAAOhB,EAA2B,CACvC,IAAMQ,EAAU,KAAKlB,SAAS0B,IAAIhB,CAAAA,EAClC,GAAI,CAACQ,EACH,MAAM,IAAIN,MACR,8EAA8EF,CAAAA,EAAY,EAG9F,IAAMiB,EAAaT,EAAQE,KAE3B,GAAIF,EAAQC,OAAS,YAAa,CAChC,GAAI,CAAC,KAAKjB,mBAAmB0B,IAAIlB,CAAAA,EAAa,CAE5C,IAAMmB,EAAc,IAAIF,EAClBG,EAAoB,KAAKC,iBAAiBF,CAAAA,EAChD,KAAK3B,mBAAmBmB,IAAIX,EAAYoB,CAAAA,CAC1C,CACA,OAAO,KAAK5B,mBAAmBwB,IAAIhB,CAAAA,CACrC,CAGA,IAAMc,EAAW,IAAIG,EACrB,OAAO,KAAKI,iBAAiBP,CAAAA,CAC/B,CACQO,iBAAoBP,EAAgB,CAC1C,QAAWnB,KAAQ,KAAKF,gBACtBqB,EAAWnB,EAAKmB,CAAAA,EAElB,OAAOA,CACT,CACF,EAxFazB,EAAAA,GAAAA,kBAAN,IAAMA,EAANiC,keCgBA,IAAMC,GAAN,MAAMA,EAAAA,CAKX,YAAYC,EAAkBC,EAAiB,CAJxCC,EAAAA,iBAA4B,IAAIC,GAChCC,EAAAA,eACCC,EAAAA,wBAAmB,IAAIC,KAG7B,KAAKF,OAAS,IAAIG,EAAcP,EAAUC,CAAAA,EAC1C,KAAKC,UAAUM,MAAM,IAAI,CAC3B,CAOAC,WAAWC,EAA8BC,EAAiB,GAAO,CAC/D,KAAKT,UAAUU,kBAAkBF,EAAMC,CAAAA,CACzC,CAKAE,MAAO,CACL,KAAKT,OAAOS,KAAI,CAClB,CAMAC,IAAOC,EAA2B,CAChC,OAAO,KAAKb,UAAUY,IAAIC,CAAAA,CAC5B,CAMAC,KAAQD,EAAwB,CAC9B,KAAKb,UAAUc,KAAKD,CAAAA,CACtB,CAKAP,MAAMS,EAAkB,CACtB,KAAKf,UAAUM,MAAMS,CAAAA,CACvB,CACAC,cAAcC,EAAgBR,EAAQ,GAAO,CAC3C,KAAKP,OAAOc,cAAcC,EAAIR,CAAAA,CAChC,CACAS,gBACEC,EACAX,EACAC,EAAQ,GACR,CACA,KAAKP,OAAOgB,gBAAgBC,EAAMX,EAAMC,CAAAA,CAC1C,CACAW,eACED,EACAX,EACAC,EAAQ,GACR,CACA,KAAKP,OAAOkB,eAAeD,EAAMX,EAAMC,CAAAA,CACzC,CACAY,aAAab,EAAgBC,EAAQ,GAAO,CAC1C,KAAKP,OAAOmB,aAAab,EAAMC,CAAAA,CACjC,CACAa,YAAYd,EAAgBC,EAAQ,GAAO,CACzC,KAAKP,OAAOoB,YAAYd,EAAMC,CAAAA,CAChC,CAEAc,IAAOC,EAAwBC,EAAkB,CAC/C,GAAI,KAAKtB,iBAAiBuB,IAAIF,EAAOG,IAAI,EACvCC,OAAAA,EAAcC,KACZ,iDAAiDL,EAAOG,IAAI,8BAA8B,EAErF,KAET,GAAI,CACFH,EAAOM,QAAQ,KAAML,CAAAA,EACrB,KAAKtB,iBAAiB4B,IAAIP,EAAOG,IAAI,CACvC,OAASK,EAAG,CACVJ,EAAcK,MACZD,EACA,mCAAmCR,EAAOG,IAAI,EAAE,CAEpD,CACA,OAAO,IACT,CAKAO,SAASC,EAA+C,CACtD,IAAMC,EAAgCD,EAAiBC,cACjDC,EAA8BF,EAAiBE,aAErD,GAAI,CAACD,GAAiB,CAACC,EACrB,MAAM,IAAIC,MACR,wDAAwDH,EAASR,IAAI,qCAAqC,EAI9G,GAAM,CAAEY,OAAQC,EAAOC,YAAAA,EAAaC,eAAAA,CAAc,EAAKN,EACjD,CAAEO,aAAAA,EAAcC,WAAAA,EAAYC,SAAAA,EAAUC,UAAAA,CAAS,EAAKT,EAEpDU,EACJ,OAAOC,GAAiB,WAAaA,EAAgBC,GAAaA,EAC9DC,EAAgBC,EAACC,GACdA,aAAkBC,QACrBD,EAAOE,KAAKP,CAAAA,EACZA,EAAeK,CAAAA,EAHC,iBAMhBG,EAAmB,IAAIC,MAAMhB,EAAMiB,MAAM,EAC3CC,EAAgB,GAEdC,EAAWR,EAAA,IAAA,CACf,QAASS,EAAI,EAAGA,EAAIpB,EAAMiB,OAAQG,IAChC,GAAIA,IAAMhB,EAAY,CACpB,IAAMiB,EAAM,KAAKjD,IAAI4B,EAAMoB,CAAAA,CAAE,EAC7B,GAAI,CAACC,EACH,MAAM,IAAIvB,MACR,6CAA6CE,EAAMoB,CAAAA,EAAGjC,MAAQa,EAAMoB,CAAAA,CAAE,mDAAmDzB,EAASR,IAAI,IAAI,EAG9I4B,EAAiBK,CAAAA,EAAKC,CACxB,CAEFH,EAAgB,EAClB,EAbiB,YAebI,EAEJ,OAAIlB,IAAe,GACjBkB,EAAgBX,EAAA,KACTO,GAAeC,EAAAA,EACbT,EACLR,EAAeqB,MAAMtB,EAAac,CAAAA,CAAAA,GAHtB,iBAMPf,EAAMiB,SAAW,EACtBX,EACFgB,EAAgBX,EAACa,GAAAA,CACf,IAAMC,EAAUT,MAAMU,QAAQF,CAAAA,EAC1BA,EACA,CAACA,GAEL,GAAIC,EAAQR,OAAS,GAAK,EAAEQ,EAAQ,CAAA,YAActB,GAChD,MAAM,IAAIL,MACR,kDAAkDK,EAAahB,IAAI,aAAasC,EAAQ,CAAA,GAAI,aAAatC,IAAAA,EAAM,EAInH,OAAOuB,EAAcR,EAAeyB,KAAK1B,EAAawB,CAAAA,CAAAA,CACxD,EAZgB,iBAchBH,EAAgBX,EAACa,GAAAA,CACf,IAAMC,EAAUT,MAAMU,QAAQF,CAAAA,EAC1BA,EAAeA,EAAeP,OAAS,CAAA,EACvCO,EAEJ,GAAI,EAAEC,aAAmBtB,GACvB,MAAM,IAAIL,MACR,0CAA0CK,EAAahB,IAAI,aAAcsC,GAAiB,aAAatC,IAAAA,EAAM,EAIjH,OAAOuB,EAAcR,EAAeyB,KAAK1B,EAAawB,CAAAA,CAAAA,CACxD,EAZgB,iBAednB,EACFgB,EAAgBX,EAACa,GAAAA,CACVN,GAAeC,EAAAA,EACpB,IAAMM,EAAUT,MAAMU,QAAQF,CAAAA,EAC1BA,EACA,CAACA,GAEL,GAAIC,EAAQR,OAAS,GAAK,EAAEQ,EAAQ,CAAA,YAActB,GAChD,MAAM,IAAIL,MACR,kDAAkDK,EAAahB,IAAI,aAAasC,EAAQ,CAAA,GAAI,aAAatC,IAAAA,EAAM,EAInH,IAAMyC,EAAW,IAAIb,GACrBa,OAAAA,EAASxB,CAAAA,EAAcqB,EAChBf,EAAcR,EAAeqB,MAAMtB,EAAa2B,CAAAA,CAAAA,CACzD,EAfgB,iBAiBhBN,EAAgBX,EAACa,GAAAA,CACVN,GAAeC,EAAAA,EACpB,IAAMM,EAAUT,MAAMU,QAAQF,CAAAA,EAC1BA,EAAeA,EAAeP,OAAS,CAAA,EACvCO,EAEJ,GAAI,EAAEC,aAAmBtB,GACvB,MAAM,IAAIL,MACR,0CAA0CK,EAAahB,IAAI,aAAcsC,GAAiB,aAAatC,IAAAA,EAAM,EAIjH,IAAMyC,EAAW,IAAIb,GACrBa,OAAAA,EAASxB,CAAAA,EAAcqB,EAChBf,EAAcR,EAAeqB,MAAMtB,EAAa2B,CAAAA,CAAAA,CACzD,EAfgB,iBAmBnBN,EAAsB1B,cAAgBA,EAEhC,KAAKlC,OAAOgC,SAASS,EAAcmB,EAAejB,CAAAA,CAC3D,CACF,EAtNahD,EAAAA,GAAAA,YAAN,IAAMA,EAANwE,sFC1BN,SAAAC,GAAAC,EAAAC,EAAAC,EAAAC,EAAA,kTAAAC,EAAAL,GAAA,kJAKD,IAAIM,EAAe,GAEZ,SAASC,GAAaC,EAAe,CAC1CF,EAAeE,CACjB,CAFgBD,EAAAA,GAAAA,gBAIhB,IAAME,EAAM,CACVC,MAAO,UACPC,IAAK,WACLC,OAAQ,WACRC,KAAM,WACNC,QAAS,WACTC,KAAM,WACNC,KAAM,WACNC,KAAM,UACNC,MAAO,UACT,EAzBAC,EA2BMC,GAAND,EAAA,KAAMC,CAIJ,OACOC,kBAAkBC,EAAmB,CAC1C,GAAI,CAAChB,EAAc,OACnB,IAAMiB,EAAS,GAAGd,EAAIS,KAAK,GAAGT,EAAIQ,IAAI,wBAAmBR,EAAIC,KAAK,GAClEc,QAAQC,IACN,GAAGF,CAAAA,GAASd,EAAIO,IAAI,wBAAwBP,EAAIC,KAAK;EAChDD,EAAIS,KAAK,aAAaT,EAAIC,KAAK,GACpCY,EAAKI,SAAW,cAAA,CAEpB,CAKA,OACOC,mBAAmBC,EAAmB,CAC3C,GAAI,CAACtB,EAAc,OACnB,IAAMiB,EAAS,GAAGd,EAAIE,GAAG,GAAGF,EAAIQ,IAAI,yBAAoBR,EAAIC,KAAK,GAEjEc,QAAQK,MACN,GAAGN,CAAAA,GAASd,EAAIO,IAAI,yBAAyBP,EAAIC,KAAK;EACjDD,EAAIE,GAAG,aAAaF,EAAIC,KAAK,IAAIkB,EAAIF,OAAO;EAC5CjB,EAAIE,GAAG,aAAaF,EAAIC,KAAK,GAClCkB,EAAIC,OAASD,GAAO,eAAA,CAExB,CAKA,OACOE,kBAAkBC,EAAmB,CAC1C,GAAI,CAACzB,EAAc,OACnB,IAAMiB,EAAS,GAAGd,EAAIG,MAAM,GAAGH,EAAIQ,IAAI,wBAAmBR,EAAIC,KAAK,GACnEc,QAAQO,KACN,GAAGR,CAAAA,GAASd,EAAIO,IAAI,wBAAwBP,EAAIC,KAAK;EAChDD,EAAIG,MAAM,YAAYH,EAAIC,KAAK,IAAIqB,EAAKL,OAAO,EAAE,CAE1D,CACF,EA3CMN,EAAAA,EAAAA,mBAAND,waA6CO,SAASa,GAAqBC,EAAa,CAChDA,EAAIC,SAASd,EAAgBC,iBAAiB,EAC9CY,EAAIC,SAASd,EAAgBO,kBAAkB,EAC/CM,EAAIC,SAASd,EAAgBU,iBAAiB,CAChD,CAJgBE,EAAAA,GAAAA,wBC7CT,SAASG,GAAYC,EAAoBC,EAAa,CAC3DD,EAAS,CAAE,GAAGC,EAAe,GAAGD,CAAO,EACvC,IAAME,EAAM,IAAIC,EAASH,EAAOI,SAAWJ,EAAOK,MAAM,EAExDC,GAAqBJ,CAAAA,EACrBK,GAAaP,EAAOQ,SAAS,EAC7BN,EAAIO,WAAWC,CAAAA,EACf,IAAMC,EAAOT,EACbA,OAAAA,EAAIU,MAAMD,CAAAA,EACHT,CACT,CAVgBH,EAAAA,GAAAA","names":["defaultConfig","maxDepth","enableLog","manual","activeInstance","activateInstance","instance","dispatch","message","console","error","MessageWriter","write","target","args","e","context","ErrorMessage","warn","WarnMessage","info","InfoMessage","_MessageWriter","BaseMessage","send","args","MessageWriter","write","_BaseMessage","SingleMessage","_SingleMessage","EventMessage","_EventMessage","ErrorMessage","error","context","_ErrorMessage","WarnMessage","_WarnMessage","InfoMessage","_InfoMessage","MessageRegistry","systemTaskMap","Map","register","messageClass","systemFn","priority","systems","get","findIndex","s","fn","systemContext","originalMethod","push","sort","a","b","set","funcName","methodName","targetClass","MessageWriter","error","Error","name","currentSystems","index","splice","length","delete","_MessageRegistry","Staging","signalActive","Map","eventActive","signalStaging","eventStaging","stage","event","SingleMessage","type","has","set","get","push","EventMessage","MessageWriter","error","Error","name","flip","clearSignals","clearEvents","isEmpty","size","length","reset","_Staging","Dispatcher","maxDepth","isRunning","globalTick","internalDepth","staging","Staging","tickPayload","beforeExecuteHooks","afterExecuteHooks","beforeTickHooks","afterTickHooks","addBeforeExecute","type","hook","front","unshift","handler","push","addAfterExecute","addBeforeTick","addAfterTick","stage","message","tick","systemTaskMap","isEmpty","reset","console","error","Error","queueMicrotask","executeTickHooks","flip","tasks","collectTasks","executeTasks","e","MessageWriter","tickSync","msg","eventActive","get","forEach","s","ExecutionTask","fn","priority","context","systemContext","payload","msg_list","signalActive","entries","sort","a","b","task","Array","isArray","result","execute","Promise","catch","hookContext","targetClass","name","methodName","JSON","stringify","hooks","hooksContext","timestamp","Date","now","h","_Dispatcher","success","triggerHooks","sample","runAfter","__name","finally","_ExecutionTask","MessageEngine","maxDepth","manual","dispatcher","registry","MessageRegistry","middlewares","Dispatcher","activateInstance","useMiddleware","mw","front","push","onBeforeExecute","type","hook","addBeforeExecute","onAfterExecute","addAfterExecute","onBeforeTick","addBeforeTick","onAfterTick","addAfterTick","tick","tickSync","systemTaskMap","dispatch","message","BaseMessage","MessageWriter","error","Error","pipeline","has","name","stage","finalAction","index","next","__name","length","register","messageClass","systemFn","priority","_MessageEngine","VIRID_METADATA","SYSTEM","MESSAGE","CONTROLLER","COMPONENT","SAFE","OBSERVER","handleResult","res","Array","isArray","forEach","m","BaseMessage","MessageWriter","write","warn","checkMessageParam","types","foundMatches","type","idx","prototype","push","length","errorDetails","map","item","name","join","Error","System","params","messageClass","priority","target","key","descriptor","originalMethod","value","Reflect","getMetadata","undefinedIndices","t","i","undefined","filter","messageIdx","batchMode","listIdx","indexOf","SingleMessage","matchedMessage","systemContext","targetClass","methodName","systemConfig","Safe","_descriptor","safeMethods","VIRID_METADATA","SAFE","Set","add","defineMetadata","Observer","callback","propertyKey","observerMetadata","OBSERVER","Controller","CONTROLLER","Component","COMPONENT","ARRAY_MUTABLE_METHODS","bindObservers","instance","Object","prototype","hasOwnProperty","call","defineProperty","value","enumerable","configurable","Reflect","getMetadata","VIRID_METADATA","OBSERVER","forEach","propertyKey","callback","box","logicProxy","Proxy","get","target","prop","Array","isArray","includes","args","oldVal","result","apply","observerResult","handleResult","set","_prop","newVal","getter","__name","__virid_box__","v","ownKeys","key","desc","getOwnPropertyDescriptor","val","ViridContainer","bindings","Map","singletonInstances","activationHooks","addActivationHook","hook","front","unshift","push","bind","identifier","length","Error","name","Reflect","getMetadata","VIRID_METADATA","COMPONENT","binding","type","ctor","set","CONTROLLER","spawn","instance","hasMetadata","get","TargetCtor","has","rawInstance","processedInstance","handleActivation","_ViridContainer","ViridApp","maxDepth","manual","container","ViridContainer","engine","installedPlugins","Set","MessageEngine","spawn","onActivate","hook","front","addActivationHook","tick","get","identifier","bind","instance","useMiddleware","mw","onBeforeExecute","type","onAfterExecute","onBeforeTick","onAfterTick","use","plugin","options","has","name","MessageWriter","warn","install","add","e","error","register","systemFn","systemContext","systemConfig","Error","params","types","targetClass","originalMethod","messageClass","messageIdx","priority","batchMode","handleResultFn","handleResult","res","processResult","__name","result","Promise","then","cachedComponents","Array","length","isInitialized","initDeps","i","dep","wrappedSystem","apply","currentMessage","payload","isArray","call","callArgs","_ViridApp","_ts_decorate","decorators","target","key","desc","__name","globalSwitch","toggleSwitch","enable","clr","reset","red","yellow","blue","magenta","cyan","gray","bold","green","_a","ViridLogHandler","globalInfoHandler","info","header","console","log","context","globalErrorHandler","err","error","globalWarnHandler","warn","registerBasicSystems","app","register","createVirid","config","defaultConfig","app","ViridApp","maxDepth","manual","registerBasicSystems","toggleSwitch","enableLog","onActivate","bindObservers","self","spawn"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@virid/core",
3
3
  "type": "module",
4
- "version": "0.3.17",
4
+ "version": "0.4.1",
5
5
  "description": "A lightweight and powerful message core built using dependency injection and CCS concepts",
6
6
  "author": "Ailrid",
7
7
  "license": "Apache 2.0",