@lytjs/renderer 4.1.0 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +204 -0
- package/dist/dom.cjs +1 -1
- package/dist/dom.mjs +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.mjs +1 -1
- package/dist/miniapp.cjs +21 -5
- package/dist/miniapp.mjs +21 -5
- package/dist/native.cjs +1 -1
- package/dist/native.mjs +1 -1
- package/dist/ssr.cjs +1 -1
- package/dist/ssr.mjs +1 -1
- package/dist/types/dom/dom-ops.d.ts.map +1 -1
- package/dist/types/dom/dom-renderer.d.ts +3 -3
- package/dist/types/dom/dom-renderer.d.ts.map +1 -1
- package/dist/types/dom/patch-props.d.ts +2 -32
- package/dist/types/dom/patch-props.d.ts.map +1 -1
- package/dist/types/miniapp/index.d.ts +8 -0
- package/dist/types/miniapp/index.d.ts.map +1 -1
- package/dist/types/miniapp/miniapp-compiler.d.ts +269 -0
- package/dist/types/miniapp/miniapp-compiler.d.ts.map +1 -0
- package/dist/types/miniapp/miniapp-event-bridge.d.ts +255 -0
- package/dist/types/miniapp/miniapp-event-bridge.d.ts.map +1 -0
- package/dist/types/miniapp/miniapp-lifecycle.d.ts +224 -0
- package/dist/types/miniapp/miniapp-lifecycle.d.ts.map +1 -0
- package/dist/types/miniapp/miniapp-renderer.d.ts.map +1 -1
- package/dist/types/miniapp/miniapp-utils.d.ts +168 -0
- package/dist/types/miniapp/miniapp-utils.d.ts.map +1 -0
- package/dist/types/miniapp/shared-constants.d.ts +28 -0
- package/dist/types/miniapp/shared-constants.d.ts.map +1 -0
- package/dist/types/native/native-renderer.d.ts.map +1 -1
- package/dist/types/renderer-interfaces.d.ts +19 -19
- package/dist/types/renderer-interfaces.d.ts.map +1 -1
- package/dist/types/shared/abstract-renderer.d.ts +74 -0
- package/dist/types/shared/abstract-renderer.d.ts.map +1 -0
- package/dist/types/ssr/hydration.d.ts +1 -16
- package/dist/types/ssr/hydration.d.ts.map +1 -1
- package/dist/types/ssr/ssr-renderer.d.ts +9 -24
- package/dist/types/ssr/ssr-renderer.d.ts.map +1 -1
- package/dist/types/vapor/index.d.ts +1 -1
- package/dist/types/vapor/index.d.ts.map +1 -1
- package/dist/types/vapor/vapor-compiler.d.ts +9 -0
- package/dist/types/vapor/vapor-compiler.d.ts.map +1 -1
- package/dist/types/vapor/vapor-component.d.ts +8 -1
- package/dist/types/vapor/vapor-component.d.ts.map +1 -1
- package/dist/types/vapor/vapor-reactive.d.ts +27 -4
- package/dist/types/vapor/vapor-reactive.d.ts.map +1 -1
- package/dist/types/vapor/vapor-renderer.d.ts +4 -2
- package/dist/types/vapor/vapor-renderer.d.ts.map +1 -1
- package/dist/types/vnode.d.ts +76 -7
- package/dist/types/vnode.d.ts.map +1 -1
- package/dist/vapor.cjs +1 -1
- package/dist/vapor.mjs +1 -1
- package/package.json +4 -3
- package/dist/tsconfig.tsbuildinfo +0 -1
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* miniapp-compiler.ts - 小程序编译器
|
|
3
|
+
*
|
|
4
|
+
* 将 Lyt.js 模板编译为小程序模板(WXML / AXML / TTML)。
|
|
5
|
+
* 支持模板语法转换、事件绑定转换、双向绑定转换、插槽转换、
|
|
6
|
+
* 组件引用转换、样式提取和脚本提取。
|
|
7
|
+
* 纯原生零依赖 TypeScript 实现。
|
|
8
|
+
*/
|
|
9
|
+
import type { MiniAppPlatform } from './miniapp-renderer';
|
|
10
|
+
/**
|
|
11
|
+
* 编译结果
|
|
12
|
+
*/
|
|
13
|
+
export interface MiniAppCompileResult {
|
|
14
|
+
/** 转换后的模板字符串 */
|
|
15
|
+
template: string;
|
|
16
|
+
/** 提取的样式内容 */
|
|
17
|
+
style: string;
|
|
18
|
+
/** 提取的脚本内容 */
|
|
19
|
+
script: string;
|
|
20
|
+
/** 从脚本中提取的数据对象 */
|
|
21
|
+
data: Record<string, any>;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* 页面配置
|
|
25
|
+
*/
|
|
26
|
+
export interface MiniAppPageConfig {
|
|
27
|
+
/** Lyt.js 模板字符串 */
|
|
28
|
+
template: string;
|
|
29
|
+
/** 页面初始数据 */
|
|
30
|
+
data?: Record<string, any>;
|
|
31
|
+
/** 页面方法 */
|
|
32
|
+
methods?: Record<string, Function>;
|
|
33
|
+
/** 页面加载回调 */
|
|
34
|
+
onLoad?: (...args: any[]) => void;
|
|
35
|
+
/** 页面显示回调 */
|
|
36
|
+
onShow?: (...args: any[]) => void;
|
|
37
|
+
/** 页面初次渲染完成回调 */
|
|
38
|
+
onReady?: (...args: any[]) => void;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* 页面编译输出
|
|
42
|
+
*/
|
|
43
|
+
export interface MiniAppPageOutput {
|
|
44
|
+
/** WXML 模板文件内容 */
|
|
45
|
+
wxml: string;
|
|
46
|
+
/** WXSS 样式文件内容 */
|
|
47
|
+
wxss: string;
|
|
48
|
+
/** JS 逻辑文件内容 */
|
|
49
|
+
js: string;
|
|
50
|
+
/** JSON 配置文件内容 */
|
|
51
|
+
json: string;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* 组件配置
|
|
55
|
+
*/
|
|
56
|
+
export interface MiniAppComponentConfig {
|
|
57
|
+
/** Lyt.js 模板字符串 */
|
|
58
|
+
template: string;
|
|
59
|
+
/** 组件属性定义 */
|
|
60
|
+
props?: string[] | Record<string, any>;
|
|
61
|
+
/** 组件内部数据 */
|
|
62
|
+
data?: Record<string, any>;
|
|
63
|
+
/** 组件方法 */
|
|
64
|
+
methods?: Record<string, Function>;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* 组件编译输出
|
|
68
|
+
*/
|
|
69
|
+
export interface MiniAppComponentOutput {
|
|
70
|
+
/** WXML 模板文件内容 */
|
|
71
|
+
wxml: string;
|
|
72
|
+
/** WXSS 样式文件内容 */
|
|
73
|
+
wxss: string;
|
|
74
|
+
/** JS 逻辑文件内容 */
|
|
75
|
+
js: string;
|
|
76
|
+
/** JSON 配置文件内容 */
|
|
77
|
+
json: string;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* MiniAppCompiler - 小程序编译器
|
|
81
|
+
*
|
|
82
|
+
* 将 Lyt.js 模板语法编译为小程序模板语法。
|
|
83
|
+
* 支持微信、支付宝、字节跳动三个平台。
|
|
84
|
+
*
|
|
85
|
+
* 使用示例:
|
|
86
|
+
* ```ts
|
|
87
|
+
* const compiler = new MiniAppCompiler();
|
|
88
|
+
*
|
|
89
|
+
* // 编译模板
|
|
90
|
+
* const result = compiler.compile(
|
|
91
|
+
* '<div lyt:if="show" @click="handleClick">{{ message }}</div>',
|
|
92
|
+
* 'wechat'
|
|
93
|
+
* );
|
|
94
|
+
* console.log(result.template);
|
|
95
|
+
* // => '<view wx:if="{{show}}" bindtap="handleClick">{{message}}</view>'
|
|
96
|
+
*
|
|
97
|
+
* // 编译页面
|
|
98
|
+
* const page = compiler.compilePage({
|
|
99
|
+
* template: '<view>{{title}}</view>',
|
|
100
|
+
* data: { title: 'Hello' },
|
|
101
|
+
* methods: { handleClick() { console.log('clicked'); } }
|
|
102
|
+
* }, 'wechat');
|
|
103
|
+
* ```
|
|
104
|
+
*/
|
|
105
|
+
export declare class MiniAppCompiler {
|
|
106
|
+
/**
|
|
107
|
+
* 编译模板
|
|
108
|
+
*
|
|
109
|
+
* 将 Lyt.js 模板字符串编译为小程序模板字符串。
|
|
110
|
+
* 同时提取 <style> 和 <script> 标签内容。
|
|
111
|
+
*
|
|
112
|
+
* @param template Lyt.js 模板字符串
|
|
113
|
+
* @param platform 目标小程序平台
|
|
114
|
+
* @returns 编译结果(模板、样式、脚本、数据)
|
|
115
|
+
*/
|
|
116
|
+
compile(template: string, platform: MiniAppPlatform): MiniAppCompileResult;
|
|
117
|
+
/**
|
|
118
|
+
* 编译页面
|
|
119
|
+
*
|
|
120
|
+
* 将页面配置编译为小程序页面文件(wxml / wxss / js / json)。
|
|
121
|
+
*
|
|
122
|
+
* @param page 页面配置
|
|
123
|
+
* @param platform 目标小程序平台
|
|
124
|
+
* @returns 页面编译输出
|
|
125
|
+
*/
|
|
126
|
+
compilePage(page: MiniAppPageConfig, platform: MiniAppPlatform): MiniAppPageOutput;
|
|
127
|
+
/**
|
|
128
|
+
* 编译组件
|
|
129
|
+
*
|
|
130
|
+
* 将组件配置编译为小程序组件文件(wxml / wxss / js / json)。
|
|
131
|
+
*
|
|
132
|
+
* @param component 组件配置
|
|
133
|
+
* @param platform 目标小程序平台
|
|
134
|
+
* @returns 组件编译输出
|
|
135
|
+
*/
|
|
136
|
+
compileComponent(component: MiniAppComponentConfig, platform: MiniAppPlatform): MiniAppComponentOutput;
|
|
137
|
+
/**
|
|
138
|
+
* 转换模板语法
|
|
139
|
+
*
|
|
140
|
+
* 处理以下转换:
|
|
141
|
+
* - 标签名映射(div -> view 等)
|
|
142
|
+
* - 条件渲染指令(lyt:if / lyt:else -> wx:if / wx:else 等)
|
|
143
|
+
* - 列表渲染指令(lyt:each -> wx:for 等)
|
|
144
|
+
* - 事件绑定(@click -> bindtap 等)
|
|
145
|
+
* - 双向绑定(:value -> model:value 等)
|
|
146
|
+
* - 插槽(slot -> slot/name="xxx")
|
|
147
|
+
* - 组件引用(ref -> id)
|
|
148
|
+
* - 显示/隐藏(lyt:show -> hidden)
|
|
149
|
+
* - 插值表达式({{ expr }})
|
|
150
|
+
*/
|
|
151
|
+
private _transformTemplate;
|
|
152
|
+
/**
|
|
153
|
+
* 转换 HTML 标签为小程序组件标签
|
|
154
|
+
*/
|
|
155
|
+
private _transformTags;
|
|
156
|
+
/**
|
|
157
|
+
* 转换条件渲染指令
|
|
158
|
+
*
|
|
159
|
+
* lyt:if="condition" -> wx:if="{{condition}}"
|
|
160
|
+
* lyt:elif="condition" -> wx:elif="{{condition}}"
|
|
161
|
+
* lyt:else -> wx:else
|
|
162
|
+
* v-if="condition" -> wx:if="{{condition}}"
|
|
163
|
+
* v-else-if="condition" -> wx:elif="{{condition}}"
|
|
164
|
+
* v-else -> wx:else
|
|
165
|
+
*/
|
|
166
|
+
private _transformConditional;
|
|
167
|
+
/**
|
|
168
|
+
* 转换列表渲染指令
|
|
169
|
+
*
|
|
170
|
+
* lyt:each="item in list" -> wx:for="{{list}}" wx:for-item="item" wx:key="item"
|
|
171
|
+
* lyt:each="(item, index) in list" -> wx:for="{{list}}" wx:for-item="item" wx:for-index="index" wx:key="item"
|
|
172
|
+
* v-for="item in list" -> wx:for="{{list}}" wx:for-item="item" wx:key="item"
|
|
173
|
+
*/
|
|
174
|
+
private _transformIteration;
|
|
175
|
+
/**
|
|
176
|
+
* 转换事件绑定
|
|
177
|
+
*
|
|
178
|
+
* @click="handler" -> bindtap="handler"(微信/字节)
|
|
179
|
+
* @click="handler" -> onTap="handler"(支付宝)
|
|
180
|
+
* @click.stop="handler" -> catchtap="handler"(阻止冒泡)
|
|
181
|
+
* @click.capture="handler" -> capture-bind:tap="handler"(捕获阶段)
|
|
182
|
+
*/
|
|
183
|
+
private _transformEvents;
|
|
184
|
+
/**
|
|
185
|
+
* 转换双向绑定
|
|
186
|
+
*
|
|
187
|
+
* :value="data" -> model:value="{{data}}"
|
|
188
|
+
* v-model="data" -> model:value="{{data}}"
|
|
189
|
+
*/
|
|
190
|
+
private _transformModelBindings;
|
|
191
|
+
/**
|
|
192
|
+
* 转换插槽
|
|
193
|
+
*
|
|
194
|
+
* <slot> -> <slot></slot>
|
|
195
|
+
* <slot name="header"> -> <slot name="header"></slot>
|
|
196
|
+
* <slot name="header">default content</slot> -> <slot name="header">default content</slot>
|
|
197
|
+
*/
|
|
198
|
+
private _transformSlots;
|
|
199
|
+
/**
|
|
200
|
+
* 转换组件引用
|
|
201
|
+
*
|
|
202
|
+
* ref="myRef" -> id="myRef"
|
|
203
|
+
*/
|
|
204
|
+
private _transformRefs;
|
|
205
|
+
/**
|
|
206
|
+
* 转换显示/隐藏
|
|
207
|
+
*
|
|
208
|
+
* lyt:show="condition" -> hidden="{{!condition}}"
|
|
209
|
+
* v-show="condition" -> hidden="{{!condition}}"
|
|
210
|
+
*/
|
|
211
|
+
private _transformShow;
|
|
212
|
+
/**
|
|
213
|
+
* 转换属性绑定
|
|
214
|
+
*
|
|
215
|
+
* :class="expr" -> class="{{expr}}"
|
|
216
|
+
* :style="expr" -> style="{{expr}}"
|
|
217
|
+
* :src="expr" -> src="{{expr}}"
|
|
218
|
+
* :disabled="expr" -> disabled="{{expr}}"
|
|
219
|
+
* 其他 :attr="expr" -> attr="{{expr}}"
|
|
220
|
+
*/
|
|
221
|
+
private _transformAttributeBindings;
|
|
222
|
+
/**
|
|
223
|
+
* 清理剩余的 lyt: 前缀指令
|
|
224
|
+
*
|
|
225
|
+
* 移除所有未被处理的 lyt:xxx 指令属性。
|
|
226
|
+
*/
|
|
227
|
+
private _cleanupLytDirectives;
|
|
228
|
+
/**
|
|
229
|
+
* 从模板中提取 <style> 和 <script> 标签内容
|
|
230
|
+
*
|
|
231
|
+
* @param template 原始模板字符串
|
|
232
|
+
* @returns 清理后的模板、样式内容、脚本内容
|
|
233
|
+
*/
|
|
234
|
+
private _extractTags;
|
|
235
|
+
/**
|
|
236
|
+
* 从脚本内容中提取 data 对象
|
|
237
|
+
*
|
|
238
|
+
* 支持以下格式:
|
|
239
|
+
* - data: { key: value }
|
|
240
|
+
* - data() { return { key: value } }
|
|
241
|
+
* - const data = { key: value }
|
|
242
|
+
* - export default { data() { ... } }
|
|
243
|
+
*/
|
|
244
|
+
private _extractData;
|
|
245
|
+
/**
|
|
246
|
+
* 简单对象解析器
|
|
247
|
+
*
|
|
248
|
+
* 解析简单的 JavaScript 对象字面量,提取键值对。
|
|
249
|
+
* 仅支持字符串、数字、布尔值和简单表达式。
|
|
250
|
+
*/
|
|
251
|
+
private _parseSimpleObject;
|
|
252
|
+
/**
|
|
253
|
+
* 生成页面 JS 代码
|
|
254
|
+
*/
|
|
255
|
+
private _generatePageJs;
|
|
256
|
+
/**
|
|
257
|
+
* 生成组件 JS 代码
|
|
258
|
+
*/
|
|
259
|
+
private _generateComponentJs;
|
|
260
|
+
/**
|
|
261
|
+
* 首字母大写
|
|
262
|
+
*/
|
|
263
|
+
private _capitalize;
|
|
264
|
+
/**
|
|
265
|
+
* 从函数字符串中提取参数名
|
|
266
|
+
*/
|
|
267
|
+
private _extractParamNames;
|
|
268
|
+
}
|
|
269
|
+
//# sourceMappingURL=miniapp-compiler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"miniapp-compiler.d.ts","sourceRoot":"","sources":["../../../src/miniapp/miniapp-compiler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* miniapp-event-bridge.ts - 小程序事件桥接层
|
|
3
|
+
*
|
|
4
|
+
* 提供小程序与 Lyt.js 之间的事件系统桥接,处理不同平台的事件差异。
|
|
5
|
+
* 支持微信、支付宝、字节跳动三个平台的事件名标准化、
|
|
6
|
+
* 事件参数解析、数据绑定和自定义事件桥接。
|
|
7
|
+
* 纯原生零依赖 TypeScript 实现。
|
|
8
|
+
*/
|
|
9
|
+
import type { MiniAppPlatform } from './miniapp-renderer';
|
|
10
|
+
/**
|
|
11
|
+
* 小程序原生事件对象
|
|
12
|
+
*/
|
|
13
|
+
export interface MiniAppNativeEvent {
|
|
14
|
+
/** 事件类型 */
|
|
15
|
+
type: string;
|
|
16
|
+
/** 时间戳 */
|
|
17
|
+
timeStamp: number;
|
|
18
|
+
/** 事件目标 */
|
|
19
|
+
target: {
|
|
20
|
+
id: string;
|
|
21
|
+
dataset: Record<string, any>;
|
|
22
|
+
};
|
|
23
|
+
/** 当前目标(冒泡路径上的当前元素) */
|
|
24
|
+
currentTarget: {
|
|
25
|
+
id: string;
|
|
26
|
+
dataset: Record<string, any>;
|
|
27
|
+
};
|
|
28
|
+
/** 事件详情数据 */
|
|
29
|
+
detail: Record<string, any>;
|
|
30
|
+
/** 标记事件是否可冒泡 */
|
|
31
|
+
bubbles: boolean;
|
|
32
|
+
/** 标记事件是否可取消 */
|
|
33
|
+
cancelable: boolean;
|
|
34
|
+
/** 是否已调用过 preventDefault */
|
|
35
|
+
defaultPrevented: boolean;
|
|
36
|
+
/** 是否已阻止冒泡 */
|
|
37
|
+
propagationStopped: boolean;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* 解析后的事件参数
|
|
41
|
+
*/
|
|
42
|
+
export interface ParsedEventArgs {
|
|
43
|
+
/** 原生事件对象 */
|
|
44
|
+
nativeEvent: MiniAppNativeEvent;
|
|
45
|
+
/** 事件详情数据 */
|
|
46
|
+
detail: Record<string, any>;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* 数据绑定器
|
|
50
|
+
*/
|
|
51
|
+
export interface DataBinder {
|
|
52
|
+
/** 获取数据 */
|
|
53
|
+
get: () => any;
|
|
54
|
+
/** 设置数据 */
|
|
55
|
+
set: (value: any) => void;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* 事件处理器映射
|
|
59
|
+
*/
|
|
60
|
+
export type BridgeHandlerMap = Record<string, (...args: any[]) => void>;
|
|
61
|
+
/**
|
|
62
|
+
* MiniAppEventBridge - 小程序事件桥接层
|
|
63
|
+
*
|
|
64
|
+
* 负责在不同平台的小程序与 Lyt.js 之间桥接事件系统。
|
|
65
|
+
* 处理事件名标准化、参数解析、数据绑定和自定义事件。
|
|
66
|
+
*
|
|
67
|
+
* 使用示例:
|
|
68
|
+
* ```ts
|
|
69
|
+
* const bridge = new MiniAppEventBridge('wechat');
|
|
70
|
+
*
|
|
71
|
+
* // 标准化事件名
|
|
72
|
+
* bridge.normalizeEvent('click'); // => 'tap'
|
|
73
|
+
*
|
|
74
|
+
* // 创建桥接处理器
|
|
75
|
+
* const handlers = bridge.createBridgeHandler('my-component');
|
|
76
|
+
* // handlers.bindtap, handlers.onTap, ...
|
|
77
|
+
*
|
|
78
|
+
* // 创建数据绑定器
|
|
79
|
+
* const binder = bridge.createDataBinder('formData.name');
|
|
80
|
+
* binder.set('Hello'); // => this.setData({ 'formData.name': 'Hello' })
|
|
81
|
+
* ```
|
|
82
|
+
*/
|
|
83
|
+
export declare class MiniAppEventBridge {
|
|
84
|
+
/** 当前平台 */
|
|
85
|
+
private _platform;
|
|
86
|
+
/** 组件实例引用(用于 setData 等操作) */
|
|
87
|
+
private _componentInstance;
|
|
88
|
+
/** 自定义事件监听器映射 */
|
|
89
|
+
private _customEventListeners;
|
|
90
|
+
/** 事件冒泡状态 */
|
|
91
|
+
private _bubblingEnabled;
|
|
92
|
+
/** 事件捕获状态 */
|
|
93
|
+
private _capturingEnabled;
|
|
94
|
+
/**
|
|
95
|
+
* 创建事件桥接实例
|
|
96
|
+
*
|
|
97
|
+
* @param platform 小程序平台
|
|
98
|
+
* @param componentInstance 组件实例引用(可选,用于 setData)
|
|
99
|
+
*/
|
|
100
|
+
constructor(platform: MiniAppPlatform, componentInstance?: any);
|
|
101
|
+
/**
|
|
102
|
+
* 事件名标准化
|
|
103
|
+
*
|
|
104
|
+
* 将 Lyt.js / DOM 事件名转换为对应平台的小程序事件名。
|
|
105
|
+
*
|
|
106
|
+
* @example
|
|
107
|
+
* normalizeEvent('click', 'wechat') // => 'tap'
|
|
108
|
+
* normalizeEvent('click', 'alipay') // => 'tap'
|
|
109
|
+
* normalizeEvent('touchstart', 'alipay') // => 'touchStart'
|
|
110
|
+
*
|
|
111
|
+
* @param lytEvent Lyt.js 事件名
|
|
112
|
+
* @param platform 目标平台(可选,使用实例平台)
|
|
113
|
+
* @returns 标准化后的小程序事件名
|
|
114
|
+
*/
|
|
115
|
+
normalizeEvent(lytEvent: string, platform?: MiniAppPlatform): string;
|
|
116
|
+
/**
|
|
117
|
+
* 生成事件绑定属性名
|
|
118
|
+
*
|
|
119
|
+
* @param lytEvent Lyt.js 事件名
|
|
120
|
+
* @param options 选项:capture(捕获阶段)、stop(阻止冒泡)
|
|
121
|
+
* @returns 事件绑定属性名(如 'bindtap', 'catchtap', 'capture-bind:tap')
|
|
122
|
+
*/
|
|
123
|
+
getBindName(lytEvent: string, options?: {
|
|
124
|
+
capture?: boolean;
|
|
125
|
+
stop?: boolean;
|
|
126
|
+
}): string;
|
|
127
|
+
/**
|
|
128
|
+
* 解析事件参数
|
|
129
|
+
*
|
|
130
|
+
* 将小程序原生事件参数解析为统一格式。
|
|
131
|
+
* 不同平台的事件对象结构略有差异,此方法统一处理。
|
|
132
|
+
*
|
|
133
|
+
* @param args 小程序事件回调的参数列表
|
|
134
|
+
* @param platform 目标平台(可选,使用实例平台)
|
|
135
|
+
* @returns 解析后的事件参数(nativeEvent + detail)
|
|
136
|
+
*/
|
|
137
|
+
parseEventArgs(args: any[], platform?: MiniAppPlatform): ParsedEventArgs;
|
|
138
|
+
/**
|
|
139
|
+
* 标准化事件目标对象
|
|
140
|
+
*/
|
|
141
|
+
private _normalizeTarget;
|
|
142
|
+
/**
|
|
143
|
+
* 创建数据绑定器
|
|
144
|
+
*
|
|
145
|
+
* 创建一个 get/set 对,用于读写组件数据路径对应的值。
|
|
146
|
+
* setter 会调用小程序的 setData 方法进行响应式更新。
|
|
147
|
+
*
|
|
148
|
+
* @example
|
|
149
|
+
* const binder = bridge.createDataBinder('user.name');
|
|
150
|
+
* binder.set('Alice'); // => this.setData({ 'user.name': 'Alice' })
|
|
151
|
+
* binder.get(); // => 'Alice'
|
|
152
|
+
*
|
|
153
|
+
* @param dataPath 数据路径(支持点号分隔的嵌套路径)
|
|
154
|
+
* @returns 数据绑定器(get / set)
|
|
155
|
+
*/
|
|
156
|
+
createDataBinder(dataPath: string): DataBinder;
|
|
157
|
+
/**
|
|
158
|
+
* 获取嵌套对象的值
|
|
159
|
+
*/
|
|
160
|
+
private _getNestedValue;
|
|
161
|
+
/**
|
|
162
|
+
* 设置嵌套对象的值
|
|
163
|
+
*/
|
|
164
|
+
private _setNestedValue;
|
|
165
|
+
/**
|
|
166
|
+
* 创建桥接事件处理器
|
|
167
|
+
*
|
|
168
|
+
* 为指定组件创建一组桥接事件处理函数,可直接绑定到小程序模板中。
|
|
169
|
+
* 每个处理函数会自动解析事件参数并调用对应的 Lyt.js 回调。
|
|
170
|
+
*
|
|
171
|
+
* @example
|
|
172
|
+
* const handlers = bridge.createBridgeHandler('my-button');
|
|
173
|
+
* // handlers.bindtap = function(e) { ... }
|
|
174
|
+
* // handlers.onTap = function(e) { ... }(支付宝)
|
|
175
|
+
*
|
|
176
|
+
* @param componentName 组件名称
|
|
177
|
+
* @returns 事件处理器映射
|
|
178
|
+
*/
|
|
179
|
+
createBridgeHandler(componentName: string): Record<string, Function>;
|
|
180
|
+
/**
|
|
181
|
+
* 注册自定义事件监听器
|
|
182
|
+
*
|
|
183
|
+
* @param eventName 事件名
|
|
184
|
+
* @param listener 监听器函数
|
|
185
|
+
*/
|
|
186
|
+
on(eventName: string, listener: Function): void;
|
|
187
|
+
/**
|
|
188
|
+
* 移除自定义事件监听器
|
|
189
|
+
*
|
|
190
|
+
* @param eventName 事件名
|
|
191
|
+
* @param listener 监听器函数
|
|
192
|
+
*/
|
|
193
|
+
off(eventName: string, listener?: Function): void;
|
|
194
|
+
/**
|
|
195
|
+
* 触发自定义事件($emit 桥接)
|
|
196
|
+
*
|
|
197
|
+
* 将 Lyt.js 的 $emit 调用桥接为小程序的 triggerEvent。
|
|
198
|
+
*
|
|
199
|
+
* @param componentName 组件名称
|
|
200
|
+
* @param eventName 事件名
|
|
201
|
+
* @param detail 事件数据
|
|
202
|
+
* @param nativeEvent 原生事件(可选)
|
|
203
|
+
*/
|
|
204
|
+
private _emitCustomEvent;
|
|
205
|
+
/**
|
|
206
|
+
* 模拟 $emit(供 Lyt.js 组件调用)
|
|
207
|
+
*
|
|
208
|
+
* @param eventName 事件名
|
|
209
|
+
* @param detail 事件数据
|
|
210
|
+
*/
|
|
211
|
+
$emit(eventName: string, detail?: Record<string, any>): void;
|
|
212
|
+
/**
|
|
213
|
+
* 启用事件冒泡
|
|
214
|
+
*/
|
|
215
|
+
enableBubbling(): void;
|
|
216
|
+
/**
|
|
217
|
+
* 禁用事件冒泡
|
|
218
|
+
*/
|
|
219
|
+
disableBubbling(): void;
|
|
220
|
+
/**
|
|
221
|
+
* 启用事件捕获
|
|
222
|
+
*/
|
|
223
|
+
enableCapturing(): void;
|
|
224
|
+
/**
|
|
225
|
+
* 禁用事件捕获
|
|
226
|
+
*/
|
|
227
|
+
disableCapturing(): void;
|
|
228
|
+
/**
|
|
229
|
+
* 判断事件冒泡是否启用
|
|
230
|
+
*/
|
|
231
|
+
isBubblingEnabled(): boolean;
|
|
232
|
+
/**
|
|
233
|
+
* 判断事件捕获是否启用
|
|
234
|
+
*/
|
|
235
|
+
isCapturingEnabled(): boolean;
|
|
236
|
+
/**
|
|
237
|
+
* 设置组件实例引用
|
|
238
|
+
*
|
|
239
|
+
* @param instance 小程序组件实例
|
|
240
|
+
*/
|
|
241
|
+
setComponentInstance(instance: any): void;
|
|
242
|
+
/**
|
|
243
|
+
* 获取组件实例引用
|
|
244
|
+
*/
|
|
245
|
+
getComponentInstance(): any;
|
|
246
|
+
/**
|
|
247
|
+
* 获取当前平台
|
|
248
|
+
*/
|
|
249
|
+
getPlatform(): MiniAppPlatform;
|
|
250
|
+
/**
|
|
251
|
+
* 首字母大写
|
|
252
|
+
*/
|
|
253
|
+
private _capitalize;
|
|
254
|
+
}
|
|
255
|
+
//# sourceMappingURL=miniapp-event-bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"miniapp-event-bridge.d.ts","sourceRoot":"","sources":["../../../src/miniapp/miniapp-event-bridge.ts"],"names":[],"mappings":"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"}
|