@solidjs/web 2.0.0-beta.10 → 2.0.0-beta.11
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 +207 -30
- package/dist/server.js +209 -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,149 @@ 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 mergeTemplateInto(result, node) {
|
|
621
|
+
result.t[result.t.length - 1] += node.t[0];
|
|
622
|
+
if (node.t.length > 1) {
|
|
623
|
+
result.t.push(...node.t.slice(1));
|
|
624
|
+
result.h.push(...node.h);
|
|
625
|
+
result.p.push(...node.p);
|
|
626
|
+
}
|
|
627
|
+
}
|
|
628
|
+
let _lastGroupFn = null;
|
|
629
|
+
let _lastGroupArr = null;
|
|
630
|
+
let _lastGroupErr = null;
|
|
631
|
+
function ssrGroupSlot(fn, idx) {
|
|
632
|
+
return () => {
|
|
633
|
+
if (idx > 0 && _lastGroupFn === fn) {
|
|
634
|
+
if (_lastGroupArr !== null) return _lastGroupArr[idx];
|
|
635
|
+
throw _lastGroupErr;
|
|
636
|
+
}
|
|
637
|
+
_lastGroupFn = fn;
|
|
638
|
+
_lastGroupArr = null;
|
|
639
|
+
_lastGroupErr = null;
|
|
640
|
+
try {
|
|
641
|
+
_lastGroupArr = fn();
|
|
642
|
+
return _lastGroupArr[idx];
|
|
643
|
+
} catch (err) {
|
|
644
|
+
_lastGroupErr = err;
|
|
645
|
+
throw err;
|
|
646
|
+
}
|
|
647
|
+
};
|
|
648
|
+
}
|
|
649
|
+
function ssr(t) {
|
|
650
|
+
const len = arguments.length;
|
|
651
|
+
if (len === 1) return {
|
|
598
652
|
t
|
|
599
653
|
};
|
|
654
|
+
let s = t[0];
|
|
655
|
+
let result = null;
|
|
656
|
+
let lastGroup = null;
|
|
657
|
+
let lastGroupVal = null;
|
|
658
|
+
let lastGroupIdx = 0;
|
|
659
|
+
for (let i = 1; i < len; i++) {
|
|
660
|
+
const hole = arguments[i];
|
|
661
|
+
const ht = typeof hole;
|
|
662
|
+
if (ht === "string") {
|
|
663
|
+
if (result === null) s += hole;else result.t[result.t.length - 1] += hole;
|
|
664
|
+
} else if (ht === "number") {
|
|
665
|
+
if (result === null) s += hole;else result.t[result.t.length - 1] += hole;
|
|
666
|
+
} else if (hole == null || ht === "boolean") ; else if (ht === "function" && hole.$g) {
|
|
667
|
+
let value;
|
|
668
|
+
let hasValue = false;
|
|
669
|
+
if (lastGroup !== hole) {
|
|
670
|
+
const r = ssrFirstGroupHit(hole);
|
|
671
|
+
if (r !== null) {
|
|
672
|
+
lastGroup = hole;
|
|
673
|
+
lastGroupVal = r;
|
|
674
|
+
lastGroupIdx = 0;
|
|
675
|
+
if (!Array.isArray(r) && result === null) {
|
|
676
|
+
result = {
|
|
677
|
+
t: [s],
|
|
678
|
+
h: [],
|
|
679
|
+
p: []
|
|
680
|
+
};
|
|
681
|
+
s = "";
|
|
682
|
+
}
|
|
683
|
+
}
|
|
684
|
+
}
|
|
685
|
+
if (lastGroup === hole) {
|
|
686
|
+
if (Array.isArray(lastGroupVal)) {
|
|
687
|
+
value = lastGroupVal[lastGroupIdx++];
|
|
688
|
+
hasValue = true;
|
|
689
|
+
} else {
|
|
690
|
+
result.h.push(ssrGroupSlot(lastGroupVal.fn, lastGroupIdx++));
|
|
691
|
+
result.p.push(lastGroupVal.p);
|
|
692
|
+
result.t.push("");
|
|
693
|
+
}
|
|
694
|
+
}
|
|
695
|
+
if (hasValue) {
|
|
696
|
+
const vt = typeof value;
|
|
697
|
+
if (vt === "string" || vt === "number") {
|
|
698
|
+
if (result === null) s += value;else result.t[result.t.length - 1] += value;
|
|
699
|
+
} else if (value == null || vt === "boolean") ; else if (result !== null) {
|
|
700
|
+
resolveSSRNode(value, result);
|
|
701
|
+
} else {
|
|
702
|
+
const rs = tryResolveString(value);
|
|
703
|
+
if (typeof rs === "string") {
|
|
704
|
+
s += rs;
|
|
705
|
+
} else {
|
|
706
|
+
result = {
|
|
707
|
+
t: [s],
|
|
708
|
+
h: [],
|
|
709
|
+
p: []
|
|
710
|
+
};
|
|
711
|
+
s = "";
|
|
712
|
+
if (rs.merge !== undefined) mergeTemplateInto(result, rs.merge);else resolveSSRNode(rs.bail, result);
|
|
713
|
+
}
|
|
714
|
+
}
|
|
715
|
+
}
|
|
716
|
+
} else if (result !== null) {
|
|
717
|
+
resolveSSRNode(hole, result);
|
|
718
|
+
} else {
|
|
719
|
+
const r = tryResolveString(hole);
|
|
720
|
+
if (typeof r === "string") {
|
|
721
|
+
s += r;
|
|
722
|
+
} else {
|
|
723
|
+
result = {
|
|
724
|
+
t: [s],
|
|
725
|
+
h: [],
|
|
726
|
+
p: []
|
|
727
|
+
};
|
|
728
|
+
s = "";
|
|
729
|
+
if (r.fn !== undefined) {
|
|
730
|
+
result.h.push(r.fn);
|
|
731
|
+
result.p.push(r.p);
|
|
732
|
+
result.t.push("");
|
|
733
|
+
} else if (r.merge !== undefined) mergeTemplateInto(result, r.merge);else resolveSSRNode(r.bail, result);
|
|
734
|
+
}
|
|
735
|
+
}
|
|
736
|
+
const next = t[i];
|
|
737
|
+
if (result === null) s += next;else result.t[result.t.length - 1] += next;
|
|
738
|
+
}
|
|
739
|
+
if (result === null) return {
|
|
740
|
+
t: s
|
|
741
|
+
};
|
|
742
|
+
return result;
|
|
600
743
|
}
|
|
601
744
|
function ssrClassName(value) {
|
|
602
745
|
if (!value) return "";
|
|
@@ -684,11 +827,21 @@ function escape(s, attr) {
|
|
|
684
827
|
if (attr && t === "boolean") return s;
|
|
685
828
|
return s;
|
|
686
829
|
}
|
|
830
|
+
const delimCode = attr ? 34 : 60;
|
|
831
|
+
const len = s.length;
|
|
832
|
+
for (let i = 0; i < len; i++) {
|
|
833
|
+
const c = s.charCodeAt(i);
|
|
834
|
+
if (c === 38 || c === delimCode) return escapeSlow(s, attr, i);
|
|
835
|
+
}
|
|
836
|
+
return s;
|
|
837
|
+
}
|
|
838
|
+
function escapeSlow(s, attr, start) {
|
|
687
839
|
const delim = attr ? '"' : "<";
|
|
840
|
+
const delimCode = attr ? 34 : 60;
|
|
688
841
|
const escDelim = attr ? """ : "<";
|
|
689
|
-
|
|
690
|
-
let
|
|
691
|
-
|
|
842
|
+
const c0 = s.charCodeAt(start);
|
|
843
|
+
let iDelim = c0 === delimCode ? start : s.indexOf(delim, start);
|
|
844
|
+
let iAmp = c0 === 38 ? start : s.indexOf("&", start);
|
|
692
845
|
let left = 0,
|
|
693
846
|
out = "";
|
|
694
847
|
while (iDelim >= 0 && iAmp >= 0) {
|
|
@@ -860,19 +1013,43 @@ function flattenClassList(list, result) {
|
|
|
860
1013
|
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
1014
|
}
|
|
862
1015
|
}
|
|
863
|
-
function
|
|
864
|
-
t
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
1016
|
+
function tryResolveString(node) {
|
|
1017
|
+
const t = typeof node;
|
|
1018
|
+
if (t === "string") return node;
|
|
1019
|
+
if (t === "number") return "" + node;
|
|
1020
|
+
if (node == null || t === "boolean") return "";
|
|
1021
|
+
if (t === "object") {
|
|
1022
|
+
if (Array.isArray(node)) {
|
|
1023
|
+
let s = "";
|
|
1024
|
+
let prevNonObj = false;
|
|
1025
|
+
for (let i = 0, len = node.length; i < len; i++) {
|
|
1026
|
+
const item = node[i];
|
|
1027
|
+
const itemNonObj = item !== null && typeof item !== "object";
|
|
1028
|
+
if (prevNonObj && itemNonObj) s += "<!--!$-->";
|
|
1029
|
+
prevNonObj = itemNonObj;
|
|
1030
|
+
const r = tryResolveString(item);
|
|
1031
|
+
if (typeof r !== "string") return {
|
|
1032
|
+
bail: node
|
|
1033
|
+
};
|
|
1034
|
+
s += r;
|
|
1035
|
+
}
|
|
1036
|
+
return s;
|
|
1037
|
+
}
|
|
1038
|
+
if (node.h && node.h.length > 0) return {
|
|
1039
|
+
merge: node
|
|
1040
|
+
};
|
|
1041
|
+
return Array.isArray(node.t) ? node.t[0] : node.t;
|
|
873
1042
|
}
|
|
874
|
-
|
|
875
|
-
|
|
1043
|
+
if (t === "function") {
|
|
1044
|
+
let v;
|
|
1045
|
+
try {
|
|
1046
|
+
v = node();
|
|
1047
|
+
} catch (err) {
|
|
1048
|
+
return buildAsyncWrap(err, node) || "";
|
|
1049
|
+
}
|
|
1050
|
+
return tryResolveString(v);
|
|
1051
|
+
}
|
|
1052
|
+
return "";
|
|
876
1053
|
}
|
|
877
1054
|
function resolveSSRNode(node, result = {
|
|
878
1055
|
t: [""],
|
|
@@ -883,10 +1060,13 @@ function resolveSSRNode(node, result = {
|
|
|
883
1060
|
if (t === "string" || t === "number") {
|
|
884
1061
|
result.t[result.t.length - 1] += node;
|
|
885
1062
|
} else if (node == null || t === "boolean") ; else if (Array.isArray(node)) {
|
|
886
|
-
let
|
|
1063
|
+
let prevNonObj = false;
|
|
887
1064
|
for (let i = 0, len = node.length; i < len; i++) {
|
|
888
|
-
|
|
889
|
-
|
|
1065
|
+
const item = node[i];
|
|
1066
|
+
const itemNonObj = item !== null && typeof item !== "object";
|
|
1067
|
+
if (!top && prevNonObj && itemNonObj) result.t[result.t.length - 1] += `<!--!$-->`;
|
|
1068
|
+
prevNonObj = itemNonObj;
|
|
1069
|
+
resolveSSRNode(item, result);
|
|
890
1070
|
}
|
|
891
1071
|
} else if (t === "object") {
|
|
892
1072
|
if (node.h) {
|
|
@@ -901,10 +1081,10 @@ function resolveSSRNode(node, result = {
|
|
|
901
1081
|
try {
|
|
902
1082
|
resolveSSRNode(node(), result);
|
|
903
1083
|
} catch (err) {
|
|
904
|
-
const
|
|
905
|
-
if (
|
|
906
|
-
result.h.push(
|
|
907
|
-
result.p.push(p);
|
|
1084
|
+
const wrap = buildAsyncWrap(err, node);
|
|
1085
|
+
if (wrap) {
|
|
1086
|
+
result.h.push(wrap.fn);
|
|
1087
|
+
result.p.push(wrap.p);
|
|
908
1088
|
result.t.push("");
|
|
909
1089
|
}
|
|
910
1090
|
}
|
|
@@ -1001,10 +1181,6 @@ Object.defineProperty(exports, "getOwner", {
|
|
|
1001
1181
|
enumerable: true,
|
|
1002
1182
|
get: function () { return solidJs.getOwner; }
|
|
1003
1183
|
});
|
|
1004
|
-
Object.defineProperty(exports, "ssrRunInScope", {
|
|
1005
|
-
enumerable: true,
|
|
1006
|
-
get: function () { return solidJs.ssrRunInScope; }
|
|
1007
|
-
});
|
|
1008
1184
|
Object.defineProperty(exports, "untrack", {
|
|
1009
1185
|
enumerable: true,
|
|
1010
1186
|
get: function () { return solidJs.untrack; }
|
|
@@ -1056,6 +1232,7 @@ exports.ssr = ssr;
|
|
|
1056
1232
|
exports.ssrAttribute = ssrAttribute;
|
|
1057
1233
|
exports.ssrClassName = ssrClassName;
|
|
1058
1234
|
exports.ssrElement = ssrElement;
|
|
1235
|
+
exports.ssrGroup = ssrGroup;
|
|
1059
1236
|
exports.ssrHydrationKey = ssrHydrationKey;
|
|
1060
1237
|
exports.ssrStyle = ssrStyle;
|
|
1061
1238
|
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,149 @@ 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 mergeTemplateInto(result, node) {
|
|
620
|
+
result.t[result.t.length - 1] += node.t[0];
|
|
621
|
+
if (node.t.length > 1) {
|
|
622
|
+
result.t.push(...node.t.slice(1));
|
|
623
|
+
result.h.push(...node.h);
|
|
624
|
+
result.p.push(...node.p);
|
|
625
|
+
}
|
|
626
|
+
}
|
|
627
|
+
let _lastGroupFn = null;
|
|
628
|
+
let _lastGroupArr = null;
|
|
629
|
+
let _lastGroupErr = null;
|
|
630
|
+
function ssrGroupSlot(fn, idx) {
|
|
631
|
+
return () => {
|
|
632
|
+
if (idx > 0 && _lastGroupFn === fn) {
|
|
633
|
+
if (_lastGroupArr !== null) return _lastGroupArr[idx];
|
|
634
|
+
throw _lastGroupErr;
|
|
635
|
+
}
|
|
636
|
+
_lastGroupFn = fn;
|
|
637
|
+
_lastGroupArr = null;
|
|
638
|
+
_lastGroupErr = null;
|
|
639
|
+
try {
|
|
640
|
+
_lastGroupArr = fn();
|
|
641
|
+
return _lastGroupArr[idx];
|
|
642
|
+
} catch (err) {
|
|
643
|
+
_lastGroupErr = err;
|
|
644
|
+
throw err;
|
|
645
|
+
}
|
|
646
|
+
};
|
|
647
|
+
}
|
|
648
|
+
function ssr(t) {
|
|
649
|
+
const len = arguments.length;
|
|
650
|
+
if (len === 1) return {
|
|
597
651
|
t
|
|
598
652
|
};
|
|
653
|
+
let s = t[0];
|
|
654
|
+
let result = null;
|
|
655
|
+
let lastGroup = null;
|
|
656
|
+
let lastGroupVal = null;
|
|
657
|
+
let lastGroupIdx = 0;
|
|
658
|
+
for (let i = 1; i < len; i++) {
|
|
659
|
+
const hole = arguments[i];
|
|
660
|
+
const ht = typeof hole;
|
|
661
|
+
if (ht === "string") {
|
|
662
|
+
if (result === null) s += hole;else result.t[result.t.length - 1] += hole;
|
|
663
|
+
} else if (ht === "number") {
|
|
664
|
+
if (result === null) s += hole;else result.t[result.t.length - 1] += hole;
|
|
665
|
+
} else if (hole == null || ht === "boolean") ; else if (ht === "function" && hole.$g) {
|
|
666
|
+
let value;
|
|
667
|
+
let hasValue = false;
|
|
668
|
+
if (lastGroup !== hole) {
|
|
669
|
+
const r = ssrFirstGroupHit(hole);
|
|
670
|
+
if (r !== null) {
|
|
671
|
+
lastGroup = hole;
|
|
672
|
+
lastGroupVal = r;
|
|
673
|
+
lastGroupIdx = 0;
|
|
674
|
+
if (!Array.isArray(r) && result === null) {
|
|
675
|
+
result = {
|
|
676
|
+
t: [s],
|
|
677
|
+
h: [],
|
|
678
|
+
p: []
|
|
679
|
+
};
|
|
680
|
+
s = "";
|
|
681
|
+
}
|
|
682
|
+
}
|
|
683
|
+
}
|
|
684
|
+
if (lastGroup === hole) {
|
|
685
|
+
if (Array.isArray(lastGroupVal)) {
|
|
686
|
+
value = lastGroupVal[lastGroupIdx++];
|
|
687
|
+
hasValue = true;
|
|
688
|
+
} else {
|
|
689
|
+
result.h.push(ssrGroupSlot(lastGroupVal.fn, lastGroupIdx++));
|
|
690
|
+
result.p.push(lastGroupVal.p);
|
|
691
|
+
result.t.push("");
|
|
692
|
+
}
|
|
693
|
+
}
|
|
694
|
+
if (hasValue) {
|
|
695
|
+
const vt = typeof value;
|
|
696
|
+
if (vt === "string" || vt === "number") {
|
|
697
|
+
if (result === null) s += value;else result.t[result.t.length - 1] += value;
|
|
698
|
+
} else if (value == null || vt === "boolean") ; else if (result !== null) {
|
|
699
|
+
resolveSSRNode(value, result);
|
|
700
|
+
} else {
|
|
701
|
+
const rs = tryResolveString(value);
|
|
702
|
+
if (typeof rs === "string") {
|
|
703
|
+
s += rs;
|
|
704
|
+
} else {
|
|
705
|
+
result = {
|
|
706
|
+
t: [s],
|
|
707
|
+
h: [],
|
|
708
|
+
p: []
|
|
709
|
+
};
|
|
710
|
+
s = "";
|
|
711
|
+
if (rs.merge !== undefined) mergeTemplateInto(result, rs.merge);else resolveSSRNode(rs.bail, result);
|
|
712
|
+
}
|
|
713
|
+
}
|
|
714
|
+
}
|
|
715
|
+
} else if (result !== null) {
|
|
716
|
+
resolveSSRNode(hole, result);
|
|
717
|
+
} else {
|
|
718
|
+
const r = tryResolveString(hole);
|
|
719
|
+
if (typeof r === "string") {
|
|
720
|
+
s += r;
|
|
721
|
+
} else {
|
|
722
|
+
result = {
|
|
723
|
+
t: [s],
|
|
724
|
+
h: [],
|
|
725
|
+
p: []
|
|
726
|
+
};
|
|
727
|
+
s = "";
|
|
728
|
+
if (r.fn !== undefined) {
|
|
729
|
+
result.h.push(r.fn);
|
|
730
|
+
result.p.push(r.p);
|
|
731
|
+
result.t.push("");
|
|
732
|
+
} else if (r.merge !== undefined) mergeTemplateInto(result, r.merge);else resolveSSRNode(r.bail, result);
|
|
733
|
+
}
|
|
734
|
+
}
|
|
735
|
+
const next = t[i];
|
|
736
|
+
if (result === null) s += next;else result.t[result.t.length - 1] += next;
|
|
737
|
+
}
|
|
738
|
+
if (result === null) return {
|
|
739
|
+
t: s
|
|
740
|
+
};
|
|
741
|
+
return result;
|
|
599
742
|
}
|
|
600
743
|
function ssrClassName(value) {
|
|
601
744
|
if (!value) return "";
|
|
@@ -683,11 +826,21 @@ function escape(s, attr) {
|
|
|
683
826
|
if (attr && t === "boolean") return s;
|
|
684
827
|
return s;
|
|
685
828
|
}
|
|
829
|
+
const delimCode = attr ? 34 : 60;
|
|
830
|
+
const len = s.length;
|
|
831
|
+
for (let i = 0; i < len; i++) {
|
|
832
|
+
const c = s.charCodeAt(i);
|
|
833
|
+
if (c === 38 || c === delimCode) return escapeSlow(s, attr, i);
|
|
834
|
+
}
|
|
835
|
+
return s;
|
|
836
|
+
}
|
|
837
|
+
function escapeSlow(s, attr, start) {
|
|
686
838
|
const delim = attr ? '"' : "<";
|
|
839
|
+
const delimCode = attr ? 34 : 60;
|
|
687
840
|
const escDelim = attr ? """ : "<";
|
|
688
|
-
|
|
689
|
-
let
|
|
690
|
-
|
|
841
|
+
const c0 = s.charCodeAt(start);
|
|
842
|
+
let iDelim = c0 === delimCode ? start : s.indexOf(delim, start);
|
|
843
|
+
let iAmp = c0 === 38 ? start : s.indexOf("&", start);
|
|
691
844
|
let left = 0,
|
|
692
845
|
out = "";
|
|
693
846
|
while (iDelim >= 0 && iAmp >= 0) {
|
|
@@ -859,19 +1012,43 @@ function flattenClassList(list, result) {
|
|
|
859
1012
|
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
1013
|
}
|
|
861
1014
|
}
|
|
862
|
-
function
|
|
863
|
-
t
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
1015
|
+
function tryResolveString(node) {
|
|
1016
|
+
const t = typeof node;
|
|
1017
|
+
if (t === "string") return node;
|
|
1018
|
+
if (t === "number") return "" + node;
|
|
1019
|
+
if (node == null || t === "boolean") return "";
|
|
1020
|
+
if (t === "object") {
|
|
1021
|
+
if (Array.isArray(node)) {
|
|
1022
|
+
let s = "";
|
|
1023
|
+
let prevNonObj = false;
|
|
1024
|
+
for (let i = 0, len = node.length; i < len; i++) {
|
|
1025
|
+
const item = node[i];
|
|
1026
|
+
const itemNonObj = item !== null && typeof item !== "object";
|
|
1027
|
+
if (prevNonObj && itemNonObj) s += "<!--!$-->";
|
|
1028
|
+
prevNonObj = itemNonObj;
|
|
1029
|
+
const r = tryResolveString(item);
|
|
1030
|
+
if (typeof r !== "string") return {
|
|
1031
|
+
bail: node
|
|
1032
|
+
};
|
|
1033
|
+
s += r;
|
|
1034
|
+
}
|
|
1035
|
+
return s;
|
|
1036
|
+
}
|
|
1037
|
+
if (node.h && node.h.length > 0) return {
|
|
1038
|
+
merge: node
|
|
1039
|
+
};
|
|
1040
|
+
return Array.isArray(node.t) ? node.t[0] : node.t;
|
|
872
1041
|
}
|
|
873
|
-
|
|
874
|
-
|
|
1042
|
+
if (t === "function") {
|
|
1043
|
+
let v;
|
|
1044
|
+
try {
|
|
1045
|
+
v = node();
|
|
1046
|
+
} catch (err) {
|
|
1047
|
+
return buildAsyncWrap(err, node) || "";
|
|
1048
|
+
}
|
|
1049
|
+
return tryResolveString(v);
|
|
1050
|
+
}
|
|
1051
|
+
return "";
|
|
875
1052
|
}
|
|
876
1053
|
function resolveSSRNode(node, result = {
|
|
877
1054
|
t: [""],
|
|
@@ -882,10 +1059,13 @@ function resolveSSRNode(node, result = {
|
|
|
882
1059
|
if (t === "string" || t === "number") {
|
|
883
1060
|
result.t[result.t.length - 1] += node;
|
|
884
1061
|
} else if (node == null || t === "boolean") ; else if (Array.isArray(node)) {
|
|
885
|
-
let
|
|
1062
|
+
let prevNonObj = false;
|
|
886
1063
|
for (let i = 0, len = node.length; i < len; i++) {
|
|
887
|
-
|
|
888
|
-
|
|
1064
|
+
const item = node[i];
|
|
1065
|
+
const itemNonObj = item !== null && typeof item !== "object";
|
|
1066
|
+
if (!top && prevNonObj && itemNonObj) result.t[result.t.length - 1] += `<!--!$-->`;
|
|
1067
|
+
prevNonObj = itemNonObj;
|
|
1068
|
+
resolveSSRNode(item, result);
|
|
889
1069
|
}
|
|
890
1070
|
} else if (t === "object") {
|
|
891
1071
|
if (node.h) {
|
|
@@ -900,10 +1080,10 @@ function resolveSSRNode(node, result = {
|
|
|
900
1080
|
try {
|
|
901
1081
|
resolveSSRNode(node(), result);
|
|
902
1082
|
} catch (err) {
|
|
903
|
-
const
|
|
904
|
-
if (
|
|
905
|
-
result.h.push(
|
|
906
|
-
result.p.push(p);
|
|
1083
|
+
const wrap = buildAsyncWrap(err, node);
|
|
1084
|
+
if (wrap) {
|
|
1085
|
+
result.h.push(wrap.fn);
|
|
1086
|
+
result.p.push(wrap.p);
|
|
907
1087
|
result.t.push("");
|
|
908
1088
|
}
|
|
909
1089
|
}
|
|
@@ -952,4 +1132,4 @@ function Portal(props) {
|
|
|
952
1132
|
throw new Error("Portal is not supported on the server");
|
|
953
1133
|
}
|
|
954
1134
|
|
|
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 };
|
|
1135
|
+
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.11",
|
|
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.11"
|
|
141
141
|
},
|
|
142
142
|
"devDependencies": {
|
|
143
|
-
"solid-js": "2.0.0-beta.
|
|
143
|
+
"solid-js": "2.0.0-beta.11"
|
|
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[];
|