@solidjs/web 2.0.0-beta.31 → 2.0.0-beta.33
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 +285 -60
- package/dist/dev.js +267 -57
- package/dist/server.cjs +1148 -176
- package/dist/server.js +1133 -175
- package/dist/web.cjs +285 -60
- package/dist/web.js +267 -57
- package/frames/dist/client.cjs +397 -175
- package/frames/dist/client.dev.cjs +401 -175
- package/frames/dist/client.dev.js +399 -173
- package/frames/dist/client.js +395 -173
- package/frames/dist/server.cjs +1424 -277
- package/frames/dist/server.js +1426 -280
- package/package.json +69 -7
- package/serialization/decode/package.json +20 -0
- package/serialization/dist/decode.cjs +110 -0
- package/serialization/dist/decode.js +104 -0
- package/serialization/dist/serialization.cjs +106 -43
- package/serialization/dist/serialization.js +100 -44
- package/serialization/types/index.d.ts +85 -60
- package/serialization/types/serializer-decode.d.ts +182 -0
- package/serialization/types-cjs/index.d.cts +85 -60
- package/serialization/types-cjs/serializer-decode.d.cts +182 -0
- package/server-functions/dist/client.cjs +131 -98
- package/server-functions/dist/client.js +131 -99
- package/server-functions/dist/rich-args.cjs +11 -0
- package/server-functions/dist/rich-args.js +9 -0
- package/server-functions/dist/server.cjs +367 -194
- package/server-functions/dist/server.dev.cjs +1077 -0
- package/server-functions/dist/server.dev.js +1045 -0
- package/server-functions/dist/server.js +365 -195
- 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 +149 -6
- package/types/cookies.d.ts +93 -0
- package/types/core.d.ts +4 -2
- package/types/frames/client.d.ts +15 -1
- package/types/frames/frame-client.d.ts +63 -7
- package/types/frames/frame-sink.d.ts +26 -3
- package/types/frames/frame-transport.d.ts +40 -8
- package/types/frames/serializer.d.ts +85 -60
- package/types/frames/server.d.ts +22 -0
- package/types/index.d.ts +2 -3
- package/types/response.d.ts +45 -0
- package/types/serializer-decode.d.ts +182 -0
- package/types/serializer.d.ts +85 -60
- package/types/server-functions/client.d.ts +2 -1
- package/types/server-functions/rich-args.d.ts +10 -0
- package/types/server-functions/server.d.ts +99 -1
- package/types/server-functions/shared.d.ts +79 -1
- package/types/server-mock.d.ts +171 -59
- package/types/server.d.ts +209 -37
- package/types-cjs/client.d.cts +149 -6
- package/types-cjs/cookies.d.cts +93 -0
- package/types-cjs/core.d.cts +4 -2
- package/types-cjs/frames/client.d.cts +15 -1
- package/types-cjs/frames/frame-client.d.cts +63 -7
- package/types-cjs/frames/frame-sink.d.cts +26 -3
- package/types-cjs/frames/frame-transport.d.cts +40 -8
- package/types-cjs/frames/serializer.d.cts +85 -60
- package/types-cjs/frames/server.d.cts +22 -0
- package/types-cjs/index.d.cts +2 -3
- package/types-cjs/response.d.cts +45 -0
- package/types-cjs/serializer-decode.d.cts +182 -0
- package/types-cjs/serializer.d.cts +85 -60
- package/types-cjs/server-functions/client.d.cts +2 -1
- package/types-cjs/server-functions/rich-args.d.cts +10 -0
- package/types-cjs/server-functions/server.d.cts +99 -1
- package/types-cjs/server-functions/shared.d.cts +79 -1
- package/types-cjs/server-mock.d.cts +171 -59
- package/types-cjs/server.d.cts +209 -37
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,
|
|
@@ -174,6 +185,7 @@ const HEAD_ELIGIBLE_TAGS = new Set(["title", "meta", "link", "style", "script",
|
|
|
174
185
|
const HEAD_ATTR_NAME = /^[a-zA-Z_][a-zA-Z0-9_:.-]*$/;
|
|
175
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
|
}
|
|
@@ -255,6 +267,64 @@ function resolveHead(groups) {
|
|
|
255
267
|
return winners;
|
|
256
268
|
}
|
|
257
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
|
+
const FLASH_COOKIE = "flash";
|
|
307
|
+
const FLASH_MATCHER = new RegExp(`(?:^|;\\s*)${FLASH_COOKIE}=([^;]+)`);
|
|
308
|
+
function hasFlashCookie(cookieHeader) {
|
|
309
|
+
return !!cookieHeader && FLASH_MATCHER.test(cookieHeader);
|
|
310
|
+
}
|
|
311
|
+
function clearFlashCookie() {
|
|
312
|
+
return `${FLASH_COOKIE}=; Max-Age=0; Path=/`;
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
const SERVER_FUNCTION_METADATA = Symbol.for("solid.ServerFunctionMetadata");
|
|
316
|
+
function getServerFunctionMetadata(fn) {
|
|
317
|
+
if (typeof fn !== "function") return undefined;
|
|
318
|
+
return fn[SERVER_FUNCTION_METADATA] || undefined;
|
|
319
|
+
}
|
|
320
|
+
function isServerFunction(fn) {
|
|
321
|
+
return typeof fn === "function" && !!fn[SERVER_FUNCTION_METADATA];
|
|
322
|
+
}
|
|
323
|
+
const SERVER_FUNCTION_RPC = Symbol.for("solid.ServerFunctionRPC");
|
|
324
|
+
function getServerFunctionRPC() {
|
|
325
|
+
return globalThis[SERVER_FUNCTION_RPC];
|
|
326
|
+
}
|
|
327
|
+
|
|
258
328
|
const $$EVENT_OWNER = "_$DX_EVENT_OWNER";
|
|
259
329
|
const INNER_OWNED = {};
|
|
260
330
|
const delegatedEvents = new Set();
|
|
@@ -609,8 +679,7 @@ function insert(parent, accessor, marker, initial, options) {
|
|
|
609
679
|
const value = normalize(accessor(), current, multi, true);
|
|
610
680
|
if (typeof value !== "function") return value;
|
|
611
681
|
effect(() => (hydrationRt !== null && (current = hydrationRt.reclaimRegion(current, parent, marker)), normalize(value, current, multi)), inner => {
|
|
612
|
-
insertExpression(parent, inner, current, marker);
|
|
613
|
-
current = inner;
|
|
682
|
+
current = insertExpression(parent, inner, current, marker);
|
|
614
683
|
host && tagHost(current, host);
|
|
615
684
|
}, prev !== undefined && !(options && options.schedule) ? {
|
|
616
685
|
...options,
|
|
@@ -619,8 +688,7 @@ function insert(parent, accessor, marker, initial, options) {
|
|
|
619
688
|
return INNER_OWNED;
|
|
620
689
|
}, value => {
|
|
621
690
|
if (value === INNER_OWNED) return;
|
|
622
|
-
insertExpression(parent, value, current, marker);
|
|
623
|
-
current = value;
|
|
691
|
+
current = insertExpression(parent, value, current, marker);
|
|
624
692
|
host && tagHost(current, host);
|
|
625
693
|
},
|
|
626
694
|
accessor.$s ? options ? {
|
|
@@ -658,6 +726,9 @@ function findAssetElement(selector, attr, value) {
|
|
|
658
726
|
}
|
|
659
727
|
return null;
|
|
660
728
|
}
|
|
729
|
+
function setAssetAttrs(el, attrs) {
|
|
730
|
+
for (const name in attrs) el.setAttribute(name, attrs[name]);
|
|
731
|
+
}
|
|
661
732
|
function mountAssetElement(descriptor) {
|
|
662
733
|
let el;
|
|
663
734
|
if (descriptor.type === "inline-style") {
|
|
@@ -676,12 +747,77 @@ function mountAssetElement(descriptor) {
|
|
|
676
747
|
el.href = descriptor.href;
|
|
677
748
|
}
|
|
678
749
|
}
|
|
679
|
-
if (descriptor.attrs)
|
|
680
|
-
for (const name in descriptor.attrs) el.setAttribute(name, descriptor.attrs[name]);
|
|
681
|
-
}
|
|
750
|
+
if (descriptor.attrs) setAssetAttrs(el, descriptor.attrs);
|
|
682
751
|
if (!el.isConnected) document.head.appendChild(el);
|
|
683
752
|
return el;
|
|
684
753
|
}
|
|
754
|
+
const assetLoadSettled = /*#__PURE__*/Promise.resolve();
|
|
755
|
+
function trackAssetLoad(entry, adopted) {
|
|
756
|
+
if (entry.loadPromise) return;
|
|
757
|
+
const el = entry.element;
|
|
758
|
+
let settled = el.sheet != null;
|
|
759
|
+
if (!settled && adopted && typeof performance !== "undefined" && performance.getEntriesByName) {
|
|
760
|
+
settled = performance.getEntriesByName(el.href).length > 0;
|
|
761
|
+
}
|
|
762
|
+
if (settled) {
|
|
763
|
+
entry.loadState = "loaded";
|
|
764
|
+
entry.loadPromise = assetLoadSettled;
|
|
765
|
+
return;
|
|
766
|
+
}
|
|
767
|
+
entry.loadState = "pending";
|
|
768
|
+
entry.loadPromise = new Promise(resolve => {
|
|
769
|
+
const settle = state => {
|
|
770
|
+
entry.loadState = state;
|
|
771
|
+
resolve();
|
|
772
|
+
};
|
|
773
|
+
el.addEventListener("load", () => settle("loaded"), {
|
|
774
|
+
once: true
|
|
775
|
+
});
|
|
776
|
+
el.addEventListener("error", () => settle("errored"), {
|
|
777
|
+
once: true
|
|
778
|
+
});
|
|
779
|
+
});
|
|
780
|
+
}
|
|
781
|
+
function warmAsset(descriptor) {
|
|
782
|
+
if (descriptor.policy === "exclusive" || descriptor.type === "inline-style") return;
|
|
783
|
+
const key = assetEntryKey(descriptor);
|
|
784
|
+
let entry = assetRegistry.get(key);
|
|
785
|
+
if (!entry) {
|
|
786
|
+
entry = {
|
|
787
|
+
count: 0,
|
|
788
|
+
element: null,
|
|
789
|
+
timer: null
|
|
790
|
+
};
|
|
791
|
+
assetRegistry.set(key, entry);
|
|
792
|
+
}
|
|
793
|
+
let adopted = true;
|
|
794
|
+
if (!entry.element || !entry.element.isConnected) {
|
|
795
|
+
const rel = descriptor.type === "module" ? "modulepreload" : "stylesheet";
|
|
796
|
+
let el = findAssetElement(`link[rel="${rel}"]`, "href", descriptor.href);
|
|
797
|
+
if (!el && descriptor.type === "style") {
|
|
798
|
+
el = findAssetElement('link[rel="preload"][as="style"]', "href", descriptor.href);
|
|
799
|
+
}
|
|
800
|
+
if (!el) {
|
|
801
|
+
adopted = false;
|
|
802
|
+
el = document.createElement("link");
|
|
803
|
+
if (descriptor.type === "style") {
|
|
804
|
+
el.setAttribute("rel", "preload");
|
|
805
|
+
el.setAttribute("as", "style");
|
|
806
|
+
} else {
|
|
807
|
+
el.setAttribute("rel", "modulepreload");
|
|
808
|
+
}
|
|
809
|
+
el.setAttribute("href", descriptor.href);
|
|
810
|
+
if (!document.body) el.setAttribute("blocking", "render");
|
|
811
|
+
}
|
|
812
|
+
if (descriptor.attrs) setAssetAttrs(el, descriptor.attrs);
|
|
813
|
+
if (!el.isConnected) document.head.appendChild(el);
|
|
814
|
+
entry.element = el;
|
|
815
|
+
entry.loadState = undefined;
|
|
816
|
+
entry.loadPromise = undefined;
|
|
817
|
+
}
|
|
818
|
+
if (descriptor.type === "style") trackAssetLoad(entry, adopted);
|
|
819
|
+
return entry;
|
|
820
|
+
}
|
|
685
821
|
function acquireAsset(descriptor) {
|
|
686
822
|
const key = assetEntryKey(descriptor);
|
|
687
823
|
let entry = assetRegistry.get(key);
|
|
@@ -728,7 +864,12 @@ function acquireAsset(descriptor) {
|
|
|
728
864
|
entry.timer = null;
|
|
729
865
|
}
|
|
730
866
|
entry.count++;
|
|
731
|
-
if (!entry.element || !entry.element.isConnected)
|
|
867
|
+
if (!entry.element || !entry.element.isConnected) {
|
|
868
|
+
entry.element = mountAssetElement(descriptor);
|
|
869
|
+
} else if (descriptor.type === "style" && entry.element.getAttribute("rel") === "preload") {
|
|
870
|
+
entry.element.removeAttribute("as");
|
|
871
|
+
entry.element.setAttribute("rel", "stylesheet");
|
|
872
|
+
}
|
|
732
873
|
let released = false;
|
|
733
874
|
return () => {
|
|
734
875
|
if (released) return;
|
|
@@ -877,25 +1018,9 @@ function headElementMatches(el, t) {
|
|
|
877
1018
|
const children = t.props.children;
|
|
878
1019
|
return (children == null ? "" : String(children)) === el.textContent;
|
|
879
1020
|
}
|
|
880
|
-
function
|
|
881
|
-
if (tag === "link" && (props.rel === "stylesheet" || props.rel === "modulepreload")) {
|
|
882
|
-
const descriptor = {
|
|
883
|
-
type: props.rel === "stylesheet" ? "style" : "module",
|
|
884
|
-
href: props.href
|
|
885
|
-
};
|
|
886
|
-
let attrs = null;
|
|
887
|
-
for (const name in props) {
|
|
888
|
-
if (name === "rel" || name === "href") continue;
|
|
889
|
-
if (!HEAD_ATTR_NAME.test(name)) continue;
|
|
890
|
-
const v = props[name];
|
|
891
|
-
if (v == null || v === false) continue;
|
|
892
|
-
(attrs || (attrs = {}))[name] = v === true ? "" : String(v);
|
|
893
|
-
}
|
|
894
|
-
if (attrs) descriptor.attrs = attrs;
|
|
895
|
-
return acquireAsset(descriptor);
|
|
896
|
-
}
|
|
1021
|
+
function mountHeadResource(tag, props) {
|
|
897
1022
|
const identity = resourceIdentity(tag, props);
|
|
898
|
-
if (headMountedResources.has(identity)) return
|
|
1023
|
+
if (headMountedResources.has(identity)) return;
|
|
899
1024
|
headMountedResources.add(identity);
|
|
900
1025
|
const url = props.href || props.src;
|
|
901
1026
|
let el = null;
|
|
@@ -903,9 +1028,28 @@ function acquireHeadResource(tag, props) {
|
|
|
903
1028
|
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);
|
|
904
1029
|
}
|
|
905
1030
|
if (!el) document.head.appendChild(createHeadElement(tag, props));
|
|
906
|
-
return noopFn;
|
|
907
1031
|
}
|
|
908
|
-
function
|
|
1032
|
+
function gateHeadResource(props) {
|
|
1033
|
+
const descriptor = {
|
|
1034
|
+
type: props.rel === "stylesheet" ? "style" : "module",
|
|
1035
|
+
href: props.href
|
|
1036
|
+
};
|
|
1037
|
+
let gateable = props.rel === "stylesheet" && props.href != null;
|
|
1038
|
+
let attrs = null;
|
|
1039
|
+
for (const name in props) {
|
|
1040
|
+
if (name === "rel" || name === "href") continue;
|
|
1041
|
+
if (!STYLESHEET_FETCH_META.has(name)) gateable = false;
|
|
1042
|
+
if (!HEAD_ATTR_NAME.test(name)) continue;
|
|
1043
|
+
const v = props[name];
|
|
1044
|
+
if (v == null || v === false) continue;
|
|
1045
|
+
(attrs || (attrs = {}))[name] = v === true ? "" : String(v);
|
|
1046
|
+
}
|
|
1047
|
+
if (attrs) descriptor.attrs = attrs;
|
|
1048
|
+
effect(() => {
|
|
1049
|
+
const entry = warmAsset(descriptor);
|
|
1050
|
+
if (gateable && entry.loadState === "pending" && typeof waitAsset === "function") waitAsset(entry.loadPromise);
|
|
1051
|
+
}, () => acquireAsset(descriptor));
|
|
1052
|
+
}
|
|
909
1053
|
function useHead(tags) {
|
|
910
1054
|
initHeadRegistry();
|
|
911
1055
|
const reg = {
|
|
@@ -929,10 +1073,16 @@ function useHead(tags) {
|
|
|
929
1073
|
rel: cls.rel
|
|
930
1074
|
} : undefined);
|
|
931
1075
|
if (cls.resource) {
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
1076
|
+
if (desc.tag === "link" && (props.rel === "stylesheet" || props.rel === "modulepreload")) {
|
|
1077
|
+
gateHeadResource(props);
|
|
1078
|
+
} else if (desc.tag === "link") {
|
|
1079
|
+
mountHeadResource(desc.tag, props);
|
|
1080
|
+
} else {
|
|
1081
|
+
resources.push({
|
|
1082
|
+
tag: desc.tag,
|
|
1083
|
+
props
|
|
1084
|
+
});
|
|
1085
|
+
}
|
|
936
1086
|
} else {
|
|
937
1087
|
const key = evalHeadValue(desc.key);
|
|
938
1088
|
replaceable.push({
|
|
@@ -947,9 +1097,8 @@ function useHead(tags) {
|
|
|
947
1097
|
resources
|
|
948
1098
|
};
|
|
949
1099
|
}, evaluated => {
|
|
950
|
-
const releases = [];
|
|
951
1100
|
for (let i = 0; i < evaluated.resources.length; i++) {
|
|
952
|
-
|
|
1101
|
+
mountHeadResource(evaluated.resources[i].tag, evaluated.resources[i].props);
|
|
953
1102
|
}
|
|
954
1103
|
reg.tags = evaluated.replaceable;
|
|
955
1104
|
if (reg.seq < 0) reg.seq = ++headSeq;
|
|
@@ -958,7 +1107,6 @@ function useHead(tags) {
|
|
|
958
1107
|
return () => {
|
|
959
1108
|
const idx = headRegistrations.indexOf(reg);
|
|
960
1109
|
if (idx > -1) headRegistrations.splice(idx, 1);
|
|
961
|
-
for (let i = 0; i < releases.length; i++) releases[i]();
|
|
962
1110
|
scheduleHeadApply();
|
|
963
1111
|
};
|
|
964
1112
|
});
|
|
@@ -1324,8 +1472,11 @@ function eventHandler(e, container, state) {
|
|
|
1324
1472
|
retarget(oriTarget);
|
|
1325
1473
|
}
|
|
1326
1474
|
function insertExpression(parent, value, current, marker) {
|
|
1327
|
-
if (hydrationRt !== null && isHydrating(parent))
|
|
1328
|
-
|
|
1475
|
+
if (hydrationRt !== null && isHydrating(parent)) {
|
|
1476
|
+
if (value && value !== current) for (const n of Array.isArray(value) ? value : [value]) if (n && n.nodeType && !isHydrating(n)) return current;
|
|
1477
|
+
return value;
|
|
1478
|
+
}
|
|
1479
|
+
if (value === current) return value;
|
|
1329
1480
|
const t = typeof value,
|
|
1330
1481
|
multi = marker !== undefined;
|
|
1331
1482
|
if (t === "string" || t === "number") {
|
|
@@ -1364,6 +1515,7 @@ function insertExpression(parent, value, current, marker) {
|
|
|
1364
1515
|
appendNodes(parent, value);
|
|
1365
1516
|
}
|
|
1366
1517
|
} else console.warn(`Unrecognized value. Skipped inserting`, value);
|
|
1518
|
+
return value;
|
|
1367
1519
|
}
|
|
1368
1520
|
function normalize(value, current, multi, doNotUnwrap) {
|
|
1369
1521
|
value = solidJs.flatten(value, {
|
|
@@ -1446,7 +1598,13 @@ function gatherHydratable(element, root) {
|
|
|
1446
1598
|
for (let i = 0; i < templates.length; i++) {
|
|
1447
1599
|
const node = templates[i];
|
|
1448
1600
|
const key = node.getAttribute("_hk");
|
|
1449
|
-
if (
|
|
1601
|
+
if (root) {
|
|
1602
|
+
if (!key.startsWith(root)) continue;
|
|
1603
|
+
} else {
|
|
1604
|
+
const frame = node.closest("[data-fid]");
|
|
1605
|
+
if (frame && frame !== element && element.contains(frame)) continue;
|
|
1606
|
+
}
|
|
1607
|
+
if (!solidJs.sharedConfig.registry.has(key)) solidJs.sharedConfig.registry.set(key, node);
|
|
1450
1608
|
}
|
|
1451
1609
|
}
|
|
1452
1610
|
function getHydrationKey() {
|
|
@@ -1462,29 +1620,50 @@ function throwInBrowser(func) {
|
|
|
1462
1620
|
function renderToString(fn, options) {
|
|
1463
1621
|
throwInBrowser(renderToString);
|
|
1464
1622
|
}
|
|
1465
|
-
function renderToStringAsync(fn, options) {
|
|
1466
|
-
throwInBrowser(renderToStringAsync);
|
|
1467
|
-
}
|
|
1468
1623
|
function renderToStream(fn, options) {
|
|
1469
1624
|
throwInBrowser(renderToStream);
|
|
1470
1625
|
}
|
|
1626
|
+
function createResponseStub() {
|
|
1627
|
+
throwInBrowser(createResponseStub);
|
|
1628
|
+
}
|
|
1629
|
+
function createRequestEvent(request, init) {
|
|
1630
|
+
throwInBrowser(createRequestEvent);
|
|
1631
|
+
}
|
|
1632
|
+
function getExpectedRedirectStatus(response) {
|
|
1633
|
+
throwInBrowser(getExpectedRedirectStatus);
|
|
1634
|
+
}
|
|
1635
|
+
function createSSRResponse() {
|
|
1636
|
+
throwInBrowser(createSSRResponse);
|
|
1637
|
+
}
|
|
1638
|
+
function commitEventResponse(response, event) {
|
|
1639
|
+
throwInBrowser(commitEventResponse);
|
|
1640
|
+
}
|
|
1641
|
+
function composeMiddleware(middlewares) {
|
|
1642
|
+
throwInBrowser(composeMiddleware);
|
|
1643
|
+
}
|
|
1471
1644
|
function ssr(template, ...nodes) {}
|
|
1472
1645
|
function ssrElement(name, props, children, needsId) {}
|
|
1473
|
-
function
|
|
1646
|
+
function ssrClassName(value) {}
|
|
1474
1647
|
function ssrStyle(value) {}
|
|
1648
|
+
function ssrStyleProperty(name, value) {}
|
|
1475
1649
|
function ssrAttribute(key, value) {}
|
|
1650
|
+
function ssrGroup(fn, n) {}
|
|
1476
1651
|
function ssrHydrationKey() {}
|
|
1477
|
-
function resolveSSRNode(node) {}
|
|
1478
|
-
function escape(
|
|
1652
|
+
function resolveSSRNode(node, result, top) {}
|
|
1653
|
+
function escape(s, attr) {}
|
|
1479
1654
|
|
|
1480
1655
|
const ENVELOPE = Symbol.for("solid.ResponseEnvelope");
|
|
1481
|
-
|
|
1482
|
-
|
|
1483
|
-
|
|
1484
|
-
|
|
1656
|
+
// PURE-annotated factory (same convention as solid's MockPromise): the brand
|
|
1657
|
+
const ResponseEnvelope = /* @__PURE__ */(() => {
|
|
1658
|
+
class ResponseEnvelope {
|
|
1659
|
+
constructor(response, value) {
|
|
1660
|
+
this.response = response;
|
|
1661
|
+
this.value = value;
|
|
1662
|
+
}
|
|
1485
1663
|
}
|
|
1486
|
-
|
|
1487
|
-
ResponseEnvelope
|
|
1664
|
+
ResponseEnvelope.prototype[ENVELOPE] = true;
|
|
1665
|
+
return ResponseEnvelope;
|
|
1666
|
+
})();
|
|
1488
1667
|
function isResponseEnvelope(value) {
|
|
1489
1668
|
return !!(value && typeof value === "object" && value[ENVELOPE]);
|
|
1490
1669
|
}
|
|
@@ -1492,13 +1671,38 @@ const HREF = Symbol.for("solid.Href");
|
|
|
1492
1671
|
function isHref(value) {
|
|
1493
1672
|
return !!(value && (typeof value === "object" || typeof value === "function") && value[HREF]);
|
|
1494
1673
|
}
|
|
1674
|
+
const SAFE_ERROR = Symbol.for("solid.SafeError");
|
|
1675
|
+
function markSafeError(error) {
|
|
1676
|
+
if (error && (typeof error === "object" || typeof error === "function")) {
|
|
1677
|
+
Object.defineProperty(error, SAFE_ERROR, {
|
|
1678
|
+
value: true,
|
|
1679
|
+
enumerable: false,
|
|
1680
|
+
configurable: true
|
|
1681
|
+
});
|
|
1682
|
+
}
|
|
1683
|
+
return error;
|
|
1684
|
+
}
|
|
1685
|
+
function isSafeError(value) {
|
|
1686
|
+
return !!(value && (typeof value === "object" || typeof value === "function") && value[SAFE_ERROR]);
|
|
1687
|
+
}
|
|
1495
1688
|
const REVALIDATE_HEADER = "X-Revalidate";
|
|
1496
1689
|
function initWithRevalidate(init) {
|
|
1497
1690
|
const {
|
|
1498
1691
|
revalidate,
|
|
1499
1692
|
...responseInit
|
|
1500
1693
|
} = init;
|
|
1501
|
-
|
|
1694
|
+
let headers;
|
|
1695
|
+
if (responseInit.headers && responseInit.headers.getSetCookie) {
|
|
1696
|
+
headers = new Headers();
|
|
1697
|
+
responseInit.headers.forEach((value, key) => {
|
|
1698
|
+
if (key !== "set-cookie") headers.append(key, value);
|
|
1699
|
+
});
|
|
1700
|
+
for (const cookie of responseInit.headers.getSetCookie()) {
|
|
1701
|
+
headers.append("Set-Cookie", cookie);
|
|
1702
|
+
}
|
|
1703
|
+
} else {
|
|
1704
|
+
headers = new Headers(responseInit.headers);
|
|
1705
|
+
}
|
|
1502
1706
|
revalidate !== undefined && headers.set(REVALIDATE_HEADER, revalidate.toString());
|
|
1503
1707
|
return {
|
|
1504
1708
|
responseInit,
|
|
@@ -1577,7 +1781,8 @@ function portalImpl(props) {
|
|
|
1577
1781
|
endMarker = document.createTextNode(""),
|
|
1578
1782
|
mount = () => props.mount || document.body,
|
|
1579
1783
|
content = solidJs.createMemo(() => [startMarker, props.children], {
|
|
1580
|
-
ssrSource: "client"
|
|
1784
|
+
ssrSource: "client",
|
|
1785
|
+
loadingValue: undefined
|
|
1581
1786
|
});
|
|
1582
1787
|
solidJs.createRenderEffect(
|
|
1583
1788
|
() => [mount(), content(), solidJs.getOwner()], ([, c, owner]) => {
|
|
@@ -1614,7 +1819,8 @@ function portalImpl(props) {
|
|
|
1614
1819
|
ssrSource: "client"
|
|
1615
1820
|
});
|
|
1616
1821
|
if (solidJs.sharedConfig.hydrating) return solidJs.createMemo(() => treeMarker, {
|
|
1617
|
-
ssrSource: "client"
|
|
1822
|
+
ssrSource: "client",
|
|
1823
|
+
loadingValue: undefined
|
|
1618
1824
|
});
|
|
1619
1825
|
return treeMarker;
|
|
1620
1826
|
}
|
|
@@ -1625,9 +1831,11 @@ function bindingOf(value) {
|
|
|
1625
1831
|
function dynamic(source) {
|
|
1626
1832
|
let latest = 0;
|
|
1627
1833
|
const sites = new Set();
|
|
1834
|
+
let deliveredAddress;
|
|
1628
1835
|
const resolveBinding = (next, prev) => {
|
|
1629
1836
|
const binding = bindingOf(next);
|
|
1630
1837
|
if (!binding) return next;
|
|
1838
|
+
deliveredAddress = binding.address;
|
|
1631
1839
|
const prevBinding = bindingOf(prev);
|
|
1632
1840
|
if (prevBinding && prevBinding.component === binding.component) {
|
|
1633
1841
|
for (const deliver of sites) deliver(binding.address);
|
|
@@ -1656,7 +1864,7 @@ function dynamic(source) {
|
|
|
1656
1864
|
});
|
|
1657
1865
|
const binding = bindingOf(component);
|
|
1658
1866
|
if (binding) {
|
|
1659
|
-
const [address, setAddress] = solidJs.createSignal(binding.address);
|
|
1867
|
+
const [address, setAddress] = solidJs.createSignal(deliveredAddress ?? binding.address);
|
|
1660
1868
|
sites.add(setAddress);
|
|
1661
1869
|
solidJs.onCleanup(() => sites.delete(setAddress));
|
|
1662
1870
|
return solidJs.untrack(() => binding.component(props, address));
|
|
@@ -1699,7 +1907,9 @@ _moduleUrl) {
|
|
|
1699
1907
|
if ((Comp = solidJs.untrack(comp)) && !solidJs.sharedConfig.hydrating) return Comp(rest);
|
|
1700
1908
|
const [mounted, setMounted] = solidJs.createSignal(!solidJs.sharedConfig.hydrating);
|
|
1701
1909
|
const gate = solidJs.createMemo(() => (Comp = comp(), m = mounted(), solidJs.untrack(() => Comp && m ? Comp(rest) : props.fallback)));
|
|
1702
|
-
solidJs.sharedConfig.onHydrationEnd
|
|
1910
|
+
const onHydrationEnd = solidJs.sharedConfig.onHydrationEnd;
|
|
1911
|
+
const release = () => setMounted(true);
|
|
1912
|
+
onHydrationEnd ? onHydrationEnd(release) : queueMicrotask(release);
|
|
1703
1913
|
return gate;
|
|
1704
1914
|
};
|
|
1705
1915
|
}
|
|
@@ -1758,7 +1968,6 @@ Object.defineProperty(exports, "untrack", {
|
|
|
1758
1968
|
enumerable: true,
|
|
1759
1969
|
get: function () { return solidJs.untrack; }
|
|
1760
1970
|
});
|
|
1761
|
-
exports.Assets = voidFn;
|
|
1762
1971
|
exports.ChildProperties = ChildProperties;
|
|
1763
1972
|
exports.DOMElements = DOMElements;
|
|
1764
1973
|
exports.DOMWithState = DOMWithState;
|
|
@@ -1773,6 +1982,7 @@ exports.REVALIDATE_HEADER = REVALIDATE_HEADER;
|
|
|
1773
1982
|
exports.RawTextElements = RawTextElements;
|
|
1774
1983
|
exports.RequestContext = RequestContext;
|
|
1775
1984
|
exports.ResponseEnvelope = ResponseEnvelope;
|
|
1985
|
+
exports.SAFE_ERROR = SAFE_ERROR;
|
|
1776
1986
|
exports.SVGElements = SVGElements;
|
|
1777
1987
|
exports.VoidElements = VoidElements;
|
|
1778
1988
|
exports.acquireAsset = acquireAsset;
|
|
@@ -1782,15 +1992,21 @@ exports.assign = assign;
|
|
|
1782
1992
|
exports.claimElement = claimElement;
|
|
1783
1993
|
exports.claimElementTree = claimElementTree;
|
|
1784
1994
|
exports.className = className;
|
|
1995
|
+
exports.clearFlashCookie = clearFlashCookie;
|
|
1785
1996
|
exports.clientOnly = clientOnly;
|
|
1997
|
+
exports.commitEventResponse = commitEventResponse;
|
|
1998
|
+
exports.composeMiddleware = composeMiddleware;
|
|
1999
|
+
exports.createRequestEvent = createRequestEvent;
|
|
2000
|
+
exports.createResponseStub = createResponseStub;
|
|
2001
|
+
exports.createSSRResponse = createSSRResponse;
|
|
1786
2002
|
exports.delegateEvents = delegateEvents;
|
|
1787
2003
|
exports.dynamic = dynamic;
|
|
1788
2004
|
exports.dynamicProperty = dynamicProperty;
|
|
1789
2005
|
exports.effect = effect;
|
|
1790
2006
|
exports.escape = escape;
|
|
1791
2007
|
exports.generateHydrationScript = voidFn;
|
|
1792
|
-
exports.getAssets = voidFn;
|
|
1793
2008
|
exports.getDelegatedRoot = getDelegatedRoot;
|
|
2009
|
+
exports.getExpectedRedirectStatus = getExpectedRedirectStatus;
|
|
1794
2010
|
exports.getFirstChild = getFirstChild;
|
|
1795
2011
|
exports.getHydrationKey = getHydrationKey;
|
|
1796
2012
|
exports.getNextElement = getNextElement;
|
|
@@ -1798,6 +2014,9 @@ exports.getNextMarker = getNextMarker;
|
|
|
1798
2014
|
exports.getNextMatch = getNextMatch;
|
|
1799
2015
|
exports.getNextSibling = getNextSibling;
|
|
1800
2016
|
exports.getRequestEvent = voidFn;
|
|
2017
|
+
exports.getServerFunctionMetadata = getServerFunctionMetadata;
|
|
2018
|
+
exports.getServerFunctionRPC = getServerFunctionRPC;
|
|
2019
|
+
exports.hasFlashCookie = hasFlashCookie;
|
|
1801
2020
|
exports.httpHeader = httpHeader;
|
|
1802
2021
|
exports.httpStatus = httpStatus;
|
|
1803
2022
|
exports.hydrate = hydrate;
|
|
@@ -1806,9 +2025,13 @@ exports.installHydrationRuntime = installHydrationRuntime;
|
|
|
1806
2025
|
exports.isDev = isDev;
|
|
1807
2026
|
exports.isHref = isHref;
|
|
1808
2027
|
exports.isResponseEnvelope = isResponseEnvelope;
|
|
2028
|
+
exports.isSafeError = isSafeError;
|
|
1809
2029
|
exports.isServer = isServer;
|
|
2030
|
+
exports.isServerFunction = isServerFunction;
|
|
2031
|
+
exports.markSafeError = markSafeError;
|
|
1810
2032
|
exports.memo = memo;
|
|
1811
2033
|
exports.mergeProps = mergeProps;
|
|
2034
|
+
exports.parseCookieHeader = parseCookieHeader;
|
|
1812
2035
|
exports.redirect = redirect;
|
|
1813
2036
|
exports.ref = ref;
|
|
1814
2037
|
exports.registerDelegatedContainer = registerDelegatedContainer;
|
|
@@ -1818,11 +2041,11 @@ exports.reload = reload;
|
|
|
1818
2041
|
exports.render = render;
|
|
1819
2042
|
exports.renderToStream = renderToStream;
|
|
1820
2043
|
exports.renderToString = renderToString;
|
|
1821
|
-
exports.renderToStringAsync = renderToStringAsync;
|
|
1822
2044
|
exports.resolveSSRNode = resolveSSRNode;
|
|
1823
2045
|
exports.respond = respond;
|
|
1824
2046
|
exports.runHydrationEvents = runHydrationEvents;
|
|
1825
2047
|
exports.scope = scope;
|
|
2048
|
+
exports.serializeCookie = serializeCookie;
|
|
1826
2049
|
exports.setAttribute = setAttribute;
|
|
1827
2050
|
exports.setAttributeNS = setAttributeNS;
|
|
1828
2051
|
exports.setProperty = setProperty;
|
|
@@ -1830,13 +2053,15 @@ exports.setStyleProperty = setStyleProperty;
|
|
|
1830
2053
|
exports.spread = spread;
|
|
1831
2054
|
exports.ssr = ssr;
|
|
1832
2055
|
exports.ssrAttribute = ssrAttribute;
|
|
1833
|
-
exports.
|
|
2056
|
+
exports.ssrClassName = ssrClassName;
|
|
1834
2057
|
exports.ssrElement = ssrElement;
|
|
2058
|
+
exports.ssrGroup = ssrGroup;
|
|
1835
2059
|
exports.ssrHydrationKey = ssrHydrationKey;
|
|
1836
2060
|
exports.ssrStyle = ssrStyle;
|
|
2061
|
+
exports.ssrStyleProperty = ssrStyleProperty;
|
|
1837
2062
|
exports.style = style;
|
|
1838
2063
|
exports.template = template;
|
|
1839
2064
|
exports.unregisterDelegatedContainer = unregisterDelegatedContainer;
|
|
1840
2065
|
exports.unregisterDelegatedRoot = unregisterDelegatedRoot;
|
|
1841
|
-
exports.useAssets = voidFn;
|
|
1842
2066
|
exports.useHead = useHead;
|
|
2067
|
+
exports.warmAsset = warmAsset;
|