react-obsidian 0.0.9 → 0.0.10

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 (28) hide show
  1. package/dist/src/decorators/provides/MemoizeDescriptor.d.ts +2 -0
  2. package/dist/src/decorators/provides/MemoizeDescriptor.d.ts.map +1 -0
  3. package/dist/src/decorators/provides/MemoizeDescriptor.js +23 -0
  4. package/dist/src/decorators/provides/MemoizeDescriptor.js.map +1 -0
  5. package/dist/src/decorators/provides/Provides.js +2 -2
  6. package/dist/src/decorators/provides/Provides.js.map +1 -1
  7. package/dist/src/graph/ObjectGraph.d.ts +2 -2
  8. package/dist/src/graph/ObjectGraph.d.ts.map +1 -1
  9. package/dist/src/graph/ObjectGraph.js +4 -3
  10. package/dist/src/graph/ObjectGraph.js.map +1 -1
  11. package/dist/src/graph/autobind.d.ts +2 -0
  12. package/dist/src/graph/autobind.d.ts.map +1 -0
  13. package/dist/src/graph/autobind.js +12 -0
  14. package/dist/src/graph/autobind.js.map +1 -0
  15. package/dist/test/integration/fixtures/Subgraph.d.ts +1 -0
  16. package/dist/test/integration/fixtures/Subgraph.d.ts.map +1 -1
  17. package/dist/test/integration/fixtures/Subgraph.js +11 -1
  18. package/dist/test/integration/fixtures/Subgraph.js.map +1 -1
  19. package/package.json +1 -1
  20. package/src/decorators/provides/MemoizeDescriptor.ts +14 -0
  21. package/src/decorators/provides/Provides.ts +2 -2
  22. package/src/graph/ObjectGraph.ts +4 -2
  23. package/src/graph/autobind.ts +7 -0
  24. package/dist/src/decorators/provides/PropertyDescriptorToSingleton.d.ts +0 -2
  25. package/dist/src/decorators/provides/PropertyDescriptorToSingleton.d.ts.map +0 -1
  26. package/dist/src/decorators/provides/PropertyDescriptorToSingleton.js +0 -20
  27. package/dist/src/decorators/provides/PropertyDescriptorToSingleton.js.map +0 -1
  28. package/src/decorators/provides/PropertyDescriptorToSingleton.ts +0 -11
@@ -0,0 +1,2 @@
1
+ export declare function memoizeDescriptor(propertyKey: string, descriptor: PropertyDescriptor): PropertyDescriptor;
2
+ //# sourceMappingURL=MemoizeDescriptor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MemoizeDescriptor.d.ts","sourceRoot":"","sources":["../../../../src/decorators/provides/MemoizeDescriptor.ts"],"names":[],"mappings":"AACA,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,kBAAkB,GAAG,kBAAkB,CAYzG"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.memoizeDescriptor = void 0;
4
+ /* eslint-disable no-param-reassign */
5
+ function memoizeDescriptor(propertyKey, descriptor) {
6
+ var originalValue = descriptor.value;
7
+ descriptor.value = function value() {
8
+ var args = [];
9
+ for (var _i = 0; _i < arguments.length; _i++) {
10
+ args[_i] = arguments[_i];
11
+ }
12
+ var key = "memoized".concat(propertyKey);
13
+ if (Reflect.hasMetadata(key, this)) {
14
+ return Reflect.getMetadata(key, this);
15
+ }
16
+ var result = originalValue.apply(this, args);
17
+ Reflect.defineMetadata(key, result, this);
18
+ return result;
19
+ };
20
+ return descriptor;
21
+ }
22
+ exports.memoizeDescriptor = memoizeDescriptor;
23
+ //# sourceMappingURL=MemoizeDescriptor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MemoizeDescriptor.js","sourceRoot":"","sources":["../../../../src/decorators/provides/MemoizeDescriptor.ts"],"names":[],"mappings":";;;AAAA,sCAAsC;AACtC,SAAgB,iBAAiB,CAAC,WAAmB,EAAE,UAA8B;IACnF,IAAM,aAAa,GAAG,UAAU,CAAC,KAAK,CAAC;IACvC,UAAU,CAAC,KAAK,GAAG,SAAS,KAAK;QAAC,cAAc;aAAd,UAAc,EAAd,qBAAc,EAAd,IAAc;YAAd,yBAAc;;QAC9C,IAAM,GAAG,GAAG,kBAAW,WAAW,CAAE,CAAC;QACrC,IAAI,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE;YAClC,OAAO,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;SACvC;QACD,IAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC/C,OAAO,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAC1C,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;IACF,OAAO,UAAU,CAAC;AACpB,CAAC;AAZD,8CAYC"}
@@ -5,12 +5,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.Provides = void 0;
7
7
  var ProvidedPropertiesStore_1 = __importDefault(require("../../ProvidedPropertiesStore"));
