react-obsidian 2.28.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.
- package/dist/src/decorators/memoize/Memoize.d.ts +6 -0
- package/dist/src/decorators/memoize/Memoize.d.ts.map +1 -0
- package/dist/src/decorators/memoize/Memoize.js +17 -0
- package/dist/src/decorators/memoize/Memoize.js.map +1 -0
- package/dist/src/decorators/memoize/areArgsEqual.d.ts +3 -0
- package/dist/src/decorators/memoize/areArgsEqual.d.ts.map +1 -0
- package/dist/src/decorators/memoize/areArgsEqual.js +15 -0
- package/dist/src/decorators/memoize/areArgsEqual.js.map +1 -0
- package/dist/src/decorators/memoize/memoize.legacy.d.ts +3 -0
- package/dist/src/decorators/memoize/memoize.legacy.d.ts.map +1 -0
- package/dist/src/decorators/memoize/memoize.legacy.js +19 -0
- package/dist/src/decorators/memoize/memoize.legacy.js.map +1 -0
- package/dist/src/decorators/memoize/memoize.modern.d.ts +3 -0
- package/dist/src/decorators/memoize/memoize.modern.d.ts.map +1 -0
- package/dist/src/decorators/memoize/memoize.modern.js +19 -0
- package/dist/src/decorators/memoize/memoize.modern.js.map +1 -0
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +3 -1
- package/dist/src/index.js.map +1 -1
- package/package.json +1 -1
- package/src/decorators/memoize/Memoize.ts +18 -0
- package/src/decorators/memoize/areArgsEqual.ts +15 -0
- package/src/decorators/memoize/memoize.legacy.ts +31 -0
- package/src/decorators/memoize/memoize.modern.ts +30 -0
- package/src/index.ts +1 -0
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -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
|
/**
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -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
|
/**
|
package/dist/src/index.js.map
CHANGED
|
@@ -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
|
@@ -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
|
|