react-obsidian 0.0.46 → 1.0.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 (63) hide show
  1. package/.vscode/settings.json +5 -0
  2. package/babel.config.js +1 -1
  3. package/dist/src/index.d.ts +3 -1
  4. package/dist/src/index.d.ts.map +1 -1
  5. package/dist/src/index.js +6 -2
  6. package/dist/src/index.js.map +1 -1
  7. package/dist/src/model/Model.d.ts +4 -0
  8. package/dist/src/model/Model.d.ts.map +1 -0
  9. package/dist/src/model/Model.js +19 -0
  10. package/dist/src/model/Model.js.map +1 -0
  11. package/dist/src/observable/Observable.d.ts +1 -1
  12. package/dist/src/observable/Observable.d.ts.map +1 -1
  13. package/dist/src/observable/Observable.js +2 -1
  14. package/dist/src/observable/Observable.js.map +1 -1
  15. package/dist/src/observable/cold/ColdMediatorObservable.d.ts +18 -0
  16. package/dist/src/observable/cold/ColdMediatorObservable.d.ts.map +1 -0
  17. package/dist/src/observable/cold/ColdMediatorObservable.js +46 -0
  18. package/dist/src/observable/cold/ColdMediatorObservable.js.map +1 -0
  19. package/dist/src/observable/cold/useColdObservers.d.ts +3 -0
  20. package/dist/src/observable/cold/useColdObservers.d.ts.map +1 -0
  21. package/dist/src/observable/cold/useColdObservers.js +21 -0
  22. package/dist/src/observable/cold/useColdObservers.js.map +1 -0
  23. package/dist/src/observable/mapObservablesToValues.d.ts +3 -0
  24. package/dist/src/observable/mapObservablesToValues.d.ts.map +1 -0
  25. package/dist/src/observable/mapObservablesToValues.js +8 -0
  26. package/dist/src/observable/mapObservablesToValues.js.map +1 -0
  27. package/dist/src/observable/mediator/MediatorObservable.d.ts +6 -0
  28. package/dist/src/observable/mediator/MediatorObservable.d.ts.map +1 -0
  29. package/dist/src/observable/{MediatorObservable.js → mediator/MediatorObservable.js} +1 -1
  30. package/dist/src/observable/mediator/MediatorObservable.js.map +1 -0
  31. package/dist/src/observable/types.d.ts +3 -0
  32. package/dist/src/observable/types.d.ts.map +1 -1
  33. package/dist/src/observable/useObserver.d.ts +4 -2
  34. package/dist/src/observable/useObserver.d.ts.map +1 -1
  35. package/dist/src/observable/useObserver.js +6 -1
  36. package/dist/src/observable/useObserver.js.map +1 -1
  37. package/dist/src/observable/useObservers.d.ts +3 -0
  38. package/dist/src/observable/useObservers.d.ts.map +1 -0
  39. package/dist/src/observable/useObservers.js +21 -0
  40. package/dist/src/observable/useObservers.js.map +1 -0
  41. package/documentation/docs/documentation/installation.mdx +1 -1
  42. package/documentation/docs/documentation/usage/Reactivity.mdx +20 -0
  43. package/documentation/package-lock.json +7 -7
  44. package/documentation/package.json +1 -1
  45. package/documentation/yarn.lock +8167 -0
  46. package/global.d.ts +1 -0
  47. package/jest.config.js +2 -1
  48. package/package.json +10 -8
  49. package/src/index.ts +4 -1
  50. package/src/model/Model.ts +15 -0
  51. package/src/observable/Observable.ts +2 -1
  52. package/src/observable/cold/ColdMediatorObservable.ts +47 -0
  53. package/src/observable/cold/useColdObservers.ts +23 -0
  54. package/src/observable/mapObservablesToValues.ts +7 -0
  55. package/src/observable/mediator/MediatorObservable.ts +9 -0
  56. package/src/observable/types.ts +2 -0
  57. package/src/observable/useObserver.ts +18 -3
  58. package/src/observable/useObservers.ts +21 -0
  59. package/tsconfig.base.json +2 -1
  60. package/dist/src/observable/MediatorObservable.d.ts +0 -6
  61. package/dist/src/observable/MediatorObservable.d.ts.map +0 -1
  62. package/dist/src/observable/MediatorObservable.js.map +0 -1
  63. package/src/observable/MediatorObservable.ts +0 -9
@@ -0,0 +1,5 @@
1
+ {
2
+ "cSpell.words": [
3
+ "unmagler"
4
+ ]
5
+ }
package/babel.config.js CHANGED
@@ -7,7 +7,7 @@ module.exports = {
7
7
  plugins: [
8
8
  `${__dirname}/dist/transformers/babel-plugin-obsidian`,
9
9
  ['@babel/plugin-proposal-decorators', { legacy: true }],
10
- '@babel/plugin-proposal-class-properties',
10
+ '@babel/plugin-transform-class-properties',
11
11
  'babel-plugin-parameter-decorator'
12
12
  ],
13
13
  };
@@ -15,8 +15,10 @@ export declare const Obsidian: _Obsidian;
15
15
  export { injectComponent } from './injectors/components/InjectComponent';
