react-obsidian 2.28.0 → 2.30.0-alpha.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 (36) hide show
  1. package/dist/src/decorators/memoize/Memoize.d.ts +6 -0
  2. package/dist/src/decorators/memoize/Memoize.d.ts.map +1 -0
  3. package/dist/src/decorators/memoize/Memoize.js +17 -0
  4. package/dist/src/decorators/memoize/Memoize.js.map +1 -0
  5. package/dist/src/decorators/memoize/areArgsEqual.d.ts +3 -0
  6. package/dist/src/decorators/memoize/areArgsEqual.d.ts.map +1 -0
  7. package/dist/src/decorators/memoize/areArgsEqual.js +15 -0
  8. package/dist/src/decorators/memoize/areArgsEqual.js.map +1 -0
  9. package/dist/src/decorators/memoize/memoize.legacy.d.ts +3 -0
  10. package/dist/src/decorators/memoize/memoize.legacy.d.ts.map +1 -0
  11. package/dist/src/decorators/memoize/memoize.legacy.js +19 -0
  12. package/dist/src/decorators/memoize/memoize.legacy.js.map +1 -0
  13. package/dist/src/decorators/memoize/memoize.modern.d.ts +3 -0
  14. package/dist/src/decorators/memoize/memoize.modern.d.ts.map +1 -0
  15. package/dist/src/decorators/memoize/memoize.modern.js +19 -0
  16. package/dist/src/decorators/memoize/memoize.modern.js.map +1 -0
  17. package/dist/src/index.d.ts +1 -0
  18. package/dist/src/index.d.ts.map +1 -1
  19. package/dist/src/index.js +3 -1
  20. package/dist/src/index.js.map +1 -1
  21. package/dist/src/injectors/class/LateInjector.js +2 -2
  22. package/dist/src/injectors/class/LateInjector.js.map +1 -1
  23. package/dist/src/observable/Observable.js +1 -1
  24. package/dist/src/observable/Observable.js.map +1 -1
  25. package/dist/src/observable/mediator/MediatorObservable.d.ts.map +1 -1
  26. package/dist/src/observable/mediator/MediatorObservable.js +16 -21
  27. package/dist/src/observable/mediator/MediatorObservable.js.map +1 -1
  28. package/package.json +1 -1
  29. package/src/decorators/memoize/Memoize.ts +18 -0
  30. package/src/decorators/memoize/areArgsEqual.ts +15 -0
  31. package/src/decorators/memoize/memoize.legacy.ts +31 -0
  32. package/src/decorators/memoize/memoize.modern.ts +30 -0
  33. package/src/index.ts +1 -0
  34. package/src/injectors/class/LateInjector.ts +1 -1
  35. package/src/observable/Observable.ts +1 -1
  36. package/src/observable/mediator/MediatorObservable.ts +24 -27
