@virid/core 0.1.3 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -64
- package/README.zh.md +2 -50
- package/dist/index.cjs +13 -17
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -26
- package/dist/index.d.ts +3 -26
- package/dist/index.js +13 -17
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -284,67 +284,4 @@ app.onAfterTick((context) => {
|
|
|
284
284
|
- **`MessageWriter.warn(context)`**: Logs a warning, which automatically triggers a `WarnMessage`.
|
|
285
285
|
- **`MessageWriter.info(context)`**: Logs an informational message, which automatically triggers an `InfoMessage`.
|
|
286
286
|
|
|
287
|
-
------
|
|
288
|
-
|
|
289
|
-
### 🔬 Advanced
|
|
290
|
-
|
|
291
|
-
#### **AtomicModifyMessage**
|
|
292
|
-
|
|
293
|
-
- **Function**: Provides a "plug-and-play" solution for temporary logic modifications.
|
|
294
|
-
- **Scenario**: When you need to perform a one-time observation or tweak a `Component` without the overhead of defining a dedicated `System`, you can use this message to execute a closure logic in the next logical frame (Tick).
|
|
295
|
-
- **Example**:
|
|
296
|
-
|
|
297
|
-
```ts
|
|
298
|
-
AtomicModifyMessage.send(
|
|
299
|
-
CounterComponent,
|
|
300
|
-
(comp) => {
|
|
301
|
-
// Perform one-time inspection or modification on the component instance
|
|
302
|
-
console.log("----------------AtomicModifyMessage------------------");
|
|
303
|
-
console.log("Current Component State:", comp);
|
|
304
|
-
},
|
|
305
|
-
"Check CounterComponent" // Optional: label for debugging/tracing
|
|
306
|
-
);
|
|
307
|
-
```
|
|
308
|
-
|
|
309
|
-
#### **DebounceMessage**
|
|
310
|
-
|
|
311
|
-
**Function:** Provides a framework-level native debouncing solution with built-in lifecycle management.
|
|
312
|
-
|
|
313
|
-
**Scenario:** When you need to throttle the frequency of message triggers or merge the data content of consecutive messages, this class offers an out-of-the-box mechanism to handle "intent evolution" without manual timer management.
|
|
314
|
-
|
|
315
|
-
**Example:**
|
|
316
|
-
|
|
317
|
-
```ts
|
|
318
|
-
// Derive your own message from the DebounceMessage class
|
|
319
|
-
class MoveMessage extends DebounceMessage {
|
|
320
|
-
readonly debounceTime = 100; // Set the debounce window to 100ms
|
|
321
|
-
|
|
322
|
-
constructor(
|
|
323
|
-
public x: number,
|
|
324
|
-
public y: number,
|
|
325
|
-
) {
|
|
326
|
-
super();
|
|
327
|
-
}
|
|
328
|
-
|
|
329
|
-
// This callback is triggered when debouncing occurs,
|
|
330
|
-
// providing the instance of the previously sent Message.
|
|
331
|
-
debounceCallback(previousMessage: MoveMessage) {
|
|
332
|
-
console.log(
|
|
333
|
-
`[Debounce] Merge displacement: Original(${previousMessage.x}, ${previousMessage.y}) -> New(${this.x}, ${this.y})`,
|
|
334
|
-
);
|
|
335
|
-
// Accumulate the state from the previous message
|
|
336
|
-
this.x += previousMessage.x;
|
|
337
|
-
this.y += previousMessage.y;
|
|
338
|
-
}
|
|
339
|
-
}
|
|
340
|
-
|
|
341
|
-
// Usage:
|
|
342
|
-
// Only the "evolved" message with a combined value will
|
|
343
|
-
// reach the System after the user stops sending for 100ms.
|
|
344
|
-
MoveMessage.send(10, 0);
|
|
345
|
-
```
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
287
|
+
------
|
package/README.zh.md
CHANGED
|
@@ -204,7 +204,7 @@ class PlayerComponent {
|
|
|
204
204
|
### `@Safe()`
|
|
205
205
|
|
|
206
206
|
- **功能**:方法访问权限标记,在`Virid`中外部环境(UI 层)严禁直接修改逻辑层数据,所有的修改和方法调用都会被拦截。但对于某些“只读类”或“安全计算类”方法,可以通过 `@Safe()` 显式授权,允许视图层直接调用。
|
|
207
|
-
- **设计**:主要服务于 `@virid/vue` 等外部投影层,详情见`@virid/vue`中的`
|
|
207
|
+
- **设计**:主要服务于 `@virid/vue` 等外部投影层,详情见`@virid/vue`中的`Borrow Checker`
|
|
208
208
|
- **示例**:
|
|
209
209
|
|
|
210
210
|
```ts
|
|
@@ -256,52 +256,4 @@ app.onAfterTick((context) => {
|
|
|
256
256
|
- `MessageWriter.warn(context)`: 写入一个警告,他会自动触发`WarnMessage`。
|
|
257
257
|
- `MessageWriter.info(context)`: 写入一个信息,它会自动触发 `InfoMessage`。
|
|
258
258
|
|
|
259
|
-
------
|
|
260
|
-
|
|
261
|
-
## 🔬 进阶
|
|
262
|
-
|
|
263
|
-
#### `AtomicModifyMessage`
|
|
264
|
-
|
|
265
|
-
- **功能**:提供一种“即插即用”的临时逻辑修改方案。
|
|
266
|
-
- **场景**:当你需要对某个 `Component` 进行一次性的观察或微调,又不想专门写一个 `System` 时,可以使用此消息在下一帧执行一段闭包逻辑。
|
|
267
|
-
- **示例**:
|
|
268
|
-
|
|
269
|
-
```ts
|
|
270
|
-
AtomicModifyMessage.send(
|
|
271
|
-
CounterComponent,
|
|
272
|
-
(comp) => {
|
|
273
|
-
console.log("----------------AtomicModifyMessage------------------");
|
|
274
|
-
},
|
|
275
|
-
"Check CounterComponent",
|
|
276
|
-
);
|
|
277
|
-
```
|
|
278
|
-
|
|
279
|
-
#### `DebounceMessage`
|
|
280
|
-
|
|
281
|
-
- **功能**:框架级原生防抖功能,提供简易的防抖触发和简单的防抖回调。
|
|
282
|
-
- **场景**:当你需要限制Message触发频率,或者需要融合前后两次Message的内容时使用,即可0行代码获得框架级原生支持。
|
|
283
|
-
- **示例**:
|
|
284
|
-
|
|
285
|
-
```ts
|
|
286
|
-
// 从DebounceMessage类型派生一个自己的消息
|
|
287
|
-
class MoveMessage extends DebounceMessage {
|
|
288
|
-
readonly debounceTime = 100; // 设置防抖时间为100ms
|
|
289
|
-
|
|
290
|
-
constructor(
|
|
291
|
-
public x: number,
|
|
292
|
-
public y: number,
|
|
293
|
-
) {
|
|
294
|
-
super();
|
|
295
|
-
}
|
|
296
|
-
|
|
297
|
-
// 当触发防抖时,该回调会被调用,并传入上次发送的Message实例
|
|
298
|
-
debounceCallback(previousMessage: MoveMessage) {
|
|
299
|
-
console.log(
|
|
300
|
-
`[Debounce] Merge displacement: Original(${previousMessage.x}, ${previousMessage.y}) -> New(${this.x}, ${this.y})`,
|
|
301
|
-
);
|
|
302
|
-
this.x += previousMessage.x;
|
|
303
|
-
this.y += previousMessage.y;
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
```
|
|
307
|
-
|
|
259
|
+
------
|
package/dist/index.cjs
CHANGED
|
@@ -1,32 +1,28 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @virid/core v0.1.
|
|
2
|
+
* @virid/core v0.1.4
|
|
3
3
|
* A lightweight and powerful message core built using dependency injection and CCS concepts
|
|
4
4
|
*/
|
|
5
|
-
var
|
|
5
|
+
var T=Object.defineProperty;var le=Object.getOwnPropertyDescriptor;var he=Object.getOwnPropertyNames;var ue=Object.prototype.hasOwnProperty;var de=(s,e,t)=>e in s?T(s,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[e]=t;var o=(s,e)=>T(s,"name",{value:e,configurable:!0});var fe=(s,e)=>{for(var t in e)T(s,t,{get:e[t],enumerable:!0})},pe=(s,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of he(e))!ue.call(s,n)&&n!==t&&T(s,n,{get:()=>e[n],enumerable:!(r=le(e,n))||r.enumerable});return s};var ge=s=>pe(T({},"__esModule",{value:!0}),s);var i=(s,e,t)=>de(s,typeof e!="symbol"?e+"":e,t);var $e={};fe($e,{BaseMessage:()=>x,Component:()=>we,Controller:()=>Ee,ErrorMessage:()=>v,EventMessage:()=>m,InfoMessage:()=>S,Message:()=>be,MessageInternal:()=>w,MessageRegistry:()=>E,MessageWriter:()=>a,Observer:()=>ke,Safe:()=>Se,SingleMessage:()=>y,System:()=>ve,VIRID_METADATA:()=>p,WarnMessage:()=>b,activateInstance:()=>z,bindObservers:()=>H,createVirid:()=>Me,handleResult:()=>A,publisher:()=>se});module.exports=ge($e);var B=class B{static send(...e){a.write(this,...e)}};o(B,"BaseMessage");var x=B,G=class G extends x{constructor(){super();i(this,"__kind","SingleMessage")}};o(G,"SingleMessage");var y=G,j=class j extends x{constructor(){super();i(this,"__kind","EventMessage")}};o(j,"EventMessage");var m=j,L=class L extends m{constructor(t,r){super();i(this,"error");i(this,"context");this.error=t,this.context=r}};o(L,"ErrorMessage");var v=L,W=class W extends m{constructor(t){super();i(this,"context");this.context=t}};o(W,"WarnMessage");var b=W,Q=class Q extends m{constructor(t){super();i(this,"context");this.context=t}};o(Q,"InfoMessage");var S=Q;var V=null;function z(s){V=s}o(z,"activateInstance");var se=new Proxy({},{get(s,e){return e==="dispatch"?t=>{if(!V){console.error(`[Virid] Message dispatched before system init: ${t.constructor.name}`);return}return V.dispatch(t)}:Reflect.get(V||{},e)}}),F=class F{static write(e,...t){let r=typeof e=="function"?new e(...t):e;se.dispatch(r)}static error(e,t=""){this.write(new v(e,t))}static warn(e){this.write(new b(e))}static info(e){this.write(new S(e))}};o(F,"MessageWriter");var a=F;var U=class U{constructor(e){i(this,"dirtySignalTypes",new Set);i(this,"eventQueue",[]);i(this,"isRunning",!1);i(this,"globalTick",0);i(this,"internalDepth",0);i(this,"eventHub");i(this,"tickPayload",{});i(this,"beforeExecuteHooks",[]);i(this,"afterExecuteHooks",[]);i(this,"beforeTickHooks",[]);i(this,"afterTickHooks",[]);this.eventHub=e}addBeforeExecute(e,t,r){r?this.beforeExecuteHooks.unshift({type:e,handler:t}):this.beforeExecuteHooks.push({type:e,handler:t})}addAfterExecute(e,t,r){r?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)}markDirty(e){e instanceof m?this.eventQueue.push(e):e instanceof y&&this.dirtySignalTypes.add(e.constructor)}tick(e){if(!(this.isRunning||this.dirtySignalTypes.size===0&&this.eventQueue.length===0)){if(this.internalDepth>100){this.internalDepth=0,this.dirtySignalTypes.clear(),this.eventQueue=[],this.eventHub.reset(),a.error(new Error("[Virid Dispatcher] Deadlock: Recursive loop detected \u{1F4A5}."));return}this.isRunning=!0,this.internalDepth++,queueMicrotask(()=>{let t,r;try{this.internalDepth==1&&(this.tickPayload={},this.executeTickHooks(this.beforeTickHooks));let n=this.prepareSnapshot();t=n.signalSnapshot,r=n.eventSnapshot;let u=this.collectTasks(r,t,e);this.executeTasks(u)}catch(n){a.error(n,"[Virid Dispatcher] Unhandled Error")}finally{t&&r&&this.clear(r,t),this.isRunning=!1,this.dirtySignalTypes.size>0||this.eventQueue.length>0?this.tick(e):(this.executeTickHooks(this.afterTickHooks),this.globalTick++,this.internalDepth=0)}})}}collectTasks(e,t,r){let n=[];for(let l of e)(r.get(l.constructor)||[]).forEach(f=>{n.push(new D(f.fn,f.priority,l,{context:f.fn.systemContext,tick:this.globalTick,payload:{}}))});let u=new Set;for(let l of t)(r.get(l)||[]).forEach(f=>{u.has(f.fn)||(n.push(new D(f.fn,f.priority,this.eventHub.peekSignal(l),{context:f.fn.systemContext,tick:this.globalTick,payload:{}})),u.add(f.fn))});return n}executeTasks(e){e.sort((t,r)=>r.priority-t.priority);for(let t of e)try{let r=t.execute(this.beforeExecuteHooks,this.afterExecuteHooks);r instanceof Promise&&r.catch(n=>a.error(n,`[Virid Dispatcher]: Async System Error.
|
|
6
6
|
SystemLocation: ${t.hookContext.context.targetClass.name}.${t.hookContext.context.methodName}
|
|
7
7
|
MessageName: ${t.message.constructor.name}
|
|
8
8
|
MessageData: ${JSON.stringify(t.message)}`))}catch(r){a.error(r,`[Virid Dispatcher]: Sync System Error.
|
|
9
9
|
SystemLocation: ${t.hookContext.context.targetClass.name}.${t.hookContext.context.methodName}
|
|
10
10
|
MessageName: ${t.message.constructor.name}
|
|
11
|
-
MessageData: ${JSON.stringify(t.message)}`)}}prepareSnapshot(){this.eventHub.flip();let e=new Set(this.dirtySignalTypes),t=[...this.eventQueue];return this.dirtySignalTypes.clear(),this.eventQueue=[],{signalSnapshot:e,eventSnapshot:t}}clear(e,t){let r=new Set(t);e.forEach(n=>r.add(n.constructor)),this.eventHub.clearSignals(r),this.eventHub.clearEvents()}executeTickHooks(e){let t={tick:this.globalTick,timestamp:Date.now(),payload:this.tickPayload};e.forEach(r=>r(t))}};o(
|
|
11
|
+
MessageData: ${JSON.stringify(t.message)}`)}}prepareSnapshot(){this.eventHub.flip();let e=new Set(this.dirtySignalTypes),t=[...this.eventQueue];return this.dirtySignalTypes.clear(),this.eventQueue=[],{signalSnapshot:e,eventSnapshot:t}}clear(e,t){let r=new Set(t);e.forEach(n=>r.add(n.constructor)),this.eventHub.clearSignals(r),this.eventHub.clearEvents()}executeTickHooks(e){let t={tick:this.globalTick,timestamp:Date.now(),payload:this.tickPayload};e.forEach(r=>r(t))}};o(U,"Dispatcher");var I=U,J=class J{constructor(e,t,r,n){i(this,"fn");i(this,"priority");i(this,"message");i(this,"hookContext");this.fn=e,this.priority=t,this.message=r,this.hookContext=n}triggerHooks(e){let t=Array.isArray(this.message)?this.message[0]:this.message;if(t){for(let r of e)if(t instanceof r.type)try{let n=r.handler(this.message,this.hookContext);n instanceof Promise&&n.catch(u=>{a.error(u,`[Virid Hook] Async Hook Error:
|
|
12
12
|
It is prohibited to use asynchronous hooks within Hook:
|
|
13
13
|
${r.type.name}`)})}catch(n){a.error(n,`[Virid Hook] Hook Execute Failed:
|
|
14
14
|
Triggered by: ${t.constructor.name}
|
|
15
|
-
Registered type: ${r.type.name}`)}}}execute(e,t){this.triggerHooks(e);let r=o(()=>this.triggerHooks(t),"runAfter");try{let n=this.fn(this.message);return n instanceof Promise?n.finally(()=>r()):(r(),n)}catch(n){throw r(),n}}};o(
|
|
16
|
-
${e.constructor.name} must extend SingleMessage or EventMessage`))}flip(){this.signalActive=this.signalStaging,this.signalStaging=new Map,this.eventActive=this.eventStaging,this.eventStaging=[]}peekSignal(e){return this.signalActive.get(e)||[]}getEventStream(){return this.eventActive}peekEventAt(e){return this.eventActive[e]}clearSignals(e){e.forEach(t=>this.signalActive.delete(t))}clearEvents(){this.eventActive=[]}reset(){this.signalActive.clear(),this.signalStaging.clear(),this.eventActive=[],this.eventStaging=[]}};o(
|
|
15
|
+
Registered type: ${r.type.name}`)}}}execute(e,t){this.triggerHooks(e);let r=o(()=>this.triggerHooks(t),"runAfter");try{let n=this.fn(this.message);return n instanceof Promise?n.finally(()=>r()):(r(),n)}catch(n){throw r(),n}}};o(J,"ExecutionTask");var D=J;var Y=class Y{constructor(){i(this,"signalActive",new Map);i(this,"signalStaging",new Map);i(this,"eventActive",[]);i(this,"eventStaging",[])}push(e){if(e instanceof y){let t=e.constructor;this.signalStaging.has(t)||this.signalStaging.set(t,[]),this.signalStaging.get(t).push(e)}else e instanceof m?this.eventStaging.push(e):a.error(new Error(`[Virid Message] Invalid Message:
|
|
16
|
+
${e.constructor.name} must extend SingleMessage or EventMessage`))}flip(){this.signalActive=this.signalStaging,this.signalStaging=new Map,this.eventActive=this.eventStaging,this.eventStaging=[]}peekSignal(e){return this.signalActive.get(e)||[]}getEventStream(){return this.eventActive}peekEventAt(e){return this.eventActive[e]}clearSignals(e){e.forEach(t=>this.signalActive.delete(t))}clearEvents(){this.eventActive=[]}reset(){this.signalActive.clear(),this.signalStaging.clear(),this.eventActive=[],this.eventStaging=[]}};o(Y,"EventHub");var O=Y;var q=class q{constructor(){i(this,"systemTaskMap",new Map)}register(e,t,r=0){let n=this.systemTaskMap.get(e)||[];if(n.findIndex(l=>l.fn===t)===-1)n.push({fn:t,priority:r}),n.sort((l,d)=>d.priority-l.priority),this.systemTaskMap.set(e,n);else{let l=t.name||"Anonymous";return a.error(new Error(`[Virid Error] System Already Registered:
|
|
17
17
|
Class ${e.name}
|
|
18
|
-
Function ${
|
|
19
|
-
${
|
|
20
|
-
${
|
|
21
|
-
${
|
|
22
|
-
${
|
|
23
|
-
|
|
24
|
-
Modify on ${s.ComponentClass.name}
|
|
25
|
-
label: ${s.label}`)}catch(t){a.error(t,`[Virid Error] Modify Failed:
|
|
26
|
-
${s.label}`)}},"atomicModifyHandler");function he(s){s.register(k,B(k,Me,"GlobalAtomicModifier"),1e3),s.register(v,B(v,Ee,"GlobalWarnHandler"),-999),s.register(b,B(b,ke,"GlobalErrorHandler"),-999),s.register(S,B(S,we,"GlobalInfoHandler"),-999),H=s}o(he,"initializeGlobalSystems");var H=null,pt=new Proxy({},{get(s,e){return(...t)=>{if(!H){console.warn(`[Virid Vue] App method "${String(e)}" called before initialization.`);return}let r=H[e];if(typeof r=="function")return r.apply(H,t)}}});var ue=new Set,ae=class ae{constructor(){i(this,"container",new _);i(this,"messageInternal",new M);i(this,"activationHooks",[])}addActivationHook(e){this.activationHooks.push(e)}get(e){return e.length>0&&a.error(new Error(`[Virid Container] Violation: Component "${e.name}" should not have constructor arguments. Dependency Injection is only allowed in Systems.`)),this.container.get(e,t=>this.handleActivation(t))}handleActivation(e){return e&&this.activationHooks.reduce((t,r)=>{try{let n=r(t);return n===void 0&&a.warn(`[Virid Container] Hook Does Bot Return A Value: Hook "${r.name}" should return a instance to continue.`),n!==void 0?n:t}catch(n){return a.error(n,"[Virid Container] Activation Hook Failed"),t}},e)}bindController(e){return this.container.bind(e).toSelf(),{inSingletonScope:o(()=>({onActivation:o(()=>{},"onActivation")}),"inSingletonScope")}}bindComponent(e){return this.container.bind(e).toSelf().inSingletonScope(),{onActivation:o(()=>{},"onActivation")}}useMiddleware(e,t=!1){this.messageInternal.useMiddleware(e,t)}onBeforeExecute(e,t,r=!1){this.messageInternal.onBeforeExecute(e,t,r)}onAfterExecute(e,t,r=!1){this.messageInternal.onAfterExecute(e,t,r)}onBeforeTick(e,t=!1){this.messageInternal.onBeforeTick(e,t)}onAfterTick(e,t=!1){this.messageInternal.onAfterTick(e,t)}register(e,t,r=0){return this.messageInternal.register(e,t,r)}use(e,t){if(ue.has(e.name))return a.warn(`[Virid Plugin] Duplicate Installation: Plugin ${e.name} has already been installed.`),this;try{e.install(this,t),ue.add(e.name)}catch(r){a.error(r,`[Virid Plugin]: Install Failed: ${e.name}`)}return this}};o(ae,"ViridApp");var ie=ae,w=new ie;w.addActivationHook(R);he(w);var g={SYSTEM:"virid:core:system",MESSAGE:"virid:core:message",CONTROLLER:"virid:core:controller",COMPONENT:"virid:core:component",SAFE:"virid:core:safe",OBSERVER:"virid:core:observer"};var A=o(s=>{if(!s)return;(Array.isArray(s)?s:[s]).forEach(t=>{t instanceof x?a.write(t):a.warn("[Virid HandleResult] Invalid Return Type: Must return Message or Message[].")})},"handleResult");function Ae(s={priority:0,messageClass:null}){return(e,t,r)=>{let n=r.value,h=Reflect.getMetadata("design:paramtypes",e,t),c=Reflect.getMetadata(g.MESSAGE,e,t)||null;if(!h){let u=new Error(`[Virid System] System Parameter Loss:
|
|
27
|
-
Unable to recognize system parameters, please confirm if import "reflection-metadata" was introduced at the beginning!`);a.error(u);return}if(h.some(u=>u===void 0)){let u=new Error(`[Virid System] Parameter Metadata Loss in "${t}":
|
|
18
|
+
Function ${l}`)),()=>{}}return()=>{let l=this.systemTaskMap.get(e);if(l){let d=l.findIndex(f=>f.fn===t);d!==-1&&(l.splice(d,1),l.length===0&&this.systemTaskMap.delete(e))}}}};o(q,"MessageRegistry");var E=q;var K=class K{constructor(){i(this,"eventHub",new O);i(this,"dispatcher",new I(this.eventHub));i(this,"registry",new E);i(this,"middlewares",[]);z(this)}useMiddleware(e,t){this.middlewares.push(e)}onBeforeExecute(e,t,r){this.dispatcher.addBeforeExecute(e,t,r)}onAfterExecute(e,t,r){this.dispatcher.addAfterExecute(e,t,r)}onBeforeTick(e,t){this.dispatcher.addBeforeTick(e,t)}onAfterTick(e,t){this.dispatcher.addAfterTick(e,t)}dispatch(e){if(!(e instanceof x)){a.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)){a.error(new Error(`[Virid Dispatch] No handler for message: ${e.constructor.name}`));return}this.eventHub.push(e),this.dispatcher.markDirty(e),this.dispatcher.tick(this.registry.systemTaskMap)})}pipeline(e,t){let r=0,n=o(()=>{r<this.middlewares.length?this.middlewares[r++](e,n):t()},"next");n()}register(e,t,r=0){return this.registry.register(e,t,r)}};o(K,"MessageInternal");var w=K;var X=class X{constructor(){i(this,"bindings",new Map);i(this,"singletonInstances",new Map)}bind(e){let t={type:"transient",ctor:e};return this.bindings.set(e,t),{toSelf:o(()=>({inSingletonScope:o(()=>(t.type="singleton",{onActivation:o(r=>{},"onActivation")}),"inSingletonScope")}),"toSelf")}}get(e,t){let r=this.bindings.get(e);if(!r)throw new Error(`[Virid Container] Unbound Constructor: No binding found for ${e.name}`);let n=r.ctor;if(r.type==="singleton"){if(!this.singletonInstances.has(e)){let l=new n,d=t(l);this.singletonInstances.set(e,d)}return this.singletonInstances.get(e)}let u=new n;return t(u)}};o(X,"ViridContainer");var P=X;var c={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"};function Z(s,e,t){let r={params:s,targetClass:Object,methodName:t,originalMethod:e};return e.ccsContext=r,e}o(Z,"withContext");var me=o(s=>{let e=`${c.green}${c.bold} \u2714 [Virid Info] ${c.reset}`,t=`${c.magenta}${s.context}${c.reset}`;console.log(`${e}${c.gray}Global Info Caught:${c.reset}
|
|
19
|
+
${c.green}Details:${c.reset}`,s.context||"unknown Info")},"globalInfoHandler"),xe=o(s=>{let e=`${c.red}${c.bold} \u2716 [Virid Error] ${c.reset}`,t=`${c.magenta}${s.context}${c.reset}`;console.error(`${e}${c.gray}Global Error Caught:${c.reset}
|
|
20
|
+
${c.red}Context:${c.reset} ${t}
|
|
21
|
+
${c.red}Details:${c.reset}`,s.error||s||"unknown Error")},"globalErrorHandler"),ye=o(s=>{let e=`${c.yellow}${c.bold} \u26A0 [Virid Warn] ${c.reset}`,t=`${c.cyan}${s.context}${c.reset}`;console.warn(`${e}${c.gray}Global Warn Caught:${c.reset}
|
|
22
|
+
${c.yellow}Context:${c.reset} ${t}`)},"globalWarnHandler");function ne(s){s.register(b,Z(b,ye,"GlobalWarnHandler"),-999),s.register(v,Z(v,xe,"GlobalErrorHandler"),-999),s.register(S,Z(S,me,"GlobalInfoHandler"),-999),_=s}o(ne,"initializeGlobalSystems");var _=null,at=new Proxy({},{get(s,e){return(...t)=>{if(!_){console.warn(`[Virid Vue] App method "${String(e)}" called before initialization.`);return}let r=_[e];if(typeof r=="function")return r.apply(_,t)}}});var oe=new Set,te=class te{constructor(){i(this,"container",new P);i(this,"messageInternal",new w);i(this,"activationHooks",[])}addActivationHook(e){this.activationHooks.push(e)}get(e){return e.length>0&&a.error(new Error(`[Virid Container] Violation: Component "${e.name}" should not have constructor arguments. Dependency Injection is only allowed in Systems.`)),this.container.get(e,t=>this.handleActivation(t))}handleActivation(e){return e&&this.activationHooks.reduce((t,r)=>{try{let n=r(t);return n===void 0&&a.warn(`[Virid Container] Hook Does Bot Return A Value: Hook "${r.name}" should return a instance to continue.`),n!==void 0?n:t}catch(n){return a.error(n,"[Virid Container] Activation Hook Failed"),t}},e)}bindController(e){return this.container.bind(e).toSelf(),{inSingletonScope:o(()=>({onActivation:o(()=>{},"onActivation")}),"inSingletonScope")}}bindComponent(e){return this.container.bind(e).toSelf().inSingletonScope(),{onActivation:o(()=>{},"onActivation")}}useMiddleware(e,t=!1){this.messageInternal.useMiddleware(e,t)}onBeforeExecute(e,t,r=!1){this.messageInternal.onBeforeExecute(e,t,r)}onAfterExecute(e,t,r=!1){this.messageInternal.onAfterExecute(e,t,r)}onBeforeTick(e,t=!1){this.messageInternal.onBeforeTick(e,t)}onAfterTick(e,t=!1){this.messageInternal.onAfterTick(e,t)}register(e,t,r=0){return this.messageInternal.register(e,t,r)}use(e,t){if(oe.has(e.name))return a.warn(`[Virid Plugin] Duplicate Installation: Plugin ${e.name} has already been installed.`),this;try{e.install(this,t),oe.add(e.name)}catch(r){a.error(r,`[Virid Plugin]: Install Failed: ${e.name}`)}return this}};o(te,"ViridApp");var ee=te,k=new ee;k.addActivationHook(H);ne(k);var p={SYSTEM:"virid:core:system",MESSAGE:"virid:core:message",CONTROLLER:"virid:core:controller",COMPONENT:"virid:core:component",SAFE:"virid:core:safe",OBSERVER:"virid:core:observer"};var A=o(s=>{if(!s)return;(Array.isArray(s)?s:[s]).forEach(t=>{t instanceof x?a.write(t):a.warn("[Virid HandleResult] Invalid Return Type: Must return Message or Message[].")})},"handleResult");function ve(s={priority:0,messageClass:null}){return(e,t,r)=>{let n=r.value,u=Reflect.getMetadata("design:paramtypes",e,t),l=Reflect.getMetadata(p.MESSAGE,e,t)||null;if(!u){let h=new Error(`[Virid System] System Parameter Loss:
|
|
23
|
+
Unable to recognize system parameters, please confirm if import "reflection-metadata" was introduced at the beginning!`);a.error(h);return}if(u.some(h=>h===void 0)){let h=new Error(`[Virid System] Parameter Metadata Loss in "${t}":
|
|
28
24
|
One or more parameters have 'undefined' types.
|
|
29
25
|
This usually happens when you forget to add a type annotation to a decorated parameter.
|
|
30
|
-
Check parameter at index: ${
|
|
31
|
-
Please declare the message type using the Message decorator`));return}let d=o(
|
|
26
|
+
Check parameter at index: ${u.indexOf(void 0)}`);a.error(h);return}if(s.messageClass&&l){a.error(new Error(`[Virid System] Multiple Messages Are Not Allowed: Cannot use @ message() and SystemParams simultaneously in ${t}`));return}if(!s.messageClass&&!l){a.error(new Error(`[Virid System] System Parameter Loss:
|
|
27
|
+
Please declare the message type using the Message decorator`));return}let d=o(h=>{let M=u.map((C,ie)=>{if(l&&l.index==ie){let{messageClass:N,single:ae}=l,R=Array.isArray(h)?h[0]:h;if(!(R instanceof N)){let ce=R.constructor.name;throw new Error(`[Virid System] Type Mismatch: Expected ${N.name}, but received ${ce}`)}if(R instanceof y)return ae?Array.isArray(h)?h[h.length-1]:h:Array.isArray(h)?h:[h];if(R instanceof m)return h;throw new Error(`[Virid System] unknown Message Types: Message ${N.name} is not a subclass of SingleMessage or EventMessage!`)}let re=k.get(C);if(!re)throw new Error(`[Virid System] unknown Inject Data Types: ${C.name} is not registered in the container!`);return re}),$=n.apply(e,M);return $ instanceof Promise?$.then(A):A($)},"wrappedSystem"),f={params:u,targetClass:e,methodName:t,originalMethod:n};d.systemContext=f,r.value=d;let g=s.messageClass||l.messageClass;k.register(g,d,s.priority)}}o(ve,"System");function be(s,e=!0){return(t,r,n)=>{if(Reflect.hasOwnMetadata(p.MESSAGE,t,r)){a.error(new Error(`[Virid Message] Multiple Messages Are Not Allowed: ${r} has multiple @Message() decorators!`));return}let u={index:n,messageClass:s,single:e};Reflect.defineMetadata(p.MESSAGE,u,t,r)}}o(be,"Message");function Se(){return(s,e,t)=>{let r=Reflect.getMetadata(p.SAFE,s)||new Set;r.add(e),Reflect.defineMetadata(p.SAFE,r,s)}}o(Se,"Safe");function ke(s){return(e,t)=>{let r=Reflect.getMetadata(p.OBSERVER,e)||[];r.push({propertyKey:t,callback:s}),Reflect.defineMetadata(p.OBSERVER,r,e)}}o(ke,"Observer");function Ee(){return s=>{Reflect.defineMetadata(p.CONTROLLER,!0,s)}}o(Ee,"Controller");function we(){return s=>{Reflect.defineMetadata(p.COMPONENT,!0,s)}}o(we,"Component");var Ae=["push","pop","shift","unshift","splice","sort","reverse"];function H(s){return!s||typeof s!="object"||Object.prototype.hasOwnProperty.call(s,"__virid_observer_processed__")||(Object.defineProperty(s,"__virid_observer_processed__",{value:!0,enumerable:!1,configurable:!0}),(Reflect.getMetadata(p.OBSERVER,s)||[]).forEach(({propertyKey:t,callback:r})=>{console.log("instance :>> ",s),console.log("propertyKey :>> ",t);let n={value:s[t]},u=new Proxy(n,{get(d,f){let g=d.value;return Array.isArray(g)&&Ae.includes(f)?(...h)=>{let M=[...g],$=g[f].apply(g,h),C=r.call(s,M,g);return A(C),$}:g},set(d,f,g){let h=d.value;if(g===h)return!0;d.value=g;let M=r.call(s,h,g);return A(M),!0}}),l=o(()=>u.value,"getter");l.__virid_box__=n,Object.defineProperty(s,t,{get:l,set:o(d=>{u.value=d},"set"),enumerable:!0,configurable:!0}),n.value&&typeof n.value=="object"&&H(n.value)}),Reflect.ownKeys(s).forEach(t=>{if(t==="__virid_observer_processed__")return;let r=Object.getOwnPropertyDescriptor(s,t);if(r&&r.get)return;let n=s[t];n&&typeof n=="object"&&H(n)})),s}o(H,"bindObservers");function Me(){return k}o(Me,"createVirid");0&&(module.exports={BaseMessage,Component,Controller,ErrorMessage,EventMessage,InfoMessage,Message,MessageInternal,MessageRegistry,MessageWriter,Observer,Safe,SingleMessage,System,VIRID_METADATA,WarnMessage,activateInstance,bindObservers,createVirid,handleResult,publisher});
|
|
32
28
|
//# sourceMappingURL=index.cjs.map
|