@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/dev.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, $DEVCOMP, onCleanup, enableHydration, enforceLoadingBoundary, 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
|
}
|
|
@@ -254,6 +266,43 @@ function resolveHead(groups) {
|
|
|
254
266
|
return winners;
|
|
255
267
|
}
|
|
256
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
|
+
|
|
257
306
|
const $$EVENT_OWNER = "_$DX_EVENT_OWNER";
|
|
258
307
|
const INNER_OWNED = {};
|
|
259
308
|
const delegatedEvents = new Set();
|
|
@@ -657,6 +706,9 @@ function findAssetElement(selector, attr, value) {
|
|
|
657
706
|
}
|
|
658
707
|
return null;
|
|
659
708
|
}
|
|
709
|
+
function setAssetAttrs(el, attrs) {
|
|
710
|
+
for (const name in attrs) el.setAttribute(name, attrs[name]);
|
|
711
|
+
}
|
|
660
712
|
function mountAssetElement(descriptor) {
|
|
661
713
|
let el;
|
|
662
714
|
if (descriptor.type === "inline-style") {
|
|
@@ -675,12 +727,77 @@ function mountAssetElement(descriptor) {
|
|
|
675
727
|
el.href = descriptor.href;
|
|
676
728
|
}
|
|
677
729
|
}
|
|
678
|
-
if (descriptor.attrs)
|
|
679
|
-
for (const name in descriptor.attrs) el.setAttribute(name, descriptor.attrs[name]);
|
|
680
|
-
}
|
|
730
|
+
if (descriptor.attrs) setAssetAttrs(el, descriptor.attrs);
|
|
681
731
|
if (!el.isConnected) document.head.appendChild(el);
|
|
682
732
|
return el;
|
|
683
733
|
}
|
|
734
|
+
const assetLoadSettled = /*#__PURE__*/Promise.resolve();
|
|
735
|
+
function trackAssetLoad(entry, adopted) {
|
|
736
|
+
if (entry.loadPromise) return;
|
|
737
|
+
const el = entry.element;
|
|
738
|
+
let settled = el.sheet != null;
|
|
739
|
+
if (!settled && adopted && typeof performance !== "undefined" && performance.getEntriesByName) {
|
|
740
|
+
settled = performance.getEntriesByName(el.href).length > 0;
|
|
741
|
+
}
|
|
742
|
+
if (settled) {
|
|
743
|
+
entry.loadState = "loaded";
|
|
744
|
+
entry.loadPromise = assetLoadSettled;
|
|
745
|
+
return;
|
|
746
|
+
}
|
|
747
|
+
entry.loadState = "pending";
|
|
748
|
+
entry.loadPromise = new Promise(resolve => {
|
|
749
|
+
const settle = state => {
|
|
750
|
+
entry.loadState = state;
|
|
751
|
+
resolve();
|
|
752
|
+
};
|
|
753
|
+
el.addEventListener("load", () => settle("loaded"), {
|
|
754
|
+
once: true
|
|
755
|
+
});
|
|
756
|
+
el.addEventListener("error", () => settle("errored"), {
|
|
757
|
+
once: true
|
|
758
|
+
});
|
|
759
|
+
});
|
|
760
|
+
}
|
|
761
|
+
function warmAsset(descriptor) {
|
|
762
|
+
if (descriptor.policy === "exclusive" || descriptor.type === "inline-style") return;
|
|
763
|
+
const key = assetEntryKey(descriptor);
|
|
764
|
+
let entry = assetRegistry.get(key);
|
|
765
|
+
if (!entry) {
|
|
766
|
+
entry = {
|
|
767
|
+
count: 0,
|
|
768
|
+
element: null,
|
|
769
|
+
timer: null
|
|
770
|
+
};
|
|
771
|
+
assetRegistry.set(key, entry);
|
|
772
|
+
}
|
|
773
|
+
let adopted = true;
|
|
774
|
+
if (!entry.element || !entry.element.isConnected) {
|
|
775
|
+
const rel = descriptor.type === "module" ? "modulepreload" : "stylesheet";
|
|
776
|
+
let el = findAssetElement(`link[rel="${rel}"]`, "href", descriptor.href);
|
|
777
|
+
if (!el && descriptor.type === "style") {
|
|
778
|
+
el = findAssetElement('link[rel="preload"][as="style"]', "href", descriptor.href);
|
|
779
|
+
}
|
|
780
|
+
if (!el) {
|
|
781
|
+
adopted = false;
|
|
782
|
+
el = document.createElement("link");
|
|
783
|
+
if (descriptor.type === "style") {
|
|
784
|
+
el.setAttribute("rel", "preload");
|
|
785
|
+
el.setAttribute("as", "style");
|
|
786
|
+
} else {
|
|
787
|
+
el.setAttribute("rel", "modulepreload");
|
|
788
|
+
}
|
|
789
|
+
el.setAttribute("href", descriptor.href);
|
|
790
|
+
if (!document.body) el.setAttribute("blocking", "render");
|
|
791
|
+
}
|
|
792
|
+
if (descriptor.attrs) setAssetAttrs(el, descriptor.attrs);
|
|
793
|
+
if (!el.isConnected) document.head.appendChild(el);
|
|
794
|
+
entry.element = el;
|
|
795
|
+
entry.loadState = undefined;
|
|
796
|
+
entry.loadPromise = undefined;
|
|
797
|
+
}
|
|
798
|
+
if (descriptor.type === "style") trackAssetLoad(entry, adopted);
|
|
799
|
+
return entry;
|
|
800
|
+
}
|
|
684
801
|
function acquireAsset(descriptor) {
|
|
685
802
|
const key = assetEntryKey(descriptor);
|
|
686
803
|
let entry = assetRegistry.get(key);
|
|
@@ -727,7 +844,12 @@ function acquireAsset(descriptor) {
|
|
|
727
844
|
entry.timer = null;
|
|
728
845
|
}
|
|
729
846
|
entry.count++;
|
|
730
|
-
if (!entry.element || !entry.element.isConnected)
|
|
847
|
+
if (!entry.element || !entry.element.isConnected) {
|
|
848
|
+
entry.element = mountAssetElement(descriptor);
|
|
849
|
+
} else if (descriptor.type === "style" && entry.element.getAttribute("rel") === "preload") {
|
|
850
|
+
entry.element.removeAttribute("as");
|
|
851
|
+
entry.element.setAttribute("rel", "stylesheet");
|
|
852
|
+
}
|
|
731
853
|
let released = false;
|
|
732
854
|
return () => {
|
|
733
855
|
if (released) return;
|
|
@@ -876,25 +998,9 @@ function headElementMatches(el, t) {
|
|
|
876
998
|
const children = t.props.children;
|
|
877
999
|
return (children == null ? "" : String(children)) === el.textContent;
|
|
878
1000
|
}
|
|
879
|
-
function
|
|
880
|
-
if (tag === "link" && (props.rel === "stylesheet" || props.rel === "modulepreload")) {
|
|
881
|
-
const descriptor = {
|
|
882
|
-
type: props.rel === "stylesheet" ? "style" : "module",
|
|
883
|
-
href: props.href
|
|
884
|
-
};
|
|
885
|
-
let attrs = null;
|
|
886
|
-
for (const name in props) {
|
|
887
|
-
if (name === "rel" || name === "href") continue;
|
|
888
|
-
if (!HEAD_ATTR_NAME.test(name)) continue;
|
|
889
|
-
const v = props[name];
|
|
890
|
-
if (v == null || v === false) continue;
|
|
891
|
-
(attrs || (attrs = {}))[name] = v === true ? "" : String(v);
|
|
892
|
-
}
|
|
893
|
-
if (attrs) descriptor.attrs = attrs;
|
|
894
|
-
return acquireAsset(descriptor);
|
|
895
|
-
}
|
|
1001
|
+
function mountHeadResource(tag, props) {
|
|
896
1002
|
const identity = resourceIdentity(tag, props);
|
|
897
|
-
if (headMountedResources.has(identity)) return
|
|
1003
|
+
if (headMountedResources.has(identity)) return;
|
|
898
1004
|
headMountedResources.add(identity);
|
|
899
1005
|
const url = props.href || props.src;
|
|
900
1006
|
let el = null;
|
|
@@ -902,9 +1008,28 @@ function acquireHeadResource(tag, props) {
|
|
|
902
1008
|
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);
|
|
903
1009
|
}
|
|
904
1010
|
if (!el) document.head.appendChild(createHeadElement(tag, props));
|
|
905
|
-
return noopFn;
|
|
906
1011
|
}
|
|
907
|
-
function
|
|
1012
|
+
function gateHeadResource(props) {
|
|
1013
|
+
const descriptor = {
|
|
1014
|
+
type: props.rel === "stylesheet" ? "style" : "module",
|
|
1015
|
+
href: props.href
|
|
1016
|
+
};
|
|
1017
|
+
let gateable = props.rel === "stylesheet" && props.href != null;
|
|
1018
|
+
let attrs = null;
|
|
1019
|
+
for (const name in props) {
|
|
1020
|
+
if (name === "rel" || name === "href") continue;
|
|
1021
|
+
if (!STYLESHEET_FETCH_META.has(name)) gateable = false;
|
|
1022
|
+
if (!HEAD_ATTR_NAME.test(name)) continue;
|
|
1023
|
+
const v = props[name];
|
|
1024
|
+
if (v == null || v === false) continue;
|
|
1025
|
+
(attrs || (attrs = {}))[name] = v === true ? "" : String(v);
|
|
1026
|
+
}
|
|
1027
|
+
if (attrs) descriptor.attrs = attrs;
|
|
1028
|
+
effect(() => {
|
|
1029
|
+
const entry = warmAsset(descriptor);
|
|
1030
|
+
if (gateable && entry.loadState === "pending" && typeof waitAsset === "function") waitAsset(entry.loadPromise);
|
|
1031
|
+
}, () => acquireAsset(descriptor));
|
|
1032
|
+
}
|
|
908
1033
|
function useHead(tags) {
|
|
909
1034
|
initHeadRegistry();
|
|
910
1035
|
const reg = {
|
|
@@ -928,10 +1053,16 @@ function useHead(tags) {
|
|
|
928
1053
|
rel: cls.rel
|
|
929
1054
|
} : undefined);
|
|
930
1055
|
if (cls.resource) {
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
1056
|
+
if (desc.tag === "link" && (props.rel === "stylesheet" || props.rel === "modulepreload")) {
|
|
1057
|
+
gateHeadResource(props);
|
|
1058
|
+
} else if (desc.tag === "link") {
|
|
1059
|
+
mountHeadResource(desc.tag, props);
|
|
1060
|
+
} else {
|
|
1061
|
+
resources.push({
|
|
1062
|
+
tag: desc.tag,
|
|
1063
|
+
props
|
|
1064
|
+
});
|
|
1065
|
+
}
|
|
935
1066
|
} else {
|
|
936
1067
|
const key = evalHeadValue(desc.key);
|
|
937
1068
|
replaceable.push({
|
|
@@ -946,9 +1077,8 @@ function useHead(tags) {
|
|
|
946
1077
|
resources
|
|
947
1078
|
};
|
|
948
1079
|
}, evaluated => {
|
|
949
|
-
const releases = [];
|
|
950
1080
|
for (let i = 0; i < evaluated.resources.length; i++) {
|
|
951
|
-
|
|
1081
|
+
mountHeadResource(evaluated.resources[i].tag, evaluated.resources[i].props);
|
|
952
1082
|
}
|
|
953
1083
|
reg.tags = evaluated.replaceable;
|
|
954
1084
|
if (reg.seq < 0) reg.seq = ++headSeq;
|
|
@@ -957,7 +1087,6 @@ function useHead(tags) {
|
|
|
957
1087
|
return () => {
|
|
958
1088
|
const idx = headRegistrations.indexOf(reg);
|
|
959
1089
|
if (idx > -1) headRegistrations.splice(idx, 1);
|
|
960
|
-
for (let i = 0; i < releases.length; i++) releases[i]();
|
|
961
1090
|
scheduleHeadApply();
|
|
962
1091
|
};
|
|
963
1092
|
});
|
|
@@ -1445,7 +1574,13 @@ function gatherHydratable(element, root) {
|
|
|
1445
1574
|
for (let i = 0; i < templates.length; i++) {
|
|
1446
1575
|
const node = templates[i];
|
|
1447
1576
|
const key = node.getAttribute("_hk");
|
|
1448
|
-
if (
|
|
1577
|
+
if (root) {
|
|
1578
|
+
if (!key.startsWith(root)) continue;
|
|
1579
|
+
} else {
|
|
1580
|
+
const frame = node.closest("[data-fid]");
|
|
1581
|
+
if (frame && frame !== element && element.contains(frame)) continue;
|
|
1582
|
+
}
|
|
1583
|
+
if (!sharedConfig.registry.has(key)) sharedConfig.registry.set(key, node);
|
|
1449
1584
|
}
|
|
1450
1585
|
}
|
|
1451
1586
|
function getHydrationKey() {
|
|
@@ -1461,20 +1596,37 @@ function throwInBrowser(func) {
|
|
|
1461
1596
|
function renderToString(fn, options) {
|
|
1462
1597
|
throwInBrowser(renderToString);
|
|
1463
1598
|
}
|
|
1464
|
-
function renderToStringAsync(fn, options) {
|
|
1465
|
-
throwInBrowser(renderToStringAsync);
|
|
1466
|
-
}
|
|
1467
1599
|
function renderToStream(fn, options) {
|
|
1468
1600
|
throwInBrowser(renderToStream);
|
|
1469
1601
|
}
|
|
1602
|
+
function createResponseStub() {
|
|
1603
|
+
throwInBrowser(createResponseStub);
|
|
1604
|
+
}
|
|
1605
|
+
function createRequestEvent(request, init) {
|
|
1606
|
+
throwInBrowser(createRequestEvent);
|
|
1607
|
+
}
|
|
1608
|
+
function getExpectedRedirectStatus(response) {
|
|
1609
|
+
throwInBrowser(getExpectedRedirectStatus);
|
|
1610
|
+
}
|
|
1611
|
+
function createSSRResponse() {
|
|
1612
|
+
throwInBrowser(createSSRResponse);
|
|
1613
|
+
}
|
|
1614
|
+
function commitEventResponse(response, event) {
|
|
1615
|
+
throwInBrowser(commitEventResponse);
|
|
1616
|
+
}
|
|
1617
|
+
function composeMiddleware(middlewares) {
|
|
1618
|
+
throwInBrowser(composeMiddleware);
|
|
1619
|
+
}
|
|
1470
1620
|
function ssr(template, ...nodes) {}
|
|
1471
1621
|
function ssrElement(name, props, children, needsId) {}
|
|
1472
|
-
function
|
|
1622
|
+
function ssrClassName(value) {}
|
|
1473
1623
|
function ssrStyle(value) {}
|
|
1624
|
+
function ssrStyleProperty(name, value) {}
|
|
1474
1625
|
function ssrAttribute(key, value) {}
|
|
1626
|
+
function ssrGroup(fn, n) {}
|
|
1475
1627
|
function ssrHydrationKey() {}
|
|
1476
|
-
function resolveSSRNode(node) {}
|
|
1477
|
-
function escape(
|
|
1628
|
+
function resolveSSRNode(node, result, top) {}
|
|
1629
|
+
function escape(s, attr) {}
|
|
1478
1630
|
|
|
1479
1631
|
const ENVELOPE = Symbol.for("solid.ResponseEnvelope");
|
|
1480
1632
|
class ResponseEnvelope {
|
|
@@ -1491,13 +1643,38 @@ const HREF = Symbol.for("solid.Href");
|
|
|
1491
1643
|
function isHref(value) {
|
|
1492
1644
|
return !!(value && (typeof value === "object" || typeof value === "function") && value[HREF]);
|
|
1493
1645
|
}
|
|
1646
|
+
const SAFE_ERROR = Symbol.for("solid.SafeError");
|
|
1647
|
+
function markSafeError(error) {
|
|
1648
|
+
if (error && (typeof error === "object" || typeof error === "function")) {
|
|
1649
|
+
Object.defineProperty(error, SAFE_ERROR, {
|
|
1650
|
+
value: true,
|
|
1651
|
+
enumerable: false,
|
|
1652
|
+
configurable: true
|
|
1653
|
+
});
|
|
1654
|
+
}
|
|
1655
|
+
return error;
|
|
1656
|
+
}
|
|
1657
|
+
function isSafeError(value) {
|
|
1658
|
+
return !!(value && (typeof value === "object" || typeof value === "function") && value[SAFE_ERROR]);
|
|
1659
|
+
}
|
|
1494
1660
|
const REVALIDATE_HEADER = "X-Revalidate";
|
|
1495
1661
|
function initWithRevalidate(init) {
|
|
1496
1662
|
const {
|
|
1497
1663
|
revalidate,
|
|
1498
1664
|
...responseInit
|
|
1499
1665
|
} = init;
|
|
1500
|
-
|
|
1666
|
+
let headers;
|
|
1667
|
+
if (responseInit.headers && responseInit.headers.getSetCookie) {
|
|
1668
|
+
headers = new Headers();
|
|
1669
|
+
responseInit.headers.forEach((value, key) => {
|
|
1670
|
+
if (key !== "set-cookie") headers.append(key, value);
|
|
1671
|
+
});
|
|
1672
|
+
for (const cookie of responseInit.headers.getSetCookie()) {
|
|
1673
|
+
headers.append("Set-Cookie", cookie);
|
|
1674
|
+
}
|
|
1675
|
+
} else {
|
|
1676
|
+
headers = new Headers(responseInit.headers);
|
|
1677
|
+
}
|
|
1501
1678
|
revalidate !== undefined && headers.set(REVALIDATE_HEADER, revalidate.toString());
|
|
1502
1679
|
return {
|
|
1503
1680
|
responseInit,
|
|
@@ -1624,9 +1801,11 @@ function bindingOf(value) {
|
|
|
1624
1801
|
function dynamic(source) {
|
|
1625
1802
|
let latest = 0;
|
|
1626
1803
|
const sites = new Set();
|
|
1804
|
+
let deliveredAddress;
|
|
1627
1805
|
const resolveBinding = (next, prev) => {
|
|
1628
1806
|
const binding = bindingOf(next);
|
|
1629
1807
|
if (!binding) return next;
|
|
1808
|
+
deliveredAddress = binding.address;
|
|
1630
1809
|
const prevBinding = bindingOf(prev);
|
|
1631
1810
|
if (prevBinding && prevBinding.component === binding.component) {
|
|
1632
1811
|
for (const deliver of sites) deliver(binding.address);
|
|
@@ -1655,7 +1834,7 @@ function dynamic(source) {
|
|
|
1655
1834
|
});
|
|
1656
1835
|
const binding = bindingOf(component);
|
|
1657
1836
|
if (binding) {
|
|
1658
|
-
const [address, setAddress] = createSignal(binding.address);
|
|
1837
|
+
const [address, setAddress] = createSignal(deliveredAddress ?? binding.address);
|
|
1659
1838
|
sites.add(setAddress);
|
|
1660
1839
|
onCleanup(() => sites.delete(setAddress));
|
|
1661
1840
|
return untrack(() => binding.component(props, address));
|
|
@@ -1705,4 +1884,4 @@ _moduleUrl) {
|
|
|
1705
1884
|
function httpStatus(_code, _text) {}
|
|
1706
1885
|
function httpHeader(_name, _value, _options) {}
|
|
1707
1886
|
|
|
1708
|
-
export {
|
|
1887
|
+
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 };
|