solid-js 1.7.8 → 1.7.10
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/dev.cjs +35 -19
- package/dist/dev.js +558 -309
- package/dist/server.cjs +38 -23
- package/dist/server.js +202 -94
- package/dist/solid.cjs +35 -19
- package/dist/solid.js +485 -267
- package/h/dist/h.cjs +2 -2
- package/h/dist/h.js +36 -10
- package/h/jsx-runtime/dist/jsx.js +1 -1
- package/h/jsx-runtime/types/index.d.ts +11 -8
- package/h/jsx-runtime/types/jsx.d.ts +3 -0
- package/h/types/hyperscript.d.ts +11 -11
- package/h/types/index.d.ts +3 -2
- package/html/dist/html.cjs +2 -2
- package/html/dist/html.js +218 -96
- package/html/types/index.d.ts +3 -2
- package/html/types/lit.d.ts +45 -31
- package/package.json +1 -1
- package/store/dist/dev.cjs +36 -33
- package/store/dist/dev.js +143 -68
- package/store/dist/server.js +19 -8
- package/store/dist/store.cjs +36 -33
- package/store/dist/store.js +134 -65
- package/store/types/index.d.ts +21 -7
- package/store/types/modifiers.d.ts +6 -3
- package/store/types/mutable.d.ts +5 -2
- package/store/types/server.d.ts +12 -4
- package/store/types/store.d.ts +220 -63
- package/types/index.d.ts +72 -9
- package/types/jsx.d.ts +3 -0
- package/types/reactive/array.d.ts +12 -4
- package/types/reactive/observable.d.ts +25 -17
- package/types/reactive/scheduler.d.ts +9 -6
- package/types/reactive/signal.d.ts +237 -146
- package/types/render/Suspense.d.ts +5 -5
- package/types/render/component.d.ts +62 -31
- package/types/render/flow.d.ts +43 -31
- package/types/render/hydration.d.ts +12 -12
- package/types/server/index.d.ts +56 -2
- package/types/server/reactive.d.ts +71 -45
- package/types/server/rendering.d.ts +171 -95
- package/universal/dist/dev.js +28 -12
- package/universal/dist/universal.js +28 -12
- package/universal/types/index.d.ts +3 -1
- package/universal/types/universal.d.ts +0 -1
- package/web/dist/dev.js +610 -79
- package/web/dist/server.cjs +5 -1
- package/web/dist/server.js +181 -78
- package/web/dist/web.js +610 -79
- package/web/types/client.d.ts +2 -2
- package/web/types/core.d.ts +10 -1
- package/web/types/index.d.ts +27 -10
- package/web/types/server-mock.d.ts +47 -32
- package/web/types/server.d.ts +1 -1
package/web/dist/server.cjs
CHANGED
|
@@ -215,14 +215,17 @@ function renderToStream(code, options = {}) {
|
|
|
215
215
|
});
|
|
216
216
|
},
|
|
217
217
|
pipeTo(w) {
|
|
218
|
-
Promise.allSettled(blockingResources).then(() => {
|
|
218
|
+
return Promise.allSettled(blockingResources).then(() => {
|
|
219
219
|
doShell();
|
|
220
220
|
const encoder = new TextEncoder();
|
|
221
221
|
const writer = w.getWriter();
|
|
222
|
+
let resolve;
|
|
223
|
+
const p = new Promise(r => resolve = r);
|
|
222
224
|
writable = {
|
|
223
225
|
end() {
|
|
224
226
|
writer.releaseLock();
|
|
225
227
|
w.close();
|
|
228
|
+
resolve();
|
|
226
229
|
}
|
|
227
230
|
};
|
|
228
231
|
buffer = {
|
|
@@ -233,6 +236,7 @@ function renderToStream(code, options = {}) {
|
|
|
233
236
|
buffer.write(tmp);
|
|
234
237
|
firstFlushed = true;
|
|
235
238
|
if (completed) writable.end();else setTimeout(checkEnd);
|
|
239
|
+
return p;
|
|
236
240
|
});
|
|
237
241
|
}
|
|
238
242
|
};
|
package/web/dist/server.js
CHANGED
|
@@ -1,25 +1,65 @@
|
|
|
1
|
-
import { sharedConfig, createRoot, splitProps } from
|
|
2
|
-
export {
|
|
3
|
-
|
|
1
|
+
import { sharedConfig, createRoot, splitProps } from "solid-js";
|
|
2
|
+
export {
|
|
3
|
+
ErrorBoundary,
|
|
4
|
+
For,
|
|
5
|
+
Index,
|
|
6
|
+
Match,
|
|
7
|
+
Show,
|
|
8
|
+
Suspense,
|
|
9
|
+
SuspenseList,
|
|
10
|
+
Switch,
|
|
11
|
+
createComponent,
|
|
12
|
+
mergeProps
|
|
13
|
+
} from "solid-js";
|
|
14
|
+
import { serialize, Feature } from "seroval";
|
|
4
15
|
|
|
5
|
-
const booleans = [
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
16
|
+
const booleans = [
|
|
17
|
+
"allowfullscreen",
|
|
18
|
+
"async",
|
|
19
|
+
"autofocus",
|
|
20
|
+
"autoplay",
|
|
21
|
+
"checked",
|
|
22
|
+
"controls",
|
|
23
|
+
"default",
|
|
24
|
+
"disabled",
|
|
25
|
+
"formnovalidate",
|
|
26
|
+
"hidden",
|
|
27
|
+
"indeterminate",
|
|
28
|
+
"ismap",
|
|
29
|
+
"loop",
|
|
30
|
+
"multiple",
|
|
31
|
+
"muted",
|
|
32
|
+
"nomodule",
|
|
33
|
+
"novalidate",
|
|
34
|
+
"open",
|
|
35
|
+
"playsinline",
|
|
36
|
+
"readonly",
|
|
37
|
+
"required",
|
|
38
|
+
"reversed",
|
|
39
|
+
"seamless",
|
|
40
|
+
"selected"
|
|
41
|
+
];
|
|
42
|
+
const BooleanAttributes = /*#__PURE__*/ new Set(booleans);
|
|
43
|
+
const ChildProperties = /*#__PURE__*/ new Set([
|
|
44
|
+
"innerHTML",
|
|
45
|
+
"textContent",
|
|
46
|
+
"innerText",
|
|
47
|
+
"children"
|
|
48
|
+
]);
|
|
49
|
+
const Aliases = /*#__PURE__*/ Object.assign(Object.create(null), {
|
|
9
50
|
className: "class",
|
|
10
51
|
htmlFor: "for"
|
|
11
52
|
});
|
|
12
53
|
|
|
13
|
-
const ES2017FLAG = Feature.AggregateError
|
|
14
|
-
| Feature.BigInt
|
|
15
|
-
| Feature.BigIntTypedArray;
|
|
54
|
+
const ES2017FLAG = Feature.AggregateError | Feature.BigInt | Feature.BigIntTypedArray;
|
|
16
55
|
function stringify(data) {
|
|
17
56
|
return serialize(data, {
|
|
18
57
|
disabledFeatures: ES2017FLAG
|
|
19
58
|
});
|
|
20
59
|
}
|
|
21
60
|
|
|
22
|
-
const VOID_ELEMENTS =
|
|
61
|
+
const VOID_ELEMENTS =
|
|
62
|
+
/^(?:area|base|br|col|embed|hr|img|input|keygen|link|menuitem|meta|param|source|track|wbr)$/i;
|
|
23
63
|
const REPLACE_SCRIPT = `function $df(e,n,t,o,d){if(t=document.getElementById(e),o=document.getElementById("pl-"+e)){for(;o&&8!==o.nodeType&&o.nodeValue!=="pl-"+e;)d=o.nextSibling,o.remove(),o=d;_$HY.done?o.remove():o.replaceWith(t.content)}t.remove(),_$HY.set(e,n),_$HY.fe(e)}`;
|
|
24
64
|
function renderToString(code, options = {}) {
|
|
25
65
|
let scripts = "";
|
|
@@ -32,7 +72,7 @@ function renderToString(code, options = {}) {
|
|
|
32
72
|
nonce: options.nonce,
|
|
33
73
|
writeResource(id, p, error) {
|
|
34
74
|
if (sharedConfig.context.noHydrate) return;
|
|
35
|
-
if (error) return scripts += `_$HY.set("${id}", ${stringify(p)})
|
|
75
|
+
if (error) return (scripts += `_$HY.set("${id}", ${stringify(p)});`);
|
|
36
76
|
scripts += `_$HY.set("${id}", ${stringify(p)});`;
|
|
37
77
|
}
|
|
38
78
|
};
|
|
@@ -46,9 +86,7 @@ function renderToString(code, options = {}) {
|
|
|
46
86
|
return html;
|
|
47
87
|
}
|
|
48
88
|
function renderToStringAsync(code, options = {}) {
|
|
49
|
-
const {
|
|
50
|
-
timeoutMs = 30000
|
|
51
|
-
} = options;
|
|
89
|
+
const { timeoutMs = 30000 } = options;
|
|
52
90
|
let timeoutHandle;
|
|
53
91
|
const timeout = new Promise((_, reject) => {
|
|
54
92
|
timeoutHandle = setTimeout(() => reject("renderToString timed out"), timeoutMs);
|
|
@@ -59,12 +97,7 @@ function renderToStringAsync(code, options = {}) {
|
|
|
59
97
|
});
|
|
60
98
|
}
|
|
61
99
|
function renderToStream(code, options = {}) {
|
|
62
|
-
let {
|
|
63
|
-
nonce,
|
|
64
|
-
onCompleteShell,
|
|
65
|
-
onCompleteAll,
|
|
66
|
-
renderId
|
|
67
|
-
} = options;
|
|
100
|
+
let { nonce, onCompleteShell, onCompleteAll, renderId } = options;
|
|
68
101
|
let dispose;
|
|
69
102
|
const blockingResources = [];
|
|
70
103
|
const registry = new Map();
|
|
@@ -72,11 +105,12 @@ function renderToStream(code, options = {}) {
|
|
|
72
105
|
const checkEnd = () => {
|
|
73
106
|
if (!registry.size && !completed) {
|
|
74
107
|
writeTasks();
|
|
75
|
-
onCompleteAll &&
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
108
|
+
onCompleteAll &&
|
|
109
|
+
onCompleteAll({
|
|
110
|
+
write(v) {
|
|
111
|
+
!completed && buffer.write(v);
|
|
112
|
+
}
|
|
113
|
+
});
|
|
80
114
|
writable && writable.end();
|
|
81
115
|
completed = true;
|
|
82
116
|
setTimeout(dispose);
|
|
@@ -127,13 +161,18 @@ function renderToStream(code, options = {}) {
|
|
|
127
161
|
const first = html.indexOf(placeholder);
|
|
128
162
|
if (first === -1) return;
|
|
129
163
|
const last = html.indexOf(`<!--!$/${id}-->`, first + placeholder.length);
|
|
130
|
-
html = html.replace(
|
|
164
|
+
html = html.replace(
|
|
165
|
+
html.slice(first, last + placeholder.length + 1),
|
|
166
|
+
resolveSSRNode(payloadFn())
|
|
167
|
+
);
|
|
131
168
|
},
|
|
132
169
|
writeResource(id, p, error, wait) {
|
|
133
170
|
const serverOnly = sharedConfig.context.noHydrate;
|
|
134
171
|
if (error) return !serverOnly && pushTask(serializeSet(dedupe, id, p));
|
|
135
|
-
if (!p || typeof p !== "object" || !("then" in p))
|
|
136
|
-
|
|
172
|
+
if (!p || typeof p !== "object" || !("then" in p))
|
|
173
|
+
return !serverOnly && pushTask(serializeSet(dedupe, id, p));
|
|
174
|
+
if (!firstFlushed) wait && blockingResources.push(p);
|
|
175
|
+
else !serverOnly && pushTask(`_$HY.init("${id}")`);
|
|
137
176
|
if (serverOnly) return;
|
|
138
177
|
p.then(d => {
|
|
139
178
|
!completed && pushTask(serializeSet(dedupe, id, d));
|
|
@@ -153,11 +192,19 @@ function renderToStream(code, options = {}) {
|
|
|
153
192
|
if (waitForFragments(registry, key)) return;
|
|
154
193
|
if ((value !== undefined || error) && !completed) {
|
|
155
194
|
if (!firstFlushed) {
|
|
156
|
-
Promise.resolve().then(
|
|
195
|
+
Promise.resolve().then(
|
|
196
|
+
() => (html = replacePlaceholder(html, key, value !== undefined ? value : ""))
|
|
197
|
+
);
|
|
157
198
|
error && pushTask(serializeSet(dedupe, key, error));
|
|
158
199
|
} else {
|
|
159
200
|
buffer.write(`<template id="${key}">${value !== undefined ? value : " "}</template>`);
|
|
160
|
-
pushTask(
|
|
201
|
+
pushTask(
|
|
202
|
+
`${
|
|
203
|
+
keys.length ? keys.map(k => `_$HY.unset("${k}")`).join(";") + ";" : ""
|
|
204
|
+
}$df("${key}"${error ? "," + stringify(error) : ""})${
|
|
205
|
+
!scriptFlushed ? ";" + REPLACE_SCRIPT : ""
|
|
206
|
+
}`
|
|
207
|
+
);
|
|
161
208
|
scriptFlushed = true;
|
|
162
209
|
}
|
|
163
210
|
}
|
|
@@ -176,18 +223,20 @@ function renderToStream(code, options = {}) {
|
|
|
176
223
|
context.noHydrate = true;
|
|
177
224
|
html = injectAssets(context.assets, html);
|
|
178
225
|
for (const key in context.resources) {
|
|
179
|
-
if (!("data" in context.resources[key] || context.resources[key].ref[0].error))
|
|
226
|
+
if (!("data" in context.resources[key] || context.resources[key].ref[0].error))
|
|
227
|
+
pushTask(`_$HY.init("${key}")`);
|
|
180
228
|
}
|
|
181
229
|
for (const key of registry.keys()) pushTask(`_$HY.init("${key}")`);
|
|
182
230
|
if (tasks.length) html = injectScripts(html, tasks, nonce);
|
|
183
231
|
buffer.write(html);
|
|
184
232
|
tasks = "";
|
|
185
233
|
scheduled = false;
|
|
186
|
-
onCompleteShell &&
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
234
|
+
onCompleteShell &&
|
|
235
|
+
onCompleteShell({
|
|
236
|
+
write(v) {
|
|
237
|
+
!completed && buffer.write(v);
|
|
238
|
+
}
|
|
239
|
+
});
|
|
191
240
|
}
|
|
192
241
|
return {
|
|
193
242
|
then(fn) {
|
|
@@ -210,18 +259,22 @@ function renderToStream(code, options = {}) {
|
|
|
210
259
|
buffer = writable = w;
|
|
211
260
|
buffer.write(tmp);
|
|
212
261
|
firstFlushed = true;
|
|
213
|
-
if (completed) writable.end();
|
|
262
|
+
if (completed) writable.end();
|
|
263
|
+
else setTimeout(checkEnd);
|
|
214
264
|
});
|
|
215
265
|
},
|
|
216
266
|
pipeTo(w) {
|
|
217
|
-
Promise.allSettled(blockingResources).then(() => {
|
|
267
|
+
return Promise.allSettled(blockingResources).then(() => {
|
|
218
268
|
doShell();
|
|
219
269
|
const encoder = new TextEncoder();
|
|
220
270
|
const writer = w.getWriter();
|
|
271
|
+
let resolve;
|
|
272
|
+
const p = new Promise(r => (resolve = r));
|
|
221
273
|
writable = {
|
|
222
274
|
end() {
|
|
223
275
|
writer.releaseLock();
|
|
224
276
|
w.close();
|
|
277
|
+
resolve();
|
|
225
278
|
}
|
|
226
279
|
};
|
|
227
280
|
buffer = {
|
|
@@ -231,19 +284,21 @@ function renderToStream(code, options = {}) {
|
|
|
231
284
|
};
|
|
232
285
|
buffer.write(tmp);
|
|
233
286
|
firstFlushed = true;
|
|
234
|
-
if (completed) writable.end();
|
|
287
|
+
if (completed) writable.end();
|
|
288
|
+
else setTimeout(checkEnd);
|
|
289
|
+
return p;
|
|
235
290
|
});
|
|
236
291
|
}
|
|
237
292
|
};
|
|
238
293
|
}
|
|
239
294
|
function HydrationScript(props) {
|
|
240
|
-
const {
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
295
|
+
const { nonce } = sharedConfig.context;
|
|
296
|
+
return ssr(
|
|
297
|
+
generateHydrationScript({
|
|
298
|
+
nonce,
|
|
299
|
+
...props
|
|
300
|
+
})
|
|
301
|
+
);
|
|
247
302
|
}
|
|
248
303
|
function ssr(t, ...nodes) {
|
|
249
304
|
if (nodes.length) {
|
|
@@ -288,7 +343,8 @@ function ssrStyle(value) {
|
|
|
288
343
|
return result;
|
|
289
344
|
}
|
|
290
345
|
function ssrElement(tag, props, children, needsId) {
|
|
291
|
-
if (props == null) props = {};
|
|
346
|
+
if (props == null) props = {};
|
|
347
|
+
else if (typeof props === "function") props = props();
|
|
292
348
|
const skipChildren = VOID_ELEMENTS.test(tag);
|
|
293
349
|
const keys = Object.keys(props);
|
|
294
350
|
let result = `<${tag}${needsId ? ssrHydrationKey() : ""} `;
|
|
@@ -296,7 +352,8 @@ function ssrElement(tag, props, children, needsId) {
|
|
|
296
352
|
for (let i = 0; i < keys.length; i++) {
|
|
297
353
|
const prop = keys[i];
|
|
298
354
|
if (ChildProperties.has(prop)) {
|
|
299
|
-
if (children === undefined && !skipChildren)
|
|
355
|
+
if (children === undefined && !skipChildren)
|
|
356
|
+
children = prop === "innerHTML" ? props[prop] : escape(props[prop]);
|
|
300
357
|
continue;
|
|
301
358
|
}
|
|
302
359
|
const value = props[prop];
|
|
@@ -305,10 +362,14 @@ function ssrElement(tag, props, children, needsId) {
|
|
|
305
362
|
} else if (prop === "class" || prop === "className" || prop === "classList") {
|
|
306
363
|
if (classResolved) continue;
|
|
307
364
|
let n;
|
|
308
|
-
result += `class="${
|
|
365
|
+
result += `class="${
|
|
366
|
+
escape(((n = props.class) ? n + " " : "") + ((n = props.className) ? n + " " : ""), true) +
|
|
367
|
+
ssrClassList(props.classList)
|
|
368
|
+
}"`;
|
|
309
369
|
classResolved = true;
|
|
310
370
|
} else if (BooleanAttributes.has(prop)) {
|
|
311
|
-
if (value) result += prop;
|
|
371
|
+
if (value) result += prop;
|
|
372
|
+
else continue;
|
|
312
373
|
} else if (value == undefined || prop === "ref" || prop.slice(0, 2) === "on") {
|
|
313
374
|
continue;
|
|
314
375
|
} else {
|
|
@@ -316,16 +377,17 @@ function ssrElement(tag, props, children, needsId) {
|
|
|
316
377
|
}
|
|
317
378
|
if (i !== keys.length - 1) result += " ";
|
|
318
379
|
}
|
|
319
|
-
if (skipChildren)
|
|
320
|
-
|
|
321
|
-
|
|
380
|
+
if (skipChildren)
|
|
381
|
+
return {
|
|
382
|
+
t: result + "/>"
|
|
383
|
+
};
|
|
322
384
|
if (typeof children === "function") children = children();
|
|
323
385
|
return {
|
|
324
386
|
t: result + `>${resolveSSRNode(children, true)}</${tag}>`
|
|
325
387
|
};
|
|
326
388
|
}
|
|
327
389
|
function ssrAttribute(key, value, isBoolean) {
|
|
328
|
-
return isBoolean ? value ? " " + key : "" : value != null ? ` ${key}="${value}"` : "";
|
|
390
|
+
return isBoolean ? (value ? " " + key : "") : value != null ? ` ${key}="${value}"` : "";
|
|
329
391
|
}
|
|
330
392
|
function ssrHydrationKey() {
|
|
331
393
|
const hk = getHydrationKey();
|
|
@@ -369,12 +431,13 @@ function escape(s, attr) {
|
|
|
369
431
|
left = iDelim + 1;
|
|
370
432
|
iDelim = s.indexOf(delim, left);
|
|
371
433
|
} while (iDelim >= 0);
|
|
372
|
-
} else
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
434
|
+
} else
|
|
435
|
+
while (iAmp >= 0) {
|
|
436
|
+
if (left < iAmp) out += s.substring(left, iAmp);
|
|
437
|
+
out += "&";
|
|
438
|
+
left = iAmp + 1;
|
|
439
|
+
iAmp = s.indexOf("&", left);
|
|
440
|
+
}
|
|
378
441
|
return left < s.length ? out + s.substring(left) : out;
|
|
379
442
|
}
|
|
380
443
|
function resolveSSRNode(node, top) {
|
|
@@ -386,7 +449,7 @@ function resolveSSRNode(node, top) {
|
|
|
386
449
|
let mapped = "";
|
|
387
450
|
for (let i = 0, len = node.length; i < len; i++) {
|
|
388
451
|
if (!top && typeof prev !== "object" && typeof node[i] !== "object") mapped += `<!--!$-->`;
|
|
389
|
-
mapped += resolveSSRNode(prev = node[i]);
|
|
452
|
+
mapped += resolveSSRNode((prev = node[i]));
|
|
390
453
|
}
|
|
391
454
|
return mapped;
|
|
392
455
|
}
|
|
@@ -407,11 +470,12 @@ function getAssets() {
|
|
|
407
470
|
for (let i = 0, len = assets.length; i < len; i++) out += assets[i]();
|
|
408
471
|
return out;
|
|
409
472
|
}
|
|
410
|
-
function generateHydrationScript({
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
} =
|
|
414
|
-
|
|
473
|
+
function generateHydrationScript({ eventNames = ["click", "input"], nonce } = {}) {
|
|
474
|
+
return `<script${
|
|
475
|
+
nonce ? ` nonce="${nonce}"` : ""
|
|
476
|
+
}>(e=>{let t=e=>e&&e.hasAttribute&&(e.hasAttribute("data-hk")?e:t(e.host&&e.host.nodeType?e.host:e.parentNode));["${eventNames.join(
|
|
477
|
+
'", "'
|
|
478
|
+
)}"].forEach((o=>document.addEventListener(o,(o=>{let s=o.composedPath&&o.composedPath()[0]||o.target,a=t(s);a&&!e.completed.has(a)&&e.events.push([a,o])}))))})(window._$HY||(_$HY={events:[],completed:new WeakSet,r:{},fe(){},init(e,t){_$HY.r[e]=[new Promise((e=>t=e)),t]},set(e,t,o){(o=_$HY.r[e])&&o[1](t),_$HY.r[e]=[t]},unset(e){delete _$HY.r[e]},load:e=>_$HY.r[e]}));</script><!--xs-->`;
|
|
415
479
|
}
|
|
416
480
|
function Hydration(props) {
|
|
417
481
|
if (!sharedConfig.context.noHydrate) return props.children;
|
|
@@ -472,9 +536,7 @@ function Assets(props) {
|
|
|
472
536
|
}
|
|
473
537
|
function pipeToNodeWritable(code, writable, options = {}) {
|
|
474
538
|
if (options.onReady) {
|
|
475
|
-
options.onCompleteShell = ({
|
|
476
|
-
write
|
|
477
|
-
}) => {
|
|
539
|
+
options.onCompleteShell = ({ write }) => {
|
|
478
540
|
options.onReady({
|
|
479
541
|
write,
|
|
480
542
|
startWriting() {
|
|
@@ -488,9 +550,7 @@ function pipeToNodeWritable(code, writable, options = {}) {
|
|
|
488
550
|
}
|
|
489
551
|
function pipeToWritable(code, writable, options = {}) {
|
|
490
552
|
if (options.onReady) {
|
|
491
|
-
options.onCompleteShell = ({
|
|
492
|
-
write
|
|
493
|
-
}) => {
|
|
553
|
+
options.onCompleteShell = ({ write }) => {
|
|
494
554
|
options.onReady({
|
|
495
555
|
write,
|
|
496
556
|
startWriting() {
|
|
@@ -520,11 +580,19 @@ function ssrSpread(props, isSVG, skipChildren) {
|
|
|
520
580
|
} else if (prop === "class" || prop === "className" || prop === "classList") {
|
|
521
581
|
if (classResolved) continue;
|
|
522
582
|
let n;
|
|
523
|
-
result += `class="${(n = props.class) ? n + " " : ""}${
|
|
583
|
+
result += `class="${(n = props.class) ? n + " " : ""}${
|
|
584
|
+
(n = props.className) ? n + " " : ""
|
|
585
|
+
}${ssrClassList(props.classList)}"`;
|
|
524
586
|
classResolved = true;
|
|
525
587
|
} else if (BooleanAttributes.has(prop)) {
|
|
526
|
-
if (value) result += prop;
|
|
527
|
-
|
|
588
|
+
if (value) result += prop;
|
|
589
|
+
else continue;
|
|
590
|
+
} else if (
|
|
591
|
+
value == undefined ||
|
|
592
|
+
prop === "ref" ||
|
|
593
|
+
prop.slice(0, 2) === "on" ||
|
|
594
|
+
prop.slice(0, 5) === "prop:"
|
|
595
|
+
) {
|
|
528
596
|
continue;
|
|
529
597
|
} else {
|
|
530
598
|
if (prop.slice(0, 5) === "attr:") prop = prop.slice(5);
|
|
@@ -548,7 +616,8 @@ function Dynamic(props) {
|
|
|
548
616
|
const comp = p.component,
|
|
549
617
|
t = typeof comp;
|
|
550
618
|
if (comp) {
|
|
551
|
-
if (t === "function") return comp(others);
|
|
619
|
+
if (t === "function") return comp(others);
|
|
620
|
+
else if (t === "string") {
|
|
552
621
|
return ssrElement(comp, others, undefined, true);
|
|
553
622
|
}
|
|
554
623
|
}
|
|
@@ -557,4 +626,38 @@ function Portal(props) {
|
|
|
557
626
|
return "";
|
|
558
627
|
}
|
|
559
628
|
|
|
560
|
-
export {
|
|
629
|
+
export {
|
|
630
|
+
Assets,
|
|
631
|
+
Dynamic,
|
|
632
|
+
Hydration,
|
|
633
|
+
HydrationScript,
|
|
634
|
+
NoHydration,
|
|
635
|
+
Portal,
|
|
636
|
+
addEventListener,
|
|
637
|
+
delegateEvents,
|
|
638
|
+
escape,
|
|
639
|
+
generateHydrationScript,
|
|
640
|
+
getAssets,
|
|
641
|
+
getHydrationKey,
|
|
642
|
+
hydrate,
|
|
643
|
+
insert,
|
|
644
|
+
isDev,
|
|
645
|
+
isServer,
|
|
646
|
+
pipeToNodeWritable,
|
|
647
|
+
pipeToWritable,
|
|
648
|
+
render,
|
|
649
|
+
renderToStream,
|
|
650
|
+
renderToString,
|
|
651
|
+
renderToStringAsync,
|
|
652
|
+
resolveSSRNode,
|
|
653
|
+
spread,
|
|
654
|
+
ssr,
|
|
655
|
+
ssrAttribute,
|
|
656
|
+
ssrClassList,
|
|
657
|
+
ssrElement,
|
|
658
|
+
ssrHydrationKey,
|
|
659
|
+
ssrSpread,
|
|
660
|
+
ssrStyle,
|
|
661
|
+
stringify,
|
|
662
|
+
useAssets
|
|
663
|
+
};
|