@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.
Files changed (64) hide show
  1. package/README.md +1 -6
  2. package/dist/dev.cjs +234 -45
  3. package/dist/dev.js +221 -42
  4. package/dist/server.cjs +456 -123
  5. package/dist/server.js +445 -120
  6. package/dist/web.cjs +234 -45
  7. package/dist/web.js +221 -42
  8. package/frames/dist/client.cjs +217 -112
  9. package/frames/dist/client.dev.cjs +217 -112
  10. package/frames/dist/client.dev.js +218 -113
  11. package/frames/dist/client.js +218 -113
  12. package/frames/dist/server.cjs +488 -177
  13. package/frames/dist/server.js +489 -179
  14. package/package.json +55 -4
  15. package/serialization/dist/serialization.cjs +8 -0
  16. package/serialization/dist/serialization.js +1 -0
  17. package/serialization/types/index.d.ts +173 -6
  18. package/serialization/types-cjs/index.d.cts +173 -6
  19. package/server-functions/dist/client.cjs +46 -9
  20. package/server-functions/dist/client.js +47 -11
  21. package/server-functions/dist/rich-args.cjs +11 -0
  22. package/server-functions/dist/rich-args.js +9 -0
  23. package/server-functions/dist/server.cjs +275 -126
  24. package/server-functions/dist/server.dev.cjs +1053 -0
  25. package/server-functions/dist/server.dev.js +1021 -0
  26. package/server-functions/dist/server.js +273 -127
  27. package/server-functions/package.json +10 -0
  28. package/server-functions/rich-args/package.json +20 -0
  29. package/storage/types/index.d.ts +1 -1
  30. package/storage/types-cjs/index.d.cts +1 -1
  31. package/types/client.d.ts +127 -6
  32. package/types/core.d.ts +3 -1
  33. package/types/frames/client.d.ts +15 -1
  34. package/types/frames/frame-client.d.ts +37 -7
  35. package/types/frames/frame-sink.d.ts +26 -3
  36. package/types/frames/frame-transport.d.ts +39 -7
  37. package/types/frames/serializer.d.ts +173 -6
  38. package/types/frames/server.d.ts +22 -0
  39. package/types/index.d.ts +2 -3
  40. package/types/response.d.ts +45 -0
  41. package/types/serializer.d.ts +173 -6
  42. package/types/server-functions/client.d.ts +1 -0
  43. package/types/server-functions/rich-args.d.ts +10 -0
  44. package/types/server-functions/server.d.ts +98 -0
  45. package/types/server-functions/shared.d.ts +22 -0
  46. package/types/server-mock.d.ts +171 -59
  47. package/types/server.d.ts +188 -36
  48. package/types-cjs/client.d.cts +127 -6
  49. package/types-cjs/core.d.cts +3 -1
  50. package/types-cjs/frames/client.d.cts +15 -1
  51. package/types-cjs/frames/frame-client.d.cts +37 -7
  52. package/types-cjs/frames/frame-sink.d.cts +26 -3
  53. package/types-cjs/frames/frame-transport.d.cts +39 -7
  54. package/types-cjs/frames/serializer.d.cts +173 -6
  55. package/types-cjs/frames/server.d.cts +22 -0
  56. package/types-cjs/index.d.cts +2 -3
  57. package/types-cjs/response.d.cts +45 -0
  58. package/types-cjs/serializer.d.cts +173 -6
  59. package/types-cjs/server-functions/client.d.cts +1 -0
  60. package/types-cjs/server-functions/rich-args.d.cts +10 -0
  61. package/types-cjs/server-functions/server.d.cts +98 -0
  62. package/types-cjs/server-functions/shared.d.cts +22 -0
  63. package/types-cjs/server-mock.d.cts +171 -59
  64. package/types-cjs/server.d.cts +188 -36
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,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();
@@ -652,6 +701,9 @@ function findAssetElement(selector, attr, value) {
652
701
  }
