@solidjs/web 2.0.0-beta.10 → 2.0.0-beta.12
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 +31 -14
- package/dist/dev.js +31 -14
- package/dist/server.cjs +250 -30
- package/dist/server.js +252 -29
- package/dist/web.cjs +31 -14
- package/dist/web.js +31 -14
- package/package.json +5 -3
- package/types/core.d.ts +2 -2
- package/types/server.d.ts +1 -1
- package/types-cjs/core.d.cts +2 -2
- package/types-cjs/server.d.cts +1 -1
package/dist/dev.cjs
CHANGED
|
@@ -51,13 +51,18 @@ const DOMElements = /*#__PURE__*/new Set(["html", "base", "head", "link", "meta"
|
|
|
51
51
|
"isindex", "listing", "multicol", "nextid", "noindex", "search"]);
|
|
52
52
|
|
|
53
53
|
const transparentOptions = {
|
|
54
|
-
transparent: true
|
|
54
|
+
transparent: true,
|
|
55
|
+
sync: true
|
|
56
|
+
};
|
|
57
|
+
const syncOptions = {
|
|
58
|
+
sync: true
|
|
55
59
|
};
|
|
56
60
|
const effect = (fn, effectFn, options) => solidJs.createRenderEffect(fn, effectFn, options ? {
|
|
57
61
|
transparent: true,
|
|
62
|
+
sync: true,
|
|
58
63
|
...options
|
|
59
64
|
} : transparentOptions);
|
|
60
|
-
const memo = fn => solidJs.createMemo(() => fn());
|
|
65
|
+
const memo = fn => solidJs.createMemo(() => fn(), syncOptions);
|
|
61
66
|
|
|
62
67
|
function reconcileArrays(parentNode, a, b) {
|
|
63
68
|
let bLength = b.length,
|
|
@@ -86,10 +91,12 @@ function reconcileArrays(parentNode, a, b) {
|
|
|
86
91
|
aStart++;
|
|
87
92
|
}
|
|
88
93
|
} else if (a[aStart] === b[bEnd - 1] && b[bStart] === a[aEnd - 1]) {
|
|
89
|
-
const
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
94
|
+
const anchor = a[aStart];
|
|
95
|
+
do {
|
|
96
|
+
parentNode.insertBefore(a[--aEnd], anchor);
|
|
97
|
+
bStart++;
|
|
98
|
+
if (aStart >= aEnd - 1 || bStart >= bEnd) break;
|
|
99
|
+
} while (a[aStart] === b[bEnd - 1] && b[bStart] === a[aEnd - 1]);
|
|
93
100
|
} else {
|
|
94
101
|
if (!map) {
|
|
95
102
|
map = new Map();
|
|
@@ -202,13 +209,13 @@ function className(node, value, prev) {
|
|
|
202
209
|
for (i = 0, len = prevKeys.length; i < len; i++) {
|
|
203
210
|
const key = prevKeys[i];
|
|
204
211
|
if (!key || key === "undefined" || value[key]) continue;
|
|
205
|
-
|
|
212
|
+
node.classList.remove(key);
|
|
206
213
|
}
|
|
207
214
|
for (i = 0, len = classKeys.length; i < len; i++) {
|
|
208
215
|
const key = classKeys[i],
|
|
209
216
|
classValue = !!value[key];
|
|
210
217
|
if (!key || key === "undefined" || prev[key] === classValue || !classValue) continue;
|
|
211
|
-
|
|
218
|
+
node.classList.add(key);
|
|
212
219
|
}
|
|
213
220
|
}
|
|
214
221
|
function addEventListener(node, name, handler, delegate) {
|
|
@@ -300,13 +307,16 @@ function insert(parent, accessor, marker, initial, options) {
|
|
|
300
307
|
initial = [placeholder];
|
|
301
308
|
}
|
|
302
309
|
let current = initial;
|
|
303
|
-
effect(
|
|
310
|
+
effect(prev => {
|
|
304
311
|
const value = normalize(accessor(), current, multi, true);
|
|
305
312
|
if (typeof value !== "function") return value;
|
|
306
313
|
effect(() => normalize(value, current, multi), inner => {
|
|
307
314
|
insertExpression(parent, inner, current, marker);
|
|
308
315
|
current = inner;
|
|
309
|
-
}, options)
|
|
316
|
+
}, prev !== undefined && !(options && options.schedule) ? {
|
|
317
|
+
...options,
|
|
318
|
+
schedule: true
|
|
319
|
+
} : options);
|
|
310
320
|
return INNER_OWNED;
|
|
311
321
|
}, value => {
|
|
312
322
|
if (value === INNER_OWNED) return;
|
|
@@ -527,14 +537,21 @@ function isHydrating(node) {
|
|
|
527
537
|
function getChildRoot(node) {
|
|
528
538
|
return node && node.localName === "template" ? node.content : node;
|
|
529
539
|
}
|
|
530
|
-
function toggleClassKey(node, key, value) {
|
|
531
|
-
const classNames = key.trim().split(/\s+/);
|
|
532
|
-
for (let i = 0, nameLen = classNames.length; i < nameLen; i++) node.classList.toggle(classNames[i], value);
|
|
533
|
-
}
|
|
534
540
|
function classListToObject(classList) {
|
|
535
541
|
if (Array.isArray(classList)) {
|
|
536
542
|
const result = {};
|
|
537
543
|
flattenClassList(classList, result);
|
|
544
|
+
classList = result;
|
|
545
|
+
}
|
|
546
|
+
if (classList && typeof classList === "object") {
|
|
547
|
+
const result = {},
|
|
548
|
+
keys = Object.keys(classList);
|
|
549
|
+
for (let i = 0, len = keys.length; i < len; i++) {
|
|
550
|
+
const key = keys[i];
|
|
551
|
+
if (!classList[key]) continue;
|
|
552
|
+
const classNames = key.trim().split(/\s+/);
|
|
553
|
+
for (let j = 0, nameLen = classNames.length; j < nameLen; j++) classNames[j] && (result[classNames[j]] = true);
|
|
554
|
+
}
|
|
538
555
|
return result;
|
|
539
556
|
}
|
|
540
557
|
return classList;
|
package/dist/dev.js
CHANGED
|
@@ -50,13 +50,18 @@ const DOMElements = /*#__PURE__*/new Set(["html", "base", "head", "link", "meta"
|
|
|
50
50
|
"isindex", "listing", "multicol", "nextid", "noindex", "search"]);
|
|
51
51
|
|
|
52
52
|
const transparentOptions = {
|
|
53
|
-
transparent: true
|
|
53
|
+
transparent: true,
|
|
54
|
+
sync: true
|
|
55
|
+
};
|
|
56
|
+
const syncOptions = {
|
|
57
|
+
sync: true
|
|
54
58
|
};
|
|
55
59
|
const effect = (fn, effectFn, options) => createRenderEffect(fn, effectFn, options ? {
|
|
56
60
|
transparent: true,
|
|
61
|
+
sync: true,
|
|
57
62
|
...options
|
|
58
63
|
} : transparentOptions);
|
|
59
|
-
const memo = fn => createMemo(() => fn());
|
|
64
|
+
const memo = fn => createMemo(() => fn(), syncOptions);
|
|
60
65
|
|
|
61
66
|
function reconcileArrays(parentNode, a, b) {
|
|
62
67
|
let bLength = b.length,
|
|
@@ -85,10 +90,12 @@ function reconcileArrays(parentNode, a, b) {
|
|
|
85
90
|
aStart++;
|
|
86
91
|
}
|
|
87
92
|
} else if (a[aStart] === b[bEnd - 1] && b[bStart] === a[aEnd - 1]) {
|
|
88
|
-
const
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
93
|
+
const anchor = a[aStart];
|
|
94
|
+
do {
|
|
95
|
+
parentNode.insertBefore(a[--aEnd], anchor);
|
|
96
|
+
bStart++;
|
|
97
|
+
if (aStart >= aEnd - 1 || bStart >= bEnd) break;
|
|
98
|
+
} while (a[aStart] === b[bEnd - 1] && b[bStart] === a[aEnd - 1]);
|
|
92
99
|
} else {
|
|
93
100
|
if (!map) {
|
|
94
101
|
map = new Map();
|
|
@@ -201,13 +208,13 @@ function className(node, value, prev) {
|
|
|
201
208
|
for (i = 0, len = prevKeys.length; i < len; i++) {
|
|
202
209
|
const key = prevKeys[i];
|
|
203
210
|
if (!key || key === "undefined" || value[key]) continue;
|
|
204
|
-
|
|
211
|
+
node.classList.remove(key);
|
|
205
212
|
}
|
|
206
213
|
for (i = 0, len = classKeys.length; i < len; i++) {
|
|
207
214
|
const key = classKeys[i],
|
|
208
215
|
classValue = !!value[key];
|
|
209
216
|
if (!key || key === "undefined" || prev[key] === classValue || !classValue) continue;
|
|
210
|
-
|
|
217
|
+
node.classList.add(key);
|
|
211
218
|
}
|
|
212
219
|
}
|
|
213
220
|
function addEventListener(node, name, handler, delegate) {
|
|
@@ -299,13 +306,16 @@ function insert(parent, accessor, marker, initial, options) {
|
|
|
299
306
|
initial = [placeholder];
|
|
300
307
|
}
|
|
301
308
|
let current = initial;
|
|
302
|
-
effect(
|
|
309
|
+
effect(prev => {
|
|
303
310
|
const value = normalize(accessor(), current, multi, true);
|
|
304
311
|
if (typeof value !== "function") return value;
|
|
305
312
|
effect(() => normalize(value, current, multi), inner => {
|
|
306
313
|
insertExpression(parent, inner, current, marker);
|
|
307
314
|
current = inner;
|
|
308
|
-
}, options)
|
|
315
|
+
}, prev !== undefined && !(options && options.schedule) ? {
|
|
316
|
+
...options,
|
|
317
|
+
schedule: true
|
|
318
|
+
} : options);
|
|
309
319
|
return INNER_OWNED;
|
|
310
320
|
}, value => {
|
|
311
321
|
if (value === INNER_OWNED) return;
|
|
@@ -526,14 +536,21 @@ function isHydrating(node) {
|
|
|
526
536
|
function getChildRoot(node) {
|
|
527
537
|
return node && node.localName === "template" ? node.content : node;
|
|
528
538
|
}
|
|
529
|
-
function toggleClassKey(node, key, value) {
|
|
530
|
-
const classNames = key.trim().split(/\s+/);
|
|
531
|
-
for (let i = 0, nameLen = classNames.length; i < nameLen; i++) node.classList.toggle(classNames[i], value);
|
|
532
|
-
}
|
|
533
539
|
function classListToObject(classList) {
|
|
534
540
|
if (Array.isArray(classList)) {
|
|
535
541
|
const result = {};
|
|
536
542
|
flattenClassList(classList, result);
|
|
543
|
+
classList = result;
|
|
544
|
+
}
|
|
545
|
+
if (classList && typeof classList === "object") {
|
|
546
|
+
const result = {},
|
|
547
|
+
keys = Object.keys(classList);
|
|
548
|
+
for (let i = 0, len = keys.length; i < len; i++) {
|
|
549
|
+
const key = keys[i];
|
|
550
|
+
if (!classList[key]) continue;
|
|
551
|
+
const classNames = key.trim().split(/\s+/);
|
|
552
|
+
for (let j = 0, nameLen = classNames.length; j < nameLen; j++) classNames[j] && (result[classNames[j]] = true);
|
|
553
|
+
}
|
|
537
554
|
return result;
|
|
538
555
|
}
|
|
539
556
|
return classList;
|
package/dist/server.cjs
CHANGED
|
@@ -25,13 +25,18 @@ const DOMElements = /*#__PURE__*/new Set(["html", "base", "head", "link", "meta"
|
|
|
25
25
|
"isindex", "listing", "multicol", "nextid", "noindex", "search"]);
|
|
26
26
|
|
|
27
27
|
const transparentOptions = {
|
|
28
|
-
transparent: true
|
|
28
|
+
transparent: true,
|
|
29
|
+
sync: true
|
|
30
|
+
};
|
|
31
|
+
const syncOptions = {
|
|
32
|
+
sync: true
|
|
29
33
|
};
|
|
30
34
|
const effect = (fn, effectFn, options) => solidJs.createRenderEffect(fn, effectFn, options ? {
|
|
31
35
|
transparent: true,
|
|
36
|
+
sync: true,
|
|
32
37
|
...options
|
|
33
38
|
} : transparentOptions);
|
|
34
|
-
const memo = fn => solidJs.createMemo(() => fn());
|
|
39
|
+
const memo = fn => solidJs.createMemo(() => fn(), syncOptions);
|
|
35
40
|
|
|
36
41
|
const ES2017FLAG = seroval.Feature.AggregateError |
|
|
37
42
|
seroval.Feature.BigIntTypedArray;
|
|
@@ -592,11 +597,176 @@ function HydrationScript(props) {
|
|
|
592
597
|
...props
|
|
593
598
|
}));
|
|
594
599
|
}
|
|
595
|
-
function
|
|
596
|
-
|
|
600
|
+
function ssrGroup(fn, n) {
|
|
601
|
+
fn.$g = n;
|
|
602
|
+
return fn;
|
|
603
|
+
}
|
|
604
|
+
function buildAsyncWrap(err, node) {
|
|
605
|
+
const p = solidJs.ssrHandleError(err);
|
|
606
|
+
if (!p) return null;
|
|
607
|
+
const owner = solidJs.getOwner();
|
|
597
608
|
return {
|
|
609
|
+
fn: owner ? () => solidJs.runWithOwner(owner, node) : node,
|
|
610
|
+
p
|
|
611
|
+
};
|
|
612
|
+
}
|
|
613
|
+
function ssrFirstGroupHit(hole) {
|
|
614
|
+
try {
|
|
615
|
+
return hole();
|
|
616
|
+
} catch (err) {
|
|
617
|
+
return buildAsyncWrap(err, hole);
|
|
618
|
+
}
|
|
619
|
+
}
|
|
620
|
+
function tryResolveFunctionHole(hole) {
|
|
621
|
+
let value;
|
|
622
|
+
try {
|
|
623
|
+
value = hole();
|
|
624
|
+
} catch (err) {
|
|
625
|
+
return buildAsyncWrap(err, hole) || "";
|
|
626
|
+
}
|
|
627
|
+
const t = typeof value;
|
|
628
|
+
if (t === "string") return value;
|
|
629
|
+
if (t === "number") return "" + value;
|
|
630
|
+
if (value == null || t === "boolean") return "";
|
|
631
|
+
return tryResolveString(value);
|
|
632
|
+
}
|
|
633
|
+
function mergeTemplateInto(result, node) {
|
|
634
|
+
result.t[result.t.length - 1] += node.t[0];
|
|
635
|
+
if (node.t.length > 1) {
|
|
636
|
+
result.t.push(...node.t.slice(1));
|
|
637
|
+
result.h.push(...node.h);
|
|
638
|
+
result.p.push(...node.p);
|
|
639
|
+
}
|
|
640
|
+
}
|
|
641
|
+
function appendResolvedNode(result, node) {
|
|
642
|
+
if (node.fn !== undefined) {
|
|
643
|
+
result.h.push(node.fn);
|
|
644
|
+
result.p.push(node.p);
|
|
645
|
+
result.t.push("");
|
|
646
|
+
} else if (node.merge !== undefined) mergeTemplateInto(result, node.merge);else resolveSSRNode(node.bail, result);
|
|
647
|
+
}
|
|
648
|
+
let _lastGroupFn = null;
|
|
649
|
+
let _lastGroupArr = null;
|
|
650
|
+
let _lastGroupErr = null;
|
|
651
|
+
function ssrGroupSlot(fn, idx) {
|
|
652
|
+
return () => {
|
|
653
|
+
if (idx > 0 && _lastGroupFn === fn) {
|
|
654
|
+
if (_lastGroupArr !== null) return _lastGroupArr[idx];
|
|
655
|
+
throw _lastGroupErr;
|
|
656
|
+
}
|
|
657
|
+
_lastGroupFn = fn;
|
|
658
|
+
_lastGroupArr = null;
|
|
659
|
+
_lastGroupErr = null;
|
|
660
|
+
try {
|
|
661
|
+
_lastGroupArr = fn();
|
|
662
|
+
return _lastGroupArr[idx];
|
|
663
|
+
} catch (err) {
|
|
664
|
+
_lastGroupErr = err;
|
|
665
|
+
throw err;
|
|
666
|
+
}
|
|
667
|
+
};
|
|
668
|
+
}
|
|
669
|
+
function ssr(t) {
|
|
670
|
+
const len = arguments.length;
|
|
671
|
+
if (len === 1) return {
|
|
598
672
|
t
|
|
599
673
|
};
|
|
674
|
+
let s = t[0];
|
|
675
|
+
let result = null;
|
|
676
|
+
let lastGroup = null;
|
|
677
|
+
let lastGroupVal = null;
|
|
678
|
+
let lastGroupIdx = 0;
|
|
679
|
+
for (let i = 1; i < len; i++) {
|
|
680
|
+
const hole = arguments[i];
|
|
681
|
+
const ht = typeof hole;
|
|
682
|
+
if (ht === "string") {
|
|
683
|
+
if (result === null) s += hole;else result.t[result.t.length - 1] += hole;
|
|
684
|
+
} else if (ht === "number") {
|
|
685
|
+
if (result === null) s += hole;else result.t[result.t.length - 1] += hole;
|
|
686
|
+
} else if (hole == null || ht === "boolean") ; else if (ht === "function" && hole.$g) {
|
|
687
|
+
let value;
|
|
688
|
+
let hasValue = false;
|
|
689
|
+
if (lastGroup !== hole) {
|
|
690
|
+
const r = ssrFirstGroupHit(hole);
|
|
691
|
+
if (r !== null) {
|
|
692
|
+
lastGroup = hole;
|
|
693
|
+
lastGroupVal = r;
|
|
694
|
+
lastGroupIdx = 0;
|
|
695
|
+
if (!Array.isArray(r) && result === null) {
|
|
696
|
+
result = {
|
|
697
|
+
t: [s],
|
|
698
|
+
h: [],
|
|
699
|
+
p: []
|
|
700
|
+
};
|
|
701
|
+
s = "";
|
|
702
|
+
}
|
|
703
|
+
}
|
|
704
|
+
}
|
|
705
|
+
if (lastGroup === hole) {
|
|
706
|
+
if (Array.isArray(lastGroupVal)) {
|
|
707
|
+
value = lastGroupVal[lastGroupIdx++];
|
|
708
|
+
hasValue = true;
|
|
709
|
+
} else {
|
|
710
|
+
result.h.push(ssrGroupSlot(lastGroupVal.fn, lastGroupIdx++));
|
|
711
|
+
result.p.push(lastGroupVal.p);
|
|
712
|
+
result.t.push("");
|
|
713
|
+
}
|
|
714
|
+
}
|
|
715
|
+
if (hasValue) {
|
|
716
|
+
const vt = typeof value;
|
|
717
|
+
if (vt === "string" || vt === "number") {
|
|
718
|
+
if (result === null) s += value;else result.t[result.t.length - 1] += value;
|
|
719
|
+
} else if (value == null || vt === "boolean") ; else if (result !== null) {
|
|
720
|
+
resolveSSRNode(value, result);
|
|
721
|
+
} else {
|
|
722
|
+
const rs = tryResolveString(value);
|
|
723
|
+
if (typeof rs === "string") {
|
|
724
|
+
s += rs;
|
|
725
|
+
} else {
|
|
726
|
+
result = {
|
|
727
|
+
t: [s],
|
|
728
|
+
h: [],
|
|
729
|
+
p: []
|
|
730
|
+
};
|
|
731
|
+
s = "";
|
|
732
|
+
if (rs.merge !== undefined) mergeTemplateInto(result, rs.merge);else resolveSSRNode(rs.bail, result);
|
|
733
|
+
}
|
|
734
|
+
}
|
|
735
|
+
}
|
|
736
|
+
} else if (result !== null) {
|
|
737
|
+
resolveSSRNode(hole, result);
|
|
738
|
+
} else if (ht === "function") {
|
|
739
|
+
const r = tryResolveFunctionHole(hole);
|
|
740
|
+
if (typeof r === "string") s += r;else {
|
|
741
|
+
result = {
|
|
742
|
+
t: [s],
|
|
743
|
+
h: [],
|
|
744
|
+
p: []
|
|
745
|
+
};
|
|
746
|
+
s = "";
|
|
747
|
+
appendResolvedNode(result, r);
|
|
748
|
+
}
|
|
749
|
+
} else {
|
|
750
|
+
const r = tryResolveString(hole);
|
|
751
|
+
if (typeof r === "string") {
|
|
752
|
+
s += r;
|
|
753
|
+
} else {
|
|
754
|
+
result = {
|
|
755
|
+
t: [s],
|
|
756
|
+
h: [],
|
|
757
|
+
p: []
|
|
758
|
+
};
|
|
759
|
+
s = "";
|
|
760
|
+
appendResolvedNode(result, r);
|
|
761
|
+
}
|
|
762
|
+
}
|
|
763
|
+
const next = t[i];
|
|
764
|
+
if (result === null) s += next;else result.t[result.t.length - 1] += next;
|
|
765
|
+
}
|
|
766
|
+
if (result === null) return {
|
|
767
|
+
t: s
|
|
768
|
+
};
|
|
769
|
+
return result;
|
|
600
770
|
}
|
|
601
771
|
function ssrClassName(value) {
|
|
602
772
|
if (!value) return "";
|
|
@@ -677,6 +847,8 @@ function escape(s, attr) {
|
|
|
677
847
|
const t = typeof s;
|
|
678
848
|
if (t !== "string") {
|
|
679
849
|
if (!attr && Array.isArray(s)) {
|
|
850
|
+
const joined = tryJoinPlainSSRArray(s);
|
|
851
|
+
if (joined !== undefined) return joined;
|
|
680
852
|
s = s.slice();
|
|
681
853
|
for (let i = 0; i < s.length; i++) s[i] = escape(s[i]);
|
|
682
854
|
return s;
|
|
@@ -684,11 +856,21 @@ function escape(s, attr) {
|
|
|
684
856
|
if (attr && t === "boolean") return s;
|
|
685
857
|
return s;
|
|
686
858
|
}
|
|
859
|
+
const delimCode = attr ? 34 : 60;
|
|
860
|
+
const len = s.length;
|
|
861
|
+
for (let i = 0; i < len; i++) {
|
|
862
|
+
const c = s.charCodeAt(i);
|
|
863
|
+
if (c === 38 || c === delimCode) return escapeSlow(s, attr, i);
|
|
864
|
+
}
|
|
865
|
+
return s;
|
|
866
|
+
}
|
|
867
|
+
function escapeSlow(s, attr, start) {
|
|
687
868
|
const delim = attr ? '"' : "<";
|
|
869
|
+
const delimCode = attr ? 34 : 60;
|
|
688
870
|
const escDelim = attr ? """ : "<";
|
|
689
|
-
|
|
690
|
-
let
|
|
691
|
-
|
|
871
|
+
const c0 = s.charCodeAt(start);
|
|
872
|
+
let iDelim = c0 === delimCode ? start : s.indexOf(delim, start);
|
|
873
|
+
let iAmp = c0 === 38 ? start : s.indexOf("&", start);
|
|
692
874
|
let left = 0,
|
|
693
875
|
out = "";
|
|
694
876
|
while (iDelim >= 0 && iAmp >= 0) {
|
|
@@ -719,6 +901,18 @@ function escape(s, attr) {
|
|
|
719
901
|
}
|
|
720
902
|
return left < s.length ? out + s.substring(left) : out;
|
|
721
903
|
}
|
|
904
|
+
function tryJoinPlainSSRArray(nodes) {
|
|
905
|
+
if (nodes.length === 0) return undefined;
|
|
906
|
+
let out = "";
|
|
907
|
+
for (let i = 0, len = nodes.length; i < len; i++) {
|
|
908
|
+
const node = nodes[i];
|
|
909
|
+
if (node == null || typeof node !== "object" || node.h || typeof node.t !== "string") {
|
|
910
|
+
return undefined;
|
|
911
|
+
}
|
|
912
|
+
out += node.t;
|
|
913
|
+
}
|
|
914
|
+
return out;
|
|
915
|
+
}
|
|
722
916
|
function mergeProps(...sources) {
|
|
723
917
|
const target = {};
|
|
724
918
|
for (let i = 0; i < sources.length; i++) {
|
|
@@ -860,19 +1054,45 @@ function flattenClassList(list, result) {
|
|
|
860
1054
|
if (Array.isArray(item)) flattenClassList(item, result);else if (typeof item === "object" && item != null) Object.assign(result, item);else if (item || item === 0) result[item] = true;
|
|
861
1055
|
}
|
|
862
1056
|
}
|
|
863
|
-
function
|
|
864
|
-
t
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
1057
|
+
function tryResolveString(node) {
|
|
1058
|
+
const t = typeof node;
|
|
1059
|
+
if (t === "string") return node;
|
|
1060
|
+
if (t === "number") return "" + node;
|
|
1061
|
+
if (node == null || t === "boolean") return "";
|
|
1062
|
+
if (t === "object") {
|
|
1063
|
+
if (Array.isArray(node)) {
|
|
1064
|
+
const joined = tryJoinPlainSSRArray(node);
|
|
1065
|
+
if (joined !== undefined) return joined;
|
|
1066
|
+
let s = "";
|
|
1067
|
+
let prevNonObj = false;
|
|
1068
|
+
for (let i = 0, len = node.length; i < len; i++) {
|
|
1069
|
+
const item = node[i];
|
|
1070
|
+
const itemNonObj = item !== null && typeof item !== "object";
|
|
1071
|
+
if (prevNonObj && itemNonObj) s += "<!--!$-->";
|
|
1072
|
+
prevNonObj = itemNonObj;
|
|
1073
|
+
const r = tryResolveString(item);
|
|
1074
|
+
if (typeof r !== "string") return {
|
|
1075
|
+
bail: node
|
|
1076
|
+
};
|
|
1077
|
+
s += r;
|
|
1078
|
+
}
|
|
1079
|
+
return s;
|
|
1080
|
+
}
|
|
1081
|
+
if (node.h && node.h.length > 0) return {
|
|
1082
|
+
merge: node
|
|
1083
|
+
};
|
|
1084
|
+
return Array.isArray(node.t) ? node.t[0] : node.t;
|
|
873
1085
|
}
|
|
874
|
-
|
|
875
|
-
|
|
1086
|
+
if (t === "function") {
|
|
1087
|
+
let v;
|
|
1088
|
+
try {
|
|
1089
|
+
v = node();
|
|
1090
|
+
} catch (err) {
|
|
1091
|
+
return buildAsyncWrap(err, node) || "";
|
|
1092
|
+
}
|
|
1093
|
+
return tryResolveString(v);
|
|
1094
|
+
}
|
|
1095
|
+
return "";
|
|
876
1096
|
}
|
|
877
1097
|
function resolveSSRNode(node, result = {
|
|
878
1098
|
t: [""],
|
|
@@ -883,10 +1103,13 @@ function resolveSSRNode(node, result = {
|
|
|
883
1103
|
if (t === "string" || t === "number") {
|
|
884
1104
|
result.t[result.t.length - 1] += node;
|
|
885
1105
|
} else if (node == null || t === "boolean") ; else if (Array.isArray(node)) {
|
|
886
|
-
let
|
|
1106
|
+
let prevNonObj = false;
|
|
887
1107
|
for (let i = 0, len = node.length; i < len; i++) {
|
|
888
|
-
|
|
889
|
-
|
|
1108
|
+
const item = node[i];
|
|
1109
|
+
const itemNonObj = item !== null && typeof item !== "object";
|
|
1110
|
+
if (!top && prevNonObj && itemNonObj) result.t[result.t.length - 1] += `<!--!$-->`;
|
|
1111
|
+
prevNonObj = itemNonObj;
|
|
1112
|
+
resolveSSRNode(item, result);
|
|
890
1113
|
}
|
|
891
1114
|
} else if (t === "object") {
|
|
892
1115
|
if (node.h) {
|
|
@@ -901,10 +1124,10 @@ function resolveSSRNode(node, result = {
|
|
|
901
1124
|
try {
|
|
902
1125
|
resolveSSRNode(node(), result);
|
|
903
1126
|
} catch (err) {
|
|
904
|
-
const
|
|
905
|
-
if (
|
|
906
|
-
result.h.push(
|
|
907
|
-
result.p.push(p);
|
|
1127
|
+
const wrap = buildAsyncWrap(err, node);
|
|
1128
|
+
if (wrap) {
|
|
1129
|
+
result.h.push(wrap.fn);
|
|
1130
|
+
result.p.push(wrap.p);
|
|
908
1131
|
result.t.push("");
|
|
909
1132
|
}
|
|
910
1133
|
}
|
|
@@ -1001,10 +1224,6 @@ Object.defineProperty(exports, "getOwner", {
|
|
|
1001
1224
|
enumerable: true,
|
|
1002
1225
|
get: function () { return solidJs.getOwner; }
|
|
1003
1226
|
});
|
|
1004
|
-
Object.defineProperty(exports, "ssrRunInScope", {
|
|
1005
|
-
enumerable: true,
|
|
1006
|
-
get: function () { return solidJs.ssrRunInScope; }
|
|
1007
|
-
});
|
|
1008
1227
|
Object.defineProperty(exports, "untrack", {
|
|
1009
1228
|
enumerable: true,
|
|
1010
1229
|
get: function () { return solidJs.untrack; }
|
|
@@ -1056,6 +1275,7 @@ exports.ssr = ssr;
|
|
|
1056
1275
|
exports.ssrAttribute = ssrAttribute;
|
|
1057
1276
|
exports.ssrClassName = ssrClassName;
|
|
1058
1277
|
exports.ssrElement = ssrElement;
|
|
1278
|
+
exports.ssrGroup = ssrGroup;
|
|
1059
1279
|
exports.ssrHydrationKey = ssrHydrationKey;
|
|
1060
1280
|
exports.ssrStyle = ssrStyle;
|
|
1061
1281
|
exports.ssrStyleProperty = ssrStyleProperty;
|
package/dist/server.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { createRenderEffect, createMemo, sharedConfig, createRoot, ssrHandleError, createComponent, omit,
|
|
2
|
-
export { Errored, For, Hydration, Loading, Match, NoHydration, Repeat, Reveal, Show, Switch, createComponent, getOwner,
|
|
1
|
+
import { createRenderEffect, createMemo, sharedConfig, createRoot, ssrHandleError, getOwner, runWithOwner, createComponent, omit, getNextChildId, createOwner } from 'solid-js';
|
|
2
|
+
export { Errored, For, Hydration, Loading, Match, NoHydration, Repeat, Reveal, Show, Switch, createComponent, getOwner, untrack } from 'solid-js';
|
|
3
3
|
import { Serializer, Feature, getCrossReferenceHeader } from 'seroval';
|
|
4
4
|
import { AbortSignalPlugin, CustomEventPlugin, DOMExceptionPlugin, EventPlugin, FormDataPlugin, HeadersPlugin, ReadableStreamPlugin, RequestPlugin, ResponsePlugin, URLSearchParamsPlugin, URLPlugin } from 'seroval-plugins/web';
|
|
5
5
|
|
|
@@ -24,13 +24,18 @@ const DOMElements = /*#__PURE__*/new Set(["html", "base", "head", "link", "meta"
|
|
|
24
24
|
"isindex", "listing", "multicol", "nextid", "noindex", "search"]);
|
|
25
25
|
|
|
26
26
|
const transparentOptions = {
|
|
27
|
-
transparent: true
|
|
27
|
+
transparent: true,
|
|
28
|
+
sync: true
|
|
29
|
+
};
|
|
30
|
+
const syncOptions = {
|
|
31
|
+
sync: true
|
|
28
32
|
};
|
|
29
33
|
const effect = (fn, effectFn, options) => createRenderEffect(fn, effectFn, options ? {
|
|
30
34
|
transparent: true,
|
|
35
|
+
sync: true,
|
|
31
36
|
...options
|
|
32
37
|
} : transparentOptions);
|
|
33
|
-
const memo = fn => createMemo(() => fn());
|
|
38
|
+
const memo = fn => createMemo(() => fn(), syncOptions);
|
|
34
39
|
|
|
35
40
|
const ES2017FLAG = Feature.AggregateError |
|
|
36
41
|
Feature.BigIntTypedArray;
|
|
@@ -591,11 +596,176 @@ function HydrationScript(props) {
|
|
|
591
596
|
...props
|
|
592
597
|
}));
|
|
593
598
|
}
|
|
594
|
-
function
|
|
595
|
-
|
|
599
|
+
function ssrGroup(fn, n) {
|
|
600
|
+
fn.$g = n;
|
|
601
|
+
return fn;
|
|
602
|
+
}
|
|
603
|
+
function buildAsyncWrap(err, node) {
|
|
604
|
+
const p = ssrHandleError(err);
|
|
605
|
+
if (!p) return null;
|
|
606
|
+
const owner = getOwner();
|
|
596
607
|
return {
|
|
608
|
+
fn: owner ? () => runWithOwner(owner, node) : node,
|
|
609
|
+
p
|
|
610
|
+
};
|
|
611
|
+
}
|
|
612
|
+
function ssrFirstGroupHit(hole) {
|
|
613
|
+
try {
|
|
614
|
+
return hole();
|
|
615
|
+
} catch (err) {
|
|
616
|
+
return buildAsyncWrap(err, hole);
|
|
617
|
+
}
|
|
618
|
+
}
|
|
619
|
+
function tryResolveFunctionHole(hole) {
|
|
620
|
+
let value;
|
|
621
|
+
try {
|
|
622
|
+
value = hole();
|
|
623
|
+
} catch (err) {
|
|
624
|
+
return buildAsyncWrap(err, hole) || "";
|
|
625
|
+
}
|
|
626
|
+
const t = typeof value;
|
|
627
|
+
if (t === "string") return value;
|
|
628
|
+
if (t === "number") return "" + value;
|
|
629
|
+
if (value == null || t === "boolean") return "";
|
|
630
|
+
return tryResolveString(value);
|
|
631
|
+
}
|
|
632
|
+
function mergeTemplateInto(result, node) {
|
|
633
|
+
result.t[result.t.length - 1] += node.t[0];
|
|
634
|
+
if (node.t.length > 1) {
|
|
635
|
+
result.t.push(...node.t.slice(1));
|
|
636
|
+
result.h.push(...node.h);
|
|
637
|
+
result.p.push(...node.p);
|
|
638
|
+
}
|
|
639
|
+
}
|
|
640
|
+
function appendResolvedNode(result, node) {
|
|
641
|
+
if (node.fn !== undefined) {
|
|
642
|
+
result.h.push(node.fn);
|
|
643
|
+
result.p.push(node.p);
|
|
644
|
+
result.t.push("");
|
|
645
|
+
} else if (node.merge !== undefined) mergeTemplateInto(result, node.merge);else resolveSSRNode(node.bail, result);
|
|
646
|
+
}
|
|
647
|
+
let _lastGroupFn = null;
|
|
648
|
+
let _lastGroupArr = null;
|
|
649
|
+
let _lastGroupErr = null;
|
|
650
|
+
function ssrGroupSlot(fn, idx) {
|
|
651
|
+
return () => {
|
|
652
|
+
if (idx > 0 && _lastGroupFn === fn) {
|
|
653
|
+
if (_lastGroupArr !== null) return _lastGroupArr[idx];
|
|
654
|
+
throw _lastGroupErr;
|
|
655
|
+
}
|
|
656
|
+
_lastGroupFn = fn;
|
|
657
|
+
_lastGroupArr = null;
|
|
658
|
+
_lastGroupErr = null;
|
|
659
|
+
try {
|
|
660
|
+
_lastGroupArr = fn();
|
|
661
|
+
return _lastGroupArr[idx];
|
|
662
|
+
} catch (err) {
|
|
663
|
+
_lastGroupErr = err;
|
|
664
|
+
throw err;
|
|
665
|
+
}
|
|
666
|
+
};
|
|
667
|
+
}
|
|
668
|
+
function ssr(t) {
|
|
669
|
+
const len = arguments.length;
|
|
670
|
+
if (len === 1) return {
|
|
597
671
|
t
|
|
598
672
|
};
|
|
673
|
+
let s = t[0];
|
|
674
|
+
let result = null;
|
|
675
|
+
let lastGroup = null;
|
|
676
|
+
let lastGroupVal = null;
|
|
677
|
+
let lastGroupIdx = 0;
|
|
678
|
+
for (let i = 1; i < len; i++) {
|
|
679
|
+
const hole = arguments[i];
|
|
680
|
+
const ht = typeof hole;
|
|
681
|
+
if (ht === "string") {
|
|
682
|
+
if (result === null) s += hole;else result.t[result.t.length - 1] += hole;
|
|
683
|
+
} else if (ht === "number") {
|
|
684
|
+
if (result === null) s += hole;else result.t[result.t.length - 1] += hole;
|
|
685
|
+
} else if (hole == null || ht === "boolean") ; else if (ht === "function" && hole.$g) {
|
|
686
|
+
let value;
|
|
687
|
+
let hasValue = false;
|
|
688
|
+
if (lastGroup !== hole) {
|
|
689
|
+
const r = ssrFirstGroupHit(hole);
|
|
690
|
+
if (r !== null) {
|
|
691
|
+
lastGroup = hole;
|
|
692
|
+
lastGroupVal = r;
|
|
693
|
+
lastGroupIdx = 0;
|
|
694
|
+
if (!Array.isArray(r) && result === null) {
|
|
695
|
+
result = {
|
|
696
|
+
t: [s],
|
|
697
|
+
h: [],
|
|
698
|
+
p: []
|
|
699
|
+
};
|
|
700
|
+
s = "";
|
|
701
|
+
}
|
|
702
|
+
}
|
|
703
|
+
}
|
|
704
|
+
if (lastGroup === hole) {
|
|
705
|
+
if (Array.isArray(lastGroupVal)) {
|
|
706
|
+
value = lastGroupVal[lastGroupIdx++];
|
|
707
|
+
hasValue = true;
|
|
708
|
+
} else {
|
|
709
|
+
result.h.push(ssrGroupSlot(lastGroupVal.fn, lastGroupIdx++));
|
|
710
|
+
result.p.push(lastGroupVal.p);
|
|
711
|
+
result.t.push("");
|
|
712
|
+
}
|
|
713
|
+
}
|
|
714
|
+
if (hasValue) {
|
|
715
|
+
const vt = typeof value;
|
|
716
|
+
if (vt === "string" || vt === "number") {
|
|
717
|
+
if (result === null) s += value;else result.t[result.t.length - 1] += value;
|
|
718
|
+
} else if (value == null || vt === "boolean") ; else if (result !== null) {
|
|
719
|
+
resolveSSRNode(value, result);
|
|
720
|
+
} else {
|
|
721
|
+
const rs = tryResolveString(value);
|
|
722
|
+
if (typeof rs === "string") {
|
|
723
|
+
s += rs;
|
|
724
|
+
} else {
|
|
725
|
+
result = {
|
|
726
|
+
t: [s],
|
|
727
|
+
h: [],
|
|
728
|
+
p: []
|
|
729
|
+
};
|
|
730
|
+
s = "";
|
|
731
|
+
if (rs.merge !== undefined) mergeTemplateInto(result, rs.merge);else resolveSSRNode(rs.bail, result);
|
|
732
|
+
}
|
|
733
|
+
}
|
|
734
|
+
}
|
|
735
|
+
} else if (result !== null) {
|
|
736
|
+
resolveSSRNode(hole, result);
|
|
737
|
+
} else if (ht === "function") {
|
|
738
|
+
const r = tryResolveFunctionHole(hole);
|
|
739
|
+
if (typeof r === "string") s += r;else {
|
|
740
|
+
result = {
|
|
741
|
+
t: [s],
|
|
742
|
+
h: [],
|
|
743
|
+
p: []
|
|
744
|
+
};
|
|
745
|
+
s = "";
|
|
746
|
+
appendResolvedNode(result, r);
|
|
747
|
+
}
|
|
748
|
+
} else {
|
|
749
|
+
const r = tryResolveString(hole);
|
|
750
|
+
if (typeof r === "string") {
|
|
751
|
+
s += r;
|
|
752
|
+
} else {
|
|
753
|
+
result = {
|
|
754
|
+
t: [s],
|
|
755
|
+
h: [],
|
|
756
|
+
p: []
|
|
757
|
+
};
|
|
758
|
+
s = "";
|
|
759
|
+
appendResolvedNode(result, r);
|
|
760
|
+
}
|
|
761
|
+
}
|
|
762
|
+
const next = t[i];
|
|
763
|
+
if (result === null) s += next;else result.t[result.t.length - 1] += next;
|
|
764
|
+
}
|
|
765
|
+
if (result === null) return {
|
|
766
|
+
t: s
|
|
767
|
+
};
|
|
768
|
+
return result;
|
|
599
769
|
}
|
|
600
770
|
function ssrClassName(value) {
|
|
601
771
|
if (!value) return "";
|
|
@@ -676,6 +846,8 @@ function escape(s, attr) {
|
|
|
676
846
|
const t = typeof s;
|
|
677
847
|
if (t !== "string") {
|
|
678
848
|
if (!attr && Array.isArray(s)) {
|
|
849
|
+
const joined = tryJoinPlainSSRArray(s);
|
|
850
|
+
if (joined !== undefined) return joined;
|
|
679
851
|
s = s.slice();
|
|
680
852
|
for (let i = 0; i < s.length; i++) s[i] = escape(s[i]);
|
|
681
853
|
return s;
|
|
@@ -683,11 +855,21 @@ function escape(s, attr) {
|
|
|
683
855
|
if (attr && t === "boolean") return s;
|
|
684
856
|
return s;
|
|
685
857
|
}
|
|
858
|
+
const delimCode = attr ? 34 : 60;
|
|
859
|
+
const len = s.length;
|
|
860
|
+
for (let i = 0; i < len; i++) {
|
|
861
|
+
const c = s.charCodeAt(i);
|
|
862
|
+
if (c === 38 || c === delimCode) return escapeSlow(s, attr, i);
|
|
863
|
+
}
|
|
864
|
+
return s;
|
|
865
|
+
}
|
|
866
|
+
function escapeSlow(s, attr, start) {
|
|
686
867
|
const delim = attr ? '"' : "<";
|
|
868
|
+
const delimCode = attr ? 34 : 60;
|
|
687
869
|
const escDelim = attr ? """ : "<";
|
|
688
|
-
|
|
689
|
-
let
|
|
690
|
-
|
|
870
|
+
const c0 = s.charCodeAt(start);
|
|
871
|
+
let iDelim = c0 === delimCode ? start : s.indexOf(delim, start);
|
|
872
|
+
let iAmp = c0 === 38 ? start : s.indexOf("&", start);
|
|
691
873
|
let left = 0,
|
|
692
874
|
out = "";
|
|
693
875
|
while (iDelim >= 0 && iAmp >= 0) {
|
|
@@ -718,6 +900,18 @@ function escape(s, attr) {
|
|
|
718
900
|
}
|
|
719
901
|
return left < s.length ? out + s.substring(left) : out;
|
|
720
902
|
}
|
|
903
|
+
function tryJoinPlainSSRArray(nodes) {
|
|
904
|
+
if (nodes.length === 0) return undefined;
|
|
905
|
+
let out = "";
|
|
906
|
+
for (let i = 0, len = nodes.length; i < len; i++) {
|
|
907
|
+
const node = nodes[i];
|
|
908
|
+
if (node == null || typeof node !== "object" || node.h || typeof node.t !== "string") {
|
|
909
|
+
return undefined;
|
|
910
|
+
}
|
|
911
|
+
out += node.t;
|
|
912
|
+
}
|
|
913
|
+
return out;
|
|
914
|
+
}
|
|
721
915
|
function mergeProps(...sources) {
|
|
722
916
|
const target = {};
|
|
723
917
|
for (let i = 0; i < sources.length; i++) {
|
|
@@ -859,19 +1053,45 @@ function flattenClassList(list, result) {
|
|
|
859
1053
|
if (Array.isArray(item)) flattenClassList(item, result);else if (typeof item === "object" && item != null) Object.assign(result, item);else if (item || item === 0) result[item] = true;
|
|
860
1054
|
}
|
|
861
1055
|
}
|
|
862
|
-
function
|
|
863
|
-
t
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
1056
|
+
function tryResolveString(node) {
|
|
1057
|
+
const t = typeof node;
|
|
1058
|
+
if (t === "string") return node;
|
|
1059
|
+
if (t === "number") return "" + node;
|
|
1060
|
+
if (node == null || t === "boolean") return "";
|
|
1061
|
+
if (t === "object") {
|
|
1062
|
+
if (Array.isArray(node)) {
|
|
1063
|
+
const joined = tryJoinPlainSSRArray(node);
|
|
1064
|
+
if (joined !== undefined) return joined;
|
|
1065
|
+
let s = "";
|
|
1066
|
+
let prevNonObj = false;
|
|
1067
|
+
for (let i = 0, len = node.length; i < len; i++) {
|
|
1068
|
+
const item = node[i];
|
|
1069
|
+
const itemNonObj = item !== null && typeof item !== "object";
|
|
1070
|
+
if (prevNonObj && itemNonObj) s += "<!--!$-->";
|
|
1071
|
+
prevNonObj = itemNonObj;
|
|
1072
|
+
const r = tryResolveString(item);
|
|
1073
|
+
if (typeof r !== "string") return {
|
|
1074
|
+
bail: node
|
|
1075
|
+
};
|
|
1076
|
+
s += r;
|
|
1077
|
+
}
|
|
1078
|
+
return s;
|
|
1079
|
+
}
|
|
1080
|
+
if (node.h && node.h.length > 0) return {
|
|
1081
|
+
merge: node
|
|
1082
|
+
};
|
|
1083
|
+
return Array.isArray(node.t) ? node.t[0] : node.t;
|
|
872
1084
|
}
|
|
873
|
-
|
|
874
|
-
|
|
1085
|
+
if (t === "function") {
|
|
1086
|
+
let v;
|
|
1087
|
+
try {
|
|
1088
|
+
v = node();
|
|
1089
|
+
} catch (err) {
|
|
1090
|
+
return buildAsyncWrap(err, node) || "";
|
|
1091
|
+
}
|
|
1092
|
+
return tryResolveString(v);
|
|
1093
|
+
}
|
|
1094
|
+
return "";
|
|
875
1095
|
}
|
|
876
1096
|
function resolveSSRNode(node, result = {
|
|
877
1097
|
t: [""],
|
|
@@ -882,10 +1102,13 @@ function resolveSSRNode(node, result = {
|
|
|
882
1102
|
if (t === "string" || t === "number") {
|
|
883
1103
|
result.t[result.t.length - 1] += node;
|
|
884
1104
|
} else if (node == null || t === "boolean") ; else if (Array.isArray(node)) {
|
|
885
|
-
let
|
|
1105
|
+
let prevNonObj = false;
|
|
886
1106
|
for (let i = 0, len = node.length; i < len; i++) {
|
|
887
|
-
|
|
888
|
-
|
|
1107
|
+
const item = node[i];
|
|
1108
|
+
const itemNonObj = item !== null && typeof item !== "object";
|
|
1109
|
+
if (!top && prevNonObj && itemNonObj) result.t[result.t.length - 1] += `<!--!$-->`;
|
|
1110
|
+
prevNonObj = itemNonObj;
|
|
1111
|
+
resolveSSRNode(item, result);
|
|
889
1112
|
}
|
|
890
1113
|
} else if (t === "object") {
|
|
891
1114
|
if (node.h) {
|
|
@@ -900,10 +1123,10 @@ function resolveSSRNode(node, result = {
|
|
|
900
1123
|
try {
|
|
901
1124
|
resolveSSRNode(node(), result);
|
|
902
1125
|
} catch (err) {
|
|
903
|
-
const
|
|
904
|
-
if (
|
|
905
|
-
result.h.push(
|
|
906
|
-
result.p.push(p);
|
|
1126
|
+
const wrap = buildAsyncWrap(err, node);
|
|
1127
|
+
if (wrap) {
|
|
1128
|
+
result.h.push(wrap.fn);
|
|
1129
|
+
result.p.push(wrap.p);
|
|
907
1130
|
result.t.push("");
|
|
908
1131
|
}
|
|
909
1132
|
}
|
|
@@ -952,4 +1175,4 @@ function Portal(props) {
|
|
|
952
1175
|
throw new Error("Portal is not supported on the server");
|
|
953
1176
|
}
|
|
954
1177
|
|
|
955
|
-
export { ChildProperties, DOMElements, DelegatedEvents, Dynamic, HydrationScript, MathMLElements, Namespaces, Portal, RawTextElements, RequestContext, SVGElements, VoidElements, notSup as addEventListener, applyRef, notSup as assign, notSup as className, notSup as delegateEvents, dynamic, notSup as dynamicProperty, effect, escape, generateHydrationScript, getAssets, getHydrationKey, notSup as getNextElement, notSup as getNextMarker, notSup as getNextMatch, getRequestEvent, notSup as hydrate, notSup as insert, isDev, isServer, memo, mergeProps, notSup as render, renderToStream, renderToString, renderToStringAsync, notSup as runHydrationEvents, notSup as setAttribute, notSup as setAttributeNS, notSup as setProperty, notSup as spread, ssr, ssrAttribute, ssrClassName, ssrElement, ssrHydrationKey, ssrStyle, ssrStyleProperty, notSup as style, notSup as template, useAssets };
|
|
1178
|
+
export { ChildProperties, DOMElements, DelegatedEvents, Dynamic, HydrationScript, MathMLElements, Namespaces, Portal, RawTextElements, RequestContext, SVGElements, VoidElements, notSup as addEventListener, applyRef, notSup as assign, notSup as className, notSup as delegateEvents, dynamic, notSup as dynamicProperty, effect, escape, generateHydrationScript, getAssets, getHydrationKey, notSup as getNextElement, notSup as getNextMarker, notSup as getNextMatch, getRequestEvent, notSup as hydrate, notSup as insert, isDev, isServer, memo, mergeProps, notSup as render, renderToStream, renderToString, renderToStringAsync, notSup as runHydrationEvents, notSup as setAttribute, notSup as setAttributeNS, notSup as setProperty, notSup as spread, ssr, ssrAttribute, ssrClassName, ssrElement, ssrGroup, ssrHydrationKey, ssrStyle, ssrStyleProperty, notSup as style, notSup as template, useAssets };
|
package/dist/web.cjs
CHANGED
|
@@ -51,13 +51,18 @@ const DOMElements = /*#__PURE__*/new Set(["html", "base", "head", "link", "meta"
|
|
|
51
51
|
"isindex", "listing", "multicol", "nextid", "noindex", "search"]);
|
|
52
52
|
|
|
53
53
|
const transparentOptions = {
|
|
54
|
-
transparent: true
|
|
54
|
+
transparent: true,
|
|
55
|
+
sync: true
|
|
56
|
+
};
|
|
57
|
+
const syncOptions = {
|
|
58
|
+
sync: true
|
|
55
59
|
};
|
|
56
60
|
const effect = (fn, effectFn, options) => solidJs.createRenderEffect(fn, effectFn, options ? {
|
|
57
61
|
transparent: true,
|
|
62
|
+
sync: true,
|
|
58
63
|
...options
|
|
59
64
|
} : transparentOptions);
|
|
60
|
-
const memo = fn => solidJs.createMemo(() => fn());
|
|
65
|
+
const memo = fn => solidJs.createMemo(() => fn(), syncOptions);
|
|
61
66
|
|
|
62
67
|
function reconcileArrays(parentNode, a, b) {
|
|
63
68
|
let bLength = b.length,
|
|
@@ -86,10 +91,12 @@ function reconcileArrays(parentNode, a, b) {
|
|
|
86
91
|
aStart++;
|
|
87
92
|
}
|
|
88
93
|
} else if (a[aStart] === b[bEnd - 1] && b[bStart] === a[aEnd - 1]) {
|
|
89
|
-
const
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
94
|
+
const anchor = a[aStart];
|
|
95
|
+
do {
|
|
96
|
+
parentNode.insertBefore(a[--aEnd], anchor);
|
|
97
|
+
bStart++;
|
|
98
|
+
if (aStart >= aEnd - 1 || bStart >= bEnd) break;
|
|
99
|
+
} while (a[aStart] === b[bEnd - 1] && b[bStart] === a[aEnd - 1]);
|
|
93
100
|
} else {
|
|
94
101
|
if (!map) {
|
|
95
102
|
map = new Map();
|
|
@@ -197,13 +204,13 @@ function className(node, value, prev) {
|
|
|
197
204
|
for (i = 0, len = prevKeys.length; i < len; i++) {
|
|
198
205
|
const key = prevKeys[i];
|
|
199
206
|
if (!key || key === "undefined" || value[key]) continue;
|
|
200
|
-
|
|
207
|
+
node.classList.remove(key);
|
|
201
208
|
}
|
|
202
209
|
for (i = 0, len = classKeys.length; i < len; i++) {
|
|
203
210
|
const key = classKeys[i],
|
|
204
211
|
classValue = !!value[key];
|
|
205
212
|
if (!key || key === "undefined" || prev[key] === classValue || !classValue) continue;
|
|
206
|
-
|
|
213
|
+
node.classList.add(key);
|
|
207
214
|
}
|
|
208
215
|
}
|
|
209
216
|
function addEventListener(node, name, handler, delegate) {
|
|
@@ -295,13 +302,16 @@ function insert(parent, accessor, marker, initial, options) {
|
|
|
295
302
|
initial = [placeholder];
|
|
296
303
|
}
|
|
297
304
|
let current = initial;
|
|
298
|
-
effect(
|
|
305
|
+
effect(prev => {
|
|
299
306
|
const value = normalize(accessor(), current, multi, true);
|
|
300
307
|
if (typeof value !== "function") return value;
|
|
301
308
|
effect(() => normalize(value, current, multi), inner => {
|
|
302
309
|
insertExpression(parent, inner, current, marker);
|
|
303
310
|
current = inner;
|
|
304
|
-
}, options)
|
|
311
|
+
}, prev !== undefined && !(options && options.schedule) ? {
|
|
312
|
+
...options,
|
|
313
|
+
schedule: true
|
|
314
|
+
} : options);
|
|
305
315
|
return INNER_OWNED;
|
|
306
316
|
}, value => {
|
|
307
317
|
if (value === INNER_OWNED) return;
|
|
@@ -470,14 +480,21 @@ function isHydrating(node) {
|
|
|
470
480
|
function getChildRoot(node) {
|
|
471
481
|
return node && node.localName === "template" ? node.content : node;
|
|
472
482
|
}
|
|
473
|
-
function toggleClassKey(node, key, value) {
|
|
474
|
-
const classNames = key.trim().split(/\s+/);
|
|
475
|
-
for (let i = 0, nameLen = classNames.length; i < nameLen; i++) node.classList.toggle(classNames[i], value);
|
|
476
|
-
}
|
|
477
483
|
function classListToObject(classList) {
|
|
478
484
|
if (Array.isArray(classList)) {
|
|
479
485
|
const result = {};
|
|
480
486
|
flattenClassList(classList, result);
|
|
487
|
+
classList = result;
|
|
488
|
+
}
|
|
489
|
+
if (classList && typeof classList === "object") {
|
|
490
|
+
const result = {},
|
|
491
|
+
keys = Object.keys(classList);
|
|
492
|
+
for (let i = 0, len = keys.length; i < len; i++) {
|
|
493
|
+
const key = keys[i];
|
|
494
|
+
if (!classList[key]) continue;
|
|
495
|
+
const classNames = key.trim().split(/\s+/);
|
|
496
|
+
for (let j = 0, nameLen = classNames.length; j < nameLen; j++) classNames[j] && (result[classNames[j]] = true);
|
|
497
|
+
}
|
|
481
498
|
return result;
|
|
482
499
|
}
|
|
483
500
|
return classList;
|
package/dist/web.js
CHANGED
|
@@ -50,13 +50,18 @@ const DOMElements = /*#__PURE__*/new Set(["html", "base", "head", "link", "meta"
|
|
|
50
50
|
"isindex", "listing", "multicol", "nextid", "noindex", "search"]);
|
|
51
51
|
|
|
52
52
|
const transparentOptions = {
|
|
53
|
-
transparent: true
|
|
53
|
+
transparent: true,
|
|
54
|
+
sync: true
|
|
55
|
+
};
|
|
56
|
+
const syncOptions = {
|
|
57
|
+
sync: true
|
|
54
58
|
};
|
|
55
59
|
const effect = (fn, effectFn, options) => createRenderEffect(fn, effectFn, options ? {
|
|
56
60
|
transparent: true,
|
|
61
|
+
sync: true,
|
|
57
62
|
...options
|
|
58
63
|
} : transparentOptions);
|
|
59
|
-
const memo = fn => createMemo(() => fn());
|
|
64
|
+
const memo = fn => createMemo(() => fn(), syncOptions);
|
|
60
65
|
|
|
61
66
|
function reconcileArrays(parentNode, a, b) {
|
|
62
67
|
let bLength = b.length,
|
|
@@ -85,10 +90,12 @@ function reconcileArrays(parentNode, a, b) {
|
|
|
85
90
|
aStart++;
|
|
86
91
|
}
|
|
87
92
|
} else if (a[aStart] === b[bEnd - 1] && b[bStart] === a[aEnd - 1]) {
|
|
88
|
-
const
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
93
|
+
const anchor = a[aStart];
|
|
94
|
+
do {
|
|
95
|
+
parentNode.insertBefore(a[--aEnd], anchor);
|
|
96
|
+
bStart++;
|
|
97
|
+
if (aStart >= aEnd - 1 || bStart >= bEnd) break;
|
|
98
|
+
} while (a[aStart] === b[bEnd - 1] && b[bStart] === a[aEnd - 1]);
|
|
92
99
|
} else {
|
|
93
100
|
if (!map) {
|
|
94
101
|
map = new Map();
|
|
@@ -196,13 +203,13 @@ function className(node, value, prev) {
|
|
|
196
203
|
for (i = 0, len = prevKeys.length; i < len; i++) {
|
|
197
204
|
const key = prevKeys[i];
|
|
198
205
|
if (!key || key === "undefined" || value[key]) continue;
|
|
199
|
-
|
|
206
|
+
node.classList.remove(key);
|
|
200
207
|
}
|
|
201
208
|
for (i = 0, len = classKeys.length; i < len; i++) {
|
|
202
209
|
const key = classKeys[i],
|
|
203
210
|
classValue = !!value[key];
|
|
204
211
|
if (!key || key === "undefined" || prev[key] === classValue || !classValue) continue;
|
|
205
|
-
|
|
212
|
+
node.classList.add(key);
|
|
206
213
|
}
|
|
207
214
|
}
|
|
208
215
|
function addEventListener(node, name, handler, delegate) {
|
|
@@ -294,13 +301,16 @@ function insert(parent, accessor, marker, initial, options) {
|
|
|
294
301
|
initial = [placeholder];
|
|
295
302
|
}
|
|
296
303
|
let current = initial;
|
|
297
|
-
effect(
|
|
304
|
+
effect(prev => {
|
|
298
305
|
const value = normalize(accessor(), current, multi, true);
|
|
299
306
|
if (typeof value !== "function") return value;
|
|
300
307
|
effect(() => normalize(value, current, multi), inner => {
|
|
301
308
|
insertExpression(parent, inner, current, marker);
|
|
302
309
|
current = inner;
|
|
303
|
-
}, options)
|
|
310
|
+
}, prev !== undefined && !(options && options.schedule) ? {
|
|
311
|
+
...options,
|
|
312
|
+
schedule: true
|
|
313
|
+
} : options);
|
|
304
314
|
return INNER_OWNED;
|
|
305
315
|
}, value => {
|
|
306
316
|
if (value === INNER_OWNED) return;
|
|
@@ -469,14 +479,21 @@ function isHydrating(node) {
|
|
|
469
479
|
function getChildRoot(node) {
|
|
470
480
|
return node && node.localName === "template" ? node.content : node;
|
|
471
481
|
}
|
|
472
|
-
function toggleClassKey(node, key, value) {
|
|
473
|
-
const classNames = key.trim().split(/\s+/);
|
|
474
|
-
for (let i = 0, nameLen = classNames.length; i < nameLen; i++) node.classList.toggle(classNames[i], value);
|
|
475
|
-
}
|
|
476
482
|
function classListToObject(classList) {
|
|
477
483
|
if (Array.isArray(classList)) {
|
|
478
484
|
const result = {};
|
|
479
485
|
flattenClassList(classList, result);
|
|
486
|
+
classList = result;
|
|
487
|
+
}
|
|
488
|
+
if (classList && typeof classList === "object") {
|
|
489
|
+
const result = {},
|
|
490
|
+
keys = Object.keys(classList);
|
|
491
|
+
for (let i = 0, len = keys.length; i < len; i++) {
|
|
492
|
+
const key = keys[i];
|
|
493
|
+
if (!classList[key]) continue;
|
|
494
|
+
const classNames = key.trim().split(/\s+/);
|
|
495
|
+
for (let j = 0, nameLen = classNames.length; j < nameLen; j++) classNames[j] && (result[classNames[j]] = true);
|
|
496
|
+
}
|
|
480
497
|
return result;
|
|
481
498
|
}
|
|
482
499
|
return classList;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@solidjs/web",
|
|
3
3
|
"description": "Solid's web runtime: client rendering, hydration, SSR, and DOM-specific control flow (Portal, Dynamic).",
|
|
4
|
-
"version": "2.0.0-beta.
|
|
4
|
+
"version": "2.0.0-beta.12",
|
|
5
5
|
"author": "Ryan Carniato",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"homepage": "https://solidjs.com",
|
|
@@ -137,10 +137,10 @@
|
|
|
137
137
|
"seroval-plugins": "^1.1.0"
|
|
138
138
|
},
|
|
139
139
|
"peerDependencies": {
|
|
140
|
-
"solid-js": "^2.0.0-beta.
|
|
140
|
+
"solid-js": "^2.0.0-beta.12"
|
|
141
141
|
},
|
|
142
142
|
"devDependencies": {
|
|
143
|
-
"solid-js": "2.0.0-beta.
|
|
143
|
+
"solid-js": "2.0.0-beta.12"
|
|
144
144
|
},
|
|
145
145
|
"scripts": {
|
|
146
146
|
"build": "npm-run-all -nl build:clean types:copy-jsx build:js",
|
|
@@ -157,6 +157,8 @@
|
|
|
157
157
|
"test": "vitest run && vitest run --config vite.config.server.mjs && vitest run --config vite.config.hydrate.mjs",
|
|
158
158
|
"test:server": "vitest run --config vite.config.server.mjs",
|
|
159
159
|
"coverage": "vitest run --coverage",
|
|
160
|
+
"bench": "vitest bench --run",
|
|
161
|
+
"bench:server": "vitest bench --run --config vite.config.server-bench.mjs",
|
|
160
162
|
"test-types": "npm-run-all -nl types test-types:tsc",
|
|
161
163
|
"test-types:tsc": "tsc --project tsconfig.test.json"
|
|
162
164
|
}
|
package/types/core.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { getOwner, runWithOwner, createComponent, createRoot as root, sharedConfig, untrack, merge as mergeProps, flatten, ssrHandleError
|
|
1
|
+
export { getOwner, runWithOwner, createComponent, createRoot as root, sharedConfig, untrack, merge as mergeProps, flatten, ssrHandleError } from "solid-js";
|
|
2
2
|
export declare const effect: (fn: any, effectFn: any, options: any) => void;
|
|
3
|
-
export declare const memo: (fn: any) => import("solid-js").
|
|
3
|
+
export declare const memo: (fn: any) => import("solid-js").SourceAccessor<any>;
|
package/types/server.d.ts
CHANGED
|
@@ -73,6 +73,7 @@ export function ssrClassName(value: string | { [k: string]: boolean } | Array<an
|
|
|
73
73
|
export function ssrStyle(value: string | { [k: string]: string }): string;
|
|
74
74
|
export function ssrStyleProperty(name: string, value: any): string;
|
|
75
75
|
export function ssrAttribute(key: string, value: any): string;
|
|
76
|
+
export function ssrGroup<T extends () => any[]>(fn: T, n: number): T;
|
|
76
77
|
export function ssrHydrationKey(): string;
|
|
77
78
|
export function resolveSSRNode(node: any, result?: any, top?: boolean): any;
|
|
78
79
|
export function escape(s: any, attr?: boolean): any;
|
|
@@ -88,7 +89,6 @@ export function memo<T>(fn: () => T, equal: boolean): () => T;
|
|
|
88
89
|
export function createComponent<T>(Comp: (props: T) => JSX.Element, props: T): JSX.Element;
|
|
89
90
|
export function mergeProps(...sources: unknown[]): unknown;
|
|
90
91
|
export function getOwner(): unknown;
|
|
91
|
-
export function ssrRunInScope(fn: () => void, owner: unknown): void;
|
|
92
92
|
export function generateHydrationScript(options?: {
|
|
93
93
|
nonce?: string;
|
|
94
94
|
eventNames?: string[];
|
package/types-cjs/core.d.cts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { getOwner, runWithOwner, createComponent, createRoot as root, sharedConfig, untrack, merge as mergeProps, flatten, ssrHandleError
|
|
1
|
+
export { getOwner, runWithOwner, createComponent, createRoot as root, sharedConfig, untrack, merge as mergeProps, flatten, ssrHandleError } from "solid-js";
|
|
2
2
|
export declare const effect: (fn: any, effectFn: any, options: any) => void;
|
|
3
|
-
export declare const memo: (fn: any) => import("solid-js").
|
|
3
|
+
export declare const memo: (fn: any) => import("solid-js").SourceAccessor<any>;
|
package/types-cjs/server.d.cts
CHANGED
|
@@ -73,6 +73,7 @@ export function ssrClassName(value: string | { [k: string]: boolean } | Array<an
|
|
|
73
73
|
export function ssrStyle(value: string | { [k: string]: string }): string;
|
|
74
74
|
export function ssrStyleProperty(name: string, value: any): string;
|
|
75
75
|
export function ssrAttribute(key: string, value: any): string;
|
|
76
|
+
export function ssrGroup<T extends () => any[]>(fn: T, n: number): T;
|
|
76
77
|
export function ssrHydrationKey(): string;
|
|
77
78
|
export function resolveSSRNode(node: any, result?: any, top?: boolean): any;
|
|
78
79
|
export function escape(s: any, attr?: boolean): any;
|
|
@@ -88,7 +89,6 @@ export function memo<T>(fn: () => T, equal: boolean): () => T;
|
|
|
88
89
|
export function createComponent<T>(Comp: (props: T) => JSX.Element, props: T): JSX.Element;
|
|
89
90
|
export function mergeProps(...sources: unknown[]): unknown;
|
|
90
91
|
export function getOwner(): unknown;
|
|
91
|
-
export function ssrRunInScope(fn: () => void, owner: unknown): void;
|
|
92
92
|
export function generateHydrationScript(options?: {
|
|
93
93
|
nonce?: string;
|
|
94
94
|
eventNames?: string[];
|