@solidjs/web 2.0.0-rc.1 → 2.0.0-rc.3

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 (84) hide show
  1. package/dist/dev.cjs +116 -66
  2. package/dist/dev.js +109 -65
  3. package/dist/server.cjs +386 -109
  4. package/dist/server.js +378 -113
  5. package/dist/web.cjs +113 -64
  6. package/dist/web.js +106 -63
  7. package/frames/dist/client.cjs +100 -14
  8. package/frames/dist/client.dev.cjs +103 -14
  9. package/frames/dist/client.dev.js +104 -15
  10. package/frames/dist/client.js +101 -15
  11. package/frames/dist/server.cjs +285 -154
  12. package/frames/dist/server.js +287 -156
  13. package/package.json +20 -22
  14. package/serialization/dist/decode.cjs +22 -5
  15. package/serialization/dist/decode.js +23 -6
  16. package/serialization/dist/serialization.cjs +26 -13
  17. package/serialization/dist/serialization.js +26 -8
  18. package/serialization/types/index.d.ts +69 -157
  19. package/serialization/types/serializer-decode.d.ts +89 -112
  20. package/serialization/types/serializer.d.ts +94 -0
  21. package/serialization/types-cjs/index.d.cts +69 -157
  22. package/serialization/types-cjs/serializer-decode.d.cts +89 -112
  23. package/serialization/types-cjs/serializer.d.cts +94 -0
  24. package/server-functions/dist/client.cjs +48 -7
  25. package/server-functions/dist/client.js +48 -8
  26. package/server-functions/dist/server.cjs +76 -5
  27. package/server-functions/dist/server.dev.cjs +76 -5
  28. package/server-functions/dist/server.dev.js +76 -6
  29. package/server-functions/dist/server.js +76 -6
  30. package/types/client.d.ts +150 -290
  31. package/types/constants.d.ts +18 -0
  32. package/types/cookies.d.ts +31 -75
  33. package/types/frames/frame-client.d.ts +287 -259
  34. package/types/frames/frame-container-plugin.d.ts +71 -0
  35. package/types/frames/frame-sink.d.ts +58 -160
  36. package/types/frames/frame-transport.d.ts +161 -194
  37. package/types/frames/serializer-decode.d.ts +159 -0
  38. package/types/frames/serializer.d.ts +69 -157
  39. package/types/head.d.ts +16 -0
  40. package/types/index.d.ts +0 -65
  41. package/types/index.server.d.ts +125 -0
  42. package/types/jsx.d.ts +5 -13
  43. package/types/reconcile.d.ts +1 -0
  44. package/types/render.d.ts +4 -0
  45. package/types/response.d.ts +41 -153
  46. package/types/serializer-decode.d.ts +89 -112
  47. package/types/serializer.d.ts +69 -157
  48. package/types/server-functions/client.d.ts +101 -199
  49. package/types/server-functions/flash.d.ts +10 -30
  50. package/types/server-functions/registry.d.ts +63 -0
  51. package/types/server-functions/rich-args.d.ts +1 -10
  52. package/types/server-functions/server.d.ts +301 -518
  53. package/types/server-functions/shared.d.ts +112 -458
  54. package/types/server-mock.d.ts +13 -4
  55. package/types/server.d.ts +256 -427
  56. package/types-cjs/client.d.cts +150 -290
  57. package/types-cjs/constants.d.cts +18 -0
  58. package/types-cjs/cookies.d.cts +31 -75
  59. package/types-cjs/frames/frame-client.d.cts +287 -259
  60. package/types-cjs/frames/frame-container-plugin.d.cts +71 -0
  61. package/types-cjs/frames/frame-sink.d.cts +58 -160
  62. package/types-cjs/frames/frame-transport.d.cts +161 -194
  63. package/types-cjs/frames/serializer-decode.d.cts +159 -0
  64. package/types-cjs/frames/serializer.d.cts +69 -157
  65. package/types-cjs/head.d.cts +16 -0
  66. package/types-cjs/index.d.cts +0 -65
  67. package/types-cjs/index.server.d.cts +125 -0
  68. package/types-cjs/jsx.d.cts +5 -13
  69. package/types-cjs/reconcile.d.cts +1 -0
  70. package/types-cjs/render.d.cts +4 -0
  71. package/types-cjs/response.d.cts +41 -153
  72. package/types-cjs/serializer-decode.d.cts +89 -112
  73. package/types-cjs/serializer.d.cts +69 -157
  74. package/types-cjs/server-functions/client.d.cts +101 -199
  75. package/types-cjs/server-functions/flash.d.cts +10 -30
  76. package/types-cjs/server-functions/registry.d.cts +63 -0
  77. package/types-cjs/server-functions/rich-args.d.cts +1 -10
  78. package/types-cjs/server-functions/server.d.cts +301 -518
  79. package/types-cjs/server-functions/shared.d.cts +112 -458
  80. package/types-cjs/server-mock.d.cts +13 -4
  81. package/types-cjs/server.d.cts +256 -427
  82. package/LICENSE +0 -21
  83. package/types/core.d.ts +0 -6
  84. package/types-cjs/core.d.cts +0 -6
