@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,48 @@
1
+ /**
2
+ * Bidirectional binding handlers for Vue integration
3
+ *
4
+ * 功能:
5
+ * - v-model 双向绑定处理
6
+ * - 智能检测组件类型(原生元素 vs Vue 组件)
7
+ * - 自动适配不同的 model 协议(Vue 3 标准 vs 传统协议)
8
+ * - 支持自定义配置(可选)
9
+ *
10
+ * 设计原则:
11
+ * - 使用 vario-core 的路径工具,避免重复代码
12
+ * - 优先自动检测,减少配置需求
13
+ * - 支持 Vue 3 和传统协议
14
+ */
15
+ import type { RuntimeContext } from '@variojs/core';
16
+ /**
17
+ * 组件 model 配置
18
+ */
19
+ export interface ModelConfig {
20
+ /** 值属性名(如 modelValue, value) */
21
+ prop: string;
22
+ /** 更新事件名(如 update:modelValue, input, change) */
23
+ event: string;
24
+ }
25
+ /**
26
+ * 创建双向绑定配置
27
+ *
28
+ * @param componentType 组件类型名
29
+ * @param modelPath 模型路径(如 "user.name")
30
+ * @param ctx 运行时上下文
31
+ * @param component 组件对象(可选,用于自动检测)
32
+ * @param getState 获取响应式状态的函数(用于 Vue 响应式追踪)
33
+ * @param modelName 具名 model(可选,如 "checked", "value")
34
+ * @returns 包含 prop 和 event handler 的对象
35
+ */
36
+ export declare function createModelBinding(componentType: string, modelPath: string, ctx: RuntimeContext, component?: unknown, getState?: () => Record<string, unknown>, modelName?: string): Record<string, unknown>;
37
+ /**
38
+ * 注册自定义组件的 model 配置
39
+ * @param componentType 组件类型名
40
+ * @param config model 配置
41
+ * @param modelName 具名 model(可选)
42
+ */
43
+ export declare function registerModelConfig(componentType: string, config: ModelConfig, modelName?: string): void;
44
+ /**
45
+ * 清除自定义配置
46
+ */
47
+ export declare function clearModelConfigs(): void;
48
+ //# sourceMappingURL=bindings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bindings.d.ts","sourceRoot":"","sources":["../src/bindings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAGnD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,gCAAgC;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,gDAAgD;IAChD,KAAK,EAAE,MAAM,CAAA;CACd;AAiGD;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAChC,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,cAAc,EACnB,SAAS,CAAC,EAAE,OAAO,EACnB,QAAQ,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACxC,SAAS,CAAC,EAAE,MAAM,GACjB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA2CzB;AAuCD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,WAAW,EACnB,SAAS,CAAC,EAAE,MAAM,GACjB,IAAI,CAGN;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAExC"}
@@ -0,0 +1,199 @@
1
+ /**
2
+ * Bidirectional binding handlers for Vue integration
3
+ *
4
+ * 功能:
5
+ * - v-model 双向绑定处理
6
+ * - 智能检测组件类型(原生元素 vs Vue 组件)
7
+ * - 自动适配不同的 model 协议(Vue 3 标准 vs 传统协议)
8
+ * - 支持自定义配置(可选)
9
+ *
10
+ * 设计原则:
11
+ * - 使用 vario-core 的路径工具,避免重复代码
12
+ * - 优先自动检测,减少配置需求
13
+ * - 支持 Vue 3 和传统协议
14
+ */
15
+ import { resolveComponent } from 'vue';
16
+ import { getPathValue } from '@variojs/core';
17
+ /**
18
+ * 自定义配置注册表
19
+ */
20
+ const customConfigs = new Map();
21
+ /**
22
+ * 原生表单元素
23
+ */
24
+ const NATIVE_FORM_ELEMENTS = new Set(['input', 'textarea', 'select']);
25
+ /**
26
+ * 原生元素的事件映射
27
+ */
28
+ const NATIVE_EVENT_MAP = {
29
+ input: 'input',
30
+ textarea: 'input',
31
+ select: 'change'
32
+ };
33
+ /**
34
+ * Vue 3 标准 model 配置
35
+ */
36
+ const VUE3_DEFAULT_CONFIG = {
37
+ prop: 'modelValue',
38
+ event: 'update:modelValue'
39
+ };
40
+ /**
41
+ * 获取组件的 model 配置
42
+ */
43
+ function getModelConfig(componentType, component) {
44
+ // 1. 自定义配置优先
45
+ const custom = customConfigs.get(componentType);
46
+ if (custom)
47
+ return custom;
48
+ // 2. 原生表单元素
49
+ const lowerType = componentType.toLowerCase();
50
+ if (NATIVE_FORM_ELEMENTS.has(lowerType)) {
51
+ return {
52
+ prop: 'value',
53
+ event: NATIVE_EVENT_MAP[lowerType] || 'input'
54
+ };
55
+ }
56
+ // 3. 尝试从组件定义检测
57
+ if (component && typeof component === 'object') {
58
+ const comp = component;
59
+ const props = (comp.props || comp.__props || {});
60
+ // 检查 modelValue(Vue 3 标准)
61
+ if ('modelValue' in props || comp.__vModel) {
62
+ return VUE3_DEFAULT_CONFIG;
63
+ }
64
+ // 检查 value(传统协议)
65
+ if ('value' in props) {
66
+ const emits = (comp.emits || comp.__emits || []);
67
+ return {
68
+ prop: 'value',
69
+ event: emits.includes('update:value') ? 'update:value' : 'input'
70
+ };
71
+ }
72
+ }
73
+ // 4. 默认 Vue 3 标准
74
+ return VUE3_DEFAULT_CONFIG;
75
+ }
76
+ /**
77
+ * 转换事件名为 Vue 事件处理器格式
78
+ */
79
+ function toEventHandlerName(event) {
80
+ if (event.startsWith('update:')) {
81
+ return `onUpdate:${event.slice(7)}`;
82
+ }
83
+ return `on${event.charAt(0).toUpperCase()}${event.slice(1)}`;
84
+ }
85
+ /**
86
+ * 获取默认值(当值为 undefined 时)
87
+ * 确保双向绑定能够正常工作,即使状态中还没有这个字段
88
+ */
89
+ function getDefaultValue(prop) {
90
+ // 对于输入框相关的 prop,默认为空字符串
91
+ if (prop === 'value' || prop === 'modelValue') {
92
+ return '';
93
+ }
94
+ // 对于复选框相关的 prop,默认为 false
95
+ if (prop === 'checked') {
96
+ return false;
97
+ }
98
+ // 其他情况返回 undefined,让组件自己处理
99
+ return undefined;
100
+ }
101
+ /**
102
+ * 创建双向绑定配置
103
+ *
104
+ * @param componentType 组件类型名
105
+ * @param modelPath 模型路径(如 "user.name")
106
+ * @param ctx 运行时上下文
107
+ * @param component 组件对象(可选,用于自动检测)
108
+ * @param getState 获取响应式状态的函数(用于 Vue 响应式追踪)
109
+ * @param modelName 具名 model(可选,如 "checked", "value")
110
+ * @returns 包含 prop 和 event handler 的对象
111
+ */
112
+ export function createModelBinding(componentType, modelPath, ctx, component, getState, modelName) {
113
+ // 尝试解析组件(如果未提供或者是字符串)
114
+ let resolvedComponent = component;
115
+ if (!resolvedComponent || typeof resolvedComponent === 'string') {
116
+ try {
117
+ const resolved = resolveComponent(componentType);
118
+ if (resolved && typeof resolved !== 'string') {
119
+ resolvedComponent = resolved;
120
+ }
121
+ }
122
+ catch {
123
+ // 解析失败,使用默认配置
124
+ }
125
+ }
126
+ // 获取配置(支持具名 model)
127
+ const config = modelName
128
+ ? getNamedModelConfig(componentType, resolvedComponent, modelName)
129
+ : getModelConfig(componentType, resolvedComponent);
130
+ // 获取当前值
131
+ let value = getState
132
+ ? getPathValue(getState(), modelPath)
133
+ : ctx._get(modelPath);
134
+ // 如果值是 undefined,自动初始化为合适的默认值
135
+ // 这确保了双向绑定能够正常工作,即使状态中还没有这个字段
136
+ if (value === undefined) {
137
+ const defaultValue = getDefaultValue(config.prop);
138
+ if (defaultValue !== undefined) {
139
+ // 立即初始化到状态中,确保响应式绑定正常工作
140
+ value = defaultValue;
141
+ // 调用 _set 初始化值,会触发 onStateChange 同步到 Vue 状态
142
+ ctx._set(modelPath, defaultValue);
143
+ }
144
+ }
145
+ return {
146
+ [config.prop]: value,
147
+ [toEventHandlerName(config.event)]: (newValue) => {
148
+ // 直接设置到运行时上下文,会触发 onStateChange 同步到 Vue 状态
149
+ ctx._set(modelPath, newValue);
150
+ }
151
+ };
152
+ }
153
+ /**
154
+ * 获取具名 model 配置(支持多 model)
155
+ */
156
+ function getNamedModelConfig(componentType, component, modelName) {
157
+ // 1. 检查自定义配置
158
+ const customKey = `${componentType}:${modelName}`;
159
+ const custom = customConfigs.get(customKey);
160
+ if (custom)
161
+ return custom;
162
+ // 2. 尝试从组件定义检测
163
+ if (component && typeof component === 'object') {
164
+ const comp = component;
165
+ const props = (comp.props || {});
166
+ const emits = (comp.emits || []);
167
+ // Vue 3.4+ 多 model 支持
168
+ if (modelName in props) {
169
+ return {
170
+ prop: modelName,
171
+ event: emits.includes(`update:${modelName}`)
172
+ ? `update:${modelName}`
173
+ : `update:${modelName}`
174
+ };
175
+ }
176
+ }
177
+ // 3. 默认规则:prop 为 modelName,event 为 update:modelName
178
+ return {
179
+ prop: modelName,
180
+ event: `update:${modelName}`
181
+ };
182
+ }
183
+ /**
184
+ * 注册自定义组件的 model 配置
185
+ * @param componentType 组件类型名
186
+ * @param config model 配置
187
+ * @param modelName 具名 model(可选)
188
+ */
189
+ export function registerModelConfig(componentType, config, modelName) {
190
+ const key = modelName ? `${componentType}:${modelName}` : componentType;
191
+ customConfigs.set(key, config);
192
+ }
193
+ /**
194
+ * 清除自定义配置
195
+ */
196
+ export function clearModelConfigs() {
197
+ customConfigs.clear();
198
+ }
199
+ //# sourceMappingURL=bindings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bindings.js","sourceRoot":"","sources":["../src/bindings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,84 @@
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 { type Ref, type VNode, type ComputedRef, type App } from 'vue';
17
+ import type { Schema } from '@variojs/schema';
18
+ import type { RuntimeContext, ExpressionOptions } from '@variojs/core';
19
+ import { type VueRendererOptions } from './renderer.js';
20
+ export interface MethodContext<TState extends Record<string, unknown> = Record<string, unknown>> {
21
+ state: TState;
22
+ params: any;
23
+ event?: Event;
24
+ ctx: RuntimeContext<TState>;
25
+ }
26
+ export interface UseVarioOptions<TState extends Record<string, unknown> = Record<string, unknown>> {
27
+ /** 初始状态(会自动包裹为响应式对象) */
28
+ state?: TState;
29
+ /** 计算属性(Options 风格:函数)或 Composition 风格(ComputedRef) */
30
+ computed?: Record<string, ((state: TState) => any) | ComputedRef<any>>;
31
+ /** 方法(统一注册到 $methods) */
32
+ methods?: Record<string, (ctx: MethodContext<TState>) => any>;
33
+ /** 双向绑定配置(非标准组件) */
34
+ modelBindings?: Record<string, any>;
35
+ /** 事件处理 */
36
+ onEmit?: (event: string, data?: unknown) => void;
37
+ /** 错误处理 */
38
+ onError?: (error: Error) => void;
39
+ /** 错误边界配置 */
40
+ errorBoundary?: {
41
+ /** 是否启用错误边界(默认 true) */
42
+ enabled?: boolean;
43
+ /** 错误显示组件(自定义错误UI) */
44
+ fallback?: (error: Error) => VNode;
45
+ /** 错误恢复回调 */
46
+ onRecover?: (error: Error) => void;
47
+ };
48
+ /** 渲染器配置 */
49
+ rendererOptions?: VueRendererOptions;
50
+ /** Vue 应用实例(用于获取全局组件,非组件上下文时使用,优先级高于 getCurrentInstance) */
51
+ app?: App | null;
52
+ /** 全局组件映射(用于非组件上下文,优先级最高) */
53
+ components?: Record<string, any>;
54
+ /** 表达式求值配置 */
55
+ exprOptions?: ExpressionOptions;
56
+ /**
57
+ * Model 路径解析配置
58
+ * - object: 可选,如 { separator: '.' }
59
+ */
60
+ modelPath?: {
61
+ /** 路径分隔符(默认 '.') */
62
+ separator?: string;
63
+ };
64
+ }
65
+ export interface UseVarioResult<TState extends Record<string, unknown>> {
66
+ vnode: Ref<VNode | null>;
67
+ state: TState;
68
+ ctx: Ref<RuntimeContext<TState>>;
69
+ /** 模板引用(ref)集合,可通过 Schema 中的 ref 属性访问组件实例 */
70
+ refs: Record<string, Ref<any>>;
71
+ /** 当前错误(如果有) */
72
+ error: Ref<Error | null>;
73
+ /** 手动触发重新渲染(用于错误恢复) */
74
+ retry: () => void;
75
+ }
76
+ type UseVarioOverload = {
77
+ <TState extends Record<string, unknown>>(schema: Schema<TState> | (() => Schema<TState>) | ComputedRef<Schema<TState>>, options: UseVarioOptions<TState> & {
78
+ state: TState;
79
+ }): UseVarioResult<TState>;
80
+ <TState extends Record<string, unknown> = Record<string, unknown>>(schema: Schema<TState> | (() => Schema<TState>) | ComputedRef<Schema<TState>>, options?: UseVarioOptions<TState>): UseVarioResult<TState>;
81
+ };
82
+ export declare const useVario: UseVarioOverload;
83
+ export {};
84
+ //# sourceMappingURL=composable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composable.d.ts","sourceRoot":"","sources":["../src/composable.ts"],"names":[],"mappings":"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"}