8
- var PropertyDescriptorToSingleton_1 = __importDefault(require("./PropertyDescriptorToSingleton"));
8
+ var MemoizeDescriptor_1 = require("./MemoizeDescriptor");
9
9
  function Provides(_a) {
10
10
  var _b = _a === void 0 ? {} : _a, name = _b.name;
11
11
  return function provide(graph, propertyKey, descriptor) {
12
12
  ProvidedPropertiesStore_1.default.set(graph, propertyKey, name);
13
- return (0, PropertyDescriptorToSingleton_1.default)(descriptor);
13
+ return (0, MemoizeDescriptor_1.memoizeDescriptor)(propertyKey, descriptor);
14
14
  };
15
15
  }
16
16
  exports.Provides = Provides;
@@ -1 +1 @@
1
- {"version":3,"file":"Provides.js","sourceRoot":"","sources":["../../../../src/decorators/provides/Provides.ts"],"names":[],"mappings":";;;;;;AAEA,0FAAoE;AACpE,kGAA4D;AAO5D,SAAgB,QAAQ,CAAC,EAAsC;QAAtC,qBAAoC,EAAE,KAAA,EAApC,IAAI,UAAA;IAC7B,OAAO,SAAS,OAAO,CAAC,KAAY,EAAE,WAAmB,EAAE,UAA8B;QACvF,iCAAuB,CAAC,GAAG,CAAC,KAAK,EAAE,WAAW,EAAE,IAAK,CAAC,CAAC;QACvD,OAAO,IAAA,uCAAa,EAAC,UAAU,CAAC,CAAC;IACnC,CAAC,CAAC;AACJ,CAAC;AALD,4BAKC"}
1
+ {"version":3,"file":"Provides.js","sourceRoot":"","sources":["../../../../src/decorators/provides/Provides.ts"],"names":[],"mappings":";;;;;;AAEA,0FAAoE;AACpE,yDAAwD;AAOxD,SAAgB,QAAQ,CAAC,EAAsC;QAAtC,qBAAoC,EAAE,KAAA,EAApC,IAAI,UAAA;IAC7B,OAAO,SAAS,OAAO,CAAC,KAAY,EAAE,WAAmB,EAAE,UAA8B;QACvF,iCAAuB,CAAC,GAAG,CAAC,KAAK,EAAE,WAAW,EAAE,IAAK,CAAC,CAAC;QACvD,OAAO,IAAA,qCAAiB,EAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IACpD,CAAC,CAAC;AACJ,CAAC;AALD,4BAKC"}
@@ -1,11 +1,11 @@
1
1
  import { Scope } from '../types';
2
2
  import { Graph } from './Graph';
3
3
  export declare abstract class ObjectGraph<T = unknown> implements Graph {
4
- protected props?: T | undefined;
4
+ protected _props?: T | undefined;
5
5
  scope: Scope;
6
6
  private propertyRetriever;
7
7
  get name(): string;
8
- constructor(props?: T | undefined);
8
+ constructor(_props?: T | undefined);
9
9
  retrieve<Dependency>(property: string, receiver?: unknown): Dependency | undefined;
10
10
  }
11
11
  //# sourceMappingURL=ObjectGraph.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ObjectGraph.d.ts","sourceRoot":"","sources":["../../../src/graph/ObjectGraph.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAGhC,8BAAsB,WAAW,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,KAAK;IAWjD,SAAS,CAAC,KAAK,CAAC;IATrB,KAAK,EAAG,KAAK,CAAC;IACrB,OAAO,CAAC,iBAAiB,CAA+B;IAExD,IACI,IAAI,IAAI,MAAM,CAEjB;gBAGqB,KAAK,CAAC,eAAG;IAE/B,QAAQ,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,SAAS;CAGnF"}
