aberdeen 1.13.0 → 1.15.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 (79) hide show
  1. package/dist/src/aberdeen.d.ts +15 -0
  2. package/dist/src/aberdeen.js +39 -11
  3. package/dist/src/aberdeen.js.map +3 -3
  4. package/dist/tests/fakedom.js +6 -6
  5. package/dist/tests/fakedom.js.map +3 -3
  6. package/dist/tests/helpers.js +6 -6
  7. package/dist/tests/helpers.js.map +3 -3
  8. package/dist-docs/Tutorial/index.html +2 -2
  9. package/dist-docs/aberdeen/A/index.html +2 -2
  10. package/dist-docs/aberdeen/CUSTOM_DUMP/index.html +7 -0
  11. package/dist-docs/aberdeen/NO_COPY/index.html +2 -2
  12. package/dist-docs/aberdeen/OPAQUE/index.html +2 -2
  13. package/dist-docs/aberdeen/PromiseProxy/index.html +5 -5
  14. package/dist-docs/aberdeen/clean/index.html +2 -2
  15. package/dist-docs/aberdeen/clone/index.html +2 -2
  16. package/dist-docs/aberdeen/copy/index.html +3 -3
  17. package/dist-docs/aberdeen/count/index.html +2 -2
  18. package/dist-docs/aberdeen/cssVars/index.html +2 -2
  19. package/dist-docs/aberdeen/darkMode/index.html +2 -2
  20. package/dist-docs/aberdeen/default/index.html +5 -2
  21. package/dist-docs/aberdeen/derive/index.html +2 -2
  22. package/dist-docs/aberdeen/disableCreateDestroy/index.html +2 -2
  23. package/dist-docs/aberdeen/dump/index.html +2 -2
  24. package/dist-docs/aberdeen/index.html +5 -2
  25. package/dist-docs/aberdeen/insertCss/index.html +2 -2
  26. package/dist-docs/aberdeen/insertGlobalCss/index.html +2 -2
  27. package/dist-docs/aberdeen/invertString/index.html +2 -2
  28. package/dist-docs/aberdeen/isEmpty/index.html +2 -2
  29. package/dist-docs/aberdeen/map/index.html +4 -4
  30. package/dist-docs/aberdeen/merge/index.html +3 -3
  31. package/dist-docs/aberdeen/mount/index.html +2 -2
  32. package/dist-docs/aberdeen/multiMap/index.html +4 -4
  33. package/dist-docs/aberdeen/onEach/index.html +2 -2
  34. package/dist-docs/aberdeen/partition/index.html +4 -4
  35. package/dist-docs/aberdeen/peek/index.html +5 -5
  36. package/dist-docs/aberdeen/proxy/index.html +2 -2
  37. package/dist-docs/aberdeen/ref/index.html +2 -2
  38. package/dist-docs/aberdeen/runQueue/index.html +2 -2
  39. package/dist-docs/aberdeen/setErrorHandler/index.html +2 -2
  40. package/dist-docs/aberdeen/setSpacingCssVars/index.html +2 -2
  41. package/dist-docs/aberdeen/unmountAll/index.html +2 -2
  42. package/dist-docs/aberdeen/unproxy/index.html +2 -2
  43. package/dist-docs/assets/aberdeen/aberdeen.d.ts +15 -0
  44. package/dist-docs/assets/aberdeen/aberdeen.js +39 -11
  45. package/dist-docs/assets/aberdeen/aberdeen.js.map +3 -3
  46. package/dist-docs/assets/navigation.js +1 -1
  47. package/dist-docs/assets/search.js +1 -1
  48. package/dist-docs/dispatcher/Dispatcher/index.html +4 -4
  49. package/dist-docs/dispatcher/MATCH_FAILED/index.html +2 -2
  50. package/dist-docs/dispatcher/MATCH_REST/index.html +2 -2
  51. package/dist-docs/dispatcher/index.html +2 -2
  52. package/dist-docs/hierarchy.html +1 -1
  53. package/dist-docs/index.html +2 -2
  54. package/dist-docs/media/CHANGELOG.md +7 -0
  55. package/dist-docs/modules.html +1 -1
  56. package/dist-docs/prediction/applyCanon/index.html +2 -2
  57. package/dist-docs/prediction/applyPrediction/index.html +2 -2
  58. package/dist-docs/prediction/index.html +2 -2
  59. package/dist-docs/route/Route/index.html +9 -9
  60. package/dist-docs/route/back/index.html +2 -2
  61. package/dist-docs/route/current/index.html +2 -2
  62. package/dist-docs/route/go/index.html +2 -2
  63. package/dist-docs/route/index.html +2 -2
  64. package/dist-docs/route/interceptLinks/index.html +2 -2
  65. package/dist-docs/route/persistScroll/index.html +2 -2
  66. package/dist-docs/route/push/index.html +2 -2
  67. package/dist-docs/route/setLog/index.html +2 -2
  68. package/dist-docs/route/up/index.html +2 -2
  69. package/dist-docs/sitemap.xml +61 -57
  70. package/dist-docs/transitions/grow/index.html +2 -2
  71. package/dist-docs/transitions/index.html +2 -2
  72. package/dist-docs/transitions/shrink/index.html +2 -2
  73. package/package.json +13 -13
  74. package/skill/aberdeen.md +82 -53
  75. package/skill/dispatcher.md +6 -6
  76. package/skill/prediction.md +3 -3
  77. package/skill/route.md +17 -17
  78. package/skill/transitions.md +3 -3
  79. package/src/aberdeen.ts +55 -11
