@solidjs/web 2.0.0-beta.31 → 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 +234 -45
- package/dist/dev.js +221 -42
- package/dist/server.cjs +456 -123
- package/dist/server.js +445 -120
- package/dist/web.cjs +234 -45
- package/dist/web.js +221 -42
- package/frames/dist/client.cjs +217 -112
- package/frames/dist/client.dev.cjs +217 -112
- package/frames/dist/client.dev.js +218 -113
- package/frames/dist/client.js +218 -113
- package/frames/dist/server.cjs +488 -177
- package/frames/dist/server.js +489 -179
- package/package.json +55 -4
- 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 +127 -6
- package/types/core.d.ts +3 -1
- package/types/frames/client.d.ts +15 -1
- package/types/frames/frame-client.d.ts +37 -7
- package/types/frames/frame-sink.d.ts +26 -3
- package/types/frames/frame-transport.d.ts +39 -7
- 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/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 +188 -36
- package/types-cjs/client.d.cts +127 -6
- package/types-cjs/core.d.cts +3 -1
- package/types-cjs/frames/client.d.cts +15 -1
- package/types-cjs/frames/frame-client.d.cts +37 -7
- package/types-cjs/frames/frame-sink.d.cts +26 -3
- package/types-cjs/frames/frame-transport.d.cts +39 -7
- 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/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 +188 -36
package/dist/web.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createRenderEffect, createMemo, sharedConfig, untrack,
|
|
1
|
+
import { createRenderEffect, createMemo, runWithOwner, sharedConfig, untrack, flatten, createRoot, merge, createComponent, omit, createOwner, createSignal, onCleanup, enableHydration, flush, getOwner, createEffect } from 'solid-js';
|
|
2
2
|
export { Errored, For, Hydration, Loading, Match, NoHydration, Repeat, Reveal, Show, Switch, createComponent, getOwner, untrack } from 'solid-js';
|
|
3
3
|
|
|
4
4
|
const DOMWithState = {
|
|
@@ -62,6 +62,17 @@ const effect = (fn, effectFn, options) => createRenderEffect(fn, effectFn, optio
|
|
|
62
62
|
transparent: !options.scope
|
|
63
63
|
} : transparentOptions);
|
|
64
64
|
const memo = fn => createMemo(() => fn(), syncOptions);
|
|
65
|
+
const assetGates = new WeakMap();
|
|
66
|
+
const waitAsset = promise => {
|
|
67
|
+
let gate = assetGates.get(promise);
|
|
68
|
+
if (!gate) {
|
|
69
|
+
runWithOwner(null, () => {
|
|
70
|
+
gate = createMemo(() => promise);
|
|
71
|
+
});
|
|
72
|
+
assetGates.set(promise, gate);
|
|
73
|
+
}
|
|
74
|
+
gate();
|
|
75
|
+
};
|
|
65
76
|
|
|
66
77
|
function reconcileArrays(parentNode, a, b, marker) {
|
|
67
78
|
let bLength = b.length,
|
|
@@ -173,6 +184,7 @@ const HEAD_ELIGIBLE_TAGS = new Set(["title", "meta", "link", "style", "script",
|
|
|
173
184
|
const HEAD_ATTR_NAME = /^[a-zA-Z_][a-zA-Z0-9_:.-]*$/;
|
|
174
185
|
const RESOURCE_LINK_RELS = new Set(["preload", "modulepreload", "prefetch", "preconnect", "dns-prefetch", "stylesheet"]);
|
|
175
186
|
const RESOURCE_QUALIFIERS = ["as", "crossorigin", "type", "media", "imagesrcset", "imagesizes"];
|
|
187
|
+
const STYLESHEET_FETCH_META = new Set(["crossorigin", "integrity", "referrerpolicy", "fetchpriority"]);
|
|
176
188
|
function evalHeadValue(v) {
|
|
177
189
|
return typeof v === "function" ? v() : v;
|
|
178
190
|
}
|
|
@@ -253,6 +265,43 @@ function resolveHead(groups) {
|
|
|
253
265
|
return winners;
|
|
254
266
|
}
|
|
255
267
|
|
|
268
|
+
function parseCookieHeader(header) {
|
|
269
|
+
const cookies = {};
|
|
270
|
+
if (!header) return cookies;
|
|
271
|
+
for (const part of header.split(";")) {
|
|
272
|
+
const eq = part.indexOf("=");
|
|
273
|
+
if (eq < 0) continue;
|
|
274
|
+
const name = decodeSafe(part.slice(0, eq).trim());
|
|
275
|
+
let value = part.slice(eq + 1).trim();
|
|
276
|
+
if (value.length > 1 && value[0] === '"' && value[value.length - 1] === '"') {
|
|
277
|
+
value = value.slice(1, -1);
|
|
278
|
+
}
|
|
279
|
+
cookies[name] = decodeSafe(value);
|
|
280
|
+
}
|
|
281
|
+
return cookies;
|
|
282
|
+
}
|
|
283
|
+
function decodeSafe(text) {
|
|
284
|
+
try {
|
|
285
|
+
return decodeURIComponent(text);
|
|
286
|
+
} catch {
|
|
287
|
+
return text;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
function serializeCookie(name, value, options = {}) {
|
|
291
|
+
let cookie = `${encodeURIComponent(name)}=${encodeURIComponent(value)}`;
|
|
292
|
+
cookie += `; Path=${options.path === undefined ? "/" : options.path}`;
|
|
293
|
+
if (options.domain) cookie += `; Domain=${options.domain}`;
|
|
294
|
+
if (options.maxAge !== undefined) cookie += `; Max-Age=${Math.trunc(options.maxAge)}`;
|
|
295
|
+
if (options.expires) cookie += `; Expires=${options.expires.toUTCString()}`;
|
|
296
|
+
if (options.httpOnly) cookie += "; HttpOnly";
|
|
297
|
+
if (options.secure) cookie += "; Secure";
|
|
298
|
+
if (options.sameSite) {
|
|
299
|
+
const sameSite = options.sameSite.toLowerCase();
|
|
300
|
+
cookie += `; SameSite=${sameSite === "none" ? "None" : sameSite === "strict" ? "Strict" : "Lax"}`;
|
|
301
|
+
}
|
|
302
|
+
return cookie;
|
|
303
|
+
}
|
|
304
|
+
|
|
256
305
|
const $$EVENT_OWNER = "_$DX_EVENT_OWNER";
|
|
257
306
|
const INNER_OWNED = {};
|
|
258
307
|
const delegatedEvents = new Set();
|
|
@@ -651,6 +700,9 @@ function findAssetElement(selector, attr, value) {
|
|
|
651
700
|
}
|
|
652
701
|
return null;
|
|
653
702
|
}
|
|
703
|
+
function setAssetAttrs(el, attrs) {
|
|
704
|
+
for (const name in attrs) el.setAttribute(name, attrs[name]);
|
|
705
|
+
}
|
|
654
706
|
function mountAssetElement(descriptor) {
|
|
655
707
|
let el;
|
|
656
708
|
if (descriptor.type === "inline-style") {
|
|
@@ -669,12 +721,77 @@ function mountAssetElement(descriptor) {
|
|
|
669
721
|
el.href = descriptor.href;
|
|
670
722
|
}
|
|
671
723
|
}
|
|
672
|
-
if (descriptor.attrs)
|
|
673
|
-
for (const name in descriptor.attrs) el.setAttribute(name, descriptor.attrs[name]);
|
|
674
|
-
}
|
|
724
|
+
if (descriptor.attrs) setAssetAttrs(el, descriptor.attrs);
|
|
675
725
|
if (!el.isConnected) document.head.appendChild(el);
|
|
676
726
|
return el;
|
|
677
727
|
}
|
|
728
|
+
const assetLoadSettled = /*#__PURE__*/Promise.resolve();
|
|
729
|
+
function trackAssetLoad(entry, adopted) {
|
|
730
|
+
if (entry.loadPromise) return;
|
|
731
|
+
const el = entry.element;
|
|
732
|
+
let settled = el.sheet != null;
|
|
733
|
+
if (!settled && adopted && typeof performance !== "undefined" && performance.getEntriesByName) {
|
|
734
|
+
settled = performance.getEntriesByName(el.href).length > 0;
|
|
735
|
+
}
|
|
736
|
+
if (settled) {
|
|
737
|
+
entry.loadState = "loaded";
|
|
738
|
+
entry.loadPromise = assetLoadSettled;
|
|
739
|
+
return;
|
|
740
|
+
}
|
|
741
|
+
entry.loadState = "pending";
|
|
742
|
+
entry.loadPromise = new Promise(resolve => {
|
|
743
|
+
const settle = state => {
|
|
744
|
+
entry.loadState = state;
|
|
745
|
+
resolve();
|
|
746
|
+
};
|
|
747
|
+
el.addEventListener("load", () => settle("loaded"), {
|
|
748
|
+
once: true
|
|
749
|
+
});
|
|
750
|
+
el.addEventListener("error", () => settle("errored"), {
|
|
751
|
+
once: true
|
|
752
|
+
});
|
|
753
|
+
});
|
|
754
|
+
}
|
|
755
|
+
function warmAsset(descriptor) {
|
|
756
|
+
if (descriptor.policy === "exclusive" || descriptor.type === "inline-style") return;
|
|
757
|
+
const key = assetEntryKey(descriptor);
|
|
758
|
+
let entry = assetRegistry.get(key);
|
|
759
|
+
if (!entry) {
|
|
760
|
+
entry = {
|
|
761
|
+
count: 0,
|
|
762
|
+
element: null,
|
|
763
|
+
timer: null
|
|
764
|
+
};
|
|
765
|
+
assetRegistry.set(key, entry);
|
|
766
|
+
}
|
|
767
|
+
let adopted = true;
|
|
768
|
+
if (!entry.element || !entry.element.isConnected) {
|
|
769
|
+
const rel = descriptor.type === "module" ? "modulepreload" : "stylesheet";
|
|
770
|
+
let el = findAssetElement(`link[rel="${rel}"]`, "href", descriptor.href);
|
|
771
|
+
if (!el && descriptor.type === "style") {
|
|
772
|
+
el = findAssetElement('link[rel="preload"][as="style"]', "href", descriptor.href);
|
|
773
|
+
}
|
|
774
|
+
if (!el) {
|
|
775
|
+
adopted = false;
|
|
776
|
+
el = document.createElement("link");
|
|
777
|
+
if (descriptor.type === "style") {
|
|
778
|
+
el.setAttribute("rel", "preload");
|
|
779
|
+
el.setAttribute("as", "style");
|
|
780
|
+
} else {
|
|
781
|
+
el.setAttribute("rel", "modulepreload");
|
|
782
|
+
}
|
|
783
|
+
el.setAttribute("href", descriptor.href);
|
|
784
|
+
if (!document.body) el.setAttribute("blocking", "render");
|
|
785
|
+
}
|
|
786
|
+
if (descriptor.attrs) setAssetAttrs(el, descriptor.attrs);
|
|
787
|
+
if (!el.isConnected) document.head.appendChild(el);
|
|
788
|
+
entry.element = el;
|
|
789
|
+
entry.loadState = undefined;
|
|
790
|
+
entry.loadPromise = undefined;
|
|
791
|
+
}
|
|
792
|
+
if (descriptor.type === "style") trackAssetLoad(entry, adopted);
|
|
793
|
+
return entry;
|
|
794
|
+
}
|
|
678
795
|
function acquireAsset(descriptor) {
|
|
679
796
|
const key = assetEntryKey(descriptor);
|
|
680
797
|
let entry = assetRegistry.get(key);
|
|
@@ -721,7 +838,12 @@ function acquireAsset(descriptor) {
|
|
|
721
838
|
entry.timer = null;
|
|
722
839
|
}
|
|
723
840
|
entry.count++;
|
|
724
|
-
if (!entry.element || !entry.element.isConnected)
|
|
841
|
+
if (!entry.element || !entry.element.isConnected) {
|
|
842
|
+
entry.element = mountAssetElement(descriptor);
|
|
843
|
+
} else if (descriptor.type === "style" && entry.element.getAttribute("rel") === "preload") {
|
|
844
|
+
entry.element.removeAttribute("as");
|
|
845
|
+
entry.element.setAttribute("rel", "stylesheet");
|
|
846
|
+
}
|
|
725
847
|
let released = false;
|
|
726
848
|
return () => {
|
|
727
849
|
if (released) return;
|
|
@@ -868,25 +990,9 @@ function headElementMatches(el, t) {
|
|
|
868
990
|
const children = t.props.children;
|
|
869
991
|
return (children == null ? "" : String(children)) === el.textContent;
|
|
870
992
|
}
|
|
871
|
-
function
|
|
872
|
-
if (tag === "link" && (props.rel === "stylesheet" || props.rel === "modulepreload")) {
|
|
873
|
-
const descriptor = {
|
|
874
|
-
type: props.rel === "stylesheet" ? "style" : "module",
|
|
875
|
-
href: props.href
|
|
876
|
-
};
|
|
877
|
-
let attrs = null;
|
|
878
|
-
for (const name in props) {
|
|
879
|
-
if (name === "rel" || name === "href") continue;
|
|
880
|
-
if (!HEAD_ATTR_NAME.test(name)) continue;
|
|
881
|
-
const v = props[name];
|
|
882
|
-
if (v == null || v === false) continue;
|
|
883
|
-
(attrs || (attrs = {}))[name] = v === true ? "" : String(v);
|
|
884
|
-
}
|
|
885
|
-
if (attrs) descriptor.attrs = attrs;
|
|
886
|
-
return acquireAsset(descriptor);
|
|
887
|
-
}
|
|
993
|
+
function mountHeadResource(tag, props) {
|
|
888
994
|
const identity = resourceIdentity(tag, props);
|
|
889
|
-
if (headMountedResources.has(identity)) return
|
|
995
|
+
if (headMountedResources.has(identity)) return;
|
|
890
996
|
headMountedResources.add(identity);
|
|
891
997
|
const url = props.href || props.src;
|
|
892
998
|
let el = null;
|
|
@@ -894,9 +1000,28 @@ function acquireHeadResource(tag, props) {
|
|
|
894
1000
|
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);
|
|
895
1001
|
}
|
|
896
1002
|
if (!el) document.head.appendChild(createHeadElement(tag, props));
|
|
897
|
-
return noopFn;
|
|
898
1003
|
}
|
|
899
|
-
function
|
|
1004
|
+
function gateHeadResource(props) {
|
|
1005
|
+
const descriptor = {
|
|
1006
|
+
type: props.rel === "stylesheet" ? "style" : "module",
|
|
1007
|
+
href: props.href
|
|
1008
|
+
};
|
|
1009
|
+
let gateable = props.rel === "stylesheet" && props.href != null;
|
|
1010
|
+
let attrs = null;
|
|
1011
|
+
for (const name in props) {
|
|
1012
|
+
if (name === "rel" || name === "href") continue;
|
|
1013
|
+
if (!STYLESHEET_FETCH_META.has(name)) gateable = false;
|
|
1014
|
+
if (!HEAD_ATTR_NAME.test(name)) continue;
|
|
1015
|
+
const v = props[name];
|
|
1016
|
+
if (v == null || v === false) continue;
|
|
1017
|
+
(attrs || (attrs = {}))[name] = v === true ? "" : String(v);
|
|
1018
|
+
}
|
|
1019
|
+
if (attrs) descriptor.attrs = attrs;
|
|
1020
|
+
effect(() => {
|
|
1021
|
+
const entry = warmAsset(descriptor);
|
|
1022
|
+
if (gateable && entry.loadState === "pending" && typeof waitAsset === "function") waitAsset(entry.loadPromise);
|
|
1023
|
+
}, () => acquireAsset(descriptor));
|
|
1024
|
+
}
|
|
900
1025
|
function useHead(tags) {
|
|
901
1026
|
initHeadRegistry();
|
|
902
1027
|
const reg = {
|
|
@@ -919,10 +1044,16 @@ function useHead(tags) {
|
|
|
919
1044
|
rel: cls.rel
|
|
920
1045
|
} : undefined);
|
|
921
1046
|
if (cls.resource) {
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
1047
|
+
if (desc.tag === "link" && (props.rel === "stylesheet" || props.rel === "modulepreload")) {
|
|
1048
|
+
gateHeadResource(props);
|
|
1049
|
+
} else if (desc.tag === "link") {
|
|
1050
|
+
mountHeadResource(desc.tag, props);
|
|
1051
|
+
} else {
|
|
1052
|
+
resources.push({
|
|
1053
|
+
tag: desc.tag,
|
|
1054
|
+
props
|
|
1055
|
+
});
|
|
1056
|
+
}
|
|
926
1057
|
} else {
|
|
927
1058
|
const key = evalHeadValue(desc.key);
|
|
928
1059
|
replaceable.push({
|
|
@@ -937,9 +1068,8 @@ function useHead(tags) {
|
|
|
937
1068
|
resources
|
|
938
1069
|
};
|
|
939
1070
|
}, evaluated => {
|
|
940
|
-
const releases = [];
|
|
941
1071
|
for (let i = 0; i < evaluated.resources.length; i++) {
|
|
942
|
-
|
|
1072
|
+
mountHeadResource(evaluated.resources[i].tag, evaluated.resources[i].props);
|
|
943
1073
|
}
|
|
944
1074
|
reg.tags = evaluated.replaceable;
|
|
945
1075
|
if (reg.seq < 0) reg.seq = ++headSeq;
|
|
@@ -948,7 +1078,6 @@ function useHead(tags) {
|
|
|
948
1078
|
return () => {
|
|
949
1079
|
const idx = headRegistrations.indexOf(reg);
|
|
950
1080
|
if (idx > -1) headRegistrations.splice(idx, 1);
|
|
951
|
-
for (let i = 0; i < releases.length; i++) releases[i]();
|
|
952
1081
|
scheduleHeadApply();
|
|
953
1082
|
};
|
|
954
1083
|
});
|
|
@@ -1384,7 +1513,13 @@ function gatherHydratable(element, root) {
|
|
|
1384
1513
|
for (let i = 0; i < templates.length; i++) {
|
|
1385
1514
|
const node = templates[i];
|
|
1386
1515
|
const key = node.getAttribute("_hk");
|
|
1387
|
-
if (
|
|
1516
|
+
if (root) {
|
|
1517
|
+
if (!key.startsWith(root)) continue;
|
|
1518
|
+
} else {
|
|
1519
|
+
const frame = node.closest("[data-fid]");
|
|
1520
|
+
if (frame && frame !== element && element.contains(frame)) continue;
|
|
1521
|
+
}
|
|
1522
|
+
if (!sharedConfig.registry.has(key)) sharedConfig.registry.set(key, node);
|
|
1388
1523
|
}
|
|
1389
1524
|
}
|
|
1390
1525
|
function getHydrationKey() {
|
|
@@ -1400,20 +1535,37 @@ function throwInBrowser(func) {
|
|
|
1400
1535
|
function renderToString(fn, options) {
|
|
1401
1536
|
throwInBrowser(renderToString);
|
|
1402
1537
|
}
|
|
1403
|
-
function renderToStringAsync(fn, options) {
|
|
1404
|
-
throwInBrowser(renderToStringAsync);
|
|
1405
|
-
}
|
|
1406
1538
|
function renderToStream(fn, options) {
|
|
1407
1539
|
throwInBrowser(renderToStream);
|
|
1408
1540
|
}
|
|
1541
|
+
function createResponseStub() {
|
|
1542
|
+
throwInBrowser(createResponseStub);
|
|
1543
|
+
}
|
|
1544
|
+
function createRequestEvent(request, init) {
|
|
1545
|
+
throwInBrowser(createRequestEvent);
|
|
1546
|
+
}
|
|
1547
|
+
function getExpectedRedirectStatus(response) {
|
|
1548
|
+
throwInBrowser(getExpectedRedirectStatus);
|
|
1549
|
+
}
|
|
1550
|
+
function createSSRResponse() {
|
|
1551
|
+
throwInBrowser(createSSRResponse);
|
|
1552
|
+
}
|
|
1553
|
+
function commitEventResponse(response, event) {
|
|
1554
|
+
throwInBrowser(commitEventResponse);
|
|
1555
|
+
}
|
|
1556
|
+
function composeMiddleware(middlewares) {
|
|
1557
|
+
throwInBrowser(composeMiddleware);
|
|
1558
|
+
}
|
|
1409
1559
|
function ssr(template, ...nodes) {}
|
|
1410
1560
|
function ssrElement(name, props, children, needsId) {}
|
|
1411
|
-
function
|
|
1561
|
+
function ssrClassName(value) {}
|
|
1412
1562
|
function ssrStyle(value) {}
|
|
1563
|
+
function ssrStyleProperty(name, value) {}
|
|
1413
1564
|
function ssrAttribute(key, value) {}
|
|
1565
|
+
function ssrGroup(fn, n) {}
|
|
1414
1566
|
function ssrHydrationKey() {}
|
|
1415
|
-
function resolveSSRNode(node) {}
|
|
1416
|
-
function escape(
|
|
1567
|
+
function resolveSSRNode(node, result, top) {}
|
|
1568
|
+
function escape(s, attr) {}
|
|
1417
1569
|
|
|
1418
1570
|
const ENVELOPE = Symbol.for("solid.ResponseEnvelope");
|
|
1419
1571
|
class ResponseEnvelope {
|
|
@@ -1430,13 +1582,38 @@ const HREF = Symbol.for("solid.Href");
|
|
|
1430
1582
|
function isHref(value) {
|
|
1431
1583
|
return !!(value && (typeof value === "object" || typeof value === "function") && value[HREF]);
|
|
1432
1584
|
}
|
|
1585
|
+
const SAFE_ERROR = Symbol.for("solid.SafeError");
|
|
1586
|
+
function markSafeError(error) {
|
|
1587
|
+
if (error && (typeof error === "object" || typeof error === "function")) {
|
|
1588
|
+
Object.defineProperty(error, SAFE_ERROR, {
|
|
1589
|
+
value: true,
|
|
1590
|
+
enumerable: false,
|
|
1591
|
+
configurable: true
|
|
1592
|
+
});
|
|
1593
|
+
}
|
|
1594
|
+
return error;
|
|
1595
|
+
}
|
|
1596
|
+
function isSafeError(value) {
|
|
1597
|
+
return !!(value && (typeof value === "object" || typeof value === "function") && value[SAFE_ERROR]);
|
|
1598
|
+
}
|
|
1433
1599
|
const REVALIDATE_HEADER = "X-Revalidate";
|
|
1434
1600
|
function initWithRevalidate(init) {
|
|
1435
1601
|
const {
|
|
1436
1602
|
revalidate,
|
|
1437
1603
|
...responseInit
|
|
1438
1604
|
} = init;
|
|
1439
|
-
|
|
1605
|
+
let headers;
|
|
1606
|
+
if (responseInit.headers && responseInit.headers.getSetCookie) {
|
|
1607
|
+
headers = new Headers();
|
|
1608
|
+
responseInit.headers.forEach((value, key) => {
|
|
1609
|
+
if (key !== "set-cookie") headers.append(key, value);
|
|
1610
|
+
});
|
|
1611
|
+
for (const cookie of responseInit.headers.getSetCookie()) {
|
|
1612
|
+
headers.append("Set-Cookie", cookie);
|
|
1613
|
+
}
|
|
1614
|
+
} else {
|
|
1615
|
+
headers = new Headers(responseInit.headers);
|
|
1616
|
+
}
|
|
1440
1617
|
revalidate !== undefined && headers.set(REVALIDATE_HEADER, revalidate.toString());
|
|
1441
1618
|
return {
|
|
1442
1619
|
responseInit,
|
|
@@ -1561,9 +1738,11 @@ function bindingOf(value) {
|
|
|
1561
1738
|
function dynamic(source) {
|
|
1562
1739
|
let latest = 0;
|
|
1563
1740
|
const sites = new Set();
|
|
1741
|
+
let deliveredAddress;
|
|
1564
1742
|
const resolveBinding = (next, prev) => {
|
|
1565
1743
|
const binding = bindingOf(next);
|
|
1566
1744
|
if (!binding) return next;
|
|
1745
|
+
deliveredAddress = binding.address;
|
|
1567
1746
|
const prevBinding = bindingOf(prev);
|
|
1568
1747
|
if (prevBinding && prevBinding.component === binding.component) {
|
|
1569
1748
|
for (const deliver of sites) deliver(binding.address);
|
|
@@ -1589,7 +1768,7 @@ function dynamic(source) {
|
|
|
1589
1768
|
{
|
|
1590
1769
|
const binding = bindingOf(component);
|
|
1591
1770
|
if (binding) {
|
|
1592
|
-
const [address, setAddress] = createSignal(binding.address);
|
|
1771
|
+
const [address, setAddress] = createSignal(deliveredAddress ?? binding.address);
|
|
1593
1772
|
sites.add(setAddress);
|
|
1594
1773
|
onCleanup(() => sites.delete(setAddress));
|
|
1595
1774
|
return untrack(() => binding.component(props, address));
|
|
@@ -1639,4 +1818,4 @@ _moduleUrl) {
|
|
|
1639
1818
|
function httpStatus(_code, _text) {}
|
|
1640
1819
|
function httpHeader(_name, _value, _options) {}
|
|
1641
1820
|
|
|
1642
|
-
export {
|
|
1821
|
+
export { ChildProperties, DOMElements, DOMWithState, DelegatedEvents, Dynamic, HREF, voidFn as HydrationScript, MathMLElements, Namespaces, Portal, REVALIDATE_HEADER, RawTextElements, RequestContext, ResponseEnvelope, SAFE_ERROR, SVGElements, VoidElements, acquireAsset, addEvent, applyRef, assign, claimElement, claimElementTree, className, clientOnly, commitEventResponse, composeMiddleware, createRequestEvent, createResponseStub, createSSRResponse, delegateEvents, dynamic, dynamicProperty, effect, escape, voidFn as generateHydrationScript, getDelegatedRoot, getExpectedRedirectStatus, getFirstChild, getHydrationKey, getNextElement, getNextMarker, getNextMatch, getNextSibling, voidFn as getRequestEvent, httpHeader, httpStatus, hydrate, insert, installHydrationRuntime, isDev, isHref, isResponseEnvelope, isSafeError, isServer, markSafeError, memo, mergeProps, parseCookieHeader, redirect, ref, registerDelegatedContainer, registerDelegatedRoot, registerElementClaim, reload, render, renderToStream, renderToString, resolveSSRNode, respond, runHydrationEvents, scope, serializeCookie, setAttribute, setAttributeNS, setProperty, setStyleProperty, spread, ssr, ssrAttribute, ssrClassName, ssrElement, ssrGroup, ssrHydrationKey, ssrStyle, ssrStyleProperty, style, template, unregisterDelegatedContainer, unregisterDelegatedRoot, useHead, warmAsset };
|