@lytjs/renderer 5.0.1 → 6.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.
Files changed (92) hide show
  1. package/README.md +371 -204
  2. package/dist/dom.cjs +12 -1
  3. package/dist/dom.cjs.map +1 -0
  4. package/dist/dom.d.cts +1 -0
  5. package/dist/dom.d.ts +1 -0
  6. package/dist/dom.mjs +3 -1
  7. package/dist/dom.mjs.map +1 -0
  8. package/dist/index.cjs +3312 -1
  9. package/dist/index.cjs.map +1 -0
  10. package/dist/index.d.cts +1004 -0
  11. package/dist/index.d.ts +1004 -0
  12. package/dist/index.mjs +3190 -1
  13. package/dist/index.mjs.map +1 -0
  14. package/dist/ssr.cjs +310 -1
  15. package/dist/ssr.cjs.map +1 -0
  16. package/dist/ssr.d.cts +21 -0
  17. package/dist/ssr.d.ts +21 -0
  18. package/dist/ssr.mjs +308 -1
  19. package/dist/ssr.mjs.map +1 -0
  20. package/package.json +35 -58
  21. package/dist/miniapp.cjs +0 -27
  22. package/dist/miniapp.mjs +0 -27
  23. package/dist/native.cjs +0 -1
  24. package/dist/native.mjs +0 -1
  25. package/dist/types/create-renderer.d.ts +0 -20
  26. package/dist/types/create-renderer.d.ts.map +0 -1
  27. package/dist/types/dom/dom-ops.d.ts +0 -74
  28. package/dist/types/dom/dom-ops.d.ts.map +0 -1
  29. package/dist/types/dom/dom-renderer.d.ts +0 -243
  30. package/dist/types/dom/dom-renderer.d.ts.map +0 -1
  31. package/dist/types/dom/index.d.ts +0 -17
  32. package/dist/types/dom/index.d.ts.map +0 -1
  33. package/dist/types/dom/patch-events.d.ts +0 -123
  34. package/dist/types/dom/patch-events.d.ts.map +0 -1
  35. package/dist/types/dom/patch-props.d.ts +0 -118
  36. package/dist/types/dom/patch-props.d.ts.map +0 -1
  37. package/dist/types/index.d.ts +0 -36
  38. package/dist/types/index.d.ts.map +0 -1
  39. package/dist/types/miniapp/api-adapter.d.ts +0 -514
  40. package/dist/types/miniapp/api-adapter.d.ts.map +0 -1
  41. package/dist/types/miniapp/index.d.ts +0 -34
  42. package/dist/types/miniapp/index.d.ts.map +0 -1
  43. package/dist/types/miniapp/miniapp-compiler.d.ts +0 -269
  44. package/dist/types/miniapp/miniapp-compiler.d.ts.map +0 -1
  45. package/dist/types/miniapp/miniapp-event-bridge.d.ts +0 -255
  46. package/dist/types/miniapp/miniapp-event-bridge.d.ts.map +0 -1
  47. package/dist/types/miniapp/miniapp-lifecycle.d.ts +0 -224
  48. package/dist/types/miniapp/miniapp-lifecycle.d.ts.map +0 -1
  49. package/dist/types/miniapp/miniapp-renderer.d.ts +0 -269
  50. package/dist/types/miniapp/miniapp-renderer.d.ts.map +0 -1
  51. package/dist/types/miniapp/miniapp-utils.d.ts +0 -168
  52. package/dist/types/miniapp/miniapp-utils.d.ts.map +0 -1
  53. package/dist/types/miniapp/shared-constants.d.ts +0 -28
  54. package/dist/types/miniapp/shared-constants.d.ts.map +0 -1
  55. package/dist/types/miniapp/style-compiler.d.ts +0 -193
  56. package/dist/types/miniapp/style-compiler.d.ts.map +0 -1
  57. package/dist/types/mount.d.ts +0 -32
  58. package/dist/types/mount.d.ts.map +0 -1
  59. package/dist/types/native/index.d.ts +0 -13
  60. package/dist/types/native/index.d.ts.map +0 -1
  61. package/dist/types/native/native-renderer.d.ts +0 -249
  62. package/dist/types/native/native-renderer.d.ts.map +0 -1
  63. package/dist/types/patch.d.ts +0 -23
  64. package/dist/types/patch.d.ts.map +0 -1
  65. package/dist/types/props.d.ts +0 -19
  66. package/dist/types/props.d.ts.map +0 -1
  67. package/dist/types/renderer-interfaces.d.ts +0 -157
  68. package/dist/types/renderer-interfaces.d.ts.map +0 -1
  69. package/dist/types/shared/abstract-renderer.d.ts +0 -74
  70. package/dist/types/shared/abstract-renderer.d.ts.map +0 -1
  71. package/dist/types/ssr/hydration.d.ts +0 -267
  72. package/dist/types/ssr/hydration.d.ts.map +0 -1
  73. package/dist/types/ssr/index.d.ts +0 -15
  74. package/dist/types/ssr/index.d.ts.map +0 -1
  75. package/dist/types/ssr/ssr-renderer.d.ts +0 -277
  76. package/dist/types/ssr/ssr-renderer.d.ts.map +0 -1
  77. package/dist/types/unmount.d.ts +0 -16
  78. package/dist/types/unmount.d.ts.map +0 -1
  79. package/dist/types/vapor/index.d.ts +0 -18
  80. package/dist/types/vapor/index.d.ts.map +0 -1
  81. package/dist/types/vapor/vapor-compiler.d.ts +0 -76
  82. package/dist/types/vapor/vapor-compiler.d.ts.map +0 -1
  83. package/dist/types/vapor/vapor-component.d.ts +0 -55
  84. package/dist/types/vapor/vapor-component.d.ts.map +0 -1
  85. package/dist/types/vapor/vapor-reactive.d.ts +0 -133
  86. package/dist/types/vapor/vapor-reactive.d.ts.map +0 -1
  87. package/dist/types/vapor/vapor-renderer.d.ts +0 -135
  88. package/dist/types/vapor/vapor-renderer.d.ts.map +0 -1
  89. package/dist/types/vnode.d.ts +0 -203
  90. package/dist/types/vnode.d.ts.map +0 -1
  91. package/dist/vapor.cjs +0 -1
  92. package/dist/vapor.mjs +0 -1