@@ -0,0 +1,6 @@
1
+ import { type IsEqualFn } from './areArgsEqual';
2
+ export type MemoizeOptions = {
3
+ isEqual?: IsEqualFn;
4
+ };
5
+ export declare function memoize(options?: MemoizeOptions): any;
6
+ //# sourceMappingURL=Memoize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Memoize.d.ts","sourceRoot":"","sources":["../../../../src/decorators/memoize/Memoize.ts"],"names":[],"mappings":"AAGA,OAAO,EAAgB,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE9D,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB,CAAC;AAEF,wBAAgB,OAAO,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,GAAG,CAQrD"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.memoize = memoize;
4
+ const memoize_modern_1 = require("./memoize.modern");
5
+ const memoize_legacy_1 = require("./memoize.legacy");
6
+ const decorators_1 = require("../../utils/decorators");
7
+ const areArgsEqual_1 = require("./areArgsEqual");
8
+ function memoize(options) {
9
+ var _a;
10
+ const isEqual = (_a = options === null || options === void 0 ? void 0 : options.isEqual) !== null && _a !== void 0 ? _a : areArgsEqual_1.areArgsEqual;
11
+ return (...args) => {
12
+ return (0, decorators_1.shouldUseModernDecorator)(args)
13
+ ? (0, memoize_modern_1.modernDecorator)(args[0], args[1], isEqual)
14
+ : (0, memoize_legacy_1.legacyDecorator)(args[0], args[1], args[2], isEqual);
15
+ };
16
+ }
17
+ //# sourceMappingURL=Memoize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Memoize.js","sourceRoot":"","sources":["../../../../src/decorators/memoize/Memoize.ts"],"names":[],"mappings":";;AASA,0BAQC;AAjBD,qDAAmD;AACnD,qDAAmD;AACnD,uDAAkE;AAClE,iDAA8D;AAM9D,SAAgB,OAAO,CAAC,OAAwB;;IAC9C,MAAM,OAAO,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,OAAO,mCAAI,2BAAY,CAAC;IAEjD,OAAO,CAAC,GAAG,IAAW,EAAE,EAAE;QACxB,OAAO,IAAA,qCAAwB,EAAC,IAAI,CAAC;YACnC,CAAC,CAAC,IAAA,gCAAe,EAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC;YAC5C,CAAC,CAAC,IAAA,gCAAe,EAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAC1D,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ export type IsEqualFn = (newArgs: unknown[], lastArgs: unknown[]) => boolean;
2
+ export declare function areArgsEqual(newArgs: unknown[], lastArgs: unknown[]): boolean;
3
+ //# sourceMappingURL=areArgsEqual.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"areArgsEqual.d.ts","sourceRoot":"","sources":["../../../../src/decorators/memoize/areArgsEqual.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC;AAE7E,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAY7E"}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.areArgsEqual = areArgsEqual;
4
+ function areArgsEqual(newArgs, lastArgs) {
5
+ if (newArgs.length !== lastArgs.length) {
6
+ return false;
7
+ }
8
+ for (let i = 0; i < newArgs.length; i++) {
9
+ if (!Object.is(newArgs[i], lastArgs[i])) {
10
+ return false;
11
+ }
12
+ }
13
+ return true;
14
+ }
15
+ //# sourceMappingURL=areArgsEqual.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"areArgsEqual.js","sourceRoot":"","sources":["../../../../src/decorators/memoize/areArgsEqual.ts"],"names":[],"mappings":";;AAEA,oCAYC;AAZD,SAAgB,YAAY,CAAC,OAAkB,EAAE,QAAmB;IAClE,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAC;QACvC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACxC,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { IsEqualFn } from './areArgsEqual';
2
+ export declare function legacyDecorator(_target: object, propertyKey: string, descriptor: PropertyDescriptor, isEqual: IsEqualFn): PropertyDescriptor;
3
+ //# sourceMappingURL=memoize.legacy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memoize.legacy.d.ts","sourceRoot":"","sources":["../../../../src/decorators/memoize/memoize.legacy.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAOhD,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,kBAAkB,EAC9B,OAAO,EAAE,SAAS,GACjB,kBAAkB,CAiBpB"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.legacyDecorator = legacyDecorator;
4
+ const reflect_1 = require("../../utils/reflect");
5
+ function legacyDecorator(_target, propertyKey, descriptor, isEqual) {
6
+ const originalMethod = descriptor.value;
7
+ const cacheKey = `memoized_${propertyKey}`;
8
+ descriptor.value = function memoizedMethod(...args) {
9
+ const cache = reflect_1.Reflect.getMetadata(cacheKey, this);
10
+ if (cache && isEqual(args, cache.lastArgs)) {
11
+ return cache.lastResult;
12
+ }
13
+ const result = originalMethod.apply(this, args);
14
+ reflect_1.Reflect.defineMetadata(cacheKey, { lastArgs: args, lastResult: result }, this);
15
+ return result;
16
+ };
17
+ return descriptor;
18
+ }
19
+ //# sourceMappingURL=memoize.legacy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memoize.legacy.js","sourceRoot":"","sources":["../../../../src/decorators/memoize/memoize.legacy.ts"],"names":[],"mappings":";;AAQA,0CAsBC;AA9BD,iDAA8C;AAQ9C,SAAgB,eAAe,CAC7B,OAAe,EACf,WAAmB,EACnB,UAA8B,EAC9B,OAAkB;IAElB,MAAM,cAAc,GAAG,UAAU,CAAC,KAAK,CAAC;IACxC,MAAM,QAAQ,GAAG,YAAY,WAAW,EAAE,CAAC;IAE3C,UAAU,CAAC,KAAK,GAAG,SAAS,cAAc,CAAe,GAAG,IAAW;QACrE,MAAM,KAAK,GAAG,iBAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,CAA6B,CAAC;QAE9E,IAAI,KAAK,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3C,OAAO,KAAK,CAAC,UAAU,CAAC;QAC1B,CAAC;QAED,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAChD,iBAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,CAAC;QAC/E,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;IAEF,OAAO,UAAU,CAAC;AACpB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { IsEqualFn } from './areArgsEqual';
2
+ export declare function modernDecorator<This, Args extends any[], Return>(target: (this: This, ...args: Args) => Return, context: ClassMethodDecoratorContext<This, (this: This, ...args: Args) => Return>, isEqual: IsEqualFn): (this: This, ...args: Args) => Return;
3
+ //# sourceMappingURL=memoize.modern.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memoize.modern.d.ts","sourceRoot":"","sources":["../../../../src/decorators/memoize/memoize.modern.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAOhD,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,SAAS,GAAG,EAAE,EAAE,MAAM,EAC9D,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,IAAI,KAAK,MAAM,EAC7C,OAAO,EAAE,2BAA2B,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC,EACjF,OAAO,EAAE,SAAS,GACjB,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,IAAI,KAAK,MAAM,CAiBvC"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.modernDecorator = modernDecorator;
4
+ const reflect_1 = require("../../utils/reflect");
5
+ function modernDecorator(target, context, isEqual) {
6
+ const propertyKey = String(context.name);
7
+ const cacheKey = `memoized_${propertyKey}`;
8
+ function replacementMethod(...args) {
9
+ const cache = reflect_1.Reflect.getMetadata(cacheKey, this);
10
+ if (cache && isEqual(args, cache.lastArgs)) {
11
+ return cache.lastResult;
12
+ }
13
+ const result = target.call(this, ...args);
14
+ reflect_1.Reflect.defineMetadata(cacheKey, { lastArgs: args, lastResult: result }, this);
15
+ return result;
16
+ }
17
+ return replacementMethod;
18
+ }
19
+ //# sourceMappingURL=memoize.modern.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memoize.modern.js","sourceRoot":"","sources":["../../../../src/decorators/memoize/memoize.modern.ts"],"names":[],"mappings":";;AAQA,0CAqBC;AA7BD,iDAA8C;AAQ9C,SAAgB,eAAe,CAC7B,MAA6C,EAC7C,OAAiF,EACjF,OAAkB;IAElB,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,YAAY,WAAW,EAAE,CAAC;IAE3C,SAAS,iBAAiB,CAAa,GAAG,IAAU;QAClD,MAAM,KAAK,GAAG,iBAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,CAA2C,CAAC;QAE5F,IAAI,KAAK,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3C,OAAO,KAAK,CAAC,UAAU,CAAC;QAC1B,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC;QAC1C,iBAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,CAAC;QAC/E,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO,iBAAiB,CAAC;AAC3B,CAAC"}
@@ -16,6 +16,7 @@ export { injectable } from './decorators/injectable/Injectable';
16
16
  export { inject } from './decorators/inject/Inject';
