@virid/vue 0.3.10 → 0.3.11
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 +6 -6
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +6 -6
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @virid/vue v0.3.
|
|
2
|
+
* @virid/vue v0.3.11
|
|
3
3
|
* Vue adapter for virid, projecting logic sovereignty to reactive UI
|
|
4
4
|
*/
|
|
5
|
-
var v=Object.defineProperty;var z=Object.getOwnPropertyDescriptor;var Y=Object.getOwnPropertyNames;var q=Object.prototype.hasOwnProperty;var Q=(t,e,r)=>e in t?v(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var i=(t,e)=>v(t,"name",{value:e,configurable:!0});var X=(t,e)=>{for(var r in e)v(t,r,{get:e[r],enumerable:!0})},Z=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Y(e))!q.call(t,o)&&o!==r&&v(t,o,{get:()=>e[o],enumerable:!(n=z(e,o))||n.enumerable});return t};var G=t=>Z(v({},"__esModule",{value:!0}),t);var I=(t,e,r)=>Q(t,typeof e!="symbol"?e+"":e,r);var le={};X(le,{Env:()=>ae,Inherit:()=>ie,Listener:()=>ce,OnHook:()=>ne,Project:()=>re,Responsive:()=>oe,Use:()=>se,VuePlugin:()=>
|
|
6
|
-
`);return w.MessageWriter.error(new Error(g)),null}let p=c.apply(o,u);return M(p,e,`${
|
|
5
|
+
var v=Object.defineProperty;var z=Object.getOwnPropertyDescriptor;var Y=Object.getOwnPropertyNames;var q=Object.prototype.hasOwnProperty;var Q=(t,e,r)=>e in t?v(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var i=(t,e)=>v(t,"name",{value:e,configurable:!0});var X=(t,e)=>{for(var r in e)v(t,r,{get:e[r],enumerable:!0})},Z=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Y(e))!q.call(t,o)&&o!==r&&v(t,o,{get:()=>e[o],enumerable:!(n=z(e,o))||n.enumerable});return t};var G=t=>Z(v({},"__esModule",{value:!0}),t);var I=(t,e,r)=>Q(t,typeof e!="symbol"?e+"":e,r);var le={};X(le,{Env:()=>ae,Inherit:()=>ie,Listener:()=>ce,OnHook:()=>ne,Project:()=>re,Responsive:()=>oe,Use:()=>se,VuePlugin:()=>T,Watch:()=>te,useController:()=>J});module.exports=G(le);var P=require("@virid/core"),l={...P.VIRID_METADATA,RESPONSIVE:"virid:vue:responsive",LIFE_CIRCLE:"virid:vue:life-circle",HOOK:"virid:vue:hook",LISTENER:"virid:vue:listener",INHERIT:"virid:vue:inherit",ATTR:"virid:vue:attr",PROJECT:"virid:vue:project",WATCH:"virid:vue:watch",ENV:"virid:vue:env"};var d=require("vue"),m=require("@virid/core");var x=null;function L(t){let e=i(r=>(r&&O(r),r),"bindResponsiveHook");t.onActivate(e),x=t}i(L,"activateApp");var C=new Proxy({},{get(t,e){return(...r)=>{if(!x)return console.warn(`[Virid Vue] App method "${String(e)}" called before initialization.`),e==="register"?()=>{console.warn("[Virid Vue] Cleanup ignored: source listener was never registered.")}:void 0;let n=x[e];if(typeof n=="function")return Reflect.apply(n,x,r)}}});var w=require("@virid/core");var $=!0;function j(){$=!1}i(j,"disableBorrowChecker");var S=new WeakMap;function M(t,e,r=""){if(!$||t===null||typeof t!="object"&&typeof t!="function")return t;if(S.has(t))return S.get(t);let n=new Proxy(t,{get(o,s,a){let c=Reflect.get(o,s,a),f=r?`${r}.${String(s)}`:String(s);return typeof c=="function"?(...u)=>{if(!ee(o,s)){let g=["[Virid Shield] Rejected",`Method: ${e}....${f}()`,"Reason: Unauthorized access to unsafe method."].join(`
|
|
6
|
+
`);return w.MessageWriter.error(new Error(g)),null}let p=c.apply(o,u);return M(p,e,`${f}()`)}:M(c,e,f)},set(o,s){let a=r?`${r}.${String(s)}`:String(s),c=["[Virid Borrow Checker]","------------------------------------------------",`Component: ${e}`,`Code: ${e}....${a}`,"Result: Rejected","Reason: This object is write protected and cannot be modified.",`Stack: ${new Error().stack}`,"------------------------------------------------"].join(`
|
|
7
7
|
`);return w.MessageWriter.error(new Error(c)),!1},deleteProperty(o,s){return w.MessageWriter.error(new Error(`[Virid Shield] Physical Protection:
|
|
8
8
|
Prohibit Deletion of Component Attributes ${String(s)}`)),!1},defineProperty(){return w.MessageWriter.error(new Error(`[Virid Shield] Physical Protection:
|
|
9
|
-
Prohibit redefining component attribute structure`)),!1}});return
|
|
10
|
-
`))},"readOnlySetter");if(s){if(a==="component"){m.MessageWriter.error(new Error(`[Virid Project] Architecture Violation: Manual get/set is forbidden on ${c} projection "${o}". Please use functional source.`));return}let h=Object.getOwnPropertyDescriptor(t,o);u=(0,
|
|
11
|
-
"${o}" is only readable.`)}},"set"),enumerable:!0,configurable:!0})})}i(B,"bindEnv");var
|
|
9
|
+
Prohibit redefining component attribute structure`)),!1}});return S.set(t,n),n}i(M,"createBorrowChecker");function ee(t,e){if(new Set([Symbol.iterator,Symbol.asyncIterator,Symbol.toStringTag,"toString","valueOf","toJSON","constructor"]).has(e))return!0;let n=t.constructor?.name;if({Map:new Set(["get","has","keys","values","entries","forEach","size"]),Set:new Set(["has","keys","values","entries","forEach","size"]),Array:new Set(["length","map","filter","reduce","slice","find","includes","findIndex","every","some","at","join","concat","flat","flatMap","indexOf","lastIndexOf"]),String:new Set(["length","slice","substring","substr","split","includes","startsWith","endsWith","indexOf","replace","replaceAll","trim","toLowerCase","toUpperCase"])}[n]?.has(e))return!0;let s=Reflect.getMetadata(l.SAFE,t);return!!(s instanceof Set&&s.has(e))}i(ee,"isShieldException");var A=class A{static set(e,r){return this.globalRegistry.has(e)?(m.MessageWriter.error(new Error(`[Virid UseController] Duplicate ID: Controller ${e} already exists`)),()=>!1):(this.globalRegistry.set(e,r),()=>(this.globalRegistry.delete(e),!0))}static get(e){return this.globalRegistry.has(e)?this.globalRegistry.get(e):(m.MessageWriter.error(new Error(`[Virid UseController] ID Not Found: No Controller found with ID: ${e}`)),null)}};i(A,"GlobalRegistry"),I(A,"globalRegistry",(0,d.shallowReactive)(new Map));var y=A;function N(t,e){Reflect.getMetadata(l.PROJECT,t)?.forEach(n=>{let{key:o,isAccessor:s,type:a,componentClass:c,source:f}=n,u,p=i(h=>{m.MessageWriter.error(new Error(`[Virid Project] Read-only: Property "${o}" in "${e.constructor.name}" is a protected projection.
|
|
10
|
+
`))},"readOnlySetter");if(s){if(a==="component"){m.MessageWriter.error(new Error(`[Virid Project] Architecture Violation: Manual get/set is forbidden on ${c} projection "${o}". Please use functional source.`));return}let h=Object.getOwnPropertyDescriptor(t,o);u=(0,d.computed)({get:i(()=>h?.get?.call(e),"get"),set:i(b=>{h?.set?h.set.call(e,b):p(b)},"set")})}else u=(0,d.computed)({get:i(()=>{let h=a==="component",b=h?C.get(c):e,R=f(b);return h?M(R,c.name,o):R},"get"),set:p});let g=Object.getOwnPropertyDescriptor(e,o);g&&g.configurable===!1||Object.defineProperty(e,o,{get:i(()=>u.value,"get"),set:i(h=>u.value=h,"set"),enumerable:!0,configurable:!0})})}i(N,"bindProject");function D(t,e){let r=Reflect.getMetadata(l.WATCH,t)||[],n=[];return r.forEach(o=>{let{type:s,source:a,methodName:c,options:f,componentClass:u}=o,p=s==="component"?C.get(u):e;p&&!p.__ccs_processed__&&O(p);let g=i(()=>{try{return a(p)}catch(R){m.MessageWriter.error(R,`[Virid Watch] Getter error in ${c}`);return}},"getter"),h=e[c].bind(e),b=(0,d.watch)(g,(R,K)=>{h(R,K)},{...f});n.push(b)}),n}i(D,"bindWatch");function O(t){return!t||typeof t!="object"||t.__virid_responsive_processed__||(Object.defineProperty(t,"__virid_responsive_processed__",{value:!0,enumerable:!1}),(Reflect.getMetadata(l.RESPONSIVE,t)||[]).forEach(r=>{let n=r.key,o=Object.getOwnPropertyDescriptor(t,n),s=o?.get?.__virid_box__;if(s){let a=s.value,c=r.shallow?(0,d.shallowRef)(a):(0,d.ref)(a);Object.defineProperty(s,"value",{get:i(()=>c.value,"get"),set:i(f=>{c.value=f},"set"),enumerable:!0,configurable:!0})}else{if(o&&o.get)return;let a=t[n],c=r.shallow?(0,d.shallowRef)(a):(0,d.ref)(a);Object.defineProperty(t,n,{get:i(()=>c.value,"get"),set:i(f=>{c.value=f},"set"),enumerable:!0,configurable:!0})}}),Reflect.ownKeys(t).forEach(r=>{if(r==="__virid_responsive_processed__")return;let n=t[r];n&&typeof n=="object"&&O(n)})),t}i(O,"bindResponsive");function H(t,e){Reflect.getMetadata(l.LIFE_CIRCLE,t)?.forEach(n=>{let{hookName:o,methodName:s}=n,a=e[s].bind(e);switch(o){case"onMounted":(0,d.onMounted)(a);break;case"onUnmounted":(0,d.onUnmounted)(a);break;case"onUpdated":(0,d.onUpdated)(a);break;case"onActivated":(0,d.onActivated)(a);break;case"onDeactivated":(0,d.onDeactivated)(a);break;case"onSetup":a();break}})}i(H,"bindHooks");function U(t,e){Reflect.getMetadata(l.HOOK,t)?.forEach(n=>{let o=n.hookFactory();e[n.key]=o})}i(U,"bindUseHooks");function W(t,e){let r=Reflect.getMetadata(l.LISTENER,t)||[],n=[];return r.forEach(({key:o,messageClass:s,priority:a,batchMode:c})=>{let f=e[o],u={params:[s],targetClass:e.constructor,methodName:o,originalMethod:f},p={messageClass:s,messageIdx:0,batchMode:c,priority:a};e[o].systemContext=u,e[o].systemConfig=p;let g=C.register(e[o]);n.push(g)}),n}i(W,"bindListener");function k(t,e){let r=Reflect.getMetadata(l.INHERIT,t);r&&r.forEach(({key:n,id:o,selector:s})=>{let a=(0,d.computed)(()=>{let c=y.get(o);return c?s?s(c):c:(m.MessageWriter.warn(`[Virid Inherit] Warning: Inherit target not found: ${o}`),null)});Object.defineProperty(e,n,{get:i(()=>{let c=a.value;return c?M(c,n,""):null},"get"),set:i(()=>{m.MessageWriter.error(new Error(`[Virid Inherit] No Modification: Attempted to set read-only Inherit property: ${n}`))},"set"),enumerable:!0,configurable:!0})})}i(k,"bindInherit");function B(t,e,r){let n=Reflect.getMetadata(l.ENV,t);n&&(console.log("envs:",n),console.log("context:",r),n.forEach(({key:o})=>{if(!(o in r)){m.MessageWriter.warn(`[Virid Context] Env Not Found: The "${o}" is not defined in the context.`);return}Object.defineProperty(e,o,{get:i(()=>r[o],"get"),set:i(s=>{if(r[o]!==s)try{r[o]=s}catch(a){m.MessageWriter.error(a,`[Virid Context] Set Failed:
|
|
11
|
+
"${o}" is only readable.`)}},"set"),enumerable:!0,configurable:!0})}))}i(B,"bindEnv");var V=require("vue");var F=require("@virid/core");function J(t,e){let r=C.get(t);if(!Reflect.hasMetadata(l.CONTROLLER,t))return F.MessageWriter.error(new Error(`[Virid Controller] ${t.name} is not a Controller.Use @Controller to inject it.`)),null;let o=Object.getPrototypeOf(r),s=e?.context||(0,V.useAttrs)();s&&B(o,r,s),U(o,r),k(o,r),N(o,r);let a=W(o,r);H(o,r);let c=D(o,r),f=i(()=>!0,"unbindRegister");return e?.id&&(f=y.set(e.id,r)),(0,V.onUnmounted)(()=>{c.forEach(u=>u()),a.forEach(u=>u()),f()}),r}i(J,"useController");var E=require("@virid/core");function te(t,e,r){return(n,o)=>{let s=Reflect.getMetadata(l.WATCH,n)||[];typeof e=="function"?s.push({type:"component",componentClass:t,source:e,options:r,methodName:o}):s.push({type:"local",componentClass:null,source:t,options:e,methodName:o}),Reflect.defineMetadata(l.WATCH,s,n)}}i(te,"Watch");function re(t,e){return(r,n,o)=>{let s=Reflect.getMetadata(l.PROJECT,r)||[],a=!!(o?.get||o?.set);if(!t&&!e&&!a){E.MessageWriter.error(new Error("[Virid Project] Invalid Usage: @Project() can only be used on getter or setter."));return}let c={key:n,isAccessor:a,type:typeof e=="function"?"component":"local",componentClass:typeof e=="function"?t:null,source:typeof e=="function"?e:a?null:t};s.push(c),Reflect.defineMetadata(l.PROJECT,s,r)}}i(re,"Project");function oe(t=!1){return(e,r)=>{let n=Reflect.getMetadata(l.RESPONSIVE,e)||[];n.push({key:r,shallow:t}),Reflect.defineMetadata(l.RESPONSIVE,n,e)}}i(oe,"Responsive");function ne(t){return(e,r)=>{let n=Reflect.getMetadata(l.LIFE_CIRCLE,e)||[];n.push({hookName:t,methodName:r}),Reflect.defineMetadata(l.LIFE_CIRCLE,n,e)}}i(ne,"OnHook");function se(t){return(e,r)=>{let n=Reflect.getMetadata(l.HOOK,e)||[];n.push({key:r,hookFactory:t}),Reflect.defineMetadata(l.HOOK,n,e)}}i(se,"Use");function ie(t,e,r){return(n,o)=>{let s=Reflect.getMetadata(l.INHERIT,n)||[];s.push({key:o,token:t,id:e,selector:r}),Reflect.defineMetadata(l.INHERIT,s,n)}}i(ie,"Inherit");function ae(){return(t,e)=>{let r=Reflect.getMetadata(l.ENV,t)||[];r.push({key:e}),Reflect.defineMetadata(l.ENV,r,t)}}i(ae,"Env");function ce(t={messageClass:null,priority:0,batchMode:!1}){return(e,r,n)=>{if(typeof e=="function")throw new Error(`[Virid Listener] Method Type Error: The Method "${r}" is a static method. @Listener can only be used on instance member methods.`);let o=Reflect.getMetadata("design:paramtypes",e,r)||[],s=o.map((u,p)=>u===void 0?p:-1).filter(u=>u!==-1);if(s.length>0)throw new Error(`[Virid Listener] Parameter Metadata Loss in "${r}": One or more parameters have 'undefined' types. Check indices: [${s.join(", ")}]`);if(o.length>1)throw new Error(`[Virid Listener] Multiple Parameters Not Allowed: Listener method "${r}" can have at most ONE parameter (BaseMessage subclass or Array).`);let a=t.messageClass,c=t.batchMode??!1;if(o.length===0){if(!t.messageClass)throw new Error(`[Virid Listener] Rule Violation in "${r}": When the method has no parameters, you MUST specify "messageClass" in the decorator options.`)}else{let u=o[0];if(u===Array){if(!t.messageClass)throw new Error(`[Virid Listener] Rule Violation in "${r}": When using batch processing mode with Array, the "messageClass" parameter must be specified in decorator options.`);if(!(t.messageClass.prototype instanceof E.SingleMessage))throw new Error(`[Virid Listener] Type Mismatch in "${r}": Batch processing mode (Array) is only supported for subclasses of SingleMessage.`);c=!0}else if(u===E.BaseMessage||u&&u.prototype instanceof E.BaseMessage){if(t.messageClass)throw new Error(`[Virid Listener] Rule Violation in "${r}": Cannot specify "messageClass" in decorator options when it is already declared as a method parameter.`);a=u,c=t.batchMode??!1}else throw new Error(`[Virid Listener] Invalid Parameter in "${r}": The single parameter must be either a subclass of BaseMessage or an Array.`)}let f=Reflect.getMetadata(l.LISTENER,e)||[];f.push({key:r,messageClass:a,priority:t.priority||0,batchMode:c}),Reflect.defineMetadata(l.LISTENER,f,e)}}i(ce,"Listener");var _=class _{constructor(){I(this,"name","@virid/vue")}install(e,r){r.disableBorrowChecker&&j(),L(e)}};i(_,"VuePlugin");var T=_;0&&(module.exports={Env,Inherit,Listener,OnHook,Project,Responsive,Use,VuePlugin,Watch,useController});
|
|
12
12
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/decorators/constant.ts","../src/adapters/bind.ts","../src/app.ts","../src/adapters/borrow_checker.ts","../src/adapters/hook.ts","../src/decorators/vue.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: Vue adapter for virid, projecting logic sovereignty to reactive UI.\n */\nimport { ViridPlugin, type ViridApp } from \"@virid/core\";\nimport { type PluginOption } from \"./interfaces\";\nexport * from \"./adapters\";\nexport * from \"./decorators\";\nexport * from \"./interfaces\";\nimport { activateApp } from \"./app\";\nimport { disableBorrowChecker } from \"./adapters/borrow_checker\";\n\nexport class VuePlugin implements ViridPlugin<PluginOption> {\n name = \"@virid/vue\";\n install(app: ViridApp, options: PluginOption) {\n if (options.disableBorrowChecker) disableBorrowChecker();\n activateApp(app);\n }\n}\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Vue\n */\nimport { VIRID_METADATA } from \"@virid/core\";\nexport const VIRID_VUE_METADATA = {\n ...VIRID_METADATA,\n RESPONSIVE: \"virid:vue:responsive\",\n LIFE_CIRCLE: \"virid:vue:life-circle\",\n HOOK: \"virid:vue:hook\",\n LISTENER: \"virid:vue:listener\",\n INHERIT: \"virid:vue:inherit\",\n ATTR: \"virid:vue:attr\",\n PROJECT: \"virid:vue:project\",\n WATCH: \"virid:vue:watch\",\n ENV: \"virid:vue:env\",\n} as const;\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Vue\n */\nimport { VIRID_VUE_METADATA } from \"../decorators/constant\";\nimport {\n watch,\n computed,\n type WatchStopHandle,\n ref,\n shallowReactive,\n onMounted,\n onUnmounted,\n onUpdated,\n onActivated,\n onDeactivated,\n shallowRef,\n type WritableComputedRef,\n} from \"vue\";\nimport { MessageWriter, type SystemContext, SystemConfig } from \"@virid/core\";\nimport { viridApp } from \"../app\";\nimport { createBorrowChecker } from \"./borrow_checker\";\nimport {\n type WatchMetadata,\n type ProjectMetadata,\n type InheritMetadata,\n type UseMetadata,\n type ResponsiveMetadata,\n type OnHookMetadata,\n type ListenerMetadata,\n EnvMetadata,\n} from \"../interfaces\";\n\n// controller注册表\n\nexport class GlobalRegistry {\n private static globalRegistry = shallowReactive(new Map<string, any>());\n static set(id: string, instance: any): () => boolean {\n if (!this.globalRegistry.has(id)) {\n this.globalRegistry.set(id, instance);\n //返回卸载函数\n return () => {\n this.globalRegistry.delete(id);\n return true;\n };\n } else {\n MessageWriter.error(\n new Error(\n `[Virid UseController] Duplicate ID: Controller ${id} already exists`,\n ),\n );\n return () => false;\n }\n }\n static get(id: string): any {\n //如果找不见,直接报错\n if (!this.globalRegistry.has(id)) {\n MessageWriter.error(\n new Error(\n `[Virid UseController] ID Not Found: No Controller found with ID: ${id}`,\n ),\n );\n return null;\n }\n return this.globalRegistry.get(id);\n }\n}\n/**\n * @Project 连接component,只读一个component的值\n */\nexport function bindProject(proto: any, instance: any) {\n const projects: ProjectMetadata = Reflect.getMetadata(\n VIRID_VUE_METADATA.PROJECT,\n proto,\n );\n\n projects?.forEach((config) => {\n const { key, isAccessor, type, componentClass, source } = config;\n let project: WritableComputedRef<any, any>;\n\n // 统一报错 Setter\n const readOnlySetter = (_val: any) => {\n MessageWriter.error(\n new Error(\n `[Virid Project] Read-only: Property \"${key}\" in \"${instance.constructor.name}\" is a protected projection.\\n`,\n ),\n );\n };\n\n // 手写 Accessor\n if (isAccessor) {\n if (type === \"component\") {\n MessageWriter.error(\n new Error(\n `[Virid Project] Architecture Violation: Manual get/set is forbidden on ${componentClass} projection \"${key}\". Please use functional source.`,\n ),\n );\n return;\n }\n\n // 只有非 component 类型才走到这里,支持读写\n const rawDescriptor = Object.getOwnPropertyDescriptor(proto, key);\n project = computed({\n get: () => rawDescriptor?.get?.call(instance),\n set: (val) => {\n if (rawDescriptor?.set) {\n rawDescriptor.set.call(instance, val);\n } else {\n readOnlySetter(val);\n }\n },\n });\n }\n //函数式投影\n else {\n project = computed({\n get: () => {\n const isFromComponent = type === \"component\";\n const target = isFromComponent\n ? viridApp.get(componentClass)\n : instance;\n const val = source(target);\n\n // 来自 component 的数据套盾\n if (isFromComponent) {\n return createBorrowChecker(val, componentClass!.name, key);\n }\n\n // 来自自己的投影,直接返回\n return val;\n },\n set: readOnlySetter,\n });\n }\n\n const currentDescriptor = Object.getOwnPropertyDescriptor(instance, key);\n if (currentDescriptor && currentDescriptor.configurable === false) return;\n\n Object.defineProperty(instance, key, {\n get: () => project.value,\n set: (val) => (project.value = val),\n enumerable: true,\n configurable: true,\n });\n });\n}\n/**\n * @Watch 自动把函数变成watch\n */\n\nexport function bindWatch(proto: any, instance: any) {\n const watches: WatchMetadata =\n Reflect.getMetadata(VIRID_VUE_METADATA.WATCH, proto) || [];\n const stops: WatchStopHandle[] = [];\n\n watches.forEach((config) => {\n const { type, source, methodName, options, componentClass } = config;\n\n // 获取目标实例\n const target =\n type === \"component\" ? viridApp.get(componentClass) : instance;\n // 确保目标实例已经过响应式处理\n if (target && !target.__ccs_processed__) {\n bindResponsive(target);\n }\n // 封装 getter\n const getter = () => {\n try {\n return source(target);\n } catch (e) {\n MessageWriter.error(\n e as Error,\n `[Virid Watch] Getter error in ${methodName}`,\n );\n return undefined;\n }\n };\n // 使用 bind 确保回调函数内部的 this 指向当前的 Controller/Instance\n const callback = (instance[methodName] as any).bind(instance);\n // 执行监听\n const stop = watch(\n getter,\n (newVal, oldVal) => {\n callback(newVal, oldVal);\n },\n {\n ...options,\n },\n );\n stops.push(stop);\n });\n\n return stops;\n}\n\n/**\n * @Responsive 递归处理,支持在 Observer 基础上套娃\n */\nexport function bindResponsive(instance: any) {\n if (!instance || typeof instance !== \"object\") return instance;\n if (instance.__virid_responsive_processed__) return instance;\n\n Object.defineProperty(instance, \"__virid_responsive_processed__\", {\n value: true,\n enumerable: false,\n });\n\n const props: ResponsiveMetadata =\n Reflect.getMetadata(VIRID_VUE_METADATA.RESPONSIVE, instance) || [];\n\n props.forEach((config) => {\n const key = config.key;\n const descriptor = Object.getOwnPropertyDescriptor(instance, key);\n\n // 【关键逻辑】检查是否已经被 bindObservers 劫持过\n const existingBox = (descriptor?.get as any)?.__virid_box__;\n\n // 在 bindResponsive 内部\n if (existingBox) {\n const rawValue = existingBox.value;\n const vRef = config.shallow ? shallowRef(rawValue) : ref(rawValue);\n\n Object.defineProperty(existingBox, \"value\", {\n get: () => vRef.value,\n set: (val) => {\n vRef.value = val;\n },\n enumerable: true,\n configurable: true,\n });\n } else {\n // 普通属性,按照原逻辑处理\n if (descriptor && descriptor.get) return;\n\n const rawValue = instance[key];\n const internalState = config.shallow\n ? shallowRef(rawValue)\n : ref(rawValue);\n\n Object.defineProperty(instance, key, {\n get: () => internalState.value,\n set: (val) => {\n internalState.value = val;\n },\n enumerable: true,\n configurable: true,\n });\n }\n });\n\n // 递归处理子对象\n Reflect.ownKeys(instance).forEach((key) => {\n if (key === \"__virid_responsive_processed__\") return;\n const val = instance[key];\n if (val && typeof val === \"object\") {\n bindResponsive(val);\n }\n });\n return instance;\n}\n\n/**\n * 解析 @OnHook 并将其绑定到 Vue 生命周期\n */\nexport function bindHooks(proto: any, instance: any) {\n const hooks: OnHookMetadata = Reflect.getMetadata(\n VIRID_VUE_METADATA.LIFE_CIRCLE,\n proto,\n );\n\n hooks?.forEach((config) => {\n const { hookName, methodName } = config;\n const fn = instance[methodName].bind(instance);\n\n switch (hookName) {\n case \"onMounted\":\n onMounted(fn);\n break;\n case \"onUnmounted\":\n onUnmounted(fn);\n break;\n case \"onUpdated\":\n onUpdated(fn);\n break;\n case \"onActivated\":\n onActivated(fn);\n break;\n case \"onDeactivated\":\n onDeactivated(fn);\n break;\n case \"onSetup\":\n fn();\n break;\n // 可以根据需要扩展更多的钩子\n }\n });\n}\n\n/**\n * 执行并绑定万能 Hooks\n */\nexport function bindUseHooks(proto: any, instance: any) {\n const hooks: UseMetadata = Reflect.getMetadata(\n VIRID_VUE_METADATA.HOOK,\n proto,\n );\n\n hooks?.forEach((config) => {\n // 在 useController 运行期间执行 hookFactory()\n const hookResult = config.hookFactory();\n // 直接赋值给实例\n instance[config.key] = hookResult;\n });\n}\n\n/**\n * @description: 启动@Listener 为 Controller 实例绑定监听器并返回销毁函数列表\n **/\nexport function bindListener(proto: any, instance: any): (() => void)[] {\n const listenerConfigs: ListenerMetadata =\n Reflect.getMetadata(VIRID_VUE_METADATA.LISTENER, proto) || [];\n const unbindFunctions: (() => void)[] = [];\n\n listenerConfigs.forEach(({ key, messageClass, priority, batchMode }) => {\n const originalMethod = instance[key];\n\n // 给包装后的函数挂载上下文信息\n const listenerContext: SystemContext = {\n params: [messageClass],\n targetClass: instance.constructor,\n methodName: key,\n originalMethod: originalMethod,\n };\n\n const listenerConfig: SystemConfig = {\n messageClass: messageClass,\n messageIdx: 0,\n batchMode: batchMode,\n priority: priority,\n };\n (instance[key] as any).systemContext = listenerContext;\n (instance[key] as any).systemConfig = listenerConfig;\n\n const unregister = viridApp.register(instance[key]);\n unbindFunctions.push(unregister);\n });\n\n return unbindFunctions;\n}\n\n/**\n * @description: 启动@Inherit 使能够只读其他的controller\n **/\nexport function bindInherit(proto: any, instance: any) {\n const inherits: InheritMetadata = Reflect.getMetadata(\n VIRID_VUE_METADATA.INHERIT,\n proto,\n );\n if (!inherits) return;\n\n inherits.forEach(({ key, id, selector }) => {\n // 为每个继承属性创建一个私有的 computed 引用\n // 这个 computed 就像一个隧道,一头连着 Registry,一头连着子组件\n const tunnel = computed(() => {\n const target = GlobalRegistry.get(id); // 自动依赖 Registry 的增删\n if (!target) {\n MessageWriter.warn(\n `[Virid Inherit] Warning: Inherit target not found: ${id}`,\n );\n return null;\n }\n // 这里的 selector(target) 也会触发依赖收集\n // 如果 target.state.count 变了,这个 computed 也会感知到\n return selector ? selector(target) : target;\n });\n\n Object.defineProperty(instance, key, {\n get: () => {\n const val = tunnel.value; // 访问 computed.value\n // 返回时依然套上护盾,确保“弱引用”也是“只读引用”\n return val ? createBorrowChecker(val, key, \"\") : null;\n },\n set: () => {\n MessageWriter.error(\n new Error(\n `[Virid Inherit] No Modification: Attempted to set read-only Inherit property: ${key}`,\n ),\n );\n },\n enumerable: true,\n configurable: true,\n });\n });\n}\n\n/**\nu* @description: 把槽或者其他乱七八糟的东西传递过来的上下文注入到controller里\n * @param {*} context 上下文对象\n * @param {*} instance controller实例\n */\nexport function bindEnv(proto: any, instance: any, context: any) {\n const envs: EnvMetadata = Reflect.getMetadata(VIRID_VUE_METADATA.ENV, proto);\n if (!envs) return;\n envs.forEach(({ key }) => {\n // if (key in context === false) {\n // MessageWriter.warn(\n // `[Virid Context] Env Not Found: The \"${key}\" is not defined in the context.`,\n // );\n // return;\n // }\n Object.defineProperty(instance, key, {\n get: () => context[key],\n set: (val) => {\n if (context[key] === val) return;\n try {\n context[key] = val;\n } catch (e) {\n MessageWriter.error(\n e as Error,\n `[Virid Context] Set Failed:\\n \"${key}\" is only readable.`,\n );\n }\n },\n enumerable: true,\n configurable: true,\n });\n });\n}\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Vue\n */\nimport { type ViridApp, Newable } from \"@virid/core\";\nimport { bindResponsive } from \"./adapters/bind\";\nexport interface IViridApp {\n register(systemFn: (...args: any[]) => any): () => void;\n get(identifier: any): any;\n bind<T>(identifier: Newable<T>): void;\n}\n\nlet activeApp: IViridApp | null = null;\n\nexport function activateApp(app: ViridApp) {\n const bindResponsiveHook = (instance: any) => {\n if (instance) {\n bindResponsive(instance);\n }\n return instance;\n };\n app.onActivate(bindResponsiveHook);\n activeApp = app;\n}\n\nexport const viridApp: IViridApp = new Proxy({} as IViridApp, {\n get(_, prop: keyof IViridApp) {\n return (...args: any[]) => {\n if (!activeApp) {\n console.warn(\n `[Virid Vue] App method \"${String(prop)}\" called before initialization.`,\n );\n\n if (prop === \"register\") {\n return () => {\n console.warn(\n \"[Virid Vue] Cleanup ignored: source listener was never registered.\",\n );\n };\n }\n return undefined;\n }\n const targetMethod = activeApp[prop];\n if (typeof targetMethod === \"function\") {\n return Reflect.apply(targetMethod, activeApp, args);\n }\n };\n },\n});\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Vue\n */\nimport { MessageWriter } from \"@virid/core\";\nimport { VIRID_VUE_METADATA } from \"../decorators/constant\";\n\nlet isBorrowCheckerEnabled = true;\nexport function disableBorrowChecker() {\n isBorrowCheckerEnabled = false;\n}\n\nconst borrowCache = new WeakMap<any, any>();\n\n/**\n * Recursive borrowing check proxy: Make the object and all its descendants hard read-only\n */\nexport function createBorrowChecker(\n target: any,\n rootName: string,\n path: string = \"\",\n): any {\n if (\n !isBorrowCheckerEnabled ||\n target === null ||\n (typeof target !== \"object\" && typeof target !== \"function\")\n ) {\n return target;\n }\n if (borrowCache.has(target)) {\n return borrowCache.get(target);\n }\n\n const proxy = new Proxy(target, {\n get(obj, prop, receiver) {\n const value = Reflect.get(obj, prop, receiver);\n const currentPath = path ? `${path}.${String(prop)}` : String(prop);\n if (typeof value === \"function\") {\n return (...args: any[]) => {\n if (!isShieldException(obj, prop)) {\n const errorMsg = [\n `[Virid Shield] Rejected`,\n `Method: ${rootName}....${currentPath}()`,\n `Reason: Unauthorized access to unsafe method.`,\n ].join(\"\\n\");\n MessageWriter.error(new Error(errorMsg));\n return null;\n }\n\n const result = value.apply(obj, args);\n return createBorrowChecker(result, rootName, `${currentPath}()`);\n };\n }\n return createBorrowChecker(value, rootName, currentPath);\n },\n\n set(_obj, prop) {\n const currentPath = path ? `${path}.${String(prop)}` : String(prop);\n\n // Elegantly fail and provide repair suggestions\n const errorMsg = [\n `[Virid Borrow Checker]`,\n `------------------------------------------------`,\n `Component: ${rootName}`,\n `Code: ${rootName}....${currentPath}`,\n `Result: Rejected`,\n `Reason: This object is write protected and cannot be modified.`,\n `Stack: ${new Error().stack}`,\n `------------------------------------------------`,\n ].join(\"\\n\");\n MessageWriter.error(new Error(errorMsg));\n return false;\n },\n deleteProperty(_obj, prop) {\n MessageWriter.error(\n new Error(\n `[Virid Shield] Physical Protection:\\nProhibit Deletion of Component Attributes ${String(prop)}`,\n ),\n );\n return false;\n },\n defineProperty() {\n MessageWriter.error(\n new Error(\n `[Virid Shield] Physical Protection:\\nProhibit redefining component attribute structure`,\n ),\n );\n return false;\n },\n });\n borrowCache.set(target, proxy);\n return proxy;\n}\n/**\n * Determine whether a method should skip shield interception\n */\nfunction isShieldException(obj: any, prop: string | symbol): boolean {\n const PROTOCOL_WHITELIST = new Set<string | symbol>([\n Symbol.iterator,\n Symbol.asyncIterator,\n Symbol.toStringTag,\n \"toString\",\n \"valueOf\",\n \"toJSON\",\n \"constructor\",\n ]);\n if (PROTOCOL_WHITELIST.has(prop)) return true;\n\n const constructorName = obj.constructor?.name;\n\n const READONLY_COLLECTIONS: Record<string, Set<string | symbol>> = {\n Map: new Set([\n \"get\",\n \"has\",\n \"keys\",\n \"values\",\n \"entries\",\n \"forEach\",\n \"size\",\n ]),\n Set: new Set([\"has\", \"keys\", \"values\", \"entries\", \"forEach\", \"size\"]),\n Array: new Set([\n \"length\",\n \"map\",\n \"filter\",\n \"reduce\",\n \"slice\",\n \"find\",\n \"includes\",\n \"findIndex\",\n \"every\",\n \"some\",\n \"at\",\n \"join\",\n \"concat\",\n \"flat\",\n \"flatMap\",\n \"indexOf\",\n \"lastIndexOf\",\n ]),\n String: new Set([\n \"length\",\n \"slice\",\n \"substring\",\n \"substr\",\n \"split\",\n \"includes\",\n \"startsWith\",\n \"endsWith\",\n \"indexOf\",\n \"replace\",\n \"replaceAll\",\n \"trim\",\n \"toLowerCase\",\n \"toUpperCase\",\n ]),\n };\n\n if (READONLY_COLLECTIONS[constructorName]?.has(prop)) return true;\n\n const safeMethods = Reflect.getMetadata(VIRID_VUE_METADATA.SAFE, obj);\n if (safeMethods instanceof Set && safeMethods.has(prop)) return true;\n\n return false;\n}\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Vue\n */\nimport {\n bindProject,\n bindWatch,\n bindHooks,\n bindUseHooks,\n bindListener,\n GlobalRegistry,\n bindInherit,\n bindEnv,\n} from \"./bind\";\nimport { onUnmounted, useAttrs } from \"vue\";\nimport { VIRID_VUE_METADATA } from \"../decorators/constant\";\nimport { MessageWriter, Newable } from \"@virid/core\";\nimport { viridApp } from \"../app\";\n/**\n * @description: vue的hooks适配器,注入IOC容器中的Controller实例,并挂在vue的各种方法\n * @param token\n */\nexport function useController<T>(\n token: Newable<T>,\n options?: { id?: string; context?: object },\n): T {\n const instance = viridApp.get(token) as any;\n\n // 检查身份 Controller\n const isController = Reflect.hasMetadata(\n VIRID_VUE_METADATA.CONTROLLER,\n token,\n );\n if (!isController) {\n // 确保非 Controller 的实例不能被其他 Controller 访问\n MessageWriter.error(\n new Error(\n `[Virid Controller] ${token.name} is not a Controller.Use @Controller to inject it.`,\n ),\n );\n return null as T;\n }\n\n //绑定各种魔法装饰器\n const proto = Object.getPrototypeOf(instance);\n //注入vue的乱七八糟的context\n const reactiveContext = options?.context || useAttrs();\n if (reactiveContext) {\n bindEnv(proto, instance, reactiveContext);\n }\n // @Use装饰器\n bindUseHooks(proto, instance);\n // @Inherit装饰器\n bindInherit(proto, instance);\n // @Project装饰器\n bindProject(proto, instance);\n // @Listener装饰器\n // 运行时动态挂载监听器\n const unbindList = bindListener(proto, instance);\n // 生命周期钩子\n bindHooks(proto, instance);\n //绑定全局注册表\n // @Watch装饰器\n const stops = bindWatch(proto, instance);\n //如果有id,就去注册\n let unbindRegister = () => true;\n if (options?.id) {\n unbindRegister = GlobalRegistry.set(options.id, instance);\n }\n onUnmounted(() => {\n stops.forEach((stop) => stop());\n unbindList.forEach((stop) => stop());\n unbindRegister();\n // 自动卸载信号处理器,防止 Controller 销毁后残留\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 Vue\n */\nimport { VIRID_VUE_METADATA } from \"./constant\";\nimport type { WatchOptions } from \"vue\";\nimport {\n MessageWriter,\n type Newable,\n BaseMessage,\n SingleMessage,\n} from \"@virid/core\";\nimport {\n type WatchMetadata,\n type ProjectMetadata,\n type InheritMetadata,\n type UseMetadata,\n type ResponsiveMetadata,\n type OnHookMetadata,\n type ListenerMetadata,\n type ListenerConfig,\n EnvMetadata,\n} from \"../interfaces\";\n\n/**\n * Overload 1: Monitor Controller's own variables\n * @param source Watching closure functions\n * @param options Watch options\n */\nexport function Watch<T>(\n source: (instance: T) => any | Promise<any>,\n options?: WatchOptions,\n): any;\n\n/**\n * Overload 2: Monitor Component's variables\n * @param componentClass Component class\n * @param source Watching closure functions\n * @param options Watch options\n */\n\nexport function Watch<C>(\n component: Newable<C>,\n source: (comp: C) => any | Promise<any>,\n options?: WatchOptions,\n): any;\n\nexport function Watch(arg1: any, arg2?: any, arg3?: any) {\n return (target: any, methodName: string) => {\n const existing: WatchMetadata =\n Reflect.getMetadata(VIRID_VUE_METADATA.WATCH, target) || [];\n\n if (typeof arg2 === \"function\") {\n // Watch(Component, (c) => c.prop, options)\n existing.push({\n type: \"component\",\n componentClass: arg1,\n source: arg2,\n options: arg3,\n methodName,\n });\n } else {\n // Watch((i) => i.prop, options)\n existing.push({\n type: \"local\",\n componentClass: null,\n source: arg1,\n options: arg2,\n methodName,\n });\n }\n\n Reflect.defineMetadata(VIRID_VUE_METADATA.WATCH, existing, target);\n };\n}\n\n/**\n * Overload 1: Internal Projection\n * @param source Projection closure functions\n */\n\nexport function Project<T>(source: (instance: T) => any): any;\n\n/**\n * Overload 1: Component Projection\n * @param source Projection closure functions\n */\nexport function Project<C>(\n component: new (...args: any[]) => C,\n source: (comp: C) => any,\n): any;\n// Overload 3: Internal get set projection @Project() Public get name() {}\nexport function Project<T>(): any;\n\nexport function Project(arg1?: any, arg2?: any) {\n return (target: any, key: string, descriptor?: PropertyDescriptor) => {\n const existing: ProjectMetadata =\n Reflect.getMetadata(VIRID_VUE_METADATA.PROJECT, target) || [];\n const isAccessor = !!(descriptor?.get || descriptor?.set);\n if (!arg1 && !arg2 && !isAccessor) {\n MessageWriter.error(\n new Error(\n `[Virid Project] Invalid Usage: @Project() can only be used on getter or setter.`,\n ),\n );\n return;\n }\n const metadata = {\n key,\n isAccessor: isAccessor,\n // 这里的逻辑和 Watch 保持高度一致\n type: typeof arg2 === \"function\" ? \"component\" : \"local\",\n componentClass: typeof arg2 === \"function\" ? arg1 : null,\n source: typeof arg2 === \"function\" ? arg2 : isAccessor ? null : arg1,\n } as const;\n\n existing.push(metadata);\n Reflect.defineMetadata(VIRID_VUE_METADATA.PROJECT, existing, target);\n };\n}\n/**\n * Add responsiveness to data\n */\nexport function Responsive(shallow = false) {\n return (target: any, key: string) => {\n // 记录哪些属性需要变成响应式\n const props: ResponsiveMetadata =\n Reflect.getMetadata(VIRID_VUE_METADATA.RESPONSIVE, target) || [];\n props.push({ key, shallow });\n Reflect.defineMetadata(VIRID_VUE_METADATA.RESPONSIVE, props, target);\n };\n}\n\n/**\n * Declarative lifecycle hook @OnHook(\"onMounted\")\n */\nexport function OnHook(\n hookName:\n | \"onMounted\"\n | \"onUnmounted\"\n | \"onUpdated\"\n | \"onActivated\"\n | \"onDeactivated\"\n | \"onSetup\",\n) {\n return (target: any, methodName: string) => {\n const existing: OnHookMetadata =\n Reflect.getMetadata(VIRID_VUE_METADATA.LIFE_CIRCLE, target) || [];\n existing.push({ hookName, methodName });\n Reflect.defineMetadata(VIRID_VUE_METADATA.LIFE_CIRCLE, existing, target);\n };\n}\n/**\n * Universal Hook Injection Decorator\n * Usage: @ Use()=>useRoute() Public route! : RouteLocationNormalized\n */\nexport function Use(hookFactory: () => any) {\n return (target: any, key: string) => {\n const existing: UseMetadata =\n Reflect.getMetadata(VIRID_VUE_METADATA.HOOK, target) || [];\n existing.push({ key, hookFactory });\n Reflect.defineMetadata(VIRID_VUE_METADATA.HOOK, existing, target);\n };\n}\n/**\n * Inherit injection decorator\n * Usage: @Inherit(Controller, (instance)=>instance. xxxx) public data! : SomeType\n */\nexport function Inherit<T>(\n token: Newable<T>,\n id: string,\n selector: (instance: T) => any,\n) {\n return (target: any, key: string) => {\n const metadata: InheritMetadata =\n Reflect.getMetadata(VIRID_VUE_METADATA.INHERIT, target) || [];\n metadata.push({ key, token, id, selector });\n Reflect.defineMetadata(VIRID_VUE_METADATA.INHERIT, metadata, target);\n };\n}\n\n/**\n * Marking an attribute as injected from the external environment (context)\n */\nexport function Env() {\n return (target: any, key: string) => {\n const metadata: EnvMetadata =\n Reflect.getMetadata(VIRID_VUE_METADATA.ENV, target) || [];\n metadata.push({ key });\n Reflect.defineMetadata(VIRID_VUE_METADATA.ENV, metadata, target);\n };\n}\n\n/**\n * Listener Decorator - Tag Controller's member methods as message listeners\n */\nexport function Listener(\n config: ListenerConfig = {\n messageClass: null,\n priority: 0,\n batchMode: false,\n },\n) {\n return (target: any, key: string, descriptor?: PropertyDescriptor) => {\n if (typeof target === \"function\") {\n throw new Error(\n `[Virid Listener] Method Type Error: The Method \"${key}\" is a static method. @Listener can only be used on instance member methods.`,\n );\n }\n\n // Get parameter type metadata\n const types: Array<any> =\n Reflect.getMetadata(\"design:paramtypes\", target, key) || [];\n\n // Verify if there are undefined parameters (to prevent circular references or incomplete imports)\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 Listener] Parameter Metadata Loss in \"${key}\": One or more parameters have 'undefined' types. Check indices: [${undefinedIndices.join(\", \")}]`,\n );\n }\n\n // The parameter must have only one\n if (types.length > 1) {\n throw new Error(\n `[Virid Listener] Multiple Parameters Not Allowed: Listener method \"${key}\" can have at most ONE parameter (BaseMessage subclass or Array).`,\n );\n }\n\n // Prepare variables for final storage in metadata\n let finalMessageClass = config.messageClass;\n let finalBatchMode = config.batchMode ?? false;\n\n // Split processing: 0 parameters vs 1 parameter\n if (types.length === 0) {\n // No parameters are allowed, but it must be written in messageClass\n if (!config.messageClass) {\n throw new Error(\n `[Virid Listener] Rule Violation in \"${key}\": When the method has no parameters, you MUST specify \"messageClass\" in the decorator options.`,\n );\n }\n } else {\n // There is only one parameter available\n const paramType = types[0];\n\n if (paramType === Array) {\n // If it is a list (Array), messageClass must be written\n if (!config.messageClass) {\n throw new Error(\n `[Virid Listener] Rule Violation in \"${key}\": When using batch processing mode with Array, the \"messageClass\" parameter must be specified in decorator options.`,\n );\n }\n // Batch, verify if it inherits from SingleMessage\n if (!(config.messageClass.prototype instanceof SingleMessage)) {\n throw new Error(\n `[Virid Listener] Type Mismatch in \"${key}\": Batch processing mode (Array) is only supported for subclasses of SingleMessage.`,\n );\n }\n finalBatchMode = true;\n } else if (\n paramType === BaseMessage ||\n (paramType && paramType.prototype instanceof BaseMessage)\n ) {\n // If it is a single BaseMessage, messageClass cannot be written\n if (config.messageClass) {\n throw new Error(\n `[Virid Listener] Rule Violation in \"${key}\": Cannot specify \"messageClass\" in decorator options when it is already declared as a method parameter.`,\n );\n }\n finalMessageClass = paramType;\n // If batchMode is not explicitly specified, batch mode will not be enabled by default for single messages\n finalBatchMode = config.batchMode ?? false;\n } else {\n // I have written parameters, but they are neither BaseMessage nor Array\n throw new Error(\n `[Virid Listener] Invalid Parameter in \"${key}\": The single parameter must be either a subclass of BaseMessage or an Array.`,\n );\n }\n }\n\n const listeners: ListenerMetadata =\n Reflect.getMetadata(VIRID_VUE_METADATA.LISTENER, target) || [];\n\n listeners.push({\n key,\n messageClass: finalMessageClass as any,\n priority: config.priority || 0,\n batchMode: finalBatchMode,\n });\n\n Reflect.defineMetadata(VIRID_VUE_METADATA.LISTENER, listeners, target);\n };\n}\n"],"mappings":"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","names":["index_exports","__export","Env","Inherit","Listener","OnHook","Project","Responsive","Use","VuePlugin","Watch","useController","__toCommonJS","import_core","VIRID_VUE_METADATA","VIRID_METADATA","RESPONSIVE","LIFE_CIRCLE","HOOK","LISTENER","INHERIT","ATTR","PROJECT","WATCH","ENV","import_vue","import_core","activeApp","activateApp","app","bindResponsiveHook","__name","instance","bindResponsive","onActivate","viridApp","Proxy","get","_","prop","args","console","warn","String","targetMethod","Reflect","apply","import_core","isBorrowCheckerEnabled","disableBorrowChecker","borrowCache","WeakMap","createBorrowChecker","target","rootName","path","has","get","proxy","Proxy","obj","prop","receiver","value","Reflect","currentPath","String","args","isShieldException","errorMsg","join","MessageWriter","error","Error","result","apply","set","_obj","stack","deleteProperty","defineProperty","Set","Symbol","iterator","asyncIterator","toStringTag","constructorName","name","Map","Array","safeMethods","getMetadata","VIRID_VUE_METADATA","SAFE","GlobalRegistry","set","id","instance","globalRegistry","has","MessageWriter","error","Error","delete","get","__publicField","shallowReactive","Map","_GlobalRegistry","bindProject","proto","Reflect","getMetadata","VIRID_VUE_METADATA","PROJECT","forEach","config","key","isAccessor","type","componentClass","source","project","readOnlySetter","__name","_val","name","rawDescriptor","Object","getOwnPropertyDescriptor","computed","call","val","isFromComponent","target","viridApp","createBorrowChecker","currentDescriptor","configurable","defineProperty","value","enumerable","bindWatch","watches","WATCH","stops","methodName","options","__ccs_processed__","bindResponsive","getter","e","callback","bind","stop","watch","newVal","oldVal","push","__virid_responsive_processed__","RESPONSIVE","descriptor","existingBox","__virid_box__","rawValue","vRef","shallow","shallowRef","ref","internalState","ownKeys","bindHooks","LIFE_CIRCLE","hookName","fn","onMounted","onUnmounted","onUpdated","onActivated","onDeactivated","bindUseHooks","HOOK","hookResult","hookFactory","bindListener","listenerConfigs","LISTENER","unbindFunctions","messageClass","priority","batchMode","originalMethod","listenerContext","params","targetClass","listenerConfig","messageIdx","systemContext","systemConfig","unregister","register","bindInherit","inherits","INHERIT","selector","tunnel","warn","bindEnv","context","envs","ENV","import_vue","import_core","useController","token","options","instance","viridApp","get","Reflect","hasMetadata","VIRID_VUE_METADATA","CONTROLLER","MessageWriter","error","Error","name","proto","Object","getPrototypeOf","reactiveContext","context","useAttrs","bindEnv","bindUseHooks","bindInherit","bindProject","unbindList","bindListener","bindHooks","stops","bindWatch","unbindRegister","__name","id","GlobalRegistry","set","onUnmounted","forEach","stop","import_core","Watch","arg1","arg2","arg3","target","methodName","existing","Reflect","getMetadata","VIRID_VUE_METADATA","WATCH","push","type","componentClass","source","options","defineMetadata","Project","key","descriptor","PROJECT","isAccessor","get","set","MessageWriter","error","Error","metadata","Responsive","shallow","props","RESPONSIVE","OnHook","hookName","LIFE_CIRCLE","Use","hookFactory","HOOK","Inherit","token","id","selector","INHERIT","Env","ENV","Listener","config","messageClass","priority","batchMode","types","undefinedIndices","map","t","i","undefined","filter","length","join","finalMessageClass","finalBatchMode","paramType","Array","prototype","SingleMessage","BaseMessage","listeners","LISTENER","VuePlugin","name","install","app","options","disableBorrowChecker","activateApp","_VuePlugin"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/decorators/constant.ts","../src/adapters/bind.ts","../src/app.ts","../src/adapters/borrow_checker.ts","../src/adapters/hook.ts","../src/decorators/vue.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: Vue adapter for virid, projecting logic sovereignty to reactive UI.\n */\nimport { ViridPlugin, type ViridApp } from \"@virid/core\";\nimport { type PluginOption } from \"./interfaces\";\nexport * from \"./adapters\";\nexport * from \"./decorators\";\nexport * from \"./interfaces\";\nimport { activateApp } from \"./app\";\nimport { disableBorrowChecker } from \"./adapters/borrow_checker\";\n\nexport class VuePlugin implements ViridPlugin<PluginOption> {\n name = \"@virid/vue\";\n install(app: ViridApp, options: PluginOption) {\n if (options.disableBorrowChecker) disableBorrowChecker();\n activateApp(app);\n }\n}\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Vue\n */\nimport { VIRID_METADATA } from \"@virid/core\";\nexport const VIRID_VUE_METADATA = {\n ...VIRID_METADATA,\n RESPONSIVE: \"virid:vue:responsive\",\n LIFE_CIRCLE: \"virid:vue:life-circle\",\n HOOK: \"virid:vue:hook\",\n LISTENER: \"virid:vue:listener\",\n INHERIT: \"virid:vue:inherit\",\n ATTR: \"virid:vue:attr\",\n PROJECT: \"virid:vue:project\",\n WATCH: \"virid:vue:watch\",\n ENV: \"virid:vue:env\",\n} as const;\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Vue\n */\nimport { VIRID_VUE_METADATA } from \"../decorators/constant\";\nimport {\n watch,\n computed,\n type WatchStopHandle,\n ref,\n shallowReactive,\n onMounted,\n onUnmounted,\n onUpdated,\n onActivated,\n onDeactivated,\n shallowRef,\n type WritableComputedRef,\n} from \"vue\";\nimport { MessageWriter, type SystemContext, SystemConfig } from \"@virid/core\";\nimport { viridApp } from \"../app\";\nimport { createBorrowChecker } from \"./borrow_checker\";\nimport {\n type WatchMetadata,\n type ProjectMetadata,\n type InheritMetadata,\n type UseMetadata,\n type ResponsiveMetadata,\n type OnHookMetadata,\n type ListenerMetadata,\n EnvMetadata,\n} from \"../interfaces\";\n\n// controller注册表\n\nexport class GlobalRegistry {\n private static globalRegistry = shallowReactive(new Map<string, any>());\n static set(id: string, instance: any): () => boolean {\n if (!this.globalRegistry.has(id)) {\n this.globalRegistry.set(id, instance);\n //返回卸载函数\n return () => {\n this.globalRegistry.delete(id);\n return true;\n };\n } else {\n MessageWriter.error(\n new Error(\n `[Virid UseController] Duplicate ID: Controller ${id} already exists`,\n ),\n );\n return () => false;\n }\n }\n static get(id: string): any {\n //如果找不见,直接报错\n if (!this.globalRegistry.has(id)) {\n MessageWriter.error(\n new Error(\n `[Virid UseController] ID Not Found: No Controller found with ID: ${id}`,\n ),\n );\n return null;\n }\n return this.globalRegistry.get(id);\n }\n}\n/**\n * @Project 连接component,只读一个component的值\n */\nexport function bindProject(proto: any, instance: any) {\n const projects: ProjectMetadata = Reflect.getMetadata(\n VIRID_VUE_METADATA.PROJECT,\n proto,\n );\n\n projects?.forEach((config) => {\n const { key, isAccessor, type, componentClass, source } = config;\n let project: WritableComputedRef<any, any>;\n\n // 统一报错 Setter\n const readOnlySetter = (_val: any) => {\n MessageWriter.error(\n new Error(\n `[Virid Project] Read-only: Property \"${key}\" in \"${instance.constructor.name}\" is a protected projection.\\n`,\n ),\n );\n };\n\n // 手写 Accessor\n if (isAccessor) {\n if (type === \"component\") {\n MessageWriter.error(\n new Error(\n `[Virid Project] Architecture Violation: Manual get/set is forbidden on ${componentClass} projection \"${key}\". Please use functional source.`,\n ),\n );\n return;\n }\n\n // 只有非 component 类型才走到这里,支持读写\n const rawDescriptor = Object.getOwnPropertyDescriptor(proto, key);\n project = computed({\n get: () => rawDescriptor?.get?.call(instance),\n set: (val) => {\n if (rawDescriptor?.set) {\n rawDescriptor.set.call(instance, val);\n } else {\n readOnlySetter(val);\n }\n },\n });\n }\n //函数式投影\n else {\n project = computed({\n get: () => {\n const isFromComponent = type === \"component\";\n const target = isFromComponent\n ? viridApp.get(componentClass)\n : instance;\n const val = source(target);\n\n // 来自 component 的数据套盾\n if (isFromComponent) {\n return createBorrowChecker(val, componentClass!.name, key);\n }\n\n // 来自自己的投影,直接返回\n return val;\n },\n set: readOnlySetter,\n });\n }\n\n const currentDescriptor = Object.getOwnPropertyDescriptor(instance, key);\n if (currentDescriptor && currentDescriptor.configurable === false) return;\n\n Object.defineProperty(instance, key, {\n get: () => project.value,\n set: (val) => (project.value = val),\n enumerable: true,\n configurable: true,\n });\n });\n}\n/**\n * @Watch 自动把函数变成watch\n */\n\nexport function bindWatch(proto: any, instance: any) {\n const watches: WatchMetadata =\n Reflect.getMetadata(VIRID_VUE_METADATA.WATCH, proto) || [];\n const stops: WatchStopHandle[] = [];\n\n watches.forEach((config) => {\n const { type, source, methodName, options, componentClass } = config;\n\n // 获取目标实例\n const target =\n type === \"component\" ? viridApp.get(componentClass) : instance;\n // 确保目标实例已经过响应式处理\n if (target && !target.__ccs_processed__) {\n bindResponsive(target);\n }\n // 封装 getter\n const getter = () => {\n try {\n return source(target);\n } catch (e) {\n MessageWriter.error(\n e as Error,\n `[Virid Watch] Getter error in ${methodName}`,\n );\n return undefined;\n }\n };\n // 使用 bind 确保回调函数内部的 this 指向当前的 Controller/Instance\n const callback = (instance[methodName] as any).bind(instance);\n // 执行监听\n const stop = watch(\n getter,\n (newVal, oldVal) => {\n callback(newVal, oldVal);\n },\n {\n ...options,\n },\n );\n stops.push(stop);\n });\n\n return stops;\n}\n\n/**\n * @Responsive 递归处理,支持在 Observer 基础上套娃\n */\nexport function bindResponsive(instance: any) {\n if (!instance || typeof instance !== \"object\") return instance;\n if (instance.__virid_responsive_processed__) return instance;\n\n Object.defineProperty(instance, \"__virid_responsive_processed__\", {\n value: true,\n enumerable: false,\n });\n\n const props: ResponsiveMetadata =\n Reflect.getMetadata(VIRID_VUE_METADATA.RESPONSIVE, instance) || [];\n\n props.forEach((config) => {\n const key = config.key;\n const descriptor = Object.getOwnPropertyDescriptor(instance, key);\n\n // 【关键逻辑】检查是否已经被 bindObservers 劫持过\n const existingBox = (descriptor?.get as any)?.__virid_box__;\n\n // 在 bindResponsive 内部\n if (existingBox) {\n const rawValue = existingBox.value;\n const vRef = config.shallow ? shallowRef(rawValue) : ref(rawValue);\n\n Object.defineProperty(existingBox, \"value\", {\n get: () => vRef.value,\n set: (val) => {\n vRef.value = val;\n },\n enumerable: true,\n configurable: true,\n });\n } else {\n // 普通属性,按照原逻辑处理\n if (descriptor && descriptor.get) return;\n\n const rawValue = instance[key];\n const internalState = config.shallow\n ? shallowRef(rawValue)\n : ref(rawValue);\n\n Object.defineProperty(instance, key, {\n get: () => internalState.value,\n set: (val) => {\n internalState.value = val;\n },\n enumerable: true,\n configurable: true,\n });\n }\n });\n\n // 递归处理子对象\n Reflect.ownKeys(instance).forEach((key) => {\n if (key === \"__virid_responsive_processed__\") return;\n const val = instance[key];\n if (val && typeof val === \"object\") {\n bindResponsive(val);\n }\n });\n return instance;\n}\n\n/**\n * 解析 @OnHook 并将其绑定到 Vue 生命周期\n */\nexport function bindHooks(proto: any, instance: any) {\n const hooks: OnHookMetadata = Reflect.getMetadata(\n VIRID_VUE_METADATA.LIFE_CIRCLE,\n proto,\n );\n\n hooks?.forEach((config) => {\n const { hookName, methodName } = config;\n const fn = instance[methodName].bind(instance);\n\n switch (hookName) {\n case \"onMounted\":\n onMounted(fn);\n break;\n case \"onUnmounted\":\n onUnmounted(fn);\n break;\n case \"onUpdated\":\n onUpdated(fn);\n break;\n case \"onActivated\":\n onActivated(fn);\n break;\n case \"onDeactivated\":\n onDeactivated(fn);\n break;\n case \"onSetup\":\n fn();\n break;\n // 可以根据需要扩展更多的钩子\n }\n });\n}\n\n/**\n * 执行并绑定万能 Hooks\n */\nexport function bindUseHooks(proto: any, instance: any) {\n const hooks: UseMetadata = Reflect.getMetadata(\n VIRID_VUE_METADATA.HOOK,\n proto,\n );\n\n hooks?.forEach((config) => {\n // 在 useController 运行期间执行 hookFactory()\n const hookResult = config.hookFactory();\n // 直接赋值给实例\n instance[config.key] = hookResult;\n });\n}\n\n/**\n * @description: 启动@Listener 为 Controller 实例绑定监听器并返回销毁函数列表\n **/\nexport function bindListener(proto: any, instance: any): (() => void)[] {\n const listenerConfigs: ListenerMetadata =\n Reflect.getMetadata(VIRID_VUE_METADATA.LISTENER, proto) || [];\n const unbindFunctions: (() => void)[] = [];\n\n listenerConfigs.forEach(({ key, messageClass, priority, batchMode }) => {\n const originalMethod = instance[key];\n\n // 给包装后的函数挂载上下文信息\n const listenerContext: SystemContext = {\n params: [messageClass],\n targetClass: instance.constructor,\n methodName: key,\n originalMethod: originalMethod,\n };\n\n const listenerConfig: SystemConfig = {\n messageClass: messageClass,\n messageIdx: 0,\n batchMode: batchMode,\n priority: priority,\n };\n (instance[key] as any).systemContext = listenerContext;\n (instance[key] as any).systemConfig = listenerConfig;\n\n const unregister = viridApp.register(instance[key]);\n unbindFunctions.push(unregister);\n });\n\n return unbindFunctions;\n}\n\n/**\n * @description: 启动@Inherit 使能够只读其他的controller\n **/\nexport function bindInherit(proto: any, instance: any) {\n const inherits: InheritMetadata = Reflect.getMetadata(\n VIRID_VUE_METADATA.INHERIT,\n proto,\n );\n if (!inherits) return;\n\n inherits.forEach(({ key, id, selector }) => {\n // 为每个继承属性创建一个私有的 computed 引用\n // 这个 computed 就像一个隧道,一头连着 Registry,一头连着子组件\n const tunnel = computed(() => {\n const target = GlobalRegistry.get(id); // 自动依赖 Registry 的增删\n if (!target) {\n MessageWriter.warn(\n `[Virid Inherit] Warning: Inherit target not found: ${id}`,\n );\n return null;\n }\n // 这里的 selector(target) 也会触发依赖收集\n // 如果 target.state.count 变了,这个 computed 也会感知到\n return selector ? selector(target) : target;\n });\n\n Object.defineProperty(instance, key, {\n get: () => {\n const val = tunnel.value; // 访问 computed.value\n // 返回时依然套上护盾,确保“弱引用”也是“只读引用”\n return val ? createBorrowChecker(val, key, \"\") : null;\n },\n set: () => {\n MessageWriter.error(\n new Error(\n `[Virid Inherit] No Modification: Attempted to set read-only Inherit property: ${key}`,\n ),\n );\n },\n enumerable: true,\n configurable: true,\n });\n });\n}\n\n/**\nu* @description: 把槽或者其他乱七八糟的东西传递过来的上下文注入到controller里\n * @param {*} context 上下文对象\n * @param {*} instance controller实例\n */\nexport function bindEnv(proto: any, instance: any, context: any) {\n const envs: EnvMetadata = Reflect.getMetadata(VIRID_VUE_METADATA.ENV, proto);\n if (!envs) return;\n console.log(\"envs:\", envs);\n console.log(\"context:\", context);\n \n envs.forEach(({ key }) => {\n if (key in context === false) {\n MessageWriter.warn(\n `[Virid Context] Env Not Found: The \"${key}\" is not defined in the context.`,\n );\n return;\n }\n Object.defineProperty(instance, key, {\n get: () => context[key],\n set: (val) => {\n if (context[key] === val) return;\n try {\n context[key] = val;\n } catch (e) {\n MessageWriter.error(\n e as Error,\n `[Virid Context] Set Failed:\\n \"${key}\" is only readable.`,\n );\n }\n },\n enumerable: true,\n configurable: true,\n });\n });\n}\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Vue\n */\nimport { type ViridApp, Newable } from \"@virid/core\";\nimport { bindResponsive } from \"./adapters/bind\";\nexport interface IViridApp {\n register(systemFn: (...args: any[]) => any): () => void;\n get(identifier: any): any;\n bind<T>(identifier: Newable<T>): void;\n}\n\nlet activeApp: IViridApp | null = null;\n\nexport function activateApp(app: ViridApp) {\n const bindResponsiveHook = (instance: any) => {\n if (instance) {\n bindResponsive(instance);\n }\n return instance;\n };\n app.onActivate(bindResponsiveHook);\n activeApp = app;\n}\n\nexport const viridApp: IViridApp = new Proxy({} as IViridApp, {\n get(_, prop: keyof IViridApp) {\n return (...args: any[]) => {\n if (!activeApp) {\n console.warn(\n `[Virid Vue] App method \"${String(prop)}\" called before initialization.`,\n );\n\n if (prop === \"register\") {\n return () => {\n console.warn(\n \"[Virid Vue] Cleanup ignored: source listener was never registered.\",\n );\n };\n }\n return undefined;\n }\n const targetMethod = activeApp[prop];\n if (typeof targetMethod === \"function\") {\n return Reflect.apply(targetMethod, activeApp, args);\n }\n };\n },\n});\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Vue\n */\nimport { MessageWriter } from \"@virid/core\";\nimport { VIRID_VUE_METADATA } from \"../decorators/constant\";\n\nlet isBorrowCheckerEnabled = true;\nexport function disableBorrowChecker() {\n isBorrowCheckerEnabled = false;\n}\n\nconst borrowCache = new WeakMap<any, any>();\n\n/**\n * Recursive borrowing check proxy: Make the object and all its descendants hard read-only\n */\nexport function createBorrowChecker(\n target: any,\n rootName: string,\n path: string = \"\",\n): any {\n if (\n !isBorrowCheckerEnabled ||\n target === null ||\n (typeof target !== \"object\" && typeof target !== \"function\")\n ) {\n return target;\n }\n if (borrowCache.has(target)) {\n return borrowCache.get(target);\n }\n\n const proxy = new Proxy(target, {\n get(obj, prop, receiver) {\n const value = Reflect.get(obj, prop, receiver);\n const currentPath = path ? `${path}.${String(prop)}` : String(prop);\n if (typeof value === \"function\") {\n return (...args: any[]) => {\n if (!isShieldException(obj, prop)) {\n const errorMsg = [\n `[Virid Shield] Rejected`,\n `Method: ${rootName}....${currentPath}()`,\n `Reason: Unauthorized access to unsafe method.`,\n ].join(\"\\n\");\n MessageWriter.error(new Error(errorMsg));\n return null;\n }\n\n const result = value.apply(obj, args);\n return createBorrowChecker(result, rootName, `${currentPath}()`);\n };\n }\n return createBorrowChecker(value, rootName, currentPath);\n },\n\n set(_obj, prop) {\n const currentPath = path ? `${path}.${String(prop)}` : String(prop);\n\n // Elegantly fail and provide repair suggestions\n const errorMsg = [\n `[Virid Borrow Checker]`,\n `------------------------------------------------`,\n `Component: ${rootName}`,\n `Code: ${rootName}....${currentPath}`,\n `Result: Rejected`,\n `Reason: This object is write protected and cannot be modified.`,\n `Stack: ${new Error().stack}`,\n `------------------------------------------------`,\n ].join(\"\\n\");\n MessageWriter.error(new Error(errorMsg));\n return false;\n },\n deleteProperty(_obj, prop) {\n MessageWriter.error(\n new Error(\n `[Virid Shield] Physical Protection:\\nProhibit Deletion of Component Attributes ${String(prop)}`,\n ),\n );\n return false;\n },\n defineProperty() {\n MessageWriter.error(\n new Error(\n `[Virid Shield] Physical Protection:\\nProhibit redefining component attribute structure`,\n ),\n );\n return false;\n },\n });\n borrowCache.set(target, proxy);\n return proxy;\n}\n/**\n * Determine whether a method should skip shield interception\n */\nfunction isShieldException(obj: any, prop: string | symbol): boolean {\n const PROTOCOL_WHITELIST = new Set<string | symbol>([\n Symbol.iterator,\n Symbol.asyncIterator,\n Symbol.toStringTag,\n \"toString\",\n \"valueOf\",\n \"toJSON\",\n \"constructor\",\n ]);\n if (PROTOCOL_WHITELIST.has(prop)) return true;\n\n const constructorName = obj.constructor?.name;\n\n const READONLY_COLLECTIONS: Record<string, Set<string | symbol>> = {\n Map: new Set([\n \"get\",\n \"has\",\n \"keys\",\n \"values\",\n \"entries\",\n \"forEach\",\n \"size\",\n ]),\n Set: new Set([\"has\", \"keys\", \"values\", \"entries\", \"forEach\", \"size\"]),\n Array: new Set([\n \"length\",\n \"map\",\n \"filter\",\n \"reduce\",\n \"slice\",\n \"find\",\n \"includes\",\n \"findIndex\",\n \"every\",\n \"some\",\n \"at\",\n \"join\",\n \"concat\",\n \"flat\",\n \"flatMap\",\n \"indexOf\",\n \"lastIndexOf\",\n ]),\n String: new Set([\n \"length\",\n \"slice\",\n \"substring\",\n \"substr\",\n \"split\",\n \"includes\",\n \"startsWith\",\n \"endsWith\",\n \"indexOf\",\n \"replace\",\n \"replaceAll\",\n \"trim\",\n \"toLowerCase\",\n \"toUpperCase\",\n ]),\n };\n\n if (READONLY_COLLECTIONS[constructorName]?.has(prop)) return true;\n\n const safeMethods = Reflect.getMetadata(VIRID_VUE_METADATA.SAFE, obj);\n if (safeMethods instanceof Set && safeMethods.has(prop)) return true;\n\n return false;\n}\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Vue\n */\nimport {\n bindProject,\n bindWatch,\n bindHooks,\n bindUseHooks,\n bindListener,\n GlobalRegistry,\n bindInherit,\n bindEnv,\n} from \"./bind\";\nimport { onUnmounted, useAttrs } from \"vue\";\nimport { VIRID_VUE_METADATA } from \"../decorators/constant\";\nimport { MessageWriter, Newable } from \"@virid/core\";\nimport { viridApp } from \"../app\";\n/**\n * @description: vue的hooks适配器,注入IOC容器中的Controller实例,并挂在vue的各种方法\n * @param token\n */\nexport function useController<T>(\n token: Newable<T>,\n options?: { id?: string; context?: object },\n): T {\n const instance = viridApp.get(token) as any;\n\n // 检查身份 Controller\n const isController = Reflect.hasMetadata(\n VIRID_VUE_METADATA.CONTROLLER,\n token,\n );\n if (!isController) {\n // 确保非 Controller 的实例不能被其他 Controller 访问\n MessageWriter.error(\n new Error(\n `[Virid Controller] ${token.name} is not a Controller.Use @Controller to inject it.`,\n ),\n );\n return null as T;\n }\n\n //绑定各种魔法装饰器\n const proto = Object.getPrototypeOf(instance);\n //注入vue的乱七八糟的context\n const reactiveContext = options?.context || useAttrs();\n if (reactiveContext) {\n bindEnv(proto, instance, reactiveContext);\n }\n // @Use装饰器\n bindUseHooks(proto, instance);\n // @Inherit装饰器\n bindInherit(proto, instance);\n // @Project装饰器\n bindProject(proto, instance);\n // @Listener装饰器\n // 运行时动态挂载监听器\n const unbindList = bindListener(proto, instance);\n // 生命周期钩子\n bindHooks(proto, instance);\n //绑定全局注册表\n // @Watch装饰器\n const stops = bindWatch(proto, instance);\n //如果有id,就去注册\n let unbindRegister = () => true;\n if (options?.id) {\n unbindRegister = GlobalRegistry.set(options.id, instance);\n }\n onUnmounted(() => {\n stops.forEach((stop) => stop());\n unbindList.forEach((stop) => stop());\n unbindRegister();\n // 自动卸载信号处理器,防止 Controller 销毁后残留\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 Vue\n */\nimport { VIRID_VUE_METADATA } from \"./constant\";\nimport type { WatchOptions } from \"vue\";\nimport {\n MessageWriter,\n type Newable,\n BaseMessage,\n SingleMessage,\n} from \"@virid/core\";\nimport {\n type WatchMetadata,\n type ProjectMetadata,\n type InheritMetadata,\n type UseMetadata,\n type ResponsiveMetadata,\n type OnHookMetadata,\n type ListenerMetadata,\n type ListenerConfig,\n EnvMetadata,\n} from \"../interfaces\";\n\n/**\n * Overload 1: Monitor Controller's own variables\n * @param source Watching closure functions\n * @param options Watch options\n */\nexport function Watch<T>(\n source: (instance: T) => any | Promise<any>,\n options?: WatchOptions,\n): any;\n\n/**\n * Overload 2: Monitor Component's variables\n * @param componentClass Component class\n * @param source Watching closure functions\n * @param options Watch options\n */\n\nexport function Watch<C>(\n component: Newable<C>,\n source: (comp: C) => any | Promise<any>,\n options?: WatchOptions,\n): any;\n\nexport function Watch(arg1: any, arg2?: any, arg3?: any) {\n return (target: any, methodName: string) => {\n const existing: WatchMetadata =\n Reflect.getMetadata(VIRID_VUE_METADATA.WATCH, target) || [];\n\n if (typeof arg2 === \"function\") {\n // Watch(Component, (c) => c.prop, options)\n existing.push({\n type: \"component\",\n componentClass: arg1,\n source: arg2,\n options: arg3,\n methodName,\n });\n } else {\n // Watch((i) => i.prop, options)\n existing.push({\n type: \"local\",\n componentClass: null,\n source: arg1,\n options: arg2,\n methodName,\n });\n }\n\n Reflect.defineMetadata(VIRID_VUE_METADATA.WATCH, existing, target);\n };\n}\n\n/**\n * Overload 1: Internal Projection\n * @param source Projection closure functions\n */\n\nexport function Project<T>(source: (instance: T) => any): any;\n\n/**\n * Overload 1: Component Projection\n * @param source Projection closure functions\n */\nexport function Project<C>(\n component: new (...args: any[]) => C,\n source: (comp: C) => any,\n): any;\n// Overload 3: Internal get set projection @Project() Public get name() {}\nexport function Project<T>(): any;\n\nexport function Project(arg1?: any, arg2?: any) {\n return (target: any, key: string, descriptor?: PropertyDescriptor) => {\n const existing: ProjectMetadata =\n Reflect.getMetadata(VIRID_VUE_METADATA.PROJECT, target) || [];\n const isAccessor = !!(descriptor?.get || descriptor?.set);\n if (!arg1 && !arg2 && !isAccessor) {\n MessageWriter.error(\n new Error(\n `[Virid Project] Invalid Usage: @Project() can only be used on getter or setter.`,\n ),\n );\n return;\n }\n const metadata = {\n key,\n isAccessor: isAccessor,\n // 这里的逻辑和 Watch 保持高度一致\n type: typeof arg2 === \"function\" ? \"component\" : \"local\",\n componentClass: typeof arg2 === \"function\" ? arg1 : null,\n source: typeof arg2 === \"function\" ? arg2 : isAccessor ? null : arg1,\n } as const;\n\n existing.push(metadata);\n Reflect.defineMetadata(VIRID_VUE_METADATA.PROJECT, existing, target);\n };\n}\n/**\n * Add responsiveness to data\n */\nexport function Responsive(shallow = false) {\n return (target: any, key: string) => {\n // 记录哪些属性需要变成响应式\n const props: ResponsiveMetadata =\n Reflect.getMetadata(VIRID_VUE_METADATA.RESPONSIVE, target) || [];\n props.push({ key, shallow });\n Reflect.defineMetadata(VIRID_VUE_METADATA.RESPONSIVE, props, target);\n };\n}\n\n/**\n * Declarative lifecycle hook @OnHook(\"onMounted\")\n */\nexport function OnHook(\n hookName:\n | \"onMounted\"\n | \"onUnmounted\"\n | \"onUpdated\"\n | \"onActivated\"\n | \"onDeactivated\"\n | \"onSetup\",\n) {\n return (target: any, methodName: string) => {\n const existing: OnHookMetadata =\n Reflect.getMetadata(VIRID_VUE_METADATA.LIFE_CIRCLE, target) || [];\n existing.push({ hookName, methodName });\n Reflect.defineMetadata(VIRID_VUE_METADATA.LIFE_CIRCLE, existing, target);\n };\n}\n/**\n * Universal Hook Injection Decorator\n * Usage: @ Use()=>useRoute() Public route! : RouteLocationNormalized\n */\nexport function Use(hookFactory: () => any) {\n return (target: any, key: string) => {\n const existing: UseMetadata =\n Reflect.getMetadata(VIRID_VUE_METADATA.HOOK, target) || [];\n existing.push({ key, hookFactory });\n Reflect.defineMetadata(VIRID_VUE_METADATA.HOOK, existing, target);\n };\n}\n/**\n * Inherit injection decorator\n * Usage: @Inherit(Controller, (instance)=>instance. xxxx) public data! : SomeType\n */\nexport function Inherit<T>(\n token: Newable<T>,\n id: string,\n selector: (instance: T) => any,\n) {\n return (target: any, key: string) => {\n const metadata: InheritMetadata =\n Reflect.getMetadata(VIRID_VUE_METADATA.INHERIT, target) || [];\n metadata.push({ key, token, id, selector });\n Reflect.defineMetadata(VIRID_VUE_METADATA.INHERIT, metadata, target);\n };\n}\n\n/**\n * Marking an attribute as injected from the external environment (context)\n */\nexport function Env() {\n return (target: any, key: string) => {\n const metadata: EnvMetadata =\n Reflect.getMetadata(VIRID_VUE_METADATA.ENV, target) || [];\n metadata.push({ key });\n Reflect.defineMetadata(VIRID_VUE_METADATA.ENV, metadata, target);\n };\n}\n\n/**\n * Listener Decorator - Tag Controller's member methods as message listeners\n */\nexport function Listener(\n config: ListenerConfig = {\n messageClass: null,\n priority: 0,\n batchMode: false,\n },\n) {\n return (target: any, key: string, descriptor?: PropertyDescriptor) => {\n if (typeof target === \"function\") {\n throw new Error(\n `[Virid Listener] Method Type Error: The Method \"${key}\" is a static method. @Listener can only be used on instance member methods.`,\n );\n }\n\n // Get parameter type metadata\n const types: Array<any> =\n Reflect.getMetadata(\"design:paramtypes\", target, key) || [];\n\n // Verify if there are undefined parameters (to prevent circular references or incomplete imports)\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 Listener] Parameter Metadata Loss in \"${key}\": One or more parameters have 'undefined' types. Check indices: [${undefinedIndices.join(\", \")}]`,\n );\n }\n\n // The parameter must have only one\n if (types.length > 1) {\n throw new Error(\n `[Virid Listener] Multiple Parameters Not Allowed: Listener method \"${key}\" can have at most ONE parameter (BaseMessage subclass or Array).`,\n );\n }\n\n // Prepare variables for final storage in metadata\n let finalMessageClass = config.messageClass;\n let finalBatchMode = config.batchMode ?? false;\n\n // Split processing: 0 parameters vs 1 parameter\n if (types.length === 0) {\n // No parameters are allowed, but it must be written in messageClass\n if (!config.messageClass) {\n throw new Error(\n `[Virid Listener] Rule Violation in \"${key}\": When the method has no parameters, you MUST specify \"messageClass\" in the decorator options.`,\n );\n }\n } else {\n // There is only one parameter available\n const paramType = types[0];\n\n if (paramType === Array) {\n // If it is a list (Array), messageClass must be written\n if (!config.messageClass) {\n throw new Error(\n `[Virid Listener] Rule Violation in \"${key}\": When using batch processing mode with Array, the \"messageClass\" parameter must be specified in decorator options.`,\n );\n }\n // Batch, verify if it inherits from SingleMessage\n if (!(config.messageClass.prototype instanceof SingleMessage)) {\n throw new Error(\n `[Virid Listener] Type Mismatch in \"${key}\": Batch processing mode (Array) is only supported for subclasses of SingleMessage.`,\n );\n }\n finalBatchMode = true;\n } else if (\n paramType === BaseMessage ||\n (paramType && paramType.prototype instanceof BaseMessage)\n ) {\n // If it is a single BaseMessage, messageClass cannot be written\n if (config.messageClass) {\n throw new Error(\n `[Virid Listener] Rule Violation in \"${key}\": Cannot specify \"messageClass\" in decorator options when it is already declared as a method parameter.`,\n );\n }\n finalMessageClass = paramType;\n // If batchMode is not explicitly specified, batch mode will not be enabled by default for single messages\n finalBatchMode = config.batchMode ?? false;\n } else {\n // I have written parameters, but they are neither BaseMessage nor Array\n throw new Error(\n `[Virid Listener] Invalid Parameter in \"${key}\": The single parameter must be either a subclass of BaseMessage or an Array.`,\n );\n }\n }\n\n const listeners: ListenerMetadata =\n Reflect.getMetadata(VIRID_VUE_METADATA.LISTENER, target) || [];\n\n listeners.push({\n key,\n messageClass: finalMessageClass as any,\n priority: config.priority || 0,\n batchMode: finalBatchMode,\n });\n\n Reflect.defineMetadata(VIRID_VUE_METADATA.LISTENER, listeners, target);\n };\n}\n"],"mappings":"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","names":["index_exports","__export","Env","Inherit","Listener","OnHook","Project","Responsive","Use","VuePlugin","Watch","useController","__toCommonJS","import_core","VIRID_VUE_METADATA","VIRID_METADATA","RESPONSIVE","LIFE_CIRCLE","HOOK","LISTENER","INHERIT","ATTR","PROJECT","WATCH","ENV","import_vue","import_core","activeApp","activateApp","app","bindResponsiveHook","__name","instance","bindResponsive","onActivate","viridApp","Proxy","get","_","prop","args","console","warn","String","targetMethod","Reflect","apply","import_core","isBorrowCheckerEnabled","disableBorrowChecker","borrowCache","WeakMap","createBorrowChecker","target","rootName","path","has","get","proxy","Proxy","obj","prop","receiver","value","Reflect","currentPath","String","args","isShieldException","errorMsg","join","MessageWriter","error","Error","result","apply","set","_obj","stack","deleteProperty","defineProperty","Set","Symbol","iterator","asyncIterator","toStringTag","constructorName","name","Map","Array","safeMethods","getMetadata","VIRID_VUE_METADATA","SAFE","GlobalRegistry","set","id","instance","globalRegistry","has","MessageWriter","error","Error","delete","get","__publicField","shallowReactive","Map","_GlobalRegistry","bindProject","proto","Reflect","getMetadata","VIRID_VUE_METADATA","PROJECT","forEach","config","key","isAccessor","type","componentClass","source","project","readOnlySetter","__name","_val","name","rawDescriptor","Object","getOwnPropertyDescriptor","computed","call","val","isFromComponent","target","viridApp","createBorrowChecker","currentDescriptor","configurable","defineProperty","value","enumerable","bindWatch","watches","WATCH","stops","methodName","options","__ccs_processed__","bindResponsive","getter","e","callback","bind","stop","watch","newVal","oldVal","push","__virid_responsive_processed__","RESPONSIVE","descriptor","existingBox","__virid_box__","rawValue","vRef","shallow","shallowRef","ref","internalState","ownKeys","bindHooks","LIFE_CIRCLE","hookName","fn","onMounted","onUnmounted","onUpdated","onActivated","onDeactivated","bindUseHooks","HOOK","hookResult","hookFactory","bindListener","listenerConfigs","LISTENER","unbindFunctions","messageClass","priority","batchMode","originalMethod","listenerContext","params","targetClass","listenerConfig","messageIdx","systemContext","systemConfig","unregister","register","bindInherit","inherits","INHERIT","selector","tunnel","warn","bindEnv","context","envs","ENV","console","log","import_vue","import_core","useController","token","options","instance","viridApp","get","Reflect","hasMetadata","VIRID_VUE_METADATA","CONTROLLER","MessageWriter","error","Error","name","proto","Object","getPrototypeOf","reactiveContext","context","useAttrs","bindEnv","bindUseHooks","bindInherit","bindProject","unbindList","bindListener","bindHooks","stops","bindWatch","unbindRegister","__name","id","GlobalRegistry","set","onUnmounted","forEach","stop","import_core","Watch","arg1","arg2","arg3","target","methodName","existing","Reflect","getMetadata","VIRID_VUE_METADATA","WATCH","push","type","componentClass","source","options","defineMetadata","Project","key","descriptor","PROJECT","isAccessor","get","set","MessageWriter","error","Error","metadata","Responsive","shallow","props","RESPONSIVE","OnHook","hookName","LIFE_CIRCLE","Use","hookFactory","HOOK","Inherit","token","id","selector","INHERIT","Env","ENV","Listener","config","messageClass","priority","batchMode","types","undefinedIndices","map","t","i","undefined","filter","length","join","finalMessageClass","finalBatchMode","paramType","Array","prototype","SingleMessage","BaseMessage","listeners","LISTENER","VuePlugin","name","install","app","options","disableBorrowChecker","activateApp","_VuePlugin"]}
|
package/dist/index.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @virid/vue v0.3.
|
|
2
|
+
* @virid/vue v0.3.11
|
|
3
3
|
* Vue adapter for virid, projecting logic sovereignty to reactive UI
|
|
4
4
|
*/
|
|
5
|
-
var
|
|
6
|
-
`);return y.error(new Error(
|
|
5
|
+
var V=Object.defineProperty;var J=(t,e,r)=>e in t?V(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var i=(t,e)=>V(t,"name",{value:e,configurable:!0});var v=(t,e,r)=>J(t,typeof e!="symbol"?e+"":e,r);import{VIRID_METADATA as K}from"@virid/core";var l={...K,RESPONSIVE:"virid:vue:responsive",LIFE_CIRCLE:"virid:vue:life-circle",HOOK:"virid:vue:hook",LISTENER:"virid:vue:listener",INHERIT:"virid:vue:inherit",ATTR:"virid:vue:attr",PROJECT:"virid:vue:project",WATCH:"virid:vue:watch",ENV:"virid:vue:env"};import{watch as Y,computed as O,ref as P,shallowReactive as q,onMounted as Q,onUnmounted as X,onUpdated as Z,onActivated as G,onDeactivated as ee,shallowRef as L}from"vue";import{MessageWriter as h}from"@virid/core";var w=null;function S(t){let e=i(r=>(r&&M(r),r),"bindResponsiveHook");t.onActivate(e),w=t}i(S,"activateApp");var b=new Proxy({},{get(t,e){return(...r)=>{if(!w)return console.warn(`[Virid Vue] App method "${String(e)}" called before initialization.`),e==="register"?()=>{console.warn("[Virid Vue] Cleanup ignored: source listener was never registered.")}:void 0;let n=w[e];if(typeof n=="function")return Reflect.apply(n,w,r)}}});import{MessageWriter as y}from"@virid/core";var T=!0;function _(){T=!1}i(_,"disableBorrowChecker");var x=new WeakMap;function R(t,e,r=""){if(!T||t===null||typeof t!="object"&&typeof t!="function")return t;if(x.has(t))return x.get(t);let n=new Proxy(t,{get(o,s,a){let c=Reflect.get(o,s,a),d=r?`${r}.${String(s)}`:String(s);return typeof c=="function"?(...u)=>{if(!z(o,s)){let m=["[Virid Shield] Rejected",`Method: ${e}....${d}()`,"Reason: Unauthorized access to unsafe method."].join(`
|
|
6
|
+
`);return y.error(new Error(m)),null}let f=c.apply(o,u);return R(f,e,`${d}()`)}:R(c,e,d)},set(o,s){let a=r?`${r}.${String(s)}`:String(s),c=["[Virid Borrow Checker]","------------------------------------------------",`Component: ${e}`,`Code: ${e}....${a}`,"Result: Rejected","Reason: This object is write protected and cannot be modified.",`Stack: ${new Error().stack}`,"------------------------------------------------"].join(`
|
|
7
7
|
`);return y.error(new Error(c)),!1},deleteProperty(o,s){return y.error(new Error(`[Virid Shield] Physical Protection:
|
|
8
8
|
Prohibit Deletion of Component Attributes ${String(s)}`)),!1},defineProperty(){return y.error(new Error(`[Virid Shield] Physical Protection:
|
|
9
|
-
Prohibit redefining component attribute structure`)),!1}});return x.set(t,n),n}i(R,"createBorrowChecker");function z(t,e){if(new Set([Symbol.iterator,Symbol.asyncIterator,Symbol.toStringTag,"toString","valueOf","toJSON","constructor"]).has(e))return!0;let n=t.constructor?.name;if({Map:new Set(["get","has","keys","values","entries","forEach","size"]),Set:new Set(["has","keys","values","entries","forEach","size"]),Array:new Set(["length","map","filter","reduce","slice","find","includes","findIndex","every","some","at","join","concat","flat","flatMap","indexOf","lastIndexOf"]),String:new Set(["length","slice","substring","substr","split","includes","startsWith","endsWith","indexOf","replace","replaceAll","trim","toLowerCase","toUpperCase"])}[n]?.has(e))return!0;let s=Reflect.getMetadata(l.SAFE,t);return!!(s instanceof Set&&s.has(e))}i(z,"isShieldException");var I=class I{static set(e,r){return this.globalRegistry.has(e)?(
|
|
10
|
-
`))},"readOnlySetter");if(s){if(a==="component"){
|
|
11
|
-
"${o}" is only readable.`)}},"set"),enumerable:!0,configurable:!0})})}i(W,"bindEnv");import{onUnmounted as te,useAttrs as re}from"vue";import{MessageWriter as oe}from"@virid/core";function ne(t,e){let r=b.get(t);if(!Reflect.hasMetadata(l.CONTROLLER,t))return oe.error(new Error(`[Virid Controller] ${t.name} is not a Controller.Use @Controller to inject it.`)),null;let o=Object.getPrototypeOf(r),s=e?.context||re();s&&W(o,r,s),D(o,r),U(o,r)
|
|
9
|
+
Prohibit redefining component attribute structure`)),!1}});return x.set(t,n),n}i(R,"createBorrowChecker");function z(t,e){if(new Set([Symbol.iterator,Symbol.asyncIterator,Symbol.toStringTag,"toString","valueOf","toJSON","constructor"]).has(e))return!0;let n=t.constructor?.name;if({Map:new Set(["get","has","keys","values","entries","forEach","size"]),Set:new Set(["has","keys","values","entries","forEach","size"]),Array:new Set(["length","map","filter","reduce","slice","find","includes","findIndex","every","some","at","join","concat","flat","flatMap","indexOf","lastIndexOf"]),String:new Set(["length","slice","substring","substr","split","includes","startsWith","endsWith","indexOf","replace","replaceAll","trim","toLowerCase","toUpperCase"])}[n]?.has(e))return!0;let s=Reflect.getMetadata(l.SAFE,t);return!!(s instanceof Set&&s.has(e))}i(z,"isShieldException");var I=class I{static set(e,r){return this.globalRegistry.has(e)?(h.error(new Error(`[Virid UseController] Duplicate ID: Controller ${e} already exists`)),()=>!1):(this.globalRegistry.set(e,r),()=>(this.globalRegistry.delete(e),!0))}static get(e){return this.globalRegistry.has(e)?this.globalRegistry.get(e):(h.error(new Error(`[Virid UseController] ID Not Found: No Controller found with ID: ${e}`)),null)}};i(I,"GlobalRegistry"),v(I,"globalRegistry",q(new Map));var C=I;function $(t,e){Reflect.getMetadata(l.PROJECT,t)?.forEach(n=>{let{key:o,isAccessor:s,type:a,componentClass:c,source:d}=n,u,f=i(p=>{h.error(new Error(`[Virid Project] Read-only: Property "${o}" in "${e.constructor.name}" is a protected projection.
|
|
10
|
+
`))},"readOnlySetter");if(s){if(a==="component"){h.error(new Error(`[Virid Project] Architecture Violation: Manual get/set is forbidden on ${c} projection "${o}". Please use functional source.`));return}let p=Object.getOwnPropertyDescriptor(t,o);u=O({get:i(()=>p?.get?.call(e),"get"),set:i(g=>{p?.set?p.set.call(e,g):f(g)},"set")})}else u=O({get:i(()=>{let p=a==="component",g=p?b.get(c):e,E=d(g);return p?R(E,c.name,o):E},"get"),set:f});let m=Object.getOwnPropertyDescriptor(e,o);m&&m.configurable===!1||Object.defineProperty(e,o,{get:i(()=>u.value,"get"),set:i(p=>u.value=p,"set"),enumerable:!0,configurable:!0})})}i($,"bindProject");function j(t,e){let r=Reflect.getMetadata(l.WATCH,t)||[],n=[];return r.forEach(o=>{let{type:s,source:a,methodName:c,options:d,componentClass:u}=o,f=s==="component"?b.get(u):e;f&&!f.__ccs_processed__&&M(f);let m=i(()=>{try{return a(f)}catch(E){h.error(E,`[Virid Watch] Getter error in ${c}`);return}},"getter"),p=e[c].bind(e),g=Y(m,(E,F)=>{p(E,F)},{...d});n.push(g)}),n}i(j,"bindWatch");function M(t){return!t||typeof t!="object"||t.__virid_responsive_processed__||(Object.defineProperty(t,"__virid_responsive_processed__",{value:!0,enumerable:!1}),(Reflect.getMetadata(l.RESPONSIVE,t)||[]).forEach(r=>{let n=r.key,o=Object.getOwnPropertyDescriptor(t,n),s=o?.get?.__virid_box__;if(s){let a=s.value,c=r.shallow?L(a):P(a);Object.defineProperty(s,"value",{get:i(()=>c.value,"get"),set:i(d=>{c.value=d},"set"),enumerable:!0,configurable:!0})}else{if(o&&o.get)return;let a=t[n],c=r.shallow?L(a):P(a);Object.defineProperty(t,n,{get:i(()=>c.value,"get"),set:i(d=>{c.value=d},"set"),enumerable:!0,configurable:!0})}}),Reflect.ownKeys(t).forEach(r=>{if(r==="__virid_responsive_processed__")return;let n=t[r];n&&typeof n=="object"&&M(n)})),t}i(M,"bindResponsive");function N(t,e){Reflect.getMetadata(l.LIFE_CIRCLE,t)?.forEach(n=>{let{hookName:o,methodName:s}=n,a=e[s].bind(e);switch(o){case"onMounted":Q(a);break;case"onUnmounted":X(a);break;case"onUpdated":Z(a);break;case"onActivated":G(a);break;case"onDeactivated":ee(a);break;case"onSetup":a();break}})}i(N,"bindHooks");function D(t,e){Reflect.getMetadata(l.HOOK,t)?.forEach(n=>{let o=n.hookFactory();e[n.key]=o})}i(D,"bindUseHooks");function H(t,e){let r=Reflect.getMetadata(l.LISTENER,t)||[],n=[];return r.forEach(({key:o,messageClass:s,priority:a,batchMode:c})=>{let d=e[o],u={params:[s],targetClass:e.constructor,methodName:o,originalMethod:d},f={messageClass:s,messageIdx:0,batchMode:c,priority:a};e[o].systemContext=u,e[o].systemConfig=f;let m=b.register(e[o]);n.push(m)}),n}i(H,"bindListener");function U(t,e){let r=Reflect.getMetadata(l.INHERIT,t);r&&r.forEach(({key:n,id:o,selector:s})=>{let a=O(()=>{let c=C.get(o);return c?s?s(c):c:(h.warn(`[Virid Inherit] Warning: Inherit target not found: ${o}`),null)});Object.defineProperty(e,n,{get:i(()=>{let c=a.value;return c?R(c,n,""):null},"get"),set:i(()=>{h.error(new Error(`[Virid Inherit] No Modification: Attempted to set read-only Inherit property: ${n}`))},"set"),enumerable:!0,configurable:!0})})}i(U,"bindInherit");function W(t,e,r){let n=Reflect.getMetadata(l.ENV,t);n&&(console.log("envs:",n),console.log("context:",r),n.forEach(({key:o})=>{if(!(o in r)){h.warn(`[Virid Context] Env Not Found: The "${o}" is not defined in the context.`);return}Object.defineProperty(e,o,{get:i(()=>r[o],"get"),set:i(s=>{if(r[o]!==s)try{r[o]=s}catch(a){h.error(a,`[Virid Context] Set Failed:
|
|
11
|
+
"${o}" is only readable.`)}},"set"),enumerable:!0,configurable:!0})}))}i(W,"bindEnv");import{onUnmounted as te,useAttrs as re}from"vue";import{MessageWriter as oe}from"@virid/core";function ne(t,e){let r=b.get(t);if(!Reflect.hasMetadata(l.CONTROLLER,t))return oe.error(new Error(`[Virid Controller] ${t.name} is not a Controller.Use @Controller to inject it.`)),null;let o=Object.getPrototypeOf(r),s=e?.context||re();s&&W(o,r,s),D(o,r),U(o,r),$(o,r);let a=H(o,r);N(o,r);let c=j(o,r),d=i(()=>!0,"unbindRegister");return e?.id&&(d=C.set(e.id,r)),te(()=>{c.forEach(u=>u()),a.forEach(u=>u()),d()}),r}i(ne,"useController");import{MessageWriter as se,BaseMessage as k,SingleMessage as ie}from"@virid/core";function $e(t,e,r){return(n,o)=>{let s=Reflect.getMetadata(l.WATCH,n)||[];typeof e=="function"?s.push({type:"component",componentClass:t,source:e,options:r,methodName:o}):s.push({type:"local",componentClass:null,source:t,options:e,methodName:o}),Reflect.defineMetadata(l.WATCH,s,n)}}i($e,"Watch");function je(t,e){return(r,n,o)=>{let s=Reflect.getMetadata(l.PROJECT,r)||[],a=!!(o?.get||o?.set);if(!t&&!e&&!a){se.error(new Error("[Virid Project] Invalid Usage: @Project() can only be used on getter or setter."));return}let c={key:n,isAccessor:a,type:typeof e=="function"?"component":"local",componentClass:typeof e=="function"?t:null,source:typeof e=="function"?e:a?null:t};s.push(c),Reflect.defineMetadata(l.PROJECT,s,r)}}i(je,"Project");function Ne(t=!1){return(e,r)=>{let n=Reflect.getMetadata(l.RESPONSIVE,e)||[];n.push({key:r,shallow:t}),Reflect.defineMetadata(l.RESPONSIVE,n,e)}}i(Ne,"Responsive");function De(t){return(e,r)=>{let n=Reflect.getMetadata(l.LIFE_CIRCLE,e)||[];n.push({hookName:t,methodName:r}),Reflect.defineMetadata(l.LIFE_CIRCLE,n,e)}}i(De,"OnHook");function He(t){return(e,r)=>{let n=Reflect.getMetadata(l.HOOK,e)||[];n.push({key:r,hookFactory:t}),Reflect.defineMetadata(l.HOOK,n,e)}}i(He,"Use");function Ue(t,e,r){return(n,o)=>{let s=Reflect.getMetadata(l.INHERIT,n)||[];s.push({key:o,token:t,id:e,selector:r}),Reflect.defineMetadata(l.INHERIT,s,n)}}i(Ue,"Inherit");function We(){return(t,e)=>{let r=Reflect.getMetadata(l.ENV,t)||[];r.push({key:e}),Reflect.defineMetadata(l.ENV,r,t)}}i(We,"Env");function ke(t={messageClass:null,priority:0,batchMode:!1}){return(e,r,n)=>{if(typeof e=="function")throw new Error(`[Virid Listener] Method Type Error: The Method "${r}" is a static method. @Listener can only be used on instance member methods.`);let o=Reflect.getMetadata("design:paramtypes",e,r)||[],s=o.map((u,f)=>u===void 0?f:-1).filter(u=>u!==-1);if(s.length>0)throw new Error(`[Virid Listener] Parameter Metadata Loss in "${r}": One or more parameters have 'undefined' types. Check indices: [${s.join(", ")}]`);if(o.length>1)throw new Error(`[Virid Listener] Multiple Parameters Not Allowed: Listener method "${r}" can have at most ONE parameter (BaseMessage subclass or Array).`);let a=t.messageClass,c=t.batchMode??!1;if(o.length===0){if(!t.messageClass)throw new Error(`[Virid Listener] Rule Violation in "${r}": When the method has no parameters, you MUST specify "messageClass" in the decorator options.`)}else{let u=o[0];if(u===Array){if(!t.messageClass)throw new Error(`[Virid Listener] Rule Violation in "${r}": When using batch processing mode with Array, the "messageClass" parameter must be specified in decorator options.`);if(!(t.messageClass.prototype instanceof ie))throw new Error(`[Virid Listener] Type Mismatch in "${r}": Batch processing mode (Array) is only supported for subclasses of SingleMessage.`);c=!0}else if(u===k||u&&u.prototype instanceof k){if(t.messageClass)throw new Error(`[Virid Listener] Rule Violation in "${r}": Cannot specify "messageClass" in decorator options when it is already declared as a method parameter.`);a=u,c=t.batchMode??!1}else throw new Error(`[Virid Listener] Invalid Parameter in "${r}": The single parameter must be either a subclass of BaseMessage or an Array.`)}let d=Reflect.getMetadata(l.LISTENER,e)||[];d.push({key:r,messageClass:a,priority:t.priority||0,batchMode:c}),Reflect.defineMetadata(l.LISTENER,d,e)}}i(ke,"Listener");var A=class A{constructor(){v(this,"name","@virid/vue")}install(e,r){r.disableBorrowChecker&&_(),S(e)}};i(A,"VuePlugin");var B=A;export{We as Env,Ue as Inherit,ke as Listener,De as OnHook,je as Project,Ne as Responsive,He as Use,B as VuePlugin,$e as Watch,ne as useController};
|
|
12
12
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/decorators/constant.ts","../src/adapters/bind.ts","../src/app.ts","../src/adapters/borrow_checker.ts","../src/adapters/hook.ts","../src/decorators/vue.ts","../src/index.ts"],"sourcesContent":["/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Vue\n */\nimport { VIRID_METADATA } from \"@virid/core\";\nexport const VIRID_VUE_METADATA = {\n ...VIRID_METADATA,\n RESPONSIVE: \"virid:vue:responsive\",\n LIFE_CIRCLE: \"virid:vue:life-circle\",\n HOOK: \"virid:vue:hook\",\n LISTENER: \"virid:vue:listener\",\n INHERIT: \"virid:vue:inherit\",\n ATTR: \"virid:vue:attr\",\n PROJECT: \"virid:vue:project\",\n WATCH: \"virid:vue:watch\",\n ENV: \"virid:vue:env\",\n} as const;\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Vue\n */\nimport { VIRID_VUE_METADATA } from \"../decorators/constant\";\nimport {\n watch,\n computed,\n type WatchStopHandle,\n ref,\n shallowReactive,\n onMounted,\n onUnmounted,\n onUpdated,\n onActivated,\n onDeactivated,\n shallowRef,\n type WritableComputedRef,\n} from \"vue\";\nimport { MessageWriter, type SystemContext, SystemConfig } from \"@virid/core\";\nimport { viridApp } from \"../app\";\nimport { createBorrowChecker } from \"./borrow_checker\";\nimport {\n type WatchMetadata,\n type ProjectMetadata,\n type InheritMetadata,\n type UseMetadata,\n type ResponsiveMetadata,\n type OnHookMetadata,\n type ListenerMetadata,\n EnvMetadata,\n} from \"../interfaces\";\n\n// controller注册表\n\nexport class GlobalRegistry {\n private static globalRegistry = shallowReactive(new Map<string, any>());\n static set(id: string, instance: any): () => boolean {\n if (!this.globalRegistry.has(id)) {\n this.globalRegistry.set(id, instance);\n //返回卸载函数\n return () => {\n this.globalRegistry.delete(id);\n return true;\n };\n } else {\n MessageWriter.error(\n new Error(\n `[Virid UseController] Duplicate ID: Controller ${id} already exists`,\n ),\n );\n return () => false;\n }\n }\n static get(id: string): any {\n //如果找不见,直接报错\n if (!this.globalRegistry.has(id)) {\n MessageWriter.error(\n new Error(\n `[Virid UseController] ID Not Found: No Controller found with ID: ${id}`,\n ),\n );\n return null;\n }\n return this.globalRegistry.get(id);\n }\n}\n/**\n * @Project 连接component,只读一个component的值\n */\nexport function bindProject(proto: any, instance: any) {\n const projects: ProjectMetadata = Reflect.getMetadata(\n VIRID_VUE_METADATA.PROJECT,\n proto,\n );\n\n projects?.forEach((config) => {\n const { key, isAccessor, type, componentClass, source } = config;\n let project: WritableComputedRef<any, any>;\n\n // 统一报错 Setter\n const readOnlySetter = (_val: any) => {\n MessageWriter.error(\n new Error(\n `[Virid Project] Read-only: Property \"${key}\" in \"${instance.constructor.name}\" is a protected projection.\\n`,\n ),\n );\n };\n\n // 手写 Accessor\n if (isAccessor) {\n if (type === \"component\") {\n MessageWriter.error(\n new Error(\n `[Virid Project] Architecture Violation: Manual get/set is forbidden on ${componentClass} projection \"${key}\". Please use functional source.`,\n ),\n );\n return;\n }\n\n // 只有非 component 类型才走到这里,支持读写\n const rawDescriptor = Object.getOwnPropertyDescriptor(proto, key);\n project = computed({\n get: () => rawDescriptor?.get?.call(instance),\n set: (val) => {\n if (rawDescriptor?.set) {\n rawDescriptor.set.call(instance, val);\n } else {\n readOnlySetter(val);\n }\n },\n });\n }\n //函数式投影\n else {\n project = computed({\n get: () => {\n const isFromComponent = type === \"component\";\n const target = isFromComponent\n ? viridApp.get(componentClass)\n : instance;\n const val = source(target);\n\n // 来自 component 的数据套盾\n if (isFromComponent) {\n return createBorrowChecker(val, componentClass!.name, key);\n }\n\n // 来自自己的投影,直接返回\n return val;\n },\n set: readOnlySetter,\n });\n }\n\n const currentDescriptor = Object.getOwnPropertyDescriptor(instance, key);\n if (currentDescriptor && currentDescriptor.configurable === false) return;\n\n Object.defineProperty(instance, key, {\n get: () => project.value,\n set: (val) => (project.value = val),\n enumerable: true,\n configurable: true,\n });\n });\n}\n/**\n * @Watch 自动把函数变成watch\n */\n\nexport function bindWatch(proto: any, instance: any) {\n const watches: WatchMetadata =\n Reflect.getMetadata(VIRID_VUE_METADATA.WATCH, proto) || [];\n const stops: WatchStopHandle[] = [];\n\n watches.forEach((config) => {\n const { type, source, methodName, options, componentClass } = config;\n\n // 获取目标实例\n const target =\n type === \"component\" ? viridApp.get(componentClass) : instance;\n // 确保目标实例已经过响应式处理\n if (target && !target.__ccs_processed__) {\n bindResponsive(target);\n }\n // 封装 getter\n const getter = () => {\n try {\n return source(target);\n } catch (e) {\n MessageWriter.error(\n e as Error,\n `[Virid Watch] Getter error in ${methodName}`,\n );\n return undefined;\n }\n };\n // 使用 bind 确保回调函数内部的 this 指向当前的 Controller/Instance\n const callback = (instance[methodName] as any).bind(instance);\n // 执行监听\n const stop = watch(\n getter,\n (newVal, oldVal) => {\n callback(newVal, oldVal);\n },\n {\n ...options,\n },\n );\n stops.push(stop);\n });\n\n return stops;\n}\n\n/**\n * @Responsive 递归处理,支持在 Observer 基础上套娃\n */\nexport function bindResponsive(instance: any) {\n if (!instance || typeof instance !== \"object\") return instance;\n if (instance.__virid_responsive_processed__) return instance;\n\n Object.defineProperty(instance, \"__virid_responsive_processed__\", {\n value: true,\n enumerable: false,\n });\n\n const props: ResponsiveMetadata =\n Reflect.getMetadata(VIRID_VUE_METADATA.RESPONSIVE, instance) || [];\n\n props.forEach((config) => {\n const key = config.key;\n const descriptor = Object.getOwnPropertyDescriptor(instance, key);\n\n // 【关键逻辑】检查是否已经被 bindObservers 劫持过\n const existingBox = (descriptor?.get as any)?.__virid_box__;\n\n // 在 bindResponsive 内部\n if (existingBox) {\n const rawValue = existingBox.value;\n const vRef = config.shallow ? shallowRef(rawValue) : ref(rawValue);\n\n Object.defineProperty(existingBox, \"value\", {\n get: () => vRef.value,\n set: (val) => {\n vRef.value = val;\n },\n enumerable: true,\n configurable: true,\n });\n } else {\n // 普通属性,按照原逻辑处理\n if (descriptor && descriptor.get) return;\n\n const rawValue = instance[key];\n const internalState = config.shallow\n ? shallowRef(rawValue)\n : ref(rawValue);\n\n Object.defineProperty(instance, key, {\n get: () => internalState.value,\n set: (val) => {\n internalState.value = val;\n },\n enumerable: true,\n configurable: true,\n });\n }\n });\n\n // 递归处理子对象\n Reflect.ownKeys(instance).forEach((key) => {\n if (key === \"__virid_responsive_processed__\") return;\n const val = instance[key];\n if (val && typeof val === \"object\") {\n bindResponsive(val);\n }\n });\n return instance;\n}\n\n/**\n * 解析 @OnHook 并将其绑定到 Vue 生命周期\n */\nexport function bindHooks(proto: any, instance: any) {\n const hooks: OnHookMetadata = Reflect.getMetadata(\n VIRID_VUE_METADATA.LIFE_CIRCLE,\n proto,\n );\n\n hooks?.forEach((config) => {\n const { hookName, methodName } = config;\n const fn = instance[methodName].bind(instance);\n\n switch (hookName) {\n case \"onMounted\":\n onMounted(fn);\n break;\n case \"onUnmounted\":\n onUnmounted(fn);\n break;\n case \"onUpdated\":\n onUpdated(fn);\n break;\n case \"onActivated\":\n onActivated(fn);\n break;\n case \"onDeactivated\":\n onDeactivated(fn);\n break;\n case \"onSetup\":\n fn();\n break;\n // 可以根据需要扩展更多的钩子\n }\n });\n}\n\n/**\n * 执行并绑定万能 Hooks\n */\nexport function bindUseHooks(proto: any, instance: any) {\n const hooks: UseMetadata = Reflect.getMetadata(\n VIRID_VUE_METADATA.HOOK,\n proto,\n );\n\n hooks?.forEach((config) => {\n // 在 useController 运行期间执行 hookFactory()\n const hookResult = config.hookFactory();\n // 直接赋值给实例\n instance[config.key] = hookResult;\n });\n}\n\n/**\n * @description: 启动@Listener 为 Controller 实例绑定监听器并返回销毁函数列表\n **/\nexport function bindListener(proto: any, instance: any): (() => void)[] {\n const listenerConfigs: ListenerMetadata =\n Reflect.getMetadata(VIRID_VUE_METADATA.LISTENER, proto) || [];\n const unbindFunctions: (() => void)[] = [];\n\n listenerConfigs.forEach(({ key, messageClass, priority, batchMode }) => {\n const originalMethod = instance[key];\n\n // 给包装后的函数挂载上下文信息\n const listenerContext: SystemContext = {\n params: [messageClass],\n targetClass: instance.constructor,\n methodName: key,\n originalMethod: originalMethod,\n };\n\n const listenerConfig: SystemConfig = {\n messageClass: messageClass,\n messageIdx: 0,\n batchMode: batchMode,\n priority: priority,\n };\n (instance[key] as any).systemContext = listenerContext;\n (instance[key] as any).systemConfig = listenerConfig;\n\n const unregister = viridApp.register(instance[key]);\n unbindFunctions.push(unregister);\n });\n\n return unbindFunctions;\n}\n\n/**\n * @description: 启动@Inherit 使能够只读其他的controller\n **/\nexport function bindInherit(proto: any, instance: any) {\n const inherits: InheritMetadata = Reflect.getMetadata(\n VIRID_VUE_METADATA.INHERIT,\n proto,\n );\n if (!inherits) return;\n\n inherits.forEach(({ key, id, selector }) => {\n // 为每个继承属性创建一个私有的 computed 引用\n // 这个 computed 就像一个隧道,一头连着 Registry,一头连着子组件\n const tunnel = computed(() => {\n const target = GlobalRegistry.get(id); // 自动依赖 Registry 的增删\n if (!target) {\n MessageWriter.warn(\n `[Virid Inherit] Warning: Inherit target not found: ${id}`,\n );\n return null;\n }\n // 这里的 selector(target) 也会触发依赖收集\n // 如果 target.state.count 变了,这个 computed 也会感知到\n return selector ? selector(target) : target;\n });\n\n Object.defineProperty(instance, key, {\n get: () => {\n const val = tunnel.value; // 访问 computed.value\n // 返回时依然套上护盾,确保“弱引用”也是“只读引用”\n return val ? createBorrowChecker(val, key, \"\") : null;\n },\n set: () => {\n MessageWriter.error(\n new Error(\n `[Virid Inherit] No Modification: Attempted to set read-only Inherit property: ${key}`,\n ),\n );\n },\n enumerable: true,\n configurable: true,\n });\n });\n}\n\n/**\nu* @description: 把槽或者其他乱七八糟的东西传递过来的上下文注入到controller里\n * @param {*} context 上下文对象\n * @param {*} instance controller实例\n */\nexport function bindEnv(proto: any, instance: any, context: any) {\n const envs: EnvMetadata = Reflect.getMetadata(VIRID_VUE_METADATA.ENV, proto);\n if (!envs) return;\n envs.forEach(({ key }) => {\n // if (key in context === false) {\n // MessageWriter.warn(\n // `[Virid Context] Env Not Found: The \"${key}\" is not defined in the context.`,\n // );\n // return;\n // }\n Object.defineProperty(instance, key, {\n get: () => context[key],\n set: (val) => {\n if (context[key] === val) return;\n try {\n context[key] = val;\n } catch (e) {\n MessageWriter.error(\n e as Error,\n `[Virid Context] Set Failed:\\n \"${key}\" is only readable.`,\n );\n }\n },\n enumerable: true,\n configurable: true,\n });\n });\n}\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Vue\n */\nimport { type ViridApp, Newable } from \"@virid/core\";\nimport { bindResponsive } from \"./adapters/bind\";\nexport interface IViridApp {\n register(systemFn: (...args: any[]) => any): () => void;\n get(identifier: any): any;\n bind<T>(identifier: Newable<T>): void;\n}\n\nlet activeApp: IViridApp | null = null;\n\nexport function activateApp(app: ViridApp) {\n const bindResponsiveHook = (instance: any) => {\n if (instance) {\n bindResponsive(instance);\n }\n return instance;\n };\n app.onActivate(bindResponsiveHook);\n activeApp = app;\n}\n\nexport const viridApp: IViridApp = new Proxy({} as IViridApp, {\n get(_, prop: keyof IViridApp) {\n return (...args: any[]) => {\n if (!activeApp) {\n console.warn(\n `[Virid Vue] App method \"${String(prop)}\" called before initialization.`,\n );\n\n if (prop === \"register\") {\n return () => {\n console.warn(\n \"[Virid Vue] Cleanup ignored: source listener was never registered.\",\n );\n };\n }\n return undefined;\n }\n const targetMethod = activeApp[prop];\n if (typeof targetMethod === \"function\") {\n return Reflect.apply(targetMethod, activeApp, args);\n }\n };\n },\n});\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Vue\n */\nimport { MessageWriter } from \"@virid/core\";\nimport { VIRID_VUE_METADATA } from \"../decorators/constant\";\n\nlet isBorrowCheckerEnabled = true;\nexport function disableBorrowChecker() {\n isBorrowCheckerEnabled = false;\n}\n\nconst borrowCache = new WeakMap<any, any>();\n\n/**\n * Recursive borrowing check proxy: Make the object and all its descendants hard read-only\n */\nexport function createBorrowChecker(\n target: any,\n rootName: string,\n path: string = \"\",\n): any {\n if (\n !isBorrowCheckerEnabled ||\n target === null ||\n (typeof target !== \"object\" && typeof target !== \"function\")\n ) {\n return target;\n }\n if (borrowCache.has(target)) {\n return borrowCache.get(target);\n }\n\n const proxy = new Proxy(target, {\n get(obj, prop, receiver) {\n const value = Reflect.get(obj, prop, receiver);\n const currentPath = path ? `${path}.${String(prop)}` : String(prop);\n if (typeof value === \"function\") {\n return (...args: any[]) => {\n if (!isShieldException(obj, prop)) {\n const errorMsg = [\n `[Virid Shield] Rejected`,\n `Method: ${rootName}....${currentPath}()`,\n `Reason: Unauthorized access to unsafe method.`,\n ].join(\"\\n\");\n MessageWriter.error(new Error(errorMsg));\n return null;\n }\n\n const result = value.apply(obj, args);\n return createBorrowChecker(result, rootName, `${currentPath}()`);\n };\n }\n return createBorrowChecker(value, rootName, currentPath);\n },\n\n set(_obj, prop) {\n const currentPath = path ? `${path}.${String(prop)}` : String(prop);\n\n // Elegantly fail and provide repair suggestions\n const errorMsg = [\n `[Virid Borrow Checker]`,\n `------------------------------------------------`,\n `Component: ${rootName}`,\n `Code: ${rootName}....${currentPath}`,\n `Result: Rejected`,\n `Reason: This object is write protected and cannot be modified.`,\n `Stack: ${new Error().stack}`,\n `------------------------------------------------`,\n ].join(\"\\n\");\n MessageWriter.error(new Error(errorMsg));\n return false;\n },\n deleteProperty(_obj, prop) {\n MessageWriter.error(\n new Error(\n `[Virid Shield] Physical Protection:\\nProhibit Deletion of Component Attributes ${String(prop)}`,\n ),\n );\n return false;\n },\n defineProperty() {\n MessageWriter.error(\n new Error(\n `[Virid Shield] Physical Protection:\\nProhibit redefining component attribute structure`,\n ),\n );\n return false;\n },\n });\n borrowCache.set(target, proxy);\n return proxy;\n}\n/**\n * Determine whether a method should skip shield interception\n */\nfunction isShieldException(obj: any, prop: string | symbol): boolean {\n const PROTOCOL_WHITELIST = new Set<string | symbol>([\n Symbol.iterator,\n Symbol.asyncIterator,\n Symbol.toStringTag,\n \"toString\",\n \"valueOf\",\n \"toJSON\",\n \"constructor\",\n ]);\n if (PROTOCOL_WHITELIST.has(prop)) return true;\n\n const constructorName = obj.constructor?.name;\n\n const READONLY_COLLECTIONS: Record<string, Set<string | symbol>> = {\n Map: new Set([\n \"get\",\n \"has\",\n \"keys\",\n \"values\",\n \"entries\",\n \"forEach\",\n \"size\",\n ]),\n Set: new Set([\"has\", \"keys\", \"values\", \"entries\", \"forEach\", \"size\"]),\n Array: new Set([\n \"length\",\n \"map\",\n \"filter\",\n \"reduce\",\n \"slice\",\n \"find\",\n \"includes\",\n \"findIndex\",\n \"every\",\n \"some\",\n \"at\",\n \"join\",\n \"concat\",\n \"flat\",\n \"flatMap\",\n \"indexOf\",\n \"lastIndexOf\",\n ]),\n String: new Set([\n \"length\",\n \"slice\",\n \"substring\",\n \"substr\",\n \"split\",\n \"includes\",\n \"startsWith\",\n \"endsWith\",\n \"indexOf\",\n \"replace\",\n \"replaceAll\",\n \"trim\",\n \"toLowerCase\",\n \"toUpperCase\",\n ]),\n };\n\n if (READONLY_COLLECTIONS[constructorName]?.has(prop)) return true;\n\n const safeMethods = Reflect.getMetadata(VIRID_VUE_METADATA.SAFE, obj);\n if (safeMethods instanceof Set && safeMethods.has(prop)) return true;\n\n return false;\n}\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Vue\n */\nimport {\n bindProject,\n bindWatch,\n bindHooks,\n bindUseHooks,\n bindListener,\n GlobalRegistry,\n bindInherit,\n bindEnv,\n} from \"./bind\";\nimport { onUnmounted, useAttrs } from \"vue\";\nimport { VIRID_VUE_METADATA } from \"../decorators/constant\";\nimport { MessageWriter, Newable } from \"@virid/core\";\nimport { viridApp } from \"../app\";\n/**\n * @description: vue的hooks适配器,注入IOC容器中的Controller实例,并挂在vue的各种方法\n * @param token\n */\nexport function useController<T>(\n token: Newable<T>,\n options?: { id?: string; context?: object },\n): T {\n const instance = viridApp.get(token) as any;\n\n // 检查身份 Controller\n const isController = Reflect.hasMetadata(\n VIRID_VUE_METADATA.CONTROLLER,\n token,\n );\n if (!isController) {\n // 确保非 Controller 的实例不能被其他 Controller 访问\n MessageWriter.error(\n new Error(\n `[Virid Controller] ${token.name} is not a Controller.Use @Controller to inject it.`,\n ),\n );\n return null as T;\n }\n\n //绑定各种魔法装饰器\n const proto = Object.getPrototypeOf(instance);\n //注入vue的乱七八糟的context\n const reactiveContext = options?.context || useAttrs();\n if (reactiveContext) {\n bindEnv(proto, instance, reactiveContext);\n }\n // @Use装饰器\n bindUseHooks(proto, instance);\n // @Inherit装饰器\n bindInherit(proto, instance);\n // @Project装饰器\n bindProject(proto, instance);\n // @Listener装饰器\n // 运行时动态挂载监听器\n const unbindList = bindListener(proto, instance);\n // 生命周期钩子\n bindHooks(proto, instance);\n //绑定全局注册表\n // @Watch装饰器\n const stops = bindWatch(proto, instance);\n //如果有id,就去注册\n let unbindRegister = () => true;\n if (options?.id) {\n unbindRegister = GlobalRegistry.set(options.id, instance);\n }\n onUnmounted(() => {\n stops.forEach((stop) => stop());\n unbindList.forEach((stop) => stop());\n unbindRegister();\n // 自动卸载信号处理器,防止 Controller 销毁后残留\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 Vue\n */\nimport { VIRID_VUE_METADATA } from \"./constant\";\nimport type { WatchOptions } from \"vue\";\nimport {\n MessageWriter,\n type Newable,\n BaseMessage,\n SingleMessage,\n} from \"@virid/core\";\nimport {\n type WatchMetadata,\n type ProjectMetadata,\n type InheritMetadata,\n type UseMetadata,\n type ResponsiveMetadata,\n type OnHookMetadata,\n type ListenerMetadata,\n type ListenerConfig,\n EnvMetadata,\n} from \"../interfaces\";\n\n/**\n * Overload 1: Monitor Controller's own variables\n * @param source Watching closure functions\n * @param options Watch options\n */\nexport function Watch<T>(\n source: (instance: T) => any | Promise<any>,\n options?: WatchOptions,\n): any;\n\n/**\n * Overload 2: Monitor Component's variables\n * @param componentClass Component class\n * @param source Watching closure functions\n * @param options Watch options\n */\n\nexport function Watch<C>(\n component: Newable<C>,\n source: (comp: C) => any | Promise<any>,\n options?: WatchOptions,\n): any;\n\nexport function Watch(arg1: any, arg2?: any, arg3?: any) {\n return (target: any, methodName: string) => {\n const existing: WatchMetadata =\n Reflect.getMetadata(VIRID_VUE_METADATA.WATCH, target) || [];\n\n if (typeof arg2 === \"function\") {\n // Watch(Component, (c) => c.prop, options)\n existing.push({\n type: \"component\",\n componentClass: arg1,\n source: arg2,\n options: arg3,\n methodName,\n });\n } else {\n // Watch((i) => i.prop, options)\n existing.push({\n type: \"local\",\n componentClass: null,\n source: arg1,\n options: arg2,\n methodName,\n });\n }\n\n Reflect.defineMetadata(VIRID_VUE_METADATA.WATCH, existing, target);\n };\n}\n\n/**\n * Overload 1: Internal Projection\n * @param source Projection closure functions\n */\n\nexport function Project<T>(source: (instance: T) => any): any;\n\n/**\n * Overload 1: Component Projection\n * @param source Projection closure functions\n */\nexport function Project<C>(\n component: new (...args: any[]) => C,\n source: (comp: C) => any,\n): any;\n// Overload 3: Internal get set projection @Project() Public get name() {}\nexport function Project<T>(): any;\n\nexport function Project(arg1?: any, arg2?: any) {\n return (target: any, key: string, descriptor?: PropertyDescriptor) => {\n const existing: ProjectMetadata =\n Reflect.getMetadata(VIRID_VUE_METADATA.PROJECT, target) || [];\n const isAccessor = !!(descriptor?.get || descriptor?.set);\n if (!arg1 && !arg2 && !isAccessor) {\n MessageWriter.error(\n new Error(\n `[Virid Project] Invalid Usage: @Project() can only be used on getter or setter.`,\n ),\n );\n return;\n }\n const metadata = {\n key,\n isAccessor: isAccessor,\n // 这里的逻辑和 Watch 保持高度一致\n type: typeof arg2 === \"function\" ? \"component\" : \"local\",\n componentClass: typeof arg2 === \"function\" ? arg1 : null,\n source: typeof arg2 === \"function\" ? arg2 : isAccessor ? null : arg1,\n } as const;\n\n existing.push(metadata);\n Reflect.defineMetadata(VIRID_VUE_METADATA.PROJECT, existing, target);\n };\n}\n/**\n * Add responsiveness to data\n */\nexport function Responsive(shallow = false) {\n return (target: any, key: string) => {\n // 记录哪些属性需要变成响应式\n const props: ResponsiveMetadata =\n Reflect.getMetadata(VIRID_VUE_METADATA.RESPONSIVE, target) || [];\n props.push({ key, shallow });\n Reflect.defineMetadata(VIRID_VUE_METADATA.RESPONSIVE, props, target);\n };\n}\n\n/**\n * Declarative lifecycle hook @OnHook(\"onMounted\")\n */\nexport function OnHook(\n hookName:\n | \"onMounted\"\n | \"onUnmounted\"\n | \"onUpdated\"\n | \"onActivated\"\n | \"onDeactivated\"\n | \"onSetup\",\n) {\n return (target: any, methodName: string) => {\n const existing: OnHookMetadata =\n Reflect.getMetadata(VIRID_VUE_METADATA.LIFE_CIRCLE, target) || [];\n existing.push({ hookName, methodName });\n Reflect.defineMetadata(VIRID_VUE_METADATA.LIFE_CIRCLE, existing, target);\n };\n}\n/**\n * Universal Hook Injection Decorator\n * Usage: @ Use()=>useRoute() Public route! : RouteLocationNormalized\n */\nexport function Use(hookFactory: () => any) {\n return (target: any, key: string) => {\n const existing: UseMetadata =\n Reflect.getMetadata(VIRID_VUE_METADATA.HOOK, target) || [];\n existing.push({ key, hookFactory });\n Reflect.defineMetadata(VIRID_VUE_METADATA.HOOK, existing, target);\n };\n}\n/**\n * Inherit injection decorator\n * Usage: @Inherit(Controller, (instance)=>instance. xxxx) public data! : SomeType\n */\nexport function Inherit<T>(\n token: Newable<T>,\n id: string,\n selector: (instance: T) => any,\n) {\n return (target: any, key: string) => {\n const metadata: InheritMetadata =\n Reflect.getMetadata(VIRID_VUE_METADATA.INHERIT, target) || [];\n metadata.push({ key, token, id, selector });\n Reflect.defineMetadata(VIRID_VUE_METADATA.INHERIT, metadata, target);\n };\n}\n\n/**\n * Marking an attribute as injected from the external environment (context)\n */\nexport function Env() {\n return (target: any, key: string) => {\n const metadata: EnvMetadata =\n Reflect.getMetadata(VIRID_VUE_METADATA.ENV, target) || [];\n metadata.push({ key });\n Reflect.defineMetadata(VIRID_VUE_METADATA.ENV, metadata, target);\n };\n}\n\n/**\n * Listener Decorator - Tag Controller's member methods as message listeners\n */\nexport function Listener(\n config: ListenerConfig = {\n messageClass: null,\n priority: 0,\n batchMode: false,\n },\n) {\n return (target: any, key: string, descriptor?: PropertyDescriptor) => {\n if (typeof target === \"function\") {\n throw new Error(\n `[Virid Listener] Method Type Error: The Method \"${key}\" is a static method. @Listener can only be used on instance member methods.`,\n );\n }\n\n // Get parameter type metadata\n const types: Array<any> =\n Reflect.getMetadata(\"design:paramtypes\", target, key) || [];\n\n // Verify if there are undefined parameters (to prevent circular references or incomplete imports)\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 Listener] Parameter Metadata Loss in \"${key}\": One or more parameters have 'undefined' types. Check indices: [${undefinedIndices.join(\", \")}]`,\n );\n }\n\n // The parameter must have only one\n if (types.length > 1) {\n throw new Error(\n `[Virid Listener] Multiple Parameters Not Allowed: Listener method \"${key}\" can have at most ONE parameter (BaseMessage subclass or Array).`,\n );\n }\n\n // Prepare variables for final storage in metadata\n let finalMessageClass = config.messageClass;\n let finalBatchMode = config.batchMode ?? false;\n\n // Split processing: 0 parameters vs 1 parameter\n if (types.length === 0) {\n // No parameters are allowed, but it must be written in messageClass\n if (!config.messageClass) {\n throw new Error(\n `[Virid Listener] Rule Violation in \"${key}\": When the method has no parameters, you MUST specify \"messageClass\" in the decorator options.`,\n );\n }\n } else {\n // There is only one parameter available\n const paramType = types[0];\n\n if (paramType === Array) {\n // If it is a list (Array), messageClass must be written\n if (!config.messageClass) {\n throw new Error(\n `[Virid Listener] Rule Violation in \"${key}\": When using batch processing mode with Array, the \"messageClass\" parameter must be specified in decorator options.`,\n );\n }\n // Batch, verify if it inherits from SingleMessage\n if (!(config.messageClass.prototype instanceof SingleMessage)) {\n throw new Error(\n `[Virid Listener] Type Mismatch in \"${key}\": Batch processing mode (Array) is only supported for subclasses of SingleMessage.`,\n );\n }\n finalBatchMode = true;\n } else if (\n paramType === BaseMessage ||\n (paramType && paramType.prototype instanceof BaseMessage)\n ) {\n // If it is a single BaseMessage, messageClass cannot be written\n if (config.messageClass) {\n throw new Error(\n `[Virid Listener] Rule Violation in \"${key}\": Cannot specify \"messageClass\" in decorator options when it is already declared as a method parameter.`,\n );\n }\n finalMessageClass = paramType;\n // If batchMode is not explicitly specified, batch mode will not be enabled by default for single messages\n finalBatchMode = config.batchMode ?? false;\n } else {\n // I have written parameters, but they are neither BaseMessage nor Array\n throw new Error(\n `[Virid Listener] Invalid Parameter in \"${key}\": The single parameter must be either a subclass of BaseMessage or an Array.`,\n );\n }\n }\n\n const listeners: ListenerMetadata =\n Reflect.getMetadata(VIRID_VUE_METADATA.LISTENER, target) || [];\n\n listeners.push({\n key,\n messageClass: finalMessageClass as any,\n priority: config.priority || 0,\n batchMode: finalBatchMode,\n });\n\n Reflect.defineMetadata(VIRID_VUE_METADATA.LISTENER, listeners, target);\n };\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: Vue adapter for virid, projecting logic sovereignty to reactive UI.\n */\nimport { ViridPlugin, type ViridApp } from \"@virid/core\";\nimport { type PluginOption } from \"./interfaces\";\nexport * from \"./adapters\";\nexport * from \"./decorators\";\nexport * from \"./interfaces\";\nimport { activateApp } from \"./app\";\nimport { disableBorrowChecker } from \"./adapters/borrow_checker\";\n\nexport class VuePlugin implements ViridPlugin<PluginOption> {\n name = \"@virid/vue\";\n install(app: ViridApp, options: PluginOption) {\n if (options.disableBorrowChecker) disableBorrowChecker();\n activateApp(app);\n }\n}\n"],"mappings":"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","names":["VIRID_METADATA","VIRID_VUE_METADATA","RESPONSIVE","LIFE_CIRCLE","HOOK","LISTENER","INHERIT","ATTR","PROJECT","WATCH","ENV","watch","computed","ref","shallowReactive","onMounted","onUnmounted","onUpdated","onActivated","onDeactivated","shallowRef","MessageWriter","activeApp","activateApp","app","bindResponsiveHook","__name","instance","bindResponsive","onActivate","viridApp","Proxy","get","_","prop","args","console","warn","String","targetMethod","Reflect","apply","MessageWriter","isBorrowCheckerEnabled","disableBorrowChecker","borrowCache","WeakMap","createBorrowChecker","target","rootName","path","has","get","proxy","Proxy","obj","prop","receiver","value","Reflect","currentPath","String","args","isShieldException","errorMsg","join","MessageWriter","error","Error","result","apply","set","_obj","stack","deleteProperty","defineProperty","Set","Symbol","iterator","asyncIterator","toStringTag","constructorName","name","Map","Array","safeMethods","getMetadata","VIRID_VUE_METADATA","SAFE","GlobalRegistry","set","id","instance","globalRegistry","has","MessageWriter","error","Error","delete","get","__publicField","shallowReactive","Map","_GlobalRegistry","bindProject","proto","Reflect","getMetadata","VIRID_VUE_METADATA","PROJECT","forEach","config","key","isAccessor","type","componentClass","source","project","readOnlySetter","__name","_val","name","rawDescriptor","Object","getOwnPropertyDescriptor","computed","call","val","isFromComponent","target","viridApp","createBorrowChecker","currentDescriptor","configurable","defineProperty","value","enumerable","bindWatch","watches","WATCH","stops","methodName","options","__ccs_processed__","bindResponsive","getter","e","callback","bind","stop","watch","newVal","oldVal","push","__virid_responsive_processed__","RESPONSIVE","descriptor","existingBox","__virid_box__","rawValue","vRef","shallow","shallowRef","ref","internalState","ownKeys","bindHooks","LIFE_CIRCLE","hookName","fn","onMounted","onUnmounted","onUpdated","onActivated","onDeactivated","bindUseHooks","HOOK","hookResult","hookFactory","bindListener","listenerConfigs","LISTENER","unbindFunctions","messageClass","priority","batchMode","originalMethod","listenerContext","params","targetClass","listenerConfig","messageIdx","systemContext","systemConfig","unregister","register","bindInherit","inherits","INHERIT","selector","tunnel","warn","bindEnv","context","envs","ENV","onUnmounted","useAttrs","MessageWriter","useController","token","options","instance","viridApp","get","Reflect","hasMetadata","VIRID_VUE_METADATA","CONTROLLER","MessageWriter","error","Error","name","proto","Object","getPrototypeOf","reactiveContext","context","useAttrs","bindEnv","bindUseHooks","bindInherit","bindProject","unbindList","bindListener","bindHooks","stops","bindWatch","unbindRegister","__name","id","GlobalRegistry","set","onUnmounted","forEach","stop","MessageWriter","BaseMessage","SingleMessage","Watch","arg1","arg2","arg3","target","methodName","existing","Reflect","getMetadata","VIRID_VUE_METADATA","WATCH","push","type","componentClass","source","options","defineMetadata","Project","key","descriptor","PROJECT","isAccessor","get","set","MessageWriter","error","Error","metadata","Responsive","shallow","props","RESPONSIVE","OnHook","hookName","LIFE_CIRCLE","Use","hookFactory","HOOK","Inherit","token","id","selector","INHERIT","Env","ENV","Listener","config","messageClass","priority","batchMode","types","undefinedIndices","map","t","i","undefined","filter","length","join","finalMessageClass","finalBatchMode","paramType","Array","prototype","SingleMessage","BaseMessage","listeners","LISTENER","VuePlugin","name","install","app","options","disableBorrowChecker","activateApp","_VuePlugin"]}
|
|
1
|
+
{"version":3,"sources":["../src/decorators/constant.ts","../src/adapters/bind.ts","../src/app.ts","../src/adapters/borrow_checker.ts","../src/adapters/hook.ts","../src/decorators/vue.ts","../src/index.ts"],"sourcesContent":["/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Vue\n */\nimport { VIRID_METADATA } from \"@virid/core\";\nexport const VIRID_VUE_METADATA = {\n ...VIRID_METADATA,\n RESPONSIVE: \"virid:vue:responsive\",\n LIFE_CIRCLE: \"virid:vue:life-circle\",\n HOOK: \"virid:vue:hook\",\n LISTENER: \"virid:vue:listener\",\n INHERIT: \"virid:vue:inherit\",\n ATTR: \"virid:vue:attr\",\n PROJECT: \"virid:vue:project\",\n WATCH: \"virid:vue:watch\",\n ENV: \"virid:vue:env\",\n} as const;\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Vue\n */\nimport { VIRID_VUE_METADATA } from \"../decorators/constant\";\nimport {\n watch,\n computed,\n type WatchStopHandle,\n ref,\n shallowReactive,\n onMounted,\n onUnmounted,\n onUpdated,\n onActivated,\n onDeactivated,\n shallowRef,\n type WritableComputedRef,\n} from \"vue\";\nimport { MessageWriter, type SystemContext, SystemConfig } from \"@virid/core\";\nimport { viridApp } from \"../app\";\nimport { createBorrowChecker } from \"./borrow_checker\";\nimport {\n type WatchMetadata,\n type ProjectMetadata,\n type InheritMetadata,\n type UseMetadata,\n type ResponsiveMetadata,\n type OnHookMetadata,\n type ListenerMetadata,\n EnvMetadata,\n} from \"../interfaces\";\n\n// controller注册表\n\nexport class GlobalRegistry {\n private static globalRegistry = shallowReactive(new Map<string, any>());\n static set(id: string, instance: any): () => boolean {\n if (!this.globalRegistry.has(id)) {\n this.globalRegistry.set(id, instance);\n //返回卸载函数\n return () => {\n this.globalRegistry.delete(id);\n return true;\n };\n } else {\n MessageWriter.error(\n new Error(\n `[Virid UseController] Duplicate ID: Controller ${id} already exists`,\n ),\n );\n return () => false;\n }\n }\n static get(id: string): any {\n //如果找不见,直接报错\n if (!this.globalRegistry.has(id)) {\n MessageWriter.error(\n new Error(\n `[Virid UseController] ID Not Found: No Controller found with ID: ${id}`,\n ),\n );\n return null;\n }\n return this.globalRegistry.get(id);\n }\n}\n/**\n * @Project 连接component,只读一个component的值\n */\nexport function bindProject(proto: any, instance: any) {\n const projects: ProjectMetadata = Reflect.getMetadata(\n VIRID_VUE_METADATA.PROJECT,\n proto,\n );\n\n projects?.forEach((config) => {\n const { key, isAccessor, type, componentClass, source } = config;\n let project: WritableComputedRef<any, any>;\n\n // 统一报错 Setter\n const readOnlySetter = (_val: any) => {\n MessageWriter.error(\n new Error(\n `[Virid Project] Read-only: Property \"${key}\" in \"${instance.constructor.name}\" is a protected projection.\\n`,\n ),\n );\n };\n\n // 手写 Accessor\n if (isAccessor) {\n if (type === \"component\") {\n MessageWriter.error(\n new Error(\n `[Virid Project] Architecture Violation: Manual get/set is forbidden on ${componentClass} projection \"${key}\". Please use functional source.`,\n ),\n );\n return;\n }\n\n // 只有非 component 类型才走到这里,支持读写\n const rawDescriptor = Object.getOwnPropertyDescriptor(proto, key);\n project = computed({\n get: () => rawDescriptor?.get?.call(instance),\n set: (val) => {\n if (rawDescriptor?.set) {\n rawDescriptor.set.call(instance, val);\n } else {\n readOnlySetter(val);\n }\n },\n });\n }\n //函数式投影\n else {\n project = computed({\n get: () => {\n const isFromComponent = type === \"component\";\n const target = isFromComponent\n ? viridApp.get(componentClass)\n : instance;\n const val = source(target);\n\n // 来自 component 的数据套盾\n if (isFromComponent) {\n return createBorrowChecker(val, componentClass!.name, key);\n }\n\n // 来自自己的投影,直接返回\n return val;\n },\n set: readOnlySetter,\n });\n }\n\n const currentDescriptor = Object.getOwnPropertyDescriptor(instance, key);\n if (currentDescriptor && currentDescriptor.configurable === false) return;\n\n Object.defineProperty(instance, key, {\n get: () => project.value,\n set: (val) => (project.value = val),\n enumerable: true,\n configurable: true,\n });\n });\n}\n/**\n * @Watch 自动把函数变成watch\n */\n\nexport function bindWatch(proto: any, instance: any) {\n const watches: WatchMetadata =\n Reflect.getMetadata(VIRID_VUE_METADATA.WATCH, proto) || [];\n const stops: WatchStopHandle[] = [];\n\n watches.forEach((config) => {\n const { type, source, methodName, options, componentClass } = config;\n\n // 获取目标实例\n const target =\n type === \"component\" ? viridApp.get(componentClass) : instance;\n // 确保目标实例已经过响应式处理\n if (target && !target.__ccs_processed__) {\n bindResponsive(target);\n }\n // 封装 getter\n const getter = () => {\n try {\n return source(target);\n } catch (e) {\n MessageWriter.error(\n e as Error,\n `[Virid Watch] Getter error in ${methodName}`,\n );\n return undefined;\n }\n };\n // 使用 bind 确保回调函数内部的 this 指向当前的 Controller/Instance\n const callback = (instance[methodName] as any).bind(instance);\n // 执行监听\n const stop = watch(\n getter,\n (newVal, oldVal) => {\n callback(newVal, oldVal);\n },\n {\n ...options,\n },\n );\n stops.push(stop);\n });\n\n return stops;\n}\n\n/**\n * @Responsive 递归处理,支持在 Observer 基础上套娃\n */\nexport function bindResponsive(instance: any) {\n if (!instance || typeof instance !== \"object\") return instance;\n if (instance.__virid_responsive_processed__) return instance;\n\n Object.defineProperty(instance, \"__virid_responsive_processed__\", {\n value: true,\n enumerable: false,\n });\n\n const props: ResponsiveMetadata =\n Reflect.getMetadata(VIRID_VUE_METADATA.RESPONSIVE, instance) || [];\n\n props.forEach((config) => {\n const key = config.key;\n const descriptor = Object.getOwnPropertyDescriptor(instance, key);\n\n // 【关键逻辑】检查是否已经被 bindObservers 劫持过\n const existingBox = (descriptor?.get as any)?.__virid_box__;\n\n // 在 bindResponsive 内部\n if (existingBox) {\n const rawValue = existingBox.value;\n const vRef = config.shallow ? shallowRef(rawValue) : ref(rawValue);\n\n Object.defineProperty(existingBox, \"value\", {\n get: () => vRef.value,\n set: (val) => {\n vRef.value = val;\n },\n enumerable: true,\n configurable: true,\n });\n } else {\n // 普通属性,按照原逻辑处理\n if (descriptor && descriptor.get) return;\n\n const rawValue = instance[key];\n const internalState = config.shallow\n ? shallowRef(rawValue)\n : ref(rawValue);\n\n Object.defineProperty(instance, key, {\n get: () => internalState.value,\n set: (val) => {\n internalState.value = val;\n },\n enumerable: true,\n configurable: true,\n });\n }\n });\n\n // 递归处理子对象\n Reflect.ownKeys(instance).forEach((key) => {\n if (key === \"__virid_responsive_processed__\") return;\n const val = instance[key];\n if (val && typeof val === \"object\") {\n bindResponsive(val);\n }\n });\n return instance;\n}\n\n/**\n * 解析 @OnHook 并将其绑定到 Vue 生命周期\n */\nexport function bindHooks(proto: any, instance: any) {\n const hooks: OnHookMetadata = Reflect.getMetadata(\n VIRID_VUE_METADATA.LIFE_CIRCLE,\n proto,\n );\n\n hooks?.forEach((config) => {\n const { hookName, methodName } = config;\n const fn = instance[methodName].bind(instance);\n\n switch (hookName) {\n case \"onMounted\":\n onMounted(fn);\n break;\n case \"onUnmounted\":\n onUnmounted(fn);\n break;\n case \"onUpdated\":\n onUpdated(fn);\n break;\n case \"onActivated\":\n onActivated(fn);\n break;\n case \"onDeactivated\":\n onDeactivated(fn);\n break;\n case \"onSetup\":\n fn();\n break;\n // 可以根据需要扩展更多的钩子\n }\n });\n}\n\n/**\n * 执行并绑定万能 Hooks\n */\nexport function bindUseHooks(proto: any, instance: any) {\n const hooks: UseMetadata = Reflect.getMetadata(\n VIRID_VUE_METADATA.HOOK,\n proto,\n );\n\n hooks?.forEach((config) => {\n // 在 useController 运行期间执行 hookFactory()\n const hookResult = config.hookFactory();\n // 直接赋值给实例\n instance[config.key] = hookResult;\n });\n}\n\n/**\n * @description: 启动@Listener 为 Controller 实例绑定监听器并返回销毁函数列表\n **/\nexport function bindListener(proto: any, instance: any): (() => void)[] {\n const listenerConfigs: ListenerMetadata =\n Reflect.getMetadata(VIRID_VUE_METADATA.LISTENER, proto) || [];\n const unbindFunctions: (() => void)[] = [];\n\n listenerConfigs.forEach(({ key, messageClass, priority, batchMode }) => {\n const originalMethod = instance[key];\n\n // 给包装后的函数挂载上下文信息\n const listenerContext: SystemContext = {\n params: [messageClass],\n targetClass: instance.constructor,\n methodName: key,\n originalMethod: originalMethod,\n };\n\n const listenerConfig: SystemConfig = {\n messageClass: messageClass,\n messageIdx: 0,\n batchMode: batchMode,\n priority: priority,\n };\n (instance[key] as any).systemContext = listenerContext;\n (instance[key] as any).systemConfig = listenerConfig;\n\n const unregister = viridApp.register(instance[key]);\n unbindFunctions.push(unregister);\n });\n\n return unbindFunctions;\n}\n\n/**\n * @description: 启动@Inherit 使能够只读其他的controller\n **/\nexport function bindInherit(proto: any, instance: any) {\n const inherits: InheritMetadata = Reflect.getMetadata(\n VIRID_VUE_METADATA.INHERIT,\n proto,\n );\n if (!inherits) return;\n\n inherits.forEach(({ key, id, selector }) => {\n // 为每个继承属性创建一个私有的 computed 引用\n // 这个 computed 就像一个隧道,一头连着 Registry,一头连着子组件\n const tunnel = computed(() => {\n const target = GlobalRegistry.get(id); // 自动依赖 Registry 的增删\n if (!target) {\n MessageWriter.warn(\n `[Virid Inherit] Warning: Inherit target not found: ${id}`,\n );\n return null;\n }\n // 这里的 selector(target) 也会触发依赖收集\n // 如果 target.state.count 变了,这个 computed 也会感知到\n return selector ? selector(target) : target;\n });\n\n Object.defineProperty(instance, key, {\n get: () => {\n const val = tunnel.value; // 访问 computed.value\n // 返回时依然套上护盾,确保“弱引用”也是“只读引用”\n return val ? createBorrowChecker(val, key, \"\") : null;\n },\n set: () => {\n MessageWriter.error(\n new Error(\n `[Virid Inherit] No Modification: Attempted to set read-only Inherit property: ${key}`,\n ),\n );\n },\n enumerable: true,\n configurable: true,\n });\n });\n}\n\n/**\nu* @description: 把槽或者其他乱七八糟的东西传递过来的上下文注入到controller里\n * @param {*} context 上下文对象\n * @param {*} instance controller实例\n */\nexport function bindEnv(proto: any, instance: any, context: any) {\n const envs: EnvMetadata = Reflect.getMetadata(VIRID_VUE_METADATA.ENV, proto);\n if (!envs) return;\n console.log(\"envs:\", envs);\n console.log(\"context:\", context);\n \n envs.forEach(({ key }) => {\n if (key in context === false) {\n MessageWriter.warn(\n `[Virid Context] Env Not Found: The \"${key}\" is not defined in the context.`,\n );\n return;\n }\n Object.defineProperty(instance, key, {\n get: () => context[key],\n set: (val) => {\n if (context[key] === val) return;\n try {\n context[key] = val;\n } catch (e) {\n MessageWriter.error(\n e as Error,\n `[Virid Context] Set Failed:\\n \"${key}\" is only readable.`,\n );\n }\n },\n enumerable: true,\n configurable: true,\n });\n });\n}\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Vue\n */\nimport { type ViridApp, Newable } from \"@virid/core\";\nimport { bindResponsive } from \"./adapters/bind\";\nexport interface IViridApp {\n register(systemFn: (...args: any[]) => any): () => void;\n get(identifier: any): any;\n bind<T>(identifier: Newable<T>): void;\n}\n\nlet activeApp: IViridApp | null = null;\n\nexport function activateApp(app: ViridApp) {\n const bindResponsiveHook = (instance: any) => {\n if (instance) {\n bindResponsive(instance);\n }\n return instance;\n };\n app.onActivate(bindResponsiveHook);\n activeApp = app;\n}\n\nexport const viridApp: IViridApp = new Proxy({} as IViridApp, {\n get(_, prop: keyof IViridApp) {\n return (...args: any[]) => {\n if (!activeApp) {\n console.warn(\n `[Virid Vue] App method \"${String(prop)}\" called before initialization.`,\n );\n\n if (prop === \"register\") {\n return () => {\n console.warn(\n \"[Virid Vue] Cleanup ignored: source listener was never registered.\",\n );\n };\n }\n return undefined;\n }\n const targetMethod = activeApp[prop];\n if (typeof targetMethod === \"function\") {\n return Reflect.apply(targetMethod, activeApp, args);\n }\n };\n },\n});\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Vue\n */\nimport { MessageWriter } from \"@virid/core\";\nimport { VIRID_VUE_METADATA } from \"../decorators/constant\";\n\nlet isBorrowCheckerEnabled = true;\nexport function disableBorrowChecker() {\n isBorrowCheckerEnabled = false;\n}\n\nconst borrowCache = new WeakMap<any, any>();\n\n/**\n * Recursive borrowing check proxy: Make the object and all its descendants hard read-only\n */\nexport function createBorrowChecker(\n target: any,\n rootName: string,\n path: string = \"\",\n): any {\n if (\n !isBorrowCheckerEnabled ||\n target === null ||\n (typeof target !== \"object\" && typeof target !== \"function\")\n ) {\n return target;\n }\n if (borrowCache.has(target)) {\n return borrowCache.get(target);\n }\n\n const proxy = new Proxy(target, {\n get(obj, prop, receiver) {\n const value = Reflect.get(obj, prop, receiver);\n const currentPath = path ? `${path}.${String(prop)}` : String(prop);\n if (typeof value === \"function\") {\n return (...args: any[]) => {\n if (!isShieldException(obj, prop)) {\n const errorMsg = [\n `[Virid Shield] Rejected`,\n `Method: ${rootName}....${currentPath}()`,\n `Reason: Unauthorized access to unsafe method.`,\n ].join(\"\\n\");\n MessageWriter.error(new Error(errorMsg));\n return null;\n }\n\n const result = value.apply(obj, args);\n return createBorrowChecker(result, rootName, `${currentPath}()`);\n };\n }\n return createBorrowChecker(value, rootName, currentPath);\n },\n\n set(_obj, prop) {\n const currentPath = path ? `${path}.${String(prop)}` : String(prop);\n\n // Elegantly fail and provide repair suggestions\n const errorMsg = [\n `[Virid Borrow Checker]`,\n `------------------------------------------------`,\n `Component: ${rootName}`,\n `Code: ${rootName}....${currentPath}`,\n `Result: Rejected`,\n `Reason: This object is write protected and cannot be modified.`,\n `Stack: ${new Error().stack}`,\n `------------------------------------------------`,\n ].join(\"\\n\");\n MessageWriter.error(new Error(errorMsg));\n return false;\n },\n deleteProperty(_obj, prop) {\n MessageWriter.error(\n new Error(\n `[Virid Shield] Physical Protection:\\nProhibit Deletion of Component Attributes ${String(prop)}`,\n ),\n );\n return false;\n },\n defineProperty() {\n MessageWriter.error(\n new Error(\n `[Virid Shield] Physical Protection:\\nProhibit redefining component attribute structure`,\n ),\n );\n return false;\n },\n });\n borrowCache.set(target, proxy);\n return proxy;\n}\n/**\n * Determine whether a method should skip shield interception\n */\nfunction isShieldException(obj: any, prop: string | symbol): boolean {\n const PROTOCOL_WHITELIST = new Set<string | symbol>([\n Symbol.iterator,\n Symbol.asyncIterator,\n Symbol.toStringTag,\n \"toString\",\n \"valueOf\",\n \"toJSON\",\n \"constructor\",\n ]);\n if (PROTOCOL_WHITELIST.has(prop)) return true;\n\n const constructorName = obj.constructor?.name;\n\n const READONLY_COLLECTIONS: Record<string, Set<string | symbol>> = {\n Map: new Set([\n \"get\",\n \"has\",\n \"keys\",\n \"values\",\n \"entries\",\n \"forEach\",\n \"size\",\n ]),\n Set: new Set([\"has\", \"keys\", \"values\", \"entries\", \"forEach\", \"size\"]),\n Array: new Set([\n \"length\",\n \"map\",\n \"filter\",\n \"reduce\",\n \"slice\",\n \"find\",\n \"includes\",\n \"findIndex\",\n \"every\",\n \"some\",\n \"at\",\n \"join\",\n \"concat\",\n \"flat\",\n \"flatMap\",\n \"indexOf\",\n \"lastIndexOf\",\n ]),\n String: new Set([\n \"length\",\n \"slice\",\n \"substring\",\n \"substr\",\n \"split\",\n \"includes\",\n \"startsWith\",\n \"endsWith\",\n \"indexOf\",\n \"replace\",\n \"replaceAll\",\n \"trim\",\n \"toLowerCase\",\n \"toUpperCase\",\n ]),\n };\n\n if (READONLY_COLLECTIONS[constructorName]?.has(prop)) return true;\n\n const safeMethods = Reflect.getMetadata(VIRID_VUE_METADATA.SAFE, obj);\n if (safeMethods instanceof Set && safeMethods.has(prop)) return true;\n\n return false;\n}\n","/*\n * Copyright (c) 2026-present Ailrid.\n * Licensed under the Apache License, Version 2.0.\n * Project: Virid Vue\n */\nimport {\n bindProject,\n bindWatch,\n bindHooks,\n bindUseHooks,\n bindListener,\n GlobalRegistry,\n bindInherit,\n bindEnv,\n} from \"./bind\";\nimport { onUnmounted, useAttrs } from \"vue\";\nimport { VIRID_VUE_METADATA } from \"../decorators/constant\";\nimport { MessageWriter, Newable } from \"@virid/core\";\nimport { viridApp } from \"../app\";\n/**\n * @description: vue的hooks适配器,注入IOC容器中的Controller实例,并挂在vue的各种方法\n * @param token\n */\nexport function useController<T>(\n token: Newable<T>,\n options?: { id?: string; context?: object },\n): T {\n const instance = viridApp.get(token) as any;\n\n // 检查身份 Controller\n const isController = Reflect.hasMetadata(\n VIRID_VUE_METADATA.CONTROLLER,\n token,\n );\n if (!isController) {\n // 确保非 Controller 的实例不能被其他 Controller 访问\n MessageWriter.error(\n new Error(\n `[Virid Controller] ${token.name} is not a Controller.Use @Controller to inject it.`,\n ),\n );\n return null as T;\n }\n\n //绑定各种魔法装饰器\n const proto = Object.getPrototypeOf(instance);\n //注入vue的乱七八糟的context\n const reactiveContext = options?.context || useAttrs();\n if (reactiveContext) {\n bindEnv(proto, instance, reactiveContext);\n }\n // @Use装饰器\n bindUseHooks(proto, instance);\n // @Inherit装饰器\n bindInherit(proto, instance);\n // @Project装饰器\n bindProject(proto, instance);\n // @Listener装饰器\n // 运行时动态挂载监听器\n const unbindList = bindListener(proto, instance);\n // 生命周期钩子\n bindHooks(proto, instance);\n //绑定全局注册表\n // @Watch装饰器\n const stops = bindWatch(proto, instance);\n //如果有id,就去注册\n let unbindRegister = () => true;\n if (options?.id) {\n unbindRegister = GlobalRegistry.set(options.id, instance);\n }\n onUnmounted(() => {\n stops.forEach((stop) => stop());\n unbindList.forEach((stop) => stop());\n unbindRegister();\n // 自动卸载信号处理器,防止 Controller 销毁后残留\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 Vue\n */\nimport { VIRID_VUE_METADATA } from \"./constant\";\nimport type { WatchOptions } from \"vue\";\nimport {\n MessageWriter,\n type Newable,\n BaseMessage,\n SingleMessage,\n} from \"@virid/core\";\nimport {\n type WatchMetadata,\n type ProjectMetadata,\n type InheritMetadata,\n type UseMetadata,\n type ResponsiveMetadata,\n type OnHookMetadata,\n type ListenerMetadata,\n type ListenerConfig,\n EnvMetadata,\n} from \"../interfaces\";\n\n/**\n * Overload 1: Monitor Controller's own variables\n * @param source Watching closure functions\n * @param options Watch options\n */\nexport function Watch<T>(\n source: (instance: T) => any | Promise<any>,\n options?: WatchOptions,\n): any;\n\n/**\n * Overload 2: Monitor Component's variables\n * @param componentClass Component class\n * @param source Watching closure functions\n * @param options Watch options\n */\n\nexport function Watch<C>(\n component: Newable<C>,\n source: (comp: C) => any | Promise<any>,\n options?: WatchOptions,\n): any;\n\nexport function Watch(arg1: any, arg2?: any, arg3?: any) {\n return (target: any, methodName: string) => {\n const existing: WatchMetadata =\n Reflect.getMetadata(VIRID_VUE_METADATA.WATCH, target) || [];\n\n if (typeof arg2 === \"function\") {\n // Watch(Component, (c) => c.prop, options)\n existing.push({\n type: \"component\",\n componentClass: arg1,\n source: arg2,\n options: arg3,\n methodName,\n });\n } else {\n // Watch((i) => i.prop, options)\n existing.push({\n type: \"local\",\n componentClass: null,\n source: arg1,\n options: arg2,\n methodName,\n });\n }\n\n Reflect.defineMetadata(VIRID_VUE_METADATA.WATCH, existing, target);\n };\n}\n\n/**\n * Overload 1: Internal Projection\n * @param source Projection closure functions\n */\n\nexport function Project<T>(source: (instance: T) => any): any;\n\n/**\n * Overload 1: Component Projection\n * @param source Projection closure functions\n */\nexport function Project<C>(\n component: new (...args: any[]) => C,\n source: (comp: C) => any,\n): any;\n// Overload 3: Internal get set projection @Project() Public get name() {}\nexport function Project<T>(): any;\n\nexport function Project(arg1?: any, arg2?: any) {\n return (target: any, key: string, descriptor?: PropertyDescriptor) => {\n const existing: ProjectMetadata =\n Reflect.getMetadata(VIRID_VUE_METADATA.PROJECT, target) || [];\n const isAccessor = !!(descriptor?.get || descriptor?.set);\n if (!arg1 && !arg2 && !isAccessor) {\n MessageWriter.error(\n new Error(\n `[Virid Project] Invalid Usage: @Project() can only be used on getter or setter.`,\n ),\n );\n return;\n }\n const metadata = {\n key,\n isAccessor: isAccessor,\n // 这里的逻辑和 Watch 保持高度一致\n type: typeof arg2 === \"function\" ? \"component\" : \"local\",\n componentClass: typeof arg2 === \"function\" ? arg1 : null,\n source: typeof arg2 === \"function\" ? arg2 : isAccessor ? null : arg1,\n } as const;\n\n existing.push(metadata);\n Reflect.defineMetadata(VIRID_VUE_METADATA.PROJECT, existing, target);\n };\n}\n/**\n * Add responsiveness to data\n */\nexport function Responsive(shallow = false) {\n return (target: any, key: string) => {\n // 记录哪些属性需要变成响应式\n const props: ResponsiveMetadata =\n Reflect.getMetadata(VIRID_VUE_METADATA.RESPONSIVE, target) || [];\n props.push({ key, shallow });\n Reflect.defineMetadata(VIRID_VUE_METADATA.RESPONSIVE, props, target);\n };\n}\n\n/**\n * Declarative lifecycle hook @OnHook(\"onMounted\")\n */\nexport function OnHook(\n hookName:\n | \"onMounted\"\n | \"onUnmounted\"\n | \"onUpdated\"\n | \"onActivated\"\n | \"onDeactivated\"\n | \"onSetup\",\n) {\n return (target: any, methodName: string) => {\n const existing: OnHookMetadata =\n Reflect.getMetadata(VIRID_VUE_METADATA.LIFE_CIRCLE, target) || [];\n existing.push({ hookName, methodName });\n Reflect.defineMetadata(VIRID_VUE_METADATA.LIFE_CIRCLE, existing, target);\n };\n}\n/**\n * Universal Hook Injection Decorator\n * Usage: @ Use()=>useRoute() Public route! : RouteLocationNormalized\n */\nexport function Use(hookFactory: () => any) {\n return (target: any, key: string) => {\n const existing: UseMetadata =\n Reflect.getMetadata(VIRID_VUE_METADATA.HOOK, target) || [];\n existing.push({ key, hookFactory });\n Reflect.defineMetadata(VIRID_VUE_METADATA.HOOK, existing, target);\n };\n}\n/**\n * Inherit injection decorator\n * Usage: @Inherit(Controller, (instance)=>instance. xxxx) public data! : SomeType\n */\nexport function Inherit<T>(\n token: Newable<T>,\n id: string,\n selector: (instance: T) => any,\n) {\n return (target: any, key: string) => {\n const metadata: InheritMetadata =\n Reflect.getMetadata(VIRID_VUE_METADATA.INHERIT, target) || [];\n metadata.push({ key, token, id, selector });\n Reflect.defineMetadata(VIRID_VUE_METADATA.INHERIT, metadata, target);\n };\n}\n\n/**\n * Marking an attribute as injected from the external environment (context)\n */\nexport function Env() {\n return (target: any, key: string) => {\n const metadata: EnvMetadata =\n Reflect.getMetadata(VIRID_VUE_METADATA.ENV, target) || [];\n metadata.push({ key });\n Reflect.defineMetadata(VIRID_VUE_METADATA.ENV, metadata, target);\n };\n}\n\n/**\n * Listener Decorator - Tag Controller's member methods as message listeners\n */\nexport function Listener(\n config: ListenerConfig = {\n messageClass: null,\n priority: 0,\n batchMode: false,\n },\n) {\n return (target: any, key: string, descriptor?: PropertyDescriptor) => {\n if (typeof target === \"function\") {\n throw new Error(\n `[Virid Listener] Method Type Error: The Method \"${key}\" is a static method. @Listener can only be used on instance member methods.`,\n );\n }\n\n // Get parameter type metadata\n const types: Array<any> =\n Reflect.getMetadata(\"design:paramtypes\", target, key) || [];\n\n // Verify if there are undefined parameters (to prevent circular references or incomplete imports)\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 Listener] Parameter Metadata Loss in \"${key}\": One or more parameters have 'undefined' types. Check indices: [${undefinedIndices.join(\", \")}]`,\n );\n }\n\n // The parameter must have only one\n if (types.length > 1) {\n throw new Error(\n `[Virid Listener] Multiple Parameters Not Allowed: Listener method \"${key}\" can have at most ONE parameter (BaseMessage subclass or Array).`,\n );\n }\n\n // Prepare variables for final storage in metadata\n let finalMessageClass = config.messageClass;\n let finalBatchMode = config.batchMode ?? false;\n\n // Split processing: 0 parameters vs 1 parameter\n if (types.length === 0) {\n // No parameters are allowed, but it must be written in messageClass\n if (!config.messageClass) {\n throw new Error(\n `[Virid Listener] Rule Violation in \"${key}\": When the method has no parameters, you MUST specify \"messageClass\" in the decorator options.`,\n );\n }\n } else {\n // There is only one parameter available\n const paramType = types[0];\n\n if (paramType === Array) {\n // If it is a list (Array), messageClass must be written\n if (!config.messageClass) {\n throw new Error(\n `[Virid Listener] Rule Violation in \"${key}\": When using batch processing mode with Array, the \"messageClass\" parameter must be specified in decorator options.`,\n );\n }\n // Batch, verify if it inherits from SingleMessage\n if (!(config.messageClass.prototype instanceof SingleMessage)) {\n throw new Error(\n `[Virid Listener] Type Mismatch in \"${key}\": Batch processing mode (Array) is only supported for subclasses of SingleMessage.`,\n );\n }\n finalBatchMode = true;\n } else if (\n paramType === BaseMessage ||\n (paramType && paramType.prototype instanceof BaseMessage)\n ) {\n // If it is a single BaseMessage, messageClass cannot be written\n if (config.messageClass) {\n throw new Error(\n `[Virid Listener] Rule Violation in \"${key}\": Cannot specify \"messageClass\" in decorator options when it is already declared as a method parameter.`,\n );\n }\n finalMessageClass = paramType;\n // If batchMode is not explicitly specified, batch mode will not be enabled by default for single messages\n finalBatchMode = config.batchMode ?? false;\n } else {\n // I have written parameters, but they are neither BaseMessage nor Array\n throw new Error(\n `[Virid Listener] Invalid Parameter in \"${key}\": The single parameter must be either a subclass of BaseMessage or an Array.`,\n );\n }\n }\n\n const listeners: ListenerMetadata =\n Reflect.getMetadata(VIRID_VUE_METADATA.LISTENER, target) || [];\n\n listeners.push({\n key,\n messageClass: finalMessageClass as any,\n priority: config.priority || 0,\n batchMode: finalBatchMode,\n });\n\n Reflect.defineMetadata(VIRID_VUE_METADATA.LISTENER, listeners, target);\n };\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: Vue adapter for virid, projecting logic sovereignty to reactive UI.\n */\nimport { ViridPlugin, type ViridApp } from \"@virid/core\";\nimport { type PluginOption } from \"./interfaces\";\nexport * from \"./adapters\";\nexport * from \"./decorators\";\nexport * from \"./interfaces\";\nimport { activateApp } from \"./app\";\nimport { disableBorrowChecker } from \"./adapters/borrow_checker\";\n\nexport class VuePlugin implements ViridPlugin<PluginOption> {\n name = \"@virid/vue\";\n install(app: ViridApp, options: PluginOption) {\n if (options.disableBorrowChecker) disableBorrowChecker();\n activateApp(app);\n }\n}\n"],"mappings":"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","names":["VIRID_METADATA","VIRID_VUE_METADATA","RESPONSIVE","LIFE_CIRCLE","HOOK","LISTENER","INHERIT","ATTR","PROJECT","WATCH","ENV","watch","computed","ref","shallowReactive","onMounted","onUnmounted","onUpdated","onActivated","onDeactivated","shallowRef","MessageWriter","activeApp","activateApp","app","bindResponsiveHook","__name","instance","bindResponsive","onActivate","viridApp","Proxy","get","_","prop","args","console","warn","String","targetMethod","Reflect","apply","MessageWriter","isBorrowCheckerEnabled","disableBorrowChecker","borrowCache","WeakMap","createBorrowChecker","target","rootName","path","has","get","proxy","Proxy","obj","prop","receiver","value","Reflect","currentPath","String","args","isShieldException","errorMsg","join","MessageWriter","error","Error","result","apply","set","_obj","stack","deleteProperty","defineProperty","Set","Symbol","iterator","asyncIterator","toStringTag","constructorName","name","Map","Array","safeMethods","getMetadata","VIRID_VUE_METADATA","SAFE","GlobalRegistry","set","id","instance","globalRegistry","has","MessageWriter","error","Error","delete","get","__publicField","shallowReactive","Map","_GlobalRegistry","bindProject","proto","Reflect","getMetadata","VIRID_VUE_METADATA","PROJECT","forEach","config","key","isAccessor","type","componentClass","source","project","readOnlySetter","__name","_val","name","rawDescriptor","Object","getOwnPropertyDescriptor","computed","call","val","isFromComponent","target","viridApp","createBorrowChecker","currentDescriptor","configurable","defineProperty","value","enumerable","bindWatch","watches","WATCH","stops","methodName","options","__ccs_processed__","bindResponsive","getter","e","callback","bind","stop","watch","newVal","oldVal","push","__virid_responsive_processed__","RESPONSIVE","descriptor","existingBox","__virid_box__","rawValue","vRef","shallow","shallowRef","ref","internalState","ownKeys","bindHooks","LIFE_CIRCLE","hookName","fn","onMounted","onUnmounted","onUpdated","onActivated","onDeactivated","bindUseHooks","HOOK","hookResult","hookFactory","bindListener","listenerConfigs","LISTENER","unbindFunctions","messageClass","priority","batchMode","originalMethod","listenerContext","params","targetClass","listenerConfig","messageIdx","systemContext","systemConfig","unregister","register","bindInherit","inherits","INHERIT","selector","tunnel","warn","bindEnv","context","envs","ENV","console","log","onUnmounted","useAttrs","MessageWriter","useController","token","options","instance","viridApp","get","Reflect","hasMetadata","VIRID_VUE_METADATA","CONTROLLER","MessageWriter","error","Error","name","proto","Object","getPrototypeOf","reactiveContext","context","useAttrs","bindEnv","bindUseHooks","bindInherit","bindProject","unbindList","bindListener","bindHooks","stops","bindWatch","unbindRegister","__name","id","GlobalRegistry","set","onUnmounted","forEach","stop","MessageWriter","BaseMessage","SingleMessage","Watch","arg1","arg2","arg3","target","methodName","existing","Reflect","getMetadata","VIRID_VUE_METADATA","WATCH","push","type","componentClass","source","options","defineMetadata","Project","key","descriptor","PROJECT","isAccessor","get","set","MessageWriter","error","Error","metadata","Responsive","shallow","props","RESPONSIVE","OnHook","hookName","LIFE_CIRCLE","Use","hookFactory","HOOK","Inherit","token","id","selector","INHERIT","Env","ENV","Listener","config","messageClass","priority","batchMode","types","undefinedIndices","map","t","i","undefined","filter","length","join","finalMessageClass","finalBatchMode","paramType","Array","prototype","SingleMessage","BaseMessage","listeners","LISTENER","VuePlugin","name","install","app","options","disableBorrowChecker","activateApp","_VuePlugin"]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@virid/vue",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.3.
|
|
4
|
+
"version": "0.3.11",
|
|
5
5
|
"description": "Vue adapter for virid, projecting logic sovereignty to reactive UI",
|
|
6
6
|
"author": "Ailrid",
|
|
7
7
|
"license": "Apache 2.0",
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"dependencies": {},
|
|
37
37
|
"peerDependencies": {
|
|
38
38
|
"vue": ">=3.4.0",
|
|
39
|
-
"@virid/core": "0.3.
|
|
39
|
+
"@virid/core": "0.3.11"
|
|
40
40
|
},
|
|
41
41
|
"scripts": {
|
|
42
42
|
"build": "tsup --config tsup.config.ts",
|