solid-js 1.8.22 → 1.9.0

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 (59) hide show
  1. package/dist/dev.cjs +7 -6
  2. package/dist/dev.js +567 -325
  3. package/dist/server.cjs +1 -1
  4. package/dist/server.js +169 -75
  5. package/dist/solid.cjs +7 -6
  6. package/dist/solid.js +494 -283
  7. package/h/dist/h.js +40 -9
  8. package/h/jsx-runtime/dist/jsx.js +1 -1
  9. package/h/jsx-runtime/types/index.d.ts +13 -10
  10. package/h/jsx-runtime/types/jsx.d.ts +22 -1
  11. package/h/types/hyperscript.d.ts +11 -11
  12. package/h/types/index.d.ts +1 -1
  13. package/html/dist/html.cjs +4 -2
  14. package/html/dist/html.js +222 -95
  15. package/html/types/index.d.ts +1 -1
  16. package/html/types/lit.d.ts +52 -33
  17. package/package.json +1 -5
  18. package/store/dist/dev.cjs +1 -1
  19. package/store/dist/dev.js +123 -43
  20. package/store/dist/server.cjs +4 -0
  21. package/store/dist/server.js +23 -8
  22. package/store/dist/store.cjs +1 -1
  23. package/store/dist/store.js +114 -40
  24. package/store/package.json +0 -4
  25. package/store/types/index.d.ts +21 -7
  26. package/store/types/modifiers.d.ts +6 -3
  27. package/store/types/mutable.d.ts +5 -2
  28. package/store/types/server.d.ts +26 -5
  29. package/store/types/store.d.ts +219 -62
  30. package/types/index.d.ts +75 -10
  31. package/types/jsx.d.ts +35 -8
  32. package/types/reactive/array.d.ts +12 -4
  33. package/types/reactive/observable.d.ts +25 -17
  34. package/types/reactive/scheduler.d.ts +9 -6
  35. package/types/reactive/signal.d.ts +236 -143
  36. package/types/render/Suspense.d.ts +5 -5
  37. package/types/render/component.d.ts +64 -33
  38. package/types/render/flow.d.ts +43 -31
  39. package/types/render/hydration.d.ts +15 -15
  40. package/types/server/index.d.ts +57 -2
  41. package/types/server/reactive.d.ts +73 -42
  42. package/types/server/rendering.d.ts +169 -98
  43. package/universal/dist/dev.js +28 -12
  44. package/universal/dist/universal.js +28 -12
  45. package/universal/types/index.d.ts +3 -1
  46. package/universal/types/universal.d.ts +0 -1
  47. package/web/dist/dev.cjs +57 -24
  48. package/web/dist/dev.js +679 -101
  49. package/web/dist/server.cjs +96 -15
  50. package/web/dist/server.js +676 -105
  51. package/web/dist/web.cjs +53 -23
  52. package/web/dist/web.js +664 -99
  53. package/web/package.json +0 -4
  54. package/web/storage/dist/storage.js +3 -3
  55. package/web/types/client.d.ts +5 -3
  56. package/web/types/core.d.ts +10 -1
  57. package/web/types/index.d.ts +27 -10
  58. package/web/types/server-mock.d.ts +47 -32
  59. package/web/types/server.d.ts +88 -0
package/web/dist/dev.cjs CHANGED
@@ -122,7 +122,7 @@ function render(code, element, init, options = {}) {
122
122
  element.textContent = "";
123
123
  };
124
124
  }