@@ -896,6 +896,20 @@ export declare function partition<IN_K extends string | number | symbol, OUT_K e
896
896
  * ```
897
897
  */
898
898
  export declare function dump<T>(data: T): T;
899
+ /**
900
+ * When set on an object or its prototype chain, {@link dump} calls this as a render function
901
+ * (with the object as `this`) instead of its default recursive rendering. If the value is not
902
+ * a function, it's treated as a string to display.
903
+ *
904
+ * @example
905
+ * ```typescript
906
+ * class Color {
907
+ * constructor(public r: number, public g: number, public b: number) {}
908
+ * [CUSTOM_DUMP]() { A(`#rgb(${this.r}, ${this.g}, ${this.b})`); }
909
+ * }
910
+ * ```
911
+ */
912
+ export declare const CUSTOM_DUMP: unique symbol;
899
913
  /**
900
914
  * The main Aberdeen API. `A` is itself a callable function for building reactive DOM trees
901
915
  * (creating elements, setting attributes, adding content). All other Aberdeen functions and
@@ -918,6 +932,7 @@ declare const _default: typeof A & {
918
932
  /** {@inheritDoc copy} */ copy: typeof copy;
919
933
  /** {@inheritDoc count} */ count: typeof count;
920
934
  /** {@inheritDoc cssVars} */ cssVars: Record<string, string>;
935
+ /** {@inheritDoc CUSTOM_DUMP} */ CUSTOM_DUMP: symbol;
921
936
  /** {@inheritDoc darkMode} */ darkMode: typeof darkMode;
922
937
  /** {@inheritDoc derive} */ derive: typeof derive;
923
938
  /** {@inheritDoc disableCreateDestroy} */ disableCreateDestroy: typeof disableCreateDestroy;
@@ -981,7 +981,7 @@ var setHandler = {
981
981
  };
982
982
  var proxyMap = new WeakMap;
983
983
  function optProxy(value) {
984
- if (typeof value !== "object" || !value || value[TARGET_SYMBOL] !== undefined || value[OPAQUE]) {
984
+ if (typeof value !== "object" || !value || value[TARGET_SYMBOL] !== undefined || value[OPAQUE] || value instanceof Date) {
985
985
  return value;
986
986
  }
987
987
  let proxied = proxyMap.get(value);
@@ -1733,26 +1733,52 @@ function partition(source, func) {
1733
1733
  return out;
1734
1734
  }
1735
1735
  function dump(data) {
1736
+ const org = dumpSeen;
1737
+ dumpSeen ||= new Set;
1738
+ try {
1739
+ rawDump(data, dumpSeen);
1740
+ } finally {
1741
+ dumpSeen = org;
1742
+ }
1743
+ return data;
1744
+ }
1745
+ var dumpSeen;
1746
+ function rawDump(data, seen) {
1736
1747
  if (data && typeof data === "object") {
1737
- const name = data.constructor.name.toLowerCase() || "unknown object";
1738
- A(`#<${name}>`);
1739
- if (OPAQUE in data) {
1740
- A("# [OPAQUE]");
1748
+ const name = data.constructor.name || "unknown object";
1749
+ if (seen.has(data)) {
1750
+ A(`#<${name}: circular reference>`);
1751
+ return;
1752
+ }
1753
+ seen.add(data);
1754
+ clean(() => seen.delete(data));
1755
+ const customDump = data[CUSTOM_DUMP];
1756
+ if (customDump !== undefined) {
1757
+ if (typeof customDump === "function")
1758
+ customDump.call(data);
1759
+ else
1760
+ A(`#${customDump}`);
1741
1761
  } else {
1742
- A("ul", () => {
1762
+ A(`#<${name}>`, "ul", () => {
1743
1763
  onEach(data, (value, key) => {
1744
1764
  A("li", () => {
1745
- A(`#${JSON.stringify(key)}: `);
1746
- dump(value);
1765
+ if (!(data instanceof Array))
1766
+ A(`#${JSON.stringify(key)}: `);
1767
+ rawDump(value, seen);
1747
1768
  });
1748
1769
  });
1749
1770
  });
1750
1771
  }
1751
- } else if (data !== undefined) {
1772
+ } else if (data === undefined) {
1773
+ A("#undefined");
1774
+ } else {
1752
1775
  A("#" + JSON.stringify(data));
1753
1776
  }
1754
- return data;
1755
1777
  }
1778
+ var CUSTOM_DUMP = Symbol("CUSTOM_DUMP");
1779
+ Date.prototype[CUSTOM_DUMP] = function() {
1780
+ A("#<Date> " + this.toISOString());
1781
+ };
1756
1782
  function internalError(code) {
1757
1783
  throw new Error(`Aberdeen internal error ${code}`);
1758
1784
  }
@@ -1810,6 +1836,7 @@ var aberdeen_default = Object.assign(A, {
1810
1836
  copy,
1811
1837
  count,
1812
1838
  cssVars,
1839
+ CUSTOM_DUMP,
1813
1840
  darkMode,
1814
1841
  derive,
1815
1842
  disableCreateDestroy,
@@ -1871,8 +1898,9 @@ export {
1871
1898
  NO_COPY,
1872
1899
  MAP_SIZE_SYMBOL,
1873
1900
  EMPTY,
1901
+ CUSTOM_DUMP,
1874
1902
  A
1875
1903
  };
1876
1904
 
1877
- //# debugId=B5E9F155214345E564756E2164756E21
1905
+ //# debugId=01BD2B2FFEBF033A64756E2164756E21
1878
1906
  //# sourceMappingURL=aberdeen.js.map