react-obsidian 0.0.12 → 0.0.16

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 (155) hide show
  1. package/README.md +105 -10
  2. package/babel.config.js +5 -4
  3. package/dist/src/Obsidian.d.ts +1 -0
  4. package/dist/src/Obsidian.d.ts.map +1 -1
  5. package/dist/src/Obsidian.js +4 -0
  6. package/dist/src/Obsidian.js.map +1 -1
  7. package/dist/src/decorators/Graph.d.ts +2 -3
  8. package/dist/src/decorators/Graph.d.ts.map +1 -1
  9. package/dist/src/decorators/Graph.js +2 -3
  10. package/dist/src/decorators/Graph.js.map +1 -1
  11. package/dist/src/decorators/Singleton.d.ts +4 -0
  12. package/dist/src/decorators/Singleton.d.ts.map +1 -0
  13. package/dist/src/decorators/Singleton.js +12 -0
  14. package/dist/src/decorators/Singleton.js.map +1 -0
  15. package/dist/src/decorators/inject/Inject.d.ts +2 -0
  16. package/dist/src/decorators/inject/Inject.d.ts.map +1 -0
  17. package/dist/src/decorators/inject/Inject.js +21 -0
  18. package/dist/src/decorators/inject/Inject.js.map +1 -0
  19. package/dist/src/decorators/inject/Injectable.d.ts +4 -0
  20. package/dist/src/decorators/inject/Injectable.d.ts.map +1 -0
  21. package/dist/src/decorators/inject/Injectable.js +13 -0
  22. package/dist/src/decorators/inject/Injectable.js.map +1 -0
  23. package/dist/src/decorators/inject/LazyInject.d.ts +2 -0
  24. package/dist/src/decorators/inject/LazyInject.d.ts.map +1 -0
  25. package/dist/src/decorators/inject/LazyInject.js +15 -0
  26. package/dist/src/decorators/inject/LazyInject.js.map +1 -0
  27. package/dist/src/decorators/provides/MemoizeDescriptor.d.ts.map +1 -1
  28. package/dist/src/decorators/provides/MemoizeDescriptor.js +4 -4
  29. package/dist/src/decorators/provides/MemoizeDescriptor.js.map +1 -1
  30. package/dist/src/decorators/provides/Provides.d.ts +0 -2
  31. package/dist/src/decorators/provides/Provides.d.ts.map +1 -1
  32. package/dist/src/decorators/provides/Provides.js.map +1 -1
  33. package/dist/src/graph/ObjectGraph.d.ts +2 -2
  34. package/dist/src/graph/ObjectGraph.d.ts.map +1 -1
  35. package/dist/src/graph/ObjectGraph.js +6 -1
  36. package/dist/src/graph/ObjectGraph.js.map +1 -1
  37. package/dist/src/graph/ProviderBinder.d.ts.map +1 -1
  38. package/dist/src/graph/ProviderBinder.js +2 -3
  39. package/dist/src/graph/ProviderBinder.js.map +1 -1
  40. package/dist/src/graph/registry/GraphRegistry.d.ts +11 -8
  41. package/dist/src/graph/registry/GraphRegistry.d.ts.map +1 -1
  42. package/dist/src/graph/registry/GraphRegistry.js +34 -22
  43. package/dist/src/graph/registry/GraphRegistry.js.map +1 -1
  44. package/dist/src/index.d.ts +5 -2
  45. package/dist/src/index.d.ts.map +1 -1
  46. package/dist/src/index.js +11 -5
  47. package/dist/src/index.js.map +1 -1
  48. package/dist/src/injectors/class/ClassInjector.d.ts +12 -0
  49. package/dist/src/injectors/class/ClassInjector.d.ts.map +1 -0
  50. package/dist/src/injectors/class/ClassInjector.js +60 -0
  51. package/dist/src/injectors/class/ClassInjector.js.map +1 -0
  52. package/dist/src/injectors/class/ConstructorArgs.d.ts +8 -0
  53. package/dist/src/injectors/class/ConstructorArgs.d.ts.map +1 -0
  54. package/dist/src/injectors/class/ConstructorArgs.js +25 -0
  55. package/dist/src/injectors/class/ConstructorArgs.js.map +1 -0
  56. package/dist/src/injectors/class/InjectionMetadata.d.ts +15 -0
  57. package/dist/src/injectors/class/InjectionMetadata.d.ts.map +1 -0
  58. package/dist/src/injectors/class/InjectionMetadata.js +41 -0
  59. package/dist/src/injectors/class/InjectionMetadata.js.map +1 -0
  60. package/dist/src/injectors/class/LazyInjector.d.ts +8 -0
  61. package/dist/src/injectors/class/LazyInjector.d.ts.map +1 -0
  62. package/dist/src/injectors/class/LazyInjector.js +28 -0
  63. package/dist/src/injectors/class/LazyInjector.js.map +1 -0
  64. package/dist/src/injectors/components/ComponentInjector.d.ts +0 -1
  65. package/dist/src/injectors/components/ComponentInjector.d.ts.map +1 -1
  66. package/dist/src/injectors/components/ComponentInjector.js +0 -1
  67. package/dist/src/injectors/components/ComponentInjector.js.map +1 -1
  68. package/dist/src/types/index.d.ts +0 -1
  69. package/dist/src/types/index.d.ts.map +1 -1
  70. package/dist/test/integration/fixtures/MainGraph.d.ts +1 -0
  71. package/dist/test/integration/fixtures/MainGraph.d.ts.map +1 -1
  72. package/dist/test/integration/fixtures/MainGraph.js +10 -0
  73. package/dist/test/integration/fixtures/MainGraph.js.map +1 -1
  74. package/dist/test/integration/fixtures/SingletonGraph.d.ts +6 -0
  75. package/dist/test/integration/fixtures/SingletonGraph.d.ts.map +1 -0
  76. package/dist/test/integration/fixtures/SingletonGraph.js +53 -0
  77. package/dist/test/integration/fixtures/SingletonGraph.js.map +1 -0
  78. package/dist/test/integration/fixtures/UniqueNumberGraph.d.ts +8 -0
  79. package/dist/test/integration/fixtures/UniqueNumberGraph.d.ts.map +1 -0
  80. package/dist/test/integration/fixtures/UniqueNumberGraph.js +62 -0
  81. package/dist/test/integration/fixtures/UniqueNumberGraph.js.map +1 -0
  82. package/dist/test/integration/fixtures/injectedValues.d.ts +1 -0
  83. package/dist/test/integration/fixtures/injectedValues.d.ts.map +1 -1
  84. package/dist/test/integration/fixtures/injectedValues.js +1 -0
  85. package/dist/test/integration/fixtures/injectedValues.js.map +1 -1
  86. package/dist/testkit/index.d.ts +6 -5
  87. package/dist/testkit/index.d.ts.map +1 -1
  88. package/dist/testkit/index.js +18 -11
  89. package/dist/testkit/index.js.map +1 -1
  90. package/dist/transformers/{babel-plugin-obsidian-provide → babel-plugin-obsidian}/helpers/index.d.ts +4 -2
  91. package/dist/transformers/babel-plugin-obsidian/helpers/index.d.ts.map +1 -0
  92. package/dist/transformers/{babel-plugin-obsidian-provide → babel-plugin-obsidian}/helpers/index.js +28 -4
  93. package/dist/transformers/babel-plugin-obsidian/helpers/index.js.map +1 -0
  94. package/dist/transformers/{babel-plugin-obsidian-provide → babel-plugin-obsidian}/index.d.ts +0 -0
  95. package/dist/transformers/babel-plugin-obsidian/index.d.ts.map +1 -0
  96. package/dist/transformers/babel-plugin-obsidian/index.js +45 -0
  97. package/dist/transformers/babel-plugin-obsidian/index.js.map +1 -0
  98. package/dist/transformers/babel-plugin-obsidian/unmagler/index.d.ts +10 -0
  99. package/dist/transformers/babel-plugin-obsidian/unmagler/index.d.ts.map +1 -0
  100. package/dist/transformers/babel-plugin-obsidian/unmagler/index.js +14 -0
  101. package/dist/transformers/babel-plugin-obsidian/unmagler/index.js.map +1 -0
  102. package/dist/transformers/babel-plugin-obsidian/unmagler/method.d.ts +4 -0
  103. package/dist/transformers/babel-plugin-obsidian/unmagler/method.d.ts.map +1 -0
  104. package/dist/transformers/babel-plugin-obsidian/unmagler/method.js +26 -0
  105. package/dist/transformers/babel-plugin-obsidian/unmagler/method.js.map +1 -0
  106. package/dist/transformers/babel-plugin-obsidian/unmagler/property.d.ts +4 -0
  107. package/dist/transformers/babel-plugin-obsidian/unmagler/property.d.ts.map +1 -0
  108. package/dist/transformers/babel-plugin-obsidian/unmagler/property.js +14 -0
  109. package/dist/transformers/babel-plugin-obsidian/unmagler/property.js.map +1 -0
  110. package/example/babel.config.js +2 -2
  111. package/example/ios/example.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  112. package/jest.config.js +4 -0
  113. package/jest.setup-after-env.js +1 -0
  114. package/jest.setup.ts +1 -0
  115. package/package.json +13 -12
  116. package/src/Obsidian.ts +5 -0
  117. package/src/decorators/Graph.ts +2 -5
  118. package/src/decorators/Singleton.ts +14 -0
  119. package/src/decorators/inject/Inject.ts +17 -0
  120. package/src/decorators/inject/Injectable.ts +8 -0
  121. package/src/decorators/inject/LazyInject.ts +8 -0
  122. package/src/decorators/provides/MemoizeDescriptor.ts +3 -4
  123. package/src/decorators/provides/Provides.ts +0 -2
  124. package/src/graph/ObjectGraph.ts +7 -3
  125. package/src/graph/ProviderBinder.ts +2 -3
  126. package/src/graph/registry/GraphRegistry.ts +40 -32
  127. package/src/index.ts +6 -2
  128. package/src/injectors/class/ClassInjector.ts +49 -0
  129. package/src/injectors/class/ConstructorArgs.ts +20 -0
  130. package/src/injectors/class/InjectionMetadata.ts +57 -0
  131. package/src/injectors/class/LazyInjector.ts +22 -0
  132. package/src/injectors/components/ComponentInjector.tsx +0 -1
  133. package/src/types/index.ts +0 -2
  134. package/testkit/index.ts +13 -14
  135. package/transformers/{babel-plugin-obsidian-provide → babel-plugin-obsidian}/helpers/index.ts +38 -2
  136. package/transformers/babel-plugin-obsidian/index.ts +46 -0
  137. package/transformers/babel-plugin-obsidian/unmagler/index.ts +9 -0
  138. package/transformers/babel-plugin-obsidian/unmagler/method.ts +31 -0
  139. package/transformers/babel-plugin-obsidian/unmagler/property.ts +21 -0
  140. package/dist/src/ScopedValuesRegistry.d.ts +0 -11
  141. package/dist/src/ScopedValuesRegistry.d.ts.map +0 -1
  142. package/dist/src/ScopedValuesRegistry.js +0 -25
  143. package/dist/src/ScopedValuesRegistry.js.map +0 -1
  144. package/dist/src/decorators/injectClass.d.ts +0 -7
  145. package/dist/src/decorators/injectClass.d.ts.map +0 -1
  146. package/dist/src/decorators/injectClass.js +0 -34
  147. package/dist/src/decorators/injectClass.js.map +0 -1
  148. package/dist/transformers/babel-plugin-obsidian-provide/helpers/index.d.ts.map +0 -1
  149. package/dist/transformers/babel-plugin-obsidian-provide/helpers/index.js.map +0 -1
  150. package/dist/transformers/babel-plugin-obsidian-provide/index.d.ts.map +0 -1
  151. package/dist/transformers/babel-plugin-obsidian-provide/index.js +0 -39
  152. package/dist/transformers/babel-plugin-obsidian-provide/index.js.map +0 -1
  153. package/src/ScopedValuesRegistry.ts +0 -26
  154. package/src/decorators/injectClass.ts +0 -28
  155. package/transformers/babel-plugin-obsidian-provide/index.ts +0 -47
