@rolster/invertly 1.2.0 → 1.3.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.
Files changed (48) hide show
  1. package/dist/cjs/index.js +241 -237
  2. package/dist/cjs/index.js.map +1 -1
  3. package/dist/es/index.js +241 -237
  4. package/dist/es/index.js.map +1 -1
  5. package/dist/esm/decorators/index.d.ts +2 -2
  6. package/dist/esm/decorators/index.js +2 -2
  7. package/dist/esm/decorators/inject.decorator.d.ts +4 -4
  8. package/dist/esm/decorators/inject.decorator.js +15 -16
  9. package/dist/esm/decorators/inject.decorator.js.map +1 -1
  10. package/dist/esm/decorators/injectable.decorator.d.ts +6 -6
  11. package/dist/esm/decorators/injectable.decorator.js +10 -10
  12. package/dist/esm/factories/container.factory.d.ts +8 -9
  13. package/dist/esm/factories/container.factory.js +105 -105
  14. package/dist/esm/factories/container.factory.js.map +1 -1
  15. package/dist/esm/factories/index.d.ts +21 -21
  16. package/dist/esm/factories/index.js +32 -34
  17. package/dist/esm/factories/index.js.map +1 -1
  18. package/dist/esm/index.d.ts +6 -6
  19. package/dist/esm/index.js +5 -5
  20. package/dist/esm/index.js.map +1 -1
  21. package/dist/esm/stores/context.store.d.ts +7 -7
  22. package/dist/esm/stores/context.store.js +14 -14
  23. package/dist/esm/stores/index.d.ts +5 -5
  24. package/dist/esm/stores/index.js +5 -5
  25. package/dist/esm/stores/inject.store.d.ts +7 -6
  26. package/dist/esm/stores/inject.store.js +13 -19
  27. package/dist/esm/stores/inject.store.js.map +1 -1
  28. package/dist/esm/stores/injectable.store.d.ts +8 -8
  29. package/dist/esm/stores/injectable.store.js +11 -11
  30. package/dist/esm/stores/locator.store.d.ts +7 -7
  31. package/dist/esm/stores/locator.store.js +31 -32
  32. package/dist/esm/stores/locator.store.js.map +1 -1
  33. package/dist/esm/stores/scope.store.d.ts +6 -7
  34. package/dist/esm/stores/scope.store.js +11 -11
  35. package/dist/esm/stores/scope.store.js.map +1 -1
  36. package/dist/esm/types/constructable.type.d.ts +1 -1
  37. package/dist/esm/types/constructable.type.js +1 -1
  38. package/dist/esm/types/context.type.d.ts +5 -5
  39. package/dist/esm/types/context.type.js +1 -1
  40. package/dist/esm/types/index.d.ts +5 -5
  41. package/dist/esm/types/index.js +5 -5
  42. package/dist/esm/types/inject.type.d.ts +9 -9
  43. package/dist/esm/types/inject.type.js +1 -1
  44. package/dist/esm/types/injectable.type.d.ts +12 -12
  45. package/dist/esm/types/injectable.type.js +1 -1
  46. package/dist/esm/types/locator.type.d.ts +8 -8
  47. package/dist/esm/types/locator.type.js +1 -1
  48. package/package.json +5 -4
package/dist/cjs/index.js CHANGED
@@ -4,261 +4,265 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  require('reflect-metadata');
6
6
 
