@b9g/crank 0.5.2 → 0.5.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@b9g/crank",
3
- "version": "0.5.2",
3
+ "version": "0.5.3",
4
4
  "description": "Write JSX-driven components with functions, promises and generators.",
5
5
  "homepage": "https://crank.js.org",
6
6
  "bugs": {
package/umd.js CHANGED
@@ -1022,6 +1022,11 @@
1022
1022
  */
1023
1023
  cleanup(callback) {
1024
1024
  const ctx = this[_ContextImpl];
1025
+ if (ctx.f & IsUnmounted) {
1026
+ const value = ctx.renderer.read(getValue(ctx.ret));
1027
+ callback(value);
1028
+ return;
1029
+ }
1025
1030
  let callbacks = cleanupMap.get(ctx);
1026
1031
  if (!callbacks) {
1027
1032
  callbacks = new Set();
@@ -1432,6 +1437,9 @@
1432
1437
  }
1433
1438
  catch (err) {
1434
1439
  if (!(ctx.f & IsUpdating)) {
1440
+ if (!ctx.parent) {
1441
+ throw err;
1442
+ }
1435
1443
  return propagateError(ctx.parent, err);
1436
1444
  }
1437
1445
  throw err;
@@ -1455,6 +1463,9 @@
1455
1463
  }
1456
1464
  catch (err) {
1457
1465
  if (!(ctx.f & IsUpdating)) {
1466
+ if (!ctx.parent) {
1467
+ throw err;
1468
+ }
1458
1469
  return propagateError(ctx.parent, err);
1459
1470
  }
1460
1471
  throw err;
@@ -1697,7 +1708,16 @@
1697
1708
  // children. Sync generator components only resume when their children
1698
1709
  // have fulfilled so the element’s inflight child values will never be
1699
1710
  // defined.
1700
- oldValue = ctx.ret.inflightValue.then((value) => ctx.renderer.read(value), () => ctx.renderer.read(undefined));
1711
+ oldValue = ctx.ret.inflightValue.then((value) => ctx.renderer.read(value));
1712
+ oldValue.catch((err) => {
1713
+ if (ctx.f & IsUpdating) {
1714
+ return;
1715
+ }
1716
+ if (!ctx.parent) {
1717
+ throw err;
1718
+ }
1719
+ return propagateError(ctx.parent, err);
1720
+ });
1701
1721
  }
1702
1722
  else {
1703
1723
  oldValue = ctx.renderer.read(getValue(ctx.ret));
@@ -1775,7 +1795,10 @@
1775
1795
  returnComponent(ctx);
1776
1796
  }
1777
1797
  }, (err) => {
1778
- propagateError(ctx.parent, err);
1798
+ if (!ctx.parent) {
1799
+ throw err;
1800
+ }
1801
+ return propagateError(ctx.parent, err);
1779
1802
  });
1780
1803
  }
1781
1804
  else {
@@ -1798,7 +1821,10 @@
1798
1821
  returnComponent(ctx);
1799
1822
  }
1800
1823
  }, (err) => {
1801
- propagateError(ctx.parent, err);
1824
+ if (!ctx.parent) {
1825
+ throw err;
1826
+ }
1827
+ return propagateError(ctx.parent, err);
1802
1828
  });
1803
1829
  }
1804
1830
  else {
@@ -1816,7 +1842,12 @@
1816
1842
  ctx.f |= IsSyncExecuting;
1817
1843
  const iteration = ctx.iterator.return();
1818
1844
  if (isPromiseLike(iteration)) {
1819
- iteration.catch((err) => propagateError(ctx.parent, err));
1845
+ iteration.catch((err) => {
1846
+ if (!ctx.parent) {
1847
+ throw err;
1848
+ }
1849
+ return propagateError(ctx.parent, err);
1850
+ });
1820
1851
  }
1821
1852
  }
1822
1853
  finally {
@@ -1929,18 +1960,23 @@
1929
1960
  return updateComponentChildren(ctx, iteration.value);
1930
1961
  }
1931
1962
  function propagateError(ctx, err) {
1932
- if (ctx === undefined) {
1933
- throw err;
1934
- }
1935
1963
  let result;
1936
1964
  try {
1937
1965
  result = handleChildError(ctx, err);
1938
1966
  }
1939
1967
  catch (err) {
1968
+ if (!ctx.parent) {
1969
+ throw err;
1970
+ }
1940
1971
  return propagateError(ctx.parent, err);
1941
1972
  }
1942
1973
  if (isPromiseLike(result)) {
1943
- return result.catch((err) => propagateError(ctx.parent, err));
1974
+ return result.catch((err) => {
1975
+ if (!ctx.parent) {
1976
+ throw err;
1977
+ }
1978
+ return propagateError(ctx.parent, err);
1979
+ });
1944
1980
  }
1945
1981
  return result;
1946
1982
  }