@solidjs/web 2.0.0-beta.30 → 2.0.0-beta.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -6
- package/dist/dev.cjs +284 -82
- package/dist/dev.js +271 -79
- package/dist/server.cjs +555 -135
- package/dist/server.js +544 -132
- package/dist/web.cjs +281 -79
- package/dist/web.js +268 -76
- package/frames/dist/client.cjs +413 -360
- package/frames/dist/client.dev.cjs +413 -360
- package/frames/dist/client.dev.js +414 -361
- package/frames/dist/client.js +414 -361
- package/frames/dist/server.cjs +604 -199
- package/frames/dist/server.js +605 -201
- package/package.json +56 -6
- package/serialization/dist/serialization.cjs +8 -0
- package/serialization/dist/serialization.js +1 -0
- package/serialization/types/index.d.ts +173 -6
- package/serialization/types-cjs/index.d.cts +173 -6
- package/server-functions/dist/client.cjs +46 -9
- package/server-functions/dist/client.js +47 -11
- package/server-functions/dist/rich-args.cjs +11 -0
- package/server-functions/dist/rich-args.js +9 -0
- package/server-functions/dist/server.cjs +275 -126
- package/server-functions/dist/server.dev.cjs +1053 -0
- package/server-functions/dist/server.dev.js +1021 -0
- package/server-functions/dist/server.js +273 -127
- package/server-functions/package.json +10 -0
- package/server-functions/rich-args/package.json +20 -0
- package/storage/types/index.d.ts +1 -1
- package/storage/types-cjs/index.d.cts +1 -1
- package/types/client.d.ts +134 -11
- package/types/core.d.ts +3 -1
- package/types/frames/client.d.ts +24 -8
- package/types/frames/frame-client.d.ts +49 -7
- package/types/frames/frame-sink.d.ts +32 -6
- package/types/frames/frame-transport.d.ts +88 -62
- package/types/frames/serializer.d.ts +173 -6
- package/types/frames/server.d.ts +22 -0
- package/types/index.d.ts +2 -3
- package/types/jsx.d.ts +3 -3
- package/types/response.d.ts +45 -0
- package/types/serializer.d.ts +173 -6
- package/types/server-functions/client.d.ts +1 -0
- package/types/server-functions/rich-args.d.ts +10 -0
- package/types/server-functions/server.d.ts +98 -0
- package/types/server-functions/shared.d.ts +22 -0
- package/types/server-mock.d.ts +171 -59
- package/types/server.d.ts +196 -42
- package/types-cjs/client.d.cts +134 -11
- package/types-cjs/core.d.cts +3 -1
- package/types-cjs/frames/client.d.cts +24 -8
- package/types-cjs/frames/frame-client.d.cts +49 -7
- package/types-cjs/frames/frame-sink.d.cts +32 -6
- package/types-cjs/frames/frame-transport.d.cts +88 -62
- package/types-cjs/frames/serializer.d.cts +173 -6
- package/types-cjs/frames/server.d.cts +22 -0
- package/types-cjs/index.d.cts +2 -3
- package/types-cjs/jsx.d.cts +3 -3
- package/types-cjs/response.d.cts +45 -0
- package/types-cjs/serializer.d.cts +173 -6
- package/types-cjs/server-functions/client.d.cts +1 -0
- package/types-cjs/server-functions/rich-args.d.cts +10 -0
- package/types-cjs/server-functions/server.d.cts +98 -0
- package/types-cjs/server-functions/shared.d.cts +22 -0
- package/types-cjs/server-mock.d.cts +171 -59
- package/types-cjs/server.d.cts +196 -42
package/README.md
CHANGED
|
@@ -13,12 +13,7 @@ Solid 2.0's web platform runtime — DOM rendering, hydration, server-side rende
|
|
|
13
13
|
import { render, hydrate, Portal, Dynamic, dynamic } from "@solidjs/web";
|
|
14
14
|
|
|
15
15
|
// Server (SSR)
|
|
16
|
-
import {
|
|
17
|
-
renderToString,
|
|
18
|
-
renderToStringAsync,
|
|
19
|
-
renderToStream,
|
|
20
|
-
isServer
|
|
21
|
-
} from "@solidjs/web";
|
|
16
|
+
import { renderToString, renderToStream, isServer } from "@solidjs/web";
|
|
22
17
|
```
|
|
23
18
|
|
|
24
19
|
The control-flow components from `solid-js` (`For`, `Show`, `Switch`/`Match`, `Loading`, `Errored`, `Repeat`, `Reveal`) are also re-exported from `@solidjs/web` for convenience.
|
package/dist/dev.cjs
CHANGED
|
@@ -63,6 +63,17 @@ const effect = (fn, effectFn, options) => solidJs.createRenderEffect(fn, effectF
|
|
|
63
63
|
transparent: !options.scope
|
|
64
64
|
} : transparentOptions);
|
|
65
65
|
const memo = fn => solidJs.createMemo(() => fn(), syncOptions);
|
|
66
|
+
const assetGates = new WeakMap();
|
|
67
|
+
const waitAsset = promise => {
|
|
68
|
+
let gate = assetGates.get(promise);
|
|
69
|
+
if (!gate) {
|
|
70
|
+
solidJs.runWithOwner(null, () => {
|
|
71
|
+
gate = solidJs.createMemo(() => promise);
|
|
72
|
+
});
|
|
73
|
+
assetGates.set(promise, gate);
|
|
74
|
+
}
|
|
75
|
+
gate();
|
|
76
|
+
};
|
|
66
77
|
|
|
67
78
|
function reconcileArrays(parentNode, a, b, marker) {
|
|
68
79
|
let bLength = b.length,
|
|
@@ -172,8 +183,9 @@ function reconcileArrays(parentNode, a, b, marker) {
|
|
|
172
183
|
|
|
173
184
|
const HEAD_ELIGIBLE_TAGS = new Set(["title", "meta", "link", "style", "script", "base"]);
|
|
174
185
|
const HEAD_ATTR_NAME = /^[a-zA-Z_][a-zA-Z0-9_:.-]*$/;
|
|
175
|
-
const RESOURCE_LINK_RELS = new Set(["preload", "modulepreload", "prefetch", "preconnect", "dns-prefetch", "
|
|
186
|
+
const RESOURCE_LINK_RELS = new Set(["preload", "modulepreload", "prefetch", "preconnect", "dns-prefetch", "stylesheet"]);
|
|
176
187
|
const RESOURCE_QUALIFIERS = ["as", "crossorigin", "type", "media", "imagesrcset", "imagesizes"];
|
|
188
|
+
const STYLESHEET_FETCH_META = new Set(["crossorigin", "integrity", "referrerpolicy", "fetchpriority"]);
|
|
177
189
|
function evalHeadValue(v) {
|
|
178
190
|
return typeof v === "function" ? v() : v;
|
|
179
191
|
}
|
|
@@ -215,12 +227,14 @@ function replaceableIdentity(tag, props, key, unique) {
|
|
|
215
227
|
if (tag === "meta" && props.charset != null) return "charset";
|
|
216
228
|
if (key != null) return tag + ":key:" + key;
|
|
217
229
|
if (tag === "meta") {
|
|
218
|
-
if (props
|
|
219
|
-
if (props.property != null) return "meta:property:" + props.property;
|
|
220
|
-
if (props["http-equiv"] != null) return "meta:http-equiv:" + props["http-equiv"];
|
|
230
|
+
for (const ns of ["name", "property", "http-equiv"]) if (props[ns] != null) return "meta:" + ns + ":" + props[ns] + (props.media != null ? ":media=" + props.media : "");
|
|
221
231
|
return unique;
|
|
222
232
|
}
|
|
223
|
-
if (tag === "link")
|
|
233
|
+
if (tag === "link") {
|
|
234
|
+
const rel = props.rel || "";
|
|
235
|
+
if (rel === "icon" || rel === "apple-touch-icon") return "link:" + rel + (props.sizes != null ? ":sizes=" + props.sizes : "") + (props.type != null ? ":type=" + props.type : "");
|
|
236
|
+
return "link:" + rel + ":" + (props.href || "");
|
|
237
|
+
}
|
|
224
238
|
return unique;
|
|
225
239
|
}
|
|
226
240
|
function resolveHead(groups) {
|
|
@@ -253,6 +267,43 @@ function resolveHead(groups) {
|
|
|
253
267
|
return winners;
|
|
254
268
|
}
|
|
255
269
|
|
|
270
|
+
function parseCookieHeader(header) {
|
|
271
|
+
const cookies = {};
|
|
272
|
+
if (!header) return cookies;
|
|
273
|
+
for (const part of header.split(";")) {
|
|
274
|
+
const eq = part.indexOf("=");
|
|
275
|
+
if (eq < 0) continue;
|
|
276
|
+
const name = decodeSafe(part.slice(0, eq).trim());
|
|
277
|
+
let value = part.slice(eq + 1).trim();
|
|
278
|
+
if (value.length > 1 && value[0] === '"' && value[value.length - 1] === '"') {
|
|
279
|
+
value = value.slice(1, -1);
|
|
280
|
+
}
|
|
281
|
+
cookies[name] = decodeSafe(value);
|
|
282
|
+
}
|
|
283
|
+
return cookies;
|
|
284
|
+
}
|
|
285
|
+
function decodeSafe(text) {
|
|
286
|
+
try {
|
|
287
|
+
return decodeURIComponent(text);
|
|
288
|
+
} catch {
|
|
289
|
+
return text;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
function serializeCookie(name, value, options = {}) {
|
|
293
|
+
let cookie = `${encodeURIComponent(name)}=${encodeURIComponent(value)}`;
|
|
294
|
+
cookie += `; Path=${options.path === undefined ? "/" : options.path}`;
|
|
295
|
+
if (options.domain) cookie += `; Domain=${options.domain}`;
|
|
296
|
+
if (options.maxAge !== undefined) cookie += `; Max-Age=${Math.trunc(options.maxAge)}`;
|
|
297
|
+
if (options.expires) cookie += `; Expires=${options.expires.toUTCString()}`;
|
|
298
|
+
if (options.httpOnly) cookie += "; HttpOnly";
|
|
299
|
+
if (options.secure) cookie += "; Secure";
|
|
300
|
+
if (options.sameSite) {
|
|
301
|
+
const sameSite = options.sameSite.toLowerCase();
|
|
302
|
+
cookie += `; SameSite=${sameSite === "none" ? "None" : sameSite === "strict" ? "Strict" : "Lax"}`;
|
|
303
|
+
}
|
|
304
|
+
return cookie;
|
|
305
|
+
}
|
|
306
|
+
|
|
256
307
|
const $$EVENT_OWNER = "_$DX_EVENT_OWNER";
|
|
257
308
|
const INNER_OWNED = {};
|
|
258
309
|
const delegatedEvents = new Set();
|
|
@@ -656,6 +707,9 @@ function findAssetElement(selector, attr, value) {
|
|
|
656
707
|
}
|
|
657
708
|
return null;
|
|
658
709
|
}
|
|
710
|
+
function setAssetAttrs(el, attrs) {
|
|
711
|
+
for (const name in attrs) el.setAttribute(name, attrs[name]);
|
|
712
|
+
}
|
|
659
713
|
function mountAssetElement(descriptor) {
|
|
660
714
|
let el;
|
|
661
715
|
if (descriptor.type === "inline-style") {
|
|
@@ -674,12 +728,77 @@ function mountAssetElement(descriptor) {
|
|
|
674
728
|
el.href = descriptor.href;
|
|
675
729
|
}
|
|
676
730
|
}
|
|
677
|
-
if (descriptor.attrs)
|
|
678
|
-
for (const name in descriptor.attrs) el.setAttribute(name, descriptor.attrs[name]);
|
|
679
|
-
}
|
|
731
|
+
if (descriptor.attrs) setAssetAttrs(el, descriptor.attrs);
|
|
680
732
|
if (!el.isConnected) document.head.appendChild(el);
|
|
681
733
|
return el;
|
|
682
734
|
}
|
|
735
|
+
const assetLoadSettled = /*#__PURE__*/Promise.resolve();
|
|
736
|
+
function trackAssetLoad(entry, adopted) {
|
|
737
|
+
if (entry.loadPromise) return;
|
|
738
|
+
const el = entry.element;
|
|
739
|
+
let settled = el.sheet != null;
|
|
740
|
+
if (!settled && adopted && typeof performance !== "undefined" && performance.getEntriesByName) {
|
|
741
|
+
settled = performance.getEntriesByName(el.href).length > 0;
|
|
742
|
+
}
|
|
743
|
+
if (settled) {
|
|
744
|
+
entry.loadState = "loaded";
|
|
745
|
+
entry.loadPromise = assetLoadSettled;
|
|
746
|
+
return;
|
|
747
|
+
}
|
|
748
|
+
entry.loadState = "pending";
|
|
749
|
+
entry.loadPromise = new Promise(resolve => {
|
|
750
|
+
const settle = state => {
|
|
751
|
+
entry.loadState = state;
|
|
752
|
+
resolve();
|
|
753
|
+
};
|
|
754
|
+
el.addEventListener("load", () => settle("loaded"), {
|
|
755
|
+
once: true
|
|
756
|
+
});
|
|
757
|
+
el.addEventListener("error", () => settle("errored"), {
|
|
758
|
+
once: true
|
|
759
|
+
});
|
|
760
|
+
});
|
|
761
|
+
}
|
|
762
|
+
function warmAsset(descriptor) {
|
|
763
|
+
if (descriptor.policy === "exclusive" || descriptor.type === "inline-style") return;
|
|
764
|
+
const key = assetEntryKey(descriptor);
|
|
765
|
+
let entry = assetRegistry.get(key);
|
|
766
|
+
if (!entry) {
|
|
767
|
+
entry = {
|
|
768
|
+
count: 0,
|
|
769
|
+
element: null,
|
|
770
|
+
timer: null
|
|
771
|
+
};
|
|
772
|
+
assetRegistry.set(key, entry);
|
|
773
|
+
}
|
|
774
|
+
let adopted = true;
|
|
775
|
+
if (!entry.element || !entry.element.isConnected) {
|
|
776
|
+
const rel = descriptor.type === "module" ? "modulepreload" : "stylesheet";
|
|
777
|
+
let el = findAssetElement(`link[rel="${rel}"]`, "href", descriptor.href);
|
|
778
|
+
if (!el && descriptor.type === "style") {
|
|
779
|
+
el = findAssetElement('link[rel="preload"][as="style"]', "href", descriptor.href);
|
|
780
|
+
}
|
|
781
|
+
if (!el) {
|
|
782
|
+
adopted = false;
|
|
783
|
+
el = document.createElement("link");
|
|
784
|
+
if (descriptor.type === "style") {
|
|
785
|
+
el.setAttribute("rel", "preload");
|
|
786
|
+
el.setAttribute("as", "style");
|
|
787
|
+
} else {
|
|
788
|
+
el.setAttribute("rel", "modulepreload");
|
|
789
|
+
}
|
|
790
|
+
el.setAttribute("href", descriptor.href);
|
|
791
|
+
if (!document.body) el.setAttribute("blocking", "render");
|
|
792
|
+
}
|
|
793
|
+
if (descriptor.attrs) setAssetAttrs(el, descriptor.attrs);
|
|
794
|
+
if (!el.isConnected) document.head.appendChild(el);
|
|
795
|
+
entry.element = el;
|
|
796
|
+
entry.loadState = undefined;
|
|
797
|
+
entry.loadPromise = undefined;
|
|
798
|
+
}
|
|
799
|
+
if (descriptor.type === "style") trackAssetLoad(entry, adopted);
|
|
800
|
+
return entry;
|
|
801
|
+
}
|
|
683
802
|
function acquireAsset(descriptor) {
|
|
684
803
|
const key = assetEntryKey(descriptor);
|
|
685
804
|
let entry = assetRegistry.get(key);
|
|
@@ -726,7 +845,12 @@ function acquireAsset(descriptor) {
|
|
|
726
845
|
entry.timer = null;
|
|
727
846
|
}
|
|
728
847
|
entry.count++;
|
|
729
|
-
if (!entry.element || !entry.element.isConnected)
|
|
848
|
+
if (!entry.element || !entry.element.isConnected) {
|
|
849
|
+
entry.element = mountAssetElement(descriptor);
|
|
850
|
+
} else if (descriptor.type === "style" && entry.element.getAttribute("rel") === "preload") {
|
|
851
|
+
entry.element.removeAttribute("as");
|
|
852
|
+
entry.element.setAttribute("rel", "stylesheet");
|
|
853
|
+
}
|
|
730
854
|
let released = false;
|
|
731
855
|
return () => {
|
|
732
856
|
if (released) return;
|
|
@@ -838,22 +962,26 @@ function flushHeadRegistry() {
|
|
|
838
962
|
headOwned.set(identity, els);
|
|
839
963
|
}
|
|
840
964
|
}
|
|
841
|
-
function
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
}
|
|
845
|
-
const el = document.createElement(t.tag);
|
|
846
|
-
for (const name in t.props) {
|
|
965
|
+
function createHeadElement(tag, props) {
|
|
966
|
+
const el = document.createElement(tag);
|
|
967
|
+
for (const name in props) {
|
|
847
968
|
if (name === "children" || name === "ref" || name.slice(0, 2) === "on") continue;
|
|
848
969
|
if (!HEAD_ATTR_NAME.test(name)) {
|
|
849
970
|
console.warn(`useHead: ignoring invalid attribute name "${name}"`);
|
|
850
971
|
continue;
|
|
851
972
|
}
|
|
852
|
-
const v =
|
|
973
|
+
const v = props[name];
|
|
853
974
|
if (v == null || v === false) continue;
|
|
854
975
|
el.setAttribute(name, v === true ? "" : String(v));
|
|
855
976
|
}
|
|
856
|
-
if (
|
|
977
|
+
if (props.children != null) el.textContent = String(props.children);
|
|
978
|
+
return el;
|
|
979
|
+
}
|
|
980
|
+
function renderHeadElement(t, identity, existing) {
|
|
981
|
+
for (let i = 0; i < existing.length; i++) {
|
|
982
|
+
if (headElementMatches(existing[i], t)) return existing.splice(i, 1)[0];
|
|
983
|
+
}
|
|
984
|
+
const el = createHeadElement(t.tag, t.props);
|
|
857
985
|
el.setAttribute("data-dh", identity);
|
|
858
986
|
document.head.appendChild(el);
|
|
859
987
|
return el;
|
|
@@ -871,48 +999,39 @@ function headElementMatches(el, t) {
|
|
|
871
999
|
const children = t.props.children;
|
|
872
1000
|
return (children == null ? "" : String(children)) === el.textContent;
|
|
873
1001
|
}
|
|
874
|
-
function
|
|
875
|
-
if (tag === "link" && (props.rel === "stylesheet" || props.rel === "modulepreload")) {
|
|
876
|
-
const descriptor = {
|
|
877
|
-
type: props.rel === "stylesheet" ? "style" : "module",
|
|
878
|
-
href: props.href
|
|
879
|
-
};
|
|
880
|
-
let attrs = null;
|
|
881
|
-
for (const name in props) {
|
|
882
|
-
if (name === "rel" || name === "href") continue;
|
|
883
|
-
if (!HEAD_ATTR_NAME.test(name)) continue;
|
|
884
|
-
const v = props[name];
|
|
885
|
-
if (v == null || v === false) continue;
|
|
886
|
-
(attrs || (attrs = {}))[name] = v === true ? "" : String(v);
|
|
887
|
-
}
|
|
888
|
-
if (attrs) descriptor.attrs = attrs;
|
|
889
|
-
return acquireAsset(descriptor);
|
|
890
|
-
}
|
|
1002
|
+
function mountHeadResource(tag, props) {
|
|
891
1003
|
const identity = resourceIdentity(tag, props);
|
|
892
|
-
if (headMountedResources.has(identity)) return
|
|
1004
|
+
if (headMountedResources.has(identity)) return;
|
|
893
1005
|
headMountedResources.add(identity);
|
|
894
1006
|
const url = props.href || props.src;
|
|
895
1007
|
let el = null;
|
|
896
1008
|
if (url != null) {
|
|
897
1009
|
if (tag === "link") el = findAssetElement(`link[rel="${props.rel}"]`, "href", url);else if (tag === "script") el = findAssetElement("script[src]", "src", url);else el = findAssetElement("style[href]", "href", url);
|
|
898
1010
|
}
|
|
899
|
-
if (!el)
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
1011
|
+
if (!el) document.head.appendChild(createHeadElement(tag, props));
|
|
1012
|
+
}
|
|
1013
|
+
function gateHeadResource(props) {
|
|
1014
|
+
const descriptor = {
|
|
1015
|
+
type: props.rel === "stylesheet" ? "style" : "module",
|
|
1016
|
+
href: props.href
|
|
1017
|
+
};
|
|
1018
|
+
let gateable = props.rel === "stylesheet" && props.href != null;
|
|
1019
|
+
let attrs = null;
|
|
1020
|
+
for (const name in props) {
|
|
1021
|
+
if (name === "rel" || name === "href") continue;
|
|
1022
|
+
if (!STYLESHEET_FETCH_META.has(name)) gateable = false;
|
|
1023
|
+
if (!HEAD_ATTR_NAME.test(name)) continue;
|
|
1024
|
+
const v = props[name];
|
|
1025
|
+
if (v == null || v === false) continue;
|
|
1026
|
+
(attrs || (attrs = {}))[name] = v === true ? "" : String(v);
|
|
910
1027
|
}
|
|
911
|
-
|
|
1028
|
+
if (attrs) descriptor.attrs = attrs;
|
|
1029
|
+
effect(() => {
|
|
1030
|
+
const entry = warmAsset(descriptor);
|
|
1031
|
+
if (gateable && entry.loadState === "pending" && typeof waitAsset === "function") waitAsset(entry.loadPromise);
|
|
1032
|
+
}, () => acquireAsset(descriptor));
|
|
912
1033
|
}
|
|
913
|
-
function noopFn() {}
|
|
914
1034
|
function useHead(tags) {
|
|
915
|
-
const list = Array.isArray(tags) ? tags : [tags];
|
|
916
1035
|
initHeadRegistry();
|
|
917
1036
|
const reg = {
|
|
918
1037
|
seq: -1,
|
|
@@ -920,6 +1039,8 @@ function useHead(tags) {
|
|
|
920
1039
|
};
|
|
921
1040
|
const uid = ++headUid;
|
|
922
1041
|
effect(() => {
|
|
1042
|
+
let list = typeof tags === "function" ? tags() : tags;
|
|
1043
|
+
if (!Array.isArray(list)) list = [list];
|
|
923
1044
|
const replaceable = [];
|
|
924
1045
|
const resources = [];
|
|
925
1046
|
for (let i = 0; i < list.length; i++) {
|
|
@@ -933,10 +1054,16 @@ function useHead(tags) {
|
|
|
933
1054
|
rel: cls.rel
|
|
934
1055
|
} : undefined);
|
|
935
1056
|
if (cls.resource) {
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
1057
|
+
if (desc.tag === "link" && (props.rel === "stylesheet" || props.rel === "modulepreload")) {
|
|
1058
|
+
gateHeadResource(props);
|
|
1059
|
+
} else if (desc.tag === "link") {
|
|
1060
|
+
mountHeadResource(desc.tag, props);
|
|
1061
|
+
} else {
|
|
1062
|
+
resources.push({
|
|
1063
|
+
tag: desc.tag,
|
|
1064
|
+
props
|
|
1065
|
+
});
|
|
1066
|
+
}
|
|
940
1067
|
} else {
|
|
941
1068
|
const key = evalHeadValue(desc.key);
|
|
942
1069
|
replaceable.push({
|
|
@@ -951,9 +1078,8 @@ function useHead(tags) {
|
|
|
951
1078
|
resources
|
|
952
1079
|
};
|
|
953
1080
|
}, evaluated => {
|
|
954
|
-
const releases = [];
|
|
955
1081
|
for (let i = 0; i < evaluated.resources.length; i++) {
|
|
956
|
-
|
|
1082
|
+
mountHeadResource(evaluated.resources[i].tag, evaluated.resources[i].props);
|
|
957
1083
|
}
|
|
958
1084
|
reg.tags = evaluated.replaceable;
|
|
959
1085
|
if (reg.seq < 0) reg.seq = ++headSeq;
|
|
@@ -962,7 +1088,6 @@ function useHead(tags) {
|
|
|
962
1088
|
return () => {
|
|
963
1089
|
const idx = headRegistrations.indexOf(reg);
|
|
964
1090
|
if (idx > -1) headRegistrations.splice(idx, 1);
|
|
965
|
-
for (let i = 0; i < releases.length; i++) releases[i]();
|
|
966
1091
|
scheduleHeadApply();
|
|
967
1092
|
};
|
|
968
1093
|
});
|
|
@@ -1450,7 +1575,13 @@ function gatherHydratable(element, root) {
|
|
|
1450
1575
|
for (let i = 0; i < templates.length; i++) {
|
|
1451
1576
|
const node = templates[i];
|
|
1452
1577
|
const key = node.getAttribute("_hk");
|
|
1453
|
-
if (
|
|
1578
|
+
if (root) {
|
|
1579
|
+
if (!key.startsWith(root)) continue;
|
|
1580
|
+
} else {
|
|
1581
|
+
const frame = node.closest("[data-fid]");
|
|
1582
|
+
if (frame && frame !== element && element.contains(frame)) continue;
|
|
1583
|
+
}
|
|
1584
|
+
if (!solidJs.sharedConfig.registry.has(key)) solidJs.sharedConfig.registry.set(key, node);
|
|
1454
1585
|
}
|
|
1455
1586
|
}
|
|
1456
1587
|
function getHydrationKey() {
|
|
@@ -1466,20 +1597,37 @@ function throwInBrowser(func) {
|
|
|
1466
1597
|
function renderToString(fn, options) {
|
|
1467
1598
|
throwInBrowser(renderToString);
|
|
1468
1599
|
}
|
|
1469
|
-
function renderToStringAsync(fn, options) {
|
|
1470
|
-
throwInBrowser(renderToStringAsync);
|
|
1471
|
-
}
|
|
1472
1600
|
function renderToStream(fn, options) {
|
|
1473
1601
|
throwInBrowser(renderToStream);
|
|
1474
1602
|
}
|
|
1603
|
+
function createResponseStub() {
|
|
1604
|
+
throwInBrowser(createResponseStub);
|
|
1605
|
+
}
|
|
1606
|
+
function createRequestEvent(request, init) {
|
|
1607
|
+
throwInBrowser(createRequestEvent);
|
|
1608
|
+
}
|
|
1609
|
+
function getExpectedRedirectStatus(response) {
|
|
1610
|
+
throwInBrowser(getExpectedRedirectStatus);
|
|
1611
|
+
}
|
|
1612
|
+
function createSSRResponse() {
|
|
1613
|
+
throwInBrowser(createSSRResponse);
|
|
1614
|
+
}
|
|
1615
|
+
function commitEventResponse(response, event) {
|
|
1616
|
+
throwInBrowser(commitEventResponse);
|
|
1617
|
+
}
|
|
1618
|
+
function composeMiddleware(middlewares) {
|
|
1619
|
+
throwInBrowser(composeMiddleware);
|
|
1620
|
+
}
|
|
1475
1621
|
function ssr(template, ...nodes) {}
|
|
1476
1622
|
function ssrElement(name, props, children, needsId) {}
|
|
1477
|
-
function
|
|
1623
|
+
function ssrClassName(value) {}
|
|
1478
1624
|
function ssrStyle(value) {}
|
|
1625
|
+
function ssrStyleProperty(name, value) {}
|
|
1479
1626
|
function ssrAttribute(key, value) {}
|
|
1627
|
+
function ssrGroup(fn, n) {}
|
|
1480
1628
|
function ssrHydrationKey() {}
|
|
1481
|
-
function resolveSSRNode(node) {}
|
|
1482
|
-
function escape(
|
|
1629
|
+
function resolveSSRNode(node, result, top) {}
|
|
1630
|
+
function escape(s, attr) {}
|
|
1483
1631
|
|
|
1484
1632
|
const ENVELOPE = Symbol.for("solid.ResponseEnvelope");
|
|
1485
1633
|
class ResponseEnvelope {
|
|
@@ -1496,13 +1644,38 @@ const HREF = Symbol.for("solid.Href");
|
|
|
1496
1644
|
function isHref(value) {
|
|
1497
1645
|
return !!(value && (typeof value === "object" || typeof value === "function") && value[HREF]);
|
|
1498
1646
|
}
|
|
1647
|
+
const SAFE_ERROR = Symbol.for("solid.SafeError");
|
|
1648
|
+
function markSafeError(error) {
|
|
1649
|
+
if (error && (typeof error === "object" || typeof error === "function")) {
|
|
1650
|
+
Object.defineProperty(error, SAFE_ERROR, {
|
|
1651
|
+
value: true,
|
|
1652
|
+
enumerable: false,
|
|
1653
|
+
configurable: true
|
|
1654
|
+
});
|
|
1655
|
+
}
|
|
1656
|
+
return error;
|
|
1657
|
+
}
|
|
1658
|
+
function isSafeError(value) {
|
|
1659
|
+
return !!(value && (typeof value === "object" || typeof value === "function") && value[SAFE_ERROR]);
|
|
1660
|
+
}
|
|
1499
1661
|
const REVALIDATE_HEADER = "X-Revalidate";
|
|
1500
1662
|
function initWithRevalidate(init) {
|
|
1501
1663
|
const {
|
|
1502
1664
|
revalidate,
|
|
1503
1665
|
...responseInit
|
|
1504
1666
|
} = init;
|
|
1505
|
-
|
|
1667
|
+
let headers;
|
|
1668
|
+
if (responseInit.headers && responseInit.headers.getSetCookie) {
|
|
1669
|
+
headers = new Headers();
|
|
1670
|
+
responseInit.headers.forEach((value, key) => {
|
|
1671
|
+
if (key !== "set-cookie") headers.append(key, value);
|
|
1672
|
+
});
|
|
1673
|
+
for (const cookie of responseInit.headers.getSetCookie()) {
|
|
1674
|
+
headers.append("Set-Cookie", cookie);
|
|
1675
|
+
}
|
|
1676
|
+
} else {
|
|
1677
|
+
headers = new Headers(responseInit.headers);
|
|
1678
|
+
}
|
|
1506
1679
|
revalidate !== undefined && headers.set(REVALIDATE_HEADER, revalidate.toString());
|
|
1507
1680
|
return {
|
|
1508
1681
|
responseInit,
|
|
@@ -1622,19 +1795,31 @@ function portalImpl(props) {
|
|
|
1622
1795
|
});
|
|
1623
1796
|
return treeMarker;
|
|
1624
1797
|
}
|
|
1625
|
-
const
|
|
1626
|
-
function
|
|
1627
|
-
|
|
1628
|
-
return handoff && handoff.take(prev) ? prev : next;
|
|
1798
|
+
const COMPONENT_BINDING = Symbol.for("dom-expressions.component-binding");
|
|
1799
|
+
function bindingOf(value) {
|
|
1800
|
+
return value !== null && (typeof value === "function" || typeof value === "object") && value[COMPONENT_BINDING] || undefined;
|
|
1629
1801
|
}
|
|
1630
1802
|
function dynamic(source) {
|
|
1631
1803
|
let latest = 0;
|
|
1804
|
+
const sites = new Set();
|
|
1805
|
+
let deliveredAddress;
|
|
1806
|
+
const resolveBinding = (next, prev) => {
|
|
1807
|
+
const binding = bindingOf(next);
|
|
1808
|
+
if (!binding) return next;
|
|
1809
|
+
deliveredAddress = binding.address;
|
|
1810
|
+
const prevBinding = bindingOf(prev);
|
|
1811
|
+
if (prevBinding && prevBinding.component === binding.component) {
|
|
1812
|
+
for (const deliver of sites) deliver(binding.address);
|
|
1813
|
+
return prev;
|
|
1814
|
+
}
|
|
1815
|
+
return next;
|
|
1816
|
+
};
|
|
1632
1817
|
const cached = solidJs.createMemo(prev => {
|
|
1633
1818
|
const next = source();
|
|
1634
|
-
if (!next || typeof next.then !== "function") return
|
|
1819
|
+
if (!next || typeof next.then !== "function") return resolveBinding(next, prev);
|
|
1635
1820
|
const token = ++latest;
|
|
1636
1821
|
return {
|
|
1637
|
-
then: (onFulfilled, onRejected) => next.then(resolved => onFulfilled(token === latest ?
|
|
1822
|
+
then: (onFulfilled, onRejected) => next.then(resolved => onFulfilled(token === latest ? resolveBinding(resolved, prev) : resolved), onRejected)
|
|
1638
1823
|
};
|
|
1639
1824
|
}, {
|
|
1640
1825
|
lazy: true
|
|
@@ -1644,10 +1829,19 @@ function dynamic(source) {
|
|
|
1644
1829
|
const component = cached();
|
|
1645
1830
|
switch (typeof component) {
|
|
1646
1831
|
case "function":
|
|
1647
|
-
|
|
1648
|
-
|
|
1649
|
-
|
|
1650
|
-
|
|
1832
|
+
{
|
|
1833
|
+
Object.assign(component, {
|
|
1834
|
+
[solidJs.$DEVCOMP]: true
|
|
1835
|
+
});
|
|
1836
|
+
const binding = bindingOf(component);
|
|
1837
|
+
if (binding) {
|
|
1838
|
+
const [address, setAddress] = solidJs.createSignal(deliveredAddress ?? binding.address);
|
|
1839
|
+
sites.add(setAddress);
|
|
1840
|
+
solidJs.onCleanup(() => sites.delete(setAddress));
|
|
1841
|
+
return solidJs.untrack(() => binding.component(props, address));
|
|
1842
|
+
}
|
|
1843
|
+
return solidJs.untrack(() => component(props));
|
|
1844
|
+
}
|
|
1651
1845
|
case "string":
|
|
1652
1846
|
const el = solidJs.sharedConfig.hydrating ? getNextElement() : createElement(component, solidJs.untrack(() => props.is));
|
|
1653
1847
|
spread(el, props);
|
|
@@ -1684,9 +1878,7 @@ _moduleUrl) {
|
|
|
1684
1878
|
if ((Comp = solidJs.untrack(comp)) && !solidJs.sharedConfig.hydrating) return Comp(rest);
|
|
1685
1879
|
const [mounted, setMounted] = solidJs.createSignal(!solidJs.sharedConfig.hydrating);
|
|
1686
1880
|
const gate = solidJs.createMemo(() => (Comp = comp(), m = mounted(), solidJs.untrack(() => Comp && m ? Comp(rest) : props.fallback)));
|
|
1687
|
-
solidJs.
|
|
1688
|
-
setMounted(true);
|
|
1689
|
-
});
|
|
1881
|
+
solidJs.sharedConfig.onHydrationEnd(() => setMounted(true));
|
|
1690
1882
|
return gate;
|
|
1691
1883
|
};
|
|
1692
1884
|
}
|
|
@@ -1745,7 +1937,6 @@ Object.defineProperty(exports, "untrack", {
|
|
|
1745
1937
|
enumerable: true,
|
|
1746
1938
|
get: function () { return solidJs.untrack; }
|
|
1747
1939
|
});
|
|
1748
|
-
exports.Assets = voidFn;
|
|
1749
1940
|
exports.ChildProperties = ChildProperties;
|
|
1750
1941
|
exports.DOMElements = DOMElements;
|
|
1751
1942
|
exports.DOMWithState = DOMWithState;
|
|
@@ -1760,6 +1951,7 @@ exports.REVALIDATE_HEADER = REVALIDATE_HEADER;
|
|
|
1760
1951
|
exports.RawTextElements = RawTextElements;
|
|
1761
1952
|
exports.RequestContext = RequestContext;
|
|
1762
1953
|
exports.ResponseEnvelope = ResponseEnvelope;
|
|
1954
|
+
exports.SAFE_ERROR = SAFE_ERROR;
|
|
1763
1955
|
exports.SVGElements = SVGElements;
|
|
1764
1956
|
exports.VoidElements = VoidElements;
|
|
1765
1957
|
exports.acquireAsset = acquireAsset;
|
|
@@ -1770,14 +1962,19 @@ exports.claimElement = claimElement;
|
|
|
1770
1962
|
exports.claimElementTree = claimElementTree;
|
|
1771
1963
|
exports.className = className;
|
|
1772
1964
|
exports.clientOnly = clientOnly;
|
|
1965
|
+
exports.commitEventResponse = commitEventResponse;
|
|
1966
|
+
exports.composeMiddleware = composeMiddleware;
|
|
1967
|
+
exports.createRequestEvent = createRequestEvent;
|
|
1968
|
+
exports.createResponseStub = createResponseStub;
|
|
1969
|
+
exports.createSSRResponse = createSSRResponse;
|
|
1773
1970
|
exports.delegateEvents = delegateEvents;
|
|
1774
1971
|
exports.dynamic = dynamic;
|
|
1775
1972
|
exports.dynamicProperty = dynamicProperty;
|
|
1776
1973
|
exports.effect = effect;
|
|
1777
1974
|
exports.escape = escape;
|
|
1778
1975
|
exports.generateHydrationScript = voidFn;
|
|
1779
|
-
exports.getAssets = voidFn;
|
|
1780
1976
|
exports.getDelegatedRoot = getDelegatedRoot;
|
|
1977
|
+
exports.getExpectedRedirectStatus = getExpectedRedirectStatus;
|
|
1781
1978
|
exports.getFirstChild = getFirstChild;
|
|
1782
1979
|
exports.getHydrationKey = getHydrationKey;
|
|
1783
1980
|
exports.getNextElement = getNextElement;
|
|
@@ -1793,9 +1990,12 @@ exports.installHydrationRuntime = installHydrationRuntime;
|
|
|
1793
1990
|
exports.isDev = isDev;
|
|
1794
1991
|
exports.isHref = isHref;
|
|
1795
1992
|
exports.isResponseEnvelope = isResponseEnvelope;
|
|
1993
|
+
exports.isSafeError = isSafeError;
|
|
1796
1994
|
exports.isServer = isServer;
|
|
1995
|
+
exports.markSafeError = markSafeError;
|
|
1797
1996
|
exports.memo = memo;
|
|
1798
1997
|
exports.mergeProps = mergeProps;
|
|
1998
|
+
exports.parseCookieHeader = parseCookieHeader;
|
|
1799
1999
|
exports.redirect = redirect;
|
|
1800
2000
|
exports.ref = ref;
|
|
1801
2001
|
exports.registerDelegatedContainer = registerDelegatedContainer;
|
|
@@ -1805,11 +2005,11 @@ exports.reload = reload;
|
|
|
1805
2005
|
exports.render = render;
|
|
1806
2006
|
exports.renderToStream = renderToStream;
|
|
1807
2007
|
exports.renderToString = renderToString;
|
|
1808
|
-
exports.renderToStringAsync = renderToStringAsync;
|
|
1809
2008
|
exports.resolveSSRNode = resolveSSRNode;
|
|
1810
2009
|
exports.respond = respond;
|
|
1811
2010
|
exports.runHydrationEvents = runHydrationEvents;
|
|
1812
2011
|
exports.scope = scope;
|
|
2012
|
+
exports.serializeCookie = serializeCookie;
|
|
1813
2013
|
exports.setAttribute = setAttribute;
|
|
1814
2014
|
exports.setAttributeNS = setAttributeNS;
|
|
1815
2015
|
exports.setProperty = setProperty;
|
|
@@ -1817,13 +2017,15 @@ exports.setStyleProperty = setStyleProperty;
|
|
|
1817
2017
|
exports.spread = spread;
|
|
1818
2018
|
exports.ssr = ssr;
|
|
1819
2019
|
exports.ssrAttribute = ssrAttribute;
|
|
1820
|
-
exports.
|
|
2020
|
+
exports.ssrClassName = ssrClassName;
|
|
1821
2021
|
exports.ssrElement = ssrElement;
|
|
2022
|
+
exports.ssrGroup = ssrGroup;
|
|
1822
2023
|
exports.ssrHydrationKey = ssrHydrationKey;
|
|
1823
2024
|
exports.ssrStyle = ssrStyle;
|
|
2025
|
+
exports.ssrStyleProperty = ssrStyleProperty;
|
|
1824
2026
|
exports.style = style;
|
|
1825
2027
|
exports.template = template;
|
|
1826
2028
|
exports.unregisterDelegatedContainer = unregisterDelegatedContainer;
|
|
1827
2029
|
exports.unregisterDelegatedRoot = unregisterDelegatedRoot;
|
|
1828
|
-
exports.useAssets = voidFn;
|
|
1829
2030
|
exports.useHead = useHead;
|
|
2031
|
+
exports.warmAsset = warmAsset;
|