@b9g/crank 0.5.2 → 0.5.4

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/crank.js CHANGED
@@ -1017,6 +1017,11 @@ class Context {
1017
1017
  */
1018
1018
  cleanup(callback) {
1019
1019
  const ctx = this[_ContextImpl];
1020
+ if (ctx.f & IsUnmounted) {
1021
+ const value = ctx.renderer.read(getValue(ctx.ret));
1022
+ callback(value);
1023
+ return;
1024
+ }
1020
1025
  let callbacks = cleanupMap.get(ctx);
1021
1026
  if (!callbacks) {
1022
1027
  callbacks = new Set();
@@ -1427,6 +1432,9 @@ function enqueueComponentRun(ctx, hydrationData) {
1427
1432
  }
1428
1433
  catch (err) {
1429
1434
  if (!(ctx.f & IsUpdating)) {
1435
+ if (!ctx.parent) {
1436
+ throw err;
1437
+ }
1430
1438
  return propagateError(ctx.parent, err);
1431
1439
  }
1432
1440
  throw err;
@@ -1450,6 +1458,9 @@ function enqueueComponentRun(ctx, hydrationData) {
1450
1458
  }
1451
1459
  catch (err) {
1452
1460
  if (!(ctx.f & IsUpdating)) {
1461
+ if (!ctx.parent) {
1462
+ throw err;
1463
+ }
1453
1464
  return propagateError(ctx.parent, err);
1454
1465
  }
1455
1466
  throw err;
@@ -1692,7 +1703,16 @@ async function runAsyncGenComponent(ctx, iterationP, hydrationData) {
1692
1703
  // children. Sync generator components only resume when their children
1693
1704
  // have fulfilled so the element’s inflight child values will never be
1694
1705
  // defined.
1695
- oldValue = ctx.ret.inflightValue.then((value) => ctx.renderer.read(value), () => ctx.renderer.read(undefined));
1706
+ oldValue = ctx.ret.inflightValue.then((value) => ctx.renderer.read(value));
1707
+ oldValue.catch((err) => {
1708
+ if (ctx.f & IsUpdating) {
1709
+ return;
1710
+ }
1711
+ if (!ctx.parent) {
1712
+ throw err;
1713
+ }
1714
+ return propagateError(ctx.parent, err);
1715
+ });
1696
1716
  }
1697
1717
  else {
1698
1718
  oldValue = ctx.renderer.read(getValue(ctx.ret));
@@ -1770,7 +1790,10 @@ function unmountComponent(ctx) {
1770
1790
  returnComponent(ctx);
1771
1791
  }
1772
1792
  }, (err) => {
1773
- propagateError(ctx.parent, err);
1793
+ if (!ctx.parent) {
1794
+ throw err;
1795
+ }
1796
+ return propagateError(ctx.parent, err);
1774
1797
  });
1775
1798
  }
1776
1799
  else {
@@ -1793,7 +1816,10 @@ function unmountComponent(ctx) {
1793
1816
  returnComponent(ctx);
1794
1817
  }
1795
1818
  }, (err) => {
1796
- propagateError(ctx.parent, err);
1819
+ if (!ctx.parent) {
1820
+ throw err;
1821
+ }
1822
+ return propagateError(ctx.parent, err);
1797
1823
  });
1798
1824
  }
1799
1825
  else {
@@ -1811,7 +1837,12 @@ function returnComponent(ctx) {
1811
1837
  ctx.f |= IsSyncExecuting;
1812
1838
  const iteration = ctx.iterator.return();
1813
1839
  if (isPromiseLike(iteration)) {
1814
- iteration.catch((err) => propagateError(ctx.parent, err));
1840
+ iteration.catch((err) => {
1841
+ if (!ctx.parent) {
1842
+ throw err;
1843
+ }
1844
+ return propagateError(ctx.parent, err);
1845
+ });
1815
1846
  }
1816
1847
  }
1817
1848
  finally {
@@ -1924,18 +1955,23 @@ function handleChildError(ctx, err) {
1924
1955
  return updateComponentChildren(ctx, iteration.value);
1925
1956
  }
1926
1957
  function propagateError(ctx, err) {
1927
- if (ctx === undefined) {
1928
- throw err;
1929
- }
1930
1958
  let result;
1931
1959
  try {
1932
1960
  result = handleChildError(ctx, err);
1933
1961
  }
1934
1962
  catch (err) {
1963
+ if (!ctx.parent) {
1964
+ throw err;
1965
+ }
1935
1966
  return propagateError(ctx.parent, err);
1936
1967
  }
1937
1968
  if (isPromiseLike(result)) {
1938
- return result.catch((err) => propagateError(ctx.parent, err));
1969
+ return result.catch((err) => {
1970
+ if (!ctx.parent) {
1971
+ throw err;
1972
+ }
1973
+ return propagateError(ctx.parent, err);
1974
+ });
1939
1975
  }
1940
1976
  return result;
1941
1977
  }