@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/web.cjs 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 = {};
@@ -652,8 +673,7 @@ function insert(parent, accessor, marker, initial, options) {
652
673
  const value = normalize(accessor(), current, multi, true);
653
674
  if (typeof value !== "function") return value;
654
675
  effect(() => (hydrationRt !== null && (current = hydrationRt.reclaimRegion(current, parent, marker)), normalize(value, current, multi)), inner => {
655
- insertExpression(parent, inner, current, marker);
656
- current = inner;
676
+ current = insertExpression(parent, inner, current, marker);
657
677
  host && tagHost(current, host);
658
678
  }, prev !== undefined && !(options && options.schedule) ? {
659
679
  ...options,
@@ -662,8 +682,7 @@ function insert(parent, accessor, marker, initial, options) {
662
682
  return INNER_OWNED;
663
683
  }, value => {
664
684
  if (value === INNER_OWNED) return;
665
- insertExpression(parent, value, current, marker);
666
- current = value;
685
+ current = insertExpression(parent, value, current, marker);
667
686
  host && tagHost(current, host);
668
687
  },
669
688
  accessor.$s ? options ? {
@@ -1139,13 +1158,19 @@ function hydrate$1(code, element, options = {}) {
1139
1158
  });
1140
1159
  };
1141
1160
  solidJs.sharedConfig.hydrating = true;
1142
- const rootMapping = globalThis._$HY.r && globalThis._$HY.r["_assets"];
1161
+ const hyr = globalThis._$HY.r;
1162
+ const rootMapping = hyr && (hyr[options.renderId + "_assets"] || hyr["_assets"]);
1143
1163
  if (rootMapping && typeof rootMapping === "object") {
1144
1164
  const p = loadModuleAssets(rootMapping);
1145
1165
  if (p) {
1146
1166
  gatherHydratable(element, options.renderId);
1167
+ const registry = solidJs.sharedConfig.registry;
1168
+ const gather = solidJs.sharedConfig.gather;
1147
1169
  let disposer;
1148
1170
  p.then(() => {
1171
+ solidJs.sharedConfig.registry = registry;
1172
+ solidJs.sharedConfig.gather = gather;
1173
+ solidJs.sharedConfig.hydrating = true;
1149
1174
  try {
1150
1175
  disposer = render$1(code, element, [...element.childNodes], options);
1151
1176
  } finally {
@@ -1392,8 +1417,11 @@ function eventHandler(e, container, state) {
1392
1417
  retarget(oriTarget);
1393
1418
  }
1394
1419
  function insertExpression(parent, value, current, marker) {
1395
- if (hydrationRt !== null && isHydrating(parent)) return;
1396
- if (value === current) return;
1420
+ if (hydrationRt !== null && isHydrating(parent)) {
1421
+ if (value && value !== current) for (const n of Array.isArray(value) ? value : [value]) if (n && n.nodeType && !isHydrating(n)) return current;
1422
+ return value;
1423
+ }
1424
+ if (value === current) return value;
1397
1425
  const t = typeof value,
1398
1426
  multi = marker !== undefined;
1399
1427
  if (t === "string" || t === "number") {
@@ -1432,6 +1460,7 @@ function insertExpression(parent, value, current, marker) {
1432
1460
  appendNodes(parent, value);
1433
1461
  }
1434
1462
  } else ;
1463
+ return value;
1435
1464
  }
1436
1465
  function normalize(value, current, multi, doNotUnwrap) {
1437
1466
  value = solidJs.flatten(value, {
@@ -1569,13 +1598,17 @@ function resolveSSRNode(node, result, top) {}
1569
1598
  function escape(s, attr) {}
1570
1599
 
1571
1600
  const ENVELOPE = Symbol.for("solid.ResponseEnvelope");
1572
- class ResponseEnvelope {
1573
- constructor(response, value) {
1574
- this.response = response;
1575
- this.value = value;
1601
+ // PURE-annotated factory (same convention as solid's MockPromise): the brand
1602
+ const ResponseEnvelope = /* @__PURE__ */(() => {
1603
+ class ResponseEnvelope {
1604
+ constructor(response, value) {
1605
+ this.response = response;
1606
+ this.value = value;
1607
+ }
1576
1608
  }
1577
- }
1578
- ResponseEnvelope.prototype[ENVELOPE] = true;
1609
+ ResponseEnvelope.prototype[ENVELOPE] = true;
1610
+ return ResponseEnvelope;
1611
+ })();
1579
1612
  function isResponseEnvelope(value) {
1580
1613
  return !!(value && typeof value === "object" && value[ENVELOPE]);
1581
1614
  }
@@ -1691,7 +1724,8 @@ function portalImpl(props) {
1691
1724
  endMarker = document.createTextNode(""),
1692
1725
  mount = () => props.mount || document.body,
1693
1726
  content = solidJs.createMemo(() => [startMarker, props.children], {
1694
- ssrSource: "client"
1727
+ ssrSource: "client",
1728
+ loadingValue: undefined
1695
1729
  });
1696
1730
  solidJs.createRenderEffect(
1697
1731
  () => [mount(), content(), solidJs.getOwner()], ([, c, owner]) => {
@@ -1728,7 +1762,8 @@ function portalImpl(props) {
1728
1762
  ssrSource: "client"
1729
1763
  });
1730
1764
  if (solidJs.sharedConfig.hydrating) return solidJs.createMemo(() => treeMarker, {
1731
- ssrSource: "client"
1765
+ ssrSource: "client",
1766
+ loadingValue: undefined
1732
1767
  });
1733
1768
  return treeMarker;
1734
1769
  }
@@ -1812,7 +1847,9 @@ _moduleUrl) {
1812
1847
  if ((Comp = solidJs.untrack(comp)) && !solidJs.sharedConfig.hydrating) return Comp(rest);
1813
1848
  const [mounted, setMounted] = solidJs.createSignal(!solidJs.sharedConfig.hydrating);
1814
1849
  const gate = solidJs.createMemo(() => (Comp = comp(), m = mounted(), solidJs.untrack(() => Comp && m ? Comp(rest) : props.fallback)));
1815
- solidJs.sharedConfig.onHydrationEnd(() => setMounted(true));
1850
+ const onHydrationEnd = solidJs.sharedConfig.onHydrationEnd;
1851
+ const release = () => setMounted(true);
1852
+ onHydrationEnd ? onHydrationEnd(release) : queueMicrotask(release);
1816
1853
  return gate;
1817
1854
  };
1818
1855
  }
@@ -1895,6 +1932,7 @@ exports.assign = assign;
1895
1932
  exports.claimElement = claimElement;
1896
1933
  exports.claimElementTree = claimElementTree;
1897
1934
  exports.className = className;
1935
+ exports.clearFlashCookie = clearFlashCookie;
1898
1936
  exports.clientOnly = clientOnly;
1899
1937
  exports.commitEventResponse = commitEventResponse;
1900
1938
  exports.composeMiddleware = composeMiddleware;
@@ -1916,6 +1954,9 @@ exports.getNextMarker = getNextMarker;
1916
1954
  exports.getNextMatch = getNextMatch;
1917
1955
  exports.getNextSibling = getNextSibling;
1918
1956
  exports.getRequestEvent = voidFn;
1957
+ exports.getServerFunctionMetadata = getServerFunctionMetadata;
1958
+ exports.getServerFunctionRPC = getServerFunctionRPC;
1959
+ exports.hasFlashCookie = hasFlashCookie;
1919
1960
  exports.httpHeader = httpHeader;
1920
1961
  exports.httpStatus = httpStatus;
1921
1962
  exports.hydrate = hydrate;
@@ -1926,6 +1967,7 @@ exports.isHref = isHref;
1926
1967
  exports.isResponseEnvelope = isResponseEnvelope;
1927
1968
  exports.isSafeError = isSafeError;
1928
1969
  exports.isServer = isServer;
1970
+ exports.isServerFunction = isServerFunction;
1929
1971
  exports.markSafeError = markSafeError;
1930
1972
  exports.memo = memo;
1931
1973
  exports.mergeProps = mergeProps;
package/dist/web.js CHANGED
@@ -301,6 +301,27 @@ function serializeCookie(name, value, options = {}) {
301
301
  }
302
302
  return cookie;
303
303
  }
304
+ const FLASH_COOKIE = "flash";
305
+ const FLASH_MATCHER = new RegExp(`(?:^|;\\s*)${FLASH_COOKIE}=([^;]+)`);
306
+ function hasFlashCookie(cookieHeader) {
307
+ return !!cookieHeader && FLASH_MATCHER.test(cookieHeader);
308
+ }
309
+ function clearFlashCookie() {
310
+ return `${FLASH_COOKIE}=; Max-Age=0; Path=/`;
311
+ }
312
+
313
+ const SERVER_FUNCTION_METADATA = Symbol.for("solid.ServerFunctionMetadata");
314
+ function getServerFunctionMetadata(fn) {
315
+ if (typeof fn !== "function") return undefined;
316
+ return fn[SERVER_FUNCTION_METADATA] || undefined;
317
+ }
318
+ function isServerFunction(fn) {
319
+ return typeof fn === "function" && !!fn[SERVER_FUNCTION_METADATA];
320
+ }
321
+ const SERVER_FUNCTION_RPC = Symbol.for("solid.ServerFunctionRPC");
322
+ function getServerFunctionRPC() {
323
+ return globalThis[SERVER_FUNCTION_RPC];
324
+ }
304
325
 
305
326
  const $$EVENT_OWNER = "_$DX_EVENT_OWNER";
306
327
  const INNER_OWNED = {};
@@ -651,8 +672,7 @@ function insert(parent, accessor, marker, initial, options) {
651
672
  const value = normalize(accessor(), current, multi, true);
652
673
  if (typeof value !== "function") return value;
653
674
  effect(() => (hydrationRt !== null && (current = hydrationRt.reclaimRegion(current, parent, marker)), normalize(value, current, multi)), inner => {
654
- insertExpression(parent, inner, current, marker);
655
- current = inner;
675
+ current = insertExpression(parent, inner, current, marker);
656
676
  host && tagHost(current, host);
657
677
  }, prev !== undefined && !(options && options.schedule) ? {
658
678
  ...options,
@@ -661,8 +681,7 @@ function insert(parent, accessor, marker, initial, options) {
661
681
  return INNER_OWNED;
662
682
  }, value => {
663
683
  if (value === INNER_OWNED) return;
664
- insertExpression(parent, value, current, marker);
665
- current = value;
684
+ current = insertExpression(parent, value, current, marker);
666
685
  host && tagHost(current, host);
667
686
  },
668
687
  accessor.$s ? options ? {
@@ -1138,13 +1157,19 @@ function hydrate$1(code, element, options = {}) {
1138
1157
  });
1139
1158
  };
1140
1159
  sharedConfig.hydrating = true;
1141
- const rootMapping = globalThis._$HY.r && globalThis._$HY.r["_assets"];
1160
+ const hyr = globalThis._$HY.r;
1161
+ const rootMapping = hyr && (hyr[options.renderId + "_assets"] || hyr["_assets"]);
1142
1162
  if (rootMapping && typeof rootMapping === "object") {
1143
1163
  const p = loadModuleAssets(rootMapping);
1144
1164
  if (p) {
1145
1165
  gatherHydratable(element, options.renderId);
1166
+ const registry = sharedConfig.registry;
1167
+ const gather = sharedConfig.gather;
1146
1168
  let disposer;
1147
1169
  p.then(() => {
1170
+ sharedConfig.registry = registry;
1171
+ sharedConfig.gather = gather;
1172
+ sharedConfig.hydrating = true;
1148
1173
  try {
1149
1174
  disposer = render$1(code, element, [...element.childNodes], options);
1150
1175
  } finally {
@@ -1391,8 +1416,11 @@ function eventHandler(e, container, state) {
1391
1416
  retarget(oriTarget);
1392
1417
  }
1393
1418
  function insertExpression(parent, value, current, marker) {
1394
- if (hydrationRt !== null && isHydrating(parent)) return;
1395
- if (value === current) return;
1419
+ if (hydrationRt !== null && isHydrating(parent)) {
1420
+ if (value && value !== current) for (const n of Array.isArray(value) ? value : [value]) if (n && n.nodeType && !isHydrating(n)) return current;
1421
+ return value;
1422
+ }
1423
+ if (value === current) return value;
1396
1424
  const t = typeof value,
1397
1425
  multi = marker !== undefined;
1398
1426
  if (t === "string" || t === "number") {
@@ -1431,6 +1459,7 @@ function insertExpression(parent, value, current, marker) {
1431
1459
  appendNodes(parent, value);
1432
1460
  }
1433
1461
  } else ;
1462
+ return value;
1434
1463
  }
1435
1464
  function normalize(value, current, multi, doNotUnwrap) {
1436
1465
  value = flatten(value, {
@@ -1568,13 +1597,17 @@ function resolveSSRNode(node, result, top) {}
1568
1597
  function escape(s, attr) {}
1569
1598
 
1570
1599
  const ENVELOPE = Symbol.for("solid.ResponseEnvelope");
1571
- class ResponseEnvelope {
1572
- constructor(response, value) {
1573
- this.response = response;
1574
- this.value = value;
1600
+ // PURE-annotated factory (same convention as solid's MockPromise): the brand
1601
+ const ResponseEnvelope = /* @__PURE__ */(() => {
1602
+ class ResponseEnvelope {
1603
+ constructor(response, value) {
1604
+ this.response = response;
1605
+ this.value = value;
1606
+ }
1575
1607
  }
1576
- }
1577
- ResponseEnvelope.prototype[ENVELOPE] = true;
1608
+ ResponseEnvelope.prototype[ENVELOPE] = true;
1609
+ return ResponseEnvelope;
1610
+ })();
1578
1611
  function isResponseEnvelope(value) {
1579
1612
  return !!(value && typeof value === "object" && value[ENVELOPE]);
1580
1613
  }
@@ -1690,7 +1723,8 @@ function portalImpl(props) {
1690
1723
  endMarker = document.createTextNode(""),
1691
1724
  mount = () => props.mount || document.body,
1692
1725
  content = createMemo(() => [startMarker, props.children], {
1693
- ssrSource: "client"
1726
+ ssrSource: "client",
1727
+ loadingValue: undefined
1694
1728
  });
1695
1729
  createRenderEffect(
1696
1730
  () => [mount(), content(), getOwner()], ([, c, owner]) => {
@@ -1727,7 +1761,8 @@ function portalImpl(props) {
1727
1761
  ssrSource: "client"
1728
1762
  });
1729
1763
  if (sharedConfig.hydrating) return createMemo(() => treeMarker, {
1730
- ssrSource: "client"
1764
+ ssrSource: "client",
1765
+ loadingValue: undefined
1731
1766
  });
1732
1767
  return treeMarker;
1733
1768
  }
@@ -1811,11 +1846,13 @@ _moduleUrl) {
1811
1846
  if ((Comp = untrack(comp)) && !sharedConfig.hydrating) return Comp(rest);
1812
1847
  const [mounted, setMounted] = createSignal(!sharedConfig.hydrating);
1813
1848
  const gate = createMemo(() => (Comp = comp(), m = mounted(), untrack(() => Comp && m ? Comp(rest) : props.fallback)));
1814
- sharedConfig.onHydrationEnd(() => setMounted(true));
1849
+ const onHydrationEnd = sharedConfig.onHydrationEnd;
1850
+ const release = () => setMounted(true);
1851
+ onHydrationEnd ? onHydrationEnd(release) : queueMicrotask(release);
1815
1852
  return gate;
1816
1853
  };
1817
1854
  }
1818
1855
  function httpStatus(_code, _text) {}
1819
1856
  function httpHeader(_name, _value, _options) {}
1820
1857
 
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 };
1858
+ 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 };