@derivesome/core 1.0.2 → 1.0.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.
Files changed (69) hide show
  1. package/.package.json.~undo-tree~ +4 -2
  2. package/dist/cjs/index.d.ts +2 -0
  3. package/dist/cjs/index.d.ts.map +1 -1
  4. package/dist/cjs/index.js +2 -0
  5. package/dist/cjs/index.js.map +1 -1
  6. package/dist/cjs/map-proxy.d.ts +25 -0
  7. package/dist/cjs/map-proxy.d.ts.map +1 -0
  8. package/dist/cjs/map-proxy.js +80 -0
  9. package/dist/cjs/map-proxy.js.map +1 -0
  10. package/dist/cjs/reference.d.ts.map +1 -1
  11. package/dist/cjs/reference.js +3 -2
  12. package/dist/cjs/reference.js.map +1 -1
  13. package/dist/cjs/set-proxy.d.ts +26 -0
  14. package/dist/cjs/set-proxy.d.ts.map +1 -0
  15. package/dist/cjs/set-proxy.js +80 -0
  16. package/dist/cjs/set-proxy.js.map +1 -0
  17. package/dist/cjs/utils/maybeProxy.d.ts +2 -0
  18. package/dist/cjs/utils/maybeProxy.d.ts.map +1 -0
  19. package/dist/cjs/utils/maybeProxy.js +18 -0
  20. package/dist/cjs/utils/maybeProxy.js.map +1 -0
  21. package/dist/cjs/utils/nextTick.d.ts +1 -1
  22. package/dist/cjs/utils/nextTick.d.ts.map +1 -1
  23. package/dist/cjs/utils/nextTick.js +1 -1
  24. package/dist/cjs/utils/nextTick.js.map +1 -1
  25. package/dist/esm/index.d.ts +2 -0
  26. package/dist/esm/index.d.ts.map +1 -1
  27. package/dist/esm/index.js +2 -0
  28. package/dist/esm/index.js.map +1 -1
  29. package/dist/esm/map-proxy.d.ts +25 -0
  30. package/dist/esm/map-proxy.d.ts.map +1 -0
  31. package/dist/esm/map-proxy.js +76 -0
  32. package/dist/esm/map-proxy.js.map +1 -0
  33. package/dist/esm/reference.d.ts.map +1 -1
  34. package/dist/esm/reference.js +3 -2
  35. package/dist/esm/reference.js.map +1 -1
  36. package/dist/esm/set-proxy.d.ts +26 -0
  37. package/dist/esm/set-proxy.d.ts.map +1 -0
  38. package/dist/esm/set-proxy.js +76 -0
  39. package/dist/esm/set-proxy.js.map +1 -0
  40. package/dist/esm/utils/maybeProxy.d.ts +2 -0
  41. package/dist/esm/utils/maybeProxy.d.ts.map +1 -0
  42. package/dist/esm/utils/maybeProxy.js +14 -0
  43. package/dist/esm/utils/maybeProxy.js.map +1 -0
  44. package/dist/esm/utils/nextTick.d.ts +1 -1
  45. package/dist/esm/utils/nextTick.d.ts.map +1 -1
  46. package/dist/esm/utils/nextTick.js +1 -1
  47. package/dist/esm/utils/nextTick.js.map +1 -1
  48. package/package.json +1 -1
  49. package/package.json~ +1 -1
  50. package/src/.index.ts.~undo-tree~ +7 -0
  51. package/src/.map-proxy.test.ts.~undo-tree~ +68 -0
  52. package/src/.map-proxy.ts.~undo-tree~ +434 -0
  53. package/src/.reference.test.ts.~undo-tree~ +110 -0
  54. package/src/.reference.ts.~undo-tree~ +9 -0
  55. package/src/index.ts +2 -0
  56. package/src/index.ts~ +7 -0
  57. package/src/map-proxy.test.ts +65 -0
  58. package/src/map-proxy.test.ts~ +35 -0
  59. package/src/map-proxy.ts +96 -0
  60. package/src/map-proxy.ts~ +78 -0
  61. package/src/reference.test.ts +63 -0
  62. package/src/reference.test.ts~ +62 -0
  63. package/src/reference.ts +3 -2
  64. package/src/reference.ts~ +63 -0
  65. package/src/set-proxy.ts +87 -0
  66. package/src/utils/.maybeProxy.ts.~undo-tree~ +25 -0
  67. package/src/utils/maybeProxy.ts +10 -0
  68. package/src/utils/maybeProxy.ts~ +7 -0
  69. package/src/utils/nextTick.ts +3 -3
@@ -1,5 +1,5 @@
1
1
  (undo-tree-save-format-version . 1)
2
- "2ff4e9c0ac8abe851f987a32c6c408e3d302bf31"
2
+ "7b1ed97fa62deef5c5eed434118495fda5c02cef"
3
3
  [nil nil nil nil (27032 58754 770434 840000) 0 nil]
4
4
  ([nil nil ((159 . 164) (t 27022 26469 975131 717000)) nil (27032 58754 770434 388000) 0 nil])
5
5
  ([nil nil ((nil rear-nonsticky nil 284 . 285) (nil fontified nil 164 . 285) (164 . 285) 163) nil (27032 58754 770434 101000) 0 nil])
