react-obsidian 0.0.19 → 0.0.22

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 (34) hide show
  1. package/README.md +16 -2
  2. package/{resetGraphs.ts → clearGraphs.ts} +0 -0
  3. package/dist/clearGraphs.d.ts +2 -0
  4. package/dist/clearGraphs.d.ts.map +1 -0
  5. package/dist/{resetGraphs.js → clearGraphs.js} +1 -1
  6. package/dist/clearGraphs.js.map +1 -0
  7. package/dist/src/Obsidian.d.ts.map +1 -1
  8. package/dist/src/Obsidian.js +2 -1
  9. package/dist/src/Obsidian.js.map +1 -1
  10. package/dist/src/decorators/Singleton.d.ts +1 -1
  11. package/dist/src/decorators/Singleton.d.ts.map +1 -1
  12. package/dist/src/decorators/inject/Inject.d.ts +1 -1
  13. package/dist/src/decorators/inject/Inject.d.ts.map +1 -1
  14. package/dist/src/graph/ServiceLocatorFactory.d.ts +6 -0
  15. package/dist/src/graph/ServiceLocatorFactory.d.ts.map +1 -0
  16. package/dist/src/graph/ServiceLocatorFactory.js +22 -0
  17. package/dist/src/graph/ServiceLocatorFactory.js.map +1 -0
  18. package/dist/src/graph/registry/GraphRegistry.d.ts +1 -0
  19. package/dist/src/graph/registry/GraphRegistry.d.ts.map +1 -1
  20. package/dist/src/graph/registry/GraphRegistry.js +5 -0
  21. package/dist/src/graph/registry/GraphRegistry.js.map +1 -1
  22. package/dist/src/injectors/class/LazyInjector.d.ts.map +1 -1
  23. package/dist/src/injectors/class/LazyInjector.js +2 -0
  24. package/dist/src/injectors/class/LazyInjector.js.map +1 -1
  25. package/jest.setup-after-env.js +1 -1
  26. package/package.json +1 -2
  27. package/src/Obsidian.ts +2 -1
  28. package/src/graph/ServiceLocatorFactory.ts +15 -0
  29. package/src/graph/registry/GraphRegistry.ts +5 -0
  30. package/src/injectors/class/LazyInjector.ts +1 -0
  31. package/tsconfig.base.json +1 -1
  32. package/dist/resetGraphs.d.ts +0 -2
  33. package/dist/resetGraphs.d.ts.map +0 -1
  34. package/dist/resetGraphs.js.map +0 -1