653
702
  return null;
654
703
  }
704
+ function setAssetAttrs(el, attrs) {
705
+ for (const name in attrs) el.setAttribute(name, attrs[name]);
706
+ }
655
707
  function mountAssetElement(descriptor) {
656
708
  let el;
657
709
  if (descriptor.type === "inline-style") {
@@ -670,12 +722,77 @@ function mountAssetElement(descriptor) {
670
722
  el.href = descriptor.href;
671
723
  }
672
724
  }
673
- if (descriptor.attrs) {
674
- for (const name in descriptor.attrs) el.setAttribute(name, descriptor.attrs[name]);
675
- }
725
+ if (descriptor.attrs) setAssetAttrs(el, descriptor.attrs);
676
726
  if (!el.isConnected) document.head.appendChild(el);
677
727
  return el;
678
728
  }
729
+ const assetLoadSettled = /*#__PURE__*/Promise.resolve();
730
+ function trackAssetLoad(entry, adopted) {
731
+ if (entry.loadPromise) return;
732
+ const el = entry.element;
733
+ let settled = el.sheet != null;
734
+ if (!settled && adopted && typeof performance !== "undefined" && performance.getEntriesByName) {
735
+ settled = performance.getEntriesByName(el.href).length > 0;
736
+ }
737
+ if (settled) {
738
+ entry.loadState = "loaded";
739
+ entry.loadPromise = assetLoadSettled;
740
+ return;
741
+ }
742
+ entry.loadState = "pending";
743
+ entry.loadPromise = new Promise(resolve => {
744
+ const settle = state => {
745
+ entry.loadState = state;
746
+ resolve();
747
+ };
748
+ el.addEventListener("load", () => settle("loaded"), {
749
+ once: true
750
+ });
751
+ el.addEventListener("error", () => settle("errored"), {
752
+ once: true
753
+ });
754
+ });
755
+ }
756
+ function warmAsset(descriptor) {
757
+ if (descriptor.policy === "exclusive" || descriptor.type === "inline-style") return;
758
+ const key = assetEntryKey(descriptor);
759
+ let entry = assetRegistry.get(key);
760
+ if (!entry) {
761
+ entry = {
762
+ count: 0,
763
+ element: null,
764
+ timer: null
765
+ };
766
+ assetRegistry.set(key, entry);
767
+ }
768
+ let adopted = true;
769
+ if (!entry.element || !entry.element.isConnected) {
770
+ const rel = descriptor.type === "module" ? "modulepreload" : "stylesheet";
771
+ let el = findAssetElement(`link[rel="${rel}"]`, "href", descriptor.href);
772
+ if (!el && descriptor.type === "style") {
773
+ el = findAssetElement('link[rel="preload"][as="style"]', "href", descriptor.href);
774
+ }
775
+ if (!el) {
776
+ adopted = false;
777
+ el = document.createElement("link");
778
+ if (descriptor.type === "style") {
779
+ el.setAttribute("rel", "preload");
780
+ el.setAttribute("as", "style");
781
+ } else {
782
+ el.setAttribute("rel", "modulepreload");
783
+ }
784
+ el.setAttribute("href", descriptor.href);
785
+ if (!document.body) el.setAttribute("blocking", "render");
786
+ }
787
+ if (descriptor.attrs) setAssetAttrs(el, descriptor.attrs);
788
+ if (!el.isConnected) document.head.appendChild(el);
789
+ entry.element = el;
790
+ entry.loadState = undefined;
791
+ entry.loadPromise = undefined;
792
+ }
793
+ if (descriptor.type === "style") trackAssetLoad(entry, adopted);
794
+ return entry;
795
+ }
679
796
  function acquireAsset(descriptor) {
680
797
  const key = assetEntryKey(descriptor);
681
798
  let entry = assetRegistry.get(key);
@@ -722,7 +839,12 @@ function acquireAsset(descriptor) {
722
839
  entry.timer = null;
723
840
  }
724
841
  entry.count++;
725
- if (!entry.element || !entry.element.isConnected) entry.element = mountAssetElement(descriptor);
842
+ if (!entry.element || !entry.element.isConnected) {
843
+ entry.element = mountAssetElement(descriptor);
844
+ } else if (descriptor.type === "style" && entry.element.getAttribute("rel") === "preload") {
845
+ entry.element.removeAttribute("as");
846
+ entry.element.setAttribute("rel", "stylesheet");
847
+ }
726
848
  let released = false;
727
849
  return () => {
728
850
  if (released) return;
@@ -869,25 +991,9 @@ function headElementMatches(el, t) {
869
991
  const children = t.props.children;
870
992
  return (children == null ? "" : String(children)) === el.textContent;
871
993
  }
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
- }
994
+ function mountHeadResource(tag, props) {
889
995
  const identity = resourceIdentity(tag, props);
890
- if (headMountedResources.has(identity)) return noopFn;
996
+ if (headMountedResources.has(identity)) return;
891
997
  headMountedResources.add(identity);
892
998
  const url = props.href || props.src;
893
999
  let el = null;
@@ -895,9 +1001,28 @@ function acquireHeadResource(tag, props) {
895
1001
  if (tag === "link") el = findAssetElement(`link[rel="${props.rel}"]`, "href", url);else if (tag === "script") el = findAssetElement("script[src]", "src", url);else el = findAssetElement("style[href]", "href", url);
896
1002
  }
897
1003
  if (!el) document.head.appendChild(createHeadElement(tag, props));
898
- return noopFn;
899
1004
  }
900
- function noopFn() {}
1005
+ function gateHeadResource(props) {
1006
+ const descriptor = {
1007
+ type: props.rel === "stylesheet" ? "style" : "module",
1008
+ href: props.href
1009
+ };
1010
+ let gateable = props.rel === "stylesheet" && props.href != null;
1011
+ let attrs = null;
1012
+ for (const name in props) {
1013
+ if (name === "rel" || name === "href") continue;
1014
+ if (!STYLESHEET_FETCH_META.has(name)) gateable = false;
1015
+ if (!HEAD_ATTR_NAME.test(name)) continue;
1016
+ const v = props[name];
1017
+ if (v == null || v === false) continue;
1018
+ (attrs || (attrs = {}))[name] = v === true ? "" : String(v);
1019
+ }
1020
+ if (attrs) descriptor.attrs = attrs;
1021
+ effect(() => {
1022
+ const entry = warmAsset(descriptor);
1023
+ if (gateable && entry.loadState === "pending" && typeof waitAsset === "function") waitAsset(entry.loadPromise);
1024
+ }, () => acquireAsset(descriptor));
1025
+ }
901
1026
  function useHead(tags) {
902
1027
  initHeadRegistry();
903
1028
  const reg = {
@@ -920,10 +1045,16 @@ function useHead(tags) {
920
1045
  rel: cls.rel
921
1046
  } : undefined);
922
1047
  if (cls.resource) {
923
- resources.push({
924
- tag: desc.tag,
925
- props
926
- });
1048
+ if (desc.tag === "link" && (props.rel === "stylesheet" || props.rel === "modulepreload")) {
1049
+ gateHeadResource(props);
1050
+ } else if (desc.tag === "link") {
1051
+ mountHeadResource(desc.tag, props);
1052
+ } else {
1053
+ resources.push({
1054
+ tag: desc.tag,
1055
+ props
1056
+ });
1057
+ }
927
1058
  } else {
928
1059
  const key = evalHeadValue(desc.key);
929
1060
  replaceable.push({
@@ -938,9 +1069,8 @@ function useHead(tags) {
938
1069
  resources
939
1070
  };
940
1071
  }, evaluated => {
941
- const releases = [];
942
1072
  for (let i = 0; i < evaluated.resources.length; i++) {
943
- releases.push(acquireHeadResource(evaluated.resources[i].tag, evaluated.resources[i].props));
1073
+ mountHeadResource(evaluated.resources[i].tag, evaluated.resources[i].props);
944
1074
  }
945
1075
  reg.tags = evaluated.replaceable;
946
1076
  if (reg.seq < 0) reg.seq = ++headSeq;
@@ -949,7 +1079,6 @@ function useHead(tags) {
949
1079
  return () => {
950
1080
  const idx = headRegistrations.indexOf(reg);
951
1081
  if (idx > -1) headRegistrations.splice(idx, 1);
952
- for (let i = 0; i < releases.length; i++) releases[i]();
953
1082
  scheduleHeadApply();
954
1083
  };
955
1084
  });
@@ -1385,7 +1514,13 @@ function gatherHydratable(element, root) {
1385
1514
  for (let i = 0; i < templates.length; i++) {
1386
1515
  const node = templates[i];
1387
1516
  const key = node.getAttribute("_hk");
1388
- if ((!root || key.startsWith(root)) && !solidJs.sharedConfig.registry.has(key)) solidJs.sharedConfig.registry.set(key, node);
1517
+ if (root) {
1518
+ if (!key.startsWith(root)) continue;
1519
+ } else {
1520
+ const frame = node.closest("[data-fid]");
1521
+ if (frame && frame !== element && element.contains(frame)) continue;
1522
+ }
1523
+ if (!solidJs.sharedConfig.registry.has(key)) solidJs.sharedConfig.registry.set(key, node);
1389
1524
  }
1390
1525
  }
1391
1526
  function getHydrationKey() {
@@ -1401,20 +1536,37 @@ function throwInBrowser(func) {
1401
1536
  function renderToString(fn, options) {
1402
1537
  throwInBrowser(renderToString);
1403
1538
  }
1404
- function renderToStringAsync(fn, options) {
1405
- throwInBrowser(renderToStringAsync);
1406
- }
1407
1539
  function renderToStream(fn, options) {
1408
1540
  throwInBrowser(renderToStream);
1409
1541
  }
1542
+ function createResponseStub() {
1543
+ throwInBrowser(createResponseStub);
1544
+ }
1545
+ function createRequestEvent(request, init) {
1546
+ throwInBrowser(createRequestEvent);
1547
+ }
1548
+ function getExpectedRedirectStatus(response) {
1549
+ throwInBrowser(getExpectedRedirectStatus);
1550
+ }
1551
+ function createSSRResponse() {
1552
+ throwInBrowser(createSSRResponse);
1553
+ }
1554
+ function commitEventResponse(response, event) {
1555
+ throwInBrowser(commitEventResponse);
1556
+ }
1557
+ function composeMiddleware(middlewares) {
1558
+ throwInBrowser(composeMiddleware);
1559
+ }
1410
1560
  function ssr(template, ...nodes) {}
1411
1561
  function ssrElement(name, props, children, needsId) {}
1412
- function ssrClassList(value) {}
1562
+ function ssrClassName(value) {}
1413
1563
  function ssrStyle(value) {}
1564
+ function ssrStyleProperty(name, value) {}
1414
1565
  function ssrAttribute(key, value) {}
1566
+ function ssrGroup(fn, n) {}
1415
1567
  function ssrHydrationKey() {}
1416
- function resolveSSRNode(node) {}
1417
- function escape(html) {}
1568
+ function resolveSSRNode(node, result, top) {}
1569
+ function escape(s, attr) {}
1418
1570
 
1419
1571
  const ENVELOPE = Symbol.for("solid.ResponseEnvelope");
1420
1572
  class ResponseEnvelope {
@@ -1431,13 +1583,38 @@ const HREF = Symbol.for("solid.Href");
1431
1583
  function isHref(value) {
1432
1584
  return !!(value && (typeof value === "object" || typeof value === "function") && value[HREF]);
1433
1585
  }
1586
+ const SAFE_ERROR = Symbol.for("solid.SafeError");
1587
+ function markSafeError(error) {
1588
+ if (error && (typeof error === "object" || typeof error === "function")) {
1589
+ Object.defineProperty(error, SAFE_ERROR, {
1590
+ value: true,
1591
+ enumerable: false,
1592
+ configurable: true
1593
+ });
1594
+ }
1595
+ return error;
1596
+ }
1597
+ function isSafeError(value) {
1598
+ return !!(value && (typeof value === "object" || typeof value === "function") && value[SAFE_ERROR]);
1599
+ }
1434
1600
  const REVALIDATE_HEADER = "X-Revalidate";
1435
1601
  function initWithRevalidate(init) {
1436
1602
  const {
1437
1603
  revalidate,
1438
1604
  ...responseInit
1439
1605
  } = init;
1440
- const headers = new Headers(responseInit.headers);
1606
+ let headers;
1607
+ if (responseInit.headers && responseInit.headers.getSetCookie) {
1608
+ headers = new Headers();
1609
+ responseInit.headers.forEach((value, key) => {
1610
+ if (key !== "set-cookie") headers.append(key, value);
1611
+ });
1612
+ for (const cookie of responseInit.headers.getSetCookie()) {
1613
+ headers.append("Set-Cookie", cookie);
1614
+ }
1615
+ } else {
1616
+ headers = new Headers(responseInit.headers);
1617
+ }
1441
1618
  revalidate !== undefined && headers.set(REVALIDATE_HEADER, revalidate.toString());
1442
1619
  return {
1443
1620
  responseInit,
@@ -1562,9 +1739,11 @@ function bindingOf(value) {
1562
1739
  function dynamic(source) {
1563
1740
  let latest = 0;
1564
1741
  const sites = new Set();
1742
+ let deliveredAddress;
1565
1743
  const resolveBinding = (next, prev) => {
1566
1744
  const binding = bindingOf(next);
1567
1745
  if (!binding) return next;
1746
+ deliveredAddress = binding.address;
1568
1747
  const prevBinding = bindingOf(prev);
1569
1748
  if (prevBinding && prevBinding.component === binding.component) {
1570
1749
  for (const deliver of sites) deliver(binding.address);
@@ -1590,7 +1769,7 @@ function dynamic(source) {
1590
1769
  {
1591
1770
  const binding = bindingOf(component);
1592
1771
  if (binding) {
1593
- const [address, setAddress] = solidJs.createSignal(binding.address);
1772
+ const [address, setAddress] = solidJs.createSignal(deliveredAddress ?? binding.address);
1594
1773
  sites.add(setAddress);
1595
1774
  solidJs.onCleanup(() => sites.delete(setAddress));
1596
1775
  return solidJs.untrack(() => binding.component(props, address));
@@ -1692,7 +1871,6 @@ Object.defineProperty(exports, "untrack", {
1692
1871
  enumerable: true,
1693
1872
  get: function () { return solidJs.untrack; }
1694
1873
  });
1695
- exports.Assets = voidFn;
1696
1874
  exports.ChildProperties = ChildProperties;
1697
1875
  exports.DOMElements = DOMElements;
1698
1876
  exports.DOMWithState = DOMWithState;
@@ -1707,6 +1885,7 @@ exports.REVALIDATE_HEADER = REVALIDATE_HEADER;
1707
1885
  exports.RawTextElements = RawTextElements;
1708
1886
  exports.RequestContext = RequestContext;
1709
1887
  exports.ResponseEnvelope = ResponseEnvelope;
1888
+ exports.SAFE_ERROR = SAFE_ERROR;
1710
1889
  exports.SVGElements = SVGElements;
1711
1890
  exports.VoidElements = VoidElements;
1712
1891
  exports.acquireAsset = acquireAsset;
@@ -1717,14 +1896,19 @@ exports.claimElement = claimElement;
1717
1896
  exports.claimElementTree = claimElementTree;
1718
1897
  exports.className = className;
1719
1898
  exports.clientOnly = clientOnly;
1899
+ exports.commitEventResponse = commitEventResponse;
1900
+ exports.composeMiddleware = composeMiddleware;
1901
+ exports.createRequestEvent = createRequestEvent;
1902
+ exports.createResponseStub = createResponseStub;
1903
+ exports.createSSRResponse = createSSRResponse;
1720
1904
  exports.delegateEvents = delegateEvents;
1721
1905
  exports.dynamic = dynamic;
1722
1906
  exports.dynamicProperty = dynamicProperty;
1723
1907
  exports.effect = effect;
1724
1908
  exports.escape = escape;
1725
1909
  exports.generateHydrationScript = voidFn;
1726
- exports.getAssets = voidFn;
1727
1910
  exports.getDelegatedRoot = getDelegatedRoot;
1911
+ exports.getExpectedRedirectStatus = getExpectedRedirectStatus;
1728
1912
  exports.getFirstChild = getFirstChild;
1729
1913
  exports.getHydrationKey = getHydrationKey;
1730
1914
  exports.getNextElement = getNextElement;
@@ -1740,9 +1924,12 @@ exports.installHydrationRuntime = installHydrationRuntime;
1740
1924
  exports.isDev = isDev;
1741
1925
  exports.isHref = isHref;
1742
1926
  exports.isResponseEnvelope = isResponseEnvelope;
1927
+ exports.isSafeError = isSafeError;
1743
1928
  exports.isServer = isServer;
1929
+ exports.markSafeError = markSafeError;
1744
1930
  exports.memo = memo;
1745
1931
  exports.mergeProps = mergeProps;
1932
+ exports.parseCookieHeader = parseCookieHeader;
1746
1933
  exports.redirect = redirect;
1747
1934
  exports.ref = ref;
1748
1935
  exports.registerDelegatedContainer = registerDelegatedContainer;
@@ -1752,11 +1939,11 @@ exports.reload = reload;
1752
1939
  exports.render = render;
1753
1940
  exports.renderToStream = renderToStream;
1754
1941
  exports.renderToString = renderToString;
1755
- exports.renderToStringAsync = renderToStringAsync;
1756
1942
  exports.resolveSSRNode = resolveSSRNode;
1757
1943
  exports.respond = respond;
1758
1944
  exports.runHydrationEvents = runHydrationEvents;
1759
1945
  exports.scope = scope;
1946
+ exports.serializeCookie = serializeCookie;
1760
1947
  exports.setAttribute = setAttribute;
1761
1948
  exports.setAttributeNS = setAttributeNS;
1762
1949
  exports.setProperty = setProperty;
@@ -1764,13 +1951,15 @@ exports.setStyleProperty = setStyleProperty;
1764
1951
  exports.spread = spread;
1765
1952
  exports.ssr = ssr;
1766
1953
  exports.ssrAttribute = ssrAttribute;
1767
- exports.ssrClassList = ssrClassList;
1954
+ exports.ssrClassName = ssrClassName;
1768
1955
  exports.ssrElement = ssrElement;
1956
+ exports.ssrGroup = ssrGroup;
1769
1957
  exports.ssrHydrationKey = ssrHydrationKey;
1770
1958
  exports.ssrStyle = ssrStyle;
1959
+ exports.ssrStyleProperty = ssrStyleProperty;
1771
1960
  exports.style = style;
1772
1961
  exports.template = template;
1773
1962
  exports.unregisterDelegatedContainer = unregisterDelegatedContainer;
1774
1963
  exports.unregisterDelegatedRoot = unregisterDelegatedRoot;
1775
- exports.useAssets = voidFn;
1776
1964
  exports.useHead = useHead;
1965
+ exports.warmAsset = warmAsset;