@rolster/invertly 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cjs/index.js CHANGED
@@ -4,9 +4,18 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  require('reflect-metadata');
6
6
 
7
- class Context extends Map {
7
+ class Context {
8
+ constructor() {
9
+ this.store = new Map();
10
+ }
11
+ set(key, value) {
12
+ this.store.set(key, value);
13
+ }
8
14
  request(key) {
9
- return this.get(key);
15
+ return this.store.get(key);
16
+ }
17
+ has(key) {
18
+ return this.store.has(key);
10
19
  }
11
20
  }
12
21
 
@@ -95,17 +104,17 @@ class Warehouse {
95
104
  }
96
105
  }
97
106
  class Dependency {
98
- constructor({ warehouse, context }) {
107
+ constructor(warehouse, context) {
99
108
  this.warehouse = warehouse;
100
109
  this.context = context;
101
110
  this.scope = new ScopeStore();
102
111
  }
103
112
  build(injectable) {
104
- const config = this.warehouse.injectables.request(injectable);
105
- if (!config) {
113
+ const options = this.warehouse.injectables.request(injectable);
114
+ if (!options) {
106
115
  throw Error(`Class ${injectable.toString()} is not found in the collection`);
107
116
  }
108
- const { scopeable, singleton, token } = config;
117
+ const { scopeable, singleton, token } = options;
109
118
  return this.createInstance({ token, scopeable, singleton });
110
119
  }
111
120
  createObject(token) {
@@ -116,8 +125,8 @@ class Dependency {
116
125
  : this.createTokenArgs(token);
117
126
  return new Constructor(...params);
118
127
  }
119
- reflectTokens(reference) {
120
- return Reflect.getMetadata('design:paramtypes', reference);
128
+ reflectTokens(constructable) {
129
+ return Reflect.getMetadata('design:paramtypes', constructable);
121
130
  }
122
131
  createFromScope({ token, scope }) {
123
132
  const instance = scope.request(token);
@@ -129,32 +138,29 @@ class Dependency {
129
138
  return object;
130
139
  }
131
140
  createFromContainer(token) {
132
- const { warehouse: { scope } } = this;
133
- return this.createFromScope({ token, scope });
141
+ return this.createFromScope({ token, scope: this.warehouse.scope });
134
142
  }
135
- createInstance(props) {
136
- const { token, scopeable, singleton } = props;
137
- const { scope } = this;
143
+ createInstance(options) {
144
+ const { token, scopeable, singleton } = options;
138
145
  if (singleton) {
139
146
  return this.createFromContainer(token);
140
147
  }
141
148
  if (scopeable) {
142
- return this.createFromScope({ token, scope });
149
+ return this.createFromScope({ token, scope: this.scope });
143
150
  }
144
151
  return this.createObject(token);
145
152
  }
146
153
  createFromDecorator(inject) {
147
154
  const { token, scopeable, singleton } = inject;
148
155
  const locator = requestInLocator(token);
149
- if (locator) {
150
- const { useClass: token } = locator;
151
- return this.createInstance({ token, scopeable, singleton });
152
- }
153
- return this.createInstance({ token, scopeable, singleton });
156
+ return this.createInstance({
157
+ token: locator?.useClass ?? token,
158
+ scopeable,
159
+ singleton
160
+ });
154
161
  }
155
162
  createReflectArgs({ tokens, token }) {
156
- const { warehouse, context } = this;
157
- const injects = warehouse.injects.request(token);
163
+ const injects = this.warehouse.injects.request(token);
158
164
  return tokens.map((token, index) => {
159
165
  const inject = injects[index];
160
166
  if (inject) {
@@ -166,7 +172,7 @@ class Dependency {
166
172
  return this.createInstance({ token, scopeable, singleton });
167
173
  }
168
174
  if (token === Context) {
169
- return context;
175
+ return this.context;
170
176
  }
171
177
  return this.createObject(token);
172
178
  });
@@ -190,40 +196,37 @@ class Container {
190
196
  this.warehouse.injects.push(options);
191
197
  }
192
198
  createInjectable(options) {
193
- const { token, context } = options;
194
- const { warehouse } = this;
195
- const dependency = new Dependency({ warehouse, context });
196
- return dependency.build(token);
199
+ return new Dependency(this.warehouse, options.context).build(options.token);
197
200
  }
198
201
  }
199
202
 
200
203
  const invertlyContainer = new Container();
201
204
  function createFromInvertly(options, container) {
202
- return (container || invertlyContainer).createInjectable(options);
205
+ return (container ?? invertlyContainer).createInjectable(options);
203
206
  }
204
207
  function invertly(token, container) {
205
208
  return createFromInvertly({ token }, container);
206
209
  }
207
210
  function registerInjectable(options, container) {
208
- (container || invertlyContainer).registerInjectable(options);
211
+ (container ?? invertlyContainer).registerInjectable(options);
209
212
  }
210
213
  function registerInject(options, container) {
211
- (container || invertlyContainer).registerInject(options);
214
+ (container ?? invertlyContainer).registerInject(options);
212
215
  }
213
216
  function registerDependency(token, options) {
214
217
  const { container, injects, scopeable, singleton } = options;
215
218
  registerInjectable({
216
219
  token,
217
- scopeable: scopeable || false,
218
- singleton: singleton || false
220
+ scopeable: scopeable ?? false,
221
+ singleton: singleton ?? false
219
222
  }, container);
220
223
  injects?.forEach((inject, indexParent) => {
221
224
  const { index, scopeable: childrenScopeable, singleton: childrenSingleton, token: childrenToken } = inject;
222
225
  registerInject({
223
- index: index || indexParent,
226
+ index: index ?? indexParent,
224
227
  parent: token,
225
- scopeable: childrenScopeable || scopeable || false,
226
- singleton: childrenSingleton || singleton || false,
228
+ scopeable: childrenScopeable ?? scopeable ?? false,
229
+ singleton: childrenSingleton ?? singleton ?? false,
227
230
  token: childrenToken
228
231
  }, container);
229
232
  });
@@ -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 extends Map {\r\n request(key) {\r\n return this.get(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 config = this.warehouse.injectables.request(injectable);\r\n if (!config) {\r\n throw Error(`Class ${injectable.toString()} is not found in the collection`);\r\n }\r\n const { scopeable, singleton, token } = config;\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(reference) {\r\n return Reflect.getMetadata('design:paramtypes', reference);\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 const { warehouse: { scope } } = this;\r\n return this.createFromScope({ token, scope });\r\n }\r\n createInstance(props) {\r\n const { token, scopeable, singleton } = props;\r\n const { scope } = this;\r\n if (singleton) {\r\n return this.createFromContainer(token);\r\n }\r\n if (scopeable) {\r\n return this.createFromScope({ token, 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 if (locator) {\r\n const { useClass: token } = locator;\r\n return this.createInstance({ token, scopeable, singleton });\r\n }\r\n return this.createInstance({ token, scopeable, singleton });\r\n }\r\n createReflectArgs({ tokens, token }) {\r\n const { warehouse, context } = this;\r\n const injects = 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 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 const { token, context } = options;\r\n const { warehouse } = this;\r\n const dependency = new Dependency({ warehouse, context });\r\n return dependency.build(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","../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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"}
package/dist/es/index.js CHANGED
@@ -1,8 +1,17 @@
1
1
  import 'reflect-metadata';
2
2
 
3
- class Context extends Map {
3
+ class Context {
4
+ constructor() {
5
+ this.store = new Map();
6
+ }
7
+ set(key, value) {
8
+ this.store.set(key, value);
9
+ }
4
10
  request(key) {
5
- return this.get(key);
11
+ return this.store.get(key);
12
+ }
13
+ has(key) {
14
+ return this.store.has(key);
6
15
  }
7
16
  }
8
17
 
@@ -91,17 +100,17 @@ class Warehouse {
91
100
  }
92
101
  }
93
102
  class Dependency {
94
- constructor({ warehouse, context }) {
103
+ constructor(warehouse, context) {
95
104
  this.warehouse = warehouse;
96
105
  this.context = context;
97
106
  this.scope = new ScopeStore();
98
107
  }
99
108
  build(injectable) {
100
- const config = this.warehouse.injectables.request(injectable);
101
- if (!config) {
109
+ const options = this.warehouse.injectables.request(injectable);
110
+ if (!options) {
102
111
  throw Error(`Class ${injectable.toString()} is not found in the collection`);
103
112
  }
104
- const { scopeable, singleton, token } = config;
113
+ const { scopeable, singleton, token } = options;
105
114
  return this.createInstance({ token, scopeable, singleton });
106
115
  }
107
116
  createObject(token) {
@@ -112,8 +121,8 @@ class Dependency {
112
121
  : this.createTokenArgs(token);
113
122
  return new Constructor(...params);
114
123
  }
115
- reflectTokens(reference) {
116
- return Reflect.getMetadata('design:paramtypes', reference);
124
+ reflectTokens(constructable) {
125
+ return Reflect.getMetadata('design:paramtypes', constructable);
117
126
  }
118
127
  createFromScope({ token, scope }) {
119
128
  const instance = scope.request(token);
@@ -125,32 +134,29 @@ class Dependency {
125
134
  return object;
126
135
  }
127
136
  createFromContainer(token) {
128
- const { warehouse: { scope } } = this;
129
- return this.createFromScope({ token, scope });
137
+ return this.createFromScope({ token, scope: this.warehouse.scope });
130
138
  }
131
- createInstance(props) {
132
- const { token, scopeable, singleton } = props;
133
- const { scope } = this;
139
+ createInstance(options) {
140
+ const { token, scopeable, singleton } = options;
134
141
  if (singleton) {
135
142
  return this.createFromContainer(token);
136
143
  }
137
144
  if (scopeable) {
138
- return this.createFromScope({ token, scope });
145
+ return this.createFromScope({ token, scope: this.scope });
139
146
  }
140
147
  return this.createObject(token);
141
148
  }
142
149
  createFromDecorator(inject) {
143
150
  const { token, scopeable, singleton } = inject;
144
151
  const locator = requestInLocator(token);
145
- if (locator) {
146
- const { useClass: token } = locator;
147
- return this.createInstance({ token, scopeable, singleton });
148
- }
149
- return this.createInstance({ token, scopeable, singleton });
152
+ return this.createInstance({
153
+ token: locator?.useClass ?? token,
154
+ scopeable,
155
+ singleton
156
+ });
150
157
  }
151
158
  createReflectArgs({ tokens, token }) {
152
- const { warehouse, context } = this;
153
- const injects = warehouse.injects.request(token);
159
+ const injects = this.warehouse.injects.request(token);
154
160
  return tokens.map((token, index) => {
155
161
  const inject = injects[index];
156
162
  if (inject) {
@@ -162,7 +168,7 @@ class Dependency {
162
168
  return this.createInstance({ token, scopeable, singleton });
163
169
  }
164
170
  if (token === Context) {
165
- return context;
171
+ return this.context;
166
172
  }
167
173
  return this.createObject(token);
168
174
  });
@@ -186,40 +192,37 @@ class Container {
186
192
  this.warehouse.injects.push(options);
187
193
  }
188
194
  createInjectable(options) {
189
- const { token, context } = options;
190
- const { warehouse } = this;
191
- const dependency = new Dependency({ warehouse, context });
192
- return dependency.build(token);
195
+ return new Dependency(this.warehouse, options.context).build(options.token);
193
196
  }
194
197
  }
195
198
 
196
199
  const invertlyContainer = new Container();
197
200
  function createFromInvertly(options, container) {
198
- return (container || invertlyContainer).createInjectable(options);
201
+ return (container ?? invertlyContainer).createInjectable(options);
199
202
  }
200
203
  function invertly(token, container) {
201
204
  return createFromInvertly({ token }, container);
202
205
  }
203
206
  function registerInjectable(options, container) {
204
- (container || invertlyContainer).registerInjectable(options);
207
+ (container ?? invertlyContainer).registerInjectable(options);
205
208
  }
206
209
  function registerInject(options, container) {
207
- (container || invertlyContainer).registerInject(options);
210
+ (container ?? invertlyContainer).registerInject(options);
208
211
  }
209
212
  function registerDependency(token, options) {
210
213
  const { container, injects, scopeable, singleton } = options;
211
214
  registerInjectable({
212
215
  token,
213
- scopeable: scopeable || false,
214
- singleton: singleton || false
216
+ scopeable: scopeable ?? false,
217
+ singleton: singleton ?? false
215
218
  }, container);
216
219
  injects?.forEach((inject, indexParent) => {
217
220
  const { index, scopeable: childrenScopeable, singleton: childrenSingleton, token: childrenToken } = inject;
218
221
  registerInject({
219
- index: index || indexParent,
222
+ index: index ?? indexParent,
220
223
  parent: token,
221
- scopeable: childrenScopeable || scopeable || false,
222
- singleton: childrenSingleton || singleton || false,
224
+ scopeable: childrenScopeable ?? scopeable ?? false,
225
+ singleton: childrenSingleton ?? singleton ?? false,
223
226
  token: childrenToken
224
227
  }, container);
225
228
  });
@@ -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 extends Map {\r\n request(key) {\r\n return this.get(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 config = this.warehouse.injectables.request(injectable);\r\n if (!config) {\r\n throw Error(`Class ${injectable.toString()} is not found in the collection`);\r\n }\r\n const { scopeable, singleton, token } = config;\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(reference) {\r\n return Reflect.getMetadata('design:paramtypes', reference);\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 const { warehouse: { scope } } = this;\r\n return this.createFromScope({ token, scope });\r\n }\r\n createInstance(props) {\r\n const { token, scopeable, singleton } = props;\r\n const { scope } = this;\r\n if (singleton) {\r\n return this.createFromContainer(token);\r\n }\r\n if (scopeable) {\r\n return this.createFromScope({ token, 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 if (locator) {\r\n const { useClass: token } = locator;\r\n return this.createInstance({ token, scopeable, singleton });\r\n }\r\n return this.createInstance({ token, scopeable, singleton });\r\n }\r\n createReflectArgs({ tokens, token }) {\r\n const { warehouse, context } = this;\r\n const injects = 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 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 const { token, context } = options;\r\n const { warehouse } = this;\r\n const dependency = new Dependency({ warehouse, context });\r\n return dependency.build(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","../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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"}
@@ -8,17 +8,17 @@ class Warehouse {
8
8
  }
9
9
  }
10
10
  class Dependency {
11
- constructor({ warehouse, context }) {
11
+ constructor(warehouse, context) {
12
12
  this.warehouse = warehouse;
13
13
  this.context = context;
14
14
  this.scope = new ScopeStore();
15
15
  }
16
16
  build(injectable) {
17
- const config = this.warehouse.injectables.request(injectable);
18
- if (!config) {
17
+ const options = this.warehouse.injectables.request(injectable);
18
+ if (!options) {
19
19
  throw Error(`Class ${injectable.toString()} is not found in the collection`);
20
20
  }
21
- const { scopeable, singleton, token } = config;
21
+ const { scopeable, singleton, token } = options;
22
22
  return this.createInstance({ token, scopeable, singleton });
23
23
  }
24
24
  createObject(token) {
@@ -29,8 +29,8 @@ class Dependency {
29
29
  : this.createTokenArgs(token);
30
30
  return new Constructor(...params);
31
31
  }
32
- reflectTokens(reference) {
33
- return Reflect.getMetadata('design:paramtypes', reference);
32
+ reflectTokens(constructable) {
33
+ return Reflect.getMetadata('design:paramtypes', constructable);
34
34
  }
35
35
  createFromScope({ token, scope }) {
36
36
  const instance = scope.request(token);
@@ -42,32 +42,29 @@ class Dependency {
42
42
  return object;
43
43
  }
44
44
  createFromContainer(token) {
45
- const { warehouse: { scope } } = this;
46
- return this.createFromScope({ token, scope });
45
+ return this.createFromScope({ token, scope: this.warehouse.scope });
47
46
  }
48
- createInstance(props) {
49
- const { token, scopeable, singleton } = props;
50
- const { scope } = this;
47
+ createInstance(options) {
48
+ const { token, scopeable, singleton } = options;
51
49
  if (singleton) {
52
50
  return this.createFromContainer(token);
53
51
  }
54
52
  if (scopeable) {
55
- return this.createFromScope({ token, scope });
53
+ return this.createFromScope({ token, scope: this.scope });
56
54
  }
57
55
  return this.createObject(token);
58
56
  }
59
57
  createFromDecorator(inject) {
60
58
  const { token, scopeable, singleton } = inject;
61
59
  const locator = requestInLocator(token);
62
- if (locator) {
63
- const { useClass: token } = locator;
64
- return this.createInstance({ token, scopeable, singleton });
65
- }
66
- return this.createInstance({ token, scopeable, singleton });
60
+ return this.createInstance({
61
+ token: locator?.useClass ?? token,
62
+ scopeable,
63
+ singleton
64
+ });
67
65
  }
68
66
  createReflectArgs({ tokens, token }) {
69
- const { warehouse, context } = this;
70
- const injects = warehouse.injects.request(token);
67
+ const injects = this.warehouse.injects.request(token);
71
68
  return tokens.map((token, index) => {
72
69
  const inject = injects[index];
73
70
  if (inject) {
@@ -79,7 +76,7 @@ class Dependency {
79
76
  return this.createInstance({ token, scopeable, singleton });
80
77
  }
81
78
  if (token === Context) {
82
- return context;
79
+ return this.context;
83
80
  }
84
81
  return this.createObject(token);
85
82
  });
@@ -103,10 +100,7 @@ export class Container {
103
100
  this.warehouse.injects.push(options);
104
101
  }
105
102
  createInjectable(options) {
106
- const { token, context } = options;
107
- const { warehouse } = this;
108
- const dependency = new Dependency({ warehouse, context });
109
- return dependency.build(token);
103
+ return new Dependency(this.warehouse, options.context).build(options.token);
110
104
  }
111
105
  }
112
106
  //# sourceMappingURL=container.factory.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"container.factory.js","sourceRoot":"","sources":["../../../src/factories/container.factory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"container.factory.js","sourceRoot":"","sources":["../../../src/factories/container.factory.ts"],"names":[],"mappings":"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"}
@@ -1,31 +1,31 @@
1
1
  import { Container } from './container.factory';
2
2
  const invertlyContainer = new Container();
3
3
  function createFromInvertly(options, container) {
4
- return (container || invertlyContainer).createInjectable(options);
4
+ return (container ?? invertlyContainer).createInjectable(options);
5
5
  }
6
6
  export function invertly(token, container) {
7
7
  return createFromInvertly({ token }, container);
8
8
  }
9
9
  export function registerInjectable(options, container) {
10
- (container || invertlyContainer).registerInjectable(options);
10
+ (container ?? invertlyContainer).registerInjectable(options);
11
11
  }
12
12
  export function registerInject(options, container) {
13
- (container || invertlyContainer).registerInject(options);
13
+ (container ?? invertlyContainer).registerInject(options);
14
14
  }
15
15
  export function registerDependency(token, options) {
16
16
  const { container, injects, scopeable, singleton } = options;
17
17
  registerInjectable({
18
18
  token,
19
- scopeable: scopeable || false,
20
- singleton: singleton || false
19
+ scopeable: scopeable ?? false,
20
+ singleton: singleton ?? false
21
21
  }, container);
22
22
  injects?.forEach((inject, indexParent) => {
23
23
  const { index, scopeable: childrenScopeable, singleton: childrenSingleton, token: childrenToken } = inject;
24
24
  registerInject({
25
- index: index || indexParent,
25
+ index: index ?? indexParent,
26
26
  parent: token,
27
- scopeable: childrenScopeable || scopeable || false,
28
- singleton: childrenSingleton || singleton || false,
27
+ scopeable: childrenScopeable ?? scopeable ?? false,
28
+ singleton: childrenSingleton ?? singleton ?? false,
29
29
  token: childrenToken
30
30
  }, container);
31
31
  });
@@ -1,4 +1,7 @@
1
1
  import { AbstractContext } from '../types';
2
- export declare class Context<K = string> extends Map<K, any> implements AbstractContext<K> {
2
+ export declare class Context<K = string> implements AbstractContext<K> {
3
+ private store;
4
+ set(key: K, value?: any): void;
3
5
  request<T = any>(key: K): Undefined<T>;
6
+ has(key: K): boolean;
4
7
  }
@@ -1,6 +1,15 @@
1
- export class Context extends Map {
1
+ export class Context {
2
+ constructor() {
3
+ this.store = new Map();
4
+ }
5
+ set(key, value) {
6
+ this.store.set(key, value);
7
+ }
2
8
  request(key) {
3
- return this.get(key);
9
+ return this.store.get(key);
10
+ }
11
+ has(key) {
12
+ return this.store.has(key);
4
13
  }
5
14
  }
6
15
  //# sourceMappingURL=context.store.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.store.js","sourceRoot":"","sources":["../../../src/stores/context.store.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,OACX,SAAQ,GAAW;IAGZ,OAAO,CAAU,GAAM;QAC5B,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;CACF"}
1
+ {"version":3,"file":"context.store.js","sourceRoot":"","sources":["../../../src/stores/context.store.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,OAAO;IAApB;QACU,UAAK,GAAgB,IAAI,GAAG,EAAE,CAAC;IAazC,CAAC;IAXQ,GAAG,CAAC,GAAM,EAAE,KAAW;QAC5B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAEM,OAAO,CAAU,GAAM;QAC5B,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAEM,GAAG,CAAC,GAAM;QACf,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;CACF"}
@@ -1,3 +1,5 @@
1
1
  export interface AbstractContext<K = string> {
2
+ set(key: K, value?: any): void;
2
3
  request<T = any>(key: K): Undefined<T>;
4
+ has(key: K): boolean;
3
5
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rolster/invertly",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "description": "Invertly is a package that allows you to implement class mapping to identify and inject their dependencies.",
5
5
  "module": "dist/esm/index.js",
6
6
  "main": "dist/cjs/index.js",