1
+ {"version":3,"file":"ObjectGraph.d.ts","sourceRoot":"","sources":["../../../src/graph/ObjectGraph.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEjC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAGhC,8BAAsB,WAAW,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,KAAK;IAUjD,SAAS,CAAC,MAAM,CAAC;IARtB,KAAK,EAAG,KAAK,CAAC;IACrB,OAAO,CAAC,iBAAiB,CAA+B;IAExD,IACI,IAAI,IAAI,MAAM,CAEjB;gBAEqB,MAAM,CAAC,eAAG;IAIhC,QAAQ,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,SAAS;CAGnF"}
@@ -15,12 +15,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.ObjectGraph = void 0;
16
16
  var lodash_1 = require("lodash");
17
17
  var Memoize_1 = __importDefault(require("../decorators/Memoize"));
18
+ var autobind_1 = require("./autobind");
18
19
  var PropertyRetriever_1 = __importDefault(require("./PropertyRetriever"));
19
20
  var ObjectGraph = /** @class */ (function () {
20
- // eslint-disable-next-line no-useless-constructor, no-unused-vars, no-empty-function
21
- function ObjectGraph(props) {
22
- this.props = props;
21
+ function ObjectGraph(_props) {
22
+ this._props = _props;
23
23
  this.propertyRetriever = new PropertyRetriever_1.default(this);
24
+ (0, autobind_1.autobind)(this);
24
25
  }
25
26
  Object.defineProperty(ObjectGraph.prototype, "name", {
26
27
  get: function () {
@@ -1 +1 @@
1
- {"version":3,"file":"ObjectGraph.js","sourceRoot":"","sources":["../../../src/graph/ObjectGraph.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,iCAAkC;AAClC,kEAA4C;AAG5C,0EAAoD;AAEpD;IAUE,qFAAqF;IACrF,qBAAsB,KAAS;QAAT,UAAK,GAAL,KAAK,CAAI;QARvB,sBAAiB,GAAG,IAAI,2BAAiB,CAAC,IAAI,CAAC,CAAC;IAQtB,CAAC;IALnC,sBAAI,6BAAI;aAAR;YACE,OAAO,IAAA,iBAAQ,EAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACzC,CAAC;;;OAAA;IAKD,8BAAQ,GAAR,UAAqB,QAAgB,EAAE,QAAkB;QACvD,OAAO,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAA2B,CAAC;IACvF,CAAC;IATD;QADC,IAAA,iBAAO,GAAE;;;2CAGT;IAQH,kBAAC;CAAA,AAhBD,IAgBC;AAhBqB,kCAAW"}
1
+ {"version":3,"file":"ObjectGraph.js","sourceRoot":"","sources":["../../../src/graph/ObjectGraph.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,iCAAkC;AAClC,kEAA4C;AAE5C,uCAAsC;AAEtC,0EAAoD;AAEpD;IAUE,qBAAsB,MAAU;QAAV,WAAM,GAAN,MAAM,CAAI;QAPxB,sBAAiB,GAAG,IAAI,2BAAiB,CAAC,IAAI,CAAC,CAAC;QAQtD,IAAA,mBAAQ,EAAC,IAAI,CAAC,CAAC;IACjB,CAAC;IAND,sBAAI,6BAAI;aAAR;YACE,OAAO,IAAA,iBAAQ,EAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACzC,CAAC;;;OAAA;IAMD,8BAAQ,GAAR,UAAqB,QAAgB,EAAE,QAAkB;QACvD,OAAO,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAA2B,CAAC;IACvF,CAAC;IAVD;QADC,IAAA,iBAAO,GAAE;;;2CAGT;IASH,kBAAC;CAAA,AAjBD,IAiBC;AAjBqB,kCAAW"}
@@ -0,0 +1,2 @@
1
+ export declare function autobind(target: Record<string, any>): void;
2
+ //# sourceMappingURL=autobind.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autobind.d.ts","sourceRoot":"","sources":["../../../src/graph/autobind.ts"],"names":[],"mappings":"AACA,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAKnD"}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.autobind = void 0;
4
+ /* eslint-disable no-param-reassign */
5
+ function autobind(target) {
6
+ var methods = Object.getOwnPropertyNames(Object.getPrototypeOf(target));
7
+ methods
8
+ .filter(function (method) { return (method !== 'constructor'); })
9
+ .forEach(function (method) { target[method] = target[method].bind(target); });
10
+ }
11
+ exports.autobind = autobind;
12
+ //# sourceMappingURL=autobind.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autobind.js","sourceRoot":"","sources":["../../../src/graph/autobind.ts"],"names":[],"mappings":";;;AAAA,sCAAsC;AACtC,SAAgB,QAAQ,CAAC,MAA2B;IAClD,IAAM,OAAO,GAAG,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1E,OAAO;SACJ,MAAM,CAAC,UAAC,MAAM,IAAK,OAAA,CAAC,MAAM,KAAK,aAAa,CAAC,EAA1B,CAA0B,CAAC;SAC9C,OAAO,CAAC,UAAC,MAAM,IAAO,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5E,CAAC;AALD,4BAKC"}
@@ -4,5 +4,6 @@ export default class Subgraph extends ObjectGraph {
4
4
  stringProvider(): StringProvider;
5
5
  stringFromSubgraph(): string;
6
6
  unusedDependency(): string;
7
+ instanceId(): string;
7
8
  }
8
9
  //# sourceMappingURL=Subgraph.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Subgraph.d.ts","sourceRoot":"","sources":["../../../../test/integration/fixtures/Subgraph.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,WAAW,EAAY,MAAM,cAAc,CAAC;AAE5D,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAG9C,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,WAAW;IAE/C,cAAc,IAAI,cAAc;IAKhC,kBAAkB,IAAI,MAAM;IAK5B,gBAAgB,IAAI,MAAM;CAG3B"}
1
+ {"version":3,"file":"Subgraph.d.ts","sourceRoot":"","sources":["../../../../test/integration/fixtures/Subgraph.ts"],"names":[],"mappings":"AACA,OAAO,EAAS,WAAW,EAAY,MAAM,cAAc,CAAC;AAE5D,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAG9C,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,WAAW;IAE/C,cAAc,IAAI,cAAc;IAKhC,kBAAkB,IAAI,MAAM;IAK5B,gBAAgB,IAAI,MAAM;IAK1B,UAAU,IAAI,MAAM;CAGrB"}
@@ -27,6 +27,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
27
27
  return (mod && mod.__esModule) ? mod : { "default": mod };
28
28
  };
29
29
  Object.defineProperty(exports, "__esModule", { value: true });
30
+ var lodash_1 = require("lodash");
30
31
  var src_1 = require("../../../src");
31
32
  var injectedValues_1 = __importDefault(require("./injectedValues"));
32
33
  var StringProvider_1 = __importDefault(require("./StringProvider"));
@@ -42,7 +43,10 @@ var Subgraph = /** @class */ (function (_super) {
42
43
  return injectedValues_1.default.fromSubgraph;
43
44
  };
44
45
  Subgraph.prototype.unusedDependency = function () {
45
- throw Error('This dependency should not have been resolved since it not required by anyone.');
46
+ throw Error('This dependency should not have been resolved since it is not required by anyone.');
47
+ };
48
+ Subgraph.prototype.instanceId = function () {
49
+ return (0, lodash_1.uniqueId)('graph');
46
50
  };
47
51
  __decorate([
48
52
  (0, src_1.Provides)(),
@@ -62,6 +66,12 @@ var Subgraph = /** @class */ (function (_super) {
62
66
  __metadata("design:paramtypes", []),
63
67
  __metadata("design:returntype", String)
64
68
  ], Subgraph.prototype, "unusedDependency", null);
69
+ __decorate([
70
+ (0, src_1.Provides)(),
71
+ __metadata("design:type", Function),
72
+ __metadata("design:paramtypes", []),
73
+ __metadata("design:returntype", String)
74
+ ], Subgraph.prototype, "instanceId", null);
65
75
  Subgraph = __decorate([
66
76
  (0, src_1.Graph)()
67
77
  ], Subgraph);
@@ -1 +1 @@
1
- {"version":3,"file":"Subgraph.js","sourceRoot":"","sources":["../../../../test/integration/fixtures/Subgraph.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,oCAA4D;AAC5D,oEAA8C;AAC9C,oEAA8C;AAG9C;IAAsC,4BAAW;IAAjD;;IAeA,CAAC;IAbC,iCAAc,GAAd;QACE,OAAO,IAAI,wBAAc,EAAE,CAAC;IAC9B,CAAC;IAGD,qCAAkB,GAAlB;QACE,OAAO,wBAAc,CAAC,YAAY,CAAC;IACrC,CAAC;IAGD,mCAAgB,GAAhB;QACE,MAAM,KAAK,CAAC,gFAAgF,CAAC,CAAC;IAChG,CAAC;IAZD;QADC,IAAA,cAAQ,GAAE;;;wCACO,wBAAc;kDAE/B;IAGD;QADC,IAAA,cAAQ,GAAE;;;;sDAGV;IAGD;QADC,IAAA,cAAQ,GAAE;;;;oDAGV;IAdkB,QAAQ;QAD5B,IAAA,WAAK,GAAE;OACa,QAAQ,CAe5B;IAAD,eAAC;CAAA,AAfD,CAAsC,iBAAW,GAehD;kBAfoB,QAAQ"}
1
+ {"version":3,"file":"Subgraph.js","sourceRoot":"","sources":["../../../../test/integration/fixtures/Subgraph.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iCAAkC;AAClC,oCAA4D;AAC5D,oEAA8C;AAC9C,oEAA8C;AAG9C;IAAsC,4BAAW;IAAjD;;IAoBA,CAAC;IAlBC,iCAAc,GAAd;QACE,OAAO,IAAI,wBAAc,EAAE,CAAC;IAC9B,CAAC;IAGD,qCAAkB,GAAlB;QACE,OAAO,wBAAc,CAAC,YAAY,CAAC;IACrC,CAAC;IAGD,mCAAgB,GAAhB;QACE,MAAM,KAAK,CAAC,mFAAmF,CAAC,CAAC;IACnG,CAAC;IAGD,6BAAU,GAAV;QACE,OAAO,IAAA,iBAAQ,EAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IAjBD;QADC,IAAA,cAAQ,GAAE;;;wCACO,wBAAc;kDAE/B;IAGD;QADC,IAAA,cAAQ,GAAE;;;;sDAGV;IAGD;QADC,IAAA,cAAQ,GAAE;;;;oDAGV;IAGD;QADC,IAAA,cAAQ,GAAE;;;;8CAGV;IAnBkB,QAAQ;QAD5B,IAAA,WAAK,GAAE;OACa,QAAQ,CAoB5B;IAAD,eAAC;CAAA,AApBD,CAAsC,iBAAW,GAoBhD;kBApBoB,QAAQ"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-obsidian",
3
- "version": "0.0.9",
3
+ "version": "0.0.10",
4
4
  "description": "Dependency injection framework for React and React Native applications",
5
5
  "main": "src/index.ts",
6
6
  "directories": {
@@ -0,0 +1,14 @@
1
+ /* eslint-disable no-param-reassign */
2
+ export function memoizeDescriptor(propertyKey: string, descriptor: PropertyDescriptor): PropertyDescriptor {
3
+ const originalValue = descriptor.value;
4
+ descriptor.value = function value(...args: any[]) {
5
+ const key = `memoized${propertyKey}`;
6
+ if (Reflect.hasMetadata(key, this)) {
7
+ return Reflect.getMetadata(key, this);
8
+ }
9
+ const result = originalValue.apply(this, args);
10
+ Reflect.defineMetadata(key, result, this);
11
+ return result;
12
+ };
13
+ return descriptor;
14
+ }
@@ -1,7 +1,7 @@
1
1
  import { Scope } from '../../types';
2
2
  import { Graph } from '../../graph/Graph';
3
3
  import providedPropertiesStore from '../../ProvidedPropertiesStore';
4
- import makeSingleton from './PropertyDescriptorToSingleton';
4
+ import { memoizeDescriptor } from './MemoizeDescriptor';
5
5
 
6
6
  interface ProvidesParams {
7
7
  scope?: Scope;
@@ -11,6 +11,6 @@ interface ProvidesParams {
11
11
  export function Provides({ name }: Partial<ProvidesParams> = {}) {
12
12
  return function provide(graph: Graph, propertyKey: string, descriptor: PropertyDescriptor) {
13
13
  providedPropertiesStore.set(graph, propertyKey, name!);
14
- return makeSingleton(descriptor);
14
+ return memoizeDescriptor(propertyKey, descriptor);
15
15
  };
16
16
  }
@@ -1,6 +1,7 @@
1
1
  import { uniqueId } from 'lodash';
2
2
  import Memoize from '../decorators/Memoize';
3
3
  import { Scope } from '../types';
4
+ import { autobind } from './autobind';
4
5
  import { Graph } from './Graph';
5
6
  import PropertyRetriever from './PropertyRetriever';
6
7
 
@@ -14,8 +15,9 @@ export abstract class ObjectGraph<T = unknown> implements Graph {
14
15
  return uniqueId(this.constructor.name);
15
16
  }
16
17
 
17
- // eslint-disable-next-line no-useless-constructor, no-unused-vars, no-empty-function
18
- constructor(protected props?: T) {}
18
+ constructor(protected _props?: T) {
19
+ autobind(this);
20
+ }
19
21
 
20
22
  retrieve<Dependency>(property: string, receiver?: unknown): Dependency | undefined {
21
23
  return this.propertyRetriever.retrieve(property, receiver) as Dependency | undefined;
@@ -0,0 +1,7 @@
1
+ /* eslint-disable no-param-reassign */
2
+ export function autobind(target: Record<string, any>) {
3
+ const methods = Object.getOwnPropertyNames(Object.getPrototypeOf(target));
4
+ methods
5
+ .filter((method) => (method !== 'constructor'))
6
+ .forEach((method) => { target[method] = target[method].bind(target); });
7
+ }
@@ -1,2 +0,0 @@
1
- export default function makeSingleton(descriptor: PropertyDescriptor): PropertyDescriptor;
2
- //# sourceMappingURL=PropertyDescriptorToSingleton.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PropertyDescriptorToSingleton.d.ts","sourceRoot":"","sources":["../../../../src/decorators/provides/PropertyDescriptorToSingleton.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,UAAU,EAAE,kBAAkB,GAAG,kBAAkB,CASxF"}
@@ -1,20 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- /* eslint-disable no-param-reassign */
4
- function makeSingleton(descriptor) {
5
- var originalValue = descriptor.value;
6
- var createdDependency;
7
- descriptor.value = function value() {
8
- var args = [];
9
- for (var _i = 0; _i < arguments.length; _i++) {
10
- args[_i] = arguments[_i];
11
- }
12
- if (createdDependency)
13
- return createdDependency;
14
- createdDependency = originalValue.apply(this, args);
15
- return createdDependency;
16
- };
17
- return descriptor;
18
- }
19
- exports.default = makeSingleton;
20
- //# sourceMappingURL=PropertyDescriptorToSingleton.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PropertyDescriptorToSingleton.js","sourceRoot":"","sources":["../../../../src/decorators/provides/PropertyDescriptorToSingleton.ts"],"names":[],"mappings":";;AAAA,sCAAsC;AACtC,SAAwB,aAAa,CAAC,UAA8B;IAClE,IAAM,aAAa,GAAG,UAAU,CAAC,KAAK,CAAC;IACvC,IAAI,iBAAsB,CAAC;IAC3B,UAAU,CAAC,KAAK,GAAG,SAAS,KAAK;QAAC,cAAc;aAAd,UAAc,EAAd,qBAAc,EAAd,IAAc;YAAd,yBAAc;;QAC9C,IAAI,iBAAiB;YAAE,OAAO,iBAAiB,CAAC;QAChD,iBAAiB,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACpD,OAAO,iBAAiB,CAAC;IAC3B,CAAC,CAAC;IACF,OAAO,UAAU,CAAC;AACpB,CAAC;AATD,gCASC"}
@@ -1,11 +0,0 @@
1
- /* eslint-disable no-param-reassign */
2
- export default function makeSingleton(descriptor: PropertyDescriptor): PropertyDescriptor {
3
- const originalValue = descriptor.value;
4
- let createdDependency: any;
5
- descriptor.value = function value(...args: any[]) {
6
- if (createdDependency) return createdDependency;
7
- createdDependency = originalValue.apply(this, args);
8
- return createdDependency;
9
- };
10
- return descriptor;
11
- }