react-obsidian 0.0.45 → 0.0.47
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/.vscode/settings.json +5 -0
- package/babel.config.js +1 -1
- package/dist/src/index.d.ts +3 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +6 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/model/Model.d.ts +4 -0
- package/dist/src/model/Model.d.ts.map +1 -0
- package/dist/src/model/Model.js +19 -0
- package/dist/src/model/Model.js.map +1 -0
- package/dist/src/observable/Observable.d.ts +1 -1
- package/dist/src/observable/Observable.d.ts.map +1 -1
- package/dist/src/observable/Observable.js +2 -1
- package/dist/src/observable/Observable.js.map +1 -1
- package/dist/src/observable/cold/ColdMediatorObservable.d.ts +18 -0
- package/dist/src/observable/cold/ColdMediatorObservable.d.ts.map +1 -0
- package/dist/src/observable/cold/ColdMediatorObservable.js +46 -0
- package/dist/src/observable/cold/ColdMediatorObservable.js.map +1 -0
- package/dist/src/observable/cold/useColdObservers.d.ts +3 -0
- package/dist/src/observable/cold/useColdObservers.d.ts.map +1 -0
- package/dist/src/observable/cold/useColdObservers.js +21 -0
- package/dist/src/observable/cold/useColdObservers.js.map +1 -0
- package/dist/src/observable/mapObservablesToValues.d.ts +3 -0
- package/dist/src/observable/mapObservablesToValues.d.ts.map +1 -0
- package/dist/src/observable/mapObservablesToValues.js +8 -0
- package/dist/src/observable/mapObservablesToValues.js.map +1 -0
- package/dist/src/observable/mediator/MediatorObservable.d.ts +6 -0
- package/dist/src/observable/mediator/MediatorObservable.d.ts.map +1 -0
- package/dist/src/observable/mediator/MediatorObservable.js +12 -0
- package/dist/src/observable/mediator/MediatorObservable.js.map +1 -0
- package/dist/src/observable/types.d.ts +3 -0
- package/dist/src/observable/types.d.ts.map +1 -1
- package/dist/src/observable/useObservers.d.ts +3 -0
- package/dist/src/observable/useObservers.d.ts.map +1 -0
- package/dist/src/observable/useObservers.js +21 -0
- package/dist/src/observable/useObservers.js.map +1 -0
- package/documentation/docs/documentation/installation.mdx +1 -1
- package/documentation/package-lock.json +7 -7
- package/documentation/package.json +1 -1
- package/global.d.ts +1 -0
- package/jest.config.js +2 -1
- package/package.json +10 -8
- package/src/index.ts +4 -1
- package/src/model/Model.ts +15 -0
- package/src/observable/Observable.ts +2 -1
- package/src/observable/cold/ColdMediatorObservable.ts +47 -0
- package/src/observable/cold/useColdObservers.ts +23 -0
- package/src/observable/mapObservablesToValues.ts +7 -0
- package/src/observable/mediator/MediatorObservable.ts +9 -0
- package/src/observable/types.ts +2 -0
- package/src/observable/useObservers.ts +21 -0
- package/tsconfig.base.json +2 -1
- package/dist/src/observable/MediatorObservable.d.ts +0 -14
- package/dist/src/observable/MediatorObservable.d.ts.map +0 -1
- package/dist/src/observable/MediatorObservable.js +0 -42
- package/dist/src/observable/MediatorObservable.js.map +0 -1
- package/src/observable/MediatorObservable.ts +0 -55
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-
|
|
10
|
+
'@babel/plugin-transform-class-properties',
|
|
11
11
|
'babel-plugin-parameter-decorator'
|
|
12
12
|
],
|
|
13
13
|
};
|
package/dist/src/index.d.ts
CHANGED
|
@@ -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
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -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,
|
|
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
|
package/dist/src/index.js.map
CHANGED
|
@@ -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
|
|
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 @@
|
|
|
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
|
|
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;
|
|
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,
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MediatorObservable = void 0;
|
|
4
|
+
const Observable_1 = require("../Observable");
|
|
5
|
+
class MediatorObservable extends Observable_1.Observable {
|
|
6
|
+
addSource(source, onNext) {
|
|
7
|
+
source.subscribe(onNext);
|
|
8
|
+
return this;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
exports.MediatorObservable = MediatorObservable;
|
|
12
|
+
//# sourceMappingURL=MediatorObservable.js.map
|
|
@@ -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"}
|
|
@@ -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"}
|
|
@@ -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
|
-
+
|
|
52
|
+
+ '@babel/plugin-transform-class-properties',
|
|
53
53
|
+ 'babel-plugin-parameter-decorator'
|
|
54
54
|
]
|
|
55
55
|
};
|
|
@@ -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
|
|
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
|
|
5605
|
-
"resolved": "https://registry.npmjs.org/enhancedocs-search/-/enhancedocs-search-1.0.
|
|
5606
|
-
"integrity": "sha512-
|
|
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
|
|
17516
|
-
"resolved": "https://registry.npmjs.org/enhancedocs-search/-/enhancedocs-search-1.0.
|
|
17517
|
-
"integrity": "sha512-
|
|
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",
|
package/global.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import 'jest-extended';
|
package/jest.config.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-obsidian",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.47",
|
|
4
4
|
"description": "Dependency injection framework for React and React Native applications",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"prepack": "npm run lint && tsc --project tsconfig.prod.json",
|
|
@@ -20,12 +20,13 @@
|
|
|
20
20
|
"react": "*"
|
|
21
21
|
},
|
|
22
22
|
"devDependencies": {
|
|
23
|
-
"@babel/core": "7.
|
|
24
|
-
"@babel/plugin-proposal-decorators": "7.
|
|
25
|
-
"@babel/
|
|
26
|
-
"@babel/preset-
|
|
27
|
-
"@babel/preset-
|
|
28
|
-
"@babel/
|
|
23
|
+
"@babel/core": "7.22.x",
|
|
24
|
+
"@babel/plugin-proposal-decorators": "7.22.x",
|
|
25
|
+
"@babel/plugin-transform-class-properties": "7.22.x",
|
|
26
|
+
"@babel/preset-env": "7.22.x",
|
|
27
|
+
"@babel/preset-react": "7.22.x",
|
|
28
|
+
"@babel/preset-typescript": "7.22.x",
|
|
29
|
+
"@babel/types": "7.22.x",
|
|
29
30
|
"@johanblumenberg/ts-mockito": "1.x.x",
|
|
30
31
|
"@testing-library/react": "14.x.x",
|
|
31
32
|
"@testing-library/react-hooks": "^7.0.2",
|
|
@@ -48,6 +49,7 @@
|
|
|
48
49
|
"eslint-plugin-unused-imports": "2.x.x",
|
|
49
50
|
"jest": "29.5.x",
|
|
50
51
|
"jest-environment-jsdom": "^29.5.0",
|
|
52
|
+
"jest-extended": "^4.0.0",
|
|
51
53
|
"lodash": "^4.17.21",
|
|
52
54
|
"react": "18.2.x",
|
|
53
55
|
"react-dom": "18.2.x",
|
|
@@ -79,4 +81,4 @@
|
|
|
79
81
|
"url": "https://github.com/wix-incubator/react-obsidian/issues"
|
|
80
82
|
},
|
|
81
83
|
"homepage": "https://github.com/wix-incubator/react-obsidian#readme"
|
|
82
|
-
}
|
|
84
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -20,8 +20,11 @@ export { injectComponent } from './injectors/components/InjectComponent';
|
|
|
20
20
|
export { injectHook, injectHookWithArguments } from './injectors/hooks/InjectHook';
|
|
21
21
|
|
|
22
22
|
export { useObserver } from './observable/useObserver';
|
|
23
|
+
export { useObservers } from './observable/useObservers';
|
|
23
24
|
export { Observable } from './observable/Observable';
|
|
24
|
-
export { MediatorObservable } from './observable/MediatorObservable';
|
|
25
|
+
export { MediatorObservable } from './observable/mediator/MediatorObservable';
|
|
25
26
|
export { OnNext, Unsubscribe } from './observable/types';
|
|
26
27
|
|
|
28
|
+
export { Model } from './model/Model';
|
|
29
|
+
|
|
27
30
|
export { testKit } from '../testkit';
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { useColdObservables } from '../observable/cold/useColdObservers';
|
|
2
|
+
import { Observable } from '../observable/Observable';
|
|
3
|
+
|
|
4
|
+
export abstract class Model {
|
|
5
|
+
public use<T extends Model>(this: T) {
|
|
6
|
+
const observables: Record<string, Observable<any>> = {};
|
|
7
|
+
Object.getOwnPropertyNames(this).forEach((propertyName: string) => {
|
|
8
|
+
const property = (this as any)[propertyName];
|
|
9
|
+
if (property instanceof Observable) {
|
|
10
|
+
observables[propertyName] = property;
|
|
11
|
+
}
|
|
12
|
+
});
|
|
13
|
+
return useColdObservables<T>(observables as any);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Observable as IObservable, OnNext, Unsubscribe } from './types';
|
|
2
2
|
|
|
3
|
+
const NOOP = () => {};
|
|
3
4
|
export class Observable<T> implements IObservable<T> {
|
|
4
5
|
private subscribers: Set<OnNext<T>> = new Set();
|
|
5
6
|
private currentValue: T | undefined;
|
|
@@ -17,7 +18,7 @@ export class Observable<T> implements IObservable<T> {
|
|
|
17
18
|
this.subscribers.forEach((subscriber) => subscriber(value));
|
|
18
19
|
}
|
|
19
20
|
|
|
20
|
-
public subscribe(onNext: OnNext<T>): Unsubscribe {
|
|
21
|
+
public subscribe(onNext: OnNext<T> = NOOP): Unsubscribe {
|
|
21
22
|
if (this.subscribers.has(onNext)) {
|
|
22
23
|
throw new Error('Subscriber already subscribed');
|
|
23
24
|
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { MediatorObservable } from '../mediator/MediatorObservable';
|
|
2
|
+
|
|
3
|
+
export class ColdMediatorObservable<T extends object> extends MediatorObservable<T> {
|
|
4
|
+
constructor(obj: T, private readonly handler = new PropertyAccessTrackingProxy<T>()) {
|
|
5
|
+
super(new Proxy(obj, handler));
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
override set value(_: T) {
|
|
9
|
+
throw new Error('Cannot set value of ColdMediatorObservable, use setValue(value, key) instead');
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
override get value(): T {
|
|
13
|
+
return super.value;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
setValue(key: keyof T, value: any) {
|
|
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
|
+
|
|
25
|
+
class PropertyAccessTrackingProxy<T extends object> implements ProxyHandler<T> {
|
|
26
|
+
private readonly accessedProperties = new Set<keyof T>();
|
|
27
|
+
private trackingSuspended = false;
|
|
28
|
+
|
|
29
|
+
get(target: T, p: string | symbol, receiver: any) {
|
|
30
|
+
if (!this.trackingSuspended) {
|
|
31
|
+
this.accessedProperties.add(p as keyof T);
|
|
32
|
+
}
|
|
33
|
+
return Reflect.get(target, p, receiver);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
hasAccessedProperty(key: keyof T) {
|
|
37
|
+
return this.accessedProperties.has(key);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
public suspendTracking() {
|
|
41
|
+
this.trackingSuspended = true;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
public resumeTracking() {
|
|
45
|
+
this.trackingSuspended = false;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { useEffect, useState } from 'react';
|
|
2
|
+
import { ColdMediatorObservable } from './ColdMediatorObservable';
|
|
3
|
+
import { ObservedValues } from '../types';
|
|
4
|
+
import { mapObservablesToValues } from '../mapObservablesToValues';
|
|
5
|
+
|
|
6
|
+
export function useColdObservables<T extends Record<string, any>>(observables: T): ObservedValues<T> {
|
|
7
|
+
const [mediator] = useState(
|
|
8
|
+
() => new ColdMediatorObservable<T>(mapObservablesToValues(observables) as T),
|
|
9
|
+
);
|
|
10
|
+
const [values, setValues] = useState(() => mediator.value as ObservedValues<T>);
|
|
11
|
+
|
|
12
|
+
useEffect(() => {
|
|
13
|
+
Object.keys(observables as {}).forEach((key) => {
|
|
14
|
+
mediator.addSource(observables[key], (value) => {
|
|
15
|
+
mediator.setValue(key, value);
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
return mediator.subscribe(setValues);
|
|
20
|
+
}, []);
|
|
21
|
+
|
|
22
|
+
return values;
|
|
23
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ObservedValues } from './types';
|
|
2
|
+
|
|
3
|
+
export function mapObservablesToValues<T extends Record<string, any>>(observables: T): ObservedValues<T> {
|
|
4
|
+
return Object.fromEntries(
|
|
5
|
+
Object.entries(observables).map(([key, observable]) => [key, observable.value]),
|
|
6
|
+
) as ObservedValues<T>;
|
|
7
|
+
}
|
package/src/observable/types.ts
CHANGED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { useEffect, useState } from 'react';
|
|
2
|
+
import { MediatorObservable } from './mediator/MediatorObservable';
|
|
3
|
+
import { ObservedValues } from './types';
|
|
4
|
+
import { mapObservablesToValues } from './mapObservablesToValues';
|
|
5
|
+
|
|
6
|
+
export function useObservers<T extends Record<string, any>>(observables: T): ObservedValues<T> {
|
|
7
|
+
const [values, setValues] = useState(() => mapObservablesToValues(observables));
|
|
8
|
+
|
|
9
|
+
useEffect(() => {
|
|
10
|
+
const mediator = new MediatorObservable();
|
|
11
|
+
Object.keys(observables as {}).forEach((key) => {
|
|
12
|
+
mediator.addSource(observables[key], (value) => {
|
|
13
|
+
setValues({ ...values, [key]: value });
|
|
14
|
+
});
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
return mediator.subscribe();
|
|
18
|
+
}, []);
|
|
19
|
+
|
|
20
|
+
return values;
|
|
21
|
+
}
|
package/tsconfig.base.json
CHANGED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { Observable } from './Observable';
|
|
2
|
-
import { OnNext, Unsubscribe, Observable as IObservable } from './types';
|
|
3
|
-
export declare class MediatorObservable<T> implements IObservable<T> {
|
|
4
|
-
private subscribers;
|
|
5
|
-
private currentValue;
|
|
6
|
-
private sources;
|
|
7
|
-
constructor(initialValue?: T);
|
|
8
|
-
addSource<S>(source: Observable<S>, onNext: OnNext<S>): MediatorObservable<T>;
|
|
9
|
-
get value(): T;
|
|
10
|
-
set value(value: T);
|
|
11
|
-
subscribe(onNext: OnNext<T>): Unsubscribe;
|
|
12
|
-
private subscribeToAllSources;
|
|
13
|
-
}
|
|
14
|
-
//# sourceMappingURL=MediatorObservable.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MediatorObservable.d.ts","sourceRoot":"","sources":["../../../src/observable/MediatorObservable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,IAAI,WAAW,EAAE,MAAM,SAAS,CAAC;AAQzE,qBAAa,kBAAkB,CAAC,CAAC,CAAE,YAAW,WAAW,CAAC,CAAC,CAAC;IAC1D,OAAO,CAAC,WAAW,CAA6B;IAChD,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,OAAO,CAAqB;gBAExB,YAAY,CAAC,EAAE,CAAC;IAI5B,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC;IAK7E,IAAW,KAAK,IAAI,CAAC,CAEpB;IAED,IAAW,KAAK,CAAC,KAAK,EAAE,CAAC,EAGxB;IAED,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW;IAczC,OAAO,CAAC,qBAAqB;CAQ9B"}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.MediatorObservable = void 0;
|
|
4
|
-
class MediatorObservable {
|
|
5
|
-
constructor(initialValue) {
|
|
6
|
-
this.subscribers = new Set();
|
|
7
|
-
this.sources = [];
|
|
8
|
-
this.currentValue = initialValue;
|
|
9
|
-
}
|
|
10
|
-
addSource(source, onNext) {
|
|
11
|
-
this.sources.push({ source, onNext });
|
|
12
|
-
return this;
|
|
13
|
-
}
|
|
14
|
-
get value() {
|
|
15
|
-
return this.currentValue;
|
|
16
|
-
}
|
|
17
|
-
set value(value) {
|
|
18
|
-
this.currentValue = value;
|
|
19
|
-
this.subscribers.forEach((subscriber) => subscriber(value));
|
|
20
|
-
}
|
|
21
|
-
subscribe(onNext) {
|
|
22
|
-
if (this.subscribers.has(onNext)) {
|
|
23
|
-
throw new Error('Subscriber already subscribed');
|
|
24
|
-
}
|
|
25
|
-
this.subscribers.add(onNext);
|
|
26
|
-
this.subscribeToAllSources();
|
|
27
|
-
return () => {
|
|
28
|
-
this.subscribers.delete(onNext);
|
|
29
|
-
this.sources.forEach(({ unsubscribe }) => unsubscribe === null || unsubscribe === void 0 ? void 0 : unsubscribe());
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
subscribeToAllSources() {
|
|
33
|
-
this.sources.forEach(({ source, onNext }, index) => {
|
|
34
|
-
const unsubscribe = source.subscribe((value) => {
|
|
35
|
-
onNext(value);
|
|
36
|
-
});
|
|
37
|
-
this.sources[index].unsubscribe = unsubscribe;
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
exports.MediatorObservable = MediatorObservable;
|
|
42
|
-
//# sourceMappingURL=MediatorObservable.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MediatorObservable.js","sourceRoot":"","sources":["../../../src/observable/MediatorObservable.ts"],"names":[],"mappings":";;;AASA,MAAa,kBAAkB;IAK7B,YAAY,YAAgB;QAJpB,gBAAW,GAAmB,IAAI,GAAG,EAAE,CAAC;QAExC,YAAO,GAAkB,EAAE,CAAC;QAGlC,IAAI,CAAC,YAAY,GAAG,YAAiB,CAAC;IACxC,CAAC;IAED,SAAS,CAAI,MAAqB,EAAE,MAAiB;QACnD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACtC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAW,KAAK;QACd,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,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;IAED,SAAS,CAAC,MAAiB;QACzB,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;QAE7B,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAE7B,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAChC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,WAAW,aAAX,WAAW,uBAAX,WAAW,EAAI,CAAC,CAAC;QAC7D,CAAC,CAAC;IACJ,CAAC;IAEO,qBAAqB;QAC3B,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE;YACjD,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE;gBAC7C,MAAM,CAAC,KAAK,CAAC,CAAC;YAChB,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,WAAW,GAAG,WAAW,CAAC;QAChD,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AA7CD,gDA6CC"}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { Observable } from './Observable';
|
|
2
|
-
import { OnNext, Unsubscribe, Observable as IObservable } from './types';
|
|
3
|
-
|
|
4
|
-
type Source<T> = {
|
|
5
|
-
source: Observable<T>;
|
|
6
|
-
onNext: OnNext<T>;
|
|
7
|
-
unsubscribe?: Unsubscribe;
|
|
8
|
-
};
|
|
9
|
-
|
|
10
|
-
export class MediatorObservable<T> implements IObservable<T> {
|
|
11
|
-
private subscribers: Set<OnNext<T>> = new Set();
|
|
12
|
-
private currentValue!: T;
|
|
13
|
-
private sources: Source<any>[] = [];
|
|
14
|
-
|
|
15
|
-
constructor(initialValue?: T) {
|
|
16
|
-
this.currentValue = initialValue as T;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
addSource<S>(source: Observable<S>, onNext: OnNext<S>): MediatorObservable<T> {
|
|
20
|
-
this.sources.push({ source, onNext });
|
|
21
|
-
return this;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
public get value(): T {
|
|
25
|
-
return this.currentValue;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
public set value(value: T) {
|
|
29
|
-
this.currentValue = value;
|
|
30
|
-
this.subscribers.forEach((subscriber) => subscriber(value));
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
subscribe(onNext: OnNext<T>): Unsubscribe {
|
|
34
|
-
if (this.subscribers.has(onNext)) {
|
|
35
|
-
throw new Error('Subscriber already subscribed');
|
|
36
|
-
}
|
|
37
|
-
this.subscribers.add(onNext);
|
|
38
|
-
|
|
39
|
-
this.subscribeToAllSources();
|
|
40
|
-
|
|
41
|
-
return () => {
|
|
42
|
-
this.subscribers.delete(onNext);
|
|
43
|
-
this.sources.forEach(({ unsubscribe }) => unsubscribe?.());
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
private subscribeToAllSources() {
|
|
48
|
-
this.sources.forEach(({ source, onNext }, index) => {
|
|
49
|
-
const unsubscribe = source.subscribe((value) => {
|
|
50
|
-
onNext(value);
|
|
51
|
-
});
|
|
52
|
-
this.sources[index].unsubscribe = unsubscribe;
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
}
|