17
17
  export { lateInject } from './decorators/lateInject/LateInject';
18
18
  export { lifecycleBound } from './decorators/LifecycleBound';
19
+ export { memoize } from './decorators/memoize/Memoize';
19
20
  export { GraphMiddleware } from './graph/registry/GraphMiddleware';
20
21
  export { GraphResolveChain as ResolveChain } from './graph/registry/GraphResolveChain';
21
22
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
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.mockModel = exports.testKit = exports.useObservers = exports.useObserver = exports.injectHookWithArguments = exports.injectHook = exports.injectComponent = exports.mockGraphs = exports.Model = exports.MediatorObservable = exports.Observable = exports.Obsidian = exports.LifecycleBound = exports.LateInject = exports.Inject = exports.Injectable = exports.Provides = exports.Singleton = exports.Graph = exports.GraphMiddleware = exports.lifecycleBound = exports.lateInject = exports.inject = exports.injectable = exports.provides = exports.ObjectGraph = exports.singleton = exports.graph = void 0;
20
+ exports.mockModel = exports.testKit = exports.useObservers = exports.useObserver = exports.injectHookWithArguments = exports.injectHook = exports.injectComponent = exports.mockGraphs = exports.Model = exports.MediatorObservable = exports.Observable = exports.Obsidian = exports.LifecycleBound = exports.LateInject = exports.Inject = exports.Injectable = exports.Provides = exports.Singleton = exports.Graph = exports.GraphMiddleware = exports.memoize = exports.lifecycleBound = exports.lateInject = exports.inject = exports.injectable = exports.provides = exports.ObjectGraph = exports.singleton = exports.graph = void 0;
21
21
  const Graph_1 = require("./decorators/Graph");
22
22
  const Inject_1 = require("./decorators/inject/Inject");
23
23
  const Injectable_1 = require("./decorators/injectable/Injectable");
@@ -44,6 +44,8 @@ var LateInject_2 = require("./decorators/lateInject/LateInject");
44
44
  Object.defineProperty(exports, "lateInject", { enumerable: true, get: function () { return LateInject_2.lateInject; } });
45
45
  var LifecycleBound_2 = require("./decorators/LifecycleBound");
46
46
  Object.defineProperty(exports, "lifecycleBound", { enumerable: true, get: function () { return LifecycleBound_2.lifecycleBound; } });
47
+ var Memoize_1 = require("./decorators/memoize/Memoize");
48
+ Object.defineProperty(exports, "memoize", { enumerable: true, get: function () { return Memoize_1.memoize; } });
47
49
  var GraphMiddleware_1 = require("./graph/registry/GraphMiddleware");
48
50
  Object.defineProperty(exports, "GraphMiddleware", { enumerable: true, get: function () { return GraphMiddleware_1.GraphMiddleware; } });
