@variojs/vue 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/README.md +916 -0
  2. package/dist/bindings.d.ts +48 -0
  3. package/dist/bindings.d.ts.map +1 -0
  4. package/dist/bindings.js +199 -0
  5. package/dist/bindings.js.map +1 -0
  6. package/dist/composable.d.ts +84 -0
  7. package/dist/composable.d.ts.map +1 -0
  8. package/dist/composable.js +386 -0
  9. package/dist/composable.js.map +1 -0
  10. package/dist/features/attrs-builder.d.ts +38 -0
  11. package/dist/features/attrs-builder.d.ts.map +1 -0
  12. package/dist/features/attrs-builder.js +143 -0
  13. package/dist/features/attrs-builder.js.map +1 -0
  14. package/dist/features/children-resolver.d.ts +36 -0
  15. package/dist/features/children-resolver.d.ts.map +1 -0
  16. package/dist/features/children-resolver.js +171 -0
  17. package/dist/features/children-resolver.js.map +1 -0
  18. package/dist/features/component-resolver.d.ts +31 -0
  19. package/dist/features/component-resolver.d.ts.map +1 -0
  20. package/dist/features/component-resolver.js +110 -0
  21. package/dist/features/component-resolver.js.map +1 -0
  22. package/dist/features/computed.d.ts +35 -0
  23. package/dist/features/computed.d.ts.map +1 -0
  24. package/dist/features/computed.js +161 -0
  25. package/dist/features/computed.js.map +1 -0
  26. package/dist/features/event-handler.d.ts +34 -0
  27. package/dist/features/event-handler.d.ts.map +1 -0
  28. package/dist/features/event-handler.js +103 -0
  29. package/dist/features/event-handler.js.map +1 -0
  30. package/dist/features/expression-evaluator.d.ts +18 -0
  31. package/dist/features/expression-evaluator.d.ts.map +1 -0
  32. package/dist/features/expression-evaluator.js +28 -0
  33. package/dist/features/expression-evaluator.js.map +1 -0
  34. package/dist/features/lifecycle-wrapper.d.ts +19 -0
  35. package/dist/features/lifecycle-wrapper.d.ts.map +1 -0
  36. package/dist/features/lifecycle-wrapper.js +102 -0
  37. package/dist/features/lifecycle-wrapper.js.map +1 -0
  38. package/dist/features/loop-handler.d.ts +38 -0
  39. package/dist/features/loop-handler.d.ts.map +1 -0
  40. package/dist/features/loop-handler.js +168 -0
  41. package/dist/features/loop-handler.js.map +1 -0
  42. package/dist/features/path-resolver.d.ts +50 -0
  43. package/dist/features/path-resolver.d.ts.map +1 -0
  44. package/dist/features/path-resolver.js +171 -0
  45. package/dist/features/path-resolver.js.map +1 -0
  46. package/dist/features/provide-inject.d.ts +38 -0
  47. package/dist/features/provide-inject.d.ts.map +1 -0
  48. package/dist/features/provide-inject.js +139 -0
  49. package/dist/features/provide-inject.js.map +1 -0
  50. package/dist/features/refs.d.ts +45 -0
  51. package/dist/features/refs.d.ts.map +1 -0
  52. package/dist/features/refs.js +113 -0
  53. package/dist/features/refs.js.map +1 -0
  54. package/dist/features/teleport.d.ts +23 -0
  55. package/dist/features/teleport.d.ts.map +1 -0
  56. package/dist/features/teleport.js +32 -0
  57. package/dist/features/teleport.js.map +1 -0
  58. package/dist/features/validators.d.ts +43 -0
  59. package/dist/features/validators.d.ts.map +1 -0
  60. package/dist/features/validators.js +297 -0
  61. package/dist/features/validators.js.map +1 -0
  62. package/dist/features/watch.d.ts +26 -0
  63. package/dist/features/watch.d.ts.map +1 -0
  64. package/dist/features/watch.js +154 -0
  65. package/dist/features/watch.js.map +1 -0
  66. package/dist/index.d.ts +24 -0
  67. package/dist/index.d.ts.map +1 -0
  68. package/dist/index.js +24 -0
  69. package/dist/index.js.map +1 -0
  70. package/dist/renderer.d.ts +72 -0
  71. package/dist/renderer.d.ts.map +1 -0
  72. package/dist/renderer.js +244 -0
  73. package/dist/renderer.js.map +1 -0
  74. package/dist/types.d.ts +128 -0
  75. package/dist/types.d.ts.map +1 -0
  76. package/dist/types.js +16 -0
  77. package/dist/types.js.map +1 -0
  78. package/package.json +41 -0