16
16
  export { injectHook, injectHookWithArguments } from './injectors/hooks/InjectHook';
17
17
  export { useObserver } from './observable/useObserver';
18
+ export { useObservers } from './observable/useObservers';
18
19
  export { Observable } from './observable/Observable';
19
- export { MediatorObservable } from './observable/MediatorObservable';
20
+ export { MediatorObservable } from './observable/mediator/MediatorObservable';
20
21
  export { OnNext, Unsubscribe } from './observable/types';
22
+ export { Model } from './model/Model';
21
23
  export { testKit } from '../testkit';
22
24
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC,cAAc,SAAS,CAAC;AAExB,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,KAAK,IAAI,MAAM,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,iBAAiB,IAAI,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAEvF,eAAO,MAAM,QAAQ,WAAkB,CAAC;AAExC,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAEnF,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEzD,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC,cAAc,SAAS,CAAC;AAExB,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,KAAK,IAAI,MAAM,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,iBAAiB,IAAI,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAEvF,eAAO,MAAM,QAAQ,WAAkB,CAAC;AAExC,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAEnF,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AAC9E,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEzD,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAEtC,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC"}
package/dist/src/index.js CHANGED
@@ -17,7 +17,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
17
17
  return (mod && mod.__esModule) ? mod : { "default": mod };
18
18
  };
19
19
  Object.defineProperty(exports, "__esModule", { value: true });
20
- exports.testKit = exports.MediatorObservable = exports.Observable = exports.useObserver = exports.injectHookWithArguments = exports.injectHook = exports.injectComponent = exports.Obsidian = exports.GraphMiddleware = exports.LifecycleBound = exports.LateInject = exports.Inject = exports.Injectable = exports.Provides = exports.ObjectGraph = exports.Singleton = exports.Graph = void 0;
20
+ exports.testKit = exports.Model = exports.MediatorObservable = exports.Observable = exports.useObservers = exports.useObserver = exports.injectHookWithArguments = exports.injectHook = exports.injectComponent = exports.Obsidian = exports.GraphMiddleware = exports.LifecycleBound = exports.LateInject = exports.Inject = exports.Injectable = exports.Provides = exports.ObjectGraph = exports.Singleton = exports.Graph = void 0;
21
21
  const Obsidian_1 = __importDefault(require("./Obsidian"));
22
22
  __exportStar(require("./types"), exports);
23
23
  var Graph_1 = require("./decorators/Graph");