package/dist/web.cjs CHANGED
@@ -57,23 +57,16 @@ const transparentOptions = {
57
57
  const syncOptions = {
58
58
  sync: true
59
59
  };
60
- const effect = (fn, effectFn, options) => solidJs.createRenderEffect(fn, effectFn, options ? {
61
- sync: true,
62
- ...options,
63
- transparent: !options.scope
64
- } : transparentOptions);
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
- };
60
+ function effect(fn, effectFn, options) {
61
+ solidJs.createRenderEffect(fn, effectFn, options ? {
62
+ sync: true,
63
+ ...options,
64
+ transparent: !options.scope
65
+ } : transparentOptions);
66
+ }
67
+ function memo(fn) {
68
+ return solidJs.createMemo(() => fn(), syncOptions);
69
+ }
77
70
 
78
71
  function reconcileArrays(parentNode, a, b, marker) {
79
72
  let bLength = b.length,
@@ -87,13 +80,18 @@ function reconcileArrays(parentNode, a, b, marker) {
87
80
  map = null,
88
81
  anchor,
89
82
  anchorTag;
83
+ const isLive = n => {
84
+ if (!n) return false;
85
+ const tag = n[$$SLOT];
86
+ return n.parentNode === parentNode && (!tag || tag === marker);
87
+ };
90
88
  while (aStart < aEnd || bStart < bEnd) {
91
- if (a[aStart] === b[bStart]) {
89
+ if (a[aStart] === b[bStart] && isLive(a[aStart])) {
92
90
  aStart++;
93
91
  bStart++;
94
92
  continue;
95
93
  }
96
- while (a[aEnd - 1] === b[bEnd - 1]) {
94
+ while (a[aEnd - 1] === b[bEnd - 1] && isLive(a[aEnd - 1])) {
97
95
  aEnd--;
98
96
  bEnd--;
99
97
  }
@@ -324,11 +322,30 @@ function getServerFunctionRPC() {
324
322
  return globalThis[SERVER_FUNCTION_RPC];
325
323
  }
326
324
 
327
- const $$EVENT_OWNER = "_$DX_EVENT_OWNER";
325
+ const assetGates = new WeakMap();
326
+ const waitAsset = promise => {
327
+ let gate = assetGates.get(promise);
328
+ if (!gate) {
329
+ solidJs.runWithOwner(null, () => {
330
+ gate = solidJs.createMemo(() => promise);
331
+ });
332
+ assetGates.set(promise, gate);
333
+ }
334
+ gate();
335
+ };
336
+ const $$EVENT_OWNER = "_$SOLID_EVENT_OWNER";
328
337
  const INNER_OWNED = {};
329
338
  const delegatedEvents = new Set();
330
339
  const delegatedContainers = new Map();
331
- function render$1(code, element, init, options = {}) {
340
+ function voidFn() {}
341
+ function generateHydrationScript(_options) {
342
+ return "";
343
+ }
344
+ function HydrationScript(_props) {
345
+ return null;
346
+ }
347
+ const getRequestEvent = voidFn;
348
+ function render(code, element, init, options = {}) {
332
349
  let disposer;
333
350
  registerDelegatedRoot(element);
334
351
  try {
@@ -339,15 +356,20 @@ function render$1(code, element, init, options = {}) {
339
356
  effect(() => solidJs.flatten(tree), () => {});
340
357
  } else {
341
358
  const tree = code();
342
- insert(element, () => tree, element.firstChild ? null : undefined, init, options.insertOptions);
359
+ insert(element, () => tree, element.firstChild ? null : undefined, init, {
360
+ ...options.insertOptions,
361
+ schedule: true
362
+ });
343
363
  }
344
364
  }, {
345
365
  id: options.renderId
346
366
  });
367
+ solidJs.flush();
347
368
  } catch (err) {
348
369
  if (disposer) disposer();
349
370
  unregisterDelegatedRoot(element);
350
371
  throw err;
372
+ } finally {
351
373
  }
352
374
  return () => {
353
375
  disposer();
@@ -432,7 +454,7 @@ function setProperty(node, name, value) {
432
454
  node[name] = value;
433
455
  }
434
456
  let claimHandlers = null;
435
- const CLAIM_SEAM = Symbol.for("dom-expressions.element-claims");
457
+ const CLAIM_SEAM = Symbol.for("solid.element-claims");
436
458
  function registerElementClaim(handler) {
437
459
  (claimHandlers || (claimHandlers = globalThis[CLAIM_SEAM] = [])).push(handler);
438
460
  return () => {
@@ -586,6 +608,11 @@ function ref(fn, element) {
586
608
  const resolved = solidJs.untrack(fn);
587
609
  solidJs.runWithOwner(null, () => applyRef(resolved, element));
588
610
  }
611
+ const PURE_ROW = Symbol.for("solid.pure-row");
612
+ function rowProof(fn) {
613
+ fn[PURE_ROW] = true;
614
+ return fn;
615
+ }
589
616
  function scope(fn) {
590
617
  fn.$s = true;
591
618
  return fn;
@@ -649,6 +676,11 @@ function stripTextSeparators(nodes) {
649
676
  nodes.length = j;
650
677
  return nodes;
651
678
  }
679
+ function patchDriver(subject, body) {
680
+ {
681
+ effect(() => body(subject, subject, false), () => body(subject, undefined, true));
682
+ }
683
+ }
652
684
  function insert(parent, accessor, marker, initial, options) {
653
685
  const multi = marker !== undefined;
654
686
  const host = options && options.host;
@@ -889,7 +921,7 @@ function initHeadRegistry() {
889
921
  headOwned = new Map();
890
922
  headApplied = new Map();
891
923
  const t = document.querySelector("title");
892
- headFallbackTitle = t && !t.hasAttribute("data-dh") ? t.textContent : null;
924
+ headFallbackTitle = t ? t.hasAttribute("data-dh") ? t.getAttribute("data-dhf") : t.textContent : null;
893
925
  if (globalThis._$HY) globalThis._$HY.h = applyServerHeadOps;
894
926
  }
895
927
  function applyServerHeadOps(ops) {
@@ -944,7 +976,11 @@ function flushHeadRegistry() {
944
976
  headOwned.delete(identity);
945
977
  headApplied.delete(identity);
946
978
  if (identity === "title") {
947
- if (headFallbackTitle != null) setHeadTitle(headFallbackTitle).removeAttribute("data-dh");
979
+ if (headFallbackTitle != null) {
980
+ const el = setHeadTitle(headFallbackTitle);
981
+ el.removeAttribute("data-dh");
982
+ el.removeAttribute("data-dhf");
983
+ }
948
984
  } else {
949
985
  for (let i = 0; i < els.length; i++) els[i].remove();
950
986
  }
@@ -1108,7 +1144,7 @@ function loadModuleAssets(mapping) {
1108
1144
  const pending = [];
1109
1145
  for (const key in mapping) {
1110
1146
  if (hy.modules[key]) continue;
1111
- const entryUrl = mapping[key];
1147
+ const entryUrl = new URL(mapping[key], document.baseURI).href;
1112
1148
  if (!hy.loading[key]) {
1113
1149
  hy.loading[key] = import(entryUrl).then(mod => {
1114
1150
  hy.modules[key] = mod;
@@ -1121,9 +1157,10 @@ function loadModuleAssets(mapping) {
1121
1157
  }
1122
1158
  return pending.length ? Promise.all(pending).then(() => {}) : undefined;
1123
1159
  }
1124
- function hydrate$1(code, element, options = {}) {
1160
+ function hydrate(code, element, options = {}) {
1161
+ solidJs.enableHydration();
1125
1162
  installHydrationRuntime();
1126
- if (globalThis._$HY.done) return render$1(code, element, [...element.childNodes], options);
1163
+ if (globalThis._$HY.done) return render(code, element, [...element.childNodes], options);
1127
1164
  options.renderId ||= "";
1128
1165
  if (!globalThis._$HY.modules) globalThis._$HY.modules = {};
1129
1166
  if (!globalThis._$HY.loading) globalThis._$HY.loading = {};
@@ -1172,7 +1209,7 @@ function hydrate$1(code, element, options = {}) {
1172
1209
  solidJs.sharedConfig.gather = gather;
1173
1210
  solidJs.sharedConfig.hydrating = true;
1174
1211
  try {
1175
- disposer = render$1(code, element, [...element.childNodes], options);
1212
+ disposer = render(code, element, [...element.childNodes], options);
1176
1213
  } finally {
1177
1214
  solidJs.sharedConfig.hydrating = false;
1178
1215
  }
@@ -1180,14 +1217,14 @@ function hydrate$1(code, element, options = {}) {
1180
1217
  console.error("Hydration module preload failed, falling back to client render:", err);
1181
1218
  solidJs.sharedConfig.hydrating = false;
1182
1219
  solidJs.sharedConfig.registry = undefined;
1183
- disposer = render$1(code, element, [...element.childNodes], options);
1220
+ disposer = render(code, element, [...element.childNodes], options);
1184
1221
  });
1185
1222
  return () => disposer && disposer();
1186
1223
  }
1187
1224
  }
1188
1225
  try {
1189
1226
  gatherHydratable(element, options.renderId);
1190
- return render$1(code, element, [...element.childNodes], options);
1227
+ return render(code, element, [...element.childNodes], options);
1191
1228
  } finally {
1192
1229
  solidJs.sharedConfig.hydrating = false;
1193
1230
  }
@@ -1372,7 +1409,11 @@ function eventHandler(e, container, state) {
1372
1409
  value
1373
1410
  });
1374
1411
  const handleNode = () => {
1375
- const handler = node[key];
1412
+ let handler = node[key];
1413
+ if (handler === undefined && node.hasAttribute && node.hasAttribute("_bnd")) {
1414
+ const seam = globalThis[Symbol.for("solid.bnd")];
1415
+ if (seam) handler = seam.resolve(node, e.type);
1416
+ }
1376
1417
  if (handler && !node.disabled) {
1377
1418
  const data = node[`${key}Data`];
1378
1419
  data !== undefined ? handler.call(node, data, e) : handler.call(node, e);
@@ -1419,7 +1460,16 @@ function eventHandler(e, container, state) {
1419
1460
  }
1420
1461
  function insertExpression(parent, value, current, marker) {
1421
1462
  if (hydrationRt !== null && isHydrating(parent)) {
1422
- if (value && value !== current) for (const n of Array.isArray(value) ? value : [value]) if (n && n.nodeType && !isHydrating(n)) return current;
1463
+ if (value && value !== current) {
1464
+ const arr = Array.isArray(value);
1465
+ for (const n of arr ? value : [value]) {
1466
+ if (n && n.nodeType) {
1467
+ if (!isHydrating(n)) return current;
1468
+ } else if (arr && (typeof n === "string" || typeof n === "number")) {
1469
+ return current;
1470
+ }
1471
+ }
1472
+ }
1423
1473
  return value;
1424
1474
  }
1425
1475
  if (value === current) return value;
@@ -1450,6 +1500,17 @@ function insertExpression(parent, value, current, marker) {
1450
1500
  if (marker) value[$$SLOT] = marker;
1451
1501
  } else if (Array.isArray(value)) {
1452
1502
  const currentArray = current && Array.isArray(current);
1503
+ for (let i = 0, len = value.length; i < len; i++) {
1504
+ const item = value[i],
1505
+ t = typeof item;
1506
+ if (t === "string" || t === "number") {
1507
+ const prev = currentArray ? current[i] : undefined;
1508
+ if (prev && prev.nodeType === 3) {
1509
+ if (prev.data !== "" + item) prev.data = item;
1510
+ value[i] = prev;
1511
+ } else value[i] = document.createTextNode(item);
1512
+ }
1513
+ }
1453
1514
  if (value.length === 0) {
1454
1515
  cleanChildren(parent, current, marker);
1455
1516
  } else if (currentArray) {
@@ -1470,12 +1531,12 @@ function normalize(value, current, multi, doNotUnwrap) {
1470
1531
  });
1471
1532
  if (doNotUnwrap && typeof value === "function") return value;
1472
1533
  if (multi && !Array.isArray(value)) value = [value != null ? value : ""];
1473
- if (Array.isArray(value)) {
1534
+ if (solidJs.sharedConfig.hydrating && Array.isArray(value)) {
1474
1535
  for (let i = 0, len = value.length; i < len; i++) {
1475
1536
  const item = value[i],
1476
1537
  prev = current && current[i],
1477
1538
  t = typeof item;
1478
- if (t === "string" || t === "number") value[i] = prev && prev.nodeType === 3 && (solidJs.sharedConfig.hydrating || prev.data === "" + item) ? prev : document.createTextNode(item);
1539
+ if ((t === "string" || t === "number") && prev && prev.nodeType === 3) value[i] = prev;
1479
1540
  }
1480
1541
  }
1481
1542
  return value;
@@ -1556,7 +1617,6 @@ function gatherHydratable(element, root) {
1556
1617
  function getHydrationKey() {
1557
1618
  return solidJs.sharedConfig.getNextContextId();
1558
1619
  }
1559
- const voidFn = () => undefined;
1560
1620
  const RequestContext = Symbol();
1561
1621
 
1562
1622
  function throwInBrowser(func) {
@@ -1632,11 +1692,14 @@ function isSafeError(value) {
1632
1692
  return !!(value && (typeof value === "object" || typeof value === "function") && value[SAFE_ERROR]);
1633
1693
  }
1634
1694
  const REVALIDATE_HEADER = "X-Revalidate";
1635
- function initWithRevalidate(init) {
1695
+ function initWithRevalidate(init = {}) {
1696
+ const resolved = typeof init === "number" ? {
1697
+ status: init
1698
+ } : init;
1636
1699
  const {
1637
1700
  revalidate,
1638
1701
  ...responseInit
1639
- } = init;
1702
+ } = resolved;
1640
1703
  let headers;
1641
1704
  if (responseInit.headers && responseInit.headers.getSetCookie) {
1642
1705
  headers = new Headers();
@@ -1662,9 +1725,7 @@ function redirect(url, init = 302) {
1662
1725
  const {
1663
1726
  responseInit,
1664
1727
  headers
1665
- } = initWithRevalidate(typeof init === "number" ? {
1666
- status: init
1667
- } : init);
1728
+ } = initWithRevalidate(init);
1668
1729
  if (responseInit.status === undefined) {
1669
1730
  responseInit.status = 302;
1670
1731
  }
@@ -1696,26 +1757,8 @@ function respond(value, init = {}) {
1696
1757
  }), value);
1697
1758
  }
1698
1759
 
1699
- const mergeProps = solidJs.merge;
1700
1760
  const isServer = false;
1701
1761
  const isDev = false;
1702
- function render(code, element, init, options = {}) {
1703
- try {
1704
- const dispose = render$1(code, element, init, {
1705
- ...options,
1706
- insertOptions: {
1707
- schedule: true
1708
- }
1709
- });
1710
- solidJs.flush();
1711
- return dispose;
1712
- } finally {
1713
- }
1714
- }
1715
- const hydrate = (...args) => {
1716
- solidJs.enableHydration();
1717
- return hydrate$1(...args);
1718
- };
1719
1762
  function Portal(props) {
1720
1763
  return solidJs.runWithOwner(solidJs.createOwner(), () => portalImpl(props));
1721
1764
  }
@@ -1768,7 +1811,7 @@ function portalImpl(props) {
1768
1811
  });
1769
1812
  return treeMarker;
1770
1813
  }
1771
- const COMPONENT_BINDING = Symbol.for("dom-expressions.component-binding");
1814
+ const COMPONENT_BINDING = Symbol.for("solid.component-binding");
1772
1815
  function bindingOf(value) {
1773
1816
  return value !== null && (typeof value === "function" || typeof value === "object") && value[COMPONENT_BINDING] || undefined;
1774
1817
  }
@@ -1905,6 +1948,10 @@ Object.defineProperty(exports, "getOwner", {
1905
1948
  enumerable: true,
1906
1949
  get: function () { return solidJs.getOwner; }
1907
1950
  });
1951
+ Object.defineProperty(exports, "mergeProps", {
1952
+ enumerable: true,
1953
+ get: function () { return solidJs.merge; }
1954
+ });
1908
1955
  Object.defineProperty(exports, "untrack", {
1909
1956
  enumerable: true,
1910
1957
  get: function () { return solidJs.untrack; }
@@ -1915,7 +1962,7 @@ exports.DOMWithState = DOMWithState;
1915
1962
  exports.DelegatedEvents = DelegatedEvents;
1916
1963
  exports.Dynamic = Dynamic;
1917
1964
  exports.HREF = HREF;
1918
- exports.HydrationScript = voidFn;
1965
+ exports.HydrationScript = HydrationScript;
1919
1966
  exports.MathMLElements = MathMLElements;
1920
1967
  exports.Namespaces = Namespaces;
1921
1968
  exports.Portal = Portal;
@@ -1945,7 +1992,7 @@ exports.dynamic = dynamic;
1945
1992
  exports.dynamicProperty = dynamicProperty;
1946
1993
  exports.effect = effect;
1947
1994
  exports.escape = escape;
1948
- exports.generateHydrationScript = voidFn;
1995
+ exports.generateHydrationScript = generateHydrationScript;
1949
1996
  exports.getDelegatedRoot = getDelegatedRoot;
1950
1997
  exports.getExpectedRedirectStatus = getExpectedRedirectStatus;
1951
1998
  exports.getFirstChild = getFirstChild;
@@ -1954,7 +2001,7 @@ exports.getNextElement = getNextElement;
1954
2001
  exports.getNextMarker = getNextMarker;
1955
2002
  exports.getNextMatch = getNextMatch;
1956
2003
  exports.getNextSibling = getNextSibling;
1957
- exports.getRequestEvent = voidFn;
2004
+ exports.getRequestEvent = getRequestEvent;
1958
2005
  exports.getServerFunctionMetadata = getServerFunctionMetadata;
1959
2006
  exports.getServerFunctionRPC = getServerFunctionRPC;
1960
2007
  exports.hasFlashCookie = hasFlashCookie;
@@ -1971,8 +2018,8 @@ exports.isServer = isServer;
1971
2018
  exports.isServerFunction = isServerFunction;
1972
2019
  exports.markSafeError = markSafeError;
1973
2020
  exports.memo = memo;
1974
- exports.mergeProps = mergeProps;
1975
2021
  exports.parseCookieHeader = parseCookieHeader;
2022
+ exports.patchDriver = patchDriver;
1976
2023
  exports.redirect = redirect;
1977
2024
  exports.ref = ref;
1978
2025
  exports.registerDelegatedContainer = registerDelegatedContainer;
@@ -1984,6 +2031,7 @@ exports.renderToStream = renderToStream;
1984
2031
  exports.renderToString = renderToString;
1985
2032
  exports.resolveSSRNode = resolveSSRNode;
1986
2033
  exports.respond = respond;
2034
+ exports.rowProof = rowProof;
1987
2035
  exports.runHydrationEvents = runHydrationEvents;
1988
2036
  exports.scope = scope;
1989
2037
  exports.serializeCookie = serializeCookie;
@@ -2005,4 +2053,5 @@ exports.template = template;
2005
2053
  exports.unregisterDelegatedContainer = unregisterDelegatedContainer;
2006
2054
  exports.unregisterDelegatedRoot = unregisterDelegatedRoot;
2007
2055
  exports.useHead = useHead;
2056
+ exports.waitAsset = waitAsset;
2008
2057
  exports.warmAsset = warmAsset;