@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/README.md CHANGED
@@ -13,12 +13,7 @@ Solid 2.0's web platform runtime — DOM rendering, hydration, server-side rende
13
13
  import { render, hydrate, Portal, Dynamic, dynamic } from "@solidjs/web";
14
14
 
15
15
  // Server (SSR)
16
- import {
17
- renderToString,
18
- renderToStringAsync,
19
- renderToStream,
20
- isServer
21
- } from "@solidjs/web";
16
+ import { renderToString, renderToStream, isServer } from "@solidjs/web";
22
17
  ```
23
18
 
24
19
  The control-flow components from `solid-js` (`For`, `Show`, `Switch`/`Match`, `Loading`, `Errored`, `Repeat`, `Reveal`) are also re-exported from `@solidjs/web` for convenience.
package/dist/dev.cjs CHANGED
@@ -63,6 +63,17 @@ const effect = (fn, effectFn, options) => solidJs.createRenderEffect(fn, effectF
63
63
  transparent: !options.scope
64
64
  } : transparentOptions);
65
65
  const memo = fn => solidJs.createMemo(() => fn(), syncOptions);
66
+ const assetGates = new WeakMap();
67
+ const waitAsset = promise => {
68
+ let gate = assetGates.get(promise);
69
+ if (!gate) {
70
+ solidJs.runWithOwner(null, () => {
71
+ gate = solidJs.createMemo(() => promise);
72
+ });
73
+ assetGates.set(promise, gate);
74
+ }
75
+ gate();
76
+ };
66
77
 
67
78
  function reconcileArrays(parentNode, a, b, marker) {
68
79
  let bLength = b.length,
@@ -174,6 +185,7 @@ const HEAD_ELIGIBLE_TAGS = new Set(["title", "meta", "link", "style", "script",
174
185
  const HEAD_ATTR_NAME = /^[a-zA-Z_][a-zA-Z0-9_:.-]*$/;
175
186
  const RESOURCE_LINK_RELS = new Set(["preload", "modulepreload", "prefetch", "preconnect", "dns-prefetch", "stylesheet"]);
176
187
  const RESOURCE_QUALIFIERS = ["as", "crossorigin", "type", "media", "imagesrcset", "imagesizes"];
188
+ const STYLESHEET_FETCH_META = new Set(["crossorigin", "integrity", "referrerpolicy", "fetchpriority"]);
177
189
  function evalHeadValue(v) {
178
190
  return typeof v === "function" ? v() : v;
179
191
  }
@@ -255,6 +267,43 @@ function resolveHead(groups) {
255
267
  return winners;
256
268
  }
257
269
 
270
+ function parseCookieHeader(header) {
271
+ const cookies = {};
272
+ if (!header) return cookies;
273
+ for (const part of header.split(";")) {
274
+ const eq = part.indexOf("=");
275
+ if (eq < 0) continue;
276
+ const name = decodeSafe(part.slice(0, eq).trim());
277
+ let value = part.slice(eq + 1).trim();
278
+ if (value.length > 1 && value[0] === '"' && value[value.length - 1] === '"') {
279
+ value = value.slice(1, -1);
280
+ }
281
+ cookies[name] = decodeSafe(value);
282
+ }
283
+ return cookies;
284
+ }
285
+ function decodeSafe(text) {
286
+ try {
287
+ return decodeURIComponent(text);
288
+ } catch {
289
+ return text;
290
+ }
291
+ }
292
+ function serializeCookie(name, value, options = {}) {
293
+ let cookie = `${encodeURIComponent(name)}=${encodeURIComponent(value)}`;
294
+ cookie += `; Path=${options.path === undefined ? "/" : options.path}`;
295
+ if (options.domain) cookie += `; Domain=${options.domain}`;
296
+ if (options.maxAge !== undefined) cookie += `; Max-Age=${Math.trunc(options.maxAge)}`;
297
+ if (options.expires) cookie += `; Expires=${options.expires.toUTCString()}`;
298
+ if (options.httpOnly) cookie += "; HttpOnly";
299
+ if (options.secure) cookie += "; Secure";
300
+ if (options.sameSite) {
301
+ const sameSite = options.sameSite.toLowerCase();
302
+ cookie += `; SameSite=${sameSite === "none" ? "None" : sameSite === "strict" ? "Strict" : "Lax"}`;
303
+ }
304
+ return cookie;
305
+ }
306
+
258
307
  const $$EVENT_OWNER = "_$DX_EVENT_OWNER";
259
308
  const INNER_OWNED = {};
260
309
  const delegatedEvents = new Set();
@@ -658,6 +707,9 @@ function findAssetElement(selector, attr, value) {
658
707
  }
659
708
  return null;
660
709
  }
710
+ function setAssetAttrs(el, attrs) {
711
+ for (const name in attrs) el.setAttribute(name, attrs[name]);
712
+ }
661
713
  function mountAssetElement(descriptor) {
662
714
  let el;
663
715
  if (descriptor.type === "inline-style") {
@@ -676,12 +728,77 @@ function mountAssetElement(descriptor) {
676
728
  el.href = descriptor.href;
677
729
  }
678
730
  }
679
- if (descriptor.attrs) {
680
- for (const name in descriptor.attrs) el.setAttribute(name, descriptor.attrs[name]);
681
- }
731
+ if (descriptor.attrs) setAssetAttrs(el, descriptor.attrs);
682
732
  if (!el.isConnected) document.head.appendChild(el);
683
733
  return el;
684
734
  }
735
+ const assetLoadSettled = /*#__PURE__*/Promise.resolve();
736
+ function trackAssetLoad(entry, adopted) {
737
+ if (entry.loadPromise) return;
738
+ const el = entry.element;
739
+ let settled = el.sheet != null;
740
+ if (!settled && adopted && typeof performance !== "undefined" && performance.getEntriesByName) {
741
+ settled = performance.getEntriesByName(el.href).length > 0;
742
+ }
743
+ if (settled) {
744
+ entry.loadState = "loaded";
745
+ entry.loadPromise = assetLoadSettled;
746
+ return;
747
+ }
748
+ entry.loadState = "pending";
749
+ entry.loadPromise = new Promise(resolve => {
750
+ const settle = state => {
751
+ entry.loadState = state;
752
+ resolve();
753
+ };
754
+ el.addEventListener("load", () => settle("loaded"), {
755
+ once: true
756
+ });
757
+ el.addEventListener("error", () => settle("errored"), {
758
+ once: true
759
+ });
760
+ });
761
+ }
762
+ function warmAsset(descriptor) {
763
+ if (descriptor.policy === "exclusive" || descriptor.type === "inline-style") return;
764
+ const key = assetEntryKey(descriptor);
765
+ let entry = assetRegistry.get(key);
766
+ if (!entry) {
767
+ entry = {
768
+ count: 0,
769
+ element: null,
770
+ timer: null
771
+ };
772
+ assetRegistry.set(key, entry);
773
+ }
774
+ let adopted = true;
775
+ if (!entry.element || !entry.element.isConnected) {
776
+ const rel = descriptor.type === "module" ? "modulepreload" : "stylesheet";
777
+ let el = findAssetElement(`link[rel="${rel}"]`, "href", descriptor.href);
778
+ if (!el && descriptor.type === "style") {
779
+ el = findAssetElement('link[rel="preload"][as="style"]', "href", descriptor.href);
780
+ }
781
+ if (!el) {
782
+ adopted = false;
783
+ el = document.createElement("link");
784
+ if (descriptor.type === "style") {
785
+ el.setAttribute("rel", "preload");
786
+ el.setAttribute("as", "style");
787
+ } else {
788
+ el.setAttribute("rel", "modulepreload");
789
+ }
790
+ el.setAttribute("href", descriptor.href);
791
+ if (!document.body) el.setAttribute("blocking", "render");
792
+ }
793
+ if (descriptor.attrs) setAssetAttrs(el, descriptor.attrs);
794
+ if (!el.isConnected) document.head.appendChild(el);
795
+ entry.element = el;
796
+ entry.loadState = undefined;
797
+ entry.loadPromise = undefined;
798
+ }
799
+ if (descriptor.type === "style") trackAssetLoad(entry, adopted);
800
+ return entry;
801
+ }
685
802
  function acquireAsset(descriptor) {
686
803
  const key = assetEntryKey(descriptor);
687
804
  let entry = assetRegistry.get(key);
@@ -728,7 +845,12 @@ function acquireAsset(descriptor) {
728
845
  entry.timer = null;
729
846
  }
730
847
  entry.count++;
731
- if (!entry.element || !entry.element.isConnected) entry.element = mountAssetElement(descriptor);
848
+ if (!entry.element || !entry.element.isConnected) {
849
+ entry.element = mountAssetElement(descriptor);
850
+ } else if (descriptor.type === "style" && entry.element.getAttribute("rel") === "preload") {
851
+ entry.element.removeAttribute("as");
852
+ entry.element.setAttribute("rel", "stylesheet");
853
+ }
732
854
  let released = false;
733
855
  return () => {
734
856
  if (released) return;
@@ -877,25 +999,9 @@ function headElementMatches(el, t) {
877
999
  const children = t.props.children;
878
1000
  return (children == null ? "" : String(children)) === el.textContent;
879
1001
  }
880
- function acquireHeadResource(tag, props) {
881
- if (tag === "link" && (props.rel === "stylesheet" || props.rel === "modulepreload")) {
882
- const descriptor = {
883
- type: props.rel === "stylesheet" ? "style" : "module",
884
- href: props.href
885
- };
886
- let attrs = null;
887
- for (const name in props) {
888
- if (name === "rel" || name === "href") continue;
889
- if (!HEAD_ATTR_NAME.test(name)) continue;
890
- const v = props[name];
891
- if (v == null || v === false) continue;
892
- (attrs || (attrs = {}))[name] = v === true ? "" : String(v);
893
- }
894
- if (attrs) descriptor.attrs = attrs;
895
- return acquireAsset(descriptor);
896
- }
1002
+ function mountHeadResource(tag, props) {
897
1003
  const identity = resourceIdentity(tag, props);
898
- if (headMountedResources.has(identity)) return noopFn;
1004
+ if (headMountedResources.has(identity)) return;
899
1005
  headMountedResources.add(identity);
900
1006
  const url = props.href || props.src;
901
1007
  let el = null;
@@ -903,9 +1009,28 @@ function acquireHeadResource(tag, props) {
903
1009
  if (tag === "link") el = findAssetElement(`link[rel="${props.rel}"]`, "href", url);else if (tag === "script") el = findAssetElement("script[src]", "src", url);else el = findAssetElement("style[href]", "href", url);
904
1010
  }
905
1011
  if (!el) document.head.appendChild(createHeadElement(tag, props));
906
- return noopFn;
907
1012
  }
908
- function noopFn() {}
1013
+ function gateHeadResource(props) {
1014
+ const descriptor = {
1015
+ type: props.rel === "stylesheet" ? "style" : "module",
1016
+ href: props.href
1017
+ };
1018
+ let gateable = props.rel === "stylesheet" && props.href != null;
1019
+ let attrs = null;
1020
+ for (const name in props) {
1021
+ if (name === "rel" || name === "href") continue;
1022
+ if (!STYLESHEET_FETCH_META.has(name)) gateable = false;
1023
+ if (!HEAD_ATTR_NAME.test(name)) continue;
1024
+ const v = props[name];
1025
+ if (v == null || v === false) continue;
1026
+ (attrs || (attrs = {}))[name] = v === true ? "" : String(v);
1027
+ }
1028
+ if (attrs) descriptor.attrs = attrs;
1029
+ effect(() => {
1030
+ const entry = warmAsset(descriptor);
1031
+ if (gateable && entry.loadState === "pending" && typeof waitAsset === "function") waitAsset(entry.loadPromise);
1032
+ }, () => acquireAsset(descriptor));
1033
+ }
909
1034
  function useHead(tags) {
910
1035
  initHeadRegistry();
911
1036
  const reg = {
@@ -929,10 +1054,16 @@ function useHead(tags) {
929
1054
  rel: cls.rel
930
1055
  } : undefined);
931
1056
  if (cls.resource) {
932
- resources.push({
933
- tag: desc.tag,
934
- props
935
- });
1057
+ if (desc.tag === "link" && (props.rel === "stylesheet" || props.rel === "modulepreload")) {
1058
+ gateHeadResource(props);
1059
+ } else if (desc.tag === "link") {
1060
+ mountHeadResource(desc.tag, props);
1061
+ } else {
1062
+ resources.push({
1063
+ tag: desc.tag,
1064
+ props
1065
+ });
1066
+ }
936
1067
  } else {
937
1068
  const key = evalHeadValue(desc.key);
938
1069
  replaceable.push({
@@ -947,9 +1078,8 @@ function useHead(tags) {
947
1078
  resources
948
1079
  };
949
1080
  }, evaluated => {
950
- const releases = [];
951
1081
  for (let i = 0; i < evaluated.resources.length; i++) {
952
- releases.push(acquireHeadResource(evaluated.resources[i].tag, evaluated.resources[i].props));
1082
+ mountHeadResource(evaluated.resources[i].tag, evaluated.resources[i].props);
953
1083
  }
954
1084
  reg.tags = evaluated.replaceable;
955
1085
  if (reg.seq < 0) reg.seq = ++headSeq;
@@ -958,7 +1088,6 @@ function useHead(tags) {
958
1088
  return () => {
959
1089
  const idx = headRegistrations.indexOf(reg);
960
1090
  if (idx > -1) headRegistrations.splice(idx, 1);
961
- for (let i = 0; i < releases.length; i++) releases[i]();
962
1091
  scheduleHeadApply();
963
1092
  };
964
1093
  });
@@ -1446,7 +1575,13 @@ function gatherHydratable(element, root) {
1446
1575
  for (let i = 0; i < templates.length; i++) {
1447
1576
  const node = templates[i];
1448
1577
  const key = node.getAttribute("_hk");
1449
- if ((!root || key.startsWith(root)) && !solidJs.sharedConfig.registry.has(key)) solidJs.sharedConfig.registry.set(key, node);
1578
+ if (root) {
1579
+ if (!key.startsWith(root)) continue;
1580
+ } else {
1581
+ const frame = node.closest("[data-fid]");
1582
+ if (frame && frame !== element && element.contains(frame)) continue;
1583
+ }
1584
+ if (!solidJs.sharedConfig.registry.has(key)) solidJs.sharedConfig.registry.set(key, node);
1450
1585
  }
1451
1586
  }
1452
1587
  function getHydrationKey() {
@@ -1462,20 +1597,37 @@ function throwInBrowser(func) {
1462
1597
  function renderToString(fn, options) {
1463
1598
  throwInBrowser(renderToString);
1464
1599
  }
1465
- function renderToStringAsync(fn, options) {
1466
- throwInBrowser(renderToStringAsync);
1467
- }
1468
1600
  function renderToStream(fn, options) {
1469
1601
  throwInBrowser(renderToStream);
1470
1602
  }
1603
+ function createResponseStub() {
1604
+ throwInBrowser(createResponseStub);
1605
+ }
1606
+ function createRequestEvent(request, init) {
1607
+ throwInBrowser(createRequestEvent);
1608
+ }
1609
+ function getExpectedRedirectStatus(response) {
1610
+ throwInBrowser(getExpectedRedirectStatus);
1611
+ }
1612
+ function createSSRResponse() {
1613
+ throwInBrowser(createSSRResponse);
1614
+ }
1615
+ function commitEventResponse(response, event) {
1616
+ throwInBrowser(commitEventResponse);
1617
+ }
1618
+ function composeMiddleware(middlewares) {
1619
+ throwInBrowser(composeMiddleware);
1620
+ }
1471
1621
  function ssr(template, ...nodes) {}
1472
1622
  function ssrElement(name, props, children, needsId) {}
1473
- function ssrClassList(value) {}
1623
+ function ssrClassName(value) {}
1474
1624
  function ssrStyle(value) {}
1625
+ function ssrStyleProperty(name, value) {}
1475
1626
  function ssrAttribute(key, value) {}
1627
+ function ssrGroup(fn, n) {}
1476
1628
  function ssrHydrationKey() {}
1477
- function resolveSSRNode(node) {}
1478
- function escape(html) {}
1629
+ function resolveSSRNode(node, result, top) {}
1630
+ function escape(s, attr) {}
1479
1631
 
1480
1632
  const ENVELOPE = Symbol.for("solid.ResponseEnvelope");
1481
1633
  class ResponseEnvelope {
@@ -1492,13 +1644,38 @@ const HREF = Symbol.for("solid.Href");
1492
1644
  function isHref(value) {
1493
1645
  return !!(value && (typeof value === "object" || typeof value === "function") && value[HREF]);
1494
1646
  }
1647
+ const SAFE_ERROR = Symbol.for("solid.SafeError");
1648
+ function markSafeError(error) {
1649
+ if (error && (typeof error === "object" || typeof error === "function")) {
1650
+ Object.defineProperty(error, SAFE_ERROR, {
1651
+ value: true,
1652
+ enumerable: false,
1653
+ configurable: true
1654
+ });
1655
+ }
1656
+ return error;
1657
+ }
1658
+ function isSafeError(value) {
1659
+ return !!(value && (typeof value === "object" || typeof value === "function") && value[SAFE_ERROR]);
1660
+ }
1495
1661
  const REVALIDATE_HEADER = "X-Revalidate";
1496
1662
  function initWithRevalidate(init) {
1497
1663
  const {
1498
1664
  revalidate,
1499
1665
  ...responseInit
1500
1666
  } = init;
1501
- const headers = new Headers(responseInit.headers);
1667
+ let headers;
1668
+ if (responseInit.headers && responseInit.headers.getSetCookie) {
1669
+ headers = new Headers();
1670
+ responseInit.headers.forEach((value, key) => {
1671
+ if (key !== "set-cookie") headers.append(key, value);
1672
+ });
1673
+ for (const cookie of responseInit.headers.getSetCookie()) {
1674
+ headers.append("Set-Cookie", cookie);
1675
+ }
1676
+ } else {
1677
+ headers = new Headers(responseInit.headers);
1678
+ }
1502
1679
  revalidate !== undefined && headers.set(REVALIDATE_HEADER, revalidate.toString());
1503
1680
  return {
1504
1681
  responseInit,
@@ -1625,9 +1802,11 @@ function bindingOf(value) {
1625
1802
  function dynamic(source) {
1626
1803
  let latest = 0;
1627
1804
  const sites = new Set();
1805
+ let deliveredAddress;
1628
1806
  const resolveBinding = (next, prev) => {
1629
1807
  const binding = bindingOf(next);
1630
1808
  if (!binding) return next;
1809
+ deliveredAddress = binding.address;
1631
1810
  const prevBinding = bindingOf(prev);
1632
1811
  if (prevBinding && prevBinding.component === binding.component) {
1633
1812
  for (const deliver of sites) deliver(binding.address);
@@ -1656,7 +1835,7 @@ function dynamic(source) {
1656
1835
  });
1657
1836
  const binding = bindingOf(component);
1658
1837
  if (binding) {
1659
- const [address, setAddress] = solidJs.createSignal(binding.address);
1838
+ const [address, setAddress] = solidJs.createSignal(deliveredAddress ?? binding.address);
1660
1839
  sites.add(setAddress);
1661
1840
  solidJs.onCleanup(() => sites.delete(setAddress));
1662
1841
  return solidJs.untrack(() => binding.component(props, address));
@@ -1758,7 +1937,6 @@ Object.defineProperty(exports, "untrack", {
1758
1937
  enumerable: true,
1759
1938
  get: function () { return solidJs.untrack; }
1760
1939
  });
1761
- exports.Assets = voidFn;
1762
1940
  exports.ChildProperties = ChildProperties;
1763
1941
  exports.DOMElements = DOMElements;
1764
1942
  exports.DOMWithState = DOMWithState;
@@ -1773,6 +1951,7 @@ exports.REVALIDATE_HEADER = REVALIDATE_HEADER;
1773
1951
  exports.RawTextElements = RawTextElements;
1774
1952
  exports.RequestContext = RequestContext;
1775
1953
  exports.ResponseEnvelope = ResponseEnvelope;
1954
+ exports.SAFE_ERROR = SAFE_ERROR;
1776
1955
  exports.SVGElements = SVGElements;
1777
1956
  exports.VoidElements = VoidElements;
1778
1957
  exports.acquireAsset = acquireAsset;
@@ -1783,14 +1962,19 @@ exports.claimElement = claimElement;
1783
1962
  exports.claimElementTree = claimElementTree;
1784
1963
  exports.className = className;
1785
1964
  exports.clientOnly = clientOnly;
1965
+ exports.commitEventResponse = commitEventResponse;
1966
+ exports.composeMiddleware = composeMiddleware;
1967
+ exports.createRequestEvent = createRequestEvent;
1968
+ exports.createResponseStub = createResponseStub;
1969
+ exports.createSSRResponse = createSSRResponse;
1786
1970
  exports.delegateEvents = delegateEvents;
1787
1971
  exports.dynamic = dynamic;
1788
1972
  exports.dynamicProperty = dynamicProperty;
1789
1973
  exports.effect = effect;
1790
1974
  exports.escape = escape;
1791
1975
  exports.generateHydrationScript = voidFn;
1792
- exports.getAssets = voidFn;
1793
1976
  exports.getDelegatedRoot = getDelegatedRoot;
1977
+ exports.getExpectedRedirectStatus = getExpectedRedirectStatus;
1794
1978
  exports.getFirstChild = getFirstChild;
1795
1979
  exports.getHydrationKey = getHydrationKey;
1796
1980
  exports.getNextElement = getNextElement;
@@ -1806,9 +1990,12 @@ exports.installHydrationRuntime = installHydrationRuntime;
1806
1990
  exports.isDev = isDev;
1807
1991
  exports.isHref = isHref;
1808
1992
  exports.isResponseEnvelope = isResponseEnvelope;
1993
+ exports.isSafeError = isSafeError;
1809
1994
  exports.isServer = isServer;
1995
+ exports.markSafeError = markSafeError;
1810
1996
  exports.memo = memo;
1811
1997
  exports.mergeProps = mergeProps;
1998
+ exports.parseCookieHeader = parseCookieHeader;
1812
1999
  exports.redirect = redirect;
1813
2000
  exports.ref = ref;
1814
2001
  exports.registerDelegatedContainer = registerDelegatedContainer;
@@ -1818,11 +2005,11 @@ exports.reload = reload;
1818
2005
  exports.render = render;
1819
2006
  exports.renderToStream = renderToStream;
1820
2007
  exports.renderToString = renderToString;
1821
- exports.renderToStringAsync = renderToStringAsync;
1822
2008
  exports.resolveSSRNode = resolveSSRNode;
1823
2009
  exports.respond = respond;
1824
2010
  exports.runHydrationEvents = runHydrationEvents;
1825
2011
  exports.scope = scope;
2012
+ exports.serializeCookie = serializeCookie;
1826
2013
  exports.setAttribute = setAttribute;
1827
2014
  exports.setAttributeNS = setAttributeNS;
1828
2015
  exports.setProperty = setProperty;
@@ -1830,13 +2017,15 @@ exports.setStyleProperty = setStyleProperty;
1830
2017
  exports.spread = spread;
1831
2018
  exports.ssr = ssr;
1832
2019
  exports.ssrAttribute = ssrAttribute;
1833
- exports.ssrClassList = ssrClassList;
2020
+ exports.ssrClassName = ssrClassName;
1834
2021
  exports.ssrElement = ssrElement;
2022
+ exports.ssrGroup = ssrGroup;
1835
2023
  exports.ssrHydrationKey = ssrHydrationKey;
1836
2024
  exports.ssrStyle = ssrStyle;
2025
+ exports.ssrStyleProperty = ssrStyleProperty;
1837
2026
  exports.style = style;
1838
2027
  exports.template = template;
1839
2028
  exports.unregisterDelegatedContainer = unregisterDelegatedContainer;
1840
2029
  exports.unregisterDelegatedRoot = unregisterDelegatedRoot;
1841
- exports.useAssets = voidFn;
1842
2030
  exports.useHead = useHead;
2031
+ exports.warmAsset = warmAsset;