@@ -46,10 +46,14 @@ Object.defineProperty(exports, "injectHook", { enumerable: true, get: function (
46
46
  Object.defineProperty(exports, "injectHookWithArguments", { enumerable: true, get: function () { return InjectHook_1.injectHookWithArguments; } });
47
47
  var useObserver_1 = require("./observable/useObserver");
48
48
  Object.defineProperty(exports, "useObserver", { enumerable: true, get: function () { return useObserver_1.useObserver; } });
49
+ var useObservers_1 = require("./observable/useObservers");
50
+ Object.defineProperty(exports, "useObservers", { enumerable: true, get: function () { return useObservers_1.useObservers; } });
49
51
  var Observable_1 = require("./observable/Observable");
50
52
  Object.defineProperty(exports, "Observable", { enumerable: true, get: function () { return Observable_1.Observable; } });
51
- var MediatorObservable_1 = require("./observable/MediatorObservable");
53
+ var MediatorObservable_1 = require("./observable/mediator/MediatorObservable");
52
54
  Object.defineProperty(exports, "MediatorObservable", { enumerable: true, get: function () { return MediatorObservable_1.MediatorObservable; } });
55
+ var Model_1 = require("./model/Model");
56
+ Object.defineProperty(exports, "Model", { enumerable: true, get: function () { return Model_1.Model; } });
53
57
  var testkit_1 = require("../testkit");
54
58
  Object.defineProperty(exports, "testKit", { enumerable: true, get: function () { return testkit_1.testKit; } });
55
59
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,0DAAmC;AAEnC,0CAAwB;AAExB,4CAA2C;AAAlC,8FAAA,KAAK,OAAA;AACd,oDAAmD;AAA1C,sGAAA,SAAS,OAAA;AAClB,mDAAkD;AAAzC,0GAAA,WAAW,OAAA;AAEpB,2DAA0D;AAAjD,oGAAA,QAAQ,OAAA;AACjB,6DAA4D;AAAnD,wGAAA,UAAU,OAAA;AACnB,qDAAoD;AAA3C,gGAAA,MAAM,OAAA;AACf,6DAA4D;AAAnD,wGAAA,UAAU,OAAA;AACnB,8DAA6D;AAApD,gHAAA,cAAc,OAAA;AACvB,oEAAmE;AAA1D,kHAAA,eAAe,OAAA;AAGX,QAAA,QAAQ,GAAG,IAAI,kBAAS,EAAE,CAAC;AAExC,0EAAyE;AAAhE,kHAAA,eAAe,OAAA;AACxB,2DAAmF;AAA1E,wGAAA,UAAU,OAAA;AAAE,qHAAA,uBAAuB,OAAA;AAE5C,wDAAuD;AAA9C,0GAAA,WAAW,OAAA;AACpB,sDAAqD;AAA5C,wGAAA,UAAU,OAAA;AACnB,sEAAqE;AAA5D,wHAAA,kBAAkB,OAAA;AAG3B,sCAAqC;AAA5B,kGAAA,OAAO,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,0DAAmC;AAEnC,0CAAwB;AAExB,4CAA2C;AAAlC,8FAAA,KAAK,OAAA;AACd,oDAAmD;AAA1C,sGAAA,SAAS,OAAA;AAClB,mDAAkD;AAAzC,0GAAA,WAAW,OAAA;AAEpB,2DAA0D;AAAjD,oGAAA,QAAQ,OAAA;AACjB,6DAA4D;AAAnD,wGAAA,UAAU,OAAA;AACnB,qDAAoD;AAA3C,gGAAA,MAAM,OAAA;AACf,6DAA4D;AAAnD,wGAAA,UAAU,OAAA;AACnB,8DAA6D;AAApD,gHAAA,cAAc,OAAA;AACvB,oEAAmE;AAA1D,kHAAA,eAAe,OAAA;AAGX,QAAA,QAAQ,GAAG,IAAI,kBAAS,EAAE,CAAC;AAExC,0EAAyE;AAAhE,kHAAA,eAAe,OAAA;AACxB,2DAAmF;AAA1E,wGAAA,UAAU,OAAA;AAAE,qHAAA,uBAAuB,OAAA;AAE5C,wDAAuD;AAA9C,0GAAA,WAAW,OAAA;AACpB,0DAAyD;AAAhD,4GAAA,YAAY,OAAA;AACrB,sDAAqD;AAA5C,wGAAA,UAAU,OAAA;AACnB,+EAA8E;AAArE,wHAAA,kBAAkB,OAAA;AAG3B,uCAAsC;AAA7B,8FAAA,KAAK,OAAA;AAEd,sCAAqC;AAA5B,kGAAA,OAAO,OAAA"}
@@ -0,0 +1,4 @@
1
+ export declare abstract class Model {
2
+ use<T extends Model>(this: T): import("../observable/types").ObservedValues<T>;
3
+ }
4
+ //# sourceMappingURL=Model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Model.d.ts","sourceRoot":"","sources":["../../../src/model/Model.ts"],"names":[],"mappings":"AAGA,8BAAsB,KAAK;IAClB,GAAG,CAAC,CAAC,SAAS,KAAK,EAAE,IAAI,EAAE,CAAC;CAUpC"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Model = void 0;
4
+ const useColdObservers_1 = require("../observable/cold/useColdObservers");
5
+ const Observable_1 = require("../observable/Observable");
6
+ class Model {
7
+ use() {
8
+ const observables = {};
9
+ Object.getOwnPropertyNames(this).forEach((propertyName) => {
10
+ const property = this[propertyName];
11
+ if (property instanceof Observable_1.Observable) {
12
+ observables[propertyName] = property;
13
+ }
14
+ });
15
+ return (0, useColdObservers_1.useColdObservables)(observables);
16
+ }
17
+ }
18
+ exports.Model = Model;
19
+ //# sourceMappingURL=Model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Model.js","sourceRoot":"","sources":["../../../src/model/Model.ts"],"names":[],"mappings":";;;AAAA,0EAAyE;AACzE,yDAAsD;AAEtD,MAAsB,KAAK;IAClB,GAAG;QACR,MAAM,WAAW,GAAoC,EAAE,CAAC;QACxD,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,YAAoB,EAAE,EAAE;YAChE,MAAM,QAAQ,GAAI,IAAY,CAAC,YAAY,CAAC,CAAC;YAC7C,IAAI,QAAQ,YAAY,uBAAU,EAAE;gBAClC,WAAW,CAAC,YAAY,CAAC,GAAG,QAAQ,CAAC;aACtC;QACH,CAAC,CAAC,CAAC;QACH,OAAO,IAAA,qCAAkB,EAAI,WAAkB,CAAC,CAAC;IACnD,CAAC;CACF;AAXD,sBAWC"}
@@ -5,7 +5,7 @@ export declare class Observable<T> implements IObservable<T> {
5
5
  constructor(initialValue?: T);
6
6
  get value(): T;
7
7
  set value(value: T);
8
- subscribe(onNext: OnNext<T>): Unsubscribe;
8
+ subscribe(onNext?: OnNext<T>): Unsubscribe;
9
9
  unsubscribe(onNext: OnNext<T>): void;
10
10
  }
11
11
  //# sourceMappingURL=Observable.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Observable.d.ts","sourceRoot":"","sources":["../../../src/observable/Observable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,IAAI,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEzE,qBAAa,UAAU,CAAC,CAAC,CAAE,YAAW,WAAW,CAAC,CAAC,CAAC;IAClD,OAAO,CAAC,WAAW,CAA6B;IAChD,OAAO,CAAC,YAAY,CAAgB;gBAExB,YAAY,CAAC,EAAE,CAAC;IAI5B,IAAW,KAAK,IAAI,CAAC,CAEpB;IAED,IAAW,KAAK,CAAC,KAAK,EAAE,CAAC,EAGxB;IAEM,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW;IAQzC,WAAW,CAAC,MAAM,EAAC,MAAM,CAAC,CAAC,CAAC;CAMpC"}
1
+ {"version":3,"file":"Observable.d.ts","sourceRoot":"","sources":["../../../src/observable/Observable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,IAAI,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAGzE,qBAAa,UAAU,CAAC,CAAC,CAAE,YAAW,WAAW,CAAC,CAAC,CAAC;IAClD,OAAO,CAAC,WAAW,CAA6B;IAChD,OAAO,CAAC,YAAY,CAAgB;gBAExB,YAAY,CAAC,EAAE,CAAC;IAI5B,IAAW,KAAK,IAAI,CAAC,CAEpB;IAED,IAAW,KAAK,CAAC,KAAK,EAAE,CAAC,EAGxB;IAEM,SAAS,CAAC,MAAM,GAAE,MAAM,CAAC,CAAC,CAAQ,GAAG,WAAW;IAQhD,WAAW,CAAC,MAAM,EAAC,MAAM,CAAC,CAAC,CAAC;CAMpC"}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Observable = void 0;
4
+ const NOOP = () => { };
4
5
  class Observable {
5
6
  constructor(initialValue) {
6
7
  this.subscribers = new Set();
@@ -13,7 +14,7 @@ class Observable {
13
14
  this.currentValue = value;
14
15
  this.subscribers.forEach((subscriber) => subscriber(value));
15
16
  }
16
- subscribe(onNext) {
17
+ subscribe(onNext = NOOP) {
17
18
  if (this.subscribers.has(onNext)) {
18
19
  throw new Error('Subscriber already subscribed');
19
20
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Observable.js","sourceRoot":"","sources":["../../../src/observable/Observable.ts"],"names":[],"mappings":";;;AAEA,MAAa,UAAU;IAIrB,YAAY,YAAgB;QAHpB,gBAAW,GAAmB,IAAI,GAAG,EAAE,CAAC;QAI9C,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;IAED,IAAW,KAAK;QACd,OAAO,IAAI,CAAC,YAAiB,CAAC;IAChC,CAAC;IAED,IAAW,KAAK,CAAC,KAAQ;QACvB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC1B,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9D,CAAC;IAEM,SAAS,CAAC,MAAiB;QAChC,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;YAChC,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;SAClD;QACD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC7B,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/C,CAAC;IAEM,WAAW,CAAC,MAAgB;QACjC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;YACjC,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;SAChE;QACD,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;CACF;AA/BD,gCA+BC"}
1
+ {"version":3,"file":"Observable.js","sourceRoot":"","sources":["../../../src/observable/Observable.ts"],"names":[],"mappings":";;;AAEA,MAAM,IAAI,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;AACtB,MAAa,UAAU;IAIrB,YAAY,YAAgB;QAHpB,gBAAW,GAAmB,IAAI,GAAG,EAAE,CAAC;QAI9C,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;IAED,IAAW,KAAK;QACd,OAAO,IAAI,CAAC,YAAiB,CAAC;IAChC,CAAC;IAED,IAAW,KAAK,CAAC,KAAQ;QACvB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC1B,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9D,CAAC;IAEM,SAAS,CAAC,SAAoB,IAAI;QACvC,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;YAChC,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;SAClD;QACD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC7B,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/C,CAAC;IAEM,WAAW,CAAC,MAAgB;QACjC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;YACjC,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;SAChE;QACD,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;CACF;AA/BD,gCA+BC"}
@@ -0,0 +1,18 @@
1
+ import { MediatorObservable } from '../mediator/MediatorObservable';
2
+ export declare class ColdMediatorObservable<T extends object> extends MediatorObservable<T> {
3
+ private readonly handler;
4
+ constructor(obj: T, handler?: PropertyAccessTrackingProxy<T>);
5
+ set value(_: T);
6
+ get value(): T;
7
+ setValue(key: keyof T, value: any): void;
8
+ }
9
+ declare class PropertyAccessTrackingProxy<T extends object> implements ProxyHandler<T> {
10
+ private readonly accessedProperties;
11
+ private trackingSuspended;
12
+ get(target: T, p: string | symbol, receiver: any): (string extends infer T_1 ? T_1 extends string ? T_1 extends keyof T ? T[T_1] : any : never : never) | (symbol extends infer T_2 ? T_2 extends symbol ? T_2 extends keyof T ? T[T_2] : any : never : never);
13
+ hasAccessedProperty(key: keyof T): boolean;
14
+ suspendTracking(): void;
15
+ resumeTracking(): void;
16
+ }
17
+ export {};
18
+ //# sourceMappingURL=ColdMediatorObservable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ColdMediatorObservable.d.ts","sourceRoot":"","sources":["../../../../src/observable/cold/ColdMediatorObservable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEpE,qBAAa,sBAAsB,CAAC,CAAC,SAAS,MAAM,CAAE,SAAQ,kBAAkB,CAAC,CAAC,CAAC;IAC7D,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAhC,GAAG,EAAE,CAAC,EAAmB,OAAO,iCAAuC;IAInF,IAAa,KAAK,CAAC,CAAC,EAAE,CAAC,EAEtB;IAED,IAAa,KAAK,IAAI,CAAC,CAEtB;IAED,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,GAAG;CAOlC;AAED,cAAM,2BAA2B,CAAC,CAAC,SAAS,MAAM,CAAE,YAAW,YAAY,CAAC,CAAC,CAAC;IAC5E,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAsB;IACzD,OAAO,CAAC,iBAAiB,CAAS;IAElC,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,GAAG;IAOhD,mBAAmB,CAAC,GAAG,EAAE,MAAM,CAAC;IAIzB,eAAe;IAIf,cAAc;CAGtB"}
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ColdMediatorObservable = void 0;
4
+ const MediatorObservable_1 = require("../mediator/MediatorObservable");
5
+ class ColdMediatorObservable extends MediatorObservable_1.MediatorObservable {
6
+ constructor(obj, handler = new PropertyAccessTrackingProxy()) {
7
+ super(new Proxy(obj, handler));
8
+ this.handler = handler;
9
+ }
10
+ set value(_) {
11
+ throw new Error('Cannot set value of ColdMediatorObservable, use setValue(value, key) instead');
12
+ }
13
+ get value() {
14
+ return super.value;
15
+ }
16
+ setValue(key, value) {
17
+ if (this.handler.hasAccessedProperty(key)) {
18
+ this.handler.suspendTracking();
19
+ super.value = { ...this.value, [key]: value };
20
+ this.handler.resumeTracking();
21
+ }
22
+ }
23
+ }
24
+ exports.ColdMediatorObservable = ColdMediatorObservable;
25
+ class PropertyAccessTrackingProxy {
26
+ constructor() {
27
+ this.accessedProperties = new Set();
28
+ this.trackingSuspended = false;
29
+ }
30
+ get(target, p, receiver) {
31
+ if (!this.trackingSuspended) {
32
+ this.accessedProperties.add(p);
33
+ }
34
+ return Reflect.get(target, p, receiver);
35
+ }
36
+ hasAccessedProperty(key) {
37
+ return this.accessedProperties.has(key);
38
+ }
39
+ suspendTracking() {
40
+ this.trackingSuspended = true;
41
+ }
42
+ resumeTracking() {
43
+ this.trackingSuspended = false;
44
+ }
45
+ }
46
+ //# sourceMappingURL=ColdMediatorObservable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ColdMediatorObservable.js","sourceRoot":"","sources":["../../../../src/observable/cold/ColdMediatorObservable.ts"],"names":[],"mappings":";;;AAAA,uEAAoE;AAEpE,MAAa,sBAAyC,SAAQ,uCAAqB;IACjF,YAAY,GAAM,EAAmB,UAAU,IAAI,2BAA2B,EAAK;QACjF,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;QADI,YAAO,GAAP,OAAO,CAAuC;IAEnF,CAAC;IAED,IAAa,KAAK,CAAC,CAAI;QACrB,MAAM,IAAI,KAAK,CAAC,8EAA8E,CAAC,CAAC;IAClG,CAAC;IAED,IAAa,KAAK;QAChB,OAAO,KAAK,CAAC,KAAK,CAAC;IACrB,CAAC;IAED,QAAQ,CAAC,GAAY,EAAE,KAAU;QAC/B,IAAI,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE;YACzC,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;YAC/B,KAAK,CAAC,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC;YAC9C,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;SAC/B;IACH,CAAC;CACF;AApBD,wDAoBC;AAED,MAAM,2BAA2B;IAAjC;QACmB,uBAAkB,GAAG,IAAI,GAAG,EAAW,CAAC;QACjD,sBAAiB,GAAG,KAAK,CAAC;IAoBpC,CAAC;IAlBC,GAAG,CAAC,MAAS,EAAE,CAAkB,EAAE,QAAa;QAC9C,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;YAC3B,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAY,CAAC,CAAC;SAC3C;QACD,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC1C,CAAC;IAED,mBAAmB,CAAC,GAAY;QAC9B,OAAO,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC1C,CAAC;IAEM,eAAe;QACpB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAChC,CAAC;IAEM,cAAc;QACnB,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;IACjC,CAAC;CACF"}
@@ -0,0 +1,3 @@
1
+ import { ObservedValues } from '../types';
2
+ export declare function useColdObservables<T extends Record<string, any>>(observables: T): ObservedValues<T>;
3
+ //# sourceMappingURL=useColdObservers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useColdObservers.d.ts","sourceRoot":"","sources":["../../../../src/observable/cold/useColdObservers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAG1C,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,WAAW,EAAE,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAiBnG"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useColdObservables = void 0;
4
+ const react_1 = require("react");
5
+ const ColdMediatorObservable_1 = require("./ColdMediatorObservable");
6
+ const mapObservablesToValues_1 = require("../mapObservablesToValues");
7
+ function useColdObservables(observables) {
8
+ const [mediator] = (0, react_1.useState)(() => new ColdMediatorObservable_1.ColdMediatorObservable((0, mapObservablesToValues_1.mapObservablesToValues)(observables)));
9
+ const [values, setValues] = (0, react_1.useState)(() => mediator.value);
10
+ (0, react_1.useEffect)(() => {
11
+ Object.keys(observables).forEach((key) => {
12
+ mediator.addSource(observables[key], (value) => {
13
+ mediator.setValue(key, value);
14
+ });
15
+ });
16
+ return mediator.subscribe(setValues);
17
+ }, []);
18
+ return values;
19
+ }
20
+ exports.useColdObservables = useColdObservables;
21
+ //# sourceMappingURL=useColdObservers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useColdObservers.js","sourceRoot":"","sources":["../../../../src/observable/cold/useColdObservers.ts"],"names":[],"mappings":";;;AAAA,iCAA4C;AAC5C,qEAAkE;AAElE,sEAAmE;AAEnE,SAAgB,kBAAkB,CAAgC,WAAc;IAC9E,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAA,gBAAQ,EACzB,GAAG,EAAE,CAAC,IAAI,+CAAsB,CAAI,IAAA,+CAAsB,EAAC,WAAW,CAAM,CAAC,CAC9E,CAAC;IACF,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,IAAA,gBAAQ,EAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,KAA0B,CAAC,CAAC;IAEhF,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,MAAM,CAAC,IAAI,CAAC,WAAiB,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YAC7C,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE;gBAC7C,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAChC,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,MAAM,CAAC;AAChB,CAAC;AAjBD,gDAiBC"}
@@ -0,0 +1,3 @@
1
+ import { ObservedValues } from './types';
2
+ export declare function mapObservablesToValues<T extends Record<string, any>>(observables: T): ObservedValues<T>;
3
+ //# sourceMappingURL=mapObservablesToValues.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapObservablesToValues.d.ts","sourceRoot":"","sources":["../../../src/observable/mapObservablesToValues.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEzC,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,WAAW,EAAE,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAIvG"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mapObservablesToValues = void 0;
4
+ function mapObservablesToValues(observables) {
5
+ return Object.fromEntries(Object.entries(observables).map(([key, observable]) => [key, observable.value]));
6
+ }
7
+ exports.mapObservablesToValues = mapObservablesToValues;
8
+ //# sourceMappingURL=mapObservablesToValues.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapObservablesToValues.js","sourceRoot":"","sources":["../../../src/observable/mapObservablesToValues.ts"],"names":[],"mappings":";;;AAEA,SAAgB,sBAAsB,CAAgC,WAAc;IAClF,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAC3D,CAAC;AACzB,CAAC;AAJD,wDAIC"}
@@ -0,0 +1,6 @@
1
+ import { Observable } from '../Observable';
2
+ import { OnNext } from '../types';
3
+ export declare class MediatorObservable<T> extends Observable<T> {
4
+ addSource<S>(source: Observable<S>, onNext: OnNext<S>): this;
5
+ }
6
+ //# sourceMappingURL=MediatorObservable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MediatorObservable.d.ts","sourceRoot":"","sources":["../../../../src/observable/mediator/MediatorObservable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,qBAAa,kBAAkB,CAAC,CAAC,CAAE,SAAQ,UAAU,CAAC,CAAC,CAAC;IACtD,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAItD"}
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.MediatorObservable = void 0;
4
- const Observable_1 = require("./Observable");
4
+ const Observable_1 = require("../Observable");
5
5
  class MediatorObservable extends Observable_1.Observable {
6
6
  addSource(source, onNext) {
7
7
  source.subscribe(onNext);
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MediatorObservable.js","sourceRoot":"","sources":["../../../../src/observable/mediator/MediatorObservable.ts"],"names":[],"mappings":";;;AAAA,8CAA2C;AAG3C,MAAa,kBAAsB,SAAQ,uBAAa;IACtD,SAAS,CAAI,MAAqB,EAAE,MAAiB;QACnD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AALD,gDAKC"}
@@ -4,4 +4,7 @@ export interface Observable<T> {
4
4
  value: T;
5
5
  subscribe(onNext: OnNext<T>): Unsubscribe;
6
6
  }
7
+ export type ObservedValues<T> = {
8
+ [K in keyof T]: T[K] extends Observable<infer R> ? R : never;
9
+ };
7
10
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/observable/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;AAC3C,MAAM,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC;AAErC,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B,KAAK,EAAE,CAAC,CAAC;IACT,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;CAC3C"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/observable/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;AAC3C,MAAM,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC;AAErC,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B,KAAK,EAAE,CAAC,CAAC;IACT,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;CAC3C;AAED,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;CAAE,CAAC"}
@@ -1,3 +1,5 @@
1
- import { Observable } from './types';
2
- export declare function useObserver<T>(observable: Observable<T>): [T, (next: T) => void];
1
+ import { Observable } from './Observable';
2
+ type ObservableOrGenerator<T> = Observable<T> | (() => Observable<T>);
3
+ export declare function useObserver<T>(observableOrGenerator: ObservableOrGenerator<T>): [T, (next: T) => void];
4
+ export {};
3
5
  //# sourceMappingURL=useObserver.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useObserver.d.ts","sourceRoot":"","sources":["../../../src/observable/useObserver.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,wBAAgB,WAAW,CAAC,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC,CAWhF"}
1
+ {"version":3,"file":"useObserver.d.ts","sourceRoot":"","sources":["../../../src/observable/useObserver.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,KAAK,qBAAqB,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AAEtE,wBAAgB,WAAW,CAAC,CAAC,EAAE,qBAAqB,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC,CAetG"}
@@ -3,7 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.useObserver = void 0;
4
4
  /* eslint-disable no-param-reassign */
5
5
  const react_1 = require("react");
6
- function useObserver(observable) {
6
+ const Observable_1 = require("./Observable");
7
+ function useObserver(observableOrGenerator) {
8
+ const observable = (0, react_1.useMemo)(() => getOrGenerateObservable(observableOrGenerator), []);
7
9
  const [value, setValue] = (0, react_1.useState)(observable.value);
8
10
  const onNext = (0, react_1.useCallback)((next) => {
9
11
  observable.value = next;
@@ -14,4 +16,7 @@ function useObserver(observable) {
14
16
  return [value, onNext];
15
17
  }
16
18
  exports.useObserver = useObserver;
19
+ function getOrGenerateObservable(observableOrGenerator) {
20
+ return observableOrGenerator instanceof Observable_1.Observable ? observableOrGenerator : observableOrGenerator();
21
+ }
17
22
  //# sourceMappingURL=useObserver.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useObserver.js","sourceRoot":"","sources":["../../../src/observable/useObserver.ts"],"names":[],"mappings":";;;AAAA,sCAAsC;AACtC,iCAAyD;AAGzD,SAAgB,WAAW,CAAI,UAAyB;IACtD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAA,gBAAQ,EAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,IAAA,mBAAW,EAAC,CAAC,IAAO,EAAE,EAAE;QACrC,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC;IAC1B,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAEjB,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,OAAO,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAEjB,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AACzB,CAAC;AAXD,kCAWC"}
1
+ {"version":3,"file":"useObserver.js","sourceRoot":"","sources":["../../../src/observable/useObserver.ts"],"names":[],"mappings":";;;AAAA,sCAAsC;AACtC,iCAKe;AACf,6CAA0C;AAI1C,SAAgB,WAAW,CAAI,qBAA+C;IAC5E,MAAM,UAAU,GAAG,IAAA,eAAO,EACxB,GAAG,EAAE,CAAC,uBAAuB,CAAC,qBAAqB,CAAC,EACpD,EAAE,CACH,CAAC;IACF,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAA,gBAAQ,EAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,IAAA,mBAAW,EAAC,CAAC,IAAO,EAAE,EAAE;QACrC,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC;IAC1B,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAEjB,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,OAAO,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAEjB,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AACzB,CAAC;AAfD,kCAeC;AAED,SAAS,uBAAuB,CAAC,qBAAiD;IAChF,OAAO,qBAAqB,YAAY,uBAAU,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,qBAAqB,EAAE,CAAC;AACvG,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { ObservedValues } from './types';
2
+ export declare function useObservers<T extends Record<string, any>>(observables: T): ObservedValues<T>;
3
+ //# sourceMappingURL=useObservers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useObservers.d.ts","sourceRoot":"","sources":["../../../src/observable/useObservers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAGzC,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,WAAW,EAAE,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAe7F"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useObservers = void 0;
4
+ const react_1 = require("react");
5
+ const MediatorObservable_1 = require("./mediator/MediatorObservable");
6
+ const mapObservablesToValues_1 = require("./mapObservablesToValues");
7
+ function useObservers(observables) {
8
+ const [values, setValues] = (0, react_1.useState)(() => (0, mapObservablesToValues_1.mapObservablesToValues)(observables));
9
+ (0, react_1.useEffect)(() => {
10
+ const mediator = new MediatorObservable_1.MediatorObservable();
11
+ Object.keys(observables).forEach((key) => {
12
+ mediator.addSource(observables[key], (value) => {
13
+ setValues({ ...values, [key]: value });
14
+ });
15
+ });
16
+ return mediator.subscribe();
17
+ }, []);
18
+ return values;
19
+ }
20
+ exports.useObservers = useObservers;
21
+ //# sourceMappingURL=useObservers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useObservers.js","sourceRoot":"","sources":["../../../src/observable/useObservers.ts"],"names":[],"mappings":";;;AAAA,iCAA4C;AAC5C,sEAAmE;AAEnE,qEAAkE;AAElE,SAAgB,YAAY,CAAgC,WAAc;IACxE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,IAAA,gBAAQ,EAAC,GAAG,EAAE,CAAC,IAAA,+CAAsB,EAAC,WAAW,CAAC,CAAC,CAAC;IAEhF,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,MAAM,QAAQ,GAAG,IAAI,uCAAkB,EAAE,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC,WAAiB,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YAC7C,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE;gBAC7C,SAAS,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;YACzC,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,QAAQ,CAAC,SAAS,EAAE,CAAC;IAC9B,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,MAAM,CAAC;AAChB,CAAC;AAfD,oCAeC"}
@@ -49,7 +49,7 @@ module.exports = {
49
49
  plugins: [
50
50
  + react-obsidian/dist/transformers/babel-plugin-obsidian,
51
51
  + ['@babel/plugin-proposal-decorators', {legacy: true}],
52
- + ['@babel/plugin-proposal-class-properties', { legacy: true }],
52
+ + '@babel/plugin-transform-class-properties',
53
53
  + 'babel-plugin-parameter-decorator'
54
54
  ]
55
55
  };
@@ -74,6 +74,26 @@ const useLogin = () => {
74
74
  }
75
75
  ```
76
76
 
77
+ ### Avoid recreating the initial observable
78
+ When using the `useObserver` hook, it is important to avoid recreating the initial observable.
79
+
80
+ ```ts title="Avoid instantiating observables in hooks"
81
+ const useLogin = () => {
82
+ const [isLoggedIn] = useObserver(new Observable(false));
83
+ }
84
+ ```
85
+
86
+ Even if the value of the observable is the same, this can cause unexpected behavior since it's instantiated on every render.
87
+
88
+ To solve this, you can pass a generator function to the useObserver hook instead:
89
+ ```ts
90
+ const useLogin = () => {
91
+ const [isLoggedIn] = useObserver(() => new Observable(false));
92
+ }
93
+ ```
94
+
95
+ If you pass a function to the useObserver hook, it will only be called on the first render. This ensures that the observable is only instantiated once.
96
+
77
97
  ### Merge multiple observable sources
78
98
  `MediatorObservable` is a special type of observable that allows you to merge multiple observable sources into a single observable. This is useful for creating side effect from one or more observables.
79
99
 
@@ -12,7 +12,7 @@
12
12
  "@docusaurus/preset-classic": "2.2.0",
13
13
  "@mdx-js/react": "^1.6.22",
14
14
  "clsx": "^1.2.1",
15
- "enhancedocs-search": "^1.0.2",
15
+ "enhancedocs-search": "^1.1.0",
16
16
  "prism-react-renderer": "^1.3.5",
17
17
  "react": "^17.0.2",
18
18
  "react-dom": "^17.0.2"
@@ -5601,9 +5601,9 @@
5601
5601
  }
5602
5602
  },
5603
5603
  "node_modules/enhancedocs-search": {
5604
- "version": "1.0.2",
5605
- "resolved": "https://registry.npmjs.org/enhancedocs-search/-/enhancedocs-search-1.0.2.tgz",
5606
- "integrity": "sha512-zxGZ1SfdLywBeKd2Nbq/Q4HjWtydduZnYe1zhVFoUdIluj6rq9Iy3/Cc7pI9sG46CyltFOFDIYKJgTLe5ivwsA==",
5604
+ "version": "1.1.0",
5605
+ "resolved": "https://registry.npmjs.org/enhancedocs-search/-/enhancedocs-search-1.1.0.tgz",
5606
+ "integrity": "sha512-LyQRwlvh1jI2izXS4mY3oUvIMAOUI1luWB9vLACmTY030CI9j9jXx7jCU07WR7oLf9dUo3ZXGTJwB2WNv+Hz2A==",
5607
5607
  "dependencies": {
5608
5608
  "mixpanel-browser": "^2.47.0",
5609
5609
  "react-markdown": "^8.0.6",
@@ -17512,9 +17512,9 @@
17512
17512
  }
17513
17513
  },
17514
17514
  "enhancedocs-search": {
17515
- "version": "1.0.2",
17516
- "resolved": "https://registry.npmjs.org/enhancedocs-search/-/enhancedocs-search-1.0.2.tgz",
17517
- "integrity": "sha512-zxGZ1SfdLywBeKd2Nbq/Q4HjWtydduZnYe1zhVFoUdIluj6rq9Iy3/Cc7pI9sG46CyltFOFDIYKJgTLe5ivwsA==",
17515
+ "version": "1.1.0",
17516
+ "resolved": "https://registry.npmjs.org/enhancedocs-search/-/enhancedocs-search-1.1.0.tgz",
17517
+ "integrity": "sha512-LyQRwlvh1jI2izXS4mY3oUvIMAOUI1luWB9vLACmTY030CI9j9jXx7jCU07WR7oLf9dUo3ZXGTJwB2WNv+Hz2A==",
17518
17518
  "requires": {
17519
17519
  "mixpanel-browser": "^2.47.0",
17520
17520
  "react-markdown": "^8.0.6",
@@ -19,7 +19,7 @@
19
19
  "@docusaurus/preset-classic": "2.2.0",
20
20
  "@mdx-js/react": "^1.6.22",
21
21
  "clsx": "^1.2.1",
22
- "enhancedocs-search": "^1.0.2",
22
+ "enhancedocs-search": "^1.1.0",
23
23
  "prism-react-renderer": "^1.3.5",
24
24
  "react": "^17.0.2",
25
25
  "react-dom": "^17.0.2"