@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.
Files changed (73) hide show
  1. package/README.md +1 -6
  2. package/dist/dev.cjs +285 -60
  3. package/dist/dev.js +267 -57
  4. package/dist/server.cjs +1148 -176
  5. package/dist/server.js +1133 -175
  6. package/dist/web.cjs +285 -60
  7. package/dist/web.js +267 -57
  8. package/frames/dist/client.cjs +397 -175
  9. package/frames/dist/client.dev.cjs +401 -175
  10. package/frames/dist/client.dev.js +399 -173
  11. package/frames/dist/client.js +395 -173
  12. package/frames/dist/server.cjs +1424 -277
  13. package/frames/dist/server.js +1426 -280
  14. package/package.json +69 -7
  15. package/serialization/decode/package.json +20 -0
  16. package/serialization/dist/decode.cjs +110 -0
  17. package/serialization/dist/decode.js +104 -0
  18. package/serialization/dist/serialization.cjs +106 -43
  19. package/serialization/dist/serialization.js +100 -44
  20. package/serialization/types/index.d.ts +85 -60
  21. package/serialization/types/serializer-decode.d.ts +182 -0
  22. package/serialization/types-cjs/index.d.cts +85 -60
  23. package/serialization/types-cjs/serializer-decode.d.cts +182 -0
  24. package/server-functions/dist/client.cjs +131 -98
  25. package/server-functions/dist/client.js +131 -99
  26. package/server-functions/dist/rich-args.cjs +11 -0
  27. package/server-functions/dist/rich-args.js +9 -0
  28. package/server-functions/dist/server.cjs +367 -194
  29. package/server-functions/dist/server.dev.cjs +1077 -0
  30. package/server-functions/dist/server.dev.js +1045 -0
  31. package/server-functions/dist/server.js +365 -195
  32. package/server-functions/package.json +10 -0
  33. package/server-functions/rich-args/package.json +20 -0
  34. package/storage/types/index.d.ts +1 -1
  35. package/storage/types-cjs/index.d.cts +1 -1
  36. package/types/client.d.ts +149 -6
  37. package/types/cookies.d.ts +93 -0
  38. package/types/core.d.ts +4 -2
  39. package/types/frames/client.d.ts +15 -1
  40. package/types/frames/frame-client.d.ts +63 -7
  41. package/types/frames/frame-sink.d.ts +26 -3
  42. package/types/frames/frame-transport.d.ts +40 -8
  43. package/types/frames/serializer.d.ts +85 -60
  44. package/types/frames/server.d.ts +22 -0
  45. package/types/index.d.ts +2 -3
  46. package/types/response.d.ts +45 -0
  47. package/types/serializer-decode.d.ts +182 -0
  48. package/types/serializer.d.ts +85 -60
  49. package/types/server-functions/client.d.ts +2 -1
  50. package/types/server-functions/rich-args.d.ts +10 -0
  51. package/types/server-functions/server.d.ts +99 -1
  52. package/types/server-functions/shared.d.ts +79 -1
  53. package/types/server-mock.d.ts +171 -59
  54. package/types/server.d.ts +209 -37
  55. package/types-cjs/client.d.cts +149 -6
  56. package/types-cjs/cookies.d.cts +93 -0
  57. package/types-cjs/core.d.cts +4 -2
  58. package/types-cjs/frames/client.d.cts +15 -1
  59. package/types-cjs/frames/frame-client.d.cts +63 -7
  60. package/types-cjs/frames/frame-sink.d.cts +26 -3
  61. package/types-cjs/frames/frame-transport.d.cts +40 -8
  62. package/types-cjs/frames/serializer.d.cts +85 -60
  63. package/types-cjs/frames/server.d.cts +22 -0
  64. package/types-cjs/index.d.cts +2 -3
  65. package/types-cjs/response.d.cts +45 -0
  66. package/types-cjs/serializer-decode.d.cts +182 -0
  67. package/types-cjs/serializer.d.cts +85 -60
  68. package/types-cjs/server-functions/client.d.cts +2 -1
  69. package/types-cjs/server-functions/rich-args.d.cts +10 -0
  70. package/types-cjs/server-functions/server.d.cts +99 -1
  71. package/types-cjs/server-functions/shared.d.cts +79 -1
  72. package/types-cjs/server-mock.d.cts +171 -59
  73. package/types-cjs/server.d.cts +209 -37
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,
@@ -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
  }
