@rolster/invertly 1.0.4 → 1.0.6

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
@@ -95,13 +95,13 @@ class Warehouse {
95
95
  }
96
96
  }
97
97
  class Dependency {
98
- constructor({ container, context }) {
99
- this.container = container;
98
+ constructor({ warehouse, context }) {
99
+ this.warehouse = warehouse;
100
100
  this.context = context;
101
101
  this.scope = new ScopeStore();
102
102
  }
103
103
  build(injectable) {
104
- const config = this.container.injectables.fetch(injectable);
104
+ const config = this.warehouse.injectables.fetch(injectable);
105
105
  if (!config) {
106
106
  throw Error(`Class ${injectable.toString()} is not found in the collection`);
107
107
  }
@@ -129,7 +129,7 @@ class Dependency {
129
129
  return object;
130
130
  }
131
131
  createFromContainer(token) {
132
- const { container: { scope } } = this;
132
+ const { warehouse: { scope } } = this;
133
133
  return this.createFromScope({ token, scope });
134
134
  }
135
135
  createInstance(props) {
@@ -153,8 +153,8 @@ class Dependency {
153
153
  return this.createInstance({ token, scopeable, singleton });
154
154
  }
155
155
  createReflectArgs({ tokens, token }) {
156
- const { container, context } = this;
157
- const injects = container.injects.fetch(token);
156
+ const { warehouse, context } = this;
157
+ const injects = warehouse.injects.fetch(token);
158
158
  return tokens.map((token, index) => {
159
159
  const inject = injects[index];
160
160
  if (inject) {
@@ -172,43 +172,70 @@ class Dependency {
172
172
  });
173
173
  }
174
174
  createTokenArgs(token) {
175
- const injects = this.container.injects.fetch(token);
176
- return injects.reduce((objects, { token }, index) => {
177
- objects[index] = this.createObject(token);
175
+ const injects = this.warehouse.injects.fetch(token);
176
+ return injects.reduce((objects, { index, scopeable, singleton, token }) => {
177
+ objects[index] = this.createInstance({ token, scopeable, singleton });
178
178
  return objects;
179
179
  }, []);
180
180
  }
181
181
  }
182
182
  class Container {
183
183
  constructor() {
184
- this.container = new Warehouse();
184
+ this.warehouse = new Warehouse();
185
185
  }
186
186
  registerInjectable(config) {
187
- this.container.injectables.push(config);
187
+ this.warehouse.injectables.push(config);
188
188
  }
189
189
  registerInject(config) {
190
- this.container.injects.push(config);
190
+ this.warehouse.injects.push(config);
191
191
  }
192
192
  createInjectable(config) {
193
193
  const { token, context } = config;
194
- const { container } = this;
195
- const dependency = new Dependency({ container, context });
194
+ const { warehouse } = this;
195
+ const dependency = new Dependency({ warehouse, context });
196
196
  return dependency.build(token);
197
197
  }
198
198
  }
199
199
 
200
200
  const rootContainer = new Container();
201
- const createFromInvertly = ({ config, container }) => {
201
+ const createFromInvertly = (options) => {
202
+ const { config, container } = options;
202
203
  return (container || rootContainer).createInjectable(config);
203
204
  };
204
205
  const invertly = (token, { container } = {}) => {
205
206
  return createFromInvertly({ config: { token }, container });
206
207
  };
207
- const registerInjectable = ({ config, container }) => {
208
+ const registerInjectable = (options) => {
209
+ const { config, container } = options;
208
210
  (container || rootContainer).registerInjectable(config);
209
211
  };
210
- const registerInject = ({ config, container }) => {
212
+ const registerInject = (options) => {
213
+ const { config, container } = options;
211
214
  (container || rootContainer).registerInject(config);
215
+ };
216
+ const registerDependency = (token, options) => {
217
+ const { container, injects, scopeable, singleton } = options;
218
+ registerInjectable({
219
+ config: {
220
+ token,
221
+ scopeable: scopeable || false,
222
+ singleton: singleton || false
223
+ },
224
+ container
225
+ });
226
+ injects?.forEach((inject, indexParent) => {
227
+ const { index, scopeable: childrenScopeable, singleton: childrenSingleton, token: childrenToken } = inject;
228
+ registerInject({
229
+ config: {
230
+ index: index || indexParent,
231
+ parent: token,
232
+ scopeable: childrenScopeable || scopeable || false,
233
+ singleton: childrenSingleton || singleton || false,
234
+ token: childrenToken
235
+ },
236
+ container
237
+ });
238
+ });
212
239
  };
213
240
 
214
241
  const createInject = ({ scopeable, singleton, token }) => {
@@ -250,6 +277,7 @@ exports["default"] = createFromInvertly;
250
277
  exports.fetchInLocator = fetchInLocator;
251
278
  exports.invertly = invertly;
252
279
  exports.pushInLocator = pushInLocator;
280
+ exports.registerDependency = registerDependency;
253
281
  exports.registerInject = registerInject;
254
282
  exports.registerInjectable = registerInjectable;
255
283
  exports.saveInLocator = saveInLocator;
@@ -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 fetch(key) {\r\n return this.has(key) ? this.get(key) : undefined;\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(config) {\r\n const { parent, index } = config;\r\n const injects = this.fetch(parent);\r\n injects[index] = config;\r\n }\r\n fetch(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(config) {\r\n this.collection.set(config.token, config);\r\n }\r\n fetch(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 fetch(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 fetchInLocator(token) {\r\n return locatorStore.fetch(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 fetch(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, fetchInLocator } 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({ container, context }) {\r\n this.container = container;\r\n this.context = context;\r\n this.scope = new ScopeStore();\r\n }\r\n build(injectable) {\r\n const config = this.container.injectables.fetch(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.fetch(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 { container: { 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 = fetchInLocator(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 { container, context } = this;\r\n const injects = container.injects.fetch(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 = fetchInLocator(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.container.injects.fetch(token);\r\n return injects.reduce((objects, { token }, index) => {\r\n objects[index] = this.createObject(token);\r\n return objects;\r\n }, []);\r\n }\r\n}\r\nexport class Container {\r\n constructor() {\r\n this.container = new Warehouse();\r\n }\r\n registerInjectable(config) {\r\n this.container.injectables.push(config);\r\n }\r\n registerInject(config) {\r\n this.container.injects.push(config);\r\n }\r\n createInjectable(config) {\r\n const { token, context } = config;\r\n const { container } = this;\r\n const dependency = new Dependency({ container, 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 rootContainer = new Container();\r\nconst createFromInvertly = ({ config, container }) => {\r\n return (container || rootContainer).createInjectable(config);\r\n};\r\nexport const invertly = (token, { container } = {}) => {\r\n return createFromInvertly({ config: { token }, container });\r\n};\r\nexport const registerInjectable = ({ config, container }) => {\r\n (container || rootContainer).registerInjectable(config);\r\n};\r\nexport const registerInject = ({ config, container }) => {\r\n (container || rootContainer).registerInject(config);\r\n};\r\nexport { Container } from './container.factory';\r\nexport default createFromInvertly;\r\n//# sourceMappingURL=index.js.map","import { registerInject } from '../factories';\r\nconst createInject = ({ scopeable, singleton, token }) => {\r\n return (parent, _, index) => {\r\n registerInject({\r\n config: { index, parent, scopeable, singleton, token }\r\n });\r\n };\r\n};\r\nexport const Singleton = (token) => {\r\n return createInject({ token, scopeable: false, singleton: true });\r\n};\r\nexport const Scope = (token) => {\r\n return createInject({ token, scopeable: true, singleton: false });\r\n};\r\nexport const 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\nconst DEFAULT_CONFIG = {\r\n scopeable: false,\r\n singleton: false\r\n};\r\nexport const Injectable = (config) => {\r\n const finalConfig = { ...DEFAULT_CONFIG, ...config };\r\n const { scopeable, singleton } = finalConfig;\r\n return (token) => {\r\n registerInjectable({ config: { scopeable, singleton, token } });\r\n };\r\n};\r\n//# sourceMappingURL=injectable.decorator.js.map"],"names":[],"mappings":";;;;;;AAAO,MAAM,OAAO,SAAS,GAAG,CAAC;AACjC,IAAI,KAAK,CAAC,GAAG,EAAE;AACf,QAAQ,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;AACzD,KAAK;AACL;;ACJO,MAAM,WAAW,CAAC;AACzB,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,EAAE,CAAC;AACpC,KAAK;AACL,IAAI,IAAI,CAAC,MAAM,EAAE;AACjB,QAAQ,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;AACzC,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC3C,QAAQ,OAAO,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC;AAChC,KAAK;AACL,IAAI,KAAK,CAAC,KAAK,EAAE;AACjB,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACnD,QAAQ,IAAI,OAAO,EAAE;AACrB,YAAY,OAAO,OAAO,CAAC;AAC3B,SAAS;AACT,QAAQ,MAAM,OAAO,GAAG,EAAE,CAAC;AAC3B,QAAQ,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AAC5C,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL;;AClBO,MAAM,eAAe,CAAC;AAC7B,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,EAAE,CAAC;AACpC,KAAK;AACL,IAAI,IAAI,CAAC,MAAM,EAAE;AACjB,QAAQ,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AAClD,KAAK;AACL,IAAI,KAAK,CAAC,KAAK,EAAE;AACjB,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC1C,KAAK;AACL;;ACVA,MAAM,YAAY,CAAC;AACnB,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,EAAE,CAAC;AACpC,KAAK;AACL,IAAI,IAAI,CAAC,YAAY,EAAE;AACvB,QAAQ,YAAY,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK;AACzC,YAAY,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AACtD,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE;AAC3B,QAAQ,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE;AAC5E,YAAY,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC;AAClD,YAAY,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;AAC5D,SAAS;AACT,aAAa,IAAI,KAAK,EAAE;AACxB,YAAY,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;AACvE,SAAS;AACT,KAAK;AACL,IAAI,KAAK,CAAC,KAAK,EAAE;AACjB,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC1C,KAAK;AACL,CAAC;AACD,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;AACjC,SAAS,aAAa,CAAC,YAAY,EAAE;AAC5C,IAAI,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACpC,CAAC;AACM,SAAS,aAAa,CAAC,SAAS,EAAE,KAAK,EAAE;AAChD,IAAI,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AACxC,CAAC;AACM,SAAS,cAAc,CAAC,KAAK,EAAE;AACtC,IAAI,OAAO,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACrC;;AC/BO,MAAM,UAAU,CAAC;AACxB,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,EAAE,CAAC;AACpC,KAAK;AACL,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE;AACvB,QAAQ,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAC1C,KAAK;AACL,IAAI,KAAK,CAAC,KAAK,EAAE;AACjB,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC1C,KAAK;AACL;;ACRA,MAAM,SAAS,CAAC;AAChB,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,KAAK,GAAG,IAAI,UAAU,EAAE,CAAC;AACtC,QAAQ,IAAI,CAAC,WAAW,GAAG,IAAI,eAAe,EAAE,CAAC;AACjD,QAAQ,IAAI,CAAC,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;AACzC,KAAK;AACL,CAAC;AACD,MAAM,UAAU,CAAC;AACjB,IAAI,WAAW,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE;AACxC,QAAQ,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;AACnC,QAAQ,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AAC/B,QAAQ,IAAI,CAAC,KAAK,GAAG,IAAI,UAAU,EAAE,CAAC;AACtC,KAAK;AACL,IAAI,KAAK,CAAC,UAAU,EAAE;AACtB,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;AACpE,QAAQ,IAAI,CAAC,MAAM,EAAE;AACrB,YAAY,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC,+BAA+B,CAAC,CAAC,CAAC;AACzF,SAAS;AACT,QAAQ,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;AACvD,QAAQ,OAAO,IAAI,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;AACpE,KAAK;AACL,IAAI,YAAY,CAAC,KAAK,EAAE;AACxB,QAAQ,MAAM,WAAW,GAAG,KAAK,CAAC;AAClC,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;AACvD,QAAQ,MAAM,MAAM,GAAG,MAAM;AAC7B,cAAc,IAAI,CAAC,iBAAiB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AACvD,cAAc,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;AAC1C,QAAQ,OAAO,IAAI,WAAW,CAAC,GAAG,MAAM,CAAC,CAAC;AAC1C,KAAK;AACL,IAAI,aAAa,CAAC,SAAS,EAAE;AAC7B,QAAQ,OAAO,OAAO,CAAC,WAAW,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC;AACnE,KAAK;AACL,IAAI,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;AACtC,QAAQ,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC5C,QAAQ,IAAI,QAAQ,EAAE;AACtB,YAAY,OAAO,QAAQ,CAAC;AAC5B,SAAS;AACT,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AAChD,QAAQ,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AAClC,QAAQ,OAAO,MAAM,CAAC;AACtB,KAAK;AACL,IAAI,mBAAmB,CAAC,KAAK,EAAE;AAC/B,QAAQ,MAAM,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,CAAC;AAC9C,QAAQ,OAAO,IAAI,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;AACtD,KAAK;AACL,IAAI,cAAc,CAAC,KAAK,EAAE;AAC1B,QAAQ,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;AACtD,QAAQ,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;AAC/B,QAAQ,IAAI,SAAS,EAAE;AACvB,YAAY,OAAO,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;AACnD,SAAS;AACT,QAAQ,IAAI,SAAS,EAAE;AACvB,YAAY,OAAO,IAAI,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;AAC1D,SAAS;AACT,QAAQ,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AACxC,KAAK;AACL,IAAI,mBAAmB,CAAC,MAAM,EAAE;AAChC,QAAQ,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;AACvD,QAAQ,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;AAC9C,QAAQ,IAAI,OAAO,EAAE;AACrB,YAAY,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;AAChD,YAAY,OAAO,IAAI,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;AACxE,SAAS;AACT,QAAQ,OAAO,IAAI,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;AACpE,KAAK;AACL,IAAI,iBAAiB,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE;AACzC,QAAQ,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;AAC5C,QAAQ,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACvD,QAAQ,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK;AAC5C,YAAY,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;AAC1C,YAAY,IAAI,MAAM,EAAE;AACxB,gBAAgB,OAAO,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;AACxD,aAAa;AACb,YAAY,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;AAClD,YAAY,IAAI,OAAO,EAAE;AACzB,gBAAgB,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;AAC1E,gBAAgB,OAAO,IAAI,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;AAC5E,aAAa;AACb,YAAY,IAAI,KAAK,KAAK,OAAO,EAAE;AACnC,gBAAgB,OAAO,OAAO,CAAC;AAC/B,aAAa;AACb,YAAY,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AAC5C,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,eAAe,CAAC,KAAK,EAAE;AAC3B,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC5D,QAAQ,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,EAAE,KAAK,KAAK;AAC7D,YAAY,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AACtD,YAAY,OAAO,OAAO,CAAC;AAC3B,SAAS,EAAE,EAAE,CAAC,CAAC;AACf,KAAK;AACL,CAAC;AACM,MAAM,SAAS,CAAC;AACvB,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;AACzC,KAAK;AACL,IAAI,kBAAkB,CAAC,MAAM,EAAE;AAC/B,QAAQ,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAChD,KAAK;AACL,IAAI,cAAc,CAAC,MAAM,EAAE;AAC3B,QAAQ,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC5C,KAAK;AACL,IAAI,gBAAgB,CAAC,MAAM,EAAE;AAC7B,QAAQ,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;AAC1C,QAAQ,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;AACnC,QAAQ,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;AAClE,QAAQ,OAAO,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACvC,KAAK;AACL;;AC7GA,MAAM,aAAa,GAAG,IAAI,SAAS,EAAE,CAAC;AACjC,MAAC,kBAAkB,GAAG,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK;AACtD,IAAI,OAAO,CAAC,SAAS,IAAI,aAAa,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;AACjE,EAAE;AACU,MAAC,QAAQ,GAAG,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK;AACvD,IAAI,OAAO,kBAAkB,CAAC,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;AAChE,EAAE;AACU,MAAC,kBAAkB,GAAG,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK;AAC7D,IAAI,CAAC,SAAS,IAAI,aAAa,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC;AAC5D,EAAE;AACU,MAAC,cAAc,GAAG,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK;AACzD,IAAI,CAAC,SAAS,IAAI,aAAa,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;AACxD;;ACZA,MAAM,YAAY,GAAG,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK;AAC1D,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,KAAK;AACjC,QAAQ,cAAc,CAAC;AACvB,YAAY,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE;AAClE,SAAS,CAAC,CAAC;AACX,KAAK,CAAC;AACN,CAAC,CAAC;AACU,MAAC,SAAS,GAAG,CAAC,KAAK,KAAK;AACpC,IAAI,OAAO,YAAY,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACtE,EAAE;AACU,MAAC,KAAK,GAAG,CAAC,KAAK,KAAK;AAChC,IAAI,OAAO,YAAY,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;AACtE,EAAE;AACU,MAAC,OAAO,GAAG,CAAC,KAAK,KAAK;AAClC,IAAI,OAAO,YAAY,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;AACvE;;ACfA,MAAM,cAAc,GAAG;AACvB,IAAI,SAAS,EAAE,KAAK;AACpB,IAAI,SAAS,EAAE,KAAK;AACpB,CAAC,CAAC;AACU,MAAC,UAAU,GAAG,CAAC,MAAM,KAAK;AACtC,IAAI,MAAM,WAAW,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,MAAM,EAAE,CAAC;AACzD,IAAI,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,WAAW,CAAC;AACjD,IAAI,OAAO,CAAC,KAAK,KAAK;AACtB,QAAQ,kBAAkB,CAAC,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;AACxE,KAAK,CAAC;AACN;;;;;;;;;;;;;;;;"}
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 fetch(key) {\r\n return this.has(key) ? this.get(key) : undefined;\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(config) {\r\n const { parent, index } = config;\r\n const injects = this.fetch(parent);\r\n injects[index] = config;\r\n }\r\n fetch(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(config) {\r\n this.collection.set(config.token, config);\r\n }\r\n fetch(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 fetch(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 fetchInLocator(token) {\r\n return locatorStore.fetch(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 fetch(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, fetchInLocator } 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.fetch(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.fetch(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 = fetchInLocator(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.fetch(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 = fetchInLocator(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.fetch(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(config) {\r\n this.warehouse.injectables.push(config);\r\n }\r\n registerInject(config) {\r\n this.warehouse.injects.push(config);\r\n }\r\n createInjectable(config) {\r\n const { token, context } = config;\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 rootContainer = new Container();\r\nconst createFromInvertly = (options) => {\r\n const { config, container } = options;\r\n return (container || rootContainer).createInjectable(config);\r\n};\r\nexport const invertly = (token, { container } = {}) => {\r\n return createFromInvertly({ config: { token }, container });\r\n};\r\nexport const registerInjectable = (options) => {\r\n const { config, container } = options;\r\n (container || rootContainer).registerInjectable(config);\r\n};\r\nexport const registerInject = (options) => {\r\n const { config, container } = options;\r\n (container || rootContainer).registerInject(config);\r\n};\r\nexport const registerDependency = (token, options) => {\r\n const { container, injects, scopeable, singleton } = options;\r\n registerInjectable({\r\n config: {\r\n token,\r\n scopeable: scopeable || false,\r\n singleton: singleton || false\r\n },\r\n container\r\n });\r\n injects?.forEach((inject, indexParent) => {\r\n const { index, scopeable: childrenScopeable, singleton: childrenSingleton, token: childrenToken } = inject;\r\n registerInject({\r\n config: {\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 },\r\n container\r\n });\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\nconst createInject = ({ scopeable, singleton, token }) => {\r\n return (parent, _, index) => {\r\n registerInject({\r\n config: { index, parent, scopeable, singleton, token }\r\n });\r\n };\r\n};\r\nexport const Singleton = (token) => {\r\n return createInject({ token, scopeable: false, singleton: true });\r\n};\r\nexport const Scope = (token) => {\r\n return createInject({ token, scopeable: true, singleton: false });\r\n};\r\nexport const 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\nconst DEFAULT_CONFIG = {\r\n scopeable: false,\r\n singleton: false\r\n};\r\nexport const Injectable = (config) => {\r\n const finalConfig = { ...DEFAULT_CONFIG, ...config };\r\n const { scopeable, singleton } = finalConfig;\r\n return (token) => {\r\n registerInjectable({ config: { scopeable, singleton, token } });\r\n };\r\n};\r\n//# sourceMappingURL=injectable.decorator.js.map"],"names":[],"mappings":"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"}
package/dist/es/index.js CHANGED
@@ -91,13 +91,13 @@ class Warehouse {
91
91
  }
92
92
  }
93
93
  class Dependency {
94
- constructor({ container, context }) {
95
- this.container = container;
94
+ constructor({ warehouse, context }) {
95
+ this.warehouse = warehouse;
96
96
  this.context = context;
97
97
  this.scope = new ScopeStore();
98
98
  }
99
99
  build(injectable) {
100
- const config = this.container.injectables.fetch(injectable);
100
+ const config = this.warehouse.injectables.fetch(injectable);
101
101
  if (!config) {
102
102
  throw Error(`Class ${injectable.toString()} is not found in the collection`);
103
103
  }
@@ -125,7 +125,7 @@ class Dependency {
125
125
  return object;
126
126
  }
127
127
  createFromContainer(token) {
128
- const { container: { scope } } = this;
128
+ const { warehouse: { scope } } = this;
129
129
  return this.createFromScope({ token, scope });
130
130
  }
131
131
  createInstance(props) {
@@ -149,8 +149,8 @@ class Dependency {
149
149
  return this.createInstance({ token, scopeable, singleton });
150
150
  }
151
151
  createReflectArgs({ tokens, token }) {
152
- const { container, context } = this;
153
- const injects = container.injects.fetch(token);
152
+ const { warehouse, context } = this;
153
+ const injects = warehouse.injects.fetch(token);
154
154
  return tokens.map((token, index) => {
155
155
  const inject = injects[index];
156
156
  if (inject) {
@@ -168,43 +168,70 @@ class Dependency {
168
168
  });
169
169
  }
170
170
  createTokenArgs(token) {
171
- const injects = this.container.injects.fetch(token);
172
- return injects.reduce((objects, { token }, index) => {
173
- objects[index] = this.createObject(token);
171
+ const injects = this.warehouse.injects.fetch(token);
172
+ return injects.reduce((objects, { index, scopeable, singleton, token }) => {
173
+ objects[index] = this.createInstance({ token, scopeable, singleton });
174
174
  return objects;
175
175
  }, []);
176
176
  }
177
177
  }
178
178
  class Container {
179
179
  constructor() {
180
- this.container = new Warehouse();
180
+ this.warehouse = new Warehouse();
181
181
  }
182
182
  registerInjectable(config) {
183
- this.container.injectables.push(config);
183
+ this.warehouse.injectables.push(config);
184
184
  }
185
185
  registerInject(config) {
186
- this.container.injects.push(config);
186
+ this.warehouse.injects.push(config);
187
187
  }
188
188
  createInjectable(config) {
189
189
  const { token, context } = config;
190
- const { container } = this;
191
- const dependency = new Dependency({ container, context });
190
+ const { warehouse } = this;
191
+ const dependency = new Dependency({ warehouse, context });
192
192
  return dependency.build(token);
193
193
  }
194
194
  }
195
195
 
196
196
  const rootContainer = new Container();
197
- const createFromInvertly = ({ config, container }) => {
197
+ const createFromInvertly = (options) => {
198
+ const { config, container } = options;
198
199
  return (container || rootContainer).createInjectable(config);
199
200
  };
200
201
  const invertly = (token, { container } = {}) => {
201
202
  return createFromInvertly({ config: { token }, container });
202
203
  };
203
- const registerInjectable = ({ config, container }) => {
204
+ const registerInjectable = (options) => {
205
+ const { config, container } = options;
204
206
  (container || rootContainer).registerInjectable(config);
205
207
  };
206
- const registerInject = ({ config, container }) => {
208
+ const registerInject = (options) => {
209
+ const { config, container } = options;
207
210
  (container || rootContainer).registerInject(config);
211
+ };
212
+ const registerDependency = (token, options) => {
213
+ const { container, injects, scopeable, singleton } = options;
214
+ registerInjectable({
215
+ config: {
216
+ token,
217
+ scopeable: scopeable || false,
218
+ singleton: singleton || false
219
+ },
220
+ container
221
+ });
222
+ injects?.forEach((inject, indexParent) => {
223
+ const { index, scopeable: childrenScopeable, singleton: childrenSingleton, token: childrenToken } = inject;
224
+ registerInject({
225
+ config: {
226
+ index: index || indexParent,
227
+ parent: token,
228
+ scopeable: childrenScopeable || scopeable || false,
229
+ singleton: childrenSingleton || singleton || false,
230
+ token: childrenToken
231
+ },
232
+ container
233
+ });
234
+ });
208
235
  };
209
236
 
210
237
  const createInject = ({ scopeable, singleton, token }) => {
@@ -236,5 +263,5 @@ const Injectable = (config) => {
236
263
  };
237
264
  };
238
265
 
239
- export { Container, Context, Factory, Injectable, Scope, Singleton, createFromInvertly as default, fetchInLocator, invertly, pushInLocator, registerInject, registerInjectable, saveInLocator };
266
+ export { Container, Context, Factory, Injectable, Scope, Singleton, createFromInvertly as default, fetchInLocator, invertly, pushInLocator, registerDependency, registerInject, registerInjectable, saveInLocator };
240
267
  //# sourceMappingURL=index.js.map
@@ -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 fetch(key) {\r\n return this.has(key) ? this.get(key) : undefined;\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(config) {\r\n const { parent, index } = config;\r\n const injects = this.fetch(parent);\r\n injects[index] = config;\r\n }\r\n fetch(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(config) {\r\n this.collection.set(config.token, config);\r\n }\r\n fetch(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 fetch(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 fetchInLocator(token) {\r\n return locatorStore.fetch(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 fetch(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, fetchInLocator } 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({ container, context }) {\r\n this.container = container;\r\n this.context = context;\r\n this.scope = new ScopeStore();\r\n }\r\n build(injectable) {\r\n const config = this.container.injectables.fetch(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.fetch(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 { container: { 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 = fetchInLocator(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 { container, context } = this;\r\n const injects = container.injects.fetch(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 = fetchInLocator(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.container.injects.fetch(token);\r\n return injects.reduce((objects, { token }, index) => {\r\n objects[index] = this.createObject(token);\r\n return objects;\r\n }, []);\r\n }\r\n}\r\nexport class Container {\r\n constructor() {\r\n this.container = new Warehouse();\r\n }\r\n registerInjectable(config) {\r\n this.container.injectables.push(config);\r\n }\r\n registerInject(config) {\r\n this.container.injects.push(config);\r\n }\r\n createInjectable(config) {\r\n const { token, context } = config;\r\n const { container } = this;\r\n const dependency = new Dependency({ container, 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 rootContainer = new Container();\r\nconst createFromInvertly = ({ config, container }) => {\r\n return (container || rootContainer).createInjectable(config);\r\n};\r\nexport const invertly = (token, { container } = {}) => {\r\n return createFromInvertly({ config: { token }, container });\r\n};\r\nexport const registerInjectable = ({ config, container }) => {\r\n (container || rootContainer).registerInjectable(config);\r\n};\r\nexport const registerInject = ({ config, container }) => {\r\n (container || rootContainer).registerInject(config);\r\n};\r\nexport { Container } from './container.factory';\r\nexport default createFromInvertly;\r\n//# sourceMappingURL=index.js.map","import { registerInject } from '../factories';\r\nconst createInject = ({ scopeable, singleton, token }) => {\r\n return (parent, _, index) => {\r\n registerInject({\r\n config: { index, parent, scopeable, singleton, token }\r\n });\r\n };\r\n};\r\nexport const Singleton = (token) => {\r\n return createInject({ token, scopeable: false, singleton: true });\r\n};\r\nexport const Scope = (token) => {\r\n return createInject({ token, scopeable: true, singleton: false });\r\n};\r\nexport const 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\nconst DEFAULT_CONFIG = {\r\n scopeable: false,\r\n singleton: false\r\n};\r\nexport const Injectable = (config) => {\r\n const finalConfig = { ...DEFAULT_CONFIG, ...config };\r\n const { scopeable, singleton } = finalConfig;\r\n return (token) => {\r\n registerInjectable({ config: { scopeable, singleton, token } });\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 extends Map {\r\n fetch(key) {\r\n return this.has(key) ? this.get(key) : undefined;\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(config) {\r\n const { parent, index } = config;\r\n const injects = this.fetch(parent);\r\n injects[index] = config;\r\n }\r\n fetch(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(config) {\r\n this.collection.set(config.token, config);\r\n }\r\n fetch(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 fetch(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 fetchInLocator(token) {\r\n return locatorStore.fetch(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 fetch(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, fetchInLocator } 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.fetch(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.fetch(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 = fetchInLocator(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.fetch(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 = fetchInLocator(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.fetch(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(config) {\r\n this.warehouse.injectables.push(config);\r\n }\r\n registerInject(config) {\r\n this.warehouse.injects.push(config);\r\n }\r\n createInjectable(config) {\r\n const { token, context } = config;\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 rootContainer = new Container();\r\nconst createFromInvertly = (options) => {\r\n const { config, container } = options;\r\n return (container || rootContainer).createInjectable(config);\r\n};\r\nexport const invertly = (token, { container } = {}) => {\r\n return createFromInvertly({ config: { token }, container });\r\n};\r\nexport const registerInjectable = (options) => {\r\n const { config, container } = options;\r\n (container || rootContainer).registerInjectable(config);\r\n};\r\nexport const registerInject = (options) => {\r\n const { config, container } = options;\r\n (container || rootContainer).registerInject(config);\r\n};\r\nexport const registerDependency = (token, options) => {\r\n const { container, injects, scopeable, singleton } = options;\r\n registerInjectable({\r\n config: {\r\n token,\r\n scopeable: scopeable || false,\r\n singleton: singleton || false\r\n },\r\n container\r\n });\r\n injects?.forEach((inject, indexParent) => {\r\n const { index, scopeable: childrenScopeable, singleton: childrenSingleton, token: childrenToken } = inject;\r\n registerInject({\r\n config: {\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 },\r\n container\r\n });\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\nconst createInject = ({ scopeable, singleton, token }) => {\r\n return (parent, _, index) => {\r\n registerInject({\r\n config: { index, parent, scopeable, singleton, token }\r\n });\r\n };\r\n};\r\nexport const Singleton = (token) => {\r\n return createInject({ token, scopeable: false, singleton: true });\r\n};\r\nexport const Scope = (token) => {\r\n return createInject({ token, scopeable: true, singleton: false });\r\n};\r\nexport const 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\nconst DEFAULT_CONFIG = {\r\n scopeable: false,\r\n singleton: false\r\n};\r\nexport const Injectable = (config) => {\r\n const finalConfig = { ...DEFAULT_CONFIG, ...config };\r\n const { scopeable, singleton } = finalConfig;\r\n return (token) => {\r\n registerInjectable({ config: { scopeable, singleton, token } });\r\n };\r\n};\r\n//# sourceMappingURL=injectable.decorator.js.map"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import 'reflect-metadata';
2
2
  import { InjectConfig, InjectableConfig, InjectionConfig } from '../types';
3
3
  export declare class Container {
4
- private readonly container;
4
+ private readonly warehouse;
5
5
  constructor();
6
6
  registerInjectable(config: InjectableConfig): void;
7
7
  registerInject(config: InjectConfig): void;
@@ -8,13 +8,13 @@ class Warehouse {
8
8
  }
9
9
  }
10
10
  class Dependency {
11
- constructor({ container, context }) {
12
- this.container = container;
11
+ constructor({ warehouse, context }) {
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.container.injectables.fetch(injectable);
17
+ const config = this.warehouse.injectables.fetch(injectable);
18
18
  if (!config) {
19
19
  throw Error(`Class ${injectable.toString()} is not found in the collection`);
20
20
  }
@@ -42,7 +42,7 @@ class Dependency {
42
42
  return object;
43
43
  }
44
44
  createFromContainer(token) {
45
- const { container: { scope } } = this;
45
+ const { warehouse: { scope } } = this;
46
46
  return this.createFromScope({ token, scope });
47
47
  }
48
48
  createInstance(props) {
@@ -66,8 +66,8 @@ class Dependency {
66
66
  return this.createInstance({ token, scopeable, singleton });
67
67
  }
68
68
  createReflectArgs({ tokens, token }) {
69
- const { container, context } = this;
70
- const injects = container.injects.fetch(token);
69
+ const { warehouse, context } = this;
70
+ const injects = warehouse.injects.fetch(token);
71
71
  return tokens.map((token, index) => {
72
72
  const inject = injects[index];
73
73
  if (inject) {
@@ -85,27 +85,27 @@ class Dependency {
85
85
  });
86
86
  }
87
87
  createTokenArgs(token) {
88
- const injects = this.container.injects.fetch(token);
89
- return injects.reduce((objects, { token }, index) => {
90
- objects[index] = this.createObject(token);
88
+ const injects = this.warehouse.injects.fetch(token);
89
+ return injects.reduce((objects, { index, scopeable, singleton, token }) => {
90
+ objects[index] = this.createInstance({ token, scopeable, singleton });
91
91
  return objects;
92
92
  }, []);
93
93
  }
94
94
  }
95
95
  export class Container {
96
96
  constructor() {
97
- this.container = new Warehouse();
97
+ this.warehouse = new Warehouse();
98
98
  }
99
99
  registerInjectable(config) {
100
- this.container.injectables.push(config);
100
+ this.warehouse.injectables.push(config);
101
101
  }
102
102
  registerInject(config) {
103
- this.container.injects.push(config);
103
+ this.warehouse.injects.push(config);
104
104
  }
105
105
  createInjectable(config) {
106
106
  const { token, context } = config;
107
- const { container } = this;
108
- const dependency = new Dependency({ container, context });
107
+ const { warehouse } = this;
108
+ const dependency = new Dependency({ warehouse, context });
109
109
  return dependency.build(token);
110
110
  }
111
111
  }
@@ -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,5 +1,5 @@
1
1
  import { Container } from './container.factory';
2
- import { InjectConfig, InjectableConfig, InjectableToken, InjectionConfig } from '../types';
2
+ import { InjectConfig, InjectToken, InjectableConfig, InjectableToken, InjectionConfig } from '../types';
3
3
  interface InjectionOptions<T> {
4
4
  config: InjectionConfig<T>;
5
5
  container?: Container;
@@ -15,9 +15,22 @@ interface InjectOptions {
15
15
  config: InjectConfig;
16
16
  container?: Container;
17
17
  }
18
- declare const createFromInvertly: <T = unknown>({ config, container }: InjectionOptions<T>) => T;
18
+ interface DependencyConfig<T = unknown> {
19
+ token: InjectToken<T>;
20
+ index?: number;
21
+ scopeable?: boolean;
22
+ singleton?: boolean;
23
+ }
24
+ interface DependencyOptions {
25
+ container?: Container;
26
+ injects?: DependencyConfig[];
27
+ scopeable?: boolean;
28
+ singleton?: boolean;
29
+ }
30
+ declare const createFromInvertly: <T = unknown>(options: InjectionOptions<T>) => T;
19
31
  export declare const invertly: <T = unknown>(token: InjectableToken<T>, { container }?: InvertlyOptions) => T;
20
- export declare const registerInjectable: ({ config, container }: InjectableOptions) => void;
21
- export declare const registerInject: ({ config, container }: InjectOptions) => void;
32
+ export declare const registerInjectable: (options: InjectableOptions) => void;
33
+ export declare const registerInject: (options: InjectOptions) => void;
34
+ export declare const registerDependency: <T = unknown>(token: InjectableToken<T>, options: DependencyOptions) => void;
22
35
  export { Container } from './container.factory';
23
36
  export default createFromInvertly;
@@ -1,17 +1,44 @@
1
1
  import { Container } from './container.factory';
2
2
  const rootContainer = new Container();
3
- const createFromInvertly = ({ config, container }) => {
3
+ const createFromInvertly = (options) => {
4
+ const { config, container } = options;
4
5
  return (container || rootContainer).createInjectable(config);
5
6
  };
6
7
  export const invertly = (token, { container } = {}) => {
7
8
  return createFromInvertly({ config: { token }, container });
8
9
  };
9
- export const registerInjectable = ({ config, container }) => {
10
+ export const registerInjectable = (options) => {
11
+ const { config, container } = options;
10
12
  (container || rootContainer).registerInjectable(config);
11
13
  };
12
- export const registerInject = ({ config, container }) => {
14
+ export const registerInject = (options) => {
15
+ const { config, container } = options;
13
16
  (container || rootContainer).registerInject(config);
14
17
  };
18
+ export const registerDependency = (token, options) => {
19
+ const { container, injects, scopeable, singleton } = options;
20
+ registerInjectable({
21
+ config: {
22
+ token,
23
+ scopeable: scopeable || false,
24
+ singleton: singleton || false
25
+ },
26
+ container
27
+ });
28
+ injects?.forEach((inject, indexParent) => {
29
+ const { index, scopeable: childrenScopeable, singleton: childrenSingleton, token: childrenToken } = inject;
30
+ registerInject({
31
+ config: {
32
+ index: index || indexParent,
33
+ parent: token,
34
+ scopeable: childrenScopeable || scopeable || false,
35
+ singleton: childrenSingleton || singleton || false,
36
+ token: childrenToken
37
+ },
38
+ container
39
+ });
40
+ });
41
+ };
15
42
  export { Container } from './container.factory';
16
43
  export default createFromInvertly;
17
44
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/factories/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AA2BhD,MAAM,aAAa,GAAG,IAAI,SAAS,EAAE,CAAC;AAEtC,MAAM,kBAAkB,GAAG,CAAc,EACvC,MAAM,EACN,SAAS,EACW,EAAK,EAAE;IAC3B,OAAO,CAAC,SAAS,IAAI,aAAa,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAC/D,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,CACtB,KAAyB,EACzB,EAAE,SAAS,KAAsB,EAAE,EAChC,EAAE;IACL,OAAO,kBAAkB,CAAC,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;AAC9D,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,EACjC,MAAM,EACN,SAAS,EACS,EAAQ,EAAE;IAC5B,CAAC,SAAS,IAAI,aAAa,CAAC,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;AAC1D,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,EAAE,MAAM,EAAE,SAAS,EAAiB,EAAQ,EAAE;IAC3E,CAAC,SAAS,IAAI,aAAa,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;AACtD,CAAC,CAAC;AAEF,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,eAAe,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/factories/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AA0ChD,MAAM,aAAa,GAAG,IAAI,SAAS,EAAE,CAAC;AAEtC,MAAM,kBAAkB,GAAG,CAAc,OAA4B,EAAK,EAAE;IAC1E,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IAEtC,OAAO,CAAC,SAAS,IAAI,aAAa,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAC/D,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,CACtB,KAAyB,EACzB,EAAE,SAAS,KAAsB,EAAE,EAChC,EAAE;IACL,OAAO,kBAAkB,CAAC,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;AAC9D,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,OAA0B,EAAQ,EAAE;IACrE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IAEtC,CAAC,SAAS,IAAI,aAAa,CAAC,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;AAC1D,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,OAAsB,EAAQ,EAAE;IAC7D,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IAEtC,CAAC,SAAS,IAAI,aAAa,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;AACtD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,KAAyB,EACzB,OAA0B,EACpB,EAAE;IACR,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IAE7D,kBAAkB,CAAC;QACjB,MAAM,EAAE;YACN,KAAK;YACL,SAAS,EAAE,SAAS,IAAI,KAAK;YAC7B,SAAS,EAAE,SAAS,IAAI,KAAK;SAC9B;QACD,SAAS;KACV,CAAC,CAAC;IAEH,OAAO,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE;QACvC,MAAM,EACJ,KAAK,EACL,SAAS,EAAE,iBAAiB,EAC5B,SAAS,EAAE,iBAAiB,EAC5B,KAAK,EAAE,aAAa,EACrB,GAAG,MAAM,CAAC;QAEX,cAAc,CAAC;YACb,MAAM,EAAE;gBACN,KAAK,EAAE,KAAK,IAAI,WAAW;gBAC3B,MAAM,EAAE,KAAK;gBACb,SAAS,EAAE,iBAAiB,IAAI,SAAS,IAAI,KAAK;gBAClD,SAAS,EAAE,iBAAiB,IAAI,SAAS,IAAI,KAAK;gBAClD,KAAK,EAAE,aAAa;aACrB;YACD,SAAS;SACV,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,eAAe,kBAAkB,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import createFromInvertly from './factories';
2
2
  export { Factory, Injectable, Scope, Singleton } from './decorators';
3
- export { Container, invertly, registerInject, registerInjectable } from './factories';
3
+ export { Container, invertly, registerDependency, registerInject, registerInjectable } from './factories';
4
4
  export { Context, fetchInLocator, pushInLocator, saveInLocator } from './stores';
5
5
  export { Constructable, InjectableToken, InjectToken, LocatorConfig } from './types';
6
6
  export default createFromInvertly;
package/dist/esm/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import createFromInvertly from './factories';
2
2
  export { Factory, Injectable, Scope, Singleton } from './decorators';
3
- export { Container, invertly, registerInject, registerInjectable } from './factories';
3
+ export { Container, invertly, registerDependency, registerInject, registerInjectable } from './factories';
4
4
  export { Context, fetchInLocator, pushInLocator, saveInLocator } from './stores';
5
5
  export default createFromInvertly;
6
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,MAAM,aAAa,CAAC;AAE7C,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,EACL,SAAS,EACT,QAAQ,EACR,cAAc,EACd,kBAAkB,EACnB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,OAAO,EACP,cAAc,EACd,aAAa,EACb,aAAa,EACd,MAAM,UAAU,CAAC;AAQlB,eAAe,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,MAAM,aAAa,CAAC;AAE7C,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,EACL,SAAS,EACT,QAAQ,EACR,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EACnB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,OAAO,EACP,cAAc,EACd,aAAa,EACb,aAAa,EACd,MAAM,UAAU,CAAC;AAQlB,eAAe,kBAAkB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rolster/invertly",
3
- "version": "1.0.4",
3
+ "version": "1.0.6",
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",