@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.
- package/README.md +371 -204
- package/dist/dom.cjs +12 -1
- package/dist/dom.cjs.map +1 -0
- package/dist/dom.d.cts +1 -0
- package/dist/dom.d.ts +1 -0
- package/dist/dom.mjs +3 -1
- package/dist/dom.mjs.map +1 -0
- package/dist/index.cjs +3312 -1
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +1004 -0
- package/dist/index.d.ts +1004 -0
- package/dist/index.mjs +3190 -1
- package/dist/index.mjs.map +1 -0
- package/dist/ssr.cjs +310 -1
- package/dist/ssr.cjs.map +1 -0
- package/dist/ssr.d.cts +21 -0
- package/dist/ssr.d.ts +21 -0
- package/dist/ssr.mjs +308 -1
- package/dist/ssr.mjs.map +1 -0
- package/package.json +35 -58
- package/dist/miniapp.cjs +0 -27
- package/dist/miniapp.mjs +0 -27
- package/dist/native.cjs +0 -1
- package/dist/native.mjs +0 -1
- package/dist/types/create-renderer.d.ts +0 -20
- package/dist/types/create-renderer.d.ts.map +0 -1
- package/dist/types/dom/dom-ops.d.ts +0 -74
- package/dist/types/dom/dom-ops.d.ts.map +0 -1
- package/dist/types/dom/dom-renderer.d.ts +0 -243
- package/dist/types/dom/dom-renderer.d.ts.map +0 -1
- package/dist/types/dom/index.d.ts +0 -17
- package/dist/types/dom/index.d.ts.map +0 -1
- package/dist/types/dom/patch-events.d.ts +0 -123
- package/dist/types/dom/patch-events.d.ts.map +0 -1
- package/dist/types/dom/patch-props.d.ts +0 -118
- package/dist/types/dom/patch-props.d.ts.map +0 -1
- package/dist/types/index.d.ts +0 -36
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/miniapp/api-adapter.d.ts +0 -514
- package/dist/types/miniapp/api-adapter.d.ts.map +0 -1
- package/dist/types/miniapp/index.d.ts +0 -34
- package/dist/types/miniapp/index.d.ts.map +0 -1
- package/dist/types/miniapp/miniapp-compiler.d.ts +0 -269
- package/dist/types/miniapp/miniapp-compiler.d.ts.map +0 -1
- package/dist/types/miniapp/miniapp-event-bridge.d.ts +0 -255
- package/dist/types/miniapp/miniapp-event-bridge.d.ts.map +0 -1
- package/dist/types/miniapp/miniapp-lifecycle.d.ts +0 -224
- package/dist/types/miniapp/miniapp-lifecycle.d.ts.map +0 -1
- package/dist/types/miniapp/miniapp-renderer.d.ts +0 -269
- package/dist/types/miniapp/miniapp-renderer.d.ts.map +0 -1
- package/dist/types/miniapp/miniapp-utils.d.ts +0 -168
- package/dist/types/miniapp/miniapp-utils.d.ts.map +0 -1
- package/dist/types/miniapp/shared-constants.d.ts +0 -28
- package/dist/types/miniapp/shared-constants.d.ts.map +0 -1
- package/dist/types/miniapp/style-compiler.d.ts +0 -193
- package/dist/types/miniapp/style-compiler.d.ts.map +0 -1
- package/dist/types/mount.d.ts +0 -32
- package/dist/types/mount.d.ts.map +0 -1
- package/dist/types/native/index.d.ts +0 -13
- package/dist/types/native/index.d.ts.map +0 -1
- package/dist/types/native/native-renderer.d.ts +0 -249
- package/dist/types/native/native-renderer.d.ts.map +0 -1
- package/dist/types/patch.d.ts +0 -23
- package/dist/types/patch.d.ts.map +0 -1
- package/dist/types/props.d.ts +0 -19
- package/dist/types/props.d.ts.map +0 -1
- package/dist/types/renderer-interfaces.d.ts +0 -157
- package/dist/types/renderer-interfaces.d.ts.map +0 -1
- package/dist/types/shared/abstract-renderer.d.ts +0 -74
- package/dist/types/shared/abstract-renderer.d.ts.map +0 -1
- package/dist/types/ssr/hydration.d.ts +0 -267
- package/dist/types/ssr/hydration.d.ts.map +0 -1
- package/dist/types/ssr/index.d.ts +0 -15
- package/dist/types/ssr/index.d.ts.map +0 -1
- package/dist/types/ssr/ssr-renderer.d.ts +0 -277
- package/dist/types/ssr/ssr-renderer.d.ts.map +0 -1
- package/dist/types/unmount.d.ts +0 -16
- package/dist/types/unmount.d.ts.map +0 -1
- package/dist/types/vapor/index.d.ts +0 -18
- package/dist/types/vapor/index.d.ts.map +0 -1
- package/dist/types/vapor/vapor-compiler.d.ts +0 -76
- package/dist/types/vapor/vapor-compiler.d.ts.map +0 -1
- package/dist/types/vapor/vapor-component.d.ts +0 -55
- package/dist/types/vapor/vapor-component.d.ts.map +0 -1
- package/dist/types/vapor/vapor-reactive.d.ts +0 -133
- package/dist/types/vapor/vapor-reactive.d.ts.map +0 -1
- package/dist/types/vapor/vapor-renderer.d.ts +0 -135
- package/dist/types/vapor/vapor-renderer.d.ts.map +0 -1
- package/dist/types/vnode.d.ts +0 -203
- package/dist/types/vnode.d.ts.map +0 -1
- package/dist/vapor.cjs +0 -1
- package/dist/vapor.mjs +0 -1
package/README.md
CHANGED
|
@@ -1,204 +1,371 @@
|
|
|
1
|
-
# @lytjs/renderer
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
## 安装
|
|
6
|
-
|
|
7
|
-
```bash
|
|
8
|
-
npm install @lytjs/renderer
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
###
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
```
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
const
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
1
|
+
# @lytjs/renderer
|
|
2
|
+
|
|
3
|
+
> LytJS 渲染后端,提供 DOM 渲染、SSR 渲染、Signal 渲染、Hydration 和 Island Architecture 支持
|
|
4
|
+
|
|
5
|
+
## 安装
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @lytjs/renderer
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## 渲染器类型
|
|
12
|
+
|
|
13
|
+
### DOM 渲染器
|
|
14
|
+
|
|
15
|
+
用于浏览器端的 DOM 渲染
|
|
16
|
+
|
|
17
|
+
```typescript
|
|
18
|
+
import { createDOMRenderer } from '@lytjs/renderer';
|
|
19
|
+
|
|
20
|
+
const renderer = createDOMRenderer();
|
|
21
|
+
renderer.render(vnode, document.getElementById('app'));
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
### Signal 渲染器
|
|
25
|
+
|
|
26
|
+
用于细粒度响应式更新(Vapor 模式)
|
|
27
|
+
|
|
28
|
+
```typescript
|
|
29
|
+
import { createSignalRenderer, createVaporRenderer } from '@lytjs/renderer';
|
|
30
|
+
|
|
31
|
+
// Signal 渲染器
|
|
32
|
+
const signalRenderer = await createSignalRenderer();
|
|
33
|
+
|
|
34
|
+
// Vapor 渲染器(Signal 渲染器的别名)
|
|
35
|
+
const vaporRenderer = await createVaporRenderer();
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### SSR 渲染器
|
|
39
|
+
|
|
40
|
+
用于服务端渲染
|
|
41
|
+
|
|
42
|
+
```typescript
|
|
43
|
+
import { renderToString, renderToStream } from '@lytjs/renderer';
|
|
44
|
+
|
|
45
|
+
// 渲染为字符串
|
|
46
|
+
const html = await renderToString(vnode);
|
|
47
|
+
|
|
48
|
+
// 流式渲染
|
|
49
|
+
const stream = await renderToStream(vnode, {
|
|
50
|
+
onChunk: (chunk) => res.write(chunk),
|
|
51
|
+
});
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## 核心 API
|
|
55
|
+
|
|
56
|
+
### createRenderer
|
|
57
|
+
|
|
58
|
+
创建自定义渲染器实例
|
|
59
|
+
|
|
60
|
+
```typescript
|
|
61
|
+
import { createRenderer, type RendererOptions } from '@lytjs/renderer';
|
|
62
|
+
|
|
63
|
+
const options: RendererOptions = {
|
|
64
|
+
createElement: (tag) => document.createElement(tag),
|
|
65
|
+
insert: (el, parent, anchor) => parent.insertBefore(el, anchor),
|
|
66
|
+
// ...
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
const renderer = createRenderer(options);
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### createDOMRenderer
|
|
73
|
+
|
|
74
|
+
创建 DOM 渲染器实例
|
|
75
|
+
|
|
76
|
+
```typescript
|
|
77
|
+
import { createDOMRenderer } from '@lytjs/renderer';
|
|
78
|
+
|
|
79
|
+
const renderer = createDOMRenderer();
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### patchProp / patchClass / patchStyle / patchEvent / patchAttr
|
|
83
|
+
|
|
84
|
+
DOM 属性更新工具函数
|
|
85
|
+
|
|
86
|
+
```typescript
|
|
87
|
+
import {
|
|
88
|
+
patchProp,
|
|
89
|
+
patchClass,
|
|
90
|
+
patchStyle,
|
|
91
|
+
patchEvent,
|
|
92
|
+
patchAttr,
|
|
93
|
+
normalizeEventName,
|
|
94
|
+
getEventKey,
|
|
95
|
+
parseEventModifier,
|
|
96
|
+
createInvoker,
|
|
97
|
+
} from '@lytjs/renderer';
|
|
98
|
+
|
|
99
|
+
// 更新属性
|
|
100
|
+
patchProp(el, 'class', prevValue, nextValue);
|
|
101
|
+
|
|
102
|
+
// 更新 class
|
|
103
|
+
patchClass(el, 'active visible');
|
|
104
|
+
|
|
105
|
+
// 更新 style
|
|
106
|
+
patchStyle(el, { color: 'red', fontSize: '14px' });
|
|
107
|
+
|
|
108
|
+
// 更新事件
|
|
109
|
+
patchEvent(el, 'onClick', prevHandler, nextHandler);
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
## Hydration
|
|
113
|
+
|
|
114
|
+
### createHydrationFunctions
|
|
115
|
+
|
|
116
|
+
创建服务端渲染 Hydration 函数
|
|
117
|
+
|
|
118
|
+
```typescript
|
|
119
|
+
import { createHydrationFunctions } from '@lytjs/renderer';
|
|
120
|
+
|
|
121
|
+
const { hydrate, hydrateNode } = createHydrationFunctions(options);
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
## Island Architecture
|
|
125
|
+
|
|
126
|
+
Island Architecture 用于在 SSR 页面中实现部分区域的客户端交互
|
|
127
|
+
|
|
128
|
+
### hydrateIsland
|
|
129
|
+
|
|
130
|
+
水合单个 Island 组件
|
|
131
|
+
|
|
132
|
+
```typescript
|
|
133
|
+
import { hydrateIsland, registerIslandComponent } from '@lytjs/renderer';
|
|
134
|
+
|
|
135
|
+
// 注册 Island 组件
|
|
136
|
+
await registerIslandComponent('Counter', CounterComponent);
|
|
137
|
+
|
|
138
|
+
// 水合 Island
|
|
139
|
+
const islandEl = document.querySelector('[data-island="Counter"]');
|
|
140
|
+
await hydrateIsland(islandEl, CounterComponent, { initialCount: 0 });
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### registerIslandComponent
|
|
144
|
+
|
|
145
|
+
注册 Island 组件供后续水合使用
|
|
146
|
+
|
|
147
|
+
```typescript
|
|
148
|
+
import { registerIslandComponent } from '@lytjs/renderer';
|
|
149
|
+
|
|
150
|
+
await registerIslandComponent('MyComponent', MyComponent);
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### createIslandSSRContent
|
|
154
|
+
|
|
155
|
+
创建 Island SSR 内容
|
|
156
|
+
|
|
157
|
+
```typescript
|
|
158
|
+
import { createIslandSSRContent } from '@lytjs/renderer';
|
|
159
|
+
|
|
160
|
+
const html = await createIslandSSRContent(vnode, {
|
|
161
|
+
islandId: 'Counter',
|
|
162
|
+
});
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
## 懒加载
|
|
166
|
+
|
|
167
|
+
渲染器支持懒加载大型模块,减少初始包体积:
|
|
168
|
+
|
|
169
|
+
```typescript
|
|
170
|
+
// SSR 相关函数使用动态导入
|
|
171
|
+
import { renderToString, renderToStream } from '@lytjs/renderer';
|
|
172
|
+
|
|
173
|
+
// 这些函数会按需加载 SSR 模块
|
|
174
|
+
const html = await renderToString(vnode);
|
|
175
|
+
|
|
176
|
+
// Signal/Vapor 渲染器也是懒加载的
|
|
177
|
+
const signalRenderer = await createSignalRenderer();
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
## 渲染器插件系统
|
|
181
|
+
|
|
182
|
+
### use
|
|
183
|
+
|
|
184
|
+
安装渲染器插件
|
|
185
|
+
|
|
186
|
+
```typescript
|
|
187
|
+
import { use, type RendererPlugin } from '@lytjs/renderer';
|
|
188
|
+
|
|
189
|
+
const myPlugin: RendererPlugin = {
|
|
190
|
+
name: 'MyPlugin',
|
|
191
|
+
install(context) {
|
|
192
|
+
context.on('beforeMount', (vnode) => {
|
|
193
|
+
console.log('Before mount:', vnode);
|
|
194
|
+
});
|
|
195
|
+
},
|
|
196
|
+
beforeMount(vnode) {
|
|
197
|
+
console.log('Will mount:', vnode);
|
|
198
|
+
},
|
|
199
|
+
};
|
|
200
|
+
|
|
201
|
+
use(myPlugin);
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
### 插件生命周期钩子
|
|
205
|
+
|
|
206
|
+
```typescript
|
|
207
|
+
interface RendererPlugin {
|
|
208
|
+
name: string;
|
|
209
|
+
install: (context: PluginContext) => void;
|
|
210
|
+
beforeMount?: (vnode: VNode) => void;
|
|
211
|
+
afterMount?: (vnode: VNode, container: unknown) => void;
|
|
212
|
+
beforePatch?: (oldVNode: VNode, newVNode: VNode) => void;
|
|
213
|
+
afterPatch?: (vnode: VNode) => void;
|
|
214
|
+
beforeUnmount?: (vnode: VNode) => void;
|
|
215
|
+
afterUnmount?: (vnode: VNode) => void;
|
|
216
|
+
}
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
### 插件管理
|
|
220
|
+
|
|
221
|
+
```typescript
|
|
222
|
+
import { use, getInstalledPlugins, isPluginInstalled, removePlugin } from '@lytjs/renderer';
|
|
223
|
+
|
|
224
|
+
// 安装插件
|
|
225
|
+
use(myPlugin);
|
|
226
|
+
|
|
227
|
+
// 检查插件是否已安装
|
|
228
|
+
if (isPluginInstalled('MyPlugin')) {
|
|
229
|
+
console.log('Plugin is installed');
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
// 获取所有已安装插件
|
|
233
|
+
const plugins = getInstalledPlugins();
|
|
234
|
+
|
|
235
|
+
// 移除插件
|
|
236
|
+
removePlugin('MyPlugin');
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
## Vapor 模式
|
|
240
|
+
|
|
241
|
+
Vapor 模式提供无虚拟 DOM 的细粒度响应式渲染
|
|
242
|
+
|
|
243
|
+
### createVaporApp
|
|
244
|
+
|
|
245
|
+
创建 Vapor 应用
|
|
246
|
+
|
|
247
|
+
```typescript
|
|
248
|
+
import { createVaporApp, defineVaporComponent } from '@lytjs/renderer';
|
|
249
|
+
|
|
250
|
+
const MyComponent = await defineVaporComponent({
|
|
251
|
+
setup() {
|
|
252
|
+
const count = signal(0);
|
|
253
|
+
return () => html`<div>${count()}</div>`;
|
|
254
|
+
},
|
|
255
|
+
});
|
|
256
|
+
|
|
257
|
+
const app = await createVaporApp(MyComponent);
|
|
258
|
+
app.mount('#app');
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
### defineVaporComponent
|
|
262
|
+
|
|
263
|
+
定义 Vapor 组件
|
|
264
|
+
|
|
265
|
+
```typescript
|
|
266
|
+
import { defineVaporComponent } from '@lytjs/renderer';
|
|
267
|
+
|
|
268
|
+
const Counter = await defineVaporComponent({
|
|
269
|
+
props: {
|
|
270
|
+
initialCount: { type: Number, default: 0 },
|
|
271
|
+
},
|
|
272
|
+
setup(props) {
|
|
273
|
+
// 组件逻辑
|
|
274
|
+
},
|
|
275
|
+
});
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
## 组件资源清理
|
|
279
|
+
|
|
280
|
+
```typescript
|
|
281
|
+
import {
|
|
282
|
+
registerComponentEventListener,
|
|
283
|
+
registerComponentEffectSubscription,
|
|
284
|
+
registerComponentCleanup,
|
|
285
|
+
cleanupComponentResources,
|
|
286
|
+
} from '@lytjs/renderer';
|
|
287
|
+
|
|
288
|
+
// 注册事件监听器(卸载时自动清理)
|
|
289
|
+
registerComponentEventListener(instance, target, 'click', handler);
|
|
290
|
+
|
|
291
|
+
// 注册 effect 订阅(卸载时自动清理)
|
|
292
|
+
registerComponentEffectSubscription(instance, subscription);
|
|
293
|
+
|
|
294
|
+
// 注册自定义清理函数
|
|
295
|
+
registerComponentCleanup(instance, () => {
|
|
296
|
+
// 清理逻辑
|
|
297
|
+
});
|
|
298
|
+
|
|
299
|
+
// 手动清理所有资源
|
|
300
|
+
cleanupComponentResources(instance);
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
## 首次渲染优化
|
|
304
|
+
|
|
305
|
+
```typescript
|
|
306
|
+
import {
|
|
307
|
+
withFirstRenderOptimization,
|
|
308
|
+
shouldSkipTracking,
|
|
309
|
+
getSkippedTrackingCount,
|
|
310
|
+
resetSkippedTrackingCount,
|
|
311
|
+
} from '@lytjs/renderer';
|
|
312
|
+
|
|
313
|
+
// 使用首次渲染优化
|
|
314
|
+
withFirstRenderOptimization(() => {
|
|
315
|
+
// 首次渲染时跳过不必要的追踪
|
|
316
|
+
});
|
|
317
|
+
|
|
318
|
+
// 检查是否跳过追踪
|
|
319
|
+
if (shouldSkipTracking()) {
|
|
320
|
+
console.log('Tracking is skipped');
|
|
321
|
+
}
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
## 工具函数
|
|
325
|
+
|
|
326
|
+
```typescript
|
|
327
|
+
import { escapeHtml, isBooleanAttr, isVoidElement } from '@lytjs/renderer';
|
|
328
|
+
|
|
329
|
+
// HTML 转义
|
|
330
|
+
const safe = escapeHtml('<script>alert("xss")</script>');
|
|
331
|
+
|
|
332
|
+
// 检查布尔属性
|
|
333
|
+
if (isBooleanAttr('disabled')) {
|
|
334
|
+
// 处理布尔属性
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
// 检查自闭合标签
|
|
338
|
+
if (isVoidElement('img')) {
|
|
339
|
+
// 自闭合标签处理
|
|
340
|
+
}
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
## 类型定义
|
|
344
|
+
|
|
345
|
+
```typescript
|
|
346
|
+
import type {
|
|
347
|
+
VNode,
|
|
348
|
+
RendererOptions,
|
|
349
|
+
RendererPlugin,
|
|
350
|
+
PluginContext,
|
|
351
|
+
LifecycleEvent,
|
|
352
|
+
DOMRenderer,
|
|
353
|
+
SignalRenderer,
|
|
354
|
+
VaporRenderer,
|
|
355
|
+
VaporApp,
|
|
356
|
+
VaporComponentOptions,
|
|
357
|
+
HydrationRenderer,
|
|
358
|
+
RendererHost,
|
|
359
|
+
HostRect,
|
|
360
|
+
HostStyleDeclaration,
|
|
361
|
+
HostEvent,
|
|
362
|
+
HostEventHandler,
|
|
363
|
+
} from '@lytjs/renderer';
|
|
364
|
+
```
|
|
365
|
+
|
|
366
|
+
## 相关包
|
|
367
|
+
|
|
368
|
+
- [@lytjs/vdom](../vdom) - 虚拟 DOM 实现,渲染器的基础
|
|
369
|
+
- [@lytjs/core](../core) - 框架核心入口,整合所有子包
|
|
370
|
+
- [@lytjs/adapter-web](../adapter-web) - Web 平台适配器
|
|
371
|
+
- [@lytjs/host-contract](../host-contract) - 渲染器宿主抽象
|
package/dist/dom.cjs
CHANGED
|
@@ -1 +1,12 @@
|
|
|
1
|
-
"use strict";var P=Object.defineProperty;var pe=Object.getOwnPropertyDescriptor;var ue=Object.getOwnPropertyNames;var ye=Object.prototype.hasOwnProperty;var me=(n,e)=>{for(var t in e)P(n,t,{get:e[t],enumerable:!0})},ve=(n,e,t,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of ue(e))!ye.call(n,r)&&r!==t&&P(n,r,{get:()=>e[r],enumerable:!(o=pe(e,r))||o.enumerable});return n};var he=n=>ve(P({},"__esModule",{value:!0}),n);var we={};me(we,{Comment:()=>W,DOMRenderer:()=>T,Fragment:()=>D,PatchFlags:()=>R,PatchPropFlags:()=>u.PatchFlags,ShapeFlags:()=>m,Text:()=>M,createInvoker:()=>Y,createRenderer:()=>ee,domRenderer:()=>de,getEventInvokers:()=>se,getEventKey:()=>B,getSVGPropName:()=>ie,isSVGElement:()=>w,normalizeEventName:()=>_,parseEventModifier:()=>G,patchAllProps:()=>x,patchClass:()=>C,patchDOMProp:()=>z,patchDOMProps:()=>re,patchElementProps:()=>fe,patchEvent:()=>g,patchEventOnElement:()=>le,patchProp:()=>y,patchStyle:()=>L,removeAllEventListeners:()=>I,removeDOMProp:()=>N,setDOMProp:()=>h});module.exports=he(we);var Z=require("@lytjs/vdom");var m=(s=>(s[s.ELEMENT=1]="ELEMENT",s[s.FUNCTIONAL_COMPONENT=2]="FUNCTIONAL_COMPONENT",s[s.STATEFUL_COMPONENT=4]="STATEFUL_COMPONENT",s[s.TEXT_CHILDREN=8]="TEXT_CHILDREN",s[s.ARRAY_CHILDREN=16]="ARRAY_CHILDREN",s[s.SLOTS_CHILDREN=32]="SLOTS_CHILDREN",s))(m||{}),R=(l=>(l[l.TEXT=1]="TEXT",l[l.CLASS=2]="CLASS",l[l.STYLE=4]="STYLE",l[l.PROPS=8]="PROPS",l[l.FULL_PROPS=16]="FULL_PROPS",l[l.STABLE_FRAGMENT=32]="STABLE_FRAGMENT",l[l.KEYED_FRAGMENT=64]="KEYED_FRAGMENT",l[l.UNKEYED_FRAGMENT=128]="UNKEYED_FRAGMENT",l[l.NEED_PATCH=256]="NEED_PATCH",l[l.DYNAMIC_SLOTS=512]="DYNAMIC_SLOTS",l[l.HOISTED=-1]="HOISTED",l[l.BAIL=-2]="BAIL",l))(R||{}),D=Symbol("Fragment"),M=Symbol("Text"),W=Symbol("Comment");function v(n){return n.type===D}function V(n){return n.type===M}function b(n){return n.type===W}function q(n,e){return n.type===e.type&&n.key===e.key}function j(n){return Array.isArray(n.dynamicChildren)}function $(n,e,t,o){if(t==="class")n.setClass(e,o);else if(t==="style")n.setStyle(e,o);else if(t.startsWith("on")||t.startsWith("@")){let r=t.startsWith("@")?t.slice(1).toLowerCase():t.slice(2).toLowerCase();n.addEventListener(e,r,o)}else t==="key"||t==="ref"||n.setAttribute(e,t,o)}function K(n,e,t,o,r){if(t==="class")n.setClass(e,o);else if(t==="style")n.setStyle(e,o||{});else if(t.startsWith("on")||t.startsWith("@")){let i=t.startsWith("@")?t.slice(1).toLowerCase():t.slice(2).toLowerCase();r&&n.removeEventListener(e,i,r),o&&n.addEventListener(e,i,o)}else n.setAttribute(e,t,o)}function H(n,e,t,o){for(let r in o){if(r==="key"||r==="ref")continue;let i=t[r],s=o[r];s!==i&&K(n,e,r,s,i)}for(let r in t)if(!(r==="key"||r==="ref")&&!(r in o))if(r==="class")n.setClass(e,"");else if(r==="style")n.setStyle(e,{});else if(r.startsWith("on")||r.startsWith("@")){let i=r.startsWith("@")?r.slice(1).toLowerCase():r.slice(2).toLowerCase();n.removeEventListener(e,i,t[r])}else n.removeAttribute(e,r)}function F(n,e,t,o,r,i){let{shapeFlag:s}=t;if(v(t)){Ee(n,e,t,o,r,i);return}if(V(t)){let a=n.createText(t.children);t.el=a,n.insert(o,a,r);return}if(b(t)){let a=n.createComment(t.children);t.el=a,n.insert(o,a,r);return}if(s&1){Ne(n,e,t,o,r,i);return}if(s&6){ge(e,t,o,r,i);return}}function Ne(n,e,t,o,r,i){let s=t.type,a=n.createElement(s);if(t.el=a,t.props)for(let d in t.props){let p=t.props[d];$(n,a,d,p)}let{shapeFlag:c,children:f}=t;c&8?a.textContent=f:c&16&&A(e,f,a,null,i),n.insert(o,a,r)}function A(n,e,t,o,r){for(let i=0;i<e.length;i++)n(null,e[i],t,o,r)}function Ee(n,e,t,o,r,i){let{children:s}=t,a=n.createComment("");n.insert(o,a,r),Array.isArray(s)&&s.length>0&&A(e,s,o,a,i),t.el=a,t.anchor=a}function ge(n,e,t,o,r){let i=e.component;i&&i.update&&i.update(),i&&i.subTree&&(n(null,i.subTree,t,o,i),e.el=i.subTree.el)}function J(n,e,t,o){let{shapeFlag:r,children:i}=t;if(v(t)){if(Array.isArray(i))for(let s=0;s<i.length;s++)e(i[s],o);t.anchor&&t.anchor.parentNode&&n.remove(t.anchor);return}if(r&6){t.component&&t.component.subTree&&e(t.component.subTree,o);return}t.el&&n.remove(t.el)}function O(n,e){for(let t=0;t<e.length;t++)n(e[t])}var k=require("@lytjs/vdom");function S(n,e,t,o,r,i=null,s=null){if(o==null){t&&e(t,r);return}if(t===null){F(n,U(n,e),o,r,i,s);return}if(j(o)&&j(t)){Te(n,e,t,o,r,s);return}if(!q(t,o)){e(t,r),F(n,U(n,e),o,r,i,s);return}o.el=t.el,o.anchor=t.anchor;let{shapeFlag:a}=o;if(v(o)){Le(n,e,t,o,r,i,s);return}if(V(o)){o.children!==t.children&&(o.el.nodeValue=o.children);return}if(b(o)){o.children!==t.children&&(o.el.nodeValue=o.children);return}if(a&1){xe(n,e,t,o,s);return}if(a&6){Re(t,o,s);return}}function U(n,e){return(t,o,r,i,s)=>{S(n,e,t,o,r,i,s)}}function xe(n,e,t,o,r=null){let i=o.el=t.el,s=t.props||{},a=o.props||{},{patchFlag:c,dynamicProps:f}=o;if(c&&c>0){if(c&1&&t.children!==o.children&&(i.textContent=o.children),c&2&&s.class!==a.class&&n.setClass(i,a.class),c&4&&s.style!==a.style&&n.setStyle(i,a.style||{}),c&8&&f)for(let d=0;d<f.length;d++){let p=f[d],l=s[p],X=a[p];X!==l&&K(n,i,p,X,l)}c&16&&H(n,i,s,a)}else H(n,i,s,a);(!c||!(c&1))&&Q(n,e,t,o,i,null,r)}function Q(n,e,t,o,r,i,s){let a=t.shapeFlag,c=o.shapeFlag,f=t.children,d=o.children;if(c&8){a&16&&O(e,f),f!==d&&(r.textContent=d);return}if(c&16){a&16?Ce(n,e,f,d,r,i,s):(a&8&&(r.textContent=""),A(U(n,e),d,r,i,s));return}d==null&&(a&8?r.textContent="":a&16&&O(e,f))}function Ce(n,e,t,o,r,i,s){o.every(c=>c.key!==null&&c.key!==void 0)&&t.every(c=>c.key!==null&&c.key!==void 0)?(0,k.patchKeyedChildren)(t,o,r,i,s,null,!1):(0,k.patchUnkeyedChildren)(t,o,r,i,s,null,!1)}function Le(n,e,t,o,r,i,s){let a=t.children,c=o.children;Array.isArray(c)&&c.length>0?(Q(n,e,t,o,r,i,s),o.el=c[0].el,o.anchor=c[c.length-1].el?n.nextSibling(c[c.length-1].el):i):Array.isArray(a)&&a.length>0&&c===null?(O(e,a),o.el=t.el,o.anchor=t.anchor):(o.el=t.el,o.anchor=t.anchor)}function Te(n,e,t,o,r,i){let s=t.dynamicChildren,a=o.dynamicChildren;for(let c=0;c<a.length;c++)S(n,e,s[c],a[c],r,null,i)}function Re(n,e,t){e.component=n.component,e.el=n.el,e.component&&e.component.update&&e.component.update()}function ee(n){function e(r,i){J(n,e,r,i)}(0,Z.registerDOMOperations)({insert(r,i,s){n.insert(i,r,s)},createElement(r){return n.createElement(r)},createText(r){return n.createText(r)},setText(r,i){r.nodeValue=i},setElementText(r,i){r.textContent=i},remove(r){n.remove(r)},createComment(r){return n.createComment(r)},mount(r,i,s,a,c,f,d){o(null,r,i,s,a)},patch(r,i,s,a,c,f,d,p){o(r,i,s,a,c)},unmount(r,i,s,a){e(r)},move(r,i,s){n.insert(i,r.el,s)}});function o(r,i,s,a,c){S(n,e,r,i,s,a,c)}return{mount(r,i){i.nodeType===1&&(i.textContent=""),o(null,r,i,null,null)},patch(r,i,s){var a;o(r,i,s||((a=r.el)==null?void 0:a.parentNode),null,null)},unmount(r,i){e(r,i)}}}var ne={acceptCharset:"acceptCharset",accessKey:"accessKey",className:"className",htmlFor:"htmlFor",httpEquiv:"httpEquiv",tabIndex:"tabIndex"},oe={allowfullscreen:!0,async:!0,autofocus:!0,autoplay:!0,checked:!0,controls:!0,default:!0,defer:!0,disabled:!0,formnovalidate:!0,hidden:!0,inert:!0,ismap:!0,itemscope:!0,loop:!0,multiple:!0,muted:!0,nomodule:!0,novalidate:!0,open:!0,playsinline:!0,readonly:!0,required:!0,reversed:!0,selected:!0},Ve={"accent-height":"accentHeight","alignment-baseline":"alignmentBaseline","baseline-shift":"baselineShift","clip-path":"clipPath","clip-rule":"clipRule","color-interpolation":"colorInterpolation","color-interpolation-filters":"colorInterpolationFilters","dominant-baseline":"dominantBaseline","enable-background":"enableBackground","fill-opacity":"fillOpacity","fill-rule":"fillRule","flood-color":"floodColor","flood-opacity":"floodOpacity","glyph-orientation-horizontal":"glyphOrientationHorizontal","glyph-orientation-vertical":"glyphOrientationVertical","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-variant":"fontVariant","font-weight":"fontWeight","image-rendering":"imageRendering","letter-spacing":"letterSpacing","lighting-color":"lightingColor","marker-end":"markerEnd","marker-mid":"markerMid","marker-start":"markerStart","paint-order":"paintOrder","pointer-events":"pointerEvents","shape-rendering":"shapeRendering","stop-color":"stopColor","stop-opacity":"stopOpacity","stroke-dasharray":"strokeDasharray","stroke-dashoffset":"strokeDashoffset","stroke-linecap":"strokeLinecap","stroke-linejoin":"strokeLinejoin","stroke-miterlimit":"strokeMiterlimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-anchor":"textAnchor","text-decoration":"textDecoration","text-rendering":"textRendering","transform-origin":"transformOrigin","word-spacing":"wordSpacing","writing-mode":"writingMode","xlink:href":"xlinkHref","xlink:title":"xlinkTitle","xml:lang":"xmlLang","xml:space":"xmlSpace"};function h(n,e,t){if(e==="class"){n.className=t==null?"":String(t);return}if(e==="style"){if(typeof t=="string")n.style.cssText=t;else if(t!=null&&typeof t=="object")for(let r in t)n.style[r]=t[r];else n.style.cssText="";return}if(e.startsWith("on")||e.startsWith("@")){let r=e.startsWith("@")?e.slice(1).toLowerCase():e.slice(2).toLowerCase();typeof t=="function"&&n.addEventListener(r,t);return}if(e in oe){t?(n.setAttribute(e,""),e in n&&(n[e]=!0)):(n.removeAttribute(e),e in n&&(n[e]=!1));return}let o=ne[e]||e;if(o in n){try{n[o]=t==null?"":t}catch(r){n.setAttribute(e,t==null?"":String(t))}return}t==null||t===!1?n.removeAttribute(e):n.setAttribute(e,String(t))}function N(n,e){if(e==="class"){n.className="";return}if(e==="style"){n.style.cssText="";return}if(e.startsWith("on")||e.startsWith("@")){let o=e.startsWith("@")?e.slice(1).toLowerCase():e.slice(2).toLowerCase(),r=n._vei;if(r){let i="on"+o.charAt(0).toUpperCase()+o.slice(1),s=r[i];s&&(n.removeEventListener(o,s),r[i]=void 0)}return}if(e in oe){n.removeAttribute(e),e in n&&(n[e]=!1);return}let t=ne[e]||e;if(t in n){try{n[t]=""}catch(o){n.removeAttribute(e)}return}n.removeAttribute(e)}function te(n){return n.startsWith("on")||n.startsWith("@")}function re(n,e,t){let o=e?Object.keys(e):[],r=t?Object.keys(t):[];for(let i=0;i<r.length;i++){let s=r[i],a=t[s],c=e?e[s]:void 0;s==="key"||s==="ref"||a!==c&&(s==="class"?n.className=a==null?"":String(a):s==="style"?be(n,a,c):te(s)||h(n,s,a))}for(let i=0;i<o.length;i++){let s=o[i];s==="key"||s==="ref"||(!t||!(s in t))&&(s==="class"?n.className="":s==="style"?n.style.cssText="":te(s)||N(n,s))}}function be(n,e,t){if(!e||typeof e=="string"&&!e.trim()){n.style.cssText="";return}if(typeof e=="string"){n.style.cssText=e;return}if(typeof t=="object"&&t!==null)for(let o in t)o in e||(n.style[o]="");for(let o in e)n.style[o]=e[o]}function w(n){return n==="svg"||n==="path"||n==="circle"||n==="rect"||n==="line"||n==="polyline"||n==="polygon"||n==="ellipse"||n==="g"||n==="defs"||n==="use"||n==="text"||n==="tspan"||n==="clipPath"||n==="mask"||n==="filter"||n==="linearGradient"||n==="radialGradient"||n==="stop"||n==="pattern"||n==="symbol"||n==="image"||n==="foreignObject"||n==="animate"||n==="animateTransform"||n==="animateMotion"}function ie(n){return Ve[n]||n}var Ae=/^(?:@|on)/;function _(n){return n.replace(Ae,"").toLowerCase()}function B(n){let e=_(n);return"on"+e.charAt(0).toUpperCase()+e.slice(1)}var Oe={stop:"stop",prevent:"prevent",capture:"capture",once:"once",self:"self",passive:"passive"};function G(n){let e=n.split("."),o={name:e[0],stop:!1,prevent:!1,capture:!1,once:!1,self:!1,passive:!1};for(let r=1;r<e.length;r++){let i=e[r],s=Oe[i];s&&(o[s]=!0)}return o}function Y(n){let e=(t=>{e.value&&e.value(t)});return e.value=n,e}var E="_vei";function se(n){return n[E]||null}function g(n,e,t,o,r){let i=B(e),s=G(_(e)),a=s.name,c=n[E];c||(c=n[E]={});let f=c[i];if(t&&f)f.value=t;else if(t&&!f){let d=Y(t);c[i]=d;let p={};s.capture&&(p.capture=!0),s.once&&(p.once=!0),s.passive&&(p.passive=!0),n.addEventListener(a,d,p)}else!t&&f&&(n.removeEventListener(a,f),c[i]=void 0)}function I(n){let e=n[E];if(e){for(let t in e){let o=e[t];if(o){let r=t.charAt(2).toLowerCase()+t.slice(3);n.removeEventListener(r,o)}}n[E]={}}}var u=require("@lytjs/vdom");function C(n,e,t){let o=ce(e);o!==t&&(n.className=o)}function ce(n){if(n==null)return"";if(typeof n=="string")return n;if(typeof n=="object"){if(Array.isArray(n)){let t="";for(let o=0;o<n.length;o++){let r=ce(n[o]);r&&(t+=(t?" ":"")+r)}return t}let e="";for(let t in n)n[t]&&(e+=(e?" ":"")+t);return e}return String(n)}function L(n,e,t){if(!e){n.style.cssText="";return}if(!t){typeof e=="string"?n.style.cssText=e:typeof e=="object"&&ae(n,e);return}if(typeof e!=typeof t){n.style.cssText="",typeof e=="string"?n.style.cssText=e:typeof e=="object"&&ae(n,e);return}if(typeof e=="string"){e!==t&&(n.style.cssText=e);return}if(typeof e=="object"&&typeof t=="object"){for(let o in t)o in e||(n.style[o]="");for(let o in e){let r=e[o],i=t[o];r!==i&&(n.style[o]=r==null?"":r)}}}function ae(n,e){for(let t in e)n.style[t]=e[t]===null||e[t]===void 0?"":e[t]}function le(n,e,t,o){g(n,"",e,t,o)}var ke=new Set(["class","style","key","ref"]);function Se(n){return n.length>2&&(n[0]==="o"||n[0]==="O"||n[0]==="@")&&(n[1]==="n"||n[1]==="N")}function z(n,e,t,o,r){if(!ke.has(e)){if(Se(e)){g(n,e,t,o,r);return}if(t===!1||t===null||t===void 0){n.removeAttribute(e);return}if(e in n)try{n[e]=t}catch(i){n.setAttribute(e,String(t))}else n.setAttribute(e,String(t))}}function y(n,e,t,o,r){z(n,e,t,o,r)}function x(n,e,t,o){if(t)for(let r in t){if(r==="key"||r==="ref")continue;let i=t[r],s=e?e[r]:void 0;i!==s&&y(n,r,i,s,o)}if(e)for(let r in e)r==="key"||r==="ref"||(!t||!(r in t))&&y(n,r,null,e[r],o)}function fe(n,e,t,o){let r=e.props||{},i=t.props||{},{patchFlag:s,dynamicProps:a}=t;if(!s||s===u.PatchFlags.HOISTED){x(n,r,i,o);return}if(s===u.PatchFlags.BAIL){x(n,r,i,o);return}if(s&u.PatchFlags.TEXT&&e.children!==t.children&&(n.textContent=t.children),s&u.PatchFlags.CLASS&&r.class!==i.class&&C(n,i.class,r.class),s&u.PatchFlags.STYLE&&r.style!==i.style&&L(n,i.style,r.style),s&u.PatchFlags.PROPS&&a)for(let c=0;c<a.length;c++){let f=a[c],d=r[f],p=i[f];p!==d&&y(n,f,p,d,o)}s&u.PatchFlags.FULL_PROPS&&x(n,r,i,o)}var T=class{createElement(e){return w(e)?document.createElementNS("http://www.w3.org/2000/svg",e):document.createElement(e)}createText(e){return document.createTextNode(e)}createComment(e){return document.createComment(e)}setAttribute(e,t,o){h(e,t,o)}removeAttribute(e,t){N(e,t)}setStyle(e,t){if(typeof t=="string")e.style.cssText=t;else if(t&&typeof t=="object")for(let o in t)e.style[o]=t[o]}setClass(e,t){if(typeof t=="string")e.className=t;else if(t&&typeof t=="object"){let o="";for(let r in t)t[r]&&(o+=(o?" ":"")+r);e.className=o}else e.className=""}insert(e,t,o){o!=null?e.insertBefore(t,o):e.appendChild(t)}remove(e){e.parentNode&&e.parentNode.removeChild(e)}replace(e,t,o){e.replaceChild(o,t)}addEventListener(e,t,o,r){e.addEventListener(t,o,r)}removeEventListener(e,t,o){e.removeEventListener(t,o)}nextTick(e){Promise.resolve().then(e)}parentNode(e){return e.parentNode}nextSibling(e){return e.nextSibling}querySelector(e){return document.querySelector(e)}setClassWithOld(e,t,o){C(e,t,o)}setStyleWithOld(e,t,o){L(e,t,o)}setAttributeWithOld(e,t,o,r){y(e,t,o,r)}setElementText(e,t){e.textContent=t}setText(e,t){e.nodeValue=t}insertBefore(e,t,o){o!=null?e.insertBefore(t,o):e.appendChild(t)}removeChild(e,t){e.removeChild(t)}setAnchor(e,t){e.anchor=t}getNextSibling(e){return e.nextSibling}cleanupEvents(e){I(e)}},de=new T;
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var adapterWeb = require('@lytjs/adapter-web');
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
Object.defineProperty(exports, "createDOMRenderer", {
|
|
8
|
+
enumerable: true,
|
|
9
|
+
get: function () { return adapterWeb.createDOMRenderer; }
|
|
10
|
+
});
|
|
11
|
+
//# sourceMappingURL=dom.cjs.map
|
|
12
|
+
//# sourceMappingURL=dom.cjs.map
|
package/dist/dom.cjs.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"dom.cjs","sourcesContent":[]}
|
package/dist/dom.d.cts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { DOMRenderer, createDOMRenderer } from '@lytjs/adapter-web';
|
package/dist/dom.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { DOMRenderer, createDOMRenderer } from '@lytjs/adapter-web';
|