@@ -254,6 +266,64 @@ 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
+ const FLASH_COOKIE = "flash";
306
+ const FLASH_MATCHER = new RegExp(`(?:^|;\\s*)${FLASH_COOKIE}=([^;]+)`);
307
+ function hasFlashCookie(cookieHeader) {
308
+ return !!cookieHeader && FLASH_MATCHER.test(cookieHeader);
309
+ }
310
+ function clearFlashCookie() {
311
+ return `${FLASH_COOKIE}=; Max-Age=0; Path=/`;
312
+ }
313
+
314
+ const SERVER_FUNCTION_METADATA = Symbol.for("solid.ServerFunctionMetadata");
315
+ function getServerFunctionMetadata(fn) {
316
+ if (typeof fn !== "function") return undefined;
317
+ return fn[SERVER_FUNCTION_METADATA] || undefined;
318
+ }
319
+ function isServerFunction(fn) {
320
+ return typeof fn === "function" && !!fn[SERVER_FUNCTION_METADATA];
321
+ }
322
+ const SERVER_FUNCTION_RPC = Symbol.for("solid.ServerFunctionRPC");
323
+ function getServerFunctionRPC() {
324
+ return globalThis[SERVER_FUNCTION_RPC];
325
+ }
326
+
257
327
  const $$EVENT_OWNER = "_$DX_EVENT_OWNER";
258
328
  const INNER_OWNED = {};
259
329
  const delegatedEvents = new Set();