package/README.md CHANGED
@@ -1,7 +1,9 @@
1
1
  # react-obsidian
2
-
3
2
  > Dependency injection framework for React and React Native applications
4
3
 
4
+ <h5>🏗 <b>This library is still under active development.</b>
5
+ <br>⚠️ <b>Until we hit v1, Obsidian is not semver-compliant and all APIs are subject to change.</b></h5>
6
+
5
7
  ## Introduction
6
8
  Applications are made of objects that communicate with each other. An object can depend on other objects so it can perform its responsibilities. For an object to function properly, its dependencies must be fulfilled when the object is constructed.
7
9
 
@@ -9,12 +11,33 @@ React Obsidian is a dependency injection framework for React and React Native ap
9
11
 
10
12
  React Obsidian is guided by the principles of the Dependency Injection pattern, but does not strictly follow it. We allowed ourselves a degree of freedom when designing the library in order to reduce boilerplate code and reduce library footprint.
11
13
 
14
+ * [Installation](https://github.com/wix-incubator/react-obsidian#installation)
15
+ * [Prerequisites](https://github.com/wix-incubator/react-obsidian#prerequisites)
16
+ * [Usage](https://github.com/wix-incubator/react-obsidian#usage)
17
+ * [Declare an object graph](https://github.com/wix-incubator/react-obsidian#declare-an-object-graph)
18
+ * [Component injection](https://github.com/wix-incubator/react-obsidian#component-injection)
19
+ * [Hooks injection](https://github.com/wix-incubator/react-obsidian#hooks-injection)
20
+ * [Class injection](https://github.com/wix-incubator/react-obsidian#class-injection)
21
+ * [Injecting properties](https://github.com/wix-incubator/react-obsidian#injecting-properties)
22
+ * [Injecting constructor arguments](https://github.com/wix-incubator/react-obsidian#injecting-constructor-arguments)
23
+ * [Obtaining dependencies from a graph](https://github.com/wix-incubator/react-obsidian#obtaining-dependencies-from-a-graph)
24
+ * [Advance usage](https://github.com/wix-incubator/react-obsidian#advance-usage)
25
+ * [Accessing props in graphs](https://github.com/wix-incubator/react-obsidian#accessing-props-in-graphs)
26
+ * [Singleton graphs and providers](https://github.com/wix-incubator/react-obsidian#singleton-graphs-and-providers)
27
+ * [Graph middlewares](https://github.com/wix-incubator/react-obsidian#graph-middlewares)
28
+
29
+
30
+
31
+
32
+
12
33
  ## Installation
13
34
 
14
35
  ``` shell
15
36
  npm install react-obsidian
16
37
  ```
17
38
 
39
+ See the [#Prerequisites](https://github.com/wix-incubator/react-obsidian#prerequisites) section for additional requirements.
40
+
18
41
  ## Usage
19
42
 
20
43
  ### Declare an object graph
@@ -29,8 +52,8 @@ Both functions are annotated by the `@Provides()` annotation. This signals Obsid
29
52
  Notice how the biLogger function receives an `httpClient` as an argument. This means that `biLogger` has a dependency on `httpClient`. Obsidian will create an `httpClient` when `biLogger` is injected.
30
53
 
31
54
  ``` typescript
32
- @Graph()
33
- export default class ApplicationGraph extends ObjectGraph {
55
+ @Singleton() @Graph()
56
+ class ApplicationGraph extends ObjectGraph {
34
57
  @Provides()
35
58
  httpClient(): HttpClient {
36
59
  return new HttpClient();
@@ -51,7 +74,6 @@ interface InjectedComponentProps {
51
74
  biLogger: BiLogger;
52
75
  }
53
76
 
54
- // When injecting components - we must use destructuring in order for Obsidian to know which dependencies to inject.
55
77
  const InjectedComponent = ({ biLogger }: InjectedComponentProps) => (
56
78
  <>
57
79
  <button onclick={biLogger.logButtonClick}>Click Me</button>
@@ -95,12 +117,13 @@ const Component = () => (
95
117
  ```
96
118
 
97
119
  ### Class injection
98
- Obsidian supports injected class properties. Constructor injection is not supported at this time.
120
+ Obsidian supports injecting both class properties and constructor arguments.
99
121
 
122
+ #### Injecting properties
100
123
  ```typescript
101
124
  @Injectable(ApplicationGraph)
102
125
  class ButtonController {
103
- @Inject biLogger!: BiLogger;
126
+ @Inject() biLogger!: BiLogger;
104
127
 
105
128
  onClick() {
106
129
  this.biLogger.logButtonClick();
@@ -108,6 +131,25 @@ class ButtonController {
108
131
  }
109
132
  ```
110
133
 
134
+ #### Injecting constructor arguments
135
+ ```typescript
136
+ @Injectable(ApplicationGraph)
137
+ class Presenter {
138
+ constructor(@Inject() public biLogger: BiLogger) { }
139
+ }
140
+ ```
141
+
142
+ TypeScript's compiler won't let you construct the class without providing the argument `anotherString` as it's not optional.
143
+ If you want to be able to instantiate the class yourself without providing arguments, you'll also need to declare a constructor overload that receives optional arguments.
144
+
145
+ ```typescript
146
+ @Injectable(ApplicationGraph)
147
+ class Presenter {
148
+ constructor(biLogger?: BiLogger);
149
+ constructor(@Inject() public biLogger: BiLogger) { }
150
+ }
151
+ ```
152
+
111
153
  ### Obtaining dependencies from a graph
112
154
  Dependencies can also be obtained by accessing the graph that provides them.
113
155
 
@@ -118,6 +160,54 @@ Obsidian.obtain(ApplicationGraph).biLogger();
118
160
  > Note: While the function that provides the `biLogger` accepts an argument of type `HttpClient`, when obtaining dependencies directly from the graph, we don't provide dependencies ourselves as they are resolved by Obsidian.
119
161
 
120
162
  ## Advance usage
163
+ ### Accessing props in graphs
164
+ If a graph is instantiated in order to inject a component, then it receives the component's props in the constructor.
165
+ ```typescript
166
+ @Graph()
167
+ class ProfileScreenGraph extends ObjectGraph<ProfileScreenProps> {
168
+ private profile: UserProfile;
169
+
170
+ constructor(props: ProfileScreenProps) {
171
+ super(props);
172
+ this.profile = props.profile;
173
+ }
174
+
175
+ @Provides()
176
+ profileFetcher(): ProfileFetcher {
177
+ return new ProfileFetcher(this.profile);
178
+ }
179
+ }
180
+ ```
181
+ ### Singleton graphs and providers
182
+ Graphs and Providers can be marked as singletons with the `@Singleton` decorator. When a graph is marked as a singleton, when an instance of that graph is requested, Obsidian will reuse the existing instance. Graphs that are not annotated with the `@Singleton` decorator will be instantiated each time they are needed for injection.
183
+
184
+ Singleton providers are shared between all instances of a graph.
185
+
186
+ ```typescript
187
+ @Graph()
188
+ class PushedScreenGraph { // A new PushedScreenGraph instance is created each time the corresponding screen is created
189
+ @Provides()
190
+ presenter(): PushedScreenPresenter {
191
+ return new PushedScreenPresenter(); // Created each time PushedGraph is created
192
+ }
193
+
194
+ @Provides() @Singleton()
195
+ someUseCase(): SomeUseCase {
196
+ return new SomeUseCase(); // Created once for all PushedGraph instances
197
+ }
198
+ }
199
+ ```
200
+
201
+ In this example we declared a singleton graph. This means that all of its providers are also singleton.
202
+ ```typescript
203
+ @Singleton() @Graph()
204
+ class ApplicationGraph {
205
+ @Provides()
206
+ biLogger(): BiLogger {
207
+ return new BiLogger() // Created once because the graph is a singleton
208
+ }
209
+ }
210
+ ```
121
211
  ### Graph middlewares
122
212
  When working on large scale applications, a need to hook into various low level operations often arises. Obsidian lets you hook into the graph creation process by adding middlewares.
123
213
 
@@ -134,7 +224,7 @@ The following example demonstrates how to add a middleware that's used for loggi
134
224
 
135
225
  ```typescript
136
226
  const loggingMiddleware = new class extends GraphMiddleware {
137
- resolve<T extends ObjectGraph, Props>(resolveChain: ResolveChain, Graph: Constructable<T>, props?: Props) {
227
+ resolve<Props>(resolveChain: GraphResolveChain, Graph: Constructable<T>, props?: Props) {
138
228
  const t1 = Date.now();
139
229
  const graph = resolveChain.proceed(Graph, props);
140
230
  const t2 = Date.now();
@@ -176,11 +266,16 @@ Obsidian relies on reflection to resolve dependencies. Production code is typica
176
266
  Add the transformer to the list of plugins in your `.babel` file.
177
267
  ```js
178
268
  module.exports = {
179
- presets: ['module:metro-react-native-babel-preset'],
269
+ presets: [
270
+ 'module:metro-react-native-babel-preset',
271
+ ['@babel/preset-typescript', {'onlyRemoveTypeImports': true}]
272
+ ],
180
273
  plugins: [
274
+ react-obsidian/dist/transformers/babel-plugin-obsidian,
181
275
  ['@babel/plugin-proposal-decorators', {legacy: true}],
182
- react-obsidian/dist/transformers/babel-plugin-obsidian-provide
183
- ],
276
+ ['@babel/plugin-proposal-class-properties', { legacy: true }],
277
+ 'babel-plugin-parameter-decorator'
278
+ ]
184
279
  };
185
280
  ```
186
281
 
package/babel.config.js CHANGED
@@ -1,12 +1,13 @@
1
1
  module.exports = {
2
2
  presets: [
3
- ['@babel/preset-env', { targets: { node: 'current' } }],
4
- '@babel/preset-typescript',
3
+ ['@babel/preset-env', { targets: { node: 'current' }, loose: true }],
4
+ ['@babel/preset-typescript', {'onlyRemoveTypeImports': true}],
5
5
  '@babel/preset-react',
6
6
  ],
7
7
  plugins: [
8
- `${__dirname}/dist/transformers/babel-plugin-obsidian-provide`,
8
+ `${__dirname}/dist/transformers/babel-plugin-obsidian`,
9
9
  ['@babel/plugin-proposal-decorators', { legacy: true }],
10
- ['@babel/plugin-proposal-class-properties', { legacy: true }],
10
+ ['@babel/plugin-proposal-class-properties', { loose: true }],
11
+ 'babel-plugin-parameter-decorator'
11
12
  ],
12
13
  };
@@ -3,6 +3,7 @@ import { Constructable, GraphInternals, ServiceLocator } from './types';
3
3
  import { GraphMiddleware } from './graph/registry/GraphMiddleware';
4
4
  export default class Obsidian {
5
5
  obtain<T extends ObjectGraph<P>, P = any>(Graph: Constructable<T>, props?: P): ServiceLocator<Omit<T, GraphInternals>>;
6
+ inject<T extends object>(target: T): object;
6
7
  addGraphMiddleware(middleware: GraphMiddleware): void;
7
8
  clearGraphMiddlewares(): void;
8
9
  }
@@ -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;AAEnE,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,kBAAkB,CAAC,UAAU,EAAE,eAAe;IAI9C,qBAAqB;CAGtB"}
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;IAIlC,kBAAkB,CAAC,UAAU,EAAE,eAAe;IAI9C,qBAAqB;CAGtB"}
@@ -4,12 +4,16 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  var GraphRegistry_1 = __importDefault(require("./graph/registry/GraphRegistry"));
7
+ var LazyInjector_1 = __importDefault(require("./injectors/class/LazyInjector"));
7
8
  var Obsidian = /** @class */ (function () {
8
9
  function Obsidian() {
9
10
  }
10
11
  Obsidian.prototype.obtain = function (Graph, props) {
11
12
  return GraphRegistry_1.default.resolve(Graph, props);
12
13
  };
14
+ Obsidian.prototype.inject = function (target) {
15
+ return LazyInjector_1.default.inject(target);
16
+ };
13
17
  Obsidian.prototype.addGraphMiddleware = function (middleware) {
14
18
  GraphRegistry_1.default.addGraphMiddleware(middleware);
15
19
  };
@@ -1 +1 @@
1
- {"version":3,"file":"Obsidian.js","sourceRoot":"","sources":["../../src/Obsidian.ts"],"names":[],"mappings":";;;;;AAAA,iFAA2D;AAK3D;IAAA;IAeA,CAAC;IAdC,yBAAM,GAAN,UACE,KAAuB,EACvB,KAAS;QAET,OAAO,uBAAa,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAiC,CAAC;IAC7E,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;IACH,eAAC;AAAD,CAAC,AAfD,IAeC"}
1
+ {"version":3,"file":"Obsidian.js","sourceRoot":"","sources":["../../src/Obsidian.ts"],"names":[],"mappings":";;;;;AAAA,iFAA2D;AAI3D,gFAA0D;AAE1D;IAAA;IAmBA,CAAC;IAlBC,yBAAM,GAAN,UACE,KAAuB,EACvB,KAAS;QAET,OAAO,uBAAa,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAiC,CAAC;IAC7E,CAAC;IAED,yBAAM,GAAN,UAAyB,MAAS;QAChC,OAAO,sBAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACrC,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;IACH,eAAC;AAAD,CAAC,AAnBD,IAmBC"}
@@ -1,10 +1,9 @@
1
- import { Constructable, Scope } from '../types';
1
+ import { Constructable } from '../types';
2
2
  import 'reflect-metadata';
3
3
  import { ObjectGraph } from '../graph/ObjectGraph';
4
4
  interface GraphParams {
5
- scope: Scope | undefined;
6
5
  subgraphs: Constructable<ObjectGraph>[];
7
6
  }
8
- export declare function Graph({ scope, subgraphs, }?: Partial<GraphParams>): <T extends ObjectGraph<unknown>>(constructor: Constructable<T>) => Constructable<T>;
7
+ export declare function Graph({ subgraphs, }?: Partial<GraphParams>): <T extends ObjectGraph<unknown>>(constructor: Constructable<T>) => Constructable<T>;
9
8
  export {};
10
9
  //# sourceMappingURL=Graph.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Graph.d.ts","sourceRoot":"","sources":["../../../src/decorators/Graph.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,kBAAkB,CAAC;AAE1B,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,UAAU,WAAW;IACnB,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC;IACzB,SAAS,EAAE,aAAa,CAAC,WAAW,CAAC,EAAE,CAAC;CACzC;AAED,wBAAgB,KAAK,CAAC,EACpB,KAAK,EACL,SAAc,GACf,GAAE,OAAO,CAAC,WAAW,CAAM,uFAM3B"}
1
+ {"version":3,"file":"Graph.d.ts","sourceRoot":"","sources":["../../../src/decorators/Graph.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,kBAAkB,CAAC;AAE1B,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,UAAU,WAAW;IACnB,SAAS,EAAE,aAAa,CAAC,WAAW,CAAC,EAAE,CAAC;CACzC;AAED,wBAAgB,KAAK,CAAC,EACpB,SAAc,GACf,GAAE,OAAO,CAAC,WAAW,CAAM,uFAK3B"}
@@ -7,10 +7,9 @@ exports.Graph = void 0;
7
7
  require("reflect-metadata");
8
8
  var GraphRegistry_1 = __importDefault(require("../graph/registry/GraphRegistry"));
9
9
  function Graph(_a) {
10
- var _b = _a === void 0 ? {} : _a, scope = _b.scope, _c = _b.subgraphs, subgraphs = _c === void 0 ? [] : _c;
10
+ var _b = _a === void 0 ? {} : _a, _c = _b.subgraphs, subgraphs = _c === void 0 ? [] : _c;
11
11
  return function (constructor) {
12
- Reflect.defineMetadata('scope', scope, constructor);
13
- GraphRegistry_1.default.register(constructor, scope, subgraphs);
12
+ GraphRegistry_1.default.register(constructor, subgraphs);
14
13
  return constructor;
15
14
  };
16
15
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Graph.js","sourceRoot":"","sources":["../../../src/decorators/Graph.ts"],"names":[],"mappings":";;;;;;AACA,4BAA0B;AAC1B,kFAA4D;AAQ5D,SAAgB,KAAK,CAAC,EAGM;QAHN,qBAGI,EAAE,KAAA,EAF1B,KAAK,WAAA,EACL,iBAAc,EAAd,SAAS,mBAAG,EAAE,KAAA;IAEd,OAAO,UAAwB,WAA6B;QAC1D,OAAO,CAAC,cAAc,CAAC,OAAO,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;QACpD,uBAAa,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;QACtD,OAAO,WAAW,CAAC;IACrB,CAAC,CAAC;AACJ,CAAC;AATD,sBASC"}
1
+ {"version":3,"file":"Graph.js","sourceRoot":"","sources":["../../../src/decorators/Graph.ts"],"names":[],"mappings":";;;;;;AACA,4BAA0B;AAC1B,kFAA4D;AAO5D,SAAgB,KAAK,CAAC,EAEM;QAFN,qBAEI,EAAE,KAAA,EAD1B,iBAAc,EAAd,SAAS,mBAAG,EAAE,KAAA;IAEd,OAAO,UAAwB,WAA6B;QAC1D,uBAAa,CAAC,QAAQ,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QAC/C,OAAO,WAAW,CAAC;IACrB,CAAC,CAAC;AACJ,CAAC;AAPD,sBAOC"}
@@ -0,0 +1,4 @@
1
+ import { Constructable } from '../types';
2
+ import { ObjectGraph } from '../graph/ObjectGraph';
3
+ export declare function Singleton(): (constructorOrGraph: Constructable<ObjectGraph> | ObjectGraph, _property?: string | undefined, descriptor?: PropertyDescriptor | undefined) => any;
4
+ //# sourceMappingURL=Singleton.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Singleton = void 0;
4
+ function Singleton() {
5
+ return function singleton(constructorOrGraph, _property, descriptor) {
6
+ var target = descriptor || constructorOrGraph;
7
+ Reflect.defineMetadata('isSingleton', true, target);
8
+ return target;
9
+ };
10
+ }
11
+ exports.Singleton = Singleton;
12
+ //# sourceMappingURL=Singleton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Singleton.js","sourceRoot":"","sources":["../../../src/decorators/Singleton.ts"],"names":[],"mappings":";;;AAGA,SAAgB,SAAS;IACvB,OAAO,SAAS,SAAS,CACvB,kBAA4D,EAC5D,SAAkB,EAClB,UAA+B;QAE/B,IAAM,MAAM,GAAG,UAAU,IAAI,kBAAkB,CAAC;QAChD,OAAO,CAAC,cAAc,CAAC,aAAa,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QACpD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC;AAVD,8BAUC"}
@@ -0,0 +1,2 @@
1
+ export declare function Inject(name?: string): (target: Object | any, _propertyKey?: string | undefined, indexOrPropertyDescriptor?: number | PropertyDescriptor | undefined) => void;
2
+ //# sourceMappingURL=Inject.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,21 @@
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
+ exports.Inject = void 0;
7
+ var lodash_1 = require("lodash");
8
+ var InjectionMetadata_1 = __importDefault(require("../../injectors/class/InjectionMetadata"));
9
+ function Inject(name) {
10
+ return function (target, _propertyKey, indexOrPropertyDescriptor) {
11
+ var metadata = new InjectionMetadata_1.default();
12
+ if ((0, lodash_1.isNumber)(indexOrPropertyDescriptor)) {
13
+ metadata.saveConstructorParamMetadata(target, name, indexOrPropertyDescriptor);
14
+ }
15
+ else {
16
+ metadata.savePropertyMetadata(target.constructor, name);
17
+ }
18
+ };
19
+ }
20
+ exports.Inject = Inject;
21
+ //# sourceMappingURL=Inject.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Inject.js","sourceRoot":"","sources":["../../../../src/decorators/inject/Inject.ts"],"names":[],"mappings":";;;;;;AAAA,iCAAkC;AAClC,8FAAwE;AAExE,SAAgB,MAAM,CAAC,IAAa;IAClC,OAAO,UACL,MAAoB,EACpB,YAAqB,EACrB,yBAAuD;QAEvD,IAAM,QAAQ,GAAG,IAAI,2BAAiB,EAAE,CAAC;QACzC,IAAI,IAAA,iBAAQ,EAAC,yBAAyB,CAAC,EAAE;YACvC,QAAQ,CAAC,4BAA4B,CAAC,MAAM,EAAE,IAAK,EAAE,yBAAyB,CAAC,CAAC;SACjF;aAAM;YACL,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,WAAW,EAAE,IAAK,CAAC,CAAC;SAC1D;IACH,CAAC,CAAC;AACJ,CAAC;AAbD,wBAaC"}
@@ -0,0 +1,4 @@
1
+ import { Constructable } from '../../types';
2
+ import { Graph } from '../../graph/Graph';
3
+ export declare function Injectable(Graph: Constructable<Graph>): any;
4
+ //# sourceMappingURL=Injectable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Injectable.d.ts","sourceRoot":"","sources":["../../../../src/decorators/inject/Injectable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAI1C,wBAAgB,UAAU,CAAC,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,GAAG,GAAG,CAE3D"}
@@ -0,0 +1,13 @@
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
+ exports.Injectable = void 0;
7
+ var GraphRegistry_1 = __importDefault(require("../../graph/registry/GraphRegistry"));
8
+ var ClassInjector_1 = __importDefault(require("../../injectors/class/ClassInjector"));
9
+ function Injectable(Graph) {
10
+ return new ClassInjector_1.default(GraphRegistry_1.default).inject(Graph);
11
+ }
12
+ exports.Injectable = Injectable;
13
+ //# sourceMappingURL=Injectable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Injectable.js","sourceRoot":"","sources":["../../../../src/decorators/inject/Injectable.ts"],"names":[],"mappings":";;;;;;AAEA,qFAA+D;AAC/D,sFAAgE;AAEhE,SAAgB,UAAU,CAAC,KAA2B;IACpD,OAAO,IAAI,uBAAa,CAAC,uBAAa,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACxD,CAAC;AAFD,gCAEC"}
@@ -0,0 +1,2 @@
1
+ export declare function LazyInject(name?: string): any;
2
+ //# sourceMappingURL=LazyInject.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LazyInject.d.ts","sourceRoot":"","sources":["../../../../src/decorators/inject/LazyInject.ts"],"names":[],"mappings":"AAEA,wBAAgB,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,GAAG,CAK7C"}
@@ -0,0 +1,15 @@
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
+ exports.LazyInject = void 0;
7
+ var InjectionMetadata_1 = __importDefault(require("../../injectors/class/InjectionMetadata"));
8
+ function LazyInject(name) {
9
+ return function (target) {
10
+ var metadata = new InjectionMetadata_1.default();
11
+ metadata.saveLazyPropertyMetadata(target.constructor, name);
12
+ };
13
+ }
14
+ exports.LazyInject = LazyInject;
15
+ //# sourceMappingURL=LazyInject.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LazyInject.js","sourceRoot":"","sources":["../../../../src/decorators/inject/LazyInject.ts"],"names":[],"mappings":";;;;;;AAAA,8FAAwE;AAExE,SAAgB,UAAU,CAAC,IAAa;IACtC,OAAO,UAAC,MAAc;QACpB,IAAM,QAAQ,GAAG,IAAI,2BAAiB,EAAE,CAAC;QACzC,QAAQ,CAAC,wBAAwB,CAAC,MAAM,CAAC,WAAW,EAAE,IAAK,CAAC,CAAC;IAC/D,CAAC,CAAC;AACJ,CAAC;AALD,gCAKC"}
@@ -1 +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"}
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,CAWzG"}
@@ -9,12 +9,12 @@ function memoizeDescriptor(propertyKey, descriptor) {
9
9
  for (var _i = 0; _i < arguments.length; _i++) {
10
10
  args[_i] = arguments[_i];
11
11
  }
12
+ var memoizationTarget = Reflect.getMetadata('isSingleton', descriptor) ? descriptor : this;
12
13
  var key = "memoized".concat(propertyKey);
13
- if (Reflect.hasMetadata(key, this)) {
14
- return Reflect.getMetadata(key, this);
15
- }
14
+ if (Reflect.hasMetadata(key, memoizationTarget))
15
+ return Reflect.getMetadata(key, memoizationTarget);
16
16
  var result = originalValue.apply(this, args);
17
- Reflect.defineMetadata(key, result, this);
17
+ Reflect.defineMetadata(key, result, memoizationTarget);
18
18
  return result;
19
19
  };
20
20
  return descriptor;
@@ -1 +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"}
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,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;QAC7F,IAAM,GAAG,GAAG,kBAAW,WAAW,CAAE,CAAC;QACrC,IAAI,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,iBAAiB,CAAC;YAAE,OAAO,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;QACpG,IAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC/C,OAAO,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC;QACvD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;IACF,OAAO,UAAU,CAAC;AACpB,CAAC;AAXD,8CAWC"}
@@ -1,7 +1,5 @@
1
- import { Scope } from '../../types';
2
1
  import { Graph } from '../../graph/Graph';
3
2
  interface ProvidesParams {
4
- scope?: Scope;
5
3
  name: string;
6
4
  }
7
5
  export declare function Provides({ name }?: Partial<ProvidesParams>): (graph: Graph, propertyKey: string, descriptor: PropertyDescriptor) => PropertyDescriptor;
@@ -1 +1 @@
1
- {"version":3,"file":"Provides.d.ts","sourceRoot":"","sources":["../../../../src/decorators/provides/Provides.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAI1C,UAAU,cAAc;IACtB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,QAAQ,CAAC,EAAE,IAAI,EAAE,GAAE,OAAO,CAAC,cAAc,CAAM,WAC9B,KAAK,eAAe,MAAM,cAAc,kBAAkB,wBAI1F"}
1
+ {"version":3,"file":"Provides.d.ts","sourceRoot":"","sources":["../../../../src/decorators/provides/Provides.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAI1C,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,QAAQ,CAAC,EAAE,IAAI,EAAE,GAAE,OAAO,CAAC,cAAc,CAAM,WAC9B,KAAK,eAAe,MAAM,cAAc,kBAAkB,wBAI1F"}
@@ -1 +1 @@
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
+ {"version":3,"file":"Provides.js","sourceRoot":"","sources":["../../../../src/decorators/provides/Provides.ts"],"names":[],"mappings":";;;;;;AACA,0FAAoE;AACpE,yDAAwD;AAMxD,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
- import { Scope } from '../types';
2
1
  import { Graph } from './Graph';
2
+ import { Constructable } from '../types';
3
3
  export declare abstract class ObjectGraph<T = unknown> implements Graph {
4
4
  protected _props?: T | undefined;
5
- scope: Scope;
6
5
  private propertyRetriever;
7
6
  get name(): string;
8
7
  constructor(_props?: T | undefined);
9
8
  retrieve<Dependency>(property: string, receiver?: unknown): Dependency | undefined;
10
9
  }
10
+ export declare function isGraph(object: Constructable<ObjectGraph> | any): object is Constructable<ObjectGraph>;
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;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"}
1
+ {"version":3,"file":"ObjectGraph.d.ts","sourceRoot":"","sources":["../../../src/graph/ObjectGraph.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,8BAAsB,WAAW,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,KAAK;IAQjD,SAAS,CAAC,MAAM,CAAC;IAP7B,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;AAID,wBAAgB,OAAO,CAAC,MAAM,EAAE,aAAa,CAAC,WAAW,CAAC,GAAG,GAAG,GAAG,MAAM,IAAI,aAAa,CAAC,WAAW,CAAC,CAEtG"}
@@ -12,7 +12,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
12
12
  return (mod && mod.__esModule) ? mod : { "default": mod };
13
13
  };
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.ObjectGraph = void 0;
15
+ exports.isGraph = exports.ObjectGraph = void 0;
16
16
  var lodash_1 = require("lodash");
17
17
  var Memoize_1 = __importDefault(require("../decorators/Memoize"));
18
18
  var ProviderBinder_1 = require("./ProviderBinder");
@@ -41,4 +41,9 @@ var ObjectGraph = /** @class */ (function () {
41
41
  return ObjectGraph;
42
42
  }());
43
43
  exports.ObjectGraph = ObjectGraph;
44
+ Reflect.set(ObjectGraph, 'typeDiscriminator', 'ObjectGraph');
45
+ function isGraph(object) {
46
+ return Reflect.get(object, 'typeDiscriminator') === 'ObjectGraph';
47
+ }
48
+ exports.isGraph = isGraph;
44
49
  //# sourceMappingURL=ObjectGraph.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ObjectGraph.js","sourceRoot":"","sources":["../../../src/graph/ObjectGraph.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,iCAAkC;AAClC,kEAA4C;AAE5C,mDAAiD;AAEjD,0EAAoD;AAEpD;IAUE,qBAAsB,MAAU;QAAV,WAAM,GAAN,MAAM,CAAI;QAPxB,sBAAiB,GAAG,IAAI,2BAAiB,CAAC,IAAI,CAAC,CAAC;QAQtD,IAAA,8BAAa,EAAC,IAAI,CAAC,CAAC;IACtB,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"}
1
+ {"version":3,"file":"ObjectGraph.js","sourceRoot":"","sources":["../../../src/graph/ObjectGraph.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,iCAAkC;AAClC,kEAA4C;AAC5C,mDAAiD;AAEjD,0EAAoD;AAGpD;IAQE,qBAAsB,MAAU;QAAV,WAAM,GAAN,MAAM,CAAI;QAPxB,sBAAiB,GAAG,IAAI,2BAAiB,CAAC,IAAI,CAAC,CAAC;QAQtD,IAAA,8BAAa,EAAC,IAAI,CAAC,CAAC;IACtB,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,AAfD,IAeC;AAfqB,kCAAW;AAiBjC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,mBAAmB,EAAE,aAAa,CAAC,CAAC;AAE7D,SAAgB,OAAO,CAAC,MAAwC;IAC9D,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,KAAK,aAAa,CAAC;AACpE,CAAC;AAFD,0BAEC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ProviderBinder.d.ts","sourceRoot":"","sources":["../../../src/graph/ProviderBinder.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAO/D"}
1
+ {"version":3,"file":"ProviderBinder.d.ts","sourceRoot":"","sources":["../../../src/graph/ProviderBinder.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAM/D"}
@@ -8,10 +8,9 @@ exports.bindProviders = void 0;
8
8
  var ProvidedPropertiesStore_1 = __importDefault(require("../ProvidedPropertiesStore"));
9
9
  function bindProviders(graph) {
10
10
  ProvidedPropertiesStore_1.default.getMangledProperties(graph)
11
+ .filter(function (method) { return graph[method]; })
11
12
  .forEach(function (method) {
12
- if (graph[method] !== undefined) {
13
- graph[method] = graph[method].bind(graph);
14
- }
13
+ graph[method] = graph[method].bind(graph);
15
14
  });
16
15
  }
17
16
  exports.bindProviders = bindProviders;
@@ -1 +1 @@
1
- {"version":3,"file":"ProviderBinder.js","sourceRoot":"","sources":["../../../src/graph/ProviderBinder.ts"],"names":[],"mappings":";;;;;;AAAA,sCAAsC;AACtC,uFAAiE;AAGjE,SAAgB,aAAa,CAAC,KAAkC;IAC9D,iCAAuB,CAAC,oBAAoB,CAAC,KAAK,CAAC;SAChD,OAAO,CAAC,UAAC,MAAM;QACd,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,SAAS,EAAE;YAC/B,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SAC3C;IACH,CAAC,CAAC,CAAC;AACP,CAAC;AAPD,sCAOC"}
1
+ {"version":3,"file":"ProviderBinder.js","sourceRoot":"","sources":["../../../src/graph/ProviderBinder.ts"],"names":[],"mappings":";;;;;;AAAA,sCAAsC;AACtC,uFAAiE;AAGjE,SAAgB,aAAa,CAAC,KAAkC;IAC9D,iCAAuB,CAAC,oBAAoB,CAAC,KAAK,CAAC;SAChD,MAAM,CAAC,UAAC,MAAM,IAAK,OAAA,KAAK,CAAC,MAAM,CAAC,EAAb,CAAa,CAAC;SACjC,OAAO,CAAC,UAAC,MAAM;QACd,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACP,CAAC;AAND,sCAMC"}
@@ -1,21 +1,24 @@
1
- import { Constructable, Scope } from '../../types';
1
+ import { Constructable } from '../../types';
2
2
  import { Graph } from '../Graph';
3
3
  import { Middleware } from './Middleware';
4
- declare class GraphRegistry {
5
- private readonly scopedGraphs;
4
+ export declare class GraphRegistry {
6
5
  private readonly constructorToInstance;
7
6
  private readonly instanceToConstructor;
7
+ private readonly nameToInstance;
8
8
  private readonly graphToSubgraphs;
9
- private graphMiddlewares;
10
- register(constructor: Constructable<Graph>, scope?: Scope | undefined, subgraphs?: Constructable<Graph>[]): void;
11
- has(Graph: Constructable<Graph>): boolean;
12
- get<T extends Graph>(Graph: Constructable<T>): T;
13
- set(Graph: Constructable<Graph>, graph: Graph): void;
9
+ private readonly graphMiddlewares;
10
+ register(constructor: Constructable<Graph>, subgraphs?: Constructable<Graph>[]): void;
14
11
  getSubgraphs(graph: Graph): Graph[];
12
+ getGraphInstance(name: string): Graph;
15
13
  resolve<T extends Graph>(Graph: Constructable<T>, props?: any): T;
14
+ private has;
15
+ private getFirst;
16
+ private set;
17
+ private isSingleton;
16
18
  clear(graph: Graph): void;
17
19
  addGraphMiddleware(middleware: Middleware<Graph>): void;
18
20
  clearGraphMiddlewares(): void;
21
+ reset(): void;
19
22
  }
20
23
  declare const _default: GraphRegistry;
21
24
  export default _default;
@@ -1 +1 @@
1
- {"version":3,"file":"GraphRegistry.d.ts","sourceRoot":"","sources":["../../../../src/graph/registry/GraphRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG1C,cAAM,aAAa;IACjB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA2C;IACxE,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAA0C;IAChF,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAA0C;IAChF,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA8D;IAC/F,OAAO,CAAC,gBAAgB,CAA8B;IAEtD,QAAQ,CACN,WAAW,EAAE,aAAa,CAAC,KAAK,CAAC,EACjC,KAAK,GAAE,KAAK,GAAG,SAAqB,EACpC,SAAS,GAAE,aAAa,CAAC,KAAK,CAAC,EAAO;IAMxC,GAAG,CAAC,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC;IAI/B,GAAG,CAAC,CAAC,SAAS,KAAK,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC;IAIhD,GAAG,CAAC,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK;IAK7C,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,EAAE;IAMnC,OAAO,CAAC,CAAC,SAAS,KAAK,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,GAAG,GAAG,CAAC;IAcjE,KAAK,CAAC,KAAK,EAAE,KAAK;IAMlB,kBAAkB,CAAC,UAAU,EAAE,UAAU,CAAC,KAAK,CAAC;IAIhD,qBAAqB;CAGtB;;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,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,KAAK;CAKN;;AAED,wBAAmC"}