@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/dist/web.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) {
|
|
@@ -252,6 +266,43 @@ function resolveHead(groups) {
|
|
|
252
266
|
return winners;
|
|
253
267
|
}
|
|
254
268
|
|
|
269
|
+
function parseCookieHeader(header) {
|
|
270
|
+
const cookies = {};
|
|
271
|
+
if (!header) return cookies;
|
|
272
|
+
for (const part of header.split(";")) {
|
|
273
|
+
const eq = part.indexOf("=");
|
|
274
|
+
if (eq < 0) continue;
|
|
275
|
+
const name = decodeSafe(part.slice(0, eq).trim());
|
|
276
|
+
let value = part.slice(eq + 1).trim();
|
|
277
|
+
if (value.length > 1 && value[0] === '"' && value[value.length - 1] === '"') {
|
|
278
|
+
value = value.slice(1, -1);
|
|
279
|
+
}
|
|
280
|
+
cookies[name] = decodeSafe(value);
|
|
281
|
+
}
|
|
282
|
+
return cookies;
|
|
283
|
+
}
|
|
284
|
+
function decodeSafe(text) {
|
|
285
|
+
try {
|
|
286
|
+
return decodeURIComponent(text);
|
|
287
|
+
} catch {
|
|
288
|
+
return text;
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
function serializeCookie(name, value, options = {}) {
|
|
292
|
+
let cookie = `${encodeURIComponent(name)}=${encodeURIComponent(value)}`;
|
|
293
|
+
cookie += `; Path=${options.path === undefined ? "/" : options.path}`;
|
|
294
|
+
if (options.domain) cookie += `; Domain=${options.domain}`;
|
|
295
|
+
if (options.maxAge !== undefined) cookie += `; Max-Age=${Math.trunc(options.maxAge)}`;
|
|
296
|
+
if (options.expires) cookie += `; Expires=${options.expires.toUTCString()}`;
|
|
297
|
+
if (options.httpOnly) cookie += "; HttpOnly";
|
|
298
|
+
if (options.secure) cookie += "; Secure";
|
|
299
|
+
if (options.sameSite) {
|
|
300
|
+
const sameSite = options.sameSite.toLowerCase();
|
|
301
|
+
cookie += `; SameSite=${sameSite === "none" ? "None" : sameSite === "strict" ? "Strict" : "Lax"}`;
|
|
302
|
+
}
|
|
303
|
+
return cookie;
|
|
304
|
+
}
|
|
305
|
+
|
|
255
306
|
const $$EVENT_OWNER = "_$DX_EVENT_OWNER";
|
|
256
307
|
const INNER_OWNED = {};
|
|
257
308
|
const delegatedEvents = new Set();
|
|
@@ -650,6 +701,9 @@ function findAssetElement(selector, attr, value) {
|
|
|
650
701
|
}
|
|
651
702
|
return null;
|
|
652
703
|
}
|
|
704
|
+
function setAssetAttrs(el, attrs) {
|
|
705
|
+
for (const name in attrs) el.setAttribute(name, attrs[name]);
|
|
706
|
+
}
|
|
653
707
|
function mountAssetElement(descriptor) {
|
|
654
708
|
let el;
|
|
655
709
|
if (descriptor.type === "inline-style") {
|
|
@@ -668,12 +722,77 @@ function mountAssetElement(descriptor) {
|
|
|
668
722
|
el.href = descriptor.href;
|
|
669
723
|
}
|
|
670
724
|
}
|
|
671
|
-
if (descriptor.attrs)
|
|
672
|
-
for (const name in descriptor.attrs) el.setAttribute(name, descriptor.attrs[name]);
|
|
673
|
-
}
|
|
725
|
+
if (descriptor.attrs) setAssetAttrs(el, descriptor.attrs);
|
|
674
726
|
if (!el.isConnected) document.head.appendChild(el);
|
|
675
727
|
return el;
|
|
676
728
|
}
|
|
729
|
+
const assetLoadSettled = /*#__PURE__*/Promise.resolve();
|
|
730
|
+
function trackAssetLoad(entry, adopted) {
|
|
731
|
+
if (entry.loadPromise) return;
|
|
732
|
+
const el = entry.element;
|
|
733
|
+
let settled = el.sheet != null;
|
|
734
|
+
if (!settled && adopted && typeof performance !== "undefined" && performance.getEntriesByName) {
|
|
735
|
+
settled = performance.getEntriesByName(el.href).length > 0;
|
|
736
|
+
}
|
|
737
|
+
if (settled) {
|
|
738
|
+
entry.loadState = "loaded";
|
|
739
|
+
entry.loadPromise = assetLoadSettled;
|
|
740
|
+
return;
|
|
741
|
+
}
|
|
742
|
+
entry.loadState = "pending";
|
|
743
|
+
entry.loadPromise = new Promise(resolve => {
|
|
744
|
+
const settle = state => {
|
|
745
|
+
entry.loadState = state;
|
|
746
|
+
resolve();
|
|
747
|
+
};
|
|
748
|
+
el.addEventListener("load", () => settle("loaded"), {
|
|
749
|
+
once: true
|
|
750
|
+
});
|
|
751
|
+
el.addEventListener("error", () => settle("errored"), {
|
|
752
|
+
once: true
|
|
753
|
+
});
|
|
754
|
+
});
|
|
755
|
+
}
|
|
756
|
+
function warmAsset(descriptor) {
|
|
757
|
+
if (descriptor.policy === "exclusive" || descriptor.type === "inline-style") return;
|
|
758
|
+
const key = assetEntryKey(descriptor);
|
|
759
|
+
let entry = assetRegistry.get(key);
|
|
760
|
+
if (!entry) {
|
|
761
|
+
entry = {
|
|
762
|
+
count: 0,
|
|
763
|
+
element: null,
|
|
764
|
+
timer: null
|
|
765
|
+
};
|
|
766
|
+
assetRegistry.set(key, entry);
|
|
767
|
+
}
|
|
768
|
+
let adopted = true;
|
|
769
|
+
if (!entry.element || !entry.element.isConnected) {
|
|
770
|
+
const rel = descriptor.type === "module" ? "modulepreload" : "stylesheet";
|
|
771
|
+
let el = findAssetElement(`link[rel="${rel}"]`, "href", descriptor.href);
|
|
772
|
+
if (!el && descriptor.type === "style") {
|
|
773
|
+
el = findAssetElement('link[rel="preload"][as="style"]', "href", descriptor.href);
|
|
774
|
+
}
|
|
775
|
+
if (!el) {
|
|
776
|
+
adopted = false;
|
|
777
|
+
el = document.createElement("link");
|
|
778
|
+
if (descriptor.type === "style") {
|
|
779
|
+
el.setAttribute("rel", "preload");
|
|
780
|
+
el.setAttribute("as", "style");
|
|
781
|
+
} else {
|
|
782
|
+
el.setAttribute("rel", "modulepreload");
|
|
783
|
+
}
|
|
784
|
+
el.setAttribute("href", descriptor.href);
|
|
785
|
+
if (!document.body) el.setAttribute("blocking", "render");
|
|
786
|
+
}
|
|
787
|
+
if (descriptor.attrs) setAssetAttrs(el, descriptor.attrs);
|
|
788
|
+
if (!el.isConnected) document.head.appendChild(el);
|
|
789
|
+
entry.element = el;
|
|
790
|
+
entry.loadState = undefined;
|
|
791
|
+
entry.loadPromise = undefined;
|
|
792
|
+
}
|
|
793
|
+
if (descriptor.type === "style") trackAssetLoad(entry, adopted);
|
|
794
|
+
return entry;
|
|
795
|
+
}
|
|
677
796
|
function acquireAsset(descriptor) {
|
|
678
797
|
const key = assetEntryKey(descriptor);
|
|
679
798
|
let entry = assetRegistry.get(key);
|
|
@@ -720,7 +839,12 @@ function acquireAsset(descriptor) {
|
|
|
720
839
|
entry.timer = null;
|
|
721
840
|
}
|
|
722
841
|
entry.count++;
|
|
723
|
-
if (!entry.element || !entry.element.isConnected)
|
|
842
|
+
if (!entry.element || !entry.element.isConnected) {
|
|
843
|
+
entry.element = mountAssetElement(descriptor);
|
|
844
|
+
} else if (descriptor.type === "style" && entry.element.getAttribute("rel") === "preload") {
|
|
845
|
+
entry.element.removeAttribute("as");
|
|
846
|
+
entry.element.setAttribute("rel", "stylesheet");
|
|
847
|
+
}
|
|
724
848
|
let released = false;
|
|
725
849
|
return () => {
|
|
726
850
|
if (released) return;
|
|
@@ -831,21 +955,25 @@ function flushHeadRegistry() {
|
|
|
831
955
|
headOwned.set(identity, els);
|
|
832
956
|
}
|
|
833
957
|
}
|
|
834
|
-
function
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
}
|
|
838
|
-
const el = document.createElement(t.tag);
|
|
839
|
-
for (const name in t.props) {
|
|
958
|
+
function createHeadElement(tag, props) {
|
|
959
|
+
const el = document.createElement(tag);
|
|
960
|
+
for (const name in props) {
|
|
840
961
|
if (name === "children" || name === "ref" || name.slice(0, 2) === "on") continue;
|
|
841
962
|
if (!HEAD_ATTR_NAME.test(name)) {
|
|
842
963
|
continue;
|
|
843
964
|
}
|
|
844
|
-
const v =
|
|
965
|
+
const v = props[name];
|
|
845
966
|
if (v == null || v === false) continue;
|
|
846
967
|
el.setAttribute(name, v === true ? "" : String(v));
|
|
847
968
|
}
|
|
848
|
-
if (
|
|
969
|
+
if (props.children != null) el.textContent = String(props.children);
|
|
970
|
+
return el;
|
|
971
|
+
}
|
|
972
|
+
function renderHeadElement(t, identity, existing) {
|
|
973
|
+
for (let i = 0; i < existing.length; i++) {
|
|
974
|
+
if (headElementMatches(existing[i], t)) return existing.splice(i, 1)[0];
|
|
975
|
+
}
|
|
976
|
+
const el = createHeadElement(t.tag, t.props);
|
|
849
977
|
el.setAttribute("data-dh", identity);
|
|
850
978
|
document.head.appendChild(el);
|
|
851
979
|
return el;
|
|
@@ -863,48 +991,39 @@ function headElementMatches(el, t) {
|
|
|
863
991
|
const children = t.props.children;
|
|
864
992
|
return (children == null ? "" : String(children)) === el.textContent;
|
|
865
993
|
}
|
|
866
|
-
function
|
|
867
|
-
if (tag === "link" && (props.rel === "stylesheet" || props.rel === "modulepreload")) {
|
|
868
|
-
const descriptor = {
|
|
869
|
-
type: props.rel === "stylesheet" ? "style" : "module",
|
|
870
|
-
href: props.href
|
|
871
|
-
};
|
|
872
|
-
let attrs = null;
|
|
873
|
-
for (const name in props) {
|
|
874
|
-
if (name === "rel" || name === "href") continue;
|
|
875
|
-
if (!HEAD_ATTR_NAME.test(name)) continue;
|
|
876
|
-
const v = props[name];
|
|
877
|
-
if (v == null || v === false) continue;
|
|
878
|
-
(attrs || (attrs = {}))[name] = v === true ? "" : String(v);
|
|
879
|
-
}
|
|
880
|
-
if (attrs) descriptor.attrs = attrs;
|
|
881
|
-
return acquireAsset(descriptor);
|
|
882
|
-
}
|
|
994
|
+
function mountHeadResource(tag, props) {
|
|
883
995
|
const identity = resourceIdentity(tag, props);
|
|
884
|
-
if (headMountedResources.has(identity)) return
|
|
996
|
+
if (headMountedResources.has(identity)) return;
|
|
885
997
|
headMountedResources.add(identity);
|
|
886
998
|
const url = props.href || props.src;
|
|
887
999
|
let el = null;
|
|
888
1000
|
if (url != null) {
|
|
889
1001
|
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);
|
|
890
1002
|
}
|
|
891
|
-
if (!el)
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
1003
|
+
if (!el) document.head.appendChild(createHeadElement(tag, props));
|
|
1004
|
+
}
|
|
1005
|
+
function gateHeadResource(props) {
|
|
1006
|
+
const descriptor = {
|
|
1007
|
+
type: props.rel === "stylesheet" ? "style" : "module",
|
|
1008
|
+
href: props.href
|
|
1009
|
+
};
|
|
1010
|
+
let gateable = props.rel === "stylesheet" && props.href != null;
|
|
1011
|
+
let attrs = null;
|
|
1012
|
+
for (const name in props) {
|
|
1013
|
+
if (name === "rel" || name === "href") continue;
|
|
1014
|
+
if (!STYLESHEET_FETCH_META.has(name)) gateable = false;
|
|
1015
|
+
if (!HEAD_ATTR_NAME.test(name)) continue;
|
|
1016
|
+
const v = props[name];
|
|
1017
|
+
if (v == null || v === false) continue;
|
|
1018
|
+
(attrs || (attrs = {}))[name] = v === true ? "" : String(v);
|
|
902
1019
|
}
|
|
903
|
-
|
|
1020
|
+
if (attrs) descriptor.attrs = attrs;
|
|
1021
|
+
effect(() => {
|
|
1022
|
+
const entry = warmAsset(descriptor);
|
|
1023
|
+
if (gateable && entry.loadState === "pending" && typeof waitAsset === "function") waitAsset(entry.loadPromise);
|
|
1024
|
+
}, () => acquireAsset(descriptor));
|
|
904
1025
|
}
|
|
905
|
-
function noopFn() {}
|
|
906
1026
|
function useHead(tags) {
|
|
907
|
-
const list = Array.isArray(tags) ? tags : [tags];
|
|
908
1027
|
initHeadRegistry();
|
|
909
1028
|
const reg = {
|
|
910
1029
|
seq: -1,
|
|
@@ -912,6 +1031,8 @@ function useHead(tags) {
|
|
|
912
1031
|
};
|
|
913
1032
|
const uid = ++headUid;
|
|
914
1033
|
effect(() => {
|
|
1034
|
+
let list = typeof tags === "function" ? tags() : tags;
|
|
1035
|
+
if (!Array.isArray(list)) list = [list];
|
|
915
1036
|
const replaceable = [];
|
|
916
1037
|
const resources = [];
|
|
917
1038
|
for (let i = 0; i < list.length; i++) {
|
|
@@ -924,10 +1045,16 @@ function useHead(tags) {
|
|
|
924
1045
|
rel: cls.rel
|
|
925
1046
|
} : undefined);
|
|
926
1047
|
if (cls.resource) {
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
1048
|
+
if (desc.tag === "link" && (props.rel === "stylesheet" || props.rel === "modulepreload")) {
|
|
1049
|
+
gateHeadResource(props);
|
|
1050
|
+
} else if (desc.tag === "link") {
|
|
1051
|
+
mountHeadResource(desc.tag, props);
|
|
1052
|
+
} else {
|
|
1053
|
+
resources.push({
|
|
1054
|
+
tag: desc.tag,
|
|
1055
|
+
props
|
|
1056
|
+
});
|
|
1057
|
+
}
|
|
931
1058
|
} else {
|
|
932
1059
|
const key = evalHeadValue(desc.key);
|
|
933
1060
|
replaceable.push({
|
|
@@ -942,9 +1069,8 @@ function useHead(tags) {
|
|
|
942
1069
|
resources
|
|
943
1070
|
};
|
|
944
1071
|
}, evaluated => {
|
|
945
|
-
const releases = [];
|
|
946
1072
|
for (let i = 0; i < evaluated.resources.length; i++) {
|
|
947
|
-
|
|
1073
|
+
mountHeadResource(evaluated.resources[i].tag, evaluated.resources[i].props);
|
|
948
1074
|
}
|
|
949
1075
|
reg.tags = evaluated.replaceable;
|
|
950
1076
|
if (reg.seq < 0) reg.seq = ++headSeq;
|
|
@@ -953,7 +1079,6 @@ function useHead(tags) {
|
|
|
953
1079
|
return () => {
|
|
954
1080
|
const idx = headRegistrations.indexOf(reg);
|
|
955
1081
|
if (idx > -1) headRegistrations.splice(idx, 1);
|
|
956
|
-
for (let i = 0; i < releases.length; i++) releases[i]();
|
|
957
1082
|
scheduleHeadApply();
|
|
958
1083
|
};
|
|
959
1084
|
});
|
|
@@ -1389,7 +1514,13 @@ function gatherHydratable(element, root) {
|
|
|
1389
1514
|
for (let i = 0; i < templates.length; i++) {
|
|
1390
1515
|
const node = templates[i];
|
|
1391
1516
|
const key = node.getAttribute("_hk");
|
|
1392
|
-
if (
|
|
1517
|
+
if (root) {
|
|
1518
|
+
if (!key.startsWith(root)) continue;
|
|
1519
|
+
} else {
|
|
1520
|
+
const frame = node.closest("[data-fid]");
|
|
1521
|
+
if (frame && frame !== element && element.contains(frame)) continue;
|
|
1522
|
+
}
|
|
1523
|
+
if (!solidJs.sharedConfig.registry.has(key)) solidJs.sharedConfig.registry.set(key, node);
|
|
1393
1524
|
}
|
|
1394
1525
|
}
|
|
1395
1526
|
function getHydrationKey() {
|
|
@@ -1405,20 +1536,37 @@ function throwInBrowser(func) {
|
|
|
1405
1536
|
function renderToString(fn, options) {
|
|
1406
1537
|
throwInBrowser(renderToString);
|
|
1407
1538
|
}
|
|
1408
|
-
function renderToStringAsync(fn, options) {
|
|
1409
|
-
throwInBrowser(renderToStringAsync);
|
|
1410
|
-
}
|
|
1411
1539
|
function renderToStream(fn, options) {
|
|
1412
1540
|
throwInBrowser(renderToStream);
|
|
1413
1541
|
}
|
|
1542
|
+
function createResponseStub() {
|
|
1543
|
+
throwInBrowser(createResponseStub);
|
|
1544
|
+
}
|
|
1545
|
+
function createRequestEvent(request, init) {
|
|
1546
|
+
throwInBrowser(createRequestEvent);
|
|
1547
|
+
}
|
|
1548
|
+
function getExpectedRedirectStatus(response) {
|
|
1549
|
+
throwInBrowser(getExpectedRedirectStatus);
|
|
1550
|
+
}
|
|
1551
|
+
function createSSRResponse() {
|
|
1552
|
+
throwInBrowser(createSSRResponse);
|
|
1553
|
+
}
|
|
1554
|
+
function commitEventResponse(response, event) {
|
|
1555
|
+
throwInBrowser(commitEventResponse);
|
|
1556
|
+
}
|
|
1557
|
+
function composeMiddleware(middlewares) {
|
|
1558
|
+
throwInBrowser(composeMiddleware);
|
|
1559
|
+
}
|
|
1414
1560
|
function ssr(template, ...nodes) {}
|
|
1415
1561
|
function ssrElement(name, props, children, needsId) {}
|
|
1416
|
-
function
|
|
1562
|
+
function ssrClassName(value) {}
|
|
1417
1563
|
function ssrStyle(value) {}
|
|
1564
|
+
function ssrStyleProperty(name, value) {}
|
|
1418
1565
|
function ssrAttribute(key, value) {}
|
|
1566
|
+
function ssrGroup(fn, n) {}
|
|
1419
1567
|
function ssrHydrationKey() {}
|
|
1420
|
-
function resolveSSRNode(node) {}
|
|
1421
|
-
function escape(
|
|
1568
|
+
function resolveSSRNode(node, result, top) {}
|
|
1569
|
+
function escape(s, attr) {}
|
|
1422
1570
|
|
|
1423
1571
|
const ENVELOPE = Symbol.for("solid.ResponseEnvelope");
|
|
1424
1572
|
class ResponseEnvelope {
|
|
@@ -1435,13 +1583,38 @@ const HREF = Symbol.for("solid.Href");
|
|
|
1435
1583
|
function isHref(value) {
|
|
1436
1584
|
return !!(value && (typeof value === "object" || typeof value === "function") && value[HREF]);
|
|
1437
1585
|
}
|
|
1586
|
+
const SAFE_ERROR = Symbol.for("solid.SafeError");
|
|
1587
|
+
function markSafeError(error) {
|
|
1588
|
+
if (error && (typeof error === "object" || typeof error === "function")) {
|
|
1589
|
+
Object.defineProperty(error, SAFE_ERROR, {
|
|
1590
|
+
value: true,
|
|
1591
|
+
enumerable: false,
|
|
1592
|
+
configurable: true
|
|
1593
|
+
});
|
|
1594
|
+
}
|
|
1595
|
+
return error;
|
|
1596
|
+
}
|
|
1597
|
+
function isSafeError(value) {
|
|
1598
|
+
return !!(value && (typeof value === "object" || typeof value === "function") && value[SAFE_ERROR]);
|
|
1599
|
+
}
|
|
1438
1600
|
const REVALIDATE_HEADER = "X-Revalidate";
|
|
1439
1601
|
function initWithRevalidate(init) {
|
|
1440
1602
|
const {
|
|
1441
1603
|
revalidate,
|
|
1442
1604
|
...responseInit
|
|
1443
1605
|
} = init;
|
|
1444
|
-
|
|
1606
|
+
let headers;
|
|
1607
|
+
if (responseInit.headers && responseInit.headers.getSetCookie) {
|
|
1608
|
+
headers = new Headers();
|
|
1609
|
+
responseInit.headers.forEach((value, key) => {
|
|
1610
|
+
if (key !== "set-cookie") headers.append(key, value);
|
|
1611
|
+
});
|
|
1612
|
+
for (const cookie of responseInit.headers.getSetCookie()) {
|
|
1613
|
+
headers.append("Set-Cookie", cookie);
|
|
1614
|
+
}
|
|
1615
|
+
} else {
|
|
1616
|
+
headers = new Headers(responseInit.headers);
|
|
1617
|
+
}
|
|
1445
1618
|
revalidate !== undefined && headers.set(REVALIDATE_HEADER, revalidate.toString());
|
|
1446
1619
|
return {
|
|
1447
1620
|
responseInit,
|
|
@@ -1559,19 +1732,31 @@ function portalImpl(props) {
|
|
|
1559
1732
|
});
|
|
1560
1733
|
return treeMarker;
|
|
1561
1734
|
}
|
|
1562
|
-
const
|
|
1563
|
-
function
|
|
1564
|
-
|
|
1565
|
-
return handoff && handoff.take(prev) ? prev : next;
|
|
1735
|
+
const COMPONENT_BINDING = Symbol.for("dom-expressions.component-binding");
|
|
1736
|
+
function bindingOf(value) {
|
|
1737
|
+
return value !== null && (typeof value === "function" || typeof value === "object") && value[COMPONENT_BINDING] || undefined;
|
|
1566
1738
|
}
|
|
1567
1739
|
function dynamic(source) {
|
|
1568
1740
|
let latest = 0;
|
|
1741
|
+
const sites = new Set();
|
|
1742
|
+
let deliveredAddress;
|
|
1743
|
+
const resolveBinding = (next, prev) => {
|
|
1744
|
+
const binding = bindingOf(next);
|
|
1745
|
+
if (!binding) return next;
|
|
1746
|
+
deliveredAddress = binding.address;
|
|
1747
|
+
const prevBinding = bindingOf(prev);
|
|
1748
|
+
if (prevBinding && prevBinding.component === binding.component) {
|
|
1749
|
+
for (const deliver of sites) deliver(binding.address);
|
|
1750
|
+
return prev;
|
|
1751
|
+
}
|
|
1752
|
+
return next;
|
|
1753
|
+
};
|
|
1569
1754
|
const cached = solidJs.createMemo(prev => {
|
|
1570
1755
|
const next = source();
|
|
1571
|
-
if (!next || typeof next.then !== "function") return
|
|
1756
|
+
if (!next || typeof next.then !== "function") return resolveBinding(next, prev);
|
|
1572
1757
|
const token = ++latest;
|
|
1573
1758
|
return {
|
|
1574
|
-
then: (onFulfilled, onRejected) => next.then(resolved => onFulfilled(token === latest ?
|
|
1759
|
+
then: (onFulfilled, onRejected) => next.then(resolved => onFulfilled(token === latest ? resolveBinding(resolved, prev) : resolved), onRejected)
|
|
1575
1760
|
};
|
|
1576
1761
|
}, {
|
|
1577
1762
|
lazy: true
|
|
@@ -1581,7 +1766,16 @@ function dynamic(source) {
|
|
|
1581
1766
|
const component = cached();
|
|
1582
1767
|
switch (typeof component) {
|
|
1583
1768
|
case "function":
|
|
1584
|
-
|
|
1769
|
+
{
|
|
1770
|
+
const binding = bindingOf(component);
|
|
1771
|
+
if (binding) {
|
|
1772
|
+
const [address, setAddress] = solidJs.createSignal(deliveredAddress ?? binding.address);
|
|
1773
|
+
sites.add(setAddress);
|
|
1774
|
+
solidJs.onCleanup(() => sites.delete(setAddress));
|
|
1775
|
+
return solidJs.untrack(() => binding.component(props, address));
|
|
1776
|
+
}
|
|
1777
|
+
return solidJs.untrack(() => component(props));
|
|
1778
|
+
}
|
|
1585
1779
|
case "string":
|
|
1586
1780
|
const el = solidJs.sharedConfig.hydrating ? getNextElement() : createElement(component, solidJs.untrack(() => props.is));
|
|
1587
1781
|
spread(el, props);
|
|
@@ -1618,9 +1812,7 @@ _moduleUrl) {
|
|
|
1618
1812
|
if ((Comp = solidJs.untrack(comp)) && !solidJs.sharedConfig.hydrating) return Comp(rest);
|
|
1619
1813
|
const [mounted, setMounted] = solidJs.createSignal(!solidJs.sharedConfig.hydrating);
|
|
1620
1814
|
const gate = solidJs.createMemo(() => (Comp = comp(), m = mounted(), solidJs.untrack(() => Comp && m ? Comp(rest) : props.fallback)));
|
|
1621
|
-
solidJs.
|
|
1622
|
-
setMounted(true);
|
|
1623
|
-
});
|
|
1815
|
+
solidJs.sharedConfig.onHydrationEnd(() => setMounted(true));
|
|
1624
1816
|
return gate;
|
|
1625
1817
|
};
|
|
1626
1818
|
}
|
|
@@ -1679,7 +1871,6 @@ Object.defineProperty(exports, "untrack", {
|
|
|
1679
1871
|
enumerable: true,
|
|
1680
1872
|
get: function () { return solidJs.untrack; }
|
|
1681
1873
|
});
|
|
1682
|
-
exports.Assets = voidFn;
|
|
1683
1874
|
exports.ChildProperties = ChildProperties;
|
|
1684
1875
|
exports.DOMElements = DOMElements;
|
|
1685
1876
|
exports.DOMWithState = DOMWithState;
|
|
@@ -1694,6 +1885,7 @@ exports.REVALIDATE_HEADER = REVALIDATE_HEADER;
|
|
|
1694
1885
|
exports.RawTextElements = RawTextElements;
|
|
1695
1886
|
exports.RequestContext = RequestContext;
|
|
1696
1887
|
exports.ResponseEnvelope = ResponseEnvelope;
|
|
1888
|
+
exports.SAFE_ERROR = SAFE_ERROR;
|
|
1697
1889
|
exports.SVGElements = SVGElements;
|
|
1698
1890
|
exports.VoidElements = VoidElements;
|
|
1699
1891
|
exports.acquireAsset = acquireAsset;
|
|
@@ -1704,14 +1896,19 @@ exports.claimElement = claimElement;
|
|
|
1704
1896
|
exports.claimElementTree = claimElementTree;
|
|
1705
1897
|
exports.className = className;
|
|
1706
1898
|
exports.clientOnly = clientOnly;
|
|
1899
|
+
exports.commitEventResponse = commitEventResponse;
|
|
1900
|
+
exports.composeMiddleware = composeMiddleware;
|
|
1901
|
+
exports.createRequestEvent = createRequestEvent;
|
|
1902
|
+
exports.createResponseStub = createResponseStub;
|
|
1903
|
+
exports.createSSRResponse = createSSRResponse;
|
|
1707
1904
|
exports.delegateEvents = delegateEvents;
|
|
1708
1905
|
exports.dynamic = dynamic;
|
|
1709
1906
|
exports.dynamicProperty = dynamicProperty;
|
|
1710
1907
|
exports.effect = effect;
|
|
1711
1908
|
exports.escape = escape;
|
|
1712
1909
|
exports.generateHydrationScript = voidFn;
|
|
1713
|
-
exports.getAssets = voidFn;
|
|
1714
1910
|
exports.getDelegatedRoot = getDelegatedRoot;
|
|
1911
|
+
exports.getExpectedRedirectStatus = getExpectedRedirectStatus;
|
|
1715
1912
|
exports.getFirstChild = getFirstChild;
|
|
1716
1913
|
exports.getHydrationKey = getHydrationKey;
|
|
1717
1914
|
exports.getNextElement = getNextElement;
|
|
@@ -1727,9 +1924,12 @@ exports.installHydrationRuntime = installHydrationRuntime;
|
|
|
1727
1924
|
exports.isDev = isDev;
|
|
1728
1925
|
exports.isHref = isHref;
|
|
1729
1926
|
exports.isResponseEnvelope = isResponseEnvelope;
|
|
1927
|
+
exports.isSafeError = isSafeError;
|
|
1730
1928
|
exports.isServer = isServer;
|
|
1929
|
+
exports.markSafeError = markSafeError;
|
|
1731
1930
|
exports.memo = memo;
|
|
1732
1931
|
exports.mergeProps = mergeProps;
|
|
1932
|
+
exports.parseCookieHeader = parseCookieHeader;
|
|
1733
1933
|
exports.redirect = redirect;
|
|
1734
1934
|
exports.ref = ref;
|
|
1735
1935
|
exports.registerDelegatedContainer = registerDelegatedContainer;
|
|
@@ -1739,11 +1939,11 @@ exports.reload = reload;
|
|
|
1739
1939
|
exports.render = render;
|
|
1740
1940
|
exports.renderToStream = renderToStream;
|
|
1741
1941
|
exports.renderToString = renderToString;
|
|
1742
|
-
exports.renderToStringAsync = renderToStringAsync;
|
|
1743
1942
|
exports.resolveSSRNode = resolveSSRNode;
|
|
1744
1943
|
exports.respond = respond;
|
|
1745
1944
|
exports.runHydrationEvents = runHydrationEvents;
|
|
1746
1945
|
exports.scope = scope;
|
|
1946
|
+
exports.serializeCookie = serializeCookie;
|
|
1747
1947
|
exports.setAttribute = setAttribute;
|
|
1748
1948
|
exports.setAttributeNS = setAttributeNS;
|
|
1749
1949
|
exports.setProperty = setProperty;
|
|
@@ -1751,13 +1951,15 @@ exports.setStyleProperty = setStyleProperty;
|
|
|
1751
1951
|
exports.spread = spread;
|
|
1752
1952
|
exports.ssr = ssr;
|
|
1753
1953
|
exports.ssrAttribute = ssrAttribute;
|
|
1754
|
-
exports.
|
|
1954
|
+
exports.ssrClassName = ssrClassName;
|
|
1755
1955
|
exports.ssrElement = ssrElement;
|
|
1956
|
+
exports.ssrGroup = ssrGroup;
|
|
1756
1957
|
exports.ssrHydrationKey = ssrHydrationKey;
|
|
1757
1958
|
exports.ssrStyle = ssrStyle;
|
|
1959
|
+
exports.ssrStyleProperty = ssrStyleProperty;
|
|
1758
1960
|
exports.style = style;
|
|
1759
1961
|
exports.template = template;
|
|
1760
1962
|
exports.unregisterDelegatedContainer = unregisterDelegatedContainer;
|
|
1761
1963
|
exports.unregisterDelegatedRoot = unregisterDelegatedRoot;
|
|
1762
|
-
exports.useAssets = voidFn;
|
|
1763
1964
|
exports.useHead = useHead;
|
|
1965
|
+
exports.warmAsset = warmAsset;
|