49
51
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,8CAA2C;AAC3C,uDAAoD;AACpD,mEAAgE;AAChE,mEAAgE;AAChE,gEAA6D;AAC7D,6DAA0D;AAC1D,gEAA6D;AAC7D,0DAAmC;AACnC,iEAAuF;AAEvF,0CAAwB;AAExB,4CAA2C;AAAlC,8FAAA,KAAK,OAAA;AACd,8DAA6D;AAApD,sGAAA,SAAS,OAAA;AAClB,mDAAkD;AAAzC,0GAAA,WAAW,OAAA;AAEpB,2DAA0D;AAAjD,oGAAA,QAAQ,OAAA;AACjB,iEAAgE;AAAvD,wGAAA,UAAU,OAAA;AACnB,qDAAoD;AAA3C,gGAAA,MAAM,OAAA;AACf,iEAAgE;AAAvD,wGAAA,UAAU,OAAA;AACnB,8DAA6D;AAApD,gHAAA,cAAc,OAAA;AACvB,oEAAmE;AAA1D,kHAAA,eAAe,OAAA;AAGxB;;GAEG;AACU,QAAA,KAAK,GAAG,aAAK,CAAC;AAC3B;;GAEG;AACU,QAAA,SAAS,GAAG,qBAAS,CAAC;AACnC;;GAEG;AACU,QAAA,QAAQ,GAAG,mBAAQ,CAAC;AACjC;;GAEG;AACU,QAAA,UAAU,GAAG,uBAAU,CAAC;AACrC;;GAEG;AACU,QAAA,MAAM,GAAG,eAAM,CAAC;AAC7B;;GAEG;AACU,QAAA,UAAU,GAAG,uBAAU,CAAC;AACrC;;GAEG;AACU,QAAA,cAAc,GAAG,+BAAc,CAAC;AAEhC,QAAA,QAAQ,GAAG,IAAI,kBAAS,EAAE,CAAC;AAExC,sDAAqD;AAA5C,wGAAA,UAAU,OAAA;AACnB,+EAA8E;AAArE,wHAAA,kBAAkB,OAAA;AAE3B,uCAAsC;AAA7B,8FAAA,KAAK,OAAA;AAEd,oDAAmD;AAA1C,wGAAA,UAAU,OAAA;AAEnB,+EAA+E;AAC/E,iDAAiD;AACjD,+EAA+E;AAC/E,MAAM,cAAc,GAAG,IAAA,oCAAgB,GAAE,CAAC;AAW7B,QAAA,eAAe,GAA+B,cAAc;IACvE,CAAC,CAAC,OAAO,CAAC,wCAAwC,CAAC,CAAC,eAAe;IACnE,CAAC,CAAC,IAAA,4CAAwB,EAAC,iBAAiB,CAAC,CAAC;AAEnC,QAAA,UAAU,GAA0B,cAAc;IAC7D,CAAC,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC,UAAU;IACpD,CAAC,CAAC,IAAA,4CAAwB,EAAC,YAAY,CAAC,CAAC;AAE9B,QAAA,uBAAuB,GAAuC,cAAc;IACzF,CAAC,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC,uBAAuB;IAC/D,CAAC,CAAC,IAAA,4CAAwB,EAAC,yBAAyB,CAAC,CAAC;AAE3C,QAAA,WAAW,GAA2B,cAAc;IAC/D,CAAC,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC,WAAW;IACjD,CAAC,CAAC,IAAA,4CAAwB,EAAC,aAAa,CAAC,CAAC;AAE/B,QAAA,YAAY,GAA4B,cAAc;IACjE,CAAC,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC,YAAY;IACnD,CAAC,CAAC,IAAA,4CAAwB,EAAC,cAAc,CAAC,CAAC;AAEhC,QAAA,OAAO,GAAG,cAAc;IACnC,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,OAAO;IACrC,CAAC,CAAC,IAAA,4CAAwB,EAAC,SAAS,CAAC,CAAC;AAE3B,QAAA,SAAS,GAAyB,cAAc;IAC3D,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,SAAS;IACvC,CAAC,CAAC,IAAA,4CAAwB,EAAC,WAAW,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,8CAA2C;AAC3C,uDAAoD;AACpD,mEAAgE;AAChE,mEAAgE;AAChE,gEAA6D;AAC7D,6DAA0D;AAC1D,gEAA6D;AAC7D,0DAAmC;AACnC,iEAAuF;AAEvF,0CAAwB;AAExB,4CAA2C;AAAlC,8FAAA,KAAK,OAAA;AACd,8DAA6D;AAApD,sGAAA,SAAS,OAAA;AAClB,mDAAkD;AAAzC,0GAAA,WAAW,OAAA;AAEpB,2DAA0D;AAAjD,oGAAA,QAAQ,OAAA;AACjB,iEAAgE;AAAvD,wGAAA,UAAU,OAAA;AACnB,qDAAoD;AAA3C,gGAAA,MAAM,OAAA;AACf,iEAAgE;AAAvD,wGAAA,UAAU,OAAA;AACnB,8DAA6D;AAApD,gHAAA,cAAc,OAAA;AACvB,wDAAuD;AAA9C,kGAAA,OAAO,OAAA;AAChB,oEAAmE;AAA1D,kHAAA,eAAe,OAAA;AAGxB;;GAEG;AACU,QAAA,KAAK,GAAG,aAAK,CAAC;AAC3B;;GAEG;AACU,QAAA,SAAS,GAAG,qBAAS,CAAC;AACnC;;GAEG;AACU,QAAA,QAAQ,GAAG,mBAAQ,CAAC;AACjC;;GAEG;AACU,QAAA,UAAU,GAAG,uBAAU,CAAC;AACrC;;GAEG;AACU,QAAA,MAAM,GAAG,eAAM,CAAC;AAC7B;;GAEG;AACU,QAAA,UAAU,GAAG,uBAAU,CAAC;AACrC;;GAEG;AACU,QAAA,cAAc,GAAG,+BAAc,CAAC;AAEhC,QAAA,QAAQ,GAAG,IAAI,kBAAS,EAAE,CAAC;AAExC,sDAAqD;AAA5C,wGAAA,UAAU,OAAA;AACnB,+EAA8E;AAArE,wHAAA,kBAAkB,OAAA;AAE3B,uCAAsC;AAA7B,8FAAA,KAAK,OAAA;AAEd,oDAAmD;AAA1C,wGAAA,UAAU,OAAA;AAEnB,+EAA+E;AAC/E,iDAAiD;AACjD,+EAA+E;AAC/E,MAAM,cAAc,GAAG,IAAA,oCAAgB,GAAE,CAAC;AAW7B,QAAA,eAAe,GAA+B,cAAc;IACvE,CAAC,CAAC,OAAO,CAAC,wCAAwC,CAAC,CAAC,eAAe;IACnE,CAAC,CAAC,IAAA,4CAAwB,EAAC,iBAAiB,CAAC,CAAC;AAEnC,QAAA,UAAU,GAA0B,cAAc;IAC7D,CAAC,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC,UAAU;IACpD,CAAC,CAAC,IAAA,4CAAwB,EAAC,YAAY,CAAC,CAAC;AAE9B,QAAA,uBAAuB,GAAuC,cAAc;IACzF,CAAC,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC,uBAAuB;IAC/D,CAAC,CAAC,IAAA,4CAAwB,EAAC,yBAAyB,CAAC,CAAC;AAE3C,QAAA,WAAW,GAA2B,cAAc;IAC/D,CAAC,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC,WAAW;IACjD,CAAC,CAAC,IAAA,4CAAwB,EAAC,aAAa,CAAC,CAAC;AAE/B,QAAA,YAAY,GAA4B,cAAc;IACjE,CAAC,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC,YAAY;IACnD,CAAC,CAAC,IAAA,4CAAwB,EAAC,cAAc,CAAC,CAAC;AAEhC,QAAA,OAAO,GAAG,cAAc;IACnC,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,OAAO;IACrC,CAAC,CAAC,IAAA,4CAAwB,EAAC,SAAS,CAAC,CAAC;AAE3B,QAAA,SAAS,GAAyB,cAAc;IAC3D,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,SAAS;IACvC,CAAC,CAAC,IAAA,4CAAwB,EAAC,WAAW,CAAC,CAAC"}
@@ -4,7 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.GRAPH_INSTANCE_NAME_KEY = void 0;
7
- const lodash_1 = require("lodash");
7
+ const isString_1 = require("../../utils/isString");
8
8
  const ObjectGraph_1 = require("../../graph/ObjectGraph");