package/README.md CHANGED
@@ -1,6 +1,10 @@
1
1
  [![SWUbanner](https://raw.githubusercontent.com/vshymanskyy/StandWithUkraine/main/banner2-direct.svg)](https://vshymanskyy.github.io/StandWithUkraine)
2
2
 
3
- # react-obsidian
3
+ <p align="center">
4
+ </br><img width="300px" src=".github/logo.svg"></br>
5
+ </p>
6
+
7
+ # React Obsidian
4
8
  > Dependency injection framework for React and React Native applications
5
9
 
6
10
  <h5>🏗 <b>This library is still under active development.</b>
@@ -12,6 +16,9 @@ React Obsidian is a dependency injection framework for React and React Native ap
12
16
 
13
17
  React Obsidian is guided by the principles of the Dependency Injection pattern, but does not strictly follow them. We allowed ourselves a degree of freedom when designing the library in order to reduce boilerplate code and library footprint.
14
18
 
19
+ > 📖 Read more about Dependency Injection and Obsidian in [Breaking complexity with Dependency Injection: Introducing Obsidian](https://guyca.medium.com/breaking-complexity-with-dependency-injection-introducing-obsidian-cd452802f076) on Medium.
20
+
21
+
15
22
  * [Installation](https://github.com/wix-incubator/react-obsidian#installation)
16
23
  * [Prerequisites](https://github.com/wix-incubator/react-obsidian#prerequisites)
17
24
  * [Usage](https://github.com/wix-incubator/react-obsidian#usage)
@@ -26,6 +33,7 @@ React Obsidian is guided by the principles of the Dependency Injection pattern,
26
33
  * [Accessing props in graphs](https://github.com/wix-incubator/react-obsidian#accessing-props-in-graphs)
27
34
  * [Singleton graphs and providers](https://github.com/wix-incubator/react-obsidian#singleton-graphs-and-providers)
28
35
  * [Graph middleware](https://github.com/wix-incubator/react-obsidian#graph-middleware)
36
+ * [Clear graphs](https://github.com/wix-incubator/react-obsidian#clear-graphs)
29
37
 
30
38
 
31
39
 
@@ -241,9 +249,15 @@ const loggingMiddleware = new class extends GraphMiddleware {
241
249
  Obsidian.addGraphMiddleware(loggingMiddleware);
242
250
  ```
243
251
 
244
- #### Clear graphs
252
+ ### Clear graphs
245
253
  Graphs can be cleared by invoking `Obsidian.clearGraphs()`. This is useful in tests or when you need to reset the system to it's original state, for example when a user logs out.
246
254
 
255
+ #### Clearing graphs automatically during execution of Jest tests
256
+ Create a `jest.setup.js` file and add it to [setupFilesAfterEnv](https://jestjs.io/docs/configuration#setupfilesafterenv-array). Then, import the following file when ensures graphs are cleared before each test.
257
+ ```javascript
258
+ import 'react-obsidian/clearGraphs';
259
+ ```
260
+
247
261
  ## Prerequisites
248
262
  Obsidian is highly opinionated and is developed with a specific environment in mind. Therefore, it has a few prerequisites for projects that want to integrate it.
249
263
 
File without changes
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=clearGraphs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clearGraphs.d.ts","sourceRoot":"","sources":["../clearGraphs.ts"],"names":[],"mappings":""}
@@ -4,4 +4,4 @@ var src_1 = require("./src");
4
4
  beforeEach(function () {
5
5
  src_1.Obsidian.clearGraphs();
6
6
  });
7
- //# sourceMappingURL=resetGraphs.js.map
7
+ //# sourceMappingURL=clearGraphs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clearGraphs.js","sourceRoot":"","sources":["../clearGraphs.ts"],"names":[],"mappings":";;AAAA,6BAAiC;AAEjC,UAAU,CAAC;IACT,cAAQ,CAAC,WAAW,EAAE,CAAC;AACzB,CAAC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"Obsidian.d.ts","sourceRoot":"","sources":["../../src/Obsidian.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAGnE,MAAM,CAAC,OAAO,OAAO,QAAQ;IAC3B,MAAM,CAAC,CAAC,SAAS,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,EACtC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EACvB,KAAK,CAAC,EAAE,CAAC,GACR,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;IAI1C,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,WAAW;IAIvD,kBAAkB,CAAC,UAAU,EAAE,eAAe;IAI9C,qBAAqB;IAIrB,WAAW;CAIZ"}
1
+ {"version":3,"file":"Obsidian.d.ts","sourceRoot":"","sources":["../../src/Obsidian.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAInE,MAAM,CAAC,OAAO,OAAO,QAAQ;IAC3B,MAAM,CAAC,CAAC,SAAS,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,EACtC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EACvB,KAAK,CAAC,EAAE,CAAC,GACR,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;IAI1C,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,WAAW;IAIvD,kBAAkB,CAAC,UAAU,EAAE,eAAe;IAI9C,qBAAqB;IAIrB,WAAW;CAIZ"}
@@ -5,11 +5,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  var GraphRegistry_1 = __importDefault(require("./graph/registry/GraphRegistry"));
7
7
  var LazyInjector_1 = __importDefault(require("./injectors/class/LazyInjector"));
8
+ var ServiceLocatorFactory_1 = __importDefault(require("./graph/ServiceLocatorFactory"));
8
9
  var Obsidian = /** @class */ (function () {
9
10
  function Obsidian() {
10
11
  }
11
12
  Obsidian.prototype.obtain = function (Graph, props) {
12
- return GraphRegistry_1.default.resolve(Graph, props);
13
+ return ServiceLocatorFactory_1.default.fromGraph(Graph, props);
13
14
  };
14
15
  Obsidian.prototype.inject = function (target, graph) {
15
16
  return LazyInjector_1.default.inject(target, graph);
@@ -1 +1 @@
1
- {"version":3,"file":"Obsidian.js","sourceRoot":"","sources":["../../src/Obsidian.ts"],"names":[],"mappings":";;;;;AAAA,iFAA2D;AAI3D,gFAA0D;AAE1D;IAAA;IAwBA,CAAC;IAvBC,yBAAM,GAAN,UACE,KAAuB,EACvB,KAAS;QAET,OAAO,uBAAa,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAiC,CAAC;IAC7E,CAAC;IAED,yBAAM,GAAN,UAAyB,MAAS,EAAE,KAAmB;QACrD,OAAO,sBAAY,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC;IAED,qCAAkB,GAAlB,UAAmB,UAA2B;QAC5C,uBAAa,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAC/C,CAAC;IAED,wCAAqB,GAArB;QACE,uBAAa,CAAC,qBAAqB,EAAE,CAAC;IACxC,CAAC;IAED,8BAAW,GAAX;QACE,uBAAa,CAAC,qBAAqB,EAAE,CAAC;QACtC,uBAAa,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;IACH,eAAC;AAAD,CAAC,AAxBD,IAwBC"}
1
+ {"version":3,"file":"Obsidian.js","sourceRoot":"","sources":["../../src/Obsidian.ts"],"names":[],"mappings":";;;;;AAAA,iFAA2D;AAI3D,gFAA0D;AAC1D,wFAAkE;AAElE;IAAA;IAwBA,CAAC;IAvBC,yBAAM,GAAN,UACE,KAAuB,EACvB,KAAS;QAET,OAAO,+BAAqB,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACvD,CAAC;IAED,yBAAM,GAAN,UAAyB,MAAS,EAAE,KAAmB;QACrD,OAAO,sBAAY,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC;IAED,qCAAkB,GAAlB,UAAmB,UAA2B;QAC5C,uBAAa,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAC/C,CAAC;IAED,wCAAqB,GAArB;QACE,uBAAa,CAAC,qBAAqB,EAAE,CAAC;IACxC,CAAC;IAED,8BAAW,GAAX;QACE,uBAAa,CAAC,qBAAqB,EAAE,CAAC;QACtC,uBAAa,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;IACH,eAAC;AAAD,CAAC,AAxBD,IAwBC"}
@@ -1,4 +1,4 @@
1
1
  import { Constructable } from '../types';
2
2
  import { ObjectGraph } from '../graph/ObjectGraph';
3
- export declare function Singleton(): (constructorOrGraph: Constructable<ObjectGraph> | ObjectGraph, _property?: string | undefined, descriptor?: PropertyDescriptor | undefined) => any;
3
+ export declare function Singleton(): (constructorOrGraph: Constructable<ObjectGraph> | ObjectGraph, _property?: string, descriptor?: PropertyDescriptor) => any;
4
4
  //# sourceMappingURL=Singleton.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Singleton.d.ts","sourceRoot":"","sources":["../../../src/decorators/Singleton.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,wBAAgB,SAAS,yBAED,cAAc,WAAW,CAAC,GAAG,WAAW,kFAG3D,GAAG,CAKP"}
1
+ {"version":3,"file":"Singleton.d.ts","sourceRoot":"","sources":["../../../src/decorators/Singleton.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,wBAAgB,SAAS,yBAED,cAAc,WAAW,CAAC,GAAG,WAAW,cAChD,MAAM,eACL,kBAAkB,KAC9B,GAAG,CAKP"}
@@ -1,2 +1,2 @@
1
- export declare function Inject(name?: string): (target: Object | any, _propertyKey?: string | undefined, indexOrPropertyDescriptor?: number | PropertyDescriptor | undefined) => void;
1
+ export declare function Inject(name?: string): (target: Object | any, _propertyKey?: string, indexOrPropertyDescriptor?: number | PropertyDescriptor) => void;
2
2
  //# sourceMappingURL=Inject.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Inject.d.ts","sourceRoot":"","sources":["../../../../src/decorators/inject/Inject.ts"],"names":[],"mappings":"AAGA,wBAAgB,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,YAExB,MAAM,GAAG,GAAG,kHAWvB"}
1
+ {"version":3,"file":"Inject.d.ts","sourceRoot":"","sources":["../../../../src/decorators/inject/Inject.ts"],"names":[],"mappings":"AAGA,wBAAgB,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,YAExB,MAAM,GAAG,GAAG,iBACL,MAAM,8BACO,MAAM,GAAG,kBAAkB,UAS1D"}
@@ -0,0 +1,6 @@
1
+ import { ObjectGraph } from './ObjectGraph';
2
+ import { Constructable, ServiceLocator as ServiceLocatorType } from '../types';
3
+ export default class ServiceLocatorFactory {
4
+ static fromGraph<T extends ObjectGraph<P>, P = any>(Graph: Constructable<T>, props?: P): ServiceLocatorType<T>;
5
+ }
6
+ //# sourceMappingURL=ServiceLocatorFactory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ServiceLocatorFactory.d.ts","sourceRoot":"","sources":["../../../src/graph/ServiceLocatorFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,cAAc,IAAI,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAG/E,MAAM,CAAC,OAAO,OAAO,qBAAqB;IACxC,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;CASvF"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ var GraphRegistry_1 = __importDefault(require("./registry/GraphRegistry"));
7
+ var ServiceLocatorFactory = /** @class */ (function () {
8
+ function ServiceLocatorFactory() {
9
+ }
10
+ ServiceLocatorFactory.fromGraph = function (Graph, props) {
11
+ var resolved = GraphRegistry_1.default.resolve(Graph, props);
12
+ var wrapped = new Proxy(resolved, {
13
+ get: function (_target, property, receiver) {
14
+ return function () { return resolved.retrieve(property, receiver); };
15
+ },
16
+ });
17
+ return wrapped;
18
+ };
19
+ return ServiceLocatorFactory;
20
+ }());
21
+ exports.default = ServiceLocatorFactory;
22
+ //# sourceMappingURL=ServiceLocatorFactory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ServiceLocatorFactory.js","sourceRoot":"","sources":["../../../src/graph/ServiceLocatorFactory.ts"],"names":[],"mappings":";;;;;AAEA,2EAAqD;AAErD;IAAA;IAUA,CAAC;IATQ,+BAAS,GAAhB,UAAoD,KAAuB,EAAE,KAAS;QACpF,IAAM,QAAQ,GAAG,uBAAa,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACrD,IAAM,OAAO,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE;YAClC,GAAG,EAAH,UAAI,OAAY,EAAE,QAAgB,EAAE,QAAa;gBAC/C,OAAO,cAAM,OAAA,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAArC,CAAqC,CAAC;YACrD,CAAC;SACF,CAAC,CAAC;QACH,OAAO,OAA2C,CAAC;IACrD,CAAC;IACH,4BAAC;AAAD,CAAC,AAVD,IAUC"}
@@ -8,6 +8,7 @@ export declare class GraphRegistry {
8
8
  private readonly graphToSubgraphs;
9
9
  private readonly graphMiddlewares;
10
10
  register(constructor: Constructable<Graph>, subgraphs?: Constructable<Graph>[]): void;
11
+ ensureRegistered(graph: Graph): void;
11
12
  getSubgraphs(graph: Graph): Graph[];
12
13
  getGraphInstance(name: string): Graph;
13
14
  resolve<T extends Graph>(Graph: Constructable<T>, props?: any): T;
@@ -1 +1 @@
1
- {"version":3,"file":"GraphRegistry.d.ts","sourceRoot":"","sources":["../../../../src/graph/registry/GraphRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG1C,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAA+C;IACrF,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAA0C;IAChF,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA4B;IAC3D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA8D;IAC/F,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA8B;IAE/D,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,SAAS,GAAE,aAAa,CAAC,KAAK,CAAC,EAAO;IAIlF,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,EAAE;IAMnC,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK;IAIrC,OAAO,CAAC,CAAC,SAAS,KAAK,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,GAAG,GAAG,CAAC;IASjE,OAAO,CAAC,GAAG;IAIX,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,GAAG;IAQX,OAAO,CAAC,WAAW;IAInB,KAAK,CAAC,KAAK,EAAE,KAAK;IAOlB,kBAAkB,CAAC,UAAU,EAAE,UAAU,CAAC,KAAK,CAAC;IAIhD,qBAAqB;IAIrB,QAAQ;CAKT;;AAED,wBAAmC"}
1
+ {"version":3,"file":"GraphRegistry.d.ts","sourceRoot":"","sources":["../../../../src/graph/registry/GraphRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG1C,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAA+C;IACrF,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAA0C;IAChF,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA4B;IAC3D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA8D;IAC/F,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA8B;IAE/D,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,SAAS,GAAE,aAAa,CAAC,KAAK,CAAC,EAAO;IAIlF,gBAAgB,CAAC,KAAK,EAAE,KAAK;IAK7B,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,EAAE;IAMnC,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK;IAIrC,OAAO,CAAC,CAAC,SAAS,KAAK,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,GAAG,GAAG,CAAC;IASjE,OAAO,CAAC,GAAG;IAIX,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,GAAG;IAQX,OAAO,CAAC,WAAW;IAInB,KAAK,CAAC,KAAK,EAAE,KAAK;IAOlB,kBAAkB,CAAC,UAAU,EAAE,UAAU,CAAC,KAAK,CAAC;IAIhD,qBAAqB;IAIrB,QAAQ;CAKT;;AAED,wBAAmC"}
@@ -17,6 +17,11 @@ var GraphRegistry = /** @class */ (function () {
17
17
  if (subgraphs === void 0) { subgraphs = []; }
18
18
  this.graphToSubgraphs.set(constructor, new Set(subgraphs));
19
19
  };
20
+ GraphRegistry.prototype.ensureRegistered = function (graph) {
21
+ if (this.instanceToConstructor.get(graph))
22
+ return;
23
+ this.set(graph.constructor, graph);
24
+ };
20
25
  GraphRegistry.prototype.getSubgraphs = function (graph) {
21
26
  var _this = this;
22
27
  var _a;
@@ -1 +1 @@
1
- {"version":3,"file":"GraphRegistry.js","sourceRoot":"","sources":["../../../../src/graph/registry/GraphRegistry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GraphRegistry.js","sourceRoot":"","sources":["../../../../src/graph/registry/GraphRegistry.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"LazyInjector.d.ts","sourceRoot":"","sources":["../../../../src/injectors/class/LazyInjector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAItD,eAAO,MAAM,uBAAuB,wBAAwB,CAAC;AAE7D,cAAM,YAAY,CAAC,CAAC,SAAS,MAAM;IACjC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,WAAW,CAAC,EAAE,WAAW,GAAG,CAAC;IAS/C,OAAO,CAAC,gBAAgB;CAIzB;;AAED,wBAAkC"}
1
+ {"version":3,"file":"LazyInjector.d.ts","sourceRoot":"","sources":["../../../../src/injectors/class/LazyInjector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAItD,eAAO,MAAM,uBAAuB,wBAAwB,CAAC;AAE7D,cAAM,YAAY,CAAC,CAAC,SAAS,MAAM;IACjC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,WAAW,CAAC,EAAE,WAAW,GAAG,CAAC;IAU/C,OAAO,CAAC,gBAAgB;CAIzB;;AAED,wBAAkC"}
@@ -11,6 +11,8 @@ var LazyInjector = /** @class */ (function () {
11
11
  function LazyInjector() {
12
12
  }
13
13
  LazyInjector.prototype.inject = function (target, sourceGraph) {
14
+ if (sourceGraph)
15
+ GraphRegistry_1.default.ensureRegistered(sourceGraph);
14
16
  var injectionMetadata = new InjectionMetadata_1.default();
15
17
  var graph = sourceGraph !== null && sourceGraph !== void 0 ? sourceGraph : this.getGraphInstance(target);
16
18
  injectionMetadata.getLazyPropertiesToInject(target.constructor).forEach(function (key) {
@@ -1 +1 @@
1
- {"version":3,"file":"LazyInjector.js","sourceRoot":"","sources":["../../../../src/injectors/class/LazyInjector.ts"],"names":[],"mappings":";;;;;;AACA,qFAA+D;AAC/D,0EAAoD;AAEvC,QAAA,uBAAuB,GAAG,qBAAqB,CAAC;AAE7D;IAAA;IAcA,CAAC;IAbC,6BAAM,GAAN,UAAO,MAAS,EAAE,WAAyB;QACzC,IAAM,iBAAiB,GAAG,IAAI,2BAAiB,EAAE,CAAC;QAClD,IAAM,KAAK,GAAG,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAC3D,iBAAiB,CAAC,yBAAyB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,UAAC,GAAG;YAC1E,OAAO,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,uCAAgB,GAAxB,UAAyB,MAAS;QAChC,IAAM,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,+BAAuB,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;QAC3F,OAAO,uBAAa,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;IAC3D,CAAC;IACH,mBAAC;AAAD,CAAC,AAdD,IAcC;AAED,kBAAe,IAAI,YAAY,EAAE,CAAC"}
1
+ {"version":3,"file":"LazyInjector.js","sourceRoot":"","sources":["../../../../src/injectors/class/LazyInjector.ts"],"names":[],"mappings":";;;;;;AACA,qFAA+D;AAC/D,0EAAoD;AAEvC,QAAA,uBAAuB,GAAG,qBAAqB,CAAC;AAE7D;IAAA;IAeA,CAAC;IAdC,6BAAM,GAAN,UAAO,MAAS,EAAE,WAAyB;QACzC,IAAI,WAAW;YAAE,uBAAa,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;QAC7D,IAAM,iBAAiB,GAAG,IAAI,2BAAiB,EAAE,CAAC;QAClD,IAAM,KAAK,GAAG,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAC3D,iBAAiB,CAAC,yBAAyB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,UAAC,GAAG;YAC1E,OAAO,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,uCAAgB,GAAxB,UAAyB,MAAS;QAChC,IAAM,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,+BAAuB,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;QAC3F,OAAO,uBAAa,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;IAC3D,CAAC;IACH,mBAAC;AAAD,CAAC,AAfD,IAeC;AAED,kBAAe,IAAI,YAAY,EAAE,CAAC"}
@@ -1,4 +1,4 @@
1
1
  require('setimmediate');
2
2
  require('reflect-metadata');
3
- require('./resetGraphs');
3
+ require('./clearGraphs');
4
4
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-obsidian",
3
- "version": "0.0.19",
3
+ "version": "0.0.22",
4
4
  "description": "Dependency injection framework for React and React Native applications",
5
5
  "scripts": {
6
6
  "prepack": "npm run lint && tsc --project tsconfig.prod.json",
@@ -28,7 +28,6 @@
28
28
  "@babel/preset-react": "7.16.x",
29
29
  "@babel/preset-typescript": "7.16.x",
30
30
  "@babel/types": "7.16.x",
31
- "@babel/traverse": "7.16.x",
32
31
  "@johanblumenberg/ts-mockito": "1.x.x",
33
32
  "@testing-library/react": "^12.1.2",
34
33
  "@testing-library/react-hooks": "^7.0.2",
package/src/Obsidian.ts CHANGED
@@ -3,13 +3,14 @@ import { ObjectGraph } from './graph/ObjectGraph';
3
3
  import { Constructable, GraphInternals, ServiceLocator } from './types';
4
4
  import { GraphMiddleware } from './graph/registry/GraphMiddleware';
5
5
  import lazyInjector from './injectors/class/LazyInjector';
6
+ import serviceLocatorFactory from './graph/ServiceLocatorFactory';
6
7
 
7
8
  export default class Obsidian {
8
9
  obtain<T extends ObjectGraph<P>, P = any>(
9
10
  Graph: Constructable<T>,
10
11
  props?: P,
11
12
  ): ServiceLocator<Omit<T, GraphInternals>> {
12
- return graphRegistry.resolve(Graph, props) as unknown as ServiceLocator<T>;
13
+ return serviceLocatorFactory.fromGraph(Graph, props);
13
14
  }
14
15
 
15
16
  inject<T extends object>(target: T, graph?: ObjectGraph) {
@@ -0,0 +1,15 @@
1
+ import { ObjectGraph } from './ObjectGraph';
2
+ import { Constructable, ServiceLocator as ServiceLocatorType } from '../types';
3
+ import graphRegistry from './registry/GraphRegistry';
4
+
5
+ export default class ServiceLocatorFactory {
6
+ static fromGraph<T extends ObjectGraph<P>, P = any>(Graph: Constructable<T>, props?: P) {
7
+ const resolved = graphRegistry.resolve(Graph, props);
8
+ const wrapped = new Proxy(resolved, {
9
+ get(_target: any, property: string, receiver: any) {
10
+ return () => resolved.retrieve(property, receiver);
11
+ },
12
+ });
13
+ return wrapped as unknown as ServiceLocatorType<T>;
14
+ }
15
+ }
@@ -14,6 +14,11 @@ export class GraphRegistry {
14
14
  this.graphToSubgraphs.set(constructor, new Set(subgraphs));
15
15
  }
16
16
 
17
+ ensureRegistered(graph: Graph) {
18
+ if (this.instanceToConstructor.get(graph)) return;
19
+ this.set(graph.constructor as any, graph);
20
+ }
21
+
17
22
  getSubgraphs(graph: Graph): Graph[] {
18
23
  const Graph = this.instanceToConstructor.get(graph)!;
19
24
  const subgraphs = this.graphToSubgraphs.get(Graph) ?? new Set();
@@ -6,6 +6,7 @@ export const GRAPH_INSTANCE_NAME_KEY = 'GRAPH_INSTANCE_NAME';
6
6
 
7
7
  class LazyInjector<T extends object> {
8
8
  inject(target: T, sourceGraph?: ObjectGraph): T {
9
+ if (sourceGraph) graphRegistry.ensureRegistered(sourceGraph);
9
10
  const injectionMetadata = new InjectionMetadata();
10
11
  const graph = sourceGraph ?? this.getGraphInstance(target);
11
12
  injectionMetadata.getLazyPropertiesToInject(target.constructor).forEach((key) => {
@@ -3,7 +3,7 @@
3
3
  "src/**/*",
4
4
  "transformers/**/*",
5
5
  "test/**/*",
6
- "./resetGraphs.ts"
6
+ "./clearGraphs.ts"
7
7
  ],
8
8
  "exclude": [
9
9
  "node_modules",
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=resetGraphs.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resetGraphs.d.ts","sourceRoot":"","sources":["../resetGraphs.ts"],"names":[],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"resetGraphs.js","sourceRoot":"","sources":["../resetGraphs.ts"],"names":[],"mappings":";;AAAA,6BAAiC;AAEjC,UAAU,CAAC;IACT,cAAQ,CAAC,WAAW,EAAE,CAAC;AACzB,CAAC,CAAC,CAAC"}