@@ -33,5 +33,7 @@
33
33
  ([nil nil ((#("
34
34
  " 0 2 (fontified t) 2 3 (fontified t)) . 487) (undo-tree-id695 . -2) (undo-tree-id696 . -2) (undo-tree-id697 . -2) (undo-tree-id698 . -2) (undo-tree-id699 . -2) (undo-tree-id700 . -2) (undo-tree-id701 . -2) (undo-tree-id702 . -2) (undo-tree-id703 . -2) (undo-tree-id704 . -2) (undo-tree-id705 . -2) (undo-tree-id706 . -2) (undo-tree-id707 . -2) (undo-tree-id708 . -2) (undo-tree-id709 . -2) (undo-tree-id710 . -2) (undo-tree-id711 . -2) (undo-tree-id712 . -2) (undo-tree-id713 . -2) (undo-tree-id714 . -2) (undo-tree-id715 . -2) (undo-tree-id716 . -2) (undo-tree-id717 . -2) (undo-tree-id718 . -2) (undo-tree-id719 . -2) (undo-tree-id720 . -2) (undo-tree-id721 . -2) (undo-tree-id722 . -2) (undo-tree-id723 . -2) (undo-tree-id724 . -2) (undo-tree-id725 . -1) (undo-tree-id726 . -1) (undo-tree-id727 . -1) (undo-tree-id728 . -1) (undo-tree-id729 . -1) (undo-tree-id730 . -1) (undo-tree-id731 . -1) (undo-tree-id732 . -1) (undo-tree-id733 . -1) (undo-tree-id734 . -1) (undo-tree-id735 . -1) (undo-tree-id736 . -1) (undo-tree-id737 . -1) (undo-tree-id738 . -1) (undo-tree-id739 . -1) (undo-tree-id740 . -1) (undo-tree-id741 . -1) (undo-tree-id742 . -1) (undo-tree-id743 . -1) (undo-tree-id744 . -1) (undo-tree-id745 . -1) (undo-tree-id746 . -1) (undo-tree-id747 . -1) (undo-tree-id748 . -1) (undo-tree-id749 . -1) (undo-tree-id750 . -1) (undo-tree-id751 . -1) (undo-tree-id752 . -1) (undo-tree-id753 . -1) (undo-tree-id754 . -1) (undo-tree-id755 . -1) (undo-tree-id756 . -1) (undo-tree-id757 . -1) (undo-tree-id758 . -1) (undo-tree-id759 . -1) (undo-tree-id760 . -1) (undo-tree-id761 . -3) 488) nil (27033 46883 911391 3000) 0 nil])
35
35
  ([nil nil ((51 . 52) (#("0" 0 1 (face font-lock-string-face fontified t)) . -51) (undo-tree-id762 . -1) (undo-tree-id763 . -1) (undo-tree-id764 . -1) (undo-tree-id765 . -1) (undo-tree-id766 . -1) (undo-tree-id767 . -1) (undo-tree-id768 . -1) (undo-tree-id769 . -1) (undo-tree-id770 . -1) (undo-tree-id771 . -1) (undo-tree-id772 . -1) (undo-tree-id773 . -1) (undo-tree-id774 . -1) (undo-tree-id775 . -1) (undo-tree-id776 . -1) (undo-tree-id777 . -1) (undo-tree-id778 . -1) (undo-tree-id779 . -1) (undo-tree-id780 . -1) (undo-tree-id781 . -1) (undo-tree-id782 . -1) (undo-tree-id783 . -1) (undo-tree-id784 . -1) (undo-tree-id785 . -1) (undo-tree-id786 . -1) (undo-tree-id787 . -1) (undo-tree-id788 . -1) (undo-tree-id789 . -1) (undo-tree-id790 . -1) (undo-tree-id791 . -1) (undo-tree-id792 . -1) (undo-tree-id793 . -1) (undo-tree-id794 . -1) (undo-tree-id795 . -1) 52 (t 27033 46887 578021 905000)) nil (27033 46890 313334 154000) 0 nil])
36
- ([nil current ((51 . 52) (#("1" 0 1 (face font-lock-string-face fontified t)) . -51) (undo-tree-id796 . -1) (undo-tree-id797 . -1) (undo-tree-id798 . -1) (undo-tree-id799 . -1) (undo-tree-id800 . -1) (undo-tree-id801 . -1) (undo-tree-id802 . -1) (undo-tree-id803 . -1) (undo-tree-id804 . -1) (undo-tree-id805 . -1) (undo-tree-id806 . -1) (undo-tree-id807 . -1) (undo-tree-id808 . -1) (undo-tree-id809 . -1) (undo-tree-id810 . -1) (undo-tree-id811 . -1) (undo-tree-id812 . -1) 52 (t 27033 46890 313995 150000)) nil (27033 53445 27620 628000) 0 nil])
36
+ ([nil nil ((51 . 52) (#("1" 0 1 (face font-lock-string-face fontified t)) . -51) (undo-tree-id796 . -1) (undo-tree-id797 . -1) (undo-tree-id798 . -1) (undo-tree-id799 . -1) (undo-tree-id800 . -1) (undo-tree-id801 . -1) (undo-tree-id802 . -1) (undo-tree-id803 . -1) (undo-tree-id804 . -1) (undo-tree-id805 . -1) (undo-tree-id806 . -1) (undo-tree-id807 . -1) (undo-tree-id808 . -1) (undo-tree-id809 . -1) (undo-tree-id810 . -1) (undo-tree-id811 . -1) (undo-tree-id812 . -1) 52 (t 27033 46890 313995 150000)) nil (27033 53445 27620 628000) 0 nil])
37
+ ([nil nil ((51 . 52) (#("2" 0 1 (face font-lock-string-face fontified t)) . -51) (undo-tree-id813 . -1) (undo-tree-id814 . -1) (undo-tree-id815 . -1) (undo-tree-id816 . -1) (undo-tree-id817 . -1) (undo-tree-id818 . -1) (undo-tree-id819 . -1) (undo-tree-id820 . -1) (undo-tree-id821 . -1) (undo-tree-id822 . -1) (undo-tree-id823 . -1) (undo-tree-id824 . -1) (undo-tree-id825 . -1) (undo-tree-id826 . -1) (undo-tree-id827 . -1) (undo-tree-id828 . -1) (undo-tree-id829 . -1) 52 (t 27033 53445 24830 509000)) nil (27034 13246 10766 387000) 0 nil])
38
+ ([nil current ((51 . 52) (#("3" 0 1 (face font-lock-string-face fontified t)) . -51) (undo-tree-id830 . -1) (undo-tree-id831 . -1) (undo-tree-id832 . -1) (undo-tree-id833 . -1) (undo-tree-id834 . -1) (undo-tree-id835 . -1) (undo-tree-id836 . -1) (undo-tree-id837 . -1) (undo-tree-id838 . -1) (undo-tree-id839 . -1) (undo-tree-id840 . -1) (undo-tree-id841 . -1) (undo-tree-id842 . -1) (undo-tree-id843 . -1) (undo-tree-id844 . -1) (undo-tree-id845 . -1) (undo-tree-id846 . -1) (undo-tree-id847 . -1) (undo-tree-id848 . -1) (undo-tree-id849 . -1) (undo-tree-id850 . -1) (undo-tree-id851 . -1) (undo-tree-id852 . -1) (undo-tree-id853 . -1) (undo-tree-id854 . -1) (undo-tree-id855 . -1) (undo-tree-id856 . -1) (undo-tree-id857 . -1) (undo-tree-id858 . -1) (undo-tree-id859 . -1) (undo-tree-id860 . -1) (undo-tree-id861 . -1) (undo-tree-id862 . -1) (undo-tree-id863 . -1) 52 (t 27034 13247 229384 598000)) nil (27034 15177 659861 877000) 0 nil])
37
39
  nil
@@ -4,5 +4,7 @@ export * from "./effect";
4
4
  export * from "./pubsub";
5
5
  export * from "./reference";
6
6
  export * from "./derived";
7
+ export * from "./map-proxy";
8
+ export * from "./set-proxy";
7
9
  export * from "./utils";
8
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC"}
package/dist/cjs/index.js CHANGED
@@ -20,5 +20,7 @@ __exportStar(require("./effect"), exports);
20
20
  __exportStar(require("./pubsub"), exports);
21
21
  __exportStar(require("./reference"), exports);
22
22
  __exportStar(require("./derived"), exports);
23
+ __exportStar(require("./map-proxy"), exports);
24
+ __exportStar(require("./set-proxy"), exports);
23
25
  __exportStar(require("./utils"), exports);
24
26
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,4CAA0B;AAC1B,2CAAyB;AACzB,2CAAyB;AACzB,8CAA4B;AAC5B,4CAA0B;AAC1B,0CAAwB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,4CAA0B;AAC1B,2CAAyB;AACzB,2CAAyB;AACzB,8CAA4B;AAC5B,4CAA0B;AAC1B,8CAA4B;AAC5B,8CAA4B;AAC5B,0CAAwB"}
@@ -0,0 +1,25 @@
1
+ import { SubscribeOptions, Subscription, VoidFunction } from "./common";
2
+ import { Effect } from "./effect";
3
+ import { Observable, OBSERVABLE } from "./observable";
4
+ export declare class MapProxy<K extends PropertyKey = PropertyKey, V extends any = any> extends Map<K, V> implements Observable<Record<K, V>> {
5
+ [OBSERVABLE]: true;
6
+ ps: import("./pubsub").PubSub<Record<K, V>>;
7
+ subscribers: Set<Subscription<Record<K, V>>>;
8
+ effects: Set<import("./common").VoidSyncOrAsyncFunction>;
9
+ publish: (value: Record<K, V>) => void;
10
+ publishAsync: (value: Record<K, V>) => Promise<void>;
11
+ subscribe: (fn: Subscription<Record<K, V>>, cleanup?: VoidFunction) => VoidFunction;
12
+ addEffect: (effect: VoidFunction, cleanup?: VoidFunction) => VoidFunction;
13
+ dispose: () => void;
14
+ constructor(...args: ConstructorParameters<typeof Map<K, V>>);
15
+ private getState;
16
+ addEffectDependency(fx: Effect): void;
17
+ observe(fn: Subscription<Record<K, V>>, options?: SubscribeOptions): VoidFunction;
18
+ set(key: K, value: V): this;
19
+ get(key: K): V | undefined;
20
+ delete(key: K): boolean;
21
+ entries(): MapIterator<[K, V]>;
22
+ keys(): MapIterator<K>;
23
+ values(): MapIterator<V>;
24
+ }
25
+ //# sourceMappingURL=map-proxy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map-proxy.d.ts","sourceRoot":"","sources":["../../src/map-proxy.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACb,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAGtD,qBAAa,QAAQ,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,EAAE,CAAC,SAAS,GAAG,GAAG,GAAG,CAC5E,SAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,CAChB,YAAW,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAEnC,CAAC,UAAU,CAAC,EAAE,IAAI,CAAQ;IAC1B,EAAE,0CAA0B;IAC5B,WAAW,kCAAuB;IAClC,OAAO,kDAAmB;IAC1B,OAAO,gCAAmB;IAC1B,YAAY,yCAAwB;IACpC,SAAS,2EAAqB;IAC9B,SAAS,iEAAqB;IAC9B,OAAO,aAAmB;gBAEd,GAAG,IAAI,EAAE,qBAAqB,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAI5D,OAAO,CAAC,QAAQ;IAOhB,mBAAmB,CAAC,EAAE,EAAE,MAAM;IAI9B,OAAO,CACL,EAAE,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAC9B,OAAO,GAAE,gBAAqB,GAC7B,YAAY;IAOf,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;IAapB,GAAG,CAAC,GAAG,EAAE,CAAC;IAMV,MAAM,CAAC,GAAG,EAAE,CAAC;IASb,OAAO;IAMP,IAAI;IAMJ,MAAM;CAKP"}
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MapProxy = void 0;
4
+ const common_1 = require("./common");
5
+ const context_1 = require("./context");
6
+ const observable_1 = require("./observable");
7
+ const pubsub_1 = require("./pubsub");
8
+ class MapProxy extends Map {
9
+ [observable_1.OBSERVABLE] = true;
10
+ ps = (0, pubsub_1.pubsub)();
11
+ subscribers = this.ps.subscribers;
12
+ effects = this.ps.effects;
13
+ publish = this.ps.publish;
14
+ publishAsync = this.ps.publishAsync;
15
+ subscribe = this.ps.subscribe;
16
+ addEffect = this.ps.addEffect;
17
+ dispose = this.ps.dispose;
18
+ constructor(...args) {
19
+ super(...args);
20
+ }
21
+ getState() {
22
+ const state = {
23
+ ...Object.fromEntries(Array.from(super.entries())),
24
+ };
25
+ return state;
26
+ }
27
+ addEffectDependency(fx) {
28
+ this.ps.addEffect(fx.run, fx.cleanup);
29
+ }
30
+ observe(fn, options = {}) {
31
+ if (options.immediate) {
32
+ fn(this.getState());
33
+ }
34
+ return this.ps.subscribe(fn, options.cleanup);
35
+ }
36
+ set(key, value) {
37
+ const prev = super.get(key);
38
+ const next = value;
39
+ const result = super.set(key, value);
40
+ if (!(0, common_1.compare)(next, prev)) {
41
+ const state = { ...this.getState(), [key]: value };
42
+ this.ps.publish(state);
43
+ }
44
+ return result;
45
+ }
46
+ get(key) {
47
+ const fx = context_1.Context.scope.current.effect;
48
+ if (fx)
49
+ this.addEffectDependency(fx);
50
+ return super.get(key);
51
+ }
52
+ delete(key) {
53
+ const didHave = super.has(key);
54
+ const result = super.delete(key);
55
+ if (didHave) {
56
+ this.ps.publish(this.getState());
57
+ }
58
+ return result;
59
+ }
60
+ entries() {
61
+ const fx = context_1.Context.scope.current.effect;
62
+ if (fx)
63
+ this.addEffectDependency(fx);
64
+ return super.entries();
65
+ }
66
+ keys() {
67
+ const fx = context_1.Context.scope.current.effect;
68
+ if (fx)
69
+ this.addEffectDependency(fx);
70
+ return super.keys();
71
+ }
72
+ values() {
73
+ const fx = context_1.Context.scope.current.effect;
74
+ if (fx)
75
+ this.addEffectDependency(fx);
76
+ return super.values();
77
+ }
78
+ }
79
+ exports.MapProxy = MapProxy;
80
+ //# sourceMappingURL=map-proxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map-proxy.js","sourceRoot":"","sources":["../../src/map-proxy.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"reference.d.ts","sourceRoot":"","sources":["../../src/reference.ts"],"names":[],"mappings":"AAGA,OAAO,EAAS,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGxE,OAAO,EAAc,UAAU,EAAE,MAAM,cAAc,CAAC;AAGtD,eAAO,MAAM,SAAS,eAAsB,CAAC;AAC7C,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC;AAEzC,MAAM,WAAW,SAAS,CAAC,CAAC,CAAE,SAAQ,UAAU,CAAC,CAAC,CAAC;IACjD,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC,CAAC;IACb,GAAG,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC,CAAC;CACf;AAED,wBAAgB,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAoC7C;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC;AAC7D,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC;AACjE,wBAAgB,WAAW,CAAC,CAAC,SAAS,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC"}
1
+ {"version":3,"file":"reference.d.ts","sourceRoot":"","sources":["../../src/reference.ts"],"names":[],"mappings":"AAGA,OAAO,EAAS,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGxE,OAAO,EAAc,UAAU,EAAE,MAAM,cAAc,CAAC;AAItD,eAAO,MAAM,SAAS,eAAsB,CAAC;AAC7C,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC;AAEzC,MAAM,WAAW,SAAS,CAAC,CAAC,CAAE,SAAQ,UAAU,CAAC,CAAC,CAAC;IACjD,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC,CAAC;IACb,GAAG,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC,CAAC;CACf;AAED,wBAAgB,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAoC7C;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC;AAC7D,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC;AACjE,wBAAgB,WAAW,CAAC,CAAC,SAAS,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC"}
@@ -9,10 +9,11 @@ const is_1 = require("./common/is");
9
9
  const context_1 = require("./context");
10
10
  const observable_1 = require("./observable");
11
11
  const pubsub_1 = require("./pubsub");
12
+ const maybeProxy_1 = require("./utils/maybeProxy");
12
13
  exports.REFERENCE = Symbol("Reference");
13
14
  function ref(value) {
14
15
  const ps = (0, pubsub_1.pubsub)();
15
- const state = { value };
16
+ const state = { value: (0, maybeProxy_1.maybeProxy)(value) };
16
17
  const obs = (0, observable_1.observable)(state, ps);
17
18
  const addEffectDependency = (fx) => {
18
19
  ps.addEffect(fx.run, fx.cleanup);
@@ -25,7 +26,7 @@ function ref(value) {
25
26
  };
26
27
  const set = (fn) => {
27
28
  const prev = state.value;
28
- const next = (0, is_1.isFunction)(fn) ? fn(state.value) : fn;
29
+ const next = (0, maybeProxy_1.maybeProxy)((0, is_1.isFunction)(fn) ? fn(state.value) : fn);
29
30
  if (!(0, compare_1.compare)(next, prev)) {
30
31
  state.value = next;
31
32
  ps.publish(state.value);
@@ -1 +1 @@
1
- {"version":3,"file":"reference.js","sourceRoot":"","sources":["../../src/reference.ts"],"names":[],"mappings":";;;AAmBA,kBAoCC;AAKD,kCAEC;AA9DD,qCAA+B;AAC/B,8CAA2C;AAC3C,oCAAyC;AAEzC,uCAAoC;AAEpC,6CAAsD;AACtD,qCAAkC;AAErB,QAAA,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;AAU7C,SAAgB,GAAG,CAAI,KAAQ;IAC7B,MAAM,EAAE,GAAG,IAAA,eAAM,GAAK,CAAC;IACvB,MAAM,KAAK,GAAa,EAAE,KAAK,EAAE,CAAC;IAClC,MAAM,GAAG,GAAG,IAAA,uBAAU,EAAI,KAAK,EAAE,EAAE,CAAC,CAAC;IAErC,MAAM,mBAAmB,GAAG,CAAC,EAAU,EAAE,EAAE;QACzC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC,CAAC;IAEF,MAAM,GAAG,GAAG,GAAM,EAAE;QAClB,MAAM,EAAE,GAAG,iBAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QACxC,IAAI,EAAE;YAAE,mBAAmB,CAAC,EAAE,CAAC,CAAC;QAChC,OAAO,KAAK,CAAC,KAAK,CAAC;IACrB,CAAC,CAAC;IAEF,MAAM,GAAG,GAAgC,CAAC,EAAE,EAAE,EAAE;QAC9C,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC;QACzB,MAAM,IAAI,GAAG,IAAA,eAAU,EAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACnD,IAAI,CAAC,IAAA,iBAAO,EAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;YACzB,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;YACnB,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,IAAI,GAAG,GAAM,EAAE;QACnB,OAAO,KAAK,CAAC,KAAK,CAAC;IACrB,CAAC,CAAC;IAEF,OAAO;QACL,CAAC,iBAAS,CAAC,EAAE,IAAI;QACjB,GAAG,EAAE;QACL,GAAG,GAAG;QACN,GAAG;QACH,GAAG;QACH,IAAI;KACL,CAAC;AACJ,CAAC;AAKD,SAAgB,WAAW,CAAC,CAAU;IACpC,OAAO,IAAA,YAAG,EAAC,CAAC,EAAE,iBAAS,CAAC,CAAC;AAC3B,CAAC"}
1
+ {"version":3,"file":"reference.js","sourceRoot":"","sources":["../../src/reference.ts"],"names":[],"mappings":";;;AAoBA,kBAoCC;AAKD,kCAEC;AA/DD,qCAA+B;AAC/B,8CAA2C;AAC3C,oCAAyC;AAEzC,uCAAoC;AAEpC,6CAAsD;AACtD,qCAAkC;AAClC,mDAAgD;AAEnC,QAAA,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;AAU7C,SAAgB,GAAG,CAAI,KAAQ;IAC7B,MAAM,EAAE,GAAG,IAAA,eAAM,GAAK,CAAC;IACvB,MAAM,KAAK,GAAa,EAAE,KAAK,EAAE,IAAA,uBAAU,EAAC,KAAK,CAAC,EAAE,CAAC;IACrD,MAAM,GAAG,GAAG,IAAA,uBAAU,EAAI,KAAK,EAAE,EAAE,CAAC,CAAC;IAErC,MAAM,mBAAmB,GAAG,CAAC,EAAU,EAAE,EAAE;QACzC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC,CAAC;IAEF,MAAM,GAAG,GAAG,GAAM,EAAE;QAClB,MAAM,EAAE,GAAG,iBAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QACxC,IAAI,EAAE;YAAE,mBAAmB,CAAC,EAAE,CAAC,CAAC;QAChC,OAAO,KAAK,CAAC,KAAK,CAAC;IACrB,CAAC,CAAC;IAEF,MAAM,GAAG,GAAgC,CAAC,EAAE,EAAE,EAAE;QAC9C,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC;QACzB,MAAM,IAAI,GAAG,IAAA,uBAAU,EAAC,IAAA,eAAU,EAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC/D,IAAI,CAAC,IAAA,iBAAO,EAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;YACzB,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;YACnB,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,IAAI,GAAG,GAAM,EAAE;QACnB,OAAO,KAAK,CAAC,KAAK,CAAC;IACrB,CAAC,CAAC;IAEF,OAAO;QACL,CAAC,iBAAS,CAAC,EAAE,IAAI;QACjB,GAAG,EAAE;QACL,GAAG,GAAG;QACN,GAAG;QACH,GAAG;QACH,IAAI;KACL,CAAC;AACJ,CAAC;AAKD,SAAgB,WAAW,CAAC,CAAU;IACpC,OAAO,IAAA,YAAG,EAAC,CAAC,EAAE,iBAAS,CAAC,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { SubscribeOptions, Subscription, VoidFunction } from "./common";
2
+ import { Effect } from "./effect";
3
+ import { Observable, OBSERVABLE } from "./observable";
4
+ export declare class SetProxy<V = any> extends Set<V> implements Observable<Set<V>> {
5
+ [OBSERVABLE]: true;
6
+ ps: import("./pubsub").PubSub<Set<V>>;
7
+ subscribers: Set<Subscription<Set<V>>>;
8
+ effects: Set<import("./common").VoidSyncOrAsyncFunction>;
9
+ publish: (value: Set<V>) => void;
10
+ publishAsync: (value: Set<V>) => Promise<void>;
11
+ subscribe: (fn: Subscription<Set<V>>, cleanup?: VoidFunction) => VoidFunction;
12
+ addEffect: (effect: VoidFunction, cleanup?: VoidFunction) => VoidFunction;
13
+ dispose: () => void;
14
+ constructor(...args: ConstructorParameters<typeof Set<V>>);
15
+ private getState;
16
+ addEffectDependency(fx: Effect): void;
17
+ observe(fn: Subscription<Set<V>>, options?: SubscribeOptions): VoidFunction;
18
+ get size(): number;
19
+ add(value: V): this;
20
+ delete(value: V): boolean;
21
+ has(value: V): boolean;
22
+ values(): SetIterator<V>;
23
+ keys(): SetIterator<V>;
24
+ entries(): SetIterator<[V, V]>;
25
+ }
26
+ //# sourceMappingURL=set-proxy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"set-proxy.d.ts","sourceRoot":"","sources":["../../src/set-proxy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExE,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAGtD,qBAAa,QAAQ,CAAC,CAAC,GAAG,GAAG,CAAE,SAAQ,GAAG,CAAC,CAAC,CAAE,YAAW,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACzE,CAAC,UAAU,CAAC,EAAE,IAAI,CAAQ;IAC1B,EAAE,oCAAoB;IACtB,WAAW,4BAAuB;IAClC,OAAO,kDAAmB;IAC1B,OAAO,0BAAmB;IAC1B,YAAY,mCAAwB;IACpC,SAAS,qEAAqB;IAC9B,SAAS,iEAAqB;IAC9B,OAAO,aAAmB;gBAEd,GAAG,IAAI,EAAE,qBAAqB,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;IAIzD,OAAO,CAAC,QAAQ;IAIhB,mBAAmB,CAAC,EAAE,EAAE,MAAM;IAI9B,OAAO,CACL,EAAE,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EACxB,OAAO,GAAE,gBAAqB,GAC7B,YAAY;IAOf,IAAI,IAAI,WAIP;IAED,GAAG,CAAC,KAAK,EAAE,CAAC;IASZ,MAAM,CAAC,KAAK,EAAE,CAAC;IASf,GAAG,CAAC,KAAK,EAAE,CAAC;IAMZ,MAAM;IAMN,IAAI;IAMJ,OAAO;CAKR"}
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SetProxy = void 0;
4
+ const context_1 = require("./context");
5
+ const observable_1 = require("./observable");
6
+ const pubsub_1 = require("./pubsub");
7
+ class SetProxy extends Set {
8
+ [observable_1.OBSERVABLE] = true;
9
+ ps = (0, pubsub_1.pubsub)();
10
+ subscribers = this.ps.subscribers;
11
+ effects = this.ps.effects;
12
+ publish = this.ps.publish;
13
+ publishAsync = this.ps.publishAsync;
14
+ subscribe = this.ps.subscribe;
15
+ addEffect = this.ps.addEffect;
16
+ dispose = this.ps.dispose;
17
+ constructor(...args) {
18
+ super(...args);
19
+ }
20
+ getState() {
21
+ return new Set(super.values());
22
+ }
23
+ addEffectDependency(fx) {
24
+ this.ps.addEffect(fx.run, fx.cleanup);
25
+ }
26
+ observe(fn, options = {}) {
27
+ if (options.immediate) {
28
+ fn(this.getState());
29
+ }
30
+ return this.ps.subscribe(fn, options.cleanup);
31
+ }
32
+ get size() {
33
+ const fx = context_1.Context.scope.current.effect;
34
+ if (fx)
35
+ this.addEffectDependency(fx);
36
+ return super.size;
37
+ }
38
+ add(value) {
39
+ const hadValue = super.has(value);
40
+ const result = super.add(value);
41
+ if (!hadValue) {
42
+ this.ps.publish(this.getState());
43
+ }
44
+ return result;
45
+ }
46
+ delete(value) {
47
+ const didHave = super.has(value);
48
+ const result = super.delete(value);
49
+ if (didHave) {
50
+ this.ps.publish(this.getState());
51
+ }
52
+ return result;
53
+ }
54
+ has(value) {
55
+ const fx = context_1.Context.scope.current.effect;
56
+ if (fx)
57
+ this.addEffectDependency(fx);
58
+ return super.has(value);
59
+ }
60
+ values() {
61
+ const fx = context_1.Context.scope.current.effect;
62
+ if (fx)
63
+ this.addEffectDependency(fx);
64
+ return super.values();
65
+ }
66
+ keys() {
67
+ const fx = context_1.Context.scope.current.effect;
68
+ if (fx)
69
+ this.addEffectDependency(fx);
70
+ return super.keys();
71
+ }
72
+ entries() {
73
+ const fx = context_1.Context.scope.current.effect;
74
+ if (fx)
75
+ this.addEffectDependency(fx);
76
+ return super.entries();
77
+ }
78
+ }
79
+ exports.SetProxy = SetProxy;
80
+ //# sourceMappingURL=set-proxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"set-proxy.js","sourceRoot":"","sources":["../../src/set-proxy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const maybeProxy: <T>(x: T) => T;
2
+ //# sourceMappingURL=maybeProxy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"maybeProxy.d.ts","sourceRoot":"","sources":["../../../src/utils/maybeProxy.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,UAAU,GAAI,CAAC,EAAE,GAAG,CAAC,KAAG,CAMpC,CAAC"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.maybeProxy = void 0;
4
+ const map_proxy_1 = require("../map-proxy");
5
+ const set_proxy_1 = require("../set-proxy");
6
+ const maybeProxy = (x) => {
7
+ if (x instanceof map_proxy_1.MapProxy)
8
+ return x;
9
+ if (x instanceof Map)
10
+ return new map_proxy_1.MapProxy(Array.from(x.entries()));
11
+ if (x instanceof set_proxy_1.SetProxy)
12
+ return x;
13
+ if (x instanceof Set)
14
+ return new set_proxy_1.SetProxy(Array.from(x.values()));
15
+ return x;
16
+ };
17
+ exports.maybeProxy = maybeProxy;
18
+ //# sourceMappingURL=maybeProxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"maybeProxy.js","sourceRoot":"","sources":["../../../src/utils/maybeProxy.ts"],"names":[],"mappings":";;;AAAA,4CAAwC;AACxC,4CAAwC;AAEjC,MAAM,UAAU,GAAG,CAAI,CAAI,EAAK,EAAE;IACvC,IAAI,CAAC,YAAY,oBAAQ;QAAE,OAAO,CAAC,CAAC;IACpC,IAAI,CAAC,YAAY,GAAG;QAAE,OAAO,IAAI,oBAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAM,CAAC;IACxE,IAAI,CAAC,YAAY,oBAAQ;QAAE,OAAO,CAAC,CAAC;IACpC,IAAI,CAAC,YAAY,GAAG;QAAE,OAAO,IAAI,oBAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAM,CAAC;IACvE,OAAO,CAAC,CAAC;AACX,CAAC,CAAC;AANW,QAAA,UAAU,cAMrB"}
@@ -1,2 +1,2 @@
1
- export declare const onNextTick: (fn: () => (void | Promise<void>)) => void;
1
+ export declare const onNextTick: (fn: () => void | Promise<void>) => void;
2
2
  //# sourceMappingURL=nextTick.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"nextTick.d.ts","sourceRoot":"","sources":["../../../src/utils/nextTick.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,GAAI,IAAI,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,SAM1D,CAAA"}
1
+ {"version":3,"file":"nextTick.d.ts","sourceRoot":"","sources":["../../../src/utils/nextTick.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,GAAI,IAAI,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,SAMxD,CAAC"}
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.onNextTick = void 0;
4
4
  const onNextTick = (fn) => {
5
- if (typeof queueMicrotask !== 'undefined') {
5
+ if (typeof queueMicrotask !== "undefined") {
6
6
  queueMicrotask(fn);
7
7
  }
8
8
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"nextTick.js","sourceRoot":"","sources":["../../../src/utils/nextTick.ts"],"names":[],"mappings":";;;AAAO,MAAM,UAAU,GAAG,CAAC,EAAgC,EAAE,EAAE;IAC7D,IAAI,OAAO,cAAc,KAAK,WAAW,EAAE,CAAC;QAC1C,cAAc,CAAC,EAAE,CAAC,CAAC;IACrB,CAAC;SAAM,CAAC;QACN,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACpB,CAAC;AACH,CAAC,CAAA;AANY,QAAA,UAAU,cAMtB"}
1
+ {"version":3,"file":"nextTick.js","sourceRoot":"","sources":["../../../src/utils/nextTick.ts"],"names":[],"mappings":";;;AAAO,MAAM,UAAU,GAAG,CAAC,EAA8B,EAAE,EAAE;IAC3D,IAAI,OAAO,cAAc,KAAK,WAAW,EAAE,CAAC;QAC1C,cAAc,CAAC,EAAE,CAAC,CAAC;IACrB,CAAC;SAAM,CAAC;QACN,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACpB,CAAC;AACH,CAAC,CAAC;AANW,QAAA,UAAU,cAMrB"}
@@ -4,5 +4,7 @@ export * from "./effect";
4
4
  export * from "./pubsub";
5
5
  export * from "./reference";
6
6
  export * from "./derived";
7
+ export * from "./map-proxy";
8
+ export * from "./set-proxy";
7
9
  export * from "./utils";
8
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC"}
package/dist/esm/index.js CHANGED
@@ -4,5 +4,7 @@ export * from "./effect";
4
4
  export * from "./pubsub";
5
5
  export * from "./reference";
6
6
  export * from "./derived";
7
+ export * from "./map-proxy";
8
+ export * from "./set-proxy";
7
9
  export * from "./utils";
8
10
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { SubscribeOptions, Subscription, VoidFunction } from "./common";
2
+ import { Effect } from "./effect";
3
+ import { Observable, OBSERVABLE } from "./observable";
4
+ export declare class MapProxy<K extends PropertyKey = PropertyKey, V extends any = any> extends Map<K, V> implements Observable<Record<K, V>> {
5
+ [OBSERVABLE]: true;
6
+ ps: import("./pubsub").PubSub<Record<K, V>>;
7
+ subscribers: Set<Subscription<Record<K, V>>>;
8
+ effects: Set<import("./common").VoidSyncOrAsyncFunction>;
9
+ publish: (value: Record<K, V>) => void;
10
+ publishAsync: (value: Record<K, V>) => Promise<void>;
11
+ subscribe: (fn: Subscription<Record<K, V>>, cleanup?: VoidFunction) => VoidFunction;
12
+ addEffect: (effect: VoidFunction, cleanup?: VoidFunction) => VoidFunction;
13
+ dispose: () => void;
14
+ constructor(...args: ConstructorParameters<typeof Map<K, V>>);
15
+ private getState;
16
+ addEffectDependency(fx: Effect): void;
17
+ observe(fn: Subscription<Record<K, V>>, options?: SubscribeOptions): VoidFunction;
18
+ set(key: K, value: V): this;
19
+ get(key: K): V | undefined;
20
+ delete(key: K): boolean;
21
+ entries(): MapIterator<[K, V]>;
22
+ keys(): MapIterator<K>;
23
+ values(): MapIterator<V>;
24
+ }
25
+ //# sourceMappingURL=map-proxy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map-proxy.d.ts","sourceRoot":"","sources":["../../src/map-proxy.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACb,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAGtD,qBAAa,QAAQ,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,EAAE,CAAC,SAAS,GAAG,GAAG,GAAG,CAC5E,SAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,CAChB,YAAW,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAEnC,CAAC,UAAU,CAAC,EAAE,IAAI,CAAQ;IAC1B,EAAE,0CAA0B;IAC5B,WAAW,kCAAuB;IAClC,OAAO,kDAAmB;IAC1B,OAAO,gCAAmB;IAC1B,YAAY,yCAAwB;IACpC,SAAS,2EAAqB;IAC9B,SAAS,iEAAqB;IAC9B,OAAO,aAAmB;gBAEd,GAAG,IAAI,EAAE,qBAAqB,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAI5D,OAAO,CAAC,QAAQ;IAOhB,mBAAmB,CAAC,EAAE,EAAE,MAAM;IAI9B,OAAO,CACL,EAAE,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAC9B,OAAO,GAAE,gBAAqB,GAC7B,YAAY;IAOf,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;IAapB,GAAG,CAAC,GAAG,EAAE,CAAC;IAMV,MAAM,CAAC,GAAG,EAAE,CAAC;IASb,OAAO;IAMP,IAAI;IAMJ,MAAM;CAKP"}
@@ -0,0 +1,76 @@
1
+ import { compare, } from "./common";
2
+ import { Context } from "./context";
3
+ import { OBSERVABLE } from "./observable";
4
+ import { pubsub } from "./pubsub";
5
+ export class MapProxy extends Map {
6
+ [OBSERVABLE] = true;
7
+ ps = pubsub();
8
+ subscribers = this.ps.subscribers;
9
+ effects = this.ps.effects;
10
+ publish = this.ps.publish;
11
+ publishAsync = this.ps.publishAsync;
12
+ subscribe = this.ps.subscribe;
13
+ addEffect = this.ps.addEffect;
14
+ dispose = this.ps.dispose;
15
+ constructor(...args) {
16
+ super(...args);
17
+ }
18
+ getState() {
19
+ const state = {
20
+ ...Object.fromEntries(Array.from(super.entries())),
21
+ };
22
+ return state;
23
+ }
24
+ addEffectDependency(fx) {
25
+ this.ps.addEffect(fx.run, fx.cleanup);
26
+ }
27
+ observe(fn, options = {}) {
28
+ if (options.immediate) {
29
+ fn(this.getState());
30
+ }
31
+ return this.ps.subscribe(fn, options.cleanup);
32
+ }
33
+ set(key, value) {
34
+ const prev = super.get(key);
35
+ const next = value;
36
+ const result = super.set(key, value);
37
+ if (!compare(next, prev)) {
38
+ const state = { ...this.getState(), [key]: value };
39
+ this.ps.publish(state);
40
+ }
41
+ return result;
42
+ }
43
+ get(key) {
44
+ const fx = Context.scope.current.effect;
45
+ if (fx)
46
+ this.addEffectDependency(fx);
47
+ return super.get(key);
48
+ }
49
+ delete(key) {
50
+ const didHave = super.has(key);
51
+ const result = super.delete(key);
52
+ if (didHave) {
53
+ this.ps.publish(this.getState());
54
+ }
55
+ return result;
56
+ }
57
+ entries() {
58
+ const fx = Context.scope.current.effect;
59
+ if (fx)
60
+ this.addEffectDependency(fx);
61
+ return super.entries();
62
+ }
63
+ keys() {
64
+ const fx = Context.scope.current.effect;
65
+ if (fx)
66
+ this.addEffectDependency(fx);
67
+ return super.keys();
68
+ }
69
+ values() {
70
+ const fx = Context.scope.current.effect;
71
+ if (fx)
72
+ this.addEffectDependency(fx);
73
+ return super.values();
74
+ }
75
+ }
76
+ //# sourceMappingURL=map-proxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map-proxy.js","sourceRoot":"","sources":["../../src/map-proxy.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"reference.d.ts","sourceRoot":"","sources":["../../src/reference.ts"],"names":[],"mappings":"AAGA,OAAO,EAAS,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGxE,OAAO,EAAc,UAAU,EAAE,MAAM,cAAc,CAAC;AAGtD,eAAO,MAAM,SAAS,eAAsB,CAAC;AAC7C,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC;AAEzC,MAAM,WAAW,SAAS,CAAC,CAAC,CAAE,SAAQ,UAAU,CAAC,CAAC,CAAC;IACjD,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC,CAAC;IACb,GAAG,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC,CAAC;CACf;AAED,wBAAgB,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAoC7C;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC;AAC7D,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC;AACjE,wBAAgB,WAAW,CAAC,CAAC,SAAS,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC"}
1
+ {"version":3,"file":"reference.d.ts","sourceRoot":"","sources":["../../src/reference.ts"],"names":[],"mappings":"AAGA,OAAO,EAAS,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGxE,OAAO,EAAc,UAAU,EAAE,MAAM,cAAc,CAAC;AAItD,eAAO,MAAM,SAAS,eAAsB,CAAC;AAC7C,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC;AAEzC,MAAM,WAAW,SAAS,CAAC,CAAC,CAAE,SAAQ,UAAU,CAAC,CAAC,CAAC;IACjD,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC,CAAC;IACb,GAAG,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC,CAAC;CACf;AAED,wBAAgB,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAoC7C;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC;AAC7D,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC;AACjE,wBAAgB,WAAW,CAAC,CAAC,SAAS,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC"}
@@ -4,10 +4,11 @@ import { isFunction } from "./common/is";
4
4
  import { Context } from "./context";
5
5
  import { observable } from "./observable";
6
6
  import { pubsub } from "./pubsub";
7
+ import { maybeProxy } from "./utils/maybeProxy";
7
8
  export const REFERENCE = Symbol("Reference");
8
9
  export function ref(value) {
9
10
  const ps = pubsub();
10
- const state = { value };
11
+ const state = { value: maybeProxy(value) };
11
12
  const obs = observable(state, ps);
12
13
  const addEffectDependency = (fx) => {
13
14
  ps.addEffect(fx.run, fx.cleanup);
@@ -20,7 +21,7 @@ export function ref(value) {
20
21
  };
21
22
  const set = (fn) => {
22
23
  const prev = state.value;
23
- const next = isFunction(fn) ? fn(state.value) : fn;
24
+ const next = maybeProxy(isFunction(fn) ? fn(state.value) : fn);
24
25
  if (!compare(next, prev)) {
25
26
  state.value = next;
26
27
  ps.publish(state.value);
@@ -1 +1 @@
1
- {"version":3,"file":"reference.js","sourceRoot":"","sources":["../../src/reference.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,UAAU,EAAc,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;AAU7C,MAAM,UAAU,GAAG,CAAI,KAAQ;IAC7B,MAAM,EAAE,GAAG,MAAM,EAAK,CAAC;IACvB,MAAM,KAAK,GAAa,EAAE,KAAK,EAAE,CAAC;IAClC,MAAM,GAAG,GAAG,UAAU,CAAI,KAAK,EAAE,EAAE,CAAC,CAAC;IAErC,MAAM,mBAAmB,GAAG,CAAC,EAAU,EAAE,EAAE;QACzC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC,CAAC;IAEF,MAAM,GAAG,GAAG,GAAM,EAAE;QAClB,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QACxC,IAAI,EAAE;YAAE,mBAAmB,CAAC,EAAE,CAAC,CAAC;QAChC,OAAO,KAAK,CAAC,KAAK,CAAC;IACrB,CAAC,CAAC;IAEF,MAAM,GAAG,GAAgC,CAAC,EAAE,EAAE,EAAE;QAC9C,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC;QACzB,MAAM,IAAI,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACnD,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;YACzB,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;YACnB,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,IAAI,GAAG,GAAM,EAAE;QACnB,OAAO,KAAK,CAAC,KAAK,CAAC;IACrB,CAAC,CAAC;IAEF,OAAO;QACL,CAAC,SAAS,CAAC,EAAE,IAAI;QACjB,GAAG,EAAE;QACL,GAAG,GAAG;QACN,GAAG;QACH,GAAG;QACH,IAAI;KACL,CAAC;AACJ,CAAC;AAKD,MAAM,UAAU,WAAW,CAAC,CAAU;IACpC,OAAO,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;AAC3B,CAAC"}
1
+ {"version":3,"file":"reference.js","sourceRoot":"","sources":["../../src/reference.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,UAAU,EAAc,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;AAU7C,MAAM,UAAU,GAAG,CAAI,KAAQ;IAC7B,MAAM,EAAE,GAAG,MAAM,EAAK,CAAC;IACvB,MAAM,KAAK,GAAa,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;IACrD,MAAM,GAAG,GAAG,UAAU,CAAI,KAAK,EAAE,EAAE,CAAC,CAAC;IAErC,MAAM,mBAAmB,GAAG,CAAC,EAAU,EAAE,EAAE;QACzC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC,CAAC;IAEF,MAAM,GAAG,GAAG,GAAM,EAAE;QAClB,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QACxC,IAAI,EAAE;YAAE,mBAAmB,CAAC,EAAE,CAAC,CAAC;QAChC,OAAO,KAAK,CAAC,KAAK,CAAC;IACrB,CAAC,CAAC;IAEF,MAAM,GAAG,GAAgC,CAAC,EAAE,EAAE,EAAE;QAC9C,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC;QACzB,MAAM,IAAI,GAAG,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC/D,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;YACzB,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;YACnB,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,IAAI,GAAG,GAAM,EAAE;QACnB,OAAO,KAAK,CAAC,KAAK,CAAC;IACrB,CAAC,CAAC;IAEF,OAAO;QACL,CAAC,SAAS,CAAC,EAAE,IAAI;QACjB,GAAG,EAAE;QACL,GAAG,GAAG;QACN,GAAG;QACH,GAAG;QACH,IAAI;KACL,CAAC;AACJ,CAAC;AAKD,MAAM,UAAU,WAAW,CAAC,CAAU;IACpC,OAAO,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { SubscribeOptions, Subscription, VoidFunction } from "./common";
2
+ import { Effect } from "./effect";
3
+ import { Observable, OBSERVABLE } from "./observable";
4
+ export declare class SetProxy<V = any> extends Set<V> implements Observable<Set<V>> {
5
+ [OBSERVABLE]: true;
6
+ ps: import("./pubsub").PubSub<Set<V>>;
7
+ subscribers: Set<Subscription<Set<V>>>;
8
+ effects: Set<import("./common").VoidSyncOrAsyncFunction>;
9
+ publish: (value: Set<V>) => void;
10
+ publishAsync: (value: Set<V>) => Promise<void>;
11
+ subscribe: (fn: Subscription<Set<V>>, cleanup?: VoidFunction) => VoidFunction;
12
+ addEffect: (effect: VoidFunction, cleanup?: VoidFunction) => VoidFunction;
13
+ dispose: () => void;
14
+ constructor(...args: ConstructorParameters<typeof Set<V>>);
15
+ private getState;
16
+ addEffectDependency(fx: Effect): void;
17
+ observe(fn: Subscription<Set<V>>, options?: SubscribeOptions): VoidFunction;
18
+ get size(): number;
19
+ add(value: V): this;
20
+ delete(value: V): boolean;
21
+ has(value: V): boolean;
22
+ values(): SetIterator<V>;
23
+ keys(): SetIterator<V>;
24
+ entries(): SetIterator<[V, V]>;
25
+ }
26
+ //# sourceMappingURL=set-proxy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"set-proxy.d.ts","sourceRoot":"","sources":["../../src/set-proxy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExE,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAGtD,qBAAa,QAAQ,CAAC,CAAC,GAAG,GAAG,CAAE,SAAQ,GAAG,CAAC,CAAC,CAAE,YAAW,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACzE,CAAC,UAAU,CAAC,EAAE,IAAI,CAAQ;IAC1B,EAAE,oCAAoB;IACtB,WAAW,4BAAuB;IAClC,OAAO,kDAAmB;IAC1B,OAAO,0BAAmB;IAC1B,YAAY,mCAAwB;IACpC,SAAS,qEAAqB;IAC9B,SAAS,iEAAqB;IAC9B,OAAO,aAAmB;gBAEd,GAAG,IAAI,EAAE,qBAAqB,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;IAIzD,OAAO,CAAC,QAAQ;IAIhB,mBAAmB,CAAC,EAAE,EAAE,MAAM;IAI9B,OAAO,CACL,EAAE,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EACxB,OAAO,GAAE,gBAAqB,GAC7B,YAAY;IAOf,IAAI,IAAI,WAIP;IAED,GAAG,CAAC,KAAK,EAAE,CAAC;IASZ,MAAM,CAAC,KAAK,EAAE,CAAC;IASf,GAAG,CAAC,KAAK,EAAE,CAAC;IAMZ,MAAM;IAMN,IAAI;IAMJ,OAAO;CAKR"}