9
9
  const GraphRegistry_1 = __importDefault(require("../../graph/registry/GraphRegistry"));
10
10
  const InjectionMetadata_1 = __importDefault(require("./InjectionMetadata"));
@@ -24,7 +24,7 @@ class LateInjector {
24
24
  getGraph(target, keyOrGraph) {
25
25
  if (keyOrGraph instanceof ObjectGraph_1.ObjectGraph)
26
26
  return keyOrGraph;
27
- if ((0, lodash_1.isString)(keyOrGraph))
27
+ if ((0, isString_1.isString)(keyOrGraph))
28
28
  return GraphRegistry_1.default.resolve(keyOrGraph, 'classInjection');
29
29
  return this.getGraphInstance(target);
30
30
  }
@@ -1 +1 @@
1
- {"version":3,"file":"LateInjector.js","sourceRoot":"","sources":["../../../../src/injectors/class/LateInjector.ts"],"names":[],"mappings":";;;;;;AAAA,mCAAkC;AAClC,yDAAsD;AACtD,uFAA+D;AAC/D,4EAAoD;AACpD,iDAA4C;AAE/B,QAAA,uBAAuB,GAAG,qBAAqB,CAAC;AAE7D,MAAM,YAAY;IAChB,MAAM,CAAC,MAAS,EAAE,UAAiC;QACjD,IAAI,UAAU;YAAE,uBAAa,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAC3D,MAAM,iBAAiB,GAAG,IAAI,2BAAiB,EAAE,CAAC;QAClD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAChD,iBAAiB,CAAC,yBAAyB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YAC9E,iBAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,QAAQ,CAAC,MAAS,EAAE,UAAiC;QAC3D,IAAI,UAAU,YAAY,yBAAW;YAAE,OAAO,UAAU,CAAC;QACzD,IAAI,IAAA,iBAAQ,EAAC,UAAU,CAAC;YAAE,OAAO,uBAAa,CAAC,OAAO,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;QACrF,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC;IAEO,gBAAgB,CAAC,MAAS;QAChC,MAAM,iBAAiB,GAAG,iBAAO,CAAC,WAAW,CAAC,+BAAuB,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;QAC3F,OAAO,uBAAa,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;IAC3D,CAAC;CACF;AAED,kBAAe,IAAI,YAAY,EAAE,CAAC"}
1
+ {"version":3,"file":"LateInjector.js","sourceRoot":"","sources":["../../../../src/injectors/class/LateInjector.ts"],"names":[],"mappings":";;;;;;AAAA,mDAAgD;AAChD,yDAAsD;AACtD,uFAA+D;AAC/D,4EAAoD;AACpD,iDAA4C;AAE/B,QAAA,uBAAuB,GAAG,qBAAqB,CAAC;AAE7D,MAAM,YAAY;IAChB,MAAM,CAAC,MAAS,EAAE,UAAiC;QACjD,IAAI,UAAU;YAAE,uBAAa,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAC3D,MAAM,iBAAiB,GAAG,IAAI,2BAAiB,EAAE,CAAC;QAClD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAChD,iBAAiB,CAAC,yBAAyB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YAC9E,iBAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,QAAQ,CAAC,MAAS,EAAE,UAAiC;QAC3D,IAAI,UAAU,YAAY,yBAAW;YAAE,OAAO,UAAU,CAAC;QACzD,IAAI,IAAA,mBAAQ,EAAC,UAAU,CAAC;YAAE,OAAO,uBAAa,CAAC,OAAO,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;QACrF,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC;IAEO,gBAAgB,CAAC,MAAS;QAChC,MAAM,iBAAiB,GAAG,iBAAO,CAAC,WAAW,CAAC,+BAAuB,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;QAC3F,OAAO,uBAAa,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;IAC3D,CAAC;CACF;AAED,kBAAe,IAAI,YAAY,EAAE,CAAC"}
@@ -14,7 +14,7 @@ class Observable {
14
14
  this.subscribers.forEach((subscriber) => subscriber(value));
15
15
  }
16
16
  async first() {
17
- if (this.currentValue)
17
+ if (this.currentValue !== undefined)
18
18
  return this.currentValue;
19
19
  return new Promise((resolve) => {
20
20
  const unsubscribe = this.subscribe((value) => {
@@ -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;IAED,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,YAAY;YAAE,OAAO,IAAI,CAAC,YAAY,CAAC;QAChD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE;gBAC3C,WAAW,EAAE,CAAC;gBACd,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,SAAS,CAAC,MAAiB;QAChC,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACnD,CAAC;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,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACjE,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;CACF;AAzCD,gCAyCC"}
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;IAED,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC,YAAY,CAAC;QAC9D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE;gBAC3C,WAAW,EAAE,CAAC;gBACd,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,SAAS,CAAC,MAAiB;QAChC,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACnD,CAAC;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,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACjE,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;CACF;AAzCD,gCAyCC"}
@@ -1 +1 @@
1
- {"version":3,"file":"MediatorObservable.d.ts","sourceRoot":"","sources":["../../../../src/observable/mediator/MediatorObservable.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EACL,MAAM,EACN,WAAW,EACX,WAAW,EACX,MAAM,EACN,UAAU,IAAI,WAAW,EAEzB,WAAW,EACZ,MAAM,UAAU,CAAC;AAElB,qBAAa,kBAAkB,CAAC,CAAC,CAAE,SAAQ,UAAU,CAAC,CAAC,CAAC;IACtD,SAAS,CAAC,MAAM,EAAE,MAAM,SAAS,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAO/F,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAQtD,UAAU,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC3B,OAAO,EAAE,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EACxC,MAAM,EAAE,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAuBzC,UAAU,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC3B,OAAO,EAAE,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EACxC,OAAO,EAAE,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;CAsB9C"}
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,EACL,MAAM,EACN,WAAW,EACX,WAAW,EACX,MAAM,EACN,UAAU,IAAI,WAAW,EAEzB,WAAW,EACZ,MAAM,UAAU,CAAC;AAElB,qBAAa,kBAAkB,CAAC,CAAC,CAAE,SAAQ,UAAU,CAAC,CAAC,CAAC;IACtD,SAAS,CAAC,MAAM,EAAE,MAAM,SAAS,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAO/F,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAQtD,UAAU,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC3B,OAAO,EAAE,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EACxC,MAAM,EAAE,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAsBzC,UAAU,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC3B,OAAO,EAAE,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EACxC,OAAO,EAAE,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;CAqB9C"}
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.MediatorObservable = void 0;
4
- const notNull_1 = require("../../utils/notNull");
5
4
  const Observable_1 = require("../Observable");
6
5
  class MediatorObservable extends Observable_1.Observable {
7
6
  mapSource(source, mapNext) {
@@ -19,42 +18,38 @@ class MediatorObservable extends Observable_1.Observable {
19
18
  }
20
19
  addSources(sources, onNext) {
21
20
  const values = new Array(sources.length);
22
- sources
23
- .filter(notNull_1.notNull)
24
- .forEach((source, index) => {
21
+ const initializedIndices = new Set();
22
+ sources.forEach((source, index) => {
23
+ if (source == null)
24
+ throw new Error(`addSources: source at index ${index} is null or undefined`);
25
25
  this.addSource(source, (next) => {
26
- if (values[index] === next)
26
+ if (initializedIndices.has(index) && values[index] === next)
27
27
  return;
28
- if (values[index] === undefined) {
29
- values[index] = next;
30
- }
31
- else {
32
- values[index] = next;
28
+ values[index] = next;
29
+ initializedIndices.add(index);
30
+ if (initializedIndices.size === sources.length) {
33
31
  onNext(values);
34
32
  }
35
33
  });
36
34
  });
37
- onNext(values);
38
35
  return this;
39
36
  }
40
37
  mapSources(sources, mapNext) {
41
38
  const values = new Array(sources.length);
42
- sources
43
- .filter(notNull_1.notNull)
44
- .forEach((source, index) => {
39
+ const initializedIndices = new Set();
40
+ sources.forEach((source, index) => {
41
+ if (source == null)
42
+ throw new Error(`mapSources: source at index ${index} is null or undefined`);
45
43
  this.addSource(source, (next) => {
46
- if (values[index] === next)
44
+ if (initializedIndices.has(index) && values[index] === next)
47
45
  return;
48
- if (values[index] === undefined) {
49
- values[index] = next;
50
- }
51
- else {
52
- values[index] = next;
46
+ values[index] = next;
47
+ initializedIndices.add(index);
48
+ if (initializedIndices.size === sources.length) {
53
49
  this.value = mapNext(values, this.value);
54
50
  }
55
51
  });
56
52
  });
57
- this.value = mapNext(values, this.value);
58
53
  return this;
59
54
  }
60
55
  }
@@ -1 +1 @@
1
- {"version":3,"file":"MediatorObservable.js","sourceRoot":"","sources":["../../../../src/observable/mediator/MediatorObservable.ts"],"names":[],"mappings":";;;AAAA,iDAA8C;AAC9C,8CAA2C;AAW3C,MAAa,kBAAsB,SAAQ,uBAAa;IACtD,SAAS,CAA2B,MAA0B,EAAE,OAA+B;QAC7F,IAAI,CAAC,SAAS,CAAS,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YACtC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,KAAe,CAAW,CAAC;QAC7D,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAED,SAAS,CAAI,MAAsB,EAAE,MAAiB;QACpD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACzB,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC/B,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,UAAU,CACR,OAAwC,EACxC,MAAuC;QAEvC,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAA6B,CAAC;QAErE,OAAO;aACJ,MAAM,CAAC,iBAAO,CAAC;aACf,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YACzB,IAAI,CAAC,SAAS,CAAC,MAA0B,EAAE,CAAC,IAAI,EAAE,EAAE;gBAClD,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI;oBAAE,OAAO;gBAEnC,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,SAAS,EAAE,CAAC;oBAChC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;gBACvB,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;oBACrB,MAAM,CAAC,MAAM,CAAC,CAAC;gBACjB,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEL,MAAM,CAAC,MAAM,CAAC,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IAED,UAAU,CACR,OAAwC,EACxC,OAA2C;QAE3C,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAA6B,CAAC;QAErE,OAAO;aACJ,MAAM,CAAC,iBAAO,CAAC;aACf,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YACzB,IAAI,CAAC,SAAS,CAAC,MAA0B,EAAE,CAAC,IAAI,EAAE,EAAE;gBAClD,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI;oBAAE,OAAO;gBAEnC,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,SAAS,EAAE,CAAC;oBAChC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;gBACvB,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;oBACrB,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAM,CAAC;gBAChD,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEL,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACzC,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAjED,gDAiEC"}
1
+ {"version":3,"file":"MediatorObservable.js","sourceRoot":"","sources":["../../../../src/observable/mediator/MediatorObservable.ts"],"names":[],"mappings":";;;AAAA,8CAA2C;AAW3C,MAAa,kBAAsB,SAAQ,uBAAa;IACtD,SAAS,CAA2B,MAA0B,EAAE,OAA+B;QAC7F,IAAI,CAAC,SAAS,CAAS,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YACtC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,KAAe,CAAW,CAAC;QAC7D,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAED,SAAS,CAAI,MAAsB,EAAE,MAAiB;QACpD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACzB,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC/B,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,UAAU,CACR,OAAwC,EACxC,MAAuC;QAEvC,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAA6B,CAAC;QACrE,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAU,CAAC;QAE7C,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YAChC,IAAI,MAAM,IAAI,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,KAAK,uBAAuB,CAAC,CAAC;YACjG,IAAI,CAAC,SAAS,CAAC,MAA0B,EAAE,CAAC,IAAI,EAAE,EAAE;gBAClD,IAAI,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI;oBAAE,OAAO;gBAEpE,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;gBACrB,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBAE9B,IAAI,kBAAkB,CAAC,IAAI,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC;oBAC/C,MAAM,CAAC,MAAM,CAAC,CAAC;gBACjB,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC;IACd,CAAC;IAED,UAAU,CACR,OAAwC,EACxC,OAA2C;QAE3C,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAA6B,CAAC;QACrE,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAU,CAAC;QAE7C,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YAChC,IAAI,MAAM,IAAI,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,KAAK,uBAAuB,CAAC,CAAC;YACjG,IAAI,CAAC,SAAS,CAAC,MAA0B,EAAE,CAAC,IAAI,EAAE,EAAE;gBAClD,IAAI,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI;oBAAE,OAAO;gBAEpE,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;gBACrB,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBAE9B,IAAI,kBAAkB,CAAC,IAAI,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC;oBAC/C,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAM,CAAC;gBAChD,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AA/DD,gDA+DC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-obsidian",
3
- "version": "2.28.0",
3
+ "version": "2.30.0-alpha.0",
4
4
  "description": "Dependency injection framework for React and React Native applications",
5
5
  "scripts": {
6
6
  "prepack": "yarn lint && tsc --project tsconfig.prod.json",
@@ -0,0 +1,18 @@
1
+ import { modernDecorator } from './memoize.modern';
2
+ import { legacyDecorator } from './memoize.legacy';
3
+ import { shouldUseModernDecorator } from '../../utils/decorators';
4
+ import { areArgsEqual, type IsEqualFn } from './areArgsEqual';
5
+
6
+ export type MemoizeOptions = {
7
+ isEqual?: IsEqualFn;
8
+ };
9
+
10
+ export function memoize(options?: MemoizeOptions): any {
11
+ const isEqual = options?.isEqual ?? areArgsEqual;
12
+
13
+ return (...args: any[]) => {
14
+ return shouldUseModernDecorator(args)
15
+ ? modernDecorator(args[0], args[1], isEqual)
16
+ : legacyDecorator(args[0], args[1], args[2], isEqual);
17
+ };
18
+ }
@@ -0,0 +1,15 @@
1
+ export type IsEqualFn = (newArgs: unknown[], lastArgs: unknown[]) => boolean;
2
+
3
+ export function areArgsEqual(newArgs: unknown[], lastArgs: unknown[]): boolean {
4
+ if (newArgs.length !== lastArgs.length) {
5
+ return false;
6
+ }
7
+
8
+ for (let i = 0; i < newArgs.length; i++) {
9
+ if (!Object.is(newArgs[i], lastArgs[i])) {
10
+ return false;
11
+ }
12
+ }
13
+
14
+ return true;
15
+ }
@@ -0,0 +1,31 @@
1
+ import { Reflect } from '../../utils/reflect';
2
+ import type { IsEqualFn } from './areArgsEqual';
3
+
4
+ type MemoizeCache = {
5
+ lastArgs: any[];
6
+ lastResult: any;
7
+ };
8
+
9
+ export function legacyDecorator(
10
+ _target: object,
11
+ propertyKey: string,
12
+ descriptor: PropertyDescriptor,
13
+ isEqual: IsEqualFn,
14
+ ): PropertyDescriptor {
15
+ const originalMethod = descriptor.value;
16
+ const cacheKey = `memoized_${propertyKey}`;
17
+
18
+ descriptor.value = function memoizedMethod(this: object, ...args: any[]) {
19
+ const cache = Reflect.getMetadata(cacheKey, this) as MemoizeCache | undefined;
20
+
21
+ if (cache && isEqual(args, cache.lastArgs)) {
22
+ return cache.lastResult;
23
+ }
24
+
25
+ const result = originalMethod.apply(this, args);
26
+ Reflect.defineMetadata(cacheKey, { lastArgs: args, lastResult: result }, this);
27
+ return result;
28
+ };
29
+
30
+ return descriptor;
31
+ }
@@ -0,0 +1,30 @@
1
+ import { Reflect } from '../../utils/reflect';
2
+ import type { IsEqualFn } from './areArgsEqual';
3
+
4
+ type MemoizeCache<Args extends any[], Return> = {
5
+ lastArgs: Args;
6
+ lastResult: Return;
7
+ };
8
+
9
+ export function modernDecorator<This, Args extends any[], Return>(
10
+ target: (this: This, ...args: Args) => Return,
11
+ context: ClassMethodDecoratorContext<This, (this: This, ...args: Args) => Return>,
12
+ isEqual: IsEqualFn,
13
+ ): (this: This, ...args: Args) => Return {
14
+ const propertyKey = String(context.name);
15
+ const cacheKey = `memoized_${propertyKey}`;
16
+
17
+ function replacementMethod(this: This, ...args: Args): Return {
18
+ const cache = Reflect.getMetadata(cacheKey, this) as MemoizeCache<Args, Return> | undefined;
19
+
20
+ if (cache && isEqual(args, cache.lastArgs)) {
21
+ return cache.lastResult;
22
+ }
23
+
24
+ const result = target.call(this, ...args);
25
+ Reflect.defineMetadata(cacheKey, { lastArgs: args, lastResult: result }, this);
26
+ return result;
27
+ }
28
+
29
+ return replacementMethod;
30
+ }
package/src/index.ts CHANGED
@@ -19,6 +19,7 @@ export { injectable } from './decorators/injectable/Injectable';
19
19
  export { inject } from './decorators/inject/Inject';
20
20
  export { lateInject } from './decorators/lateInject/LateInject';
21
21
  export { lifecycleBound } from './decorators/LifecycleBound';
22
+ export { memoize } from './decorators/memoize/Memoize';
22
23
  export { GraphMiddleware } from './graph/registry/GraphMiddleware';
23
24
  export { GraphResolveChain as ResolveChain } from './graph/registry/GraphResolveChain';
24
25
 
@@ -1,4 +1,4 @@
1
- import { isString } from 'lodash';
1
+ import { isString } from '../../utils/isString';
2
2
  import { ObjectGraph } from '../../graph/ObjectGraph';
3
3
  import graphRegistry from '../../graph/registry/GraphRegistry';
4
4
  import InjectionMetadata from './InjectionMetadata';
@@ -18,7 +18,7 @@ export class Observable<T> implements IObservable<T> {
18
18
  }
19
19
 
20
20
  async first(): Promise<T> {
21
- if (this.currentValue) return this.currentValue;
21
+ if (this.currentValue !== undefined) return this.currentValue;
22
22
  return new Promise((resolve) => {
23
23
  const unsubscribe = this.subscribe((value) => {
24
24
  unsubscribe();
@@ -1,4 +1,3 @@
1
- import { notNull } from '../../utils/notNull';
2
1
  import { Observable } from '../Observable';
3
2
  import {
4
3
  Mapper,
@@ -31,23 +30,22 @@ export class MediatorObservable<T> extends Observable<T> {
31
30
  onNext: OnMultiNext<S1, S2, S3, S4, S5>,
32
31
  ) {
33
32
  const values = new Array(sources.length) as Args<S1, S2, S3, S4, S5>;
33
+ const initializedIndices = new Set<number>();
34
34
 
35
- sources
36
- .filter(notNull)
37
- .forEach((source, index) => {
38
- this.addSource(source as IObservable<any>, (next) => {
39
- if (values[index] === next) return;
35
+ sources.forEach((source, index) => {
36
+ if (source == null) throw new Error(`addSources: source at index ${index} is null or undefined`);
37
+ this.addSource(source as IObservable<any>, (next) => {
38
+ if (initializedIndices.has(index) && values[index] === next) return;
40
39
 
41
- if (values[index] === undefined) {
42
- values[index] = next;
43
- } else {
44
- values[index] = next;
45
- onNext(values);
46
- }
47
- });
40
+ values[index] = next;
41
+ initializedIndices.add(index);
42
+
43
+ if (initializedIndices.size === sources.length) {
44
+ onNext(values);
45
+ }
48
46
  });
47
+ });
49
48
 
50
- onNext(values);
51
49
  return this;
52
50
  }
53
51
 
@@ -56,23 +54,22 @@ export class MediatorObservable<T> extends Observable<T> {
56
54
  mapNext: MultiMapper<T, S1, S2, S3, S4, S5>,
57
55
  ) {
58
56
  const values = new Array(sources.length) as Args<S1, S2, S3, S4, S5>;
57
+ const initializedIndices = new Set<number>();
59
58
 
60
- sources
61
- .filter(notNull)
62
- .forEach((source, index) => {
63
- this.addSource(source as IObservable<any>, (next) => {
64
- if (values[index] === next) return;
59
+ sources.forEach((source, index) => {
60
+ if (source == null) throw new Error(`mapSources: source at index ${index} is null or undefined`);
61
+ this.addSource(source as IObservable<any>, (next) => {
62
+ if (initializedIndices.has(index) && values[index] === next) return;
65
63
 
66
- if (values[index] === undefined) {
67
- values[index] = next;
68
- } else {
69
- values[index] = next;
70
- this.value = mapNext(values, this.value) as T;
71
- }
72
- });
64
+ values[index] = next;
65
+ initializedIndices.add(index);
66
+
67
+ if (initializedIndices.size === sources.length) {
68
+ this.value = mapNext(values, this.value) as T;
69
+ }
73
70
  });
71
+ });
74
72
 
75
- this.value = mapNext(values, this.value);
76
73
  return this;
77
74
  }
78
75
  }