react-obsidian 2.27.0 → 2.29.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.
@@ -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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-obsidian",
3
- "version": "2.27.0",
3
+ "version": "2.29.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