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