@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.
- package/README.md +916 -0
- package/dist/bindings.d.ts +48 -0
- package/dist/bindings.d.ts.map +1 -0
- package/dist/bindings.js +199 -0
- package/dist/bindings.js.map +1 -0
- package/dist/composable.d.ts +84 -0
- package/dist/composable.d.ts.map +1 -0
- package/dist/composable.js +386 -0
- package/dist/composable.js.map +1 -0
- package/dist/features/attrs-builder.d.ts +38 -0
- package/dist/features/attrs-builder.d.ts.map +1 -0
- package/dist/features/attrs-builder.js +143 -0
- package/dist/features/attrs-builder.js.map +1 -0
- package/dist/features/children-resolver.d.ts +36 -0
- package/dist/features/children-resolver.d.ts.map +1 -0
- package/dist/features/children-resolver.js +171 -0
- package/dist/features/children-resolver.js.map +1 -0
- package/dist/features/component-resolver.d.ts +31 -0
- package/dist/features/component-resolver.d.ts.map +1 -0
- package/dist/features/component-resolver.js +110 -0
- package/dist/features/component-resolver.js.map +1 -0
- package/dist/features/computed.d.ts +35 -0
- package/dist/features/computed.d.ts.map +1 -0
- package/dist/features/computed.js +161 -0
- package/dist/features/computed.js.map +1 -0
- package/dist/features/event-handler.d.ts +34 -0
- package/dist/features/event-handler.d.ts.map +1 -0
- package/dist/features/event-handler.js +103 -0
- package/dist/features/event-handler.js.map +1 -0
- package/dist/features/expression-evaluator.d.ts +18 -0
- package/dist/features/expression-evaluator.d.ts.map +1 -0
- package/dist/features/expression-evaluator.js +28 -0
- package/dist/features/expression-evaluator.js.map +1 -0
- package/dist/features/lifecycle-wrapper.d.ts +19 -0
- package/dist/features/lifecycle-wrapper.d.ts.map +1 -0
- package/dist/features/lifecycle-wrapper.js +102 -0
- package/dist/features/lifecycle-wrapper.js.map +1 -0
- package/dist/features/loop-handler.d.ts +38 -0
- package/dist/features/loop-handler.d.ts.map +1 -0
- package/dist/features/loop-handler.js +168 -0
- package/dist/features/loop-handler.js.map +1 -0
- package/dist/features/path-resolver.d.ts +50 -0
- package/dist/features/path-resolver.d.ts.map +1 -0
- package/dist/features/path-resolver.js +171 -0
- package/dist/features/path-resolver.js.map +1 -0
- package/dist/features/provide-inject.d.ts +38 -0
- package/dist/features/provide-inject.d.ts.map +1 -0
- package/dist/features/provide-inject.js +139 -0
- package/dist/features/provide-inject.js.map +1 -0
- package/dist/features/refs.d.ts +45 -0
- package/dist/features/refs.d.ts.map +1 -0
- package/dist/features/refs.js +113 -0
- package/dist/features/refs.js.map +1 -0
- package/dist/features/teleport.d.ts +23 -0
- package/dist/features/teleport.d.ts.map +1 -0
- package/dist/features/teleport.js +32 -0
- package/dist/features/teleport.js.map +1 -0
- package/dist/features/validators.d.ts +43 -0
- package/dist/features/validators.d.ts.map +1 -0
- package/dist/features/validators.js +297 -0
- package/dist/features/validators.js.map +1 -0
- package/dist/features/watch.d.ts +26 -0
- package/dist/features/watch.d.ts.map +1 -0
- package/dist/features/watch.js +154 -0
- package/dist/features/watch.js.map +1 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -0
- package/dist/renderer.d.ts +72 -0
- package/dist/renderer.d.ts.map +1 -0
- package/dist/renderer.js +244 -0
- package/dist/renderer.js.map +1 -0
- package/dist/types.d.ts +128 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +16 -0
- package/dist/types.js.map +1 -0
- package/package.json +41 -0
|
@@ -0,0 +1,386 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* useVario composable for Vue integration
|
|
3
|
+
*
|
|
4
|
+
* 设计目标:
|
|
5
|
+
* - Options 风格(state/computed/methods)零学习成本
|
|
6
|
+
* - Composition 风格透传 reactive/computed
|
|
7
|
+
* - 状态直接可访问(无需 .value)
|
|
8
|
+
* - 方法统一通过 $methods 调用
|
|
9
|
+
* - 生命周期:在使用 useVario 的组件中直接使用 Vue 的生命周期钩子
|
|
10
|
+
* (如 onMounted, onUnmounted 等),无需通过 options 传递
|
|
11
|
+
*
|
|
12
|
+
* 性能优化:
|
|
13
|
+
* - 1000+ 组件场景:避免在每个 useVario 中注册生命周期钩子
|
|
14
|
+
* - 生命周期钩子应在使用 useVario 的组件中直接使用,减少抽象层开销
|
|
15
|
+
*/
|
|
16
|
+
import { ref, reactive, computed, watch, nextTick, getCurrentInstance, h, isReactive } from 'vue';
|
|
17
|
+
import { createRuntimeContext, invalidateCache, setPathValue, ServiceError } from '@variojs/core';
|
|
18
|
+
import { VueRenderer } from './renderer.js';
|
|
19
|
+
import { registerModelConfig } from './bindings.js';
|
|
20
|
+
import { RefsRegistry } from './features/refs.js';
|
|
21
|
+
// 实现:使用箭头函数
|
|
22
|
+
export const useVario = (schema, options = {}) => {
|
|
23
|
+
const schemaRef = resolveSchema(schema);
|
|
24
|
+
// 获取组件实例(如果可用)
|
|
25
|
+
const instance = getCurrentInstance();
|
|
26
|
+
// 状态:自动包裹为响应式对象
|
|
27
|
+
// 如果传入的 state 已经是响应式的(通过 isReactive 检查),直接使用
|
|
28
|
+
// 否则用 reactive() 包裹
|
|
29
|
+
const reactiveState = (options.state
|
|
30
|
+
? (isReactive(options.state) ? options.state : reactive(options.state))
|
|
31
|
+
: reactive({}));
|
|
32
|
+
// 应用自定义绑定协议(可选)
|
|
33
|
+
applyBindingConfigs(options.modelBindings);
|
|
34
|
+
// 构建方法注册表(支持兼容命名)
|
|
35
|
+
const methodsRegistry = buildMethodsRegistry(options.methods, reactiveState);
|
|
36
|
+
// 同步锁,防止双向同步死循环
|
|
37
|
+
let syncing = false;
|
|
38
|
+
// 同步路径追踪,用于循环检测
|
|
39
|
+
const syncingPaths = new Set();
|
|
40
|
+
// 延迟引用 render 函数(因为 render 在 ctx 之后定义)
|
|
41
|
+
let renderFn = null;
|
|
42
|
+
const ctx = createRuntimeContext({}, {
|
|
43
|
+
onEmit: (event, data) => {
|
|
44
|
+
options.onEmit?.(event, data);
|
|
45
|
+
},
|
|
46
|
+
methods: methodsRegistry,
|
|
47
|
+
exprOptions: options.exprOptions,
|
|
48
|
+
onStateChange: ((path, value, runtimeCtx) => {
|
|
49
|
+
// 如果正在同步,跳过(防止循环)
|
|
50
|
+
if (syncing)
|
|
51
|
+
return;
|
|
52
|
+
// 循环检测:如果当前路径正在同步,跳过
|
|
53
|
+
if (syncingPaths.has(path))
|
|
54
|
+
return;
|
|
55
|
+
syncing = true;
|
|
56
|
+
syncingPaths.add(path);
|
|
57
|
+
try {
|
|
58
|
+
// 同步到 Vue 响应式状态(自动创建缺失的对象结构)
|
|
59
|
+
setPathValue(reactiveState, path, value, {
|
|
60
|
+
createObject: () => reactive({}),
|
|
61
|
+
createArray: () => reactive([]),
|
|
62
|
+
// 自动创建中间对象,确保路径存在
|
|
63
|
+
createIntermediate: true
|
|
64
|
+
});
|
|
65
|
+
// 缓存失效
|
|
66
|
+
invalidateCache(path, runtimeCtx);
|
|
67
|
+
// 触发重新渲染(确保 UI 及时更新)
|
|
68
|
+
if (renderFn)
|
|
69
|
+
nextTick(renderFn);
|
|
70
|
+
}
|
|
71
|
+
finally {
|
|
72
|
+
syncingPaths.delete(path);
|
|
73
|
+
syncing = false;
|
|
74
|
+
}
|
|
75
|
+
}),
|
|
76
|
+
createObject: () => reactive({}),
|
|
77
|
+
createArray: () => reactive([])
|
|
78
|
+
});
|
|
79
|
+
// 将初始状态写入 ctx(保持 runtime 与 Vue 一致)
|
|
80
|
+
// 注意:需要在 watch 之前初始化,避免触发不必要的 watch
|
|
81
|
+
// 遍历 reactiveState 的所有属性并同步到 ctx
|
|
82
|
+
// 同时,如果 state 为空,会自动在 onStateChange 中创建结构
|
|
83
|
+
for (const key in reactiveState) {
|
|
84
|
+
if (key.startsWith('$') || key.startsWith('_'))
|
|
85
|
+
continue;
|
|
86
|
+
const value = reactiveState[key];
|
|
87
|
+
ctx._set(key, value, { skipCallback: true });
|
|
88
|
+
}
|
|
89
|
+
// 计算属性(Options 风格)
|
|
90
|
+
if (options.computed) {
|
|
91
|
+
registerComputed(options.computed, reactiveState, ctx);
|
|
92
|
+
}
|
|
93
|
+
const ctxRef = ref(ctx);
|
|
94
|
+
// 规范化 modelPath 配置
|
|
95
|
+
const modelPathConfig = normalizeModelPathConfig(options.modelPath);
|
|
96
|
+
// 创建 refs 注册表(用于模板引用)
|
|
97
|
+
const refsRegistry = options.rendererOptions?.refsRegistry || new RefsRegistry();
|
|
98
|
+
const renderer = new VueRenderer({
|
|
99
|
+
...options.rendererOptions,
|
|
100
|
+
instance,
|
|
101
|
+
app: options.app ?? options.rendererOptions?.app,
|
|
102
|
+
components: options.components ?? options.rendererOptions?.components,
|
|
103
|
+
getState: () => reactiveState,
|
|
104
|
+
refsRegistry,
|
|
105
|
+
modelPath: modelPathConfig
|
|
106
|
+
});
|
|
107
|
+
const vnodeRef = ref(null);
|
|
108
|
+
const errorRef = ref(null);
|
|
109
|
+
const errorBoundaryEnabled = options.errorBoundary?.enabled !== false;
|
|
110
|
+
const render = () => {
|
|
111
|
+
// 清除之前的错误
|
|
112
|
+
if (errorRef.value && errorBoundaryEnabled) {
|
|
113
|
+
errorRef.value = null;
|
|
114
|
+
}
|
|
115
|
+
try {
|
|
116
|
+
const currentSchema = schemaRef.value;
|
|
117
|
+
if (!isValidSchema(currentSchema)) {
|
|
118
|
+
vnodeRef.value = null;
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
vnodeRef.value = renderer.render(currentSchema, ctx);
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
125
|
+
// 错误边界处理
|
|
126
|
+
if (errorBoundaryEnabled) {
|
|
127
|
+
errorRef.value = err;
|
|
128
|
+
// 调用错误恢复回调
|
|
129
|
+
if (options.errorBoundary?.onRecover) {
|
|
130
|
+
try {
|
|
131
|
+
options.errorBoundary.onRecover(err);
|
|
132
|
+
}
|
|
133
|
+
catch (recoverError) {
|
|
134
|
+
console.warn('Error recovery callback failed:', recoverError);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
// 显示错误UI
|
|
138
|
+
if (options.errorBoundary?.fallback) {
|
|
139
|
+
try {
|
|
140
|
+
vnodeRef.value = options.errorBoundary.fallback(err);
|
|
141
|
+
}
|
|
142
|
+
catch (fallbackError) {
|
|
143
|
+
// 回退到默认错误显示
|
|
144
|
+
vnodeRef.value = createDefaultErrorVNode(err);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
vnodeRef.value = createDefaultErrorVNode(err);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
// 错误边界未启用,使用原有逻辑
|
|
153
|
+
vnodeRef.value = null;
|
|
154
|
+
options.onError?.(err);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
};
|
|
158
|
+
/**
|
|
159
|
+
* 创建默认错误显示VNode
|
|
160
|
+
*/
|
|
161
|
+
function createDefaultErrorVNode(error) {
|
|
162
|
+
return h('div', {
|
|
163
|
+
style: {
|
|
164
|
+
padding: '20px',
|
|
165
|
+
border: '2px solid #f56565',
|
|
166
|
+
borderRadius: '4px',
|
|
167
|
+
backgroundColor: '#fff5f5',
|
|
168
|
+
color: '#c53030'
|
|
169
|
+
}
|
|
170
|
+
}, [
|
|
171
|
+
h('div', { style: { fontWeight: 'bold', marginBottom: '10px' } }, '渲染错误'),
|
|
172
|
+
h('div', { style: { marginBottom: '10px' } }, error.message),
|
|
173
|
+
h('button', {
|
|
174
|
+
onClick: () => {
|
|
175
|
+
errorRef.value = null;
|
|
176
|
+
render();
|
|
177
|
+
},
|
|
178
|
+
style: {
|
|
179
|
+
padding: '8px 16px',
|
|
180
|
+
backgroundColor: '#4299e1',
|
|
181
|
+
color: 'white',
|
|
182
|
+
border: 'none',
|
|
183
|
+
borderRadius: '4px',
|
|
184
|
+
cursor: 'pointer'
|
|
185
|
+
}
|
|
186
|
+
}, '重试')
|
|
187
|
+
]);
|
|
188
|
+
}
|
|
189
|
+
// 设置 renderFn 引用,供 onStateChange 使用
|
|
190
|
+
renderFn = render;
|
|
191
|
+
render();
|
|
192
|
+
// schema 变化重新渲染
|
|
193
|
+
watch(schemaRef, () => nextTick(render), { deep: true, immediate: false });
|
|
194
|
+
// 状态变更同步到 ctx(Options/Composition 都生效)
|
|
195
|
+
// 使用单独的 watchSyncing 标志,避免与 ctx._set 触发的 onStateChange 冲突
|
|
196
|
+
let watchSyncing = false;
|
|
197
|
+
watch(reactiveState, () => {
|
|
198
|
+
// 如果正在同步(watch 自身触发),跳过
|
|
199
|
+
if (watchSyncing)
|
|
200
|
+
return;
|
|
201
|
+
watchSyncing = true;
|
|
202
|
+
try {
|
|
203
|
+
syncStateToContext(reactiveState, ctx, { skipCallback: true });
|
|
204
|
+
// 清除表达式缓存(重要:当数组/对象内部变化时,引用不变但内容变了,需要重新求值)
|
|
205
|
+
// 遍历所有顶层属性,使其缓存失效
|
|
206
|
+
for (const key in reactiveState) {
|
|
207
|
+
if (key.startsWith('$') || key.startsWith('_'))
|
|
208
|
+
continue;
|
|
209
|
+
invalidateCache(key, ctx);
|
|
210
|
+
}
|
|
211
|
+
nextTick(render);
|
|
212
|
+
}
|
|
213
|
+
finally {
|
|
214
|
+
watchSyncing = false;
|
|
215
|
+
}
|
|
216
|
+
}, { deep: true, flush: 'post', immediate: false });
|
|
217
|
+
return {
|
|
218
|
+
vnode: vnodeRef,
|
|
219
|
+
state: reactiveState,
|
|
220
|
+
ctx: ctxRef,
|
|
221
|
+
refs: refsRegistry.getAll(),
|
|
222
|
+
error: errorRef,
|
|
223
|
+
/** 手动触发重新渲染(用于错误恢复) */
|
|
224
|
+
retry: () => {
|
|
225
|
+
errorRef.value = null;
|
|
226
|
+
render();
|
|
227
|
+
}
|
|
228
|
+
};
|
|
229
|
+
};
|
|
230
|
+
// ============================================================================
|
|
231
|
+
// 内部工具函数
|
|
232
|
+
// ============================================================================
|
|
233
|
+
function resolveSchema(schema) {
|
|
234
|
+
if (typeof schema === 'function') {
|
|
235
|
+
return computed(() => {
|
|
236
|
+
const result = schema();
|
|
237
|
+
if (result && typeof result === 'object' && 'value' in result && 'effect' in result) {
|
|
238
|
+
return result.value;
|
|
239
|
+
}
|
|
240
|
+
return result;
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
if (schema && typeof schema === 'object' && 'value' in schema && 'effect' in schema) {
|
|
244
|
+
return schema;
|
|
245
|
+
}
|
|
246
|
+
return computed(() => schema);
|
|
247
|
+
}
|
|
248
|
+
function isValidSchema(schema) {
|
|
249
|
+
return schema != null && typeof schema === 'object' && 'type' in schema;
|
|
250
|
+
}
|
|
251
|
+
function buildMethodsRegistry(methods, reactiveState) {
|
|
252
|
+
if (!methods)
|
|
253
|
+
return {};
|
|
254
|
+
const registry = {};
|
|
255
|
+
for (const [name, fn] of Object.entries(methods)) {
|
|
256
|
+
const handler = async (ctx, params) => {
|
|
257
|
+
try {
|
|
258
|
+
// 调用方法,自动处理同步/异步
|
|
259
|
+
// ctx 的类型是 RuntimeContext,但 MethodContext 需要 RuntimeContext<TState>
|
|
260
|
+
// 由于 RuntimeContext 是泛型类型,这里使用类型断言是安全的
|
|
261
|
+
const methodCtx = ctx;
|
|
262
|
+
const result = fn({ state: reactiveState, params, event: ctx.$event, ctx: methodCtx });
|
|
263
|
+
// 自动检测是否为 Promise
|
|
264
|
+
if (result && typeof result === 'object' && 'then' in result && typeof result.then === 'function') {
|
|
265
|
+
// 是 Promise,等待结果
|
|
266
|
+
return await result;
|
|
267
|
+
}
|
|
268
|
+
// 同步方法,直接返回
|
|
269
|
+
return result;
|
|
270
|
+
}
|
|
271
|
+
catch (error) {
|
|
272
|
+
// 错误处理:包装为 ServiceError
|
|
273
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
274
|
+
const originalError = error instanceof Error ? error : undefined;
|
|
275
|
+
// 如果已经是 ServiceError,直接抛出
|
|
276
|
+
if (error instanceof ServiceError) {
|
|
277
|
+
throw error;
|
|
278
|
+
}
|
|
279
|
+
// 包装为 ServiceError
|
|
280
|
+
throw new ServiceError(name, `Method execution failed: ${errorMessage}`, originalError, {
|
|
281
|
+
metadata: {
|
|
282
|
+
method: name,
|
|
283
|
+
params
|
|
284
|
+
}
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
};
|
|
288
|
+
// 注册多个别名以支持不同的调用方式
|
|
289
|
+
registry[name] = handler;
|
|
290
|
+
registry[`$methods.${name}`] = handler;
|
|
291
|
+
registry[`methods.${name}`] = handler;
|
|
292
|
+
registry[`services.${name}`] = handler;
|
|
293
|
+
}
|
|
294
|
+
return registry;
|
|
295
|
+
}
|
|
296
|
+
function registerComputed(computedDefs, reactiveState, ctx) {
|
|
297
|
+
Object.entries(computedDefs).forEach(([key, def]) => {
|
|
298
|
+
// 支持 Composition 风格(传入 ComputedRef)
|
|
299
|
+
let cVal;
|
|
300
|
+
if (def && typeof def === 'object' && 'value' in def && 'effect' in def) {
|
|
301
|
+
// 已经是 ComputedRef
|
|
302
|
+
cVal = def;
|
|
303
|
+
}
|
|
304
|
+
else {
|
|
305
|
+
// Options 风格:函数
|
|
306
|
+
const fn = def;
|
|
307
|
+
cVal = computed(() => fn(reactiveState));
|
|
308
|
+
}
|
|
309
|
+
// 监听计算属性变化,同步到运行时上下文
|
|
310
|
+
watch(cVal, (val) => {
|
|
311
|
+
const currentValue = ctx._get(key);
|
|
312
|
+
// 深度比较,避免不必要的更新
|
|
313
|
+
if (!isDeepEqual(currentValue, val)) {
|
|
314
|
+
ctx._set(key, val, { skipCallback: true });
|
|
315
|
+
}
|
|
316
|
+
}, { immediate: true });
|
|
317
|
+
// 将计算属性添加到 state(只读访问)
|
|
318
|
+
// 使用 configurable: true 允许覆盖已存在的属性
|
|
319
|
+
Object.defineProperty(reactiveState, key, {
|
|
320
|
+
get: () => cVal.value,
|
|
321
|
+
enumerable: true,
|
|
322
|
+
configurable: true // 允许覆盖,因为 computed 优先级高于初始值
|
|
323
|
+
});
|
|
324
|
+
});
|
|
325
|
+
}
|
|
326
|
+
function syncStateToContext(reactiveState, ctx, _options = {}) {
|
|
327
|
+
for (const key in reactiveState) {
|
|
328
|
+
if (key.startsWith('$') || key.startsWith('_'))
|
|
329
|
+
continue;
|
|
330
|
+
const value = reactiveState[key];
|
|
331
|
+
const currentValue = ctx._get(key);
|
|
332
|
+
// 深度比较,避免不必要的更新
|
|
333
|
+
if (!isDeepEqual(currentValue, value)) {
|
|
334
|
+
// 使用 skipCallback 避免触发 onStateChange(防止循环)
|
|
335
|
+
ctx._set(key, value, { skipCallback: true });
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
/**
|
|
340
|
+
* 深度比较两个值是否相等
|
|
341
|
+
*/
|
|
342
|
+
function isDeepEqual(a, b) {
|
|
343
|
+
if (a === b)
|
|
344
|
+
return true;
|
|
345
|
+
if (a == null || b == null)
|
|
346
|
+
return a === b;
|
|
347
|
+
if (typeof a !== typeof b)
|
|
348
|
+
return false;
|
|
349
|
+
if (Array.isArray(a) && Array.isArray(b)) {
|
|
350
|
+
if (a.length !== b.length)
|
|
351
|
+
return false;
|
|
352
|
+
return a.every((item, index) => isDeepEqual(item, b[index]));
|
|
353
|
+
}
|
|
354
|
+
if (typeof a === 'object' && typeof b === 'object') {
|
|
355
|
+
const keysA = Object.keys(a);
|
|
356
|
+
const keysB = Object.keys(b);
|
|
357
|
+
if (keysA.length !== keysB.length)
|
|
358
|
+
return false;
|
|
359
|
+
return keysA.every(key => isDeepEqual(a[key], b[key]));
|
|
360
|
+
}
|
|
361
|
+
return false;
|
|
362
|
+
}
|
|
363
|
+
/**
|
|
364
|
+
* 规范化 modelPath 配置
|
|
365
|
+
*/
|
|
366
|
+
function normalizeModelPathConfig(config) {
|
|
367
|
+
return {
|
|
368
|
+
separator: config?.separator ?? '.'
|
|
369
|
+
};
|
|
370
|
+
}
|
|
371
|
+
function applyBindingConfigs(bindings) {
|
|
372
|
+
if (!bindings)
|
|
373
|
+
return;
|
|
374
|
+
Object.entries(bindings).forEach(([key, config]) => {
|
|
375
|
+
if (!config)
|
|
376
|
+
return;
|
|
377
|
+
if (key.includes(':')) {
|
|
378
|
+
const [component, modelName] = key.split(':');
|
|
379
|
+
registerModelConfig(component, config, modelName);
|
|
380
|
+
}
|
|
381
|
+
else {
|
|
382
|
+
registerModelConfig(key, config);
|
|
383
|
+
}
|
|
384
|
+
});
|
|
385
|
+
}
|
|
386
|
+
//# sourceMappingURL=composable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composable.js","sourceRoot":"","sources":["../src/composable.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 属性构建模块
|
|
3
|
+
*
|
|
4
|
+
* 负责构建 Vue 组件的属性对象,包括 props、model 绑定、事件等
|
|
5
|
+
*/
|
|
6
|
+
import type { RuntimeContext } from '@variojs/core';
|
|
7
|
+
import type { SchemaNode } from '@variojs/schema';
|
|
8
|
+
import type { PathSegment } from '@variojs/core';
|
|
9
|
+
import type { ModelPathResolver } from './path-resolver.js';
|
|
10
|
+
import type { EventHandler } from './event-handler.js';
|
|
11
|
+
/**
|
|
12
|
+
* 属性构建器
|
|
13
|
+
*/
|
|
14
|
+
export declare class AttrsBuilder {
|
|
15
|
+
private getState;
|
|
16
|
+
private pathResolver;
|
|
17
|
+
private eventHandler;
|
|
18
|
+
private staticAttrsCache;
|
|
19
|
+
constructor(getState: (() => any) | undefined, pathResolver: ModelPathResolver, eventHandler: EventHandler);
|
|
20
|
+
/**
|
|
21
|
+
* 检查props是否完全静态(不包含表达式)
|
|
22
|
+
*/
|
|
23
|
+
hasStaticProps(schema: SchemaNode): boolean;
|
|
24
|
+
/**
|
|
25
|
+
* 合并动态属性(model绑定、事件)到静态属性
|
|
26
|
+
*/
|
|
27
|
+
mergeDynamicAttrs(schema: SchemaNode, ctx: RuntimeContext, component: any, staticAttrs: Record<string, any>, modelPathStack?: PathSegment[]): Record<string, any>;
|
|
28
|
+
/**
|
|
29
|
+
* 构建属性对象
|
|
30
|
+
*
|
|
31
|
+
* 优化策略:
|
|
32
|
+
* - 批量设置属性(减少Object.assign调用)
|
|
33
|
+
* - 静态属性缓存(提升性能)
|
|
34
|
+
* - 事件处理器缓存(避免重复创建)
|
|
35
|
+
*/
|
|
36
|
+
buildAttrs(schema: SchemaNode, ctx: RuntimeContext, component: any, modelPathStack: PathSegment[] | undefined, evalProps: (props: Record<string, any>, ctx: RuntimeContext) => Record<string, any>): Record<string, any>;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=attrs-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attrs-builder.d.ts","sourceRoot":"","sources":["../../src/features/attrs-builder.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAEhD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEtD;;GAEG;AACH,qBAAa,YAAY;IAIrB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,YAAY;IALtB,OAAO,CAAC,gBAAgB,CAAiD;gBAG/D,QAAQ,EAAE,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,EACjC,YAAY,EAAE,iBAAiB,EAC/B,YAAY,EAAE,YAAY;IAGpC;;OAEG;IACH,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO;IAoB3C;;OAEG;IACH,iBAAiB,CACf,MAAM,EAAE,UAAU,EAClB,GAAG,EAAE,cAAc,EACnB,SAAS,EAAE,GAAG,EACd,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAChC,cAAc,GAAE,WAAW,EAAO,GACjC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAgDtB;;;;;;;OAOG;IACH,UAAU,CACR,MAAM,EAAE,UAAU,EAClB,GAAG,EAAE,cAAc,EACnB,SAAS,EAAE,GAAG,EACd,cAAc,EAAE,WAAW,EAAE,YAAK,EAClC,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,cAAc,KAAK,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAClF,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;CAwFvB"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 属性构建模块
|
|
3
|
+
*
|
|
4
|
+
* 负责构建 Vue 组件的属性对象,包括 props、model 绑定、事件等
|
|
5
|
+
*/
|
|
6
|
+
import { createModelBinding } from '../bindings.js';
|
|
7
|
+
/**
|
|
8
|
+
* 属性构建器
|
|
9
|
+
*/
|
|
10
|
+
export class AttrsBuilder {
|
|
11
|
+
getState;
|
|
12
|
+
pathResolver;
|
|
13
|
+
eventHandler;
|
|
14
|
+
staticAttrsCache = new WeakMap();
|
|
15
|
+
constructor(getState, pathResolver, eventHandler) {
|
|
16
|
+
this.getState = getState;
|
|
17
|
+
this.pathResolver = pathResolver;
|
|
18
|
+
this.eventHandler = eventHandler;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* 检查props是否完全静态(不包含表达式)
|
|
22
|
+
*/
|
|
23
|
+
hasStaticProps(schema) {
|
|
24
|
+
if (!schema.props)
|
|
25
|
+
return true;
|
|
26
|
+
for (const value of Object.values(schema.props)) {
|
|
27
|
+
if (typeof value === 'string' && (value.includes('{{') || value.includes('${'))) {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
if (typeof value === 'object' && value !== null) {
|
|
31
|
+
// 递归检查嵌套对象
|
|
32
|
+
const nested = value;
|
|
33
|
+
for (const nestedValue of Object.values(nested)) {
|
|
34
|
+
if (typeof nestedValue === 'string' && (nestedValue.includes('{{') || nestedValue.includes('${'))) {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* 合并动态属性(model绑定、事件)到静态属性
|
|
44
|
+
*/
|
|
45
|
+
mergeDynamicAttrs(schema, ctx, component, staticAttrs, modelPathStack = []) {
|
|
46
|
+
const attrs = { ...staticAttrs };
|
|
47
|
+
// 仅当 model 为字符串时创建绑定;model 为对象(scope)时不绑定
|
|
48
|
+
const modelPathStr = this.pathResolver.getModelPath(schema.model);
|
|
49
|
+
const shouldBindModel = modelPathStr && typeof schema.model === 'string';
|
|
50
|
+
if (shouldBindModel && modelPathStr) {
|
|
51
|
+
const modelPath = this.pathResolver.resolveModelPath(modelPathStr, schema, ctx, modelPathStack);
|
|
52
|
+
const binding = createModelBinding(schema.type, modelPath, ctx, component, this.getState);
|
|
53
|
+
Object.assign(attrs, binding);
|
|
54
|
+
}
|
|
55
|
+
// 添加具名model绑定
|
|
56
|
+
for (const key in schema) {
|
|
57
|
+
if (key.startsWith('model:')) {
|
|
58
|
+
const modelName = key.slice(6);
|
|
59
|
+
const modelPath = this.pathResolver.resolveModelPath(schema[key], schema, ctx, modelPathStack);
|
|
60
|
+
const binding = createModelBinding(schema.type, modelPath, ctx, component, this.getState, modelName);
|
|
61
|
+
Object.assign(attrs, binding);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
// 添加事件处理器
|
|
65
|
+
if (schema.events) {
|
|
66
|
+
const eventHandlers = this.eventHandler.getEventHandlers(schema, ctx);
|
|
67
|
+
Object.assign(attrs, eventHandlers);
|
|
68
|
+
}
|
|
69
|
+
return attrs;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* 构建属性对象
|
|
73
|
+
*
|
|
74
|
+
* 优化策略:
|
|
75
|
+
* - 批量设置属性(减少Object.assign调用)
|
|
76
|
+
* - 静态属性缓存(提升性能)
|
|
77
|
+
* - 事件处理器缓存(避免重复创建)
|
|
78
|
+
*/
|
|
79
|
+
buildAttrs(schema, ctx, component, modelPathStack = [], evalProps) {
|
|
80
|
+
// 检查静态属性缓存(如果props中没有表达式,可以缓存)
|
|
81
|
+
const hasStaticProps = this.hasStaticProps(schema);
|
|
82
|
+
if (hasStaticProps) {
|
|
83
|
+
const cached = this.staticAttrsCache.get(schema);
|
|
84
|
+
if (cached) {
|
|
85
|
+
// 合并动态部分(model绑定、事件)
|
|
86
|
+
return this.mergeDynamicAttrs(schema, ctx, component, cached, modelPathStack);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// 批量构建属性数组,最后一次性合并
|
|
90
|
+
const attrsParts = [];
|
|
91
|
+
// 1. 合并 props(支持表达式插值)
|
|
92
|
+
if (schema.props) {
|
|
93
|
+
attrsParts.push(evalProps(schema.props, ctx));
|
|
94
|
+
}
|
|
95
|
+
// 2. 处理双向绑定(支持多 model)。仅当 model 为字符串时创建绑定
|
|
96
|
+
const modelPathStr = this.pathResolver.getModelPath(schema.model);
|
|
97
|
+
const shouldBindModel = modelPathStr && typeof schema.model === 'string';
|
|
98
|
+
if (shouldBindModel && modelPathStr) {
|
|
99
|
+
const modelPath = this.pathResolver.resolveModelPath(modelPathStr, schema, ctx, modelPathStack);
|
|
100
|
+
const binding = createModelBinding(schema.type, modelPath, ctx, component, this.getState);
|
|
101
|
+
attrsParts.push(binding);
|
|
102
|
+
}
|
|
103
|
+
// 处理具名 model(model:xxx)
|
|
104
|
+
for (const key in schema) {
|
|
105
|
+
if (key.startsWith('model:')) {
|
|
106
|
+
const modelName = key.slice(6); // 移除 'model:' 前缀
|
|
107
|
+
const modelPath = this.pathResolver.resolveModelPath(schema[key], schema, ctx, modelPathStack);
|
|
108
|
+
const binding = createModelBinding(schema.type, modelPath, ctx, component, this.getState, modelName);
|
|
109
|
+
attrsParts.push(binding);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// 3. 处理事件(使用缓存)
|
|
113
|
+
if (schema.events) {
|
|
114
|
+
const eventHandlers = this.eventHandler.getEventHandlers(schema, ctx);
|
|
115
|
+
attrsParts.push(eventHandlers);
|
|
116
|
+
}
|
|
117
|
+
// 批量合并所有属性
|
|
118
|
+
const attrs = Object.assign({}, ...attrsParts);
|
|
119
|
+
// 4. 统一处理 style 格式(确保始终是对象)
|
|
120
|
+
if (attrs.style) {
|
|
121
|
+
if (typeof attrs.style === 'string') {
|
|
122
|
+
const styleObj = {};
|
|
123
|
+
attrs.style.split(';').forEach((rule) => {
|
|
124
|
+
const [key, value] = rule.split(':').map((s) => s.trim());
|
|
125
|
+
if (key && value) {
|
|
126
|
+
const camelKey = key.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase());
|
|
127
|
+
styleObj[camelKey] = value;
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
attrs.style = styleObj;
|
|
131
|
+
}
|
|
132
|
+
else if (Array.isArray(attrs.style)) {
|
|
133
|
+
attrs.style = {};
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
// 缓存静态属性
|
|
137
|
+
if (hasStaticProps) {
|
|
138
|
+
this.staticAttrsCache.set(schema, { ...attrs });
|
|
139
|
+
}
|
|
140
|
+
return attrs;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=attrs-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attrs-builder.js","sourceRoot":"","sources":["../../src/features/attrs-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 子节点处理模块
|
|
3
|
+
*
|
|
4
|
+
* 负责解析 Schema 的子节点,包括作用域插槽和文本内容
|
|
5
|
+
*/
|
|
6
|
+
import type { RuntimeContext } from '@variojs/core';
|
|
7
|
+
import type { SchemaNode } from '@variojs/schema';
|
|
8
|
+
import type { PathSegment } from '@variojs/core';
|
|
9
|
+
import type { ExpressionEvaluator } from './expression-evaluator.js';
|
|
10
|
+
/**
|
|
11
|
+
* 子节点解析器
|
|
12
|
+
*/
|
|
13
|
+
export declare class ChildrenResolver {
|
|
14
|
+
private createVNode;
|
|
15
|
+
private expressionEvaluator;
|
|
16
|
+
constructor(createVNode: (schema: SchemaNode, ctx: RuntimeContext, modelPathStack?: PathSegment[]) => any, expressionEvaluator: ExpressionEvaluator);
|
|
17
|
+
/**
|
|
18
|
+
* 解析子节点
|
|
19
|
+
* 支持插槽(template 节点)和作用域插槽
|
|
20
|
+
*/
|
|
21
|
+
resolveChildren(schema: SchemaNode, ctx: RuntimeContext, modelPathStack?: PathSegment[]): any;
|
|
22
|
+
/**
|
|
23
|
+
* 解析插槽(包括作用域插槽和普通插槽)
|
|
24
|
+
* 将 template 节点转换为 Vue 3 的插槽函数
|
|
25
|
+
*/
|
|
26
|
+
private resolveSlots;
|
|
27
|
+
/**
|
|
28
|
+
* 解析文本内容(支持表达式插值)
|
|
29
|
+
*/
|
|
30
|
+
resolveTextContent(text: string, ctx: RuntimeContext): string;
|
|
31
|
+
/**
|
|
32
|
+
* 求值 props(支持表达式插值)
|
|
33
|
+
*/
|
|
34
|
+
evalProps(props: Record<string, any>, ctx: RuntimeContext): Record<string, any>;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=children-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"children-resolver.d.ts","sourceRoot":"","sources":["../../src/features/children-resolver.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAEpE;;GAEG;AACH,qBAAa,gBAAgB;IAEzB,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,mBAAmB;gBALnB,WAAW,EAAE,CACnB,MAAM,EAAE,UAAU,EAClB,GAAG,EAAE,cAAc,EACnB,cAAc,CAAC,EAAE,WAAW,EAAE,KAC3B,GAAG,EACA,mBAAmB,EAAE,mBAAmB;IAGlD;;;OAGG;IACH,eAAe,CACb,MAAM,EAAE,UAAU,EAClB,GAAG,EAAE,cAAc,EACnB,cAAc,GAAE,WAAW,EAAO,GACjC,GAAG;IAoCN;;;OAGG;IACH,OAAO,CAAC,YAAY;IAqEpB;;OAEG;IACH,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,cAAc,GAAG,MAAM;IAgB7D;;OAEG;IACH,SAAS,CACP,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC1B,GAAG,EAAE,cAAc,GAClB,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;CAgCvB"}
|