@@ -1,224 +0,0 @@
1
- /**
2
- * miniapp-lifecycle.ts - 小程序生命周期适配器
3
- *
4
- * 将 Lyt.js 的组件生命周期钩子映射为小程序平台的生命周期方法。
5
- * 支持 Page 和 Component 两种模式的包装。
6
- * 纯原生零依赖 TypeScript 实现。
7
- */
8
- import type { MiniAppPlatform } from './miniapp-renderer';
9
- /**
10
- * 生命周期映射条目
11
- */
12
- export interface LifecycleMapping {
13
- /** Lyt.js 生命周期钩子名 */
14
- lytHook: string;
15
- /** 目标平台的生命周期方法名 */
16
- platformHook: string;
17
- /** 映射说明 */
18
- description: string;
19
- /** 是否有直接对应 */
20
- hasDirectMapping: boolean;
21
- }
22
- /**
23
- * 页面生命周期钩子集合
24
- */
25
- export interface PageLifecycleHooks {
26
- onBeforeMount?: (...args: any[]) => void;
27
- onMounted?: (...args: any[]) => void;
28
- onUpdated?: (...args: any[]) => void;
29
- onUnmounted?: (...args: any[]) => void;
30
- onLoad?: (...args: any[]) => void;
31
- onShow?: (...args: any[]) => void;
32
- onReady?: (...args: any[]) => void;
33
- onHide?: (...args: any[]) => void;
34
- onUnload?: (...args: any[]) => void;
35
- onPullDownRefresh?: (...args: any[]) => void;
36
- onReachBottom?: (...args: any[]) => void;
37
- onShareAppMessage?: (...args: any[]) => any;
38
- onError?: (...args: any[]) => void;
39
- [key: string]: Function | undefined;
40
- }
41
- /**
42
- * 组件生命周期钩子集合
43
- */
44
- export interface ComponentLifecycleHooks {
45
- setup?: () => Record<string, any>;
46
- onBeforeMount?: (...args: any[]) => void;
47
- onMounted?: (...args: any[]) => void;
48
- onUpdated?: (...args: any[]) => void;
49
- onUnmounted?: (...args: any[]) => void;
50
- onErrorCaptured?: (err: Error, vm: any, info: string) => boolean | void;
51
- created?: (...args: any[]) => void;
52
- attached?: (...args: any[]) => void;
53
- ready?: (...args: any[]) => void;
54
- moved?: (...args: any[]) => void;
55
- detached?: (...args: any[]) => void;
56
- [key: string]: Function | undefined;
57
- }
58
- /**
59
- * MiniAppLifecycleAdapter - 小程序生命周期适配器
60
- *
61
- * 将 Lyt.js 的组件生命周期钩子映射为小程序平台的生命周期方法。
62
- * 支持 Page 和 Component 两种模式的包装。
63
- *
64
- * 使用示例:
65
- * ```ts
66
- * const adapter = new MiniAppLifecycleAdapter('wechat');
67
- *
68
- * // 映射生命周期钩子名
69
- * adapter.mapLifecycle('onMounted', 'wechat'); // => 'ready'
70
- *
71
- * // 创建页面生命周期
72
- * const pageLifecycles = adapter.createPageLifecycle({
73
- * onMounted() { console.log('mounted'); },
74
- * onUnmounted() { console.log('unmounted'); },
75
- * });
76
- * // => { onReady() { ... }, onUnload() { ... } }
77
- *
78
- * // 包装组件
79
- * const wrappedComponent = adapter.wrapComponent({
80
- * setup() { return { count: 0 }; },
81
- * onMounted() { console.log('ready'); },
82
- * }, 'wechat');
83
- * ```
84
- */
85
- export declare class MiniAppLifecycleAdapter {
86
- /** 当前平台 */
87
- private _platform;
88
- /**
89
- * 创建生命周期适配器
90
- *
91
- * @param platform 小程序平台
92
- */
93
- constructor(platform: MiniAppPlatform);
94
- /**
95
- * 生命周期映射
96
- *
97
- * 将 Lyt.js 的生命周期钩子名映射为小程序平台对应的生命周期方法名。
98
- *
99
- * @example
100
- * mapLifecycle('onMounted', 'wechat') // => 'ready'
101
- * mapLifecycle('onUnmounted', 'wechat') // => 'detached'
102
- * mapLifecycle('onBeforeMount', 'wechat') // => 'created'
103
- * mapLifecycle('setup', 'wechat') // => 'data + attached'
104
- * mapLifecycle('onUpdated', 'wechat') // => '(无直接对应)'
105
- *
106
- * @param lytHook Lyt.js 生命周期钩子名
107
- * @param platform 目标平台(可选,使用实例平台)
108
- * @returns 小程序平台的生命周期方法名
109
- */
110
- mapLifecycle(lytHook: string, _platform?: MiniAppPlatform): string;
111
- /**
112
- * 获取完整的生命周期映射信息
113
- *
114
- * @param lytHook Lyt.js 生命周期钩子名
115
- * @returns 映射信息,未知钩子返回 null
116
- */
117
- getLifecycleMapping(lytHook: string): LifecycleMapping | null;
118
- /**
119
- * 获取所有支持的生命周期映射
120
- *
121
- * @returns 生命周期映射数组
122
- */
123
- getAllMappings(): LifecycleMapping[];
124
- /**
125
- * 创建页面生命周期
126
- *
127
- * 将 Lyt.js 风格的生命周期钩子转换为小程序 Page 的生命周期方法。
128
- *
129
- * @example
130
- * createPageLifecycle({
131
- * onBeforeMount() { console.log('before mount'); },
132
- * onMounted() { console.log('mounted'); },
133
- * onUnmounted() { console.log('unmounted'); },
134
- * onShow() { console.log('show'); },
135
- * })
136
- * // => {
137
- * // onLoad(options) { console.log('before mount'); },
138
- * // onReady() { console.log('mounted'); },
139
- * // onUnload() { console.log('unmounted'); },
140
- * // onShow() { console.log('show'); },
141
- * // }
142
- *
143
- * @param hooks Lyt.js 生命周期钩子映射
144
- * @returns 小程序页面生命周期方法映射
145
- */
146
- createPageLifecycle(hooks: Record<string, Function>): Record<string, Function>;
147
- /**
148
- * 创建组件生命周期
149
- *
150
- * 将 Lyt.js 风格的生命周期钩子转换为小程序 Component 的生命周期方法。
151
- * 组件生命周期放在 lifetimes 对象中。
152
- *
153
- * @example
154
- * createComponentLifecycle({
155
- * setup() { return { count: 0 }; },
156
- * onMounted() { console.log('mounted'); },
157
- * onUnmounted() { console.log('unmounted'); },
158
- * })
159
- * // => {
160
- * // lifetimes: {
161
- * // created() { ... },
162
- * // attached() { ... },
163
- * // ready() { console.log('mounted'); },
164
- * // detached() { console.log('unmounted'); },
165
- * // },
166
- * // data: { count: 0 },
167
- * // }
168
- *
169
- * @param hooks Lyt.js 生命周期钩子映射
170
- * @returns 小程序组件生命周期方法映射(包含 lifetimes 和可能的 data)
171
- */
172
- createComponentLifecycle(hooks: Record<string, Function>): Record<string, any>;
173
- /**
174
- * 包装组件为小程序格式
175
- *
176
- * 将 Lyt.js 组件对象包装为小程序 Component() 所需的格式。
177
- * 自动处理生命周期映射、data 提取、方法合并等。
178
- *
179
- * @example
180
- * wrapComponent({
181
- * setup() {
182
- * return { count: 0, message: 'Hello' };
183
- * },
184
- * data: { extra: 'data' },
185
- * methods: {
186
- * increment() { this.setData({ count: this.data.count + 1 }); },
187
- * },
188
- * onMounted() {
189
- * console.log('Component ready');
190
- * },
191
- * onUnmounted() {
192
- * console.log('Component detached');
193
- * },
194
- * }, 'wechat')
195
- * // => {
196
- * // data: { count: 0, message: 'Hello', extra: 'data' },
197
- * // methods: { increment() { ... } },
198
- * // lifetimes: {
199
- * // ready() { console.log('Component ready'); },
200
- * // detached() { console.log('Component detached'); },
201
- * // },
202
- * // }
203
- *
204
- * @param component Lyt.js 组件对象
205
- * @param platform 目标平台(可选,使用实例平台)
206
- * @returns 小程序 Component 格式的组件定义
207
- */
208
- wrapComponent(component: any, platform?: MiniAppPlatform): any;
209
- /**
210
- * 获取当前平台
211
- */
212
- getPlatform(): MiniAppPlatform;
213
- /**
214
- * 设置平台
215
- */
216
- setPlatform(platform: MiniAppPlatform): void;
217
- /**
218
- * 获取平台特定的生命周期名称差异
219
- *
220
- * 返回当前平台与标准微信小程序生命周期的差异说明。
221
- */
222
- getPlatformLifecycleDifferences(platform?: MiniAppPlatform): Record<string, string>;
223
- }
224
- //# sourceMappingURL=miniapp-lifecycle.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"miniapp-lifecycle.d.ts","sourceRoot":"","sources":["../../../src/miniapp/miniapp-lifecycle.ts"],"names":[],"mappings":"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"}
@@ -1,269 +0,0 @@
1
- /**
2
- * MiniAppRenderer - 小程序渲染器原型
3
- *
4
- * 将 VNode 编译为小程序模板描述(可用于微信/支付宝/字节跳动小程序)。
5
- * 纯原生零依赖 TypeScript 实现。
6
- *
7
- * 设计思路:
8
- * - 不直接操作 DOM,而是生成描述性的 MiniAppNode 树
9
- * - MiniAppNode 可序列化为 WXML / AXML / TTML 模板字符串
10
- * - 提供 Lyt.js 模板语法到小程序模板语法的转换
11
- * - 支持条件渲染(wx:if / a:if / tt:if)、列表渲染(wx:for / a:for / tt:for)
12
- */
13
- import type { LytRenderer } from '../renderer-interfaces';
14
- /**
15
- * 小程序模板节点描述
16
- *
17
- * 描述一棵小程序模板组件树,可序列化为各平台模板字符串。
18
- */
19
- export interface MiniAppNode {
20
- /** 标签名(如 'view', 'text', 'image') */
21
- tag: string;
22
- /** 属性集合 */
23
- attrs: Record<string, string>;
24
- /** 子节点列表 */
25
- children: MiniAppNode[];
26
- /** 文本内容(文本节点使用) */
27
- text?: string;
28
- /** wx:if 条件表达式 */
29
- wxIf?: string;
30
- /** wx:for 列表数据源 */
31
- wxFor?: string;
32
- /** wx:key 列表项标识 */
33
- wxForKey?: string;
34
- /** 绑定事件(如 bindtap="handleTap") */
35
- bindEvents: Record<string, string>;
36
- /** 双向绑定(如 model:value="name") */
37
- modelBindings: Record<string, string>;
38
- /** 父节点引用(内部使用,不序列化) */
39
- _parent?: MiniAppNode;
40
- }
41
- /**
42
- * MiniAppRenderer - 小程序渲染器
43
- *
44
- * 实现 LytRenderer 接口,将 VNode 映射为小程序模板描述树。
45
- * 不依赖任何外部库,纯 TypeScript 实现。
46
- *
47
- * 使用示例:
48
- * ```ts
49
- * import { miniAppRenderer } from './miniapp/miniapp-renderer'
50
- *
51
- * // 创建小程序节点
52
- * const view = miniAppRenderer.createElement('div')
53
- * miniAppRenderer.setAttribute(view, 'class', 'container')
54
- *
55
- * const text = miniAppRenderer.createText('Hello MiniApp')
56
- * miniAppRenderer.insert(view, text)
57
- *
58
- * // 序列化为 WXML(微信小程序模板)
59
- * const wxml = miniAppRenderer.serializeToWXML(view)
60
- * ```
61
- */
62
- export declare class MiniAppRenderer implements LytRenderer {
63
- /**
64
- * 创建小程序元素节点
65
- * @param tag HTML 标签名(如 'div', 'span')
66
- * @returns MiniAppNode 描述对象
67
- */
68
- createElement(tag: string): MiniAppNode;
69
- /**
70
- * 创建文本节点
71
- * @param text 文本内容
72
- * @returns tag 为 '__text__' 的 MiniAppNode
73
- */
74
- createText(text: string): MiniAppNode;
75
- /**
76
- * 创建注释节点
77
- * @param text 注释内容
78
- * @returns tag 为 '__comment__' 的 MiniAppNode
79
- */
80
- createComment(text: string): MiniAppNode;
81
- /**
82
- * 设置元素属性
83
- * @param el 小程序节点
84
- * @param key 属性名
85
- * @param val 属性值
86
- */
87
- setAttribute(el: MiniAppNode, key: string, val: any): void;
88
- /**
89
- * 移除元素属性
90
- * @param el 小程序节点
91
- * @param key 属性名
92
- */
93
- removeAttribute(el: MiniAppNode, key: string): void;
94
- /**
95
- * 设置元素样式
96
- * @param el 小程序节点
97
- * @param style 样式对象
98
- */
99
- setStyle(el: MiniAppNode, style: object): void;
100
- /**
101
- * 设置元素 class
102
- * @param el 小程序节点
103
- * @param cls class 值(字符串或对象)
104
- */
105
- setClass(el: MiniAppNode, cls: string | object): void;
106
- /**
107
- * 插入子节点
108
- * @param parent 父节点
109
- * @param child 子节点
110
- * @param ref 参考节点(插入到其前面),可选
111
- */
112
- insert(parent: MiniAppNode, child: MiniAppNode, ref?: MiniAppNode): void;
113
- /**
114
- * 移除节点
115
- * @param child 要移除的节点
116
- */
117
- remove(child: MiniAppNode): void;
118
- /**
119
- * 替换子节点
120
- * @param parent 父节点
121
- * @param oldChild 被替换的旧节点
122
- * @param newChild 替换的新节点
123
- */
124
- replace(parent: MiniAppNode, oldChild: MiniAppNode, newChild: MiniAppNode): void;
125
- /**
126
- * 添加事件监听器
127
- * @param el 小程序节点
128
- * @param event DOM 事件名(如 'click')
129
- * @param handler 事件处理函数
130
- * @param options 事件选项(可选)
131
- */
132
- addEventListener(el: MiniAppNode, event: string, handler: Function, _options?: any): void;
133
- /**
134
- * 移除事件监听器
135
- * @param el 小程序节点
136
- * @param event DOM 事件名
137
- * @param handler 事件处理函数
138
- */
139
- removeEventListener(el: MiniAppNode, event: string, _handler: Function): void;
140
- /**
141
- * 在下一个微任务中执行回调
142
- * @param cb 回调函数
143
- */
144
- nextTick(cb: Function): void;
145
- /**
146
- * 获取父节点
147
- * @param el 小程序节点
148
- * @returns 父节点,无父节点时返回 null
149
- */
150
- parentNode(el: MiniAppNode): MiniAppNode | null;
151
- /**
152
- * 获取下一个兄弟节点
153
- * @param el 小程序节点
154
- * @returns 下一个兄弟节点,无时返回 null
155
- */
156
- nextSibling(el: MiniAppNode): MiniAppNode | null;
157
- /**
158
- * 设置文本节点内容
159
- * @param node 文本节点
160
- * @param text 文本内容
161
- */
162
- setText(node: MiniAppNode, text: string): void;
163
- /**
164
- * 更新元素属性(diff 算法调用)
165
- *
166
- * @param el 小程序节点
167
- * @param key 属性名
168
- * @param prevValue 旧属性值
169
- * @param nextValue 新属性值
170
- */
171
- patchProp(el: MiniAppNode, key: string, prevValue: any, nextValue: any): void;
172
- /**
173
- * 查询选择器(原型简化实现)
174
- * @param selector CSS 选择器
175
- * @returns 匹配的第一个节点,未找到返回 null
176
- */
177
- querySelector(_selector: string): MiniAppNode | null;
178
- /**
179
- * 将 VNode 树转换为小程序节点树
180
- *
181
- * 递归遍历 VNode,将每个节点转换为对应的 MiniAppNode 描述。
182
- *
183
- * @param vnode VNode 对象
184
- * @returns MiniAppNode 树
185
- */
186
- renderToMiniAppTree(vnode: any): MiniAppNode;
187
- /**
188
- * 序列化为 WXML(微信小程序模板)
189
- *
190
- * @param node 小程序节点
191
- * @param indent 缩进级别(默认 0)
192
- * @returns WXML 模板字符串
193
- */
194
- serializeToWXML(node: MiniAppNode, indent?: number): string;
195
- /**
196
- * 序列化为 AXML(支付宝小程序模板)
197
- *
198
- * @param node 小程序节点
199
- * @param indent 缩进级别(默认 0)
200
- * @returns AXML 模板字符串
201
- */
202
- serializeToAXML(node: MiniAppNode, indent?: number): string;
203
- /**
204
- * 序列化为 TTML(字节跳动小程序模板)
205
- *
206
- * @param node 小程序节点
207
- * @param indent 缩进级别(默认 0)
208
- * @returns TTML 模板字符串
209
- */
210
- serializeToTTML(node: MiniAppNode, indent?: number): string;
211
- /**
212
- * 根据平台获取模板字符串
213
- *
214
- * @param node 小程序节点
215
- * @param platform 平台标识:'wechat' | 'alipay' | 'bytedance'
216
- * @returns 对应平台的模板字符串
217
- */
218
- getPlatformTemplate(node: MiniAppNode, platform: 'wechat' | 'alipay' | 'bytedance'): string;
219
- /**
220
- * 将 Lyt.js 指令映射为小程序模板属性
221
- *
222
- * @param lytDirective Lyt.js 指令名(如 'if', 'each')
223
- * @param value 指令值
224
- * @param platform 平台标识
225
- * @returns 小程序模板属性字符串(如 'wx:if="{{condition}}"')
226
- */
227
- mapDirective(lytDirective: string, value: string, platform?: string): string;
228
- /**
229
- * 将 Lyt.js 事件映射为小程序事件绑定
230
- *
231
- * @param lytEvent Lyt.js 事件名(如 'click')
232
- * @param platform 平台标识
233
- * @returns 小程序事件绑定字符串(如 'bindtap')
234
- */
235
- mapEvent(lytEvent: string, platform?: string): string;
236
- /**
237
- * 应用 Lyt.js 指令到节点
238
- */
239
- private _applyDirective;
240
- /**
241
- * 将样式对象转换为内联样式字符串
242
- */
243
- private _styleObjectToString;
244
- /**
245
- * 通用模板序列化方法
246
- *
247
- * @param node 小程序节点
248
- * @param indent 缩进级别
249
- * @param platform 平台标识
250
- * @returns 模板字符串
251
- */
252
- private _serializeToTemplate;
253
- }
254
- /**
255
- * 支持的小程序平台类型
256
- */
257
- export type MiniAppPlatform = 'wechat' | 'alipay' | 'bytedance';
258
- /**
259
- * 创建小程序渲染器实例
260
- *
261
- * 工厂函数,每次调用返回一个新的 MiniAppRenderer 实例。
262
- * 适用于需要多个独立渲染器实例的场景。
263
- *
264
- * @returns MiniAppRenderer 实例
265
- */
266
- export declare function createMiniAppRenderer(): MiniAppRenderer;
267
- /** 小程序渲染器单例 */
268
- export declare const miniAppRenderer: MiniAppRenderer;
269
- //# sourceMappingURL=miniapp-renderer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"miniapp-renderer.d.ts","sourceRoot":"","sources":["../../../src/miniapp/miniapp-renderer.ts"],"names":[],"mappings":"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"}
@@ -1,168 +0,0 @@
1
- /**
2
- * miniapp-utils.ts - 小程序工具函数集
3
- *
4
- * 提供小程序开发中常用的工具函数,包括命名转换、样式处理、
5
- * JSON 配置生成、属性规范化、WXS 模块包装等。
6
- * 纯原生零依赖 TypeScript 实现。
7
- */
8
- import { camelToKebab, kebabToCamel } from '@lytjs/common';
9
- export { camelToKebab, kebabToCamel };
10
- /**
11
- * 样式对象转 CSS 字符串
12
- *
13
- * 将 JavaScript 样式对象(驼峰命名)转换为 CSS 内联样式字符串(短横线命名)。
14
- *
15
- * @example
16
- * parseStyleObject({ fontSize: '14px', color: 'red' })
17
- * // => 'font-size: 14px; color: red'
18
- *
19
- * @param style 样式对象
20
- * @returns CSS 样式字符串
21
- */
22
- export declare function parseStyleObject(style: Record<string, string>): string;
23
- /**
24
- * 类对象/字符串转类名字符串
25
- *
26
- * 支持以下输入格式:
27
- * - 字符串:直接返回
28
- * - 对象:将值为 true 的键名拼接为类名字符串
29
- *
30
- * @example
31
- * parseClassObject('active bold') // => 'active bold'
32
- * parseClassObject({ active: true, disabled: false, bold: true })
33
- * // => 'active bold'
34
- *
35
- * @param cls 类对象或字符串
36
- * @returns 类名字符串
37
- */
38
- export declare function parseClassObject(cls: Record<string, boolean> | string): string;
39
- /**
40
- * 页面 JSON 配置项
41
- */
42
- export interface PageJsonConfig {
43
- /** 导航栏标题文字 */
44
- navigationBarTitleText?: string;
45
- /** 引用的自定义组件 */
46
- usingComponents?: Record<string, string>;
47
- /** 是否开启下拉刷新 */
48
- enablePullDownRefresh?: boolean;
49
- /** 下拉刷新窗口的背景色 */
50
- backgroundColor?: string;
51
- /** 下拉刷新 loading 的样式 */
52
- backgroundTextStyle?: 'dark' | 'light';
53
- /** 导航栏背景颜色 */
54
- navigationBarBackgroundColor?: string;
55
- /** 导航栏标题颜色 */
56
- navigationBarTextStyle?: 'white' | 'black';
57
- }
58
- /**
59
- * 组件 JSON 配置项
60
- */
61
- export interface ComponentJsonConfig {
62
- /** 是否为自定义组件(默认 true) */
63
- component?: boolean;
64
- /** 引用的自定义组件 */
65
- usingComponents?: Record<string, string>;
66
- }
67
- /**
68
- * 生成页面 JSON 配置字符串
69
- *
70
- * @example
71
- * generatePageJson({
72
- * navigationBarTitleText: '首页',
73
- * enablePullDownRefresh: true,
74
- * usingComponents: { 'my-comp': '/components/my-comp/index' }
75
- * })
76
- * // => '{\n "navigationBarTitleText": "首页",\n ...}'
77
- *
78
- * @param config 页面配置项
79
- * @returns 格式化的 JSON 字符串
80
- */
81
- export declare function generatePageJson(config: PageJsonConfig): string;
82
- /**
83
- * 生成组件 JSON 配置字符串
84
- *
85
- * @example
86
- * generateComponentJson({
87
- * component: true,
88
- * usingComponents: { 'child': '/components/child/index' }
89
- * })
90
- * // => '{\n "component": true,\n ...}'
91
- *
92
- * @param config 组件配置项
93
- * @returns 格式化的 JSON 字符串
94
- */
95
- export declare function generateComponentJson(config: ComponentJsonConfig): string;
96
- /**
97
- * 规范化属性定义结果
98
- */
99
- export interface NormalizedProps {
100
- /** 小程序 properties 定义 */
101
- properties: Record<string, any>;
102
- /** observers 观察器列表 */
103
- observers: string[];
104
- }
105
- /**
106
- * 规范化属性定义
107
- *
108
- * 将 Lyt.js 风格的 props 定义转换为小程序 Component 的 properties 格式。
109
- * 对于带有 observer 的属性,会额外生成 observers 观察器代码。
110
- *
111
- * @example
112
- * normalizeProps({
113
- * title: { type: String, default: 'Hello' },
114
- * count: { type: Number, observer: 'onCountChange' }
115
- * })
116
- * // => {
117
- * // properties: {
118
- * // title: { type: String, value: 'Hello' },
119
- * // count: { type: Number }
120
- * // },
121
- * // observers: ['count: function(count) { this.onCountChange(count); }']
122
- * // }
123
- *
124
- * @param props 属性定义对象
125
- * @returns 规范化后的 properties 和 observers
126
- */
127
- export declare function normalizeProps(props: Record<string, any>): NormalizedProps;
128
- /**
129
- * 创建 WXS 模块包装
130
- *
131
- * 将 JavaScript 代码包装为 WXS 模块格式。
132
- * WXS (WeiXin Script) 是微信小程序中运行在渲染层的脚本语言,
133
- * 语法类似 JavaScript 但有部分限制。
134
- *
135
- * @example
136
- * createWxsModule('function add(a, b) { return a + b; }')
137
- * // => 'module.exports = {\n add: add\n};\n// Original code:\nfunction add(a, b) { return a + b; }'
138
- *
139
- * @param code JavaScript 代码
140
- * @returns WXS 模块包装后的代码
141
- */
142
- export declare function createWxsModule(code: string): string;
143
- /**
144
- * HTML 转义
145
- *
146
- * 将 HTML 特殊字符转换为对应的 HTML 实体。
147
- *
148
- * @example
149
- * escapeHtml('<div class="test">Hello & World</div>')
150
- * // => '&lt;div class=&quot;test&quot;&gt;Hello &amp; World&lt;/div&gt;'
151
- *
152
- * @param str 需要转义的字符串
153
- * @returns 转义后的字符串
154
- */
155
- export declare function escapeHtml(str: string): string;
156
- /**
157
- * 判断是否为小程序原生组件
158
- *
159
- * @example
160
- * isNativeTag('view') // => true
161
- * isNativeTag('my-component') // => false
162
- * isNativeTag('div') // => false
163
- *
164
- * @param tag 标签名
165
- * @returns 是否为小程序原生组件
166
- */
167
- export declare function isNativeTag(tag: string): boolean;
168
- //# sourceMappingURL=miniapp-utils.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"miniapp-utils.d.ts","sourceRoot":"","sources":["../../../src/miniapp/miniapp-utils.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAG3D,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC;AAMtC;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAOtE;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,MAAM,CAa9E;AAMD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,cAAc;IACd,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,eAAe;IACf,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,eAAe;IACf,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,iBAAiB;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,uBAAuB;IACvB,mBAAmB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACvC,cAAc;IACd,4BAA4B,CAAC,EAAE,MAAM,CAAC;IACtC,cAAc;IACd,sBAAsB,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;CAC5C;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,wBAAwB;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,eAAe;IACf,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC1C;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CA2B/D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM,CAWzE;AAMD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,wBAAwB;IAExB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChC,sBAAsB;IACtB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,eAAe,CA8C1E;AAMD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAgCpD;AAsBD;;;;;;;;;;;GAWG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE9C;AAwED;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEhD"}