@solidjs/web 2.0.0-beta.32 → 2.0.0-beta.34

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 (52) hide show
  1. package/dist/dev.cjs +58 -16
  2. package/dist/dev.js +54 -17
  3. package/dist/server.cjs +714 -75
  4. package/dist/server.js +711 -78
  5. package/dist/web.cjs +58 -16
  6. package/dist/web.js +54 -17
  7. package/frames/dist/client.cjs +181 -64
  8. package/frames/dist/client.dev.cjs +185 -64
  9. package/frames/dist/client.dev.js +183 -62
  10. package/frames/dist/client.js +179 -62
  11. package/frames/dist/server.cjs +972 -136
  12. package/frames/dist/server.js +974 -138
  13. package/package.json +17 -6
  14. package/serialization/decode/package.json +20 -0
  15. package/serialization/dist/decode.cjs +110 -0
  16. package/serialization/dist/decode.js +104 -0
  17. package/serialization/dist/serialization.cjs +98 -43
  18. package/serialization/dist/serialization.js +99 -44
  19. package/serialization/types/index.d.ts +18 -160
  20. package/serialization/types/serializer-decode.d.ts +182 -0
  21. package/serialization/types-cjs/index.d.cts +18 -160
  22. package/serialization/types-cjs/serializer-decode.d.cts +182 -0
  23. package/server-functions/dist/client.cjs +101 -105
  24. package/server-functions/dist/client.js +101 -105
  25. package/server-functions/dist/server.cjs +131 -107
  26. package/server-functions/dist/server.dev.cjs +131 -107
  27. package/server-functions/dist/server.dev.js +132 -108
  28. package/server-functions/dist/server.js +132 -108
  29. package/types/client.d.ts +23 -1
  30. package/types/cookies.d.ts +93 -0
  31. package/types/core.d.ts +1 -1
  32. package/types/frames/frame-client.d.ts +26 -0
  33. package/types/frames/frame-transport.d.ts +1 -1
  34. package/types/frames/serializer.d.ts +18 -160
  35. package/types/serializer-decode.d.ts +182 -0
  36. package/types/serializer.d.ts +18 -160
  37. package/types/server-functions/client.d.ts +1 -1
  38. package/types/server-functions/server.d.ts +1 -1
  39. package/types/server-functions/shared.d.ts +57 -1
  40. package/types/server.d.ts +21 -1
  41. package/types-cjs/client.d.cts +23 -1
  42. package/types-cjs/cookies.d.cts +93 -0
  43. package/types-cjs/core.d.cts +1 -1
  44. package/types-cjs/frames/frame-client.d.cts +26 -0
  45. package/types-cjs/frames/frame-transport.d.cts +1 -1
  46. package/types-cjs/frames/serializer.d.cts +18 -160
  47. package/types-cjs/serializer-decode.d.cts +182 -0
  48. package/types-cjs/serializer.d.cts +18 -160
  49. package/types-cjs/server-functions/client.d.cts +1 -1
  50. package/types-cjs/server-functions/server.d.cts +1 -1
  51. package/types-cjs/server-functions/shared.d.cts +57 -1
  52. package/types-cjs/server.d.cts +21 -1
package/dist/dev.cjs CHANGED
@@ -303,6 +303,27 @@ function serializeCookie(name, value, options = {}) {
303
303
  }
304
304
  return cookie;
305
305
  }
306
+ const FLASH_COOKIE = "flash";
307
+ const FLASH_MATCHER = new RegExp(`(?:^|;\\s*)${FLASH_COOKIE}=([^;]+)`);
308
+ function hasFlashCookie(cookieHeader) {
309
+ return !!cookieHeader && FLASH_MATCHER.test(cookieHeader);
310
+ }
311
+ function clearFlashCookie() {
312
+ return `${FLASH_COOKIE}=; Max-Age=0; Path=/`;
313
+ }
314
+
315
+ const SERVER_FUNCTION_METADATA = Symbol.for("solid.ServerFunctionMetadata");
316
+ function getServerFunctionMetadata(fn) {
317
+ if (typeof fn !== "function") return undefined;
318
+ return fn[SERVER_FUNCTION_METADATA] || undefined;
319
+ }
320
+ function isServerFunction(fn) {
321
+ return typeof fn === "function" && !!fn[SERVER_FUNCTION_METADATA];
322
+ }
323
+ const SERVER_FUNCTION_RPC = Symbol.for("solid.ServerFunctionRPC");
324
+ function getServerFunctionRPC() {
325
+ return globalThis[SERVER_FUNCTION_RPC];
326
+ }
306
327
 