7
- class Context {
8
- constructor() {
9
- this.store = new Map();
10
- }
11
- set(key, value) {
12
- this.store.set(key, value);
13
- }
14
- request(key) {
15
- return this.store.get(key);
16
- }
17
- has(key) {
18
- return this.store.has(key);
19
- }
7
+ class Context {
8
+ constructor() {
9
+ this.store = new Map();
10
+ }
11
+ set(key, value) {
12
+ this.store.set(key, value);
13
+ }
14
+ request(key) {
15
+ return this.store.get(key);
16
+ }
17
+ has(key) {
18
+ return this.store.has(key);
19
+ }
20
20
  }
21
21
 
22
- class InjectStore {
23
- constructor() {
24
- this.collection = new Map();
25
- }
26
- push(options) {
27
- const { parent, index } = options;
28
- const injects = this.request(parent);
29
- injects[index] = options;
30
- }
31
- request(token) {
32
- const current = this.collection.get(token);
33
- if (current) {
34
- return current;
35
- }
36
- const injects = [];
37
- this.collection.set(token, injects);
38
- return injects;
39
- }
22
+ class SecureMap extends Map {
23
+ constructor(initialValue) {
24
+ super();
25
+ this.initialValue = initialValue;
26
+ }
27
+ request(key, initialValue) {
28
+ let value = this.get(key);
29
+ if (!value) {
30
+ value = initialValue ?? this.initialValue();
31
+ this.set(key, value);
32
+ }
33
+ return value;
34
+ }
40
35
  }
41
36
 
42
- class InjectableStore {
43
- constructor() {
44
- this.collection = new Map();
45
- }
46
- push(options) {
47
- this.collection.set(options.token, options);
48
- }
49
- request(token) {
50
- return this.collection.get(token);
51
- }
37
+ class InjectStore {
38
+ constructor() {
39
+ this.collection = new SecureMap(() => []);
40
+ }
41
+ push(options) {
42
+ const injects = this.collection.request(options.parent);
43
+ injects[options.index] = options;
44
+ }
45
+ request(token) {
46
+ return this.collection.request(token);
47
+ }
52
48
  }
53
49
 
54
- class LocatorStore {
55
- constructor() {
56
- this.collection = new Map();
57
- }
58
- save(dependencies) {
59
- dependencies.forEach((config) => {
60
- this.collection.set(config.token, config);
61
- });
62
- }
63
- push(reference, token) {
64
- if (typeof reference !== 'string' && typeof reference !== 'symbol') {
65
- const { token, useClass } = reference;
66
- this.collection.set(token, { token, useClass });
67
- }
68
- else if (token) {
69
- this.collection.set(reference, { token, useClass: token });
70
- }
71
- }
72
- request(token) {
73
- return this.collection.get(token);
74
- }
75
- }
76
- const locatorStore = new LocatorStore();
77
- function saveInLocator(dependencies) {
78
- locatorStore.save(dependencies);
79
- }
80
- function pushInLocator(reference, token) {
81
- locatorStore.push(reference, token);
82
- }
83
- function requestInLocator(token) {
84
- return locatorStore.request(token);
50
+ class InjectableStore {
51
+ constructor() {
52
+ this.collection = new Map();
53
+ }
54
+ push(options) {
55
+ this.collection.set(options.token, options);
56
+ }
57
+ request(token) {
58
+ return this.collection.get(token);
59
+ }
85
60
  }
86
61
 
87
- class ScopeStore {
88
- constructor() {
89
- this.collection = new Map();
90
- }
91
- push(token, value) {
92
- this.collection.set(token, value);
93
- }
94
- request(token) {
95
- return this.collection.get(token);
96
- }
62
+ class LocatorStore {
63
+ constructor() {
64
+ this.collection = new Map();
65
+ }
66
+ save(options) {
67
+ options.forEach((option) => {
68
+ this.collection.set(option.token, option);
69
+ });
70
+ }
71
+ push(reference, token) {
72
+ if (typeof reference !== 'string' && typeof reference !== 'symbol') {
73
+ this.collection.set(reference.token, reference);
74
+ }
75
+ else if (token) {
76
+ this.collection.set(reference, { token, useClass: token });
77
+ }
78
+ }
79
+ request(token) {
80
+ return this.collection.get(token);
81
+ }
82
+ }
83
+ const LOCATOR_STORE = new LocatorStore();
84
+ function saveInLocator(dependencies) {
85
+ LOCATOR_STORE.save(dependencies);
86
+ }
87
+ function pushInLocator(reference, token) {
88
+ LOCATOR_STORE.push(reference, token);
89
+ }
90
+ function requestInLocator(token) {
91
+ return LOCATOR_STORE.request(token);
97
92
  }
98
93
 
99
- class Warehouse {
100
- constructor() {
101
- this.scope = new ScopeStore();
102
- this.injectables = new InjectableStore();
103
- this.injects = new InjectStore();
104
- }
105
- }
106
- class Dependency {
107
- constructor(warehouse, context) {
108
- this.warehouse = warehouse;
109
- this.context = context;
110
- this.scope = new ScopeStore();
111
- }
112
- build(injectable) {
113
- const options = this.warehouse.injectables.request(injectable);
114
- if (!options) {
115
- throw Error(`Class ${injectable.toString()} is not found in the collection`);
116
- }
117
- const { scopeable, singleton, token } = options;
118
- return this.createInstance({ token, scopeable, singleton });
119
- }
120
- createObject(token) {
121
- const Constructor = token;
122
- const tokens = this.reflectTokens(Constructor);
123
- const params = tokens
124
- ? this.createReflectArgs({ token, tokens })
125
- : this.createTokenArgs(token);
126
- return new Constructor(...params);
127
- }
128
- reflectTokens(constructable) {
129
- return Reflect.getMetadata('design:paramtypes', constructable);
130
- }
131
- createFromScope({ token, scope }) {
132
- const instance = scope.request(token);
133
- if (instance) {
134
- return instance;
135
- }
136
- const object = this.createObject(token);
137
- scope.push(token, object);
138
- return object;
139
- }
140
- createFromContainer(token) {
141
- return this.createFromScope({ token, scope: this.warehouse.scope });
142
- }
143
- createInstance(options) {
144
- const { token, scopeable, singleton } = options;
145
- if (singleton) {
146
- return this.createFromContainer(token);
147
- }
148
- if (scopeable) {
149
- return this.createFromScope({ token, scope: this.scope });
150
- }
151
- return this.createObject(token);
152
- }
153
- createFromDecorator(inject) {
154
- const { token, scopeable, singleton } = inject;
155
- const locator = requestInLocator(token);
156
- return this.createInstance({
157
- token: locator?.useClass ?? token,
158
- scopeable,
159
- singleton
160
- });
161
- }
162
- createReflectArgs({ tokens, token }) {
163
- const injects = this.warehouse.injects.request(token);
164
- return tokens.map((token, index) => {
165
- const inject = injects[index];
166
- if (inject) {
167
- return this.createFromDecorator(inject);
168
- }
169
- const locator = requestInLocator(token);
170
- if (locator) {
171
- const { useClass: token, scopeable, singleton } = locator;
172
- return this.createInstance({ token, scopeable, singleton });
173
- }
174
- if (token === Context) {
175
- return this.context;
176
- }
177
- return this.createObject(token);
178
- });
179
- }
180
- createTokenArgs(token) {
181
- const injects = this.warehouse.injects.request(token);
182
- return injects.reduce((objects, { index, scopeable, singleton, token }) => {
183
- objects[index] = this.createInstance({ token, scopeable, singleton });
184
- return objects;
185
- }, []);
186
- }
187
- }
188
- class Container {
189
- constructor() {
190
- this.warehouse = new Warehouse();
191
- }
192
- registerInjectable(options) {
193
- this.warehouse.injectables.push(options);
194
- }
195
- registerInject(options) {
196
- this.warehouse.injects.push(options);
197
- }
198
- createInjectable(options) {
199
- return new Dependency(this.warehouse, options.context).build(options.token);
200
- }
94
+ class ScopeStore {
95
+ constructor() {
96
+ this.collection = new Map();
97
+ }
98
+ push(token, value) {
99
+ this.collection.set(token, value);
100
+ }
101
+ request(token) {
102
+ return this.collection.get(token);
103
+ }
104
+ }
105
+
106
+ class DataCenter {
107
+ constructor() {
108
+ this.scope = new ScopeStore();
109
+ this.injectables = new InjectableStore();
110
+ this.injects = new InjectStore();
111
+ }
112
+ }
113
+ class InjectableFactory {
114
+ constructor(dataCenter, context) {
115
+ this.dataCenter = dataCenter;
116
+ this.context = context;
117
+ this.scope = new ScopeStore();
118
+ }
119
+ build(injectable) {
120
+ const options = this.dataCenter.injectables.request(injectable);
121
+ if (!options) {
122
+ throw Error(`Class ${injectable.toString()} is not found in the collection`);
123
+ }
124
+ return this.createInstance(options);
125
+ }
126
+ createObject(token) {
127
+ const Constructor = token;
128
+ const tokens = this.reflectTokens(Constructor);
129
+ const params = tokens
130
+ ? this.createReflectArgs({ token, tokens })
131
+ : this.createTokenArgs(token);
132
+ return new Constructor(...params);
133
+ }
134
+ reflectTokens(constructable) {
135
+ return Reflect.getMetadata('design:paramtypes', constructable);
136
+ }
137
+ createFromScope({ token, scope }) {
138
+ let instance = scope.request(token);
139
+ if (!instance) {
140
+ instance = this.createObject(token);
141
+ scope.push(token, instance);
142
+ }
143
+ return instance;
144
+ }
145
+ createFromContainer(token) {
146
+ return this.createFromScope({ token, scope: this.dataCenter.scope });
147
+ }
148
+ createInstance(options) {
149
+ const { token, scopeable, singleton } = options;
150
+ if (singleton) {
151
+ return this.createFromContainer(token);
152
+ }
153
+ if (scopeable) {
154
+ return this.createFromScope({ token, scope: this.scope });
155
+ }
156
+ return this.createObject(token);
157
+ }
158
+ createFromDecorator(inject) {
159
+ const { token, scopeable, singleton } = inject;
160
+ const locator = requestInLocator(token);
161
+ return this.createInstance({
162
+ token: locator?.useClass ?? token,
163
+ scopeable,
164
+ singleton
165
+ });
166
+ }
167
+ createReflectArgs({ tokens, token }) {
168
+ const injects = this.dataCenter.injects.request(token);
169
+ return tokens.map((token, index) => {
170
+ const inject = injects[index];
171
+ if (inject) {
172
+ return this.createFromDecorator(inject);
173
+ }
174
+ const locator = requestInLocator(token);
175
+ if (locator) {
176
+ return this.createInstance({
177
+ ...locator,
178
+ token: locator.useClass
179
+ });
180
+ }
181
+ if (token === Context) {
182
+ return this.context;
183
+ }
184
+ return this.createObject(token);
185
+ });
186
+ }
187
+ createTokenArgs(token) {
188
+ const injects = this.dataCenter.injects.request(token);
189
+ return injects.reduce((objects, options) => {
190
+ objects[options.index] = this.createInstance({ ...options });
191
+ return objects;
192
+ }, []);
193
+ }
194
+ }
195
+ class InvertlyContainer {
196
+ constructor() {
197
+ this.dataCenter = new DataCenter();
198
+ }
199
+ registerInjectable(options) {
200
+ this.dataCenter.injectables.push(options);
201
+ }
202
+ registerInject(options) {
203
+ this.dataCenter.injects.push(options);
204
+ }
205
+ createInjectable(options) {
206
+ return new InjectableFactory(this.dataCenter, options.context).build(options.token);
207
+ }
201
208
  }
202
209
 
203
- const invertlyContainer = new Container();
204
- function createFromInvertly(options, container) {
205
- return (container ?? invertlyContainer).createInjectable(options);
206
- }
207
- function invertly(token, container) {
208
- return createFromInvertly({ token }, container);
209
- }
210
- function registerInjectable(options, container) {
211
- (container ?? invertlyContainer).registerInjectable(options);
212
- }
213
- function registerInject(options, container) {
214
- (container ?? invertlyContainer).registerInject(options);
215
- }
216
- function registerDependency(token, options) {
217
- const { container, injects, scopeable, singleton } = options;
218
- registerInjectable({
219
- token,
220
- scopeable: scopeable ?? false,
221
- singleton: singleton ?? false
222
- }, container);
223
- injects?.forEach((inject, indexParent) => {
224
- const { index, scopeable: childrenScopeable, singleton: childrenSingleton, token: childrenToken } = inject;
225
- registerInject({
226
- index: index ?? indexParent,
227
- parent: token,
228
- scopeable: childrenScopeable ?? scopeable ?? false,
229
- singleton: childrenSingleton ?? singleton ?? false,
230
- token: childrenToken
231
- }, container);
232
- });
210
+ const INVERTLY_CONTAINER = new InvertlyContainer();
211
+ function createFromInvertly(options, container) {
212
+ return (container ?? INVERTLY_CONTAINER).createInjectable(options);
213
+ }
214
+ function invertly(token, container) {
215
+ return createFromInvertly({ token }, container);
216
+ }
217
+ function registerInjectable(options, container) {
218
+ (container ?? INVERTLY_CONTAINER).registerInjectable(options);
219
+ }
220
+ function registerInject(options, container) {
221
+ (container ?? INVERTLY_CONTAINER).registerInject(options);
222
+ }
223
+ function registerDependency(token, options) {
224
+ registerInjectable({
225
+ token,
226
+ scopeable: options.scopeable ?? false,
227
+ singleton: options.singleton ?? false
228
+ }, options.container);
229
+ options.injects?.forEach((inject, indexParent) => {
230
+ registerInject({
231
+ index: inject.index ?? indexParent,
232
+ parent: token,
233
+ scopeable: inject.scopeable ?? options.scopeable ?? false,
234
+ singleton: inject.singleton ?? options.singleton ?? false,
235
+ token: inject.token
236
+ }, options.container);
237
+ });
233
238
  }
234
239
 
235
- function createInject(inject) {
236
- const { scopeable, singleton, token } = inject;
237
- return (parent, _, index) => {
238
- registerInject({ index, parent, scopeable, singleton, token });
239
- };
240
- }
241
- function Singleton(token) {
242
- return createInject({ token, scopeable: false, singleton: true });
243
- }
244
- function Scope(token) {
245
- return createInject({ token, scopeable: true, singleton: false });
246
- }
247
- function Factory(token) {
248
- return createInject({ token, scopeable: false, singleton: false });
240
+ function createInject(inject) {
241
+ return (parent, _, index) => {
242
+ registerInject({ ...inject, index, parent });
243
+ };
244
+ }
245
+ function Singleton(token) {
246
+ return createInject({ token, scopeable: false, singleton: true });
247
+ }
248
+ function Scope(token) {
249
+ return createInject({ token, scopeable: true, singleton: false });
250
+ }
251
+ function Factory(token) {
252
+ return createInject({ token, scopeable: false, singleton: false });
249
253
  }
250
254
 
251
- function Injectable(options) {
252
- return (token) => {
253
- registerInjectable({
254
- scopeable: !!options?.scopeable,
255
- singleton: !!options?.singleton,
256
- token
257
- });
258
- };
255
+ function Injectable(options) {
256
+ return (token) => {
257
+ registerInjectable({
258
+ scopeable: !!options?.scopeable,
259
+ singleton: !!options?.singleton,
260
+ token
261
+ });
262
+ };
259
263
  }
260
264
 
261
- exports.Container = Container;
265
+ exports.Container = InvertlyContainer;
262
266
  exports.Context = Context;
263
267
  exports.Factory = Factory;
264
268
  exports.Injectable = Injectable;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../esm/stores/context.store.js","../esm/stores/inject.store.js","../esm/stores/injectable.store.js","../esm/stores/locator.store.js","../esm/stores/scope.store.js","../esm/factories/container.factory.js","../esm/factories/index.js","../esm/decorators/inject.decorator.js","../esm/decorators/injectable.decorator.js"],"sourcesContent":["export class Context {\r\n constructor() {\r\n this.store = new Map();\r\n }\r\n set(key, value) {\r\n this.store.set(key, value);\r\n }\r\n request(key) {\r\n return this.store.get(key);\r\n }\r\n has(key) {\r\n return this.store.has(key);\r\n }\r\n}\r\n//# sourceMappingURL=context.store.js.map","export class InjectStore {\r\n constructor() {\r\n this.collection = new Map();\r\n }\r\n push(options) {\r\n const { parent, index } = options;\r\n const injects = this.request(parent);\r\n injects[index] = options;\r\n }\r\n request(token) {\r\n const current = this.collection.get(token);\r\n if (current) {\r\n return current;\r\n }\r\n const injects = [];\r\n this.collection.set(token, injects);\r\n return injects;\r\n }\r\n}\r\n//# sourceMappingURL=inject.store.js.map","export class InjectableStore {\r\n constructor() {\r\n this.collection = new Map();\r\n }\r\n push(options) {\r\n this.collection.set(options.token, options);\r\n }\r\n request(token) {\r\n return this.collection.get(token);\r\n }\r\n}\r\n//# sourceMappingURL=injectable.store.js.map","class LocatorStore {\r\n constructor() {\r\n this.collection = new Map();\r\n }\r\n save(dependencies) {\r\n dependencies.forEach((config) => {\r\n this.collection.set(config.token, config);\r\n });\r\n }\r\n push(reference, token) {\r\n if (typeof reference !== 'string' && typeof reference !== 'symbol') {\r\n const { token, useClass } = reference;\r\n this.collection.set(token, { token, useClass });\r\n }\r\n else if (token) {\r\n this.collection.set(reference, { token, useClass: token });\r\n }\r\n }\r\n request(token) {\r\n return this.collection.get(token);\r\n }\r\n}\r\nconst locatorStore = new LocatorStore();\r\nexport function saveInLocator(dependencies) {\r\n locatorStore.save(dependencies);\r\n}\r\nexport function pushInLocator(reference, token) {\r\n locatorStore.push(reference, token);\r\n}\r\nexport function requestInLocator(token) {\r\n return locatorStore.request(token);\r\n}\r\n//# sourceMappingURL=locator.store.js.map","export class ScopeStore {\r\n constructor() {\r\n this.collection = new Map();\r\n }\r\n push(token, value) {\r\n this.collection.set(token, value);\r\n }\r\n request(token) {\r\n return this.collection.get(token);\r\n }\r\n}\r\n//# sourceMappingURL=scope.store.js.map","import 'reflect-metadata';\r\nimport { Context, InjectStore, InjectableStore, ScopeStore, requestInLocator } from '../stores';\r\nclass Warehouse {\r\n constructor() {\r\n this.scope = new ScopeStore();\r\n this.injectables = new InjectableStore();\r\n this.injects = new InjectStore();\r\n }\r\n}\r\nclass Dependency {\r\n constructor(warehouse, context) {\r\n this.warehouse = warehouse;\r\n this.context = context;\r\n this.scope = new ScopeStore();\r\n }\r\n build(injectable) {\r\n const options = this.warehouse.injectables.request(injectable);\r\n if (!options) {\r\n throw Error(`Class ${injectable.toString()} is not found in the collection`);\r\n }\r\n const { scopeable, singleton, token } = options;\r\n return this.createInstance({ token, scopeable, singleton });\r\n }\r\n createObject(token) {\r\n const Constructor = token;\r\n const tokens = this.reflectTokens(Constructor);\r\n const params = tokens\r\n ? this.createReflectArgs({ token, tokens })\r\n : this.createTokenArgs(token);\r\n return new Constructor(...params);\r\n }\r\n reflectTokens(constructable) {\r\n return Reflect.getMetadata('design:paramtypes', constructable);\r\n }\r\n createFromScope({ token, scope }) {\r\n const instance = scope.request(token);\r\n if (instance) {\r\n return instance;\r\n }\r\n const object = this.createObject(token);\r\n scope.push(token, object);\r\n return object;\r\n }\r\n createFromContainer(token) {\r\n return this.createFromScope({ token, scope: this.warehouse.scope });\r\n }\r\n createInstance(options) {\r\n const { token, scopeable, singleton } = options;\r\n if (singleton) {\r\n return this.createFromContainer(token);\r\n }\r\n if (scopeable) {\r\n return this.createFromScope({ token, scope: this.scope });\r\n }\r\n return this.createObject(token);\r\n }\r\n createFromDecorator(inject) {\r\n const { token, scopeable, singleton } = inject;\r\n const locator = requestInLocator(token);\r\n return this.createInstance({\r\n token: locator?.useClass ?? token,\r\n scopeable,\r\n singleton\r\n });\r\n }\r\n createReflectArgs({ tokens, token }) {\r\n const injects = this.warehouse.injects.request(token);\r\n return tokens.map((token, index) => {\r\n const inject = injects[index];\r\n if (inject) {\r\n return this.createFromDecorator(inject);\r\n }\r\n const locator = requestInLocator(token);\r\n if (locator) {\r\n const { useClass: token, scopeable, singleton } = locator;\r\n return this.createInstance({ token, scopeable, singleton });\r\n }\r\n if (token === Context) {\r\n return this.context;\r\n }\r\n return this.createObject(token);\r\n });\r\n }\r\n createTokenArgs(token) {\r\n const injects = this.warehouse.injects.request(token);\r\n return injects.reduce((objects, { index, scopeable, singleton, token }) => {\r\n objects[index] = this.createInstance({ token, scopeable, singleton });\r\n return objects;\r\n }, []);\r\n }\r\n}\r\nexport class Container {\r\n constructor() {\r\n this.warehouse = new Warehouse();\r\n }\r\n registerInjectable(options) {\r\n this.warehouse.injectables.push(options);\r\n }\r\n registerInject(options) {\r\n this.warehouse.injects.push(options);\r\n }\r\n createInjectable(options) {\r\n return new Dependency(this.warehouse, options.context).build(options.token);\r\n }\r\n}\r\n//# sourceMappingURL=container.factory.js.map","import { Container } from './container.factory';\r\nconst invertlyContainer = new Container();\r\nfunction createFromInvertly(options, container) {\r\n return (container ?? invertlyContainer).createInjectable(options);\r\n}\r\nexport function invertly(token, container) {\r\n return createFromInvertly({ token }, container);\r\n}\r\nexport function registerInjectable(options, container) {\r\n (container ?? invertlyContainer).registerInjectable(options);\r\n}\r\nexport function registerInject(options, container) {\r\n (container ?? invertlyContainer).registerInject(options);\r\n}\r\nexport function registerDependency(token, options) {\r\n const { container, injects, scopeable, singleton } = options;\r\n registerInjectable({\r\n token,\r\n scopeable: scopeable ?? false,\r\n singleton: singleton ?? false\r\n }, container);\r\n injects?.forEach((inject, indexParent) => {\r\n const { index, scopeable: childrenScopeable, singleton: childrenSingleton, token: childrenToken } = inject;\r\n registerInject({\r\n index: index ?? indexParent,\r\n parent: token,\r\n scopeable: childrenScopeable ?? scopeable ?? false,\r\n singleton: childrenSingleton ?? singleton ?? false,\r\n token: childrenToken\r\n }, container);\r\n });\r\n}\r\nexport { Container } from './container.factory';\r\nexport default createFromInvertly;\r\n//# sourceMappingURL=index.js.map","import { registerInject } from '../factories';\r\nfunction createInject(inject) {\r\n const { scopeable, singleton, token } = inject;\r\n return (parent, _, index) => {\r\n registerInject({ index, parent, scopeable, singleton, token });\r\n };\r\n}\r\nexport function Singleton(token) {\r\n return createInject({ token, scopeable: false, singleton: true });\r\n}\r\nexport function Scope(token) {\r\n return createInject({ token, scopeable: true, singleton: false });\r\n}\r\nexport function Factory(token) {\r\n return createInject({ token, scopeable: false, singleton: false });\r\n}\r\n//# sourceMappingURL=inject.decorator.js.map","import { registerInjectable } from '../factories';\r\nexport function Injectable(options) {\r\n return (token) => {\r\n registerInjectable({\r\n scopeable: !!options?.scopeable,\r\n singleton: !!options?.singleton,\r\n token\r\n });\r\n };\r\n}\r\n//# sourceMappingURL=injectable.decorator.js.map"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../esm/stores/context.store.js","../../node_modules/@rolster/commons/dist/esm/collections.js","../esm/stores/inject.store.js","../esm/stores/injectable.store.js","../esm/stores/locator.store.js","../esm/stores/scope.store.js","../esm/factories/container.factory.js","../esm/factories/index.js","../esm/decorators/inject.decorator.js","../esm/decorators/injectable.decorator.js"],"sourcesContent":["export class Context {\n constructor() {\n this.store = new Map();\n }\n set(key, value) {\n this.store.set(key, value);\n }\n request(key) {\n return this.store.get(key);\n }\n has(key) {\n return this.store.has(key);\n }\n}\n//# sourceMappingURL=context.store.js.map","export class SecureMap extends Map {\n constructor(initialValue) {\n super();\n this.initialValue = initialValue;\n }\n request(key, initialValue) {\n let value = this.get(key);\n if (!value) {\n value = initialValue ?? this.initialValue();\n this.set(key, value);\n }\n return value;\n }\n}\n//# sourceMappingURL=collections.js.map","import { SecureMap } from '@rolster/commons';\nexport class InjectStore {\n constructor() {\n this.collection = new SecureMap(() => []);\n }\n push(options) {\n const injects = this.collection.request(options.parent);\n injects[options.index] = options;\n }\n request(token) {\n return this.collection.request(token);\n }\n}\n//# sourceMappingURL=inject.store.js.map","export class InjectableStore {\n constructor() {\n this.collection = new Map();\n }\n push(options) {\n this.collection.set(options.token, options);\n }\n request(token) {\n return this.collection.get(token);\n }\n}\n//# sourceMappingURL=injectable.store.js.map","class LocatorStore {\n constructor() {\n this.collection = new Map();\n }\n save(options) {\n options.forEach((option) => {\n this.collection.set(option.token, option);\n });\n }\n push(reference, token) {\n if (typeof reference !== 'string' && typeof reference !== 'symbol') {\n this.collection.set(reference.token, reference);\n }\n else if (token) {\n this.collection.set(reference, { token, useClass: token });\n }\n }\n request(token) {\n return this.collection.get(token);\n }\n}\nconst LOCATOR_STORE = new LocatorStore();\nexport function saveInLocator(dependencies) {\n LOCATOR_STORE.save(dependencies);\n}\nexport function pushInLocator(reference, token) {\n LOCATOR_STORE.push(reference, token);\n}\nexport function requestInLocator(token) {\n return LOCATOR_STORE.request(token);\n}\n//# sourceMappingURL=locator.store.js.map","export class ScopeStore {\n constructor() {\n this.collection = new Map();\n }\n push(token, value) {\n this.collection.set(token, value);\n }\n request(token) {\n return this.collection.get(token);\n }\n}\n//# sourceMappingURL=scope.store.js.map","import 'reflect-metadata';\nimport { Context, InjectStore, InjectableStore, ScopeStore, requestInLocator } from '../stores';\nclass DataCenter {\n constructor() {\n this.scope = new ScopeStore();\n this.injectables = new InjectableStore();\n this.injects = new InjectStore();\n }\n}\nclass InjectableFactory {\n constructor(dataCenter, context) {\n this.dataCenter = dataCenter;\n this.context = context;\n this.scope = new ScopeStore();\n }\n build(injectable) {\n const options = this.dataCenter.injectables.request(injectable);\n if (!options) {\n throw Error(`Class ${injectable.toString()} is not found in the collection`);\n }\n return this.createInstance(options);\n }\n createObject(token) {\n const Constructor = token;\n const tokens = this.reflectTokens(Constructor);\n const params = tokens\n ? this.createReflectArgs({ token, tokens })\n : this.createTokenArgs(token);\n return new Constructor(...params);\n }\n reflectTokens(constructable) {\n return Reflect.getMetadata('design:paramtypes', constructable);\n }\n createFromScope({ token, scope }) {\n let instance = scope.request(token);\n if (!instance) {\n instance = this.createObject(token);\n scope.push(token, instance);\n }\n return instance;\n }\n createFromContainer(token) {\n return this.createFromScope({ token, scope: this.dataCenter.scope });\n }\n createInstance(options) {\n const { token, scopeable, singleton } = options;\n if (singleton) {\n return this.createFromContainer(token);\n }\n if (scopeable) {\n return this.createFromScope({ token, scope: this.scope });\n }\n return this.createObject(token);\n }\n createFromDecorator(inject) {\n const { token, scopeable, singleton } = inject;\n const locator = requestInLocator(token);\n return this.createInstance({\n token: locator?.useClass ?? token,\n scopeable,\n singleton\n });\n }\n createReflectArgs({ tokens, token }) {\n const injects = this.dataCenter.injects.request(token);\n return tokens.map((token, index) => {\n const inject = injects[index];\n if (inject) {\n return this.createFromDecorator(inject);\n }\n const locator = requestInLocator(token);\n if (locator) {\n return this.createInstance({\n ...locator,\n token: locator.useClass\n });\n }\n if (token === Context) {\n return this.context;\n }\n return this.createObject(token);\n });\n }\n createTokenArgs(token) {\n const injects = this.dataCenter.injects.request(token);\n return injects.reduce((objects, options) => {\n objects[options.index] = this.createInstance({ ...options });\n return objects;\n }, []);\n }\n}\nexport class InvertlyContainer {\n constructor() {\n this.dataCenter = new DataCenter();\n }\n registerInjectable(options) {\n this.dataCenter.injectables.push(options);\n }\n registerInject(options) {\n this.dataCenter.injects.push(options);\n }\n createInjectable(options) {\n return new InjectableFactory(this.dataCenter, options.context).build(options.token);\n }\n}\n//# sourceMappingURL=container.factory.js.map","import { InvertlyContainer } from './container.factory';\nconst INVERTLY_CONTAINER = new InvertlyContainer();\nfunction createFromInvertly(options, container) {\n return (container ?? INVERTLY_CONTAINER).createInjectable(options);\n}\nexport function invertly(token, container) {\n return createFromInvertly({ token }, container);\n}\nexport function registerInjectable(options, container) {\n (container ?? INVERTLY_CONTAINER).registerInjectable(options);\n}\nexport function registerInject(options, container) {\n (container ?? INVERTLY_CONTAINER).registerInject(options);\n}\nexport function registerDependency(token, options) {\n registerInjectable({\n token,\n scopeable: options.scopeable ?? false,\n singleton: options.singleton ?? false\n }, options.container);\n options.injects?.forEach((inject, indexParent) => {\n registerInject({\n index: inject.index ?? indexParent,\n parent: token,\n scopeable: inject.scopeable ?? options.scopeable ?? false,\n singleton: inject.singleton ?? options.singleton ?? false,\n token: inject.token\n }, options.container);\n });\n}\nexport { InvertlyContainer } from './container.factory';\nexport default createFromInvertly;\n//# sourceMappingURL=index.js.map","import { registerInject } from '../factories';\nfunction createInject(inject) {\n return (parent, _, index) => {\n registerInject({ ...inject, index, parent });\n };\n}\nexport function Singleton(token) {\n return createInject({ token, scopeable: false, singleton: true });\n}\nexport function Scope(token) {\n return createInject({ token, scopeable: true, singleton: false });\n}\nexport function Factory(token) {\n return createInject({ token, scopeable: false, singleton: false });\n}\n//# sourceMappingURL=inject.decorator.js.map","import { registerInjectable } from '../factories';\nexport function Injectable(options) {\n return (token) => {\n registerInjectable({\n scopeable: !!options?.scopeable,\n singleton: !!options?.singleton,\n token\n });\n };\n}\n//# sourceMappingURL=injectable.decorator.js.map"],"names":[],"mappings":"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"}