125
- function template(html, isCE, isSVG) {
125
+ function template(html, isImportNode, isSVG) {
126
126
  let node;
127
127
  const create = () => {
128
128
  if (isHydrating()) throw new Error("Failed attempt to create new DOM elements during hydration. Check that the libraries you are using support hydration.");
@@ -130,7 +130,7 @@ function template(html, isCE, isSVG) {
130
130
  t.innerHTML = html;
131
131
  return isSVG ? t.content.firstChild.firstChild : t.content.firstChild;
132
132
  };
133
- const fn = isCE ? () => solidJs.untrack(() => document.importNode(node || (node = create()), true)) : () => (node || (node = create())).cloneNode(true);
133
+ const fn = isImportNode ? () => solidJs.untrack(() => document.importNode(node || (node = create()), true)) : () => (node || (node = create())).cloneNode(true);
134
134
  fn.cloneNode = fn;
135
135
  return fn;
136
136
  }
@@ -162,6 +162,10 @@ function setAttributeNS(node, namespace, name, value) {
162
162
  if (isHydrating(node)) return;
163
163
  if (value == null) node.removeAttributeNS(namespace, name);else node.setAttributeNS(namespace, name, value);
164
164
  }
165
+ function setBoolAttribute(node, name, value) {
166
+ if (isHydrating(node)) return;
167
+ value ? node.setAttribute(name, "") : node.removeAttribute(name);
168
+ }
165
169
  function className(node, value) {
166
170
  if (isHydrating(node)) return;
167
171
  if (value == null) node.removeAttribute("class");else node.className = value;
@@ -175,7 +179,7 @@ function addEventListener(node, name, handler, delegate) {
175
179
  } else if (Array.isArray(handler)) {
176
180
  const handlerFn = handler[0];
177
181
  node.addEventListener(name, handler[0] = e => handlerFn.call(node, handler[1], e));
178
- } else node.addEventListener(name, handler);
182
+ } else node.addEventListener(name, handler, typeof handler !== "function" && handler);
179
183
  }
180
184
  function classList(node, value, prev = {}) {
181
185
  const classKeys = Object.keys(value || {}),
@@ -249,7 +253,7 @@ function assign(node, props, isSVG, skipChildren, prevProps = {}, skipRef = fals
249
253
  for (const prop in prevProps) {
250
254
  if (!(prop in props)) {
251
255
  if (prop === "children") continue;
252
- prevProps[prop] = assignProp(node, prop, null, prevProps[prop], isSVG, skipRef);
256
+ prevProps[prop] = assignProp(node, prop, null, prevProps[prop], isSVG, skipRef, props);
253
257
  }
254
258
  }
255
259
  for (const prop in props) {
@@ -258,7 +262,7 @@ function assign(node, props, isSVG, skipChildren, prevProps = {}, skipRef = fals
258
262
  continue;
259
263
  }
260
264
  const value = props[prop];
261
- prevProps[prop] = assignProp(node, prop, value, prevProps[prop], isSVG, skipRef);
265
+ prevProps[prop] = assignProp(node, prop, value, prevProps[prop], isSVG, skipRef, props);
262
266
  }
263
267
  }
264
268
  function hydrate$1(code, element, options = {}) {
@@ -285,7 +289,10 @@ function getNextElement(template) {
285
289
  key,
286
290
  hydrating = isHydrating();
287
291
  if (!hydrating || !(node = solidJs.sharedConfig.registry.get(key = getHydrationKey()))) {
288
- if (hydrating) throw new Error(`Hydration Mismatch. Unable to find DOM nodes for hydration key: ${key}`);
292
+ if (hydrating) {
293
+ solidJs.sharedConfig.done = true;
294
+ throw new Error(`Hydration Mismatch. Unable to find DOM nodes for hydration key: ${key}\n${template ? template().outerHTML : ""}`);
295
+ }
289
296
  return template();
290
297
  }
291
298
  if (solidJs.sharedConfig.completed) solidJs.sharedConfig.completed.add(node);
@@ -322,6 +329,7 @@ function runHydrationEvents() {
322
329
  completed,
323
330
  events
324
331
  } = solidJs.sharedConfig;
332
+ if (!events) return;
325
333
  events.queued = false;
326
334
  while (events.length) {
327
335
  const [el, e] = events[0];
@@ -347,7 +355,7 @@ function toggleClassKey(node, key, value) {
347
355
  const classNames = key.trim().split(/\s+/);
348
356
  for (let i = 0, nameLen = classNames.length; i < nameLen; i++) node.classList.toggle(classNames[i], value);
349
357
  }
350
- function assignProp(node, prop, value, prev, isSVG, skipRef) {
358
+ function assignProp(node, prop, value, prev, isSVG, skipRef, props) {
351
359
  let isCE, isProp, isChildProp, propAlias, forceProp;
352
360
  if (prop === "style") return style(node, value, prev);
353
361
  if (prop === "classList") return classList(node, value, prev);
@@ -356,8 +364,8 @@ function assignProp(node, prop, value, prev, isSVG, skipRef) {
356
364
  if (!skipRef) value(node);
357
365
  } else if (prop.slice(0, 3) === "on:") {
358
366
  const e = prop.slice(3);
359
- prev && node.removeEventListener(e, prev);
360
- value && node.addEventListener(e, value);
367
+ prev && node.removeEventListener(e, prev, typeof prev !== "function" && prev);
368
+ value && node.addEventListener(e, value, typeof value !== "function" && value);
361
369
  } else if (prop.slice(0, 10) === "oncapture:") {
362
370
  const e = prop.slice(10);
363
371
  prev && node.removeEventListener(e, prev, true);
@@ -375,7 +383,9 @@ function assignProp(node, prop, value, prev, isSVG, skipRef) {
375
383
  }
376
384
  } else if (prop.slice(0, 5) === "attr:") {
377
385
  setAttribute(node, prop.slice(5), value);
378
- } else if ((forceProp = prop.slice(0, 5) === "prop:") || (isChildProp = ChildProperties.has(prop)) || !isSVG && ((propAlias = getPropAlias(prop, node.tagName)) || (isProp = Properties.has(prop))) || (isCE = node.nodeName.includes("-"))) {
386
+ } else if (prop.slice(0, 5) === "bool:") {
387
+ setBoolAttribute(node, prop.slice(5), value);
388
+ } else if ((forceProp = prop.slice(0, 5) === "prop:") || (isChildProp = ChildProperties.has(prop)) || !isSVG && ((propAlias = getPropAlias(prop, node.tagName)) || (isProp = Properties.has(prop))) || (isCE = node.nodeName.includes("-") || 'is' in props)) {
379
389
  if (forceProp) {
380
390
  prop = prop.slice(5);
381
391
  isProp = true;
@@ -391,30 +401,52 @@ function eventHandler(e) {
391
401
  if (solidJs.sharedConfig.registry && solidJs.sharedConfig.events) {
392
402
  if (solidJs.sharedConfig.events.find(([el, ev]) => ev === e)) return;
393
403
  }
404
+ let node = e.target;
394
405
  const key = `$$${e.type}`;
395
- let node = e.composedPath && e.composedPath()[0] || e.target;
396
- if (e.target !== node) {
397
- Object.defineProperty(e, "target", {
398
- configurable: true,
399
- value: node
400
- });
401
- }
402
- Object.defineProperty(e, "currentTarget", {
406
+ const oriTarget = e.target;
407
+ const oriCurrentTarget = e.currentTarget;
408
+ const retarget = value => Object.defineProperty(e, "target", {
403
409
  configurable: true,
404
- get() {
405
- return node || document;
406
- }
410
+ value
407
411
  });
408
- if (solidJs.sharedConfig.registry && !solidJs.sharedConfig.done) solidJs.sharedConfig.done = _$HY.done = true;
409
- while (node) {
412
+ const handleNode = () => {
410
413
  const handler = node[key];
411
414
  if (handler && !node.disabled) {
412
415
  const data = node[`${key}Data`];
413
416
  data !== undefined ? handler.call(node, data, e) : handler.call(node, e);
414
417
  if (e.cancelBubble) return;
415
418
  }
416
- node = node._$host || node.parentNode || node.host;
419
+ node.host && node.contains(e.target) && !node.host._$host && retarget(node.host);
420
+ return true;
421
+ };
422
+ const walkUpTree = () => {
423
+ while (handleNode() && (node = node._$host || node.parentNode || node.host));
424
+ };
425
+ Object.defineProperty(e, "currentTarget", {
426
+ configurable: true,
427
+ get() {
428
+ return node || document;
429
+ }
430
+ });
431
+ if (solidJs.sharedConfig.registry && !solidJs.sharedConfig.done) solidJs.sharedConfig.done = _$HY.done = true;
432
+ if (e.composedPath) {
433
+ const path = e.composedPath();
434
+ retarget(path[0]);
435
+ for (let i = 0; i < path.length - 2; i++) {
436
+ node = path[i];
437
+ if (!handleNode()) break;
438
+ if (node._$host) {
439
+ node = node._$host;
440
+ walkUpTree();
441
+ break;
442
+ }
443
+ if (node.parentNode === oriCurrentTarget) {
444
+ break;
445
+ }
446
+ }
417
447
  }
448
+ else walkUpTree();
449
+ retarget(oriTarget);
418
450
  }
419
451
  function insertExpression(parent, value, current, marker, unwrapArray) {
420
452
  const hydrating = isHydrating(parent);
@@ -756,6 +788,7 @@ exports.resolveSSRNode = resolveSSRNode;
756
788
  exports.runHydrationEvents = runHydrationEvents;
757
789
  exports.setAttribute = setAttribute;
758
790
  exports.setAttributeNS = setAttributeNS;
791
+ exports.setBoolAttribute = setBoolAttribute;
759
792
  exports.setProperty = setProperty;
760
793
  exports.spread = spread;
761
794
  exports.ssr = ssr;