307
328
  const $$EVENT_OWNER = "_$DX_EVENT_OWNER";
308
329
  const INNER_OWNED = {};
@@ -658,8 +679,7 @@ function insert(parent, accessor, marker, initial, options) {
658
679
  const value = normalize(accessor(), current, multi, true);
659
680
  if (typeof value !== "function") return value;
660
681
  effect(() => (hydrationRt !== null && (current = hydrationRt.reclaimRegion(current, parent, marker)), normalize(value, current, multi)), inner => {
661
- insertExpression(parent, inner, current, marker);
662
- current = inner;
682
+ current = insertExpression(parent, inner, current, marker);
663
683
  host && tagHost(current, host);
664
684
  }, prev !== undefined && !(options && options.schedule) ? {
665
685
  ...options,
@@ -668,8 +688,7 @@ function insert(parent, accessor, marker, initial, options) {
668
688
  return INNER_OWNED;
669
689
  }, value => {
670
690
  if (value === INNER_OWNED) return;
671
- insertExpression(parent, value, current, marker);
672
- current = value;
691
+ current = insertExpression(parent, value, current, marker);
673
692
  host && tagHost(current, host);
674
693
  },
675
694
  accessor.$s ? options ? {
@@ -1158,13 +1177,19 @@ function hydrate$1(code, element, options = {}) {
1158
1177
  }
1159
1178
  };
1160
1179
  }
1161
- const rootMapping = globalThis._$HY.r && globalThis._$HY.r["_assets"];
1180
+ const hyr = globalThis._$HY.r;
1181
+ const rootMapping = hyr && (hyr[options.renderId + "_assets"] || hyr["_assets"]);
1162
1182
  if (rootMapping && typeof rootMapping === "object") {
1163
1183
  const p = loadModuleAssets(rootMapping);
1164
1184
  if (p) {
1165
1185
  gatherHydratable(element, options.renderId);
1186
+ const registry = solidJs.sharedConfig.registry;
1187
+ const gather = solidJs.sharedConfig.gather;
1166
1188
  let disposer;
1167
1189
  p.then(() => {
1190
+ solidJs.sharedConfig.registry = registry;
1191
+ solidJs.sharedConfig.gather = gather;
1192
+ solidJs.sharedConfig.hydrating = true;
1168
1193
  try {
1169
1194
  disposer = render$1(code, element, [...element.childNodes], options);
1170
1195
  } finally {
@@ -1453,8 +1478,11 @@ function eventHandler(e, container, state) {
1453
1478
  retarget(oriTarget);
1454
1479
  }
1455
1480
  function insertExpression(parent, value, current, marker) {
1456
- if (hydrationRt !== null && isHydrating(parent)) return;
1457
- if (value === current) return;
1481
+ if (hydrationRt !== null && isHydrating(parent)) {
1482
+ if (value && value !== current) for (const n of Array.isArray(value) ? value : [value]) if (n && n.nodeType && !isHydrating(n)) return current;
1483
+ return value;
1484
+ }
1485
+ if (value === current) return value;
1458
1486
  const t = typeof value,
1459
1487
  multi = marker !== undefined;
1460
1488
  if (t === "string" || t === "number") {
@@ -1493,6 +1521,7 @@ function insertExpression(parent, value, current, marker) {
1493
1521
  appendNodes(parent, value);
1494
1522
  }
1495
1523
  } else console.warn(`Unrecognized value. Skipped inserting`, value);
1524
+ return value;
1496
1525
  }
1497
1526
  function normalize(value, current, multi, doNotUnwrap) {
1498
1527
  value = solidJs.flatten(value, {
@@ -1630,13 +1659,17 @@ function resolveSSRNode(node, result, top) {}
1630
1659
  function escape(s, attr) {}
1631
1660
 
1632
1661
  const ENVELOPE = Symbol.for("solid.ResponseEnvelope");
1633
- class ResponseEnvelope {
1634
- constructor(response, value) {
1635
- this.response = response;
1636
- this.value = value;
1662
+ // PURE-annotated factory (same convention as solid's MockPromise): the brand
1663
+ const ResponseEnvelope = /* @__PURE__ */(() => {
1664
+ class ResponseEnvelope {
1665
+ constructor(response, value) {
1666
+ this.response = response;
1667
+ this.value = value;
1668
+ }
1637
1669
  }
1638
- }
1639
- ResponseEnvelope.prototype[ENVELOPE] = true;
1670
+ ResponseEnvelope.prototype[ENVELOPE] = true;
1671
+ return ResponseEnvelope;
1672
+ })();
1640
1673
  function isResponseEnvelope(value) {
1641
1674
  return !!(value && typeof value === "object" && value[ENVELOPE]);
1642
1675
  }
@@ -1754,7 +1787,8 @@ function portalImpl(props) {
1754
1787
  endMarker = document.createTextNode(""),
1755
1788
  mount = () => props.mount || document.body,
1756
1789
  content = solidJs.createMemo(() => [startMarker, props.children], {
1757
- ssrSource: "client"
1790
+ ssrSource: "client",
1791
+ loadingValue: undefined
1758
1792
  });
1759
1793
  solidJs.createRenderEffect(
1760
1794
  () => [mount(), content(), solidJs.getOwner()], ([, c, owner]) => {
@@ -1791,7 +1825,8 @@ function portalImpl(props) {
1791
1825
  ssrSource: "client"
1792
1826
  });
1793
1827
  if (solidJs.sharedConfig.hydrating) return solidJs.createMemo(() => treeMarker, {
1794
- ssrSource: "client"
1828
+ ssrSource: "client",
1829
+ loadingValue: undefined
1795
1830
  });
1796
1831
  return treeMarker;
1797
1832
  }
@@ -1878,7 +1913,9 @@ _moduleUrl) {
1878
1913
  if ((Comp = solidJs.untrack(comp)) && !solidJs.sharedConfig.hydrating) return Comp(rest);
1879
1914
  const [mounted, setMounted] = solidJs.createSignal(!solidJs.sharedConfig.hydrating);
1880
1915
  const gate = solidJs.createMemo(() => (Comp = comp(), m = mounted(), solidJs.untrack(() => Comp && m ? Comp(rest) : props.fallback)));
1881
- solidJs.sharedConfig.onHydrationEnd(() => setMounted(true));
1916
+ const onHydrationEnd = solidJs.sharedConfig.onHydrationEnd;
1917
+ const release = () => setMounted(true);
1918
+ onHydrationEnd ? onHydrationEnd(release) : queueMicrotask(release);
1882
1919
  return gate;
1883
1920
  };
1884
1921
  }
@@ -1961,6 +1998,7 @@ exports.assign = assign;
1961
1998
  exports.claimElement = claimElement;
1962
1999
  exports.claimElementTree = claimElementTree;
1963
2000
  exports.className = className;
2001
+ exports.clearFlashCookie = clearFlashCookie;
1964
2002
  exports.clientOnly = clientOnly;
1965
2003
  exports.commitEventResponse = commitEventResponse;
1966
2004
  exports.composeMiddleware = composeMiddleware;
@@ -1982,6 +2020,9 @@ exports.getNextMarker = getNextMarker;
1982
2020
  exports.getNextMatch = getNextMatch;
1983
2021
  exports.getNextSibling = getNextSibling;
1984
2022
  exports.getRequestEvent = voidFn;
2023
+ exports.getServerFunctionMetadata = getServerFunctionMetadata;
2024
+ exports.getServerFunctionRPC = getServerFunctionRPC;
2025
+ exports.hasFlashCookie = hasFlashCookie;
1985
2026
  exports.httpHeader = httpHeader;
1986
2027
  exports.httpStatus = httpStatus;
1987
2028
  exports.hydrate = hydrate;
@@ -1992,6 +2033,7 @@ exports.isHref = isHref;
1992
2033
  exports.isResponseEnvelope = isResponseEnvelope;
1993
2034
  exports.isSafeError = isSafeError;
1994
2035
  exports.isServer = isServer;
2036
+ exports.isServerFunction = isServerFunction;
1995
2037
  exports.markSafeError = markSafeError;
1996
2038
  exports.memo = memo;
1997
2039
  exports.mergeProps = mergeProps;
package/dist/dev.js CHANGED
@@ -302,6 +302,27 @@ function serializeCookie(name, value, options = {}) {
302
302
  }
303
303
  return cookie;
304
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
+ }
305
326
 
306
327
  const $$EVENT_OWNER = "_$DX_EVENT_OWNER";
307
328
  const INNER_OWNED = {};
@@ -657,8 +678,7 @@ function insert(parent, accessor, marker, initial, options) {
657
678
  const value = normalize(accessor(), current, multi, true);
658
679
  if (typeof value !== "function") return value;
659
680
  effect(() => (hydrationRt !== null && (current = hydrationRt.reclaimRegion(current, parent, marker)), normalize(value, current, multi)), inner => {
660
- insertExpression(parent, inner, current, marker);
661
- current = inner;
681
+ current = insertExpression(parent, inner, current, marker);
662
682
  host && tagHost(current, host);
663
683
  }, prev !== undefined && !(options && options.schedule) ? {
664
684
  ...options,
@@ -667,8 +687,7 @@ function insert(parent, accessor, marker, initial, options) {
667
687
  return INNER_OWNED;
668
688
  }, value => {
669
689
  if (value === INNER_OWNED) return;
670
- insertExpression(parent, value, current, marker);
671
- current = value;
690
+ current = insertExpression(parent, value, current, marker);
672
691
  host && tagHost(current, host);
673
692
  },
674
693
  accessor.$s ? options ? {
@@ -1157,13 +1176,19 @@ function hydrate$1(code, element, options = {}) {
1157
1176
  }
1158
1177
  };
1159
1178
  }
1160
- const rootMapping = globalThis._$HY.r && globalThis._$HY.r["_assets"];
1179
+ const hyr = globalThis._$HY.r;
1180
+ const rootMapping = hyr && (hyr[options.renderId + "_assets"] || hyr["_assets"]);
1161
1181
  if (rootMapping && typeof rootMapping === "object") {
1162
1182
  const p = loadModuleAssets(rootMapping);
1163
1183
  if (p) {
1164
1184
  gatherHydratable(element, options.renderId);
1185
+ const registry = sharedConfig.registry;
1186
+ const gather = sharedConfig.gather;
1165
1187
  let disposer;
1166
1188
  p.then(() => {
1189
+ sharedConfig.registry = registry;
1190
+ sharedConfig.gather = gather;
1191
+ sharedConfig.hydrating = true;
1167
1192
  try {
1168
1193
  disposer = render$1(code, element, [...element.childNodes], options);
1169
1194
  } finally {
@@ -1452,8 +1477,11 @@ function eventHandler(e, container, state) {
1452
1477
  retarget(oriTarget);
1453
1478
  }
1454
1479
  function insertExpression(parent, value, current, marker) {
1455
- if (hydrationRt !== null && isHydrating(parent)) return;
1456
- if (value === current) return;
1480
+ if (hydrationRt !== null && isHydrating(parent)) {
1481
+ if (value && value !== current) for (const n of Array.isArray(value) ? value : [value]) if (n && n.nodeType && !isHydrating(n)) return current;
1482
+ return value;
1483
+ }
1484
+ if (value === current) return value;
1457
1485
  const t = typeof value,
1458
1486
  multi = marker !== undefined;
1459
1487
  if (t === "string" || t === "number") {
@@ -1492,6 +1520,7 @@ function insertExpression(parent, value, current, marker) {
1492
1520
  appendNodes(parent, value);
1493
1521
  }
1494
1522
  } else console.warn(`Unrecognized value. Skipped inserting`, value);
1523
+ return value;
1495
1524
  }
1496
1525
  function normalize(value, current, multi, doNotUnwrap) {
1497
1526
  value = flatten(value, {
@@ -1629,13 +1658,17 @@ function resolveSSRNode(node, result, top) {}
1629
1658
  function escape(s, attr) {}
1630
1659
 
1631
1660
  const ENVELOPE = Symbol.for("solid.ResponseEnvelope");
1632
- class ResponseEnvelope {
1633
- constructor(response, value) {
1634
- this.response = response;
1635
- this.value = value;
1661
+ // PURE-annotated factory (same convention as solid's MockPromise): the brand
1662
+ const ResponseEnvelope = /* @__PURE__ */(() => {
1663
+ class ResponseEnvelope {
1664
+ constructor(response, value) {
1665
+ this.response = response;
1666
+ this.value = value;
1667
+ }
1636
1668
  }
1637
- }
1638
- ResponseEnvelope.prototype[ENVELOPE] = true;
1669
+ ResponseEnvelope.prototype[ENVELOPE] = true;
1670
+ return ResponseEnvelope;
1671
+ })();
1639
1672
  function isResponseEnvelope(value) {
1640
1673
  return !!(value && typeof value === "object" && value[ENVELOPE]);
1641
1674
  }
@@ -1753,7 +1786,8 @@ function portalImpl(props) {
1753
1786
  endMarker = document.createTextNode(""),
1754
1787
  mount = () => props.mount || document.body,
1755
1788
  content = createMemo(() => [startMarker, props.children], {
1756
- ssrSource: "client"
1789
+ ssrSource: "client",
1790
+ loadingValue: undefined
1757
1791
  });
1758
1792
  createRenderEffect(
1759
1793
  () => [mount(), content(), getOwner()], ([, c, owner]) => {
@@ -1790,7 +1824,8 @@ function portalImpl(props) {
1790
1824
  ssrSource: "client"
1791
1825
  });
1792
1826
  if (sharedConfig.hydrating) return createMemo(() => treeMarker, {
1793
- ssrSource: "client"
1827
+ ssrSource: "client",
1828
+ loadingValue: undefined
1794
1829
  });
1795
1830
  return treeMarker;
1796
1831
  }
@@ -1877,11 +1912,13 @@ _moduleUrl) {
1877
1912
  if ((Comp = untrack(comp)) && !sharedConfig.hydrating) return Comp(rest);
1878
1913
  const [mounted, setMounted] = createSignal(!sharedConfig.hydrating);
1879
1914
  const gate = createMemo(() => (Comp = comp(), m = mounted(), untrack(() => Comp && m ? Comp(rest) : props.fallback)));
1880
- sharedConfig.onHydrationEnd(() => setMounted(true));
1915
+ const onHydrationEnd = sharedConfig.onHydrationEnd;
1916
+ const release = () => setMounted(true);
1917
+ onHydrationEnd ? onHydrationEnd(release) : queueMicrotask(release);
1881
1918
  return gate;
1882
1919
  };
1883
1920
  }
1884
1921
  function httpStatus(_code, _text) {}
1885
1922
  function httpHeader(_name, _value, _options) {}
1886
1923
 
1887
- export { ChildProperties, DOMElements, DOMWithState, DelegatedEvents, Dynamic, HREF, voidFn as HydrationScript, MathMLElements, Namespaces, Portal, REVALIDATE_HEADER, RawTextElements, RequestContext, ResponseEnvelope, SAFE_ERROR, SVGElements, VoidElements, acquireAsset, addEvent, applyRef, assign, claimElement, claimElementTree, className, clientOnly, commitEventResponse, composeMiddleware, createRequestEvent, createResponseStub, createSSRResponse, delegateEvents, dynamic, dynamicProperty, effect, escape, voidFn as generateHydrationScript, getDelegatedRoot, getExpectedRedirectStatus, getFirstChild, getHydrationKey, getNextElement, getNextMarker, getNextMatch, getNextSibling, voidFn as getRequestEvent, httpHeader, httpStatus, hydrate, insert, installHydrationRuntime, isDev, isHref, isResponseEnvelope, isSafeError, isServer, markSafeError, memo, mergeProps, parseCookieHeader, redirect, ref, registerDelegatedContainer, registerDelegatedRoot, registerElementClaim, reload, render, renderToStream, renderToString, resolveSSRNode, respond, runHydrationEvents, scope, serializeCookie, setAttribute, setAttributeNS, setProperty, setStyleProperty, spread, ssr, ssrAttribute, ssrClassName, ssrElement, ssrGroup, ssrHydrationKey, ssrStyle, ssrStyleProperty, style, template, unregisterDelegatedContainer, unregisterDelegatedRoot, useHead, warmAsset };
1924
+ 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, clearFlashCookie, 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, getServerFunctionMetadata, getServerFunctionRPC, hasFlashCookie, httpHeader, httpStatus, hydrate, insert, installHydrationRuntime, isDev, isHref, isResponseEnvelope, isSafeError, isServer, isServerFunction, 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 };