@@ -0,0 +1,171 @@
1
+ /**
2
+ * 子节点处理模块
3
+ *
4
+ * 负责解析 Schema 的子节点,包括作用域插槽和文本内容
5
+ */
6
+ /**
7
+ * 子节点解析器
8
+ */
9
+ export class ChildrenResolver {
10
+ createVNode;
11
+ expressionEvaluator;
12
+ constructor(createVNode, expressionEvaluator) {
13
+ this.createVNode = createVNode;
14
+ this.expressionEvaluator = expressionEvaluator;
15
+ }
16
+ /**
17
+ * 解析子节点
18
+ * 支持插槽(template 节点)和作用域插槽
19
+ */
20
+ resolveChildren(schema, ctx, modelPathStack = []) {
21
+ const children = schema.children;
22
+ if (!children) {
23
+ return null;
24
+ }
25
+ // 字符串子节点(支持表达式插值)
26
+ if (typeof children === 'string') {
27
+ return this.resolveTextContent(children, ctx);
28
+ }
29
+ // 检查是否有插槽(template 节点带 slot 属性)
30
+ const hasSlots = children.some((child) => child.type === 'template' && child.slot);
31
+ if (hasSlots) {
32
+ // 处理插槽(包括作用域插槽和普通插槽)
33
+ return this.resolveSlots(children, ctx, modelPathStack);
34
+ }
35
+ // 数组子节点 - 过滤掉 null/undefined,确保返回有效的 VNode 数组
36
+ const vnodes = children
37
+ .map((child) => {
38
+ try {
39
+ return this.createVNode(child, ctx, modelPathStack);
40
+ }
41
+ catch (error) {
42
+ return null;
43
+ }
44
+ })
45
+ .filter((vnode) => vnode !== null && vnode !== undefined);
46
+ // 如果所有子节点都无效,返回 null
47
+ return vnodes.length > 0 ? vnodes : null;
48
+ }
49
+ /**
50
+ * 解析插槽(包括作用域插槽和普通插槽)
51
+ * 将 template 节点转换为 Vue 3 的插槽函数
52
+ */
53
+ resolveSlots(children, ctx, modelPathStack = []) {
54
+ const slots = {};
55
+ const regularChildren = [];
56
+ children.forEach((child) => {
57
+ if (child.type === 'template' && child.slot) {
58
+ const template = child;
59
+ const slotName = template.slot;
60
+ const scopeVarName = template.props?.scope;
61
+ const isScoped = !!scopeVarName;
62
+ // 创建插槽函数
63
+ slots[slotName] = (scope) => {
64
+ // 创建上下文:作用域插槽需要添加 scope 变量
65
+ let slotCtx = ctx;
66
+ if (isScoped && scope !== undefined) {
67
+ slotCtx = Object.create(ctx);
68
+ slotCtx[scopeVarName] = scope;
69
+ }
70
+ // 解析子节点
71
+ if (typeof template.children === 'string') {
72
+ return this.resolveTextContent(template.children, slotCtx);
73
+ }
74
+ else if (Array.isArray(template.children)) {
75
+ return template.children
76
+ .map((c) => {
77
+ try {
78
+ return this.createVNode(c, slotCtx, modelPathStack);
79
+ }
80
+ catch (error) {
81
+ return null;
82
+ }
83
+ })
84
+ .filter((v) => v !== null && v !== undefined);
85
+ }
86
+ return null;
87
+ };
88
+ }
89
+ else {
90
+ // 非 template 节点,收集到 regularChildren
91
+ try {
92
+ const vnode = this.createVNode(child, ctx, modelPathStack);
93
+ if (vnode) {
94
+ regularChildren.push(vnode);
95
+ }
96
+ }
97
+ catch (error) {
98
+ // 忽略错误
99
+ }
100
+ }
101
+ });
102
+ // 如果有普通子节点,添加到 default 插槽
103
+ if (regularChildren.length > 0) {
104
+ if (!slots.default) {
105
+ slots.default = () => regularChildren;
106
+ }
107
+ else {
108
+ const existingDefault = slots.default;
109
+ slots.default = (scope) => {
110
+ const scoped = existingDefault(scope);
111
+ return Array.isArray(scoped) ? [...scoped, ...regularChildren] : regularChildren;
112
+ };
113
+ }
114
+ }
115
+ return slots;
116
+ }
117
+ /**
118
+ * 解析文本内容(支持表达式插值)
119
+ */
120
+ resolveTextContent(text, ctx) {
121
+ // 匹配 {{ expression }} 模式
122
+ const exprPattern = /\{\{\s*([^}]+)\s*\}\}/g;
123
+ return text.replace(exprPattern, (match, expr) => {
124
+ try {
125
+ const trimmedExpr = expr.trim();
126
+ const value = this.expressionEvaluator.evaluateExpr(trimmedExpr, ctx);
127
+ return value != null ? String(value) : '';
128
+ }
129
+ catch (error) {
130
+ console.warn('[Expression Error]', expr, error);
131
+ return match;
132
+ }
133
+ });
134
+ }
135
+ /**
136
+ * 求值 props(支持表达式插值)
137
+ */
138
+ evalProps(props, ctx) {
139
+ const result = {};
140
+ Object.entries(props).forEach(([key, value]) => {
141
+ if (typeof value === 'string') {
142
+ // 检查是否为表达式插值
143
+ if (value.startsWith('{{') && value.endsWith('}}')) {
144
+ const expr = value.slice(2, -2).trim();
145
+ result[key] = this.expressionEvaluator.evaluateExpr(expr, ctx);
146
+ }
147
+ else {
148
+ // 普通字符串,检查是否包含表达式插值
149
+ result[key] = this.resolveTextContent(value, ctx);
150
+ }
151
+ }
152
+ else if (typeof value === 'object' && value !== null) {
153
+ // 嵌套对象(递归处理)
154
+ if (Array.isArray(value)) {
155
+ result[key] = value.map((item) => typeof item === 'string'
156
+ ? this.resolveTextContent(item, ctx)
157
+ : this.evalProps(item, ctx));
158
+ }
159
+ else {
160
+ result[key] = this.evalProps(value, ctx);
161
+ }
162
+ }
163
+ else {
164
+ // 静态值
165
+ result[key] = value;
166
+ }
167
+ });
168
+ return result;
169
+ }
170
+ }
171
+ //# sourceMappingURL=children-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"children-resolver.js","sourceRoot":"","sources":["../../src/features/children-resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * 组件解析模块
3
+ *
4
+ * 负责解析 Schema 中的组件类型,支持原生 DOM 元素和全局注册的组件
5
+ */
6
+ /**
7
+ * 组件解析器
8
+ */
9
+ export declare class ComponentResolver {
10
+ private componentCache;
11
+ private globalComponents;
12
+ constructor(globalComponents?: Record<string, any> | null);
13
+ /**
14
+ * 解析组件
15
+ * 自动解析全局注册的组件(通过 app.component() 注册的所有组件)
16
+ * 不针对任何特定的组件库,完全依赖 Vue 的全局组件注册机制
17
+ *
18
+ * 使用缓存提升性能
19
+ */
20
+ resolveComponent(type: string): any;
21
+ /**
22
+ * 清除组件解析缓存
23
+ * 用于组件注册变更后的缓存失效
24
+ */
25
+ clearComponentCache(): void;
26
+ /**
27
+ * 使特定组件的缓存失效
28
+ */
29
+ invalidateComponentCache(type: string): void;
30
+ }
31
+ //# sourceMappingURL=component-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"component-resolver.d.ts","sourceRoot":"","sources":["../../src/features/component-resolver.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAwCH;;GAEG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,cAAc,CAAyB;IAC/C,OAAO,CAAC,gBAAgB,CAAmC;gBAE/C,gBAAgB,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAW;IAI/D;;;;;;OAMG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG;IAwCnC;;;OAGG;IACH,mBAAmB,IAAI,IAAI;IAI3B;;OAEG;IACH,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;CAG7C"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * 组件解析模块
3
+ *
4
+ * 负责解析 Schema 中的组件类型,支持原生 DOM 元素和全局注册的组件
5
+ */
6
+ import { markRaw } from 'vue';
7
+ /**
8
+ * 原生 HTML DOM 元素列表
9
+ * 用于快速判断是否为原生元素,避免不必要的组件解析
10
+ */
11
+ const NATIVE_DOM_ELEMENTS = new Set([
12
+ // 文档结构
13
+ 'html', 'head', 'body', 'div', 'span', 'p', 'section', 'article', 'aside', 'nav', 'header', 'footer', 'main',
14
+ // 文本内容
15
+ 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'p', 'blockquote', 'pre', 'code', 'em', 'strong', 'small', 'sub', 'sup',
16
+ 'mark', 'del', 'ins', 'abbr', 'dfn', 'cite', 'q', 'samp', 'kbd', 'var', 'time', 'b', 'i', 'u', 's', 'wbr',
17
+ // 列表
18
+ 'ul', 'ol', 'li', 'dl', 'dt', 'dd',
19
+ // 表格
20
+ 'table', 'thead', 'tbody', 'tfoot', 'tr', 'th', 'td', 'caption', 'colgroup', 'col',
21
+ // 表单
22
+ 'form', 'input', 'textarea', 'select', 'option', 'optgroup', 'button', 'label', 'fieldset', 'legend',
23
+ 'datalist', 'output', 'progress', 'meter',
24
+ // 媒体
25
+ 'img', 'picture', 'source', 'audio', 'video', 'track', 'canvas', 'svg', 'math',
26
+ // 链接
27
+ 'a', 'area', 'link', 'base',
28
+ // 元数据
29
+ 'meta', 'title', 'style', 'script', 'noscript',
30
+ // 嵌入内容
31
+ 'iframe', 'embed', 'object', 'param',
32
+ // 其他
33
+ 'br', 'hr', 'template', 'slot', 'details', 'summary', 'dialog'
34
+ ]);
35
+ /**
36
+ * 判断是否为原生 DOM 元素
37
+ */
38
+ function isNativeDOMElement(type) {
39
+ return NATIVE_DOM_ELEMENTS.has(type.toLowerCase());
40
+ }
41
+ /**
42
+ * 组件解析器
43
+ */
44
+ export class ComponentResolver {
45
+ componentCache = new Map();
46
+ globalComponents = null;
47
+ constructor(globalComponents = null) {
48
+ this.globalComponents = globalComponents;
49
+ }
50
+ /**
51
+ * 解析组件
52
+ * 自动解析全局注册的组件(通过 app.component() 注册的所有组件)
53
+ * 不针对任何特定的组件库,完全依赖 Vue 的全局组件注册机制
54
+ *
55
+ * 使用缓存提升性能
56
+ */
57
+ resolveComponent(type) {
58
+ // 检查缓存
59
+ if (this.componentCache.has(type)) {
60
+ return this.componentCache.get(type);
61
+ }
62
+ let resolved = null;
63
+ // 如果是原生 DOM 元素,直接返回类型名(Vue 的 h 函数会将其作为 HTML 标签处理)
64
+ if (isNativeDOMElement(type)) {
65
+ resolved = type;
66
+ }
67
+ else {
68
+ try {
69
+ // 从全局组件注册表中查找组件
70
+ // 支持所有通过 app.component() 注册的全局组件(包括 Element Plus、自定义组件等)
71
+ if (this.globalComponents) {
72
+ const globalComponent = this.globalComponents[type];
73
+ if (globalComponent) {
74
+ resolved = globalComponent;
75
+ }
76
+ else {
77
+ // 组件未找到,作为 HTML 标签使用(可能是未知的原生元素或自定义标签)
78
+ resolved = type;
79
+ }
80
+ }
81
+ else {
82
+ resolved = type;
83
+ }
84
+ }
85
+ catch (error) {
86
+ // 解析失败,作为 HTML 标签使用
87
+ resolved = type;
88
+ }
89
+ }
90
+ // 缓存结果(包括原生元素和字符串类型,避免重复解析)
91
+ // 对于组件对象(非字符串),使用 markRaw 标记,避免被响应式处理
92
+ const cachedComponent = typeof resolved === 'string' ? resolved : markRaw(resolved);
93
+ this.componentCache.set(type, cachedComponent);
94
+ return cachedComponent;
95
+ }
96
+ /**
97
+ * 清除组件解析缓存
98
+ * 用于组件注册变更后的缓存失效
99
+ */
100
+ clearComponentCache() {
101
+ this.componentCache.clear();
102
+ }
103
+ /**
104
+ * 使特定组件的缓存失效
105
+ */
106
+ invalidateComponentCache(type) {
107
+ this.componentCache.delete(type);
108
+ }
109
+ }
110
+ //# sourceMappingURL=component-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"component-resolver.js","sourceRoot":"","sources":["../../src/features/component-resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Computed 支持
3
+ *
4
+ * 在 Schema 节点上支持计算属性,使用表达式字符串
5
+ *
6
+ * 特性:
7
+ * - 精细化依赖追踪:只追踪表达式中使用的状态路径
8
+ * - 缓存机制:相同 schema 节点复用 computed 实例
9
+ * - 自动清理:组件卸载时清理缓存
10
+ */
11
+ import { type ComputedRef } from 'vue';
12
+ import type { RuntimeContext } from '@vario/core';
13
+ import type { VueSchemaNode } from '../types.js';
14
+ /**
15
+ * 为 Schema 节点创建计算属性
16
+ *
17
+ * @param schema Schema 节点
18
+ * @param ctx 运行时上下文
19
+ * @param getState 获取响应式状态的函数
20
+ * @param useCache 是否使用缓存(默认 true)
21
+ */
22
+ export declare function createComputedProps(schema: VueSchemaNode, ctx: RuntimeContext, getState?: () => any, useCache?: boolean): Record<string, ComputedRef<any>> | null;
23
+ /**
24
+ * 将计算属性合并到 props 中
25
+ */
26
+ export declare function mergeComputedProps(props: Record<string, any>, computedProps: Record<string, ComputedRef<any>> | null): Record<string, any>;
27
+ /**
28
+ * 清除指定 schema 的 computed 缓存
29
+ */
30
+ export declare function clearComputedCache(schema: VueSchemaNode): boolean;
31
+ /**
32
+ * 清除所有 computed 缓存(用于测试或热重载)
33
+ */
34
+ export declare function clearAllComputedCache(): void;
35
+ //# sourceMappingURL=computed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"computed.d.ts","sourceRoot":"","sources":["../../src/features/computed.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAY,KAAK,WAAW,EAAmC,MAAM,KAAK,CAAA;AACjF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAmEhD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,aAAa,EACrB,GAAG,EAAE,cAAc,EACnB,QAAQ,CAAC,EAAE,MAAM,GAAG,EACpB,QAAQ,GAAE,OAAc,GACvB,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAqDzC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC1B,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,GACrD,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAWrB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAEjE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAG5C"}
@@ -0,0 +1,161 @@
1
+ /**
2
+ * Computed 支持
3
+ *
4
+ * 在 Schema 节点上支持计算属性,使用表达式字符串
5
+ *
6
+ * 特性:
7
+ * - 精细化依赖追踪:只追踪表达式中使用的状态路径
8
+ * - 缓存机制:相同 schema 节点复用 computed 实例
9
+ * - 自动清理:组件卸载时清理缓存
10
+ */
11
+ import { computed, onUnmounted, getCurrentInstance } from 'vue';
12
+ import { evaluate, parseExpression, extractDependencies } from '@vario/core';
13
+ /**
14
+ * Computed 缓存管理器
15
+ * 使用 WeakMap 以 schema 为 key,避免内存泄漏
16
+ */
17
+ const computedCache = new WeakMap();
18
+ /**
19
+ * 从表达式中提取依赖的状态路径
20
+ *
21
+ * @param expr 表达式字符串
22
+ * @returns 依赖路径数组
23
+ */
24
+ function extractExprDependencies(expr) {
25
+ try {
26
+ const ast = parseExpression(expr);
27
+ return extractDependencies(ast);
28
+ }
29
+ catch {
30
+ // 解析失败时返回空数组,使用粗粒度追踪
31
+ return [];
32
+ }
33
+ }
34
+ /**
35
+ * 根据依赖路径从响应式状态中读取值(触发依赖追踪)
36
+ *
37
+ * @param state 响应式状态对象
38
+ * @param deps 依赖路径数组
39
+ */
40
+ function trackDependencies(state, deps) {
41
+ if (!state || deps.length === 0)
42
+ return;
43
+ for (const dep of deps) {
44
+ // 处理通配符依赖:items.* -> 访问整个数组
45
+ if (dep.endsWith('.*')) {
46
+ const basePath = dep.slice(0, -2);
47
+ const value = getNestedValue(state, basePath);
48
+ // 触发数组/对象的追踪
49
+ if (Array.isArray(value)) {
50
+ void value.length;
51
+ }
52
+ else if (value && typeof value === 'object') {
53
+ void Object.keys(value);
54
+ }
55
+ }
56
+ else if (dep.includes('.')) {
57
+ // 嵌套路径:user.name
58
+ void getNestedValue(state, dep);
59
+ }
60
+ else {
61
+ // 顶级路径
62
+ void state[dep];
63
+ }
64
+ }
65
+ }
66
+ /**
67
+ * 获取嵌套路径的值
68
+ */
69
+ function getNestedValue(obj, path) {
70
+ const parts = path.split('.');
71
+ let current = obj;
72
+ for (const part of parts) {
73
+ if (current == null)
74
+ return undefined;
75
+ current = current[part];
76
+ }
77
+ return current;
78
+ }
79
+ /**
80
+ * 为 Schema 节点创建计算属性
81
+ *
82
+ * @param schema Schema 节点
83
+ * @param ctx 运行时上下文
84
+ * @param getState 获取响应式状态的函数
85
+ * @param useCache 是否使用缓存(默认 true)
86
+ */
87
+ export function createComputedProps(schema, ctx, getState, useCache = true) {
88
+ if (!schema.computed || Object.keys(schema.computed).length === 0) {
89
+ return null;
90
+ }
91
+ // 尝试从缓存获取
92
+ if (useCache) {
93
+ const cached = computedCache.get(schema);
94
+ if (cached) {
95
+ return cached;
96
+ }
97
+ }
98
+ const computedProps = {};
99
+ // 预先解析所有表达式的依赖
100
+ const depsMap = new Map();
101
+ for (const [key, expr] of Object.entries(schema.computed)) {
102
+ depsMap.set(key, extractExprDependencies(expr));
103
+ }
104
+ for (const [key, expr] of Object.entries(schema.computed)) {
105
+ const deps = depsMap.get(key) || [];
106
+ computedProps[key] = computed(() => {
107
+ try {
108
+ // 精细化依赖追踪
109
+ if (getState) {
110
+ const state = getState();
111
+ trackDependencies(state, deps);
112
+ }
113
+ return evaluate(expr, ctx);
114
+ }
115
+ catch (error) {
116
+ console.warn(`[Vario] Computed property "${key}" evaluation error:`, error);
117
+ return undefined;
118
+ }
119
+ });
120
+ }
121
+ // 缓存结果
122
+ if (useCache) {
123
+ computedCache.set(schema, computedProps);
124
+ // 如果在组件上下文中,注册清理
125
+ const instance = getCurrentInstance();
126
+ if (instance) {
127
+ onUnmounted(() => {
128
+ computedCache.delete(schema);
129
+ });
130
+ }
131
+ }
132
+ return computedProps;
133
+ }
134
+ /**
135
+ * 将计算属性合并到 props 中
136
+ */
137
+ export function mergeComputedProps(props, computedProps) {
138
+ if (!computedProps) {
139
+ return props;
140
+ }
141
+ const result = { ...props };
142
+ for (const [key, computedRef] of Object.entries(computedProps)) {
143
+ // 计算属性优先级高于原有 props
144
+ result[key] = computedRef.value;
145
+ }
146
+ return result;
147
+ }
148
+ /**
149
+ * 清除指定 schema 的 computed 缓存
150
+ */
151
+ export function clearComputedCache(schema) {
152
+ return computedCache.delete(schema);
153
+ }
154
+ /**
155
+ * 清除所有 computed 缓存(用于测试或热重载)
156
+ */
157
+ export function clearAllComputedCache() {
158
+ // WeakMap 无法遍历,只能通过引用删除
159
+ // 这个函数主要用于标记意图,实际清理依赖 WeakMap 的 GC
160
+ }
161
+ //# sourceMappingURL=computed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"computed.js","sourceRoot":"","sources":["../../src/features/computed.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * 事件处理模块
3
+ *
4
+ * 负责处理 Schema 中的事件绑定
5
+ */
6
+ import type { RuntimeContext } from '@variojs/core';
7
+ import type { SchemaNode } from '@variojs/schema';
8
+ /**
9
+ * 事件处理器
10
+ */
11
+ export declare class EventHandler {
12
+ private evaluateExpr;
13
+ private eventHandlerCache;
14
+ constructor(evaluateExpr: (expr: string, ctx: RuntimeContext) => any);
15
+ /**
16
+ * 将事件名转换为 Vue 事件处理器名
17
+ * click -> onClick, change -> onChange
18
+ */
19
+ toEventName(event: string): string;
20
+ /**
21
+ * 获取事件处理器(使用缓存)
22
+ */
23
+ getEventHandlers(schema: SchemaNode, ctx: RuntimeContext): Record<string, (e: Event) => void>;
24
+ /**
25
+ * 预处理 actions 中的 params,将表达式立即求值
26
+ * 用于循环中的事件处理,确保使用创建时的循环变量值
27
+ */
28
+ private preprocessActionsParams;
29
+ /**
30
+ * 执行动作序列
31
+ */
32
+ private executeInstructions;
33
+ }
34
+ //# sourceMappingURL=event-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-handler.d.ts","sourceRoot":"","sources":["../../src/features/event-handler.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAU,MAAM,eAAe,CAAA;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAGjD;;GAEG;AACH,qBAAa,YAAY;IAIrB,OAAO,CAAC,YAAY;IAHtB,OAAO,CAAC,iBAAiB,CAAgE;gBAG/E,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,cAAc,KAAK,GAAG;IAGlE;;;OAGG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAIlC;;OAEG;IACH,gBAAgB,CACd,MAAM,EAAE,UAAU,EAClB,GAAG,EAAE,cAAc,GAClB,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC;IA4CrC;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IA2B/B;;OAEG;YACW,mBAAmB;CAUlC"}