bobe-dom 0.0.58 → 0.0.59
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/dist/bobe-dom.cjs.js +405 -25
- package/dist/bobe-dom.cjs.js.map +1 -1
- package/dist/bobe-dom.esm.js +392 -18
- package/dist/bobe-dom.esm.js.map +1 -1
- package/dist/index.d.ts +17 -8
- package/dist/index.umd.js +405 -25
- package/dist/index.umd.js.map +1 -1
- package/package.json +2 -2
package/dist/bobe-dom.esm.js
CHANGED
|
@@ -1,21 +1,24 @@
|
|
|
1
1
|
import { customRender } from 'bobe';
|
|
2
2
|
|
|
3
|
-
const BOOLEAN_ATTRS = new Set(['disabled', 'readonly', 'checked', 'selected', 'hidden', 'multiple', 'required', 'autofocus', 'autoplay', 'controls', 'loop', 'muted', 'defer', 'async', 'reversed', 'open', 'itemscope', 'ismap', 'nohref', 'noshade', 'nowrap', 'compact', 'default']);
|
|
3
|
+
const BOOLEAN_ATTRS$1 = new Set(['disabled', 'readonly', 'checked', 'selected', 'hidden', 'multiple', 'required', 'autofocus', 'autoplay', 'controls', 'loop', 'muted', 'defer', 'async', 'reversed', 'open', 'itemscope', 'ismap', 'nohref', 'noshade', 'nowrap', 'compact', 'default']);
|
|
4
4
|
const VALUE_PROP_TAGS = new Set(['INPUT', 'TEXTAREA', 'SELECT']);
|
|
5
5
|
const SVG_NS = 'http://www.w3.org/2000/svg';
|
|
6
6
|
const MATH_NS = 'http://www.w3.org/1998/Math/MathML';
|
|
7
7
|
const SVG_TAGS = new Set(['svg', 'animate', 'animateMotion', 'animateTransform', 'circle', 'clipPath', 'defs', 'desc', 'ellipse', 'feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feDistantLight', 'feDropShadow', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feImage', 'feMerge', 'feMergeNode', 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile', 'feTurbulence', 'filter', 'foreignObject', 'g', 'image', 'line', 'linearGradient', 'marker', 'mask', 'metadata', 'mpath', 'path', 'pattern', 'polygon', 'polyline', 'radialGradient', 'rect', 'set', 'stop', 'switch', 'symbol', 'textPath', 'tspan', 'use', 'view']);
|
|
8
8
|
const MATH_TAGS = new Set(['math', 'maction', 'maligngroup', 'malignmark', 'menclose', 'merror', 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr', 'mlongdiv', 'mmultiscripts', 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot', 'mrow', 'ms', 'mscarries', 'mscarry', 'msgroup', 'mstack', 'mspace', 'msqrt', 'msrow', 'mstyle', 'msub', 'msup', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', 'munderover', 'semantics', 'annotation', 'annotation-xml']);
|
|
9
9
|
const isNS = el => el.namespaceURI === SVG_NS || el.namespaceURI === MATH_NS;
|
|
10
|
-
const createNode = name => {
|
|
10
|
+
const createNode$1 = name => {
|
|
11
11
|
if (name === 'text') return document.createTextNode('');
|
|
12
12
|
if (MATH_TAGS.has(name)) return document.createElementNS(MATH_NS, name);
|
|
13
13
|
if (SVG_TAGS.has(name)) return document.createElementNS(SVG_NS, name);
|
|
14
14
|
return document.createElement(name);
|
|
15
15
|
};
|
|
16
|
-
const
|
|
16
|
+
const CONTENT_FLAG = Symbol('hasContent');
|
|
17
|
+
const setProp$1 = (node, key, value) => {
|
|
17
18
|
const el = node;
|
|
18
19
|
if (key === 'text') {
|
|
20
|
+
node[CONTENT_FLAG] = value != null;
|
|
21
|
+
if (value == null) return;
|
|
19
22
|
node.textContent = value;
|
|
20
23
|
return;
|
|
21
24
|
}
|
|
@@ -55,10 +58,12 @@ const setProp = (node, key, value) => {
|
|
|
55
58
|
return;
|
|
56
59
|
}
|
|
57
60
|
if (key === 'html') {
|
|
58
|
-
node
|
|
61
|
+
node[CONTENT_FLAG] = value != null;
|
|
62
|
+
if (value == null) return;
|
|
63
|
+
node.innerHTML = String(value);
|
|
59
64
|
return;
|
|
60
65
|
}
|
|
61
|
-
if (BOOLEAN_ATTRS.has(key)) {
|
|
66
|
+
if (BOOLEAN_ATTRS$1.has(key)) {
|
|
62
67
|
if (value === false || value === null || value === undefined) {
|
|
63
68
|
el.removeAttribute(key);
|
|
64
69
|
} else {
|
|
@@ -94,24 +99,393 @@ const setProp = (node, key, value) => {
|
|
|
94
99
|
el.setAttribute(key, String(value));
|
|
95
100
|
}
|
|
96
101
|
};
|
|
97
|
-
const insertAfter = (parent, node, prev) => {
|
|
102
|
+
const insertAfter$1 = (parent, node, prev) => {
|
|
98
103
|
if (!prev) parent.insertBefore(node, parent.firstChild);else parent.insertBefore(node, prev.nextSibling);
|
|
99
104
|
};
|
|
100
|
-
const createAnchor = name => document.createComment(name);
|
|
101
|
-
const remove = node => {
|
|
105
|
+
const createAnchor$1 = name => document.createComment(name);
|
|
106
|
+
const remove$1 = node => {
|
|
102
107
|
node.remove();
|
|
103
108
|
};
|
|
104
|
-
const firstChild = node => node.firstChild;
|
|
105
|
-
const nextSib = node => node.nextSibling;
|
|
109
|
+
const firstChild$1 = node => node.firstChild;
|
|
110
|
+
const nextSib$1 = node => node.nextSibling;
|
|
111
|
+
const beforeIndent$1 = node => {
|
|
112
|
+
if (node[CONTENT_FLAG]) {
|
|
113
|
+
const tag = node.tagName?.toLowerCase();
|
|
114
|
+
const hasText = node.textContent != null;
|
|
115
|
+
console.warn(`<${tag}> has ${hasText ? 'text' : 'html'} content and child elements — children ignored`);
|
|
116
|
+
return false;
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
const leaveNode$1 = () => {};
|
|
120
|
+
const leaveLogicNode$1 = () => {};
|
|
106
121
|
const render = customRender({
|
|
107
|
-
createNode,
|
|
108
|
-
setProp,
|
|
109
|
-
insertAfter,
|
|
110
|
-
createAnchor,
|
|
111
|
-
remove,
|
|
112
|
-
firstChild,
|
|
113
|
-
nextSib
|
|
122
|
+
createNode: createNode$1,
|
|
123
|
+
setProp: setProp$1,
|
|
124
|
+
insertAfter: insertAfter$1,
|
|
125
|
+
createAnchor: createAnchor$1,
|
|
126
|
+
remove: remove$1,
|
|
127
|
+
firstChild: firstChild$1,
|
|
128
|
+
nextSib: nextSib$1,
|
|
129
|
+
beforeIndent: beforeIndent$1,
|
|
130
|
+
leaveNode: leaveNode$1,
|
|
131
|
+
leaveLogicNode: leaveLogicNode$1
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
let ctx = {
|
|
135
|
+
root: null,
|
|
136
|
+
current: null
|
|
137
|
+
};
|
|
138
|
+
const cleanCtx = () => Object.keys(ctx).forEach(key => {
|
|
139
|
+
ctx[key] = null;
|
|
114
140
|
});
|
|
115
141
|
|
|
116
|
-
|
|
142
|
+
class SSRNode {
|
|
143
|
+
parent = null;
|
|
144
|
+
firstChild = null;
|
|
145
|
+
lastChild = null;
|
|
146
|
+
nextSibling = null;
|
|
147
|
+
prevSibling = null;
|
|
148
|
+
closed = false;
|
|
149
|
+
startClosed = false;
|
|
150
|
+
_innerHtml = null;
|
|
151
|
+
}
|
|
152
|
+
let SSRNodeType = function (SSRNodeType) {
|
|
153
|
+
SSRNodeType[SSRNodeType["Element"] = 0] = "Element";
|
|
154
|
+
SSRNodeType[SSRNodeType["Text"] = 1] = "Text";
|
|
155
|
+
SSRNodeType[SSRNodeType["Anchor"] = 2] = "Anchor";
|
|
156
|
+
SSRNodeType[SSRNodeType["Root"] = 3] = "Root";
|
|
157
|
+
return SSRNodeType;
|
|
158
|
+
}({});
|
|
159
|
+
class Element extends SSRNode {
|
|
160
|
+
type = SSRNodeType.Element;
|
|
161
|
+
textContent = null;
|
|
162
|
+
attrs = {};
|
|
163
|
+
constructor(value, parent) {
|
|
164
|
+
super();
|
|
165
|
+
this.value = value;
|
|
166
|
+
this.parent = parent;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
class Text extends SSRNode {
|
|
170
|
+
type = SSRNodeType.Text;
|
|
171
|
+
constructor(textContent, parent) {
|
|
172
|
+
super();
|
|
173
|
+
this.textContent = textContent;
|
|
174
|
+
this.parent = parent;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
class Anchor extends SSRNode {
|
|
178
|
+
type = SSRNodeType.Anchor;
|
|
179
|
+
constructor(value, parent) {
|
|
180
|
+
super();
|
|
181
|
+
this.value = value;
|
|
182
|
+
this.parent = parent;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
class Root extends SSRNode {
|
|
186
|
+
type = SSRNodeType.Root;
|
|
187
|
+
constructor(value, parent) {
|
|
188
|
+
super();
|
|
189
|
+
this.value = value;
|
|
190
|
+
this.parent = parent;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
const VOID_TAGS = new Set(['area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input', 'link', 'meta', 'param', 'source', 'track', 'wbr']);
|
|
195
|
+
const BOOLEAN_ATTRS = new Set(['disabled', 'readonly', 'checked', 'selected', 'hidden', 'multiple', 'required', 'autofocus', 'autoplay', 'controls', 'loop', 'muted', 'defer', 'async', 'reversed', 'open', 'itemscope', 'ismap', 'nohref', 'noshade', 'nowrap', 'compact', 'default']);
|
|
196
|
+
const ATTR_RE = /[&"<>]/g;
|
|
197
|
+
const TEXT_RE = /[&<>]/g;
|
|
198
|
+
const ATTR_MAP = {
|
|
199
|
+
'&': '&',
|
|
200
|
+
'"': '"',
|
|
201
|
+
'<': '<',
|
|
202
|
+
'>': '>'
|
|
203
|
+
};
|
|
204
|
+
const TEXT_MAP = {
|
|
205
|
+
'&': '&',
|
|
206
|
+
'<': '<',
|
|
207
|
+
'>': '>'
|
|
208
|
+
};
|
|
209
|
+
const escapeAttr = str => {
|
|
210
|
+
const s = String(str);
|
|
211
|
+
return ATTR_RE.test(s) ? s.replace(ATTR_RE, m => ATTR_MAP[m]) : s;
|
|
212
|
+
};
|
|
213
|
+
const escapeText = str => {
|
|
214
|
+
const s = String(str);
|
|
215
|
+
return TEXT_RE.test(s) ? s.replace(TEXT_RE, m => TEXT_MAP[m]) : s;
|
|
216
|
+
};
|
|
217
|
+
const createNode = name => {
|
|
218
|
+
if (name === 'text') {
|
|
219
|
+
return new Text('');
|
|
220
|
+
}
|
|
221
|
+
ctx.root.value += `<${name}`;
|
|
222
|
+
return new Element(name);
|
|
223
|
+
};
|
|
224
|
+
const setProp = (node, key, value) => {
|
|
225
|
+
if (node.startClosed) return;
|
|
226
|
+
if (key.startsWith('on') || key === 'ref') return;
|
|
227
|
+
if (key === 'text') {
|
|
228
|
+
if (value == null) return;
|
|
229
|
+
node.textContent = value;
|
|
230
|
+
return;
|
|
231
|
+
}
|
|
232
|
+
if (key === 'html') {
|
|
233
|
+
if (value == null) return;
|
|
234
|
+
node._innerHtml = String(value);
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
if (key === 'class') {
|
|
238
|
+
if (value == null) return;
|
|
239
|
+
let classStr;
|
|
240
|
+
if (typeof value === 'object' && !Array.isArray(value)) {
|
|
241
|
+
classStr = Object.entries(value).filter(([, v]) => !!v).map(([k]) => k).join(' ');
|
|
242
|
+
} else {
|
|
243
|
+
classStr = typeof value === 'boolean' ? value ? 'true' : '' : String(value);
|
|
244
|
+
}
|
|
245
|
+
if (classStr) ctx.root.value += ` class="${escapeAttr(classStr)}"`;
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
if (key === 'style') {
|
|
249
|
+
if (value == null) return;
|
|
250
|
+
ctx.root.value += ` style="${escapeAttr(String(value))}"`;
|
|
251
|
+
return;
|
|
252
|
+
}
|
|
253
|
+
if (BOOLEAN_ATTRS.has(key)) {
|
|
254
|
+
if (value !== false && value !== null && value !== undefined) {
|
|
255
|
+
ctx.root.value += ` ${key}`;
|
|
256
|
+
}
|
|
257
|
+
return;
|
|
258
|
+
}
|
|
259
|
+
if (key.startsWith('data-') || key.startsWith('aria-')) {
|
|
260
|
+
if (value == null) return;
|
|
261
|
+
ctx.root.value += ` ${key}="${escapeAttr(value)}"`;
|
|
262
|
+
return;
|
|
263
|
+
}
|
|
264
|
+
if (value == null) return;
|
|
265
|
+
ctx.root.value += ` ${key}="${escapeAttr(value)}"`;
|
|
266
|
+
};
|
|
267
|
+
const appendInnerContent = node => {
|
|
268
|
+
if (node._innerHtml != null) {
|
|
269
|
+
ctx.root.value += node._innerHtml;
|
|
270
|
+
return true;
|
|
271
|
+
}
|
|
272
|
+
if (node.textContent != null) {
|
|
273
|
+
ctx.root.value += escapeText(node.textContent);
|
|
274
|
+
return true;
|
|
275
|
+
}
|
|
276
|
+
return false;
|
|
277
|
+
};
|
|
278
|
+
const beforeIndent = node => {
|
|
279
|
+
if (node instanceof Text) return true;
|
|
280
|
+
const hasText = node.textContent != null;
|
|
281
|
+
const hasHtml = node._innerHtml != null;
|
|
282
|
+
if (VOID_TAGS.has(node.value)) {
|
|
283
|
+
ctx.root.value += `/>`;
|
|
284
|
+
console.warn(`<${node.value}> can't have children`);
|
|
285
|
+
node.startClosed = true;
|
|
286
|
+
node.closed = true;
|
|
287
|
+
return false;
|
|
288
|
+
}
|
|
289
|
+
if (hasText || hasHtml) {
|
|
290
|
+
console.warn(`<${node.value}> has ${hasHtml ? 'html' : 'text'} content and child elements — children ignored`);
|
|
291
|
+
ctx.root.value += `>`;
|
|
292
|
+
appendInnerContent(node);
|
|
293
|
+
ctx.root.value += `</${node.value}>`;
|
|
294
|
+
node.startClosed = true;
|
|
295
|
+
node.closed = true;
|
|
296
|
+
return false;
|
|
297
|
+
}
|
|
298
|
+
ctx.root.value += `>`;
|
|
299
|
+
node.startClosed = true;
|
|
300
|
+
return true;
|
|
301
|
+
};
|
|
302
|
+
const leaveLogicNode = node => {
|
|
303
|
+
const realAfter = node.realAfter;
|
|
304
|
+
ctx.root.value += `<!--${realAfter.value}-->`;
|
|
305
|
+
};
|
|
306
|
+
const leaveNode = (node, isDedent) => {
|
|
307
|
+
if (node.closed) return;
|
|
308
|
+
if (node instanceof Text) {
|
|
309
|
+
ctx.root.value += escapeText(node.textContent);
|
|
310
|
+
} else {
|
|
311
|
+
if (node.startClosed) {
|
|
312
|
+
if (VOID_TAGS.has(node.value)) ; else {
|
|
313
|
+
ctx.root.value += `</${node.value}>`;
|
|
314
|
+
}
|
|
315
|
+
} else {
|
|
316
|
+
if (VOID_TAGS.has(node.value)) {
|
|
317
|
+
ctx.root.value += ` />`;
|
|
318
|
+
} else {
|
|
319
|
+
ctx.root.value += `>`;
|
|
320
|
+
appendInnerContent(node);
|
|
321
|
+
ctx.root.value += `</${node.value}>`;
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
};
|
|
326
|
+
const insertAfter = (parent, node, prev) => {
|
|
327
|
+
const next = prev ? prev.nextSibling : parent.firstChild;
|
|
328
|
+
node.nextSibling = next;
|
|
329
|
+
node.prevSibling = prev;
|
|
330
|
+
if (prev) {
|
|
331
|
+
prev.nextSibling = node;
|
|
332
|
+
} else {
|
|
333
|
+
parent.firstChild = node;
|
|
334
|
+
}
|
|
335
|
+
if (next) {
|
|
336
|
+
next.prevSibling = node;
|
|
337
|
+
} else {
|
|
338
|
+
parent.lastChild = node;
|
|
339
|
+
}
|
|
340
|
+
node.parent = parent;
|
|
341
|
+
};
|
|
342
|
+
const createAnchor = (name, isBefore) => {
|
|
343
|
+
if (isBefore) {
|
|
344
|
+
ctx.root.value += `<!--${name}-->`;
|
|
345
|
+
}
|
|
346
|
+
return new Anchor(name);
|
|
347
|
+
};
|
|
348
|
+
const remove = node => {
|
|
349
|
+
const parent = node.parent,
|
|
350
|
+
prevSibling = node.prevSibling,
|
|
351
|
+
nextSibling = node.nextSibling;
|
|
352
|
+
if (prevSibling) {
|
|
353
|
+
prevSibling.nextSibling = nextSibling;
|
|
354
|
+
}
|
|
355
|
+
if (nextSibling) {
|
|
356
|
+
nextSibling.prevSibling = prevSibling;
|
|
357
|
+
}
|
|
358
|
+
if (parent) {
|
|
359
|
+
if (parent.firstChild === node) {
|
|
360
|
+
parent.firstChild = nextSibling;
|
|
361
|
+
}
|
|
362
|
+
if (parent.lastChild === node) {
|
|
363
|
+
parent.lastChild = prevSibling;
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
};
|
|
367
|
+
const firstChild = node => node.firstChild;
|
|
368
|
+
const nextSib = node => node.nextSibling;
|
|
369
|
+
const renderHtmlStr = ComponentClass => {
|
|
370
|
+
cleanCtx();
|
|
371
|
+
const root = new Root('');
|
|
372
|
+
ctx.root = ctx.current = root;
|
|
373
|
+
const render = customRender({
|
|
374
|
+
createNode,
|
|
375
|
+
setProp,
|
|
376
|
+
insertAfter,
|
|
377
|
+
createAnchor,
|
|
378
|
+
remove,
|
|
379
|
+
firstChild,
|
|
380
|
+
nextSib,
|
|
381
|
+
beforeIndent,
|
|
382
|
+
leaveNode,
|
|
383
|
+
leaveLogicNode,
|
|
384
|
+
noopEffect: true
|
|
385
|
+
});
|
|
386
|
+
render(ComponentClass, root);
|
|
387
|
+
return {
|
|
388
|
+
html: ctx.root.value
|
|
389
|
+
};
|
|
390
|
+
};
|
|
391
|
+
|
|
392
|
+
class TreeCursor {
|
|
393
|
+
claimed = new WeakSet();
|
|
394
|
+
constructor(container) {
|
|
395
|
+
this.parent = container;
|
|
396
|
+
}
|
|
397
|
+
enterChildren(node) {
|
|
398
|
+
this.parent = node;
|
|
399
|
+
}
|
|
400
|
+
leaveToParent(node) {
|
|
401
|
+
if (node === this.parent && this.parent.parentNode) {
|
|
402
|
+
this.parent = this.parent.parentNode;
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
findUnclaimed(predicate) {
|
|
406
|
+
let node = this.parent.firstChild;
|
|
407
|
+
while (node) {
|
|
408
|
+
if (!this.claimed.has(node) && predicate(node)) {
|
|
409
|
+
this.claimed.add(node);
|
|
410
|
+
return node;
|
|
411
|
+
}
|
|
412
|
+
node = node.nextSibling;
|
|
413
|
+
}
|
|
414
|
+
return null;
|
|
415
|
+
}
|
|
416
|
+
tryClaimElement(tagName) {
|
|
417
|
+
return this.findUnclaimed(node => node.nodeType === 1 && node.tagName.toLowerCase() === tagName);
|
|
418
|
+
}
|
|
419
|
+
tryClaimComment(name) {
|
|
420
|
+
return this.findUnclaimed(node => node.nodeType === 8 && node.data === name);
|
|
421
|
+
}
|
|
422
|
+
tryClaimText() {
|
|
423
|
+
return this.findUnclaimed(node => node.nodeType === 3 && !!node.textContent?.trim());
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
const hydrate = (ComponentClass, rootEl) => {
|
|
427
|
+
const container = rootEl.parentNode;
|
|
428
|
+
const cursor = new TreeCursor(container);
|
|
429
|
+
let isFirstRender = true;
|
|
430
|
+
const hydrateSetProp = (node, key, value) => {
|
|
431
|
+
if (isFirstRender && (key === 'text' || key === 'html')) {
|
|
432
|
+
node[CONTENT_FLAG] = value != null;
|
|
433
|
+
return;
|
|
434
|
+
}
|
|
435
|
+
return setProp$1(node, key, value);
|
|
436
|
+
};
|
|
437
|
+
const createNode = name => {
|
|
438
|
+
if (isFirstRender) {
|
|
439
|
+
const claimed = name === 'text' ? cursor.tryClaimText() : cursor.tryClaimElement(name);
|
|
440
|
+
if (claimed) return claimed;
|
|
441
|
+
}
|
|
442
|
+
return name === 'text' ? document.createTextNode('') : createNode$1(name);
|
|
443
|
+
};
|
|
444
|
+
const createAnchor = name => {
|
|
445
|
+
if (isFirstRender) {
|
|
446
|
+
const claimed = cursor.tryClaimComment(name);
|
|
447
|
+
if (claimed) return claimed;
|
|
448
|
+
}
|
|
449
|
+
return document.createComment(name);
|
|
450
|
+
};
|
|
451
|
+
const insertAfter = (parent, node, prev) => {
|
|
452
|
+
if (node === parent) return;
|
|
453
|
+
const expectedNext = prev ? prev.nextSibling : parent.firstChild;
|
|
454
|
+
if (node === expectedNext) return;
|
|
455
|
+
parent.insertBefore(node, expectedNext);
|
|
456
|
+
};
|
|
457
|
+
const beforeIndent = node => {
|
|
458
|
+
if (node[CONTENT_FLAG]) {
|
|
459
|
+
const tag = node.tagName?.toLowerCase();
|
|
460
|
+
const hasText = node.textContent != null;
|
|
461
|
+
console.warn(`<${tag}> has ${hasText ? 'text' : 'html'} content and child elements — children ignored`);
|
|
462
|
+
return false;
|
|
463
|
+
}
|
|
464
|
+
if (isFirstRender) cursor.enterChildren(node);
|
|
465
|
+
};
|
|
466
|
+
const leaveNode = node => {
|
|
467
|
+
if (isFirstRender) cursor.leaveToParent(node);
|
|
468
|
+
};
|
|
469
|
+
const leaveLogicNode = node => {
|
|
470
|
+
if (isFirstRender) cursor.leaveToParent(node);
|
|
471
|
+
};
|
|
472
|
+
const render = customRender({
|
|
473
|
+
createNode,
|
|
474
|
+
setProp: hydrateSetProp,
|
|
475
|
+
insertAfter,
|
|
476
|
+
createAnchor,
|
|
477
|
+
remove: remove$1,
|
|
478
|
+
firstChild: firstChild$1,
|
|
479
|
+
nextSib: nextSib$1,
|
|
480
|
+
beforeIndent,
|
|
481
|
+
leaveNode,
|
|
482
|
+
leaveLogicNode,
|
|
483
|
+
onBeforeFlush: () => {
|
|
484
|
+
isFirstRender = false;
|
|
485
|
+
}
|
|
486
|
+
});
|
|
487
|
+
return render(ComponentClass, container);
|
|
488
|
+
};
|
|
489
|
+
|
|
490
|
+
export { BOOLEAN_ATTRS$1 as BOOLEAN_ATTRS, CONTENT_FLAG, beforeIndent$1 as beforeIndent, createAnchor$1 as createAnchor, createNode$1 as createNode, firstChild$1 as firstChild, hydrate, insertAfter$1 as insertAfter, leaveLogicNode$1 as leaveLogicNode, leaveNode$1 as leaveNode, nextSib$1 as nextSib, remove$1 as remove, render, renderHtmlStr, setProp$1 as setProp };
|
|
117
491
|
//# sourceMappingURL=bobe-dom.esm.js.map
|
package/dist/bobe-dom.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bobe-dom.esm.js","sources":["../src/render.ts"],"sourcesContent":["import { customRender } from 'bobe';\n\nexport const BOOLEAN_ATTRS = new Set([\n 'disabled', 'readonly', 'checked', 'selected', 'hidden',\n 'multiple', 'required', 'autofocus', 'autoplay', 'controls',\n 'loop', 'muted', 'defer', 'async', 'reversed', 'open',\n 'itemscope', 'ismap', 'nohref', 'noshade', 'nowrap', 'compact', 'default'\n]);\n\nconst VALUE_PROP_TAGS = new Set(['INPUT', 'TEXTAREA', 'SELECT']);\n\nconst SVG_NS = 'http://www.w3.org/2000/svg';\nconst MATH_NS = 'http://www.w3.org/1998/Math/MathML';\n\nconst SVG_TAGS = new Set([\n 'svg', 'animate', 'animateMotion', 'animateTransform', 'circle', 'clipPath',\n 'defs', 'desc', 'ellipse', 'feBlend', 'feColorMatrix', 'feComponentTransfer',\n 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap',\n 'feDistantLight', 'feDropShadow', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG',\n 'feFuncR', 'feGaussianBlur', 'feImage', 'feMerge', 'feMergeNode', 'feMorphology',\n 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile',\n 'feTurbulence', 'filter', 'foreignObject', 'g', 'image', 'line', 'linearGradient',\n 'marker', 'mask', 'metadata', 'mpath', 'path', 'pattern', 'polygon', 'polyline',\n 'radialGradient', 'rect', 'set', 'stop', 'switch', 'symbol', 'textPath',\n 'tspan', 'use', 'view'\n]);\n\nconst MATH_TAGS = new Set([\n 'math', 'maction', 'maligngroup', 'malignmark', 'menclose', 'merror',\n 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr', 'mlongdiv', 'mmultiscripts',\n 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot', 'mrow', 'ms', 'mscarries',\n 'mscarry', 'msgroup', 'mstack', 'mspace', 'msqrt', 'msrow', 'mstyle', 'msub',\n 'msup', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', 'munderover',\n 'semantics', 'annotation', 'annotation-xml'\n]);\n\nconst isNS = (el: Element) => el.namespaceURI === SVG_NS || el.namespaceURI === MATH_NS;\n\n// ---- exported for unit testing ----\n\nexport const createNode = (name: string): Node => {\n if (name === 'text') return document.createTextNode('');\n if (MATH_TAGS.has(name)) return document.createElementNS(MATH_NS, name);\n if (SVG_TAGS.has(name)) return document.createElementNS(SVG_NS, name);\n return document.createElement(name);\n};\n\nexport const setProp = (node: Node, key: string, value: any): (() => void) | undefined => {\n const el = node as HTMLElement;\n\n // 0. text\n if (key === 'text') {\n node.textContent = value;\n return;\n }\n\n // 1. 事件\n if (key.startsWith('on')) {\n const evtName = key.slice(2);\n node.addEventListener(evtName, value);\n return () => node.removeEventListener(evtName, value);\n }\n\n // 2. class\n if (key === 'class') {\n if (value == null) {\n el.className = '';\n } else if (typeof value === 'object' && !Array.isArray(value)) {\n if (isNS(el)) {\n const names = Object.entries(value as Record<string, any>)\n .filter(([, v]) => !!v)\n .map(([k]) => k)\n .join(' ');\n el.setAttribute('class', names);\n } else {\n for (const k in value) {\n el.classList.toggle(k, !!(value as Record<string, any>)[k]);\n }\n }\n } else {\n const str = typeof value === 'boolean' ? (value ? 'true' : '') : String(value);\n if (isNS(el)) {\n el.setAttribute('class', str);\n } else {\n el.className = str;\n }\n }\n return;\n }\n\n // 3. style\n if (key === 'style') {\n if (value == null) {\n el.style.cssText = '';\n } else {\n el.style.cssText = String(value);\n }\n return;\n }\n\n // 4. html\n if (key === 'html') {\n (node as Element).innerHTML = value == null ? '' : String(value);\n return;\n }\n\n // 5. 布尔属性\n if (BOOLEAN_ATTRS.has(key)) {\n if (value === false || value === null || value === undefined) {\n el.removeAttribute(key);\n } else {\n el.setAttribute(key, '');\n }\n return;\n }\n\n // 6. input/textarea/select value & checked\n if ((key === 'value' || key === 'checked') && VALUE_PROP_TAGS.has(el.tagName)) {\n (el as any)[key] = value;\n return;\n }\n\n // 7. SVG/MathML 元素\n if (isNS(el)) {\n if (value == null) {\n el.removeAttribute(key);\n } else {\n el.setAttribute(key, String(value));\n }\n return;\n }\n\n // 8. data-* / aria-*\n if (key.startsWith('data-') || key.startsWith('aria-')) {\n if (value == null) {\n el.removeAttribute(key);\n } else {\n el.setAttribute(key, String(value));\n }\n return;\n }\n\n // 9. 其余属性\n if (value == null) {\n el.removeAttribute(key);\n } else if (key in el) {\n (el as any)[key] = value;\n } else {\n el.setAttribute(key, String(value));\n }\n};\n\nexport const insertAfter = (parent: Node, node: Node, prev: Node | null) => {\n if (!prev) parent.insertBefore(node, parent.firstChild);\n else parent.insertBefore(node, prev.nextSibling);\n};\n\nexport const createAnchor = (name: string) => document.createComment(name);\n\nexport const remove = (node: Node) => { (node as Element).remove(); };\n\nexport const firstChild = (node: Node) => node.firstChild;\n\nexport const nextSib = (node: Node) => node.nextSibling;\n\nexport const render = customRender({\n createNode,\n setProp,\n insertAfter,\n createAnchor,\n remove,\n firstChild,\n nextSib\n});\n"],"names":["BOOLEAN_ATTRS","Set","VALUE_PROP_TAGS","SVG_NS","MATH_NS","SVG_TAGS","MATH_TAGS","isNS","el","namespaceURI","createNode","name","document","createTextNode","has","createElementNS","createElement","setProp","node","key","value","textContent","startsWith","evtName","slice","addEventListener","removeEventListener","className","Array","isArray","names","Object","entries","filter","v","map","k","join","setAttribute","classList","toggle","str","String","style","cssText","innerHTML","undefined","removeAttribute","tagName","insertAfter","parent","prev","insertBefore","firstChild","nextSibling","createAnchor","createComment","remove","nextSib","render","customRender"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bobe-dom.esm.js","sources":["../src/render.ts","../src/global.ts","../src/type.ts","../src/render-html-str.ts","../src/render-hydrate.ts"],"sourcesContent":["import { customRender } from 'bobe';\n\nexport const BOOLEAN_ATTRS = new Set([\n 'disabled', 'readonly', 'checked', 'selected', 'hidden',\n 'multiple', 'required', 'autofocus', 'autoplay', 'controls',\n 'loop', 'muted', 'defer', 'async', 'reversed', 'open',\n 'itemscope', 'ismap', 'nohref', 'noshade', 'nowrap', 'compact', 'default'\n]);\n\nconst VALUE_PROP_TAGS = new Set(['INPUT', 'TEXTAREA', 'SELECT']);\n\nconst SVG_NS = 'http://www.w3.org/2000/svg';\nconst MATH_NS = 'http://www.w3.org/1998/Math/MathML';\n\nconst SVG_TAGS = new Set([\n 'svg', 'animate', 'animateMotion', 'animateTransform', 'circle', 'clipPath',\n 'defs', 'desc', 'ellipse', 'feBlend', 'feColorMatrix', 'feComponentTransfer',\n 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap',\n 'feDistantLight', 'feDropShadow', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG',\n 'feFuncR', 'feGaussianBlur', 'feImage', 'feMerge', 'feMergeNode', 'feMorphology',\n 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile',\n 'feTurbulence', 'filter', 'foreignObject', 'g', 'image', 'line', 'linearGradient',\n 'marker', 'mask', 'metadata', 'mpath', 'path', 'pattern', 'polygon', 'polyline',\n 'radialGradient', 'rect', 'set', 'stop', 'switch', 'symbol', 'textPath',\n 'tspan', 'use', 'view'\n]);\n\nconst MATH_TAGS = new Set([\n 'math', 'maction', 'maligngroup', 'malignmark', 'menclose', 'merror',\n 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr', 'mlongdiv', 'mmultiscripts',\n 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot', 'mrow', 'ms', 'mscarries',\n 'mscarry', 'msgroup', 'mstack', 'mspace', 'msqrt', 'msrow', 'mstyle', 'msub',\n 'msup', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', 'munderover',\n 'semantics', 'annotation', 'annotation-xml'\n]);\n\nconst isNS = (el: Element) => el.namespaceURI === SVG_NS || el.namespaceURI === MATH_NS;\n\n// ---- exported for unit testing ----\n\nexport const createNode = (name: string): Node => {\n if (name === 'text') return document.createTextNode('');\n if (MATH_TAGS.has(name)) return document.createElementNS(MATH_NS, name);\n if (SVG_TAGS.has(name)) return document.createElementNS(SVG_NS, name);\n return document.createElement(name);\n};\n\nexport const CONTENT_FLAG = Symbol('hasContent');\n\nexport const setProp = (node: Node, key: string, value: any): (() => void) | undefined => {\n const el = node as HTMLElement;\n\n // 0. text\n if (key === 'text') {\n (node as any)[CONTENT_FLAG] = value != null;\n if (value == null) return;\n node.textContent = value;\n return;\n }\n\n // 1. 事件\n if (key.startsWith('on')) {\n const evtName = key.slice(2);\n node.addEventListener(evtName, value);\n return () => node.removeEventListener(evtName, value);\n }\n\n // 2. class\n if (key === 'class') {\n if (value == null) {\n el.className = '';\n } else if (typeof value === 'object' && !Array.isArray(value)) {\n if (isNS(el)) {\n const names = Object.entries(value as Record<string, any>)\n .filter(([, v]) => !!v)\n .map(([k]) => k)\n .join(' ');\n el.setAttribute('class', names);\n } else {\n for (const k in value) {\n el.classList.toggle(k, !!(value as Record<string, any>)[k]);\n }\n }\n } else {\n const str = typeof value === 'boolean' ? (value ? 'true' : '') : String(value);\n if (isNS(el)) {\n el.setAttribute('class', str);\n } else {\n el.className = str;\n }\n }\n return;\n }\n\n // 3. style\n if (key === 'style') {\n if (value == null) {\n el.style.cssText = '';\n } else {\n el.style.cssText = String(value);\n }\n return;\n }\n\n // 4. html\n if (key === 'html') {\n (node as any)[CONTENT_FLAG] = value != null;\n if (value == null) return;\n (node as Element).innerHTML = String(value);\n return;\n }\n\n // 5. 布尔属性\n if (BOOLEAN_ATTRS.has(key)) {\n if (value === false || value === null || value === undefined) {\n el.removeAttribute(key);\n } else {\n el.setAttribute(key, '');\n }\n return;\n }\n\n // 6. input/textarea/select value & checked\n if ((key === 'value' || key === 'checked') && VALUE_PROP_TAGS.has(el.tagName)) {\n (el as any)[key] = value;\n return;\n }\n\n // 7. SVG/MathML 元素\n if (isNS(el)) {\n if (value == null) {\n el.removeAttribute(key);\n } else {\n el.setAttribute(key, String(value));\n }\n return;\n }\n\n // 8. data-* / aria-*\n if (key.startsWith('data-') || key.startsWith('aria-')) {\n if (value == null) {\n el.removeAttribute(key);\n } else {\n el.setAttribute(key, String(value));\n }\n return;\n }\n\n // 9. 其余属性\n if (value == null) {\n el.removeAttribute(key);\n } else if (key in el) {\n (el as any)[key] = value;\n } else {\n el.setAttribute(key, String(value));\n }\n};\n\nexport const insertAfter = (parent: Node, node: Node, prev: Node | null) => {\n if (!prev) parent.insertBefore(node, parent.firstChild);\n else parent.insertBefore(node, prev.nextSibling);\n};\n\nexport const createAnchor = (name: string) => document.createComment(name);\n\nexport const remove = (node: Node) => { (node as Element).remove(); };\n\nexport const firstChild = (node: Node) => node.firstChild;\n\nexport const nextSib = (node: Node) => node.nextSibling;\n\nexport const beforeIndent = (node: Node): boolean | void => {\n if ((node as any)[CONTENT_FLAG]) {\n const tag = (node as Element).tagName?.toLowerCase();\n const hasText = (node as HTMLElement).textContent != null;\n console.warn(`<${tag}> has ${hasText ? 'text' : 'html'} content and child elements — children ignored`);\n return false;\n }\n};\n\n// 浏览器渲染器中 leave 不需要额外操作(DOM 插入已由 insertAfter 完成)\nexport const leaveNode = () => {};\nexport const leaveLogicNode = () => {};\n\nexport const render = customRender({\n createNode,\n setProp,\n insertAfter,\n createAnchor,\n remove,\n firstChild,\n nextSib,\n beforeIndent,\n leaveNode,\n leaveLogicNode\n});\n","import { SSRCtx } from './type';\nexport let ctx: SSRCtx = {\n root: null,\n current: null\n};\n\nexport const cleanCtx = () =>\n Object.keys(ctx).forEach(key => {\n ctx[key] = null;\n });\n","export class SSRNode {\n type: SSRNodeType;\n // 链表\n parent?: SSRNode | null = null;\n firstChild: SSRNode | null = null;\n lastChild: SSRNode | null = null; // O(1) 尾插\n nextSibling: SSRNode | null = null;\n prevSibling: SSRNode | null = null;\n closed: boolean = false;\n startClosed: boolean = false;\n // innerHTML 缓存\n _innerHtml: string | null = null;\n}\n\nexport enum SSRNodeType {\n Element,\n Text,\n Anchor,\n Root\n}\n\nexport class Element extends SSRNode {\n type = SSRNodeType.Element;\n textContent: string | null = null;\n\n attrs: Record<string, string> = {};\n constructor(\n /** 标签名 */\n public value: string,\n public parent?: SSRNode | null\n ) {\n super();\n }\n}\n\nexport class Text extends SSRNode {\n type = SSRNodeType.Text;\n constructor(\n /** 文本内容 */\n public textContent: string,\n public parent?: SSRNode | null\n ) {\n super();\n }\n}\n\nexport class Anchor extends SSRNode {\n type = SSRNodeType.Anchor;\n constructor(\n /** 注释内容 */\n public value: string,\n public parent?: SSRNode | null\n ) {\n super();\n }\n}\nexport class Root extends SSRNode {\n type = SSRNodeType.Root;\n constructor(\n /** 输出 HTML */\n public value: string,\n public parent?: SSRNode | null\n ) {\n super();\n }\n}\n\nexport type SSRCtx = {\n /** 根节点 */\n root: Root;\n /** 当前节点 */\n current: SSRNode;\n};\n","import { customRender, Store, LogicNode } from 'bobe';\nimport { cleanCtx, ctx } from './global';\nimport { Root, Element, Text, Anchor, SSRNode, SSRNodeType } from './type';\n\nconst VOID_TAGS = new Set([\n 'area',\n 'base',\n 'br',\n 'col',\n 'embed',\n 'hr',\n 'img',\n 'input',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr'\n]);\n\nconst BOOLEAN_ATTRS = new Set([\n 'disabled',\n 'readonly',\n 'checked',\n 'selected',\n 'hidden',\n 'multiple',\n 'required',\n 'autofocus',\n 'autoplay',\n 'controls',\n 'loop',\n 'muted',\n 'defer',\n 'async',\n 'reversed',\n 'open',\n 'itemscope',\n 'ismap',\n 'nohref',\n 'noshade',\n 'nowrap',\n 'compact',\n 'default'\n]);\n\nconst ATTR_RE = /[&\"<>]/g;\nconst TEXT_RE = /[&<>]/g;\nconst ATTR_MAP: Record<string, string> = {\n '&': '&',\n '\"': '"',\n '<': '<',\n '>': '>'\n};\nconst TEXT_MAP: Record<string, string> = {\n '&': '&',\n '<': '<',\n '>': '>'\n};\n\nconst escapeAttr = (str: string) => {\n const s = String(str);\n return ATTR_RE.test(s) ? s.replace(ATTR_RE, m => ATTR_MAP[m]) : s;\n};\n\nconst escapeText = (str: string) => {\n const s = String(str);\n return TEXT_RE.test(s) ? s.replace(TEXT_RE, m => TEXT_MAP[m]) : s;\n};\n\nconst createNode = (name: string) => {\n if (name === 'text') {\n return new Text('');\n }\n ctx.root.value += `<${name}`;\n return new Element(name);\n};\n\nconst setProp = (node: Text | Element, key: string, value: any) => {\n if (node.startClosed) return;\n if (key.startsWith('on') || key === 'ref') return;\n\n // 0. text\n if (key === 'text') {\n if (value == null) return;\n node.textContent = value;\n return;\n }\n\n // 1. html\n if (key === 'html') {\n if (value == null) return;\n node._innerHtml = String(value);\n return;\n }\n\n // 2. class — 对齐 Browser:支持对象/字符串/null\n if (key === 'class') {\n if (value == null) return;\n let classStr: string;\n if (typeof value === 'object' && !Array.isArray(value)) {\n classStr = Object.entries(value as Record<string, any>)\n .filter(([, v]) => !!v)\n .map(([k]) => k)\n .join(' ');\n } else {\n classStr = typeof value === 'boolean' ? (value ? 'true' : '') : String(value);\n }\n if (classStr) ctx.root.value += ` class=\"${escapeAttr(classStr)}\"`;\n return;\n }\n\n // 3. style — 对齐 Browser\n if (key === 'style') {\n if (value == null) return;\n ctx.root.value += ` style=\"${escapeAttr(String(value))}\"`;\n return;\n }\n\n // 4. 布尔属性\n if (BOOLEAN_ATTRS.has(key)) {\n if (value !== false && value !== null && value !== undefined) {\n ctx.root.value += ` ${key}`;\n }\n return;\n }\n\n // 5. data-* / aria-* — 对齐 Browser:null 时不输出\n if (key.startsWith('data-') || key.startsWith('aria-')) {\n if (value == null) return;\n ctx.root.value += ` ${key}=\"${escapeAttr(value)}\"`;\n return;\n }\n\n // 6. 其余属性 — 对齐 Browser:null 时不输出\n if (value == null) return;\n ctx.root.value += ` ${key}=\"${escapeAttr(value)}\"`;\n};\n\nconst appendInnerContent = (node: Element) => {\n if (node._innerHtml != null) {\n ctx.root.value += node._innerHtml;\n return true;\n }\n if (node.textContent != null) {\n ctx.root.value += escapeText(node.textContent);\n return true;\n }\n return false;\n};\n\nconst beforeIndent = (node: Text | Element): boolean => {\n if (node instanceof Text) return true;\n\n const hasText = node.textContent != null;\n const hasHtml = node._innerHtml != null;\n\n // 不能包含内容的元素\n if (VOID_TAGS.has(node.value)) {\n ctx.root.value += `/>`;\n console.warn(`<${node.value}> can't have children`);\n node.startClosed = true;\n node.closed = true;\n return false;\n }\n\n if (hasText || hasHtml) {\n console.warn(`<${node.value}> has ${hasHtml ? 'html' : 'text'} content and child elements — children ignored`);\n ctx.root.value += `>`;\n // 容器元素有 text/html 内容且检测到子节点冲突,立即闭合;与 leaveNode 叶元素路径互斥\n appendInnerContent(node);\n ctx.root.value += `</${node.value}>`;\n node.startClosed = true;\n node.closed = true;\n return false;\n }\n\n ctx.root.value += `>`;\n node.startClosed = true;\n return true;\n};\n\nconst leaveLogicNode = (node: LogicNode) => {\n const realAfter = node.realAfter as Anchor;\n ctx.root.value += `<!--${realAfter.value}-->`;\n};\nconst leaveNode = (node: Text | Element, isDedent: boolean) => {\n /**\n * indent 提前 closed 就退出,这两种都是有缩进的\n * 1. 元素属于 VOID_TAGS\n * 2. 元素 text/html 属性与 children 冲突,采用 text/html\n */\n if (node.closed) return;\n if (node instanceof Text) {\n ctx.root.value += escapeText(node.textContent);\n } else {\n // 如果现在是 \"<div>\" 状态,添加 />\n if (node.startClosed) {\n // 什么都不做,正常永远都不会进入,因为 beforeIndent 会直接加 /> 设置 closed = true\n if (VOID_TAGS.has(node.value)) {\n } else {\n ctx.root.value += `</${node.value}>`;\n }\n }\n // 无 startClosed, 叶子节点\n else {\n // 直接自闭合\n if (VOID_TAGS.has(node.value)) {\n ctx.root.value += ` />`;\n }\n // 先加入 '>' 再看有内容加内容,最后反 Tag 闭合\n else {\n ctx.root.value += `>`;\n // 叶元素,无子节点;与 beforeIndent 中的 appendInnerContent 互斥\n appendInnerContent(node);\n ctx.root.value += `</${node.value}>`;\n }\n }\n }\n};\n\nconst insertAfter = (parent: SSRNode, node: SSRNode, prev: SSRNode | null) => {\n const next = prev ? prev.nextSibling : parent.firstChild;\n node.nextSibling = next;\n node.prevSibling = prev;\n\n if (prev) {\n prev.nextSibling = node;\n } else {\n parent.firstChild = node;\n }\n if (next) {\n next.prevSibling = node;\n } else {\n parent.lastChild = node;\n }\n node.parent = parent;\n};\n\nconst createAnchor = (name: string, isBefore?: boolean) => {\n if (isBefore) {\n ctx.root.value += `<!--${name}-->`;\n }\n return new Anchor(name);\n};\n\nconst remove = (node: SSRNode) => {\n const { parent, prevSibling, nextSibling } = node;\n if (prevSibling) {\n prevSibling.nextSibling = nextSibling;\n }\n if (nextSibling) {\n nextSibling.prevSibling = prevSibling;\n }\n if (parent) {\n if (parent.firstChild === node) {\n parent.firstChild = nextSibling;\n }\n if (parent.lastChild === node) {\n parent.lastChild = prevSibling;\n }\n }\n};\n\nconst firstChild = (node: SSRNode) => node.firstChild;\n\nconst nextSib = (node: SSRNode) => node.nextSibling;\n\nexport const renderHtmlStr = (ComponentClass: typeof Store) => {\n cleanCtx();\n const root = new Root('');\n ctx.root = ctx.current = root;\n const render = customRender({\n createNode,\n setProp,\n insertAfter,\n createAnchor,\n remove,\n firstChild,\n nextSib,\n beforeIndent,\n leaveNode,\n leaveLogicNode,\n noopEffect: true\n });\n render(ComponentClass, root);\n return {\n html: ctx.root.value\n };\n};\n","import { customRender, Store } from 'bobe';\nimport {\n setProp,\n createNode as browserCreateNode,\n remove,\n firstChild,\n nextSib,\n CONTENT_FLAG\n} from './render';\n\n// ====== TreeCursor ======\n\nclass TreeCursor {\n private parent: Node;\n private claimed = new WeakSet<Node>();\n\n constructor(container: Node) {\n this.parent = container;\n }\n\n enterChildren(node: Node) {\n this.parent = node;\n }\n\n leaveToParent(node: Node) {\n if (node === this.parent && this.parent.parentNode) {\n this.parent = this.parent.parentNode;\n }\n }\n\n private findUnclaimed(predicate: (node: Node) => boolean): Node | null {\n let node = this.parent.firstChild;\n while (node) {\n if (!this.claimed.has(node) && predicate(node)) {\n this.claimed.add(node);\n return node;\n }\n node = node.nextSibling;\n }\n return null;\n }\n\n tryClaimElement(tagName: string): Element | null {\n return this.findUnclaimed(\n (node) => node.nodeType === 1 && (node as Element).tagName.toLowerCase() === tagName\n ) as Element | null;\n }\n\n tryClaimComment(name: string): Comment | null {\n return this.findUnclaimed(\n (node) => node.nodeType === 8 && (node as Comment).data === name\n ) as Comment | null;\n }\n\n tryClaimText(): Text | null {\n return this.findUnclaimed(\n (node) => node.nodeType === 3 && !!(node.textContent?.trim())\n ) as Text | null;\n }\n}\n\n// ====== 回调 ======\n\nexport const hydrate = (ComponentClass: typeof Store, rootEl: Element) => {\n const container = rootEl.parentNode!;\n const cursor = new TreeCursor(container);\n // 首屏 render 期间(含 flushMicroEffectManual 中的 for/if effect 首次执行)为 true\n // 后续响应式更新为 false,createNode/createAnchor 直接创建新节点\n let isFirstRender = true;\n\n // 首屏时 text/html 的 DOM 内容已由 SSR 生成,跳过 innerHTML/textContent 赋值避免重绘\n // 但仍需设 CONTENT_FLAG 保证 beforeIndent 冲突检测正常\n const hydrateSetProp = (node: Node, key: string, value: any) => {\n if (isFirstRender && (key === 'text' || key === 'html')) {\n (node as any)[CONTENT_FLAG] = value != null;\n return;\n }\n return setProp(node, key, value);\n };\n\n const createNode = (name: string): Node => {\n if (isFirstRender) {\n const claimed = name === 'text'\n ? cursor.tryClaimText()\n : cursor.tryClaimElement(name);\n if (claimed) return claimed;\n }\n return name === 'text'\n ? document.createTextNode('')\n : browserCreateNode(name);\n };\n\n const createAnchor = (name: string): Comment => {\n if (isFirstRender) {\n const claimed = cursor.tryClaimComment(name);\n if (claimed) return claimed;\n }\n return document.createComment(name);\n };\n\n const insertAfter = (parent: Node, node: Node, prev: Node | null) => {\n if (node === parent) return;\n const expectedNext = prev ? prev.nextSibling : parent.firstChild;\n if (node === expectedNext) return;\n parent.insertBefore(node, expectedNext);\n };\n\n const beforeIndent = (node: Node): boolean | void => {\n if ((node as any)[CONTENT_FLAG]) {\n const tag = (node as Element).tagName?.toLowerCase();\n const hasText = (node as HTMLElement).textContent != null;\n console.warn(\n `<${tag}> has ${hasText ? 'text' : 'html'} content and child elements — children ignored`\n );\n return false;\n }\n if (isFirstRender) cursor.enterChildren(node);\n };\n\n const leaveNode = (node: Node) => {\n if (isFirstRender) cursor.leaveToParent(node);\n };\n\n const leaveLogicNode = (node: Node) => {\n if (isFirstRender) cursor.leaveToParent(node);\n };\n\n const render = customRender({\n createNode,\n setProp: hydrateSetProp,\n insertAfter,\n createAnchor,\n remove,\n firstChild,\n nextSib,\n beforeIndent,\n leaveNode,\n leaveLogicNode,\n // program() 遍历完模板后、flushMicroEffectManual 首次执行 effect 前切回首屏标志\n // 后续 for/if effect 中的 createNode 走浏览器新建路径,不再尝试从 SSR DOM 认领\n onBeforeFlush: () => {\n isFirstRender = false;\n }\n });\n\n return render(ComponentClass, container);\n};\n"],"names":["BOOLEAN_ATTRS","Set","VALUE_PROP_TAGS","SVG_NS","MATH_NS","SVG_TAGS","MATH_TAGS","isNS","el","namespaceURI","createNode","name","document","createTextNode","has","createElementNS","createElement","CONTENT_FLAG","Symbol","setProp","node","key","value","textContent","startsWith","evtName","slice","addEventListener","removeEventListener","className","Array","isArray","names","Object","entries","filter","v","map","k","join","setAttribute","classList","toggle","str","String","style","cssText","innerHTML","undefined","removeAttribute","tagName","insertAfter","parent","prev","insertBefore","firstChild","nextSibling","createAnchor","createComment","remove","nextSib","beforeIndent","tag","toLowerCase","hasText","console","warn","leaveNode","leaveLogicNode","render","customRender","ctx","root","current","cleanCtx","keys","forEach","SSRNode","lastChild","prevSibling","closed","startClosed","_innerHtml","SSRNodeType","Element","type","attrs","constructor","Text","Anchor","Root","VOID_TAGS","ATTR_RE","TEXT_RE","ATTR_MAP","TEXT_MAP","escapeAttr","s","test","replace","m","escapeText","classStr","appendInnerContent","hasHtml","realAfter","isDedent","next","isBefore","renderHtmlStr","ComponentClass","noopEffect","html","TreeCursor","claimed","WeakSet","container","enterChildren","leaveToParent","parentNode","findUnclaimed","predicate","add","tryClaimElement","nodeType","tryClaimComment","data","tryClaimText","trim","hydrate","rootEl","cursor","isFirstRender","hydrateSetProp","browserCreateNode","expectedNext","onBeforeFlush"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,23 +1,32 @@
|
|
|
1
1
|
import * as bobe from 'bobe';
|
|
2
|
+
import { Store } from 'bobe';
|
|
2
3
|
|
|
3
4
|
declare const BOOLEAN_ATTRS: Set<string>;
|
|
4
5
|
declare const createNode: (name: string) => Node;
|
|
6
|
+
declare const CONTENT_FLAG: unique symbol;
|
|
5
7
|
declare const setProp: (node: Node, key: string, value: any) => (() => void) | undefined;
|
|
6
8
|
declare const insertAfter: (parent: Node, node: Node, prev: Node | null) => void;
|
|
7
9
|
declare const createAnchor: (name: string) => Comment;
|
|
8
10
|
declare const remove: (node: Node) => void;
|
|
9
11
|
declare const firstChild: (node: Node) => ChildNode;
|
|
10
12
|
declare const nextSib: (node: Node) => ChildNode;
|
|
11
|
-
declare const
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
realBefore?: any;
|
|
16
|
-
realAfter?: any;
|
|
17
|
-
} & {
|
|
13
|
+
declare const beforeIndent: (node: Node) => boolean | void;
|
|
14
|
+
declare const leaveNode: () => void;
|
|
15
|
+
declare const leaveLogicNode: () => void;
|
|
16
|
+
declare const render: <T>(Ctor: typeof bobe.Store, root: any) => ((bobe.LogicNode & {
|
|
18
17
|
tokenizer: bobe.Tokenizer;
|
|
19
18
|
fragmentSnapshot?: ReturnType<bobe.Tokenizer["snapshot"]>;
|
|
20
19
|
resumeSnapshot?: ReturnType<bobe.Tokenizer["snapshot"]>;
|
|
21
20
|
}) | bobe.Store)[];
|
|
22
21
|
|
|
23
|
-
|
|
22
|
+
declare const renderHtmlStr: (ComponentClass: typeof Store) => {
|
|
23
|
+
html: string;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
declare const hydrate: (ComponentClass: typeof Store, rootEl: Element) => (Store | (bobe.LogicNode & {
|
|
27
|
+
tokenizer: bobe.Tokenizer;
|
|
28
|
+
fragmentSnapshot?: ReturnType<bobe.Tokenizer["snapshot"]>;
|
|
29
|
+
resumeSnapshot?: ReturnType<bobe.Tokenizer["snapshot"]>;
|
|
30
|
+
}))[];
|
|
31
|
+
|
|
32
|
+
export { BOOLEAN_ATTRS, CONTENT_FLAG, beforeIndent, createAnchor, createNode, firstChild, hydrate, insertAfter, leaveLogicNode, leaveNode, nextSib, remove, render, renderHtmlStr, setProp };
|