@@ -603,8 +673,7 @@ function insert(parent, accessor, marker, initial, options) {
603
673
  const value = normalize(accessor(), current, multi, true);
604
674
  if (typeof value !== "function") return value;
605
675
  effect(() => (hydrationRt !== null && (current = hydrationRt.reclaimRegion(current, parent, marker)), normalize(value, current, multi)), inner => {
606
- insertExpression(parent, inner, current, marker);
607
- current = inner;
676
+ current = insertExpression(parent, inner, current, marker);
608
677
  host && tagHost(current, host);
609
678
  }, prev !== undefined && !(options && options.schedule) ? {
610
679
  ...options,
@@ -613,8 +682,7 @@ function insert(parent, accessor, marker, initial, options) {
613
682
  return INNER_OWNED;
614
683
  }, value => {
615
684
  if (value === INNER_OWNED) return;
616
- insertExpression(parent, value, current, marker);
617
- current = value;
685
+ current = insertExpression(parent, value, current, marker);
618
686
  host && tagHost(current, host);
619
687
  },
620
688
  accessor.$s ? options ? {
@@ -652,6 +720,9 @@ function findAssetElement(selector, attr, value) {
652
720
  }
653
721
  return null;
654
722
  }
723
+ function setAssetAttrs(el, attrs) {
724
+ for (const name in attrs) el.setAttribute(name, attrs[name]);
725
+ }
655
726
  function mountAssetElement(descriptor) {
656
727
  let el;
657
728
  if (descriptor.type === "inline-style") {
@@ -670,12 +741,77 @@ function mountAssetElement(descriptor) {
670
741
  el.href = descriptor.href;
671
742
  }
672
743
  }
673
- if (descriptor.attrs) {
674
- for (const name in descriptor.attrs) el.setAttribute(name, descriptor.attrs[name]);
675
- }
744
+ if (descriptor.attrs) setAssetAttrs(el, descriptor.attrs);
676
745
  if (!el.isConnected) document.head.appendChild(el);
677
746
  return el;
678
747
  }
748
+ const assetLoadSettled = /*#__PURE__*/Promise.resolve();
749
+ function trackAssetLoad(entry, adopted) {
750
+ if (entry.loadPromise) return;
751
+ const el = entry.element;
752
+ let settled = el.sheet != null;
753
+ if (!settled && adopted && typeof performance !== "undefined" && performance.getEntriesByName) {
754
+ settled = performance.getEntriesByName(el.href).length > 0;
755
+ }
756
+ if (settled) {
757
+ entry.loadState = "loaded";
758
+ entry.loadPromise = assetLoadSettled;
759
+ return;
760
+ }
761
+ entry.loadState = "pending";
762
+ entry.loadPromise = new Promise(resolve => {
763
+ const settle = state => {
764
+ entry.loadState = state;
765
+ resolve();
766
+ };
767
+ el.addEventListener("load", () => settle("loaded"), {
768
+ once: true
769
+ });
770
+ el.addEventListener("error", () => settle("errored"), {
771
+ once: true
772
+ });
773
+ });
774
+ }
775
+ function warmAsset(descriptor) {
776
+ if (descriptor.policy === "exclusive" || descriptor.type === "inline-style") return;
777
+ const key = assetEntryKey(descriptor);
778
+ let entry = assetRegistry.get(key);
779
+ if (!entry) {
780
+ entry = {
781
+ count: 0,
782
+ element: null,
783
+ timer: null
784
+ };
785
+ assetRegistry.set(key, entry);
786
+ }
787
+ let adopted = true;
788
+ if (!entry.element || !entry.element.isConnected) {
789
+ const rel = descriptor.type === "module" ? "modulepreload" : "stylesheet";
790
+ let el = findAssetElement(`link[rel="${rel}"]`, "href", descriptor.href);
791
+ if (!el && descriptor.type === "style") {
792
+ el = findAssetElement('link[rel="preload"][as="style"]', "href", descriptor.href);
793
+ }
794
+ if (!el) {
795
+ adopted = false;
796
+ el = document.createElement("link");
797
+ if (descriptor.type === "style") {
798
+ el.setAttribute("rel", "preload");
799
+ el.setAttribute("as", "style");
800
+ } else {
801
+ el.setAttribute("rel", "modulepreload");
802
+ }
803
+ el.setAttribute("href", descriptor.href);
804
+ if (!document.body) el.setAttribute("blocking", "render");
805
+ }
806
+ if (descriptor.attrs) setAssetAttrs(el, descriptor.attrs);
807
+ if (!el.isConnected) document.head.appendChild(el);
808
+ entry.element = el;
809
+ entry.loadState = undefined;
810
+ entry.loadPromise = undefined;
811
+ }
812
+ if (descriptor.type === "style") trackAssetLoad(entry, adopted);
813
+ return entry;
814
+ }
679
815
  function acquireAsset(descriptor) {
680
816
  const key = assetEntryKey(descriptor);
681
817
  let entry = assetRegistry.get(key);
@@ -722,7 +858,12 @@ function acquireAsset(descriptor) {
722
858
  entry.timer = null;
723
859
  }
724
860
  entry.count++;
725
- if (!entry.element || !entry.element.isConnected) entry.element = mountAssetElement(descriptor);
861
+ if (!entry.element || !entry.element.isConnected) {
862
+ entry.element = mountAssetElement(descriptor);
863
+ } else if (descriptor.type === "style" && entry.element.getAttribute("rel") === "preload") {
864
+ entry.element.removeAttribute("as");
865
+ entry.element.setAttribute("rel", "stylesheet");
866
+ }
726
867
  let released = false;
727
868
  return () => {
728
869
  if (released) return;
@@ -869,25 +1010,9 @@ function headElementMatches(el, t) {
869
1010
  const children = t.props.children;
870
1011
  return (children == null ? "" : String(children)) === el.textContent;
871
1012
  }
872
- function acquireHeadResource(tag, props) {
873
- if (tag === "link" && (props.rel === "stylesheet" || props.rel === "modulepreload")) {
874
- const descriptor = {
875
- type: props.rel === "stylesheet" ? "style" : "module",
876
- href: props.href
877
- };
878
- let attrs = null;
879
- for (const name in props) {
880
- if (name === "rel" || name === "href") continue;
881
- if (!HEAD_ATTR_NAME.test(name)) continue;
882
- const v = props[name];
883
- if (v == null || v === false) continue;
884
- (attrs || (attrs = {}))[name] = v === true ? "" : String(v);
885
- }
886
- if (attrs) descriptor.attrs = attrs;
887
- return acquireAsset(descriptor);
888
- }
1013
+ function mountHeadResource(tag, props) {
889
1014
  const identity = resourceIdentity(tag, props);
890
- if (headMountedResources.has(identity)) return noopFn;
1015
+ if (headMountedResources.has(identity)) return;
891
1016
  headMountedResources.add(identity);
892
1017
  const url = props.href || props.src;
893
1018
  let el = null;
@@ -895,9 +1020,28 @@ function acquireHeadResource(tag, props) {
895
1020
  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);
896
1021
  }
897
1022
  if (!el) document.head.appendChild(createHeadElement(tag, props));
898
- return noopFn;
899
1023
  }
900
- function noopFn() {}
1024
+ function gateHeadResource(props) {
1025
+ const descriptor = {
1026
+ type: props.rel === "stylesheet" ? "style" : "module",
1027
+ href: props.href
1028
+ };
1029
+ let gateable = props.rel === "stylesheet" && props.href != null;
1030
+ let attrs = null;
1031
+ for (const name in props) {
1032
+ if (name === "rel" || name === "href") continue;
1033
+ if (!STYLESHEET_FETCH_META.has(name)) gateable = false;
1034
+ if (!HEAD_ATTR_NAME.test(name)) continue;
1035
+ const v = props[name];
1036
+ if (v == null || v === false) continue;
1037
+ (attrs || (attrs = {}))[name] = v === true ? "" : String(v);
1038
+ }
1039
+ if (attrs) descriptor.attrs = attrs;
1040
+ effect(() => {
1041
+ const entry = warmAsset(descriptor);
1042
+ if (gateable && entry.loadState === "pending" && typeof waitAsset === "function") waitAsset(entry.loadPromise);
1043
+ }, () => acquireAsset(descriptor));
1044
+ }
901
1045
  function useHead(tags) {
902
1046
  initHeadRegistry();
903
1047
  const reg = {
@@ -920,10 +1064,16 @@ function useHead(tags) {
920
1064
  rel: cls.rel
921
1065
  } : undefined);
922
1066
  if (cls.resource) {
923
- resources.push({
924
- tag: desc.tag,
925
- props
926
- });
1067
+ if (desc.tag === "link" && (props.rel === "stylesheet" || props.rel === "modulepreload")) {
1068
+ gateHeadResource(props);
1069
+ } else if (desc.tag === "link") {
1070
+ mountHeadResource(desc.tag, props);
1071
+ } else {
1072
+ resources.push({
1073
+ tag: desc.tag,
1074
+ props
1075
+ });
1076
+ }
927
1077
  } else {
928
1078
  const key = evalHeadValue(desc.key);
929
1079
  replaceable.push({
@@ -938,9 +1088,8 @@ function useHead(tags) {
938
1088
  resources
939
1089
  };
940
1090
  }, evaluated => {
941
- const releases = [];
942
1091
  for (let i = 0; i < evaluated.resources.length; i++) {
943
- releases.push(acquireHeadResource(evaluated.resources[i].tag, evaluated.resources[i].props));
1092
+ mountHeadResource(evaluated.resources[i].tag, evaluated.resources[i].props);
944
1093
  }
945
1094
  reg.tags = evaluated.replaceable;
946
1095
  if (reg.seq < 0) reg.seq = ++headSeq;
@@ -949,7 +1098,6 @@ function useHead(tags) {
949
1098
  return () => {
950
1099
  const idx = headRegistrations.indexOf(reg);
951
1100
  if (idx > -1) headRegistrations.splice(idx, 1);
952
- for (let i = 0; i < releases.length; i++) releases[i]();
953
1101
  scheduleHeadApply();
954
1102
  };
955
1103
  });
@@ -1263,8 +1411,11 @@ function eventHandler(e, container, state) {
1263
1411
  retarget(oriTarget);
1264
1412
  }
1265
1413
  function insertExpression(parent, value, current, marker) {
1266
- if (hydrationRt !== null && isHydrating(parent)) return;
1267
- if (value === current) return;
1414
+ if (hydrationRt !== null && isHydrating(parent)) {
1415
+ if (value && value !== current) for (const n of Array.isArray(value) ? value : [value]) if (n && n.nodeType && !isHydrating(n)) return current;
1416
+ return value;
1417
+ }
1418
+ if (value === current) return value;
1268
1419
  const t = typeof value,
1269
1420
  multi = marker !== undefined;
1270
1421
  if (t === "string" || t === "number") {
@@ -1303,6 +1454,7 @@ function insertExpression(parent, value, current, marker) {
1303
1454
  appendNodes(parent, value);
1304
1455
  }
1305
1456
  } else ;
1457
+ return value;
1306
1458
  }
1307
1459
  function normalize(value, current, multi, doNotUnwrap) {
1308
1460
  value = solidJs.flatten(value, {
@@ -1385,7 +1537,13 @@ function gatherHydratable(element, root) {
1385
1537
  for (let i = 0; i < templates.length; i++) {
1386
1538
  const node = templates[i];
1387
1539
  const key = node.getAttribute("_hk");
1388
- if ((!root || key.startsWith(root)) && !solidJs.sharedConfig.registry.has(key)) solidJs.sharedConfig.registry.set(key, node);
1540
+ if (root) {
1541
+ if (!key.startsWith(root)) continue;
1542
+ } else {
1543
+ const frame = node.closest("[data-fid]");
1544
+ if (frame && frame !== element && element.contains(frame)) continue;
1545
+ }
1546
+ if (!solidJs.sharedConfig.registry.has(key)) solidJs.sharedConfig.registry.set(key, node);
1389
1547
  }
1390
1548
  }
1391
1549
  function getHydrationKey() {
@@ -1401,29 +1559,50 @@ function throwInBrowser(func) {
1401
1559
  function renderToString(fn, options) {
1402
1560
  throwInBrowser(renderToString);
1403
1561
  }
1404
- function renderToStringAsync(fn, options) {
1405
- throwInBrowser(renderToStringAsync);
1406
- }
1407
1562
  function renderToStream(fn, options) {
1408
1563
  throwInBrowser(renderToStream);
1409
1564
  }
1565
+ function createResponseStub() {
1566
+ throwInBrowser(createResponseStub);
1567
+ }
1568
+ function createRequestEvent(request, init) {
1569
+ throwInBrowser(createRequestEvent);
1570
+ }
1571
+ function getExpectedRedirectStatus(response) {
1572
+ throwInBrowser(getExpectedRedirectStatus);
1573
+ }
1574
+ function createSSRResponse() {
1575
+ throwInBrowser(createSSRResponse);
1576
+ }
1577
+ function commitEventResponse(response, event) {
1578
+ throwInBrowser(commitEventResponse);
1579
+ }
1580
+ function composeMiddleware(middlewares) {
1581
+ throwInBrowser(composeMiddleware);
1582
+ }
1410
1583
  function ssr(template, ...nodes) {}
1411
1584
  function ssrElement(name, props, children, needsId) {}
1412
- function ssrClassList(value) {}
1585
+ function ssrClassName(value) {}
1413
1586
  function ssrStyle(value) {}
1587
+ function ssrStyleProperty(name, value) {}
1414
1588
  function ssrAttribute(key, value) {}
1589
+ function ssrGroup(fn, n) {}
1415
1590
  function ssrHydrationKey() {}
1416
- function resolveSSRNode(node) {}
1417
- function escape(html) {}
1591
+ function resolveSSRNode(node, result, top) {}
1592
+ function escape(s, attr) {}
1418
1593
 
1419
1594
  const ENVELOPE = Symbol.for("solid.ResponseEnvelope");
1420
- class ResponseEnvelope {
1421
- constructor(response, value) {
1422
- this.response = response;
1423
- this.value = value;
1595
+ // PURE-annotated factory (same convention as solid's MockPromise): the brand
1596
+ const ResponseEnvelope = /* @__PURE__ */(() => {
1597
+ class ResponseEnvelope {
1598
+ constructor(response, value) {
1599
+ this.response = response;
1600
+ this.value = value;
1601
+ }
1424
1602
  }
1425
- }
1426
- ResponseEnvelope.prototype[ENVELOPE] = true;
1603
+ ResponseEnvelope.prototype[ENVELOPE] = true;
1604
+ return ResponseEnvelope;
1605
+ })();
1427
1606
  function isResponseEnvelope(value) {
1428
1607
  return !!(value && typeof value === "object" && value[ENVELOPE]);
1429
1608
  }
@@ -1431,13 +1610,38 @@ const HREF = Symbol.for("solid.Href");
1431
1610
  function isHref(value) {
1432
1611
  return !!(value && (typeof value === "object" || typeof value === "function") && value[HREF]);
1433
1612
  }
1613
+ const SAFE_ERROR = Symbol.for("solid.SafeError");
1614
+ function markSafeError(error) {
1615
+ if (error && (typeof error === "object" || typeof error === "function")) {
1616
+ Object.defineProperty(error, SAFE_ERROR, {
1617
+ value: true,
1618
+ enumerable: false,
1619
+ configurable: true
1620
+ });
1621
+ }
1622
+ return error;
1623
+ }
1624
+ function isSafeError(value) {
1625
+ return !!(value && (typeof value === "object" || typeof value === "function") && value[SAFE_ERROR]);
1626
+ }
1434
1627
  const REVALIDATE_HEADER = "X-Revalidate";
1435
1628
  function initWithRevalidate(init) {
1436
1629
  const {
1437
1630
  revalidate,
1438
1631
  ...responseInit
1439
1632
  } = init;
1440
- const headers = new Headers(responseInit.headers);
1633
+ let headers;
1634
+ if (responseInit.headers && responseInit.headers.getSetCookie) {
1635
+ headers = new Headers();
1636
+ responseInit.headers.forEach((value, key) => {
1637
+ if (key !== "set-cookie") headers.append(key, value);
1638
+ });
1639
+ for (const cookie of responseInit.headers.getSetCookie()) {
1640
+ headers.append("Set-Cookie", cookie);
1641
+ }
1642
+ } else {
1643
+ headers = new Headers(responseInit.headers);
1644
+ }
1441
1645
  revalidate !== undefined && headers.set(REVALIDATE_HEADER, revalidate.toString());
1442
1646
  return {
1443
1647
  responseInit,
@@ -1514,7 +1718,8 @@ function portalImpl(props) {
1514
1718
  endMarker = document.createTextNode(""),
1515
1719
  mount = () => props.mount || document.body,
1516
1720
  content = solidJs.createMemo(() => [startMarker, props.children], {
1517
- ssrSource: "client"
1721
+ ssrSource: "client",
1722
+ loadingValue: undefined
1518
1723
  });
1519
1724
  solidJs.createRenderEffect(
1520
1725
  () => [mount(), content(), solidJs.getOwner()], ([, c, owner]) => {
@@ -1551,7 +1756,8 @@ function portalImpl(props) {
1551
1756
  ssrSource: "client"
1552
1757
  });
1553
1758
  if (solidJs.sharedConfig.hydrating) return solidJs.createMemo(() => treeMarker, {
1554
- ssrSource: "client"
1759
+ ssrSource: "client",
1760
+ loadingValue: undefined
1555
1761
  });
1556
1762
  return treeMarker;
1557
1763
  }
@@ -1562,9 +1768,11 @@ function bindingOf(value) {
1562
1768
  function dynamic(source) {
1563
1769
  let latest = 0;
1564
1770
  const sites = new Set();
1771
+ let deliveredAddress;
1565
1772
  const resolveBinding = (next, prev) => {
1566
1773
  const binding = bindingOf(next);
1567
1774
  if (!binding) return next;
1775
+ deliveredAddress = binding.address;
1568
1776
  const prevBinding = bindingOf(prev);
1569
1777
  if (prevBinding && prevBinding.component === binding.component) {
1570
1778
  for (const deliver of sites) deliver(binding.address);
@@ -1590,7 +1798,7 @@ function dynamic(source) {
1590
1798
  {
1591
1799
  const binding = bindingOf(component);
1592
1800
  if (binding) {
1593
- const [address, setAddress] = solidJs.createSignal(binding.address);
1801
+ const [address, setAddress] = solidJs.createSignal(deliveredAddress ?? binding.address);
1594
1802
  sites.add(setAddress);
1595
1803
  solidJs.onCleanup(() => sites.delete(setAddress));
1596
1804
  return solidJs.untrack(() => binding.component(props, address));
@@ -1633,7 +1841,9 @@ _moduleUrl) {
1633
1841
  if ((Comp = solidJs.untrack(comp)) && !solidJs.sharedConfig.hydrating) return Comp(rest);
1634
1842
  const [mounted, setMounted] = solidJs.createSignal(!solidJs.sharedConfig.hydrating);
1635
1843
  const gate = solidJs.createMemo(() => (Comp = comp(), m = mounted(), solidJs.untrack(() => Comp && m ? Comp(rest) : props.fallback)));
1636
- solidJs.sharedConfig.onHydrationEnd(() => setMounted(true));
1844
+ const onHydrationEnd = solidJs.sharedConfig.onHydrationEnd;
1845
+ const release = () => setMounted(true);
1846
+ onHydrationEnd ? onHydrationEnd(release) : queueMicrotask(release);
1637
1847
  return gate;
1638
1848
  };
1639
1849
  }
@@ -1692,7 +1902,6 @@ Object.defineProperty(exports, "untrack", {
1692
1902
  enumerable: true,
1693
1903
  get: function () { return solidJs.untrack; }
1694
1904
  });
1695
- exports.Assets = voidFn;
1696
1905
  exports.ChildProperties = ChildProperties;
1697
1906
  exports.DOMElements = DOMElements;
1698
1907
  exports.DOMWithState = DOMWithState;
@@ -1707,6 +1916,7 @@ exports.REVALIDATE_HEADER = REVALIDATE_HEADER;
1707
1916
  exports.RawTextElements = RawTextElements;
1708
1917
  exports.RequestContext = RequestContext;
1709
1918
  exports.ResponseEnvelope = ResponseEnvelope;
1919
+ exports.SAFE_ERROR = SAFE_ERROR;
1710
1920
  exports.SVGElements = SVGElements;
1711
1921
  exports.VoidElements = VoidElements;
1712
1922
  exports.acquireAsset = acquireAsset;
@@ -1716,15 +1926,21 @@ exports.assign = assign;
1716
1926
  exports.claimElement = claimElement;
1717
1927
  exports.claimElementTree = claimElementTree;
1718
1928
  exports.className = className;
1929
+ exports.clearFlashCookie = clearFlashCookie;
1719
1930
  exports.clientOnly = clientOnly;
1931
+ exports.commitEventResponse = commitEventResponse;
1932
+ exports.composeMiddleware = composeMiddleware;
1933
+ exports.createRequestEvent = createRequestEvent;
1934
+ exports.createResponseStub = createResponseStub;
1935
+ exports.createSSRResponse = createSSRResponse;
1720
1936
  exports.delegateEvents = delegateEvents;
1721
1937
  exports.dynamic = dynamic;
1722
1938
  exports.dynamicProperty = dynamicProperty;
1723
1939
  exports.effect = effect;
1724
1940
  exports.escape = escape;
1725
1941
  exports.generateHydrationScript = voidFn;
1726
- exports.getAssets = voidFn;
1727
1942
  exports.getDelegatedRoot = getDelegatedRoot;
1943
+ exports.getExpectedRedirectStatus = getExpectedRedirectStatus;
1728
1944
  exports.getFirstChild = getFirstChild;
1729
1945
  exports.getHydrationKey = getHydrationKey;
1730
1946
  exports.getNextElement = getNextElement;
@@ -1732,6 +1948,9 @@ exports.getNextMarker = getNextMarker;
1732
1948
  exports.getNextMatch = getNextMatch;
1733
1949
  exports.getNextSibling = getNextSibling;
1734
1950
  exports.getRequestEvent = voidFn;
1951
+ exports.getServerFunctionMetadata = getServerFunctionMetadata;
1952
+ exports.getServerFunctionRPC = getServerFunctionRPC;
1953
+ exports.hasFlashCookie = hasFlashCookie;
1735
1954
  exports.httpHeader = httpHeader;
1736
1955
  exports.httpStatus = httpStatus;
1737
1956
  exports.hydrate = hydrate;
@@ -1740,9 +1959,13 @@ exports.installHydrationRuntime = installHydrationRuntime;
1740
1959
  exports.isDev = isDev;
1741
1960
  exports.isHref = isHref;
1742
1961
  exports.isResponseEnvelope = isResponseEnvelope;
1962
+ exports.isSafeError = isSafeError;
1743
1963
  exports.isServer = isServer;
1964
+ exports.isServerFunction = isServerFunction;
1965
+ exports.markSafeError = markSafeError;
1744
1966
  exports.memo = memo;
1745
1967
  exports.mergeProps = mergeProps;
1968
+ exports.parseCookieHeader = parseCookieHeader;
1746
1969
  exports.redirect = redirect;
1747
1970
  exports.ref = ref;
1748
1971
  exports.registerDelegatedContainer = registerDelegatedContainer;
@@ -1752,11 +1975,11 @@ exports.reload = reload;
1752
1975
  exports.render = render;
1753
1976
  exports.renderToStream = renderToStream;
1754
1977
  exports.renderToString = renderToString;
1755
- exports.renderToStringAsync = renderToStringAsync;
1756
1978
  exports.resolveSSRNode = resolveSSRNode;
1757
1979
  exports.respond = respond;
1758
1980
  exports.runHydrationEvents = runHydrationEvents;
1759
1981
  exports.scope = scope;
1982
+ exports.serializeCookie = serializeCookie;
1760
1983
  exports.setAttribute = setAttribute;
1761
1984
  exports.setAttributeNS = setAttributeNS;
1762
1985
  exports.setProperty = setProperty;
@@ -1764,13 +1987,15 @@ exports.setStyleProperty = setStyleProperty;
1764
1987
  exports.spread = spread;
1765
1988
  exports.ssr = ssr;
1766
1989
  exports.ssrAttribute = ssrAttribute;
1767
- exports.ssrClassList = ssrClassList;
1990
+ exports.ssrClassName = ssrClassName;
1768
1991
  exports.ssrElement = ssrElement;
1992
+ exports.ssrGroup = ssrGroup;
1769
1993
  exports.ssrHydrationKey = ssrHydrationKey;
1770
1994
  exports.ssrStyle = ssrStyle;
1995
+ exports.ssrStyleProperty = ssrStyleProperty;
1771
1996
  exports.style = style;
1772
1997
  exports.template = template;
1773
1998
  exports.unregisterDelegatedContainer = unregisterDelegatedContainer;
1774
1999
  exports.unregisterDelegatedRoot = unregisterDelegatedRoot;
1775
- exports.useAssets = voidFn;
1776
2000
  exports.useHead = useHead;
2001
+ exports.warmAsset = warmAsset;